ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IGRlNjM0NGUuLmVmYWIwZWIgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMzYsNiArMzYsNyBAQAogIwogdGFncwogVEFHUworbGludXgKIHZtbGludXgKIHZtbGludXoKIFN5c3RlbS5tYXAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1kZXZpY2VzLW5vZGUgYi9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtZGV2aWNlcy1ub2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YjgyY2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtZGV2aWNlcy1ub2RlCkBAIC0wLDAgKzEsNyBAQAorV2hhdDoJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZS9ub2RlWAorRGF0ZToJCU9jdG9iZXIgMjAwMgorQ29udGFjdDoJTGludXggTWVtb3J5IE1hbmFnZW1lbnQgbGlzdCA8bGludXgtbW1Aa3ZhY2sub3JnPgorRGVzY3JpcHRpb246CisJCVdoZW4gQ09ORklHX05VTUEgaXMgZW5hYmxlZCwgdGhpcyBpcyBhIGRpcmVjdG9yeSBjb250YWluaW5nCisJCWluZm9ybWF0aW9uIG9uIG5vZGUgWCBzdWNoIGFzIHdoYXQgQ1BVcyBhcmUgbG9jYWwgdG8gdGhlCisJCW5vZGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL3BjYy1jcHVmcmVxLnR4dCBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvcGNjLWNwdWZyZXEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllM2MzYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL3BjYy1jcHVmcmVxLnR4dApAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqICBwY2MtY3B1ZnJlcS50eHQgLSBQQ0MgaW50ZXJmYWNlIGRvY3VtZW50YXRpb24KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIE1hdHRoZXcgR2FycmV0dCA8bWpnQHJlZGhhdC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCisgKiAgICAgIE5hZ2FuYW5kYSBDaHVtYmFsa2FyIDxuYWdhbmFuZGEuY2h1bWJhbGthckBocC5jb20+CisgKgorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IgTk9OCisgKiAgSU5GUklOR0VNRU5ULiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICovCisKKworCQkJUHJvY2Vzc29yIENsb2NraW5nIENvbnRyb2wgRHJpdmVyCisJCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29udGVudHM6CistLS0tLS0tLS0KKzEuCUludHJvZHVjdGlvbgorMS4xCVBDQyBpbnRlcmZhY2UKKzEuMS4xICAgR2V0IEF2ZXJhZ2UgRnJlcXVlbmN5CisxLjEuMglTZXQgRGVzaXJlZCBGcmVxdWVuY3kKKzEuMglQbGF0Zm9ybXMgYWZmZWN0ZWQKKzIuCURyaXZlciBhbmQgL3N5cyBkZXRhaWxzCisyLjEJc2NhbGluZ19hdmFpbGFibGVfZnJlcXVlbmNpZXMKKzIuMgljcHVpbmZvX3RyYW5zaXRpb25fbGF0ZW5jeQorMi4zCWNwdWluZm9fY3VyX2ZyZXEKKzIuNAlyZWxhdGVkX2NwdXMKKzMuCUNhdmVhdHMKKworMS4gSW50cm9kdWN0aW9uOgorLS0tLS0tLS0tLS0tLS0tLQorUHJvY2Vzc29yIENsb2NraW5nIENvbnRyb2wgKFBDQykgaXMgYW4gaW50ZXJmYWNlIGJldHdlZW4gdGhlIHBsYXRmb3JtCitmaXJtd2FyZSBhbmQgT1NQTS4gSXQgaXMgYSBtZWNoYW5pc20gZm9yIGNvb3JkaW5hdGluZyBwcm9jZXNzb3IKK3BlcmZvcm1hbmNlIChpZTogZnJlcXVlbmN5KSBiZXR3ZWVuIHRoZSBwbGF0Zm9ybSBmaXJtd2FyZSBhbmQgdGhlIE9TLgorCitUaGUgUENDIGRyaXZlciAocGNjLWNwdWZyZXEpIGFsbG93cyBPU1BNIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBQQ0MKK2ludGVyZmFjZS4KKworT1MgdXRpbGl6ZXMgdGhlIFBDQyBpbnRlcmZhY2UgdG8gaW5mb3JtIHBsYXRmb3JtIGZpcm13YXJlIHdoYXQgZnJlcXVlbmN5IHRoZQorT1Mgd2FudHMgZm9yIGEgbG9naWNhbCBwcm9jZXNzb3IuIFRoZSBwbGF0Zm9ybSBmaXJtd2FyZSBhdHRlbXB0cyB0byBhY2hpZXZlCit0aGUgcmVxdWVzdGVkIGZyZXF1ZW5jeS4gSWYgdGhlIHJlcXVlc3QgZm9yIHRoZSB0YXJnZXQgZnJlcXVlbmN5IGNvdWxkIG5vdCBiZQorc2F0aXNmaWVkIGJ5IHBsYXRmb3JtIGZpcm13YXJlLCB0aGVuIGl0IHVzdWFsbHkgbWVhbnMgdGhhdCBwb3dlciBidWRnZXQKK2NvbmRpdGlvbnMgYXJlIGluIHBsYWNlLCBhbmQgInBvd2VyIGNhcHBpbmciIGlzIHRha2luZyBwbGFjZS4KKworMS4xIFBDQyBpbnRlcmZhY2U6CistLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBjb21wbGV0ZSBQQ0Mgc3BlY2lmaWNhdGlvbiBpcyBhdmFpbGFibGUgaGVyZToKK2h0dHA6Ly93d3cuYWNwaWNhLm9yZy9kb3dubG9hZC9Qcm9jZXNzb3ItQ2xvY2tpbmctQ29udHJvbC12MXAwLnBkZgorCitQQ0MgcmVsaWVzIG9uIGEgc2hhcmVkIG1lbW9yeSByZWdpb24gdGhhdCBwcm92aWRlcyBhIGNoYW5uZWwgZm9yIGNvbW11bmljYXRpb24KK2JldHdlZW4gdGhlIE9TIGFuZCBwbGF0Zm9ybSBmaXJtd2FyZS4gUENDIGFsc28gaW1wbGVtZW50cyBhICJkb29yYmVsbCIgdGhhdAoraXMgdXNlZCBieSB0aGUgT1MgdG8gaW5mb3JtIHRoZSBwbGF0Zm9ybSBmaXJtd2FyZSB0aGF0IGEgY29tbWFuZCBoYXMgYmVlbgorc2VudC4KKworVGhlIEFDUEkgUENDSCgpIG1ldGhvZCBpcyB1c2VkIHRvIGRpc2NvdmVyIHRoZSBsb2NhdGlvbiBvZiB0aGUgUENDIHNoYXJlZAorbWVtb3J5IHJlZ2lvbi4gVGhlIHNoYXJlZCBtZW1vcnkgcmVnaW9uIGhlYWRlciBjb250YWlucyB0aGUgImNvbW1hbmQiIGFuZAorInN0YXR1cyIgaW50ZXJmYWNlLiBQQ0NIKCkgYWxzbyBjb250YWlucyBkZXRhaWxzIG9uIGhvdyB0byBhY2Nlc3MgdGhlIHBsYXRmb3JtCitkb29yYmVsbC4KKworVGhlIGZvbGxvd2luZyBjb21tYW5kcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBQQ0MgaW50ZXJmYWNlOgorKiBHZXQgQXZlcmFnZSBGcmVxdWVuY3kKKyogU2V0IERlc2lyZWQgRnJlcXVlbmN5CisKK1RoZSBBQ1BJIFBDQ1AoKSBtZXRob2QgaXMgaW1wbGVtZW50ZWQgZm9yIGVhY2ggbG9naWNhbCBwcm9jZXNzb3IgYW5kIGlzCit1c2VkIHRvIGRpc2NvdmVyIHRoZSBvZmZzZXRzIGZvciB0aGUgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzIGluIHRoZSBzaGFyZWQKK21lbW9yeSByZWdpb24uCisKK1doZW4gUENDIG1vZGUgaXMgZW5hYmxlZCwgdGhlIHBsYXRmb3JtIHdpbGwgbm90IGV4cG9zZSBwcm9jZXNzb3IgcGVyZm9ybWFuY2UKK29yIHRocm90dGxlIHN0YXRlcyAoX1BTUywgX1RTUyBhbmQgcmVsYXRlZCBBQ1BJIG9iamVjdHMpIHRvIE9TUE0uIFRoZXJlZm9yZSwKK3RoZSBuYXRpdmUgUC1zdGF0ZSBkcml2ZXIgKHN1Y2ggYXMgYWNwaS1jcHVmcmVxIGZvciBJbnRlbCwgcG93ZXJub3ctazggZm9yCitBTUQpIHdpbGwgbm90IGxvYWQuCisKK0hvd2V2ZXIsIE9TUE0gcmVtYWlucyBpbiBjb250cm9sIG9mIHBvbGljeS4gVGhlIGdvdmVybm9yIChlZzogIm9uZGVtYW5kIikKK2NvbXB1dGVzIHRoZSByZXF1aXJlZCBwZXJmb3JtYW5jZSBmb3IgZWFjaCBwcm9jZXNzb3IgYmFzZWQgb24gc2VydmVyIHdvcmtsb2FkLgorVGhlIFBDQyBkcml2ZXIgZmlsbHMgaW4gdGhlIGNvbW1hbmQgaW50ZXJmYWNlLCBhbmQgdGhlIGlucHV0IGJ1ZmZlciBhbmQKK2NvbW11bmljYXRlcyB0aGUgcmVxdWVzdCB0byB0aGUgcGxhdGZvcm0gZmlybXdhcmUuIFRoZSBwbGF0Zm9ybSBmaXJtd2FyZSBpcworcmVzcG9uc2libGUgZm9yIGRlbGl2ZXJpbmcgdGhlIHJlcXVlc3RlZCBwZXJmb3JtYW5jZS4KKworRWFjaCBQQ0MgY29tbWFuZCBpcyAiZ2xvYmFsIiBpbiBzY29wZSBhbmQgY2FuIGFmZmVjdCBhbGwgdGhlIGxvZ2ljYWwgQ1BVcyBpbgordGhlIHN5c3RlbS4gVGhlcmVmb3JlLCBQQ0MgaXMgY2FwYWJsZSBvZiBwZXJmb3JtaW5nICJncm91cCIgdXBkYXRlcy4gV2l0aCBQQ0MKK3RoZSBPUyBpcyBjYXBhYmxlIG9mIGdldHRpbmcvc2V0dGluZyB0aGUgZnJlcXVlbmN5IG9mIGFsbCB0aGUgbG9naWNhbCBDUFVzIGluCit0aGUgc3lzdGVtIHdpdGggYSBzaW5nbGUgY2FsbCB0byB0aGUgQklPUy4KKworMS4xLjEgR2V0IEF2ZXJhZ2UgRnJlcXVlbmN5OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhpcyBjb21tYW5kIGlzIHVzZWQgYnkgdGhlIE9TUE0gdG8gcXVlcnkgdGhlIHJ1bm5pbmcgZnJlcXVlbmN5IG9mIHRoZQorcHJvY2Vzc29yIHNpbmNlIHRoZSBsYXN0IHRpbWUgdGhpcyBjb21tYW5kIHdhcyBjb21wbGV0ZWQuIFRoZSBvdXRwdXQgYnVmZmVyCitpbmRpY2F0ZXMgdGhlIGF2ZXJhZ2UgdW5oYWx0ZWQgZnJlcXVlbmN5IG9mIHRoZSBsb2dpY2FsIHByb2Nlc3NvciBleHByZXNzZWQgYXMKK2EgcGVyY2VudGFnZSBvZiB0aGUgbm9taW5hbCAoaWU6IG1heGltdW0pIENQVSBmcmVxdWVuY3kuIFRoZSBvdXRwdXQgYnVmZmVyCithbHNvIHNpZ25pZmllcyBpZiB0aGUgQ1BVIGZyZXF1ZW5jeSBpcyBsaW1pdGVkIGJ5IGEgcG93ZXIgYnVkZ2V0IGNvbmRpdGlvbi4KKworMS4xLjIgU2V0IERlc2lyZWQgRnJlcXVlbmN5OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhpcyBjb21tYW5kIGlzIHVzZWQgYnkgdGhlIE9TUE0gdG8gY29tbXVuaWNhdGUgdG8gdGhlIHBsYXRmb3JtIGZpcm13YXJlIHRoZQorZGVzaXJlZCBmcmVxdWVuY3kgZm9yIGEgbG9naWNhbCBwcm9jZXNzb3IuIFRoZSBvdXRwdXQgYnVmZmVyIGlzIGN1cnJlbnRseQoraWdub3JlZCBieSBPU1BNLiBUaGUgbmV4dCBpbnZvY2F0aW9uIG9mICJHZXQgQXZlcmFnZSBGcmVxdWVuY3kiIHdpbGwgaW5mb3JtCitPU1BNIGlmIHRoZSBkZXNpcmVkIGZyZXF1ZW5jeSB3YXMgYWNoaWV2ZWQgb3Igbm90LgorCisxLjIgUGxhdGZvcm1zIGFmZmVjdGVkOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBQQ0MgZHJpdmVyIHdpbGwgbG9hZCBvbiBhbnkgc3lzdGVtIHdoZXJlIHRoZSBwbGF0Zm9ybSBmaXJtd2FyZToKKyogc3VwcG9ydHMgdGhlIFBDQyBpbnRlcmZhY2UsIGFuZCB0aGUgYXNzb2NpYXRlZCBQQ0NIKCkgYW5kIFBDQ1AoKSBtZXRob2RzCisqIGFzc3VtZXMgcmVzcG9uc2liaWxpdHkgZm9yIG1hbmFnaW5nIHRoZSBoYXJkd2FyZSBjbG9ja2luZyBjb250cm9scyBpbiBvcmRlcgordG8gZGVsaXZlciB0aGUgcmVxdWVzdGVkIHByb2Nlc3NvciBwZXJmb3JtYW5jZQorCitDdXJyZW50bHksIGNlcnRhaW4gSFAgUHJvTGlhbnQgcGxhdGZvcm1zIGltcGxlbWVudCB0aGUgUENDIGludGVyZmFjZS4gT24gdGhvc2UKK3BsYXRmb3JtcyBQQ0MgaXMgdGhlICJkZWZhdWx0IiBjaG9pY2UuCisKK0hvd2V2ZXIsIGl0IGlzIHBvc3NpYmxlIHRvIGRpc2FibGUgdGhpcyBpbnRlcmZhY2UgdmlhIGEgQklPUyBzZXR0aW5nLiBJbgorc3VjaCBhbiBpbnN0YW5jZSwgYXMgaXMgYWxzbyB0aGUgY2FzZSBvbiBwbGF0Zm9ybXMgd2hlcmUgdGhlIFBDQyBpbnRlcmZhY2UKK2lzIG5vdCBpbXBsZW1lbnRlZCwgdGhlIFBDQyBkcml2ZXIgd2lsbCBmYWlsIHRvIGxvYWQgc2lsZW50bHkuCisKKzIuIERyaXZlciBhbmQgL3N5cyBkZXRhaWxzOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitXaGVuIHRoZSBkcml2ZXIgbG9hZHMsIGl0IG1lcmVseSBwcmludHMgdGhlIGxvd2VzdCBhbmQgdGhlIGhpZ2hlc3QgQ1BVCitmcmVxdWVuY2llcyBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtIGZpcm13YXJlLgorCitUaGUgUENDIGRyaXZlciBsb2FkcyB3aXRoIGEgbWVzc2FnZSBzdWNoIGFzOgorcGNjLWNwdWZyZXE6ICh2MS4wMC4wMCkgZHJpdmVyIGxvYWRlZCB3aXRoIGZyZXF1ZW5jeSBsaW1pdHM6IDE2MDAgTUh6LCAyOTMzCitNSHoKKworVGhpcyBtZWFucyB0aGF0IHRoZSBPUFNNIGNhbiByZXF1ZXN0IHRoZSBDUFUgdG8gcnVuIGF0IGFueSBmcmVxdWVuY3kgaW4KK2JldHdlZW4gdGhlIGxpbWl0cyAoMTYwMCBNSHosIGFuZCAyOTMzIE1Ieikgc3BlY2lmaWVkIGluIHRoZSBtZXNzYWdlLgorCitJbnRlcm5hbGx5LCB0aGVyZSBpcyBubyBuZWVkIGZvciB0aGUgZHJpdmVyIHRvIGNvbnZlcnQgdGhlICJ0YXJnZXQiIGZyZXF1ZW5jeQordG8gYSBjb3JyZXNwb25kaW5nIFAtc3RhdGUuCisKK1RoZSBWRVJTSU9OIG51bWJlciBmb3IgdGhlIGRyaXZlciB3aWxsIGJlIG9mIHRoZSBmb3JtYXQgdi54eS5hYi4KK2VnOiAxLjAwLjAyCisgICAtLS0tLSAtLQorICAgIHwgICAgfAorICAgIHwgICAgLS0gdGhpcyB3aWxsIGluY3JlYXNlIHdpdGggYnVnIGZpeGVzL2VuaGFuY2VtZW50cyB0byB0aGUgZHJpdmVyCisgICAgfC0tIHRoaXMgaXMgdGhlIHZlcnNpb24gb2YgdGhlIFBDQyBzcGVjaWZpY2F0aW9uIHRoZSBkcml2ZXIgYWRoZXJlcyB0bworCisKK1RoZSBmb2xsb3dpbmcgaXMgYSBicmllZiBkaXNjdXNzaW9uIG9uIHNvbWUgb2YgdGhlIGZpZWxkcyBleHBvcnRlZCB2aWEgdGhlCisvc3lzIGZpbGVzeXN0ZW0gYW5kIGhvdyB0aGVpciB2YWx1ZXMgYXJlIGFmZmVjdGVkIGJ5IHRoZSBQQ0MgZHJpdmVyOgorCisyLjEgc2NhbGluZ19hdmFpbGFibGVfZnJlcXVlbmNpZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzY2FsaW5nX2F2YWlsYWJsZV9mcmVxdWVuY2llcyBpcyBub3QgY3JlYXRlZCBpbiAvc3lzLiBObyBpbnRlcm1lZGlhdGUKK2ZyZXF1ZW5jaWVzIG5lZWQgdG8gYmUgbGlzdGVkIGJlY2F1c2UgdGhlIEJJT1Mgd2lsbCB0cnkgdG8gYWNoaWV2ZSBhbnkKK2ZyZXF1ZW5jeSwgd2l0aGluIGxpbWl0cywgcmVxdWVzdGVkIGJ5IHRoZSBnb3Zlcm5vci4gQSBmcmVxdWVuY3kgZG9lcyBub3QgaGF2ZQordG8gYmUgc3RyaWN0bHkgYXNzb2NpYXRlZCB3aXRoIGEgUC1zdGF0ZS4KKworMi4yIGNwdWluZm9fdHJhbnNpdGlvbl9sYXRlbmN5OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIGNwdWluZm9fdHJhbnNpdGlvbl9sYXRlbmN5IGZpZWxkIGlzIDAuIFRoZSBQQ0Mgc3BlY2lmaWNhdGlvbiBkb2VzCitub3QgaW5jbHVkZSBhIGZpZWxkIHRvIGV4cG9zZSB0aGlzIHZhbHVlIGN1cnJlbnRseS4KKworMi4zIGNwdWluZm9fY3VyX2ZyZXE6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0EpIE9mdGVuIGNwdWluZm9fY3VyX2ZyZXEgd2lsbCBzaG93IGEgdmFsdWUgZGlmZmVyZW50IHRoYW4gd2hhdCBpcyBkZWNsYXJlZAoraW4gdGhlIHNjYWxpbmdfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzIG9yIHNjYWxpbmdfY3VyX2ZyZXEsIG9yIHNjYWxpbmdfbWF4X2ZyZXEuCitUaGlzIGlzIGR1ZSB0byAidHVyYm8gYm9vc3QiIGF2YWlsYWJsZSBvbiByZWNlbnQgSW50ZWwgcHJvY2Vzc29ycy4gSWYgY2VydGFpbgorY29uZGl0aW9ucyBhcmUgbWV0IHRoZSBCSU9TIGNhbiBhY2hpZXZlIGEgc2xpZ2h0bHkgaGlnaGVyIHNwZWVkIHRoYW4gcmVxdWVzdGVkCitieSBPU1BNLiBBbiBleGFtcGxlOgorCitzY2FsaW5nX2N1cl9mcmVxCTogMjkzMzAwMAorY3B1aW5mb19jdXJfZnJlcQk6IDMxOTYwMDAKKworQikgVGhlcmUgaXMgYSByb3VuZC1vZmYgZXJyb3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBjcHVpbmZvX2N1cl9mcmVxIHZhbHVlLgorU2luY2UgdGhlIGRyaXZlciBvYnRhaW5zIHRoZSBjdXJyZW50IGZyZXF1ZW5jeSBhcyBhICJwZXJjZW50YWdlIiAoJSkgb2YgdGhlCitub21pbmFsIGZyZXF1ZW5jeSBmcm9tIHRoZSBCSU9TLCBzb21ldGltZXMsIHRoZSB2YWx1ZXMgZGlzcGxheWVkIGJ5CitzY2FsaW5nX2N1cl9mcmVxIGFuZCBjcHVpbmZvX2N1cl9mcmVxIG1heSBub3QgbWF0Y2guIEFuIGV4YW1wbGU6CisKK3NjYWxpbmdfY3VyX2ZyZXEJOiAxNjAwMDAwCitjcHVpbmZvX2N1cl9mcmVxCTogMTU4MzAwMAorCitJbiB0aGlzIGV4YW1wbGUsIHRoZSBub21pbmFsIGZyZXF1ZW5jeSBpcyAyOTMzIE1Iei4gVGhlIGRyaXZlciBvYnRhaW5zIHRoZQorY3VycmVudCBmcmVxdWVuY3ksIGNwdWluZm9fY3VyX2ZyZXEsIGFzIDU0JSBvZiB0aGUgbm9taW5hbCBmcmVxdWVuY3k6CisKKwk1NCUgb2YgMjkzMyBNSHogPSAxNTgzIE1IegorCitOb21pbmFsIGZyZXF1ZW5jeSBpcyB0aGUgbWF4aW11bSBmcmVxdWVuY3kgb2YgdGhlIHByb2Nlc3NvciwgYW5kIGl0IHVzdWFsbHkKK2NvcnJlc3BvbmRzIHRvIHRoZSBmcmVxdWVuY3kgb2YgdGhlIFAwIFAtc3RhdGUuCisKKzIuNCByZWxhdGVkX2NwdXM6CistLS0tLS0tLS0tLS0tLS0tLQorVGhlIHJlbGF0ZWRfY3B1cyBmaWVsZCBpcyBpZGVudGljYWwgdG8gYWZmZWN0ZWRfY3B1cy4KKworYWZmZWN0ZWRfY3B1cwk6IDQKK3JlbGF0ZWRfY3B1cwk6IDQKKworQ3VycmVudGx5LCB0aGUgUENDIGRyaXZlciBkb2VzIG5vdCBldmFsdWF0ZSBfUFNELiBUaGUgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydAorUENDIGRvIG5vdCBpbXBsZW1lbnQgU1dfQUxMLiBTbyBPU1BNIGRvZXNuJ3QgbmVlZCB0byBwZXJmb3JtIGFueSBjb29yZGluYXRpb24KK3RvIGVuc3VyZSB0aGF0IHRoZSBzYW1lIGZyZXF1ZW5jeSBpcyByZXF1ZXN0ZWQgb2YgYWxsIGRlcGVuZGVudCBDUFVzLgorCiszLiBDYXZlYXRzOgorLS0tLS0tLS0tLS0KK1RoZSAiY3B1ZnJlcV9zdGF0cyIgbW9kdWxlIGluIGl0cyBwcmVzZW50IGZvcm0gY2Fubm90IGJlIGxvYWRlZCBhbmQKK2V4cGVjdGVkIHRvIHdvcmsgd2l0aCB0aGUgUENDIGRyaXZlci4gU2luY2UgdGhlICJjcHVmcmVxX3N0YXRzIiBtb2R1bGUKK3Byb3ZpZGVzIGluZm9ybWF0aW9uIHdydCBlYWNoIFAtc3RhdGUsIGl0IGlzIG5vdCBhcHBsaWNhYmxlIHRvIHRoZSBQQ0MgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL3NuYXBzaG90LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9zbmFwc2hvdC50eHQKaW5kZXggZTNhNzdiMi4uMGQ1YmM0NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL3NuYXBzaG90LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvc25hcHNob3QudHh0CkBAIC0xMjIsMyArMTIyLDQ3IEBACiBicnctLS0tLS0tICAxIHJvb3Qgcm9vdCAyNTQsIDExIDI5IGFnbyAxODoxNSAvZGV2L21hcHBlci92b2x1bWVHcm91cC1iYXNlLXJlYWwKIGJydy0tLS0tLS0gIDEgcm9vdCByb290IDI1NCwgMTIgMjkgYWdvIDE4OjE2IC9kZXYvbWFwcGVyL3ZvbHVtZUdyb3VwLWJhc2UtY293CiBicnctLS0tLS0tICAxIHJvb3Qgcm9vdCAyNTQsIDEwIDI5IGFnbyAxODoxNiAvZGV2L21hcHBlci92b2x1bWVHcm91cC1iYXNlCisKKworSG93IHRvIGRldGVybWluZSB3aGVuIGEgbWVyZ2luZyBpcyBjb21wbGV0ZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhlIHNuYXBzaG90LW1lcmdlIGFuZCBzbmFwc2hvdCBzdGF0dXMgbGluZXMgZW5kIHdpdGg6CisgIDxzZWN0b3JzX2FsbG9jYXRlZD4vPHRvdGFsX3NlY3RvcnM+IDxtZXRhZGF0YV9zZWN0b3JzPgorCitCb3RoIDxzZWN0b3JzX2FsbG9jYXRlZD4gYW5kIDx0b3RhbF9zZWN0b3JzPiBpbmNsdWRlIGJvdGggZGF0YSBhbmQgbWV0YWRhdGEuCitEdXJpbmcgbWVyZ2luZywgdGhlIG51bWJlciBvZiBzZWN0b3JzIGFsbG9jYXRlZCBnZXRzIHNtYWxsZXIgYW5kCitzbWFsbGVyLiAgTWVyZ2luZyBoYXMgZmluaXNoZWQgd2hlbiB0aGUgbnVtYmVyIG9mIHNlY3RvcnMgaG9sZGluZyBkYXRhCitpcyB6ZXJvLCBpbiBvdGhlciB3b3JkcyA8c2VjdG9yc19hbGxvY2F0ZWQ+ID09IDxtZXRhZGF0YV9zZWN0b3JzPi4KKworSGVyZSBpcyBhIHByYWN0aWNhbCBleGFtcGxlICh1c2luZyBhIGh5YnJpZCBvZiBsdm0gYW5kIGRtc2V0dXAgY29tbWFuZHMpOgorCisjIGx2cworICBMViAgICAgIFZHICAgICAgICAgIEF0dHIgICBMU2l6ZSBPcmlnaW4gIFNuYXAlICBNb3ZlIExvZyBDb3B5JSAgQ29udmVydAorICBiYXNlICAgIHZvbHVtZUdyb3VwIG93aS1hLSA0LjAwZworICBzbmFwICAgIHZvbHVtZUdyb3VwIHN3aS1hLSAxLjAwZyBiYXNlICAxOC45NworCisjIGRtc2V0dXAgc3RhdHVzIHZvbHVtZUdyb3VwLXNuYXAKKzAgODM4ODYwOCBzbmFwc2hvdCAzOTc4OTYvMjA5NzE1MiAxNTYwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXiBtZXRhZGF0YSBzZWN0b3JzCisKKyMgbHZjb252ZXJ0IC0tbWVyZ2UgLWIgdm9sdW1lR3JvdXAvc25hcAorICBNZXJnaW5nIG9mIHZvbHVtZSBzbmFwIHN0YXJ0ZWQuCisKKyMgbHZzIHZvbHVtZUdyb3VwL3NuYXAKKyAgTFYgICAgICBWRyAgICAgICAgICBBdHRyICAgTFNpemUgT3JpZ2luICBTbmFwJSAgTW92ZSBMb2cgQ29weSUgIENvbnZlcnQKKyAgYmFzZSAgICB2b2x1bWVHcm91cCBPd2ktYS0gNC4wMGcgICAgICAgICAgMTcuMjMKKworIyBkbXNldHVwIHN0YXR1cyB2b2x1bWVHcm91cC1iYXNlCiswIDgzODg2MDggc25hcHNob3QtbWVyZ2UgMjgxNjg4LzIwOTcxNTIgMTEwNAorCisjIGRtc2V0dXAgc3RhdHVzIHZvbHVtZUdyb3VwLWJhc2UKKzAgODM4ODYwOCBzbmFwc2hvdC1tZXJnZSAxODA0ODAvMjA5NzE1MiA3MTIKKworIyBkbXNldHVwIHN0YXR1cyB2b2x1bWVHcm91cC1iYXNlCiswIDgzODg2MDggc25hcHNob3QtbWVyZ2UgMTYvMjA5NzE1MiAxNgorCitNZXJnaW5nIGhhcyBmaW5pc2hlZC4KKworIyBsdnMKKyAgTFYgICAgICBWRyAgICAgICAgICBBdHRyICAgTFNpemUgT3JpZ2luICBTbmFwJSAgTW92ZSBMb2cgQ29weSUgIENvbnZlcnQKKyAgYmFzZSAgICB2b2x1bWVHcm91cCBvd2ktYS0gNC4wMGcKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmF1bHQtaW5qZWN0aW9uL3Byb3Zva2UtY3Jhc2hlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZhdWx0LWluamVjdGlvbi9wcm92b2tlLWNyYXNoZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhOWQzZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZhdWx0LWluamVjdGlvbi9wcm92b2tlLWNyYXNoZXMudHh0CkBAIC0wLDAgKzEsMzggQEAKK1RoZSBsa2R0bSBtb2R1bGUgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIGNyYXNoIG9yIGluanVyZSB0aGUga2VybmVsIGF0CitwcmVkZWZpbmVkIGNyYXNocG9pbnRzIHRvIGV2YWx1YXRlIHRoZSByZWxpYWJpbGl0eSBvZiBjcmFzaCBkdW1wcyBvYnRhaW5lZAordXNpbmcgZGlmZmVyZW50IGR1bXBpbmcgc29sdXRpb25zLiBUaGUgbW9kdWxlIHVzZXMgS1BST0JFcyB0byBpbnN0cnVtZW50CitjcmFzaGluZyBwb2ludHMsIGJ1dCBjYW4gYWxzbyBjcmFzaCB0aGUga2VybmVsIGRpcmVjdGx5IHdpdGhvdXQgS1JQT0JFCitzdXBwb3J0LgorCisKK1lvdSBjYW4gcHJvdmlkZSB0aGUgd2F5IGVpdGhlciB0aHJvdWdoIG1vZHVsZSBhcmd1bWVudHMgd2hlbiBpbnNlcnRpbmcKK3RoZSBtb2R1bGUsIG9yIHRocm91Z2ggYSBkZWJ1Z2ZzIGludGVyZmFjZS4KKworVXNhZ2U6IGluc21vZCBsa2R0bS5rbyBbcmVjdXJfY291bnQ9ez4wfV0gY3BvaW50X25hbWU9PD4gY3BvaW50X3R5cGU9PD4KKwkJCQlbY3BvaW50X2NvdW50PXs+MH1dCisKKyAgcmVjdXJfY291bnQgOiBSZWN1cnNpb24gbGV2ZWwgZm9yIHRoZSBzdGFjayBvdmVyZmxvdyB0ZXN0LiBEZWZhdWx0IGlzIDEwLgorCisgIGNwb2ludF9uYW1lIDogQ3Jhc2ggcG9pbnQgd2hlcmUgdGhlIGtlcm5lbCBpcyB0byBiZSBjcmFzaGVkLiBJdCBjYW4gYmUKKwkgb25lIG9mIElOVF9IQVJEV0FSRV9FTlRSWSwgSU5UX0hXX0lSUV9FTiwgSU5UX1RBU0tMRVRfRU5UUlksCisJIEZTX0RFVlJXLCBNRU1fU1dBUE9VVCwgVElNRVJBREQsIFNDU0lfRElTUEFUQ0hfQ01ELAorCSBJREVfQ09SRV9DUCwgRElSRUNUCisKKyAgY3BvaW50X3R5cGUgOiBJbmRpY2F0ZXMgdGhlIGFjdGlvbiB0byBiZSB0YWtlbiBvbiBoaXR0aW5nIHRoZSBjcmFzaCBwb2ludC4KKyAgICAgSXQgY2FuIGJlIG9uZSBvZiBQQU5JQywgQlVHLCBFWENFUFRJT04sIExPT1AsIE9WRVJGTE9XLAorICAgICBDT1JSVVBUX1NUQUNLLCBVTkFMSUdORURfTE9BRF9TVE9SRV9XUklURSwgT1ZFUldSSVRFX0FMTE9DQVRJT04sCisgICAgIFdSSVRFX0FGVEVSX0ZSRUUsCisKKyAgY3BvaW50X2NvdW50IDogSW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGNyYXNoIHBvaW50IGlzIHRvIGJlIGhpdAorICAgIHRvIHRyaWdnZXIgYW4gYWN0aW9uLiBUaGUgZGVmYXVsdCBpcyAxMC4KKworWW91IGNhbiBhbHNvIGluZHVjZSBmYWlsdXJlcyBieSBtb3VudGluZyBkZWJ1Z2ZzIGFuZCB3cml0aW5nIHRoZSB0eXBlIHRvCis8bW91bnRwb2ludD4vcHJvdm9rZS1jcmFzaC88Y3Jhc2hwb2ludD4uIEUuZy4sCisKKyAgbW91bnQgLXQgZGVidWdmcyBkZWJ1Z2ZzIC9tbnQKKyAgZWNobyBFWENFUFRJT04gPiAvbW50L3Byb3Zva2UtY3Jhc2gvSU5UX0hBUkRXQVJFX0VOVFJZCisKKworQSBzcGVjaWFsIGZpbGUgaXMgYERJUkVDVCcgd2hpY2ggd2lsbCBpbmR1Y2UgdGhlIGNyYXNoIGRpcmVjdGx5IHdpdGhvdXQKK0tQUk9CRSBpbnN0cnVtZW50YXRpb24uIFRoaXMgbW9kZSBpcyB0aGUgb25seSBvbmUgYXZhaWxhYmxlIHdoZW4gdGhlIG1vZHVsZQoraXMgYnVpbHQgb24gYSBrZXJuZWwgd2l0aG91dCBLUFJPQkVzIHN1cHBvcnQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggMzE1NzVlMjIuLmE1Y2MwZGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTQ0OSwxMiArNDQ5LDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OglhZHQ3NDczIGhhcmR3YXJlIG1vbml0b3JpbmcgZHJpdmVyCi1XaGVuOglGZWJydWFyeSAyMDEwCi1XaHk6CU9ic29sZXRlZCBieSB0aGUgYWR0NzQ3NSBkcml2ZXIuCi1XaG86CUplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFdoYXQ6CVN1cHBvcnQgZm9yIGxjZF9zd2l0Y2ggYW5kIGRpc3BsYXlfZ2V0IGluIGFzdXMtbGFwdG9wIGRyaXZlcgogV2hlbjoJTWFyY2ggMjAxMAogV2h5OglUaGVzZSB0d28gZmVhdHVyZXMgdXNlIG5vbi1zdGFuZGFyZCBpbnRlcmZhY2VzLiBUaGVyZSBhcmUgdGhlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy8wMC1JTkRFWAppbmRleCA4NzVkNDk2Li41MTM5YjhjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvMDAtSU5ERVgKQEAgLTYyLDYgKzYyLDggQEAKIAktIGluZm8gYW5kIG1vdW50IG9wdGlvbnMgZm9yIHRoZSBKRlMgZmlsZXN5c3RlbS4KIGxvY2tzLnR4dAogCS0gaW5mbyBvbiBmaWxlIGxvY2tpbmcgaW1wbGVtZW50YXRpb25zLCBmbG9jaygpIHZzLiBmY250bCgpLCBldGMuCitsb2dmcy50eHQKKwktIGluZm8gb24gdGhlIExvZ0ZTIGZsYXNoIGZpbGVzeXN0ZW0uCiBtYW5kYXRvcnktbG9ja2luZy50eHQKIAktIGluZm8gb24gdGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIFN5cyBWIG1hbmRhdG9yeSBmaWxlIGxvY2tpbmcuCiBuY3Bmcy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbG9nZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9sb2dmcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY0Yzk0YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbG9nZnMudHh0CkBAIC0wLDAgKzEsMjQxIEBACisKK1RoZSBMb2dGUyBGbGFzaCBGaWxlc3lzdGVtCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitTcGVjaWZpY2F0aW9uCis9PT09PT09PT09PT09CisKK1N1cGVyYmxvY2tzCistLS0tLS0tLS0tLQorCitUd28gc3VwZXJibG9ja3MgZXhpc3QgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBmaWxlc3lzdGVtLgorRWFjaCBzdXBlcmJsb2NrIGlzIDI1NiBCeXRlcyBsYXJnZSwgd2l0aCBhbm90aGVyIDM4NDAgQnl0ZXMgcmVzZXJ2ZWQKK2ZvciBmdXR1cmUgcHVycG9zZXMsIG1ha2luZyBhIHRvdGFsIG9mIDQwOTYgQnl0ZXMuCisKK1N1cGVyYmxvY2sgbG9jYXRpb25zIG1heSBkaWZmZXIgZm9yIE1URCBhbmQgYmxvY2sgZGV2aWNlcy4gIE9uIE1URCB0aGUKK2ZpcnN0IG5vbi1iYWQgYmxvY2sgY29udGFpbnMgYSBzdXBlcmJsb2NrIGluIHRoZSBmaXJzdCA0MDk2IEJ5dGVzIGFuZAordGhlIGxhc3Qgbm9uLWJhZCBibG9jayBjb250YWlucyBhIHN1cGVyYmxvY2sgaW4gdGhlIGxhc3QgNDA5NiBCeXRlcy4KK09uIGJsb2NrIGRldmljZXMsIHRoZSBmaXJzdCA0MDk2IEJ5dGVzIG9mIHRoZSBkZXZpY2UgY29udGFpbiB0aGUgZmlyc3QKK3N1cGVyYmxvY2sgYW5kIHRoZSBsYXN0IGFsaWduZWQgNDA5NiBCeXRlLWJsb2NrIGNvbnRhaW5zIHRoZSBzZWNvbmQKK3N1cGVyYmxvY2suCisKK0ZvciB0aGUgbW9zdCBwYXJ0LCB0aGUgc3VwZXJibG9ja3MgY2FuIGJlIGNvbnNpZGVyZWQgcmVhZC1vbmx5LiAgVGhleQorYXJlIHdyaXR0ZW4gb25seSB0byBjb3JyZWN0IGVycm9ycyBkZXRlY3RlZCB3aXRoaW4gdGhlIHN1cGVyYmxvY2tzLAorbW92ZSB0aGUgam91cm5hbCBhbmQgY2hhbmdlIHRoZSBmaWxlc3lzdGVtIHBhcmFtZXRlcnMgdGhyb3VnaCB0dW5lZnMuCitBcyBhIHJlc3VsdCwgdGhlIHN1cGVyYmxvY2sgZG9lcyBub3QgY29udGFpbiBhbnkgZmllbGRzIHRoYXQgcmVxdWlyZQorY29uc3RhbnQgdXBkYXRlcywgbGlrZSB0aGUgYW1vdW50IG9mIGZyZWUgc3BhY2UsIGV0Yy4KKworU2VnbWVudHMKKy0tLS0tLS0tCisKK1RoZSBzcGFjZSBpbiB0aGUgZGV2aWNlIGlzIHNwbGl0IHVwIGludG8gZXF1YWwtc2l6ZWQgc2VnbWVudHMuCitTZWdtZW50cyBhcmUgdGhlIHByaW1hcnkgd3JpdGUgdW5pdCBvZiBMb2dGUy4gIFdpdGhpbiBlYWNoIHNlZ21lbnRzLAord3JpdGVzIGhhcHBlbiBmcm9tIGZyb250IChsb3cgYWRkcmVzc2VzKSB0byBiYWNrIChoaWdoIGFkZHJlc3Nlcy4gIElmCitvbmx5IGEgcGFydGlhbCBzZWdtZW50IGhhcyBiZWVuIHdyaXR0ZW4sIHRoZSBzZWdtZW50IG51bWJlciwgdGhlCitjdXJyZW50IHBvc2l0aW9uIHdpdGhpbiBhbmQgb3B0aW9uYWxseSBhIHdyaXRlIGJ1ZmZlciBhcmUgc3RvcmVkIGluCit0aGUgam91cm5hbC4KKworU2VnbWVudHMgYXJlIGVyYXNlZCBhcyBhIHdob2xlLiAgVGhlcmVmb3JlIEdhcmJhZ2UgQ29sbGVjdGlvbiBtYXkgYmUKK3JlcXVpcmVkIHRvIGNvbXBsZXRlbHkgZnJlZSBhIHNlZ21lbnQgYmVmb3JlIGRvaW5nIHNvLgorCitKb3VybmFsCistLS0tLS0tLQorCitUaGUgam91cm5hbCBjb250YWlucyBhbGwgZ2xvYmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaWxlc3lzdGVtIHRoYXQKK2lzIHN1YmplY3QgdG8gZnJlcXVlbnQgY2hhbmdlLiAgQXQgbW91bnQgdGltZSwgaXQgaGFzIHRvIGJlIHNjYW5uZWQKK2ZvciB0aGUgbW9zdCByZWNlbnQgY29tbWl0IGVudHJ5LCB3aGljaCBjb250YWlucyBhIGxpc3Qgb2YgcG9pbnRlcnMgdG8KK2FsbCBjdXJyZW50bHkgdmFsaWQgZW50cmllcy4KKworT2JqZWN0IFN0b3JlCistLS0tLS0tLS0tLS0KKworQWxsIHNwYWNlIGV4Y2VwdCBmb3IgdGhlIHN1cGVyYmxvY2tzIGFuZCBqb3VybmFsIGlzIHBhcnQgb2YgdGhlIG9iamVjdAorc3RvcmUuICBFYWNoIHNlZ21lbnQgY29udGFpbnMgYSBzZWdtZW50IGhlYWRlciBhbmQgYSBudW1iZXIgb2YKK29iamVjdHMsIGVhY2ggY29uc2lzdGluZyBvZiB0aGUgb2JqZWN0IGhlYWRlciBhbmQgdGhlIHBheWxvYWQuCitPYmplY3RzIGFyZSBlaXRoZXIgaW5vZGVzLCBkaXJlY3RvcnkgZW50cmllcyAoZGVudHJpZXMpLCBmaWxlIGRhdGEKK2Jsb2NrcyBvciBpbmRpcmVjdCBibG9ja3MuCisKK0xldmVscworLS0tLS0tCisKK0dhcmJhZ2UgY29sbGVjdGlvbiAoR0MpIG1heSBmYWlsIGlmIGFsbCBkYXRhIGlzIHdyaXR0ZW4KK2luZGlzY3JpbWluYXRlbHkuICBPbmUgcmVxdWlyZW1lbnQgb2YgR0MgaXMgdGhhdCBkYXRhIGlzIHNlcGVyYXRlZAorcm91Z2hseSBhY2NvcmRpbmcgdG8gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHRyZWUgcm9vdCBhbmQgdGhlIGRhdGEuCitFZmZlY3RpdmVseSB0aGF0IG1lYW5zIGFsbCBmaWxlIGRhdGEgaXMgb24gbGV2ZWwgMCwgaW5kaXJlY3QgYmxvY2tzCithcmUgb24gbGV2ZWxzIDEsIDIsIDMgNCBvciA1IGZvciAxeCwgMngsIDN4LCA0eCBvciA1eCBpbmRpcmVjdCBibG9ja3MsCityZXNwZWN0aXZlbHkuICBJbm9kZSBmaWxlIGRhdGEgaXMgb24gbGV2ZWwgNiBmb3IgdGhlIGlub2RlcyBhbmQgNy0xMQorZm9yIGluZGlyZWN0IGJsb2Nrcy4KKworRWFjaCBzZWdtZW50IGNvbnRhaW5zIG9iamVjdHMgb2YgYSBzaW5nbGUgbGV2ZWwgb25seS4gIEFzIGEgcmVzdWx0LAorZWFjaCBsZXZlbCByZXF1aXJlcyBpdHMgb3duIHNlcGVyYXRlIHNlZ21lbnQgdG8gYmUgb3BlbiBmb3Igd3JpdGluZy4KKworSW5vZGUgRmlsZQorLS0tLS0tLS0tLQorCitBbGwgaW5vZGVzIGFyZSBzdG9yZWQgaW4gYSBzcGVjaWFsIGZpbGUsIHRoZSBpbm9kZSBmaWxlLiAgU2luZ2xlCitleGNlcHRpb24gaXMgdGhlIGlub2RlIGZpbGUncyBpbm9kZSAobWFzdGVyIGlub2RlKSB3aGljaCBmb3Igb2J2aW91cworcmVhc29ucyBpcyBzdG9yZWQgaW4gdGhlIGpvdXJuYWwgaW5zdGVhZC4gIEluc3RlYWQgb2YgZGF0YSBibG9ja3MsIHRoZQorbGVhZiBub2RlcyBvZiB0aGUgaW5vZGUgZmlsZXMgYXJlIGlub2Rlcy4KKworQWxpYXNlcworLS0tLS0tLQorCitXcml0ZXMgaW4gTG9nRlMgYXJlIGRvbmUgYnkgbWVhbnMgb2YgYSB3YW5kZXJpbmcgdHJlZS4gIEEgbmHDr3ZlCitpbXBsZW1lbnRhdGlvbiB3b3VsZCByZXF1aXJlIHRoYXQgZm9yIGVhY2ggd3JpdGUgb3IgYSBibG9jaywgYWxsCitwYXJlbnQgYmxvY2tzIGFyZSB3cml0dGVuIGFzIHdlbGwsIHNpbmNlIHRoZSBibG9jayBwb2ludGVycyBoYXZlCitjaGFuZ2VkLiAgU3VjaCBhbiBpbXBsZW1lbnRhdGlvbiB3b3VsZCBub3QgYmUgdmVyeSBlZmZpY2llbnQuCisKK0luIExvZ0ZTLCB0aGUgYmxvY2sgcG9pbnRlciBjaGFuZ2VzIGFyZSBjYWNoZWQgaW4gdGhlIGpvdXJuYWwgYnkgbWVhbnMKK29mIGFsaWFzIGVudHJpZXMuICBFYWNoIGFsaWFzIGNvbnNpc3RzIG9mIGl0cyBsb2dpY2FsIGFkZHJlc3MgLSBpbm9kZQorbnVtYmVyLCBibG9jayBpbmRleCwgbGV2ZWwgYW5kIGNoaWxkIG51bWJlciAoaW5kZXggaW50byBibG9jaykgLSBhbmQKK3RoZSBjaGFuZ2VkIGRhdGEuICBBbnkgOC1ieXRlIHdvcmQgY2FuIGJlIGNoYW5nZXMgaW4gdGhpcyBtYW5uZXIuCisKK0N1cnJlbnRseSBhbGlhc2VzIGFyZSB1c2VkIGZvciBibG9jayBwb2ludGVycywgZmlsZSBzaXplLCBmaWxlIHVzZWQKK2J5dGVzIGFuZCB0aGUgaGVpZ2h0IG9mIGFuIGlub2RlcyBpbmRpcmVjdCB0cmVlLgorCitTZWdtZW50IEFsaWFzZXMKKy0tLS0tLS0tLS0tLS0tLQorCitSZWxhdGVkIHRvIHJlZ3VsYXIgYWxpYXNlcywgdGhlc2UgYXJlIHVzZWQgdG8gaGFuZGxlIGJhZCBibG9ja3MuCitJbml0aWFsbHksIGJhZCBibG9ja3MgYXJlIGhhbmRsZWQgYnkgbW92aW5nIHRoZSBhZmZlY3RlZCBzZWdtZW50Citjb250ZW50IHRvIGEgc3BhcmUgc2VnbWVudCBhbmQgbm90aW5nIHRoaXMgbW92ZSBpbiB0aGUgam91cm5hbCB3aXRoIGEKK3NlZ21lbnQgYWxpYXMsIGEgc2ltcGxlICh0bywgZnJvbSkgdHVwZWwuICBHQyB3aWxsIGxhdGVyIGVtcHR5IHRoaXMKK3NlZ21lbnQgYW5kIHRoZSBhbGlhcyBjYW4gYmUgcmVtb3ZlZCBhZ2Fpbi4gIFRoaXMgaXMgdXNlZCBvbiBNVEQgb25seS4KKworVmltCistLS0KKworQnkgY2xldmVybHkgcHJlZGljdGluZyB0aGUgbGlmZSB0aW1lIG9mIGRhdGEsIGl0IGlzIHBvc3NpYmxlIHRvCitzZXBlcmF0ZSBsb25nLWxpdmluZyBkYXRhIGZyb20gc2hvcnQtbGl2aW5nIGRhdGEgYW5kIHRoZXJlYnkgcmVkdWNlCit0aGUgR0Mgb3ZlcmhlYWQgbGF0ZXIuICBFYWNoIHR5cGUgb2YgZGlzdGluYyBsaWZlIGV4cGVjdGVuY3kgKHZpbSkgY2FuCitoYXZlIGEgc2VwZXJhdGUgc2VnbWVudCBvcGVuIGZvciB3cml0aW5nLiAgRWFjaCAobGV2ZWwsIHZpbSkgdHVwZWwgY2FuCitiZSBvcGVuIGp1c3Qgb25jZS4gIElmIGFuIG9wZW4gc2VnbWVudCB3aXRoIHVua25vd24gdmltIGlzIGVuY291bnRlcmVkCithdCBtb3VudCB0aW1lLCBpdCBpcyBjbG9zZWQgYW5kIGlnbm9yZWQgaGVuY2Vmb3J0aC4KKworSW5kaXJlY3QgVHJlZQorLS0tLS0tLS0tLS0tLQorCitJbm9kZXMgaW4gTG9nRlMgYXJlIHNpbWlsYXIgdG8gRkZTLXN0eWxlIGZpbGVzeXN0ZW1zIHdpdGggZGlyZWN0IGFuZAoraW5kaXJlY3QgYmxvY2sgcG9pbnRlcnMuICBPbmUgZGlmZmVyZW5jZSBpcyB0aGF0IExvZ0ZTIHVzZXMgYSBzaW5nbGUKK2luZGlyZWN0IHBvaW50ZXIgdGhhdCBjYW4gYmUgZWl0aGVyIGEgMXgsIDJ4LCBldGMuIGluZGlyZWN0IHBvaW50ZXIuCitBIGhlaWdodCBmaWVsZCBpbiB0aGUgaW5vZGUgZGVmaW5lcyB0aGUgaGVpZ2h0IG9mIHRoZSBpbmRpcmVjdCB0cmVlCithbmQgdGhlcmVieSB0aGUgaW5kaXJlY3Rpb24gb2YgdGhlIHBvaW50ZXIuCisKK0Fub3RoZXIgZGlmZmVyZW5jZSBpcyB0aGUgYWRkcmVzc2luZyBvZiBpbmRpcmVjdCBibG9ja3MuICBJbiBMb2dGUywKK3RoZSBmaXJzdCAxNiBwb2ludGVycyBpbiB0aGUgZmlyc3QgaW5kaXJlY3QgYmxvY2sgYXJlIGxlZnQgZW1wdHksCitjb3JyZXNwb25kaW5nIHRvIHRoZSAxNiBkaXJlY3QgcG9pbnRlcnMgaW4gdGhlIGlub2RlLiAgSW4gZXh0MiAobWF5YmUKK290aGVycyBhcyB3ZWxsKSB0aGUgZmlyc3QgcG9pbnRlciBpbiB0aGUgZmlyc3QgaW5kaXJlY3QgYmxvY2sKK2NvcnJlc3BvbmRzIHRvIGxvZ2ljYWwgYmxvY2sgMTIsIHNraXBwaW5nIHRoZSAxMiBkaXJlY3QgcG9pbnRlcnMuCitTbyB3aGVyZSBleHQyIGlzIHVzaW5nIGFyaXRobWV0aWMgdG8gYmV0dGVyIHV0aWxpemUgc3BhY2UsIExvZ0ZTIGtlZXBzCithcml0aG1ldGljIHNpbXBsZSBhbmQgdXNlcyBjb21wcmVzc2lvbiB0byBzYXZlIHNwYWNlLgorCitDb21wcmVzc2lvbgorLS0tLS0tLS0tLS0KKworQm90aCBmaWxlIGRhdGEgYW5kIG1ldGFkYXRhIGNhbiBiZSBjb21wcmVzc2VkLiAgQ29tcHJlc3Npb24gZm9yIGZpbGUKK2RhdGEgY2FuIGJlIGVuYWJsZWQgd2l0aCBjaGF0dHIgK2MgYW5kIGRpc2FibGVkIHdpdGggY2hhdHRyIC1jLiAgRG9pbmcKK3NvIGhhcyBubyBlZmZlY3Qgb24gZXhpc3RpbmcgZGF0YSwgYnV0IG5ldyBkYXRhIHdpbGwgYmUgc3RvcmVkCithY2NvcmRpbmdseS4gIE5ldyBpbm9kZXMgd2lsbCBpbmhlcml0IHRoZSBjb21wcmVzc2lvbiBmbGFnIG9mIHRoZQorcGFyZW50IGRpcmVjdG9yeS4KKworTWV0YWRhdGEgaXMgYWx3YXlzIGNvbXByZXNzZWQuICBIb3dldmVyLCB0aGUgc3BhY2UgYWNjb3VudGluZyBpZ25vcmVzCit0aGlzIGFuZCBjaGFyZ2VzIGZvciB0aGUgdW5jb21wcmVzc2VkIHNpemUuICBGYWlsaW5nIHRvIGRvIHNvIGNvdWxkCityZXN1bHQgaW4gR0MgZmFpbHVyZXMgd2hlbiwgYWZ0ZXIgbW92aW5nIHNvbWUgZGF0YSwgaW5kaXJlY3QgYmxvY2tzCitjb21wcmVzcyB3b3JzZSB0aGFuIHByZXZpb3VzbHkuICBFdmVuIG9uIGEgMTAwJSBmdWxsIG1lZGl1bSwgR0MgbWF5Citub3QgY29uc3VtZSBhbnkgZXh0cmEgc3BhY2UsIHNvIHRoZSBjb21wcmVzc2lvbiBnYWlucyBhcmUgbG9zdCBzcGFjZQordG8gdGhlIHVzZXIuCisKK0hvd2V2ZXIsIHRoZXkgYXJlIG5vdCBsb3N0IHNwYWNlIHRvIHRoZSBmaWxlc3lzdGVtIGludGVybmFscy4gIEJ5CitjaGVhdGluZyB0aGUgdXNlciBmb3IgdGhvc2UgYnl0ZXMsIHRoZSBmaWxlc3lzdGVtIGdhaW5lZCBzb21lIHNsYWNrCitzcGFjZSBhbmQgR0Mgd2lsbCBydW4gbGVzcyBvZnRlbiBhbmQgZmFzdGVyLgorCitHYXJiYWdlIENvbGxlY3Rpb24gYW5kIFdlYXIgTGV2ZWxpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHYXJiYWdlIGNvbGxlY3Rpb24gaXMgaW52b2tlZCB3aGVuZXZlciB0aGUgbnVtYmVyIG9mIGZyZWUgc2VnbWVudHMKK2ZhbGxzIGJlbG93IGEgdGhyZXNob2xkLiAgVGhlIGJlc3QgKGtub3duKSBjYW5kaWRhdGUgaXMgcGlja2VkIGJhc2VkCitvbiB0aGUgbGVhc3QgYW1vdW50IG9mIHZhbGlkIGRhdGEgY29udGFpbmVkIGluIHRoZSBzZWdtZW50LiAgQWxsCityZW1haW5pbmcgdmFsaWQgZGF0YSBpcyBjb3BpZWQgZWxzZXdoZXJlLCB0aGVyZWJ5IGludmFsaWRhdGluZyBpdC4KKworVGhlIEdDIGNvZGUgYWxzbyBjaGVja3MgZm9yIGFsaWFzZXMgYW5kIHdyaXRlcyB0aGVuIGJhY2sgaWYgdGhlaXIKK251bWJlciBnZXRzIHRvbyBsYXJnZS4KKworV2VhciBsZXZlbGluZyBpcyBkb25lIGJ5IG9jY2FzaW9uYWxseSBwaWNraW5nIGEgc3Vib3B0aW1hbCBzZWdtZW50IGZvcgorZ2FyYmFnZSBjb2xsZWN0aW9uLiAgSWYgYSBzdGFsZSBzZWdtZW50cyBlcmFzZSBjb3VudCBpcyBzaWduaWZpY2FudGx5Citsb3dlciB0aGFuIHRoZSBhY3RpdmUgc2VnbWVudHMnIGVyYXNlIGNvdW50cywgaXQgd2lsbCBiZSBwaWNrZWQuICBXZWFyCitsZXZlbGluZyBpcyByYXRlIGxpbWl0ZWQsIHNvIGl0IHdpbGwgbmV2ZXIgbW9ub3BvbGl6ZSB0aGUgZGV2aWNlIGZvcgorbW9yZSB0aGFuIG9uZSBzZWdtZW50IHdvcnRoIGF0IGEgdGltZS4KKworVmFsdWVzIGZvciAib2NjYXNpb25hbGx5IiwgInNpZ25pZmljYW50bHkgbG93ZXIiIGFyZSBjb21waWxlIHRpbWUKK2NvbnN0YW50cy4KKworSGFzaGVkIGRpcmVjdG9yaWVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gc2F0aXNmeSBlZmZpY2llbnQgbG9va3VwKCksIGRpcmVjdG9yeSBlbnRyaWVzIGFyZSBoYXNoZWQgYW5kCitsb2NhdGVkIGJhc2VkIG9uIHRoZSBoYXNoLiAgSW4gb3JkZXIgdG8gYm90aCBzdXBwb3J0IGxhcmdlIGRpcmVjdG9yaWVzCithbmQgbm90IGJlIG92ZXJseSBpbmVmZmljaWVudCBmb3Igc21hbGwgZGlyZWN0b3JpZXMsIHNldmVyYWwgaGFzaAordGFibGVzIG9mIGluY3JlYXNpbmcgc2l6ZSBhcmUgdXNlZC4gIEZvciBlYWNoIHRhYmxlLCB0aGUgaGFzaCB2YWx1ZQorbW9kdWxvIHRoZSB0YWJsZSBzaXplIGdpdmVzIHRoZSB0YWJsZSBpbmRleC4KKworVGFibGVzIHNpemVzIGFyZSBjaG9zZW4gdG8gbGltaXQgdGhlIG51bWJlciBvZiBpbmRpcmVjdCBibG9ja3Mgd2l0aCBhCitmdWxseSBwb3B1bGF0ZWQgdGFibGUgdG8gMCwgMSwgMiBvciAzIHJlc3BlY3RpdmVseS4gIFNvIHRoZSBmaXJzdAordGFibGUgY29udGFpbnMgMTYgZW50cmllcywgdGhlIHNlY29uZCA1MTItMTYsIGV0Yy4KKworVGhlIGxhc3QgdGFibGUgaXMgc3BlY2lhbCBpbiBzZXZlcmFsIHdheXMuICBGaXJzdCBpdHMgc2l6ZSBkZXBlbmRzIG9uCit0aGUgZWZmZWN0aXZlIDMyYml0IGxpbWl0IG9uIHRlbGxkaXIvc2Vla2RpciBjb29raWVzLiAgU2luY2UgbG9nZnMKK3VzZXMgdGhlIHVwcGVyIGhhbGYgb2YgdGhlIGFkZHJlc3Mgc3BhY2UgZm9yIGluZGlyZWN0IGJsb2NrcywgdGhlIHNpemUKK2lzIGxpbWl0ZWQgdG8gMl4zMS4gIFNlY29uZGx5IHRoZSB0YWJsZSBjb250YWlucyBoYXNoIGJ1Y2tldHMgd2l0aCAxNgorZW50cmllcyBlYWNoLgorCitVc2luZyBzaW5nbGUtZW50cnkgYnVja2V0cyB3b3VsZCByZXN1bHQgaW4gYmlydGhkYXkgImF0dGFja3MiLiAgQXQKK2p1c3QgMl4xNiB1c2VkIGVudHJpZXMsIGhhc2ggY29sbGlzaW9ucyB3b3VsZCBiZSBsaWtlbHkgKFAgPj0gMC41KS4KK015IG1hdGggc2tpbGxzIGFyZSBpbnN1ZmZpY2llbnQgdG8gZG8gdGhlIGNvbWJpbmF0b3JpY3MgZm9yIHRoZSAxN3gKK2NvbGxpc2lvbnMgbmVjZXNzYXJ5IHRvIG92ZXJmbG93IGEgYnVja2V0LCBidXQgdGVzdGluZyBzaG93ZWQgdGhhdCBpbgorMTAsMDAwIHJ1bnMgdGhlIGxvd2VzdCBkaXJlY3RvcnkgZmlsbCBiZWZvcmUgYSBidWNrZXQgb3ZlcmZsb3cgd2FzCisxODgsMDU3LDEzMCBlbnRyaWVzIHdpdGggYW4gYXZlcmFnZSBvZiAzMTUsMTQ5LDkxNSBlbnRyaWVzLiAgU28gZm9yCitkaXJlY3Rvcnkgc2l6ZXMgb2YgdXAgdG8gYSBtaWxsaW9uLCBidWNrZXQgb3ZlcmZsb3dzIHNob3VsZCBiZQordmlydHVhbGx5IGltcG9zc2libGUgdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMuCisKK1dpdGggY2FyZWZ1bGx5IGNob3NlbiBmaWxlbmFtZXMsIGl0IGlzIG9idmlvdXNseSBwb3NzaWJsZSB0byBjYXVzZSBhbgorb3ZlcmZsb3cgd2l0aCBqdXN0IDIxIGVudHJpZXMgKDQgaGlnaGVyIHRhYmxlcyArIDE2IGVudHJpZXMgKyAxKS4gIFNvCit0aGVyZSBtYXkgYmUgYSBzZWN1cml0eSBjb25jZXJuIGlmIGEgbWFsaWNpb3VzIHVzZXIgaGFzIHdyaXRlIGFjY2VzcwordG8gYSBkaXJlY3RvcnkuCisKK09wZW4gRm9yIERpc2N1c3Npb24KKz09PT09PT09PT09PT09PT09PT0KKworRGV2aWNlIEFkZHJlc3MgU3BhY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgZGV2aWNlIGFkZHJlc3Mgc3BhY2UgaXMgdXNlZCBmb3IgY2FjaGluZy4gIEJvdGggYmxvY2sgZGV2aWNlcyBhbmQKK01URCBwcm92aWRlIGZ1bmN0aW9ucyB0byBlaXRoZXIgcmVhZCBhIHNpbmdsZSBwYWdlIG9yIHdyaXRlIGEgc2VnbWVudC4KK1BhcnRpYWwgc2VnbWVudHMgbWF5IGJlIHdyaXR0ZW4gZm9yIGRhdGEgaW50ZWdyaXR5LCBidXQgd2hlcmUgcG9zc2libGUKK2NvbXBsZXRlIHNlZ21lbnRzIGFyZSB3cml0dGVuIGZvciBwZXJmb3JtYW5jZSBvbiBzaW1wbGUgYmxvY2sgZGV2aWNlCitmbGFzaCBtZWRpYS4KKworTWV0YSBJbm9kZXMKKy0tLS0tLS0tLS0tCisKK0lub2RlcyBhcmUgc3RvcmVkIGluIHRoZSBpbm9kZSBmaWxlLCB3aGljaCBpcyBqdXN0IGEgcmVndWxhciBmaWxlIGZvcgorbW9zdCBwdXJwb3Nlcy4gIEF0IHVtb3VudCB0aW1lLCBob3dldmVyLCB0aGUgaW5vZGUgZmlsZSBuZWVkcyB0bworcmVtYWluIG9wZW4gdW50aWwgYWxsIGRpcnR5IGlub2RlcyBhcmUgd3JpdHRlbi4gIFNvCitnZW5lcmljX3NodXRkb3duX3N1cGVyKCkgbWF5IG5vdCBjbG9zZSB0aGlzIGlub2RlLCBidXQgc2hvdWxkbid0Citjb21wbGFpbiBhYm91dCByZW1haW5pbmcgaW5vZGVzIGR1ZSB0byB0aGUgaW5vZGUgZmlsZSBlaXRoZXIuICBTYW1lCitnb2VzIGZvciBtYXBwaW5nIGlub2RlIG9mIHRoZSBkZXZpY2UgYWRkcmVzcyBzcGFjZS4KKworQ3VycmVudGx5IGxvZ2ZzIHVzZXMgYSBoYWNrIHRoYXQgZXNzZW50aWFsbHkgY29waWVzIHBhcnQgb2YgZnMvaW5vZGUuYworY29kZSBvdmVyLiAgQSBnZW5lcmFsIHNvbHV0aW9uIHdvdWxkIGJlIHByZWZlcnJlZC4KKworSW5kaXJlY3QgYmxvY2sgbWFwcGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaXRoIGNvbXByZXNzaW9uLCB0aGUgYmxvY2sgZGV2aWNlIChvciBtYXBwaW5nIGlub2RlKSBjYW5ub3QgYmUgdXNlZAordG8gY2FjaGUgaW5kaXJlY3QgYmxvY2tzLiAgU29tZSBvdGhlciBwbGFjZSBpcyByZXF1aXJlZC4gIEN1cnJlbnRseQorbG9nZnMgdXNlcyB0aGUgdG9wIGhhbGYgb2YgZWFjaCBpbm9kZSdzIGFkZHJlc3Mgc3BhY2UuICBUaGUgbG93IDhUQgorKG9uIDMyYml0KSBhcmUgZmlsbGVkIHdpdGggZmlsZSBkYXRhLCB0aGUgaGlnaCA4VEIgYXJlIHVzZWQgZm9yCitpbmRpcmVjdCBibG9ja3MuCisKK09uZSBwcm9ibGVtIGlzIHRoYXQgMTZUQiBmaWxlcyBjcmVhdGVkIG9uIDY0Yml0IHN5c3RlbXMgYWN0dWFsbHkgaGF2ZQorZGF0YSBpbiB0aGUgdG9wIDhUQi4gIEJ1dCBmaWxlcyA+MTZUQiB3b3VsZCBjYXVzZSBwcm9ibGVtcyBhbnl3YXksIHNvCitvbmx5IHRoZSBsaW1pdCBoYXMgY2hhbmdlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mczQxLXNlcnZlci50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnM0MS1zZXJ2ZXIudHh0CmluZGV4IDFiZDBkMGMuLjZhNTNhODQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mczQxLXNlcnZlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzNDEtc2VydmVyLnR4dApAQCAtMTcsOCArMTcsNyBAQAogb24gb3Igb2ZmOyBycGMubmZzZCBkb2VzIHRoaXMgY29ycmVjdGx5LikKIAogVGhlIE5GU3Y0IG1pbm9ydmVyc2lvbiAxIChORlN2NC4xKSBpbXBsZW1lbnRhdGlvbiBpbiBuZnNkIGlzIGJhc2VkCi1vbiB0aGUgbGF0ZXN0IE5GU3Y0LjEgSW50ZXJuZXQgRHJhZnQ6Ci1odHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLW5mc3Y0LW1pbm9ydmVyc2lvbjEtMjkKK29uIFJGQyA1NjYxLgogCiBGcm9tIHRoZSBtYW55IG5ldyBmZWF0dXJlcyBpbiBORlN2NC4xIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uCiBmb2N1c2VzIG9uIHRoZSBtYW5kYXRvcnktdG8taW1wbGVtZW50IE5GU3Y0LjEgU2Vzc2lvbnMsIHByb3ZpZGluZwpAQCAtNDQsNyArNDMsNyBAQAogCSAgdHJ1bmtpbmcsIGJ1dCB0aGlzIGlzIGEgbWFuZGF0b3J5IGZlYXR1cmUsIGFuZCBpdHMgdXNlIGlzCiAJICByZWNvbW1lbmRlZCB0byBjbGllbnRzIGluIGEgbnVtYmVyIG9mIHBsYWNlcy4gIChFLmcuIHRvIGVuc3VyZQogCSAgdGltZWx5IHJlbmV3YWwgaW4gY2FzZSBhbiBleGlzdGluZyBjb25uZWN0aW9uJ3MgcmV0cnkgdGltZW91dHMKLQkgIGhhdmUgZ290dGVuIHRvbyBsb25nOyBzZWUgc2VjdGlvbiA4LjMgb2YgdGhlIGRyYWZ0LikKKwkgIGhhdmUgZ290dGVuIHRvbyBsb25nOyBzZWUgc2VjdGlvbiA4LjMgb2YgdGhlIFJGQy4pCiAJICBUaGVyZWZvcmUsIGxhY2sgb2YgdGhpcyBmZWF0dXJlIG1heSBjYXVzZSBmdXR1cmUgY2xpZW50cyB0bwogCSAgZmFpbC4KIAktIEluY29tcGxldGUgYmFja2NoYW5uZWwgc3VwcG9ydDogaW5jb21wbGV0ZSBiYWNrY2hhbm5lbCBnc3MKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CmluZGV4IDBkMDc1MTMuLjk2YTQ0ZGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dApAQCAtMTY0LDYgKzE2NCw3IEBACiAgIFZtRXhlOiAgICAgICAgNjgga0IKICAgVm1MaWI6ICAgICAgMTQxMiBrQgogICBWbVBURTogICAgICAgIDIwIGtiCisgIFZtU3dhcDogICAgICAgIDAga0IKICAgVGhyZWFkczogICAgICAgIDEKICAgU2lnUTogICAwLzI4NTc4CiAgIFNpZ1BuZDogMDAwMDAwMDAwMDAwMDAwMApAQCAtMTg4LDYgKzE4OSwxMiBAQAogY29udGFpbnMgZGV0YWlscyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvY2VzcyBpdHNlbGYuICBJdHMgZmllbGRzIGFyZQogZXhwbGFpbmVkIGluIFRhYmxlIDEtNC4KIAorKGZvciBTTVAgQ09ORklHIHVzZXJzKQorRm9yIG1ha2luZyBhY2NvdW50aW5nIHNjYWxhYmxlLCBSU1MgcmVsYXRlZCBpbmZvcm1hdGlvbiBhcmUgaGFuZGxlZCBpbgorYXN5bmNocm9ub3VzIG1hbm5lciBhbmQgdGhlIHZhdWxlIG1heSBub3QgYmUgdmVyeSBwcmVjaXNlLiBUbyBzZWUgYSBwcmVjaXNlCitzbmFwc2hvdCBvZiBhIG1vbWVudCwgeW91IGNhbiBzZWUgL3Byb2MvPHBpZD4vc21hcHMgZmlsZSBhbmQgc2NhbiBwYWdlIHRhYmxlLgorSXQncyBzbG93IGJ1dCB2ZXJ5IHByZWNpc2UuCisKIFRhYmxlIDEtMjogQ29udGVudHMgb2YgdGhlIHN0YXRtIGZpbGVzIChhcyBvZiAyLjYuMzAtcmM3KQogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAgRmllbGQgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQKQEAgLTIxMyw2ICsyMjAsNyBAQAogIFZtRXhlICAgICAgICAgICAgICAgICAgICAgICBzaXplIG9mIHRleHQgc2VnbWVudAogIFZtTGliICAgICAgICAgICAgICAgICAgICAgICBzaXplIG9mIHNoYXJlZCBsaWJyYXJ5IGNvZGUKICBWbVBURSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSBvZiBwYWdlIHRhYmxlIGVudHJpZXMKKyBWbVN3YXAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSBvZiBzd2FwIHVzYWdlICh0aGUgbnVtYmVyIG9mIHJlZmVycmVkIHN3YXBlbnRzKQogIFRocmVhZHMgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgdGhyZWFkcwogIFNpZ1EgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2Ygc2lnbmFscyBxdWV1ZWQvbWF4LiBudW1iZXIgZm9yIHF1ZXVlCiAgU2lnUG5kICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCBvZiBwZW5kaW5nIHNpZ25hbHMgZm9yIHRoZSB0aHJlYWQKQEAgLTQzMCw2ICs0MzgsNyBAQAogIG1vZHVsZXMgICAgIExpc3Qgb2YgbG9hZGVkIG1vZHVsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgbW91bnRzICAgICAgTW91bnRlZCBmaWxlc3lzdGVtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBuZXQgICAgICAgICBOZXR3b3JraW5nIGluZm8gKHNlZSB0ZXh0KSAgICAgICAgICAgICAgICAgICAgICAgIAorIHBhZ2V0eXBlaW5mbyBBZGRpdGlvbmFsIHBhZ2UgYWxsb2NhdG9yIGluZm9ybWF0aW9uIChzZWUgdGV4dCkgICgyLjUpCiAgcGFydGl0aW9ucyAgVGFibGUgb2YgcGFydGl0aW9ucyBrbm93biB0byB0aGUgc3lzdGVtICAgICAgICAgICAKICBwY2kJICAgICBEZXByZWNhdGVkIGluZm8gb2YgUENJIGJ1cyAobmV3IHdheSAtPiAvcHJvYy9idXMvcGNpLywKICAgICAgICAgICAgICBkZWNvdXBsZWQgYnkgbHNwY2kJCQkJCSgyLjQpCkBAIC01ODQsNyArNTkzLDcgQEAKIE5vZGUgMCwgem9uZSAgIE5vcm1hbCAgICAgIDEgICAgICAwICAgICAgMCAgICAgIDEgICAgMTAxICAgICAgOCAuLi4KIE5vZGUgMCwgem9uZSAgSGlnaE1lbSAgICAgIDIgICAgICAwICAgICAgMCAgICAgIDEgICAgICAxICAgICAgMCAuLi4KIAotTWVtb3J5IGZyYWdtZW50YXRpb24gaXMgYSBwcm9ibGVtIHVuZGVyIHNvbWUgd29ya2xvYWRzLCBhbmQgYnVkZHlpbmZvIGlzIGEgCitFeHRlcm5hbCBmcmFnbWVudGF0aW9uIGlzIGEgcHJvYmxlbSB1bmRlciBzb21lIHdvcmtsb2FkcywgYW5kIGJ1ZGR5aW5mbyBpcyBhCiB1c2VmdWwgdG9vbCBmb3IgaGVscGluZyBkaWFnbm9zZSB0aGVzZSBwcm9ibGVtcy4gIEJ1ZGR5aW5mbyB3aWxsIGdpdmUgeW91IGEgCiBjbHVlIGFzIHRvIGhvdyBiaWcgYW4gYXJlYSB5b3UgY2FuIHNhZmVseSBhbGxvY2F0ZSwgb3Igd2h5IGEgcHJldmlvdXMKIGFsbG9jYXRpb24gZmFpbGVkLgpAQCAtNTk0LDYgKzYwMyw0OCBAQAogWk9ORV9ETUEsIDQgY2h1bmtzIG9mIDJeMSpQQUdFX1NJWkUgaW4gWk9ORV9ETUEsIDEwMSBjaHVua3Mgb2YgMl40KlBBR0VfU0laRSAKIGF2YWlsYWJsZSBpbiBaT05FX05PUk1BTCwgZXRjLi4uIAogCitNb3JlIGluZm9ybWF0aW9uIHJlbGV2YW50IHRvIGV4dGVybmFsIGZyYWdtZW50YXRpb24gY2FuIGJlIGZvdW5kIGluCitwYWdldHlwZWluZm8uCisKKz4gY2F0IC9wcm9jL3BhZ2V0eXBlaW5mbworUGFnZSBibG9jayBvcmRlcjogOQorUGFnZXMgcGVyIGJsb2NrOiAgNTEyCisKK0ZyZWUgcGFnZXMgY291bnQgcGVyIG1pZ3JhdGUgdHlwZSBhdCBvcmRlciAgICAgICAwICAgICAgMSAgICAgIDIgICAgICAzICAgICAgNCAgICAgIDUgICAgICA2ICAgICAgNyAgICAgIDggICAgICA5ICAgICAxMAorTm9kZSAgICAwLCB6b25lICAgICAgRE1BLCB0eXBlICAgIFVubW92YWJsZSAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDEgICAgICAxICAgICAgMSAgICAgIDEgICAgICAxICAgICAgMSAgICAgIDEgICAgICAwCitOb2RlICAgIDAsIHpvbmUgICAgICBETUEsIHR5cGUgIFJlY2xhaW1hYmxlICAgICAgMCAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDAKK05vZGUgICAgMCwgem9uZSAgICAgIERNQSwgdHlwZSAgICAgIE1vdmFibGUgICAgICAxICAgICAgMSAgICAgIDIgICAgICAxICAgICAgMiAgICAgIDEgICAgICAxICAgICAgMCAgICAgIDEgICAgICAwICAgICAgMgorTm9kZSAgICAwLCB6b25lICAgICAgRE1BLCB0eXBlICAgICAgUmVzZXJ2ZSAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDEgICAgICAwCitOb2RlICAgIDAsIHpvbmUgICAgICBETUEsIHR5cGUgICAgICBJc29sYXRlICAgICAgMCAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDAKK05vZGUgICAgMCwgem9uZSAgICBETUEzMiwgdHlwZSAgICBVbm1vdmFibGUgICAgMTAzICAgICA1NCAgICAgNzcgICAgICAxICAgICAgMSAgICAgIDEgICAgIDExICAgICAgOCAgICAgIDcgICAgICAxICAgICAgOQorTm9kZSAgICAwLCB6b25lICAgIERNQTMyLCB0eXBlICBSZWNsYWltYWJsZSAgICAgIDAgICAgICAwICAgICAgMiAgICAgIDEgICAgICAwICAgICAgMCAgICAgIDAgICAgICAwICAgICAgMSAgICAgIDAgICAgICAwCitOb2RlICAgIDAsIHpvbmUgICAgRE1BMzIsIHR5cGUgICAgICBNb3ZhYmxlICAgIDE2OSAgICAxNTIgICAgMTEzICAgICA5MSAgICAgNzcgICAgIDU0ICAgICAzOSAgICAgMTMgICAgICA2ICAgICAgMSAgICA0NTIKK05vZGUgICAgMCwgem9uZSAgICBETUEzMiwgdHlwZSAgICAgIFJlc2VydmUgICAgICAxICAgICAgMiAgICAgIDIgICAgICAyICAgICAgMiAgICAgIDAgICAgICAxICAgICAgMSAgICAgIDEgICAgICAxICAgICAgMAorTm9kZSAgICAwLCB6b25lICAgIERNQTMyLCB0eXBlICAgICAgSXNvbGF0ZSAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDAgICAgICAwCisKK051bWJlciBvZiBibG9ja3MgdHlwZSAgICAgVW5tb3ZhYmxlICBSZWNsYWltYWJsZSAgICAgIE1vdmFibGUgICAgICBSZXNlcnZlICAgICAgSXNvbGF0ZQorTm9kZSAwLCB6b25lICAgICAgRE1BICAgICAgICAgICAgMiAgICAgICAgICAgIDAgICAgICAgICAgICA1ICAgICAgICAgICAgMSAgICAgICAgICAgIDAKK05vZGUgMCwgem9uZSAgICBETUEzMiAgICAgICAgICAgNDEgICAgICAgICAgICA2ICAgICAgICAgIDk2NyAgICAgICAgICAgIDIgICAgICAgICAgICAwCisKK0ZyYWdtZW50YXRpb24gYXZvaWRhbmNlIGluIHRoZSBrZXJuZWwgd29ya3MgYnkgZ3JvdXBpbmcgcGFnZXMgb2YgZGlmZmVyZW50CittaWdyYXRlIHR5cGVzIGludG8gdGhlIHNhbWUgY29udGlndW91cyByZWdpb25zIG9mIG1lbW9yeSBjYWxsZWQgcGFnZSBibG9ja3MuCitBIHBhZ2UgYmxvY2sgaXMgdHlwaWNhbGx5IHRoZSBzaXplIG9mIHRoZSBkZWZhdWx0IGh1Z2VwYWdlIHNpemUgZS5nLiAyTUIgb24KK1g4Ni02NC4gQnkga2VlcGluZyBwYWdlcyBncm91cGVkIGJhc2VkIG9uIHRoZWlyIGFiaWxpdHkgdG8gbW92ZSwgdGhlIGtlcm5lbAorY2FuIHJlY2xhaW0gcGFnZXMgd2l0aGluIGEgcGFnZSBibG9jayB0byBzYXRpc2Z5IGEgaGlnaC1vcmRlciBhbGxvY2F0aW9uLgorCitUaGUgcGFnZXR5cGluZm8gYmVnaW5zIHdpdGggaW5mb3JtYXRpb24gb24gdGhlIHNpemUgb2YgYSBwYWdlIGJsb2NrLiBJdAordGhlbiBnaXZlcyB0aGUgc2FtZSB0eXBlIG9mIGluZm9ybWF0aW9uIGFzIGJ1ZGR5aW5mbyBleGNlcHQgYnJva2VuIGRvd24KK2J5IG1pZ3JhdGUtdHlwZSBhbmQgZmluaXNoZXMgd2l0aCBkZXRhaWxzIG9uIGhvdyBtYW55IHBhZ2UgYmxvY2tzIG9mIGVhY2gKK3R5cGUgZXhpc3QuCisKK0lmIG1pbl9mcmVlX2tieXRlcyBoYXMgYmVlbiB0dW5lZCBjb3JyZWN0bHkgKHJlY29tbWVuZGF0aW9ucyBtYWRlIGJ5IGh1Z2VhZG0KK2Zyb20gbGliaHVnZXRsYmZzIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGliaHVnZXRsYmZzLyksIG9uZSBjYW4KK21ha2UgYW4gZXN0aW1hdGUgb2YgdGhlIGxpa2VseSBudW1iZXIgb2YgaHVnZSBwYWdlcyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQKK2F0IGEgZ2l2ZW4gcG9pbnQgaW4gdGltZS4gQWxsIHRoZSAiTW92YWJsZSIgYmxvY2tzIHNob3VsZCBiZSBhbGxvY2F0YWJsZQordW5sZXNzIG1lbW9yeSBoYXMgYmVlbiBtbG9jaygpJ2QuIFNvbWUgb2YgdGhlIFJlY2xhaW1hYmxlIGJsb2NrcyBzaG91bGQKK2Fsc28gYmUgYWxsb2NhdGFibGUgYWx0aG91Z2ggYSBsb3Qgb2YgZmlsZXN5c3RlbSBtZXRhZGF0YSBtYXkgaGF2ZSB0byBiZQorcmVjbGFpbWVkIHRvIGFjaGlldmUgdGhpcy4KKwogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKIG1lbWluZm86CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9ncGlvLnR4dAppbmRleCAxODY2YzI3Li5jMmM2ZTliIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dwaW8udHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ3Bpby50eHQKQEAgLTI1Myw2ICsyNTMsNzAgQEAKIEFsc28gbm90ZSB0aGF0IGl0J3MgeW91ciByZXNwb25zaWJpbGl0eSB0byBoYXZlIHN0b3BwZWQgdXNpbmcgYSBHUElPCiBiZWZvcmUgeW91IGZyZWUgaXQuCiAKK0NvbnNpZGVyaW5nIGluIG1vc3QgY2FzZXMgR1BJT3MgYXJlIGFjdHVhbGx5IGNvbmZpZ3VyZWQgcmlnaHQgYWZ0ZXIgdGhleQorYXJlIGNsYWltZWQsIHRocmVlIGFkZGl0aW9uYWwgY2FsbHMgYXJlIGRlZmluZWQ6CisKKwkvKiByZXF1ZXN0IGEgc2luZ2xlIEdQSU8sIHdpdGggaW5pdGlhbCBjb25maWd1cmF0aW9uIHNwZWNpZmllZCBieQorCSAqICdmbGFncycsIGlkZW50aWNhbCB0byBncGlvX3JlcXVlc3QoKSB3cnQgb3RoZXIgYXJndW1lbnRzIGFuZAorCSAqIHJldHVybiB2YWx1ZQorCSAqLworCWludCBncGlvX3JlcXVlc3Rfb25lKHVuc2lnbmVkIGdwaW8sIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNvbnN0IGNoYXIgKmxhYmVsKTsKKworCS8qIHJlcXVlc3QgbXVsdGlwbGUgR1BJT3MgaW4gYSBzaW5nbGUgY2FsbAorCSAqLworCWludCBncGlvX3JlcXVlc3RfYXJyYXkoc3RydWN0IGdwaW8gKmFycmF5LCBzaXplX3QgbnVtKTsKKworCS8qIHJlbGVhc2UgbXVsdGlwbGUgR1BJT3MgaW4gYSBzaW5nbGUgY2FsbAorCSAqLworCXZvaWQgZ3Bpb19mcmVlX2FycmF5KHN0cnVjdCBncGlvICphcnJheSwgc2l6ZV90IG51bSk7CisKK3doZXJlICdmbGFncycgaXMgY3VycmVudGx5IGRlZmluZWQgdG8gc3BlY2lmeSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CisKKwkqIEdQSU9GX0RJUl9JTgkJLSB0byBjb25maWd1cmUgZGlyZWN0aW9uIGFzIGlucHV0CisJKiBHUElPRl9ESVJfT1VUCQktIHRvIGNvbmZpZ3VyZSBkaXJlY3Rpb24gYXMgb3V0cHV0CisKKwkqIEdQSU9GX0lOSVRfTE9XCS0gYXMgb3V0cHV0LCBzZXQgaW5pdGlhbCBsZXZlbCB0byBMT1cKKwkqIEdQSU9GX0lOSVRfSElHSAktIGFzIG91dHB1dCwgc2V0IGluaXRpYWwgbGV2ZWwgdG8gSElHSAorCitzaW5jZSBHUElPRl9JTklUXyogYXJlIG9ubHkgdmFsaWQgd2hlbiBjb25maWd1cmVkIGFzIG91dHB1dCwgc28gZ3JvdXAgdmFsaWQKK2NvbWJpbmF0aW9ucyBhczoKKworCSogR1BJT0ZfSU4JCS0gY29uZmlndXJlIGFzIGlucHV0CisJKiBHUElPRl9PVVRfSU5JVF9MT1cJLSBjb25maWd1cmVkIGFzIG91dHB1dCwgaW5pdGlhbCBsZXZlbCBMT1cKKwkqIEdQSU9GX09VVF9JTklUX0hJR0gJLSBjb25maWd1cmVkIGFzIG91dHB1dCwgaW5pdGlhbCBsZXZlbCBISUdICisKK0luIHRoZSBmdXR1cmUsIHRoZXNlIGZsYWdzIGNhbiBiZSBleHRlbmRlZCB0byBzdXBwb3J0IG1vcmUgcHJvcGVydGllcyBzdWNoCithcyBvcGVuLWRyYWluIHN0YXR1cy4KKworRnVydGhlciBtb3JlLCB0byBlYXNlIHRoZSBjbGFpbS9yZWxlYXNlIG9mIG11bHRpcGxlIEdQSU9zLCAnc3RydWN0IGdwaW8nIGlzCitpbnRyb2R1Y2VkIHRvIGVuY2Fwc3VsYXRlIGFsbCB0aHJlZSBmaWVsZHMgYXM6CisKKwlzdHJ1Y3QgZ3BpbyB7CisJCXVuc2lnbmVkCWdwaW87CisJCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisJCWNvbnN0IGNoYXIJKmxhYmVsOworCX07CisKK0EgdHlwaWNhbCBleGFtcGxlIG9mIHVzYWdlOgorCisJc3RhdGljIHN0cnVjdCBncGlvIGxlZHNfZ3Bpb3NbXSA9IHsKKwkJeyAzMiwgR1BJT0ZfT1VUX0lOSVRfSElHSCwgIlBvd2VyIExFRCIgfSwgLyogZGVmYXVsdCB0byBPTiAqLworCQl7IDMzLCBHUElPRl9PVVRfSU5JVF9MT1csICAiR3JlZW4gTEVEIiB9LCAvKiBkZWZhdWx0IHRvIE9GRiAqLworCQl7IDM0LCBHUElPRl9PVVRfSU5JVF9MT1csICAiUmVkIExFRCIgICB9LCAvKiBkZWZhdWx0IHRvIE9GRiAqLworCQl7IDM1LCBHUElPRl9PVVRfSU5JVF9MT1csICAiQmx1ZSBMRUQiICB9LCAvKiBkZWZhdWx0IHRvIE9GRiAqLworCQl7IC4uLiB9LAorCX07CisKKwllcnIgPSBncGlvX3JlcXVlc3Rfb25lKDMxLCBHUElPRl9JTiwgIlJlc2V0IEJ1dHRvbiIpOworCWlmIChlcnIpCisJCS4uLgorCisJZXJyID0gZ3Bpb19yZXF1ZXN0X2FycmF5KGxlZHNfZ3Bpb3MsIEFSUkFZX1NJWkUobGVkc19ncGlvcykpOworCWlmIChlcnIpCisJCS4uLgorCisJZ3Bpb19mcmVlX2FycmF5KGxlZHNfZ3Bpb3MsIEFSUkFZX1NJWkUobGVkc19ncGlvcykpOworCiAKIEdQSU9zIG1hcHBlZCB0byBJUlFzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9hZHQ3NDExIGIvRG9jdW1lbnRhdGlvbi9od21vbi9hZHQ3NDExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MzI5NjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2FkdDc0MTEKQEAgLTAsMCArMSw0MiBAQAorS2VybmVsIGRyaXZlciBhZHQ3NDExCis9PT09PT09PT09PT09PT09PT09PT0KKworU3VwcG9ydGVkIGNoaXBzOgorICAqIEFuYWxvZyBEZXZpY2VzIEFEVDc0MTEKKyAgICBQcmVmaXg6ICdhZHQ3NDExJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiAweDQ4LCAweDRhLCAweDRiCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIEFuYWxvZyBEZXZpY2VzIHdlYnNpdGUKKworQXV0aG9yOiBXb2xmcmFtIFNhbmcgKGJhc2VkIG9uIGFkdDc0NzAgYnkgRGFycmljayBKLiBXb25nKQorCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBzdXBwb3J0IGZvciB0aGUgQW5hbG9nIERldmljZXMgQURUNzQxMSBjaGlwLiBUaGVyZSBtYXkKK2JlIG90aGVyIGNoaXBzIHRoYXQgaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLgorCitUaGUgQURUNzQxMSBjYW4gdXNlIGFuIEkyQy9TTUJ1cyBjb21wYXRpYmxlIDItd2lyZSBpbnRlcmZhY2Ugb3IgYW4KK1NQSS1jb21wYXRpYmxlIDQtd2lyZSBpbnRlcmZhY2UuIEl0IHByb3ZpZGVzIGEgMTAtYml0IGFuYWxvZyB0byBkaWdpdGFsCitjb252ZXJ0ZXIgd2hpY2ggbWVhc3VyZXMgMSB0ZW1wZXJhdHVyZSwgdmRkIGFuZCA4IGlucHV0IHZvbHRhZ2VzLiBJdCBoYXMgYW4KK2ludGVybmFsIHRlbXBlcmF0dXJlIHNlbnNvciwgYnV0IGFuIGV4dGVybmFsIG9uZSBjYW4gYWxzbyBiZSBjb25uZWN0ZWQgKG9uZQorbG9zZXMgMiBpbnB1dHMgdGhlbikuIFRoZXJlIGFyZSBoaWdoLSBhbmQgbG93LWxpbWl0IHJlZ2lzdGVycyBmb3IgYWxsIGlucHV0cy4KKworQ2hlY2sgdGhlIGRhdGFzaGVldCBmb3IgZGV0YWlscy4KKworc3lzZnMtSW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0KKworaW4wX2lucHV0CS0gdmRkIHZvbHRhZ2UgaW5wdXQKK2luWzEtOF1faW5wdXQJLSBhbmFsb2cgMS04IGlucHV0Cit0ZW1wMV9pbnB1dAktIHRlbXBlcmF0dXJlIGlucHV0CisKK0Jlc2lkZXMgc3RhbmRhcmQgaW50ZXJmYWNlcywgdGhpcyBkcml2ZXIgYWRkcyAoMCA9IG9mZiwgMSA9IG9uKToKKworICBhZGNfcmVmX3ZkZAktIFVzZSB2ZGQgYXMgcmVmZXJlbmNlIGluc3RlYWQgb2YgMi4yNSBWCisgIGZhc3Rfc2FtcGxpbmcJLSBTYW1wbGUgYXQgMjIuNSBrSHogaW5zdGVhZCBvZiAxLjQga0h6LCBidXQgZHJvcCBmaWx0ZXJzCisgIG5vX2F2ZXJhZ2UJLSBUdXJuIG9mZiBhdmVyYWdpbmcgb3ZlciAxNiBzYW1wbGVzCisKK05vdGVzCistLS0tLQorCitTUEksIGV4dGVybmFsIHRlbXBlcmF0dXJlIHNlbnNvciBhbmQgbGltaXQgcmVnaXN0ZXJzIGFyZSBub3Qgc3VwcG9ydGVkIHlldC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vYWR0NzQ3MyBiL0RvY3VtZW50YXRpb24vaHdtb24vYWR0NzQ3MwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDQ2NjEyYi4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2FkdDc0NzMKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi1LZXJuZWwgZHJpdmVyIGFkdDc0NzMKLT09PT09PT09PT09PT09PT09PT09PT0KLQotU3VwcG9ydGVkIGNoaXBzOgotICAqIEFuYWxvZyBEZXZpY2VzIEFEVDc0NzMKLSAgICBQcmVmaXg6ICdhZHQ3NDczJwotICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHgyQywgMHgyRCwgMHgyRQotICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBBbmFsb2cgRGV2aWNlcyB3ZWJzaXRlCi0KLUF1dGhvcjogRGFycmljayBKLiBXb25nCi0KLVRoaXMgZHJpdmVyIGlzIGRlcHJlYWN0ZWQsIHBsZWFzZSB1c2UgdGhlIGFkdDc0NzUgZHJpdmVyIGluc3RlYWQuCi0KLURlc2NyaXB0aW9uCi0tLS0tLS0tLS0tLQotCi1UaGlzIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIHRoZSBBbmFsb2cgRGV2aWNlcyBBRFQ3NDczIGNoaXAgZmFtaWx5LgotCi1UaGUgQURUNzQ3MyB1c2VzIHRoZSAyLXdpcmUgaW50ZXJmYWNlIGNvbXBhdGlibGUgd2l0aCB0aGUgU01CVVMgMi4wCi1zcGVjaWZpY2F0aW9uLiBVc2luZyBhbiBhbmFsb2cgdG8gZGlnaXRhbCBjb252ZXJ0ZXIgaXQgbWVhc3VyZXMgdGhyZWUgKDMpCi10ZW1wZXJhdHVyZXMgYW5kIHR3byAoMikgdm9sdGFnZXMuIEl0IGhhcyBmb3VyICg0KSAxNi1iaXQgY291bnRlcnMgZm9yCi1tZWFzdXJpbmcgZmFuIHNwZWVkLiBUaGVyZSBhcmUgdGhyZWUgKDMpIFBXTSBvdXRwdXRzIHRoYXQgY2FuIGJlIHVzZWQKLXRvIGNvbnRyb2wgZmFuIHNwZWVkLgotCi1BIHNvcGhpc3RpY2F0ZWQgY29udHJvbCBzeXN0ZW0gZm9yIHRoZSBQV00gb3V0cHV0cyBpcyBkZXNpZ25lZCBpbnRvIHRoZQotQURUNzQ3MyB0aGF0IGFsbG93cyBmYW4gc3BlZWQgdG8gYmUgYWRqdXN0ZWQgYXV0b21hdGljYWxseSBiYXNlZCBvbiBhbnkgb2YgdGhlCi10aHJlZSB0ZW1wZXJhdHVyZSBzZW5zb3JzLiBFYWNoIFBXTSBvdXRwdXQgaXMgaW5kaXZpZHVhbGx5IGFkanVzdGFibGUgYW5kCi1wcm9ncmFtbWFibGUuIE9uY2UgY29uZmlndXJlZCwgdGhlIEFEVDc0NzMgd2lsbCBhZGp1c3QgdGhlIFBXTSBvdXRwdXRzIGluCi1yZXNwb25zZSB0byB0aGUgbWVhc3VyZWQgdGVtcGVyYXR1cmVzIHdpdGhvdXQgZnVydGhlciBob3N0IGludGVydmVudGlvbi4KLVRoaXMgZmVhdHVyZSBjYW4gYWxzbyBiZSBkaXNhYmxlZCBmb3IgbWFudWFsIGNvbnRyb2wgb2YgdGhlIFBXTSdzLgotCi1FYWNoIG9mIHRoZSBtZWFzdXJlZCBpbnB1dHMgKHZvbHRhZ2UsIHRlbXBlcmF0dXJlLCBmYW4gc3BlZWQpIGhhcwotY29ycmVzcG9uZGluZyBoaWdoL2xvdyBsaW1pdCB2YWx1ZXMuIFRoZSBBRFQ3NDczIHdpbGwgc2lnbmFsIGFuIEFMQVJNIGlmCi1hbnkgbWVhc3VyZWQgdmFsdWUgZXhjZWVkcyBlaXRoZXIgbGltaXQuCi0KLVRoZSBBRFQ3NDczIHNhbXBsZXMgYWxsIGlucHV0cyBjb250aW51b3VzbHkuIFRoZSBkcml2ZXIgd2lsbCBub3QgcmVhZAotdGhlIHJlZ2lzdGVycyBtb3JlIG9mdGVuIHRoYW4gb25jZSBldmVyeSBvdGhlciBzZWNvbmQuIEZ1cnRoZXIsCi1jb25maWd1cmF0aW9uIGRhdGEgaXMgb25seSByZWFkIG9uY2UgcGVyIG1pbnV0ZS4KLQotU3BlY2lhbCBGZWF0dXJlcwotLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgQURUNzQ3MyBoYXZlIGEgMTAtYml0IEFEQyBhbmQgY2FuIHRoZXJlZm9yZSBtZWFzdXJlIHRlbXBlcmF0dXJlcwotd2l0aCAwLjI1IGRlZ0MgcmVzb2x1dGlvbi4gVGVtcGVyYXR1cmUgcmVhZGluZ3MgY2FuIGJlIGNvbmZpZ3VyZWQgZWl0aGVyCi1mb3IgdHdvcyBjb21wbGVtZW50IGZvcm1hdCBvciAiT2Zmc2V0IDY0IiBmb3JtYXQsIHdoZXJlaW4gNjMgaXMgc3VidHJhY3RlZAotZnJvbSB0aGUgcmF3IHZhbHVlIHRvIGdldCB0aGUgdGVtcGVyYXR1cmUgdmFsdWUuCi0KLVRoZSBBbmFsb2cgRGV2aWNlcyBkYXRhc2hlZXQgaXMgdmVyeSBkZXRhaWxlZCBhbmQgZGVzY3JpYmVzIGEgcHJvY2VkdXJlIGZvcgotZGV0ZXJtaW5pbmcgYW4gb3B0aW1hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgYXV0b21hdGljIFBXTSBjb250cm9sLgotCi1Db25maWd1cmF0aW9uIE5vdGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUJlc2lkZXMgc3RhbmRhcmQgaW50ZXJmYWNlcyBkcml2ZXIgYWRkcyB0aGUgZm9sbG93aW5nOgotCi0qIFBXTSBDb250cm9sCi0KLSogcHdtI19hdXRvX3BvaW50MV9wd20gYW5kIHRlbXAjX2F1dG9fcG9pbnQxX3RlbXAgYW5kCi0qIHB3bSNfYXV0b19wb2ludDJfcHdtIGFuZCB0ZW1wI19hdXRvX3BvaW50Ml90ZW1wIC0KLQotcG9pbnQxOiBTZXQgdGhlIHB3bSBzcGVlZCBhdCBhIGxvd2VyIHRlbXBlcmF0dXJlIGJvdW5kLgotcG9pbnQyOiBTZXQgdGhlIHB3bSBzcGVlZCBhdCBhIGhpZ2hlciB0ZW1wZXJhdHVyZSBib3VuZC4KLQotVGhlIEFEVDc0NzMgd2lsbCBzY2FsZSB0aGUgcHdtIGJldHdlZW4gdGhlIGxvd2VyIGFuZCBoaWdoZXIgcHdtIHNwZWVkIHdoZW4KLXRoZSB0ZW1wZXJhdHVyZSBpcyBiZXR3ZWVuIHRoZSB0d28gdGVtcGVyYXR1cmUgYm91bmRhcmllcy4gIFBXTSB2YWx1ZXMgcmFuZ2UKLWZyb20gMCAob2ZmKSB0byAyNTUgKGZ1bGwgc3BlZWQpLiAgRmFuIHNwZWVkIHdpbGwgYmUgc2V0IHRvIG1heGltdW0gd2hlbiB0aGUKLXRlbXBlcmF0dXJlIHNlbnNvciBhc3NvY2lhdGVkIHdpdGggdGhlIFBXTSBjb250cm9sIGV4Y2VlZHMgdGVtcCNfbWF4LgotCi1Ob3RlcwotLS0tLS0KLQotVGhlIE5WSURJQSBiaW5hcnkgZHJpdmVyIHByZXNlbnRzIGFuIEFEVDc0NzMgY2hpcCB2aWEgYW4gb24tY2FyZCBpMmMgYnVzLgotVW5mb3J0dW5hdGVseSwgdGhleSBmYWlsIHRvIHNldCB0aGUgaTJjIGFkYXB0ZXIgY2xhc3MsIHNvIHRoaXMgZHJpdmVyIG1heQotZmFpbCB0byBmaW5kIHRoZSBjaGlwIHVudGlsIHRoZSBudmlkaWEgZHJpdmVyIGlzIHBhdGNoZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2FzYzc2MjEgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2FzYzc2MjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI4N2JlNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vYXNjNzYyMQpAQCAtMCwwICsxLDI5NiBAQAorS2VybmVsIGRyaXZlciBhc2M3NjIxCis9PT09PT09PT09PT09PT09PT0KKworU3VwcG9ydGVkIGNoaXBzOgorICAgIEFuZGlnaWxvZyBhU0M3NjIxIGFuZCBhU0M3NjIxYQorICAgIFByZWZpeDogJ2FzYzc2MjEnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDJjLCAweDJkLCAweDJlCisgICAgRGF0YXNoZWV0OiBodHRwOi8vd3d3LmZhaXJ2aWV3NS5jb20vbGludXgvYXNjNzYyMS9hc2M3NjIxLnBkZgorCitBdXRob3I6CisJCUdlb3JnZSBKb3NlcGgKKworRGVzY3JpcHRpb24gcHJvdmlkZWQgYnkgRGF2ZSBQaXZpbiBAIEFuZGlnaWxvZzoKKworQW5kaWdpbG9nIGhhcyBib3RoIHRoZSBQRUNJIGFuZCBwcmUtUEVDSSB2ZXJzaW9ucyBvZiB0aGUgSGVjZXRhLTYsIGFzCitJbnRlbCBjYWxscyB0aGVtLiBIZWNldGEtNmUgaGFzIGhpZ2ggZnJlcXVlbmN5IFBXTSBhbmQgSGVjZXRhLTZwIGhhcworYWRkZWQgUEVDSSBhbmQgYSA0dGggdGhlcm1hbCB6b25lLiBUaGUgQW5kaWdpbG9nIGFTQzc2MTEgaXMgdGhlCitIZWNldGEtNmUgcGFydCBhbmQgYVNDNzYyMSBpcyB0aGUgSGVjZXRhLTZwIHBhcnQuIFRoZXkgYXJlIGJvdGggaW4KK3ZvbHVtZSBwcm9kdWN0aW9uLCBzaGlwcGluZyB0byBJbnRlbCBhbmQgdGhlaXIgc3Vicy4KKworV2UgaGF2ZSBlbmhhbmNlZCBib3RoIHBhcnRzIHJlbGF0aXZlIHRvIHRoZSBnb3Zlcm5pbmcgSW50ZWwKK3NwZWNpZmljYXRpb24uIEZpcnN0IGVuaGFuY2VtZW50IGlzIHRlbXBlcmF0dXJlIHJlYWRpbmcgcmVzb2x1dGlvbi4gV2UKK2hhdmUgdXNlZCByZWdpc3RlcnMgYmVsb3cgMjBoIGZvciB2ZW5kb3Itc3BlY2lmaWMgZnVuY3Rpb25zIGluIGFkZGl0aW9uCit0byB0aG9zZSBpbiB0aGUgSW50ZWwtc3BlY2lmaWVkIHZlbmRvciByYW5nZS4KKworT3VyIGNvbnZlcnNpb24gcHJvY2VzcyBwcm9kdWNlcyBhIHJlc3VsdCB0aGF0IGlzIHJlcG9ydGVkIGFzIHR3byBieXRlcy4KK1RoZSBmYW4gc3BlZWQgY29udHJvbCB1c2VzIHRoaXMgZmluZXIgdmFsdWUgdG8gcHJvZHVjZSBhICJzdGVwLWxlc3MiIGZhbgorUFdNIG91dHB1dC4gVGhlc2UgdHdvIGJ5dGVzIGFyZSAicmVhZC1sb2NrZWQiIHRvIGd1YXJhbnRlZSB0aGF0IG9uY2UgYQoraGlnaCBvciBsb3cgYnl0ZSBpcyByZWFkLCB0aGUgb3RoZXIgYnl0ZSBpcyBsb2NrZWQtaW4gdW50aWwgYWZ0ZXIgdGhlCituZXh0IHJlYWQgb2YgYW55IHJlZ2lzdGVyLiBTbyB0byBnZXQgYW4gYXRvbWljIHJlYWRpbmcsIHJlYWQgaGlnaCBvciBsb3cKK2J5dGUsIHRoZW4gdGhlIHZlcnkgbmV4dCByZWFkIHNob3VsZCBiZSB0aGUgb3Bwb3NpdGUgYnl0ZS4gT3VyIGRhdGEKK3NoZWV0IHNheXMgMTAtYml0cyBvZiByZXNvbHV0aW9uLCBhbHRob3VnaCB5b3UgbWF5IGZpbmQgdGhlIGxvd2VyIGJpdHMKK2FyZSBhY3RpdmUsIHRoZXkgYXJlIG5vdCBuZWNlc3NhcmlseSByZWxpYWJsZSBvciB1c2VmdWwgZXh0ZXJuYWxseS4gV2UKK2Nob3NlIG5vdCB0byBtYXNrIHRoZW0uCisKK1dlIGVtcGxveSBzaWduaWZpY2FudCBmaWx0ZXJpbmcgdGhhdCBpcyB1c2VyIHR1bmFibGUgYXMgZGVzY3JpYmVkIGluIHRoZQorZGF0YSBzaGVldC4gT3VyIHRlbXBlcmF0dXJlIHJlcG9ydHMgYW5kIGZhbiBQV00gb3V0cHV0cyBhcmUgdmVyeSBzbW9vdGgKK3doZW4gY29tcGFyZWQgdG8gdGhlIGNvbXBldGl0aW9uLCBpbiBhZGRpdGlvbiB0byB0aGUgaGlnaGVyIHJlc29sdXRpb24KK3RlbXBlcmF0dXJlIHJlcG9ydHMuIFRoZSBzbW9vdGhlciBQV00gb3V0cHV0IGRvZXMgbm90IHJlcXVpcmUgdXNlcgoraW50ZXJ2ZW50aW9uLgorCitXZSBvZmZlciBHUElPIGZlYXR1cmVzIG9uIHRoZSBmb3JtZXIgVklEIHBpbnMuIFRoZXNlIGFyZSBvcGVuLWRyYWluCitvdXRwdXRzIG9yIGlucHV0cyBhbmQgbWF5IGJlIHVzZWQgYXMgZ2VuZXJhbCBwdXJwb3NlIEkvTyBvciBhcyBhbGFybQorb3V0cHV0cyB0aGF0IGFyZSBiYXNlZCBvbiB0ZW1wZXJhdHVyZSBsaW1pdHMuIFRoZXNlIGFyZSBpbiAxOWggYW5kIDFBaC4KKworV2Ugb2ZmZXIgZmxleGlibGUgbWFwcGluZyBvZiB0ZW1wZXJhdHVyZSByZWFkaW5ncyB0byB0aGVybWFsIHpvbmVzLiBBbnkKK3RlbXBlcmF0dXJlIG1heSBiZSBtYXBwZWQgdG8gYW55IHpvbmUsIHdoaWNoIGhhcyBhIGRlZmF1bHQgYXNzaWdubWVudAordGhhdCBmb2xsb3dzIEludGVsJ3Mgc3BlY3MuCisKK1NpbmNlIHRoZXJlIGlzIGEgZmFuIHRvIHpvbmUgYXNzaWdubWVudCB0aGF0IGFsbG93cyBmb3IgdGhlICJob3R0ZXIiIG9mCithIHNldCBvZiB6b25lcyB0byBjb250cm9sIHRoZSBQV00gb2YgYW4gaW5kaXZpZHVhbCBmYW4sIGJ1dCB0aGVyZSBpcyBubworaW5kaWNhdGlvbiB0byB0aGUgdXNlciwgd2UgaGF2ZSBhZGRlZCBhbiBpbmRpY2F0b3IgdGhhdCBzaG93cyB3aGljaCB6b25lCitpcyBjdXJyZW50bHkgY29udHJvbGxpbmcgdGhlIFBXTSBmb3IgYSBnaXZlbiBmYW4uIFRoaXMgaXMgaW4gcmVnaXN0ZXIKKzAwaC4KKworQm90aCByZW1vdGUgZGlvZGUgdGVtcGVyYXR1cmUgcmVhZGluZ3MgbWF5IGJlIGdpdmVuIGFuIG9mZnNldCB2YWx1ZSBzdWNoCit0aGF0IHRoZSByZXBvcnRlZCByZWFkaW5nIGFzIHdlbGwgYXMgdGhlIHRlbXBlcmF0dXJlIHVzZWQgdG8gZGV0ZXJtaW5lCitQV00gbWF5IGJlIG9mZnNldCBmb3Igc3lzdGVtIGNhbGlicmF0aW9uIHB1cnBvc2VzLgorCitQRUNJIEV4dGVuZGVkIGNvbmZpZ3VyYXRpb24gYWxsb3dzIGZvciBoYXZpbmcgbW9yZSB0aGFuIHR3byBkb21haW5zIHBlcgorUEVDSSBhZGRyZXNzIGFuZCBhbHNvIHByb3ZpZGVzIGFuIGVuYWJsaW5nIGZ1bmN0aW9uIGZvciBlYWNoIFBFQ0kKK2FkZHJlc3MuIE9uZSBjb3VsZCB1c2Ugb3VyIGZsZXhpYmxlIHpvbmUgYXNzaWdubWVudCB0byBoYXZlIGEgem9uZQorYXNzaWduZWQgdG8gdXAgdG8gNCBQRUNJIGFkZHJlc3Nlcy4gVGhpcyBpcyBub3QgcG9zc2libGUgaW4gdGhlIGRlZmF1bHQKK0ludGVsIGNvbmZpZ3VyYXRpb24uIFRoaXMgd291bGQgYmUgdXNlZnVsIGluIG11bHRpLUNQVSBzeXN0ZW1zIHdpdGgKK2luZGl2aWR1YWwgZmFucyBvbiBlYWNoIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIGluZGl2aWR1YWwgZmFuIGNvbnRyb2wuCitUaGlzIGlzIGluIHJlZ2lzdGVyIDBFaC4KKworVGhlIHRhY2hvbWV0ZXIgbWVhc3VyZW1lbnQgc3lzdGVtIGlzIGZsZXhpYmxlIGFuZCBhYmxlIHRvIGFkYXB0IHRvIG1hbnkKK2ZhbiB0eXBlcy4gV2UgY2FuIGFsc28gc3VwcG9ydCBwdWxzZS1zdHJldGNoZWQgUFdNIHNvIHRoYXQgMy13aXJlIGZhbnMKK21heSBiZSB1c2VkLiBUaGVzZSBjaGFyYWN0ZXJpc3RpY3MgYXJlIGluIHJlZ2lzdGVycyAwNGggdG8gMDdoLgorCitGaW5hbGx5LCB3ZSBoYXZlIGFkZGVkIGEgdGFjaCBkaXNhYmxlIGZ1bmN0aW9uIHRoYXQgdHVybnMgb2ZmIHRoZSB0YWNoCittZWFzdXJlbWVudCBzeXN0ZW0gZm9yIGluZGl2aWR1YWwgdGFjaHMgaW4gb3JkZXIgdG8gc2F2ZSBwb3dlci4gVGhhdCBpcworaW4gcmVnaXN0ZXIgNzVoLgorCistLQorYVNDNzYyMSBQcm9kdWN0IERlc2NyaXB0aW9uCisKK1RoZSBhU0M3NjIxIGhhcyBhIHR3byB3aXJlIGRpZ2l0YWwgaW50ZXJmYWNlIGNvbXBhdGlibGUgd2l0aCBTTUJ1cyAyLjAuCitVc2luZyBhIDEwLWJpdCBBREMsIHRoZSBhU0M3NjIxIG1lYXN1cmVzIHRoZSB0ZW1wZXJhdHVyZSBvZiB0d28gcmVtb3RlIGRpb2RlCitjb25uZWN0ZWQgdHJhbnNpc3RvcnMgYXMgd2VsbCBhcyBpdHMgb3duIGRpZS4gU3VwcG9ydCBmb3IgUGxhdGZvcm0KK0Vudmlyb25tZW50YWwgQ29udHJvbCBJbnRlcmZhY2UgKFBFQ0kpIGlzIGluY2x1ZGVkLgorCitVc2luZyB0ZW1wZXJhdHVyZSBpbmZvcm1hdGlvbiBmcm9tIHRoZXNlIGZvdXIgem9uZXMsIGFuIGF1dG9tYXRpYyBmYW4gc3BlZWQKK2NvbnRyb2wgYWxnb3JpdGhtIGlzIGVtcGxveWVkIHRvIG1pbmltaXplIGFjb3VzdGljIGltcGFjdCB3aGlsZSBhY2hpZXZpbmcKK3JlY29tbWVuZGVkIENQVSB0ZW1wZXJhdHVyZSB1bmRlciB2YXJ5aW5nIG9wZXJhdGlvbmFsIGxvYWRzLgorCitUbyBzZXQgZmFuIHNwZWVkLCB0aGUgYVNDNzYyMSBoYXMgdGhyZWUgaW5kZXBlbmRlbnQgcHVsc2Ugd2lkdGggbW9kdWxhdGlvbgorKFBXTSkgb3V0cHV0cyB0aGF0IGFyZSBjb250cm9sbGVkIGJ5IG9uZSwgb3IgYSBjb21iaW5hdGlvbiBvZiB0aHJlZSwKK3RlbXBlcmF0dXJlIHpvbmVzLiBCb3RoIGhpZ2gtIGFuZCBsb3ctZnJlcXVlbmN5IFBXTSByYW5nZXMgYXJlIHN1cHBvcnRlZC4KKworVGhlIGFTQzc2MjEgYWxzbyBpbmNsdWRlcyBhIGRpZ2l0YWwgZmlsdGVyIHRoYXQgY2FuIGJlIGludm9rZWQgdG8gc21vb3RoCit0ZW1wZXJhdHVyZSByZWFkaW5ncyBmb3IgYmV0dGVyIGNvbnRyb2wgb2YgZmFuIHNwZWVkIGFuZCBtaW5pbXVtIGFjb3VzdGljCitpbXBhY3QuCisKK1RoZSBhU0M3NjIxIGhhcyB0YWNob21ldGVyIGlucHV0cyB0byBtZWFzdXJlIGZhbiBzcGVlZCBvbiB1cCB0byBmb3VyIGZhbnMuCitMaW1pdCBhbmQgc3RhdHVzIHJlZ2lzdGVycyBmb3IgYWxsIG1lYXN1cmVkIHZhbHVlcyBhcmUgaW5jbHVkZWQgdG8gYWxlcnQKK3RoZSBzeXN0ZW0gaG9zdCB0aGF0IGFueSBtZWFzdXJlbWVudHMgYXJlIG91dHNpZGUgb2YgcHJvZ3JhbW1lZCBsaW1pdHMKK3ZpYSBzdGF0dXMgcmVnaXN0ZXJzLgorCitTeXN0ZW0gdm9sdGFnZXMgb2YgVkNDUCwgMi41ViwgMy4zViwgNS4wViwgYW5kIDEyViBtb3RoZXJib2FyZCBwb3dlciBhcmUKK21vbml0b3JlZCBlZmZpY2llbnRseSB3aXRoIGludGVybmFsIHNjYWxpbmcgcmVzaXN0b3JzLgorCitGZWF0dXJlcworLSBTdXBwb3J0cyBQRUNJIGludGVyZmFjZSBhbmQgbW9uaXRvcnMgaW50ZXJuYWwgYW5kIHJlbW90ZSB0aGVybWFsIGRpb2RlcworLSAyLXdpcmUsIFNNQnVzIDIuMCBjb21wbGlhbnQsIHNlcmlhbCBpbnRlcmZhY2UKKy0gMTAtYml0IEFEQworLSBNb25pdG9ycyBWQ0NQLCAyLjVWLCAzLjNWLCA1LjBWLCBhbmQgMTJWIG1vdGhlcmJvYXJkL3Byb2Nlc3NvciBzdXBwbGllcworLSBQcm9ncmFtbWFibGUgYXV0b25vbW91cyBmYW4gY29udHJvbCBiYXNlZCBvbiB0ZW1wZXJhdHVyZSByZWFkaW5ncworLSBOb2lzZSBmaWx0ZXJpbmcgb2YgdGVtcGVyYXR1cmUgcmVhZGluZyBmb3IgZmFuIHNwZWVkIGNvbnRyb2wKKy0gMC4yNUMgZGlnaXRhbCB0ZW1wZXJhdHVyZSBzZW5zb3IgcmVzb2x1dGlvbgorLSAzIFBXTSBmYW4gc3BlZWQgY29udHJvbCBvdXRwdXRzIGZvciAyLSwgMy0gb3IgNC13aXJlIGZhbnMgYW5kIHVwIHRvIDQgZmFuCisJdGFjaG9tZXRlciBpbnB1dHMKKy0gRW5oYW5jZWQgbWVhc3VyZWQgdGVtcGVyYXR1cmUgdG8gVGVtcGVyYXR1cmUgWm9uZSBhc3NpZ25tZW50LgorLSBQcm92aWRlcyBoaWdoIGFuZCBsb3cgUFdNIGZyZXF1ZW5jeSByYW5nZXMKKy0gMyBHUElPIHBpbnMgZm9yIGN1c3RvbSB1c2UKKy0gMjQtTGVhZCBRU09QIHBhY2thZ2UKKworQ29uZmlndXJhdGlvbiBOb3RlcworPT09PT09PT09PT09PT09PT09PQorCitFeGNlcHQgd2hlcmUgbm90ZWQgYmVsb3csIHRoZSBzeXNmcyBlbnRyaWVzIGNyZWF0ZWQgYnkgdGhpcyBkcml2ZXIgZm9sbG93Cit0aGUgc3RhbmRhcmRzIGRlZmluZWQgaW4gInN5c2ZzLWludGVyZmFjZSIuCisKK3RlbXAxX3NvdXJjZQorCTAgCShkZWZhdWx0KSBwZWNpX2xlZ2FjeSA9IDAsIFJlbW90ZSAxIFRlbXBlcmF0dXJlCisJCQlwZWNpX2xlZ2FjeSA9IDEsIFBFQ0kgUHJvY2Vzc29yIFRlbXBlcmF0dXJlIDAKKwkxIAlSZW1vdGUgMSBUZW1wZXJhdHVyZQorCTIgCVJlbW90ZSAyIFRlbXBlcmF0dXJlCisJMyAJSW50ZXJuYWwgVGVtcGVyYXR1cmUKKwk0IAlQRUNJIFByb2Nlc3NvciBUZW1wZXJhdHVyZSAwCisJNSAJUEVDSSBQcm9jZXNzb3IgVGVtcGVyYXR1cmUgMQorCTYgCVBFQ0kgUHJvY2Vzc29yIFRlbXBlcmF0dXJlIDIKKwk3ICBQRUNJIFByb2Nlc3NvciBUZW1wZXJhdHVyZSAzCisKK3RlbXAyX3NvdXJjZQorCTAgCShkZWZhdWx0KSBJbnRlcm5hbCBUZW1wZXJhdHVyZQorCTEgCVJlbW90ZSAxIFRlbXBlcmF0dXJlCisJMiAJUmVtb3RlIDIgVGVtcGVyYXR1cmUKKwkzIAlJbnRlcm5hbCBUZW1wZXJhdHVyZQorCTQgCVBFQ0kgUHJvY2Vzc29yIFRlbXBlcmF0dXJlIDAKKwk1IAlQRUNJIFByb2Nlc3NvciBUZW1wZXJhdHVyZSAxCisJNiAJUEVDSSBQcm9jZXNzb3IgVGVtcGVyYXR1cmUgMgorCTcgCVBFQ0kgUHJvY2Vzc29yIFRlbXBlcmF0dXJlIDMKKwordGVtcDNfc291cmNlCisJMCAJKGRlZmF1bHQpIFJlbW90ZSAyIFRlbXBlcmF0dXJlCisJMSAJUmVtb3RlIDEgVGVtcGVyYXR1cmUKKwkyIAlSZW1vdGUgMiBUZW1wZXJhdHVyZQorCTMgCUludGVybmFsIFRlbXBlcmF0dXJlCisJNCAJUEVDSSBQcm9jZXNzb3IgVGVtcGVyYXR1cmUgMAorCTUgCVBFQ0kgUHJvY2Vzc29yIFRlbXBlcmF0dXJlIDEKKwk2IAlQRUNJIFByb2Nlc3NvciBUZW1wZXJhdHVyZSAyCisJNyAJUEVDSSBQcm9jZXNzb3IgVGVtcGVyYXR1cmUgMworCit0ZW1wNF9zb3VyY2UKKwkwIAkoZGVmYXVsdCkgcGVjaV9sZWdhY3kgPSAwLCBQRUNJIFByb2Nlc3NvciBUZW1wZXJhdHVyZSAwCisJCQlwZWNpX2xlZ2FjeSA9IDEsIFJlbW90ZSAxIFRlbXBlcmF0dXJlCisJMSAJUmVtb3RlIDEgVGVtcGVyYXR1cmUKKwkyIAlSZW1vdGUgMiBUZW1wZXJhdHVyZQorCTMgCUludGVybmFsIFRlbXBlcmF0dXJlCisJNCAJUEVDSSBQcm9jZXNzb3IgVGVtcGVyYXR1cmUgMAorCTUgCVBFQ0kgUHJvY2Vzc29yIFRlbXBlcmF0dXJlIDEKKwk2IAlQRUNJIFByb2Nlc3NvciBUZW1wZXJhdHVyZSAyCisJNyAJUEVDSSBQcm9jZXNzb3IgVGVtcGVyYXR1cmUgMworCit0ZW1wWzEtNF1fc21vb3RoaW5nX2VuYWJsZQordGVtcFsxLTRdX3Ntb290aGluZ190aW1lCisJU21vb3RocyBzcGlrZXMgaW4gdGVtcCByZWFkaW5ncyBjYXVzZWQgYnkgbm9pc2UuCisJVmFsaWQgdmFsdWVzIGluIG1pbGxpc2Vjb25kcyBhcmU6CisJMzUwMDAKKwkxNzYwMAorCTExODAwCisJIDcwMDAKKwkgNDQwMAorCSAzMDAwCisJIDE2MDAKKwkgIDgwMAorCit0ZW1wWzEtNF1fY3JpdAorCVdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgem9uZSB0ZW1wZXJhdHVyZSByZWFjaGVzIHRoaXMgdmFsdWUsCisJQUxMIHB3bSBvdXRwdXRzIHdpbGwgZ290IHRvIDEwMCUuCisKK3RlbXBbNS04XV9pbnB1dAordGVtcFs1LThdX2VuYWJsZQorCVRoZSBhU0M3NjIxIGNhbiBhbHNvIHJlYWQgdGVtcGVyYXR1cmVzIHByb3ZpZGVkIGJ5IHRoZSBwcm9jZXNzb3IKKwl2aWEgdGhlIFBFQ0kgYnVzLiAgVXN1YWxseSB0aGVzZSBhcmUgImNvcmUiIHRlbXBzIGFuZCBhcmUgcmVsYXRpdmUKKwl0byB0aGUgcG9pbnQgd2hlcmUgdGhlIGF1dG9tYXRpYyB0aGVybWFsIGNvbnRyb2wgY2lyY3VpdCBzdGFydHMKKwl0aHJvdHRsaW5nLiAgVGhpcyBtZWFucyB0aGF0IHRoZXNlIGFyZSB1c3VhbGx5IG5lZ2F0aXZlIG51bWJlcnMuCisKK3B3bVsxLTNdX2VuYWJsZQorCTAJCUZhbiBvZmYuCisJMQkJRmFuIG9uIG1hbnVhbCBjb250cm9sLgorCTIJCUZhbiBvbiBhdXRvbWF0aWMgY29udHJvbCBhbmQgd2lsbCBydW4gYXQgdGhlIG1pbmltdW0gcHdtCisJCQkJaWYgdGhlIHRlbXBlcmF0dXJlIGZvciB0aGUgem9uZSBpcyBiZWxvdyB0aGUgbWluaW11bS4KKwkzCQlGYW4gb24gYXV0b21hdGljIGNvbnRyb2wgYnV0IHdpbGwgYmUgb2ZmIGlmIHRoZSB0ZW1wZXJhdHVyZQorCQkJCWZvciB0aGUgem9uZSBpcyBiZWxvdyB0aGUgbWluaW11bS4KKwk0LTI1NAlJZ25vcmVkLgorCTI1NQkJRmFuIG9uIGZ1bGwuCisKK3B3bVsxLTNdX2F1dG9fY2hhbm5lbHMKKwlCaXRtYXAgYXMgZGVzY3JpYmVkIGluIHN5c2N0bC1pbnRlcmZhY2Ugd2l0aCB0aGUgZm9sbG93aW5nCisJZXhjZXB0aW9ucy4uLgorCU9ubHkgdGhlIGZvbGxvd2luZyBjb21iaW5hdGlvbiBvZiB6b25lcyAoYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgbWFza3MpCisJYXJlIHZhbGlkOgorCTEKKwkyCisJMworCTIsMworCTEsMiwzCisJNAorCTEsMiwzLDQKKworCVNwZWNpYWwgdmFsdWVzOgorCTAJCQlEaXNhYmxlZC4KKwkxNgkJRmFuIG9uIG1hbnVhbCBjb250cm9sLgorCTMxCQlGYW4gb24gZnVsbC4KKworCitwd21bMS0zXV9pbnZlcnQKKwlXaGVuIHNldCwgaW52ZXJ0cyB0aGUgbWVhbmluZyBvZiBwd21bMS0zXS4KKwlpLmUuICB3aGVuIHB3bSA9IDAsIHRoZSBmYW4gd2lsbCBiZSBvbiBmdWxsIGFuZAorCXdoZW4gcHdtID0gMjU1IHRoZSBmYW4gd2lsbCBiZSBvZmYuCisKK3B3bVsxLTNdX2ZyZXEKKwlQV00gZnJlcXVlbmN5IGluIEh6CisJVmFsaWQgdmFsdWVzIGluIEh6IGFyZToKKworCTEwCisJMTUKKwkyMworCTMwICAoZGVmYXVsdCkKKwkzOAorCTQ3CisJNjIKKwk5NAorCTIzMDAwCisJMjQwMDAKKwkyNTAwMAorCTI2MDAwCisJMjcwMDAKKwkyODAwMAorCTI5MDAwCisJMzAwMDAKKworCVNldHRpbmcgYW55IG90aGVyIHZhbHVlIHdpbGwgYmUgaWdub3JlZC4KKworcGVjaV9lbmFibGUKKwlFbmFibGVzIG9yIGRpc2FibGVzIFBFQ0kKKworcGVjaV9hdmcKKwlJbnB1dCBmaWx0ZXIgYXZlcmFnZSB0aW1lLgorCisJMCAJMCBTZWMuIChubyBTbW9vdGhpbmcpIChkZWZhdWx0KQorCTEgCTAuMjUgU2VjLgorCTIgCTAuNSBTZWMuCisJMyAJMS4wIFNlYy4KKwk0IAkyLjAgU2VjLgorCTUgCTQuMCBTZWMuCisJNiAJOC4wIFNlYy4KKwk3IAkwLjAgU2VjLgorCitwZWNpX2xlZ2FjeQorCisJMAlTdGFuZGFyZCBNb2RlIChkZWZhdWx0KQorCQlSZW1vdGUgRGlvZGUgMSByZWFkaW5nIGlzIGFzc29jaWF0ZWQgd2l0aAorCQlUZW1wZXJhdHVyZSBab25lIDEsIFBFQ0kgaXMgYXNzb2NpYXRlZCB3aXRoCisJCVpvbmUgNAorCisJMQlMZWdhY3kgTW9kZQorCQlQRUNJIGlzIGFzc29jaWF0ZWQgd2l0aCBUZW1wZXJhdHVyZSBab25lIDEsCisJCVJlbW90ZSBEaW9kZSAxIGlzIGFzc29jaWF0ZWQgd2l0aCBab25lIDQKKworcGVjaV9kaW9kZQorCURpb2RlIGZpbHRlcgorCisJMAkwLjI1IFNlYy4KKwkxIAkxLjEgU2VjLgorCTIgCTIuNCBTZWMuICAoZGVmYXVsdCkKKwkzIAkzLjQgU2VjLgorCTQgCTUuMCBTZWMuCisJNSAJNi44IFNlYy4KKwk2IAkxMC4yIFNlYy4KKwk3IAkxNi40IFNlYy4KKworcGVjaV80ZG9tYWluCisJRm91ciBkb21haW4gZW5hYmxlCisKKwkwIAkxIG9yIDIgRG9tYWlucyBmb3IgZW5hYmxlZCBwcm9jZXNzb3JzIChkZWZhdWx0KQorCTEgCTMgb3IgNCBEb21haW5zIGZvciBlbmFibGVkIHByb2Nlc3NvcnMKKworcGVjaV9kb21haW4KKwlEb21haW4KKworCTAgCVByb2Nlc3NvciBjb250YWlucyBhIHNpbmdsZSBkb21haW4gKDApIAkgKGRlZmF1bHQpCisJMSAJUHJvY2Vzc29yIGNvbnRhaW5zIHR3byBkb21haW5zICgwLDEpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2l0ODcgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2l0ODcKaW5kZXggZjliYTk2Yy4uOGQwOGJmMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9pdDg3CisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vaXQ4NwpAQCAtNSwzMSArNSwyMyBAQAogICAqIElUODcwNUYKICAgICBQcmVmaXg6ICdpdDg3JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBmcm9tIFN1cGVyIEkvTyBjb25maWcgc3BhY2UgKDggSS9PIHBvcnRzKQotICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBJVEUgd2Vic2l0ZQotICAgICAgICAgICAgICAgaHR0cDovL3d3dy5pdGUuY29tLnR3L3Byb2R1Y3RfaW5mby9maWxlL3BjL0lUODcwNUZfVi4wLjQuMS5wZGYKKyAgICBEYXRhc2hlZXQ6IE9uY2UgcHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBJVEUgd2Vic2l0ZSwgYnV0IG5vIGxvbmdlcgogICAqIElUODcxMkYKICAgICBQcmVmaXg6ICdpdDg3MTInCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IGZyb20gU3VwZXIgSS9PIGNvbmZpZyBzcGFjZSAoOCBJL08gcG9ydHMpCi0gICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIElURSB3ZWJzaXRlCi0gICAgICAgICAgICAgICBodHRwOi8vd3d3Lml0ZS5jb20udHcvcHJvZHVjdF9pbmZvL2ZpbGUvcGMvSVQ4NzEyRl9WMC45LjEucGRmCi0gICAgICAgICAgICAgICBodHRwOi8vd3d3Lml0ZS5jb20udHcvcHJvZHVjdF9pbmZvL2ZpbGUvcGMvRXJyYXRhJTIwVjAuMSUyMGZvciUyMElUODcxMkYlMjBWMC45LjEucGRmCi0gICAgICAgICAgICAgICBodHRwOi8vd3d3Lml0ZS5jb20udHcvcHJvZHVjdF9pbmZvL2ZpbGUvcGMvSVQ4NzEyRl9WMC45LjMucGRmCisgICAgRGF0YXNoZWV0OiBPbmNlIHB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgSVRFIHdlYnNpdGUsIGJ1dCBubyBsb25nZXIKICAgKiBJVDg3MTZGL0lUODcyNkYKICAgICBQcmVmaXg6ICdpdDg3MTYnCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IGZyb20gU3VwZXIgSS9PIGNvbmZpZyBzcGFjZSAoOCBJL08gcG9ydHMpCi0gICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIElURSB3ZWJzaXRlCi0gICAgICAgICAgICAgICBodHRwOi8vd3d3Lml0ZS5jb20udHcvcHJvZHVjdF9pbmZvL2ZpbGUvcGMvSVQ4NzE2Rl9WMC4zLlpJUAotICAgICAgICAgICAgICAgaHR0cDovL3d3dy5pdGUuY29tLnR3L3Byb2R1Y3RfaW5mby9maWxlL3BjL0lUODcyNkZfVjAuMy5wZGYKKyAgICBEYXRhc2hlZXQ6IE9uY2UgcHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBJVEUgd2Vic2l0ZSwgYnV0IG5vIGxvbmdlcgogICAqIElUODcxOEYKICAgICBQcmVmaXg6ICdpdDg3MTgnCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IGZyb20gU3VwZXIgSS9PIGNvbmZpZyBzcGFjZSAoOCBJL08gcG9ydHMpCi0gICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIElURSB3ZWJzaXRlCi0gICAgICAgICAgICAgICBodHRwOi8vd3d3Lml0ZS5jb20udHcvcHJvZHVjdF9pbmZvL2ZpbGUvcGMvSVQ4NzE4Rl9WMC4yLnppcAotICAgICAgICAgICAgICAgaHR0cDovL3d3dy5pdGUuY29tLnR3L3Byb2R1Y3RfaW5mby9maWxlL3BjL0lUODcxOEZfVjAlMjAzXyhmb3IlMjBDJTIwdmVyc2lvbikuemlwCisgICAgRGF0YXNoZWV0OiBPbmNlIHB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgSVRFIHdlYnNpdGUsIGJ1dCBubyBsb25nZXIKICAgKiBJVDg3MjBGCiAgICAgUHJlZml4OiAnaXQ4NzIwJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBmcm9tIFN1cGVyIEkvTyBjb25maWcgc3BhY2UgKDggSS9PIHBvcnRzKQotICAgIERhdGFzaGVldDogTm90IHlldCBwdWJsaWNseSBhdmFpbGFibGUuCisgICAgRGF0YXNoZWV0OiBOb3QgcHVibGljbHkgYXZhaWxhYmxlCiAgICogU2lTOTUwICAgW2Nsb25lIG9mIElUODcwNUZdCiAgICAgUHJlZml4OiAnaXQ4NycKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogZnJvbSBTdXBlciBJL08gY29uZmlnIHNwYWNlICg4IEkvTyBwb3J0cykKQEAgLTEzNiw2ICsxMjgsMTAgQEAKIHNlY29uZHMgc2luY2UgdGhlIGxhc3QgdXBkYXRlKS4gVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gZWFzaWx5IG1pc3MKIG9uY2Utb25seSBhbGFybXMuCiAKK091dC1vZi1saW1pdCByZWFkaW5ncyBjYW4gYWxzbyByZXN1bHQgaW4gYmVlcGluZywgaWYgdGhlIGNoaXAgaXMgcHJvcGVybHkKK3dpcmVkIGFuZCBjb25maWd1cmVkLiBCZWVwaW5nIGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkIHBlciBzZW5zb3IgdHlwZQorKHRlbXBlcmF0dXJlcywgdm9sdGFnZXMgYW5kIGZhbnMuKQorCiBUaGUgSVQ4N3h4IG9ubHkgdXBkYXRlcyBpdHMgdmFsdWVzIGVhY2ggMS41IHNlY29uZHM7IHJlYWRpbmcgaXQgbW9yZSBvZnRlbgogd2lsbCBkbyBubyBoYXJtLCBidXQgd2lsbCByZXR1cm4gJ29sZCcgdmFsdWVzLgogCkBAIC0xNTAsMTEgKzE0NiwzOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhlIGZhbiBzcGVlZCBjb250cm9sIGZlYXR1cmVzIGFyZSBsaW1pdGVkIHRvIG1hbnVhbCBQV00gbW9kZS4gQXV0b21hdGljCi0iU21hcnQgR3VhcmRpYW4iIG1vZGUgY29udHJvbCBoYW5kbGluZyBpcyBub3QgaW1wbGVtZW50ZWQuIEhvd2V2ZXIKLWlmIHlvdSB3YW50IHRvIGdvIGZvciAibWFudWFsIG1vZGUiIGp1c3Qgd3JpdGUgMSB0byBwd21OX2VuYWJsZS4KKyJTbWFydCBHdWFyZGlhbiIgbW9kZSBjb250cm9sIGhhbmRsaW5nIGlzIG9ubHkgaW1wbGVtZW50ZWQgZm9yIG9sZGVyIGNoaXBzCisoc2VlIGJlbG93LikgSG93ZXZlciBpZiB5b3Ugd2FudCB0byBnbyBmb3IgIm1hbnVhbCBtb2RlIiBqdXN0IHdyaXRlIDEgdG8KK3B3bU5fZW5hYmxlLgogCiBJZiB5b3UgYXJlIG9ubHkgYWJsZSB0byBjb250cm9sIHRoZSBmYW4gc3BlZWQgd2l0aCB2ZXJ5IHNtYWxsIFBXTSB2YWx1ZXMsCiB0cnkgbG93ZXJpbmcgdGhlIFBXTSBiYXNlIGZyZXF1ZW5jeSAocHdtMV9mcmVxKS4gRGVwZW5kaW5nIG9uIHRoZSBmYW4sCiBpdCBtYXkgZ2l2ZSB5b3UgYSBzb21ld2hhdCBncmVhdGVyIGNvbnRyb2wgcmFuZ2UuIFRoZSBzYW1lIGZyZXF1ZW5jeSBpcwogdXNlZCB0byBkcml2ZSBhbGwgZmFuIG91dHB1dHMsIHdoaWNoIGlzIHdoeSBwd20yX2ZyZXEgYW5kIHB3bTNfZnJlcSBhcmUKIHJlYWQtb25seS4KKworCitBdXRvbWF0aWMgZmFuIHNwZWVkIGNvbnRyb2wgKG9sZCBpbnRlcmZhY2UpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkcml2ZXIgc3VwcG9ydHMgdGhlIG9sZCBpbnRlcmZhY2UgdG8gYXV0b21hdGljIGZhbiBzcGVlZCBjb250cm9sCit3aGljaCBpcyBpbXBsZW1lbnRlZCBieSBJVDg3MDVGIGNoaXBzIHVwIHRvIHJldmlzaW9uIEYgYW5kIElUODcxMkYKK2NoaXBzIHVwIHRvIHJldmlzaW9uIEcuCisKK1RoaXMgaW50ZXJmYWNlIGltcGxlbWVudHMgNCB0ZW1wZXJhdHVyZSB2cy4gUFdNIG91dHB1dCB0cmlwIHBvaW50cy4KK1RoZSBQV00gb3V0cHV0IG9mIHRyaXAgcG9pbnQgNCBpcyBhbHdheXMgdGhlIG1heGltdW0gdmFsdWUgKGZhbiBydW5uaW5nCithdCBmdWxsIHNwZWVkKSB3aGlsZSB0aGUgUFdNIG91dHB1dCBvZiB0aGUgb3RoZXIgMyB0cmlwIHBvaW50cyBjYW4gYmUKK2ZyZWVseSBjaG9zZW4uIFRoZSB0ZW1wZXJhdHVyZSBvZiBhbGwgNCB0cmlwIHBvaW50cyBjYW4gYmUgZnJlZWx5IGNob3Nlbi4KK0FkZGl0aW9uYWxseSwgdHJpcCBwb2ludCAxIGhhcyBhbiBoeXN0ZXJlc2lzIHRlbXBlcmF0dXJlIGF0dGFjaGVkLCB0bworcHJldmVudCBmYXN0IHN3aXRjaGluZyBiZXR3ZWVuIGZhbiBvbiBhbmQgb2ZmLgorCitUaGUgY2hpcCBhdXRvbWF0aWNhbGx5IGNvbXB1dGVzIHRoZSBQV00gb3V0cHV0IHZhbHVlIGJhc2VkIG9uIHRoZSBpbnB1dAordGVtcGVyYXR1cmUsIGJhc2VkIG9uIHRoaXMgc2ltcGxlIHJ1bGU6IGlmIHRoZSB0ZW1wZXJhdHVyZSB2YWx1ZSBpcworYmV0d2VlbiB0cmlwIHBvaW50IE4gYW5kIHRyaXAgcG9pbnQgTisxIHRoZW4gdGhlIFBXTSBvdXRwdXQgdmFsdWUgaXMKK3RoZSBvbmUgb2YgdHJpcCBwb2ludCBOLiBUaGUgYXV0b21hdGljIGNvbnRyb2wgbW9kZSBpcyBsZXNzIGZsZXhpYmxlCit0aGFuIHRoZSBtYW51YWwgY29udHJvbCBtb2RlLCBidXQgaXQgcmVhY3RzIGZhc3RlciwgaXMgbW9yZSByb2J1c3QgYW5kCitkb2Vzbid0IHVzZSBDUFUgY3ljbGVzLgorCitUcmlwIHBvaW50cyBtdXN0IGJlIHNldCBwcm9wZXJseSBiZWZvcmUgc3dpdGNoaW5nIHRvIGF1dG9tYXRpYyBmYW4gc3BlZWQKK2NvbnRyb2wgbW9kZS4gVGhlIGRyaXZlciB3aWxsIHBlcmZvcm0gYmFzaWMgaW50ZWdyaXR5IGNoZWNrcyBiZWZvcmUKK2FjdHVhbGx5IHN3aXRjaGluZyB0byBhdXRvbWF0aWMgY29udHJvbCBtb2RlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9sbTkwIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTkwCmluZGV4IDkzZDhlM2QuLjZhMDNkZDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vbG05MAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTAKQEAgLTg0LDYgKzg0LDEwIEBACiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRjCiAgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIE1heGltIHdlYnNpdGUKICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cubWF4aW0taWMuY29tL3F1aWNrX3ZpZXcyLmNmbS9xdl9way8zNTAwCisgICogV2luYm9uZC9OdXZvdG9uIFc4M0w3NzFBV0cvQVNHCisgICAgUHJlZml4OiAndzgzbDc3MScKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGMKKyAgICBEYXRhc2hlZXQ6IE5vdCBwdWJsaWNseSBhdmFpbGFibGUsIGNhbiBiZSByZXF1ZXN0ZWQgZnJvbSBOdXZvdG9uCiAKIAogQXV0aG9yOiBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KQEAgLTE0Nyw2ICsxNTEsMTIgQEAKICAgKiBTZWxlY3RhYmxlIGFkZHJlc3MKICAgKiBSZW1vdGUgc2Vuc29yIHR5cGUgc2VsZWN0aW9uCiAKK1c4M0w3NzFBV0cvQVNHCisgICogVGhlIEFXRyBhbmQgQVNHIHZhcmlhbnRzIG9ubHkgZGlmZmVyIGluIHBhY2thZ2UgZm9ybWF0LgorICAqIEZpbHRlciBhbmQgYWxlcnQgY29uZmlndXJhdGlvbiByZWdpc3RlciBhdCAweEJGCisgICogRGlvZGUgaWRlYWxpdHkgZmFjdG9yIGNvbmZpZ3VyYXRpb24gKHJlbW90ZSBzZW5zb3IpIGF0IDB4RTMKKyAgKiBNb3ZpbmcgYXZlcmFnZSAoZGVwZW5kaW5nIG9uIGNvbnZlcnNpb24gcmF0ZSkKKwogQWxsIHRlbXBlcmF0dXJlIHZhbHVlcyBhcmUgZ2l2ZW4gaW4gZGVncmVlcyBDZWxzaXVzLiBSZXNvbHV0aW9uCiBpcyAxLjAgZGVncmVlIGZvciB0aGUgbG9jYWwgdGVtcGVyYXR1cmUsIDAuMTI1IGRlZ3JlZSBmb3IgdGhlIHJlbW90ZQogdGVtcGVyYXR1cmUsIGV4Y2VwdCBmb3IgdGhlIE1BWDY2NTcsIE1BWDY2NTggYW5kIE1BWDY2NTkgd2hpY2ggaGF2ZSBhCkBAIC0xNjMsNiArMTczLDE4IEBACiBvdGhlciBzZWNvbmQ7IHJlYWRpbmcgdGhlbSBtb3JlIG9mdGVuIHdpbGwgZG8gbm8gaGFybSwgYnV0IHdpbGwgcmV0dXJuCiAnb2xkJyB2YWx1ZXMuCiAKK1NNQnVzIEFsZXJ0IFN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgaGFzIGJhc2ljIHN1cHBvcnQgZm9yIFNNQnVzIGFsZXJ0LiBXaGVuIGFuIGFsZXJ0IGlzIHJlY2VpdmVkLAordGhlIHN0YXR1cyByZWdpc3RlciBpcyByZWFkIGFuZCB0aGUgZmF1bHR5IHRlbXBlcmF0dXJlIGNoYW5uZWwgaXMgbG9nZ2VkLgorCitUaGUgQW5hbG9nIERldmljZXMgY2hpcHMgKEFETTEwMzIgYW5kIEFEVDc0NjEpIGRvIG5vdCBpbXBsZW1lbnQgdGhlIFNNQnVzCithbGVydCBwcm90b2NvbCBwcm9wZXJseSBzbyBhZGRpdGlvbmFsIGNhcmUgaXMgbmVlZGVkOiB0aGUgQUxFUlQgb3V0cHV0IGlzCitkaXNhYmxlZCB3aGVuIGFuIGFsZXJ0IGlzIHJlY2VpdmVkLCBhbmQgaXMgcmUtZW5hYmxlZCBvbmx5IHdoZW4gdGhlIGFsYXJtCitpcyBnb25lLiBPdGhlcndpc2UgdGhlIGNoaXAgd291bGQgYmxvY2sgYWxlcnRzIGZyb20gb3RoZXIgY2hpcHMgaW4gdGhlIGJ1cworYXMgbG9uZyBhcyB0aGUgYWxhcm0gaXMgYWN0aXZlLgorCiBQRUMgU3VwcG9ydAogLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbml0LnR4dCBiL0RvY3VtZW50YXRpb24vaW5pdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1YWQ1ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5pdC50eHQKQEAgLTAsMCArMSw0OSBAQAorRXhwbGFpbmluZyB0aGUgZHJlYWRlZCAiTm8gaW5pdCBmb3VuZC4iIGJvb3QgaGFuZyBtZXNzYWdlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworT0ssIHNvIHlvdSd2ZSBnb3QgdGhpcyBwcmV0dHkgdW5pbnR1aXRpdmUgbWVzc2FnZSAoY3VycmVudGx5IGxvY2F0ZWQKK2luIGluaXQvbWFpbi5jKSBhbmQgYXJlIHdvbmRlcmluZyB3aGF0IHRoZSBIKioqIHdlbnQgd3JvbmcuCitTb21lIGhpZ2gtbGV2ZWwgcmVhc29ucyBmb3IgZmFpbHVyZSAobGlzdGVkIHJvdWdobHkgaW4gb3JkZXIgb2YgZXhlY3V0aW9uKQordG8gbG9hZCB0aGUgaW5pdCBiaW5hcnkgYXJlOgorQSkgVW5hYmxlIHRvIG1vdW50IHJvb3QgRlMKK0IpIGluaXQgYmluYXJ5IGRvZXNuJ3QgZXhpc3Qgb24gcm9vdGZzCitDKSBicm9rZW4gY29uc29sZSBkZXZpY2UKK0QpIGJpbmFyeSBleGlzdHMgYnV0IGRlcGVuZGVuY2llcyBub3QgYXZhaWxhYmxlCitFKSBiaW5hcnkgY2Fubm90IGJlIGxvYWRlZAorCitEZXRhaWxlZCBleHBsYW5hdGlvbnM6CiswKSBTZXQgImRlYnVnIiBrZXJuZWwgcGFyYW1ldGVyIChpbiBib290bG9hZGVyIGNvbmZpZyBmaWxlIG9yIENPTkZJR19DTURMSU5FKQorICAgdG8gZ2V0IG1vcmUgZGV0YWlsZWQga2VybmVsIG1lc3NhZ2VzLgorQSkgbWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBjb3JyZWN0IHJvb3QgRlMgdHlwZQorICAgKGFuZCByb290PSBrZXJuZWwgcGFyYW1ldGVyIHBvaW50cyB0byB0aGUgY29ycmVjdCBwYXJ0aXRpb24pLAorICAgcmVxdWlyZWQgZHJpdmVycyBzdWNoIGFzIHN0b3JhZ2UgaGFyZHdhcmUgKHN1Y2ggYXMgU0NTSSBvciBVU0IhKQorICAgYW5kIGZpbGVzeXN0ZW0gKGV4dDMsIGpmZnMyIGV0Yy4pIGFyZSBidWlsdGluIChhbHRlcm5hdGl2ZWx5IGFzIG1vZHVsZXMsCisgICB0byBiZSBwcmUtbG9hZGVkIGJ5IGFuIGluaXRyZCkKK0MpIFBvc3NpYmx5IGEgY29uZmxpY3QgaW4gY29uc29sZT0gc2V0dXAgLS0+IGluaXRpYWwgY29uc29sZSB1bmF2YWlsYWJsZS4KKyAgIEUuZy4gc29tZSBzZXJpYWwgY29uc29sZXMgYXJlIHVucmVsaWFibGUgZHVlIHRvIHNlcmlhbCBJUlEgaXNzdWVzIChlLmcuCisgICBtaXNzaW5nIGludGVycnVwdC1iYXNlZCBjb25maWd1cmF0aW9uKS4KKyAgIFRyeSB1c2luZyBhIGRpZmZlcmVudCBjb25zb2xlPSBkZXZpY2Ugb3IgZS5nLiBuZXRjb25zb2xlPSAuCitEKSBlLmcuIHJlcXVpcmVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzIG9mIHRoZSBpbml0IGJpbmFyeSBzdWNoIGFzCisgICAvbGliL2xkLWxpbnV4LnNvLjIgbWlzc2luZyBvciBicm9rZW4uIFVzZSByZWFkZWxmIC1kIDxJTklUPnxncmVwIE5FRURFRAorICAgdG8gZmluZCBvdXQgd2hpY2ggbGlicmFyaWVzIGFyZSByZXF1aXJlZC4KK0UpIG1ha2Ugc3VyZSB0aGUgYmluYXJ5J3MgYXJjaGl0ZWN0dXJlIG1hdGNoZXMgeW91ciBoYXJkd2FyZS4KKyAgIEUuZy4gaTM4NiB2cy4geDg2XzY0IG1pc21hdGNoLCBvciB0cnlpbmcgdG8gbG9hZCB4ODYgb24gQVJNIGhhcmR3YXJlLgorICAgSW4gY2FzZSB5b3UgdHJpZWQgbG9hZGluZyBhIG5vbi1iaW5hcnkgZmlsZSBoZXJlIChzaGVsbCBzY3JpcHQ/KSwKKyAgIHlvdSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIHNjcmlwdCBzcGVjaWZpZXMgYW4gaW50ZXJwcmV0ZXIgaW4gaXRzIHNoZWJhbmcKKyAgIGhlYWRlciBsaW5lICgjIS8uLi4pIHRoYXQgaXMgZnVsbHkgd29ya2luZyAoaW5jbHVkaW5nIGl0cyBsaWJyYXJ5CisgICBkZXBlbmRlbmNpZXMpLiBBbmQgYmVmb3JlIHRhY2tsaW5nIHNjcmlwdHMsIGJldHRlciBmaXJzdCB0ZXN0IGEgc2ltcGxlCisgICBub24tc2NyaXB0IGJpbmFyeSBzdWNoIGFzIC9iaW4vc2ggYW5kIGNvbmZpcm0gaXRzIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uLgorICAgVG8gZmluZCBvdXQgbW9yZSwgYWRkIGNvZGUgdG8gaW5pdC9tYWluLmMgdG8gZGlzcGxheSBrZXJuZWxfZXhlY3ZlKClzCisgICByZXR1cm4gdmFsdWVzLgorCitQbGVhc2UgZXh0ZW5kIHRoaXMgZXhwbGFuYXRpb24gd2hlbmV2ZXIgeW91IGZpbmQgbmV3IGZhaWx1cmUgY2F1c2VzCisoYWZ0ZXIgYWxsIGxvYWRpbmcgdGhlIGluaXQgYmluYXJ5IGlzIGEgQ1JJVElDQUwgYW5kIGhhcmQgdHJhbnNpdGlvbiBzdGVwCit3aGljaCBuZWVkcyB0byBiZSBtYWRlIGFzIHBhaW5sZXNzIGFzIHBvc3NpYmxlKSwgdGhlbiBzdWJtaXQgcGF0Y2ggdG8gTEtNTC4KK0Z1cnRoZXIgVE9ET3M6CistIEltcGxlbWVudCB0aGUgdmFyaW91cyBydW5faW5pdF9wcm9jZXNzKCkgaW52b2NhdGlvbnMgdmlhIGEgc3RydWN0IGFycmF5CisgIHdoaWNoIGNhbiB0aGVuIHN0b3JlIHRoZSBrZXJuZWxfZXhlY3ZlKCkgcmVzdWx0IHZhbHVlIGFuZCBvbiBmYWlsdXJlCisgIGxvZyBpdCBhbGwgYnkgaXRlcmF0aW5nIG92ZXIgX2FsbF8gcmVzdWx0cyAodmVyeSBpbXBvcnRhbnQgdXNhYmlsaXR5IGZpeCkuCistIHRyeSB0byBtYWtlIHRoZSBpbXBsZW1lbnRhdGlvbiBpdHNlbGYgbW9yZSBoZWxwZnVsIGluIGdlbmVyYWwsCisgIGUuZy4gYnkgcHJvdmlkaW5nIGFkZGl0aW9uYWwgZXJyb3IgbWVzc2FnZXMgYXQgYWZmZWN0ZWQgcGxhY2VzLgorCitBbmRyZWFzIE1vaHIgPGFuZGkgYXQgbGlzYXMgcGVyaW9kIGRlPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCBkODA5MzBkLi4zYmM0OGIwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtMjgzNCw2ICsyODM0LDEyIEBACiAJCQlkZWZhdWx0IHgyYXBpYyBjbHVzdGVyIG1vZGUgb24gcGxhdGZvcm1zCiAJCQlzdXBwb3J0aW5nIHgyYXBpYy4KIAorCXg4Nl9tcnN0X3RpbWVyPSBbWDg2LTMyLEFQQlRdCisJCQlDaG9vc2UgdGltZXIgb3B0aW9uIGZvciB4ODYgTW9vcmVzdG93biBNSUQgcGxhdGZvcm0uCisJCQlUd28gdmFsaWQgb3B0aW9ucyBhcmUgYXBidCB0aW1lciBvbmx5IGFuZCBsYXBpYyB0aW1lcgorCQkJcGx1cyBvbmUgYXBidCB0aW1lciBmb3IgYnJvYWRjYXN0IHRpbWVyLgorCQkJeDg2X21yc3RfdGltZXI9YXBidF9vbmx5IHwgbGFwaWNfYW5kX2FwYnQKKwogCXhkPQkJW0hXLFhUXSBPcmlnaW5hbCBYVCBwcmUtSURFIChSTEwgZW5jb2RlZCkgZGlza3MuCiAJeGRfZ2VvPQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL2Jsb2NrL3hkLmMuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvcnVudGltZV9wbS50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0udHh0CmluZGV4IDM1NmZkODYuLmFiMDBlZWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvcnVudGltZV9wbS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnR4dApAQCAtMjI0LDYgKzIyNCwxMiBAQAogICAgICAgUlBNX1NVU1BFTkRFRCwgd2hpY2ggbWVhbnMgdGhhdCBlYWNoIGRldmljZSBpcyBpbml0aWFsbHkgcmVnYXJkZWQgYnkgdGhlCiAgICAgICBQTSBjb3JlIGFzICdzdXNwZW5kZWQnLCByZWdhcmRsZXNzIG9mIGl0cyByZWFsIGhhcmR3YXJlIHN0YXR1cwogCisgIHVuc2lnbmVkIGludCBydW50aW1lX2F1dG87CisgICAgLSBpZiBzZXQsIGluZGljYXRlcyB0aGF0IHRoZSB1c2VyIHNwYWNlIGhhcyBhbGxvd2VkIHRoZSBkZXZpY2UgZHJpdmVyIHRvCisgICAgICBwb3dlciBtYW5hZ2UgdGhlIGRldmljZSBhdCBydW4gdGltZSB2aWEgdGhlIC9zeXMvZGV2aWNlcy8uLi4vcG93ZXIvY29udHJvbAorICAgICAgaW50ZXJmYWNlOyBpdCBtYXkgb25seSBiZSBtb2RpZmllZCB3aXRoIHRoZSBoZWxwIG9mIHRoZSBwbV9ydW50aW1lX2FsbG93KCkKKyAgICAgIGFuZCBwbV9ydW50aW1lX2ZvcmJpZCgpIGhlbHBlciBmdW5jdGlvbnMKKwogQWxsIG9mIHRoZSBhYm92ZSBmaWVsZHMgYXJlIG1lbWJlcnMgb2YgdGhlICdwb3dlcicgbWVtYmVyIG9mICdzdHJ1Y3QgZGV2aWNlJy4KIAogNC4gUnVuLXRpbWUgUE0gRGV2aWNlIEhlbHBlciBGdW5jdGlvbnMKQEAgLTMyOSw2ICszMzUsMjAgQEAKICAgICAgICdwb3dlci5ydW50aW1lX2Vycm9yJyBpcyBzZXQgb3IgJ3Bvd2VyLmRpc2FibGVfZGVwdGgnIGlzIGdyZWF0ZXIgdGhhbgogICAgICAgemVybykKIAorICBib29sIHBtX3J1bnRpbWVfc3VzcGVuZGVkKHN0cnVjdCBkZXZpY2UgKmRldik7CisgICAgLSByZXR1cm4gdHJ1ZSBpZiB0aGUgZGV2aWNlJ3MgcnVudGltZSBQTSBzdGF0dXMgaXMgJ3N1c3BlbmRlZCcsIG9yIGZhbHNlCisgICAgICBvdGhlcndpc2UKKworICB2b2lkIHBtX3J1bnRpbWVfYWxsb3coc3RydWN0IGRldmljZSAqZGV2KTsKKyAgICAtIHNldCB0aGUgcG93ZXIucnVudGltZV9hdXRvIGZsYWcgZm9yIHRoZSBkZXZpY2UgYW5kIGRlY3JlYXNlIGl0cyB1c2FnZQorICAgICAgY291bnRlciAodXNlZCBieSB0aGUgL3N5cy9kZXZpY2VzLy4uLi9wb3dlci9jb250cm9sIGludGVyZmFjZSB0bworICAgICAgZWZmZWN0aXZlbHkgYWxsb3cgdGhlIGRldmljZSB0byBiZSBwb3dlciBtYW5hZ2VkIGF0IHJ1biB0aW1lKQorCisgIHZvaWQgcG1fcnVudGltZV9mb3JiaWQoc3RydWN0IGRldmljZSAqZGV2KTsKKyAgICAtIHVuc2V0IHRoZSBwb3dlci5ydW50aW1lX2F1dG8gZmxhZyBmb3IgdGhlIGRldmljZSBhbmQgaW5jcmVhc2UgaXRzIHVzYWdlCisgICAgICBjb3VudGVyICh1c2VkIGJ5IHRoZSAvc3lzL2RldmljZXMvLi4uL3Bvd2VyL2NvbnRyb2wgaW50ZXJmYWNlIHRvCisgICAgICBlZmZlY3RpdmVseSBwcmV2ZW50IHRoZSBkZXZpY2UgZnJvbSBiZWluZyBwb3dlciBtYW5hZ2VkIGF0IHJ1biB0aW1lKQorCiBJdCBpcyBzYWZlIHRvIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyBoZWxwZXIgZnVuY3Rpb25zIGZyb20gaW50ZXJydXB0IGNvbnRleHQ6CiAKIHBtX3JlcXVlc3RfaWRsZSgpCkBAIC0zODIsNiArNDAyLDE4IEBACiBmaW5pc2hlZCwgc28gdGhlIFBNIGNvcmUgdXNlcyBwbV9ydW50aW1lX2lkbGVfc3luYygpIHRvIGludm9rZSB0aGUKIHN1YnN5c3RlbS1sZXZlbCBpZGxlIGNhbGxiYWNrIGZvciB0aGUgZGV2aWNlIGF0IHRoYXQgdGltZS4KIAorVGhlIHVzZXIgc3BhY2UgY2FuIGVmZmVjdGl2ZWx5IGRpc2FsbG93IHRoZSBkcml2ZXIgb2YgdGhlIGRldmljZSB0byBwb3dlciBtYW5hZ2UKK2l0IGF0IHJ1biB0aW1lIGJ5IGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBpdHMgL3N5cy9kZXZpY2VzLy4uLi9wb3dlci9jb250cm9sCithdHRyaWJ1dGUgdG8gIm9uIiwgd2hpY2ggY2F1c2VzIHBtX3J1bnRpbWVfZm9yYmlkKCkgdG8gYmUgY2FsbGVkLiAgSW4gcHJpbmNpcGxlLAordGhpcyBtZWNoYW5pc20gbWF5IGFsc28gYmUgdXNlZCBieSB0aGUgZHJpdmVyIHRvIGVmZmVjdGl2ZWx5IHR1cm4gb2ZmIHRoZQorcnVuLXRpbWUgcG93ZXIgbWFuYWdlbWVudCBvZiB0aGUgZGV2aWNlIHVudGlsIHRoZSB1c2VyIHNwYWNlIHR1cm5zIGl0IG9uLgorTmFtZWx5LCBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIHRoZSBkcml2ZXIgY2FuIG1ha2Ugc3VyZSB0aGF0IHRoZSBydW4tdGltZSBQTQorc3RhdHVzIG9mIHRoZSBkZXZpY2UgaXMgJ2FjdGl2ZScgYW5kIGNhbGwgcG1fcnVudGltZV9mb3JiaWQoKS4gIEl0IHNob3VsZCBiZQorbm90ZWQsIGhvd2V2ZXIsIHRoYXQgaWYgdGhlIHVzZXIgc3BhY2UgaGFzIGFscmVhZHkgaW50ZW50aW9uYWxseSBjaGFuZ2VkIHRoZQordmFsdWUgb2YgL3N5cy9kZXZpY2VzLy4uLi9wb3dlci9jb250cm9sIHRvICJhdXRvIiB0byBhbGxvdyB0aGUgZHJpdmVyIHRvIHBvd2VyCittYW5hZ2UgdGhlIGRldmljZSBhdCBydW4gdGltZSwgdGhlIGRyaXZlciBtYXkgY29uZnVzZSBpdCBieSB1c2luZworcG1fcnVudGltZV9mb3JiaWQoKSB0aGlzIHdheS4KKwogNi4gUnVuLXRpbWUgUE0gYW5kIFN5c3RlbSBTbGVlcAogCiBSdW4tdGltZSBQTSBhbmQgc3lzdGVtIHNsZWVwIChpLmUuLCBzeXN0ZW0gc3VzcGVuZCBhbmQgaGliZXJuYXRpb24sIGFsc28ga25vd24KQEAgLTQzMSwzICs0NjMsNjQgQEAKIC0+cHJlcGFyZSgpIGNhbGxiYWNrIGFuZCBkZWNyZW1lbnRzIGl0IGFmdGVyIGNhbGxpbmcgdGhlIC0+Y29tcGxldGUoKSBjYWxsYmFjay4KIEhlbmNlIGRpc2FibGluZyBydW4tdGltZSBQTSB0ZW1wb3JhcmlseSBsaWtlIHRoaXMgd2lsbCBub3QgY2F1c2UgYW55IHJ1bi10aW1lCiBzdXNwZW5kIGNhbGxiYWNrcyB0byBiZSBsb3N0LgorCis3LiBHZW5lcmljIHN1YnN5c3RlbSBjYWxsYmFja3MKKworU3Vic3lzdGVtcyBtYXkgd2lzaCB0byBjb25zZXJ2ZSBjb2RlIHNwYWNlIGJ5IHVzaW5nIHRoZSBzZXQgb2YgZ2VuZXJpYyBwb3dlcgorbWFuYWdlbWVudCBjYWxsYmFja3MgcHJvdmlkZWQgYnkgdGhlIFBNIGNvcmUsIGRlZmluZWQgaW4KK2RyaXZlci9iYXNlL3Bvd2VyL2dlbmVyaWNfb3BzLmM6CisKKyAgaW50IHBtX2dlbmVyaWNfcnVudGltZV9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldik7CisgICAgLSBpbnZva2UgdGhlIC0+cnVudGltZV9pZGxlKCkgY2FsbGJhY2sgcHJvdmlkZWQgYnkgdGhlIGRyaXZlciBvZiB0aGlzCisgICAgICBkZXZpY2UsIGlmIGRlZmluZWQsIGFuZCBjYWxsIHBtX3J1bnRpbWVfc3VzcGVuZCgpIGZvciB0aGlzIGRldmljZSBpZiB0aGUKKyAgICAgIHJldHVybiB2YWx1ZSBpcyAwIG9yIHRoZSBjYWxsYmFjayBpcyBub3QgZGVmaW5lZAorCisgIGludCBwbV9nZW5lcmljX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpOworICAgIC0gaW52b2tlIHRoZSAtPnJ1bnRpbWVfc3VzcGVuZCgpIGNhbGxiYWNrIHByb3ZpZGVkIGJ5IHRoZSBkcml2ZXIgb2YgdGhpcworICAgICAgZGV2aWNlIGFuZCByZXR1cm4gaXRzIHJlc3VsdCwgb3IgcmV0dXJuIC1FSU5WQUwgaWYgbm90IGRlZmluZWQKKworICBpbnQgcG1fZ2VuZXJpY19ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworICAgIC0gaW52b2tlIHRoZSAtPnJ1bnRpbWVfcmVzdW1lKCkgY2FsbGJhY2sgcHJvdmlkZWQgYnkgdGhlIGRyaXZlciBvZiB0aGlzCisgICAgICBkZXZpY2UgYW5kIHJldHVybiBpdHMgcmVzdWx0LCBvciByZXR1cm4gLUVJTlZBTCBpZiBub3QgZGVmaW5lZAorCisgIGludCBwbV9nZW5lcmljX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KTsKKyAgICAtIGlmIHRoZSBkZXZpY2UgaGFzIG5vdCBiZWVuIHN1c3BlbmRlZCBhdCBydW4gdGltZSwgaW52b2tlIHRoZSAtPnN1c3BlbmQoKQorICAgICAgY2FsbGJhY2sgcHJvdmlkZWQgYnkgaXRzIGRyaXZlciBhbmQgcmV0dXJuIGl0cyByZXN1bHQsIG9yIHJldHVybiAwIGlmIG5vdAorICAgICAgZGVmaW5lZAorCisgIGludCBwbV9nZW5lcmljX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworICAgIC0gaW52b2tlIHRoZSAtPnJlc3VtZSgpIGNhbGxiYWNrIHByb3ZpZGVkIGJ5IHRoZSBkcml2ZXIgb2YgdGhpcyBkZXZpY2UgYW5kLAorICAgICAgaWYgc3VjY2Vzc2Z1bCwgY2hhbmdlIHRoZSBkZXZpY2UncyBydW50aW1lIFBNIHN0YXR1cyB0byAnYWN0aXZlJworCisgIGludCBwbV9nZW5lcmljX2ZyZWV6ZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworICAgIC0gaWYgdGhlIGRldmljZSBoYXMgbm90IGJlZW4gc3VzcGVuZGVkIGF0IHJ1biB0aW1lLCBpbnZva2UgdGhlIC0+ZnJlZXplKCkKKyAgICAgIGNhbGxiYWNrIHByb3ZpZGVkIGJ5IGl0cyBkcml2ZXIgYW5kIHJldHVybiBpdHMgcmVzdWx0LCBvciByZXR1cm4gMCBpZiBub3QKKyAgICAgIGRlZmluZWQKKworICBpbnQgcG1fZ2VuZXJpY190aGF3KHN0cnVjdCBkZXZpY2UgKmRldik7CisgICAgLSBpZiB0aGUgZGV2aWNlIGhhcyBub3QgYmVlbiBzdXNwZW5kZWQgYXQgcnVuIHRpbWUsIGludm9rZSB0aGUgLT50aGF3KCkKKyAgICAgIGNhbGxiYWNrIHByb3ZpZGVkIGJ5IGl0cyBkcml2ZXIgYW5kIHJldHVybiBpdHMgcmVzdWx0LCBvciByZXR1cm4gMCBpZiBub3QKKyAgICAgIGRlZmluZWQKKworICBpbnQgcG1fZ2VuZXJpY19wb3dlcm9mZihzdHJ1Y3QgZGV2aWNlICpkZXYpOworICAgIC0gaWYgdGhlIGRldmljZSBoYXMgbm90IGJlZW4gc3VzcGVuZGVkIGF0IHJ1biB0aW1lLCBpbnZva2UgdGhlIC0+cG93ZXJvZmYoKQorICAgICAgY2FsbGJhY2sgcHJvdmlkZWQgYnkgaXRzIGRyaXZlciBhbmQgcmV0dXJuIGl0cyByZXN1bHQsIG9yIHJldHVybiAwIGlmIG5vdAorICAgICAgZGVmaW5lZAorCisgIGludCBwbV9nZW5lcmljX3Jlc3RvcmUoc3RydWN0IGRldmljZSAqZGV2KTsKKyAgICAtIGludm9rZSB0aGUgLT5yZXN0b3JlKCkgY2FsbGJhY2sgcHJvdmlkZWQgYnkgdGhlIGRyaXZlciBvZiB0aGlzIGRldmljZSBhbmQsCisgICAgICBpZiBzdWNjZXNzZnVsLCBjaGFuZ2UgdGhlIGRldmljZSdzIHJ1bnRpbWUgUE0gc3RhdHVzIHRvICdhY3RpdmUnCisKK1RoZXNlIGZ1bmN0aW9ucyBjYW4gYmUgYXNzaWduZWQgdG8gdGhlIC0+cnVudGltZV9pZGxlKCksIC0+cnVudGltZV9zdXNwZW5kKCksCistPnJ1bnRpbWVfcmVzdW1lKCksIC0+c3VzcGVuZCgpLCAtPnJlc3VtZSgpLCAtPmZyZWV6ZSgpLCAtPnRoYXcoKSwgLT5wb3dlcm9mZigpLAorb3IgLT5yZXN0b3JlKCkgY2FsbGJhY2sgcG9pbnRlcnMgaW4gdGhlIHN1YnN5c3RlbS1sZXZlbCBkZXZfcG1fb3BzIHN0cnVjdHVyZXMuCisKK0lmIGEgc3Vic3lzdGVtIHdpc2hlcyB0byB1c2UgYWxsIG9mIHRoZW0gYXQgdGhlIHNhbWUgdGltZSwgaXQgY2FuIHNpbXBseSBhc3NpZ24KK3RoZSBHRU5FUklDX1NVQlNZU19QTV9PUFMgbWFjcm8sIGRlZmluZWQgaW4gaW5jbHVkZS9saW51eC9wbS5oLCB0byBpdHMKK2Rldl9wbV9vcHMgc3RydWN0dXJlIHBvaW50ZXIuCisKK0RldmljZSBkcml2ZXJzIHRoYXQgd2lzaCB0byB1c2UgdGhlIHNhbWUgZnVuY3Rpb24gYXMgYSBzeXN0ZW0gc3VzcGVuZCwgZnJlZXplLAorcG93ZXJvZmYgYW5kIHJ1bi10aW1lIHN1c3BlbmQgY2FsbGJhY2ssIGFuZCBzaW1pbGFybHkgZm9yIHN5c3RlbSByZXN1bWUsIHRoYXcsCityZXN0b3JlLCBhbmQgcnVuLXRpbWUgcmVzdW1lLCBjYW4gYWNoaWV2ZSB0aGlzIHdpdGggdGhlIGhlbHAgb2YgdGhlCitVTklWRVJTQUxfREVWX1BNX09QUyBtYWNybyBkZWZpbmVkIGluIGluY2x1ZGUvbGludXgvcG0uaCAocG9zc2libHkgc2V0dGluZyBpdHMKK2xhc3QgYXJndW1lbnQgdG8gTlVMTCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9pMmMudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvaTJjLnR4dAppbmRleCBiNmQyZTIxLi41MGRhMjAzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9pMmMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2kyYy50eHQKQEAgLTIsMTUgKzIsMTQgQEAKIAogUmVxdWlyZWQgcHJvcGVydGllcyA6CiAKLSAtIGRldmljZV90eXBlIDogU2hvdWxkIGJlICJpMmMiCiAgLSByZWcgOiBPZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGUgZGV2aWNlCisgLSBjb21wYXRpYmxlIDogc2hvdWxkIGJlICJmc2wsQ0hJUC1pMmMiIHdoZXJlIENISVAgaXMgdGhlIG5hbWUgb2YgYQorICAgY29tcGF0aWJsZSBwcm9jZXNzb3IsIGUuZy4gbXBjODMxMywgbXBjODU0MywgbXBjODU0NCwgbXBjNTEyMSwKKyAgIG1wYzUyMDAgb3IgbXBjNTIwMGIuIEZvciB0aGUgbXBjNTEyMSwgYW4gYWRkaXRpb25hbCBub2RlCisgICAiZnNsLG1wYzUxMjEtaTJjLWN0cmwiIGlzIHJlcXVpcmVkIGFzIHNob3duIGluIHRoZSBleGFtcGxlIGJlbG93LgogCiBSZWNvbW1lbmRlZCBwcm9wZXJ0aWVzIDoKIAotIC0gY29tcGF0aWJsZSA6IGNvbXBhdGliaWxpdHkgbGlzdCB3aXRoIDIgZW50cmllcywgdGhlIGZpcnN0IHNob3VsZAotICAgYmUgImZzbCxDSElQLWkyYyIgd2hlcmUgQ0hJUCBpcyB0aGUgbmFtZSBvZiBhIGNvbXBhdGlibGUgcHJvY2Vzc29yLAotICAgZS5nLiBtcGM4MzEzLCBtcGM4NTQzLCBtcGM4NTQ0LCBtcGM1MjAwIG9yIG1wYzUyMDBiLiBUaGUgc2Vjb25kIG9uZQotICAgc2hvdWxkIGJlICJmc2wtaTJjIi4KICAtIGludGVycnVwdHMgOiA8YSBiPiB3aGVyZSBhIGlzIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIGFuZCBiIGlzIGEKICAgIGZpZWxkIHRoYXQgcmVwcmVzZW50cyBhbiBlbmNvZGluZyBvZiB0aGUgc2Vuc2UgYW5kIGxldmVsCiAgICBpbmZvcm1hdGlvbiBmb3IgdGhlIGludGVycnVwdC4gIFRoaXMgc2hvdWxkIGJlIGVuY29kZWQgYmFzZWQgb24KQEAgLTI0LDI1ICsyMyw0MCBAQAogCiBFeGFtcGxlcyA6CiAKKwkvKiBNUEM1MTIxIGJhc2VkIGJvYXJkICovCisJaTJjQDE3NDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtaTJjIiwgImZzbC1pMmMiOworCQlyZWcgPSA8MHgxNzQwIDB4MjA+OworCQlpbnRlcnJ1cHRzID0gPDExIDB4OD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwPjsKKwl9OworCisJaTJjY29udHJvbEAxNzYwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1pMmMtY3RybCI7CisJCXJlZyA9IDwweDE3NjAgMHg4PjsKKwl9OworCisJLyogTVBDNTIwMEIgYmFzZWQgYm9hcmQgKi8KIAlpMmNAM2QwMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7Ci0JCWNlbGwtaW5kZXggPSA8MD47CiAJCXJlZyA9IDwweDNkMDAgMHg0MD47CiAJCWludGVycnVwdHMgPSA8MiAxNSAwPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQlmc2wscHJlc2VydmUtY2xvY2tpbmc7CiAJfTsKIAorCS8qIE1QQzg1NDQgYmFzZSBib2FyZCAqLwogCWkyY0AzMTAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwotCQljZWxsLWluZGV4ID0gPDE+OwogCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ0LWkyYyIsICJmc2wtaTJjIjsKIAkJcmVnID0gPDB4MzEwMCAweDEwMD47CiAJCWludGVycnVwdHMgPSA8NDMgMj47CiAJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKIAl9OwotCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CmluZGV4IDMzZGY4MmUuLmJmY2JiZjggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9BTFNBLUNvbmZpZ3VyYXRpb24udHh0CkBAIC0xODEyLDcgKzE4MTIsNyBAQAogICBNb2R1bGUgc25kLXVhMTAxCiAgIC0tLS0tLS0tLS0tLS0tLS0KIAotICAgIE1vZHVsZSBmb3IgdGhlIEVkaXJvbCBVQS0xMDEgYXVkaW8vTUlESSBpbnRlcmZhY2UuCisgICAgTW9kdWxlIGZvciB0aGUgRWRpcm9sIFVBLTEwMS9VQS0xMDAwIGF1ZGlvL01JREkgaW50ZXJmYWNlcy4KIAogICAgIFRoaXMgbW9kdWxlIHN1cHBvcnRzIG11bHRpcGxlIGRldmljZXMsIGF1dG9wcm9iZSBhbmQgaG90cGx1Z2dpbmcuCiAKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggNTFkOGI1Mi4uYzhhOGIxZiAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTcxLDYgKzcxLDcgQEAKIAlNOiBNYWlsIHBhdGNoZXMgdG86IEZ1bGxOYW1lIDxhZGRyZXNzQGRvbWFpbj4KIAlMOiBNYWlsaW5nIGxpc3QgdGhhdCBpcyByZWxldmFudCB0byB0aGlzIGFyZWEKIAlXOiBXZWItcGFnZSB3aXRoIHN0YXR1cy9pbmZvCisJUTogUGF0Y2h3b3JrIHdlYiBiYXNlZCBwYXRjaCB0cmFja2luZyBzeXN0ZW0gc2l0ZQogCVQ6IFNDTSB0cmVlIHR5cGUgYW5kIGxvY2F0aW9uLiAgVHlwZSBpcyBvbmUgb2Y6IGdpdCwgaGcsIHF1aWx0LCBzdGdpdC4KIAlTOiBTdGF0dXMsIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogCSAgIFN1cHBvcnRlZDoJU29tZW9uZSBpcyBhY3R1YWxseSBwYWlkIHRvIGxvb2sgYWZ0ZXIgdGhpcy4KQEAgLTE4Miw2ICsxODMsNyBAQAogTToJTGF0Y2hlc2FyIElvbmtvdiA8bHVjaG9AaW9ua292Lm5ldD4KIEw6CXY5ZnMtZGV2ZWxvcGVyQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAogVzoJaHR0cDovL3N3aWsubmV0L3Y5ZnMKK1E6CWh0dHA6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wcm9qZWN0L3Y5ZnMtZGV2ZWwvbGlzdC8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZXJpY3ZoL3Y5ZnMuZ2l0CiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzlwLnR4dApAQCAtMjM4LDYgKzI0MCw3IEBACiBNOglMZW4gQnJvd24gPGxlbmJAa2VybmVsLm9yZz4KIEw6CWxpbnV4LWFjcGlAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3Lmxlc3N3YXR0cy5vcmcvcHJvamVjdHMvYWNwaS8KK1E6CWh0dHA6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wcm9qZWN0L2xpbnV4LWFjcGkvbGlzdC8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbGVuYi9saW51eC1hY3BpLTIuNi5naXQKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9hY3BpLwpAQCAtNDI4LDcgKzQzMSw2IEBACiBMOglsaW51eC1nZW9kZUBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFc6CWh0dHA6Ly93d3cuYW1kLmNvbS91cy1lbi9Db25uZWN0aXZpdHlTb2x1dGlvbnMvVGVjaG5pY2FsUmVzb3VyY2VzLzAsLDUwXzIzMzRfMjQ1Ml8xMTM2MywwMC5odG1sCiBTOglTdXBwb3J0ZWQKLUY6CWFyY2gveDg2L2tlcm5lbC9nZW9kZV8zMi5jCiBGOglkcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2dlb2RlLXJuZy5jCiBGOglkcml2ZXJzL2NyeXB0by9nZW9kZSoKIEY6CWRyaXZlcnMvdmlkZW8vZ2VvZGUvCkBAIC05NjYsNiArOTY4LDEzIEBACiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS92ZnAvCiAKK0FTQzc2MjEgSEFSRFdBUkUgTU9OSVRPUiBEUklWRVIKK006CUdlb3JnZSBKb3NlcGggPGdlb3JnZS5qb3NlcGhAZmFpcnZpZXc1LmNvbT4KK0w6CWxtLXNlbnNvcnNAbG0tc2Vuc29ycy5vcmcKK1M6CU1haW50YWluZWQKK0Y6CURvY3VtZW50YXRpb24vaHdtb24vYXNjNzYyMQorRjoJZHJpdmVycy9od21vbi9hc2M3NjIxLmMKKwogQVNVUyBBQ1BJIEVYVFJBUyBEUklWRVIKIE06CUNvcmVudGluIENoYXJ5IDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CiBNOglLYXJvbCBLb3ppbW9yIDxzeml3YW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgpAQCAtMTMzMiw2ICsxMzQxLDcgQEAKIE06CUNocmlzIE1hc29uIDxjaHJpcy5tYXNvbkBvcmFjbGUuY29tPgogTDoJbGludXgtYnRyZnNAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vYnRyZnMud2lraS5rZXJuZWwub3JnLworUToJaHR0cDovL3BhdGNod29yay5rZXJuZWwub3JnL3Byb2plY3QvbGludXgtYnRyZnMvbGlzdC8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbWFzb24vYnRyZnMtdW5zdGFibGUuZ2l0CiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2J0cmZzLnR4dApAQCAtMTQ5Niw2ICsxNTA2LDcgQEAKIEw6CWxpbnV4LWNpZnMtY2xpZW50QGxpc3RzLnNhbWJhLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBMOglzYW1iYS10ZWNobmljYWxAbGlzdHMuc2FtYmEub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFc6CWh0dHA6Ly9saW51eC1jaWZzLnNhbWJhLm9yZy8KK1E6CWh0dHA6Ly9wYXRjaHdvcmsub3psYWJzLm9yZy9wcm9qZWN0L2xpbnV4LWNpZnMtY2xpZW50L2xpc3QvCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3NmcmVuY2gvY2lmcy0yLjYuZ2l0CiBTOglTdXBwb3J0ZWQKIEY6CURvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2lmcy50eHQKQEAgLTE3ODIsNiArMTc5Myw3IEBACiBQOglBbGFzZGFpciBLZXJnb24KIEw6CWRtLWRldmVsQHJlZGhhdC5jb20KIFc6CWh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vZG0KK1E6CWh0dHA6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wcm9qZWN0L2RtLWRldmVsL2xpc3QvCiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvCiBGOglkcml2ZXJzL21kL2RtKgpAQCAtMjEyNiw2ICsyMTM4LDcgQEAKIE06CUFuZHJlYXMgRGlsZ2VyIDxhZGlsZ2VyQHN1bi5jb20+CiBMOglsaW51eC1leHQ0QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2V4dDQud2lraS5rZXJuZWwub3JnCitROglodHRwOi8vcGF0Y2h3b3JrLm96bGFicy5vcmcvcHJvamVjdC9saW51eC1leHQ0L2xpc3QvCiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0CiBGOglmcy9leHQ0LwpAQCAtMjUwMiwxMyArMjUxNSw2IEBACiBTOglNYWludGFpbmVkCiBGOglzb3VuZC9wYXJpc2MvaGFybW9ueS4qCiAKLUhBWUVTIEVTUCBTRVJJQUwgRFJJVkVSCi1NOgkiQW5kcmV3IEouIFJvYmluc29uIiA8YXJvYmluc29Abnl4Lm5ldD4KLVc6CWh0dHA6Ly93d3cubnl4Lm5ldC9+YXJvYmluc28KLVM6CU1haW50YWluZWQKLUY6CURvY3VtZW50YXRpb24vc2VyaWFsL2hheWVzLWVzcC50eHQKLUY6CWRyaXZlcnMvY2hhci9lc3AuYwotCiBIRVdMRVRULVBBQ0tBUkQgU01BUlQyIFJBSUQgRFJJVkVSCiBNOglDaGlyYWcgS2FudGhhcmlhIDxjaGlyYWcua2FudGhhcmlhQGhwLmNvbT4KIEw6CWlzc19zdG9yYWdlZGV2QGhwLmNvbQpAQCAtMjcxNyw2ICsyNzIzLDcgQEAKIElERSBTVUJTWVNURU0KIE06CSJEYXZpZCBTLiBNaWxsZXIiIDxkYXZlbUBkYXZlbWxvZnQubmV0PgogTDoJbGludXgtaWRlQHZnZXIua2VybmVsLm9yZworUToJaHR0cDovL3BhdGNod29yay5vemxhYnMub3JnL3Byb2plY3QvbGludXgtaWRlL2xpc3QvCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2RhdmVtL2lkZS0yLjYuZ2l0CiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2lkZS8KQEAgLTI3NzEsNiArMjc3OCw3IEBACiBNOglIYWwgUm9zZW5zdG9jayA8aGFsLnJvc2Vuc3RvY2tAZ21haWwuY29tPgogTDoJbGludXgtcmRtYUB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cub3BlbmliLm9yZy8KK1E6CWh0dHA6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wcm9qZWN0L2xpbnV4LXJkbWEvbGlzdC8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvcm9sYW5kL2luZmluaWJhbmQuZ2l0CiBTOglTdXBwb3J0ZWQKIEY6CURvY3VtZW50YXRpb24vaW5maW5pYmFuZC8KQEAgLTI3OTAsNiArMjc5OCw3IEBACiBNOglEbWl0cnkgVG9yb2tob3YgPGRtaXRyeS50b3Jva2hvdkBnbWFpbC5jb20+CiBNOglEbWl0cnkgVG9yb2tob3YgPGR0b3JAbWFpbC5ydT4KIEw6CWxpbnV4LWlucHV0QHZnZXIua2VybmVsLm9yZworUToJaHR0cDovL3BhdGNod29yay5rZXJuZWwub3JnL3Byb2plY3QvbGludXgtaW5wdXQvbGlzdC8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZHRvci9pbnB1dC5naXQKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvaW5wdXQvCkBAIC0zMDQ2LDYgKzMwNTUsMTMgQEAKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi8KIAorSVQ4NyBIQVJEV0FSRSBNT05JVE9SSU5HIERSSVZFUgorTToJSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CitMOglsbS1zZW5zb3JzQGxtLXNlbnNvcnMub3JnCitTOglNYWludGFpbmVkCitGOglEb2N1bWVudGF0aW9uL2h3bW9uL2l0ODcKK0Y6CWRyaXZlcnMvaHdtb24vaXQ4Ny5jCisKIElWVFYgVklERU80TElOVVggRFJJVkVSCiBNOglBbmR5IFdhbGxzIDxhd2FsbHNAcmFkaXgubmV0PgogTDoJaXZ0di1kZXZlbEBpdnR2ZHJpdmVyLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCkBAIC0zMDk5LDYgKzMxMTUsNyBAQAogS0NPTkZJRwogTToJUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CiBMOglsaW51eC1rYnVpbGRAdmdlci5rZXJuZWwub3JnCitROglodHRwOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcHJvamVjdC9saW51eC1rYnVpbGQvbGlzdC8KIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0CiBGOglzY3JpcHRzL2tjb25maWcvCkBAIC0zMzEyLDYgKzMzMjksNyBAQAogTToJUGF1bCBNYWNrZXJyYXMgPHBhdWx1c0BzYW1iYS5vcmc+CiBXOglodHRwOi8vd3d3LnBlbmd1aW5wcGMub3JnLwogTDoJbGludXhwcGMtZGV2QG96bGFicy5vcmcKK1E6CWh0dHA6Ly9wYXRjaHdvcmsub3psYWJzLm9yZy9wcm9qZWN0L2xpbnV4cHBjLWRldi9saXN0LwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9iZW5oL3Bvd2VycGMuZ2l0CiBTOglTdXBwb3J0ZWQKIEY6CURvY3VtZW50YXRpb24vcG93ZXJwYy8KQEAgLTM0MzIsNiArMzQ1MCwxMyBAQAogRjoJRG9jdW1lbnRhdGlvbi9sZG0udHh0CiBGOglmcy9wYXJ0aXRpb25zL2xkbS4qCiAKK0xvZ0ZTCitNOglKb2VybiBFbmdlbCA8am9lcm5AbG9nZnMub3JnPgorTDoJbG9nZnNAbG9nZnMub3JnCitXOglsb2dmcy5vcmcKK1M6CU1haW50YWluZWQKK0Y6CWZzL2xvZ2ZzLworCiBMU0lMT0dJQyBNUFQgRlVTSU9OIERSSVZFUlMgKEZDL1NBUy9TUEkpCiBNOglFcmljIE1vb3JlIDxFcmljLk1vb3JlQGxzaS5jb20+CiBNOglzdXBwb3J0QGxzaS5jb20KQEAgLTM1NjgsNiArMzU5Myw3IEBACiBQOglMaW51eFRWLm9yZyBQcm9qZWN0CiBMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9saW51eHR2Lm9yZworUToJaHR0cDovL3BhdGNod29yay5rZXJuZWwub3JnL3Byb2plY3QvbGludXgtbWVkaWEvbGlzdC8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbWNoZWhhYi9saW51eC0yLjYuZ2l0CiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2R2Yi8KQEAgLTM2MDMsOCArMzYyOSw5IEBACiAKIE1FTU9SWSBURUNITk9MT0dZIERFVklDRVMgKE1URCkKIE06CURhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KLVc6CWh0dHA6Ly93d3cubGludXgtbXRkLmluZnJhZGVhZC5vcmcvCiBMOglsaW51eC1tdGRAbGlzdHMuaW5mcmFkZWFkLm9yZworVzoJaHR0cDovL3d3dy5saW51eC1tdGQuaW5mcmFkZWFkLm9yZy8KK1E6CWh0dHA6Ly9wYXRjaHdvcmsub3psYWJzLm9yZy9wcm9qZWN0L2xpbnV4LW10ZC9saXN0LwogVDoJZ2l0IGdpdDovL2dpdC5pbmZyYWRlYWQub3JnL210ZC0yLjYuZ2l0CiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL210ZC8KQEAgLTM4NjQsNiArMzg5MSw3IEBACiBORVRXT1JLSU5HIFtXSVJFTEVTU10KIE06CSJKb2huIFcuIExpbnZpbGxlIiA8bGludmlsbGVAdHV4ZHJpdmVyLmNvbT4KIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZworUToJaHR0cDovL3BhdGNod29yay5rZXJuZWwub3JnL3Byb2plY3QvbGludXgtd2lyZWxlc3MvbGlzdC8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbGludmlsbGUvd2lyZWxlc3MtMi42LmdpdAogUzoJTWFpbnRhaW5lZAogRjoJbmV0L21hYzgwMjExLwpAQCAtMzk1Niw2ICszOTg0LDcgQEAKIEw6CWxpbnV4LW9tYXBAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3Lm11cnUuY29tL2xpbnV4L29tYXAvCiBXOglodHRwOi8vbGludXgub21hcC5jb20vCitROglodHRwOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcHJvamVjdC9saW51eC1vbWFwL2xpc3QvCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RtbGluZC9saW51eC1vbWFwLTIuNi5naXQKIFM6CU1haW50YWluZWQKIEY6CWFyY2gvYXJtLypvbWFwKi8KQEAgLTQxODIsNiArNDIxMSw3IEBACiBNOgkiSmFtZXMgRS5KLiBCb3R0b21sZXkiIDxqZWpiQHBhcmlzYy1saW51eC5vcmc+CiBMOglsaW51eC1wYXJpc2NAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3LnBhcmlzYy1saW51eC5vcmcvCitROglodHRwOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcHJvamVjdC9saW51eC1wYXJpc2MvbGlzdC8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQva3lsZS9wYXJpc2MtMi42LmdpdAogUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9wYXJpc2MvCkBAIC00MjI0LDYgKzQyNTQsNyBAQAogUENJIFNVQlNZU1RFTQogTToJSmVzc2UgQmFybmVzIDxqYmFybmVzQHZpcnR1b3VzZ2Vlay5vcmc+CiBMOglsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnCitROglodHRwOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcHJvamVjdC9saW51eC1wY2kvbGlzdC8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvamJhcm5lcy9wY2ktMi42LmdpdAogUzoJU3VwcG9ydGVkCiBGOglEb2N1bWVudGF0aW9uL1BDSS8KQEAgLTQyNjUsNyArNDI5Niw5IEBACiBTOglTdXBwb3J0ZWQKIEY6CWtlcm5lbC9wZXJmX2V2ZW50LmMKIEY6CWluY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCi1GOglhcmNoLyovKi9rZXJuZWwvcGVyZl9ldmVudC5jCitGOglhcmNoLyova2VybmVsL3BlcmZfZXZlbnQuYworRjoJYXJjaC8qL2tlcm5lbC8qL3BlcmZfZXZlbnQuYworRjoJYXJjaC8qL2tlcm5lbC8qLyovcGVyZl9ldmVudC5jCiBGOglhcmNoLyovaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCiBGOglhcmNoLyovbGliL3BlcmZfZXZlbnQuYwogRjoJYXJjaC8qL2tlcm5lbC9wZXJmX2NhbGxjaGFpbi5jCkBAIC00NTk5LDYgKzQ2MzIsNyBAQAogUkVBTCBUSU1FIENMT0NLIChSVEMpIFNVQlNZU1RFTQogTToJQWxlc3NhbmRybyBadW1tbyA8YS56dW1tb0B0b3dlcnRlY2guaXQ+CiBMOglydGMtbGludXhAZ29vZ2xlZ3JvdXBzLmNvbQorUToJaHR0cDovL3BhdGNod29yay5vemxhYnMub3JnL3Byb2plY3QvcnRjLWxpbnV4L2xpc3QvCiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL3J0Yy50eHQKIEY6CWRyaXZlcnMvcnRjLwpAQCAtNDk2Niw2ICs1MDAwLDcgQEAKIFRJIERBVklOQ0kgTUFDSElORSBTVVBQT1JUCiBQOglLZXZpbiBIaWxtYW4KIE06CWRhdmluY2ktbGludXgtb3Blbi1zb3VyY2VAbGludXguZGF2aW5jaWRzcC5jb20KK1E6CWh0dHA6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wcm9qZWN0L2xpbnV4LWRhdmluY2kvbGlzdC8KIFM6CVN1cHBvcnRlZAogRjoJYXJjaC9hcm0vbWFjaC1kYXZpbmNpCiAKQEAgLTUxMzEsNiArNTE2Niw3IEBACiBTUEFSQyArIFVsdHJhU1BBUkMgKHNwYXJjL3NwYXJjNjQpCiBNOgkiRGF2aWQgUy4gTWlsbGVyIiA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KIEw6CXNwYXJjbGludXhAdmdlci5rZXJuZWwub3JnCitROglodHRwOi8vcGF0Y2h3b3JrLm96bGFicy5vcmcvcHJvamVjdC9zcGFyY2xpbnV4L2xpc3QvCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2RhdmVtL3NwYXJjLTIuNi5naXQKIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZGF2ZW0vc3BhcmMtbmV4dC0yLjYuZ2l0CiBTOglNYWludGFpbmVkCkBAIC01MTQ2LDYgKzUxODIsNyBAQAogTToJRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiBNOglHcmFudCBMaWtlbHkgPGdyYW50Lmxpa2VseUBzZWNyZXRsYWIuY2E+CiBMOglzcGktZGV2ZWwtZ2VuZXJhbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK1E6CWh0dHA6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wcm9qZWN0L3NwaS1kZXZlbC1nZW5lcmFsL2xpc3QvCiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL3NwaS8KIEY6CWRyaXZlcnMvc3BpLwpAQCAtNTIwMSw3ICs1MjM4LDcgQEAKIAogU1RBUk1PREUgUkFESU8gSVAgKFNUUklQKSBQUk9UT0NPTCBEUklWRVIKIFM6CU9ycGhhbgotRjoJZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3RyaXAuYworRjoJZHJpdmVycy9zdGFnaW5nL3N0cmlwL3N0cmlwLmMKIEY6CWluY2x1ZGUvbGludXgvaWZfc3RyaXAuaAogCiBTVFJBRElTIE1QRUctMiBERUNPREVSIERSSVZFUgpAQCAtNTIyMiw2ICs1MjU5LDcgQEAKIE06CVBhdWwgTXVuZHQgPGxldGhhbEBsaW51eC1zaC5vcmc+CiBMOglsaW51eC1zaEB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cubGludXgtc2gub3JnCitROglodHRwOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcHJvamVjdC9saW51eC1zaC9saXN0LwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9sZXRoYWwvc2gtMi42LmdpdAogUzoJU3VwcG9ydGVkCiBGOglEb2N1bWVudGF0aW9uL3NoLwpAQCAtNTk4OSw3ICs2MDI3LDcgQEAKIFc6CWh0dHA6Ly93d3cuaHBsLmhwLmNvbS9wZXJzb25hbC9KZWFuX1RvdXJyaWxoZXMvTGludXgvCiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2F2ZWxhbi50eHQKLUY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4qCitGOglkcml2ZXJzL3N0YWdpbmcvd2F2ZWxhbi8KIAogV0Q3MDAwIFNDU0kgRFJJVkVSCiBNOglNaXJvc2xhdiBaYWdvcmFjIDx6YWdhQGZseS5jYy5mZXIuaHI+CkBAIC02MTg1LDYgKzYyMjMsNyBAQAogVEhFIFJFU1QKIE06CUxpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz4KIEw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKK1E6CWh0dHA6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wcm9qZWN0L0xLTUwvbGlzdC8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdG9ydmFsZHMvbGludXgtMi42LmdpdAogUzoJQnVyaWVkIGFsaXZlIGluIHJlcG9ydGVycwogRjoJKgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jCmluZGV4IDYyNjE5ZjIuLjUzYzIxM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMKQEAgLTM2MSw3ICszNjEsNyBAQAogU1lTQ0FMTF9ERUZJTkU0KG9zZl9tb3VudCwgdW5zaWduZWQgbG9uZywgdHlwZW5yLCBjaGFyIF9fdXNlciAqLCBwYXRoLAogCQlpbnQsIGZsYWcsIHZvaWQgX191c2VyICosIGRhdGEpCiB7Ci0JaW50IHJldHZhbCA9IC1FSU5WQUw7CisJaW50IHJldHZhbDsKIAljaGFyICpuYW1lOwogCiAJbmFtZSA9IGdldG5hbWUocGF0aCk7CkBAIC0zNzksNiArMzc5LDcgQEAKIAkJcmV0dmFsID0gb3NmX3Byb2Nmc19tb3VudChuYW1lLCBkYXRhLCBmbGFnKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKKwkJcmV0dmFsID0gLUVJTlZBTDsKIAkJcHJpbnRrKCJvc2ZfbW91bnQoJWxkLCAleClcbiIsIHR5cGVuciwgZmxhZyk7CiAJfQogCXB1dG5hbWUobmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvS2NvbmZpZyBiL2FyY2gvY3Jpcy9LY29uZmlnCmluZGV4IDdhZGFjMzguLjA1OWVhYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9LY29uZmlnCisrKyBiL2FyY2gvY3Jpcy9LY29uZmlnCkBAIC0yMCw2ICsyMCwxMiBAQAogY29uZmlnIFJXU0VNX1hDSEdBRERfQUxHT1JJVEhNCiAJYm9vbAogCitjb25maWcgR0VORVJJQ19USU1FCisJZGVmX2Jvb2wgeQorCitjb25maWcgQVJDSF9VU0VTX0dFVFRJTUVPRkZTRVQKKwlkZWZfYm9vbCB5CisKIGNvbmZpZyBHRU5FUklDX0lPTUFQCiAgICAgICAgYm9vbAogICAgICAgIGRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvY3J5cHRvY29wLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9jcnlwdG9jb3AuYwppbmRleCBmZDUyOWEwLi5iNzBmYjM0IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9jcnlwdG9jb3AuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9jcnlwdG9jb3AuYwpAQCAtNjI4LDkgKzYyOCw5IEBACiAJCWNkZXNjLT5kbWFfZGVzY3ItPmJ1ZiA9IChjaGFyKil2aXJ0X3RvX3BoeXMob3BlcmF0aW9uLT50ZnJtX29wLmluZGF0YVsqaW5pb3ZfaXhdLmlvdl9iYXNlICsgKmluaW92X29mZnNldCk7CiAJCWNkZXNjLT5kbWFfZGVzY3ItPmFmdGVyID0gY2Rlc2MtPmRtYV9kZXNjci0+YnVmICsgZGxlbmd0aDsKIAorCQlhc3NlcnQoZGVzY19sZW4gPj0gZGxlbmd0aCk7CiAJCWRlc2NfbGVuIC09IGRsZW5ndGg7CiAJCSppbmlvdl9vZmZzZXQgKz0gZGxlbmd0aDsKLQkJYXNzZXJ0KGRlc2NfbGVuID49IDApOwogCQlpZiAoKmluaW92X29mZnNldCA+PSBvcGVyYXRpb24tPnRmcm1fb3AuaW5kYXRhWyppbmlvdl9peF0uaW92X2xlbikgewogCQkJKmluaW92X29mZnNldCA9IDA7CiAJCQkrKygqaW5pb3ZfaXgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvYXJiaXRlci5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvYXJiaXRlci5jCmluZGV4IDg0ZDMxYmQuLjgyZWYyOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL2FyYml0ZXIuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1mcy9hcmJpdGVyLmMKQEAgLTMzMiw3ICszMzIsNyBAQAogCWlmIChpZCA9PSAwKQogCQlpbnRyX21hc2suYnAwID0gcmVna19tYXJiX25vOwogCWVsc2UgaWYgKGlkID09IDEpCi0JCWludHJfbWFzay5icDIgPSByZWdrX21hcmJfbm87CisJCWludHJfbWFzay5icDEgPSByZWdrX21hcmJfbm87CiAJZWxzZSBpZiAoaWQgPT0gMikKIAkJaW50cl9tYXNrLmJwMiA9IHJlZ2tfbWFyYl9ubzsKIAllbHNlIGlmIChpZCA9PSAzKQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2tlcm5lbC90aW1lLmMgYi9hcmNoL2NyaXMva2VybmVsL3RpbWUuYwppbmRleCAwNzRmZTdkLi5hMDVkZDMxIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2NyaXMva2VybmVsL3RpbWUuYwpAQCAtNDIsNzUgKzQyLDExIEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBkb19zbG93X2dldHRpbWVvZmZzZXQodm9pZCk7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyAoKmRvX2dldHRpbWVvZmZzZXQpKHZvaWQpID0gZG9fc2xvd19nZXR0aW1lb2Zmc2V0OwogCi0vKgotICogVGhpcyB2ZXJzaW9uIG9mIGdldHRpbWVvZmRheSBoYXMgbmVhciBtaWNyb3NlY29uZCByZXNvbHV0aW9uLgotICoKLSAqIE5vdGU6IERpdmlzaW9uIGlzIHF1aXRlIHNsb3cgb24gQ1JJUyBhbmQgZG9fZ2V0dGltZW9mZGF5IGlzIGNhbGxlZAotICogICAgICAgcmF0aGVyIG9mdGVuLiBNYXliZSB3ZSBzaG91bGQgZG8gc29tZSBraW5kIG9mIGFwcHJveGltYXRpb24gaGVyZQotICogICAgICAgKGEgbmFpdmUgYXBwcm94aW1hdGlvbiB3b3VsZCBiZSB0byBkaXZpZGUgYnkgMTAyNCkuCi0gKi8KLXZvaWQgZG9fZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0dikKK3UzMiBhcmNoX2dldHRpbWVvZmZzZXQodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNpZ25lZCBsb25nIHVzZWMsIHNlYzsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JdXNlYyA9IGRvX2dldHRpbWVvZmZzZXQoKTsKLQotICAgICAgICAvKgotCSAqIElmIHRpbWVfYWRqdXN0IGlzIG5lZ2F0aXZlIHRoZW4gTlRQIGlzIHNsb3dpbmcgdGhlIGNsb2NrCi0JICogc28gbWFrZSBzdXJlIG5vdCB0byBnbyBpbnRvIG5leHQgcG9zc2libGUgaW50ZXJ2YWwuCi0JICogQmV0dGVyIHRvIGxvc2Ugc29tZSBhY2N1cmFjeSB0aGFuIGhhdmUgdGltZSBnbyBiYWNrd2FyZHMuLgotCSAqLwotCWlmICh1bmxpa2VseSh0aW1lX2FkanVzdCA8IDApICYmIHVzZWMgPiB0aWNrYWRqKQotCQl1c2VjID0gdGlja2FkajsKLQotCXNlYyA9IHh0aW1lLnR2X3NlYzsKLQl1c2VjICs9IHh0aW1lLnR2X25zZWMgLyAxMDAwOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXdoaWxlICh1c2VjID49IDEwMDAwMDApIHsKLQkJdXNlYyAtPSAxMDAwMDAwOwotCQlzZWMrKzsKLQl9Ci0KLQl0di0+dHZfc2VjID0gc2VjOwotCXR2LT50dl91c2VjID0gdXNlYzsKKwlyZXR1cm4gZG9fZ2V0dGltZW9mZnNldCgpICogMTAwMDsKIH0KIAotRVhQT1JUX1NZTUJPTChkb19nZXR0aW1lb2ZkYXkpOwotCi1pbnQgZG9fc2V0dGltZW9mZGF5KHN0cnVjdCB0aW1lc3BlYyAqdHYpCi17Ci0JdGltZV90IHd0bV9zZWMsIHNlYyA9IHR2LT50dl9zZWM7Ci0JbG9uZyB3dG1fbnNlYywgbnNlYyA9IHR2LT50dl9uc2VjOwotCi0JaWYgKCh1bnNpZ25lZCBsb25nKXR2LT50dl9uc2VjID49IE5TRUNfUEVSX1NFQykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl3cml0ZV9zZXFsb2NrX2lycSgmeHRpbWVfbG9jayk7Ci0JLyoKLQkgKiBUaGlzIGlzIHJldm9sdGluZy4gV2UgbmVlZCB0byBzZXQgInh0aW1lIiBjb3JyZWN0bHkuIEhvd2V2ZXIsIHRoZQotCSAqIHZhbHVlIGluIHRoaXMgbG9jYXRpb24gaXMgdGhlIHZhbHVlIGF0IHRoZSBtb3N0IHJlY2VudCB1cGRhdGUgb2YKLQkgKiB3YWxsIHRpbWUuICBEaXNjb3ZlciB3aGF0IGNvcnJlY3Rpb24gZ2V0dGltZW9mZGF5KCkgd291bGQgaGF2ZQotCSAqIG1hZGUsIGFuZCB0aGVuIHVuZG8gaXQhCi0JICovCi0JbnNlYyAtPSBkb19nZXR0aW1lb2Zmc2V0KCkgKiBOU0VDX1BFUl9VU0VDOwotCi0Jd3RtX3NlYyAgPSB3YWxsX3RvX21vbm90b25pYy50dl9zZWMgKyAoeHRpbWUudHZfc2VjIC0gc2VjKTsKLQl3dG1fbnNlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X25zZWMgKyAoeHRpbWUudHZfbnNlYyAtIG5zZWMpOwotCi0Jc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJnh0aW1lLCBzZWMsIG5zZWMpOwotCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywgd3RtX3NlYywgd3RtX25zZWMpOwotCi0JbnRwX2NsZWFyKCk7Ci0Jd3JpdGVfc2VxdW5sb2NrX2lycSgmeHRpbWVfbG9jayk7Ci0JY2xvY2tfd2FzX3NldCgpOwotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MKGRvX3NldHRpbWVvZmRheSk7Ci0KLQogLyoKICAqIEJVRzogVGhpcyByb3V0aW5lIGRvZXMgbm90IGhhbmRsZSBob3VyIG92ZXJmbG93IHByb3Blcmx5OyBpdCBqdXN0CiAgKiAgICAgIHNldHMgdGhlIG1pbnV0ZXMuIFVzdWFsbHkgeW91J2xsIG9ubHkgbm90aWNlIHRoYXQgYWZ0ZXIgcmVib290IQpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvaW5jbHVkZS9hc20vcGNpLmggYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS9wY2kuaAppbmRleCA0OTJiNWM0Li44YzcyNjBhIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS9wY2kuaAorKysgYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS9wY2kuaApAQCAtNjgsNDEgKzY4LDQgQEAKICNkZWZpbmUgUENJQklPU19NSU5fSU8JCTB4MTAwCiAjZGVmaW5lIFBDSUJJT1NfTUlOX01FTQkJMHgwMDAxMDAwMAogCi0vKiBNYWtlIHBoeXNpY2FsIG1lbW9yeSBjb25zaXN0ZW50IGZvciBhIHNpbmdsZQotICogc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9uIGFmdGVyIGEgdHJhbnNmZXIuCi0gKgotICogSWYgeW91IHBlcmZvcm0gYSBwY2lfbWFwX3NpbmdsZSgpIGJ1dCB3aXNoIHRvIGludGVycm9nYXRlIHRoZQotICogYnVmZmVyIHVzaW5nIHRoZSBjcHUsIHlldCBkbyBub3Qgd2lzaCB0byB0ZWFyZG93biB0aGUgUENJIGRtYQotICogbWFwcGluZywgeW91IG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBkb2luZyBzby4gIEF0IHRoZQotICogbmV4dCBwb2ludCB5b3UgZ2l2ZSB0aGUgUENJIGRtYSBhZGRyZXNzIGJhY2sgdG8gdGhlIGNhcmQsIHRoZQotICogZGV2aWNlIGFnYWluIG93bnMgdGhlIGJ1ZmZlci4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIHBjaV9kbWFfc3luY19zaW5nbGUoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LAotCQkJCSAgICAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCi0JCQkJICAgICAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQotewotCUJVR19PTihkaXJlY3Rpb24gPT0gUENJX0RNQV9OT05FKTsKLQotCWZydl9jYWNoZV93YmFja19pbnYoKHVuc2lnbmVkIGxvbmcpYnVzX3RvX3ZpcnQoZG1hX2hhbmRsZSksCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcpYnVzX3RvX3ZpcnQoZG1hX2hhbmRsZSkgKyBzaXplKTsKLX0KLQotLyogTWFrZSBwaHlzaWNhbCBtZW1vcnkgY29uc2lzdGVudCBmb3IgYSBzZXQgb2Ygc3RyZWFtaW5nCi0gKiBtb2RlIERNQSB0cmFuc2xhdGlvbnMgYWZ0ZXIgYSB0cmFuc2Zlci4KLSAqCi0gKiBUaGUgc2FtZSBhcyBwY2lfZG1hX3N5bmNfc2luZ2xlIGJ1dCBmb3IgYSBzY2F0dGVyLWdhdGhlciBsaXN0LAotICogc2FtZSBydWxlcyBhbmQgdXNhZ2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZG1hX3N5bmNfc2coc3RydWN0IHBjaV9kZXYgKmh3ZGV2LAotCQkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCQkJICAgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbikKLXsKLQlpbnQgaTsKLQlCVUdfT04oZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbmVsZW1zOyBpKyspCi0JCWZydl9jYWNoZV93YmFja19pbnYoc2dfZG1hX2FkZHJlc3MoJnNnW2ldKSwKLQkJCQkgICAgc2dfZG1hX2FkZHJlc3MoJnNnW2ldKStzZ19kbWFfbGVuKCZzZ1tpXSkpOwotfQotCiAjZW5kaWYgLyogX0FTTV9GUlZfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCA0YzQxNjU2Li5iNTI5OGViIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0yMTksNTQgKzIxOSw2IEBACiAJTkVXX0FVWF9FTlQoQVRfU1lTSU5GT19FSERSLCAodW5zaWduZWQgbG9uZykgR0FURV9FSERSKTsJCVwKIH0gd2hpbGUgKDApCiAKLQotLyoKLSAqIFRoZXNlIG1hY3JvcyBwYXJhbWV0ZXJpemUgZWxmX2NvcmVfZHVtcCBpbiBmcy9iaW5mbXRfZWxmLmMgdG8gd3JpdGUgb3V0Ci0gKiBleHRyYSBzZWdtZW50cyBjb250YWluaW5nIHRoZSBnYXRlIERTTyBjb250ZW50cy4gIER1bXBpbmcgaXRzCi0gKiBjb250ZW50cyBtYWtlcyBwb3N0LW1vcnRlbSBmdWxseSBpbnRlcnByZXRhYmxlIGxhdGVyIHdpdGhvdXQgbWF0Y2hpbmcgdXAKLSAqIHRoZSBzYW1lIGtlcm5lbCBhbmQgaGFyZHdhcmUgY29uZmlnIHRvIHNlZSB3aGF0IFBDIHZhbHVlcyBtZWFudC4KLSAqIER1bXBpbmcgaXRzIGV4dHJhIEVMRiBwcm9ncmFtIGhlYWRlcnMgaW5jbHVkZXMgYWxsIHRoZSBvdGhlciBpbmZvcm1hdGlvbgotICogYSBkZWJ1Z2dlciBuZWVkcyB0byBlYXNpbHkgZmluZCBob3cgdGhlIGdhdGUgRFNPIHdhcyBiZWluZyB1c2VkLgotICovCi0jZGVmaW5lIEVMRl9DT1JFX0VYVFJBX1BIRFJTCQkoR0FURV9FSERSLT5lX3BobnVtKQotI2RlZmluZSBFTEZfQ09SRV9XUklURV9FWFRSQV9QSERSUwkJCQkJCVwKLWRvIHsJCQkJCQkJCQkJXAotCWNvbnN0IHN0cnVjdCBlbGZfcGhkciAqY29uc3QgZ2F0ZV9waGRycyA9CQkJICAgICAgXAotCQkoY29uc3Qgc3RydWN0IGVsZl9waGRyICopIChHQVRFX0FERFIgKyBHQVRFX0VIRFItPmVfcGhvZmYpOyAgIFwKLQlpbnQgaTsJCQkJCQkJCQlcCi0JRWxmNjRfT2ZmIG9mcyA9IDA7CQkJCQkJICAgICAgXAotCWZvciAoaSA9IDA7IGkgPCBHQVRFX0VIRFItPmVfcGhudW07ICsraSkgewkJCQlcCi0JCXN0cnVjdCBlbGZfcGhkciBwaGRyID0gZ2F0ZV9waGRyc1tpXTsJCQkgICAgICBcCi0JCWlmIChwaGRyLnBfdHlwZSA9PSBQVF9MT0FEKSB7CQkJCQlcCi0JCQlwaGRyLnBfbWVtc3ogPSBQQUdFX0FMSUdOKHBoZHIucF9tZW1zeik7CSAgICAgIFwKLQkJCXBoZHIucF9maWxlc3ogPSBwaGRyLnBfbWVtc3o7CQkJICAgICAgXAotCQkJaWYgKG9mcyA9PSAwKSB7CQkJCQkgICAgICBcCi0JCQkJb2ZzID0gcGhkci5wX29mZnNldCA9IG9mZnNldDsJCSAgICAgIFwKLQkJCW9mZnNldCArPSBwaGRyLnBfZmlsZXN6OwkJCQlcCi0JCX0JCQkJCQkJICAgICAgXAotCQllbHNlCQkJCQkJCSAgICAgIFwKLQkJCQlwaGRyLnBfb2Zmc2V0ID0gb2ZzOwkJCSAgICAgIFwKLQkJfQkJCQkJCQkgICAgICBcCi0JCWVsc2UJCQkJCQkJICAgICAgXAotCQkJcGhkci5wX29mZnNldCArPSBvZnM7CQkJCQlcCi0JCXBoZHIucF9wYWRkciA9IDA7IC8qIG1hdGNoIG90aGVyIGNvcmUgcGhkcnMgKi8JCQlcCi0JCURVTVBfV1JJVEUoJnBoZHIsIHNpemVvZihwaGRyKSk7CQkJCVwKLQl9CQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKLSNkZWZpbmUgRUxGX0NPUkVfV1JJVEVfRVhUUkFfREFUQQkJCQkJXAotZG8gewkJCQkJCQkJCVwKLQljb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKmNvbnN0IGdhdGVfcGhkcnMgPQkJCSAgICAgIFwKLQkJKGNvbnN0IHN0cnVjdCBlbGZfcGhkciAqKSAoR0FURV9BRERSICsgR0FURV9FSERSLT5lX3Bob2ZmKTsgICBcCi0JaW50IGk7CQkJCQkJCQlcCi0JZm9yIChpID0gMDsgaSA8IEdBVEVfRUhEUi0+ZV9waG51bTsgKytpKSB7CQkJXAotCQlpZiAoZ2F0ZV9waGRyc1tpXS5wX3R5cGUgPT0gUFRfTE9BRCkgewkJCSAgICAgIFwKLQkJCURVTVBfV1JJVEUoKHZvaWQgKikgZ2F0ZV9waGRyc1tpXS5wX3ZhZGRyLAkgICAgICBcCi0JCQkJICAgUEFHRV9BTElHTihnYXRlX3BoZHJzW2ldLnBfbWVtc3opKTsJICAgICAgXAotCQkJYnJlYWs7CQkJCQkJICAgICAgXAotCQl9CQkJCQkJCSAgICAgIFwKLQl9CQkJCQkJCQlcCi19IHdoaWxlICgwKQotCiAvKgogICogZm9ybWF0IGZvciBlbnRyaWVzIGluIHRoZSBHbG9iYWwgT2Zmc2V0IFRhYmxlCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCmluZGV4IDQxMzgyODIuLmRiMTBiMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQpAQCAtNDUsNiArNDUsOCBAQAogb2JqLSQoQ09ORklHX0RNQVIpCQkrPSBwY2ktZG1hLm8KIG9iai0kKENPTkZJR19TV0lPVExCKQkJKz0gcGNpLXN3aW90bGIubwogCitvYmotJChDT05GSUdfQklORk1UX0VMRikJKz0gZWxmY29yZS5vCisKICMgZnBfZW11bGF0ZSgpIGV4cGVjdHMgZjItZjUsZjE2LWYzMSB0byBjb250YWluIHRoZSB1c2VyLWxldmVsIHN0YXRlLgogQ0ZMQUdTX3RyYXBzLm8gICs9IC1tZml4ZWQtcmFuZ2U9ZjItZjUsZjE2LWYzMQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2VsZmNvcmUuYyBiL2FyY2gvaWE2NC9rZXJuZWwvZWxmY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYzE2MzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQva2VybmVsL2VsZmNvcmUuYwpAQCAtMCwwICsxLDgwIEBACisjaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8bGludXgvY29yZWR1bXAuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlIDxhc20vZWxmLmg+CisKKworRWxmNjRfSGFsZiBlbGZfY29yZV9leHRyYV9waGRycyh2b2lkKQoreworCXJldHVybiBHQVRFX0VIRFItPmVfcGhudW07Cit9CisKK2ludCBlbGZfY29yZV93cml0ZV9leHRyYV9waGRycyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgc2l6ZV90ICpzaXplLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbGltaXQpCit7CisJY29uc3Qgc3RydWN0IGVsZl9waGRyICpjb25zdCBnYXRlX3BoZHJzID0KKwkJKGNvbnN0IHN0cnVjdCBlbGZfcGhkciAqKSAoR0FURV9BRERSICsgR0FURV9FSERSLT5lX3Bob2ZmKTsKKwlpbnQgaTsKKwlFbGY2NF9PZmYgb2ZzID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBHQVRFX0VIRFItPmVfcGhudW07ICsraSkgeworCQlzdHJ1Y3QgZWxmX3BoZHIgcGhkciA9IGdhdGVfcGhkcnNbaV07CisKKwkJaWYgKHBoZHIucF90eXBlID09IFBUX0xPQUQpIHsKKwkJCXBoZHIucF9tZW1zeiA9IFBBR0VfQUxJR04ocGhkci5wX21lbXN6KTsKKwkJCXBoZHIucF9maWxlc3ogPSBwaGRyLnBfbWVtc3o7CisJCQlpZiAob2ZzID09IDApIHsKKwkJCQlvZnMgPSBwaGRyLnBfb2Zmc2V0ID0gb2Zmc2V0OworCQkJCW9mZnNldCArPSBwaGRyLnBfZmlsZXN6OworCQkJfSBlbHNlIHsKKwkJCQlwaGRyLnBfb2Zmc2V0ID0gb2ZzOworCQkJfQorCQl9IGVsc2UgeworCQkJcGhkci5wX29mZnNldCArPSBvZnM7CisJCX0KKwkJcGhkci5wX3BhZGRyID0gMDsgLyogbWF0Y2ggb3RoZXIgY29yZSBwaGRycyAqLworCQkqc2l6ZSArPSBzaXplb2YocGhkcik7CisJCWlmICgqc2l6ZSA+IGxpbWl0IHx8ICFkdW1wX3dyaXRlKGZpbGUsICZwaGRyLCBzaXplb2YocGhkcikpKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitpbnQgZWxmX2NvcmVfd3JpdGVfZXh0cmFfZGF0YShzdHJ1Y3QgZmlsZSAqZmlsZSwgc2l6ZV90ICpzaXplLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBsaW1pdCkKK3sKKwljb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKmNvbnN0IGdhdGVfcGhkcnMgPQorCQkoY29uc3Qgc3RydWN0IGVsZl9waGRyICopIChHQVRFX0FERFIgKyBHQVRFX0VIRFItPmVfcGhvZmYpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEdBVEVfRUhEUi0+ZV9waG51bTsgKytpKSB7CisJCWlmIChnYXRlX3BoZHJzW2ldLnBfdHlwZSA9PSBQVF9MT0FEKSB7CisJCQl2b2lkICphZGRyID0gKHZvaWQgKilnYXRlX3BoZHJzW2ldLnBfdmFkZHI7CisJCQlzaXplX3QgbWVtc3ogPSBQQUdFX0FMSUdOKGdhdGVfcGhkcnNbaV0ucF9tZW1zeik7CisKKwkJCSpzaXplICs9IG1lbXN6OworCQkJaWYgKCpzaXplID4gbGltaXQgfHwgIWR1bXBfd3JpdGUoZmlsZSwgYWRkciwgbWVtc3opKQorCQkJCXJldHVybiAwOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIDE7Cit9CisKK3NpemVfdCBlbGZfY29yZV9leHRyYV9kYXRhX3NpemUodm9pZCkKK3sKKwljb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKmNvbnN0IGdhdGVfcGhkcnMgPQorCQkoY29uc3Qgc3RydWN0IGVsZl9waGRyICopIChHQVRFX0FERFIgKyBHQVRFX0VIRFItPmVfcGhvZmYpOworCWludCBpOworCXNpemVfdCBzaXplID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBHQVRFX0VIRFItPmVfcGhudW07ICsraSkgeworCQlpZiAoZ2F0ZV9waGRyc1tpXS5wX3R5cGUgPT0gUFRfTE9BRCkgeworCQkJc2l6ZSArPSBQQUdFX0FMSUdOKGdhdGVfcGhkcnNbaV0ucF9tZW1zeik7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gc2l6ZTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMKaW5kZXggYjgxZTQ2Yi4uNzAzMDYyYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMKQEAgLTIzMTUsNiArMjMxNSw3IEBACiAJCURQUklOVCgoIkNhbm5vdCBhbGxvY2F0ZSB2bWFcbiIpKTsKIAkJZ290byBlcnJvcl9rbWVtOwogCX0KKwlJTklUX0xJU1RfSEVBRCgmdm1hLT5hbm9uX3ZtYV9jaGFpbik7CiAKIAkvKgogCSAqIHBhcnRpYWxseSBpbml0aWFsaXplIHRoZSB2bWEgZm9yIHRoZSBzYW1wbGluZyBidWZmZXIKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9pbml0LmMgYi9hcmNoL2lhNjQvbW0vaW5pdC5jCmluZGV4IGNhMzMzNWUuLmVkNDE3NTkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9pbml0LmMKKysrIGIvYXJjaC9pYTY0L21tL2luaXQuYwpAQCAtMTE3LDYgKzExNyw3IEBACiAJICovCiAJdm1hID0ga21lbV9jYWNoZV96YWxsb2Modm1fYXJlYV9jYWNoZXAsIEdGUF9LRVJORUwpOwogCWlmICh2bWEpIHsKKwkJSU5JVF9MSVNUX0hFQUQoJnZtYS0+YW5vbl92bWFfY2hhaW4pOwogCQl2bWEtPnZtX21tID0gY3VycmVudC0+bW07CiAJCXZtYS0+dm1fc3RhcnQgPSBjdXJyZW50LT50aHJlYWQucmJzX2JvdCAmIFBBR0VfTUFTSzsKIAkJdm1hLT52bV9lbmQgPSB2bWEtPnZtX3N0YXJ0ICsgUEFHRV9TSVpFOwpAQCAtMTM1LDYgKzEzNiw3IEBACiAJaWYgKCEoY3VycmVudC0+cGVyc29uYWxpdHkgJiBNTUFQX1BBR0VfWkVSTykpIHsKIAkJdm1hID0ga21lbV9jYWNoZV96YWxsb2Modm1fYXJlYV9jYWNoZXAsIEdGUF9LRVJORUwpOwogCQlpZiAodm1hKSB7CisJCQlJTklUX0xJU1RfSEVBRCgmdm1hLT5hbm9uX3ZtYV9jaGFpbik7CiAJCQl2bWEtPnZtX21tID0gY3VycmVudC0+bW07CiAJCQl2bWEtPnZtX2VuZCA9IFBBR0VfU0laRTsKIAkJCXZtYS0+dm1fcGFnZV9wcm90ID0gX19wZ3Byb3QocGdwcm90X3ZhbChQQUdFX1JFQURPTkxZKSB8IF9QQUdFX01BX05BVCk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9LY29uZmlnLmRlYnVnIGIvYXJjaC9wYXJpc2MvS2NvbmZpZy5kZWJ1ZwppbmRleCBiYzk4OWU1Li43MzA1YWM4IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvcGFyaXNjL0tjb25maWcuZGVidWcKQEAgLTEyLDQgKzEyLDE4IEBACiAgICAgICAgICBwb3J0aW9uIG9mIHRoZSBrZXJuZWwgY29kZSB3b24ndCBiZSBjb3ZlcmVkIGJ5IGEgVExCIGFueW1vcmUuCiAgICAgICAgICBJZiBpbiBkb3VidCwgc2F5ICJOIi4KIAorY29uZmlnIERFQlVHX1NUUklDVF9VU0VSX0NPUFlfQ0hFQ0tTCisJYm9vbCAiU3RyaWN0IGNvcHkgc2l6ZSBjaGVja3MiCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgIVRSQUNFX0JSQU5DSF9QUk9GSUxJTkcKKwktLS1oZWxwLS0tCisJICBFbmFibGluZyB0aGlzIG9wdGlvbiB0dXJucyBhIGNlcnRhaW4gc2V0IG9mIHNhbml0eSBjaGVja3MgZm9yIHVzZXIKKwkgIGNvcHkgb3BlcmF0aW9ucyBpbnRvIGNvbXBpbGUgdGltZSBmYWlsdXJlcy4KKworCSAgVGhlIGNvcHlfZnJvbV91c2VyKCkgZXRjIGNoZWNrcyBhcmUgdGhlcmUgdG8gaGVscCB0ZXN0IGlmIHRoZXJlCisJICBhcmUgc3VmZmljaWVudCBzZWN1cml0eSBjaGVja3Mgb24gdGhlIGxlbmd0aCBhcmd1bWVudCBvZgorCSAgdGhlIGNvcHkgb3BlcmF0aW9uLCBieSBoYXZpbmcgZ2NjIHByb3ZlIHRoYXQgdGhlIGFyZ3VtZW50IGlzCisJICB3aXRoaW4gYm91bmRzLgorCisJICBJZiB1bnN1cmUsIG9yIGlmIHlvdSBydW4gYW4gb2xkZXIgKHByZSA0LjQpIGdjYywgc2F5IE4uCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BhcmFtLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wYXJhbS5oCmluZGV4IDMyZTAzZDguLjk2NWQ0NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BhcmFtLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFyYW0uaApAQCAtMSwyMiArMSBAQAotI2lmbmRlZiBfQVNNUEFSSVNDX1BBUkFNX0gKLSNkZWZpbmUgX0FTTVBBUklTQ19QQVJBTV9ICi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0jZGVmaW5lIEhaCQlDT05GSUdfSFoKLSNkZWZpbmUgVVNFUl9IWgkJMTAwCQkvKiBzb21lIHVzZXIgQVBJIHVzZSAidGlja3MiICovCi0jZGVmaW5lIENMT0NLU19QRVJfU0VDCShVU0VSX0haKQkvKiBsaWtlIHRpbWVzKCkgKi8KLSNlbmRpZgotCi0jaWZuZGVmIEhaCi0jZGVmaW5lIEhaIDEwMAotI2VuZGlmCi0KLSNkZWZpbmUgRVhFQ19QQUdFU0laRQk0MDk2Ci0KLSNpZm5kZWYgTk9HUk9VUAotI2RlZmluZSBOT0dST1VQCQkoLTEpCi0jZW5kaWYKLQotI2RlZmluZSBNQVhIT1NUTkFNRUxFTgk2NAkvKiBtYXggbGVuZ3RoIG9mIGhvc3RuYW1lICovCi0KLSNlbmRpZgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BhcmFtLmg+CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IGQ5MTM1N2IuLjQ2NTNjNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0xNjAsNyArMTYwLDcgQEAKICAgIGxkY2QpLiAqLwogCiAjZGVmaW5lIF9fUEFfTERDV19BTElHTk1FTlQJNAotI2RlZmluZSBfX2xkY3dfYWxpZ24oYSkgKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilhKQorI2RlZmluZSBfX2xkY3dfYWxpZ24oYSkgKCYoYSktPnNsb2NrKQogI2RlZmluZSBfX0xEQ1cJImxkY3csY28iCiAKICNlbmRpZiAvKiFDT05GSUdfUEEyMCovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggN2NmNzk5ZC4uZmY0Y2Y5ZCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy91YWNjZXNzLXVuYWxpZ25lZC5oPgogCiAjZGVmaW5lIFZFUklGWV9SRUFEIDAKQEAgLTIzNCwxMyArMjM1LDM1IEBACiAKIHVuc2lnbmVkIGxvbmcgY29weV90b191c2VyKHZvaWQgX191c2VyICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBsZW4pOwogI2RlZmluZSBfX2NvcHlfdG9fdXNlciBjb3B5X3RvX3VzZXIKLXVuc2lnbmVkIGxvbmcgY29weV9mcm9tX3VzZXIodm9pZCAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB1bnNpZ25lZCBsb25nIGxlbik7Ci0jZGVmaW5lIF9fY29weV9mcm9tX3VzZXIgY29weV9mcm9tX3VzZXIKK3Vuc2lnbmVkIGxvbmcgX19jb3B5X2Zyb21fdXNlcih2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHVuc2lnbmVkIGxvbmcgbGVuKTsKIHVuc2lnbmVkIGxvbmcgY29weV9pbl91c2VyKHZvaWQgX191c2VyICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHVuc2lnbmVkIGxvbmcgbGVuKTsKICNkZWZpbmUgX19jb3B5X2luX3VzZXIgY29weV9pbl91c2VyCiAjZGVmaW5lIF9fY29weV90b191c2VyX2luYXRvbWljIF9fY29weV90b191c2VyCiAjZGVmaW5lIF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMgX19jb3B5X2Zyb21fdXNlcgogCitleHRlcm4gdm9pZCBjb3B5X2Zyb21fdXNlcl9vdmVyZmxvdyh2b2lkKQorI2lmZGVmIENPTkZJR19ERUJVR19TVFJJQ1RfVVNFUl9DT1BZX0NIRUNLUworICAgICAgICBfX2NvbXBpbGV0aW1lX2Vycm9yKCJjb3B5X2Zyb21fdXNlcigpIGJ1ZmZlciBzaXplIGlzIG5vdCBwcm92YWJseSBjb3JyZWN0IikKKyNlbHNlCisgICAgICAgIF9fY29tcGlsZXRpbWVfd2FybmluZygiY29weV9mcm9tX3VzZXIoKSBidWZmZXIgc2l6ZSBpcyBub3QgcHJvdmFibHkgY29ycmVjdCIpCisjZW5kaWYKKzsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBjb3B5X2Zyb21fdXNlcih2b2lkICp0bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBuKQoreworICAgICAgICBpbnQgc3ogPSBfX2NvbXBpbGV0aW1lX29iamVjdF9zaXplKHRvKTsKKyAgICAgICAgaW50IHJldCA9IC1FRkFVTFQ7CisKKyAgICAgICAgaWYgKGxpa2VseShzeiA9PSAtMSB8fCAhX19idWlsdGluX2NvbnN0YW50X3AobikgfHwgc3ogPj0gbikpCisgICAgICAgICAgICAgICAgcmV0ID0gX19jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb3B5X2Zyb21fdXNlcl9vdmVyZmxvdygpOworCisgICAgICAgIHJldHVybiByZXQ7Cit9CisKIHN0cnVjdCBwdF9yZWdzOwogaW50IGZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggY2RhMTU4My4uMWNlN2QyOCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTgxMSw4ICs4MTEsMTAgQEAKICNkZWZpbmUgX19OUl9wd3JpdGV2CQkoX19OUl9MaW51eCArIDMxNikKICNkZWZpbmUgX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbwkoX19OUl9MaW51eCArIDMxNykKICNkZWZpbmUgX19OUl9wZXJmX2V2ZW50X29wZW4JKF9fTlJfTGludXggKyAzMTgpCisjZGVmaW5lIF9fTlJfcmVjdm1tc2cJCShfX05SX0xpbnV4ICsgMzE5KQorI2RlZmluZSBfX05SX2FjY2VwdDQJCShfX05SX0xpbnV4ICsgMzIwKQogCi0jZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJKF9fTlJfcGVyZl9ldmVudF9vcGVuICsgMSkKKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkoX19OUl9hY2NlcHQ0ICsgMSkKIAogCiAjZGVmaW5lIF9fSUdOT1JFX3NlbGVjdAkJLyogbmV3c2VsZWN0ICovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvY2FjaGUuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9jYWNoZS5jCmluZGV4IDEwNTRiYWEuLmQwNTRmM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9jYWNoZS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9jYWNoZS5jCkBAIC0xNzEsMTQgKzE3MSwxNCBAQAogCQljYWNoZV9pbmZvLmljX2NvbmYuY2NfY3N0LAogCQljYWNoZV9pbmZvLmljX2NvbmYuY2NfaHYpOwogCi0JcHJpbnRrKCJELVRMQiBjb25mOiBzaCAlZCBwYWdlICVkIGNzdCAlZCBhaWQgJWQgcGFkMSAlZCBcbiIsCisJcHJpbnRrKCJELVRMQiBjb25mOiBzaCAlZCBwYWdlICVkIGNzdCAlZCBhaWQgJWQgcGFkMSAlZFxuIiwKIAkJY2FjaGVfaW5mby5kdF9jb25mLnRjX3NoLAogCQljYWNoZV9pbmZvLmR0X2NvbmYudGNfcGFnZSwKIAkJY2FjaGVfaW5mby5kdF9jb25mLnRjX2NzdCwKIAkJY2FjaGVfaW5mby5kdF9jb25mLnRjX2FpZCwKIAkJY2FjaGVfaW5mby5kdF9jb25mLnRjX3BhZDEpOwogCi0JcHJpbnRrKCJJLVRMQiBjb25mOiBzaCAlZCBwYWdlICVkIGNzdCAlZCBhaWQgJWQgcGFkMSAlZCBcbiIsCisJcHJpbnRrKCJJLVRMQiBjb25mOiBzaCAlZCBwYWdlICVkIGNzdCAlZCBhaWQgJWQgcGFkMSAlZFxuIiwKIAkJY2FjaGVfaW5mby5pdF9jb25mLnRjX3NoLAogCQljYWNoZV9pbmZvLml0X2NvbmYudGNfcGFnZSwKIAkJY2FjaGVfaW5mby5pdF9jb25mLnRjX2NzdCwKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCmluZGV4IDAxYzRmY2YuLmRlNWY2ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUwpAQCAtNDE3LDYgKzQxNyw4IEBACiAJRU5UUllfQ09NUChwd3JpdGV2KQogCUVOVFJZX0NPTVAocnRfdGdzaWdxdWV1ZWluZm8pCiAJRU5UUllfU0FNRShwZXJmX2V2ZW50X29wZW4pCisJRU5UUllfQ09NUChyZWN2bW1zZykKKwlFTlRSWV9TQU1FKGFjY2VwdDQpCQkvKiAzMjAgKi8KIAogCS8qIE5vdGhpbmcgeWV0ICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdGltZS5jCmluZGV4IGE3OWM2ZjkuLjA1NTExY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3RpbWUuYwpAQCAtMjUwLDkgKzI1MCwyMSBAQAogfQogbW9kdWxlX2luaXQocnRjX2luaXQpOwogCi12b2lkIF9faW5pdCB0aW1lX2luaXQodm9pZCkKK3ZvaWQgcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKHN0cnVjdCB0aW1lc3BlYyAqdHMpCiB7CiAJc3RhdGljIHN0cnVjdCBwZGNfdG9kIHRvZF9kYXRhOworCWlmIChwZGNfdG9kX3JlYWQoJnRvZF9kYXRhKSA9PSAwKSB7CisJCXRzLT50dl9zZWMgPSB0b2RfZGF0YS50b2Rfc2VjOworCQl0cy0+dHZfbnNlYyA9IHRvZF9kYXRhLnRvZF91c2VjICogMTAwMDsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHJlYWRpbmcgdG9kIGNsb2NrXG4iKTsKKwkgICAgICAgIHRzLT50dl9zZWMgPSAwOworCQl0cy0+dHZfbnNlYyA9IDA7CisJfQorfQorCit2b2lkIF9faW5pdCB0aW1lX2luaXQodm9pZCkKK3sKIAl1bnNpZ25lZCBsb25nIGN1cnJlbnRfY3IxNl9raHo7CiAKIAljbG9ja3RpY2sgPSAoMTAwICogUEFHRTAtPm1lbV8xMG1zZWMpIC8gSFo7CkBAIC0yNjQsMTkgKzI3Niw0IEBACiAJY2xvY2tzb3VyY2VfY3IxNi5tdWx0ID0gY2xvY2tzb3VyY2Vfa2h6Mm11bHQoY3VycmVudF9jcjE2X2toeiwKIAkJCQkJCWNsb2Nrc291cmNlX2NyMTYuc2hpZnQpOwogCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9jcjE2KTsKLQotCWlmIChwZGNfdG9kX3JlYWQoJnRvZF9kYXRhKSA9PSAwKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7Ci0JCXh0aW1lLnR2X3NlYyA9IHRvZF9kYXRhLnRvZF9zZWM7Ci0JCXh0aW1lLnR2X25zZWMgPSB0b2RfZGF0YS50b2RfdXNlYyAqIDEwMDA7Ci0JCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywKLQkJICAgICAgICAgICAgICAgICAgICAgICAgLXh0aW1lLnR2X3NlYywgLXh0aW1lLnR2X25zZWMpOwotCQl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgcmVhZGluZyB0b2QgY2xvY2tcbiIpOwotCSAgICAgICAgeHRpbWUudHZfc2VjID0gMDsKLQkJeHRpbWUudHZfbnNlYyA9IDA7Ci0JfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3VuYWxpZ25lZC5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3VuYWxpZ25lZC5jCmluZGV4IGU2ZjRiN2EuLjkyZDk3N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC91bmFsaWduZWQuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdW5hbGlnbmVkLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhdGVsaW1pdC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKIC8qICNkZWZpbmUgREVCVUdfVU5BTElHTkVEIDEgKi8KQEAgLTQ0Niw4ICs0NDcsNyBAQAogCiB2b2lkIGhhbmRsZV91bmFsaWduZWQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RhdGljIHVuc2lnbmVkIGxvbmcgdW5hbGlnbmVkX2NvdW50ID0gMDsKLQlzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X3RpbWUgPSAwOworCXN0YXRpYyBERUZJTkVfUkFURUxJTUlUX1NUQVRFKHJhdGVsaW1pdCwgNSAqIEhaLCA1KTsKIAl1bnNpZ25lZCBsb25nIG5ld2Jhc2UgPSBSMShyZWdzLT5paXIpP3JlZ3MtPmdyW1IxKHJlZ3MtPmlpcildOjA7CiAJaW50IG1vZGlmeSA9IDA7CiAJaW50IHJldCA9IEVSUl9OT1RIQU5ETEVEOwpAQCAtNDYwLDE0ICs0NjAsOCBAQAogCQkJZ290byBmb3JjZV9zaWdidXM7CiAJCX0KIAotCQlpZiAodW5hbGlnbmVkX2NvdW50ID4gNSAmJgotCQkJCXRpbWVfYWZ0ZXIoamlmZmllcywgbGFzdF90aW1lICsgNSAqIEhaKSkgewotCQkJdW5hbGlnbmVkX2NvdW50ID0gMDsKLQkJCWxhc3RfdGltZSA9IGppZmZpZXM7Ci0JCX0KLQotCQlpZiAoIShjdXJyZW50LT50aHJlYWQuZmxhZ3MgJiBQQVJJU0NfVUFDX05PUFJJTlQpIAotCQkgICAgJiYgKyt1bmFsaWduZWRfY291bnQgPCA1KSB7CisJCWlmICghKGN1cnJlbnQtPnRocmVhZC5mbGFncyAmIFBBUklTQ19VQUNfTk9QUklOVCkgJiYKKwkJCV9fcmF0ZWxpbWl0KCZyYXRlbGltaXQpKSB7CiAJCQljaGFyIGJ1ZlsyNTZdOwogCQkJc3ByaW50ZihidWYsICIlcyglZCk6IHVuYWxpZ25lZCBhY2Nlc3MgdG8gMHgiIFJGTVQgIiBhdCBpcD0weCIgUkZNVCAiXG4iLAogCQkJCWN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCByZWdzLT5pb3IsIHJlZ3MtPmlhb3FbMF0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvbGliL21lbWNweS5jIGIvYXJjaC9wYXJpc2MvbGliL21lbWNweS5jCmluZGV4IGFiZjQxZjQuLjFkYmNhNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2xpYi9tZW1jcHkuYworKysgYi9hcmNoL3BhcmlzYy9saWIvbWVtY3B5LmMKQEAgLTQ3NSw3ICs0NzUsOCBAQAogCXJldHVybiBwYV9tZW1jcHkoKHZvaWQgX19mb3JjZSAqKWRzdCwgc3JjLCBsZW4pOwogfQogCi11bnNpZ25lZCBsb25nIGNvcHlfZnJvbV91c2VyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgdW5zaWduZWQgbG9uZyBsZW4pCitFWFBPUlRfU1lNQk9MKF9fY29weV9mcm9tX3VzZXIpOwordW5zaWduZWQgbG9uZyBfX2NvcHlfZnJvbV91c2VyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgdW5zaWduZWQgbG9uZyBsZW4pCiB7CiAJbXRzcChnZXRfdXNlcl9zcGFjZSgpLCAxKTsKIAltdHNwKGdldF9rZXJuZWxfc3BhY2UoKSwgMik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwppbmRleCBiMDM3ZDk1Li42NGMwMDIyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKQEAgLTQ1MSw3ICs0NTEsNyBAQAogCW5pZCA9IG9mX25vZGVfdG9fbmlkX3NpbmdsZShjcHUpOwogCiAJaWYgKG5pZCA8IDAgfHwgIW5vZGVfb25saW5lKG5pZCkpCi0JCW5pZCA9IGFueV9vbmxpbmVfbm9kZShOT0RFX01BU0tfQUxMKTsKKwkJbmlkID0gZmlyc3Rfb25saW5lX25vZGU7CiBvdXQ6CiAJbWFwX2NwdV90b19ub2RlKGxjcHUsIG5pZCk7CiAKQEAgLTExMTQsNyArMTExNCw3IEBACiAJaW50IG5pZCwgZm91bmQgPSAwOwogCiAJaWYgKCFudW1hX2VuYWJsZWQgfHwgKG1pbl9jb21tb25fZGVwdGggPCAwKSkKLQkJcmV0dXJuIGFueV9vbmxpbmVfbm9kZShOT0RFX01BU0tfQUxMKTsKKwkJcmV0dXJuIGZpcnN0X29ubGluZV9ub2RlOwogCiAJbWVtb3J5ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9pYm0sZHluYW1pYy1yZWNvbmZpZ3VyYXRpb24tbWVtb3J5Iik7CiAJaWYgKG1lbW9yeSkgewpAQCAtMTEyNSw3ICsxMTI1LDcgQEAKIAl9CiAKIAlpZiAobmlkIDwgMCB8fCAhbm9kZV9vbmxpbmUobmlkKSkKLQkJbmlkID0gYW55X29ubGluZV9ub2RlKE5PREVfTUFTS19BTEwpOworCQluaWQgPSBmaXJzdF9vbmxpbmVfbm9kZTsKIAogCWlmIChOT0RFX0RBVEEobmlkKS0+bm9kZV9zcGFubmVkX3BhZ2VzKQogCQlyZXR1cm4gbmlkOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmgKaW5kZXggYzY2NmJmZS4uOWIwNGIxMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcWRpby5oCkBAIC0zMjEsMTEgKzMyMSw2IEBACiAjZGVmaW5lIFFESU9fRVJST1JfQUNUSVZBVEVfQ0hFQ0tfQ09ORElUSU9OCTB4NDAKICNkZWZpbmUgUURJT19FUlJPUl9TTFNCX1NUQVRFCQkJMHg4MAogCi0vKiBmb3IgcWRpb19pbml0aWFsaXplICovCi0jZGVmaW5lIFFESU9fSU5CT1VORF8wQ09QWV9TQkFMUwkJMHgwMQotI2RlZmluZSBRRElPX09VVEJPVU5EXzBDT1BZX1NCQUxTCQkweDAyCi0jZGVmaW5lIFFESU9fVVNFX09VVEJPVU5EX1BDSVMJCQkweDA0Ci0KIC8qIGZvciBxZGlvX2NsZWFudXAgKi8KICNkZWZpbmUgUURJT19GTEFHX0NMRUFOVVBfVVNJTkdfQ0xFQVIJCTB4MDEKICNkZWZpbmUgUURJT19GTEFHX0NMRUFOVVBfVVNJTkdfSEFMVAkJMHgwMgpAQCAtMzQ0LDcgKzMzOSw2IEBACiAgKiBAaW5wdXRfaGFuZGxlcjogaGFuZGxlciB0byBiZSBjYWxsZWQgZm9yIGlucHV0IHF1ZXVlcwogICogQG91dHB1dF9oYW5kbGVyOiBoYW5kbGVyIHRvIGJlIGNhbGxlZCBmb3Igb3V0cHV0IHF1ZXVlcwogICogQGludF9wYXJtOiBpbnRlcnJ1cHRpb24gcGFyYW1ldGVyCi0gKiBAZmxhZ3M6IGluaXRpYWxpemF0aW9uIGZsYWdzCiAgKiBAaW5wdXRfc2JhbF9hZGRyX2FycmF5OiAgYWRkcmVzcyBvZiBub19pbnB1dF9xcyAqIDEyOCBwb2ludGVycwogICogQG91dHB1dF9zYmFsX2FkZHJfYXJyYXk6IGFkZHJlc3Mgb2Ygbm9fb3V0cHV0X3FzICogMTI4IHBvaW50ZXJzCiAgKi8KQEAgLTM2MSw3ICszNTUsNiBAQAogCXFkaW9faGFuZGxlcl90ICppbnB1dF9oYW5kbGVyOwogCXFkaW9faGFuZGxlcl90ICpvdXRwdXRfaGFuZGxlcjsKIAl1bnNpZ25lZCBsb25nIGludF9wYXJtOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdm9pZCAqKmlucHV0X3NiYWxfYWRkcl9hcnJheTsKIAl2b2lkICoqb3V0cHV0X3NiYWxfYWRkcl9hcnJheTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RpbWUuYyBiL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCmluZGV4IGE4ZjkzZjEuLjhiMjJlN2YzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3RpbWUuYwpAQCAtNzMsMTUgKzczLDE1IEBACiB9CiBFWFBPUlRfU1lNQk9MKG1vbm90b25pY19jbG9jayk7CiAKLXZvaWQgdG9kX3RvX3RpbWV2YWwoX191NjQgdG9kdmFsLCBzdHJ1Y3QgdGltZXNwZWMgKnh0aW1lKQordm9pZCB0b2RfdG9fdGltZXZhbChfX3U2NCB0b2R2YWwsIHN0cnVjdCB0aW1lc3BlYyAqeHQpCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIHNlYzsKIAogCXNlYyA9IHRvZHZhbCA+PiAxMjsKIAlkb19kaXYoc2VjLCAxMDAwMDAwKTsKLQl4dGltZS0+dHZfc2VjID0gc2VjOworCXh0LT50dl9zZWMgPSBzZWM7CiAJdG9kdmFsIC09IChzZWMgKiAxMDAwMDAwKSA8PCAxMjsKLQl4dGltZS0+dHZfbnNlYyA9ICgodG9kdmFsICogMTAwMCkgPj4gMTIpOworCXh0LT50dl9uc2VjID0gKCh0b2R2YWwgKiAxMDAwKSA+PiAxMik7CiB9CiBFWFBPUlRfU1lNQk9MKHRvZF90b190aW1ldmFsKTsKIApAQCAtMjE2LDggKzIxNiw4IEBACiAJKyt2ZHNvX2RhdGEtPnRiX3VwZGF0ZV9jb3VudDsKIAlzbXBfd21iKCk7CiAJdmRzb19kYXRhLT54dGltZV90b2Rfc3RhbXAgPSBjbG9jay0+Y3ljbGVfbGFzdDsKLQl2ZHNvX2RhdGEtPnh0aW1lX2Nsb2NrX3NlYyA9IHh0aW1lLnR2X3NlYzsKLQl2ZHNvX2RhdGEtPnh0aW1lX2Nsb2NrX25zZWMgPSB4dGltZS50dl9uc2VjOworCXZkc29fZGF0YS0+eHRpbWVfY2xvY2tfc2VjID0gd2FsbF90aW1lLT50dl9zZWM7CisJdmRzb19kYXRhLT54dGltZV9jbG9ja19uc2VjID0gd2FsbF90aW1lLT50dl9uc2VjOwogCXZkc29fZGF0YS0+d3RvbV9jbG9ja19zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9zZWM7CiAJdmRzb19kYXRhLT53dG9tX2Nsb2NrX25zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9uc2VjOwogCXNtcF93bWIoKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvTWFrZWZpbGUgYi9hcmNoL3MzOTAvbGliL01ha2VmaWxlCmluZGV4IGNkNTRhMWMuLjc2MWFiOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9zMzkwL2xpYi9NYWtlZmlsZQpAQCAtMiw3ICsyLDggQEAKICMgTWFrZWZpbGUgZm9yIHMzOTAtc3BlY2lmaWMgbGlicmFyeSBmaWxlcy4uCiAjCiAKLWxpYi15ICs9IGRlbGF5Lm8gc3RyaW5nLm8gdWFjY2Vzc19zdGQubyB1YWNjZXNzX3B0Lm8gdXNlcmNvcHkubworbGliLXkgKz0gZGVsYXkubyBzdHJpbmcubyB1YWNjZXNzX3N0ZC5vIHVhY2Nlc3NfcHQubworb2JqLXkgKz0gdXNlcmNvcHkubwogb2JqLSQoQ09ORklHXzMyQklUKSArPSBkaXY2NC5vIHFybm5kLm8gdWNtcGRpMi5vCiBsaWItJChDT05GSUdfNjRCSVQpICs9IHVhY2Nlc3NfbXZjb3MubwogbGliLSQoQ09ORklHX1NNUCkgKz0gc3BpbmxvY2subwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2NtbS5jIGIvYXJjaC9zMzkwL21tL2NtbS5jCmluZGV4IDc2YTM2MzcuLmYxNmJkMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9jbW0uYworKysgYi9hcmNoL3MzOTAvbW0vY21tLmMKQEAgLTM3NCw3ICszNzQsNyBAQAogI2lmZGVmIENPTkZJR19DTU1fSVVDVgogI2RlZmluZSBTTVNHX1BSRUZJWCAiQ01NIgogc3RhdGljIHZvaWQKLWNtbV9zbXNnX3RhcmdldChjaGFyICpmcm9tLCBjaGFyICptc2cpCitjbW1fc21zZ190YXJnZXQoY29uc3QgY2hhciAqZnJvbSwgY2hhciAqbXNnKQogewogCWxvbmcgbnIsIHNlY29uZHM7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYwppbmRleCBiZTMwMGFhLi43ZGEwZmM5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCkBAIC00MTksNiArNDE5LDkgQEAKIAkJSTJDX0JPQVJEX0lORk8oIm1pZ29yX3RzIiwgMHg1MSksCiAJCS5pcnEgPSAzOCwgLyogSVJRNiAqLwogCX0sCisJeworCQlJMkNfQk9BUkRfSU5GTygid204OTc4IiwgMHgxYSksCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gbWlnb3JfaTJjX2NhbWVyYVtdID0gewpAQCAtNjE5LDYgKzYyMiwxOSBAQAogCiAJcGxhdGZvcm1fcmVzb3VyY2Vfc2V0dXBfbWVtb3J5KCZtaWdvcl9jZXVfZGV2aWNlLCAiY2V1IiwgNCA8PCAyMCk7CiAKKwkvKiBTSVU6IFBvcnQgQiAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NJVUJPTFIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NJVUJPQlQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NJVUJJU0xELCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TSVVCT1NMRCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0lVTUNLQiwgTlVMTCk7CisKKwkvKgorCSAqIFRoZSBvcmlnaW5hbCBkcml2ZXIgc2V0cyBTSVVCIE9MUi9PQlQsIElMUi9JQlQsIGFuZCBTSVVBIE9MUi9PQlQgdG8KKwkgKiBvdXRwdXQuIE5lZWQgb25seSBTSVVCLCBzZXQgdG8gb3V0cHV0IGZvciBtYXN0ZXIgbW9kZSAodGFibGUgMzQuMikKKwkgKi8KKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoUE9SVF9NU0VMQ1JBKSB8IDEsIFBPUlRfTVNFTENSQSk7CisKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBtaWdvcl9pMmNfZGV2aWNlcywKIAkJCQlBUlJBWV9TSVpFKG1pZ29yX2kyY19kZXZpY2VzKSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL2NhY2hlLmMgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9jYWNoZS5jCmluZGV4IGUyN2ZjNzQuLmQwYjc3YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL2NhY2hlLmMKKysrIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvY2FjaGUuYwpAQCAtNSw3ICs1LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCAoMzIgKiAxMDI0KTsgaSArPSAzMikgewogCQkodm9pZCkqcDsKLQkJcCArPSAoMzIgLyBzaXplb2YgKGludCkpOworCQlwICs9ICgzMiAvIHNpemVvZihpbnQpKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggZGEzZWJlYy4uMWY0ZTU2MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTg2LDggKzg2LDggQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkciwgdm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsCiAJdW5zaWduZWQgbG9uZyBsZW4pOwogCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWZsdXNoX2NhY2hlX2FsbCgpCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJZmx1c2hfY2FjaGVfYWxsKCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJbG9jYWxfZmx1c2hfY2FjaGVfYWxsKE5VTEwpCisjZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJbG9jYWxfZmx1c2hfY2FjaGVfYWxsKE5VTEwpCiAKICNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykJZG8geyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtcmVnaXN0ZXIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLXJlZ2lzdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFjZDc4ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLXJlZ2lzdGVyLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvbW1vbiBoZWFkZXIgZm9yIHRoZSBsZWdhY3kgU0ggRE1BIGRyaXZlciBhbmQgdGhlIG5ldyBkbWFlbmdpbmUgZHJpdmVyCisgKgorICogZXh0cmFjdGVkIGZyb20gYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtc2guaDoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgIFRha2FzaGkgWU9TSElJCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBETUFfUkVHSVNURVJfSAorI2RlZmluZSBETUFfUkVHSVNURVJfSAorCisvKiBETUEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0FSCTB4MDAKKyNkZWZpbmUgREFSCTB4MDQKKyNkZWZpbmUgVENSCTB4MDgKKyNkZWZpbmUgQ0hDUgkweDBDCisjZGVmaW5lIERNQU9SCTB4NDAKKworLyogRE1BT1IgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRE1BT1JfQUUJMHgwMDAwMDAwNAorI2RlZmluZSBETUFPUl9OTUlGCTB4MDAwMDAwMDIKKyNkZWZpbmUgRE1BT1JfRE1FCTB4MDAwMDAwMDEKKworLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBTdXBlckggRE1BQyAqLworI2RlZmluZSBSRVFfTAkweDAwMDAwMDAwCisjZGVmaW5lIFJFUV9FCTB4MDAwODAwMDAKKyNkZWZpbmUgUkFDS19ICTB4MDAwMDAwMDAKKyNkZWZpbmUgUkFDS19MCTB4MDAwNDAwMDAKKyNkZWZpbmUgQUNLX1IJMHgwMDAwMDAwMAorI2RlZmluZSBBQ0tfVwkweDAwMDIwMDAwCisjZGVmaW5lIEFDS19ICTB4MDAwMDAwMDAKKyNkZWZpbmUgQUNLX0wJMHgwMDAxMDAwMAorI2RlZmluZSBETV9JTkMJMHgwMDAwNDAwMAorI2RlZmluZSBETV9ERUMJMHgwMDAwODAwMAorI2RlZmluZSBETV9GSVgJMHgwMDAwYzAwMAorI2RlZmluZSBTTV9JTkMJMHgwMDAwMTAwMAorI2RlZmluZSBTTV9ERUMJMHgwMDAwMjAwMAorI2RlZmluZSBTTV9GSVgJMHgwMDAwMzAwMAorI2RlZmluZSBSU19JTgkweDAwMDAwMjAwCisjZGVmaW5lIFJTX09VVAkweDAwMDAwMzAwCisjZGVmaW5lIFRTX0JMSwkweDAwMDAwMDQwCisjZGVmaW5lIFRNX0JVUgkweDAwMDAwMDIwCisjZGVmaW5lIENIQ1JfREUJMHgwMDAwMDAwMQorI2RlZmluZSBDSENSX1RFCTB4MDAwMDAwMDIKKyNkZWZpbmUgQ0hDUl9JRQkweDAwMDAwMDA0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtc2guaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLXNoLmgKaW5kZXggZTkzNGEyZS4uZjNhY2I4ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtc2guaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1zaC5oCkBAIC0xMSw3ICsxMSw4IEBACiAjaWZuZGVmIF9fRE1BX1NIX0gKICNkZWZpbmUgX19ETUFfU0hfSAogCi0jaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9kbWEtcmVnaXN0ZXIuaD4KKyNpbmNsdWRlIDxjcHUvZG1hLXJlZ2lzdGVyLmg+CiAjaW5jbHVkZSA8Y3B1L2RtYS5oPgogCiAvKiBETUFPUiBjb250b3JsOiBUaGUgRE1BT1IgYWNjZXNzIHNpemUgaXMgZGlmZmVyZW50IGJ5IENQVS4qLwpAQCAtNTMsMzQgKzU0LDYgQEAKICNlbmRpZgogfTsKIAotLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBTdXBlckggRE1BQyAqLwotI2RlZmluZSBSRVFfTAkweDAwMDAwMDAwCi0jZGVmaW5lIFJFUV9FCTB4MDAwODAwMDAKLSNkZWZpbmUgUkFDS19ICTB4MDAwMDAwMDAKLSNkZWZpbmUgUkFDS19MCTB4MDAwNDAwMDAKLSNkZWZpbmUgQUNLX1IJMHgwMDAwMDAwMAotI2RlZmluZSBBQ0tfVwkweDAwMDIwMDAwCi0jZGVmaW5lIEFDS19ICTB4MDAwMDAwMDAKLSNkZWZpbmUgQUNLX0wJMHgwMDAxMDAwMAotI2RlZmluZSBETV9JTkMJMHgwMDAwNDAwMAotI2RlZmluZSBETV9ERUMJMHgwMDAwODAwMAotI2RlZmluZSBETV9GSVgJMHgwMDAwYzAwMAotI2RlZmluZSBTTV9JTkMJMHgwMDAwMTAwMAotI2RlZmluZSBTTV9ERUMJMHgwMDAwMjAwMAotI2RlZmluZSBTTV9GSVgJMHgwMDAwMzAwMAotI2RlZmluZSBSU19JTgkweDAwMDAwMjAwCi0jZGVmaW5lIFJTX09VVAkweDAwMDAwMzAwCi0jZGVmaW5lIFRTX0JMSwkweDAwMDAwMDQwCi0jZGVmaW5lIFRNX0JVUgkweDAwMDAwMDIwCi0jZGVmaW5lIENIQ1JfREUgMHgwMDAwMDAwMQotI2RlZmluZSBDSENSX1RFIDB4MDAwMDAwMDIKLSNkZWZpbmUgQ0hDUl9JRSAweDAwMDAwMDA0Ci0KLS8qIERNQU9SIGRlZmluaXRpb25zICovCi0jZGVmaW5lIERNQU9SX0FFCTB4MDAwMDAwMDQKLSNkZWZpbmUgRE1BT1JfTk1JRgkweDAwMDAwMDAyCi0jZGVmaW5lIERNQU9SX0RNRQkweDAwMDAwMDAxCi0KIC8qCiAgKiBEZWZpbmUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgZHVhbCBhZGRyZXNzIG1lbW9yeS1tZW1vcnkgdHJhbnNmZXIuCiAgKiBUaGUgMHg0MDAgdmFsdWUgcmVwcmVzZW50cyBhdXRvLXJlcXVlc3QsIGV4dGVybmFsLT5leHRlcm5hbC4KQEAgLTExMSw2MSArODQsNCBAQAogI2VuZGlmCiB9OwogCi0vKiBETUEgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgU0FSICAgICAweDAwCi0jZGVmaW5lIERBUiAgICAgMHgwNAotI2RlZmluZSBUQ1IgICAgIDB4MDgKLSNkZWZpbmUgQ0hDUiAgICAweDBDCi0jZGVmaW5lIERNQU9SCTB4NDAKLQotLyoKLSAqIGZvciBkbWEgZW5naW5lCi0gKgotICogU3VwZXJIIERNQSBtb2RlCi0gKi8KLSNkZWZpbmUgU0hETUFfTUlYX0lSUQkoMSA8PCAxKQotI2RlZmluZSBTSERNQV9ETUFPUjEJKDEgPDwgMikKLSNkZWZpbmUgU0hETUFfRE1BRTEJKDEgPDwgMykKLQotZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQgewotCVNIRE1BX1NMQVZFX1NDSUYwX1RYLAotCVNIRE1BX1NMQVZFX1NDSUYwX1JYLAotCVNIRE1BX1NMQVZFX1NDSUYxX1RYLAotCVNIRE1BX1NMQVZFX1NDSUYxX1JYLAotCVNIRE1BX1NMQVZFX1NDSUYyX1RYLAotCVNIRE1BX1NMQVZFX1NDSUYyX1JYLAotCVNIRE1BX1NMQVZFX1NDSUYzX1RYLAotCVNIRE1BX1NMQVZFX1NDSUYzX1JYLAotCVNIRE1BX1NMQVZFX1NDSUY0X1RYLAotCVNIRE1BX1NMQVZFX1NDSUY0X1JYLAotCVNIRE1BX1NMQVZFX1NDSUY1X1RYLAotCVNIRE1BX1NMQVZFX1NDSUY1X1JYLAotCVNIRE1BX1NMQVZFX1NJVUFfVFgsCi0JU0hETUFfU0xBVkVfU0lVQV9SWCwKLQlTSERNQV9TTEFWRV9TSVVCX1RYLAotCVNIRE1BX1NMQVZFX1NJVUJfUlgsCi0JU0hETUFfU0xBVkVfTlVNQkVSLAkvKiBNdXN0IHN0YXkgbGFzdCAqLwotfTsKLQotc3RydWN0IHNoX2RtYWVfc2xhdmVfY29uZmlnIHsKLQllbnVtIHNoX2RtYWVfc2xhdmVfY2hhbl9pZAlzbGF2ZV9pZDsKLQlkbWFfYWRkcl90CQkJYWRkcjsKLQl1MzIJCQkJY2hjcjsKLQljaGFyCQkJCW1pZF9yaWQ7Ci19OwotCi1zdHJ1Y3Qgc2hfZG1hZV9wZGF0YSB7Ci0JdW5zaWduZWQgaW50IG1vZGU7Ci0Jc3RydWN0IHNoX2RtYWVfc2xhdmVfY29uZmlnICpjb25maWc7Ci0JaW50IGNvbmZpZ19udW07Ci19OwotCi1zdHJ1Y3QgZGV2aWNlOwotCi1zdHJ1Y3Qgc2hfZG1hZV9zbGF2ZSB7Ci0JZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQJc2xhdmVfaWQ7IC8qIFNldCBieSB0aGUgcGxhdGZvcm0gKi8KLQlzdHJ1Y3QgZGV2aWNlCQkJKmRtYV9kZXY7IC8qIFNldCBieSB0aGUgcGxhdGZvcm0gKi8KLQlzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZV9jb25maWcJKmNvbmZpZzsgIC8qIFNldCBieSB0aGUgZHJpdmVyICovCi19OwotCiAjZW5kaWYgLyogX19ETUFfU0hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWFlbmdpbmUuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hZW5naW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYyZjMwY2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYWVuZ2luZS5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBIZWFkZXIgZm9yIHRoZSBuZXcgU0ggZG1hZW5naW5lIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHdWVubmFkaSBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIEFTTV9ETUFFTkdJTkVfSAorI2RlZmluZSBBU01fRE1BRU5HSU5FX0gKKworI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworI2luY2x1ZGUgPGFzbS9kbWEtcmVnaXN0ZXIuaD4KKworI2RlZmluZSBTSF9ETUFDX01BWF9DSEFOTkVMUwk2CisKK2VudW0gc2hfZG1hZV9zbGF2ZV9jaGFuX2lkIHsKKwlTSERNQV9TTEFWRV9TQ0lGMF9UWCwKKwlTSERNQV9TTEFWRV9TQ0lGMF9SWCwKKwlTSERNQV9TTEFWRV9TQ0lGMV9UWCwKKwlTSERNQV9TTEFWRV9TQ0lGMV9SWCwKKwlTSERNQV9TTEFWRV9TQ0lGMl9UWCwKKwlTSERNQV9TTEFWRV9TQ0lGMl9SWCwKKwlTSERNQV9TTEFWRV9TQ0lGM19UWCwKKwlTSERNQV9TTEFWRV9TQ0lGM19SWCwKKwlTSERNQV9TTEFWRV9TQ0lGNF9UWCwKKwlTSERNQV9TTEFWRV9TQ0lGNF9SWCwKKwlTSERNQV9TTEFWRV9TQ0lGNV9UWCwKKwlTSERNQV9TTEFWRV9TQ0lGNV9SWCwKKwlTSERNQV9TTEFWRV9TSVVBX1RYLAorCVNIRE1BX1NMQVZFX1NJVUFfUlgsCisJU0hETUFfU0xBVkVfU0lVQl9UWCwKKwlTSERNQV9TTEFWRV9TSVVCX1JYLAorCVNIRE1BX1NMQVZFX05VTUJFUiwJLyogTXVzdCBzdGF5IGxhc3QgKi8KK307CisKK3N0cnVjdCBzaF9kbWFlX3NsYXZlX2NvbmZpZyB7CisJZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQJc2xhdmVfaWQ7CisJZG1hX2FkZHJfdAkJCWFkZHI7CisJdTMyCQkJCWNoY3I7CisJY2hhcgkJCQltaWRfcmlkOworfTsKKworc3RydWN0IHNoX2RtYWVfY2hhbm5lbCB7CisJdW5zaWduZWQgaW50CW9mZnNldDsKKwl1bnNpZ25lZCBpbnQJZG1hcnM7CisJdW5zaWduZWQgaW50CWRtYXJzX2JpdDsKK307CisKK3N0cnVjdCBzaF9kbWFlX3BkYXRhIHsKKwlzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZV9jb25maWcgKnNsYXZlOworCWludCBzbGF2ZV9udW07CisJc3RydWN0IHNoX2RtYWVfY2hhbm5lbCAqY2hhbm5lbDsKKwlpbnQgY2hhbm5lbF9udW07CisJdW5zaWduZWQgaW50IHRzX2xvd19zaGlmdDsKKwl1bnNpZ25lZCBpbnQgdHNfbG93X21hc2s7CisJdW5zaWduZWQgaW50IHRzX2hpZ2hfc2hpZnQ7CisJdW5zaWduZWQgaW50IHRzX2hpZ2hfbWFzazsKKwl1bnNpZ25lZCBpbnQgKnRzX3NoaWZ0OworCWludCB0c19zaGlmdF9udW07CisJdTE2IGRtYW9yX2luaXQ7Cit9OworCitzdHJ1Y3QgZGV2aWNlOworCisvKiBVc2VkIGJ5IHNsYXZlIERNQSBjbGllbnRzIHRvIHJlcXVlc3QgRE1BIHRvL2Zyb20gYSBzcGVjaWZpYyBwZXJpcGhlcmFsICovCitzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZSB7CisJZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQJc2xhdmVfaWQ7IC8qIFNldCBieSB0aGUgcGxhdGZvcm0gKi8KKwlzdHJ1Y3QgZGV2aWNlCQkJKmRtYV9kZXY7IC8qIFNldCBieSB0aGUgcGxhdGZvcm0gKi8KKwlzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZV9jb25maWcJKmNvbmZpZzsgIC8qIFNldCBieSB0aGUgZHJpdmVyICovCit9OworCitzdHJ1Y3Qgc2hfZG1hZV9yZWdzIHsKKwl1MzIgc2FyOyAvKiBTQVIgLyBzb3VyY2UgYWRkcmVzcyAqLworCXUzMiBkYXI7IC8qIERBUiAvIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KKwl1MzIgdGNyOyAvKiBUQ1IgLyB0cmFuc2ZlciBjb3VudCAqLworfTsKKworc3RydWN0IHNoX2Rlc2MgeworCXN0cnVjdCBzaF9kbWFlX3JlZ3MgaHc7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciBhc3luY190eDsKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb247CisJZG1hX2Nvb2tpZV90IGNvb2tpZTsKKwlzaXplX3QgcGFydGlhbDsKKwlpbnQgY2h1bmtzOworCWludCBtYXJrOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggN2RhYjdiMjMuLmY2ODk1NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTI5MSwyMSArMjkxLDIxIEBACiAgKiBkb2Vzbid0IGV4aXN0LCBzbyBldmVyeXRoaW5nIG11c3QgZ28gdGhyb3VnaCBwYWdlIHRhYmxlcy4KICAqLwogI2lmZGVmIENPTkZJR19NTVUKLXZvaWQgX19pb21lbSAqX19pb3JlbWFwX2NhbGxlcih1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAordm9pZCBfX2lvbWVtICpfX2lvcmVtYXBfY2FsbGVyKHBoeXNfYWRkcl90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJICAgICAgIHBncHJvdF90IHByb3QsIHZvaWQgKmNhbGxlcik7CiB2b2lkIF9faW91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCi1fX2lvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCkKK19faW9yZW1hcChwaHlzX2FkZHJfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCkKIHsKIAlyZXR1cm4gX19pb3JlbWFwX2NhbGxlcihvZmZzZXQsIHNpemUsIHByb3QsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICoKLV9faW9yZW1hcF8yOWJpdCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQorX19pb3JlbWFwXzI5Yml0KHBoeXNfYWRkcl90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQogewogI2lmZGVmIENPTkZJR18yOUJJVAotCXVuc2lnbmVkIGxvbmcgbGFzdF9hZGRyID0gb2Zmc2V0ICsgc2l6ZSAtIDE7CisJcGh5c19hZGRyX3QgbGFzdF9hZGRyID0gb2Zmc2V0ICsgc2l6ZSAtIDE7CiAKIAkvKgogCSAqIEZvciBQMSBhbmQgUDIgc3BhY2UgdGhpcyBpcyB0cml2aWFsLCBhcyBldmVyeXRoaW5nIGlzIGFscmVhZHkKQEAgLTMyOSw3ICszMjksNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCi1fX2lvcmVtYXBfbW9kZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQorX19pb3JlbWFwX21vZGUocGh5c19hZGRyX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpCiB7CiAJdm9pZCBfX2lvbWVtICpyZXQ7CiAKQEAgLTM0OSwzNSArMzQ5LDMyIEBACiAjZGVmaW5lIF9faW91bm1hcChhZGRyKQkJCQlkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYgLyogQ09ORklHX01NVSAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCi1pb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqaW9yZW1hcChwaHlzX2FkZHJfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlyZXR1cm4gX19pb3JlbWFwX21vZGUob2Zmc2V0LCBzaXplLCBQQUdFX0tFUk5FTF9OT0NBQ0hFKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKgotaW9yZW1hcF9jYWNoZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQoraW9yZW1hcF9jYWNoZShwaHlzX2FkZHJfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlyZXR1cm4gX19pb3JlbWFwX21vZGUob2Zmc2V0LCBzaXplLCBQQUdFX0tFUk5FTCk7CiB9CiAKICNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICoKLWlvcmVtYXBfcHJvdChyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCitpb3JlbWFwX3Byb3QocGh5c19hZGRyX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJcmV0dXJuIF9faW9yZW1hcF9tb2RlKG9mZnNldCwgc2l6ZSwgX19wZ3Byb3QoZmxhZ3MpKTsKIH0KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0lPUkVNQVBfRklYRUQKLWV4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfZml4ZWQocmVzb3VyY2Vfc2l6ZV90LCB1bnNpZ25lZCBsb25nLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcsIHBncHJvdF90KTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfZml4ZWQocGh5c19hZGRyX3QsIHVuc2lnbmVkIGxvbmcsIHBncHJvdF90KTsKIGV4dGVybiBpbnQgaW91bm1hcF9maXhlZCh2b2lkIF9faW9tZW0gKik7CiBleHRlcm4gdm9pZCBpb3JlbWFwX2ZpeGVkX2luaXQodm9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKgotaW9yZW1hcF9maXhlZChyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpCitpb3JlbWFwX2ZpeGVkKHBoeXNfYWRkcl90IHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQogewogCUJVRygpOwogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXUuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11LmgKaW5kZXggMTVhMDViNi4uMTlmZTg0NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXUuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdS5oCkBAIC01NSwxOSArNTUsMjkgQEAKIAogI2lmZGVmIENPTkZJR19QTUIKIC8qIGFyY2gvc2gvbW0vcG1iLmMgKi8KLWxvbmcgcG1iX3JlbWFwKHVuc2lnbmVkIGxvbmcgdmlydCwgdW5zaWduZWQgbG9uZyBwaHlzLAotCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpOwotdm9pZCBwbWJfdW5tYXAodW5zaWduZWQgbG9uZyBhZGRyKTsKLXZvaWQgcG1iX2luaXQodm9pZCk7CiBib29sIF9faW5fMjliaXRfbW9kZSh2b2lkKTsKKwordm9pZCBwbWJfaW5pdCh2b2lkKTsKK2ludCBwbWJfYm9sdF9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgdmlydCwgcGh5c19hZGRyX3QgcGh5cywKKwkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpOwordm9pZCBfX2lvbWVtICpwbWJfcmVtYXBfY2FsbGVyKHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSAgICAgICBwZ3Byb3RfdCBwcm90LCB2b2lkICpjYWxsZXIpOworaW50IHBtYl91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpOworCiAjZWxzZQotc3RhdGljIGlubGluZSBsb25nIHBtYl9yZW1hcCh1bnNpZ25lZCBsb25nIHZpcnQsIHVuc2lnbmVkIGxvbmcgcGh5cywKLQkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCitwbWJfcmVtYXBfY2FsbGVyKHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJIHBncHJvdF90IHByb3QsIHZvaWQgKmNhbGxlcikKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG1iX3VubWFwKHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotI2RlZmluZSBwbWJfdW5tYXAoYWRkcikJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgcG1iX2luaXQoYWRkcikJCWRvIHsgfSB3aGlsZSAoMCkKIAogI2lmZGVmIENPTkZJR18yOUJJVApAQCAtNzcsNiArODcsMTMgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogQ09ORklHX1BNQiAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCitwbWJfcmVtYXAocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQoreworCXJldHVybiBwbWJfcmVtYXBfY2FsbGVyKHBoeXMsIHNpemUsIHByb3QsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Cit9CisKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmIC8qIF9fTU1VX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2l1LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NpdS5oCmluZGV4IDU3NTY1YTMuLmYxYjFlNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2l1LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zaXUuaApAQCAtMTEsNyArMTEsNyBAQAogI2lmbmRlZiBBU01fU0lVX0gKICNkZWZpbmUgQVNNX1NJVV9ICiAKLSNpbmNsdWRlIDxhc20vZG1hLXNoLmg+CisjaW5jbHVkZSA8YXNtL2RtYWVuZ2luZS5oPgogCiBzdHJ1Y3QgZGV2aWNlOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKaW5kZXggMzdjZGFkZC4uODhlNzM0MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS90b3BvbG9neS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaApAQCAtMzUsNyArMzUsNyBAQAogCiAjZGVmaW5lIHBjaWJ1c190b19ub2RlKGJ1cykJKCh2b2lkKShidXMpLCAtMSkKICNkZWZpbmUgY3B1bWFza19vZl9wY2lidXMoYnVzKQkocGNpYnVzX3RvX25vZGUoYnVzKSA9PSAtMSA/IFwKLQkJCQkJQ1BVX01BU0tfQUxMX1BUUiA6IFwKKwkJCQkJY3B1X2FsbF9tYXNrIDogXAogCQkJCQljcHVtYXNrX29mX25vZGUocGNpYnVzX3RvX25vZGUoYnVzKSkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RtYS1yZWdpc3Rlci5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RtYS1yZWdpc3Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNDllNDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZG1hLXJlZ2lzdGVyLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIFNIMyBDUFUtc3BlY2lmaWMgRE1BIGRlZmluaXRpb25zLCB1c2VkIGJ5IGJvdGggRE1BIGRyaXZlcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxnLmxpYWtob3ZldHNraUBnbXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBDUFVfRE1BX1JFR0lTVEVSX0gKKyNkZWZpbmUgQ1BVX0RNQV9SRUdJU1RFUl9ICisKKyNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDE4CisjZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTMKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMAorI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMAorCisjZGVmaW5lIERNQU9SX0lOSVQJRE1BT1JfRE1FCisKKy8qCisgKiBUaGUgU3VwZXJIIERNQUMgc3VwcG9ydHMgYSBudW1iZXIgb2YgdHJhbnNtaXQgc2l6ZXMsIHdlIGxpc3QgdGhlbSBoZXJlLAorICogd2l0aCB0aGVpciByZXNwZWN0aXZlIHZhbHVlcyBhcyB0aGV5IGFwcGVhciBpbiB0aGUgQ0hDUiByZWdpc3RlcnMuCisgKi8KK2VudW0geworCVhNSVRfU1pfOEJJVCwKKwlYTUlUX1NaXzE2QklULAorCVhNSVRfU1pfMzJCSVQsCisJWE1JVF9TWl8xMjhCSVQsCit9OworCisvKiBsb2cyKHNpemUgLyA4KSAtIHVzZWQgdG8gY2FsY3VsYXRlIG51bWJlciBvZiB0cmFuc2ZlcnMgKi8KKyNkZWZpbmUgVFNfU0hJRlQgewkJCVwKKwlbWE1JVF9TWl84QklUXQkJPSAwLAlcCisJW1hNSVRfU1pfMTZCSVRdCQk9IDEsCVwKKwlbWE1JVF9TWl8zMkJJVF0JCT0gMiwJXAorCVtYTUlUX1NaXzEyOEJJVF0JPSA0LAlcCit9CisKKyNkZWZpbmUgVFNfSU5ERVgyVkFMKGkpCSgoKGkpICYgMykgPDwgQ0hDUl9UU19MT1dfU0hJRlQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RtYS5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RtYS5oCmluZGV4IDIwNzgxMWEuLjI0ZTI4YjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kbWEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZG1hLmgKQEAgLTIwLDMxICsyMCw0IEBACiAjZGVmaW5lIFRTXzMyCQkweDAwMDAwMDEwCiAjZGVmaW5lIFRTXzEyOAkJMHgwMDAwMDAxOAogCi0jZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgxOAotI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCi0jZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKLSNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKLQotI2RlZmluZSBETUFPUl9JTklUCURNQU9SX0RNRQotCi0vKgotICogVGhlIFN1cGVySCBETUFDIHN1cHBvcnRzIGEgbnVtYmVyIG9mIHRyYW5zbWl0IHNpemVzLCB3ZSBsaXN0IHRoZW0gaGVyZSwKLSAqIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSB2YWx1ZXMgYXMgdGhleSBhcHBlYXIgaW4gdGhlIENIQ1IgcmVnaXN0ZXJzLgotICovCi1lbnVtIHsKLQlYTUlUX1NaXzhCSVQsCi0JWE1JVF9TWl8xNkJJVCwKLQlYTUlUX1NaXzMyQklULAotCVhNSVRfU1pfMTI4QklULAotfTsKLQotI2RlZmluZSBUU19TSElGVCB7CQkJXAotCVtYTUlUX1NaXzhCSVRdCQk9IDAsCVwKLQlbWE1JVF9TWl8xNkJJVF0JCT0gMSwJXAotCVtYTUlUX1NaXzMyQklUXQkJPSAyLAlcCi0JW1hNSVRfU1pfMTI4QklUXQk9IDQsCVwKLX0KLQotI2RlZmluZSBUU19JTkRFWDJWQUwoaSkJKCgoaSkgJiAzKSA8PCBDSENSX1RTX0xPV19TSElGVCkKLQogI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDNfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtcmVnaXN0ZXIuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtcmVnaXN0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWY5ZmVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1yZWdpc3Rlci5oCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogU0g0IENQVS1zcGVjaWZpYyBETUEgZGVmaW5pdGlvbnMsIHVzZWQgYnkgYm90aCBETUEgZHJpdmVycworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHdWVubmFkaSBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIENQVV9ETUFfUkVHSVNURVJfSAorI2RlZmluZSBDUFVfRE1BX1JFR0lTVEVSX0gKKworLyogU0g3NzUxLzc3NjAvNzc4MCBETUEgSVJRIHNvdXJjZXMgKi8KKworI2lmZGVmIENPTkZJR19DUFVfU0g0QQorCisjZGVmaW5lIERNQU9SX0lOSVQJRE1BT1JfRE1FCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MzApCisjZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgwMDAwMDAxOAorI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCisjZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikgfHwgXAorCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCkKKyNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDAwMDAwMDE4CisjZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTMKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMHgwMDMwMDAwMAorI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJKDIwIC0gMikJLyogMiBiaXRzIGZvciBzaGlmdGVkIGxvdyBUUyAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzKSB8fCBcCisJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzY0KQorI2RlZmluZSBDSENSX1RTX0xPV19NQVNLCTB4MDAwMDAwMTgKKyNkZWZpbmUgQ0hDUl9UU19MT1dfU0hJRlQJMworI2RlZmluZSBDSENSX1RTX0hJR0hfTUFTSwkwCisjZGVmaW5lIENIQ1JfVFNfSElHSF9TSElGVAkwCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCisjZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgwMDAwMDAxOAorI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCisjZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkKKyNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDAwMDAwMDE4CisjZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTMKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMAorI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMAorI2Vsc2UgLyogU0g3Nzg1ICovCisjZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgwMDAwMDAxOAorI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCisjZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKKyNlbmRpZgorCisvKiBUcmFuc21pdCBzaXplcyBhbmQgcmVzcGVjdGl2ZSBDSENSIHJlZ2lzdGVyIHZhbHVlcyAqLworZW51bSB7CisJWE1JVF9TWl84QklUCQk9IDAsCisJWE1JVF9TWl8xNkJJVAkJPSAxLAorCVhNSVRfU1pfMzJCSVQJCT0gMiwKKwlYTUlUX1NaXzY0QklUCQk9IDcsCisJWE1JVF9TWl8xMjhCSVQJCT0gMywKKwlYTUlUX1NaXzI1NkJJVAkJPSA0LAorCVhNSVRfU1pfMTI4QklUX0JMSwk9IDB4YiwKKwlYTUlUX1NaXzI1NkJJVF9CTEsJPSAweGMsCit9OworCisvKiBsb2cyKHNpemUgLyA4KSAtIHVzZWQgdG8gY2FsY3VsYXRlIG51bWJlciBvZiB0cmFuc2ZlcnMgKi8KKyNkZWZpbmUgVFNfU0hJRlQgewkJCVwKKwlbWE1JVF9TWl84QklUXQkJPSAwLAlcCisJW1hNSVRfU1pfMTZCSVRdCQk9IDEsCVwKKwlbWE1JVF9TWl8zMkJJVF0JCT0gMiwJXAorCVtYTUlUX1NaXzY0QklUXQkJPSAzLAlcCisJW1hNSVRfU1pfMTI4QklUXQk9IDQsCVwKKwlbWE1JVF9TWl8yNTZCSVRdCT0gNSwJXAorCVtYTUlUX1NaXzEyOEJJVF9CTEtdCT0gNCwJXAorCVtYTUlUX1NaXzI1NkJJVF9CTEtdCT0gNSwJXAorfQorCisjZGVmaW5lIFRTX0lOREVYMlZBTChpKQkoKCgoaSkgJiAzKSA8PCBDSENSX1RTX0xPV19TSElGVCkgfCBcCisJCQkgKCgoKGkpID4+IDIpICYgMykgPDwgQ0hDUl9UU19ISUdIX1NISUZUKSkKKworI2Vsc2UgLyogQ09ORklHX0NQVV9TSDRBICovCisKKyNkZWZpbmUgRE1BT1JfSU5JVAkoMHg4MDAwIHwgRE1BT1JfRE1FKQorCisjZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHg3MAorI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAk0CisjZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKKworLyogVHJhbnNtaXQgc2l6ZXMgYW5kIHJlc3BlY3RpdmUgQ0hDUiByZWdpc3RlciB2YWx1ZXMgKi8KK2VudW0geworCVhNSVRfU1pfOEJJVAk9IDEsCisJWE1JVF9TWl8xNkJJVAk9IDIsCisJWE1JVF9TWl8zMkJJVAk9IDMsCisJWE1JVF9TWl82NEJJVAk9IDAsCisJWE1JVF9TWl8yNTZCSVQJPSA0LAorfTsKKworLyogbG9nMihzaXplIC8gOCkgLSB1c2VkIHRvIGNhbGN1bGF0ZSBudW1iZXIgb2YgdHJhbnNmZXJzICovCisjZGVmaW5lIFRTX1NISUZUIHsJCQlcCisJW1hNSVRfU1pfOEJJVF0JCT0gMCwJXAorCVtYTUlUX1NaXzE2QklUXQkJPSAxLAlcCisJW1hNSVRfU1pfMzJCSVRdCQk9IDIsCVwKKwlbWE1JVF9TWl82NEJJVF0JCT0gMywJXAorCVtYTUlUX1NaXzI1NkJJVF0JPSA1LAlcCit9CisKKyNkZWZpbmUgVFNfSU5ERVgyVkFMKGkpCSgoKGkpICYgNykgPDwgQ0hDUl9UU19MT1dfU0hJRlQpCisKKyNlbmRpZiAvKiBDT05GSUdfQ1BVX1NINEEgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g0YS5oCmluZGV4IGU3MzRlYTQuLjk2NDdlNjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g0YS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g0YS5oCkBAIC04LDIwICs4LDEyIEBACiAjZGVmaW5lIERNQUUwX0lSUQk3OAkvKiBETUEgRXJyb3IgSVJRKi8KICNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZFMDA4MDIwCiAjZGVmaW5lIFNIX0RNQVJTX0JBU0UwCTB4RkUwMDkwMDAKLSNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDAwMDAwMDE4Ci0jZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTMKLSNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMAotI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMAogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKQogI2RlZmluZSBETVRFMF9JUlEJNDgKICNkZWZpbmUgRE1URTRfSVJRCTc2CiAjZGVmaW5lIERNQUUwX0lSUQk3OAkvKiBETUEgRXJyb3IgSVJRKi8KICNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZFMDA4MDIwCiAjZGVmaW5lIFNIX0RNQVJTX0JBU0UwCTB4RkUwMDkwMDAKLSNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDAwMDAwMDE4Ci0jZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTMKLSNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMHgwMDMwMDAwMAotI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMjAKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MykgfHwgXAogCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2NCkKICNkZWZpbmUgRE1URTBfSVJRCTM0CkBAIC0yOSwxMCArMjEsNiBAQAogI2RlZmluZSBETUFFMF9JUlEJMzgKICNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZGNjA4MDIwCiAjZGVmaW5lIFNIX0RNQVJTX0JBU0UwCTB4RkY2MDkwMDAKLSNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDAwMDAwMDE4Ci0jZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTMKLSNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMAotI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMAogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQogI2RlZmluZSBETVRFMF9JUlEJNDgJLyogRE1BQzBBKi8KICNkZWZpbmUgRE1URTRfSVJRCTc2CS8qIERNQUMwQiAqLwpAQCAtNDYsMTAgKzM0LDYgQEAKICNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZFMDA4MDIwCiAjZGVmaW5lIFNIX0RNQUNfQkFTRTEJMHhGREMwODAyMAogI2RlZmluZSBTSF9ETUFSU19CQVNFMAkweEZEQzA5MDAwCi0jZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgwMDAwMDAxOAotI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCi0jZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKLSNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNCkKICNkZWZpbmUgRE1URTBfSVJRCTQ4CS8qIERNQUMwQSovCiAjZGVmaW5lIERNVEU0X0lSUQk3NgkvKiBETUFDMEIgKi8KQEAgLTY0LDEwICs0OCw2IEBACiAjZGVmaW5lIFNIX0RNQUNfQkFTRTEJMHhGREMwODAyMAogI2RlZmluZSBTSF9ETUFSU19CQVNFMAkweEZFMDA5MDAwCiAjZGVmaW5lIFNIX0RNQVJTX0JBU0UxCTB4RkRDMDkwMDAKLSNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDAwMDAwMDE4Ci0jZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTMKLSNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMHgwMDYwMDAwMAotI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMjEKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkKICNkZWZpbmUgRE1URTBfSVJRCTM0CiAjZGVmaW5lIERNVEU0X0lSUQk0NApAQCAtODAsMTAgKzYwLDYgQEAKICNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZDODA4MDIwCiAjZGVmaW5lIFNIX0RNQUNfQkFTRTEJMHhGQzgxODAyMAogI2RlZmluZSBTSF9ETUFSU19CQVNFMAkweEZDODA5MDAwCi0jZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgwMDAwMDAxOAotI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCi0jZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKLSNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKICNlbHNlIC8qIFNINzc4NSAqLwogI2RlZmluZSBETVRFMF9JUlEJMzMKICNkZWZpbmUgRE1URTRfSVJRCTM3CkBAIC05NywxMCArNzMsNiBAQAogI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4RkM4MDgwMjAKICNkZWZpbmUgU0hfRE1BQ19CQVNFMQkweEZDQzA4MDIwCiAjZGVmaW5lIFNIX0RNQVJTX0JBU0UwCTB4RkM4MDkwMDAKLSNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDAwMDAwMDE4Ci0jZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTMKLSNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMAotI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMAogI2VuZGlmCiAKICNkZWZpbmUgUkVRX0hFCQkweDAwMDAwMEMwCkBAIC0xMDgsMzggKzgwLDQgQEAKICNkZWZpbmUgUkVRX0xFCQkweDAwMDAwMDQwCiAjZGVmaW5lIFRNX0JVUlNUCTB4MDAwMDAwMjAKIAotLyoKLSAqIFRoZSBTdXBlckggRE1BQyBzdXBwb3J0cyBhIG51bWJlciBvZiB0cmFuc21pdCBzaXplcywgd2UgbGlzdCB0aGVtIGhlcmUsCi0gKiB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgdmFsdWVzIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBDSENSIHJlZ2lzdGVycy4KLSAqCi0gKiBEZWZhdWx0cyB0byBhIDY0LWJpdCB0cmFuc2ZlciBzaXplLgotICovCi1lbnVtIHsKLQlYTUlUX1NaXzhCSVQJCT0gMCwKLQlYTUlUX1NaXzE2QklUCQk9IDEsCi0JWE1JVF9TWl8zMkJJVAkJPSAyLAotCVhNSVRfU1pfNjRCSVQJCT0gNywKLQlYTUlUX1NaXzEyOEJJVAkJPSAzLAotCVhNSVRfU1pfMjU2QklUCQk9IDQsCi0JWE1JVF9TWl8xMjhCSVRfQkxLCT0gMHhiLAotCVhNSVRfU1pfMjU2QklUX0JMSwk9IDB4YywKLX07Ci0KLS8qCi0gKiBUaGUgRE1BIGNvdW50IGlzIGRlZmluZWQgYXMgdGhlIG51bWJlciBvZiBieXRlcyB0byB0cmFuc2Zlci4KLSAqLwotI2RlZmluZSBUU19TSElGVCB7CQkJXAotCVtYTUlUX1NaXzhCSVRdCQk9IDAsCVwKLQlbWE1JVF9TWl8xNkJJVF0JCT0gMSwJXAotCVtYTUlUX1NaXzMyQklUXQkJPSAyLAlcCi0JW1hNSVRfU1pfNjRCSVRdCQk9IDMsCVwKLQlbWE1JVF9TWl8xMjhCSVRdCT0gNCwJXAotCVtYTUlUX1NaXzI1NkJJVF0JPSA1LAlcCi0JW1hNSVRfU1pfMTI4QklUX0JMS10JPSA0LAlcCi0JW1hNSVRfU1pfMjU2QklUX0JMS10JPSA1LAlcCi19Ci0KLSNkZWZpbmUgVFNfSU5ERVgyVkFMKGkpCSgoKChpKSAmIDMpIDw8IENIQ1JfVFNfTE9XX1NISUZUKSB8IFwKLQkJCSAoKCgoaSkgPj4gMikgJiAzKSA8PCBDSENSX1RTX0hJR0hfU0hJRlQpKQotCiAjZW5kaWYgLyogX19BU01fU0hfQ1BVX1NINF9ETUFfU0g3NzgwX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEuaAppbmRleCAxMTRhMzY5Li5jYTc0N2U5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS5oCkBAIC01LDkgKzUsOCBAQAogCiAjaWZkZWYgQ09ORklHX0NQVV9TSDRBCiAKLSNkZWZpbmUgRE1BT1JfSU5JVAkoRE1BT1JfRE1FKQotCiAjaW5jbHVkZSA8Y3B1L2RtYS1zaDRhLmg+CisKICNlbHNlIC8qIENPTkZJR19DUFVfU0g0QSAqLwogLyoKICAqIFNINzc1MC9TSDc3NTEvU0g3NzYwCkBAIC0xNyw3ICsxNiw2IEBACiAjZGVmaW5lIERNVEU2X0lSUQk0NgogI2RlZmluZSBETUFFMF9JUlEJMzgKIAotI2RlZmluZSBETUFPUl9JTklUCSgweDgwMDB8RE1BT1JfRE1FKQogI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4ZmZhMDAwMDAKICNkZWZpbmUgU0hfRE1BQ19CQVNFMQkweGZmYTAwMDcwCiAvKiBEZWZpbml0aW9ucyBmb3IgdGhlIFN1cGVySCBETUFDICovCkBAIC0yNyw0MCArMjUsOCBAQAogI2RlZmluZSBUU18zMgkJMHgwMDAwMDAzMAogI2RlZmluZSBUU182NAkJMHgwMDAwMDAwMAogCi0jZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHg3MAotI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAk0Ci0jZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKLSNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKLQogI2RlZmluZSBETUFPUl9DT0QJMHgwMDAwMDAwOAogCi0vKgotICogVGhlIFN1cGVySCBETUFDIHN1cHBvcnRzIGEgbnVtYmVyIG9mIHRyYW5zbWl0IHNpemVzLCB3ZSBsaXN0IHRoZW0gaGVyZSwKLSAqIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSB2YWx1ZXMgYXMgdGhleSBhcHBlYXIgaW4gdGhlIENIQ1IgcmVnaXN0ZXJzLgotICoKLSAqIERlZmF1bHRzIHRvIGEgNjQtYml0IHRyYW5zZmVyIHNpemUuCi0gKi8KLWVudW0gewotCVhNSVRfU1pfOEJJVAk9IDEsCi0JWE1JVF9TWl8xNkJJVAk9IDIsCi0JWE1JVF9TWl8zMkJJVAk9IDMsCi0JWE1JVF9TWl82NEJJVAk9IDAsCi0JWE1JVF9TWl8yNTZCSVQJPSA0LAotfTsKLQotLyoKLSAqIFRoZSBETUEgY291bnQgaXMgZGVmaW5lZCBhcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyLgotICovCi0jZGVmaW5lIFRTX1NISUZUIHsJCQlcCi0JW1hNSVRfU1pfOEJJVF0JCT0gMCwJXAotCVtYTUlUX1NaXzE2QklUXQkJPSAxLAlcCi0JW1hNSVRfU1pfMzJCSVRdCQk9IDIsCVwKLQlbWE1JVF9TWl82NEJJVF0JCT0gMywJXAotCVtYTUlUX1NaXzI1NkJJVF0JPSA1LAlcCi19Ci0KLSNkZWZpbmUgVFNfSU5ERVgyVkFMKGkpCSgoKGkpICYgNykgPDwgQ0hDUl9UU19MT1dfU0hJRlQpCi0KICNlbmRpZgogCiAjZW5kaWYgLyogX19BU01fQ1BVX1NINF9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL21hY2gtbWlnb3IvbWFjaC9taWdvci5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtbWlnb3IvbWFjaC9taWdvci5oCmluZGV4IGNlZTZjYjguLjQyZmNjZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLW1pZ29yL21hY2gvbWlnb3IuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1taWdvci9tYWNoL21pZ29yLmgKQEAgLTEsNiArMSw3IEBACiAjaWZuZGVmIF9fQVNNX1NIX01JR09SX0gKICNkZWZpbmUgX19BU01fU0hfTUlHT1JfSAogCisjZGVmaW5lIFBPUlRfTVNFTENSQSAweGE0MDUwMTgwCiAjZGVmaW5lIFBPUlRfTVNFTENSQiAweGE0MDUwMTgyCiAjZGVmaW5lIEJTQ19DUzRCQ1IgMHhmZWMxMDAxMAogI2RlZmluZSBCU0NfQ1M2QUJDUiAweGZlYzEwMDFjCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jCmluZGV4IGVmM2Y5NzguLmZkN2UzNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jCkBAIC03LDE5ICs3LDE2NyBAQAogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NoX3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvdWlvX2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9tNjY1OTIuaD4KLSNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgorCiAjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2RtYWVuZ2luZS5oPgogI2luY2x1ZGUgPGFzbS9tbXpvbmUuaD4KLSNpbmNsdWRlIDxhc20vZG1hLXNoLmg+CisjaW5jbHVkZSA8YXNtL3NpdS5oPgorCisjaW5jbHVkZSA8Y3B1L2RtYS1yZWdpc3Rlci5oPgogI2luY2x1ZGUgPGNwdS9zaDc3MjIuaD4KIAorc3RhdGljIHN0cnVjdCBzaF9kbWFlX3NsYXZlX2NvbmZpZyBzaDc3MjJfZG1hZV9zbGF2ZXNbXSA9IHsKKwl7CisJCS5zbGF2ZV9pZAk9IFNIRE1BX1NMQVZFX1NDSUYwX1RYLAorCQkuYWRkcgkJPSAweGZmZTAwMDBjLAorCQkuY2hjcgkJPSBETV9GSVggfCBTTV9JTkMgfCAweDgwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzhCSVQpLAorCQkubWlkX3JpZAk9IDB4MjEsCisJfSwgeworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9TQ0lGMF9SWCwKKwkJLmFkZHIJCT0gMHhmZmUwMDAxNCwKKwkJLmNoY3IJCT0gRE1fSU5DIHwgU01fRklYIHwgMHg4MDAgfCBUU19JTkRFWDJWQUwoWE1JVF9TWl84QklUKSwKKwkJLm1pZF9yaWQJPSAweDIyLAorCX0sIHsKKwkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfU0NJRjFfVFgsCisJCS5hZGRyCQk9IDB4ZmZlMTAwMGMsCisJCS5jaGNyCQk9IERNX0ZJWCB8IFNNX0lOQyB8IDB4ODAwIHwgVFNfSU5ERVgyVkFMKFhNSVRfU1pfOEJJVCksCisJCS5taWRfcmlkCT0gMHgyNSwKKwl9LCB7CisJCS5zbGF2ZV9pZAk9IFNIRE1BX1NMQVZFX1NDSUYxX1JYLAorCQkuYWRkcgkJPSAweGZmZTEwMDE0LAorCQkuY2hjcgkJPSBETV9JTkMgfCBTTV9GSVggfCAweDgwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzhCSVQpLAorCQkubWlkX3JpZAk9IDB4MjYsCisJfSwgeworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9TQ0lGMl9UWCwKKwkJLmFkZHIJCT0gMHhmZmUyMDAwYywKKwkJLmNoY3IJCT0gRE1fRklYIHwgU01fSU5DIHwgMHg4MDAgfCBUU19JTkRFWDJWQUwoWE1JVF9TWl84QklUKSwKKwkJLm1pZF9yaWQJPSAweDI5LAorCX0sIHsKKwkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfU0NJRjJfUlgsCisJCS5hZGRyCQk9IDB4ZmZlMjAwMTQsCisJCS5jaGNyCQk9IERNX0lOQyB8IFNNX0ZJWCB8IDB4ODAwIHwgVFNfSU5ERVgyVkFMKFhNSVRfU1pfOEJJVCksCisJCS5taWRfcmlkCT0gMHgyYSwKKwl9LCB7CisJCS5zbGF2ZV9pZAk9IFNIRE1BX1NMQVZFX1NJVUFfVFgsCisJCS5hZGRyCQk9IDB4YTQ1NGMwOTgsCisJCS5jaGNyCQk9IERNX0ZJWCB8IFNNX0lOQyB8IDB4ODAwIHwgVFNfSU5ERVgyVkFMKFhNSVRfU1pfMzJCSVQpLAorCQkubWlkX3JpZAk9IDB4YjEsCisJfSwgeworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9TSVVBX1JYLAorCQkuYWRkcgkJPSAweGE0NTRjMDkwLAorCQkuY2hjcgkJPSBETV9JTkMgfCBTTV9GSVggfCAweDgwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzMyQklUKSwKKwkJLm1pZF9yaWQJPSAweGIyLAorCX0sIHsKKwkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfU0lVQl9UWCwKKwkJLmFkZHIJCT0gMHhhNDU0YzA5YywKKwkJLmNoY3IJCT0gRE1fRklYIHwgU01fSU5DIHwgMHg4MDAgfCBUU19JTkRFWDJWQUwoWE1JVF9TWl8zMkJJVCksCisJCS5taWRfcmlkCT0gMHhiNSwKKwl9LCB7CisJCS5zbGF2ZV9pZAk9IFNIRE1BX1NMQVZFX1NJVUJfUlgsCisJCS5hZGRyCQk9IDB4YTQ1NGMwOTQsCisJCS5jaGNyCQk9IERNX0lOQyB8IFNNX0ZJWCB8IDB4ODAwIHwgVFNfSU5ERVgyVkFMKFhNSVRfU1pfMzJCSVQpLAorCQkubWlkX3JpZAk9IDB4YjYsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfZG1hZV9jaGFubmVsIHNoNzcyMl9kbWFlX2NoYW5uZWxzW10gPSB7CisJeworCQkub2Zmc2V0ID0gMCwKKwkJLmRtYXJzID0gMCwKKwkJLmRtYXJzX2JpdCA9IDAsCisJfSwgeworCQkub2Zmc2V0ID0gMHgxMCwKKwkJLmRtYXJzID0gMCwKKwkJLmRtYXJzX2JpdCA9IDgsCisJfSwgeworCQkub2Zmc2V0ID0gMHgyMCwKKwkJLmRtYXJzID0gNCwKKwkJLmRtYXJzX2JpdCA9IDAsCisJfSwgeworCQkub2Zmc2V0ID0gMHgzMCwKKwkJLmRtYXJzID0gNCwKKwkJLmRtYXJzX2JpdCA9IDgsCisJfSwgeworCQkub2Zmc2V0ID0gMHg1MCwKKwkJLmRtYXJzID0gOCwKKwkJLmRtYXJzX2JpdCA9IDAsCisJfSwgeworCQkub2Zmc2V0ID0gMHg2MCwKKwkJLmRtYXJzID0gOCwKKwkJLmRtYXJzX2JpdCA9IDgsCisJfQorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCB0c19zaGlmdFtdID0gVFNfU0hJRlQ7CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSBkbWFfcGxhdGZvcm1fZGF0YSA9IHsKKwkuc2xhdmUJCT0gc2g3NzIyX2RtYWVfc2xhdmVzLAorCS5zbGF2ZV9udW0JPSBBUlJBWV9TSVpFKHNoNzcyMl9kbWFlX3NsYXZlcyksCisJLmNoYW5uZWwJPSBzaDc3MjJfZG1hZV9jaGFubmVscywKKwkuY2hhbm5lbF9udW0JPSBBUlJBWV9TSVpFKHNoNzcyMl9kbWFlX2NoYW5uZWxzKSwKKwkudHNfbG93X3NoaWZ0CT0gQ0hDUl9UU19MT1dfU0hJRlQsCisJLnRzX2xvd19tYXNrCT0gQ0hDUl9UU19MT1dfTUFTSywKKwkudHNfaGlnaF9zaGlmdAk9IENIQ1JfVFNfSElHSF9TSElGVCwKKwkudHNfaGlnaF9tYXNrCT0gQ0hDUl9UU19ISUdIX01BU0ssCisJLnRzX3NoaWZ0CT0gdHNfc2hpZnQsCisJLnRzX3NoaWZ0X251bQk9IEFSUkFZX1NJWkUodHNfc2hpZnQpLAorCS5kbWFvcl9pbml0CT0gRE1BT1JfSU5JVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3NzIyX2RtYWVfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkvKiBDaGFubmVsIHJlZ2lzdGVycyBhbmQgRE1BT1IgKi8KKwkJLnN0YXJ0CT0gMHhmZTAwODAyMCwKKwkJLmVuZAk9IDB4ZmUwMDgwOGYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkvKiBETUFSU3ggKi8KKwkJLnN0YXJ0CT0gMHhmZTAwOTAwMCwKKwkJLmVuZAk9IDB4ZmUwMDkwMGIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkvKiBETUEgZXJyb3IgSVJRICovCisJCS5zdGFydAk9IDc4LAorCQkuZW5kCT0gNzgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkvKiBJUlEgZm9yIGNoYW5uZWxzIDAtMyAqLworCQkuc3RhcnQJPSA0OCwKKwkJLmVuZAk9IDUxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLyogSVJRIGZvciBjaGFubmVscyA0LTUgKi8KKwkJLnN0YXJ0CT0gNzYsCisJCS5lbmQJPSA3NywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG1hX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtZG1hLWVuZ2luZSIsCisJLmlkCQk9IC0xLAorCS5yZXNvdXJjZQk9IHNoNzcyMl9kbWFlX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2g3NzIyX2RtYWVfcmVzb3VyY2VzKSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZG1hX3BsYXRmb3JtX2RhdGEsCisJfSwKKwkuYXJjaGRhdGEgPSB7CisJCS5od2Jsa19pZCA9IEhXQkxLX0RNQUMsCisJfSwKK307CisKIC8qIFNlcmlhbCAqLwogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYwX3BsYXRmb3JtX2RhdGEgPSB7CiAJLm1hcGJhc2UgICAgICAgID0gMHhmZmUwMDAwMCwKQEAgLTM4OCwxNSArNTM2LDM2IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSBkbWFfcGxhdGZvcm1fZGF0YSA9IHsKLQkubW9kZSA9IDAsCitzdGF0aWMgc3RydWN0IHNpdV9wbGF0Zm9ybSBzaXVfcGxhdGZvcm1fZGF0YSA9IHsKKwkuZG1hX2Rldgk9ICZkbWFfZGV2aWNlLmRldiwKKwkuZG1hX3NsYXZlX3R4X2EJPSBTSERNQV9TTEFWRV9TSVVBX1RYLAorCS5kbWFfc2xhdmVfcnhfYQk9IFNIRE1BX1NMQVZFX1NJVUFfUlgsCisJLmRtYV9zbGF2ZV90eF9iCT0gU0hETUFfU0xBVkVfU0lVQl9UWCwKKwkuZG1hX3NsYXZlX3J4X2IJPSBTSERNQV9TTEFWRV9TSVVCX1JYLAogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG1hX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2gtZG1hLWVuZ2luZSIsCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNpdV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IDB4YTQ1NDAwMDAsCisJCS5lbmQJPSAweGE0NTRjMTBmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gMTA4LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2l1X2RldmljZSA9IHsKKwkubmFtZQkJPSAic2hfc2l1IiwKIAkuaWQJCT0gLTEsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhCT0gJmRtYV9wbGF0Zm9ybV9kYXRhLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNpdV9wbGF0Zm9ybV9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gc2l1X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2l1X3Jlc291cmNlcyksCisJLmFyY2hkYXRhID0geworCQkuaHdibGtfaWQgPSBIV0JMS19TSVUsCiAJfSwKIH07CiAKQEAgLTQxNCw2ICs1ODMsNyBAQAogCSZ2cHVfZGV2aWNlLAogCSZ2ZXVfZGV2aWNlLAogCSZqcHVfZGV2aWNlLAorCSZzaXVfZGV2aWNlLAogCSZkbWFfZGV2aWNlLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzI0LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjQuYwppbmRleCAzMWUzNDUxLi5lN2ZhMmE5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjQuYwpAQCAtMjEsMjIgKzIxLDE4OSBAQAogI2luY2x1ZGUgPGxpbnV4L3NoX3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorCiAjaW5jbHVkZSA8YXNtL3N1c3BlbmQuaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KLSNpbmNsdWRlIDxhc20vZG1hLXNoLmg+CisjaW5jbHVkZSA8YXNtL2RtYWVuZ2luZS5oPgogI2luY2x1ZGUgPGFzbS9tbXpvbmUuaD4KKworI2luY2x1ZGUgPGNwdS9kbWEtcmVnaXN0ZXIuaD4KICNpbmNsdWRlIDxjcHUvc2g3NzI0Lmg+CiAKIC8qIERNQSAqLwotc3RhdGljIHN0cnVjdCBzaF9kbWFlX3BkYXRhIGRtYV9wbGF0Zm9ybV9kYXRhID0gewotCS5tb2RlID0gU0hETUFfRE1BT1IxLAorc3RhdGljIHN0cnVjdCBzaF9kbWFlX2NoYW5uZWwgc2g3NzI0X2RtYWUwX2NoYW5uZWxzW10gPSB7CisJeworCQkub2Zmc2V0ID0gMCwKKwkJLmRtYXJzID0gMCwKKwkJLmRtYXJzX2JpdCA9IDAsCisJfSwgeworCQkub2Zmc2V0ID0gMHgxMCwKKwkJLmRtYXJzID0gMCwKKwkJLmRtYXJzX2JpdCA9IDgsCisJfSwgeworCQkub2Zmc2V0ID0gMHgyMCwKKwkJLmRtYXJzID0gNCwKKwkJLmRtYXJzX2JpdCA9IDAsCisJfSwgeworCQkub2Zmc2V0ID0gMHgzMCwKKwkJLmRtYXJzID0gNCwKKwkJLmRtYXJzX2JpdCA9IDgsCisJfSwgeworCQkub2Zmc2V0ID0gMHg1MCwKKwkJLmRtYXJzID0gOCwKKwkJLmRtYXJzX2JpdCA9IDAsCisJfSwgeworCQkub2Zmc2V0ID0gMHg2MCwKKwkJLmRtYXJzID0gOCwKKwkJLmRtYXJzX2JpdCA9IDgsCisJfQogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG1hX2RldmljZSA9IHsKLQkubmFtZQk9ICJzaC1kbWEtZW5naW5lIiwKLQkuaWQJCT0gLTEsCi0JLmRldgk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmZG1hX3BsYXRmb3JtX2RhdGEsCitzdGF0aWMgc3RydWN0IHNoX2RtYWVfY2hhbm5lbCBzaDc3MjRfZG1hZTFfY2hhbm5lbHNbXSA9IHsKKwl7CisJCS5vZmZzZXQgPSAwLAorCQkuZG1hcnMgPSAwLAorCQkuZG1hcnNfYml0ID0gMCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDEwLAorCQkuZG1hcnMgPSAwLAorCQkuZG1hcnNfYml0ID0gOCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDIwLAorCQkuZG1hcnMgPSA0LAorCQkuZG1hcnNfYml0ID0gMCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDMwLAorCQkuZG1hcnMgPSA0LAorCQkuZG1hcnNfYml0ID0gOCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDUwLAorCQkuZG1hcnMgPSA4LAorCQkuZG1hcnNfYml0ID0gMCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDYwLAorCQkuZG1hcnMgPSA4LAorCQkuZG1hcnNfYml0ID0gOCwKKwl9Cit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IHRzX3NoaWZ0W10gPSBUU19TSElGVDsKKworc3RhdGljIHN0cnVjdCBzaF9kbWFlX3BkYXRhIGRtYTBfcGxhdGZvcm1fZGF0YSA9IHsKKwkuY2hhbm5lbAk9IHNoNzcyNF9kbWFlMF9jaGFubmVscywKKwkuY2hhbm5lbF9udW0JPSBBUlJBWV9TSVpFKHNoNzcyNF9kbWFlMF9jaGFubmVscyksCisJLnRzX2xvd19zaGlmdAk9IENIQ1JfVFNfTE9XX1NISUZULAorCS50c19sb3dfbWFzawk9IENIQ1JfVFNfTE9XX01BU0ssCisJLnRzX2hpZ2hfc2hpZnQJPSBDSENSX1RTX0hJR0hfU0hJRlQsCisJLnRzX2hpZ2hfbWFzawk9IENIQ1JfVFNfSElHSF9NQVNLLAorCS50c19zaGlmdAk9IHRzX3NoaWZ0LAorCS50c19zaGlmdF9udW0JPSBBUlJBWV9TSVpFKHRzX3NoaWZ0KSwKKwkuZG1hb3JfaW5pdAk9IERNQU9SX0lOSVQsCit9OworCitzdGF0aWMgc3RydWN0IHNoX2RtYWVfcGRhdGEgZG1hMV9wbGF0Zm9ybV9kYXRhID0geworCS5jaGFubmVsCT0gc2g3NzI0X2RtYWUxX2NoYW5uZWxzLAorCS5jaGFubmVsX251bQk9IEFSUkFZX1NJWkUoc2g3NzI0X2RtYWUxX2NoYW5uZWxzKSwKKwkudHNfbG93X3NoaWZ0CT0gQ0hDUl9UU19MT1dfU0hJRlQsCisJLnRzX2xvd19tYXNrCT0gQ0hDUl9UU19MT1dfTUFTSywKKwkudHNfaGlnaF9zaGlmdAk9IENIQ1JfVFNfSElHSF9TSElGVCwKKwkudHNfaGlnaF9tYXNrCT0gQ0hDUl9UU19ISUdIX01BU0ssCisJLnRzX3NoaWZ0CT0gdHNfc2hpZnQsCisJLnRzX3NoaWZ0X251bQk9IEFSUkFZX1NJWkUodHNfc2hpZnQpLAorCS5kbWFvcl9pbml0CT0gRE1BT1JfSU5JVCwKK307CisKKy8qIFJlc291cmNlIG9yZGVyIGltcG9ydGFudCEgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3NzI0X2RtYWUwX3Jlc291cmNlc1tdID0geworCXsKKwkJLyogQ2hhbm5lbCByZWdpc3RlcnMgYW5kIERNQU9SICovCisJCS5zdGFydAk9IDB4ZmUwMDgwMjAsCisJCS5lbmQJPSAweGZlMDA4MDhmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLyogRE1BUlN4ICovCisJCS5zdGFydAk9IDB4ZmUwMDkwMDAsCisJCS5lbmQJPSAweGZlMDA5MDBiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLyogRE1BIGVycm9yIElSUSAqLworCQkuc3RhcnQJPSA3OCwKKwkJLmVuZAk9IDc4LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLyogSVJRIGZvciBjaGFubmVscyAwLTMgKi8KKwkJLnN0YXJ0CT0gNDgsCisJCS5lbmQJPSA1MSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS8qIElSUSBmb3IgY2hhbm5lbHMgNC01ICovCisJCS5zdGFydAk9IDc2LAorCQkuZW5kCT0gNzcsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCisvKiBSZXNvdXJjZSBvcmRlciBpbXBvcnRhbnQhICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzcyNF9kbWFlMV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS8qIENoYW5uZWwgcmVnaXN0ZXJzIGFuZCBETUFPUiAqLworCQkuc3RhcnQJPSAweGZkYzA4MDIwLAorCQkuZW5kCT0gMHhmZGMwODA4ZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS8qIERNQVJTeCAqLworCQkuc3RhcnQJPSAweGZkYzA5MDAwLAorCQkuZW5kCT0gMHhmZGMwOTAwYiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS8qIERNQSBlcnJvciBJUlEgKi8KKwkJLnN0YXJ0CT0gNzQsCisJCS5lbmQJPSA3NCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS8qIElSUSBmb3IgY2hhbm5lbHMgMC0zICovCisJCS5zdGFydAk9IDQwLAorCQkuZW5kCT0gNDMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkvKiBJUlEgZm9yIGNoYW5uZWxzIDQtNSAqLworCQkuc3RhcnQJPSA3MiwKKwkJLmVuZAk9IDczLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG1hMF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLWRtYS1lbmdpbmUiLAorCS5pZAkJPSAwLAorCS5yZXNvdXJjZQk9IHNoNzcyNF9kbWFlMF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNoNzcyNF9kbWFlMF9yZXNvdXJjZXMpLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZkbWEwX3BsYXRmb3JtX2RhdGEsCisJfSwKKwkuYXJjaGRhdGEgPSB7CisJCS5od2Jsa19pZCA9IEhXQkxLX0RNQUMwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbWExX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtZG1hLWVuZ2luZSIsCisJLmlkCQk9IDEsCisJLnJlc291cmNlCT0gc2g3NzI0X2RtYWUxX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2g3NzI0X2RtYWUxX3Jlc291cmNlcyksCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmRtYTFfcGxhdGZvcm1fZGF0YSwKKwl9LAorCS5hcmNoZGF0YSA9IHsKKwkJLmh3YmxrX2lkID0gSFdCTEtfRE1BQzEsCiAJfSwKIH07CiAKQEAgLTY2Myw3ICs4MzAsOCBAQAogCSZ0bXUzX2RldmljZSwKIAkmdG11NF9kZXZpY2UsCiAJJnRtdTVfZGV2aWNlLAotCSZkbWFfZGV2aWNlLAorCSZkbWEwX2RldmljZSwKKwkmZG1hMV9kZXZpY2UsCiAJJnJ0Y19kZXZpY2UsCiAJJmlpYzBfZGV2aWNlLAogCSZpaWMxX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKaW5kZXggZjhmMjE2MS4uMDJlNzkyYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKQEAgLTEzLDcgKzEzLDEwIEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CiAjaW5jbHVkZSA8bGludXgvc2hfdGltZXIuaD4KLSNpbmNsdWRlIDxhc20vZG1hLXNoLmg+CisKKyNpbmNsdWRlIDxhc20vZG1hZW5naW5lLmg+CisKKyNpbmNsdWRlIDxjcHUvZG1hLXJlZ2lzdGVyLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMF9wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKQEAgLTI0NywxNSArMjUwLDEzMSBAQAogCS5yZXNvdXJjZQk9IHJ0Y19yZXNvdXJjZXMsCiB9OwogCi1zdGF0aWMgc3RydWN0IHNoX2RtYWVfcGRhdGEgZG1hX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm1vZGUgPSAoU0hETUFfTUlYX0lSUSB8IFNIRE1BX0RNQU9SMSksCisvKiBETUEgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2hfZG1hZV9jaGFubmVsIHNoNzc4MF9kbWFlMF9jaGFubmVsc1tdID0geworCXsKKwkJLm9mZnNldCA9IDAsCisJCS5kbWFycyA9IDAsCisJCS5kbWFyc19iaXQgPSAwLAorCX0sIHsKKwkJLm9mZnNldCA9IDB4MTAsCisJCS5kbWFycyA9IDAsCisJCS5kbWFyc19iaXQgPSA4LAorCX0sIHsKKwkJLm9mZnNldCA9IDB4MjAsCisJCS5kbWFycyA9IDQsCisJCS5kbWFyc19iaXQgPSAwLAorCX0sIHsKKwkJLm9mZnNldCA9IDB4MzAsCisJCS5kbWFycyA9IDQsCisJCS5kbWFyc19iaXQgPSA4LAorCX0sIHsKKwkJLm9mZnNldCA9IDB4NTAsCisJCS5kbWFycyA9IDgsCisJCS5kbWFyc19iaXQgPSAwLAorCX0sIHsKKwkJLm9mZnNldCA9IDB4NjAsCisJCS5kbWFycyA9IDgsCisJCS5kbWFyc19iaXQgPSA4LAorCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtYV9kZXZpY2UgPSB7CitzdGF0aWMgc3RydWN0IHNoX2RtYWVfY2hhbm5lbCBzaDc3ODBfZG1hZTFfY2hhbm5lbHNbXSA9IHsKKwl7CisJCS5vZmZzZXQgPSAwLAorCX0sIHsKKwkJLm9mZnNldCA9IDB4MTAsCisJfSwgeworCQkub2Zmc2V0ID0gMHgyMCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDMwLAorCX0sIHsKKwkJLm9mZnNldCA9IDB4NTAsCisJfSwgeworCQkub2Zmc2V0ID0gMHg2MCwKKwl9Cit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IHRzX3NoaWZ0W10gPSBUU19TSElGVDsKKworc3RhdGljIHN0cnVjdCBzaF9kbWFlX3BkYXRhIGRtYTBfcGxhdGZvcm1fZGF0YSA9IHsKKwkuY2hhbm5lbAk9IHNoNzc4MF9kbWFlMF9jaGFubmVscywKKwkuY2hhbm5lbF9udW0JPSBBUlJBWV9TSVpFKHNoNzc4MF9kbWFlMF9jaGFubmVscyksCisJLnRzX2xvd19zaGlmdAk9IENIQ1JfVFNfTE9XX1NISUZULAorCS50c19sb3dfbWFzawk9IENIQ1JfVFNfTE9XX01BU0ssCisJLnRzX2hpZ2hfc2hpZnQJPSBDSENSX1RTX0hJR0hfU0hJRlQsCisJLnRzX2hpZ2hfbWFzawk9IENIQ1JfVFNfSElHSF9NQVNLLAorCS50c19zaGlmdAk9IHRzX3NoaWZ0LAorCS50c19zaGlmdF9udW0JPSBBUlJBWV9TSVpFKHRzX3NoaWZ0KSwKKwkuZG1hb3JfaW5pdAk9IERNQU9SX0lOSVQsCit9OworCitzdGF0aWMgc3RydWN0IHNoX2RtYWVfcGRhdGEgZG1hMV9wbGF0Zm9ybV9kYXRhID0geworCS5jaGFubmVsCT0gc2g3NzgwX2RtYWUxX2NoYW5uZWxzLAorCS5jaGFubmVsX251bQk9IEFSUkFZX1NJWkUoc2g3NzgwX2RtYWUxX2NoYW5uZWxzKSwKKwkudHNfbG93X3NoaWZ0CT0gQ0hDUl9UU19MT1dfU0hJRlQsCisJLnRzX2xvd19tYXNrCT0gQ0hDUl9UU19MT1dfTUFTSywKKwkudHNfaGlnaF9zaGlmdAk9IENIQ1JfVFNfSElHSF9TSElGVCwKKwkudHNfaGlnaF9tYXNrCT0gQ0hDUl9UU19ISUdIX01BU0ssCisJLnRzX3NoaWZ0CT0gdHNfc2hpZnQsCisJLnRzX3NoaWZ0X251bQk9IEFSUkFZX1NJWkUodHNfc2hpZnQpLAorCS5kbWFvcl9pbml0CT0gRE1BT1JfSU5JVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3NzgwX2RtYWUwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLyogQ2hhbm5lbCByZWdpc3RlcnMgYW5kIERNQU9SICovCisJCS5zdGFydAk9IDB4ZmM4MDgwMjAsCisJCS5lbmQJPSAweGZjODA4MDhmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLyogRE1BUlN4ICovCisJCS5zdGFydAk9IDB4ZmM4MDkwMDAsCisJCS5lbmQJPSAweGZjODA5MDBiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLyogUmVhbCBETUEgZXJyb3IgSVJRIGlzIDM4LCBhbmQgY2hhbm5lbCBJUlFzIGFyZSAzNC0zNywgNDQtNDUgKi8KKwkJLnN0YXJ0CT0gMzQsCisJCS5lbmQJPSAzNCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9TSEFSRUFCTEUsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3NzgwX2RtYWUxX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLyogQ2hhbm5lbCByZWdpc3RlcnMgYW5kIERNQU9SICovCisJCS5zdGFydAk9IDB4ZmM4MTgwMjAsCisJCS5lbmQJPSAweGZjODE4MDhmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qIERNQUMxIGhhcyBubyBETUFSUyAqLworCXsKKwkJLyogUmVhbCBETUEgZXJyb3IgSVJRIGlzIDM4LCBhbmQgY2hhbm5lbCBJUlFzIGFyZSA0Ni00NywgOTItOTUgKi8KKwkJLnN0YXJ0CT0gNDYsCisJCS5lbmQJPSA0NiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9TSEFSRUFCTEUsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtYTBfZGV2aWNlID0gewogCS5uYW1lICAgICAgICAgICA9ICJzaC1kbWEtZW5naW5lIiwKLQkuaWQgICAgICAgICAgICAgPSAtMSwKKwkuaWQgICAgICAgICAgICAgPSAwLAorCS5yZXNvdXJjZQk9IHNoNzc4MF9kbWFlMF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNoNzc4MF9kbWFlMF9yZXNvdXJjZXMpLAogCS5kZXYgICAgICAgICAgICA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgID0gJmRtYV9wbGF0Zm9ybV9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQk9ICZkbWEwX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtYTFfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1kbWEtZW5naW5lIiwKKwkuaWQJCT0gMSwKKwkucmVzb3VyY2UJPSBzaDc3ODBfZG1hZTFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzaDc3ODBfZG1hZTFfcmVzb3VyY2VzKSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZG1hMV9wbGF0Zm9ybV9kYXRhLAogCX0sCiB9OwogCkBAIC0yNjksNyArMzg4LDggQEAKIAkmdG11NF9kZXZpY2UsCiAJJnRtdTVfZGV2aWNlLAogCSZydGNfZGV2aWNlLAotCSZkbWFfZGV2aWNlLAorCSZkbWEwX2RldmljZSwKKwkmZG1hMV9kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzaDc3ODBfZGV2aWNlc19zZXR1cCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg1LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYwppbmRleCAyMzQ0OGQ4Li4xZmNkODhiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYwpAQCAtMTQsOSArMTQsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2hfdGltZXIuaD4KLSNpbmNsdWRlIDxhc20vZG1hLXNoLmg+CisKKyNpbmNsdWRlIDxhc20vZG1hZW5naW5lLmg+CiAjaW5jbHVkZSA8YXNtL21tem9uZS5oPgogCisjaW5jbHVkZSA8Y3B1L2RtYS1yZWdpc3Rlci5oPgorCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjBfcGxhdGZvcm1fZGF0YSA9IHsKIAkubWFwYmFzZQk9IDB4ZmZlYTAwMDAsCiAJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLApAQCAtMjk1LDE1ICsyOTgsMTMxIEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHRtdTVfcmVzb3VyY2VzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSBkbWFfcGxhdGZvcm1fZGF0YSA9IHsKLQkubW9kZSA9IChTSERNQV9NSVhfSVJRIHwgU0hETUFfRE1BT1IxKSwKKy8qIERNQSAqLworc3RhdGljIHN0cnVjdCBzaF9kbWFlX2NoYW5uZWwgc2g3Nzg1X2RtYWUwX2NoYW5uZWxzW10gPSB7CisJeworCQkub2Zmc2V0ID0gMCwKKwkJLmRtYXJzID0gMCwKKwkJLmRtYXJzX2JpdCA9IDAsCisJfSwgeworCQkub2Zmc2V0ID0gMHgxMCwKKwkJLmRtYXJzID0gMCwKKwkJLmRtYXJzX2JpdCA9IDgsCisJfSwgeworCQkub2Zmc2V0ID0gMHgyMCwKKwkJLmRtYXJzID0gNCwKKwkJLmRtYXJzX2JpdCA9IDAsCisJfSwgeworCQkub2Zmc2V0ID0gMHgzMCwKKwkJLmRtYXJzID0gNCwKKwkJLmRtYXJzX2JpdCA9IDgsCisJfSwgeworCQkub2Zmc2V0ID0gMHg1MCwKKwkJLmRtYXJzID0gOCwKKwkJLmRtYXJzX2JpdCA9IDAsCisJfSwgeworCQkub2Zmc2V0ID0gMHg2MCwKKwkJLmRtYXJzID0gOCwKKwkJLmRtYXJzX2JpdCA9IDgsCisJfQogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG1hX2RldmljZSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2hfZG1hZV9jaGFubmVsIHNoNzc4NV9kbWFlMV9jaGFubmVsc1tdID0geworCXsKKwkJLm9mZnNldCA9IDAsCisJfSwgeworCQkub2Zmc2V0ID0gMHgxMCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDIwLAorCX0sIHsKKwkJLm9mZnNldCA9IDB4MzAsCisJfSwgeworCQkub2Zmc2V0ID0gMHg1MCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDYwLAorCX0KK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHNfc2hpZnRbXSA9IFRTX1NISUZUOworCitzdGF0aWMgc3RydWN0IHNoX2RtYWVfcGRhdGEgZG1hMF9wbGF0Zm9ybV9kYXRhID0geworCS5jaGFubmVsCT0gc2g3Nzg1X2RtYWUwX2NoYW5uZWxzLAorCS5jaGFubmVsX251bQk9IEFSUkFZX1NJWkUoc2g3Nzg1X2RtYWUwX2NoYW5uZWxzKSwKKwkudHNfbG93X3NoaWZ0CT0gQ0hDUl9UU19MT1dfU0hJRlQsCisJLnRzX2xvd19tYXNrCT0gQ0hDUl9UU19MT1dfTUFTSywKKwkudHNfaGlnaF9zaGlmdAk9IENIQ1JfVFNfSElHSF9TSElGVCwKKwkudHNfaGlnaF9tYXNrCT0gQ0hDUl9UU19ISUdIX01BU0ssCisJLnRzX3NoaWZ0CT0gdHNfc2hpZnQsCisJLnRzX3NoaWZ0X251bQk9IEFSUkFZX1NJWkUodHNfc2hpZnQpLAorCS5kbWFvcl9pbml0CT0gRE1BT1JfSU5JVCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSBkbWExX3BsYXRmb3JtX2RhdGEgPSB7CisJLmNoYW5uZWwJPSBzaDc3ODVfZG1hZTFfY2hhbm5lbHMsCisJLmNoYW5uZWxfbnVtCT0gQVJSQVlfU0laRShzaDc3ODVfZG1hZTFfY2hhbm5lbHMpLAorCS50c19sb3dfc2hpZnQJPSBDSENSX1RTX0xPV19TSElGVCwKKwkudHNfbG93X21hc2sJPSBDSENSX1RTX0xPV19NQVNLLAorCS50c19oaWdoX3NoaWZ0CT0gQ0hDUl9UU19ISUdIX1NISUZULAorCS50c19oaWdoX21hc2sJPSBDSENSX1RTX0hJR0hfTUFTSywKKwkudHNfc2hpZnQJPSB0c19zaGlmdCwKKwkudHNfc2hpZnRfbnVtCT0gQVJSQVlfU0laRSh0c19zaGlmdCksCisJLmRtYW9yX2luaXQJPSBETUFPUl9JTklULAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3ODVfZG1hZTBfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkvKiBDaGFubmVsIHJlZ2lzdGVycyBhbmQgRE1BT1IgKi8KKwkJLnN0YXJ0CT0gMHhmYzgwODAyMCwKKwkJLmVuZAk9IDB4ZmM4MDgwOGYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkvKiBETUFSU3ggKi8KKwkJLnN0YXJ0CT0gMHhmYzgwOTAwMCwKKwkJLmVuZAk9IDB4ZmM4MDkwMGIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkvKiBSZWFsIERNQSBlcnJvciBJUlEgaXMgMzksIGFuZCBjaGFubmVsIElSUXMgYXJlIDMzLTM4ICovCisJCS5zdGFydAk9IDMzLAorCQkuZW5kCT0gMzMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfU0hBUkVBQkxFLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc4NV9kbWFlMV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS8qIENoYW5uZWwgcmVnaXN0ZXJzIGFuZCBETUFPUiAqLworCQkuc3RhcnQJPSAweGZjYzA4MDIwLAorCQkuZW5kCT0gMHhmY2MwODA4ZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwkvKiBETUFDMSBoYXMgbm8gRE1BUlMgKi8KKwl7CisJCS8qIFJlYWwgRE1BIGVycm9yIElSUSBpcyA1OCwgYW5kIGNoYW5uZWwgSVJRcyBhcmUgNTItNTcgKi8KKwkJLnN0YXJ0CT0gNTIsCisJCS5lbmQJPSA1MiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9TSEFSRUFCTEUsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtYTBfZGV2aWNlID0gewogCS5uYW1lICAgICAgICAgICA9ICJzaC1kbWEtZW5naW5lIiwKLQkuaWQgICAgICAgICAgICAgPSAtMSwKKwkuaWQgICAgICAgICAgICAgPSAwLAorCS5yZXNvdXJjZQk9IHNoNzc4NV9kbWFlMF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNoNzc4NV9kbWFlMF9yZXNvdXJjZXMpLAogCS5kZXYgICAgICAgICAgICA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgID0gJmRtYV9wbGF0Zm9ybV9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQk9ICZkbWEwX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtYTFfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1kbWEtZW5naW5lIiwKKwkuaWQJCT0gMSwKKwkucmVzb3VyY2UJPSBzaDc3ODVfZG1hZTFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzaDc3ODVfZG1hZTFfcmVzb3VyY2VzKSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZG1hMV9wbGF0Zm9ybV9kYXRhLAogCX0sCiB9OwogCkBAIC0zMjAsNyArNDM5LDggQEAKIAkmdG11M19kZXZpY2UsCiAJJnRtdTRfZGV2aWNlLAogCSZ0bXU1X2RldmljZSwKLQkmZG1hX2RldmljZSwKKwkmZG1hMF9kZXZpY2UsCisJJmRtYTFfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc2g3Nzg1X2RldmljZXNfc2V0dXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2h3X2JyZWFrcG9pbnQuYyBiL2FyY2gvc2gva2VybmVsL2h3X2JyZWFrcG9pbnQuYwppbmRleCBlMmYxNzUzLi42NzVlZWE3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9od19icmVha3BvaW50LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCkBAIC0xNDMsMjYgKzE0Myw2IEBACiAJcmV0dXJuICh2YSA+PSBUQVNLX1NJWkUpICYmICgodmEgKyBsZW4gLSAxKSA+PSBUQVNLX1NJWkUpOwogfQogCi0vKgotICogU3RvcmUgYSBicmVha3BvaW50J3MgZW5jb2RlZCBhZGRyZXNzLCBsZW5ndGgsIGFuZCB0eXBlLgotICovCi1zdGF0aWMgaW50IGFyY2hfc3RvcmVfaW5mbyhzdHJ1Y3QgcGVyZl9ldmVudCAqYnApCi17Ci0Jc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCAqaW5mbyA9IGNvdW50ZXJfYXJjaF9icChicCk7Ci0KLQkvKgotCSAqIFVzZXItc3BhY2UgcmVxdWVzdHMgd2lsbCBhbHdheXMgaGF2ZSB0aGUgYWRkcmVzcyBmaWVsZCBwb3B1bGF0ZWQKLQkgKiBGb3Iga2VybmVsLWFkZHJlc3NlcywgZWl0aGVyIHRoZSBhZGRyZXNzIG9yIHN5bWJvbCBuYW1lIGNhbiBiZQotCSAqIHNwZWNpZmllZC4KLQkgKi8KLQlpZiAoaW5mby0+bmFtZSkKLQkJaW5mby0+YWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKWthbGxzeW1zX2xvb2t1cF9uYW1lKGluZm8tPm5hbWUpOwotCWlmIChpbmZvLT5hZGRyZXNzKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAtRUlOVkFMOwotfQotCiBpbnQgYXJjaF9icF9nZW5lcmljX2ZpZWxkcyhpbnQgc2hfbGVuLCBpbnQgc2hfdHlwZSwKIAkJCSAgIGludCAqZ2VuX2xlbiwgaW50ICpnZW5fdHlwZSkKIHsKQEAgLTI3NiwxMCArMjU2LDEyIEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0ID0gYXJjaF9zdG9yZV9pbmZvKGJwKTsKLQotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OworCS8qCisJICogRm9yIGtlcm5lbC1hZGRyZXNzZXMsIGVpdGhlciB0aGUgYWRkcmVzcyBvciBzeW1ib2wgbmFtZSBjYW4gYmUKKwkgKiBzcGVjaWZpZWQuCisJICovCisJaWYgKGluZm8tPm5hbWUpCisJCWluZm8tPmFkZHJlc3MgPSAodW5zaWduZWQgbG9uZylrYWxsc3ltc19sb29rdXBfbmFtZShpbmZvLT5uYW1lKTsKIAogCS8qCiAJICogQ2hlY2sgdGhhdCB0aGUgbG93LW9yZGVyIGJpdHMgb2YgdGhlIGFkZHJlc3MgYXJlIGFwcHJvcHJpYXRlCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwppbmRleCAzNDU5ZTcwLi44ODcwZDZiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvc2gva2VybmVsL3NldHVwLmMKQEAgLTQ0Myw3ICs0NDMsNyBAQAogCiAJbm9kZXNfY2xlYXIobm9kZV9vbmxpbmVfbWFwKTsKIAotCS8qIFNldHVwIGJvb3RtZW0gd2l0aCBhdmFpbGFibGUgUkFNICovCisJcG1iX2luaXQoKTsKIAlsbWJfaW5pdCgpOwogCXNldHVwX21lbW9yeSgpOwogCXNwYXJzZV9pbml0KCk7CkBAIC00NTIsNyArNDUyLDYgQEAKIAljb25zd2l0Y2hwID0gJmR1bW15X2NvbjsKICNlbmRpZgogCXBhZ2luZ19pbml0KCk7Ci0JcG1iX2luaXQoKTsKIAogCWlvcmVtYXBfZml4ZWRfaW5pdCgpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lLmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lLmMKaW5kZXggOTUzZmExNi4uOGEwMDcyZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWUuYwpAQCAtMzksMTIgKzM5LDEyIEBACiB2b2lkICgqcnRjX3NoX2dldF90aW1lKShzdHJ1Y3QgdGltZXNwZWMgKikgPSBudWxsX3J0Y19nZXRfdGltZTsKIGludCAoKnJ0Y19zaF9zZXRfdGltZSkoY29uc3QgdGltZV90KSA9IG51bGxfcnRjX3NldF90aW1lOwogCi0jaWZkZWYgQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEUKIHZvaWQgcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKHN0cnVjdCB0aW1lc3BlYyAqdHMpCiB7CiAJcnRjX3NoX2dldF90aW1lKHRzKTsKIH0KIAorI2lmZGVmIENPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFCiBpbnQgdXBkYXRlX3BlcnNpc3RlbnRfY2xvY2soc3RydWN0IHRpbWVzcGVjIG5vdykKIHsKIAlyZXR1cm4gcnRjX3NoX3NldF90aW1lKG5vdy50dl9zZWMpOwpAQCAtMTEzLDkgKzExMyw1IEBACiAJaHdibGtfaW5pdCgpOwogCWNsa19pbml0KCk7CiAKLQlydGNfc2hfZ2V0X3RpbWUoJnh0aW1lKTsKLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmd2FsbF90b19tb25vdG9uaWMsCi0JCQkJLXh0aW1lLnR2X3NlYywgLXh0aW1lLnR2X25zZWMpOwotCiAJbGF0ZV90aW1lX2luaXQgPSBzaF9sYXRlX3RpbWVfaW5pdDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbGliL2xpYmdjYy5oIGIvYXJjaC9zaC9saWIvbGliZ2NjLmgKaW5kZXggM2YxOWQxYy4uMDU5MDlkNTggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbGliL2xpYmdjYy5oCisrKyBiL2FyY2gvc2gvbGliL2xpYmdjYy5oCkBAIC0xNyw4ICsxNyw3IEBACiAjZXJyb3IgSSBmZWVsIHNpY2suCiAjZW5kaWYKIAotdHlwZWRlZiB1bmlvbgotewordHlwZWRlZiB1bmlvbiB7CiAJc3RydWN0IERXc3RydWN0IHM7CiAJbG9uZyBsb25nIGxsOwogfSBEV3VuaW9uOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9pb3JlbWFwLmMgYi9hcmNoL3NoL21tL2lvcmVtYXAuYwppbmRleCBjNjhkMmQ3Li4xYWIyMzg1IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2lvcmVtYXAuYworKysgYi9hcmNoL3NoL21tL2lvcmVtYXAuYwpAQCAtMzQsMTEgKzM0LDEyIEBACiAgKiBjYWxsZXIgc2hvdWxkbid0IG5lZWQgdG8ga25vdyB0aGF0IHNtYWxsIGRldGFpbC4KICAqLwogdm9pZCBfX2lvbWVtICogX19pbml0X3JlZm9rCi1fX2lvcmVtYXBfY2FsbGVyKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCitfX2lvcmVtYXBfY2FsbGVyKHBoeXNfYWRkcl90IHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkgcGdwcm90X3QgcGdwcm90LCB2b2lkICpjYWxsZXIpCiB7CiAJc3RydWN0IHZtX3N0cnVjdCAqYXJlYTsKIAl1bnNpZ25lZCBsb25nIG9mZnNldCwgbGFzdF9hZGRyLCBhZGRyLCBvcmlnX2FkZHI7CisJdm9pZCBfX2lvbWVtICptYXBwZWQ7CiAKIAkvKiBEb24ndCBhbGxvdyB3cmFwYXJvdW5kIG9yIHplcm8gc2l6ZSAqLwogCWxhc3RfYWRkciA9IHBoeXNfYWRkciArIHNpemUgLSAxOwpAQCAtNDYsNiArNDcsMjAgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKgorCSAqIElmIHdlIGNhbid0IHlldCB1c2UgdGhlIHJlZ3VsYXIgYXBwcm9hY2gsIGdvIHRoZSBmaXhtYXAgcm91dGUuCisJICovCisJaWYgKCFtZW1faW5pdF9kb25lKQorCQlyZXR1cm4gaW9yZW1hcF9maXhlZChwaHlzX2FkZHIsIHNpemUsIHBncHJvdCk7CisKKwkvKgorCSAqIEZpcnN0IHRyeSB0byByZW1hcCB0aHJvdWdoIHRoZSBQTUIuCisJICogUE1CIGVudHJpZXMgYXJlIGFsbCBwcmUtZmF1bHRlZC4KKwkgKi8KKwltYXBwZWQgPSBwbWJfcmVtYXBfY2FsbGVyKHBoeXNfYWRkciwgc2l6ZSwgcGdwcm90LCBjYWxsZXIpOworCWlmIChtYXBwZWQgJiYgIUlTX0VSUihtYXBwZWQpKQorCQlyZXR1cm4gbWFwcGVkOworCisJLyoKIAkgKiBNYXBwaW5ncyBoYXZlIHRvIGJlIHBhZ2UtYWxpZ25lZAogCSAqLwogCW9mZnNldCA9IHBoeXNfYWRkciAmIH5QQUdFX01BU0s7CkBAIC01MywxMiArNjgsNiBAQAogCXNpemUgPSBQQUdFX0FMSUdOKGxhc3RfYWRkcisxKSAtIHBoeXNfYWRkcjsKIAogCS8qCi0JICogSWYgd2UgY2FuJ3QgeWV0IHVzZSB0aGUgcmVndWxhciBhcHByb2FjaCwgZ28gdGhlIGZpeG1hcCByb3V0ZS4KLQkgKi8KLQlpZiAoIW1lbV9pbml0X2RvbmUpCi0JCXJldHVybiBpb3JlbWFwX2ZpeGVkKHBoeXNfYWRkciwgb2Zmc2V0LCBzaXplLCBwZ3Byb3QpOwotCi0JLyoKIAkgKiBPaywgZ28gZm9yIGl0Li4KIAkgKi8KIAlhcmVhID0gZ2V0X3ZtX2FyZWFfY2FsbGVyKHNpemUsIFZNX0lPUkVNQVAsIGNhbGxlcik7CkBAIC02NywzMyArNzYsMTAgQEAKIAlhcmVhLT5waHlzX2FkZHIgPSBwaHlzX2FkZHI7CiAJb3JpZ19hZGRyID0gYWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtPmFkZHI7CiAKLSNpZmRlZiBDT05GSUdfUE1CCi0JLyoKLQkgKiBGaXJzdCB0cnkgdG8gcmVtYXAgdGhyb3VnaCB0aGUgUE1CIG9uY2UgYSB2YWxpZCBWTUEgaGFzIGJlZW4KLQkgKiBlc3RhYmxpc2hlZC4gU21hbGxlciBhbGxvY2F0aW9ucyAob3IgdGhlIHJlc3Qgb2YgdGhlIHNpemUKLQkgKiByZW1haW5pbmcgYWZ0ZXIgYSBQTUIgbWFwcGluZyBkdWUgdG8gdGhlIHNpemUgbm90IGJlaW5nCi0JICogcGVyZmVjdGx5IGFsaWduZWQgb24gYSBQTUIgc2l6ZSBib3VuZGFyeSkgYXJlIHRoZW4gbWFwcGVkCi0JICogdGhyb3VnaCB0aGUgVVRMQiB1c2luZyBjb252ZW50aW9uYWwgcGFnZSB0YWJsZXMuCi0JICoKLQkgKiBQTUIgZW50cmllcyBhcmUgYWxsIHByZS1mYXVsdGVkLgotCSAqLwotCWlmICh1bmxpa2VseShwaHlzX2FkZHIgPj0gUDFTRUcpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgbWFwcGVkOwotCi0JCW1hcHBlZCA9IHBtYl9yZW1hcChhZGRyLCBwaHlzX2FkZHIsIHNpemUsIHBncHJvdCk7Ci0JCWlmIChsaWtlbHkobWFwcGVkKSkgewotCQkJYWRkcgkJKz0gbWFwcGVkOwotCQkJcGh5c19hZGRyCSs9IG1hcHBlZDsKLQkJCXNpemUJCS09IG1hcHBlZDsKLQkJfQorCWlmIChpb3JlbWFwX3BhZ2VfcmFuZ2UoYWRkciwgYWRkciArIHNpemUsIHBoeXNfYWRkciwgcGdwcm90KSkgeworCQl2dW5tYXAoKHZvaWQgKilvcmlnX2FkZHIpOworCQlyZXR1cm4gTlVMTDsKIAl9Ci0jZW5kaWYKLQotCWlmIChsaWtlbHkoc2l6ZSkpCi0JCWlmIChpb3JlbWFwX3BhZ2VfcmFuZ2UoYWRkciwgYWRkciArIHNpemUsIHBoeXNfYWRkciwgcGdwcm90KSkgewotCQkJdnVubWFwKCh2b2lkICopb3JpZ19hZGRyKTsKLQkJCXJldHVybiBOVUxMOwotCQl9CiAKIAlyZXR1cm4gKHZvaWQgX19pb21lbSAqKShvZmZzZXQgKyAoY2hhciAqKW9yaWdfYWRkcik7CiB9CkBAIC0xMzMsMjMgKzExOSwxMSBAQAogCWlmIChpb3VubWFwX2ZpeGVkKGFkZHIpID09IDApCiAJCXJldHVybjsKIAotI2lmZGVmIENPTkZJR19QTUIKIAkvKgotCSAqIFB1cmdlIGFueSBQTUIgZW50cmllcyB0aGF0IG1heSBoYXZlIGJlZW4gZXN0YWJsaXNoZWQgZm9yIHRoaXMKLQkgKiBtYXBwaW5nLCB0aGVuIHByb2NlZWQgd2l0aCBjb252ZW50aW9uYWwgVk1BIHRlYXJkb3duLgotCSAqCi0JICogWFhYOiBOb3RlIHRoYXQgZHVlIHRvIHRoZSB3YXkgdGhhdCByZW1vdmVfdm1fYXJlYSgpIGRvZXMKLQkgKiBtYXRjaGluZyBvZiB0aGUgcmVzdWx0YW50IFZNQSwgd2UgYXJlbid0IGFibGUgdG8gZmFzdC1mb3J3YXJkCi0JICogdGhlIGFkZHJlc3MgcGFzdCB0aGUgUE1CIHNwYWNlIHVudGlsIHRoZSBlbmQgb2YgdGhlIFZNQSB3aGVyZQotCSAqIHRoZSBwYWdlIHRhYmxlcyByZXNpZGUuIEFzIHN1Y2gsIHVubWFwX3ZtX2FyZWEoKSB3aWxsIGJlCi0JICogZm9yY2VkIHRvIGxpbmVhcmx5IHNjYW4gb3ZlciB0aGUgYXJlYSB1bnRpbCBpdCBmaW5kcyB0aGUgcGFnZQotCSAqIHRhYmxlcyB3aGVyZSBQVEVzIHRoYXQgbmVlZCB0byBiZSB1bm1hcHBlZCBhY3R1YWxseSByZXNpZGUsCi0JICogd2hpY2ggaXMgZmFyIGZyb20gb3B0aW1hbC4gUGVyaGFwcyB3ZSBuZWVkIHRvIHVzZSBhIHNlcGFyYXRlCi0JICogVk1BIGZvciB0aGUgUE1CIG1hcHBpbmdzPwotCSAqCQkJCQktLSBQRk0uCisJICogSWYgdGhlIFBNQiBoYW5kbGVkIGl0LCB0aGVyZSdzIG5vdGhpbmcgZWxzZSB0byBkby4KIAkgKi8KLQlwbWJfdW5tYXAodmFkZHIpOwotI2VuZGlmCisJaWYgKHBtYl91bm1hcChhZGRyKSA9PSAwKQorCQlyZXR1cm47CiAKIAlwID0gcmVtb3ZlX3ZtX2FyZWEoKHZvaWQgKikodmFkZHIgJiBQQUdFX01BU0spKTsKIAlpZiAoIXApIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vaW9yZW1hcF9maXhlZC5jIGIvYXJjaC9zaC9tbS9pb3JlbWFwX2ZpeGVkLmMKaW5kZXggMGI3OGIxZS4uN2Y2ODJlNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9pb3JlbWFwX2ZpeGVkLmMKKysrIGIvYXJjaC9zaC9tbS9pb3JlbWFwX2ZpeGVkLmMKQEAgLTQ1LDE0ICs0NSwyMSBAQAogfQogCiB2b2lkIF9faW5pdCBfX2lvbWVtICoKLWlvcmVtYXBfZml4ZWQocmVzb3VyY2Vfc2l6ZV90IHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQoraW9yZW1hcF9maXhlZChwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCkKIHsKIAllbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHgwLCBpZHg7CiAJc3RydWN0IGlvcmVtYXBfbWFwICptYXA7CiAJdW5zaWduZWQgaW50IG5ycGFnZXM7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CiAJaW50IGksIHNsb3Q7CiAKKwkvKgorCSAqIE1hcHBpbmdzIGhhdmUgdG8gYmUgcGFnZS1hbGlnbmVkCisJICovCisJb2Zmc2V0ID0gcGh5c19hZGRyICYgflBBR0VfTUFTSzsKKwlwaHlzX2FkZHIgJj0gUEFHRV9NQVNLOworCXNpemUgPSBQQUdFX0FMSUdOKHBoeXNfYWRkciArIHNpemUpIC0gcGh5c19hZGRyOworCiAJc2xvdCA9IC0xOwogCWZvciAoaSA9IDA7IGkgPCBGSVhfTl9JT1JFTUFQUzsgaSsrKSB7CiAJCW1hcCA9ICZpb3JlbWFwX21hcHNbaV07CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL251bWEuYyBiL2FyY2gvc2gvbW0vbnVtYS5jCmluZGV4IDQyMmU5MjcuLjk2MWIzNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vbnVtYS5jCisrKyBiL2FyY2gvc2gvbW0vbnVtYS5jCkBAIC03NCw2ICs3NCw5IEBACiAJc3RhcnRfcGZuID0gc3RhcnQgPj4gUEFHRV9TSElGVDsKIAllbmRfcGZuID0gZW5kID4+IFBBR0VfU0hJRlQ7CiAKKwlwbWJfYm9sdF9tYXBwaW5nKCh1bnNpZ25lZCBsb25nKV9fdmEoc3RhcnQpLCBzdGFydCwgZW5kIC0gc3RhcnQsCisJCQkgUEFHRV9LRVJORUwpOworCiAJbG1iX2FkZChzdGFydCwgZW5kIC0gc3RhcnQpOwogCiAJX19hZGRfYWN0aXZlX3JhbmdlKG5pZCwgc3RhcnRfcGZuLCBlbmRfcGZuKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vcG1iLmMgYi9hcmNoL3NoL21tL3BtYi5jCmluZGV4IDE5OGJjZmYuLmE0NjYyZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vcG1iLmMKKysrIGIvYXJjaC9zaC9tbS9wbWIuYwpAQCAtMjMsNyArMjMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9yd2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTUyLDEyICs1MywyNCBAQAogCXN0cnVjdCBwbWJfZW50cnkgKmxpbms7CiB9OwogCitzdGF0aWMgc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJaW50IGZsYWc7Cit9IHBtYl9zaXplc1tdID0geworCXsgLnNpemUJPSBTWl81MTJNLCAuZmxhZyA9IFBNQl9TWl81MTJNLCB9LAorCXsgLnNpemUgPSBTWl8xMjhNLCAuZmxhZyA9IFBNQl9TWl8xMjhNLCB9LAorCXsgLnNpemUgPSBTWl82NE0sICAuZmxhZyA9IFBNQl9TWl82NE0sICB9LAorCXsgLnNpemUgPSBTWl8xNk0sICAuZmxhZyA9IFBNQl9TWl8xNk0sICB9LAorfTsKKwogc3RhdGljIHZvaWQgcG1iX3VubWFwX2VudHJ5KHN0cnVjdCBwbWJfZW50cnkgKiwgaW50IGRlcHRoKTsKIAogc3RhdGljIERFRklORV9SV0xPQ0socG1iX3J3bG9jayk7CiBzdGF0aWMgc3RydWN0IHBtYl9lbnRyeSBwbWJfZW50cnlfbGlzdFtOUl9QTUJfRU5UUklFU107CiBzdGF0aWMgREVDTEFSRV9CSVRNQVAocG1iX21hcCwgTlJfUE1CX0VOVFJJRVMpOwogCitzdGF0aWMgdW5zaWduZWQgaW50IHBtYl9pb21hcHBpbmdfZW5hYmxlZDsKKwogc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nIG1rX3BtYl9lbnRyeSh1bnNpZ25lZCBpbnQgZW50cnkpCiB7CiAJcmV0dXJuIChlbnRyeSAmIFBNQl9FX01BU0spIDw8IFBNQl9FX1NISUZUOwpAQCAtNzMsNiArODYsMTQyIEBACiAJcmV0dXJuIG1rX3BtYl9lbnRyeShlbnRyeSkgfCBQTUJfREFUQTsKIH0KIAorc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQgcG1iX3Bwbl9pbl9yYW5nZSh1bnNpZ25lZCBsb25nIHBwbikKK3sKKwlyZXR1cm4gcHBuID49IF9fcGEobWVtb3J5X3N0YXJ0KSAmJiBwcG4gPCBfX3BhKG1lbW9yeV9lbmQpOworfQorCisvKgorICogRW5zdXJlIHRoYXQgdGhlIFBNQiBlbnRyaWVzIG1hdGNoIG91ciBjYWNoZSBjb25maWd1cmF0aW9uLgorICoKKyAqIFdoZW4gd2UgYXJlIGluIDMyLWJpdCBhZGRyZXNzIGV4dGVuZGVkIG1vZGUsIENDUi5DQiBiZWNvbWVzCisgKiBpbnZhbGlkLCBzbyBjYXJlIG11c3QgYmUgdGFrZW4gdG8gbWFudWFsbHkgYWRqdXN0IGNhY2hlYWJsZQorICogdHJhbnNsYXRpb25zLgorICovCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgcG1iX2NhY2hlX2ZsYWdzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKyNpZiBkZWZpbmVkKENPTkZJR19DQUNIRV9PRkYpCisJZmxhZ3MgfD0gUE1CX1dUIHwgUE1CX1VCOworI2VsaWYgZGVmaW5lZChDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIKQorCWZsYWdzIHw9IFBNQl9DIHwgUE1CX1dUIHwgUE1CX1VCOworI2VsaWYgZGVmaW5lZChDT05GSUdfQ0FDSEVfV1JJVEVCQUNLKQorCWZsYWdzIHw9IFBNQl9DOworI2VuZGlmCisKKwlyZXR1cm4gZmxhZ3M7Cit9CisKKy8qCisgKiBDb252ZXJ0IHR5cGljYWwgcGdwcm90IHZhbHVlIHRvIHRoZSBQTUIgZXF1aXZhbGVudAorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcGdwcm90X3RvX3BtYl9mbGFncyhwZ3Byb3RfdCBwcm90KQoreworCXVuc2lnbmVkIGxvbmcgcG1iX2ZsYWdzID0gMDsKKwl1NjQgZmxhZ3MgPSBwZ3Byb3RfdmFsKHByb3QpOworCisJaWYgKGZsYWdzICYgX1BBR0VfQ0FDSEFCTEUpCisJCXBtYl9mbGFncyB8PSBQTUJfQzsKKwlpZiAoZmxhZ3MgJiBfUEFHRV9XVCkKKwkJcG1iX2ZsYWdzIHw9IFBNQl9XVCB8IFBNQl9VQjsKKworCXJldHVybiBwbWJfZmxhZ3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBwbWJfY2FuX21lcmdlKHN0cnVjdCBwbWJfZW50cnkgKmEsIHN0cnVjdCBwbWJfZW50cnkgKmIpCit7CisJcmV0dXJuIChiLT52cG4gPT0gKGEtPnZwbiArIGEtPnNpemUpKSAmJgorCSAgICAgICAoYi0+cHBuID09IChhLT5wcG4gKyBhLT5zaXplKSkgJiYKKwkgICAgICAgKGItPmZsYWdzID09IGEtPmZsYWdzKTsKK30KKworc3RhdGljIGJvb2wgcG1iX21hcHBpbmdfZXhpc3RzKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHBoeXNfYWRkcl90IHBoeXMsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWludCBpOworCisJcmVhZF9sb2NrKCZwbWJfcndsb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtYl9lbnRyeV9saXN0KTsgaSsrKSB7CisJCXN0cnVjdCBwbWJfZW50cnkgKnBtYmUsICppdGVyOworCQl1bnNpZ25lZCBsb25nIHNwYW47CisKKwkJaWYgKCF0ZXN0X2JpdChpLCBwbWJfbWFwKSkKKwkJCWNvbnRpbnVlOworCisJCXBtYmUgPSAmcG1iX2VudHJ5X2xpc3RbaV07CisKKwkJLyoKKwkJICogU2VlIGlmIFZQTiBhbmQgUFBOIGFyZSBib3VuZGVkIGJ5IGFuIGV4aXN0aW5nIG1hcHBpbmcuCisJCSAqLworCQlpZiAoKHZhZGRyIDwgcG1iZS0+dnBuKSB8fCAodmFkZHIgPj0gKHBtYmUtPnZwbiArIHBtYmUtPnNpemUpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoKHBoeXMgPCBwbWJlLT5wcG4pIHx8IChwaHlzID49IChwbWJlLT5wcG4gKyBwbWJlLT5zaXplKSkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBOb3cgc2VlIGlmIHdlJ3JlIGluIHJhbmdlIG9mIGEgc2ltcGxlIG1hcHBpbmcuCisJCSAqLworCQlpZiAoc2l6ZSA8PSBwbWJlLT5zaXplKSB7CisJCQlyZWFkX3VubG9jaygmcG1iX3J3bG9jayk7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCXNwYW4gPSBwbWJlLT5zaXplOworCisJCS8qCisJCSAqIEZpbmFsbHkgZm9yIHNpemVzIHRoYXQgaW52b2x2ZSBjb21wb3VuZCBtYXBwaW5ncywgd2FsaworCQkgKiB0aGUgY2hhaW4uCisJCSAqLworCQlmb3IgKGl0ZXIgPSBwbWJlLT5saW5rOyBpdGVyOyBpdGVyID0gaXRlci0+bGluaykKKwkJCXNwYW4gKz0gaXRlci0+c2l6ZTsKKworCQkvKgorCQkgKiBOb3RoaW5nIGVsc2UgdG8gZG8gaWYgdGhlIHJhbmdlIHJlcXVpcmVtZW50cyBhcmUgbWV0LgorCQkgKi8KKwkJaWYgKHNpemUgPD0gc3BhbikgeworCQkJcmVhZF91bmxvY2soJnBtYl9yd2xvY2spOworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKKwlyZWFkX3VubG9jaygmcG1iX3J3bG9jayk7CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBwbWJfc2l6ZV92YWxpZCh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbWJfc2l6ZXMpOyBpKyspCisJCWlmIChwbWJfc2l6ZXNbaV0uc2l6ZSA9PSBzaXplKQorCQkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBwbWJfYWRkcl92YWxpZCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlyZXR1cm4gKGFkZHIgPj0gUDFTRUcgJiYgKGFkZHIgKyBzaXplIC0gMSkgPCBQM1NFRyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBwbWJfcHJvdF92YWxpZChwZ3Byb3RfdCBwcm90KQoreworCXJldHVybiAocGdwcm90X3ZhbChwcm90KSAmIF9QQUdFX1VTRVIpID09IDA7Cit9CisKK3N0YXRpYyBpbnQgcG1iX3NpemVfdG9fZmxhZ3ModW5zaWduZWQgbG9uZyBzaXplKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG1iX3NpemVzKTsgaSsrKQorCQlpZiAocG1iX3NpemVzW2ldLnNpemUgPT0gc2l6ZSkKKwkJCXJldHVybiBwbWJfc2l6ZXNbaV0uZmxhZzsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHBtYl9hbGxvY19lbnRyeSh2b2lkKQogewogCWludCBwb3M7CkBAIC0xNDAsMzMgKzI4OSwyMiBAQAogfQogCiAvKgotICogRW5zdXJlIHRoYXQgdGhlIFBNQiBlbnRyaWVzIG1hdGNoIG91ciBjYWNoZSBjb25maWd1cmF0aW9uLgotICoKLSAqIFdoZW4gd2UgYXJlIGluIDMyLWJpdCBhZGRyZXNzIGV4dGVuZGVkIG1vZGUsIENDUi5DQiBiZWNvbWVzCi0gKiBpbnZhbGlkLCBzbyBjYXJlIG11c3QgYmUgdGFrZW4gdG8gbWFudWFsbHkgYWRqdXN0IGNhY2hlYWJsZQotICogdHJhbnNsYXRpb25zLgotICovCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgcG1iX2NhY2hlX2ZsYWdzKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19DQUNIRV9XUklURVRIUk9VR0gpCi0JZmxhZ3MgfD0gUE1CX0MgfCBQTUJfV1QgfCBQTUJfVUI7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DQUNIRV9XUklURUJBQ0spCi0JZmxhZ3MgfD0gUE1CX0M7Ci0jZW5kaWYKLQotCXJldHVybiBmbGFnczsKLX0KLQotLyoKICAqIE11c3QgYmUgcnVuIHVuY2FjaGVkLgogICovCiBzdGF0aWMgdm9pZCBfX3NldF9wbWJfZW50cnkoc3RydWN0IHBtYl9lbnRyeSAqcG1iZSkKIHsKLQl3cml0ZWxfdW5jYWNoZWQocG1iZS0+dnBuIHwgUE1CX1YsIG1rX3BtYl9hZGRyKHBtYmUtPmVudHJ5KSk7Ci0Jd3JpdGVsX3VuY2FjaGVkKHBtYmUtPnBwbiB8IHBtYmUtPmZsYWdzIHwgUE1CX1YsCi0JCQlta19wbWJfZGF0YShwbWJlLT5lbnRyeSkpOworCXVuc2lnbmVkIGxvbmcgYWRkciwgZGF0YTsKKworCWFkZHIgPSBta19wbWJfYWRkcihwbWJlLT5lbnRyeSk7CisJZGF0YSA9IG1rX3BtYl9kYXRhKHBtYmUtPmVudHJ5KTsKKworCWp1bXBfdG9fdW5jYWNoZWQoKTsKKworCS8qIFNldCBWLWJpdCAqLworCV9fcmF3X3dyaXRlbChwbWJlLT52cG4gfCBQTUJfViwgYWRkcik7CisJX19yYXdfd3JpdGVsKHBtYmUtPnBwbiB8IHBtYmUtPmZsYWdzIHwgUE1CX1YsIGRhdGEpOworCisJYmFja190b19jYWNoZWQoKTsKIH0KIAogc3RhdGljIHZvaWQgX19jbGVhcl9wbWJfZW50cnkoc3RydWN0IHBtYl9lbnRyeSAqcG1iZSkKQEAgLTE5NCwxNDQgKzMzMiwxNTUgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWJlLT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQlpbnQgZmxhZzsKLX0gcG1iX3NpemVzW10gPSB7Ci0JeyAuc2l6ZQk9IFNaXzUxMk0sIC5mbGFnID0gUE1CX1NaXzUxMk0sIH0sCi0JeyAuc2l6ZSA9IFNaXzEyOE0sIC5mbGFnID0gUE1CX1NaXzEyOE0sIH0sCi0JeyAuc2l6ZSA9IFNaXzY0TSwgIC5mbGFnID0gUE1CX1NaXzY0TSwgIH0sCi0JeyAuc2l6ZSA9IFNaXzE2TSwgIC5mbGFnID0gUE1CX1NaXzE2TSwgIH0sCi19OwotCi1sb25nIHBtYl9yZW1hcCh1bnNpZ25lZCBsb25nIHZhZGRyLCB1bnNpZ25lZCBsb25nIHBoeXMsCi0JICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCkKK2ludCBwbWJfYm9sdF9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHBoeXNfYWRkcl90IHBoeXMsCisJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQogewogCXN0cnVjdCBwbWJfZW50cnkgKnBtYnAsICpwbWJlOwotCXVuc2lnbmVkIGxvbmcgd2FudGVkOwotCWludCBwbWJfZmxhZ3MsIGk7Ci0JbG9uZyBlcnI7Ci0JdTY0IGZsYWdzOworCXVuc2lnbmVkIGxvbmcgb3JpZ19hZGRyLCBvcmlnX3NpemU7CisJdW5zaWduZWQgbG9uZyBmbGFncywgcG1iX2ZsYWdzOworCWludCBpLCBtYXBwZWQ7CiAKLQlmbGFncyA9IHBncHJvdF92YWwocHJvdCk7CisJaWYgKCFwbWJfYWRkcl92YWxpZCh2YWRkciwgc2l6ZSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmIChwbWJfbWFwcGluZ19leGlzdHModmFkZHIsIHBoeXMsIHNpemUpKQorCQlyZXR1cm4gMDsKIAotCXBtYl9mbGFncyA9IFBNQl9XVCB8IFBNQl9VQjsKKwlvcmlnX2FkZHIgPSB2YWRkcjsKKwlvcmlnX3NpemUgPSBzaXplOwogCi0JLyogQ29udmVydCB0eXBpY2FsIHBncHJvdCB2YWx1ZSB0byB0aGUgUE1CIGVxdWl2YWxlbnQgKi8KLQlpZiAoZmxhZ3MgJiBfUEFHRV9DQUNIQUJMRSkgewotCQlwbWJfZmxhZ3MgfD0gUE1CX0M7CisJZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh2YWRkciwgdmFkZHIgKyBzaXplKTsKIAotCQlpZiAoKGZsYWdzICYgX1BBR0VfV1QpID09IDApCi0JCQlwbWJfZmxhZ3MgJj0gfihQTUJfV1QgfCBQTUJfVUIpOwotCX0KLQorCXBtYl9mbGFncyA9IHBncHJvdF90b19wbWJfZmxhZ3MocHJvdCk7CiAJcG1icCA9IE5VTEw7Ci0Jd2FudGVkID0gc2l6ZTsKIAotYWdhaW46Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG1iX3NpemVzKTsgaSsrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJZG8geworCQlmb3IgKGkgPSBtYXBwZWQgPSAwOyBpIDwgQVJSQVlfU0laRShwbWJfc2l6ZXMpOyBpKyspIHsKKwkJCWlmIChzaXplIDwgcG1iX3NpemVzW2ldLnNpemUpCisJCQkJY29udGludWU7CiAKLQkJaWYgKHNpemUgPCBwbWJfc2l6ZXNbaV0uc2l6ZSkKLQkJCWNvbnRpbnVlOworCQkJcG1iZSA9IHBtYl9hbGxvYyh2YWRkciwgcGh5cywgcG1iX2ZsYWdzIHwKKwkJCQkJIHBtYl9zaXplc1tpXS5mbGFnLCBQTUJfTk9fRU5UUlkpOworCQkJaWYgKElTX0VSUihwbWJlKSkgeworCQkJCXBtYl91bm1hcF9lbnRyeShwbWJwLCBtYXBwZWQpOworCQkJCXJldHVybiBQVFJfRVJSKHBtYmUpOworCQkJfQogCi0JCXBtYmUgPSBwbWJfYWxsb2ModmFkZHIsIHBoeXMsIHBtYl9mbGFncyB8IHBtYl9zaXplc1tpXS5mbGFnLAotCQkJCSBQTUJfTk9fRU5UUlkpOwotCQlpZiAoSVNfRVJSKHBtYmUpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKHBtYmUpOwotCQkJZ290byBvdXQ7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG1iZS0+bG9jaywgZmxhZ3MpOworCisJCQlwbWJlLT5zaXplID0gcG1iX3NpemVzW2ldLnNpemU7CisKKwkJCV9fc2V0X3BtYl9lbnRyeShwbWJlKTsKKworCQkJcGh5cwkrPSBwbWJlLT5zaXplOworCQkJdmFkZHIJKz0gcG1iZS0+c2l6ZTsKKwkJCXNpemUJLT0gcG1iZS0+c2l6ZTsKKworCQkJLyoKKwkJCSAqIExpbmsgYWRqYWNlbnQgZW50cmllcyB0aGF0IHNwYW4gbXVsdGlwbGUgUE1CCisJCQkgKiBlbnRyaWVzIGZvciBlYXNpZXIgdGVhci1kb3duLgorCQkJICovCisJCQlpZiAobGlrZWx5KHBtYnApKSB7CisJCQkJc3Bpbl9sb2NrKCZwbWJwLT5sb2NrKTsKKwkJCQlwbWJwLT5saW5rID0gcG1iZTsKKwkJCQlzcGluX3VubG9jaygmcG1icC0+bG9jayk7CisJCQl9CisKKwkJCXBtYnAgPSBwbWJlOworCisJCQkvKgorCQkJICogSW5zdGVhZCBvZiB0cnlpbmcgc21hbGxlciBzaXplcyBvbiBldmVyeQorCQkJICogaXRlcmF0aW9uIChldmVuIGlmIHdlIHN1Y2NlZWQgaW4gYWxsb2NhdGluZworCQkJICogc3BhY2UpLCB0cnkgdXNpbmcgcG1iX3NpemVzW2ldLnNpemUgYWdhaW4uCisJCQkgKi8KKwkJCWktLTsKKwkJCW1hcHBlZCsrOworCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWJlLT5sb2NrLCBmbGFncyk7CiAJCX0KKwl9IHdoaWxlIChzaXplID49IFNaXzE2TSk7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBtYmUtPmxvY2ssIGZsYWdzKTsKKwlmbHVzaF9jYWNoZV92bWFwKG9yaWdfYWRkciwgb3JpZ19hZGRyICsgb3JpZ19zaXplKTsKIAotCQlfX3NldF9wbWJfZW50cnkocG1iZSk7Ci0KLQkJcGh5cwkrPSBwbWJfc2l6ZXNbaV0uc2l6ZTsKLQkJdmFkZHIJKz0gcG1iX3NpemVzW2ldLnNpemU7Ci0JCXNpemUJLT0gcG1iX3NpemVzW2ldLnNpemU7Ci0KLQkJcG1iZS0+c2l6ZSA9IHBtYl9zaXplc1tpXS5zaXplOwotCi0JCS8qCi0JCSAqIExpbmsgYWRqYWNlbnQgZW50cmllcyB0aGF0IHNwYW4gbXVsdGlwbGUgUE1CIGVudHJpZXMKLQkJICogZm9yIGVhc2llciB0ZWFyLWRvd24uCi0JCSAqLwotCQlpZiAobGlrZWx5KHBtYnApKSB7Ci0JCQlzcGluX2xvY2soJnBtYnAtPmxvY2spOwotCQkJcG1icC0+bGluayA9IHBtYmU7Ci0JCQlzcGluX3VubG9jaygmcG1icC0+bG9jayk7Ci0JCX0KLQotCQlwbWJwID0gcG1iZTsKLQotCQkvKgotCQkgKiBJbnN0ZWFkIG9mIHRyeWluZyBzbWFsbGVyIHNpemVzIG9uIGV2ZXJ5IGl0ZXJhdGlvbgotCQkgKiAoZXZlbiBpZiB3ZSBzdWNjZWVkIGluIGFsbG9jYXRpbmcgc3BhY2UpLCB0cnkgdXNpbmcKLQkJICogcG1iX3NpemVzW2ldLnNpemUgYWdhaW4uCi0JCSAqLwotCQlpLS07Ci0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1iZS0+bG9jaywgZmxhZ3MpOwotCX0KLQotCWlmIChzaXplID49IFNaXzE2TSkKLQkJZ290byBhZ2FpbjsKLQotCXJldHVybiB3YW50ZWQgLSBzaXplOwotCi1vdXQ6Ci0JcG1iX3VubWFwX2VudHJ5KHBtYnAsIE5SX1BNQl9FTlRSSUVTKTsKLQotCXJldHVybiBlcnI7CisJcmV0dXJuIDA7CiB9CiAKLXZvaWQgcG1iX3VubWFwKHVuc2lnbmVkIGxvbmcgYWRkcikKK3ZvaWQgX19pb21lbSAqcG1iX3JlbWFwX2NhbGxlcihwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgICAgICAgcGdwcm90X3QgcHJvdCwgdm9pZCAqY2FsbGVyKQoreworCXVuc2lnbmVkIGxvbmcgdmFkZHI7CisJcGh5c19hZGRyX3Qgb2Zmc2V0LCBsYXN0X2FkZHI7CisJcGh5c19hZGRyX3QgYWxpZ25fbWFzazsKKwl1bnNpZ25lZCBsb25nIGFsaWduZWQ7CisJc3RydWN0IHZtX3N0cnVjdCAqYXJlYTsKKwlpbnQgaSwgcmV0OworCisJaWYgKCFwbWJfaW9tYXBwaW5nX2VuYWJsZWQpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBTbWFsbCBtYXBwaW5ncyBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIFRMQi4KKwkgKi8KKwlpZiAoc2l6ZSA8IFNaXzE2TSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJaWYgKCFwbWJfcHJvdF92YWxpZChwcm90KSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbWJfc2l6ZXMpOyBpKyspCisJCWlmIChzaXplID49IHBtYl9zaXplc1tpXS5zaXplKQorCQkJYnJlYWs7CisKKwlsYXN0X2FkZHIgPSBwaHlzICsgc2l6ZTsKKwlhbGlnbl9tYXNrID0gfihwbWJfc2l6ZXNbaV0uc2l6ZSAtIDEpOworCW9mZnNldCA9IHBoeXMgJiB+YWxpZ25fbWFzazsKKwlwaHlzICY9IGFsaWduX21hc2s7CisJYWxpZ25lZCA9IEFMSUdOKGxhc3RfYWRkciwgcG1iX3NpemVzW2ldLnNpemUpIC0gcGh5czsKKworCS8qCisJICogWFhYOiBUaGlzIHNob3VsZCByZWFsbHkgc3RhcnQgZnJvbSB1bmNhY2hlZF9lbmQsIGJ1dCB0aGlzCisJICogY2F1c2VzIHRoZSBNTVUgdG8gcmVzZXQsIHNvIGZvciBub3cgd2UgcmVzdHJpY3QgaXQgdG8gdGhlCisJICogMHhiMDAwLi4uMHhjMDAwIHJhbmdlLgorCSAqLworCWFyZWEgPSBfX2dldF92bV9hcmVhX2NhbGxlcihhbGlnbmVkLCBWTV9JT1JFTUFQLCAweGIwMDAwMDAwLAorCQkJCSAgICBQM1NFRywgY2FsbGVyKTsKKwlpZiAoIWFyZWEpCisJCXJldHVybiBOVUxMOworCisJYXJlYS0+cGh5c19hZGRyID0gcGh5czsKKwl2YWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtPmFkZHI7CisKKwlyZXQgPSBwbWJfYm9sdF9tYXBwaW5nKHZhZGRyLCBwaHlzLCBzaXplLCBwcm90KTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCisJcmV0dXJuICh2b2lkIF9faW9tZW0gKikob2Zmc2V0ICsgKGNoYXIgKil2YWRkcik7Cit9CisKK2ludCBwbWJfdW5tYXAodm9pZCBfX2lvbWVtICphZGRyKQogewogCXN0cnVjdCBwbWJfZW50cnkgKnBtYmUgPSBOVUxMOwotCWludCBpOworCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSAodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWFkZHI7CisJaW50IGksIGZvdW5kID0gMDsKIAogCXJlYWRfbG9jaygmcG1iX3J3bG9jayk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbWJfZW50cnlfbGlzdCk7IGkrKykgewogCQlpZiAodGVzdF9iaXQoaSwgcG1iX21hcCkpIHsKIAkJCXBtYmUgPSAmcG1iX2VudHJ5X2xpc3RbaV07Ci0JCQlpZiAocG1iZS0+dnBuID09IGFkZHIpCisJCQlpZiAocG1iZS0+dnBuID09IHZhZGRyKSB7CisJCQkJZm91bmQgPSAxOwogCQkJCWJyZWFrOworCQkJfQogCQl9CiAJfQogCiAJcmVhZF91bmxvY2soJnBtYl9yd2xvY2spOwogCi0JcG1iX3VubWFwX2VudHJ5KHBtYmUsIE5SX1BNQl9FTlRSSUVTKTsKLX0KKwlpZiAoZm91bmQpIHsKKwkJcG1iX3VubWFwX2VudHJ5KHBtYmUsIE5SX1BNQl9FTlRSSUVTKTsKKwkJcmV0dXJuIDA7CisJfQogCi1zdGF0aWMgYm9vbCBwbWJfY2FuX21lcmdlKHN0cnVjdCBwbWJfZW50cnkgKmEsIHN0cnVjdCBwbWJfZW50cnkgKmIpCi17Ci0JcmV0dXJuIChiLT52cG4gPT0gKGEtPnZwbiArIGEtPnNpemUpKSAmJgotCSAgICAgICAoYi0+cHBuID09IChhLT5wcG4gKyBhLT5zaXplKSkgJiYKLQkgICAgICAgKGItPmZsYWdzID09IGEtPmZsYWdzKTsKLX0KLQotc3RhdGljIGJvb2wgcG1iX3NpemVfdmFsaWQodW5zaWduZWQgbG9uZyBzaXplKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG1iX3NpemVzKTsgaSsrKQotCQlpZiAocG1iX3NpemVzW2ldLnNpemUgPT0gc2l6ZSkKLQkJCXJldHVybiB0cnVlOwotCi0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW50IHBtYl9zaXplX3RvX2ZsYWdzKHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtYl9zaXplcyk7IGkrKykKLQkJaWYgKHBtYl9zaXplc1tpXS5zaXplID09IHNpemUpCi0JCQlyZXR1cm4gcG1iX3NpemVzW2ldLmZsYWc7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIHZvaWQgX19wbWJfdW5tYXBfZW50cnkoc3RydWN0IHBtYl9lbnRyeSAqcG1iZSwgaW50IGRlcHRoKQpAQCAtMzUxLDYgKzUwMCw4IEBACiAJCSAqLwogCQlfX2NsZWFyX3BtYl9lbnRyeShwbWJlKTsKIAorCQlmbHVzaF9jYWNoZV92dW5tYXAocG1iZS0+dnBuLCBwbWJlLT52cG4gKyBwbWJlLT5zaXplKTsKKwogCQlwbWJlID0gcG1ibGluay0+bGluazsKIAogCQlwbWJfZnJlZShwbWJsaW5rKTsKQEAgLTM2OSwxMSArNTIwLDYgQEAKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcG1iX3J3bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludCBwbWJfcHBuX2luX3JhbmdlKHVuc2lnbmVkIGxvbmcgcHBuKQotewotCXJldHVybiBwcG4gPj0gX19wYShtZW1vcnlfc3RhcnQpICYmIHBwbiA8IF9fcGEobWVtb3J5X2VuZCk7Ci19Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBwbWJfbm90aWZ5KHZvaWQpCiB7CiAJaW50IGk7CkBAIC02MjUsNiArNzcxLDE4IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGludCBfX2luaXQgZWFybHlfcG1iKGNoYXIgKnApCit7CisJaWYgKCFwKQorCQlyZXR1cm4gMDsKKworCWlmIChzdHJzdHIocCwgImlvbWFwIikpCisJCXBtYl9pb21hcHBpbmdfZW5hYmxlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJwbWIiLCBlYXJseV9wbWIpOworCiB2b2lkIF9faW5pdCBwbWJfaW5pdCh2b2lkKQogewogCS8qIFN5bmNocm9uaXplIHNvZnR3YXJlIHN0YXRlICovCkBAIC03MTMsNyArODcxLDcgQEAKIAogCXJldHVybiAwOwogfQotcG9zdGNvcmVfaW5pdGNhbGwocG1iX2RlYnVnZnNfaW5pdCk7CitzdWJzeXNfaW5pdGNhbGwocG1iX2RlYnVnZnNfaW5pdCk7CiAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgcG1iX3N5c2Rldl9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKZGlmZiAtLWdpdCBhL2FyY2gvdW0vLmdpdGlnbm9yZSBiL2FyY2gvdW0vLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzNkM2ExCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMyBAQAora2VybmVsL2NvbmZpZy5jCitrZXJuZWwvY29uZmlnLnRtcAora2VybmVsL3ZtbGludXgubGRzCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvbGluZS5jIGIvYXJjaC91bS9kcml2ZXJzL2xpbmUuYwppbmRleCBjZjhhOTdmLi42NGNkYTk1IDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvbGluZS5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9saW5lLmMKQEAgLTE4LDEwICsxOCwxMCBAQAogewogCXN0cnVjdCBjaGFuICpjaGFuID0gZGF0YTsKIAlzdHJ1Y3QgbGluZSAqbGluZSA9IGNoYW4tPmxpbmU7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGxpbmUtPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCiAJaWYgKGxpbmUpCi0JCWNoYW5faW50ZXJydXB0KCZsaW5lLT5jaGFuX2xpc3QsICZsaW5lLT50YXNrLCB0dHksIGlycSk7CisJCWNoYW5faW50ZXJydXB0KCZsaW5lLT5jaGFuX2xpc3QsICZsaW5lLT50YXNrLCBsaW5lLT50dHksIGlycSk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L01ha2VmaWxlIGIvYXJjaC91bS9zeXMtaTM4Ni9NYWtlZmlsZQppbmRleCAxYjU0OWJjLi44MDRiMjhkIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1pMzg2L01ha2VmaWxlCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvTWFrZWZpbGUKQEAgLTYsNiArNiw4IEBACiAJcHRyYWNlX3VzZXIubyBzZXRqbXAubyBzaWduYWwubyBzdHViLm8gc3R1Yl9zZWd2Lm8gc3lzY2FsbHMubyBzeXNycS5vIFwKIAlzeXNfY2FsbF90YWJsZS5vIHRscy5vCiAKK29iai0kKENPTkZJR19CSU5GTVRfRUxGKSArPSBlbGZjb3JlLm8KKwogc3ViYXJjaC1vYmoteSA9IGxpYi9zZW1hcGhvcmVfMzIubyBsaWIvc3RyaW5nXzMyLm8KIHN1YmFyY2gtb2JqLSQoQ09ORklHX0hJR0hNRU0pICs9IG1tL2hpZ2htZW1fMzIubwogc3ViYXJjaC1vYmotJChDT05GSUdfTU9EVUxFUykgKz0ga2VybmVsL21vZHVsZS5vCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L2FzbS9lbGYuaCBiL2FyY2gvdW0vc3lzLWkzODYvYXNtL2VsZi5oCmluZGV4IDc3MDg4NTQuLmU2NGNkNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvYXNtL2VsZi5oCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvYXNtL2VsZi5oCkBAIC0xMTYsNDcgKzExNiw0IEBACiAJfQkJCQkJCQlcCiB9IHdoaWxlICgwKQogCi0vKgotICogVGhlc2UgbWFjcm9zIHBhcmFtZXRlcml6ZSBlbGZfY29yZV9kdW1wIGluIGZzL2JpbmZtdF9lbGYuYyB0byB3cml0ZSBvdXQKLSAqIGV4dHJhIHNlZ21lbnRzIGNvbnRhaW5pbmcgdGhlIHZzeXNjYWxsIERTTyBjb250ZW50cy4gIER1bXBpbmcgaXRzCi0gKiBjb250ZW50cyBtYWtlcyBwb3N0LW1vcnRlbSBmdWxseSBpbnRlcnByZXRhYmxlIGxhdGVyIHdpdGhvdXQgbWF0Y2hpbmcgdXAKLSAqIHRoZSBzYW1lIGtlcm5lbCBhbmQgaGFyZHdhcmUgY29uZmlnIHRvIHNlZSB3aGF0IFBDIHZhbHVlcyBtZWFudC4KLSAqIER1bXBpbmcgaXRzIGV4dHJhIEVMRiBwcm9ncmFtIGhlYWRlcnMgaW5jbHVkZXMgYWxsIHRoZSBvdGhlciBpbmZvcm1hdGlvbgotICogYSBkZWJ1Z2dlciBuZWVkcyB0byBlYXNpbHkgZmluZCBob3cgdGhlIHZzeXNjYWxsIERTTyB3YXMgYmVpbmcgdXNlZC4KLSAqLwotI2RlZmluZSBFTEZfQ09SRV9FWFRSQV9QSERSUwkJCQkJCSAgICAgIFwKLQkodnN5c2NhbGxfZWhkciA/ICgoKHN0cnVjdCBlbGZoZHIgKil2c3lzY2FsbF9laGRyKS0+ZV9waG51bSkgOiAwICkKLQotI2RlZmluZSBFTEZfQ09SRV9XUklURV9FWFRSQV9QSERSUwkJCQkJICAgICAgXAotaWYgKCB2c3lzY2FsbF9laGRyICkgewkJCQkJCQkgICAgICBcCi0JY29uc3Qgc3RydWN0IGVsZmhkciAqY29uc3QgZWhkcnAgPSAoc3RydWN0IGVsZmhkciAqKXZzeXNjYWxsX2VoZHI7ICAgIFwKLQljb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKmNvbnN0IHBoZHJwID0JCQkJICAgICAgXAotCQkoY29uc3Qgc3RydWN0IGVsZl9waGRyICopICh2c3lzY2FsbF9laGRyICsgZWhkcnAtPmVfcGhvZmYpOyAgIFwKLQlpbnQgaTsJCQkJCQkJCSAgICAgIFwKLQlFbGYzMl9PZmYgb2ZzID0gMDsJCQkJCQkgICAgICBcCi0JZm9yIChpID0gMDsgaSA8IGVoZHJwLT5lX3BobnVtOyArK2kpIHsJCQkJICAgICAgXAotCQlzdHJ1Y3QgZWxmX3BoZHIgcGhkciA9IHBoZHJwW2ldOwkJCSAgICAgIFwKLQkJaWYgKHBoZHIucF90eXBlID09IFBUX0xPQUQpIHsJCQkJICAgICAgXAotCQkJb2ZzID0gcGhkci5wX29mZnNldCA9IG9mZnNldDsJCQkgICAgICBcCi0JCQlvZmZzZXQgKz0gcGhkci5wX2ZpbGVzejsJCQkgICAgICBcCi0JCX0JCQkJCQkJICAgICAgXAotCQllbHNlCQkJCQkJCSAgICAgIFwKLQkJCXBoZHIucF9vZmZzZXQgKz0gb2ZzOwkJCQkgICAgICBcCi0JCXBoZHIucF9wYWRkciA9IDA7IC8qIG1hdGNoIG90aGVyIGNvcmUgcGhkcnMgKi8JCSAgICAgIFwKLQkJRFVNUF9XUklURSgmcGhkciwgc2l6ZW9mKHBoZHIpKTsJCQkgICAgICBcCi0JfQkJCQkJCQkJICAgICAgXAotfQotI2RlZmluZSBFTEZfQ09SRV9XUklURV9FWFRSQV9EQVRBCQkJCQkgICAgICBcCi1pZiAoIHZzeXNjYWxsX2VoZHIgKSB7CQkJCQkJCSAgICAgIFwKLQljb25zdCBzdHJ1Y3QgZWxmaGRyICpjb25zdCBlaGRycCA9IChzdHJ1Y3QgZWxmaGRyICopdnN5c2NhbGxfZWhkcjsgICAgXAotCWNvbnN0IHN0cnVjdCBlbGZfcGhkciAqY29uc3QgcGhkcnAgPQkJCQkgICAgICBcCi0JCShjb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKikgKHZzeXNjYWxsX2VoZHIgKyBlaGRycC0+ZV9waG9mZik7ICAgXAotCWludCBpOwkJCQkJCQkJICAgICAgXAotCWZvciAoaSA9IDA7IGkgPCBlaGRycC0+ZV9waG51bTsgKytpKSB7CQkJCSAgICAgIFwKLQkJaWYgKHBoZHJwW2ldLnBfdHlwZSA9PSBQVF9MT0FEKQkJCQkgICAgICBcCi0JCQlEVU1QX1dSSVRFKCh2b2lkICopIHBoZHJwW2ldLnBfdmFkZHIsCQkgICAgICBcCi0JCQkJICAgcGhkcnBbaV0ucF9maWxlc3opOwkJCSAgICAgIFwKLQl9CQkJCQkJCQkgICAgICBcCi19Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9lbGZjb3JlLmMgYi9hcmNoL3VtL3N5cy1pMzg2L2VsZmNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmI0OWI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9lbGZjb3JlLmMKQEAgLTAsMCArMSw4MyBAQAorI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvcmVkdW1wLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL2VsZi5oPgorCisKK0VsZjMyX0hhbGYgZWxmX2NvcmVfZXh0cmFfcGhkcnModm9pZCkKK3sKKwlyZXR1cm4gdnN5c2NhbGxfZWhkciA/ICgoKHN0cnVjdCBlbGZoZHIgKil2c3lzY2FsbF9laGRyKS0+ZV9waG51bSkgOiAwOworfQorCitpbnQgZWxmX2NvcmVfd3JpdGVfZXh0cmFfcGhkcnMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIHNpemVfdCAqc2l6ZSwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGxpbWl0KQoreworCWlmICggdnN5c2NhbGxfZWhkciApIHsKKwkJY29uc3Qgc3RydWN0IGVsZmhkciAqY29uc3QgZWhkcnAgPQorCQkJKHN0cnVjdCBlbGZoZHIgKikgdnN5c2NhbGxfZWhkcjsKKwkJY29uc3Qgc3RydWN0IGVsZl9waGRyICpjb25zdCBwaGRycCA9CisJCQkoY29uc3Qgc3RydWN0IGVsZl9waGRyICopICh2c3lzY2FsbF9laGRyICsgZWhkcnAtPmVfcGhvZmYpOworCQlpbnQgaTsKKwkJRWxmMzJfT2ZmIG9mcyA9IDA7CisKKwkJZm9yIChpID0gMDsgaSA8IGVoZHJwLT5lX3BobnVtOyArK2kpIHsKKwkJCXN0cnVjdCBlbGZfcGhkciBwaGRyID0gcGhkcnBbaV07CisKKwkJCWlmIChwaGRyLnBfdHlwZSA9PSBQVF9MT0FEKSB7CisJCQkJb2ZzID0gcGhkci5wX29mZnNldCA9IG9mZnNldDsKKwkJCQlvZmZzZXQgKz0gcGhkci5wX2ZpbGVzejsKKwkJCX0gZWxzZSB7CisJCQkJcGhkci5wX29mZnNldCArPSBvZnM7CisJCQl9CisJCQlwaGRyLnBfcGFkZHIgPSAwOyAvKiBtYXRjaCBvdGhlciBjb3JlIHBoZHJzICovCisJCQkqc2l6ZSArPSBzaXplb2YocGhkcik7CisJCQlpZiAoKnNpemUgPiBsaW1pdAorCQkJICAgIHx8ICFkdW1wX3dyaXRlKGZpbGUsICZwaGRyLCBzaXplb2YocGhkcikpKQorCQkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAxOworfQorCitpbnQgZWxmX2NvcmVfd3JpdGVfZXh0cmFfZGF0YShzdHJ1Y3QgZmlsZSAqZmlsZSwgc2l6ZV90ICpzaXplLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBsaW1pdCkKK3sKKwlpZiAoIHZzeXNjYWxsX2VoZHIgKSB7CisJCWNvbnN0IHN0cnVjdCBlbGZoZHIgKmNvbnN0IGVoZHJwID0KKwkJCShzdHJ1Y3QgZWxmaGRyICopIHZzeXNjYWxsX2VoZHI7CisJCWNvbnN0IHN0cnVjdCBlbGZfcGhkciAqY29uc3QgcGhkcnAgPQorCQkJKGNvbnN0IHN0cnVjdCBlbGZfcGhkciAqKSAodnN5c2NhbGxfZWhkciArIGVoZHJwLT5lX3Bob2ZmKTsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IGVoZHJwLT5lX3BobnVtOyArK2kpIHsKKwkJCWlmIChwaGRycFtpXS5wX3R5cGUgPT0gUFRfTE9BRCkgeworCQkJCXZvaWQgKmFkZHIgPSAodm9pZCAqKSBwaGRycFtpXS5wX3ZhZGRyOworCQkJCXNpemVfdCBmaWxlc3ogPSBwaGRycFtpXS5wX2ZpbGVzejsKKworCQkJCSpzaXplICs9IGZpbGVzejsKKwkJCQlpZiAoKnNpemUgPiBsaW1pdAorCQkJCSAgICB8fCAhZHVtcF93cml0ZShmaWxlLCBhZGRyLCBmaWxlc3opKQorCQkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gMTsKK30KKworc2l6ZV90IGVsZl9jb3JlX2V4dHJhX2RhdGFfc2l6ZSh2b2lkKQoreworCWlmICggdnN5c2NhbGxfZWhkciApIHsKKwkJY29uc3Qgc3RydWN0IGVsZmhkciAqY29uc3QgZWhkcnAgPQorCQkJKHN0cnVjdCBlbGZoZHIgKil2c3lzY2FsbF9laGRyOworCQljb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKmNvbnN0IHBoZHJwID0KKwkJCShjb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKikgKHZzeXNjYWxsX2VoZHIgKyBlaGRycC0+ZV9waG9mZik7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBlaGRycC0+ZV9waG51bTsgKytpKQorCQkJaWYgKHBoZHJwW2ldLnBfdHlwZSA9PSBQVF9MT0FEKQorCQkJCXJldHVybiAoc2l6ZV90KSBwaGRycFtpXS5wX2ZpbGVzejsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZwppbmRleCBmMTVmMzdiLi5lOTg0NDAzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnCisrKyBiL2FyY2gveDg2L0tjb25maWcKQEAgLTM5Myw4ICszOTMsMTIgQEAKIAogY29uZmlnIFg4Nl9NUlNUCiAgICAgICAgYm9vbCAiTW9vcmVzdG93biBNSUQgcGxhdGZvcm0iCisJZGVwZW5kcyBvbiBQQ0kKKwlkZXBlbmRzIG9uIFBDSV9HT0FOWQogCWRlcGVuZHMgb24gWDg2XzMyCiAJZGVwZW5kcyBvbiBYODZfRVhURU5ERURfUExBVEZPUk0KKwlkZXBlbmRzIG9uIFg4Nl9JT19BUElDCisJc2VsZWN0IEFQQl9USU1FUgogCS0tLWhlbHAtLS0KIAkgIE1vb3Jlc3Rvd24gaXMgSW50ZWwncyBMb3cgUG93ZXIgSW50ZWwgQXJjaGl0ZWN0dXJlIChMUElBKSBiYXNlZCBNb2JsaW4KIAkgIEludGVybmV0IERldmljZShNSUQpIHBsYXRmb3JtLiBNb29yZXN0b3duIGNvbnNpc3RzIG9mIHR3byBjaGlwczoKQEAgLTQyOSw2ICs0MzMsNyBAQAogY29uZmlnIFg4Nl9OVU1BUQogCWJvb2wgIk5VTUFRIChJQk0vU2VxdWVudCkiCiAJZGVwZW5kcyBvbiBYODZfMzJfTk9OX1NUQU5EQVJECisJZGVwZW5kcyBvbiBQQ0kKIAlzZWxlY3QgTlVNQQogCXNlbGVjdCBYODZfTVBQQVJTRQogCS0tLWhlbHAtLS0KQEAgLTYyOSw2ICs2MzQsMTYgQEAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBIUEVUX1RJTUVSICYmIChSVEM9eSB8fCBSVEM9bSB8fCBSVENfRFJWX0NNT1M9bSB8fCBSVENfRFJWX0NNT1M9eSkKIAorY29uZmlnIEFQQl9USU1FUgorICAgICAgIGRlZl9ib29sIHkgaWYgTVJTVAorICAgICAgIHByb21wdCAiTGFuZ3dlbGwgQVBCIFRpbWVyIFN1cHBvcnQiIGlmIFg4Nl9NUlNUCisgICAgICAgaGVscAorICAgICAgICAgQVBCIHRpbWVyIGlzIHRoZSByZXBsYWNlbWVudCBmb3IgODI1NCwgSFBFVCBvbiBYODYgTUlEIHBsYXRmb3Jtcy4KKyAgICAgICAgIFRoZSBBUEJUIHByb3ZpZGVzIGEgc3RhYmxlIHRpbWUgYmFzZSBvbiBTTVAKKyAgICAgICAgIHN5c3RlbXMsIHVubGlrZSB0aGUgVFNDLCBidXQgaXQgaXMgbW9yZSBleHBlbnNpdmUgdG8gYWNjZXNzLAorICAgICAgICAgYXMgaXQgaXMgb2ZmLWNoaXAuIEFQQiB0aW1lcnMgYXJlIGFsd2F5cyBydW5uaW5nIHJlZ2FyZGxlc3Mgb2YgQ1BVCisgICAgICAgICBDIHN0YXRlcywgdGhleSBhcmUgdXNlZCBhcyBwZXIgQ1BVIGNsb2NrZXZlbnQgZGV2aWNlIHdoZW4gcG9zc2libGUuCisKICMgTWFyayBhcyBlbWJlZGRlZCBiZWNhdXNlIHRvbyBtYW55IHBlb3BsZSBnb3QgaXQgd3JvbmcuCiAjIFRoZSBjb2RlIGRpc2FibGVzIGl0c2VsZiB3aGVuIG5vdCBuZWVkZWQuCiBjb25maWcgRE1JCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGJfdGltZXIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwYl90aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NGEyZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGJfdGltZXIuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogYXBiX3RpbWVyLmg6IERyaXZlciBmb3IgTGFuZ3dlbGwgQVBCIHRpbWVyIGJhc2VkIG9uIFN5bm9wc2lzIERlc2lnbldhcmUKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogSmFjb2IgUGFuIChqYWNvYi5qdW4ucGFuQGludGVsLmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UuCisgKgorICogTm90ZToKKyAqLworCisjaWZuZGVmIEFTTV9YODZfQVBCVF9ICisjZGVmaW5lIEFTTV9YODZfQVBCVF9ICisjaW5jbHVkZSA8bGludXgvc2ZpLmg+CisKKyNpZmRlZiBDT05GSUdfQVBCX1RJTUVSCisKKy8qIExhbmd3ZWxsIERXIEFQQiB0aW1lciByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQVBCVE1SX05fTE9BRF9DT1VOVCAgICAweDAwCisjZGVmaW5lIEFQQlRNUl9OX0NVUlJFTlRfVkFMVUUgMHgwNAorI2RlZmluZSBBUEJUTVJfTl9DT05UUk9MICAgICAgIDB4MDgKKyNkZWZpbmUgQVBCVE1SX05fRU9JICAgICAgICAgICAweDBjCisjZGVmaW5lIEFQQlRNUl9OX0lOVF9TVEFUVVMgICAgMHgxMAorCisjZGVmaW5lIEFQQlRNUlNfSU5UX1NUQVRVUyAgICAgMHhhMAorI2RlZmluZSBBUEJUTVJTX0VPSSAgICAgICAgICAgIDB4YTQKKyNkZWZpbmUgQVBCVE1SU19SQVdfSU5UX1NUQVRVUyAweGE4CisjZGVmaW5lIEFQQlRNUlNfQ09NUF9WRVJTSU9OICAgMHhhYworI2RlZmluZSBBUEJUTVJTX1JFR19TSVpFICAgICAgIDB4MTQKKworLyogcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBBUEJUTVJfQ09OVFJPTF9FTkFCTEUgICgxPDwwKQorI2RlZmluZSBBUEJUTVJfQ09OVFJPTF9NT0RFX1BFUklPRElDICAgKDE8PDEpIC8qMTogcGVyaW9kaWMgMDpmcmVlIHJ1bm5pbmcgKi8KKyNkZWZpbmUgQVBCVE1SX0NPTlRST0xfSU5UICAgICAoMTw8MikKKworLyogZGVmYXVsdCBtZW1vcnkgbWFwcGVkIHJlZ2lzdGVyIGJhc2UgKi8KKyNkZWZpbmUgTE5XX1NDVV9BRERSICAgICAgICAgICAweEZGMTAwMDAwCisjZGVmaW5lIExOV19FWFRfVElNRVJfT0ZGU0VUICAgMHgxQjgwMAorI2RlZmluZSBBUEJUX0RFRkFVTFRfQkFTRSAgICAgIChMTldfU0NVX0FERFIrTE5XX0VYVF9USU1FUl9PRkZTRVQpCisjZGVmaW5lIExOV19FWFRfVElNRVJfUEdPRkZTRVQgICAgICAgICAweDgwMAorCisvKiBBUEJUIGNsb2NrIHNwZWVkIHJhbmdlIGZyb20gUENMSyB0byBmYWJyaWMgYmFzZSwgMjUtMTAwTUh6ICovCisjZGVmaW5lIEFQQlRfTUFYX0ZSRVEgICAgICAgICAgNTAKKyNkZWZpbmUgQVBCVF9NSU5fRlJFUSAgICAgICAgICAxCisjZGVmaW5lIEFQQlRfTU1BUF9TSVpFICAgICAgICAgMTAyNAorCisjZGVmaW5lIEFQQlRfREVWX1VTRUQgIDEKKworZXh0ZXJuIHZvaWQgYXBidF90aW1lX2luaXQodm9pZCk7CitleHRlcm4gc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZ2xvYmFsX2Nsb2NrX2V2ZW50OworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXBidF9xdWlja19jYWxpYnJhdGUodm9pZCk7CitleHRlcm4gaW50IGFyY2hfc2V0dXBfYXBidF9pcnFzKGludCBpcnEsIGludCB0cmlnZ2VyLCBpbnQgbWFzaywgaW50IGNwdSk7CitleHRlcm4gdm9pZCBhcGJ0X3NldHVwX3NlY29uZGFyeV9jbG9jayh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgYm9vdF9jcHVfaWQ7CitleHRlcm4gaW50IGRpc2FibGVfYXBidF9wZXJjcHU7CisKK2V4dGVybiBzdHJ1Y3Qgc2ZpX3RpbWVyX3RhYmxlX2VudHJ5ICpzZmlfZ2V0X210bXIoaW50IGhpbnQpOworZXh0ZXJuIHZvaWQgc2ZpX2ZyZWVfbXRtcihzdHJ1Y3Qgc2ZpX3RpbWVyX3RhYmxlX2VudHJ5ICptdG1yKTsKK2V4dGVybiBpbnQgc2ZpX210aW1lcl9udW07CisKKyNlbHNlIC8qIENPTkZJR19BUEJfVElNRVIgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFwYnRfcXVpY2tfY2FsaWJyYXRlKHZvaWQpIHtyZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIGFwYnRfdGltZV9pbml0KHZvaWQpIHtyZXR1cm4gMDsgfQorCisjZW5kaWYKKyNlbmRpZiAvKiBBU01fWDg2X0FQQlRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfaXJxLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaAppbmRleCBlZWFjODI5Li5hOTI5YzllIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaApAQCAtNTMsMTMgKzUzLDYgQEAKIGV4dGVybiB2b2lkIGNhbGxfZnVuY3Rpb25faW50ZXJydXB0KHZvaWQpOwogZXh0ZXJuIHZvaWQgY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0KHZvaWQpOwogCi0vKiBQSUMgc3BlY2lmaWMgZnVuY3Rpb25zICovCi1leHRlcm4gdm9pZCBkaXNhYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKLWV4dGVybiB2b2lkIGVuYWJsZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSk7Ci1leHRlcm4gaW50IGk4MjU5QV9pcnFfcGVuZGluZyh1bnNpZ25lZCBpbnQgaXJxKTsKLWV4dGVybiB2b2lkIG1ha2VfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOwotZXh0ZXJuIHZvaWQgaW5pdF84MjU5QShpbnQgYWVvaSk7Ci0KIC8qIElPQVBJQyAqLwogI2RlZmluZSBJT19BUElDX0lSUSh4KSAoKCh4KSA+PSBOUl9JUlFTX0xFR0FDWSkgfHwgKCgxPDwoeCkpICYgaW9fYXBpY19pcnFzKSkKIGV4dGVybiB1bnNpZ25lZCBsb25nIGlvX2FwaWNfaXJxczsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2k4MjU5LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pODI1OS5oCmluZGV4IDdlYzY1YjEuLjE2NTUxNDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2k4MjU5LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaTgyNTkuaApAQCAtMjYsMTEgKzI2LDYgQEAKIAogZXh0ZXJuIHJhd19zcGlubG9ja190IGk4MjU5QV9sb2NrOwogCi1leHRlcm4gdm9pZCBpbml0XzgyNTlBKGludCBhdXRvX2VvaSk7Ci1leHRlcm4gdm9pZCBlbmFibGVfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOwotZXh0ZXJuIHZvaWQgZGlzYWJsZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSk7Ci1leHRlcm4gdW5zaWduZWQgaW50IHN0YXJ0dXBfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOwotCiAvKiB0aGUgUElDIG1heSBuZWVkIGEgY2FyZWZ1bCBkZWxheSBvbiBzb21lIHBsYXRmb3JtcywgaGVuY2Ugc3BlY2lmaWMgY2FsbHMgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBpbmJfcGljKHVuc2lnbmVkIGludCBwb3J0KQogewpAQCAtNTcsNyArNTIsMTcgQEAKIAogZXh0ZXJuIHN0cnVjdCBpcnFfY2hpcCBpODI1OUFfY2hpcDsKIAotZXh0ZXJuIHZvaWQgbWFza184MjU5QSh2b2lkKTsKLWV4dGVybiB2b2lkIHVubWFza184MjU5QSh2b2lkKTsKK3N0cnVjdCBsZWdhY3lfcGljIHsKKwlpbnQgbnJfbGVnYWN5X2lycXM7CisJc3RydWN0IGlycV9jaGlwICpjaGlwOworCXZvaWQgKCptYXNrX2FsbCkodm9pZCk7CisJdm9pZCAoKnJlc3RvcmVfbWFzaykodm9pZCk7CisJdm9pZCAoKmluaXQpKGludCBhdXRvX2VvaSk7CisJaW50ICgqaXJxX3BlbmRpbmcpKHVuc2lnbmVkIGludCBpcnEpOworCXZvaWQgKCptYWtlX2lycSkodW5zaWduZWQgaW50IGlycSk7Cit9OworCitleHRlcm4gc3RydWN0IGxlZ2FjeV9waWMgKmxlZ2FjeV9waWM7CitleHRlcm4gc3RydWN0IGxlZ2FjeV9waWMgbnVsbF9sZWdhY3lfcGljOwogCiAjZW5kaWYgLyogX0FTTV9YODZfSTgyNTlfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oCmluZGV4IDVmNjFmNmUuLjM1ODMyYTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb19hcGljLmgKQEAgLTE0Myw4ICsxNDMsNiBAQAogLyogMSBpZiB0aGUgdGltZXIgSVJRIHVzZXMgdGhlICc4MjU5QSBWaXJ0dWFsIFdpcmUnIG1vZGUgKi8KIGV4dGVybiBpbnQgdGltZXJfdGhyb3VnaF84MjU5OwogCi1leHRlcm4gdm9pZCBpb19hcGljX2Rpc2FibGVfbGVnYWN5KHZvaWQpOwotCiAvKgogICogSWYgd2UgdXNlIHRoZSBJTy1BUElDIGZvciBJUlEgcm91dGluZywgZGlzYWJsZSBhdXRvbWF0aWMKICAqIGFzc2lnbm1lbnQgb2YgUENJIElSUSdzLgpAQCAtMTg5LDYgKzE4Nyw3IEBACiBpbnQgbXBfZmluZF9pb2FwaWMoaW50IGdzaSk7CiBpbnQgbXBfZmluZF9pb2FwaWNfcGluKGludCBpb2FwaWMsIGludCBnc2kpOwogdm9pZCBfX2luaXQgbXBfcmVnaXN0ZXJfaW9hcGljKGludCBpZCwgdTMyIGFkZHJlc3MsIHUzMiBnc2lfYmFzZSk7CitleHRlcm4gdm9pZCBfX2luaXQgcHJlX2luaXRfYXBpY19JUlEwKHZvaWQpOwogCiAjZWxzZSAgLyogIUNPTkZJR19YODZfSU9fQVBJQyAqLwogCkBAIC0xOTgsNyArMTk3LDExIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaW9hcGljX2luaXRfbWFwcGluZ3Modm9pZCkJeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaW9hcGljX2luc2VydF9yZXNvdXJjZXModm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcHJvYmVfbnJfaXJxc19nc2kodm9pZCkJeyB9CitzdGF0aWMgaW5saW5lIGludCBtcF9maW5kX2lvYXBpYyhpbnQgZ3NpKSB7IHJldHVybiAwOyB9CiAKK3N0cnVjdCBpb19hcGljX2lycV9hdHRyOworc3RhdGljIGlubGluZSBpbnQgaW9fYXBpY19zZXRfcGNpX3JvdXRpbmcoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaXJxLAorCQkgc3RydWN0IGlvX2FwaWNfaXJxX2F0dHIgKmlycV9hdHRyKSB7IHJldHVybiAwOyB9CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9BU01fWDg2X0lPX0FQSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnEuaAppbmRleCAyNjIyOTI3Li41NDU4MzgwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnEuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnEuaApAQCAtNDgsNiArNDgsNSBAQAogZXh0ZXJuIGludCB2ZWN0b3JfdXNlZF9ieV9wZXJjcHVfaXJxKHVuc2lnbmVkIGludCB2ZWN0b3IpOwogCiBleHRlcm4gdm9pZCBpbml0X0lTQV9pcnFzKHZvaWQpOwotZXh0ZXJuIGludCBucl9sZWdhY3lfaXJxczsKIAogI2VuZGlmIC8qIF9BU01fWDg2X0lSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tcnN0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tcnN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUxZDMwZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21yc3QuaApAQCAtMCwwICsxLDE5IEBACisvKgorICogbXJzdC5oOiBJbnRlbCBNb29yZXN0b3duIHBsYXRmb3JtIHNwZWNpZmljIHNldHVwIGNvZGUKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UuCisgKi8KKyNpZm5kZWYgX0FTTV9YODZfTVJTVF9ICisjZGVmaW5lIF9BU01fWDg2X01SU1RfSAorZXh0ZXJuIGludCBwY2lfbXJzdF9pbml0KHZvaWQpOworaW50IF9faW5pdCBzZmlfcGFyc2VfbXJ0YyhzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqdGFibGUpOworCisjZGVmaW5lIFNGSV9NVE1SX01BWF9OVU0gOAorI2RlZmluZSBTRklfTVJUQ19NQVgJOAorCisjZW5kaWYgLyogX0FTTV9YODZfTVJTVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEuaAppbmRleCAxMzM3MGI5Li4zN2M1MTY1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxLmgKQEAgLTMwLDYgKzMwLDcgQEAKIAogZXh0ZXJuIGludCBmb3VuZF9udW1hcTsKIGV4dGVybiBpbnQgZ2V0X21lbWNmZ19udW1hcSh2b2lkKTsKK2V4dGVybiBpbnQgcGNpX251bWFxX2luaXQodm9pZCk7CiAKIGV4dGVybiB2b2lkICp4cXVhZF9wb3J0aW87CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL29scGMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL29scGMuaAppbmRleCAzYTU3Mzg1Li4xMDEyMjliIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9vbHBjLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vb2xwYy5oCkBAIC0xMyw3ICsxMyw2IEBACiAKICNkZWZpbmUgT0xQQ19GX1BSRVNFTlQJCTB4MDEKICNkZWZpbmUgT0xQQ19GX0RDT04JCTB4MDIKLSNkZWZpbmUgT0xQQ19GX1ZTQQkJMHgwNAogCiAjaWZkZWYgQ09ORklHX09MUEMKIApAQCAtNTEsMTggKzUwLDYgQEAKIH0KIAogLyoKLSAqIFRoZSBWU0EgaXMgc29mdHdhcmUgZnJvbSBBTUQgdGhhdCB0eXBpY2FsIEdlb2RlIGJpb3NlcyB3aWxsIGluY2x1ZGUuCi0gKiBJdCBpcyB1c2VkIHRvIGVtdWxhdGUgdGhlIFBDSSBidXMsIFZHQSwgZXRjLiAgT0xQQydzIE9wZW4gRmlybXdhcmUgZG9lcwotICogbm90IGluY2x1ZGUgdGhlIFZTQTsgaW5zdGVhZCwgUENJIGlzIGVtdWxhdGVkIGJ5IHRoZSBrZXJuZWwuCi0gKgotICogVGhlIFZTQSBpcyBkZXNjcmliZWQgZnVydGhlciBpbiBhcmNoL3g4Ni9wY2kvb2xwYy5jLgotICovCi1zdGF0aWMgaW5saW5lIGludCBvbHBjX2hhc192c2Eodm9pZCkKLXsKLQlyZXR1cm4gKG9scGNfcGxhdGZvcm1faW5mby5mbGFncyAmIE9MUENfRl9WU0EpID8gMSA6IDA7Ci19Ci0KLS8qCiAgKiBUaGUgIk1hc3MgUHJvZHVjdGlvbiIgdmVyc2lvbiBvZiBPTFBDJ3MgWE8gaXMgaWRlbnRpZmllZCBhcyBiZWluZyBtb2RlbAogICogQzIuICBEdXJpbmcgdGhlIHByb3RvdHlwZSBwaGFzZSwgdGhlIGZvbGxvd2luZyBtb2RlbHMgKGluIGNocm9ub2xvZ2ljYWwKICAqIG9yZGVyKSB3ZXJlIGNyZWF0ZWQ6IEExLCBCMSwgQjIsIEIzLCBCNCwgQzEuICBUaGUgQTEgdGhyb3VnaCBCMiBtb2RlbHMKQEAgLTg3LDEzICs3NCwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBvbHBjX2hhc192c2Eodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQogI2VuZGlmCiAKK2V4dGVybiBpbnQgcGNpX29scGNfaW5pdCh2b2lkKTsKKwogLyogRUMgcmVsYXRlZCBmdW5jdGlvbnMgKi8KIAogZXh0ZXJuIGludCBvbHBjX2VjX2NtZCh1bnNpZ25lZCBjaGFyIGNtZCwgdW5zaWduZWQgY2hhciAqaW5idWYsIHNpemVfdCBpbmxlbiwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggYjRhMDBkZC4uM2UwMDJjYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTQ1LDggKzQ1LDE1IEBACiAKICNpZmRlZiBDT05GSUdfUENJCiBleHRlcm4gdW5zaWduZWQgaW50IHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXModm9pZCk7CitleHRlcm4gaW50IHBjaV9sZWdhY3lfaW5pdCh2b2lkKTsKKyMgaWZkZWYgQ09ORklHX0FDUEkKKyMgIGRlZmluZSB4ODZfZGVmYXVsdF9wY2lfaW5pdCBwY2lfYWNwaV9pbml0CisjIGVsc2UKKyMgIGRlZmluZSB4ODZfZGVmYXVsdF9wY2lfaW5pdCBwY2lfbGVnYWN5X2luaXQKKyMgZW5kaWYKICNlbHNlCi0jZGVmaW5lIHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKQkwCisjIGRlZmluZSBwY2liaW9zX2Fzc2lnbl9hbGxfYnVzc2VzKCkJMAorIyBkZWZpbmUgeDg2X2RlZmF1bHRfcGNpX2luaXQJCU5VTEwKICNlbmRpZgogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBwY2lfbWVtX3N0YXJ0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpX3g4Ni5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpX3g4Ni5oCmluZGV4IDA1YjU4Y2MuLjFhMDQyMjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV94ODYuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfeDg2LmgKQEAgLTgzLDcgKzgzLDYgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBwY2liaW9zX2lycV9tYXNrOwogCi1leHRlcm4gaW50IHBjaWJpb3Nfc2Nhbm5lZDsKIGV4dGVybiBzcGlubG9ja190IHBjaV9jb25maWdfbG9jazsKIAogZXh0ZXJuIGludCAoKnBjaWJpb3NfZW5hYmxlX2lycSkoc3RydWN0IHBjaV9kZXYgKmRldik7CkBAIC0xMDYsMTYgKzEwNSwxNSBAQAogZXh0ZXJuIGludCBwY2lfZGlyZWN0X3Byb2JlKHZvaWQpOwogZXh0ZXJuIHZvaWQgcGNpX2RpcmVjdF9pbml0KGludCB0eXBlKTsKIGV4dGVybiB2b2lkIHBjaV9wY2Jpb3NfaW5pdCh2b2lkKTsKLWV4dGVybiBpbnQgcGNpX29scGNfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIF9faW5pdCBkbWlfY2hlY2tfcGNpcHJvYmUodm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgZG1pX2NoZWNrX3NraXBfaXNhX2FsaWduKHZvaWQpOwogCiAvKiBzb21lIGNvbW1vbiB1c2VkIHN1YnN5c19pbml0Y2FsbHMgKi8KIGV4dGVybiBpbnQgX19pbml0IHBjaV9hY3BpX2luaXQodm9pZCk7Ci1leHRlcm4gaW50IF9faW5pdCBwY2liaW9zX2lycV9pbml0KHZvaWQpOwotZXh0ZXJuIGludCBfX2luaXQgcGNpX3Zpc3dzX2luaXQodm9pZCk7Ci1leHRlcm4gaW50IF9faW5pdCBwY2lfbnVtYXFfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCBwY2liaW9zX2lycV9pbml0KHZvaWQpOwogZXh0ZXJuIGludCBfX2luaXQgcGNpYmlvc19pbml0KHZvaWQpOworZXh0ZXJuIGludCBwY2lfbGVnYWN5X2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBwY2liaW9zX2ZpeHVwX2lycXModm9pZCk7CiAKIC8qIHBjaS1tbWNvbmZpZy5jICovCiAKQEAgLTE4MywzICsxODEsMTcgQEAKIHsKIAlhc20gdm9sYXRpbGUoIm1vdmwgJSVlYXgsKCUxKSIgOiA6ICJhIiAodmFsKSwgInIiIChwb3MpIDogIm1lbW9yeSIpOwogfQorCisjaWZkZWYgQ09ORklHX1BDSQorIyBpZmRlZiBDT05GSUdfQUNQSQorIyAgZGVmaW5lIHg4Nl9kZWZhdWx0X3BjaV9pbml0CQlwY2lfYWNwaV9pbml0CisjIGVsc2UKKyMgIGRlZmluZSB4ODZfZGVmYXVsdF9wY2lfaW5pdAkJcGNpX2xlZ2FjeV9pbml0CisjIGVuZGlmCisjIGRlZmluZSB4ODZfZGVmYXVsdF9wY2lfaW5pdF9pcnEJcGNpYmlvc19pcnFfaW5pdAorIyBkZWZpbmUgeDg2X2RlZmF1bHRfcGNpX2ZpeHVwX2lycXMJcGNpYmlvc19maXh1cF9pcnFzCisjZWxzZQorIyBkZWZpbmUgeDg2X2RlZmF1bHRfcGNpX2luaXQJCU5VTEwKKyMgZGVmaW5lIHg4Nl9kZWZhdWx0X3BjaV9pbml0X2lycQlOVUxMCisjIGRlZmluZSB4ODZfZGVmYXVsdF9wY2lfZml4dXBfaXJxcwlOVUxMCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldHVwLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oCmluZGV4IDE4ZTQ5NmMuLjg2YjE1MDYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldHVwLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0dXAuaApAQCAtMzcsMTAgKzM3LDggQEAKIAogI2lmZGVmIENPTkZJR19YODZfVklTV1MKIGV4dGVybiB2b2lkIHZpc3dzX2Vhcmx5X2RldGVjdCh2b2lkKTsKLWV4dGVybiBpbnQgaXNfdmlzd3NfYm94KHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCB2aXN3c19lYXJseV9kZXRlY3Qodm9pZCkgeyB9Ci1zdGF0aWMgaW5saW5lIGludCBpc192aXN3c19ib3godm9pZCkgeyByZXR1cm4gMDsgfQogI2VuZGlmCiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHNhdmVkX3ZpZGVvX21vZGU7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92aXN3cy9jb2JhbHQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Zpc3dzL2NvYmFsdC5oCmluZGV4IDE2NmFkZjYuLjJlZGIzNzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Zpc3dzL2NvYmFsdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Zpc3dzL2NvYmFsdC5oCkBAIC0xMjIsNCArMTIyLDYgQEAKIAogZXh0ZXJuIGNoYXIgdmlzd3NfYm9hcmRfcmV2OwogCitleHRlcm4gaW50IHBjaV92aXN3c19pbml0KHZvaWQpOworCiAjZW5kaWYgLyogX0FTTV9YODZfVklTV1NfQ09CQUxUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oCmluZGV4IDYwY2MzNTIuLjUxOWI1NDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaApAQCAtOTksNiArOTksMjAgQEAKIH07CiAKIC8qKgorICogc3RydWN0IHg4Nl9pbml0X3BjaSAtIHBsYXRmb3JtIHNwZWNpZmljIHBjaSBpbml0IGZ1bmN0aW9ucworICogQGFyY2hfaW5pdDoJCQlwbGF0Zm9ybSBzcGVjaWZpYyBwY2kgYXJjaCBpbml0IGNhbGwKKyAqIEBpbml0OgkJCXBsYXRmb3JtIHNwZWNpZmljIHBjaSBzdWJzeXN0ZW0gaW5pdAorICogQGluaXRfaXJxOgkJCXBsYXRmb3JtIHNwZWNpZmljIHBjaSBpcnEgaW5pdAorICogQGZpeHVwX2lycXM6CQkJcGxhdGZvcm0gc3BlY2lmaWMgcGNpIGlycSBmaXh1cAorICovCitzdHJ1Y3QgeDg2X2luaXRfcGNpIHsKKwlpbnQgKCphcmNoX2luaXQpKHZvaWQpOworCWludCAoKmluaXQpKHZvaWQpOworCXZvaWQgKCppbml0X2lycSkodm9pZCk7CisJdm9pZCAoKmZpeHVwX2lycXMpKHZvaWQpOworfTsKKworLyoqCiAgKiBzdHJ1Y3QgeDg2X2luaXRfb3BzIC0gZnVuY3Rpb25zIGZvciBwbGF0Zm9ybSBzcGVjaWZpYyBzZXR1cAogICoKICAqLwpAQCAtMTEwLDYgKzEyNCw3IEBACiAJc3RydWN0IHg4Nl9pbml0X3BhZ2luZwkJcGFnaW5nOwogCXN0cnVjdCB4ODZfaW5pdF90aW1lcnMJCXRpbWVyczsKIAlzdHJ1Y3QgeDg2X2luaXRfaW9tbXUJCWlvbW11OworCXN0cnVjdCB4ODZfaW5pdF9wY2kJCXBjaTsKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCmluZGV4IGQ4N2YwOWIuLjRjNTgzNTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKQEAgLTg3LDYgKzg3LDcgQEAKIG9iai0kKENPTkZJR19FQVJMWV9QUklOVEspCSs9IGVhcmx5X3ByaW50ay5vCiAKIG9iai0kKENPTkZJR19IUEVUX1RJTUVSKSAJKz0gaHBldC5vCitvYmotJChDT05GSUdfQVBCX1RJTUVSKQkJKz0gYXBiX3RpbWVyLm8KIAogb2JqLSQoQ09ORklHX0s4X05CKQkJKz0gazgubwogb2JqLSQoQ09ORklHX0RFQlVHX1JPREFUQV9URVNUKQkrPSB0ZXN0X3JvZGF0YS5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKaW5kZXggNzM4ZmNiNi4uYTU0ZDcxNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCisjaW5jbHVkZSA8YXNtL3BjaV94ODYuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9pb19hcGljLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KQEAgLTE2MjQsNiArMTYyNSw5IEBACiAKIAlhY3BpX3RhYmxlX3BhcnNlKEFDUElfU0lHX0hQRVQsIGFjcGlfcGFyc2VfaHBldCk7CiAKKwlpZiAoIWFjcGlfbm9pcnEpCisJCXg4Nl9pbml0LnBjaS5pbml0ID0gcGNpX2FjcGlfaW5pdDsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBiX3RpbWVyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBiX3RpbWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI3MDk5NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGJfdGltZXIuYwpAQCAtMCwwICsxLDc4NCBAQAorLyoKKyAqIGFwYl90aW1lci5jOiBEcml2ZXIgZm9yIExhbmd3ZWxsIEFQQiB0aW1lcnMKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogSmFjb2IgUGFuIChqYWNvYi5qdW4ucGFuQGludGVsLmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UuCisgKgorICogTm90ZToKKyAqIExhbmd3ZWxsIGlzIHRoZSBzb3V0aCBjb21wbGV4IG9mIEludGVsIE1vb3Jlc3Rvd24gTUlEIHBsYXRmb3JtLiBUaGVyZSBhcmUKKyAqIGVpZ2h0IGV4dGVybmFsIHRpbWVycyBpbiB0b3RhbCB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtLgorICogVGhlIHRpbWVyIGluZm9ybWF0aW9uLCBzdWNoIGFzIGZyZXF1ZW5jeSBhbmQgYWRkcmVzc2VzLCBpcyBwcm92aWRlZCB0byB0aGUKKyAqIE9TIHZpYSBTRkkgdGFibGVzLgorICogVGltZXIgaW50ZXJydXB0cyBhcmUgcm91dGVkIHZpYSBGVy9IVyBlbXVsYXRlZCBJT0FQSUMgaW5kZXBlbmRlbnRseSB2aWEKKyAqIGluZGl2aWR1YWwgcmVkaXJlY3Rpb24gdGFibGUgZW50cmllcyAoUlRFKS4KKyAqIFVubGlrZSBIUEVULCB0aGVyZSBpcyBubyBtYXN0ZXIgY291bnRlciwgdGhlcmVmb3JlIG9uZSBvZiB0aGUgdGltZXJzIGFyZQorICogdXNlZCBhcyBjbG9ja3NvdXJjZS4gVGhlIG92ZXJhbGwgYWxsb2NhdGlvbiBsb29rcyBsaWtlOgorICogIC0gdGltZXIgMCAtIE5SX0NQVXMgZm9yIHBlciBjcHUgdGltZXIKKyAqICAtIG9uZSB0aW1lciBmb3IgY2xvY2tzb3VyY2UKKyAqICAtIG9uZSB0aW1lciBmb3Igd2F0Y2hkb2cgZHJpdmVyLgorICogSXQgaXMgYWxzbyB3b3J0aCBub3RpY2UgdGhhdCBBUEIgdGltZXIgZG9lcyBub3Qgc3VwcG9ydCB0cnVlIG9uZS1zaG90IG1vZGUsCisgKiBmcmVlLXJ1bm5pbmcgbW9kZSB3aWxsIGJlIHVzZWQgaGVyZSB0byBlbXVsYXRlIG9uZS1zaG90IG1vZGUuCisgKiBBUEIgdGltZXIgY2FuIGFsc28gYmUgdXNlZCBhcyBicm9hZGNhc3QgdGltZXIgYWxvbmcgd2l0aCBwZXIgY3B1IGxvY2FsIEFQSUMKKyAqIHRpbWVyLCBidXQgYnkgZGVmYXVsdCBBUEIgdGltZXIgaGFzIGhpZ2hlciByYXRpbmcgdGhhbiBsb2NhbCBBUElDIHRpbWVycy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NmaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorI2luY2x1ZGUgPGFzbS9hcGJfdGltZXIuaD4KKworI2RlZmluZSBBUEJUX01BU0sJCQlDTE9DS1NPVVJDRV9NQVNLKDMyKQorI2RlZmluZSBBUEJUX1NISUZUCQkJMjIKKyNkZWZpbmUgQVBCVF9DTE9DS0VWRU5UX1JBVElORwkJMTUwCisjZGVmaW5lIEFQQlRfQ0xPQ0tTT1VSQ0VfUkFUSU5HCQkyNTAKKyNkZWZpbmUgQVBCVF9NSU5fREVMVEFfVVNFQwkJMjAwCisKKyNkZWZpbmUgRVZUX1RPX0FQQlRfREVWKGV2dCkgY29udGFpbmVyX29mKGV2dCwgc3RydWN0IGFwYnRfZGV2LCBldnQpCisjZGVmaW5lIEFQQlRfQ0xPQ0tFVkVOVDBfTlVNICAgKDApCisjZGVmaW5lIEFQQlRfQ0xPQ0tFVkVOVDFfTlVNICAgKDEpCisjZGVmaW5lIEFQQlRfQ0xPQ0tTT1VSQ0VfTlVNICAgKDIpCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFwYnRfYWRkcmVzczsKK3N0YXRpYyBpbnQgYXBiX3RpbWVyX2Jsb2NrX2VuYWJsZWQ7CitzdGF0aWMgdm9pZCBfX2lvbWVtICphcGJ0X3ZpcnRfYWRkcmVzczsKK3N0YXRpYyBpbnQgcGh5X2NzX3RpbWVyX2lkOworCisvKgorICogQ29tbW9uIERXIEFQQiB0aW1lciBpbmZvCisgKi8KK3N0YXRpYyB1aW50NjRfdCBhcGJ0X2ZyZXE7CisKK3N0YXRpYyB2b2lkIGFwYnRfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCQkgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCk7CitzdGF0aWMgaW50IGFwYnRfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLAorCQkJICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KTsKK3N0YXRpYyBjeWNsZV90IGFwYnRfcmVhZF9jbG9ja3NvdXJjZShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKTsKK3N0YXRpYyB2b2lkIGFwYnRfcmVzdGFydF9jbG9ja3NvdXJjZShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKTsKKworc3RydWN0IGFwYnRfZGV2IHsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIGV2dDsKKwl1bnNpZ25lZCBpbnQgbnVtOworCWludCBjcHU7CisJdW5zaWduZWQgaW50IGlycTsKKwl1bnNpZ25lZCBpbnQgdGljazsKKwl1bnNpZ25lZCBpbnQgY291bnQ7CisJdW5zaWduZWQgaW50IGZsYWdzOworCWNoYXIgbmFtZVsxMF07Cit9OworCitpbnQgZGlzYWJsZV9hcGJ0X3BlcmNwdSBfX2NwdWluaXRkYXRhOworCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGFwYnRfZGV2LCBjcHVfYXBidF9kZXYpOworCisjaWZkZWYgQ09ORklHX1NNUAorc3RhdGljIHVuc2lnbmVkIGludCBhcGJ0X251bV90aW1lcnNfdXNlZDsKK3N0YXRpYyBzdHJ1Y3QgYXBidF9kZXYgKmFwYnRfZGV2czsKKyNlbmRpZgorCitzdGF0aWMJaW5saW5lIHVuc2lnbmVkIGxvbmcgYXBidF9yZWFkbF9yZWcodW5zaWduZWQgbG9uZyBhKQoreworCXJldHVybiByZWFkbChhcGJ0X3ZpcnRfYWRkcmVzcyArIGEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBidF93cml0ZWxfcmVnKHVuc2lnbmVkIGxvbmcgZCwgdW5zaWduZWQgbG9uZyBhKQoreworCXdyaXRlbChkLCBhcGJ0X3ZpcnRfYWRkcmVzcyArIGEpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXBidF9yZWFkbChpbnQgbiwgdW5zaWduZWQgbG9uZyBhKQoreworCXJldHVybiByZWFkbChhcGJ0X3ZpcnRfYWRkcmVzcyArIGEgKyBuICogQVBCVE1SU19SRUdfU0laRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcGJ0X3dyaXRlbChpbnQgbiwgdW5zaWduZWQgbG9uZyBkLCB1bnNpZ25lZCBsb25nIGEpCit7CisJd3JpdGVsKGQsIGFwYnRfdmlydF9hZGRyZXNzICsgYSArIG4gKiBBUEJUTVJTX1JFR19TSVpFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFwYnRfc2V0X21hcHBpbmcodm9pZCkKK3sKKwlzdHJ1Y3Qgc2ZpX3RpbWVyX3RhYmxlX2VudHJ5ICptdG1yOworCisJaWYgKGFwYnRfdmlydF9hZGRyZXNzKSB7CisJCXByX2RlYnVnKCJBUEJUIGJhc2UgYWxyZWFkeSBtYXBwZWRcbiIpOworCQlyZXR1cm47CisJfQorCW10bXIgPSBzZmlfZ2V0X210bXIoQVBCVF9DTE9DS0VWRU5UMF9OVU0pOworCWlmIChtdG1yID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gZ2V0IE1UTVIgJWQgZnJvbSBTRklcbiIsCisJCSAgICAgICBBUEJUX0NMT0NLRVZFTlQwX05VTSk7CisJCXJldHVybjsKKwl9CisJYXBidF9hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpbXRtci0+cGh5c19hZGRyOworCWlmICghYXBidF9hZGRyZXNzKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIHRpbWVyIGJhc2UgZnJvbSBTRkksIHVzZSBkZWZhdWx0XG4iKTsKKwkJYXBidF9hZGRyZXNzID0gQVBCVF9ERUZBVUxUX0JBU0U7CisJfQorCWFwYnRfdmlydF9hZGRyZXNzID0gaW9yZW1hcF9ub2NhY2hlKGFwYnRfYWRkcmVzcywgQVBCVF9NTUFQX1NJWkUpOworCWlmIChhcGJ0X3ZpcnRfYWRkcmVzcykgeworCQlwcl9kZWJ1ZygiTWFwcGVkIEFQQlQgcGh5c2ljYWwgYWRkciAlcCBhdCB2aXJ0dWFsIGFkZHIgJXBcbiIsXAorCQkJICh2b2lkICopYXBidF9hZGRyZXNzLCAodm9pZCAqKWFwYnRfdmlydF9hZGRyZXNzKTsKKwl9IGVsc2UgeworCQlwcl9kZWJ1ZygiRmFpbGVkIG1hcHBpbmcgQVBCVCBwaHkgYWRkcmVzcyBhdCAlcFxuIixcCisJCQkgKHZvaWQgKilhcGJ0X2FkZHJlc3MpOworCQlnb3RvIHBhbmljX25vYXBidDsKKwl9CisJYXBidF9mcmVxID0gbXRtci0+ZnJlcV9oeiAvIFVTRUNfUEVSX1NFQzsKKwlzZmlfZnJlZV9tdG1yKG10bXIpOworCisJLyogTm93IGZpZ3VyZSBvdXQgdGhlIHBoeXNpY2FsIHRpbWVyIGlkIGZvciBjbG9ja3NvdXJjZSBkZXZpY2UgKi8KKwltdG1yID0gc2ZpX2dldF9tdG1yKEFQQlRfQ0xPQ0tTT1VSQ0VfTlVNKTsKKwlpZiAobXRtciA9PSBOVUxMKQorCQlnb3RvIHBhbmljX25vYXBidDsKKworCS8qIE5vdyBmaWd1cmUgb3V0IHRoZSBwaHlzaWNhbCB0aW1lciBpZCAqLworCXBoeV9jc190aW1lcl9pZCA9ICh1bnNpZ25lZCBpbnQpKG10bXItPnBoeXNfYWRkciAmIDB4ZmYpCisJCS8gQVBCVE1SU19SRUdfU0laRTsKKwlwcl9kZWJ1ZygiVXNlIHRpbWVyICVkIGZvciBjbG9ja3NvdXJjZVxuIiwgcGh5X2NzX3RpbWVyX2lkKTsKKwlyZXR1cm47CisKK3BhbmljX25vYXBidDoKKwlwYW5pYygiRmFpbGVkIHRvIHNldHVwIEFQQiBzeXN0ZW0gdGltZXJcbiIpOworCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcGJ0X2NsZWFyX21hcHBpbmcodm9pZCkKK3sKKwlpb3VubWFwKGFwYnRfdmlydF9hZGRyZXNzKTsKKwlhcGJ0X3ZpcnRfYWRkcmVzcyA9IE5VTEw7Cit9CisKKy8qCisgKiBBUEJUIHRpbWVyIGludGVycnVwdCBlbmFibGUgLyBkaXNhYmxlCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlzX2FwYnRfY2FwYWJsZSh2b2lkKQoreworCXJldHVybiBhcGJ0X3ZpcnRfYWRkcmVzcyA/IDEgOiAwOworfQorCitzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGNsb2Nrc291cmNlX2FwYnQgPSB7CisJLm5hbWUJCT0gImFwYnQiLAorCS5yYXRpbmcJCT0gQVBCVF9DTE9DS1NPVVJDRV9SQVRJTkcsCisJLnJlYWQJCT0gYXBidF9yZWFkX2Nsb2Nrc291cmNlLAorCS5tYXNrCQk9IEFQQlRfTUFTSywKKwkuc2hpZnQJCT0gQVBCVF9TSElGVCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCisJLnJlc3VtZQkJPSBhcGJ0X3Jlc3RhcnRfY2xvY2tzb3VyY2UsCit9OworCisvKiBib290IEFQQiBjbG9jayBldmVudCBkZXZpY2UgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIGFwYnRfY2xvY2tldmVudCA9IHsKKwkubmFtZQkJPSAiYXBidDAiLAorCS5mZWF0dXJlcwk9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKKwkuc2V0X21vZGUJPSBhcGJ0X3NldF9tb2RlLAorCS5zZXRfbmV4dF9ldmVudCA9IGFwYnRfbmV4dF9ldmVudCwKKwkuc2hpZnQJCT0gQVBCVF9TSElGVCwKKwkuaXJxCQk9IDAsCisJLnJhdGluZwkJPSBBUEJUX0NMT0NLRVZFTlRfUkFUSU5HLAorfTsKKworLyoKKyAqIGlmIHVzZXIgZG9lcyBub3Qgd2FudCB0byB1c2UgcGVyIENQVSBhcGIgdGltZXIsIGp1c3QgZ2l2ZSBpdCBhIGxvd2VyIHJhdGluZworICogdGhhbiBsb2NhbCBhcGljIHRpbWVyIGFuZCBza2lwIHRoZSBsYXRlIHBlciBjcHUgdGltZXIgaW5pdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgX19pbml0IHNldHVwX3g4Nl9tcnN0X3RpbWVyKGNoYXIgKmFyZykKK3sKKwlpZiAoIWFyZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoc3RyY21wKCJhcGJ0X29ubHkiLCBhcmcpID09IDApCisJCWRpc2FibGVfYXBidF9wZXJjcHUgPSAwOworCWVsc2UgaWYgKHN0cmNtcCgibGFwaWNfYW5kX2FwYnQiLCBhcmcpID09IDApCisJCWRpc2FibGVfYXBidF9wZXJjcHUgPSAxOworCWVsc2UgeworCQlwcl93YXJuaW5nKCJYODYgTVJTVCB0aW1lciBvcHRpb24gJXMgbm90IHJlY29nbmlzZWQiCisJCQkgICAiIHVzZSB4ODZfbXJzdF90aW1lcj1hcGJ0X29ubHkgb3IgbGFwaWNfYW5kX2FwYnRcbiIsCisJCQkgICBhcmcpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CitfX3NldHVwKCJ4ODZfbXJzdF90aW1lcj0iLCBzZXR1cF94ODZfbXJzdF90aW1lcik7CisKKy8qCisgKiBzdGFydCBjb3VudCBkb3duIGZyb20gMHhmZmZmX2ZmZmYuIHRoaXMgaXMgZG9uZSBieSB0b2dnbGluZyB0aGUgZW5hYmxlIGJpdAorICogdGhlbiBsb2FkIGluaXRpYWwgbG9hZCBjb3VudCB0byB+MC4KKyAqLworc3RhdGljIHZvaWQgYXBidF9zdGFydF9jb3VudGVyKGludCBuKQoreworCXVuc2lnbmVkIGxvbmcgY3RybCA9IGFwYnRfcmVhZGwobiwgQVBCVE1SX05fQ09OVFJPTCk7CisKKwljdHJsICY9IH5BUEJUTVJfQ09OVFJPTF9FTkFCTEU7CisJYXBidF93cml0ZWwobiwgY3RybCwgQVBCVE1SX05fQ09OVFJPTCk7CisJYXBidF93cml0ZWwobiwgfjAsIEFQQlRNUl9OX0xPQURfQ09VTlQpOworCS8qIGVuYWJsZSwgbWFzayBpbnRlcnJ1cHQgKi8KKwljdHJsICY9IH5BUEJUTVJfQ09OVFJPTF9NT0RFX1BFUklPRElDOworCWN0cmwgfD0gKEFQQlRNUl9DT05UUk9MX0VOQUJMRSB8IEFQQlRNUl9DT05UUk9MX0lOVCk7CisJYXBidF93cml0ZWwobiwgY3RybCwgQVBCVE1SX05fQ09OVFJPTCk7CisJLyogcmVhZCBpdCBvbmNlIHRvIGdldCBjYWNoZWQgY291bnRlciB2YWx1ZSBpbml0aWFsaXplZCAqLworCWFwYnRfcmVhZF9jbG9ja3NvdXJjZSgmY2xvY2tzb3VyY2VfYXBidCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhcGJ0X2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGFwYnRfZGV2ICpkZXYgPSAoc3RydWN0IGFwYnRfZGV2ICopZGF0YTsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICphZXZ0ID0gJmRldi0+ZXZ0OworCisJaWYgKCFhZXZ0LT5ldmVudF9oYW5kbGVyKSB7CisJCXByaW50ayhLRVJOX0lORk8gIlNwdXJpb3VzIEFQQlQgdGltZXIgaW50ZXJydXB0IG9uICVkXG4iLAorCQkgICAgICAgZGV2LT5udW0pOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCWFldnQtPmV2ZW50X2hhbmRsZXIoYWV2dCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBhcGJ0X3Jlc3RhcnRfY2xvY2tzb3VyY2Uoc3RydWN0IGNsb2Nrc291cmNlICpjcykKK3sKKwlhcGJ0X3N0YXJ0X2NvdW50ZXIocGh5X2NzX3RpbWVyX2lkKTsKK30KKworLyogU2V0dXAgSVJRIHJvdXRpbmcgdmlhIElPQVBJQyAqLworI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyB2b2lkIGFwYnRfc2V0dXBfaXJxKHN0cnVjdCBhcGJ0X2RldiAqYWRldikKK3sKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXA7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCisJLyogdGltZXIwIGlycSBoYXMgYmVlbiBzZXR1cCBlYXJseSAqLworCWlmIChhZGV2LT5pcnEgPT0gMCkKKwkJcmV0dXJuOworCWRlc2MgPSBpcnFfdG9fZGVzYyhhZGV2LT5pcnEpOworCWNoaXAgPSBnZXRfaXJxX2NoaXAoYWRldi0+aXJxKTsKKwlkaXNhYmxlX2lycShhZGV2LT5pcnEpOworCWRlc2MtPnN0YXR1cyB8PSBJUlFfTU9WRV9QQ05UWFQ7CisJaXJxX3NldF9hZmZpbml0eShhZGV2LT5pcnEsIGNwdW1hc2tfb2YoYWRldi0+Y3B1KSk7CisJLyogQVBCIHRpbWVyIGlycXMgYXJlIHNldCB1cCBhcyBtcF9pcnFzLCB0aW1lciBpcyBlZGdlIHRyaWdnZXJyZWQgKi8KKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShhZGV2LT5pcnEsIGNoaXAsIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKKwllbmFibGVfaXJxKGFkZXYtPmlycSk7CisJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORykKKwkJaWYgKHJlcXVlc3RfaXJxKGFkZXYtPmlycSwgYXBidF9pbnRlcnJ1cHRfaGFuZGxlciwKKwkJCQlJUlFGX1RJTUVSIHwgSVJRRl9ESVNBQkxFRCB8IElSUUZfTk9CQUxBTkNJTkcsCisJCQkJYWRldi0+bmFtZSwgYWRldikpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHJlcXVlc3QgSVJRIGZvciBBUEJUJWRcbiIsCisJCQkgICAgICAgYWRldi0+bnVtKTsKKwkJfQorfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGFwYnRfZW5hYmxlX2ludChpbnQgbikKK3sKKwl1bnNpZ25lZCBsb25nIGN0cmwgPSBhcGJ0X3JlYWRsKG4sIEFQQlRNUl9OX0NPTlRST0wpOworCS8qIGNsZWFyIHBlbmRpbmcgaW50ciAqLworCWFwYnRfcmVhZGwobiwgQVBCVE1SX05fRU9JKTsKKwljdHJsICY9IH5BUEJUTVJfQ09OVFJPTF9JTlQ7CisJYXBidF93cml0ZWwobiwgY3RybCwgQVBCVE1SX05fQ09OVFJPTCk7Cit9CisKK3N0YXRpYyB2b2lkIGFwYnRfZGlzYWJsZV9pbnQoaW50IG4pCit7CisJdW5zaWduZWQgbG9uZyBjdHJsID0gYXBidF9yZWFkbChuLCBBUEJUTVJfTl9DT05UUk9MKTsKKworCWN0cmwgfD0gQVBCVE1SX0NPTlRST0xfSU5UOworCWFwYnRfd3JpdGVsKG4sIGN0cmwsIEFQQlRNUl9OX0NPTlRST0wpOworfQorCisKK3N0YXRpYyBpbnQgX19pbml0IGFwYnRfY2xvY2tldmVudF9yZWdpc3Rlcih2b2lkKQoreworCXN0cnVjdCBzZmlfdGltZXJfdGFibGVfZW50cnkgKm10bXI7CisJc3RydWN0IGFwYnRfZGV2ICphZGV2ID0gJl9fZ2V0X2NwdV92YXIoY3B1X2FwYnRfZGV2KTsKKworCW10bXIgPSBzZmlfZ2V0X210bXIoQVBCVF9DTE9DS0VWRU5UMF9OVU0pOworCWlmIChtdG1yID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gZ2V0IE1UTVIgJWQgZnJvbSBTRklcbiIsCisJCSAgICAgICBBUEJUX0NMT0NLRVZFTlQwX05VTSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qCisJICogV2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIHNjYWxlZCBtYXRoIG11bHRpcGxpY2F0aW9uIGZhY3RvciBmb3IKKwkgKiBuYW5vc2Vjb25kIHRvIGFwYnQgdGljayBjb252ZXJzaW9uLgorCSAqIG11bHQgPSAobnNlYy9jeWNsZSkqMl5BUEJUX1NISUZUCisJICovCisJYXBidF9jbG9ja2V2ZW50Lm11bHQgPSBkaXZfc2MoKHVuc2lnbmVkIGxvbmcpIG10bXItPmZyZXFfaHoKKwkJCQkgICAgICAsIE5TRUNfUEVSX1NFQywgQVBCVF9TSElGVCk7CisKKwkvKiBDYWxjdWxhdGUgdGhlIG1pbiAvIG1heCBkZWx0YSAqLworCWFwYnRfY2xvY2tldmVudC5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4N0ZGRkZGRkYsCisJCQkJCQkJICAgJmFwYnRfY2xvY2tldmVudCk7CisJYXBidF9jbG9ja2V2ZW50Lm1pbl9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoCisJCUFQQlRfTUlOX0RFTFRBX1VTRUMqYXBidF9mcmVxLAorCQkmYXBidF9jbG9ja2V2ZW50KTsKKwkvKgorCSAqIFN0YXJ0IGFwYnQgd2l0aCB0aGUgYm9vdCBjcHUgbWFzayBhbmQgbWFrZSBpdAorCSAqIGdsb2JhbCBpZiBub3QgdXNlZCBmb3IgcGVyIGNwdSB0aW1lci4KKwkgKi8KKwlhcGJ0X2Nsb2NrZXZlbnQuY3B1bWFzayA9IGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlhZGV2LT5udW0gPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJbWVtY3B5KCZhZGV2LT5ldnQsICZhcGJ0X2Nsb2NrZXZlbnQsIHNpemVvZihzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlKSk7CisKKwlpZiAoZGlzYWJsZV9hcGJ0X3BlcmNwdSkgeworCQlhcGJ0X2Nsb2NrZXZlbnQucmF0aW5nID0gQVBCVF9DTE9DS0VWRU5UX1JBVElORyAtIDEwMDsKKwkJZ2xvYmFsX2Nsb2NrX2V2ZW50ID0gJmFkZXYtPmV2dDsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzIGNsb2NrZXZlbnQgcmVnaXN0ZXJlZCBhcyBnbG9iYWxcbiIsCisJCSAgICAgICBnbG9iYWxfY2xvY2tfZXZlbnQtPm5hbWUpOworCX0KKworCWlmIChyZXF1ZXN0X2lycShhcGJ0X2Nsb2NrZXZlbnQuaXJxLCBhcGJ0X2ludGVycnVwdF9oYW5kbGVyLAorCQkJSVJRRl9USU1FUiB8IElSUUZfRElTQUJMRUQgfCBJUlFGX05PQkFMQU5DSU5HLAorCQkJYXBidF9jbG9ja2V2ZW50Lm5hbWUsIGFkZXYpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHJlcXVlc3QgSVJRIGZvciBBUEJUJWRcbiIsCisJCSAgICAgICBhcGJ0X2Nsb2NrZXZlbnQuaXJxKTsKKwl9CisKKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoJmFkZXYtPmV2dCk7CisJLyogU3RhcnQgQVBCVCAwIGludGVycnVwdHMgKi8KKwlhcGJ0X2VuYWJsZV9pbnQoQVBCVF9DTE9DS0VWRU5UMF9OVU0pOworCisJc2ZpX2ZyZWVfbXRtcihtdG1yKTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19TTVAKKy8qIFNob3VsZCBiZSBjYWxsZWQgd2l0aCBwZXIgY3B1ICovCit2b2lkIGFwYnRfc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrKHZvaWQpCit7CisJc3RydWN0IGFwYnRfZGV2ICphZGV2OworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmFldnQ7CisJaW50IGNwdTsKKworCS8qIERvbid0IHJlZ2lzdGVyIGJvb3QgQ1BVIGNsb2NrZXZlbnQgKi8KKwljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaWYgKGNwdSA9PSBib290X2NwdV9pZCkKKwkJcmV0dXJuOworCS8qCisJICogV2UgbmVlZCB0byBjYWxjdWxhdGUgdGhlIHNjYWxlZCBtYXRoIG11bHRpcGxpY2F0aW9uIGZhY3RvciBmb3IKKwkgKiBuYW5vc2Vjb25kIHRvIGFwYnQgdGljayBjb252ZXJzaW9uLgorCSAqIG11bHQgPSAobnNlYy9jeWNsZSkqMl5BUEJUX1NISUZUCisJICovCisJcHJpbnRrKEtFUk5fSU5GTyAiSW5pdCBwZXIgQ1BVIGNsb2NrZXZlbnQgJWRcbiIsIGNwdSk7CisJYWRldiA9ICZwZXJfY3B1KGNwdV9hcGJ0X2RldiwgY3B1KTsKKwlhZXZ0ID0gJmFkZXYtPmV2dDsKKworCW1lbWNweShhZXZ0LCAmYXBidF9jbG9ja2V2ZW50LCBzaXplb2YoKmFldnQpKTsKKwlhZXZ0LT5jcHVtYXNrID0gY3B1bWFza19vZihjcHUpOworCWFldnQtPm5hbWUgPSBhZGV2LT5uYW1lOworCWFldnQtPm1vZGUgPSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ7CisKKwlwcmludGsoS0VSTl9JTkZPICJSZWdpc3RlcmluZyBDUFUgJWQgY2xvY2tldmVudCBkZXZpY2UgJXMsIG1hc2sgJTA4eFxuIiwKKwkgICAgICAgY3B1LCBhZXZ0LT5uYW1lLCAqKHUzMiAqKWFldnQtPmNwdW1hc2spOworCisJYXBidF9zZXR1cF9pcnEoYWRldik7CisKKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoYWV2dCk7CisKKwlhcGJ0X2VuYWJsZV9pbnQoY3B1KTsKKworCXJldHVybjsKK30KKworLyoKKyAqIHRoaXMgbm90aWZ5IGhhbmRsZXIgcHJvY2VzcyBDUFUgaG90cGx1ZyBldmVudHMuIGluIGNhc2Ugb2YgUzBpMywgbm9uYm9vdAorICogY3B1cyBhcmUgZGlzYWJsZWQvZW5hYmxlZCBmcmVxdWVudGx5LCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgd2Uga2VlcCB0aGUKKyAqIHBlciBjcHUgdGltZXIgaXJxIHJlZ2lzdGVyZWQgc28gdGhhdCB3ZSBkbyBuZWVkIHRvIGRvIGZyZWVfaXJxL3JlcXVlc3RfaXJxLgorICoKKyAqIFRPRE86IGl0IG1pZ2h0IGJlIG1vcmUgcmVsaWFibGUgdG8gZGlyZWN0bHkgZGlzYWJsZSBwZXJjcHUgY2xvY2tldmVudCBkZXZpY2UKKyAqIHdpdGhvdXQgdGhlIG5vdGlmaWVyIGNoYWluLiBjdXJyZW50bHksIGNwdSAwIG1heSBnZXQgaW50ZXJydXB0cyBmcm9tIG90aGVyCisgKiBjcHUgdGltZXJzIGR1cmluZyB0aGUgb2ZmbGluZSBwcm9jZXNzIGR1ZSB0byB0aGUgb3JkZXJpbmcgb2Ygbm90aWZpY2F0aW9uLgorICogdGhlIGV4dHJhIGludGVycnVwdCBpcyBoYXJtbGVzcy4KKyAqLworc3RhdGljIGludCBhcGJ0X2NwdWhwX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4sCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCXVuc2lnbmVkIGxvbmcgY3B1ID0gKHVuc2lnbmVkIGxvbmcpaGNwdTsKKwlzdHJ1Y3QgYXBidF9kZXYgKmFkZXYgPSAmcGVyX2NwdShjcHVfYXBidF9kZXYsIGNwdSk7CisKKwlzd2l0Y2ggKGFjdGlvbiAmIDB4ZikgeworCWNhc2UgQ1BVX0RFQUQ6CisJCWFwYnRfZGlzYWJsZV9pbnQoY3B1KTsKKwkJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUlVOTklORykKKwkJCXByX2RlYnVnKCJza2lwcGluZyBBUEJUIENQVSAlbHUgb2ZmbGluZVxuIiwgY3B1KTsKKwkJZWxzZSBpZiAoYWRldikgeworCQkJcHJfZGVidWcoIkFQQlQgY2xvY2tldmVudCBmb3IgY3B1ICVsdSBvZmZsaW5lXG4iLCBjcHUpOworCQkJZnJlZV9pcnEoYWRldi0+aXJxLCBhZGV2KTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9kZWJ1ZyhLRVJOX0lORk8gIkFQQlQgbm90aWZpZWQgJWx1LCBubyBhY3Rpb25cbiIsIGFjdGlvbik7CisJfQorCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBfX2luaXQgaW50IGFwYnRfbGF0ZV9pbml0KHZvaWQpCit7CisJaWYgKGRpc2FibGVfYXBidF9wZXJjcHUpCisJCXJldHVybiAwOworCS8qIFRoaXMgbm90aWZpZXIgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciB3b3JrcXVldWUgaXMgcmVhZHkgKi8KKwlob3RjcHVfbm90aWZpZXIoYXBidF9jcHVocF9ub3RpZnksIC0yMCk7CisJcmV0dXJuIDA7Cit9Citmc19pbml0Y2FsbChhcGJ0X2xhdGVfaW5pdCk7CisjZWxzZQorCit2b2lkIGFwYnRfc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrKHZvaWQpIHt9CisKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKK3N0YXRpYyB2b2lkIGFwYnRfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCQkgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwl1bnNpZ25lZCBsb25nIGN0cmw7CisJdWludDY0X3QgZGVsdGE7CisJaW50IHRpbWVyX251bTsKKwlzdHJ1Y3QgYXBidF9kZXYgKmFkZXYgPSBFVlRfVE9fQVBCVF9ERVYoZXZ0KTsKKworCXRpbWVyX251bSA9IGFkZXYtPm51bTsKKwlwcl9kZWJ1ZygiJXMgQ1BVICVkIHRpbWVyICVkIG1vZGU9JWRcbiIsCisJCSBfX2Z1bmNfXywgZmlyc3RfY3B1KCpldnQtPmNwdW1hc2spLCB0aW1lcl9udW0sIG1vZGUpOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwkJZGVsdGEgPSAoKHVpbnQ2NF90KShOU0VDX1BFUl9TRUMvSFopKSAqIGFwYnRfY2xvY2tldmVudC5tdWx0OworCQlkZWx0YSA+Pj0gYXBidF9jbG9ja2V2ZW50LnNoaWZ0OworCQljdHJsID0gYXBidF9yZWFkbCh0aW1lcl9udW0sIEFQQlRNUl9OX0NPTlRST0wpOworCQljdHJsIHw9IEFQQlRNUl9DT05UUk9MX01PREVfUEVSSU9ESUM7CisJCWFwYnRfd3JpdGVsKHRpbWVyX251bSwgY3RybCwgQVBCVE1SX05fQ09OVFJPTCk7CisJCS8qCisJCSAqIERXIEFQQiBwLiA0NiwgaGF2ZSB0byBkaXNhYmxlIHRpbWVyIGJlZm9yZSBsb2FkIGNvdW50ZXIsCisJCSAqIG1heSBjYXVzZSBzeW5jIHByb2JsZW0uCisJCSAqLworCQljdHJsICY9IH5BUEJUTVJfQ09OVFJPTF9FTkFCTEU7CisJCWFwYnRfd3JpdGVsKHRpbWVyX251bSwgY3RybCwgQVBCVE1SX05fQ09OVFJPTCk7CisJCXVkZWxheSgxKTsKKwkJcHJfZGVidWcoIlNldHRpbmcgY2xvY2sgcGVyaW9kICVkIGZvciBIWiAlZFxuIiwgKGludClkZWx0YSwgSFopOworCQlhcGJ0X3dyaXRlbCh0aW1lcl9udW0sIGRlbHRhLCBBUEJUTVJfTl9MT0FEX0NPVU5UKTsKKwkJY3RybCB8PSBBUEJUTVJfQ09OVFJPTF9FTkFCTEU7CisJCWFwYnRfd3JpdGVsKHRpbWVyX251bSwgY3RybCwgQVBCVE1SX05fQ09OVFJPTCk7CisJCWJyZWFrOworCQkvKiBBUEIgdGltZXIgZG9lcyBub3QgaGF2ZSBvbmUtc2hvdCBtb2RlLCB1c2UgZnJlZSBydW5uaW5nIG1vZGUgKi8KKwljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CisJCWN0cmwgPSBhcGJ0X3JlYWRsKHRpbWVyX251bSwgQVBCVE1SX05fQ09OVFJPTCk7CisJCS8qCisJCSAqIHNldCBmcmVlIHJ1bm5pbmcgbW9kZSwgdGhpcyBtb2RlIHdpbGwgbGV0IHRpbWVyIHJlbG9hZCBtYXgKKwkJICogdGltZW91dCB3aGljaCB3aWxsIGdpdmUgdGltZSAoM21pbiBvbiAyNU1IeiBjbG9jaykgdG8gcmVhcm0KKwkJICogdGhlIG5leHQgZXZlbnQsIHRoZXJlZm9yZSBlbXVsYXRlIHRoZSBvbmUtc2hvdCBtb2RlLgorCQkgKi8KKwkJY3RybCAmPSB+QVBCVE1SX0NPTlRST0xfRU5BQkxFOworCQljdHJsICY9IH5BUEJUTVJfQ09OVFJPTF9NT0RFX1BFUklPRElDOworCisJCWFwYnRfd3JpdGVsKHRpbWVyX251bSwgY3RybCwgQVBCVE1SX05fQ09OVFJPTCk7CisJCS8qIHdyaXRlIGFnYWluIHRvIHNldCBmcmVlIHJ1bm5pbmcgbW9kZSAqLworCQlhcGJ0X3dyaXRlbCh0aW1lcl9udW0sIGN0cmwsIEFQQlRNUl9OX0NPTlRST0wpOworCisJCS8qCisJCSAqIERXIEFQQiBwLiA0NiwgbG9hZCBjb3VudGVyIHdpdGggYWxsIDFzIGJlZm9yZSBzdGFydGluZyBmcmVlCisJCSAqIHJ1bm5pbmcgbW9kZS4KKwkJICovCisJCWFwYnRfd3JpdGVsKHRpbWVyX251bSwgfjAsIEFQQlRNUl9OX0xPQURfQ09VTlQpOworCQljdHJsICY9IH5BUEJUTVJfQ09OVFJPTF9JTlQ7CisJCWN0cmwgfD0gQVBCVE1SX0NPTlRST0xfRU5BQkxFOworCQlhcGJ0X3dyaXRlbCh0aW1lcl9udW0sIGN0cmwsIEFQQlRNUl9OX0NPTlRST0wpOworCQlicmVhazsKKworCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CisJCWFwYnRfZGlzYWJsZV9pbnQodGltZXJfbnVtKTsKKwkJY3RybCA9IGFwYnRfcmVhZGwodGltZXJfbnVtLCBBUEJUTVJfTl9DT05UUk9MKTsKKwkJY3RybCAmPSB+QVBCVE1SX0NPTlRST0xfRU5BQkxFOworCQlhcGJ0X3dyaXRlbCh0aW1lcl9udW0sIGN0cmwsIEFQQlRNUl9OX0NPTlRST0wpOworCQlicmVhazsKKworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgorCQlhcGJ0X2VuYWJsZV9pbnQodGltZXJfbnVtKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGFwYnRfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLAorCQkJICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCXVuc2lnbmVkIGxvbmcgY3RybDsKKwlpbnQgdGltZXJfbnVtOworCisJc3RydWN0IGFwYnRfZGV2ICphZGV2ID0gRVZUX1RPX0FQQlRfREVWKGV2dCk7CisKKwl0aW1lcl9udW0gPSBhZGV2LT5udW07CisJLyogRGlzYWJsZSB0aW1lciAqLworCWN0cmwgPSBhcGJ0X3JlYWRsKHRpbWVyX251bSwgQVBCVE1SX05fQ09OVFJPTCk7CisJY3RybCAmPSB+QVBCVE1SX0NPTlRST0xfRU5BQkxFOworCWFwYnRfd3JpdGVsKHRpbWVyX251bSwgY3RybCwgQVBCVE1SX05fQ09OVFJPTCk7CisJLyogd3JpdGUgbmV3IGNvdW50ICovCisJYXBidF93cml0ZWwodGltZXJfbnVtLCBkZWx0YSwgQVBCVE1SX05fTE9BRF9DT1VOVCk7CisJY3RybCB8PSBBUEJUTVJfQ09OVFJPTF9FTkFCTEU7CisJYXBidF93cml0ZWwodGltZXJfbnVtLCBjdHJsLCBBUEJUTVJfTl9DT05UUk9MKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEFQQiB0aW1lciBjbG9jayBpcyBub3QgaW4gc3luYyB3aXRoIHBjbGsgb24gTGFuZ3dlbGwsIHdoaWNoIHRyYW5zbGF0ZXMgdG8KKyAqIHVucmVsaWFibGUgcmVhZCB2YWx1ZSBjYXVzZWQgYnkgc2FtcGxpbmcgZXJyb3IuIHRoZSBlcnJvciBkb2VzIG5vdCBhZGQgdXAKKyAqIG92ZXJ0aW1lIGFuZCBvbmx5IGhhcHBlbnMgd2hlbiBzYW1wbGluZyBhIDAgYXMgYSAxIGJ5IG1pc3Rha2UuIHNvIHRoZSB0aW1lCisgKiB3b3VsZCBnbyBiYWNrd2FyZHMuIHRoZSBmb2xsb3dpbmcgY29kZSBpcyB0cnlpbmcgdG8gcHJldmVudCB0aW1lIHRyYXZlbGluZworICogYmFja3dhcmRzLiBsaXR0bGUgYml0IHBhcmFub2lkLgorICovCitzdGF0aWMgY3ljbGVfdCBhcGJ0X3JlYWRfY2xvY2tzb3VyY2Uoc3RydWN0IGNsb2Nrc291cmNlICpjcykKK3sKKwl1bnNpZ25lZCBsb25nIHQwLCB0MSwgdDI7CisJc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF9yZWFkOworCitiYWRfY291bnQ6CisJdDEgPSBhcGJ0X3JlYWRsKHBoeV9jc190aW1lcl9pZCwKKwkJCUFQQlRNUl9OX0NVUlJFTlRfVkFMVUUpOworCXQyID0gYXBidF9yZWFkbChwaHlfY3NfdGltZXJfaWQsCisJCQlBUEJUTVJfTl9DVVJSRU5UX1ZBTFVFKTsKKwlpZiAodW5saWtlbHkodDEgPCB0MikpIHsKKwkJcHJfZGVidWcoIkFQQlQ6IHJlYWQgY3VycmVudCBjb3VudCBlcnJvciAlbHg6JWx4OiVseFxuIiwKKwkJCSB0MSwgdDIsIHQyIC0gdDEpOworCQlnb3RvIGJhZF9jb3VudDsKKwl9CisJLyoKKwkgKiBjaGVjayBhZ2FpbnN0IGNhY2hlZCBsYXN0IHJlYWQsIG1ha2VzIHN1cmUgdGltZSBkb2VzIG5vdCBnbyBiYWNrLgorCSAqIGl0IGNvdWxkIGJlIGEgbm9ybWFsIHJvbGxvdmVyIGJ1dCB3ZSB3aWxsIGRvIHRyaXBwbGUgY2hlY2sgYW55d2F5CisJICovCisJaWYgKHVubGlrZWx5KHQyID4gbGFzdF9yZWFkKSkgeworCQkvKiBjaGVjayBpZiB3ZSBoYXZlIGEgbm9ybWFsIHJvbGxvdmVyICovCisJCXVuc2lnbmVkIGxvbmcgcmF3X2ludHJfc3RhdHVzID0KKwkJCWFwYnRfcmVhZGxfcmVnKEFQQlRNUlNfUkFXX0lOVF9TVEFUVVMpOworCQkvKgorCQkgKiBjcyB0aW1lciBpbnRlcnJ1cHQgaXMgbWFza2VkIGJ1dCByYXcgaW50ciBiaXQgaXMgc2V0IGlmCisJCSAqIHJvbGxvdmVyIG9jY3Vycy4gdGhlbiB3ZSByZWFkIEVPSSByZWcgdG8gY2xlYXIgaXQuCisJCSAqLworCQlpZiAocmF3X2ludHJfc3RhdHVzICYgKDEgPDwgcGh5X2NzX3RpbWVyX2lkKSkgeworCQkJYXBidF9yZWFkbChwaHlfY3NfdGltZXJfaWQsIEFQQlRNUl9OX0VPSSk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlwcl9kZWJ1ZygiQVBCIENTIGdvaW5nIGJhY2sgJWx4OiVseDolbHggIiwKKwkJCSB0MiwgbGFzdF9yZWFkLCB0MiAtIGxhc3RfcmVhZCk7CitiYWRfY291bnRfeDM6CisJCXByX2RlYnVnKEtFUk5fSU5GTyAidHJpcHBsZSBjaGVjayBlbmZvcmNlZFxuIik7CisJCXQwID0gYXBidF9yZWFkbChwaHlfY3NfdGltZXJfaWQsCisJCQkJQVBCVE1SX05fQ1VSUkVOVF9WQUxVRSk7CisJCXVkZWxheSgxKTsKKwkJdDEgPSBhcGJ0X3JlYWRsKHBoeV9jc190aW1lcl9pZCwKKwkJCQlBUEJUTVJfTl9DVVJSRU5UX1ZBTFVFKTsKKwkJdWRlbGF5KDEpOworCQl0MiA9IGFwYnRfcmVhZGwocGh5X2NzX3RpbWVyX2lkLAorCQkJCUFQQlRNUl9OX0NVUlJFTlRfVkFMVUUpOworCQlpZiAoKHQyID4gdDEpIHx8ICh0MSA+IHQwKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJFcnJvcjogQVBCIENTIHRyaXBwbGUgY2hlY2sgZmFpbGVkXG4iKTsKKwkJCWdvdG8gYmFkX2NvdW50X3gzOworCQl9CisJfQorb3V0OgorCWxhc3RfcmVhZCA9IHQyOworCXJldHVybiAoY3ljbGVfdCl+dDI7Cit9CisKK3N0YXRpYyBpbnQgYXBidF9jbG9ja3NvdXJjZV9yZWdpc3Rlcih2b2lkKQoreworCXU2NCBzdGFydCwgbm93OworCWN5Y2xlX3QgdDE7CisKKwkvKiBTdGFydCB0aGUgY291bnRlciwgdXNlIHRpbWVyIDIgYXMgc291cmNlLCB0aW1lciAwLzEgZm9yIGV2ZW50ICovCisJYXBidF9zdGFydF9jb3VudGVyKHBoeV9jc190aW1lcl9pZCk7CisKKwkvKiBWZXJpZnkgd2hldGhlciBhcGJ0IGNvdW50ZXIgd29ya3MgKi8KKwl0MSA9IGFwYnRfcmVhZF9jbG9ja3NvdXJjZSgmY2xvY2tzb3VyY2VfYXBidCk7CisJcmR0c2NsbChzdGFydCk7CisKKwkvKgorCSAqIFdlIGRvbid0IGtub3cgdGhlIFRTQyBmcmVxdWVuY3kgeWV0LCBidXQgd2FpdGluZyBmb3IKKwkgKiAyMDAwMDAgVFNDIGN5Y2xlcyBpcyBzYWZlOgorCSAqIDQgR0h6ID09IDUwdXMKKwkgKiAxIEdIeiA9PSAyMDB1cworCSAqLworCWRvIHsKKwkJcmVwX25vcCgpOworCQlyZHRzY2xsKG5vdyk7CisJfSB3aGlsZSAoKG5vdyAtIHN0YXJ0KSA8IDIwMDAwMFVMKTsKKworCS8qIEFQQlQgaXMgdGhlIG9ubHkgYWx3YXlzIG9uIGNsb2Nrc291cmNlLCBpdCBoYXMgdG8gd29yayEgKi8KKwlpZiAodDEgPT0gYXBidF9yZWFkX2Nsb2Nrc291cmNlKCZjbG9ja3NvdXJjZV9hcGJ0KSkKKwkJcGFuaWMoIkFQQlQgY291bnRlciBub3QgY291bnRpbmcuIEFQQlQgZGlzYWJsZWRcbiIpOworCisJLyoKKwkgKiBpbml0aWFsaXplIGFuZCByZWdpc3RlciBBUEJUIGNsb2Nrc291cmNlCisJICogY29udmVydCB0aGF0IHRvIG5zL2Nsb2NrIGN5Y2xlCisJICogbXVsdCA9IChucy9jKSAqIDJeQVBCVF9TSElGVAorCSAqLworCWNsb2Nrc291cmNlX2FwYnQubXVsdCA9IGRpdl9zYyhNU0VDX1BFUl9TRUMsCisJCQkJICAgICAgICh1bnNpZ25lZCBsb25nKSBhcGJ0X2ZyZXEsIEFQQlRfU0hJRlQpOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9hcGJ0KTsKKworCXJldHVybiAwOworfQorCisvKgorICogRWFybHkgc2V0dXAgdGhlIEFQQlQgdGltZXIsIG9ubHkgdXNlIHRpbWVyIDAgZm9yIGJvb3RpbmcgdGhlbiBzd2l0Y2ggdG8KKyAqIHBlciBDUFUgdGltZXIgaWYgcG9zc2libGUuCisgKiByZXR1cm5zIDEgaWYgcGVyIGNwdSBhcGJ0IGlzIHNldHVwCisgKiByZXR1cm5zIDAgaWYgbm8gcGVyIGNwdSBhcGJ0IGlzIGNob3NlbgorICogcGFuaWMgaWYgc2V0IHVwIGZhaWxlZCwgdGhpcyBpcyB0aGUgb25seSBwbGF0Zm9ybSB0aW1lciBvbiBNb29yZXN0b3duLgorICovCit2b2lkIF9faW5pdCBhcGJ0X3RpbWVfaW5pdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19TTVAKKwlpbnQgaTsKKwlzdHJ1Y3Qgc2ZpX3RpbWVyX3RhYmxlX2VudHJ5ICpwX210bXI7CisJdW5zaWduZWQgaW50IHBlcmNwdV90aW1lcjsKKwlzdHJ1Y3QgYXBidF9kZXYgKmFkZXY7CisjZW5kaWYKKworCWlmIChhcGJfdGltZXJfYmxvY2tfZW5hYmxlZCkKKwkJcmV0dXJuOworCWFwYnRfc2V0X21hcHBpbmcoKTsKKwlpZiAoYXBidF92aXJ0X2FkZHJlc3MpIHsKKwkJcHJfZGVidWcoIkZvdW5kIEFQQlQgdmVyc2lvbiAweCVseFxuIixcCisJCQkgYXBidF9yZWFkbF9yZWcoQVBCVE1SU19DT01QX1ZFUlNJT04pKTsKKwl9IGVsc2UKKwkJZ290byBvdXRfbm9hcGJ0OworCS8qCisJICogUmVhZCB0aGUgZnJlcXVlbmN5IGFuZCBjaGVjayBmb3IgYSBzYW5lIHZhbHVlLCBmb3IgRVNMIG1vZGVsCisJICogd2UgZXh0ZW5kIHRoZSBwb3NzaWJsZSBjbG9jayByYW5nZSB0byBhbGxvdyB0aW1lIHNjYWxpbmcuCisJICovCisKKwlpZiAoYXBidF9mcmVxIDwgQVBCVF9NSU5fRlJFUSB8fCBhcGJ0X2ZyZXEgPiBBUEJUX01BWF9GUkVRKSB7CisJCXByX2RlYnVnKCJBUEJUIGhhcyBpbnZhbGlkIGZyZXEgMHglbGx4XG4iLCBhcGJ0X2ZyZXEpOworCQlnb3RvIG91dF9ub2FwYnQ7CisJfQorCWlmIChhcGJ0X2Nsb2Nrc291cmNlX3JlZ2lzdGVyKCkpIHsKKwkJcHJfZGVidWcoIkFQQlQgaGFzIGZhaWxlZCB0byByZWdpc3RlciBjbG9ja3NvdXJjZVxuIik7CisJCWdvdG8gb3V0X25vYXBidDsKKwl9CisJaWYgKCFhcGJ0X2Nsb2NrZXZlbnRfcmVnaXN0ZXIoKSkKKwkJYXBiX3RpbWVyX2Jsb2NrX2VuYWJsZWQgPSAxOworCWVsc2UgeworCQlwcl9kZWJ1ZygiQVBCVCBoYXMgZmFpbGVkIHRvIHJlZ2lzdGVyIGNsb2NrZXZlbnRcbiIpOworCQlnb3RvIG91dF9ub2FwYnQ7CisJfQorI2lmZGVmIENPTkZJR19TTVAKKwkvKiBrZXJuZWwgY21kbGluZSBkaXNhYmxlIGFwYiB0aW1lciwgc28gd2Ugd2lsbCB1c2UgbGFwaWMgdGltZXJzICovCisJaWYgKGRpc2FibGVfYXBidF9wZXJjcHUpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiYXBidDogZGlzYWJsZWQgcGVyIGNwdSB0aW1lclxuIik7CisJCXJldHVybjsKKwl9CisJcHJfZGVidWcoIiVzOiAlZCBDUFVzIG9ubGluZVxuIiwgX19mdW5jX18sIG51bV9vbmxpbmVfY3B1cygpKTsKKwlpZiAobnVtX3Bvc3NpYmxlX2NwdXMoKSA8PSBzZmlfbXRpbWVyX251bSkgeworCQlwZXJjcHVfdGltZXIgPSAxOworCQlhcGJ0X251bV90aW1lcnNfdXNlZCA9IG51bV9wb3NzaWJsZV9jcHVzKCk7CisJfSBlbHNlIHsKKwkJcGVyY3B1X3RpbWVyID0gMDsKKwkJYXBidF9udW1fdGltZXJzX3VzZWQgPSAxOworCQlhZGV2ID0gJnBlcl9jcHUoY3B1X2FwYnRfZGV2LCAwKTsKKwkJYWRldi0+ZmxhZ3MgJj0gfkFQQlRfREVWX1VTRUQ7CisJfQorCXByX2RlYnVnKCIlczogJWQgQVBCIHRpbWVycyB1c2VkXG4iLCBfX2Z1bmNfXywgYXBidF9udW1fdGltZXJzX3VzZWQpOworCisJLyogaGVyZSB3ZSBzZXQgdXAgcGVyIENQVSB0aW1lciBkYXRhIHN0cnVjdHVyZSAqLworCWFwYnRfZGV2cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhcGJ0X2RldikgKiBhcGJ0X251bV90aW1lcnNfdXNlZCwKKwkJCSAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWFwYnRfZGV2cykgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBhbGxvY2F0ZSBBUEIgdGltZXIgZGV2aWNlc1xuIik7CisJCXJldHVybjsKKwl9CisJZm9yIChpID0gMDsgaSA8IGFwYnRfbnVtX3RpbWVyc191c2VkOyBpKyspIHsKKwkJYWRldiA9ICZwZXJfY3B1KGNwdV9hcGJ0X2RldiwgaSk7CisJCWFkZXYtPm51bSA9IGk7CisJCWFkZXYtPmNwdSA9IGk7CisJCXBfbXRtciA9IHNmaV9nZXRfbXRtcihpKTsKKwkJaWYgKHBfbXRtcikgeworCQkJYWRldi0+dGljayA9IHBfbXRtci0+ZnJlcV9oejsKKwkJCWFkZXYtPmlycSA9IHBfbXRtci0+aXJxOworCQl9IGVsc2UKKwkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGdldCB0aW1lciBmb3IgY3B1ICVkXG4iLCBpKTsKKwkJYWRldi0+Y291bnQgPSAwOworCQlzcHJpbnRmKGFkZXYtPm5hbWUsICJhcGJ0JWQiLCBpKTsKKwl9CisjZW5kaWYKKworCXJldHVybjsKKworb3V0X25vYXBidDoKKwlhcGJ0X2NsZWFyX21hcHBpbmcoKTsKKwlhcGJfdGltZXJfYmxvY2tfZW5hYmxlZCA9IDA7CisJcGFuaWMoImZhaWxlZCB0byBlbmFibGUgQVBCIHRpbWVyXG4iKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFwYnRfZGlzYWJsZShpbnQgbikKK3sKKwlpZiAoaXNfYXBidF9jYXBhYmxlKCkpIHsKKwkJdW5zaWduZWQgbG9uZyBjdHJsID0gIGFwYnRfcmVhZGwobiwgQVBCVE1SX05fQ09OVFJPTCk7CisJCWN0cmwgJj0gfkFQQlRNUl9DT05UUk9MX0VOQUJMRTsKKwkJYXBidF93cml0ZWwobiwgY3RybCwgQVBCVE1SX05fQ09OVFJPTCk7CisJfQorfQorCisvKiBjYWxsZWQgYmVmb3JlIGFwYl90aW1lcl9lbmFibGUsIHVzZSBlYXJseSBtYXAgKi8KK3Vuc2lnbmVkIGxvbmcgYXBidF9xdWlja19jYWxpYnJhdGUoKQoreworCWludCBpLCBzY2FsZTsKKwl1NjQgb2xkLCBuZXc7CisJY3ljbGVfdCB0MSwgdDI7CisJdW5zaWduZWQgbG9uZyBraHogPSAwOworCXUzMiBsb29wLCBzaGlmdDsKKworCWFwYnRfc2V0X21hcHBpbmcoKTsKKwlhcGJ0X3N0YXJ0X2NvdW50ZXIocGh5X2NzX3RpbWVyX2lkKTsKKworCS8qIGNoZWNrIGlmIHRoZSB0aW1lciBjYW4gY291bnQgZG93biwgb3RoZXJ3aXNlIHJldHVybiAqLworCW9sZCA9IGFwYnRfcmVhZF9jbG9ja3NvdXJjZSgmY2xvY2tzb3VyY2VfYXBidCk7CisJaSA9IDEwMDAwOworCXdoaWxlICgtLWkpIHsKKwkJaWYgKG9sZCAhPSBhcGJ0X3JlYWRfY2xvY2tzb3VyY2UoJmNsb2Nrc291cmNlX2FwYnQpKQorCQkJYnJlYWs7CisJfQorCWlmICghaSkKKwkJZ290byBmYWlsZWQ7CisKKwkvKiBjb3VudCAxNiBtcyAqLworCWxvb3AgPSAoYXBidF9mcmVxICogMTAwMCkgPDwgNDsKKworCS8qIHJlc3RhcnQgdGhlIHRpbWVyIHRvIGVuc3VyZSBpdCB3b24ndCBnZXQgdG8gMCBpbiB0aGUgY2FsaWJyYXRpb24gKi8KKwlhcGJ0X3N0YXJ0X2NvdW50ZXIocGh5X2NzX3RpbWVyX2lkKTsKKworCW9sZCA9IGFwYnRfcmVhZF9jbG9ja3NvdXJjZSgmY2xvY2tzb3VyY2VfYXBidCk7CisJb2xkICs9IGxvb3A7CisKKwl0MSA9IF9fbmF0aXZlX3JlYWRfdHNjKCk7CisKKwlkbyB7CisJCW5ldyA9IGFwYnRfcmVhZF9jbG9ja3NvdXJjZSgmY2xvY2tzb3VyY2VfYXBidCk7CisJfSB3aGlsZSAobmV3IDwgb2xkKTsKKworCXQyID0gX19uYXRpdmVfcmVhZF90c2MoKTsKKworCXNoaWZ0ID0gNTsKKwlpZiAodW5saWtlbHkobG9vcCA+PiBzaGlmdCA9PSAwKSkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiQVBCVCBUU0MgY2FsaWJyYXRpb24gZmFpbGVkLCBub3QgZW5vdWdoIHJlc29sdXRpb25cbiIpOworCQlyZXR1cm4gMDsKKwl9CisJc2NhbGUgPSAoaW50KWRpdl91NjQoKHQyIC0gdDEpLCBsb29wID4+IHNoaWZ0KTsKKwlraHogPSAoc2NhbGUgKiBhcGJ0X2ZyZXEgKiAxMDAwKSA+PiBzaGlmdDsKKwlwcmludGsoS0VSTl9JTkZPICJUU0MgZnJlcSBjYWxjdWxhdGVkIGJ5IEFQQiB0aW1lciBpcyAlbHUga2h6XG4iLCBraHopOworCXJldHVybiBraHo7CitmYWlsZWQ6CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKaW5kZXggNmUyOWIyYS4uMDAxODdmMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwpAQCAtMTM5MCw3ICsxMzkwLDcgQEAKIAl9CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JbWFza184MjU5QSgpOworCWxlZ2FjeV9waWMtPm1hc2tfYWxsKCk7CiAJbWFza19JT19BUElDX3NldHVwKGlvYXBpY19lbnRyaWVzKTsKIAogCWlmIChkbWFyX3RhYmxlX2luaXRfcmV0KQpAQCAtMTQyMiw3ICsxNDIyLDcgQEAKIG5veDJhcGljOgogCWlmICghcmV0KSAvKiBJUiBlbmFibGluZyBmYWlsZWQgKi8KIAkJcmVzdG9yZV9JT19BUElDX3NldHVwKGlvYXBpY19lbnRyaWVzKTsKLQl1bm1hc2tfODI1OUEoKTsKKwlsZWdhY3lfcGljLT5yZXN0b3JlX21hc2soKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIG91dDoKQEAgLTIwMTgsNyArMjAxOCw3IEBACiAJCX0KIAogCQltYXNrX0lPX0FQSUNfc2V0dXAoaW9hcGljX2VudHJpZXMpOwotCQltYXNrXzgyNTlBKCk7CisJCWxlZ2FjeV9waWMtPm1hc2tfYWxsKCk7CiAJfQogCiAJaWYgKHgyYXBpY19tb2RlKQpAQCAtMjA2Miw3ICsyMDYyLDcgQEAKIAogCWlmIChpbnRyX3JlbWFwcGluZ19lbmFibGVkKSB7CiAJCXJlZW5hYmxlX2ludHJfcmVtYXBwaW5nKHgyYXBpY19tb2RlKTsKLQkJdW5tYXNrXzgyNTlBKCk7CisJCWxlZ2FjeV9waWMtPnJlc3RvcmVfbWFzaygpOwogCQlyZXN0b3JlX0lPX0FQSUNfc2V0dXAoaW9hcGljX2VudHJpZXMpOwogCQlmcmVlX2lvYXBpY19lbnRyaWVzKGlvYXBpY19lbnRyaWVzKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKaW5kZXggMTQ4NjJmMS4uZTRlMGRkYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwpAQCAtMTQzLDEyICsxNDMsNiBAQAogc3RhdGljIHN0cnVjdCBpcnFfY2ZnIGlycV9jZmd4W05SX0lSUVNdOwogI2VuZGlmCiAKLXZvaWQgX19pbml0IGlvX2FwaWNfZGlzYWJsZV9sZWdhY3kodm9pZCkKLXsKLQlucl9sZWdhY3lfaXJxcyA9IDA7Ci0JbnJfaXJxc19nc2kgPSAwOwotfQotCiBpbnQgX19pbml0IGFyY2hfZWFybHlfaXJxX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwpAQCAtMTU3LDYgKzE1MSwxMSBAQAogCWludCBub2RlOwogCWludCBpOwogCisJaWYgKCFsZWdhY3lfcGljLT5ucl9sZWdhY3lfaXJxcykgeworCQlucl9pcnFzX2dzaSA9IDA7CisJCWlvX2FwaWNfaXJxcyA9IH4wVUw7CisJfQorCiAJY2ZnID0gaXJxX2NmZ3g7CiAJY291bnQgPSBBUlJBWV9TSVpFKGlycV9jZmd4KTsKIAlub2RlPSBjcHVfdG9fbm9kZShib290X2NwdV9pZCk7CkBAIC0xNzAsNyArMTY5LDcgQEAKIAkJICogRm9yIGxlZ2FjeSBJUlEncywgc3RhcnQgd2l0aCBhc3NpZ25pbmcgaXJxMCB0byBpcnExNSB0bwogCQkgKiBJUlEwX1ZFQ1RPUiB0byBJUlExNV9WRUNUT1Igb24gY3B1IDAuCiAJCSAqLwotCQlpZiAoaSA8IG5yX2xlZ2FjeV9pcnFzKSB7CisJCWlmIChpIDwgbGVnYWN5X3BpYy0+bnJfbGVnYWN5X2lycXMpIHsKIAkJCWNmZ1tpXS52ZWN0b3IgPSBJUlEwX1ZFQ1RPUiArIGk7CiAJCQljcHVtYXNrX3NldF9jcHUoMCwgY2ZnW2ldLmRvbWFpbik7CiAJCX0KQEAgLTg1Miw3ICs4NTEsNyBAQAogICovCiBzdGF0aWMgaW50IEVJU0FfRUxDUih1bnNpZ25lZCBpbnQgaXJxKQogewotCWlmIChpcnEgPCBucl9sZWdhY3lfaXJxcykgeworCWlmIChpcnEgPCBsZWdhY3lfcGljLT5ucl9sZWdhY3lfaXJxcykgewogCQl1bnNpZ25lZCBpbnQgcG9ydCA9IDB4NGQwICsgKGlycSA+PiAzKTsKIAkJcmV0dXJuIChpbmIocG9ydCkgPj4gKGlycSAmIDcpKSAmIDE7CiAJfQpAQCAtMTQzOSw3ICsxNDM4LDcgQEAKIAkgKiBjb250cm9sbGVycyBsaWtlIDgyNTkuIE5vdyB0aGF0IElPLUFQSUMgY2FuIGhhbmRsZSB0aGlzIGlycSwgdXBkYXRlCiAJICogdGhlIGNmZy0+ZG9tYWluLgogCSAqLwotCWlmIChpcnEgPCBucl9sZWdhY3lfaXJxcyAmJiBjcHVtYXNrX3Rlc3RfY3B1KDAsIGNmZy0+ZG9tYWluKSkKKwlpZiAoaXJxIDwgbGVnYWN5X3BpYy0+bnJfbGVnYWN5X2lycXMgJiYgY3B1bWFza190ZXN0X2NwdSgwLCBjZmctPmRvbWFpbikpCiAJCWFwaWMtPnZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbigwLCBjZmctPmRvbWFpbik7CiAKIAlpZiAoYXNzaWduX2lycV92ZWN0b3IoaXJxLCBjZmcsIGFwaWMtPnRhcmdldF9jcHVzKCkpKQpAQCAtMTQ2Myw4ICsxNDYyLDggQEAKIAl9CiAKIAlpb2FwaWNfcmVnaXN0ZXJfaW50cihpcnEsIGRlc2MsIHRyaWdnZXIpOwotCWlmIChpcnEgPCBucl9sZWdhY3lfaXJxcykKLQkJZGlzYWJsZV84MjU5QV9pcnEoaXJxKTsKKwlpZiAoaXJxIDwgbGVnYWN5X3BpYy0+bnJfbGVnYWN5X2lycXMpCisJCWxlZ2FjeV9waWMtPmNoaXAtPm1hc2soaXJxKTsKIAogCWlvYXBpY193cml0ZV9lbnRyeShhcGljX2lkLCBwaW4sIGVudHJ5KTsKIH0KQEAgLTE4NzMsNyArMTg3Miw3IEBACiAJdW5zaWduZWQgaW50IHY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICghbnJfbGVnYWN5X2lycXMpCisJaWYgKCFsZWdhY3lfcGljLT5ucl9sZWdhY3lfaXJxcykKIAkJcmV0dXJuOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIlxucHJpbnRpbmcgUElDIGNvbnRlbnRzXG4iKTsKQEAgLTE5NTcsNyArMTk1Niw3IEBACiAJCW5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY10gPSByZWdfMDEuYml0cy5lbnRyaWVzKzE7CiAJfQogCi0JaWYgKCFucl9sZWdhY3lfaXJxcykKKwlpZiAoIWxlZ2FjeV9waWMtPm5yX2xlZ2FjeV9pcnFzKQogCQlyZXR1cm47CiAKIAlmb3IoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKQEAgLTIwMTQsNyArMjAxMyw3IEBACiAJICovCiAJY2xlYXJfSU9fQVBJQygpOwogCi0JaWYgKCFucl9sZWdhY3lfaXJxcykKKwlpZiAoIWxlZ2FjeV9waWMtPm5yX2xlZ2FjeV9pcnFzKQogCQlyZXR1cm47CiAKIAkvKgpAQCAtMjI0Nyw5ICsyMjQ2LDkgQEAKIAlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCWlmIChpcnEgPCBucl9sZWdhY3lfaXJxcykgewotCQlkaXNhYmxlXzgyNTlBX2lycShpcnEpOwotCQlpZiAoaTgyNTlBX2lycV9wZW5kaW5nKGlycSkpCisJaWYgKGlycSA8IGxlZ2FjeV9waWMtPm5yX2xlZ2FjeV9pcnFzKSB7CisJCWxlZ2FjeV9waWMtPmNoaXAtPm1hc2soaXJxKTsKKwkJaWYgKGxlZ2FjeV9waWMtPmlycV9wZW5kaW5nKGlycSkpCiAJCQl3YXNfcGVuZGluZyA9IDE7CiAJfQogCWNmZyA9IGlycV9jZmcoaXJxKTsKQEAgLTI3ODIsOCArMjc4MSw4IEBACiAJCQkgKiBzbyBkZWZhdWx0IHRvIGFuIG9sZC1mYXNoaW9uZWQgODI1OQogCQkJICogaW50ZXJydXB0IGlmIHdlIGNhbi4uCiAJCQkgKi8KLQkJCWlmIChpcnEgPCBucl9sZWdhY3lfaXJxcykKLQkJCQltYWtlXzgyNTlBX2lycShpcnEpOworCQkJaWYgKGlycSA8IGxlZ2FjeV9waWMtPm5yX2xlZ2FjeV9pcnFzKQorCQkJCWxlZ2FjeV9waWMtPm1ha2VfaXJxKGlycSk7CiAJCQllbHNlCiAJCQkJLyogU3RyYW5nZS4gT2gsIHdlbGwuLiAqLwogCQkJCWRlc2MtPmNoaXAgPSAmbm9faXJxX2NoaXA7CkBAIC0yOTQwLDcgKzI5MzksNyBAQAogCS8qCiAJICogZ2V0L3NldCB0aGUgdGltZXIgSVJRIHZlY3RvcjoKIAkgKi8KLQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKKwlsZWdhY3lfcGljLT5jaGlwLT5tYXNrKDApOwogCWFzc2lnbl9pcnFfdmVjdG9yKDAsIGNmZywgYXBpYy0+dGFyZ2V0X2NwdXMoKSk7CiAKIAkvKgpAQCAtMjk1Myw3ICsyOTUyLDcgQEAKIAkgKiBhdXRvbWF0aWNhbGx5LgogCSAqLwogCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0xWVF9NQVNLRUQgfCBBUElDX0RNX0VYVElOVCk7Ci0JaW5pdF84MjU5QSgxKTsKKwlsZWdhY3lfcGljLT5pbml0KDEpOwogI2lmZGVmIENPTkZJR19YODZfMzIKIAl7CiAJCXVuc2lnbmVkIGludCB2ZXI7CkBAIC0zMDEyLDcgKzMwMTEsNyBAQAogCQlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKIAkJCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKIAkJCQlzZXR1cF9ubWkoKTsKLQkJCQllbmFibGVfODI1OUFfaXJxKDApOworCQkJCWxlZ2FjeV9waWMtPmNoaXAtPnVubWFzaygwKTsKIAkJCX0KIAkJCWlmIChkaXNhYmxlX3RpbWVyX3Bpbl8xID4gMCkKIAkJCQljbGVhcl9JT19BUElDX3BpbigwLCBwaW4xKTsKQEAgLTMwMzUsMTQgKzMwMzQsMTQgQEAKIAkJICovCiAJCXJlcGxhY2VfcGluX2F0X2lycV9ub2RlKGNmZywgbm9kZSwgYXBpYzEsIHBpbjEsIGFwaWMyLCBwaW4yKTsKIAkJc2V0dXBfdGltZXJfSVJRMF9waW4oYXBpYzIsIHBpbjIsIGNmZy0+dmVjdG9yKTsKLQkJZW5hYmxlXzgyNTlBX2lycSgwKTsKKwkJbGVnYWN5X3BpYy0+Y2hpcC0+dW5tYXNrKDApOwogCQlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKIAkJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4uLiB3b3Jrcy5cbiIpOwogCQkJdGltZXJfdGhyb3VnaF84MjU5ID0gMTsKIAkJCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKLQkJCQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKKwkJCQlsZWdhY3lfcGljLT5jaGlwLT5tYXNrKDApOwogCQkJCXNldHVwX25taSgpOwotCQkJCWVuYWJsZV84MjU5QV9pcnEoMCk7CisJCQkJbGVnYWN5X3BpYy0+Y2hpcC0+dW5tYXNrKDApOwogCQkJfQogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTMwNTAsNyArMzA0OSw3IEBACiAJCSAqIENsZWFudXAsIGp1c3QgaW4gY2FzZSAuLi4KIAkJICovCiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JCWRpc2FibGVfODI1OUFfaXJxKDApOworCQlsZWdhY3lfcGljLT5jaGlwLT5tYXNrKDApOwogCQljbGVhcl9JT19BUElDX3BpbihhcGljMiwgcGluMik7CiAJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4uLiBmYWlsZWQuXG4iKTsKIAl9CkBAIC0zMDY5LDIyICszMDY4LDIyIEBACiAKIAlsYXBpY19yZWdpc3Rlcl9pbnRyKDAsIGRlc2MpOwogCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0RNX0ZJWEVEIHwgY2ZnLT52ZWN0b3IpOwkvKiBGaXhlZCBtb2RlICovCi0JZW5hYmxlXzgyNTlBX2lycSgwKTsKKwlsZWdhY3lfcGljLT5jaGlwLT51bm1hc2soMCk7CiAKIAlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKIAkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLiB3b3Jrcy5cbiIpOwogCQlnb3RvIG91dDsKIAl9CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKKwlsZWdhY3lfcGljLT5jaGlwLT5tYXNrKDApOwogCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0xWVF9NQVNLRUQgfCBBUElDX0RNX0ZJWEVEIHwgY2ZnLT52ZWN0b3IpOwogCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4gZmFpbGVkLlxuIik7CiAKIAlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8KIAkJICAgICIuLi50cnlpbmcgdG8gc2V0IHVwIHRpbWVyIGFzIEV4dElOVCBJUlEuLi5cbiIpOwogCi0JaW5pdF84MjU5QSgwKTsKLQltYWtlXzgyNTlBX2lycSgwKTsKKwlsZWdhY3lfcGljLT5pbml0KDApOworCWxlZ2FjeV9waWMtPm1ha2VfaXJxKDApOwogCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0RNX0VYVElOVCk7CiAKIAl1bmxvY2tfRXh0SU5UX2xvZ2ljKCk7CkBAIC0zMTI2LDcgKzMxMjUsNyBAQAogCS8qCiAJICogY2FsbGluZyBlbmFibGVfSU9fQVBJQygpIGlzIG1vdmVkIHRvIHNldHVwX2xvY2FsX0FQSUMgZm9yIEJQCiAJICovCi0JaW9fYXBpY19pcnFzID0gbnJfbGVnYWN5X2lycXMgPyB+UElDX0lSUVMgOiB+MFVMOworCWlvX2FwaWNfaXJxcyA9IGxlZ2FjeV9waWMtPm5yX2xlZ2FjeV9pcnFzID8gflBJQ19JUlFTIDogfjBVTDsKIAogCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIkVOQUJMSU5HIElPLUFQSUMgSVJRc1xuIik7CiAJLyoKQEAgLTMxMzcsNyArMzEzNiw3IEBACiAJc3luY19BcmJfSURzKCk7CiAJc2V0dXBfSU9fQVBJQ19pcnFzKCk7CiAJaW5pdF9JT19BUElDX3RyYXBzKCk7Ci0JaWYgKG5yX2xlZ2FjeV9pcnFzKQorCWlmIChsZWdhY3lfcGljLT5ucl9sZWdhY3lfaXJxcykKIAkJY2hlY2tfdGltZXIoKTsKIH0KIApAQCAtMzkyOCw3ICszOTI3LDcgQEAKIAkvKgogCSAqIElSUXMgPCAxNiBhcmUgYWxyZWFkeSBpbiB0aGUgaXJxXzJfcGluW10gbWFwCiAJICovCi0JaWYgKGlycSA+PSBucl9sZWdhY3lfaXJxcykgeworCWlmIChpcnEgPj0gbGVnYWN5X3BpYy0+bnJfbGVnYWN5X2lycXMpIHsKIAkJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwogCQlpZiAoYWRkX3Bpbl90b19pcnFfbm9kZV9ub3BhbmljKGNmZywgbm9kZSwgaW9hcGljLCBwaW4pKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICJjYW4gbm90IGFkZCBwaW4gJWQgZm9yIGlycSAlZFxuIiwKQEAgLTQzMDIsMyArNDMwMSwyNCBAQAogCiAJbnJfaW9hcGljcysrOwogfQorCisvKiBFbmFibGUgSU9BUElDIGVhcmx5IGp1c3QgZm9yIHN5c3RlbSB0aW1lciAqLwordm9pZCBfX2luaXQgcHJlX2luaXRfYXBpY19JUlEwKHZvaWQpCit7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKKwlwcmludGsoS0VSTl9JTkZPICJFYXJseSBBUElDIHNldHVwIGZvciBzeXN0ZW0gdGltZXIwXG4iKTsKKyNpZm5kZWYgQ09ORklHX1NNUAorCXBoeXNfY3B1X3ByZXNlbnRfbWFwID0gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCk7CisjZW5kaWYKKwlkZXNjID0gaXJxX3RvX2Rlc2NfYWxsb2Nfbm9kZSgwLCAwKTsKKworCXNldHVwX2xvY2FsX0FQSUMoKTsKKworCWNmZyA9IGlycV9jZmcoMCk7CisJYWRkX3Bpbl90b19pcnFfbm9kZShjZmcsIDAsIDAsIDApOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKDAsICZpb2FwaWNfY2hpcCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOworCisJc2V0dXBfSU9fQVBJQ19pcnEoMCwgMCwgMCwgZGVzYywgMCwgMCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9ubWkuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL25taS5jCmluZGV4IGJkN2M5NmIuLjhhYTY1YWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL25taS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL25taS5jCkBAIC0xNzcsNyArMTc3LDcgQEAKIGVycm9yOgogCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKIAkJaWYgKCF0aW1lcl90aHJvdWdoXzgyNTkpCi0JCQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKKwkJCWxlZ2FjeV9waWMtPmNoaXAtPm1hc2soMCk7CiAJCW9uX2VhY2hfY3B1KF9fYWNwaV9ubWlfZGlzYWJsZSwgTlVMTCwgMSk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9udW1hcV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvbnVtYXFfMzIuYwppbmRleCA0N2RkODU2Li4zZTI4NDAxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9udW1hcV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL251bWFxXzMyLmMKQEAgLTI3Nyw2ICsyNzcsNyBAQAogCQl4ODZfaW5pdC5tcHBhcnNlLm1wY19vZW1fcGNpX2J1cyA9IG1wY19vZW1fcGNpX2J1czsKIAkJeDg2X2luaXQubXBwYXJzZS5tcGNfb2VtX2J1c19pbmZvID0gbXBjX29lbV9idXNfaW5mbzsKIAkJeDg2X2luaXQudGltZXJzLnRzY19wcmVfaW5pdCA9IG51bWFxX3RzY19pbml0OworCQl4ODZfaW5pdC5wY2kuaW5pdCA9IHBjaV9udW1hcV9pbml0OwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL0tjb25maWcgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZwppbmRleCBmMTM4YzZjLi44NzBlNmNjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZwpAQCAtMTAsNiArMTAsMjAgQEAKIAogY29tbWVudCAiQ1BVRnJlcSBwcm9jZXNzb3IgZHJpdmVycyIKIAorY29uZmlnIFg4Nl9QQ0NfQ1BVRlJFUQorCXRyaXN0YXRlICJQcm9jZXNzb3IgQ2xvY2tpbmcgQ29udHJvbCBpbnRlcmZhY2UgZHJpdmVyIgorCWRlcGVuZHMgb24gQUNQSSAmJiBBQ1BJX1BST0NFU1NPUgorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFBDQyBpbnRlcmZhY2UuCisKKwkgIEZvciBkZXRhaWxzLCB0YWtlIGEgbG9vayBhdDoKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vY3B1LWZyZXEvcGNjLWNwdWZyZXEudHh0Pi4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcGNjLWNwdWZyZXEuCisKKwkgIElmIGluIGRvdWJ0LCBzYXkgTi4KKwogY29uZmlnIFg4Nl9BQ1BJX0NQVUZSRVEKIAl0cmlzdGF0ZSAiQUNQSSBQcm9jZXNzb3IgUC1TdGF0ZXMgZHJpdmVyIgogCXNlbGVjdCBDUFVfRlJFUV9UQUJMRQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL01ha2VmaWxlCmluZGV4IDUwOTI5NmQuLjE4NDBjMGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvTWFrZWZpbGUKQEAgLTQsNiArNCw3IEBACiAKIG9iai0kKENPTkZJR19YODZfUE9XRVJOT1dfSzgpCQkrPSBwb3dlcm5vdy1rOC5vCiBvYmotJChDT05GSUdfWDg2X0FDUElfQ1BVRlJFUSkJCSs9IGFjcGktY3B1ZnJlcS5vCitvYmotJChDT05GSUdfWDg2X1BDQ19DUFVGUkVRKQkJKz0gcGNjLWNwdWZyZXEubwogb2JqLSQoQ09ORklHX1g4Nl9QT1dFUk5PV19LNikJCSs9IHBvd2Vybm93LWs2Lm8KIG9iai0kKENPTkZJR19YODZfUE9XRVJOT1dfSzcpCQkrPSBwb3dlcm5vdy1rNy5vCiBvYmotJChDT05GSUdfWDg2X0xPTkdIQVVMKQkJKz0gbG9uZ2hhdWwubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3BjYy1jcHVmcmVxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcGNjLWNwdWZyZXEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjM2ZDI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3BjYy1jcHVmcmVxLmMKQEAgLTAsMCArMSw2MjAgQEAKKy8qCisgKiAgcGNjLWNwdWZyZXEuYyAtIFByb2Nlc3NvciBDbG9ja2luZyBDb250cm9sIGZpcm13YXJlIGNwdWZyZXEgaW50ZXJmYWNlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBNYXR0aGV3IEdhcnJldHQgPG1qZ0ByZWRoYXQuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwOSBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLgorICoJTmFnYW5hbmRhIENodW1iYWxrYXIgPG5hZ2FuYW5kYS5jaHVtYmFsa2FyQGhwLmNvbT4KKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvciBOT04KKyAqICBJTkZSSU5HRU1FTlQuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKKyNpbmNsdWRlIDxhY3BpL3Byb2Nlc3Nvci5oPgorCisjZGVmaW5lIFBDQ19WRVJTSU9OIAkiMS4wMC4wMCIKKyNkZWZpbmUgUE9MTF9MT09QUyAJMzAwCisKKyNkZWZpbmUgQ01EX0NPTVBMRVRFIAkweDEKKyNkZWZpbmUgQ01EX0dFVF9GUkVRIAkweDAKKyNkZWZpbmUgQ01EX1NFVF9GUkVRIAkweDEKKworI2RlZmluZSBCVUZfU1oJCTQKKworI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsCVwKKwkJCQkJICAgICAicGNjLWNwdWZyZXEiLCBtc2cpCisKK3N0cnVjdCBwY2NfcmVnaXN0ZXJfcmVzb3VyY2UgeworCXU4IGRlc2NyaXB0b3I7CisJdTE2IGxlbmd0aDsKKwl1OCBzcGFjZV9pZDsKKwl1OCBiaXRfd2lkdGg7CisJdTggYml0X29mZnNldDsKKwl1OCBhY2Nlc3Nfc2l6ZTsKKwl1NjQgYWRkcmVzczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgcGNjX21lbW9yeV9yZXNvdXJjZSB7CisJdTggZGVzY3JpcHRvcjsKKwl1MTYgbGVuZ3RoOworCXU4IHNwYWNlX2lkOworCXU4IHJlc291cmNlX3VzYWdlOworCXU4IHR5cGVfc3BlY2lmaWM7CisJdTY0IGdyYW51bGFyaXR5OworCXU2NCBtaW5pbXVtOworCXU2NCBtYXhpbXVtOworCXU2NCB0cmFuc2xhdGlvbl9vZmZzZXQ7CisJdTY0IGFkZHJlc3NfbGVuZ3RoOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIgcGNjX2NwdWZyZXFfZHJpdmVyOworCitzdHJ1Y3QgcGNjX2hlYWRlciB7CisJdTMyIHNpZ25hdHVyZTsKKwl1MTYgbGVuZ3RoOworCXU4IG1ham9yOworCXU4IG1pbm9yOworCXUzMiBmZWF0dXJlczsKKwl1MTYgY29tbWFuZDsKKwl1MTYgc3RhdHVzOworCXUzMiBsYXRlbmN5OworCXUzMiBtaW5pbXVtX3RpbWU7CisJdTMyIG1heGltdW1fdGltZTsKKwl1MzIgbm9taW5hbDsKKwl1MzIgdGhyb3R0bGVkX2ZyZXF1ZW5jeTsKKwl1MzIgbWluaW11bV9mcmVxdWVuY3k7Cit9OworCitzdGF0aWMgdm9pZCBfX2lvbWVtICpwY2NoX3ZpcnRfYWRkcjsKK3N0YXRpYyBzdHJ1Y3QgcGNjX2hlYWRlciBfX2lvbWVtICpwY2NoX2hkcjsKKworc3RhdGljIERFRklORV9TUElOTE9DSyhwY2NfbG9jayk7CisKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgZG9vcmJlbGw7CisKK3N0YXRpYyB1NjQgZG9vcmJlbGxfcHJlc2VydmU7CitzdGF0aWMgdTY0IGRvb3JiZWxsX3dyaXRlOworCitzdGF0aWMgdTggT1NDX1VVSURbMTZdID0gezB4NjMsIDB4OUIsIDB4MkMsIDB4OUYsIDB4NzAsIDB4OTEsIDB4NDksIDB4MWYsCisJCQkgIDB4QkIsIDB4NEYsIDB4QTUsIDB4OTgsIDB4MkYsIDB4QTEsIDB4QjUsIDB4NDZ9OworCitzdHJ1Y3QgcGNjX2NwdSB7CisJdTMyIGlucHV0X29mZnNldDsKKwl1MzIgb3V0cHV0X29mZnNldDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNjX2NwdSAqcGNjX2NwdV9pbmZvOworCitzdGF0aWMgaW50IHBjY19jcHVmcmVxX3ZlcmlmeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwljcHVmcmVxX3ZlcmlmeV93aXRoaW5fbGltaXRzKHBvbGljeSwgcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxLAorCQkJCSAgICAgcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBjY19jbWQodm9pZCkKK3sKKwl1NjQgZG9vcmJlbGxfdmFsdWU7CisJaW50IGk7CisKKwlhY3BpX3JlYWQoJmRvb3JiZWxsX3ZhbHVlLCAmZG9vcmJlbGwpOworCWFjcGlfd3JpdGUoKGRvb3JiZWxsX3ZhbHVlICYgZG9vcmJlbGxfcHJlc2VydmUpIHwgZG9vcmJlbGxfd3JpdGUsCisJCSAgICZkb29yYmVsbCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUE9MTF9MT09QUzsgaSsrKSB7CisJCWlmIChpb3JlYWQxNigmcGNjaF9oZHItPnN0YXR1cykgJiBDTURfQ09NUExFVEUpCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2NfY2xlYXJfbWFwcGluZyh2b2lkKQoreworCWlmIChwY2NoX3ZpcnRfYWRkcikKKwkJaW91bm1hcChwY2NoX3ZpcnRfYWRkcik7CisJcGNjaF92aXJ0X2FkZHIgPSBOVUxMOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHBjY19nZXRfZnJlcSh1bnNpZ25lZCBpbnQgY3B1KQoreworCXN0cnVjdCBwY2NfY3B1ICpwY2NfY3B1X2RhdGE7CisJdW5zaWduZWQgaW50IGN1cnJfZnJlcTsKKwl1bnNpZ25lZCBpbnQgZnJlcV9saW1pdDsKKwl1MTYgc3RhdHVzOworCXUzMiBpbnB1dF9idWZmZXI7CisJdTMyIG91dHB1dF9idWZmZXI7CisKKwlzcGluX2xvY2soJnBjY19sb2NrKTsKKworCWRwcmludGsoImdldDogZ2V0X2ZyZXEgZm9yIENQVSAlZFxuIiwgY3B1KTsKKwlwY2NfY3B1X2RhdGEgPSBwZXJfY3B1X3B0cihwY2NfY3B1X2luZm8sIGNwdSk7CisKKwlpbnB1dF9idWZmZXIgPSAweDE7CisJaW93cml0ZTMyKGlucHV0X2J1ZmZlciwKKwkJCShwY2NoX3ZpcnRfYWRkciArIHBjY19jcHVfZGF0YS0+aW5wdXRfb2Zmc2V0KSk7CisJaW93cml0ZTE2KENNRF9HRVRfRlJFUSwgJnBjY2hfaGRyLT5jb21tYW5kKTsKKworCXBjY19jbWQoKTsKKworCW91dHB1dF9idWZmZXIgPQorCQlpb3JlYWQzMihwY2NoX3ZpcnRfYWRkciArIHBjY19jcHVfZGF0YS0+b3V0cHV0X29mZnNldCk7CisKKwkvKiBDbGVhciB0aGUgaW5wdXQgYnVmZmVyIC0gd2UgYXJlIGRvbmUgd2l0aCB0aGUgY3VycmVudCBjb21tYW5kICovCisJbWVtc2V0X2lvKChwY2NoX3ZpcnRfYWRkciArIHBjY19jcHVfZGF0YS0+aW5wdXRfb2Zmc2V0KSwgMCwgQlVGX1NaKTsKKworCXN0YXR1cyA9IGlvcmVhZDE2KCZwY2NoX2hkci0+c3RhdHVzKTsKKwlpZiAoc3RhdHVzICE9IENNRF9DT01QTEVURSkgeworCQlkcHJpbnRrKCJnZXQ6IEZBSUxFRDogZm9yIENQVSAlZCwgc3RhdHVzIGlzICVkXG4iLAorCQkJY3B1LCBzdGF0dXMpOworCQlnb3RvIGNtZF9pbmNvbXBsZXRlOworCX0KKwlpb3dyaXRlMTYoMCwgJnBjY2hfaGRyLT5zdGF0dXMpOworCWN1cnJfZnJlcSA9ICgoKGlvcmVhZDMyKCZwY2NoX2hkci0+bm9taW5hbCkgKiAob3V0cHV0X2J1ZmZlciAmIDB4ZmYpKQorCQkJLyAxMDApICogMTAwMCk7CisKKwlkcHJpbnRrKCJnZXQ6IFNVQ0NFU1M6ICh2aXJ0dWFsKSBvdXRwdXRfb2Zmc2V0IGZvciBjcHUgJWQgaXMgIgorCQkiMHgleCwgY29udGFpbnMgYSB2YWx1ZSBvZjogMHgleC4gU3BlZWQgaXM6ICVkIE1IelxuIiwKKwkJY3B1LCAocGNjaF92aXJ0X2FkZHIgKyBwY2NfY3B1X2RhdGEtPm91dHB1dF9vZmZzZXQpLAorCQlvdXRwdXRfYnVmZmVyLCBjdXJyX2ZyZXEpOworCisJZnJlcV9saW1pdCA9IChvdXRwdXRfYnVmZmVyID4+IDgpICYgMHhmZjsKKwlpZiAoZnJlcV9saW1pdCAhPSAweGZmKSB7CisJCWRwcmludGsoImdldDogZnJlcXVlbmN5IGZvciBjcHUgJWQgaXMgYmVpbmcgdGVtcG9yYXJpbHkiCisJCQkiIGNhcHBlZCBhdCAlZFxuIiwgY3B1LCBjdXJyX2ZyZXEpOworCX0KKworCXNwaW5fdW5sb2NrKCZwY2NfbG9jayk7CisJcmV0dXJuIGN1cnJfZnJlcTsKKworY21kX2luY29tcGxldGU6CisJaW93cml0ZTE2KDAsICZwY2NoX2hkci0+c3RhdHVzKTsKKwlzcGluX3VubG9jaygmcGNjX2xvY2spOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHBjY19jcHVmcmVxX3RhcmdldChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB0YXJnZXRfZnJlcSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCByZWxhdGlvbikKK3sKKwlzdHJ1Y3QgcGNjX2NwdSAqcGNjX2NwdV9kYXRhOworCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOworCXUxNiBzdGF0dXM7CisJdTMyIGlucHV0X2J1ZmZlcjsKKwlpbnQgY3B1OworCisJc3Bpbl9sb2NrKCZwY2NfbG9jayk7CisJY3B1ID0gcG9saWN5LT5jcHU7CisJcGNjX2NwdV9kYXRhID0gcGVyX2NwdV9wdHIocGNjX2NwdV9pbmZvLCBjcHUpOworCisJZHByaW50aygidGFyZ2V0OiBDUFUgJWQgc2hvdWxkIGdvIHRvIHRhcmdldCBmcmVxOiAlZCAiCisJCSIodmlydHVhbCkgaW5wdXRfb2Zmc2V0IGlzIDB4JXhcbiIsCisJCWNwdSwgdGFyZ2V0X2ZyZXEsCisJCShwY2NoX3ZpcnRfYWRkciArIHBjY19jcHVfZGF0YS0+aW5wdXRfb2Zmc2V0KSk7CisKKwlmcmVxcy5uZXcgPSB0YXJnZXRfZnJlcTsKKwlmcmVxcy5jcHUgPSBjcHU7CisJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUFJFQ0hBTkdFKTsKKworCWlucHV0X2J1ZmZlciA9IDB4MSB8ICgoKHRhcmdldF9mcmVxICogMTAwKQorCQkJICAgICAgIC8gKGlvcmVhZDMyKCZwY2NoX2hkci0+bm9taW5hbCkgKiAxMDAwKSkgPDwgOCk7CisJaW93cml0ZTMyKGlucHV0X2J1ZmZlciwKKwkJCShwY2NoX3ZpcnRfYWRkciArIHBjY19jcHVfZGF0YS0+aW5wdXRfb2Zmc2V0KSk7CisJaW93cml0ZTE2KENNRF9TRVRfRlJFUSwgJnBjY2hfaGRyLT5jb21tYW5kKTsKKworCXBjY19jbWQoKTsKKworCS8qIENsZWFyIHRoZSBpbnB1dCBidWZmZXIgLSB3ZSBhcmUgZG9uZSB3aXRoIHRoZSBjdXJyZW50IGNvbW1hbmQgKi8KKwltZW1zZXRfaW8oKHBjY2hfdmlydF9hZGRyICsgcGNjX2NwdV9kYXRhLT5pbnB1dF9vZmZzZXQpLCAwLCBCVUZfU1opOworCisJc3RhdHVzID0gaW9yZWFkMTYoJnBjY2hfaGRyLT5zdGF0dXMpOworCWlmIChzdGF0dXMgIT0gQ01EX0NPTVBMRVRFKSB7CisJCWRwcmludGsoInRhcmdldDogRkFJTEVEIGZvciBjcHUgJWQsIHdpdGggc3RhdHVzOiAweCV4XG4iLAorCQkJY3B1LCBzdGF0dXMpOworCQlnb3RvIGNtZF9pbmNvbXBsZXRlOworCX0KKwlpb3dyaXRlMTYoMCwgJnBjY2hfaGRyLT5zdGF0dXMpOworCisJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUE9TVENIQU5HRSk7CisJZHByaW50aygidGFyZ2V0OiB3YXMgU1VDQ0VTU0ZVTCBmb3IgY3B1ICVkXG4iLCBjcHUpOworCXNwaW5fdW5sb2NrKCZwY2NfbG9jayk7CisKKwlyZXR1cm4gMDsKKworY21kX2luY29tcGxldGU6CisJaW93cml0ZTE2KDAsICZwY2NoX2hkci0+c3RhdHVzKTsKKwlzcGluX3VubG9jaygmcGNjX2xvY2spOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHBjY19nZXRfb2Zmc2V0KGludCBjcHUpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7QUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEx9OworCXVuaW9uIGFjcGlfb2JqZWN0ICpwY2NwLCAqb2Zmc2V0OworCXN0cnVjdCBwY2NfY3B1ICpwY2NfY3B1X2RhdGE7CisJc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcjsKKwlpbnQgcmV0ID0gMDsKKworCXByID0gcGVyX2NwdShwcm9jZXNzb3JzLCBjcHUpOworCXBjY19jcHVfZGF0YSA9IHBlcl9jcHVfcHRyKHBjY19jcHVfaW5mbywgY3B1KTsKKworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KHByLT5oYW5kbGUsICJQQ0NQIiwgTlVMTCwgJmJ1ZmZlcik7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBjY3AgPSBidWZmZXIucG9pbnRlcjsKKwlpZiAoIXBjY3AgfHwgcGNjcC0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9mcmVlOworCX07CisKKwlvZmZzZXQgPSAmKHBjY3AtPnBhY2thZ2UuZWxlbWVudHNbMF0pOworCWlmICghb2Zmc2V0IHx8IG9mZnNldC0+dHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUikgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCXBjY19jcHVfZGF0YS0+aW5wdXRfb2Zmc2V0ID0gb2Zmc2V0LT5pbnRlZ2VyLnZhbHVlOworCisJb2Zmc2V0ID0gJihwY2NwLT5wYWNrYWdlLmVsZW1lbnRzWzFdKTsKKwlpZiAoIW9mZnNldCB8fCBvZmZzZXQtPnR5cGUgIT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlwY2NfY3B1X2RhdGEtPm91dHB1dF9vZmZzZXQgPSBvZmZzZXQtPmludGVnZXIudmFsdWU7CisKKwltZW1zZXRfaW8oKHBjY2hfdmlydF9hZGRyICsgcGNjX2NwdV9kYXRhLT5pbnB1dF9vZmZzZXQpLCAwLCBCVUZfU1opOworCW1lbXNldF9pbygocGNjaF92aXJ0X2FkZHIgKyBwY2NfY3B1X2RhdGEtPm91dHB1dF9vZmZzZXQpLCAwLCBCVUZfU1opOworCisJZHByaW50aygicGNjX2dldF9vZmZzZXQ6IGZvciBDUFUgJWQ6IHBjY19jcHVfZGF0YSAiCisJCSJpbnB1dF9vZmZzZXQ6IDB4JXgsIHBjY19jcHVfZGF0YSBvdXRwdXRfb2Zmc2V0OiAweCV4XG4iLAorCQljcHUsIHBjY19jcHVfZGF0YS0+aW5wdXRfb2Zmc2V0LCBwY2NfY3B1X2RhdGEtPm91dHB1dF9vZmZzZXQpOworb3V0X2ZyZWU6CisJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHBjY19jcHVmcmVxX2RvX29zYyhhY3BpX2hhbmRsZSAqaGFuZGxlKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBpbnB1dDsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgb3V0cHV0ID0ge0FDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMfTsKKwl1bmlvbiBhY3BpX29iamVjdCBpbl9wYXJhbXNbNF07CisJdW5pb24gYWNwaV9vYmplY3QgKm91dF9vYmo7CisJdTMyIGNhcGFiaWxpdGllc1syXTsKKwl1MzIgZXJyb3JzOworCXUzMiBzdXBwb3J0ZWQ7CisJaW50IHJldCA9IDA7CisKKwlpbnB1dC5jb3VudCA9IDQ7CisJaW5wdXQucG9pbnRlciA9IGluX3BhcmFtczsKKwlpbnB1dC5jb3VudCA9IDQ7CisJaW5wdXQucG9pbnRlciA9IGluX3BhcmFtczsKKwlpbl9wYXJhbXNbMF0udHlwZSAgICAgICAgICAgICAgID0gQUNQSV9UWVBFX0JVRkZFUjsKKwlpbl9wYXJhbXNbMF0uYnVmZmVyLmxlbmd0aCAgICAgID0gMTY7CisJaW5fcGFyYW1zWzBdLmJ1ZmZlci5wb2ludGVyICAgICA9IE9TQ19VVUlEOworCWluX3BhcmFtc1sxXS50eXBlICAgICAgICAgICAgICAgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlpbl9wYXJhbXNbMV0uaW50ZWdlci52YWx1ZSAgICAgID0gMTsKKwlpbl9wYXJhbXNbMl0udHlwZSAgICAgICAgICAgICAgID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJaW5fcGFyYW1zWzJdLmludGVnZXIudmFsdWUgICAgICA9IDI7CisJaW5fcGFyYW1zWzNdLnR5cGUgICAgICAgICAgICAgICA9IEFDUElfVFlQRV9CVUZGRVI7CisJaW5fcGFyYW1zWzNdLmJ1ZmZlci5sZW5ndGggICAgICA9IDg7CisJaW5fcGFyYW1zWzNdLmJ1ZmZlci5wb2ludGVyICAgICA9ICh1OCAqKSZjYXBhYmlsaXRpZXM7CisKKwljYXBhYmlsaXRpZXNbMF0gPSBPU0NfUVVFUllfRU5BQkxFOworCWNhcGFiaWxpdGllc1sxXSA9IDB4MTsKKworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KCpoYW5kbGUsICJfT1NDIiwgJmlucHV0LCAmb3V0cHV0KTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFvdXRwdXQubGVuZ3RoKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW91dF9vYmogPSBvdXRwdXQucG9pbnRlcjsKKwlpZiAob3V0X29iai0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJZXJyb3JzID0gKigodTMyICopb3V0X29iai0+YnVmZmVyLnBvaW50ZXIpICYgfigxIDw8IDApOworCWlmIChlcnJvcnMpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlzdXBwb3J0ZWQgPSAqKCh1MzIgKikob3V0X29iai0+YnVmZmVyLnBvaW50ZXIgKyA0KSk7CisJaWYgKCEoc3VwcG9ydGVkICYgMHgxKSkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCWtmcmVlKG91dHB1dC5wb2ludGVyKTsKKwljYXBhYmlsaXRpZXNbMF0gPSAweDA7CisJY2FwYWJpbGl0aWVzWzFdID0gMHgxOworCisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoKmhhbmRsZSwgIl9PU0MiLCAmaW5wdXQsICZvdXRwdXQpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIW91dHB1dC5sZW5ndGgpCisJCXJldHVybiAtRU5PREVWOworCisJb3V0X29iaiA9IG91dHB1dC5wb2ludGVyOworCWlmIChvdXRfb2JqLT50eXBlICE9IEFDUElfVFlQRV9CVUZGRVIpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwllcnJvcnMgPSAqKCh1MzIgKilvdXRfb2JqLT5idWZmZXIucG9pbnRlcikgJiB+KDEgPDwgMCk7CisJaWYgKGVycm9ycykgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCXN1cHBvcnRlZCA9ICooKHUzMiAqKShvdXRfb2JqLT5idWZmZXIucG9pbnRlciArIDQpKTsKKwlpZiAoIShzdXBwb3J0ZWQgJiAweDEpKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCitvdXRfZnJlZToKKwlrZnJlZShvdXRwdXQucG9pbnRlcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2luaXQgcGNjX2NwdWZyZXFfcHJvYmUodm9pZCkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IGFjcGlfYnVmZmVyIG91dHB1dCA9IHtBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTH07CisJc3RydWN0IHBjY19tZW1vcnlfcmVzb3VyY2UgKm1lbV9yZXNvdXJjZTsKKwlzdHJ1Y3QgcGNjX3JlZ2lzdGVyX3Jlc291cmNlICpyZWdfcmVzb3VyY2U7CisJdW5pb24gYWNwaV9vYmplY3QgKm91dF9vYmosICptZW1iZXI7CisJYWNwaV9oYW5kbGUgaGFuZGxlLCBvc2NfaGFuZGxlOworCWludCByZXQgPSAwOworCisJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKE5VTEwsICJcXF9TQiIsICZoYW5kbGUpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoaGFuZGxlLCAiX09TQyIsICZvc2NfaGFuZGxlKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKwkJcmV0ID0gcGNjX2NwdWZyZXFfZG9fb3NjKCZvc2NfaGFuZGxlKTsKKwkJaWYgKHJldCkKKwkJCWRwcmludGsoInByb2JlOiBfT1NDIGV2YWx1YXRpb24gZGlkIG5vdCBzdWNjZWVkXG4iKTsKKwkJLyogRmlybXdhcmUncyB1c2Ugb2YgX09TQyBpcyBvcHRpb25hbCAqLworCQlyZXQgPSAwOworCX0KKworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIlBDQ0giLCBOVUxMLCAmb3V0cHV0KTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiAtRU5PREVWOworCisJb3V0X29iaiA9IG91dHB1dC5wb2ludGVyOworCWlmIChvdXRfb2JqLT50eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJbWVtYmVyID0gJm91dF9vYmotPnBhY2thZ2UuZWxlbWVudHNbMF07CisJaWYgKG1lbWJlci0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJbWVtX3Jlc291cmNlID0gKHN0cnVjdCBwY2NfbWVtb3J5X3Jlc291cmNlICopbWVtYmVyLT5idWZmZXIucG9pbnRlcjsKKworCWRwcmludGsoInByb2JlOiBtZW1fcmVzb3VyY2UgZGVzY3JpcHRvcjogMHgleCwiCisJCSIgbGVuZ3RoOiAlZCwgc3BhY2VfaWQ6ICVkLCByZXNvdXJjZV91c2FnZTogJWQsIgorCQkiIHR5cGVfc3BlY2lmaWM6ICVkLCBncmFudWxhcml0eTogMHglbGx4LCIKKwkJIiBtaW5pbXVtOiAweCVsbHgsIG1heGltdW06IDB4JWxseCwiCisJCSIgdHJhbnNsYXRpb25fb2Zmc2V0OiAweCVsbHgsIGFkZHJlc3NfbGVuZ3RoOiAweCVsbHhcbiIsCisJCW1lbV9yZXNvdXJjZS0+ZGVzY3JpcHRvciwgbWVtX3Jlc291cmNlLT5sZW5ndGgsCisJCW1lbV9yZXNvdXJjZS0+c3BhY2VfaWQsIG1lbV9yZXNvdXJjZS0+cmVzb3VyY2VfdXNhZ2UsCisJCW1lbV9yZXNvdXJjZS0+dHlwZV9zcGVjaWZpYywgbWVtX3Jlc291cmNlLT5ncmFudWxhcml0eSwKKwkJbWVtX3Jlc291cmNlLT5taW5pbXVtLCBtZW1fcmVzb3VyY2UtPm1heGltdW0sCisJCW1lbV9yZXNvdXJjZS0+dHJhbnNsYXRpb25fb2Zmc2V0LAorCQltZW1fcmVzb3VyY2UtPmFkZHJlc3NfbGVuZ3RoKTsKKworCWlmIChtZW1fcmVzb3VyY2UtPnNwYWNlX2lkICE9IEFDUElfQURSX1NQQUNFX1NZU1RFTV9NRU1PUlkpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlwY2NoX3ZpcnRfYWRkciA9IGlvcmVtYXBfbm9jYWNoZShtZW1fcmVzb3VyY2UtPm1pbmltdW0sCisJCQkJCW1lbV9yZXNvdXJjZS0+YWRkcmVzc19sZW5ndGgpOworCWlmIChwY2NoX3ZpcnRfYWRkciA9PSBOVUxMKSB7CisJCWRwcmludGsoInByb2JlOiBjb3VsZCBub3QgbWFwIHNoYXJlZCBtZW0gcmVnaW9uXG4iKTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisJcGNjaF9oZHIgPSBwY2NoX3ZpcnRfYWRkcjsKKworCWRwcmludGsoInByb2JlOiBQQ0NIIGhlYWRlciAodmlydHVhbCkgYWRkcjogMHglcFxuIiwgcGNjaF9oZHIpOworCWRwcmludGsoInByb2JlOiBQQ0NIIGhlYWRlciBpcyBhdCBwaHlzaWNhbCBhZGRyZXNzOiAweCVsbHgsIgorCQkiIHNpZ25hdHVyZTogMHgleCwgbGVuZ3RoOiAlZCBieXRlcywgbWFqb3I6ICVkLCBtaW5vcjogJWQsIgorCQkiIHN1cHBvcnRlZCBmZWF0dXJlczogMHgleCwgY29tbWFuZCBmaWVsZDogMHgleCwiCisJCSIgc3RhdHVzIGZpZWxkOiAweCV4LCBub21pbmFsIGxhdGVuY3k6ICVkIHVzXG4iLAorCQltZW1fcmVzb3VyY2UtPm1pbmltdW0sIGlvcmVhZDMyKCZwY2NoX2hkci0+c2lnbmF0dXJlKSwKKwkJaW9yZWFkMTYoJnBjY2hfaGRyLT5sZW5ndGgpLCBpb3JlYWQ4KCZwY2NoX2hkci0+bWFqb3IpLAorCQlpb3JlYWQ4KCZwY2NoX2hkci0+bWlub3IpLCBpb3JlYWQzMigmcGNjaF9oZHItPmZlYXR1cmVzKSwKKwkJaW9yZWFkMTYoJnBjY2hfaGRyLT5jb21tYW5kKSwgaW9yZWFkMTYoJnBjY2hfaGRyLT5zdGF0dXMpLAorCQlpb3JlYWQzMigmcGNjaF9oZHItPmxhdGVuY3kpKTsKKworCWRwcmludGsoInByb2JlOiBtaW4gdGltZSBiZXR3ZWVuIGNvbW1hbmRzOiAlZCB1cywiCisJCSIgbWF4IHRpbWUgYmV0d2VlbiBjb21tYW5kczogJWQgdXMsIgorCQkiIG5vbWluYWwgQ1BVIGZyZXF1ZW5jeTogJWQgTUh6LCIKKwkJIiBtaW5pbXVtIENQVSBmcmVxdWVuY3k6ICVkIE1IeiwiCisJCSIgbWluaW11bSBDUFUgZnJlcXVlbmN5IHdpdGhvdXQgdGhyb3R0bGluZzogJWQgTUh6XG4iLAorCQlpb3JlYWQzMigmcGNjaF9oZHItPm1pbmltdW1fdGltZSksCisJCWlvcmVhZDMyKCZwY2NoX2hkci0+bWF4aW11bV90aW1lKSwKKwkJaW9yZWFkMzIoJnBjY2hfaGRyLT5ub21pbmFsKSwKKwkJaW9yZWFkMzIoJnBjY2hfaGRyLT50aHJvdHRsZWRfZnJlcXVlbmN5KSwKKwkJaW9yZWFkMzIoJnBjY2hfaGRyLT5taW5pbXVtX2ZyZXF1ZW5jeSkpOworCisJbWVtYmVyID0gJm91dF9vYmotPnBhY2thZ2UuZWxlbWVudHNbMV07CisJaWYgKG1lbWJlci0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gcGNjaF9mcmVlOworCX0KKworCXJlZ19yZXNvdXJjZSA9IChzdHJ1Y3QgcGNjX3JlZ2lzdGVyX3Jlc291cmNlICopbWVtYmVyLT5idWZmZXIucG9pbnRlcjsKKworCWRvb3JiZWxsLnNwYWNlX2lkID0gcmVnX3Jlc291cmNlLT5zcGFjZV9pZDsKKwlkb29yYmVsbC5iaXRfd2lkdGggPSByZWdfcmVzb3VyY2UtPmJpdF93aWR0aDsKKwlkb29yYmVsbC5iaXRfb2Zmc2V0ID0gcmVnX3Jlc291cmNlLT5iaXRfb2Zmc2V0OworCWRvb3JiZWxsLmFjY2Vzc193aWR0aCA9IDY0OworCWRvb3JiZWxsLmFkZHJlc3MgPSByZWdfcmVzb3VyY2UtPmFkZHJlc3M7CisKKwlkcHJpbnRrKCJwcm9iZTogZG9vcmJlbGw6IHNwYWNlX2lkIGlzICVkLCBiaXRfd2lkdGggaXMgJWQsICIKKwkJImJpdF9vZmZzZXQgaXMgJWQsIGFjY2Vzc193aWR0aCBpcyAlZCwgYWRkcmVzcyBpcyAweCVsbHhcbiIsCisJCWRvb3JiZWxsLnNwYWNlX2lkLCBkb29yYmVsbC5iaXRfd2lkdGgsIGRvb3JiZWxsLmJpdF9vZmZzZXQsCisJCWRvb3JiZWxsLmFjY2Vzc193aWR0aCwgcmVnX3Jlc291cmNlLT5hZGRyZXNzKTsKKworCW1lbWJlciA9ICZvdXRfb2JqLT5wYWNrYWdlLmVsZW1lbnRzWzJdOworCWlmIChtZW1iZXItPnR5cGUgIT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBwY2NoX2ZyZWU7CisJfQorCisJZG9vcmJlbGxfcHJlc2VydmUgPSBtZW1iZXItPmludGVnZXIudmFsdWU7CisKKwltZW1iZXIgPSAmb3V0X29iai0+cGFja2FnZS5lbGVtZW50c1szXTsKKwlpZiAobWVtYmVyLT50eXBlICE9IEFDUElfVFlQRV9JTlRFR0VSKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gcGNjaF9mcmVlOworCX0KKworCWRvb3JiZWxsX3dyaXRlID0gbWVtYmVyLT5pbnRlZ2VyLnZhbHVlOworCisJZHByaW50aygicHJvYmU6IGRvb3JiZWxsX3ByZXNlcnZlOiAweCVsbHgsIgorCQkiIGRvb3JiZWxsX3dyaXRlOiAweCVsbHhcbiIsCisJCWRvb3JiZWxsX3ByZXNlcnZlLCBkb29yYmVsbF93cml0ZSk7CisKKwlwY2NfY3B1X2luZm8gPSBhbGxvY19wZXJjcHUoc3RydWN0IHBjY19jcHUpOworCWlmICghcGNjX2NwdV9pbmZvKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gcGNjaF9mcmVlOworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICJwY2MtY3B1ZnJlcTogKHYlcykgZHJpdmVyIGxvYWRlZCB3aXRoIGZyZXF1ZW5jeSIKKwkgICAgICAgIiBsaW1pdHM6ICVkIE1IeiwgJWQgTUh6XG4iLCBQQ0NfVkVSU0lPTiwKKwkgICAgICAgaW9yZWFkMzIoJnBjY2hfaGRyLT5taW5pbXVtX2ZyZXF1ZW5jeSksCisJICAgICAgIGlvcmVhZDMyKCZwY2NoX2hkci0+bm9taW5hbCkpOworCWtmcmVlKG91dHB1dC5wb2ludGVyKTsKKwlyZXR1cm4gcmV0OworcGNjaF9mcmVlOgorCXBjY19jbGVhcl9tYXBwaW5nKCk7CitvdXRfZnJlZToKKwlrZnJlZShvdXRwdXQucG9pbnRlcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwY2NfY3B1ZnJlcV9jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwl1bnNpZ25lZCBpbnQgY3B1ID0gcG9saWN5LT5jcHU7CisJdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CisKKwlpZiAoIXBjY2hfdmlydF9hZGRyKSB7CisJCXJlc3VsdCA9IC0xOworCQlnb3RvIHBjY2hfbnVsbDsKKwl9CisKKwlyZXN1bHQgPSBwY2NfZ2V0X29mZnNldChjcHUpOworCWlmIChyZXN1bHQpIHsKKwkJZHByaW50aygiaW5pdDogUENDUCBldmFsdWF0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZnJlZTsKKwl9CisKKwlwb2xpY3ktPm1heCA9IHBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSA9CisJCWlvcmVhZDMyKCZwY2NoX2hkci0+bm9taW5hbCkgKiAxMDAwOworCXBvbGljeS0+bWluID0gcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxID0KKwkJaW9yZWFkMzIoJnBjY2hfaGRyLT5taW5pbXVtX2ZyZXF1ZW5jeSkgKiAxMDAwOworCXBvbGljeS0+Y3VyID0gcGNjX2dldF9mcmVxKGNwdSk7CisKKwlkcHJpbnRrKCJpbml0OiBwb2xpY3ktPm1heCBpcyAlZCwgcG9saWN5LT5taW4gaXMgJWRcbiIsCisJCXBvbGljeS0+bWF4LCBwb2xpY3ktPm1pbik7CisKKwlyZXR1cm4gMDsKK2ZyZWU6CisJcGNjX2NsZWFyX21hcHBpbmcoKTsKKwlmcmVlX3BlcmNwdShwY2NfY3B1X2luZm8pOworcGNjaF9udWxsOgorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgcGNjX2NwdWZyZXFfY3B1X2V4aXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIgcGNjX2NwdWZyZXFfZHJpdmVyID0geworCS5mbGFncyA9IENQVUZSRVFfQ09OU1RfTE9PUFMsCisJLmdldCA9IHBjY19nZXRfZnJlcSwKKwkudmVyaWZ5ID0gcGNjX2NwdWZyZXFfdmVyaWZ5LAorCS50YXJnZXQgPSBwY2NfY3B1ZnJlcV90YXJnZXQsCisJLmluaXQgPSBwY2NfY3B1ZnJlcV9jcHVfaW5pdCwKKwkuZXhpdCA9IHBjY19jcHVmcmVxX2NwdV9leGl0LAorCS5uYW1lID0gInBjYy1jcHVmcmVxIiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBjY19jcHVmcmVxX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKGFjcGlfZGlzYWJsZWQpCisJCXJldHVybiAwOworCisJcmV0ID0gcGNjX2NwdWZyZXFfcHJvYmUoKTsKKwlpZiAocmV0KSB7CisJCWRwcmludGsoInBjY19jcHVmcmVxX2luaXQ6IFBDQ0ggZXZhbHVhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZwY2NfY3B1ZnJlcV9kcml2ZXIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHBjY19jcHVmcmVxX2V4aXQodm9pZCkKK3sKKwljcHVmcmVxX3VucmVnaXN0ZXJfZHJpdmVyKCZwY2NfY3B1ZnJlcV9kcml2ZXIpOworCisJcGNjX2NsZWFyX21hcHBpbmcoKTsKKworCWZyZWVfcGVyY3B1KHBjY19jcHVfaW5mbyk7Cit9CisKK01PRFVMRV9BVVRIT1IoIk1hdHRoZXcgR2FycmV0dCwgTmFnYSBDaHVtYmFsa2FyIik7CitNT0RVTEVfVkVSU0lPTihQQ0NfVkVSU0lPTik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlByb2Nlc3NvciBDbG9ja2luZyBDb250cm9sIGludGVyZmFjZSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbGF0ZV9pbml0Y2FsbChwY2NfY3B1ZnJlcV9pbml0KTsKK21vZHVsZV9leGl0KHBjY19jcHVmcmVxX2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwppbmRleCA2NDFjY2I5Li5iMWZiZGVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwpAQCAtNjc2LDcgKzY3Niw3IEBACiAJCQlpZiAoYy0+d2VpZ2h0ICE9IHcpCiAJCQkJY29udGludWU7CiAKLQkJCWZvcl9lYWNoX2JpdChqLCBjLT5pZHhtc2ssIFg4Nl9QTUNfSURYX01BWCkgeworCQkJZm9yX2VhY2hfc2V0X2JpdChqLCBjLT5pZHhtc2ssIFg4Nl9QTUNfSURYX01BWCkgewogCQkJCWlmICghdGVzdF9iaXQoaiwgdXNlZF9tYXNrKSkKIAkJCQkJYnJlYWs7CiAJCQl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbC5jCmluZGV4IGNmNjU5MGMuLjk3N2U3NTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbC5jCkBAIC03NTcsNyArNzU3LDcgQEAKIAogCWluY19pcnFfc3RhdChhcGljX3BlcmZfaXJxcyk7CiAJYWNrID0gc3RhdHVzOwotCWZvcl9lYWNoX2JpdChiaXQsICh1bnNpZ25lZCBsb25nICopJnN0YXR1cywgWDg2X1BNQ19JRFhfTUFYKSB7CisJZm9yX2VhY2hfc2V0X2JpdChiaXQsICh1bnNpZ25lZCBsb25nICopJnN0YXR1cywgWDg2X1BNQ19JRFhfTUFYKSB7CiAJCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGNwdWMtPmV2ZW50c1tiaXRdOwogCiAJCWNsZWFyX2JpdChiaXQsICh1bnNpZ25lZCBsb25nICopICZzdGF0dXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2k4MjU5LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaTgyNTkuYwppbmRleCA4YzkzYTg0Li5mYjcyNWVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaTgyNTkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaTgyNTkuYwpAQCAtMzQsNiArMzQsMTIgQEAKIHN0YXRpYyBpbnQgaTgyNTlBX2F1dG9fZW9pOwogREVGSU5FX1JBV19TUElOTE9DSyhpODI1OUFfbG9jayk7CiBzdGF0aWMgdm9pZCBtYXNrX2FuZF9hY2tfODI1OUEodW5zaWduZWQgaW50KTsKK3N0YXRpYyB2b2lkIG1hc2tfODI1OUEodm9pZCk7CitzdGF0aWMgdm9pZCB1bm1hc2tfODI1OUEodm9pZCk7CitzdGF0aWMgdm9pZCBkaXNhYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKK3N0YXRpYyB2b2lkIGVuYWJsZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSk7CitzdGF0aWMgdm9pZCBpbml0XzgyNTlBKGludCBhdXRvX2VvaSk7CitzdGF0aWMgaW50IGk4MjU5QV9pcnFfcGVuZGluZyh1bnNpZ25lZCBpbnQgaXJxKTsKIAogc3RydWN0IGlycV9jaGlwIGk4MjU5QV9jaGlwID0gewogCS5uYW1lCQk9ICJYVC1QSUMiLApAQCAtNjMsNyArNjksNyBAQAogICovCiB1bnNpZ25lZCBsb25nIGlvX2FwaWNfaXJxczsKIAotdm9pZCBkaXNhYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgZGlzYWJsZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IDEgPDwgaXJxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC03Nyw3ICs4Myw3IEBACiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiB9CiAKLXZvaWQgZW5hYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgZW5hYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGludCBtYXNrID0gfigxIDw8IGlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTkxLDcgKzk3LDcgQEAKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIH0KIAotaW50IGk4MjU5QV9pcnFfcGVuZGluZyh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIGludCBpODI1OUFfaXJxX3BlbmRpbmcodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IDE8PGlycTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTA3LDcgKzExMyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotdm9pZCBtYWtlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgbWFrZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKIAlpb19hcGljX2lycXMgJj0gfigxPDxpcnEpOwpAQCAtMjgxLDcgKzI4Nyw3IEBACiAKIGRldmljZV9pbml0Y2FsbChpODI1OUFfaW5pdF9zeXNmcyk7CiAKLXZvaWQgbWFza184MjU5QSh2b2lkKQorc3RhdGljIHZvaWQgbWFza184MjU5QSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTI5Myw3ICsyOTksNyBAQAogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogfQogCi12b2lkIHVubWFza184MjU5QSh2b2lkKQorc3RhdGljIHZvaWQgdW5tYXNrXzgyNTlBKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMzA1LDcgKzMxMSw3IEBACiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiB9CiAKLXZvaWQgaW5pdF84MjU5QShpbnQgYXV0b19lb2kpCitzdGF0aWMgdm9pZCBpbml0XzgyNTlBKGludCBhdXRvX2VvaSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0zNTgsMyArMzY0LDQ3IEBACiAKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIH0KKworLyoKKyAqIG1ha2UgaTgyNTkgYSBkcml2ZXIgc28gdGhhdCB3ZSBjYW4gc2VsZWN0IHBpYyBmdW5jdGlvbnMgYXQgcnVuIHRpbWUuIHRoZSBnb2FsCisgKiBpcyB0byBtYWtlIHg4NiBiaW5hcnkgY29tcGF0aWJsZSBhbW9uZyBwYyBjb21wYXRpYmxlIGFuZCBub24tcGMgY29tcGF0aWJsZQorICogcGxhdGZvcm1zLCBzdWNoIGFzIHg4NiBNSUQuCisgKi8KKworc3RhdGljIHZvaWQgbGVnYWN5X3BpY19ub29wKHZvaWQpIHsgfTsKK3N0YXRpYyB2b2lkIGxlZ2FjeV9waWNfdWludF9ub29wKHVuc2lnbmVkIGludCB1bnVzZWQpIHsgfTsKK3N0YXRpYyB2b2lkIGxlZ2FjeV9waWNfaW50X25vb3AoaW50IHVudXNlZCkgeyB9OworCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGR1bW15X3BpY19jaGlwICA9IHsKKwkubmFtZSA9ICJkdW1teSBwaWMiLAorCS5tYXNrID0gbGVnYWN5X3BpY191aW50X25vb3AsCisJLnVubWFzayA9IGxlZ2FjeV9waWNfdWludF9ub29wLAorCS5kaXNhYmxlID0gbGVnYWN5X3BpY191aW50X25vb3AsCisJLm1hc2tfYWNrID0gbGVnYWN5X3BpY191aW50X25vb3AsCit9Oworc3RhdGljIGludCBsZWdhY3lfcGljX2lycV9wZW5kaW5nX25vb3AodW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGxlZ2FjeV9waWMgbnVsbF9sZWdhY3lfcGljID0geworCS5ucl9sZWdhY3lfaXJxcyA9IDAsCisJLmNoaXAgPSAmZHVtbXlfcGljX2NoaXAsCisJLm1hc2tfYWxsID0gbGVnYWN5X3BpY19ub29wLAorCS5yZXN0b3JlX21hc2sgPSBsZWdhY3lfcGljX25vb3AsCisJLmluaXQgPSBsZWdhY3lfcGljX2ludF9ub29wLAorCS5pcnFfcGVuZGluZyA9IGxlZ2FjeV9waWNfaXJxX3BlbmRpbmdfbm9vcCwKKwkubWFrZV9pcnEgPSBsZWdhY3lfcGljX3VpbnRfbm9vcCwKK307CisKK3N0cnVjdCBsZWdhY3lfcGljIGRlZmF1bHRfbGVnYWN5X3BpYyA9IHsKKwkubnJfbGVnYWN5X2lycXMgPSBOUl9JUlFTX0xFR0FDWSwKKwkuY2hpcCAgPSAmaTgyNTlBX2NoaXAsCisJLm1hc2tfYWxsICA9IG1hc2tfODI1OUEsCisJLnJlc3RvcmVfbWFzayA9IHVubWFza184MjU5QSwKKwkuaW5pdCA9IGluaXRfODI1OUEsCisJLmlycV9wZW5kaW5nID0gaTgyNTlBX2lycV9wZW5kaW5nLAorCS5tYWtlX2lycSA9IG1ha2VfODI1OUFfaXJxLAorfTsKKworc3RydWN0IGxlZ2FjeV9waWMgKmxlZ2FjeV9waWMgPSAmZGVmYXVsdF9sZWdhY3lfcGljOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lycWluaXQuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0LmMKaW5kZXggZmNlNTVkNS4uZWYyNTdmYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycWluaXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdC5jCkBAIC05OSw5ICs5OSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIE51bWJlciBvZiBsZWdhY3kgaW50ZXJydXB0cyAqLwotaW50IG5yX2xlZ2FjeV9pcnFzIF9fcmVhZF9tb3N0bHkgPSBOUl9JUlFTX0xFR0FDWTsKLQogdm9pZCBfX2luaXQgaW5pdF9JU0FfaXJxcyh2b2lkKQogewogCWludCBpOwpAQCAtMTA5LDEyICsxMDYsMTIgQEAKICNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKQogCWluaXRfYnNwX0FQSUMoKTsKICNlbmRpZgotCWluaXRfODI1OUEoMCk7CisJbGVnYWN5X3BpYy0+aW5pdCgwKTsKIAogCS8qCiAJICogMTYgb2xkLXN0eWxlIElOVEEtY3ljbGUgaW50ZXJydXB0czoKIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRU19MRUdBQ1k7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBsZWdhY3lfcGljLT5ucl9sZWdhY3lfaXJxczsgaSsrKSB7CiAJCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGkpOwogCiAJCWRlc2MtPnN0YXR1cyA9IElSUV9ESVNBQkxFRDsKQEAgLTEzOCw3ICsxMzUsNyBAQAogCSAqIHRoZW4gdGhpcyB2ZWN0b3Igc3BhY2UgY2FuIGJlIGZyZWVkIGFuZCByZS11c2VkIGR5bmFtaWNhbGx5IGFzIHRoZQogCSAqIGlycSdzIG1pZ3JhdGUgZXRjLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9sZWdhY3lfaXJxczsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBsZWdhY3lfcGljLT5ucl9sZWdhY3lfaXJxczsgaSsrKQogCQlwZXJfY3B1KHZlY3Rvcl9pcnEsIDApW0lSUTBfVkVDVE9SICsgaV0gPSBpOwogCiAJeDg2X2luaXQuaXJxcy5pbnRyX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tcnN0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvbXJzdC5jCmluZGV4IDNiNzA3OGEuLjBhYWQ4NjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tcnN0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL21yc3QuYwpAQCAtMTAsOCArMTAsMjExIEBACiAgKiBvZiB0aGUgTGljZW5zZS4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZmkuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tcHNwZWNfZGVmLmg+CisjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2lvX2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vbXJzdC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pODI1OS5oPgorI2luY2x1ZGUgPGFzbS9hcGJfdGltZXIuaD4KKworc3RhdGljIHUzMiBzZmlfbXRpbWVyX3VzYWdlW1NGSV9NVE1SX01BWF9OVU1dOworc3RhdGljIHN0cnVjdCBzZmlfdGltZXJfdGFibGVfZW50cnkgc2ZpX210aW1lcl9hcnJheVtTRklfTVRNUl9NQVhfTlVNXTsKK2ludCBzZmlfbXRpbWVyX251bTsKKworc3RydWN0IHNmaV9ydGNfdGFibGVfZW50cnkgc2ZpX21ydGNfYXJyYXlbU0ZJX01SVENfTUFYXTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNmaV9tcnRjX2FycmF5KTsKK2ludCBzZmlfbXJ0Y19udW07CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhc3NpZ25fdG9fbXBfaXJxKHN0cnVjdCBtcGNfaW50c3JjICptLAorCQkJCSAgICBzdHJ1Y3QgbXBjX2ludHNyYyAqbXBfaXJxKQoreworCW1lbWNweShtcF9pcnEsIG0sIHNpemVvZihzdHJ1Y3QgbXBjX2ludHNyYykpOworfQorCitzdGF0aWMgaW5saW5lIGludCBtcF9pcnFfY21wKHN0cnVjdCBtcGNfaW50c3JjICptcF9pcnEsCisJCQkJc3RydWN0IG1wY19pbnRzcmMgKm0pCit7CisJcmV0dXJuIG1lbWNtcChtcF9pcnEsIG0sIHNpemVvZihzdHJ1Y3QgbXBjX2ludHNyYykpOworfQorCitzdGF0aWMgdm9pZCBzYXZlX21wX2lycShzdHJ1Y3QgbXBjX2ludHNyYyAqbSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBtcF9pcnFfZW50cmllczsgaSsrKSB7CisJCWlmICghbXBfaXJxX2NtcCgmbXBfaXJxc1tpXSwgbSkpCisJCQlyZXR1cm47CisJfQorCisJYXNzaWduX3RvX21wX2lycShtLCAmbXBfaXJxc1ttcF9pcnFfZW50cmllc10pOworCWlmICgrK21wX2lycV9lbnRyaWVzID09IE1BWF9JUlFfU09VUkNFUykKKwkJcGFuaWMoIk1heCAjIG9mIGlycSBzb3VyY2VzIGV4Y2VlZGVkISFcbiIpOworfQorCisvKiBwYXJzZSBhbGwgdGhlIG10aW1lciBpbmZvIHRvIGEgc3RhdGljIG10aW1lciBhcnJheSAqLworc3RhdGljIGludCBfX2luaXQgc2ZpX3BhcnNlX210bXIoc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnRhYmxlKQoreworCXN0cnVjdCBzZmlfdGFibGVfc2ltcGxlICpzYjsKKwlzdHJ1Y3Qgc2ZpX3RpbWVyX3RhYmxlX2VudHJ5ICpwZW50cnk7CisJc3RydWN0IG1wY19pbnRzcmMgbXBfaXJxOworCWludCB0b3RhbGxlbjsKKworCXNiID0gKHN0cnVjdCBzZmlfdGFibGVfc2ltcGxlICopdGFibGU7CisJaWYgKCFzZmlfbXRpbWVyX251bSkgeworCQlzZmlfbXRpbWVyX251bSA9IFNGSV9HRVRfTlVNX0VOVFJJRVMoc2IsCisJCQkJCXN0cnVjdCBzZmlfdGltZXJfdGFibGVfZW50cnkpOworCQlwZW50cnkgPSAoc3RydWN0IHNmaV90aW1lcl90YWJsZV9lbnRyeSAqKSBzYi0+cGVudHJ5OworCQl0b3RhbGxlbiA9IHNmaV9tdGltZXJfbnVtICogc2l6ZW9mKCpwZW50cnkpOworCQltZW1jcHkoc2ZpX210aW1lcl9hcnJheSwgcGVudHJ5LCB0b3RhbGxlbik7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiU0ZJOiBNVElNRVIgaW5mbyAobnVtID0gJWQpOlxuIiwgc2ZpX210aW1lcl9udW0pOworCXBlbnRyeSA9IHNmaV9tdGltZXJfYXJyYXk7CisJZm9yICh0b3RhbGxlbiA9IDA7IHRvdGFsbGVuIDwgc2ZpX210aW1lcl9udW07IHRvdGFsbGVuKyssIHBlbnRyeSsrKSB7CisJCXByaW50ayhLRVJOX0lORk8gInRpbWVyWyVkXTogcGFkZHIgPSAweCUwOHgsIGZyZXEgPSAlZEh6LCIKKwkJCSIgaXJxID0gJWRcbiIsIHRvdGFsbGVuLCAodTMyKXBlbnRyeS0+cGh5c19hZGRyLAorCQkJcGVudHJ5LT5mcmVxX2h6LCBwZW50cnktPmlycSk7CisJCQlpZiAoIXBlbnRyeS0+aXJxKQorCQkJCWNvbnRpbnVlOworCQkJbXBfaXJxLnR5cGUgPSBNUF9JT0FQSUM7CisJCQltcF9pcnEuaXJxdHlwZSA9IG1wX0lOVDsKKy8qIHRyaWdnZXJpbmcgbW9kZSBlZGdlIGJpdCAyLTMsIGFjdGl2ZSBoaWdoIHBvbGFyaXR5IGJpdCAwLTEgKi8KKwkJCW1wX2lycS5pcnFmbGFnID0gNTsKKwkJCW1wX2lycS5zcmNidXMgPSAwOworCQkJbXBfaXJxLnNyY2J1c2lycSA9IHBlbnRyeS0+aXJxOwkvKiBJUlEgKi8KKwkJCW1wX2lycS5kc3RhcGljID0gTVBfQVBJQ19BTEw7CisJCQltcF9pcnEuZHN0aXJxID0gcGVudHJ5LT5pcnE7CisJCQlzYXZlX21wX2lycSgmbXBfaXJxKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNmaV90aW1lcl90YWJsZV9lbnRyeSAqc2ZpX2dldF9tdG1yKGludCBoaW50KQoreworCWludCBpOworCWlmIChoaW50IDwgc2ZpX210aW1lcl9udW0pIHsKKwkJaWYgKCFzZmlfbXRpbWVyX3VzYWdlW2hpbnRdKSB7CisJCQlwcl9kZWJ1ZygiaGludCB0YWtlbiBmb3IgdGltZXIgJWQgaXJxICVkXG4iLFwKKwkJCQloaW50LCBzZmlfbXRpbWVyX2FycmF5W2hpbnRdLmlycSk7CisJCQlzZmlfbXRpbWVyX3VzYWdlW2hpbnRdID0gMTsKKwkJCXJldHVybiAmc2ZpX210aW1lcl9hcnJheVtoaW50XTsKKwkJfQorCX0KKwkvKiB0YWtlIHRoZSBmaXJzdCB0aW1lciBhdmFpbGFibGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2ZpX210aW1lcl9udW07KSB7CisJCWlmICghc2ZpX210aW1lcl91c2FnZVtpXSkgeworCQkJc2ZpX210aW1lcl91c2FnZVtpXSA9IDE7CisJCQlyZXR1cm4gJnNmaV9tdGltZXJfYXJyYXlbaV07CisJCX0KKwkJaSsrOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBzZmlfZnJlZV9tdG1yKHN0cnVjdCBzZmlfdGltZXJfdGFibGVfZW50cnkgKm10bXIpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHNmaV9tdGltZXJfbnVtOykgeworCQlpZiAobXRtci0+aXJxID09IHNmaV9tdGltZXJfYXJyYXlbaV0uaXJxKSB7CisJCQlzZmlfbXRpbWVyX3VzYWdlW2ldID0gMDsKKwkJCXJldHVybjsKKwkJfQorCQlpKys7CisJfQorfQorCisvKiBwYXJzZSBhbGwgdGhlIG1ydGMgaW5mbyB0byBhIGdsb2JhbCBtcnRjIGFycmF5ICovCitpbnQgX19pbml0IHNmaV9wYXJzZV9tcnRjKHN0cnVjdCBzZmlfdGFibGVfaGVhZGVyICp0YWJsZSkKK3sKKwlzdHJ1Y3Qgc2ZpX3RhYmxlX3NpbXBsZSAqc2I7CisJc3RydWN0IHNmaV9ydGNfdGFibGVfZW50cnkgKnBlbnRyeTsKKwlzdHJ1Y3QgbXBjX2ludHNyYyBtcF9pcnE7CisKKwlpbnQgdG90YWxsZW47CisKKwlzYiA9IChzdHJ1Y3Qgc2ZpX3RhYmxlX3NpbXBsZSAqKXRhYmxlOworCWlmICghc2ZpX21ydGNfbnVtKSB7CisJCXNmaV9tcnRjX251bSA9IFNGSV9HRVRfTlVNX0VOVFJJRVMoc2IsCisJCQkJCQlzdHJ1Y3Qgc2ZpX3J0Y190YWJsZV9lbnRyeSk7CisJCXBlbnRyeSA9IChzdHJ1Y3Qgc2ZpX3J0Y190YWJsZV9lbnRyeSAqKXNiLT5wZW50cnk7CisJCXRvdGFsbGVuID0gc2ZpX21ydGNfbnVtICogc2l6ZW9mKCpwZW50cnkpOworCQltZW1jcHkoc2ZpX21ydGNfYXJyYXksIHBlbnRyeSwgdG90YWxsZW4pOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIlNGSTogUlRDIGluZm8gKG51bSA9ICVkKTpcbiIsIHNmaV9tcnRjX251bSk7CisJcGVudHJ5ID0gc2ZpX21ydGNfYXJyYXk7CisJZm9yICh0b3RhbGxlbiA9IDA7IHRvdGFsbGVuIDwgc2ZpX21ydGNfbnVtOyB0b3RhbGxlbisrLCBwZW50cnkrKykgeworCQlwcmludGsoS0VSTl9JTkZPICJSVENbJWRdOiBwYWRkciA9IDB4JTA4eCwgaXJxID0gJWRcbiIsCisJCQl0b3RhbGxlbiwgKHUzMilwZW50cnktPnBoeXNfYWRkciwgcGVudHJ5LT5pcnEpOworCQltcF9pcnEudHlwZSA9IE1QX0lPQVBJQzsKKwkJbXBfaXJxLmlycXR5cGUgPSBtcF9JTlQ7CisJCW1wX2lycS5pcnFmbGFnID0gMDsKKwkJbXBfaXJxLnNyY2J1cyA9IDA7CisJCW1wX2lycS5zcmNidXNpcnEgPSBwZW50cnktPmlycTsJLyogSVJRICovCisJCW1wX2lycS5kc3RhcGljID0gTVBfQVBJQ19BTEw7CisJCW1wX2lycS5kc3RpcnEgPSBwZW50cnktPmlycTsKKwkJc2F2ZV9tcF9pcnEoJm1wX2lycSk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogdGhlIHNlY29uZGFyeSBjbG9jayBpbiBNb29yZXN0b3duIGNhbiBiZSBBUEJUIG9yIExBUElDIGNsb2NrLCBkZWZhdWx0IHRvCisgKiBBUEJUIGJ1dCBjbWRsaW5lIG9wdGlvbiBjYW4gYWxzbyBvdmVycmlkZSBpdC4KKyAqLworc3RhdGljIHZvaWQgX19jcHVpbml0IG1yc3Rfc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrKHZvaWQpCit7CisJLyogcmVzdG9yZSBkZWZhdWx0IGxhcGljIGNsb2NrIGlmIGRpc2FibGVkIGJ5IGNtZGxpbmUgKi8KKwlpZiAoZGlzYWJsZV9hcGJ0X3BlcmNwdSkKKwkJcmV0dXJuIHNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrKCk7CisJYXBidF9zZXR1cF9zZWNvbmRhcnlfY2xvY2soKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IG1yc3RfY2FsaWJyYXRlX3RzYyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGZhc3RfY2FsaWJyYXRlOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWZhc3RfY2FsaWJyYXRlID0gYXBidF9xdWlja19jYWxpYnJhdGUoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlpZiAoZmFzdF9jYWxpYnJhdGUpCisJCXJldHVybiBmYXN0X2NhbGlicmF0ZTsKKworCXJldHVybiAwOworfQorCit2b2lkIF9faW5pdCBtcnN0X3RpbWVfaW5pdCh2b2lkKQoreworCXNmaV90YWJsZV9wYXJzZShTRklfU0lHX01UTVIsIE5VTEwsIE5VTEwsIHNmaV9wYXJzZV9tdG1yKTsKKwlwcmVfaW5pdF9hcGljX0lSUTAoKTsKKwlhcGJ0X3RpbWVfaW5pdCgpOworfQorCit2b2lkIF9faW5pdCBtcnN0X3J0Y19pbml0KHZvaWQpCit7CisJc2ZpX3RhYmxlX3BhcnNlKFNGSV9TSUdfTVJUQywgTlVMTCwgTlVMTCwgc2ZpX3BhcnNlX21ydGMpOworfQorCisvKgorICogaWYgd2UgdXNlIHBlciBjcHUgYXBiIHRpbWVyLCB0aGUgYm9vdGNsb2NrIGFscmVhZHkgc2V0dXAuIGlmIHdlIHVzZSBsYXBpYworICogdGltZXIgYW5kIG9uZSBhcGJ0IHRpbWVyIGZvciBicm9hZGNhc3QsIHdlIG5lZWQgdG8gc2V0IHVwIGxhcGljIGJvb3QgY2xvY2suCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBtcnN0X3NldHVwX2Jvb3RfY2xvY2sodm9pZCkKK3sKKwlwcl9pbmZvKCIlczogcGVyIGNwdSBhcGJ0IGZsYWcgJWQgXG4iLCBfX2Z1bmNfXywgZGlzYWJsZV9hcGJ0X3BlcmNwdSk7CisJaWYgKGRpc2FibGVfYXBidF9wZXJjcHUpCisJCXNldHVwX2Jvb3RfQVBJQ19jbG9jaygpOworfTsKIAogLyoKICAqIE1vb3Jlc3Rvd24gc3BlY2lmaWMgeDg2X2luaXQgZnVuY3Rpb24gb3ZlcnJpZGVzIGFuZCBlYXJseSBzZXR1cApAQCAtMjEsNCArMjI0LDE3IEBACiB7CiAJeDg2X2luaXQucmVzb3VyY2VzLnByb2JlX3JvbXMgPSB4ODZfaW5pdF9ub29wOwogCXg4Nl9pbml0LnJlc291cmNlcy5yZXNlcnZlX3Jlc291cmNlcyA9IHg4Nl9pbml0X25vb3A7CisKKwl4ODZfaW5pdC50aW1lcnMudGltZXJfaW5pdCA9IG1yc3RfdGltZV9pbml0OworCXg4Nl9pbml0LnRpbWVycy5zZXR1cF9wZXJjcHVfY2xvY2tldiA9IG1yc3Rfc2V0dXBfYm9vdF9jbG9jazsKKworCXg4Nl9pbml0LmlycXMucHJlX3ZlY3Rvcl9pbml0ID0geDg2X2luaXRfbm9vcDsKKworCXg4Nl9jcHVpbml0LnNldHVwX3BlcmNwdV9jbG9ja2V2ID0gbXJzdF9zZXR1cF9zZWNvbmRhcnlfY2xvY2s7CisKKwl4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX3RzYyA9IG1yc3RfY2FsaWJyYXRlX3RzYzsKKwl4ODZfaW5pdC5wY2kuaW5pdCA9IHBjaV9tcnN0X2luaXQ7CisJeDg2X2luaXQucGNpLmZpeHVwX2lycXMgPSB4ODZfaW5pdF9ub29wOworCisJbGVnYWN5X3BpYyA9ICZudWxsX2xlZ2FjeV9waWM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvb2xwYy5jIGIvYXJjaC94ODYva2VybmVsL29scGMuYwppbmRleCA5ZDFkMjYzLi44Mjk3MTYwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvb2xwYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9vbHBjLmMKQEAgLTE3LDcgKzE3LDkgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKICNpbmNsdWRlIDxhc20vZ2VvZGUuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vb2xwYy5oPgogCiAjaWZkZWYgQ09ORklHX09QRU5fRklSTVdBUkUKQEAgLTI0Myw5ICsyNDUsMTEgQEAKIAlvbHBjX2VjX2NtZChFQ19GSVJNV0FSRV9SRVYsIE5VTEwsIDAsCiAJCQkodW5zaWduZWQgY2hhciAqKSAmb2xwY19wbGF0Zm9ybV9pbmZvLmVjdmVyLCAxKTsKIAotCS8qIGNoZWNrIHRvIHNlZSBpZiB0aGUgVlNBIGV4aXN0cyAqLwotCWlmIChjczU1MzVfaGFzX3ZzYTIoKSkKLQkJb2xwY19wbGF0Zm9ybV9pbmZvLmZsYWdzIHw9IE9MUENfRl9WU0E7CisjaWZkZWYgQ09ORklHX1BDSV9PTFBDCisJLyogSWYgdGhlIFZTQSBleGlzdHMgbGV0IGl0IGVtdWxhdGUgUENJLCBpZiBub3QgZW11bGF0ZSBpbiBrZXJuZWwgKi8KKwlpZiAoIWNzNTUzNV9oYXNfdnNhMigpKQorCQl4ODZfaW5pdC5wY2kuYXJjaF9pbml0ID0gcGNpX29scGNfaW5pdDsKKyNlbmRpZgogCiAJcHJpbnRrKEtFUk5fSU5GTyAiT0xQQyBib2FyZCByZXZpc2lvbiAlcyVYIChFQz0leClcbiIsCiAJCQkoKG9scGNfcGxhdGZvcm1faW5mby5ib2FyZHJldiAmIDB4ZikgPCA4KSA/ICJwcmUiIDogIiIsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwppbmRleCBhNDM1Yzc2Li5hMDJlODBjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9ubWkuaD4KICNpbmNsdWRlIDxsaW51eC90Ym9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YWNrcHJvdGVjdG9yLmg+CiAKICNpbmNsdWRlIDxhc20vYWNwaS5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CkBAIC02Nyw2ICs2OCw3IEBACiAjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KIAogI2luY2x1ZGUgPGFzbS9zbXBib290X2hvb2tzLmg+CisjaW5jbHVkZSA8YXNtL2k4MjU5Lmg+CiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiB1OCBhcGljaWRfMl9ub2RlW01BWF9BUElDSURdOwpAQCAtMjkxLDkgKzI5Myw5IEBACiAJY2hlY2tfdHNjX3N5bmNfdGFyZ2V0KCk7CiAKIAlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKSB7Ci0JCWRpc2FibGVfODI1OUFfaXJxKDApOworCQlsZWdhY3lfcGljLT5jaGlwLT5tYXNrKDApOwogCQllbmFibGVfTk1JX3Rocm91Z2hfTFZUMCgpOwotCQllbmFibGVfODI1OUFfaXJxKDApOworCQlsZWdhY3lfcGljLT5jaGlwLT51bm1hc2soMCk7CiAJfQogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgpAQCAtMzI5LDYgKzMzMSw5IEBACiAJLyogZW5hYmxlIGxvY2FsIGludGVycnVwdHMgKi8KIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKKwkvKiB0byBwcmV2ZW50IGZha2Ugc3RhY2sgY2hlY2sgZmFpbHVyZSBpbiBjbG9jayBzZXR1cCAqLworCWJvb3RfaW5pdF9zdGFja19jYW5hcnkoKTsKKwogCXg4Nl9jcHVpbml0LnNldHVwX3BlcmNwdV9jbG9ja2V2KCk7CiAKIAl3bWIoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYyBiL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYwppbmRleCBhYjM4Y2UwLi5lNjgwZWE1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdmlzd3NfcXVpcmtzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Zpc3dzX3F1aXJrcy5jCkBAIC00OSwxMSArNDksNiBAQAogY2hhciB2aXN3c19ib2FyZF90eXBlCT0gLTE7CiBjaGFyIHZpc3dzX2JvYXJkX3Jldgk9IC0xOwogCi1pbnQgaXNfdmlzd3NfYm94KHZvaWQpCi17Ci0JcmV0dXJuIHZpc3dzX2JvYXJkX3R5cGUgPj0gMDsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IHZpc3dzX3RpbWVfaW5pdCh2b2lkKQogewogCXByaW50ayhLRVJOX0lORk8gIlN0YXJ0aW5nIENvYmFsdCBUaW1lciBzeXN0ZW0gY2xvY2tcbiIpOwpAQCAtMjQyLDYgKzIzNyw4IEBACiAJeDg2X2luaXQuaXJxcy5wcmVfdmVjdG9yX2luaXQgPSB2aXN3c19wcmVfaW50cl9pbml0OwogCXg4Nl9pbml0LmlycXMudHJhcF9pbml0ID0gdmlzd3NfdHJhcF9pbml0OwogCXg4Nl9pbml0LnRpbWVycy50aW1lcl9pbml0ID0gdmlzd3NfdGltZV9pbml0OworCXg4Nl9pbml0LnBjaS5pbml0ID0gcGNpX3Zpc3dzX2luaXQ7CisJeDg2X2luaXQucGNpLmluaXRfaXJxID0geDg2X2luaXRfbm9vcDsKIAogCS8qCiAJICogSW5zdGFsbCByZWJvb3QgcXVpcmtzOgpAQCAtNTA4LDcgKzUwNSw3IEBACiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9waWl4NF9tYXN0ZXJfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JaW5pdF84MjU5QSgwKTsKKwlsZWdhY3lfcGljLT5pbml0KDApOwogCiAJcmV0dXJuIHN0YXJ0dXBfY29iYWx0X2lycShpcnEpOwogfQpAQCAtNTMyLDkgKzUyOSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcGlpeDRfdmlydHVhbF9pcnFfdHlwZSA9IHsKIAkubmFtZSA9CQkiUElJWDQtdmlydHVhbCIsCi0JLnNodXRkb3duID0JZGlzYWJsZV84MjU5QV9pcnEsCi0JLmVuYWJsZSA9CWVuYWJsZV84MjU5QV9pcnEsCi0JLmRpc2FibGUgPQlkaXNhYmxlXzgyNTlBX2lycSwKIH07CiAKIApAQCAtNjA5LDcgKzYwMyw3IEBACiAJCWhhbmRsZV9JUlFfZXZlbnQocmVhbGlycSwgZGVzYy0+YWN0aW9uKTsKIAogCWlmICghKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkpCi0JCWVuYWJsZV84MjU5QV9pcnEocmVhbGlycSk7CisJCWxlZ2FjeV9waWMtPmNoaXAtPnVubWFzayhyZWFsaXJxKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIApAQCAtNjI4LDYgKzYyMiwxMiBAQAogCS5uYW1lID0JCSJjYXNjYWRlIiwKIH07CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGlpeDRfdmlydHVhbF9pcnFfdHlwZSh2b2lkKQoreworCXBpaXg0X3ZpcnR1YWxfaXJxX3R5cGUuc2h1dGRvd24gPSBpODI1OUFfY2hpcC5tYXNrOworCXBpaXg0X3ZpcnR1YWxfaXJxX3R5cGUuZW5hYmxlID0JaTgyNTlBX2NoaXAudW5tYXNrOworCXBpaXg0X3ZpcnR1YWxfaXJxX3R5cGUuZGlzYWJsZSA9IGk4MjU5QV9jaGlwLm1hc2s7Cit9CiAKIHZvaWQgaW5pdF9WSVNXU19BUElDX2lycXModm9pZCkKIHsKQEAgLTY1Myw2ICs2NTMsNyBAQAogCQkJZGVzYy0+Y2hpcCA9ICZwaWl4NF9tYXN0ZXJfaXJxX3R5cGU7CiAJCX0KIAkJZWxzZSBpZiAoaSA8IENPX0lSUV9BUElDMCkgeworCQkJc2V0X3BpaXg0X3ZpcnR1YWxfaXJxX3R5cGUoKTsKIAkJCWRlc2MtPmNoaXAgPSAmcGlpeDRfdmlydHVhbF9pcnFfdHlwZTsKIAkJfQogCQllbHNlIGlmIChJU19DT19BUElDKGkpKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYyBiL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jCmluZGV4IGVlNTc0NmMuLjYxYTFlOGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jCkBAIC00LDkgKzQsMTEgQEAKICAqICBGb3IgbGljZW5jaW5nIGRldGFpbHMgc2VlIGtlcm5lbC1iYXNlL0NPUFlJTkcKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KIAogI2luY2x1ZGUgPGFzbS9iaW9zX2ViZGEuaD4KICNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KKyNpbmNsdWRlIDxhc20vcGNpX3g4Ni5oPgogI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vYXBpYy5oPgpAQCAtNzAsNiArNzIsMTIgQEAKIAkuaW9tbXUgPSB7CiAJCS5pb21tdV9pbml0CQk9IGlvbW11X2luaXRfbm9vcCwKIAl9LAorCisJLnBjaSA9IHsKKwkJLmluaXQJCQk9IHg4Nl9kZWZhdWx0X3BjaV9pbml0LAorCQkuaW5pdF9pcnEJCT0geDg2X2RlZmF1bHRfcGNpX2luaXRfaXJxLAorCQkuZml4dXBfaXJxcwkJPSB4ODZfZGVmYXVsdF9wY2lfZml4dXBfaXJxcywKKwl9LAogfTsKIAogc3RydWN0IHg4Nl9jcHVpbml0X29wcyB4ODZfY3B1aW5pdCBfX2NwdWluaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL01ha2VmaWxlIGIvYXJjaC94ODYvcGNpL01ha2VmaWxlCmluZGV4IDBiN2QzZTkuLmIxMTBkOTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9wY2kvTWFrZWZpbGUKQEAgLTEzLDYgKzEzLDggQEAKIAogb2JqLSQoQ09ORklHX1g4Nl9OVU1BUSkJCSs9IG51bWFxXzMyLm8KIAorb2JqLSQoQ09ORklHX1g4Nl9NUlNUKQkJKz0gbXJzdC5vCisKIG9iai15CQkJCSs9IGNvbW1vbi5vIGVhcmx5Lm8KIG9iai15CQkJCSs9IGFtZF9idXMubyBidXNfbnVtYS5vCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9hY3BpLmMgYi9hcmNoL3g4Ni9wY2kvYWNwaS5jCmluZGV4IDVmMTFmZjYuLjZlMjI0NTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9hY3BpLmMKKysrIGIvYXJjaC94ODYvcGNpL2FjcGkuYwpAQCAtMjk4LDE3ICsyOTgsMTQgQEAKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKIAotCWlmIChwY2liaW9zX3NjYW5uZWQpCi0JCXJldHVybiAwOwotCiAJaWYgKGFjcGlfbm9pcnEpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCXByaW50ayhLRVJOX0lORk8gIlBDSTogVXNpbmcgQUNQSSBmb3IgSVJRIHJvdXRpbmdcbiIpOwogCWFjcGlfaXJxX3BlbmFsdHlfaW5pdCgpOwotCXBjaWJpb3Nfc2Nhbm5lZCsrOwogCXBjaWJpb3NfZW5hYmxlX2lycSA9IGFjcGlfcGNpX2lycV9lbmFibGU7CiAJcGNpYmlvc19kaXNhYmxlX2lycSA9IGFjcGlfcGNpX2lycV9kaXNhYmxlOworCXg4Nl9pbml0LnBjaS5pbml0X2lycSA9IHg4Nl9pbml0X25vb3A7CiAKIAlpZiAocGNpX3JvdXRlaXJxKSB7CiAJCS8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvY29tbW9uLmMgYi9hcmNoL3g4Ni9wY2kvY29tbW9uLmMKaW5kZXggMzczNjE3Ni4uMjk0ZTEwYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2NvbW1vbi5jCisrKyBiL2FyY2gveDg2L3BjaS9jb21tb24uYwpAQCAtNzIsMTIgKzcyLDYgQEAKIH07CiAKIC8qCi0gKiBsZWdhY3ksIG51bWEsIGFuZCBhY3BpIGFsbCB3YW50IHRvIGNhbGwgcGNpYmlvc19zY2FuX3Jvb3QKLSAqIGZyb20gdGhlaXIgaW5pdGNhbGxzLiBUaGlzIGZsYWcgcHJldmVudHMgdGhhdC4KLSAqLwotaW50IHBjaWJpb3Nfc2Nhbm5lZDsKLQotLyoKICAqIFRoaXMgaW50ZXJydXB0LXNhZmUgc3BpbmxvY2sgcHJvdGVjdHMgYWxsIGFjY2Vzc2VzIHRvIFBDSQogICogY29uZmlndXJhdGlvbiBzcGFjZS4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2luaXQuYyBiL2FyY2gveDg2L3BjaS9pbml0LmMKaW5kZXggMjVhMWY4ZS4uYWRiNjJhYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2luaXQuYworKysgYi9hcmNoL3g4Ni9wY2kvaW5pdC5jCkBAIC0xLDYgKzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vcGNpX3g4Ni5oPgorI2luY2x1ZGUgPGFzbS94ODZfaW5pdC5oPgogCiAvKiBhcmNoX2luaXRjYWxsIGhhcyB0b28gcmFuZG9tIG9yZGVyaW5nLCBzbyBjYWxsIHRoZSBpbml0aWFsaXplcnMKICAgIGluIHRoZSByaWdodCBzZXF1ZW5jZSBmcm9tIGhlcmUuICovCkBAIC0xNSwxMCArMTYsOSBAQAogCWlmICghKHBjaV9wcm9iZSAmIFBDSV9QUk9CRV9OT0VBUkxZKSkKIAkJcGNpX21tY2ZnX2Vhcmx5X2luaXQoKTsKIAotI2lmZGVmIENPTkZJR19QQ0lfT0xQQwotCWlmICghcGNpX29scGNfaW5pdCgpKQotCQlyZXR1cm4gMDsJLyogc2tpcCBhZGRpdGlvbmFsIGNoZWNrcyBpZiBpdCdzIGFuIFhPICovCi0jZW5kaWYKKwlpZiAoeDg2X2luaXQucGNpLmFyY2hfaW5pdCAmJiAheDg2X2luaXQucGNpLmFyY2hfaW5pdCgpKQorCQlyZXR1cm4gMDsKKwogI2lmZGVmIENPTkZJR19QQ0lfQklPUwogCXBjaV9wY2Jpb3NfaW5pdCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvaXJxLmMgYi9hcmNoL3g4Ni9wY2kvaXJxLmMKaW5kZXggYjAyZjZkOC4uOGIxMDc1MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2lycS5jCisrKyBiL2FyY2gveDg2L3BjaS9pcnEuYwpAQCAtNTMsNyArNTMsNyBAQAogCWludCAoKnByb2JlKShzdHJ1Y3QgaXJxX3JvdXRlciAqciwgc3RydWN0IHBjaV9kZXYgKnJvdXRlciwgdTE2IGRldmljZSk7CiB9OwogCi1pbnQgKCpwY2liaW9zX2VuYWJsZV9pcnEpKHN0cnVjdCBwY2lfZGV2ICpkZXYpID0gTlVMTDsKK2ludCAoKnBjaWJpb3NfZW5hYmxlX2lycSkoc3RydWN0IHBjaV9kZXYgKmRldikgPSBwaXJxX2VuYWJsZV9pcnE7CiB2b2lkICgqcGNpYmlvc19kaXNhYmxlX2lycSkoc3RydWN0IHBjaV9kZXYgKmRldikgPSBOVUxMOwogCiAvKgpAQCAtMTAxOCw3ICsxMDE4LDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHBjaWJpb3NfZml4dXBfaXJxcyh2b2lkKQordm9pZCBfX2luaXQgcGNpYmlvc19maXh1cF9pcnFzKHZvaWQpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IE5VTEw7CiAJdTggcGluOwpAQCAtMTExMiwxMiArMTExMiwxMiBAQAogCXsgfQogfTsKIAotaW50IF9faW5pdCBwY2liaW9zX2lycV9pbml0KHZvaWQpCit2b2lkIF9faW5pdCBwY2liaW9zX2lycV9pbml0KHZvaWQpCiB7CiAJREJHKEtFUk5fREVCVUcgIlBDSTogSVJRIGluaXRcbiIpOwogCi0JaWYgKHBjaWJpb3NfZW5hYmxlX2lycSB8fCByYXdfcGNpX29wcyA9PSBOVUxMKQotCQlyZXR1cm4gMDsKKwlpZiAocmF3X3BjaV9vcHMgPT0gTlVMTCkKKwkJcmV0dXJuOwogCiAJZG1pX2NoZWNrX3N5c3RlbShwY2lpcnFfZG1pX3RhYmxlKTsKIApAQCAtMTE0NCw5ICsxMTQ0LDcgQEAKIAkJCXBpcnFfdGFibGUgPSBOVUxMOwogCX0KIAotCXBjaWJpb3NfZW5hYmxlX2lycSA9IHBpcnFfZW5hYmxlX2lycTsKLQotCXBjaWJpb3NfZml4dXBfaXJxcygpOworCXg4Nl9pbml0LnBjaS5maXh1cF9pcnFzKCk7CiAKIAlpZiAoaW9fYXBpY19hc3NpZ25fcGNpX2lycXMgJiYgcGNpX3JvdXRlaXJxKSB7CiAJCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOwpAQCAtMTE1OSw4ICsxMTU3LDYgQEAKIAkJZm9yX2VhY2hfcGNpX2RldihkZXYpCiAJCQlwaXJxX2VuYWJsZV9pcnEoZGV2KTsKIAl9Ci0KLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgcGlycV9wZW5hbGl6ZV9pc2FfaXJxKGludCBpcnEsIGludCBhY3RpdmUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvbGVnYWN5LmMgYi9hcmNoL3g4Ni9wY2kvbGVnYWN5LmMKaW5kZXggNDA2MWJiMC4uMGRiNWVhZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2xlZ2FjeS5jCisrKyBiL2FyY2gveDg2L3BjaS9sZWdhY3kuYwpAQCAtMzUsMTYgKzM1LDEzIEBACiAJfQogfQogCi1zdGF0aWMgaW50IF9faW5pdCBwY2lfbGVnYWN5X2luaXQodm9pZCkKK2ludCBfX2luaXQgcGNpX2xlZ2FjeV9pbml0KHZvaWQpCiB7CiAJaWYgKCFyYXdfcGNpX29wcykgewogCQlwcmludGsoIlBDSTogU3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgUENJXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKHBjaWJpb3Nfc2Nhbm5lZCsrKQotCQlyZXR1cm4gMDsKLQogCXByaW50aygiUENJOiBQcm9iaW5nIFBDSSBoYXJkd2FyZVxuIik7CiAJcGNpX3Jvb3RfYnVzID0gcGNpYmlvc19zY2FuX3Jvb3QoMCk7CiAJaWYgKHBjaV9yb290X2J1cykKQEAgLTU1LDE4ICs1MiwxNSBAQAogCiBpbnQgX19pbml0IHBjaV9zdWJzeXNfaW5pdCh2b2lkKQogewotI2lmZGVmIENPTkZJR19YODZfTlVNQVEKLQlwY2lfbnVtYXFfaW5pdCgpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FDUEkKLQlwY2lfYWNwaV9pbml0KCk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWDg2X1ZJU1dTCi0JcGNpX3Zpc3dzX2luaXQoKTsKLSNlbmRpZgotCXBjaV9sZWdhY3lfaW5pdCgpOworCS8qCisJICogVGhlIGluaXQgZnVuY3Rpb24gcmV0dXJucyBhbiBub24gemVybyB2YWx1ZSB3aGVuCisJICogcGNpX2xlZ2FjeV9pbml0IHNob3VsZCBiZSBpbnZva2VkLgorCSAqLworCWlmICh4ODZfaW5pdC5wY2kuaW5pdCgpKQorCQlwY2lfbGVnYWN5X2luaXQoKTsKKwogCXBjaWJpb3NfZml4dXBfcGVlcl9icmlkZ2VzKCk7Ci0JcGNpYmlvc19pcnFfaW5pdCgpOworCXg4Nl9pbml0LnBjaS5pbml0X2lycSgpOwogCXBjaWJpb3NfaW5pdCgpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvbXJzdC5jIGIvYXJjaC94ODYvcGNpL21yc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmYyZmNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvcGNpL21yc3QuYwpAQCAtMCwwICsxLDI2MiBAQAorLyoKKyAqIE1vb3Jlc3Rvd24gUENJIHN1cHBvcnQKKyAqICAgQ29weXJpZ2h0IChjKSAyMDA4IEludGVsIENvcnBvcmF0aW9uCisgKiAgICAgSmVzc2UgQmFybmVzIDxqZXNzZS5iYXJuZXNAaW50ZWwuY29tPgorICoKKyAqIE1vb3Jlc3Rvd24gaGFzIGFuIGludGVyZXN0aW5nIFBDSSBpbXBsZW1lbnRhdGlvbjoKKyAqICAgLSBjb25maWd1cmF0aW9uIHNwYWNlIGlzIG1lbW9yeSBtYXBwZWQgKGFzIGRlZmluZWQgYnkgTUNGRykKKyAqICAgLSBMaW5jcm9mdCBkZXZpY2VzIGFsc28gaGF2ZSBhIHJlYWwsIHR5cGUgMSBjb25maWd1cmF0aW9uIHNwYWNlCisgKiAgIC0gRWFybHkgTGluY3JvZnQgc2lsaWNvbiBoYXMgYSB0eXBlIDEgYWNjZXNzIGJ1ZyB0aGF0IHdpbGwgY2F1c2UKKyAqICAgICBhIGhhbmcgaWYgbm9uLWV4aXN0ZW50IGRldmljZXMgYXJlIGFjY2Vzc2VkCisgKiAgIC0gc29tZSBkZXZpY2VzIGhhdmUgdGhlICJmaXhlZCBCQVIiIGNhcGFiaWxpdHksIHdoaWNoIG1lYW5zCisgKiAgICAgdGhleSBjYW4ndCBiZSByZWxvY2F0ZWQgb3IgbW9kaWZpZWQ7IGNoZWNrIGZvciB0aGF0IGR1cmluZworICogICAgIEJBUiBzaXppbmcKKyAqCisgKiBTbywgd2UgdXNlIHRoZSBNQ0ZHIHNwYWNlIGZvciBhbGwgcmVhZHMgYW5kIHdyaXRlcywgYnV0IGFsc28gc2VuZAorICogTGluY3JvZnQgd3JpdGVzIHRvIHR5cGUgMSBzcGFjZS4gIEJ1dCBvbmx5IHJlYWQvd3JpdGUgaWYgdGhlIGRldmljZQorICogYWN0dWFsbHkgZXhpc3RzLCBvdGhlcndpc2UgcmV0dXJuIGFsbCAxcyBmb3IgcmVhZHMgYW5kIGJpdCBidWNrZXQKKyAqIHRoZSB3cml0ZXMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgorCisjaW5jbHVkZSA8YXNtL2FjcGkuaD4KKyNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vcGNpX3g4Ni5oPgorI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW9fYXBpYy5oPgorCisjZGVmaW5lIFBDSUVfQ0FQX09GRlNFVAkweDEwMAorCisvKiBGaXhlZCBCQVIgZmllbGRzICovCisjZGVmaW5lIFBDSUVfVk5EUl9DQVBfSURfRklYRURfQkFSIDB4MDAJLyogRml4ZWQgQkFSIChUQkQpICovCisjZGVmaW5lIFBDSV9GSVhFRF9CQVJfMF9TSVpFCTB4MDQKKyNkZWZpbmUgUENJX0ZJWEVEX0JBUl8xX1NJWkUJMHgwOAorI2RlZmluZSBQQ0lfRklYRURfQkFSXzJfU0laRQkweDBjCisjZGVmaW5lIFBDSV9GSVhFRF9CQVJfM19TSVpFCTB4MTAKKyNkZWZpbmUgUENJX0ZJWEVEX0JBUl80X1NJWkUJMHgxNAorI2RlZmluZSBQQ0lfRklYRURfQkFSXzVfU0laRQkweDFjCisKKy8qKgorICogZml4ZWRfYmFyX2NhcCAtIHJldHVybiB0aGUgb2Zmc2V0IG9mIHRoZSBmaXhlZCBCQVIgY2FwIGlmIGZvdW5kCisgKiBAYnVzOiBQQ0kgYnVzCisgKiBAZGV2Zm46IGRldmljZSBpbiBxdWVzdGlvbgorICoKKyAqIExvb2sgZm9yIHRoZSBmaXhlZCBCQVIgY2FwIG9uIEBidXMgYW5kIEBkZXZmbiwgcmV0dXJuaW5nIGl0cyBvZmZzZXQKKyAqIGlmIGZvdW5kIG9yIDAgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IGZpeGVkX2Jhcl9jYXAoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuKQoreworCWludCBwb3M7CisJdTMyIHBjaWVfY2FwID0gMCwgY2FwX2RhdGE7CisKKwlwb3MgPSBQQ0lFX0NBUF9PRkZTRVQ7CisKKwlpZiAoIXJhd19wY2lfZXh0X29wcykKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAocG9zKSB7CisJCWlmIChyYXdfcGNpX2V4dF9vcHMtPnJlYWQocGNpX2RvbWFpbl9ucihidXMpLCBidXMtPm51bWJlciwKKwkJCQkJICBkZXZmbiwgcG9zLCA0LCAmcGNpZV9jYXApKQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKHBjaWVfY2FwID09IDB4ZmZmZmZmZmYpCisJCQlyZXR1cm4gMDsKKworCQlpZiAoUENJX0VYVF9DQVBfSUQocGNpZV9jYXApID09IFBDSV9FWFRfQ0FQX0lEX1ZORFIpIHsKKwkJCXJhd19wY2lfZXh0X29wcy0+cmVhZChwY2lfZG9tYWluX25yKGJ1cyksIGJ1cy0+bnVtYmVyLAorCQkJCQkgICAgICBkZXZmbiwgcG9zICsgNCwgNCwgJmNhcF9kYXRhKTsKKwkJCWlmICgoY2FwX2RhdGEgJiAweGZmZmYpID09IFBDSUVfVk5EUl9DQVBfSURfRklYRURfQkFSKQorCQkJCXJldHVybiBwb3M7CisJCX0KKworCQlwb3MgPSBwY2llX2NhcCA+PiAyMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2lfZGV2aWNlX3VwZGF0ZV9maXhlZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkJICAgaW50IHJlZywgaW50IGxlbiwgdTMyIHZhbCwgaW50IG9mZnNldCkKK3sKKwl1MzIgc2l6ZTsKKwl1bnNpZ25lZCBpbnQgZG9tYWluLCBidXNudW07CisJaW50IGJhciA9IChyZWcgLSBQQ0lfQkFTRV9BRERSRVNTXzApID4+IDI7CisKKwlkb21haW4gPSBwY2lfZG9tYWluX25yKGJ1cyk7CisJYnVzbnVtID0gYnVzLT5udW1iZXI7CisKKwlpZiAodmFsID09IH4wICYmIGxlbiA9PSA0KSB7CisJCXVuc2lnbmVkIGxvbmcgZGVjb2RlOworCisJCXJhd19wY2lfZXh0X29wcy0+cmVhZChkb21haW4sIGJ1c251bSwgZGV2Zm4sCisJCQkgICAgICAgb2Zmc2V0ICsgOCArIChiYXIgKiA0KSwgNCwgJnNpemUpOworCisJCS8qIFR1cm4gdGhlIHNpemUgaW50byBhIGRlY29kZSBwYXR0ZXJuIGZvciB0aGUgc2l6aW5nIGNvZGUgKi8KKwkJaWYgKHNpemUpIHsKKwkJCWRlY29kZSA9IHNpemUgLSAxOworCQkJZGVjb2RlIHw9IGRlY29kZSA+PiAxOworCQkJZGVjb2RlIHw9IGRlY29kZSA+PiAyOworCQkJZGVjb2RlIHw9IGRlY29kZSA+PiA0OworCQkJZGVjb2RlIHw9IGRlY29kZSA+PiA4OworCQkJZGVjb2RlIHw9IGRlY29kZSA+PiAxNjsKKwkJCWRlY29kZSsrOworCQkJZGVjb2RlID0gfihkZWNvZGUgLSAxKTsKKwkJfSBlbHNlIHsKKwkJCWRlY29kZSA9IH4wOworCQl9CisKKwkJLyoKKwkJICogSWYgdmFsIGlzIGFsbCBvbmVzLCB0aGUgY29yZSBjb2RlIGlzIHRyeWluZyB0byBzaXplIHRoZSByZWcsCisJCSAqIHNvIHVwZGF0ZSB0aGUgbW1jb25maWcgc3BhY2Ugd2l0aCB0aGUgcmVhbCBzaXplLgorCQkgKgorCQkgKiBOb3RlOiB0aGlzIGFzc3VtZXMgdGhlIGZpeGVkIHNpemUgd2UgZ290IGlzIGEgcG93ZXIgb2YgdHdvLgorCQkgKi8KKwkJcmV0dXJuIHJhd19wY2lfZXh0X29wcy0+d3JpdGUoZG9tYWluLCBidXNudW0sIGRldmZuLCByZWcsIDQsCisJCQkJICAgICAgIGRlY29kZSk7CisJfQorCisJLyogVGhpcyBpcyBzb21lIG90aGVyIGtpbmQgb2YgQkFSIHdyaXRlLCBzbyBqdXN0IGRvIGl0LiAqLworCXJldHVybiByYXdfcGNpX2V4dF9vcHMtPndyaXRlKGRvbWFpbiwgYnVzbnVtLCBkZXZmbiwgcmVnLCBsZW4sIHZhbCk7Cit9CisKKy8qKgorICogdHlwZTFfYWNjZXNzX29rIC0gY2hlY2sgd2hldGhlciB0byB1c2UgdHlwZSAxCisgKiBAYnVzOiBidXMgbnVtYmVyCisgKiBAZGV2Zm46IGRldmljZSAmIGZ1bmN0aW9uIGluIHF1ZXN0aW9uCisgKgorICogSWYgdGhlIGJ1cyBpcyBvbiBhIExpbmNyb2Z0IGNoaXAgYW5kIGl0IGV4aXN0cywgb3IgaXMgbm90IG9uIGEgTGluY3JvZnQgYXQKKyAqIGFsbCwgdGhlIHdlIGNhbiBnbyBhaGVhZCB3aXRoIGFueSByZWFkcyAmIHdyaXRlcy4gIElmIGl0J3Mgb24gYSBMaW5jcm9mdCwKKyAqIGJ1dCBkb2Vzbid0IGV4aXN0LCBhdm9pZCB0aGUgYWNjZXNzIGFsdG9nZXRoZXIgdG8ga2VlcCB0aGUgY2hpcCBmcm9tCisgKiBoYW5naW5nLgorICovCitzdGF0aWMgYm9vbCB0eXBlMV9hY2Nlc3Nfb2sodW5zaWduZWQgaW50IGJ1cywgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgcmVnKQoreworCS8qIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBBMCBMTkMgYnVnIHdoZXJlIFBDSSBzdGF0dXMgcmVnaXN0ZXIgZG9lcworCSAqIG5vdCBoYXZlIG5ldyBDQVAgYml0IHNldC4gY2FuIG5vdCBiZSB3cml0dGVuIGJ5IFNXIGVpdGhlci4KKwkgKgorCSAqIFBDSSBoZWFkZXIgdHlwZSBpbiByZWFsIExOQyBpbmRpY2F0ZXMgYSBzaW5nbGUgZnVuY3Rpb24gZGV2aWNlLCB0aGlzCisJICogd2lsbCBwcmV2ZW50IHByb2Jpbmcgb3RoZXIgZGV2aWNlcyB1bmRlciB0aGUgc2FtZSBmdW5jdGlvbiBpbiBQQ0kKKwkgKiBzaGltLiBUaGVyZWZvcmUsIHVzZSB0aGUgaGVhZGVyIHR5cGUgaW4gc2hpbSBpbnN0ZWFkLgorCSAqLworCWlmIChyZWcgPj0gMHgxMDAgfHwgcmVnID09IFBDSV9TVEFUVVMgfHwgcmVnID09IFBDSV9IRUFERVJfVFlQRSkKKwkJcmV0dXJuIDA7CisJaWYgKGJ1cyA9PSAwICYmIChkZXZmbiA9PSBQQ0lfREVWRk4oMiwgMCkgfHwgZGV2Zm4gPT0gUENJX0RFVkZOKDAsIDApKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7IC8qIGxhbmd3ZWxsIG9uIG90aGVycyAqLworfQorCitzdGF0aWMgaW50IHBjaV9yZWFkKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLAorCQkgICAgaW50IHNpemUsIHUzMiAqdmFsdWUpCit7CisJaWYgKHR5cGUxX2FjY2Vzc19vayhidXMtPm51bWJlciwgZGV2Zm4sIHdoZXJlKSkKKwkJcmV0dXJuIHBjaV9kaXJlY3RfY29uZjEucmVhZChwY2lfZG9tYWluX25yKGJ1cyksIGJ1cy0+bnVtYmVyLAorCQkJCQlkZXZmbiwgd2hlcmUsIHNpemUsIHZhbHVlKTsKKwlyZXR1cm4gcmF3X3BjaV9leHRfb3BzLT5yZWFkKHBjaV9kb21haW5fbnIoYnVzKSwgYnVzLT5udW1iZXIsCisJCQkgICAgICBkZXZmbiwgd2hlcmUsIHNpemUsIHZhbHVlKTsKK30KKworc3RhdGljIGludCBwY2lfd3JpdGUoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsCisJCSAgICAgaW50IHNpemUsIHUzMiB2YWx1ZSkKK3sKKwlpbnQgb2Zmc2V0OworCisJLyogT24gTVJTVCwgdGhlcmUgaXMgbm8gUENJIFJPTSBCQVIsIHRoaXMgd2lsbCBjYXVzZSBhIHN1YnNlcXVlbnQgcmVhZAorCSAqIHRvIFJPTSBCQVIgcmV0dXJuIDAgdGhlbiBiZWluZyBpZ25vcmVkLgorCSAqLworCWlmICh3aGVyZSA9PSBQQ0lfUk9NX0FERFJFU1MpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBEZXZpY2VzIHdpdGggZml4ZWQgQkFScyBuZWVkIHNwZWNpYWwgaGFuZGxpbmc6CisJICogICAtIEJBUiBzaXppbmcgY29kZSB3aWxsIHNhdmUsIHdyaXRlIH4wLCByZWFkIHNpemUsIHJlc3RvcmUKKwkgKiAgIC0gc28gd3JpdGVzIHRvIGZpeGVkIEJBUnMgbmVlZCBzcGVjaWFsIGhhbmRsaW5nCisJICogICAtIG90aGVyIHdyaXRlcyB0byBmaXhlZCBCQVIgZGV2aWNlcyBzaG91bGQgZ28gdGhyb3VnaCBtbWNvbmZpZworCSAqLworCW9mZnNldCA9IGZpeGVkX2Jhcl9jYXAoYnVzLCBkZXZmbik7CisJaWYgKG9mZnNldCAmJgorCSAgICAod2hlcmUgPj0gUENJX0JBU0VfQUREUkVTU18wICYmIHdoZXJlIDw9IFBDSV9CQVNFX0FERFJFU1NfNSkpIHsKKwkJcmV0dXJuIHBjaV9kZXZpY2VfdXBkYXRlX2ZpeGVkKGJ1cywgZGV2Zm4sIHdoZXJlLCBzaXplLCB2YWx1ZSwKKwkJCQkJICAgICAgIG9mZnNldCk7CisJfQorCisJLyoKKwkgKiBPbiBNb29yZXN0b3duIHVwZGF0ZSBib3RoIHJlYWwgJiBtbWNvbmZpZyBzcGFjZQorCSAqIE5vdGU6IGVhcmx5IExpbmNyb2Z0IHNpbGljb24gY2FuJ3QgaGFuZGxlIHR5cGUgMSBhY2Nlc3NlcyB0bworCSAqICAgICAgIG5vbi1leGlzdGVudCBkZXZpY2VzLCBzbyBqdXN0IGVhdCB0aGUgd3JpdGUgaW4gdGhhdCBjYXNlLgorCSAqLworCWlmICh0eXBlMV9hY2Nlc3Nfb2soYnVzLT5udW1iZXIsIGRldmZuLCB3aGVyZSkpCisJCXJldHVybiBwY2lfZGlyZWN0X2NvbmYxLndyaXRlKHBjaV9kb21haW5fbnIoYnVzKSwgYnVzLT5udW1iZXIsCisJCQkJCSAgICAgIGRldmZuLCB3aGVyZSwgc2l6ZSwgdmFsdWUpOworCXJldHVybiByYXdfcGNpX2V4dF9vcHMtPndyaXRlKHBjaV9kb21haW5fbnIoYnVzKSwgYnVzLT5udW1iZXIsIGRldmZuLAorCQkJICAgICAgIHdoZXJlLCBzaXplLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgbXJzdF9wY2lfaXJxX2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXU4IHBpbjsKKwlzdHJ1Y3QgaW9fYXBpY19pcnFfYXR0ciBpcnFfYXR0cjsKKworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0lOVEVSUlVQVF9QSU4sICZwaW4pOworCisJLyogTVJTVCBvbmx5IGhhdmUgSU9BUElDLCB0aGUgUENJIGlycSBsaW5lcyBhcmUgMToxIG1hcHBlZCB0bworCSAqIElPQVBJQyBSVEUgZW50cmllcywgc28gd2UganVzdCBlbmFibGUgUlRFIGZvciB0aGUgZGV2aWNlLgorCSAqLworCWlycV9hdHRyLmlvYXBpYyA9IG1wX2ZpbmRfaW9hcGljKGRldi0+aXJxKTsKKwlpcnFfYXR0ci5pb2FwaWNfcGluID0gZGV2LT5pcnE7CisJaXJxX2F0dHIudHJpZ2dlciA9IDE7IC8qIGxldmVsICovCisJaXJxX2F0dHIucG9sYXJpdHkgPSAxOyAvKiBhY3RpdmUgbG93ICovCisJaW9fYXBpY19zZXRfcGNpX3JvdXRpbmcoJmRldi0+ZGV2LCBkZXYtPmlycSwgJmlycV9hdHRyKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcGNpX29wcyBwY2lfbXJzdF9vcHMgPSB7CisJLnJlYWQgPSBwY2lfcmVhZCwKKwkud3JpdGUgPSBwY2lfd3JpdGUsCit9OworCisvKioKKyAqIHBjaV9tcnN0X2luaXQgLSBpbnN0YWxscyBwY2lfbXJzdF9vcHMKKyAqCisgKiBNb29yZXN0b3duIGhhcyBhbiBpbnRlcmVzdGluZyBQQ0kgaW1wbGVtZW50YXRpb24gKHNlZSBhYm92ZSkuCisgKiBDYWxsZWQgd2hlbiB0aGUgZWFybHkgcGxhdGZvcm0gZGV0ZWN0aW9uIGluc3RhbGxzIGl0LgorICovCitpbnQgX19pbml0IHBjaV9tcnN0X2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJNb29yZXN0b3duIHBsYXRmb3JtIGRldGVjdGVkLCB1c2luZyBNUlNUIFBDSSBvcHNcbiIpOworCXBjaV9tbWNmZ19sYXRlX2luaXQoKTsKKwlwY2liaW9zX2VuYWJsZV9pcnEgPSBtcnN0X3BjaV9pcnFfZW5hYmxlOworCXBjaV9yb290X29wcyA9IHBjaV9tcnN0X29wczsKKwkvKiBDb250aW51ZSB3aXRoIHN0YW5kYXJkIGluaXQgKi8KKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIExhbmd3ZWxsIGRldmljZXMgcmVzaWRlIGF0IGZpeGVkIG9mZnNldHMsIGRvbid0IHRyeSB0byBtb3ZlIHRoZW0uCisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBwY2lfZml4ZWRfYmFyX2ZpeHVwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJdTMyIHNpemU7CisJaW50IGk7CisKKwkvKiBGaXh1cCB0aGUgQkFSIHNpemVzIGZvciBmaXhlZCBCQVIgZGV2aWNlcyBhbmQgbWFrZSB0aGVtIHVubW92ZWFibGUgKi8KKwlvZmZzZXQgPSBmaXhlZF9iYXJfY2FwKGRldi0+YnVzLCBkZXYtPmRldmZuKTsKKwlpZiAoIW9mZnNldCB8fCBQQ0lfREVWRk4oMiwgMCkgPT0gZGV2LT5kZXZmbiB8fAorCSAgICBQQ0lfREVWRk4oMiwgMikgPT0gZGV2LT5kZXZmbikKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IFBDSV9ST01fUkVTT1VSQ0U7IGkrKykgeworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBvZmZzZXQgKyA4ICsgKGkgKiA0KSwgJnNpemUpOworCQlkZXYtPnJlc291cmNlW2ldLmVuZCA9IGRldi0+cmVzb3VyY2VbaV0uc3RhcnQgKyBzaXplIC0gMTsKKwkJZGV2LT5yZXNvdXJjZVtpXS5mbGFncyB8PSBJT1JFU09VUkNFX1BDSV9GSVhFRDsKKwl9Cit9CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0FOWV9JRCwgcGNpX2ZpeGVkX2Jhcl9maXh1cCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvbnVtYXFfMzIuYyBiL2FyY2gveDg2L3BjaS9udW1hcV8zMi5jCmluZGV4IDg4ODRhMWMuLjgyMjM3MzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9udW1hcV8zMi5jCisrKyBiL2FyY2gveDg2L3BjaS9udW1hcV8zMi5jCkBAIC0xNDgsMTQgKzE0OCw4IEBACiB7CiAJaW50IHF1YWQ7CiAKLQlpZiAoIWZvdW5kX251bWFxKQotCQlyZXR1cm4gMDsKLQogCXJhd19wY2lfb3BzID0gJnBjaV9kaXJlY3RfY29uZjFfbXE7CiAKLQlpZiAocGNpYmlvc19zY2FubmVkKyspCi0JCXJldHVybiAwOwotCiAJcGNpX3Jvb3RfYnVzID0gcGNpYmlvc19zY2FuX3Jvb3QoMCk7CiAJaWYgKHBjaV9yb290X2J1cykKIAkJcGNpX2J1c19hZGRfZGV2aWNlcyhwY2lfcm9vdF9idXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL29scGMuYyBiL2FyY2gveDg2L3BjaS9vbHBjLmMKaW5kZXggYjg4OWQ4Mi4uYjM0ODE1NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL29scGMuYworKysgYi9hcmNoL3g4Ni9wY2kvb2xwYy5jCkBAIC0zMDQsOSArMzA0LDYgQEAKIAogaW50IF9faW5pdCBwY2lfb2xwY19pbml0KHZvaWQpCiB7Ci0JaWYgKCFtYWNoaW5lX2lzX29scGMoKSB8fCBvbHBjX2hhc192c2EoKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAlwcmludGsoS0VSTl9JTkZPICJQQ0k6IFVzaW5nIGNvbmZpZ3VyYXRpb24gdHlwZSBPTFBDXG4iKTsKIAlyYXdfcGNpX29wcyA9ICZwY2lfb2xwY19jb25mOwogCWlzX2x4ID0gaXNfZ2VvZGVfbHgoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS92aXN3cy5jIGIvYXJjaC94ODYvcGNpL3Zpc3dzLmMKaW5kZXggYmNlYWQ3YS4uMDMwMDhmNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL3Zpc3dzLmMKKysrIGIvYXJjaC94ODYvcGNpL3Zpc3dzLmMKQEAgLTY5LDkgKzY5LDYgQEAKIAogaW50IF9faW5pdCBwY2lfdmlzd3NfaW5pdCh2b2lkKQogewotCWlmICghaXNfdmlzd3NfYm94KCkpCi0JCXJldHVybiAtMTsKLQogCXBjaWJpb3NfZW5hYmxlX2lycSA9ICZwY2lfdmlzd3NfZW5hYmxlX2lycTsKIAlwY2liaW9zX2Rpc2FibGVfaXJxID0gJnBjaV92aXN3c19kaXNhYmxlX2lycTsKIApAQCAtOTAsNSArODcsNiBAQAogCXBjaV9zY2FuX2J1c193aXRoX3N5c2RhdGEocGNpX2J1czEpOwogCXBjaV9maXh1cF9pcnFzKHBjaV9jb21tb25fc3dpenpsZSwgdmlzd3NfbWFwX2lycSk7CiAJcGNpYmlvc19yZXNvdXJjZV9zdXJ2ZXkoKTsKLQlyZXR1cm4gMDsKKwkvKiBSZXF1ZXN0IGJ1cyBzY2FuICovCisJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL0tjb25maWcgYi9kcml2ZXJzL0tjb25maWcKaW5kZXggMzY4YWU2ZC4uYTJiOTAyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9LY29uZmlnCisrKyBiL2RyaXZlcnMvS2NvbmZpZwpAQCAtOTYsOCArOTYsNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvcnRjL0tjb25maWciCiAKLXNvdXJjZSAiZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnIgotCiBzb3VyY2UgImRyaXZlcnMvZG1hL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9kY2EvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKaW5kZXggOTg2M2M5OC4uZTliN2I0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKQEAgLTEyMyw2ICsxMjMsOCBAQAogI2VuZGlmCiAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqLCBwcm9jZXNzb3JzKTsKK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTChwcm9jZXNzb3JzKTsKKwogc3RydWN0IGFjcGlfcHJvY2Vzc29yX2VycmF0YSBlcnJhdGEgX19yZWFkX21vc3RseTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9NYWtlZmlsZSBiL2RyaXZlcnMvYmFzZS9wb3dlci9NYWtlZmlsZQppbmRleCAzY2UzNTE5Li44OWRlNzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL01ha2VmaWxlCkBAIC0xLDYgKzEsNyBAQAogb2JqLSQoQ09ORklHX1BNKQkrPSBzeXNmcy5vCiBvYmotJChDT05GSUdfUE1fU0xFRVApCSs9IG1haW4ubwogb2JqLSQoQ09ORklHX1BNX1JVTlRJTUUpCSs9IHJ1bnRpbWUubworb2JqLSQoQ09ORklHX1BNX09QUykJKz0gZ2VuZXJpY19vcHMubwogb2JqLSQoQ09ORklHX1BNX1RSQUNFX1JUQykJKz0gdHJhY2UubwogCiBjY2ZsYWdzLSQoQ09ORklHX0RFQlVHX0RSSVZFUikgOj0gLURERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL2dlbmVyaWNfb3BzLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvZ2VuZXJpY19vcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjI5ZDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL2dlbmVyaWNfb3BzLmMKQEAgLTAsMCArMSwyMzMgQEAKKy8qCisgKiBkcml2ZXJzL2Jhc2UvcG93ZXIvZ2VuZXJpY19vcHMuYyAtIEdlbmVyaWMgUE0gY2FsbGJhY2tzIGZvciBzdWJzeXN0ZW1zCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFJhZmFlbCBKLiBXeXNvY2tpIDxyandAc2lzay5wbD4sIE5vdmVsbCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2Mi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisKKyNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorLyoqCisgKiBwbV9nZW5lcmljX3J1bnRpbWVfaWRsZSAtIEdlbmVyaWMgcnVudGltZSBpZGxlIGNhbGxiYWNrIGZvciBzdWJzeXN0ZW1zLgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KKyAqCisgKiBJZiBQTSBvcGVyYXRpb25zIGFyZSBkZWZpbmVkIGZvciB0aGUgQGRldidzIGRyaXZlciBhbmQgdGhleSBpbmNsdWRlCisgKiAtPnJ1bnRpbWVfaWRsZSgpLCBleGVjdXRlIGl0IGFuZCByZXR1cm4gaXRzIGVycm9yIGNvZGUsIGlmIG5vbnplcm8uCisgKiBPdGhlcndpc2UsIGV4ZWN1dGUgcG1fcnVudGltZV9zdXNwZW5kKCkgZm9yIHRoZSBkZXZpY2UgYW5kIHJldHVybiAwLgorICovCitpbnQgcG1fZ2VuZXJpY19ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKKworCWlmIChwbSAmJiBwbS0+cnVudGltZV9pZGxlKSB7CisJCWludCByZXQgPSBwbS0+cnVudGltZV9pZGxlKGRldik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXBtX3J1bnRpbWVfc3VzcGVuZChkZXYpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocG1fZ2VuZXJpY19ydW50aW1lX2lkbGUpOworCisvKioKKyAqIHBtX2dlbmVyaWNfcnVudGltZV9zdXNwZW5kIC0gR2VuZXJpYyBydW50aW1lIHN1c3BlbmQgY2FsbGJhY2sgZm9yIHN1YnN5c3RlbXMuCisgKiBAZGV2OiBEZXZpY2UgdG8gc3VzcGVuZC4KKyAqCisgKiBJZiBQTSBvcGVyYXRpb25zIGFyZSBkZWZpbmVkIGZvciB0aGUgQGRldidzIGRyaXZlciBhbmQgdGhleSBpbmNsdWRlCisgKiAtPnJ1bnRpbWVfc3VzcGVuZCgpLCBleGVjdXRlIGl0IGFuZCByZXR1cm4gaXRzIGVycm9yIGNvZGUuICBPdGhlcndpc2UsCisgKiByZXR1cm4gLUVJTlZBTC4KKyAqLworaW50IHBtX2dlbmVyaWNfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG0gPSBkZXYtPmRyaXZlciA/IGRldi0+ZHJpdmVyLT5wbSA6IE5VTEw7CisJaW50IHJldDsKKworCXJldCA9IHBtICYmIHBtLT5ydW50aW1lX3N1c3BlbmQgPyBwbS0+cnVudGltZV9zdXNwZW5kKGRldikgOiAtRUlOVkFMOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBtX2dlbmVyaWNfcnVudGltZV9zdXNwZW5kKTsKKworLyoqCisgKiBwbV9nZW5lcmljX3J1bnRpbWVfcmVzdW1lIC0gR2VuZXJpYyBydW50aW1lIHJlc3VtZSBjYWxsYmFjayBmb3Igc3Vic3lzdGVtcy4KKyAqIEBkZXY6IERldmljZSB0byByZXN1bWUuCisgKgorICogSWYgUE0gb3BlcmF0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhlIEBkZXYncyBkcml2ZXIgYW5kIHRoZXkgaW5jbHVkZQorICogLT5ydW50aW1lX3Jlc3VtZSgpLCBleGVjdXRlIGl0IGFuZCByZXR1cm4gaXRzIGVycm9yIGNvZGUuICBPdGhlcndpc2UsCisgKiByZXR1cm4gLUVJTlZBTC4KKyAqLworaW50IHBtX2dlbmVyaWNfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKKwlpbnQgcmV0OworCisJcmV0ID0gcG0gJiYgcG0tPnJ1bnRpbWVfcmVzdW1lID8gcG0tPnJ1bnRpbWVfcmVzdW1lKGRldikgOiAtRUlOVkFMOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBtX2dlbmVyaWNfcnVudGltZV9yZXN1bWUpOworI2VuZGlmIC8qIENPTkZJR19QTV9SVU5USU1FICovCisKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKKy8qKgorICogX19wbV9nZW5lcmljX2NhbGwgLSBHZW5lcmljIHN1c3BlbmQvZnJlZXplL3Bvd2Vyb2ZmL3RoYXcgc3Vic3lzdGVtIGNhbGxiYWNrLgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KKyAqIEBldmVudDogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIHVuZGVyIHdheS4KKyAqCisgKiBJZiB0aGUgZGV2aWNlIGhhcyBub3QgYmVlbiBzdXNwZW5kZWQgYXQgcnVuIHRpbWUsIGV4ZWN1dGUgdGhlCisgKiBzdXNwZW5kL2ZyZWV6ZS9wb3dlcm9mZi90aGF3IGNhbGxiYWNrIHByb3ZpZGVkIGJ5IGl0cyBkcml2ZXIsIGlmIGRlZmluZWQsIGFuZAorICogcmV0dXJuIGl0cyBlcnJvciBjb2RlLiAgT3RoZXJ3aXNlLCByZXR1cm4gemVyby4KKyAqLworc3RhdGljIGludCBfX3BtX2dlbmVyaWNfY2FsbChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBldmVudCkKK3sKKwljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG0gPSBkZXYtPmRyaXZlciA/IGRldi0+ZHJpdmVyLT5wbSA6IE5VTEw7CisJaW50ICgqY2FsbGJhY2spKHN0cnVjdCBkZXZpY2UgKik7CisKKwlpZiAoIXBtIHx8IHBtX3J1bnRpbWVfc3VzcGVuZGVkKGRldikpCisJCXJldHVybiAwOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgUE1fRVZFTlRfU1VTUEVORDoKKwkJY2FsbGJhY2sgPSBwbS0+c3VzcGVuZDsKKwkJYnJlYWs7CisJY2FzZSBQTV9FVkVOVF9GUkVFWkU6CisJCWNhbGxiYWNrID0gcG0tPmZyZWV6ZTsKKwkJYnJlYWs7CisJY2FzZSBQTV9FVkVOVF9ISUJFUk5BVEU6CisJCWNhbGxiYWNrID0gcG0tPnBvd2Vyb2ZmOworCQlicmVhazsKKwljYXNlIFBNX0VWRU5UX1RIQVc6CisJCWNhbGxiYWNrID0gcG0tPnRoYXc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNhbGxiYWNrID0gTlVMTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGNhbGxiYWNrID8gY2FsbGJhY2soZGV2KSA6IDA7Cit9CisKKy8qKgorICogcG1fZ2VuZXJpY19zdXNwZW5kIC0gR2VuZXJpYyBzdXNwZW5kIGNhbGxiYWNrIGZvciBzdWJzeXN0ZW1zLgorICogQGRldjogRGV2aWNlIHRvIHN1c3BlbmQuCisgKi8KK2ludCBwbV9nZW5lcmljX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBfX3BtX2dlbmVyaWNfY2FsbChkZXYsIFBNX0VWRU5UX1NVU1BFTkQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocG1fZ2VuZXJpY19zdXNwZW5kKTsKKworLyoqCisgKiBwbV9nZW5lcmljX2ZyZWV6ZSAtIEdlbmVyaWMgZnJlZXplIGNhbGxiYWNrIGZvciBzdWJzeXN0ZW1zLgorICogQGRldjogRGV2aWNlIHRvIGZyZWV6ZS4KKyAqLworaW50IHBtX2dlbmVyaWNfZnJlZXplKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gX19wbV9nZW5lcmljX2NhbGwoZGV2LCBQTV9FVkVOVF9GUkVFWkUpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocG1fZ2VuZXJpY19mcmVlemUpOworCisvKioKKyAqIHBtX2dlbmVyaWNfcG93ZXJvZmYgLSBHZW5lcmljIHBvd2Vyb2ZmIGNhbGxiYWNrIGZvciBzdWJzeXN0ZW1zLgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KKyAqLworaW50IHBtX2dlbmVyaWNfcG93ZXJvZmYoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBfX3BtX2dlbmVyaWNfY2FsbChkZXYsIFBNX0VWRU5UX0hJQkVSTkFURSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbV9nZW5lcmljX3Bvd2Vyb2ZmKTsKKworLyoqCisgKiBwbV9nZW5lcmljX3RoYXcgLSBHZW5lcmljIHRoYXcgY2FsbGJhY2sgZm9yIHN1YnN5c3RlbXMuCisgKiBAZGV2OiBEZXZpY2UgdG8gdGhhdy4KKyAqLworaW50IHBtX2dlbmVyaWNfdGhhdyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIF9fcG1fZ2VuZXJpY19jYWxsKGRldiwgUE1fRVZFTlRfVEhBVyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbV9nZW5lcmljX3RoYXcpOworCisvKioKKyAqIF9fcG1fZ2VuZXJpY19yZXN1bWUgLSBHZW5lcmljIHJlc3VtZS9yZXN0b3JlIGNhbGxiYWNrIGZvciBzdWJzeXN0ZW1zLgorICogQGRldjogRGV2aWNlIHRvIGhhbmRsZS4KKyAqIEBldmVudDogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIHVuZGVyIHdheS4KKyAqCisgKiBFeGVjdXRlIHRoZSByZXN1bWUvcmVzb3RyZSBjYWxsYmFjayBwcm92aWRlZCBieSB0aGUgQGRldidzIGRyaXZlciwgaWYKKyAqIGRlZmluZWQuICBJZiBpdCByZXR1cm5zIDAsIGNoYW5nZSB0aGUgZGV2aWNlJ3MgcnVudGltZSBQTSBzdGF0dXMgdG8gJ2FjdGl2ZScuCisgKiBSZXR1cm4gdGhlIGNhbGxiYWNrJ3MgZXJyb3IgY29kZS4KKyAqLworc3RhdGljIGludCBfX3BtX2dlbmVyaWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGV2ZW50KQoreworCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKKwlpbnQgKCpjYWxsYmFjaykoc3RydWN0IGRldmljZSAqKTsKKwlpbnQgcmV0OworCisJaWYgKCFwbSkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBQTV9FVkVOVF9SRVNVTUU6CisJCWNhbGxiYWNrID0gcG0tPnJlc3VtZTsKKwkJYnJlYWs7CisJY2FzZSBQTV9FVkVOVF9SRVNUT1JFOgorCQljYWxsYmFjayA9IHBtLT5yZXN0b3JlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljYWxsYmFjayA9IE5VTEw7CisJCWJyZWFrOworCX0KKworCWlmICghY2FsbGJhY2spCisJCXJldHVybiAwOworCisJcmV0ID0gY2FsbGJhY2soZGV2KTsKKwlpZiAoIXJldCkgeworCQlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsKKwkJcG1fcnVudGltZV9zZXRfYWN0aXZlKGRldik7CisJCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBwbV9nZW5lcmljX3Jlc3VtZSAtIEdlbmVyaWMgcmVzdW1lIGNhbGxiYWNrIGZvciBzdWJzeXN0ZW1zLgorICogQGRldjogRGV2aWNlIHRvIHJlc3VtZS4KKyAqLworaW50IHBtX2dlbmVyaWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gX19wbV9nZW5lcmljX3Jlc3VtZShkZXYsIFBNX0VWRU5UX1JFU1VNRSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbV9nZW5lcmljX3Jlc3VtZSk7CisKKy8qKgorICogcG1fZ2VuZXJpY19yZXN0b3JlIC0gR2VuZXJpYyByZXN0b3JlIGNhbGxiYWNrIGZvciBzdWJzeXN0ZW1zLgorICogQGRldjogRGV2aWNlIHRvIHJlc3RvcmUuCisgKi8KK2ludCBwbV9nZW5lcmljX3Jlc3RvcmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBfX3BtX2dlbmVyaWNfcmVzdW1lKGRldiwgUE1fRVZFTlRfUkVTVE9SRSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbV9nZW5lcmljX3Jlc3RvcmUpOworI2VuZGlmIC8qIENPTkZJR19QTV9TTEVFUCAqLworCitzdHJ1Y3QgZGV2X3BtX29wcyBnZW5lcmljX3N1YnN5c19wbV9vcHMgPSB7CisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCisJLnN1c3BlbmQgPSBwbV9nZW5lcmljX3N1c3BlbmQsCisJLnJlc3VtZSA9IHBtX2dlbmVyaWNfcmVzdW1lLAorCS5mcmVlemUgPSBwbV9nZW5lcmljX2ZyZWV6ZSwKKwkudGhhdyA9IHBtX2dlbmVyaWNfdGhhdywKKwkucG93ZXJvZmYgPSBwbV9nZW5lcmljX3Bvd2Vyb2ZmLAorCS5yZXN0b3JlID0gcG1fZ2VuZXJpY19yZXN0b3JlLAorI2VuZGlmCisjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKwkucnVudGltZV9zdXNwZW5kID0gcG1fZ2VuZXJpY19ydW50aW1lX3N1c3BlbmQsCisJLnJ1bnRpbWVfcmVzdW1lID0gcG1fZ2VuZXJpY19ydW50aW1lX3Jlc3VtZSwKKwkucnVudGltZV9pZGxlID0gcG1fZ2VuZXJpY19ydW50aW1lX2lkbGUsCisjZW5kaWYKK307CitFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX3N1YnN5c19wbV9vcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMgYi9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYwppbmRleCAyMTY4MWE4Li4zN2IwNTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYwpAQCAtMTM5LDYgKzEzOSw4IEBACiAgKgogICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYSBuZXcgc3RydWN0IGl1Y3ZfdHR5X2J1ZmZlciBlbGVtZW50IGFuZCwgb3B0aW9uYWxseSwKICAqIGFsbG9jYXRlcyBhbiBpbnRlcm5hbCBkYXRhIGJ1ZmZlciB3aXRoIHRoZSBzcGVjaWZpZWQgc2l6ZSBAc2l6ZS4KKyAqIFRoZSBpbnRlcm5hbCBkYXRhIGJ1ZmZlciBpcyBhbHdheXMgYWxsb2NhdGVkIHdpdGggR0ZQX0RNQSB3aGljaCBpcworICogcmVxdWlyZWQgZm9yIHJlY2VpdmluZyBhbmQgc2VuZGluZyBkYXRhIHdpdGggSVVDVi4KICAqIE5vdGU6IFRoZSB0b3RhbCBtZXNzYWdlIHNpemUgYXJpc2VzIGZyb20gdGhlIGludGVybmFsIGJ1ZmZlciBzaXplIGFuZCB0aGUKICAqCSBtZW1iZXJzIG9mIHRoZSBpdWN2X3R0eV9tc2cgc3RydWN0dXJlLgogICogVGhlIGZ1bmN0aW9uIHJldHVybnMgTlVMTCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBoYXMgZmFpbGVkLgpAQCAtMTU0LDcgKzE1Niw3IEBACiAKIAlpZiAoc2l6ZSA+IDApIHsKIAkJYnVmcC0+bXNnLmxlbmd0aCA9IE1TR19TSVpFKHNpemUpOwotCQlidWZwLT5tYnVmID0ga21hbGxvYyhidWZwLT5tc2cubGVuZ3RoLCBmbGFncyk7CisJCWJ1ZnAtPm1idWYgPSBrbWFsbG9jKGJ1ZnAtPm1zZy5sZW5ndGgsIGZsYWdzIHwgR0ZQX0RNQSk7CiAJCWlmICghYnVmcC0+bWJ1ZikgewogCQkJbWVtcG9vbF9mcmVlKGJ1ZnAsIGh2Y19pdWN2X21lbXBvb2wpOwogCQkJcmV0dXJuIE5VTEw7CkBAIC0yMzcsNyArMjM5LDcgQEAKIAlpZiAoIXJiLT5tYnVmKSB7IC8qIG1lc3NhZ2Ugbm90IHlldCByZWNlaXZlZCAuLi4gKi8KIAkJLyogYWxsb2NhdGUgbWVtIHRvIHN0b3JlIG1zZyBkYXRhOyBpZiBubyBtZW1vcnkgaXMgYXZhaWxhYmxlCiAJCSAqIHRoZW4gbGVhdmUgdGhlIGJ1ZmZlciBvbiB0aGUgbGlzdCBhbmQgcmUtdHJ5IGxhdGVyICovCi0JCXJiLT5tYnVmID0ga21hbGxvYyhyYi0+bXNnLmxlbmd0aCwgR0ZQX0FUT01JQyk7CisJCXJiLT5tYnVmID0ga21hbGxvYyhyYi0+bXNnLmxlbmd0aCwgR0ZQX0FUT01JQyB8IEdGUF9ETUEpOwogCQlpZiAoIXJiLT5tYnVmKQogCQkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jIGIvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKaW5kZXggMjEzMzczYi4uZjQwNGNjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKKysrIGIvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKQEAgLTM3OSw3ICszNzksNyBAQAogCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTsKIAlzdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29udHJvbCBjcGt0OwogCXN0cnVjdCB2aXJ0cXVldWUgKnZxOwotCWludCBsZW47CisJdW5zaWduZWQgaW50IGxlbjsKIAogCWlmICghdXNlX211bHRpcG9ydChwb3J0LT5wb3J0ZGV2KSkKIAkJcmV0dXJuIDA7CkBAIC0xMDcxLDI3ICsxMDcxLDI3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGZpbGxfcXVldWUoc3RydWN0IHZpcnRxdWV1ZSAqdnEsIHNwaW5sb2NrX3QgKmxvY2spCiB7CiAJc3RydWN0IHBvcnRfYnVmZmVyICpidWY7Ci0JdW5zaWduZWQgaW50IHJldDsKLQlpbnQgZXJyOworCXVuc2lnbmVkIGludCBucl9hZGRlZF9idWZzOworCWludCByZXQ7CiAKLQlyZXQgPSAwOworCW5yX2FkZGVkX2J1ZnMgPSAwOwogCWRvIHsKIAkJYnVmID0gYWxsb2NfYnVmKFBBR0VfU0laRSk7CiAJCWlmICghYnVmKQogCQkJYnJlYWs7CiAKIAkJc3Bpbl9sb2NrX2lycShsb2NrKTsKLQkJZXJyID0gYWRkX2luYnVmKHZxLCBidWYpOwotCQlpZiAoZXJyIDwgMCkgeworCQlyZXQgPSBhZGRfaW5idWYodnEsIGJ1Zik7CisJCWlmIChyZXQgPCAwKSB7CiAJCQlzcGluX3VubG9ja19pcnEobG9jayk7CiAJCQlmcmVlX2J1ZihidWYpOwogCQkJYnJlYWs7CiAJCX0KLQkJcmV0Kys7CisJCW5yX2FkZGVkX2J1ZnMrKzsKIAkJc3Bpbl91bmxvY2tfaXJxKGxvY2spOwotCX0gd2hpbGUgKGVyciA+IDApOworCX0gd2hpbGUgKHJldCA+IDApOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gbnJfYWRkZWRfYnVmczsKIH0KIAogc3RhdGljIGludCBhZGRfcG9ydChzdHJ1Y3QgcG9ydHNfZGV2aWNlICpwb3J0ZGV2LCB1MzIgaWQpCkBAIC0xMTAwLDYgKzExMDAsNyBAQAogCXN0cnVjdCBwb3J0ICpwb3J0OwogCXN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmOwogCWRldl90IGRldnQ7CisJdW5zaWduZWQgaW50IG5yX2FkZGVkX2J1ZnM7CiAJaW50IGVycjsKIAogCXBvcnQgPSBrbWFsbG9jKHNpemVvZigqcG9ydCksIEdGUF9LRVJORUwpOwpAQCAtMTE0NCw4ICsxMTQ1LDggQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT53YWl0cXVldWUpOwogCiAJLyogRmlsbCB0aGUgaW5fdnEgd2l0aCBidWZmZXJzIHNvIHRoZSBob3N0IGNhbiBzZW5kIHVzIGRhdGEuICovCi0JZXJyID0gZmlsbF9xdWV1ZShwb3J0LT5pbl92cSwgJnBvcnQtPmluYnVmX2xvY2spOwotCWlmICghZXJyKSB7CisJbnJfYWRkZWRfYnVmcyA9IGZpbGxfcXVldWUocG9ydC0+aW5fdnEsICZwb3J0LT5pbmJ1Zl9sb2NrKTsKKwlpZiAoIW5yX2FkZGVkX2J1ZnMpIHsKIAkJZGV2X2Vycihwb3J0LT5kZXYsICJFcnJvciBhbGxvY2F0aW5nIGluYnVmc1xuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZnJlZV9kZXZpY2U7CkBAIC0xNDQyLDEyICsxNDQzLDE0IEBACiAJSU5JVF9MSVNUX0hFQUQoJnBvcnRkZXYtPnBvcnRzKTsKIAogCWlmIChtdWx0aXBvcnQpIHsKKwkJdW5zaWduZWQgaW50IG5yX2FkZGVkX2J1ZnM7CisKIAkJc3Bpbl9sb2NrX2luaXQoJnBvcnRkZXYtPmN2cV9sb2NrKTsKIAkJSU5JVF9XT1JLKCZwb3J0ZGV2LT5jb250cm9sX3dvcmssICZjb250cm9sX3dvcmtfaGFuZGxlcik7CiAJCUlOSVRfV09SSygmcG9ydGRldi0+Y29uZmlnX3dvcmssICZjb25maWdfd29ya19oYW5kbGVyKTsKIAotCQllcnIgPSBmaWxsX3F1ZXVlKHBvcnRkZXYtPmNfaXZxLCAmcG9ydGRldi0+Y3ZxX2xvY2spOwotCQlpZiAoIWVycikgeworCQlucl9hZGRlZF9idWZzID0gZmlsbF9xdWV1ZShwb3J0ZGV2LT5jX2l2cSwgJnBvcnRkZXYtPmN2cV9sb2NrKTsKKwkJaWYgKCFucl9hZGRlZF9idWZzKSB7CiAJCQlkZXZfZXJyKCZ2ZGV2LT5kZXYsCiAJCQkJIkVycm9yIGFsbG9jYXRpbmcgYnVmZmVycyBmb3IgY29udHJvbCBxdWV1ZVxuIik7CiAJCQllcnIgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGY3MjZjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotY29uZmlnIENTNTUzNV9DTE9DS19FVkVOVF9TUkMKLQl0cmlzdGF0ZSAiQ1M1NTM1L0NTNTUzNiBoaWdoLXJlcyB0aW1lciAoTUZHUFQpIGV2ZW50cyIKLQlkZXBlbmRzIG9uIEdFTkVSSUNfVElNRSAmJiBHRU5FUklDX0NMT0NLRVZFTlRTICYmIENTNTUzNV9NRkdQVAotCWhlbHAKLQkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGEgY2xvY2sgZXZlbnQgc291cmNlIGJhc2VkIG9uIHRoZSBNRkdQVAotCSAgdGltZXIocykgaW4gdGhlIENTNTUzNSBhbmQgQ1M1NTM2IGNvbXBhbmlvbiBjaGlwcy4KLQkgIE1GR1BUcyBoYXZlIGEgYmV0dGVyIHJlc29sdXRpb24gYW5kIG1heCBpbnRlcnZhbCB0aGFuIHRoZQotCSAgZ2VuZXJpYyBQSVQsIGFuZCBhcmUgc3VpdGFibGUgZm9yIHVzZSBhcyBoaWdoLXJlcyB0aW1lcnMuCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9nb3Zlcm5vcnMvbWVudS5jIGIvZHJpdmVycy9jcHVpZGxlL2dvdmVybm9ycy9tZW51LmMKaW5kZXggNzM2NTVhZS4uMWFlYTcxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVpZGxlL2dvdmVybm9ycy9tZW51LmMKKysrIGIvZHJpdmVycy9jcHVpZGxlL2dvdmVybm9ycy9tZW51LmMKQEAgLTEwMCw4ICsxMDAsOCBAQAogCWludCAgICAgICAgICAgICBuZWVkc191cGRhdGU7CiAKIAl1bnNpZ25lZCBpbnQJZXhwZWN0ZWRfdXM7Ci0JdTY0CQlwcmVkaWN0ZWRfdXM7CiAJdW5zaWduZWQgaW50CW1lYXN1cmVkX3VzOworCXU2NAkJcHJlZGljdGVkX3VzOwogCXVuc2lnbmVkIGludAlleGl0X3VzOwogCXVuc2lnbmVkIGludAlidWNrZXQ7CiAJdTY0CQljb3JyZWN0aW9uX2ZhY3RvcltCVUNLRVRTXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lvYXQvZG1hLmMgYi9kcml2ZXJzL2RtYS9pb2F0L2RtYS5jCmluZGV4IDVkMGU0MmIuLmFmMTRjOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lvYXQvZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvaW9hdC9kbWEuYwpAQCAtNzEsNyArNzEsNyBAQAogCX0KIAogCWF0dG5zdGF0dXMgPSByZWFkbChpbnN0YW5jZS0+cmVnX2Jhc2UgKyBJT0FUX0FUVE5TVEFUVVNfT0ZGU0VUKTsKLQlmb3JfZWFjaF9iaXQoYml0LCAmYXR0bnN0YXR1cywgQklUU19QRVJfTE9ORykgeworCWZvcl9lYWNoX3NldF9iaXQoYml0LCAmYXR0bnN0YXR1cywgQklUU19QRVJfTE9ORykgewogCQljaGFuID0gaW9hdF9jaGFuX2J5X2luZGV4KGluc3RhbmNlLCBiaXQpOwogCQl0YXNrbGV0X3NjaGVkdWxlKCZjaGFuLT5jbGVhbnVwX3Rhc2spOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL3NoZG1hLmMgYi9kcml2ZXJzL2RtYS9zaGRtYS5jCmluZGV4IGI3NWNlOGIuLjVkMTdlMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3NoZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvc2hkbWEuYwpAQCAtMjQsOCArMjQsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8Y3B1L2RtYS5oPgotI2luY2x1ZGUgPGFzbS9kbWEtc2guaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisKKyNpbmNsdWRlIDxhc20vZG1hZW5naW5lLmg+CisKICNpbmNsdWRlICJzaGRtYS5oIgogCiAvKiBETUEgZGVzY3JpcHRvciBjb250cm9sICovCkBAIC0zOCwzMCArNDAsMzIgQEAKIH07CiAKICNkZWZpbmUgTlJfREVTQ1NfUEVSX0NIQU5ORUwgMzIKLS8qCi0gKiBEZWZpbmUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgZHVhbCBhZGRyZXNzIG1lbW9yeS1tZW1vcnkgdHJhbnNmZXIuCi0gKiBUaGUgMHg0MDAgdmFsdWUgcmVwcmVzZW50cyBhdXRvLXJlcXVlc3QsIGV4dGVybmFsLT5leHRlcm5hbC4KLSAqCi0gKiBBbmQgdGhpcyBkcml2ZXIgc2V0IDRieXRlIGJ1cnN0IG1vZGUuCi0gKiBJZiB5b3Ugd2FudCB0byBjaGFuZ2UgbW9kZSwgeW91IG5lZWQgdG8gY2hhbmdlIFJTX0RFRkFVTFQgb2YgdmFsdWUuCi0gKiAoZXggMWJ5dGUgYnVyc3QgbW9kZSAtPiAoUlNfRFVBTCAmIH5UU18zMikKLSAqLwotI2RlZmluZSBSU19ERUZBVUxUICAoUlNfRFVBTCkKKy8qIERlZmF1bHQgTUVNQ1BZIHRyYW5zZmVyIHNpemUgPSAyXjIgPSA0IGJ5dGVzICovCisjZGVmaW5lIExPRzJfREVGQVVMVF9YRkVSX1NJWkUJMgogCiAvKiBBIGJpdG1hc2sgd2l0aCBiaXRzIGVub3VnaCBmb3IgZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNoX2RtYWVfc2xhdmVfdXNlZFtCSVRTX1RPX0xPTkdTKFNIRE1BX1NMQVZFX05VTUJFUildOwogCiBzdGF0aWMgdm9pZCBzaF9kbWFlX2NoYW5fbGRfY2xlYW51cChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCBib29sIGFsbCk7CiAKLSNkZWZpbmUgU0hfRE1BQ19DSEFOX0JBU0UoaWQpIChkbWFfYmFzZV9hZGRyW2lkXSkKIHN0YXRpYyB2b2lkIHNoX2RtYWVfd3JpdGVsKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2RjLCB1MzIgZGF0YSwgdTMyIHJlZykKIHsKLQljdHJsX291dGwoZGF0YSwgU0hfRE1BQ19DSEFOX0JBU0Uoc2hfZGMtPmlkKSArIHJlZyk7CisJX19yYXdfd3JpdGVsKGRhdGEsIHNoX2RjLT5iYXNlICsgcmVnIC8gc2l6ZW9mKHUzMikpOwogfQogCiBzdGF0aWMgdTMyIHNoX2RtYWVfcmVhZGwoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfZGMsIHUzMiByZWcpCiB7Ci0JcmV0dXJuIGN0cmxfaW5sKFNIX0RNQUNfQ0hBTl9CQVNFKHNoX2RjLT5pZCkgKyByZWcpOworCXJldHVybiBfX3Jhd19yZWFkbChzaF9kYy0+YmFzZSArIHJlZyAvIHNpemVvZih1MzIpKTsKK30KKworc3RhdGljIHUxNiBkbWFvcl9yZWFkKHN0cnVjdCBzaF9kbWFlX2RldmljZSAqc2hkZXYpCit7CisJcmV0dXJuIF9fcmF3X3JlYWR3KHNoZGV2LT5jaGFuX3JlZyArIERNQU9SIC8gc2l6ZW9mKHUzMikpOworfQorCitzdGF0aWMgdm9pZCBkbWFvcl93cml0ZShzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UgKnNoZGV2LCB1MTYgZGF0YSkKK3sKKwlfX3Jhd193cml0ZXcoZGF0YSwgc2hkZXYtPmNoYW5fcmVnICsgRE1BT1IgLyBzaXplb2YodTMyKSk7CiB9CiAKIC8qCkBAIC02OSwyNCArNzMsMjMgQEAKICAqCiAgKiBTSDc3ODAgaGFzIHR3byBETUFPUiByZWdpc3RlcgogICovCi1zdGF0aWMgdm9pZCBzaF9kbWFlX2N0bF9zdG9wKGludCBpZCkKK3N0YXRpYyB2b2lkIHNoX2RtYWVfY3RsX3N0b3Aoc3RydWN0IHNoX2RtYWVfZGV2aWNlICpzaGRldikKIHsKLQl1bnNpZ25lZCBzaG9ydCBkbWFvciA9IGRtYW9yX3JlYWRfcmVnKGlkKTsKKwl1bnNpZ25lZCBzaG9ydCBkbWFvciA9IGRtYW9yX3JlYWQoc2hkZXYpOwogCi0JZG1hb3IgJj0gfihETUFPUl9OTUlGIHwgRE1BT1JfQUUpOwotCWRtYW9yX3dyaXRlX3JlZyhpZCwgZG1hb3IpOworCWRtYW9yX3dyaXRlKHNoZGV2LCBkbWFvciAmIH4oRE1BT1JfTk1JRiB8IERNQU9SX0FFIHwgRE1BT1JfRE1FKSk7CiB9CiAKLXN0YXRpYyBpbnQgc2hfZG1hZV9yc3QoaW50IGlkKQorc3RhdGljIGludCBzaF9kbWFlX3JzdChzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UgKnNoZGV2KQogewogCXVuc2lnbmVkIHNob3J0IGRtYW9yOwogCi0Jc2hfZG1hZV9jdGxfc3RvcChpZCk7Ci0JZG1hb3IgPSBkbWFvcl9yZWFkX3JlZyhpZCkgfCBETUFPUl9JTklUOworCXNoX2RtYWVfY3RsX3N0b3Aoc2hkZXYpOworCWRtYW9yID0gZG1hb3JfcmVhZChzaGRldikgfCBzaGRldi0+cGRhdGEtPmRtYW9yX2luaXQ7CiAKLQlkbWFvcl93cml0ZV9yZWcoaWQsIGRtYW9yKTsKLQlpZiAoZG1hb3JfcmVhZF9yZWcoaWQpICYgKERNQU9SX0FFIHwgRE1BT1JfTk1JRikpIHsKLQkJcHJfd2FybmluZyhLRVJOX0VSUiAiZG1hLXNoOiBDYW4ndCBpbml0aWFsaXplIERNQU9SLlxuIik7CisJZG1hb3Jfd3JpdGUoc2hkZXYsIGRtYW9yKTsKKwlpZiAoZG1hb3JfcmVhZChzaGRldikgJiAoRE1BT1JfQUUgfCBETUFPUl9OTUlGKSkgeworCQlwcl93YXJuaW5nKCJkbWEtc2g6IENhbid0IGluaXRpYWxpemUgRE1BT1IuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwpAQCAtMTAyLDEzICsxMDUsMzYgQEAKIAlyZXR1cm4gZmFsc2U7IC8qIHdhaXRpbmcgKi8KIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCB0c19zaGlmdFtdID0gVFNfU0hJRlQ7Ci1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjYWxjX3htaXRfc2hpZnQodTMyIGNoY3IpCitzdGF0aWMgdW5zaWduZWQgaW50IGNhbGNfeG1pdF9zaGlmdChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCB1MzIgY2hjcikKIHsKLQlpbnQgY250ID0gKChjaGNyICYgQ0hDUl9UU19MT1dfTUFTSykgPj4gQ0hDUl9UU19MT1dfU0hJRlQpIHwKLQkJKChjaGNyICYgQ0hDUl9UU19ISUdIX01BU0spID4+IENIQ1JfVFNfSElHSF9TSElGVCk7CisJc3RydWN0IHNoX2RtYWVfZGV2aWNlICpzaGRldiA9IGNvbnRhaW5lcl9vZihzaF9jaGFuLT5jb21tb24uZGV2aWNlLAorCQkJCQkJc3RydWN0IHNoX2RtYWVfZGV2aWNlLCBjb21tb24pOworCXN0cnVjdCBzaF9kbWFlX3BkYXRhICpwZGF0YSA9IHNoZGV2LT5wZGF0YTsKKwlpbnQgY250ID0gKChjaGNyICYgcGRhdGEtPnRzX2xvd19tYXNrKSA+PiBwZGF0YS0+dHNfbG93X3NoaWZ0KSB8CisJCSgoY2hjciAmIHBkYXRhLT50c19oaWdoX21hc2spID4+IHBkYXRhLT50c19oaWdoX3NoaWZ0KTsKIAotCXJldHVybiB0c19zaGlmdFtjbnRdOworCWlmIChjbnQgPj0gcGRhdGEtPnRzX3NoaWZ0X251bSkKKwkJY250ID0gMDsKKworCXJldHVybiBwZGF0YS0+dHNfc2hpZnRbY250XTsKK30KKworc3RhdGljIHUzMiBsb2cyc2l6ZV90b19jaGNyKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4sIGludCBsMnNpemUpCit7CisJc3RydWN0IHNoX2RtYWVfZGV2aWNlICpzaGRldiA9IGNvbnRhaW5lcl9vZihzaF9jaGFuLT5jb21tb24uZGV2aWNlLAorCQkJCQkJc3RydWN0IHNoX2RtYWVfZGV2aWNlLCBjb21tb24pOworCXN0cnVjdCBzaF9kbWFlX3BkYXRhICpwZGF0YSA9IHNoZGV2LT5wZGF0YTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+dHNfc2hpZnRfbnVtOyBpKyspCisJCWlmIChwZGF0YS0+dHNfc2hpZnRbaV0gPT0gbDJzaXplKQorCQkJYnJlYWs7CisKKwlpZiAoaSA9PSBwZGF0YS0+dHNfc2hpZnRfbnVtKQorCQlpID0gMDsKKworCXJldHVybiAoKGkgPDwgcGRhdGEtPnRzX2xvd19zaGlmdCkgJiBwZGF0YS0+dHNfbG93X21hc2spIHwKKwkJKChpIDw8IHBkYXRhLT50c19oaWdoX3NoaWZ0KSAmIHBkYXRhLT50c19oaWdoX21hc2spOwogfQogCiBzdGF0aWMgdm9pZCBkbWFlX3NldF9yZWcoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwgc3RydWN0IHNoX2RtYWVfcmVncyAqaHcpCkBAIC0xMzYsOCArMTYyLDEzIEBACiAKIHN0YXRpYyB2b2lkIGRtYWVfaW5pdChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuKQogewotCXUzMiBjaGNyID0gUlNfREVGQVVMVDsgLyogZGVmYXVsdCBpcyBEVUFMIG1vZGUgKi8KLQlzaF9jaGFuLT54bWl0X3NoaWZ0ID0gY2FsY194bWl0X3NoaWZ0KGNoY3IpOworCS8qCisJICogRGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBkdWFsIGFkZHJlc3MgbWVtb3J5LW1lbW9yeSB0cmFuc2Zlci4KKwkgKiAweDQwMCByZXByZXNlbnRzIGF1dG8tcmVxdWVzdC4KKwkgKi8KKwl1MzIgY2hjciA9IERNX0lOQyB8IFNNX0lOQyB8IDB4NDAwIHwgbG9nMnNpemVfdG9fY2hjcihzaF9jaGFuLAorCQkJCQkJICAgTE9HMl9ERUZBVUxUX1hGRVJfU0laRSk7CisJc2hfY2hhbi0+eG1pdF9zaGlmdCA9IGNhbGNfeG1pdF9zaGlmdChzaF9jaGFuLCBjaGNyKTsKIAlzaF9kbWFlX3dyaXRlbChzaF9jaGFuLCBjaGNyLCBDSENSKTsKIH0KIApAQCAtMTQ3LDM3ICsxNzgsMjYgQEAKIAlpZiAoZG1hZV9pc19idXN5KHNoX2NoYW4pKQogCQlyZXR1cm4gLUVCVVNZOwogCi0Jc2hfY2hhbi0+eG1pdF9zaGlmdCA9IGNhbGNfeG1pdF9zaGlmdCh2YWwpOworCXNoX2NoYW4tPnhtaXRfc2hpZnQgPSBjYWxjX3htaXRfc2hpZnQoc2hfY2hhbiwgdmFsKTsKIAlzaF9kbWFlX3dyaXRlbChzaF9jaGFuLCB2YWwsIENIQ1IpOwogCiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgRE1BUlNfU0hJRlQJOAotI2RlZmluZSBETUFSU19DSEFOX01TSwkweDAxCiBzdGF0aWMgaW50IGRtYWVfc2V0X2RtYXJzKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4sIHUxNiB2YWwpCiB7Ci0JdTMyIGFkZHI7Ci0JaW50IHNoaWZ0ID0gMDsKKwlzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UgKnNoZGV2ID0gY29udGFpbmVyX29mKHNoX2NoYW4tPmNvbW1vbi5kZXZpY2UsCisJCQkJCQlzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UsIGNvbW1vbik7CisJc3RydWN0IHNoX2RtYWVfcGRhdGEgKnBkYXRhID0gc2hkZXYtPnBkYXRhOworCXN0cnVjdCBzaF9kbWFlX2NoYW5uZWwgKmNoYW5fcGRhdGEgPSAmcGRhdGEtPmNoYW5uZWxbc2hfY2hhbi0+aWRdOworCXUxNiBfX2lvbWVtICphZGRyID0gc2hkZXYtPmRtYXJzICsgY2hhbl9wZGF0YS0+ZG1hcnMgLyBzaXplb2YodTE2KTsKKwlpbnQgc2hpZnQgPSBjaGFuX3BkYXRhLT5kbWFyc19iaXQ7CiAKIAlpZiAoZG1hZV9pc19idXN5KHNoX2NoYW4pKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JaWYgKHNoX2NoYW4tPmlkICYgRE1BUlNfQ0hBTl9NU0spCi0JCXNoaWZ0ID0gRE1BUlNfU0hJRlQ7Ci0KLQlpZiAoc2hfY2hhbi0+aWQgPCA2KQotCQkvKiBETUEwUlMwIC0gRE1BMFJTMiAqLwotCQlhZGRyID0gU0hfRE1BUlNfQkFTRTAgKyAoc2hfY2hhbi0+aWQgLyAyKSAqIDQ7Ci0jaWZkZWYgU0hfRE1BUlNfQkFTRTEKLQllbHNlIGlmIChzaF9jaGFuLT5pZCA8IDEyKQotCQkvKiBETUExUlMwIC0gRE1BMVJTMiAqLwotCQlhZGRyID0gU0hfRE1BUlNfQkFTRTEgKyAoKHNoX2NoYW4tPmlkIC0gNikgLyAyKSAqIDQ7Ci0jZW5kaWYKLQllbHNlCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY3RybF9vdXR3KCh2YWwgPDwgc2hpZnQpIHwgKGN0cmxfaW53KGFkZHIpICYgKDB4RkYwMCA+PiBzaGlmdCkpLCBhZGRyKTsKKwlfX3Jhd193cml0ZXcoKF9fcmF3X3JlYWR3KGFkZHIpICYgKDB4ZmYwMCA+PiBzaGlmdCkpIHwgKHZhbCA8PCBzaGlmdCksCisJCSAgICAgYWRkcik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI1MSwxNSArMjcxLDE1IEBACiAJc3RydWN0IGRtYV9kZXZpY2UgKmRtYV9kZXYgPSBzaF9jaGFuLT5jb21tb24uZGV2aWNlOwogCXN0cnVjdCBzaF9kbWFlX2RldmljZSAqc2hkZXYgPSBjb250YWluZXJfb2YoZG1hX2RldiwKIAkJCQkJc3RydWN0IHNoX2RtYWVfZGV2aWNlLCBjb21tb24pOwotCXN0cnVjdCBzaF9kbWFlX3BkYXRhICpwZGF0YSA9ICZzaGRldi0+cGRhdGE7CisJc3RydWN0IHNoX2RtYWVfcGRhdGEgKnBkYXRhID0gc2hkZXYtPnBkYXRhOwogCWludCBpOwogCiAJaWYgKCh1bnNpZ25lZClzbGF2ZV9pZCA+PSBTSERNQV9TTEFWRV9OVU1CRVIpCiAJCXJldHVybiBOVUxMOwogCi0JZm9yIChpID0gMDsgaSA8IHBkYXRhLT5jb25maWdfbnVtOyBpKyspCi0JCWlmIChwZGF0YS0+Y29uZmlnW2ldLnNsYXZlX2lkID09IHNsYXZlX2lkKQotCQkJcmV0dXJuIHBkYXRhLT5jb25maWcgKyBpOworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+c2xhdmVfbnVtOyBpKyspCisJCWlmIChwZGF0YS0+c2xhdmVbaV0uc2xhdmVfaWQgPT0gc2xhdmVfaWQpCisJCQlyZXR1cm4gcGRhdGEtPnNsYXZlICsgaTsKIAogCXJldHVybiBOVUxMOwogfQpAQCAtMjcwLDYgKzI5MCw4IEBACiAJc3RydWN0IHNoX2Rlc2MgKmRlc2M7CiAJc3RydWN0IHNoX2RtYWVfc2xhdmUgKnBhcmFtID0gY2hhbi0+cHJpdmF0ZTsKIAorCXBtX3J1bnRpbWVfZ2V0X3N5bmMoc2hfY2hhbi0+ZGV2KTsKKwogCS8qCiAJICogVGhpcyByZWxpZXMgb24gdGhlIGd1YXJhbnRlZSBmcm9tIGRtYWVuZ2luZSB0aGF0IGFsbG9jX2NoYW5fcmVzb3VyY2VzCiAJICogbmV2ZXIgcnVucyBjb25jdXJyZW50bHkgd2l0aCBpdHNlbGYgb3IgZnJlZV9jaGFuX3Jlc291cmNlcy4KQEAgLTI4OCw5ICszMTAsOCBAQAogCiAJCWRtYWVfc2V0X2RtYXJzKHNoX2NoYW4sIGNmZy0+bWlkX3JpZCk7CiAJCWRtYWVfc2V0X2NoY3Ioc2hfY2hhbiwgY2ZnLT5jaGNyKTsKLQl9IGVsc2UgewotCQlpZiAoKHNoX2RtYWVfcmVhZGwoc2hfY2hhbiwgQ0hDUikgJiAweDcwMCkgIT0gMHg0MDApCi0JCQlkbWFlX3NldF9jaGNyKHNoX2NoYW4sIFJTX0RFRkFVTFQpOworCX0gZWxzZSBpZiAoKHNoX2RtYWVfcmVhZGwoc2hfY2hhbiwgQ0hDUikgJiAweGYwMCkgIT0gMHg0MDApIHsKKwkJZG1hZV9pbml0KHNoX2NoYW4pOwogCX0KIAogCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKQEAgLTMxMiw2ICszMzMsOSBAQAogCX0KIAlzcGluX3VubG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKIAorCWlmICghc2hfY2hhbi0+ZGVzY3NfYWxsb2NhdGVkKQorCQlwbV9ydW50aW1lX3B1dChzaF9jaGFuLT5kZXYpOworCiAJcmV0dXJuIHNoX2NoYW4tPmRlc2NzX2FsbG9jYXRlZDsKIH0KIApAQCAtMzIzLDYgKzM0Nyw3IEBACiAJc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiA9IHRvX3NoX2NoYW4oY2hhbik7CiAJc3RydWN0IHNoX2Rlc2MgKmRlc2MsICpfZGVzYzsKIAlMSVNUX0hFQUQobGlzdCk7CisJaW50IGRlc2NzID0gc2hfY2hhbi0+ZGVzY3NfYWxsb2NhdGVkOwogCiAJZG1hZV9oYWx0KHNoX2NoYW4pOwogCkBAIC0zNDMsNiArMzY4LDkgQEAKIAogCXNwaW5fdW5sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOwogCisJaWYgKGRlc2NzID4gMCkKKwkJcG1fcnVudGltZV9wdXQoc2hfY2hhbi0+ZGV2KTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXNjLCBfZGVzYywgJmxpc3QsIG5vZGUpCiAJCWtmcmVlKGRlc2MpOwogfQpAQCAtNTU5LDYgKzU4NywxOSBAQAogCWlmICghY2hhbikKIAkJcmV0dXJuOwogCisJZG1hZV9oYWx0KHNoX2NoYW4pOworCisJc3Bpbl9sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOworCWlmICghbGlzdF9lbXB0eSgmc2hfY2hhbi0+bGRfcXVldWUpKSB7CisJCS8qIFJlY29yZCBwYXJ0aWFsIHRyYW5zZmVyICovCisJCXN0cnVjdCBzaF9kZXNjICpkZXNjID0gbGlzdF9lbnRyeShzaF9jaGFuLT5sZF9xdWV1ZS5uZXh0LAorCQkJCQkJICBzdHJ1Y3Qgc2hfZGVzYywgbm9kZSk7CisJCWRlc2MtPnBhcnRpYWwgPSAoZGVzYy0+aHcudGNyIC0gc2hfZG1hZV9yZWFkbChzaF9jaGFuLCBUQ1IpKSA8PAorCQkJc2hfY2hhbi0+eG1pdF9zaGlmdDsKKworCX0KKwlzcGluX3VubG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKKwogCXNoX2RtYWVfY2hhbl9sZF9jbGVhbnVwKHNoX2NoYW4sIHRydWUpOwogfQogCkBAIC02NjEsNyArNzAyLDcgQEAKIAogc3RhdGljIHZvaWQgc2hfY2hhbl94ZmVyX2xkX3F1ZXVlKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4pCiB7Ci0Jc3RydWN0IHNoX2Rlc2MgKnNkOworCXN0cnVjdCBzaF9kZXNjICpkZXNjOwogCiAJc3Bpbl9sb2NrX2JoKCZzaF9jaGFuLT5kZXNjX2xvY2spOwogCS8qIERNQSB3b3JrIGNoZWNrICovCkBAIC02NzEsMTAgKzcxMiwxMyBAQAogCX0KIAogCS8qIEZpbmQgdGhlIGZpcnN0IG5vdCB0cmFuc2ZlcnJlZCBkZXNjaXB0b3IgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkLCAmc2hfY2hhbi0+bGRfcXVldWUsIG5vZGUpCi0JCWlmIChzZC0+bWFyayA9PSBERVNDX1NVQk1JVFRFRCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGVzYywgJnNoX2NoYW4tPmxkX3F1ZXVlLCBub2RlKQorCQlpZiAoZGVzYy0+bWFyayA9PSBERVNDX1NVQk1JVFRFRCkgeworCQkJZGV2X2RiZyhzaF9jaGFuLT5kZXYsICJRdWV1ZSAjJWQgdG8gJWQ6ICV1QCV4IC0+ICV4XG4iLAorCQkJCWRlc2MtPmFzeW5jX3R4LmNvb2tpZSwgc2hfY2hhbi0+aWQsCisJCQkJZGVzYy0+aHcudGNyLCBkZXNjLT5ody5zYXIsIGRlc2MtPmh3LmRhcik7CiAJCQkvKiBHZXQgdGhlIGxkIHN0YXJ0IGFkZHJlc3MgZnJvbSBsZF9xdWV1ZSAqLwotCQkJZG1hZV9zZXRfcmVnKHNoX2NoYW4sICZzZC0+aHcpOworCQkJZG1hZV9zZXRfcmVnKHNoX2NoYW4sICZkZXNjLT5odyk7CiAJCQlkbWFlX3N0YXJ0KHNoX2NoYW4pOwogCQkJYnJlYWs7CiAJCX0KQEAgLTY5Niw2ICs3NDAsNyBAQAogCXN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4gPSB0b19zaF9jaGFuKGNoYW4pOwogCWRtYV9jb29raWVfdCBsYXN0X3VzZWQ7CiAJZG1hX2Nvb2tpZV90IGxhc3RfY29tcGxldGU7CisJZW51bSBkbWFfc3RhdHVzIHN0YXR1czsKIAogCXNoX2RtYWVfY2hhbl9sZF9jbGVhbnVwKHNoX2NoYW4sIGZhbHNlKTsKIApAQCAtNzA5LDcgKzc1NCwyNyBAQAogCWlmICh1c2VkKQogCQkqdXNlZCA9IGxhc3RfdXNlZDsKIAotCXJldHVybiBkbWFfYXN5bmNfaXNfY29tcGxldGUoY29va2llLCBsYXN0X2NvbXBsZXRlLCBsYXN0X3VzZWQpOworCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKKworCXN0YXR1cyA9IGRtYV9hc3luY19pc19jb21wbGV0ZShjb29raWUsIGxhc3RfY29tcGxldGUsIGxhc3RfdXNlZCk7CisKKwkvKgorCSAqIElmIHdlIGRvbid0IGZpbmQgY29va2llIG9uIHRoZSBxdWV1ZSwgaXQgaGFzIGJlZW4gYWJvcnRlZCBhbmQgd2UgaGF2ZQorCSAqIHRvIHJlcG9ydCBlcnJvcgorCSAqLworCWlmIChzdGF0dXMgIT0gRE1BX1NVQ0NFU1MpIHsKKwkJc3RydWN0IHNoX2Rlc2MgKmRlc2M7CisJCXN0YXR1cyA9IERNQV9FUlJPUjsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXNjLCAmc2hfY2hhbi0+bGRfcXVldWUsIG5vZGUpCisJCQlpZiAoZGVzYy0+Y29va2llID09IGNvb2tpZSkgeworCQkJCXN0YXR1cyA9IERNQV9JTl9QUk9HUkVTUzsKKwkJCQlicmVhazsKKwkJCX0KKwl9CisKKwlzcGluX3VubG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKKworCXJldHVybiBzdGF0dXM7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzaF9kbWFlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhKQpAQCAtNzMyLDQwICs3OTcsMzIgQEAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0KQogc3RhdGljIGlycXJldHVybl90IHNoX2RtYWVfZXJyKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7Ci0JaW50IGVyciA9IDA7CiAJc3RydWN0IHNoX2RtYWVfZGV2aWNlICpzaGRldiA9IChzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UgKilkYXRhOworCWludCBpOwogCi0JLyogSVJRIE11bHRpICovCi0JaWYgKHNoZGV2LT5wZGF0YS5tb2RlICYgU0hETUFfTUlYX0lSUSkgewotCQlpbnQgX19tYXliZV91bnVzZWQgY250ID0gMDsKLQkJc3dpdGNoIChpcnEpIHsKLSNpZiBkZWZpbmVkKERNVEU2X0lSUSkgJiYgZGVmaW5lZChETUFFMV9JUlEpCi0JCWNhc2UgRE1URTZfSVJROgotCQkJY250Kys7Ci0jZW5kaWYKLQkJY2FzZSBETVRFMF9JUlE6Ci0JCQlpZiAoZG1hb3JfcmVhZF9yZWcoY250KSAmIChETUFPUl9OTUlGIHwgRE1BT1JfQUUpKSB7Ci0JCQkJZGlzYWJsZV9pcnEoaXJxKTsKLQkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJLyogaGFsdCB0aGUgZG1hIGNvbnRyb2xsZXIgKi8KKwlzaF9kbWFlX2N0bF9zdG9wKHNoZGV2KTsKKworCS8qIFdlIGNhbm5vdCBkZXRlY3QsIHdoaWNoIGNoYW5uZWwgY2F1c2VkIHRoZSBlcnJvciwgaGF2ZSB0byByZXNldCBhbGwgKi8KKwlmb3IgKGkgPSAwOyBpIDwgU0hfRE1BQ19NQVhfQ0hBTk5FTFM7IGkrKykgeworCQlzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuID0gc2hkZXYtPmNoYW5baV07CisJCWlmIChzaF9jaGFuKSB7CisJCQlzdHJ1Y3Qgc2hfZGVzYyAqZGVzYzsKKwkJCS8qIFN0b3AgdGhlIGNoYW5uZWwgKi8KKwkJCWRtYWVfaGFsdChzaF9jaGFuKTsKKwkJCS8qIENvbXBsZXRlIGFsbCAgKi8KKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZGVzYywgJnNoX2NoYW4tPmxkX3F1ZXVlLCBub2RlKSB7CisJCQkJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eCA9ICZkZXNjLT5hc3luY190eDsKKwkJCQlkZXNjLT5tYXJrID0gREVTQ19JRExFOworCQkJCWlmICh0eC0+Y2FsbGJhY2spCisJCQkJCXR4LT5jYWxsYmFjayh0eC0+Y2FsbGJhY2tfcGFyYW0pOwogCQkJfQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIElSUV9OT05FOworCQkJbGlzdF9zcGxpY2VfaW5pdCgmc2hfY2hhbi0+bGRfcXVldWUsICZzaF9jaGFuLT5sZF9mcmVlKTsKIAkJfQotCX0gZWxzZSB7Ci0JCS8qIHJlc2V0IGRtYSBjb250cm9sbGVyICovCi0JCWVyciA9IHNoX2RtYWVfcnN0KDApOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLSNpZmRlZiBTSF9ETUFDX0JBU0UxCi0JCWlmIChzaGRldi0+cGRhdGEubW9kZSAmIFNIRE1BX0RNQU9SMSkgewotCQkJZXJyID0gc2hfZG1hZV9yc3QoMSk7Ci0JCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7Ci0JCX0KLSNlbmRpZgotCQlkaXNhYmxlX2lycShpcnEpOwotCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQorCXNoX2RtYWVfcnN0KHNoZGV2KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKIH0KICNlbmRpZgogCkBAIC03OTYsMTkgKzg1MywxMiBAQAogCXNoX2RtYWVfY2hhbl9sZF9jbGVhbnVwKHNoX2NoYW4sIGZhbHNlKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBnZXRfZG1hZV9pcnEodW5zaWduZWQgaW50IGlkKQotewotCXVuc2lnbmVkIGludCBpcnEgPSAwOwotCWlmIChpZCA8IEFSUkFZX1NJWkUoZG10ZV9pcnFfbWFwKSkKLQkJaXJxID0gZG10ZV9pcnFfbWFwW2lkXTsKLQlyZXR1cm4gaXJxOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzaF9kbWFlX2NoYW5fcHJvYmUoc3RydWN0IHNoX2RtYWVfZGV2aWNlICpzaGRldiwgaW50IGlkKQorc3RhdGljIGludCBfX2RldmluaXQgc2hfZG1hZV9jaGFuX3Byb2JlKHN0cnVjdCBzaF9kbWFlX2RldmljZSAqc2hkZXYsIGludCBpZCwKKwkJCQkJaW50IGlycSwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlpbnQgZXJyOwotCXVuc2lnbmVkIGludCBpcnEgPSBnZXRfZG1hZV9pcnEoaWQpOwotCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3MgPSBJUlFGX0RJU0FCTEVEOworCXN0cnVjdCBzaF9kbWFlX2NoYW5uZWwgKmNoYW5fcGRhdGEgPSAmc2hkZXYtPnBkYXRhLT5jaGFubmVsW2lkXTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKHNoZGV2LT5jb21tb24uZGV2KTsKIAlzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpuZXdfc2hfY2hhbjsKIAogCS8qIGFsbG9jIGNoYW5uZWwgKi8KQEAgLTgxOSw4ICs4NjksMTMgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJLyogY29weSBzdHJ1Y3QgZG1hX2RldmljZSAqLworCW5ld19zaF9jaGFuLT5jb21tb24uZGV2aWNlID0gJnNoZGV2LT5jb21tb247CisKIAluZXdfc2hfY2hhbi0+ZGV2ID0gc2hkZXYtPmNvbW1vbi5kZXY7CiAJbmV3X3NoX2NoYW4tPmlkID0gaWQ7CisJbmV3X3NoX2NoYW4tPmlycSA9IGlycTsKKwluZXdfc2hfY2hhbi0+YmFzZSA9IHNoZGV2LT5jaGFuX3JlZyArIGNoYW5fcGRhdGEtPm9mZnNldCAvIHNpemVvZih1MzIpOwogCiAJLyogSW5pdCBETUEgdGFza2xldCAqLwogCXRhc2tsZXRfaW5pdCgmbmV3X3NoX2NoYW4tPnRhc2tsZXQsIGRtYWVfZG9fdGFza2xldCwKQEAgLTgzNSwyOSArODkwLDIwIEBACiAJSU5JVF9MSVNUX0hFQUQoJm5ld19zaF9jaGFuLT5sZF9xdWV1ZSk7CiAJSU5JVF9MSVNUX0hFQUQoJm5ld19zaF9jaGFuLT5sZF9mcmVlKTsKIAotCS8qIGNvcHkgc3RydWN0IGRtYV9kZXZpY2UgKi8KLQluZXdfc2hfY2hhbi0+Y29tbW9uLmRldmljZSA9ICZzaGRldi0+Y29tbW9uOwotCiAJLyogQWRkIHRoZSBjaGFubmVsIHRvIERNQSBkZXZpY2UgY2hhbm5lbCBsaXN0ICovCiAJbGlzdF9hZGRfdGFpbCgmbmV3X3NoX2NoYW4tPmNvbW1vbi5kZXZpY2Vfbm9kZSwKIAkJCSZzaGRldi0+Y29tbW9uLmNoYW5uZWxzKTsKIAlzaGRldi0+Y29tbW9uLmNoYW5jbnQrKzsKIAotCWlmIChzaGRldi0+cGRhdGEubW9kZSAmIFNIRE1BX01JWF9JUlEpIHsKLQkJaXJxZmxhZ3MgPSBJUlFGX1NIQVJFRDsKLSNpZiBkZWZpbmVkKERNVEU2X0lSUSkKLQkJaWYgKGlycSA+PSBETVRFNl9JUlEpCi0JCQlpcnEgPSBETVRFNl9JUlE7Ci0JCWVsc2UKLSNlbmRpZgotCQkJaXJxID0gRE1URTBfSVJROwotCX0KLQotCXNucHJpbnRmKG5ld19zaF9jaGFuLT5kZXZfaWQsIHNpemVvZihuZXdfc2hfY2hhbi0+ZGV2X2lkKSwKLQkJICJzaC1kbWFlJWQiLCBuZXdfc2hfY2hhbi0+aWQpOworCWlmIChwZGV2LT5pZCA+PSAwKQorCQlzbnByaW50ZihuZXdfc2hfY2hhbi0+ZGV2X2lkLCBzaXplb2YobmV3X3NoX2NoYW4tPmRldl9pZCksCisJCQkgInNoLWRtYWUlZC4lZCIsIHBkZXYtPmlkLCBuZXdfc2hfY2hhbi0+aWQpOworCWVsc2UKKwkJc25wcmludGYobmV3X3NoX2NoYW4tPmRldl9pZCwgc2l6ZW9mKG5ld19zaF9jaGFuLT5kZXZfaWQpLAorCQkJICJzaC1kbWElZCIsIG5ld19zaF9jaGFuLT5pZCk7CiAKIAkvKiBzZXQgdXAgY2hhbm5lbCBpcnEgKi8KLQllcnIgPSByZXF1ZXN0X2lycShpcnEsICZzaF9kbWFlX2ludGVycnVwdCwgaXJxZmxhZ3MsCisJZXJyID0gcmVxdWVzdF9pcnEoaXJxLCAmc2hfZG1hZV9pbnRlcnJ1cHQsIGZsYWdzLAogCQkJICBuZXdfc2hfY2hhbi0+ZGV2X2lkLCBuZXdfc2hfY2hhbik7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKHNoZGV2LT5jb21tb24uZGV2LCAiRE1BIGNoYW5uZWwgJWQgcmVxdWVzdF9pcnEgZXJyb3IgIgpAQCAtODgxLDEyICs5MjcsMTIgQEAKIAogCWZvciAoaSA9IHNoZGV2LT5jb21tb24uY2hhbmNudCAtIDEgOyBpID49IDAgOyBpLS0pIHsKIAkJaWYgKHNoZGV2LT5jaGFuW2ldKSB7Ci0JCQlzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaGNoYW4gPSBzaGRldi0+Y2hhbltpXTsKLQkJCWlmICghKHNoZGV2LT5wZGF0YS5tb2RlICYgU0hETUFfTUlYX0lSUSkpCi0JCQkJZnJlZV9pcnEoZG10ZV9pcnFfbWFwW2ldLCBzaGNoYW4pOworCQkJc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiA9IHNoZGV2LT5jaGFuW2ldOwogCi0JCQlsaXN0X2RlbCgmc2hjaGFuLT5jb21tb24uZGV2aWNlX25vZGUpOwotCQkJa2ZyZWUoc2hjaGFuKTsKKwkJCWZyZWVfaXJxKHNoX2NoYW4tPmlycSwgc2hfY2hhbik7CisKKwkJCWxpc3RfZGVsKCZzaF9jaGFuLT5jb21tb24uZGV2aWNlX25vZGUpOworCQkJa2ZyZWUoc2hfY2hhbik7CiAJCQlzaGRldi0+Y2hhbltpXSA9IE5VTEw7CiAJCX0KIAl9CkBAIC04OTUsNDcgKzk0MSw4NCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzaF9kbWFlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JaW50IGVyciA9IDAsIGNudCwgZWNudDsKLQl1bnNpZ25lZCBsb25nIGlycWZsYWdzID0gSVJRRl9ESVNBQkxFRDsKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0KQotCWludCBlaXJxW10gPSB7IERNQUUwX0lSUSwKLSNpZiBkZWZpbmVkKERNQUUxX0lSUSkKLQkJCURNQUUxX0lSUQotI2VuZGlmCi0JCX07Ci0jZW5kaWYKKwlzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzID0gSVJRRl9ESVNBQkxFRCwKKwkJY2hhbl9mbGFnW1NIX0RNQUNfTUFYX0NIQU5ORUxTXSA9IHt9OworCWludCBlcnJpcnEsIGNoYW5faXJxW1NIX0RNQUNfTUFYX0NIQU5ORUxTXTsKKwlpbnQgZXJyLCBpLCBpcnFfY250ID0gMCwgaXJxcmVzID0gMDsKIAlzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UgKnNoZGV2OworCXN0cnVjdCByZXNvdXJjZSAqY2hhbiwgKmRtYXJzLCAqZXJyaXJxX3JlcywgKmNoYW5pcnFfcmVzOwogCiAJLyogZ2V0IHBsYXRmb3JtIGRhdGEgKi8KLQlpZiAoIXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKQorCWlmICghcGRhdGEgfHwgIXBkYXRhLT5jaGFubmVsX251bSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwljaGFuID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwkvKiBETUFSUyBhcmVhIGlzIG9wdGlvbmFsLCBpZiBhYnNlbnQsIHRoaXMgY29udHJvbGxlciBjYW5ub3QgZG8gc2xhdmUgRE1BICovCisJZG1hcnMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCS8qCisJICogSVJRIHJlc291cmNlczoKKwkgKiAxLiB0aGVyZSBhbHdheXMgbXVzdCBiZSBhdCBsZWFzdCBvbmUgSVJRIElPLXJlc291cmNlLiBPbiBTSDQgaXQgaXMKKwkgKiAgICB0aGUgZXJyb3IgSVJRLCBpbiB3aGljaCBjYXNlIGl0IGlzIHRoZSBvbmx5IElSUSBpbiB0aGlzIHJlc291cmNlOgorCSAqICAgIHN0YXJ0ID09IGVuZC4gSWYgaXQgaXMgdGhlIG9ubHkgSVJRIHJlc291cmNlLCBhbGwgY2hhbm5lbHMgYWxzbworCSAqICAgIHVzZSB0aGUgc2FtZSBJUlEuCisJICogMi4gRE1BIGNoYW5uZWwgSVJRIHJlc291cmNlcyBjYW4gYmUgc3BlY2lmaWVkIG9uZSBwZXIgcmVzb3VyY2Ugb3IgaW4KKwkgKiAgICByYW5nZXMgKHN0YXJ0ICE9IGVuZCkKKwkgKiAzLiBpZmYgYWxsIGV2ZW50cyAoY2hhbm5lbHMgYW5kLCBvcHRpb25hbGx5LCBlcnJvcikgb24gdGhpcworCSAqICAgIGNvbnRyb2xsZXIgdXNlIHRoZSBzYW1lIElSUSwgb25seSBvbmUgSVJRIHJlc291cmNlIGNhbiBiZQorCSAqICAgIHNwZWNpZmllZCwgb3RoZXJ3aXNlIHRoZXJlIG11c3QgYmUgb25lIElSUSBwZXIgY2hhbm5lbCwgZXZlbiBpZgorCSAqICAgIHNvbWUgb2YgdGhlbSBhcmUgZXF1YWwKKwkgKiA0LiBpZiBhbGwgSVJRcyBvbiB0aGlzIGNvbnRyb2xsZXIgYXJlIGVxdWFsIG9yIGlmIHNvbWUgc3BlY2lmaWMgSVJRcworCSAqICAgIHNwZWNpZnkgSU9SRVNPVVJDRV9JUlFfU0hBUkVBQkxFIGluIHRoZWlyIHJlc291cmNlcywgdGhleSB3aWxsIGJlCisJICogICAgcmVxdWVzdGVkIHdpdGggdGhlIElSUUZfU0hBUkVEIGZsYWcKKwkgKi8KKwllcnJpcnFfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlpZiAoIWNoYW4gfHwgIWVycmlycV9yZXMpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oY2hhbi0+c3RhcnQsIHJlc291cmNlX3NpemUoY2hhbiksIHBkZXYtPm5hbWUpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkRNQUMgcmVnaXN0ZXIgcmVnaW9uIGFscmVhZHkgY2xhaW1lZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKGRtYXJzICYmICFyZXF1ZXN0X21lbV9yZWdpb24oZG1hcnMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGRtYXJzKSwgcGRldi0+bmFtZSkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRE1BQyBETUFSUyByZWdpb24gYWxyZWFkeSBjbGFpbWVkXG4iKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGVybXJkbWFyczsKKwl9CisKKwllcnIgPSAtRU5PTUVNOwogCXNoZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNoX2RtYWVfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzaGRldikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBlbm91Z2ggbWVtb3J5XG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vdCBlbm91Z2ggbWVtb3J5XG4iKTsKKwkJZ290byBlYWxsb2M7CisJfQorCisJc2hkZXYtPmNoYW5fcmVnID0gaW9yZW1hcChjaGFuLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShjaGFuKSk7CisJaWYgKCFzaGRldi0+Y2hhbl9yZWcpCisJCWdvdG8gZW1hcGNoYW47CisJaWYgKGRtYXJzKSB7CisJCXNoZGV2LT5kbWFycyA9IGlvcmVtYXAoZG1hcnMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKGRtYXJzKSk7CisJCWlmICghc2hkZXYtPmRtYXJzKQorCQkJZ290byBlbWFwZG1hcnM7CiAJfQogCiAJLyogcGxhdGZvcm0gZGF0YSAqLwotCW1lbWNweSgmc2hkZXYtPnBkYXRhLCBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSwKLQkJCXNpemVvZihzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSkpOworCXNoZGV2LT5wZGF0YSA9IHBkYXRhOworCisJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CisJcG1fcnVudGltZV9nZXRfc3luYygmcGRldi0+ZGV2KTsKIAogCS8qIHJlc2V0IGRtYSBjb250cm9sbGVyICovCi0JZXJyID0gc2hfZG1hZV9yc3QoMCk7CisJZXJyID0gc2hfZG1hZV9yc3Qoc2hkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gcnN0X2VycjsKIAotCS8qIFNINzc4MC84NS8yMyBoYXMgRE1BT1IxICovCi0JaWYgKHNoZGV2LT5wZGF0YS5tb2RlICYgU0hETUFfRE1BT1IxKSB7Ci0JCWVyciA9IHNoX2RtYWVfcnN0KDEpOwotCQlpZiAoZXJyKQotCQkJZ290byByc3RfZXJyOwotCX0KLQogCUlOSVRfTElTVF9IRUFEKCZzaGRldi0+Y29tbW9uLmNoYW5uZWxzKTsKIAogCWRtYV9jYXBfc2V0KERNQV9NRU1DUFksIHNoZGV2LT5jb21tb24uY2FwX21hc2spOwotCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgc2hkZXYtPmNvbW1vbi5jYXBfbWFzayk7CisJaWYgKGRtYXJzKQorCQlkbWFfY2FwX3NldChETUFfU0xBVkUsIHNoZGV2LT5jb21tb24uY2FwX21hc2spOwogCiAJc2hkZXYtPmNvbW1vbi5kZXZpY2VfYWxsb2NfY2hhbl9yZXNvdXJjZXMKIAkJPSBzaF9kbWFlX2FsbG9jX2NoYW5fcmVzb3VyY2VzOwpAQCAtOTUwLDM3ICsxMDMzLDcyIEBACiAKIAlzaGRldi0+Y29tbW9uLmRldiA9ICZwZGV2LT5kZXY7CiAJLyogRGVmYXVsdCB0cmFuc2ZlciBzaXplIG9mIDMyIGJ5dGVzIHJlcXVpcmVzIDMyLWJ5dGUgYWxpZ25tZW50ICovCi0Jc2hkZXYtPmNvbW1vbi5jb3B5X2FsaWduID0gNTsKKwlzaGRldi0+Y29tbW9uLmNvcHlfYWxpZ24gPSBMT0cyX0RFRkFVTFRfWEZFUl9TSVpFOwogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKLQkvKiBOb24gTWl4IElSUSBtb2RlIFNINzcyMi9TSDc3MzAgZXRjLi4uICovCi0JaWYgKHNoZGV2LT5wZGF0YS5tb2RlICYgU0hETUFfTUlYX0lSUSkgeworCWNoYW5pcnFfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAxKTsKKworCWlmICghY2hhbmlycV9yZXMpCisJCWNoYW5pcnFfcmVzID0gZXJyaXJxX3JlczsKKwllbHNlCisJCWlycXJlcysrOworCisJaWYgKGNoYW5pcnFfcmVzID09IGVycmlycV9yZXMgfHwKKwkgICAgKGVycmlycV9yZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9CSVRTKSA9PSBJT1JFU09VUkNFX0lSUV9TSEFSRUFCTEUpCiAJCWlycWZsYWdzID0gSVJRRl9TSEFSRUQ7Ci0JCWVpcnFbMF0gPSBETVRFMF9JUlE7Ci0jaWYgZGVmaW5lZChETVRFNl9JUlEpICYmIGRlZmluZWQoRE1BRTFfSVJRKQotCQllaXJxWzFdID0gRE1URTZfSVJROwotI2VuZGlmCisKKwllcnJpcnEgPSBlcnJpcnFfcmVzLT5zdGFydDsKKworCWVyciA9IHJlcXVlc3RfaXJxKGVycmlycSwgc2hfZG1hZV9lcnIsIGlycWZsYWdzLAorCQkJICAiRE1BQyBBZGRyZXNzIEVycm9yIiwgc2hkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIkRNQSBmYWlsZWQgcmVxdWVzdGluZyBpcnEgIyVkLCBlcnJvciAlZFxuIiwKKwkJCWVycmlycSwgZXJyKTsKKwkJZ290byBlaXJxX2VycjsKIAl9CiAKLQlmb3IgKGVjbnQgPSAwIDsgZWNudCA8IEFSUkFZX1NJWkUoZWlycSk7IGVjbnQrKykgewotCQllcnIgPSByZXF1ZXN0X2lycShlaXJxW2VjbnRdLCBzaF9kbWFlX2VyciwgaXJxZmxhZ3MsCi0JCQkJICAiRE1BQyBBZGRyZXNzIEVycm9yIiwgc2hkZXYpOwotCQlpZiAoZXJyKSB7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJETUEgZGV2aWNlIHJlcXVlc3RfaXJxIgotCQkJCSJlcnJvciAoaXJxICVkKSB3aXRoIHJldHVybiAlZFxuIiwKLQkJCQllaXJxW2VjbnRdLCBlcnIpOwotCQkJZ290byBlaXJxX2VycjsKLQkJfQotCX0KKyNlbHNlCisJY2hhbmlycV9yZXMgPSBlcnJpcnFfcmVzOwogI2VuZGlmIC8qIENPTkZJR19DUFVfU0g0ICovCiAKKwlpZiAoY2hhbmlycV9yZXMtPnN0YXJ0ID09IGNoYW5pcnFfcmVzLT5lbmQgJiYKKwkgICAgIXBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMSkpIHsKKwkJLyogU3BlY2lhbCBjYXNlIC0gYWxsIG11bHRpcGxleGVkICovCisJCWZvciAoOyBpcnFfY250IDwgcGRhdGEtPmNoYW5uZWxfbnVtOyBpcnFfY250KyspIHsKKwkJCWNoYW5faXJxW2lycV9jbnRdID0gY2hhbmlycV9yZXMtPnN0YXJ0OworCQkJY2hhbl9mbGFnW2lycV9jbnRdID0gSVJRRl9TSEFSRUQ7CisJCX0KKwl9IGVsc2UgeworCQlkbyB7CisJCQlmb3IgKGkgPSBjaGFuaXJxX3Jlcy0+c3RhcnQ7IGkgPD0gY2hhbmlycV9yZXMtPmVuZDsgaSsrKSB7CisJCQkJaWYgKChlcnJpcnFfcmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfQklUUykgPT0KKwkJCQkgICAgSU9SRVNPVVJDRV9JUlFfU0hBUkVBQkxFKQorCQkJCQljaGFuX2ZsYWdbaXJxX2NudF0gPSBJUlFGX1NIQVJFRDsKKwkJCQllbHNlCisJCQkJCWNoYW5fZmxhZ1tpcnFfY250XSA9IElSUUZfRElTQUJMRUQ7CisJCQkJZGV2X2RiZygmcGRldi0+ZGV2LAorCQkJCQkiRm91bmQgSVJRICVkIGZvciBjaGFubmVsICVkXG4iLAorCQkJCQlpLCBpcnFfY250KTsKKwkJCQljaGFuX2lycVtpcnFfY250KytdID0gaTsKKwkJCX0KKwkJCWNoYW5pcnFfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsCisJCQkJCQlJT1JFU09VUkNFX0lSUSwgKytpcnFyZXMpOworCQl9IHdoaWxlIChpcnFfY250IDwgcGRhdGEtPmNoYW5uZWxfbnVtICYmIGNoYW5pcnFfcmVzKTsKKwl9CisKKwlpZiAoaXJxX2NudCA8IHBkYXRhLT5jaGFubmVsX251bSkKKwkJZ290byBlaXJxcmVzOworCiAJLyogQ3JlYXRlIERNQSBDaGFubmVsICovCi0JZm9yIChjbnQgPSAwIDsgY250IDwgTUFYX0RNQV9DSEFOTkVMUyA7IGNudCsrKSB7Ci0JCWVyciA9IHNoX2RtYWVfY2hhbl9wcm9iZShzaGRldiwgY250KTsKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPmNoYW5uZWxfbnVtOyBpKyspIHsKKwkJZXJyID0gc2hfZG1hZV9jaGFuX3Byb2JlKHNoZGV2LCBpLCBjaGFuX2lycVtpXSwgY2hhbl9mbGFnW2ldKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gY2hhbl9wcm9iZV9lcnI7CiAJfQogCisJcG1fcnVudGltZV9wdXQoJnBkZXYtPmRldik7CisKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBzaGRldik7CiAJZG1hX2FzeW5jX2RldmljZV9yZWdpc3Rlcigmc2hkZXYtPmNvbW1vbik7CiAKQEAgLTk4OCwxMyArMTEwNiwyNCBAQAogCiBjaGFuX3Byb2JlX2VycjoKIAlzaF9kbWFlX2NoYW5fcmVtb3ZlKHNoZGV2KTsKLQorZWlycXJlczoKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0KQorCWZyZWVfaXJxKGVycmlycSwgc2hkZXYpOwogZWlycV9lcnI6Ci0JZm9yIChlY250LS0gOyBlY250ID49IDA7IGVjbnQtLSkKLQkJZnJlZV9pcnEoZWlycVtlY250XSwgc2hkZXYpOwotCisjZW5kaWYKIHJzdF9lcnI6CisJcG1fcnVudGltZV9wdXQoJnBkZXYtPmRldik7CisJaWYgKGRtYXJzKQorCQlpb3VubWFwKHNoZGV2LT5kbWFycyk7CitlbWFwZG1hcnM6CisJaW91bm1hcChzaGRldi0+Y2hhbl9yZWcpOworZW1hcGNoYW46CiAJa2ZyZWUoc2hkZXYpOworZWFsbG9jOgorCWlmIChkbWFycykKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKGRtYXJzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShkbWFycykpOworZXJtcmRtYXJzOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihjaGFuLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShjaGFuKSk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTAwMiwzNiArMTEzMSwzOSBAQAogc3RhdGljIGludCBfX2V4aXQgc2hfZG1hZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UgKnNoZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGVycmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAKIAlkbWFfYXN5bmNfZGV2aWNlX3VucmVnaXN0ZXIoJnNoZGV2LT5jb21tb24pOwogCi0JaWYgKHNoZGV2LT5wZGF0YS5tb2RlICYgU0hETUFfTUlYX0lSUSkgewotCQlmcmVlX2lycShETVRFMF9JUlEsIHNoZGV2KTsKLSNpZiBkZWZpbmVkKERNVEU2X0lSUSkKLQkJZnJlZV9pcnEoRE1URTZfSVJRLCBzaGRldik7Ci0jZW5kaWYKLQl9CisJaWYgKGVycmlycSA+IDApCisJCWZyZWVfaXJxKGVycmlycSwgc2hkZXYpOwogCiAJLyogY2hhbm5lbCBkYXRhIHJlbW92ZSAqLwogCXNoX2RtYWVfY2hhbl9yZW1vdmUoc2hkZXYpOwogCi0JaWYgKCEoc2hkZXYtPnBkYXRhLm1vZGUgJiBTSERNQV9NSVhfSVJRKSkgewotCQlmcmVlX2lycShETUFFMF9JUlEsIHNoZGV2KTsKLSNpZiBkZWZpbmVkKERNQUUxX0lSUSkKLQkJZnJlZV9pcnEoRE1BRTFfSVJRLCBzaGRldik7Ci0jZW5kaWYKLQl9CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCisJaWYgKHNoZGV2LT5kbWFycykKKwkJaW91bm1hcChzaGRldi0+ZG1hcnMpOworCWlvdW5tYXAoc2hkZXYtPmNoYW5fcmVnKTsKKwogCWtmcmVlKHNoZGV2KTsKIAorCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHJlcykKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwlpZiAocmVzKQorCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzaF9kbWFlX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNoX2RtYWVfZGV2aWNlICpzaGRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCXNoX2RtYWVfY3RsX3N0b3AoMCk7Ci0JaWYgKHNoZGV2LT5wZGF0YS5tb2RlICYgU0hETUFfRE1BT1IxKQotCQlzaF9kbWFlX2N0bF9zdG9wKDEpOworCXNoX2RtYWVfY3RsX3N0b3Aoc2hkZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzaF9kbWFlX2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL3NoZG1hLmggYi9kcml2ZXJzL2RtYS9zaGRtYS5oCmluZGV4IDdlMjI3ZjMuLjE1MzYwOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL3NoZG1hLmgKKysrIGIvZHJpdmVycy9kbWEvc2hkbWEuaApAQCAtMTcsMjQgKzE3LDEwIEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCisjaW5jbHVkZSA8YXNtL2RtYWVuZ2luZS5oPgorCiAjZGVmaW5lIFNIX0RNQV9UQ1JfTUFYIDB4MDBGRkZGRkYJLyogMTZNQiAqLwogCi1zdHJ1Y3Qgc2hfZG1hZV9yZWdzIHsKLQl1MzIgc2FyOyAvKiBTQVIgLyBzb3VyY2UgYWRkcmVzcyAqLwotCXUzMiBkYXI7IC8qIERBUiAvIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KLQl1MzIgdGNyOyAvKiBUQ1IgLyB0cmFuc2ZlciBjb3VudCAqLwotfTsKLQotc3RydWN0IHNoX2Rlc2MgewotCXN0cnVjdCBzaF9kbWFlX3JlZ3MgaHc7Ci0Jc3RydWN0IGxpc3RfaGVhZCBub2RlOwotCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciBhc3luY190eDsKLQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb247Ci0JZG1hX2Nvb2tpZV90IGNvb2tpZTsKLQlpbnQgY2h1bmtzOwotCWludCBtYXJrOwotfTsKLQogc3RydWN0IGRldmljZTsKIAogc3RydWN0IHNoX2RtYWVfY2hhbiB7CkBAIC00NywxNCArMzMsMTggQEAKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGFza2xldDsJLyogVGFza2xldCAqLwogCWludCBkZXNjc19hbGxvY2F0ZWQ7CQkvKiBkZXNjIGNvdW50ICovCiAJaW50IHhtaXRfc2hpZnQ7CQkJLyogbG9nXzIoYnl0ZXNfcGVyX3hmZXIpICovCisJaW50IGlycTsKIAlpbnQgaWQ7CQkJCS8qIFJhdyBpZCBvZiB0aGlzIGNoYW5uZWwgKi8KKwl1MzIgX19pb21lbSAqYmFzZTsKIAljaGFyIGRldl9pZFsxNl07CQkvKiB1bmlxdWUgbmFtZSBwZXIgRE1BQyBvZiBjaGFubmVsICovCiB9OwogCiBzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UgewogCXN0cnVjdCBkbWFfZGV2aWNlIGNvbW1vbjsKLQlzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpjaGFuW01BWF9ETUFfQ0hBTk5FTFNdOwotCXN0cnVjdCBzaF9kbWFlX3BkYXRhIHBkYXRhOworCXN0cnVjdCBzaF9kbWFlX2NoYW4gKmNoYW5bU0hfRE1BQ19NQVhfQ0hBTk5FTFNdOworCXN0cnVjdCBzaF9kbWFlX3BkYXRhICpwZGF0YTsKKwl1MzIgX19pb21lbSAqY2hhbl9yZWc7CisJdTE2IF9faW9tZW0gKmRtYXJzOwogfTsKIAogI2RlZmluZSB0b19zaF9jaGFuKGNoYW4pIGNvbnRhaW5lcl9vZihjaGFuLCBzdHJ1Y3Qgc2hfZG1hZV9jaGFuLCBjb21tb24pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Vpc2EvZWlzYS1idXMuYyBiL2RyaXZlcnMvZWlzYS9laXNhLWJ1cy5jCmluZGV4IDY2OTU4YjMuLjgwNmM3N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWlzYS9laXNhLWJ1cy5jCisrKyBiL2RyaXZlcnMvZWlzYS9laXNhLWJ1cy5jCkBAIC0zOSwxMCArMzksMTAgQEAKIHN0YXRpYyBpbnQgZGlzYWJsZV9kZXZbRUlTQV9NQVhfRk9SQ0VEX0RFVl07CiBzdGF0aWMgdW5zaWduZWQgaW50IGRpc2FibGVfZGV2X2NvdW50OwogCi1zdGF0aWMgaW50IGlzX2ZvcmNlZF9kZXYgKGludCAqZm9yY2VkX3RhYiwKLQkJCSAgaW50IGZvcmNlZF9jb3VudCwKLQkJCSAgc3RydWN0IGVpc2Ffcm9vdF9kZXZpY2UgKnJvb3QsCi0JCQkgIHN0cnVjdCBlaXNhX2RldmljZSAqZWRldikKK3N0YXRpYyBpbnQgaXNfZm9yY2VkX2RldihpbnQgKmZvcmNlZF90YWIsCisJCQkgaW50IGZvcmNlZF9jb3VudCwKKwkJCSBzdHJ1Y3QgZWlzYV9yb290X2RldmljZSAqcm9vdCwKKwkJCSBzdHJ1Y3QgZWlzYV9kZXZpY2UgKmVkZXYpCiB7CiAJaW50IGksIHg7CiAKQEAgLTU1LDIxICs1NSwyMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZWlzYV9uYW1lX2RldmljZSAoc3RydWN0IGVpc2FfZGV2aWNlICplZGV2KQorc3RhdGljIHZvaWQgX19pbml0IGVpc2FfbmFtZV9kZXZpY2Uoc3RydWN0IGVpc2FfZGV2aWNlICplZGV2KQogewogI2lmZGVmIENPTkZJR19FSVNBX05BTUVTCiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IEVJU0FfSU5GT1M7IGkrKykgewotCQlpZiAoIXN0cmNtcCAoZWRldi0+aWQuc2lnLCBlaXNhX3RhYmxlW2ldLmlkLnNpZykpIHsKLQkJCXN0cmxjcHkgKGVkZXYtPnByZXR0eV9uYW1lLAotCQkJCSBlaXNhX3RhYmxlW2ldLm5hbWUsCi0JCQkJIHNpemVvZihlZGV2LT5wcmV0dHlfbmFtZSkpOworCQlpZiAoIXN0cmNtcChlZGV2LT5pZC5zaWcsIGVpc2FfdGFibGVbaV0uaWQuc2lnKSkgeworCQkJc3RybGNweShlZGV2LT5wcmV0dHlfbmFtZSwKKwkJCQllaXNhX3RhYmxlW2ldLm5hbWUsCisJCQkJc2l6ZW9mKGVkZXYtPnByZXR0eV9uYW1lKSk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAKIAkvKiBObyBuYW1lIHdhcyBmb3VuZCAqLwotCXNwcmludGYgKGVkZXYtPnByZXR0eV9uYW1lLCAiRUlTQSBkZXZpY2UgJS43cyIsIGVkZXYtPmlkLnNpZyk7CisJc3ByaW50ZihlZGV2LT5wcmV0dHlfbmFtZSwgIkVJU0EgZGV2aWNlICUuN3MiLCBlZGV2LT5pZC5zaWcpOwogI2VuZGlmCiB9CiAKQEAgLTkxLDcgKzkxLDcgQEAKIAkJICovCiAJCW91dGIoMHg4MCArIGksIGFkZHIpOwogI2VuZGlmCi0JCXNpZ1tpXSA9IGluYiAoYWRkciArIGkpOworCQlzaWdbaV0gPSBpbmIoYWRkciArIGkpOwogCiAJCWlmICghaSAmJiAoc2lnWzBdICYgMHg4MCkpCiAJCQlyZXR1cm4gTlVMTDsKQEAgLTEwNiwxNyArMTA2LDE3IEBACiAgICAgICAgIHJldHVybiBzaWdfc3RyOwogfQogCi1zdGF0aWMgaW50IGVpc2FfYnVzX21hdGNoIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCitzdGF0aWMgaW50IGVpc2FfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKIHsKLQlzdHJ1Y3QgZWlzYV9kZXZpY2UgKmVkZXYgPSB0b19laXNhX2RldmljZSAoZGV2KTsKLQlzdHJ1Y3QgZWlzYV9kcml2ZXIgKmVkcnYgPSB0b19laXNhX2RyaXZlciAoZHJ2KTsKKwlzdHJ1Y3QgZWlzYV9kZXZpY2UgKmVkZXYgPSB0b19laXNhX2RldmljZShkZXYpOworCXN0cnVjdCBlaXNhX2RyaXZlciAqZWRydiA9IHRvX2Vpc2FfZHJpdmVyKGRydik7CiAJY29uc3Qgc3RydWN0IGVpc2FfZGV2aWNlX2lkICplaWRzID0gZWRydi0+aWRfdGFibGU7CiAKIAlpZiAoIWVpZHMpCiAJCXJldHVybiAwOwogCi0Jd2hpbGUgKHN0cmxlbiAoZWlkcy0+c2lnKSkgewotCQlpZiAoIXN0cmNtcCAoZWlkcy0+c2lnLCBlZGV2LT5pZC5zaWcpICYmCisJd2hpbGUgKHN0cmxlbihlaWRzLT5zaWcpKSB7CisJCWlmICghc3RyY21wKGVpZHMtPnNpZywgZWRldi0+aWQuc2lnKSAmJgogCQkgICAgZWRldi0+c3RhdGUgJiBFSVNBX0NPTkZJR19FTkFCTEVEKSB7CiAJCQllZGV2LT5pZC5kcml2ZXJfZGF0YSA9IGVpZHMtPmRyaXZlcl9kYXRhOwogCQkJcmV0dXJuIDE7CkBAIC0xNDEsNjEgKzE0MSw3MSBAQAogCS5tYXRjaCA9IGVpc2FfYnVzX21hdGNoLAogCS51ZXZlbnQgPSBlaXNhX2J1c191ZXZlbnQsCiB9OworRVhQT1JUX1NZTUJPTChlaXNhX2J1c190eXBlKTsKIAotaW50IGVpc2FfZHJpdmVyX3JlZ2lzdGVyIChzdHJ1Y3QgZWlzYV9kcml2ZXIgKmVkcnYpCitpbnQgZWlzYV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGVpc2FfZHJpdmVyICplZHJ2KQogewogCWVkcnYtPmRyaXZlci5idXMgPSAmZWlzYV9idXNfdHlwZTsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyICgmZWRydi0+ZHJpdmVyKTsKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZlZHJ2LT5kcml2ZXIpOwogfQorRVhQT1JUX1NZTUJPTChlaXNhX2RyaXZlcl9yZWdpc3Rlcik7CiAKLXZvaWQgZWlzYV9kcml2ZXJfdW5yZWdpc3RlciAoc3RydWN0IGVpc2FfZHJpdmVyICplZHJ2KQordm9pZCBlaXNhX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBlaXNhX2RyaXZlciAqZWRydikKIHsKLQlkcml2ZXJfdW5yZWdpc3RlciAoJmVkcnYtPmRyaXZlcik7CisJZHJpdmVyX3VucmVnaXN0ZXIoJmVkcnYtPmRyaXZlcik7CiB9CitFWFBPUlRfU1lNQk9MKGVpc2FfZHJpdmVyX3VucmVnaXN0ZXIpOwogCi1zdGF0aWMgc3NpemVfdCBlaXNhX3Nob3dfc2lnIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBlaXNhX3Nob3dfc2lnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNoYXIgKmJ1ZikKIHsKLSAgICAgICAgc3RydWN0IGVpc2FfZGV2aWNlICplZGV2ID0gdG9fZWlzYV9kZXZpY2UgKGRldik7Ci0gICAgICAgIHJldHVybiBzcHJpbnRmIChidWYsIiVzXG4iLCBlZGV2LT5pZC5zaWcpOworCXN0cnVjdCBlaXNhX2RldmljZSAqZWRldiA9IHRvX2Vpc2FfZGV2aWNlKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGVkZXYtPmlkLnNpZyk7CiB9CiAKIHN0YXRpYyBERVZJQ0VfQVRUUihzaWduYXR1cmUsIFNfSVJVR08sIGVpc2Ffc2hvd19zaWcsIE5VTEwpOwogCi1zdGF0aWMgc3NpemVfdCBlaXNhX3Nob3dfc3RhdGUgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGVpc2Ffc2hvd19zdGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICAgY2hhciAqYnVmKQogewotICAgICAgICBzdHJ1Y3QgZWlzYV9kZXZpY2UgKmVkZXYgPSB0b19laXNhX2RldmljZSAoZGV2KTsKLSAgICAgICAgcmV0dXJuIHNwcmludGYgKGJ1ZiwiJWRcbiIsIGVkZXYtPnN0YXRlICYgRUlTQV9DT05GSUdfRU5BQkxFRCk7CisJc3RydWN0IGVpc2FfZGV2aWNlICplZGV2ID0gdG9fZWlzYV9kZXZpY2UoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZWRldi0+c3RhdGUgJiBFSVNBX0NPTkZJR19FTkFCTEVEKTsKIH0KIAogc3RhdGljIERFVklDRV9BVFRSKGVuYWJsZWQsIFNfSVJVR08sIGVpc2Ffc2hvd19zdGF0ZSwgTlVMTCk7CiAKLXN0YXRpYyBzc2l6ZV90IGVpc2Ffc2hvd19tb2RhbGlhcyAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgZWlzYV9zaG93X21vZGFsaWFzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgY2hhciAqYnVmKQogewotICAgICAgICBzdHJ1Y3QgZWlzYV9kZXZpY2UgKmVkZXYgPSB0b19laXNhX2RldmljZSAoZGV2KTsKLSAgICAgICAgcmV0dXJuIHNwcmludGYgKGJ1ZiwgRUlTQV9ERVZJQ0VfTU9EQUxJQVNfRk1UICJcbiIsIGVkZXYtPmlkLnNpZyk7CisJc3RydWN0IGVpc2FfZGV2aWNlICplZGV2ID0gdG9fZWlzYV9kZXZpY2UoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsIEVJU0FfREVWSUNFX01PREFMSUFTX0ZNVCAiXG4iLCBlZGV2LT5pZC5zaWcpOwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFIobW9kYWxpYXMsIFNfSVJVR08sIGVpc2Ffc2hvd19tb2RhbGlhcywgTlVMTCk7CiAKLXN0YXRpYyBpbnQgX19pbml0IGVpc2FfaW5pdF9kZXZpY2UgKHN0cnVjdCBlaXNhX3Jvb3RfZGV2aWNlICpyb290LAotCQkJCSAgICBzdHJ1Y3QgZWlzYV9kZXZpY2UgKmVkZXYsCi0JCQkJICAgIGludCBzbG90KQorc3RhdGljIGludCBfX2luaXQgZWlzYV9pbml0X2RldmljZShzdHJ1Y3QgZWlzYV9yb290X2RldmljZSAqcm9vdCwKKwkJCQkgICBzdHJ1Y3QgZWlzYV9kZXZpY2UgKmVkZXYsCisJCQkJICAgaW50IHNsb3QpCiB7CiAJY2hhciAqc2lnOwotICAgICAgICB1bnNpZ25lZCBsb25nIHNpZ19hZGRyOworCXVuc2lnbmVkIGxvbmcgc2lnX2FkZHI7CiAJaW50IGk7CiAKLQlzaWdfYWRkciA9IFNMT1RfQUREUkVTUyAocm9vdCwgc2xvdCkgKyBFSVNBX1ZFTkRPUl9JRF9PRkZTRVQ7CisJc2lnX2FkZHIgPSBTTE9UX0FERFJFU1Mocm9vdCwgc2xvdCkgKyBFSVNBX1ZFTkRPUl9JRF9PRkZTRVQ7CiAKLQlpZiAoIShzaWcgPSBkZWNvZGVfZWlzYV9zaWcgKHNpZ19hZGRyKSkpCisJc2lnID0gZGVjb2RlX2Vpc2Ffc2lnKHNpZ19hZGRyKTsKKwlpZiAoIXNpZykKIAkJcmV0dXJuIC0xOwkvKiBObyBFSVNBIGRldmljZSBoZXJlICovCiAJCi0JbWVtY3B5IChlZGV2LT5pZC5zaWcsIHNpZywgRUlTQV9TSUdfTEVOKTsKKwltZW1jcHkoZWRldi0+aWQuc2lnLCBzaWcsIEVJU0FfU0lHX0xFTik7CiAJZWRldi0+c2xvdCA9IHNsb3Q7Ci0JZWRldi0+c3RhdGUgPSBpbmIgKFNMT1RfQUREUkVTUyAocm9vdCwgc2xvdCkgKyBFSVNBX0NPTkZJR19PRkZTRVQpICYgRUlTQV9DT05GSUdfRU5BQkxFRDsKLQllZGV2LT5iYXNlX2FkZHIgPSBTTE9UX0FERFJFU1MgKHJvb3QsIHNsb3QpOworCWVkZXYtPnN0YXRlID0gaW5iKFNMT1RfQUREUkVTUyhyb290LCBzbG90KSArIEVJU0FfQ09ORklHX09GRlNFVCkKKwkJICAgICAgJiBFSVNBX0NPTkZJR19FTkFCTEVEOworCWVkZXYtPmJhc2VfYWRkciA9IFNMT1RfQUREUkVTUyhyb290LCBzbG90KTsKIAllZGV2LT5kbWFfbWFzayA9IHJvb3QtPmRtYV9tYXNrOyAvKiBEZWZhdWx0IERNQSBtYXNrICovCi0JZWlzYV9uYW1lX2RldmljZSAoZWRldik7CisJZWlzYV9uYW1lX2RldmljZShlZGV2KTsKIAllZGV2LT5kZXYucGFyZW50ID0gcm9vdC0+ZGV2OwogCWVkZXYtPmRldi5idXMgPSAmZWlzYV9idXNfdHlwZTsKIAllZGV2LT5kZXYuZG1hX21hc2sgPSAmZWRldi0+ZG1hX21hc2s7CkBAIC0yMTAsNDIgKzIyMCw0NSBAQAogI2VuZGlmCiAJfQogCi0JaWYgKGlzX2ZvcmNlZF9kZXYgKGVuYWJsZV9kZXYsIGVuYWJsZV9kZXZfY291bnQsIHJvb3QsIGVkZXYpKQorCWlmIChpc19mb3JjZWRfZGV2KGVuYWJsZV9kZXYsIGVuYWJsZV9kZXZfY291bnQsIHJvb3QsIGVkZXYpKQogCQllZGV2LT5zdGF0ZSA9IEVJU0FfQ09ORklHX0VOQUJMRUQgfCBFSVNBX0NPTkZJR19GT1JDRUQ7CiAJCi0JaWYgKGlzX2ZvcmNlZF9kZXYgKGRpc2FibGVfZGV2LCBkaXNhYmxlX2Rldl9jb3VudCwgcm9vdCwgZWRldikpCisJaWYgKGlzX2ZvcmNlZF9kZXYoZGlzYWJsZV9kZXYsIGRpc2FibGVfZGV2X2NvdW50LCByb290LCBlZGV2KSkKIAkJZWRldi0+c3RhdGUgPSBFSVNBX0NPTkZJR19GT1JDRUQ7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgZWlzYV9yZWdpc3Rlcl9kZXZpY2UgKHN0cnVjdCBlaXNhX2RldmljZSAqZWRldikKK3N0YXRpYyBpbnQgX19pbml0IGVpc2FfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBlaXNhX2RldmljZSAqZWRldikKIHsKLQlpbnQgcmMgPSBkZXZpY2VfcmVnaXN0ZXIgKCZlZGV2LT5kZXYpOworCWludCByYyA9IGRldmljZV9yZWdpc3RlcigmZWRldi0+ZGV2KTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAotCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlICgmZWRldi0+ZGV2LCAmZGV2X2F0dHJfc2lnbmF0dXJlKTsKLQlpZiAocmMpIGdvdG8gZXJyX2RldnJlZzsKLQlyYyA9IGRldmljZV9jcmVhdGVfZmlsZSAoJmVkZXYtPmRldiwgJmRldl9hdHRyX2VuYWJsZWQpOwotCWlmIChyYykgZ290byBlcnJfc2lnOwotCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlICgmZWRldi0+ZGV2LCAmZGV2X2F0dHJfbW9kYWxpYXMpOwotCWlmIChyYykgZ290byBlcnJfZW5hYjsKKwlyYyA9IGRldmljZV9jcmVhdGVfZmlsZSgmZWRldi0+ZGV2LCAmZGV2X2F0dHJfc2lnbmF0dXJlKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX2RldnJlZzsKKwlyYyA9IGRldmljZV9jcmVhdGVfZmlsZSgmZWRldi0+ZGV2LCAmZGV2X2F0dHJfZW5hYmxlZCk7CisJaWYgKHJjKQorCQlnb3RvIGVycl9zaWc7CisJcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmVkZXYtPmRldiwgJmRldl9hdHRyX21vZGFsaWFzKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX2VuYWI7CiAKIAlyZXR1cm4gMDsKIAogZXJyX2VuYWI6Ci0JZGV2aWNlX3JlbW92ZV9maWxlICgmZWRldi0+ZGV2LCAmZGV2X2F0dHJfZW5hYmxlZCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZlZGV2LT5kZXYsICZkZXZfYXR0cl9lbmFibGVkKTsKIGVycl9zaWc6Ci0JZGV2aWNlX3JlbW92ZV9maWxlICgmZWRldi0+ZGV2LCAmZGV2X2F0dHJfc2lnbmF0dXJlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmVkZXYtPmRldiwgJmRldl9hdHRyX3NpZ25hdHVyZSk7CiBlcnJfZGV2cmVnOgogCWRldmljZV91bnJlZ2lzdGVyKCZlZGV2LT5kZXYpOwogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBfX2luaXQgZWlzYV9yZXF1ZXN0X3Jlc291cmNlcyAoc3RydWN0IGVpc2Ffcm9vdF9kZXZpY2UgKnJvb3QsCi0JCQkJCSAgc3RydWN0IGVpc2FfZGV2aWNlICplZGV2LAotCQkJCQkgIGludCBzbG90KQorc3RhdGljIGludCBfX2luaXQgZWlzYV9yZXF1ZXN0X3Jlc291cmNlcyhzdHJ1Y3QgZWlzYV9yb290X2RldmljZSAqcm9vdCwKKwkJCQkJIHN0cnVjdCBlaXNhX2RldmljZSAqZWRldiwKKwkJCQkJIGludCBzbG90KQogewogCWludCBpOwogCkBAIC0yNjMsMTcgKzI3NiwxOSBAQAogCQkKIAkJaWYgKHNsb3QpIHsKIAkJCWVkZXYtPnJlc1tpXS5uYW1lICA9IE5VTEw7Ci0JCQllZGV2LT5yZXNbaV0uc3RhcnQgPSBTTE9UX0FERFJFU1MgKHJvb3QsIHNsb3QpICsgKGkgKiAweDQwMCk7CisJCQllZGV2LT5yZXNbaV0uc3RhcnQgPSBTTE9UX0FERFJFU1Mocm9vdCwgc2xvdCkKKwkJCQkJICAgICArIChpICogMHg0MDApOwogCQkJZWRldi0+cmVzW2ldLmVuZCAgID0gZWRldi0+cmVzW2ldLnN0YXJ0ICsgMHhmZjsKIAkJCWVkZXYtPnJlc1tpXS5mbGFncyA9IElPUkVTT1VSQ0VfSU87CiAJCX0gZWxzZSB7CiAJCQllZGV2LT5yZXNbaV0ubmFtZSAgPSBOVUxMOwotCQkJZWRldi0+cmVzW2ldLnN0YXJ0ID0gU0xPVF9BRERSRVNTIChyb290LCBzbG90KSArIEVJU0FfVkVORE9SX0lEX09GRlNFVDsKKwkJCWVkZXYtPnJlc1tpXS5zdGFydCA9IFNMT1RfQUREUkVTUyhyb290LCBzbG90KQorCQkJCQkgICAgICsgRUlTQV9WRU5ET1JfSURfT0ZGU0VUOwogCQkJZWRldi0+cmVzW2ldLmVuZCAgID0gZWRldi0+cmVzW2ldLnN0YXJ0ICsgMzsKIAkJCWVkZXYtPnJlc1tpXS5mbGFncyA9IElPUkVTT1VSQ0VfQlVTWTsKIAkJfQogCi0JCWlmIChyZXF1ZXN0X3Jlc291cmNlIChyb290LT5yZXMsICZlZGV2LT5yZXNbaV0pKQorCQlpZiAocmVxdWVzdF9yZXNvdXJjZShyb290LT5yZXMsICZlZGV2LT5yZXNbaV0pKQogCQkJZ290byBmYWlsZWQ7CiAJfQogCkBAIC0yODEsOTkgKzI5NiwxMDAgQEAKIAkKICBmYWlsZWQ6CiAJd2hpbGUgKC0taSA+PSAwKQotCQlyZWxlYXNlX3Jlc291cmNlICgmZWRldi0+cmVzW2ldKTsKKwkJcmVsZWFzZV9yZXNvdXJjZSgmZWRldi0+cmVzW2ldKTsKIAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGVpc2FfcmVsZWFzZV9yZXNvdXJjZXMgKHN0cnVjdCBlaXNhX2RldmljZSAqZWRldikKK3N0YXRpYyB2b2lkIF9faW5pdCBlaXNhX3JlbGVhc2VfcmVzb3VyY2VzKHN0cnVjdCBlaXNhX2RldmljZSAqZWRldikKIHsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBFSVNBX01BWF9SRVNPVVJDRVM7IGkrKykKIAkJaWYgKGVkZXYtPnJlc1tpXS5zdGFydCB8fCBlZGV2LT5yZXNbaV0uZW5kKQotCQkJcmVsZWFzZV9yZXNvdXJjZSAoJmVkZXYtPnJlc1tpXSk7CisJCQlyZWxlYXNlX3Jlc291cmNlKCZlZGV2LT5yZXNbaV0pOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBlaXNhX3Byb2JlIChzdHJ1Y3QgZWlzYV9yb290X2RldmljZSAqcm9vdCkKK3N0YXRpYyBpbnQgX19pbml0IGVpc2FfcHJvYmUoc3RydWN0IGVpc2Ffcm9vdF9kZXZpY2UgKnJvb3QpCiB7CiAgICAgICAgIGludCBpLCBjOwogCXN0cnVjdCBlaXNhX2RldmljZSAqZWRldjsKIAotICAgICAgICBwcmludGsgKEtFUk5fSU5GTyAiRUlTQTogUHJvYmluZyBidXMgJWQgYXQgJXNcbiIsCi0JCXJvb3QtPmJ1c19uciwgZGV2X25hbWUocm9vdC0+ZGV2KSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiRUlTQTogUHJvYmluZyBidXMgJWQgYXQgJXNcbiIsCisJICAgICAgIHJvb3QtPmJ1c19uciwgZGV2X25hbWUocm9vdC0+ZGV2KSk7CiAKIAkvKiBGaXJzdCB0cnkgdG8gZ2V0IGhvbGQgb2Ygc2xvdCAwLiBJZiB0aGVyZSBpcyBubyBkZXZpY2UKIAkgKiBoZXJlLCBzaW1wbHkgZmFpbCwgdW5sZXNzIHJvb3QtPmZvcmNlX3Byb2JlIGlzIHNldC4gKi8KIAkKLQlpZiAoIShlZGV2ID0ga3phbGxvYyAoc2l6ZW9mICgqZWRldiksIEdGUF9LRVJORUwpKSkgewotCQlwcmludGsgKEtFUk5fRVJSICJFSVNBOiBDb3VsZG4ndCBhbGxvY2F0ZSBtYWluYm9hcmQgc2xvdFxuIik7CisJZWRldiA9IGt6YWxsb2Moc2l6ZW9mKCplZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRUlTQTogQ291bGRuJ3QgYWxsb2NhdGUgbWFpbmJvYXJkIHNsb3RcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJCQotCWlmIChlaXNhX3JlcXVlc3RfcmVzb3VyY2VzIChyb290LCBlZGV2LCAwKSkgewotCQlwcmludGsgKEtFUk5fV0FSTklORyBcCi0JCQkiRUlTQTogQ2Fubm90IGFsbG9jYXRlIHJlc291cmNlIGZvciBtYWluYm9hcmRcbiIpOwotCQlrZnJlZSAoZWRldik7CisJaWYgKGVpc2FfcmVxdWVzdF9yZXNvdXJjZXMocm9vdCwgZWRldiwgMCkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBcCisJCSAgICAgICAiRUlTQTogQ2Fubm90IGFsbG9jYXRlIHJlc291cmNlIGZvciBtYWluYm9hcmRcbiIpOworCQlrZnJlZShlZGV2KTsKIAkJaWYgKCFyb290LT5mb3JjZV9wcm9iZSkKIAkJCXJldHVybiAtRUJVU1k7CiAJCWdvdG8gZm9yY2VfcHJvYmU7CiAJfQogCi0JaWYgKGVpc2FfaW5pdF9kZXZpY2UgKHJvb3QsIGVkZXYsIDApKSB7Ci0JCWVpc2FfcmVsZWFzZV9yZXNvdXJjZXMgKGVkZXYpOwotCQlrZnJlZSAoZWRldik7CisJaWYgKGVpc2FfaW5pdF9kZXZpY2Uocm9vdCwgZWRldiwgMCkpIHsKKwkJZWlzYV9yZWxlYXNlX3Jlc291cmNlcyhlZGV2KTsKKwkJa2ZyZWUoZWRldik7CiAJCWlmICghcm9vdC0+Zm9yY2VfcHJvYmUpCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJZ290byBmb3JjZV9wcm9iZTsKIAl9CiAKLQlwcmludGsgKEtFUk5fSU5GTyAiRUlTQTogTWFpbmJvYXJkICVzIGRldGVjdGVkLlxuIiwgZWRldi0+aWQuc2lnKTsKKwlwcmludGsoS0VSTl9JTkZPICJFSVNBOiBNYWluYm9hcmQgJXMgZGV0ZWN0ZWQuXG4iLCBlZGV2LT5pZC5zaWcpOwogCi0JaWYgKGVpc2FfcmVnaXN0ZXJfZGV2aWNlIChlZGV2KSkgewotCQlwcmludGsgKEtFUk5fRVJSICJFSVNBOiBGYWlsZWQgdG8gcmVnaXN0ZXIgJXNcbiIsCi0JCQllZGV2LT5pZC5zaWcpOwotCQllaXNhX3JlbGVhc2VfcmVzb3VyY2VzIChlZGV2KTsKLQkJa2ZyZWUgKGVkZXYpOworCWlmIChlaXNhX3JlZ2lzdGVyX2RldmljZShlZGV2KSkgeworCQlwcmludGsoS0VSTl9FUlIgIkVJU0E6IEZhaWxlZCB0byByZWdpc3RlciAlc1xuIiwKKwkJICAgICAgIGVkZXYtPmlkLnNpZyk7CisJCWVpc2FfcmVsZWFzZV9yZXNvdXJjZXMoZWRldik7CisJCWtmcmVlKGVkZXYpOwogCX0KIAkKICBmb3JjZV9wcm9iZToKIAkKICAgICAgICAgZm9yIChjID0gMCwgaSA9IDE7IGkgPD0gcm9vdC0+c2xvdHM7IGkrKykgewotCQlpZiAoIShlZGV2ID0ga3phbGxvYyAoc2l6ZW9mICgqZWRldiksIEdGUF9LRVJORUwpKSkgewotCQkJcHJpbnRrIChLRVJOX0VSUiAiRUlTQTogT3V0IG9mIG1lbW9yeSBmb3Igc2xvdCAlZFxuIiwKLQkJCQlpKTsKKwkJZWRldiA9IGt6YWxsb2Moc2l6ZW9mKCplZGV2KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZWRldikgeworCQkJcHJpbnRrKEtFUk5fRVJSICJFSVNBOiBPdXQgb2YgbWVtb3J5IGZvciBzbG90ICVkXG4iLCBpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKGVpc2FfcmVxdWVzdF9yZXNvdXJjZXMgKHJvb3QsIGVkZXYsIGkpKSB7Ci0JCQlwcmludGsgKEtFUk5fV0FSTklORyBcCi0JCQkJIkNhbm5vdCBhbGxvY2F0ZSByZXNvdXJjZSBmb3IgRUlTQSBzbG90ICVkXG4iLAotCQkJCWkpOwotCQkJa2ZyZWUgKGVkZXYpOworCQlpZiAoZWlzYV9yZXF1ZXN0X3Jlc291cmNlcyhyb290LCBlZGV2LCBpKSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBcCisJCQkgICAgICAgIkNhbm5vdCBhbGxvY2F0ZSByZXNvdXJjZSBmb3IgRUlTQSBzbG90ICVkXG4iLAorCQkJICAgICAgIGkpOworCQkJa2ZyZWUoZWRldik7CiAJCQljb250aW51ZTsKIAkJfQogCi0gICAgICAgICAgICAgICAgaWYgKGVpc2FfaW5pdF9kZXZpY2UgKHJvb3QsIGVkZXYsIGkpKSB7Ci0JCQllaXNhX3JlbGVhc2VfcmVzb3VyY2VzIChlZGV2KTsKLQkJCWtmcmVlIChlZGV2KTsKKwkJaWYgKGVpc2FfaW5pdF9kZXZpY2Uocm9vdCwgZWRldiwgaSkpIHsKKwkJCWVpc2FfcmVsZWFzZV9yZXNvdXJjZXMoZWRldik7CisJCQlrZnJlZShlZGV2KTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCQotCQlwcmludGsgKEtFUk5fSU5GTyAiRUlTQTogc2xvdCAlZCA6ICVzIGRldGVjdGVkIiwKLQkJCWksIGVkZXYtPmlkLnNpZyk7CisJCXByaW50ayhLRVJOX0lORk8gIkVJU0E6IHNsb3QgJWQgOiAlcyBkZXRlY3RlZCIsCisJCSAgICAgICBpLCBlZGV2LT5pZC5zaWcpOwogCQkJCiAJCXN3aXRjaCAoZWRldi0+c3RhdGUpIHsKIAkJY2FzZSBFSVNBX0NPTkZJR19FTkFCTEVEIHwgRUlTQV9DT05GSUdfRk9SQ0VEOgotCQkJcHJpbnRrICgiIChmb3JjZWQgZW5hYmxlZCkiKTsKKwkJCXByaW50aygiIChmb3JjZWQgZW5hYmxlZCkiKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgRUlTQV9DT05GSUdfRk9SQ0VEOgotCQkJcHJpbnRrICgiIChmb3JjZWQgZGlzYWJsZWQpIik7CisJCQlwcmludGsoIiAoZm9yY2VkIGRpc2FibGVkKSIpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSAwOgotCQkJcHJpbnRrICgiIChkaXNhYmxlZCkiKTsKKwkJCXByaW50aygiIChkaXNhYmxlZCkiKTsKIAkJCWJyZWFrOwogCQl9CiAJCQkKQEAgLTM4MSwxNSArMzk3LDE1IEBACiAKIAkJYysrOwogCi0JCWlmIChlaXNhX3JlZ2lzdGVyX2RldmljZSAoZWRldikpIHsKLQkJCXByaW50ayAoS0VSTl9FUlIgIkVJU0E6IEZhaWxlZCB0byByZWdpc3RlciAlc1xuIiwKLQkJCQllZGV2LT5pZC5zaWcpOwotCQkJZWlzYV9yZWxlYXNlX3Jlc291cmNlcyAoZWRldik7Ci0JCQlrZnJlZSAoZWRldik7CisJCWlmIChlaXNhX3JlZ2lzdGVyX2RldmljZShlZGV2KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJFSVNBOiBGYWlsZWQgdG8gcmVnaXN0ZXIgJXNcbiIsCisJCQkgICAgICAgZWRldi0+aWQuc2lnKTsKKwkJCWVpc2FfcmVsZWFzZV9yZXNvdXJjZXMoZWRldik7CisJCQlrZnJlZShlZGV2KTsKIAkJfQogICAgICAgICB9CiAKLSAgICAgICAgcHJpbnRrIChLRVJOX0lORk8gIkVJU0E6IERldGVjdGVkICVkIGNhcmQlcy5cbiIsIGMsIGMgPT0gMSA/ICIiIDogInMiKTsKKwlwcmludGsoS0VSTl9JTkZPICJFSVNBOiBEZXRlY3RlZCAlZCBjYXJkJXMuXG4iLCBjLCBjID09IDEgPyAiIiA6ICJzIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQwMyw3ICs0MTksNyBAQAogCiBzdGF0aWMgaW50IGVpc2FfYnVzX2NvdW50OwogCi1pbnQgX19pbml0IGVpc2Ffcm9vdF9yZWdpc3RlciAoc3RydWN0IGVpc2Ffcm9vdF9kZXZpY2UgKnJvb3QpCitpbnQgX19pbml0IGVpc2Ffcm9vdF9yZWdpc3RlcihzdHJ1Y3QgZWlzYV9yb290X2RldmljZSAqcm9vdCkKIHsKIAlpbnQgZXJyOwogCkBAIC00MTcsMzUgKzQzMywzNSBAQAogCXJvb3QtPmVpc2Ffcm9vdF9yZXMuZW5kICAgPSByb290LT5yZXMtPmVuZDsKIAlyb290LT5laXNhX3Jvb3RfcmVzLmZsYWdzID0gSU9SRVNPVVJDRV9CVVNZOwogCi0JaWYgKChlcnIgPSByZXF1ZXN0X3Jlc291cmNlICgmZWlzYV9yb290X3JlcywgJnJvb3QtPmVpc2Ffcm9vdF9yZXMpKSkKKwllcnIgPSByZXF1ZXN0X3Jlc291cmNlKCZlaXNhX3Jvb3RfcmVzLCAmcm9vdC0+ZWlzYV9yb290X3Jlcyk7CisJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAkKIAlyb290LT5idXNfbnIgPSBlaXNhX2J1c19jb3VudCsrOwogCi0JaWYgKChlcnIgPSBlaXNhX3Byb2JlIChyb290KSkpCi0JCXJlbGVhc2VfcmVzb3VyY2UgKCZyb290LT5laXNhX3Jvb3RfcmVzKTsKKwllcnIgPSBlaXNhX3Byb2JlKHJvb3QpOworCWlmIChlcnIpCisJCXJlbGVhc2VfcmVzb3VyY2UoJnJvb3QtPmVpc2Ffcm9vdF9yZXMpOwogCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2luaXQgZWlzYV9pbml0ICh2b2lkKQorc3RhdGljIGludCBfX2luaXQgZWlzYV9pbml0KHZvaWQpCiB7CiAJaW50IHI7CiAJCi0JaWYgKChyID0gYnVzX3JlZ2lzdGVyICgmZWlzYV9idXNfdHlwZSkpKQorCXIgPSBidXNfcmVnaXN0ZXIoJmVpc2FfYnVzX3R5cGUpOworCWlmIChyKQogCQlyZXR1cm4gcjsKIAotCXByaW50ayAoS0VSTl9JTkZPICJFSVNBIGJ1cyByZWdpc3RlcmVkXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJFSVNBIGJ1cyByZWdpc3RlcmVkXG4iKTsKIAlyZXR1cm4gMDsKIH0KIAogbW9kdWxlX3BhcmFtX2FycmF5KGVuYWJsZV9kZXYsIGludCwgJmVuYWJsZV9kZXZfY291bnQsIDA0NDQpOwogbW9kdWxlX3BhcmFtX2FycmF5KGRpc2FibGVfZGV2LCBpbnQsICZkaXNhYmxlX2Rldl9jb3VudCwgMDQ0NCk7CiAKLXBvc3Rjb3JlX2luaXRjYWxsIChlaXNhX2luaXQpOworcG9zdGNvcmVfaW5pdGNhbGwoZWlzYV9pbml0KTsKIAogaW50IEVJU0FfYnVzOwkJLyogZm9yIGxlZ2FjeSBkcml2ZXJzICovCi1FWFBPUlRfU1lNQk9MIChFSVNBX2J1cyk7Ci1FWFBPUlRfU1lNQk9MIChlaXNhX2J1c190eXBlKTsKLUVYUE9SVF9TWU1CT0wgKGVpc2FfZHJpdmVyX3JlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0wgKGVpc2FfZHJpdmVyX3VucmVnaXN0ZXIpOworRVhQT1JUX1NZTUJPTChFSVNBX2J1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL21lbW1hcC5jIGIvZHJpdmVycy9maXJtd2FyZS9tZW1tYXAuYwppbmRleCA1NmY5MjM0Li4yMGY2NDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL21lbW1hcC5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvbWVtbWFwLmMKQEAgLTEyMiwyOSArMTIyLDUzIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBBZGQgbWVtbWFwIGVudHJ5IG9uIHN5c2ZzCisgKi8KK3N0YXRpYyBpbnQgYWRkX3N5c2ZzX2Z3X21hcF9lbnRyeShzdHJ1Y3QgZmlybXdhcmVfbWFwX2VudHJ5ICplbnRyeSkKK3sKKwlzdGF0aWMgaW50IG1hcF9lbnRyaWVzX25yOworCXN0YXRpYyBzdHJ1Y3Qga3NldCAqbW1hcF9rc2V0OworCisJaWYgKCFtbWFwX2tzZXQpIHsKKwkJbW1hcF9rc2V0ID0ga3NldF9jcmVhdGVfYW5kX2FkZCgibWVtbWFwIiwgTlVMTCwgZmlybXdhcmVfa29iaik7CisJCWlmICghbW1hcF9rc2V0KQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZW50cnktPmtvYmoua3NldCA9IG1tYXBfa3NldDsKKwlpZiAoa29iamVjdF9hZGQoJmVudHJ5LT5rb2JqLCBOVUxMLCAiJWQiLCBtYXBfZW50cmllc19ucisrKSkKKwkJa29iamVjdF9wdXQoJmVudHJ5LT5rb2JqKTsKKworCXJldHVybiAwOworfQorCiAvKioKLSAqIGZpcm13YXJlX21hcF9hZGQoKSAtIEFkZHMgYSBmaXJtd2FyZSBtYXBwaW5nIGVudHJ5LgorICogZmlybXdhcmVfbWFwX2FkZF9ob3RwbHVnKCkgLSBBZGRzIGEgZmlybXdhcmUgbWFwcGluZyBlbnRyeSB3aGVuIHdlIGRvCisgKiBtZW1vcnkgaG90cGx1Zy4KICAqIEBzdGFydDogU3RhcnQgb2YgdGhlIG1lbW9yeSByYW5nZS4KICAqIEBlbmQ6ICAgRW5kIG9mIHRoZSBtZW1vcnkgcmFuZ2UgKGluY2x1c2l2ZSkuCiAgKiBAdHlwZTogIFR5cGUgb2YgdGhlIG1lbW9yeSByYW5nZS4KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIHVzZXMga21hbGxvYygpIGZvciBtZW1vcnkKLSAqIGFsbG9jYXRpb24uIFVzZSBmaXJtd2FyZV9tYXBfYWRkX2Vhcmx5KCkgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBib290bWVtCi0gKiBhbGxvY2F0b3IuCi0gKgotICogVGhhdCBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgbGF0ZV9pbml0Y2FsbC4KKyAqIEFkZHMgYSBmaXJtd2FyZSBtYXBwaW5nIGVudHJ5LiBUaGlzIGZ1bmN0aW9uIGlzIGZvciBtZW1vcnkgaG90cGx1ZywgaXQgaXMKKyAqIHNpbWlsYXIgdG8gZnVuY3Rpb24gZmlybXdhcmVfbWFwX2FkZF9lYXJseSgpLiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQKKyAqIGl0IHdpbGwgY3JlYXRlIHRoZSBzeWZzIGVudHJ5IGR5bmFtaWNhbGx5LgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvciAtRU5PTUVNIGlmIG5vIG1lbW9yeSBjb3VsZCBiZSBhbGxvY2F0ZWQuCiAgKiovCi1pbnQgZmlybXdhcmVfbWFwX2FkZCh1NjQgc3RhcnQsIHU2NCBlbmQsIGNvbnN0IGNoYXIgKnR5cGUpCitpbnQgX19tZW1pbml0IGZpcm13YXJlX21hcF9hZGRfaG90cGx1Zyh1NjQgc3RhcnQsIHU2NCBlbmQsIGNvbnN0IGNoYXIgKnR5cGUpCiB7CiAJc3RydWN0IGZpcm13YXJlX21hcF9lbnRyeSAqZW50cnk7CiAKLQllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBmaXJtd2FyZV9tYXBfZW50cnkpLCBHRlBfQVRPTUlDKTsKKwllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmaXJtd2FyZV9tYXBfZW50cnkpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWVudHJ5KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJldHVybiBmaXJtd2FyZV9tYXBfYWRkX2VudHJ5KHN0YXJ0LCBlbmQsIHR5cGUsIGVudHJ5KTsKKwlmaXJtd2FyZV9tYXBfYWRkX2VudHJ5KHN0YXJ0LCBlbmQsIHR5cGUsIGVudHJ5KTsKKwkvKiBjcmVhdGUgdGhlIG1lbW1hcCBlbnRyeSAqLworCWFkZF9zeXNmc19md19tYXBfZW50cnkoZW50cnkpOworCisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMTU0LDcgKzE3OCw3IEBACiAgKiBAdHlwZTogIFR5cGUgb2YgdGhlIG1lbW9yeSByYW5nZS4KICAqCiAgKiBBZGRzIGEgZmlybXdhcmUgbWFwcGluZyBlbnRyeS4gVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBib290bWVtIGFsbG9jYXRvcgotICogZm9yIG1lbW9yeSBhbGxvY2F0aW9uLiBVc2UgZmlybXdhcmVfbWFwX2FkZCgpIGlmIHlvdSB3YW50IHRvIHVzZSBrbWFsbG9jKCkuCisgKiBmb3IgbWVtb3J5IGFsbG9jYXRpb24uCiAgKgogICogVGhhdCBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgbGF0ZV9pbml0Y2FsbC4KICAqCkBAIC0yMTQsMTkgKzIzOCwxMCBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBtZW1tYXBfaW5pdCh2b2lkKQogewotCWludCBpID0gMDsKIAlzdHJ1Y3QgZmlybXdhcmVfbWFwX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3Qga3NldCAqbWVtbWFwX2tzZXQ7CiAKLQltZW1tYXBfa3NldCA9IGtzZXRfY3JlYXRlX2FuZF9hZGQoIm1lbW1hcCIsIE5VTEwsIGZpcm13YXJlX2tvYmopOwotCWlmIChXQVJOX09OKCFtZW1tYXBfa3NldCkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJm1hcF9lbnRyaWVzLCBsaXN0KSB7Ci0JCWVudHJ5LT5rb2JqLmtzZXQgPSBtZW1tYXBfa3NldDsKLQkJaWYgKGtvYmplY3RfYWRkKCZlbnRyeS0+a29iaiwgTlVMTCwgIiVkIiwgaSsrKSkKLQkJCWtvYmplY3RfcHV0KCZlbnRyeS0+a29iaik7Ci0JfQorCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZtYXBfZW50cmllcywgbGlzdCkKKwkJYWRkX3N5c2ZzX2Z3X21hcF9lbnRyeShlbnRyeSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9LY29uZmlnIGIvZHJpdmVycy9ncGlvL0tjb25maWcKaW5kZXggMWYxZDg4YS4uZmVlNjc4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL0tjb25maWcKKysrIGIvZHJpdmVycy9ncGlvL0tjb25maWcKQEAgLTY1LDggKzY1LDE3IEBACiAKICMgcHV0IGV4cGFuZGVycyBpbiB0aGUgcmlnaHQgc2VjdGlvbiwgaW4gYWxwaGFiZXRpY2FsIG9yZGVyCiAKK2NvbmZpZyBHUElPX01BWDczMFgKKwl0cmlzdGF0ZQorCiBjb21tZW50ICJNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOiIKIAorY29uZmlnIEdQSU9fSVQ4NzYxRQorCXRyaXN0YXRlICJJVDg3NjFFIEdQSU8gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEdQSU9MSUIKKwloZWxwCisJICBTYXkgeWVzIGhlcmUgdG8gc3VwcG9ydCBHUElPIGZ1bmN0aW9uYWxpdHkgb2YgSVQ4NzYxRSBzdXBlciBJL08gY2hpcC4KKwogY29uZmlnIEdQSU9fUEwwNjEKIAlib29sICJQcmltZUNlbGwgUEwwNjEgR1BJTyBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJNX0FNQkEKQEAgLTg1LDggKzk0LDMyIEBACiAJaGVscAogCSAgU2F5IHllcyBoZXJlIHRvIHN1cHBvcnQgdGhlIE5FQyBWUjQxMDAgc2VyaWVzIEdlbmVyYWwtcHVycG9zZSBJL08gVWludAogCitjb25maWcgR1BJT19TQ0gKKwl0cmlzdGF0ZSAiSW50ZWwgU0NIIEdQSU8iCisJZGVwZW5kcyBvbiBHUElPTElCICYmIFBDSQorCXNlbGVjdCBNRkRfQ09SRQorCXNlbGVjdCBMUENfU0NICisJaGVscAorCSAgU2F5IHllcyBoZXJlIHRvIHN1cHBvcnQgR1BJTyBpbnRlcmZhY2Ugb24gSW50ZWwgUG91bHNibyBTQ0guCisJICBUaGUgSW50ZWwgU0NIIGNvbnRhaW5zIGEgdG90YWwgb2YgMTQgR1BJTyBwaW5zLiBUZW4gR1BJT3MgYXJlCisJICBwb3dlcmVkIGJ5IHRoZSBjb3JlIHBvd2VyIHJhaWwgYW5kIGFyZSB0dXJuZWQgb2ZmIGR1cmluZyBzbGVlcAorCSAgbW9kZXMgKFMzIGFuZCBoaWdoZXIpLiBUaGUgcmVtYWluaW5nIGZvdXIgR1BJT3MgYXJlIHBvd2VyZWQgYnkKKwkgIHRoZSBJbnRlbCBTQ0ggc3VzcGVuZCBwb3dlciBzdXBwbHkuIFRoZXNlIEdQSU9zIHJlbWFpbgorCSAgYWN0aXZlIGR1cmluZyBTMy4gVGhlIHN1c3BlbmQgcG93ZXJlZCBHUElPcyBjYW4gYmUgdXNlZCB0byB3YWtlIHRoZQorCSAgc3lzdGVtIGZyb20gdGhlIFN1c3BlbmQtdG8tUkFNIHN0YXRlLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHNjaC1ncGlvLgorCiBjb21tZW50ICJJMkMgR1BJTyBleHBhbmRlcnM6IgogCitjb25maWcgR1BJT19NQVg3MzAwCisJdHJpc3RhdGUgIk1heGltIE1BWDczMDAgR1BJTyBleHBhbmRlciIKKwlkZXBlbmRzIG9uIEkyQworCXNlbGVjdCBHUElPX01BWDczMFgKKwloZWxwCisJICBHUElPIGRyaXZlciBmb3IgTWF4aW0gTUFYNzMwMSBJMkMtYmFzZWQgR1BJTyBleHBhbmRlci4KKwogY29uZmlnIEdQSU9fTUFYNzMyWAogCXRyaXN0YXRlICJNQVg3MzE5LCBNQVg3MzIwLTczMjcgSTJDIFBvcnQgRXhwYW5kZXJzIgogCWRlcGVuZHMgb24gSTJDCkBAIC0xMjQsNiArMTU3LDEzIEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBwY2E5NTN4LgogCitjb25maWcgR1BJT19QQ0E5NTNYX0lSUQorCWJvb2wgIkludGVycnVwdCBjb250cm9sbGVyIHN1cHBvcnQgZm9yIFBDQTk1M3giCisJZGVwZW5kcyBvbiBHUElPX1BDQTk1M1g9eQorCWhlbHAKKwkgIFNheSB5ZXMgaGVyZSB0byBlbmFibGUgdGhlIHBjYTk1M3ggdG8gYmUgdXNlZCBhcyBhbiBpbnRlcnJ1cHQKKwkgIGNvbnRyb2xsZXIuIEl0IHJlcXVpcmVzIHRoZSBkcml2ZXIgdG8gYmUgYnVpbHQgaW4gdGhlIGtlcm5lbC4KKwogY29uZmlnIEdQSU9fUENGODU3WAogCXRyaXN0YXRlICJQQ0Y4NTd4LCBQQ0F7ODUsOTZ9N3gsIGFuZCBNQVg3MzJbODldIEkyQyBHUElPIGV4cGFuZGVycyIKIAlkZXBlbmRzIG9uIEkyQwpAQCAtMTYyLDYgKzIwMiwyMCBAQAogCSAgU2F5IHllcyBoZXJlIHRvIGFjY2VzcyB0aGUgR1BJTyBzaWduYWxzIG9mIFdNODMxeCBwb3dlciBtYW5hZ2VtZW50CiAJICBjaGlwcyBmcm9tIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcy4KIAorY29uZmlnIEdQSU9fV004MzUwCisJdHJpc3RhdGUgIldNODM1MCBHUElPcyIKKwlkZXBlbmRzIG9uIE1GRF9XTTgzNTAKKwloZWxwCisJICBTYXkgeWVzIGhlcmUgdG8gYWNjZXNzIHRoZSBHUElPIHNpZ25hbHMgb2YgV004MzUwIHBvd2VyIG1hbmFnZW1lbnQKKwkgIGNoaXBzIGZyb20gV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzLgorCitjb25maWcgR1BJT19XTTg5OTQKKwl0cmlzdGF0ZSAiV004OTk0IEdQSU9zIgorCWRlcGVuZHMgb24gTUZEX1dNODk5NAorCWhlbHAKKwkgIFNheSB5ZXMgaGVyZSB0byBhY2Nlc3MgdGhlIEdQSU8gc2lnbmFscyBvZiBXTTg5OTQgYXVkaW8gaHViCisJICBDT0RFQ3MgZnJvbSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MuCisKIGNvbmZpZyBHUElPX0FEUDU1MjAKIAl0cmlzdGF0ZSAiR1BJTyBTdXBwb3J0IGZvciBBRFA1NTIwIFBNSUMiCiAJZGVwZW5kcyBvbiBQTUlDX0FEUDU1MjAKQEAgLTIyNiw4ICsyODAsOSBAQAogY29uZmlnIEdQSU9fTUFYNzMwMQogCXRyaXN0YXRlICJNYXhpbSBNQVg3MzAxIEdQSU8gZXhwYW5kZXIiCiAJZGVwZW5kcyBvbiBTUElfTUFTVEVSCisJc2VsZWN0IEdQSU9fTUFYNzMwWAogCWhlbHAKLQkgIGdwaW8gZHJpdmVyIGZvciBNYXhpbSBNQVg3MzAxIFNQSSBHUElPIGV4cGFuZGVyLgorCSAgR1BJTyBkcml2ZXIgZm9yIE1heGltIE1BWDczMDEgU1BJLWJhc2VkIEdQSU8gZXhwYW5kZXIuCiAKIGNvbmZpZyBHUElPX01DUDIzUzA4CiAJdHJpc3RhdGUgIk1pY3JvY2hpcCBNQ1AyM1MwOCBJL08gZXhwYW5kZXIiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vTWFrZWZpbGUgYi9kcml2ZXJzL2dwaW8vTWFrZWZpbGUKaW5kZXggNDg2ODcyMy4uMTBmM2Y4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZQpAQCAtNyw2ICs3LDggQEAKIG9iai0kKENPTkZJR19HUElPX0FEUDU1MjApCSs9IGFkcDU1MjAtZ3Bpby5vCiBvYmotJChDT05GSUdfR1BJT19BRFA1NTg4KQkrPSBhZHA1NTg4LWdwaW8ubwogb2JqLSQoQ09ORklHX0dQSU9fTEFOR1dFTEwpCSs9IGxhbmd3ZWxsX2dwaW8ubworb2JqLSQoQ09ORklHX0dQSU9fTUFYNzMwWCkJKz0gbWF4NzMweC5vCitvYmotJChDT05GSUdfR1BJT19NQVg3MzAwKQkrPSBtYXg3MzAwLm8KIG9iai0kKENPTkZJR19HUElPX01BWDczMDEpCSs9IG1heDczMDEubwogb2JqLSQoQ09ORklHX0dQSU9fTUFYNzMyWCkJKz0gbWF4NzMyeC5vCiBvYmotJChDT05GSUdfR1BJT19NQzMzODgwKQkrPSBtYzMzODgwLm8KQEAgLTIwLDUgKzIyLDkgQEAKIG9iai0kKENPTkZJR19HUElPX1hJTElOWCkJKz0geGlsaW54X2dwaW8ubwogb2JqLSQoQ09ORklHX0dQSU9fQ1M1NTM1KQkrPSBjczU1MzUtZ3Bpby5vCiBvYmotJChDT05GSUdfR1BJT19CVDhYWCkJKz0gYnQ4eHhncGlvLm8KK29iai0kKENPTkZJR19HUElPX0lUODc2MUUpCSs9IGl0ODc2MWVfZ3Bpby5vCiBvYmotJChDT05GSUdfR1BJT19WUjQxWFgpCSs9IHZyNDF4eF9naXUubwogb2JqLSQoQ09ORklHX0dQSU9fV004MzFYKQkrPSB3bTgzMXgtZ3Bpby5vCitvYmotJChDT05GSUdfR1BJT19XTTgzNTApCSs9IHdtODM1MC1ncGlvbGliLm8KK29iai0kKENPTkZJR19HUElPX1dNODk5NCkJKz0gd204OTk0LWdwaW8ubworb2JqLSQoQ09ORklHX0dQSU9fU0NIKQkJKz0gc2NoX2dwaW8ubwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9jczU1MzUtZ3Bpby5jIGIvZHJpdmVycy9ncGlvL2NzNTUzNS1ncGlvLmMKaW5kZXggMGZkYmU5NC4uMGMzYzQ5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2NzNTUzNS1ncGlvLmMKKysrIGIvZHJpdmVycy9ncGlvL2NzNTUzNS1ncGlvLmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogCiBzdGF0aWMgaW50IGNoaXBfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewotCXJldHVybiBjczU1MzVfZ3Bpb19pc3NldChvZmZzZXQsIEdQSU9fT1VUUFVUX1ZBTCk7CisJcmV0dXJuIGNzNTUzNV9ncGlvX2lzc2V0KG9mZnNldCwgR1BJT19SRUFEX0JBQ0spOwogfQogCiBzdGF0aWMgdm9pZCBjaGlwX2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbCkKQEAgLTE3Miw2ICsxNzIsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKIAlfX2NzNTUzNV9ncGlvX3NldChjaGlwLCBvZmZzZXQsIEdQSU9fSU5QVVRfRU5BQkxFKTsKKwlfX2NzNTUzNV9ncGlvX2NsZWFyKGNoaXAsIG9mZnNldCwgR1BJT19PVVRQVVRfRU5BQkxFKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKQEAgLTE4NCw2ICsxODUsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKIAorCV9fY3M1NTM1X2dwaW9fc2V0KGNoaXAsIG9mZnNldCwgR1BJT19JTlBVVF9FTkFCTEUpOwogCV9fY3M1NTM1X2dwaW9fc2V0KGNoaXAsIG9mZnNldCwgR1BJT19PVVRQVVRfRU5BQkxFKTsKIAlpZiAodmFsKQogCQlfX2NzNTUzNV9ncGlvX3NldChjaGlwLCBvZmZzZXQsIEdQSU9fT1VUUFVUX1ZBTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jIGIvZHJpdmVycy9ncGlvL2dwaW9saWIuYwppbmRleCAzNTA4NDJhLi45MDA2ZmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKQEAgLTEyMzcsNiArMTIzNyw2NCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ3Bpb19mcmVlKTsKIAorLyoqCisgKiBncGlvX3JlcXVlc3Rfb25lIC0gcmVxdWVzdCBhIHNpbmdsZSBHUElPIHdpdGggaW5pdGlhbCBjb25maWd1cmF0aW9uCisgKiBAZ3BpbzoJdGhlIEdQSU8gbnVtYmVyCisgKiBAZmxhZ3M6CUdQSU8gY29uZmlndXJhdGlvbiBhcyBzcGVjaWZpZWQgYnkgR1BJT0ZfKgorICogQGxhYmVsOglhIGxpdGVyYWwgZGVzY3JpcHRpb24gc3RyaW5nIG9mIHRoaXMgR1BJTworICovCitpbnQgZ3Bpb19yZXF1ZXN0X29uZSh1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpsYWJlbCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gZ3Bpb19yZXF1ZXN0KGdwaW8sIGxhYmVsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKGZsYWdzICYgR1BJT0ZfRElSX0lOKQorCQllcnIgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvKTsKKwllbHNlCisJCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvLAorCQkJCShmbGFncyAmIEdQSU9GX0lOSVRfSElHSCkgPyAxIDogMCk7CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZ3Bpb19yZXF1ZXN0X29uZSk7CisKKy8qKgorICogZ3Bpb19yZXF1ZXN0X2FycmF5IC0gcmVxdWVzdCBtdWx0aXBsZSBHUElPcyBpbiBhIHNpbmdsZSBjYWxsCisgKiBAYXJyYXk6CWFycmF5IG9mIHRoZSAnc3RydWN0IGdwaW8nCisgKiBAbnVtOglob3cgbWFueSBHUElPcyBpbiB0aGUgYXJyYXkKKyAqLworaW50IGdwaW9fcmVxdWVzdF9hcnJheShzdHJ1Y3QgZ3BpbyAqYXJyYXksIHNpemVfdCBudW0pCit7CisJaW50IGksIGVycjsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKywgYXJyYXkrKykgeworCQllcnIgPSBncGlvX3JlcXVlc3Rfb25lKGFycmF5LT5ncGlvLCBhcnJheS0+ZmxhZ3MsIGFycmF5LT5sYWJlbCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9mcmVlOworCX0KKwlyZXR1cm4gMDsKKworZXJyX2ZyZWU6CisJd2hpbGUgKGktLSkKKwkJZ3Bpb19mcmVlKCgtLWFycmF5KS0+Z3Bpbyk7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGdwaW9fcmVxdWVzdF9hcnJheSk7CisKKy8qKgorICogZ3Bpb19mcmVlX2FycmF5IC0gcmVsZWFzZSBtdWx0aXBsZSBHUElPcyBpbiBhIHNpbmdsZSBjYWxsCisgKiBAYXJyYXk6CWFycmF5IG9mIHRoZSAnc3RydWN0IGdwaW8nCisgKiBAbnVtOglob3cgbWFueSBHUElPcyBpbiB0aGUgYXJyYXkKKyAqLwordm9pZCBncGlvX2ZyZWVfYXJyYXkoc3RydWN0IGdwaW8gKmFycmF5LCBzaXplX3QgbnVtKQoreworCXdoaWxlIChudW0tLSkKKwkJZ3Bpb19mcmVlKChhcnJheSsrKS0+Z3Bpbyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChncGlvX2ZyZWVfYXJyYXkpOwogCiAvKioKICAqIGdwaW9jaGlwX2lzX3JlcXVlc3RlZCAtIHJldHVybiBzdHJpbmcgaWZmIHNpZ25hbCB3YXMgcmVxdWVzdGVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vaXQ4NzYxZV9ncGlvLmMgYi9kcml2ZXJzL2dwaW8vaXQ4NzYxZV9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUzMjE5YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3Bpby9pdDg3NjFlX2dwaW8uYwpAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqICBpdDg3NjFfZ3Bpby5jIC0gR1BJTyBpbnRlcmZhY2UgZm9yIElUODc2MUUgU3VwZXIgSS9PIGNoaXAKKyAqCisgKiAgQXV0aG9yOiBEZW5pcyBUdXJpc2NoZXYgPGRlbmlzQGNvbXB1bGFiLmNvLmlsPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2RlZmluZSBTSU9fQ0hJUF9JRAkJMHg4NzYxCisjZGVmaW5lIENISVBfSURfSElHSF9CWVRFCTB4MjAKKyNkZWZpbmUgQ0hJUF9JRF9MT1dfQllURQkweDIxCisKK3N0YXRpYyB1OCBwb3J0c1syXSA9IHsgMHgyZSwgMHg0ZSB9Oworc3RhdGljIHU4IHBvcnQ7CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2lvX2xvY2spOworCisjZGVmaW5lIEdQSU9fTkFNRQkJIml0ODc2MS1ncGlvIgorI2RlZmluZSBHUElPX0JBX0hJR0hfQllURQkweDYwCisjZGVmaW5lIEdQSU9fQkFfTE9XX0JZVEUJMHg2MQorI2RlZmluZSBHUElPX0lPU0laRQkJNAorI2RlZmluZSBHUElPMVhfSU8JCTB4ZjAKKyNkZWZpbmUgR1BJTzJYX0lPCQkweGYxCisKK3N0YXRpYyB1MTYgZ3Bpb19iYTsKKworc3RhdGljIHU4IHJlYWRfcmVnKHU4IGFkZHIsIHU4IHBvcnQpCit7CisJb3V0YihhZGRyLCBwb3J0KTsKKwlyZXR1cm4gaW5iKHBvcnQgKyAxKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfcmVnKHU4IGRhdGEsIHU4IGFkZHIsIHU4IHBvcnQpCit7CisJb3V0YihhZGRyLCBwb3J0KTsKKwlvdXRiKGRhdGEsIHBvcnQgKyAxKTsKK30KKworc3RhdGljIHZvaWQgZW50ZXJfY29uZl9tb2RlKHU4IHBvcnQpCit7CisJb3V0YigweDg3LCBwb3J0KTsKKwlvdXRiKDB4NjEsIHBvcnQpOworCW91dGIoMHg1NSwgcG9ydCk7CisJb3V0YigocG9ydCA9PSAweDJlKSA/IDB4NTUgOiAweGFhLCBwb3J0KTsKK30KKworc3RhdGljIHZvaWQgZXhpdF9jb25mX21vZGUodTggcG9ydCkKK3sKKwlvdXRiKDB4MiwgcG9ydCk7CisJb3V0YigweDIsIHBvcnQgKyAxKTsKK30KKworc3RhdGljIHZvaWQgZW50ZXJfZ3Bpb19tb2RlKHU4IHBvcnQpCit7CisJd3JpdGVfcmVnKDB4MiwgMHg3LCBwb3J0KTsKK30KKworc3RhdGljIGludCBpdDg3NjFlX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBncGlvX251bSkKK3sKKwl1MTYgcmVnOworCXU4IGJpdDsKKworCWJpdCA9IGdwaW9fbnVtICUgNzsKKwlyZWcgPSAoZ3Bpb19udW0gPj0gNykgPyBncGlvX2JhICsgMSA6IGdwaW9fYmE7CisKKwlyZXR1cm4gISEoaW5iKHJlZykgJiAoMSA8PCBiaXQpKTsKK30KKworc3RhdGljIGludCBpdDg3NjFlX2dwaW9fZGlyZWN0aW9uX2luKHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBncGlvX251bSkKK3sKKwl1OCBjdXJyX2RpcnM7CisJdTggaW9fcmVnLCBiaXQ7CisKKwliaXQgPSBncGlvX251bSAlIDc7CisJaW9fcmVnID0gKGdwaW9fbnVtID49IDcpID8gR1BJTzJYX0lPIDogR1BJTzFYX0lPOworCisJc3Bpbl9sb2NrKCZzaW9fbG9jayk7CisKKwllbnRlcl9jb25mX21vZGUocG9ydCk7CisJZW50ZXJfZ3Bpb19tb2RlKHBvcnQpOworCisJY3Vycl9kaXJzID0gcmVhZF9yZWcoaW9fcmVnLCBwb3J0KTsKKworCWlmIChjdXJyX2RpcnMgJiAoMSA8PCBiaXQpKQorCQl3cml0ZV9yZWcoY3Vycl9kaXJzICYgfigxIDw8IGJpdCksIGlvX3JlZywgcG9ydCk7CisKKwlleGl0X2NvbmZfbW9kZShwb3J0KTsKKworCXNwaW5fdW5sb2NrKCZzaW9fbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGl0ODc2MWVfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsCisJCQkJdW5zaWduZWQgZ3Bpb19udW0sIGludCB2YWwpCit7CisJdTggY3Vycl92YWxzLCBiaXQ7CisJdTE2IHJlZzsKKworCWJpdCA9IGdwaW9fbnVtICUgNzsKKwlyZWcgPSAoZ3Bpb19udW0gPj0gNykgPyBncGlvX2JhICsgMSA6IGdwaW9fYmE7CisKKwlzcGluX2xvY2soJnNpb19sb2NrKTsKKworCWN1cnJfdmFscyA9IGluYihyZWcpOworCWlmICh2YWwpCisJCW91dGIoY3Vycl92YWxzIHwgKDEgPDwgYml0KSAsIHJlZyk7CisJZWxzZQorCQlvdXRiKGN1cnJfdmFscyAmIH4oMSA8PCBiaXQpLCByZWcpOworCisJc3Bpbl91bmxvY2soJnNpb19sb2NrKTsKK30KKworc3RhdGljIGludCBpdDg3NjFlX2dwaW9fZGlyZWN0aW9uX291dChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywKKwkJCQkJdW5zaWduZWQgZ3Bpb19udW0sIGludCB2YWwpCit7CisJdTggY3Vycl9kaXJzLCBpb19yZWcsIGJpdDsKKworCWJpdCA9IGdwaW9fbnVtICUgNzsKKwlpb19yZWcgPSAoZ3Bpb19udW0gPj0gNykgPyBHUElPMlhfSU8gOiBHUElPMVhfSU87CisKKwlpdDg3NjFlX2dwaW9fc2V0KGdjLCBncGlvX251bSwgdmFsKTsKKworCXNwaW5fbG9jaygmc2lvX2xvY2spOworCisJZW50ZXJfY29uZl9tb2RlKHBvcnQpOworCWVudGVyX2dwaW9fbW9kZShwb3J0KTsKKworCWN1cnJfZGlycyA9IHJlYWRfcmVnKGlvX3JlZywgcG9ydCk7CisKKwlpZiAoIShjdXJyX2RpcnMgJiAoMSA8PCBiaXQpKSkKKwkJd3JpdGVfcmVnKGN1cnJfZGlycyB8ICgxIDw8IGJpdCksIGlvX3JlZywgcG9ydCk7CisKKwlleGl0X2NvbmZfbW9kZShwb3J0KTsKKworCXNwaW5fdW5sb2NrKCZzaW9fbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19jaGlwIGl0ODc2MWVfZ3Bpb19jaGlwID0geworCS5sYWJlbAkJCT0gR1BJT19OQU1FLAorCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLmdldAkJCT0gaXQ4NzYxZV9ncGlvX2dldCwKKwkuZGlyZWN0aW9uX2lucHV0CT0gaXQ4NzYxZV9ncGlvX2RpcmVjdGlvbl9pbiwKKwkuc2V0CQkJPSBpdDg3NjFlX2dwaW9fc2V0LAorCS5kaXJlY3Rpb25fb3V0cHV0CT0gaXQ4NzYxZV9ncGlvX2RpcmVjdGlvbl9vdXQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpdDg3NjFlX2dwaW9faW5pdCh2b2lkKQoreworCWludCBpLCBpZCwgZXJyOworCisJLyogY2hpcCBhbmQgcG9ydCBkZXRlY3Rpb24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwb3J0cyk7IGkrKykgeworCQlzcGluX2xvY2soJnNpb19sb2NrKTsKKwkJZW50ZXJfY29uZl9tb2RlKHBvcnRzW2ldKTsKKworCQlpZCA9IChyZWFkX3JlZyhDSElQX0lEX0hJR0hfQllURSwgcG9ydHNbaV0pIDw8IDgpICsKKwkJCQlyZWFkX3JlZyhDSElQX0lEX0xPV19CWVRFLCBwb3J0c1tpXSk7CisKKwkJZXhpdF9jb25mX21vZGUocG9ydHNbaV0pOworCQlzcGluX3VubG9jaygmc2lvX2xvY2spOworCisJCWlmIChpZCA9PSBTSU9fQ0hJUF9JRCkgeworCQkJcG9ydCA9IHBvcnRzW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXBvcnQpCisJCXJldHVybiAtRU5PREVWOworCisJLyogZmV0Y2ggR1BJTyBiYXNlIGFkZHJlc3MgKi8KKwllbnRlcl9jb25mX21vZGUocG9ydCk7CisJZW50ZXJfZ3Bpb19tb2RlKHBvcnQpOworCWdwaW9fYmEgPSAocmVhZF9yZWcoR1BJT19CQV9ISUdIX0JZVEUsIHBvcnQpIDw8IDgpICsKKwkJCQlyZWFkX3JlZyhHUElPX0JBX0xPV19CWVRFLCBwb3J0KTsKKwlleGl0X2NvbmZfbW9kZShwb3J0KTsKKworCWlmICghcmVxdWVzdF9yZWdpb24oZ3Bpb19iYSwgR1BJT19JT1NJWkUsIEdQSU9fTkFNRSkpCisJCXJldHVybiAtRUJVU1k7CisKKwlpdDg3NjFlX2dwaW9fY2hpcC5iYXNlID0gLTE7CisJaXQ4NzYxZV9ncGlvX2NoaXAubmdwaW8gPSAxNDsKKworCWVyciA9IGdwaW9jaGlwX2FkZCgmaXQ4NzYxZV9ncGlvX2NoaXApOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGdwaW9jaGlwX2FkZF9lcnI7CisKKwlyZXR1cm4gMDsKKworZ3Bpb2NoaXBfYWRkX2VycjoKKwlyZWxlYXNlX3JlZ2lvbihncGlvX2JhLCBHUElPX0lPU0laRSk7CisJZ3Bpb19iYSA9IDA7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGl0ODc2MWVfZ3Bpb19leGl0KHZvaWQpCit7CisJaWYgKGdwaW9fYmEpIHsKKwkJZ3Bpb2NoaXBfcmVtb3ZlKCZpdDg3NjFlX2dwaW9fY2hpcCk7CisKKwkJcmVsZWFzZV9yZWdpb24oZ3Bpb19iYSwgR1BJT19JT1NJWkUpOworCQlncGlvX2JhID0gMDsKKwl9Cit9Cittb2R1bGVfaW5pdChpdDg3NjFlX2dwaW9faW5pdCk7Cittb2R1bGVfZXhpdChpdDg3NjFlX2dwaW9fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkRlbmlzIFR1cmlzY2hldiA8ZGVuaXNAY29tcHVsYWIuY28uaWw+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkdQSU8gaW50ZXJmYWNlIGZvciBJVDg3NjFFIFN1cGVyIEkvTyBjaGlwIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vbWF4NzMwMC5jIGIvZHJpdmVycy9ncGlvL21heDczMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDc0ZWVmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncGlvL21heDczMDAuYwpAQCAtMCwwICsxLDk0IEBACisvKgorICogZHJpdmVycy9ncGlvL21heDczMDAuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBXb2xmcmFtIFNhbmcsIFBlbmd1dHJvbml4CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBDaGVjayBtYXg3MzB4LmMgZm9yIGZ1cnRoZXIgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL21heDczMDEuaD4KKworc3RhdGljIGludCBtYXg3MzAwX2kyY193cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcsCisJCQkJdW5zaWduZWQgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgbWF4NzMwMF9pMmNfcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKworCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtYXg3MzAwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBtYXg3MzAxICp0czsKKwlpbnQgcmV0OworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsCisJCQlJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVJTzsKKworCXRzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1heDczMDEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRzLT5yZWFkID0gbWF4NzMwMF9pMmNfcmVhZDsKKwl0cy0+d3JpdGUgPSBtYXg3MzAwX2kyY193cml0ZTsKKwl0cy0+ZGV2ID0gJmNsaWVudC0+ZGV2OworCisJcmV0ID0gX19tYXg3MzB4X3Byb2JlKHRzKTsKKwlpZiAocmV0KQorCQlrZnJlZSh0cyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbWF4NzMwMF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlyZXR1cm4gX19tYXg3MzB4X3JlbW92ZSgmY2xpZW50LT5kZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbWF4NzMwMF9pZFtdID0geworCXsgIm1heDczMDAiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIG1heDczMDBfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbWF4NzMwMF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibWF4NzMwMCIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlID0gbWF4NzMwMF9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AobWF4NzMwMF9yZW1vdmUpLAorCS5pZF90YWJsZSA9IG1heDczMDBfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtYXg3MzAwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJm1heDczMDBfZHJpdmVyKTsKK30KK3N1YnN5c19pbml0Y2FsbChtYXg3MzAwX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbWF4NzMwMF9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJm1heDczMDBfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG1heDczMDBfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIldvbGZyYW0gU2FuZyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNQVg3MzAwIEdQSU8tRXhwYW5kZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9tYXg3MzAxLmMgYi9kcml2ZXJzL2dwaW8vbWF4NzMwMS5jCmluZGV4IDQ4MDk1NmYuLjk2NWQ5YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9tYXg3MzAxLmMKKysrIGIvZHJpdmVycy9ncGlvL21heDczMDEuYwpAQCAtMSw5OCArMSw0MSBAQAotLyoqCisvKgogICogZHJpdmVycy9ncGlvL21heDczMDEuYwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNiBKdWVyZ2VuIEJlaXNlcnQsIFBlbmd1dHJvbml4CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggR3Vlbm5hZGkgTGlha2hvdmV0c2tpLCBQZW5ndXRyb25peAorICogQ29weXJpZ2h0IChDKSAyMDA5IFdvbGZyYW0gU2FuZywgUGVuZ3V0cm9uaXgKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKLSAqIFRoZSBNYXhpbSdzIE1BWDczMDEgZGV2aWNlIGlzIGFuIFNQSSBkcml2ZW4gR1BJTyBleHBhbmRlci4gVGhlcmUgYXJlCi0gKiAyOCBHUElPcy4gOCBvZiB0aGVtIGNhbiB0cmlnZ2VyIGFuIGludGVycnVwdC4gU2VlIGRhdGFzaGVldCBmb3IgbW9yZQotICogZGV0YWlscwotICogTm90ZToKLSAqIC0gRElOIG11c3QgYmUgc3RhYmxlIGF0IHRoZSByaXNpbmcgZWRnZSBvZiBjbG9jay4KLSAqIC0gd2hlbiB3cml0aW5nOgotICogICAtIGFsd2F5cyBjbG9jayBpbiAxNiBjbG9ja3MgYXQgb25jZQotICogICAtIGF0IERJTjogRDE1IGZpcnN0LCBEMCBsYXN0Ci0gKiAgIC0gRDAuLkQ3ID0gZGF0YWJ5dGUsIEQ4Li5EMTQgPSBjb21tYW5kYnl0ZQotICogICAtIEQxNSA9IGxvdyAtPiB3cml0ZSBjb21tYW5kCi0gKiAtIHdoZW4gcmVhZGluZwotICogICAtIGFsd2F5cyBjbG9jayBpbiAxNiBjbG9ja3MgYXQgb25jZQotICogICAtIGF0IERJTjogRDE1IGZpcnN0LCBEMCBsYXN0Ci0gKiAgIC0gRDAuLkQ3ID0gZHVtbXksIEQ4Li5EMTQgPSByZWdpc3RlciBhZGRyZXNzCi0gKiAgIC0gRDE1ID0gaGlnaCAtPiByZWFkIGNvbW1hbmQKLSAqICAgLSByYWlzZSBDUyBhbmQgYXNzZXJ0IGl0IGFnYWluCi0gKiAgIC0gYWx3YXlzIGNsb2NrIGluIDE2IGNsb2NrcyBhdCBvbmNlCi0gKiAgIC0gYXQgRE9VVDogRDE1IGZpcnN0LCBEMCBsYXN0Ci0gKiAgIC0gRDAuLkQ3IGNvbnRhaW5zIHRoZSBkYXRhIGZyb20gdGhlIGZpcnN0IGN5Y2xlCi0gKgotICogVGhlIGRyaXZlciBleHBvcnRzIGEgc3RhbmRhcmQgZ3Bpb2NoaXAgaW50ZXJmYWNlCisgKiBDaGVjayBtYXg3MzB4LmMgZm9yIGZ1cnRoZXIgZGV0YWlscy4KICAqLwogCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9tYXg3MzAxLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCi0jZGVmaW5lIERSSVZFUl9OQU1FICJtYXg3MzAxIgotCi0vKgotICogUGluIGNvbmZpZ3VyYXRpb25zLCBzZWUgTUFYNzMwMSBkYXRhc2hlZXQgcGFnZSA2Ci0gKi8KLSNkZWZpbmUgUElOX0NPTkZJR19NQVNLIDB4MDMKLSNkZWZpbmUgUElOX0NPTkZJR19JTl9QVUxMVVAgMHgwMwotI2RlZmluZSBQSU5fQ09ORklHX0lOX1dPX1BVTExVUCAweDAyCi0jZGVmaW5lIFBJTl9DT05GSUdfT1VUIDB4MDEKLQotI2RlZmluZSBQSU5fTlVNQkVSIDI4Ci0KLQotLyoKLSAqIFNvbWUgcmVnaXN0ZXJzIG11c3QgYmUgcmVhZCBiYWNrIHRvIG1vZGlmeS4KLSAqIFRvIHNhdmUgdGltZSB3ZSBjYWNoZSB0aGVtIGhlcmUgaW4gbWVtb3J5Ci0gKi8KLXN0cnVjdCBtYXg3MzAxIHsKLQlzdHJ1Y3QgbXV0ZXgJbG9jazsKLQl1OAkJcG9ydF9jb25maWdbOF07CS8qIGZpZWxkIDAgaXMgdW51c2VkICovCi0JdTMyCQlvdXRfbGV2ZWw7CS8qIGNhY2hlZCBvdXRwdXQgbGV2ZWxzICovCi0Jc3RydWN0IGdwaW9fY2hpcCBjaGlwOwotCXN0cnVjdCBzcGlfZGV2aWNlICpzcGk7Ci19OwotCi0vKioKLSAqIG1heDczMDFfd3JpdGUgLSBXcml0ZSBhIG5ldyByZWdpc3RlciBjb250ZW50Ci0gKiBAc3BpOiBUaGUgU1BJIGRldmljZQotICogQHJlZzogUmVnaXN0ZXIgb2Zmc2V0Ci0gKiBAdmFsOiBWYWx1ZSB0byB3cml0ZQotICoKLSAqIEEgd3JpdGUgdG8gdGhlIE1BWDczMDEgbWVhbnMgb25lIG1lc3NhZ2Ugd2l0aCBvbmUgdHJhbnNmZXIKLSAqCi0gKiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCBvciBhIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yCi0gKi8KLXN0YXRpYyBpbnQgbWF4NzMwMV93cml0ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsKQorLyogQSB3cml0ZSB0byB0aGUgTUFYNzMwMSBtZWFucyBvbmUgbWVzc2FnZSB3aXRoIG9uZSB0cmFuc2ZlciAqLworc3RhdGljIGludCBtYXg3MzAxX3NwaV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcsCisJCQkJdW5zaWduZWQgaW50IHZhbCkKIHsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShkZXYpOwogCXUxNiB3b3JkID0gKChyZWcgJiAweDdGKSA8PCA4KSB8ICh2YWwgJiAweEZGKTsKKwogCXJldHVybiBzcGlfd3JpdGUoc3BpLCAoY29uc3QgdTggKikmd29yZCwgc2l6ZW9mKHdvcmQpKTsKIH0KIAotLyoqCi0gKiBtYXg3MzAxX3JlYWQgLSBSZWFkIGJhY2sgcmVnaXN0ZXIgY29udGVudAotICogQHNwaTogVGhlIFNQSSBkZXZpY2UKLSAqIEByZWc6IFJlZ2lzdGVyIG9mZnNldAotICoKLSAqIEEgcmVhZCBmcm9tIHRoZSBNQVg3MzAxIG1lYW5zIHR3byB0cmFuc2ZlcnM7IGhlcmUsIG9uZSBtZXNzYWdlIGVhY2gKLSAqCi0gKiBSZXR1cm5zIHBvc2l0aXZlIDggYml0IHZhbHVlIGZyb20gZGV2aWNlIGlmIHN1Y2Nlc3NmdWwgb3IgYQotICogbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IKLSAqLwotc3RhdGljIGludCBtYXg3MzAxX3JlYWQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgdW5zaWduZWQgaW50IHJlZykKKy8qIEEgcmVhZCBmcm9tIHRoZSBNQVg3MzAxIG1lYW5zIHR3byB0cmFuc2ZlcnM7IGhlcmUsIG9uZSBtZXNzYWdlIGVhY2ggKi8KKworc3RhdGljIGludCBtYXg3MzAxX3NwaV9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZykKIHsKIAlpbnQgcmV0OwogCXUxNiB3b3JkOworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSB0b19zcGlfZGV2aWNlKGRldik7CiAKIAl3b3JkID0gMHg4MDAwIHwgKHJlZyA8PCA4KTsKIAlyZXQgPSBzcGlfd3JpdGUoc3BpLCAoY29uc3QgdTggKikmd29yZCwgc2l6ZW9mKHdvcmQpKTsKQEAgLTEwOCwxMjUgKzUxLDEzIEBACiAJcmV0dXJuIHdvcmQgJiAweGZmOwogfQogCi1zdGF0aWMgaW50IG1heDczMDFfZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKLXsKLQlzdHJ1Y3QgbWF4NzMwMSAqdHMgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG1heDczMDEsIGNoaXApOwotCXU4ICpjb25maWc7Ci0JaW50IHJldDsKLQotCS8qIEZpcnN0IDQgcGlucyBhcmUgdW51c2VkIGluIHRoZSBjb250cm9sbGVyICovCi0Jb2Zmc2V0ICs9IDQ7Ci0KLQljb25maWcgPSAmdHMtPnBvcnRfY29uZmlnW29mZnNldCA+PiAyXTsKLQotCW11dGV4X2xvY2soJnRzLT5sb2NrKTsKLQotCS8qIFN0YW5kYXJkIEdQSU8gQVBJIGRvZXNuJ3Qgc3VwcG9ydCBwdWxsLXVwcywgaGFzIHRvIGJlIGV4dGVuZGVkLgotCSAqIEhhcmQtY29kaW5nIG5vIHBvbGx1cCBmb3Igbm93LiAqLwotCSpjb25maWcgPSAoKmNvbmZpZyAmIH4oMyA8PCAob2Zmc2V0ICYgMykpKSB8ICgxIDw8IChvZmZzZXQgJiAzKSk7Ci0KLQlyZXQgPSBtYXg3MzAxX3dyaXRlKHRzLT5zcGksIDB4MDggKyAob2Zmc2V0ID4+IDIpLCAqY29uZmlnKTsKLQotCW11dGV4X3VubG9jaygmdHMtPmxvY2spOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBfX21heDczMDFfc2V0KHN0cnVjdCBtYXg3MzAxICp0cywgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCi17Ci0JaWYgKHZhbHVlKSB7Ci0JCXRzLT5vdXRfbGV2ZWwgfD0gMSA8PCBvZmZzZXQ7Ci0JCXJldHVybiBtYXg3MzAxX3dyaXRlKHRzLT5zcGksIDB4MjAgKyBvZmZzZXQsIDB4MDEpOwotCX0gZWxzZSB7Ci0JCXRzLT5vdXRfbGV2ZWwgJj0gfigxIDw8IG9mZnNldCk7Ci0JCXJldHVybiBtYXg3MzAxX3dyaXRlKHRzLT5zcGksIDB4MjAgKyBvZmZzZXQsIDB4MDApOwotCX0KLX0KLQotc3RhdGljIGludCBtYXg3MzAxX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LAotCQkJCSAgICBpbnQgdmFsdWUpCi17Ci0Jc3RydWN0IG1heDczMDEgKnRzID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBtYXg3MzAxLCBjaGlwKTsKLQl1OCAqY29uZmlnOwotCWludCByZXQ7Ci0KLQkvKiBGaXJzdCA0IHBpbnMgYXJlIHVudXNlZCBpbiB0aGUgY29udHJvbGxlciAqLwotCW9mZnNldCArPSA0OwotCi0JY29uZmlnID0gJnRzLT5wb3J0X2NvbmZpZ1tvZmZzZXQgPj4gMl07Ci0KLQltdXRleF9sb2NrKCZ0cy0+bG9jayk7Ci0KLQkqY29uZmlnID0gKCpjb25maWcgJiB+KDMgPDwgKG9mZnNldCAmIDMpKSkgfCAoMSA8PCAob2Zmc2V0ICYgMykpOwotCi0JcmV0ID0gX19tYXg3MzAxX3NldCh0cywgb2Zmc2V0LCB2YWx1ZSk7Ci0KLQlpZiAoIXJldCkKLQkJcmV0ID0gbWF4NzMwMV93cml0ZSh0cy0+c3BpLCAweDA4ICsgKG9mZnNldCA+PiAyKSwgKmNvbmZpZyk7Ci0KLQltdXRleF91bmxvY2soJnRzLT5sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgbWF4NzMwMV9nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQotewotCXN0cnVjdCBtYXg3MzAxICp0cyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbWF4NzMwMSwgY2hpcCk7Ci0JaW50IGNvbmZpZywgbGV2ZWwgPSAtRUlOVkFMOwotCi0JLyogRmlyc3QgNCBwaW5zIGFyZSB1bnVzZWQgaW4gdGhlIGNvbnRyb2xsZXIgKi8KLQlvZmZzZXQgKz0gNDsKLQotCW11dGV4X2xvY2soJnRzLT5sb2NrKTsKLQotCWNvbmZpZyA9ICh0cy0+cG9ydF9jb25maWdbb2Zmc2V0ID4+IDJdID4+ICgob2Zmc2V0ICYgMykgKiAyKSkgJiAzOwotCi0Jc3dpdGNoIChjb25maWcpIHsKLQljYXNlIDE6Ci0JCS8qIE91dHB1dDogcmV0dXJuIGNhY2hlZCBsZXZlbCAqLwotCQlsZXZlbCA9ICAhISh0cy0+b3V0X2xldmVsICYgKDEgPDwgb2Zmc2V0KSk7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQljYXNlIDM6Ci0JCS8qIElucHV0OiByZWFkIG91dCAqLwotCQlsZXZlbCA9IG1heDczMDFfcmVhZCh0cy0+c3BpLCAweDIwICsgb2Zmc2V0KSAmIDB4MDE7Ci0JfQotCW11dGV4X3VubG9jaygmdHMtPmxvY2spOwotCi0JcmV0dXJuIGxldmVsOwotfQotCi1zdGF0aWMgdm9pZCBtYXg3MzAxX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKLXsKLQlzdHJ1Y3QgbWF4NzMwMSAqdHMgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG1heDczMDEsIGNoaXApOwotCi0JLyogRmlyc3QgNCBwaW5zIGFyZSB1bnVzZWQgaW4gdGhlIGNvbnRyb2xsZXIgKi8KLQlvZmZzZXQgKz0gNDsKLQotCW11dGV4X2xvY2soJnRzLT5sb2NrKTsKLQotCV9fbWF4NzMwMV9zZXQodHMsIG9mZnNldCwgdmFsdWUpOwotCi0JbXV0ZXhfdW5sb2NrKCZ0cy0+bG9jayk7Ci19Ci0KIHN0YXRpYyBpbnQgX19kZXZpbml0IG1heDczMDFfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3QgbWF4NzMwMSAqdHM7Ci0Jc3RydWN0IG1heDczMDFfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Ci0JaW50IGksIHJldDsKKwlpbnQgcmV0OwogCi0JcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOwotCWlmICghcGRhdGEgfHwgIXBkYXRhLT5iYXNlKSB7Ci0JCWRldl9kYmcoJnNwaS0+ZGV2LCAiaW5jb3JyZWN0IG9yIG1pc3NpbmcgcGxhdGZvcm0gZGF0YVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qCi0JICogYml0c19wZXJfd29yZCBjYW5ub3QgYmUgY29uZmlndXJlZCBpbiBwbGF0Zm9ybSBkYXRhCi0JICovCisJLyogYml0c19wZXJfd29yZCBjYW5ub3QgYmUgY29uZmlndXJlZCBpbiBwbGF0Zm9ybSBkYXRhICovCiAJc3BpLT5iaXRzX3Blcl93b3JkID0gMTY7Ci0KIAlyZXQgPSBzcGlfc2V0dXAoc3BpKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKQEAgLTIzNSw5MCArNjYsMzUgQEAKIAlpZiAoIXRzKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW11dGV4X2luaXQoJnRzLT5sb2NrKTsKKwl0cy0+cmVhZCA9IG1heDczMDFfc3BpX3JlYWQ7CisJdHMtPndyaXRlID0gbWF4NzMwMV9zcGlfd3JpdGU7CisJdHMtPmRldiA9ICZzcGktPmRldjsKIAotCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIHRzKTsKLQotCS8qIFBvd2VyIHVwIHRoZSBjaGlwIGFuZCBkaXNhYmxlIElSUSBvdXRwdXQgKi8KLQltYXg3MzAxX3dyaXRlKHNwaSwgMHgwNCwgMHgwMSk7Ci0KLQl0cy0+c3BpID0gc3BpOwotCi0JdHMtPmNoaXAubGFiZWwgPSBEUklWRVJfTkFNRSwKLQotCXRzLT5jaGlwLmRpcmVjdGlvbl9pbnB1dCA9IG1heDczMDFfZGlyZWN0aW9uX2lucHV0OwotCXRzLT5jaGlwLmdldCA9IG1heDczMDFfZ2V0OwotCXRzLT5jaGlwLmRpcmVjdGlvbl9vdXRwdXQgPSBtYXg3MzAxX2RpcmVjdGlvbl9vdXRwdXQ7Ci0JdHMtPmNoaXAuc2V0ID0gbWF4NzMwMV9zZXQ7Ci0KLQl0cy0+Y2hpcC5iYXNlID0gcGRhdGEtPmJhc2U7Ci0JdHMtPmNoaXAubmdwaW8gPSBQSU5fTlVNQkVSOwotCXRzLT5jaGlwLmNhbl9zbGVlcCA9IDE7Ci0JdHMtPmNoaXAuZGV2ID0gJnNwaS0+ZGV2OwotCXRzLT5jaGlwLm93bmVyID0gVEhJU19NT0RVTEU7Ci0KLQkvKgotCSAqIHRyaXN0YXRlIGFsbCBwaW5zIGluIGhhcmR3YXJlIGFuZCBjYWNoZSB0aGUKLQkgKiByZWdpc3RlciB2YWx1ZXMgZm9yIGxhdGVyIHVzZS4KLQkgKi8KLQlmb3IgKGkgPSAxOyBpIDwgODsgaSsrKSB7Ci0JCWludCBqOwotCQkvKiAweEFBIG1lYW5zIGlucHV0IHdpdGggaW50ZXJuYWwgcHVsbHVwIGRpc2FibGVkICovCi0JCW1heDczMDFfd3JpdGUoc3BpLCAweDA4ICsgaSwgMHhBQSk7Ci0JCXRzLT5wb3J0X2NvbmZpZ1tpXSA9IDB4QUE7Ci0JCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKLQkJCWludCBvZmZzZXQgPSAoaSAtIDEpICogNCArIGo7Ci0JCQlyZXQgPSBtYXg3MzAxX2RpcmVjdGlvbl9pbnB1dCgmdHMtPmNoaXAsIG9mZnNldCk7Ci0JCQlpZiAocmV0KQotCQkJCWdvdG8gZXhpdF9kZXN0cm95OwotCQl9Ci0JfQotCi0JcmV0ID0gZ3Bpb2NoaXBfYWRkKCZ0cy0+Y2hpcCk7CisJcmV0ID0gX19tYXg3MzB4X3Byb2JlKHRzKTsKIAlpZiAocmV0KQotCQlnb3RvIGV4aXRfZGVzdHJveTsKLQotCXJldHVybiByZXQ7Ci0KLWV4aXRfZGVzdHJveToKLQlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCBOVUxMKTsKLQltdXRleF9kZXN0cm95KCZ0cy0+bG9jayk7Ci0Ja2ZyZWUodHMpOworCQlrZnJlZSh0cyk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBfX2RldmV4aXQgbWF4NzMwMV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKLQlzdHJ1Y3QgbWF4NzMwMSAqdHM7Ci0JaW50IHJldDsKLQotCXRzID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7Ci0JaWYgKHRzID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgTlVMTCk7Ci0KLQkvKiBQb3dlciBkb3duIHRoZSBjaGlwIGFuZCBkaXNhYmxlIElSUSBvdXRwdXQgKi8KLQltYXg3MzAxX3dyaXRlKHNwaSwgMHgwNCwgMHgwMCk7Ci0KLQlyZXQgPSBncGlvY2hpcF9yZW1vdmUoJnRzLT5jaGlwKTsKLQlpZiAoIXJldCkgewotCQltdXRleF9kZXN0cm95KCZ0cy0+bG9jayk7Ci0JCWtmcmVlKHRzKTsKLQl9IGVsc2UKLQkJZGV2X2Vycigmc3BpLT5kZXYsICJGYWlsZWQgdG8gcmVtb3ZlIHRoZSBHUElPIGNvbnRyb2xsZXI6ICVkXG4iLAotCQkJcmV0KTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIF9fbWF4NzMweF9yZW1vdmUoJnNwaS0+ZGV2KTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBzcGlfZGV2aWNlX2lkIG1heDczMDFfaWRbXSA9IHsKKwl7ICJtYXg3MzAxIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoc3BpLCBtYXg3MzAxX2lkKTsKKwogc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIG1heDczMDFfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lCQk9IERSSVZFUl9OQU1FLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lID0gIm1heDczMDEiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAotCS5wcm9iZQkJPSBtYXg3MzAxX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobWF4NzMwMV9yZW1vdmUpLAorCS5wcm9iZSA9IG1heDczMDFfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG1heDczMDFfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSBtYXg3MzAxX2lkLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbWF4NzMwMV9pbml0KHZvaWQpCkBAIC0zMzYsNyArMTEyLDYgQEAKIH0KIG1vZHVsZV9leGl0KG1heDczMDFfZXhpdCk7CiAKLU1PRFVMRV9BVVRIT1IoIkp1ZXJnZW4gQmVpc2VydCIpOworTU9EVUxFX0FVVEhPUigiSnVlcmdlbiBCZWlzZXJ0LCBXb2xmcmFtIFNhbmciKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTUFYNzMwMSBTUEkgYmFzZWQgR1BJTy1FeHBhbmRlciIpOwotTU9EVUxFX0FMSUFTKCJzcGk6IiBEUklWRVJfTkFNRSk7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1BWDczMDEgR1BJTy1FeHBhbmRlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL21heDczMHguYyBiL2RyaXZlcnMvZ3Bpby9tYXg3MzB4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzliY2VkNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3Bpby9tYXg3MzB4LmMKQEAgLTAsMCArMSwyNDQgQEAKKy8qKgorICogZHJpdmVycy9ncGlvL21heDczMDEuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBKdWVyZ2VuIEJlaXNlcnQsIFBlbmd1dHJvbml4CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggR3Vlbm5hZGkgTGlha2hvdmV0c2tpLCBQZW5ndXRyb25peAorICogQ29weXJpZ2h0IChDKSAyMDA5IFdvbGZyYW0gU2FuZywgUGVuZ3V0cm9uaXgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoZSBNYXhpbSBNQVg3MzAwLzEgZGV2aWNlIGlzIGFuIEkyQy9TUEkgZHJpdmVuIEdQSU8gZXhwYW5kZXIuIFRoZXJlIGFyZQorICogMjggR1BJT3MuIDggb2YgdGhlbSBjYW4gdHJpZ2dlciBhbiBpbnRlcnJ1cHQuIFNlZSBkYXRhc2hlZXQgZm9yIG1vcmUKKyAqIGRldGFpbHMKKyAqIE5vdGU6CisgKiAtIERJTiBtdXN0IGJlIHN0YWJsZSBhdCB0aGUgcmlzaW5nIGVkZ2Ugb2YgY2xvY2suCisgKiAtIHdoZW4gd3JpdGluZzoKKyAqICAgLSBhbHdheXMgY2xvY2sgaW4gMTYgY2xvY2tzIGF0IG9uY2UKKyAqICAgLSBhdCBESU46IEQxNSBmaXJzdCwgRDAgbGFzdAorICogICAtIEQwLi5ENyA9IGRhdGFieXRlLCBEOC4uRDE0ID0gY29tbWFuZGJ5dGUKKyAqICAgLSBEMTUgPSBsb3cgLT4gd3JpdGUgY29tbWFuZAorICogLSB3aGVuIHJlYWRpbmcKKyAqICAgLSBhbHdheXMgY2xvY2sgaW4gMTYgY2xvY2tzIGF0IG9uY2UKKyAqICAgLSBhdCBESU46IEQxNSBmaXJzdCwgRDAgbGFzdAorICogICAtIEQwLi5ENyA9IGR1bW15LCBEOC4uRDE0ID0gcmVnaXN0ZXIgYWRkcmVzcworICogICAtIEQxNSA9IGhpZ2ggLT4gcmVhZCBjb21tYW5kCisgKiAgIC0gcmFpc2UgQ1MgYW5kIGFzc2VydCBpdCBhZ2FpbgorICogICAtIGFsd2F5cyBjbG9jayBpbiAxNiBjbG9ja3MgYXQgb25jZQorICogICAtIGF0IERPVVQ6IEQxNSBmaXJzdCwgRDAgbGFzdAorICogICAtIEQwLi5ENyBjb250YWlucyB0aGUgZGF0YSBmcm9tIHRoZSBmaXJzdCBjeWNsZQorICoKKyAqIFRoZSBkcml2ZXIgZXhwb3J0cyBhIHN0YW5kYXJkIGdwaW9jaGlwIGludGVyZmFjZQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvbWF4NzMwMS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworLyoKKyAqIFBpbiBjb25maWd1cmF0aW9ucywgc2VlIE1BWDczMDEgZGF0YXNoZWV0IHBhZ2UgNgorICovCisjZGVmaW5lIFBJTl9DT05GSUdfTUFTSyAweDAzCisjZGVmaW5lIFBJTl9DT05GSUdfSU5fUFVMTFVQIDB4MDMKKyNkZWZpbmUgUElOX0NPTkZJR19JTl9XT19QVUxMVVAgMHgwMgorI2RlZmluZSBQSU5fQ09ORklHX09VVCAweDAxCisKKyNkZWZpbmUgUElOX05VTUJFUiAyOAorCitzdGF0aWMgaW50IG1heDczMDFfZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgbWF4NzMwMSAqdHMgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG1heDczMDEsIGNoaXApOworCXU4ICpjb25maWc7CisJdTggb2Zmc2V0X2JpdHM7CisJaW50IHJldDsKKworCS8qIEZpcnN0IDQgcGlucyBhcmUgdW51c2VkIGluIHRoZSBjb250cm9sbGVyICovCisJb2Zmc2V0ICs9IDQ7CisJb2Zmc2V0X2JpdHMgPSAob2Zmc2V0ICYgMykgPDwgMTsKKworCWNvbmZpZyA9ICZ0cy0+cG9ydF9jb25maWdbb2Zmc2V0ID4+IDJdOworCisJbXV0ZXhfbG9jaygmdHMtPmxvY2spOworCisJLyogU3RhbmRhcmQgR1BJTyBBUEkgZG9lc24ndCBzdXBwb3J0IHB1bGwtdXBzLCBoYXMgdG8gYmUgZXh0ZW5kZWQuCisJICogSGFyZC1jb2Rpbmcgbm8gcG9sbHVwIGZvciBub3cuICovCisJKmNvbmZpZyA9ICgqY29uZmlnICYgfihQSU5fQ09ORklHX01BU0sgPDwgb2Zmc2V0X2JpdHMpKQorCQkJICAgfCAoUElOX0NPTkZJR19JTl9XT19QVUxMVVAgPDwgb2Zmc2V0X2JpdHMpOworCisJcmV0ID0gdHMtPndyaXRlKHRzLT5kZXYsIDB4MDggKyAob2Zmc2V0ID4+IDIpLCAqY29uZmlnKTsKKworCW11dGV4X3VubG9jaygmdHMtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX21heDczMDFfc2V0KHN0cnVjdCBtYXg3MzAxICp0cywgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJaWYgKHZhbHVlKSB7CisJCXRzLT5vdXRfbGV2ZWwgfD0gMSA8PCBvZmZzZXQ7CisJCXJldHVybiB0cy0+d3JpdGUodHMtPmRldiwgMHgyMCArIG9mZnNldCwgMHgwMSk7CisJfSBlbHNlIHsKKwkJdHMtPm91dF9sZXZlbCAmPSB+KDEgPDwgb2Zmc2V0KTsKKwkJcmV0dXJuIHRzLT53cml0ZSh0cy0+ZGV2LCAweDIwICsgb2Zmc2V0LCAweDAwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbWF4NzMwMV9kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwKKwkJCQkgICAgaW50IHZhbHVlKQoreworCXN0cnVjdCBtYXg3MzAxICp0cyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbWF4NzMwMSwgY2hpcCk7CisJdTggKmNvbmZpZzsKKwl1OCBvZmZzZXRfYml0czsKKwlpbnQgcmV0OworCisJLyogRmlyc3QgNCBwaW5zIGFyZSB1bnVzZWQgaW4gdGhlIGNvbnRyb2xsZXIgKi8KKwlvZmZzZXQgKz0gNDsKKwlvZmZzZXRfYml0cyA9IChvZmZzZXQgJiAzKSA8PCAxOworCisJY29uZmlnID0gJnRzLT5wb3J0X2NvbmZpZ1tvZmZzZXQgPj4gMl07CisKKwltdXRleF9sb2NrKCZ0cy0+bG9jayk7CisKKwkqY29uZmlnID0gKCpjb25maWcgJiB+KFBJTl9DT05GSUdfTUFTSyA8PCBvZmZzZXRfYml0cykpCisJCQkgICB8IChQSU5fQ09ORklHX09VVCA8PCBvZmZzZXRfYml0cyk7CisKKwlyZXQgPSBfX21heDczMDFfc2V0KHRzLCBvZmZzZXQsIHZhbHVlKTsKKworCWlmICghcmV0KQorCQlyZXQgPSB0cy0+d3JpdGUodHMtPmRldiwgMHgwOCArIChvZmZzZXQgPj4gMiksICpjb25maWcpOworCisJbXV0ZXhfdW5sb2NrKCZ0cy0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1heDczMDFfZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgbWF4NzMwMSAqdHMgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG1heDczMDEsIGNoaXApOworCWludCBjb25maWcsIGxldmVsID0gLUVJTlZBTDsKKworCS8qIEZpcnN0IDQgcGlucyBhcmUgdW51c2VkIGluIHRoZSBjb250cm9sbGVyICovCisJb2Zmc2V0ICs9IDQ7CisKKwltdXRleF9sb2NrKCZ0cy0+bG9jayk7CisKKwljb25maWcgPSAodHMtPnBvcnRfY29uZmlnW29mZnNldCA+PiAyXSA+PiAoKG9mZnNldCAmIDMpIDw8IDEpKQorCQkJJiBQSU5fQ09ORklHX01BU0s7CisKKwlzd2l0Y2ggKGNvbmZpZykgeworCWNhc2UgUElOX0NPTkZJR19PVVQ6CisJCS8qIE91dHB1dDogcmV0dXJuIGNhY2hlZCBsZXZlbCAqLworCQlsZXZlbCA9ICAhISh0cy0+b3V0X2xldmVsICYgKDEgPDwgb2Zmc2V0KSk7CisJCWJyZWFrOworCWNhc2UgUElOX0NPTkZJR19JTl9XT19QVUxMVVA6CisJY2FzZSBQSU5fQ09ORklHX0lOX1BVTExVUDoKKwkJLyogSW5wdXQ6IHJlYWQgb3V0ICovCisJCWxldmVsID0gdHMtPnJlYWQodHMtPmRldiwgMHgyMCArIG9mZnNldCkgJiAweDAxOworCX0KKwltdXRleF91bmxvY2soJnRzLT5sb2NrKTsKKworCXJldHVybiBsZXZlbDsKK30KKworc3RhdGljIHZvaWQgbWF4NzMwMV9zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJc3RydWN0IG1heDczMDEgKnRzID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBtYXg3MzAxLCBjaGlwKTsKKworCS8qIEZpcnN0IDQgcGlucyBhcmUgdW51c2VkIGluIHRoZSBjb250cm9sbGVyICovCisJb2Zmc2V0ICs9IDQ7CisKKwltdXRleF9sb2NrKCZ0cy0+bG9jayk7CisKKwlfX21heDczMDFfc2V0KHRzLCBvZmZzZXQsIHZhbHVlKTsKKworCW11dGV4X3VubG9jaygmdHMtPmxvY2spOworfQorCitpbnQgX19kZXZpbml0IF9fbWF4NzMweF9wcm9iZShzdHJ1Y3QgbWF4NzMwMSAqdHMpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gdHMtPmRldjsKKwlzdHJ1Y3QgbWF4NzMwMV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlpbnQgaSwgcmV0OworCisJcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJaWYgKCFwZGF0YSB8fCAhcGRhdGEtPmJhc2UpIHsKKwkJZGV2X2VycihkZXYsICJpbmNvcnJlY3Qgb3IgbWlzc2luZyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfaW5pdCgmdHMtPmxvY2spOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIHRzKTsKKworCS8qIFBvd2VyIHVwIHRoZSBjaGlwIGFuZCBkaXNhYmxlIElSUSBvdXRwdXQgKi8KKwl0cy0+d3JpdGUoZGV2LCAweDA0LCAweDAxKTsKKworCXRzLT5jaGlwLmxhYmVsID0gZGV2LT5kcml2ZXItPm5hbWU7CisKKwl0cy0+Y2hpcC5kaXJlY3Rpb25faW5wdXQgPSBtYXg3MzAxX2RpcmVjdGlvbl9pbnB1dDsKKwl0cy0+Y2hpcC5nZXQgPSBtYXg3MzAxX2dldDsKKwl0cy0+Y2hpcC5kaXJlY3Rpb25fb3V0cHV0ID0gbWF4NzMwMV9kaXJlY3Rpb25fb3V0cHV0OworCXRzLT5jaGlwLnNldCA9IG1heDczMDFfc2V0OworCisJdHMtPmNoaXAuYmFzZSA9IHBkYXRhLT5iYXNlOworCXRzLT5jaGlwLm5ncGlvID0gUElOX05VTUJFUjsKKwl0cy0+Y2hpcC5jYW5fc2xlZXAgPSAxOworCXRzLT5jaGlwLmRldiA9IGRldjsKKwl0cy0+Y2hpcC5vd25lciA9IFRISVNfTU9EVUxFOworCisJLyoKKwkgKiB0cmlzdGF0ZSBhbGwgcGlucyBpbiBoYXJkd2FyZSBhbmQgY2FjaGUgdGhlCisJICogcmVnaXN0ZXIgdmFsdWVzIGZvciBsYXRlciB1c2UuCisJICovCisJZm9yIChpID0gMTsgaSA8IDg7IGkrKykgeworCQlpbnQgajsKKwkJLyogMHhBQSBtZWFucyBpbnB1dCB3aXRoIGludGVybmFsIHB1bGx1cCBkaXNhYmxlZCAqLworCQl0cy0+d3JpdGUoZGV2LCAweDA4ICsgaSwgMHhBQSk7CisJCXRzLT5wb3J0X2NvbmZpZ1tpXSA9IDB4QUE7CisJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKKwkJCWludCBvZmZzZXQgPSAoaSAtIDEpICogNCArIGo7CisJCQlyZXQgPSBtYXg3MzAxX2RpcmVjdGlvbl9pbnB1dCgmdHMtPmNoaXAsIG9mZnNldCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXhpdF9kZXN0cm95OworCQl9CisJfQorCisJcmV0ID0gZ3Bpb2NoaXBfYWRkKCZ0cy0+Y2hpcCk7CisJaWYgKHJldCkKKwkJZ290byBleGl0X2Rlc3Ryb3k7CisKKwlyZXR1cm4gcmV0OworCitleGl0X2Rlc3Ryb3k6CisJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJbXV0ZXhfZGVzdHJveSgmdHMtPmxvY2spOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX21heDczMHhfcHJvYmUpOworCitpbnQgX19kZXZleGl0IF9fbWF4NzMweF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtYXg3MzAxICp0cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQ7CisKKwlpZiAodHMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKworCS8qIFBvd2VyIGRvd24gdGhlIGNoaXAgYW5kIGRpc2FibGUgSVJRIG91dHB1dCAqLworCXRzLT53cml0ZShkZXYsIDB4MDQsIDB4MDApOworCisJcmV0ID0gZ3Bpb2NoaXBfcmVtb3ZlKCZ0cy0+Y2hpcCk7CisJaWYgKCFyZXQpIHsKKwkJbXV0ZXhfZGVzdHJveSgmdHMtPmxvY2spOworCQlrZnJlZSh0cyk7CisJfSBlbHNlCisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlbW92ZSBHUElPIGNvbnRyb2xsZXI6ICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fbWF4NzMweF9yZW1vdmUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3BjYTk1M3guYyBiL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMKaW5kZXggNmEyZmIzZi4uYWI1ZGFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL3BjYTk1M3guYworKysgYi9kcml2ZXJzL2dwaW8vcGNhOTUzeC5jCkBAIC0xNCw2ICsxNCw4IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvcGNhOTUzeC5oPgogI2lmZGVmIENPTkZJR19PRl9HUElPCkBAIC0yNiwyMyArMjgsMjggQEAKICNkZWZpbmUgUENBOTUzWF9JTlZFUlQgICAgICAgICAyCiAjZGVmaW5lIFBDQTk1M1hfRElSRUNUSU9OICAgICAgMwogCisjZGVmaW5lIFBDQTk1M1hfR1BJT1MJICAgICAgIDB4MDBGRgorI2RlZmluZSBQQ0E5NTNYX0lOVAkgICAgICAgMHgwMTAwCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBwY2E5NTN4X2lkW10gPSB7Ci0JeyAicGNhOTUzNCIsIDgsIH0sCi0JeyAicGNhOTUzNSIsIDE2LCB9LAorCXsgInBjYTk1MzQiLCA4ICB8IFBDQTk1M1hfSU5ULCB9LAorCXsgInBjYTk1MzUiLCAxNiB8IFBDQTk1M1hfSU5ULCB9LAogCXsgInBjYTk1MzYiLCA0LCB9LAotCXsgInBjYTk1MzciLCA0LCB9LAotCXsgInBjYTk1MzgiLCA4LCB9LAotCXsgInBjYTk1MzkiLCAxNiwgfSwKLQl7ICJwY2E5NTU0IiwgOCwgfSwKLQl7ICJwY2E5NTU1IiwgMTYsIH0sCisJeyAicGNhOTUzNyIsIDQgIHwgUENBOTUzWF9JTlQsIH0sCisJeyAicGNhOTUzOCIsIDggIHwgUENBOTUzWF9JTlQsIH0sCisJeyAicGNhOTUzOSIsIDE2IHwgUENBOTUzWF9JTlQsIH0sCisJeyAicGNhOTU1NCIsIDggIHwgUENBOTUzWF9JTlQsIH0sCisJeyAicGNhOTU1NSIsIDE2IHwgUENBOTUzWF9JTlQsIH0sCiAJeyAicGNhOTU1NiIsIDgsIH0sCiAJeyAicGNhOTU1NyIsIDgsIH0sCiAKIAl7ICJtYXg3MzEwIiwgOCwgfSwKLQl7ICJtYXg3MzE1IiwgOCwgfSwKLQl7ICJwY2E2MTA3IiwgOCwgfSwKLQl7ICJ0Y2E2NDA4IiwgOCwgfSwKLQl7ICJ0Y2E2NDE2IiwgMTYsIH0sCisJeyAibWF4NzMxMiIsIDE2IHwgUENBOTUzWF9JTlQsIH0sCisJeyAibWF4NzMxMyIsIDE2IHwgUENBOTUzWF9JTlQsIH0sCisJeyAibWF4NzMxNSIsIDggIHwgUENBOTUzWF9JTlQsIH0sCisJeyAicGNhNjEwNyIsIDggIHwgUENBOTUzWF9JTlQsIH0sCisJeyAidGNhNjQwOCIsIDggIHwgUENBOTUzWF9JTlQsIH0sCisJeyAidGNhNjQxNiIsIDE2IHwgUENBOTUzWF9JTlQsIH0sCiAJLyogTllFVDogIHsgInRjYTY0MjQiLCAyNCwgfSwgKi8KIAl7IH0KIH07CkBAIC01Myw2ICs2MCwxNSBAQAogCXVpbnQxNl90IHJlZ19vdXRwdXQ7CiAJdWludDE2X3QgcmVnX2RpcmVjdGlvbjsKIAorI2lmZGVmIENPTkZJR19HUElPX1BDQTk1M1hfSVJRCisJc3RydWN0IG11dGV4IGlycV9sb2NrOworCXVpbnQxNl90IGlycV9tYXNrOworCXVpbnQxNl90IGlycV9zdGF0OworCXVpbnQxNl90IGlycV90cmlnX3JhaXNlOworCXVpbnQxNl90IGlycV90cmlnX2ZhbGw7CisJaW50CSBpcnFfYmFzZTsKKyNlbmRpZgorCiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3QgcGNhOTUzeF9wbGF0Zm9ybV9kYXRhICpkeW5fcGRhdGE7CiAJc3RydWN0IGdwaW9fY2hpcCBncGlvX2NoaXA7CkBAIC0yMDIsNiArMjE4LDIxMCBAQAogCWdjLT5uYW1lcyA9IGNoaXAtPm5hbWVzOwogfQogCisjaWZkZWYgQ09ORklHX0dQSU9fUENBOTUzWF9JUlEKK3N0YXRpYyBpbnQgcGNhOTUzeF9ncGlvX3RvX2lycShzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgb2ZmKQoreworCXN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXA7CisKKwljaGlwID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgcGNhOTUzeF9jaGlwLCBncGlvX2NoaXApOworCXJldHVybiBjaGlwLT5pcnFfYmFzZSArIG9mZjsKK30KKworc3RhdGljIHZvaWQgcGNhOTUzeF9pcnFfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCisJY2hpcC0+aXJxX21hc2sgJj0gfigxIDw8IChpcnEgLSBjaGlwLT5pcnFfYmFzZSkpOworfQorCitzdGF0aWMgdm9pZCBwY2E5NTN4X2lycV91bm1hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKworCWNoaXAtPmlycV9tYXNrIHw9IDEgPDwgKGlycSAtIGNoaXAtPmlycV9iYXNlKTsKK30KKworc3RhdGljIHZvaWQgcGNhOTUzeF9pcnFfYnVzX2xvY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKworCW11dGV4X2xvY2soJmNoaXAtPmlycV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgcGNhOTUzeF9pcnFfYnVzX3N5bmNfdW5sb2NrKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IHBjYTk1M3hfY2hpcCAqY2hpcCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisKKwltdXRleF91bmxvY2soJmNoaXAtPmlycV9sb2NrKTsKK30KKworc3RhdGljIGludCBwY2E5NTN4X2lycV9zZXRfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwl1aW50MTZfdCBsZXZlbCA9IGlycSAtIGNoaXAtPmlycV9iYXNlOworCXVpbnQxNl90IG1hc2sgPSAxIDw8IGxldmVsOworCisJaWYgKCEodHlwZSAmIElSUV9UWVBFX0VER0VfQk9USCkpIHsKKwkJZGV2X2VycigmY2hpcC0+Y2xpZW50LT5kZXYsICJpcnEgJWQ6IHVuc3VwcG9ydGVkIHR5cGUgJWRcbiIsCisJCQlpcnEsIHR5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodHlwZSAmIElSUV9UWVBFX0VER0VfRkFMTElORykKKwkJY2hpcC0+aXJxX3RyaWdfZmFsbCB8PSBtYXNrOworCWVsc2UKKwkJY2hpcC0+aXJxX3RyaWdfZmFsbCAmPSB+bWFzazsKKworCWlmICh0eXBlICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpCisJCWNoaXAtPmlycV90cmlnX3JhaXNlIHw9IG1hc2s7CisJZWxzZQorCQljaGlwLT5pcnFfdHJpZ19yYWlzZSAmPSB+bWFzazsKKworCXJldHVybiBwY2E5NTN4X2dwaW9fZGlyZWN0aW9uX2lucHV0KCZjaGlwLT5ncGlvX2NoaXAsIGxldmVsKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBwY2E5NTN4X2lycV9jaGlwID0geworCS5uYW1lCQkJPSAicGNhOTUzeCIsCisJLm1hc2sJCQk9IHBjYTk1M3hfaXJxX21hc2ssCisJLnVubWFzawkJCT0gcGNhOTUzeF9pcnFfdW5tYXNrLAorCS5idXNfbG9jawkJPSBwY2E5NTN4X2lycV9idXNfbG9jaywKKwkuYnVzX3N5bmNfdW5sb2NrCT0gcGNhOTUzeF9pcnFfYnVzX3N5bmNfdW5sb2NrLAorCS5zZXRfdHlwZQkJPSBwY2E5NTN4X2lycV9zZXRfdHlwZSwKK307CisKK3N0YXRpYyB1aW50MTZfdCBwY2E5NTN4X2lycV9wZW5kaW5nKHN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXApCit7CisJdWludDE2X3QgY3VyX3N0YXQ7CisJdWludDE2X3Qgb2xkX3N0YXQ7CisJdWludDE2X3QgcGVuZGluZzsKKwl1aW50MTZfdCB0cmlnZ2VyOworCWludCByZXQ7CisKKwlyZXQgPSBwY2E5NTN4X3JlYWRfcmVnKGNoaXAsIFBDQTk1M1hfSU5QVVQsICZjdXJfc3RhdCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIDA7CisKKwkvKiBSZW1vdmUgb3V0cHV0IHBpbnMgZnJvbSB0aGUgZXF1YXRpb24gKi8KKwljdXJfc3RhdCAmPSBjaGlwLT5yZWdfZGlyZWN0aW9uOworCisJb2xkX3N0YXQgPSBjaGlwLT5pcnFfc3RhdDsKKwl0cmlnZ2VyID0gKGN1cl9zdGF0IF4gb2xkX3N0YXQpICYgY2hpcC0+aXJxX21hc2s7CisKKwlpZiAoIXRyaWdnZXIpCisJCXJldHVybiAwOworCisJY2hpcC0+aXJxX3N0YXQgPSBjdXJfc3RhdDsKKworCXBlbmRpbmcgPSAob2xkX3N0YXQgJiBjaGlwLT5pcnFfdHJpZ19mYWxsKSB8CisJCSAgKGN1cl9zdGF0ICYgY2hpcC0+aXJxX3RyaWdfcmFpc2UpOworCXBlbmRpbmcgJj0gdHJpZ2dlcjsKKworCXJldHVybiBwZW5kaW5nOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgcGNhOTUzeF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZpZCkKK3sKKwlzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwID0gZGV2aWQ7CisJdWludDE2X3QgcGVuZGluZzsKKwl1aW50MTZfdCBsZXZlbDsKKworCXBlbmRpbmcgPSBwY2E5NTN4X2lycV9wZW5kaW5nKGNoaXApOworCisJaWYgKCFwZW5kaW5nKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwlkbyB7CisJCWxldmVsID0gX19mZnMocGVuZGluZyk7CisJCWhhbmRsZV9uZXN0ZWRfaXJxKGxldmVsICsgY2hpcC0+aXJxX2Jhc2UpOworCisJCXBlbmRpbmcgJj0gfigxIDw8IGxldmVsKTsKKwl9IHdoaWxlIChwZW5kaW5nKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBwY2E5NTN4X2lycV9zZXR1cChzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGNoaXAtPmNsaWVudDsKKwlzdHJ1Y3QgcGNhOTUzeF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaW50IHJldDsKKworCWlmIChwZGF0YS0+aXJxX2Jhc2UgJiYgKGlkLT5kcml2ZXJfZGF0YSAmIFBDQTk1M1hfSU5UKSkgeworCQlpbnQgbHZsOworCisJCXJldCA9IHBjYTk1M3hfcmVhZF9yZWcoY2hpcCwgUENBOTUzWF9JTlBVVCwKKwkJCQkgICAgICAgJmNoaXAtPmlycV9zdGF0KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X2ZhaWxlZDsKKworCQkvKgorCQkgKiBUaGVyZSBpcyBubyB3YXkgdG8ga25vdyB3aGljaCBHUElPIGxpbmUgZ2VuZXJhdGVkIHRoZQorCQkgKiBpbnRlcnJ1cHQuICBXZSBoYXZlIHRvIHJlbHkgb24gdGhlIHByZXZpb3VzIHJlYWQgZm9yCisJCSAqIHRoaXMgcHVycG9zZS4KKwkJICovCisJCWNoaXAtPmlycV9zdGF0ICY9IGNoaXAtPnJlZ19kaXJlY3Rpb247CisJCWNoaXAtPmlycV9iYXNlID0gcGRhdGEtPmlycV9iYXNlOworCQltdXRleF9pbml0KCZjaGlwLT5pcnFfbG9jayk7CisKKwkJZm9yIChsdmwgPSAwOyBsdmwgPCBjaGlwLT5ncGlvX2NoaXAubmdwaW87IGx2bCsrKSB7CisJCQlpbnQgaXJxID0gbHZsICsgY2hpcC0+aXJxX2Jhc2U7CisKKwkJCXNldF9pcnFfY2hpcF9kYXRhKGlycSwgY2hpcCk7CisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxLCAmcGNhOTUzeF9pcnFfY2hpcCwKKwkJCQkJCSBoYW5kbGVfZWRnZV9pcnEpOworCQkJc2V0X2lycV9uZXN0ZWRfdGhyZWFkKGlycSwgMSk7CisjaWZkZWYgQ09ORklHX0FSTQorCQkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQpOworI2Vsc2UKKwkJCXNldF9pcnFfbm9wcm9iZShpcnEpOworI2VuZGlmCisJCX0KKworCQlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShjbGllbnQtPmlycSwKKwkJCQkJICAgTlVMTCwKKwkJCQkJICAgcGNhOTUzeF9pcnFfaGFuZGxlciwKKwkJCQkJICAgSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX09ORVNIT1QsCisJCQkJCSAgIGRldl9uYW1lKCZjbGllbnQtPmRldiksIGNoaXApOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IGlycSAlZFxuIiwKKwkJCQljbGllbnQtPmlycSk7CisJCQlnb3RvIG91dF9mYWlsZWQ7CisJCX0KKworCQljaGlwLT5ncGlvX2NoaXAudG9faXJxID0gcGNhOTUzeF9ncGlvX3RvX2lycTsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X2ZhaWxlZDoKKwljaGlwLT5pcnFfYmFzZSA9IDA7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcGNhOTUzeF9pcnFfdGVhcmRvd24oc3RydWN0IHBjYTk1M3hfY2hpcCAqY2hpcCkKK3sKKwlpZiAoY2hpcC0+aXJxX2Jhc2UpCisJCWZyZWVfaXJxKGNoaXAtPmNsaWVudC0+aXJxLCBjaGlwKTsKK30KKyNlbHNlIC8qIENPTkZJR19HUElPX1BDQTk1M1hfSVJRICovCitzdGF0aWMgaW50IHBjYTk1M3hfaXJxX3NldHVwKHN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXAsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gY2hpcC0+Y2xpZW50OworCXN0cnVjdCBwY2E5NTN4X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmIChwZGF0YS0+aXJxX2Jhc2UgJiYgKGlkLT5kcml2ZXJfZGF0YSAmIFBDQTk1M1hfSU5UKSkKKwkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAiaW50ZXJydXB0IHN1cHBvcnQgbm90IGNvbXBpbGVkIGluXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwY2E5NTN4X2lycV90ZWFyZG93bihzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwKQoreworfQorI2VuZGlmCisKIC8qCiAgKiBIYW5kbGVycyBmb3IgYWx0ZXJuYXRpdmUgc291cmNlcyBvZiBwbGF0Zm9ybV9kYXRhCiAgKi8KQEAgLTI4Niw3ICs1MDYsNyBAQAogCS8qIGluaXRpYWxpemUgY2FjaGVkIHJlZ2lzdGVycyBmcm9tIHRoZWlyIG9yaWdpbmFsIHZhbHVlcy4KIAkgKiB3ZSBjYW4ndCBzaGFyZSB0aGlzIGNoaXAgd2l0aCBhbm90aGVyIGkyYyBtYXN0ZXIuCiAJICovCi0JcGNhOTUzeF9zZXR1cF9ncGlvKGNoaXAsIGlkLT5kcml2ZXJfZGF0YSk7CisJcGNhOTUzeF9zZXR1cF9ncGlvKGNoaXAsIGlkLT5kcml2ZXJfZGF0YSAmIFBDQTk1M1hfR1BJT1MpOwogCiAJcmV0ID0gcGNhOTUzeF9yZWFkX3JlZyhjaGlwLCBQQ0E5NTNYX09VVFBVVCwgJmNoaXAtPnJlZ19vdXRwdXQpOwogCWlmIChyZXQpCkBAIC0zMDEsNiArNTIxLDkgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dF9mYWlsZWQ7CiAKKwlyZXQgPSBwY2E5NTN4X2lycV9zZXR1cChjaGlwLCBpZCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZmFpbGVkOwogCiAJcmV0ID0gZ3Bpb2NoaXBfYWRkKCZjaGlwLT5ncGlvX2NoaXApOwogCWlmIChyZXQpCkBAIC0zMTcsNiArNTQwLDcgQEAKIAlyZXR1cm4gMDsKIAogb3V0X2ZhaWxlZDoKKwlwY2E5NTN4X2lycV90ZWFyZG93bihjaGlwKTsKIAlrZnJlZShjaGlwLT5keW5fcGRhdGEpOwogCWtmcmVlKGNoaXApOwogCXJldHVybiByZXQ7CkBAIC0zNDUsNiArNTY5LDcgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwlwY2E5NTN4X2lycV90ZWFyZG93bihjaGlwKTsKIAlrZnJlZShjaGlwLT5keW5fcGRhdGEpOwogCWtmcmVlKGNoaXApOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3BsMDYxLmMgYi9kcml2ZXJzL2dwaW8vcGwwNjEuYwppbmRleCA0ZWU0YzgzLi4zYWQxZWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vcGwwNjEuYworKysgYi9kcml2ZXJzL2dwaW8vcGwwNjEuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJCWlmIChwZW5kaW5nID09IDApCiAJCQljb250aW51ZTsKIAotCQlmb3JfZWFjaF9iaXQob2Zmc2V0LCAmcGVuZGluZywgUEwwNjFfR1BJT19OUikKKwkJZm9yX2VhY2hfc2V0X2JpdChvZmZzZXQsICZwZW5kaW5nLCBQTDA2MV9HUElPX05SKQogCQkJZ2VuZXJpY19oYW5kbGVfaXJxKHBsMDYxX3RvX2lycSgmY2hpcC0+Z2MsIG9mZnNldCkpOwogCX0KIAlkZXNjLT5jaGlwLT51bm1hc2soaXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9zY2hfZ3Bpby5jIGIvZHJpdmVycy9ncGlvL3NjaF9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgzNTIxMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3Bpby9zY2hfZ3Bpby5jCkBAIC0wLDAgKzEsMjk1IEBACisvKgorICogIHNjaF9ncGlvLmMgLSBHUElPIGludGVyZmFjZSBmb3IgSW50ZWwgUG91bHNibyBTQ0gKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDEwIENvbXB1TGFiIEx0ZAorICogIEF1dGhvcjogRGVuaXMgVHVyaXNjaGV2IDxkZW5pc0Bjb21wdWxhYi5jby5pbD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdwaW9fbG9jayk7CisKKyNkZWZpbmUgQ0dFTgkoMHgwMCkKKyNkZWZpbmUgQ0dJTwkoMHgwNCkKKyNkZWZpbmUgQ0dMVgkoMHgwOCkKKworI2RlZmluZSBSR0VOCSgweDIwKQorI2RlZmluZSBSR0lPCSgweDI0KQorI2RlZmluZSBSR0xWCSgweDI4KQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgZ3Bpb19iYTsKKworc3RhdGljIGludCBzY2hfZ3Bpb19jb3JlX2RpcmVjdGlvbl9pbihzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgIGdwaW9fbnVtKQoreworCXU4IGN1cnJfZGlyczsKKwl1bnNpZ25lZCBzaG9ydCBvZmZzZXQsIGJpdDsKKworCXNwaW5fbG9jaygmZ3Bpb19sb2NrKTsKKworCW9mZnNldCA9IENHSU8gKyBncGlvX251bSAvIDg7CisJYml0ID0gZ3Bpb19udW0gJSA4OworCisJY3Vycl9kaXJzID0gaW5iKGdwaW9fYmEgKyBvZmZzZXQpOworCisJaWYgKCEoY3Vycl9kaXJzICYgKDEgPDwgYml0KSkpCisJCW91dGIoY3Vycl9kaXJzIHwgKDEgPDwgYml0KSwgZ3Bpb19iYSArIG9mZnNldCk7CisKKwlzcGluX3VubG9jaygmZ3Bpb19sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzY2hfZ3Bpb19jb3JlX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgZ3Bpb19udW0pCit7CisJaW50IHJlczsKKwl1bnNpZ25lZCBzaG9ydCBvZmZzZXQsIGJpdDsKKworCW9mZnNldCA9IENHTFYgKyBncGlvX251bSAvIDg7CisJYml0ID0gZ3Bpb19udW0gJSA4OworCisJcmVzID0gISEoaW5iKGdwaW9fYmEgKyBvZmZzZXQpICYgKDEgPDwgYml0KSk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgc2NoX2dwaW9fY29yZV9zZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGdwaW9fbnVtLCBpbnQgdmFsKQoreworCXU4IGN1cnJfdmFsczsKKwl1bnNpZ25lZCBzaG9ydCBvZmZzZXQsIGJpdDsKKworCXNwaW5fbG9jaygmZ3Bpb19sb2NrKTsKKworCW9mZnNldCA9IENHTFYgKyBncGlvX251bSAvIDg7CisJYml0ID0gZ3Bpb19udW0gJSA4OworCisJY3Vycl92YWxzID0gaW5iKGdwaW9fYmEgKyBvZmZzZXQpOworCisJaWYgKHZhbCkKKwkJb3V0YihjdXJyX3ZhbHMgfCAoMSA8PCBiaXQpLCBncGlvX2JhICsgb2Zmc2V0KTsKKwllbHNlCisJCW91dGIoKGN1cnJfdmFscyAmIH4oMSA8PCBiaXQpKSwgZ3Bpb19iYSArIG9mZnNldCk7CisJc3Bpbl91bmxvY2soJmdwaW9fbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgc2NoX2dwaW9fY29yZV9kaXJlY3Rpb25fb3V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLAorCQkJCQl1bnNpZ25lZCBncGlvX251bSwgaW50IHZhbCkKK3sKKwl1OCBjdXJyX2RpcnM7CisJdW5zaWduZWQgc2hvcnQgb2Zmc2V0LCBiaXQ7CisKKwlzY2hfZ3Bpb19jb3JlX3NldChnYywgZ3Bpb19udW0sIHZhbCk7CisKKwlzcGluX2xvY2soJmdwaW9fbG9jayk7CisKKwlvZmZzZXQgPSBDR0lPICsgZ3Bpb19udW0gLyA4OworCWJpdCA9IGdwaW9fbnVtICUgODsKKworCWN1cnJfZGlycyA9IGluYihncGlvX2JhICsgb2Zmc2V0KTsKKwlpZiAoY3Vycl9kaXJzICYgKDEgPDwgYml0KSkKKwkJb3V0YihjdXJyX2RpcnMgJiB+KDEgPDwgYml0KSwgZ3Bpb19iYSArIG9mZnNldCk7CisKKwlzcGluX3VubG9jaygmZ3Bpb19sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBncGlvX2NoaXAgc2NoX2dwaW9fY29yZSA9IHsKKwkubGFiZWwJCQk9ICJzY2hfZ3Bpb19jb3JlIiwKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5kaXJlY3Rpb25faW5wdXQJPSBzY2hfZ3Bpb19jb3JlX2RpcmVjdGlvbl9pbiwKKwkuZ2V0CQkJPSBzY2hfZ3Bpb19jb3JlX2dldCwKKwkuZGlyZWN0aW9uX291dHB1dAk9IHNjaF9ncGlvX2NvcmVfZGlyZWN0aW9uX291dCwKKwkuc2V0CQkJPSBzY2hfZ3Bpb19jb3JlX3NldCwKK307CisKK3N0YXRpYyBpbnQgc2NoX2dwaW9fcmVzdW1lX2RpcmVjdGlvbl9pbihzdHJ1Y3QgZ3Bpb19jaGlwICpnYywKKwkJCQkJdW5zaWduZWQgZ3Bpb19udW0pCit7CisJdTggY3Vycl9kaXJzOworCisJc3Bpbl9sb2NrKCZncGlvX2xvY2spOworCisJY3Vycl9kaXJzID0gaW5iKGdwaW9fYmEgKyBSR0lPKTsKKworCWlmICghKGN1cnJfZGlycyAmICgxIDw8IGdwaW9fbnVtKSkpCisJCW91dGIoY3Vycl9kaXJzIHwgKDEgPDwgZ3Bpb19udW0pICwgZ3Bpb19iYSArIFJHSU8pOworCisJc3Bpbl91bmxvY2soJmdwaW9fbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2NoX2dwaW9fcmVzdW1lX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgZ3Bpb19udW0pCit7CisJcmV0dXJuICEhKGluYihncGlvX2JhICsgUkdMVikgJiAoMSA8PCBncGlvX251bSkpOworfQorCitzdGF0aWMgdm9pZCBzY2hfZ3Bpb19yZXN1bWVfc2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLAorCQkJCXVuc2lnbmVkIGdwaW9fbnVtLCBpbnQgdmFsKQoreworCXU4IGN1cnJfdmFsczsKKworCXNwaW5fbG9jaygmZ3Bpb19sb2NrKTsKKworCWN1cnJfdmFscyA9IGluYihncGlvX2JhICsgUkdMVik7CisKKwlpZiAodmFsKQorCQlvdXRiKGN1cnJfdmFscyB8ICgxIDw8IGdwaW9fbnVtKSwgZ3Bpb19iYSArIFJHTFYpOworCWVsc2UKKwkJb3V0YigoY3Vycl92YWxzICYgfigxIDw8IGdwaW9fbnVtKSksIGdwaW9fYmEgKyBSR0xWKTsKKworCXNwaW5fdW5sb2NrKCZncGlvX2xvY2spOworfQorCitzdGF0aWMgaW50IHNjaF9ncGlvX3Jlc3VtZV9kaXJlY3Rpb25fb3V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLAorCQkJCQl1bnNpZ25lZCBncGlvX251bSwgaW50IHZhbCkKK3sKKwl1OCBjdXJyX2RpcnM7CisKKwlzY2hfZ3Bpb19yZXN1bWVfc2V0KGdjLCBncGlvX251bSwgdmFsKTsKKworCXNwaW5fbG9jaygmZ3Bpb19sb2NrKTsKKworCWN1cnJfZGlycyA9IGluYihncGlvX2JhICsgUkdJTyk7CisJaWYgKGN1cnJfZGlycyAmICgxIDw8IGdwaW9fbnVtKSkKKwkJb3V0YihjdXJyX2RpcnMgJiB+KDEgPDwgZ3Bpb19udW0pLCBncGlvX2JhICsgUkdJTyk7CisKKwlzcGluX3VubG9jaygmZ3Bpb19sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBncGlvX2NoaXAgc2NoX2dwaW9fcmVzdW1lID0geworCS5sYWJlbAkJCT0gInNjaF9ncGlvX3Jlc3VtZSIsCisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkuZGlyZWN0aW9uX2lucHV0CT0gc2NoX2dwaW9fcmVzdW1lX2RpcmVjdGlvbl9pbiwKKwkuZ2V0CQkJPSBzY2hfZ3Bpb19yZXN1bWVfZ2V0LAorCS5kaXJlY3Rpb25fb3V0cHV0CT0gc2NoX2dwaW9fcmVzdW1lX2RpcmVjdGlvbl9vdXQsCisJLnNldAkJCT0gc2NoX2dwaW9fcmVzdW1lX3NldCwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNjaF9ncGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGVycjsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmICghcmVxdWVzdF9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBwZGV2LT5uYW1lKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWdwaW9fYmEgPSByZXMtPnN0YXJ0OworCisJc2NoX2dwaW9fY29yZS5iYXNlID0gMDsKKwlzY2hfZ3Bpb19jb3JlLm5ncGlvID0gMTA7CisJc2NoX2dwaW9fY29yZS5kZXYgPSAmcGRldi0+ZGV2OworCisJc2NoX2dwaW9fcmVzdW1lLmJhc2UgPSAxMDsKKwlzY2hfZ3Bpb19yZXN1bWUubmdwaW8gPSA0OworCXNjaF9ncGlvX3Jlc3VtZS5kZXYgPSAmcGRldi0+ZGV2OworCisJZXJyID0gZ3Bpb2NoaXBfYWRkKCZzY2hfZ3Bpb19jb3JlKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfc2NoX2dwaW9fY29yZTsKKworCWVyciA9IGdwaW9jaGlwX2FkZCgmc2NoX2dwaW9fcmVzdW1lKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfc2NoX2dwaW9fcmVzdW1lOworCisJLyoKKwkgKiBHUElPWzY6MF0gZW5hYmxlZCBieSBkZWZhdWx0CisJICogR1BJTzcgaXMgY29uZmlndXJlZCBieSB0aGUgQ01DIGFzIFNMUElPVlIKKwkgKiBFbmFibGUgR1BJT1s5OjhdIGNvcmUgcG93ZXJlZCBncGlvcyBleHBsaWNpdGx5CisJICovCisJb3V0YigweDMsIGdwaW9fYmEgKyBDR0VOICsgMSk7CisJLyoKKwkgKiBTVVNfR1BJT1syOjBdIGVuYWJsZWQgYnkgZGVmYXVsdAorCSAqIEVuYWJsZSBTVVNfR1BJTzMgcmVzdW1lIHBvd2VyZWQgZ3BpbyBleHBsaWNpdGx5CisJICovCisJb3V0YigweDgsIGdwaW9fYmEgKyBSR0VOKTsKKworCXJldHVybiAwOworCitlcnJfc2NoX2dwaW9fcmVzdW1lOgorCWVyciA9IGdwaW9jaGlwX3JlbW92ZSgmc2NoX2dwaW9fY29yZSk7CisJaWYgKGVycikKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXMgZmFpbGVkLCAlZFxuIiwKKwkJCQkiZ3Bpb2NoaXBfcmVtb3ZlKCkiLCBlcnIpOworCitlcnJfc2NoX2dwaW9fY29yZToKKwlyZWxlYXNlX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWdwaW9fYmEgPSAwOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgc2NoX2dwaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaWYgKGdwaW9fYmEpIHsKKwkJaW50IGVycjsKKworCQllcnIgID0gZ3Bpb2NoaXBfcmVtb3ZlKCZzY2hfZ3Bpb19jb3JlKTsKKwkJaWYgKGVycikKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzIGZhaWxlZCwgJWRcbiIsCisJCQkJImdwaW9jaGlwX3JlbW92ZSgpIiwgZXJyKTsKKwkJZXJyID0gZ3Bpb2NoaXBfcmVtb3ZlKCZzY2hfZ3Bpb19yZXN1bWUpOworCQlpZiAoZXJyKQorCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXMgZmFpbGVkLCAlZFxuIiwKKwkJCQkiZ3Bpb2NoaXBfcmVtb3ZlKCkiLCBlcnIpOworCisJCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKKworCQlyZWxlYXNlX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCQlncGlvX2JhID0gMDsKKworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzY2hfZ3Bpb19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAic2NoX2dwaW8iLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBzY2hfZ3Bpb19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNjaF9ncGlvX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzY2hfZ3Bpb19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2NoX2dwaW9fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNjaF9ncGlvX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2NoX2dwaW9fZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc2NoX2dwaW9faW5pdCk7Cittb2R1bGVfZXhpdChzY2hfZ3Bpb19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiRGVuaXMgVHVyaXNjaGV2IDxkZW5pc0Bjb21wdWxhYi5jby5pbD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR1BJTyBpbnRlcmZhY2UgZm9yIEludGVsIFBvdWxzYm8gU0NIIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnNjaF9ncGlvIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vdGltYmdwaW8uYyBiL2RyaXZlcnMvZ3Bpby90aW1iZ3Bpby5jCmluZGV4IGE0ZDM0NGIuLmQ0Mjk1ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby90aW1iZ3Bpby5jCisrKyBiL2RyaXZlcnMvZ3Bpby90aW1iZ3Bpby5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdGltYl9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC0zNyw2ICszOCw4IEBACiAjZGVmaW5lIFRHUElPX0lDUgkweDE0CiAjZGVmaW5lIFRHUElPX0ZMUgkweDE4CiAjZGVmaW5lIFRHUElPX0xWUgkweDFjCisjZGVmaW5lIFRHUElPX1ZFUgkweDIwCisjZGVmaW5lIFRHUElPX0JGTFIJMHgyNAogCiBzdHJ1Y3QgdGltYmdwaW8gewogCXZvaWQgX19pb21lbQkJKm1lbWJhc2U7CkBAIC0xMjUsMTcgKzEyOCwyMyBAQAogCXN0cnVjdCB0aW1iZ3BpbyAqdGdwaW8gPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwogCWludCBvZmZzZXQgPSBpcnEgLSB0Z3Bpby0+aXJxX2Jhc2U7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MzIgbHZyLCBmbHI7CisJdTMyIGx2ciwgZmxyLCBiZmxyID0gMDsKKwl1MzIgdmVyOwogCiAJaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gdGdwaW8tPmdwaW8ubmdwaW8pCiAJCXJldHVybiAtRUlOVkFMOwogCisJdmVyID0gaW9yZWFkMzIodGdwaW8tPm1lbWJhc2UgKyBUR1BJT19WRVIpOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRncGlvLT5sb2NrLCBmbGFncyk7CiAKIAlsdnIgPSBpb3JlYWQzMih0Z3Bpby0+bWVtYmFzZSArIFRHUElPX0xWUik7CiAJZmxyID0gaW9yZWFkMzIodGdwaW8tPm1lbWJhc2UgKyBUR1BJT19GTFIpOworCWlmICh2ZXIgPiAyKQorCQliZmxyID0gaW9yZWFkMzIodGdwaW8tPm1lbWJhc2UgKyBUR1BJT19CRkxSKTsKIAogCWlmICh0cmlnZ2VyICYgKElSUV9UWVBFX0xFVkVMX0hJR0ggfCBJUlFfVFlQRV9MRVZFTF9MT1cpKSB7CisJCWJmbHIgJj0gfigxIDw8IG9mZnNldCk7CiAJCWZsciAmPSB+KDEgPDwgb2Zmc2V0KTsKIAkJaWYgKHRyaWdnZXIgJiBJUlFfVFlQRV9MRVZFTF9ISUdIKQogCQkJbHZyIHw9IDEgPDwgb2Zmc2V0OwpAQCAtMTQzLDIxICsxNTIsMjcgQEAKIAkJCWx2ciAmPSB+KDEgPDwgb2Zmc2V0KTsKIAl9CiAKLQlpZiAoKHRyaWdnZXIgJiBJUlFfVFlQRV9FREdFX0JPVEgpID09IElSUV9UWVBFX0VER0VfQk9USCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZWxzZSB7CisJaWYgKCh0cmlnZ2VyICYgSVJRX1RZUEVfRURHRV9CT1RIKSA9PSBJUlFfVFlQRV9FREdFX0JPVEgpIHsKKwkJaWYgKHZlciA8IDMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZWxzZSB7CisJCQlmbHIgfD0gMSA8PCBvZmZzZXQ7CisJCQliZmxyIHw9IDEgPDwgb2Zmc2V0OworCQl9CisJfSBlbHNlIHsKKwkJYmZsciAmPSB+KDEgPDwgb2Zmc2V0KTsKIAkJZmxyIHw9IDEgPDwgb2Zmc2V0OwotCQkvKiBvcHBvc2l0ZSBjb21wYXJlZCB0byB0aGUgZGF0YXNoZWV0LCBidXQgaXQgbWlycm9ycyB0aGUKLQkJICogcmVhbGl0eQotCQkgKi8KIAkJaWYgKHRyaWdnZXIgJiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpCi0JCQlsdnIgfD0gMSA8PCBvZmZzZXQ7Ci0JCWVsc2UKIAkJCWx2ciAmPSB+KDEgPDwgb2Zmc2V0KTsKKwkJZWxzZQorCQkJbHZyIHw9IDEgPDwgb2Zmc2V0OwogCX0KIAogCWlvd3JpdGUzMihsdnIsIHRncGlvLT5tZW1iYXNlICsgVEdQSU9fTFZSKTsKIAlpb3dyaXRlMzIoZmxyLCB0Z3Bpby0+bWVtYmFzZSArIFRHUElPX0ZMUik7CisJaWYgKHZlciA+IDIpCisJCWlvd3JpdGUzMihiZmxyLCB0Z3Bpby0+bWVtYmFzZSArIFRHUElPX0JGTFIpOworCiAJaW93cml0ZTMyKDEgPDwgb2Zmc2V0LCB0Z3Bpby0+bWVtYmFzZSArIFRHUElPX0lDUik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGdwaW8tPmxvY2ssIGZsYWdzKTsKIApAQCAtMTc0LDcgKzE4OSw3IEBACiAJaXByID0gaW9yZWFkMzIodGdwaW8tPm1lbWJhc2UgKyBUR1BJT19JUFIpOwogCWlvd3JpdGUzMihpcHIsIHRncGlvLT5tZW1iYXNlICsgVEdQSU9fSUNSKTsKIAotCWZvcl9lYWNoX2JpdChvZmZzZXQsICZpcHIsIHRncGlvLT5ncGlvLm5ncGlvKQorCWZvcl9lYWNoX3NldF9iaXQob2Zmc2V0LCAmaXByLCB0Z3Bpby0+Z3Bpby5uZ3BpbykKIAkJZ2VuZXJpY19oYW5kbGVfaXJxKHRpbWJncGlvX3RvX2lycSgmdGdwaW8tPmdwaW8sIG9mZnNldCkpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vd204MzF4LWdwaW8uYyBiL2RyaXZlcnMvZ3Bpby93bTgzMXgtZ3Bpby5jCmluZGV4IGI0NDY4YjYuLmQwOTAyMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby93bTgzMXgtZ3Bpby5jCisrKyBiL2RyaXZlcnMvZ3Bpby93bTgzMXgtZ3Bpby5jCkBAIC0zOCwxMCArMzgsMTQgQEAKIHsKIAlzdHJ1Y3Qgd204MzF4X2dwaW8gKndtODMxeF9ncGlvID0gdG9fd204MzF4X2dwaW8oY2hpcCk7CiAJc3RydWN0IHdtODMxeCAqd204MzF4ID0gd204MzF4X2dwaW8tPndtODMxeDsKKwlpbnQgdmFsID0gV004MzFYX0dQTl9ESVI7CisKKwlpZiAod204MzF4LT5oYXNfZ3Bpb19lbmEpCisJCXZhbCB8PSBXTTgzMVhfR1BOX1RSSTsKIAogCXJldHVybiB3bTgzMXhfc2V0X2JpdHMod204MzF4LCBXTTgzMVhfR1BJTzFfQ09OVFJPTCArIG9mZnNldCwKLQkJCSAgICAgICBXTTgzMVhfR1BOX0RJUiB8IFdNODMxWF9HUE5fVFJJLAotCQkJICAgICAgIFdNODMxWF9HUE5fRElSKTsKKwkJCSAgICAgICBXTTgzMVhfR1BOX0RJUiB8IFdNODMxWF9HUE5fVFJJIHwKKwkJCSAgICAgICBXTTgzMVhfR1BOX0ZOX01BU0ssIHZhbCk7CiB9CiAKIHN0YXRpYyBpbnQgd204MzF4X2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKQEAgLTYwLDE2ICs2NCw2IEBACiAJCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdtODMxeF9ncGlvX2RpcmVjdGlvbl9vdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKLQkJCQkgICAgIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQotewotCXN0cnVjdCB3bTgzMXhfZ3BpbyAqd204MzF4X2dwaW8gPSB0b193bTgzMXhfZ3BpbyhjaGlwKTsKLQlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSB3bTgzMXhfZ3Bpby0+d204MzF4OwotCi0JcmV0dXJuIHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9HUElPMV9DT05UUk9MICsgb2Zmc2V0LAotCQkJICAgICAgIFdNODMxWF9HUE5fRElSIHwgV004MzFYX0dQTl9UUkksIDApOwotfQotCiBzdGF0aWMgdm9pZCB3bTgzMXhfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCiB7CiAJc3RydWN0IHdtODMxeF9ncGlvICp3bTgzMXhfZ3BpbyA9IHRvX3dtODMxeF9ncGlvKGNoaXApOwpAQCAtNzksNiArNzMsMjkgQEAKIAkJCXZhbHVlIDw8IG9mZnNldCk7CiB9CiAKK3N0YXRpYyBpbnQgd204MzF4X2dwaW9fZGlyZWN0aW9uX291dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCSAgICAgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHdtODMxeF9ncGlvICp3bTgzMXhfZ3BpbyA9IHRvX3dtODMxeF9ncGlvKGNoaXApOworCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IHdtODMxeF9ncGlvLT53bTgzMXg7CisJaW50IHZhbCA9IDA7CisJaW50IHJldDsKKworCWlmICh3bTgzMXgtPmhhc19ncGlvX2VuYSkKKwkJdmFsIHw9IFdNODMxWF9HUE5fVFJJOworCisJcmV0ID0gd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX0dQSU8xX0NPTlRST0wgKyBvZmZzZXQsCisJCQkgICAgICBXTTgzMVhfR1BOX0RJUiB8IFdNODMxWF9HUE5fVFJJIHwKKwkJCSAgICAgIFdNODMxWF9HUE5fRk5fTUFTSywgdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIENhbiBvbmx5IHNldCBHUElPIHN0YXRlIG9uY2UgaXQncyBpbiBvdXRwdXQgbW9kZSAqLworCXdtODMxeF9ncGlvX3NldChjaGlwLCBvZmZzZXQsIHZhbHVlKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHdtODMxeF9ncGlvX3RvX2lycShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAJc3RydWN0IHdtODMxeF9ncGlvICp3bTgzMXhfZ3BpbyA9IHRvX3dtODMxeF9ncGlvKGNoaXApOwpAQCAtOTUsNyArMTEyLDcgQEAKIHsKIAlzdHJ1Y3Qgd204MzF4X2dwaW8gKndtODMxeF9ncGlvID0gdG9fd204MzF4X2dwaW8oY2hpcCk7CiAJc3RydWN0IHdtODMxeCAqd204MzF4ID0gd204MzF4X2dwaW8tPndtODMxeDsKLQlpbnQgaTsKKwlpbnQgaSwgdHJpc3RhdGVkOwogCiAJZm9yIChpID0gMDsgaSA8IGNoaXAtPm5ncGlvOyBpKyspIHsKIAkJaW50IGdwaW8gPSBpICsgY2hpcC0+YmFzZTsKQEAgLTE2MiwxNSArMTc5LDE5IEBACiAJCQlicmVhazsKIAkJfQogCisJCXRyaXN0YXRlZCA9IHJlZyAmIFdNODMxWF9HUE5fVFJJOworCQlpZiAod204MzF4LT5oYXNfZ3Bpb19lbmEpCisJCQl0cmlzdGF0ZWQgPSAhdHJpc3RhdGVkOworCiAJCXNlcV9wcmludGYocywgIiAlcyAlcyAlcyAlcyVzXG4iCiAJCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVzJXMgKDB4JTR4KVxuIiwKIAkJCSAgIHJlZyAmIFdNODMxWF9HUE5fRElSID8gImluIiA6ICJvdXQiLAogCQkJICAgd204MzF4X2dwaW9fZ2V0KGNoaXAsIGkpID8gImhpZ2giIDogImxvdyIsCiAJCQkgICBwdWxsLAogCQkJICAgcG93ZXJkb21haW4sCi0JCQkgICByZWcgJiBXTTgzMVhfR1BOX1BPTCA/ICIgaW52ZXJ0ZWQiIDogIiIsCisJCQkgICByZWcgJiBXTTgzMVhfR1BOX1BPTCA/ICIiIDogIiBpbnZlcnRlZCIsCiAJCQkgICByZWcgJiBXTTgzMVhfR1BOX09EID8gIm9wZW4tZHJhaW4iIDogIkNNT1MiLAotCQkJICAgcmVnICYgV004MzFYX0dQTl9UUkkgPyAiIHRyaXN0YXRlZCIgOiAiIiwKKwkJCSAgIHRyaXN0YXRlZCA/ICIgdHJpc3RhdGVkIiA6ICIiLAogCQkJICAgcmVnKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vd204MzUwLWdwaW9saWIuYyBiL2RyaXZlcnMvZ3Bpby93bTgzNTAtZ3Bpb2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMTg0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwaW8vd204MzUwLWdwaW9saWIuYwpAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIHdtODM1eC1ncGlvbGliLmMgIC0tICBncGlvbGliIHN1cHBvcnQgZm9yIFdvbGZzb24gV004MzV4IFBNSUNzCisgKgorICogQ29weXJpZ2h0IDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvZ3Bpby5oPgorCitzdHJ1Y3Qgd204MzUwX2dwaW9fZGF0YSB7CisJc3RydWN0IHdtODM1MCAqd204MzUwOworCXN0cnVjdCBncGlvX2NoaXAgZ3Bpb19jaGlwOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgd204MzUwX2dwaW9fZGF0YSAqdG9fd204MzUwX2dwaW8oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCB3bTgzNTBfZ3Bpb19kYXRhLCBncGlvX2NoaXApOworfQorCitzdGF0aWMgaW50IHdtODM1MF9ncGlvX2RpcmVjdGlvbl9pbihzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IHdtODM1MF9ncGlvX2RhdGEgKndtODM1MF9ncGlvID0gdG9fd204MzUwX2dwaW8oY2hpcCk7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gd204MzUwX2dwaW8tPndtODM1MDsKKworCXJldHVybiB3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfR1BJT19DT05GSUdVUkFUSU9OX0lfTywKKwkJCSAgICAgICAxIDw8IG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3Qgd204MzUwX2dwaW9fZGF0YSAqd204MzUwX2dwaW8gPSB0b193bTgzNTBfZ3BpbyhjaGlwKTsKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSB3bTgzNTBfZ3Bpby0+d204MzUwOworCWludCByZXQ7CisKKwlyZXQgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfR1BJT19MRVZFTCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAocmV0ICYgKDEgPDwgb2Zmc2V0KSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd204MzUwX2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCB3bTgzNTBfZ3Bpb19kYXRhICp3bTgzNTBfZ3BpbyA9IHRvX3dtODM1MF9ncGlvKGNoaXApOworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHdtODM1MF9ncGlvLT53bTgzNTA7CisKKwlpZiAodmFsdWUpCisJCXdtODM1MF9zZXRfYml0cyh3bTgzNTAsIFdNODM1MF9HUElPX0xFVkVMLCAxIDw8IG9mZnNldCk7CisJZWxzZQorCQl3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9HUElPX0xFVkVMLCAxIDw8IG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2dwaW9fZGlyZWN0aW9uX291dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCSAgICAgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHdtODM1MF9ncGlvX2RhdGEgKndtODM1MF9ncGlvID0gdG9fd204MzUwX2dwaW8oY2hpcCk7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gd204MzUwX2dwaW8tPndtODM1MDsKKwlpbnQgcmV0OworCisJcmV0ID0gd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfR1BJT19DT05GSUdVUkFUSU9OX0lfTywKKwkJCQkxIDw8IG9mZnNldCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBEb24ndCBoYXZlIGFuIGF0b21pYyBkaXJlY3Rpb24vdmFsdWUgc2V0dXAgKi8KKwl3bTgzNTBfZ3Bpb19zZXQoY2hpcCwgb2Zmc2V0LCB2YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTgzNTBfZ3Bpb190b19pcnEoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCB3bTgzNTBfZ3Bpb19kYXRhICp3bTgzNTBfZ3BpbyA9IHRvX3dtODM1MF9ncGlvKGNoaXApOworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHdtODM1MF9ncGlvLT53bTgzNTA7CisKKwlpZiAoIXdtODM1MC0+aXJxX2Jhc2UpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHdtODM1MC0+aXJxX2Jhc2UgKyBXTTgzNTBfSVJRX0dQSU8ob2Zmc2V0KTsKK30KKworc3RhdGljIHN0cnVjdCBncGlvX2NoaXAgdGVtcGxhdGVfY2hpcCA9IHsKKwkubGFiZWwJCQk9ICJ3bTgzNTAiLAorCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLmRpcmVjdGlvbl9pbnB1dAk9IHdtODM1MF9ncGlvX2RpcmVjdGlvbl9pbiwKKwkuZ2V0CQkJPSB3bTgzNTBfZ3Bpb19nZXQsCisJLmRpcmVjdGlvbl9vdXRwdXQJPSB3bTgzNTBfZ3Bpb19kaXJlY3Rpb25fb3V0LAorCS5zZXQJCQk9IHdtODM1MF9ncGlvX3NldCwKKwkudG9faXJxCQkJPSB3bTgzNTBfZ3Bpb190b19pcnEsCisJLmNhbl9zbGVlcAkJPSAxLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgd204MzUwX2dwaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHdtODM1MF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHdtODM1MC0+ZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB3bTgzNTBfZ3Bpb19kYXRhICp3bTgzNTBfZ3BpbzsKKwlpbnQgcmV0OworCisJd204MzUwX2dwaW8gPSBremFsbG9jKHNpemVvZigqd204MzUwX2dwaW8pLCBHRlBfS0VSTkVMKTsKKwlpZiAod204MzUwX2dwaW8gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl3bTgzNTBfZ3Bpby0+d204MzUwID0gd204MzUwOworCXdtODM1MF9ncGlvLT5ncGlvX2NoaXAgPSB0ZW1wbGF0ZV9jaGlwOworCXdtODM1MF9ncGlvLT5ncGlvX2NoaXAubmdwaW8gPSAxMzsKKwl3bTgzNTBfZ3Bpby0+Z3Bpb19jaGlwLmRldiA9ICZwZGV2LT5kZXY7CisJaWYgKHBkYXRhICYmIHBkYXRhLT5ncGlvX2Jhc2UpCisJCXdtODM1MF9ncGlvLT5ncGlvX2NoaXAuYmFzZSA9IHBkYXRhLT5ncGlvX2Jhc2U7CisJZWxzZQorCQl3bTgzNTBfZ3Bpby0+Z3Bpb19jaGlwLmJhc2UgPSAtMTsKKworCXJldCA9IGdwaW9jaGlwX2FkZCgmd204MzUwX2dwaW8tPmdwaW9fY2hpcCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIGdwaW9jaGlwLCAlZFxuIiwKKwkJCXJldCk7CisJCWdvdG8gZXJyOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHdtODM1MF9ncGlvKTsKKworCXJldHVybiByZXQ7CisKK2VycjoKKwlrZnJlZSh3bTgzNTBfZ3Bpbyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgd204MzUwX2dwaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHdtODM1MF9ncGlvX2RhdGEgKndtODM1MF9ncGlvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IHJldDsKKworCXJldCA9IGdwaW9jaGlwX3JlbW92ZSgmd204MzUwX2dwaW8tPmdwaW9fY2hpcCk7CisJaWYgKHJldCA9PSAwKQorCQlrZnJlZSh3bTgzNTBfZ3Bpbyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3bTgzNTBfZ3Bpb19kcml2ZXIgPSB7CisJLmRyaXZlci5uYW1lCT0gIndtODM1MC1ncGlvIiwKKwkuZHJpdmVyLm93bmVyCT0gVEhJU19NT0RVTEUsCisJLnByb2JlCQk9IHdtODM1MF9ncGlvX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod204MzUwX2dwaW9fcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdtODM1MF9ncGlvX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ3bTgzNTBfZ3Bpb19kcml2ZXIpOworfQorc3Vic3lzX2luaXRjYWxsKHdtODM1MF9ncGlvX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgd204MzUwX2dwaW9fZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3bTgzNTBfZ3Bpb19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQod204MzUwX2dwaW9fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHUElPIGludGVyZmFjZSBmb3IgV004MzUwIFBNSUNzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOndtODM1MC1ncGlvIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vd204OTk0LWdwaW8uYyBiL2RyaXZlcnMvZ3Bpby93bTg5OTQtZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMjhiNGE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncGlvL3dtODk5NC1ncGlvLmMKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgKiB3bTg5OTQtZ3Bpby5jICAtLSAgZ3Bpb2xpYiBzdXBwb3J0IGZvciBXb2xmc29uIFdNODk5NAorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tZmQvd204OTk0L2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204OTk0L3BkYXRhLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODk5NC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODk5NC9yZWdpc3RlcnMuaD4KKworc3RydWN0IHdtODk5NF9ncGlvIHsKKwlzdHJ1Y3Qgd204OTk0ICp3bTg5OTQ7CisJc3RydWN0IGdwaW9fY2hpcCBncGlvX2NoaXA7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB3bTg5OTRfZ3BpbyAqdG9fd204OTk0X2dwaW8oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCB3bTg5OTRfZ3BpbywgZ3Bpb19jaGlwKTsKK30KKworc3RhdGljIGludCB3bTg5OTRfZ3Bpb19kaXJlY3Rpb25faW4oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCB3bTg5OTRfZ3BpbyAqd204OTk0X2dwaW8gPSB0b193bTg5OTRfZ3BpbyhjaGlwKTsKKwlzdHJ1Y3Qgd204OTk0ICp3bTg5OTQgPSB3bTg5OTRfZ3Bpby0+d204OTk0OworCisJcmV0dXJuIHdtODk5NF9zZXRfYml0cyh3bTg5OTQsIFdNODk5NF9HUElPXzEgKyBvZmZzZXQsCisJCQkgICAgICAgV004OTk0X0dQTl9ESVIsIFdNODk5NF9HUE5fRElSKTsKK30KKworc3RhdGljIGludCB3bTg5OTRfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCB3bTg5OTRfZ3BpbyAqd204OTk0X2dwaW8gPSB0b193bTg5OTRfZ3BpbyhjaGlwKTsKKwlzdHJ1Y3Qgd204OTk0ICp3bTg5OTQgPSB3bTg5OTRfZ3Bpby0+d204OTk0OworCWludCByZXQ7CisKKwlyZXQgPSB3bTg5OTRfcmVnX3JlYWQod204OTk0LCBXTTg5OTRfR1BJT18xICsgb2Zmc2V0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChyZXQgJiBXTTg5OTRfR1BOX0xWTCkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTRfZ3Bpb19kaXJlY3Rpb25fb3V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJICAgICB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgd204OTk0X2dwaW8gKndtODk5NF9ncGlvID0gdG9fd204OTk0X2dwaW8oY2hpcCk7CisJc3RydWN0IHdtODk5NCAqd204OTk0ID0gd204OTk0X2dwaW8tPndtODk5NDsKKworCXJldHVybiB3bTg5OTRfc2V0X2JpdHMod204OTk0LCBXTTg5OTRfR1BJT18xICsgb2Zmc2V0LAorCQkJICAgICAgIFdNODk5NF9HUE5fRElSLCAwKTsKK30KKworc3RhdGljIHZvaWQgd204OTk0X2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCB3bTg5OTRfZ3BpbyAqd204OTk0X2dwaW8gPSB0b193bTg5OTRfZ3BpbyhjaGlwKTsKKwlzdHJ1Y3Qgd204OTk0ICp3bTg5OTQgPSB3bTg5OTRfZ3Bpby0+d204OTk0OworCisJaWYgKHZhbHVlKQorCQl2YWx1ZSA9IFdNODk5NF9HUE5fTFZMOworCisJd204OTk0X3NldF9iaXRzKHdtODk5NCwgV004OTk0X0dQSU9fMSArIG9mZnNldCwgV004OTk0X0dQTl9MVkwsIHZhbHVlKTsKK30KKworI2lmZGVmIENPTkZJR19ERUJVR19GUworc3RhdGljIHZvaWQgd204OTk0X2dwaW9fZGJnX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwKQoreworCXN0cnVjdCB3bTg5OTRfZ3BpbyAqd204OTk0X2dwaW8gPSB0b193bTg5OTRfZ3BpbyhjaGlwKTsKKwlzdHJ1Y3Qgd204OTk0ICp3bTg5OTQgPSB3bTg5OTRfZ3Bpby0+d204OTk0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNoaXAtPm5ncGlvOyBpKyspIHsKKwkJaW50IGdwaW8gPSBpICsgY2hpcC0+YmFzZTsKKwkJaW50IHJlZzsKKwkJY29uc3QgY2hhciAqbGFiZWw7CisKKwkJLyogV2UgcmVwb3J0IHRoZSBHUElPIGV2ZW4gaWYgaXQncyBub3QgcmVxdWVzdGVkIHNpbmNlCisJCSAqIHdlJ3JlIGFsc28gcmVwb3J0aW5nIHRoaW5ncyBsaWtlIGFsdGVybmF0ZQorCQkgKiBmdW5jdGlvbnMgd2hpY2ggYXBwbHkgZXZlbiB3aGVuIHRoZSBHUElPIGlzIG5vdCBpbgorCQkgKiB1c2UgYXMgYSBHUElPLgorCQkgKi8KKwkJbGFiZWwgPSBncGlvY2hpcF9pc19yZXF1ZXN0ZWQoY2hpcCwgaSk7CisJCWlmICghbGFiZWwpCisJCQlsYWJlbCA9ICJVbnJlcXVlc3RlZCI7CisKKwkJc2VxX3ByaW50ZihzLCAiIGdwaW8tJS0zZCAoJS0yMC4yMHMpICIsIGdwaW8sIGxhYmVsKTsKKworCQlyZWcgPSB3bTg5OTRfcmVnX3JlYWQod204OTk0LCBXTTg5OTRfR1BJT18xICsgaSk7CisJCWlmIChyZWcgPCAwKSB7CisJCQlkZXZfZXJyKHdtODk5NC0+ZGV2LAorCQkJCSJHUElPIGNvbnRyb2wgJWQgcmVhZCBmYWlsZWQ6ICVkXG4iLAorCQkJCWdwaW8sIHJlZyk7CisJCQlzZXFfcHJpbnRmKHMsICJcbiIpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBObyBkZWNvZGUgeWV0OyBub3RlIHRoYXQgR1BJTzIgaXMgc3BlY2lhbCAqLworCQlzZXFfcHJpbnRmKHMsICIoJXgpXG4iLCByZWcpOworCX0KK30KKyNlbHNlCisjZGVmaW5lIHdtODk5NF9ncGlvX2RiZ19zaG93IE5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGdwaW9fY2hpcCB0ZW1wbGF0ZV9jaGlwID0geworCS5sYWJlbAkJCT0gIndtODk5NCIsCisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkuZGlyZWN0aW9uX2lucHV0CT0gd204OTk0X2dwaW9fZGlyZWN0aW9uX2luLAorCS5nZXQJCQk9IHdtODk5NF9ncGlvX2dldCwKKwkuZGlyZWN0aW9uX291dHB1dAk9IHdtODk5NF9ncGlvX2RpcmVjdGlvbl9vdXQsCisJLnNldAkJCT0gd204OTk0X2dwaW9fc2V0LAorCS5kYmdfc2hvdwkJPSB3bTg5OTRfZ3Bpb19kYmdfc2hvdywKKwkuY2FuX3NsZWVwCQk9IDEsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCB3bTg5OTRfZ3Bpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB3bTg5OTQgKndtODk5NCA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3Qgd204OTk0X3BkYXRhICpwZGF0YSA9IHdtODk5NC0+ZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCB3bTg5OTRfZ3BpbyAqd204OTk0X2dwaW87CisJaW50IHJldDsKKworCXdtODk5NF9ncGlvID0ga3phbGxvYyhzaXplb2YoKndtODk5NF9ncGlvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdtODk5NF9ncGlvID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJd204OTk0X2dwaW8tPndtODk5NCA9IHdtODk5NDsKKwl3bTg5OTRfZ3Bpby0+Z3Bpb19jaGlwID0gdGVtcGxhdGVfY2hpcDsKKwl3bTg5OTRfZ3Bpby0+Z3Bpb19jaGlwLm5ncGlvID0gV004OTk0X0dQSU9fTUFYOworCXdtODk5NF9ncGlvLT5ncGlvX2NoaXAuZGV2ID0gJnBkZXYtPmRldjsKKwlpZiAocGRhdGEgJiYgcGRhdGEtPmdwaW9fYmFzZSkKKwkJd204OTk0X2dwaW8tPmdwaW9fY2hpcC5iYXNlID0gcGRhdGEtPmdwaW9fYmFzZTsKKwllbHNlCisJCXdtODk5NF9ncGlvLT5ncGlvX2NoaXAuYmFzZSA9IC0xOworCisJcmV0ID0gZ3Bpb2NoaXBfYWRkKCZ3bTg5OTRfZ3Bpby0+Z3Bpb19jaGlwKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgZ3Bpb2NoaXAsICVkXG4iLAorCQkJcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgd204OTk0X2dwaW8pOworCisJcmV0dXJuIHJldDsKKworZXJyOgorCWtmcmVlKHdtODk5NF9ncGlvKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB3bTg5OTRfZ3Bpb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgd204OTk0X2dwaW8gKndtODk5NF9ncGlvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IHJldDsKKworCXJldCA9IGdwaW9jaGlwX3JlbW92ZSgmd204OTk0X2dwaW8tPmdwaW9fY2hpcCk7CisJaWYgKHJldCA9PSAwKQorCQlrZnJlZSh3bTg5OTRfZ3Bpbyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3bTg5OTRfZ3Bpb19kcml2ZXIgPSB7CisJLmRyaXZlci5uYW1lCT0gIndtODk5NC1ncGlvIiwKKwkuZHJpdmVyLm93bmVyCT0gVEhJU19NT0RVTEUsCisJLnByb2JlCQk9IHdtODk5NF9ncGlvX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod204OTk0X2dwaW9fcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHdtODk5NF9ncGlvX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ3bTg5OTRfZ3Bpb19kcml2ZXIpOworfQorc3Vic3lzX2luaXRjYWxsKHdtODk5NF9ncGlvX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgd204OTk0X2dwaW9fZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3bTg5OTRfZ3Bpb19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQod204OTk0X2dwaW9fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHUElPIGludGVyZmFjZSBmb3IgV004OTk0Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOndtODk5NC1ncGlvIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKaW5kZXggNjhjZjg3Ny4uZTQ1OTVlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwpAQCAtMTcwLDYgKzE3MCwxNiBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgYWRtOTI0MC4KIAorY29uZmlnIFNFTlNPUlNfQURUNzQxMQorCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRFQ3NDExIgorCWRlcGVuZHMgb24gSTJDICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgQW5hbG9nIERldmljZXMKKwkgIEFEVDc0MTEgdm9sdGFnZSBhbmQgdGVtcGVyYXR1cmUgbW9uaXRvcmluZyBjaGlwLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGFkdDc0MTEuCisKIGNvbmZpZyBTRU5TT1JTX0FEVDc0NjIKIAl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQURUNzQ2MiIKIAlkZXBlbmRzIG9uIEkyQyAmJiBFWFBFUklNRU5UQUwKQEAgLTE5MCwyMCArMjAwLDYgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgYWR0NzQ3MC4KIAotY29uZmlnIFNFTlNPUlNfQURUNzQ3MwotCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRFQ3NDczIChERVBSRUNBVEVEKSIKLQlkZXBlbmRzIG9uIEkyQyAmJiBFWFBFUklNRU5UQUwKLQlzZWxlY3QgU0VOU09SU19BRFQ3NDc1Ci0JaGVscAotCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBBbmFsb2cgRGV2aWNlcwotCSAgQURUNzQ3MyB0ZW1wZXJhdHVyZSBtb25pdG9yaW5nIGNoaXBzLgotCi0JICBUaGlzIGRyaXZlciBpcyBkZXByZWNhdGVkLCB5b3Ugc2hvdWxkIHVzZSB0aGUgYWR0NzQ3NSBkcml2ZXIKLQkgIGluc3RlYWQuCi0KLQkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQotCSAgd2lsbCBiZSBjYWxsZWQgYWR0NzQ3My4KLQogY29uZmlnIFNFTlNPUlNfQURUNzQ3NQogCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRFQ3NDczLCBBRFQ3NDc1LCBBRFQ3NDc2IGFuZCBBRFQ3NDkwIgogCWRlcGVuZHMgb24gSTJDICYmIEVYUEVSSU1FTlRBTApAQCAtMjE2LDYgKzIxMiwxOSBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbGQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgYWR0NzQ3NS4KIAorY29uZmlnIFNFTlNPUlNfQVNDNzYyMQorCXRyaXN0YXRlICJBbmRpZ2lsb2cgYVNDNzYyMSIKKwlkZXBlbmRzIG9uIEhXTU9OICYmIEkyQworCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgYVNDNzYyMQorCSAgZmFtaWx5IG9mIFNNQnVzIHNlbnNvcnMgY2hpcCBmb3VuZCBvbiBtb3N0IEludGVsIFg0OCwgWDM4LCA5NzUsCisJICA5NjUgYW5kIDk0NSBkZXNrdG9wIGJvYXJkcy4gIEN1cnJlbnRseSBzdXBwb3J0ZWQgY2hpcHM6CisJICBhU0M3NjIxCisJICBhU0M3NjIxYQorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBhc2M3NjIxLgorCiBjb25maWcgU0VOU09SU19LOFRFTVAKIAl0cmlzdGF0ZSAiQU1EIEF0aGxvbjY0L0ZYIG9yIE9wdGVyb24gdGVtcGVyYXR1cmUgc2Vuc29yIgogCWRlcGVuZHMgb24gWDg2ICYmIFBDSSAmJiBFWFBFUklNRU5UQUwKQEAgLTU2Myw5ICs1NzIsMTAgQEAKIAlkZXBlbmRzIG9uIEkyQwogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNOTAsCi0JICBMTTg2LCBMTTg5IGFuZCBMTTk5LCBBbmFsb2cgRGV2aWNlcyBBRE0xMDMyIGFuZCBBRFQ3NDYxLCBhbmQgTWF4aW0KKwkgIExNODYsIExNODkgYW5kIExNOTksIEFuYWxvZyBEZXZpY2VzIEFETTEwMzIgYW5kIEFEVDc0NjEsIE1heGltCiAJICBNQVg2NjQ2LCBNQVg2NjQ3LCBNQVg2NjQ4LCBNQVg2NjQ5LCBNQVg2NjU3LCBNQVg2NjU4LCBNQVg2NjU5LAotCSAgTUFYNjY4MCwgTUFYNjY4MSBhbmQgTUFYNjY5MiBzZW5zb3IgY2hpcHMuCisJICBNQVg2NjgwLCBNQVg2NjgxIGFuZCBNQVg2NjkyLCBhbmQgV2luYm9uZC9OdXZvdG9uIFc4M0w3NzFBV0cvQVNHCisJICBzZW5zb3IgY2hpcHMuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGxtOTAuCkBAIC05MDksNyArOTE5LDggQEAKIAlzZWxlY3QgSFdNT05fVklECiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBXaW5ib25kIFc4Mzc5MwotCSAgaGFyZHdhcmUgbW9uaXRvcmluZyBjaGlwLgorCSAgaGFyZHdhcmUgbW9uaXRvcmluZyBjaGlwLCBpbmNsdWRpbmcgc3VwcG9ydCBmb3IgdGhlIGludGVncmF0ZWQKKwkgIHdhdGNoZG9nLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCB3ODM3OTMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL01ha2VmaWxlIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQppbmRleCA0YmMyMTVjLi40YWExYTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKQEAgLTI5LDEyICsyOSwxMyBAQAogb2JqLSQoQ09ORklHX1NFTlNPUlNfQURNMTAzMSkJKz0gYWRtMTAzMS5vCiBvYmotJChDT05GSUdfU0VOU09SU19BRE05MjQwKQkrPSBhZG05MjQwLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0FEUzc4MjgpCSs9IGFkczc4Mjgubworb2JqLSQoQ09ORklHX1NFTlNPUlNfQURUNzQxMSkJKz0gYWR0NzQxMS5vCiBvYmotJChDT05GSUdfU0VOU09SU19BRFQ3NDYyKQkrPSBhZHQ3NDYyLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0FEVDc0NzApCSs9IGFkdDc0NzAubwotb2JqLSQoQ09ORklHX1NFTlNPUlNfQURUNzQ3MykJKz0gYWR0NzQ3My5vCiBvYmotJChDT05GSUdfU0VOU09SU19BRFQ3NDc1KQkrPSBhZHQ3NDc1Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0FQUExFU01DKQkrPSBhcHBsZXNtYy5vCiBvYmotJChDT05GSUdfU0VOU09SU19BTVMpCSs9IGFtcy8KK29iai0kKENPTkZJR19TRU5TT1JTX0FTQzc2MjEpCSs9IGFzYzc2MjEubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfQVRYUDEpCSs9IGF0eHAxLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0NPUkVURU1QKQkrPSBjb3JldGVtcC5vCiBvYmotJChDT05GSUdfU0VOU09SU19ETUUxNzM3KQkrPSBkbWUxNzM3Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWRjeHguYyBiL2RyaXZlcnMvaHdtb24vYWRjeHguYwppbmRleCA1ZTllMDk1Li43NGQ5YzUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FkY3h4LmMKKysrIGIvZHJpdmVycy9od21vbi9hZGN4eC5jCkBAIC02MiwxOCArNjIsMjMgQEAKIAlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShkZXYpOwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKIAlzdHJ1Y3QgYWRjeHggKmFkYyA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOwotCXU4IHR4X2J1ZlsyXSA9IHsgYXR0ci0+aW5kZXggPDwgMyB9OyAvKiBvdGhlciBiaXRzIGFyZSBkb24ndCBjYXJlICovCisJdTggdHhfYnVmWzJdOwogCXU4IHJ4X2J1ZlsyXTsKIAlpbnQgc3RhdHVzOwotCWludCB2YWx1ZTsKKwl1MzIgdmFsdWU7CiAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZhZGMtPmxvY2spKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCi0Jc3RhdHVzID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksIHR4X2J1Ziwgc2l6ZW9mKHR4X2J1ZiksCi0JCQkJCXJ4X2J1Ziwgc2l6ZW9mKHJ4X2J1ZikpOworCWlmIChhZGMtPmNoYW5uZWxzID09IDEpIHsKKwkJc3RhdHVzID0gc3BpX3JlYWQoc3BpLCByeF9idWYsIHNpemVvZihyeF9idWYpKTsKKwl9IGVsc2UgeworCQl0eF9idWZbMF0gPSBhdHRyLT5pbmRleCA8PCAzOyAvKiBvdGhlciBiaXRzIGFyZSBkb24ndCBjYXJlICovCisJCXN0YXR1cyA9IHNwaV93cml0ZV90aGVuX3JlYWQoc3BpLCB0eF9idWYsIHNpemVvZih0eF9idWYpLAorCQkJCQkJcnhfYnVmLCBzaXplb2YocnhfYnVmKSk7CisJfQogCWlmIChzdGF0dXMgPCAwKSB7Ci0JCWRldl93YXJuKGRldiwgInNwaV93cml0ZV90aGVuX3JlYWQgZmFpbGVkIHdpdGggc3RhdHVzICVkXG4iLAorCQlkZXZfd2FybihkZXYsICJTUEkgc3luY2guIHRyYW5zZmVyIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwKIAkJCQlzdGF0dXMpOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkdDc0MTEuYyBiL2RyaXZlcnMvaHdtb24vYWR0NzQxMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NzE4ODQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL2FkdDc0MTEuYwpAQCAtMCwwICsxLDM2NiBAQAorLyoKKyAqICBEcml2ZXIgZm9yIHRoZSBBRFQ3NDExIChJMkMvU1BJIDggY2hhbm5lbCAxMCBiaXQgQURDICYgdGVtcGVyYXR1cmUtc2Vuc29yKQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTAgUGVuZ3V0cm9uaXgKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBUT0RPOiBTUEksIHN1cHBvcnQgZm9yIGV4dGVybmFsIHRlbXBlcmF0dXJlIHNlbnNvcgorICogCSAgdXNlIHBvd2VyLWRvd24gbW9kZSBmb3Igc3VzcGVuZD8sIGludGVycnVwdCBoYW5kbGluZz8KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgorCisjZGVmaW5lIEFEVDc0MTFfUkVHX0lOVF9URU1QX1ZERF9MU0IJCTB4MDMKKyNkZWZpbmUgQURUNzQxMV9SRUdfRVhUX1RFTVBfQUlOMTRfTFNCCQkweDA0CisjZGVmaW5lIEFEVDc0MTFfUkVHX1ZERF9NU0IJCQkweDA2CisjZGVmaW5lIEFEVDc0MTFfUkVHX0lOVF9URU1QX01TQgkJMHgwNworI2RlZmluZSBBRFQ3NDExX1JFR19FWFRfVEVNUF9BSU4xX01TQgkJMHgwOAorCisjZGVmaW5lIEFEVDc0MTFfUkVHX0NGRzEJCQkweDE4CisjZGVmaW5lIEFEVDc0MTFfQ0ZHMV9TVEFSVF9NT05JVE9SCQkoMSA8PCAwKQorCisjZGVmaW5lIEFEVDc0MTFfUkVHX0NGRzIJCQkweDE5CisjZGVmaW5lIEFEVDc0MTFfQ0ZHMl9ESVNBQkxFX0FWRwkJKDEgPDwgNSkKKworI2RlZmluZSBBRFQ3NDExX1JFR19DRkczCQkJMHgxYQorI2RlZmluZSBBRFQ3NDExX0NGRzNfQURDX0NMS18yMjUJCSgxIDw8IDApCisjZGVmaW5lIEFEVDc0MTFfQ0ZHM19SRUZfVkRECQkJKDEgPDwgNCkKKworI2RlZmluZSBBRFQ3NDExX1JFR19ERVZJQ0VfSUQJCQkweDRkCisjZGVmaW5lIEFEVDc0MTFfUkVHX01BTlVGQUNUVVJFUl9JRAkJMHg0ZQorCisjZGVmaW5lIEFEVDc0MTFfREVWSUNFX0lECQkJMHgyCisjZGVmaW5lIEFEVDc0MTFfTUFOVUZBQ1RVUkVSX0lECQkJMHg0MQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDQ4LCAweDRhLCAweDRiLCBJMkNfQ0xJRU5UX0VORCB9OworCitzdHJ1Y3QgYWR0NzQxMV9kYXRhIHsKKwlzdHJ1Y3QgbXV0ZXggZGV2aWNlX2xvY2s7CS8qIGZvciAiYXRvbWljIiBkZXZpY2UgYWNjZXNzZXMgKi8KKwlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CisJdW5zaWduZWQgbG9uZyBuZXh0X3VwZGF0ZTsKKwlpbnQgdnJlZl9jYWNoZWQ7CisJc3RydWN0IGRldmljZSAqaHdtb25fZGV2OworfTsKKworLyoKKyAqIFdoZW4gcmVhZGluZyBhIHJlZ2lzdGVyIGNvbnRhaW5pbmcgKHVwIHRvIDQpIGxzYiwgYWxsIGFzc29jaWF0ZWQKKyAqIG1zYi1yZWdpc3RlcnMgZ2V0IGxvY2tlZCBieSB0aGUgaGFyZHdhcmUuIEFmdGVyIF9vbmVfIG9mIHRob3NlIG1zYiBpcyByZWFkLAorICogX2FsbF8gYXJlIHVubG9ja2VkLiBJbiBvcmRlciB0byB1c2UgdGhpcyBsb2NraW5nIGNvcnJlY3RseSwgcmVhZGluZyBsc2IvbXNiCisgKiBpcyBwcm90ZWN0ZWQgaGVyZSB3aXRoIGEgbXV0ZXgsIHRvby4KKyAqLworc3RhdGljIGludCBhZHQ3NDExX3JlYWRfMTBfYml0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGxzYl9yZWcsCisJCQkJdTggbXNiX3JlZywgdTggbHNiX3NoaWZ0KQoreworCXN0cnVjdCBhZHQ3NDExX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgdmFsLCB0bXA7CisKKwltdXRleF9sb2NrKCZkYXRhLT5kZXZpY2VfbG9jayk7CisKKwl2YWwgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBsc2JfcmVnKTsKKwlpZiAodmFsIDwgMCkKKwkJZ290byBleGl0X3VubG9jazsKKworCXRtcCA9ICh2YWwgPj4gbHNiX3NoaWZ0KSAmIDM7CisJdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgbXNiX3JlZyk7CisKKwlpZiAodmFsID49IDApCisJCXZhbCA9ICh2YWwgPDwgMikgfCB0bXA7CisKKyBleGl0X3VubG9jazoKKwltdXRleF91bmxvY2soJmRhdGEtPmRldmljZV9sb2NrKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbnQgYWR0NzQxMV9tb2RpZnlfYml0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggYml0LAorCQkJCWJvb2wgZmxhZykKK3sKKwlzdHJ1Y3QgYWR0NzQxMV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHJldCwgdmFsOworCisJbXV0ZXhfbG9jaygmZGF0YS0+ZGV2aWNlX2xvY2spOworCisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBleGl0X3VubG9jazsKKworCWlmIChmbGFnKQorCQl2YWwgPSByZXQgfCBiaXQ7CisJZWxzZQorCQl2YWwgPSByZXQgJiB+Yml0OworCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsKTsKKworIGV4aXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmZGF0YS0+ZGV2aWNlX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkdDc0MTFfc2hvd192ZGQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlpbnQgcmV0ID0gYWR0NzQxMV9yZWFkXzEwX2JpdChjbGllbnQsIEFEVDc0MTFfUkVHX0lOVF9URU1QX1ZERF9MU0IsCisJCQlBRFQ3NDExX1JFR19WRERfTVNCLCAyKTsKKworCXJldHVybiByZXQgPCAwID8gcmV0IDogc3ByaW50ZihidWYsICIldVxuIiwgcmV0ICogNzAwMCAvIDEwMjQpOworfQorCitzdGF0aWMgc3NpemVfdCBhZHQ3NDExX3Nob3dfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJaW50IHZhbCA9IGFkdDc0MTFfcmVhZF8xMF9iaXQoY2xpZW50LCBBRFQ3NDExX1JFR19JTlRfVEVNUF9WRERfTFNCLAorCQkJQURUNzQxMV9SRUdfSU5UX1RFTVBfTVNCLCAwKTsKKworCWlmICh2YWwgPCAwKQorCQlyZXR1cm4gdmFsOworCisJdmFsID0gdmFsICYgMHgyMDAgPyB2YWwgLSAweDQwMCA6IHZhbDsgLyogMTAgYml0IHNpZ25lZCAqLworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCAqIDI1MCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkdDc0MTFfc2hvd19pbnB1dChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCWludCBuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKS0+aW5kZXg7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgYWR0NzQxMV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHZhbDsKKwl1OCBsc2JfcmVnLCBsc2Jfc2hpZnQ7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgZGF0YS0+bmV4dF91cGRhdGUpKSB7CisJCXZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIEFEVDc0MTFfUkVHX0NGRzMpOworCQlpZiAodmFsIDwgMCkKKwkJCWdvdG8gZXhpdF91bmxvY2s7CisKKwkJaWYgKHZhbCAmIEFEVDc0MTFfQ0ZHM19SRUZfVkREKSB7CisJCQl2YWwgPSBhZHQ3NDExX3JlYWRfMTBfYml0KGNsaWVudCwKKwkJCQkJQURUNzQxMV9SRUdfSU5UX1RFTVBfVkREX0xTQiwKKwkJCQkJQURUNzQxMV9SRUdfVkREX01TQiwgMik7CisJCQlpZiAodmFsIDwgMCkKKwkJCQlnb3RvIGV4aXRfdW5sb2NrOworCisJCQlkYXRhLT52cmVmX2NhY2hlZCA9IHZhbCAqIDcwMDAgLyAxMDI0OworCQl9IGVsc2UgeworCQkJZGF0YS0+dnJlZl9jYWNoZWQgPSAyMjUwOworCQl9CisKKwkJZGF0YS0+bmV4dF91cGRhdGUgPSBqaWZmaWVzICsgSFo7CisJfQorCisJbHNiX3JlZyA9IEFEVDc0MTFfUkVHX0VYVF9URU1QX0FJTjE0X0xTQiArIChuciA+PiAyKTsKKwlsc2Jfc2hpZnQgPSAyICogKG5yICYgMHgwMyk7CisJdmFsID0gYWR0NzQxMV9yZWFkXzEwX2JpdChjbGllbnQsIGxzYl9yZWcsCisJCQlBRFQ3NDExX1JFR19FWFRfVEVNUF9BSU4xX01TQiArIG5yLCBsc2Jfc2hpZnQpOworCWlmICh2YWwgPCAwKQorCQlnb3RvIGV4aXRfdW5sb2NrOworCisJdmFsID0gc3ByaW50ZihidWYsICIldVxuIiwgdmFsICogZGF0YS0+dnJlZl9jYWNoZWQgLyAxMDI0KTsKKyBleGl0X3VubG9jazoKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgc3NpemVfdCBhZHQ3NDExX3Nob3dfYml0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICphdHRyMiA9IHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJaW50IHJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIGF0dHIyLT5pbmRleCk7CisKKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IHNwcmludGYoYnVmLCAiJXVcbiIsICEhKHJldCAmIGF0dHIyLT5ucikpOworfQorCitzdGF0aWMgc3NpemVfdCBhZHQ3NDExX3NldF9iaXQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCisJCQkgICAgICAgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzX2F0dHIyID0gdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgYWR0NzQxMV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWc7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZmbGFnKTsKKwlpZiAocmV0IHx8IGZsYWcgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGFkdDc0MTFfbW9kaWZ5X2JpdChjbGllbnQsIHNfYXR0cjItPmluZGV4LCBzX2F0dHIyLT5uciwgZmxhZyk7CisKKwkvKiBmb3JjZSB1cGRhdGUgKi8KKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJZGF0YS0+bmV4dF91cGRhdGUgPSBqaWZmaWVzOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIHJldCA8IDAgPyByZXQgOiBjb3VudDsKK30KKworI2RlZmluZSBBRFQ3NDExX0JJVF9BVFRSKF9fbmFtZSwgX19yZWcsIF9fYml0KSBcCisJU0VOU09SX0RFVklDRV9BVFRSXzIoX19uYW1lLCBTX0lSVUdPIHwgU19JV1VTUiwgYWR0NzQxMV9zaG93X2JpdCwgXAorCWFkdDc0MTFfc2V0X2JpdCwgX19iaXQsIF9fcmVnKQorCitzdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfaW5wdXQsIFNfSVJVR08sIGFkdDc0MTFfc2hvd190ZW1wLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihpbjBfaW5wdXQsIFNfSVJVR08sIGFkdDc0MTFfc2hvd192ZGQsIE5VTEwpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjFfaW5wdXQsIFNfSVJVR08sIGFkdDc0MTFfc2hvd19pbnB1dCwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluMl9pbnB1dCwgU19JUlVHTywgYWR0NzQxMV9zaG93X2lucHV0LCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4zX2lucHV0LCBTX0lSVUdPLCBhZHQ3NDExX3Nob3dfaW5wdXQsIE5VTEwsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjRfaW5wdXQsIFNfSVJVR08sIGFkdDc0MTFfc2hvd19pbnB1dCwgTlVMTCwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluNV9pbnB1dCwgU19JUlVHTywgYWR0NzQxMV9zaG93X2lucHV0LCBOVUxMLCA0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW42X2lucHV0LCBTX0lSVUdPLCBhZHQ3NDExX3Nob3dfaW5wdXQsIE5VTEwsIDUpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjdfaW5wdXQsIFNfSVJVR08sIGFkdDc0MTFfc2hvd19pbnB1dCwgTlVMTCwgNik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluOF9pbnB1dCwgU19JUlVHTywgYWR0NzQxMV9zaG93X2lucHV0LCBOVUxMLCA3KTsKK3N0YXRpYyBBRFQ3NDExX0JJVF9BVFRSKG5vX2F2ZXJhZ2UsIEFEVDc0MTFfUkVHX0NGRzIsIEFEVDc0MTFfQ0ZHMl9ESVNBQkxFX0FWRyk7CitzdGF0aWMgQURUNzQxMV9CSVRfQVRUUihmYXN0X3NhbXBsaW5nLCBBRFQ3NDExX1JFR19DRkczLCBBRFQ3NDExX0NGRzNfQURDX0NMS18yMjUpOworc3RhdGljIEFEVDc0MTFfQklUX0FUVFIoYWRjX3JlZl92ZGQsIEFEVDc0MTFfUkVHX0NGRzMsIEFEVDc0MTFfQ0ZHM19SRUZfVkREKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkdDc0MTFfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfdGVtcDFfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW4wX2lucHV0LmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4zX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW42X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjdfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luOF9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfbm9fYXZlcmFnZS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFzdF9zYW1wbGluZy5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfYWRjX3JlZl92ZGQuZGV2X2F0dHIuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZHQ3NDExX2F0dHJfZ3JwID0geworCS5hdHRycyA9IGFkdDc0MTFfYXR0cnMsCit9OworCitzdGF0aWMgaW50IGFkdDc0MTFfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKK3sKKwlpbnQgdmFsOworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAtRU5PREVWOworCisJdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQxMV9SRUdfTUFOVUZBQ1RVUkVSX0lEKTsKKwlpZiAodmFsIDwgMCB8fCB2YWwgIT0gQURUNzQxMV9NQU5VRkFDVFVSRVJfSUQpIHsKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJXcm9uZyBtYW51ZmFjdHVyZXIgSUQuIEdvdCAlZCwgIgorCQkJImV4cGVjdGVkICVkXG4iLCB2YWwsIEFEVDc0MTFfTUFOVUZBQ1RVUkVSX0lEKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQxMV9SRUdfREVWSUNFX0lEKTsKKwlpZiAodmFsIDwgMCB8fCB2YWwgIT0gQURUNzQxMV9ERVZJQ0VfSUQpIHsKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJXcm9uZyBkZXZpY2UgSUQuIEdvdCAlZCwgIgorCQkJImV4cGVjdGVkICVkXG4iLCB2YWwsIEFEVDc0MTFfREVWSUNFX0lEKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc3RybGNweShpbmZvLT50eXBlLCAiYWR0NzQxMSIsIEkyQ19OQU1FX1NJWkUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFkdDc0MTFfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGFkdDc0MTFfZGF0YSAqZGF0YTsKKwlpbnQgcmV0OworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOworCW11dGV4X2luaXQoJmRhdGEtPmRldmljZV9sb2NrKTsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZXQgPSBhZHQ3NDExX21vZGlmeV9iaXQoY2xpZW50LCBBRFQ3NDExX1JFR19DRkcxLAorCQkJCSBBRFQ3NDExX0NGRzFfU1RBUlRfTU9OSVRPUiwgMSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXhpdF9mcmVlOworCisJLyogZm9yY2UgdXBkYXRlIG9uIGZpcnN0IG9jY2FzaW9uICovCisJZGF0YS0+bmV4dF91cGRhdGUgPSBqaWZmaWVzOworCisJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmYWR0NzQxMV9hdHRyX2dycCk7CisJaWYgKHJldCkKKwkJZ290byBleGl0X2ZyZWU7CisKKwlkYXRhLT5od21vbl9kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJmNsaWVudC0+ZGV2KTsKKwlpZiAoSVNfRVJSKGRhdGEtPmh3bW9uX2RldikpIHsKKwkJcmV0ID0gUFRSX0VSUihkYXRhLT5od21vbl9kZXYpOworCQlnb3RvIGV4aXRfcmVtb3ZlOworCX0KKworCWRldl9pbmZvKCZjbGllbnQtPmRldiwgInN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkXG4iKTsKKworCXJldHVybiAwOworCisgZXhpdF9yZW1vdmU6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmYWR0NzQxMV9hdHRyX2dycCk7CisgZXhpdF9mcmVlOgorCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCWtmcmVlKGRhdGEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGFkdDc0MTFfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGFkdDc0MTFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZhZHQ3NDExX2F0dHJfZ3JwKTsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGFkdDc0MTFfaWRbXSA9IHsKKwl7ICJhZHQ3NDExIiwgMCB9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFkdDc0MTFfZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQkJPSAiYWR0NzQxMSIsCisJfSwKKwkucHJvYmUgID0gYWR0NzQxMV9wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AoYWR0NzQxMV9yZW1vdmUpLAorCS5pZF90YWJsZSA9IGFkdDc0MTFfaWQsCisJLmRldGVjdCA9IGFkdDc0MTFfZGV0ZWN0LAorCS5hZGRyZXNzX2xpc3QgPSBub3JtYWxfaTJjLAorCS5jbGFzcyA9IEkyQ19DTEFTU19IV01PTiwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNlbnNvcnNfYWR0NzQxMV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZhZHQ3NDExX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChzZW5zb3JzX2FkdDc0MTFfaW5pdCkKKworc3RhdGljIHZvaWQgX19leGl0IHNlbnNvcnNfYWR0NzQxMV9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmFkdDc0MTFfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHNlbnNvcnNfYWR0NzQxMV9leGl0KQorCitNT0RVTEVfQVVUSE9SKCJTYXNjaGEgSGF1ZXIgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+IGFuZCAiCisJIldvbGZyYW0gU2FuZyA8dy5zYW5nQHBlbmd1dHJvbml4LmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBRFQ3NDExIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZHQ3NDczLmMgYi9kcml2ZXJzL2h3bW9uL2FkdDc0NzMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM0NTc2Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2h3bW9uL2FkdDc0NzMuYworKysgL2Rldi9udWxsCkBAIC0xLDExODAgKzAsMCBAQAotLyoKLSAqIEEgaHdtb24gZHJpdmVyIGZvciB0aGUgQW5hbG9nIERldmljZXMgQURUNzQ3MwotICogQ29weXJpZ2h0IChDKSAyMDA3IElCTQotICoKLSAqIEF1dGhvcjogRGFycmljayBKLiBXb25nIDxkandvbmdAdXMuaWJtLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9od21vbi5oPgotI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KLQotLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MkMsIDB4MkQsIDB4MkUsIEkyQ19DTElFTlRfRU5EIH07Ci0KLS8qIEFEVDc0NzMgcmVnaXN0ZXJzICovCi0jZGVmaW5lIEFEVDc0NzNfUkVHX0JBU0VfQUREUgkJCTB4MjAKLQotI2RlZmluZSBBRFQ3NDczX1JFR19WT0xUX0JBU0VfQUREUgkJMHgyMQotI2RlZmluZSBBRFQ3NDczX1JFR19WT0xUX01JTl9CQVNFX0FERFIJCTB4NDYKLQotI2RlZmluZSBBRFQ3NDczX1JFR19URU1QX0JBU0VfQUREUgkJMHgyNQotI2RlZmluZSBBRFQ3NDczX1JFR19URU1QX0xJTUlUU19CQVNFX0FERFIJMHg0RQotI2RlZmluZSBBRFQ3NDczX1JFR19URU1QX1RNSU5fQkFTRV9BRERSCQkweDY3Ci0jZGVmaW5lIEFEVDc0NzNfUkVHX1RFTVBfVE1BWF9CQVNFX0FERFIJCTB4NkEKLQotI2RlZmluZSBBRFQ3NDczX1JFR19GQU5fQkFTRV9BRERSCQkweDI4Ci0jZGVmaW5lIEFEVDc0NzNfUkVHX0ZBTl9NSU5fQkFTRV9BRERSCQkweDU0Ci0KLSNkZWZpbmUgQURUNzQ3M19SRUdfUFdNX0JBU0VfQUREUgkJMHgzMAotI2RlZmluZQlBRFQ3NDczX1JFR19QV01fTUlOX0JBU0VfQUREUgkJMHg2NAotI2RlZmluZSBBRFQ3NDczX1JFR19QV01fTUFYX0JBU0VfQUREUgkJMHgzOAotI2RlZmluZSBBRFQ3NDczX1JFR19QV01fQkhWUl9CQVNFX0FERFIJCTB4NUMKLSNkZWZpbmUJCUFEVDc0NzNfUFdNX0JIVlJfTUFTSwkJMHhFMAotI2RlZmluZQkJQURUNzQ3M19QV01fQkhWUl9TSElGVAkJNQotCi0jZGVmaW5lIEFEVDc0NzNfUkVHX0NGRzEJCQkweDQwCi0jZGVmaW5lIAlBRFQ3NDczX0NGRzFfU1RBUlQJCTB4MDEKLSNkZWZpbmUJCUFEVDc0NzNfQ0ZHMV9SRUFEWQkJMHgwNAotI2RlZmluZSBBRFQ3NDczX1JFR19DRkcyCQkJMHg3MwotI2RlZmluZSBBRFQ3NDczX1JFR19DRkczCQkJMHg3OAotI2RlZmluZSBBRFQ3NDczX1JFR19DRkc0CQkJMHg3RAotI2RlZmluZQkJQURUNzQ3M19DRkc0X01BWF9EVVRZX0FUX09WVAkweDA4Ci0jZGVmaW5lIEFEVDc0NzNfUkVHX0NGRzUJCQkweDdDCi0jZGVmaW5lCQlBRFQ3NDczX0NGRzVfVEVNUF9UV09TCQkweDAxCi0jZGVmaW5lCQlBRFQ3NDczX0NGRzVfVEVNUF9PRkZTRVQJMHgwMgotCi0jZGVmaW5lIEFEVDc0NzNfUkVHX0RFVklDRQkJCTB4M0QKLSNkZWZpbmUgCUFEVDc0NzNfVkVORE9SCQkJMHg0MQotI2RlZmluZSBBRFQ3NDczX1JFR19WRU5ET1IJCQkweDNFCi0jZGVmaW5lIAlBRFQ3NDczX0RFVklDRQkJCTB4NzMKLSNkZWZpbmUgQURUNzQ3M19SRUdfUkVWSVNJT04JCQkweDNGCi0jZGVmaW5lIAlBRFQ3NDczX1JFVl82OAkJCTB4NjgKLSNkZWZpbmUgCUFEVDc0NzNfUkVWXzY5CQkJMHg2OQotCi0jZGVmaW5lIEFEVDc0NzNfUkVHX0FMQVJNMQkJCTB4NDEKLSNkZWZpbmUJCUFEVDc0NzNfVkNDUF9BTEFSTQkJMHgwMgotI2RlZmluZQkJQURUNzQ3M19WQ0NfQUxBUk0JCTB4MDQKLSNkZWZpbmUJCUFEVDc0NzNfUjFUX0FMQVJNCQkweDEwCi0jZGVmaW5lCQlBRFQ3NDczX0xUX0FMQVJNCQkweDIwCi0jZGVmaW5lCQlBRFQ3NDczX1IyVF9BTEFSTQkJMHg0MAotI2RlZmluZQkJQURUNzQ3M19PT0wJCQkweDgwCi0jZGVmaW5lIEFEVDc0NzNfUkVHX0FMQVJNMgkJCTB4NDIKLSNkZWZpbmUJCUFEVDc0NzNfT1ZUX0FMQVJNCQkweDAyCi0jZGVmaW5lCQlBRFQ3NDczX0ZBTjFfQUxBUk0JCTB4MDQKLSNkZWZpbmUJCUFEVDc0NzNfRkFOMl9BTEFSTQkJMHgwOAotI2RlZmluZQkJQURUNzQ3M19GQU4zX0FMQVJNCQkweDEwCi0jZGVmaW5lCQlBRFQ3NDczX0ZBTjRfQUxBUk0JCTB4MjAKLSNkZWZpbmUJCUFEVDc0NzNfUjFUX1NIT1JUCQkweDQwCi0jZGVmaW5lCQlBRFQ3NDczX1IyVF9TSE9SVAkJMHg4MAotCi0jZGVmaW5lIEFMQVJNMih4KQkoKHgpIDw8IDgpCi0KLSNkZWZpbmUgQURUNzQ3M19WT0xUX0NPVU5UCTIKLSNkZWZpbmUgQURUNzQ3M19SRUdfVk9MVCh4KQkoQURUNzQ3M19SRUdfVk9MVF9CQVNFX0FERFIgKyAoeCkpCi0jZGVmaW5lIEFEVDc0NzNfUkVHX1ZPTFRfTUlOKHgpCShBRFQ3NDczX1JFR19WT0xUX01JTl9CQVNFX0FERFIgKyAoKHgpICogMikpCi0jZGVmaW5lIEFEVDc0NzNfUkVHX1ZPTFRfTUFYKHgpCShBRFQ3NDczX1JFR19WT0xUX01JTl9CQVNFX0FERFIgKyBcCi0JCQkJKCh4KSAqIDIpICsgMSkKLQotI2RlZmluZSBBRFQ3NDczX1RFTVBfQ09VTlQJMwotI2RlZmluZSBBRFQ3NDczX1JFR19URU1QKHgpCShBRFQ3NDczX1JFR19URU1QX0JBU0VfQUREUiArICh4KSkKLSNkZWZpbmUgQURUNzQ3M19SRUdfVEVNUF9NSU4oeCkgKEFEVDc0NzNfUkVHX1RFTVBfTElNSVRTX0JBU0VfQUREUiArICgoeCkgKiAyKSkKLSNkZWZpbmUgQURUNzQ3M19SRUdfVEVNUF9NQVgoeCkgKEFEVDc0NzNfUkVHX1RFTVBfTElNSVRTX0JBU0VfQUREUiArIFwKLQkJCQkoKHgpICogMikgKyAxKQotI2RlZmluZSBBRFQ3NDczX1JFR19URU1QX1RNSU4oeCkJKEFEVDc0NzNfUkVHX1RFTVBfVE1JTl9CQVNFX0FERFIgKyAoeCkpCi0jZGVmaW5lIEFEVDc0NzNfUkVHX1RFTVBfVE1BWCh4KQkoQURUNzQ3M19SRUdfVEVNUF9UTUFYX0JBU0VfQUREUiArICh4KSkKLQotI2RlZmluZSBBRFQ3NDczX0ZBTl9DT1VOVAk0Ci0jZGVmaW5lIEFEVDc0NzNfUkVHX0ZBTih4KQkoQURUNzQ3M19SRUdfRkFOX0JBU0VfQUREUiArICgoeCkgKiAyKSkKLSNkZWZpbmUgQURUNzQ3M19SRUdfRkFOX01JTih4KQkoQURUNzQ3M19SRUdfRkFOX01JTl9CQVNFX0FERFIgKyAoKHgpICogMikpCi0KLSNkZWZpbmUgQURUNzQ3M19QV01fQ09VTlQJMwotI2RlZmluZSBBRFQ3NDczX1JFR19QV00oeCkJKEFEVDc0NzNfUkVHX1BXTV9CQVNFX0FERFIgKyAoeCkpCi0jZGVmaW5lIEFEVDc0NzNfUkVHX1BXTV9NQVgoeCkJKEFEVDc0NzNfUkVHX1BXTV9NQVhfQkFTRV9BRERSICsgKHgpKQotI2RlZmluZSBBRFQ3NDczX1JFR19QV01fTUlOKHgpCShBRFQ3NDczX1JFR19QV01fTUlOX0JBU0VfQUREUiArICh4KSkKLSNkZWZpbmUgQURUNzQ3M19SRUdfUFdNX0JIVlIoeCkJKEFEVDc0NzNfUkVHX1BXTV9CSFZSX0JBU0VfQUREUiArICh4KSkKLQotLyogSG93IG9mdGVuIGRvIHdlIHJlcmVhZCBzZW5zb3JzIHZhbHVlcz8gKEluIGppZmZpZXMpICovCi0jZGVmaW5lIFNFTlNPUl9SRUZSRVNIX0lOVEVSVkFMCSgyICogSFopCi0KLS8qIEhvdyBvZnRlbiBkbyB3ZSByZXJlYWQgc2Vuc29yIGxpbWl0IHZhbHVlcz8gKEluIGppZmZpZXMpICovCi0jZGVmaW5lIExJTUlUX1JFRlJFU0hfSU5URVJWQUwJKDYwICogSFopCi0KLS8qIGRhdGFzaGVldCBzYXlzIHRvIGRpdmlkZSB0aGlzIG51bWJlciBieSB0aGUgZmFuIHJlYWRpbmcgdG8gZ2V0IGZhbiBycG0gKi8KLSNkZWZpbmUgRkFOX1BFUklPRF9UT19SUE0oeCkJKCg5MDAwMCAqIDYwKSAvICh4KSkKLSNkZWZpbmUgRkFOX1JQTV9UT19QRVJJT0QJRkFOX1BFUklPRF9UT19SUE0KLSNkZWZpbmUgRkFOX1BFUklPRF9JTlZBTElECTY1NTM1Ci0jZGVmaW5lIEZBTl9EQVRBX1ZBTElEKHgpCSgoeCkgJiYgKHgpICE9IEZBTl9QRVJJT0RfSU5WQUxJRCkKLQotc3RydWN0IGFkdDc0NzNfZGF0YSB7Ci0Jc3RydWN0IGRldmljZQkJKmh3bW9uX2RldjsKLQlzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwCWF0dHJzOwotCXN0cnVjdCBtdXRleAkJbG9jazsKLQljaGFyCQkJc2Vuc29yc192YWxpZDsKLQljaGFyCQkJbGltaXRzX3ZhbGlkOwotCXVuc2lnbmVkIGxvbmcJCXNlbnNvcnNfbGFzdF91cGRhdGVkOwkvKiBJbiBqaWZmaWVzICovCi0JdW5zaWduZWQgbG9uZwkJbGltaXRzX2xhc3RfdXBkYXRlZDsJLyogSW4gamlmZmllcyAqLwotCi0JdTgJCQl2b2x0W0FEVDc0NzNfVk9MVF9DT1VOVF07Ci0JczgJCQl2b2x0X21pbltBRFQ3NDczX1ZPTFRfQ09VTlRdOwotCXM4CQkJdm9sdF9tYXhbQURUNzQ3M19WT0xUX0NPVU5UXTsKLQotCXM4CQkJdGVtcFtBRFQ3NDczX1RFTVBfQ09VTlRdOwotCXM4CQkJdGVtcF9taW5bQURUNzQ3M19URU1QX0NPVU5UXTsKLQlzOAkJCXRlbXBfbWF4W0FEVDc0NzNfVEVNUF9DT1VOVF07Ci0JczgJCQl0ZW1wX3RtaW5bQURUNzQ3M19URU1QX0NPVU5UXTsKLQkvKiBUaGlzIGlzIGNhbGxlZCB0aGUgIVRIRVJNIGxpbWl0IGluIHRoZSBkYXRhc2hlZXQgKi8KLQlzOAkJCXRlbXBfdG1heFtBRFQ3NDczX1RFTVBfQ09VTlRdOwotCi0JdTE2CQkJZmFuW0FEVDc0NzNfRkFOX0NPVU5UXTsKLQl1MTYJCQlmYW5fbWluW0FEVDc0NzNfRkFOX0NPVU5UXTsKLQotCXU4CQkJcHdtW0FEVDc0NzNfUFdNX0NPVU5UXTsKLQl1OAkJCXB3bV9tYXhbQURUNzQ3M19QV01fQ09VTlRdOwotCXU4CQkJcHdtX21pbltBRFQ3NDczX1BXTV9DT1VOVF07Ci0JdTgJCQlwd21fYmVoYXZpb3JbQURUNzQ3M19QV01fQ09VTlRdOwotCi0JdTgJCQl0ZW1wX3R3b3NfY29tcGxlbWVudDsKLQl1OAkJCXRlbXBfb2Zmc2V0OwotCi0JdTE2CQkJYWxhcm07Ci0JdTgJCQltYXhfZHV0eV9hdF9vdmVyaGVhdDsKLX07Ci0KLXN0YXRpYyBpbnQgYWR0NzQ3M19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7Ci1zdGF0aWMgaW50IGFkdDc0NzNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7Ci1zdGF0aWMgaW50IGFkdDc0NzNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYWR0NzQ3M19pZFtdID0gewotCXsgImFkdDc0NzMiLCAwIH0sCi0JeyB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWR0NzQ3M19kcml2ZXIgPSB7Ci0JLmNsYXNzCQk9IEkyQ19DTEFTU19IV01PTiwKLQkuZHJpdmVyID0gewotCQkubmFtZQk9ICJhZHQ3NDczIiwKLQl9LAotCS5wcm9iZQkJPSBhZHQ3NDczX3Byb2JlLAotCS5yZW1vdmUJCT0gYWR0NzQ3M19yZW1vdmUsCi0JLmlkX3RhYmxlCT0gYWR0NzQ3M19pZCwKLQkuZGV0ZWN0CQk9IGFkdDc0NzNfZGV0ZWN0LAotCS5hZGRyZXNzX2xpc3QJPSBub3JtYWxfaTJjLAotfTsKLQotLyoKLSAqIDE2LWJpdCByZWdpc3RlcnMgb24gdGhlIEFEVDc0NzMgYXJlIGxvdy1ieXRlIGZpcnN0LiAgVGhlIGRhdGEgc2hlZXQgc2F5cwotICogdGhhdCB0aGUgbG93IGJ5dGUgbXVzdCBiZSByZWFkIGJlZm9yZSB0aGUgaGlnaCBieXRlLgotICovCi1zdGF0aWMgaW5saW5lIGludCBhZHQ3NDczX3JlYWRfd29yZF9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKLXsKLQl1MTYgZm9vOwotCWZvbyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7Ci0JZm9vIHw9ICgodTE2KWkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyArIDEpIDw8IDgpOwotCXJldHVybiBmb287Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGFkdDc0NzNfd3JpdGVfd29yZF9kYXRhKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywKLQkJCQkJICB1MTYgdmFsdWUpCi17Ci0JcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlICYgMHhGRikKLQkgICAgICAgJiYgaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZyArIDEsIHZhbHVlID4+IDgpOwotfQotCi1zdGF0aWMgdm9pZCBhZHQ3NDczX2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0JaW50IHJlZyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIEFEVDc0NzNfUkVHX0NGRzEpOwotCi0JaWYgKCEocmVnICYgQURUNzQ3M19DRkcxX1JFQURZKSkgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkNoaXAgbm90IHJlYWR5LlxuIik7Ci0JfSBlbHNlIHsKLQkJLyogc3RhcnQgbW9uaXRvcmluZyAqLwotCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQ3M19SRUdfQ0ZHMSwKLQkJCQkJICByZWcgfCBBRFQ3NDczX0NGRzFfU1RBUlQpOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCBhZHQ3NDczX2RhdGEgKmFkdDc0NzNfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JdW5zaWduZWQgbG9uZyBsb2NhbF9qaWZmaWVzID0gamlmZmllczsKLQl1OCBjZmc7Ci0JaW50IGk7Ci0KLQltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKLQlpZiAodGltZV9iZWZvcmUobG9jYWxfamlmZmllcywgZGF0YS0+c2Vuc29yc19sYXN0X3VwZGF0ZWQgKwotCQlTRU5TT1JfUkVGUkVTSF9JTlRFUlZBTCkKLQkJJiYgZGF0YS0+c2Vuc29yc192YWxpZCkKLQkJZ290byBub19zZW5zb3JfdXBkYXRlOwotCi0JZm9yIChpID0gMDsgaSA8IEFEVDc0NzNfVk9MVF9DT1VOVDsgaSsrKQotCQlkYXRhLT52b2x0W2ldID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJCUFEVDc0NzNfUkVHX1ZPTFQoaSkpOwotCi0JLyogRGV0ZXJtaW5lIHRlbXBlcmF0dXJlIGVuY29kaW5nICovCi0JY2ZnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQ3M19SRUdfQ0ZHNSk7Ci0JZGF0YS0+dGVtcF90d29zX2NvbXBsZW1lbnQgPSAoY2ZnICYgQURUNzQ3M19DRkc1X1RFTVBfVFdPUyk7Ci0KLQkvKgotCSAqIFdoYXQgZG9lcyB0aGlzIGRvPyBpdCBpbXBsaWVzIGEgdmFyaWFibGUgdGVtcGVyYXR1cmUgc2Vuc29yCi0JICogb2Zmc2V0LCBidXQgdGhlIGRhdGFzaGVldCBkb2Vzbid0IHNheSBhbnl0aGluZyBhYm91dCB0aGlzIGJpdAotCSAqIGFuZCBvdGhlciBwYXJ0cyBvZiB0aGUgZGF0YXNoZWV0IGltcGx5IHRoYXQgIm9mZnNldDY0IiBtb2RlCi0JICogbWVhbnMgdGhhdCB5b3Ugc2hpZnQgdGVtcCB2YWx1ZXMgYnkgLTY0IGlmIHRoZSBhYm92ZSBiaXQgd2FzIHNldC4KLQkgKi8KLQlkYXRhLT50ZW1wX29mZnNldCA9IChjZmcgJiBBRFQ3NDczX0NGRzVfVEVNUF9PRkZTRVQpOwotCi0JZm9yIChpID0gMDsgaSA8IEFEVDc0NzNfVEVNUF9DT1VOVDsgaSsrKQotCQlkYXRhLT50ZW1wW2ldID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJCQkgQURUNzQ3M19SRUdfVEVNUChpKSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQURUNzQ3M19GQU5fQ09VTlQ7IGkrKykKLQkJZGF0YS0+ZmFuW2ldID0gYWR0NzQ3M19yZWFkX3dvcmRfZGF0YShjbGllbnQsCi0JCQkJCQlBRFQ3NDczX1JFR19GQU4oaSkpOwotCi0JZm9yIChpID0gMDsgaSA8IEFEVDc0NzNfUFdNX0NPVU5UOyBpKyspCi0JCWRhdGEtPnB3bVtpXSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCi0JCQkJCQlBRFQ3NDczX1JFR19QV00oaSkpOwotCi0JZGF0YS0+YWxhcm0gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDczX1JFR19BTEFSTTEpOwotCWlmIChkYXRhLT5hbGFybSAmIEFEVDc0NzNfT09MKQotCQlkYXRhLT5hbGFybSB8PSBBTEFSTTIoaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJCQkgQURUNzQ3M19SRUdfQUxBUk0yKSk7Ci0KLQlkYXRhLT5zZW5zb3JzX2xhc3RfdXBkYXRlZCA9IGxvY2FsX2ppZmZpZXM7Ci0JZGF0YS0+c2Vuc29yc192YWxpZCA9IDE7Ci0KLW5vX3NlbnNvcl91cGRhdGU6Ci0JaWYgKHRpbWVfYmVmb3JlKGxvY2FsX2ppZmZpZXMsIGRhdGEtPmxpbWl0c19sYXN0X3VwZGF0ZWQgKwotCQlMSU1JVF9SRUZSRVNIX0lOVEVSVkFMKQotCQkmJiBkYXRhLT5saW1pdHNfdmFsaWQpCi0JCWdvdG8gb3V0OwotCi0JZm9yIChpID0gMDsgaSA8IEFEVDc0NzNfVk9MVF9DT1VOVDsgaSsrKSB7Ci0JCWRhdGEtPnZvbHRfbWluW2ldID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJCUFEVDc0NzNfUkVHX1ZPTFRfTUlOKGkpKTsKLQkJZGF0YS0+dm9sdF9tYXhbaV0gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAotCQkJCQkJQURUNzQ3M19SRUdfVk9MVF9NQVgoaSkpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBBRFQ3NDczX1RFTVBfQ09VTlQ7IGkrKykgewotCQlkYXRhLT50ZW1wX21pbltpXSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCi0JCQkJCQlBRFQ3NDczX1JFR19URU1QX01JTihpKSk7Ci0JCWRhdGEtPnRlbXBfbWF4W2ldID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJCUFEVDc0NzNfUkVHX1RFTVBfTUFYKGkpKTsKLQkJZGF0YS0+dGVtcF90bWluW2ldID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJCUFEVDc0NzNfUkVHX1RFTVBfVE1JTihpKSk7Ci0JCWRhdGEtPnRlbXBfdG1heFtpXSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCi0JCQkJCQlBRFQ3NDczX1JFR19URU1QX1RNQVgoaSkpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBBRFQ3NDczX0ZBTl9DT1VOVDsgaSsrKQotCQlkYXRhLT5mYW5fbWluW2ldID0gYWR0NzQ3M19yZWFkX3dvcmRfZGF0YShjbGllbnQsCi0JCQkJCQlBRFQ3NDczX1JFR19GQU5fTUlOKGkpKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBRFQ3NDczX1BXTV9DT1VOVDsgaSsrKSB7Ci0JCWRhdGEtPnB3bV9tYXhbaV0gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAotCQkJCQkJQURUNzQ3M19SRUdfUFdNX01BWChpKSk7Ci0JCWRhdGEtPnB3bV9taW5baV0gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAotCQkJCQkJQURUNzQ3M19SRUdfUFdNX01JTihpKSk7Ci0JCWRhdGEtPnB3bV9iZWhhdmlvcltpXSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCi0JCQkJCQlBRFQ3NDczX1JFR19QV01fQkhWUihpKSk7Ci0JfQotCi0JaSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIEFEVDc0NzNfUkVHX0NGRzQpOwotCWRhdGEtPm1heF9kdXR5X2F0X292ZXJoZWF0ID0gISEoaSAmIEFEVDc0NzNfQ0ZHNF9NQVhfRFVUWV9BVF9PVlQpOwotCi0JZGF0YS0+bGltaXRzX2xhc3RfdXBkYXRlZCA9IGxvY2FsX2ppZmZpZXM7Ci0JZGF0YS0+bGltaXRzX3ZhbGlkID0gMTsKLQotb3V0OgotCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7Ci0JcmV0dXJuIGRhdGE7Ci19Ci0KLS8qCi0gKiBDb252ZXJzaW9ucwotICovCi0KLS8qIElOIGFyZSBzY2FsZWQgYWNvcmRpbmcgdG8gYnVpbHQtaW4gcmVzaXN0b3JzICovCi1zdGF0aWMgY29uc3QgaW50IGFkdDc0NzNfc2NhbGluZ1tdID0geyAgLyogLjAwMSBWb2x0cyAqLwotCTIyNTAsIDMzMDAKLX07Ci0jZGVmaW5lIFNDQUxFKHZhbCwgZnJvbSwgdG8pCSgoKHZhbCkgKiAodG8pICsgKChmcm9tKSAvIDIpKSAvIChmcm9tKSkKLQotc3RhdGljIGludCBkZWNvZGVfdm9sdChpbnQgdm9sdF9pbmRleCwgdTggcmF3KQotewotCXJldHVybiBTQ0FMRShyYXcsIDE5MiwgYWR0NzQ3M19zY2FsaW5nW3ZvbHRfaW5kZXhdKTsKLX0KLQotc3RhdGljIHU4IGVuY29kZV92b2x0KGludCB2b2x0X2luZGV4LCBpbnQgY29va2VkKQotewotCWludCByYXcgPSBTQ0FMRShjb29rZWQsIGFkdDc0NzNfc2NhbGluZ1t2b2x0X2luZGV4XSwgMTkyKTsKLQlyZXR1cm4gU0VOU09SU19MSU1JVChyYXcsIDAsIDI1NSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfdm9sdF9taW4oc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKLQkJCSAgICAgY2hhciAqYnVmKQotewotCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKLQlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gYWR0NzQ3M191cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCi0JCSAgICAgICBkZWNvZGVfdm9sdChhdHRyLT5pbmRleCwgZGF0YS0+dm9sdF9taW5bYXR0ci0+aW5kZXhdKSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNldF92b2x0X21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkgICAgY29uc3QgY2hhciAqYnVmLAotCQkJICAgIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JbG9uZyB2b2x0OwotCi0JaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnZvbHQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXZvbHQgPSBlbmNvZGVfdm9sdChhdHRyLT5pbmRleCwgdm9sdCk7Ci0KLQltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKLQlkYXRhLT52b2x0X21pblthdHRyLT5pbmRleF0gPSB2b2x0OwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDczX1JFR19WT0xUX01JTihhdHRyLT5pbmRleCksCi0JCQkJICB2b2x0KTsKLQltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCBzaG93X3ZvbHRfbWF4KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkgICAgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7Ci0Jc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGFkdDc0NzNfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLAotCQkgICAgICAgZGVjb2RlX3ZvbHQoYXR0ci0+aW5kZXgsIGRhdGEtPnZvbHRfbWF4W2F0dHItPmluZGV4XSkpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzZXRfdm9sdF9tYXgoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAotCQkJICAgIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCSAgICBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWxvbmcgdm9sdDsKLQotCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2b2x0KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl2b2x0ID0gZW5jb2RlX3ZvbHQoYXR0ci0+aW5kZXgsIHZvbHQpOwotCi0JbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7Ci0JZGF0YS0+dm9sdF9tYXhbYXR0ci0+aW5kZXhdID0gdm9sdDsKLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQ3M19SRUdfVk9MVF9NQVgoYXR0ci0+aW5kZXgpLAotCQkJCSAgdm9sdCk7Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd192b2x0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkgY2hhciAqYnVmKQotewotCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKLQlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gYWR0NzQ3M191cGRhdGVfZGV2aWNlKGRldik7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwKLQkJICAgICAgIGRlY29kZV92b2x0KGF0dHItPmluZGV4LCBkYXRhLT52b2x0W2F0dHItPmluZGV4XSkpOwotfQotCi0vKgotICogVGhpcyBjaGlwIGNhbiByZXBvcnQgdGVtcGVyYXR1cmUgZGF0YSBlaXRoZXIgYXMgYSB0d28ncyBjb21wbGVtZW50Ci0gKiBudW1iZXIgaW4gdGhlIHJhbmdlIC0xMjggdG8gMTI3LCBvciBhcyBhbiB1bnNpZ25lZCBudW1iZXIgdGhhdCBtdXN0Ci0gKiBiZSBvZmZzZXQgYnkgNjQuCi0gKi8KLXN0YXRpYyBpbnQgZGVjb2RlX3RlbXAodTggdHdvc19jb21wbGVtZW50LCB1OCByYXcpCi17Ci0JcmV0dXJuIHR3b3NfY29tcGxlbWVudCA/IChzOClyYXcgOiByYXcgLSA2NDsKLX0KLQotc3RhdGljIHU4IGVuY29kZV90ZW1wKHU4IHR3b3NfY29tcGxlbWVudCwgaW50IGNvb2tlZCkKLXsKLQl1OCByZXQgPSB0d29zX2NvbXBsZW1lbnQgPyBjb29rZWQgJiAweEZGIDogY29va2VkICsgNjQ7Ci0JcmV0dXJuIFNFTlNPUlNfTElNSVQocmV0LCAwLCAyNTUpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfbWluKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkgICAgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7Ci0Jc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGFkdDc0NzNfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAxMDAwICogZGVjb2RlX3RlbXAoCi0JCQkJCQlkYXRhLT50ZW1wX3R3b3NfY29tcGxlbWVudCwKLQkJCQkJCWRhdGEtPnRlbXBfbWluW2F0dHItPmluZGV4XSkpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzZXRfdGVtcF9taW4oc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAotCQkJICAgIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCSAgICBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWxvbmcgdGVtcDsKLQotCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ0ZW1wKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl0ZW1wID0gRElWX1JPVU5EX0NMT1NFU1QodGVtcCwgMTAwMCk7Ci0JdGVtcCA9IGVuY29kZV90ZW1wKGRhdGEtPnRlbXBfdHdvc19jb21wbGVtZW50LCB0ZW1wKTsKLQotCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwotCWRhdGEtPnRlbXBfbWluW2F0dHItPmluZGV4XSA9IHRlbXA7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFEVDc0NzNfUkVHX1RFTVBfTUlOKGF0dHItPmluZGV4KSwKLQkJCQkgIHRlbXApOwotCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9tYXgoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKLQkJCSAgICAgY2hhciAqYnVmKQotewotCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKLQlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gYWR0NzQ3M191cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIDEwMDAgKiBkZWNvZGVfdGVtcCgKLQkJCQkJCWRhdGEtPnRlbXBfdHdvc19jb21wbGVtZW50LAotCQkJCQkJZGF0YS0+dGVtcF9tYXhbYXR0ci0+aW5kZXhdKSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNldF90ZW1wX21heChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkgICAgY29uc3QgY2hhciAqYnVmLAotCQkJICAgIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JbG9uZyB0ZW1wOwotCi0JaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnRlbXApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXRlbXAgPSBESVZfUk9VTkRfQ0xPU0VTVCh0ZW1wLCAxMDAwKTsKLQl0ZW1wID0gZW5jb2RlX3RlbXAoZGF0YS0+dGVtcF90d29zX2NvbXBsZW1lbnQsIHRlbXApOwotCi0JbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7Ci0JZGF0YS0+dGVtcF9tYXhbYXR0ci0+aW5kZXhdID0gdGVtcDsKLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQ3M19SRUdfVEVNUF9NQVgoYXR0ci0+aW5kZXgpLAotCQkJCSAgdGVtcCk7Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkgY2hhciAqYnVmKQotewotCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKLQlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gYWR0NzQ3M191cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIDEwMDAgKiBkZWNvZGVfdGVtcCgKLQkJCQkJCWRhdGEtPnRlbXBfdHdvc19jb21wbGVtZW50LAotCQkJCQkJZGF0YS0+dGVtcFthdHRyLT5pbmRleF0pKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd19mYW5fbWluKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKLQkJCSAgICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwotCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBhZHQ3NDczX3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQotCWlmIChGQU5fREFUQV9WQUxJRChkYXRhLT5mYW5fbWluW2F0dHItPmluZGV4XSkpCi0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLAotCQkJICAgICAgIEZBTl9QRVJJT0RfVE9fUlBNKGRhdGEtPmZhbl9taW5bYXR0ci0+aW5kZXhdKSk7Ci0JZWxzZQotCQlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2V0X2Zhbl9taW4oc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JbG9uZyB0ZW1wOwotCi0JaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnRlbXApIHx8ICF0ZW1wKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXRlbXAgPSBGQU5fUlBNX1RPX1BFUklPRCh0ZW1wKTsKLQl0ZW1wID0gU0VOU09SU19MSU1JVCh0ZW1wLCAxLCA2NTUzNCk7Ci0KLQltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKLQlkYXRhLT5mYW5fbWluW2F0dHItPmluZGV4XSA9IHRlbXA7Ci0JYWR0NzQ3M193cml0ZV93b3JkX2RhdGEoY2xpZW50LCBBRFQ3NDczX1JFR19GQU5fTUlOKGF0dHItPmluZGV4KSwgdGVtcCk7Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd19mYW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKLQkJCWNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7Ci0Jc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGFkdDc0NzNfdXBkYXRlX2RldmljZShkZXYpOwotCi0JaWYgKEZBTl9EQVRBX1ZBTElEKGRhdGEtPmZhblthdHRyLT5pbmRleF0pKQotCQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwKLQkJCSAgICAgICBGQU5fUEVSSU9EX1RPX1JQTShkYXRhLT5mYW5bYXR0ci0+aW5kZXhdKSk7Ci0JZWxzZQotCQlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd19tYXhfZHV0eV9hdF9jcml0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAotCQkJCSAgICAgY2hhciAqYnVmKQotewotCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBhZHQ3NDczX3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+bWF4X2R1dHlfYXRfb3ZlcmhlYXQpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzZXRfbWF4X2R1dHlfYXRfY3JpdChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAotCQkJCSAgICBjb25zdCBjaGFyICpidWYsCi0JCQkJICAgIHNpemVfdCBjb3VudCkKLXsKLQl1OCByZWc7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JbG9uZyB0ZW1wOwotCi0JaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnRlbXApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwotCWRhdGEtPm1heF9kdXR5X2F0X292ZXJoZWF0ID0gISF0ZW1wOwotCXJlZyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIEFEVDc0NzNfUkVHX0NGRzQpOwotCWlmICh0ZW1wKQotCQlyZWcgfD0gQURUNzQ3M19DRkc0X01BWF9EVVRZX0FUX09WVDsKLQllbHNlCi0JCXJlZyAmPSB+QURUNzQ3M19DRkc0X01BWF9EVVRZX0FUX09WVDsKLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQ3M19SRUdfQ0ZHNCwgcmVnKTsKLQltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCBzaG93X3B3bShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAotCQkJY2hhciAqYnVmKQotewotCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKLQlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gYWR0NzQ3M191cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPnB3bVthdHRyLT5pbmRleF0pOwotfQotCi1zdGF0aWMgc3NpemVfdCBzZXRfcHdtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JbG9uZyB0ZW1wOwotCi0JaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnRlbXApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXRlbXAgPSBTRU5TT1JTX0xJTUlUKHRlbXAsIDAsIDI1NSk7Ci0KLQltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKLQlkYXRhLT5wd21bYXR0ci0+aW5kZXhdID0gdGVtcDsKLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQ3M19SRUdfUFdNKGF0dHItPmluZGV4KSwgdGVtcCk7Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd19wd21fbWF4KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKLQkJCSAgICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwotCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBhZHQ3NDczX3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+cHdtX21heFthdHRyLT5pbmRleF0pOwotfQotCi1zdGF0aWMgc3NpemVfdCBzZXRfcHdtX21heChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKLQkJCSAgIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCSAgIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JbG9uZyB0ZW1wOwotCi0JaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnRlbXApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXRlbXAgPSBTRU5TT1JTX0xJTUlUKHRlbXAsIDAsIDI1NSk7Ci0KLQltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKLQlkYXRhLT5wd21fbWF4W2F0dHItPmluZGV4XSA9IHRlbXA7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFEVDc0NzNfUkVHX1BXTV9NQVgoYXR0ci0+aW5kZXgpLAotCQkJCSAgdGVtcCk7Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd19wd21fbWluKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKLQkJCSAgICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwotCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBhZHQ3NDczX3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+cHdtX21pblthdHRyLT5pbmRleF0pOwotfQotCi1zdGF0aWMgc3NpemVfdCBzZXRfcHdtX21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKLQkJCSAgIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCSAgIHNpemVfdCBjb3VudCkKLXsKLQlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JbG9uZyB0ZW1wOwotCi0JaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnRlbXApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXRlbXAgPSBTRU5TT1JTX0xJTUlUKHRlbXAsIDAsIDI1NSk7Ci0KLQltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKLQlkYXRhLT5wd21fbWluW2F0dHItPmluZGV4XSA9IHRlbXA7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFEVDc0NzNfUkVHX1BXTV9NSU4oYXR0ci0+aW5kZXgpLAotCQkJCSAgdGVtcCk7Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX3RtYXgoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkgICAgICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwotCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBhZHQ3NDczX3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgMTAwMCAqIGRlY29kZV90ZW1wKAotCQkJCQkJZGF0YS0+dGVtcF90d29zX2NvbXBsZW1lbnQsCi0JCQkJCQlkYXRhLT50ZW1wX3RtYXhbYXR0ci0+aW5kZXhdKSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNldF90ZW1wX3RtYXgoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKLQkJCSAgICAgY29uc3QgY2hhciAqYnVmLAotCQkJICAgICBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWxvbmcgdGVtcDsKLQotCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ0ZW1wKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl0ZW1wID0gRElWX1JPVU5EX0NMT1NFU1QodGVtcCwgMTAwMCk7Ci0JdGVtcCA9IGVuY29kZV90ZW1wKGRhdGEtPnRlbXBfdHdvc19jb21wbGVtZW50LCB0ZW1wKTsKLQotCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwotCWRhdGEtPnRlbXBfdG1heFthdHRyLT5pbmRleF0gPSB0ZW1wOwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDczX1JFR19URU1QX1RNQVgoYXR0ci0+aW5kZXgpLAotCQkJCSAgdGVtcCk7Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX3RtaW4oc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkgICAgICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwotCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBhZHQ3NDczX3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgMTAwMCAqIGRlY29kZV90ZW1wKAotCQkJCQkJZGF0YS0+dGVtcF90d29zX2NvbXBsZW1lbnQsCi0JCQkJCQlkYXRhLT50ZW1wX3RtaW5bYXR0ci0+aW5kZXhdKSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNldF90ZW1wX3RtaW4oc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKLQkJCSAgICAgY29uc3QgY2hhciAqYnVmLAotCQkJICAgICBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWxvbmcgdGVtcDsKLQotCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ0ZW1wKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl0ZW1wID0gRElWX1JPVU5EX0NMT1NFU1QodGVtcCwgMTAwMCk7Ci0JdGVtcCA9IGVuY29kZV90ZW1wKGRhdGEtPnRlbXBfdHdvc19jb21wbGVtZW50LCB0ZW1wKTsKLQotCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwotCWRhdGEtPnRlbXBfdG1pblthdHRyLT5pbmRleF0gPSB0ZW1wOwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDczX1JFR19URU1QX1RNSU4oYXR0ci0+aW5kZXgpLAotCQkJCSAgdGVtcCk7Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd19wd21fZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKLQkJCSAgICAgICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwotCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBhZHQ3NDczX3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQotCXN3aXRjaCAoZGF0YS0+cHdtX2JlaGF2aW9yW2F0dHItPmluZGV4XSA+PiBBRFQ3NDczX1BXTV9CSFZSX1NISUZUKSB7Ci0JY2FzZSAzOgotCQlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKLQljYXNlIDc6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjFcbiIpOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjJcbiIpOwotCX0KLX0KLQotc3RhdGljIHNzaXplX3Qgc2V0X3B3bV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkgICAgICBjb25zdCBjaGFyICpidWYsCi0JCQkgICAgICBzaXplX3QgY291bnQpCi17Ci0JdTggcmVnOwotCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlsb25nIHRlbXA7Ci0KLQlpZiAoc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdGVtcCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3dpdGNoICh0ZW1wKSB7Ci0JY2FzZSAwOgotCQl0ZW1wID0gMzsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQl0ZW1wID0gNzsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQkvKiBFbnRlciBhdXRvbWF0aWMgbW9kZSB3aXRoIGZhbnMgb2ZmICovCi0JCXRlbXAgPSA0OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKLQlyZWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAotCQkJCSAgICAgICBBRFQ3NDczX1JFR19QV01fQkhWUihhdHRyLT5pbmRleCkpOwotCXJlZyA9ICh0ZW1wIDw8IEFEVDc0NzNfUFdNX0JIVlJfU0hJRlQpIHwKLQkgICAgICAocmVnICYgfkFEVDc0NzNfUFdNX0JIVlJfTUFTSyk7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFEVDc0NzNfUkVHX1BXTV9CSFZSKGF0dHItPmluZGV4KSwKLQkJCQkgIHJlZyk7Ci0JZGF0YS0+cHdtX2JlaGF2aW9yW2F0dHItPmluZGV4XSA9IHJlZzsKLQltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCBzaG93X3B3bV9hdXRvX3RlbXAoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkJICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwotCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBhZHQ3NDczX3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlpbnQgYmh2ciA9IGRhdGEtPnB3bV9iZWhhdmlvclthdHRyLT5pbmRleF0gPj4gQURUNzQ3M19QV01fQkhWUl9TSElGVDsKLQotCXN3aXRjaCAoYmh2cikgewotCWNhc2UgMzoKLQljYXNlIDQ6Ci0JY2FzZSA3OgotCQlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKLQljYXNlIDA6Ci0JY2FzZSAxOgotCWNhc2UgNToKLQljYXNlIDY6Ci0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBiaHZyICsgMSk7Ci0JY2FzZSAyOgotCQlyZXR1cm4gc3ByaW50ZihidWYsICI0XG4iKTsKLQl9Ci0JLyogc2hvdWxkbid0IGV2ZXIgZ2V0IGhlcmUgKi8KLQlCVUcoKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2V0X3B3bV9hdXRvX3RlbXAoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKLQkJCQkgY29uc3QgY2hhciAqYnVmLAotCQkJCSBzaXplX3QgY291bnQpCi17Ci0JdTggcmVnOwotCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlsb25nIHRlbXA7Ci0KLQlpZiAoc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdGVtcCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3dpdGNoICh0ZW1wKSB7Ci0JY2FzZSAxOgotCWNhc2UgMjoKLQljYXNlIDY6Ci0JY2FzZSA3OgotCQl0ZW1wLS07Ci0JCWJyZWFrOwotCWNhc2UgMDoKLQkJdGVtcCA9IDQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwotCXJlZyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCi0JCQkJICAgICAgIEFEVDc0NzNfUkVHX1BXTV9CSFZSKGF0dHItPmluZGV4KSk7Ci0JcmVnID0gKHRlbXAgPDwgQURUNzQ3M19QV01fQkhWUl9TSElGVCkgfAotCSAgICAgIChyZWcgJiB+QURUNzQ3M19QV01fQkhWUl9NQVNLKTsKLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQ3M19SRUdfUFdNX0JIVlIoYXR0ci0+aW5kZXgpLAotCQkJCSAgcmVnKTsKLQlkYXRhLT5wd21fYmVoYXZpb3JbYXR0ci0+aW5kZXhdID0gcmVnOwotCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LAotCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKLQkJCSAgY2hhciAqYnVmKQotewotCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKLQlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gYWR0NzQ3M191cGRhdGVfZGV2aWNlKGRldik7Ci0KLQlpZiAoZGF0YS0+YWxhcm0gJiBhdHRyLT5pbmRleCkKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiMVxuIik7Ci0JZWxzZQotCQlyZXR1cm4gc3ByaW50ZihidWYsICIwXG4iKTsKLX0KLQotCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluMV9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3ZvbHRfbWF4LAotCQkJICBzZXRfdm9sdF9tYXgsIDApOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjJfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd192b2x0X21heCwKLQkJCSAgc2V0X3ZvbHRfbWF4LCAxKTsKLQotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjFfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd192b2x0X21pbiwKLQkJCSAgc2V0X3ZvbHRfbWluLCAwKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4yX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdm9sdF9taW4sCi0JCQkgIHNldF92b2x0X21pbiwgMSk7Ci0KLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4xX2lucHV0LCBTX0lSVUdPLCBzaG93X3ZvbHQsIE5VTEwsIDApOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjJfaW5wdXQsIFNfSVJVR08sIHNob3dfdm9sdCwgTlVMTCwgMSk7Ci0KLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4xX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAotCQkJICBBRFQ3NDczX1ZDQ1BfQUxBUk0pOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjJfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCi0JCQkgIEFEVDc0NzNfVkNDX0FMQVJNKTsKLQotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXBfbWF4LAotCQkJICBzZXRfdGVtcF9tYXgsIDApOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXBfbWF4LAotCQkJICBzZXRfdGVtcF9tYXgsIDEpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM19tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXBfbWF4LAotCQkJICBzZXRfdGVtcF9tYXgsIDIpOwotCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcF9taW4sCi0JCQkgIHNldF90ZW1wX21pbiwgMCk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcF9taW4sCi0JCQkgIHNldF90ZW1wX21pbiwgMSk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAzX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcF9taW4sCi0JCQkgIHNldF90ZW1wX21pbiwgMik7Ci0KLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMCk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDEpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM19pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCAyKTsKLQotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKLQkJCSAgQURUNzQ3M19SMVRfQUxBUk0gfCBBTEFSTTIoQURUNzQ3M19SMVRfU0hPUlQpKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCi0JCQkgIEFEVDc0NzNfTFRfQUxBUk0pOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM19hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKLQkJCSAgQURUNzQ3M19SMlRfQUxBUk0gfCBBTEFSTTIoQURUNzQ3M19SMlRfU0hPUlQpKTsKLQotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4xX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX21pbiwKLQkJCSAgc2V0X2Zhbl9taW4sIDApOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4yX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX21pbiwKLQkJCSAgc2V0X2Zhbl9taW4sIDEpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4zX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX21pbiwKLQkJCSAgc2V0X2Zhbl9taW4sIDIpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW40X21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX21pbiwKLQkJCSAgc2V0X2Zhbl9taW4sIDMpOwotCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjFfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLCBOVUxMLCAwKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMl9pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDEpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4zX2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgMik7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjRfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLCBOVUxMLCAzKTsKLQotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4xX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAotCQkJICBBTEFSTTIoQURUNzQ3M19GQU4xX0FMQVJNKSk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjJfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCi0JCQkgIEFMQVJNMihBRFQ3NDczX0ZBTjJfQUxBUk0pKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuM19hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKLQkJCSAgQUxBUk0yKEFEVDc0NzNfRkFOM19BTEFSTSkpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW40X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAotCQkJICBBTEFSTTIoQURUNzQ3M19GQU40X0FMQVJNKSk7Ci0KLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtX3VzZV9wb2ludDJfcHdtX2F0X2NyaXQsIFNfSVdVU1IgfCBTX0lSVUdPLAotCQkJICBzaG93X21heF9kdXR5X2F0X2NyaXQsIHNldF9tYXhfZHV0eV9hdF9jcml0LCAwKTsKLQotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20xLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19wd20sIHNldF9wd20sIDApOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20yLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19wd20sIHNldF9wd20sIDEpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20zLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19wd20sIHNldF9wd20sIDIpOwotCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTFfYXV0b19wb2ludDFfcHdtLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJCSAgc2hvd19wd21fbWluLCBzZXRfcHdtX21pbiwgMCk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTJfYXV0b19wb2ludDFfcHdtLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJCSAgc2hvd19wd21fbWluLCBzZXRfcHdtX21pbiwgMSk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTNfYXV0b19wb2ludDFfcHdtLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJCSAgc2hvd19wd21fbWluLCBzZXRfcHdtX21pbiwgMik7Ci0KLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMV9hdXRvX3BvaW50Ml9wd20sIFNfSVdVU1IgfCBTX0lSVUdPLAotCQkJICBzaG93X3B3bV9tYXgsIHNldF9wd21fbWF4LCAwKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMl9hdXRvX3BvaW50Ml9wd20sIFNfSVdVU1IgfCBTX0lSVUdPLAotCQkJICBzaG93X3B3bV9tYXgsIHNldF9wd21fbWF4LCAxKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtM19hdXRvX3BvaW50Ml9wd20sIFNfSVdVU1IgfCBTX0lSVUdPLAotCQkJICBzaG93X3B3bV9tYXgsIHNldF9wd21fbWF4LCAyKTsKLQotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9hdXRvX3BvaW50MV90ZW1wLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJCSAgc2hvd190ZW1wX3RtaW4sIHNldF90ZW1wX3RtaW4sIDApOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9hdXRvX3BvaW50MV90ZW1wLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJCSAgc2hvd190ZW1wX3RtaW4sIHNldF90ZW1wX3RtaW4sIDEpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM19hdXRvX3BvaW50MV90ZW1wLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJCSAgc2hvd190ZW1wX3RtaW4sIHNldF90ZW1wX3RtaW4sIDIpOwotCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2F1dG9fcG9pbnQyX3RlbXAsIFNfSVdVU1IgfCBTX0lSVUdPLAotCQkJICBzaG93X3RlbXBfdG1heCwgc2V0X3RlbXBfdG1heCwgMCk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2F1dG9fcG9pbnQyX3RlbXAsIFNfSVdVU1IgfCBTX0lSVUdPLAotCQkJICBzaG93X3RlbXBfdG1heCwgc2V0X3RlbXBfdG1heCwgMSk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAzX2F1dG9fcG9pbnQyX3RlbXAsIFNfSVdVU1IgfCBTX0lSVUdPLAotCQkJICBzaG93X3RlbXBfdG1heCwgc2V0X3RlbXBfdG1heCwgMik7Ci0KLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMV9lbmFibGUsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3B3bV9lbmFibGUsCi0JCQkgIHNldF9wd21fZW5hYmxlLCAwKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMl9lbmFibGUsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3B3bV9lbmFibGUsCi0JCQkgIHNldF9wd21fZW5hYmxlLCAxKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtM19lbmFibGUsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3B3bV9lbmFibGUsCi0JCQkgIHNldF9wd21fZW5hYmxlLCAyKTsKLQotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20xX2F1dG9fY2hhbm5lbHNfdGVtcCwgU19JV1VTUiB8IFNfSVJVR08sCi0JCQkgIHNob3dfcHdtX2F1dG9fdGVtcCwgc2V0X3B3bV9hdXRvX3RlbXAsIDApOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20yX2F1dG9fY2hhbm5lbHNfdGVtcCwgU19JV1VTUiB8IFNfSVJVR08sCi0JCQkgIHNob3dfcHdtX2F1dG9fdGVtcCwgc2V0X3B3bV9hdXRvX3RlbXAsIDEpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20zX2F1dG9fY2hhbm5lbHNfdGVtcCwgU19JV1VTUiB8IFNfSVJVR08sCi0JCQkgIHNob3dfcHdtX2F1dG9fdGVtcCwgc2V0X3B3bV9hdXRvX3RlbXAsIDIpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWR0NzQ3M19hdHRyW10gPQotewotCSZzZW5zb3JfZGV2X2F0dHJfaW4xX21heC5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfaW4yX21heC5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfaW4xX21pbi5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfaW4yX21pbi5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfaW4xX2lucHV0LmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9pbjJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2luMV9hbGFybS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfaW4yX2FsYXJtLmRldl9hdHRyLmF0dHIsCi0KLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWF4LmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19tYXguZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21pbi5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWluLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19taW4uZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9pbnB1dC5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfaW5wdXQuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2FsYXJtLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9hbGFybS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfYWxhcm0uZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2F1dG9fcG9pbnQxX3RlbXAuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2F1dG9fcG9pbnQxX3RlbXAuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2F1dG9fcG9pbnQxX3RlbXAuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2F1dG9fcG9pbnQyX3RlbXAuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2F1dG9fcG9pbnQyX3RlbXAuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2F1dG9fcG9pbnQyX3RlbXAuZGV2X2F0dHIuYXR0ciwKLQotCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9taW4uZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfbWluLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9mYW4zX21pbi5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfZmFuNF9taW4uZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfaW5wdXQuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjRfaW5wdXQuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfYWxhcm0uZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfYWxhcm0uZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfYWxhcm0uZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKLQotCSZzZW5zb3JfZGV2X2F0dHJfcHdtX3VzZV9wb2ludDJfcHdtX2F0X2NyaXQuZGV2X2F0dHIuYXR0ciwKLQotCSZzZW5zb3JfZGV2X2F0dHJfcHdtMS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtMi5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtMy5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX3BvaW50MV9wd20uZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfYXV0b19wb2ludDFfcHdtLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9wd20zX2F1dG9fcG9pbnQxX3B3bS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX3BvaW50Ml9wd20uZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfYXV0b19wb2ludDJfcHdtLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9wd20zX2F1dG9fcG9pbnQyX3B3bS5kZXZfYXR0ci5hdHRyLAotCi0JJnNlbnNvcl9kZXZfYXR0cl9wd20xX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9lbmFibGUuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfZW5hYmxlLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fY2hhbm5lbHNfdGVtcC5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX2NoYW5uZWxzX3RlbXAuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfYXV0b19jaGFubmVsc190ZW1wLmRldl9hdHRyLmF0dHIsCi0KLQlOVUxMCi19OwotCi0vKiBSZXR1cm4gMCBpZiBkZXRlY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgLUVOT0RFViBvdGhlcndpc2UgKi8KLXN0YXRpYyBpbnQgYWR0NzQ3M19kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQotewotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKLQlpbnQgdmVuZG9yLCBkZXZpY2UsIHJldmlzaW9uOwotCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXZlbmRvciA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIEFEVDc0NzNfUkVHX1ZFTkRPUik7Ci0JaWYgKHZlbmRvciAhPSBBRFQ3NDczX1ZFTkRPUikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlkZXZpY2UgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDczX1JFR19ERVZJQ0UpOwotCWlmIChkZXZpY2UgIT0gQURUNzQ3M19ERVZJQ0UpCi0JCXJldHVybiAtRU5PREVWOwotCi0JcmV2aXNpb24gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDczX1JFR19SRVZJU0lPTik7Ci0JaWYgKHJldmlzaW9uICE9IEFEVDc0NzNfUkVWXzY4ICYmIHJldmlzaW9uICE9IEFEVDc0NzNfUkVWXzY5KQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXN0cmxjcHkoaW5mby0+dHlwZSwgImFkdDc0NzMiLCBJMkNfTkFNRV9TSVpFKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFkdDc0NzNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCi17Ci0Jc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YTsKLQlpbnQgZXJyOwotCi0JZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZHQ3NDczX2RhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBleGl0OwotCX0KLQotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOwotCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOwotCi0JZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiJXMgY2hpcCBmb3VuZFxuIiwgY2xpZW50LT5uYW1lKTsKLQotCS8qIEluaXRpYWxpemUgdGhlIEFEVDc0NzMgY2hpcCAqLwotCWFkdDc0NzNfaW5pdF9jbGllbnQoY2xpZW50KTsKLQotCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCi0JZGF0YS0+YXR0cnMuYXR0cnMgPSBhZHQ3NDczX2F0dHI7Ci0JZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmZGF0YS0+YXR0cnMpOwotCWlmIChlcnIpCi0JCWdvdG8gZXhpdF9mcmVlOwotCi0JZGF0YS0+aHdtb25fZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZjbGllbnQtPmRldik7Ci0JaWYgKElTX0VSUihkYXRhLT5od21vbl9kZXYpKSB7Ci0JCWVyciA9IFBUUl9FUlIoZGF0YS0+aHdtb25fZGV2KTsKLQkJZ290byBleGl0X3JlbW92ZTsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXhpdF9yZW1vdmU6Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmZGF0YS0+YXR0cnMpOwotZXhpdF9mcmVlOgotCWtmcmVlKGRhdGEpOwotZXhpdDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGFkdDc0NzNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZkYXRhLT5hdHRycyk7Ci0Ja2ZyZWUoZGF0YSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFkdDc0NzNfaW5pdCh2b2lkKQotewotCXByX25vdGljZSgiVGhlIGFkdDc0NzMgZHJpdmVyIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgdGhlIGFkdDc0NzUgIgotCQkgICJkcml2ZXIgaW5zdGVhZFxuIik7Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZhZHQ3NDczX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBhZHQ3NDczX2V4aXQodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmYWR0NzQ3M19kcml2ZXIpOwotfQotCi1NT0RVTEVfQVVUSE9SKCJEYXJyaWNrIEouIFdvbmcgPGRqd29uZ0B1cy5pYm0uY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBRFQ3NDczIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfaW5pdChhZHQ3NDczX2luaXQpOwotbW9kdWxlX2V4aXQoYWR0NzQ3M19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYXNjNzYyMS5jIGIvZHJpdmVycy9od21vbi9hc2M3NjIxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y5NDgxMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaHdtb24vYXNjNzYyMS5jCkBAIC0wLDAgKzEsMTI1NSBAQAorLyoKKyAqIGFzYzc2MjEuYyAtIFBhcnQgb2YgbG1fc2Vuc29ycywgTGludXgga2VybmVsIG1vZHVsZXMgZm9yIGhhcmR3YXJlIG1vbml0b3JpbmcKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAxMCBHZW9yZ2UgSm9zZXBoICA8Z2VvcmdlLmpvc2VwaEBmYWlydmlldzUuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKworLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7CisJMHgyYywgMHgyZCwgMHgyZSwgSTJDX0NMSUVOVF9FTkQKK307CisKK2VudW0gYXNjNzYyMV90eXBlIHsKKwlhc2M3NjIxLAorCWFzYzc2MjFhCit9OworCisjZGVmaW5lIElOVEVSVkFMX0hJR0ggICAoSFogKyBIWiAvIDIpCisjZGVmaW5lIElOVEVSVkFMX0xPVyAgICAoMSAqIDYwICogSFopCisjZGVmaW5lIFBSSV9OT05FICAgICAgICAwCisjZGVmaW5lIFBSSV9MT1cgICAgICAgICAxCisjZGVmaW5lIFBSSV9ISUdIICAgICAgICAyCisjZGVmaW5lIEZJUlNUX0NISVAgICAgICBhc2M3NjIxCisjZGVmaW5lIExBU1RfQ0hJUCAgICAgICBhc2M3NjIxYQorCitzdHJ1Y3QgYXNjNzYyMV9jaGlwIHsKKwljaGFyICpuYW1lOworCWVudW0gYXNjNzYyMV90eXBlIGNoaXBfdHlwZTsKKwl1OCBjb21wYW55X3JlZzsKKwl1OCBjb21wYW55X2lkOworCXU4IHZlcnN0ZXBfcmVnOworCXU4IHZlcnN0ZXBfaWQ7CisJdW5zaWduZWQgc2hvcnQgKmFkZHJlc3NlczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXNjNzYyMV9jaGlwIGFzYzc2MjFfY2hpcHNbXSA9IHsKKwl7CisJCS5uYW1lID0gImFzYzc2MjEiLAorCQkuY2hpcF90eXBlID0gYXNjNzYyMSwKKwkJLmNvbXBhbnlfcmVnID0gMHgzZSwKKwkJLmNvbXBhbnlfaWQgPSAweDYxLAorCQkudmVyc3RlcF9yZWcgPSAweDNmLAorCQkudmVyc3RlcF9pZCA9IDB4NmMsCisJCS5hZGRyZXNzZXMgPSBub3JtYWxfaTJjLAorCSB9LAorCXsKKwkJLm5hbWUgPSAiYXNjNzYyMWEiLAorCQkuY2hpcF90eXBlID0gYXNjNzYyMWEsCisJCS5jb21wYW55X3JlZyA9IDB4M2UsCisJCS5jb21wYW55X2lkID0gMHg2MSwKKwkJLnZlcnN0ZXBfcmVnID0gMHgzZiwKKwkJLnZlcnN0ZXBfaWQgPSAweDZkLAorCQkuYWRkcmVzc2VzID0gbm9ybWFsX2kyYywKKwkgfSwKK307CisKKy8qCisgKiBEZWZpbmVzIHRoZSBoaWdoZXN0IHJlZ2lzdGVyIHRvIGJlIHVzZWQsIG5vdCB0aGUgY291bnQuCisgKiBUaGUgYWN0dWFsIGNvdW50IHdpbGwgcHJvYmFibHkgYmUgc21hbGxlciBiZWNhdXNlIG9mIGdhcHMKKyAqIGluIHRoZSBpbXBsZW1lbnRhdGlvbiAodW51c2VkIHJlZ2lzdGVyIGxvY2F0aW9ucykuCisgKiBUaGlzIGRlZmluZSB3aWxsIHNhZmVseSBzZXQgdGhlIGFycmF5IHNpemUgb2YgYm90aCB0aGUgcGFyYW1ldGVyCisgKiBhbmQgZGF0YSBhcnJheXMuCisgKiBUaGlzIGNvbWVzIGZyb20gdGhlIGRhdGEgc2hlZXQgcmVnaXN0ZXIgZGVzY3JpcHRpb24gdGFibGUuCisgKi8KKyNkZWZpbmUgTEFTVF9SRUdJU1RFUiAweGZmCisKK3N0cnVjdCBhc2M3NjIxX2RhdGEgeworCXN0cnVjdCBpMmNfY2xpZW50IGNsaWVudDsKKwlzdHJ1Y3QgZGV2aWNlICpjbGFzc19kZXY7CisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOworCWludCB2YWxpZDsJCS8qICE9MCBpZiBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLworCXVuc2lnbmVkIGxvbmcgbGFzdF9oaWdoX3JlYWRpbmc7CS8qIEluIGppZmZpZXMgKi8KKwl1bnNpZ25lZCBsb25nIGxhc3RfbG93X3JlYWRpbmc7CQkvKiBJbiBqaWZmaWVzICovCisJLyoKKwkgKiBSZWdpc3RlcnMgd2UgY2FyZSBhYm91dCBvY2N1cHkgdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXgKKwkgKiBpbiB0aGUgYXJyYXkuICBSZWdpc3RlcnMgd2UgZG9uJ3QgY2FyZSBhYm91dCBhcmUgbGVmdAorCSAqIGF0IDAuCisJICovCisJdTggcmVnW0xBU1RfUkVHSVNURVIgKyAxXTsKK307CisKKy8qCisgKiBNYWNybyB0byBnZXQgdGhlIHBhcmVudCBhc2M3NjIxX3BhcmFtIHN0cnVjdHVyZQorICogZnJvbSBhIHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHBhc3NlZCBpbnRvIHRoZQorICogc2hvdy9zdG9yZSBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUgdG9fYXNjNzYyMV9wYXJhbShfc2RhKSBcCisJY29udGFpbmVyX29mKF9zZGEsIHN0cnVjdCBhc2M3NjIxX3BhcmFtLCBzZGEpCisKKy8qCisgKiBFYWNoIHBhcmFtZXRlciB0byBiZSByZXRyaWV2ZWQgbmVlZHMgYW4gYXNjNzYyMV9wYXJhbSBzdHJ1Y3R1cmUKKyAqIGFsbG9jYXRlZC4gIEl0IGNvbnRhaW5zIHRoZSBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBzdHJ1Y3R1cmUKKyAqIGFuZCB0aGUgY29udHJvbCBpbmZvIG5lZWRlZCB0byByZXRyaWV2ZSB0aGUgdmFsdWUgZnJvbSB0aGUgcmVnaXN0ZXIgbWFwLgorICovCitzdHJ1Y3QgYXNjNzYyMV9wYXJhbSB7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYTsKKwl1OCBwcmlvcml0eTsKKwl1OCBtc2JbM107CisJdTggbHNiWzNdOworCXU4IG1hc2tbM107CisJdTggc2hpZnRbM107Cit9OworCisvKgorICogVGhpcyBpcyB0aGUgbWFwIHRoYXQgdWx0aW1hdGVseSBpbmRpY2F0ZXMgd2hldGhlciB3ZSdsbCBiZQorICogcmV0cmlldmluZyBhIHJlZ2lzdGVyIHZhbHVlIG9yIG5vdCwgYW5kIGF0IHdoYXQgZnJlcXVlbmN5LgorICovCitzdGF0aWMgdTggYXNjNzYyMV9yZWdpc3Rlcl9wcmlvcml0aWVzWzI1NV07CisKK3N0YXRpYyBzdHJ1Y3QgYXNjNzYyMV9kYXRhICphc2M3NjIxX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KTsKKworc3RhdGljIGlubGluZSB1OCByZWFkX2J5dGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQoreworCWludCByZXMgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOworCWlmIChyZXMgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJIlVuYWJsZSB0byByZWFkIGZyb20gcmVnaXN0ZXIgMHglMDJ4LlxuIiwgcmVnKTsKKwkJcmV0dXJuIDA7CisJfTsKKwlyZXR1cm4gcmVzICYgMHhmZjsKK30KKworc3RhdGljIGlubGluZSBpbnQgd3JpdGVfYnl0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IGRhdGEpCit7CisJaW50IHJlcyA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIGRhdGEpOworCWlmIChyZXMgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJIlVuYWJsZSB0byB3cml0ZSB2YWx1ZSAweCUwMnggdG8gcmVnaXN0ZXIgMHglMDJ4LlxuIiwKKwkJCWRhdGEsIHJlZyk7CisJfTsKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogRGF0YSBIYW5kbGVycworICogRWFjaCBmdW5jdGlvbiBoYW5kbGVzIHRoZSBmb3JtYXR0aW5nLCBzdG9yYWdlCisgKiBhbmQgcmV0cmlldmFsIG9mIGxpa2UgcGFyYW1ldGVycy4KKyAqLworCisjZGVmaW5lIFNFVFVQX1NIT1dfZGF0YV9wYXJhbShkLCBhKSBcCisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZGEgPSB0b19zZW5zb3JfZGV2X2F0dHIoYSk7IFwKKwlzdHJ1Y3QgYXNjNzYyMV9kYXRhICpkYXRhID0gYXNjNzYyMV91cGRhdGVfZGV2aWNlKGQpOyBcCisJc3RydWN0IGFzYzc2MjFfcGFyYW0gKnBhcmFtID0gdG9fYXNjNzYyMV9wYXJhbShzZGEpCisKKyNkZWZpbmUgU0VUVVBfU1RPUkVfZGF0YV9wYXJhbShkLCBhKSBcCisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZGEgPSB0b19zZW5zb3JfZGV2X2F0dHIoYSk7IFwKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkKTsgXAorCXN0cnVjdCBhc2M3NjIxX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsgXAorCXN0cnVjdCBhc2M3NjIxX3BhcmFtICpwYXJhbSA9IHRvX2FzYzc2MjFfcGFyYW0oc2RhKQorCisvKgorICogdTggaXMganVzdCB3aGF0IGl0IHNvdW5kcyBsaWtlLi4uYW4gdW5zaWduZWQgYnl0ZSB3aXRoIG5vCisgKiBzcGVjaWFsIGZvcm1hdHRpbmcuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdTgoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgICAgIGNoYXIgKmJ1ZikKK3sKKwlTRVRVUF9TSE9XX2RhdGFfcGFyYW0oZGV2LCBhdHRyKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBkYXRhLT5yZWdbcGFyYW0tPm1zYlswXV0pOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV91OChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJU0VUVVBfU1RPUkVfZGF0YV9wYXJhbShkZXYsIGF0dHIpOworCWxvbmcgcmVxdmFsOworCisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnJlcXZhbCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVxdmFsID0gU0VOU09SU19MSU1JVChyZXF2YWwsIDAsIDI1NSk7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJZGF0YS0+cmVnW3BhcmFtLT5tc2JbMF1dID0gcmVxdmFsOworCXdyaXRlX2J5dGUoY2xpZW50LCBwYXJhbS0+bXNiWzBdLCByZXF2YWwpOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIE1hbnkgb2YgdGhlIGNvbmZpZyB2YWx1ZXMgb2NjdXB5IG9ubHkgYSBmZXcgYml0cyBvZiBhIHJlZ2lzdGVyLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X2JpdG1hc2soc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJU0VUVVBfU0hPV19kYXRhX3BhcmFtKGRldiwgYXR0cik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwKKwkJICAgICAgIChkYXRhLT5yZWdbcGFyYW0tPm1zYlswXV0gPj4gcGFyYW0tPgorCQkJc2hpZnRbMF0pICYgcGFyYW0tPm1hc2tbMF0pOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9iaXRtYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCVNFVFVQX1NUT1JFX2RhdGFfcGFyYW0oZGV2LCBhdHRyKTsKKwlsb25nIHJlcXZhbDsKKwl1OCBjdXJydmFsOworCisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnJlcXZhbCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVxdmFsID0gU0VOU09SU19MSU1JVChyZXF2YWwsIDAsIHBhcmFtLT5tYXNrWzBdKTsKKworCXJlcXZhbCA9IChyZXF2YWwgJiBwYXJhbS0+bWFza1swXSkgPDwgcGFyYW0tPnNoaWZ0WzBdOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWN1cnJ2YWwgPSByZWFkX2J5dGUoY2xpZW50LCBwYXJhbS0+bXNiWzBdKTsKKwlyZXF2YWwgfD0gKGN1cnJ2YWwgJiB+KHBhcmFtLT5tYXNrWzBdIDw8IHBhcmFtLT5zaGlmdFswXSkpOworCWRhdGEtPnJlZ1twYXJhbS0+bXNiWzBdXSA9IHJlcXZhbDsKKwl3cml0ZV9ieXRlKGNsaWVudCwgcGFyYW0tPm1zYlswXSwgcmVxdmFsKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiAxNiBiaXQgZmFuIHJwbSB2YWx1ZXMKKyAqIHJlcG9ydGVkIGJ5IHRoZSBkZXZpY2UgYXMgdGhlIG51bWJlciBvZiAxMS4xMTF1cyBwZXJpb2RzICg5MGtoeikKKyAqIGJldHdlZW4gZnVsbCBmYW4gcm90YXRpb25zLiAgVGhlcmVmb3JlLi4uCisgKiBSUE0gPSAoOTAwMDAgKiA2MCkgLyByZWdpc3RlciB2YWx1ZQorICovCitzdGF0aWMgc3NpemVfdCBzaG93X2ZhbjE2KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlTRVRVUF9TSE9XX2RhdGFfcGFyYW0oZGV2LCBhdHRyKTsKKwl1MTYgcmVndmFsOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJlZ3ZhbCA9IChkYXRhLT5yZWdbcGFyYW0tPm1zYlswXV0gPDwgOCkgfCBkYXRhLT5yZWdbcGFyYW0tPmxzYlswXV07CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwKKwkJICAgICAgIChyZWd2YWwgPT0gMCA/IC0xIDogKHJlZ3ZhbCkgPT0KKwkJCTB4ZmZmZiA/IDAgOiA1NDAwMDAwIC8gcmVndmFsKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2ZhbjE2KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCisJCQkgICBzaXplX3QgY291bnQpCit7CisJU0VUVVBfU1RPUkVfZGF0YV9wYXJhbShkZXYsIGF0dHIpOworCWxvbmcgcmVxdmFsOworCisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnJlcXZhbCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVxdmFsID0KKwkgICAgKFNFTlNPUlNfTElNSVQoKHJlcXZhbCkgPD0gMCA/IDAgOiA1NDAwMDAwIC8gKHJlcXZhbCksIDAsIDY1NTM0KSk7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJZGF0YS0+cmVnW3BhcmFtLT5tc2JbMF1dID0gKHJlcXZhbCA+PiA4KSAmIDB4ZmY7CisJZGF0YS0+cmVnW3BhcmFtLT5sc2JbMF1dID0gcmVxdmFsICYgMHhmZjsKKwl3cml0ZV9ieXRlKGNsaWVudCwgcGFyYW0tPm1zYlswXSwgZGF0YS0+cmVnW3BhcmFtLT5tc2JbMF1dKTsKKwl3cml0ZV9ieXRlKGNsaWVudCwgcGFyYW0tPmxzYlswXSwgZGF0YS0+cmVnW3BhcmFtLT5sc2JbMF1dKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIFZvbHRhZ2VzIGFyZSBzY2FsZWQgaW4gdGhlIGRldmljZSBzbyB0aGF0IHRoZSBub21pbmFsIHZvbHRhZ2UKKyAqIGlzIDMvNHRocyBvZiB0aGUgMC0yNTUgcmFuZ2UgKGkuZS4gMTkyKS4KKyAqIElmIGFsbCB2b2x0YWdlcyBhcmUgJ25vcm1hbCcgdGhlbiBhbGwgdm9sdGFnZSByZWdpc3RlcnMgd2lsbAorICogcmVhZCAweEMwLiAgVGhpcyBkb2Vzbid0IGhlbHAgdXMgaWYgd2UgZG9uJ3QgaGF2ZSBhIHBvaW50IG9mIHJlZmVybmNlLgorICogVGhlIGRhdGEgc2hlZXQgaG93ZXZlciBwcm92aWRlcyB1cyB3aXRoIHRoZSBmdWxsIHNjYWxlIHZhbHVlIGZvciBlYWNoCisgKiB3aGljaCBpcyBzdG9yZWQgaW4gaW5fc2NhbGluZy4gIFRoZSBzZGEtPmluZGV4IHBhcmFtZXRlciB2YWx1ZSBwcm92aWRlcworICogdGhlIGluZGV4IGludG8gaW5fc2NhbGluZy4KKyAqCisgKiBOT1RFOiBUaGUgY2hpcCBleHBlY3RzIHRoZSBmaXJzdCAyIGlucHV0cyBiZSAyLjUgYW5kIDIuMjUgdm9sdHMKKyAqIHJlc3BlY3RpdmVseS4gVGhhdCBkb2Vzbid0IG1lYW4gdGhhdCdzIHdoYXQgdGhlIG1vdGhlcmJvYXJkIHByb3ZpZGVzLiA6KQorICovCisKK3N0YXRpYyBpbnQgYXNjNzYyMV9pbl9zY2FsaW5nW10gPSB7CisJMzMyMCwgMzAwMCwgNDM4MCwgNjY0MCwgMTYwMDAKK307CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfaW4xMChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJIGNoYXIgKmJ1ZikKK3sKKwlTRVRVUF9TSE9XX2RhdGFfcGFyYW0oZGV2LCBhdHRyKTsKKwl1MTYgcmVndmFsOworCXU4IG5yID0gc2RhLT5pbmRleDsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZWd2YWwgPSAoZGF0YS0+cmVnW3BhcmFtLT5tc2JbMF1dICogYXNjNzYyMV9pbl9zY2FsaW5nW25yXSkgLyAyNTY7CisKKwkvKiBUaGUgTFNCIHZhbHVlIGlzIGEgMi1iaXQgc2NhbGluZyBvZiB0aGUgTVNCJ3MgTFNiaXQgdmFsdWUuCisJICogSS5FLiAgSWYgdGhlIG1heGltaW0gdm9sdGFnZSBmb3IgdGhpcyBpbnB1dCBpcyA2NjQwIG1pbGxpdm9sdHMgdGhlbgorCSAqIGEgTVNCIHJlZ2lzdGVyIHZhbHVlIG9mIDAgPSAwbXYgYW5kIDI1NSA9IDY2NDBtdi4KKwkgKiBBIDEgc3RlcCBjaGFuZ2UgdGhlcmVmb3JlIHJlcHJlc2VudHMgMjUuOW12ICg2NjQwIC8gMjU2KS4KKwkgKiBUaGUgZXh0cmEgMi1iaXRzIHRoZXJlZm9yZSByZXByZXNlbnQgaW5jcmVtZW50cyBvZiA2LjQ4bXYuCisJICovCisJcmVndmFsICs9ICgoYXNjNzYyMV9pbl9zY2FsaW5nW25yXSAvIDI1NikgLyA0KSAqCisJICAgIChkYXRhLT5yZWdbcGFyYW0tPmxzYlswXV0gPj4gNik7CisKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCByZWd2YWwpOworfQorCisvKiA4IGJpdCB2b2x0YWdlIHZhbHVlcyAodGhlIG1pbnMgYW5kIG1heHMpICovCitzdGF0aWMgc3NpemVfdCBzaG93X2luOChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJY2hhciAqYnVmKQoreworCVNFVFVQX1NIT1dfZGF0YV9wYXJhbShkZXYsIGF0dHIpOworCXU4IG5yID0gc2RhLT5pbmRleDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLAorCQkgICAgICAgKChkYXRhLT5yZWdbcGFyYW0tPm1zYlswXV0gKgorCQkJIGFzYzc2MjFfaW5fc2NhbGluZ1tucl0pIC8gMjU2KSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2luOChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCVNFVFVQX1NUT1JFX2RhdGFfcGFyYW0oZGV2LCBhdHRyKTsKKwlsb25nIHJlcXZhbDsKKwl1OCBuciA9IHNkYS0+aW5kZXg7CisKKwlpZiAoc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmcmVxdmFsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXF2YWwgPSBTRU5TT1JTX0xJTUlUKHJlcXZhbCwgMCwgYXNjNzYyMV9pbl9zY2FsaW5nW25yXSk7CisKKwlyZXF2YWwgPSAocmVxdmFsICogMjU1ICsgMTI4KSAvIGFzYzc2MjFfaW5fc2NhbGluZ1tucl07CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJZGF0YS0+cmVnW3BhcmFtLT5tc2JbMF1dID0gcmVxdmFsOworCXdyaXRlX2J5dGUoY2xpZW50LCBwYXJhbS0+bXNiWzBdLCByZXF2YWwpOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXA4KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlTRVRVUF9TSE9XX2RhdGFfcGFyYW0oZGV2LCBhdHRyKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAoKHM4KSBkYXRhLT5yZWdbcGFyYW0tPm1zYlswXV0pICogMTAwMCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3RlbXA4KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCisJCQkgICBzaXplX3QgY291bnQpCit7CisJU0VUVVBfU1RPUkVfZGF0YV9wYXJhbShkZXYsIGF0dHIpOworCWxvbmcgcmVxdmFsOworCXM4IHRlbXA7CisKKwlpZiAoc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmcmVxdmFsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXF2YWwgPSBTRU5TT1JTX0xJTUlUKHJlcXZhbCwgLTEyNzAwMCwgMTI3MDAwKTsKKworCXRlbXAgPSByZXF2YWwgLyAxMDAwOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnJlZ1twYXJhbS0+bXNiWzBdXSA9IHRlbXA7CisJd3JpdGVfYnl0ZShjbGllbnQsIHBhcmFtLT5tc2JbMF0sIHRlbXApOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIFRlbXBlcmF0dXJlcyB0aGF0IG9jY3VweSAyIGJ5dGVzIGFsd2F5cyBoYXZlIHRoZSB3aG9sZQorICogbnVtYmVyIG9mIGRlZ3JlZXMgaW4gdGhlIE1TQiB3aXRoIHNvbWUgcGFydCBvZiB0aGUgTFNCCisgKiBpbmRpY2F0aW5nIGZyYWN0aW9uYWwgZGVncmVlcy4KKyAqLworCisvKiAgIG1tbW1tbW1tLmxseHh4eHh4ICovCitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXAxMChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCVNFVFVQX1NIT1dfZGF0YV9wYXJhbShkZXYsIGF0dHIpOworCXU4IG1zYiwgbHNiOworCWludCB0ZW1wOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCW1zYiA9IGRhdGEtPnJlZ1twYXJhbS0+bXNiWzBdXTsKKwlsc2IgPSAoZGF0YS0+cmVnW3BhcmFtLT5sc2JbMF1dID4+IDYpICYgMHgwMzsKKwl0ZW1wID0gKCgoczgpIG1zYikgKiAxMDAwKSArIChsc2IgKiAyNTApOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRlbXApOworfQorCisvKiAgIG1tbW1tbS5sbCAqLworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wNjIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlTRVRVUF9TSE9XX2RhdGFfcGFyYW0oZGV2LCBhdHRyKTsKKwl1OCByZWd2YWwgPSBkYXRhLT5yZWdbcGFyYW0tPm1zYlswXV07CisJaW50IHRlbXAgPSAoKHM4KSAocmVndmFsICYgMHhmYykgKiAxMDAwKSArICgocmVndmFsICYgMHgwMykgKiAyNTApOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRlbXApOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV90ZW1wNjIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCisJCQkgICAgc2l6ZV90IGNvdW50KQoreworCVNFVFVQX1NUT1JFX2RhdGFfcGFyYW0oZGV2LCBhdHRyKTsKKwlsb25nIHJlcXZhbCwgaSwgZjsKKwlzOCB0ZW1wOworCisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnJlcXZhbCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVxdmFsID0gU0VOU09SU19MSU1JVChyZXF2YWwsIC0zMjAwMCwgMzE3NTApOworCWkgPSByZXF2YWwgLyAxMDAwOworCWYgPSByZXF2YWwgLSAoaSAqIDEwMDApOworCXRlbXAgPSBpIDw8IDI7CisJdGVtcCB8PSBmIC8gMjUwOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnJlZ1twYXJhbS0+bXNiWzBdXSA9IHRlbXA7CisJd3JpdGVfYnl0ZShjbGllbnQsIHBhcmFtLT5tc2JbMF0sIHRlbXApOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIFRoZSBhU0M3NjIxIGRvZXNuJ3QgcHJvdmlkZSBhbiAiYXV0b19wb2ludDIiLiAgSW5zdGVhZCwgeW91CisgKiBzcGVjaWZ5IHRoZSBhdXRvX3BvaW50MSBhbmQgYSByYW5nZS4gIFRvIGtlZXAgd2l0aCB0aGUgc3lzZnMKKyAqIGh3bW9uIHNwZWNzLCB3ZSBzeW50aGVzaXplIHRoZSBhdXRvX3BvaW50XzIgZnJvbSB0aGVtLgorICovCisKK3N0YXRpYyB1MzIgYXNjNzYyMV9yYW5nZV9tYXBbXSA9IHsKKwkyMDAwLCAyNTAwLCAzMzMwLCA0MDAwLCA1MDAwLCA2NjcwLCA4MDAwLCAxMDAwMCwKKwkxMzMzMCwgMTYwMDAsIDIwMDAwLCAyNjY3MCwgMzIwMDAsIDQwMDAwLCA1MzMzMCwgODAwMDAsCit9OworCitzdGF0aWMgc3NpemVfdCBzaG93X2FwMl90ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlTRVRVUF9TSE9XX2RhdGFfcGFyYW0oZGV2LCBhdHRyKTsKKwlsb25nIGF1dG9fcG9pbnQxOworCXU4IHJlZ3ZhbDsKKwlpbnQgdGVtcDsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlhdXRvX3BvaW50MSA9ICgoczgpIGRhdGEtPnJlZ1twYXJhbS0+bXNiWzFdXSkgKiAxMDAwOworCXJlZ3ZhbCA9CisJICAgICgoZGF0YS0+cmVnW3BhcmFtLT5tc2JbMF1dID4+IHBhcmFtLT5zaGlmdFswXSkgJiBwYXJhbS0+bWFza1swXSk7CisJdGVtcCA9IGF1dG9fcG9pbnQxICsgYXNjNzYyMV9yYW5nZV9tYXBbU0VOU09SU19MSU1JVChyZWd2YWwsIDAsIDE1KV07CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdGVtcCk7CisKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfYXAyX3RlbXAoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlTRVRVUF9TVE9SRV9kYXRhX3BhcmFtKGRldiwgYXR0cik7CisJbG9uZyByZXF2YWwsIGF1dG9fcG9pbnQxOworCWludCBpOworCXU4IGN1cnJ2YWwsIG5ld3ZhbCA9IDA7CisKKwlpZiAoc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmcmVxdmFsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJYXV0b19wb2ludDEgPSBkYXRhLT5yZWdbcGFyYW0tPm1zYlsxXV0gKiAxMDAwOworCXJlcXZhbCA9IFNFTlNPUlNfTElNSVQocmVxdmFsLCBhdXRvX3BvaW50MSArIDIwMDAsIGF1dG9fcG9pbnQxICsgODAwMDApOworCisJZm9yIChpID0gQVJSQVlfU0laRShhc2M3NjIxX3JhbmdlX21hcCkgLSAxOyBpID49IDA7IGktLSkgeworCQlpZiAocmVxdmFsID49IGF1dG9fcG9pbnQxICsgYXNjNzYyMV9yYW5nZV9tYXBbaV0pIHsKKwkJCW5ld3ZhbCA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKworCW5ld3ZhbCA9IChuZXd2YWwgJiBwYXJhbS0+bWFza1swXSkgPDwgcGFyYW0tPnNoaWZ0WzBdOworCWN1cnJ2YWwgPSByZWFkX2J5dGUoY2xpZW50LCBwYXJhbS0+bXNiWzBdKTsKKwluZXd2YWwgfD0gKGN1cnJ2YWwgJiB+KHBhcmFtLT5tYXNrWzBdIDw8IHBhcmFtLT5zaGlmdFswXSkpOworCWRhdGEtPnJlZ1twYXJhbS0+bXNiWzBdXSA9IG5ld3ZhbDsKKwl3cml0ZV9ieXRlKGNsaWVudCwgcGFyYW0tPm1zYlswXSwgbmV3dmFsKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfcHdtX2FjKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJU0VUVVBfU0hPV19kYXRhX3BhcmFtKGRldiwgYXR0cik7CisJdTggY29uZmlnLCBhbHRiaXQsIHJlZ3ZhbDsKKwl1OCBtYXBbXSA9IHsKKwkJMHgwMSwgMHgwMiwgMHgwNCwgMHgxZiwgMHgwMCwgMHgwNiwgMHgwNywgMHgxMCwKKwkJMHgwOCwgMHgwZiwgMHgxZiwgMHgxZiwgMHgxZiwgMHgxZiwgMHgxZiwgMHgxZgorCX07CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJY29uZmlnID0gKGRhdGEtPnJlZ1twYXJhbS0+bXNiWzBdXSA+PiBwYXJhbS0+c2hpZnRbMF0pICYgcGFyYW0tPm1hc2tbMF07CisJYWx0Yml0ID0gKGRhdGEtPnJlZ1twYXJhbS0+bXNiWzFdXSA+PiBwYXJhbS0+c2hpZnRbMV0pICYgcGFyYW0tPm1hc2tbMV07CisJcmVndmFsID0gY29uZmlnIHwgKGFsdGJpdCA8PCAzKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBtYXBbU0VOU09SU19MSU1JVChyZWd2YWwsIDAsIDE1KV0pOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9wd21fYWMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCVNFVFVQX1NUT1JFX2RhdGFfcGFyYW0oZGV2LCBhdHRyKTsKKwl1bnNpZ25lZCBsb25nIHJlcXZhbDsKKwl1OCBjdXJydmFsLCBjb25maWcsIGFsdGJpdCwgbmV3dmFsOworCXUxNiBtYXBbXSA9IHsKKwkJMHgwNCwgMHgwMCwgMHgwMSwgMHhmZiwgMHgwMiwgMHhmZiwgMHgwNSwgMHgwNiwKKwkJMHgwOCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwZiwKKwkJMHgwNywgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKKwkJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMywKKwl9OworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZyZXF2YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChyZXF2YWwgPiAzMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXF2YWwgPSBtYXBbcmVxdmFsXTsKKwlpZiAocmVxdmFsID09IDB4ZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJY29uZmlnID0gcmVxdmFsICYgMHgwNzsKKwlhbHRiaXQgPSAocmVxdmFsID4+IDMpICYgMHgwMTsKKworCWNvbmZpZyA9IChjb25maWcgJiBwYXJhbS0+bWFza1swXSkgPDwgcGFyYW0tPnNoaWZ0WzBdOworCWFsdGJpdCA9IChhbHRiaXQgJiBwYXJhbS0+bWFza1sxXSkgPDwgcGFyYW0tPnNoaWZ0WzFdOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWN1cnJ2YWwgPSByZWFkX2J5dGUoY2xpZW50LCBwYXJhbS0+bXNiWzBdKTsKKwluZXd2YWwgPSBjb25maWcgfCAoY3VycnZhbCAmIH4ocGFyYW0tPm1hc2tbMF0gPDwgcGFyYW0tPnNoaWZ0WzBdKSk7CisJbmV3dmFsID0gYWx0Yml0IHwgKG5ld3ZhbCAmIH4ocGFyYW0tPm1hc2tbMV0gPDwgcGFyYW0tPnNoaWZ0WzFdKSk7CisJZGF0YS0+cmVnW3BhcmFtLT5tc2JbMF1dID0gbmV3dmFsOworCXdyaXRlX2J5dGUoY2xpZW50LCBwYXJhbS0+bXNiWzBdLCBuZXd2YWwpOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19wd21fZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCVNFVFVQX1NIT1dfZGF0YV9wYXJhbShkZXYsIGF0dHIpOworCXU4IGNvbmZpZywgYWx0Yml0LCBtaW5vZmYsIHZhbCwgbmV3dmFsOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWNvbmZpZyA9IChkYXRhLT5yZWdbcGFyYW0tPm1zYlswXV0gPj4gcGFyYW0tPnNoaWZ0WzBdKSAmIHBhcmFtLT5tYXNrWzBdOworCWFsdGJpdCA9IChkYXRhLT5yZWdbcGFyYW0tPm1zYlsxXV0gPj4gcGFyYW0tPnNoaWZ0WzFdKSAmIHBhcmFtLT5tYXNrWzFdOworCW1pbm9mZiA9IChkYXRhLT5yZWdbcGFyYW0tPm1zYlsyXV0gPj4gcGFyYW0tPnNoaWZ0WzJdKSAmIHBhcmFtLT5tYXNrWzJdOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJdmFsID0gY29uZmlnIHwgKGFsdGJpdCA8PCAzKTsKKwluZXd2YWwgPSAwOworCisJaWYgKHZhbCA9PSAzIHx8IHZhbCA+PSAxMCkKKwkJbmV3dmFsID0gMjU1OworCWVsc2UgaWYgKHZhbCA9PSA0KQorCQluZXd2YWwgPSAwOworCWVsc2UgaWYgKHZhbCA9PSA3KQorCQluZXd2YWwgPSAxOworCWVsc2UgaWYgKG1pbm9mZiA9PSAxKQorCQluZXd2YWwgPSAyOworCWVsc2UKKwkJbmV3dmFsID0gMzsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBuZXd2YWwpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9wd21fZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlTRVRVUF9TVE9SRV9kYXRhX3BhcmFtKGRldiwgYXR0cik7CisJbG9uZyByZXF2YWw7CisJdTggY3VycnZhbCwgY29uZmlnLCBhbHRiaXQsIG5ld3ZhbCwgbWlub2ZmID0gMjU1OworCisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnJlcXZhbCkpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChyZXF2YWwpIHsKKwljYXNlIDA6CisJCW5ld3ZhbCA9IDB4MDQ7CisJCWJyZWFrOworCWNhc2UgMToKKwkJbmV3dmFsID0gMHgwNzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQluZXd2YWwgPSAweDAwOworCQltaW5vZmYgPSAxOworCQlicmVhazsKKwljYXNlIDM6CisJCW5ld3ZhbCA9IDB4MDA7CisJCW1pbm9mZiA9IDA7CisJCWJyZWFrOworCWNhc2UgMjU1OgorCQluZXd2YWwgPSAweDAzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljb25maWcgPSBuZXd2YWwgJiAweDA3OworCWFsdGJpdCA9IChuZXd2YWwgPj4gMykgJiAweDAxOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWNvbmZpZyA9IChjb25maWcgJiBwYXJhbS0+bWFza1swXSkgPDwgcGFyYW0tPnNoaWZ0WzBdOworCWFsdGJpdCA9IChhbHRiaXQgJiBwYXJhbS0+bWFza1sxXSkgPDwgcGFyYW0tPnNoaWZ0WzFdOworCWN1cnJ2YWwgPSByZWFkX2J5dGUoY2xpZW50LCBwYXJhbS0+bXNiWzBdKTsKKwluZXd2YWwgPSBjb25maWcgfCAoY3VycnZhbCAmIH4ocGFyYW0tPm1hc2tbMF0gPDwgcGFyYW0tPnNoaWZ0WzBdKSk7CisJbmV3dmFsID0gYWx0Yml0IHwgKG5ld3ZhbCAmIH4ocGFyYW0tPm1hc2tbMV0gPDwgcGFyYW0tPnNoaWZ0WzFdKSk7CisJZGF0YS0+cmVnW3BhcmFtLT5tc2JbMF1dID0gbmV3dmFsOworCXdyaXRlX2J5dGUoY2xpZW50LCBwYXJhbS0+bXNiWzBdLCBuZXd2YWwpOworCWlmIChtaW5vZmYgPCAyNTUpIHsKKwkJbWlub2ZmID0gKG1pbm9mZiAmIHBhcmFtLT5tYXNrWzJdKSA8PCBwYXJhbS0+c2hpZnRbMl07CisJCWN1cnJ2YWwgPSByZWFkX2J5dGUoY2xpZW50LCBwYXJhbS0+bXNiWzJdKTsKKwkJbmV3dmFsID0KKwkJICAgIG1pbm9mZiB8IChjdXJydmFsICYgfihwYXJhbS0+bWFza1syXSA8PCBwYXJhbS0+c2hpZnRbMl0pKTsKKwkJZGF0YS0+cmVnW3BhcmFtLT5tc2JbMl1dID0gbmV3dmFsOworCQl3cml0ZV9ieXRlKGNsaWVudCwgcGFyYW0tPm1zYlsyXSwgbmV3dmFsKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdTMyIGFzYzc2MjFfcHdtX2ZyZXFfbWFwW10gPSB7CisJMTAsIDE1LCAyMywgMzAsIDM4LCA0NywgNjIsIDk0LAorCTIzMDAwLCAyNDAwMCwgMjUwMDAsIDI2MDAwLCAyNzAwMCwgMjgwMDAsIDI5MDAwLCAzMDAwMAorfTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19wd21fZnJlcShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJU0VUVVBfU0hPV19kYXRhX3BhcmFtKGRldiwgYXR0cik7CisJdTggcmVndmFsID0KKwkgICAgKGRhdGEtPnJlZ1twYXJhbS0+bXNiWzBdXSA+PiBwYXJhbS0+c2hpZnRbMF0pICYgcGFyYW0tPm1hc2tbMF07CisKKwlyZWd2YWwgPSBTRU5TT1JTX0xJTUlUKHJlZ3ZhbCwgMCwgMTUpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGFzYzc2MjFfcHdtX2ZyZXFfbWFwW3JlZ3ZhbF0pOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9wd21fZnJlcShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCVNFVFVQX1NUT1JFX2RhdGFfcGFyYW0oZGV2LCBhdHRyKTsKKwl1bnNpZ25lZCBsb25nIHJlcXZhbDsKKwl1OCBjdXJydmFsLCBuZXd2YWwgPSAyNTU7CisJaW50IGk7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnJlcXZhbCkpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXNjNzYyMV9wd21fZnJlcV9tYXApOyBpKyspIHsKKwkJaWYgKHJlcXZhbCA9PSBhc2M3NjIxX3B3bV9mcmVxX21hcFtpXSkgeworCQkJbmV3dmFsID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChuZXd2YWwgPT0gMjU1KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW5ld3ZhbCA9IChuZXd2YWwgJiBwYXJhbS0+bWFza1swXSkgPDwgcGFyYW0tPnNoaWZ0WzBdOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWN1cnJ2YWwgPSByZWFkX2J5dGUoY2xpZW50LCBwYXJhbS0+bXNiWzBdKTsKKwluZXd2YWwgfD0gKGN1cnJ2YWwgJiB+KHBhcmFtLT5tYXNrWzBdIDw8IHBhcmFtLT5zaGlmdFswXSkpOworCWRhdGEtPnJlZ1twYXJhbS0+bXNiWzBdXSA9IG5ld3ZhbDsKKwl3cml0ZV9ieXRlKGNsaWVudCwgcGFyYW0tPm1zYlswXSwgbmV3dmFsKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyB1MzIgYXNjNzYyMV9wd21fYXV0b19zcGludXBfbWFwW10gPSAgeworCTAsIDEwMCwgMjUwLCA0MDAsIDcwMCwgMTAwMCwgMjAwMCwgNDAwMAorfTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19wd21fYXN0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCVNFVFVQX1NIT1dfZGF0YV9wYXJhbShkZXYsIGF0dHIpOworCXU4IHJlZ3ZhbCA9CisJICAgIChkYXRhLT5yZWdbcGFyYW0tPm1zYlswXV0gPj4gcGFyYW0tPnNoaWZ0WzBdKSAmIHBhcmFtLT5tYXNrWzBdOworCisJcmVndmFsID0gU0VOU09SU19MSU1JVChyZWd2YWwsIDAsIDcpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGFzYzc2MjFfcHdtX2F1dG9fc3BpbnVwX21hcFtyZWd2YWxdKTsKKworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9wd21fYXN0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCVNFVFVQX1NUT1JFX2RhdGFfcGFyYW0oZGV2LCBhdHRyKTsKKwlsb25nIHJlcXZhbDsKKwl1OCBjdXJydmFsLCBuZXd2YWwgPSAyNTU7CisJdTMyIGk7CisKKwlpZiAoc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmcmVxdmFsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhc2M3NjIxX3B3bV9hdXRvX3NwaW51cF9tYXApOyBpKyspIHsKKwkJaWYgKHJlcXZhbCA9PSBhc2M3NjIxX3B3bV9hdXRvX3NwaW51cF9tYXBbaV0pIHsKKwkJCW5ld3ZhbCA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAobmV3dmFsID09IDI1NSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwluZXd2YWwgPSAobmV3dmFsICYgcGFyYW0tPm1hc2tbMF0pIDw8IHBhcmFtLT5zaGlmdFswXTsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwljdXJydmFsID0gcmVhZF9ieXRlKGNsaWVudCwgcGFyYW0tPm1zYlswXSk7CisJbmV3dmFsIHw9IChjdXJydmFsICYgfihwYXJhbS0+bWFza1swXSA8PCBwYXJhbS0+c2hpZnRbMF0pKTsKKwlkYXRhLT5yZWdbcGFyYW0tPm1zYlswXV0gPSBuZXd2YWw7CisJd3JpdGVfYnl0ZShjbGllbnQsIHBhcmFtLT5tc2JbMF0sIG5ld3ZhbCk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdTMyIGFzYzc2MjFfdGVtcF9zbW9vdGhpbmdfdGltZV9tYXBbXSA9IHsKKwkzNTAwMCwgMTc2MDAsIDExODAwLCA3MDAwLCA0NDAwLCAzMDAwLCAxNjAwLCA4MDAKK307CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF9zdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlTRVRVUF9TSE9XX2RhdGFfcGFyYW0oZGV2LCBhdHRyKTsKKwl1OCByZWd2YWwgPQorCSAgICAoZGF0YS0+cmVnW3BhcmFtLT5tc2JbMF1dID4+IHBhcmFtLT5zaGlmdFswXSkgJiBwYXJhbS0+bWFza1swXTsKKwlyZWd2YWwgPSBTRU5TT1JTX0xJTUlUKHJlZ3ZhbCwgMCwgNyk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgYXNjNzYyMV90ZW1wX3Ntb290aGluZ190aW1lX21hcFtyZWd2YWxdKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfdGVtcF9zdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlTRVRVUF9TVE9SRV9kYXRhX3BhcmFtKGRldiwgYXR0cik7CisJbG9uZyByZXF2YWw7CisJdTggY3VycnZhbCwgbmV3dmFsID0gMjU1OworCXUzMiBpOworCisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnJlcXZhbCkpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXNjNzYyMV90ZW1wX3Ntb290aGluZ190aW1lX21hcCk7IGkrKykgeworCQlpZiAocmVxdmFsID09IGFzYzc2MjFfdGVtcF9zbW9vdGhpbmdfdGltZV9tYXBbaV0pIHsKKwkJCW5ld3ZhbCA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChuZXd2YWwgPT0gMjU1KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW5ld3ZhbCA9IChuZXd2YWwgJiBwYXJhbS0+bWFza1swXSkgPDwgcGFyYW0tPnNoaWZ0WzBdOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWN1cnJ2YWwgPSByZWFkX2J5dGUoY2xpZW50LCBwYXJhbS0+bXNiWzBdKTsKKwluZXd2YWwgfD0gKGN1cnJ2YWwgJiB+KHBhcmFtLT5tYXNrWzBdIDw8IHBhcmFtLT5zaGlmdFswXSkpOworCWRhdGEtPnJlZ1twYXJhbS0+bXNiWzBdXSA9IG5ld3ZhbDsKKwl3cml0ZV9ieXRlKGNsaWVudCwgcGFyYW0tPm1zYlswXSwgbmV3dmFsKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiBFbmQgb2YgZGF0YSBoYW5kbGVycworICoKKyAqIFRoZXNlIGRlZmluZXMgZG8gbm90aGluZyBtb3JlIHRoYW4gbWFrZSB0aGUgdGFibGUgZWFzaWVyCisgKiB0byByZWFkIHdoZW4gd3JhcHBlZCBhdCBjb2x1bW4gODAuCisgKi8KKworLyoKKyAqIENyZWF0ZXMgYSB2YXJpYWJsZSBsZW5ndGggYXJyYXkgaW5pdGl0YWxpemVyLgorICogVkFBKDEsMyw1LDcpIHdvdWxkIHByb2R1Y2UgezEsMyw1LDd9CisgKi8KKyNkZWZpbmUgVkFBKGFyZ3MuLi4pIHthcmdzfQorCisjZGVmaW5lIFBSRUFEKG5hbWUsIG4sIHByaSwgcm0sIHJsLCBtLCBzLCByKSBcCisJey5zZGEgPSBTRU5TT1JfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93XyMjciwgTlVMTCwgbiksIFwKKwkgIC5wcmlvcml0eSA9IHByaSwgLm1zYlswXSA9IHJtLCAubHNiWzBdID0gcmwsIC5tYXNrWzBdID0gbSwgXAorCSAgLnNoaWZ0WzBdID0gcyx9CisKKyNkZWZpbmUgUFdSSVRFKG5hbWUsIG4sIHByaSwgcm0sIHJsLCBtLCBzLCByKSBcCisJey5zZGEgPSBTRU5TT1JfQVRUUihuYW1lLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd18jI3IsIHN0b3JlXyMjciwgbiksIFwKKwkgIC5wcmlvcml0eSA9IHByaSwgLm1zYlswXSA9IHJtLCAubHNiWzBdID0gcmwsIC5tYXNrWzBdID0gbSwgXAorCSAgLnNoaWZ0WzBdID0gcyx9CisKKy8qCisgKiBQV1JJVEVNIGFzc3VtZXMgdGhhdCB0aGUgaW5pdGlhbGl6ZXJzIGZvciB0aGUgLm1zYiwgLmxzYiwgLm1hc2sgYW5kIC5zaGlmdAorICogd2VyZSBjcmVhdGVkIHVzaW5nIHRoZSBWQUEgbWFjcm8uCisgKi8KKyNkZWZpbmUgUFdSSVRFTShuYW1lLCBuLCBwcmksIHJtLCBybCwgbSwgcywgcikgXAorCXsuc2RhID0gU0VOU09SX0FUVFIobmFtZSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfIyNyLCBzdG9yZV8jI3IsIG4pLCBcCisJICAucHJpb3JpdHkgPSBwcmksIC5tc2IgPSBybSwgLmxzYiA9IHJsLCAubWFzayA9IG0sIC5zaGlmdCA9IHMsfQorCitzdGF0aWMgc3RydWN0IGFzYzc2MjFfcGFyYW0gYXNjNzYyMV9wYXJhbXNbXSA9IHsKKwlQUkVBRChpbjBfaW5wdXQsIDAsIFBSSV9ISUdILCAweDIwLCAweDEzLCAwLCAwLCBpbjEwKSwKKwlQUkVBRChpbjFfaW5wdXQsIDEsIFBSSV9ISUdILCAweDIxLCAweDE4LCAwLCAwLCBpbjEwKSwKKwlQUkVBRChpbjJfaW5wdXQsIDIsIFBSSV9ISUdILCAweDIyLCAweDExLCAwLCAwLCBpbjEwKSwKKwlQUkVBRChpbjNfaW5wdXQsIDMsIFBSSV9ISUdILCAweDIzLCAweDEyLCAwLCAwLCBpbjEwKSwKKwlQUkVBRChpbjRfaW5wdXQsIDQsIFBSSV9ISUdILCAweDI0LCAweDE0LCAwLCAwLCBpbjEwKSwKKworCVBXUklURShpbjBfbWluLCAwLCBQUklfTE9XLCAweDQ0LCAwLCAwLCAwLCBpbjgpLAorCVBXUklURShpbjFfbWluLCAxLCBQUklfTE9XLCAweDQ2LCAwLCAwLCAwLCBpbjgpLAorCVBXUklURShpbjJfbWluLCAyLCBQUklfTE9XLCAweDQ4LCAwLCAwLCAwLCBpbjgpLAorCVBXUklURShpbjNfbWluLCAzLCBQUklfTE9XLCAweDRhLCAwLCAwLCAwLCBpbjgpLAorCVBXUklURShpbjRfbWluLCA0LCBQUklfTE9XLCAweDRjLCAwLCAwLCAwLCBpbjgpLAorCisJUFdSSVRFKGluMF9tYXgsIDAsIFBSSV9MT1csIDB4NDUsIDAsIDAsIDAsIGluOCksCisJUFdSSVRFKGluMV9tYXgsIDEsIFBSSV9MT1csIDB4NDcsIDAsIDAsIDAsIGluOCksCisJUFdSSVRFKGluMl9tYXgsIDIsIFBSSV9MT1csIDB4NDksIDAsIDAsIDAsIGluOCksCisJUFdSSVRFKGluM19tYXgsIDMsIFBSSV9MT1csIDB4NGIsIDAsIDAsIDAsIGluOCksCisJUFdSSVRFKGluNF9tYXgsIDQsIFBSSV9MT1csIDB4NGQsIDAsIDAsIDAsIGluOCksCisKKwlQUkVBRChpbjBfYWxhcm0sIDAsIFBSSV9MT1csIDB4NDEsIDAsIDB4MDEsIDAsIGJpdG1hc2spLAorCVBSRUFEKGluMV9hbGFybSwgMSwgUFJJX0xPVywgMHg0MSwgMCwgMHgwMSwgMSwgYml0bWFzayksCisJUFJFQUQoaW4yX2FsYXJtLCAyLCBQUklfTE9XLCAweDQxLCAwLCAweDAxLCAyLCBiaXRtYXNrKSwKKwlQUkVBRChpbjNfYWxhcm0sIDMsIFBSSV9MT1csIDB4NDEsIDAsIDB4MDEsIDMsIGJpdG1hc2spLAorCVBSRUFEKGluNF9hbGFybSwgNCwgUFJJX0xPVywgMHg0MiwgMCwgMHgwMSwgMCwgYml0bWFzayksCisKKwlQUkVBRChmYW4xX2lucHV0LCAwLCBQUklfSElHSCwgMHgyOSwgMHgyOCwgMCwgMCwgZmFuMTYpLAorCVBSRUFEKGZhbjJfaW5wdXQsIDEsIFBSSV9ISUdILCAweDJiLCAweDJhLCAwLCAwLCBmYW4xNiksCisJUFJFQUQoZmFuM19pbnB1dCwgMiwgUFJJX0hJR0gsIDB4MmQsIDB4MmMsIDAsIDAsIGZhbjE2KSwKKwlQUkVBRChmYW40X2lucHV0LCAzLCBQUklfSElHSCwgMHgyZiwgMHgyZSwgMCwgMCwgZmFuMTYpLAorCisJUFdSSVRFKGZhbjFfbWluLCAwLCBQUklfTE9XLCAweDU1LCAweDU0LCAwLCAwLCBmYW4xNiksCisJUFdSSVRFKGZhbjJfbWluLCAxLCBQUklfTE9XLCAweDU3LCAweDU2LCAwLCAwLCBmYW4xNiksCisJUFdSSVRFKGZhbjNfbWluLCAyLCBQUklfTE9XLCAweDU5LCAweDU4LCAwLCAwLCBmYW4xNiksCisJUFdSSVRFKGZhbjRfbWluLCAzLCBQUklfTE9XLCAweDViLCAweDVhLCAwLCAwLCBmYW4xNiksCisKKwlQUkVBRChmYW4xX2FsYXJtLCAwLCBQUklfTE9XLCAweDQyLCAwLCAweDAxLCAwLCBiaXRtYXNrKSwKKwlQUkVBRChmYW4yX2FsYXJtLCAxLCBQUklfTE9XLCAweDQyLCAwLCAweDAxLCAxLCBiaXRtYXNrKSwKKwlQUkVBRChmYW4zX2FsYXJtLCAyLCBQUklfTE9XLCAweDQyLCAwLCAweDAxLCAyLCBiaXRtYXNrKSwKKwlQUkVBRChmYW40X2FsYXJtLCAzLCBQUklfTE9XLCAweDQyLCAwLCAweDAxLCAzLCBiaXRtYXNrKSwKKworCVBSRUFEKHRlbXAxX2lucHV0LCAwLCBQUklfSElHSCwgMHgyNSwgMHgxMCwgMCwgMCwgdGVtcDEwKSwKKwlQUkVBRCh0ZW1wMl9pbnB1dCwgMSwgUFJJX0hJR0gsIDB4MjYsIDB4MTUsIDAsIDAsIHRlbXAxMCksCisJUFJFQUQodGVtcDNfaW5wdXQsIDIsIFBSSV9ISUdILCAweDI3LCAweDE2LCAwLCAwLCB0ZW1wMTApLAorCVBSRUFEKHRlbXA0X2lucHV0LCAzLCBQUklfSElHSCwgMHgzMywgMHgxNywgMCwgMCwgdGVtcDEwKSwKKwlQUkVBRCh0ZW1wNV9pbnB1dCwgNCwgUFJJX0hJR0gsIDB4ZjcsIDB4ZjYsIDAsIDAsIHRlbXAxMCksCisJUFJFQUQodGVtcDZfaW5wdXQsIDUsIFBSSV9ISUdILCAweGY5LCAweGY4LCAwLCAwLCB0ZW1wMTApLAorCVBSRUFEKHRlbXA3X2lucHV0LCA2LCBQUklfSElHSCwgMHhmYiwgMHhmYSwgMCwgMCwgdGVtcDEwKSwKKwlQUkVBRCh0ZW1wOF9pbnB1dCwgNywgUFJJX0hJR0gsIDB4ZmQsIDB4ZmMsIDAsIDAsIHRlbXAxMCksCisKKwlQV1JJVEUodGVtcDFfbWluLCAwLCBQUklfTE9XLCAweDRlLCAwLCAwLCAwLCB0ZW1wOCksCisJUFdSSVRFKHRlbXAyX21pbiwgMSwgUFJJX0xPVywgMHg1MCwgMCwgMCwgMCwgdGVtcDgpLAorCVBXUklURSh0ZW1wM19taW4sIDIsIFBSSV9MT1csIDB4NTIsIDAsIDAsIDAsIHRlbXA4KSwKKwlQV1JJVEUodGVtcDRfbWluLCAzLCBQUklfTE9XLCAweDM0LCAwLCAwLCAwLCB0ZW1wOCksCisKKwlQV1JJVEUodGVtcDFfbWF4LCAwLCBQUklfTE9XLCAweDRmLCAwLCAwLCAwLCB0ZW1wOCksCisJUFdSSVRFKHRlbXAyX21heCwgMSwgUFJJX0xPVywgMHg1MSwgMCwgMCwgMCwgdGVtcDgpLAorCVBXUklURSh0ZW1wM19tYXgsIDIsIFBSSV9MT1csIDB4NTMsIDAsIDAsIDAsIHRlbXA4KSwKKwlQV1JJVEUodGVtcDRfbWF4LCAzLCBQUklfTE9XLCAweDM1LCAwLCAwLCAwLCB0ZW1wOCksCisKKwlQUkVBRCh0ZW1wMV9hbGFybSwgMCwgUFJJX0xPVywgMHg0MSwgMCwgMHgwMSwgNCwgYml0bWFzayksCisJUFJFQUQodGVtcDJfYWxhcm0sIDEsIFBSSV9MT1csIDB4NDEsIDAsIDB4MDEsIDUsIGJpdG1hc2spLAorCVBSRUFEKHRlbXAzX2FsYXJtLCAyLCBQUklfTE9XLCAweDQxLCAwLCAweDAxLCA2LCBiaXRtYXNrKSwKKwlQUkVBRCh0ZW1wNF9hbGFybSwgMywgUFJJX0xPVywgMHg0MywgMCwgMHgwMSwgMCwgYml0bWFzayksCisKKwlQV1JJVEUodGVtcDFfc291cmNlLCAwLCBQUklfTE9XLCAweDAyLCAwLCAweDA3LCA0LCBiaXRtYXNrKSwKKwlQV1JJVEUodGVtcDJfc291cmNlLCAxLCBQUklfTE9XLCAweDAyLCAwLCAweDA3LCAwLCBiaXRtYXNrKSwKKwlQV1JJVEUodGVtcDNfc291cmNlLCAyLCBQUklfTE9XLCAweDAzLCAwLCAweDA3LCA0LCBiaXRtYXNrKSwKKwlQV1JJVEUodGVtcDRfc291cmNlLCAzLCBQUklfTE9XLCAweDAzLCAwLCAweDA3LCAwLCBiaXRtYXNrKSwKKworCVBXUklURSh0ZW1wMV9zbW9vdGhpbmdfZW5hYmxlLCAwLCBQUklfTE9XLCAweDYyLCAwLCAweDAxLCAzLCBiaXRtYXNrKSwKKwlQV1JJVEUodGVtcDJfc21vb3RoaW5nX2VuYWJsZSwgMSwgUFJJX0xPVywgMHg2MywgMCwgMHgwMSwgNywgYml0bWFzayksCisJUFdSSVRFKHRlbXAzX3Ntb290aGluZ19lbmFibGUsIDIsIFBSSV9MT1csIDB4NjQsIDAsIDB4MDEsIDMsIGJpdG1hc2spLAorCVBXUklURSh0ZW1wNF9zbW9vdGhpbmdfZW5hYmxlLCAzLCBQUklfTE9XLCAweDNjLCAwLCAweDAxLCAzLCBiaXRtYXNrKSwKKworCVBXUklURSh0ZW1wMV9zbW9vdGhpbmdfdGltZSwgMCwgUFJJX0xPVywgMHg2MiwgMCwgMHgwNywgMCwgdGVtcF9zdCksCisJUFdSSVRFKHRlbXAyX3Ntb290aGluZ190aW1lLCAxLCBQUklfTE9XLCAweDYzLCAwLCAweDA3LCA0LCB0ZW1wX3N0KSwKKwlQV1JJVEUodGVtcDNfc21vb3RoaW5nX3RpbWUsIDIsIFBSSV9MT1csIDB4NjMsIDAsIDB4MDcsIDAsIHRlbXBfc3QpLAorCVBXUklURSh0ZW1wNF9zbW9vdGhpbmdfdGltZSwgMywgUFJJX0xPVywgMHgzYywgMCwgMHgwNywgMCwgdGVtcF9zdCksCisKKwlQV1JJVEUodGVtcDFfYXV0b19wb2ludDFfdGVtcF9oeXN0LCAwLCBQUklfTE9XLCAweDZkLCAwLCAweDBmLCA0LAorCSAgICAgICBiaXRtYXNrKSwKKwlQV1JJVEUodGVtcDJfYXV0b19wb2ludDFfdGVtcF9oeXN0LCAxLCBQUklfTE9XLCAweDZkLCAwLCAweDBmLCAwLAorCSAgICAgICBiaXRtYXNrKSwKKwlQV1JJVEUodGVtcDNfYXV0b19wb2ludDFfdGVtcF9oeXN0LCAyLCBQUklfTE9XLCAweDZlLCAwLCAweDBmLCA0LAorCSAgICAgICBiaXRtYXNrKSwKKwlQV1JJVEUodGVtcDRfYXV0b19wb2ludDFfdGVtcF9oeXN0LCAzLCBQUklfTE9XLCAweDZlLCAwLCAweDBmLCAwLAorCSAgICAgICBiaXRtYXNrKSwKKworCVBSRUFEKHRlbXAxX2F1dG9fcG9pbnQyX3RlbXBfaHlzdCwgMCwgUFJJX0xPVywgMHg2ZCwgMCwgMHgwZiwgNCwKKwkgICAgICBiaXRtYXNrKSwKKwlQUkVBRCh0ZW1wMl9hdXRvX3BvaW50Ml90ZW1wX2h5c3QsIDEsIFBSSV9MT1csIDB4NmQsIDAsIDB4MGYsIDAsCisJICAgICAgYml0bWFzayksCisJUFJFQUQodGVtcDNfYXV0b19wb2ludDJfdGVtcF9oeXN0LCAyLCBQUklfTE9XLCAweDZlLCAwLCAweDBmLCA0LAorCSAgICAgIGJpdG1hc2spLAorCVBSRUFEKHRlbXA0X2F1dG9fcG9pbnQyX3RlbXBfaHlzdCwgMywgUFJJX0xPVywgMHg2ZSwgMCwgMHgwZiwgMCwKKwkgICAgICBiaXRtYXNrKSwKKworCVBXUklURSh0ZW1wMV9hdXRvX3BvaW50MV90ZW1wLCAwLCBQUklfTE9XLCAweDY3LCAwLCAwLCAwLCB0ZW1wOCksCisJUFdSSVRFKHRlbXAyX2F1dG9fcG9pbnQxX3RlbXAsIDEsIFBSSV9MT1csIDB4NjgsIDAsIDAsIDAsIHRlbXA4KSwKKwlQV1JJVEUodGVtcDNfYXV0b19wb2ludDFfdGVtcCwgMiwgUFJJX0xPVywgMHg2OSwgMCwgMCwgMCwgdGVtcDgpLAorCVBXUklURSh0ZW1wNF9hdXRvX3BvaW50MV90ZW1wLCAzLCBQUklfTE9XLCAweDNiLCAwLCAwLCAwLCB0ZW1wOCksCisKKwlQV1JJVEVNKHRlbXAxX2F1dG9fcG9pbnQyX3RlbXAsIDAsIFBSSV9MT1csIFZBQSgweDVmLCAweDY3KSwgVkFBKDApLAorCQlWQUEoMHgwZiksIFZBQSg0KSwgYXAyX3RlbXApLAorCVBXUklURU0odGVtcDJfYXV0b19wb2ludDJfdGVtcCwgMSwgUFJJX0xPVywgVkFBKDB4NjAsIDB4NjgpLCBWQUEoMCksCisJCVZBQSgweDBmKSwgVkFBKDQpLCBhcDJfdGVtcCksCisJUFdSSVRFTSh0ZW1wM19hdXRvX3BvaW50Ml90ZW1wLCAyLCBQUklfTE9XLCBWQUEoMHg2MSwgMHg2OSksIFZBQSgwKSwKKwkJVkFBKDB4MGYpLCBWQUEoNCksIGFwMl90ZW1wKSwKKwlQV1JJVEVNKHRlbXA0X2F1dG9fcG9pbnQyX3RlbXAsIDMsIFBSSV9MT1csIFZBQSgweDNjLCAweDNiKSwgVkFBKDApLAorCQlWQUEoMHgwZiksIFZBQSg0KSwgYXAyX3RlbXApLAorCisJUFdSSVRFKHRlbXAxX2NyaXQsIDAsIFBSSV9MT1csIDB4NmEsIDAsIDAsIDAsIHRlbXA4KSwKKwlQV1JJVEUodGVtcDJfY3JpdCwgMSwgUFJJX0xPVywgMHg2YiwgMCwgMCwgMCwgdGVtcDgpLAorCVBXUklURSh0ZW1wM19jcml0LCAyLCBQUklfTE9XLCAweDZjLCAwLCAwLCAwLCB0ZW1wOCksCisJUFdSSVRFKHRlbXA0X2NyaXQsIDMsIFBSSV9MT1csIDB4M2QsIDAsIDAsIDAsIHRlbXA4KSwKKworCVBXUklURSh0ZW1wNV9lbmFibGUsIDQsIFBSSV9MT1csIDB4MGUsIDAsIDB4MDEsIDAsIGJpdG1hc2spLAorCVBXUklURSh0ZW1wNl9lbmFibGUsIDUsIFBSSV9MT1csIDB4MGUsIDAsIDB4MDEsIDEsIGJpdG1hc2spLAorCVBXUklURSh0ZW1wN19lbmFibGUsIDYsIFBSSV9MT1csIDB4MGUsIDAsIDB4MDEsIDIsIGJpdG1hc2spLAorCVBXUklURSh0ZW1wOF9lbmFibGUsIDcsIFBSSV9MT1csIDB4MGUsIDAsIDB4MDEsIDMsIGJpdG1hc2spLAorCisJUFdSSVRFKHJlbW90ZTFfb2Zmc2V0LCAwLCBQUklfTE9XLCAweDFjLCAwLCAwLCAwLCB0ZW1wNjIpLAorCVBXUklURShyZW1vdGUyX29mZnNldCwgMSwgUFJJX0xPVywgMHgxZCwgMCwgMCwgMCwgdGVtcDYyKSwKKworCVBXUklURShwd20xLCAwLCBQUklfSElHSCwgMHgzMCwgMCwgMCwgMCwgdTgpLAorCVBXUklURShwd20yLCAxLCBQUklfSElHSCwgMHgzMSwgMCwgMCwgMCwgdTgpLAorCVBXUklURShwd20zLCAyLCBQUklfSElHSCwgMHgzMiwgMCwgMCwgMCwgdTgpLAorCisJUFdSSVRFKHB3bTFfaW52ZXJ0LCAwLCBQUklfTE9XLCAweDVjLCAwLCAweDAxLCA0LCBiaXRtYXNrKSwKKwlQV1JJVEUocHdtMl9pbnZlcnQsIDEsIFBSSV9MT1csIDB4NWQsIDAsIDB4MDEsIDQsIGJpdG1hc2spLAorCVBXUklURShwd20zX2ludmVydCwgMiwgUFJJX0xPVywgMHg1ZSwgMCwgMHgwMSwgNCwgYml0bWFzayksCisKKwlQV1JJVEVNKHB3bTFfZW5hYmxlLCAwLCBQUklfTE9XLCBWQUEoMHg1YywgMHg1YywgMHg2MiksIFZBQSgwLCAwLCAwKSwKKwkJVkFBKDB4MDcsIDB4MDEsIDB4MDEpLCBWQUEoNSwgMywgNSksIHB3bV9lbmFibGUpLAorCVBXUklURU0ocHdtMl9lbmFibGUsIDEsIFBSSV9MT1csIFZBQSgweDVkLCAweDVkLCAweDYyKSwgVkFBKDAsIDAsIDApLAorCQlWQUEoMHgwNywgMHgwMSwgMHgwMSksIFZBQSg1LCAzLCA2KSwgcHdtX2VuYWJsZSksCisJUFdSSVRFTShwd20zX2VuYWJsZSwgMiwgUFJJX0xPVywgVkFBKDB4NWUsIDB4NWUsIDB4NjIpLCBWQUEoMCwgMCwgMCksCisJCVZBQSgweDA3LCAweDAxLCAweDAxKSwgVkFBKDUsIDMsIDcpLCBwd21fZW5hYmxlKSwKKworCVBXUklURU0ocHdtMV9hdXRvX2NoYW5uZWxzLCAwLCBQUklfTE9XLCBWQUEoMHg1YywgMHg1YyksIFZBQSgwLCAwKSwKKwkJVkFBKDB4MDcsIDB4MDEpLCBWQUEoNSwgMyksIHB3bV9hYyksCisJUFdSSVRFTShwd20yX2F1dG9fY2hhbm5lbHMsIDEsIFBSSV9MT1csIFZBQSgweDVkLCAweDVkKSwgVkFBKDAsIDApLAorCQlWQUEoMHgwNywgMHgwMSksIFZBQSg1LCAzKSwgcHdtX2FjKSwKKwlQV1JJVEVNKHB3bTNfYXV0b19jaGFubmVscywgMiwgUFJJX0xPVywgVkFBKDB4NWUsIDB4NWUpLCBWQUEoMCwgMCksCisJCVZBQSgweDA3LCAweDAxKSwgVkFBKDUsIDMpLCBwd21fYWMpLAorCisJUFdSSVRFKHB3bTFfYXV0b19wb2ludDFfcHdtLCAwLCBQUklfTE9XLCAweDY0LCAwLCAwLCAwLCB1OCksCisJUFdSSVRFKHB3bTJfYXV0b19wb2ludDFfcHdtLCAxLCBQUklfTE9XLCAweDY1LCAwLCAwLCAwLCB1OCksCisJUFdSSVRFKHB3bTNfYXV0b19wb2ludDFfcHdtLCAyLCBQUklfTE9XLCAweDY2LCAwLCAwLCAwLCB1OCksCisKKwlQV1JJVEUocHdtMV9hdXRvX3BvaW50Ml9wd20sIDAsIFBSSV9MT1csIDB4MzgsIDAsIDAsIDAsIHU4KSwKKwlQV1JJVEUocHdtMl9hdXRvX3BvaW50Ml9wd20sIDEsIFBSSV9MT1csIDB4MzksIDAsIDAsIDAsIHU4KSwKKwlQV1JJVEUocHdtM19hdXRvX3BvaW50Ml9wd20sIDIsIFBSSV9MT1csIDB4M2EsIDAsIDAsIDAsIHU4KSwKKworCVBXUklURShwd20xX2ZyZXEsIDAsIFBSSV9MT1csIDB4NWYsIDAsIDB4MGYsIDAsIHB3bV9mcmVxKSwKKwlQV1JJVEUocHdtMl9mcmVxLCAxLCBQUklfTE9XLCAweDYwLCAwLCAweDBmLCAwLCBwd21fZnJlcSksCisJUFdSSVRFKHB3bTNfZnJlcSwgMiwgUFJJX0xPVywgMHg2MSwgMCwgMHgwZiwgMCwgcHdtX2ZyZXEpLAorCisJUFJFQUQocHdtMV9hdXRvX3pvbmVfYXNzaWduZWQsIDAsIFBSSV9MT1csIDAsIDAsIDB4MDMsIDIsIGJpdG1hc2spLAorCVBSRUFEKHB3bTJfYXV0b196b25lX2Fzc2lnbmVkLCAxLCBQUklfTE9XLCAwLCAwLCAweDAzLCA0LCBiaXRtYXNrKSwKKwlQUkVBRChwd20zX2F1dG9fem9uZV9hc3NpZ25lZCwgMiwgUFJJX0xPVywgMCwgMCwgMHgwMywgNiwgYml0bWFzayksCisKKwlQV1JJVEUocHdtMV9hdXRvX3NwaW51cF90aW1lLCAwLCBQUklfTE9XLCAweDVjLCAwLCAweDA3LCAwLCBwd21fYXN0KSwKKwlQV1JJVEUocHdtMl9hdXRvX3NwaW51cF90aW1lLCAxLCBQUklfTE9XLCAweDVkLCAwLCAweDA3LCAwLCBwd21fYXN0KSwKKwlQV1JJVEUocHdtM19hdXRvX3NwaW51cF90aW1lLCAyLCBQUklfTE9XLCAweDVlLCAwLCAweDA3LCAwLCBwd21fYXN0KSwKKworCVBXUklURShwZWNpX2VuYWJsZSwgMCwgUFJJX0xPVywgMHg0MCwgMCwgMHgwMSwgNCwgYml0bWFzayksCisJUFdSSVRFKHBlY2lfYXZnLCAwLCBQUklfTE9XLCAweDM2LCAwLCAweDA3LCAwLCBiaXRtYXNrKSwKKwlQV1JJVEUocGVjaV9kb21haW4sIDAsIFBSSV9MT1csIDB4MzYsIDAsIDB4MDEsIDMsIGJpdG1hc2spLAorCVBXUklURShwZWNpX2xlZ2FjeSwgMCwgUFJJX0xPVywgMHgzNiwgMCwgMHgwMSwgNCwgYml0bWFzayksCisJUFdSSVRFKHBlY2lfZGlvZGUsIDAsIFBSSV9MT1csIDB4MGUsIDAsIDB4MDcsIDQsIGJpdG1hc2spLAorCVBXUklURShwZWNpXzRkb21haW4sIDAsIFBSSV9MT1csIDB4MGUsIDAsIDB4MDEsIDQsIGJpdG1hc2spLAorCit9OworCitzdGF0aWMgc3RydWN0IGFzYzc2MjFfZGF0YSAqYXNjNzYyMV91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBhc2M3NjIxX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgaTsKKworLyoKKyAqIFRoZSBhc2M3NjIxIGNoaXBzIGd1YXJhbnRlZSBjb25zaXN0ZW50IHJlYWRzIG9mIG11bHRpLWJ5dGUgdmFsdWVzCisgKiByZWdhcmRsZXNzIG9mIHRoZSBvcmRlciBvZiB0aGUgcmVhZHMuICBObyBzcGVjaWFsIGxvZ2ljIGlzIG5lZWRlZAorICogc28gd2UgY2FuIGp1c3QgcmVhZCB0aGUgcmVnaXN0ZXJzIGluIHdoYXRldmVyICBvcmRlciB0aGV5IGFwcGVhcgorICogaW4gdGhlIGFzYzc2MjFfcGFyYW1zIGFycmF5LgorICovCisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwkvKiBSZWFkIGFsbCB0aGUgaGlnaCBwcmlvcml0eSByZWdpc3RlcnMgKi8KKworCWlmICghZGF0YS0+dmFsaWQgfHwKKwkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X2hpZ2hfcmVhZGluZyArIElOVEVSVkFMX0hJR0gpKSB7CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXNjNzYyMV9yZWdpc3Rlcl9wcmlvcml0aWVzKTsgaSsrKSB7CisJCQlpZiAoYXNjNzYyMV9yZWdpc3Rlcl9wcmlvcml0aWVzW2ldID09IFBSSV9ISUdIKSB7CisJCQkJZGF0YS0+cmVnW2ldID0KKwkJCQkgICAgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgaSkgJiAweGZmOworCQkJfQorCQl9CisJCWRhdGEtPmxhc3RfaGlnaF9yZWFkaW5nID0gamlmZmllczsKKwl9OwkJCS8qIGxhc3RfcmVhZGluZyAqLworCisJLyogUmVhZCBhbGwgdGhlIGxvdyBwcmlvcml0eSByZWdpc3RlcnMuICovCisKKwlpZiAoIWRhdGEtPnZhbGlkIHx8CisJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF9sb3dfcmVhZGluZyArIElOVEVSVkFMX0xPVykpIHsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhc2M3NjIxX3BhcmFtcyk7IGkrKykgeworCQkJaWYgKGFzYzc2MjFfcmVnaXN0ZXJfcHJpb3JpdGllc1tpXSA9PSBQUklfTE9XKSB7CisJCQkJZGF0YS0+cmVnW2ldID0KKwkJCQkgICAgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgaSkgJiAweGZmOworCQkJfQorCQl9CisJCWRhdGEtPmxhc3RfbG93X3JlYWRpbmcgPSBqaWZmaWVzOworCX07CQkJLyogbGFzdF9yZWFkaW5nICovCisKKwlkYXRhLT52YWxpZCA9IDE7CisKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiBkYXRhOworfQorCisvKgorICogU3RhbmRhcmQgZGV0ZWN0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBiZWxvdworICoKKyAqIEhlbHBlciBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBhbiBhZGRyZXNzIGlzIHZhbGlkCisgKiBmb3IgYSBwYXJ0aWN1bGFyIGNoaXAuCisgKi8KKworc3RhdGljIGlubGluZSBpbnQgdmFsaWRfYWRkcmVzc19mb3JfY2hpcChpbnQgY2hpcF90eXBlLCBpbnQgYWRkcmVzcykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGFzYzc2MjFfY2hpcHNbY2hpcF90eXBlXS5hZGRyZXNzZXNbaV0gIT0gSTJDX0NMSUVOVF9FTkQ7CisJICAgICBpKyspIHsKKwkJaWYgKGFzYzc2MjFfY2hpcHNbY2hpcF90eXBlXS5hZGRyZXNzZXNbaV0gPT0gYWRkcmVzcykKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXNjNzYyMV9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCWludCB2YWx1ZTsKKworCS8qIFdhcm4gaWYgcGFydCB3YXMgbm90ICJSRUFEWSIgKi8KKworCXZhbHVlID0gcmVhZF9ieXRlKGNsaWVudCwgMHg0MCk7CisKKwlpZiAodmFsdWUgJiAweDAyKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJIkNsaWVudCAoJWQsMHglMDJ4KSBjb25maWcgaXMgbG9ja2VkLlxuIiwKKwkJCWkyY19hZGFwdGVyX2lkKGNsaWVudC0+YWRhcHRlciksIGNsaWVudC0+YWRkcik7CisJfTsKKwlpZiAoISh2YWx1ZSAmIDB4MDQpKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiQ2xpZW50ICglZCwweCUwMngpIGlzIG5vdCByZWFkeS5cbiIsCisJCQlpMmNfYWRhcHRlcl9pZChjbGllbnQtPmFkYXB0ZXIpLCBjbGllbnQtPmFkZHIpOworCX07CisKKy8qCisgKiBTdGFydCBtb25pdG9yaW5nCisgKgorICogVHJ5IHRvIGNsZWFyIExPQ0ssIFNldCBTVEFSVCwgc2F2ZSBldmVyeXRoaW5nIGVsc2UKKyAqLworCXZhbHVlID0gKHZhbHVlICYgfjB4MDIpIHwgMHgwMTsKKwl3cml0ZV9ieXRlKGNsaWVudCwgMHg0MCwgdmFsdWUgJiAweGZmKTsKKworfQorCitzdGF0aWMgaW50Cithc2M3NjIxX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgYXNjNzYyMV9kYXRhICpkYXRhOworCWludCBpLCBlcnI7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FSU87CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFzYzc2MjFfZGF0YSksIEdGUF9LRVJORUwpOworCWlmIChkYXRhID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7CisJZGF0YS0+dmFsaWQgPSAwOworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCS8qIEluaXRpYWxpemUgdGhlIGFzYzc2MjEgY2hpcCAqLworCWFzYzc2MjFfaW5pdF9jbGllbnQoY2xpZW50KTsKKworCS8qIENyZWF0ZSB0aGUgc3lzZnMgZW50cmllcyAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFzYzc2MjFfcGFyYW1zKTsgaSsrKSB7CisJCWVyciA9CisJCSAgICBkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LAorCQkJCSAgICAgICAmKGFzYzc2MjFfcGFyYW1zW2ldLnNkYS5kZXZfYXR0cikpOworCQlpZiAoZXJyKQorCQkJZ290byBleGl0X3JlbW92ZTsKKwl9CisKKwlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJmNsaWVudC0+ZGV2KTsKKwlpZiAoSVNfRVJSKGRhdGEtPmNsYXNzX2RldikpIHsKKwkJZXJyID0gUFRSX0VSUihkYXRhLT5jbGFzc19kZXYpOworCQlnb3RvIGV4aXRfcmVtb3ZlOworCX0KKworCXJldHVybiAwOworCitleGl0X3JlbW92ZToKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhc2M3NjIxX3BhcmFtcyk7IGkrKykgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmNsaWVudC0+ZGV2LAorCQkJCSAgICYoYXNjNzYyMV9wYXJhbXNbaV0uc2RhLmRldl9hdHRyKSk7CisJfQorCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBhc2M3NjIxX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCit7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gY2xpZW50LT5hZGFwdGVyOworCWludCBjb21wYW55LCB2ZXJzdGVwLCBjaGlwX2luZGV4OworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCWRldiA9ICZjbGllbnQtPmRldjsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlmb3IgKGNoaXBfaW5kZXggPSBGSVJTVF9DSElQOyBjaGlwX2luZGV4IDw9IExBU1RfQ0hJUDsgY2hpcF9pbmRleCsrKSB7CisKKwkJaWYgKCF2YWxpZF9hZGRyZXNzX2Zvcl9jaGlwKGNoaXBfaW5kZXgsIGNsaWVudC0+YWRkcikpCisJCQljb250aW51ZTsKKworCQljb21wYW55ID0gcmVhZF9ieXRlKGNsaWVudCwKKwkJCWFzYzc2MjFfY2hpcHNbY2hpcF9pbmRleF0uY29tcGFueV9yZWcpOworCQl2ZXJzdGVwID0gcmVhZF9ieXRlKGNsaWVudCwKKwkJCWFzYzc2MjFfY2hpcHNbY2hpcF9pbmRleF0udmVyc3RlcF9yZWcpOworCisJCWlmIChjb21wYW55ID09IGFzYzc2MjFfY2hpcHNbY2hpcF9pbmRleF0uY29tcGFueV9pZCAmJgorCQkgICAgdmVyc3RlcCA9PSBhc2M3NjIxX2NoaXBzW2NoaXBfaW5kZXhdLnZlcnN0ZXBfaWQpIHsKKwkJCXN0cmxjcHkoY2xpZW50LT5uYW1lLCBhc2M3NjIxX2NoaXBzW2NoaXBfaW5kZXhdLm5hbWUsCisJCQkJSTJDX05BTUVfU0laRSk7CisJCQlzdHJsY3B5KGluZm8tPnR5cGUsIGFzYzc2MjFfY2hpcHNbY2hpcF9pbmRleF0ubmFtZSwKKwkJCQlJMkNfTkFNRV9TSVpFKTsKKworCQkJZGV2X2luZm8oJmFkYXB0ZXItPmRldiwgIk1hdGNoZWQgJXNcbiIsCisJCQkJIGFzYzc2MjFfY2hpcHNbY2hpcF9pbmRleF0ubmFtZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW50IGFzYzc2MjFfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGFzYzc2MjFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCBpOworCisJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+Y2xhc3NfZGV2KTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFzYzc2MjFfcGFyYW1zKTsgaSsrKSB7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmY2xpZW50LT5kZXYsCisJCQkJICAgJihhc2M3NjIxX3BhcmFtc1tpXS5zZGEuZGV2X2F0dHIpKTsKKwl9CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGFzYzc2MjFfaWRbXSA9IHsKKwl7ImFzYzc2MjEiLCBhc2M3NjIxfSwKKwl7ImFzYzc2MjFhIiwgYXNjNzYyMWF9LAorCXt9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFzYzc2MjFfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYXNjNzYyMV9kcml2ZXIgPSB7CisJLmNsYXNzID0gSTJDX0NMQVNTX0hXTU9OLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImFzYzc2MjEiLAorCX0sCisJLnByb2JlID0gYXNjNzYyMV9wcm9iZSwKKwkucmVtb3ZlID0gYXNjNzYyMV9yZW1vdmUsCisJLmlkX3RhYmxlID0gYXNjNzYyMV9pZCwKKwkuZGV0ZWN0ID0gYXNjNzYyMV9kZXRlY3QsCisJLmFkZHJlc3NfbGlzdCA9IG5vcm1hbF9pMmMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzbV9hc2M3NjIxX2luaXQodm9pZCkKK3sKKwlpbnQgaSwgajsKKy8qCisgKiBDb2xsZWN0IGFsbCB0aGUgcmVnaXN0ZXJzIG5lZWRlZCBpbnRvIGEgc2luZ2xlIGFycmF5LgorICogVGhpcyB3YXksIGlmIGEgcmVnaXN0ZXIgaXNuJ3QgYWN0dWFsbHkgdXNlZCBmb3IgYW55dGhpbmcsCisgKiB3ZSBkb24ndCByZXRyaWV2ZSBpdC4KKyAqLworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXNjNzYyMV9wYXJhbXMpOyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoYXNjNzYyMV9wYXJhbXNbaV0ubXNiKTsgaisrKQorCQkJYXNjNzYyMV9yZWdpc3Rlcl9wcmlvcml0aWVzW2FzYzc2MjFfcGFyYW1zW2ldLm1zYltqXV0gPQorCQkJICAgIGFzYzc2MjFfcGFyYW1zW2ldLnByaW9yaXR5OworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShhc2M3NjIxX3BhcmFtc1tpXS5sc2IpOyBqKyspCisJCQlhc2M3NjIxX3JlZ2lzdGVyX3ByaW9yaXRpZXNbYXNjNzYyMV9wYXJhbXNbaV0ubHNiW2pdXSA9CisJCQkgICAgYXNjNzYyMV9wYXJhbXNbaV0ucHJpb3JpdHk7CisJfQorCXJldHVybiBpMmNfYWRkX2RyaXZlcigmYXNjNzYyMV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc21fYXNjNzYyMV9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJmFzYzc2MjFfZHJpdmVyKTsKK30KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiR2VvcmdlIEpvc2VwaCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBbmRpZ2lsb2cgYVNDNzYyMSBhbmQgYVNDNzYyMWEgZHJpdmVyIik7CisKK21vZHVsZV9pbml0KHNtX2FzYzc2MjFfaW5pdCk7Cittb2R1bGVfZXhpdChzbV9hc2M3NjIxX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9mc2NobWQuYyBiL2RyaXZlcnMvaHdtb24vZnNjaG1kLmMKaW5kZXggZmEwNzI4Mi4uMDYyN2Y3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9mc2NobWQuYworKysgYi9kcml2ZXJzL2h3bW9uL2ZzY2htZC5jCkBAIC0yNjcsNyArMjY3LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7IC8qIG1lbWJlciBvZiB0aGUgd2F0Y2hkb2dfZGF0YV9saXN0ICovCiAJc3RydWN0IGtyZWYga3JlZjsKIAlzdHJ1Y3QgbWlzY2RldmljZSB3YXRjaGRvZ19taXNjZGV2OwotCWludCBraW5kOworCWVudW0gY2hpcHMga2luZDsKIAl1bnNpZ25lZCBsb25nIHdhdGNoZG9nX2lzX29wZW47CiAJY2hhciB3YXRjaGRvZ19leHBlY3RfY2xvc2U7CiAJY2hhciB3YXRjaGRvZ19uYW1lWzEwXTsgLyogbXVzdCBiZSB1bmlxdWUgdG8gYXZvaWQgc3lzZnMgY29uZmxpY3QgKi8KQEAgLTMyNSw4ICszMjUsNyBAQAogCWludCBpbmRleCA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKS0+aW5kZXg7CiAJc3RydWN0IGZzY2htZF9kYXRhICpkYXRhID0gZnNjaG1kX3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAotCS8qIGZzY2hlciAvIGZzY2hyYyAtIDEgYXMgZGF0YS0+a2luZCBpcyBhbiBhcnJheSBpbmRleCwgbm90IGEgY2hpcHMgKi8KLQlpZiAoZGF0YS0+a2luZCA9PSAoZnNjaGVyIC0gMSkgfHwgZGF0YS0+a2luZCA+PSAoZnNjaHJjIC0gMSkpCisJaWYgKGRhdGEtPmtpbmQgPT0gZnNjaGVyIHx8IGRhdGEtPmtpbmQgPj0gZnNjaHJjKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgKGRhdGEtPnZvbHRbaW5kZXhdICogZG1pX3ZyZWYgKgogCQkJZG1pX211bHRbaW5kZXhdKSAvIDI1NSArIGRtaV9vZmZzZXRbaW5kZXhdKTsKIAllbHNlCkBAIC00OTIsNyArNDkxLDcgQEAKIAlpbnQgdmFsID0gZGF0YS0+ZmFuX21pbltpbmRleF07CiAKIAkvKiAwID0gYWxsb3cgdHVybmluZyBvZmYgKGV4Y2VwdCBvbiB0aGUgc3lsKSwgMS0yNTUgPSA1MC0xMDAlICovCi0JaWYgKHZhbCB8fCBkYXRhLT5raW5kID09IGZzY3N5bCAtIDEpCisJaWYgKHZhbCB8fCBkYXRhLT5raW5kID09IGZzY3N5bCkKIAkJdmFsID0gdmFsIC8gMiArIDEyODsKIAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YWwpOwpAQCAtNTA2LDcgKzUwNSw3IEBACiAJdW5zaWduZWQgbG9uZyB2ID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CiAKIAkvKiByZWc6IDAgPSBhbGxvdyB0dXJuaW5nIG9mZiAoZXhjZXB0IG9uIHRoZSBzeWwpLCAxLTI1NSA9IDUwLTEwMCUgKi8KLQlpZiAodiB8fCBkYXRhLT5raW5kID09IGZzY3N5bCAtIDEpIHsKKwlpZiAodiB8fCBkYXRhLT5raW5kID09IGZzY3N5bCkgewogCQl2ID0gU0VOU09SU19MSU1JVCh2LCAxMjgsIDI1NSk7CiAJCXYgPSAodiAtIDEyOCkgKiAyICsgMTsKIAl9CkBAIC0xMDM3LDcgKzEwMzYsNyBAQAogCWVsc2UKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlzdHJsY3B5KGluZm8tPnR5cGUsIGZzY2htZF9pZFtraW5kIC0gMV0ubmFtZSwgSTJDX05BTUVfU0laRSk7CisJc3RybGNweShpbmZvLT50eXBlLCBmc2NobWRfaWRba2luZF0ubmFtZSwgSTJDX05BTUVfU0laRSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwNjUsNiArMTA2NCw3IEBACiAJICAgKHdoZXJlIHRoZSBjbGllbnQgaXMgZm91bmQgdGhyb3VnaCBhIGRhdGEgcHRyIGluc3RlYWQgb2YgdGhlCiAJICAgb3RoZXJ3YXkgYXJvdW5kKSAqLwogCWRhdGEtPmNsaWVudCA9IGNsaWVudDsKKwlkYXRhLT5raW5kID0ga2luZDsKIAogCWlmIChraW5kID09IGZzY3BvcykgewogCQkvKiBUaGUgUG9zZWlkb24gaGFzIGhhcmR3aXJlZCB0ZW1wIGxpbWl0cywgZmlsbCB0aGVzZQpAQCAtMTA4NSw5ICsxMDg1LDYgQEAKIAkJfQogCX0KIAotCS8qIGkyYyBraW5kIGdvZXMgZnJvbSAxLTYsIHdlIHdhbnQgZnJvbSAwLTUgdG8gYWRkcmVzcyBhcnJheXMgKi8KLQlkYXRhLT5raW5kID0ga2luZCAtIDE7Ci0KIAkvKiBSZWFkIGluIHNvbWUgbmV2ZXIgY2hhbmdpbmcgcmVnaXN0ZXJzICovCiAJZGF0YS0+cmV2aXNpb24gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBGU0NITURfUkVHX1JFVklTSU9OKTsKIAlkYXRhLT5nbG9iYWxfY29udHJvbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2c3NjBhLmMgYi9kcml2ZXJzL2h3bW9uL2c3NjBhLmMKaW5kZXggMTljMDFhNDkuLjA5ZWExMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZzc2MGEuYworKysgYi9kcml2ZXJzL2h3bW9uL2c3NjBhLmMKQEAgLTY4LDcgKzY4LDcgQEAKICNkZWZpbmUgUFdNX0ZST01fQ05UKGNudCkJKDB4ZmYtKGNudCkpCiAjZGVmaW5lIFBXTV9UT19DTlQocHdtKQkJKDB4ZmYtKHB3bSkpCiAKLXVuc2lnbmVkIGludCBycG1fZnJvbV9jbnQodTggdmFsLCB1MzIgY2xrLCB1MTYgZGl2KQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcnBtX2Zyb21fY250KHU4IHZhbCwgdTMyIGNsaywgdTE2IGRpdikKIHsKIAlyZXR1cm4gKCh2YWwgPT0gMHgwMCkgPyAwIDogKChjbGsqMzApLyh2YWwqZGl2KSkpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9pdDg3LmMgYi9kcml2ZXJzL2h3bW9uL2l0ODcuYwppbmRleCAwZmZlODRkLi4xMDAyYmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2l0ODcuYworKysgYi9kcml2ZXJzL2h3bW9uL2l0ODcuYwpAQCAtMSw0MCArMSw0MCBAQAogLyoKLSAgICBpdDg3LmMgLSBQYXJ0IG9mIGxtX3NlbnNvcnMsIExpbnV4IGtlcm5lbCBtb2R1bGVzIGZvciBoYXJkd2FyZQotICAgICAgICAgICAgIG1vbml0b3JpbmcuCi0KLSAgICBUaGUgSVQ4NzA1RiBpcyBhbiBMUEMtYmFzZWQgU3VwZXIgSS9PIHBhcnQgdGhhdCBjb250YWlucyBVQVJUcywgYQotICAgIHBhcmFsbGVsIHBvcnQsIGFuIElSIHBvcnQsIGEgTUlESSBwb3J0LCBhIGZsb3BweSBjb250cm9sbGVyLCBldGMuLCBpbgotICAgIGFkZGl0aW9uIHRvIGFuIEVudmlyb25tZW50IENvbnRyb2xsZXIgKEVuaGFuY2VkIEhhcmR3YXJlIE1vbml0b3IgYW5kCi0gICAgRmFuIENvbnRyb2xsZXIpCi0KLSAgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBvbmx5IHRoZSBFbnZpcm9ubWVudCBDb250cm9sbGVyIGluIHRoZSBJVDg3MDVGIGFuZAotICAgIHNpbWlsYXIgcGFydHMuICBUaGUgb3RoZXIgZGV2aWNlcyBhcmUgc3VwcG9ydGVkIGJ5IGRpZmZlcmVudCBkcml2ZXJzLgotCi0gICAgU3VwcG9ydHM6IElUODcwNUYgIFN1cGVyIEkvTyBjaGlwIHcvTFBDIGludGVyZmFjZQotICAgICAgICAgICAgICBJVDg3MTJGICBTdXBlciBJL08gY2hpcCB3L0xQQyBpbnRlcmZhY2UKLSAgICAgICAgICAgICAgSVQ4NzE2RiAgU3VwZXIgSS9PIGNoaXAgdy9MUEMgaW50ZXJmYWNlCi0gICAgICAgICAgICAgIElUODcxOEYgIFN1cGVyIEkvTyBjaGlwIHcvTFBDIGludGVyZmFjZQotICAgICAgICAgICAgICBJVDg3MjBGICBTdXBlciBJL08gY2hpcCB3L0xQQyBpbnRlcmZhY2UKLSAgICAgICAgICAgICAgSVQ4NzI2RiAgU3VwZXIgSS9PIGNoaXAgdy9MUEMgaW50ZXJmYWNlCi0gICAgICAgICAgICAgIFNpczk1MCAgIEEgY2xvbmUgb2YgdGhlIElUODcwNUYKLQotICAgIENvcHlyaWdodCAoQykgMjAwMSBDaHJpcyBHYXV0aHJvbgotICAgIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgotCi0gICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0qLworICogIGl0ODcuYyAtIFBhcnQgb2YgbG1fc2Vuc29ycywgTGludXgga2VybmVsIG1vZHVsZXMgZm9yIGhhcmR3YXJlCisgKiAgICAgICAgICAgbW9uaXRvcmluZy4KKyAqCisgKiAgVGhlIElUODcwNUYgaXMgYW4gTFBDLWJhc2VkIFN1cGVyIEkvTyBwYXJ0IHRoYXQgY29udGFpbnMgVUFSVHMsIGEKKyAqICBwYXJhbGxlbCBwb3J0LCBhbiBJUiBwb3J0LCBhIE1JREkgcG9ydCwgYSBmbG9wcHkgY29udHJvbGxlciwgZXRjLiwgaW4KKyAqICBhZGRpdGlvbiB0byBhbiBFbnZpcm9ubWVudCBDb250cm9sbGVyIChFbmhhbmNlZCBIYXJkd2FyZSBNb25pdG9yIGFuZAorICogIEZhbiBDb250cm9sbGVyKQorICoKKyAqICBUaGlzIGRyaXZlciBzdXBwb3J0cyBvbmx5IHRoZSBFbnZpcm9ubWVudCBDb250cm9sbGVyIGluIHRoZSBJVDg3MDVGIGFuZAorICogIHNpbWlsYXIgcGFydHMuICBUaGUgb3RoZXIgZGV2aWNlcyBhcmUgc3VwcG9ydGVkIGJ5IGRpZmZlcmVudCBkcml2ZXJzLgorICoKKyAqICBTdXBwb3J0czogSVQ4NzA1RiAgU3VwZXIgSS9PIGNoaXAgdy9MUEMgaW50ZXJmYWNlCisgKiAgICAgICAgICAgIElUODcxMkYgIFN1cGVyIEkvTyBjaGlwIHcvTFBDIGludGVyZmFjZQorICogICAgICAgICAgICBJVDg3MTZGICBTdXBlciBJL08gY2hpcCB3L0xQQyBpbnRlcmZhY2UKKyAqICAgICAgICAgICAgSVQ4NzE4RiAgU3VwZXIgSS9PIGNoaXAgdy9MUEMgaW50ZXJmYWNlCisgKiAgICAgICAgICAgIElUODcyMEYgIFN1cGVyIEkvTyBjaGlwIHcvTFBDIGludGVyZmFjZQorICogICAgICAgICAgICBJVDg3MjZGICBTdXBlciBJL08gY2hpcCB3L0xQQyBpbnRlcmZhY2UKKyAqICAgICAgICAgICAgU2lzOTUwICAgQSBjbG9uZSBvZiB0aGUgSVQ4NzA1RgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEgQ2hyaXMgR2F1dGhyb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0xMjgsNiArMTI4LDcgQEAKICNkZWZpbmUgSVQ4N19TSU9fR1BJTzVfUkVHCTB4MjkKICNkZWZpbmUgSVQ4N19TSU9fUElOWDJfUkVHCTB4MmMJLyogUGluIHNlbGVjdGlvbiAqLwogI2RlZmluZSBJVDg3X1NJT19WSURfUkVHCTB4ZmMJLyogVklEIHZhbHVlICovCisjZGVmaW5lIElUODdfU0lPX0JFRVBfUElOX1JFRwkweGY2CS8qIEJlZXAgcGluIG1hcHBpbmcgKi8KIAogLyogVXBkYXRlIGJhdHRlcnkgdm9sdGFnZSBhZnRlciBldmVyeSByZWFkaW5nIGlmIHRydWUgKi8KIHN0YXRpYyBpbnQgdXBkYXRlX3ZiYXQ7CkBAIC0xODcsOSArMTg4LDEzIEBACiAKICNkZWZpbmUgSVQ4N19SRUdfVklOX0VOQUJMRSAgICAweDUwCiAjZGVmaW5lIElUODdfUkVHX1RFTVBfRU5BQkxFICAgMHg1MQorI2RlZmluZSBJVDg3X1JFR19CRUVQX0VOQUJMRSAgIDB4NWMKIAogI2RlZmluZSBJVDg3X1JFR19DSElQSUQgICAgICAgIDB4NTgKIAorI2RlZmluZSBJVDg3X1JFR19BVVRPX1RFTVAobnIsIGkpICgweDYwICsgKG5yKSAqIDggKyAoaSkpCisjZGVmaW5lIElUODdfUkVHX0FVVE9fUFdNKG5yLCBpKSAgKDB4NjUgKyAobnIpICogOCArIChpKSkKKwogI2RlZmluZSBJTl9UT19SRUcodmFsKSAgKFNFTlNPUlNfTElNSVQoKCgodmFsKSArIDgpLzE2KSwwLDI1NSkpCiAjZGVmaW5lIElOX0ZST01fUkVHKHZhbCkgKCh2YWwpICogMTYpCiAKQEAgLTI0Niw2ICsyNTEsNyBAQAogCS8qIFZhbHVlcyByZWFkIGZyb20gU3VwZXItSS9PIGNvbmZpZyBzcGFjZSAqLwogCXU4IHJldmlzaW9uOwogCXU4IHZpZF92YWx1ZTsKKwl1OCBiZWVwX3BpbjsKIAkvKiBGZWF0dXJlcyBza2lwcGVkIGJhc2VkIG9uIGNvbmZpZyBvciBETUkgKi8KIAl1OCBza2lwX3ZpZDsKIAl1OCBza2lwX2ZhbjsKQEAgLTI3OSw5ICsyODUsMjEgQEAKIAl1OCB2aWQ7CQkJLyogUmVnaXN0ZXIgZW5jb2RpbmcsIGNvbWJpbmVkICovCiAJdTggdnJtOwogCXUzMiBhbGFybXM7CQkvKiBSZWdpc3RlciBlbmNvZGluZywgY29tYmluZWQgKi8KKwl1OCBiZWVwczsJCS8qIFJlZ2lzdGVyIGVuY29kaW5nICovCiAJdTggZmFuX21haW5fY3RybDsJLyogUmVnaXN0ZXIgdmFsdWUgKi8KIAl1OCBmYW5fY3RsOwkJLyogUmVnaXN0ZXIgdmFsdWUgKi8KLQl1OCBtYW51YWxfcHdtX2N0bFszXTsgICAvKiBtYW51YWwgUFdNIHZhbHVlIHNldCBieSB1c2VyICovCisKKwkvKiBUaGUgZm9sbG93aW5nIDMgYXJyYXlzIGNvcnJlc3BvbmQgdG8gdGhlIHNhbWUgcmVnaXN0ZXJzLiBUaGUKKwkgKiBtZWFuaW5nIG9mIGJpdHMgNi0wIGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mIGJpdCA3LCBhbmQgd2Ugd2FudAorCSAqIHRvIHByZXNlcnZlIHNldHRpbmdzIG9uIG1vZGUgY2hhbmdlcywgc28gd2UgaGF2ZSB0byB0cmFjayBhbGwKKwkgKiB2YWx1ZXMgc2VwYXJhdGVseS4gKi8KKwl1OCBwd21fY3RybFszXTsJCS8qIFJlZ2lzdGVyIHZhbHVlICovCisJdTggcHdtX2R1dHlbM107CQkvKiBNYW51YWwgUFdNIHZhbHVlIHNldCBieSB1c2VyIChiaXQgNi0wKSAqLworCXU4IHB3bV90ZW1wX21hcFszXTsJLyogUFdNIHRvIHRlbXAuIGNoYW4uIG1hcHBpbmcgKGJpdHMgMS0wKSAqLworCisJLyogQXV0b21hdGljIGZhbiBzcGVlZCBjb250cm9sIHJlZ2lzdGVycyAqLworCXU4IGF1dG9fcHdtWzNdWzRdOwkvKiBbbnJdWzNdIGlzIGhhcmQtY29kZWQgKi8KKwlzOCBhdXRvX3RlbXBbM11bNV07CS8qIFtucl1bMF0gaXMgcG9pbnQxX3RlbXBfaHlzdCAqLwogfTsKIAogc3RhdGljIGlubGluZSBpbnQgaGFzXzE2Yml0X2ZhbnMoY29uc3Qgc3RydWN0IGl0ODdfZGF0YSAqZGF0YSkKQEAgLTI5Niw2ICszMTQsMTUgQEAKIAkgICAgfHwgZGF0YS0+dHlwZSA9PSBpdDg3MjA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGhhc19vbGRfYXV0b3B3bShjb25zdCBzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhKQoreworCS8qIFRoZSBvbGQgYXV0b21hdGljIGZhbiBzcGVlZCBjb250cm9sIGludGVyZmFjZSBpcyBpbXBsZW1lbnRlZAorCSAgIGJ5IElUODcwNUYgY2hpcHMgdXAgdG8gcmV2aXNpb24gRiBhbmQgSVQ4NzEyRiBjaGlwcyB1cCB0bworCSAgIHJldmlzaW9uIEcuICovCisJcmV0dXJuIChkYXRhLT50eXBlID09IGl0ODcgJiYgZGF0YS0+cmV2aXNpb24gPCAweDAzKQorCSAgICB8fCAoZGF0YS0+dHlwZSA9PSBpdDg3MTIgJiYgZGF0YS0+cmV2aXNpb24gPCAweDA4KTsKK30KKwogc3RhdGljIGludCBpdDg3X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogc3RhdGljIGludCBfX2RldmV4aXQgaXQ4N19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiAKQEAgLTM1Miw3ICszNzksMTAgQEAKIAlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CiAKIAlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSA8IDApCisJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPmluX21pbltucl0gPSBJTl9UT19SRUcodmFsKTsKQEAgLTM2OCw3ICszOTgsMTAgQEAKIAlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CiAKIAlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSA8IDApCisJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPmluX21heFtucl0gPSBJTl9UT19SRUcodmFsKTsKQEAgLTQ0MSw3ICs0NzQsMTAgQEAKIAlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CiAKIAlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaW50IHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisJbG9uZyB2YWw7CisKKwlpZiAoc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKSA8IDApCisJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPnRlbXBfaGlnaFtucl0gPSBURU1QX1RPX1JFRyh2YWwpOwpAQCAtNDU2LDcgKzQ5MiwxMCBAQAogCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKIAogCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKKwlsb25nIHZhbDsKKworCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+dGVtcF9sb3dbbnJdID0gVEVNUF9UT19SRUcodmFsKTsKQEAgLTQ4Myw4ICs1MjIsOSBAQAogCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKIAogCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBpdDg3X3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQl1OCByZWcgPSBkYXRhLT5zZW5zb3I7IC8qIEluIGNhc2UgdGhlIHZhbHVlIGlzIHVwZGF0ZWQgd2hpbGUgd2UgdXNlIGl0ICovCi0JCisJdTggcmVnID0gZGF0YS0+c2Vuc29yOwkJLyogSW4gY2FzZSB0aGUgdmFsdWUgaXMgdXBkYXRlZCB3aGlsZQorCQkJCQkgICB3ZSB1c2UgaXQgKi8KKwogCWlmIChyZWcgJiAoMSA8PCBucikpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjNcbiIpOyAgLyogdGhlcm1hbCBkaW9kZSAqLwogCWlmIChyZWcgJiAoOCA8PCBucikpCkBAIC00OTgsNyArNTM4LDEwIEBACiAJaW50IG5yID0gc2Vuc29yX2F0dHItPmluZGV4OwogCiAJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWludCB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCWxvbmcgdmFsOworCisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnZhbCkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIApAQCAtNTExLDkgKzU1NCw5IEBACiAJfQogCS8qIDMgPSB0aGVybWFsIGRpb2RlOyA0ID0gdGhlcm1pc3RvcjsgMCA9IGRpc2FibGVkICovCiAJaWYgKHZhbCA9PSAzKQotCSAgICBkYXRhLT5zZW5zb3IgfD0gMSA8PCBucjsKKwkJZGF0YS0+c2Vuc29yIHw9IDEgPDwgbnI7CiAJZWxzZSBpZiAodmFsID09IDQpCi0JICAgIGRhdGEtPnNlbnNvciB8PSA4IDw8IG5yOworCQlkYXRhLT5zZW5zb3IgfD0gOCA8PCBucjsKIAllbHNlIGlmICh2YWwgIT0gMCkgewogCQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01MzEsNiArNTc0LDE5IEBACiBzaG93X3NlbnNvcl9vZmZzZXQoMyk7CiAKIC8qIDMgRmFucyAqLworCitzdGF0aWMgaW50IHB3bV9tb2RlKGNvbnN0IHN0cnVjdCBpdDg3X2RhdGEgKmRhdGEsIGludCBucikKK3sKKwlpbnQgY3RybCA9IGRhdGEtPmZhbl9tYWluX2N0cmwgJiAoMSA8PCBucik7CisKKwlpZiAoY3RybCA9PSAwKQkJCQkJLyogRnVsbCBzcGVlZCAqLworCQlyZXR1cm4gMDsKKwlpZiAoZGF0YS0+cHdtX2N0cmxbbnJdICYgMHg4MCkJCQkvKiBBdXRvbWF0aWMgbW9kZSAqLworCQlyZXR1cm4gMjsKKwllbHNlCQkJCQkJLyogTWFudWFsIG1vZGUgKi8KKwkJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBzc2l6ZV90IHNob3dfZmFuKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCWNoYXIgKmJ1ZikKIHsKQEAgLTUzOCw3ICs1OTQsNyBAQAogCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKIAogCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBpdDg3X3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsIiVkXG4iLCBGQU5fRlJPTV9SRUcoZGF0YS0+ZmFuW25yXSwgCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIEZBTl9GUk9NX1JFRyhkYXRhLT5mYW5bbnJdLAogCQkJCURJVl9GUk9NX1JFRyhkYXRhLT5mYW5fZGl2W25yXSkpKTsKIH0KIHN0YXRpYyBzc2l6ZV90IHNob3dfZmFuX21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtNTQ4LDggKzYwNCw4IEBACiAJaW50IG5yID0gc2Vuc29yX2F0dHItPmluZGV4OwogCiAJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IGl0ODdfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwiJWRcbiIsCi0JCUZBTl9GUk9NX1JFRyhkYXRhLT5mYW5fbWluW25yXSwgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbbnJdKSkpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBGQU5fRlJPTV9SRUcoZGF0YS0+ZmFuX21pbltucl0sCisJCQkJRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbbnJdKSkpOwogfQogc3RhdGljIHNzaXplX3Qgc2hvd19mYW5fZGl2KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCWNoYXIgKmJ1ZikKQEAgLTU2MCwxNCArNjE2LDE0IEBACiAJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IGl0ODdfdXBkYXRlX2RldmljZShkZXYpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBESVZfRlJPTV9SRUcoZGF0YS0+ZmFuX2Rpdltucl0pKTsKIH0KLXN0YXRpYyBzc2l6ZV90IHNob3dfcHdtX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQljaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X3B3bV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2Vuc29yX2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CiAJaW50IG5yID0gc2Vuc29yX2F0dHItPmluZGV4OwogCiAJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IGl0ODdfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwiJWRcbiIsIChkYXRhLT5mYW5fbWFpbl9jdHJsICYgKDEgPDwgbnIpKSA/IDEgOiAwKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcHdtX21vZGUoZGF0YSwgbnIpKTsKIH0KIHN0YXRpYyBzc2l6ZV90IHNob3dfcHdtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCWNoYXIgKmJ1ZikKQEAgLTU3Niw3ICs2MzIsNyBAQAogCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKIAogCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBpdDg3X3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsIiVkXG4iLCBkYXRhLT5tYW51YWxfcHdtX2N0bFtucl0pOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBQV01fRlJPTV9SRUcoZGF0YS0+cHdtX2R1dHlbbnJdKSk7CiB9CiBzdGF0aWMgc3NpemVfdCBzaG93X3B3bV9mcmVxKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCWNoYXIgKmJ1ZikKQEAgLTU5MywxNSArNjQ5LDI0IEBACiAJaW50IG5yID0gc2Vuc29yX2F0dHItPmluZGV4OwogCiAJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWludCB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCWxvbmcgdmFsOwogCXU4IHJlZzsKIAorCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmVnID0gaXQ4N19yZWFkX3ZhbHVlKGRhdGEsIElUODdfUkVHX0ZBTl9ESVYpOwogCXN3aXRjaCAobnIpIHsKLQljYXNlIDA6IGRhdGEtPmZhbl9kaXZbbnJdID0gcmVnICYgMHgwNzsgYnJlYWs7Ci0JY2FzZSAxOiBkYXRhLT5mYW5fZGl2W25yXSA9IChyZWcgPj4gMykgJiAweDA3OyBicmVhazsKLQljYXNlIDI6IGRhdGEtPmZhbl9kaXZbbnJdID0gKHJlZyAmIDB4NDApID8gMyA6IDE7IGJyZWFrOworCWNhc2UgMDoKKwkJZGF0YS0+ZmFuX2Rpdltucl0gPSByZWcgJiAweDA3OworCQlicmVhazsKKwljYXNlIDE6CisJCWRhdGEtPmZhbl9kaXZbbnJdID0gKHJlZyA+PiAzKSAmIDB4MDc7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZGF0YS0+ZmFuX2Rpdltucl0gPSAocmVnICYgMHg0MCkgPyAzIDogMTsKKwkJYnJlYWs7CiAJfQogCiAJZGF0YS0+ZmFuX21pbltucl0gPSBGQU5fVE9fUkVHKHZhbCwgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbbnJdKSk7CkBAIC02MTYsMTAgKzY4MSwxMyBAQAogCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKIAogCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQl1bnNpZ25lZCBsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCXVuc2lnbmVkIGxvbmcgdmFsOwogCWludCBtaW47CiAJdTggb2xkOwogCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJb2xkID0gaXQ4N19yZWFkX3ZhbHVlKGRhdGEsIElUODdfUkVHX0ZBTl9ESVYpOwogCkBAIC02NTEsNiArNzE5LDMyIEBACiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQorCisvKiBSZXR1cm5zIDAgaWYgT0ssIC1FSU5WQUwgb3RoZXJ3aXNlICovCitzdGF0aWMgaW50IGNoZWNrX3RyaXBfcG9pbnRzKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG5yKQoreworCWNvbnN0IHN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgaSwgZXJyID0gMDsKKworCWlmIChoYXNfb2xkX2F1dG9wd20oZGF0YSkpIHsKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkJaWYgKGRhdGEtPmF1dG9fdGVtcFtucl1baV0gPiBkYXRhLT5hdXRvX3RlbXBbbnJdW2kgKyAxXSkKKwkJCQllcnIgPSAtRUlOVkFMOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCWlmIChkYXRhLT5hdXRvX3B3bVtucl1baV0gPiBkYXRhLT5hdXRvX3B3bVtucl1baSArIDFdKQorCQkJCWVyciA9IC1FSU5WQUw7CisJCX0KKwl9CisKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoZGV2LCAiSW5jb25zaXN0ZW50IHRyaXAgcG9pbnRzLCBub3Qgc3dpdGNoaW5nIHRvICIKKwkJCSJhdXRvbWF0aWMgbW9kZVxuIik7CisJCWRldl9lcnIoZGV2LCAiQWRqdXN0IHRoZSB0cmlwIHBvaW50cyBhbmQgdHJ5IGFnYWluXG4iKTsKKwl9CisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIHNzaXplX3Qgc2V0X3B3bV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CkBAIC02NTgsNyArNzUyLDE2IEBACiAJaW50IG5yID0gc2Vuc29yX2F0dHItPmluZGV4OwogCiAJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWludCB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCWxvbmcgdmFsOworCisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnZhbCkgPCAwIHx8IHZhbCA8IDAgfHwgdmFsID4gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBDaGVjayB0cmlwIHBvaW50cyBiZWZvcmUgc3dpdGNoaW5nIHRvIGF1dG9tYXRpYyBtb2RlICovCisJaWYgKHZhbCA9PSAyKSB7CisJCWlmIChjaGVja190cmlwX3BvaW50cyhkZXYsIG5yKSA8IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKQEAgLTY2OSwxNiArNzcyLDE4IEBACiAJCWl0ODdfd3JpdGVfdmFsdWUoZGF0YSwgSVQ4N19SRUdfRkFOX0NUTCwgdG1wIHwgKDEgPDwgbnIpKTsKIAkJLyogc2V0IG9uL29mZiBtb2RlICovCiAJCWRhdGEtPmZhbl9tYWluX2N0cmwgJj0gfigxIDw8IG5yKTsKLQkJaXQ4N193cml0ZV92YWx1ZShkYXRhLCBJVDg3X1JFR19GQU5fTUFJTl9DVFJMLCBkYXRhLT5mYW5fbWFpbl9jdHJsKTsKLQl9IGVsc2UgaWYgKHZhbCA9PSAxKSB7CisJCWl0ODdfd3JpdGVfdmFsdWUoZGF0YSwgSVQ4N19SRUdfRkFOX01BSU5fQ1RSTCwKKwkJCQkgZGF0YS0+ZmFuX21haW5fY3RybCk7CisJfSBlbHNlIHsKKwkJaWYgKHZhbCA9PSAxKQkJCQkvKiBNYW51YWwgbW9kZSAqLworCQkJZGF0YS0+cHdtX2N0cmxbbnJdID0gZGF0YS0+cHdtX2R1dHlbbnJdOworCQllbHNlCQkJCQkvKiBBdXRvbWF0aWMgbW9kZSAqLworCQkJZGF0YS0+cHdtX2N0cmxbbnJdID0gMHg4MCB8IGRhdGEtPnB3bV90ZW1wX21hcFtucl07CisJCWl0ODdfd3JpdGVfdmFsdWUoZGF0YSwgSVQ4N19SRUdfUFdNKG5yKSwgZGF0YS0+cHdtX2N0cmxbbnJdKTsKIAkJLyogc2V0IFNtYXJ0R3VhcmRpYW4gbW9kZSAqLwogCQlkYXRhLT5mYW5fbWFpbl9jdHJsIHw9ICgxIDw8IG5yKTsKLQkJaXQ4N193cml0ZV92YWx1ZShkYXRhLCBJVDg3X1JFR19GQU5fTUFJTl9DVFJMLCBkYXRhLT5mYW5fbWFpbl9jdHJsKTsKLQkJLyogc2V0IHNhdmVkIHB3bSB2YWx1ZSwgY2xlYXIgRkFOX0NUTFggUFdNIG1vZGUgYml0ICovCi0JCWl0ODdfd3JpdGVfdmFsdWUoZGF0YSwgSVQ4N19SRUdfUFdNKG5yKSwgUFdNX1RPX1JFRyhkYXRhLT5tYW51YWxfcHdtX2N0bFtucl0pKTsKLQl9IGVsc2UgewotCQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWl0ODdfd3JpdGVfdmFsdWUoZGF0YSwgSVQ4N19SRUdfRkFOX01BSU5fQ1RSTCwKKwkJCQkgZGF0YS0+ZmFuX21haW5fY3RybCk7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CkBAIC02OTEsMTUgKzc5NiwxOSBAQAogCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKIAogCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKKwlsb25nIHZhbDsKIAotCWlmICh2YWwgPCAwIHx8IHZhbCA+IDI1NSkKKwlpZiAoc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKSA8IDAgfHwgdmFsIDwgMCB8fCB2YWwgPiAyNTUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwotCWRhdGEtPm1hbnVhbF9wd21fY3RsW25yXSA9IHZhbDsKLQlpZiAoZGF0YS0+ZmFuX21haW5fY3RybCAmICgxIDw8IG5yKSkKLQkJaXQ4N193cml0ZV92YWx1ZShkYXRhLCBJVDg3X1JFR19QV00obnIpLCBQV01fVE9fUkVHKGRhdGEtPm1hbnVhbF9wd21fY3RsW25yXSkpOworCWRhdGEtPnB3bV9kdXR5W25yXSA9IFBXTV9UT19SRUcodmFsKTsKKwkvKiBJZiB3ZSBhcmUgaW4gbWFudWFsIG1vZGUsIHdyaXRlIHRoZSBkdXR5IGN5Y2xlIGltbWVkaWF0ZWx5OworCSAqIG90aGVyd2lzZSwganVzdCBzdG9yZSBpdCBmb3IgbGF0ZXIgdXNlLiAqLworCWlmICghKGRhdGEtPnB3bV9jdHJsW25yXSAmIDB4ODApKSB7CisJCWRhdGEtPnB3bV9jdHJsW25yXSA9IGRhdGEtPnB3bV9kdXR5W25yXTsKKwkJaXQ4N193cml0ZV92YWx1ZShkYXRhLCBJVDg3X1JFR19QV00obnIpLCBkYXRhLT5wd21fY3RybFtucl0pOworCX0KIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC03MDcsOSArODE2LDEyIEBACiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKIAlpbnQgaTsKIAorCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCiAJLyogU2VhcmNoIGZvciB0aGUgbmVhcmVzdCBhdmFpbGFibGUgZnJlcXVlbmN5ICovCiAJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgewogCQlpZiAodmFsID4gKHB3bV9mcmVxW2ldICsgcHdtX2ZyZXFbaSsxXSkgLyAyKQpAQCAtNzI0LDYgKzgzNiwxMzIgQEAKIAogCXJldHVybiBjb3VudDsKIH0KK3N0YXRpYyBzc2l6ZV90IHNob3dfcHdtX3RlbXBfbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNlbnNvcl9hdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOworCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKKworCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBpdDg3X3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlpbnQgbWFwOworCisJaWYgKGRhdGEtPnB3bV90ZW1wX21hcFtucl0gPCAzKQorCQltYXAgPSAxIDw8IGRhdGEtPnB3bV90ZW1wX21hcFtucl07CisJZWxzZQorCQltYXAgPSAwOwkJCS8qIFNob3VsZCBuZXZlciBoYXBwZW4gKi8KKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbWFwKTsKK30KK3N0YXRpYyBzc2l6ZV90IHNldF9wd21fdGVtcF9tYXAoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisKKwlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJbG9uZyB2YWw7CisJdTggcmVnOworCisJLyogVGhpcyBjaGVjayBjYW4gZ28gYXdheSBpZiB3ZSBldmVyIHN1cHBvcnQgYXV0b21hdGljIGZhbiBzcGVlZAorCSAgIGNvbnRyb2wgb24gbmV3ZXIgY2hpcHMuICovCisJaWYgKCFoYXNfb2xkX2F1dG9wd20oZGF0YSkpIHsKKwkJZGV2X25vdGljZShkZXYsICJNYXBwaW5nIGNoYW5nZSBkaXNhYmxlZCBmb3Igc2FmZXR5IHJlYXNvbnNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoICh2YWwpIHsKKwljYXNlICgxIDw8IDApOgorCQlyZWcgPSAweDAwOworCQlicmVhazsKKwljYXNlICgxIDw8IDEpOgorCQlyZWcgPSAweDAxOworCQlicmVhazsKKwljYXNlICgxIDw8IDIpOgorCQlyZWcgPSAweDAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJZGF0YS0+cHdtX3RlbXBfbWFwW25yXSA9IHJlZzsKKwkvKiBJZiB3ZSBhcmUgaW4gYXV0b21hdGljIG1vZGUsIHdyaXRlIHRoZSB0ZW1wIG1hcHBpbmcgaW1tZWRpYXRlbHk7CisJICogb3RoZXJ3aXNlLCBqdXN0IHN0b3JlIGl0IGZvciBsYXRlciB1c2UuICovCisJaWYgKGRhdGEtPnB3bV9jdHJsW25yXSAmIDB4ODApIHsKKwkJZGF0YS0+cHdtX2N0cmxbbnJdID0gMHg4MCB8IGRhdGEtPnB3bV90ZW1wX21hcFtucl07CisJCWl0ODdfd3JpdGVfdmFsdWUoZGF0YSwgSVQ4N19SRUdfUFdNKG5yKSwgZGF0YS0+cHdtX2N0cmxbbnJdKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2F1dG9fcHdtKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gaXQ4N191cGRhdGVfZGV2aWNlKGRldik7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKnNlbnNvcl9hdHRyID0KKwkJCXRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCWludCBuciA9IHNlbnNvcl9hdHRyLT5ucjsKKwlpbnQgcG9pbnQgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgUFdNX0ZST01fUkVHKGRhdGEtPmF1dG9fcHdtW25yXVtwb2ludF0pKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X2F1dG9fcHdtKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2Vuc29yX2F0dHIgPQorCQkJdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJaW50IG5yID0gc2Vuc29yX2F0dHItPm5yOworCWludCBwb2ludCA9IHNlbnNvcl9hdHRyLT5pbmRleDsKKwlsb25nIHZhbDsKKworCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpIDwgMCB8fCB2YWwgPCAwIHx8IHZhbCA+IDI1NSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJZGF0YS0+YXV0b19wd21bbnJdW3BvaW50XSA9IFBXTV9UT19SRUcodmFsKTsKKwlpdDg3X3dyaXRlX3ZhbHVlKGRhdGEsIElUODdfUkVHX0FVVE9fUFdNKG5yLCBwb2ludCksCisJCQkgZGF0YS0+YXV0b19wd21bbnJdW3BvaW50XSk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2F1dG9fdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IGl0ODdfdXBkYXRlX2RldmljZShkZXYpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzZW5zb3JfYXR0ciA9CisJCQl0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+bnI7CisJaW50IHBvaW50ID0gc2Vuc29yX2F0dHItPmluZGV4OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVBfRlJPTV9SRUcoZGF0YS0+YXV0b190ZW1wW25yXVtwb2ludF0pKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X2F1dG9fdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKnNlbnNvcl9hdHRyID0KKwkJCXRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCWludCBuciA9IHNlbnNvcl9hdHRyLT5ucjsKKwlpbnQgcG9pbnQgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisJbG9uZyB2YWw7CisKKwlpZiAoc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKSA8IDAgfHwgdmFsIDwgLTEyODAwMCB8fCB2YWwgPiAxMjcwMDApCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPmF1dG9fdGVtcFtucl1bcG9pbnRdID0gVEVNUF9UT19SRUcodmFsKTsKKwlpdDg3X3dyaXRlX3ZhbHVlKGRhdGEsIElUODdfUkVHX0FVVE9fVEVNUChuciwgcG9pbnQpLAorCQkJIGRhdGEtPmF1dG9fdGVtcFtucl1bcG9pbnRdKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CiAKICNkZWZpbmUgc2hvd19mYW5fb2Zmc2V0KG9mZnNldCkJCQkJCVwKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuIyNvZmZzZXQjI19pbnB1dCwgU19JUlVHTywJCVwKQEAgLTc0NCw3ICs5ODIsMzYgQEAKIAkJc2hvd19wd20sIHNldF9wd20sIG9mZnNldCAtIDEpOwkJCQlcCiBzdGF0aWMgREVWSUNFX0FUVFIocHdtIyNvZmZzZXQjI19mcmVxLAkJCQkJXAogCQkob2Zmc2V0ID09IDEgPyBTX0lSVUdPIHwgU19JV1VTUiA6IFNfSVJVR08pLAkJXAotCQlzaG93X3B3bV9mcmVxLCAob2Zmc2V0ID09IDEgPyBzZXRfcHdtX2ZyZXEgOiBOVUxMKSk7CisJCXNob3dfcHdtX2ZyZXEsIChvZmZzZXQgPT0gMSA/IHNldF9wd21fZnJlcSA6IE5VTEwpKTsJXAorc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20jI29mZnNldCMjX2F1dG9fY2hhbm5lbHNfdGVtcCwJCVwKKwkJU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfcHdtX3RlbXBfbWFwLCBzZXRfcHdtX3RlbXBfbWFwLAlcCisJCW9mZnNldCAtIDEpOwkJCQkJCVwKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20jI29mZnNldCMjX2F1dG9fcG9pbnQxX3B3bSwJCVwKKwkJU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYXV0b19wd20sIHNldF9hdXRvX3B3bSwJCVwKKwkJb2Zmc2V0IC0gMSwgMCk7CQkJCQkJXAorc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bSMjb2Zmc2V0IyNfYXV0b19wb2ludDJfcHdtLAkJXAorCQlTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19hdXRvX3B3bSwgc2V0X2F1dG9fcHdtLAkJXAorCQlvZmZzZXQgLSAxLCAxKTsJCQkJCQlcCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtIyNvZmZzZXQjI19hdXRvX3BvaW50M19wd20sCQlcCisJCVNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2F1dG9fcHdtLCBzZXRfYXV0b19wd20sCQlcCisJCW9mZnNldCAtIDEsIDIpOwkJCQkJCVwKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20jI29mZnNldCMjX2F1dG9fcG9pbnQ0X3B3bSwJCVwKKwkJU19JUlVHTywgc2hvd19hdXRvX3B3bSwgTlVMTCwgb2Zmc2V0IC0gMSwgMyk7CQlcCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtIyNvZmZzZXQjI19hdXRvX3BvaW50MV90ZW1wLAkJXAorCQlTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19hdXRvX3RlbXAsIHNldF9hdXRvX3RlbXAsCVwKKwkJb2Zmc2V0IC0gMSwgMSk7CQkJCQkJXAorc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bSMjb2Zmc2V0IyNfYXV0b19wb2ludDFfdGVtcF9oeXN0LAlcCisJCVNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2F1dG9fdGVtcCwgc2V0X2F1dG9fdGVtcCwJXAorCQlvZmZzZXQgLSAxLCAwKTsJCQkJCQlcCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtIyNvZmZzZXQjI19hdXRvX3BvaW50Ml90ZW1wLAkJXAorCQlTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19hdXRvX3RlbXAsIHNldF9hdXRvX3RlbXAsCVwKKwkJb2Zmc2V0IC0gMSwgMik7CQkJCQkJXAorc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bSMjb2Zmc2V0IyNfYXV0b19wb2ludDNfdGVtcCwJCVwKKwkJU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYXV0b190ZW1wLCBzZXRfYXV0b190ZW1wLAlcCisJCW9mZnNldCAtIDEsIDMpOwkJCQkJCVwKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20jI29mZnNldCMjX2F1dG9fcG9pbnQ0X3RlbXAsCQlcCisJCVNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2F1dG9fdGVtcCwgc2V0X2F1dG9fdGVtcCwJXAorCQlvZmZzZXQgLSAxLCA0KTsKIAogc2hvd19wd21fb2Zmc2V0KDEpOwogc2hvd19wd21fb2Zmc2V0KDIpOwpAQCAtNzc1LDcgKzEwNDIsMTAgQEAKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNlbnNvcl9hdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOwogCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKIAlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaW50IHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisJbG9uZyB2YWw7CisKKwlpZiAoc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKSA8IDApCisJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPmZhbl9taW5bbnJdID0gRkFOMTZfVE9fUkVHKHZhbCk7CkBAIC04MDUsNyArMTA3NSw4IEBACiBzaG93X2ZhbjE2X29mZnNldCg1KTsKIAogLyogQWxhcm1zICovCi1zdGF0aWMgc3NpemVfdCBzaG93X2FsYXJtcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2FsYXJtcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljaGFyICpidWYpCiB7CiAJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IGl0ODdfdXBkYXRlX2RldmljZShkZXYpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBkYXRhLT5hbGFybXMpOwpAQCAtODM2LDI3ICsxMTA3LDc4IEBACiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAxNyk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAzX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAxOCk7CiAKLXN0YXRpYyBzc2l6ZV90Ci1zaG93X3ZybV9yZWcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19iZWVwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZikKK3sKKwlpbnQgYml0bnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0ciktPmluZGV4OworCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBpdDg3X3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgKGRhdGEtPmJlZXBzID4+IGJpdG5yKSAmIDEpOworfQorc3RhdGljIHNzaXplX3Qgc2V0X2JlZXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJaW50IGJpdG5yID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpLT5pbmRleDsKKwlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJbG9uZyB2YWw7CisKKwlpZiAoc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKSA8IDAKKwkgfHwgKHZhbCAhPSAwICYmIHZhbCAhPSAxKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJZGF0YS0+YmVlcHMgPSBpdDg3X3JlYWRfdmFsdWUoZGF0YSwgSVQ4N19SRUdfQkVFUF9FTkFCTEUpOworCWlmICh2YWwpCisJCWRhdGEtPmJlZXBzIHw9ICgxIDw8IGJpdG5yKTsKKwllbHNlCisJCWRhdGEtPmJlZXBzICY9IH4oMSA8PCBiaXRucik7CisJaXQ4N193cml0ZV92YWx1ZShkYXRhLCBJVDg3X1JFR19CRUVQX0VOQUJMRSwgZGF0YS0+YmVlcHMpOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjBfYmVlcCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkgIHNob3dfYmVlcCwgc2V0X2JlZXAsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjFfYmVlcCwgU19JUlVHTywgc2hvd19iZWVwLCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4yX2JlZXAsIFNfSVJVR08sIHNob3dfYmVlcCwgTlVMTCwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluM19iZWVwLCBTX0lSVUdPLCBzaG93X2JlZXAsIE5VTEwsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjRfYmVlcCwgU19JUlVHTywgc2hvd19iZWVwLCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW41X2JlZXAsIFNfSVJVR08sIHNob3dfYmVlcCwgTlVMTCwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluNl9iZWVwLCBTX0lSVUdPLCBzaG93X2JlZXAsIE5VTEwsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjdfYmVlcCwgU19JUlVHTywgc2hvd19iZWVwLCBOVUxMLCAxKTsKKy8qIGZhblhfYmVlcCB3cml0YWJpbGl0eSBpcyBzZXQgbGF0ZXIgKi8KK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMV9iZWVwLCBTX0lSVUdPLCBzaG93X2JlZXAsIHNldF9iZWVwLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMl9iZWVwLCBTX0lSVUdPLCBzaG93X2JlZXAsIHNldF9iZWVwLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuM19iZWVwLCBTX0lSVUdPLCBzaG93X2JlZXAsIHNldF9iZWVwLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuNF9iZWVwLCBTX0lSVUdPLCBzaG93X2JlZXAsIHNldF9iZWVwLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuNV9iZWVwLCBTX0lSVUdPLCBzaG93X2JlZXAsIHNldF9iZWVwLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfYmVlcCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkgIHNob3dfYmVlcCwgc2V0X2JlZXAsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9iZWVwLCBTX0lSVUdPLCBzaG93X2JlZXAsIE5VTEwsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM19iZWVwLCBTX0lSVUdPLCBzaG93X2JlZXAsIE5VTEwsIDIpOworCitzdGF0aWMgc3NpemVfdCBzaG93X3ZybV9yZWcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQogewogCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgZGF0YS0+dnJtKTsKIH0KLXN0YXRpYyBzc2l6ZV90Ci1zdG9yZV92cm1fcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3Qgc3RvcmVfdnJtX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JdTMyIHZhbDsKKwl1bnNpZ25lZCBsb25nIHZhbDsKIAotCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCiAJZGF0YS0+dnJtID0gdmFsOwogCiAJcmV0dXJuIGNvdW50OwogfQogc3RhdGljIERFVklDRV9BVFRSKHZybSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdnJtX3JlZywgc3RvcmVfdnJtX3JlZyk7CiAKLXN0YXRpYyBzc2l6ZV90Ci1zaG93X3ZpZF9yZWcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd192aWRfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gaXQ4N191cGRhdGVfZGV2aWNlKGRldik7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCAobG9uZykgdmlkX2Zyb21fcmVnKGRhdGEtPnZpZCwgZGF0YS0+dnJtKSk7CkBAIC05MzEsNTEgKzEyNTMsMTc2IEBACiAJLmF0dHJzID0gaXQ4N19hdHRyaWJ1dGVzLAogfTsKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKml0ODdfYXR0cmlidXRlc19vcHRbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppdDg3X2F0dHJpYnV0ZXNfYmVlcFtdID0geworCSZzZW5zb3JfZGV2X2F0dHJfaW4wX2JlZXAuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMV9iZWVwLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjJfYmVlcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4zX2JlZXAuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNF9iZWVwLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjVfYmVlcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW42X2JlZXAuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luN19iZWVwLmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2JlZXAuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2JlZXAuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2JlZXAuZGV2X2F0dHIuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpdDg3X2dyb3VwX2JlZXAgPSB7CisJLmF0dHJzID0gaXQ4N19hdHRyaWJ1dGVzX2JlZXAsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaXQ4N19hdHRyaWJ1dGVzX2ZhbjE2WzVdWzMrMV0gPSB7IHsKIAkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfaW5wdXQxNi5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9taW4xNi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9hbGFybS5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK30sIHsKIAkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfaW5wdXQxNi5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9taW4xNi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9hbGFybS5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK30sIHsKIAkmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfaW5wdXQxNi5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19taW4xNi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19hbGFybS5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK30sIHsKIAkmc2Vuc29yX2Rldl9hdHRyX2ZhbjRfaW5wdXQxNi5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfZmFuNF9taW4xNi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuNF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK30sIHsKIAkmc2Vuc29yX2Rldl9hdHRyX2ZhbjVfaW5wdXQxNi5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfZmFuNV9taW4xNi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuNV9hbGFybS5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK30gfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaXQ4N19ncm91cF9mYW4xNls1XSA9IHsKKwl7IC5hdHRycyA9IGl0ODdfYXR0cmlidXRlc19mYW4xNlswXSB9LAorCXsgLmF0dHJzID0gaXQ4N19hdHRyaWJ1dGVzX2ZhbjE2WzFdIH0sCisJeyAuYXR0cnMgPSBpdDg3X2F0dHJpYnV0ZXNfZmFuMTZbMl0gfSwKKwl7IC5hdHRycyA9IGl0ODdfYXR0cmlidXRlc19mYW4xNlszXSB9LAorCXsgLmF0dHJzID0gaXQ4N19hdHRyaWJ1dGVzX2ZhbjE2WzRdIH0sCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaXQ4N19hdHRyaWJ1dGVzX2ZhblszXVs0KzFdID0geyB7CiAJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX21pbi5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9kaXYuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwlOVUxMCit9LCB7CiAJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX21pbi5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9kaXYuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwlOVUxMCit9LCB7CiAJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX21pbi5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19kaXYuZGV2X2F0dHIuYXR0ciwKLQotCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9hbGFybS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9hbGFybS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19hbGFybS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfZmFuNF9hbGFybS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfZmFuNV9hbGFybS5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK30gfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaXQ4N19ncm91cF9mYW5bM10gPSB7CisJeyAuYXR0cnMgPSBpdDg3X2F0dHJpYnV0ZXNfZmFuWzBdIH0sCisJeyAuYXR0cnMgPSBpdDg3X2F0dHJpYnV0ZXNfZmFuWzFdIH0sCisJeyAuYXR0cnMgPSBpdDg3X2F0dHJpYnV0ZXNfZmFuWzJdIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqCitpdDg3X2dldF9mYW5fZ3JvdXAoY29uc3Qgc3RydWN0IGl0ODdfZGF0YSAqZGF0YSkKK3sKKwlyZXR1cm4gaGFzXzE2Yml0X2ZhbnMoZGF0YSkgPyBpdDg3X2dyb3VwX2ZhbjE2IDogaXQ4N19ncm91cF9mYW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppdDg3X2F0dHJpYnV0ZXNfcHdtWzNdWzQrMV0gPSB7IHsKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfZW5hYmxlLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9wd20yX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19lbmFibGUuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTEuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3B3bTIuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3B3bTMuZGV2X2F0dHIuYXR0ciwKIAkmZGV2X2F0dHJfcHdtMV9mcmVxLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fY2hhbm5lbHNfdGVtcC5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK30sIHsKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfZW5hYmxlLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20yLmRldl9hdHRyLmF0dHIsCiAJJmRldl9hdHRyX3B3bTJfZnJlcS5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX2NoYW5uZWxzX3RlbXAuZGV2X2F0dHIuYXR0ciwKKwlOVUxMCit9LCB7CisJJnNlbnNvcl9kZXZfYXR0cl9wd20zX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMy5kZXZfYXR0ci5hdHRyLAogCSZkZXZfYXR0cl9wd20zX2ZyZXEuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfYXV0b19jaGFubmVsc190ZW1wLmRldl9hdHRyLmF0dHIsCisJTlVMTAorfSB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpdDg3X2dyb3VwX3B3bVszXSA9IHsKKwl7IC5hdHRycyA9IGl0ODdfYXR0cmlidXRlc19wd21bMF0gfSwKKwl7IC5hdHRycyA9IGl0ODdfYXR0cmlidXRlc19wd21bMV0gfSwKKwl7IC5hdHRycyA9IGl0ODdfYXR0cmlidXRlc19wd21bMl0gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppdDg3X2F0dHJpYnV0ZXNfYXV0b3B3bVszXVs5KzFdID0geyB7CisJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcG9pbnQxX3B3bS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX3BvaW50Ml9wd20uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfYXV0b19wb2ludDNfcHdtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcG9pbnQ0X3B3bS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX3BvaW50MV90ZW1wLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcG9pbnQxX3RlbXBfaHlzdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX3BvaW50Ml90ZW1wLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcG9pbnQzX3RlbXAuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfYXV0b19wb2ludDRfdGVtcC5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK30sIHsKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfYXV0b19wb2ludDFfcHdtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2F1dG9fcG9pbnQyX3B3bS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX3BvaW50M19wd20uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfYXV0b19wb2ludDRfcHdtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2F1dG9fcG9pbnQxX3RlbXAuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfYXV0b19wb2ludDFfdGVtcF9oeXN0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2F1dG9fcG9pbnQyX3RlbXAuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfYXV0b19wb2ludDNfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX3BvaW50NF90ZW1wLmRldl9hdHRyLmF0dHIsCisJTlVMTAorfSwgeworCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19hdXRvX3BvaW50MV9wd20uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfYXV0b19wb2ludDJfcHdtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20zX2F1dG9fcG9pbnQzX3B3bS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19hdXRvX3BvaW50NF9wd20uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfYXV0b19wb2ludDFfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19hdXRvX3BvaW50MV90ZW1wX2h5c3QuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfYXV0b19wb2ludDJfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19hdXRvX3BvaW50M190ZW1wLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20zX2F1dG9fcG9pbnQ0X3RlbXAuZGV2X2F0dHIuYXR0ciwKKwlOVUxMCit9IH07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGl0ODdfZ3JvdXBfYXV0b3B3bVszXSA9IHsKKwl7IC5hdHRycyA9IGl0ODdfYXR0cmlidXRlc19hdXRvcHdtWzBdIH0sCisJeyAuYXR0cnMgPSBpdDg3X2F0dHJpYnV0ZXNfYXV0b3B3bVsxXSB9LAorCXsgLmF0dHJzID0gaXQ4N19hdHRyaWJ1dGVzX2F1dG9wd21bMl0gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppdDg3X2F0dHJpYnV0ZXNfZmFuX2JlZXBbXSA9IHsKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfYmVlcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9iZWVwLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2JlZXAuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjRfYmVlcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuNV9iZWVwLmRldl9hdHRyLmF0dHIsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaXQ4N19hdHRyaWJ1dGVzX3ZpZFtdID0gewogCSZkZXZfYXR0cl92cm0uYXR0ciwKIAkmZGV2X2F0dHJfY3B1MF92aWQuYXR0ciwKIAlOVUxMCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpdDg3X2dyb3VwX29wdCA9IHsKLQkuYXR0cnMgPSBpdDg3X2F0dHJpYnV0ZXNfb3B0LAorc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaXQ4N19ncm91cF92aWQgPSB7CisJLmF0dHJzID0gaXQ4N19hdHRyaWJ1dGVzX3ZpZCwKIH07CiAKIC8qIFN1cGVySU8gZGV0ZWN0aW9uIC0gd2lsbCBjaGFuZ2UgaXNhX2FkZHJlc3MgaWYgYSBjaGlwIGlzIGZvdW5kICovCkBAIC0xMDM1LDYgKzE0ODIsMTAgQEAKIAlpZiAoc2lvX2RhdGEtPnR5cGUgPT0gaXQ4NykgewogCQkvKiBUaGUgSVQ4NzA1RiBkb2Vzbid0IGhhdmUgVklEIHBpbnMgYXQgYWxsICovCiAJCXNpb19kYXRhLT5za2lwX3ZpZCA9IDE7CisKKwkJLyogVGhlIElUODcwNUYgaGFzIGEgZGlmZmVyZW50IExEIG51bWJlciBmb3IgR1BJTyAqLworCQlzdXBlcmlvX3NlbGVjdCg1KTsKKwkJc2lvX2RhdGEtPmJlZXBfcGluID0gc3VwZXJpb19pbmIoSVQ4N19TSU9fQkVFUF9QSU5fUkVHKSAmIDB4M2Y7CiAJfSBlbHNlIHsKIAkJaW50IHJlZzsKIApAQCAtMTA2OCw3ICsxNTE5LDExIEBACiAJCQlwcl9pbmZvKCJpdDg3OiBpbjMgaXMgVkNDICgrNVYpXG4iKTsKIAkJaWYgKHJlZyAmICgxIDw8IDEpKQogCQkJcHJfaW5mbygiaXQ4NzogaW43IGlzIFZDQ0ggKCs1ViBTdGFuZC1CeSlcbiIpOworCisJCXNpb19kYXRhLT5iZWVwX3BpbiA9IHN1cGVyaW9faW5iKElUODdfU0lPX0JFRVBfUElOX1JFRykgJiAweDNmOwogCX0KKwlpZiAoc2lvX2RhdGEtPmJlZXBfcGluKQorCQlwcl9pbmZvKCJpdDg3OiBCZWVwaW5nIGlzIHN1cHBvcnRlZFxuIik7CiAKIAkvKiBEaXNhYmxlIHNwZWNpZmljIGZlYXR1cmVzIGJhc2VkIG9uIERNSSBzdHJpbmdzICovCiAJYm9hcmRfdmVuZG9yID0gZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQk9BUkRfVkVORE9SKTsKQEAgLTEwOTMsMTQgKzE1NDgsNDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgdm9pZCBpdDg3X3JlbW92ZV9maWxlcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBpdDg3X3Npb19kYXRhICpzaW9fZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwljb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpmYW5fZ3JvdXAgPSBpdDg3X2dldF9mYW5fZ3JvdXAoZGF0YSk7CisJaW50IGk7CisKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJml0ODdfZ3JvdXApOworCWlmIChzaW9fZGF0YS0+YmVlcF9waW4pCisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmaXQ4N19ncm91cF9iZWVwKTsKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCWlmICghKGRhdGEtPmhhc19mYW4gJiAoMSA8PCBpKSkpCisJCQljb250aW51ZTsKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZmYW5fZ3JvdXBbaV0pOworCQlpZiAoc2lvX2RhdGEtPmJlZXBfcGluKQorCQkJc3lzZnNfcmVtb3ZlX2ZpbGUoJmRldi0+a29iaiwKKwkJCQkJICBpdDg3X2F0dHJpYnV0ZXNfZmFuX2JlZXBbaV0pOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWlmIChzaW9fZGF0YS0+c2tpcF9wd20gJiAoMSA8PCAwKSkKKwkJCWNvbnRpbnVlOworCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJml0ODdfZ3JvdXBfcHdtW2ldKTsKKwkJaWYgKGhhc19vbGRfYXV0b3B3bShkYXRhKSkKKwkJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLAorCQkJCQkgICAmaXQ4N19ncm91cF9hdXRvcHdtW2ldKTsKKwl9CisJaWYgKCFzaW9fZGF0YS0+c2tpcF92aWQpCisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmaXQ4N19ncm91cF92aWQpOworfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpdDg3X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGl0ODdfZGF0YSAqZGF0YTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwogCXN0cnVjdCBpdDg3X3Npb19kYXRhICpzaW9fZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQlpbnQgZXJyID0gMDsKKwljb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpmYW5fZ3JvdXA7CisJaW50IGVyciA9IDAsIGk7CiAJaW50IGVuYWJsZV9wd21faW50ZXJmYWNlOworCWludCBmYW5fYmVlcF9uZWVkX3J3OwogCXN0YXRpYyBjb25zdCBjaGFyICpuYW1lc1tdID0gewogCQkiaXQ4NyIsCiAJCSJpdDg3MTIiLApAQCAtMTExOCw3ICsxNjA1LDggQEAKIAkJZ290byBFUlJPUjA7CiAJfQogCi0JaWYgKCEoZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpdDg3X2RhdGEpLCBHRlBfS0VSTkVMKSkpIHsKKwlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGl0ODdfZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIEVSUk9SMTsKIAl9CkBAIC0xMTQ2LDEyMCArMTYzNCw2MCBAQAogCWl0ODdfaW5pdF9kZXZpY2UocGRldik7CiAKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLwotCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZpdDg3X2dyb3VwKSkpCisJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZpdDg3X2dyb3VwKTsKKwlpZiAoZXJyKQogCQlnb3RvIEVSUk9SMjsKIAorCWlmIChzaW9fZGF0YS0+YmVlcF9waW4pIHsKKwkJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZpdDg3X2dyb3VwX2JlZXApOworCQlpZiAoZXJyKQorCQkJZ290byBFUlJPUjQ7CisJfQorCiAJLyogRG8gbm90IGNyZWF0ZSBmYW4gZmlsZXMgZm9yIGRpc2FibGVkIGZhbnMgKi8KLQlpZiAoaGFzXzE2Yml0X2ZhbnMoZGF0YSkpIHsKLQkJLyogMTYtYml0IHRhY2hvbWV0ZXJzICovCi0JCWlmIChkYXRhLT5oYXNfZmFuICYgKDEgPDwgMCkpIHsKLQkJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2lucHV0MTYuZGV2X2F0dHIpKQotCQkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJICAgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfbWluMTYuZGV2X2F0dHIpKQotCQkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJICAgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfYWxhcm0uZGV2X2F0dHIpKSkKKwlmYW5fZ3JvdXAgPSBpdDg3X2dldF9mYW5fZ3JvdXAoZGF0YSk7CisJZmFuX2JlZXBfbmVlZF9ydyA9IDE7CisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQlpZiAoIShkYXRhLT5oYXNfZmFuICYgKDEgPDwgaSkpKQorCQkJY29udGludWU7CisJCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmZmFuX2dyb3VwW2ldKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gRVJST1I0OworCisJCWlmIChzaW9fZGF0YS0+YmVlcF9waW4pIHsKKwkJCWVyciA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZkZXYtPmtvYmosCisJCQkJCQlpdDg3X2F0dHJpYnV0ZXNfZmFuX2JlZXBbaV0pOworCQkJaWYgKGVycikKIAkJCQlnb3RvIEVSUk9SNDsKLQkJfQotCQlpZiAoZGF0YS0+aGFzX2ZhbiAmICgxIDw8IDEpKSB7Ci0JCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuMl9pbnB1dDE2LmRldl9hdHRyKSkKLQkJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4yX21pbjE2LmRldl9hdHRyKSkKLQkJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2FsYXJtLmRldl9hdHRyKSkpCi0JCQkJZ290byBFUlJPUjQ7Ci0JCX0KLQkJaWYgKGRhdGEtPmhhc19mYW4gJiAoMSA8PCAyKSkgewotCQkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJICAgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfaW5wdXQxNi5kZXZfYXR0cikpCi0JCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuM19taW4xNi5kZXZfYXR0cikpCi0JCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuM19hbGFybS5kZXZfYXR0cikpKQotCQkJCWdvdG8gRVJST1I0OwotCQl9Ci0JCWlmIChkYXRhLT5oYXNfZmFuICYgKDEgPDwgMykpIHsKLQkJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9mYW40X2lucHV0MTYuZGV2X2F0dHIpKQotCQkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJICAgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjRfbWluMTYuZGV2X2F0dHIpKQotCQkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJICAgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjRfYWxhcm0uZGV2X2F0dHIpKSkKLQkJCQlnb3RvIEVSUk9SNDsKLQkJfQotCQlpZiAoZGF0YS0+aGFzX2ZhbiAmICgxIDw8IDQpKSB7Ci0JCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuNV9pbnB1dDE2LmRldl9hdHRyKSkKLQkJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9mYW41X21pbjE2LmRldl9hdHRyKSkKLQkJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9mYW41X2FsYXJtLmRldl9hdHRyKSkpCi0JCQkJZ290byBFUlJPUjQ7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiA4LWJpdCB0YWNob21ldGVycyB3aXRoIGNsb2NrIGRpdmlkZXIgKi8KLQkJaWYgKGRhdGEtPmhhc19mYW4gJiAoMSA8PCAwKSkgewotCQkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJICAgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfaW5wdXQuZGV2X2F0dHIpKQotCQkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJICAgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfbWluLmRldl9hdHRyKSkKLQkJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2Rpdi5kZXZfYXR0cikpCi0JCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuMV9hbGFybS5kZXZfYXR0cikpKQotCQkJCWdvdG8gRVJST1I0OwotCQl9Ci0JCWlmIChkYXRhLT5oYXNfZmFuICYgKDEgPDwgMSkpIHsKLQkJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2lucHV0LmRldl9hdHRyKSkKLQkJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4yX21pbi5kZXZfYXR0cikpCi0JCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuMl9kaXYuZGV2X2F0dHIpKQotCQkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJICAgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfYWxhcm0uZGV2X2F0dHIpKSkKLQkJCQlnb3RvIEVSUk9SNDsKLQkJfQotCQlpZiAoZGF0YS0+aGFzX2ZhbiAmICgxIDw8IDIpKSB7Ci0JCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuM19pbnB1dC5kZXZfYXR0cikpCi0JCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuM19taW4uZGV2X2F0dHIpKQotCQkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJICAgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfZGl2LmRldl9hdHRyKSkKLQkJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2FsYXJtLmRldl9hdHRyKSkpCi0JCQkJZ290byBFUlJPUjQ7CisJCQlpZiAoIWZhbl9iZWVwX25lZWRfcncpCisJCQkJY29udGludWU7CisKKwkJCS8qIEFzIHdlIGhhdmUgYSBzaW5nbGUgYmVlcCBlbmFibGUgYml0IGZvciBhbGwgZmFucywKKwkJCSAqIG9ubHkgdGhlIGZpcnN0IGVuYWJsZWQgZmFuIGhhcyBhIHdyaXRhYmxlIGF0dHJpYnV0ZQorCQkJICogZm9yIGl0LiAqLworCQkJaWYgKHN5c2ZzX2NobW9kX2ZpbGUoJmRldi0+a29iaiwKKwkJCQkJICAgICBpdDg3X2F0dHJpYnV0ZXNfZmFuX2JlZXBbaV0sCisJCQkJCSAgICAgU19JUlVHTyB8IFNfSVdVU1IpKQorCQkJCWRldl9kYmcoZGV2LCAiY2htb2QgK3cgZmFuJWRfYmVlcCBmYWlsZWRcbiIsCisJCQkJCWkgKyAxKTsKKwkJCWZhbl9iZWVwX25lZWRfcncgPSAwOwogCQl9CiAJfQogCiAJaWYgKGVuYWJsZV9wd21faW50ZXJmYWNlKSB7Ci0JCWlmICghKHNpb19kYXRhLT5za2lwX3B3bSAmICgxIDw8IDApKSkgewotCQkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJICAgICAmc2Vuc29yX2Rldl9hdHRyX3B3bTFfZW5hYmxlLmRldl9hdHRyKSkKLQkJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9wd20xLmRldl9hdHRyKSkKLQkJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCSAgICAgJmRldl9hdHRyX3B3bTFfZnJlcSkpKQorCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQlpZiAoc2lvX2RhdGEtPnNraXBfcHdtICYgKDEgPDwgaSkpCisJCQkJY29udGludWU7CisJCQllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwKKwkJCQkJCSAmaXQ4N19ncm91cF9wd21baV0pOworCQkJaWYgKGVycikKIAkJCQlnb3RvIEVSUk9SNDsKLQkJfQotCQlpZiAoIShzaW9fZGF0YS0+c2tpcF9wd20gJiAoMSA8PCAxKSkpIHsKLQkJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9wd20yX2VuYWJsZS5kZXZfYXR0cikpCi0JCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfcHdtMi5kZXZfYXR0cikpCi0JCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZkZXZfYXR0cl9wd20yX2ZyZXEpKSkKLQkJCQlnb3RvIEVSUk9SNDsKLQkJfQotCQlpZiAoIShzaW9fZGF0YS0+c2tpcF9wd20gJiAoMSA8PCAyKSkpIHsKLQkJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9wd20zX2VuYWJsZS5kZXZfYXR0cikpCi0JCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfcHdtMy5kZXZfYXR0cikpCi0JCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZkZXZfYXR0cl9wd20zX2ZyZXEpKSkKKworCQkJaWYgKCFoYXNfb2xkX2F1dG9wd20oZGF0YSkpCisJCQkJY29udGludWU7CisJCQllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwKKwkJCQkJCSAmaXQ4N19ncm91cF9hdXRvcHdtW2ldKTsKKwkJCWlmIChlcnIpCiAJCQkJZ290byBFUlJPUjQ7CiAJCX0KIAl9CkBAIC0xMjY4LDEwICsxNjk2LDggQEAKIAkJZGF0YS0+dnJtID0gdmlkX3doaWNoX3ZybSgpOwogCQkvKiBWSUQgcmVhZGluZyBmcm9tIFN1cGVyLUkvTyBjb25maWcgc3BhY2UgaWYgYXZhaWxhYmxlICovCiAJCWRhdGEtPnZpZCA9IHNpb19kYXRhLT52aWRfdmFsdWU7Ci0JCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJICAgICAmZGV2X2F0dHJfdnJtKSkKLQkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkgICAgICZkZXZfYXR0cl9jcHUwX3ZpZCkpKQorCQllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJml0ODdfZ3JvdXBfdmlkKTsKKwkJaWYgKGVycikKIAkJCWdvdG8gRVJST1I0OwogCX0KIApAQCAtMTI4NCw4ICsxNzEwLDcgQEAKIAlyZXR1cm4gMDsKIAogRVJST1I0OgotCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmaXQ4N19ncm91cCk7Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZpdDg3X2dyb3VwX29wdCk7CisJaXQ4N19yZW1vdmVfZmlsZXMoZGV2KTsKIEVSUk9SMjoKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlrZnJlZShkYXRhKTsKQEAgLTEzMDAsOCArMTcyNSw3IEBACiAJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmaXQ4N19ncm91cCk7Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJml0ODdfZ3JvdXBfb3B0KTsKKwlpdDg3X3JlbW92ZV9maWxlcygmcGRldi0+ZGV2KTsKIAogCXJlbGVhc2VfcmVnaW9uKGRhdGEtPmFkZHIsIElUODdfRUNfRVhURU5UKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKQEAgLTEzODcsMTUgKzE4MTEsMTggQEAKIAlpbnQgdG1wLCBpOwogCXU4IG1hc2s7CiAKLQkvKiBpbml0aWFsaXplIHRvIHNhbmUgZGVmYXVsdHM6Ci0JICogLSBpZiB0aGUgY2hpcCBpcyBpbiBtYW51YWwgcHdtIG1vZGUsIHRoaXMgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aXRoCi0JICogICB0aGUgYWN0dWFsIHNldHRpbmdzIG9uIHRoZSBjaGlwIChzbyBpbiB0aGlzIGNhc2UsIGluaXRpYWxpemF0aW9uCi0JICogICBpcyBub3QgbmVlZGVkKQotCSAqIC0gaWYgaW4gYXV0b21hdGljIG9yIG9uL29mZiBtb2RlLCB3ZSBjb3VsZCBzd2l0Y2ggdG8gbWFudWFsIG1vZGUsCi0JICogICByZWFkIHRoZSByZWdpc3RlcnMgYW5kIHNldCBtYW51YWxfcHdtX2N0bCBhY2NvcmRpbmdseSwgYnV0IGN1cnJlbnRseQotCSAqICAgdGhpcyBpcyBub3QgaW1wbGVtZW50ZWQsIHNvIHdlIGluaXRpYWxpemUgdG8gc29tZXRoaW5nIHNhbmUgKi8KKwkvKiBGb3IgZWFjaCBQV00gY2hhbm5lbDoKKwkgKiAtIElmIGl0IGlzIGluIGF1dG9tYXRpYyBtb2RlLCBzZXR0aW5nIHRvIG1hbnVhbCBtb2RlIHNob3VsZCBzZXQKKwkgKiAgIHRoZSBmYW4gdG8gZnVsbCBzcGVlZCBieSBkZWZhdWx0LgorCSAqIC0gSWYgaXQgaXMgaW4gbWFudWFsIG1vZGUsIHdlIG5lZWQgYSBtYXBwaW5nIHRvIHRlbXBlcmF0dXJlCisJICogICBjaGFubmVscyB0byB1c2Ugd2hlbiBsYXRlciBzZXR0aW5nIHRvIGF1dG9tYXRpYyBtb2RlIGxhdGVyLgorCSAqICAgVXNlIGEgMToxIG1hcHBpbmcgYnkgZGVmYXVsdCAod2UgYXJlIGNsdWVsZXNzLikKKwkgKiBJbiBib3RoIGNhc2VzLCB0aGUgdmFsdWUgY2FuIChhbmQgc2hvdWxkKSBiZSBjaGFuZ2VkIGJ5IHRoZSB1c2VyCisJICogcHJpb3IgdG8gc3dpdGNoaW5nIHRvIGEgZGlmZmVyZW50IG1vZGUuICovCiAJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotCQlkYXRhLT5tYW51YWxfcHdtX2N0bFtpXSA9IDB4ZmY7CisJCWRhdGEtPnB3bV90ZW1wX21hcFtpXSA9IGk7CisJCWRhdGEtPnB3bV9kdXR5W2ldID0gMHg3ZjsJLyogRnVsbCBzcGVlZCAqLworCQlkYXRhLT5hdXRvX3B3bVtpXVszXSA9IDB4N2Y7CS8qIEZ1bGwgc3BlZWQsIGhhcmQtY29kZWQgKi8KIAl9CiAKIAkvKiBTb21lIGNoaXBzIHNlZW0gdG8gaGF2ZSBkZWZhdWx0IHZhbHVlIDB4ZmYgZm9yIGFsbCBsaW1pdApAQCAtMTQzNiw3ICsxODYzLDggQEAKIAlpZiAoKGRhdGEtPmZhbl9tYWluX2N0cmwgJiBtYXNrKSA9PSAwKSB7CiAJCS8qIEVuYWJsZSBhbGwgZmFuIHRhY2hvbWV0ZXJzICovCiAJCWRhdGEtPmZhbl9tYWluX2N0cmwgfD0gbWFzazsKLQkJaXQ4N193cml0ZV92YWx1ZShkYXRhLCBJVDg3X1JFR19GQU5fTUFJTl9DVFJMLCBkYXRhLT5mYW5fbWFpbl9jdHJsKTsKKwkJaXQ4N193cml0ZV92YWx1ZShkYXRhLCBJVDg3X1JFR19GQU5fTUFJTl9DVFJMLAorCQkJCSBkYXRhLT5mYW5fbWFpbl9jdHJsKTsKIAl9CiAJZGF0YS0+aGFzX2ZhbiA9IChkYXRhLT5mYW5fbWFpbl9jdHJsID4+IDQpICYgMHgwNzsKIApAQCAtMTQ2MSwzMCArMTg4OSwzMiBAQAogCS8qIEZhbiBpbnB1dCBwaW5zIG1heSBiZSB1c2VkIGZvciBhbHRlcm5hdGl2ZSBmdW5jdGlvbnMgKi8KIAlkYXRhLT5oYXNfZmFuICY9IH5zaW9fZGF0YS0+c2tpcF9mYW47CiAKLQkvKiBTZXQgY3VycmVudCBmYW4gbW9kZSByZWdpc3RlcnMgYW5kIHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUKLQkgKiBvdGhlciBtb2RlIHJlZ2lzdGVycyAqLwotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJaWYgKGRhdGEtPmZhbl9tYWluX2N0cmwgJiAoMSA8PCBpKSkgewotCQkJLyogcHdtIG1vZGUgKi8KLQkJCXRtcCA9IGl0ODdfcmVhZF92YWx1ZShkYXRhLCBJVDg3X1JFR19QV00oaSkpOwotCQkJaWYgKHRtcCAmIDB4ODApIHsKLQkJCQkvKiBhdXRvbWF0aWMgcHdtIC0gbm90IHlldCBpbXBsZW1lbnRlZCwgYnV0Ci0JCQkJICogbGVhdmUgdGhlIHNldHRpbmdzIG1hZGUgYnkgdGhlIEJJT1MgYWxvbmUKLQkJCQkgKiB1bnRpbCBhIGNoYW5nZSBpcyByZXF1ZXN0ZWQgdmlhIHRoZSBzeXNmcwotCQkJCSAqIGludGVyZmFjZSAqLwotCQkJfSBlbHNlIHsKLQkJCQkvKiBtYW51YWwgcHdtICovCi0JCQkJZGF0YS0+bWFudWFsX3B3bV9jdGxbaV0gPSBQV01fRlJPTV9SRUcodG1wKTsKLQkJCX0KLQkJfQotIAl9Ci0KIAkvKiBTdGFydCBtb25pdG9yaW5nICovCiAJaXQ4N193cml0ZV92YWx1ZShkYXRhLCBJVDg3X1JFR19DT05GSUcsCiAJCQkgKGl0ODdfcmVhZF92YWx1ZShkYXRhLCBJVDg3X1JFR19DT05GSUcpICYgMHgzNikKIAkJCSB8ICh1cGRhdGVfdmJhdCA/IDB4NDEgOiAweDAxKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGl0ODdfdXBkYXRlX3B3bV9jdHJsKHN0cnVjdCBpdDg3X2RhdGEgKmRhdGEsIGludCBucikKK3sKKwlkYXRhLT5wd21fY3RybFtucl0gPSBpdDg3X3JlYWRfdmFsdWUoZGF0YSwgSVQ4N19SRUdfUFdNKG5yKSk7CisJaWYgKGRhdGEtPnB3bV9jdHJsW25yXSAmIDB4ODApCS8qIEF1dG9tYXRpYyBtb2RlICovCisJCWRhdGEtPnB3bV90ZW1wX21hcFtucl0gPSBkYXRhLT5wd21fY3RybFtucl0gJiAweDAzOworCWVsc2UJCQkJLyogTWFudWFsIG1vZGUgKi8KKwkJZGF0YS0+cHdtX2R1dHlbbnJdID0gZGF0YS0+cHdtX2N0cmxbbnJdICYgMHg3ZjsKKworCWlmIChoYXNfb2xkX2F1dG9wd20oZGF0YSkpIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IDUgOyBpKyspCisJCQlkYXRhLT5hdXRvX3RlbXBbbnJdW2ldID0gaXQ4N19yZWFkX3ZhbHVlKGRhdGEsCisJCQkJCQlJVDg3X1JFR19BVVRPX1RFTVAobnIsIGkpKTsKKwkJZm9yIChpID0gMDsgaSA8IDMgOyBpKyspCisJCQlkYXRhLT5hdXRvX3B3bVtucl1baV0gPSBpdDg3X3JlYWRfdmFsdWUoZGF0YSwKKwkJCQkJCUlUODdfUkVHX0FVVE9fUFdNKG5yLCBpKSk7CisJfQorfQorCiBzdGF0aWMgc3RydWN0IGl0ODdfZGF0YSAqaXQ4N191cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CkBAIC0xNDk0LDI0ICsxOTI0LDIyIEBACiAKIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiArIEhaIC8gMikKIAkgICAgfHwgIWRhdGEtPnZhbGlkKSB7Ci0KIAkJaWYgKHVwZGF0ZV92YmF0KSB7CiAJCQkvKiBDbGVhcmVkIGFmdGVyIGVhY2ggdXBkYXRlLCBzbyByZWVuYWJsZS4gIFZhbHVlCi0JCSAJICByZXR1cm5lZCBieSB0aGlzIHJlYWQgd2lsbCBiZSBwcmV2aW91cyB2YWx1ZSAqLwkKKwkJCSAgIHJldHVybmVkIGJ5IHRoaXMgcmVhZCB3aWxsIGJlIHByZXZpb3VzIHZhbHVlICovCiAJCQlpdDg3X3dyaXRlX3ZhbHVlKGRhdGEsIElUODdfUkVHX0NPTkZJRywKLQkJCSAgIGl0ODdfcmVhZF92YWx1ZShkYXRhLCBJVDg3X1JFR19DT05GSUcpIHwgMHg0MCk7CisJCQkJaXQ4N19yZWFkX3ZhbHVlKGRhdGEsIElUODdfUkVHX0NPTkZJRykgfCAweDQwKTsKIAkJfQogCQlmb3IgKGkgPSAwOyBpIDw9IDc7IGkrKykgewogCQkJZGF0YS0+aW5baV0gPQotCQkJICAgIGl0ODdfcmVhZF92YWx1ZShkYXRhLCBJVDg3X1JFR19WSU4oaSkpOworCQkJCWl0ODdfcmVhZF92YWx1ZShkYXRhLCBJVDg3X1JFR19WSU4oaSkpOwogCQkJZGF0YS0+aW5fbWluW2ldID0KLQkJCSAgICBpdDg3X3JlYWRfdmFsdWUoZGF0YSwgSVQ4N19SRUdfVklOX01JTihpKSk7CisJCQkJaXQ4N19yZWFkX3ZhbHVlKGRhdGEsIElUODdfUkVHX1ZJTl9NSU4oaSkpOwogCQkJZGF0YS0+aW5fbWF4W2ldID0KLQkJCSAgICBpdDg3X3JlYWRfdmFsdWUoZGF0YSwgSVQ4N19SRUdfVklOX01BWChpKSk7CisJCQkJaXQ4N19yZWFkX3ZhbHVlKGRhdGEsIElUODdfUkVHX1ZJTl9NQVgoaSkpOwogCQl9CiAJCS8qIGluOCAoYmF0dGVyeSkgaGFzIG5vIGxpbWl0IHJlZ2lzdGVycyAqLwotCQlkYXRhLT5pbls4XSA9Ci0JCSAgICBpdDg3X3JlYWRfdmFsdWUoZGF0YSwgSVQ4N19SRUdfVklOKDgpKTsKKwkJZGF0YS0+aW5bOF0gPSBpdDg3X3JlYWRfdmFsdWUoZGF0YSwgSVQ4N19SRUdfVklOKDgpKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CiAJCQkvKiBTa2lwIGRpc2FibGVkIGZhbnMgKi8KQEAgLTE1MTksNyArMTk0Nyw3IEBACiAJCQkJY29udGludWU7CiAKIAkJCWRhdGEtPmZhbl9taW5baV0gPQotCQkJICAgIGl0ODdfcmVhZF92YWx1ZShkYXRhLCBJVDg3X1JFR19GQU5fTUlOW2ldKTsKKwkJCQlpdDg3X3JlYWRfdmFsdWUoZGF0YSwgSVQ4N19SRUdfRkFOX01JTltpXSk7CiAJCQlkYXRhLT5mYW5baV0gPSBpdDg3X3JlYWRfdmFsdWUoZGF0YSwKIAkJCQkgICAgICAgSVQ4N19SRUdfRkFOW2ldKTsKIAkJCS8qIEFkZCBoaWdoIGJ5dGUgaWYgaW4gMTYtYml0IG1vZGUgKi8KQEAgLTE1MzIsMTEgKzE5NjAsMTEgQEAKIAkJfQogCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CiAJCQlkYXRhLT50ZW1wW2ldID0KLQkJCSAgICBpdDg3X3JlYWRfdmFsdWUoZGF0YSwgSVQ4N19SRUdfVEVNUChpKSk7CisJCQkJaXQ4N19yZWFkX3ZhbHVlKGRhdGEsIElUODdfUkVHX1RFTVAoaSkpOwogCQkJZGF0YS0+dGVtcF9oaWdoW2ldID0KLQkJCSAgICBpdDg3X3JlYWRfdmFsdWUoZGF0YSwgSVQ4N19SRUdfVEVNUF9ISUdIKGkpKTsKKwkJCQlpdDg3X3JlYWRfdmFsdWUoZGF0YSwgSVQ4N19SRUdfVEVNUF9ISUdIKGkpKTsKIAkJCWRhdGEtPnRlbXBfbG93W2ldID0KLQkJCSAgICBpdDg3X3JlYWRfdmFsdWUoZGF0YSwgSVQ4N19SRUdfVEVNUF9MT1coaSkpOworCQkJCWl0ODdfcmVhZF92YWx1ZShkYXRhLCBJVDg3X1JFR19URU1QX0xPVyhpKSk7CiAJCX0KIAogCQkvKiBOZXdlciBjaGlwcyBkb24ndCBoYXZlIGNsb2NrIGRpdmlkZXJzICovCkBAIC0xNTUxLDkgKzE5NzksMTMgQEAKIAkJCWl0ODdfcmVhZF92YWx1ZShkYXRhLCBJVDg3X1JFR19BTEFSTTEpIHwKIAkJCShpdDg3X3JlYWRfdmFsdWUoZGF0YSwgSVQ4N19SRUdfQUxBUk0yKSA8PCA4KSB8CiAJCQkoaXQ4N19yZWFkX3ZhbHVlKGRhdGEsIElUODdfUkVHX0FMQVJNMykgPDwgMTYpOworCQlkYXRhLT5iZWVwcyA9IGl0ODdfcmVhZF92YWx1ZShkYXRhLCBJVDg3X1JFR19CRUVQX0VOQUJMRSk7CisKIAkJZGF0YS0+ZmFuX21haW5fY3RybCA9IGl0ODdfcmVhZF92YWx1ZShkYXRhLAogCQkJCUlUODdfUkVHX0ZBTl9NQUlOX0NUUkwpOwogCQlkYXRhLT5mYW5fY3RsID0gaXQ4N19yZWFkX3ZhbHVlKGRhdGEsIElUODdfUkVHX0ZBTl9DVEwpOworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQkJaXQ4N191cGRhdGVfcHdtX2N0cmwoZGF0YSwgaSk7CiAKIAkJZGF0YS0+c2Vuc29yID0gaXQ4N19yZWFkX3ZhbHVlKGRhdGEsIElUODdfUkVHX1RFTVBfRU5BQkxFKTsKIAkJLyogVGhlIDg3MDUgZG9lcyBub3QgaGF2ZSBWSUQgY2FwYWJpbGl0eS4KQEAgLTE2MjgsNyArMjA2MCw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBzbV9pdDg3X2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwotCXVuc2lnbmVkIHNob3J0IGlzYV9hZGRyZXNzPTA7CisJdW5zaWduZWQgc2hvcnQgaXNhX2FkZHJlc3MgPSAwOwogCXN0cnVjdCBpdDg3X3Npb19kYXRhIHNpb19kYXRhOwogCiAJbWVtc2V0KCZzaW9fZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBpdDg3X3Npb19kYXRhKSk7CkBAIC0xNjQwLDcgKzIwNzIsNyBAQAogCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gaXQ4N19kZXZpY2VfYWRkKGlzYV9hZGRyZXNzLCAmc2lvX2RhdGEpOwotCWlmIChlcnIpeworCWlmIChlcnIpIHsKIAkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJml0ODdfZHJpdmVyKTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC0xNjYxLDcgKzIwOTMsOCBAQAogbW9kdWxlX3BhcmFtKHVwZGF0ZV92YmF0LCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0ModXBkYXRlX3ZiYXQsICJVcGRhdGUgdmJhdCBpZiBzZXQgZWxzZSByZXR1cm4gcG93ZXJ1cCB2YWx1ZSIpOwogbW9kdWxlX3BhcmFtKGZpeF9wd21fcG9sYXJpdHksIGJvb2wsIDApOwotTU9EVUxFX1BBUk1fREVTQyhmaXhfcHdtX3BvbGFyaXR5LCAiRm9yY2UgUFdNIHBvbGFyaXR5IHRvIGFjdGl2ZSBoaWdoIChEQU5HRVJPVVMpIik7CitNT0RVTEVfUEFSTV9ERVNDKGZpeF9wd21fcG9sYXJpdHksCisJCSAiRm9yY2UgUFdNIHBvbGFyaXR5IHRvIGFjdGl2ZSBoaWdoIChEQU5HRVJPVVMpIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9pbml0KHNtX2l0ODdfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtOTAuYyBiL2RyaXZlcnMvaHdtb24vbG05MC5jCmluZGV4IDdjOWJkYzEuLjdjYzI3MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG05MC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG05MC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGxtOTAuYyAtIFBhcnQgb2YgbG1fc2Vuc29ycywgTGludXgga2VybmVsIG1vZHVsZXMgZm9yIGhhcmR3YXJlCiAgKiAgICAgICAgICBtb25pdG9yaW5nCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwOSAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMCAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAgKgogICogQmFzZWQgb24gdGhlIGxtODMgZHJpdmVyLiBUaGUgTE05MCBpcyBhIHNlbnNvciBjaGlwIG1hZGUgYnkgTmF0aW9uYWwKICAqIFNlbWljb25kdWN0b3IuIEl0IHJlcG9ydHMgdXAgdG8gdHdvIHRlbXBlcmF0dXJlcyAoaXRzIG93biBwbHVzIHVwIHRvCkBAIC05Myw3ICs5Myw4IEBACiBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewogCTB4MTgsIDB4MTksIDB4MWEsIDB4MjksIDB4MmEsIDB4MmIsIDB4NGMsIDB4NGQsIDB4NGUsIEkyQ19DTElFTlRfRU5EIH07CiAKLWVudW0gY2hpcHMgeyBsbTkwLCBhZG0xMDMyLCBsbTk5LCBsbTg2LCBtYXg2NjU3LCBhZHQ3NDYxLCBtYXg2NjgwLCBtYXg2NjQ2IH07CitlbnVtIGNoaXBzIHsgbG05MCwgYWRtMTAzMiwgbG05OSwgbG04NiwgbWF4NjY1NywgYWR0NzQ2MSwgbWF4NjY4MCwgbWF4NjY0NiwKKwl3ODNsNzcxIH07CiAKIC8qCiAgKiBUaGUgTE05MCByZWdpc3RlcnMKQEAgLTE1MSw2ICsxNTIsNyBAQAogc3RhdGljIGludCBsbTkwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCSAgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCk7CiBzdGF0aWMgdm9pZCBsbTkwX2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOworc3RhdGljIHZvaWQgbG05MF9hbGVydChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgZmxhZyk7CiBzdGF0aWMgaW50IGxtOTBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOwogc3RhdGljIHN0cnVjdCBsbTkwX2RhdGEgKmxtOTBfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCkBAIC0xNzMsNiArMTc1LDcgQEAKIAl7ICJtYXg2NjU5IiwgbWF4NjY1NyB9LAogCXsgIm1heDY2ODAiLCBtYXg2NjgwIH0sCiAJeyAibWF4NjY4MSIsIG1heDY2ODAgfSwKKwl7ICJ3ODNsNzcxIiwgdzgzbDc3MSB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBsbTkwX2lkKTsKQEAgLTE4NCw2ICsxODcsNyBAQAogCX0sCiAJLnByb2JlCQk9IGxtOTBfcHJvYmUsCiAJLnJlbW92ZQkJPSBsbTkwX3JlbW92ZSwKKwkuYWxlcnQJCT0gbG05MF9hbGVydCwKIAkuaWRfdGFibGUJPSBsbTkwX2lkLAogCS5kZXRlY3QJCT0gbG05MF9kZXRlY3QsCiAJLmFkZHJlc3NfbGlzdAk9IG5vcm1hbF9pMmMsCkBAIC0yMDEsNiArMjA1LDkgQEAKIAlpbnQga2luZDsKIAlpbnQgZmxhZ3M7CiAKKwl1OCBjb25maWdfb3JpZzsJCS8qIE9yaWdpbmFsIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgdmFsdWUgKi8KKwl1OCBhbGVydF9hbGFybXM7CS8qIFdoaWNoIGFsYXJtIGJpdHMgdHJpZ2dlciBBTEVSVCMgKi8KKwogCS8qIHJlZ2lzdGVycyB2YWx1ZXMgKi8KIAlzOCB0ZW1wOFs0XTsJLyogMDogbG9jYWwgbG93IGxpbWl0CiAJCQkgICAxOiBsb2NhbCBoaWdoIGxpbWl0CkBAIC03NTgsNiArNzY1LDE0IEBACiAJCSAmJiByZWdfY29udnJhdGUgPD0gMHgwNykgewogCQkJbmFtZSA9ICJtYXg2NjQ2IjsKIAkJfQorCX0gZWxzZQorCWlmIChhZGRyZXNzID09IDB4NEMKKwkgJiYgbWFuX2lkID09IDB4NUMpIHsgLyogV2luYm9uZC9OdXZvdG9uICovCisJCWlmICgoY2hpcF9pZCAmIDB4RkUpID09IDB4MTAgLyogVzgzTDc3MUFXRy9BU0cgKi8KKwkJICYmIChyZWdfY29uZmlnMSAmIDB4MkEpID09IDB4MDAKKwkJICYmIHJlZ19jb252cmF0ZSA8PSAweDA4KSB7CisJCQluYW1lID0gInc4M2w3NzEiOworCQl9CiAJfQogCiAJaWYgKCFuYW1lKSB7IC8qIGlkZW50aWZpY2F0aW9uIGZhaWxlZCAqLwpAQCAtNzk0LDYgKzgwOSwxOSBAQAogCQkJbmV3X2NsaWVudC0+ZmxhZ3MgJj0gfkkyQ19DTElFTlRfUEVDOwogCX0KIAorCS8qIERpZmZlcmVudCBkZXZpY2VzIGhhdmUgZGlmZmVyZW50IGFsYXJtIGJpdHMgdHJpZ2dlcmluZyB0aGUKKwkgKiBBTEVSVCMgb3V0cHV0ICovCisJc3dpdGNoIChkYXRhLT5raW5kKSB7CisJY2FzZSBsbTkwOgorCWNhc2UgbG05OToKKwljYXNlIGxtODY6CisJCWRhdGEtPmFsZXJ0X2FsYXJtcyA9IDB4N2I7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRhdGEtPmFsZXJ0X2FsYXJtcyA9IDB4N2M7CisJCWJyZWFrOworCX0KKwogCS8qIEluaXRpYWxpemUgdGhlIExNOTAgY2hpcCAqLwogCWxtOTBfaW5pdF9jbGllbnQobmV3X2NsaWVudCk7CiAKQEAgLTgzMCw3ICs4NTgsNyBAQAogCiBzdGF0aWMgdm9pZCBsbTkwX2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JdTggY29uZmlnLCBjb25maWdfb3JpZzsKKwl1OCBjb25maWc7CiAJc3RydWN0IGxtOTBfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJLyoKQEAgLTg0Miw3ICs4NzAsNyBAQAogCQlkZXZfd2FybigmY2xpZW50LT5kZXYsICJJbml0aWFsaXphdGlvbiBmYWlsZWQhXG4iKTsKIAkJcmV0dXJuOwogCX0KLQljb25maWdfb3JpZyA9IGNvbmZpZzsKKwlkYXRhLT5jb25maWdfb3JpZyA9IGNvbmZpZzsKIAogCS8qIENoZWNrIFRlbXBlcmF0dXJlIFJhbmdlIFNlbGVjdCAqLwogCWlmIChkYXRhLT5raW5kID09IGFkdDc0NjEpIHsKQEAgLTg2MCw3ICs4ODgsNyBAQAogCX0KIAogCWNvbmZpZyAmPSAweEJGOwkvKiBydW4gKi8KLQlpZiAoY29uZmlnICE9IGNvbmZpZ19vcmlnKSAvKiBPbmx5IHdyaXRlIGlmIGNoYW5nZWQgKi8KKwlpZiAoY29uZmlnICE9IGRhdGEtPmNvbmZpZ19vcmlnKSAvKiBPbmx5IHdyaXRlIGlmIGNoYW5nZWQgKi8KIAkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIExNOTBfUkVHX1dfQ09ORklHMSwgY29uZmlnKTsKIH0KIApAQCAtODc1LDEwICs5MDMsNDYgQEAKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZjbGllbnQtPmRldiwKIAkJCQkgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX29mZnNldC5kZXZfYXR0cik7CiAKKwkvKiBSZXN0b3JlIGluaXRpYWwgY29uZmlndXJhdGlvbiAqLworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBMTTkwX1JFR19XX0NPTkZJRzEsCisJCQkJICBkYXRhLT5jb25maWdfb3JpZyk7CisKIAlrZnJlZShkYXRhKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgbG05MF9hbGVydChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgZmxhZykKK3sKKwlzdHJ1Y3QgbG05MF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdTggY29uZmlnLCBhbGFybXM7CisKKwlsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9TVEFUVVMsICZhbGFybXMpOworCWlmICgoYWxhcm1zICYgMHg3ZikgPT0gMCkgeworCQlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJFdmVyeXRoaW5nIE9LXG4iKTsKKwl9IGVsc2UgeworCQlpZiAoYWxhcm1zICYgMHg2MSkKKwkJCWRldl93YXJuKCZjbGllbnQtPmRldiwKKwkJCQkgInRlbXAlZCBvdXQgb2YgcmFuZ2UsIHBsZWFzZSBjaGVjayFcbiIsIDEpOworCQlpZiAoYWxhcm1zICYgMHgxYSkKKwkJCWRldl93YXJuKCZjbGllbnQtPmRldiwKKwkJCQkgInRlbXAlZCBvdXQgb2YgcmFuZ2UsIHBsZWFzZSBjaGVjayFcbiIsIDIpOworCQlpZiAoYWxhcm1zICYgMHgwNCkKKwkJCWRldl93YXJuKCZjbGllbnQtPmRldiwKKwkJCQkgInRlbXAlZCBkaW9kZSBvcGVuLCBwbGVhc2UgY2hlY2shXG4iLCAyKTsKKworCQkvKiBEaXNhYmxlIEFMRVJUIyBvdXRwdXQsIGJlY2F1c2UgdGhlc2UgY2hpcHMgZG9uJ3QgaW1wbGVtZW50CisJCSAgU01CdXMgYWxlcnQgY29ycmVjdGx5OyB0aGV5IHNob3VsZCBvbmx5IGhvbGQgdGhlIGFsZXJ0IGxpbmUKKwkJICBsb3cgYnJpZWZseS4gKi8KKwkJaWYgKChkYXRhLT5raW5kID09IGFkbTEwMzIgfHwgZGF0YS0+a2luZCA9PSBhZHQ3NDYxKQorCQkgJiYgKGFsYXJtcyAmIGRhdGEtPmFsZXJ0X2FsYXJtcykpIHsKKwkJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiRGlzYWJsaW5nIEFMRVJUI1xuIik7CisJCQlsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9DT05GSUcxLCAmY29uZmlnKTsKKwkJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBMTTkwX1JFR19XX0NPTkZJRzEsCisJCQkJCQkgIGNvbmZpZyB8IDB4ODApOworCQl9CisJfQorfQorCiBzdGF0aWMgaW50IGxtOTBfcmVhZDE2KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZ2gsIHU4IHJlZ2wsIHUxNiAqdmFsdWUpCiB7CiAJaW50IGVycjsKQEAgLTk2Niw2ICsxMDMwLDIxIEBACiAJCX0KIAkJbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfU1RBVFVTLCAmZGF0YS0+YWxhcm1zKTsKIAorCQkvKiBSZS1lbmFibGUgQUxFUlQjIG91dHB1dCBpZiBpdCB3YXMgb3JpZ2luYWxseSBlbmFibGVkIGFuZAorCQkgKiByZWxldmFudCBhbGFybXMgYXJlIGFsbCBjbGVhciAqLworCQlpZiAoKGRhdGEtPmNvbmZpZ19vcmlnICYgMHg4MCkgPT0gMAorCQkgJiYgKGRhdGEtPmFsYXJtcyAmIGRhdGEtPmFsZXJ0X2FsYXJtcykgPT0gMCkgeworCQkJdTggY29uZmlnOworCisJCQlsbTkwX3JlYWRfcmVnKGNsaWVudCwgTE05MF9SRUdfUl9DT05GSUcxLCAmY29uZmlnKTsKKwkJCWlmIChjb25maWcgJiAweDgwKSB7CisJCQkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJSZS1lbmFibGluZyBBTEVSVCNcbiIpOworCQkJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQkJCSAgTE05MF9SRUdfV19DT05GSUcxLAorCQkJCQkJCSAgY29uZmlnICYgfjB4ODApOworCQkJfQorCQl9CisKIAkJZGF0YS0+bGFzdF91cGRhdGVkID0gamlmZmllczsKIAkJZGF0YS0+dmFsaWQgPSAxOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdG1wNDAxLmMgYi9kcml2ZXJzL2h3bW9uL3RtcDQwMS5jCmluZGV4IGExM2IzMGUuLmQxNGExYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdG1wNDAxLmMKKysrIGIvZHJpdmVycy9od21vbi90bXA0MDEuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogCWNoYXIgdmFsaWQ7IC8qIHplcm8gdW50aWwgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsgLyogaW4gamlmZmllcyAqLwotCWludCBraW5kOworCWVudW0gY2hpcHMga2luZDsKIAogCS8qIHJlZ2lzdGVyIHZhbHVlcyAqLwogCXU4IHN0YXR1czsKQEAgLTUyNCw3ICs1MjQsNyBAQAogCWlmIChyZWcgPiAxNSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlzdHJsY3B5KGluZm8tPnR5cGUsIHRtcDQwMV9pZFtraW5kIC0gMV0ubmFtZSwgSTJDX05BTUVfU0laRSk7CisJc3RybGNweShpbmZvLT50eXBlLCB0bXA0MDFfaWRba2luZF0ubmFtZSwgSTJDX05BTUVfU0laRSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU3Miw4ICs1NzIsNyBAQAogCQlnb3RvIGV4aXRfcmVtb3ZlOwogCX0KIAotCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIkRldGVjdGVkIFRJICVzIGNoaXBcbiIsCi0JCSBuYW1lc1tkYXRhLT5raW5kIC0gMV0pOworCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIkRldGVjdGVkIFRJICVzIGNoaXBcbiIsIG5hbWVzW2RhdGEtPmtpbmRdKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3RtcDQyMS5jIGIvZHJpdmVycy9od21vbi90bXA0MjEuYwppbmRleCA0ZjdjMDUxLi43MzhjNDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3RtcDQyMS5jCisrKyBiL2RyaXZlcnMvaHdtb24vdG1wNDIxLmMKQEAgLTYxLDkgKzYxLDkgQEAKICNkZWZpbmUgVE1QNDIzX0RFVklDRV9JRAkJCTB4MjMKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHRtcDQyMV9pZFtdID0gewotCXsgInRtcDQyMSIsIHRtcDQyMSB9LAotCXsgInRtcDQyMiIsIHRtcDQyMiB9LAotCXsgInRtcDQyMyIsIHRtcDQyMyB9LAorCXsgInRtcDQyMSIsIDIgfSwKKwl7ICJ0bXA0MjIiLCAzIH0sCisJeyAidG1wNDIzIiwgNCB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0bXA0MjFfaWQpOwpAQCAtNzMsMjEgKzczLDIzIEBACiAJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogCWNoYXIgdmFsaWQ7CiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7Ci0JaW50IGtpbmQ7CisJaW50IGNoYW5uZWxzOwogCXU4IGNvbmZpZzsKIAlzMTYgdGVtcFs0XTsKIH07CiAKIHN0YXRpYyBpbnQgdGVtcF9mcm9tX3MxNihzMTYgcmVnKQogewotCWludCB0ZW1wID0gcmVnOworCS8qIE1hc2sgb3V0IHN0YXR1cyBiaXRzICovCisJaW50IHRlbXAgPSByZWcgJiB+MHhmOwogCiAJcmV0dXJuICh0ZW1wICogMTAwMCArIDEyOCkgLyAyNTY7CiB9CiAKIHN0YXRpYyBpbnQgdGVtcF9mcm9tX3UxNih1MTYgcmVnKQogewotCWludCB0ZW1wID0gcmVnOworCS8qIE1hc2sgb3V0IHN0YXR1cyBiaXRzICovCisJaW50IHRlbXAgPSByZWcgJiB+MHhmOwogCiAJLyogQWRkIG9mZnNldCBmb3IgZXh0ZW5kZWQgdGVtcGVyYXR1cmUgcmFuZ2UuICovCiAJdGVtcCAtPSA2NCAqIDI1NjsKQEAgLTEwNyw3ICsxMDksNyBAQAogCQlkYXRhLT5jb25maWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAogCQkJVE1QNDIxX0NPTkZJR19SRUdfMSk7CiAKLQkJZm9yIChpID0gMDsgaSA8PSBkYXRhLT5raW5kOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IGRhdGEtPmNoYW5uZWxzOyBpKyspIHsKIAkJCWRhdGEtPnRlbXBbaV0gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAogCQkJCVRNUDQyMV9URU1QX01TQltpXSkgPDwgODsKIAkJCWRhdGEtPnRlbXBbaV0gfD0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKQEAgLTE2Niw3ICsxNjgsNyBAQAogCWRldmF0dHIgPSBjb250YWluZXJfb2YoYSwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUsIGF0dHIpOwogCWluZGV4ID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpLT5pbmRleDsKIAotCWlmIChkYXRhLT5raW5kID4gaW5kZXgpCisJaWYgKGluZGV4IDwgZGF0YS0+Y2hhbm5lbHMpCiAJCXJldHVybiBhLT5tb2RlOwogCiAJcmV0dXJuIDA7CkBAIC0yNTIsOSArMjU0LDkgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0Jc3RybGNweShpbmZvLT50eXBlLCB0bXA0MjFfaWRba2luZCAtIDFdLm5hbWUsIEkyQ19OQU1FX1NJWkUpOworCXN0cmxjcHkoaW5mby0+dHlwZSwgdG1wNDIxX2lkW2tpbmRdLm5hbWUsIEkyQ19OQU1FX1NJWkUpOwogCWRldl9pbmZvKCZhZGFwdGVyLT5kZXYsICJEZXRlY3RlZCBUSSAlcyBjaGlwIGF0IDB4JTAyeFxuIiwKLQkJIG5hbWVzW2tpbmQgLSAxXSwgY2xpZW50LT5hZGRyKTsKKwkJIG5hbWVzW2tpbmRdLCBjbGllbnQtPmFkZHIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNzEsNyArMjczLDcgQEAKIAogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOwogCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQlkYXRhLT5raW5kID0gaWQtPmRyaXZlcl9kYXRhOworCWRhdGEtPmNoYW5uZWxzID0gaWQtPmRyaXZlcl9kYXRhOwogCiAJZXJyID0gdG1wNDIxX2luaXRfY2xpZW50KGNsaWVudCk7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdnQ4MjMxLmMgYi9kcml2ZXJzL2h3bW9uL3Z0ODIzMS5jCmluZGV4IGQ0N2I0YzkuLmU2MDc4YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdnQ4MjMxLmMKKysrIGIvZHJpdmVycy9od21vbi92dDgyMzEuYwpAQCAtOTQ4LDggKzk0OCw3IEBACiAKIAlhZGRyZXNzID0gdmFsICYgfihWVDgyMzFfRVhURU5UIC0gMSk7CiAJaWYgKGFkZHJlc3MgPT0gMCkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgImJhc2UgYWRkcmVzcyBub3Qgc2V0IC1cCi0JCQkJIHVwZ3JhZGUgQklPUyBvciB1c2UgZm9yY2VfYWRkcj0weGFkZHJcbiIpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgImJhc2UgYWRkcmVzcyBub3Qgc2V0IC0gdXBncmFkZSBCSU9TIG9yIHVzZSBmb3JjZV9hZGRyPTB4YWRkclxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi93ODM3OTMuYyBiL2RyaXZlcnMvaHdtb24vdzgzNzkzLmMKaW5kZXggOWEyMDIyYi4uOWRlODFhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi93ODM3OTMuYworKysgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5My5jCkBAIC0zLDYgKzMsMTAgQEAKICAgICBDb3B5cmlnaHQgKEMpIDIwMDYgV2luYm9uZCBFbGVjdHJvbmljcyBDb3JwLgogICAgICAgICAgICAgICAgICAgWXVhbiBNdQogICAgICAgICAgICAgICAgICAgUnVkb2xmIE1hcmVrIDxyLm1hcmVrQGFzc2VtYmxlci5jej4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTdmVuIEFuZGVycyA8YW5kZXJzQGFuZHVyYXMuZGU+LCBBTkRVUkFTIEFHLgorCQkgIFdhdGNoZG9nIGRyaXZlciBwYXJ0CisJCSAgKEJhc2VkIHBhcnRpYWxseSBvbiBmc2NobWQgZHJpdmVyLAorCQkgICBDb3B5cmlnaHQgMjAwNy0yMDA4IGJ5IEhhbnMgZGUgR29lZGUpCiAKICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zNSw2ICszOSwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKworLyogRGVmYXVsdCB2YWx1ZXMgKi8KKyNkZWZpbmUgV0FUQ0hET0dfVElNRU9VVCAyCS8qIDIgbWludXRlIGRlZmF1bHQgdGltZW91dCAqLwogCiAvKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwKQEAgLTUxLDYgKzY1LDE4IEBACiBtb2R1bGVfcGFyYW0ocmVzZXQsIGJvb2wsIDApOwogTU9EVUxFX1BBUk1fREVTQyhyZXNldCwgIlNldCB0byAxIHRvIHJlc2V0IGNoaXAsIG5vdCByZWNvbW1lbmRlZCIpOwogCitzdGF0aWMgaW50IHRpbWVvdXQgPSBXQVRDSERPR19USU1FT1VUOwkvKiBkZWZhdWx0IHRpbWVvdXQgaW4gbWludXRlcyAqLworbW9kdWxlX3BhcmFtKHRpbWVvdXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHRpbWVvdXQsCisJIldhdGNoZG9nIHRpbWVvdXQgaW4gbWludXRlcy4gMjw9IHRpbWVvdXQgPD0yNTUgKGRlZmF1bHQ9IgorCQkJCV9fTU9EVUxFX1NUUklORyhXQVRDSERPR19USU1FT1VUKSAiKSIpOworCitzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7Cittb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LAorCSJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9IgorCQkJCV9fTU9EVUxFX1NUUklORyhXQVRDSERPR19OT1dBWU9VVCkgIikiKTsKKwogLyoKICAgIEFkZHJlc3MgMHgwMCwgMHgwZCwgMHgwZSwgMHgwZiBpbiBhbGwgdGhyZWUgYmFua3MgYXJlIHJlc2VydmVkCiAgICBhcyBJRCwgQmFuayBTZWxlY3QgcmVnaXN0ZXJzCkBAIC03Miw2ICs5OCwxMSBAQAogI2RlZmluZSBXODM3OTNfUkVHX1ZJRF9MQVRDSEIJCTB4MDgKICNkZWZpbmUgVzgzNzkzX1JFR19WSURfQ1RSTAkJMHg1OQogCisjZGVmaW5lIFc4Mzc5M19SRUdfV0RUX0xPQ0sJCTB4MDEKKyNkZWZpbmUgVzgzNzkzX1JFR19XRFRfRU5BQkxFCQkweDAyCisjZGVmaW5lIFc4Mzc5M19SRUdfV0RUX1NUQVRVUwkJMHgwMworI2RlZmluZSBXODM3OTNfUkVHX1dEVF9USU1FT1VUCQkweDA0CisKIHN0YXRpYyB1MTYgVzgzNzkzX1JFR19URU1QX01PREVbMl0gPSB7IDB4NWUsIDB4NWYgfTsKIAogI2RlZmluZSBURU1QX1JFQUQJMApAQCAtMjIzLDggKzI1NCwzNyBAQAogCXU4IHRvbGVyYW5jZVszXTsJLyogVGVtcCB0b2xlcmFuY2UoU21hcnQgRmFuIEkvSUkpICovCiAJdTggc2YyX3B3bVs2XVs3XTsJLyogU21hcnQgRmFuSUk6IEZhbiBkdXR5IGN5Y2xlICovCiAJdTggc2YyX3RlbXBbNl1bN107CS8qIFNtYXJ0IEZhbklJOiBUZW1wIGxldmVsIHBvaW50ICovCisKKwkvKiB3YXRjaGRvZyAqLworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IG11dGV4IHdhdGNoZG9nX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OyAvKiBtZW1iZXIgb2YgdGhlIHdhdGNoZG9nX2RhdGFfbGlzdCAqLworCXN0cnVjdCBrcmVmIGtyZWY7CisJc3RydWN0IG1pc2NkZXZpY2Ugd2F0Y2hkb2dfbWlzY2RldjsKKwl1bnNpZ25lZCBsb25nIHdhdGNoZG9nX2lzX29wZW47CisJY2hhciB3YXRjaGRvZ19leHBlY3RfY2xvc2U7CisJY2hhciB3YXRjaGRvZ19uYW1lWzEwXTsgLyogbXVzdCBiZSB1bmlxdWUgdG8gYXZvaWQgc3lzZnMgY29uZmxpY3QgKi8KKwl1bnNpZ25lZCBpbnQgd2F0Y2hkb2dfY2F1c2VkX3JlYm9vdDsKKwlpbnQgd2F0Y2hkb2dfdGltZW91dDsgLyogd2F0Y2hkb2cgdGltZW91dCBpbiBtaW51dGVzICovCiB9OwogCisvKiBTb21ld2hhdCB1Z2x5IDooIGdsb2JhbCBkYXRhIHBvaW50ZXIgbGlzdCB3aXRoIGFsbCBkZXZpY2VzLCBzbyB0aGF0CisgICB3ZSBjYW4gZmluZCBvdXIgZGV2aWNlIGRhdGEgYXMgd2hlbiB1c2luZyBtaXNjX3JlZ2lzdGVyLiBUaGVyZSBpcyBubworICAgb3RoZXIgbWV0aG9kIHRvIGdldCB0byBvbmUncyBkZXZpY2UgZGF0YSBmcm9tIHRoZSBvcGVuIGZpbGUtb3AgYW5kCisgICBmb3IgdXNhZ2UgaW4gdGhlIHJlYm9vdCBub3RpZmllciBjYWxsYmFjay4gKi8KK3N0YXRpYyBMSVNUX0hFQUQod2F0Y2hkb2dfZGF0YV9saXN0KTsKKworLyogTm90ZSB0aGlzIGxvY2sgbm90IG9ubHkgcHJvdGVjdCBsaXN0IGFjY2VzcywgYnV0IGFsc28gZGF0YS5rcmVmIGFjY2VzcyAqLworc3RhdGljIERFRklORV9NVVRFWCh3YXRjaGRvZ19kYXRhX211dGV4KTsKKworLyogUmVsZWFzZSBvdXIgZGF0YSBzdHJ1Y3Qgd2hlbiB3ZSdyZSBkZXRhY2hlZCBmcm9tIHRoZSBpMmMgY2xpZW50ICphbmQqIGFsbAorICAgcmVmZXJlbmNlcyB0byBvdXIgd2F0Y2hkb2cgZGV2aWNlIGFyZSByZWxlYXNlZCAqLworc3RhdGljIHZvaWQgdzgzNzkzX3JlbGVhc2VfcmVzb3VyY2VzKHN0cnVjdCBrcmVmICpyZWYpCit7CisJc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IHc4Mzc5M19kYXRhLCBrcmVmKTsKKwlrZnJlZShkYXRhKTsKK30KKwogc3RhdGljIHU4IHc4Mzc5M19yZWFkX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiByZWcpOwogc3RhdGljIGludCB3ODM3OTNfd3JpdGVfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTE2IHJlZywgdTggdmFsdWUpOwogc3RhdGljIGludCB3ODM3OTNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKQEAgLTEwNjMsMTQgKzExMjMsMzQ5IEBACiAJLyogU3RhcnQgbW9uaXRvcmluZyAqLwogCXc4Mzc5M193cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfQ09ORklHLAogCQkJICAgdzgzNzkzX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX0NPTkZJRykgfCAweDAxKTsKLQogfQogCisvKgorICogV2F0Y2hkb2cgcm91dGluZXMKKyAqLworCitzdGF0aWMgaW50IHdhdGNoZG9nX3NldF90aW1lb3V0KHN0cnVjdCB3ODM3OTNfZGF0YSAqZGF0YSwgaW50IHRpbWVvdXQpCit7CisJaW50IHJldCwgbXRpbWVvdXQ7CisKKwltdGltZW91dCA9IERJVl9ST1VORF9VUCh0aW1lb3V0LCA2MCk7CisKKwlpZiAobXRpbWVvdXQgPiAyNTUpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmZGF0YS0+d2F0Y2hkb2dfbG9jayk7CisJaWYgKCFkYXRhLT5jbGllbnQpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwlkYXRhLT53YXRjaGRvZ190aW1lb3V0ID0gbXRpbWVvdXQ7CisKKwkvKiBTZXQgVGltZW91dCB2YWx1ZSAoaW4gTWludXRlcykgKi8KKwl3ODM3OTNfd3JpdGVfdmFsdWUoZGF0YS0+Y2xpZW50LCBXODM3OTNfUkVHX1dEVF9USU1FT1VULAorCQkJICAgZGF0YS0+d2F0Y2hkb2dfdGltZW91dCk7CisKKwlyZXQgPSBtdGltZW91dCAqIDYwOworCitsZWF2ZToKKwltdXRleF91bmxvY2soJmRhdGEtPndhdGNoZG9nX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd2F0Y2hkb2dfZ2V0X3RpbWVvdXQoc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhKQoreworCWludCB0aW1lb3V0OworCisJbXV0ZXhfbG9jaygmZGF0YS0+d2F0Y2hkb2dfbG9jayk7CisJdGltZW91dCA9IGRhdGEtPndhdGNoZG9nX3RpbWVvdXQgKiA2MDsKKwltdXRleF91bmxvY2soJmRhdGEtPndhdGNoZG9nX2xvY2spOworCisJcmV0dXJuIHRpbWVvdXQ7Cit9CisKK3N0YXRpYyBpbnQgd2F0Y2hkb2dfdHJpZ2dlcihzdHJ1Y3QgdzgzNzkzX2RhdGEgKmRhdGEpCit7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZkYXRhLT53YXRjaGRvZ19sb2NrKTsKKwlpZiAoIWRhdGEtPmNsaWVudCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGxlYXZlOworCX0KKworCS8qIFNldCBUaW1lb3V0IHZhbHVlIChpbiBNaW51dGVzKSAqLworCXc4Mzc5M193cml0ZV92YWx1ZShkYXRhLT5jbGllbnQsIFc4Mzc5M19SRUdfV0RUX1RJTUVPVVQsCisJCQkgICBkYXRhLT53YXRjaGRvZ190aW1lb3V0KTsKKworbGVhdmU6CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT53YXRjaGRvZ19sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdhdGNoZG9nX2VuYWJsZShzdHJ1Y3QgdzgzNzkzX2RhdGEgKmRhdGEpCit7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZkYXRhLT53YXRjaGRvZ19sb2NrKTsKKwlpZiAoIWRhdGEtPmNsaWVudCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGxlYXZlOworCX0KKworCS8qIFNldCBpbml0aWFsIHRpbWVvdXQgKi8KKwl3ODM3OTNfd3JpdGVfdmFsdWUoZGF0YS0+Y2xpZW50LCBXODM3OTNfUkVHX1dEVF9USU1FT1VULAorCQkJICAgZGF0YS0+d2F0Y2hkb2dfdGltZW91dCk7CisKKwkvKiBFbmFibGUgU29mdCBXYXRjaGRvZyAqLworCXc4Mzc5M193cml0ZV92YWx1ZShkYXRhLT5jbGllbnQsIFc4Mzc5M19SRUdfV0RUX0xPQ0ssIDB4NTUpOworCitsZWF2ZToKKwltdXRleF91bmxvY2soJmRhdGEtPndhdGNoZG9nX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd2F0Y2hkb2dfZGlzYWJsZShzdHJ1Y3QgdzgzNzkzX2RhdGEgKmRhdGEpCit7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZkYXRhLT53YXRjaGRvZ19sb2NrKTsKKwlpZiAoIWRhdGEtPmNsaWVudCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGxlYXZlOworCX0KKworCS8qIERpc2FibGUgU29mdCBXYXRjaGRvZyAqLworCXc4Mzc5M193cml0ZV92YWx1ZShkYXRhLT5jbGllbnQsIFc4Mzc5M19SRUdfV0RUX0xPQ0ssIDB4QUEpOworCitsZWF2ZToKKwltdXRleF91bmxvY2soJmRhdGEtPndhdGNoZG9nX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd2F0Y2hkb2dfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgdzgzNzkzX2RhdGEgKnBvcywgKmRhdGEgPSBOVUxMOworCWludCB3YXRjaGRvZ19pc19vcGVuOworCisJLyogV2UgZ2V0IGNhbGxlZCBmcm9tIGRyaXZlcnMvY2hhci9taXNjLmMgd2l0aCBtaXNjX210eCBob2xkLCBhbmQgd2UKKwkgICBjYWxsIG1pc2NfcmVnaXN0ZXIoKSBmcm9tICB3ODM3OTNfcHJvYmUoKSB3aXRoIHdhdGNoZG9nX2RhdGFfbXV0ZXgKKwkgICBob2xkLCBhcyBtaXNjX3JlZ2lzdGVyKCkgdGFrZXMgdGhlIG1pc2NfbXR4IGxvY2ssIHRoaXMgaXMgYSBwb3NzaWJsZQorCSAgIGRlYWRsb2NrLCBzbyB3ZSB1c2UgbXV0ZXhfdHJ5bG9jayBoZXJlLiAqLworCWlmICghbXV0ZXhfdHJ5bG9jaygmd2F0Y2hkb2dfZGF0YV9tdXRleCkpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZ3YXRjaGRvZ19kYXRhX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHBvcy0+d2F0Y2hkb2dfbWlzY2Rldi5taW5vciA9PSBpbWlub3IoaW5vZGUpKSB7CisJCQlkYXRhID0gcG9zOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBDaGVjaywgaWYgZGV2aWNlIGlzIGFscmVhZHkgb3BlbiAqLworCXdhdGNoZG9nX2lzX29wZW4gPSB0ZXN0X2FuZF9zZXRfYml0KDAsICZkYXRhLT53YXRjaGRvZ19pc19vcGVuKTsKKworCS8qIEluY3JlYXNlIGRhdGEgcmVmZXJlbmNlIGNvdW50ZXIgKGlmIG5vdCBhbHJlYWR5IGRvbmUpLgorCSAgIE5vdGUgd2UgY2FuIG5ldmVyIG5vdCBoYXZlIGZvdW5kIGRhdGEsIHNvIHdlIGRvbid0IGNoZWNrIGZvciB0aGlzICovCisJaWYgKCF3YXRjaGRvZ19pc19vcGVuKQorCQlrcmVmX2dldCgmZGF0YS0+a3JlZik7CisKKwltdXRleF91bmxvY2soJndhdGNoZG9nX2RhdGFfbXV0ZXgpOworCisJLyogQ2hlY2ssIGlmIGRldmljZSBpcyBhbHJlYWR5IG9wZW4gYW5kIHBvc3NpYmx5IGlzc3VlIGVycm9yICovCisJaWYgKHdhdGNoZG9nX2lzX29wZW4pCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBFbmFibGUgU29mdCBXYXRjaGRvZyAqLworCXdhdGNoZG9nX2VuYWJsZShkYXRhKTsKKworCS8qIFN0b3JlIHBvaW50ZXIgdG8gZGF0YSBpbnRvIGZpbHAncyBwcml2YXRlIGRhdGEgKi8KKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBkYXRhOworCisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbHApOworfQorCitzdGF0aWMgaW50IHdhdGNoZG9nX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCB3ODM3OTNfZGF0YSAqZGF0YSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKworCWlmIChkYXRhLT53YXRjaGRvZ19leHBlY3RfY2xvc2UpIHsKKwkJd2F0Y2hkb2dfZGlzYWJsZShkYXRhKTsKKwkJZGF0YS0+d2F0Y2hkb2dfZXhwZWN0X2Nsb3NlID0gMDsKKwl9IGVsc2UgeworCQl3YXRjaGRvZ190cmlnZ2VyKGRhdGEpOworCQlkZXZfY3JpdCgmZGF0YS0+Y2xpZW50LT5kZXYsCisJCQkidW5leHBlY3RlZCBjbG9zZSwgbm90IHN0b3BwaW5nIHdhdGNoZG9nIVxuIik7CisJfQorCisJY2xlYXJfYml0KDAsICZkYXRhLT53YXRjaGRvZ19pc19vcGVuKTsKKworCS8qIERlY3JlYXNlIGRhdGEgcmVmZXJlbmNlIGNvdW50ZXIgKi8KKwltdXRleF9sb2NrKCZ3YXRjaGRvZ19kYXRhX211dGV4KTsKKwlrcmVmX3B1dCgmZGF0YS0+a3JlZiwgdzgzNzkzX3JlbGVhc2VfcmVzb3VyY2VzKTsKKwltdXRleF91bmxvY2soJndhdGNoZG9nX2RhdGFfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHdhdGNoZG9nX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCXNpemVfdCBjb3VudCwgbG9mZl90ICpvZmZzZXQpCit7CisJc2l6ZV90IHJldDsKKwlzdHJ1Y3QgdzgzNzkzX2RhdGEgKmRhdGEgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoY291bnQpIHsKKwkJaWYgKCFub3dheW91dCkgeworCQkJc2l6ZV90IGk7CisKKwkJCS8qIENsZWFyIGl0IGluIGNhc2UgaXQgd2FzIHNldCB3aXRoIGEgcHJldmlvdXMgd3JpdGUgKi8KKwkJCWRhdGEtPndhdGNoZG9nX2V4cGVjdF9jbG9zZSA9IDA7CisKKwkJCWZvciAoaSA9IDA7IGkgIT0gY291bnQ7IGkrKykgeworCQkJCWNoYXIgYzsKKwkJCQlpZiAoZ2V0X3VzZXIoYywgYnVmICsgaSkpCisJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCWlmIChjID09ICdWJykKKwkJCQkJZGF0YS0+d2F0Y2hkb2dfZXhwZWN0X2Nsb3NlID0gMTsKKwkJCX0KKwkJfQorCQlyZXQgPSB3YXRjaGRvZ190cmlnZ2VyKGRhdGEpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludCB3YXRjaGRvZ19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0geworCQkub3B0aW9ucyA9IFdESU9GX0tFRVBBTElWRVBJTkcgfAorCQkJICAgV0RJT0ZfU0VUVElNRU9VVCB8CisJCQkgICBXRElPRl9DQVJEUkVTRVQsCisJCS5pZGVudGl0eSA9ICJ3ODM3OTMgd2F0Y2hkb2ciCisJfTsKKworCWludCB2YWwsIHJldCA9IDA7CisJc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFdESU9DX0dFVFNVUFBPUlQ6CisJCWlmICghbm93YXlvdXQpCisJCQlpZGVudC5vcHRpb25zIHw9IFdESU9GX01BR0lDQ0xPU0U7CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmaWRlbnQsIHNpemVvZihpZGVudCkpKQorCQkJcmV0ID0gLUVGQVVMVDsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX0dFVFNUQVRVUzoKKwkJdmFsID0gZGF0YS0+d2F0Y2hkb2dfY2F1c2VkX3JlYm9vdCA/IFdESU9GX0NBUkRSRVNFVCA6IDA7CisJCXJldCA9IHB1dF91c2VyKHZhbCwgKGludCBfX3VzZXIgKilhcmcpOworCQlicmVhazsKKworCWNhc2UgV0RJT0NfR0VUQk9PVFNUQVRVUzoKKwkJcmV0ID0gcHV0X3VzZXIoMCwgKGludCBfX3VzZXIgKilhcmcpOworCQlicmVhazsKKworCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgorCQlyZXQgPSB3YXRjaGRvZ190cmlnZ2VyKGRhdGEpOworCQlicmVhazsKKworCWNhc2UgV0RJT0NfR0VUVElNRU9VVDoKKwkJdmFsID0gd2F0Y2hkb2dfZ2V0X3RpbWVvdXQoZGF0YSk7CisJCXJldCA9IHB1dF91c2VyKHZhbCwgKGludCBfX3VzZXIgKilhcmcpOworCQlicmVhazsKKworCWNhc2UgV0RJT0NfU0VUVElNRU9VVDoKKwkJaWYgKGdldF91c2VyKHZhbCwgKGludCBfX3VzZXIgKilhcmcpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKwkJcmV0ID0gd2F0Y2hkb2dfc2V0X3RpbWVvdXQoZGF0YSwgdmFsKTsKKwkJaWYgKHJldCA+IDApCisJCQlyZXQgPSBwdXRfdXNlcihyZXQsIChpbnQgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX1NFVE9QVElPTlM6CisJCWlmIChnZXRfdXNlcih2YWwsIChpbnQgX191c2VyICopYXJnKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHZhbCAmIFdESU9TX0RJU0FCTEVDQVJEKQorCQkJcmV0ID0gd2F0Y2hkb2dfZGlzYWJsZShkYXRhKTsKKwkJZWxzZSBpZiAodmFsICYgV0RJT1NfRU5BQkxFQ0FSRCkKKwkJCXJldCA9IHdhdGNoZG9nX2VuYWJsZShkYXRhKTsKKwkJZWxzZQorCQkJcmV0ID0gLUVJTlZBTDsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU5PVFRZOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdhdGNoZG9nX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmxsc2VlayA9IG5vX2xsc2VlaywKKwkub3BlbiA9IHdhdGNoZG9nX29wZW4sCisJLnJlbGVhc2UgPSB3YXRjaGRvZ19jbG9zZSwKKwkud3JpdGUgPSB3YXRjaGRvZ193cml0ZSwKKwkuaW9jdGwgPSB3YXRjaGRvZ19pb2N0bCwKK307CisKKy8qCisgKglOb3RpZmllciBmb3Igc3lzdGVtIGRvd24KKyAqLworCitzdGF0aWMgaW50IHdhdGNoZG9nX25vdGlmeV9zeXMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGNvZGUsCisJCQkgICAgICAgdm9pZCAqdW51c2VkKQoreworCXN0cnVjdCB3ODM3OTNfZGF0YSAqZGF0YSA9IE5VTEw7CisKKwlpZiAoY29kZSA9PSBTWVNfRE9XTiB8fCBjb2RlID09IFNZU19IQUxUKSB7CisKKwkJLyogRGlzYWJsZSBlYWNoIHJlZ2lzdGVyZWQgd2F0Y2hkb2cgKi8KKwkJbXV0ZXhfbG9jaygmd2F0Y2hkb2dfZGF0YV9tdXRleCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZGF0YSwgJndhdGNoZG9nX2RhdGFfbGlzdCwgbGlzdCkgeworCQkJaWYgKGRhdGEtPndhdGNoZG9nX21pc2NkZXYubWlub3IpCisJCQkJd2F0Y2hkb2dfZGlzYWJsZShkYXRhKTsKKwkJfQorCQltdXRleF91bmxvY2soJndhdGNoZG9nX2RhdGFfbXV0ZXgpOworCX0KKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworLyoKKyAqCVRoZSBXRFQgbmVlZHMgdG8gbGVhcm4gYWJvdXQgc29mdCBzaHV0ZG93bnMgaW4gb3JkZXIgdG8KKyAqCXR1cm4gdGhlIHRpbWVib21iIHJlZ2lzdGVycyBvZmYuCisgKi8KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB3YXRjaGRvZ19ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IHdhdGNoZG9nX25vdGlmeV9zeXMsCit9OworCisvKgorICogSW5pdCAvIHJlbW92ZSByb3V0aW5lcworICovCisKIHN0YXRpYyBpbnQgdzgzNzkzX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCB3ODM3OTNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKLQlpbnQgaTsKKwlpbnQgaSwgdG1wOworCisJLyogVW5yZWdpc3RlciB0aGUgd2F0Y2hkb2cgKGlmIHJlZ2lzdGVyZWQpICovCisJaWYgKGRhdGEtPndhdGNoZG9nX21pc2NkZXYubWlub3IpIHsKKwkJbWlzY19kZXJlZ2lzdGVyKCZkYXRhLT53YXRjaGRvZ19taXNjZGV2KTsKKworCQlpZiAoZGF0YS0+d2F0Y2hkb2dfaXNfb3BlbikgeworCQkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LAorCQkJCSJpMmMgY2xpZW50IGRldGFjaGVkIHdpdGggd2F0Y2hkb2cgb3BlbiEgIgorCQkJCSJTdG9wcGluZyB3YXRjaGRvZy5cbiIpOworCQkJd2F0Y2hkb2dfZGlzYWJsZShkYXRhKTsKKwkJfQorCisJCW11dGV4X2xvY2soJndhdGNoZG9nX2RhdGFfbXV0ZXgpOworCQlsaXN0X2RlbCgmZGF0YS0+bGlzdCk7CisJCW11dGV4X3VubG9jaygmd2F0Y2hkb2dfZGF0YV9tdXRleCk7CisKKwkJLyogVGVsbCB0aGUgd2F0Y2hkb2cgY29kZSB0aGUgY2xpZW50IGlzIGdvbmUgKi8KKwkJbXV0ZXhfbG9jaygmZGF0YS0+d2F0Y2hkb2dfbG9jayk7CisJCWRhdGEtPmNsaWVudCA9IE5VTEw7CisJCW11dGV4X3VubG9jaygmZGF0YS0+d2F0Y2hkb2dfbG9jayk7CisJfQorCisJLyogUmVzZXQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciB0byBEaXNhYmxlIFdhdGNoIERvZyBSZWdpc3RlcnMgKi8KKwl0bXAgPSB3ODM3OTNfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfQ09ORklHKTsKKwl3ODM3OTNfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX0NPTkZJRywgdG1wICYgfjB4MDQpOworCisJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJndhdGNoZG9nX25vdGlmaWVyKTsKIAogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CiAKQEAgLTEwOTksNyArMTQ5NCwxMCBAQAogCWlmIChkYXRhLT5sbTc1WzFdICE9IE5VTEwpCiAJCWkyY191bnJlZ2lzdGVyX2RldmljZShkYXRhLT5sbTc1WzFdKTsKIAotCWtmcmVlKGRhdGEpOworCS8qIERlY3JlYXNlIGRhdGEgcmVmZXJlbmNlIGNvdW50ZXIgKi8KKwltdXRleF9sb2NrKCZ3YXRjaGRvZ19kYXRhX211dGV4KTsKKwlrcmVmX3B1dCgmZGF0YS0+a3JlZiwgdzgzNzkzX3JlbGVhc2VfcmVzb3VyY2VzKTsKKwltdXRleF91bmxvY2soJndhdGNoZG9nX2RhdGFfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjAzLDYgKzE2MDEsNyBAQAogCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKKwljb25zdCBpbnQgd2F0Y2hkb2dfbWlub3JzW10gPSB7IFdBVENIRE9HX01JTk9SLCAyMTIsIDIxMywgMjE0LCAyMTUgfTsKIAlzdHJ1Y3QgdzgzNzkzX2RhdGEgKmRhdGE7CiAJaW50IGksIHRtcCwgdmFsLCBlcnI7CiAJaW50IGZpbGVzX2ZhbiA9IEFSUkFZX1NJWkUodzgzNzkzX2xlZnRfZmFuKSAvIDc7CkBAIC0xMjE4LDYgKzE2MTcsMTQgQEAKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKIAlkYXRhLT5iYW5rID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgVzgzNzkzX1JFR19CQU5LU0VMKTsKIAltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CisJbXV0ZXhfaW5pdCgmZGF0YS0+d2F0Y2hkb2dfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmRhdGEtPmxpc3QpOworCWtyZWZfaW5pdCgmZGF0YS0+a3JlZik7CisKKwkvKiBTdG9yZSBjbGllbnQgcG9pbnRlciBpbiBvdXIgZGF0YSBzdHJ1Y3QgZm9yIHdhdGNoZG9nIHVzYWdlCisJICAgKHdoZXJlIHRoZSBjbGllbnQgaXMgZm91bmQgdGhyb3VnaCBhIGRhdGEgcHRyIGluc3RlYWQgb2YgdGhlCisJICAgb3RoZXJ3YXkgYXJvdW5kKSAqLworCWRhdGEtPmNsaWVudCA9IGNsaWVudDsKIAogCWVyciA9IHc4Mzc5M19kZXRlY3Rfc3ViY2xpZW50cyhjbGllbnQpOwogCWlmIChlcnIpCkBAIC0xMzgwLDggKzE3ODcsNzcgQEAKIAkJZ290byBleGl0X3JlbW92ZTsKIAl9CiAKKwkvKiBXYXRjaGRvZyBpbml0aWFsaXphdGlvbiAqLworCisJLyogUmVnaXN0ZXIgYm9vdCBub3RpZmllciAqLworCWVyciA9IHJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmd2F0Y2hkb2dfbm90aWZpZXIpOworCWlmIChlcnIgIT0gMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCSJjYW5ub3QgcmVnaXN0ZXIgcmVib290IG5vdGlmaWVyIChlcnI9JWQpXG4iLCBlcnIpOworCQlnb3RvIGV4aXRfZGV2dW5yZWc7CisJfQorCisJLyogRW5hYmxlIFdhdGNoZG9nIHJlZ2lzdGVycy4KKwkgICBTZXQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciB0byBFbmFibGUgV2F0Y2ggRG9nIFJlZ2lzdGVycworCSAgIChCaXQgMikgPSBYWFhYLCBYMVhYLiAqLworCXRtcCA9IHc4Mzc5M19yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19DT05GSUcpOworCXc4Mzc5M193cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfQ09ORklHLCB0bXAgfCAweDA0KTsKKworCS8qIFNldCB0aGUgZGVmYXVsdCB3YXRjaGRvZyB0aW1lb3V0ICovCisJZGF0YS0+d2F0Y2hkb2dfdGltZW91dCA9IHRpbWVvdXQ7CisKKwkvKiBDaGVjaywgaWYgbGFzdCByZWJvb3Qgd2FzIGNhdXNlZCBieSB3YXRjaGRvZyAqLworCWRhdGEtPndhdGNoZG9nX2NhdXNlZF9yZWJvb3QgPQorCSAgdzgzNzkzX3JlYWRfdmFsdWUoZGF0YS0+Y2xpZW50LCBXODM3OTNfUkVHX1dEVF9TVEFUVVMpICYgMHgwMTsKKworCS8qIERpc2FibGUgU29mdCBXYXRjaGRvZyBkdXJpbmcgaW5pdGlhbGlhdGlvbiAqLworCXdhdGNoZG9nX2Rpc2FibGUoZGF0YSk7CisKKwkvKiBXZSB0YWtlIHRoZSBkYXRhX211dGV4IGxvY2sgZWFybHkgc28gdGhhdCB3YXRjaGRvZ19vcGVuKCkgY2Fubm90CisJICAgcnVuIHdoZW4gbWlzY19yZWdpc3RlcigpIGhhcyBjb21wbGV0ZWQsIGJ1dCB3ZSd2ZSBub3QgeWV0IGFkZGVkCisJICAgb3VyIGRhdGEgdG8gdGhlIHdhdGNoZG9nX2RhdGFfbGlzdCAoYW5kIHNldCB0aGUgZGVmYXVsdCB0aW1lb3V0KSAqLworCW11dGV4X2xvY2soJndhdGNoZG9nX2RhdGFfbXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdhdGNoZG9nX21pbm9ycyk7IGkrKykgeworCQkvKiBSZWdpc3RlciBvdXIgd2F0Y2hkb2cgcGFydCAqLworCQlzbnByaW50ZihkYXRhLT53YXRjaGRvZ19uYW1lLCBzaXplb2YoZGF0YS0+d2F0Y2hkb2dfbmFtZSksCisJCQkid2F0Y2hkb2clYyIsIChpID09IDApID8gJ1wwJyA6ICgnMCcgKyBpKSk7CisJCWRhdGEtPndhdGNoZG9nX21pc2NkZXYubmFtZSA9IGRhdGEtPndhdGNoZG9nX25hbWU7CisJCWRhdGEtPndhdGNoZG9nX21pc2NkZXYuZm9wcyA9ICZ3YXRjaGRvZ19mb3BzOworCQlkYXRhLT53YXRjaGRvZ19taXNjZGV2Lm1pbm9yID0gd2F0Y2hkb2dfbWlub3JzW2ldOworCisJCWVyciA9IG1pc2NfcmVnaXN0ZXIoJmRhdGEtPndhdGNoZG9nX21pc2NkZXYpOworCQlpZiAoZXJyID09IC1FQlVTWSkKKwkJCWNvbnRpbnVlOworCQlpZiAoZXJyKSB7CisJCQlkYXRhLT53YXRjaGRvZ19taXNjZGV2Lm1pbm9yID0gMDsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJCSJSZWdpc3RlcmluZyB3YXRjaGRvZyBjaGFyZGV2OiAlZFxuIiwgZXJyKTsKKwkJCWJyZWFrOworCQl9CisKKwkJbGlzdF9hZGQoJmRhdGEtPmxpc3QsICZ3YXRjaGRvZ19kYXRhX2xpc3QpOworCisJCWRldl9pbmZvKCZjbGllbnQtPmRldiwKKwkJCSJSZWdpc3RlcmVkIHdhdGNoZG9nIGNoYXJkZXYgbWFqb3IgMTAsIG1pbm9yOiAlZFxuIiwKKwkJCXdhdGNoZG9nX21pbm9yc1tpXSk7CisJCWJyZWFrOworCX0KKwlpZiAoaSA9PSBBUlJBWV9TSVpFKHdhdGNoZG9nX21pbm9ycykpIHsKKwkJZGF0YS0+d2F0Y2hkb2dfbWlzY2Rldi5taW5vciA9IDA7CisJCWRldl93YXJuKCZjbGllbnQtPmRldiwgIkNvdWxkbid0IHJlZ2lzdGVyIHdhdGNoZG9nIGNoYXJkZXYgIgorCQkJIihkdWUgdG8gbm8gZnJlZSBtaW5vcilcbiIpOworCX0KKworCW11dGV4X3VubG9jaygmd2F0Y2hkb2dfZGF0YV9tdXRleCk7CisKIAlyZXR1cm4gMDsKIAorCS8qIFVucmVnaXN0ZXIgaHdtb24gZGV2aWNlICovCisKK2V4aXRfZGV2dW5yZWc6CisKKwlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOworCiAJLyogVW5yZWdpc3RlciBzeXNmcyBob29rcyAqLwogCiBleGl0X3JlbW92ZToKQEAgLTE2MjgsNyArMjEwNCw3IEBACiAJaTJjX2RlbF9kcml2ZXIoJnc4Mzc5M19kcml2ZXIpOwogfQogCi1NT0RVTEVfQVVUSE9SKCJZdWFuIE11Iik7CitNT0RVTEVfQVVUSE9SKCJZdWFuIE11LCBTdmVuIEFuZGVycyIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJ3ODM3OTMgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKaW5kZXggNGNjMzgwNy4uOWM2MTcwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKQEAgLTEwNiw2ICsxMDYsOCBAQAogY29uZmlnIEkyQ19JU0NICiAJdHJpc3RhdGUgIkludGVsIFNDSCBTTUJ1cyAxLjAiCiAJZGVwZW5kcyBvbiBQQ0kKKwlzZWxlY3QgTUZEX0NPUkUKKwlzZWxlY3QgTFBDX1NDSAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIFNNQnVzIGNvbnRyb2xsZXIgb24gdGhlIEludGVsIFNDSAogCSAgYmFzZWQgc3lzdGVtcy4KQEAgLTQxOSwxMyArNDIxLDEyIEBACiAJICBpbnN0ZWFkLgogCiBjb25maWcgSTJDX01QQwotCXRyaXN0YXRlICJNUEMxMDcvODI0eC84NXh4LzUyeHgvODZ4eCIKKwl0cmlzdGF0ZSAiTVBDMTA3LzgyNHgvODV4eC81MTJ4LzUyeHgvODN4eC84Nnh4IgogCWRlcGVuZHMgb24gUFBDMzIKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyB0byB0aGlzIG9wdGlvbiwgc3VwcG9ydCB3aWxsIGJlIGluY2x1ZGVkIGZvciB0aGUKLQkgIGJ1aWx0LWluIEkyQyBpbnRlcmZhY2Ugb24gdGhlIE1QQzEwNy9Uc2kxMDcvTVBDODI0MC9NUEM4MjQ1IGFuZAotCSAgTVBDODV4eC9NUEM4NjQxIGZhbWlseSBwcm9jZXNzb3JzLiBUaGUgZHJpdmVyIG1heSBhbHNvIHdvcmsgb24gNTJ4eAotCSAgZmFtaWx5IHByb2Nlc3NvcnMsIHRob3VnaCBpbnRlcnJ1cHRzIGFyZSBrbm93biBub3QgdG8gd29yay4KKwkgIGJ1aWx0LWluIEkyQyBpbnRlcmZhY2Ugb24gdGhlIE1QQzEwNywgVHNpMTA3LCBNUEM1MTJ4LCBNUEM1Mnh4LAorCSAgTVBDODI0MCwgTVBDODI0NSwgTVBDODN4eCwgTVBDODV4eCBhbmQgTVBDODY0MSBmYW1pbHkgcHJvY2Vzc29ycy4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgaTJjLW1wYy4KQEAgLTQ0MCw2ICs0NDEsMTMgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGkyYy1tdjY0eHh4LgogCitjb25maWcgSTJDX05PTUFESUsKKwl0cmlzdGF0ZSAiU1QtRXJpY3Nzb24gTm9tYWRpay9VeDUwMCBJMkMgQ29udHJvbGxlciIKKwlkZXBlbmRzIG9uIFBMQVRfTk9NQURJSworCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIHRvIHRoaXMgb3B0aW9uLCBzdXBwb3J0IHdpbGwgYmUgaW5jbHVkZWQgZm9yIHRoZQorCSAgSTJDIGludGVyZmFjZSBmcm9tIFNULUVyaWNzc29uJ3MgTm9tYWRpayBhbmQgVXg1MDAgYXJjaGl0ZWN0dXJlcy4KKwogY29uZmlnIEkyQ19PQ09SRVMKIAl0cmlzdGF0ZSAiT3BlbkNvcmVzIEkyQyBDb250cm9sbGVyIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCkBAIC01NzUsNiArNTgzLDE2IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBpMmMtb2N0ZW9uLgogCitjb25maWcgSTJDX1hJTElOWAorCXRyaXN0YXRlICJYaWxpbnggSTJDIENvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgSEFTX0lPTUVNCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgdG8gdGhpcyBvcHRpb24sIHN1cHBvcnQgd2lsbCBiZSBpbmNsdWRlZCBmb3IgdGhlCisJICBYaWxpbnggSTJDIGNvbnRyb2xsZXIuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHhpbGlueF9pMmMuCisKIGNvbW1lbnQgIkV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMiCiAKIGNvbmZpZyBJMkNfUEFSUE9SVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlIGIvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCmluZGV4IGMyYzRlYTEuLjA5NzIzNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKQEAgLTQyLDYgKzQyLDcgQEAKIG9iai0kKENPTkZJR19JMkNfSVhQMjAwMCkJKz0gaTJjLWl4cDIwMDAubwogb2JqLSQoQ09ORklHX0kyQ19NUEMpCQkrPSBpMmMtbXBjLm8KIG9iai0kKENPTkZJR19JMkNfTVY2NFhYWCkJKz0gaTJjLW12NjR4eHgubworb2JqLSQoQ09ORklHX0kyQ19OT01BRElLKQkrPSBpMmMtbm9tYWRpay5vCiBvYmotJChDT05GSUdfSTJDX09DT1JFUykJKz0gaTJjLW9jb3Jlcy5vCiBvYmotJChDT05GSUdfSTJDX09NQVApCQkrPSBpMmMtb21hcC5vCiBvYmotJChDT05GSUdfSTJDX1BBU0VNSSkJKz0gaTJjLXBhc2VtaS5vCkBAIC01NSw2ICs1Niw3IEBACiBvYmotJChDT05GSUdfSTJDX1NUVTMwMCkJKz0gaTJjLXN0dTMwMC5vCiBvYmotJChDT05GSUdfSTJDX1ZFUlNBVElMRSkJKz0gaTJjLXZlcnNhdGlsZS5vCiBvYmotJChDT05GSUdfSTJDX09DVEVPTikJKz0gaTJjLW9jdGVvbi5vCitvYmotJChDT05GSUdfSTJDX1hJTElOWCkJKz0gaTJjLXhpaWMubwogCiAjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKIG9iai0kKENPTkZJR19JMkNfUEFSUE9SVCkJKz0gaTJjLXBhcnBvcnQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1kZXNpZ253YXJlLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRlc2lnbndhcmUuYwppbmRleCA5ZTE4ZWY5Li4zZTcyYjY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRlc2lnbndhcmUuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRlc2lnbndhcmUuYwpAQCAtNDk3LDEzICs0OTcsMTMgQEAKIAlpbnQgaTsKIAogCWlmIChhYm9ydF9zb3VyY2UgJiBEV19JQ19UWF9BQlJUX05PQUNLKSB7Ci0JCWZvcl9lYWNoX2JpdChpLCAmYWJvcnRfc291cmNlLCBBUlJBWV9TSVpFKGFib3J0X3NvdXJjZXMpKQorCQlmb3JfZWFjaF9zZXRfYml0KGksICZhYm9ydF9zb3VyY2UsIEFSUkFZX1NJWkUoYWJvcnRfc291cmNlcykpCiAJCQlkZXZfZGJnKGRldi0+ZGV2LAogCQkJCSIlczogJXNcbiIsIF9fZnVuY19fLCBhYm9ydF9zb3VyY2VzW2ldKTsKIAkJcmV0dXJuIC1FUkVNT1RFSU87CiAJfQogCi0JZm9yX2VhY2hfYml0KGksICZhYm9ydF9zb3VyY2UsIEFSUkFZX1NJWkUoYWJvcnRfc291cmNlcykpCisJZm9yX2VhY2hfc2V0X2JpdChpLCAmYWJvcnRfc291cmNlLCBBUlJBWV9TSVpFKGFib3J0X3NvdXJjZXMpKQogCQlkZXZfZXJyKGRldi0+ZGV2LCAiJXM6ICVzXG4iLCBfX2Z1bmNfXywgYWJvcnRfc291cmNlc1tpXSk7CiAKIAlpZiAoYWJvcnRfc291cmNlICYgRFdfSUNfVFhfQVJCX0xPU1QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlteC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pbXguYwppbmRleCA3NWJmODIwLi4zMjM3NWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlteC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW14LmMKQEAgLTYyNyw3ICs2MjcsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpMmNfaW14X2RyaXZlciA9IHsKLQkucHJvYmUJCT0gaTJjX2lteF9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZXhpdF9wKGkyY19pbXhfcmVtb3ZlKSwKIAkuZHJpdmVyCT0gewogCQkubmFtZQk9IERSSVZFUl9OQU1FLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc2NoLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlzY2guYwppbmRleCA2OWMyMmY3Li5kZGMyNThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlzY2guYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlzY2guYwpAQCAtMjcsNyArMjcsNyBAQAogKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CkBAIC00NiwxMiArNDYsNiBAQAogI2RlZmluZSBTTUJIU1REQVQxCSg3ICsgc2NoX3NtYmEpCiAjZGVmaW5lIFNNQkJMS0RBVAkoMHgyMCArIHNjaF9zbWJhKQogCi0vKiBjb3VudCBmb3IgcmVxdWVzdF9yZWdpb24gKi8KLSNkZWZpbmUgU01CSU9TSVpFCTY0Ci0KLS8qIFBDSSBBZGRyZXNzIENvbnN0YW50cyAqLwotI2RlZmluZSBTTUJCQV9TQ0gJMHg0MAotCiAvKiBPdGhlciBzZXR0aW5ncyAqLwogI2RlZmluZSBNQVhfVElNRU9VVAk1MDAKIApAQCAtNjMsNyArNTcsNiBAQAogI2RlZmluZSBTQ0hfQkxPQ0tfREFUQQkJMHgwNQogCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc2NoX3NtYmE7Ci1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2NoX2RyaXZlcjsKIHN0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgc2NoX2FkYXB0ZXI7CiAKIC8qCkBAIC0yNTYsMzcgKzI0OSwyMyBAQAogCS5hbGdvCQk9ICZzbWJ1c19hbGdvcml0aG0sCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2NoX2lkc1tdID0gewotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX1NDSF9MUEMpIH0sCi0JeyAwLCB9Ci19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc2NoX2lkcyk7Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHNjaF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAotCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNtYnVzX3NjaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IHJldHZhbDsKLQl1bnNpZ25lZCBpbnQgc21iYTsKIAotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFNNQkJBX1NDSCwgJnNtYmEpOwotCWlmICghKHNtYmEgJiAoMSA8PCAzMSkpKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiU01CdXMgSS9PIHNwYWNlIGRpc2FibGVkIVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FQlVTWTsKIAotCXNjaF9zbWJhID0gKHVuc2lnbmVkIHNob3J0KXNtYmE7Ci0JaWYgKHNjaF9zbWJhID09IDApIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJTTUJ1cyBiYXNlIGFkZHJlc3MgdW5pbml0aWFsaXplZCFcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JaWYgKGFjcGlfY2hlY2tfcmVnaW9uKHNjaF9zbWJhLCBTTUJJT1NJWkUsIHNjaF9kcml2ZXIubmFtZSkpCi0JCXJldHVybiAtRU5PREVWOwotCWlmICghcmVxdWVzdF9yZWdpb24oc2NoX3NtYmEsIFNNQklPU0laRSwgc2NoX2RyaXZlci5uYW1lKSkgeworCWlmICghcmVxdWVzdF9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBkZXYtPm5hbWUpKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiU01CdXMgcmVnaW9uIDB4JXggYWxyZWFkeSBpbiB1c2UhXG4iLAogCQkJc2NoX3NtYmEpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KKworCXNjaF9zbWJhID0gcmVzLT5zdGFydDsKKwogCWRldl9kYmcoJmRldi0+ZGV2LCAiU01CQSA9IDB4JVhcbiIsIHNjaF9zbWJhKTsKIAogCS8qIHNldCB1cCB0aGUgc3lzZnMgbGlua2FnZSB0byBvdXIgcGFyZW50IGRldmljZSAqLwpAQCAtMjk4LDM3ICsyNzcsNDMgQEAKIAlyZXR2YWwgPSBpMmNfYWRkX2FkYXB0ZXIoJnNjaF9hZGFwdGVyKTsKIAlpZiAocmV0dmFsKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiQ291bGRuJ3QgcmVnaXN0ZXIgYWRhcHRlciFcbiIpOwotCQlyZWxlYXNlX3JlZ2lvbihzY2hfc21iYSwgU01CSU9TSVpFKTsKKwkJcmVsZWFzZV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAkJc2NoX3NtYmEgPSAwOwogCX0KIAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzY2hfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzbWJ1c19zY2hfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaWYgKHNjaF9zbWJhKSB7CiAJCWkyY19kZWxfYWRhcHRlcigmc2NoX2FkYXB0ZXIpOwotCQlyZWxlYXNlX3JlZ2lvbihzY2hfc21iYSwgU01CSU9TSVpFKTsKKwkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOworCQlyZWxlYXNlX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCQlzY2hfc21iYSA9IDA7CiAJfQorCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzY2hfZHJpdmVyID0gewotCS5uYW1lCQk9ICJpc2NoX3NtYnVzIiwKLQkuaWRfdGFibGUJPSBzY2hfaWRzLAotCS5wcm9iZQkJPSBzY2hfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzY2hfcmVtb3ZlKSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNtYnVzX3NjaF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAiaXNjaF9zbWJ1cyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHNtYnVzX3NjaF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNtYnVzX3NjaF9yZW1vdmUpLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaTJjX3NjaF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnNjaF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNtYnVzX3NjaF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaTJjX3NjaF9leGl0KHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzY2hfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc21idXNfc2NoX2RyaXZlcik7CiB9CiAKIE1PRFVMRV9BVVRIT1IoIkphY29iIFBhbiA8amFjb2IuanVuLnBhbkBpbnRlbC5jb20+Iik7CkBAIC0zMzcsMyArMzIyLDQgQEAKIAogbW9kdWxlX2luaXQoaTJjX3NjaF9pbml0KTsKIG1vZHVsZV9leGl0KGkyY19zY2hfZXhpdCk7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmlzY2hfc21idXMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCmluZGV4IGY2MjcwMDEuLjc4YTE1YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYwpAQCAtMzEsNiArMzEsOSBAQAogCiAjZGVmaW5lIERSVl9OQU1FICJtcGMtaTJjIgogCisjZGVmaW5lIE1QQ19JMkNfQ0xPQ0tfTEVHQUNZICAgMAorI2RlZmluZSBNUENfSTJDX0NMT0NLX1BSRVNFUlZFICh+MFUpCisKICNkZWZpbmUgTVBDX0kyQ19GRFIgICAweDA0CiAjZGVmaW5lIE1QQ19JMkNfQ1IgICAgMHgwOAogI2RlZmluZSBNUENfSTJDX1NSICAgIDB4MGMKQEAgLTY2LDEwICs2OSw5IEBACiAJdTE2IGZkcjsJLyogaW5jbHVkaW5nIGRmc3JyICovCiB9OwogCi1zdHJ1Y3QgbXBjX2kyY19tYXRjaF9kYXRhIHsKLQl2b2lkICgqc2V0Y2xvY2spKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKLQkJCSBzdHJ1Y3QgbXBjX2kyYyAqaTJjLAotCQkJIHUzMiBjbG9jaywgdTMyIHByZXNjYWxlcik7CitzdHJ1Y3QgbXBjX2kyY19kYXRhIHsKKwl2b2lkICgqc2V0dXApKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgc3RydWN0IG1wY19pMmMgKmkyYywKKwkJICAgICAgdTMyIGNsb2NrLCB1MzIgcHJlc2NhbGVyKTsKIAl1MzIgcHJlc2NhbGVyOwogfTsKIApAQCAtMTY0LDggKzE2Niw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfUFBDX01QQzUyeHgKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXBjX2kyY19kaXZpZGVyIG1wY19pMmNfZGl2aWRlcnNfNTJ4eFtdID0geworI2lmIGRlZmluZWQoQ09ORklHX1BQQ19NUEM1Mnh4KSB8fCBkZWZpbmVkKENPTkZJR19QUENfTVBDNTEyeCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXBjX2kyY19kaXZpZGVyIG1wY19pMmNfZGl2aWRlcnNfNTJ4eFtdIF9fZGV2aW5pdGNvbnN0ID0gewogCXsyMCwgMHgyMH0sIHsyMiwgMHgyMX0sIHsyNCwgMHgyMn0sIHsyNiwgMHgyM30sCiAJezI4LCAweDI0fSwgezMwLCAweDAxfSwgezMyLCAweDI1fSwgezM0LCAweDAyfSwKIAl7MzYsIDB4MjZ9LCB7NDAsIDB4Mjd9LCB7NDQsIDB4MDR9LCB7NDgsIDB4Mjh9LApAQCAtMTg2LDE0ICsxODgsMTUgQEAKIAl7MTAyNDAsIDB4OWR9LCB7MTIyODgsIDB4OWV9LCB7MTUzNjAsIDB4OWZ9CiB9OwogCi1pbnQgbXBjX2kyY19nZXRfZmRyXzUyeHgoc3RydWN0IGRldmljZV9ub2RlICpub2RlLCB1MzIgY2xvY2ssIGludCBwcmVzY2FsZXIpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtcGNfaTJjX2dldF9mZHJfNTJ4eChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIHUzMiBjbG9jaywKKwkJCQkJICBpbnQgcHJlc2NhbGVyKQogewogCWNvbnN0IHN0cnVjdCBtcGNfaTJjX2RpdmlkZXIgKmRpdiA9IE5VTEw7CiAJdW5zaWduZWQgaW50IHB2ciA9IG1mc3ByKFNQUk5fUFZSKTsKIAl1MzIgZGl2aWRlcjsKIAlpbnQgaTsKIAotCWlmICghY2xvY2spCisJaWYgKGNsb2NrID09IE1QQ19JMkNfQ0xPQ0tfTEVHQUNZKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIERldGVybWluZSBkaXZpZGVyIHZhbHVlICovCkBAIC0yMTUsMTIgKzIxOCwxOCBAQAogCXJldHVybiBkaXYgPyAoaW50KWRpdi0+ZmRyIDogLUVJTlZBTDsKIH0KIAotc3RhdGljIHZvaWQgbXBjX2kyY19zZXRjbG9ja181Mnh4KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKLQkJCQkgIHN0cnVjdCBtcGNfaTJjICppMmMsCi0JCQkJICB1MzIgY2xvY2ssIHUzMiBwcmVzY2FsZXIpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgbXBjX2kyY19zZXR1cF81Mnh4KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJCQkJIHN0cnVjdCBtcGNfaTJjICppMmMsCisJCQkJCSB1MzIgY2xvY2ssIHUzMiBwcmVzY2FsZXIpCiB7CiAJaW50IHJldCwgZmRyOwogCisJaWYgKGNsb2NrID09IE1QQ19JMkNfQ0xPQ0tfUFJFU0VSVkUpIHsKKwkJZGV2X2RiZyhpMmMtPmRldiwgInVzaW5nIGZkciAlZFxuIiwKKwkJCXJlYWRiKGkyYy0+YmFzZSArIE1QQ19JMkNfRkRSKSk7CisJCXJldHVybjsKKwl9CisKIAlyZXQgPSBtcGNfaTJjX2dldF9mZHJfNTJ4eChub2RlLCBjbG9jaywgcHJlc2NhbGVyKTsKIAlmZHIgPSAocmV0ID49IDApID8gcmV0IDogMHgzZjsgLyogYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwogCkBAIC0yMjksMTYgKzIzOCw1MiBAQAogCWlmIChyZXQgPj0gMCkKIAkJZGV2X2luZm8oaTJjLT5kZXYsICJjbG9jayAlZCBIeiAoZmRyPSVkKVxuIiwgY2xvY2ssIGZkcik7CiB9Ci0jZWxzZSAvKiAhQ09ORklHX1BQQ19NUEM1Mnh4ICovCi1zdGF0aWMgdm9pZCBtcGNfaTJjX3NldGNsb2NrXzUyeHgoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAotCQkJCSAgc3RydWN0IG1wY19pMmMgKmkyYywKLQkJCQkgIHUzMiBjbG9jaywgdTMyIHByZXNjYWxlcikKKyNlbHNlIC8qICEoQ09ORklHX1BQQ19NUEM1Mnh4IHx8IENPTkZJR19QUENfTVBDNTEyeCkgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBtcGNfaTJjX3NldHVwXzUyeHgoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJCQkgc3RydWN0IG1wY19pMmMgKmkyYywKKwkJCQkJIHUzMiBjbG9jaywgdTMyIHByZXNjYWxlcikKIHsKIH0KLSNlbmRpZiAvKiBDT05GSUdfUFBDX01QQzUyeHgqLworI2VuZGlmIC8qIENPTkZJR19QUENfTVBDNTJ4eCB8fCBDT05GSUdfUFBDX01QQzUxMnggKi8KKworI2lmZGVmIENPTkZJR19QUENfTVBDNTEyeAorc3RhdGljIHZvaWQgX19kZXZpbml0IG1wY19pMmNfc2V0dXBfNTEyeChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQkJCSBzdHJ1Y3QgbXBjX2kyYyAqaTJjLAorCQkJCQkgdTMyIGNsb2NrLCB1MzIgcHJlc2NhbGVyKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZV9jdHJsOworCXZvaWQgX19pb21lbSAqY3RybDsKKwljb25zdCB1MzIgKnB2YWw7CisJdTMyIGlkeDsKKworCS8qIEVuYWJsZSBJMkMgaW50ZXJydXB0cyBmb3IgbXBjNTEyMSAqLworCW5vZGVfY3RybCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsCisJCQkJCSAgICAiZnNsLG1wYzUxMjEtaTJjLWN0cmwiKTsKKwlpZiAobm9kZV9jdHJsKSB7CisJCWN0cmwgPSBvZl9pb21hcChub2RlX2N0cmwsIDApOworCQlpZiAoY3RybCkgeworCQkJLyogSW50ZXJydXB0IGVuYWJsZSBiaXRzIGZvciBpMmMtMC8xLzI6IGJpdCAyNC8yNi8yOCAqLworCQkJcHZhbCA9IG9mX2dldF9wcm9wZXJ0eShub2RlLCAicmVnIiwgTlVMTCk7CisJCQlpZHggPSAoKnB2YWwgJiAweGZmKSAvIDB4MjA7CisJCQlzZXRiaXRzMzIoY3RybCwgMSA8PCAoMjQgKyBpZHggKiAyKSk7CisJCQlpb3VubWFwKGN0cmwpOworCQl9CisJCW9mX25vZGVfcHV0KG5vZGVfY3RybCk7CisJfQorCisJLyogVGhlIGNsb2NrIHNldHVwIGZvciB0aGUgNTJ4eCB3b3JrcyBhbHNvIGZpbmUgZm9yIHRoZSA1MTJ4ICovCisJbXBjX2kyY19zZXR1cF81Mnh4KG5vZGUsIGkyYywgY2xvY2ssIHByZXNjYWxlcik7Cit9CisjZWxzZSAvKiBDT05GSUdfUFBDX01QQzUxMnggKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBtcGNfaTJjX3NldHVwXzUxMngoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJCQkgc3RydWN0IG1wY19pMmMgKmkyYywKKwkJCQkJIHUzMiBjbG9jaywgdTMyIHByZXNjYWxlcikKK3sKK30KKyNlbmRpZiAvKiBDT05GSUdfUFBDX01QQzUxMnggKi8KIAogI2lmZGVmIENPTkZJR19GU0xfU09DCi1zdGF0aWMgY29uc3Qgc3RydWN0IG1wY19pMmNfZGl2aWRlciBtcGNfaTJjX2RpdmlkZXJzXzh4eHhbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXBjX2kyY19kaXZpZGVyIG1wY19pMmNfZGl2aWRlcnNfOHh4eFtdIF9fZGV2aW5pdGNvbnN0ID0gewogCXsxNjAsIDB4MDEyMH0sIHsxOTIsIDB4MDEyMX0sIHsyMjQsIDB4MDEyMn0sIHsyNTYsIDB4MDEyM30sCiAJezI4OCwgMHgwMTAwfSwgezMyMCwgMHgwMTAxfSwgezM1MiwgMHgwNjAxfSwgezM4NCwgMHgwMTAyfSwKIAl7NDE2LCAweDA2MDJ9LCB7NDQ4LCAweDAxMjZ9LCB7NDgwLCAweDAxMDN9LCB7NTEyLCAweDAxMjd9LApAQCAtMjU4LDcgKzMwMyw3IEBACiAJezQ5MTUyLCAweDAxMWV9LCB7NjE0NDAsIDB4MDExZn0KIH07CiAKLXUzMiBtcGNfaTJjX2dldF9zZWNfY2ZnXzh4eHgodm9pZCkKK3N0YXRpYyB1MzIgX19kZXZpbml0IG1wY19pMmNfZ2V0X3NlY19jZmdfOHh4eCh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IE5VTEw7CiAJdTMyIF9faW9tZW0gKnJlZzsKQEAgLTI4NywxMyArMzMyLDE0IEBACiAJcmV0dXJuIHZhbDsKIH0KIAotaW50IG1wY19pMmNfZ2V0X2Zkcl84eHh4KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgdTMyIGNsb2NrLCB1MzIgcHJlc2NhbGVyKQorc3RhdGljIGludCBfX2RldmluaXQgbXBjX2kyY19nZXRfZmRyXzh4eHgoc3RydWN0IGRldmljZV9ub2RlICpub2RlLCB1MzIgY2xvY2ssCisJCQkJCSAgdTMyIHByZXNjYWxlcikKIHsKIAljb25zdCBzdHJ1Y3QgbXBjX2kyY19kaXZpZGVyICpkaXYgPSBOVUxMOwogCXUzMiBkaXZpZGVyOwogCWludCBpOwogCi0JaWYgKCFjbG9jaykKKwlpZiAoY2xvY2sgPT0gTVBDX0kyQ19DTE9DS19MRUdBQ1kpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogRGV0ZXJtaW5lIHByb3BlciBkaXZpZGVyIHZhbHVlICovCkBAIC0zMjAsMTIgKzM2NiwxOSBAQAogCXJldHVybiBkaXYgPyAoaW50KWRpdi0+ZmRyIDogLUVJTlZBTDsKIH0KIAotc3RhdGljIHZvaWQgbXBjX2kyY19zZXRjbG9ja184eHh4KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKLQkJCQkgIHN0cnVjdCBtcGNfaTJjICppMmMsCi0JCQkJICB1MzIgY2xvY2ssIHUzMiBwcmVzY2FsZXIpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgbXBjX2kyY19zZXR1cF84eHh4KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJCQkJIHN0cnVjdCBtcGNfaTJjICppMmMsCisJCQkJCSB1MzIgY2xvY2ssIHUzMiBwcmVzY2FsZXIpCiB7CiAJaW50IHJldCwgZmRyOwogCisJaWYgKGNsb2NrID09IE1QQ19JMkNfQ0xPQ0tfUFJFU0VSVkUpIHsKKwkJZGV2X2RiZyhpMmMtPmRldiwgInVzaW5nIGRmc3JyICVkLCBmZHIgJWRcbiIsCisJCQlyZWFkYihpMmMtPmJhc2UgKyBNUENfSTJDX0RGU1JSKSwKKwkJCXJlYWRiKGkyYy0+YmFzZSArIE1QQ19JMkNfRkRSKSk7CisJCXJldHVybjsKKwl9CisKIAlyZXQgPSBtcGNfaTJjX2dldF9mZHJfOHh4eChub2RlLCBjbG9jaywgcHJlc2NhbGVyKTsKIAlmZHIgPSAocmV0ID49IDApID8gcmV0IDogMHgxMDMxOyAvKiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCiAKQEAgLTMzOCw5ICszOTEsOSBAQAogfQogCiAjZWxzZSAvKiAhQ09ORklHX0ZTTF9TT0MgKi8KLXN0YXRpYyB2b2lkIG1wY19pMmNfc2V0Y2xvY2tfOHh4eChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCi0JCQkJICBzdHJ1Y3QgbXBjX2kyYyAqaTJjLAotCQkJCSAgdTMyIGNsb2NrLCB1MzIgcHJlc2NhbGVyKQorc3RhdGljIHZvaWQgX19kZXZpbml0IG1wY19pMmNfc2V0dXBfOHh4eChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQkJCSBzdHJ1Y3QgbXBjX2kyYyAqaTJjLAorCQkJCQkgdTMyIGNsb2NrLCB1MzIgcHJlc2NhbGVyKQogewogfQogI2VuZGlmIC8qIENPTkZJR19GU0xfU09DICovCkBAIC00OTQsNyArNTQ3LDcgQEAKIHsKIAlzdHJ1Y3QgbXBjX2kyYyAqaTJjOwogCWNvbnN0IHUzMiAqcHJvcDsKLQl1MzIgY2xvY2sgPSAwOworCXUzMiBjbG9jayA9IE1QQ19JMkNfQ0xPQ0tfTEVHQUNZOwogCWludCByZXN1bHQgPSAwOwogCWludCBwbGVuOwogCkBAIC01MjMsMjEgKzU3NiwyMSBAQAogCQl9CiAJfQogCi0JaWYgKCFvZl9nZXRfcHJvcGVydHkob3AtPm5vZGUsICJmc2wscHJlc2VydmUtY2xvY2tpbmciLCBOVUxMKSkgeworCWlmIChvZl9nZXRfcHJvcGVydHkob3AtPm5vZGUsICJmc2wscHJlc2VydmUtY2xvY2tpbmciLCBOVUxMKSkgeworCQljbG9jayA9IE1QQ19JMkNfQ0xPQ0tfUFJFU0VSVkU7CisJfSBlbHNlIHsKIAkJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShvcC0+bm9kZSwgImNsb2NrLWZyZXF1ZW5jeSIsICZwbGVuKTsKIAkJaWYgKHByb3AgJiYgcGxlbiA9PSBzaXplb2YodTMyKSkKIAkJCWNsb2NrID0gKnByb3A7CisJfQogCi0JCWlmIChtYXRjaC0+ZGF0YSkgewotCQkJc3RydWN0IG1wY19pMmNfbWF0Y2hfZGF0YSAqZGF0YSA9Ci0JCQkJKHN0cnVjdCBtcGNfaTJjX21hdGNoX2RhdGEgKiltYXRjaC0+ZGF0YTsKLQkJCWRhdGEtPnNldGNsb2NrKG9wLT5ub2RlLCBpMmMsIGNsb2NrLCBkYXRhLT5wcmVzY2FsZXIpOwotCQl9IGVsc2UgewotCQkJLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KLQkJCWlmIChvZl9nZXRfcHJvcGVydHkob3AtPm5vZGUsICJkZnNyciIsIE5VTEwpKQotCQkJCW1wY19pMmNfc2V0Y2xvY2tfOHh4eChvcC0+bm9kZSwgaTJjLAotCQkJCQkJICAgICAgY2xvY2ssIDApOwotCQl9CisJaWYgKG1hdGNoLT5kYXRhKSB7CisJCXN0cnVjdCBtcGNfaTJjX2RhdGEgKmRhdGEgPSBtYXRjaC0+ZGF0YTsKKwkJZGF0YS0+c2V0dXAob3AtPm5vZGUsIGkyYywgY2xvY2ssIGRhdGEtPnByZXNjYWxlcik7CisJfSBlbHNlIHsKKwkJLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KKwkJaWYgKG9mX2dldF9wcm9wZXJ0eShvcC0+bm9kZSwgImRmc3JyIiwgTlVMTCkpCisJCQltcGNfaTJjX3NldHVwXzh4eHgob3AtPm5vZGUsIGkyYywgY2xvY2ssIDApOwogCX0KIAogCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgaTJjKTsKQEAgLTU4Miw0NyArNjM1LDQyIEBACiAJcmV0dXJuIDA7CiB9OwogCitzdGF0aWMgc3RydWN0IG1wY19pMmNfZGF0YSBtcGNfaTJjX2RhdGFfNTEyeCBfX2RldmluaXRkYXRhID0geworCS5zZXR1cCA9IG1wY19pMmNfc2V0dXBfNTEyeCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXBjX2kyY19kYXRhIG1wY19pMmNfZGF0YV81Mnh4IF9fZGV2aW5pdGRhdGEgPSB7CisJLnNldHVwID0gbXBjX2kyY19zZXR1cF81Mnh4LAorfTsKKworc3RhdGljIHN0cnVjdCBtcGNfaTJjX2RhdGEgbXBjX2kyY19kYXRhXzgzMTMgX19kZXZpbml0ZGF0YSA9IHsKKwkuc2V0dXAgPSBtcGNfaTJjX3NldHVwXzh4eHgsCit9OworCitzdGF0aWMgc3RydWN0IG1wY19pMmNfZGF0YSBtcGNfaTJjX2RhdGFfODU0MyBfX2RldmluaXRkYXRhID0geworCS5zZXR1cCA9IG1wY19pMmNfc2V0dXBfOHh4eCwKKwkucHJlc2NhbGVyID0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXBjX2kyY19kYXRhIG1wY19pMmNfZGF0YV84NTQ0IF9fZGV2aW5pdGRhdGEgPSB7CisJLnNldHVwID0gbXBjX2kyY19zZXR1cF84eHh4LAorCS5wcmVzY2FsZXIgPSAzLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjX2kyY19vZl9tYXRjaFtdID0gewotCXsuY29tcGF0aWJsZSA9ICJtcGM1MjAwLWkyYyIsCi0JIC5kYXRhID0gJihzdHJ1Y3QgbXBjX2kyY19tYXRjaF9kYXRhKSB7Ci0JCQkuc2V0Y2xvY2sgPSBtcGNfaTJjX3NldGNsb2NrXzUyeHgsCi0JCX0sCi0JfSwKLQl7LmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsCi0JIC5kYXRhID0gJihzdHJ1Y3QgbXBjX2kyY19tYXRjaF9kYXRhKSB7Ci0JCQkuc2V0Y2xvY2sgPSBtcGNfaTJjX3NldGNsb2NrXzUyeHgsCi0JCX0sCi0JfSwKLQl7LmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtaTJjIiwKLQkgLmRhdGEgPSAmKHN0cnVjdCBtcGNfaTJjX21hdGNoX2RhdGEpIHsKLQkJCS5zZXRjbG9jayA9IG1wY19pMmNfc2V0Y2xvY2tfNTJ4eCwKLQkJfSwKLQl9LAotCXsuY29tcGF0aWJsZSA9ICJmc2wsbXBjODMxMy1pMmMiLAotCSAuZGF0YSA9ICYoc3RydWN0IG1wY19pMmNfbWF0Y2hfZGF0YSkgewotCQkJLnNldGNsb2NrID0gbXBjX2kyY19zZXRjbG9ja184eHh4LAotCQl9LAotCX0sCi0Jey5jb21wYXRpYmxlID0gImZzbCxtcGM4NTQzLWkyYyIsCi0JIC5kYXRhID0gJihzdHJ1Y3QgbXBjX2kyY19tYXRjaF9kYXRhKSB7Ci0JCQkuc2V0Y2xvY2sgPSBtcGNfaTJjX3NldGNsb2NrXzh4eHgsCi0JCQkucHJlc2NhbGVyID0gMiwKLQkJfSwKLQl9LAotCXsuY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0NC1pMmMiLAotCSAuZGF0YSA9ICYoc3RydWN0IG1wY19pMmNfbWF0Y2hfZGF0YSkgewotCQkJLnNldGNsb2NrID0gbXBjX2kyY19zZXRjbG9ja184eHh4LAotCQkJLnByZXNjYWxlciA9IDMsCi0JCX0sCisJey5jb21wYXRpYmxlID0gIm1wYzUyMDAtaTJjIiwgLmRhdGEgPSAmbXBjX2kyY19kYXRhXzUyeHgsIH0sCisJey5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCAuZGF0YSA9ICZtcGNfaTJjX2RhdGFfNTJ4eCwgfSwKKwl7LmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtaTJjIiwgLmRhdGEgPSAmbXBjX2kyY19kYXRhXzUyeHgsIH0sCisJey5jb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWkyYyIsIC5kYXRhID0gJm1wY19pMmNfZGF0YV81MTJ4LCB9LAorCXsuY29tcGF0aWJsZSA9ICJmc2wsbXBjODMxMy1pMmMiLCAuZGF0YSA9ICZtcGNfaTJjX2RhdGFfODMxMywgfSwKKwl7LmNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDMtaTJjIiwgLmRhdGEgPSAmbXBjX2kyY19kYXRhXzg1NDMsIH0sCisJey5jb21wYXRpYmxlID0gImZzbCxtcGM4NTQ0LWkyYyIsIC5kYXRhID0gJm1wY19pMmNfZGF0YV84NTQ0LCB9LAogCS8qIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KLQl9LAogCXsuY29tcGF0aWJsZSA9ICJmc2wtaTJjIiwgfSwKIAl7fSwKIH07Ci0KIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG1wY19pMmNfb2ZfbWF0Y2gpOwogCi0KIC8qIFN0cnVjdHVyZSBmb3IgYSBkZXZpY2UgZHJpdmVyICovCiBzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBtcGNfaTJjX2RyaXZlciA9IHsKIAkubWF0Y2hfdGFibGUJPSBtcGNfaTJjX29mX21hdGNoLApAQCAtNjU1LDUgKzcwMyw1IEBACiAKIE1PRFVMRV9BVVRIT1IoIkFkcmlhbiBDb3ggPGFkcmlhbkBodW1ib2xkdC5jby51az4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiSTJDLUJ1cyBhZGFwdGVyIGZvciBNUEMxMDcgYnJpZGdlIGFuZCAiCi0JCSAgICJNUEM4MjR4Lzg1eHgvNTJ4eCBwcm9jZXNzb3JzIik7CisJCSAgICJNUEM4MjR4LzgzeHgvODV4eC84Nnh4LzUxMngvNTJ4eCBwcm9jZXNzb3JzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5vbWFkaWsuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbm9tYWRpay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNWY3MzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5vbWFkaWsuYwpAQCAtMCwwICsxLDk1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTVC1Fcmljc3NvbgorICogQ29weXJpZ2h0IChDKSAyMDA5IFNUTWljcm9lbGVjdHJvbmljcworICoKKyAqIEkyQyBtYXN0ZXIgbW9kZSBjb250cm9sbGVyIGRyaXZlciwgdXNlZCBpbiBOb21hZGlrIDg4MTUKKyAqIGFuZCBVeDUwMCBwbGF0Zm9ybXMuCisgKgorICogQXV0aG9yOiBTcmluaWRoaSBLYXNhZ2FyIDxzcmluaWRoaS5rYXNhZ2FyQHN0ZXJpY3Nzb24uY29tPgorICogQXV0aG9yOiBTYWNoaW4gVmVybWEgPHNhY2hpbi52ZXJtYUBzdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8cGxhdC9pMmMuaD4KKworI2RlZmluZSBEUklWRVJfTkFNRSAibm1rLWkyYyIKKworLyogSTJDIENvbnRyb2xsZXIgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBJMkNfQ1IJCSgweDAwMCkKKyNkZWZpbmUgSTJDX1NDUgkJKDB4MDA0KQorI2RlZmluZSBJMkNfSFNNQ1IJKDB4MDA4KQorI2RlZmluZSBJMkNfTUNSCQkoMHgwMEMpCisjZGVmaW5lIEkyQ19URlIJCSgweDAxMCkKKyNkZWZpbmUgSTJDX1NSCQkoMHgwMTQpCisjZGVmaW5lIEkyQ19SRlIJCSgweDAxOCkKKyNkZWZpbmUgSTJDX1RGVFIJKDB4MDFDKQorI2RlZmluZSBJMkNfUkZUUgkoMHgwMjApCisjZGVmaW5lIEkyQ19ETUFSCSgweDAyNCkKKyNkZWZpbmUgSTJDX0JSQ1IJKDB4MDI4KQorI2RlZmluZSBJMkNfSU1TQ1IJKDB4MDJDKQorI2RlZmluZSBJMkNfUklTUgkoMHgwMzApCisjZGVmaW5lIEkyQ19NSVNSCSgweDAzNCkKKyNkZWZpbmUgSTJDX0lDUgkJKDB4MDM4KQorCisvKiBDb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSBJMkNfQ1JfUEUJCSgweDEgPDwgMCkJLyogUGVyaXBoZXJhbCBFbmFibGUgKi8KKyNkZWZpbmUgSTJDX0NSX09NCQkoMHgzIDw8IDEpCS8qIE9wZXJhdGluZyBtb2RlICovCisjZGVmaW5lIEkyQ19DUl9TQU0JCSgweDEgPDwgMykJLyogU2xhdmUgYWRkcmVzc2luZyBtb2RlICovCisjZGVmaW5lIEkyQ19DUl9TTQkJKDB4MyA8PCA0KQkvKiBTcGVlZCBtb2RlICovCisjZGVmaW5lIEkyQ19DUl9TR0NNCQkoMHgxIDw8IDYpCS8qIFNsYXZlIGdlbmVyYWwgY2FsbCBtb2RlICovCisjZGVmaW5lIEkyQ19DUl9GVFgJCSgweDEgPDwgNykJLyogRmx1c2ggVHJhbnNtaXQgKi8KKyNkZWZpbmUgSTJDX0NSX0ZSWAkJKDB4MSA8PCA4KQkvKiBGbHVzaCBSZWNlaXZlICovCisjZGVmaW5lIEkyQ19DUl9ETUFfVFhfRU4JKDB4MSA8PCA5KQkvKiBETUEgVHggZW5hYmxlICovCisjZGVmaW5lIEkyQ19DUl9ETUFfUlhfRU4JKDB4MSA8PCAxMCkJLyogRE1BIFJ4IEVuYWJsZSAqLworI2RlZmluZSBJMkNfQ1JfRE1BX1NMRQkJKDB4MSA8PCAxMSkJLyogRE1BIHN5bmMuIGxvZ2ljIGVuYWJsZSAqLworI2RlZmluZSBJMkNfQ1JfTE0JCSgweDEgPDwgMTIpCS8qIExvb3BiYWNrIG1vZGUgKi8KKyNkZWZpbmUgSTJDX0NSX0ZPTgkJKDB4MyA8PCAxMykJLyogRmlsdGVyaW5nIG9uICovCisjZGVmaW5lIEkyQ19DUl9GUwkJKDB4MyA8PCAxNSkJLyogRm9yY2Ugc3RvcCBlbmFibGUgKi8KKworLyogTWFzdGVyIGNvbnRyb2xsZXIgKE1DUikgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSTJDX01DUl9PUAkJKDB4MSA8PCAwKQkvKiBPcGVyYXRpb24gKi8KKyNkZWZpbmUgSTJDX01DUl9BNwkJKDB4N2YgPDwgMSkJLyogNy1iaXQgYWRkcmVzcyAqLworI2RlZmluZSBJMkNfTUNSX0VBMTAJCSgweDcgPDwgOCkgCS8qIDEwLWJpdCBFeHRlbmRlZCBhZGRyZXNzICovCisjZGVmaW5lIEkyQ19NQ1JfU0IJCSgweDEgPDwgMTEpCS8qIEV4dGVuZGVkIGFkZHJlc3MgKi8KKyNkZWZpbmUgSTJDX01DUl9BTQkJKDB4MyA8PCAxMikJLyogQWRkcmVzcyB0eXBlICovCisjZGVmaW5lIEkyQ19NQ1JfU1RPUAkJKDB4MSA8PCAxNCkgCS8qIFN0b3AgY29uZGl0aW9uICovCisjZGVmaW5lIEkyQ19NQ1JfTEVOR1RICQkoMHg3ZmYgPDwgMTUpIAkvKiBUcmFuc2FjdGlvbiBsZW5ndGggKi8KKworLyogU3RhdHVzIHJlZ2lzdGVyIChTUikgKi8KKyNkZWZpbmUgSTJDX1NSX09QCQkoMHgzIDw8IDApCS8qIE9wZXJhdGlvbiAqLworI2RlZmluZSBJMkNfU1JfU1RBVFVTCQkoMHgzIDw8IDIpCS8qIGNvbnRyb2xsZXIgc3RhdHVzICovCisjZGVmaW5lIEkyQ19TUl9DQVVTRQkJKDB4NyA8PCA0KQkvKiBBYm9ydCBjYXVzZSAqLworI2RlZmluZSBJMkNfU1JfVFlQRQkJKDB4MyA8PCA3KQkvKiBSZWNlaXZlIHR5cGUgKi8KKyNkZWZpbmUgSTJDX1NSX0xFTkdUSAkJKDB4N2ZmIDw8IDkpCS8qIFRyYW5zZmVyIGxlbmd0aCAqLworCisvKiBJbnRlcnJ1cHQgbWFzayBzZXQvY2xlYXIgKElNU0NSKSBiaXRzICovCisjZGVmaW5lIEkyQ19JVF9UWEZFIAkJKDB4MSA8PCAwKQorI2RlZmluZSBJMkNfSVRfVFhGTkUJCSgweDEgPDwgMSkKKyNkZWZpbmUgSTJDX0lUX1RYRkYJCSgweDEgPDwgMikKKyNkZWZpbmUgSTJDX0lUX1RYRk9WUgkJKDB4MSA8PCAzKQorI2RlZmluZSBJMkNfSVRfUlhGRQkJKDB4MSA8PCA0KQorI2RlZmluZSBJMkNfSVRfUlhGTkYJCSgweDEgPDwgNSkKKyNkZWZpbmUgSTJDX0lUX1JYRkYJCSgweDEgPDwgNikKKyNkZWZpbmUgSTJDX0lUX1JGU1IJCSgweDEgPDwgMTYpCisjZGVmaW5lIEkyQ19JVF9SRlNFCQkoMHgxIDw8IDE3KQorI2RlZmluZSBJMkNfSVRfV1RTUgkJKDB4MSA8PCAxOCkKKyNkZWZpbmUgSTJDX0lUX01URAkJKDB4MSA8PCAxOSkKKyNkZWZpbmUgSTJDX0lUX1NURAkJKDB4MSA8PCAyMCkKKyNkZWZpbmUgSTJDX0lUX01BTAkJKDB4MSA8PCAyNCkKKyNkZWZpbmUgSTJDX0lUX0JFUlIJCSgweDEgPDwgMjUpCisjZGVmaW5lIEkyQ19JVF9NVERXUwkJKDB4MSA8PCAyOCkKKworI2RlZmluZSBHRU5fTUFTSyh2YWwsIG1hc2ssIHNiKSAgKCgodmFsKSA8PCAoc2IpKSAmIChtYXNrKSkKKworLyogc29tZSBiaXRzIGluIElDUiBhcmUgcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgSTJDX0NMRUFSX0FMTF9JTlRTCTB4MTMxZjAwN2YKKworLyogZmlyc3QgdGhyZWUgbXNiIGJpdHMgYXJlIHJlc2VydmVkICovCisjZGVmaW5lIElSUV9NQVNLKG1hc2spCQkobWFzayAmIDB4MWZmZmZmZmYpCisKKy8qIG1heGltdW0gdGhyZXNob2xkIHZhbHVlICovCisjZGVmaW5lIE1BWF9JMkNfRklGT19USFJFU0hPTEQJMTUKKworZW51bSBpMmNfc3RhdHVzIHsKKwlJMkNfTk9QLAorCUkyQ19PTl9HT0lORywKKwlJMkNfT0ssCisJSTJDX0FCT1JUCit9OworCisvKiBvcGVyYXRpb24gKi8KK2VudW0gaTJjX29wZXJhdGlvbiB7CisJSTJDX05PX09QRVJBVElPTiA9IDB4ZmYsCisJSTJDX1dSSVRFID0gMHgwMCwKKwlJMkNfUkVBRCA9IDB4MDEKK307CisKKy8qIGNvbnRyb2xsZXIgcmVzcG9uc2UgdGltZW91dCBpbiBtcyAqLworI2RlZmluZSBJMkNfVElNRU9VVF9NUwk1MDAKKworLyoqCisgKiBzdHJ1Y3QgaTJjX25ta19jbGllbnQgLSBjbGllbnQgc3BlY2lmaWMgZGF0YQorICogQHNsYXZlX2FkcjogNy1iaXQgc2xhdmUgYWRkcmVzcworICogQGNvdW50OiBuby4gYnl0ZXMgdG8gYmUgdHJhbnNmZXJlZAorICogQGJ1ZmZlcjogY2xpZW50IGRhdGEgYnVmZmVyCisgKiBAeGZlcl9ieXRlczogYnl0ZXMgdHJhbnNmZXJlZCB0aWxsIG5vdworICogQG9wZXJhdGlvbjogY3VycmVudCBJMkMgb3BlcmF0aW9uCisgKi8KK3N0cnVjdCBpMmNfbm1rX2NsaWVudCB7CisJdW5zaWduZWQgc2hvcnQJCXNsYXZlX2FkcjsKKwl1bnNpZ25lZCBsb25nCQljb3VudDsKKwl1bnNpZ25lZCBjaGFyCQkqYnVmZmVyOworCXVuc2lnbmVkIGxvbmcJCXhmZXJfYnl0ZXM7CisJZW51bSBpMmNfb3BlcmF0aW9uCW9wZXJhdGlvbjsKK307CisKKy8qKgorICogc3RydWN0IG5ta19pMmNfZGV2IC0gcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSBvZiB0aGUgY29udHJvbGxlcgorICogQHBkZXY6IHBhcmVudCBwbGF0Zm9ybSBkZXZpY2UKKyAqIEBhZGFwOiBjb3JyZXNwb25kaW5nIEkyQyBhZGFwdGVyCisgKiBAaXJxOiBpbnRlcnJ1cHQgbGluZSBmb3IgdGhlIGNvbnRyb2xsZXIKKyAqIEB2aXJ0YmFzZTogdmlydHVhbCBpbyBtZW1vcnkgYXJlYQorICogQGNsazogaGFyZHdhcmUgaTJjIGJsb2NrIGNsb2NrCisgKiBAY2ZnOiBtYWNoaW5lIHByb3ZpZGVkIGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbgorICogQGNsaTogaG9sZGVyIG9mIGNsaWVudCBzcGVjaWZpYyBkYXRhCisgKiBAc3RvcDogc3RvcCBjb25kaXRpb24KKyAqIEB4ZmVyX2NvbXBsZXRlOiBhY2tub3dsZWRnZSBjb21wbGV0aW9uIGZvciBhIEkyQyBtZXNzYWdlCisgKiBAcmVzdWx0OiBjb250cm9sbGVyIHByb3BvZ2F0ZWQgcmVzdWx0CisgKi8KK3N0cnVjdCBubWtfaTJjX2RldiB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkJKnBkZXY7CisJc3RydWN0IGkyY19hZGFwdGVyIAkJYWRhcDsKKwlpbnQgCQkJCWlycTsKKwl2b2lkIF9faW9tZW0JCQkqdmlydGJhc2U7CisJc3RydWN0IGNsawkJCSpjbGs7CisJc3RydWN0IG5ta19pMmNfY29udHJvbGxlcgljZmc7CisJc3RydWN0IGkyY19ubWtfY2xpZW50CQljbGk7CisJaW50IAkJCQlzdG9wOworCXN0cnVjdCBjb21wbGV0aW9uCQl4ZmVyX2NvbXBsZXRlOworCWludCAJCQkJcmVzdWx0OworfTsKKworLyogY29udHJvbGxlcidzIGFib3J0IGNhdXNlcyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmFib3J0X2NhdXNlc1tdID0geworCSJubyBhY2sgcmVjZWl2ZWQgYWZ0ZXIgYWRkcmVzcyB0cmFuc21pc3Npb24iLAorCSJubyBhY2sgcmVjZWl2ZWQgZHVyaW5nIGRhdGEgcGhhc2UiLAorCSJhY2sgcmVjZWl2ZWQgYWZ0ZXIgeG1pc3Npb24gb2YgbWFzdGVyIGNvZGUiLAorCSJtYXN0ZXIgbG9zdCBhcmJpdHJhdGlvbiIsCisJInNsYXZlIHJlc3RhcnRzIiwKKwkic2xhdmUgcmVzZXQiLAorCSJvdmVyZmxvdywgbWF4c2l6ZSBpcyAyMDQ3IGJ5dGVzIiwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpMmNfc2V0X2JpdCh2b2lkIF9faW9tZW0gKnJlZywgdTMyIG1hc2spCit7CisJd3JpdGVsKHJlYWRsKHJlZykgfCBtYXNrLCByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaTJjX2Nscl9iaXQodm9pZCBfX2lvbWVtICpyZWcsIHUzMiBtYXNrKQoreworCXdyaXRlbChyZWFkbChyZWcpICYgfm1hc2ssIHJlZyk7Cit9CisKKy8qKgorICogZmx1c2hfaTJjX2ZpZm8oKSAtIFRoaXMgZnVuY3Rpb24gZmx1c2hlcyB0aGUgSTJDIEZJRk8KKyAqIEBkZXY6IHByaXZhdGUgZGF0YSBvZiBJMkMgRHJpdmVyCisgKgorICogVGhpcyBmdW5jdGlvbiBmbHVzaGVzIHRoZSBJMkMgVHggYW5kIFJ4IEZJRk9zLiBJdCByZXR1cm5zCisgKiAwIG9uIHN1Y2Nlc3NmdWwgZmx1c2hpbmcgb2YgRklGTworICovCitzdGF0aWMgaW50IGZsdXNoX2kyY19maWZvKHN0cnVjdCBubWtfaTJjX2RldiAqZGV2KQoreworI2RlZmluZSBMT09QX0FUVEVNUFRTIDEwCisJaW50IGk7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCisJLyoKKwkgKiBmbHVzaCB0aGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgRklGTy4gVGhlIGZsdXNoaW5nCisJICogb3BlcmF0aW9uIHRha2VzIHNldmVyYWwgY3ljbGVzIGJlZm9yZSB0byBiZSBjb21wbGV0ZWQuCisJICogT24gdGhlIGNvbXBsZXRpb24sIHRoZSBJMkMgaW50ZXJuYWwgbG9naWMgY2xlYXJzIHRoZXNlCisJICogYml0cywgdW50aWwgdGhlbiBubyBvbmUgbXVzdCBhY2Nlc3MgVHgsIFJ4IEZJRk8gYW5kCisJICogc2hvdWxkIHBvbGwgb24gdGhlc2UgYml0cyB3YWl0aW5nIGZvciB0aGUgY29tcGxldGlvbi4KKwkgKi8KKwl3cml0ZWwoKEkyQ19DUl9GVFggfCBJMkNfQ1JfRlJYKSwgZGV2LT52aXJ0YmFzZSArIEkyQ19DUik7CisKKwlmb3IgKGkgPSAwOyBpIDwgTE9PUF9BVFRFTVBUUzsgaSsrKSB7CisJCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhJMkNfVElNRU9VVF9NUyk7CisKKwkJd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQlpZiAoKHJlYWRsKGRldi0+dmlydGJhc2UgKyBJMkNfQ1IpICYKKwkJCQkoSTJDX0NSX0ZUWCB8IEkyQ19DUl9GUlgpKSA9PSAwKQorCQkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAiZmx1c2hpbmcgb3BlcmF0aW9uIHRpbWVkIG91dCAiCisJCSJnaXZpbmcgdXAgYWZ0ZXIgJWQgYXR0ZW1wdHMiLCBMT09QX0FUVEVNUFRTKTsKKworCXJldHVybiAtRVRJTUVET1VUOworfQorCisvKioKKyAqIGRpc2FibGVfYWxsX2ludGVycnVwdHMoKSAtIERpc2FibGUgYWxsIGludGVycnVwdHMgb2YgdGhpcyBJMmMgQnVzCisgKiBAZGV2OiBwcml2YXRlIGRhdGEgb2YgSTJDIERyaXZlcgorICovCitzdGF0aWMgdm9pZCBkaXNhYmxlX2FsbF9pbnRlcnJ1cHRzKHN0cnVjdCBubWtfaTJjX2RldiAqZGV2KQoreworCXUzMiBtYXNrID0gSVJRX01BU0soMCk7CisJd3JpdGVsKG1hc2ssIGRldi0+dmlydGJhc2UgKyBJMkNfSU1TQ1IpOworfQorCisvKioKKyAqIGNsZWFyX2FsbF9pbnRlcnJ1cHRzKCkgLSBDbGVhciBhbGwgaW50ZXJydXB0cyBvZiBJMkMgQ29udHJvbGxlcgorICogQGRldjogcHJpdmF0ZSBkYXRhIG9mIEkyQyBEcml2ZXIKKyAqLworc3RhdGljIHZvaWQgY2xlYXJfYWxsX2ludGVycnVwdHMoc3RydWN0IG5ta19pMmNfZGV2ICpkZXYpCit7CisJdTMyIG1hc2s7CisJbWFzayA9IElSUV9NQVNLKEkyQ19DTEVBUl9BTExfSU5UUyk7CisJd3JpdGVsKG1hc2ssIGRldi0+dmlydGJhc2UgKyBJMkNfSUNSKTsKK30KKworLyoqCisgKiBpbml0X2h3KCkgLSBpbml0aWFsaXplIHRoZSBJMkMgaGFyZHdhcmUKKyAqIEBkZXY6IHByaXZhdGUgZGF0YSBvZiBJMkMgRHJpdmVyCisgKi8KK3N0YXRpYyBpbnQgaW5pdF9odyhzdHJ1Y3Qgbm1rX2kyY19kZXYgKmRldikKK3sKKwlpbnQgc3RhdDsKKworCXN0YXQgPSBmbHVzaF9pMmNfZmlmbyhkZXYpOworCWlmIChzdGF0KQorCQlyZXR1cm4gc3RhdDsKKworCS8qIGRpc2FibGUgdGhlIGNvbnRyb2xsZXIgKi8KKwlpMmNfY2xyX2JpdChkZXYtPnZpcnRiYXNlICsgSTJDX0NSICwgSTJDX0NSX1BFKTsKKworCWRpc2FibGVfYWxsX2ludGVycnVwdHMoZGV2KTsKKworCWNsZWFyX2FsbF9pbnRlcnJ1cHRzKGRldik7CisKKwlkZXYtPmNsaS5vcGVyYXRpb24gPSBJMkNfTk9fT1BFUkFUSU9OOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGVuYWJsZSBwZXJpcGhlcmFsLCBtYXN0ZXIgbW9kZSBvcGVyYXRpb24gKi8KKyNkZWZpbmUgREVGQVVMVF9JMkNfUkVHX0NSIAkoKDEgPDwgMSkgfCBJMkNfQ1JfUEUpCisKKy8qKgorICogbG9hZF9pMmNfbWNyX3JlZygpIC0gbG9hZCB0aGUgTUNSIHJlZ2lzdGVyCisgKiBAZGV2OiBwcml2YXRlIGRhdGEgb2YgY29udHJvbGxlcgorICovCitzdGF0aWMgdTMyIGxvYWRfaTJjX21jcl9yZWcoc3RydWN0IG5ta19pMmNfZGV2ICpkZXYpCit7CisJdTMyIG1jciA9IDA7CisKKwkvKiA3LWJpdCBhZGRyZXNzIHRyYW5zYWN0aW9uICovCisJbWNyIHw9IEdFTl9NQVNLKDEsIEkyQ19NQ1JfQU0sIDEyKTsKKwltY3IgfD0gR0VOX01BU0soZGV2LT5jbGkuc2xhdmVfYWRyLCBJMkNfTUNSX0E3LCAxKTsKKworCS8qIHN0YXJ0IGJ5dGUgcHJvY2VkdXJlIG5vdCBhcHBsaWVkICovCisJbWNyIHw9IEdFTl9NQVNLKDAsIEkyQ19NQ1JfU0IsIDExKTsKKworCS8qIGNoZWNrIHRoZSBvcGVyYXRpb24sIG1hc3RlciByZWFkL3dyaXRlPyAqLworCWlmIChkZXYtPmNsaS5vcGVyYXRpb24gPT0gSTJDX1dSSVRFKQorCQltY3IgfD0gR0VOX01BU0soSTJDX1dSSVRFLCBJMkNfTUNSX09QLCAwKTsKKwllbHNlCisJCW1jciB8PSBHRU5fTUFTSyhJMkNfUkVBRCwgSTJDX01DUl9PUCwgMCk7CisKKwkvKiBzdG9wIG9yIHJlcGVhdGVkIHN0YXJ0PyAqLworCWlmIChkZXYtPnN0b3ApCisJCW1jciB8PSBHRU5fTUFTSygxLCBJMkNfTUNSX1NUT1AsIDE0KTsKKwllbHNlCisJCW1jciAmPSB+KEdFTl9NQVNLKDEsIEkyQ19NQ1JfU1RPUCwgMTQpKTsKKworCW1jciB8PSBHRU5fTUFTSyhkZXYtPmNsaS5jb3VudCwgSTJDX01DUl9MRU5HVEgsIDE1KTsKKworCXJldHVybiBtY3I7Cit9CisKKy8qKgorICogc2V0dXBfaTJjX2NvbnRyb2xsZXIoKSAtIHNldHVwIHRoZSBjb250cm9sbGVyCisgKiBAZGV2OiBwcml2YXRlIGRhdGEgb2YgY29udHJvbGxlcgorICovCitzdGF0aWMgdm9pZCBzZXR1cF9pMmNfY29udHJvbGxlcihzdHJ1Y3Qgbm1rX2kyY19kZXYgKmRldikKK3sKKwl1MzIgYnJjcjEsIGJyY3IyOworCXUzMiBpMmNfY2xrLCBkaXY7CisKKwl3cml0ZWwoMHgwLCBkZXYtPnZpcnRiYXNlICsgSTJDX0NSKTsKKwl3cml0ZWwoMHgwLCBkZXYtPnZpcnRiYXNlICsgSTJDX0hTTUNSKTsKKwl3cml0ZWwoMHgwLCBkZXYtPnZpcnRiYXNlICsgSTJDX1RGVFIpOworCXdyaXRlbCgweDAsIGRldi0+dmlydGJhc2UgKyBJMkNfUkZUUik7CisJd3JpdGVsKDB4MCwgZGV2LT52aXJ0YmFzZSArIEkyQ19ETUFSKTsKKworCS8qCisJICogc2V0IHRoZSBzbHN1OgorCSAqCisJICogc2xzdSBkZWZpbmVzIHRoZSBkYXRhIHNldHVwIHRpbWUgYWZ0ZXIgU0NMIGNsb2NrCisJICogc3RyZXRjaGluZyBpbiB0ZXJtcyBvZiBpMmMgY2xrIGN5Y2xlcy4gVGhlCisJICogbmVlZGVkIHNldHVwIHRpbWUgZm9yIHRoZSB0aHJlZSBtb2RlcyBhcmUgMjUwbnMsCisJICogMTAwbnMsIDEwbnMgcmVwZWN0aXZlbHkgdGh1cyBsZWFkaW5nIHRvIHRoZSB2YWx1ZXMKKwkgKiBvZiAxNCwgNiwgMiBmb3IgYSA0OCBNSHogaTJjIGNsay4KKwkgKi8KKwl3cml0ZWwoZGV2LT5jZmcuc2xzdSA8PCAxNiwgZGV2LT52aXJ0YmFzZSArIEkyQ19TQ1IpOworCisJaTJjX2NsayA9IGNsa19nZXRfcmF0ZShkZXYtPmNsayk7CisKKwkvKiBmYWxsYmFjayB0byBzdGQuIG1vZGUgaWYgbWFjaGluZSBoYXMgbm90IHByb3ZpZGVkIGl0ICovCisJaWYgKGRldi0+Y2ZnLmNsa19mcmVxID09IDApCisJCWRldi0+Y2ZnLmNsa19mcmVxID0gMTAwMDAwOworCisJLyoKKwkgKiBUaGUgc3BlYyBzYXlzLCBpbiBjYXNlIG9mIHN0ZC4gbW9kZSB0aGUgZGl2aWRlciBpcworCSAqIDIgd2hlcmVhcyBpdCBpcyAzIGZvciBmYXN0IGFuZCBmYXN0cGx1cyBtb2RlIG9mCisJICogb3BlcmF0aW9uLiBUT0RPIC0gaGlnaCBzcGVlZCBzdXBwb3J0LgorCSAqLworCWRpdiA9IChkZXYtPmNmZy5jbGtfZnJlcSA+IDEwMDAwMCkgPyAzIDogMjsKKworCS8qCisJICogZ2VuZXJhdGUgdGhlIG1hc2sgZm9yIGJhdWQgcmF0ZSBjb3VudGVycy4gVGhlIGNvbnRyb2xsZXIKKwkgKiBoYXMgdHdvIGJhdWQgcmF0ZSBjb3VudGVycy4gT25lIGlzIHVzZWQgZm9yIEhpZ2ggc3BlZWQKKwkgKiBvcGVyYXRpb24sIGFuZCB0aGUgb3RoZXIgaXMgZm9yIHN0ZCwgZmFzdCBtb2RlLCBmYXN0IG1vZGUKKwkgKiBwbHVzIG9wZXJhdGlvbi4gQ3VycmVudGx5IHdlIGRvIG5vdCBzdXBwcnQgaGlnaCBzcGVlZCBtb2RlCisJICogc28gc2V0IGJyY3IxIHRvIDAuCisJICovCisJYnJjcjEgPSAwIDw8IDE2OworCWJyY3IyID0gKGkyY19jbGsvKGRldi0+Y2ZnLmNsa19mcmVxICogZGl2KSkgJiAweGZmZmY7CisKKwkvKiBzZXQgdGhlIGJhdWQgcmF0ZSBjb3VudGVyIHJlZ2lzdGVyICovCisJd3JpdGVsKChicmNyMSB8IGJyY3IyKSwgZGV2LT52aXJ0YmFzZSArIEkyQ19CUkNSKTsKKworCS8qCisJICogc2V0IHRoZSBzcGVlZCBtb2RlLiBDdXJyZW50bHkgd2Ugc3VwcG9ydAorCSAqIG9ubHkgc3RhbmRhcmQgYW5kIGZhc3QgbW9kZSBvZiBvcGVyYXRpb24KKwkgKiBUT0RPIC0gc3VwcG9ydCBmb3IgZmFzdCBtb2RlIHBsdXMgKHVwdG8gMU1iL3MpCisJICogYW5kIGhpZ2ggc3BlZWQgKHVwIHRvIDMuNCBNYi9zKQorCSAqLworCWlmIChkZXYtPmNmZy5zbSA+IEkyQ19GUkVRX01PREVfRkFTVCkgeworCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgImRvIG5vdCBzdXBwb3J0IHRoaXMgbW9kZSAiCisJCQkiZGVmYXVsdGluZyB0byBzdGQuIG1vZGVcbiIpOworCQlicmNyMiA9IGkyY19jbGsvKDEwMDAwMCAqIDIpICYgMHhmZmZmOworCQl3cml0ZWwoKGJyY3IxIHwgYnJjcjIpLCBkZXYtPnZpcnRiYXNlICsgSTJDX0JSQ1IpOworCQl3cml0ZWwoSTJDX0ZSRVFfTU9ERV9TVEFOREFSRCA8PCA0LAorCQkJCWRldi0+dmlydGJhc2UgKyBJMkNfQ1IpOworCX0KKwl3cml0ZWwoZGV2LT5jZmcuc20gPDwgNCwgZGV2LT52aXJ0YmFzZSArIEkyQ19DUik7CisKKwkvKiBzZXQgdGhlIFR4IGFuZCBSeCBGSUZPIHRocmVzaG9sZCAqLworCXdyaXRlbChkZXYtPmNmZy50ZnQsIGRldi0+dmlydGJhc2UgKyBJMkNfVEZUUik7CisJd3JpdGVsKGRldi0+Y2ZnLnJmdCwgZGV2LT52aXJ0YmFzZSArIEkyQ19SRlRSKTsKK30KKworLyoqCisgKiByZWFkX2kyYygpIC0gUmVhZCBmcm9tIEkyQyBjbGllbnQgZGV2aWNlCisgKiBAZGV2OiBwcml2YXRlIGRhdGEgb2YgSTJDIERyaXZlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVhZHMgZnJvbSBpMmMgY2xpZW50IGRldmljZSB3aGVuIGNvbnRyb2xsZXIgaXMgaW4KKyAqIG1hc3RlciBtb2RlLiBUaGVyZSBpcyBhIGNvbXBsZXRpb24gdGltZW91dC4gSWYgdGhlcmUgaXMgbm8gdHJhbnNmZXIKKyAqIGJlZm9yZSB0aW1lb3V0IGVycm9yIGlzIHJldHVybmVkLgorICovCitzdGF0aWMgaW50IHJlYWRfaTJjKHN0cnVjdCBubWtfaTJjX2RldiAqZGV2KQoreworCXUzMiBzdGF0dXMgPSAwOworCXUzMiBtY3I7CisJdTMyIGlycV9tYXNrID0gMDsKKwlpbnQgdGltZW91dDsKKworCW1jciA9IGxvYWRfaTJjX21jcl9yZWcoZGV2KTsKKwl3cml0ZWwobWNyLCBkZXYtPnZpcnRiYXNlICsgSTJDX01DUik7CisKKwkvKiBsb2FkIHRoZSBjdXJyZW50IENSIHZhbHVlICovCisJd3JpdGVsKHJlYWRsKGRldi0+dmlydGJhc2UgKyBJMkNfQ1IpIHwgREVGQVVMVF9JMkNfUkVHX0NSLAorCQkJZGV2LT52aXJ0YmFzZSArIEkyQ19DUik7CisKKwkvKiBlbmFibGUgdGhlIGNvbnRyb2xsZXIgKi8KKwlpMmNfc2V0X2JpdChkZXYtPnZpcnRiYXNlICsgSTJDX0NSLCBJMkNfQ1JfUEUpOworCisJaW5pdF9jb21wbGV0aW9uKCZkZXYtPnhmZXJfY29tcGxldGUpOworCisJLyogZW5hYmxlIGludGVycnVwdHMgYnkgc2V0dGluZyB0aGUgbWFzayAqLworCWlycV9tYXNrID0gKEkyQ19JVF9SWEZORiB8IEkyQ19JVF9SWEZGIHwKKwkJCUkyQ19JVF9NQUwgfCBJMkNfSVRfQkVSUik7CisKKwlpZiAoZGV2LT5zdG9wKQorCQlpcnFfbWFzayB8PSBJMkNfSVRfTVREOworCWVsc2UKKwkJaXJxX21hc2sgfD0gSTJDX0lUX01URFdTOworCisJaXJxX21hc2sgPSBJMkNfQ0xFQVJfQUxMX0lOVFMgJiBJUlFfTUFTSyhpcnFfbWFzayk7CisKKwl3cml0ZWwocmVhZGwoZGV2LT52aXJ0YmFzZSArIEkyQ19JTVNDUikgfCBpcnFfbWFzaywKKwkJCWRldi0+dmlydGJhc2UgKyBJMkNfSU1TQ1IpOworCisJdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KAorCQkmZGV2LT54ZmVyX2NvbXBsZXRlLCBtc2Vjc190b19qaWZmaWVzKEkyQ19USU1FT1VUX01TKSk7CisKKwlpZiAodGltZW91dCA8IDApIHsKKwkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsCisJCQkid2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQiCisJCQkicmV0dXJuZWQgJWQgd2FpdGluZyBmb3IgZXZlbnRcbiIsIHRpbWVvdXQpOworCQlzdGF0dXMgPSB0aW1lb3V0OworCX0KKworCWlmICh0aW1lb3V0ID09IDApIHsKKwkJLyogY29udHJvbGVyIGhhcyB0aW1lZG91dCwgcmUtaW5pdCB0aGUgaC93ICovCisJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAiY29udHJvbGxlciB0aW1lZCBvdXQsIHJlLWluaXQgaC93XG4iKTsKKwkJKHZvaWQpIGluaXRfaHcoZGV2KTsKKwkJc3RhdHVzID0gLUVUSU1FRE9VVDsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHdyaXRlX2kyYygpIC0gV3JpdGUgZGF0YSB0byBJMkMgY2xpZW50LgorICogQGRldjogcHJpdmF0ZSBkYXRhIG9mIEkyQyBEcml2ZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdyaXRlcyBkYXRhIHRvIEkyQyBjbGllbnQKKyAqLworc3RhdGljIGludCB3cml0ZV9pMmMoc3RydWN0IG5ta19pMmNfZGV2ICpkZXYpCit7CisJdTMyIHN0YXR1cyA9IDA7CisJdTMyIG1jcjsKKwl1MzIgaXJxX21hc2sgPSAwOworCWludCB0aW1lb3V0OworCisJbWNyID0gbG9hZF9pMmNfbWNyX3JlZyhkZXYpOworCisJd3JpdGVsKG1jciwgZGV2LT52aXJ0YmFzZSArIEkyQ19NQ1IpOworCisJLyogbG9hZCB0aGUgY3VycmVudCBDUiB2YWx1ZSAqLworCXdyaXRlbChyZWFkbChkZXYtPnZpcnRiYXNlICsgSTJDX0NSKSB8IERFRkFVTFRfSTJDX1JFR19DUiwKKwkJCWRldi0+dmlydGJhc2UgKyBJMkNfQ1IpOworCisJLyogZW5hYmxlIHRoZSBjb250cm9sbGVyICovCisJaTJjX3NldF9iaXQoZGV2LT52aXJ0YmFzZSArIEkyQ19DUiAsIEkyQ19DUl9QRSk7CisKKwlpbml0X2NvbXBsZXRpb24oJmRldi0+eGZlcl9jb21wbGV0ZSk7CisKKwkvKiBlbmFibGUgaW50ZXJydXB0cyBieSBzZXR0aW5ncyB0aGUgbWFza3MgKi8KKwlpcnFfbWFzayA9IChJMkNfSVRfVFhGTkUgfCBJMkNfSVRfVFhGT1ZSIHwKKwkJCUkyQ19JVF9NQUwgfCBJMkNfSVRfQkVSUik7CisKKwkvKgorCSAqIGNoZWNrIGlmIHdlIHdhbnQgdG8gdHJhbnNmZXIgYSBzaW5nbGUgb3IgbXVsdGlwbGUgYnl0ZXMsIGlmIHNvCisJICogc2V0IHRoZSBNVERXUyBiaXQgKE1hc3RlciBUcmFuc2FjdGlvbiBEb25lIFdpdGhvdXQgU3RvcCkKKwkgKiB0byBzdGFydCByZXBlYXRlZCBzdGFydCBvcGVyYXRpb24KKwkgKi8KKwlpZiAoZGV2LT5zdG9wKQorCQlpcnFfbWFzayB8PSBJMkNfSVRfTVREOworCWVsc2UKKwkJaXJxX21hc2sgfD0gSTJDX0lUX01URFdTOworCisJaXJxX21hc2sgPSBJMkNfQ0xFQVJfQUxMX0lOVFMgJiBJUlFfTUFTSyhpcnFfbWFzayk7CisKKwl3cml0ZWwocmVhZGwoZGV2LT52aXJ0YmFzZSArIEkyQ19JTVNDUikgfCBpcnFfbWFzaywKKwkJCWRldi0+dmlydGJhc2UgKyBJMkNfSU1TQ1IpOworCisJdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KAorCQkmZGV2LT54ZmVyX2NvbXBsZXRlLCBtc2Vjc190b19qaWZmaWVzKEkyQ19USU1FT1VUX01TKSk7CisKKwlpZiAodGltZW91dCA8IDApIHsKKwkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsCisJCQkid2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQiCisJCQkicmV0dXJuZWQgJWQgd2FpdGluZyBmb3IgZXZlbnRcbiIsIHRpbWVvdXQpOworCQlzdGF0dXMgPSB0aW1lb3V0OworCX0KKworCWlmICh0aW1lb3V0ID09IDApIHsKKwkJLyogY29udHJvbGVyIGhhcyB0aW1lZG91dCwgcmUtaW5pdCB0aGUgaC93ICovCisJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAiY29udHJvbGxlciB0aW1lZCBvdXQsIHJlLWluaXQgaC93XG4iKTsKKwkJKHZvaWQpIGluaXRfaHcoZGV2KTsKKwkJc3RhdHVzID0gLUVUSU1FRE9VVDsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIG5ta19pMmNfeGZlcigpIC0gSTJDIHRyYW5zZmVyIGZ1bmN0aW9uIHVzZWQgYnkga2VybmVsIGZyYW1ld29yaworICogQGkyY19hZGFwIAktIEFkYXB0ZXIgcG9pbnRlciB0byB0aGUgY29udHJvbGxlcgorICogQG1zZ3NbXSAtIFBvaW50ZXIgdG8gZGF0YSB0byBiZSB3cml0dGVuLgorICogQG51bV9tc2dzIC0gTnVtYmVyIG9mIG1lc3NhZ2VzIHRvIGJlIGV4ZWN1dGVkCisgKgorICogVGhpcyBpcyB0aGUgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoZSBnZW5lcmljIGtlcm5lbCBpMmNfdHJhbnNmZXIoKQorICogb3IgaTJjX3NtYnVzLi4uKCkgQVBJIGNhbGxzLiBOb3RlIHRoYXQgdGhpcyBjb2RlIGlzIHByb3RlY3RlZCBieSB0aGUKKyAqIHNlbWFwaG9yZSBzZXQgaW4gdGhlIGtlcm5lbCBpMmNfdHJhbnNmZXIoKSBmdW5jdGlvbi4KKyAqCisgKiBOT1RFOgorICogUkVBRCBUUkFOU0ZFUiA6IFdlIGltcG9zZSBhIHJlc3RyaWN0aW9uIG9mIHRoZSBmaXJzdCBtZXNzYWdlIHRvIGJlIHRoZQorICogCQlpbmRleCBtZXNzYWdlIGZvciBhbnkgcmVhZCB0cmFuc2FjdGlvbi4KKyAqIAkJLSBhIG5vIGluZGV4IGlzIGNvZGVkIGFzICcwJywKKyAqIAkJLSAyYnl0ZSBiaWcgZW5kaWFuIGluZGV4IGlzIGNvZGVkIGFzICczJworICogCQkhISEgbXNnWzBdLmJ1ZiBob2xkcyB0aGUgYWN0dWFsIGluZGV4LgorICogCQlUaGlzIGlzIGNvbXBhdGlibGUgd2l0aCBnZW5lcmljIG1lc3NhZ2VzIG9mIHNtYnVzIGVtdWxhdG9yCisgKiAJCXRoYXQgc2VuZCBhIG9uZSBieXRlIGluZGV4LgorICogCQllZy4gYSBJMkMgdHJhbnNhdGlvbiB0byByZWFkIDIgYnl0ZXMgZnJvbSBpbmRleCAwCisgKgkJCWlkeCA9IDA7CisgKgkJCW1zZ1swXS5hZGRyID0gY2xpZW50LT5hZGRyOworICoJCQltc2dbMF0uZmxhZ3MgPSAweDA7CisgKgkJCW1zZ1swXS5sZW4gPSAxOworICoJCQltc2dbMF0uYnVmID0gJmlkeDsKKyAqCisgKgkJCW1zZ1sxXS5hZGRyID0gY2xpZW50LT5hZGRyOworICoJCQltc2dbMV0uZmxhZ3MgPSBJMkNfTV9SRDsKKyAqCQkJbXNnWzFdLmxlbiA9IDI7CisgKgkJCW1zZ1sxXS5idWYgPSByZF9idWZmCisgKgkJCWkyY190cmFuc2ZlcihhZGFwLCBtc2csIDIpOworICoKKyAqIFdSSVRFIFRSQU5TRkVSIDogVGhlIEkyQyBzdGFuZGFyZCBpbnRlcmZhY2UgaW50ZXJwcmV0cyBhbGwgZGF0YSBhcyBwYXlsb2FkLgorICoJCUlmIHlvdSB3YW50IHRvIGVtdWxhdGUgYW4gU01CVVMgd3JpdGUgdHJhbnNhY3Rpb24gcHV0IHRoZQorICoJCWluZGV4IGFzIGZpcnN0IGJ5dGUob3IgZmlyc3QgYW5kIHNlY29uZCkgaW4gdGhlIHBheWxvYWQuCisgKgkJZWcuIGEgSTJDIHRyYW5zYXRpb24gdG8gd3JpdGUgMiBieXRlcyBmcm9tIGluZGV4IDEKKyAqCQkJd3JfYnVmZlswXSA9IDB4MTsKKyAqCQkJd3JfYnVmZlsxXSA9IDB4MjM7CisgKgkJCXdyX2J1ZmZbMl0gPSAweDQ2OworICoJCQltc2dbMF0uZmxhZ3MgPSAweDA7CisgKgkJCW1zZ1swXS5sZW4gPSAzOworICoJCQltc2dbMF0uYnVmID0gd3JfYnVmZjsKKyAqCQkJaTJjX3RyYW5zZmVyKGFkYXAsIG1zZywgMSk7CisgKgorICogVG8gcmVhZCBvciB3cml0ZSBhIGJsb2NrIG9mIGRhdGEgKG11bHRpcGxlIGJ5dGVzKSB1c2luZyBTTUJVUyBlbXVsYXRpb24KKyAqIHBsZWFzZSB1c2UgdGhlIGkyY19zbWJ1c19yZWFkX2kyY19ibG9ja19kYXRhKCkKKyAqIG9yIGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YSgpIEFQSQorICovCitzdGF0aWMgaW50IG5ta19pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAorCQlzdHJ1Y3QgaTJjX21zZyBtc2dzW10sIGludCBudW1fbXNncykKK3sKKwlpbnQgc3RhdHVzOworCWludCBpOworCXUzMiBjYXVzZTsKKwlzdHJ1Y3Qgbm1rX2kyY19kZXYgKmRldiA9IGkyY19nZXRfYWRhcGRhdGEoaTJjX2FkYXApOworCisJc3RhdHVzID0gaW5pdF9odyhkZXYpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwkvKiBzZXR1cCB0aGUgaTJjIGNvbnRyb2xsZXIgKi8KKwlzZXR1cF9pMmNfY29udHJvbGxlcihkZXYpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9tc2dzOyBpKyspIHsKKwkJaWYgKHVubGlrZWx5KG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9URU4pKSB7CisJCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgIjEwIGJpdCBhZGRyZXNzaW5nIgorCQkJCQkibm90IHN1cHBvcnRlZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlkZXYtPmNsaS5zbGF2ZV9hZHIJPSBtc2dzW2ldLmFkZHI7CisJCWRldi0+Y2xpLmJ1ZmZlcgkJPSBtc2dzW2ldLmJ1ZjsKKwkJZGV2LT5jbGkuY291bnQJCT0gbXNnc1tpXS5sZW47CisJCWRldi0+c3RvcCA9IChpIDwgKG51bV9tc2dzIC0gMSkpID8gMCA6IDE7CisJCWRldi0+cmVzdWx0ID0gMDsKKworCQlpZiAobXNnc1tpXS5mbGFncyAmIEkyQ19NX1JEKSB7CisJCQkvKiBpdCBpcyBhIHJlYWQgb3BlcmF0aW9uICovCisJCQlkZXYtPmNsaS5vcGVyYXRpb24gPSBJMkNfUkVBRDsKKwkJCXN0YXR1cyA9IHJlYWRfaTJjKGRldik7CisJCX0gZWxzZSB7CisJCQkvKiB3cml0ZSBvcGVyYXRpb24gKi8KKwkJCWRldi0+Y2xpLm9wZXJhdGlvbiA9IEkyQ19XUklURTsKKwkJCXN0YXR1cyA9IHdyaXRlX2kyYyhkZXYpOworCQl9CisJCWlmIChzdGF0dXMgfHwgKGRldi0+cmVzdWx0KSkgeworCQkJLyogZ2V0IHRoZSBhYm9ydCBjYXVzZSAqLworCQkJY2F1c2UgPQkocmVhZGwoZGV2LT52aXJ0YmFzZSArIEkyQ19TUikgPj4gNCkgJiAweDc7CisJCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgImVycm9yIGR1cmluZyBJMkMiCisJCQkJCSJtZXNzYWdlIHhmZXI6ICVkXG4iLCBjYXVzZSk7CisJCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgIiVzXG4iLAorCQkJCWNhdXNlID49IEFSUkFZX1NJWkUoYWJvcnRfY2F1c2VzKQorCQkJCT8gInVua25vd24gcmVhc29uIiA6IGFib3J0X2NhdXNlc1tjYXVzZV0pOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCQltZGVsYXkoMSk7CisJfQorCS8qIHJldHVybiB0aGUgbm8uIG1lc3NhZ2VzIHByb2Nlc3NlZCAqLworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisJZWxzZQorCQlyZXR1cm4gbnVtX21zZ3M7Cit9CisKKy8qKgorICogZGlzYWJsZV9pbnRlcnJ1cHRzKCkgLSBkaXNhYmxlIHRoZSBpbnRlcnJ1cHRzCisgKiBAZGV2OiBwcml2YXRlIGRhdGEgb2YgY29udHJvbGxlcgorICovCitzdGF0aWMgaW50IGRpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3Qgbm1rX2kyY19kZXYgKmRldiwgdTMyIGlycSkKK3sKKwlpcnEgPSBJUlFfTUFTSyhpcnEpOworCXdyaXRlbChyZWFkbChkZXYtPnZpcnRiYXNlICsgSTJDX0lNU0NSKSAmIH4oSTJDX0NMRUFSX0FMTF9JTlRTICYgaXJxKSwKKwkJCWRldi0+dmlydGJhc2UgKyBJMkNfSU1TQ1IpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGkyY19pcnFfaGFuZGxlcigpIC0gaW50ZXJydXB0IHJvdXRpbmUKKyAqIEBpcnE6IGludGVycnVwdCBudW1iZXIKKyAqIEBhcmc6IGRhdGEgcGFzc2VkIHRvIHRoZSBoYW5kbGVyCisgKgorICogVGhpcyBpcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBpMmMgZHJpdmVyLiBDdXJyZW50bHkKKyAqIGl0IGhhbmRsZXMgdGhlIG1ham9yIGludGVycnVwdHMgbGlrZSBSeCAmIFR4IEZJRk8gbWFuYWdlbWVudAorICogaW50ZXJydXB0cywgbWFzdGVyIHRyYW5zYWN0aW9uIGludGVycnVwdHMsIGFyYml0cmF0aW9uIGFuZAorICogYnVzIGVycm9yIGludGVycnVwdHMuIFRoZSByZXN0IG9mIHRoZSBpbnRlcnJ1cHRzIGFyZSB0cmVhdGVkIGFzCisgKiB1bmhhbmRsZWQuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBpMmNfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBubWtfaTJjX2RldiAqZGV2ID0gYXJnOworCXUzMiB0ZnQsIHJmdDsKKwl1MzIgY291bnQ7CisJdTMyIG1pc3I7CisJdTMyIHNyYyA9IDA7CisKKwkvKiBsb2FkIFR4IEZJRk8gYW5kIFJ4IEZJRk8gdGhyZXNob2xkIHZhbHVlcyAqLworCXRmdCA9IHJlYWRsKGRldi0+dmlydGJhc2UgKyBJMkNfVEZUUik7CisJcmZ0ID0gcmVhZGwoZGV2LT52aXJ0YmFzZSArIEkyQ19SRlRSKTsKKworCS8qIHJlYWQgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLworCW1pc3IgPSByZWFkbChkZXYtPnZpcnRiYXNlICsgSTJDX01JU1IpOworCisJc3JjID0gX19mZnMobWlzcik7CisJc3dpdGNoICgoMSA8PCBzcmMpKSB7CisKKwkvKiBUcmFuc21pdCBGSUZPIG5lYXJseSBlbXB0eSBpbnRlcnJ1cHQgKi8KKwljYXNlIEkyQ19JVF9UWEZORToKKwl7CisJCWlmIChkZXYtPmNsaS5vcGVyYXRpb24gPT0gSTJDX1JFQUQpIHsKKwkJCS8qCisJCQkgKiBpbiByZWFkIG9wZXJhdGlvbiB3aHkgZG8gd2UgY2FyZSBmb3Igd3JpdGluZz8KKwkJCSAqIHNvIGRpc2FibGUgdGhlIFRyYW5zbWl0IEZJRk8gaW50ZXJydXB0CisJCQkgKi8KKwkJCWRpc2FibGVfaW50ZXJydXB0cyhkZXYsIEkyQ19JVF9UWEZORSk7CisJCX0gZWxzZSB7CisJCQlmb3IgKGNvdW50ID0gKE1BWF9JMkNfRklGT19USFJFU0hPTEQgLSB0ZnQgLSAyKTsKKwkJCQkJKGNvdW50ID4gMCkgJiYKKwkJCQkJKGRldi0+Y2xpLmNvdW50ICE9IDApOworCQkJCQljb3VudC0tKSB7CisJCQkJLyogd3JpdGUgdG8gdGhlIFR4IEZJRk8gKi8KKwkJCQl3cml0ZWIoKmRldi0+Y2xpLmJ1ZmZlciwKKwkJCQkJZGV2LT52aXJ0YmFzZSArIEkyQ19URlIpOworCQkJCWRldi0+Y2xpLmJ1ZmZlcisrOworCQkJCWRldi0+Y2xpLmNvdW50LS07CisJCQkJZGV2LT5jbGkueGZlcl9ieXRlcysrOworCQkJfQorCQkJLyoKKwkJCSAqIGlmIGRvbmUsIGNsb3NlIHRoZSB0cmFuc2ZlciBieSBkaXNhYmxpbmcgdGhlCisJCQkgKiBjb3JyZXNwb25kaW5nIFRYRk5FIGludGVycnVwdAorCQkJICovCisJCQlpZiAoZGV2LT5jbGkuY291bnQgPT0gMCkKKwkJCQlkaXNhYmxlX2ludGVycnVwdHMoZGV2LAlJMkNfSVRfVFhGTkUpOworCQl9CisJfQorCWJyZWFrOworCisJLyoKKwkgKiBSeCBGSUZPIG5lYXJseSBmdWxsIGludGVycnVwdC4KKwkgKiBUaGlzIGlzIHNldCB3aGVuIHRoZSBudW1lciBvZiBlbnRyaWVzIGluIFJ4IEZJRk8gaXMKKwkgKiBncmVhdGVyIG9yIGVxdWFsIHRoYW4gdGhlIHRocmVzaG9sZCB2YWx1ZSBwcm9ncmFtbWVkCisJICogaW4gUkZUCisJICovCisJY2FzZSBJMkNfSVRfUlhGTkY6CisJCWZvciAoY291bnQgPSByZnQ7IGNvdW50ID4gMDsgY291bnQtLSkgeworCQkJLyogUmVhZCB0aGUgUnggRklGTyAqLworCQkJKmRldi0+Y2xpLmJ1ZmZlciA9IHJlYWRiKGRldi0+dmlydGJhc2UgKyBJMkNfUkZSKTsKKwkJCWRldi0+Y2xpLmJ1ZmZlcisrOworCQl9CisJCWRldi0+Y2xpLmNvdW50IC09IHJmdDsKKwkJZGV2LT5jbGkueGZlcl9ieXRlcyArPSByZnQ7CisJCWJyZWFrOworCisJLyogUnggRklGTyBmdWxsICovCisJY2FzZSBJMkNfSVRfUlhGRjoKKwkJZm9yIChjb3VudCA9IE1BWF9JMkNfRklGT19USFJFU0hPTEQ7IGNvdW50ID4gMDsgY291bnQtLSkgeworCQkJKmRldi0+Y2xpLmJ1ZmZlciA9IHJlYWRiKGRldi0+dmlydGJhc2UgKyBJMkNfUkZSKTsKKwkJCWRldi0+Y2xpLmJ1ZmZlcisrOworCQl9CisJCWRldi0+Y2xpLmNvdW50IC09IE1BWF9JMkNfRklGT19USFJFU0hPTEQ7CisJCWRldi0+Y2xpLnhmZXJfYnl0ZXMgKz0gTUFYX0kyQ19GSUZPX1RIUkVTSE9MRDsKKwkJYnJlYWs7CisKKwkvKiBNYXN0ZXIgVHJhbnNhY3Rpb24gRG9uZSB3aXRoL3dpdGhvdXQgc3RvcCAqLworCWNhc2UgSTJDX0lUX01URDoKKwljYXNlIEkyQ19JVF9NVERXUzoKKwkJaWYgKGRldi0+Y2xpLm9wZXJhdGlvbiA9PSBJMkNfUkVBRCkgeworCQkJd2hpbGUgKCFyZWFkbChkZXYtPnZpcnRiYXNlICsgSTJDX1JJU1IpICYgSTJDX0lUX1JYRkUpIHsKKwkJCQlpZiAoZGV2LT5jbGkuY291bnQgPT0gMCkKKwkJCQkJYnJlYWs7CisJCQkJKmRldi0+Y2xpLmJ1ZmZlciA9CisJCQkJCXJlYWRiKGRldi0+dmlydGJhc2UgKyBJMkNfUkZSKTsKKwkJCQlkZXYtPmNsaS5idWZmZXIrKzsKKwkJCQlkZXYtPmNsaS5jb3VudC0tOworCQkJCWRldi0+Y2xpLnhmZXJfYnl0ZXMrKzsKKwkJCX0KKwkJfQorCisJCWkyY19zZXRfYml0KGRldi0+dmlydGJhc2UgKyBJMkNfSUNSLCBJMkNfSVRfTVREKTsKKwkJaTJjX3NldF9iaXQoZGV2LT52aXJ0YmFzZSArIEkyQ19JQ1IsIEkyQ19JVF9NVERXUyk7CisKKwkJZGlzYWJsZV9pbnRlcnJ1cHRzKGRldiwKKwkJCQkoSTJDX0lUX1RYRk5FIHwgSTJDX0lUX1RYRkUgfCBJMkNfSVRfVFhGRgorCQkJCQl8IEkyQ19JVF9UWEZPVlIgfCBJMkNfSVRfUlhGTkYKKwkJCQkJfCBJMkNfSVRfUlhGRiB8IEkyQ19JVF9SWEZFKSk7CisKKwkJaWYgKGRldi0+Y2xpLmNvdW50KSB7CisJCQlkZXYtPnJlc3VsdCA9IC0xOworCQkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsICIlbHUgYnl0ZXMgc3RpbGwgcmVtYWluIHRvIGJlIgorCQkJCQkieGZlcmVkXG4iLCBkZXYtPmNsaS5jb3VudCk7CisJCQkodm9pZCkgaW5pdF9odyhkZXYpOworCQl9CisJCWNvbXBsZXRlKCZkZXYtPnhmZXJfY29tcGxldGUpOworCisJCWJyZWFrOworCisJLyogTWFzdGVyIEFyYml0cmF0aW9uIGxvc3QgaW50ZXJydXB0ICovCisJY2FzZSBJMkNfSVRfTUFMOgorCQlkZXYtPnJlc3VsdCA9IC0xOworCQkodm9pZCkgaW5pdF9odyhkZXYpOworCisJCWkyY19zZXRfYml0KGRldi0+dmlydGJhc2UgKyBJMkNfSUNSLCBJMkNfSVRfTUFMKTsKKwkJY29tcGxldGUoJmRldi0+eGZlcl9jb21wbGV0ZSk7CisKKwkJYnJlYWs7CisKKwkvKgorCSAqIEJ1cyBFcnJvciBpbnRlcnJ1cHQuCisJICogVGhpcyBoYXBwZW5zIHdoZW4gYW4gdW5leHBlY3RlZCBzdGFydC9zdG9wIGNvbmRpdGlvbiBvY2N1cnMKKwkgKiBkdXJpbmcgdGhlIHRyYW5zYWN0aW9uLgorCSAqLworCWNhc2UgSTJDX0lUX0JFUlI6CisJCWRldi0+cmVzdWx0ID0gLTE7CisJCS8qIGdldCB0aGUgc3RhdHVzICovCisJCWlmICgoKHJlYWRsKGRldi0+dmlydGJhc2UgKyBJMkNfU1IpID4+IDIpICYgMHgzKSA9PSBJMkNfQUJPUlQpCisJCQkodm9pZCkgaW5pdF9odyhkZXYpOworCisJCWkyY19zZXRfYml0KGRldi0+dmlydGJhc2UgKyBJMkNfSUNSLCBJMkNfSVRfQkVSUik7CisJCWNvbXBsZXRlKCZkZXYtPnhmZXJfY29tcGxldGUpOworCisJCWJyZWFrOworCisJLyoKKwkgKiBUeCBGSUZPIG92ZXJydW4gaW50ZXJydXB0LgorCSAqIFRoaXMgaXMgc2V0IHdoZW4gYSB3cml0ZSBvcGVyYXRpb24gaW4gVHggRklGTyBpcyBwZXJmb3JtZWQgYW5kCisJICogdGhlIFR4IEZJRk8gaXMgZnVsbC4KKwkgKi8KKwljYXNlIEkyQ19JVF9UWEZPVlI6CisJCWRldi0+cmVzdWx0ID0gLTE7CisJCSh2b2lkKSBpbml0X2h3KGRldik7CisKKwkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsICJUeCBGaWZvIE92ZXIgcnVuXG4iKTsKKwkJY29tcGxldGUoJmRldi0+eGZlcl9jb21wbGV0ZSk7CisKKwkJYnJlYWs7CisKKwkvKiB1bmhhbmRsZWQgaW50ZXJydXB0cyBieSB0aGlzIGRyaXZlciAtIFRPRE8qLworCWNhc2UgSTJDX0lUX1RYRkU6CisJY2FzZSBJMkNfSVRfVFhGRjoKKwljYXNlIEkyQ19JVF9SWEZFOgorCWNhc2UgSTJDX0lUX1JGU1I6CisJY2FzZSBJMkNfSVRfUkZTRToKKwljYXNlIEkyQ19JVF9XVFNSOgorCWNhc2UgSTJDX0lUX1NURDoKKwkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsICJ1bmhhbmRsZWQgSW50ZXJydXB0XG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsICJzcHVyaW91cyBJbnRlcnJ1cHQuLlxuIik7CisJCWJyZWFrOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBubWtfaTJjX2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworCXJldHVybiBJMkNfRlVOQ19JMkMKKwkJfCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEKKwkJfCBJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEKKwkJfCBJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0s7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBubWtfaTJjX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyCT0gbm1rX2kyY194ZmVyLAorCS5mdW5jdGlvbmFsaXR5CT0gbm1rX2kyY19mdW5jdGlvbmFsaXR5Cit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBubWtfaTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IG5ta19pMmNfY29udHJvbGxlciAqcGRhdGEgPQorCQkJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG5ta19pMmNfZGV2CSpkZXY7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwOworCisJZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5ta19pMmNfZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX25vX21lbTsKKwl9CisKKwlkZXYtPnBkZXYgPSBwZGV2OworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX25vX3Jlc291cmNlOworCX0KKworCWlmIChyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAorCQlEUklWRVJfTkFNRSAiSS9PIHJlZ2lvbiIpID09IAlOVUxMKQl7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnJfbm9fcmVnaW9uOworCX0KKworCWRldi0+dmlydGJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFkZXYtPnZpcnRiYXNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX25vX2lvcmVtYXA7CisJfQorCisJZGV2LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBpMmNfaXJxX2hhbmRsZXIsIElSUUZfRElTQUJMRUQsCisJCQkJRFJJVkVSX05BTUUsIGRldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgY2xhaW0gdGhlIGlycSAlZFxuIiwgZGV2LT5pcnEpOworCQlnb3RvIGVycl9pcnE7CisJfQorCisJZGV2LT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIoZGV2LT5jbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkIG5vdCBnZXQgaTJjIGNsb2NrXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihkZXYtPmNsayk7CisJCWdvdG8gZXJyX25vX2NsazsKKwl9CisKKwljbGtfZW5hYmxlKGRldi0+Y2xrKTsKKworCWFkYXAgPSAmZGV2LT5hZGFwOworCWFkYXAtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCWFkYXAtPm93bmVyCT0gVEhJU19NT0RVTEU7CisJYWRhcC0+Y2xhc3MJPSBJMkNfQ0xBU1NfSFdNT04gfCBJMkNfQ0xBU1NfU1BEOworCWFkYXAtPmFsZ28JPSAmbm1rX2kyY19hbGdvOworCisJLyogZmV0Y2ggdGhlIGNvbnRyb2xsZXIgaWQgKi8KKwlhZGFwLT5ucgk9IHBkZXYtPmlkOworCisJLyogZmV0Y2ggdGhlIGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbiBmcm9tIG1hY2hpbmUgKi8KKwlkZXYtPmNmZy5jbGtfZnJlcSA9IHBkYXRhLT5jbGtfZnJlcTsKKwlkZXYtPmNmZy5zbHN1CT0gcGRhdGEtPnNsc3U7CisJZGV2LT5jZmcudGZ0CT0gcGRhdGEtPnRmdDsKKwlkZXYtPmNmZy5yZnQJPSBwZGF0YS0+cmZ0OworCWRldi0+Y2ZnLnNtCT0gcGRhdGEtPnNtOworCisJaTJjX3NldF9hZGFwZGF0YShhZGFwLCBkZXYpOworCisJcmV0ID0gaW5pdF9odyhkZXYpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJlcnJvciBpbiBpbml0aWFsaXppbmcgaTJjIGhhcmR3YXJlXG4iKTsKKwkJZ290byBlcnJfaW5pdF9odzsKKwl9CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJpbml0aWFsaXplIEkyQyVkIGJ1cyBvbiB2aXJ0dWFsICIKKwkJImJhc2UgJXBcbiIsIHBkZXYtPmlkLCBkZXYtPnZpcnRiYXNlKTsKKworCXJldCA9IGkyY19hZGRfbnVtYmVyZWRfYWRhcHRlcihhZGFwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhZGQgYWRhcHRlclxuIik7CisJCWdvdG8gZXJyX2FkZF9hZGFwOworCX0KKworCXJldHVybiAwOworCisgZXJyX2luaXRfaHc6CisJY2xrX2Rpc2FibGUoZGV2LT5jbGspOworIGVycl9hZGRfYWRhcDoKKwljbGtfcHV0KGRldi0+Y2xrKTsKKyBlcnJfbm9fY2xrOgorCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworIGVycl9pcnE6CisJaW91bm1hcChkZXYtPnZpcnRiYXNlKTsKKyBlcnJfbm9faW9yZW1hcDoKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKyBlcnJfbm9fcmVnaW9uOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworIGVycl9ub19yZXNvdXJjZToKKwlrZnJlZShkZXYpOworIGVycl9ub19tZW06CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBubWtfaTJjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBubWtfaTJjX2RldiAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpMmNfZGVsX2FkYXB0ZXIoJmRldi0+YWRhcCk7CisJZmx1c2hfaTJjX2ZpZm8oZGV2KTsKKwlkaXNhYmxlX2FsbF9pbnRlcnJ1cHRzKGRldik7CisJY2xlYXJfYWxsX2ludGVycnVwdHMoZGV2KTsKKwkvKiBkaXNhYmxlIHRoZSBjb250cm9sbGVyICovCisJaTJjX2Nscl9iaXQoZGV2LT52aXJ0YmFzZSArIEkyQ19DUiwgSTJDX0NSX1BFKTsKKwlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlpb3VubWFwKGRldi0+dmlydGJhc2UpOworCWNsa19kaXNhYmxlKGRldi0+Y2xrKTsKKwljbGtfcHV0KGRldi0+Y2xrKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlrZnJlZShkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG5ta19pMmNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZSA9IERSSVZFUl9OQU1FLAorCX0sCisJLnByb2JlID0gbm1rX2kyY19wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aobm1rX2kyY19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbm1rX2kyY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmbm1rX2kyY19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbm1rX2kyY19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm5ta19pMmNfZHJpdmVyKTsKK30KKworc3Vic3lzX2luaXRjYWxsKG5ta19pMmNfaW5pdCk7Cittb2R1bGVfZXhpdChubWtfaTJjX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJTYWNoaW4gVmVybWEsIFNyaW5pZGhpIEtBU0FHQVIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTm9tYWRpay9VeDUwMCBJMkMgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgRFJJVkVSX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYwppbmRleCAwMDM3ZTMxLi45MTNhYmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYwpAQCAtNDksMjQgKzQ5LDI0IEBACiAjZGVmaW5lIE9NQVBfSTJDX1RJTUVPVVQgKG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpCiAKICNkZWZpbmUgT01BUF9JMkNfUkVWX1JFRwkJMHgwMAotI2RlZmluZSBPTUFQX0kyQ19JRV9SRUcJCQkweDA0Ci0jZGVmaW5lIE9NQVBfSTJDX1NUQVRfUkVHCQkweDA4Ci0jZGVmaW5lIE9NQVBfSTJDX0lWX1JFRwkJCTB4MGMKKyNkZWZpbmUgT01BUF9JMkNfSUVfUkVHCQkJMHgwMQorI2RlZmluZSBPTUFQX0kyQ19TVEFUX1JFRwkJMHgwMgorI2RlZmluZSBPTUFQX0kyQ19JVl9SRUcJCQkweDAzCiAvKiBGb3IgT01BUDMgSTJDX0lWIGhhcyBjaGFuZ2VkIHRvIEkyQ19XRSAod2FrZXVwIGVuYWJsZSkgKi8KLSNkZWZpbmUgT01BUF9JMkNfV0VfUkVHCQkJMHgwYwotI2RlZmluZSBPTUFQX0kyQ19TWVNTX1JFRwkJMHgxMAotI2RlZmluZSBPTUFQX0kyQ19CVUZfUkVHCQkweDE0Ci0jZGVmaW5lIE9NQVBfSTJDX0NOVF9SRUcJCTB4MTgKLSNkZWZpbmUgT01BUF9JMkNfREFUQV9SRUcJCTB4MWMKLSNkZWZpbmUgT01BUF9JMkNfU1lTQ19SRUcJCTB4MjAKLSNkZWZpbmUgT01BUF9JMkNfQ09OX1JFRwkJMHgyNAotI2RlZmluZSBPTUFQX0kyQ19PQV9SRUcJCQkweDI4Ci0jZGVmaW5lIE9NQVBfSTJDX1NBX1JFRwkJCTB4MmMKLSNkZWZpbmUgT01BUF9JMkNfUFNDX1JFRwkJMHgzMAotI2RlZmluZSBPTUFQX0kyQ19TQ0xMX1JFRwkJMHgzNAotI2RlZmluZSBPTUFQX0kyQ19TQ0xIX1JFRwkJMHgzOAotI2RlZmluZSBPTUFQX0kyQ19TWVNURVNUX1JFRwkJMHgzYwotI2RlZmluZSBPTUFQX0kyQ19CVUZTVEFUX1JFRwkJMHg0MAorI2RlZmluZSBPTUFQX0kyQ19XRV9SRUcJCQkweDAzCisjZGVmaW5lIE9NQVBfSTJDX1NZU1NfUkVHCQkweDA0CisjZGVmaW5lIE9NQVBfSTJDX0JVRl9SRUcJCTB4MDUKKyNkZWZpbmUgT01BUF9JMkNfQ05UX1JFRwkJMHgwNgorI2RlZmluZSBPTUFQX0kyQ19EQVRBX1JFRwkJMHgwNworI2RlZmluZSBPTUFQX0kyQ19TWVNDX1JFRwkJMHgwOAorI2RlZmluZSBPTUFQX0kyQ19DT05fUkVHCQkweDA5CisjZGVmaW5lIE9NQVBfSTJDX09BX1JFRwkJCTB4MGEKKyNkZWZpbmUgT01BUF9JMkNfU0FfUkVHCQkJMHgwYgorI2RlZmluZSBPTUFQX0kyQ19QU0NfUkVHCQkweDBjCisjZGVmaW5lIE9NQVBfSTJDX1NDTExfUkVHCQkweDBkCisjZGVmaW5lIE9NQVBfSTJDX1NDTEhfUkVHCQkweDBlCisjZGVmaW5lIE9NQVBfSTJDX1NZU1RFU1RfUkVHCQkweDBmCisjZGVmaW5lIE9NQVBfSTJDX0JVRlNUQVRfUkVHCQkweDEwCiAKIC8qIEkyQyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIChPTUFQX0kyQ19JRSk6ICovCiAjZGVmaW5lIE9NQVBfSTJDX0lFX1hEUgkJKDEgPDwgMTQpCS8qIFRYIEJ1ZmZlciBkcmFpbiBpbnQgZW5hYmxlICovCkBAIC0xNjEsNiArMTYxLDcgQEAKIAlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwogCXZvaWQgX19pb21lbQkJKmJhc2U7CQkvKiB2aXJ0dWFsICovCiAJaW50CQkJaXJxOworCWludAkJCXJlZ19zaGlmdDsgICAgICAvKiBiaXQgc2hpZnQgZm9yIEkyQyByZWdpc3RlciBhZGRyZXNzZXMgKi8KIAlzdHJ1Y3QgY2xrCQkqaWNsazsJCS8qIEludGVyZmFjZSBjbG9jayAqLwogCXN0cnVjdCBjbGsJCSpmY2xrOwkJLyogRnVuY3Rpb25hbCBjbG9jayAqLwogCXN0cnVjdCBjb21wbGV0aW9uCWNtZF9jb21wbGV0ZTsKQEAgLTE4OSwxMiArMTkwLDEyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pMmNfd3JpdGVfcmVnKHN0cnVjdCBvbWFwX2kyY19kZXYgKmkyY19kZXYsCiAJCQkJICAgICAgaW50IHJlZywgdTE2IHZhbCkKIHsKLQlfX3Jhd193cml0ZXcodmFsLCBpMmNfZGV2LT5iYXNlICsgcmVnKTsKKwlfX3Jhd193cml0ZXcodmFsLCBpMmNfZGV2LT5iYXNlICsgKHJlZyA8PCBpMmNfZGV2LT5yZWdfc2hpZnQpKTsKIH0KIAogc3RhdGljIGlubGluZSB1MTYgb21hcF9pMmNfcmVhZF9yZWcoc3RydWN0IG9tYXBfaTJjX2RldiAqaTJjX2RldiwgaW50IHJlZykKIHsKLQlyZXR1cm4gX19yYXdfcmVhZHcoaTJjX2Rldi0+YmFzZSArIHJlZyk7CisJcmV0dXJuIF9fcmF3X3JlYWR3KGkyY19kZXYtPmJhc2UgKyAocmVnIDw8IGkyY19kZXYtPnJlZ19zaGlmdCkpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX2kyY19nZXRfY2xvY2tzKHN0cnVjdCBvbWFwX2kyY19kZXYgKmRldikKQEAgLTkyNCw2ICs5MjUsMTEgQEAKIAkJZGV2LT5iX2h3ID0gMTsgLyogRW5hYmxlIGhhcmR3YXJlIGZpeGVzICovCiAJfQogCisJaWYgKGNwdV9pc19vbWFwN3h4KCkpCisJCWRldi0+cmVnX3NoaWZ0ID0gMTsKKwllbHNlCisJCWRldi0+cmVnX3NoaWZ0ID0gMjsKKwogCS8qIHJlc2V0IEFTQVAsIGNsZWFyaW5nIGFueSBJUlFzICovCiAJb21hcF9pMmNfaW5pdChkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBueC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wbnguYwppbmRleCAyYjBiZDBiLi45NTMyZGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBueC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG54LmMKQEAgLTE3MiwxMiArMTcyLDYgQEAKIAkJLyogV2Ugc3RpbGwgaGF2ZSBzb21ldGhpbmcgdG8gdGFsayBhYm91dC4uLiAqLwogCQl2YWwgPSAqYWxnX2RhdGEtPm1pZi5idWYrKzsKIAotCQlpZiAoYWxnX2RhdGEtPm1pZi5sZW4gPT0gMSkgewotCQkJdmFsIHw9IHN0b3BfYml0OwotCQkJaWYgKCFhbGdfZGF0YS0+bGFzdCkKLQkJCQl2YWwgfD0gc3RhcnRfYml0OwotCQl9Ci0KIAkJYWxnX2RhdGEtPm1pZi5sZW4tLTsKIAkJaW93cml0ZTMyKHZhbCwgSTJDX1JFR19UWChhbGdfZGF0YSkpOwogCkBAIC0yNTEsMTEgKzI0NSw2IEBACiAJCQlfX2Z1bmNfXyk7CiAKIAkJaWYgKGFsZ19kYXRhLT5taWYubGVuID09IDEpIHsKLQkJCS8qIExhc3QgYnl0ZSwgZG8gbm90IGFja25vd2xlZGdlIG5leHQgcmN2LiAqLwotCQkJdmFsIHw9IHN0b3BfYml0OwotCQkJaWYgKCFhbGdfZGF0YS0+bGFzdCkKLQkJCQl2YWwgfD0gc3RhcnRfYml0OwotCiAJCQkvKgogCQkJICogRW5hYmxlIGludGVycnVwdCBSRkRBSUUgKGRhdGEgaW4gUnggZmlmbyksCiAJCQkgKiBhbmQgZGlzYWJsZSBEUk1JRSAobmVlZCBkYXRhIGZvciBUeCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGlpYy5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy14aWljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVjZTM5YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGlpYy5jCkBAIC0wLDAgKzEsODI0IEBACisvKgorICogaTJjLXhpaWMuYworICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDcgWGlsaW54IEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIEludGVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICoKKyAqIFRoaXMgY29kZSB3YXMgaW1wbGVtZW50ZWQgYnkgTW9jZWFuIExhYm9yYXRvcmllcyBBQiB3aGVuIHBvcnRpbmcgbGludXgKKyAqIHRvIHRoZSBhdXRvbW90aXZlIGRldmVsb3BtZW50IGJvYXJkIFJ1c3NlbGx2aWxsZS4gVGhlIGNvcHlyaWdodCBob2xkZXIKKyAqIGFzIHNlZW4gaW4gdGhlIGhlYWRlciBpcyBJbnRlbCBjb3Jwb3JhdGlvbi4KKyAqIE1vY2VhbiBMYWJvcmF0b3JpZXMgZm9ya2VkIG9mZiB0aGUgR05VL0xpbnV4IHBsYXRmb3JtIHdvcmsgaW50byBhCisgKiBzZXBhcmF0ZSBjb21wYW55IGNhbGxlZCBQZWxhZ2ljb3JlIEFCLCB3aGljaCBjb21taXRlZCB0aGUgY29kZSB0byB0aGUKKyAqIGtlcm5lbC4KKyAqLworCisvKiBTdXBwb3J0czoKKyAqIFhpbGlueCBJSUMKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMteGlpYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUgInhpaWMtaTJjIgorCitlbnVtIHhpbGlueF9pMmNfc3RhdGUgeworCVNUQVRFX0RPTkUsCisJU1RBVEVfRVJST1IsCisJU1RBVEVfU1RBUlQKK307CisKKy8qKgorICogc3RydWN0IHhpaWNfaTJjIC0gSW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIFhJSUMgSTJDIGJ1cworICogQGJhc2U6CU1lbW9yeSBiYXNlIG9mIHRoZSBIVyByZWdpc3RlcnMKKyAqIEB3YWl0OglXYWl0IHF1ZXVlIGZvciBjYWxsZXJzCisgKiBAYWRhcDoJS2VybmVsIGFkYXB0ZXIgcmVwcmVzZW50YXRpb24KKyAqIEB0eF9tc2c6CU1lc3NhZ2VzIGZyb20gYWJvdmUgdG8gYmUgc2VudAorICogQGxvY2s6CU11dHVhbCBleGNsdXNpb24KKyAqIEB0eF9wb3M6CUN1cnJlbnQgcG9zIGluIFRYIG1lc3NhZ2UKKyAqIEBubXNnczoJTnVtYmVyIG9mIG1lc3NhZ2VzIGluIHR4X21zZworICogQHN0YXRlOglTZWUgU1RBVEVfCisgKiBAcnhfbXNnOglDdXJyZW50IFJYIG1lc3NhZ2UKKyAqIEByeF9wb3M6CVBvc2l0aW9uIHdpdGhpbiBjdXJyZW50IFJYIG1lc3NhZ2UKKyAqLworc3RydWN0IHhpaWNfaTJjIHsKKwl2b2lkIF9faW9tZW0JCSpiYXNlOworCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7CisJc3RydWN0IGkyY19hZGFwdGVyCWFkYXA7CisJc3RydWN0IGkyY19tc2cJCSp0eF9tc2c7CisJc3BpbmxvY2tfdAkJbG9jazsKKwl1bnNpZ25lZCBpbnQgCQl0eF9wb3M7CisJdW5zaWduZWQgaW50CQlubXNnczsKKwllbnVtIHhpbGlueF9pMmNfc3RhdGUJc3RhdGU7CisJc3RydWN0IGkyY19tc2cJCSpyeF9tc2c7CisJaW50CQkJcnhfcG9zOworfTsKKworCisjZGVmaW5lIFhJSUNfTVNCX09GRlNFVCAwCisjZGVmaW5lIFhJSUNfUkVHX09GRlNFVCAoMHgxMDArWElJQ19NU0JfT0ZGU0VUKQorCisvKgorICogUmVnaXN0ZXIgb2Zmc2V0cyBpbiBieXRlcyBmcm9tIFJlZ2lzdGVyQmFzZS4gVGhyZWUgaXMgYWRkZWQgdG8gdGhlCisgKiBiYXNlIG9mZnNldCB0byBhY2Nlc3MgTFNCIChJQk0gc3R5bGUpIG9mIHRoZSB3b3JkCisgKi8KKyNkZWZpbmUgWElJQ19DUl9SRUdfT0ZGU0VUICAgKDB4MDArWElJQ19SRUdfT0ZGU0VUKQkvKiBDb250cm9sIFJlZ2lzdGVyICAgKi8KKyNkZWZpbmUgWElJQ19TUl9SRUdfT0ZGU0VUICAgKDB4MDQrWElJQ19SRUdfT0ZGU0VUKQkvKiBTdGF0dXMgUmVnaXN0ZXIgICAgKi8KKyNkZWZpbmUgWElJQ19EVFJfUkVHX09GRlNFVCAgKDB4MDgrWElJQ19SRUdfT0ZGU0VUKQkvKiBEYXRhIFR4IFJlZ2lzdGVyICAgKi8KKyNkZWZpbmUgWElJQ19EUlJfUkVHX09GRlNFVCAgKDB4MEMrWElJQ19SRUdfT0ZGU0VUKQkvKiBEYXRhIFJ4IFJlZ2lzdGVyICAgKi8KKyNkZWZpbmUgWElJQ19BRFJfUkVHX09GRlNFVCAgKDB4MTArWElJQ19SRUdfT0ZGU0VUKQkvKiBBZGRyZXNzIFJlZ2lzdGVyICAgKi8KKyNkZWZpbmUgWElJQ19URk9fUkVHX09GRlNFVCAgKDB4MTQrWElJQ19SRUdfT0ZGU0VUKQkvKiBUeCBGSUZPIE9jY3VwYW5jeSAgKi8KKyNkZWZpbmUgWElJQ19SRk9fUkVHX09GRlNFVCAgKDB4MTgrWElJQ19SRUdfT0ZGU0VUKQkvKiBSeCBGSUZPIE9jY3VwYW5jeSAgKi8KKyNkZWZpbmUgWElJQ19UQkFfUkVHX09GRlNFVCAgKDB4MUMrWElJQ19SRUdfT0ZGU0VUKQkvKiAxMCBCaXQgQWRkcmVzcyByZWcgKi8KKyNkZWZpbmUgWElJQ19SRkRfUkVHX09GRlNFVCAgKDB4MjArWElJQ19SRUdfT0ZGU0VUKQkvKiBSeCBGSUZPIERlcHRoIHJlZyAgKi8KKyNkZWZpbmUgWElJQ19HUE9fUkVHX09GRlNFVCAgKDB4MjQrWElJQ19SRUdfT0ZGU0VUKQkvKiBPdXRwdXQgUmVnaXN0ZXIgICAgKi8KKworLyogQ29udHJvbCBSZWdpc3RlciBtYXNrcyAqLworI2RlZmluZSBYSUlDX0NSX0VOQUJMRV9ERVZJQ0VfTUFTSyAgICAgICAgMHgwMQkvKiBEZXZpY2UgZW5hYmxlID0gMSAgICAgICovCisjZGVmaW5lIFhJSUNfQ1JfVFhfRklGT19SRVNFVF9NQVNLICAgICAgICAweDAyCS8qIFRyYW5zbWl0IEZJRk8gcmVzZXQ9MSAgKi8KKyNkZWZpbmUgWElJQ19DUl9NU01TX01BU0sgICAgICAgICAgICAgICAgIDB4MDQJLyogTWFzdGVyIHN0YXJ0cyBUeGluZz0xICAqLworI2RlZmluZSBYSUlDX0NSX0RJUl9JU19UWF9NQVNLICAgICAgICAgICAgMHgwOAkvKiBEaXIgb2YgdHguIFR4aW5nPTEgICAgICovCisjZGVmaW5lIFhJSUNfQ1JfTk9fQUNLX01BU0sgICAgICAgICAgICAgICAweDEwCS8qIFR4IEFjay4gTk8gYWNrID0gMSAgICAgKi8KKyNkZWZpbmUgWElJQ19DUl9SRVBFQVRFRF9TVEFSVF9NQVNLICAgICAgIDB4MjAJLyogUmVwZWF0ZWQgc3RhcnQgPSAxICAgICAqLworI2RlZmluZSBYSUlDX0NSX0dFTkVSQUxfQ0FMTF9NQVNLICAgICAgICAgMHg0MAkvKiBHZW4gQ2FsbCBlbmFibGVkID0gMSAgICovCisKKy8qIFN0YXR1cyBSZWdpc3RlciBtYXNrcyAqLworI2RlZmluZSBYSUlDX1NSX0dFTl9DQUxMX01BU0sgICAgICAgICAgICAgMHgwMQkvKiAxPWEgbXN0ciBpc3N1ZWQgYSBHQyAgICovCisjZGVmaW5lIFhJSUNfU1JfQUREUl9BU19TTEFWRV9NQVNLICAgICAgICAweDAyCS8qIDE9d2hlbiBhZGRyIGFzIHNsYXZlICAgKi8KKyNkZWZpbmUgWElJQ19TUl9CVVNfQlVTWV9NQVNLICAgICAgICAgICAgIDB4MDQJLyogMSA9IGJ1cyBpcyBidXN5ICAgICAgICAqLworI2RlZmluZSBYSUlDX1NSX01TVFJfUkRJTkdfU0xBVkVfTUFTSyAgICAgMHgwOAkvKiAxPURpcjogbXN0ciA8LS0gc2xhdmUgICovCisjZGVmaW5lIFhJSUNfU1JfVFhfRklGT19GVUxMX01BU0sgICAgICAgICAweDEwCS8qIDEgPSBUeCBGSUZPIGZ1bGwgICAgICAgKi8KKyNkZWZpbmUgWElJQ19TUl9SWF9GSUZPX0ZVTExfTUFTSyAgICAgICAgIDB4MjAJLyogMSA9IFJ4IEZJRk8gZnVsbCAgICAgICAqLworI2RlZmluZSBYSUlDX1NSX1JYX0ZJRk9fRU1QVFlfTUFTSyAgICAgICAgMHg0MAkvKiAxID0gUnggRklGTyBlbXB0eSAgICAgICovCisjZGVmaW5lIFhJSUNfU1JfVFhfRklGT19FTVBUWV9NQVNLICAgICAgICAweDgwCS8qIDEgPSBUeCBGSUZPIGVtcHR5ICAgICAgKi8KKworLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciBtYXNrcyAgICBJbnRlcnJ1cHQgb2NjdXJzIHdoZW4uLi4gICAgICAgKi8KKyNkZWZpbmUgWElJQ19JTlRSX0FSQl9MT1NUX01BU0sgICAgICAgICAgIDB4MDEJLyogMSA9IGFyYml0cmF0aW9uIGxvc3QgICAqLworI2RlZmluZSBYSUlDX0lOVFJfVFhfRVJST1JfTUFTSyAgICAgICAgICAgMHgwMgkvKiAxPVR4IGVycm9yL21zZyBjb21wbGV0ZSAqLworI2RlZmluZSBYSUlDX0lOVFJfVFhfRU1QVFlfTUFTSyAgICAgICAgICAgMHgwNAkvKiAxID0gVHggRklGTy9yZWcgZW1wdHkgICovCisjZGVmaW5lIFhJSUNfSU5UUl9SWF9GVUxMX01BU0sgICAgICAgICAgICAweDA4CS8qIDE9UnggRklGTy9yZWc9T0NZIGxldmVsICovCisjZGVmaW5lIFhJSUNfSU5UUl9CTkJfTUFTSyAgICAgICAgICAgICAgICAweDEwCS8qIDEgPSBCdXMgbm90IGJ1c3kgICAgICAgKi8KKyNkZWZpbmUgWElJQ19JTlRSX0FBU19NQVNLICAgICAgICAgICAgICAgIDB4MjAJLyogMSA9IHdoZW4gYWRkciBhcyBzbGF2ZSAqLworI2RlZmluZSBYSUlDX0lOVFJfTkFBU19NQVNLICAgICAgICAgICAgICAgMHg0MAkvKiAxID0gbm90IGFkZHIgYXMgc2xhdmUgICovCisjZGVmaW5lIFhJSUNfSU5UUl9UWF9IQUxGX01BU0sgICAgICAgICAgICAweDgwCS8qIDEgPSBUWCBGSUZPIGhhbGYgZW1wdHkgKi8KKworLyogVGhlIGZvbGxvd2luZyBjb25zdGFudHMgc3BlY2lmeSB0aGUgZGVwdGggb2YgdGhlIEZJRk9zICovCisjZGVmaW5lIElJQ19SWF9GSUZPX0RFUFRIICAgICAgICAgMTYJLyogUnggZmlmbyBjYXBhY2l0eSAgICAgICAgICAgICAgICovCisjZGVmaW5lIElJQ19UWF9GSUZPX0RFUFRIICAgICAgICAgMTYJLyogVHggZmlmbyBjYXBhY2l0eSAgICAgICAgICAgICAgICovCisKKy8qIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIHNwZWNpZnkgZ3JvdXBzIG9mIGludGVycnVwdHMgdGhhdCBhcmUgdHlwaWNhbGx5CisgKiBlbmFibGVkIG9yIGRpc2FibGVzIGF0IHRoZSBzYW1lIHRpbWUKKyAqLworI2RlZmluZSBYSUlDX1RYX0lOVEVSUlVQVFMgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoWElJQ19JTlRSX1RYX0VSUk9SX01BU0sgfCBYSUlDX0lOVFJfVFhfRU1QVFlfTUFTSyB8IFhJSUNfSU5UUl9UWF9IQUxGX01BU0spCisKKyNkZWZpbmUgWElJQ19UWF9SWF9JTlRFUlJVUFRTIChYSUlDX0lOVFJfUlhfRlVMTF9NQVNLIHwgWElJQ19UWF9JTlRFUlJVUFRTKQorCisvKiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgdXNlZCB3aXRoIHRoZSBmb2xsb3dpbmcgbWFjcm9zIHRvIHNwZWNpZnkgdGhlCisgKiBvcGVyYXRpb24sIGEgcmVhZCBvciB3cml0ZSBvcGVyYXRpb24uCisgKi8KKyNkZWZpbmUgWElJQ19SRUFEX09QRVJBVElPTiAgMQorI2RlZmluZSBYSUlDX1dSSVRFX09QRVJBVElPTiAwCisKKy8qCisgKiBUeCBGaWZvIHVwcGVyIGJpdCBtYXNrcy4KKyAqLworI2RlZmluZSBYSUlDX1RYX0RZTl9TVEFSVF9NQVNLICAgICAgICAgICAgMHgwMTAwIC8qIDEgPSBTZXQgZHluYW1pYyBzdGFydCAqLworI2RlZmluZSBYSUlDX1RYX0RZTl9TVE9QX01BU0sgICAgICAgICAgICAgMHgwMjAwIC8qIDEgPSBTZXQgZHluYW1pYyBzdG9wICovCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBkZWZpbmUgdGhlIHJlZ2lzdGVyIG9mZnNldHMgZm9yIHRoZSBJbnRlcnJ1cHQKKyAqIHJlZ2lzdGVycy4gVGhlcmUgYXJlIHNvbWUgaG9sZXMgaW4gdGhlIG1lbW9yeSBtYXAgZm9yIHJlc2VydmVkIGFkZHJlc3NlcworICogdG8gYWxsb3cgb3RoZXIgcmVnaXN0ZXJzIHRvIGJlIGFkZGVkIGFuZCBzdGlsbCBtYXRjaCB0aGUgbWVtb3J5IG1hcCBvZiB0aGUKKyAqIGludGVycnVwdCBjb250cm9sbGVyIHJlZ2lzdGVycworICovCisjZGVmaW5lIFhJSUNfREdJRVJfT0ZGU0VUICAgIDB4MUMgLyogRGV2aWNlIEdsb2JhbCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIFhJSUNfSUlTUl9PRkZTRVQgICAgIDB4MjAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBYSUlDX0lJRVJfT0ZGU0VUICAgICAweDI4IC8qIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgWElJQ19SRVNFVFJfT0ZGU0VUICAgMHg0MCAvKiBSZXNldCBSZWdpc3RlciAqLworCisjZGVmaW5lIFhJSUNfUkVTRVRfTUFTSyAgICAgICAgICAgICAweEFVTAorCisvKgorICogVGhlIGZvbGxvd2luZyBjb25zdGFudCBpcyB1c2VkIGZvciB0aGUgZGV2aWNlIGdsb2JhbCBpbnRlcnJ1cHQgZW5hYmxlCisgKiByZWdpc3RlciwgdG8gZW5hYmxlIGFsbCBpbnRlcnJ1cHRzIGZvciB0aGUgZGV2aWNlLCB0aGlzIGlzIHRoZSBvbmx5IGJpdAorICogaW4gdGhlIHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgWElJQ19HSU5UUl9FTkFCTEVfTUFTSyAgICAgIDB4ODAwMDAwMDBVTAorCisjZGVmaW5lIHhpaWNfdHhfc3BhY2UoaTJjKSAoKGkyYyktPnR4X21zZy0+bGVuIC0gKGkyYyktPnR4X3BvcykKKyNkZWZpbmUgeGlpY19yeF9zcGFjZShpMmMpICgoaTJjKS0+cnhfbXNnLT5sZW4gLSAoaTJjKS0+cnhfcG9zKQorCitzdGF0aWMgdm9pZCB4aWljX3N0YXJ0X3hmZXIoc3RydWN0IHhpaWNfaTJjICppMmMpOworc3RhdGljIHZvaWQgX194aWljX3N0YXJ0X3hmZXIoc3RydWN0IHhpaWNfaTJjICppMmMpOworCitzdGF0aWMgaW5saW5lIHZvaWQgeGlpY19zZXRyZWc4KHN0cnVjdCB4aWljX2kyYyAqaTJjLCBpbnQgcmVnLCB1OCB2YWx1ZSkKK3sKKwlpb3dyaXRlOCh2YWx1ZSwgaTJjLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB1OCB4aWljX2dldHJlZzgoc3RydWN0IHhpaWNfaTJjICppMmMsIGludCByZWcpCit7CisJcmV0dXJuIGlvcmVhZDgoaTJjLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHhpaWNfc2V0cmVnMTYoc3RydWN0IHhpaWNfaTJjICppMmMsIGludCByZWcsIHUxNiB2YWx1ZSkKK3sKKwlpb3dyaXRlMTYodmFsdWUsIGkyYy0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB4aWljX3NldHJlZzMyKHN0cnVjdCB4aWljX2kyYyAqaTJjLCBpbnQgcmVnLCBpbnQgdmFsdWUpCit7CisJaW93cml0ZTMyKHZhbHVlLCBpMmMtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIGludCB4aWljX2dldHJlZzMyKHN0cnVjdCB4aWljX2kyYyAqaTJjLCBpbnQgcmVnKQoreworCXJldHVybiBpb3JlYWQzMihpMmMtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgeGlpY19pcnFfZGlzKHN0cnVjdCB4aWljX2kyYyAqaTJjLCB1MzIgbWFzaykKK3sKKwl1MzIgaWVyID0geGlpY19nZXRyZWczMihpMmMsIFhJSUNfSUlFUl9PRkZTRVQpOworCXhpaWNfc2V0cmVnMzIoaTJjLCBYSUlDX0lJRVJfT0ZGU0VULCBpZXIgJiB+bWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB4aWljX2lycV9lbihzdHJ1Y3QgeGlpY19pMmMgKmkyYywgdTMyIG1hc2spCit7CisJdTMyIGllciA9IHhpaWNfZ2V0cmVnMzIoaTJjLCBYSUlDX0lJRVJfT0ZGU0VUKTsKKwl4aWljX3NldHJlZzMyKGkyYywgWElJQ19JSUVSX09GRlNFVCwgaWVyIHwgbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB4aWljX2lycV9jbHIoc3RydWN0IHhpaWNfaTJjICppMmMsIHUzMiBtYXNrKQoreworCXUzMiBpc3IgPSB4aWljX2dldHJlZzMyKGkyYywgWElJQ19JSVNSX09GRlNFVCk7CisJeGlpY19zZXRyZWczMihpMmMsIFhJSUNfSUlTUl9PRkZTRVQsIGlzciAmIG1hc2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgeGlpY19pcnFfY2xyX2VuKHN0cnVjdCB4aWljX2kyYyAqaTJjLCB1MzIgbWFzaykKK3sKKwl4aWljX2lycV9jbHIoaTJjLCBtYXNrKTsKKwl4aWljX2lycV9lbihpMmMsIG1hc2spOworfQorCitzdGF0aWMgdm9pZCB4aWljX2NsZWFyX3J4X2ZpZm8oc3RydWN0IHhpaWNfaTJjICppMmMpCit7CisJdTggc3I7CisJZm9yIChzciA9IHhpaWNfZ2V0cmVnOChpMmMsIFhJSUNfU1JfUkVHX09GRlNFVCk7CisJCSEoc3IgJiBYSUlDX1NSX1JYX0ZJRk9fRU1QVFlfTUFTSyk7CisJCXNyID0geGlpY19nZXRyZWc4KGkyYywgWElJQ19TUl9SRUdfT0ZGU0VUKSkKKwkJeGlpY19nZXRyZWc4KGkyYywgWElJQ19EUlJfUkVHX09GRlNFVCk7Cit9CisKK3N0YXRpYyB2b2lkIHhpaWNfcmVpbml0KHN0cnVjdCB4aWljX2kyYyAqaTJjKQoreworCXhpaWNfc2V0cmVnMzIoaTJjLCBYSUlDX1JFU0VUUl9PRkZTRVQsIFhJSUNfUkVTRVRfTUFTSyk7CisKKwkvKiBTZXQgcmVjZWl2ZSBGaWZvIGRlcHRoIHRvIG1heGltdW0gKHplcm8gYmFzZWQpLiAqLworCXhpaWNfc2V0cmVnOChpMmMsIFhJSUNfUkZEX1JFR19PRkZTRVQsIElJQ19SWF9GSUZPX0RFUFRIIC0gMSk7CisKKwkvKiBSZXNldCBUeCBGaWZvLiAqLworCXhpaWNfc2V0cmVnOChpMmMsIFhJSUNfQ1JfUkVHX09GRlNFVCwgWElJQ19DUl9UWF9GSUZPX1JFU0VUX01BU0spOworCisJLyogRW5hYmxlIElJQyBEZXZpY2UsIHJlbW92ZSBUeCBGaWZvIHJlc2V0ICYgZGlzYWJsZSBnZW5lcmFsIGNhbGwuICovCisJeGlpY19zZXRyZWc4KGkyYywgWElJQ19DUl9SRUdfT0ZGU0VULCBYSUlDX0NSX0VOQUJMRV9ERVZJQ0VfTUFTSyk7CisKKwkvKiBtYWtlIHN1cmUgUlggZmlmbyBpcyBlbXB0eSAqLworCXhpaWNfY2xlYXJfcnhfZmlmbyhpMmMpOworCisJLyogRW5hYmxlIGludGVycnVwdHMgKi8KKwl4aWljX3NldHJlZzMyKGkyYywgWElJQ19ER0lFUl9PRkZTRVQsIFhJSUNfR0lOVFJfRU5BQkxFX01BU0spOworCisJeGlpY19pcnFfY2xyX2VuKGkyYywgWElJQ19JTlRSX0FBU19NQVNLIHwgWElJQ19JTlRSX0FSQl9MT1NUX01BU0spOworfQorCitzdGF0aWMgdm9pZCB4aWljX2RlaW5pdChzdHJ1Y3QgeGlpY19pMmMgKmkyYykKK3sKKwl1OCBjcjsKKworCXhpaWNfc2V0cmVnMzIoaTJjLCBYSUlDX1JFU0VUUl9PRkZTRVQsIFhJSUNfUkVTRVRfTUFTSyk7CisKKwkvKiBEaXNhYmxlIElJQyBEZXZpY2UuICovCisJY3IgPSB4aWljX2dldHJlZzgoaTJjLCBYSUlDX0NSX1JFR19PRkZTRVQpOworCXhpaWNfc2V0cmVnOChpMmMsIFhJSUNfQ1JfUkVHX09GRlNFVCwgY3IgJiB+WElJQ19DUl9FTkFCTEVfREVWSUNFX01BU0spOworfQorCitzdGF0aWMgdm9pZCB4aWljX3JlYWRfcngoc3RydWN0IHhpaWNfaTJjICppMmMpCit7CisJdTggYnl0ZXNfaW5fZmlmbzsKKwlpbnQgaTsKKworCWJ5dGVzX2luX2ZpZm8gPSB4aWljX2dldHJlZzgoaTJjLCBYSUlDX1JGT19SRUdfT0ZGU0VUKSArIDE7CisKKwlkZXZfZGJnKGkyYy0+YWRhcC5kZXYucGFyZW50LCAiJXMgZW50cnksIGJ5dGVzIGluIGZpZm86ICVkLCBtc2c6ICVkIgorCQkiLCBTUjogMHgleCwgQ1I6IDB4JXhcbiIsCisJCV9fZnVuY19fLCBieXRlc19pbl9maWZvLCB4aWljX3J4X3NwYWNlKGkyYyksCisJCXhpaWNfZ2V0cmVnOChpMmMsIFhJSUNfU1JfUkVHX09GRlNFVCksCisJCXhpaWNfZ2V0cmVnOChpMmMsIFhJSUNfQ1JfUkVHX09GRlNFVCkpOworCisJaWYgKGJ5dGVzX2luX2ZpZm8gPiB4aWljX3J4X3NwYWNlKGkyYykpCisJCWJ5dGVzX2luX2ZpZm8gPSB4aWljX3J4X3NwYWNlKGkyYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYnl0ZXNfaW5fZmlmbzsgaSsrKQorCQlpMmMtPnJ4X21zZy0+YnVmW2kyYy0+cnhfcG9zKytdID0KKwkJCXhpaWNfZ2V0cmVnOChpMmMsIFhJSUNfRFJSX1JFR19PRkZTRVQpOworCisJeGlpY19zZXRyZWc4KGkyYywgWElJQ19SRkRfUkVHX09GRlNFVCwKKwkJKHhpaWNfcnhfc3BhY2UoaTJjKSA+IElJQ19SWF9GSUZPX0RFUFRIKSA/CisJCUlJQ19SWF9GSUZPX0RFUFRIIC0gMSA6ICB4aWljX3J4X3NwYWNlKGkyYykgLSAxKTsKK30KKworc3RhdGljIGludCB4aWljX3R4X2ZpZm9fc3BhY2Uoc3RydWN0IHhpaWNfaTJjICppMmMpCit7CisJLyogcmV0dXJuIHRoZSBhY3R1YWwgc3BhY2UgbGVmdCBpbiB0aGUgRklGTyAqLworCXJldHVybiBJSUNfVFhfRklGT19ERVBUSCAtIHhpaWNfZ2V0cmVnOChpMmMsIFhJSUNfVEZPX1JFR19PRkZTRVQpIC0gMTsKK30KKworc3RhdGljIHZvaWQgeGlpY19maWxsX3R4X2ZpZm8oc3RydWN0IHhpaWNfaTJjICppMmMpCit7CisJdTggZmlmb19zcGFjZSA9IHhpaWNfdHhfZmlmb19zcGFjZShpMmMpOworCWludCBsZW4gPSB4aWljX3R4X3NwYWNlKGkyYyk7CisKKwlsZW4gPSAobGVuID4gZmlmb19zcGFjZSkgPyBmaWZvX3NwYWNlIDogbGVuOworCisJZGV2X2RiZyhpMmMtPmFkYXAuZGV2LnBhcmVudCwgIiVzIGVudHJ5LCBsZW46ICVkLCBmaWZvIHNwYWNlOiAlZFxuIiwKKwkJX19mdW5jX18sIGxlbiwgZmlmb19zcGFjZSk7CisKKwl3aGlsZSAobGVuLS0pIHsKKwkJdTE2IGRhdGEgPSBpMmMtPnR4X21zZy0+YnVmW2kyYy0+dHhfcG9zKytdOworCQlpZiAoKHhpaWNfdHhfc3BhY2UoaTJjKSA9PSAwKSAmJiAoaTJjLT5ubXNncyA9PSAxKSkgeworCQkJLyogbGFzdCBtZXNzYWdlIGluIHRyYW5zZmVyIC0+IFNUT1AgKi8KKwkJCWRhdGEgfD0gWElJQ19UWF9EWU5fU1RPUF9NQVNLOworCQkJZGV2X2RiZyhpMmMtPmFkYXAuZGV2LnBhcmVudCwgIiVzIFRYIFNUT1BcbiIsIF9fZnVuY19fKTsKKworCQkJeGlpY19zZXRyZWcxNihpMmMsIFhJSUNfRFRSX1JFR19PRkZTRVQsIGRhdGEpOworCQl9IGVsc2UKKwkJCXhpaWNfc2V0cmVnOChpMmMsIFhJSUNfRFRSX1JFR19PRkZTRVQsIGRhdGEpOworCX0KK30KKworc3RhdGljIHZvaWQgeGlpY193YWtldXAoc3RydWN0IHhpaWNfaTJjICppMmMsIGludCBjb2RlKQoreworCWkyYy0+dHhfbXNnID0gTlVMTDsKKwlpMmMtPnJ4X21zZyA9IE5VTEw7CisJaTJjLT5ubXNncyA9IDA7CisJaTJjLT5zdGF0ZSA9IGNvZGU7CisJd2FrZV91cCgmaTJjLT53YWl0KTsKK30KKworc3RhdGljIHZvaWQgeGlpY19wcm9jZXNzKHN0cnVjdCB4aWljX2kyYyAqaTJjKQoreworCXUzMiBwZW5kLCBpc3IsIGllcjsKKwl1MzIgY2xyID0gMDsKKworCS8qIEdldCB0aGUgaW50ZXJydXB0IFN0YXR1cyBmcm9tIHRoZSBJUElGLiBUaGVyZSBpcyBubyBjbGVhcmluZyBvZgorCSAqIGludGVycnVwdHMgaW4gdGhlIElQSUYuIEludGVycnVwdHMgbXVzdCBiZSBjbGVhcmVkIGF0IHRoZSBzb3VyY2UuCisJICogVG8gZmluZCB3aGljaCBpbnRlcnJ1cHRzIGFyZSBwZW5kaW5nOyBBTkQgaW50ZXJydXB0cyBwZW5kaW5nIHdpdGgKKwkgKiBpbnRlcnJ1cHRzIG1hc2tlZC4KKwkgKi8KKwlpc3IgPSB4aWljX2dldHJlZzMyKGkyYywgWElJQ19JSVNSX09GRlNFVCk7CisJaWVyID0geGlpY19nZXRyZWczMihpMmMsIFhJSUNfSUlFUl9PRkZTRVQpOworCXBlbmQgPSBpc3IgJiBpZXI7CisKKwlkZXZfZGJnKGkyYy0+YWRhcC5kZXYucGFyZW50LCAiJXMgZW50cnksIElFUjogMHgleCwgSVNSOiAweCV4LCAiCisJCSJwZW5kOiAweCV4LCBTUjogMHgleCwgbXNnOiAlcCwgbm1zZ3M6ICVkXG4iLAorCQlfX2Z1bmNfXywgaWVyLCBpc3IsIHBlbmQsIHhpaWNfZ2V0cmVnOChpMmMsIFhJSUNfU1JfUkVHX09GRlNFVCksCisJCWkyYy0+dHhfbXNnLCBpMmMtPm5tc2dzKTsKKworCS8qIERvIG5vdCBwcm9jZXNzZXMgYSBkZXZpY2VzIGludGVycnVwdHMgaWYgdGhlIGRldmljZSBoYXMgbm8KKwkgKiBpbnRlcnJ1cHRzIHBlbmRpbmcKKwkgKi8KKwlpZiAoIXBlbmQpCisJCXJldHVybjsKKworCS8qIFNlcnZpY2UgcmVxdWVzdGluZyBpbnRlcnJ1cHQgKi8KKwlpZiAoKHBlbmQgJiBYSUlDX0lOVFJfQVJCX0xPU1RfTUFTSykgfHwKKwkJKChwZW5kICYgWElJQ19JTlRSX1RYX0VSUk9SX01BU0spICYmCisJCSEocGVuZCAmIFhJSUNfSU5UUl9SWF9GVUxMX01BU0spKSkgeworCQkvKiBidXMgYXJicml0cmF0aW9uIGxvc3QsIG9yLi4uCisJCSAqIFRyYW5zbWl0IGVycm9yIF9PUl8gUlggY29tcGxldGVkCisJCSAqIGlmIHRoaXMgaGFwcGVucyB3aGVuIFJYX0ZVTEwgaXMgbm90IHNldAorCQkgKiB0aGlzIGlzIHByb2JhYmx5IGEgVFggZXJyb3IKKwkJICovCisKKwkJZGV2X2RiZyhpMmMtPmFkYXAuZGV2LnBhcmVudCwgIiVzIGVycm9yXG4iLCBfX2Z1bmNfXyk7CisKKwkJLyogZHluYW1pYyBtb2RlIHNlZW0gdG8gc3VmZmVyIGZyb20gcHJvYmxlbXMgaWYgd2UganVzdCBmbHVzaGVzCisJCSAqIGZpZm9zIGFuZCB0aGUgbmV4dCBtZXNzYWdlIGlzIGEgVFggd2l0aCBsZW4gMCAob25seSBhZGRyKQorCQkgKiByZXNldCB0aGUgSVAgaW5zdGVhZCBvZiBqdXN0IGZsdXNoIGZpZm9zCisJCSAqLworCQl4aWljX3JlaW5pdChpMmMpOworCisJCWlmIChpMmMtPnR4X21zZykKKwkJCXhpaWNfd2FrZXVwKGkyYywgU1RBVEVfRVJST1IpOworCisJfSBlbHNlIGlmIChwZW5kICYgWElJQ19JTlRSX1JYX0ZVTExfTUFTSykgeworCQkvKiBSZWNlaXZlIHJlZ2lzdGVyL0ZJRk8gaXMgZnVsbCAqLworCisJCWNsciA9IFhJSUNfSU5UUl9SWF9GVUxMX01BU0s7CisJCWlmICghaTJjLT5yeF9tc2cpIHsKKwkJCWRldl9kYmcoaTJjLT5hZGFwLmRldi5wYXJlbnQsCisJCQkJIiVzIHVuZXhwZXh0ZWQgUlggSVJRXG4iLCBfX2Z1bmNfXyk7CisJCQl4aWljX2NsZWFyX3J4X2ZpZm8oaTJjKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJeGlpY19yZWFkX3J4KGkyYyk7CisJCWlmICh4aWljX3J4X3NwYWNlKGkyYykgPT0gMCkgeworCQkJLyogdGhpcyBpcyB0aGUgbGFzdCBwYXJ0IG9mIHRoZSBtZXNzYWdlICovCisJCQlpMmMtPnJ4X21zZyA9IE5VTEw7CisKKwkJCS8qIGFsc28gY2xlYXIgVFggZXJyb3IgaWYgdGhlcmUgKFJYIGNvbXBsZXRlKSAqLworCQkJY2xyIHw9IChpc3IgJiBYSUlDX0lOVFJfVFhfRVJST1JfTUFTSyk7CisKKwkJCWRldl9kYmcoaTJjLT5hZGFwLmRldi5wYXJlbnQsCisJCQkJIiVzIGVuZCBvZiBtZXNzYWdlLCBubXNnczogJWRcbiIsCisJCQkJX19mdW5jX18sIGkyYy0+bm1zZ3MpOworCisJCQkvKiBzZW5kIG5leHQgbWVzc2FnZSBpZiB0aGlzIHdhc24ndCB0aGUgbGFzdCwKKwkJCSAqIG90aGVyd2lzZSB0aGUgdHJhbnNmZXIgd2lsbCBiZSBmaW5pYWxpc2Ugd2hlbgorCQkJICogcmVjZWl2aW5nIHRoZSBidXMgbm90IGJ1c3kgaW50ZXJydXB0CisJCQkgKi8KKwkJCWlmIChpMmMtPm5tc2dzID4gMSkgeworCQkJCWkyYy0+bm1zZ3MtLTsKKwkJCQlpMmMtPnR4X21zZysrOworCQkJCWRldl9kYmcoaTJjLT5hZGFwLmRldi5wYXJlbnQsCisJCQkJCSIlcyB3aWxsIHN0YXJ0IG5leHQuLi5cbiIsIF9fZnVuY19fKTsKKworCQkJCV9feGlpY19zdGFydF94ZmVyKGkyYyk7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKHBlbmQgJiBYSUlDX0lOVFJfQk5CX01BU0spIHsKKwkJLyogSUlDIGJ1cyBoYXMgdHJhbnNpdGlvbmVkIHRvIG5vdCBidXN5ICovCisJCWNsciA9IFhJSUNfSU5UUl9CTkJfTUFTSzsKKworCQkvKiBUaGUgYnVzIGlzIG5vdCBidXN5LCBkaXNhYmxlIEJ1c05vdEJ1c3kgaW50ZXJydXB0ICovCisJCXhpaWNfaXJxX2RpcyhpMmMsIFhJSUNfSU5UUl9CTkJfTUFTSyk7CisKKwkJaWYgKCFpMmMtPnR4X21zZykKKwkJCWdvdG8gb3V0OworCisJCWlmICgoaTJjLT5ubXNncyA9PSAxKSAmJiAhaTJjLT5yeF9tc2cgJiYKKwkJCXhpaWNfdHhfc3BhY2UoaTJjKSA9PSAwKQorCQkJeGlpY193YWtldXAoaTJjLCBTVEFURV9ET05FKTsKKwkJZWxzZQorCQkJeGlpY193YWtldXAoaTJjLCBTVEFURV9FUlJPUik7CisKKwl9IGVsc2UgaWYgKHBlbmQgJiAoWElJQ19JTlRSX1RYX0VNUFRZX01BU0sgfCBYSUlDX0lOVFJfVFhfSEFMRl9NQVNLKSkgeworCQkvKiBUcmFuc21pdCByZWdpc3Rlci9GSUZPIGlzIGVtcHR5IG9yIL0gZW1wdHkgKi8KKworCQljbHIgPSBwZW5kICYKKwkJCShYSUlDX0lOVFJfVFhfRU1QVFlfTUFTSyB8IFhJSUNfSU5UUl9UWF9IQUxGX01BU0spOworCisJCWlmICghaTJjLT50eF9tc2cpIHsKKwkJCWRldl9kYmcoaTJjLT5hZGFwLmRldi5wYXJlbnQsCisJCQkJIiVzIHVuZXhwZXh0ZWQgVFggSVJRXG4iLCBfX2Z1bmNfXyk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXhpaWNfZmlsbF90eF9maWZvKGkyYyk7CisKKwkJLyogY3VycmVudCBtZXNzYWdlIHNlbnQgYW5kIHRoZXJlIGlzIHNwYWNlIGluIHRoZSBmaWZvICovCisJCWlmICgheGlpY190eF9zcGFjZShpMmMpICYmIHhpaWNfdHhfZmlmb19zcGFjZShpMmMpID49IDIpIHsKKwkJCWRldl9kYmcoaTJjLT5hZGFwLmRldi5wYXJlbnQsCisJCQkJIiVzIGVuZCBvZiBtZXNzYWdlIHNlbnQsIG5tc2dzOiAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgaTJjLT5ubXNncyk7CisJCQlpZiAoaTJjLT5ubXNncyA+IDEpIHsKKwkJCQlpMmMtPm5tc2dzLS07CisJCQkJaTJjLT50eF9tc2crKzsKKwkJCQlfX3hpaWNfc3RhcnRfeGZlcihpMmMpOworCQkJfSBlbHNlIHsKKwkJCQl4aWljX2lycV9kaXMoaTJjLCBYSUlDX0lOVFJfVFhfSEFMRl9NQVNLKTsKKworCQkJCWRldl9kYmcoaTJjLT5hZGFwLmRldi5wYXJlbnQsCisJCQkJCSIlcyBHb3QgVFggSVJRIGJ1dCBubyBtb3JlIHRvIGRvLi4uXG4iLAorCQkJCQlfX2Z1bmNfXyk7CisJCQl9CisJCX0gZWxzZSBpZiAoIXhpaWNfdHhfc3BhY2UoaTJjKSAmJiAoaTJjLT5ubXNncyA9PSAxKSkKKwkJCS8qIGN1cnJlbnQgZnJhbWUgaXMgc2VudCBhbmQgaXMgbGFzdCwKKwkJCSAqIG1ha2Ugc3VyZSB0byBkaXNhYmxlIHR4IGhhbGYKKwkJCSAqLworCQkJeGlpY19pcnFfZGlzKGkyYywgWElJQ19JTlRSX1RYX0hBTEZfTUFTSyk7CisJfSBlbHNlIHsKKwkJLyogZ290IElSUSB3aGljaCBpcyBub3QgYWNrZWQgKi8KKwkJZGV2X2VycihpMmMtPmFkYXAuZGV2LnBhcmVudCwgIiVzIEdvdCB1bmV4cGVjdGVkIElSUVxuIiwKKwkJCV9fZnVuY19fKTsKKwkJY2xyID0gcGVuZDsKKwl9CitvdXQ6CisJZGV2X2RiZyhpMmMtPmFkYXAuZGV2LnBhcmVudCwgIiVzIGNscjogMHgleFxuIiwgX19mdW5jX18sIGNscik7CisKKwl4aWljX3NldHJlZzMyKGkyYywgWElJQ19JSVNSX09GRlNFVCwgY2xyKTsKK30KKworc3RhdGljIGludCB4aWljX2J1c19idXN5KHN0cnVjdCB4aWljX2kyYyAqaTJjKQoreworCXU4IHNyID0geGlpY19nZXRyZWc4KGkyYywgWElJQ19TUl9SRUdfT0ZGU0VUKTsKKworCXJldHVybiAoc3IgJiBYSUlDX1NSX0JVU19CVVNZX01BU0spID8gLUVCVVNZIDogMDsKK30KKworc3RhdGljIGludCB4aWljX2J1c3koc3RydWN0IHhpaWNfaTJjICppMmMpCit7CisJaW50IHRyaWVzID0gMzsKKwlpbnQgZXJyOworCisJaWYgKGkyYy0+dHhfbXNnKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogZm9yIGluc3RhbmNlIGlmIHByZXZpb3VzIHRyYW5zZmVyIHdhcyB0ZXJtaW5hdGVkIGR1ZSB0byBUWCBlcnJvcgorCSAqIGl0IG1pZ2h0IGJlIHRoYXQgdGhlIGJ1cyBpcyBvbiBpdCdzIHdheSB0byBiZWNvbWUgYXZhaWxhYmxlCisJICogZ2l2ZSBpdCBhdCBtb3N0IDMgbXMgdG8gd2FrZQorCSAqLworCWVyciA9IHhpaWNfYnVzX2J1c3koaTJjKTsKKwl3aGlsZSAoZXJyICYmIHRyaWVzLS0pIHsKKwkJbWRlbGF5KDEpOworCQllcnIgPSB4aWljX2J1c19idXN5KGkyYyk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgeGlpY19zdGFydF9yZWN2KHN0cnVjdCB4aWljX2kyYyAqaTJjKQoreworCXU4IHJ4X3dhdGVybWFyazsKKwlzdHJ1Y3QgaTJjX21zZyAqbXNnID0gaTJjLT5yeF9tc2cgPSBpMmMtPnR4X21zZzsKKworCS8qIENsZWFyIGFuZCBlbmFibGUgUnggZnVsbCBpbnRlcnJ1cHQuICovCisJeGlpY19pcnFfY2xyX2VuKGkyYywgWElJQ19JTlRSX1JYX0ZVTExfTUFTSyB8IFhJSUNfSU5UUl9UWF9FUlJPUl9NQVNLKTsKKworCS8qIHdlIHdhbnQgdG8gZ2V0IGFsbCBidXQgbGFzdCBieXRlLCBiZWNhdXNlIHRoZSBUWF9FUlJPUiBJUlEgaXMgdXNlZAorCSAqIHRvIGluaWRpY2F0ZSBlcnJvciBBQ0sgb24gdGhlIGFkZHJlc3MsIGFuZCBuZWdhdGl2ZSBhY2sgb24gdGhlIGxhc3QKKwkgKiByZWNlaXZlZCBieXRlLCBzbyB0byBub3QgbWl4IHRoZW0gcmVjZWl2ZSBhbGwgYnV0IGxhc3QuCisJICogSW4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgb25seSBvbmUgYnl0ZSB0byByZWNlaXZlCisJICogd2UgY2FuIGNoZWNrIGlmIEVSUk9SIGFuZCBSWCBmdWxsIGlzIHNldCBhdCB0aGUgc2FtZSB0aW1lCisJICovCisJcnhfd2F0ZXJtYXJrID0gbXNnLT5sZW47CisJaWYgKHJ4X3dhdGVybWFyayA+IElJQ19SWF9GSUZPX0RFUFRIKQorCQlyeF93YXRlcm1hcmsgPSBJSUNfUlhfRklGT19ERVBUSDsKKwl4aWljX3NldHJlZzgoaTJjLCBYSUlDX1JGRF9SRUdfT0ZGU0VULCByeF93YXRlcm1hcmsgLSAxKTsKKworCWlmICghKG1zZy0+ZmxhZ3MgJiBJMkNfTV9OT1NUQVJUKSkKKwkJLyogd3JpdGUgdGhlIGFkZHJlc3MgKi8KKwkJeGlpY19zZXRyZWcxNihpMmMsIFhJSUNfRFRSX1JFR19PRkZTRVQsCisJCQkobXNnLT5hZGRyIDw8IDEpIHwgWElJQ19SRUFEX09QRVJBVElPTiB8CisJCQlYSUlDX1RYX0RZTl9TVEFSVF9NQVNLKTsKKworCXhpaWNfaXJxX2Nscl9lbihpMmMsIFhJSUNfSU5UUl9CTkJfTUFTSyk7CisKKwl4aWljX3NldHJlZzE2KGkyYywgWElJQ19EVFJfUkVHX09GRlNFVCwKKwkJbXNnLT5sZW4gfCAoKGkyYy0+bm1zZ3MgPT0gMSkgPyBYSUlDX1RYX0RZTl9TVE9QX01BU0sgOiAwKSk7CisJaWYgKGkyYy0+bm1zZ3MgPT0gMSkKKwkJLyogdmVyeSBsYXN0LCBlbmFibGUgYnVzIG5vdCBidXN5IGFzIHdlbGwgKi8KKwkJeGlpY19pcnFfY2xyX2VuKGkyYywgWElJQ19JTlRSX0JOQl9NQVNLKTsKKworCS8qIHRoZSBtZXNzYWdlIGlzIHR4OmVkICovCisJaTJjLT50eF9wb3MgPSBtc2ctPmxlbjsKK30KKworc3RhdGljIHZvaWQgeGlpY19zdGFydF9zZW5kKHN0cnVjdCB4aWljX2kyYyAqaTJjKQoreworCXN0cnVjdCBpMmNfbXNnICptc2cgPSBpMmMtPnR4X21zZzsKKworCXhpaWNfaXJxX2NscihpMmMsIFhJSUNfSU5UUl9UWF9FUlJPUl9NQVNLKTsKKworCWRldl9kYmcoaTJjLT5hZGFwLmRldi5wYXJlbnQsICIlcyBlbnRyeSwgbXNnOiAlcCwgbGVuOiAlZCwgIgorCQkiSVNSOiAweCV4LCBDUjogMHgleFxuIiwKKwkJX19mdW5jX18sIG1zZywgbXNnLT5sZW4sIHhpaWNfZ2V0cmVnMzIoaTJjLCBYSUlDX0lJU1JfT0ZGU0VUKSwKKwkJeGlpY19nZXRyZWc4KGkyYywgWElJQ19DUl9SRUdfT0ZGU0VUKSk7CisKKwlpZiAoIShtc2ctPmZsYWdzICYgSTJDX01fTk9TVEFSVCkpIHsKKwkJLyogd3JpdGUgdGhlIGFkZHJlc3MgKi8KKwkJdTE2IGRhdGEgPSAoKG1zZy0+YWRkciA8PCAxKSAmIDB4ZmUpIHwgWElJQ19XUklURV9PUEVSQVRJT04gfAorCQkJWElJQ19UWF9EWU5fU1RBUlRfTUFTSzsKKwkJaWYgKChpMmMtPm5tc2dzID09IDEpICYmIG1zZy0+bGVuID09IDApCisJCQkvKiBubyBkYXRhIGFuZCBsYXN0IG1lc3NhZ2UgLT4gYWRkIFNUT1AgKi8KKwkJCWRhdGEgfD0gWElJQ19UWF9EWU5fU1RPUF9NQVNLOworCisJCXhpaWNfc2V0cmVnMTYoaTJjLCBYSUlDX0RUUl9SRUdfT0ZGU0VULCBkYXRhKTsKKwl9CisKKwl4aWljX2ZpbGxfdHhfZmlmbyhpMmMpOworCisJLyogQ2xlYXIgYW55IHBlbmRpbmcgVHggZW1wdHksIFR4IEVycm9yIGFuZCB0aGVuIGVuYWJsZSB0aGVtLiAqLworCXhpaWNfaXJxX2Nscl9lbihpMmMsIFhJSUNfSU5UUl9UWF9FTVBUWV9NQVNLIHwgWElJQ19JTlRSX1RYX0VSUk9SX01BU0sgfAorCQlYSUlDX0lOVFJfQk5CX01BU0spOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgeGlpY19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCB4aWljX2kyYyAqaTJjID0gZGV2X2lkOworCisJc3Bpbl9sb2NrKCZpMmMtPmxvY2spOworCS8qIGRpc2FibGUgaW50ZXJydXB0cyBnbG9iYWxseSAqLworCXhpaWNfc2V0cmVnMzIoaTJjLCBYSUlDX0RHSUVSX09GRlNFVCwgMCk7CisKKwlkZXZfZGJnKGkyYy0+YWRhcC5kZXYucGFyZW50LCAiJXMgZW50cnlcbiIsIF9fZnVuY19fKTsKKworCXhpaWNfcHJvY2VzcyhpMmMpOworCisJeGlpY19zZXRyZWczMihpMmMsIFhJSUNfREdJRVJfT0ZGU0VULCBYSUlDX0dJTlRSX0VOQUJMRV9NQVNLKTsKKwlzcGluX3VubG9jaygmaTJjLT5sb2NrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgX194aWljX3N0YXJ0X3hmZXIoc3RydWN0IHhpaWNfaTJjICppMmMpCit7CisJaW50IGZpcnN0ID0gMTsKKwlpbnQgZmlmb19zcGFjZSA9IHhpaWNfdHhfZmlmb19zcGFjZShpMmMpOworCWRldl9kYmcoaTJjLT5hZGFwLmRldi5wYXJlbnQsICIlcyBlbnRyeSwgbXNnOiAlcCwgZmlmb3Mgc3BhY2U6ICVkXG4iLAorCQlfX2Z1bmNfXywgaTJjLT50eF9tc2csIGZpZm9fc3BhY2UpOworCisJaWYgKCFpMmMtPnR4X21zZykKKwkJcmV0dXJuOworCisJaTJjLT5yeF9wb3MgPSAwOworCWkyYy0+dHhfcG9zID0gMDsKKwlpMmMtPnN0YXRlID0gU1RBVEVfU1RBUlQ7CisJd2hpbGUgKChmaWZvX3NwYWNlID49IDIpICYmIChmaXJzdCB8fCAoaTJjLT5ubXNncyA+IDEpKSkgeworCQlpZiAoIWZpcnN0KSB7CisJCQlpMmMtPm5tc2dzLS07CisJCQlpMmMtPnR4X21zZysrOworCQkJaTJjLT50eF9wb3MgPSAwOworCQl9IGVsc2UKKwkJCWZpcnN0ID0gMDsKKworCQlpZiAoaTJjLT50eF9tc2ctPmZsYWdzICYgSTJDX01fUkQpIHsKKwkJCS8qIHdlIGRvbnQgZGF0ZSBwdXR0aW5nIHNldmVyYWwgcmVhZHMgaW4gdGhlIEZJRk8gKi8KKwkJCXhpaWNfc3RhcnRfcmVjdihpMmMpOworCQkJcmV0dXJuOworCQl9IGVsc2UgeworCQkJeGlpY19zdGFydF9zZW5kKGkyYyk7CisJCQlpZiAoeGlpY190eF9zcGFjZShpMmMpICE9IDApIHsKKwkJCQkvKiB0aGUgbWVzc2FnZSBjb3VsZCBub3QgYmUgY29tcGxldGVseSBzZW50ICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlmaWZvX3NwYWNlID0geGlpY190eF9maWZvX3NwYWNlKGkyYyk7CisJfQorCisJLyogdGhlcmUgYXJlIG1vcmUgbWVzc2FnZXMgb3IgdGhlIGN1cnJlbnQgb25lIGNvdWxkIG5vdCBiZSBjb21wbGV0ZWx5CisJICogcHV0IGludG8gdGhlIEZJRk8sIGFsc28gZW5hYmxlIHRoZSBoYWxmIGVtcHR5IGludGVycnVwdAorCSAqLworCWlmIChpMmMtPm5tc2dzID4gMSB8fCB4aWljX3R4X3NwYWNlKGkyYykpCisJCXhpaWNfaXJxX2Nscl9lbihpMmMsIFhJSUNfSU5UUl9UWF9IQUxGX01BU0spOworCit9CisKK3N0YXRpYyB2b2lkIHhpaWNfc3RhcnRfeGZlcihzdHJ1Y3QgeGlpY19pMmMgKmkyYykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmkyYy0+bG9jaywgZmxhZ3MpOworCXhpaWNfcmVpbml0KGkyYyk7CisJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGdsb2JhbGx5ICovCisJeGlpY19zZXRyZWczMihpMmMsIFhJSUNfREdJRVJfT0ZGU0VULCAwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpMmMtPmxvY2ssIGZsYWdzKTsKKworCV9feGlpY19zdGFydF94ZmVyKGkyYyk7CisJeGlpY19zZXRyZWczMihpMmMsIFhJSUNfREdJRVJfT0ZGU0VULCBYSUlDX0dJTlRSX0VOQUJMRV9NQVNLKTsKK30KKworc3RhdGljIGludCB4aWljX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKK3sKKwlzdHJ1Y3QgeGlpY19pMmMgKmkyYyA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7CisJaW50IGVycjsKKworCWRldl9kYmcoYWRhcC0+ZGV2LnBhcmVudCwgIiVzIGVudHJ5IFNSOiAweCV4XG4iLCBfX2Z1bmNfXywKKwkJeGlpY19nZXRyZWc4KGkyYywgWElJQ19TUl9SRUdfT0ZGU0VUKSk7CisKKwllcnIgPSB4aWljX2J1c3koaTJjKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaTJjLT50eF9tc2cgPSBtc2dzOworCWkyYy0+bm1zZ3MgPSBudW07CisKKwl4aWljX3N0YXJ0X3hmZXIoaTJjKTsKKworCWlmICh3YWl0X2V2ZW50X3RpbWVvdXQoaTJjLT53YWl0LCAoaTJjLT5zdGF0ZSA9PSBTVEFURV9FUlJPUikgfHwKKwkJKGkyYy0+c3RhdGUgPT0gU1RBVEVfRE9ORSksIEhaKSkKKwkJcmV0dXJuIChpMmMtPnN0YXRlID09IFNUQVRFX0RPTkUpID8gbnVtIDogLUVJTzsKKwllbHNlIHsKKwkJaTJjLT50eF9tc2cgPSBOVUxMOworCQlpMmMtPnJ4X21zZyA9IE5VTEw7CisJCWkyYy0+bm1zZ3MgPSAwOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9Cit9CisKK3N0YXRpYyB1MzIgeGlpY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNfRU1VTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIHhpaWNfYWxnb3JpdGhtID0geworCS5tYXN0ZXJfeGZlcgk9IHhpaWNfeGZlciwKKwkuZnVuY3Rpb25hbGl0eQk9IHhpaWNfZnVuYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgeGlpY19hZGFwdGVyID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJPSBEUklWRVJfTkFNRSwKKwkuY2xhc3MJCT0gSTJDX0NMQVNTX0hXTU9OIHwgSTJDX0NMQVNTX1NQRCwKKwkuYWxnbwkJPSAmeGlpY19hbGdvcml0aG0sCit9OworCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHhpaWNfaTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHhpaWNfaTJjICppMmM7CisJc3RydWN0IHhpaWNfaTJjX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQsIGlycTsKKwl1OCBpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykKKwkJZ290byByZXNvdXJjZV9taXNzaW5nOworCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkKKwkJZ290byByZXNvdXJjZV9taXNzaW5nOworCisJcGRhdGEgPSAoc3RydWN0IHhpaWNfaTJjX3BsYXRmb3JtX2RhdGEgKikgcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpMmMgPSBremFsbG9jKHNpemVvZigqaTJjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpMmMpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBwZGV2LT5uYW1lKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJNZW1vcnkgcmVnaW9uIGJ1c3lcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gcmVxdWVzdF9tZW1fZmFpbGVkOworCX0KKworCWkyYy0+YmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIWkyYy0+YmFzZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gbWFwIHJlZ2lzdGVyc1xuIik7CisJCXJldCA9IC1FSU87CisJCWdvdG8gbWFwX2ZhaWxlZDsKKwl9CisKKwkvKiBob29rIHVwIGRyaXZlciB0byB0cmVlICovCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaTJjKTsKKwlpMmMtPmFkYXAgPSB4aWljX2FkYXB0ZXI7CisJaTJjX3NldF9hZGFwZGF0YSgmaTJjLT5hZGFwLCBpMmMpOworCWkyYy0+YWRhcC5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKworCXhpaWNfcmVpbml0KGkyYyk7CisKKwlzcGluX2xvY2tfaW5pdCgmaTJjLT5sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpMmMtPndhaXQpOworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgeGlpY19pc3IsIDAsIHBkZXYtPm5hbWUsIGkyYyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgY2xhaW0gSVJRXG4iKTsKKwkJZ290byByZXF1ZXN0X2lycV9mYWlsZWQ7CisJfQorCisJLyogYWRkIGkyYyBhZGFwdGVyIHRvIGkyYyB0cmVlICovCisJcmV0ID0gaTJjX2FkZF9hZGFwdGVyKCZpMmMtPmFkYXApOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBhZGFwdGVyXG4iKTsKKwkJZ290byBhZGRfYWRhcHRlcl9mYWlsZWQ7CisJfQorCisJLyogYWRkIGluIGtub3duIGRldmljZXMgdG8gdGhlIGJ1cyAqLworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnVtX2RldmljZXM7IGkrKykKKwkJaTJjX25ld19kZXZpY2UoJmkyYy0+YWRhcCwgcGRhdGEtPmRldmljZXMgKyBpKTsKKworCXJldHVybiAwOworCithZGRfYWRhcHRlcl9mYWlsZWQ6CisJZnJlZV9pcnEoaXJxLCBpMmMpOworcmVxdWVzdF9pcnFfZmFpbGVkOgorCXhpaWNfZGVpbml0KGkyYyk7CisJaW91bm1hcChpMmMtPmJhc2UpOworbWFwX2ZhaWxlZDoKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKK3JlcXVlc3RfbWVtX2ZhaWxlZDoKKwlrZnJlZShpMmMpOworCisJcmV0dXJuIHJldDsKK3Jlc291cmNlX21pc3Npbmc6CisJZGV2X2VycigmcGRldi0+ZGV2LCAiSVJRIG9yIE1lbW9yeSByZXNvdXJjZSBpcyBtaXNzaW5nXG4iKTsKKwlyZXR1cm4gLUVOT0VOVDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgeGlpY19pMmNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqIHBkZXYpCit7CisJc3RydWN0IHhpaWNfaTJjICppMmMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCS8qIHJlbW92ZSBhZGFwdGVyICYgZGF0YSAqLworCWkyY19kZWxfYWRhcHRlcigmaTJjLT5hZGFwKTsKKworCXhpaWNfZGVpbml0KGkyYyk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCWZyZWVfaXJxKHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCksIGkyYyk7CisKKwlpb3VubWFwKGkyYy0+YmFzZSk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChyZXMpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCisJa2ZyZWUoaTJjKTsKKworCXJldHVybiAwOworfQorCisKKy8qIHdvcmsgd2l0aCBob3RwbHVnIGFuZCBjb2xkcGx1ZyAqLworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiRFJJVkVSX05BTUUpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4aWljX2kyY19kcml2ZXIgPSB7CisJLnByb2JlICAgPSB4aWljX2kyY19wcm9iZSwKKwkucmVtb3ZlICA9IF9fZGV2ZXhpdF9wKHhpaWNfaTJjX3JlbW92ZSksCisJLmRyaXZlciAgPSB7CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZSA9IERSSVZFUl9OQU1FLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCB4aWljX2kyY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmeGlpY19pMmNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHhpaWNfaTJjX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmeGlpY19pMmNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoeGlpY19pMmNfaW5pdCk7Cittb2R1bGVfZXhpdCh4aWljX2kyY19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiaW5mb0Btb2NlYW4tbGFicy5jb20iKTsKK01PRFVMRV9ERVNDUklQVElPTigiWGlsaW54IEkyQyBidXMgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCmluZGV4IDc1MjIwMDguLjU4NDYzZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCkBAIC0xMTkzLDEwICsxMTkzLDcgQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IGZpbmRfZmlyc3RfYml0KG1hZF9yZWdfcmVxLT5tZXRob2RfbWFzaywgSUJfTUdNVF9NQVhfTUVUSE9EUyk7Ci0JICAgICBpIDwgSUJfTUdNVF9NQVhfTUVUSE9EUzsKLQkgICAgIGkgPSBmaW5kX25leHRfYml0KG1hZF9yZWdfcmVxLT5tZXRob2RfbWFzaywgSUJfTUdNVF9NQVhfTUVUSE9EUywKLQkJCSAgICAgICAxK2kpKSB7CisJZm9yX2VhY2hfc2V0X2JpdChpLCBtYWRfcmVnX3JlcS0+bWV0aG9kX21hc2ssIElCX01HTVRfTUFYX01FVEhPRFMpIHsKIAkJaWYgKCgqbWV0aG9kKS0+YWdlbnRbaV0pIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIk1ldGhvZCAlZCBhbHJlYWR5IGluIHVzZVxuIiwgaSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzMzAsMTMgKzEzMjcsOSBAQAogCQlnb3RvIGVycm9yMzsKIAogCS8qIEZpbmFsbHksIGFkZCBpbiBtZXRob2RzIGJlaW5nIHJlZ2lzdGVyZWQgKi8KLQlmb3IgKGkgPSBmaW5kX2ZpcnN0X2JpdChtYWRfcmVnX3JlcS0+bWV0aG9kX21hc2ssCi0JCQkJSUJfTUdNVF9NQVhfTUVUSE9EUyk7Ci0JICAgICBpIDwgSUJfTUdNVF9NQVhfTUVUSE9EUzsKLQkgICAgIGkgPSBmaW5kX25leHRfYml0KG1hZF9yZWdfcmVxLT5tZXRob2RfbWFzaywgSUJfTUdNVF9NQVhfTUVUSE9EUywKLQkJCSAgICAgICAxK2kpKSB7CisJZm9yX2VhY2hfc2V0X2JpdChpLCBtYWRfcmVnX3JlcS0+bWV0aG9kX21hc2ssIElCX01HTVRfTUFYX01FVEhPRFMpCiAJCSgqbWV0aG9kKS0+YWdlbnRbaV0gPSBhZ2VudF9wcml2OwotCX0KKwogCXJldHVybiAwOwogCiBlcnJvcjM6CkBAIC0xNDI5LDEzICsxNDIyLDkgQEAKIAkJZ290byBlcnJvcjQ7CiAKIAkvKiBGaW5hbGx5LCBhZGQgaW4gbWV0aG9kcyBiZWluZyByZWdpc3RlcmVkICovCi0JZm9yIChpID0gZmluZF9maXJzdF9iaXQobWFkX3JlZ19yZXEtPm1ldGhvZF9tYXNrLAotCQkJCUlCX01HTVRfTUFYX01FVEhPRFMpOwotCSAgICAgaSA8IElCX01HTVRfTUFYX01FVEhPRFM7Ci0JICAgICBpID0gZmluZF9uZXh0X2JpdChtYWRfcmVnX3JlcS0+bWV0aG9kX21hc2ssIElCX01HTVRfTUFYX01FVEhPRFMsCi0JCQkgICAgICAgMStpKSkgeworCWZvcl9lYWNoX3NldF9iaXQoaSwgbWFkX3JlZ19yZXEtPm1ldGhvZF9tYXNrLCBJQl9NR01UX01BWF9NRVRIT0RTKQogCQkoKm1ldGhvZCktPmFnZW50W2ldID0gYWdlbnRfcHJpdjsKLQl9CisKIAlyZXR1cm4gMDsKIAogZXJyb3I0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjLzg4cG04NjB4X29ua2V5LmMgYi9kcml2ZXJzL2lucHV0L21pc2MvODhwbTg2MHhfb25rZXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWE0OGU4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjLzg4cG04NjB4X29ua2V5LmMKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiA4OHBtODYweF9vbmtleS5jIC0gTWFydmVsbCA4OFBNODYweCBPTktFWSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICogICAgICBIYW9qaWFuIFpodWFuZyA8aGFvamlhbi56aHVhbmdAbWFydmVsbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC84OHBtODYweC5oPgorCisjZGVmaW5lIFBNODYwN19XQUtFVVAJCTB4MGIKKworI2RlZmluZSBMT05HX09OS0VZX0VOCQkoMSA8PCAxKQorI2RlZmluZSBPTktFWV9TVEFUVVMJCSgxIDw8IDApCisKK3N0cnVjdCBwbTg2MHhfb25rZXlfaW5mbyB7CisJc3RydWN0IGlucHV0X2RldgkqaWRldjsKKwlzdHJ1Y3QgcG04NjB4X2NoaXAJKmNoaXA7CisJc3RydWN0IGkyY19jbGllbnQJKmkyYzsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCWludAkJCWlycTsKK307CisKKy8qIDg4UE04NjB4IGdpdmVzIHVzIGFuIGludGVycnVwdCB3aGVuIE9OS0VZIGlzIGhlbGQgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBwbTg2MHhfb25rZXlfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwbTg2MHhfb25rZXlfaW5mbyAqaW5mbyA9IGRhdGE7CisJaW50IHJldDsKKworCXJldCA9IHBtODYweF9yZWdfcmVhZChpbmZvLT5pMmMsIFBNODYwN19TVEFUVVNfMik7CisJcmV0ICY9IE9OS0VZX1NUQVRVUzsKKwlpbnB1dF9yZXBvcnRfa2V5KGluZm8tPmlkZXYsIEtFWV9QT1dFUiwgcmV0KTsKKwlpbnB1dF9zeW5jKGluZm8tPmlkZXYpOworCisJLyogRW5hYmxlIDgtc2Vjb25kIGxvbmcgb25rZXkgZGV0ZWN0aW9uICovCisJcG04NjB4X3NldF9iaXRzKGluZm8tPmkyYywgUE04NjA3X1dBS0VVUCwgMywgTE9OR19PTktFWV9FTik7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwbTg2MHhfb25rZXlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHBtODYweF9vbmtleV9pbmZvICppbmZvOworCWludCBpcnEsIHJldDsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gSVJRIHJlc291cmNlIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG04NjB4X29ua2V5X2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PTUVNOworCWluZm8tPmNoaXAgPSBjaGlwOworCWluZm8tPmkyYyA9IChjaGlwLT5pZCA9PSBDSElQX1BNODYwNykgPyBjaGlwLT5jbGllbnQgOiBjaGlwLT5jb21wYW5pb247CisJaW5mby0+ZGV2ID0gJnBkZXYtPmRldjsKKwlpbmZvLT5pcnEgPSBpcnEgKyBjaGlwLT5pcnFfYmFzZTsKKworCWluZm8tPmlkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWluZm8tPmlkZXYpIHsKKwkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgaW5wdXQgZGV2XG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJaW5mby0+aWRldi0+bmFtZSA9ICI4OHBtODYweF9vbiI7CisJaW5mby0+aWRldi0+cGh5cyA9ICI4OHBtODYweF9vbi9pbnB1dDAiOworCWluZm8tPmlkZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSTJDOworCWluZm8tPmlkZXYtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCWluZm8tPmlycSA9IGlycTsKKwlpbmZvLT5pZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSk7CisJaW5mby0+aWRldi0+a2V5Yml0W0JJVF9XT1JEKEtFWV9QT1dFUildID0gQklUX01BU0soS0VZX1BPV0VSKTsKKworCXJldCA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpbmZvLT5pZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoY2hpcC0+ZGV2LCAiQ2FuJ3QgcmVnaXN0ZXIgaW5wdXQgZGV2aWNlOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXRfcmVnOworCX0KKworCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGluZm8tPmlycSwgTlVMTCwgcG04NjB4X29ua2V5X2hhbmRsZXIsCisJCQkJICAgSVJRRl9PTkVTSE9ULCAib25rZXkiLCBpbmZvKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNoaXAtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IElSUTogIyVkOiAlZFxuIiwKKwkJCWluZm8tPmlycSwgcmV0KTsKKwkJZ290byBvdXRfaXJxOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOworCXJldHVybiAwOworCitvdXRfaXJxOgorCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGluZm8tPmlkZXYpOworCWtmcmVlKGluZm8pOworCXJldHVybiByZXQ7CisKK291dF9yZWc6CisJaW5wdXRfZnJlZV9kZXZpY2UoaW5mby0+aWRldik7CitvdXQ6CisJa2ZyZWUoaW5mbyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgcG04NjB4X29ua2V5X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwbTg2MHhfb25rZXlfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZnJlZV9pcnEoaW5mby0+aXJxLCBpbmZvKTsKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShpbmZvLT5pZGV2KTsKKwlrZnJlZShpbmZvKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcG04NjB4X29ua2V5X2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiODhwbTg2MHgtb25rZXkiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBwbTg2MHhfb25rZXlfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChwbTg2MHhfb25rZXlfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBtODYweF9vbmtleV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcG04NjB4X29ua2V5X2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChwbTg2MHhfb25rZXlfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwbTg2MHhfb25rZXlfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwbTg2MHhfb25rZXlfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHBtODYweF9vbmtleV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJNYXJ2ZWxsIDg4UE04NjB4IE9OS0VZIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiSGFvamlhbiBaaHVhbmcgPGhhb2ppYW4uemh1YW5nQG1hcnZlbGwuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZwppbmRleCAxNmVjNTIzLi43MDk3YmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZwpAQCAtMTIsNiArMTIsMTYgQEAKIAogaWYgSU5QVVRfTUlTQwogCitjb25maWcgSU5QVVRfODhQTTg2MFhfT05LRVkKKwl0cmlzdGF0ZSAiODhQTTg2MHggT05LRVkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE1GRF84OFBNODYwWAorCWhlbHAKKwkgIFN1cHBvcnQgdGhlIE9OS0VZIG9mIE1hcnZlbGwgODhQTTg2MHggUE1JQ3MgYXMgYW4gaW5wdXQgZGV2aWNlCisJICByZXBvcnRpbmcgcG93ZXIgYnV0dG9uIHN0YXR1cy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgODhwbTg2MHhfb25rZXkuCisKIGNvbmZpZyBJTlBVVF9QQ1NQS1IKIAl0cmlzdGF0ZSAiUEMgU3BlYWtlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENTUEtSX1BMQVRGT1JNCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvTWFrZWZpbGUgYi9kcml2ZXJzL2lucHV0L21pc2MvTWFrZWZpbGUKaW5kZXggYThiODQ4NS4uYjYxMTYxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9NYWtlZmlsZQpAQCAtNCw2ICs0LDcgQEAKIAogIyBFYWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGVuYWJsZXMgYSBsaXN0IG9mIGZpbGVzLgogCitvYmotJChDT05GSUdfSU5QVVRfODhQTTg2MFhfT05LRVkpCSs9IDg4cG04NjB4X29ua2V5Lm8KIG9iai0kKENPTkZJR19JTlBVVF9BUEFORUwpCQkrPSBhcGFuZWwubwogb2JqLSQoQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUpCQkrPSBhdGlfcmVtb3RlLm8KIG9iai0kKENPTkZJR19JTlBVVF9BVElfUkVNT1RFMikJCSs9IGF0aV9yZW1vdGUyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vODhwbTg2MHgtdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vODhwbTg2MHgtdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODZiYjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi84OHBtODYweC10cy5jCkBAIC0wLDAgKzEsMjM2IEBACisvKgorICogVG91Y2hzY3JlZW4gZHJpdmVyIGZvciBNYXJ2ZWxsIDg4UE04NjB4CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKiAJSGFvamlhbiBaaHVhbmcgPGhhb2ppYW4uemh1YW5nQG1hcnZlbGwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC84OHBtODYweC5oPgorCisjZGVmaW5lIE1FQVNfTEVOCQkoOCkKKyNkZWZpbmUgQUNDVVJBVEVfQklUCQkoMTIpCisKKy8qIHRvdWNoIHJlZ2lzdGVyICovCisjZGVmaW5lIE1FQVNfRU4zCQkoMHg1MikKKworI2RlZmluZSBNRUFTX1RTSVhfMQkJKDB4OEQpCisjZGVmaW5lIE1FQVNfVFNJWF8yCQkoMHg4RSkKKyNkZWZpbmUgTUVBU19UU0lZXzEJCSgweDhGKQorI2RlZmluZSBNRUFTX1RTSVlfMgkJKDB4OTApCisjZGVmaW5lIE1FQVNfVFNJWjFfMQkJKDB4OTEpCisjZGVmaW5lIE1FQVNfVFNJWjFfMgkJKDB4OTIpCisjZGVmaW5lIE1FQVNfVFNJWjJfMQkJKDB4OTMpCisjZGVmaW5lIE1FQVNfVFNJWjJfMgkJKDB4OTQpCisKKy8qIGJpdCBkZWZpbml0aW9ucyBvZiB0b3VjaCAqLworI2RlZmluZSBNRUFTX1BEX0VOCQkoMSA8PCAzKQorI2RlZmluZSBNRUFTX1RTSVhfRU4JCSgxIDw8IDQpCisjZGVmaW5lIE1FQVNfVFNJWV9FTgkJKDEgPDwgNSkKKyNkZWZpbmUgTUVBU19UU0laMV9FTgkJKDEgPDwgNikKKyNkZWZpbmUgTUVBU19UU0laMl9FTgkJKDEgPDwgNykKKworc3RydWN0IHBtODYweF90b3VjaCB7CisJc3RydWN0IGlucHV0X2RldiAqaWRldjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjOworCXN0cnVjdCBwbTg2MHhfY2hpcCAqY2hpcDsKKwlpbnQgaXJxOworCWludCByZXNfeDsJCS8qIHJlc2lzdG9yIG9mIFhwbGF0ZSAqLworfTsKKworc3RhdGljIGlycXJldHVybl90IHBtODYweF90b3VjaF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBtODYweF90b3VjaCAqdG91Y2ggPSBkYXRhOworCXN0cnVjdCBwbTg2MHhfY2hpcCAqY2hpcCA9IHRvdWNoLT5jaGlwOworCXVuc2lnbmVkIGNoYXIgYnVmW01FQVNfTEVOXTsKKwlpbnQgeCwgeSwgcGVuX2Rvd247CisJaW50IHoxLCB6MiwgcnQgPSAwOworCWludCByZXQ7CisKKwlyZXQgPSBwbTg2MHhfYnVsa19yZWFkKHRvdWNoLT5pMmMsIE1FQVNfVFNJWF8xLCBNRUFTX0xFTiwgYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlwZW5fZG93biA9IGJ1ZlsxXSAmICgxIDw8IDYpOworCXggPSAoKGJ1ZlswXSAmIDB4RkYpIDw8IDQpIHwgKGJ1ZlsxXSAmIDB4MEYpOworCXkgPSAoKGJ1ZlsyXSAmIDB4RkYpIDw8IDQpIHwgKGJ1ZlszXSAmIDB4MEYpOworCXoxID0gKChidWZbNF0gJiAweEZGKSA8PCA0KSB8IChidWZbNV0gJiAweDBGKTsKKwl6MiA9ICgoYnVmWzZdICYgMHhGRikgPDwgNCkgfCAoYnVmWzddICYgMHgwRik7CisKKwlpZiAocGVuX2Rvd24pIHsKKwkJaWYgKCh4ICE9IDApICYmICh6MSAhPSAwKSAmJiAodG91Y2gtPnJlc194ICE9IDApKSB7CisJCQlydCA9IHoyIC8gejEgLSAxOworCQkJcnQgPSAocnQgKiB0b3VjaC0+cmVzX3ggKiB4KSA+PiBBQ0NVUkFURV9CSVQ7CisJCQlkZXZfZGJnKGNoaXAtPmRldiwgInoxOiVkLCB6MjolZCwgcnQ6JWRcbiIsCisJCQkJejEsIHoyLCBydCk7CisJCX0KKwkJaW5wdXRfcmVwb3J0X2Ficyh0b3VjaC0+aWRldiwgQUJTX1gsIHgpOworCQlpbnB1dF9yZXBvcnRfYWJzKHRvdWNoLT5pZGV2LCBBQlNfWSwgeSk7CisJCWlucHV0X3JlcG9ydF9hYnModG91Y2gtPmlkZXYsIEFCU19QUkVTU1VSRSwgcnQpOworCQlpbnB1dF9yZXBvcnRfa2V5KHRvdWNoLT5pZGV2LCBCVE5fVE9VQ0gsIDEpOworCQlkZXZfZGJnKGNoaXAtPmRldiwgInBlbiBkb3duIGF0IFslZCwgJWRdLlxuIiwgeCwgeSk7CisJfSBlbHNlIHsKKwkJaW5wdXRfcmVwb3J0X2Ficyh0b3VjaC0+aWRldiwgQUJTX1BSRVNTVVJFLCAwKTsKKwkJaW5wdXRfcmVwb3J0X2tleSh0b3VjaC0+aWRldiwgQlROX1RPVUNILCAwKTsKKwkJZGV2X2RiZyhjaGlwLT5kZXYsICJwZW4gcmVsZWFzZVxuIik7CisJfQorCWlucHV0X3N5bmModG91Y2gtPmlkZXYpOworCitvdXQ6CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHBtODYweF90b3VjaF9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcG04NjB4X3RvdWNoICp0b3VjaCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJaW50IGRhdGEsIHJldDsKKworCWRhdGEgPSBNRUFTX1BEX0VOIHwgTUVBU19UU0lYX0VOIHwgTUVBU19UU0lZX0VOCisJCXwgTUVBU19UU0laMV9FTiB8IE1FQVNfVFNJWjJfRU47CisJcmV0ID0gcG04NjB4X3NldF9iaXRzKHRvdWNoLT5pMmMsIE1FQVNfRU4zLCBkYXRhLCBkYXRhKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisJcmV0dXJuIDA7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcG04NjB4X3RvdWNoX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcG04NjB4X3RvdWNoICp0b3VjaCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJaW50IGRhdGE7CisKKwlkYXRhID0gTUVBU19QRF9FTiB8IE1FQVNfVFNJWF9FTiB8IE1FQVNfVFNJWV9FTgorCQl8IE1FQVNfVFNJWjFfRU4gfCBNRUFTX1RTSVoyX0VOOworCXBtODYweF9zZXRfYml0cyh0b3VjaC0+aTJjLCBNRUFTX0VOMywgZGF0YSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBtODYweF90b3VjaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwbTg2MHhfY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgcG04NjB4X3BsYXRmb3JtX2RhdGEgKnBtODYweF9wZGF0YSA9CQlcCisJCQkJcGRldi0+ZGV2LnBhcmVudC0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgcG04NjB4X3RvdWNoX3BkYXRhICpwZGF0YSA9IE5VTEw7CisJc3RydWN0IHBtODYweF90b3VjaCAqdG91Y2g7CisJaW50IGlycSwgcmV0OworCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJUlEgcmVzb3VyY2UhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFwbTg2MHhfcGRhdGEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicGxhdGZvcm0gZGF0YSBpcyBtaXNzaW5nXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcGRhdGEgPSBwbTg2MHhfcGRhdGEtPnRvdWNoOworCWlmICghcGRhdGEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidG91Y2hzY3JlZW4gZGF0YSBpcyBtaXNzaW5nXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdG91Y2ggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG04NjB4X3RvdWNoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHRvdWNoID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCB0b3VjaCk7CisKKwl0b3VjaC0+aWRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICh0b3VjaC0+aWRldiA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBpbnB1dCBkZXZpY2UhXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJdG91Y2gtPmlkZXYtPm5hbWUgPSAiODhwbTg2MHgtdG91Y2giOworCXRvdWNoLT5pZGV2LT5waHlzID0gIjg4cG04NjB4L2lucHV0MCI7CisJdG91Y2gtPmlkZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSTJDOworCXRvdWNoLT5pZGV2LT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKwl0b3VjaC0+aWRldi0+b3BlbiA9IHBtODYweF90b3VjaF9vcGVuOworCXRvdWNoLT5pZGV2LT5jbG9zZSA9IHBtODYweF90b3VjaF9jbG9zZTsKKwl0b3VjaC0+Y2hpcCA9IGNoaXA7CisJdG91Y2gtPmkyYyA9IChjaGlwLT5pZCA9PSBDSElQX1BNODYwNykgPyBjaGlwLT5jbGllbnQgOiBjaGlwLT5jb21wYW5pb247CisJdG91Y2gtPmlycSA9IGlycSArIGNoaXAtPmlycV9iYXNlOworCXRvdWNoLT5yZXNfeCA9IHBkYXRhLT5yZXNfeDsKKwlpbnB1dF9zZXRfZHJ2ZGF0YSh0b3VjaC0+aWRldiwgdG91Y2gpOworCisJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEodG91Y2gtPmlycSwgTlVMTCwgcG04NjB4X3RvdWNoX2hhbmRsZXIsCisJCQkJICAgSVJRRl9PTkVTSE9ULCAidG91Y2giLCB0b3VjaCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2lycTsKKworCV9fc2V0X2JpdChFVl9BQlMsIHRvdWNoLT5pZGV2LT5ldmJpdCk7CisJX19zZXRfYml0KEFCU19YLCB0b3VjaC0+aWRldi0+YWJzYml0KTsKKwlfX3NldF9iaXQoQUJTX1ksIHRvdWNoLT5pZGV2LT5hYnNiaXQpOworCV9fc2V0X2JpdChBQlNfUFJFU1NVUkUsIHRvdWNoLT5pZGV2LT5hYnNiaXQpOworCV9fc2V0X2JpdChFVl9TWU4sIHRvdWNoLT5pZGV2LT5ldmJpdCk7CisJX19zZXRfYml0KEVWX0tFWSwgdG91Y2gtPmlkZXYtPmV2Yml0KTsKKwlfX3NldF9iaXQoQlROX1RPVUNILCB0b3VjaC0+aWRldi0+a2V5Yml0KTsKKworCWlucHV0X3NldF9hYnNfcGFyYW1zKHRvdWNoLT5pZGV2LCBBQlNfWCwgMCwgMSA8PCBBQ0NVUkFURV9CSVQsIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKHRvdWNoLT5pZGV2LCBBQlNfWSwgMCwgMSA8PCBBQ0NVUkFURV9CSVQsIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKHRvdWNoLT5pZGV2LCBBQlNfUFJFU1NVUkUsIDAsIDEgPDwgQUNDVVJBVEVfQklULAorCQkJCTAsIDApOworCisJcmV0ID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHRvdWNoLT5pZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNoaXAtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciB0b3VjaCFcbiIpOworCQlnb3RvIG91dF9yZzsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB0b3VjaCk7CisJcmV0dXJuIDA7CitvdXRfcmc6CisJZnJlZV9pcnEodG91Y2gtPmlycSwgdG91Y2gpOworb3V0X2lycToKKwlpbnB1dF9mcmVlX2RldmljZSh0b3VjaC0+aWRldik7CitvdXQ6CisJa2ZyZWUodG91Y2gpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHBtODYweF90b3VjaF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcG04NjB4X3RvdWNoICp0b3VjaCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodG91Y2gtPmlkZXYpOworCWZyZWVfaXJxKHRvdWNoLT5pcnEsIHRvdWNoKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlrZnJlZSh0b3VjaCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBtODYweF90b3VjaF9kcml2ZXIgPSB7CisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAiODhwbTg2MHgtdG91Y2giLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQk9IHBtODYweF90b3VjaF9wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AocG04NjB4X3RvdWNoX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbTg2MHhfdG91Y2hfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnBtODYweF90b3VjaF9kcml2ZXIpOworfQorbW9kdWxlX2luaXQocG04NjB4X3RvdWNoX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgcG04NjB4X3RvdWNoX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcG04NjB4X3RvdWNoX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChwbTg2MHhfdG91Y2hfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiVG91Y2hzY3JlZW4gZHJpdmVyIGZvciBNYXJ2ZWxsIFNlbWljb25kdWN0b3IgODhQTTg2MHgiKTsKK01PRFVMRV9BVVRIT1IoIkhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0BtYXJ2ZWxsLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06ODhwbTg2MHgtdG91Y2giKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnCmluZGV4IDY0NTdlMDYuLjcyMDg2NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcKQEAgLTExLDYgKzExLDE4IEBACiAKIGlmIElOUFVUX1RPVUNIU0NSRUVOCiAKK2NvbmZpZyBUT1VDSFNDUkVFTl84OFBNODYwWAorCXRyaXN0YXRlICJNYXJ2ZWxsIDg4UE04NjB4IHRvdWNoc2NyZWVuIgorCWRlcGVuZHMgb24gTUZEXzg4UE04NjBYCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIDg4UE04NjB4IFBNSUMgYW5kIHdhbnQgdG8gZW5hYmxlCisJICBzdXBwb3J0IGZvciB0aGUgYnVpbHQtaW4gdG91Y2hzY3JlZW4uCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIDg4cG04NjB4LXRzLgorCiBjb25maWcgVE9VQ0hTQ1JFRU5fQURTNzg0NgogCXRyaXN0YXRlICJBRFM3ODQ2L1RTQzIwNDYgYW5kIEFEUzc4NDMgYmFzZWQgdG91Y2hzY3JlZW5zIgogCWRlcGVuZHMgb24gU1BJX01BU1RFUgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vTWFrZWZpbGUKaW5kZXggZDYxYTNiNC4uN2ZlZjdkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL01ha2VmaWxlCkBAIC02LDYgKzYsNyBAQAogCiB3bTk3eHgtdHMteSA6PSB3bTk3eHgtY29yZS5vCiAKK29iai0kKENPTkZJR19UT1VDSFNDUkVFTl84OFBNODYwWCkJKz0gODhwbTg2MHgtdHMubwogb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3NykJKz0gYWQ3ODc3Lm8KIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkpCSs9IGFkNzg3OS5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NikJKz0gYWRzNzg0Ni5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL21jMTM3ODNfdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWMxMzc4M190cy5jCmluZGV4IGJlMTE1YjMuLmJlNTRmZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWMxMzc4M190cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWMxMzc4M190cy5jCkBAIC00NCw3ICs0NCw3IEBACiB7CiAJc3RydWN0IG1jMTM3ODNfdHNfcHJpdiAqcHJpdiA9IGRhdGE7CiAKLQltYzEzNzgzX2Fja2lycShwcml2LT5tYzEzNzgzLCBpcnEpOworCW1jMTM3ODNfaXJxX2Fjayhwcml2LT5tYzEzNzgzLCBpcnEpOwogCiAJLyoKIAkgKiBLaWNrIG9mZiByZWFkaW5nIGNvb3JkaW5hdGVzLiBOb3RlIHRoYXQgaWYgd29yayBoYXBwZW5zIGFscmVhZHkKQEAgLTEzNSw3ICsxMzUsNyBAQAogCiAJbWMxMzc4M19sb2NrKHByaXYtPm1jMTM3ODMpOwogCi0JbWMxMzc4M19hY2tpcnEocHJpdi0+bWMxMzc4MywgTUMxMzc4M19JUlFfVFMpOworCW1jMTM3ODNfaXJxX2Fjayhwcml2LT5tYzEzNzgzLCBNQzEzNzgzX0lSUV9UUyk7CiAKIAlyZXQgPSBtYzEzNzgzX2lycV9yZXF1ZXN0KHByaXYtPm1jMTM3ODMsIE1DMTM3ODNfSVJRX1RTLAogCQltYzEzNzgzX3RzX2hhbmRsZXIsIE1DMTM3ODNfVFNfTkFNRSwgcHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvS2NvbmZpZyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCmluZGV4IDhhMGUxZWMuLmUwYjY0MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCkBAIC0xNyw2ICsxNywxMyBAQAogCiBjb21tZW50ICJMRUQgZHJpdmVycyIKIAorY29uZmlnIExFRFNfODhQTTg2MFgKKwl0cmlzdGF0ZSAiTEVEIFN1cHBvcnQgZm9yIE1hcnZlbGwgODhQTTg2MHggUE1JQyIKKwlkZXBlbmRzIG9uIExFRFNfQ0xBU1MgJiYgTUZEXzg4UE04NjBYCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBvbi1jaGlwIExFRCBkcml2ZXJzIGZvdW5kIG9uIE1hcnZlbGwKKwkgIFNlbWljb25kdWN0b3IgODhQTTg2MDYgUE1JQy4KKwogY29uZmlnIExFRFNfQVRNRUxfUFdNCiAJdHJpc3RhdGUgIkxFRCBTdXBwb3J0IHVzaW5nIEF0bWVsIFBXTSBvdXRwdXRzIgogCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBBVE1FTF9QV00KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9NYWtlZmlsZSBiL2RyaXZlcnMvbGVkcy9NYWtlZmlsZQppbmRleCA5ZTYzODY5Li5kNzZmYjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9sZWRzL01ha2VmaWxlCkBAIC01LDYgKzUsNyBAQAogb2JqLSQoQ09ORklHX0xFRFNfVFJJR0dFUlMpCQkrPSBsZWQtdHJpZ2dlcnMubwogCiAjIExFRCBQbGF0Zm9ybSBEcml2ZXJzCitvYmotJChDT05GSUdfTEVEU184OFBNODYwWCkJCSs9IGxlZHMtODhwbTg2MHgubwogb2JqLSQoQ09ORklHX0xFRFNfQVRNRUxfUFdNKQkJKz0gbGVkcy1hdG1lbC1wd20ubwogb2JqLSQoQ09ORklHX0xFRFNfQkQyODAyKQkJKz0gbGVkcy1iZDI4MDIubwogb2JqLSQoQ09ORklHX0xFRFNfTE9DT01PKQkJKz0gbGVkcy1sb2NvbW8ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtODhwbTg2MHguYyBiL2RyaXZlcnMvbGVkcy9sZWRzLTg4cG04NjB4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE5NjA3MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLTg4cG04NjB4LmMKQEAgLTAsMCArMSwzMjUgQEAKKy8qCisgKiBMRUQgZHJpdmVyIGZvciBNYXJ2ZWxsIDg4UE04NjB4CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKglIYW9qaWFuIFpodWFuZyA8aGFvamlhbi56aHVhbmdAbWFydmVsbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkLzg4cG04NjB4Lmg+CisKKyNkZWZpbmUgTEVEX1BXTV9TSElGVAkJKDMpCisjZGVmaW5lIExFRF9QV01fTUFTSwkJKDB4MUYpCisjZGVmaW5lIExFRF9DVVJSRU5UX01BU0sJKDB4MDcgPDwgNSkKKworI2RlZmluZSBMRURfQkxJTktfT05fTUFTSwkoMHgwNykKKyNkZWZpbmUgTEVEX0JMSU5LX1BFUklPRF9NQVNLCSgweDBGIDw8IDMpCisjZGVmaW5lIExFRF9CTElOS19NQVNLCQkoMHg3RikKKworI2RlZmluZSBMRURfQkxJTktfT04oeCkJCSgoeCAmIDB4NykgKiA2NiArIDY2KQorI2RlZmluZSBMRURfQkxJTktfUEVSSU9EKHgpCSgoeCAmIDB4RikgKiA1MzAgKyA5MzApCisjZGVmaW5lIExFRF9CTElOS19PTl9NSU4JTEVEX0JMSU5LX09OKDApCisjZGVmaW5lIExFRF9CTElOS19PTl9NQVgJTEVEX0JMSU5LX09OKDB4NykKKyNkZWZpbmUgTEVEX0JMSU5LX1BFUklPRF9NSU4JTEVEX0JMSU5LX1BFUklPRCgwKQorI2RlZmluZSBMRURfQkxJTktfUEVSSU9EX01BWAlMRURfQkxJTktfUEVSSU9EKDB4RSkKKyNkZWZpbmUgTEVEX1RPX09OKHgpCQkoKHggLSA2NikgLyA2NikKKyNkZWZpbmUgTEVEX1RPX1BFUklPRCh4KQkoKHggLSA5MzApIC8gNTMwKQorCisjZGVmaW5lIExFRDFfQkxJTktfRU4JCSgxIDw8IDEpCisjZGVmaW5lIExFRDJfQkxJTktfRU4JCSgxIDw8IDIpCisKK2VudW0geworCVNFVF9CUklHSFRORVNTLAorCVNFVF9CTElOSywKK307CisKK3N0cnVjdCBwbTg2MHhfbGVkIHsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGNkZXY7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYzsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXA7CisJc3RydWN0IG11dGV4IGxvY2s7CisJY2hhciBuYW1lW01GRF9OQU1FX1NJWkVdOworCisJaW50IHBvcnQ7CisJaW50IGlzZXQ7CisJaW50IGNvbW1hbmQ7CisJaW50IG9mZnNldDsKKwl1bnNpZ25lZCBjaGFyIGJyaWdodG5lc3M7CisJdW5zaWduZWQgY2hhciBjdXJyZW50X2JyaWdodG5lc3M7CisKKwlpbnQgYmxpbmtfZGF0YTsKKwlpbnQgYmxpbmtfdGltZTsKKwlpbnQgYmxpbmtfb247CisJaW50IGJsaW5rX29mZjsKK307CisKKy8qIHJldHVybiBvZmZzZXQgb2YgY29sb3IgcmVnaXN0ZXIgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fbGVkX29mZihpbnQgcG9ydCkKK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCXN3aXRjaCAocG9ydCkgeworCWNhc2UgUE04NjA2X0xFRDFfUkVEOgorCWNhc2UgUE04NjA2X0xFRDFfR1JFRU46CisJY2FzZSBQTTg2MDZfTEVEMV9CTFVFOgorCQlyZXQgPSBwb3J0IC0gUE04NjA2X0xFRDFfUkVEICsgUE04NjA2X1JHQjFCOworCQlicmVhazsKKwljYXNlIFBNODYwNl9MRUQyX1JFRDoKKwljYXNlIFBNODYwNl9MRUQyX0dSRUVOOgorCWNhc2UgUE04NjA2X0xFRDJfQkxVRToKKwkJcmV0ID0gcG9ydCAtIFBNODYwNl9MRUQyX1JFRCArIFBNODYwNl9SR0IyQjsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qIHJldHVybiBvZmZzZXQgb2YgYmxpbmsgcmVnaXN0ZXIgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fYmxpbmtfb2ZmKGludCBwb3J0KQoreworCWludCByZXQgPSAtRUlOVkFMOworCisJc3dpdGNoIChwb3J0KSB7CisJY2FzZSBQTTg2MDZfTEVEMV9SRUQ6CisJY2FzZSBQTTg2MDZfTEVEMV9HUkVFTjoKKwljYXNlIFBNODYwNl9MRUQxX0JMVUU6CisJCXJldCA9IFBNODYwNl9SR0IxQTsKKwljYXNlIFBNODYwNl9MRUQyX1JFRDoKKwljYXNlIFBNODYwNl9MRUQyX0dSRUVOOgorCWNhc2UgUE04NjA2X0xFRDJfQkxVRToKKwkJcmV0ID0gUE04NjA2X1JHQjJBOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2JsaW5rX2N0bF9tYXNrKGludCBwb3J0KQoreworCWludCByZXQgPSAtRUlOVkFMOworCisJc3dpdGNoIChwb3J0KSB7CisJY2FzZSBQTTg2MDZfTEVEMV9SRUQ6CisJY2FzZSBQTTg2MDZfTEVEMV9HUkVFTjoKKwljYXNlIFBNODYwNl9MRUQxX0JMVUU6CisJCXJldCA9IExFRDFfQkxJTktfRU47CisJCWJyZWFrOworCWNhc2UgUE04NjA2X0xFRDJfUkVEOgorCWNhc2UgUE04NjA2X0xFRDJfR1JFRU46CisJY2FzZSBQTTg2MDZfTEVEMl9CTFVFOgorCQlyZXQgPSBMRUQyX0JMSU5LX0VOOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2xlZF9zZXQoc3RydWN0IHBtODYweF9sZWQgKmxlZCwgaW50IGNvbW1hbmQpCit7CisJc3RydWN0IHBtODYweF9jaGlwICpjaGlwID0gbGVkLT5jaGlwOworCWludCBtYXNrLCByZXQ7CisKKwltdXRleF9sb2NrKCZsZWQtPmxvY2spOworCXN3aXRjaCAoY29tbWFuZCkgeworCWNhc2UgU0VUX0JSSUdIVE5FU1M6CisJCWlmICgobGVkLT5jdXJyZW50X2JyaWdodG5lc3MgPT0gMCkgJiYgbGVkLT5icmlnaHRuZXNzKSB7CisJCQlpZiAobGVkLT5pc2V0KSB7CisJCQkJcmV0ID0gcG04NjB4X3NldF9iaXRzKGxlZC0+aTJjLCBsZWQtPm9mZnNldCwKKwkJCQkJCUxFRF9DVVJSRU5UX01BU0ssIGxlZC0+aXNldCk7CisJCQkJaWYgKHJldCA8IDApCisJCQkJCWdvdG8gb3V0OworCQkJfQorCQl9IGVsc2UgaWYgKGxlZC0+YnJpZ2h0bmVzcyA9PSAwKSB7CisJCQlyZXQgPSBwbTg2MHhfc2V0X2JpdHMobGVkLT5pMmMsIGxlZC0+b2Zmc2V0LAorCQkJCQkJTEVEX0NVUlJFTlRfTUFTSywgMCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dDsKKwkJfQorCQlyZXQgPSBwbTg2MHhfc2V0X2JpdHMobGVkLT5pMmMsIGxlZC0+b2Zmc2V0LCBMRURfUFdNX01BU0ssCisJCQkJCWxlZC0+YnJpZ2h0bmVzcyk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJCWxlZC0+Y3VycmVudF9icmlnaHRuZXNzID0gbGVkLT5icmlnaHRuZXNzOworCQlkZXZfZGJnKGNoaXAtPmRldiwgIlVwZGF0ZSBMRUQuIChyZWc6JWQsIGJyaWdodG5lc3M6JWQpXG4iLAorCQkJbGVkLT5vZmZzZXQsIGxlZC0+YnJpZ2h0bmVzcyk7CisJCWJyZWFrOworCWNhc2UgU0VUX0JMSU5LOgorCQlyZXQgPSBwbTg2MHhfc2V0X2JpdHMobGVkLT5pMmMsIGxlZC0+b2Zmc2V0LAorCQkJCUxFRF9CTElOS19NQVNLLCBsZWQtPmJsaW5rX2RhdGEpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCisJCW1hc2sgPSBfX2JsaW5rX2N0bF9tYXNrKGxlZC0+cG9ydCk7CisJCXJldCA9IHBtODYweF9zZXRfYml0cyhsZWQtPmkyYywgUE04NjA2X1dMRUQzQiwgbWFzaywgbWFzayk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJCWRldl9kYmcoY2hpcC0+ZGV2LCAiTEVEIGJsaW5rIGRlbGF5IG9uOiVkbXMsIGRlbGF5IG9mZjolZG1zXG4iLAorCQkJbGVkLT5ibGlua19vbiwgbGVkLT5ibGlua19vZmYpOworCQlicmVhazsKKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZsZWQtPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwbTg2MHhfbGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBwbTg2MHhfbGVkICpsZWQ7CisKKwlsZWQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBtODYweF9sZWQsIHdvcmspOworCV9fbGVkX3NldChsZWQsIGxlZC0+Y29tbWFuZCk7Cit9CisKK3N0YXRpYyB2b2lkIHBtODYweF9sZWRfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYsCisJCQkgICBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQoreworCXN0cnVjdCBwbTg2MHhfbGVkICpkYXRhID0gY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBwbTg2MHhfbGVkLCBjZGV2KTsKKworCWRhdGEtPm9mZnNldCA9IF9fbGVkX29mZihkYXRhLT5wb3J0KTsKKwlkYXRhLT5icmlnaHRuZXNzID0gdmFsdWUgPj4gMzsKKwlkYXRhLT5jb21tYW5kID0gU0VUX0JSSUdIVE5FU1M7CisJc2NoZWR1bGVfd29yaygmZGF0YS0+d29yayk7Cit9CisKK3N0YXRpYyBpbnQgcG04NjB4X2xlZF9ibGluayhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2LAorCQkJICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZikKK3sKKwlzdHJ1Y3QgcG04NjB4X2xlZCAqZGF0YSA9IGNvbnRhaW5lcl9vZihjZGV2LCBzdHJ1Y3QgcG04NjB4X2xlZCwgY2Rldik7CisJaW50IHBlcmlvZCwgb247CisKKwlvbiA9ICpkZWxheV9vbjsKKwlpZiAoKG9uIDwgTEVEX0JMSU5LX09OX01JTikgfHwgKG9uID4gTEVEX0JMSU5LX09OX01BWCkpCisJCXJldHVybiAtRUlOVkFMOworCisJb24gPSBMRURfVE9fT04ob24pOworCW9uID0gTEVEX0JMSU5LX09OKG9uKTsKKworCXBlcmlvZCA9IG9uICsgKmRlbGF5X29mZjsKKwlpZiAoKHBlcmlvZCA8IExFRF9CTElOS19QRVJJT0RfTUlOKSB8fCAocGVyaW9kID4gTEVEX0JMSU5LX1BFUklPRF9NQVgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwZXJpb2QgPSBMRURfVE9fUEVSSU9EKHBlcmlvZCk7CisJcGVyaW9kID0gTEVEX0JMSU5LX1BFUklPRChwZXJpb2QpOworCisJZGF0YS0+b2Zmc2V0ID0gX19ibGlua19vZmYoZGF0YS0+cG9ydCk7CisJZGF0YS0+Ymxpbmtfb24gPSBvbjsKKwlkYXRhLT5ibGlua19vZmYgPSBwZXJpb2QgLSBkYXRhLT5ibGlua19vbjsKKwlkYXRhLT5ibGlua19kYXRhID0gKHBlcmlvZCA8PCAzKSB8IGRhdGEtPmJsaW5rX29uOworCWRhdGEtPmNvbW1hbmQgPSBTRVRfQkxJTks7CisJc2NoZWR1bGVfd29yaygmZGF0YS0+d29yayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2NoZWNrX2RldmljZShzdHJ1Y3QgcG04NjB4X2xlZF9wZGF0YSAqcGRhdGEsIGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHBtODYweF9sZWRfcGRhdGEgKnAgPSBwZGF0YTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCXdoaWxlIChwICYmIHAtPmlkKSB7CisJCWlmICgocC0+aWQgIT0gUE04NjA2X0lEX0xFRCkgfHwgKHAtPmZsYWdzIDwgMCkpCisJCQlicmVhazsKKworCQlpZiAoIXN0cm5jbXAobmFtZSwgcG04NjB4X2xlZF9uYW1lW3AtPmZsYWdzXSwKKwkJCU1GRF9OQU1FX1NJWkUpKSB7CisJCQlyZXQgPSAoaW50KXAtPmZsYWdzOworCQkJYnJlYWs7CisJCX0KKwkJcCsrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBtODYweF9sZWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHBtODYweF9wbGF0Zm9ybV9kYXRhICpwbTg2MHhfcGRhdGE7CisJc3RydWN0IHBtODYweF9sZWRfcGRhdGEgKnBkYXRhOworCXN0cnVjdCBwbTg2MHhfbGVkICpkYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIEkvTyByZXNvdXJjZSFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAocGRldi0+ZGV2LnBhcmVudC0+cGxhdGZvcm1fZGF0YSkgeworCQlwbTg2MHhfcGRhdGEgPSBwZGV2LT5kZXYucGFyZW50LT5wbGF0Zm9ybV9kYXRhOworCQlwZGF0YSA9IHBtODYweF9wZGF0YS0+bGVkOworCX0gZWxzZQorCQlwZGF0YSA9IE5VTEw7CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBtODYweF9sZWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzdHJuY3B5KGRhdGEtPm5hbWUsIHJlcy0+bmFtZSwgTUZEX05BTUVfU0laRSk7CisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGRhdGEpOworCWRhdGEtPmNoaXAgPSBjaGlwOworCWRhdGEtPmkyYyA9IChjaGlwLT5pZCA9PSBDSElQX1BNODYwNikgPyBjaGlwLT5jbGllbnQgOiBjaGlwLT5jb21wYW5pb247CisJZGF0YS0+aXNldCA9IHBkYXRhLT5pc2V0OworCWRhdGEtPnBvcnQgPSBfX2NoZWNrX2RldmljZShwZGF0YSwgZGF0YS0+bmFtZSk7CisJaWYgKGRhdGEtPnBvcnQgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyA9IDA7CisJZGF0YS0+Y2Rldi5uYW1lID0gZGF0YS0+bmFtZTsKKwlkYXRhLT5jZGV2LmJyaWdodG5lc3Nfc2V0ID0gcG04NjB4X2xlZF9zZXQ7CisJZGF0YS0+Y2Rldi5ibGlua19zZXQgPSBwbTg2MHhfbGVkX2JsaW5rOworCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOworCUlOSVRfV09SSygmZGF0YS0+d29yaywgcG04NjB4X2xlZF93b3JrKTsKKworCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcihjaGlwLT5kZXYsICZkYXRhLT5jZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgTEVEOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCXJldHVybiAwOworb3V0OgorCWtmcmVlKGRhdGEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcG04NjB4X2xlZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcG04NjB4X2xlZCAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmRhdGEtPmNkZXYpOworCWtmcmVlKGRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBtODYweF9sZWRfZHJpdmVyID0geworCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gIjg4cG04NjB4LWxlZCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCT0gcG04NjB4X2xlZF9wcm9iZSwKKwkucmVtb3ZlCT0gcG04NjB4X2xlZF9yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwbTg2MHhfbGVkX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwbTg2MHhfbGVkX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChwbTg2MHhfbGVkX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgcG04NjB4X2xlZF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBtODYweF9sZWRfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHBtODYweF9sZWRfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiTEVEIGRyaXZlciBmb3IgTWFydmVsbCBQTTg2MHgiKTsKK01PRFVMRV9BVVRIT1IoIkhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0BtYXJ2ZWxsLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06ODhwbTg2MHgtbGVkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWNyeXB0LmMgYi9kcml2ZXJzL21kL2RtLWNyeXB0LmMKaW5kZXggYTkzNjM3Mi4uM2JkYmI2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1jcnlwdC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tY3J5cHQuYwpAQCAtMTE2MCw4ICsxMTYwLDcgQEAKIAl9CiAJY2MtPnN0YXJ0ID0gdG1wbGw7CiAKLQlpZiAoZG1fZ2V0X2RldmljZSh0aSwgYXJndlszXSwgY2MtPnN0YXJ0LCB0aS0+bGVuLAotCQkJICBkbV90YWJsZV9nZXRfbW9kZSh0aS0+dGFibGUpLCAmY2MtPmRldikpIHsKKwlpZiAoZG1fZ2V0X2RldmljZSh0aSwgYXJndlszXSwgZG1fdGFibGVfZ2V0X21vZGUodGktPnRhYmxlKSwgJmNjLT5kZXYpKSB7CiAJCXRpLT5lcnJvciA9ICJEZXZpY2UgbG9va3VwIGZhaWxlZCI7CiAJCWdvdG8gYmFkX2RldmljZTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWRlbGF5LmMgYi9kcml2ZXJzL21kL2RtLWRlbGF5LmMKaW5kZXggZWJlNzM4MS4uODUyMDUyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1kZWxheS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tZGVsYXkuYwpAQCAtMTU2LDggKzE1Niw4IEBACiAJCWdvdG8gYmFkOwogCX0KIAotCWlmIChkbV9nZXRfZGV2aWNlKHRpLCBhcmd2WzBdLCBkYy0+c3RhcnRfcmVhZCwgdGktPmxlbiwKLQkJCSAgZG1fdGFibGVfZ2V0X21vZGUodGktPnRhYmxlKSwgJmRjLT5kZXZfcmVhZCkpIHsKKwlpZiAoZG1fZ2V0X2RldmljZSh0aSwgYXJndlswXSwgZG1fdGFibGVfZ2V0X21vZGUodGktPnRhYmxlKSwKKwkJCSAgJmRjLT5kZXZfcmVhZCkpIHsKIAkJdGktPmVycm9yID0gIkRldmljZSBsb29rdXAgZmFpbGVkIjsKIAkJZ290byBiYWQ7CiAJfQpAQCAtMTc3LDggKzE3Nyw4IEBACiAJCWdvdG8gYmFkX2Rldl9yZWFkOwogCX0KIAotCWlmIChkbV9nZXRfZGV2aWNlKHRpLCBhcmd2WzNdLCBkYy0+c3RhcnRfd3JpdGUsIHRpLT5sZW4sCi0JCQkgIGRtX3RhYmxlX2dldF9tb2RlKHRpLT50YWJsZSksICZkYy0+ZGV2X3dyaXRlKSkgeworCWlmIChkbV9nZXRfZGV2aWNlKHRpLCBhcmd2WzNdLCBkbV90YWJsZV9nZXRfbW9kZSh0aS0+dGFibGUpLAorCQkJICAmZGMtPmRldl93cml0ZSkpIHsKIAkJdGktPmVycm9yID0gIldyaXRlIGRldmljZSBsb29rdXAgZmFpbGVkIjsKIAkJZ290byBiYWRfZGV2X3JlYWQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1pb2N0bC5jIGIvZHJpdmVycy9tZC9kbS1pb2N0bC5jCmluZGV4IDFkNjY5MzIuLmQ3NTAwZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0taW9jdGwuYworKysgYi9kcml2ZXJzL21kL2RtLWlvY3RsLmMKQEAgLTI4NSw3ICsyODUsOCBAQAogCXVwX3dyaXRlKCZfaGFzaF9sb2NrKTsKIH0KIAotc3RhdGljIGludCBkbV9oYXNoX3JlbmFtZSh1aW50MzJfdCBjb29raWUsIGNvbnN0IGNoYXIgKm9sZCwgY29uc3QgY2hhciAqbmV3KQorc3RhdGljIGludCBkbV9oYXNoX3JlbmFtZSh1aW50MzJfdCBjb29raWUsIHVpbnQzMl90ICpmbGFncywgY29uc3QgY2hhciAqb2xkLAorCQkJICBjb25zdCBjaGFyICpuZXcpCiB7CiAJY2hhciAqbmV3X25hbWUsICpvbGRfbmFtZTsKIAlzdHJ1Y3QgaGFzaF9jZWxsICpoYzsKQEAgLTM0NCw3ICszNDUsOCBAQAogCQlkbV90YWJsZV9wdXQodGFibGUpOwogCX0KIAotCWRtX2tvYmplY3RfdWV2ZW50KGhjLT5tZCwgS09CSl9DSEFOR0UsIGNvb2tpZSk7CisJaWYgKCFkbV9rb2JqZWN0X3VldmVudChoYy0+bWQsIEtPQkpfQ0hBTkdFLCBjb29raWUpKQorCQkqZmxhZ3MgfD0gRE1fVUVWRU5UX0dFTkVSQVRFRF9GTEFHOwogCiAJZG1fcHV0KGhjLT5tZCk7CiAJdXBfd3JpdGUoJl9oYXNoX2xvY2spOwpAQCAtNzM2LDEwICs3MzgsMTAgQEAKIAlfX2hhc2hfcmVtb3ZlKGhjKTsKIAl1cF93cml0ZSgmX2hhc2hfbG9jayk7CiAKLQlkbV9rb2JqZWN0X3VldmVudChtZCwgS09CSl9SRU1PVkUsIHBhcmFtLT5ldmVudF9ucik7CisJaWYgKCFkbV9rb2JqZWN0X3VldmVudChtZCwgS09CSl9SRU1PVkUsIHBhcmFtLT5ldmVudF9ucikpCisJCXBhcmFtLT5mbGFncyB8PSBETV9VRVZFTlRfR0VORVJBVEVEX0ZMQUc7CiAKIAlkbV9wdXQobWQpOwotCXBhcmFtLT5kYXRhX3NpemUgPSAwOwogCXJldHVybiAwOwogfQogCkBAIC03NzMsNyArNzc1LDkgQEAKIAkJcmV0dXJuIHI7CiAKIAlwYXJhbS0+ZGF0YV9zaXplID0gMDsKLQlyZXR1cm4gZG1faGFzaF9yZW5hbWUocGFyYW0tPmV2ZW50X25yLCBwYXJhbS0+bmFtZSwgbmV3X25hbWUpOworCisJcmV0dXJuIGRtX2hhc2hfcmVuYW1lKHBhcmFtLT5ldmVudF9uciwgJnBhcmFtLT5mbGFncywgcGFyYW0tPm5hbWUsCisJCQkgICAgICBuZXdfbmFtZSk7CiB9CiAKIHN0YXRpYyBpbnQgZGV2X3NldF9nZW9tZXRyeShzdHJ1Y3QgZG1faW9jdGwgKnBhcmFtLCBzaXplX3QgcGFyYW1fc2l6ZSkKQEAgLTg5NywxNiArOTAxLDE3IEBACiAJCQlzZXRfZGlza19ybyhkbV9kaXNrKG1kKSwgMSk7CiAJfQogCi0JaWYgKGRtX3N1c3BlbmRlZF9tZChtZCkpCisJaWYgKGRtX3N1c3BlbmRlZF9tZChtZCkpIHsKIAkJciA9IGRtX3Jlc3VtZShtZCk7CisJCWlmICghciAmJiAhZG1fa29iamVjdF91ZXZlbnQobWQsIEtPQkpfQ0hBTkdFLCBwYXJhbS0+ZXZlbnRfbnIpKQorCQkJcGFyYW0tPmZsYWdzIHw9IERNX1VFVkVOVF9HRU5FUkFURURfRkxBRzsKKwl9CiAKIAlpZiAob2xkX21hcCkKIAkJZG1fdGFibGVfZGVzdHJveShvbGRfbWFwKTsKIAotCWlmICghcikgewotCQlkbV9rb2JqZWN0X3VldmVudChtZCwgS09CSl9DSEFOR0UsIHBhcmFtLT5ldmVudF9ucik7CisJaWYgKCFyKQogCQlyID0gX19kZXZfc3RhdHVzKG1kLCBwYXJhbSk7Ci0JfQogCiAJZG1fcHV0KG1kKTsKIAlyZXR1cm4gcjsKQEAgLTE0NzYsNiArMTQ4MSw3IEBACiB7CiAJLyogQWx3YXlzIGNsZWFyIHRoaXMgZmxhZyAqLwogCXBhcmFtLT5mbGFncyAmPSB+RE1fQlVGRkVSX0ZVTExfRkxBRzsKKwlwYXJhbS0+ZmxhZ3MgJj0gfkRNX1VFVkVOVF9HRU5FUkFURURfRkxBRzsKIAogCS8qIElnbm9yZXMgcGFyYW1ldGVycyAqLwogCWlmIChjbWQgPT0gRE1fUkVNT1ZFX0FMTF9DTUQgfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tbGluZWFyLmMgYi9kcml2ZXJzL21kL2RtLWxpbmVhci5jCmluZGV4IDgyZjdkNmUuLjkyMDBkYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tbGluZWFyLmMKKysrIGIvZHJpdmVycy9tZC9kbS1saW5lYXIuYwpAQCAtNDcsOCArNDcsNyBAQAogCX0KIAlsYy0+c3RhcnQgPSB0bXA7CiAKLQlpZiAoZG1fZ2V0X2RldmljZSh0aSwgYXJndlswXSwgbGMtPnN0YXJ0LCB0aS0+bGVuLAotCQkJICBkbV90YWJsZV9nZXRfbW9kZSh0aS0+dGFibGUpLCAmbGMtPmRldikpIHsKKwlpZiAoZG1fZ2V0X2RldmljZSh0aSwgYXJndlswXSwgZG1fdGFibGVfZ2V0X21vZGUodGktPnRhYmxlKSwgJmxjLT5kZXYpKSB7CiAJCXRpLT5lcnJvciA9ICJkbS1saW5lYXI6IERldmljZSBsb29rdXAgZmFpbGVkIjsKIAkJZ290byBiYWQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1sb2cuYyBiL2RyaXZlcnMvbWQvZG0tbG9nLmMKaW5kZXggNzAzNTU4Mi4uNWEwOGJlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1sb2cuYworKysgYi9kcml2ZXJzL21kL2RtLWxvZy5jCkBAIC01NDMsOCArNTQzLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JciA9IGRtX2dldF9kZXZpY2UodGksIGFyZ3ZbMF0sIDAsIDAgLyogRklYTUUgKi8sCi0JCQkgIEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSwgJmRldik7CisJciA9IGRtX2dldF9kZXZpY2UodGksIGFyZ3ZbMF0sIEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSwgJmRldik7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLW1wYXRoLmMgYi9kcml2ZXJzL21kL2RtLW1wYXRoLmMKaW5kZXggZTgxMzQ1YS4uODI2YmNlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1tcGF0aC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tbXBhdGguYwpAQCAtNjksNiArNjksNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgcHJpb3JpdHlfZ3JvdXBzOwogCXVuc2lnbmVkIHBnX2luaXRfcmVxdWlyZWQ7CS8qIHBnX2luaXQgbmVlZHMgY2FsbGluZz8gKi8KIAl1bnNpZ25lZCBwZ19pbml0X2luX3Byb2dyZXNzOwkvKiBPbmx5IG9uZSBwZ19pbml0IGFsbG93ZWQgYXQgb25jZSAqLworCXdhaXRfcXVldWVfaGVhZF90IHBnX2luaXRfd2FpdDsJLyogV2FpdCBmb3IgcGdfaW5pdCBjb21wbGV0aW9uICovCiAKIAl1bnNpZ25lZCBucl92YWxpZF9wYXRoczsJLyogVG90YWwgbnVtYmVyIG9mIHVzYWJsZSBwYXRocyAqLwogCXN0cnVjdCBwZ3BhdGggKmN1cnJlbnRfcGdwYXRoOwpAQCAtOTUsOCArOTYsNiBAQAogCW1lbXBvb2xfdCAqbXBpb19wb29sOwogCiAJc3RydWN0IG11dGV4IHdvcmtfbXV0ZXg7Ci0KLQl1bnNpZ25lZCBzdXNwZW5kZWQ7CS8qIERvbid0IGNyZWF0ZSBuZXcgSS9PIGludGVybmFsbHkgd2hlbiBzZXQuICovCiB9OwogCiAvKgpAQCAtMjAyLDYgKzIwMSw3IEBACiAJCW0tPnF1ZXVlX2lvID0gMTsKIAkJSU5JVF9XT1JLKCZtLT5wcm9jZXNzX3F1ZXVlZF9pb3MsIHByb2Nlc3NfcXVldWVkX2lvcyk7CiAJCUlOSVRfV09SSygmbS0+dHJpZ2dlcl9ldmVudCwgdHJpZ2dlcl9ldmVudCk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm0tPnBnX2luaXRfd2FpdCk7CiAJCW11dGV4X2luaXQoJm0tPndvcmtfbXV0ZXgpOwogCQltLT5tcGlvX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woTUlOX0lPUywgX21waW9fY2FjaGUpOwogCQlpZiAoIW0tPm1waW9fcG9vbCkgewpAQCAtMjM1LDYgKzIzNSwyMSBAQAogICogUGF0aCBzZWxlY3Rpb24KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCitzdGF0aWMgdm9pZCBfX3BnX2luaXRfYWxsX3BhdGhzKHN0cnVjdCBtdWx0aXBhdGggKm0pCit7CisJc3RydWN0IHBncGF0aCAqcGdwYXRoOworCisJbS0+cGdfaW5pdF9jb3VudCsrOworCW0tPnBnX2luaXRfcmVxdWlyZWQgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkocGdwYXRoLCAmbS0+Y3VycmVudF9wZy0+cGdwYXRocywgbGlzdCkgeworCQkvKiBTa2lwIGZhaWxlZCBwYXRocyAqLworCQlpZiAoIXBncGF0aC0+aXNfYWN0aXZlKQorCQkJY29udGludWU7CisJCWlmIChxdWV1ZV93b3JrKGttcGF0aF9oYW5kbGVyZCwgJnBncGF0aC0+YWN0aXZhdGVfcGF0aCkpCisJCQltLT5wZ19pbml0X2luX3Byb2dyZXNzKys7CisJfQorfQorCiBzdGF0aWMgdm9pZCBfX3N3aXRjaF9wZyhzdHJ1Y3QgbXVsdGlwYXRoICptLCBzdHJ1Y3QgcGdwYXRoICpwZ3BhdGgpCiB7CiAJbS0+Y3VycmVudF9wZyA9IHBncGF0aC0+cGc7CkBAIC00MzksNyArNDU0LDcgQEAKIHsKIAlzdHJ1Y3QgbXVsdGlwYXRoICptID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtdWx0aXBhdGgsIHByb2Nlc3NfcXVldWVkX2lvcyk7Ci0Jc3RydWN0IHBncGF0aCAqcGdwYXRoID0gTlVMTCwgKnRtcDsKKwlzdHJ1Y3QgcGdwYXRoICpwZ3BhdGggPSBOVUxMOwogCXVuc2lnbmVkIG11c3RfcXVldWUgPSAxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTQ1NywxNCArNDcyLDkgQEAKIAkgICAgKCFwZ3BhdGggJiYgIW0tPnF1ZXVlX2lmX25vX3BhdGgpKQogCQltdXN0X3F1ZXVlID0gMDsKIAotCWlmIChtLT5wZ19pbml0X3JlcXVpcmVkICYmICFtLT5wZ19pbml0X2luX3Byb2dyZXNzICYmIHBncGF0aCkgewotCQltLT5wZ19pbml0X2NvdW50Kys7Ci0JCW0tPnBnX2luaXRfcmVxdWlyZWQgPSAwOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgJnBncGF0aC0+cGctPnBncGF0aHMsIGxpc3QpIHsKLQkJCWlmIChxdWV1ZV93b3JrKGttcGF0aF9oYW5kbGVyZCwgJnRtcC0+YWN0aXZhdGVfcGF0aCkpCi0JCQkJbS0+cGdfaW5pdF9pbl9wcm9ncmVzcysrOwotCQl9Ci0JfQorCWlmIChtLT5wZ19pbml0X3JlcXVpcmVkICYmICFtLT5wZ19pbml0X2luX3Byb2dyZXNzICYmIHBncGF0aCkKKwkJX19wZ19pbml0X2FsbF9wYXRocyhtKTsKKwogb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm0tPmxvY2ssIGZsYWdzKTsKIAlpZiAoIW11c3RfcXVldWUpCkBAIC01OTcsOCArNjA3LDggQEAKIAlpZiAoIXApCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JciA9IGRtX2dldF9kZXZpY2UodGksIHNoaWZ0KGFzKSwgdGktPmJlZ2luLCB0aS0+bGVuLAotCQkJICBkbV90YWJsZV9nZXRfbW9kZSh0aS0+dGFibGUpLCAmcC0+cGF0aC5kZXYpOworCXIgPSBkbV9nZXRfZGV2aWNlKHRpLCBzaGlmdChhcyksIGRtX3RhYmxlX2dldF9tb2RlKHRpLT50YWJsZSksCisJCQkgICZwLT5wYXRoLmRldik7CiAJaWYgKHIpIHsKIAkJdGktPmVycm9yID0gImVycm9yIGdldHRpbmcgZGV2aWNlIjsKIAkJZ290byBiYWQ7CkBAIC04OTAsOSArOTAwLDM0IEBACiAJcmV0dXJuIHI7CiB9CiAKLXN0YXRpYyB2b2lkIGZsdXNoX211bHRpcGF0aF93b3JrKHZvaWQpCitzdGF0aWMgdm9pZCBtdWx0aXBhdGhfd2FpdF9mb3JfcGdfaW5pdF9jb21wbGV0aW9uKHN0cnVjdCBtdWx0aXBhdGggKm0pCit7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWFkZF93YWl0X3F1ZXVlKCZtLT5wZ19pbml0X3dhaXQsICZ3YWl0KTsKKworCXdoaWxlICgxKSB7CisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbS0+bG9jaywgZmxhZ3MpOworCQlpZiAoIW0tPnBnX2luaXRfaW5fcHJvZ3Jlc3MpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm0tPmxvY2ssIGZsYWdzKTsKKwkJCWJyZWFrOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm0tPmxvY2ssIGZsYWdzKTsKKworCQlpb19zY2hlZHVsZSgpOworCX0KKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCisJcmVtb3ZlX3dhaXRfcXVldWUoJm0tPnBnX2luaXRfd2FpdCwgJndhaXQpOworfQorCitzdGF0aWMgdm9pZCBmbHVzaF9tdWx0aXBhdGhfd29yayhzdHJ1Y3QgbXVsdGlwYXRoICptKQogewogCWZsdXNoX3dvcmtxdWV1ZShrbXBhdGhfaGFuZGxlcmQpOworCW11bHRpcGF0aF93YWl0X2Zvcl9wZ19pbml0X2NvbXBsZXRpb24obSk7CiAJZmx1c2hfd29ya3F1ZXVlKGttdWx0aXBhdGhkKTsKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogfQpAQCAtOTAxLDcgKzkzNiw3IEBACiB7CiAJc3RydWN0IG11bHRpcGF0aCAqbSA9IHRpLT5wcml2YXRlOwogCi0JZmx1c2hfbXVsdGlwYXRoX3dvcmsoKTsKKwlmbHVzaF9tdWx0aXBhdGhfd29yayhtKTsKIAlmcmVlX211bHRpcGF0aChtKTsKIH0KIApAQCAtMTEyOCw4ICsxMTYzLDcgQEAKIAogc3RhdGljIHZvaWQgcGdfaW5pdF9kb25lKHZvaWQgKmRhdGEsIGludCBlcnJvcnMpCiB7Ci0Jc3RydWN0IGRtX3BhdGggKnBhdGggPSBkYXRhOwotCXN0cnVjdCBwZ3BhdGggKnBncGF0aCA9IHBhdGhfdG9fcGdwYXRoKHBhdGgpOworCXN0cnVjdCBwZ3BhdGggKnBncGF0aCA9IGRhdGE7CiAJc3RydWN0IHByaW9yaXR5X2dyb3VwICpwZyA9IHBncGF0aC0+cGc7CiAJc3RydWN0IG11bHRpcGF0aCAqbSA9IHBnLT5tOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMTQzLDggKzExNzcsOCBAQAogCQkJZXJyb3JzID0gMDsKIAkJCWJyZWFrOwogCQl9Ci0JCURNRVJSKCJDYW5ub3QgZmFpbG92ZXIgZGV2aWNlIGJlY2F1c2Ugc2NzaV9kaF8lcyB3YXMgbm90ICIKLQkJICAgICAgImxvYWRlZC4iLCBtLT5od19oYW5kbGVyX25hbWUpOworCQlETUVSUigiQ291bGQgbm90IGZhaWxvdmVyIHRoZSBkZXZpY2U6IEhhbmRsZXIgc2NzaV9kaF8lcyAiCisJCSAgICAgICJFcnJvciAlZC4iLCBtLT5od19oYW5kbGVyX25hbWUsIGVycm9ycyk7CiAJCS8qCiAJCSAqIEZhaWwgcGF0aCBmb3Igbm93LCBzbyB3ZSBkbyBub3QgcGluZyBwb25nCiAJCSAqLwpAQCAtMTE4MSwxNCArMTIxNSwyNCBAQAogCQkJbS0+Y3VycmVudF9wZ3BhdGggPSBOVUxMOwogCQkJbS0+Y3VycmVudF9wZyA9IE5VTEw7CiAJCX0KLQl9IGVsc2UgaWYgKCFtLT5wZ19pbml0X3JlcXVpcmVkKSB7Ci0JCW0tPnF1ZXVlX2lvID0gMDsKKwl9IGVsc2UgaWYgKCFtLT5wZ19pbml0X3JlcXVpcmVkKQogCQlwZy0+YnlwYXNzZWQgPSAwOwotCX0KIAotCW0tPnBnX2luaXRfaW5fcHJvZ3Jlc3MtLTsKLQlpZiAoIW0tPnBnX2luaXRfaW5fcHJvZ3Jlc3MpCi0JCXF1ZXVlX3dvcmsoa211bHRpcGF0aGQsICZtLT5wcm9jZXNzX3F1ZXVlZF9pb3MpOworCWlmICgtLW0tPnBnX2luaXRfaW5fcHJvZ3Jlc3MpCisJCS8qIEFjdGl2YXRpb25zIG9mIG90aGVyIHBhdGhzIGFyZSBzdGlsbCBvbiBnb2luZyAqLworCQlnb3RvIG91dDsKKworCWlmICghbS0+cGdfaW5pdF9yZXF1aXJlZCkKKwkJbS0+cXVldWVfaW8gPSAwOworCisJcXVldWVfd29yayhrbXVsdGlwYXRoZCwgJm0tPnByb2Nlc3NfcXVldWVkX2lvcyk7CisKKwkvKgorCSAqIFdha2UgdXAgYW55IHRocmVhZCB3YWl0aW5nIHRvIHN1c3BlbmQuCisJICovCisJd2FrZV91cCgmbS0+cGdfaW5pdF93YWl0KTsKKworb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm0tPmxvY2ssIGZsYWdzKTsKIH0KIApAQCAtMTE5OCw3ICsxMjQyLDcgQEAKIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwZ3BhdGgsIGFjdGl2YXRlX3BhdGgpOwogCiAJc2NzaV9kaF9hY3RpdmF0ZShiZGV2X2dldF9xdWV1ZShwZ3BhdGgtPnBhdGguZGV2LT5iZGV2KSwKLQkJCQlwZ19pbml0X2RvbmUsICZwZ3BhdGgtPnBhdGgpOworCQkJCXBnX2luaXRfZG9uZSwgcGdwYXRoKTsKIH0KIAogLyoKQEAgLTEyNzYsOCArMTMyMCw3IEBACiAJc3RydWN0IG11bHRpcGF0aCAqbSA9IHRpLT5wcml2YXRlOwogCiAJbXV0ZXhfbG9jaygmbS0+d29ya19tdXRleCk7Ci0JbS0+c3VzcGVuZGVkID0gMTsKLQlmbHVzaF9tdWx0aXBhdGhfd29yaygpOworCWZsdXNoX211bHRpcGF0aF93b3JrKG0pOwogCW11dGV4X3VubG9jaygmbS0+d29ya19tdXRleCk7CiB9CiAKQEAgLTEyODksMTAgKzEzMzIsNiBAQAogCXN0cnVjdCBtdWx0aXBhdGggKm0gPSAoc3RydWN0IG11bHRpcGF0aCAqKSB0aS0+cHJpdmF0ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JbXV0ZXhfbG9jaygmbS0+d29ya19tdXRleCk7Ci0JbS0+c3VzcGVuZGVkID0gMDsKLQltdXRleF91bmxvY2soJm0tPndvcmtfbXV0ZXgpOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm0tPmxvY2ssIGZsYWdzKTsKIAltLT5xdWV1ZV9pZl9ub19wYXRoID0gbS0+c2F2ZWRfcXVldWVfaWZfbm9fcGF0aDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtLT5sb2NrLCBmbGFncyk7CkBAIC0xNDI4LDExICsxNDY3LDYgQEAKIAogCW11dGV4X2xvY2soJm0tPndvcmtfbXV0ZXgpOwogCi0JaWYgKG0tPnN1c3BlbmRlZCkgewotCQlyID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlpZiAoZG1fc3VzcGVuZGVkKHRpKSkgewogCQlyID0gLUVCVVNZOwogCQlnb3RvIG91dDsKQEAgLTE0NzEsOCArMTUwNSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXIgPSBkbV9nZXRfZGV2aWNlKHRpLCBhcmd2WzFdLCB0aS0+YmVnaW4sIHRpLT5sZW4sCi0JCQkgIGRtX3RhYmxlX2dldF9tb2RlKHRpLT50YWJsZSksICZkZXYpOworCXIgPSBkbV9nZXRfZGV2aWNlKHRpLCBhcmd2WzFdLCBkbV90YWJsZV9nZXRfbW9kZSh0aS0+dGFibGUpLCAmZGV2KTsKIAlpZiAocikgewogCQlETVdBUk4oIm1lc3NhZ2U6IGVycm9yIGdldHRpbmcgZGV2aWNlICVzIiwKIAkJICAgICAgIGFyZ3ZbMV0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1yYWlkMS5jIGIvZHJpdmVycy9tZC9kbS1yYWlkMS5jCmluZGV4IDZjMTA0NmQuLmRkZGE1MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tcmFpZDEuYworKysgYi9kcml2ZXJzL21kL2RtLXJhaWQxLmMKQEAgLTQ2NSw5ICs0NjUsMTcgQEAKIHN0YXRpYyB2b2lkIGhvbGRfYmlvKHN0cnVjdCBtaXJyb3Jfc2V0ICptcywgc3RydWN0IGJpbyAqYmlvKQogewogCS8qCi0JICogSWYgZGV2aWNlIGlzIHN1c3BlbmRlZCwgY29tcGxldGUgdGhlIGJpby4KKwkgKiBMb2NrIGlzIHJlcXVpcmVkIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uIGR1cmluZyBzdXNwZW5kCisJICogcHJvY2Vzcy4KIAkgKi8KKwlzcGluX2xvY2tfaXJxKCZtcy0+bG9jayk7CisKIAlpZiAoYXRvbWljX3JlYWQoJm1zLT5zdXNwZW5kKSkgeworCQlzcGluX3VubG9ja19pcnEoJm1zLT5sb2NrKTsKKworCQkvKgorCQkgKiBJZiBkZXZpY2UgaXMgc3VzcGVuZGVkLCBjb21wbGV0ZSB0aGUgYmlvLgorCQkgKi8KIAkJaWYgKGRtX25vZmx1c2hfc3VzcGVuZGluZyhtcy0+dGkpKQogCQkJYmlvX2VuZGlvKGJpbywgRE1fRU5ESU9fUkVRVUVVRSk7CiAJCWVsc2UKQEAgLTQ3OCw3ICs0ODYsNiBAQAogCS8qCiAJICogSG9sZCBiaW8gdW50aWwgdGhlIHN1c3BlbmQgaXMgY29tcGxldGUuCiAJICovCi0Jc3Bpbl9sb2NrX2lycSgmbXMtPmxvY2spOwogCWJpb19saXN0X2FkZCgmbXMtPmhvbGRzLCBiaW8pOwogCXNwaW5fdW5sb2NrX2lycSgmbXMtPmxvY2spOwogfQpAQCAtNzM3LDkgKzc0NCwxMiBAQAogCQlkbV9yaF9kZWxheShtcy0+cmgsIGJpbyk7CiAKIAl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCgmbm9zeW5jKSkpIHsKLQkJaWYgKHVubGlrZWx5KG1zLT5sZWdfZmFpbHVyZSkgJiYgZXJyb3JzX2hhbmRsZWQobXMpKQotCQkJaG9sZF9iaW8obXMsIGJpbyk7Ci0JCWVsc2UgeworCQlpZiAodW5saWtlbHkobXMtPmxlZ19mYWlsdXJlKSAmJiBlcnJvcnNfaGFuZGxlZChtcykpIHsKKwkJCXNwaW5fbG9ja19pcnEoJm1zLT5sb2NrKTsKKwkJCWJpb19saXN0X2FkZCgmbXMtPmZhaWx1cmVzLCBiaW8pOworCQkJc3Bpbl91bmxvY2tfaXJxKCZtcy0+bG9jayk7CisJCQl3YWtldXBfbWlycm9yZChtcyk7CisJCX0gZWxzZSB7CiAJCQltYXBfYmlvKGdldF9kZWZhdWx0X21pcnJvcihtcyksIGJpbyk7CiAJCQlnZW5lcmljX21ha2VfcmVxdWVzdChiaW8pOwogCQl9CkBAIC05MTcsOCArOTI3LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKGRtX2dldF9kZXZpY2UodGksIGFyZ3ZbMF0sIG9mZnNldCwgdGktPmxlbiwKLQkJCSAgZG1fdGFibGVfZ2V0X21vZGUodGktPnRhYmxlKSwKKwlpZiAoZG1fZ2V0X2RldmljZSh0aSwgYXJndlswXSwgZG1fdGFibGVfZ2V0X21vZGUodGktPnRhYmxlKSwKIAkJCSAgJm1zLT5taXJyb3JbbWlycm9yXS5kZXYpKSB7CiAJCXRpLT5lcnJvciA9ICJEZXZpY2UgbG9va3VwIGZhaWx1cmUiOwogCQlyZXR1cm4gLUVOWElPOwpAQCAtMTI1OSw2ICsxMjY4LDIwIEBACiAJYXRvbWljX3NldCgmbXMtPnN1c3BlbmQsIDEpOwogCiAJLyoKKwkgKiBQcm9jZXNzIGJpb3MgaW4gdGhlIGhvbGQgbGlzdCB0byBzdGFydCByZWNvdmVyeSB3YWl0aW5nCisJICogZm9yIGJpb3MgaW4gdGhlIGhvbGQgbGlzdC4gQWZ0ZXIgdGhlIHByb2Nlc3MsIG5vIGJpbyBoYXMKKwkgKiBhIGNoYW5jZSB0byBiZSBhZGRlZCBpbiB0aGUgaG9sZCBsaXN0IGJlY2F1c2UgbXMtPnN1c3BlbmQKKwkgKiBpcyBzZXQuCisJICovCisJc3Bpbl9sb2NrX2lycSgmbXMtPmxvY2spOworCWhvbGRzID0gbXMtPmhvbGRzOworCWJpb19saXN0X2luaXQoJm1zLT5ob2xkcyk7CisJc3Bpbl91bmxvY2tfaXJxKCZtcy0+bG9jayk7CisKKwl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCgmaG9sZHMpKSkKKwkJaG9sZF9iaW8obXMsIGJpbyk7CisKKwkvKgogCSAqIFdlIG11c3QgZmluaXNoIHVwIGFsbCB0aGUgd29yayB0aGF0IHdlJ3ZlCiAJICogZ2VuZXJhdGVkIChpLmUuIHJlY292ZXJ5IHdvcmspLgogCSAqLwpAQCAtMTI3OCwyMiArMTMwMSw2IEBACiAJICogd2Uga25vdyB0aGF0IGFsbCBvZiBvdXIgSS9PIGhhcyBiZWVuIHB1c2hlZC4KIAkgKi8KIAlmbHVzaF93b3JrcXVldWUobXMtPmttaXJyb3JkX3dxKTsKLQotCS8qCi0JICogTm93IHNldCBtcy0+c3VzcGVuZCBpcyBzZXQgYW5kIHRoZSB3b3JrcXVldWUgZmx1c2hlZCwgbm8gbW9yZQotCSAqIGVudHJpZXMgY2FuIGJlIGFkZGVkIHRvIG1zLT5ob2xkIGxpc3QsIHNvIHByb2Nlc3MgaXQuCi0JICoKLQkgKiBCaW9zIGNhbiBzdGlsbCBhcnJpdmUgY29uY3VycmVudGx5IHdpdGggb3IgYWZ0ZXIgdGhpcwotCSAqIHByZXN1c3BlbmQgZnVuY3Rpb24sIGJ1dCB0aGV5IGNhbm5vdCBqb2luIHRoZSBob2xkIGxpc3QKLQkgKiBiZWNhdXNlIG1zLT5zdXNwZW5kIGlzIHNldC4KLQkgKi8KLQlzcGluX2xvY2tfaXJxKCZtcy0+bG9jayk7Ci0JaG9sZHMgPSBtcy0+aG9sZHM7Ci0JYmlvX2xpc3RfaW5pdCgmbXMtPmhvbGRzKTsKLQlzcGluX3VubG9ja19pcnEoJm1zLT5sb2NrKTsKLQotCXdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKCZob2xkcykpKQotCQlob2xkX2JpbyhtcywgYmlvKTsKIH0KIAogc3RhdGljIHZvaWQgbWlycm9yX3Bvc3RzdXNwZW5kKHN0cnVjdCBkbV90YXJnZXQgKnRpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1zbmFwLmMgYi9kcml2ZXJzL21kL2RtLXNuYXAuYwppbmRleCBlZThlYjI4Li41NDg1Mzc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXNuYXAuYworKysgYi9kcml2ZXJzL21kL2RtLXNuYXAuYwpAQCAtODMsMTAgKzgzLDEwIEBACiAJLyogV2hldGhlciBvciBub3Qgb3duaW5nIG1hcHBlZF9kZXZpY2UgaXMgc3VzcGVuZGVkICovCiAJaW50IHN1c3BlbmRlZDsKIAotCW1lbXBvb2xfdCAqcGVuZGluZ19wb29sOwotCiAJYXRvbWljX3QgcGVuZGluZ19leGNlcHRpb25zX2NvdW50OwogCisJbWVtcG9vbF90ICpwZW5kaW5nX3Bvb2w7CisKIAlzdHJ1Y3QgZG1fZXhjZXB0aW9uX3RhYmxlIHBlbmRpbmc7CiAJc3RydWN0IGRtX2V4Y2VwdGlvbl90YWJsZSBjb21wbGV0ZTsKIApAQCAtOTYsNiArOTYsMTEgQEAKIAkgKi8KIAlzcGlubG9ja190IHBlX2xvY2s7CiAKKwkvKiBDaHVua3Mgd2l0aCBvdXRzdGFuZGluZyByZWFkcyAqLworCXNwaW5sb2NrX3QgdHJhY2tlZF9jaHVua19sb2NrOworCW1lbXBvb2xfdCAqdHJhY2tlZF9jaHVua19wb29sOworCXN0cnVjdCBobGlzdF9oZWFkIHRyYWNrZWRfY2h1bmtfaGFzaFtETV9UUkFDS0VEX0NIVU5LX0hBU0hfU0laRV07CisKIAkvKiBUaGUgb24gZGlzayBtZXRhZGF0YSBoYW5kbGVyICovCiAJc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmU7CiAKQEAgLTEwNSwxMCArMTEwLDEyIEBACiAJc3RydWN0IGJpb19saXN0IHF1ZXVlZF9iaW9zOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBxdWV1ZWRfYmlvc193b3JrOwogCi0JLyogQ2h1bmtzIHdpdGggb3V0c3RhbmRpbmcgcmVhZHMgKi8KLQltZW1wb29sX3QgKnRyYWNrZWRfY2h1bmtfcG9vbDsKLQlzcGlubG9ja190IHRyYWNrZWRfY2h1bmtfbG9jazsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCB0cmFja2VkX2NodW5rX2hhc2hbRE1fVFJBQ0tFRF9DSFVOS19IQVNIX1NJWkVdOworCS8qIFdhaXQgZm9yIGV2ZW50cyBiYXNlZCBvbiBzdGF0ZV9iaXRzICovCisJdW5zaWduZWQgbG9uZyBzdGF0ZV9iaXRzOworCisJLyogUmFuZ2Ugb2YgY2h1bmtzIGN1cnJlbnRseSBiZWluZyBtZXJnZWQuICovCisJY2h1bmtfdCBmaXJzdF9tZXJnaW5nX2NodW5rOworCWludCBudW1fbWVyZ2luZ19jaHVua3M7CiAKIAkvKgogCSAqIFRoZSBtZXJnZSBvcGVyYXRpb24gZmFpbGVkIGlmIHRoaXMgZmxhZyBpcyBzZXQuCkBAIC0xMjUsMTMgKzEzMiw2IEBACiAJICovCiAJaW50IG1lcmdlX2ZhaWxlZDsKIAotCS8qIFdhaXQgZm9yIGV2ZW50cyBiYXNlZCBvbiBzdGF0ZV9iaXRzICovCi0JdW5zaWduZWQgbG9uZyBzdGF0ZV9iaXRzOwotCi0JLyogUmFuZ2Ugb2YgY2h1bmtzIGN1cnJlbnRseSBiZWluZyBtZXJnZWQuICovCi0JY2h1bmtfdCBmaXJzdF9tZXJnaW5nX2NodW5rOwotCWludCBudW1fbWVyZ2luZ19jaHVua3M7Ci0KIAkvKgogCSAqIEluY29taW5nIGJpb3MgdGhhdCBvdmVybGFwIHdpdGggY2h1bmtzIGJlaW5nIG1lcmdlZCBtdXN0IHdhaXQKIAkgKiBmb3IgdGhlbSB0byBiZSBjb21taXR0ZWQuCkBAIC0xMDgxLDggKzEwODEsNyBAQAogCWFyZ3YrKzsKIAlhcmdjLS07CiAKLQlyID0gZG1fZ2V0X2RldmljZSh0aSwgY293X3BhdGgsIDAsIDAsCi0JCQkgIEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSwgJnMtPmNvdyk7CisJciA9IGRtX2dldF9kZXZpY2UodGksIGNvd19wYXRoLCBGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUsICZzLT5jb3cpOwogCWlmIChyKSB7CiAJCXRpLT5lcnJvciA9ICJDYW5ub3QgZ2V0IENPVyBkZXZpY2UiOwogCQlnb3RvIGJhZF9jb3c7CkBAIC0xMDk4LDcgKzEwOTcsNyBAQAogCWFyZ3YgKz0gYXJnc191c2VkOwogCWFyZ2MgLT0gYXJnc191c2VkOwogCi0JciA9IGRtX2dldF9kZXZpY2UodGksIG9yaWdpbl9wYXRoLCAwLCB0aS0+bGVuLCBvcmlnaW5fbW9kZSwgJnMtPm9yaWdpbik7CisJciA9IGRtX2dldF9kZXZpY2UodGksIG9yaWdpbl9wYXRoLCBvcmlnaW5fbW9kZSwgJnMtPm9yaWdpbik7CiAJaWYgKHIpIHsKIAkJdGktPmVycm9yID0gIkNhbm5vdCBnZXQgb3JpZ2luIGRldmljZSI7CiAJCWdvdG8gYmFkX29yaWdpbjsKQEAgLTIxMDAsOCArMjA5OSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXIgPSBkbV9nZXRfZGV2aWNlKHRpLCBhcmd2WzBdLCAwLCB0aS0+bGVuLAotCQkJICBkbV90YWJsZV9nZXRfbW9kZSh0aS0+dGFibGUpLCAmZGV2KTsKKwlyID0gZG1fZ2V0X2RldmljZSh0aSwgYXJndlswXSwgZG1fdGFibGVfZ2V0X21vZGUodGktPnRhYmxlKSwgJmRldik7CiAJaWYgKHIpIHsKIAkJdGktPmVycm9yID0gIkNhbm5vdCBnZXQgdGFyZ2V0IGRldmljZSI7CiAJCXJldHVybiByOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1zdHJpcGUuYyBiL2RyaXZlcnMvbWQvZG0tc3RyaXBlLmMKaW5kZXggYmQ1ODcwMy4uZTYxMDcyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1zdHJpcGUuYworKysgYi9kcml2ZXJzL21kL2RtLXN0cmlwZS5jCkBAIC04MCw4ICs4MCw3IEBACiAJaWYgKHNzY2FuZihhcmd2WzFdLCAiJWxsdSIsICZzdGFydCkgIT0gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoZG1fZ2V0X2RldmljZSh0aSwgYXJndlswXSwgc3RhcnQsIHNjLT5zdHJpcGVfd2lkdGgsCi0JCQkgIGRtX3RhYmxlX2dldF9tb2RlKHRpLT50YWJsZSksCisJaWYgKGRtX2dldF9kZXZpY2UodGksIGFyZ3ZbMF0sIGRtX3RhYmxlX2dldF9tb2RlKHRpLT50YWJsZSksCiAJCQkgICZzYy0+c3RyaXBlW3N0cmlwZV0uZGV2KSkKIAkJcmV0dXJuIC1FTlhJTzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS10YWJsZS5jIGIvZHJpdmVycy9tZC9kbS10YWJsZS5jCmluZGV4IDRiMjJmZWIuLjk5MjRlYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tdGFibGUuYworKysgYi9kcml2ZXJzL21kL2RtLXRhYmxlLmMKQEAgLTQyOSw4ICs0MjksNyBAQAogICogaXQncyBhbHJlYWR5IHByZXNlbnQuCiAgKi8KIHN0YXRpYyBpbnQgX190YWJsZV9nZXRfZGV2aWNlKHN0cnVjdCBkbV90YWJsZSAqdCwgc3RydWN0IGRtX3RhcmdldCAqdGksCi0JCQkgICAgICBjb25zdCBjaGFyICpwYXRoLCBzZWN0b3JfdCBzdGFydCwgc2VjdG9yX3QgbGVuLAotCQkJICAgICAgZm1vZGVfdCBtb2RlLCBzdHJ1Y3QgZG1fZGV2ICoqcmVzdWx0KQorCQkgICAgICBjb25zdCBjaGFyICpwYXRoLCBmbW9kZV90IG1vZGUsIHN0cnVjdCBkbV9kZXYgKipyZXN1bHQpCiB7CiAJaW50IHI7CiAJZGV2X3QgdW5pbml0aWFsaXplZF92YXIoZGV2KTsKQEAgLTUyNywxMSArNTI2LDEwIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkbV9zZXRfZGV2aWNlX2xpbWl0cyk7CiAKLWludCBkbV9nZXRfZGV2aWNlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBjb25zdCBjaGFyICpwYXRoLCBzZWN0b3JfdCBzdGFydCwKLQkJICBzZWN0b3JfdCBsZW4sIGZtb2RlX3QgbW9kZSwgc3RydWN0IGRtX2RldiAqKnJlc3VsdCkKK2ludCBkbV9nZXRfZGV2aWNlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBjb25zdCBjaGFyICpwYXRoLCBmbW9kZV90IG1vZGUsCisJCSAgc3RydWN0IGRtX2RldiAqKnJlc3VsdCkKIHsKLQlyZXR1cm4gX190YWJsZV9nZXRfZGV2aWNlKHRpLT50YWJsZSwgdGksIHBhdGgsCi0JCQkJICBzdGFydCwgbGVuLCBtb2RlLCByZXN1bHQpOworCXJldHVybiBfX3RhYmxlX2dldF9kZXZpY2UodGktPnRhYmxlLCB0aSwgcGF0aCwgbW9kZSwgcmVzdWx0KTsKIH0KIAogCkBAIC0xMjMxLDggKzEyMjksNiBAQAogCiBzdHJ1Y3QgbWFwcGVkX2RldmljZSAqZG1fdGFibGVfZ2V0X21kKHN0cnVjdCBkbV90YWJsZSAqdCkKIHsKLQlkbV9nZXQodC0+bWQpOwotCiAJcmV0dXJuIHQtPm1kOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXVldmVudC5jIGIvZHJpdmVycy9tZC9kbS11ZXZlbnQuYwppbmRleCBjN2M1NTVhLi42YjFlM2I2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXVldmVudC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tdWV2ZW50LmMKQEAgLTE4Nyw3ICsxODcsNyBAQAogCiAJaWYgKGV2ZW50X3R5cGUgPj0gQVJSQVlfU0laRShfZG1fdWV2ZW50X3R5cGVfbmFtZXMpKSB7CiAJCURNRVJSKCIlczogSW52YWxpZCBldmVudF90eXBlICVkIiwgX19mdW5jX18sIGV2ZW50X3R5cGUpOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuOwogCX0KIAogCWV2ZW50ID0gZG1fYnVpbGRfcGF0aF91ZXZlbnQobWQsIHRpLApAQCAtMTk1LDEyICsxOTUsOSBAQAogCQkJCSAgICAgX2RtX3VldmVudF90eXBlX25hbWVzW2V2ZW50X3R5cGVdLm5hbWUsCiAJCQkJICAgICBwYXRoLCBucl92YWxpZF9wYXRocyk7CiAJaWYgKElTX0VSUihldmVudCkpCi0JCWdvdG8gb3V0OworCQlyZXR1cm47CiAKIAlkbV91ZXZlbnRfYWRkKG1kLCAmZXZlbnQtPmVsaXN0KTsKLQotb3V0OgotCWRtX3B1dChtZCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkbV9wYXRoX3VldmVudCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0uYyBiL2RyaXZlcnMvbWQvZG0uYwppbmRleCBhYTRlMmFhLi5kMjFlMTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLmMKKysrIGIvZHJpdmVycy9tZC9kbS5jCkBAIC02MzUsOCArNjM1LDEwIEBACiAJCQlpZiAoIW1kLT5iYXJyaWVyX2Vycm9yICYmIGlvX2Vycm9yICE9IC1FT1BOT1RTVVBQKQogCQkJCW1kLT5iYXJyaWVyX2Vycm9yID0gaW9fZXJyb3I7CiAJCQllbmRfaW9fYWNjdChpbyk7CisJCQlmcmVlX2lvKG1kLCBpbyk7CiAJCX0gZWxzZSB7CiAJCQllbmRfaW9fYWNjdChpbyk7CisJCQlmcmVlX2lvKG1kLCBpbyk7CiAKIAkJCWlmIChpb19lcnJvciAhPSBETV9FTkRJT19SRVFVRVVFKSB7CiAJCQkJdHJhY2VfYmxvY2tfYmlvX2NvbXBsZXRlKG1kLT5xdWV1ZSwgYmlvKTsKQEAgLTY0NCw4ICs2NDYsNiBAQAogCQkJCWJpb19lbmRpbyhiaW8sIGlvX2Vycm9yKTsKIAkJCX0KIAkJfQotCi0JCWZyZWVfaW8obWQsIGlvKTsKIAl9CiB9CiAKQEAgLTI2MTgsMTggKzI2MTgsMTkgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEV2ZW50IG5vdGlmaWNhdGlvbi4KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXZvaWQgZG1fa29iamVjdF91ZXZlbnQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLCBlbnVtIGtvYmplY3RfYWN0aW9uIGFjdGlvbiwKK2ludCBkbV9rb2JqZWN0X3VldmVudChzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQsIGVudW0ga29iamVjdF9hY3Rpb24gYWN0aW9uLAogCQkgICAgICAgdW5zaWduZWQgY29va2llKQogewogCWNoYXIgdWRldl9jb29raWVbRE1fQ09PS0lFX0xFTkdUSF07CiAJY2hhciAqZW52cFtdID0geyB1ZGV2X2Nvb2tpZSwgTlVMTCB9OwogCiAJaWYgKCFjb29raWUpCi0JCWtvYmplY3RfdWV2ZW50KCZkaXNrX3RvX2RldihtZC0+ZGlzayktPmtvYmosIGFjdGlvbik7CisJCXJldHVybiBrb2JqZWN0X3VldmVudCgmZGlza190b19kZXYobWQtPmRpc2spLT5rb2JqLCBhY3Rpb24pOwogCWVsc2UgewogCQlzbnByaW50Zih1ZGV2X2Nvb2tpZSwgRE1fQ09PS0lFX0xFTkdUSCwgIiVzPSV1IiwKIAkJCSBETV9DT09LSUVfRU5WX1ZBUl9OQU1FLCBjb29raWUpOwotCQlrb2JqZWN0X3VldmVudF9lbnYoJmRpc2tfdG9fZGV2KG1kLT5kaXNrKS0+a29iaiwgYWN0aW9uLCBlbnZwKTsKKwkJcmV0dXJuIGtvYmplY3RfdWV2ZW50X2VudigmZGlza190b19kZXYobWQtPmRpc2spLT5rb2JqLAorCQkJCQkgIGFjdGlvbiwgZW52cCk7CiAJfQogfQogCkBAIC0yNjk5LDIzICsyNzAwLDEzIEBACiAKIGludCBkbV9zdXNwZW5kZWQoc3RydWN0IGRtX3RhcmdldCAqdGkpCiB7Ci0Jc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kID0gZG1fdGFibGVfZ2V0X21kKHRpLT50YWJsZSk7Ci0JaW50IHIgPSBkbV9zdXNwZW5kZWRfbWQobWQpOwotCi0JZG1fcHV0KG1kKTsKLQotCXJldHVybiByOworCXJldHVybiBkbV9zdXNwZW5kZWRfbWQoZG1fdGFibGVfZ2V0X21kKHRpLT50YWJsZSkpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZG1fc3VzcGVuZGVkKTsKIAogaW50IGRtX25vZmx1c2hfc3VzcGVuZGluZyhzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSkKIHsKLQlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQgPSBkbV90YWJsZV9nZXRfbWQodGktPnRhYmxlKTsKLQlpbnQgciA9IF9fbm9mbHVzaF9zdXNwZW5kaW5nKG1kKTsKLQotCWRtX3B1dChtZCk7Ci0KLQlyZXR1cm4gcjsKKwlyZXR1cm4gX19ub2ZsdXNoX3N1c3BlbmRpbmcoZG1fdGFibGVfZ2V0X21kKHRpLT50YWJsZSkpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZG1fbm9mbHVzaF9zdXNwZW5kaW5nKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS5oIGIvZHJpdmVycy9tZC9kbS5oCmluZGV4IDhkYWRhYTUuLmJhZDE3MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0uaAorKysgYi9kcml2ZXJzL21kL2RtLmgKQEAgLTEyNSw4ICsxMjUsOCBAQAogaW50IGRtX29wZW5fY291bnQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKTsKIGludCBkbV9sb2NrX2Zvcl9kZWxldGlvbihzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpOwogCi12b2lkIGRtX2tvYmplY3RfdWV2ZW50KHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgZW51bSBrb2JqZWN0X2FjdGlvbiBhY3Rpb24sCi0JCSAgICAgICB1bnNpZ25lZCBjb29raWUpOworaW50IGRtX2tvYmplY3RfdWV2ZW50KHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgZW51bSBrb2JqZWN0X2FjdGlvbiBhY3Rpb24sCisJCSAgICAgIHVuc2lnbmVkIGNvb2tpZSk7CiAKIGludCBkbV9pb19pbml0KHZvaWQpOwogdm9pZCBkbV9pb19leGl0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvODhwbTg2MDcuYyBiL2RyaXZlcnMvbWZkLzg4cG04NjA3LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlM2Y2NTkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZmQvODhwbTg2MDcuYworKysgL2Rldi9udWxsCkBAIC0xLDMwMiArMCwwIEBACi0vKgotICogQmFzZSBkcml2ZXIgZm9yIE1hcnZlbGwgODhQTTg2MDcKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KLSAqIAlIYW9qaWFuIFpodWFuZyA8aGFvamlhbi56aHVhbmdAbWFydmVsbC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9tZmQvODhwbTg2MDcuaD4KLQotCi0jZGVmaW5lIFBNODYwN19SRUdfUkVTT1VSQ0UoX3N0YXJ0LCBfZW5kKQkJXAotewkJCQkJCQlcCi0JLnN0YXJ0CT0gUE04NjA3XyMjX3N0YXJ0LAkJCVwKLQkuZW5kCT0gUE04NjA3XyMjX2VuZCwJCQlcCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywJCQlcCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcG04NjA3X3JlZ3VsYXRvcl9yZXNvdXJjZXNbXSA9IHsKLQlQTTg2MDdfUkVHX1JFU09VUkNFKEJVQ0sxLCBCVUNLMSksCi0JUE04NjA3X1JFR19SRVNPVVJDRShCVUNLMiwgQlVDSzIpLAotCVBNODYwN19SRUdfUkVTT1VSQ0UoQlVDSzMsIEJVQ0szKSwKLQlQTTg2MDdfUkVHX1JFU09VUkNFKExETzEsICBMRE8xKSwKLQlQTTg2MDdfUkVHX1JFU09VUkNFKExETzIsICBMRE8yKSwKLQlQTTg2MDdfUkVHX1JFU09VUkNFKExETzMsICBMRE8zKSwKLQlQTTg2MDdfUkVHX1JFU09VUkNFKExETzQsICBMRE80KSwKLQlQTTg2MDdfUkVHX1JFU09VUkNFKExETzUsICBMRE81KSwKLQlQTTg2MDdfUkVHX1JFU09VUkNFKExETzYsICBMRE82KSwKLQlQTTg2MDdfUkVHX1JFU09VUkNFKExETzcsICBMRE83KSwKLQlQTTg2MDdfUkVHX1JFU09VUkNFKExETzgsICBMRE84KSwKLQlQTTg2MDdfUkVHX1JFU09VUkNFKExETzksICBMRE85KSwKLQlQTTg2MDdfUkVHX1JFU09VUkNFKExETzEwLCBMRE8xMCksCi0JUE04NjA3X1JFR19SRVNPVVJDRShMRE8xMiwgTERPMTIpLAotCVBNODYwN19SRUdfUkVTT1VSQ0UoTERPMTQsIExETzE0KSwKLX07Ci0KLSNkZWZpbmUgUE04NjA3X1JFR19ERVZTKF9uYW1lLCBfaWQpCQkJCQlcCi17CQkJCQkJCQkJXAotCS5uYW1lCQk9ICI4OHBtODYwNy0iICNfbmFtZSwJCQkJXAotCS5udW1fcmVzb3VyY2VzCT0gMSwJCQkJCQlcCi0JLnJlc291cmNlcwk9ICZwbTg2MDdfcmVndWxhdG9yX3Jlc291cmNlc1tQTTg2MDdfSURfIyNfaWRdLAlcCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWZkX2NlbGwgcG04NjA3X2RldnNbXSA9IHsKLQlQTTg2MDdfUkVHX0RFVlMoYnVjazEsIEJVQ0sxKSwKLQlQTTg2MDdfUkVHX0RFVlMoYnVjazIsIEJVQ0syKSwKLQlQTTg2MDdfUkVHX0RFVlMoYnVjazMsIEJVQ0szKSwKLQlQTTg2MDdfUkVHX0RFVlMobGRvMSwgIExETzEpLAotCVBNODYwN19SRUdfREVWUyhsZG8yLCAgTERPMiksCi0JUE04NjA3X1JFR19ERVZTKGxkbzMsICBMRE8zKSwKLQlQTTg2MDdfUkVHX0RFVlMobGRvNCwgIExETzQpLAotCVBNODYwN19SRUdfREVWUyhsZG81LCAgTERPNSksCi0JUE04NjA3X1JFR19ERVZTKGxkbzYsICBMRE82KSwKLQlQTTg2MDdfUkVHX0RFVlMobGRvNywgIExETzcpLAotCVBNODYwN19SRUdfREVWUyhsZG84LCAgTERPOCksCi0JUE04NjA3X1JFR19ERVZTKGxkbzksICBMRE85KSwKLQlQTTg2MDdfUkVHX0RFVlMobGRvMTAsIExETzEwKSwKLQlQTTg2MDdfUkVHX0RFVlMobGRvMTIsIExETzEyKSwKLQlQTTg2MDdfUkVHX0RFVlMobGRvMTQsIExETzE0KSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHBtODYwN19yZWFkX2RldmljZShzdHJ1Y3QgcG04NjA3X2NoaXAgKmNoaXAsCi0JCQkJICAgICBpbnQgcmVnLCBpbnQgYnl0ZXMsIHZvaWQgKmRlc3QpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IGNoaXAtPmNsaWVudDsKLQl1bnNpZ25lZCBjaGFyIGRhdGE7Ci0JaW50IHJldDsKLQotCWRhdGEgPSAodW5zaWduZWQgY2hhcilyZWc7Ci0JcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGkyYywgJmRhdGEsIDEpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gaTJjX21hc3Rlcl9yZWN2KGkyYywgZGVzdCwgYnl0ZXMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBwbTg2MDdfd3JpdGVfZGV2aWNlKHN0cnVjdCBwbTg2MDdfY2hpcCAqY2hpcCwKLQkJCQkgICAgICBpbnQgcmVnLCBpbnQgYnl0ZXMsIHZvaWQgKnNyYykKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gY2hpcC0+Y2xpZW50OwotCXVuc2lnbmVkIGNoYXIgYnVmW2J5dGVzICsgMV07Ci0JaW50IHJldDsKLQotCWJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKXJlZzsKLQltZW1jcHkoJmJ1ZlsxXSwgc3JjLCBieXRlcyk7Ci0KLQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoaTJjLCBidWYsIGJ5dGVzICsgMSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBwbTg2MDdfcmVnX3JlYWQoc3RydWN0IHBtODYwN19jaGlwICpjaGlwLCBpbnQgcmVnKQotewotCXVuc2lnbmVkIGNoYXIgZGF0YTsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmY2hpcC0+aW9fbG9jayk7Ci0JcmV0ID0gY2hpcC0+cmVhZChjaGlwLCByZWcsIDEsICZkYXRhKTsKLQltdXRleF91bmxvY2soJmNoaXAtPmlvX2xvY2spOwotCi0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0JZWxzZQotCQlyZXR1cm4gKGludClkYXRhOwotfQotRVhQT1JUX1NZTUJPTChwbTg2MDdfcmVnX3JlYWQpOwotCi1pbnQgcG04NjA3X3JlZ193cml0ZShzdHJ1Y3QgcG04NjA3X2NoaXAgKmNoaXAsIGludCByZWcsCi0JCSAgICAgdW5zaWduZWQgY2hhciBkYXRhKQotewotCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZjaGlwLT5pb19sb2NrKTsKLQlyZXQgPSBjaGlwLT53cml0ZShjaGlwLCByZWcsIDEsICZkYXRhKTsKLQltdXRleF91bmxvY2soJmNoaXAtPmlvX2xvY2spOwotCi0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0wocG04NjA3X3JlZ193cml0ZSk7Ci0KLWludCBwbTg2MDdfYnVsa19yZWFkKHN0cnVjdCBwbTg2MDdfY2hpcCAqY2hpcCwgaW50IHJlZywKLQkJICAgICBpbnQgY291bnQsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKLXsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmY2hpcC0+aW9fbG9jayk7Ci0JcmV0ID0gY2hpcC0+cmVhZChjaGlwLCByZWcsIGNvdW50LCBidWYpOwotCW11dGV4X3VubG9jaygmY2hpcC0+aW9fbG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChwbTg2MDdfYnVsa19yZWFkKTsKLQotaW50IHBtODYwN19idWxrX3dyaXRlKHN0cnVjdCBwbTg2MDdfY2hpcCAqY2hpcCwgaW50IHJlZywKLQkJICAgICAgaW50IGNvdW50LCB1bnNpZ25lZCBjaGFyICpidWYpCi17Ci0JaW50IHJldDsKLQotCW11dGV4X2xvY2soJmNoaXAtPmlvX2xvY2spOwotCXJldCA9IGNoaXAtPndyaXRlKGNoaXAsIHJlZywgY291bnQsIGJ1Zik7Ci0JbXV0ZXhfdW5sb2NrKCZjaGlwLT5pb19sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKHBtODYwN19idWxrX3dyaXRlKTsKLQotaW50IHBtODYwN19zZXRfYml0cyhzdHJ1Y3QgcG04NjA3X2NoaXAgKmNoaXAsIGludCByZWcsCi0JCSAgICB1bnNpZ25lZCBjaGFyIG1hc2ssIHVuc2lnbmVkIGNoYXIgZGF0YSkKLXsKLQl1bnNpZ25lZCBjaGFyIHZhbHVlOwotCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZjaGlwLT5pb19sb2NrKTsKLQlyZXQgPSBjaGlwLT5yZWFkKGNoaXAsIHJlZywgMSwgJnZhbHVlKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0JdmFsdWUgJj0gfm1hc2s7Ci0JdmFsdWUgfD0gZGF0YTsKLQlyZXQgPSBjaGlwLT53cml0ZShjaGlwLCByZWcsIDEsICZ2YWx1ZSk7Ci1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZjaGlwLT5pb19sb2NrKTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChwbTg2MDdfc2V0X2JpdHMpOwotCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBwbTg2MDdfaWRfdGFibGVbXSA9IHsKLQl7ICI4OFBNODYwNyIsIDAgfSwKLQl7fQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBwbTg2MDdfaWRfdGFibGUpOwotCi0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHBtODYwN19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJCSAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCBwbTg2MDdfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXN0cnVjdCBwbTg2MDdfY2hpcCAqY2hpcDsKLQlpbnQgaSwgY291bnQ7Ci0JaW50IHJldDsKLQotCWNoaXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG04NjA3X2NoaXApLCBHRlBfS0VSTkVMKTsKLQlpZiAoY2hpcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWNoaXAtPmNsaWVudCA9IGNsaWVudDsKLQljaGlwLT5kZXYgPSAmY2xpZW50LT5kZXY7Ci0JY2hpcC0+cmVhZCA9IHBtODYwN19yZWFkX2RldmljZTsKLQljaGlwLT53cml0ZSA9IHBtODYwN193cml0ZV9kZXZpY2U7Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgY2hpcCk7Ci0KLQltdXRleF9pbml0KCZjaGlwLT5pb19sb2NrKTsKLQlkZXZfc2V0X2RydmRhdGEoY2hpcC0+ZGV2LCBjaGlwKTsKLQotCXJldCA9IHBtODYwN19yZWdfcmVhZChjaGlwLCBQTTg2MDdfQ0hJUF9JRCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBDSElQIElEOiAlZFxuIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCWlmICgocmV0ICYgQ0hJUF9JRF9NQVNLKSA9PSBDSElQX0lEKQotCQlkZXZfaW5mbyhjaGlwLT5kZXYsICJNYXJ2ZWxsIDg4UE04NjA3IChJRDogJTAyeCkgZGV0ZWN0ZWRcbiIsCi0JCQkgcmV0KTsKLQllbHNlIHsKLQkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gZGV0ZWN0IE1hcnZlbGwgODhQTTg2MDcuICIKLQkJCSJDaGlwIElEOiAlMDJ4XG4iLCByZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0JY2hpcC0+Y2hpcF9pZCA9IHJldDsKLQotCXJldCA9IHBtODYwN19yZWdfcmVhZChjaGlwLCBQTTg2MDdfQlVDSzMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoY2hpcC0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgQlVDSzMgcmVnaXN0ZXI6ICVkXG4iLCByZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKHJldCAmIFBNODYwN19CVUNLM19ET1VCTEUpCi0JCWNoaXAtPmJ1Y2szX2RvdWJsZSA9IDE7Ci0KLQlyZXQgPSBwbTg2MDdfcmVnX3JlYWQoY2hpcCwgUE04NjA3X01JU0MxKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGNoaXAtPmRldiwgIkZhaWxlZCB0byByZWFkIE1JU0MxIHJlZ2lzdGVyOiAlZFxuIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCWlmIChwZGF0YS0+aTJjX3BvcnQgPT0gUEkyQ19QT1JUKQotCQlyZXQgfD0gUE04NjA3X01JU0MxX1BJMkM7Ci0JZWxzZQotCQlyZXQgJj0gflBNODYwN19NSVNDMV9QSTJDOwotCXJldCA9IHBtODYwN19yZWdfd3JpdGUoY2hpcCwgUE04NjA3X01JU0MxLCByZXQpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoY2hpcC0+ZGV2LCAiRmFpbGVkIHRvIHdyaXRlIE1JU0MxIHJlZ2lzdGVyOiAlZFxuIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0KLQljb3VudCA9IEFSUkFZX1NJWkUocG04NjA3X2RldnMpOwotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCXJldCA9IG1mZF9hZGRfZGV2aWNlcyhjaGlwLT5kZXYsIGksICZwbTg2MDdfZGV2c1tpXSwKLQkJCQkgICAgICAxLCBOVUxMLCAwKTsKLQkJaWYgKHJldCAhPSAwKSB7Ci0JCQlkZXZfZXJyKGNoaXAtPmRldiwgIkZhaWxlZCB0byBhZGQgc3ViZGV2c1xuIik7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCXJldHVybiAwOwotCi1vdXQ6Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7Ci0Ja2ZyZWUoY2hpcCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBfX2RldmV4aXQgcG04NjA3X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBwbTg2MDdfY2hpcCAqY2hpcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JbWZkX3JlbW92ZV9kZXZpY2VzKGNoaXAtPmRldik7Ci0Ja2ZyZWUoY2hpcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBwbTg2MDdfZHJpdmVyID0gewotCS5kcml2ZXIJPSB7Ci0JCS5uYW1lCT0gIjg4UE04NjA3IiwKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JfSwKLQkucHJvYmUJCT0gcG04NjA3X3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocG04NjA3X3JlbW92ZSksCi0JLmlkX3RhYmxlCT0gcG04NjA3X2lkX3RhYmxlLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgcG04NjA3X2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCXJldCA9IGkyY19hZGRfZHJpdmVyKCZwbTg2MDdfZHJpdmVyKTsKLQlpZiAocmV0ICE9IDApCi0JCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyIDg4UE04NjA3IEkyQyBkcml2ZXI6ICVkXG4iLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci1zdWJzeXNfaW5pdGNhbGwocG04NjA3X2luaXQpOwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgcG04NjA3X2V4aXQodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmcG04NjA3X2RyaXZlcik7Ci19Ci1tb2R1bGVfZXhpdChwbTg2MDdfZXhpdCk7Ci0KLU1PRFVMRV9ERVNDUklQVElPTigiUE1JQyBEcml2ZXIgZm9yIE1hcnZlbGwgODhQTTg2MDciKTsKLU1PRFVMRV9BVVRIT1IoIkhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0BtYXJ2ZWxsLmNvbT4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkLzg4cG04NjB4LWNvcmUuYyBiL2RyaXZlcnMvbWZkLzg4cG04NjB4LWNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTE0ZDJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZmQvODhwbTg2MHgtY29yZS5jCkBAIC0wLDAgKzEsNzQwIEBACisvKgorICogQmFzZSBkcml2ZXIgZm9yIE1hcnZlbGwgODhQTTg2MDcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqIAlIYW9qaWFuIFpodWFuZyA8aGFvamlhbi56aHVhbmdAbWFydmVsbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvODhwbTg2MHguaD4KKworI2RlZmluZSBJTlRfU1RBVFVTX05VTQkJCTMKKworY2hhciBwbTg2MHhfYmFja2xpZ2h0X25hbWVbXVtNRkRfTkFNRV9TSVpFXSA9IHsKKwkiYmFja2xpZ2h0LTAiLAorCSJiYWNrbGlnaHQtMSIsCisJImJhY2tsaWdodC0yIiwKK307CitFWFBPUlRfU1lNQk9MKHBtODYweF9iYWNrbGlnaHRfbmFtZSk7CisKK2NoYXIgcG04NjB4X2xlZF9uYW1lW11bTUZEX05BTUVfU0laRV0gPSB7CisJImxlZDAtcmVkIiwKKwkibGVkMC1ncmVlbiIsCisJImxlZDAtYmx1ZSIsCisJImxlZDEtcmVkIiwKKwkibGVkMS1ncmVlbiIsCisJImxlZDEtYmx1ZSIsCit9OworRVhQT1JUX1NZTUJPTChwbTg2MHhfbGVkX25hbWUpOworCisjZGVmaW5lIFBNODYwNl9CQUNLTElHSFRfUkVTT1VSQ0UoX2ksIF94KQkJXAorewkJCQkJCQlcCisJLm5hbWUJPSBwbTg2MHhfYmFja2xpZ2h0X25hbWVbX2ldLAkJXAorCS5zdGFydAk9IFBNODYwNl8jI194LAkJCQlcCisJLmVuZAk9IFBNODYwNl8jI194LAkJCQlcCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywJCQlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmFja2xpZ2h0X3Jlc291cmNlc1tdID0geworCVBNODYwNl9CQUNLTElHSFRfUkVTT1VSQ0UoUE04NjA2X0JBQ0tMSUdIVDEsIFdMRUQxQSksCisJUE04NjA2X0JBQ0tMSUdIVF9SRVNPVVJDRShQTTg2MDZfQkFDS0xJR0hUMiwgV0xFRDJBKSwKKwlQTTg2MDZfQkFDS0xJR0hUX1JFU09VUkNFKFBNODYwNl9CQUNLTElHSFQzLCBXTEVEM0EpLAorfTsKKworI2RlZmluZSBQTTg2MDZfQkFDS0xJR0hUX0RFVlMoX2kpCQkJXAorewkJCQkJCQlcCisJLm5hbWUJCT0gIjg4cG04NjB4LWJhY2tsaWdodCIsCQlcCisJLm51bV9yZXNvdXJjZXMJPSAxLAkJCQlcCisJLnJlc291cmNlcwk9ICZiYWNrbGlnaHRfcmVzb3VyY2VzW19pXSwJXAorCS5pZAkJPSBfaSwJCQkJXAorfQorCitzdGF0aWMgc3RydWN0IG1mZF9jZWxsIGJhY2tsaWdodF9kZXZzW10gPSB7CisJUE04NjA2X0JBQ0tMSUdIVF9ERVZTKFBNODYwNl9CQUNLTElHSFQxKSwKKwlQTTg2MDZfQkFDS0xJR0hUX0RFVlMoUE04NjA2X0JBQ0tMSUdIVDIpLAorCVBNODYwNl9CQUNLTElHSFRfREVWUyhQTTg2MDZfQkFDS0xJR0hUMyksCit9OworCisjZGVmaW5lIFBNODYwNl9MRURfUkVTT1VSQ0UoX2ksIF94KQkJCVwKK3sJCQkJCQkJXAorCS5uYW1lCT0gcG04NjB4X2xlZF9uYW1lW19pXSwJCQlcCisJLnN0YXJ0CT0gUE04NjA2XyMjX3gsCQkJCVwKKwkuZW5kCT0gUE04NjA2XyMjX3gsCQkJCVwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAkJCVwKK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsZWRfcmVzb3VyY2VzW10gPSB7CisJUE04NjA2X0xFRF9SRVNPVVJDRShQTTg2MDZfTEVEMV9SRUQsIFJHQjJCKSwKKwlQTTg2MDZfTEVEX1JFU09VUkNFKFBNODYwNl9MRUQxX0dSRUVOLCBSR0IyQyksCisJUE04NjA2X0xFRF9SRVNPVVJDRShQTTg2MDZfTEVEMV9CTFVFLCBSR0IyRCksCisJUE04NjA2X0xFRF9SRVNPVVJDRShQTTg2MDZfTEVEMl9SRUQsIFJHQjFCKSwKKwlQTTg2MDZfTEVEX1JFU09VUkNFKFBNODYwNl9MRUQyX0dSRUVOLCBSR0IxQyksCisJUE04NjA2X0xFRF9SRVNPVVJDRShQTTg2MDZfTEVEMl9CTFVFLCBSR0IxRCksCit9OworCisjZGVmaW5lIFBNODYwNl9MRURfREVWUyhfaSkJCQkJXAorewkJCQkJCQlcCisJLm5hbWUJCT0gIjg4cG04NjB4LWxlZCIsCQlcCisJLm51bV9yZXNvdXJjZXMJPSAxLAkJCQlcCisJLnJlc291cmNlcwk9ICZsZWRfcmVzb3VyY2VzW19pXSwJCVwKKwkuaWQJCT0gX2ksCQkJCVwKK30KKworc3RhdGljIHN0cnVjdCBtZmRfY2VsbCBsZWRfZGV2c1tdID0geworCVBNODYwNl9MRURfREVWUyhQTTg2MDZfTEVEMV9SRUQpLAorCVBNODYwNl9MRURfREVWUyhQTTg2MDZfTEVEMV9HUkVFTiksCisJUE04NjA2X0xFRF9ERVZTKFBNODYwNl9MRUQxX0JMVUUpLAorCVBNODYwNl9MRURfREVWUyhQTTg2MDZfTEVEMl9SRUQpLAorCVBNODYwNl9MRURfREVWUyhQTTg2MDZfTEVEMl9HUkVFTiksCisJUE04NjA2X0xFRF9ERVZTKFBNODYwNl9MRUQyX0JMVUUpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0b3VjaF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IFBNODYwN19JUlFfUEVOLAorCQkuZW5kCT0gUE04NjA3X0lSUV9QRU4sCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG1mZF9jZWxsIHRvdWNoX2RldnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICI4OHBtODYweC10b3VjaCIsCisJCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkJLnJlc291cmNlcwk9ICZ0b3VjaF9yZXNvdXJjZXNbMF0sCisJfSwKK307CisKKyNkZWZpbmUgUE04NjA3X1JFR19SRVNPVVJDRShfc3RhcnQsIF9lbmQpCQlcCit7CQkJCQkJCVwKKwkuc3RhcnQJPSBQTTg2MDdfIyNfc3RhcnQsCQkJXAorCS5lbmQJPSBQTTg2MDdfIyNfZW5kLAkJCVwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAkJCVwKK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwb3dlcl9zdXBwbHlfcmVzb3VyY2VzW10gPSB7CisJeworCQkubmFtZQkJPSAiODhwbTg2MHgtcG93ZXIiLAorCQkuc3RhcnQJCT0gUE04NjA3X0lSUV9DSEcsCisJCS5lbmQJCT0gUE04NjA3X0lSUV9DSEcsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtZmRfY2VsbCBwb3dlcl9kZXZzW10gPSB7CisJeworCQkubmFtZQkJPSAiODhwbTg2MHgtcG93ZXIiLAorCQkubnVtX3Jlc291cmNlcwk9IDEsCisJCS5yZXNvdXJjZXMJPSAmcG93ZXJfc3VwcGx5X3Jlc291cmNlc1swXSwKKwkJLmlkCQk9IC0xLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG9ua2V5X3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUJCT0gIjg4cG04NjB4LW9ua2V5IiwKKwkJLnN0YXJ0CQk9IFBNODYwN19JUlFfT05LRVksCisJCS5lbmQJCT0gUE04NjA3X0lSUV9PTktFWSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG1mZF9jZWxsIG9ua2V5X2RldnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICI4OHBtODYweC1vbmtleSIsCisJCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkJLnJlc291cmNlcwk9ICZvbmtleV9yZXNvdXJjZXNbMF0sCisJCS5pZAkJPSAtMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZWd1bGF0b3JfcmVzb3VyY2VzW10gPSB7CisJUE04NjA3X1JFR19SRVNPVVJDRShCVUNLMSwgQlVDSzEpLAorCVBNODYwN19SRUdfUkVTT1VSQ0UoQlVDSzIsIEJVQ0syKSwKKwlQTTg2MDdfUkVHX1JFU09VUkNFKEJVQ0szLCBCVUNLMyksCisJUE04NjA3X1JFR19SRVNPVVJDRShMRE8xLCAgTERPMSksCisJUE04NjA3X1JFR19SRVNPVVJDRShMRE8yLCAgTERPMiksCisJUE04NjA3X1JFR19SRVNPVVJDRShMRE8zLCAgTERPMyksCisJUE04NjA3X1JFR19SRVNPVVJDRShMRE80LCAgTERPNCksCisJUE04NjA3X1JFR19SRVNPVVJDRShMRE81LCAgTERPNSksCisJUE04NjA3X1JFR19SRVNPVVJDRShMRE82LCAgTERPNiksCisJUE04NjA3X1JFR19SRVNPVVJDRShMRE83LCAgTERPNyksCisJUE04NjA3X1JFR19SRVNPVVJDRShMRE84LCAgTERPOCksCisJUE04NjA3X1JFR19SRVNPVVJDRShMRE85LCAgTERPOSksCisJUE04NjA3X1JFR19SRVNPVVJDRShMRE8xMCwgTERPMTApLAorCVBNODYwN19SRUdfUkVTT1VSQ0UoTERPMTIsIExETzEyKSwKKwlQTTg2MDdfUkVHX1JFU09VUkNFKExETzE0LCBMRE8xNCksCit9OworCisjZGVmaW5lIFBNODYwN19SRUdfREVWUyhfbmFtZSwgX2lkKQkJCQkJXAorewkJCQkJCQkJCVwKKwkubmFtZQkJPSAiODhwbTg2MDctIiAjX25hbWUsCQkJCVwKKwkubnVtX3Jlc291cmNlcwk9IDEsCQkJCQkJXAorCS5yZXNvdXJjZXMJPSAmcmVndWxhdG9yX3Jlc291cmNlc1tQTTg2MDdfSURfIyNfaWRdLAlcCisJLmlkCQk9IFBNODYwN19JRF8jI19pZCwJCQkJXAorfQorCitzdGF0aWMgc3RydWN0IG1mZF9jZWxsIHJlZ3VsYXRvcl9kZXZzW10gPSB7CisJUE04NjA3X1JFR19ERVZTKGJ1Y2sxLCBCVUNLMSksCisJUE04NjA3X1JFR19ERVZTKGJ1Y2syLCBCVUNLMiksCisJUE04NjA3X1JFR19ERVZTKGJ1Y2szLCBCVUNLMyksCisJUE04NjA3X1JFR19ERVZTKGxkbzEsICBMRE8xKSwKKwlQTTg2MDdfUkVHX0RFVlMobGRvMiwgIExETzIpLAorCVBNODYwN19SRUdfREVWUyhsZG8zLCAgTERPMyksCisJUE04NjA3X1JFR19ERVZTKGxkbzQsICBMRE80KSwKKwlQTTg2MDdfUkVHX0RFVlMobGRvNSwgIExETzUpLAorCVBNODYwN19SRUdfREVWUyhsZG82LCAgTERPNiksCisJUE04NjA3X1JFR19ERVZTKGxkbzcsICBMRE83KSwKKwlQTTg2MDdfUkVHX0RFVlMobGRvOCwgIExETzgpLAorCVBNODYwN19SRUdfREVWUyhsZG85LCAgTERPOSksCisJUE04NjA3X1JFR19ERVZTKGxkbzEwLCBMRE8xMCksCisJUE04NjA3X1JFR19ERVZTKGxkbzEyLCBMRE8xMiksCisJUE04NjA3X1JFR19ERVZTKGxkbzE0LCBMRE8xNCksCit9OworCitzdHJ1Y3QgcG04NjB4X2lycV9kYXRhIHsKKwlpbnQJcmVnOworCWludAltYXNrX3JlZzsKKwlpbnQJZW5hYmxlOwkJLyogZW5hYmxlIG9yIG5vdCAqLworCWludAlvZmZzOwkJLyogYml0IG9mZnNldCBpbiBtYXNrIHJlZ2lzdGVyICovCit9OworCitzdGF0aWMgc3RydWN0IHBtODYweF9pcnFfZGF0YSBwbTg2MHhfaXJxc1tdID0geworCVtQTTg2MDdfSVJRX09OS0VZXSA9IHsKKwkJLnJlZwkJPSBQTTg2MDdfSU5UX1NUQVRVUzEsCisJCS5tYXNrX3JlZwk9IFBNODYwN19JTlRfTUFTS18xLAorCQkub2ZmcwkJPSAxIDw8IDAsCisJfSwKKwlbUE04NjA3X0lSUV9FWFRPTl0gPSB7CisJCS5yZWcJCT0gUE04NjA3X0lOVF9TVEFUVVMxLAorCQkubWFza19yZWcJPSBQTTg2MDdfSU5UX01BU0tfMSwKKwkJLm9mZnMJCT0gMSA8PCAxLAorCX0sCisJW1BNODYwN19JUlFfQ0hHXSA9IHsKKwkJLnJlZwkJPSBQTTg2MDdfSU5UX1NUQVRVUzEsCisJCS5tYXNrX3JlZwk9IFBNODYwN19JTlRfTUFTS18xLAorCQkub2ZmcwkJPSAxIDw8IDIsCisJfSwKKwlbUE04NjA3X0lSUV9CQVRdID0geworCQkucmVnCQk9IFBNODYwN19JTlRfU1RBVFVTMSwKKwkJLm1hc2tfcmVnCT0gUE04NjA3X0lOVF9NQVNLXzEsCisJCS5vZmZzCQk9IDEgPDwgMywKKwl9LAorCVtQTTg2MDdfSVJRX1JUQ10gPSB7CisJCS5yZWcJCT0gUE04NjA3X0lOVF9TVEFUVVMxLAorCQkubWFza19yZWcJPSBQTTg2MDdfSU5UX01BU0tfMSwKKwkJLm9mZnMJCT0gMSA8PCA0LAorCX0sCisJW1BNODYwN19JUlFfQ0NdID0geworCQkucmVnCQk9IFBNODYwN19JTlRfU1RBVFVTMSwKKwkJLm1hc2tfcmVnCT0gUE04NjA3X0lOVF9NQVNLXzEsCisJCS5vZmZzCQk9IDEgPDwgNSwKKwl9LAorCVtQTTg2MDdfSVJRX1ZCQVRdID0geworCQkucmVnCQk9IFBNODYwN19JTlRfU1RBVFVTMiwKKwkJLm1hc2tfcmVnCT0gUE04NjA3X0lOVF9NQVNLXzIsCisJCS5vZmZzCQk9IDEgPDwgMCwKKwl9LAorCVtQTTg2MDdfSVJRX1ZDSEddID0geworCQkucmVnCQk9IFBNODYwN19JTlRfU1RBVFVTMiwKKwkJLm1hc2tfcmVnCT0gUE04NjA3X0lOVF9NQVNLXzIsCisJCS5vZmZzCQk9IDEgPDwgMSwKKwl9LAorCVtQTTg2MDdfSVJRX1ZTWVNdID0geworCQkucmVnCQk9IFBNODYwN19JTlRfU1RBVFVTMiwKKwkJLm1hc2tfcmVnCT0gUE04NjA3X0lOVF9NQVNLXzIsCisJCS5vZmZzCQk9IDEgPDwgMiwKKwl9LAorCVtQTTg2MDdfSVJRX1RJTlRdID0geworCQkucmVnCQk9IFBNODYwN19JTlRfU1RBVFVTMiwKKwkJLm1hc2tfcmVnCT0gUE04NjA3X0lOVF9NQVNLXzIsCisJCS5vZmZzCQk9IDEgPDwgMywKKwl9LAorCVtQTTg2MDdfSVJRX0dQQURDMF0gPSB7CisJCS5yZWcJCT0gUE04NjA3X0lOVF9TVEFUVVMyLAorCQkubWFza19yZWcJPSBQTTg2MDdfSU5UX01BU0tfMiwKKwkJLm9mZnMJCT0gMSA8PCA0LAorCX0sCisJW1BNODYwN19JUlFfR1BBREMxXSA9IHsKKwkJLnJlZwkJPSBQTTg2MDdfSU5UX1NUQVRVUzIsCisJCS5tYXNrX3JlZwk9IFBNODYwN19JTlRfTUFTS18yLAorCQkub2ZmcwkJPSAxIDw8IDUsCisJfSwKKwlbUE04NjA3X0lSUV9HUEFEQzJdID0geworCQkucmVnCQk9IFBNODYwN19JTlRfU1RBVFVTMiwKKwkJLm1hc2tfcmVnCT0gUE04NjA3X0lOVF9NQVNLXzIsCisJCS5vZmZzCQk9IDEgPDwgNiwKKwl9LAorCVtQTTg2MDdfSVJRX0dQQURDM10gPSB7CisJCS5yZWcJCT0gUE04NjA3X0lOVF9TVEFUVVMyLAorCQkubWFza19yZWcJPSBQTTg2MDdfSU5UX01BU0tfMiwKKwkJLm9mZnMJCT0gMSA8PCA3LAorCX0sCisJW1BNODYwN19JUlFfQVVESU9fU0hPUlRdID0geworCQkucmVnCQk9IFBNODYwN19JTlRfU1RBVFVTMywKKwkJLm1hc2tfcmVnCT0gUE04NjA3X0lOVF9NQVNLXzMsCisJCS5vZmZzCQk9IDEgPDwgMCwKKwl9LAorCVtQTTg2MDdfSVJRX1BFTl0gPSB7CisJCS5yZWcJCT0gUE04NjA3X0lOVF9TVEFUVVMzLAorCQkubWFza19yZWcJPSBQTTg2MDdfSU5UX01BU0tfMywKKwkJLm9mZnMJCT0gMSA8PCAxLAorCX0sCisJW1BNODYwN19JUlFfSEVBRFNFVF0gPSB7CisJCS5yZWcJCT0gUE04NjA3X0lOVF9TVEFUVVMzLAorCQkubWFza19yZWcJPSBQTTg2MDdfSU5UX01BU0tfMywKKwkJLm9mZnMJCT0gMSA8PCAyLAorCX0sCisJW1BNODYwN19JUlFfSE9PS10gPSB7CisJCS5yZWcJCT0gUE04NjA3X0lOVF9TVEFUVVMzLAorCQkubWFza19yZWcJPSBQTTg2MDdfSU5UX01BU0tfMywKKwkJLm9mZnMJCT0gMSA8PCAzLAorCX0sCisJW1BNODYwN19JUlFfTUlDSU5dID0geworCQkucmVnCQk9IFBNODYwN19JTlRfU1RBVFVTMywKKwkJLm1hc2tfcmVnCT0gUE04NjA3X0lOVF9NQVNLXzMsCisJCS5vZmZzCQk9IDEgPDwgNCwKKwl9LAorCVtQTTg2MDdfSVJRX0NIR19GQUlMXSA9IHsKKwkJLnJlZwkJPSBQTTg2MDdfSU5UX1NUQVRVUzMsCisJCS5tYXNrX3JlZwk9IFBNODYwN19JTlRfTUFTS18zLAorCQkub2ZmcwkJPSAxIDw8IDUsCisJfSwKKwlbUE04NjA3X0lSUV9DSEdfRE9ORV0gPSB7CisJCS5yZWcJCT0gUE04NjA3X0lOVF9TVEFUVVMzLAorCQkubWFza19yZWcJPSBQTTg2MDdfSU5UX01BU0tfMywKKwkJLm9mZnMJCT0gMSA8PCA2LAorCX0sCisJW1BNODYwN19JUlFfQ0hHX0ZBVUxUXSA9IHsKKwkJLnJlZwkJPSBQTTg2MDdfSU5UX1NUQVRVUzMsCisJCS5tYXNrX3JlZwk9IFBNODYwN19JTlRfTUFTS18zLAorCQkub2ZmcwkJPSAxIDw8IDcsCisJfSwKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBtODYweF9pcnFfZGF0YSAqaXJxX3RvX3BtODYweChzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXAsCisJCQkJCQkgICAgaW50IGlycSkKK3sKKwlyZXR1cm4gJnBtODYweF9pcnFzW2lycSAtIGNoaXAtPmlycV9iYXNlXTsKK30KKworc3RhdGljIGlycXJldHVybl90IHBtODYweF9pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXAgPSBkYXRhOworCXN0cnVjdCBwbTg2MHhfaXJxX2RhdGEgKmlycV9kYXRhOworCXN0cnVjdCBpMmNfY2xpZW50ICppMmM7CisJaW50IHJlYWRfcmVnID0gLTEsIHZhbHVlID0gMDsKKwlpbnQgaTsKKworCWkyYyA9IChjaGlwLT5pZCA9PSBDSElQX1BNODYwNykgPyBjaGlwLT5jbGllbnQgOiBjaGlwLT5jb21wYW5pb247CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG04NjB4X2lycXMpOyBpKyspIHsKKwkJaXJxX2RhdGEgPSAmcG04NjB4X2lycXNbaV07CisJCWlmIChyZWFkX3JlZyAhPSBpcnFfZGF0YS0+cmVnKSB7CisJCQlyZWFkX3JlZyA9IGlycV9kYXRhLT5yZWc7CisJCQl2YWx1ZSA9IHBtODYweF9yZWdfcmVhZChpMmMsIGlycV9kYXRhLT5yZWcpOworCQl9CisJCWlmICh2YWx1ZSAmIGlycV9kYXRhLT5lbmFibGUpCisJCQloYW5kbGVfbmVzdGVkX2lycShjaGlwLT5pcnFfYmFzZSArIGkpOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHBtODYweF9pcnFfbG9jayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBwbTg2MHhfY2hpcCAqY2hpcCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisKKwltdXRleF9sb2NrKCZjaGlwLT5pcnFfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHBtODYweF9pcnFfc3luY191bmxvY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXN0cnVjdCBwbTg2MHhfaXJxX2RhdGEgKmlycV9kYXRhOworCXN0cnVjdCBpMmNfY2xpZW50ICppMmM7CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgY2FjaGVkWzNdID0gezB4MCwgMHgwLCAweDB9OworCXVuc2lnbmVkIGNoYXIgbWFza1szXTsKKwlpbnQgaTsKKworCWkyYyA9IChjaGlwLT5pZCA9PSBDSElQX1BNODYwNykgPyBjaGlwLT5jbGllbnQgOiBjaGlwLT5jb21wYW5pb247CisJLyogTG9hZCBjYWNoZWQgdmFsdWUuIEluIGluaXRpYWwsIGFsbCBJUlFzIGFyZSBtYXNrZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQltYXNrW2ldID0gY2FjaGVkW2ldOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtODYweF9pcnFzKTsgaSsrKSB7CisJCWlycV9kYXRhID0gJnBtODYweF9pcnFzW2ldOworCQlzd2l0Y2ggKGlycV9kYXRhLT5tYXNrX3JlZykgeworCQljYXNlIFBNODYwN19JTlRfTUFTS18xOgorCQkJbWFza1swXSAmPSB+aXJxX2RhdGEtPm9mZnM7CisJCQltYXNrWzBdIHw9IGlycV9kYXRhLT5lbmFibGU7CisJCQlicmVhazsKKwkJY2FzZSBQTTg2MDdfSU5UX01BU0tfMjoKKwkJCW1hc2tbMV0gJj0gfmlycV9kYXRhLT5vZmZzOworCQkJbWFza1sxXSB8PSBpcnFfZGF0YS0+ZW5hYmxlOworCQkJYnJlYWs7CisJCWNhc2UgUE04NjA3X0lOVF9NQVNLXzM6CisJCQltYXNrWzJdICY9IH5pcnFfZGF0YS0+b2ZmczsKKwkJCW1hc2tbMl0gfD0gaXJxX2RhdGEtPmVuYWJsZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X2VycihjaGlwLT5kZXYsICJ3cm9uZyBJUlFcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9CisJLyogdXBkYXRlIG1hc2sgaW50byByZWdpc3RlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWlmIChtYXNrW2ldICE9IGNhY2hlZFtpXSkgeworCQkJY2FjaGVkW2ldID0gbWFza1tpXTsKKwkJCXBtODYweF9yZWdfd3JpdGUoaTJjLCBQTTg2MDdfSU5UX01BU0tfMSArIGksIG1hc2tbaV0pOworCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5pcnFfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHBtODYweF9pcnFfZW5hYmxlKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IHBtODYweF9jaGlwICpjaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwlwbTg2MHhfaXJxc1tpcnEgLSBjaGlwLT5pcnFfYmFzZV0uZW5hYmxlCisJCT0gcG04NjB4X2lycXNbaXJxIC0gY2hpcC0+aXJxX2Jhc2VdLm9mZnM7Cit9CisKK3N0YXRpYyB2b2lkIHBtODYweF9pcnFfZGlzYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBwbTg2MHhfY2hpcCAqY2hpcCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJcG04NjB4X2lycXNbaXJxIC0gY2hpcC0+aXJxX2Jhc2VdLmVuYWJsZSA9IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcG04NjB4X2lycV9jaGlwID0geworCS5uYW1lCQk9ICI4OHBtODYweCIsCisJLmJ1c19sb2NrCT0gcG04NjB4X2lycV9sb2NrLAorCS5idXNfc3luY191bmxvY2sgPSBwbTg2MHhfaXJxX3N5bmNfdW5sb2NrLAorCS5lbmFibGUJCT0gcG04NjB4X2lycV9lbmFibGUsCisJLmRpc2FibGUJPSBwbTg2MHhfaXJxX2Rpc2FibGUsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkZXZpY2VfZ3BhZGNfaW5pdChzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXAsCisJCQkJICAgICAgIHN0cnVjdCBwbTg2MHhfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IChjaGlwLT5pZCA9PSBDSElQX1BNODYwNykgPyBjaGlwLT5jbGllbnQgXAorCQkJCTogY2hpcC0+Y29tcGFuaW9uOworCWludCB1c2VfZ3BhZGMgPSAwLCBkYXRhLCByZXQ7CisKKwkvKiBpbml0aWFsaXplIEdQQURDIHdpdGhvdXQgYWN0aXZhdGluZyBpdCAqLworCisJaWYgKHBkYXRhICYmIHBkYXRhLT50b3VjaCkgeworCQkvKiBzZXQgR1BBREMgTUlTQzEgcmVnaXN0ZXIgKi8KKwkJZGF0YSA9IDA7CisJCWRhdGEgfD0gKHBkYXRhLT50b3VjaC0+Z3BhZGNfcHJlYmlhcyA8PCAxKQorCQkJJiBQTTg2MDdfR1BBRENfUFJFQklBU19NQVNLOworCQlkYXRhIHw9IChwZGF0YS0+dG91Y2gtPnNsb3RfY3ljbGUgPDwgMykKKwkJCSYgUE04NjA3X0dQQURDX1NMT1RfQ1lDTEVfTUFTSzsKKwkJZGF0YSB8PSAocGRhdGEtPnRvdWNoLT5vZmZfc2NhbGUgPDwgNSkKKwkJCSYgUE04NjA3X0dQQURDX09GRl9TQ0FMRV9NQVNLOworCQlkYXRhIHw9IChwZGF0YS0+dG91Y2gtPnN3X2NhbCA8PCA3KQorCQkJJiBQTTg2MDdfR1BBRENfU1dfQ0FMX01BU0s7CisJCWlmIChkYXRhKSB7CisJCQlyZXQgPSBwbTg2MHhfcmVnX3dyaXRlKGkyYywgUE04NjA3X0dQQURDX01JU0MxLCBkYXRhKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gb3V0OworCQl9CisJCS8qIHNldCB0c2kgcHJlYmlhcyB0aW1lICovCisJCWlmIChwZGF0YS0+dG91Y2gtPnRzaV9wcmViaWFzKSB7CisJCQlkYXRhID0gcGRhdGEtPnRvdWNoLT50c2lfcHJlYmlhczsKKwkJCXJldCA9IHBtODYweF9yZWdfd3JpdGUoaTJjLCBQTTg2MDdfVFNJX1BSRUJJQVMsIGRhdGEpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBvdXQ7CisJCX0KKwkJLyogc2V0IHByZWJpYXMgJiBwcmVjaGcgdGltZSBvZiBwZW4gZGV0ZWN0ICovCisJCWRhdGEgPSAwOworCQlkYXRhIHw9IHBkYXRhLT50b3VjaC0+cGVuX3ByZWJpYXMgJiBQTTg2MDdfUERfUFJFQklBU19NQVNLOworCQlkYXRhIHw9IChwZGF0YS0+dG91Y2gtPnBlbl9wcmVjaGcgPDwgNSkKKwkJCSYgUE04NjA3X1BEX1BSRUNIR19NQVNLOworCQlpZiAoZGF0YSkgeworCQkJcmV0ID0gcG04NjB4X3JlZ193cml0ZShpMmMsIFBNODYwN19QRF9QUkVCSUFTLCBkYXRhKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gb3V0OworCQl9CisKKwkJdXNlX2dwYWRjID0gMTsKKwl9CisKKwkvKiB0dXJuIG9uIEdQQURDICovCisJaWYgKHVzZV9ncGFkYykgeworCQlyZXQgPSBwbTg2MHhfc2V0X2JpdHMoaTJjLCBQTTg2MDdfR1BBRENfTUlTQzEsCisJCQkJICAgICAgUE04NjA3X0dQQURDX0VOLCBQTTg2MDdfR1BBRENfRU4pOworCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkZXZpY2VfaXJxX2luaXQoc3RydWN0IHBtODYweF9jaGlwICpjaGlwLAorCQkJCSAgICAgc3RydWN0IHBtODYweF9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gKGNoaXAtPmlkID09IENISVBfUE04NjA3KSA/IGNoaXAtPmNsaWVudCBcCisJCQkJOiBjaGlwLT5jb21wYW5pb247CisJdW5zaWduZWQgY2hhciBzdGF0dXNfYnVmW0lOVF9TVEFUVVNfTlVNXTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX09ORVNIT1Q7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCWludCBpLCBkYXRhLCBtYXNrLCByZXQgPSAtRUlOVkFMOworCWludCBfX2lycTsKKworCWlmICghcGRhdGEgfHwgIXBkYXRhLT5pcnFfYmFzZSkgeworCQlkZXZfd2FybihjaGlwLT5kZXYsICJObyBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBJUlEgYmFzZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1hc2sgPSBQTTg2MDdfQjBfTUlTQzFfSU5WX0lOVCB8IFBNODYwN19CMF9NSVNDMV9JTlRfQ0xFQVIKKwkJfCBQTTg2MDdfQjBfTUlTQzFfSU5UX01BU0s7CisJZGF0YSA9IDA7CisJY2hpcC0+aXJxX21vZGUgPSAwOworCWlmIChwZGF0YSAmJiBwZGF0YS0+aXJxX21vZGUpIHsKKwkJLyoKKwkJICogaXJxX21vZGUgZGVmaW5lcyB0aGUgd2F5IG9mIGNsZWFyaW5nIGludGVycnVwdC4gSWYgaXQncyAxLAorCQkgKiBjbGVhciBJUlEgYnkgd3JpdGUuIE90aGVyd2lzZSwgY2xlYXIgaXQgYnkgcmVhZC4KKwkJICogVGhpcyBjb250cm9sIGJpdCBpcyB2YWxpZCBmcm9tIDg4UE04NjA3IEIwIHN0ZXBpbmcuCisJCSAqLworCQlkYXRhIHw9IFBNODYwN19CMF9NSVNDMV9JTlRfQ0xFQVI7CisJCWNoaXAtPmlycV9tb2RlID0gMTsKKwl9CisJcmV0ID0gcG04NjB4X3NldF9iaXRzKGkyYywgUE04NjA3X0IwX01JU0MxLCBtYXNrLCBkYXRhKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiBtYXNrIGFsbCBJUlFzICovCisJbWVtc2V0KHN0YXR1c19idWYsIDAsIElOVF9TVEFUVVNfTlVNKTsKKwlyZXQgPSBwbTg2MHhfYnVsa193cml0ZShpMmMsIFBNODYwN19JTlRfTUFTS18xLAorCQkJCUlOVF9TVEFUVVNfTlVNLCBzdGF0dXNfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoY2hpcC0+aXJxX21vZGUpIHsKKwkJLyogY2xlYXIgaW50ZXJydXB0IHN0YXR1cyBieSB3cml0ZSAqLworCQltZW1zZXQoc3RhdHVzX2J1ZiwgMHhGRiwgSU5UX1NUQVRVU19OVU0pOworCQlyZXQgPSBwbTg2MHhfYnVsa193cml0ZShpMmMsIFBNODYwN19JTlRfU1RBVFVTMSwKKwkJCQkJSU5UX1NUQVRVU19OVU0sIHN0YXR1c19idWYpOworCX0gZWxzZSB7CisJCS8qIGNsZWFyIGludGVycnVwdCBzdGF0dXMgYnkgcmVhZCAqLworCQlyZXQgPSBwbTg2MHhfYnVsa19yZWFkKGkyYywgUE04NjA3X0lOVF9TVEFUVVMxLAorCQkJCQlJTlRfU1RBVFVTX05VTSwgc3RhdHVzX2J1Zik7CisJfQorCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCW11dGV4X2luaXQoJmNoaXAtPmlycV9sb2NrKTsKKwljaGlwLT5pcnFfYmFzZSA9IHBkYXRhLT5pcnFfYmFzZTsKKwljaGlwLT5jb3JlX2lycSA9IGkyYy0+aXJxOworCWlmICghY2hpcC0+Y29yZV9pcnEpCisJCWdvdG8gb3V0OworCisJZGVzYyA9IGlycV90b19kZXNjKGNoaXAtPmNvcmVfaXJxKTsKKworCS8qIHJlZ2lzdGVyIElSUSBieSBnZW5pcnEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbTg2MHhfaXJxcyk7IGkrKykgeworCQlfX2lycSA9IGkgKyBjaGlwLT5pcnFfYmFzZTsKKwkJc2V0X2lycV9jaGlwX2RhdGEoX19pcnEsIGNoaXApOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoX19pcnEsICZwbTg2MHhfaXJxX2NoaXAsCisJCQkJCSBoYW5kbGVfZWRnZV9pcnEpOworCQlzZXRfaXJxX25lc3RlZF90aHJlYWQoX19pcnEsIDEpOworI2lmZGVmIENPTkZJR19BUk0KKwkJc2V0X2lycV9mbGFncyhfX2lycSwgSVJRRl9WQUxJRCk7CisjZWxzZQorCQlzZXRfaXJxX25vcHJvYmUoX19pcnEpOworI2VuZGlmCisJfQorCisJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoY2hpcC0+Y29yZV9pcnEsIE5VTEwsIHBtODYweF9pcnEsIGZsYWdzLAorCQkJCSAgICI4OHBtODYweCIsIGNoaXApOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBJUlE6ICVkXG4iLCByZXQpOworCQljaGlwLT5jb3JlX2lycSA9IDA7CisJfQorCisJcmV0dXJuIDA7CitvdXQ6CisJY2hpcC0+Y29yZV9pcnEgPSAwOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBkZXZpY2VfaXJxX2V4aXQoc3RydWN0IHBtODYweF9jaGlwICpjaGlwKQoreworCWlmIChjaGlwLT5jb3JlX2lycSkKKwkJZnJlZV9pcnEoY2hpcC0+Y29yZV9pcnEsIGNoaXApOworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgZGV2aWNlXzg2MDZfaW5pdChzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXAsCisJCQkJICAgICAgIHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkJICAgICAgIHN0cnVjdCBwbTg2MHhfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJaW50IHJldDsKKworCWlmIChwZGF0YSAmJiBwZGF0YS0+YmFja2xpZ2h0KSB7CisJCXJldCA9IG1mZF9hZGRfZGV2aWNlcyhjaGlwLT5kZXYsIDAsICZiYWNrbGlnaHRfZGV2c1swXSwKKwkJCQkgICAgICBBUlJBWV9TSVpFKGJhY2tsaWdodF9kZXZzKSwKKwkJCQkgICAgICAmYmFja2xpZ2h0X3Jlc291cmNlc1swXSwgMCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKGNoaXAtPmRldiwgIkZhaWxlZCB0byBhZGQgYmFja2xpZ2h0ICIKKwkJCQkic3ViZGV2XG4iKTsKKwkJCWdvdG8gb3V0X2RldjsKKwkJfQorCX0KKworCWlmIChwZGF0YSAmJiBwZGF0YS0+bGVkKSB7CisJCXJldCA9IG1mZF9hZGRfZGV2aWNlcyhjaGlwLT5kZXYsIDAsICZsZWRfZGV2c1swXSwKKwkJCQkgICAgICBBUlJBWV9TSVpFKGxlZF9kZXZzKSwKKwkJCQkgICAgICAmbGVkX3Jlc291cmNlc1swXSwgMCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKGNoaXAtPmRldiwgIkZhaWxlZCB0byBhZGQgbGVkICIKKwkJCQkic3ViZGV2XG4iKTsKKwkJCWdvdG8gb3V0X2RldjsKKwkJfQorCX0KKwlyZXR1cm47CitvdXRfZGV2OgorCW1mZF9yZW1vdmVfZGV2aWNlcyhjaGlwLT5kZXYpOworCWRldmljZV9pcnFfZXhpdChjaGlwKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGRldmljZV84NjA3X2luaXQoc3RydWN0IHBtODYweF9jaGlwICpjaGlwLAorCQkJCSAgICAgICBzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJCSAgICAgICBzdHJ1Y3QgcG04NjB4X3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCWludCBkYXRhLCByZXQ7CisKKwlyZXQgPSBwbTg2MHhfcmVnX3JlYWQoaTJjLCBQTTg2MDdfQ0hJUF9JRCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBDSElQIElEOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCWlmICgocmV0ICYgUE04NjA3X1ZFUlNJT05fTUFTSykgPT0gUE04NjA3X1ZFUlNJT04pCisJCWRldl9pbmZvKGNoaXAtPmRldiwgIk1hcnZlbGwgODhQTTg2MDcgKElEOiAlMDJ4KSBkZXRlY3RlZFxuIiwKKwkJCSByZXQpOworCWVsc2UgeworCQlkZXZfZXJyKGNoaXAtPmRldiwgIkZhaWxlZCB0byBkZXRlY3QgTWFydmVsbCA4OFBNODYwNy4gIgorCQkJIkNoaXAgSUQ6ICUwMnhcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IHBtODYweF9yZWdfcmVhZChpMmMsIFBNODYwN19CVUNLMyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBCVUNLMyByZWdpc3RlcjogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKwlpZiAocmV0ICYgUE04NjA3X0JVQ0szX0RPVUJMRSkKKwkJY2hpcC0+YnVjazNfZG91YmxlID0gMTsKKworCXJldCA9IHBtODYweF9yZWdfcmVhZChpMmMsIFBNODYwN19CMF9NSVNDMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBNSVNDMSByZWdpc3RlcjogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChwZGF0YSAmJiAocGRhdGEtPmkyY19wb3J0ID09IFBJMkNfUE9SVCkpCisJCWRhdGEgPSBQTTg2MDdfQjBfTUlTQzFfUEkyQzsKKwllbHNlCisJCWRhdGEgPSAwOworCXJldCA9IHBtODYweF9zZXRfYml0cyhpMmMsIFBNODYwN19CMF9NSVNDMSwgUE04NjA3X0IwX01JU0MxX1BJMkMsIGRhdGEpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY2hpcC0+ZGV2LCAiRmFpbGVkIHRvIGFjY2VzcyBNSVNDMTolZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gZGV2aWNlX2dwYWRjX2luaXQoY2hpcCwgcGRhdGEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IGRldmljZV9pcnFfaW5pdChjaGlwLCBwZGF0YSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKGNoaXAtPmRldiwgMCwgJnJlZ3VsYXRvcl9kZXZzWzBdLAorCQkJICAgICAgQVJSQVlfU0laRShyZWd1bGF0b3JfZGV2cyksCisJCQkgICAgICAmcmVndWxhdG9yX3Jlc291cmNlc1swXSwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gYWRkIHJlZ3VsYXRvciBzdWJkZXZcbiIpOworCQlnb3RvIG91dF9kZXY7CisJfQorCisJaWYgKHBkYXRhICYmIHBkYXRhLT50b3VjaCkgeworCQlyZXQgPSBtZmRfYWRkX2RldmljZXMoY2hpcC0+ZGV2LCAwLCAmdG91Y2hfZGV2c1swXSwKKwkJCQkgICAgICBBUlJBWV9TSVpFKHRvdWNoX2RldnMpLAorCQkJCSAgICAgICZ0b3VjaF9yZXNvdXJjZXNbMF0sIDApOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gYWRkIHRvdWNoICIKKwkJCQkic3ViZGV2XG4iKTsKKwkJCWdvdG8gb3V0X2RldjsKKwkJfQorCX0KKworCWlmIChwZGF0YSAmJiBwZGF0YS0+cG93ZXIpIHsKKwkJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKGNoaXAtPmRldiwgMCwgJnBvd2VyX2RldnNbMF0sCisJCQkJICAgICAgQVJSQVlfU0laRShwb3dlcl9kZXZzKSwKKwkJCQkgICAgICAmcG93ZXJfc3VwcGx5X3Jlc291cmNlc1swXSwgMCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKGNoaXAtPmRldiwgIkZhaWxlZCB0byBhZGQgcG93ZXIgc3VwcGx5ICIKKwkJCQkic3ViZGV2XG4iKTsKKwkJCWdvdG8gb3V0X2RldjsKKwkJfQorCX0KKworCXJldCA9IG1mZF9hZGRfZGV2aWNlcyhjaGlwLT5kZXYsIDAsICZvbmtleV9kZXZzWzBdLAorCQkJICAgICAgQVJSQVlfU0laRShvbmtleV9kZXZzKSwKKwkJCSAgICAgICZvbmtleV9yZXNvdXJjZXNbMF0sIDApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY2hpcC0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBvbmtleSBzdWJkZXZcbiIpOworCQlnb3RvIG91dF9kZXY7CisJfQorCisJcmV0dXJuOworb3V0X2RldjoKKwltZmRfcmVtb3ZlX2RldmljZXMoY2hpcC0+ZGV2KTsKKwlkZXZpY2VfaXJxX2V4aXQoY2hpcCk7CitvdXQ6CisJcmV0dXJuOworfQorCitpbnQgcG04NjB4X2RldmljZV9pbml0KHN0cnVjdCBwbTg2MHhfY2hpcCAqY2hpcCwKKwkJICAgICAgIHN0cnVjdCBwbTg2MHhfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJY2hpcC0+Y29yZV9pcnEgPSAwOworCisJc3dpdGNoIChjaGlwLT5pZCkgeworCWNhc2UgQ0hJUF9QTTg2MDY6CisJCWRldmljZV84NjA2X2luaXQoY2hpcCwgY2hpcC0+Y2xpZW50LCBwZGF0YSk7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9QTTg2MDc6CisJCWRldmljZV84NjA3X2luaXQoY2hpcCwgY2hpcC0+Y2xpZW50LCBwZGF0YSk7CisJCWJyZWFrOworCX0KKworCWlmIChjaGlwLT5jb21wYW5pb24pIHsKKwkJc3dpdGNoIChjaGlwLT5pZCkgeworCQljYXNlIENISVBfUE04NjA3OgorCQkJZGV2aWNlXzg2MDZfaW5pdChjaGlwLCBjaGlwLT5jb21wYW5pb24sIHBkYXRhKTsKKwkJCWJyZWFrOworCQljYXNlIENISVBfUE04NjA2OgorCQkJZGV2aWNlXzg2MDdfaW5pdChjaGlwLCBjaGlwLT5jb21wYW5pb24sIHBkYXRhKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcG04NjB4X2RldmljZV9leGl0KHN0cnVjdCBwbTg2MHhfY2hpcCAqY2hpcCkKK3sKKwlkZXZpY2VfaXJxX2V4aXQoY2hpcCk7CisJbWZkX3JlbW92ZV9kZXZpY2VzKGNoaXAtPmRldik7Cit9CisKK01PRFVMRV9ERVNDUklQVElPTigiUE1JQyBEcml2ZXIgZm9yIE1hcnZlbGwgODhQTTg2MHgiKTsKK01PRFVMRV9BVVRIT1IoIkhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0BtYXJ2ZWxsLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkLzg4cG04NjB4LWkyYy5jIGIvZHJpdmVycy9tZmQvODhwbTg2MHgtaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM3ZTEyYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkLzg4cG04NjB4LWkyYy5jCkBAIC0wLDAgKzEsMjM2IEBACisvKgorICogSTJDIGRyaXZlciBmb3IgTWFydmVsbCA4OFBNODYweAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICogCUhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0BtYXJ2ZWxsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbWZkLzg4cG04NjB4Lmg+CisKK3N0YXRpYyBpbmxpbmUgaW50IHBtODYweF9yZWFkX2RldmljZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJCSAgICAgaW50IHJlZywgaW50IGJ5dGVzLCB2b2lkICpkZXN0KQoreworCXVuc2lnbmVkIGNoYXIgZGF0YTsKKwlpbnQgcmV0OworCisJZGF0YSA9ICh1bnNpZ25lZCBjaGFyKXJlZzsKKwlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoaTJjLCAmZGF0YSwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBpMmNfbWFzdGVyX3JlY3YoaTJjLCBkZXN0LCBieXRlcyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBtODYweF93cml0ZV9kZXZpY2Uoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCQkgICAgICBpbnQgcmVnLCBpbnQgYnl0ZXMsIHZvaWQgKnNyYykKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZltieXRlcyArIDFdOworCWludCByZXQ7CisKKwlidWZbMF0gPSAodW5zaWduZWQgY2hhcilyZWc7CisJbWVtY3B5KCZidWZbMV0sIHNyYywgYnl0ZXMpOworCisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGkyYywgYnVmLCBieXRlcyArIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAwOworfQorCitpbnQgcG04NjB4X3JlZ19yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIGludCByZWcpCit7CisJc3RydWN0IHBtODYweF9jaGlwICpjaGlwID0gaTJjX2dldF9jbGllbnRkYXRhKGkyYyk7CisJdW5zaWduZWQgY2hhciBkYXRhOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZjaGlwLT5pb19sb2NrKTsKKwlyZXQgPSBwbTg2MHhfcmVhZF9kZXZpY2UoaTJjLCByZWcsIDEsICZkYXRhKTsKKwltdXRleF91bmxvY2soJmNoaXAtPmlvX2xvY2spOworCisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJZWxzZQorCQlyZXR1cm4gKGludClkYXRhOworfQorRVhQT1JUX1NZTUJPTChwbTg2MHhfcmVnX3JlYWQpOworCitpbnQgcG04NjB4X3JlZ193cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBpbnQgcmVnLAorCQkgICAgIHVuc2lnbmVkIGNoYXIgZGF0YSkKK3sKKwlzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoaTJjKTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmY2hpcC0+aW9fbG9jayk7CisJcmV0ID0gcG04NjB4X3dyaXRlX2RldmljZShpMmMsIHJlZywgMSwgJmRhdGEpOworCW11dGV4X3VubG9jaygmY2hpcC0+aW9fbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChwbTg2MHhfcmVnX3dyaXRlKTsKKworaW50IHBtODYweF9idWxrX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmkyYywgaW50IHJlZywKKwkJICAgICBpbnQgY291bnQsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoaTJjKTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmY2hpcC0+aW9fbG9jayk7CisJcmV0ID0gcG04NjB4X3JlYWRfZGV2aWNlKGkyYywgcmVnLCBjb3VudCwgYnVmKTsKKwltdXRleF91bmxvY2soJmNoaXAtPmlvX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocG04NjB4X2J1bGtfcmVhZCk7CisKK2ludCBwbTg2MHhfYnVsa193cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBpbnQgcmVnLAorCQkgICAgICBpbnQgY291bnQsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoaTJjKTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmY2hpcC0+aW9fbG9jayk7CisJcmV0ID0gcG04NjB4X3dyaXRlX2RldmljZShpMmMsIHJlZywgY291bnQsIGJ1Zik7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5pb19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHBtODYweF9idWxrX3dyaXRlKTsKKworaW50IHBtODYweF9zZXRfYml0cyhzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBpbnQgcmVnLAorCQkgICAgdW5zaWduZWQgY2hhciBtYXNrLCB1bnNpZ25lZCBjaGFyIGRhdGEpCit7CisJc3RydWN0IHBtODYweF9jaGlwICpjaGlwID0gaTJjX2dldF9jbGllbnRkYXRhKGkyYyk7CisJdW5zaWduZWQgY2hhciB2YWx1ZTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmY2hpcC0+aW9fbG9jayk7CisJcmV0ID0gcG04NjB4X3JlYWRfZGV2aWNlKGkyYywgcmVnLCAxLCAmdmFsdWUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKwl2YWx1ZSAmPSB+bWFzazsKKwl2YWx1ZSB8PSBkYXRhOworCXJldCA9IHBtODYweF93cml0ZV9kZXZpY2UoaTJjLCByZWcsIDEsICZ2YWx1ZSk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5pb19sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChwbTg2MHhfc2V0X2JpdHMpOworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBwbTg2MHhfaWRfdGFibGVbXSA9IHsKKwl7ICI4OFBNODYweCIsIDAgfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBwbTg2MHhfaWRfdGFibGUpOworCitzdGF0aWMgaW50IHZlcmlmeV9hZGRyKHN0cnVjdCBpMmNfY2xpZW50ICppMmMpCit7CisJdW5zaWduZWQgc2hvcnQgYWRkcl84NjA3W10gPSB7MHgzMCwgMHgzNH07CisJdW5zaWduZWQgc2hvcnQgYWRkcl84NjA2W10gPSB7MHgxMCwgMHgxMX07CisJaW50IHNpemUsIGk7CisKKwlpZiAoaTJjID09IE5VTEwpCisJCXJldHVybiAwOworCXNpemUgPSBBUlJBWV9TSVpFKGFkZHJfODYwNik7CisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQlpZiAoaTJjLT5hZGRyID09ICooYWRkcl84NjA2ICsgaSkpCisJCQlyZXR1cm4gQ0hJUF9QTTg2MDY7CisJfQorCXNpemUgPSBBUlJBWV9TSVpFKGFkZHJfODYwNyk7CisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQlpZiAoaTJjLT5hZGRyID09ICooYWRkcl84NjA3ICsgaSkpCisJCQlyZXR1cm4gQ0hJUF9QTTg2MDc7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwbTg2MHhfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgcG04NjB4X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXA7CisKKwlpZiAoIXBkYXRhKSB7CisJCXByX2luZm8oIk5vIHBsYXRmb3JtIGRhdGEgaW4gJXMhXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNoaXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG04NjB4X2NoaXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2hpcCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNoaXAtPmlkID0gdmVyaWZ5X2FkZHIoY2xpZW50KTsKKwljaGlwLT5jbGllbnQgPSBjbGllbnQ7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgY2hpcCk7CisJY2hpcC0+ZGV2ID0gJmNsaWVudC0+ZGV2OworCW11dGV4X2luaXQoJmNoaXAtPmlvX2xvY2spOworCWRldl9zZXRfZHJ2ZGF0YShjaGlwLT5kZXYsIGNoaXApOworCisJLyoKKwkgKiBCb3RoIGNsaWVudCBhbmQgY29tcGFuaW9uIGNsaWVudCBzaGFyZXMgc2FtZSBwbGF0Zm9ybSBkcml2ZXIuCisJICogRHJpdmVyIGRpc3Rpbmd1aXNoZXMgdGhlbSBieSBwZGF0YS0+Y29tcGFuaW9uX2FkZHIuCisJICogcGRhdGEtPmNvbXBhbmlvbl9hZGRyIGlzIG9ubHkgYXNzaWduZWQgaWYgY29tcGFuaW9uIGNoaXAgZXhpc3RzLgorCSAqIEF0IHRoZSBzYW1lIHRpbWUsIHRoZSBjb21wYW5pb25fYWRkciBzaG91bGRuJ3QgZXF1YWwgdG8gY2xpZW50CisJICogYWRkcmVzcy4KKwkgKi8KKwlpZiAocGRhdGEtPmNvbXBhbmlvbl9hZGRyICYmIChwZGF0YS0+Y29tcGFuaW9uX2FkZHIgIT0gY2xpZW50LT5hZGRyKSkgeworCQljaGlwLT5jb21wYW5pb25fYWRkciA9IHBkYXRhLT5jb21wYW5pb25fYWRkcjsKKwkJY2hpcC0+Y29tcGFuaW9uID0gaTJjX25ld19kdW1teShjaGlwLT5jbGllbnQtPmFkYXB0ZXIsCisJCQkJCQljaGlwLT5jb21wYW5pb25fYWRkcik7CisJCWkyY19zZXRfY2xpZW50ZGF0YShjaGlwLT5jb21wYW5pb24sIGNoaXApOworCX0KKworCXBtODYweF9kZXZpY2VfaW5pdChjaGlwLCBwZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHBtODYweF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXBtODYweF9kZXZpY2VfZXhpdChjaGlwKTsKKwlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2hpcC0+Y29tcGFuaW9uKTsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2hpcC0+Y29tcGFuaW9uLCBOVUxMKTsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2hpcC0+Y2xpZW50LCBOVUxMKTsKKwlrZnJlZShjaGlwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHBtODYweF9kcml2ZXIgPSB7CisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAiODhQTTg2MHgiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBwbTg2MHhfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChwbTg2MHhfcmVtb3ZlKSwKKwkuaWRfdGFibGUJPSBwbTg2MHhfaWRfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbTg2MHhfaTJjX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCXJldCA9IGkyY19hZGRfZHJpdmVyKCZwbTg2MHhfZHJpdmVyKTsKKwlpZiAocmV0ICE9IDApCisJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyIDg4UE04NjB4IEkyQyBkcml2ZXI6ICVkXG4iLCByZXQpOworCXJldHVybiByZXQ7Cit9CitzdWJzeXNfaW5pdGNhbGwocG04NjB4X2kyY19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHBtODYweF9pMmNfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZwbTg2MHhfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHBtODYweF9pMmNfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiSTJDIERyaXZlciBmb3IgTWFydmVsbCA4OFBNODYweCIpOworTU9EVUxFX0FVVEhPUigiSGFvamlhbiBaaHVhbmcgPGhhb2ppYW4uemh1YW5nQG1hcnZlbGwuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvS2NvbmZpZyBiL2RyaXZlcnMvbWZkL0tjb25maWcKaW5kZXggYjY3MGQxMC4uOTUxZmE5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvS2NvbmZpZworKysgYi9kcml2ZXJzL21mZC9LY29uZmlnCkBAIC05LDYgKzksMTYgQEAKIAl0cmlzdGF0ZQogCWRlZmF1bHQgbgogCitjb25maWcgTUZEXzg4UE04NjBYCisJYm9vbCAiU3VwcG9ydCBNYXJ2ZWxsIDg4UE04NjA2Lzg4UE04NjA3IgorCWRlcGVuZHMgb24gSTJDPXkKKwlzZWxlY3QgTUZEX0NPUkUKKwloZWxwCisJICBUaGlzIHN1cHBvcnRzIGZvciBNYXJ2ZWxsIDg4UE04NjA2Lzg4UE04NjA3IFBvd2VyIE1hbmFnZW1lbnQgSUMuCisJICBUaGlzIGluY2x1ZGVzIHRoZSBJMkMgZHJpdmVyIGFuZCB0aGUgY29yZSBBUElzIF9vbmx5XywgeW91IGhhdmUgdG8KKwkgIHNlbGVjdCBpbmRpdmlkdWFsIGNvbXBvbmVudHMgbGlrZSB2b2x0YWdlIHJlZ3VsYXRvcnMsIFJUQyBhbmQKKwkgIGJhdHRlcnktY2hhcmdlciB1bmRlciB0aGUgY29ycmVzcG9uZGluZyBtZW51cy4KKwogY29uZmlnIE1GRF9TTTUwMQogCXRyaXN0YXRlICJTdXBwb3J0IGZvciBTaWxpY29uIE1vdGlvbiBTTTUwMSIKIAkgLS0taGVscC0tLQpAQCAtMzcsNyArNDcsNyBAQAogCiBjb25maWcgTUZEX1NIX01PQklMRV9TREhJCiAJYm9vbCAiU3VwcG9ydCBmb3IgU3VwZXJIIE1vYmlsZSBTREhJIgotCWRlcGVuZHMgb24gU1VQRVJICisJZGVwZW5kcyBvbiBTVVBFUkggfHwgQVJDSF9TSE1PQklMRQogCXNlbGVjdCBNRkRfQ09SRQogCSAtLS1oZWxwLS0tCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgU0RISSBoYXJkd2FyZSBibG9jayBmb3VuZCBpbiBtYW55CkBAIC02OCw2ICs3OCwxNSBAQAogCSAgSFRDIE1hZ2ljaWFuIGRldmljZXMsIHJlc3BlY3RpdmVseS4gQWN0dWFsIGZ1bmN0aW9uYWxpdHkgaXMKIAkgIGhhbmRsZWQgYnkgdGhlIGxlZHMtcGFzaWMzIGFuZCBkczF3bSBkcml2ZXJzLgogCitjb25maWcgSFRDX0kyQ1BMRAorCWJvb2wgIkhUQyBJMkMgUExEIGNoaXAgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEkyQz15ICYmIEdQSU9MSUIKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIHN1cHBvc2VkIENQTEQKKwkgIGZvdW5kIG9uIG9tYXA4NTAgSFRDIGRldmljZXMgbGlrZSB0aGUgSFRDIFdpemFyZCBhbmQgSFRDIEhlcmFsZC4KKwkgIFRoaXMgZGV2aWNlIHByb3ZpZGVzIGlucHV0IGFuZCBvdXRwdXQgR1BJT3MgdGhyb3VnaCBhbiBJMkMKKwkgIGludGVyZmFjZSB0byBvbmUgb3IgbW9yZSBzdWItY2hpcHMuCisKIGNvbmZpZyBVQ0IxNDAwX0NPUkUKIAl0cmlzdGF0ZSAiUGhpbGlwcyBVQ0IxNDAwIENvcmUgZHJpdmVyIgogCWRlcGVuZHMgb24gQUM5N19CVVMKQEAgLTE4NCw2ICsyMDMsMTYgQEAKIAkgIGluZGl2aWR1YWwgY29tcG9uZW50cyBsaWtlIExDRCBiYWNrbGlnaHQsIExFRHMsIEdQSU9zIGFuZCBLZXBhZAogCSAgdW5kZXIgdGhlIGNvcnJlc3BvbmRpbmcgbWVudXMuCiAKK2NvbmZpZyBNRkRfTUFYODkyNQorCWJvb2wgIk1heGltIFNlbWljb25kdWN0b3IgTUFYODkyNSBQTUlDIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBJMkM9eQorCXNlbGVjdCBNRkRfQ09SRQorCWhlbHAKKwkgIFNheSB5ZXMgaGVyZSB0byBzdXBwb3J0IGZvciBNYXhpbSBTZW1pY29uZHVjdG9yIE1BWDg5MjUuIFRoaXMgaXMKKwkgIGEgUG93ZXIgTWFuYWdlbWVudCBJQy4gVGhpcyBkcml2ZXIgcHJvdmllcyBjb21tb24gc3VwcG9ydCBmb3IKKwkgIGFjY2Vzc2luZyB0aGUgZGV2aWNlLCBhZGRpdGlvbmFsIGRyaXZlcnMgbXVzdCBiZSBlbmFibGVkIGluIG9yZGVyCisJICB0byB1c2UgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGRldmljZS4KKwogY29uZmlnIE1GRF9XTTg0MDAKIAl0cmlzdGF0ZSAiU3VwcG9ydCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgV004NDAwIgogCXNlbGVjdCBNRkRfQ09SRQpAQCAtMjA1LDcgKzIzNCw3IEBACiAJICBmdW5jdGlvbmFsaXR5IG9mIHRoZSBkZXZpY2UuCiAKIGNvbmZpZyBNRkRfV004MzUwCi0JdHJpc3RhdGUKKwlib29sCiAKIGNvbmZpZyBNRkRfV004MzUwX0NPTkZJR19NT0RFXzAKIAlib29sCkBAIC0yNTYsOSArMjg1LDkgQEAKIAlkZXBlbmRzIG9uIE1GRF9XTTgzNTAKIAogY29uZmlnIE1GRF9XTTgzNTBfSTJDCi0JdHJpc3RhdGUgIlN1cHBvcnQgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFdNODM1MCB3aXRoIEkyQyIKKwlib29sICJTdXBwb3J0IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBXTTgzNTAgd2l0aCBJMkMiCiAJc2VsZWN0IE1GRF9XTTgzNTAKLQlkZXBlbmRzIG9uIEkyQworCWRlcGVuZHMgb24gSTJDPXkKIAloZWxwCiAJICBUaGUgV004MzUwIGlzIGFuIGludGVncmF0ZWQgYXVkaW8gYW5kIHBvd2VyIG1hbmFnZW1lbnQKIAkgIHN1YnN5c3RlbSB3aXRoIHdhdGNoZG9nIGFuZCBSVEMgZnVuY3Rpb25hbGl0eSBmb3IgZW1iZWRkZWQKQEAgLTI2Niw2ICsyOTUsMTggQEAKIAkgIEkyQyBhcyB0aGUgY29udHJvbCBpbnRlcmZhY2UuICBBZGRpdGlvbmFsIG9wdGlvbnMgbXVzdCBiZQogCSAgc2VsZWN0ZWQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBjaGlwLgogCitjb25maWcgTUZEX1dNODk5NAorCXRyaXN0YXRlICJTdXBwb3J0IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBXTTg5OTQiCisJc2VsZWN0IE1GRF9DT1JFCisJZGVwZW5kcyBvbiBJMkMKKwloZWxwCisJICBUaGUgV004OTk0IGlzIGEgaGlnaGx5IGludGVncmF0ZWQgaGktZmkgQ09ERUMgZGVzaWduZWQgZm9yCisJICBzbWFydHBob25lIGFwcGxpY2F0aW9zbi4gIEFzIHdlbGwgYXMgYXVkaW8gZnVuY3Rpb25hbGl0eSBpdAorCSAgaGFzIG9uIGJvYXJkIEdQSU8gYW5kIHJlZ3VsYXRvciBmdW5jdGlvbmFsaXR5IHdoaWNoIGlzCisJICBzdXBwb3J0ZWQgdmlhIHRoZSByZWxldmFudCBzdWJzeXN0ZW1zLiAgVGhpcyBkcml2ZXIgcHJvdmlkZXMKKwkgIGNvcmUgc3VwcG9ydCBmb3IgdGhlIFdNODk5NCwgaW4gb3JkZXIgdG8gdXNlIHRoZSBhY3R1YWwKKwkgIGZ1bmN0aW9uYWx0aXkgb2YgdGhlIGRldmljZSBvdGhlciBkcml2ZXJzIG11c3QgYmUgZW5hYmxlZC4KKwogY29uZmlnIE1GRF9QQ0Y1MDYzMwogCXRyaXN0YXRlICJTdXBwb3J0IGZvciBOWFAgUENGNTA2MzMiCiAJZGVwZW5kcyBvbiBJMkMKQEAgLTMwMCw4ICszNDEsOCBAQAogCSB0aGUgUENGNTA2MzMgY2hpcC4KIAogY29uZmlnIEFCMzEwMF9DT1JFCi0JdHJpc3RhdGUgIlNULUVyaWNzc29uIEFCMzEwMCBNaXhlZCBTaWduYWwgQ2lyY3VpdCBjb3JlIGZ1bmN0aW9ucyIKLQlkZXBlbmRzIG9uIEkyQworCWJvb2wgIlNULUVyaWNzc29uIEFCMzEwMCBNaXhlZCBTaWduYWwgQ2lyY3VpdCBjb3JlIGZ1bmN0aW9ucyIKKwlkZXBlbmRzIG9uIEkyQz15CiAJZGVmYXVsdCB5IGlmIEFSQ0hfVTMwMAogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIHRvIGVuYWJsZSB0aGUgQUIzMTAwIE1peGVkIFNpZ25hbCBJQyBjb3JlCkBAIC0zMjksMTYgKzM3MCw2IEBACiAJICBUaGlzIGVuYWJsZXMgdGhlIFBDQVAgQVNJQyBwcmVzZW50IG9uIEVaWCBQaG9uZXMuIFRoaXMgaXMKIAkgIG5lZWRlZCBmb3IgTU1DLCBUb3VjaFNjcmVlbiwgU291bmQsIFVTQiwgZXRjLi4KIAotY29uZmlnIE1GRF84OFBNODYwNwotCWJvb2wgIlN1cHBvcnQgTWFydmVsbCA4OFBNODYwNyIKLQlkZXBlbmRzIG9uIEkyQz15Ci0Jc2VsZWN0IE1GRF9DT1JFCi0JaGVscAotCSAgVGhpcyBzdXBwb3J0cyBmb3IgTWFydmVsbCA4OFBNODYwNyBQb3dlciBNYW5hZ2VtZW50IElDLiBUaGlzIGluY2x1ZGVzCi0JICB0aGUgSTJDIGRyaXZlciBhbmQgdGhlIGNvcmUgQVBJcyBfb25seV8sIHlvdSBoYXZlIHRvIHNlbGVjdAotCSAgaW5kaXZpZHVhbCBjb21wb25lbnRzIGxpa2Ugdm9sdGFnZSByZWd1bGF0b3JzLCBSVEMgYW5kCi0JICBiYXR0ZXJ5LWNoYXJnZXIgdW5kZXIgdGhlIGNvcnJlc3BvbmRpbmcgbWVudXMuCi0KIGNvbmZpZyBBQjQ1MDBfQ09SRQogCXRyaXN0YXRlICJTVC1Fcmljc3NvbidzIEFCNDUwMCBNaXhlZCBTaWduYWwgUG93ZXIgbWFuYWdlbWVudCBjaGlwIgogCWRlcGVuZHMgb24gU1BJCkBAIC0zNTgsNiArMzg5LDE1IEBACiAKIAlUaGUgdGltYmVyZGFsZSBGUEdBIGNhbiBiZSBmb3VuZCBvbiB0aGUgSW50ZWwgQXRvbSBkZXZlbG9wbWVudCBib2FyZAogCWZvciBpbi12ZWhpY2xlIGluZm9udGFpbm1lbnQsIGNhbGxlZCBSdXNzZWxsdmlsbGUuCisKK2NvbmZpZyBMUENfU0NICisJdHJpc3RhdGUgIkludGVsIFNDSCBMUEMiCisJZGVwZW5kcyBvbiBQQ0kKKwlzZWxlY3QgTUZEX0NPUkUKKwloZWxwCisJICBMUEMgYnJpZGdlIGZ1bmN0aW9uIG9mIHRoZSBJbnRlbCBTQ0ggcHJvdmlkZXMgc3VwcG9ydCBmb3IKKwkgIFN5c3RlbSBNYW5hZ2VtZW50IEJ1cyBhbmQgR2VuZXJhbCBQdXJwb3NlIEkvTy4KKwogZW5kbWVudQogCiBtZW51ICJNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9NYWtlZmlsZSBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCmluZGV4IDc4Mjk1ZDYuLjIyNzE1YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCkBAIC0yLDEyICsyLDE1IEBACiAjIE1ha2VmaWxlIGZvciBtdWx0aWZ1bmN0aW9uIG1pc2NlbGxhbmVvdXMgZGV2aWNlcwogIwogCis4OHBtODYweC1vYmpzCQkJOj0gODhwbTg2MHgtY29yZS5vIDg4cG04NjB4LWkyYy5vCitvYmotJChDT05GSUdfTUZEXzg4UE04NjBYKQkrPSA4OHBtODYweC5vCiBvYmotJChDT05GSUdfTUZEX1NNNTAxKQkJKz0gc201MDEubwogb2JqLSQoQ09ORklHX01GRF9BU0lDMykJCSs9IGFzaWMzLm8gdG1pb19jb3JlLm8KIG9iai0kKENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkpCQkrPSBzaF9tb2JpbGVfc2RoaS5vCiAKIG9iai0kKENPTkZJR19IVENfRUdQSU8pCQkrPSBodGMtZWdwaW8ubwogb2JqLSQoQ09ORklHX0hUQ19QQVNJQzMpCSs9IGh0Yy1wYXNpYzMubworb2JqLSQoQ09ORklHX0hUQ19JMkNQTEQpCSs9IGh0Yy1pMmNwbGQubwogCiBvYmotJChDT05GSUdfTUZEX0RNMzU1RVZNX01TUCkJKz0gZG0zNTVldm1fbXNwLm8KIApAQCAtMjIsNiArMjUsNyBAQAogd204MzUwLW9ianMJCQkrPSB3bTgzNTAtaXJxLm8KIG9iai0kKENPTkZJR19NRkRfV004MzUwKQkrPSB3bTgzNTAubwogb2JqLSQoQ09ORklHX01GRF9XTTgzNTBfSTJDKQkrPSB3bTgzNTAtaTJjLm8KK29iai0kKENPTkZJR19NRkRfV004OTk0KQkrPSB3bTg5OTQtY29yZS5vCiAKIG9iai0kKENPTkZJR19UUFM2NTAxMCkJCSs9IHRwczY1MDEwLm8KIG9iai0kKENPTkZJR19NRU5FTEFVUykJCSs9IG1lbmVsYXVzLm8KQEAgLTQ3LDYgKzUxLDggQEAKIG9iai0kKENPTkZJR19VQ0IxNDAwX0NPUkUpCSs9IHVjYjE0MDBfY29yZS5vCiAKIG9iai0kKENPTkZJR19QTUlDX0RBOTAzWCkJKz0gZGE5MDN4Lm8KK21heDg5MjUtb2JqcwkJCTo9IG1heDg5MjUtY29yZS5vIG1heDg5MjUtaTJjLm8KK29iai0kKENPTkZJR19NRkRfTUFYODkyNSkJKz0gbWF4ODkyNS5vCiAKIG9iai0kKENPTkZJR19NRkRfUENGNTA2MzMpCSs9IHBjZjUwNjMzLWNvcmUubwogb2JqLSQoQ09ORklHX1BDRjUwNjMzX0FEQykJKz0gcGNmNTA2MzMtYWRjLm8KQEAgLTU1LDUgKzYxLDUgQEAKIG9iai0kKENPTkZJR19BQjMxMDBfT1RQKQkrPSBhYjMxMDAtb3RwLm8KIG9iai0kKENPTkZJR19BQjQ1MDBfQ09SRSkJKz0gYWI0NTAwLWNvcmUubwogb2JqLSQoQ09ORklHX01GRF9USU1CRVJEQUxFKSAgICArPSB0aW1iZXJkYWxlLm8KLW9iai0kKENPTkZJR19NRkRfODhQTTg2MDcpCSs9IDg4cG04NjA3Lm8KIG9iai0kKENPTkZJR19QTUlDX0FEUDU1MjApCSs9IGFkcDU1MjAubworb2JqLSQoQ09ORklHX0xQQ19TQ0gpCQkrPSBscGNfc2NoLm8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9hYjMxMDAtY29yZS5jIGIvZHJpdmVycy9tZmQvYWIzMTAwLWNvcmUuYwppbmRleCBmZDQyYTgwLi5hMmNlM2I2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9hYjMxMDAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL2FiMzEwMC1jb3JlLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgU1QtRXJpY3Nzb24KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIFNULUVyaWNzc29uCiAgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKICAqIExvdy1sZXZlbCBjb3JlIGZvciBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBBQjMxMDAgSUMgb24gdGhlIEkyQyBidXMKICAqIGFuZCBzb21lIGJhc2ljIGNoaXAtY29uZmlndXJhdGlvbi4KQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CkBAIC0zNjUsMTggKzM2NiwyMyBAQAogfQogRVhQT1JUX1NZTUJPTChhYjMxMDBfZXZlbnRfcmVnaXN0ZXJzX3N0YXJ0dXBfc3RhdGVfZ2V0KTsKIAotLyogSW50ZXJydXB0IGhhbmRsaW5nIHdvcmtlciAqLwotc3RhdGljIHZvaWQgYWIzMTAwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorLyoKKyAqIFRoaXMgaXMgYSB0aHJlYWRlZCBpbnRlcnJ1cHQgaGFuZGxlciBzbyB3ZSBjYW4gbWFrZSBzb21lCisgKiBJMkMgY2FsbHMgZXRjLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgYWIzMTAwX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGFiMzEwMCAqYWIzMTAwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhYjMxMDAsIHdvcmspOworCXN0cnVjdCBhYjMxMDAgKmFiMzEwMCA9IGRhdGE7CiAJdTggZXZlbnRfcmVnc1szXTsKIAl1MzIgZmF0ZXZlbnQ7CiAJaW50IGVycjsKIAorCWFkZF9pbnRlcnJ1cHRfcmFuZG9tbmVzcyhpcnEpOworCiAJZXJyID0gYWIzMTAwX2dldF9yZWdpc3Rlcl9wYWdlX2ludGVycnVwdGlibGUoYWIzMTAwLCBBQjMxMDBfRVZFTlRBMSwKIAkJCQkgICAgICAgZXZlbnRfcmVncywgMyk7CiAJaWYgKGVycikKLQkJZ290byBlcnJfZXZlbnRfd3E7CisJCWdvdG8gZXJyX2V2ZW50OwogCiAJZmF0ZXZlbnQgPSAoZXZlbnRfcmVnc1swXSA8PCAxNikgfAogCQkoZXZlbnRfcmVnc1sxXSA8PCA4KSB8CkBAIC0zOTgsMjkgKzQwNCwxMSBAQAogCWRldl9kYmcoYWIzMTAwLT5kZXYsCiAJCSJJUlEgRXZlbnQ6IDB4JTA4eFxuIiwgZmF0ZXZlbnQpOwogCi0JLyogQnkgbm93IHRoZSBJUlEgc2hvdWxkIGJlIGFja2VkIGFuZCBkZWFzc2VydGVkIHNvIGVuYWJsZSBpdCBhZ2FpbiAqLwotCWVuYWJsZV9pcnEoYWIzMTAwLT5pMmNfY2xpZW50LT5pcnEpOwotCXJldHVybjsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKLSBlcnJfZXZlbnRfd3E6CisgZXJyX2V2ZW50OgogCWRldl9kYmcoYWIzMTAwLT5kZXYsCi0JCSJlcnJvciBpbiBldmVudCB3b3JrcXVldWVcbiIpOwotCS8qIEVuYWJsZSB0aGUgSVJRIGFueXdheSwgd2hhdCBjaG9pY2UgZG8gd2UgaGF2ZT8gKi8KLQllbmFibGVfaXJxKGFiMzEwMC0+aTJjX2NsaWVudC0+aXJxKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBhYjMxMDBfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgYWIzMTAwICphYjMxMDAgPSBkYXRhOwotCS8qCi0JICogRGlzYWJsZSB0aGUgSVJRIGFuZCBkaXNwYXRjaCBhIHdvcmtlciB0byBoYW5kbGUgdGhlCi0JICogZXZlbnQuIFNpbmNlIHRoZSBjaGlwIHJlc2lkZXMgb24gSTJDIHRoaXMgaXMgc2xvdwotCSAqIHN0dWZmIGFuZCB3ZSB3aWxsIHJlLWVuYWJsZSB0aGUgaW50ZXJydXB0cyBvbmNlIHRoCi0JICogd29ya2VyIGhhcyBmaW5pc2hlZC4KLQkgKi8KLQlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKLQlzY2hlZHVsZV93b3JrKCZhYjMxMDAtPndvcmspOworCQkiZXJyb3IgcmVhZGluZyBldmVudCBzdGF0dXNcbiIpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtNzM1LDEwICs3MjMsNyBAQAogCS5pZAkJPSAtMSwJCQkJCVwKIH0KIAotLyoKLSAqIFRoaXMgbGlzdHMgYWxsIHRoZSBzdWJkZXZpY2VzIGFuZCBjb3JyZXNwb25kaW5nIHJlZ2lzdGVyCi0gKiByYW5nZXMuCi0gKi8KKy8qIFRoaXMgbGlzdHMgYWxsIHRoZSBzdWJkZXZpY2VzICovCiBBQjMxMDBfREVWSUNFKGRhYywgImFiMzEwMC1kYWMiKTsKIEFCMzEwMF9ERVZJQ0UobGVkcywgImFiMzEwMC1sZWRzIik7CiBBQjMxMDBfREVWSUNFKHBvd2VyLCAiYWIzMTAwLXBvd2VyIik7CkBAIC05MDQsMTIgKzg4OSwxMSBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXhpdF9ub19zZXR1cDsKIAotCUlOSVRfV09SSygmYWIzMTAwLT53b3JrLCBhYjMxMDBfd29yayk7Ci0KKwllcnIgPSByZXF1ZXN0X3RocmVhZGVkX2lycShjbGllbnQtPmlycSwgTlVMTCwgYWIzMTAwX2lycV9oYW5kbGVyLAorCQkJCUlSUUZfT05FU0hPVCwgImFiMzEwMC1jb3JlIiwgYWIzMTAwKTsKIAkvKiBUaGlzIHJlYWwgdW5wcmVkaWN0YWJsZSBJUlEgaXMgb2YgY291cnNlIHNhbXBsZWQgZm9yIGVudHJvcHkgKi8KLQllcnIgPSByZXF1ZXN0X2lycShjbGllbnQtPmlycSwgYWIzMTAwX2lycV9oYW5kbGVyLAotCQkJICBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TQU1QTEVfUkFORE9NLAotCQkJICAiQUIzMTAwIElSUSIsIGFiMzEwMCk7CisJcmFuZF9pbml0aWFsaXplX2lycShjbGllbnQtPmlycSk7CisKIAlpZiAoZXJyKQogCQlnb3RvIGV4aXRfbm9faXJxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9hYjMxMDAtb3RwLmMgYi9kcml2ZXJzL21mZC9hYjMxMDAtb3RwLmMKaW5kZXggMDQ5OWIyMC4uYjYwMzQ2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvYWIzMTAwLW90cC5jCisrKyBiL2RyaXZlcnMvbWZkL2FiMzEwMC1vdHAuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9hYjMxMDAuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KIAogLyogVGhlIE9UUCByZWdpc3RlcnMgKi8KICNkZWZpbmUgQUIzMTAwX09UUDAJCTB4YjAKQEAgLTk1LDExICs5NiwxMCBAQAogICogVGhpcyBpcyBhIHNpbXBsZSBkZWJ1Z2ZzIGh1bWFuLXJlYWRhYmxlIGZpbGUgdGhhdCBkdW1wcyBvdXQKICAqIHRoZSBjb250ZW50cyBvZiB0aGUgT1RQLgogICovCi0jaWZkZWYgQ09ORklHX0RFQlVHRlMKLXN0YXRpYyBpbnQgc2hvd19vdHAoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQorI2lmZGVmIENPTkZJR19ERUJVR19GUworc3RhdGljIGludCBhYjMxMDBfc2hvd19vdHAoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQogewogCXN0cnVjdCBhYjMxMDBfb3RwICpvdHAgPSBzLT5wcml2YXRlOwotCWludCBlcnI7CiAKIAlzZXFfcHJpbnRmKHMsICJPVFAgaXMgJXNcbiIsIG90cC0+bG9ja2VkID8gIkxPQ0tFRCIgOiAiVU5MT0NLRUQiKTsKIAlzZXFfcHJpbnRmKHMsICJPVFAgY2xvY2sgc3dpdGNoIHN0YXJ0dXAgaXMgJXVIelxuIiwgb3RwLT5mcmVxKTsKQEAgLTExMyw3ICsxMTMsNyBAQAogCiBzdGF0aWMgaW50IGFiMzEwMF9vdHBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgYWIzMTAwX290cF9zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgYWIzMTAwX3Nob3dfb3RwLCBpbm9kZS0+aV9wcml2YXRlKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWIzMTAwX290cF9vcGVyYXRpb25zID0gewpAQCAtMTMxLDEzICsxMzEsMTQgQEAKIAkJCQkJICAgJmFiMzEwMF9vdHBfb3BlcmF0aW9ucyk7CiAJaWYgKCFvdHAtPmRlYnVnZnMpIHsKIAkJZGV2X2VycihkZXYsICJBQjMxMDAgZGVidWdmcyBPVFAgZmlsZSByZWdpc3RyYXRpb24gZmFpbGVkIVxuIik7Ci0JCXJldHVybiBlcnI7CisJCXJldHVybiAtRU5PRU5UOwogCX0KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFiMzEwMF9vdHBfZXhpdF9kZWJ1Z2ZzKHN0cnVjdCBhYjMxMDBfb3RwICpvdHApCiB7Ci0JZGVidWdmc19yZW1vdmVfZmlsZShvdHAtPmRlYnVnZnMpOworCWRlYnVnZnNfcmVtb3ZlKG90cC0+ZGVidWdmcyk7CiB9CiAjZWxzZQogLyogQ29tcGlsZSB0aGlzIG91dCBpZiBkZWJ1Z2ZzIG5vdCBzZWxlY3RlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvaHRjLWVncGlvLmMgYi9kcml2ZXJzL21mZC9odGMtZWdwaW8uYwppbmRleCBhYTI2NmUxLi5hZGRiODQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9odGMtZWdwaW8uYworKysgYi9kcml2ZXJzL21mZC9odGMtZWdwaW8uYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAJYWNrX2lycXMoZWkpOwogCS8qIFByb2Nlc3MgYWxsIHNldCBwaW5zLiAqLwogCXJlYWR2YWwgJj0gZWktPmlycXNfZW5hYmxlZDsKLQlmb3JfZWFjaF9iaXQoaXJxcGluLCAmcmVhZHZhbCwgZWktPm5pcnFzKSB7CisJZm9yX2VhY2hfc2V0X2JpdChpcnFwaW4sICZyZWFkdmFsLCBlaS0+bmlycXMpIHsKIAkJLyogUnVuIGlycSBoYW5kbGVyICovCiAJCXByX2RlYnVnKCJnb3QgSVJRICVkXG4iLCBpcnFwaW4pOwogCQlpcnEgPSBlaS0+aXJxX3N0YXJ0ICsgaXJxcGluOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvaHRjLWkyY3BsZC5jIGIvZHJpdmVycy9tZmQvaHRjLWkyY3BsZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YjlmZGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC9odGMtaTJjcGxkLmMKQEAgLTAsMCArMSw3MTAgQEAKKy8qCisgKiAgaHRjLWkyY3BsZC5jCisgKiAgQ2hpcCBkcml2ZXIgZm9yIGFuIHVua25vd24gQ1BMRCBjaGlwIGZvdW5kIG9uIG9tYXA4NTAgSFRDIGRldmljZXMgbGlrZQorICogIHRoZSBIVEMgV2l6YXJkIGFuZCBIVEMgSGVyYWxkLgorICogIFRoZSBjcGxkIGlzIGxvY2F0ZWQgb24gdGhlIGkyYyBidXMgYW5kIGFjdHMgYXMgYW4gaW5wdXQvb3V0cHV0IEdQSU8KKyAqICBleHRlbmRlci4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IENvcnkgTWFjY2Fycm9uZSA8ZGFya3N0YXI2MjYyQGdtYWlsLmNvbT4KKyAqCisgKiAgQmFzZWQgb24gd29yayBkb25lIGluIHRoZSBsaW53aXphcmQgcHJvamVjdAorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IEFuZ2VsbyBBcnJpZmFubyA8bWlrbml4QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaHRjcGxkLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCitzdHJ1Y3QgaHRjcGxkX2NoaXAgeworCXNwaW5sb2NrX3QgICAgICAgICAgICAgIGxvY2s7CisKKwkvKiBjaGlwIGluZm8gKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICByZXNldDsKKwl1OCAgICAgICAgICAgICAgICAgICAgICBhZGRyOworCXN0cnVjdCBkZXZpY2UgICAgICAgICAgICpkZXY7CisJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudDsKKworCS8qIE91dHB1dCBkZXRhaWxzICovCisJdTggICAgICAgICAgICAgICAgICAgICAgY2FjaGVfb3V0OworCXN0cnVjdCBncGlvX2NoaXAgICAgICAgIGNoaXBfb3V0OworCisJLyogSW5wdXQgZGV0YWlscyAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgIGNhY2hlX2luOworCXN0cnVjdCBncGlvX2NoaXAgICAgICAgIGNoaXBfaW47CisKKwl1MTYgICAgICAgICAgICAgICAgICAgICBpcnFzX2VuYWJsZWQ7CisJdWludCAgICAgICAgICAgICAgICAgICAgaXJxX3N0YXJ0OworCWludCAgICAgICAgICAgICAgICAgICAgIG5pcnFzOworCisJLyoKKwkgKiBXb3JrIHN0cnVjdHVyZSB0byBhbGxvdyBmb3Igc2V0dGluZyB2YWx1ZXMgb3V0c2lkZSBvZiBhbnkKKwkgKiBwb3NzaWJsZSBpbnRlcnJ1cHQgY29udGV4dAorCSAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCBzZXRfdmFsX3dvcms7Cit9OworCitzdHJ1Y3QgaHRjcGxkX2RhdGEgeworCS8qIGlycSBpbmZvICovCisJdTE2ICAgICAgICAgICAgICAgIGlycXNfZW5hYmxlZDsKKwl1aW50ICAgICAgICAgICAgICAgaXJxX3N0YXJ0OworCWludCAgICAgICAgICAgICAgICBuaXJxczsKKwl1aW50ICAgICAgICAgICAgICAgY2hhaW5lZF9pcnE7CisJdW5zaWduZWQgaW50ICAgICAgIGludF9yZXNldF9ncGlvX2hpOworCXVuc2lnbmVkIGludCAgICAgICBpbnRfcmVzZXRfZ3Bpb19sbzsKKworCS8qIGh0Y3BsZCBpbmZvICovCisJc3RydWN0IGh0Y3BsZF9jaGlwICpjaGlwOworCXVuc2lnbmVkIGludCAgICAgICBuY2hpcHM7Cit9OworCisvKiBUaGVyZSBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJvYWN0aXZlbHkgbWFzayBpbnRlcnJ1cHRzCisgKiBvbiB0aGUgaHRjcGxkIGNoaXAgaXRzZWxmLiAgU28sIHdlIHNpbXBseSBpZ25vcmUgaW50ZXJydXB0cyB0aGF0CisgKiBhcmVuJ3QgZGVzaXJlZC4gKi8KK3N0YXRpYyB2b2lkIGh0Y3BsZF9tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IGh0Y3BsZF9jaGlwICpjaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwljaGlwLT5pcnFzX2VuYWJsZWQgJj0gfigxIDw8IChpcnEgLSBjaGlwLT5pcnFfc3RhcnQpKTsKKwlwcl9kZWJ1ZygiSFRDUExEIG1hc2sgJWQgJTA0eFxuIiwgaXJxLCBjaGlwLT5pcnFzX2VuYWJsZWQpOworfQorc3RhdGljIHZvaWQgaHRjcGxkX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBodGNwbGRfY2hpcCAqY2hpcCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJY2hpcC0+aXJxc19lbmFibGVkIHw9IDEgPDwgKGlycSAtIGNoaXAtPmlycV9zdGFydCk7CisJcHJfZGVidWcoIkhUQ1BMRCB1bm1hc2sgJWQgJTA0eFxuIiwgaXJxLCBjaGlwLT5pcnFzX2VuYWJsZWQpOworfQorCitzdGF0aWMgaW50IGh0Y3BsZF9zZXRfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGlycV9kZXNjICpkID0gaXJxX3RvX2Rlc2MoaXJxKTsKKworCWlmICghZCkgeworCQlwcl9lcnIoIkhUQ1BMRCBpbnZhbGlkIElSUTogJWRcbiIsIGlycSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChmbGFncyAmIH5JUlFfVFlQRV9TRU5TRV9NQVNLKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFdlIG9ubHkgYWxsb3cgZWRnZSB0cmlnZ2VyaW5nICovCisJaWYgKGZsYWdzICYgKElSUV9UWVBFX0xFVkVMX0xPV3xJUlFfVFlQRV9MRVZFTF9ISUdIKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkLT5zdGF0dXMgJj0gfklSUV9UWVBFX1NFTlNFX01BU0s7CisJZC0+c3RhdHVzIHw9IGZsYWdzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaHRjcGxkX211eGVkX2NoaXAgPSB7CisJLm5hbWUgICAgID0gImh0Y3BsZCIsCisJLm1hc2sgICAgID0gaHRjcGxkX21hc2ssCisJLnVubWFzayAgID0gaHRjcGxkX3VubWFzaywKKwkuc2V0X3R5cGUgPSBodGNwbGRfc2V0X3R5cGUsCit9OworCisvKiBUbyBwcm9wZXJseSBkaXNwYXRjaCBJUlEgZXZlbnRzLCB3ZSBuZWVkIHRvIHJlYWQgZnJvbSB0aGUKKyAqIGNoaXAuICBUaGlzIGlzIGFuIEkyQyBhY3Rpb24gdGhhdCBjb3VsZCBwb3NzaWJseSBzbGVlcAorICogKHdoaWNoIGlzIGJhZCBpbiBpbnRlcnJ1cHQgY29udGV4dCkgLS0gc28gd2UgdXNlIGEgdGhyZWFkZWQKKyAqIGludGVycnVwdCBoYW5kbGVyIHRvIGdldCBhcm91bmQgdGhhdC4KKyAqLworc3RhdGljIGlycXJldHVybl90IGh0Y3BsZF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldikKK3sKKwlzdHJ1Y3QgaHRjcGxkX2RhdGEgKmh0Y3BsZCA9IGRldjsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpcnFwaW47CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCisJaWYgKCFodGNwbGQpIHsKKwkJcHJfZGVidWcoImh0Y3BsZCBpcyBudWxsIGluIElTUlxuIik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwkvKgorCSAqIEZvciBlYWNoIGNoaXAsIGRvIGEgcmVhZCBvZiB0aGUgY2hpcCBhbmQgdHJpZ2dlciBhbnkgaW50ZXJydXB0cworCSAqIGRlc2lyZWQuICBUaGUgaW50ZXJydXB0cyB3aWxsIGJlIHRyaWdnZXJlZCBmcm9tIExTQiB0byBNU0IgKGkuZS4KKwkgKiBiaXQgMCBmaXJzdCwgdGhlbiBiaXQgMSwgZXRjLikKKwkgKgorCSAqIEZvciBjaGlwcyB0aGF0IGhhdmUgbm8gaW50ZXJydXB0IHJhbmdlIHNwZWNpZmllZCwganVzdCBza2lwICdlbS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaHRjcGxkLT5uY2hpcHM7IGkrKykgeworCQlzdHJ1Y3QgaHRjcGxkX2NoaXAgKmNoaXAgPSAmaHRjcGxkLT5jaGlwW2ldOworCQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCQlpbnQgdmFsOworCQl1bnNpZ25lZCBsb25nIHV2YWwsIG9sZF92YWw7CisKKwkJaWYgKCFjaGlwKSB7CisJCQlwcl9kZWJ1ZygiY2hpcCAlZCBpcyBudWxsIGluIElTUlxuIiwgaSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChjaGlwLT5uaXJxcyA9PSAwKQorCQkJY29udGludWU7CisKKwkJY2xpZW50ID0gY2hpcC0+Y2xpZW50OworCQlpZiAoIWNsaWVudCkgeworCQkJcHJfZGVidWcoImNsaWVudCAlZCBpcyBudWxsIGluIElTUlxuIiwgaSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFNjYW4gdGhlIGNoaXAgKi8KKwkJdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgY2hpcC0+Y2FjaGVfb3V0KTsKKwkJaWYgKHZhbCA8IDApIHsKKwkJCS8qIFRocm93IGEgd2FybmluZyBhbmQgc2tpcCB0aGlzIGNoaXAgKi8KKwkJCWRldl93YXJuKGNoaXAtPmRldiwgIlVuYWJsZSB0byByZWFkIGZyb20gY2hpcDogJWRcbiIsCisJCQkJIHZhbCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXV2YWwgPSAodW5zaWduZWQgbG9uZyl2YWw7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKKworCQkvKiBTYXZlIGF3YXkgdGhlIG9sZCB2YWx1ZSBzbyB3ZSBjYW4gY29tcGFyZSBpdCAqLworCQlvbGRfdmFsID0gY2hpcC0+Y2FjaGVfaW47CisKKwkJLyogV3JpdGUgdGhlIG5ldyB2YWx1ZSAqLworCQljaGlwLT5jYWNoZV9pbiA9IHV2YWw7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworCisJCS8qCisJCSAqIEZvciBlYWNoIGJpdCBpbiB0aGUgZGF0YSAoc3RhcnRpbmcgYXQgYml0IDApLCB0cmlnZ2VyCisJCSAqIGFzc29jaWF0ZWQgaW50ZXJydXB0cy4KKwkJICovCisJCWZvciAoaXJxcGluID0gMDsgaXJxcGluIDwgY2hpcC0+bmlycXM7IGlycXBpbisrKSB7CisJCQl1bnNpZ25lZCBvbGRiLCBuZXdiOworCQkJaW50IGZsYWdzOworCisJCQlpcnEgPSBjaGlwLT5pcnFfc3RhcnQgKyBpcnFwaW47CisJCQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwkJCWZsYWdzID0gZGVzYy0+c3RhdHVzOworCisJCQkvKiBSdW4gdGhlIElSUSBoYW5kbGVyLCBidXQgb25seSBpZiB0aGUgYml0IHZhbHVlCisJCQkgKiBjaGFuZ2VkLCBhbmQgdGhlIHByb3BlciBmbGFncyBhcmUgc2V0ICovCisJCQlvbGRiID0gKG9sZF92YWwgPj4gaXJxcGluKSAmIDE7CisJCQluZXdiID0gKHV2YWwgPj4gaXJxcGluKSAmIDE7CisKKwkJCWlmICgoIW9sZGIgJiYgbmV3YiAmJiAoZmxhZ3MgJiBJUlFfVFlQRV9FREdFX1JJU0lORykpIHx8CisJCQkgICAgKG9sZGIgJiYgIW5ld2IgJiYKKwkJCSAgICAgKGZsYWdzICYgSVJRX1RZUEVfRURHRV9GQUxMSU5HKSkpIHsKKwkJCQlwcl9kZWJ1ZygiZmlyZSBJUlEgJWRcbiIsIGlycXBpbik7CisJCQkJZGVzYy0+aGFuZGxlX2lycShpcnEsIGRlc2MpOworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBJbiBvcmRlciB0byBjb250aW51ZSByZWNlaXZpbmcgaW50ZXJydXB0cywgdGhlIGludF9yZXNldF9ncGlvIG11c3QKKwkgKiBiZSBhc3NlcnRlZC4KKwkgKi8KKwlpZiAoaHRjcGxkLT5pbnRfcmVzZXRfZ3Bpb19oaSkKKwkJZ3Bpb19zZXRfdmFsdWUoaHRjcGxkLT5pbnRfcmVzZXRfZ3Bpb19oaSwgMSk7CisJaWYgKGh0Y3BsZC0+aW50X3Jlc2V0X2dwaW9fbG8pCisJCWdwaW9fc2V0X3ZhbHVlKGh0Y3BsZC0+aW50X3Jlc2V0X2dwaW9fbG8sIDApOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorICogVGhlIEdQSU8gc2V0IHJvdXRpbmVzIGNhbiBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCwgZXNwZWNpYWxseSBpZiwKKyAqIGZvciBleGFtcGxlIHRoZXkncmUgYXR0YWNoZWQgdG8gdGhlIGxlZC1ncGlvIGZyYW1ld29yayBhbmQgYSB0cmlnZ2VyIGlzCisgKiBlbmFibGVkLiAgQXMgc3VjaCwgd2UgZGVjbGFyZWQgd29yayBhYm92ZSBpbiB0aGUgaHRjcGxkX2NoaXAgc3RydWN0dXJlLAorICogYW5kIHRoYXQgd29yayBpcyBzY2hlZHVsZWQgaW4gdGhlIHNldCByb3V0aW5lLiAgVGhlIGtlcm5lbCBjYW4gdGhlbiBydW4KKyAqIHRoZSBJMkMgZnVuY3Rpb25zLCB3aGljaCB3aWxsIHNsZWVwLCBpbiBwcm9jZXNzIGNvbnRleHQuCisgKi8KK3ZvaWQgaHRjcGxkX2NoaXBfc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBodGNwbGRfY2hpcCAqY2hpcF9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljaGlwX2RhdGEgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGh0Y3BsZF9jaGlwLCBjaGlwX291dCk7CisJaWYgKCFjaGlwX2RhdGEpCisJCXJldHVybjsKKworCWNsaWVudCA9IGNoaXBfZGF0YS0+Y2xpZW50OworCWlmIChjbGllbnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXBfZGF0YS0+bG9jaywgZmxhZ3MpOworCWlmICh2YWwpCisJCWNoaXBfZGF0YS0+Y2FjaGVfb3V0IHw9ICgxIDw8IG9mZnNldCk7CisJZWxzZQorCQljaGlwX2RhdGEtPmNhY2hlX291dCAmPSB+KDEgPDwgb2Zmc2V0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwX2RhdGEtPmxvY2ssIGZsYWdzKTsKKworCXNjaGVkdWxlX3dvcmsoJihjaGlwX2RhdGEtPnNldF92YWxfd29yaykpOworfQorCit2b2lkIGh0Y3BsZF9jaGlwX3NldF9uaShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGh0Y3BsZF9jaGlwICpjaGlwX2RhdGE7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKworCWNoaXBfZGF0YSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaHRjcGxkX2NoaXAsIHNldF92YWxfd29yayk7CisJY2xpZW50ID0gY2hpcF9kYXRhLT5jbGllbnQ7CisJaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgY2hpcF9kYXRhLT5jYWNoZV9vdXQpOworfQorCitpbnQgaHRjcGxkX2NoaXBfZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgaHRjcGxkX2NoaXAgKmNoaXBfZGF0YTsKKwlpbnQgdmFsID0gMDsKKwlpbnQgaXNfaW5wdXQgPSAwOworCisJLyogVHJ5IG91dCBmaXJzdCAqLworCWNoaXBfZGF0YSA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgaHRjcGxkX2NoaXAsIGNoaXBfb3V0KTsKKwlpZiAoIWNoaXBfZGF0YSkgeworCQkvKiBUcnkgaW4gKi8KKwkJaXNfaW5wdXQgPSAxOworCQljaGlwX2RhdGEgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGh0Y3BsZF9jaGlwLCBjaGlwX2luKTsKKwkJaWYgKCFjaGlwX2RhdGEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhbiBpbnB1dCBvciBvdXRwdXQgR1BJTyAqLworCWlmICghaXNfaW5wdXQpCisJCS8qIFVzZSB0aGUgb3V0cHV0IGNhY2hlICovCisJCXZhbCA9IChjaGlwX2RhdGEtPmNhY2hlX291dCA+PiBvZmZzZXQpICYgMTsKKwllbHNlCisJCS8qIFVzZSB0aGUgaW5wdXQgY2FjaGUgKi8KKwkJdmFsID0gKGNoaXBfZGF0YS0+Y2FjaGVfaW4gPj4gb2Zmc2V0KSAmIDE7CisKKwlpZiAodmFsKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGh0Y3BsZF9kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJCXVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCWh0Y3BsZF9jaGlwX3NldChjaGlwLCBvZmZzZXQsIHZhbHVlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBodGNwbGRfZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJCXVuc2lnbmVkIG9mZnNldCkKK3sKKwkvKgorCSAqIE5vLW9wOiB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiB0aGUgaW5wdXQgY2hpcC4KKwkgKiBXZSBkbyBob3dldmVyIG1ha2Ugc3VyZSB0aGUgb2Zmc2V0IGlzIHdpdGhpbiByYW5nZS4KKwkgKi8KKwlyZXR1cm4gKG9mZnNldCA8IGNoaXAtPm5ncGlvKSA/IDAgOiAtRUlOVkFMOworfQorCitpbnQgaHRjcGxkX2NoaXBfdG9faXJxKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgaHRjcGxkX2NoaXAgKmNoaXBfZGF0YTsKKworCWNoaXBfZGF0YSA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgaHRjcGxkX2NoaXAsIGNoaXBfaW4pOworCisJaWYgKG9mZnNldCA8IGNoaXBfZGF0YS0+bmlycXMpCisJCXJldHVybiBjaGlwX2RhdGEtPmlycV9zdGFydCArIG9mZnNldDsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworfQorCit2b2lkIGh0Y3BsZF9jaGlwX3Jlc2V0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGh0Y3BsZF9jaGlwICpjaGlwX2RhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpZiAoIWNoaXBfZGF0YSkKKwkJcmV0dXJuOworCisJaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKAorCQljbGllbnQsIChjaGlwX2RhdGEtPmNhY2hlX291dCA9IGNoaXBfZGF0YS0+cmVzZXQpKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgaHRjcGxkX3NldHVwX2NoaXBfaXJxKAorCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQlpbnQgY2hpcF9pbmRleCkKK3sKKwlzdHJ1Y3QgaHRjcGxkX2RhdGEgKmh0Y3BsZDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBodGNwbGRfY29yZV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgaHRjcGxkX2NoaXAgKmNoaXA7CisJc3RydWN0IGh0Y3BsZF9jaGlwX3BsYXRmb3JtX2RhdGEgKnBsYXRfY2hpcF9kYXRhOworCXVuc2lnbmVkIGludCBpcnEsIGlycV9lbmQ7CisJaW50IHJldCA9IDA7CisKKwkvKiBHZXQgdGhlIHBsYXRmb3JtIGFuZCBkcml2ZXIgZGF0YSAqLworCXBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWh0Y3BsZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWNoaXAgPSAmaHRjcGxkLT5jaGlwW2NoaXBfaW5kZXhdOworCXBsYXRfY2hpcF9kYXRhID0gJnBkYXRhLT5jaGlwW2NoaXBfaW5kZXhdOworCisJLyogU2V0dXAgaXJxIGhhbmRsZXJzICovCisJaXJxX2VuZCA9IGNoaXAtPmlycV9zdGFydCArIGNoaXAtPm5pcnFzOworCWZvciAoaXJxID0gY2hpcC0+aXJxX3N0YXJ0OyBpcnEgPCBpcnFfZW5kOyBpcnErKykgeworCQlzZXRfaXJxX2NoaXAoaXJxLCAmaHRjcGxkX211eGVkX2NoaXApOworCQlzZXRfaXJxX2NoaXBfZGF0YShpcnEsIGNoaXApOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfc2ltcGxlX2lycSk7CisjaWZkZWYgQ09ORklHX0FSTQorCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOworI2Vsc2UKKwkJc2V0X2lycV9wcm9iZShpcnEpOworI2VuZGlmCisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgaHRjcGxkX3JlZ2lzdGVyX2NoaXBfaTJjKAorCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQlpbnQgY2hpcF9pbmRleCkKK3sKKwlzdHJ1Y3QgaHRjcGxkX2RhdGEgKmh0Y3BsZDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBodGNwbGRfY29yZV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgaHRjcGxkX2NoaXAgKmNoaXA7CisJc3RydWN0IGh0Y3BsZF9jaGlwX3BsYXRmb3JtX2RhdGEgKnBsYXRfY2hpcF9kYXRhOworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOworCisJLyogR2V0IHRoZSBwbGF0Zm9ybSBhbmQgZHJpdmVyIGRhdGEgKi8KKwlwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlodGNwbGQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwljaGlwID0gJmh0Y3BsZC0+Y2hpcFtjaGlwX2luZGV4XTsKKwlwbGF0X2NoaXBfZGF0YSA9ICZwZGF0YS0+Y2hpcFtjaGlwX2luZGV4XTsKKworCWFkYXB0ZXIgPSBpMmNfZ2V0X2FkYXB0ZXIocGRhdGEtPmkyY19hZGFwdGVyX2lkKTsKKwlpZiAoYWRhcHRlciA9PSBOVUxMKSB7CisJCS8qIEVlaywgbm8gc3VjaCBJMkMgYWRhcHRlciEgIEJhaWwgb3V0LiAqLworCQlkZXZfd2FybihkZXYsICJDaGlwIGF0IGkyYyBhZGRyZXNzIDB4JXg6IEludmFsaWQgaTJjIGFkYXB0ZXIgJWRcbiIsCisJCQkgcGxhdF9jaGlwX2RhdGEtPmFkZHIsIHBkYXRhLT5pMmNfYWRhcHRlcl9pZCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFX0RBVEEpKSB7CisJCWRldl93YXJuKGRldiwgImkyYyBhZGFwdGVyICVkIG5vbi1mdW5jdGlvbmFsXG4iLAorCQkJIHBkYXRhLT5pMmNfYWRhcHRlcl9pZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfYm9hcmRfaW5mbykpOworCWluZm8uYWRkciA9IHBsYXRfY2hpcF9kYXRhLT5hZGRyOworCXN0cmxjcHkoaW5mby50eXBlLCAiaHRjcGxkLWNoaXAiLCBJMkNfTkFNRV9TSVpFKTsKKwlpbmZvLnBsYXRmb3JtX2RhdGEgPSBjaGlwOworCisJLyogQWRkIHRoZSBJMkMgZGV2aWNlLiAgVGhpcyBjYWxscyB0aGUgcHJvYmUoKSBmdW5jdGlvbi4gKi8KKwljbGllbnQgPSBpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmaW5mbyk7CisJaWYgKCFjbGllbnQpIHsKKwkJLyogSTJDIGRldmljZSByZWdpc3RyYXRpb24gZmFpbGVkLCBjb250aW5ldSB3aXRoIHRoZSBuZXh0ICovCisJCWRldl93YXJuKGRldiwgIlVuYWJsZSB0byBhZGQgSTJDIGRldmljZSBmb3IgMHgleFxuIiwKKwkJCSBwbGF0X2NoaXBfZGF0YS0+YWRkcik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGNoaXApOworCXNucHJpbnRmKGNsaWVudC0+bmFtZSwgSTJDX05BTUVfU0laRSwgIkNoaXBfMHglZCIsIGNsaWVudC0+YWRkcik7CisJY2hpcC0+Y2xpZW50ID0gY2xpZW50OworCisJLyogUmVzZXQgdGhlIGNoaXAgKi8KKwlodGNwbGRfY2hpcF9yZXNldChjbGllbnQpOworCWNoaXAtPmNhY2hlX2luID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgY2hpcC0+Y2FjaGVfb3V0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgaHRjcGxkX3VucmVnaXN0ZXJfY2hpcF9pMmMoCisJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCWludCBjaGlwX2luZGV4KQoreworCXN0cnVjdCBodGNwbGRfZGF0YSAqaHRjcGxkOworCXN0cnVjdCBodGNwbGRfY2hpcCAqY2hpcDsKKworCS8qIEdldCB0aGUgcGxhdGZvcm0gYW5kIGRyaXZlciBkYXRhICovCisJaHRjcGxkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJY2hpcCA9ICZodGNwbGQtPmNoaXBbY2hpcF9pbmRleF07CisKKwlpZiAoY2hpcC0+Y2xpZW50KQorCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2hpcC0+Y2xpZW50KTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgaHRjcGxkX3JlZ2lzdGVyX2NoaXBfZ3BpbygKKwkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJaW50IGNoaXBfaW5kZXgpCit7CisJc3RydWN0IGh0Y3BsZF9kYXRhICpodGNwbGQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgaHRjcGxkX2NvcmVfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IGh0Y3BsZF9jaGlwICpjaGlwOworCXN0cnVjdCBodGNwbGRfY2hpcF9wbGF0Zm9ybV9kYXRhICpwbGF0X2NoaXBfZGF0YTsKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpncGlvX2NoaXA7CisJaW50IHJldCA9IDA7CisKKwkvKiBHZXQgdGhlIHBsYXRmb3JtIGFuZCBkcml2ZXIgZGF0YSAqLworCXBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWh0Y3BsZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWNoaXAgPSAmaHRjcGxkLT5jaGlwW2NoaXBfaW5kZXhdOworCXBsYXRfY2hpcF9kYXRhID0gJnBkYXRhLT5jaGlwW2NoaXBfaW5kZXhdOworCisJLyogU2V0dXAgdGhlIEdQSU8gY2hpcHMgKi8KKwlncGlvX2NoaXAgPSAmKGNoaXAtPmNoaXBfb3V0KTsKKwlncGlvX2NoaXAtPmxhYmVsICAgICAgICAgICA9ICJodGNwbGQtb3V0IjsKKwlncGlvX2NoaXAtPmRldiAgICAgICAgICAgICA9IGRldjsKKwlncGlvX2NoaXAtPm93bmVyICAgICAgICAgICA9IFRISVNfTU9EVUxFOworCWdwaW9fY2hpcC0+Z2V0ICAgICAgICAgICAgID0gaHRjcGxkX2NoaXBfZ2V0OworCWdwaW9fY2hpcC0+c2V0ICAgICAgICAgICAgID0gaHRjcGxkX2NoaXBfc2V0OworCWdwaW9fY2hpcC0+ZGlyZWN0aW9uX2lucHV0ID0gTlVMTDsKKwlncGlvX2NoaXAtPmRpcmVjdGlvbl9vdXRwdXQgPSBodGNwbGRfZGlyZWN0aW9uX291dHB1dDsKKwlncGlvX2NoaXAtPmJhc2UgICAgICAgICAgICA9IHBsYXRfY2hpcF9kYXRhLT5ncGlvX291dF9iYXNlOworCWdwaW9fY2hpcC0+bmdwaW8gICAgICAgICAgID0gcGxhdF9jaGlwX2RhdGEtPm51bV9ncGlvczsKKworCWdwaW9fY2hpcCA9ICYoY2hpcC0+Y2hpcF9pbik7CisJZ3Bpb19jaGlwLT5sYWJlbCAgICAgICAgICAgPSAiaHRjcGxkLWluIjsKKwlncGlvX2NoaXAtPmRldiAgICAgICAgICAgICA9IGRldjsKKwlncGlvX2NoaXAtPm93bmVyICAgICAgICAgICA9IFRISVNfTU9EVUxFOworCWdwaW9fY2hpcC0+Z2V0ICAgICAgICAgICAgID0gaHRjcGxkX2NoaXBfZ2V0OworCWdwaW9fY2hpcC0+c2V0ICAgICAgICAgICAgID0gTlVMTDsKKwlncGlvX2NoaXAtPmRpcmVjdGlvbl9pbnB1dCA9IGh0Y3BsZF9kaXJlY3Rpb25faW5wdXQ7CisJZ3Bpb19jaGlwLT5kaXJlY3Rpb25fb3V0cHV0ID0gTlVMTDsKKwlncGlvX2NoaXAtPnRvX2lycSAgICAgICAgICA9IGh0Y3BsZF9jaGlwX3RvX2lycTsKKwlncGlvX2NoaXAtPmJhc2UgICAgICAgICAgICA9IHBsYXRfY2hpcF9kYXRhLT5ncGlvX2luX2Jhc2U7CisJZ3Bpb19jaGlwLT5uZ3BpbyAgICAgICAgICAgPSBwbGF0X2NoaXBfZGF0YS0+bnVtX2dwaW9zOworCisJLyogQWRkIHRoZSBHUElPIGNoaXBzICovCisJcmV0ID0gZ3Bpb2NoaXBfYWRkKCYoY2hpcC0+Y2hpcF9vdXQpKTsKKwlpZiAocmV0KSB7CisJCWRldl93YXJuKGRldiwgIlVuYWJsZSB0byByZWdpc3RlciBvdXRwdXQgR1BJT3MgZm9yIDB4JXg6ICVkXG4iLAorCQkJIHBsYXRfY2hpcF9kYXRhLT5hZGRyLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGdwaW9jaGlwX2FkZCgmKGNoaXAtPmNoaXBfaW4pKTsKKwlpZiAocmV0KSB7CisJCWludCBlcnJvcjsKKworCQlkZXZfd2FybihkZXYsICJVbmFibGUgdG8gcmVnaXN0ZXIgaW5wdXQgR1BJT3MgZm9yIDB4JXg6ICVkXG4iLAorCQkJIHBsYXRfY2hpcF9kYXRhLT5hZGRyLCByZXQpOworCisJCWVycm9yID0gZ3Bpb2NoaXBfcmVtb3ZlKCYoY2hpcC0+Y2hpcF9vdXQpKTsKKwkJaWYgKGVycm9yKQorCQkJZGV2X3dhcm4oZGV2LCAiRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIHVucmVnaXN0ZXIgZ3BpbyBjaGlwOiAlZFxuIiwgZXJyb3IpOworCisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGh0Y3BsZF9zZXR1cF9jaGlwcyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBodGNwbGRfZGF0YSAqaHRjcGxkOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGh0Y3BsZF9jb3JlX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCWludCBpOworCisJLyogR2V0IHRoZSBwbGF0Zm9ybSBhbmQgZHJpdmVyIGRhdGEgKi8KKwlwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlodGNwbGQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCS8qIFNldHVwIGVhY2ggY2hpcCdzIG91dHB1dCBHUElPcyAqLworCWh0Y3BsZC0+bmNoaXBzID0gcGRhdGEtPm51bV9jaGlwOworCWh0Y3BsZC0+Y2hpcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBodGNwbGRfY2hpcCkgKiBodGNwbGQtPm5jaGlwcywKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWh0Y3BsZC0+Y2hpcCkgeworCQlkZXZfd2FybihkZXYsICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBjaGlwc1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIEFkZCB0aGUgY2hpcHMgYXMgYmVzdCB3ZSBjYW4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgaHRjcGxkLT5uY2hpcHM7IGkrKykgeworCQlpbnQgcmV0OworCisJCS8qIFNldHVwIHRoZSBIVENQTEQgY2hpcHMgKi8KKwkJaHRjcGxkLT5jaGlwW2ldLnJlc2V0ID0gcGRhdGEtPmNoaXBbaV0ucmVzZXQ7CisJCWh0Y3BsZC0+Y2hpcFtpXS5jYWNoZV9vdXQgPSBwZGF0YS0+Y2hpcFtpXS5yZXNldDsKKwkJaHRjcGxkLT5jaGlwW2ldLmNhY2hlX2luID0gMDsKKwkJaHRjcGxkLT5jaGlwW2ldLmRldiA9IGRldjsKKwkJaHRjcGxkLT5jaGlwW2ldLmlycV9zdGFydCA9IHBkYXRhLT5jaGlwW2ldLmlycV9iYXNlOworCQlodGNwbGQtPmNoaXBbaV0ubmlycXMgPSBwZGF0YS0+Y2hpcFtpXS5udW1faXJxczsKKworCQlJTklUX1dPUksoJihodGNwbGQtPmNoaXBbaV0uc2V0X3ZhbF93b3JrKSwgJmh0Y3BsZF9jaGlwX3NldF9uaSk7CisJCXNwaW5fbG9ja19pbml0KCYoaHRjcGxkLT5jaGlwW2ldLmxvY2spKTsKKworCQkvKiBTZXR1cCB0aGUgaW50ZXJydXB0cyBmb3IgdGhlIGNoaXAgKi8KKwkJaWYgKGh0Y3BsZC0+Y2hhaW5lZF9pcnEpIHsKKwkJCXJldCA9IGh0Y3BsZF9zZXR1cF9jaGlwX2lycShwZGV2LCBpKTsKKwkJCWlmIChyZXQpCisJCQkJY29udGludWU7CisJCX0KKworCQkvKiBSZWdpc3RlciB0aGUgY2hpcCB3aXRoIEkyQyAqLworCQlyZXQgPSBodGNwbGRfcmVnaXN0ZXJfY2hpcF9pMmMocGRldiwgaSk7CisJCWlmIChyZXQpCisJCQljb250aW51ZTsKKworCisJCS8qIFJlZ2lzdGVyIHRoZSBjaGlwcyB3aXRoIHRoZSBHUElPIHN1YnN5c3RlbSAqLworCQlyZXQgPSBodGNwbGRfcmVnaXN0ZXJfY2hpcF9ncGlvKHBkZXYsIGkpOworCQlpZiAocmV0KSB7CisJCQkvKiBVbnJlZ2lzdGVyIHRoZSBjaGlwIGZyb20gaTJjIGFuZCBjb250aW51ZSAqLworCQkJaHRjcGxkX3VucmVnaXN0ZXJfY2hpcF9pMmMocGRldiwgaSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWRldl9pbmZvKGRldiwgIlJlZ2lzdGVyZWQgY2hpcCBhdCAweCV4XG4iLCBwZGF0YS0+Y2hpcFtpXS5hZGRyKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgaHRjcGxkX2NvcmVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgaHRjcGxkX2RhdGEgKmh0Y3BsZDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBodGNwbGRfY29yZV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWlmICghcGRhdGEpIHsKKwkJZGV2X3dhcm4oZGV2LCAiUGxhdGZvcm0gZGF0YSBub3QgZm91bmQgZm9yIGh0Y3BsZCBjb3JlIVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJaHRjcGxkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGh0Y3BsZF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFodGNwbGQpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogRmluZCBjaGFpbmVkIGlycSAqLworCXJldCA9IC1FSU5WQUw7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlpZiAocmVzKSB7CisJCWludCBmbGFnczsKKwkJaHRjcGxkLT5jaGFpbmVkX2lycSA9IHJlcy0+c3RhcnQ7CisKKwkJLyogU2V0dXAgdGhlIGNoYWluZWQgaW50ZXJydXB0IGhhbmRsZXIgKi8KKwkJZmxhZ3MgPSBJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfVFJJR0dFUl9SSVNJTkc7CisJCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGh0Y3BsZC0+Y2hhaW5lZF9pcnEsCisJCQkJCSAgIE5VTEwsIGh0Y3BsZF9oYW5kbGVyLAorCQkJCQkgICBmbGFncywgcGRldi0+bmFtZSwgaHRjcGxkKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X3dhcm4oZGV2LCAiVW5hYmxlIHRvIHNldHVwIGNoYWluZWQgaXJxIGhhbmRsZXI6ICVkXG4iLCByZXQpOworCQkJZ290byBmYWlsOworCQl9IGVsc2UKKwkJCWRldmljZV9pbml0X3dha2V1cChkZXYsIDApOworCX0KKworCS8qIFNldCB0aGUgZHJpdmVyIGRhdGEgKi8KKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBodGNwbGQpOworCisJLyogU2V0dXAgdGhlIGh0Y3BsZCBjaGlwcyAqLworCXJldCA9IGh0Y3BsZF9zZXR1cF9jaGlwcyhwZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwkvKiBSZXF1ZXN0IHRoZSBHUElPKHMpIGZvciB0aGUgaW50IHJlc2V0IGFuZCBzZXQgdGhlbSB1cCAqLworCWlmIChwZGF0YS0+aW50X3Jlc2V0X2dwaW9faGkpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5pbnRfcmVzZXRfZ3Bpb19oaSwgImh0Y3BsZC1jb3JlIik7CisJCWlmIChyZXQpIHsKKwkJCS8qCisJCQkgKiBJZiBpdCBmYWlsZWQsIHRoYXQgc3Vja3MsIGJ1dCB3ZSBjYW4gcHJvYmFibHkKKwkJCSAqIGNvbnRpbnVlIG9uIHdpdGhvdXQgaXQuCisJCQkgKi8KKwkJCWRldl93YXJuKGRldiwgIlVuYWJsZSB0byByZXF1ZXN0IGludF9yZXNldF9ncGlvX2hpIC0tIGludGVycnVwdHMgbWF5IG5vdCB3b3JrXG4iKTsKKwkJCWh0Y3BsZC0+aW50X3Jlc2V0X2dwaW9faGkgPSAwOworCQl9IGVsc2UgeworCQkJaHRjcGxkLT5pbnRfcmVzZXRfZ3Bpb19oaSA9IHBkYXRhLT5pbnRfcmVzZXRfZ3Bpb19oaTsKKwkJCWdwaW9fc2V0X3ZhbHVlKGh0Y3BsZC0+aW50X3Jlc2V0X2dwaW9faGksIDEpOworCQl9CisJfQorCisJaWYgKHBkYXRhLT5pbnRfcmVzZXRfZ3Bpb19sbykgeworCQlyZXQgPSBncGlvX3JlcXVlc3QocGRhdGEtPmludF9yZXNldF9ncGlvX2xvLCAiaHRjcGxkLWNvcmUiKTsKKwkJaWYgKHJldCkgeworCQkJLyoKKwkJCSAqIElmIGl0IGZhaWxlZCwgdGhhdCBzdWNrcywgYnV0IHdlIGNhbiBwcm9iYWJseQorCQkJICogY29udGludWUgb24gd2l0aG91dCBpdC4KKwkJCSAqLworCQkJZGV2X3dhcm4oZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgaW50X3Jlc2V0X2dwaW9fbG8gLS0gaW50ZXJydXB0cyBtYXkgbm90IHdvcmtcbiIpOworCQkJaHRjcGxkLT5pbnRfcmVzZXRfZ3Bpb19sbyA9IDA7CisJCX0gZWxzZSB7CisJCQlodGNwbGQtPmludF9yZXNldF9ncGlvX2xvID0gcGRhdGEtPmludF9yZXNldF9ncGlvX2xvOworCQkJZ3Bpb19zZXRfdmFsdWUoaHRjcGxkLT5pbnRfcmVzZXRfZ3Bpb19sbywgMCk7CisJCX0KKwl9CisKKwlkZXZfaW5mbyhkZXYsICJJbml0aWFsaXplZCBzdWNjZXNzZnVsbHlcbiIpOworCXJldHVybiAwOworCitmYWlsOgorCWtmcmVlKGh0Y3BsZCk7CisJcmV0dXJuIHJldDsKK30KKworLyogVGhlIEkyQyBEcml2ZXIgLS0gdXNlZCBpbnRlcm5hbGx5ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgaHRjcGxkX2NoaXBfaWRbXSA9IHsKKwl7ICJodGNwbGQtY2hpcCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgaHRjcGxkX2NoaXBfaWQpOworCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBodGNwbGRfY2hpcF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiaHRjcGxkLWNoaXAiLAorCX0sCisJLmlkX3RhYmxlID0gaHRjcGxkX2NoaXBfaWQsCit9OworCisvKiBUaGUgQ29yZSBEcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGh0Y3BsZF9jb3JlX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJpMmMtaHRjcGxkIiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaHRjcGxkX2NvcmVfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwkvKiBSZWdpc3RlciB0aGUgSTJDIENoaXAgZHJpdmVyICovCisJcmV0ID0gaTJjX2FkZF9kcml2ZXIoJmh0Y3BsZF9jaGlwX2RyaXZlcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFByb2JlIGZvciBvdXIgY2hpcHMgKi8KKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZodGNwbGRfY29yZV9kcml2ZXIsIGh0Y3BsZF9jb3JlX3Byb2JlKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGh0Y3BsZF9jb3JlX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmaHRjcGxkX2NoaXBfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaHRjcGxkX2NvcmVfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoaHRjcGxkX2NvcmVfaW5pdCk7Cittb2R1bGVfZXhpdChodGNwbGRfY29yZV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQ29yeSBNYWNjYXJyb25lIDxkYXJrc3RhcjYyNjJAZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJMkMgSFRDIFBMRCBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvbHBjX3NjaC5jIGIvZHJpdmVycy9tZmQvbHBjX3NjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYjJmNjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC9scGNfc2NoLmMKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiAgbHBjX3NjaC5jIC0gTFBDIGludGVyZmFjZSBmb3IgSW50ZWwgUG91bHNibyBTQ0gKKyAqCisgKiAgTFBDIGJyaWRnZSBmdW5jdGlvbiBvZiB0aGUgSW50ZWwgU0NIIGNvbnRhaW5zIG1hbnkgb3RoZXIKKyAqICBmdW5jdGlvbmFsIHVuaXRzLCBzdWNoIGFzIEludGVycnVwdCBjb250cm9sbGVycywgVGltZXJzLAorICogIFBvd2VyIE1hbmFnZW1lbnQsIFN5c3RlbSBNYW5hZ2VtZW50LCBHUElPLCBSVEMsIGFuZCBMUEMKKyAqICBDb25maWd1cmF0aW9uIFJlZ2lzdGVycy4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDEwIENvbXB1TGFiIEx0ZAorICogIEF1dGhvcjogRGVuaXMgVHVyaXNjaGV2IDxkZW5pc0Bjb21wdWxhYi5jby5pbD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgorCisjZGVmaW5lIFNNQkFTRQkJMHg0MAorI2RlZmluZSBTTUJVU19JT19TSVpFCTY0CisKKyNkZWZpbmUgR1BJT0JBU0UJMHg0NAorI2RlZmluZSBHUElPX0lPX1NJWkUJNjQKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWJ1c19zY2hfcmVzb3VyY2UgPSB7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSU8sCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZ3Bpb19zY2hfcmVzb3VyY2UgPSB7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSU8sCit9OworCitzdGF0aWMgc3RydWN0IG1mZF9jZWxsIGxwY19zY2hfY2VsbHNbXSA9IHsKKwl7CisJCS5uYW1lID0gImlzY2hfc21idXMiLAorCQkubnVtX3Jlc291cmNlcyA9IDEsCisJCS5yZXNvdXJjZXMgPSAmc21idXNfc2NoX3Jlc291cmNlLAorCX0sCisJeworCQkubmFtZSA9ICJzY2hfZ3BpbyIsCisJCS5udW1fcmVzb3VyY2VzID0gMSwKKwkJLnJlc291cmNlcyA9ICZncGlvX3NjaF9yZXNvdXJjZSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGxwY19zY2hfaWRzW10gPSB7CisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfU0NIX0xQQykgfSwKKwl7IDAsIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbHBjX3NjaF9pZHMpOworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBscGNfc2NoX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXVuc2lnbmVkIGludCBiYXNlX2FkZHJfY2ZnOworCXVuc2lnbmVkIHNob3J0IGJhc2VfYWRkcjsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFNNQkFTRSwgJmJhc2VfYWRkcl9jZmcpOworCWlmICghKGJhc2VfYWRkcl9jZmcgJiAoMSA8PCAzMSkpKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiRGVjb2RlIG9mIHRoZSBTTUJ1cyBJL08gcmFuZ2UgZGlzYWJsZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJYmFzZV9hZGRyID0gKHVuc2lnbmVkIHNob3J0KWJhc2VfYWRkcl9jZmc7CisJaWYgKGJhc2VfYWRkciA9PSAwKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiSS9PIHNwYWNlIGZvciBTTUJ1cyB1bmluaXRpYWxpemVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc21idXNfc2NoX3Jlc291cmNlLnN0YXJ0ID0gYmFzZV9hZGRyOworCXNtYnVzX3NjaF9yZXNvdXJjZS5lbmQgPSBiYXNlX2FkZHIgKyBTTUJVU19JT19TSVpFIC0gMTsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIEdQSU9CQVNFLCAmYmFzZV9hZGRyX2NmZyk7CisJaWYgKCEoYmFzZV9hZGRyX2NmZyAmICgxIDw8IDMxKSkpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJEZWNvZGUgb2YgdGhlIEdQSU8gSS9PIHJhbmdlIGRpc2FibGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWJhc2VfYWRkciA9ICh1bnNpZ25lZCBzaG9ydCliYXNlX2FkZHJfY2ZnOworCWlmIChiYXNlX2FkZHIgPT0gMCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkkvTyBzcGFjZSBmb3IgR1BJTyB1bmluaXRpYWxpemVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZ3Bpb19zY2hfcmVzb3VyY2Uuc3RhcnQgPSBiYXNlX2FkZHI7CisJZ3Bpb19zY2hfcmVzb3VyY2UuZW5kID0gYmFzZV9hZGRyICsgR1BJT19JT19TSVpFIC0gMTsKKworCXJldHVybiBtZmRfYWRkX2RldmljZXMoJmRldi0+ZGV2LCAtMSwKKwkJCWxwY19zY2hfY2VsbHMsIEFSUkFZX1NJWkUobHBjX3NjaF9jZWxscyksIE5VTEwsIDApOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgbHBjX3NjaF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwltZmRfcmVtb3ZlX2RldmljZXMoJmRldi0+ZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGxwY19zY2hfZHJpdmVyID0geworCS5uYW1lCQk9ICJscGNfc2NoIiwKKwkuaWRfdGFibGUJPSBscGNfc2NoX2lkcywKKwkucHJvYmUJCT0gbHBjX3NjaF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGxwY19zY2hfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGxwY19zY2hfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZscGNfc2NoX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBscGNfc2NoX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmxwY19zY2hfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobHBjX3NjaF9pbml0KTsKK21vZHVsZV9leGl0KGxwY19zY2hfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkRlbmlzIFR1cmlzY2hldiA8ZGVuaXNAY29tcHVsYWIuY28uaWw+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxQQyBpbnRlcmZhY2UgZm9yIEludGVsIFBvdWxzYm8gU0NIIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9tYXg4OTI1LWNvcmUuYyBiL2RyaXZlcnMvbWZkL21heDg5MjUtY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZDYzYzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC9tYXg4OTI1LWNvcmUuYwpAQCAtMCwwICsxLDY1NiBAQAorLyoKKyAqIEJhc2UgZHJpdmVyIGZvciBNYXhpbSBNQVg4OTI1CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCUhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0BtYXJ2ZWxsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9tYXg4OTI1Lmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmFja2xpZ2h0X3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUJPSAibWF4ODkyNS1iYWNrbGlnaHQiLAorCQkuc3RhcnQJPSBNQVg4OTI1X1dMRURfTU9ERV9DTlRMLAorCQkuZW5kCT0gTUFYODkyNV9XTEVEX0NOVEwsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWZkX2NlbGwgYmFja2xpZ2h0X2RldnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJtYXg4OTI1LWJhY2tsaWdodCIsCisJCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkJLnJlc291cmNlcwk9ICZiYWNrbGlnaHRfcmVzb3VyY2VzWzBdLAorCQkuaWQJCT0gLTEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG91Y2hfcmVzb3VyY2VzW10gPSB7CisJeworCQkubmFtZQk9ICJtYXg4OTI1LXRzYyIsCisJCS5zdGFydAk9IE1BWDg5MjVfVFNDX0lSUSwKKwkJLmVuZAk9IE1BWDg5MjVfQURDX1JFU19FTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWZkX2NlbGwgdG91Y2hfZGV2c1tdID0geworCXsKKwkJLm5hbWUJCT0gIm1heDg5MjUtdG91Y2giLAorCQkubnVtX3Jlc291cmNlcwk9IDEsCisJCS5yZXNvdXJjZXMJPSAmdG91Y2hfcmVzb3VyY2VzWzBdLAorCQkuaWQJCT0gLTEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcG93ZXJfc3VwcGx5X3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUJPSAibWF4ODkyNS1wb3dlciIsCisJCS5zdGFydAk9IE1BWDg5MjVfQ0hHX0lSUTEsCisJCS5lbmQJPSBNQVg4OTI1X0NIR19JUlExX01BU0ssCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWZkX2NlbGwgcG93ZXJfZGV2c1tdID0geworCXsKKwkJLm5hbWUJCT0gIm1heDg5MjUtcG93ZXIiLAorCQkubnVtX3Jlc291cmNlcwk9IDEsCisJCS5yZXNvdXJjZXMJPSAmcG93ZXJfc3VwcGx5X3Jlc291cmNlc1swXSwKKwkJLmlkCQk9IC0xLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gIm1heDg5MjUtcnRjIiwKKwkJLnN0YXJ0CT0gTUFYODkyNV9SVENfSVJRLAorCQkuZW5kCT0gTUFYODkyNV9SVENfSVJRX01BU0ssCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWZkX2NlbGwgcnRjX2RldnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJtYXg4OTI1LXJ0YyIsCisJCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkJLnJlc291cmNlcwk9ICZydGNfcmVzb3VyY2VzWzBdLAorCQkuaWQJCT0gLTEsCisJfSwKK307CisKKyNkZWZpbmUgTUFYODkyNV9SRUdfUkVTT1VSQ0UoX3N0YXJ0LCBfZW5kKQlcCit7CQkJCQkJXAorCS5zdGFydAk9IE1BWDg5MjVfIyNfc3RhcnQsCQlcCisJLmVuZAk9IE1BWDg5MjVfIyNfZW5kLAkJXAorCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCQlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVndWxhdG9yX3Jlc291cmNlc1tdID0geworCU1BWDg5MjVfUkVHX1JFU09VUkNFKFNEQ1RMMSwgU0RDVEwxKSwKKwlNQVg4OTI1X1JFR19SRVNPVVJDRShTRENUTDIsIFNEQ1RMMiksCisJTUFYODkyNV9SRUdfUkVTT1VSQ0UoU0RDVEwzLCBTRENUTDMpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDEsIExET0NUTDEpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDIsIExET0NUTDIpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDMsIExET0NUTDMpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDQsIExET0NUTDQpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDUsIExET0NUTDUpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDYsIExET0NUTDYpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDcsIExET0NUTDcpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDgsIExET0NUTDgpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDksIExET0NUTDkpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDEwLCBMRE9DVEwxMCksCisJTUFYODkyNV9SRUdfUkVTT1VSQ0UoTERPQ1RMMTEsIExET0NUTDExKSwKKwlNQVg4OTI1X1JFR19SRVNPVVJDRShMRE9DVEwxMiwgTERPQ1RMMTIpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDEzLCBMRE9DVEwxMyksCisJTUFYODkyNV9SRUdfUkVTT1VSQ0UoTERPQ1RMMTQsIExET0NUTDE0KSwKKwlNQVg4OTI1X1JFR19SRVNPVVJDRShMRE9DVEwxNSwgTERPQ1RMMTUpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDE2LCBMRE9DVEwxNiksCisJTUFYODkyNV9SRUdfUkVTT1VSQ0UoTERPQ1RMMTcsIExET0NUTDE3KSwKKwlNQVg4OTI1X1JFR19SRVNPVVJDRShMRE9DVEwxOCwgTERPQ1RMMTgpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDE5LCBMRE9DVEwxOSksCisJTUFYODkyNV9SRUdfUkVTT1VSQ0UoTERPQ1RMMjAsIExET0NUTDIwKSwKK307CisKKyNkZWZpbmUgTUFYODkyNV9SRUdfREVWUyhfaWQpCQkJCQkJXAorewkJCQkJCQkJCVwKKwkubmFtZQkJPSAibWF4ODkyNS1yZWd1bGF0b3IiLAkJCQlcCisJLm51bV9yZXNvdXJjZXMJPSAxLAkJCQkJCVwKKwkucmVzb3VyY2VzCT0gJnJlZ3VsYXRvcl9yZXNvdXJjZXNbTUFYODkyNV9JRF8jI19pZF0sCVwKKwkuaWQJCT0gTUFYODkyNV9JRF8jI19pZCwJCQkJXAorfQorCitzdGF0aWMgc3RydWN0IG1mZF9jZWxsIHJlZ3VsYXRvcl9kZXZzW10gPSB7CisJTUFYODkyNV9SRUdfREVWUyhTRDEpLAorCU1BWDg5MjVfUkVHX0RFVlMoU0QyKSwKKwlNQVg4OTI1X1JFR19ERVZTKFNEMyksCisJTUFYODkyNV9SRUdfREVWUyhMRE8xKSwKKwlNQVg4OTI1X1JFR19ERVZTKExETzIpLAorCU1BWDg5MjVfUkVHX0RFVlMoTERPMyksCisJTUFYODkyNV9SRUdfREVWUyhMRE80KSwKKwlNQVg4OTI1X1JFR19ERVZTKExETzUpLAorCU1BWDg5MjVfUkVHX0RFVlMoTERPNiksCisJTUFYODkyNV9SRUdfREVWUyhMRE83KSwKKwlNQVg4OTI1X1JFR19ERVZTKExETzgpLAorCU1BWDg5MjVfUkVHX0RFVlMoTERPOSksCisJTUFYODkyNV9SRUdfREVWUyhMRE8xMCksCisJTUFYODkyNV9SRUdfREVWUyhMRE8xMSksCisJTUFYODkyNV9SRUdfREVWUyhMRE8xMiksCisJTUFYODkyNV9SRUdfREVWUyhMRE8xMyksCisJTUFYODkyNV9SRUdfREVWUyhMRE8xNCksCisJTUFYODkyNV9SRUdfREVWUyhMRE8xNSksCisJTUFYODkyNV9SRUdfREVWUyhMRE8xNiksCisJTUFYODkyNV9SRUdfREVWUyhMRE8xNyksCisJTUFYODkyNV9SRUdfREVWUyhMRE8xOCksCisJTUFYODkyNV9SRUdfREVWUyhMRE8xOSksCisJTUFYODkyNV9SRUdfREVWUyhMRE8yMCksCit9OworCitlbnVtIHsKKwlGTEFHU19BREMgPSAxLAkvKiByZWdpc3RlciBpbiBBREMgY29tcG9uZW50ICovCisJRkxBR1NfUlRDLAkvKiByZWdpc3RlciBpbiBSVEMgY29tcG9uZW50ICovCit9OworCitzdHJ1Y3QgbWF4ODkyNV9pcnFfZGF0YSB7CisJaW50CXJlZzsKKwlpbnQJbWFza19yZWc7CisJaW50CWVuYWJsZTsJCS8qIGVuYWJsZSBvciBub3QgKi8KKwlpbnQJb2ZmczsJCS8qIGJpdCBvZmZzZXQgaW4gbWFzayByZWdpc3RlciAqLworCWludAlmbGFnczsKKwlpbnQJdHNjX2lycTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF4ODkyNV9pcnFfZGF0YSBtYXg4OTI1X2lycXNbXSA9IHsKKwlbTUFYODkyNV9JUlFfVkNIR19EQ19PVlBdID0geworCQkucmVnCQk9IE1BWDg5MjVfQ0hHX0lSUTEsCisJCS5tYXNrX3JlZwk9IE1BWDg5MjVfQ0hHX0lSUTFfTUFTSywKKwkJLm9mZnMJCT0gMSA8PCAwLAorCX0sCisJW01BWDg5MjVfSVJRX1ZDSEdfRENfRl0gPSB7CisJCS5yZWcJCT0gTUFYODkyNV9DSEdfSVJRMSwKKwkJLm1hc2tfcmVnCT0gTUFYODkyNV9DSEdfSVJRMV9NQVNLLAorCQkub2ZmcwkJPSAxIDw8IDEsCisJfSwKKwlbTUFYODkyNV9JUlFfVkNIR19EQ19SXSA9IHsKKwkJLnJlZwkJPSBNQVg4OTI1X0NIR19JUlExLAorCQkubWFza19yZWcJPSBNQVg4OTI1X0NIR19JUlExX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgMiwKKwl9LAorCVtNQVg4OTI1X0lSUV9WQ0hHX1VTQl9PVlBdID0geworCQkucmVnCQk9IE1BWDg5MjVfQ0hHX0lSUTEsCisJCS5tYXNrX3JlZwk9IE1BWDg5MjVfQ0hHX0lSUTFfTUFTSywKKwkJLm9mZnMJCT0gMSA8PCAzLAorCX0sCisJW01BWDg5MjVfSVJRX1ZDSEdfVVNCX0ZdID0gIHsKKwkJLnJlZwkJPSBNQVg4OTI1X0NIR19JUlExLAorCQkubWFza19yZWcJPSBNQVg4OTI1X0NIR19JUlExX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgNCwKKwl9LAorCVtNQVg4OTI1X0lSUV9WQ0hHX1VTQl9SXSA9IHsKKwkJLnJlZwkJPSBNQVg4OTI1X0NIR19JUlExLAorCQkubWFza19yZWcJPSBNQVg4OTI1X0NIR19JUlExX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgNSwKKwl9LAorCVtNQVg4OTI1X0lSUV9WQ0hHX1RITV9PS19SXSA9IHsKKwkJLnJlZwkJPSBNQVg4OTI1X0NIR19JUlEyLAorCQkubWFza19yZWcJPSBNQVg4OTI1X0NIR19JUlEyX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgMCwKKwl9LAorCVtNQVg4OTI1X0lSUV9WQ0hHX1RITV9PS19GXSA9IHsKKwkJLnJlZwkJPSBNQVg4OTI1X0NIR19JUlEyLAorCQkubWFza19yZWcJPSBNQVg4OTI1X0NIR19JUlEyX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgMSwKKwl9LAorCVtNQVg4OTI1X0lSUV9WQ0hHX1NZU0xPV19GXSA9IHsKKwkJLnJlZwkJPSBNQVg4OTI1X0NIR19JUlEyLAorCQkubWFza19yZWcJPSBNQVg4OTI1X0NIR19JUlEyX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgMiwKKwl9LAorCVtNQVg4OTI1X0lSUV9WQ0hHX1NZU0xPV19SXSA9IHsKKwkJLnJlZwkJPSBNQVg4OTI1X0NIR19JUlEyLAorCQkubWFza19yZWcJPSBNQVg4OTI1X0NIR19JUlEyX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgMywKKwl9LAorCVtNQVg4OTI1X0lSUV9WQ0hHX1JTVF0gPSB7CisJCS5yZWcJCT0gTUFYODkyNV9DSEdfSVJRMiwKKwkJLm1hc2tfcmVnCT0gTUFYODkyNV9DSEdfSVJRMl9NQVNLLAorCQkub2ZmcwkJPSAxIDw8IDQsCisJfSwKKwlbTUFYODkyNV9JUlFfVkNIR19ET05FXSA9IHsKKwkJLnJlZwkJPSBNQVg4OTI1X0NIR19JUlEyLAorCQkubWFza19yZWcJPSBNQVg4OTI1X0NIR19JUlEyX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgNSwKKwl9LAorCVtNQVg4OTI1X0lSUV9WQ0hHX1RPUE9GRl0gPSB7CisJCS5yZWcJCT0gTUFYODkyNV9DSEdfSVJRMiwKKwkJLm1hc2tfcmVnCT0gTUFYODkyNV9DSEdfSVJRMl9NQVNLLAorCQkub2ZmcwkJPSAxIDw8IDYsCisJfSwKKwlbTUFYODkyNV9JUlFfVkNIR19UTVJfRkFVTFRdID0geworCQkucmVnCQk9IE1BWDg5MjVfQ0hHX0lSUTIsCisJCS5tYXNrX3JlZwk9IE1BWDg5MjVfQ0hHX0lSUTJfTUFTSywKKwkJLm9mZnMJCT0gMSA8PCA3LAorCX0sCisJW01BWDg5MjVfSVJRX0dQTV9SU1RJTl0gPSB7CisJCS5yZWcJCT0gTUFYODkyNV9PTl9PRkZfSVJRMSwKKwkJLm1hc2tfcmVnCT0gTUFYODkyNV9PTl9PRkZfSVJRMV9NQVNLLAorCQkub2ZmcwkJPSAxIDw8IDAsCisJfSwKKwlbTUFYODkyNV9JUlFfR1BNX01QTF0gPSB7CisJCS5yZWcJCT0gTUFYODkyNV9PTl9PRkZfSVJRMSwKKwkJLm1hc2tfcmVnCT0gTUFYODkyNV9PTl9PRkZfSVJRMV9NQVNLLAorCQkub2ZmcwkJPSAxIDw8IDEsCisJfSwKKwlbTUFYODkyNV9JUlFfR1BNX1NXXzNTRUNdID0geworCQkucmVnCQk9IE1BWDg5MjVfT05fT0ZGX0lSUTEsCisJCS5tYXNrX3JlZwk9IE1BWDg5MjVfT05fT0ZGX0lSUTFfTUFTSywKKwkJLm9mZnMJCT0gMSA8PCAyLAorCX0sCisJW01BWDg5MjVfSVJRX0dQTV9FWFRPTl9GXSA9IHsKKwkJLnJlZwkJPSBNQVg4OTI1X09OX09GRl9JUlExLAorCQkubWFza19yZWcJPSBNQVg4OTI1X09OX09GRl9JUlExX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgMywKKwl9LAorCVtNQVg4OTI1X0lSUV9HUE1fRVhUT05fUl0gPSB7CisJCS5yZWcJCT0gTUFYODkyNV9PTl9PRkZfSVJRMSwKKwkJLm1hc2tfcmVnCT0gTUFYODkyNV9PTl9PRkZfSVJRMV9NQVNLLAorCQkub2ZmcwkJPSAxIDw8IDQsCisJfSwKKwlbTUFYODkyNV9JUlFfR1BNX1NXXzFTRUNdID0geworCQkucmVnCQk9IE1BWDg5MjVfT05fT0ZGX0lSUTEsCisJCS5tYXNrX3JlZwk9IE1BWDg5MjVfT05fT0ZGX0lSUTFfTUFTSywKKwkJLm9mZnMJCT0gMSA8PCA1LAorCX0sCisJW01BWDg5MjVfSVJRX0dQTV9TV19GXSA9IHsKKwkJLnJlZwkJPSBNQVg4OTI1X09OX09GRl9JUlExLAorCQkubWFza19yZWcJPSBNQVg4OTI1X09OX09GRl9JUlExX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgNiwKKwl9LAorCVtNQVg4OTI1X0lSUV9HUE1fU1dfUl0gPSB7CisJCS5yZWcJCT0gTUFYODkyNV9PTl9PRkZfSVJRMSwKKwkJLm1hc2tfcmVnCT0gTUFYODkyNV9PTl9PRkZfSVJRMV9NQVNLLAorCQkub2ZmcwkJPSAxIDw8IDcsCisJfSwKKwlbTUFYODkyNV9JUlFfR1BNX1NZU0NLRU5fRl0gPSB7CisJCS5yZWcJCT0gTUFYODkyNV9PTl9PRkZfSVJRMiwKKwkJLm1hc2tfcmVnCT0gTUFYODkyNV9PTl9PRkZfSVJRMl9NQVNLLAorCQkub2ZmcwkJPSAxIDw8IDAsCisJfSwKKwlbTUFYODkyNV9JUlFfR1BNX1NZU0NLRU5fUl0gPSB7CisJCS5yZWcJCT0gTUFYODkyNV9PTl9PRkZfSVJRMiwKKwkJLm1hc2tfcmVnCT0gTUFYODkyNV9PTl9PRkZfSVJRMl9NQVNLLAorCQkub2ZmcwkJPSAxIDw8IDEsCisJfSwKKwlbTUFYODkyNV9JUlFfUlRDX0FMQVJNMV0gPSB7CisJCS5yZWcJCT0gTUFYODkyNV9SVENfSVJRLAorCQkubWFza19yZWcJPSBNQVg4OTI1X1JUQ19JUlFfTUFTSywKKwkJLm9mZnMJCT0gMSA8PCAyLAorCQkuZmxhZ3MJCT0gRkxBR1NfUlRDLAorCX0sCisJW01BWDg5MjVfSVJRX1JUQ19BTEFSTTBdID0geworCQkucmVnCQk9IE1BWDg5MjVfUlRDX0lSUSwKKwkJLm1hc2tfcmVnCT0gTUFYODkyNV9SVENfSVJRX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgMywKKwkJLmZsYWdzCQk9IEZMQUdTX1JUQywKKwl9LAorCVtNQVg4OTI1X0lSUV9UU0NfU1RJQ0tdID0geworCQkucmVnCQk9IE1BWDg5MjVfVFNDX0lSUSwKKwkJLm1hc2tfcmVnCT0gTUFYODkyNV9UU0NfSVJRX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgMCwKKwkJLmZsYWdzCQk9IEZMQUdTX0FEQywKKwkJLnRzY19pcnEJPSAxLAorCX0sCisJW01BWDg5MjVfSVJRX1RTQ19OU1RJQ0tdID0geworCQkucmVnCQk9IE1BWDg5MjVfVFNDX0lSUSwKKwkJLm1hc2tfcmVnCT0gTUFYODkyNV9UU0NfSVJRX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgMSwKKwkJLmZsYWdzCQk9IEZMQUdTX0FEQywKKwkJLnRzY19pcnEJPSAxLAorCX0sCit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtYXg4OTI1X2lycV9kYXRhICppcnFfdG9fbWF4ODkyNShzdHJ1Y3QgbWF4ODkyNV9jaGlwICpjaGlwLAorCQkJCQkJICAgICAgaW50IGlycSkKK3sKKwlyZXR1cm4gJm1heDg5MjVfaXJxc1tpcnEgLSBjaGlwLT5pcnFfYmFzZV07Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtYXg4OTI1X2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtYXg4OTI1X2NoaXAgKmNoaXAgPSBkYXRhOworCXN0cnVjdCBtYXg4OTI1X2lycV9kYXRhICppcnFfZGF0YTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjOworCWludCByZWFkX3JlZyA9IC0xLCB2YWx1ZSA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtYXg4OTI1X2lycXMpOyBpKyspIHsKKwkJaXJxX2RhdGEgPSAmbWF4ODkyNV9pcnFzW2ldOworCQkvKiBUU0MgSVJRIHNob3VsZCBiZSBzZXJ2aWNlZCBpbiBtYXg4OTI1X3RzY19pcnEoKSAqLworCQlpZiAoaXJxX2RhdGEtPnRzY19pcnEpCisJCQljb250aW51ZTsKKwkJaWYgKGlycV9kYXRhLT5mbGFncyA9PSBGTEFHU19SVEMpCisJCQlpMmMgPSBjaGlwLT5ydGM7CisJCWVsc2UgaWYgKGlycV9kYXRhLT5mbGFncyA9PSBGTEFHU19BREMpCisJCQlpMmMgPSBjaGlwLT5hZGM7CisJCWVsc2UKKwkJCWkyYyA9IGNoaXAtPmkyYzsKKwkJaWYgKHJlYWRfcmVnICE9IGlycV9kYXRhLT5yZWcpIHsKKwkJCXJlYWRfcmVnID0gaXJxX2RhdGEtPnJlZzsKKwkJCXZhbHVlID0gbWF4ODkyNV9yZWdfcmVhZChpMmMsIGlycV9kYXRhLT5yZWcpOworCQl9CisJCWlmICh2YWx1ZSAmIGlycV9kYXRhLT5lbmFibGUpCisJCQloYW5kbGVfbmVzdGVkX2lycShjaGlwLT5pcnFfYmFzZSArIGkpOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtYXg4OTI1X3RzY19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbWF4ODkyNV9jaGlwICpjaGlwID0gZGF0YTsKKwlzdHJ1Y3QgbWF4ODkyNV9pcnFfZGF0YSAqaXJxX2RhdGE7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYzsKKwlpbnQgcmVhZF9yZWcgPSAtMSwgdmFsdWUgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWF4ODkyNV9pcnFzKTsgaSsrKSB7CisJCWlycV9kYXRhID0gJm1heDg5MjVfaXJxc1tpXTsKKwkJLyogbm9uIFRTQyBJUlEgc2hvdWxkIGJlIHNlcnZpY2VkIGluIG1heDg5MjVfaXJxKCkgKi8KKwkJaWYgKCFpcnFfZGF0YS0+dHNjX2lycSkKKwkJCWNvbnRpbnVlOworCQlpZiAoaXJxX2RhdGEtPmZsYWdzID09IEZMQUdTX1JUQykKKwkJCWkyYyA9IGNoaXAtPnJ0YzsKKwkJZWxzZSBpZiAoaXJxX2RhdGEtPmZsYWdzID09IEZMQUdTX0FEQykKKwkJCWkyYyA9IGNoaXAtPmFkYzsKKwkJZWxzZQorCQkJaTJjID0gY2hpcC0+aTJjOworCQlpZiAocmVhZF9yZWcgIT0gaXJxX2RhdGEtPnJlZykgeworCQkJcmVhZF9yZWcgPSBpcnFfZGF0YS0+cmVnOworCQkJdmFsdWUgPSBtYXg4OTI1X3JlZ19yZWFkKGkyYywgaXJxX2RhdGEtPnJlZyk7CisJCX0KKwkJaWYgKHZhbHVlICYgaXJxX2RhdGEtPmVuYWJsZSkKKwkJCWhhbmRsZV9uZXN0ZWRfaXJxKGNoaXAtPmlycV9iYXNlICsgaSk7CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgbWF4ODkyNV9pcnFfbG9jayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBtYXg4OTI1X2NoaXAgKmNoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCisJbXV0ZXhfbG9jaygmY2hpcC0+aXJxX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBtYXg4OTI1X2lycV9zeW5jX3VubG9jayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBtYXg4OTI1X2NoaXAgKmNoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXN0cnVjdCBtYXg4OTI1X2lycV9kYXRhICppcnFfZGF0YTsKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBjYWNoZV9jaGdbMl0gPSB7MHhmZiwgMHhmZn07CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgY2FjaGVfb25bMl0gPSB7MHhmZiwgMHhmZn07CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgY2FjaGVfcnRjID0gMHhmZiwgY2FjaGVfdHNjID0gMHhmZjsKKwl1bnNpZ25lZCBjaGFyIGlycV9jaGdbMl0sIGlycV9vblsyXTsKKwl1bnNpZ25lZCBjaGFyIGlycV9ydGMsIGlycV90c2M7CisJaW50IGk7CisKKwkvKiBMb2FkIGNhY2hlZCB2YWx1ZS4gSW4gaW5pdGlhbCwgYWxsIElSUXMgYXJlIG1hc2tlZCAqLworCWlycV9jaGdbMF0gPSBjYWNoZV9jaGdbMF07CisJaXJxX2NoZ1sxXSA9IGNhY2hlX2NoZ1sxXTsKKwlpcnFfb25bMF0gPSBjYWNoZV9vblswXTsKKwlpcnFfb25bMV0gPSBjYWNoZV9vblsxXTsKKwlpcnFfcnRjID0gY2FjaGVfcnRjOworCWlycV90c2MgPSBjYWNoZV90c2M7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWF4ODkyNV9pcnFzKTsgaSsrKSB7CisJCWlycV9kYXRhID0gJm1heDg5MjVfaXJxc1tpXTsKKwkJc3dpdGNoIChpcnFfZGF0YS0+bWFza19yZWcpIHsKKwkJY2FzZSBNQVg4OTI1X0NIR19JUlExX01BU0s6CisJCQlpcnFfY2hnWzBdICY9IGlycV9kYXRhLT5lbmFibGU7CisJCQlicmVhazsKKwkJY2FzZSBNQVg4OTI1X0NIR19JUlEyX01BU0s6CisJCQlpcnFfY2hnWzFdICY9IGlycV9kYXRhLT5lbmFibGU7CisJCQlicmVhazsKKwkJY2FzZSBNQVg4OTI1X09OX09GRl9JUlExX01BU0s6CisJCQlpcnFfb25bMF0gJj0gaXJxX2RhdGEtPmVuYWJsZTsKKwkJCWJyZWFrOworCQljYXNlIE1BWDg5MjVfT05fT0ZGX0lSUTJfTUFTSzoKKwkJCWlycV9vblsxXSAmPSBpcnFfZGF0YS0+ZW5hYmxlOworCQkJYnJlYWs7CisJCWNhc2UgTUFYODkyNV9SVENfSVJRX01BU0s6CisJCQlpcnFfcnRjICY9IGlycV9kYXRhLT5lbmFibGU7CisJCQlicmVhazsKKwkJY2FzZSBNQVg4OTI1X1RTQ19JUlFfTUFTSzoKKwkJCWlycV90c2MgJj0gaXJxX2RhdGEtPmVuYWJsZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X2VycihjaGlwLT5kZXYsICJ3cm9uZyBJUlFcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9CisJLyogdXBkYXRlIG1hc2sgaW50byByZWdpc3RlcnMgKi8KKwlpZiAoY2FjaGVfY2hnWzBdICE9IGlycV9jaGdbMF0pIHsKKwkJY2FjaGVfY2hnWzBdID0gaXJxX2NoZ1swXTsKKwkJbWF4ODkyNV9yZWdfd3JpdGUoY2hpcC0+aTJjLCBNQVg4OTI1X0NIR19JUlExX01BU0ssCisJCQlpcnFfY2hnWzBdKTsKKwl9CisJaWYgKGNhY2hlX2NoZ1sxXSAhPSBpcnFfY2hnWzFdKSB7CisJCWNhY2hlX2NoZ1sxXSA9IGlycV9jaGdbMV07CisJCW1heDg5MjVfcmVnX3dyaXRlKGNoaXAtPmkyYywgTUFYODkyNV9DSEdfSVJRMl9NQVNLLAorCQkJaXJxX2NoZ1sxXSk7CisJfQorCWlmIChjYWNoZV9vblswXSAhPSBpcnFfb25bMF0pIHsKKwkJY2FjaGVfb25bMF0gPSBpcnFfb25bMF07CisJCW1heDg5MjVfcmVnX3dyaXRlKGNoaXAtPmkyYywgTUFYODkyNV9PTl9PRkZfSVJRMV9NQVNLLAorCQkJCWlycV9vblswXSk7CisJfQorCWlmIChjYWNoZV9vblsxXSAhPSBpcnFfb25bMV0pIHsKKwkJY2FjaGVfb25bMV0gPSBpcnFfb25bMV07CisJCW1heDg5MjVfcmVnX3dyaXRlKGNoaXAtPmkyYywgTUFYODkyNV9PTl9PRkZfSVJRMl9NQVNLLAorCQkJCWlycV9vblsxXSk7CisJfQorCWlmIChjYWNoZV9ydGMgIT0gaXJxX3J0YykgeworCQljYWNoZV9ydGMgPSBpcnFfcnRjOworCQltYXg4OTI1X3JlZ193cml0ZShjaGlwLT5ydGMsIE1BWDg5MjVfUlRDX0lSUV9NQVNLLCBpcnFfcnRjKTsKKwl9CisJaWYgKGNhY2hlX3RzYyAhPSBpcnFfdHNjKSB7CisJCWNhY2hlX3RzYyA9IGlycV90c2M7CisJCW1heDg5MjVfcmVnX3dyaXRlKGNoaXAtPmFkYywgTUFYODkyNV9UU0NfSVJRX01BU0ssIGlycV90c2MpOworCX0KKworCW11dGV4X3VubG9jaygmY2hpcC0+aXJxX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBtYXg4OTI1X2lycV9lbmFibGUodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgbWF4ODkyNV9jaGlwICpjaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwltYXg4OTI1X2lycXNbaXJxIC0gY2hpcC0+aXJxX2Jhc2VdLmVuYWJsZQorCQk9IG1heDg5MjVfaXJxc1tpcnEgLSBjaGlwLT5pcnFfYmFzZV0ub2ZmczsKK30KKworc3RhdGljIHZvaWQgbWF4ODkyNV9pcnFfZGlzYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBtYXg4OTI1X2NoaXAgKmNoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCW1heDg5MjVfaXJxc1tpcnEgLSBjaGlwLT5pcnFfYmFzZV0uZW5hYmxlID0gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtYXg4OTI1X2lycV9jaGlwID0geworCS5uYW1lCQk9ICJtYXg4OTI1IiwKKwkuYnVzX2xvY2sJPSBtYXg4OTI1X2lycV9sb2NrLAorCS5idXNfc3luY191bmxvY2sgPSBtYXg4OTI1X2lycV9zeW5jX3VubG9jaywKKwkuZW5hYmxlCQk9IG1heDg5MjVfaXJxX2VuYWJsZSwKKwkuZGlzYWJsZQk9IG1heDg5MjVfaXJxX2Rpc2FibGUsCit9OworCitzdGF0aWMgaW50IG1heDg5MjVfaXJxX2luaXQoc3RydWN0IG1heDg5MjVfY2hpcCAqY2hpcCwgaW50IGlycSwKKwkJCSAgICBzdHJ1Y3QgbWF4ODkyNV9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX09ORVNIT1Q7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCWludCBpLCByZXQ7CisJaW50IF9faXJxOworCisJaWYgKCFwZGF0YSB8fCAhcGRhdGEtPmlycV9iYXNlKSB7CisJCWRldl93YXJuKGNoaXAtPmRldiwgIk5vIGludGVycnVwdCBzdXBwb3J0IG9uIElSUSBiYXNlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qIGNsZWFyIGFsbCBpbnRlcnJ1cHRzICovCisJbWF4ODkyNV9yZWdfcmVhZChjaGlwLT5pMmMsIE1BWDg5MjVfQ0hHX0lSUTEpOworCW1heDg5MjVfcmVnX3JlYWQoY2hpcC0+aTJjLCBNQVg4OTI1X0NIR19JUlEyKTsKKwltYXg4OTI1X3JlZ19yZWFkKGNoaXAtPmkyYywgTUFYODkyNV9PTl9PRkZfSVJRMSk7CisJbWF4ODkyNV9yZWdfcmVhZChjaGlwLT5pMmMsIE1BWDg5MjVfT05fT0ZGX0lSUTIpOworCW1heDg5MjVfcmVnX3JlYWQoY2hpcC0+cnRjLCBNQVg4OTI1X1JUQ19JUlEpOworCW1heDg5MjVfcmVnX3JlYWQoY2hpcC0+YWRjLCBNQVg4OTI1X1RTQ19JUlEpOworCS8qIG1hc2sgYWxsIGludGVycnVwdHMgKi8KKwltYXg4OTI1X3JlZ193cml0ZShjaGlwLT5ydGMsIE1BWDg5MjVfQUxBUk0wX0NOVEwsIDApOworCW1heDg5MjVfcmVnX3dyaXRlKGNoaXAtPnJ0YywgTUFYODkyNV9BTEFSTTFfQ05UTCwgMCk7CisJbWF4ODkyNV9yZWdfd3JpdGUoY2hpcC0+aTJjLCBNQVg4OTI1X0NIR19JUlExX01BU0ssIDB4ZmYpOworCW1heDg5MjVfcmVnX3dyaXRlKGNoaXAtPmkyYywgTUFYODkyNV9DSEdfSVJRMl9NQVNLLCAweGZmKTsKKwltYXg4OTI1X3JlZ193cml0ZShjaGlwLT5pMmMsIE1BWDg5MjVfT05fT0ZGX0lSUTFfTUFTSywgMHhmZik7CisJbWF4ODkyNV9yZWdfd3JpdGUoY2hpcC0+aTJjLCBNQVg4OTI1X09OX09GRl9JUlEyX01BU0ssIDB4ZmYpOworCW1heDg5MjVfcmVnX3dyaXRlKGNoaXAtPnJ0YywgTUFYODkyNV9SVENfSVJRX01BU0ssIDB4ZmYpOworCW1heDg5MjVfcmVnX3dyaXRlKGNoaXAtPmFkYywgTUFYODkyNV9UU0NfSVJRX01BU0ssIDB4ZmYpOworCisJbXV0ZXhfaW5pdCgmY2hpcC0+aXJxX2xvY2spOworCWNoaXAtPmNvcmVfaXJxID0gaXJxOworCWNoaXAtPmlycV9iYXNlID0gcGRhdGEtPmlycV9iYXNlOworCWRlc2MgPSBpcnFfdG9fZGVzYyhjaGlwLT5jb3JlX2lycSk7CisKKwkvKiByZWdpc3RlciB3aXRoIGdlbmlycSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1heDg5MjVfaXJxcyk7IGkrKykgeworCQlfX2lycSA9IGkgKyBjaGlwLT5pcnFfYmFzZTsKKwkJc2V0X2lycV9jaGlwX2RhdGEoX19pcnEsIGNoaXApOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoX19pcnEsICZtYXg4OTI1X2lycV9jaGlwLAorCQkJCQkgaGFuZGxlX2VkZ2VfaXJxKTsKKwkJc2V0X2lycV9uZXN0ZWRfdGhyZWFkKF9faXJxLCAxKTsKKyNpZmRlZiBDT05GSUdfQVJNCisJCXNldF9pcnFfZmxhZ3MoX19pcnEsIElSUUZfVkFMSUQpOworI2Vsc2UKKwkJc2V0X2lycV9ub3Byb2JlKF9faXJxKTsKKyNlbmRpZgorCX0KKwlpZiAoIWlycSkgeworCQlkZXZfd2FybihjaGlwLT5kZXYsICJObyBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBjb3JlIElSUVxuIik7CisJCWdvdG8gdHNjX2lycTsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShpcnEsIE5VTEwsIG1heDg5MjVfaXJxLCBmbGFncywKKwkJCQkgICAibWF4ODkyNSIsIGNoaXApOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBjb3JlIElSUTogJWRcbiIsIHJldCk7CisJCWNoaXAtPmNvcmVfaXJxID0gMDsKKwl9Cit0c2NfaXJxOgorCWlmICghcGRhdGEtPnRzY19pcnEpIHsKKwkJZGV2X3dhcm4oY2hpcC0+ZGV2LCAiTm8gaW50ZXJydXB0IHN1cHBvcnQgb24gVFNDIElSUVxuIik7CisJCXJldHVybiAwOworCX0KKwljaGlwLT50c2NfaXJxID0gcGRhdGEtPnRzY19pcnE7CisKKwlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShjaGlwLT50c2NfaXJxLCBOVUxMLCBtYXg4OTI1X3RzY19pcnEsCisJCQkJICAgZmxhZ3MsICJtYXg4OTI1LXRzYyIsIGNoaXApOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBUU0MgSVJROiAlZFxuIiwgcmV0KTsKKwkJY2hpcC0+dHNjX2lycSA9IDA7CisJfQorCXJldHVybiAwOworfQorCitpbnQgX19kZXZpbml0IG1heDg5MjVfZGV2aWNlX2luaXQoc3RydWN0IG1heDg5MjVfY2hpcCAqY2hpcCwKKwkJCQkgIHN0cnVjdCBtYXg4OTI1X3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCWludCByZXQ7CisKKwltYXg4OTI1X2lycV9pbml0KGNoaXAsIGNoaXAtPmkyYy0+aXJxLCBwZGF0YSk7CisKKwlpZiAocGRhdGEgJiYgKHBkYXRhLT5wb3dlciB8fCBwZGF0YS0+dG91Y2gpKSB7CisJCS8qIGVuYWJsZSBBREMgdG8gY29udHJvbCBpbnRlcm5hbCByZWZlcmVuY2UgKi8KKwkJbWF4ODkyNV9zZXRfYml0cyhjaGlwLT5pMmMsIE1BWDg5MjVfUkVTRVRfQ05GRywgMSwgMSk7CisJCS8qIGVuYWJsZSBpbnRlcm5hbCByZWZlcmVuY2UgZm9yIEFEQyAqLworCQltYXg4OTI1X3NldF9iaXRzKGNoaXAtPmFkYywgTUFYODkyNV9UU0NfQ05GRzEsIDMsIDIpOworCQkvKiBjaGVjayBmb3IgaW50ZXJuYWwgcmVmZXJlbmNlIElSUSAqLworCQlkbyB7CisJCQlyZXQgPSBtYXg4OTI1X3JlZ19yZWFkKGNoaXAtPmFkYywgTUFYODkyNV9UU0NfSVJRKTsKKwkJfSB3aGlsZSAocmV0ICYgTUFYODkyNV9OUkVGX09LKTsKKwkJLyogZW5hYWJsZSBBREMgc2NoZWR1bGVyLCBpbnRlcnZhbCBpcyAxIHNlY29uZCAqLworCQltYXg4OTI1X3NldF9iaXRzKGNoaXAtPmFkYywgTUFYODkyNV9BRENfU0NIRUQsIDMsIDIpOworCX0KKworCS8qIGVuYWJsZSBNb21lbnRhcnkgUG93ZXIgTG9zcyAqLworCW1heDg5MjVfc2V0X2JpdHMoY2hpcC0+cnRjLCBNQVg4OTI1X01QTF9DTlRMLCAxIDw8IDQsIDEgPDwgNCk7CisKKwlyZXQgPSBtZmRfYWRkX2RldmljZXMoY2hpcC0+ZGV2LCAwLCAmcnRjX2RldnNbMF0sCisJCQkgICAgICBBUlJBWV9TSVpFKHJ0Y19kZXZzKSwKKwkJCSAgICAgICZydGNfcmVzb3VyY2VzWzBdLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNoaXAtPmRldiwgIkZhaWxlZCB0byBhZGQgcnRjIHN1YmRldlxuIik7CisJCWdvdG8gb3V0OworCX0KKwlpZiAocGRhdGEgJiYgcGRhdGEtPnJlZ3VsYXRvclswXSkgeworCQlyZXQgPSBtZmRfYWRkX2RldmljZXMoY2hpcC0+ZGV2LCAwLCAmcmVndWxhdG9yX2RldnNbMF0sCisJCQkJICAgICAgQVJSQVlfU0laRShyZWd1bGF0b3JfZGV2cyksCisJCQkJICAgICAgJnJlZ3VsYXRvcl9yZXNvdXJjZXNbMF0sIDApOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gYWRkIHJlZ3VsYXRvciBzdWJkZXZcbiIpOworCQkJZ290byBvdXRfZGV2OworCQl9CisJfQorCisJaWYgKHBkYXRhICYmIHBkYXRhLT5iYWNrbGlnaHQpIHsKKwkJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKGNoaXAtPmRldiwgMCwgJmJhY2tsaWdodF9kZXZzWzBdLAorCQkJCSAgICAgIEFSUkFZX1NJWkUoYmFja2xpZ2h0X2RldnMpLAorCQkJCSAgICAgICZiYWNrbGlnaHRfcmVzb3VyY2VzWzBdLCAwKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoY2hpcC0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBiYWNrbGlnaHQgc3ViZGV2XG4iKTsKKwkJCWdvdG8gb3V0X2RldjsKKwkJfQorCX0KKworCWlmIChwZGF0YSAmJiBwZGF0YS0+cG93ZXIpIHsKKwkJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKGNoaXAtPmRldiwgMCwgJnBvd2VyX2RldnNbMF0sCisJCQkJCUFSUkFZX1NJWkUocG93ZXJfZGV2cyksCisJCQkJCSZwb3dlcl9zdXBwbHlfcmVzb3VyY2VzWzBdLCAwKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoY2hpcC0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBwb3dlciBzdXBwbHkgIgorCQkJCSJzdWJkZXZcbiIpOworCQkJZ290byBvdXRfZGV2OworCQl9CisJfQorCisJaWYgKHBkYXRhICYmIHBkYXRhLT50b3VjaCkgeworCQlyZXQgPSBtZmRfYWRkX2RldmljZXMoY2hpcC0+ZGV2LCAwLCAmdG91Y2hfZGV2c1swXSwKKwkJCQkgICAgICBBUlJBWV9TSVpFKHRvdWNoX2RldnMpLAorCQkJCSAgICAgICZ0b3VjaF9yZXNvdXJjZXNbMF0sIDApOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gYWRkIHRvdWNoIHN1YmRldlxuIik7CisJCQlnb3RvIG91dF9kZXY7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK291dF9kZXY6CisJbWZkX3JlbW92ZV9kZXZpY2VzKGNoaXAtPmRldik7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBfX2RldmV4aXQgbWF4ODkyNV9kZXZpY2VfZXhpdChzdHJ1Y3QgbWF4ODkyNV9jaGlwICpjaGlwKQoreworCWlmIChjaGlwLT5jb3JlX2lycSkKKwkJZnJlZV9pcnEoY2hpcC0+Y29yZV9pcnEsIGNoaXApOworCWlmIChjaGlwLT50c2NfaXJxKQorCQlmcmVlX2lycShjaGlwLT50c2NfaXJxLCBjaGlwKTsKKwltZmRfcmVtb3ZlX2RldmljZXMoY2hpcC0+ZGV2KTsKK30KKworCitNT0RVTEVfREVTQ1JJUFRJT04oIlBNSUMgRHJpdmVyIGZvciBNYXhpbSBNQVg4OTI1Iik7CitNT0RVTEVfQVVUSE9SKCJIYW9qaWFuIFpodWFuZyA8aGFvamlhbi56aHVhbmdAbWFydmVsbC5jb20iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL21heDg5MjUtaTJjLmMgYi9kcml2ZXJzL21mZC9tYXg4OTI1LWkyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYjg4M2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC9tYXg4OTI1LWkyYy5jCkBAIC0wLDAgKzEsMjExIEBACisvKgorICogSTJDIGRyaXZlciBmb3IgTWF4aW0gTUFYODkyNQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoJSGFvamlhbiBaaHVhbmcgPGhhb2ppYW4uemh1YW5nQG1hcnZlbGwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvbWF4ODkyNS5oPgorCisjZGVmaW5lIFJUQ19JMkNfQUREUgkJMHg2OAorI2RlZmluZSBBRENfSTJDX0FERFIJCTB4NDcKKworc3RhdGljIGlubGluZSBpbnQgbWF4ODkyNV9yZWFkX2RldmljZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJCSAgICAgIGludCByZWcsIGludCBieXRlcywgdm9pZCAqZGVzdCkKK3sKKwlpbnQgcmV0OworCisJaWYgKGJ5dGVzID4gMSkKKwkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoaTJjLCByZWcsIGJ5dGVzLCBkZXN0KTsKKwllbHNlIHsKKwkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGkyYywgcmVnKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQkqKHVuc2lnbmVkIGNoYXIgKilkZXN0ID0gKHVuc2lnbmVkIGNoYXIpcmV0OworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCBtYXg4OTI1X3dyaXRlX2RldmljZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJCSAgICAgICBpbnQgcmVnLCBpbnQgYnl0ZXMsIHZvaWQgKnNyYykKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZltieXRlcyArIDFdOworCWludCByZXQ7CisKKwlidWZbMF0gPSAodW5zaWduZWQgY2hhcilyZWc7CisJbWVtY3B5KCZidWZbMV0sIHNyYywgYnl0ZXMpOworCisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGkyYywgYnVmLCBieXRlcyArIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAwOworfQorCitpbnQgbWF4ODkyNV9yZWdfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBpbnQgcmVnKQoreworCXN0cnVjdCBtYXg4OTI1X2NoaXAgKmNoaXAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoaTJjKTsKKwl1bnNpZ25lZCBjaGFyIGRhdGEgPSAwOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZjaGlwLT5pb19sb2NrKTsKKwlyZXQgPSBtYXg4OTI1X3JlYWRfZGV2aWNlKGkyYywgcmVnLCAxLCAmZGF0YSk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5pb19sb2NrKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWVsc2UKKwkJcmV0dXJuIChpbnQpZGF0YTsKK30KK0VYUE9SVF9TWU1CT0wobWF4ODkyNV9yZWdfcmVhZCk7CisKK2ludCBtYXg4OTI1X3JlZ193cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBpbnQgcmVnLAorCQl1bnNpZ25lZCBjaGFyIGRhdGEpCit7CisJc3RydWN0IG1heDg5MjVfY2hpcCAqY2hpcCA9IGkyY19nZXRfY2xpZW50ZGF0YShpMmMpOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZjaGlwLT5pb19sb2NrKTsKKwlyZXQgPSBtYXg4OTI1X3dyaXRlX2RldmljZShpMmMsIHJlZywgMSwgJmRhdGEpOworCW11dGV4X3VubG9jaygmY2hpcC0+aW9fbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChtYXg4OTI1X3JlZ193cml0ZSk7CisKK2ludCBtYXg4OTI1X2J1bGtfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBpbnQgcmVnLAorCQlpbnQgY291bnQsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbWF4ODkyNV9jaGlwICpjaGlwID0gaTJjX2dldF9jbGllbnRkYXRhKGkyYyk7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmNoaXAtPmlvX2xvY2spOworCXJldCA9IG1heDg5MjVfcmVhZF9kZXZpY2UoaTJjLCByZWcsIGNvdW50LCBidWYpOworCW11dGV4X3VubG9jaygmY2hpcC0+aW9fbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChtYXg4OTI1X2J1bGtfcmVhZCk7CisKK2ludCBtYXg4OTI1X2J1bGtfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmkyYywgaW50IHJlZywKKwkJaW50IGNvdW50LCB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJc3RydWN0IG1heDg5MjVfY2hpcCAqY2hpcCA9IGkyY19nZXRfY2xpZW50ZGF0YShpMmMpOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZjaGlwLT5pb19sb2NrKTsKKwlyZXQgPSBtYXg4OTI1X3dyaXRlX2RldmljZShpMmMsIHJlZywgY291bnQsIGJ1Zik7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5pb19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKG1heDg5MjVfYnVsa193cml0ZSk7CisKK2ludCBtYXg4OTI1X3NldF9iaXRzKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIGludCByZWcsCisJCXVuc2lnbmVkIGNoYXIgbWFzaywgdW5zaWduZWQgY2hhciBkYXRhKQoreworCXN0cnVjdCBtYXg4OTI1X2NoaXAgKmNoaXAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoaTJjKTsKKwl1bnNpZ25lZCBjaGFyIHZhbHVlOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZjaGlwLT5pb19sb2NrKTsKKwlyZXQgPSBtYXg4OTI1X3JlYWRfZGV2aWNlKGkyYywgcmVnLCAxLCAmdmFsdWUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKwl2YWx1ZSAmPSB+bWFzazsKKwl2YWx1ZSB8PSBkYXRhOworCXJldCA9IG1heDg5MjVfd3JpdGVfZGV2aWNlKGkyYywgcmVnLCAxLCAmdmFsdWUpOworb3V0OgorCW11dGV4X3VubG9jaygmY2hpcC0+aW9fbG9jayk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wobWF4ODkyNV9zZXRfYml0cyk7CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG1heDg5MjVfaWRfdGFibGVbXSA9IHsKKwl7ICJtYXg4OTI1IiwgMCB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbWF4ODkyNV9pZF90YWJsZSk7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1heDg5MjVfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IG1heDg5MjVfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0YXRpYyBzdHJ1Y3QgbWF4ODkyNV9jaGlwICpjaGlwOworCisJaWYgKCFwZGF0YSkgeworCQlwcl9pbmZvKCIlczogcGxhdGZvcm0gZGF0YSBpcyBtaXNzaW5nXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNoaXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWF4ODkyNV9jaGlwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNoaXAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJY2hpcC0+aTJjID0gY2xpZW50OworCWNoaXAtPmRldiA9ICZjbGllbnQtPmRldjsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBjaGlwKTsKKwlkZXZfc2V0X2RydmRhdGEoY2hpcC0+ZGV2LCBjaGlwKTsKKwltdXRleF9pbml0KCZjaGlwLT5pb19sb2NrKTsKKworCWNoaXAtPnJ0YyA9IGkyY19uZXdfZHVtbXkoY2hpcC0+aTJjLT5hZGFwdGVyLCBSVENfSTJDX0FERFIpOworCWkyY19zZXRfY2xpZW50ZGF0YShjaGlwLT5ydGMsIGNoaXApOworCisJY2hpcC0+YWRjID0gaTJjX25ld19kdW1teShjaGlwLT5pMmMtPmFkYXB0ZXIsIEFEQ19JMkNfQUREUik7CisJaTJjX3NldF9jbGllbnRkYXRhKGNoaXAtPmFkYywgY2hpcCk7CisKKwltYXg4OTI1X2RldmljZV9pbml0KGNoaXAsIHBkYXRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtYXg4OTI1X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBtYXg4OTI1X2NoaXAgKmNoaXAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCW1heDg5MjVfZGV2aWNlX2V4aXQoY2hpcCk7CisJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNoaXAtPmFkYyk7CisJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNoaXAtPnJ0Yyk7CisJaTJjX3NldF9jbGllbnRkYXRhKGNoaXAtPmFkYywgTlVMTCk7CisJaTJjX3NldF9jbGllbnRkYXRhKGNoaXAtPnJ0YywgTlVMTCk7CisJaTJjX3NldF9jbGllbnRkYXRhKGNoaXAtPmkyYywgTlVMTCk7CisJa2ZyZWUoY2hpcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtYXg4OTI1X2RyaXZlciA9IHsKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJtYXg4OTI1IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gbWF4ODkyNV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1heDg5MjVfcmVtb3ZlKSwKKwkuaWRfdGFibGUJPSBtYXg4OTI1X2lkX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWF4ODkyNV9pMmNfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmbWF4ODkyNV9kcml2ZXIpOworCWlmIChyZXQgIT0gMCkKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgTUFYODkyNSBJMkMgZHJpdmVyOiAlZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorc3Vic3lzX2luaXRjYWxsKG1heDg5MjVfaTJjX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbWF4ODkyNV9pMmNfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZtYXg4OTI1X2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChtYXg4OTI1X2kyY19leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJJMkMgRHJpdmVyIGZvciBNYXhpbSA4OTI1Iik7CitNT0RVTEVfQVVUSE9SKCJIYW9qaWFuIFpodWFuZyA8aGFvamlhbi56aHVhbmdAbWFydmVsbC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9tYzEzNzgzLWNvcmUuYyBiL2RyaXZlcnMvbWZkL21jMTM3ODMtY29yZS5jCmluZGV4IDczNWM4YTQuLjYyYTg0N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL21jMTM3ODMtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL21jMTM3ODMtY29yZS5jCkBAIC0yMjUsNyArMjI1LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0wobWMxMzc4M19yZWdfcm13KTsKIAotaW50IG1jMTM3ODNfbWFzayhzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgaW50IGlycSkKK2ludCBtYzEzNzgzX2lycV9tYXNrKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxKQogewogCWludCByZXQ7CiAJdW5zaWduZWQgaW50IG9mZm1hc2sgPSBpcnEgPCAyNCA/IE1DMTM3ODNfSVJRTUFTSzAgOiBNQzEzNzgzX0lSUU1BU0sxOwpAQCAtMjQ1LDkgKzI0NSw5IEBACiAKIAlyZXR1cm4gbWMxMzc4M19yZWdfd3JpdGUobWMxMzc4Mywgb2ZmbWFzaywgbWFzayB8IGlycWJpdCk7CiB9Ci1FWFBPUlRfU1lNQk9MKG1jMTM3ODNfbWFzayk7CitFWFBPUlRfU1lNQk9MKG1jMTM3ODNfaXJxX21hc2spOwogCi1pbnQgbWMxMzc4M191bm1hc2soc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMsIGludCBpcnEpCitpbnQgbWMxMzc4M19pcnFfdW5tYXNrKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxKQogewogCWludCByZXQ7CiAJdW5zaWduZWQgaW50IG9mZm1hc2sgPSBpcnEgPCAyNCA/IE1DMTM3ODNfSVJRTUFTSzAgOiBNQzEzNzgzX0lSUU1BU0sxOwpAQCAtMjY3LDcgKzI2Nyw1MyBAQAogCiAJcmV0dXJuIG1jMTM3ODNfcmVnX3dyaXRlKG1jMTM3ODMsIG9mZm1hc2ssIG1hc2sgJiB+aXJxYml0KTsKIH0KLUVYUE9SVF9TWU1CT0wobWMxMzc4M191bm1hc2spOworRVhQT1JUX1NZTUJPTChtYzEzNzgzX2lycV91bm1hc2spOworCitpbnQgbWMxMzc4M19pcnFfc3RhdHVzKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxLAorCQlpbnQgKmVuYWJsZWQsIGludCAqcGVuZGluZykKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBvZmZtYXNrID0gaXJxIDwgMjQgPyBNQzEzNzgzX0lSUU1BU0swIDogTUMxMzc4M19JUlFNQVNLMTsKKwl1bnNpZ25lZCBpbnQgb2Zmc3RhdCA9IGlycSA8IDI0ID8gTUMxMzc4M19JUlFTVEFUMCA6IE1DMTM3ODNfSVJRU1RBVDE7CisJdTMyIGlycWJpdCA9IDEgPDwgKGlycSA8IDI0ID8gaXJxIDogaXJxIC0gMjQpOworCisJaWYgKGlycSA8IDAgfHwgaXJxID49IE1DMTM3ODNfTlVNX0lSUSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZW5hYmxlZCkgeworCQl1MzIgbWFzazsKKworCQlyZXQgPSBtYzEzNzgzX3JlZ19yZWFkKG1jMTM3ODMsIG9mZm1hc2ssICZtYXNrKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJKmVuYWJsZWQgPSBtYXNrICYgaXJxYml0OworCX0KKworCWlmIChwZW5kaW5nKSB7CisJCXUzMiBzdGF0OworCisJCXJldCA9IG1jMTM3ODNfcmVnX3JlYWQobWMxMzc4Mywgb2Zmc3RhdCwgJnN0YXQpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQkqcGVuZGluZyA9IHN0YXQgJiBpcnFiaXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKG1jMTM3ODNfaXJxX3N0YXR1cyk7CisKK2ludCBtYzEzNzgzX2lycV9hY2soc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMsIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IG9mZnN0YXQgPSBpcnEgPCAyNCA/IE1DMTM3ODNfSVJRU1RBVDAgOiBNQzEzNzgzX0lSUVNUQVQxOworCXVuc2lnbmVkIGludCB2YWwgPSAxIDw8IChpcnEgPCAyNCA/IGlycSA6IGlycSAtIDI0KTsKKworCUJVR19PTihpcnEgPCAwIHx8IGlycSA+PSBNQzEzNzgzX05VTV9JUlEpOworCisJcmV0dXJuIG1jMTM3ODNfcmVnX3dyaXRlKG1jMTM3ODMsIG9mZnN0YXQsIHZhbCk7Cit9CitFWFBPUlRfU1lNQk9MKG1jMTM3ODNfaXJxX2Fjayk7CiAKIGludCBtYzEzNzgzX2lycV9yZXF1ZXN0X25vdW5tYXNrKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxLAogCQlpcnFfaGFuZGxlcl90IGhhbmRsZXIsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRldikKQEAgLTI5Nyw3ICszNDMsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBtYzEzNzgzX3VubWFzayhtYzEzNzgzLCBpcnEpOworCXJldCA9IG1jMTM3ODNfaXJxX3VubWFzayhtYzEzNzgzLCBpcnEpOwogCWlmIChyZXQpIHsKIAkJbWMxMzc4My0+aXJxaGFuZGxlcltpcnFdID0gTlVMTDsKIAkJbWMxMzc4My0+aXJxZGF0YVtpcnFdID0gTlVMTDsKQEAgLTMxNyw3ICszNjMsNyBAQAogCQkJbWMxMzc4My0+aXJxZGF0YVtpcnFdICE9IGRldikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXQgPSBtYzEzNzgzX21hc2sobWMxMzc4MywgaXJxKTsKKwlyZXQgPSBtYzEzNzgzX2lycV9tYXNrKG1jMTM3ODMsIGlycSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMzMzLDE3ICszNzksNiBAQAogCXJldHVybiBtYzEzNzgzLT5pcnFoYW5kbGVyW2lycV0oaXJxLCBtYzEzNzgzLT5pcnFkYXRhW2lycV0pOwogfQogCi1pbnQgbWMxMzc4M19hY2tpcnEoc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMsIGludCBpcnEpCi17Ci0JdW5zaWduZWQgaW50IG9mZnN0YXQgPSBpcnEgPCAyNCA/IE1DMTM3ODNfSVJRU1RBVDAgOiBNQzEzNzgzX0lSUVNUQVQxOwotCXVuc2lnbmVkIGludCB2YWwgPSAxIDw8IChpcnEgPCAyNCA/IGlycSA6IGlycSAtIDI0KTsKLQotCUJVR19PTihpcnEgPCAwIHx8IGlycSA+PSBNQzEzNzgzX05VTV9JUlEpOwotCi0JcmV0dXJuIG1jMTM3ODNfcmVnX3dyaXRlKG1jMTM3ODMsIG9mZnN0YXQsIHZhbCk7Ci19Ci1FWFBPUlRfU1lNQk9MKG1jMTM3ODNfYWNraXJxKTsKLQogLyoKICAqIHJldHVybnM6IG51bWJlciBvZiBoYW5kbGVkIGlycXMgb3IgbmVnYXRpdmUgZXJyb3IKICAqIGxvY2tpbmc6IGhvbGRzIG1jMTM3ODMtPmxvY2sKQEAgLTQyMiw3ICs0NTcsNyBAQAogewogCXN0cnVjdCBtYzEzNzgzX2FkY2RvbmVfZGF0YSAqYWRjZG9uZV9kYXRhID0gZGF0YTsKIAotCW1jMTM3ODNfYWNraXJxKGFkY2RvbmVfZGF0YS0+bWMxMzc4MywgaXJxKTsKKwltYzEzNzgzX2lycV9hY2soYWRjZG9uZV9kYXRhLT5tYzEzNzgzLCBpcnEpOwogCiAJY29tcGxldGVfYWxsKCZhZGNkb25lX2RhdGEtPmRvbmUpOwogCkBAIC00ODYsNyArNTIxLDcgQEAKIAlkZXZfZGJnKCZtYzEzNzgzLT5zcGlkZXYtPmRldiwgIiVzOiByZXF1ZXN0IGlycVxuIiwgX19mdW5jX18pOwogCW1jMTM3ODNfaXJxX3JlcXVlc3QobWMxMzc4MywgTUMxMzc4M19JUlFfQURDRE9ORSwKIAkJCW1jMTM3ODNfaGFuZGxlcl9hZGNkb25lLCBfX2Z1bmNfXywgJmFkY2RvbmVfZGF0YSk7Ci0JbWMxMzc4M19hY2tpcnEobWMxMzc4MywgTUMxMzc4M19JUlFfQURDRE9ORSk7CisJbWMxMzc4M19pcnFfYWNrKG1jMTM3ODMsIE1DMTM3ODNfSVJRX0FEQ0RPTkUpOwogCiAJbWMxMzc4M19yZWdfd3JpdGUobWMxMzc4MywgTUMxMzc4M19SRUdfQURDXzAsIGFkYzApOwogCW1jMTM3ODNfcmVnX3dyaXRlKG1jMTM3ODMsIE1DMTM3ODNfUkVHX0FEQ18xLCBhZGMxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL21mZC1jb3JlLmMgYi9kcml2ZXJzL21mZC9tZmQtY29yZS5jCmluZGV4IGFlMTVlNDkuLmFhMTdmNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL21mZC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvbWZkLWNvcmUuYwpAQCAtMTMsNiArMTMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+CiAKIHN0YXRpYyBpbnQgbWZkX2FkZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqcGFyZW50LCBpbnQgaWQsCkBAIC02Miw2ICs2MywxMCBAQAogCQkJcmVzW3JdLnN0YXJ0ID0gY2VsbC0+cmVzb3VyY2VzW3JdLnN0YXJ0OwogCQkJcmVzW3JdLmVuZCAgID0gY2VsbC0+cmVzb3VyY2VzW3JdLmVuZDsKIAkJfQorCisJCXJldCA9IGFjcGlfY2hlY2tfcmVzb3VyY2VfY29uZmxpY3QocmVzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbF9yZXM7CiAJfQogCiAJcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgcmVzLCBjZWxsLT5udW1fcmVzb3VyY2VzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3NoX21vYmlsZV9zZGhpLmMgYi9kcml2ZXJzL21mZC9zaF9tb2JpbGVfc2RoaS5jCmluZGV4IDAzZWZhZTguLjQ2OGZkMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3NoX21vYmlsZV9zZGhpLmMKKysrIGIvZHJpdmVycy9tZmQvc2hfbW9iaWxlX3NkaGkuYwpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotCisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC90bWlvLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3NoX21vYmlsZV9zZGhpLmg+CkBAIC05NSw5ICs5NSw5IEBACiAKIAljbGtfZW5hYmxlKHByaXYtPmNsayk7CiAKLQkvKiBGSVhNRTogc2lsbHkgY29uc3QgdW5zaWduZWQgaW50IGhjbGsgKi8KLQkqKHVuc2lnbmVkIGludCAqKSZwcml2LT5tbWNfZGF0YS5oY2xrID0gY2xrX2dldF9yYXRlKHByaXYtPmNsayk7CisJcHJpdi0+bW1jX2RhdGEuaGNsayA9IGNsa19nZXRfcmF0ZShwcml2LT5jbGspOwogCXByaXYtPm1tY19kYXRhLnNldF9wd3IgPSBzaF9tb2JpbGVfc2RoaV9zZXRfcHdyOworCXByaXYtPm1tY19kYXRhLmNhcGFiaWxpdGllcyA9IE1NQ19DQVBfTU1DX0hJR0hTUEVFRDsKIAogCW1lbWNweSgmcHJpdi0+Y2VsbF9tbWMsICZzaF9tb2JpbGVfc2RoaV9jZWxsLCBzaXplb2YocHJpdi0+Y2VsbF9tbWMpKTsKIAlwcml2LT5jZWxsX21tYy5kcml2ZXJfZGF0YSA9ICZwcml2LT5tbWNfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3NtNTAxLmMgYi9kcml2ZXJzL21mZC9zbTUwMS5jCmluZGV4IDBjYzVlZWYuLmRjOWVhOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3NtNTAxLmMKKysrIGIvZHJpdmVycy9tZmQvc201MDEuYwpAQCAtMTQzMCw3ICsxNDMwLDcgQEAKIAl9CiAKIAlzbS0+cmVnc19jbGFpbSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihzbS0+aW9fcmVzLT5zdGFydCwKLQkJCQkJICAgIDB4MTAwLCAic201MDEiKTsKKwkJCQkJICAgIHJlc291cmNlX3NpemUoc20tPmlvX3JlcyksICJzbTUwMSIpOwogCiAJaWYgKHNtLT5yZWdzX2NsYWltID09IE5VTEwpIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJjYW5ub3QgY2xhaW0gcmVnaXN0ZXJzXG4iKTsKQEAgLTE0NDAsOCArMTQ0MCw3IEBACiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIHNtKTsKIAotCXNtLT5yZWdzID0gaW9yZW1hcChzbS0+aW9fcmVzLT5zdGFydCwKLQkJCSAgIChzbS0+aW9fcmVzLT5lbmQgLSBzbS0+aW9fcmVzLT5zdGFydCkgLSAxKTsKKwlzbS0+cmVncyA9IGlvcmVtYXAoc20tPmlvX3Jlcy0+c3RhcnQsIHJlc291cmNlX3NpemUoc20tPmlvX3JlcykpOwogCiAJaWYgKHNtLT5yZWdzID09IE5VTEwpIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJjYW5ub3QgcmVtYXAgcmVnaXN0ZXJzXG4iKTsKQEAgLTE2NDUsNyArMTY0NCw3IEBACiAJc20tPm1lbV9yZXMgPSAmZGV2LT5yZXNvdXJjZVswXTsKIAogCXNtLT5yZWdzX2NsYWltID0gcmVxdWVzdF9tZW1fcmVnaW9uKHNtLT5pb19yZXMtPnN0YXJ0LAotCQkJCQkgICAgMHgxMDAsICJzbTUwMSIpOworCQkJCQkgICAgcmVzb3VyY2Vfc2l6ZShzbS0+aW9fcmVzKSwgInNtNTAxIik7CiAJaWYgKHNtLT5yZWdzX2NsYWltID09IE5VTEwpIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJjYW5ub3QgY2xhaW0gcmVnaXN0ZXJzXG4iKTsKIAkJZXJyPSAtRUJVU1k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90N2w2NnhiLmMgYi9kcml2ZXJzL21mZC90N2w2NnhiLmMKaW5kZXggYmNmNDY4Ny4uMjZkOTE3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdDdsNjZ4Yi5jCisrKyBiL2RyaXZlcnMvbWZkL3Q3bDY2eGIuYwpAQCAtMzYwLDcgKzM2MCw3IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfcmVxdWVzdF9zY3I7CiAKLQl0N2w2NnhiLT5zY3IgPSBpb3JlbWFwKHJzY3ItPnN0YXJ0LCByc2NyLT5lbmQgLSByc2NyLT5zdGFydCArIDEpOworCXQ3bDY2eGItPnNjciA9IGlvcmVtYXAocnNjci0+c3RhcnQsIHJlc291cmNlX3NpemUocnNjcikpOwogCWlmICghdDdsNjZ4Yi0+c2NyKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2lvcmVtYXA7CkBAIC00MDMsMTIgKzQwMywxMiBAQAogZXJyX2lvcmVtYXA6CiAJcmVsZWFzZV9yZXNvdXJjZSgmdDdsNjZ4Yi0+cnNjcik7CiBlcnJfcmVxdWVzdF9zY3I6Ci0Ja2ZyZWUodDdsNjZ4Yik7CiAJY2xrX3B1dCh0N2w2NnhiLT5jbGs0OG0pOwogZXJyX2NsazQ4bV9nZXQ6CiAJY2xrX3B1dCh0N2w2NnhiLT5jbGszMmspOwogZXJyX2NsazMya19nZXQ6CiBlcnJfbm9pcnE6CisJa2ZyZWUodDdsNjZ4Yik7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdGM2MzkzeGIuYyBiL2RyaXZlcnMvbWZkL3RjNjM5M3hiLmMKaW5kZXggNGJjNWEwOC4uYzU5ZTVjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdGM2MzkzeGIuYworKysgYi9kcml2ZXJzL21mZC90YzYzOTN4Yi5jCkBAIC02NDcsNyArNjQ3LDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycl9yZXF1ZXN0X3NjcjsKIAotCXRjNjM5M3hiLT5zY3IgPSBpb3JlbWFwKHJzY3ItPnN0YXJ0LCByc2NyLT5lbmQgLSByc2NyLT5zdGFydCArIDEpOworCXRjNjM5M3hiLT5zY3IgPSBpb3JlbWFwKHJzY3ItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJzY3IpKTsKIAlpZiAoIXRjNjM5M3hiLT5zY3IpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJfaW9yZW1hcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3R3bC1jb3JlLmMgYi9kcml2ZXJzL21mZC90d2wtY29yZS5jCmluZGV4IDE5YTkzMGQuLjU2MmNkNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3R3bC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvdHdsLWNvcmUuYwpAQCAtNTgsMTMgKzU4LDYgQEAKIAogI2RlZmluZSBEUklWRVJfTkFNRQkJCSJ0d2wiCiAKLSNpZiBkZWZpbmVkKENPTkZJR19UV0w0MDMwX0JDSV9CQVRURVJZKSB8fCBcCi0JZGVmaW5lZChDT05GSUdfVFdMNDAzMF9CQ0lfQkFUVEVSWV9NT0RVTEUpCi0jZGVmaW5lIHR3bF9oYXNfYmNpKCkJCXRydWUKLSNlbHNlCi0jZGVmaW5lIHR3bF9oYXNfYmNpKCkJCWZhbHNlCi0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX1RXTDQwMzApIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX1RXTDQwMzBfTU9EVUxFKQogI2RlZmluZSB0d2xfaGFzX2tleXBhZCgpCXRydWUKICNlbHNlCkBAIC0xMzAsNyArMTIzLDcgQEAKICNkZWZpbmUgVFdMX05VTV9TTEFWRVMJCTQKIAogI2lmIGRlZmluZWQoQ09ORklHX0lOUFVUX1RXTDQwMzBfUFdSQlVUVE9OKSBcCi0JfHwgZGVmaW5lZChDT05GSUdfSU5QVVRfVFdMNDAzMF9QV0JVVFRPTl9NT0RVTEUpCisJfHwgZGVmaW5lZChDT05GSUdfSU5QVVRfVFdMNDAzMF9QV1JCVVRUT05fTU9EVUxFKQogI2RlZmluZSB0d2xfaGFzX3B3cmJ1dHRvbigpCXRydWUKICNlbHNlCiAjZGVmaW5lIHR3bF9oYXNfcHdyYnV0dG9uKCkJZmFsc2UKQEAgLTIwNSw2ICsxOTgsNyBAQAogLyogc3ViY2hpcC9zbGF2ZSAzIDB4NEIgLSBBVURJTyAqLwogI2RlZmluZSBUV0w2MDMwX0JBU0VBRERfQVVESU8JCTB4MDAwMAogI2RlZmluZSBUV0w2MDMwX0JBU0VBRERfUlNWCQkweDAwMDAKKyNkZWZpbmUgVFdMNjAzMF9CQVNFQUREX1pFUk8JCTB4MDAwMAogCiAvKiBGZXcgcG93ZXIgdmFsdWVzICovCiAjZGVmaW5lIFJfQ0ZHX0JPT1QJCQkweDA1CkBAIC0zMjAsOSArMzE0LDExIEBACiAJeyBTVUJfQ0hJUF9JRDEsIFRXTDYwMzBfQkFTRUFERF9DSEFSR0VSIH0sCiAJeyBTVUJfQ0hJUF9JRDEsIFRXTDYwMzBfQkFTRUFERF9HQVNHQVVHRSB9LAogCXsgU1VCX0NISVBfSUQxLCBUV0w2MDMwX0JBU0VBRERfUFdNIH0sCi0JeyBTVUJfQ0hJUF9JRDIsIFRXTDYwMzBfQkFTRUFERF9SU1YgfSwKLQl7IFNVQl9DSElQX0lEMiwgVFdMNjAzMF9CQVNFQUREX1JTViB9LAorCXsgU1VCX0NISVBfSUQwLCBUV0w2MDMwX0JBU0VBRERfWkVSTyB9LAorCXsgU1VCX0NISVBfSUQxLCBUV0w2MDMwX0JBU0VBRERfWkVSTyB9LAogCisJeyBTVUJfQ0hJUF9JRDIsIFRXTDYwMzBfQkFTRUFERF9aRVJPIH0sCisJeyBTVUJfQ0hJUF9JRDIsIFRXTDYwMzBfQkFTRUFERF9aRVJPIH0sCiAJeyBTVUJfQ0hJUF9JRDIsIFRXTDYwMzBfQkFTRUFERF9SU1YgfSwKIAl7IFNVQl9DSElQX0lEMiwgVFdMNjAzMF9CQVNFQUREX1JTViB9LAogCXsgU1VCX0NISVBfSUQyLCBUV0w2MDMwX0JBU0VBRERfUlNWIH0sCkBAIC01ODgsMTggKzU4NCw2IEBACiAJc3RydWN0IGRldmljZQkqY2hpbGQ7CiAJdW5zaWduZWQgc3ViX2NoaXBfaWQ7CiAKLQlpZiAodHdsX2hhc19iY2koKSAmJiBwZGF0YS0+YmNpICYmCi0JICAgICEoZmVhdHVyZXMgJiAoVFBTX1NVQlNFVCB8IFRXTDUwMzEpKSkgewotCQljaGlsZCA9IGFkZF9jaGlsZCgzLCAidHdsNDAzMF9iY2kiLAotCQkJCXBkYXRhLT5iY2ksIHNpemVvZigqcGRhdGEtPmJjaSksCi0JCQkJZmFsc2UsCi0JCQkJLyogaXJxMCA9IENIR19QUkVTLCBpcnExID0gQkNJICovCi0JCQkJcGRhdGEtPmlycV9iYXNlICsgQkNJX1BSRVNfSU5UUl9PRkZTRVQsCi0JCQkJcGRhdGEtPmlycV9iYXNlICsgQkNJX0lOVFJfT0ZGU0VUKTsKLQkJaWYgKElTX0VSUihjaGlsZCkpCi0JCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7Ci0JfQotCiAJaWYgKHR3bF9oYXNfZ3BpbygpICYmIHBkYXRhLT5ncGlvKSB7CiAJCWNoaWxkID0gYWRkX2NoaWxkKFNVQl9DSElQX0lEMSwgInR3bDQwMzBfZ3BpbyIsCiAJCQkJcGRhdGEtPmdwaW8sIHNpemVvZigqcGRhdGEtPmdwaW8pLApAQCAtOTc3LDYgKzk2MSw3IEBACiAJaW50CQkJCXN0YXR1czsKIAl1bnNpZ25lZAkJCWk7CiAJc3RydWN0IHR3bDQwMzBfcGxhdGZvcm1fZGF0YQkqcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXU4IHRlbXA7CiAKIAlpZiAoIXBkYXRhKSB7CiAJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YT9cbiIpOwpAQCAtMTA0NCw2ICsxMDI5LDE4IEBACiAJCQlnb3RvIGZhaWw7CiAJfQogCisJLyogRGlzYWJsZSBUV0w0MDMwL1RXTDUwMzAgSTJDIFB1bGwtdXAgb24gSTJDMSBhbmQgSTJDNChTUikgaW50ZXJmYWNlLgorCSAqIFByb2dyYW0gSTJDX1NDTF9DVFJMX1BVKGJpdCAwKT0wLCBJMkNfU0RBX0NUUkxfUFUgKGJpdCAyKT0wLAorCSAqIFNSX0kyQ19TQ0xfQ1RSTF9QVShiaXQgNCk9MCBhbmQgU1JfSTJDX1NEQV9DVFJMX1BVKGJpdCA2KT0wLgorCSAqLworCisJaWYgKHR3bF9jbGFzc19pc180MDMwKCkpIHsKKwkJdHdsX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX0lOVEJSLCAmdGVtcCwgUkVHX0dQUFVQRENUUjEpOworCQl0ZW1wICY9IH4oU1JfSTJDX1NEQV9DVFJMX1BVIHwgU1JfSTJDX1NDTF9DVFJMX1BVIHwgXAorCQlJMkNfU0RBX0NUUkxfUFUgfCBJMkNfU0NMX0NUUkxfUFUpOworCQl0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0lOVEJSLCB0ZW1wLCBSRUdfR1BQVVBEQ1RSMSk7CisJfQorCiAJc3RhdHVzID0gYWRkX2NoaWxkcmVuKHBkYXRhLCBpZC0+ZHJpdmVyX2RhdGEpOwogZmFpbDoKIAlpZiAoc3RhdHVzIDwgMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3R3bDQwMzAtcG93ZXIuYyBiL2RyaXZlcnMvbWZkL3R3bDQwMzAtcG93ZXIuYwppbmRleCAwODE1MjkyLi43ZWZhODc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90d2w0MDMwLXBvd2VyLmMKKysrIGIvZHJpdmVycy9tZmQvdHdsNDAzMC1wb3dlci5jCkBAIC00MDUsNyArNDA1LDcgQEAKIAogCWlmIChyY29uZmlnLT5yZW1hcF9zbGVlcCAhPSBUV0w0MDMwX1JFU0NPTkZJR19VTkRFRikgewogCQlyZW1hcCAmPSB+U0xFRVBfU1RBVEVfTUFTSzsKLQkJcmVtYXAgfD0gcmNvbmZpZy0+cmVtYXBfb2ZmIDw8IFNMRUVQX1NUQVRFX1NISUZUOworCQlyZW1hcCB8PSByY29uZmlnLT5yZW1hcF9zbGVlcCA8PCBTTEVFUF9TVEFURV9TSElGVDsKIAl9CiAKIAllcnIgPSB0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLApAQCAtNDYxLDYgKzQ2MSw1NiBAQAogCXJldHVybiBlcnI7CiB9CiAKK2ludCB0d2w0MDMwX3JlbW92ZV9zY3JpcHQodTggZmxhZ3MpCit7CisJaW50IGVyciA9IDA7CisKKwllcnIgPSB0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgUl9LRVlfMSwKKwkJCVJfUFJPVEVDVF9LRVkpOworCWlmIChlcnIpIHsKKwkJcHJfZXJyKCJ0d2w0MDMwOiB1bmFibGUgdG8gdW5sb2NrIFBST1RFQ1RfS0VZXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSB0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgUl9LRVlfMiwKKwkJCVJfUFJPVEVDVF9LRVkpOworCWlmIChlcnIpIHsKKwkJcHJfZXJyKCJ0d2w0MDMwOiB1bmFibGUgdG8gdW5sb2NrIFBST1RFQ1RfS0VZXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoZmxhZ3MgJiBUV0w0MDMwX1dSU1RfU0NSSVBUKSB7CisJCWVyciA9IHR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBFTkRfT0ZfU0NSSVBULAorCQkJCVJfU0VRX0FERF9XQVJNKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCWlmIChmbGFncyAmIFRXTDQwMzBfV0FLRVVQMTJfU0NSSVBUKSB7CisJCWlmIChlcnIpCisJCWVyciA9IHR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBFTkRfT0ZfU0NSSVBULAorCQkJCVJfU0VRX0FERF9TMkExMik7CisJCQlyZXR1cm4gZXJyOworCX0KKwlpZiAoZmxhZ3MgJiBUV0w0MDMwX1dBS0VVUDNfU0NSSVBUKSB7CisJCWVyciA9IHR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBFTkRfT0ZfU0NSSVBULAorCQkJCVJfU0VRX0FERF9TMkEzKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCWlmIChmbGFncyAmIFRXTDQwMzBfU0xFRVBfU0NSSVBUKSB7CisJCWVyciA9IHR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBFTkRfT0ZfU0NSSVBULAorCQkJCVJfU0VRX0FERF9BMlMpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSB0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgMCwgUl9QUk9URUNUX0tFWSk7CisJaWYgKGVycikKKwkJcHJfZXJyKCJUV0w0MDMwIFVuYWJsZSB0byByZWxvY2sgcmVnaXN0ZXJzXG4iKTsKKworCXJldHVybiBlcnI7Cit9CisKIHZvaWQgX19pbml0IHR3bDQwMzBfcG93ZXJfaW5pdChzdHJ1Y3QgdHdsNDAzMF9wb3dlcl9kYXRhICp0d2w0MDMwX3NjcmlwdHMpCiB7CiAJaW50IGVyciA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC91Y2IxeDAwLWNvcmUuYyBiL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jCmluZGV4IDI1MmI3NDEuLmIyODEyMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvdWNiMXgwMC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KIAogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd204MzF4LWNvcmUuYyBiL2RyaXZlcnMvbWZkL3dtODMxeC1jb3JlLmMKaW5kZXggNGIyMDIxYS4uMDcxMDFlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvd204MzF4LWNvcmUuYworKysgYi9kcml2ZXJzL21mZC93bTgzMXgtY29yZS5jCkBAIC0zMjEsNyArMzIxLDYgQEAKICAqLwogaW50IHdtODMxeF9hdXhhZGNfcmVhZChzdHJ1Y3Qgd204MzF4ICp3bTgzMXgsIGVudW0gd204MzF4X2F1eGFkYyBpbnB1dCkKIHsKLQlpbnQgdHJpZXMgPSAxMDsKIAlpbnQgcmV0LCBzcmM7CiAKIAltdXRleF9sb2NrKCZ3bTgzMXgtPmF1eGFkY19sb2NrKTsKQEAgLTM0OSwxMyArMzQ4LDE0IEBACiAJCWdvdG8gZGlzYWJsZTsKIAl9CiAKLQlkbyB7Ci0JCW1zbGVlcCgxKTsKKwkvKiBJZ25vcmUgdGhlIHJlc3VsdCB0byBhbGxvdyB1cyB0byBzb2xkaWVyIG9uIHdpdGhvdXQgSVJRIGhvb2t1cCAqLworCXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmd204MzF4LT5hdXhhZGNfZG9uZSwgbXNlY3NfdG9famlmZmllcyg1KSk7CiAKLQkJcmV0ID0gd204MzF4X3JlZ19yZWFkKHdtODMxeCwgV004MzFYX0FVWEFEQ19DT05UUk9MKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXQgPSBXTTgzMVhfQVVYX0NWVF9FTkE7Ci0JfSB3aGlsZSAoKHJldCAmIFdNODMxWF9BVVhfQ1ZUX0VOQSkgJiYgLS10cmllcyk7CisJcmV0ID0gd204MzF4X3JlZ19yZWFkKHdtODMxeCwgV004MzFYX0FVWEFEQ19DT05UUk9MKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKHdtODMxeC0+ZGV2LCAiQVVYQURDIHN0YXR1cyByZWFkIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gZGlzYWJsZTsKKwl9CiAKIAlpZiAocmV0ICYgV004MzFYX0FVWF9DVlRfRU5BKSB7CiAJCWRldl9lcnIod204MzF4LT5kZXYsICJUaW1lZCBvdXQgcmVhZGluZyBBVVhBRENcbiIpOwpAQCAtMzkwLDYgKzM5MCwxNSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwod204MzF4X2F1eGFkY19yZWFkKTsKIAorc3RhdGljIGlycXJldHVybl90IHdtODMxeF9hdXhhZGNfaXJxKGludCBpcnEsIHZvaWQgKmlycV9kYXRhKQoreworCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IGlycV9kYXRhOworCisJY29tcGxldGUoJndtODMxeC0+YXV4YWRjX2RvbmUpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCiAvKioKICAqIHdtODMxeF9hdXhhZGNfcmVhZF91djogUmVhZCBhIHZvbHRhZ2UgZnJvbSB0aGUgV004MzF4IEFVWEFEQwogICoKQEAgLTE0MTEsNiArMTQyMCw3IEBACiAJbXV0ZXhfaW5pdCgmd204MzF4LT5pb19sb2NrKTsKIAltdXRleF9pbml0KCZ3bTgzMXgtPmtleV9sb2NrKTsKIAltdXRleF9pbml0KCZ3bTgzMXgtPmF1eGFkY19sb2NrKTsKKwlpbml0X2NvbXBsZXRpb24oJndtODMxeC0+YXV4YWRjX2RvbmUpOwogCWRldl9zZXRfZHJ2ZGF0YSh3bTgzMXgtPmRldiwgd204MzF4KTsKIAogCXJldCA9IHdtODMxeF9yZWdfcmVhZCh3bTgzMXgsIFdNODMxWF9QQVJFTlRfSUQpOwpAQCAtMTQ0OSwxOCArMTQ1OSwzMyBAQAogCWNhc2UgV004MzEwOgogCQlwYXJlbnQgPSBXTTgzMTA7CiAJCXdtODMxeC0+bnVtX2dwaW8gPSAxNjsKKwkJaWYgKHJldiA+IDApIHsKKwkJCXdtODMxeC0+aGFzX2dwaW9fZW5hID0gMTsKKwkJCXdtODMxeC0+aGFzX2NzX3N0cyA9IDE7CisJCX0KKwogCQlkZXZfaW5mbyh3bTgzMXgtPmRldiwgIldNODMxMCByZXZpc2lvbiAlY1xuIiwgJ0EnICsgcmV2KTsKIAkJYnJlYWs7CiAKIAljYXNlIFdNODMxMToKIAkJcGFyZW50ID0gV004MzExOwogCQl3bTgzMXgtPm51bV9ncGlvID0gMTY7CisJCWlmIChyZXYgPiAwKSB7CisJCQl3bTgzMXgtPmhhc19ncGlvX2VuYSA9IDE7CisJCQl3bTgzMXgtPmhhc19jc19zdHMgPSAxOworCQl9CisKIAkJZGV2X2luZm8od204MzF4LT5kZXYsICJXTTgzMTEgcmV2aXNpb24gJWNcbiIsICdBJyArIHJldik7CiAJCWJyZWFrOwogCiAJY2FzZSBXTTgzMTI6CiAJCXBhcmVudCA9IFdNODMxMjsKIAkJd204MzF4LT5udW1fZ3BpbyA9IDE2OworCQlpZiAocmV2ID4gMCkgeworCQkJd204MzF4LT5oYXNfZ3Bpb19lbmEgPSAxOworCQkJd204MzF4LT5oYXNfY3Nfc3RzID0gMTsKKwkJfQorCiAJCWRldl9pbmZvKHdtODMxeC0+ZGV2LCAiV004MzEyIHJldmlzaW9uICVjXG4iLCAnQScgKyByZXYpOwogCQlicmVhazsKIApAQCAtMTUwOCw2ICsxNTMzLDE2IEBACiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIGVycjsKIAorCWlmICh3bTgzMXgtPmlycV9iYXNlKSB7CisJCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHdtODMxeC0+aXJxX2Jhc2UgKworCQkJCQkgICBXTTgzMVhfSVJRX0FVWEFEQ19EQVRBLAorCQkJCQkgICBOVUxMLCB3bTgzMXhfYXV4YWRjX2lycSwgMCwKKwkJCQkJICAgImF1eGFkYyIsIHdtODMxeCk7CisJCWlmIChyZXQgPCAwKQorCQkJZGV2X2Vycih3bTgzMXgtPmRldiwgIkFVWEFEQyBJUlEgcmVxdWVzdCBmYWlsZWQ6ICVkXG4iLAorCQkJCXJldCk7CisJfQorCiAJLyogVGhlIGNvcmUgZGV2aWNlIGlzIHVwLCBpbnN0YW50aWF0ZSB0aGUgc3ViZGV2aWNlcy4gKi8KIAlzd2l0Y2ggKHBhcmVudCkgewogCWNhc2UgV004MzEwOgpAQCAtMTU3OCw2ICsxNjEzLDggQEAKIHsKIAl3bTgzMXhfb3RwX2V4aXQod204MzF4KTsKIAltZmRfcmVtb3ZlX2RldmljZXMod204MzF4LT5kZXYpOworCWlmICh3bTgzMXgtPmlycV9iYXNlKQorCQlmcmVlX2lycSh3bTgzMXgtPmlycV9iYXNlICsgV004MzFYX0lSUV9BVVhBRENfREFUQSwgd204MzF4KTsKIAl3bTgzMXhfaXJxX2V4aXQod204MzF4KTsKIAlrZnJlZSh3bTgzMXgpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd204MzUwLWNvcmUuYyBiL2RyaXZlcnMvbWZkL3dtODM1MC1jb3JlLmMKaW5kZXggOWE5NzBiZC4uYmQ3NTgwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvd204MzUwLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC93bTgzNTAtY29yZS5jCkBAIC0zMzksNyArMzM5LDYgQEAKIGludCB3bTgzNTBfcmVhZF9hdXhhZGMoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgY2hhbm5lbCwgaW50IHNjYWxlLCBpbnQgdnJlZikKIHsKIAl1MTYgcmVnLCByZXN1bHQgPSAwOwotCWludCB0cmllcyA9IDU7CiAKIAlpZiAoY2hhbm5lbCA8IFdNODM1MF9BVVhBRENfQVVYMSB8fCBjaGFubmVsID4gV004MzUwX0FVWEFEQ19URU1QKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM2MywxMiArMzYyLDEzIEBACiAJcmVnIHw9IDEgPDwgY2hhbm5lbCB8IFdNODM1MF9BVVhBRENfUE9MTDsKIAl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0RJR0lUSVNFUl9DT05UUk9MXzEsIHJlZyk7CiAKLQlkbyB7Ci0JCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgxKTsKLQkJcmVnID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0RJR0lUSVNFUl9DT05UUk9MXzEpOwotCX0gd2hpbGUgKChyZWcgJiBXTTgzNTBfQVVYQURDX1BPTEwpICYmIC0tdHJpZXMpOworCS8qIFdlIGlnbm9yZSB0aGUgcmVzdWx0IG9mIHRoZSBjb21wbGV0aW9uIGFuZCBqdXN0IGNoZWNrIGZvciBhCisJICogY29udmVyc2lvbiByZXN1bHQsIGFsbG93aW5nIHVzIHRvIHNvbGRpZXIgb24gaWYgdGhlIElSUQorCSAqIGluZnJhc3RydWN0dXJlIGlzIG5vdCBzZXQgdXAgZm9yIHRoZSBjaGlwLiAqLworCXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmd204MzUwLT5hdXhhZGNfZG9uZSwgbXNlY3NfdG9famlmZmllcyg1KSk7CiAKLQlpZiAoIXRyaWVzKQorCXJlZyA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9ESUdJVElTRVJfQ09OVFJPTF8xKTsKKwlpZiAocmVnICYgV004MzUwX0FVWEFEQ19QT0xMKQogCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAiYWRjIGNobiAlZCByZWFkIHRpbWVvdXRcbiIsIGNoYW5uZWwpOwogCWVsc2UKIAkJcmVzdWx0ID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwKQEAgLTM4NSw2ICszODUsMTUgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9yZWFkX2F1eGFkYyk7CiAKK3N0YXRpYyBpcnFyZXR1cm5fdCB3bTgzNTBfYXV4YWRjX2lycShpbnQgaXJxLCB2b2lkICppcnFfZGF0YSkKK3sKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSBpcnFfZGF0YTsKKworCWNvbXBsZXRlKCZ3bTgzNTAtPmF1eGFkY19kb25lKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwogLyoKICAqIENhY2hlIGlzIGFsd2F5cyBob3N0IGVuZGlhbi4KICAqLwpAQCAtNjgyLDExICs2OTEsMjIgQEAKIAl9CiAKIAltdXRleF9pbml0KCZ3bTgzNTAtPmF1eGFkY19tdXRleCk7CisJaW5pdF9jb21wbGV0aW9uKCZ3bTgzNTAtPmF1eGFkY19kb25lKTsKIAogCXJldCA9IHdtODM1MF9pcnFfaW5pdCh3bTgzNTAsIGlycSwgcGRhdGEpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycjsKIAorCWlmICh3bTgzNTAtPmlycV9iYXNlKSB7CisJCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHdtODM1MC0+aXJxX2Jhc2UgKworCQkJCQkgICBXTTgzNTBfSVJRX0FVWEFEQ19EQVRBUkRZLAorCQkJCQkgICBOVUxMLCB3bTgzNTBfYXV4YWRjX2lycSwgMCwKKwkJCQkJICAgImF1eGFkYyIsIHdtODM1MCk7CisJCWlmIChyZXQgPCAwKQorCQkJZGV2X3dhcm4od204MzUwLT5kZXYsCisJCQkJICJGYWlsZWQgdG8gcmVxdWVzdCBBVVhBREMgSVJROiAlZFxuIiwgcmV0KTsKKwl9CisKIAlpZiAocGRhdGEgJiYgcGRhdGEtPmluaXQpIHsKIAkJcmV0ID0gcGRhdGEtPmluaXQod204MzUwKTsKIAkJaWYgKHJldCAhPSAwKSB7CkBAIC03MzYsNiArNzU2LDkgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih3bTgzNTAtPmdwaW8ucGRldik7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIod204MzUwLT5jb2RlYy5wZGV2KTsKIAorCWlmICh3bTgzNTAtPmlycV9iYXNlKQorCQlmcmVlX2lycSh3bTgzNTAtPmlycV9iYXNlICsgV004MzUwX0lSUV9BVVhBRENfREFUQVJEWSwgd204MzUwKTsKKwogCXdtODM1MF9pcnFfZXhpdCh3bTgzNTApOwogCiAJa2ZyZWUod204MzUwLT5yZWdfY2FjaGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd204MzUwLWlycS5jIGIvZHJpdmVycy9tZmQvd204MzUwLWlycS5jCmluZGV4IDkwMjVmMjkuLmY1NmM5YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3dtODM1MC1pcnEuYworKysgYi9kcml2ZXJzL21mZC93bTgzNTAtaXJxLmMKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9idWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvYXVkaW8uaD4KQEAgLTI5LDggKzI5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL3N1cHBseS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvd2R0Lmg+CiAKLSNkZWZpbmUgV004MzUwX05VTV9JUlFfUkVHUyA3Ci0KICNkZWZpbmUgV004MzUwX0lOVF9PRkZTRVRfMSAgICAgICAgICAgICAgICAgICAgIDAKICNkZWZpbmUgV004MzUwX0lOVF9PRkZTRVRfMiAgICAgICAgICAgICAgICAgICAgIDEKICNkZWZpbmUgV004MzUwX1BPV0VSX1VQX0lOVF9PRkZTRVQgICAgICAgICAgICAgIDIKQEAgLTM2NiwxOSArMzY0LDEwIEBACiAJfSwKIH07CiAKLXN0YXRpYyB2b2lkIHdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHdtODM1MF9pcnFfZGF0YSAqaXJxX3RvX3dtODM1MF9pcnEoc3RydWN0IHdtODM1MCAqd204MzUwLAorCQkJCQkJCWludCBpcnEpCiB7Ci0JbXV0ZXhfbG9jaygmd204MzUwLT5pcnFfbXV0ZXgpOwotCi0JaWYgKHdtODM1MC0+aXJxW2lycV0uaGFuZGxlcikKLQkJd204MzUwLT5pcnFbaXJxXS5oYW5kbGVyKGlycSwgd204MzUwLT5pcnFbaXJxXS5kYXRhKTsKLQllbHNlIHsKLQkJZGV2X2Vycih3bTgzNTAtPmRldiwgImlycSAlZCBub2JvZHkgY2FyZWQuIG5vdyBtYXNrZWQuXG4iLAotCQkJaXJxKTsKLQkJd204MzUwX21hc2tfaXJxKHdtODM1MCwgaXJxKTsKLQl9Ci0KLQltdXRleF91bmxvY2soJndtODM1MC0+aXJxX211dGV4KTsKKwlyZXR1cm4gJndtODM1MF9pcnFzW2lycSAtIHdtODM1MC0+aXJxX2Jhc2VdOwogfQogCiAvKgpAQCAtMzg2LDcgKzM3NSw5IEBACiAgKiBpbnRlcnJ1cHRzIGFyZSBjbGVhciBvbiByZWFkIHRoZSBJUlEgbGluZSB3aWxsIGJlIHJlYXNzZXJ0ZWQgYW5kCiAgKiB0aGUgcGh5c2ljYWwgSVJRIHdpbGwgYmUgaGFuZGxlZCBhZ2FpbiBpZiBhbm90aGVyIGludGVycnVwdCBpcwogICogYXNzZXJ0ZWQgd2hpbGUgd2UgcnVuIC0gaW4gdGhlIG5vcm1hbCBjb3Vyc2Ugb2YgZXZlbnRzIHRoaXMgaXMgYQotICogcmFyZSBvY2N1cnJlbmNlIHNvIHdlIHNhdmUgSTJDL1NQSSByZWFkcy4KKyAqIHJhcmUgb2NjdXJyZW5jZSBzbyB3ZSBzYXZlIEkyQy9TUEkgcmVhZHMuICBXZSdyZSBhbHNvIGFzc3VtaW5nIHRoYXQKKyAqIGl0J3MgcmFyZSB0byBnZXQgbG90cyBvZiBpbnRlcnJ1cHRzIGZpcmluZyBzaW11bHRhbmVvdXNseSBzbyB0cnkgdG8KKyAqIG1pbmltaXNlIEkvTy4KICAqLwogc3RhdGljIGlycXJldHVybl90IHdtODM1MF9pcnEoaW50IGlycSwgdm9pZCAqaXJxX2RhdGEpCiB7CkBAIC0zOTcsNyArMzg4LDYgQEAKIAlzdHJ1Y3Qgd204MzUwX2lycV9kYXRhICpkYXRhOwogCWludCBpOwogCi0JLyogVE9ETzogVXNlIGJsb2NrIHJlYWRzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2U/ICovCiAJbGV2ZWxfb25lID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX1NZU1RFTV9JTlRFUlJVUFRTKQogCQkmIH53bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfU1lTVEVNX0lOVEVSUlVQVFNfTUFTSyk7CiAKQEAgLTQxNiw5MyArNDA2LDEwMSBAQAogCQkJc3ViX3JlZ1tkYXRhLT5yZWddID0KIAkJCQl3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xICsKIAkJCQkJCWRhdGEtPnJlZyk7Ci0JCQlzdWJfcmVnW2RhdGEtPnJlZ10gJj0KLQkJCQl+d204MzUwX3JlZ19yZWFkKHdtODM1MCwKLQkJCQkJCSBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0sgKwotCQkJCQkJIGRhdGEtPnJlZyk7CisJCQlzdWJfcmVnW2RhdGEtPnJlZ10gJj0gfndtODM1MC0+aXJxX21hc2tzW2RhdGEtPnJlZ107CiAJCQlyZWFkX2RvbmVbZGF0YS0+cmVnXSA9IDE7CiAJCX0KIAogCQlpZiAoc3ViX3JlZ1tkYXRhLT5yZWddICYgZGF0YS0+bWFzaykKLQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgaSk7CisJCQloYW5kbGVfbmVzdGVkX2lycSh3bTgzNTAtPmlycV9iYXNlICsgaSk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1pbnQgd204MzUwX3JlZ2lzdGVyX2lycShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpcnEsCi0JCQlpcnFfaGFuZGxlcl90IGhhbmRsZXIsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCi0JCQljb25zdCBjaGFyICpuYW1lLCB2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgd204MzUwX2lycV9sb2NrKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JaWYgKGlycSA8IDAgfHwgaXJxID49IFdNODM1MF9OVU1fSVJRIHx8ICFoYW5kbGVyKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwogCi0JaWYgKHdtODM1MC0+aXJxW2lycV0uaGFuZGxlcikKLQkJcmV0dXJuIC1FQlVTWTsKLQotCW11dGV4X2xvY2soJndtODM1MC0+aXJxX211dGV4KTsKLQl3bTgzNTAtPmlycVtpcnFdLmhhbmRsZXIgPSBoYW5kbGVyOwotCXdtODM1MC0+aXJxW2lycV0uZGF0YSA9IGRhdGE7Ci0JbXV0ZXhfdW5sb2NrKCZ3bTgzNTAtPmlycV9tdXRleCk7Ci0KLQl3bTgzNTBfdW5tYXNrX2lycSh3bTgzNTAsIGlycSk7Ci0KLQlyZXR1cm4gMDsKKwltdXRleF9sb2NrKCZ3bTgzNTAtPmlycV9sb2NrKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9yZWdpc3Rlcl9pcnEpOwogCi1pbnQgd204MzUwX2ZyZWVfaXJxKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSkKK3N0YXRpYyB2b2lkIHdtODM1MF9pcnFfc3luY191bmxvY2sodW5zaWduZWQgaW50IGlycSkKIHsKLQlpZiAoaXJxIDwgMCB8fCBpcnEgPj0gV004MzUwX05VTV9JUlEpCi0JCXJldHVybiAtRUlOVkFMOworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJaW50IGk7CiAKLQl3bTgzNTBfbWFza19pcnEod204MzUwLCBpcnEpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODM1MC0+aXJxX21hc2tzKTsgaSsrKSB7CisJCS8qIElmIHRoZXJlJ3MgYmVlbiBhIGNoYW5nZSBpbiB0aGUgbWFzayB3cml0ZSBpdCBiYWNrCisJCSAqIHRvIHRoZSBoYXJkd2FyZS4gKi8KKwkJaWYgKHdtODM1MC0+aXJxX21hc2tzW2ldICE9CisJCSAgICB3bTgzNTAtPnJlZ19jYWNoZVtXTTgzNTBfSU5UX1NUQVRVU18xX01BU0sgKyBpXSkKKwkJCVdBUk5fT04od204MzUwX3JlZ193cml0ZSh3bTgzNTAsCisJCQkJCSBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0sgKyBpLAorCQkJCQkJIHdtODM1MC0+aXJxX21hc2tzW2ldKSk7CisJfQogCi0JbXV0ZXhfbG9jaygmd204MzUwLT5pcnFfbXV0ZXgpOwotCXdtODM1MC0+aXJxW2lycV0uaGFuZGxlciA9IE5VTEw7Ci0JbXV0ZXhfdW5sb2NrKCZ3bTgzNTAtPmlycV9tdXRleCk7Ci0JcmV0dXJuIDA7CisJbXV0ZXhfdW5sb2NrKCZ3bTgzNTAtPmlycV9sb2NrKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9mcmVlX2lycSk7CiAKLWludCB3bTgzNTBfbWFza19pcnEoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxKQorc3RhdGljIHZvaWQgd204MzUwX2lycV9lbmFibGUodW5zaWduZWQgaW50IGlycSkKIHsKLQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLICsKLQkJCSAgICAgICB3bTgzNTBfaXJxc1tpcnFdLnJlZywKLQkJCSAgICAgICB3bTgzNTBfaXJxc1tpcnFdLm1hc2spOwotfQotRVhQT1JUX1NZTUJPTF9HUEwod204MzUwX21hc2tfaXJxKTsKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXN0cnVjdCB3bTgzNTBfaXJxX2RhdGEgKmlycV9kYXRhID0gaXJxX3RvX3dtODM1MF9pcnEod204MzUwLCBpcnEpOwogCi1pbnQgd204MzUwX3VubWFza19pcnEoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxKQotewotCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSyArCi0JCQkJIHdtODM1MF9pcnFzW2lycV0ucmVnLAotCQkJCSB3bTgzNTBfaXJxc1tpcnFdLm1hc2spOworCXdtODM1MC0+aXJxX21hc2tzW2lycV9kYXRhLT5yZWddICY9IH5pcnFfZGF0YS0+bWFzazsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF91bm1hc2tfaXJxKTsKKworc3RhdGljIHZvaWQgd204MzUwX2lycV9kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwlzdHJ1Y3Qgd204MzUwX2lycV9kYXRhICppcnFfZGF0YSA9IGlycV90b193bTgzNTBfaXJxKHdtODM1MCwgaXJxKTsKKworCXdtODM1MC0+aXJxX21hc2tzW2lycV9kYXRhLT5yZWddIHw9IGlycV9kYXRhLT5tYXNrOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHdtODM1MF9pcnFfY2hpcCA9IHsKKwkubmFtZSA9ICJ3bTgzNTAiLAorCS5idXNfbG9jayA9IHdtODM1MF9pcnFfbG9jaywKKwkuYnVzX3N5bmNfdW5sb2NrID0gd204MzUwX2lycV9zeW5jX3VubG9jaywKKwkuZGlzYWJsZSA9IHdtODM1MF9pcnFfZGlzYWJsZSwKKwkuZW5hYmxlID0gd204MzUwX2lycV9lbmFibGUsCit9OwogCiBpbnQgd204MzUwX2lycV9pbml0KHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSwKIAkJICAgIHN0cnVjdCB3bTgzNTBfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCiB7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBjdXJfaXJxLCBpOwogCWludCBmbGFncyA9IElSUUZfT05FU0hPVDsKIAogCWlmICghaXJxKSB7Ci0JCWRldl9lcnIod204MzUwLT5kZXYsICJObyBJUlEgY29uZmlndXJlZFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlkZXZfd2Fybih3bTgzNTAtPmRldiwgIk5vIGludGVycnVwdCBzdXBwb3J0LCBubyBjb3JlIElSUVxuIik7CisJCXJldHVybiAwOwogCX0KIAorCWlmICghcGRhdGEgfHwgIXBkYXRhLT5pcnFfYmFzZSkgeworCQlkZXZfd2Fybih3bTgzNTAtPmRldiwgIk5vIGludGVycnVwdCBzdXBwb3J0LCBubyBJUlEgYmFzZVxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIE1hc2sgdG9wIGxldmVsIGludGVycnVwdHMgKi8KIAl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX1NZU1RFTV9JTlRFUlJVUFRTX01BU0ssIDB4RkZGRik7Ci0Jd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywgMHhGRkZGKTsKLQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLCAweEZGRkYpOwotCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssIDB4RkZGRik7Ci0Jd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywgMHhGRkZGKTsKLQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLCAweEZGRkYpOwogCi0JbXV0ZXhfaW5pdCgmd204MzUwLT5pcnFfbXV0ZXgpOworCS8qIE1hc2sgYWxsIGluZGl2aWR1YWwgaW50ZXJydXB0cyBieSBkZWZhdWx0IGFuZCBjYWNoZSB0aGUKKwkgKiBtYXNrcy4gIFdlIHJlYWQgdGhlIG1hc2tzIGJhY2sgc2luY2UgdGhlcmUgYXJlIHVud3JpdGFibGUKKwkgKiBiaXRzIGluIHRoZSBtYXNrIHJlZ2lzdGVycy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTgzNTAtPmlycV9tYXNrcyk7IGkrKykgeworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLICsgaSwKKwkJCQkgMHhGRkZGKTsKKwkJd204MzUwLT5pcnFfbWFza3NbaV0gPQorCQkJd204MzUwX3JlZ19yZWFkKHdtODM1MCwKKwkJCQkJV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLICsgaSk7CisJfQorCisJbXV0ZXhfaW5pdCgmd204MzUwLT5pcnFfbG9jayk7CiAJd204MzUwLT5jaGlwX2lycSA9IGlycTsKKwl3bTgzNTAtPmlycV9iYXNlID0gcGRhdGEtPmlycV9iYXNlOwogCi0JaWYgKHBkYXRhICYmIHBkYXRhLT5pcnFfaGlnaCkgeworCWlmIChwZGF0YS0+aXJxX2hpZ2gpIHsKIAkJZmxhZ3MgfD0gSVJRRl9UUklHR0VSX0hJR0g7CiAKIAkJd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX1NZU1RFTV9DT05UUk9MXzEsCkBAIC01MTQsMTEgKzUxMiwzMiBAQAogCQkJCSAgV004MzUwX0lSUV9QT0wpOwogCX0KIAorCS8qIFJlZ2lzdGVyIHdpdGggZ2VuaXJxICovCisJZm9yIChjdXJfaXJxID0gd204MzUwLT5pcnFfYmFzZTsKKwkgICAgIGN1cl9pcnEgPCBBUlJBWV9TSVpFKHdtODM1MF9pcnFzKSArIHdtODM1MC0+aXJxX2Jhc2U7CisJICAgICBjdXJfaXJxKyspIHsKKwkJc2V0X2lycV9jaGlwX2RhdGEoY3VyX2lycSwgd204MzUwKTsKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGN1cl9pcnEsICZ3bTgzNTBfaXJxX2NoaXAsCisJCQkJCSBoYW5kbGVfZWRnZV9pcnEpOworCQlzZXRfaXJxX25lc3RlZF90aHJlYWQoY3VyX2lycSwgMSk7CisKKwkJLyogQVJNIG5lZWRzIHVzIHRvIGV4cGxpY2l0bHkgZmxhZyB0aGUgSVJRIGFzIHZhbGlkCisJCSAqIGFuZCB3aWxsIHNldCB0aGVtIG5vcHJvYmUgd2hlbiB3ZSBkbyBzby4gKi8KKyNpZmRlZiBDT05GSUdfQVJNCisJCXNldF9pcnFfZmxhZ3MoY3VyX2lycSwgSVJRRl9WQUxJRCk7CisjZWxzZQorCQlzZXRfaXJxX25vcHJvYmUoY3VyX2lycSk7CisjZW5kaWYKKwl9CisKIAlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShpcnEsIE5VTEwsIHdtODM1MF9pcnEsIGZsYWdzLAogCQkJCSAgICJ3bTgzNTAiLCB3bTgzNTApOwogCWlmIChyZXQgIT0gMCkKIAkJZGV2X2Vycih3bTgzNTAtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IElSUTogJWRcbiIsIHJldCk7CiAKKwkvKiBBbGxvdyBpbnRlcnJ1cHRzIHRvIGZpcmUgKi8KKwl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX1NZU1RFTV9JTlRFUlJVUFRTX01BU0ssIDApOworCiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd204OTk0LWNvcmUuYyBiL2RyaXZlcnMvbWZkL3dtODk5NC1jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ0ZTFjMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkL3dtODk5NC1jb3JlLmMKQEAgLTAsMCArMSw1MzcgQEAKKy8qCisgKiB3bTg5OTQtY29yZS5jICAtLSAgRGV2aWNlIGFjY2VzcyBmb3IgV29sZnNvbiBXTTg5OTQKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKworI2luY2x1ZGUgPGxpbnV4L21mZC93bTg5OTQvY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTg5OTQvcGRhdGEuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204OTk0L3JlZ2lzdGVycy5oPgorCitzdGF0aWMgaW50IHdtODk5NF9yZWFkKHN0cnVjdCB3bTg5OTQgKndtODk5NCwgdW5zaWduZWQgc2hvcnQgcmVnLAorCQkgICAgICAgaW50IGJ5dGVzLCB2b2lkICpkZXN0KQoreworCWludCByZXQsIGk7CisJdTE2ICpidWYgPSBkZXN0OworCisJQlVHX09OKGJ5dGVzICUgMik7CisJQlVHX09OKGJ5dGVzIDw9IDApOworCisJcmV0ID0gd204OTk0LT5yZWFkX2Rldih3bTg5OTQsIHJlZywgYnl0ZXMsIGRlc3QpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZm9yIChpID0gMDsgaSA8IGJ5dGVzIC8gMjsgaSsrKSB7CisJCWJ1ZltpXSA9IGJlMTZfdG9fY3B1KGJ1ZltpXSk7CisKKwkJZGV2X3ZkYmcod204OTk0LT5kZXYsICJSZWFkICUwNHggZnJvbSBSJWQoMHgleClcbiIsCisJCQkgYnVmW2ldLCByZWcgKyBpLCByZWcgKyBpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB3bTg5OTRfcmVnX3JlYWQ6IFJlYWQgYSBzaW5nbGUgV004OTk0IHJlZ2lzdGVyLgorICoKKyAqIEB3bTg5OTQ6IERldmljZSB0byByZWFkIGZyb20uCisgKiBAcmVnOiBSZWdpc3RlciB0byByZWFkLgorICovCitpbnQgd204OTk0X3JlZ19yZWFkKHN0cnVjdCB3bTg5OTQgKndtODk5NCwgdW5zaWduZWQgc2hvcnQgcmVnKQoreworCXVuc2lnbmVkIHNob3J0IHZhbDsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmd204OTk0LT5pb19sb2NrKTsKKworCXJldCA9IHdtODk5NF9yZWFkKHdtODk5NCwgcmVnLCAyLCAmdmFsKTsKKworCW11dGV4X3VubG9jaygmd204OTk0LT5pb19sb2NrKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWVsc2UKKwkJcmV0dXJuIHZhbDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODk5NF9yZWdfcmVhZCk7CisKKy8qKgorICogd204OTk0X2J1bGtfcmVhZDogUmVhZCBtdWx0aXBsZSBXTTg5OTQgcmVnaXN0ZXJzCisgKgorICogQHdtODk5NDogRGV2aWNlIHRvIHJlYWQgZnJvbQorICogQHJlZzogRmlyc3QgcmVnaXN0ZXIKKyAqIEBjb3VudDogTnVtYmVyIG9mIHJlZ2lzdGVycworICogQGJ1ZjogQnVmZmVyIHRvIGZpbGwuCisgKi8KK2ludCB3bTg5OTRfYnVsa19yZWFkKHN0cnVjdCB3bTg5OTQgKndtODk5NCwgdW5zaWduZWQgc2hvcnQgcmVnLAorCQkgICAgIGludCBjb3VudCwgdTE2ICpidWYpCit7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJndtODk5NC0+aW9fbG9jayk7CisKKwlyZXQgPSB3bTg5OTRfcmVhZCh3bTg5OTQsIHJlZywgY291bnQgKiAyLCBidWYpOworCisJbXV0ZXhfdW5sb2NrKCZ3bTg5OTQtPmlvX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODk5NF9idWxrX3JlYWQpOworCitzdGF0aWMgaW50IHdtODk5NF93cml0ZShzdHJ1Y3Qgd204OTk0ICp3bTg5OTQsIHVuc2lnbmVkIHNob3J0IHJlZywKKwkJCWludCBieXRlcywgdm9pZCAqc3JjKQoreworCXUxNiAqYnVmID0gc3JjOworCWludCBpOworCisJQlVHX09OKGJ5dGVzICUgMik7CisJQlVHX09OKGJ5dGVzIDw9IDApOworCisJZm9yIChpID0gMDsgaSA8IGJ5dGVzIC8gMjsgaSsrKSB7CisJCWRldl92ZGJnKHdtODk5NC0+ZGV2LCAiV3JpdGUgJTA0eCB0byBSJWQoMHgleClcbiIsCisJCQkgYnVmW2ldLCByZWcgKyBpLCByZWcgKyBpKTsKKworCQlidWZbaV0gPSBjcHVfdG9fYmUxNihidWZbaV0pOworCX0KKworCXJldHVybiB3bTg5OTQtPndyaXRlX2Rldih3bTg5OTQsIHJlZywgYnl0ZXMsIHNyYyk7Cit9CisKKy8qKgorICogd204OTk0X3JlZ193cml0ZTogV3JpdGUgYSBzaW5nbGUgV004OTk0IHJlZ2lzdGVyLgorICoKKyAqIEB3bTg5OTQ6IERldmljZSB0byB3cml0ZSB0by4KKyAqIEByZWc6IFJlZ2lzdGVyIHRvIHdyaXRlIHRvLgorICogQHZhbDogVmFsdWUgdG8gd3JpdGUuCisgKi8KK2ludCB3bTg5OTRfcmVnX3dyaXRlKHN0cnVjdCB3bTg5OTQgKndtODk5NCwgdW5zaWduZWQgc2hvcnQgcmVnLAorCQkgICAgIHVuc2lnbmVkIHNob3J0IHZhbCkKK3sKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmd204OTk0LT5pb19sb2NrKTsKKworCXJldCA9IHdtODk5NF93cml0ZSh3bTg5OTQsIHJlZywgMiwgJnZhbCk7CisKKwltdXRleF91bmxvY2soJndtODk5NC0+aW9fbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwod204OTk0X3JlZ193cml0ZSk7CisKKy8qKgorICogd204OTk0X3NldF9iaXRzOiBTZXQgdGhlIHZhbHVlIG9mIGEgYml0ZmllbGQgaW4gYSBXTTg5OTQgcmVnaXN0ZXIKKyAqCisgKiBAd204OTk0OiBEZXZpY2UgdG8gd3JpdGUgdG8uCisgKiBAcmVnOiBSZWdpc3RlciB0byB3cml0ZSB0by4KKyAqIEBtYXNrOiBNYXNrIG9mIGJpdHMgdG8gc2V0LgorICogQHZhbDogVmFsdWUgdG8gc2V0ICh1bnNoaWZ0ZWQpCisgKi8KK2ludCB3bTg5OTRfc2V0X2JpdHMoc3RydWN0IHdtODk5NCAqd204OTk0LCB1bnNpZ25lZCBzaG9ydCByZWcsCisJCSAgICB1bnNpZ25lZCBzaG9ydCBtYXNrLCB1bnNpZ25lZCBzaG9ydCB2YWwpCit7CisJaW50IHJldDsKKwl1MTYgcjsKKworCW11dGV4X2xvY2soJndtODk5NC0+aW9fbG9jayk7CisKKwlyZXQgPSB3bTg5OTRfcmVhZCh3bTg5OTQsIHJlZywgMiwgJnIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXIgJj0gfm1hc2s7CisJciB8PSB2YWw7CisKKwlyZXQgPSB3bTg5OTRfd3JpdGUod204OTk0LCByZWcsIDIsICZyKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd204OTk0LT5pb19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTg5OTRfc2V0X2JpdHMpOworCitzdGF0aWMgc3RydWN0IG1mZF9jZWxsIHdtODk5NF9yZWd1bGF0b3JfZGV2c1tdID0geworCXsgLm5hbWUgPSAid204OTk0LWxkbyIsIC5pZCA9IDEgfSwKKwl7IC5uYW1lID0gIndtODk5NC1sZG8iLCAuaWQgPSAyIH0sCit9OworCitzdGF0aWMgc3RydWN0IG1mZF9jZWxsIHdtODk5NF9kZXZzW10gPSB7CisJeyAubmFtZSA9ICJ3bTg5OTQtY29kZWMiIH0sCisJeyAubmFtZSA9ICJ3bTg5OTQtZ3BpbyIgfSwKK307CisKKy8qCisgKiBTdXBwbGllcyBmb3IgdGhlIG1haW4gYnVsayBvZiBDT0RFQzsgdGhlIExETyBzdXBwbGllcyBhcmUgaWdub3JlZAorICogYW5kIHNob3VsZCBiZSBoYW5kbGVkIHZpYSB0aGUgc3RhbmRhcmQgcmVndWxhdG9yIEFQSSBzdXBwbHkKKyAqIG1hbmFnZW1lbnQuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5OTRfbWFpbl9zdXBwbGllc1tdID0geworCSJEQlZERCIsCisJIkRDVkREIiwKKwkiQVZERDEiLAorCSJBVkREMiIsCisJIkNQVkREIiwKKwkiU1BLVkREMSIsCisJIlNQS1ZERDIiLAorfTsKKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCB3bTg5OTRfZGV2aWNlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB3bTg5OTQgKndtODk5NCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQ7CisKKwkvKiBHUElPIGNvbmZpZ3VyYXRpb24gc3RhdGUgaXMgc2F2ZWQgaGVyZSBzaW5jZSB3ZSBtYXkgYmUgY29uZmlndXJpbmcKKwkgKiB0aGUgR1BJTyBhbHRlcm5hdGUgZnVuY3Rpb25zIGV2ZW4gaWYgd2UncmUgbm90IHVzaW5nIHRoZSBncGlvbGliCisJICogZHJpdmVyIGZvciB0aGVtLgorCSAqLworCXJldCA9IHdtODk5NF9yZWFkKHdtODk5NCwgV004OTk0X0dQSU9fMSwgV004OTk0X05VTV9HUElPX1JFR1MgKiAyLAorCQkJICAmd204OTk0LT5ncGlvX3JlZ3MpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBzYXZlIEdQSU8gcmVnaXN0ZXJzOiAlZFxuIiwgcmV0KTsKKworCS8qIEZvciBzaW1pbGFyIHJlYXNvbnMgd2UgYWxzbyBzdGFzaCB0aGUgcmVndWxhdG9yIHN0YXRlcyAqLworCXJldCA9IHdtODk5NF9yZWFkKHdtODk5NCwgV004OTk0X0xET18xLCBXTTg5OTRfTlVNX0xET19SRUdTICogMiwKKwkJCSAgJndtODk5NC0+bGRvX3JlZ3MpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBzYXZlIExETyByZWdpc3RlcnM6ICVkXG4iLCByZXQpOworCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHdtODk5NF9tYWluX3N1cHBsaWVzKSwKKwkJCQkgICAgIHdtODk5NC0+c3VwcGxpZXMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBkaXNhYmxlIHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTRfZGV2aWNlX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHdtODk5NCAqd204OTk0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldDsKKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHdtODk5NF9tYWluX3N1cHBsaWVzKSwKKwkJCQkgICAgd204OTk0LT5zdXBwbGllcyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gd204OTk0X3dyaXRlKHdtODk5NCwgV004OTk0X0xET18xLCBXTTg5OTRfTlVNX0xET19SRUdTICogMiwKKwkJCSAgICZ3bTg5OTQtPmxkb19yZWdzKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVzdG9yZSBMRE8gcmVnaXN0ZXJzOiAlZFxuIiwgcmV0KTsKKworCXJldCA9IHdtODk5NF93cml0ZSh3bTg5OTQsIFdNODk5NF9HUElPXzEsIFdNODk5NF9OVU1fR1BJT19SRUdTICogMiwKKwkJCSAgICZ3bTg5OTQtPmdwaW9fcmVncyk7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlc3RvcmUgR1BJTyByZWdpc3RlcnM6ICVkXG4iLCByZXQpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19SRUdVTEFUT1IKK3N0YXRpYyBpbnQgd204OTk0X2xkb19pbl91c2Uoc3RydWN0IHdtODk5NF9wZGF0YSAqcGRhdGEsIGludCBsZG8pCit7CisJc3RydWN0IHdtODk5NF9sZG9fcGRhdGEgKmxkb19wZGF0YTsKKworCWlmICghcGRhdGEpCisJCXJldHVybiAwOworCisJbGRvX3BkYXRhID0gJnBkYXRhLT5sZG9bbGRvXTsKKworCWlmICghbGRvX3BkYXRhLT5pbml0X2RhdGEpCisJCXJldHVybiAwOworCisJcmV0dXJuIGxkb19wZGF0YS0+aW5pdF9kYXRhLT5udW1fY29uc3VtZXJfc3VwcGxpZXMgIT0gMDsKK30KKyNlbHNlCitzdGF0aWMgaW50IHdtODk5NF9sZG9faW5fdXNlKHN0cnVjdCB3bTg5OTRfcGRhdGEgKnBkYXRhLCBpbnQgbGRvKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKKy8qCisgKiBJbnN0YW50aWF0ZSB0aGUgZ2VuZXJpYyBub24tY29udHJvbCBwYXJ0cyBvZiB0aGUgZGV2aWNlLgorICovCitzdGF0aWMgaW50IHdtODk5NF9kZXZpY2VfaW5pdChzdHJ1Y3Qgd204OTk0ICp3bTg5OTQsIHVuc2lnbmVkIGxvbmcgaWQsIGludCBpcnEpCit7CisJc3RydWN0IHdtODk5NF9wZGF0YSAqcGRhdGEgPSB3bTg5OTQtPmRldi0+cGxhdGZvcm1fZGF0YTsKKwlpbnQgcmV0LCBpOworCisJbXV0ZXhfaW5pdCgmd204OTk0LT5pb19sb2NrKTsKKwlkZXZfc2V0X2RydmRhdGEod204OTk0LT5kZXYsIHdtODk5NCk7CisKKwkvKiBBZGQgdGhlIG9uLWNoaXAgcmVndWxhdG9ycyBmaXJzdCBmb3IgYm9vdHN0cmFwcGluZyAqLworCXJldCA9IG1mZF9hZGRfZGV2aWNlcyh3bTg5OTQtPmRldiwgLTEsCisJCQkgICAgICB3bTg5OTRfcmVndWxhdG9yX2RldnMsCisJCQkgICAgICBBUlJBWV9TSVpFKHdtODk5NF9yZWd1bGF0b3JfZGV2cyksCisJCQkgICAgICBOVUxMLCAwKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycih3bTg5OTQtPmRldiwgIkZhaWxlZCB0byBhZGQgY2hpbGRyZW46ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwl3bTg5OTQtPnN1cHBsaWVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEpICoKKwkJCQkgICBBUlJBWV9TSVpFKHdtODk5NF9tYWluX3N1cHBsaWVzKSwKKwkJCQkgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXdtODk5NC0+c3VwcGxpZXMpCisJCWdvdG8gZXJyOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTk0X21haW5fc3VwcGxpZXMpOyBpKyspCisJCXdtODk5NC0+c3VwcGxpZXNbaV0uc3VwcGx5ID0gd204OTk0X21haW5fc3VwcGxpZXNbaV07CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19nZXQod204OTk0LT5kZXYsIEFSUkFZX1NJWkUod204OTk0X21haW5fc3VwcGxpZXMpLAorCQkJCSB3bTg5OTQtPnN1cHBsaWVzKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycih3bTg5OTQtPmRldiwgIkZhaWxlZCB0byBnZXQgc3VwcGxpZXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9zdXBwbGllczsKKwl9CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRSh3bTg5OTRfbWFpbl9zdXBwbGllcyksCisJCQkJICAgIHdtODk5NC0+c3VwcGxpZXMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKHdtODk5NC0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2dldDsKKwl9CisKKwlyZXQgPSB3bTg5OTRfcmVnX3JlYWQod204OTk0LCBXTTg5OTRfU09GVFdBUkVfUkVTRVQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIod204OTk0LT5kZXYsICJGYWlsZWQgdG8gcmVhZCBJRCByZWdpc3RlclxuIik7CisJCWdvdG8gZXJyX2VuYWJsZTsKKwl9CisJaWYgKHJldCAhPSAweDg5OTQpIHsKKwkJZGV2X2Vycih3bTg5OTQtPmRldiwgIkRldmljZSBpcyBub3QgYSBXTTg5OTQsIElEIGlzICV4XG4iLAorCQkJcmV0KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJfZW5hYmxlOworCX0KKworCXJldCA9IHdtODk5NF9yZWdfcmVhZCh3bTg5OTQsIFdNODk5NF9DSElQX1JFVklTSU9OKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKHdtODk5NC0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgcmV2aXNpb24gcmVnaXN0ZXI6ICVkXG4iLAorCQkJcmV0KTsKKwkJZ290byBlcnJfZW5hYmxlOworCX0KKworCXN3aXRjaCAocmV0KSB7CisJY2FzZSAwOgorCWNhc2UgMToKKwkJZGV2X3dhcm4od204OTk0LT5kZXYsICJyZXZpc2lvbiAlYyBub3QgZnVsbHkgc3VwcG9ydGVkXG4iLAorCQkJJ0EnICsgcmV0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2luZm8od204OTk0LT5kZXYsICJyZXZpc2lvbiAlY1xuIiwgJ0EnICsgcmV0KTsKKwkJYnJlYWs7CisJfQorCisKKwlpZiAocGRhdGEpIHsKKwkJd204OTk0LT5ncGlvX2Jhc2UgPSBwZGF0YS0+Z3Bpb19iYXNlOworCisJCS8qIEdQSU8gY29uZmlndXJhdGlvbiBpcyBvbmx5IGFwcGxpZWQgaWYgaXQncyBub24temVybyAqLworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZGF0YS0+Z3Bpb19kZWZhdWx0cyk7IGkrKykgeworCQkJaWYgKHBkYXRhLT5ncGlvX2RlZmF1bHRzW2ldKSB7CisJCQkJd204OTk0X3NldF9iaXRzKHdtODk5NCwgV004OTk0X0dQSU9fMSArIGksCisJCQkJCQkweGZmZmYsCisJCQkJCQlwZGF0YS0+Z3Bpb19kZWZhdWx0c1tpXSk7CisJCQl9CisJCX0KKwl9CisKKwkvKiBJbiBzb21lIHN5c3RlbSBkZXNpZ25zIHdoZXJlIHRoZSByZWd1bGF0b3JzIGFyZSBub3QgaW4gdXNlLAorCSAqIHdlIGNhbiBhY2hpZXZlIGEgc21hbGwgcmVkdWN0aW9uIGluIGxlYWthZ2UgY3VycmVudHMgYnkKKwkgKiBmbG9hdGluZyBMRE8gb3V0cHV0cy4gIFRoaXMgYml0IG1ha2VzIG5vIGRpZmZlcmVuY2UgaWYgdGhlCisJICogTERPcyBhcmUgZW5hYmxlZCwgaXQgb25seSBhZmZlY3RzIGNhc2VzIHdoZXJlIHRoZSBMRE9zIHdlcmUKKwkgKiBpbiBvcGVyYXRpb24gYW5kIGFyZSB0aGVuIGRpc2FibGVkLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBXTTg5OTRfTlVNX0xET19SRUdTOyBpKyspIHsKKwkJaWYgKHdtODk5NF9sZG9faW5fdXNlKHBkYXRhLCBpKSkKKwkJCXdtODk5NF9zZXRfYml0cyh3bTg5OTQsIFdNODk5NF9MRE9fMSArIGksCisJCQkJCVdNODk5NF9MRE8xX0RJU0NILCBXTTg5OTRfTERPMV9ESVNDSCk7CisJCWVsc2UKKwkJCXdtODk5NF9zZXRfYml0cyh3bTg5OTQsIFdNODk5NF9MRE9fMSArIGksCisJCQkJCVdNODk5NF9MRE8xX0RJU0NILCAwKTsKKwl9CisKKwlyZXQgPSBtZmRfYWRkX2RldmljZXMod204OTk0LT5kZXYsIC0xLAorCQkJICAgICAgd204OTk0X2RldnMsIEFSUkFZX1NJWkUod204OTk0X2RldnMpLAorCQkJICAgICAgTlVMTCwgMCk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIod204OTk0LT5kZXYsICJGYWlsZWQgdG8gYWRkIGNoaWxkcmVuOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZW5hYmxlOworCX0KKworCXJldHVybiAwOworCitlcnJfZW5hYmxlOgorCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRSh3bTg5OTRfbWFpbl9zdXBwbGllcyksCisJCQkgICAgICAgd204OTk0LT5zdXBwbGllcyk7CitlcnJfZ2V0OgorCXJlZ3VsYXRvcl9idWxrX2ZyZWUoQVJSQVlfU0laRSh3bTg5OTRfbWFpbl9zdXBwbGllcyksIHdtODk5NC0+c3VwcGxpZXMpOworZXJyX3N1cHBsaWVzOgorCWtmcmVlKHdtODk5NC0+c3VwcGxpZXMpOworZXJyOgorCW1mZF9yZW1vdmVfZGV2aWNlcyh3bTg5OTQtPmRldik7CisJa2ZyZWUod204OTk0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB3bTg5OTRfZGV2aWNlX2V4aXQoc3RydWN0IHdtODk5NCAqd204OTk0KQoreworCW1mZF9yZW1vdmVfZGV2aWNlcyh3bTg5OTQtPmRldik7CisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHdtODk5NF9tYWluX3N1cHBsaWVzKSwKKwkJCSAgICAgICB3bTg5OTQtPnN1cHBsaWVzKTsKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUod204OTk0X21haW5fc3VwcGxpZXMpLCB3bTg5OTQtPnN1cHBsaWVzKTsKKwlrZnJlZSh3bTg5OTQtPnN1cHBsaWVzKTsKKwlrZnJlZSh3bTg5OTQpOworfQorCitzdGF0aWMgaW50IHdtODk5NF9pMmNfcmVhZF9kZXZpY2Uoc3RydWN0IHdtODk5NCAqd204OTk0LCB1bnNpZ25lZCBzaG9ydCByZWcsCisJCQkJICBpbnQgYnl0ZXMsIHZvaWQgKmRlc3QpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IHdtODk5NC0+Y29udHJvbF9kYXRhOworCWludCByZXQ7CisJdTE2IHIgPSBjcHVfdG9fYmUxNihyZWcpOworCisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGkyYywgKHVuc2lnbmVkIGNoYXIgKikmciwgMik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKHJldCAhPSAyKQorCQlyZXR1cm4gLUVJTzsKKworCXJldCA9IGkyY19tYXN0ZXJfcmVjdihpMmMsIGRlc3QsIGJ5dGVzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAocmV0ICE9IGJ5dGVzKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworLyogQ3VycmVudGx5IHdlIGFsbG9jYXRlIHRoZSB3cml0ZSBidWZmZXIgb24gdGhlIHN0YWNrOyB0aGlzIGlzIE9LIGZvcgorICogc21hbGwgd3JpdGVzIC0gaWYgd2UgbmVlZCB0byBkbyBsYXJnZSB3cml0ZXMgdGhpcyB3aWxsIG5lZWQgdG8gYmUKKyAqIHJldmlzZWQuCisgKi8KK3N0YXRpYyBpbnQgd204OTk0X2kyY193cml0ZV9kZXZpY2Uoc3RydWN0IHdtODk5NCAqd204OTk0LCB1bnNpZ25lZCBzaG9ydCByZWcsCisJCQkJICAgaW50IGJ5dGVzLCB2b2lkICpzcmMpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IHdtODk5NC0+Y29udHJvbF9kYXRhOworCXVuc2lnbmVkIGNoYXIgbXNnW2J5dGVzICsgMl07CisJaW50IHJldDsKKworCXJlZyA9IGNwdV90b19iZTE2KHJlZyk7CisJbWVtY3B5KCZtc2dbMF0sICZyZWcsIDIpOworCW1lbWNweSgmbXNnWzJdLCBzcmMsIGJ5dGVzKTsKKworCXJldCA9IGkyY19tYXN0ZXJfc2VuZChpMmMsIG1zZywgYnl0ZXMgKyAyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAocmV0IDwgYnl0ZXMgKyAyKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk5NF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHdtODk5NCAqd204OTk0OworCisJd204OTk0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODk5NCksIEdGUF9LRVJORUwpOworCWlmICh3bTg5OTQgPT0gTlVMTCkgeworCQlrZnJlZShpMmMpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCB3bTg5OTQpOworCXdtODk5NC0+ZGV2ID0gJmkyYy0+ZGV2OworCXdtODk5NC0+Y29udHJvbF9kYXRhID0gaTJjOworCXdtODk5NC0+cmVhZF9kZXYgPSB3bTg5OTRfaTJjX3JlYWRfZGV2aWNlOworCXdtODk5NC0+d3JpdGVfZGV2ID0gd204OTk0X2kyY193cml0ZV9kZXZpY2U7CisKKwlyZXR1cm4gd204OTk0X2RldmljZV9pbml0KHdtODk5NCwgaWQtPmRyaXZlcl9kYXRhLCBpMmMtPmlycSk7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmkyYykKK3sKKwlzdHJ1Y3Qgd204OTk0ICp3bTg5OTQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoaTJjKTsKKworCXdtODk5NF9kZXZpY2VfZXhpdCh3bTg5OTQpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgd204OTk0X2kyY19zdXNwZW5kKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gd204OTk0X2RldmljZV9zdXNwZW5kKCZpMmMtPmRldik7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X2kyY19yZXN1bWUoc3RydWN0IGkyY19jbGllbnQgKmkyYykKK3sKKwlyZXR1cm4gd204OTk0X2RldmljZV9yZXN1bWUoJmkyYy0+ZGV2KTsKK30KKyNlbHNlCisjZGVmaW5lIHdtODk5NF9pMmNfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHdtODk5NF9pMmNfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd204OTk0X2kyY19pZFtdID0geworCXsgIndtODk5NCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgd204OTk0X2kyY19pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3bTg5OTRfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9ICJ3bTg5OTQiLAorCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IHdtODk5NF9pMmNfcHJvYmUsCisJLnJlbW92ZSA9IHdtODk5NF9pMmNfcmVtb3ZlLAorCS5zdXNwZW5kID0gd204OTk0X2kyY19zdXNwZW5kLAorCS5yZXN1bWUgPSB3bTg5OTRfaTJjX3Jlc3VtZSwKKwkuaWRfdGFibGUgPSB3bTg5OTRfaTJjX2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd204OTk0X2kyY19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGkyY19hZGRfZHJpdmVyKCZ3bTg5OTRfaTJjX2RyaXZlcik7CisJaWYgKHJldCAhPSAwKQorCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciB3bTg5OTQgSTJDIGRyaXZlcjogJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorbW9kdWxlX2luaXQod204OTk0X2kyY19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdtODk5NF9pMmNfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZ3bTg5OTRfaTJjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh3bTg5OTRfaTJjX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkNvcmUgc3VwcG9ydCBmb3IgdGhlIFdNODk5NCBhdWRpbyBDT0RFQyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCmluZGV4IGUzNTUxZDIuLmQxNmFmNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCkBAIC0yMTIsNiArMjEyLDE1IEBACiAJICB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBJUlEgYnkgZGVmYXVsdC4gIFRoaXMgaXMgaGVyZSBmb3IKIAkgIGFyY2hpdGVjdHVyZXMgdG8gc2V0IGFzIG5lY2Vzc2FyeS4KIAorY29uZmlnIENTNTUzNV9DTE9DS19FVkVOVF9TUkMKKwl0cmlzdGF0ZSAiQ1M1NTM1L0NTNTUzNiBoaWdoLXJlcyB0aW1lciAoTUZHUFQpIGV2ZW50cyIKKwlkZXBlbmRzIG9uIEdFTkVSSUNfVElNRSAmJiBHRU5FUklDX0NMT0NLRVZFTlRTICYmIENTNTUzNV9NRkdQVAorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGEgY2xvY2sgZXZlbnQgc291cmNlIGJhc2VkIG9uIHRoZSBNRkdQVAorCSAgdGltZXIocykgaW4gdGhlIENTNTUzNSBhbmQgQ1M1NTM2IGNvbXBhbmlvbiBjaGlwcy4KKwkgIE1GR1BUcyBoYXZlIGEgYmV0dGVyIHJlc29sdXRpb24gYW5kIG1heCBpbnRlcnZhbCB0aGFuIHRoZQorCSAgZ2VuZXJpYyBQSVQsIGFuZCBhcmUgc3VpdGFibGUgZm9yIHVzZSBhcyBoaWdoLXJlcyB0aW1lcnMuCisKIGNvbmZpZyBIUF9JTE8KIAl0cmlzdGF0ZSAiQ2hhbm5lbCBpbnRlcmZhY2UgZHJpdmVyIGZvciBIUCBpTE8vaUxPMiBwcm9jZXNzb3IiCiAJZGVwZW5kcyBvbiBQQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pd21jMzIwMHRvcC9tYWluLmMgYi9kcml2ZXJzL21pc2MvaXdtYzMyMDB0b3AvbWFpbi5jCmluZGV4IGRkMGEzOTEuLjNiNzI5MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9pd21jMzIwMHRvcC9tYWluLmMKKysrIGIvZHJpdmVycy9taXNjL2l3bWMzMjAwdG9wL21haW4uYwpAQCAtNTk3LDggKzU5Nyw2IEBACiAJc3RydWN0IGl3bWN0X3dvcmtfc3RydWN0ICpyZWFkX3JlcTsKIAlzdHJ1Y3QgaXdtY3RfcHJpdiAqcHJpdiA9IHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7CiAKLQlwcml2ID0gc2Rpb19nZXRfZHJ2ZGF0YShmdW5jKTsKLQogCUxPR19JTkZPKHByaXYsIElOSVQsICJlbnRlclxuIik7CiAKIAlzZGlvX2NsYWltX2hvc3QoZnVuYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvbGtkdG0uYyBiL2RyaXZlcnMvbWlzYy9sa2R0bS5jCmluZGV4IDM2NDhiMjMuLjRhMDY0ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9sa2R0bS5jCisrKyBiL2RyaXZlcnMvbWlzYy9sa2R0bS5jCkBAIC0yNiwyMSArMjYsOSBAQAogICogSXQgaXMgYWRhcHRlZCBmcm9tIHRoZSBMaW51eCBLZXJuZWwgRHVtcCBUZXN0IFRvb2wgYnkKICAqIEZlcm5hbmRvIEx1aXMgVmF6cXVleiBDYW8gPGh0dHA6Ly9sa2R0dC5zb3VyY2Vmb3JnZS5uZXQ+CiAgKgotICogVXNhZ2UgOiAgaW5zbW9kIGxrZHRtLmtvIFtyZWN1cl9jb3VudD17PjB9XSBjcG9pbnRfbmFtZT08PiBjcG9pbnRfdHlwZT08PgotICoJCQkJCQkJW2Nwb2ludF9jb3VudD17PjB9XQorICogRGVidWdmcyBzdXBwb3J0IGFkZGVkIGJ5IFNpbW9uIEthZ3N0cm9tIDxzaW1vbi5rYWdzdHJvbUBuZXRpbnNpZ2h0Lm5ldD4KICAqCi0gKiByZWN1cl9jb3VudCA6IFJlY3Vyc2lvbiBsZXZlbCBmb3IgdGhlIHN0YWNrIG92ZXJmbG93IHRlc3QuIERlZmF1bHQgaXMgMTAuCi0gKgotICogY3BvaW50X25hbWUgOiBDcmFzaCBwb2ludCB3aGVyZSB0aGUga2VybmVsIGlzIHRvIGJlIGNyYXNoZWQuIEl0IGNhbiBiZQotICoJCSBvbmUgb2YgSU5UX0hBUkRXQVJFX0VOVFJZLCBJTlRfSFdfSVJRX0VOLCBJTlRfVEFTS0xFVF9FTlRSWSwKLSAqCQkgRlNfREVWUlcsIE1FTV9TV0FQT1VULCBUSU1FUkFERCwgU0NTSV9ESVNQQVRDSF9DTUQsCi0gKgkJIElERV9DT1JFX0NQCi0gKgotICogY3BvaW50X3R5cGUgOiBJbmRpY2F0ZXMgdGhlIGFjdGlvbiB0byBiZSB0YWtlbiBvbiBoaXR0aW5nIHRoZSBjcmFzaCBwb2ludC4KLSAqCQkgSXQgY2FuIGJlIG9uZSBvZiBQQU5JQywgQlVHLCBFWENFUFRJT04sIExPT1AsIE9WRVJGTE9XCi0gKgotICogY3BvaW50X2NvdW50IDogSW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGNyYXNoIHBvaW50IGlzIHRvIGJlIGhpdAotICoJCSAgdG8gdHJpZ2dlciBhbiBhY3Rpb24uIFRoZSBkZWZhdWx0IGlzIDEwLgorICogU2VlIERvY3VtZW50YXRpb24vZmF1bHQtaW5qZWN0aW9uL3Byb3Zva2UtY3Jhc2hlcy50eHQgZm9yIGluc3RydWN0aW9ucwogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTUzLDEzICs0MSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KIAogI2lmZGVmIENPTkZJR19JREUKICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KICNlbmRpZgogCi0jZGVmaW5lIE5VTV9DUE9JTlRTIDgKLSNkZWZpbmUgTlVNX0NQT0lOVF9UWVBFUyA1CiAjZGVmaW5lIERFRkFVTFRfQ09VTlQgMTAKICNkZWZpbmUgUkVDX05VTV9ERUZBVUxUIDEwCiAKQEAgLTcyLDcgKzU5LDggQEAKIAlNRU1fU1dBUE9VVCwKIAlUSU1FUkFERCwKIAlTQ1NJX0RJU1BBVENIX0NNRCwKLQlJREVfQ09SRV9DUAorCUlERV9DT1JFX0NQLAorCURJUkVDVCwKIH07CiAKIGVudW0gY3R5cGUgewpAQCAtODEsNyArNjksMTEgQEAKIAlCVUcsCiAJRVhDRVBUSU9OLAogCUxPT1AsCi0JT1ZFUkZMT1cKKwlPVkVSRkxPVywKKwlDT1JSVVBUX1NUQUNLLAorCVVOQUxJR05FRF9MT0FEX1NUT1JFX1dSSVRFLAorCU9WRVJXUklURV9BTExPQ0FUSU9OLAorCVdSSVRFX0FGVEVSX0ZSRUUsCiB9OwogCiBzdGF0aWMgY2hhciogY3BfbmFtZVtdID0gewpAQCAtOTIsNyArODQsOCBAQAogCSJNRU1fU1dBUE9VVCIsCiAJIlRJTUVSQUREIiwKIAkiU0NTSV9ESVNQQVRDSF9DTUQiLAotCSJJREVfQ09SRV9DUCIKKwkiSURFX0NPUkVfQ1AiLAorCSJESVJFQ1QiLAogfTsKIAogc3RhdGljIGNoYXIqIGNwX3R5cGVbXSA9IHsKQEAgLTEwMCw3ICs5MywxMSBAQAogCSJCVUciLAogCSJFWENFUFRJT04iLAogCSJMT09QIiwKLQkiT1ZFUkZMT1ciCisJIk9WRVJGTE9XIiwKKwkiQ09SUlVQVF9TVEFDSyIsCisJIlVOQUxJR05FRF9MT0FEX1NUT1JFX1dSSVRFIiwKKwkiT1ZFUldSSVRFX0FMTE9DQVRJT04iLAorCSJXUklURV9BRlRFUl9GUkVFIiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QganByb2JlIGxrZHRtOwpAQCAtMTkzLDM0ICsxOTAsNjYgQEAKIH0KICNlbmRpZgogCisvKiBSZXR1cm4gdGhlIGNyYXNocG9pbnQgbnVtYmVyIG9yIE5PTkUgaWYgdGhlIG5hbWUgaXMgaW52YWxpZCAqLworc3RhdGljIGVudW0gY3R5cGUgcGFyc2VfY3BfdHlwZShjb25zdCBjaGFyICp3aGF0LCBzaXplX3QgY291bnQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjcF90eXBlKTsgaSsrKSB7CisJCWlmICghc3RyY21wKHdoYXQsIGNwX3R5cGVbaV0pKQorCQkJcmV0dXJuIGkgKyAxOworCX0KKworCXJldHVybiBOT05FOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqY3BfdHlwZV90b19zdHIoZW51bSBjdHlwZSB0eXBlKQoreworCWlmICh0eXBlID09IE5PTkUgfHwgdHlwZSA8IDAgfHwgdHlwZSA+IEFSUkFZX1NJWkUoY3BfdHlwZSkpCisJCXJldHVybiAiTm9uZSI7CisKKwlyZXR1cm4gY3BfdHlwZVt0eXBlIC0gMV07Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpjcF9uYW1lX3RvX3N0cihlbnVtIGNuYW1lIG5hbWUpCit7CisJaWYgKG5hbWUgPT0gSU5WQUxJRCB8fCBuYW1lIDwgMCB8fCBuYW1lID4gQVJSQVlfU0laRShjcF9uYW1lKSkKKwkJcmV0dXJuICJJTlZBTElEIjsKKworCXJldHVybiBjcF9uYW1lW25hbWUgLSAxXTsKK30KKworCiBzdGF0aWMgaW50IGxrZHRtX3BhcnNlX2NvbW1hbmRsaW5lKHZvaWQpCiB7CiAJaW50IGk7CiAKLQlpZiAoY3BvaW50X25hbWUgPT0gTlVMTCB8fCBjcG9pbnRfdHlwZSA9PSBOVUxMIHx8Ci0JCQkJCWNwb2ludF9jb3VudCA8IDEgfHwgcmVjdXJfY291bnQgPCAxKQorCWlmIChjcG9pbnRfY291bnQgPCAxIHx8IHJlY3VyX2NvdW50IDwgMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NQT0lOVFM7ICsraSkgewotCQlpZiAoIXN0cmNtcChjcG9pbnRfbmFtZSwgY3BfbmFtZVtpXSkpIHsKLQkJCWNwb2ludCA9IGkgKyAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NQT0lOVF9UWVBFUzsgKytpKSB7Ci0JCWlmICghc3RyY21wKGNwb2ludF90eXBlLCBjcF90eXBlW2ldKSkgewotCQkJY3B0eXBlID0gaSArIDE7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChjcG9pbnQgPT0gSU5WQUxJRCB8fCBjcHR5cGUgPT0gTk9ORSkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLQogCWNvdW50ID0gY3BvaW50X2NvdW50OwogCi0JcmV0dXJuIDA7CisJLyogTm8gc3BlY2lhbCBwYXJhbWV0ZXJzICovCisJaWYgKCFjcG9pbnRfdHlwZSAmJiAhY3BvaW50X25hbWUpCisJCXJldHVybiAwOworCisJLyogTmVpdGhlciBvciBib3RoIG9mIHRoZXNlIG5lZWQgdG8gYmUgc2V0ICovCisJaWYgKCFjcG9pbnRfdHlwZSB8fCAhY3BvaW50X25hbWUpCisJCXJldHVybiAtRUlOVkFMOworCisJY3B0eXBlID0gcGFyc2VfY3BfdHlwZShjcG9pbnRfdHlwZSwgc3RybGVuKGNwb2ludF90eXBlKSk7CisJaWYgKGNwdHlwZSA9PSBOT05FKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNwX25hbWUpOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoY3BvaW50X25hbWUsIGNwX25hbWVbaV0pKSB7CisJCQljcG9pbnQgPSBpICsgMTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJLyogQ291bGQgbm90IGZpbmQgYSB2YWxpZCBjcmFzaCBwb2ludCAqLworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgaW50IHJlY3Vyc2l2ZV9sb29wKGludCBhKQpAQCAtMjM1LDUzICsyNjQsOTIgQEAKICAgICAgICAgCXJldHVybiByZWN1cnNpdmVfbG9vcChhKTsKIH0KIAotdm9pZCBsa2R0bV9oYW5kbGVyKHZvaWQpCitzdGF0aWMgdm9pZCBsa2R0bV9kb19hY3Rpb24oZW51bSBjdHlwZSB3aGljaCkKIHsKLQlwcmludGsoS0VSTl9JTkZPICJsa2R0bSA6IENyYXNoIHBvaW50ICVzIG9mIHR5cGUgJXMgaGl0XG4iLAotCQkJCQkgY3BvaW50X25hbWUsIGNwb2ludF90eXBlKTsKLQktLWNvdW50OworCXN3aXRjaCAod2hpY2gpIHsKKwljYXNlIFBBTklDOgorCQlwYW5pYygiZHVtcHRlc3QiKTsKKwkJYnJlYWs7CisJY2FzZSBCVUc6CisJCUJVRygpOworCQlicmVhazsKKwljYXNlIEVYQ0VQVElPTjoKKwkJKigoaW50ICopIDApID0gMDsKKwkJYnJlYWs7CisJY2FzZSBMT09QOgorCQlmb3IgKDs7KQorCQkJOworCQlicmVhazsKKwljYXNlIE9WRVJGTE9XOgorCQkodm9pZCkgcmVjdXJzaXZlX2xvb3AoMCk7CisJCWJyZWFrOworCWNhc2UgQ09SUlVQVF9TVEFDSzogeworCQl2b2xhdGlsZSB1MzIgZGF0YVs4XTsKKwkJdm9sYXRpbGUgdTMyICpwID0gZGF0YTsKKworCQlwWzEyXSA9IDB4MTIzNDU2Nzg7CisJCWJyZWFrOworCX0KKwljYXNlIFVOQUxJR05FRF9MT0FEX1NUT1JFX1dSSVRFOiB7CisJCXN0YXRpYyB1OCBkYXRhWzVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKSA9IHsxLCAyLAorCQkJCTMsIDQsIDV9OworCQl1MzIgKnA7CisJCXUzMiB2YWwgPSAweDEyMzQ1Njc4OworCisJCXAgPSAodTMyICopKGRhdGEgKyAxKTsKKwkJaWYgKCpwID09IDApCisJCQl2YWwgPSAweDg3NjU0MzIxOworCQkqcCA9IHZhbDsKKwkJIGJyZWFrOworCX0KKwljYXNlIE9WRVJXUklURV9BTExPQ0FUSU9OOiB7CisJCXNpemVfdCBsZW4gPSAxMDIwOworCQl1MzIgKmRhdGEgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisKKwkJZGF0YVsxMDI0IC8gc2l6ZW9mKHUzMildID0gMHgxMjM0NTY3ODsKKwkJa2ZyZWUoZGF0YSk7CisJCWJyZWFrOworCX0KKwljYXNlIFdSSVRFX0FGVEVSX0ZSRUU6IHsKKwkJc2l6ZV90IGxlbiA9IDEwMjQ7CisJCXUzMiAqZGF0YSA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKworCQlrZnJlZShkYXRhKTsKKwkJc2NoZWR1bGUoKTsKKwkJbWVtc2V0KGRhdGEsIDB4NzgsIGxlbik7CisJCWJyZWFrOworCX0KKwljYXNlIE5PTkU6CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCit9CisKK3N0YXRpYyB2b2lkIGxrZHRtX2hhbmRsZXIodm9pZCkKK3sKKwljb3VudC0tOworCXByaW50ayhLRVJOX0lORk8gImxrZHRtOiBDcmFzaCBwb2ludCAlcyBvZiB0eXBlICVzIGhpdCwgdHJpZ2dlciBpbiAlZCByb3VuZHNcbiIsCisJCQljcF9uYW1lX3RvX3N0cihjcG9pbnQpLCBjcF90eXBlX3RvX3N0cihjcHR5cGUpLCBjb3VudCk7CiAKIAlpZiAoY291bnQgPT0gMCkgewotCQlzd2l0Y2ggKGNwdHlwZSkgewotCQljYXNlIE5PTkU6Ci0JCQlicmVhazsKLQkJY2FzZSBQQU5JQzoKLQkJCXByaW50ayhLRVJOX0lORk8gImxrZHRtIDogUEFOSUNcbiIpOwotCQkJcGFuaWMoImR1bXB0ZXN0Iik7Ci0JCQlicmVhazsKLQkJY2FzZSBCVUc6Ci0JCQlwcmludGsoS0VSTl9JTkZPICJsa2R0bSA6IEJVR1xuIik7Ci0JCQlCVUcoKTsKLQkJCWJyZWFrOwotCQljYXNlIEVYQ0VQVElPTjoKLQkJCXByaW50ayhLRVJOX0lORk8gImxrZHRtIDogRVhDRVBUSU9OXG4iKTsKLQkJCSooKGludCAqKSAwKSA9IDA7Ci0JCQlicmVhazsKLQkJY2FzZSBMT09QOgotCQkJcHJpbnRrKEtFUk5fSU5GTyAibGtkdG0gOiBMT09QXG4iKTsKLQkJCWZvciAoOzspOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1ZFUkZMT1c6Ci0JCQlwcmludGsoS0VSTl9JTkZPICJsa2R0bSA6IE9WRVJGTE9XXG4iKTsKLQkJCSh2b2lkKSByZWN1cnNpdmVfbG9vcCgwKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KKwkJbGtkdG1fZG9fYWN0aW9uKGNwdHlwZSk7CiAJCWNvdW50ID0gY3BvaW50X2NvdW50OwogCX0KIH0KIAotc3RhdGljIGludCBfX2luaXQgbGtkdG1fbW9kdWxlX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgbGtkdG1fcmVnaXN0ZXJfY3BvaW50KGVudW0gY25hbWUgd2hpY2gpCiB7CiAJaW50IHJldDsKIAotCWlmIChsa2R0bV9wYXJzZV9jb21tYW5kbGluZSgpID09IC1FSU5WQUwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAibGtkdG0gOiBJbnZhbGlkIGNvbW1hbmRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJY3BvaW50ID0gSU5WQUxJRDsKKwlpZiAobGtkdG0uZW50cnkgIT0gTlVMTCkKKwkJdW5yZWdpc3Rlcl9qcHJvYmUoJmxrZHRtKTsKIAotCXN3aXRjaCAoY3BvaW50KSB7CisJc3dpdGNoICh3aGljaCkgeworCWNhc2UgRElSRUNUOgorCQlsa2R0bV9kb19hY3Rpb24oY3B0eXBlKTsKKwkJcmV0dXJuIDA7CiAJY2FzZSBJTlRfSEFSRFdBUkVfRU5UUlk6CiAJCWxrZHRtLmtwLnN5bWJvbF9uYW1lID0gImRvX0lSUSI7CiAJCWxrZHRtLmVudHJ5ID0gKGtwcm9iZV9vcGNvZGVfdCopIGpwX2RvX2lycTsKQEAgLTMxNSwyOCArMzgzLDI2OCBAQAogCQlsa2R0bS5rcC5zeW1ib2xfbmFtZSA9ICJnZW5lcmljX2lkZV9pb2N0bCI7CiAJCWxrZHRtLmVudHJ5ID0gKGtwcm9iZV9vcGNvZGVfdCopIGpwX2dlbmVyaWNfaWRlX2lvY3RsOwogI2Vsc2UKLQkJcHJpbnRrKEtFUk5fSU5GTyAibGtkdG0gOiBDcmFzaCBwb2ludCBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibGtkdG06IENyYXNoIHBvaW50IG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKICNlbmRpZgogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9JTkZPICJsa2R0bSA6IEludmFsaWQgQ3Jhc2ggUG9pbnRcbiIpOwotCQlicmVhazsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibGtkdG06IEludmFsaWQgQ3Jhc2ggUG9pbnRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwljcG9pbnQgPSB3aGljaDsKIAlpZiAoKHJldCA9IHJlZ2lzdGVyX2pwcm9iZSgmbGtkdG0pKSA8IDApIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICJsa2R0bSA6IENvdWxkbid0IHJlZ2lzdGVyIGpwcm9iZVxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibGtkdG06IENvdWxkbid0IHJlZ2lzdGVyIGpwcm9iZVxuIik7CisJCWNwb2ludCA9IElOVkFMSUQ7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAibGtkdG0gOiBDcmFzaCBwb2ludCAlcyBvZiB0eXBlICVzIHJlZ2lzdGVyZWRcbiIsCi0JCQkJCQljcG9pbnRfbmFtZSwgY3BvaW50X3R5cGUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGRvX3JlZ2lzdGVyX2VudHJ5KGVudW0gY25hbWUgd2hpY2gsIHN0cnVjdCBmaWxlICpmLAorCQljb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpCit7CisJY2hhciAqYnVmOworCWludCBlcnI7CisKKwlpZiAoY291bnQgPj0gUEFHRV9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJ1ZiA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgY291bnQpKSB7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgYnVmKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCS8qIE5VTEwtdGVybWluYXRlIGFuZCByZW1vdmUgZW50ZXIgKi8KKwlidWZbY291bnRdID0gJ1wwJzsKKwlzdHJpbShidWYpOworCisJY3B0eXBlID0gcGFyc2VfY3BfdHlwZShidWYsIGNvdW50KTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGJ1Zik7CisKKwlpZiAoY3B0eXBlID09IE5PTkUpCisJCXJldHVybiAtRUlOVkFMOworCisJZXJyID0gbGtkdG1fcmVnaXN0ZXJfY3BvaW50KHdoaWNoKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCSpvZmYgKz0gY291bnQ7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qIEdlbmVyaWMgcmVhZCBjYWxsYmFjayB0aGF0IGp1c3QgcHJpbnRzIG91dCB0aGUgYXZhaWxhYmxlIGNyYXNoIHR5cGVzICovCitzdGF0aWMgc3NpemVfdCBsa2R0bV9kZWJ1Z2ZzX3JlYWQoc3RydWN0IGZpbGUgKmYsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZikKK3sKKwljaGFyICpidWY7CisJaW50IGksIG4sIG91dDsKKworCWJ1ZiA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCisJbiA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiQXZhaWxhYmxlIGNyYXNoIHR5cGVzOlxuIik7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3BfdHlwZSk7IGkrKykKKwkJbiArPSBzbnByaW50ZihidWYgKyBuLCBQQUdFX1NJWkUgLSBuLCAiJXNcbiIsIGNwX3R5cGVbaV0pOworCWJ1ZltuXSA9ICdcMCc7CisKKwlvdXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIG9mZiwKKwkJCQkgICAgICBidWYsIG4pOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgYnVmKTsKKworCXJldHVybiBvdXQ7Cit9CisKK3N0YXRpYyBpbnQgbGtkdG1fZGVidWdmc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorewogCXJldHVybiAwOwogfQogCisKK3N0YXRpYyBzc2l6ZV90IGludF9oYXJkd2FyZV9lbnRyeShzdHJ1Y3QgZmlsZSAqZiwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZikKK3sKKwlyZXR1cm4gZG9fcmVnaXN0ZXJfZW50cnkoSU5UX0hBUkRXQVJFX0VOVFJZLCBmLCBidWYsIGNvdW50LCBvZmYpOworfQorCitzdGF0aWMgc3NpemVfdCBpbnRfaHdfaXJxX2VuKHN0cnVjdCBmaWxlICpmLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQlzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmKQoreworCXJldHVybiBkb19yZWdpc3Rlcl9lbnRyeShJTlRfSFdfSVJRX0VOLCBmLCBidWYsIGNvdW50LCBvZmYpOworfQorCitzdGF0aWMgc3NpemVfdCBpbnRfdGFza2xldF9lbnRyeShzdHJ1Y3QgZmlsZSAqZiwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZikKK3sKKwlyZXR1cm4gZG9fcmVnaXN0ZXJfZW50cnkoSU5UX1RBU0tMRVRfRU5UUlksIGYsIGJ1ZiwgY291bnQsIG9mZik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGZzX2RldnJ3X2VudHJ5KHN0cnVjdCBmaWxlICpmLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQlzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmKQoreworCXJldHVybiBkb19yZWdpc3Rlcl9lbnRyeShGU19ERVZSVywgZiwgYnVmLCBjb3VudCwgb2ZmKTsKK30KKworc3RhdGljIHNzaXplX3QgbWVtX3N3YXBvdXRfZW50cnkoc3RydWN0IGZpbGUgKmYsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCXNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpCit7CisJcmV0dXJuIGRvX3JlZ2lzdGVyX2VudHJ5KE1FTV9TV0FQT1VULCBmLCBidWYsIGNvdW50LCBvZmYpOworfQorCitzdGF0aWMgc3NpemVfdCB0aW1lcmFkZF9lbnRyeShzdHJ1Y3QgZmlsZSAqZiwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZikKK3sKKwlyZXR1cm4gZG9fcmVnaXN0ZXJfZW50cnkoVElNRVJBREQsIGYsIGJ1ZiwgY291bnQsIG9mZik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNjc2lfZGlzcGF0Y2hfY21kX2VudHJ5KHN0cnVjdCBmaWxlICpmLAorCQljb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmKQoreworCXJldHVybiBkb19yZWdpc3Rlcl9lbnRyeShTQ1NJX0RJU1BBVENIX0NNRCwgZiwgYnVmLCBjb3VudCwgb2ZmKTsKK30KKworc3RhdGljIHNzaXplX3QgaWRlX2NvcmVfY3BfZW50cnkoc3RydWN0IGZpbGUgKmYsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCXNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpCit7CisJcmV0dXJuIGRvX3JlZ2lzdGVyX2VudHJ5KElERV9DT1JFX0NQLCBmLCBidWYsIGNvdW50LCBvZmYpOworfQorCisvKiBTcGVjaWFsIGVudHJ5IHRvIGp1c3QgY3Jhc2ggZGlyZWN0bHkuIEF2YWlsYWJsZSB3aXRob3V0IEtQUk9CRXMgKi8KK3N0YXRpYyBzc2l6ZV90IGRpcmVjdF9lbnRyeShzdHJ1Y3QgZmlsZSAqZiwgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQlzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmKQoreworCWVudW0gY3R5cGUgdHlwZTsKKwljaGFyICpidWY7CisKKwlpZiAoY291bnQgPj0gUEFHRV9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY291bnQgPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJ1ZiA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgY291bnQpKSB7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgYnVmKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCS8qIE5VTEwtdGVybWluYXRlIGFuZCByZW1vdmUgZW50ZXIgKi8KKwlidWZbY291bnRdID0gJ1wwJzsKKwlzdHJpbShidWYpOworCisJdHlwZSA9IHBhcnNlX2NwX3R5cGUoYnVmLCBjb3VudCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBidWYpOworCWlmICh0eXBlID09IE5PTkUpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJpbnRrKEtFUk5fSU5GTyAibGtkdG06IFBlcmZvcm1pbmcgZGlyZWN0IGVudHJ5ICVzXG4iLAorCQkJY3BfdHlwZV90b19zdHIodHlwZSkpOworCWxrZHRtX2RvX2FjdGlvbih0eXBlKTsKKwkqb2ZmICs9IGNvdW50OworCisJcmV0dXJuIGNvdW50OworfQorCitzdHJ1Y3QgY3Jhc2hfZW50cnkgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjcmFzaF9lbnRyeSBjcmFzaF9lbnRyaWVzW10gPSB7CisJeyJESVJFQ1QiLCB7LnJlYWQgPSBsa2R0bV9kZWJ1Z2ZzX3JlYWQsCisJCQkub3BlbiA9IGxrZHRtX2RlYnVnZnNfb3BlbiwKKwkJCS53cml0ZSA9IGRpcmVjdF9lbnRyeX0gfSwKKwl7IklOVF9IQVJEV0FSRV9FTlRSWSIsIHsucmVhZCA9IGxrZHRtX2RlYnVnZnNfcmVhZCwKKwkJCS5vcGVuID0gbGtkdG1fZGVidWdmc19vcGVuLAorCQkJLndyaXRlID0gaW50X2hhcmR3YXJlX2VudHJ5fSB9LAorCXsiSU5UX0hXX0lSUV9FTiIsIHsucmVhZCA9IGxrZHRtX2RlYnVnZnNfcmVhZCwKKwkJCS5vcGVuID0gbGtkdG1fZGVidWdmc19vcGVuLAorCQkJLndyaXRlID0gaW50X2h3X2lycV9lbn0gfSwKKwl7IklOVF9UQVNLTEVUX0VOVFJZIiwgey5yZWFkID0gbGtkdG1fZGVidWdmc19yZWFkLAorCQkJLm9wZW4gPSBsa2R0bV9kZWJ1Z2ZzX29wZW4sCisJCQkud3JpdGUgPSBpbnRfdGFza2xldF9lbnRyeX0gfSwKKwl7IkZTX0RFVlJXIiwgey5yZWFkID0gbGtkdG1fZGVidWdmc19yZWFkLAorCQkJLm9wZW4gPSBsa2R0bV9kZWJ1Z2ZzX29wZW4sCisJCQkud3JpdGUgPSBmc19kZXZyd19lbnRyeX0gfSwKKwl7Ik1FTV9TV0FQT1VUIiwgey5yZWFkID0gbGtkdG1fZGVidWdmc19yZWFkLAorCQkJLm9wZW4gPSBsa2R0bV9kZWJ1Z2ZzX29wZW4sCisJCQkud3JpdGUgPSBtZW1fc3dhcG91dF9lbnRyeX0gfSwKKwl7IlRJTUVSQUREIiwgey5yZWFkID0gbGtkdG1fZGVidWdmc19yZWFkLAorCQkJLm9wZW4gPSBsa2R0bV9kZWJ1Z2ZzX29wZW4sCisJCQkud3JpdGUgPSB0aW1lcmFkZF9lbnRyeX0gfSwKKwl7IlNDU0lfRElTUEFUQ0hfQ01EIiwgey5yZWFkID0gbGtkdG1fZGVidWdmc19yZWFkLAorCQkJLm9wZW4gPSBsa2R0bV9kZWJ1Z2ZzX29wZW4sCisJCQkud3JpdGUgPSBzY3NpX2Rpc3BhdGNoX2NtZF9lbnRyeX0gfSwKKwl7IklERV9DT1JFX0NQIiwJey5yZWFkID0gbGtkdG1fZGVidWdmc19yZWFkLAorCQkJLm9wZW4gPSBsa2R0bV9kZWJ1Z2ZzX29wZW4sCisJCQkud3JpdGUgPSBpZGVfY29yZV9jcF9lbnRyeX0gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsa2R0bV9kZWJ1Z2ZzX3Jvb3Q7CisKK3N0YXRpYyBpbnQgX19pbml0IGxrZHRtX21vZHVsZV9pbml0KHZvaWQpCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisJaW50IG5fZGVidWdmc19lbnRyaWVzID0gMTsgLyogQXNzdW1lIG9ubHkgdGhlIGRpcmVjdCBlbnRyeSAqLworCWludCBpOworCisJLyogUmVnaXN0ZXIgZGVidWdmcyBpbnRlcmZhY2UgKi8KKwlsa2R0bV9kZWJ1Z2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInByb3Zva2UtY3Jhc2giLCBOVUxMKTsKKwlpZiAoIWxrZHRtX2RlYnVnZnNfcm9vdCkgeworCQlwcmludGsoS0VSTl9FUlIgImxrZHRtOiBjcmVhdGluZyByb290IGRpciBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKyNpZmRlZiBDT05GSUdfS1BST0JFUworCW5fZGVidWdmc19lbnRyaWVzID0gQVJSQVlfU0laRShjcmFzaF9lbnRyaWVzKTsKKyNlbmRpZgorCisJZm9yIChpID0gMDsgaSA8IG5fZGVidWdmc19lbnRyaWVzOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGNyYXNoX2VudHJ5ICpjdXIgPSAmY3Jhc2hfZW50cmllc1tpXTsKKwkJc3RydWN0IGRlbnRyeSAqZGU7CisKKwkJZGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGN1ci0+bmFtZSwgMDY0NCwgbGtkdG1fZGVidWdmc19yb290LAorCQkJCU5VTEwsICZjdXItPmZvcHMpOworCQlpZiAoZGUgPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJsa2R0bTogY291bGQgbm90IGNyZWF0ZSAlc1xuIiwKKwkJCQkJY3VyLT5uYW1lKTsKKwkJCWdvdG8gb3V0X2VycjsKKwkJfQorCX0KKworCWlmIChsa2R0bV9wYXJzZV9jb21tYW5kbGluZSgpID09IC1FSU5WQUwpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibGtkdG06IEludmFsaWQgY29tbWFuZFxuIik7CisJCWdvdG8gb3V0X2VycjsKKwl9CisKKwlpZiAoY3BvaW50ICE9IElOVkFMSUQgJiYgY3B0eXBlICE9IE5PTkUpIHsKKwkJcmV0ID0gbGtkdG1fcmVnaXN0ZXJfY3BvaW50KGNwb2ludCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJsa2R0bTogSW52YWxpZCBjcmFzaCBwb2ludCAlZFxuIiwKKwkJCQkJY3BvaW50KTsKKwkJCWdvdG8gb3V0X2VycjsKKwkJfQorCQlwcmludGsoS0VSTl9JTkZPICJsa2R0bTogQ3Jhc2ggcG9pbnQgJXMgb2YgdHlwZSAlcyByZWdpc3RlcmVkXG4iLAorCQkJCWNwb2ludF9uYW1lLCBjcG9pbnRfdHlwZSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibGtkdG06IE5vIGNyYXNoIHBvaW50cyByZWdpc3RlcmVkLCBlbmFibGUgdGhyb3VnaCBkZWJ1Z2ZzXG4iKTsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X2VycjoKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUobGtkdG1fZGVidWdmc19yb290KTsKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgdm9pZCBfX2V4aXQgbGtkdG1fbW9kdWxlX2V4aXQodm9pZCkKIHsKLSAgICAgICAgdW5yZWdpc3Rlcl9qcHJvYmUoJmxrZHRtKTsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAibGtkdG0gOiBDcmFzaCBwb2ludCB1bnJlZ2lzdGVyZWRcbiIpOworCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShsa2R0bV9kZWJ1Z2ZzX3Jvb3QpOworCisJdW5yZWdpc3Rlcl9qcHJvYmUoJmxrZHRtKTsKKwlwcmludGsoS0VSTl9JTkZPICJsa2R0bTogQ3Jhc2ggcG9pbnQgdW5yZWdpc3RlcmVkXG4iKTsKIH0KIAogbW9kdWxlX2luaXQobGtkdG1fbW9kdWxlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS14cC94cG5ldC5jIGIvZHJpdmVycy9taXNjL3NnaS14cC94cG5ldC5jCmluZGV4IDE2ZjBhYmQuLjU3YjE1MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBuZXQuYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwbmV0LmMKQEAgLTQ3NSw3ICs0NzUsNyBAQAogCiAJaWYgKHNrYi0+ZGF0YVswXSA9PSAweGZmKSB7CiAJCS8qIHdlIGFyZSBiZWluZyBhc2tlZCB0byBicm9hZGNhc3QgdG8gYWxsIHBhcnRpdGlvbnMgKi8KLQkJZm9yX2VhY2hfYml0KGRlc3RfcGFydGlkLCB4cG5ldF9icm9hZGNhc3RfcGFydGl0aW9ucywKKwkJZm9yX2VhY2hfc2V0X2JpdChkZXN0X3BhcnRpZCwgeHBuZXRfYnJvYWRjYXN0X3BhcnRpdGlvbnMsCiAJCQkgICAgIHhwX21heF9ucGFydGl0aW9ucykgewogCiAJCQl4cG5ldF9zZW5kKHNrYiwgcXVldWVkX21zZywgc3RhcnRfYWRkciwgZW5kX2FkZHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2NvcmUuYyBiL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jCmluZGV4IDMwYWNkNTIuLmY0Yjk3ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jCkBAIC0xMTUxLDYgKzExNTEsOSBAQAogCWNhbmNlbF9kZWxheWVkX3dvcmsoJmhvc3QtPmRldGVjdCk7CiAJbW1jX2ZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKKwkvKiBjbGVhciBwbSBmbGFncyBub3cgYW5kIGxldCBjYXJkIGRyaXZlcnMgc2V0IHRoZW0gYXMgbmVlZGVkICovCisJaG9zdC0+cG1fZmxhZ3MgPSAwOworCiAJbW1jX2J1c19nZXQoaG9zdCk7CiAJaWYgKGhvc3QtPmJ1c19vcHMgJiYgIWhvc3QtPmJ1c19kZWFkKSB7CiAJCWlmIChob3N0LT5idXNfb3BzLT5yZW1vdmUpCkBAIC0xMjczLDEyICsxMjc2LDEzIEBACiAJCQltbWNfY2xhaW1faG9zdChob3N0KTsKIAkJCW1tY19kZXRhY2hfYnVzKGhvc3QpOwogCQkJbW1jX3JlbGVhc2VfaG9zdChob3N0KTsKKwkJCWhvc3QtPnBtX2ZsYWdzID0gMDsKIAkJCWVyciA9IDA7CiAJCX0KIAl9CiAJbW1jX2J1c19wdXQoaG9zdCk7CiAKLQlpZiAoIWVycikKKwlpZiAoIWVyciAmJiAhKGhvc3QtPnBtX2ZsYWdzICYgTU1DX1BNX0tFRVBfUE9XRVIpKQogCQltbWNfcG93ZXJfb2ZmKGhvc3QpOwogCiAJcmV0dXJuIGVycjsKQEAgLTEyOTYsOCArMTMwMCwxMCBAQAogCiAJbW1jX2J1c19nZXQoaG9zdCk7CiAJaWYgKGhvc3QtPmJ1c19vcHMgJiYgIWhvc3QtPmJ1c19kZWFkKSB7Ci0JCW1tY19wb3dlcl91cChob3N0KTsKLQkJbW1jX3NlbGVjdF92b2x0YWdlKGhvc3QsIGhvc3QtPm9jcik7CisJCWlmICghKGhvc3QtPnBtX2ZsYWdzICYgTU1DX1BNX0tFRVBfUE9XRVIpKSB7CisJCQltbWNfcG93ZXJfdXAoaG9zdCk7CisJCQltbWNfc2VsZWN0X3ZvbHRhZ2UoaG9zdCwgaG9zdC0+b2NyKTsKKwkJfQogCQlCVUdfT04oIWhvc3QtPmJ1c19vcHMtPnJlc3VtZSk7CiAJCWVyciA9IGhvc3QtPmJ1c19vcHMtPnJlc3VtZShob3N0KTsKIAkJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYwppbmRleCAwNmI2NDA4Li4yZGQ0Y2ZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYworKysgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYwpAQCAtMTg4LDYgKzE4OCw0MCBAQAogfQogCiAvKgorICogRGV2aWNlcyB0aGF0IHJlbWFpbiBhY3RpdmUgZHVyaW5nIGEgc3lzdGVtIHN1c3BlbmQgYXJlCisgKiBwdXQgYmFjayBpbnRvIDEtYml0IG1vZGUuCisgKi8KK3N0YXRpYyBpbnQgc2Rpb19kaXNhYmxlX3dpZGUoc3RydWN0IG1tY19jYXJkICpjYXJkKQoreworCWludCByZXQ7CisJdTggY3RybDsKKworCWlmICghKGNhcmQtPmhvc3QtPmNhcHMgJiBNTUNfQ0FQXzRfQklUX0RBVEEpKQorCQlyZXR1cm4gMDsKKworCWlmIChjYXJkLT5jY2NyLmxvd19zcGVlZCAmJiAhY2FyZC0+Y2Njci53aWRlX2J1cykKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBtbWNfaW9fcndfZGlyZWN0KGNhcmQsIDAsIDAsIFNESU9fQ0NDUl9JRiwgMCwgJmN0cmwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoIShjdHJsICYgU0RJT19CVVNfV0lEVEhfNEJJVCkpCisJCXJldHVybiAwOworCisJY3RybCAmPSB+U0RJT19CVVNfV0lEVEhfNEJJVDsKKwljdHJsIHw9IFNESU9fQlVTX0FTWU5DX0lOVDsKKworCXJldCA9IG1tY19pb19yd19kaXJlY3QoY2FyZCwgMSwgMCwgU0RJT19DQ0NSX0lGLCBjdHJsLCBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbW1jX3NldF9idXNfd2lkdGgoY2FyZC0+aG9zdCwgTU1DX0JVU19XSURUSF8xKTsKKworCXJldHVybiAwOworfQorCisvKgogICogVGVzdCBpZiB0aGUgY2FyZCBzdXBwb3J0cyBoaWdoLXNwZWVkIG1vZGUgYW5kLCBpZiBzbywgc3dpdGNoIHRvIGl0LgogICovCiBzdGF0aWMgaW50IHNkaW9fZW5hYmxlX2hzKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKQEAgLTIyNCw3ICsyNTgsNyBAQAogICogd2UncmUgdHJ5aW5nIHRvIHJlaW5pdGlhbGlzZS4KICAqLwogc3RhdGljIGludCBtbWNfc2Rpb19pbml0X2NhcmQoc3RydWN0IG1tY19ob3N0ICpob3N0LCB1MzIgb2NyLAotCQkJICAgICAgc3RydWN0IG1tY19jYXJkICpvbGRjYXJkKQorCQkJICAgICAgc3RydWN0IG1tY19jYXJkICpvbGRjYXJkLCBpbnQgcG93ZXJlZF9yZXN1bWUpCiB7CiAJc3RydWN0IG1tY19jYXJkICpjYXJkOwogCWludCBlcnI7CkBAIC0yMzUsOSArMjY5LDExIEBACiAJLyoKIAkgKiBJbmZvcm0gdGhlIGNhcmQgb2YgdGhlIHZvbHRhZ2UKIAkgKi8KLQllcnIgPSBtbWNfc2VuZF9pb19vcF9jb25kKGhvc3QsIGhvc3QtPm9jciwgJm9jcik7Ci0JaWYgKGVycikKLQkJZ290byBlcnI7CisJaWYgKCFwb3dlcmVkX3Jlc3VtZSkgeworCQllcnIgPSBtbWNfc2VuZF9pb19vcF9jb25kKGhvc3QsIGhvc3QtPm9jciwgJm9jcik7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycjsKKwl9CiAKIAkvKgogCSAqIEZvciBTUEksIGVuYWJsZSBDUkMgYXMgYXBwcm9wcmlhdGUuCkBAIC0yNjIsNyArMjk4LDcgQEAKIAkvKgogCSAqIEZvciBuYXRpdmUgYnVzc2VzOiAgc2V0IGNhcmQgUkNBIGFuZCBxdWl0IG9wZW4gZHJhaW4gbW9kZS4KIAkgKi8KLQlpZiAoIW1tY19ob3N0X2lzX3NwaShob3N0KSkgeworCWlmICghcG93ZXJlZF9yZXN1bWUgJiYgIW1tY19ob3N0X2lzX3NwaShob3N0KSkgewogCQllcnIgPSBtbWNfc2VuZF9yZWxhdGl2ZV9hZGRyKGhvc3QsICZjYXJkLT5yY2EpOwogCQlpZiAoZXJyKQogCQkJZ290byByZW1vdmU7CkBAIC0yNzMsNyArMzA5LDcgQEAKIAkvKgogCSAqIFNlbGVjdCBjYXJkLCBhcyBhbGwgZm9sbG93aW5nIGNvbW1hbmRzIHJlbHkgb24gdGhhdC4KIAkgKi8KLQlpZiAoIW1tY19ob3N0X2lzX3NwaShob3N0KSkgeworCWlmICghcG93ZXJlZF9yZXN1bWUgJiYgIW1tY19ob3N0X2lzX3NwaShob3N0KSkgewogCQllcnIgPSBtbWNfc2VsZWN0X2NhcmQoY2FyZCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIHJlbW92ZTsKQEAgLTQyNSw2ICs0NjEsMTIgQEAKIAkJfQogCX0KIAorCWlmICghZXJyICYmIGhvc3QtPnBtX2ZsYWdzICYgTU1DX1BNX0tFRVBfUE9XRVIpIHsKKwkJbW1jX2NsYWltX2hvc3QoaG9zdCk7CisJCXNkaW9fZGlzYWJsZV93aWRlKGhvc3QtPmNhcmQpOworCQltbWNfcmVsZWFzZV9ob3N0KGhvc3QpOworCX0KKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTQzNyw3ICs0NzksMTMgQEAKIAogCS8qIEJhc2ljIGNhcmQgcmVpbml0aWFsaXphdGlvbi4gKi8KIAltbWNfY2xhaW1faG9zdChob3N0KTsKLQllcnIgPSBtbWNfc2Rpb19pbml0X2NhcmQoaG9zdCwgaG9zdC0+b2NyLCBob3N0LT5jYXJkKTsKKwllcnIgPSBtbWNfc2Rpb19pbml0X2NhcmQoaG9zdCwgaG9zdC0+b2NyLCBob3N0LT5jYXJkLAorCQkJCSAoaG9zdC0+cG1fZmxhZ3MgJiBNTUNfUE1fS0VFUF9QT1dFUikpOworCWlmICghZXJyKQorCQkvKiBXZSBtYXkgaGF2ZSBzd2l0Y2hlZCB0byAxLWJpdCBtb2RlIGR1cmluZyBzdXNwZW5kLiAqLworCQllcnIgPSBzZGlvX2VuYWJsZV93aWRlKGhvc3QtPmNhcmQpOworCWlmICghZXJyICYmIGhvc3QtPnNkaW9faXJxcykKKwkJbW1jX3NpZ25hbF9zZGlvX2lycShob3N0KTsKIAltbWNfcmVsZWFzZV9ob3N0KGhvc3QpOwogCiAJLyoKQEAgLTUwNyw3ICs1NTUsNyBAQAogCS8qCiAJICogRGV0ZWN0IGFuZCBpbml0IHRoZSBjYXJkLgogCSAqLwotCWVyciA9IG1tY19zZGlvX2luaXRfY2FyZChob3N0LCBob3N0LT5vY3IsIE5VTEwpOworCWVyciA9IG1tY19zZGlvX2luaXRfY2FyZChob3N0LCBob3N0LT5vY3IsIE5VTEwsIDApOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyOwogCWNhcmQgPSBob3N0LT5jYXJkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9zZGlvX2lvLmMgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW9faW8uYwppbmRleCBmOWFhOGE3Li5mZjI3YzhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9faW8uYworKysgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW9faW8uYwpAQCAtMTg5LDcgKzE4OSwxMiBAQAogewogCXVuc2lnbmVkIG12YWwgPQltaW4oZnVuYy0+Y2FyZC0+aG9zdC0+bWF4X3NlZ19zaXplLAogCQkJICAgIGZ1bmMtPmNhcmQtPmhvc3QtPm1heF9ibGtfc2l6ZSk7Ci0JbXZhbCA9IG1pbihtdmFsLCBmdW5jLT5tYXhfYmxrc2l6ZSk7CisKKwlpZiAobW1jX2Jsa3N6X2Zvcl9ieXRlX21vZGUoZnVuYy0+Y2FyZCkpCisJCW12YWwgPSBtaW4obXZhbCwgZnVuYy0+Y3VyX2Jsa3NpemUpOworCWVsc2UKKwkJbXZhbCA9IG1pbihtdmFsLCBmdW5jLT5tYXhfYmxrc2l6ZSk7CisKIAlyZXR1cm4gbWluKG12YWwsIDUxMnUpOyAvKiBtYXhpbXVtIHNpemUgZm9yIGJ5dGUgbW9kZSAqLwogfQogCkBAIC02MzUsMyArNjQwLDUyIEBACiAJCSplcnJfcmV0ID0gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc2Rpb19mMF93cml0ZWIpOworCisvKioKKyAqCXNkaW9fZ2V0X2hvc3RfcG1fY2FwcyAtIGdldCBob3N0IHBvd2VyIG1hbmFnZW1lbnQgY2FwYWJpbGl0aWVzCisgKglAZnVuYzogU0RJTyBmdW5jdGlvbiBhdHRhY2hlZCB0byBob3N0CisgKgorICoJUmV0dXJucyBhIGNhcGFiaWxpdHkgYml0bWFzayBjb3JyZXNwb25kaW5nIHRvIHBvd2VyIG1hbmFnZW1lbnQKKyAqCWZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCBjb250cm9sbGVyIHRoYXQgdGhlIGNhcmQgZnVuY3Rpb24KKyAqCW1pZ2h0IHJlbHkgdXBvbiBkdXJpbmcgYSBzeXN0ZW0gc3VzcGVuZC4gIFRoZSBob3N0IGRvZXNuJ3QgbmVlZAorICoJdG8gYmUgY2xhaW1lZCwgbm9yIHRoZSBmdW5jdGlvbiBhY3RpdmUsIGZvciB0aGlzIGluZm9ybWF0aW9uIHRvIGJlCisgKglvYnRhaW5lZC4KKyAqLworbW1jX3BtX2ZsYWdfdCBzZGlvX2dldF9ob3N0X3BtX2NhcHMoc3RydWN0IHNkaW9fZnVuYyAqZnVuYykKK3sKKwlCVUdfT04oIWZ1bmMpOworCUJVR19PTighZnVuYy0+Y2FyZCk7CisKKwlyZXR1cm4gZnVuYy0+Y2FyZC0+aG9zdC0+cG1fY2FwczsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNkaW9fZ2V0X2hvc3RfcG1fY2Fwcyk7CisKKy8qKgorICoJc2Rpb19zZXRfaG9zdF9wbV9mbGFncyAtIHNldCB3YW50ZWQgaG9zdCBwb3dlciBtYW5hZ2VtZW50IGNhcGFiaWxpdGllcworICoJQGZ1bmM6IFNESU8gZnVuY3Rpb24gYXR0YWNoZWQgdG8gaG9zdAorICoKKyAqCVNldCBhIGNhcGFiaWxpdHkgYml0bWFzayBjb3JyZXNwb25kaW5nIHRvIHdhbnRlZCBob3N0IGNvbnRyb2xsZXIKKyAqCXBvd2VyIG1hbmFnZW1lbnQgZmVhdHVyZXMgZm9yIHRoZSB1cGNvbWluZyBzdXNwZW5kIHN0YXRlLgorICoJVGhpcyBtdXN0IGJlIGNhbGxlZCwgaWYgbmVlZGVkLCBlYWNoIHRpbWUgdGhlIHN1c3BlbmQgbWV0aG9kIG9mCisgKgl0aGUgZnVuY3Rpb24gZHJpdmVyIGlzIGNhbGxlZCwgYW5kIG11c3QgY29udGFpbiBvbmx5IGJpdHMgdGhhdAorICoJd2VyZSByZXR1cm5lZCBieSBzZGlvX2dldF9ob3N0X3BtX2NhcHMoKS4KKyAqCVRoZSBob3N0IGRvZXNuJ3QgbmVlZCB0byBiZSBjbGFpbWVkLCBub3IgdGhlIGZ1bmN0aW9uIGFjdGl2ZSwKKyAqCWZvciB0aGlzIGluZm9ybWF0aW9uIHRvIGJlIHNldC4KKyAqLworaW50IHNkaW9fc2V0X2hvc3RfcG1fZmxhZ3Moc3RydWN0IHNkaW9fZnVuYyAqZnVuYywgbW1jX3BtX2ZsYWdfdCBmbGFncykKK3sKKwlzdHJ1Y3QgbW1jX2hvc3QgKmhvc3Q7CisKKwlCVUdfT04oIWZ1bmMpOworCUJVR19PTighZnVuYy0+Y2FyZCk7CisKKwlob3N0ID0gZnVuYy0+Y2FyZC0+aG9zdDsKKworCWlmIChmbGFncyAmIH5ob3N0LT5wbV9jYXBzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGZ1bmN0aW9uIHN1c3BlbmQgbWV0aG9kcyBhcmUgc2VyaWFsaXplZCwgaGVuY2Ugbm8gbG9jayBuZWVkZWQgKi8KKwlob3N0LT5wbV9mbGFncyB8PSBmbGFnczsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNkaW9fc2V0X2hvc3RfcG1fZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnIGIvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCmluZGV4IGNlMWQyODguLjJlMTNiOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZworKysgYi9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKQEAgLTY5LDIwICs2OSwxNiBAQAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIE1NQ19SSUNPSF9NTUMKLQl0cmlzdGF0ZSAiUmljb2ggTU1DIENvbnRyb2xsZXIgRGlzYWJsZXIgIChFWFBFUklNRU5UQUwpIgorCWJvb2wgIlJpY29oIE1NQyBDb250cm9sbGVyIERpc2FibGVyICAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIE1NQ19TREhDSV9QQ0kKIAloZWxwCi0JICBUaGlzIHNlbGVjdHMgdGhlIGRpc2FibGVyIGZvciB0aGUgUmljb2ggTU1DIENvbnRyb2xsZXIuIFRoaXMKKwkgIFRoaXMgYWRkcyBhIHBjaSBxdWlyayB0byBkaXNhYmxlIFJpY29oIE1NQyBDb250cm9sbGVyLiBUaGlzCiAJICBwcm9wcmlldGFyeSBjb250cm9sbGVyIGlzIHVubmVjZXNzYXJ5IGJlY2F1c2UgdGhlIFNESENJIGRyaXZlcgogCSAgc3VwcG9ydHMgTU1DIGNhcmRzIG9uIHRoZSBTRCBjb250cm9sbGVyLCBidXQgaWYgaXQgaXMgbm90CiAJICBkaXNhYmxlZCwgaXQgd2lsbCBzdGVhbCB0aGUgTU1DIGNhcmRzIGF3YXkgLSByZW5kZXJpbmcgdGhlbQotCSAgdXNlbGVzcy4gSXQgaXMgc2FmZSB0byBzZWxlY3QgdGhpcyBkcml2ZXIgZXZlbiBpZiB5b3UgZG9uJ3QKKwkgIHVzZWxlc3MuIEl0IGlzIHNhZmUgdG8gc2VsZWN0IHRoaXMgZXZlbiBpZiB5b3UgZG9uJ3QKIAkgIGhhdmUgYSBSaWNvaCBiYXNlZCBjYXJkIHJlYWRlci4KIAotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOgotCSAgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByaWNvaF9tbWMuCi0KIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKIGNvbmZpZyBNTUNfU0RIQ0lfT0YKQEAgLTE5Myw2ICsxODksNyBAQAogCiBjaG9pY2UKIAlwcm9tcHQgIkF0bWVsIFNEL01NQyBEcml2ZXIiCisJZGVwZW5kcyBvbiBBVlIzMiB8fCBBUkNIX0FUOTEKIAlkZWZhdWx0IE1NQ19BVE1FTE1DSSBpZiBBVlIzMgogCWhlbHAKIAkgIENob29zZSB3aGljaCBkcml2ZXIgdG8gdXNlIGZvciB0aGUgQXRtZWwgTUNJIFNpbGljb24KQEAgLTM2OCw3ICszNjUsNyBAQAogCiBjb25maWcgTU1DX1RNSU8KIAl0cmlzdGF0ZSAiVG9zaGliYSBNb2JpbGUgSU8gQ29udHJvbGxlciAoVE1JTykgTU1DL1NEIGZ1bmN0aW9uIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBNRkRfVE1JTyB8fCBNRkRfQVNJQzMgfHwgU1VQRVJICisJZGVwZW5kcyBvbiBNRkRfVE1JTyB8fCBNRkRfQVNJQzMgfHwgTUZEX1NIX01PQklMRV9TREhJCiAJaGVscAogCSAgVGhpcyBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgU0QvTU1DIGNlbGwgZm91bmQgaW4gVEM2MzkzWEIsCiAJICBUN0w2NlhCIGFuZCBhbHNvIEhUQyBBU0lDMwpAQCAtMzk5LDcgKzM5Niw3IEBACiAKIGNvbmZpZyBTREhfQkZJTgogCXRyaXN0YXRlICJCbGFja2ZpbiBTZWN1cmUgRGlnaXRhbCBIb3N0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBNTUMgJiYgKChCRjU0eCAmJiAhQkY1NDQpIHx8IChCRjUxeCAmJiAhQkY1MTIpKQorCWRlcGVuZHMgb24gKEJGNTR4ICYmICFCRjU0NCkgfHwgKEJGNTF4ICYmICFCRjUxMikKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSB3aWxsIGdldCBzdXBwb3J0IGZvciB0aGUgQmxhY2tmaW4gb24tY2hpcAogCSAgU2VjdXJlIERpZ2l0YWwgSG9zdCBpbnRlcmZhY2UuICBUaGlzIGluY2x1ZGVzIHN1cHBvcnQgZm9yIE1NQyBhbmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUgYi9kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlCmluZGV4IDNkMjUzZGQuLmY0ODAzOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZQpAQCAtMTIsNyArMTIsNiBAQAogb2JqLSQoQ09ORklHX01NQ19NWEMpCQkrPSBteGNtbWMubwogb2JqLSQoQ09ORklHX01NQ19TREhDSSkJCSs9IHNkaGNpLm8KIG9iai0kKENPTkZJR19NTUNfU0RIQ0lfUENJKQkrPSBzZGhjaS1wY2kubwotb2JqLSQoQ09ORklHX01NQ19SSUNPSF9NTUMpCSs9IHJpY29oX21tYy5vCiBvYmotJChDT05GSUdfTU1DX1NESENJX1BMVEZNKQkrPSBzZGhjaS1wbHRmbS5vCiBvYmotJChDT05GSUdfTU1DX1NESENJX1MzQykJKz0gc2RoY2ktczNjLm8KIG9iai0kKENPTkZJR19NTUNfV0JTRCkJCSs9IHdic2QubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9hdDkxX21jaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9hdDkxX21jaS5jCmluZGV4IDYzOTI0ZTAuLjkxZGM2MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvYXQ5MV9tY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2F0OTFfbWNpLmMKQEAgLTc4LDYgKzc4LDE3IEBACiAKICNkZWZpbmUgRFJJVkVSX05BTUUgImF0OTFfbWNpIgogCitzdGF0aWMgaW5saW5lIGludCBhdDkxbWNpX2lzX21jaTFyZXYyeHgodm9pZCkKK3sKKwlyZXR1cm4gKCAgIGNwdV9pc19hdDkxc2FtOTI2MCgpCisJCXx8IGNwdV9pc19hdDkxc2FtOTI2MygpCisJCXx8IGNwdV9pc19hdDkxY2FwOSgpCisJCXx8IGNwdV9pc19hdDkxc2FtOXJsKCkKKwkJfHwgY3B1X2lzX2F0OTFzYW05ZzEwKCkKKwkJfHwgY3B1X2lzX2F0OTFzYW05ZzIwKCkKKwkJKTsKK30KKwogI2RlZmluZSBGTF9TRU5UX0NPTU1BTkQJKDEgPDwgMCkKICNkZWZpbmUgRkxfU0VOVF9TVE9QCSgxIDw8IDEpCiAKQEAgLTg4LDYgKzk5LDEwIEBACiAjZGVmaW5lIGF0OTFfbWNpX3JlYWQoaG9zdCwgcmVnKQlfX3Jhd19yZWFkbCgoaG9zdCktPmJhc2VhZGRyICsgKHJlZykpCiAjZGVmaW5lIGF0OTFfbWNpX3dyaXRlKGhvc3QsIHJlZywgdmFsKQlfX3Jhd193cml0ZWwoKHZhbCksIChob3N0KS0+YmFzZWFkZHIgKyAocmVnKSkKIAorI2RlZmluZSBNQ0lfQkxLU0laRSAJCTUxMgorI2RlZmluZSBNQ0lfTUFYQkxLU0laRSAJCTQwOTUKKyNkZWZpbmUgTUNJX0JMS0FUT05DRSAJCTI1NgorI2RlZmluZSBNQ0lfQlVGU0laRSAJCShNQ0lfQkxLU0laRSAqIE1DSV9CTEtBVE9OQ0UpCiAKIC8qCiAgKiBMb3cgbGV2ZWwgdHlwZSBmb3IgdGhpcyBkcml2ZXIKQEAgLTIwMCw4ICsyMTUsOCBAQAogCXNpemUgPSBkYXRhLT5ibGtzeiAqIGRhdGEtPmJsb2NrczsKIAlsZW4gPSBkYXRhLT5zZ19sZW47CiAKLQkvKiBBVDkxU0FNOTI2WzAvM10gRGF0YSBXcml0ZSBPcGVyYXRpb24gYW5kIG51bWJlciBvZiBieXRlcyBlcnJhdHVtICovCi0JaWYgKGNwdV9pc19hdDkxc2FtOTI2MCgpIHx8IGNwdV9pc19hdDkxc2FtOTI2MygpKQorCS8qIE1DSTEgcmV2Mnh4IERhdGEgV3JpdGUgT3BlcmF0aW9uIGFuZCBudW1iZXIgb2YgYnl0ZXMgZXJyYXR1bSAqLworCWlmIChhdDkxbWNpX2lzX21jaTFyZXYyeHgoKSkKIAkJaWYgKGhvc3QtPnRvdGFsX2xlbmd0aCA9PSAxMikKIAkJCW1lbXNldChkbWFidWYsIDAsIDEyKTsKIApAQCAtMjI3LDggKzI0MiwxMCBAQAogCQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgKGFtb3VudCAvIDQpOyBpbmRleCsrKQogCQkJCSpkbWFidWYrKyA9IHN3YWIzMihzZ2J1ZmZlcltpbmRleF0pOwogCQl9IGVsc2UgewotCQkJbWVtY3B5KGRtYWJ1Ziwgc2didWZmZXIsIGFtb3VudCk7Ci0JCQlkbWFidWYgKz0gYW1vdW50OworCQkJY2hhciAqdG1wdiA9IChjaGFyICopZG1hYnVmOworCQkJbWVtY3B5KHRtcHYsIHNnYnVmZmVyLCBhbW91bnQpOworCQkJdG1wdiArPSBhbW91bnQ7CisJCQlkbWFidWYgPSAodW5zaWduZWQgKil0bXB2OwogCQl9CiAKIAkJa3VubWFwX2F0b21pYyhzZ2J1ZmZlciwgS01fQklPX1NSQ19JUlEpOwpAQCAtMjQ1LDgwICsyNjIsMTQgQEAKIH0KIAogLyoKLSAqIFByZXBhcmUgYSBkbWEgcmVhZAotICovCi1zdGF0aWMgdm9pZCBhdDkxX21jaV9wcmVfZG1hX3JlYWQoc3RydWN0IGF0OTFtY2lfaG9zdCAqaG9zdCkKLXsKLQlpbnQgaTsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCXN0cnVjdCBtbWNfY29tbWFuZCAqY21kOwotCXN0cnVjdCBtbWNfZGF0YSAqZGF0YTsKLQotCXByX2RlYnVnKCJwcmUgZG1hIHJlYWRcbiIpOwotCi0JY21kID0gaG9zdC0+Y21kOwotCWlmICghY21kKSB7Ci0JCXByX2RlYnVnKCJubyBjb21tYW5kXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWRhdGEgPSBjbWQtPmRhdGE7Ci0JaWYgKCFkYXRhKSB7Ci0JCXByX2RlYnVnKCJubyBkYXRhXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKLQkJLyogbm90aGluZyBsZWZ0IHRvIHRyYW5zZmVyICovCi0JCWlmIChob3N0LT50cmFuc2Zlcl9pbmRleCA+PSBkYXRhLT5zZ19sZW4pIHsKLQkJCXByX2RlYnVnKCJOb3RoaW5nIGxlZnQgdG8gdHJhbnNmZXIgKGluZGV4ID0gJWQpXG4iLCBob3N0LT50cmFuc2Zlcl9pbmRleCk7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIENoZWNrIHRvIHNlZSBpZiB0aGlzIG5lZWRzIGZpbGxpbmcgKi8KLQkJaWYgKGkgPT0gMCkgewotCQkJaWYgKGF0OTFfbWNpX3JlYWQoaG9zdCwgQVRNRUxfUERDX1JDUikgIT0gMCkgewotCQkJCXByX2RlYnVnKCJUcmFuc2ZlciBhY3RpdmUgaW4gY3VycmVudFxuIik7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQlpZiAoYXQ5MV9tY2lfcmVhZChob3N0LCBBVE1FTF9QRENfUk5DUikgIT0gMCkgewotCQkJCXByX2RlYnVnKCJUcmFuc2ZlciBhY3RpdmUgaW4gbmV4dFxuIik7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCX0KLQotCQkvKiBTZXR1cCB0aGUgbmV4dCB0cmFuc2ZlciAqLwotCQlwcl9kZWJ1ZygiVXNpbmcgdHJhbnNmZXIgaW5kZXggJWRcbiIsIGhvc3QtPnRyYW5zZmVyX2luZGV4KTsKLQotCQlzZyA9ICZkYXRhLT5zZ1tob3N0LT50cmFuc2Zlcl9pbmRleCsrXTsKLQkJcHJfZGVidWcoInNnID0gJXBcbiIsIHNnKTsKLQotCQlzZy0+ZG1hX2FkZHJlc3MgPSBkbWFfbWFwX3BhZ2UoTlVMTCwgc2dfcGFnZShzZyksIHNnLT5vZmZzZXQsIHNnLT5sZW5ndGgsIERNQV9GUk9NX0RFVklDRSk7Ci0KLQkJcHJfZGVidWcoImRtYSBhZGRyZXNzID0gJTA4WCwgbGVuZ3RoID0gJWRcbiIsIHNnLT5kbWFfYWRkcmVzcywgc2ctPmxlbmd0aCk7Ci0KLQkJaWYgKGkgPT0gMCkgewotCQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVRNRUxfUERDX1JQUiwgc2ctPmRtYV9hZGRyZXNzKTsKLQkJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUTUVMX1BEQ19SQ1IsIChkYXRhLT5ibGtzeiAmIDB4MykgPyBzZy0+bGVuZ3RoIDogc2ctPmxlbmd0aCAvIDQpOwotCQl9Ci0JCWVsc2UgewotCQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVRNRUxfUERDX1JOUFIsIHNnLT5kbWFfYWRkcmVzcyk7Ci0JCQlhdDkxX21jaV93cml0ZShob3N0LCBBVE1FTF9QRENfUk5DUiwgKGRhdGEtPmJsa3N6ICYgMHgzKSA/IHNnLT5sZW5ndGggOiBzZy0+bGVuZ3RoIC8gNCk7Ci0JCX0KLQl9Ci0KLQlwcl9kZWJ1ZygicHJlIGRtYSByZWFkIGRvbmVcbiIpOwotfQotCi0vKgogICogSGFuZGxlIGFmdGVyIGEgZG1hIHJlYWQKICAqLwogc3RhdGljIHZvaWQgYXQ5MV9tY2lfcG9zdF9kbWFfcmVhZChzdHJ1Y3QgYXQ5MW1jaV9ob3N0ICpob3N0KQogewogCXN0cnVjdCBtbWNfY29tbWFuZCAqY21kOwogCXN0cnVjdCBtbWNfZGF0YSAqZGF0YTsKKwl1bnNpZ25lZCBpbnQgbGVuLCBpLCBzaXplOworCXVuc2lnbmVkICpkbWFidWYgPSBob3N0LT5idWZmZXI7CiAKIAlwcl9kZWJ1ZygicG9zdCBkbWEgcmVhZFxuIik7CiAKQEAgLTMzNCw0MiArMjg1LDM5IEBACiAJCXJldHVybjsKIAl9CiAKLQl3aGlsZSAoaG9zdC0+aW5fdXNlX2luZGV4IDwgaG9zdC0+dHJhbnNmZXJfaW5kZXgpIHsKKwlzaXplID0gZGF0YS0+Ymxrc3ogKiBkYXRhLT5ibG9ja3M7CisJbGVuID0gZGF0YS0+c2dfbGVuOworCisJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9NQ0lfSURSLCBBVDkxX01DSV9FTkRSWCk7CisJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9NQ0lfSUVSLCBBVDkxX01DSV9SWEJVRkYpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJCWludCBhbW91bnQ7CisJCXVuc2lnbmVkIGludCAqc2didWZmZXI7CiAKLQkJcHJfZGVidWcoImZpbmlzaGluZyBpbmRleCAlZFxuIiwgaG9zdC0+aW5fdXNlX2luZGV4KTsKKwkJc2cgPSAmZGF0YS0+c2dbaV07CiAKLQkJc2cgPSAmZGF0YS0+c2dbaG9zdC0+aW5fdXNlX2luZGV4KytdOwotCi0JCXByX2RlYnVnKCJVbm1hcHBpbmcgcGFnZSAlMDhYXG4iLCBzZy0+ZG1hX2FkZHJlc3MpOwotCi0JCWRtYV91bm1hcF9wYWdlKE5VTEwsIHNnLT5kbWFfYWRkcmVzcywgc2ctPmxlbmd0aCwgRE1BX0ZST01fREVWSUNFKTsKKwkJc2didWZmZXIgPSBrbWFwX2F0b21pYyhzZ19wYWdlKHNnKSwgS01fQklPX1NSQ19JUlEpICsgc2ctPm9mZnNldDsKKwkJYW1vdW50ID0gbWluKHNpemUsIHNnLT5sZW5ndGgpOworCQlzaXplIC09IGFtb3VudDsKIAogCQlpZiAoY3B1X2lzX2F0OTFybTkyMDAoKSkgewkvKiBBVDkxUk05MjAwIGVycmF0YSAqLwotCQkJdW5zaWduZWQgaW50ICpidWZmZXI7CiAJCQlpbnQgaW5kZXg7Ci0KLQkJCS8qIFN3YXAgdGhlIGNvbnRlbnRzIG9mIHRoZSBidWZmZXIgKi8KLQkJCWJ1ZmZlciA9IGttYXBfYXRvbWljKHNnX3BhZ2Uoc2cpLCBLTV9CSU9fU1JDX0lSUSkgKyBzZy0+b2Zmc2V0OwotCQkJcHJfZGVidWcoImJ1ZmZlciA9ICVwLCBsZW5ndGggPSAlZFxuIiwgYnVmZmVyLCBzZy0+bGVuZ3RoKTsKLQotCQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgKHNnLT5sZW5ndGggLyA0KTsgaW5kZXgrKykKLQkJCQlidWZmZXJbaW5kZXhdID0gc3dhYjMyKGJ1ZmZlcltpbmRleF0pOwotCi0JCQlrdW5tYXBfYXRvbWljKGJ1ZmZlciwgS01fQklPX1NSQ19JUlEpOworCQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgKGFtb3VudCAvIDQpOyBpbmRleCsrKQorCQkJCXNnYnVmZmVyW2luZGV4XSA9IHN3YWIzMigqZG1hYnVmKyspOworCQl9IGVsc2UgeworCQkJY2hhciAqdG1wdiA9IChjaGFyICopZG1hYnVmOworCQkJbWVtY3B5KHNnYnVmZmVyLCB0bXB2LCBhbW91bnQpOworCQkJdG1wdiArPSBhbW91bnQ7CisJCQlkbWFidWYgPSAodW5zaWduZWQgKil0bXB2OwogCQl9CiAKLQkJZmx1c2hfZGNhY2hlX3BhZ2Uoc2dfcGFnZShzZykpOwotCi0JCWRhdGEtPmJ5dGVzX3hmZXJlZCArPSBzZy0+bGVuZ3RoOwotCX0KLQotCS8qIElzIHRoZXJlIGFub3RoZXIgdHJhbnNmZXIgdG8gdHJpZ2dlcj8gKi8KLQlpZiAoaG9zdC0+dHJhbnNmZXJfaW5kZXggPCBkYXRhLT5zZ19sZW4pCi0JCWF0OTFfbWNpX3ByZV9kbWFfcmVhZChob3N0KTsKLQllbHNlIHsKLQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9NQ0lfSURSLCBBVDkxX01DSV9FTkRSWCk7Ci0JCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfTUNJX0lFUiwgQVQ5MV9NQ0lfUlhCVUZGKTsKKwkJa3VubWFwX2F0b21pYyhzZ2J1ZmZlciwgS01fQklPX1NSQ19JUlEpOworCQlkbWFjX2ZsdXNoX3JhbmdlKCh2b2lkICopc2didWZmZXIsICgodm9pZCAqKXNnYnVmZmVyKSArIGFtb3VudCk7CisJCWRhdGEtPmJ5dGVzX3hmZXJlZCArPSBhbW91bnQ7CisJCWlmIChzaXplID09IDApCisJCQlicmVhazsKIAl9CiAKIAlwcl9kZWJ1ZygicG9zdCBkbWEgcmVhZCBkb25lXG4iKTsKQEAgLTQ2MSw3ICs0MDksNyBAQAogCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfTUNJX0RUT1IsIEFUOTFfTUNJX0RUT01VTF8xTSB8IEFUOTFfTUNJX0RUT0NZQyk7CiAJbXIgPSBBVDkxX01DSV9QRENNT0RFIHwgMHgzNGE7CiAKLQlpZiAoY3B1X2lzX2F0OTFzYW05MjYwKCkgfHwgY3B1X2lzX2F0OTFzYW05MjYzKCkpCisJaWYgKGF0OTFtY2lfaXNfbWNpMXJldjJ4eCgpKQogCQltciB8PSBBVDkxX01DSV9SRFBST09GIHwgQVQ5MV9NQ0lfV1JQUk9PRjsKIAogCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfTUNJX01SLCBtcik7CkBAIC02MDIsMTAgKzU1MCwxNCBAQAogCQkJCS8qCiAJCQkJICogSGFuZGxlIGEgcmVhZAogCQkJCSAqLwotCQkJCWhvc3QtPmJ1ZmZlciA9IE5VTEw7CiAJCQkJaG9zdC0+dG90YWxfbGVuZ3RoID0gMDsKIAotCQkJCWF0OTFfbWNpX3ByZV9kbWFfcmVhZChob3N0KTsKKwkJCQlhdDkxX21jaV93cml0ZShob3N0LCBBVE1FTF9QRENfUlBSLCBob3N0LT5waHlzaWNhbF9hZGRyZXNzKTsKKwkJCQlhdDkxX21jaV93cml0ZShob3N0LCBBVE1FTF9QRENfUkNSLCAoZGF0YS0+Ymxrc3ogJiAweDMpID8KKwkJCQkJKGJsb2NrcyAqIGJsb2NrX2xlbmd0aCkgOiAoYmxvY2tzICogYmxvY2tfbGVuZ3RoKSAvIDQpOworCQkJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUTUVMX1BEQ19STlBSLCAwKTsKKwkJCQlhdDkxX21jaV93cml0ZShob3N0LCBBVE1FTF9QRENfUk5DUiwgMCk7CisKIAkJCQlpZXIgPSBBVDkxX01DSV9FTkRSWCAvKiB8IEFUOTFfTUNJX1JYQlVGRiAqLzsKIAkJCX0KIAkJCWVsc2UgewpAQCAtNjE0LDI3ICs1NjYsMTUgQEAKIAkJCQkgKi8KIAkJCQlob3N0LT50b3RhbF9sZW5ndGggPSBibG9ja19sZW5ndGggKiBibG9ja3M7CiAJCQkJLyoKLQkJCQkgKiBBVDkxU0FNOTI2WzAvM10gRGF0YSBXcml0ZSBPcGVyYXRpb24gYW5kCisJCQkJICogTUNJMSByZXYyeHggRGF0YSBXcml0ZSBPcGVyYXRpb24gYW5kCiAJCQkJICogbnVtYmVyIG9mIGJ5dGVzIGVycmF0dW0KIAkJCQkgKi8KLQkJCQlpZiAoY3B1X2lzX2F0OTFzYW05MjYwICgpIHx8IGNwdV9pc19hdDkxc2FtOTI2MygpKQorCQkJCWlmIChhdDkxbWNpX2lzX21jaTFyZXYyeHgoKSkKIAkJCQkJaWYgKGhvc3QtPnRvdGFsX2xlbmd0aCA8IDEyKQogCQkJCQkJaG9zdC0+dG90YWxfbGVuZ3RoID0gMTI7CiAKLQkJCQlob3N0LT5idWZmZXIgPSBrbWFsbG9jKGhvc3QtPnRvdGFsX2xlbmd0aCwgR0ZQX0tFUk5FTCk7Ci0JCQkJaWYgKCFob3N0LT5idWZmZXIpIHsKLQkJCQkJcHJfZGVidWcoIkNhbid0IGFsbG9jIHR4IGJ1ZmZlclxuIik7Ci0JCQkJCWNtZC0+ZXJyb3IgPSAtRU5PTUVNOwotCQkJCQltbWNfcmVxdWVzdF9kb25lKGhvc3QtPm1tYywgaG9zdC0+cmVxdWVzdCk7Ci0JCQkJCXJldHVybjsKLQkJCQl9Ci0KIAkJCQlhdDkxX21jaV9zZ190b19kbWEoaG9zdCwgZGF0YSk7CiAKLQkJCQlob3N0LT5waHlzaWNhbF9hZGRyZXNzID0gZG1hX21hcF9zaW5nbGUoTlVMTCwKLQkJCQkJCWhvc3QtPmJ1ZmZlciwgaG9zdC0+dG90YWxfbGVuZ3RoLAotCQkJCQkJRE1BX1RPX0RFVklDRSk7Ci0KIAkJCQlwcl9kZWJ1ZygiVHJhbnNtaXR0aW5nICVkIGJ5dGVzXG4iLCBob3N0LT50b3RhbF9sZW5ndGgpOwogCiAJCQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVRNRUxfUERDX1RQUiwgaG9zdC0+cGh5c2ljYWxfYWRkcmVzcyk7CkBAIC03MDEsMTQgKzY0MSw2IEBACiAJY21kLT5yZXNwWzJdID0gYXQ5MV9tY2lfcmVhZChob3N0LCBBVDkxX01DSV9SU1BSKDIpKTsKIAljbWQtPnJlc3BbM10gPSBhdDkxX21jaV9yZWFkKGhvc3QsIEFUOTFfTUNJX1JTUFIoMykpOwogCi0JaWYgKGhvc3QtPmJ1ZmZlcikgewotCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsCi0JCQkJaG9zdC0+cGh5c2ljYWxfYWRkcmVzcywgaG9zdC0+dG90YWxfbGVuZ3RoLAotCQkJCURNQV9UT19ERVZJQ0UpOwotCQlrZnJlZShob3N0LT5idWZmZXIpOwotCQlob3N0LT5idWZmZXIgPSBOVUxMOwotCX0KLQogCXByX2RlYnVnKCJTdGF0dXMgPSAlMDhYLyUwOHggWyUwOFggJTA4WCAlMDhYICUwOFhdXG4iLAogCQkgc3RhdHVzLCBhdDkxX21jaV9yZWFkKGhvc3QsIEFUOTFfTUNJX1NSKSwKIAkJIGNtZC0+cmVzcFswXSwgY21kLT5yZXNwWzFdLCBjbWQtPnJlc3BbMl0sIGNtZC0+cmVzcFszXSk7CkBAIC03NTQsNyArNjg2LDggQEAKIAlob3N0LT5yZXF1ZXN0ID0gbXJxOwogCWhvc3QtPmZsYWdzID0gMDsKIAotCW1vZF90aW1lcigmaG9zdC0+dGltZXIsIGppZmZpZXMgKyAgSFopOworCS8qIG1vcmUgdGhhbiAxcyB0aW1lb3V0IG5lZWRlZCB3aXRoIHNsb3cgU0QgY2FyZHMgKi8KKwltb2RfdGltZXIoJmhvc3QtPnRpbWVyLCBqaWZmaWVzICsgIG1zZWNzX3RvX2ppZmZpZXMoMjAwMCkpOwogCiAJYXQ5MV9tY2lfcHJvY2Vzc19uZXh0KGhvc3QpOwogfQpAQCAtOTQyLDcgKzg3NSw4IEBACiAJCQlwcl9kZWJ1ZygiKioqKioqIFJlc2V0dGluZyBTRC1jYXJkIGJ1cyB3aWR0aCAqKioqKipcbiIpOwogCQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVQ5MV9NQ0lfU0RDUiwgYXQ5MV9tY2lfcmVhZChob3N0LCBBVDkxX01DSV9TRENSKSAmIH5BVDkxX01DSV9TRENCVVMpOwogCQl9Ci0JCW1tY19kZXRlY3RfY2hhbmdlKGhvc3QtPm1tYywgbXNlY3NfdG9famlmZmllcygxMDApKTsKKwkJLyogMC41cyBuZWVkZWQgYmVjYXVzZSBvZiBlYXJseSBjYXJkIGRldGVjdCBzd2l0Y2ggZmlyaW5nICovCisJCW1tY19kZXRlY3RfY2hhbmdlKGhvc3QtPm1tYywgbXNlY3NfdG9famlmZmllcyg1MDApKTsKIAl9CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMTAwNiwyNCArOTQwLDQyIEBACiAJbW1jLT5mX21pbiA9IDM3NTAwMDsKIAltbWMtPmZfbWF4ID0gMjUwMDAwMDA7CiAJbW1jLT5vY3JfYXZhaWwgPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNDsKLQltbWMtPmNhcHMgPSBNTUNfQ0FQX1NESU9fSVJROworCW1tYy0+Y2FwcyA9IDA7CiAKLQltbWMtPm1heF9ibGtfc2l6ZSA9IDQwOTU7Ci0JbW1jLT5tYXhfYmxrX2NvdW50ID0gbW1jLT5tYXhfcmVxX3NpemU7CisJbW1jLT5tYXhfYmxrX3NpemUgID0gTUNJX01BWEJMS1NJWkU7CisJbW1jLT5tYXhfYmxrX2NvdW50ID0gTUNJX0JMS0FUT05DRTsKKwltbWMtPm1heF9yZXFfc2l6ZSAgPSBNQ0lfQlVGU0laRTsKKwltbWMtPm1heF9waHlzX3NlZ3MgPSBNQ0lfQkxLQVRPTkNFOworCW1tYy0+bWF4X2h3X3NlZ3MgICA9IE1DSV9CTEtBVE9OQ0U7CisJbW1jLT5tYXhfc2VnX3NpemUgID0gTUNJX0JVRlNJWkU7CiAKIAlob3N0ID0gbW1jX3ByaXYobW1jKTsKIAlob3N0LT5tbWMgPSBtbWM7Ci0JaG9zdC0+YnVmZmVyID0gTlVMTDsKIAlob3N0LT5idXNfbW9kZSA9IDA7CiAJaG9zdC0+Ym9hcmQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpZiAoaG9zdC0+Ym9hcmQtPndpcmU0KSB7Ci0JCWlmIChjcHVfaXNfYXQ5MXNhbTkyNjAoKSB8fCBjcHVfaXNfYXQ5MXNhbTkyNjMoKSkKKwkJaWYgKGF0OTFtY2lfaXNfbWNpMXJldjJ4eCgpKQogCQkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfNF9CSVRfREFUQTsKIAkJZWxzZQogCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIjQgd2lyZSBidXMgbW9kZSBub3Qgc3VwcG9ydGVkIgogCQkJCSIgLSB1c2luZyAxIHdpcmVcbiIpOwogCX0KIAorCWhvc3QtPmJ1ZmZlciA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LCBNQ0lfQlVGU0laRSwKKwkJCQkJJmhvc3QtPnBoeXNpY2FsX2FkZHJlc3MsIEdGUF9LRVJORUwpOworCWlmICghaG9zdC0+YnVmZmVyKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbid0IGFsbG9jYXRlIHRyYW5zbWl0IGJ1ZmZlclxuIik7CisJCWdvdG8gZmFpbDU7CisJfQorCisJLyogQWRkIFNESU8gY2FwYWJpbGl0eSB3aGVuIGF2YWlsYWJsZSAqLworCWlmIChhdDkxbWNpX2lzX21jaTFyZXYyeHgoKSkgeworCQkvKiBhdDkxbWNpIE1DSTEgcmV2Mnh4IHNkaW8gaW50ZXJydXB0IGVycmF0dW0gKi8KKwkJaWYgKGhvc3QtPmJvYXJkLT53aXJlNCB8fCAhaG9zdC0+Ym9hcmQtPnNsb3RfYikKKwkJCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQX1NESU9fSVJROworCX0KKwogCS8qCiAJICogUmVzZXJ2ZSBHUElPcyAuLi4gYm9hcmQgaW5pdCBjb2RlIG1ha2VzIHN1cmUgdGhlc2UgcGlucyBhcmUgc2V0CiAJICogdXAgYXMgR1BJT3Mgd2l0aCB0aGUgcmlnaHQgZGlyZWN0aW9uIChpbnB1dCwgZXhjZXB0IGZvciB2Y2MpCkBAIC0xMDMyLDcgKzk4NCw3IEBACiAJCXJldCA9IGdwaW9fcmVxdWVzdChob3N0LT5ib2FyZC0+ZGV0X3BpbiwgIm1tY19kZXRlY3QiKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkbid0IGNsYWltIGNhcmQgZGV0ZWN0IHBpblxuIik7Ci0JCQlnb3RvIGZhaWw1OworCQkJZ290byBmYWlsNGI7CiAJCX0KIAl9CiAJaWYgKGhvc3QtPmJvYXJkLT53cF9waW4pIHsKQEAgLTExMzIsNiArMTA4NCwxMCBAQAogZmFpbDQ6CiAJaWYgKGhvc3QtPmJvYXJkLT5kZXRfcGluKQogCQlncGlvX2ZyZWUoaG9zdC0+Ym9hcmQtPmRldF9waW4pOworZmFpbDRiOgorCWlmIChob3N0LT5idWZmZXIpCisJCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIE1DSV9CVUZTSVpFLAorCQkJCWhvc3QtPmJ1ZmZlciwgaG9zdC0+cGh5c2ljYWxfYWRkcmVzcyk7CiBmYWlsNToKIAltbWNfZnJlZV9ob3N0KG1tYyk7CiBmYWlsNjoKQEAgLTExNTQsNiArMTExMCwxMCBAQAogCiAJaG9zdCA9IG1tY19wcml2KG1tYyk7CiAKKwlpZiAoaG9zdC0+YnVmZmVyKQorCQlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBNQ0lfQlVGU0laRSwKKwkJCQlob3N0LT5idWZmZXIsIGhvc3QtPnBoeXNpY2FsX2FkZHJlc3MpOworCiAJaWYgKGhvc3QtPmJvYXJkLT5kZXRfcGluKSB7CiAJCWlmIChkZXZpY2VfY2FuX3dha2V1cCgmcGRldi0+ZGV2KSkKIAkJCWZyZWVfaXJxKGdwaW9fdG9faXJxKGhvc3QtPmJvYXJkLT5kZXRfcGluKSwgaG9zdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2JmaW5fc2RoLmMgYi9kcml2ZXJzL21tYy9ob3N0L2JmaW5fc2RoLmMKaW5kZXggMzM0M2E1Ny4uNTZmN2I0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9iZmluX3NkaC5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvYmZpbl9zZGguYwpAQCAtMTE1LDcgKzExNSw3IEBACiAJdW5zaWduZWQgaW50IGxlbmd0aDsKIAl1bnNpZ25lZCBpbnQgZGF0YV9jdGw7CiAJdW5zaWduZWQgaW50IGRtYV9jZmc7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwl1bnNpZ25lZCBpbnQgY3ljbGVfbnMsIHRpbWVvdXQ7CiAKIAlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIiVzIGVudGVyIGZsYWdzOiAweCV4XG4iLCBfX2Z1bmNfXywgZGF0YS0+ZmxhZ3MpOwogCWhvc3QtPmRhdGEgPSBkYXRhOwpAQCAtMTM2LDggKzEzNiwxMSBAQAogCWRhdGFfY3RsIHw9ICgoZmZzKGRhdGEtPmJsa3N6KSAtIDEpIDw8IDQpOwogCiAJYmZpbl93cml0ZV9TREhfREFUQV9DVEwoZGF0YV9jdGwpOwotCi0JYmZpbl93cml0ZV9TREhfREFUQV9USU1FUigweEZGRkYpOworCS8qIHRoZSB0aW1lIG9mIGEgaG9zdCBjbG9jayBwZXJpb2QgaW4gbnMgKi8KKwljeWNsZV9ucyA9IDEwMDAwMDAwMDAgLyAoZ2V0X3NjbGsoKSAvICgyICogKGhvc3QtPmNsa19kaXYgKyAxKSkpOworCXRpbWVvdXQgPSBkYXRhLT50aW1lb3V0X25zIC8gY3ljbGVfbnM7CisJdGltZW91dCArPSBkYXRhLT50aW1lb3V0X2Nsa3M7CisJYmZpbl93cml0ZV9TREhfREFUQV9USU1FUih0aW1lb3V0KTsKIAlTU1lOQygpOwogCiAJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkgewpAQCAtMTUxLDYgKzE1NCw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfQkY1NHgpCiAJZG1hX2NmZyB8PSBETUFGTE9XX0FSUkFZIHwgTkRTSVpFXzUgfCBSRVNUQVJUIHwgV0RTSVpFXzMyIHwgRE1BRU47CiAJeworCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCQlpbnQgaTsKIAkJZm9yX2VhY2hfc2coZGF0YS0+c2csIHNnLCBob3N0LT5kbWFfbGVuLCBpKSB7CiAJCQlob3N0LT5zZ19jcHVbaV0uc3RhcnRfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYwppbmRleCBkZDQ1ZTdjMy4uM2JkMGJhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYwpAQCAtNzMsNiArNzMsNyBAQAogLyogREFWSU5DSV9NTUNDVEwgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgTU1DQ1RMX0RBVFJTVCAgICAgICAgICgxIDw8IDApCiAjZGVmaW5lIE1NQ0NUTF9DTURSU1QgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBNTUNDVExfV0lEVEhfOF9CSVQgICAgKDEgPDwgOCkKICNkZWZpbmUgTU1DQ1RMX1dJRFRIXzRfQklUICAgICgxIDw8IDIpCiAjZGVmaW5lIE1NQ0NUTF9EQVRFR19ESVNBQkxFRCAoMCA8PCA2KQogI2RlZmluZSBNTUNDVExfREFURUdfUklTSU5HICAgKDEgPDwgNikKQEAgLTc5MSwyMiArNzkyLDQyIEBACiAKIHN0YXRpYyB2b2lkIG1tY19kYXZpbmNpX3NldF9pb3Moc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfaW9zICppb3MpCiB7Ci0JdW5zaWduZWQgaW50IG1tY19wY2xrID0gMDsKIAlzdHJ1Y3QgbW1jX2RhdmluY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CiAKLQltbWNfcGNsayA9IGhvc3QtPm1tY19pbnB1dF9jbGs7CiAJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksCiAJCSJjbG9jayAlZEh6IGJ1c21vZGUgJWQgcG93ZXJtb2RlICVkIFZkZCAlMDR4XG4iLAogCQlpb3MtPmNsb2NrLCBpb3MtPmJ1c19tb2RlLCBpb3MtPnBvd2VyX21vZGUsCiAJCWlvcy0+dmRkKTsKLQlpZiAoaW9zLT5idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF80KSB7CisKKwlzd2l0Y2ggKGlvcy0+YnVzX3dpZHRoKSB7CisJY2FzZSBNTUNfQlVTX1dJRFRIXzg6CisJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiRW5hYmxpbmcgOCBiaXQgbW9kZVxuIik7CisJCXdyaXRlbCgocmVhZGwoaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DQ1RMKSAmCisJCQl+TU1DQ1RMX1dJRFRIXzRfQklUKSB8IE1NQ0NUTF9XSURUSF84X0JJVCwKKwkJCWhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0NUTCk7CisJCWJyZWFrOworCWNhc2UgTU1DX0JVU19XSURUSF80OgogCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIkVuYWJsaW5nIDQgYml0IG1vZGVcbiIpOwotCQl3cml0ZWwocmVhZGwoaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DQ1RMKSB8IE1NQ0NUTF9XSURUSF80X0JJVCwKLQkJCWhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0NUTCk7Ci0JfSBlbHNlIHsKLQkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJEaXNhYmxpbmcgNCBiaXQgbW9kZVxuIik7Ci0JCXdyaXRlbChyZWFkbChob3N0LT5iYXNlICsgREFWSU5DSV9NTUNDVEwpICYgfk1NQ0NUTF9XSURUSF80X0JJVCwKLQkJCWhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0NUTCk7CisJCWlmIChob3N0LT52ZXJzaW9uID09IE1NQ19DVExSX1ZFUlNJT05fMikKKwkJCXdyaXRlbCgocmVhZGwoaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DQ1RMKSAmCisJCQkJfk1NQ0NUTF9XSURUSF84X0JJVCkgfCBNTUNDVExfV0lEVEhfNF9CSVQsCisJCQkJaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DQ1RMKTsKKwkJZWxzZQorCQkJd3JpdGVsKHJlYWRsKGhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0NUTCkgfAorCQkJCU1NQ0NUTF9XSURUSF80X0JJVCwKKwkJCQlob3N0LT5iYXNlICsgREFWSU5DSV9NTUNDVEwpOworCQlicmVhazsKKwljYXNlIE1NQ19CVVNfV0lEVEhfMToKKwkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJFbmFibGluZyAxIGJpdCBtb2RlXG4iKTsKKwkJaWYgKGhvc3QtPnZlcnNpb24gPT0gTU1DX0NUTFJfVkVSU0lPTl8yKQorCQkJd3JpdGVsKHJlYWRsKGhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0NUTCkgJgorCQkJCX4oTU1DQ1RMX1dJRFRIXzhfQklUIHwgTU1DQ1RMX1dJRFRIXzRfQklUKSwKKwkJCQlob3N0LT5iYXNlICsgREFWSU5DSV9NTUNDVEwpOworCQllbHNlCisJCQl3cml0ZWwocmVhZGwoaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DQ1RMKSAmCisJCQkJfk1NQ0NUTF9XSURUSF80X0JJVCwKKwkJCQlob3N0LT5iYXNlICsgREFWSU5DSV9NTUNDVEwpOworCQlicmVhazsKIAl9CiAKIAljYWxjdWxhdGVfY2xrX2RpdmlkZXIobW1jLCBpb3MpOwpAQCAtMTE4OSwxMCArMTIxMCwxNCBAQAogCiAJLyogUkVWSVNJVDogIHNvbWVkYXksIHN1cHBvcnQgSVJRLWRyaXZlbiBjYXJkIGRldGVjdGlvbi4gICovCiAJbW1jLT5jYXBzIHw9IE1NQ19DQVBfTkVFRFNfUE9MTDsKKwltbWMtPmNhcHMgfD0gTU1DX0NBUF9XQUlUX1dISUxFX0JVU1k7CiAKLQlpZiAoIXBkYXRhIHx8IHBkYXRhLT53aXJlcyA9PSA0IHx8IHBkYXRhLT53aXJlcyA9PSAwKQorCWlmIChwZGF0YSAmJiAocGRhdGEtPndpcmVzID09IDQgfHwgcGRhdGEtPndpcmVzID09IDApKQogCQltbWMtPmNhcHMgfD0gTU1DX0NBUF80X0JJVF9EQVRBOwogCisJaWYgKHBkYXRhICYmIChwZGF0YS0+d2lyZXMgPT0gOCkpCisJCW1tYy0+Y2FwcyB8PSAoTU1DX0NBUF80X0JJVF9EQVRBIHwgTU1DX0NBUF84X0JJVF9EQVRBKTsKKwogCWhvc3QtPnZlcnNpb24gPSBwZGF0YS0+dmVyc2lvbjsKIAogCW1tYy0+b3BzID0gJm1tY19kYXZpbmNpX29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvcmljb2hfbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L3JpY29oX21tYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjI3OTA1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvcmljb2hfbW1jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjIgKzAsMCBAQAotLyoKLSAqICByaWNvaF9tbWMuYyAtIER1bW15IGRyaXZlciB0byBkaXNhYmxlIHRoZSBSaW9jaCBNTUMgY29udHJvbGxlci4KLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IFBoaWxpcCBMYW5nZGFsZSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAotICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLS8qCi0gKiBUaGlzIGlzIGEgY29uY2VwdHVhbGx5IHJpZGljdWxvdXMgZHJpdmVyLCBidXQgaXQgaXMgcmVxdWlyZWQgYnkgdGhlIHdheQotICogdGhlIFJpY29oIG11bHRpLWZ1bmN0aW9uIGNoaXBzIChSNUNYWFgpIHdvcmsuIFRoZXNlIGNoaXBzIGltcGxlbWVudAotICogdGhlIGZvdXIgbWFpbiBtZW1vcnkgY2FyZCBjb250cm9sbGVycyAoU0QsIE1NQywgTVMsIHhEKSBhbmQgb25lIG9yIGJvdGgKLSAqIG9mIGNhcmRidXMgb3IgZmlyZXdpcmUuIEl0IGhhcHBlbnMgdGhhdCB0aGV5IGltcGxlbWVudCBTRCBhbmQgTU1DCi0gKiBzdXBwb3J0IGFzIHNlcGFyYXRlIGNvbnRyb2xsZXJzIChhbmQgUENJIGZ1bmN0aW9ucykuIFRoZSBsaW51eCBTREhDSQotICogZHJpdmVyIHN1cHBvcnRzIE1NQyBjYXJkcyBidXQgdGhlIGNoaXAgZGV0ZWN0cyBNTUMgY2FyZHMgaW4gaGFyZHdhcmUKLSAqIGFuZCBkaXJlY3RzIHRoZW0gdG8gdGhlIE1NQyBjb250cm9sbGVyIC0gc28gdGhlIFNESENJIGRyaXZlciBuZXZlciBzZWVzCi0gKiB0aGVtLiBUbyBnZXQgYXJvdW5kIHRoaXMsIHdlIG11c3QgZGlzYWJsZSB0aGUgdXNlbGVzcyBNTUMgY29udHJvbGxlci4KLSAqIEF0IHRoYXQgcG9pbnQsIHRoZSBTREhDSSBjb250cm9sbGVyIHdpbGwgc3RhcnQgc2VlaW5nIHRoZW0uIEFzIGEgYm9udXMsCi0gKiBhIGRldGVjdGlvbiBldmVudCBvY2N1cnMgaW1tZWRpYXRlbHksIGV2ZW4gaWYgdGhlIE1NQyBjYXJkIGlzIGFscmVhZHkKLSAqIGluIHRoZSByZWFkZXIuCi0gKgotICogSXQgc2VlbXMgdG8gYmUgdGhlIGNhc2UgdGhhdCB0aGUgcmVsZXZhbnQgUENJIHJlZ2lzdGVycyB0byBkZWFjdGl2YXRlIHRoZQotICogTU1DIGNvbnRyb2xsZXIgbGl2ZSBvbiBQQ0kgZnVuY3Rpb24gMCwgd2hpY2ggbWlnaHQgYmUgdGhlIGNhcmRidXMgY29udHJvbGxlcgotICogb3IgdGhlIGZpcmV3aXJlIGNvbnRyb2xsZXIsIGRlcGVuZGluZyBvbiB0aGUgcGFydGljdWxhciBjaGlwIGluIHF1ZXN0aW9uLiBBcwotICogc3VjaCwgaXQgbWFrZXMgd2hhdCB0aGlzIGRyaXZlciBoYXMgdG8gZG8gdW5hdm9pZGFibHkgdWdseS4gU3VjaCBpcyBsaWZlLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLQotI2RlZmluZSBEUklWRVJfTkFNRSAicmljb2gtbW1jIgotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JewotCQkudmVuZG9yCQk9IFBDSV9WRU5ET1JfSURfUklDT0gsCi0JCS5kZXZpY2UJCT0gUENJX0RFVklDRV9JRF9SSUNPSF9SNUM4NDMsCi0JCS5zdWJ2ZW5kb3IJPSBQQ0lfQU5ZX0lELAotCQkuc3ViZGV2aWNlCT0gUENJX0FOWV9JRCwKLQl9LAotCXsgLyogZW5kOiBhbGwgemVyb2VzICovIH0sCi19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpX2lkcyk7Ci0KLXN0YXRpYyBpbnQgcmljb2hfbW1jX2Rpc2FibGUoc3RydWN0IHBjaV9kZXYgKmZ3X2RldikKLXsKLQl1OCB3cml0ZV9lbmFibGU7Ci0JdTggd3JpdGVfdGFyZ2V0OwotCXU4IGRpc2FibGU7Ci0KLQlpZiAoZndfZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9SSUNPSF9STDVDNDc2KSB7Ci0JCS8qIHZpYSBSTDVDNDc2ICovCi0KLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZndfZGV2LCAweEI3LCAmZGlzYWJsZSk7Ci0JCWlmIChkaXNhYmxlICYgMHgwMikgewotCQkJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRQotCQkJCSI6IENvbnRyb2xsZXIgYWxyZWFkeSBkaXNhYmxlZC4gIiBcCi0JCQkJIk5vdGhpbmcgdG8gZG8uXG4iKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0KLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZndfZGV2LCAweDhFLCAmd3JpdGVfZW5hYmxlKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGZ3X2RldiwgMHg4RSwgMHhBQSk7Ci0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGZ3X2RldiwgMHg4RCwgJndyaXRlX3RhcmdldCk7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShmd19kZXYsIDB4OEQsIDB4QjcpOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZndfZGV2LCAweEI3LCBkaXNhYmxlIHwgMHgwMik7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShmd19kZXYsIDB4OEUsIHdyaXRlX2VuYWJsZSk7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShmd19kZXYsIDB4OEQsIHdyaXRlX3RhcmdldCk7Ci0JfSBlbHNlIHsKLQkJLyogdmlhIFI1QzgzMiAqLwotCi0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGZ3X2RldiwgMHhDQiwgJmRpc2FibGUpOwotCQlpZiAoZGlzYWJsZSAmIDB4MDIpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUKLQkJCSAgICAgICAiOiBDb250cm9sbGVyIGFscmVhZHkgZGlzYWJsZWQuICIgXAotCQkJCSJOb3RoaW5nIHRvIGRvLlxuIik7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCi0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGZ3X2RldiwgMHhDQSwgJndyaXRlX2VuYWJsZSk7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShmd19kZXYsIDB4Q0EsIDB4NTcpOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZndfZGV2LCAweENCLCBkaXNhYmxlIHwgMHgwMik7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShmd19kZXYsIDB4Q0EsIHdyaXRlX2VuYWJsZSk7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRQotCSAgICAgICAiOiBDb250cm9sbGVyIGlzIG5vdyBkaXNhYmxlZC5cbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcmljb2hfbW1jX2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqZndfZGV2KQotewotCXU4IHdyaXRlX2VuYWJsZTsKLQl1OCB3cml0ZV90YXJnZXQ7Ci0JdTggZGlzYWJsZTsKLQotCWlmIChmd19kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1JJQ09IX1JMNUM0NzYpIHsKLQkJLyogdmlhIFJMNUM0NzYgKi8KLQotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShmd19kZXYsIDB4OEUsICZ3cml0ZV9lbmFibGUpOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZndfZGV2LCAweDhFLCAweEFBKTsKLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZndfZGV2LCAweDhELCAmd3JpdGVfdGFyZ2V0KTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGZ3X2RldiwgMHg4RCwgMHhCNyk7Ci0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGZ3X2RldiwgMHhCNywgJmRpc2FibGUpOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZndfZGV2LCAweEI3LCBkaXNhYmxlICYgfjB4MDIpOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZndfZGV2LCAweDhFLCB3cml0ZV9lbmFibGUpOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZndfZGV2LCAweDhELCB3cml0ZV90YXJnZXQpOwotCX0gZWxzZSB7Ci0JCS8qIHZpYSBSNUM4MzIgKi8KLQotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShmd19kZXYsIDB4Q0EsICZ3cml0ZV9lbmFibGUpOwotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShmd19kZXYsIDB4Q0IsICZkaXNhYmxlKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGZ3X2RldiwgMHhDQSwgMHg1Nyk7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShmd19kZXYsIDB4Q0IsIGRpc2FibGUgJiB+MHgwMik7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShmd19kZXYsIDB4Q0EsIHdyaXRlX2VuYWJsZSk7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRQotCSAgICAgICAiOiBDb250cm9sbGVyIGlzIG5vdyByZS1lbmFibGVkLlxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgcmljb2hfbW1jX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKLXsKLQl1OCByZXY7Ci0JdTggY3RybGZvdW5kID0gMDsKLQotCXN0cnVjdCBwY2lfZGV2ICpmd19kZXYgPSBOVUxMOwotCi0JQlVHX09OKHBkZXYgPT0gTlVMTCk7Ci0JQlVHX09OKGVudCA9PSBOVUxMKTsKLQotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJnJldik7Ci0KLQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FCi0JCSI6IFJpY29oIE1NQyBjb250cm9sbGVyIGZvdW5kIGF0ICVzIFslMDR4OiUwNHhdIChyZXYgJXgpXG4iLAotCQlwY2lfbmFtZShwZGV2KSwgKGludClwZGV2LT52ZW5kb3IsIChpbnQpcGRldi0+ZGV2aWNlLAotCQkoaW50KXJldik7Ci0KLQl3aGlsZSAoKGZ3X2RldiA9Ci0JCXBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfUklDT0gsCi0JCQlQQ0lfREVWSUNFX0lEX1JJQ09IX1JMNUM0NzYsIGZ3X2RldikpKSB7Ci0JCWlmIChQQ0lfU0xPVChwZGV2LT5kZXZmbikgPT0gUENJX1NMT1QoZndfZGV2LT5kZXZmbikgJiYKLQkJICAgIFBDSV9GVU5DKGZ3X2Rldi0+ZGV2Zm4pID09IDAgJiYKLQkJICAgIHBkZXYtPmJ1cyA9PSBmd19kZXYtPmJ1cykgewotCQkJaWYgKHJpY29oX21tY19kaXNhYmxlKGZ3X2RldikgIT0gMCkKLQkJCQlyZXR1cm4gLUVOT0RFVjsKLQotCQkJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGZ3X2Rldik7Ci0KLQkJCSsrY3RybGZvdW5kOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlmd19kZXYgPSBOVUxMOwotCi0Jd2hpbGUgKCFjdHJsZm91bmQgJiYKLQkgICAgKGZ3X2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfUklDT0gsCi0JCQkJCVBDSV9ERVZJQ0VfSURfUklDT0hfUjVDODMyLCBmd19kZXYpKSkgewotCQlpZiAoUENJX1NMT1QocGRldi0+ZGV2Zm4pID09IFBDSV9TTE9UKGZ3X2Rldi0+ZGV2Zm4pICYmCi0JCSAgICBQQ0lfRlVOQyhmd19kZXYtPmRldmZuKSA9PSAwICYmCi0JCSAgICBwZGV2LT5idXMgPT0gZndfZGV2LT5idXMpIHsKLQkJCWlmIChyaWNvaF9tbWNfZGlzYWJsZShmd19kZXYpICE9IDApCi0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkJCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBmd19kZXYpOwotCi0JCQkrK2N0cmxmb3VuZDsKLQkJfQotCX0KLQotCWlmICghY3RybGZvdW5kKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKLQkJICAgICAgICI6IE1haW4gUmljb2ggZnVuY3Rpb24gbm90IGZvdW5kLiBDYW5ub3QgZGlzYWJsZSBjb250cm9sbGVyLlxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgcmljb2hfbW1jX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZndfZGV2ID0gTlVMTDsKLQotCWZ3X2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlCVUdfT04oZndfZGV2ID09IE5VTEwpOwotCi0Jcmljb2hfbW1jX2VuYWJsZShmd19kZXYpOwotCi0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotfQotCi1zdGF0aWMgaW50IHJpY29oX21tY19zdXNwZW5kX2xhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZndfZGV2ID0gTlVMTDsKLQotCWZ3X2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlCVUdfT04oZndfZGV2ID09IE5VTEwpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiBTdXNwZW5kaW5nLlxuIik7Ci0KLQlyaWNvaF9tbWNfZW5hYmxlKGZ3X2Rldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCByaWNvaF9tbWNfcmVzdW1lX2Vhcmx5KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBwY2lfZGV2ICpmd19kZXYgPSBOVUxMOwotCi0JZndfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCUJVR19PTihmd19kZXYgPT0gTlVMTCk7Ci0KLQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IFJlc3VtaW5nLlxuIik7Ci0KLQlyaWNvaF9tbWNfZGlzYWJsZShmd19kZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciByaWNvaF9tbWNfZHJpdmVyID0gewotCS5uYW1lID0gCURSSVZFUl9OQU1FLAotCS5pZF90YWJsZSA9CXBjaV9pZHMsCi0JLnByb2JlID0gCXJpY29oX21tY19wcm9iZSwKLQkucmVtb3ZlID0JX19kZXZleGl0X3Aocmljb2hfbW1jX3JlbW92ZSksCi0JLnN1c3BlbmRfbGF0ZSA9CXJpY29oX21tY19zdXNwZW5kX2xhdGUsCi0JLnJlc3VtZV9lYXJseSA9CXJpY29oX21tY19yZXN1bWVfZWFybHksCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIERyaXZlciBpbml0L2V4aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbnQgX19pbml0IHJpY29oX21tY19kcnZfaW5pdCh2b2lkKQotewotCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUKLQkJIjogUmljb2ggTU1DIENvbnRyb2xsZXIgZGlzYWJsaW5nIGRyaXZlclxuIik7Ci0JcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiBDb3B5cmlnaHQoYykgUGhpbGlwIExhbmdkYWxlXG4iKTsKLQotCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZyaWNvaF9tbWNfZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHJpY29oX21tY19kcnZfZXhpdCh2b2lkKQotewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcmljb2hfbW1jX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHJpY29oX21tY19kcnZfaW5pdCk7Ci1tb2R1bGVfZXhpdChyaWNvaF9tbWNfZHJ2X2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJQaGlsaXAgTGFuZ2RhbGUgPHBoaWxpcGxAYWx1bW5pLnV0ZXhhcy5uZXQ+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlJpY29oIE1NQyBDb250cm9sbGVyIGRpc2FibGluZyBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMKaW5kZXggZDk2ZTFhYi4uMmZkZjc2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5jCkBAIC0xMTc5LDcgKzExNzksNyBAQAogCXN0cnVjdCBzM2MyNHh4X21jaV9wZGF0YSAqcGRhdGEgPSBob3N0LT5wZGF0YTsKIAlpbnQgcmV0OwogCi0JaWYgKHBkYXRhLT5ncGlvX2RldGVjdCA9PSAwKQorCWlmIChwZGF0YS0+bm9fZGV0ZWN0KQogCQlyZXR1cm4gLUVOT1NZUzsKIAogCXJldCA9IGdwaW9fZ2V0X3ZhbHVlKHBkYXRhLT5ncGlvX2RldGVjdCkgPyAwIDogMTsKQEAgLTEzNjAsNiArMTM2MCw4IEBACiBzdGF0aWMgc3RydWN0IHMzYzI0eHhfbWNpX3BkYXRhIHMzY21jaV9kZWZfcGRhdGEgPSB7CiAJLyogVGhpcyBpcyBjdXJyZW50bHkgaGVyZSB0byBhdm9pZCBhIG51bWJlciBvZiBpZiAoaG9zdC0+cGRhdGEpCiAJICogY2hlY2tzLiBBbnkgemVybyBmaWVsZHMgdG8gZW5zdXJlIHJlYXNvbmFibGUgZGVmYXVsdHMgYXJlIHBpY2tlZC4gKi8KKwkgLm5vX3dwcm90ZWN0ID0gMSwKKwkgLm5vX2RldGVjdCA9IDEsCiB9OwogCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYwppbmRleCA1YzNhMTc2Li44ZTEwMjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMKQEAgLTgwLDkgKzgwLDYgQEAKIAogc3RhdGljIGludCByaWNvaF9wcm9iZShzdHJ1Y3Qgc2RoY2lfcGNpX2NoaXAgKmNoaXApCiB7Ci0JaWYgKGNoaXAtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9JQk0pCi0JCWNoaXAtPnF1aXJrcyB8PSBTREhDSV9RVUlSS19DTE9DS19CRUZPUkVfUkVTRVQ7Ci0KIAlpZiAoY2hpcC0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX1NBTVNVTkcgfHwKIAkgICAgY2hpcC0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX1NPTlkpCiAJCWNoaXAtPnF1aXJrcyB8PSBTREhDSV9RVUlSS19OT19DQVJEX05PX1JFU0VUOwpAQCAtOTIsNyArODksOSBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkaGNpX3BjaV9maXhlcyBzZGhjaV9yaWNvaCA9IHsKIAkucHJvYmUJCT0gcmljb2hfcHJvYmUsCi0JLnF1aXJrcwkJPSBTREhDSV9RVUlSS18zMkJJVF9ETUFfQUREUiwKKwkucXVpcmtzCQk9IFNESENJX1FVSVJLXzMyQklUX0RNQV9BRERSIHwKKwkJCSAgU0RIQ0lfUVVJUktfRk9SQ0VfRE1BIHwKKwkJCSAgU0RIQ0lfUVVJUktfQ0xPQ0tfQkVGT1JFX1JFU0VULAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZGhjaV9wY2lfZml4ZXMgc2RoY2lfZW5lXzcxMiA9IHsKQEAgLTUwMSw2ICs1MDAsNyBAQAogewogCXN0cnVjdCBzZGhjaV9wY2lfY2hpcCAqY2hpcDsKIAlzdHJ1Y3Qgc2RoY2lfcGNpX3Nsb3QgKnNsb3Q7CisJbW1jX3BtX2ZsYWdfdCBwbV9mbGFncyA9IDA7CiAJaW50IGksIHJldDsKIAogCWNoaXAgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CkBAIC01MTksNiArNTE5LDggQEAKIAkJCQlzZGhjaV9yZXN1bWVfaG9zdChjaGlwLT5zbG90c1tpXS0+aG9zdCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CisKKwkJcG1fZmxhZ3MgfD0gc2xvdC0+aG9zdC0+bW1jLT5wbV9mbGFnczsKIAl9CiAKIAlpZiAoY2hpcC0+Zml4ZXMgJiYgY2hpcC0+Zml4ZXMtPnN1c3BlbmQpIHsKQEAgLTUzMSw5ICs1MzMsMTUgQEAKIAl9CiAKIAlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlwY2lfZW5hYmxlX3dha2UocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSksIDApOwotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKwlpZiAocG1fZmxhZ3MgJiBNTUNfUE1fS0VFUF9QT1dFUikgeworCQlpZiAocG1fZmxhZ3MgJiBNTUNfUE1fV0FLRV9TRElPX0lSUSkKKwkJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDEpOworCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CisJfSBlbHNlIHsKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpLCAwKTsKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY1Myw2ICs2NjEsOCBAQAogCQkJZ290byB1bm1hcDsKIAl9CiAKKwlob3N0LT5tbWMtPnBtX2NhcHMgPSBNTUNfUE1fS0VFUF9QT1dFUiB8IE1NQ19QTV9XQUtFX1NESU9fSVJROworCiAJcmV0ID0gc2RoY2lfYWRkX2hvc3QoaG9zdCk7CiAJaWYgKHJldCkKIAkJZ290byByZW1vdmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMKaW5kZXggYzI3OWZiYy4uZDZhYjYyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYwpAQCAtMTc0LDIwICsxNzQsMzEgQEAKIAkJc2RoY2lfY2xlYXJfc2V0X2lycXMoaG9zdCwgU0RIQ0lfSU5UX0FMTF9NQVNLLCBpZXIpOwogfQogCi1zdGF0aWMgdm9pZCBzZGhjaV9pbml0KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQorc3RhdGljIHZvaWQgc2RoY2lfc2V0X2lvcyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcyk7CisKK3N0YXRpYyB2b2lkIHNkaGNpX2luaXQoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCBzb2Z0KQogewotCXNkaGNpX3Jlc2V0KGhvc3QsIFNESENJX1JFU0VUX0FMTCk7CisJaWYgKHNvZnQpCisJCXNkaGNpX3Jlc2V0KGhvc3QsIFNESENJX1JFU0VUX0NNRHxTREhDSV9SRVNFVF9EQVRBKTsKKwllbHNlCisJCXNkaGNpX3Jlc2V0KGhvc3QsIFNESENJX1JFU0VUX0FMTCk7CiAKIAlzZGhjaV9jbGVhcl9zZXRfaXJxcyhob3N0LCBTREhDSV9JTlRfQUxMX01BU0ssCiAJCVNESENJX0lOVF9CVVNfUE9XRVIgfCBTREhDSV9JTlRfREFUQV9FTkRfQklUIHwKIAkJU0RIQ0lfSU5UX0RBVEFfQ1JDIHwgU0RIQ0lfSU5UX0RBVEFfVElNRU9VVCB8IFNESENJX0lOVF9JTkRFWCB8CiAJCVNESENJX0lOVF9FTkRfQklUIHwgU0RIQ0lfSU5UX0NSQyB8IFNESENJX0lOVF9USU1FT1VUIHwKIAkJU0RIQ0lfSU5UX0RBVEFfRU5EIHwgU0RIQ0lfSU5UX1JFU1BPTlNFKTsKKworCWlmIChzb2Z0KSB7CisJCS8qIGZvcmNlIGNsb2NrIHJlY29uZmlndXJhdGlvbiAqLworCQlob3N0LT5jbG9jayA9IDA7CisJCXNkaGNpX3NldF9pb3MoaG9zdC0+bW1jLCAmaG9zdC0+bW1jLT5pb3MpOworCX0KIH0KIAogc3RhdGljIHZvaWQgc2RoY2lfcmVpbml0KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQogewotCXNkaGNpX2luaXQoaG9zdCk7CisJc2RoY2lfaW5pdChob3N0LCAwKTsKIAlzZGhjaV9lbmFibGVfY2FyZF9kZXRlY3Rpb24oaG9zdCk7CiB9CiAKQEAgLTM3Niw2ICszODcsMjAgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZSgqZmxhZ3MpOwogfQogCitzdGF0aWMgdm9pZCBzZGhjaV9zZXRfYWRtYV9kZXNjKHU4ICpkZXNjLCB1MzIgYWRkciwgaW50IGxlbiwgdW5zaWduZWQgY21kKQoreworCV9fbGUzMiAqZGF0YWRkciA9IChfX2xlMzIgX19mb3JjZSAqKShkZXNjICsgNCk7CisJX19sZTE2ICpjbWRsZW4gPSAoX19sZTE2IF9fZm9yY2UgKilkZXNjOworCisJLyogU0RIQ0kgc3BlY2lmaWNhdGlvbiBzYXlzIEFETUEgZGVzY3JpcHRvcnMgc2hvdWxkIGJlIDQgYnl0ZQorCSAqIGFsaWduZWQsIHNvIHVzaW5nIDE2IG9yIDMyYml0IG9wZXJhdGlvbnMgc2hvdWxkIGJlIHNhZmUuICovCisKKwljbWRsZW5bMF0gPSBjcHVfdG9fbGUxNihjbWQpOworCWNtZGxlblsxXSA9IGNwdV90b19sZTE2KGxlbik7CisKKwlkYXRhZGRyWzBdID0gY3B1X3RvX2xlMzIoYWRkcik7Cit9CisKIHN0YXRpYyBpbnQgc2RoY2lfYWRtYV90YWJsZV9wcmUoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsCiAJc3RydWN0IG1tY19kYXRhICpkYXRhKQogewpAQCAtNDQzLDE5ICs0NjgsMTEgQEAKIAkJCQlzZGhjaV9rdW5tYXBfYXRvbWljKGJ1ZmZlciwgJmZsYWdzKTsKIAkJCX0KIAotCQkJZGVzY1s3XSA9IChhbGlnbl9hZGRyID4+IDI0KSAmIDB4ZmY7Ci0JCQlkZXNjWzZdID0gKGFsaWduX2FkZHIgPj4gMTYpICYgMHhmZjsKLQkJCWRlc2NbNV0gPSAoYWxpZ25fYWRkciA+PiA4KSAmIDB4ZmY7Ci0JCQlkZXNjWzRdID0gKGFsaWduX2FkZHIgPj4gMCkgJiAweGZmOworCQkJLyogdHJhbiwgdmFsaWQgKi8KKwkJCXNkaGNpX3NldF9hZG1hX2Rlc2MoZGVzYywgYWxpZ25fYWRkciwgb2Zmc2V0LCAweDIxKTsKIAogCQkJQlVHX09OKG9mZnNldCA+IDY1NTM2KTsKIAotCQkJZGVzY1szXSA9IChvZmZzZXQgPj4gOCkgJiAweGZmOwotCQkJZGVzY1syXSA9IChvZmZzZXQgPj4gMCkgJiAweGZmOwotCi0JCQlkZXNjWzFdID0gMHgwMDsKLQkJCWRlc2NbMF0gPSAweDIxOyAvKiB0cmFuLCB2YWxpZCAqLwotCiAJCQlhbGlnbiArPSA0OwogCQkJYWxpZ25fYWRkciArPSA0OwogCkBAIC00NjUsMTkgKzQ4MiwxMCBAQAogCQkJbGVuIC09IG9mZnNldDsKIAkJfQogCi0JCWRlc2NbN10gPSAoYWRkciA+PiAyNCkgJiAweGZmOwotCQlkZXNjWzZdID0gKGFkZHIgPj4gMTYpICYgMHhmZjsKLQkJZGVzY1s1XSA9IChhZGRyID4+IDgpICYgMHhmZjsKLQkJZGVzY1s0XSA9IChhZGRyID4+IDApICYgMHhmZjsKLQogCQlCVUdfT04obGVuID4gNjU1MzYpOwogCi0JCWRlc2NbM10gPSAobGVuID4+IDgpICYgMHhmZjsKLQkJZGVzY1syXSA9IChsZW4gPj4gMCkgJiAweGZmOwotCi0JCWRlc2NbMV0gPSAweDAwOwotCQlkZXNjWzBdID0gMHgyMTsgLyogdHJhbiwgdmFsaWQgKi8KLQorCQkvKiB0cmFuLCB2YWxpZCAqLworCQlzZGhjaV9zZXRfYWRtYV9kZXNjKGRlc2MsIGFkZHIsIGxlbiwgMHgyMSk7CiAJCWRlc2MgKz0gODsKIAogCQkvKgpAQCAtNDkwLDE2ICs0OTgsOSBAQAogCS8qCiAJICogQWRkIGEgdGVybWluYXRpbmcgZW50cnkuCiAJICovCi0JZGVzY1s3XSA9IDA7Ci0JZGVzY1s2XSA9IDA7Ci0JZGVzY1s1XSA9IDA7Ci0JZGVzY1s0XSA9IDA7CiAKLQlkZXNjWzNdID0gMDsKLQlkZXNjWzJdID0gMDsKLQotCWRlc2NbMV0gPSAweDAwOwotCWRlc2NbMF0gPSAweDAzOyAvKiBub3AsIGVuZCwgdmFsaWQgKi8KKwkvKiBub3AsIGVuZCwgdmFsaWQgKi8KKwlzZGhjaV9zZXRfYWRtYV9kZXNjKGRlc2MsIDAsIDAsIDB4Myk7CiAKIAkvKgogCSAqIFJlc3luYyBhbGlnbiBidWZmZXIgYXMgd2UgbWlnaHQgaGF2ZSBjaGFuZ2VkIGl0LgpAQCAtMTYxMCwxNiArMTYxMSwxMyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlzZGhjaV9pbml0KGhvc3QpOworCXNkaGNpX2luaXQoaG9zdCwgKGhvc3QtPm1tYy0+cG1fZmxhZ3MgJiBNTUNfUE1fS0VFUF9QT1dFUikpOwogCW1taW93YigpOwogCiAJcmV0ID0gbW1jX3Jlc3VtZV9ob3N0KGhvc3QtPm1tYyk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQogCXNkaGNpX2VuYWJsZV9jYXJkX2RldGVjdGlvbihob3N0KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKHNkaGNpX3Jlc3VtZV9ob3N0KTsKQEAgLTE4NzQsNyArMTg3Miw3IEBACiAJaWYgKHJldCkKIAkJZ290byB1bnRhc2tsZXQ7CiAKLQlzZGhjaV9pbml0KGhvc3QpOworCXNkaGNpX2luaXQoaG9zdCwgMCk7CiAKICNpZmRlZiBDT05GSUdfTU1DX0RFQlVHCiAJc2RoY2lfZHVtcHJlZ3MoaG9zdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jLmMKaW5kZXggZTIyYzNmYS4uYjJiNTc3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuYwpAQCAtMzIzLDcgKzMyMyw3IEBACiAJCWlmIChpcmVnICYgKFRNSU9fU1RBVF9DQVJEX0lOU0VSVCB8IFRNSU9fU1RBVF9DQVJEX1JFTU9WRSkpIHsKIAkJCWFja19tbWNfaXJxcyhob3N0LCBUTUlPX1NUQVRfQ0FSRF9JTlNFUlQgfAogCQkJCVRNSU9fU1RBVF9DQVJEX1JFTU9WRSk7Ci0JCQltbWNfZGV0ZWN0X2NoYW5nZShob3N0LT5tbWMsIDApOworCQkJbW1jX2RldGVjdF9jaGFuZ2UoaG9zdC0+bW1jLCBtc2Vjc190b19qaWZmaWVzKDEwMCkpOwogCQl9CiAKIAkJLyogQ1JDIGFuZCBvdGhlciBlcnJvcnMgKi8KQEAgLTU1MCw2ICs1NTAsNyBAQAogCiAJbW1jLT5vcHMgPSAmdG1pb19tbWNfb3BzOwogCW1tYy0+Y2FwcyA9IE1NQ19DQVBfNF9CSVRfREFUQTsKKwltbWMtPmNhcHMgfD0gcGRhdGEtPmNhcGFiaWxpdGllczsKIAltbWMtPmZfbWF4ID0gcGRhdGEtPmhjbGs7CiAJbW1jLT5mX21pbiA9IG1tYy0+Zl9tYXggLyA1MTI7CiAJbW1jLT5vY3JfYXZhaWwgPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNDsKQEAgLTU2OCwxNCArNTY5LDE0IEBACiAJaWYgKHJldCA+PSAwKQogCQlob3N0LT5pcnEgPSByZXQ7CiAJZWxzZQotCQlnb3RvIHVubWFwX2N0bDsKKwkJZ290byBjZWxsX2Rpc2FibGU7CiAKIAlkaXNhYmxlX21tY19pcnFzKGhvc3QsIFRNSU9fTUFTS19BTEwpOwogCiAJcmV0ID0gcmVxdWVzdF9pcnEoaG9zdC0+aXJxLCB0bWlvX21tY19pcnEsIElSUUZfRElTQUJMRUQgfAogCQlJUlFGX1RSSUdHRVJfRkFMTElORywgZGV2X25hbWUoJmRldi0+ZGV2KSwgaG9zdCk7CiAJaWYgKHJldCkKLQkJZ290byB1bm1hcF9jdGw7CisJCWdvdG8gY2VsbF9kaXNhYmxlOwogCiAJbW1jX2FkZF9ob3N0KG1tYyk7CiAKQEAgLTU4Nyw2ICs1ODgsOSBAQAogCiAJcmV0dXJuIDA7CiAKK2NlbGxfZGlzYWJsZToKKwlpZiAoY2VsbC0+ZGlzYWJsZSkKKwkJY2VsbC0+ZGlzYWJsZShkZXYpOwogdW5tYXBfY3RsOgogCWlvdW5tYXAoaG9zdC0+Y3RsKTsKIGhvc3RfZnJlZToKQEAgLTU5Nyw2ICs2MDEsNyBAQAogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCB0bWlvX21tY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogeworCXN0cnVjdCBtZmRfY2VsbAkqY2VsbCA9IChzdHJ1Y3QgbWZkX2NlbGwgKilkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CkBAIC02MDUsNiArNjEwLDggQEAKIAkJc3RydWN0IHRtaW9fbW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCQltbWNfcmVtb3ZlX2hvc3QobW1jKTsKIAkJZnJlZV9pcnEoaG9zdC0+aXJxLCBob3N0KTsKKwkJaWYgKGNlbGwtPmRpc2FibGUpCisJCQljZWxsLT5kaXNhYmxlKGRldik7CiAJCWlvdW5tYXAoaG9zdC0+Y3RsKTsKIAkJbW1jX2ZyZWVfaG9zdChtbWMpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuaCBiL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuaAppbmRleCA2OTJkYzIzLi5kYWZlY2ZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jLmgKKysrIGIvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tYy5oCkBAIC01NSwxMCArNTUsOCBAQAogLyogRGVmaW5lIHNvbWUgSVJRIG1hc2tzICovCiAvKiBUaGlzIGlzIHRoZSBtYXNrIHVzZWQgYXQgcmVzZXQgYnkgdGhlIGNoaXAgKi8KICNkZWZpbmUgVE1JT19NQVNLX0FMTCAgICAgICAgICAgMHg4MzdmMDMxZAotI2RlZmluZSBUTUlPX01BU0tfUkVBRE9QICAoVE1JT19TVEFUX1JYUkRZIHwgVE1JT19TVEFUX0RBVEFFTkQgfCBcCi0JCVRNSU9fU1RBVF9DQVJEX1JFTU9WRSB8IFRNSU9fU1RBVF9DQVJEX0lOU0VSVCkKLSNkZWZpbmUgVE1JT19NQVNLX1dSSVRFT1AgKFRNSU9fU1RBVF9UWFJRIHwgVE1JT19TVEFUX0RBVEFFTkQgfCBcCi0JCVRNSU9fU1RBVF9DQVJEX1JFTU9WRSB8IFRNSU9fU1RBVF9DQVJEX0lOU0VSVCkKKyNkZWZpbmUgVE1JT19NQVNLX1JFQURPUCAgKFRNSU9fU1RBVF9SWFJEWSB8IFRNSU9fU1RBVF9EQVRBRU5EKQorI2RlZmluZSBUTUlPX01BU0tfV1JJVEVPUCAoVE1JT19TVEFUX1RYUlEgfCBUTUlPX1NUQVRfREFUQUVORCkKICNkZWZpbmUgVE1JT19NQVNLX0NNRCAgICAgKFRNSU9fU1RBVF9DTURSRVNQRU5EIHwgVE1JT19TVEFUX0NNRFRJTUVPVVQgfCBcCiAJCVRNSU9fU1RBVF9DQVJEX1JFTU9WRSB8IFRNSU9fU1RBVF9DQVJEX0lOU0VSVCkKICNkZWZpbmUgVE1JT19NQVNLX0lSUSAgICAgKFRNSU9fTUFTS19SRUFET1AgfCBUTUlPX01BU0tfV1JJVEVPUCB8IFRNSU9fTUFTS19DTUQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91YmkvYnVpbGQuYyBiL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCmluZGV4IDE0Y2VjMDQuLmJjNDVlZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgpAQCAtNTAsNyArNTEsOCBAQAogCiAvKioKICAqIHN0cnVjdCBtdGRfZGV2X3BhcmFtIC0gTVREIGRldmljZSBwYXJhbWV0ZXIgZGVzY3JpcHRpb24gZGF0YSBzdHJ1Y3R1cmUuCi0gKiBAbmFtZTogTVREIGRldmljZSBuYW1lIG9yIG51bWJlciBzdHJpbmcKKyAqIEBuYW1lOiBNVEQgY2hhcmFjdGVyIGRldmljZSBub2RlIHBhdGgsIE1URCBkZXZpY2UgbmFtZSwgb3IgTVREIGRldmljZSBudW1iZXIKKyAqICAgICAgICBzdHJpbmcKICAqIEB2aWRfaGRyX29mZnM6IFZJRCBoZWFkZXIgb2Zmc2V0CiAgKi8KIHN0cnVjdCBtdGRfZGV2X3BhcmFtIHsKQEAgLTU5LDEwICs2MSwxMCBAQAogfTsKIAogLyogTnVtYmVycyBvZiBlbGVtZW50cyBzZXQgaW4gdGhlIEBtdGRfZGV2X3BhcmFtIGFycmF5ICovCi1zdGF0aWMgaW50IG10ZF9kZXZzOworc3RhdGljIGludCBfX2luaXRkYXRhIG10ZF9kZXZzOwogCiAvKiBNVEQgZGV2aWNlcyBzcGVjaWZpY2F0aW9uIHBhcmFtZXRlcnMgKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX2Rldl9wYXJhbSBtdGRfZGV2X3BhcmFtW1VCSV9NQVhfREVWSUNFU107CitzdGF0aWMgc3RydWN0IG10ZF9kZXZfcGFyYW0gX19pbml0ZGF0YSBtdGRfZGV2X3BhcmFtW1VCSV9NQVhfREVWSUNFU107CiAKIC8qIFJvb3QgVUJJICJjbGFzcyIgb2JqZWN0IChjb3JyZXNwb25kcyB0byAnLzxzeXNmcz4vY2xhc3MvdWJpLycpICovCiBzdHJ1Y3QgY2xhc3MgKnViaV9jbGFzczsKQEAgLTM2MywxMSArMzY1LDEzIEBACiAvKioKICAqIHViaV9zeXNmc19pbml0IC0gaW5pdGlhbGl6ZSBzeXNmcyBmb3IgYW4gVUJJIGRldmljZS4KICAqIEB1Ymk6IFVCSSBkZXZpY2UgZGVzY3JpcHRpb24gb2JqZWN0CisgKiBAcmVmOiBzZXQgdG8gJTEgb24gZXhpdCBpbiBjYXNlIG9mIGZhaWx1cmUgaWYgYSByZWZlcmVuY2UgdG8gQHViaS0+ZGV2IHdhcworICogICAgICAgdGFrZW4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgemVybyBpbiBjYXNlIG9mIHN1Y2Nlc3MgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpbgogICogY2FzZSBvZiBmYWlsdXJlLgogICovCi1zdGF0aWMgaW50IHViaV9zeXNmc19pbml0KHN0cnVjdCB1YmlfZGV2aWNlICp1YmkpCitzdGF0aWMgaW50IHViaV9zeXNmc19pbml0KHN0cnVjdCB1YmlfZGV2aWNlICp1YmksIGludCAqcmVmKQogewogCWludCBlcnI7CiAKQEAgLTM3OSw2ICszODMsNyBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKKwkqcmVmID0gMTsKIAllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnViaS0+ZGV2LCAmZGV2X2VyYXNlYmxvY2tfc2l6ZSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTQzNCw3ICs0MzksNyBAQAogfQogCiAvKioKLSAqIGtpbGxfdm9sdW1lcyAtIGRlc3Ryb3kgYWxsIHZvbHVtZXMuCisgKiBraWxsX3ZvbHVtZXMgLSBkZXN0cm95IGFsbCB1c2VyIHZvbHVtZXMuCiAgKiBAdWJpOiBVQkkgZGV2aWNlIGRlc2NyaXB0aW9uIG9iamVjdAogICovCiBzdGF0aWMgdm9pZCBraWxsX3ZvbHVtZXMoc3RydWN0IHViaV9kZXZpY2UgKnViaSkKQEAgLTQ0NywzNiArNDUyLDI5IEBACiB9CiAKIC8qKgotICogZnJlZV91c2VyX3ZvbHVtZXMgLSBmcmVlIGFsbCB1c2VyIHZvbHVtZXMuCi0gKiBAdWJpOiBVQkkgZGV2aWNlIGRlc2NyaXB0aW9uIG9iamVjdAotICoKLSAqIE5vcm1hbGx5IHRoZSB2b2x1bWVzIGFyZSBmcmVlZCBhdCB0aGUgcmVsZWFzZSBmdW5jdGlvbiBvZiB0aGUgdm9sdW1lIGRldmljZQotICogb2JqZWN0cy4gSG93ZXZlciwgb24gZXJyb3IgcGF0aHMgdGhlIHZvbHVtZXMgaGF2ZSB0byBiZSBmcmVlZCBiZWZvcmUgdGhlCi0gKiBkZXZpY2Ugb2JqZWN0cyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQuCi0gKi8KLXN0YXRpYyB2b2lkIGZyZWVfdXNlcl92b2x1bWVzKHN0cnVjdCB1YmlfZGV2aWNlICp1YmkpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgdWJpLT52dGJsX3Nsb3RzOyBpKyspCi0JCWlmICh1YmktPnZvbHVtZXNbaV0pIHsKLQkJCWtmcmVlKHViaS0+dm9sdW1lc1tpXS0+ZWJhX3RibCk7Ci0JCQlrZnJlZSh1YmktPnZvbHVtZXNbaV0pOwotCQl9Ci19Ci0KLS8qKgogICogdWlmX2luaXQgLSBpbml0aWFsaXplIHVzZXIgaW50ZXJmYWNlcyBmb3IgYW4gVUJJIGRldmljZS4KICAqIEB1Ymk6IFVCSSBkZXZpY2UgZGVzY3JpcHRpb24gb2JqZWN0CisgKiBAcmVmOiBzZXQgdG8gJTEgb24gZXhpdCBpbiBjYXNlIG9mIGZhaWx1cmUgaWYgYSByZWZlcmVuY2UgdG8gQHViaS0+ZGV2IHdhcworICogICAgICAgdGFrZW4sIG90aGVyd2lzZSBzZXQgdG8gJTAKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHZhcmlvdXMgdXNlciBpbnRlcmZhY2VzIGZvciBhbiBVQkkgZGV2aWNlLiBJZiB0aGUKKyAqIGluaXRpYWxpemF0aW9uIGZhaWxzIGF0IGFuIGVhcmx5IHN0YWdlLCB0aGlzIGZ1bmN0aW9uIGZyZWVzIGFsbCB0aGUKKyAqIHJlc291cmNlcyBpdCBhbGxvY2F0ZWQsIHJldHVybnMgYW4gZXJyb3IsIGFuZCBAcmVmIGlzIHNldCB0byAlMC4gSG93ZXZlciwKKyAqIGlmIHRoZSBpbml0aWFsaXphdGlvbiBmYWlscyBhZnRlciB0aGUgVUJJIGRldmljZSB3YXMgcmVnaXN0ZXJlZCBpbiB0aGUKKyAqIGRyaXZlciBjb3JlIHN1YnN5c3RlbSwgdGhpcyBmdW5jdGlvbiB0YWtlcyBhIHJlZmVyZW5jZSB0byBAdWJpLT5kZXYsIGJlY2F1c2UKKyAqIG90aGVyd2lzZSB0aGUgcmVsZWFzZSBmdW5jdGlvbiAoJ2Rldl9yZWxlYXNlKCknKSB3b3VsZCBmcmVlIHdob2xlIEB1YmkKKyAqIG9iamVjdC4gVGhlIEByZWYgYXJndW1lbnQgaXMgc2V0IHRvICUxIGluIHRoaXMgY2FzZS4gVGhlIGNhbGxlciBoYXMgdG8gcHV0CisgKiB0aGlzIHJlZmVyZW5jZS4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgemVybyBpbiBjYXNlIG9mIHN1Y2Nlc3MgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpbgotICogY2FzZSBvZiBmYWlsdXJlLiBOb3RlLCB0aGlzIGZ1bmN0aW9uIGRlc3Ryb3lzIGFsbCB2b2x1bWVzIGlmIGl0IGZhaWxzLgorICogY2FzZSBvZiBmYWlsdXJlLgogICovCi1zdGF0aWMgaW50IHVpZl9pbml0KHN0cnVjdCB1YmlfZGV2aWNlICp1YmkpCitzdGF0aWMgaW50IHVpZl9pbml0KHN0cnVjdCB1YmlfZGV2aWNlICp1YmksIGludCAqcmVmKQogewogCWludCBpLCBlcnI7CiAJZGV2X3QgZGV2OwogCisJKnJlZiA9IDA7CiAJc3ByaW50Zih1YmktPnViaV9uYW1lLCBVQklfTkFNRV9TVFIgIiVkIiwgdWJpLT51YmlfbnVtKTsKIAogCS8qCkBAIC01MDQsNyArNTAyLDcgQEAKIAkJZ290byBvdXRfdW5yZWc7CiAJfQogCi0JZXJyID0gdWJpX3N5c2ZzX2luaXQodWJpKTsKKwllcnIgPSB1Ymlfc3lzZnNfaW5pdCh1YmksIHJlZik7CiAJaWYgKGVycikKIAkJZ290byBvdXRfc3lzZnM7CiAKQEAgLTUyMiw2ICs1MjAsOCBAQAogb3V0X3ZvbHVtZXM6CiAJa2lsbF92b2x1bWVzKHViaSk7CiBvdXRfc3lzZnM6CisJaWYgKCpyZWYpCisJCWdldF9kZXZpY2UoJnViaS0+ZGV2KTsKIAl1Ymlfc3lzZnNfY2xvc2UodWJpKTsKIAljZGV2X2RlbCgmdWJpLT5jZGV2KTsKIG91dF91bnJlZzoKQEAgLTg3NSw3ICs4NzUsNyBAQAogaW50IHViaV9hdHRhY2hfbXRkX2RldihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHViaV9udW0sIGludCB2aWRfaGRyX29mZnNldCkKIHsKIAlzdHJ1Y3QgdWJpX2RldmljZSAqdWJpOwotCWludCBpLCBlcnIsIGRvX2ZyZWUgPSAxOworCWludCBpLCBlcnIsIHJlZiA9IDA7CiAKIAkvKgogCSAqIENoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSB0aGUgc2FtZSBNVEQgZGV2aWNlIGF0dGFjaGVkLgpAQCAtOTc1LDkgKzk3NSw5IEBACiAJCQlnb3RvIG91dF9kZXRhY2g7CiAJfQogCi0JZXJyID0gdWlmX2luaXQodWJpKTsKKwllcnIgPSB1aWZfaW5pdCh1YmksICZyZWYpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0X25vZnJlZTsKKwkJZ290byBvdXRfZGV0YWNoOwogCiAJdWJpLT5iZ3RfdGhyZWFkID0ga3RocmVhZF9jcmVhdGUodWJpX3RocmVhZCwgdWJpLCB1YmktPmJndF9uYW1lKTsKIAlpZiAoSVNfRVJSKHViaS0+Ymd0X3RocmVhZCkpIHsKQEAgLTEwMjUsMTIgKzEwMjUsOCBAQAogCiBvdXRfdWlmOgogCXVpZl9jbG9zZSh1YmkpOwotb3V0X25vZnJlZToKLQlkb19mcmVlID0gMDsKIG91dF9kZXRhY2g6CiAJdWJpX3dsX2Nsb3NlKHViaSk7Ci0JaWYgKGRvX2ZyZWUpCi0JCWZyZWVfdXNlcl92b2x1bWVzKHViaSk7CiAJZnJlZV9pbnRlcm5hbF92b2x1bWVzKHViaSk7CiAJdmZyZWUodWJpLT52dGJsKTsKIG91dF9mcmVlOgpAQCAtMTAzOSw3ICsxMDM1LDEwIEBACiAjaWZkZWYgQ09ORklHX01URF9VQklfREVCVUdfUEFSQU5PSUQKIAl2ZnJlZSh1YmktPmRiZ19wZWJfYnVmKTsKICNlbmRpZgotCWtmcmVlKHViaSk7CisJaWYgKHJlZikKKwkJcHV0X2RldmljZSgmdWJpLT5kZXYpOworCWVsc2UKKwkJa2ZyZWUodWJpKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMDk2LDcgKzEwOTUsNyBAQAogCiAJLyoKIAkgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIGRldmljZSBpbiBvcmRlciB0byBwcmV2ZW50ICdkZXZfcmVsZWFzZSgpJwotCSAqIGZyb20gZnJlZWluZyBAdWJpIG9iamVjdC4KKwkgKiBmcm9tIGZyZWVpbmcgdGhlIEB1Ymkgb2JqZWN0LgogCSAqLwogCWdldF9kZXZpY2UoJnViaS0+ZGV2KTsKIApAQCAtMTExNiwxMyArMTExNSw1MCBAQAogfQogCiAvKioKLSAqIGZpbmRfbXRkX2RldmljZSAtIG9wZW4gYW4gTVREIGRldmljZSBieSBpdHMgbmFtZSBvciBudW1iZXIuCi0gKiBAbXRkX2RldjogbmFtZSBvciBudW1iZXIgb2YgdGhlIGRldmljZQorICogb3Blbl9tdGRfYnlfY2hkZXYgLSBvcGVuIGFuIE1URCBkZXZpY2UgYnkgaXRzIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBwYXRoLgorICogQG10ZF9kZXY6IE1URCBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUgcGF0aAorICoKKyAqIFRoaXMgaGVscGVyIGZ1bmN0aW9uIG9wZW5zIGFuIE1URCBkZXZpY2UgYnkgaXRzIGNoYXJhY3RlciBub2RlIGRldmljZSBwYXRoLgorICogUmV0dXJucyBNVEQgZGV2aWNlIGRlc2NyaXB0aW9uIG9iamVjdCBpbiBjYXNlIG9mIHN1Y2Nlc3MgYW5kIGEgbmVnYXRpdmUKKyAqIGVycm9yIGNvZGUgaW4gY2FzZSBvZiBmYWlsdXJlLgorICovCitzdGF0aWMgc3RydWN0IG10ZF9pbmZvICogX19pbml0IG9wZW5fbXRkX2J5X2NoZGV2KGNvbnN0IGNoYXIgKm10ZF9kZXYpCit7CisJaW50IGVyciwgbWFqb3IsIG1pbm9yLCBtb2RlOworCXN0cnVjdCBwYXRoIHBhdGg7CisKKwkvKiBQcm9iYWJseSB0aGlzIGlzIGFuIE1URCBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUgcGF0aCAqLworCWVyciA9IGtlcm5fcGF0aChtdGRfZGV2LCBMT09LVVBfRk9MTE9XLCAmcGF0aCk7CisJaWYgKGVycikKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKworCS8qIE1URCBkZXZpY2UgbnVtYmVyIGlzIGRlZmluZWQgYnkgdGhlIG1ham9yIC8gbWlub3IgbnVtYmVycyAqLworCW1ham9yID0gaW1ham9yKHBhdGguZGVudHJ5LT5kX2lub2RlKTsKKwltaW5vciA9IGltaW5vcihwYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CisJbW9kZSA9IHBhdGguZGVudHJ5LT5kX2lub2RlLT5pX21vZGU7CisJcGF0aF9wdXQoJnBhdGgpOworCWlmIChtYWpvciAhPSBNVERfQ0hBUl9NQUpPUiB8fCAhU19JU0NIUihtb2RlKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlpZiAobWlub3IgJiAxKQorCQkvKgorCQkgKiBKdXN0IGRvIG5vdCB0aGluayB0aGUgIi9kZXYvbXRkclgiIGRldmljZXMgc3VwcG9ydCBpcyBuZWVkLAorCQkgKiBzbyBkbyBub3Qgc3VwcG9ydCB0aGVtIHRvIGF2b2lkIGRvaW5nIGV4dHJhIHdvcmsuCisJCSAqLworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCXJldHVybiBnZXRfbXRkX2RldmljZShOVUxMLCBtaW5vciAvIDIpOworfQorCisvKioKKyAqIG9wZW5fbXRkX2RldmljZSAtIG9wZW4gTVREIGRldmljZSBieSBuYW1lLCBjaGFyYWN0ZXIgZGV2aWNlIHBhdGgsIG9yIG51bWJlci4KKyAqIEBtdGRfZGV2OiBuYW1lLCBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUgcGF0aCwgb3IgTVREIGRldmljZSBkZXZpY2UgbnVtYmVyCiAgKgogICogVGhpcyBmdW5jdGlvbiB0cmllcyB0byBvcGVuIGFuZCBNVEQgZGV2aWNlIGRlc2NyaWJlZCBieSBAbXRkX2RldiBzdHJpbmcsCi0gKiB3aGljaCBpcyBmaXJzdCB0cmVhdGVkIGFzIGFuIEFTQ0lJIG51bWJlciwgYW5kIGlmIGl0IGlzIG5vdCB0cnVlLCBpdCBpcwotICogdHJlYXRlZCBhcyBNVEQgZGV2aWNlIG5hbWUuIFJldHVybnMgTVREIGRldmljZSBkZXNjcmlwdGlvbiBvYmplY3QgaW4gY2FzZSBvZgotICogc3VjY2VzcyBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZS4KKyAqIHdoaWNoIGlzIGZpcnN0IHRyZWF0ZWQgYXMgQVNDSUkgTVREIGRldmljZSBudW1iZXIsIGFuZCBpZiBpdCBpcyBub3QgdHJ1ZSwgaXQKKyAqIGlzIHRyZWF0ZWQgYXMgTVREIGRldmljZSBuYW1lLCBhbmQgaWYgdGhhdCBpcyBhbHNvIG5vdCB0cnVlLCBpdCBpcyB0cmVhdGVkCisgKiBhcyBNVEQgY2hhcmFjdGVyIGRldmljZSBub2RlIHBhdGguIFJldHVybnMgTVREIGRldmljZSBkZXNjcmlwdGlvbiBvYmplY3QgaW4KKyAqIGNhc2Ugb2Ygc3VjY2VzcyBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZS4KICAqLwogc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqIF9faW5pdCBvcGVuX210ZF9kZXZpY2UoY29uc3QgY2hhciAqbXRkX2RldikKIHsKQEAgLTExMzcsNiArMTE3Myw5IEBACiAJCSAqIE1URCBkZXZpY2UgbmFtZS4KIAkJICovCiAJCW10ZCA9IGdldF9tdGRfZGV2aWNlX25tKG10ZF9kZXYpOworCQlpZiAoSVNfRVJSKG10ZCkgJiYgUFRSX0VSUihtdGQpID09IC1FTk9ERVYpCisJCQkvKiBQcm9iYWJseSB0aGlzIGlzIGFuIE1URCBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUgcGF0aCAqLworCQkJbXRkID0gb3Blbl9tdGRfYnlfY2hkZXYobXRkX2Rldik7CiAJfSBlbHNlCiAJCW10ZCA9IGdldF9tdGRfZGV2aWNlKE5VTEwsIG10ZF9udW0pOwogCkBAIC0xMzUyLDEzICsxMzkxLDE1IEBACiAKIG1vZHVsZV9wYXJhbV9jYWxsKG10ZCwgdWJpX210ZF9wYXJhbV9wYXJzZSwgTlVMTCwgTlVMTCwgMDAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobXRkLCAiTVREIGRldmljZXMgdG8gYXR0YWNoLiBQYXJhbWV0ZXIgZm9ybWF0OiAiCi0JCSAgICAgICJtdGQ9PG5hbWV8bnVtPlssPHZpZF9oZHJfb2Zmcz5dLlxuIgorCQkgICAgICAibXRkPTxuYW1lfG51bXxwYXRoPlssPHZpZF9oZHJfb2Zmcz5dLlxuIgogCQkgICAgICAiTXVsdGlwbGUgXCJtdGRcIiBwYXJhbWV0ZXJzIG1heSBiZSBzcGVjaWZpZWQuXG4iCi0JCSAgICAgICJNVEQgZGV2aWNlcyBtYXkgYmUgc3BlY2lmaWVkIGJ5IHRoZWlyIG51bWJlciBvciBuYW1lLlxuIgorCQkgICAgICAiTVREIGRldmljZXMgbWF5IGJlIHNwZWNpZmllZCBieSB0aGVpciBudW1iZXIsIG5hbWUsIG9yICIKKwkJICAgICAgInBhdGggdG8gdGhlIE1URCBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUuXG4iCiAJCSAgICAgICJPcHRpb25hbCBcInZpZF9oZHJfb2Zmc1wiIHBhcmFtZXRlciBzcGVjaWZpZXMgVUJJIFZJRCAiCi0JCSAgICAgICJoZWFkZXIgcG9zaXRpb24gYW5kIGRhdGEgc3RhcnRpbmcgcG9zaXRpb24gdG8gYmUgdXNlZCAiCi0JCSAgICAgICJieSBVQkkuXG4iCi0JCSAgICAgICJFeGFtcGxlOiBtdGQ9Y29udGVudCwxOTg0IG10ZD00IC0gYXR0YWNoIE1URCBkZXZpY2UiCisJCSAgICAgICJoZWFkZXIgcG9zaXRpb24gdG8gYmUgdXNlZCBieSBVQkkuXG4iCisJCSAgICAgICJFeGFtcGxlIDE6IG10ZD0vZGV2L210ZDAgLSBhdHRhY2ggTVREIGRldmljZSAiCisJCSAgICAgICIvZGV2L210ZDAuXG4iCisJCSAgICAgICJFeGFtcGxlIDI6IG10ZD1jb250ZW50LDE5ODQgbXRkPTQgLSBhdHRhY2ggTVREIGRldmljZSAiCiAJCSAgICAgICJ3aXRoIG5hbWUgXCJjb250ZW50XCIgdXNpbmcgVklEIGhlYWRlciBvZmZzZXQgMTk4NCwgYW5kICIKIAkJICAgICAgIk1URCBkZXZpY2UgbnVtYmVyIDQgd2l0aCBkZWZhdWx0IFZJRCBoZWFkZXIgb2Zmc2V0LiIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91YmkvZGVidWcuaCBiL2RyaXZlcnMvbXRkL3ViaS9kZWJ1Zy5oCmluZGV4IGYzMGJjYjMuLjE3YTEwNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9kZWJ1Zy5oCkBAIC05Niw4ICs5NiwxMSBAQAogCiAjaWZkZWYgQ09ORklHX01URF9VQklfREVCVUdfUEFSQU5PSUQKIGludCB1YmlfZGJnX2NoZWNrX2FsbF9mZihzdHJ1Y3QgdWJpX2RldmljZSAqdWJpLCBpbnQgcG51bSwgaW50IG9mZnNldCwgaW50IGxlbik7CitpbnQgdWJpX2RiZ19jaGVja193cml0ZShzdHJ1Y3QgdWJpX2RldmljZSAqdWJpLCBjb25zdCB2b2lkICpidWYsIGludCBwbnVtLAorCQkJaW50IG9mZnNldCwgaW50IGxlbik7CiAjZWxzZQogI2RlZmluZSB1YmlfZGJnX2NoZWNrX2FsbF9mZih1YmksIHBudW0sIG9mZnNldCwgbGVuKSAwCisjZGVmaW5lIHViaV9kYmdfY2hlY2tfd3JpdGUodWJpLCBidWYsIHBudW0sIG9mZnNldCwgbGVuKSAwCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19NVERfVUJJX0RFQlVHX0RJU0FCTEVfQkdUCkBAIC0xNzYsNiArMTc5LDcgQEAKICNkZWZpbmUgdWJpX2RiZ19pc193cml0ZV9mYWlsdXJlKCkgMAogI2RlZmluZSB1YmlfZGJnX2lzX2VyYXNlX2ZhaWx1cmUoKSAwCiAjZGVmaW5lIHViaV9kYmdfY2hlY2tfYWxsX2ZmKHViaSwgcG51bSwgb2Zmc2V0LCBsZW4pIDAKKyNkZWZpbmUgdWJpX2RiZ19jaGVja193cml0ZSh1YmksIGJ1ZiwgcG51bSwgb2Zmc2V0LCBsZW4pIDAKIAogI2VuZGlmIC8qICFDT05GSUdfTVREX1VCSV9ERUJVRyAqLwogI2VuZGlmIC8qICFfX1VCSV9ERUJVR19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9pby5jIGIvZHJpdmVycy9tdGQvdWJpL2lvLmMKaW5kZXggOGFhNTFlNy4uYjRlY2M4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL2lvLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL2lvLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCiAJZXJyID0gcGFyYW5vaWRfY2hlY2tfbm90X2JhZCh1YmksIHBudW0pOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnIgPiAwID8gLUVJTlZBTCA6IGVycjsKKwkJcmV0dXJuIGVycjsKIAogCWFkZHIgPSAobG9mZl90KXBudW0gKiB1YmktPnBlYl9zaXplICsgb2Zmc2V0OwogcmV0cnk6CkBAIC0yMzYsMTIgKzIzNiwxMiBAQAogCiAJZXJyID0gcGFyYW5vaWRfY2hlY2tfbm90X2JhZCh1YmksIHBudW0pOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnIgPiAwID8gLUVJTlZBTCA6IGVycjsKKwkJcmV0dXJuIGVycjsKIAogCS8qIFRoZSBhcmVhIHdlIGFyZSB3cml0aW5nIHRvIGhhcyB0byBjb250YWluIGFsbCAweEZGIGJ5dGVzICovCiAJZXJyID0gdWJpX2RiZ19jaGVja19hbGxfZmYodWJpLCBwbnVtLCBvZmZzZXQsIGxlbik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVyciA+IDAgPyAtRUlOVkFMIDogZXJyOworCQlyZXR1cm4gZXJyOwogCiAJaWYgKG9mZnNldCA+PSB1YmktPmxlYl9zdGFydCkgewogCQkvKgpAQCAtMjUwLDEwICsyNTAsMTAgQEAKIAkJICovCiAJCWVyciA9IHBhcmFub2lkX2NoZWNrX3BlYl9lY19oZHIodWJpLCBwbnVtKTsKIAkJaWYgKGVycikKLQkJCXJldHVybiBlcnIgPiAwID8gLUVJTlZBTCA6IGVycjsKKwkJCXJldHVybiBlcnI7CiAJCWVyciA9IHBhcmFub2lkX2NoZWNrX3BlYl92aWRfaGRyKHViaSwgcG51bSk7CiAJCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyID4gMCA/IC1FSU5WQUwgOiBlcnI7CisJCQlyZXR1cm4gZXJyOwogCX0KIAogCWlmICh1YmlfZGJnX2lzX3dyaXRlX2ZhaWx1cmUoKSkgewpAQCAtMjczLDYgKzI3MywyMSBAQAogCX0gZWxzZQogCQl1YmlfYXNzZXJ0KHdyaXR0ZW4gPT0gbGVuKTsKIAorCWlmICghZXJyKSB7CisJCWVyciA9IHViaV9kYmdfY2hlY2tfd3JpdGUodWJpLCBidWYsIHBudW0sIG9mZnNldCwgbGVuKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJLyoKKwkJICogU2luY2Ugd2UgYWx3YXlzIHdyaXRlIHNlcXVlbnRpYWxseSwgdGhlIHJlc3Qgb2YgdGhlIFBFQiBoYXMKKwkJICogdG8gY29udGFpbiBvbmx5IDB4RkYgYnl0ZXMuCisJCSAqLworCQlvZmZzZXQgKz0gbGVuOworCQlsZW4gPSB1YmktPnBlYl9zaXplIC0gb2Zmc2V0OworCQlpZiAobGVuKQorCQkJZXJyID0gdWJpX2RiZ19jaGVja19hbGxfZmYodWJpLCBwbnVtLCBvZmZzZXQsIGxlbik7CisJfQorCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzQ4LDcgKzM2Myw3IEBACiAKIAllcnIgPSB1YmlfZGJnX2NoZWNrX2FsbF9mZih1YmksIHBudW0sIDAsIHViaS0+cGViX3NpemUpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnIgPiAwID8gLUVJTlZBTCA6IGVycjsKKwkJcmV0dXJuIGVycjsKIAogCWlmICh1YmlfZGJnX2lzX2VyYXNlX2ZhaWx1cmUoKSAmJiAhZXJyKSB7CiAJCWRiZ19lcnIoImNhbm5vdCBlcmFzZSBQRUIgJWQgKGVtdWxhdGVkKSIsIHBudW0pOwpAQCAtNTQyLDcgKzU1Nyw3IEBACiAKIAllcnIgPSBwYXJhbm9pZF9jaGVja19ub3RfYmFkKHViaSwgcG51bSk7CiAJaWYgKGVyciAhPSAwKQotCQlyZXR1cm4gZXJyID4gMCA/IC1FSU5WQUwgOiBlcnI7CisJCXJldHVybiBlcnI7CiAKIAlpZiAodWJpLT5yb19tb2RlKSB7CiAJCXViaV9lcnIoInJlYWQtb25seSBtb2RlIik7CkBAIC04MTksNyArODM0LDcgQEAKIAogCWVyciA9IHBhcmFub2lkX2NoZWNrX2VjX2hkcih1YmksIHBudW0sIGVjX2hkcik7CiAJaWYgKGVycikKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBlcnI7CiAKIAllcnIgPSB1YmlfaW9fd3JpdGUodWJpLCBlY19oZHIsIHBudW0sIDAsIHViaS0+ZWNfaGRyX2Fsc2l6ZSk7CiAJcmV0dXJuIGVycjsKQEAgLTEwODMsNyArMTA5OCw3IEBACiAKIAllcnIgPSBwYXJhbm9pZF9jaGVja19wZWJfZWNfaGRyKHViaSwgcG51bSk7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVyciA+IDAgPyAtRUlOVkFMIDogZXJyOworCQlyZXR1cm4gZXJyOwogCiAJdmlkX2hkci0+bWFnaWMgPSBjcHVfdG9fYmUzMihVQklfVklEX0hEUl9NQUdJQyk7CiAJdmlkX2hkci0+dmVyc2lvbiA9IFVCSV9WRVJTSU9OOwpAQCAtMTA5Miw3ICsxMTA3LDcgQEAKIAogCWVyciA9IHBhcmFub2lkX2NoZWNrX3ZpZF9oZHIodWJpLCBwbnVtLCB2aWRfaGRyKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIGVycjsKIAogCXAgPSAoY2hhciAqKXZpZF9oZHIgLSB1YmktPnZpZF9oZHJfc2hpZnQ7CiAJZXJyID0gdWJpX2lvX3dyaXRlKHViaSwgcCwgcG51bSwgdWJpLT52aWRfaGRyX2Fsb2Zmc2V0LApAQCAtMTEwNyw4ICsxMTIyLDggQEAKICAqIEB1Ymk6IFVCSSBkZXZpY2UgZGVzY3JpcHRpb24gb2JqZWN0CiAgKiBAcG51bTogcGh5c2ljYWwgZXJhc2VibG9jayBudW1iZXIgdG8gY2hlY2sKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgemVybyBpZiB0aGUgcGh5c2ljYWwgZXJhc2VibG9jayBpcyBnb29kLCBhIHBvc2l0aXZlCi0gKiBudW1iZXIgaWYgaXQgaXMgYmFkIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgemVybyBpZiB0aGUgcGh5c2ljYWwgZXJhc2VibG9jayBpcyBnb29kLCAlLUVJTlZBTCBpZgorICogaXQgaXMgYmFkIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAgKi8KIHN0YXRpYyBpbnQgcGFyYW5vaWRfY2hlY2tfbm90X2JhZChjb25zdCBzdHJ1Y3QgdWJpX2RldmljZSAqdWJpLCBpbnQgcG51bSkKIHsKQEAgLTExMjAsNyArMTEzNSw3IEBACiAKIAl1YmlfZXJyKCJwYXJhbm9pZCBjaGVjayBmYWlsZWQgZm9yIFBFQiAlZCIsIHBudW0pOwogCXViaV9kYmdfZHVtcF9zdGFjaygpOwotCXJldHVybiBlcnI7CisJcmV0dXJuIGVyciA+IDAgPyAtRUlOVkFMIDogZXJyOwogfQogCiAvKioKQEAgLTExMzAsNyArMTE0NSw3IEBACiAgKiBAZWNfaGRyOiB0aGUgZXJhc2UgY291bnRlciBoZWFkZXIgdG8gY2hlY2sKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgemVybyBpZiB0aGUgZXJhc2UgY291bnRlciBoZWFkZXIgY29udGFpbnMgdmFsaWQKLSAqIHZhbHVlcywgYW5kICUxIGlmIG5vdC4KKyAqIHZhbHVlcywgYW5kICUtRUlOVkFMIGlmIG5vdC4KICAqLwogc3RhdGljIGludCBwYXJhbm9pZF9jaGVja19lY19oZHIoY29uc3Qgc3RydWN0IHViaV9kZXZpY2UgKnViaSwgaW50IHBudW0sCiAJCQkJIGNvbnN0IHN0cnVjdCB1YmlfZWNfaGRyICplY19oZHIpCkBAIC0xMTU2LDcgKzExNzEsNyBAQAogZmFpbDoKIAl1YmlfZGJnX2R1bXBfZWNfaGRyKGVjX2hkcik7CiAJdWJpX2RiZ19kdW1wX3N0YWNrKCk7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIC8qKgpAQCAtMTE2NCw4ICsxMTc5LDggQEAKICAqIEB1Ymk6IFVCSSBkZXZpY2UgZGVzY3JpcHRpb24gb2JqZWN0CiAgKiBAcG51bTogdGhlIHBoeXNpY2FsIGVyYXNlYmxvY2sgbnVtYmVyIHRvIGNoZWNrCiAgKgotICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHplcm8gaWYgdGhlIGVyYXNlIGNvdW50ZXIgaGVhZGVyIGlzIGFsbCByaWdodCwgJTEgaWYKLSAqIG5vdCwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIGlmIHRoZSBlcmFzZSBjb3VudGVyIGhlYWRlciBpcyBhbGwgcmlnaHQgYW5kIGFuZAorICogYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIG5vdCBvciBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICAqLwogc3RhdGljIGludCBwYXJhbm9pZF9jaGVja19wZWJfZWNfaGRyKGNvbnN0IHN0cnVjdCB1YmlfZGV2aWNlICp1YmksIGludCBwbnVtKQogewpAQCAtMTE4OCw3ICsxMjAzLDcgQEAKIAkJdWJpX2VycigicGFyYW5vaWQgY2hlY2sgZmFpbGVkIGZvciBQRUIgJWQiLCBwbnVtKTsKIAkJdWJpX2RiZ19kdW1wX2VjX2hkcihlY19oZHIpOwogCQl1YmlfZGJnX2R1bXBfc3RhY2soKTsKLQkJZXJyID0gMTsKKwkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBleGl0OwogCX0KIApAQCAtMTIwNiw3ICsxMjIxLDcgQEAKICAqIEB2aWRfaGRyOiB0aGUgdm9sdW1lIGlkZW50aWZpZXIgaGVhZGVyIHRvIGNoZWNrCiAgKgogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHplcm8gaWYgdGhlIHZvbHVtZSBpZGVudGlmaWVyIGhlYWRlciBpcyBhbGwgcmlnaHQsIGFuZAotICogJTEgaWYgbm90LgorICogJS1FSU5WQUwgaWYgbm90LgogICovCiBzdGF0aWMgaW50IHBhcmFub2lkX2NoZWNrX3ZpZF9oZHIoY29uc3Qgc3RydWN0IHViaV9kZXZpY2UgKnViaSwgaW50IHBudW0sCiAJCQkJICBjb25zdCBzdHJ1Y3QgdWJpX3ZpZF9oZHIgKnZpZF9oZHIpCkBAIC0xMjMzLDcgKzEyNDgsNyBAQAogCXViaV9lcnIoInBhcmFub2lkIGNoZWNrIGZhaWxlZCBmb3IgUEVCICVkIiwgcG51bSk7CiAJdWJpX2RiZ19kdW1wX3ZpZF9oZHIodmlkX2hkcik7CiAJdWJpX2RiZ19kdW1wX3N0YWNrKCk7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIC1FSU5WQUw7CiAKIH0KIApAQCAtMTI0Myw3ICsxMjU4LDcgQEAKICAqIEBwbnVtOiB0aGUgcGh5c2ljYWwgZXJhc2VibG9jayBudW1iZXIgdG8gY2hlY2sKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgemVybyBpZiB0aGUgdm9sdW1lIGlkZW50aWZpZXIgaGVhZGVyIGlzIGFsbCByaWdodCwKLSAqICUxIGlmIG5vdCwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKyAqIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgbm90IG9yIGlmIGFuIGVycm9yIG9jY3VycmVkLgogICovCiBzdGF0aWMgaW50IHBhcmFub2lkX2NoZWNrX3BlYl92aWRfaGRyKGNvbnN0IHN0cnVjdCB1YmlfZGV2aWNlICp1YmksIGludCBwbnVtKQogewpAQCAtMTI3MCw3ICsxMjg1LDcgQEAKIAkJdWJpX2VycigicGFyYW5vaWQgY2hlY2sgZmFpbGVkIGZvciBQRUIgJWQiLCBwbnVtKTsKIAkJdWJpX2RiZ19kdW1wX3ZpZF9oZHIodmlkX2hkcik7CiAJCXViaV9kYmdfZHVtcF9zdGFjaygpOwotCQllcnIgPSAxOworCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIGV4aXQ7CiAJfQogCkBAIC0xMjgyLDYgKzEyOTcsNjEgQEAKIH0KIAogLyoqCisgKiB1YmlfZGJnX2NoZWNrX3dyaXRlIC0gbWFrZSBzdXJlIHdyaXRlIHN1Y2NlZWRlZC4KKyAqIEB1Ymk6IFVCSSBkZXZpY2UgZGVzY3JpcHRpb24gb2JqZWN0CisgKiBAYnVmOiBidWZmZXIgd2l0aCBkYXRhIHdoaWNoIHdlcmUgd3JpdHRlbgorICogQHBudW06IHBoeXNpY2FsIGVyYXNlYmxvY2sgbnVtYmVyIHRoZSBkYXRhIHdlcmUgd3JpdHRlbiB0bworICogQG9mZnNldDogb2Zmc2V0IHdpdGhpbiB0aGUgcGh5c2ljYWwgZXJhc2VibG9jayB0aGUgZGF0YSB3ZXJlIHdyaXR0ZW4gdG8KKyAqIEBsZW46IGhvdyBtYW55IGJ5dGVzIHdlcmUgd3JpdHRlbgorICoKKyAqIFRoaXMgZnVuY3Rpb25zIHJlYWRzIGRhdGEgd2hpY2ggd2VyZSByZWNlbnRseSB3cml0dGVuIGFuZCBjb21wYXJlcyBpdCB3aXRoCisgKiB0aGUgb3JpZ2luYWwgZGF0YSBidWZmZXIgLSB0aGUgZGF0YSBoYXZlIHRvIG1hdGNoLiBSZXR1cm5zIHplcm8gaWYgdGhlIGRhdGEKKyAqIG1hdGNoIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgbm90IG9yIGluIGNhc2Ugb2YgZmFpbHVyZS4KKyAqLworaW50IHViaV9kYmdfY2hlY2tfd3JpdGUoc3RydWN0IHViaV9kZXZpY2UgKnViaSwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgcG51bSwKKwkJCWludCBvZmZzZXQsIGludCBsZW4pCit7CisJaW50IGVyciwgaTsKKworCW11dGV4X2xvY2soJnViaS0+ZGJnX2J1Zl9tdXRleCk7CisJZXJyID0gdWJpX2lvX3JlYWQodWJpLCB1YmktPmRiZ19wZWJfYnVmLCBwbnVtLCBvZmZzZXQsIGxlbik7CisJaWYgKGVycikKKwkJZ290byBvdXRfdW5sb2NrOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCXVpbnQ4X3QgYyA9ICgodWludDhfdCAqKWJ1ZilbaV07CisJCXVpbnQ4X3QgYzEgPSAoKHVpbnQ4X3QgKil1YmktPmRiZ19wZWJfYnVmKVtpXTsKKwkJaW50IGR1bXBfbGVuOworCisJCWlmIChjID09IGMxKQorCQkJY29udGludWU7CisKKwkJdWJpX2VycigicGFyYW5vaWQgY2hlY2sgZmFpbGVkIGZvciBQRUIgJWQ6JWQsIGxlbiAlZCIsCisJCQlwbnVtLCBvZmZzZXQsIGxlbik7CisJCXViaV9tc2coImRhdGEgZGlmZmVyIGF0IHBvc2l0aW9uICVkIiwgaSk7CisJCWR1bXBfbGVuID0gbWF4X3QoaW50LCAxMjgsIGxlbiAtIGkpOworCQl1YmlfbXNnKCJoZXggZHVtcCBvZiB0aGUgb3JpZ2luYWwgYnVmZmVyIGZyb20gJWQgdG8gJWQiLAorCQkJaSwgaSArIGR1bXBfbGVuKTsKKwkJcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgIiIsIERVTVBfUFJFRklYX09GRlNFVCwgMzIsIDEsCisJCQkgICAgICAgYnVmICsgaSwgZHVtcF9sZW4sIDEpOworCQl1YmlfbXNnKCJoZXggZHVtcCBvZiB0aGUgcmVhZCBidWZmZXIgZnJvbSAlZCB0byAlZCIsCisJCQlpLCBpICsgZHVtcF9sZW4pOworCQlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCAzMiwgMSwKKwkJCSAgICAgICB1YmktPmRiZ19wZWJfYnVmICsgaSwgZHVtcF9sZW4sIDEpOworCQl1YmlfZGJnX2R1bXBfc3RhY2soKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwltdXRleF91bmxvY2soJnViaS0+ZGJnX2J1Zl9tdXRleCk7CisKKwlyZXR1cm4gMDsKKworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJnViaS0+ZGJnX2J1Zl9tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKworLyoqCiAgKiB1YmlfZGJnX2NoZWNrX2FsbF9mZiAtIGNoZWNrIHRoYXQgYSByZWdpb24gb2YgZmxhc2ggaXMgZW1wdHkuCiAgKiBAdWJpOiBVQkkgZGV2aWNlIGRlc2NyaXB0aW9uIG9iamVjdAogICogQHBudW06IHRoZSBwaHlzaWNhbCBlcmFzZWJsb2NrIG51bWJlciB0byBjaGVjawpAQCAtMTI4OSw4ICsxMzU5LDggQEAKICAqIEBsZW46IHRoZSBsZW5ndGggb2YgdGhlIHJlZ2lvbiB0byBjaGVjawogICoKICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIGlmIG9ubHkgMHhGRiBieXRlcyBhcmUgcHJlc2VudCBhdCBvZmZzZXQKLSAqIEBvZmZzZXQgb2YgdGhlIHBoeXNpY2FsIGVyYXNlYmxvY2sgQHBudW0sICUxIGlmIG5vdCwgYW5kIGEgbmVnYXRpdmUgZXJyb3IKLSAqIGNvZGUgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisgKiBAb2Zmc2V0IG9mIHRoZSBwaHlzaWNhbCBlcmFzZWJsb2NrIEBwbnVtLCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIG5vdAorICogb3IgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAgKi8KIGludCB1YmlfZGJnX2NoZWNrX2FsbF9mZihzdHJ1Y3QgdWJpX2RldmljZSAqdWJpLCBpbnQgcG51bSwgaW50IG9mZnNldCwgaW50IGxlbikKIHsKQEAgLTEzMjEsNyArMTM5MSw3IEBACiAJdWJpX21zZygiaGV4IGR1bXAgb2YgdGhlICVkLSVkIHJlZ2lvbiIsIG9mZnNldCwgb2Zmc2V0ICsgbGVuKTsKIAlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCAzMiwgMSwKIAkJICAgICAgIHViaS0+ZGJnX3BlYl9idWYsIGxlbiwgMSk7Ci0JZXJyID0gMTsKKwllcnIgPSAtRUlOVkFMOwogZXJyb3I6CiAJdWJpX2RiZ19kdW1wX3N0YWNrKCk7CiAJbXV0ZXhfdW5sb2NrKCZ1YmktPmRiZ19idWZfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL3NjYW4uYyBiL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMKaW5kZXggOTBhZjYxYS4uNTk0MTg0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL3NjYW4uYworKysgYi9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jCkBAIC05NzQsMTEgKzk3NCw4IEBACiAJCQlzZWItPmVjID0gc2ktPm1lYW5fZWM7CiAKIAllcnIgPSBwYXJhbm9pZF9jaGVja19zaSh1YmksIHNpKTsKLQlpZiAoZXJyKSB7Ci0JCWlmIChlcnIgPiAwKQotCQkJZXJyID0gLUVJTlZBTDsKKwlpZiAoZXJyKQogCQlnb3RvIG91dF92aWRoOwotCX0KIAogCXViaV9mcmVlX3ZpZF9oZHIodWJpLCB2aWRoKTsKIAlrZnJlZShlY2gpOwpAQCAtMTA4Niw4ICsxMDgzLDggQEAKICAqIEB1Ymk6IFVCSSBkZXZpY2UgZGVzY3JpcHRpb24gb2JqZWN0CiAgKiBAc2k6IHNjYW5uaW5nIGluZm9ybWF0aW9uCiAgKgotICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHplcm8gaWYgdGhlIHNjYW5uaW5nIGluZm9ybWF0aW9uIGlzIGFsbCByaWdodCwgJTEgaWYKLSAqIG5vdCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIGFuIGVycm9yIG9jY3VycmVkLgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHplcm8gaWYgdGhlIHNjYW5uaW5nIGluZm9ybWF0aW9uIGlzIGFsbCByaWdodCwgYW5kIGEKKyAqIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgbm90IG9yIGlmIGFuIGVycm9yIG9jY3VycmVkLgogICovCiBzdGF0aWMgaW50IHBhcmFub2lkX2NoZWNrX3NpKHN0cnVjdCB1YmlfZGV2aWNlICp1YmksIHN0cnVjdCB1Ymlfc2Nhbl9pbmZvICpzaSkKIHsKQEAgLTEzNDYsNyArMTM0Myw3IEBACiAKIG91dDoKIAl1YmlfZGJnX2R1bXBfc3RhY2soKTsKLQlyZXR1cm4gMTsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogI2VuZGlmIC8qIENPTkZJR19NVERfVUJJX0RFQlVHX1BBUkFOT0lEICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91Ymkvd2wuYyBiL2RyaXZlcnMvbXRkL3ViaS93bC5jCmluZGV4IDYwMGM3MjIuLmY2NGRkYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS93bC5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS93bC5jCkBAIC00NjQsNyArNDY0LDcgQEAKIAkJCQkgICB1YmktPnBlYl9zaXplIC0gdWJpLT52aWRfaGRyX2Fsb2Zmc2V0KTsKIAlpZiAoZXJyKSB7CiAJCXViaV9lcnIoIm5ldyBQRUIgJWQgZG9lcyBub3QgY29udGFpbiBhbGwgMHhGRiBieXRlcyIsIGUtPnBudW0pOwotCQlyZXR1cm4gZXJyID4gMCA/IC1FSU5WQUwgOiBlcnI7CisJCXJldHVybiBlcnI7CiAJfQogCiAJcmV0dXJuIGUtPnBudW07CkBAIC01MTMsNyArNTEzLDcgQEAKIAlkYmdfd2woImVyYXNlIFBFQiAlZCwgb2xkIEVDICVsbHUiLCBlLT5wbnVtLCBlYyk7CiAKIAllcnIgPSBwYXJhbm9pZF9jaGVja19lYyh1YmksIGUtPnBudW0sIGUtPmVjKTsKLQlpZiAoZXJyID4gMCkKKwlpZiAoZXJyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVjX2hkciA9IGt6YWxsb2ModWJpLT5lY19oZHJfYWxzaXplLCBHRlBfTk9GUyk7CkBAIC0xNTcyLDggKzE1NzIsNyBAQAogICogQGVjOiB0aGUgZXJhc2UgY291bnRlciB0byBjaGVjawogICoKICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIGlmIHRoZSBlcmFzZSBjb3VudGVyIG9mIHBoeXNpY2FsIGVyYXNlYmxvY2sgQHBudW0KLSAqIGlzIGVxdWl2YWxlbnQgdG8gQGVjLCAlMSBpZiBub3QsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgYW4gZXJyb3IKLSAqIG9jY3VycmVkLgorICogaXMgZXF1aXZhbGVudCB0byBAZWMsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgbm90IG9yIGlmIGFuIGVycm9yIG9jY3VycmVkLgogICovCiBzdGF0aWMgaW50IHBhcmFub2lkX2NoZWNrX2VjKHN0cnVjdCB1YmlfZGV2aWNlICp1YmksIGludCBwbnVtLCBpbnQgZWMpCiB7CkBAIC0xNjExLDggKzE2MTAsOCBAQAogICogQGU6IHRoZSB3ZWFyLWxldmVsaW5nIGVudHJ5IHRvIGNoZWNrCiAgKiBAcm9vdDogdGhlIHJvb3Qgb2YgdGhlIHRyZWUKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgemVybyBpZiBAZSBpcyBpbiB0aGUgQHJvb3QgUkItdHJlZSBhbmQgJTEgaWYgaXQgaXMKLSAqIG5vdC4KKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIGlmIEBlIGlzIGluIHRoZSBAcm9vdCBSQi10cmVlIGFuZCAlLUVJTlZBTCBpZiBpdAorICogaXMgbm90LgogICovCiBzdGF0aWMgaW50IHBhcmFub2lkX2NoZWNrX2luX3dsX3RyZWUoc3RydWN0IHViaV93bF9lbnRyeSAqZSwKIAkJCQkgICAgIHN0cnVjdCByYl9yb290ICpyb290KQpAQCAtMTYyMyw3ICsxNjIyLDcgQEAKIAl1YmlfZXJyKCJwYXJhbm9pZCBjaGVjayBmYWlsZWQgZm9yIFBFQiAlZCwgRUMgJWQsIFJCLXRyZWUgJXAgIiwKIAkJZS0+cG51bSwgZS0+ZWMsIHJvb3QpOwogCXViaV9kYmdfZHVtcF9zdGFjaygpOwotCXJldHVybiAxOworCXJldHVybiAtRUlOVkFMOwogfQogCiAvKioKQEAgLTE2MzIsNyArMTYzMSw3IEBACiAgKiBAdWJpOiBVQkkgZGV2aWNlIGRlc2NyaXB0aW9uIG9iamVjdAogICogQGU6IHRoZSB3ZWFyLWxldmVsaW5nIGVudHJ5IHRvIGNoZWNrCiAgKgotICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHplcm8gaWYgQGUgaXMgaW4gQHViaS0+cHEgYW5kICUxIGlmIGl0IGlzIG5vdC4KKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIGlmIEBlIGlzIGluIEB1YmktPnBxIGFuZCAlLUVJTlZBTCBpZiBpdCBpcyBub3QuCiAgKi8KIHN0YXRpYyBpbnQgcGFyYW5vaWRfY2hlY2tfaW5fcHEoc3RydWN0IHViaV9kZXZpY2UgKnViaSwgc3RydWN0IHViaV93bF9lbnRyeSAqZSkKIHsKQEAgLTE2NDcsNiArMTY0Niw2IEBACiAJdWJpX2VycigicGFyYW5vaWQgY2hlY2sgZmFpbGVkIGZvciBQRUIgJWQsIEVDICVkLCBQcm90ZWN0IHF1ZXVlIiwKIAkJZS0+cG51bSwgZS0+ZWMpOwogCXViaV9kYmdfZHVtcF9zdGFjaygpOwotCXJldHVybiAxOworCXJldHVybiAtRUlOVkFMOwogfQogI2VuZGlmIC8qIENPTkZJR19NVERfVUJJX0RFQlVHX1BBUkFOT0lEICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKaW5kZXggNmFhNTI2ZS4uNjFhN2I0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwpAQCAtOTk4LDcgKzk5OCw3IEBACiAJfQogCiAJLyogTmVlZCB0byByZXZlcnNlIHRoZSBiaXQgbWFwcyBhcyAgYml0X21hcCdzIE1TQiBpcyBxMAotCSAqIGJ1dCwgZm9yX2VhY2hfYml0IHBhcnNlcyBmcm9tIHJpZ2h0IHRvIGxlZnQsIHdoaWNoCisJICogYnV0LCBmb3JfZWFjaF9zZXRfYml0IHBhcnNlcyBmcm9tIHJpZ2h0IHRvIGxlZnQsIHdoaWNoCiAJICogYmFzaWNhbGx5IHJldmVyc2VzIHRoZSBxdWV1ZSBudW1iZXJzICovCiAJZm9yIChpID0gMDsgaTwgcHJpdi0+bnVtX2dycHM7IGkrKykgewogCQlwcml2LT5nZmFyZ3JwW2ldLnR4X2JpdF9tYXAgPSByZXZlcnNlX2JpdG1hcCgKQEAgLTEwMTEsNyArMTAxMSw3IEBACiAJICogYWxzbyBhc3NpZ24gcXVldWVzIHRvIGdyb3VwcyAqLwogCWZvciAoZ3JwX2lkeCA9IDA7IGdycF9pZHggPCBwcml2LT5udW1fZ3JwczsgZ3JwX2lkeCsrKSB7CiAJCXByaXYtPmdmYXJncnBbZ3JwX2lkeF0ubnVtX3J4X3F1ZXVlcyA9IDB4MDsKLQkJZm9yX2VhY2hfYml0KGksICZwcml2LT5nZmFyZ3JwW2dycF9pZHhdLnJ4X2JpdF9tYXAsCisJCWZvcl9lYWNoX3NldF9iaXQoaSwgJnByaXYtPmdmYXJncnBbZ3JwX2lkeF0ucnhfYml0X21hcCwKIAkJCQlwcml2LT5udW1fcnhfcXVldWVzKSB7CiAJCQlwcml2LT5nZmFyZ3JwW2dycF9pZHhdLm51bV9yeF9xdWV1ZXMrKzsKIAkJCXByaXYtPnJ4X3F1ZXVlW2ldLT5ncnAgPSAmcHJpdi0+Z2ZhcmdycFtncnBfaWR4XTsKQEAgLTEwMTksNyArMTAxOSw3IEBACiAJCQlycXVldWUgPSBycXVldWUgfCAoKFJRVUVVRV9FTjAgfCBSUVVFVUVfRVgwKSA+PiBpKTsKIAkJfQogCQlwcml2LT5nZmFyZ3JwW2dycF9pZHhdLm51bV90eF9xdWV1ZXMgPSAweDA7Ci0JCWZvcl9lYWNoX2JpdCAoaSwgJnByaXYtPmdmYXJncnBbZ3JwX2lkeF0udHhfYml0X21hcCwKKwkJZm9yX2VhY2hfc2V0X2JpdChpLCAmcHJpdi0+Z2ZhcmdycFtncnBfaWR4XS50eF9iaXRfbWFwLAogCQkJCXByaXYtPm51bV90eF9xdWV1ZXMpIHsKIAkJCXByaXYtPmdmYXJncnBbZ3JwX2lkeF0ubnVtX3R4X3F1ZXVlcysrOwogCQkJcHJpdi0+dHhfcXVldWVbaV0tPmdycCA9ICZwcml2LT5nZmFyZ3JwW2dycF9pZHhdOwpAQCAtMTcwOSw3ICsxNzA5LDcgQEAKIAogCWlmIChwcml2LT5tb2RlID09IE1RX01HX01PREUpIHsKIAkJYmFkZHIgPSAmcmVncy0+dHhpYzA7Ci0JCWZvcl9lYWNoX2JpdCAoaSwgJnR4X21hc2ssIHByaXYtPm51bV90eF9xdWV1ZXMpIHsKKwkJZm9yX2VhY2hfc2V0X2JpdChpLCAmdHhfbWFzaywgcHJpdi0+bnVtX3R4X3F1ZXVlcykgewogCQkJaWYgKGxpa2VseShwcml2LT50eF9xdWV1ZVtpXS0+dHhjb2FsZXNjaW5nKSkgewogCQkJCWdmYXJfd3JpdGUoYmFkZHIgKyBpLCAwKTsKIAkJCQlnZmFyX3dyaXRlKGJhZGRyICsgaSwgcHJpdi0+dHhfcXVldWVbaV0tPnR4aWMpOwpAQCAtMTcxNyw3ICsxNzE3LDcgQEAKIAkJfQogCiAJCWJhZGRyID0gJnJlZ3MtPnJ4aWMwOwotCQlmb3JfZWFjaF9iaXQgKGksICZyeF9tYXNrLCBwcml2LT5udW1fcnhfcXVldWVzKSB7CisJCWZvcl9lYWNoX3NldF9iaXQoaSwgJnJ4X21hc2ssIHByaXYtPm51bV9yeF9xdWV1ZXMpIHsKIAkJCWlmIChsaWtlbHkocHJpdi0+cnhfcXVldWVbaV0tPnJ4Y29hbGVzY2luZykpIHsKIAkJCQlnZmFyX3dyaXRlKGJhZGRyICsgaSwgMCk7CiAJCQkJZ2Zhcl93cml0ZShiYWRkciArIGksIHByaXYtPnJ4X3F1ZXVlW2ldLT5yeGljKTsKQEAgLTI2MDcsNyArMjYwNyw3IEBACiAJCWJ1ZGdldF9wZXJfcXVldWUgPSBsZWZ0X292ZXJfYnVkZ2V0L251bV9xdWV1ZXM7CiAJCWxlZnRfb3Zlcl9idWRnZXQgPSAwOwogCi0JCWZvcl9lYWNoX2JpdChpLCAmZ2ZhcmdycC0+cnhfYml0X21hcCwgcHJpdi0+bnVtX3J4X3F1ZXVlcykgeworCQlmb3JfZWFjaF9zZXRfYml0KGksICZnZmFyZ3JwLT5yeF9iaXRfbWFwLCBwcml2LT5udW1fcnhfcXVldWVzKSB7CiAJCQlpZiAodGVzdF9iaXQoaSwgJnNlcnZpY2VkX3F1ZXVlcykpCiAJCQkJY29udGludWU7CiAJCQlyeF9xdWV1ZSA9IHByaXYtPnJ4X3F1ZXVlW2ldOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IDQ1ZTM1MzIuLjY4NGFmMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTEwNTAsNyArMTA1MCw3IEBACiAJICovCiAJZm9yICh2X2lkeCA9IDA7IHZfaWR4IDwgcV92ZWN0b3JzOyB2X2lkeCsrKSB7CiAJCXFfdmVjdG9yID0gYWRhcHRlci0+cV92ZWN0b3Jbdl9pZHhdOwotCQkvKiBYWFggZm9yX2VhY2hfYml0KC4uLikgKi8KKwkJLyogWFhYIGZvcl9lYWNoX3NldF9iaXQoLi4uKSAqLwogCQlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT5yeHJfaWR4LAogCQkgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9peGdiZXZmX21haW4uYwppbmRleCAyMzViNWZkLi5jYTY1M2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMKQEAgLTc1MSw3ICs3NTEsNyBAQAogCSAqLwogCWZvciAodl9pZHggPSAwOyB2X2lkeCA8IHFfdmVjdG9yczsgdl9pZHgrKykgewogCQlxX3ZlY3RvciA9IGFkYXB0ZXItPnFfdmVjdG9yW3ZfaWR4XTsKLQkJLyogWFhYIGZvcl9lYWNoX2JpdCguLi4pICovCisJCS8qIFhYWCBmb3JfZWFjaF9zZXRfYml0KC4uLikgKi8KIAkJcl9pZHggPSBmaW5kX2ZpcnN0X2JpdChxX3ZlY3Rvci0+cnhyX2lkeCwKIAkJCQkgICAgICAgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWluLmMKaW5kZXggOGE5NjRmMS4uYTY0NTJhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWluLmMKQEAgLTM5NCw3ICszOTQsNyBAQAogCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoYXItPmh3LCBza2IpOwogCX0KIAotCWZvcl9lYWNoX2JpdChpLCAmcXVldWVfYml0bWFwLCBCSVRTX1BFUl9CWVRFKSB7CisJZm9yX2VhY2hfc2V0X2JpdChpLCAmcXVldWVfYml0bWFwLCBCSVRTX1BFUl9CWVRFKSB7CiAjaWZkZWYgQVI5MTcwX1FVRVVFX1NUT1BfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3YWtlIHF1ZXVlICVkXG4iLAogCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2RlYnVnZnMuYwppbmRleCBiZTk5MmNhLi5jMjljOTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9kZWJ1Z2ZzLmMKQEAgLTg5LDcgKzg5LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgX19JV01fRE1fTlI7IGkrKykKIAkJaXdtLT5kYmcuZGJnX21vZHVsZVtpXSA9IDA7CiAKLQlmb3JfZWFjaF9iaXQoYml0LCAmaXdtLT5kYmcuZGJnX21vZHVsZXMsIF9fSVdNX0RNX05SKQorCWZvcl9lYWNoX3NldF9iaXQoYml0LCAmaXdtLT5kYmcuZGJnX21vZHVsZXMsIF9fSVdNX0RNX05SKQogCQlpd20tPmRiZy5kYmdfbW9kdWxlW2JpdF0gPSBpd20tPmRiZy5kYmdfbGV2ZWw7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3J4LmMKaW5kZXggYWQ4ZjdlYS4uODQ1NmI0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3J4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3J4LmMKQEAgLTExMTYsNyArMTExNiw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWZvcl9lYWNoX2JpdChiaXQsICh1bnNpZ25lZCBsb25nICopJnRpZF9tc2ssIElXTV9VTUFDX1RJRF9OUikgeworCWZvcl9lYWNoX3NldF9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKSZ0aWRfbXNrLCBJV01fVU1BQ19USURfTlIpIHsKIAkJdGlkX2luZm8gPSAmc3RhX2luZm8tPnRpZF9pbmZvW2JpdF07CiAKIAkJbXV0ZXhfbG9jaygmdGlkX2luZm8tPm11dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2Vpc2FfZW51bWVyYXRvci5jIGIvZHJpdmVycy9wYXJpc2MvZWlzYV9lbnVtZXJhdG9yLmMKaW5kZXggMGJlMWQ1MC4uY2FhMTUzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvZWlzYV9lbnVtZXJhdG9yLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvZWlzYV9lbnVtZXJhdG9yLmMKQEAgLTQ2MCw3ICs0NjAsNyBAQAogCQkJICAgICAgIHNsb3QsIGlkX3N0cmluZyk7CiAJCQkKIAkJCXByaW50X2Vpc2FfaWQoaWRfc3RyaW5nLCBlcy0+ZWlzYV9zbG90X2lkKTsKLQkJCXByaW50aygiIGV4cGVjdGVkICVzIFxuIiwgaWRfc3RyaW5nKTsKKwkJCXByaW50aygiIGV4cGVjdGVkICVzXG4iLCBpZF9zdHJpbmcpOwogCQkKIAkJCXJldHVybiAtMTsJCiAJCQkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL3N1cGVyaW8uYyBiL2RyaXZlcnMvcGFyaXNjL3N1cGVyaW8uYwppbmRleCBhMzVjOWM1Li5mNzgwNmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9zdXBlcmlvLmMKKysrIGIvZHJpdmVycy9wYXJpc2Mvc3VwZXJpby5jCkBAIC0xNjksNyArMTY5LDcgQEAKIAkvKiAuLi50aGVuIHByb3Blcmx5IGZpeHVwIHRoZSBVU0IgdG8gcG9pbnQgYXQgc3Vja3lpbyBQSUMgKi8KIAlzaW8tPnVzYl9wZGV2LT5pcnEgPSBzdXBlcmlvX2ZpeHVwX2lycShzaW8tPnVzYl9wZGV2KTsKIAotCXByaW50ayhLRVJOX0lORk8gUEZYICJGb3VuZCBOUzg3NTYwIExlZ2FjeSBJL08gZGV2aWNlIGF0ICVzIChJUlEgJWkpIFxuIiwKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiRm91bmQgTlM4NzU2MCBMZWdhY3kgSS9PIGRldmljZSBhdCAlcyAoSVJRICVpKVxuIiwKIAkgICAgICAgcGNpX25hbWUocGRldiksIHBkZXYtPmlycSk7CiAKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQgKHBkZXYsIFNJT19TUDFCQVIsICZzaW8tPnNwMV9iYXNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpLmMKaW5kZXggNWI1NDhhZS4uNzdiNDkzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLmMKQEAgLTMwMyw2ICszMDMsNDkgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KTsKIAorLyoqCisgKiBwY2lfYnVzX2ZpbmRfZXh0X2NhcGFiaWxpdHkgLSBmaW5kIGFuIGV4dGVuZGVkIGNhcGFiaWxpdHkKKyAqIEBidXM6ICAgdGhlIFBDSSBidXMgdG8gcXVlcnkKKyAqIEBkZXZmbjogUENJIGRldmljZSB0byBxdWVyeQorICogQGNhcDogICBjYXBhYmlsaXR5IGNvZGUKKyAqCisgKiBMaWtlIHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KCkgYnV0IHdvcmtzIGZvciBwY2kgZGV2aWNlcyB0aGF0IGRvIG5vdCBoYXZlIGEKKyAqIHBjaV9kZXYgc3RydWN0dXJlIHNldCB1cCB5ZXQuCisgKgorICogUmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgcmVxdWVzdGVkIGNhcGFiaWxpdHkgc3RydWN0dXJlIHdpdGhpbiB0aGUKKyAqIGRldmljZSdzIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIG9yIDAgaW4gY2FzZSB0aGUgZGV2aWNlIGRvZXMgbm90CisgKiBzdXBwb3J0IGl0LgorICovCitpbnQgcGNpX2J1c19maW5kX2V4dF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCQlpbnQgY2FwKQoreworCXUzMiBoZWFkZXI7CisJaW50IHR0bDsKKwlpbnQgcG9zID0gUENJX0NGR19TUEFDRV9TSVpFOworCisJLyogbWluaW11bSA4IGJ5dGVzIHBlciBjYXBhYmlsaXR5ICovCisJdHRsID0gKFBDSV9DRkdfU1BBQ0VfRVhQX1NJWkUgLSBQQ0lfQ0ZHX1NQQUNFX1NJWkUpIC8gODsKKworCWlmICghcGNpX2J1c19yZWFkX2NvbmZpZ19kd29yZChidXMsIGRldmZuLCBwb3MsICZoZWFkZXIpKQorCQlyZXR1cm4gMDsKKwlpZiAoaGVhZGVyID09IDB4ZmZmZmZmZmYgfHwgaGVhZGVyID09IDApCisJCXJldHVybiAwOworCisJd2hpbGUgKHR0bC0tID4gMCkgeworCQlpZiAoUENJX0VYVF9DQVBfSUQoaGVhZGVyKSA9PSBjYXApCisJCQlyZXR1cm4gcG9zOworCisJCXBvcyA9IFBDSV9FWFRfQ0FQX05FWFQoaGVhZGVyKTsKKwkJaWYgKHBvcyA8IFBDSV9DRkdfU1BBQ0VfU0laRSkKKwkJCWJyZWFrOworCisJCWlmICghcGNpX2J1c19yZWFkX2NvbmZpZ19kd29yZChidXMsIGRldmZuLCBwb3MsICZoZWFkZXIpKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgX19wY2lfZmluZF9uZXh0X2h0X2NhcChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcG9zLCBpbnQgaHRfY2FwKQogewogCWludCByYywgdHRsID0gUENJX0ZJTkRfQ0FQX1RUTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKaW5kZXggMDM5ZTg3Yi4uODFkMTlkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcXVpcmtzLmMKKysrIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKQEAgLTI1MzMsNiArMjUzMyw5MSBAQAogCiAjZW5kaWYJLyogQ09ORklHX1BDSV9JT1YgKi8KIAorLyoKKyAqIFRoaXMgaXMgYSBxdWlyayBmb3IgdGhlIFJpY29oIE1NQyBjb250cm9sbGVyIGZvdW5kIGFzIGEgcGFydCBvZgorICogc29tZSBtdWxpZnVuY3Rpb24gY2hpcHMuCisKKyAqIFRoaXMgaXMgdmVyeSBzaW1pbGlhciBhbmQgYmFzZWQgb24gdGhlIHJpY29oX21tYyBkcml2ZXIgd3JpdHRlbiBieQorICogUGhpbGlwIExhbmdkYWxlLiBUaGFuayB5b3UgZm9yIHRoZXNlIG1hZ2ljIHNlcXVlbmNlcy4KKyAqCisgKiBUaGVzZSBjaGlwcyBpbXBsZW1lbnQgdGhlIGZvdXIgbWFpbiBtZW1vcnkgY2FyZCBjb250cm9sbGVycyAoU0QsIE1NQywgTVMsIHhEKQorICogYW5kIG9uZSBvciBib3RoIG9mIGNhcmRidXMgb3IgZmlyZXdpcmUuCisgKgorICogSXQgaGFwcGVucyB0aGF0IHRoZXkgaW1wbGVtZW50IFNEIGFuZCBNTUMKKyAqIHN1cHBvcnQgYXMgc2VwYXJhdGUgY29udHJvbGxlcnMgKGFuZCBQQ0kgZnVuY3Rpb25zKS4gVGhlIGxpbnV4IFNESENJCisgKiBkcml2ZXIgc3VwcG9ydHMgTU1DIGNhcmRzIGJ1dCB0aGUgY2hpcCBkZXRlY3RzIE1NQyBjYXJkcyBpbiBoYXJkd2FyZQorICogYW5kIGRpcmVjdHMgdGhlbSB0byB0aGUgTU1DIGNvbnRyb2xsZXIgLSBzbyB0aGUgU0RIQ0kgZHJpdmVyIG5ldmVyIHNlZXMKKyAqIHRoZW0uCisgKgorICogVG8gZ2V0IGFyb3VuZCB0aGlzLCB3ZSBtdXN0IGRpc2FibGUgdGhlIHVzZWxlc3MgTU1DIGNvbnRyb2xsZXIuCisgKiBBdCB0aGF0IHBvaW50LCB0aGUgU0RIQ0kgY29udHJvbGxlciB3aWxsIHN0YXJ0IHNlZWluZyB0aGVtCisgKiBJdCBzZWVtcyB0byBiZSB0aGUgY2FzZSB0aGF0IHRoZSByZWxldmFudCBQQ0kgcmVnaXN0ZXJzIHRvIGRlYWN0aXZhdGUgdGhlCisgKiBNTUMgY29udHJvbGxlciBsaXZlIG9uIFBDSSBmdW5jdGlvbiAwLCB3aGljaCBtaWdodCBiZSB0aGUgY2FyZGJ1cyBjb250cm9sbGVyCisgKiBvciB0aGUgZmlyZXdpcmUgY29udHJvbGxlciwgZGVwZW5kaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIGNoaXAgaW4gcXVlc3Rpb24KKyAqCisgKiBUaGlzIGhhcyB0byBiZSBkb25lIGVhcmx5LCBiZWNhdXNlIGFzIHNvb24gYXMgd2UgZGlzYWJsZSB0aGUgTU1DIGNvbnRyb2xsZXIKKyAqIG90aGVyIHBjaSBmdW5jdGlvbnMgc2hpZnQgdXAgb25lIGxldmVsLCBlLmcuIGZ1bmN0aW9uICMyIGJlY29tZXMgZnVuY3Rpb24KKyAqICMxLCBhbmQgdGhpcyB3aWxsIGNvbmZ1c2UgdGhlIHBjaSBjb3JlLgorICovCisKKyNpZmRlZiBDT05GSUdfTU1DX1JJQ09IX01NQworc3RhdGljIHZvaWQgcmljb2hfbW1jX2ZpeHVwX3JsNWM0NzYoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwkvKiBkaXNhYmxlIHZpYSBjYXJkYnVzIGludGVyZmFjZSAqLworCXU4IHdyaXRlX2VuYWJsZTsKKwl1OCB3cml0ZV90YXJnZXQ7CisJdTggZGlzYWJsZTsKKworCS8qIGRpc2FibGUgbXVzdCBiZSBkb25lIHZpYSBmdW5jdGlvbiAjMCAqLworCWlmIChQQ0lfRlVOQyhkZXYtPmRldmZuKSkKKwkJcmV0dXJuOworCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweEI3LCAmZGlzYWJsZSk7CisJaWYgKGRpc2FibGUgJiAweDAyKQorCQlyZXR1cm47CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4OEUsICZ3cml0ZV9lbmFibGUpOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4OEUsIDB4QUEpOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg4RCwgJndyaXRlX3RhcmdldCk7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4RCwgMHhCNyk7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHhCNywgZGlzYWJsZSB8IDB4MDIpOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4OEUsIHdyaXRlX2VuYWJsZSk7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4RCwgd3JpdGVfdGFyZ2V0KTsKKworCWRldl9ub3RpY2UoJmRldi0+ZGV2LCAicHJvcHJpZXRhcnkgUmljb2ggTU1DIGNvbnRyb2xsZXIgZGlzYWJsZWQgKHZpYSBjYXJkYnVzIGZ1bmN0aW9uKVxuIik7CisJZGV2X25vdGljZSgmZGV2LT5kZXYsICJNTUMgY2FyZHMgYXJlIG5vdyBzdXBwb3J0ZWQgYnkgc3RhbmRhcmQgU0RIQ0kgY29udHJvbGxlclxuIik7Cit9CitERUNMQVJFX1BDSV9GSVhVUF9FQVJMWShQQ0lfVkVORE9SX0lEX1JJQ09ILCBQQ0lfREVWSUNFX0lEX1JJQ09IX1JMNUM0NzYsIHJpY29oX21tY19maXh1cF9ybDVjNDc2KTsKK0RFQ0xBUkVfUENJX0ZJWFVQX1JFU1VNRV9FQVJMWShQQ0lfVkVORE9SX0lEX1JJQ09ILCBQQ0lfREVWSUNFX0lEX1JJQ09IX1JMNUM0NzYsIHJpY29oX21tY19maXh1cF9ybDVjNDc2KTsKKworc3RhdGljIHZvaWQgcmljb2hfbW1jX2ZpeHVwX3I1YzgzMihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCS8qIGRpc2FibGUgdmlhIGZpcmV3aXJlIGludGVyZmFjZSAqLworCXU4IHdyaXRlX2VuYWJsZTsKKwl1OCBkaXNhYmxlOworCisJLyogZGlzYWJsZSBtdXN0IGJlIGRvbmUgdmlhIGZ1bmN0aW9uICMwICovCisJaWYgKFBDSV9GVU5DKGRldi0+ZGV2Zm4pKQorCQlyZXR1cm47CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4Q0IsICZkaXNhYmxlKTsKKworCWlmIChkaXNhYmxlICYgMHgwMikKKwkJcmV0dXJuOworCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweENBLCAmd3JpdGVfZW5hYmxlKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweENBLCAweDU3KTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweENCLCBkaXNhYmxlIHwgMHgwMik7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHhDQSwgd3JpdGVfZW5hYmxlKTsKKworCWRldl9ub3RpY2UoJmRldi0+ZGV2LCAicHJvcHJpZXRhcnkgUmljb2ggTU1DIGNvbnRyb2xsZXIgZGlzYWJsZWQgKHZpYSBmaXJld2lyZSBmdW5jdGlvbilcbiIpOworCWRldl9ub3RpY2UoJmRldi0+ZGV2LCAiTU1DIGNhcmRzIGFyZSBub3cgc3VwcG9ydGVkIGJ5IHN0YW5kYXJkIFNESENJIGNvbnRyb2xsZXJcbiIpOworfQorREVDTEFSRV9QQ0lfRklYVVBfRUFSTFkoUENJX1ZFTkRPUl9JRF9SSUNPSCwgUENJX0RFVklDRV9JRF9SSUNPSF9SNUM4MzIsIHJpY29oX21tY19maXh1cF9yNWM4MzIpOworREVDTEFSRV9QQ0lfRklYVVBfUkVTVU1FX0VBUkxZKFBDSV9WRU5ET1JfSURfUklDT0gsIFBDSV9ERVZJQ0VfSURfUklDT0hfUjVDODMyLCByaWNvaF9tbWNfZml4dXBfcjVjODMyKTsKKyNlbmRpZiAvKkNPTkZJR19NTUNfUklDT0hfTU1DKi8KKworCiBzdGF0aWMgdm9pZCBwY2lfZG9fZml4dXBzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBwY2lfZml4dXAgKmYsCiAJCQkgIHN0cnVjdCBwY2lfZml4dXAgKmVuZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvS2NvbmZpZyBiL2RyaXZlcnMvcG93ZXIvS2NvbmZpZwppbmRleCBiZjE0NjcyLi5mYWFhOWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL0tjb25maWcKKysrIGIvZHJpdmVycy9wb3dlci9LY29uZmlnCkBAIC0yOSw2ICsyOSwxMyBAQAogCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgc3VwcG9ydCBBUE0gc3RhdHVzIGVtdWxhdGlvbiB1c2luZwogCSAgYmF0dGVyeSBjbGFzcyBkZXZpY2VzLgogCitjb25maWcgTUFYODkyNV9QT1dFUgorCXRyaXN0YXRlICJNQVg4OTI1IGJhdHRlcnkgY2hhcmdlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gTUZEX01BWDg5MjUKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgYmF0dGVyeSBjaGFyZ2VyIGluIHRoZSBNYXhpbQorCSAgTUFYODkyNSBQTUlDLgorCiBjb25maWcgV004MzFYX0JBQ0tVUAogCXRyaXN0YXRlICJXTTgzMVggYmFja3VwIGJhdHRlcnkgY2hhcmdlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gTUZEX1dNODMxWApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9NYWtlZmlsZSBiL2RyaXZlcnMvcG93ZXIvTWFrZWZpbGUKaW5kZXggNTczNTk3Yy4uYTJiYTdjODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wb3dlci9NYWtlZmlsZQpAQCAtMTYsNiArMTYsNyBAQAogCiBvYmotJChDT05GSUdfUERBX1BPV0VSKQkJKz0gcGRhX3Bvd2VyLm8KIG9iai0kKENPTkZJR19BUE1fUE9XRVIpCQkrPSBhcG1fcG93ZXIubworb2JqLSQoQ09ORklHX01BWDg5MjVfUE9XRVIpCSs9IG1heDg5MjVfcG93ZXIubwogb2JqLSQoQ09ORklHX1dNODMxWF9CQUNLVVApCSs9IHdtODMxeF9iYWNrdXAubwogb2JqLSQoQ09ORklHX1dNODMxWF9QT1dFUikJKz0gd204MzF4X3Bvd2VyLm8KIG9iai0kKENPTkZJR19XTTgzNTBfUE9XRVIpCSs9IHdtODM1MF9wb3dlci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL21heDg5MjVfcG93ZXIuYyBiL2RyaXZlcnMvcG93ZXIvbWF4ODkyNV9wb3dlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYjQ0MTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Bvd2VyL21heDg5MjVfcG93ZXIuYwpAQCAtMCwwICsxLDUzNCBAQAorLyoKKyAqIEJhdHRlcnkgZHJpdmVyIGZvciBNYXhpbSBNQVg4OTI1CisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCUhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0BtYXJ2ZWxsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvbWF4ODkyNS5oPgorCisvKiByZWdpc3RlcnMgaW4gR1BNICovCisjZGVmaW5lIE1BWDg5MjVfT1VUNVZFTgkJCTB4NTQKKyNkZWZpbmUgTUFYODkyNV9PVVQzVkVOCQkJMHg1OAorI2RlZmluZSBNQVg4OTI1X0NIR19DTlRMMQkJMHg3YworCisvKiBiaXRzIGRlZmluaXRpb24gKi8KKyNkZWZpbmUgTUFYODkyNV9DSEdfU1RBVF9WU1lTTE9XCSgxIDw8IDApCisjZGVmaW5lIE1BWDg5MjVfQ0hHX1NUQVRfTU9ERV9NQVNLCSgzIDw8IDIpCisjZGVmaW5lIE1BWDg5MjVfQ0hHX1NUQVRfRU5fTUFTSwkoMSA8PCA0KQorI2RlZmluZSBNQVg4OTI1X0NIR19NQkRFVAkJKDEgPDwgMSkKKyNkZWZpbmUgTUFYODkyNV9DSEdfQUNfUkFOR0VfTUFTSwkoMyA8PCA2KQorCisvKiByZWdpc3RlcnMgaW4gQURDICovCisjZGVmaW5lIE1BWDg5MjVfQURDX1JFU19DTkZHMQkJMHgwNgorI2RlZmluZSBNQVg4OTI1X0FEQ19BVkdfQ05GRzEJCTB4MDcKKyNkZWZpbmUgTUFYODkyNV9BRENfQUNRX0NORkcxCQkweDA4CisjZGVmaW5lIE1BWDg5MjVfQURDX0FDUV9DTkZHMgkJMHgwOQorLyogMiBieXRlcyByZWdpc3RlcnMgaW4gYmVsb3cuIE1TQiBpcyAxc3QsIExTQiBpcyAybmQuICovCisjZGVmaW5lIE1BWDg5MjVfQURDX0FVWDIJCTB4NjIKKyNkZWZpbmUgTUFYODkyNV9BRENfVkNIRwkJMHg2NAorI2RlZmluZSBNQVg4OTI1X0FEQ19WQkJBVFQJCTB4NjYKKyNkZWZpbmUgTUFYODkyNV9BRENfVk1CQVRUCQkweDY4CisjZGVmaW5lIE1BWDg5MjVfQURDX0lTTlMJCTB4NmEKKyNkZWZpbmUgTUFYODkyNV9BRENfVEhNCQkJMHg2YworI2RlZmluZSBNQVg4OTI1X0FEQ19URElFCQkweDZlCisjZGVmaW5lIE1BWDg5MjVfQ01EX0FVWDIJCTB4YzgKKyNkZWZpbmUgTUFYODkyNV9DTURfVkNIRwkJMHhkMAorI2RlZmluZSBNQVg4OTI1X0NNRF9WQkJBVFQJCTB4ZDgKKyNkZWZpbmUgTUFYODkyNV9DTURfVk1CQVRUCQkweGUwCisjZGVmaW5lIE1BWDg5MjVfQ01EX0lTTlMJCTB4ZTgKKyNkZWZpbmUgTUFYODkyNV9DTURfVEhNCQkJMHhmMAorI2RlZmluZSBNQVg4OTI1X0NNRF9URElFCQkweGY4CisKK2VudW0geworCU1FQVNVUkVfQVVYMiwKKwlNRUFTVVJFX1ZDSEcsCisJTUVBU1VSRV9WQkJBVFQsCisJTUVBU1VSRV9WTUJBVFQsCisJTUVBU1VSRV9JU05TLAorCU1FQVNVUkVfVEhNLAorCU1FQVNVUkVfVERJRSwKKwlNRUFTVVJFX01BWCwKK307CisKK3N0cnVjdCBtYXg4OTI1X3Bvd2VyX2luZm8geworCXN0cnVjdCBtYXg4OTI1X2NoaXAJKmNoaXA7CisJc3RydWN0IGkyY19jbGllbnQJKmdwbTsKKwlzdHJ1Y3QgaTJjX2NsaWVudAkqYWRjOworCisJc3RydWN0IHBvd2VyX3N1cHBseQlhYzsKKwlzdHJ1Y3QgcG93ZXJfc3VwcGx5CXVzYjsKKwlzdHJ1Y3QgcG93ZXJfc3VwcGx5CWJhdHRlcnk7CisJaW50CQkJaXJxX2Jhc2U7CisJdW5zaWduZWQJCWFjX29ubGluZToxOworCXVuc2lnbmVkCQl1c2Jfb25saW5lOjE7CisJdW5zaWduZWQJCWJhdF9vbmxpbmU6MTsKKwl1bnNpZ25lZAkJY2hnX21vZGU6MjsKKwl1bnNpZ25lZAkJYmF0dF9kZXRlY3Q6MTsJLyogZGV0ZWNpbmcgTUIgYnkgSUQgcGluICovCisJdW5zaWduZWQJCXRvcG9mZl90aHJlc2hvbGQ6MjsKKwl1bnNpZ25lZAkJZmFzdF9jaGFyZ2U6MzsKKworCWludCAoKnNldF9jaGFyZ2VyKSAoaW50KTsKK307CisKK3N0YXRpYyBpbnQgX19zZXRfY2hhcmdlcihzdHJ1Y3QgbWF4ODkyNV9wb3dlcl9pbmZvICppbmZvLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBtYXg4OTI1X2NoaXAgKmNoaXAgPSBpbmZvLT5jaGlwOworCWlmIChlbmFibGUpIHsKKwkJLyogZW5hYmxlIGNoYXJnZXIgaW4gcGxhdGZvcm0gKi8KKwkJaWYgKGluZm8tPnNldF9jaGFyZ2VyKQorCQkJaW5mby0+c2V0X2NoYXJnZXIoMSk7CisJCS8qIGVuYWJsZSBjaGFyZ2VyICovCisJCW1heDg5MjVfc2V0X2JpdHMoaW5mby0+Z3BtLCBNQVg4OTI1X0NIR19DTlRMMSwgMSA8PCA3LCAwKTsKKwl9IGVsc2UgeworCQkvKiBkaXNhYmxlIGNoYXJnZSAqLworCQltYXg4OTI1X3NldF9iaXRzKGluZm8tPmdwbSwgTUFYODkyNV9DSEdfQ05UTDEsIDEgPDwgNywgMSA8PCA3KTsKKwkJaWYgKGluZm8tPnNldF9jaGFyZ2VyKQorCQkJaW5mby0+c2V0X2NoYXJnZXIoMCk7CisJfQorCWRldl9kYmcoY2hpcC0+ZGV2LCAiJXNcbiIsIChlbmFibGUpID8gIkVuYWJsZSBjaGFyZ2VyIgorCQk6ICJEaXNhYmxlIGNoYXJnZXIiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlycXJldHVybl90IG1heDg5MjVfY2hhcmdlcl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG1heDg5MjVfcG93ZXJfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgbWF4ODkyNV9wb3dlcl9pbmZvICopZGF0YTsKKwlzdHJ1Y3QgbWF4ODkyNV9jaGlwICpjaGlwID0gaW5mby0+Y2hpcDsKKworCXN3aXRjaCAoaXJxIC0gY2hpcC0+aXJxX2Jhc2UpIHsKKwljYXNlIE1BWDg5MjVfSVJRX1ZDSEdfRENfUjoKKwkJaW5mby0+YWNfb25saW5lID0gMTsKKwkJX19zZXRfY2hhcmdlcihpbmZvLCAxKTsKKwkJZGV2X2RiZyhjaGlwLT5kZXYsICJBZGFwdGVyIGluc2VydGVkXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBNQVg4OTI1X0lSUV9WQ0hHX0RDX0Y6CisJCWluZm8tPmFjX29ubGluZSA9IDA7CisJCV9fc2V0X2NoYXJnZXIoaW5mbywgMCk7CisJCWRldl9kYmcoY2hpcC0+ZGV2LCAiQWRhcHRlciBpcyByZW1vdmFsXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBNQVg4OTI1X0lSUV9WQ0hHX1VTQl9SOgorCQlpbmZvLT51c2Jfb25saW5lID0gMTsKKwkJX19zZXRfY2hhcmdlcihpbmZvLCAxKTsKKwkJZGV2X2RiZyhjaGlwLT5kZXYsICJVU0IgaW5zZXJ0ZWRcbiIpOworCQlicmVhazsKKwljYXNlIE1BWDg5MjVfSVJRX1ZDSEdfVVNCX0Y6CisJCWluZm8tPnVzYl9vbmxpbmUgPSAwOworCQlfX3NldF9jaGFyZ2VyKGluZm8sIDApOworCQlkZXZfZGJnKGNoaXAtPmRldiwgIlVTQiBpcyByZW1vdmFsXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBNQVg4OTI1X0lSUV9WQ0hHX1RITV9PS19GOgorCQkvKiBCYXR0ZXJ5IGlzIG5vdCByZWFkeSB5ZXQgKi8KKwkJZGV2X2RiZyhjaGlwLT5kZXYsICJCYXR0ZXJ5IHRlbXBlcmF0dXJlIGlzIG91dCBvZiByYW5nZVxuIik7CisJY2FzZSBNQVg4OTI1X0lSUV9WQ0hHX0RDX09WUDoKKwkJZGV2X2RiZyhjaGlwLT5kZXYsICJFcnJvciBkZXRlY3Rpb25cbiIpOworCQlfX3NldF9jaGFyZ2VyKGluZm8sIDApOworCQlicmVhazsKKwljYXNlIE1BWDg5MjVfSVJRX1ZDSEdfVEhNX09LX1I6CisJCS8qIEJhdHRlcnkgaXMgcmVhZHkgbm93ICovCisJCWRldl9kYmcoY2hpcC0+ZGV2LCAiQmF0dGVyeSB0ZW1wZXJhdHVyZSBpcyBpbiByYW5nZVxuIik7CisJCWJyZWFrOworCWNhc2UgTUFYODkyNV9JUlFfVkNIR19TWVNMT1dfUjoKKwkJLyogVlNZUyBpcyBsb3cgKi8KKwkJZGV2X2luZm8oY2hpcC0+ZGV2LCAiU3lzIHBvd2VyIGlzIHRvbyBsb3dcbiIpOworCQlicmVhazsKKwljYXNlIE1BWDg5MjVfSVJRX1ZDSEdfU1lTTE9XX0Y6CisJCWRldl9kYmcoY2hpcC0+ZGV2LCAiU3lzIHBvd2VyIGlzIGFib3ZlIGxvdyB0aHJlc2hvbGRcbiIpOworCQlicmVhazsKKwljYXNlIE1BWDg5MjVfSVJRX1ZDSEdfRE9ORToKKwkJX19zZXRfY2hhcmdlcihpbmZvLCAwKTsKKwkJZGV2X2RiZyhjaGlwLT5kZXYsICJDaGFyZ2luZyBpcyBkb25lXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBNQVg4OTI1X0lSUV9WQ0hHX1RPUE9GRjoKKwkJZGV2X2RiZyhjaGlwLT5kZXYsICJDaGFyZ2luZyBpbiB0b3Atb2ZmIG1vZGVcbiIpOworCQlicmVhazsKKwljYXNlIE1BWDg5MjVfSVJRX1ZDSEdfVE1SX0ZBVUxUOgorCQlfX3NldF9jaGFyZ2VyKGluZm8sIDApOworCQlkZXZfZGJnKGNoaXAtPmRldiwgIlNhZmUgdGltZXIgaXMgZXhwaXJlZFxuIik7CisJCWJyZWFrOworCWNhc2UgTUFYODkyNV9JUlFfVkNIR19SU1Q6CisJCV9fc2V0X2NoYXJnZXIoaW5mbywgMCk7CisJCWRldl9kYmcoY2hpcC0+ZGV2LCAiQ2hhcmdlciBpcyByZXNldFxuIik7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgc3RhcnRfbWVhc3VyZShzdHJ1Y3QgbWF4ODkyNV9wb3dlcl9pbmZvICppbmZvLCBpbnQgdHlwZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZlsyXSA9IHswLCAwfTsKKwlpbnQgbWVhc19yZWcgPSAwLCByZXQ7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE1FQVNVUkVfVkNIRzoKKwkJbWVhc19yZWcgPSBNQVg4OTI1X0FEQ19WQ0hHOworCQlicmVhazsKKwljYXNlIE1FQVNVUkVfVkJCQVRUOgorCQltZWFzX3JlZyA9IE1BWDg5MjVfQURDX1ZCQkFUVDsKKwkJYnJlYWs7CisJY2FzZSBNRUFTVVJFX1ZNQkFUVDoKKwkJbWVhc19yZWcgPSBNQVg4OTI1X0FEQ19WTUJBVFQ7CisJCWJyZWFrOworCWNhc2UgTUVBU1VSRV9JU05TOgorCQltZWFzX3JlZyA9IE1BWDg5MjVfQURDX0lTTlM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1heDg5MjVfYnVsa19yZWFkKGluZm8tPmFkYywgbWVhc19yZWcsIDIsIGJ1Zik7CisJcmV0ID0gKGJ1ZlswXSA8PCA0KSB8IChidWZbMV0gPj4gNCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1heDg5MjVfYWNfZ2V0X3Byb3Aoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5LAorCQkJICAgICAgIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHBzcCwKKwkJCSAgICAgICB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQoreworCXN0cnVjdCBtYXg4OTI1X3Bvd2VyX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEocHN5LT5kZXYtPnBhcmVudCk7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKHBzcCkgeworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfT05MSU5FOgorCQl2YWwtPmludHZhbCA9IGluZm8tPmFjX29ubGluZTsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVzoKKwkJaWYgKGluZm8tPmFjX29ubGluZSkgeworCQkJcmV0ID0gc3RhcnRfbWVhc3VyZShpbmZvLCBNRUFTVVJFX1ZDSEcpOworCQkJaWYgKHJldCA+PSAwKSB7CisJCQkJdmFsLT5pbnR2YWwgPSByZXQgPDwgMTsJLyogdW5pdCBpcyBtViAqLworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJCXJldCA9IC1FTk9EQVRBOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU5PREVWOworCQlicmVhazsKKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IG1heDg5MjVfYWNfcHJvcHNbXSA9IHsKKwlQT1dFUl9TVVBQTFlfUFJPUF9PTkxJTkUsCisJUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1csCit9OworCitzdGF0aWMgaW50IG1heDg5MjVfdXNiX2dldF9wcm9wKHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSwKKwkJCQllbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBwc3AsCisJCQkJdW5pb24gcG93ZXJfc3VwcGx5X3Byb3B2YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgbWF4ODkyNV9wb3dlcl9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKHBzeS0+ZGV2LT5wYXJlbnQpOworCWludCByZXQgPSAwOworCisJc3dpdGNoIChwc3ApIHsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX09OTElORToKKwkJdmFsLT5pbnR2YWwgPSBpbmZvLT51c2Jfb25saW5lOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTk9XOgorCQlpZiAoaW5mby0+dXNiX29ubGluZSkgeworCQkJcmV0ID0gc3RhcnRfbWVhc3VyZShpbmZvLCBNRUFTVVJFX1ZDSEcpOworCQkJaWYgKHJldCA+PSAwKSB7CisJCQkJdmFsLT5pbnR2YWwgPSByZXQgPDwgMTsJLyogdW5pdCBpcyBtViAqLworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJCXJldCA9IC1FTk9EQVRBOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU5PREVWOworCQlicmVhazsKKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IG1heDg5MjVfdXNiX3Byb3BzW10gPSB7CisJUE9XRVJfU1VQUExZX1BST1BfT05MSU5FLAorCVBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTk9XLAorfTsKKworc3RhdGljIGludCBtYXg4OTI1X2JhdF9nZXRfcHJvcChzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3ksCisJCQkJZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgcHNwLAorCQkJCXVuaW9uIHBvd2VyX3N1cHBseV9wcm9wdmFsICp2YWwpCit7CisJc3RydWN0IG1heDg5MjVfcG93ZXJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShwc3ktPmRldi0+cGFyZW50KTsKKwlsb25nIGxvbmcgaW50IHRtcCA9IDA7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKHBzcCkgeworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfT05MSU5FOgorCQl2YWwtPmludHZhbCA9IGluZm8tPmJhdF9vbmxpbmU7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1c6CisJCWlmIChpbmZvLT5iYXRfb25saW5lKSB7CisJCQlyZXQgPSBzdGFydF9tZWFzdXJlKGluZm8sIE1FQVNVUkVfVk1CQVRUKTsKKwkJCWlmIChyZXQgPj0gMCkgeworCQkJCXZhbC0+aW50dmFsID0gcmV0IDw8IDE7CS8qIHVuaXQgaXMgbVYgKi8KKwkJCQlyZXQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXJldCA9IC1FTk9EQVRBOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfTk9XOgorCQlpZiAoaW5mby0+YmF0X29ubGluZSkgeworCQkJcmV0ID0gc3RhcnRfbWVhc3VyZShpbmZvLCBNRUFTVVJFX0lTTlMpOworCQkJaWYgKHJldCA+PSAwKSB7CisJCQkJdG1wID0gKGxvbmcgbG9uZyBpbnQpcmV0ICogNjI1MCAvIDQwOTYgLSAzMTI1OworCQkJCXJldCA9IChpbnQpdG1wOworCQkJCXZhbC0+aW50dmFsID0gMDsKKwkJCQlpZiAocmV0ID4gMCkKKwkJCQkJdmFsLT5pbnR2YWwgPSByZXQ7IC8qIHVuaXQgaXMgbUEgKi8KKwkJCQlyZXQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXJldCA9IC1FTk9EQVRBOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9UWVBFOgorCQlpZiAoIWluZm8tPmJhdF9vbmxpbmUpIHsKKwkJCXJldCA9IC1FTk9EQVRBOworCQkJYnJlYWs7CisJCX0KKwkJcmV0ID0gbWF4ODkyNV9yZWdfcmVhZChpbmZvLT5ncG0sIE1BWDg5MjVfQ0hHX1NUQVRVUyk7CisJCXJldCA9IChyZXQgJiBNQVg4OTI1X0NIR19TVEFUX01PREVfTUFTSykgPj4gMjsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAxOgorCQkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfQ0hBUkdFX1RZUEVfRkFTVDsKKwkJCWJyZWFrOworCQljYXNlIDA6CisJCWNhc2UgMjoKKwkJCXZhbC0+aW50dmFsID0gUE9XRVJfU1VQUExZX0NIQVJHRV9UWVBFX1RSSUNLTEU7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfQ0hBUkdFX1RZUEVfTk9ORTsKKwkJCWJyZWFrOworCQl9CisJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfU1RBVFVTOgorCQlpZiAoIWluZm8tPmJhdF9vbmxpbmUpIHsKKwkJCXJldCA9IC1FTk9EQVRBOworCQkJYnJlYWs7CisJCX0KKwkJcmV0ID0gbWF4ODkyNV9yZWdfcmVhZChpbmZvLT5ncG0sIE1BWDg5MjVfQ0hHX1NUQVRVUyk7CisJCWlmIChpbmZvLT51c2Jfb25saW5lIHx8IGluZm8tPmFjX29ubGluZSkgeworCQkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX05PVF9DSEFSR0lORzsKKwkJCWlmIChyZXQgJiBNQVg4OTI1X0NIR19TVEFUX0VOX01BU0spCisJCQkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0NIQVJHSU5HOworCQl9IGVsc2UKKwkJCXZhbC0+aW50dmFsID0gUE9XRVJfU1VQUExZX1NUQVRVU19ESVNDSEFSR0lORzsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT0RFVjsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBtYXg4OTI1X2JhdHRlcnlfcHJvcHNbXSA9IHsKKwlQT1dFUl9TVVBQTFlfUFJPUF9PTkxJTkUsCisJUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1csCisJUE9XRVJfU1VQUExZX1BST1BfQ1VSUkVOVF9OT1csCisJUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX1RZUEUsCisJUE9XRVJfU1VQUExZX1BST1BfU1RBVFVTLAorfTsKKworI2RlZmluZSBSRVFVRVNUX0lSUShfaXJxLCBfbmFtZSkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoY2hpcC0+aXJxX2Jhc2UgKyBfaXJxLCBOVUxMLAkJXAorCQkJCSAgICBtYXg4OTI1X2NoYXJnZXJfaGFuZGxlciwJCVwKKwkJCQkgICAgSVJRRl9PTkVTSE9ULCBfbmFtZSwgaW5mbyk7CQlcCisJaWYgKHJldCkJCQkJCQkJXAorCQlkZXZfZXJyKGNoaXAtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IElSUSAjJWQ6ICVkXG4iLAlcCisJCQlfaXJxLCByZXQpOwkJCQkJXAorfSB3aGlsZSAoMCkKKworc3RhdGljIF9fZGV2aW5pdCBpbnQgbWF4ODkyNV9pbml0X2NoYXJnZXIoc3RydWN0IG1heDg5MjVfY2hpcCAqY2hpcCwKKwkJCQkJICBzdHJ1Y3QgbWF4ODkyNV9wb3dlcl9pbmZvICppbmZvKQoreworCWludCByZXQ7CisKKwlSRVFVRVNUX0lSUShNQVg4OTI1X0lSUV9WQ0hHX0RDX09WUCwgImFjLW92cCIpOworCVJFUVVFU1RfSVJRKE1BWDg5MjVfSVJRX1ZDSEdfRENfRiwgImFjLXJlbW92ZSIpOworCVJFUVVFU1RfSVJRKE1BWDg5MjVfSVJRX1ZDSEdfRENfUiwgImFjLWluc2VydCIpOworCVJFUVVFU1RfSVJRKE1BWDg5MjVfSVJRX1ZDSEdfVVNCX09WUCwgInVzYi1vdnAiKTsKKwlSRVFVRVNUX0lSUShNQVg4OTI1X0lSUV9WQ0hHX1VTQl9GLCAidXNiLXJlbW92ZSIpOworCVJFUVVFU1RfSVJRKE1BWDg5MjVfSVJRX1ZDSEdfVVNCX1IsICJ1c2ItaW5zZXJ0Iik7CisJUkVRVUVTVF9JUlEoTUFYODkyNV9JUlFfVkNIR19USE1fT0tfUiwgImJhdHQtdGVtcC1pbi1yYW5nZSIpOworCVJFUVVFU1RfSVJRKE1BWDg5MjVfSVJRX1ZDSEdfVEhNX09LX0YsICJiYXR0LXRlbXAtb3V0LXJhbmdlIik7CisJUkVRVUVTVF9JUlEoTUFYODkyNV9JUlFfVkNIR19TWVNMT1dfRiwgInZzeXMtaGlnaCIpOworCVJFUVVFU1RfSVJRKE1BWDg5MjVfSVJRX1ZDSEdfU1lTTE9XX1IsICJ2c3lzLWxvdyIpOworCVJFUVVFU1RfSVJRKE1BWDg5MjVfSVJRX1ZDSEdfUlNULCAiY2hhcmdlci1yZXNldCIpOworCVJFUVVFU1RfSVJRKE1BWDg5MjVfSVJRX1ZDSEdfRE9ORSwgImNoYXJnZXItZG9uZSIpOworCVJFUVVFU1RfSVJRKE1BWDg5MjVfSVJRX1ZDSEdfVE9QT0ZGLCAiY2hhcmdlci10b3BvZmYiKTsKKwlSRVFVRVNUX0lSUShNQVg4OTI1X0lSUV9WQ0hHX1RNUl9GQVVMVCwgImNoYXJnZXItdGltZXItZXhwaXJlIik7CisKKwlpbmZvLT5hY19vbmxpbmUgPSAwOworCWluZm8tPnVzYl9vbmxpbmUgPSAwOworCWluZm8tPmJhdF9vbmxpbmUgPSAwOworCXJldCA9IG1heDg5MjVfcmVnX3JlYWQoaW5mby0+Z3BtLCBNQVg4OTI1X0NIR19TVEFUVVMpOworCWlmIChyZXQgPj0gMCkgeworCQkvKgorCQkgKiBJZiBiYXR0ZXJ5IGRldGVjdGlvbiBpcyBlbmFibGVkLCBJRCBwaW4gb2YgYmF0dGVyeSBpcworCQkgKiBjb25uZWN0ZWQgdG8gTUJERVQgcGluIG9mIE1BWDg5MjUuIEl0IGNvdWxkIGJlIHVzZWQgdG8KKwkJICogZGV0ZWN0IGJhdHRlcnkgcHJlc2VuY2UuCisJCSAqIE90aGVyd2lzZSwgd2UgaGF2ZSB0byBhc3N1bWUgdGhhdCBiYXR0ZXJ5IGlzIGFsd2F5cyBvbi4KKwkJICovCisJCWlmIChpbmZvLT5iYXR0X2RldGVjdCkKKwkJCWluZm8tPmJhdF9vbmxpbmUgPSAocmV0ICYgTUFYODkyNV9DSEdfTUJERVQpID8gMCA6IDE7CisJCWVsc2UKKwkJCWluZm8tPmJhdF9vbmxpbmUgPSAxOworCQlpZiAocmV0ICYgTUFYODkyNV9DSEdfQUNfUkFOR0VfTUFTSykKKwkJCWluZm8tPmFjX29ubGluZSA9IDE7CisJCWVsc2UKKwkJCWluZm8tPmFjX29ubGluZSA9IDA7CisJfQorCS8qIGRpc2FibGUgY2hhcmdlICovCisJbWF4ODkyNV9zZXRfYml0cyhpbmZvLT5ncG0sIE1BWDg5MjVfQ0hHX0NOVEwxLCAxIDw8IDcsIDEgPDwgNyk7CisJLyogc2V0IGNoYXJnaW5nIGN1cnJlbnQgaW4gY2hhcmdlIHRvcG9mZiBtb2RlICovCisJbWF4ODkyNV9zZXRfYml0cyhpbmZvLT5ncG0sIE1BWDg5MjVfQ0hHX0NOVEwxLCAzIDw8IDUsCisJCQkgaW5mby0+dG9wb2ZmX3RocmVzaG9sZCA8PCA1KTsKKwkvKiBzZXQgY2hhcmluZyBjdXJyZW50IGluIGZhc3QgY2hhcmdlIG1vZGUgKi8KKwltYXg4OTI1X3NldF9iaXRzKGluZm8tPmdwbSwgTUFYODkyNV9DSEdfQ05UTDEsIDcsIGluZm8tPmZhc3RfY2hhcmdlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgX19kZXZleGl0IGludCBtYXg4OTI1X2RlaW5pdF9jaGFyZ2VyKHN0cnVjdCBtYXg4OTI1X3Bvd2VyX2luZm8gKmluZm8pCit7CisJc3RydWN0IG1heDg5MjVfY2hpcCAqY2hpcCA9IGluZm8tPmNoaXA7CisJaW50IGlycTsKKworCWlycSA9IGNoaXAtPmlycV9iYXNlICsgTUFYODkyNV9JUlFfVkNIR19EQ19PVlA7CisJZm9yICg7IGlycSA8PSBjaGlwLT5pcnFfYmFzZSArIE1BWDg5MjVfSVJRX1ZDSEdfVE1SX0ZBVUxUOyBpcnErKykKKwkJZnJlZV9pcnEoaXJxLCBpbmZvKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgX19kZXZpbml0IGludCBtYXg4OTI1X3Bvd2VyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1heDg5MjVfY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgbWF4ODkyNV9wbGF0Zm9ybV9kYXRhICptYXg4OTI1X3BkYXRhOworCXN0cnVjdCBtYXg4OTI1X3Bvd2VyX3BkYXRhICpwZGF0YSA9IE5VTEw7CisJc3RydWN0IG1heDg5MjVfcG93ZXJfaW5mbyAqaW5mbzsKKwlpbnQgcmV0OworCisJaWYgKHBkZXYtPmRldi5wYXJlbnQtPnBsYXRmb3JtX2RhdGEpIHsKKwkJbWF4ODkyNV9wZGF0YSA9IHBkZXYtPmRldi5wYXJlbnQtPnBsYXRmb3JtX2RhdGE7CisJCXBkYXRhID0gbWF4ODkyNV9wZGF0YS0+cG93ZXI7CisJfQorCisJaWYgKCFwZGF0YSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwbGF0Zm9ybSBkYXRhIGlzbid0IGFzc2lnbmVkIHRvICIKKwkJCSJwb3dlciBzdXBwbHlcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1heDg5MjVfcG93ZXJfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisJaW5mby0+Y2hpcCA9IGNoaXA7CisJaW5mby0+Z3BtID0gY2hpcC0+aTJjOworCWluZm8tPmFkYyA9IGNoaXAtPmFkYzsKKworCWluZm8tPmFjLm5hbWUgPSAibWF4ODkyNS1hYyI7CisJaW5mby0+YWMudHlwZSA9IFBPV0VSX1NVUFBMWV9UWVBFX01BSU5TOworCWluZm8tPmFjLnByb3BlcnRpZXMgPSBtYXg4OTI1X2FjX3Byb3BzOworCWluZm8tPmFjLm51bV9wcm9wZXJ0aWVzID0gQVJSQVlfU0laRShtYXg4OTI1X2FjX3Byb3BzKTsKKwlpbmZvLT5hYy5nZXRfcHJvcGVydHkgPSBtYXg4OTI1X2FjX2dldF9wcm9wOworCXJldCA9IHBvd2VyX3N1cHBseV9yZWdpc3RlcigmcGRldi0+ZGV2LCAmaW5mby0+YWMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCWluZm8tPmFjLmRldi0+cGFyZW50ID0gJnBkZXYtPmRldjsKKworCWluZm8tPnVzYi5uYW1lID0gIm1heDg5MjUtdXNiIjsKKwlpbmZvLT51c2IudHlwZSA9IFBPV0VSX1NVUFBMWV9UWVBFX1VTQjsKKwlpbmZvLT51c2IucHJvcGVydGllcyA9IG1heDg5MjVfdXNiX3Byb3BzOworCWluZm8tPnVzYi5udW1fcHJvcGVydGllcyA9IEFSUkFZX1NJWkUobWF4ODkyNV91c2JfcHJvcHMpOworCWluZm8tPnVzYi5nZXRfcHJvcGVydHkgPSBtYXg4OTI1X3VzYl9nZXRfcHJvcDsKKwlyZXQgPSBwb3dlcl9zdXBwbHlfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJmluZm8tPnVzYik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdXNiOworCWluZm8tPnVzYi5kZXYtPnBhcmVudCA9ICZwZGV2LT5kZXY7CisKKwlpbmZvLT5iYXR0ZXJ5Lm5hbWUgPSAibWF4ODkyNS1iYXR0ZXJ5IjsKKwlpbmZvLT5iYXR0ZXJ5LnR5cGUgPSBQT1dFUl9TVVBQTFlfVFlQRV9CQVRURVJZOworCWluZm8tPmJhdHRlcnkucHJvcGVydGllcyA9IG1heDg5MjVfYmF0dGVyeV9wcm9wczsKKwlpbmZvLT5iYXR0ZXJ5Lm51bV9wcm9wZXJ0aWVzID0gQVJSQVlfU0laRShtYXg4OTI1X2JhdHRlcnlfcHJvcHMpOworCWluZm8tPmJhdHRlcnkuZ2V0X3Byb3BlcnR5ID0gbWF4ODkyNV9iYXRfZ2V0X3Byb3A7CisJcmV0ID0gcG93ZXJfc3VwcGx5X3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZpbmZvLT5iYXR0ZXJ5KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9iYXR0ZXJ5OworCWluZm8tPmJhdHRlcnkuZGV2LT5wYXJlbnQgPSAmcGRldi0+ZGV2OworCisJaW5mby0+YmF0dF9kZXRlY3QgPSBwZGF0YS0+YmF0dF9kZXRlY3Q7CisJaW5mby0+dG9wb2ZmX3RocmVzaG9sZCA9IHBkYXRhLT50b3BvZmZfdGhyZXNob2xkOworCWluZm8tPmZhc3RfY2hhcmdlID0gcGRhdGEtPmZhc3RfY2hhcmdlOworCWluZm8tPnNldF9jaGFyZ2VyID0gcGRhdGEtPnNldF9jaGFyZ2VyOworCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKKworCW1heDg5MjVfaW5pdF9jaGFyZ2VyKGNoaXAsIGluZm8pOworCXJldHVybiAwOworb3V0X2JhdHRlcnk6CisJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoJmluZm8tPmJhdHRlcnkpOworb3V0X3VzYjoKKwlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmaW5mby0+YWMpOworb3V0OgorCWtmcmVlKGluZm8pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBfX2RldmV4aXQgaW50IG1heDg5MjVfcG93ZXJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1heDg5MjVfcG93ZXJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKGluZm8pIHsKKwkJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoJmluZm8tPmFjKTsKKwkJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoJmluZm8tPnVzYik7CisJCXBvd2VyX3N1cHBseV91bnJlZ2lzdGVyKCZpbmZvLT5iYXR0ZXJ5KTsKKwkJbWF4ODkyNV9kZWluaXRfY2hhcmdlcihpbmZvKTsKKwkJa2ZyZWUoaW5mbyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYXg4OTI1X3Bvd2VyX2RyaXZlciA9IHsKKwkucHJvYmUJPSBtYXg4OTI1X3Bvd2VyX3Byb2JlLAorCS5yZW1vdmUJPSBfX2RldmV4aXRfcChtYXg4OTI1X3Bvd2VyX3JlbW92ZSksCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAibWF4ODkyNS1wb3dlciIsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1heDg5MjVfcG93ZXJfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1heDg5MjVfcG93ZXJfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KG1heDg5MjVfcG93ZXJfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtYXg4OTI1X3Bvd2VyX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWF4ODkyNV9wb3dlcl9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQobWF4ODkyNV9wb3dlcl9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQb3dlciBzdXBwbHkgZHJpdmVyIGZvciBNQVg4OTI1Iik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm1heDg5MjUtcG93ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvd204MzUwX3Bvd2VyLmMgYi9kcml2ZXJzL3Bvd2VyL3dtODM1MF9wb3dlci5jCmluZGV4IGFkNGYwNzEuLjA2OTM5MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvd204MzUwX3Bvd2VyLmMKKysrIGIvZHJpdmVycy9wb3dlci93bTgzNTBfcG93ZXIuYwpAQCAtMTkwLDcgKzE5MCw3IEBACiAJc3RydWN0IHdtODM1MF9wb3dlciAqcG93ZXIgPSAmd204MzUwLT5wb3dlcjsKIAlzdHJ1Y3Qgd204MzUwX2NoYXJnZXJfcG9saWN5ICpwb2xpY3kgPSBwb3dlci0+cG9saWN5OwogCi0Jc3dpdGNoIChpcnEpIHsKKwlzd2l0Y2ggKGlycSAtIHdtODM1MC0+aXJxX2Jhc2UpIHsKIAljYXNlIFdNODM1MF9JUlFfQ0hHX0JBVF9GQUlMOgogCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAiYmF0dGVyeSBmYWlsZWRcbiIpOwogCQlicmVhazsKQEAgLTQyOCwxOCArNDI4LDE4IEBACiAKIHN0YXRpYyB2b2lkIGZyZWVfY2hhcmdlcl9pcnEoc3RydWN0IHdtODM1MCAqd204MzUwKQogewotCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX0JBVF9IT1QpOwotCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX0JBVF9DT0xEKTsKLQl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NIR19CQVRfRkFJTCk7Ci0Jd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfVE8pOwotCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX0VORCk7Ci0Jd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfU1RBUlQpOwotCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX1ZCQVRUX0xUXzNQOSk7Ci0Jd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfVkJBVFRfTFRfM1AxKTsKLQl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NIR19WQkFUVF9MVF8yUDg1KTsKLQl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0VYVF9VU0JfRkIpOwotCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfRVhUX1dBTExfRkIpOwotCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfRVhUX0JBVF9GQik7CisJd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfQkFUX0hPVCwgd204MzUwKTsKKwl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NIR19CQVRfQ09MRCwgd204MzUwKTsKKwl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NIR19CQVRfRkFJTCwgd204MzUwKTsKKwl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NIR19UTywgd204MzUwKTsKKwl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NIR19FTkQsIHdtODM1MCk7CisJd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfU1RBUlQsIHdtODM1MCk7CisJd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfVkJBVFRfTFRfM1A5LCB3bTgzNTApOworCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX1ZCQVRUX0xUXzNQMSwgd204MzUwKTsKKwl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NIR19WQkFUVF9MVF8yUDg1LCB3bTgzNTApOworCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfRVhUX1VTQl9GQiwgd204MzUwKTsKKwl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0VYVF9XQUxMX0ZCLCB3bTgzNTApOworCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfRVhUX0JBVF9GQiwgd204MzUwKTsKIH0KIAogc3RhdGljIF9fZGV2aW5pdCBpbnQgd204MzUwX3Bvd2VyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci84OHBtODYwNy5jIGIvZHJpdmVycy9yZWd1bGF0b3IvODhwbTg2MDcuYwppbmRleCAwNDcxOTU1Li41ZmI4M2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci84OHBtODYwNy5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yLzg4cG04NjA3LmMKQEAgLTExLDE1ICsxMSwxNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KLSNpbmNsdWRlIDxsaW51eC9tZmQvODhwbTg2MDcuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvODhwbTg2MHguaD4KIAogc3RydWN0IHBtODYwN19yZWd1bGF0b3JfaW5mbyB7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXNjCWRlc2M7Ci0Jc3RydWN0IHBtODYwN19jaGlwCSpjaGlwOworCXN0cnVjdCBwbTg2MHhfY2hpcAkqY2hpcDsKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldgkqcmVndWxhdG9yOworCXN0cnVjdCBpMmNfY2xpZW50CSppMmM7CiAKIAlpbnQJbWluX3VWOwogCWludAltYXhfdVY7CkBAIC00Niw3ICs0OCw2IEBACiBzdGF0aWMgaW50IHBtODYwN19saXN0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIHVuc2lnbmVkIGluZGV4KQogewogCXN0cnVjdCBwbTg2MDdfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwotCXVpbnQ4X3QgY2hpcF9pZCA9IGluZm8tPmNoaXAtPmNoaXBfaWQ7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKIAlzd2l0Y2ggKGluZm8tPmRlc2MuaWQpIHsKQEAgLTg4LDc5ICs4OSwyOSBAQAogCWNhc2UgUE04NjA3X0lEX0xETzI6CiAJY2FzZSBQTTg2MDdfSURfTERPMzoKIAljYXNlIFBNODYwN19JRF9MRE85OgotCQlzd2l0Y2ggKGNoaXBfaWQpIHsKLQkJY2FzZSBQTTg2MDdfQ0hJUF9BMDoKLQkJY2FzZSBQTTg2MDdfQ0hJUF9BMToKLQkJCXJldCA9IChpbmRleCA8IDMpID8gKGluZGV4ICogNTAwMDAgKyAxODAwMDAwKSA6Ci0JCQkJKChpbmRleCA8IDgpID8gKGluZGV4ICogNTAwMDAgKyAyNTUwMDAwKSA6Ci0JCQkJIC1FSU5WQUwpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUE04NjA3X0NISVBfQjA6Ci0JCQlyZXQgPSAoaW5kZXggPCAzKSA/IChpbmRleCAqIDUwMDAwICsgMTgwMDAwMCkgOgotCQkJCSgoaW5kZXggPCA3KSA/IChpbmRleCAqIDUwMDAwICsgMjU1MDAwMCkgOgotCQkJCTMzMDAwMDApOwotCQkJYnJlYWs7Ci0JCX0KKwkJcmV0ID0gKGluZGV4IDwgMykgPyAoaW5kZXggKiA1MDAwMCArIDE4MDAwMDApIDoKKwkJCSgoaW5kZXggPCA3KSA/IChpbmRleCAqIDUwMDAwICsgMjU1MDAwMCkgOgorCQkJMzMwMDAwMCk7CiAJCWJyZWFrOwogCWNhc2UgUE04NjA3X0lEX0xETzQ6Ci0JCXN3aXRjaCAoY2hpcF9pZCkgewotCQljYXNlIFBNODYwN19DSElQX0EwOgotCQljYXNlIFBNODYwN19DSElQX0ExOgotCQkJcmV0ID0gKGluZGV4IDwgMykgPyAoaW5kZXggKiA1MDAwMCArIDE4MDAwMDApIDoKLQkJCQkoKGluZGV4IDwgOCkgPyAoaW5kZXggKiA1MDAwMCArIDI1NTAwMDApIDoKLQkJCQkgLUVJTlZBTCk7Ci0JCQlicmVhazsKLQkJY2FzZSBQTTg2MDdfQ0hJUF9CMDoKLQkJCXJldCA9IChpbmRleCA8IDMpID8gKGluZGV4ICogNTAwMDAgKyAxODAwMDAwKSA6Ci0JCQkJKChpbmRleCA8IDYpID8gKGluZGV4ICogNTAwMDAgKyAyNTUwMDAwKSA6Ci0JCQkJKChpbmRleCA9PSA2KSA/IDI5MDAwMDAgOiAzMzAwMDAwKSk7Ci0JCQlicmVhazsKLQkJfQorCQlyZXQgPSAoaW5kZXggPCAzKSA/IChpbmRleCAqIDUwMDAwICsgMTgwMDAwMCkgOgorCQkJKChpbmRleCA8IDYpID8gKGluZGV4ICogNTAwMDAgKyAyNTUwMDAwKSA6CisJCQkoKGluZGV4ID09IDYpID8gMjkwMDAwMCA6IDMzMDAwMDApKTsKIAkJYnJlYWs7CiAJY2FzZSBQTTg2MDdfSURfTERPNjoKLQkJc3dpdGNoIChjaGlwX2lkKSB7Ci0JCWNhc2UgUE04NjA3X0NISVBfQTA6Ci0JCWNhc2UgUE04NjA3X0NISVBfQTE6Ci0JCQlyZXQgPSAoaW5kZXggPCAzKSA/IChpbmRleCAqIDUwMDAwICsgMTgwMDAwMCkgOgotCQkJCSgoaW5kZXggPCA4KSA/IChpbmRleCAqIDUwMDAwICsgMjQ1MDAwMCkgOgotCQkJCS1FSU5WQUwpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUE04NjA3X0NISVBfQjA6Ci0JCQlyZXQgPSAoaW5kZXggPCAyKSA/IChpbmRleCAqIDUwMDAwICsgMTgwMDAwMCkgOgotCQkJCSgoaW5kZXggPCA3KSA/IChpbmRleCAqIDUwMDAwICsgMjUwMDAwMCkgOgotCQkJCTMzMDAwMDApOwotCQkJYnJlYWs7Ci0JCX0KKwkJcmV0ID0gKGluZGV4IDwgMikgPyAoaW5kZXggKiA1MDAwMCArIDE4MDAwMDApIDoKKwkJCSgoaW5kZXggPCA3KSA/IChpbmRleCAqIDUwMDAwICsgMjUwMDAwMCkgOgorCQkJMzMwMDAwMCk7CiAJCWJyZWFrOwogCWNhc2UgUE04NjA3X0lEX0xETzEwOgotCQlzd2l0Y2ggKGNoaXBfaWQpIHsKLQkJY2FzZSBQTTg2MDdfQ0hJUF9BMDoKLQkJY2FzZSBQTTg2MDdfQ0hJUF9BMToKLQkJCXJldCA9IChpbmRleCA8IDMpID8gKGluZGV4ICogNTAwMDAgKyAxODAwMDAwKSA6Ci0JCQkJKChpbmRleCA8IDgpID8gKGluZGV4ICogNTAwMDAgKyAyNTUwMDAwKSA6Ci0JCQkJMTIwMDAwMCk7Ci0JCQlicmVhazsKLQkJY2FzZSBQTTg2MDdfQ0hJUF9CMDoKLQkJCXJldCA9IChpbmRleCA8IDMpID8gKGluZGV4ICogNTAwMDAgKyAxODAwMDAwKSA6Ci0JCQkJKChpbmRleCA8IDcpID8gKGluZGV4ICogNTAwMDAgKyAyNTUwMDAwKSA6Ci0JCQkJKChpbmRleCA9PSA3KSA/IDMzMDAwMDAgOiAxMjAwMDAwKSk7Ci0JCQlicmVhazsKLQkJfQorCQlyZXQgPSAoaW5kZXggPCAzKSA/IChpbmRleCAqIDUwMDAwICsgMTgwMDAwMCkgOgorCQkJKChpbmRleCA8IDcpID8gKGluZGV4ICogNTAwMDAgKyAyNTUwMDAwKSA6CisJCQkoKGluZGV4ID09IDcpID8gMzMwMDAwMCA6IDEyMDAwMDApKTsKIAkJYnJlYWs7CiAJY2FzZSBQTTg2MDdfSURfTERPMTQ6Ci0JCXN3aXRjaCAoY2hpcF9pZCkgewotCQljYXNlIFBNODYwN19DSElQX0EwOgotCQljYXNlIFBNODYwN19DSElQX0ExOgotCQkJcmV0ID0gKGluZGV4IDwgMykgPyAoaW5kZXggKiA1MDAwMCArIDE4MDAwMDApIDoKLQkJCQkoKGluZGV4IDwgOCkgPyAoaW5kZXggKiA1MDAwMCArIDI1NTAwMDApIDoKLQkJCQkgLUVJTlZBTCk7Ci0JCQlicmVhazsKLQkJY2FzZSBQTTg2MDdfQ0hJUF9CMDoKLQkJCXJldCA9IChpbmRleCA8IDIpID8gKGluZGV4ICogNTAwMDAgKyAxODAwMDAwKSA6Ci0JCQkJKChpbmRleCA8IDcpID8gKGluZGV4ICogNTAwMDAgKyAyNjAwMDAwKSA6Ci0JCQkJMzMwMDAwMCk7Ci0JCQlicmVhazsKLQkJfQorCQlyZXQgPSAoaW5kZXggPCAyKSA/IChpbmRleCAqIDUwMDAwICsgMTgwMDAwMCkgOgorCQkJKChpbmRleCA8IDcpID8gKGluZGV4ICogNTAwMDAgKyAyNjAwMDAwKSA6CisJCQkzMzAwMDAwKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiByZXQ7CkBAIC0xNjksNyArMTIwLDYgQEAKIHN0YXRpYyBpbnQgY2hvb3NlX3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIGludCBtaW5fdVYsIGludCBtYXhfdVYpCiB7CiAJc3RydWN0IHBtODYwN19yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7Ci0JdWludDhfdCBjaGlwX2lkID0gaW5mby0+Y2hpcC0+Y2hpcF9pZDsKIAlpbnQgdmFsID0gLUVOT0VOVDsKIAlpbnQgcmV0OwogCkBAIC0yNTQsMTYxICsyMDQsNzcgQEAKIAljYXNlIFBNODYwN19JRF9MRE8yOgogCWNhc2UgUE04NjA3X0lEX0xETzM6CiAJY2FzZSBQTTg2MDdfSURfTERPOToKLQkJc3dpdGNoIChjaGlwX2lkKSB7Ci0JCWNhc2UgUE04NjA3X0NISVBfQTA6Ci0JCWNhc2UgUE04NjA3X0NISVBfQTE6Ci0JCQlpZiAobWluX3VWIDwgMjcwMDAwMCkJLyogMTgwMG1WIH4gMTkwMG1WIC8gNTBtViAqLwotCQkJCWlmIChtaW5fdVYgPD0gMTgwMDAwMCkKLQkJCQkJdmFsID0gMDsKLQkJCQllbHNlIGlmIChtaW5fdVYgPD0gMTkwMDAwMCkKLQkJCQkJdmFsID0gKG1pbl91ViAtIDE3NTAwMDEpIC8gNTAwMDA7Ci0JCQkJZWxzZQotCQkJCQl2YWwgPSAzOwkvKiAyNzAwbVYgKi8KLQkJCWVsc2UgewkJCS8qIDI3MDBtViB+IDI5MDBtViAvIDUwbVYgKi8KLQkJCQlpZiAobWluX3VWIDw9IDI5MDAwMDApIHsKLQkJCQkJdmFsID0gKG1pbl91ViAtIDI2NTAwMDEpIC8gNTAwMDA7Ci0JCQkJCXZhbCArPSAzOwotCQkJCX0gZWxzZQotCQkJCQl2YWwgPSAtRUlOVkFMOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgUE04NjA3X0NISVBfQjA6Ci0JCQlpZiAobWluX3VWIDwgMjcwMDAwMCkgewkvKiAxODAwbVYgfiAxOTAwbVYgLyA1MG1WICovCi0JCQkJaWYgKG1pbl91ViA8PSAxODAwMDAwKQotCQkJCQl2YWwgPSAwOwotCQkJCWVsc2UgaWYgKG1pbl91ViA8PSAxOTAwMDAwKQotCQkJCQl2YWwgPSAobWluX3VWIC0gMTc1MDAwMSkgLyA1MDAwMDsKLQkJCQllbHNlCi0JCQkJCXZhbCA9IDM7CS8qIDI3MDBtViAqLwotCQkJfSBlbHNlIHsJCSAvKiAyNzAwbVYgfiAyODUwbVYgLyA1MG1WICovCi0JCQkJaWYgKG1pbl91ViA8PSAyODUwMDAwKSB7Ci0JCQkJCXZhbCA9IChtaW5fdVYgLSAyNjUwMDAxKSAvIDUwMDAwOwotCQkJCQl2YWwgKz0gMzsKLQkJCQl9IGVsc2UgaWYgKG1pbl91ViA8PSAzMzAwMDAwKQotCQkJCQl2YWwgPSA3OwotCQkJCWVsc2UKLQkJCQkJdmFsID0gLUVJTlZBTDsKLQkJCX0KLQkJCWJyZWFrOworCQlpZiAobWluX3VWIDwgMjcwMDAwMCkgewkvKiAxODAwbVYgfiAxOTAwbVYgLyA1MG1WICovCisJCQlpZiAobWluX3VWIDw9IDE4MDAwMDApCisJCQkJdmFsID0gMDsKKwkJCWVsc2UgaWYgKG1pbl91ViA8PSAxOTAwMDAwKQorCQkJCXZhbCA9IChtaW5fdVYgLSAxNzUwMDAxKSAvIDUwMDAwOworCQkJZWxzZQorCQkJCXZhbCA9IDM7CS8qIDI3MDBtViAqLworCQl9IGVsc2UgewkJIC8qIDI3MDBtViB+IDI4NTBtViAvIDUwbVYgKi8KKwkJCWlmIChtaW5fdVYgPD0gMjg1MDAwMCkgeworCQkJCXZhbCA9IChtaW5fdVYgLSAyNjUwMDAxKSAvIDUwMDAwOworCQkJCXZhbCArPSAzOworCQkJfSBlbHNlIGlmIChtaW5fdVYgPD0gMzMwMDAwMCkKKwkJCQl2YWwgPSA3OworCQkJZWxzZQorCQkJCXZhbCA9IC1FSU5WQUw7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQTTg2MDdfSURfTERPNDoKLQkJc3dpdGNoIChjaGlwX2lkKSB7Ci0JCWNhc2UgUE04NjA3X0NISVBfQTA6Ci0JCWNhc2UgUE04NjA3X0NISVBfQTE6Ci0JCQlpZiAobWluX3VWIDwgMjcwMDAwMCkJLyogMTgwMG1WIH4gMTkwMG1WIC8gNTBtViAqLwotCQkJCWlmIChtaW5fdVYgPD0gMTgwMDAwMCkKLQkJCQkJdmFsID0gMDsKLQkJCQllbHNlIGlmIChtaW5fdVYgPD0gMTkwMDAwMCkKLQkJCQkJdmFsID0gKG1pbl91ViAtIDE3NTAwMDEpIC8gNTAwMDA7Ci0JCQkJZWxzZQotCQkJCQl2YWwgPSAzOwkvKiAyNzAwbVYgKi8KLQkJCWVsc2UgewkJCS8qIDI3MDBtViB+IDI5MDBtViAvIDUwbVYgKi8KLQkJCQlpZiAobWluX3VWIDw9IDI5MDAwMDApIHsKLQkJCQkJdmFsID0gKG1pbl91ViAtIDI2NTAwMDEpIC8gNTAwMDA7Ci0JCQkJCXZhbCArPSAzOwotCQkJCX0gZWxzZQotCQkJCQl2YWwgPSAtRUlOVkFMOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgUE04NjA3X0NISVBfQjA6Ci0JCQlpZiAobWluX3VWIDwgMjcwMDAwMCkgewkvKiAxODAwbVYgfiAxOTAwbVYgLyA1MG1WICovCi0JCQkJaWYgKG1pbl91ViA8PSAxODAwMDAwKQotCQkJCQl2YWwgPSAwOwotCQkJCWVsc2UgaWYgKG1pbl91ViA8PSAxOTAwMDAwKQotCQkJCQl2YWwgPSAobWluX3VWIC0gMTc1MDAwMSkgLyA1MDAwMDsKLQkJCQllbHNlCi0JCQkJCXZhbCA9IDM7CS8qIDI3MDBtViAqLwotCQkJfSBlbHNlIHsJCSAvKiAyNzAwbVYgfiAyODAwbVYgLyA1MG1WICovCi0JCQkJaWYgKG1pbl91ViA8PSAyODUwMDAwKSB7Ci0JCQkJCXZhbCA9IChtaW5fdVYgLSAyNjUwMDAxKSAvIDUwMDAwOwotCQkJCQl2YWwgKz0gMzsKLQkJCQl9IGVsc2UgaWYgKG1pbl91ViA8PSAyOTAwMDAwKQotCQkJCQl2YWwgPSA2OwotCQkJCWVsc2UgaWYgKG1pbl91ViA8PSAzMzAwMDAwKQotCQkJCQl2YWwgPSA3OwotCQkJCWVsc2UKLQkJCQkJdmFsID0gLUVJTlZBTDsKLQkJCX0KLQkJCWJyZWFrOworCQlpZiAobWluX3VWIDwgMjcwMDAwMCkgewkvKiAxODAwbVYgfiAxOTAwbVYgLyA1MG1WICovCisJCQlpZiAobWluX3VWIDw9IDE4MDAwMDApCisJCQkJdmFsID0gMDsKKwkJCWVsc2UgaWYgKG1pbl91ViA8PSAxOTAwMDAwKQorCQkJCXZhbCA9IChtaW5fdVYgLSAxNzUwMDAxKSAvIDUwMDAwOworCQkJZWxzZQorCQkJCXZhbCA9IDM7CS8qIDI3MDBtViAqLworCQl9IGVsc2UgewkJIC8qIDI3MDBtViB+IDI4MDBtViAvIDUwbVYgKi8KKwkJCWlmIChtaW5fdVYgPD0gMjg1MDAwMCkgeworCQkJCXZhbCA9IChtaW5fdVYgLSAyNjUwMDAxKSAvIDUwMDAwOworCQkJCXZhbCArPSAzOworCQkJfSBlbHNlIGlmIChtaW5fdVYgPD0gMjkwMDAwMCkKKwkJCQl2YWwgPSA2OworCQkJZWxzZSBpZiAobWluX3VWIDw9IDMzMDAwMDApCisJCQkJdmFsID0gNzsKKwkJCWVsc2UKKwkJCQl2YWwgPSAtRUlOVkFMOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUE04NjA3X0lEX0xETzY6Ci0JCXN3aXRjaCAoY2hpcF9pZCkgewotCQljYXNlIFBNODYwN19DSElQX0EwOgotCQljYXNlIFBNODYwN19DSElQX0ExOgotCQkJaWYgKG1pbl91ViA8IDI2MDAwMDApIHsJLyogMTgwMG1WIH4gMTkwMG1WIC8gNTBtViAqLwotCQkJCWlmIChtaW5fdVYgPD0gMTgwMDAwMCkKLQkJCQkJdmFsID0gMDsKLQkJCQllbHNlIGlmIChtaW5fdVYgPD0gMTkwMDAwMCkKLQkJCQkJdmFsID0gKG1pbl91ViAtIDE3NTAwMDEpIC8gNTAwMDA7Ci0JCQkJZWxzZQotCQkJCQl2YWwgPSAzOwkvKiAyNjAwbVYgKi8KLQkJCX0gZWxzZSB7CQkvKiAyNjAwbVYgfiAyODAwbVYgLyA1MG1WICovCi0JCQkJaWYgKG1pbl91ViA8PSAyODAwMDAwKSB7Ci0JCQkJCXZhbCA9IChtaW5fdVYgLSAyNTUwMDAxKSAvIDUwMDAwOwotCQkJCQl2YWwgKz0gMzsKLQkJCQl9IGVsc2UKLQkJCQkJdmFsID0gLUVJTlZBTDsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFBNODYwN19DSElQX0IwOgotCQkJaWYgKG1pbl91ViA8IDI2MDAwMDApIHsJLyogMTgwMG1WIH4gMTg1MG1WIC8gNTBtViAqLwotCQkJCWlmIChtaW5fdVYgPD0gMTgwMDAwMCkKLQkJCQkJdmFsID0gMDsKLQkJCQllbHNlIGlmIChtaW5fdVYgPD0gMTg1MDAwMCkKLQkJCQkJdmFsID0gKG1pbl91ViAtIDE3NTAwMDEpIC8gNTAwMDA7Ci0JCQkJZWxzZQotCQkJCQl2YWwgPSAyOwkvKiAyNjAwbVYgKi8KLQkJCX0gZWxzZSB7CQkvKiAyNjAwbVYgfiAyODAwbVYgLyA1MG1WICovCi0JCQkJaWYgKG1pbl91ViA8PSAyODAwMDAwKSB7Ci0JCQkJCXZhbCA9IChtaW5fdVYgLSAyNTUwMDAxKSAvIDUwMDAwOwotCQkJCQl2YWwgKz0gMjsKLQkJCQl9IGVsc2UgaWYgKG1pbl91ViA8PSAzMzAwMDAwKQotCQkJCQl2YWwgPSA3OwotCQkJCWVsc2UKLQkJCQkJdmFsID0gLUVJTlZBTDsKLQkJCX0KLQkJCWJyZWFrOworCQlpZiAobWluX3VWIDwgMjYwMDAwMCkgewkvKiAxODAwbVYgfiAxODUwbVYgLyA1MG1WICovCisJCQlpZiAobWluX3VWIDw9IDE4MDAwMDApCisJCQkJdmFsID0gMDsKKwkJCWVsc2UgaWYgKG1pbl91ViA8PSAxODUwMDAwKQorCQkJCXZhbCA9IChtaW5fdVYgLSAxNzUwMDAxKSAvIDUwMDAwOworCQkJZWxzZQorCQkJCXZhbCA9IDI7CS8qIDI2MDBtViAqLworCQl9IGVsc2UgewkJLyogMjYwMG1WIH4gMjgwMG1WIC8gNTBtViAqLworCQkJaWYgKG1pbl91ViA8PSAyODAwMDAwKSB7CisJCQkJdmFsID0gKG1pbl91ViAtIDI1NTAwMDEpIC8gNTAwMDA7CisJCQkJdmFsICs9IDI7CisJCQl9IGVsc2UgaWYgKG1pbl91ViA8PSAzMzAwMDAwKQorCQkJCXZhbCA9IDc7CisJCQllbHNlCisJCQkJdmFsID0gLUVJTlZBTDsKIAkJfQogCQlicmVhazsKIAljYXNlIFBNODYwN19JRF9MRE8xNDoKLQkJc3dpdGNoIChjaGlwX2lkKSB7Ci0JCWNhc2UgUE04NjA3X0NISVBfQTA6Ci0JCWNhc2UgUE04NjA3X0NISVBfQTE6Ci0JCQlpZiAobWluX3VWIDwgMjcwMDAwMCkgewkvKiAxODAwbVYgfiAxOTAwbVYgLyA1MG1WICovCi0JCQkJaWYgKG1pbl91ViA8PSAxODAwMDAwKQotCQkJCQl2YWwgPSAwOwotCQkJCWVsc2UgaWYgKG1pbl91ViA8PSAxOTAwMDAwKQotCQkJCQl2YWwgPSAobWluX3VWIC0gMTc1MDAwMSkgLyA1MDAwMDsKLQkJCQllbHNlCi0JCQkJCXZhbCA9IDM7CS8qIDI3MDBtViAqLwotCQkJfSBlbHNlIHsJCSAvKiAyNzAwbVYgfiAyOTAwbVYgLyA1MG1WICovCi0JCQkJaWYgKG1pbl91ViA8PSAyOTAwMDAwKSB7Ci0JCQkJCXZhbCA9IChtaW5fdVYgLSAyNjUwMDAxKSAvIDUwMDAwOwotCQkJCQl2YWwgKz0gMzsKLQkJCQl9IGVsc2UKLQkJCQkJdmFsID0gLUVJTlZBTDsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFBNODYwN19DSElQX0IwOgotCQkJaWYgKG1pbl91ViA8IDI3MDAwMDApIHsJLyogMTgwMG1WIH4gMTg1MG1WIC8gNTBtViAqLwotCQkJCWlmIChtaW5fdVYgPD0gMTgwMDAwMCkKLQkJCQkJdmFsID0gMDsKLQkJCQllbHNlIGlmIChtaW5fdVYgPD0gMTg1MDAwMCkKLQkJCQkJdmFsID0gKG1pbl91ViAtIDE3NTAwMDEpIC8gNTAwMDA7Ci0JCQkJZWxzZQotCQkJCQl2YWwgPSAyOwkvKiAyNzAwbVYgKi8KLQkJCX0gZWxzZSB7CQkgLyogMjcwMG1WIH4gMjkwMG1WIC8gNTBtViAqLwotCQkJCWlmIChtaW5fdVYgPD0gMjkwMDAwMCkgewotCQkJCQl2YWwgPSAobWluX3VWIC0gMjY1MDAwMSkgLyA1MDAwMDsKLQkJCQkJdmFsICs9IDI7Ci0JCQkJfSBlbHNlIGlmIChtaW5fdVYgPD0gMzMwMDAwMCkKLQkJCQkJdmFsID0gNzsKLQkJCQllbHNlCi0JCQkJCXZhbCA9IC1FSU5WQUw7Ci0JCQl9Ci0JCQlicmVhazsKKwkJaWYgKG1pbl91ViA8IDI3MDAwMDApIHsJLyogMTgwMG1WIH4gMTg1MG1WIC8gNTBtViAqLworCQkJaWYgKG1pbl91ViA8PSAxODAwMDAwKQorCQkJCXZhbCA9IDA7CisJCQllbHNlIGlmIChtaW5fdVYgPD0gMTg1MDAwMCkKKwkJCQl2YWwgPSAobWluX3VWIC0gMTc1MDAwMSkgLyA1MDAwMDsKKwkJCWVsc2UKKwkJCQl2YWwgPSAyOwkvKiAyNzAwbVYgKi8KKwkJfSBlbHNlIHsJCSAvKiAyNzAwbVYgfiAyOTAwbVYgLyA1MG1WICovCisJCQlpZiAobWluX3VWIDw9IDI5MDAwMDApIHsKKwkJCQl2YWwgPSAobWluX3VWIC0gMjY1MDAwMSkgLyA1MDAwMDsKKwkJCQl2YWwgKz0gMjsKKwkJCX0gZWxzZSBpZiAobWluX3VWIDw9IDMzMDAwMDApCisJCQkJdmFsID0gNzsKKwkJCWVsc2UKKwkJCQl2YWwgPSAtRUlOVkFMOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTQyOCw3ICsyOTQsNiBAQAogCQkJICAgICAgaW50IG1pbl91ViwgaW50IG1heF91VikKIHsKIAlzdHJ1Y3QgcG04NjA3X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKLQlzdHJ1Y3QgcG04NjA3X2NoaXAgKmNoaXAgPSBpbmZvLT5jaGlwOwogCXVpbnQ4X3QgdmFsLCBtYXNrOwogCWludCByZXQ7CiAKQEAgLTQ0MywxMyArMzA4LDEzIEBACiAJdmFsID0gKHVpbnQ4X3QpKHJldCA8PCBpbmZvLT52b2xfc2hpZnQpOwogCW1hc2sgPSAoKDEgPDwgaW5mby0+dm9sX25iaXRzKSAtIDEpICA8PCBpbmZvLT52b2xfc2hpZnQ7CiAKLQlyZXQgPSBwbTg2MDdfc2V0X2JpdHMoY2hpcCwgaW5mby0+dm9sX3JlZywgbWFzaywgdmFsKTsKKwlyZXQgPSBwbTg2MHhfc2V0X2JpdHMoaW5mby0+aTJjLCBpbmZvLT52b2xfcmVnLCBtYXNrLCB2YWwpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAJc3dpdGNoIChpbmZvLT5kZXNjLmlkKSB7CiAJY2FzZSBQTTg2MDdfSURfQlVDSzE6CiAJY2FzZSBQTTg2MDdfSURfQlVDSzM6Ci0JCXJldCA9IHBtODYwN19zZXRfYml0cyhjaGlwLCBpbmZvLT51cGRhdGVfcmVnLAorCQlyZXQgPSBwbTg2MHhfc2V0X2JpdHMoaW5mby0+aTJjLCBpbmZvLT51cGRhdGVfcmVnLAogCQkJCSAgICAgIDEgPDwgaW5mby0+dXBkYXRlX2JpdCwKIAkJCQkgICAgICAxIDw8IGluZm8tPnVwZGF0ZV9iaXQpOwogCQlicmVhazsKQEAgLTQ2MCwxMSArMzI1LDEwIEBACiBzdGF0aWMgaW50IHBtODYwN19nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKIAlzdHJ1Y3QgcG04NjA3X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKLQlzdHJ1Y3QgcG04NjA3X2NoaXAgKmNoaXAgPSBpbmZvLT5jaGlwOwogCXVpbnQ4X3QgdmFsLCBtYXNrOwogCWludCByZXQ7CiAKLQlyZXQgPSBwbTg2MDdfcmVnX3JlYWQoY2hpcCwgaW5mby0+dm9sX3JlZyk7CisJcmV0ID0gcG04NjB4X3JlZ19yZWFkKGluZm8tPmkyYywgaW5mby0+dm9sX3JlZyk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTQ3Nyw5ICszNDEsOCBAQAogc3RhdGljIGludCBwbTg2MDdfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogewogCXN0cnVjdCBwbTg2MDdfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwotCXN0cnVjdCBwbTg2MDdfY2hpcCAqY2hpcCA9IGluZm8tPmNoaXA7CiAKLQlyZXR1cm4gcG04NjA3X3NldF9iaXRzKGNoaXAsIGluZm8tPmVuYWJsZV9yZWcsCisJcmV0dXJuIHBtODYweF9zZXRfYml0cyhpbmZvLT5pMmMsIGluZm8tPmVuYWJsZV9yZWcsCiAJCQkgICAgICAgMSA8PCBpbmZvLT5lbmFibGVfYml0LAogCQkJICAgICAgIDEgPDwgaW5mby0+ZW5hYmxlX2JpdCk7CiB9CkBAIC00ODcsMTkgKzM1MCwxNyBAQAogc3RhdGljIGludCBwbTg2MDdfZGlzYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKIAlzdHJ1Y3QgcG04NjA3X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKLQlzdHJ1Y3QgcG04NjA3X2NoaXAgKmNoaXAgPSBpbmZvLT5jaGlwOwogCi0JcmV0dXJuIHBtODYwN19zZXRfYml0cyhjaGlwLCBpbmZvLT5lbmFibGVfcmVnLAorCXJldHVybiBwbTg2MHhfc2V0X2JpdHMoaW5mby0+aTJjLCBpbmZvLT5lbmFibGVfcmVnLAogCQkJICAgICAgIDEgPDwgaW5mby0+ZW5hYmxlX2JpdCwgMCk7CiB9CiAKIHN0YXRpYyBpbnQgcG04NjA3X2lzX2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCiB7CiAJc3RydWN0IHBtODYwN19yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7Ci0Jc3RydWN0IHBtODYwN19jaGlwICpjaGlwID0gaW5mby0+Y2hpcDsKIAlpbnQgcmV0OwogCi0JcmV0ID0gcG04NjA3X3JlZ19yZWFkKGNoaXAsIGluZm8tPmVuYWJsZV9yZWcpOworCXJldCA9IHBtODYweF9yZWdfcmVhZChpbmZvLT5pMmMsIGluZm8tPmVuYWJsZV9yZWcpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC01ODksOCArNDUwLDggQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgcG04NjA3X3JlZ3VsYXRvcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbTg2MDdfY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKLQlzdHJ1Y3QgcG04NjA3X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gY2hpcC0+ZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBwbTg2MHhfY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgcG04NjB4X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gY2hpcC0+ZGV2LT5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBwbTg2MDdfcmVndWxhdG9yX2luZm8gKmluZm8gPSBOVUxMOwogCiAJaW5mbyA9IGZpbmRfcmVndWxhdG9yX2luZm8ocGRldi0+aWQpOwpAQCAtNTk5LDYgKzQ2MCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWluZm8tPmkyYyA9IChjaGlwLT5pZCA9PSBDSElQX1BNODYwNykgPyBjaGlwLT5jbGllbnQgOiBjaGlwLT5jb21wYW5pb247CiAJaW5mby0+Y2hpcCA9IGNoaXA7CiAKIAlpbmZvLT5yZWd1bGF0b3IgPSByZWd1bGF0b3JfcmVnaXN0ZXIoJmluZm8tPmRlc2MsICZwZGV2LT5kZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnIGIvZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZwppbmRleCA4MzRiNDg0Li4wNGYyZTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL0tjb25maWcKQEAgLTk0LDYgKzk0LDEyIEBACiAJICBUaGlzIGRyaXZlciBjb250cm9scyBhIE1heGltIDg2NjAvODY2MSB2b2x0YWdlIG91dHB1dAogCSAgcmVndWxhdG9yIHZpYSBJMkMgYnVzLgogCitjb25maWcgUkVHVUxBVE9SX01BWDg5MjUKKwl0cmlzdGF0ZSAiTWF4aW0gTUFYODkyNSBQb3dlciBNYW5hZ2VtZW50IElDIgorCWRlcGVuZHMgb24gTUZEX01BWDg5MjUKKwloZWxwCisJICBTYXkgeSBoZXJlIHRvIHN1cHBvcnQgdGhlIHZvbHRhZ2UgcmVndWxhbHRvciBvZiBNYXhpbSBNQVg4OTI1IFBNSUMuCisKIGNvbmZpZyBSRUdVTEFUT1JfVFdMNDAzMAogCWJvb2wgIlRJIFRXTDQwMzAvVFdMNTAzMC9UV0w2MDMwL1RQUzY5NXgwIFBNSUMiCiAJZGVwZW5kcyBvbiBUV0w0MDMwX0NPUkUKQEAgLTE5MSw3ICsxOTcsNyBAQAogCiBjb25maWcgUkVHVUxBVE9SXzg4UE04NjA3CiAJYm9vbCAiTWFydmVsbCA4OFBNODYwNyBQb3dlciByZWd1bGF0b3JzIgotCWRlcGVuZHMgb24gTUZEXzg4UE04NjA3PXkKKwlkZXBlbmRzIG9uIE1GRF84OFBNODYwWD15CiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgODhQTTg2MDcgdm9sdGFnZSByZWd1bGF0b3IgY2hpcHMuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlIGIvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUKaW5kZXggZTg0NWI2Ni4uNGU3ZmVlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvTWFrZWZpbGUKQEAgLTE1LDYgKzE1LDcgQEAKIG9iai0kKENPTkZJR19SRUdVTEFUT1JfVFdMNDAzMCkgKz0gdHdsLXJlZ3VsYXRvci5vCiBvYmotJChDT05GSUdfUkVHVUxBVE9SX01BWDg2NDkpCSs9IG1heDg2NDkubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9NQVg4NjYwKSArPSBtYXg4NjYwLm8KK29iai0kKENPTkZJR19SRUdVTEFUT1JfTUFYODkyNSkgKz0gbWF4ODkyNS1yZWd1bGF0b3Iubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9XTTgzMVgpICs9IHdtODMxeC1kY2RjLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfV004MzFYKSArPSB3bTgzMXgtaXNpbmsubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9XTTgzMVgpICs9IHdtODMxeC1sZG8ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODkyNS1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg5MjUtcmVndWxhdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc4NzNmMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg5MjUtcmVndWxhdG9yLmMKQEAgLTAsMCArMSwzMDYgQEAKKy8qCisgKiBSZWd1bGF0b3JzIGRyaXZlciBmb3IgTWF4aW0gbWF4ODkyNQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICogICAgICBIYW9qaWFuIFpodWFuZyA8aGFvamlhbi56aHVhbmdAbWFydmVsbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvbWF4ODkyNS5oPgorCisjZGVmaW5lIFNEMV9EVk1fVk1JTgkJODUwMDAwCisjZGVmaW5lIFNEMV9EVk1fVk1BWAkJMTAwMDAwMAorI2RlZmluZSBTRDFfRFZNX1NURVAJCTUwMDAwCisjZGVmaW5lIFNEMV9EVk1fU0hJRlQJCTUJCS8qIFNEQ1RMMSBiaXQ1ICovCisjZGVmaW5lIFNEMV9EVk1fRU4JCTYJCS8qIFNEVjEgYml0IDYgKi8KKworc3RydWN0IG1heDg5MjVfcmVndWxhdG9yX2luZm8geworCXN0cnVjdCByZWd1bGF0b3JfZGVzYwlkZXNjOworCXN0cnVjdCByZWd1bGF0b3JfZGV2CSpyZWd1bGF0b3I7CisJc3RydWN0IGkyY19jbGllbnQJKmkyYzsKKwlzdHJ1Y3QgbWF4ODkyNV9jaGlwCSpjaGlwOworCisJaW50CW1pbl91VjsKKwlpbnQJbWF4X3VWOworCWludAlzdGVwX3VWOworCWludAl2b2xfcmVnOworCWludAl2b2xfc2hpZnQ7CisJaW50CXZvbF9uYml0czsKKwlpbnQJZW5hYmxlX2JpdDsKKwlpbnQJZW5hYmxlX3JlZzsKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3JhbmdlKHN0cnVjdCBtYXg4OTI1X3JlZ3VsYXRvcl9pbmZvICppbmZvLAorCQkJICAgICAgaW50IG1pbl91ViwgaW50IG1heF91VikKK3sKKwlpZiAobWluX3VWIDwgaW5mby0+bWluX3VWIHx8IG1pbl91ViA+IGluZm8tPm1heF91VikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXg4OTI1X2xpc3Rfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgdW5zaWduZWQgaW5kZXgpCit7CisJc3RydWN0IG1heDg5MjVfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXJldHVybiBpbmZvLT5taW5fdVYgKyBpbmRleCAqIGluZm8tPnN0ZXBfdVY7Cit9CisKK3N0YXRpYyBpbnQgbWF4ODkyNV9zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKKwkJCSAgICAgICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQoreworCXN0cnVjdCBtYXg4OTI1X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwl1bnNpZ25lZCBjaGFyIGRhdGEsIG1hc2s7CisKKwlpZiAoY2hlY2tfcmFuZ2UoaW5mbywgbWluX3VWLCBtYXhfdVYpKSB7CisJCWRldl9lcnIoaW5mby0+Y2hpcC0+ZGV2LCAiaW52YWxpZCB2b2x0YWdlIHJhbmdlICglZCwgJWQpIHVWXG4iLAorCQkJbWluX3VWLCBtYXhfdVYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZGF0YSA9IChtaW5fdVYgLSBpbmZvLT5taW5fdVYgKyBpbmZvLT5zdGVwX3VWIC0gMSkgLyBpbmZvLT5zdGVwX3VWOworCWRhdGEgPDw9IGluZm8tPnZvbF9zaGlmdDsKKwltYXNrID0gKCgxIDw8IGluZm8tPnZvbF9uYml0cykgLSAxKSA8PCBpbmZvLT52b2xfc2hpZnQ7CisKKwlyZXR1cm4gbWF4ODkyNV9zZXRfYml0cyhpbmZvLT5pMmMsIGluZm8tPnZvbF9yZWcsIG1hc2ssIGRhdGEpOworfQorCitzdGF0aWMgaW50IG1heDg5MjVfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IG1heDg5MjVfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXVuc2lnbmVkIGNoYXIgZGF0YSwgbWFzazsKKwlpbnQgcmV0OworCisJcmV0ID0gbWF4ODkyNV9yZWdfcmVhZChpbmZvLT5pMmMsIGluZm8tPnZvbF9yZWcpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCW1hc2sgPSAoKDEgPDwgaW5mby0+dm9sX25iaXRzKSAtIDEpIDw8IGluZm8tPnZvbF9zaGlmdDsKKwlkYXRhID0gKHJldCAmIG1hc2spID4+IGluZm8tPnZvbF9zaGlmdDsKKworCXJldHVybiBtYXg4OTI1X2xpc3Rfdm9sdGFnZShyZGV2LCBkYXRhKTsKK30KKworc3RhdGljIGludCBtYXg4OTI1X2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgbWF4ODkyNV9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisKKwlyZXR1cm4gbWF4ODkyNV9zZXRfYml0cyhpbmZvLT5pMmMsIGluZm8tPmVuYWJsZV9yZWcsCisJCQkJMSA8PCBpbmZvLT5lbmFibGVfYml0LAorCQkJCTEgPDwgaW5mby0+ZW5hYmxlX2JpdCk7Cit9CisKK3N0YXRpYyBpbnQgbWF4ODkyNV9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBtYXg4OTI1X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKworCXJldHVybiBtYXg4OTI1X3NldF9iaXRzKGluZm8tPmkyYywgaW5mby0+ZW5hYmxlX3JlZywKKwkJCQkxIDw8IGluZm8tPmVuYWJsZV9iaXQsIDApOworfQorCitzdGF0aWMgaW50IG1heDg5MjVfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgbWF4ODkyNV9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IHJldDsKKworCXJldCA9IG1heDg5MjVfcmVnX3JlYWQoaW5mby0+aTJjLCBpbmZvLT52b2xfcmVnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiByZXQgJiAoMSA8PCBpbmZvLT5lbmFibGVfYml0KTsKK30KKworc3RhdGljIGludCBtYXg4OTI1X3NldF9kdm1fdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IHVWKQoreworCXN0cnVjdCBtYXg4OTI1X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwl1bnNpZ25lZCBjaGFyIGRhdGEsIG1hc2s7CisKKwlpZiAodVYgPCBTRDFfRFZNX1ZNSU4gfHwgdVYgPiBTRDFfRFZNX1ZNQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YSA9ICh1ViAtIFNEMV9EVk1fVk1JTiArIFNEMV9EVk1fU1RFUCAtIDEpIC8gU0QxX0RWTV9TVEVQOworCWRhdGEgPDw9IFNEMV9EVk1fU0hJRlQ7CisJbWFzayA9IDMgPDwgU0QxX0RWTV9TSElGVDsKKworCXJldHVybiBtYXg4OTI1X3NldF9iaXRzKGluZm8tPmkyYywgaW5mby0+ZW5hYmxlX3JlZywgbWFzaywgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgbWF4ODkyNV9zZXRfZHZtX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgbWF4ODkyNV9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisKKwlyZXR1cm4gbWF4ODkyNV9zZXRfYml0cyhpbmZvLT5pMmMsIGluZm8tPnZvbF9yZWcsIDEgPDwgU0QxX0RWTV9FTiwKKwkJCQkxIDw8IFNEMV9EVk1fRU4pOworfQorCitzdGF0aWMgaW50IG1heDg5MjVfc2V0X2R2bV9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBtYXg4OTI1X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKworCXJldHVybiBtYXg4OTI1X3NldF9iaXRzKGluZm8tPmkyYywgaW5mby0+dm9sX3JlZywgMSA8PCBTRDFfRFZNX0VOLCAwKTsKK30KKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIG1heDg5MjVfcmVndWxhdG9yX3Nkdl9vcHMgPSB7CisJLnNldF92b2x0YWdlCQk9IG1heDg5MjVfc2V0X3ZvbHRhZ2UsCisJLmdldF92b2x0YWdlCQk9IG1heDg5MjVfZ2V0X3ZvbHRhZ2UsCisJLmVuYWJsZQkJCT0gbWF4ODkyNV9lbmFibGUsCisJLmRpc2FibGUJCT0gbWF4ODkyNV9kaXNhYmxlLAorCS5pc19lbmFibGVkCQk9IG1heDg5MjVfaXNfZW5hYmxlZCwKKwkuc2V0X3N1c3BlbmRfdm9sdGFnZQk9IG1heDg5MjVfc2V0X2R2bV92b2x0YWdlLAorCS5zZXRfc3VzcGVuZF9lbmFibGUJPSBtYXg4OTI1X3NldF9kdm1fZW5hYmxlLAorCS5zZXRfc3VzcGVuZF9kaXNhYmxlCT0gbWF4ODkyNV9zZXRfZHZtX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbWF4ODkyNV9yZWd1bGF0b3JfbGRvX29wcyA9IHsKKwkuc2V0X3ZvbHRhZ2UJCT0gbWF4ODkyNV9zZXRfdm9sdGFnZSwKKwkuZ2V0X3ZvbHRhZ2UJCT0gbWF4ODkyNV9nZXRfdm9sdGFnZSwKKwkuZW5hYmxlCQkJPSBtYXg4OTI1X2VuYWJsZSwKKwkuZGlzYWJsZQkJPSBtYXg4OTI1X2Rpc2FibGUsCisJLmlzX2VuYWJsZWQJCT0gbWF4ODkyNV9pc19lbmFibGVkLAorfTsKKworI2RlZmluZSBNQVg4OTI1X1NEVihfaWQsIG1pbiwgbWF4LCBzdGVwKQkJCVwKK3sJCQkJCQkJCVwKKwkuZGVzYwk9IHsJCQkJCQlcCisJCS5uYW1lCT0gIlNEViIgI19pZCwJCQkJXAorCQkub3BzCT0gJm1heDg5MjVfcmVndWxhdG9yX3Nkdl9vcHMsCQlcCisJCS50eXBlCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJXAorCQkuaWQJPSBNQVg4OTI1X0lEX1NEIyNfaWQsCQkJXAorCQkub3duZXIJPSBUSElTX01PRFVMRSwJCQkJXAorCX0sCQkJCQkJCVwKKwkubWluX3VWCQk9IG1pbiAqIDEwMDAsCQkJCVwKKwkubWF4X3VWCQk9IG1heCAqIDEwMDAsCQkJCVwKKwkuc3RlcF91Vgk9IHN0ZXAgKiAxMDAwLAkJCQlcCisJLnZvbF9yZWcJPSBNQVg4OTI1X1NEViMjX2lkLAkJCVwKKwkudm9sX3NoaWZ0CT0gMCwJCQkJCVwKKwkudm9sX25iaXRzCT0gNiwJCQkJCVwKKwkuZW5hYmxlX3JlZwk9IE1BWDg5MjVfU0RDVEwjI19pZCwJCQlcCisJLmVuYWJsZV9iaXQJPSAwLAkJCQkJXAorfQorCisjZGVmaW5lIE1BWDg5MjVfTERPKF9pZCwgbWluLCBtYXgsIHN0ZXApCQkJXAorewkJCQkJCQkJXAorCS5kZXNjCT0gewkJCQkJCVwKKwkJLm5hbWUJPSAiTERPIiAjX2lkLAkJCQlcCisJCS5vcHMJPSAmbWF4ODkyNV9yZWd1bGF0b3JfbGRvX29wcywJCVwKKwkJLnR5cGUJPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQlcCisJCS5pZAk9IE1BWDg5MjVfSURfTERPIyNfaWQsCQkJXAorCQkub3duZXIJPSBUSElTX01PRFVMRSwJCQkJXAorCX0sCQkJCQkJCVwKKwkubWluX3VWCQk9IG1pbiAqIDEwMDAsCQkJCVwKKwkubWF4X3VWCQk9IG1heCAqIDEwMDAsCQkJCVwKKwkuc3RlcF91Vgk9IHN0ZXAgKiAxMDAwLAkJCQlcCisJLnZvbF9yZWcJPSBNQVg4OTI1X0xET1ZPVVQjI19pZCwJCQlcCisJLnZvbF9zaGlmdAk9IDAsCQkJCQlcCisJLnZvbF9uYml0cwk9IDYsCQkJCQlcCisJLmVuYWJsZV9yZWcJPSBNQVg4OTI1X0xET0NUTCMjX2lkLAkJCVwKKwkuZW5hYmxlX2JpdAk9IDAsCQkJCQlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgbWF4ODkyNV9yZWd1bGF0b3JfaW5mbyBtYXg4OTI1X3JlZ3VsYXRvcl9pbmZvW10gPSB7CisJTUFYODkyNV9TRFYoMSwgNjM3LjUsIDE0MjUsIDEyLjUpLAorCU1BWDg5MjVfU0RWKDIsICAgNjUwLCAyMjI1LCAgIDI1KSwKKwlNQVg4OTI1X1NEVigzLCAgIDc1MCwgMzkwMCwgICA1MCksCisKKwlNQVg4OTI1X0xETygxLCAgNzUwLCAzOTAwLCA1MCksCisJTUFYODkyNV9MRE8oMiwgIDY1MCwgMjI1MCwgMjUpLAorCU1BWDg5MjVfTERPKDMsICA2NTAsIDIyNTAsIDI1KSwKKwlNQVg4OTI1X0xETyg0LCAgNzUwLCAzOTAwLCA1MCksCisJTUFYODkyNV9MRE8oNSwgIDc1MCwgMzkwMCwgNTApLAorCU1BWDg5MjVfTERPKDYsICA3NTAsIDM5MDAsIDUwKSwKKwlNQVg4OTI1X0xETyg3LCAgNzUwLCAzOTAwLCA1MCksCisJTUFYODkyNV9MRE8oOCwgIDc1MCwgMzkwMCwgNTApLAorCU1BWDg5MjVfTERPKDksICA3NTAsIDM5MDAsIDUwKSwKKwlNQVg4OTI1X0xETygxMCwgNzUwLCAzOTAwLCA1MCksCisJTUFYODkyNV9MRE8oMTEsIDc1MCwgMzkwMCwgNTApLAorCU1BWDg5MjVfTERPKDEyLCA3NTAsIDM5MDAsIDUwKSwKKwlNQVg4OTI1X0xETygxMywgNzUwLCAzOTAwLCA1MCksCisJTUFYODkyNV9MRE8oMTQsIDc1MCwgMzkwMCwgNTApLAorCU1BWDg5MjVfTERPKDE1LCA3NTAsIDM5MDAsIDUwKSwKKwlNQVg4OTI1X0xETygxNiwgNzUwLCAzOTAwLCA1MCksCisJTUFYODkyNV9MRE8oMTcsIDY1MCwgMjI1MCwgMjUpLAorCU1BWDg5MjVfTERPKDE4LCA2NTAsIDIyNTAsIDI1KSwKKwlNQVg4OTI1X0xETygxOSwgNzUwLCAzOTAwLCA1MCksCisJTUFYODkyNV9MRE8oMjAsIDc1MCwgMzkwMCwgNTApLAorfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbWF4ODkyNV9yZWd1bGF0b3JfaW5mbyAqZmluZF9yZWd1bGF0b3JfaW5mbyhpbnQgaWQpCit7CisJc3RydWN0IG1heDg5MjVfcmVndWxhdG9yX2luZm8gKnJpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWF4ODkyNV9yZWd1bGF0b3JfaW5mbyk7IGkrKykgeworCQlyaSA9ICZtYXg4OTI1X3JlZ3VsYXRvcl9pbmZvW2ldOworCQlpZiAocmktPmRlc2MuaWQgPT0gaWQpCisJCQlyZXR1cm4gcmk7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtYXg4OTI1X3JlZ3VsYXRvcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtYXg4OTI1X2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IG1heDg5MjVfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBjaGlwLT5kZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG1heDg5MjVfcmVndWxhdG9yX2luZm8gKnJpID0gTlVMTDsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKKworCXJpID0gZmluZF9yZWd1bGF0b3JfaW5mbyhwZGV2LT5pZCk7CisJaWYgKHJpID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCByZWd1bGF0b3IgSUQgc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJpLT5pMmMgPSBjaGlwLT5pMmM7CisJcmktPmNoaXAgPSBjaGlwOworCisJcmRldiA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmcmktPmRlc2MsICZwZGV2LT5kZXYsCisJCQkJICBwZGF0YS0+cmVndWxhdG9yW3BkZXYtPmlkXSwgcmkpOworCWlmIChJU19FUlIocmRldikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHJlZ3VsYXRvciAlc1xuIiwKKwkJCQlyaS0+ZGVzYy5uYW1lKTsKKwkJcmV0dXJuIFBUUl9FUlIocmRldik7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcmRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1heDg5MjVfcmVndWxhdG9yX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlyZWd1bGF0b3JfdW5yZWdpc3RlcihyZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWF4ODkyNV9yZWd1bGF0b3JfZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJtYXg4OTI1LXJlZ3VsYXRvciIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IG1heDg5MjVfcmVndWxhdG9yX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobWF4ODkyNV9yZWd1bGF0b3JfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1heDg5MjVfcmVndWxhdG9yX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtYXg4OTI1X3JlZ3VsYXRvcl9kcml2ZXIpOworfQorc3Vic3lzX2luaXRjYWxsKG1heDg5MjVfcmVndWxhdG9yX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbWF4ODkyNV9yZWd1bGF0b3JfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtYXg4OTI1X3JlZ3VsYXRvcl9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQobWF4ODkyNV9yZWd1bGF0b3JfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0BtYXJ2ZWxsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUmVndWxhdG9yIERyaXZlciBmb3IgTWF4aW0gODkyNSBQTUlDIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm1heDg5MjUtcmVndWxhdG9yIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODM1MC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODM1MC1yZWd1bGF0b3IuYwppbmRleCA5NDIyN2RkLi43MjNjZDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci93bTgzNTAtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzUwLXJlZ3VsYXRvci5jCkBAIC0xNDUzLDcgKzE0NTMsNyBAQAogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAotCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIHdtODM1MF9yZWdbcGRldi0+aWRdLmlycSk7CisJd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgd204MzUwX3JlZ1twZGV2LT5pZF0uaXJxLCByZGV2KTsKIAogCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKHJkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9LY29uZmlnIGIvZHJpdmVycy9ydGMvS2NvbmZpZwppbmRleCAyYmI4YThiLi42YTEzMDM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9LY29uZmlnCisrKyBiL2RyaXZlcnMvcnRjL0tjb25maWcKQEAgLTE3NSw2ICsxNzUsMTYgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgcnRjLW1heDY5MDAuCiAKK2NvbmZpZyBSVENfRFJWX01BWDg5MjUKKwl0cmlzdGF0ZSAiTWF4aW0gTUFYODkyNSIKKwlkZXBlbmRzIG9uIE1GRF9NQVg4OTI1CisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3Ugd2lsbCBnZXQgc3VwcG9ydCBmb3IgdGhlCisJICBSVEMgb2YgTWF4aW0gTUFYODkyNSBQTUlDLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1tYXg4OTI1LgorCiBjb25maWcgUlRDX0RSVl9SUzVDMzcyCiAJdHJpc3RhdGUgIlJpY29oIFIyMDI1Uy9ELCBSUzVDMzcyQS9CLCBSVjVDMzg2LCBSVjVDMzg3QSIKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZSBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCmluZGV4IGI3MTQ4YWYuLjQ0ZWYxOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcnRjL01ha2VmaWxlCkBAIC01Miw2ICs1Miw3IEBACiBvYmotJChDT05GSUdfUlRDX0RSVl9NNDhUODYpCSs9IHJ0Yy1tNDh0ODYubwogb2JqLSQoQ09ORklHX1JUQ19NWEMpCQkrPSBydGMtbXhjLm8KIG9iai0kKENPTkZJR19SVENfRFJWX01BWDY5MDApCSs9IHJ0Yy1tYXg2OTAwLm8KK29iai0kKENPTkZJR19SVENfRFJWX01BWDg5MjUpCSs9IHJ0Yy1tYXg4OTI1Lm8KIG9iai0kKENPTkZJR19SVENfRFJWX01BWDY5MDIpCSs9IHJ0Yy1tYXg2OTAyLm8KIG9iai0kKENPTkZJR19SVENfRFJWX01DMTM3ODMpCSs9IHJ0Yy1tYzEzNzgzLm8KIG9iai0kKENPTkZJR19SVENfRFJWX01TTTYyNDIpCSs9IHJ0Yy1tc202MjQyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL2NsYXNzLmMgYi9kcml2ZXJzL3J0Yy9jbGFzcy5jCmluZGV4IGJlNWE2YjcuLjQwODQ1YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL2NsYXNzLmMKKysrIGIvZHJpdmVycy9ydGMvY2xhc3MuYwpAQCAtMjI2LDYgKzIyNiw3IEBACiB7CiAJcnRjX2Rldl9leGl0KCk7CiAJY2xhc3NfZGVzdHJveShydGNfY2xhc3MpOworCWlkcl9kZXN0cm95KCZydGNfaWRyKTsKIH0KIAogc3Vic3lzX2luaXRjYWxsKHJ0Y19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMKaW5kZXggODZjNjFmMS4uNzhhMDE4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogCWlmIChvZmZzZXQgPT0gMCkKIAkJcmV0dXJuIC1FSUxTRVE7CiAKLQltZW1zZXQoYWxybSwgMCwgc2l6ZW9mKGFscm0pKTsKKwltZW1zZXQoYWxybSwgMCwgc2l6ZW9mKCphbHJtKSk7CiAJaWYgKGFsYXJtICE9IEFMQVJNX0RJU0FCTEVEICYmIG9mZnNldCAhPSAwKSB7CiAJCXJ0Y190aW1lX3RvX3RtKG9mZnNldCArIGFsYXJtLCB0bSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1jb2g5MDEzMzEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1jb2g5MDEzMzEuYwppbmRleCAwM2VhNTMwLi40NGM0Mzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtY29oOTAxMzMxLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWNvaDkwMTMzMS5jCkBAIC0yNzEsMTIgKzI3MSwxMyBAQAogewogCXN0cnVjdCBjb2g5MDEzMzFfcG9ydCAqcnRhcCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKIAotCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKKwlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpIHsKIAkJZGlzYWJsZV9pcnFfd2FrZShydGFwLT5pcnEpOwotCWVsc2UKKwl9IGVsc2UgewogCQljbGtfZW5hYmxlKHJ0YXAtPmNsayk7CiAJCXdyaXRlbChydGFwLT5pcnFtYXNrc3RvcmUsIHJ0YXAtPnZpcnRiYXNlICsgQ09IOTAxMzMxX0lSUV9NQVNLKTsKIAkJY2xrX2Rpc2FibGUocnRhcC0+Y2xrKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWVwOTN4eC5jIGIvZHJpdmVycy9ydGMvcnRjLWVwOTN4eC5jCmluZGV4IDlkYTAyZDEuLjkxYmRlOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1lcDkzeHguYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZXA5M3h4LmMKQEAgLTExNSw2ICsxMTUsMTUgQEAKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihjb21wX2RlbGV0ZSwgU19JUlVHTywgZXA5M3h4X3J0Y19zaG93X2NvbXBfZGVsZXRlLCBOVUxMKTsKIAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmVwOTN4eF9ydGNfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfY29tcF9wcmVsb2FkLmF0dHIsCisJJmRldl9hdHRyX2NvbXBfZGVsZXRlLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZXA5M3h4X3J0Y19zeXNmc19maWxlcyA9IHsKKwkuYXR0cnMJPSBlcDkzeHhfcnRjX2F0dHJzLAorfTsKIAogc3RhdGljIGludCBfX2luaXQgZXA5M3h4X3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewpAQCAtMTIzLDI3ICsxMzIsMjIgQEAKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOwogCWludCBlcnI7CiAKLQllcDkzeHhfcnRjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGVwOTN4eF9ydGMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoZXA5M3h4X3J0YyA9PSBOVUxMKQorCWVwOTN4eF9ydGMgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCplcDkzeHhfcnRjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlcDkzeHhfcnRjKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JaWYgKHJlcyA9PSBOVUxMKSB7Ci0JCWVyciA9IC1FTlhJTzsKLQkJZ290byBmYWlsX2ZyZWU7Ci0JfQorCWlmICghcmVzKQorCQlyZXR1cm4gLUVOWElPOwogCi0JcmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgcGRldi0+bmFtZSk7Ci0JaWYgKHJlcyA9PSBOVUxMKSB7Ci0JCWVyciA9IC1FQlVTWTsKLQkJZ290byBmYWlsX2ZyZWU7Ci0JfQorCWlmICghZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJCQkgICAgIHJlc291cmNlX3NpemUocmVzKSwgcGRldi0+bmFtZSkpCisJCXJldHVybiAtRUJVU1k7CiAKLQllcDkzeHhfcnRjLT5tbWlvX2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7Ci0JaWYgKGVwOTN4eF9ydGMtPm1taW9fYmFzZSA9PSBOVUxMKSB7Ci0JCWVyciA9IC1FTlhJTzsKLQkJZ290byBmYWlsOwotCX0KKwllcDkzeHhfcnRjLT5tbWlvX2Jhc2UgPSBkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJCQkJICAgICByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghZXA5M3h4X3J0Yy0+bW1pb19iYXNlKQorCQlyZXR1cm4gLUVOWElPOwogCiAJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBlcDkzeHhfcnRjOwogCkBAIC0xNTEsNTIgKzE1NSwzMyBAQAogCQkJCSZwZGV2LT5kZXYsICZlcDkzeHhfcnRjX29wcywgVEhJU19NT0RVTEUpOwogCWlmIChJU19FUlIocnRjKSkgewogCQllcnIgPSBQVFJfRVJSKHJ0Yyk7Ci0JCWdvdG8gZmFpbDsKKwkJZ290byBleGl0OwogCX0KIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0Yyk7CiAKLQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2NvbXBfcHJlbG9hZCk7CisJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmVwOTN4eF9ydGNfc3lzZnNfZmlsZXMpOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbDsKLQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2NvbXBfZGVsZXRlKTsKLQlpZiAoZXJyKSB7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfY29tcF9wcmVsb2FkKTsKLQkJZ290byBmYWlsOwotCX0KIAogCXJldHVybiAwOwogCiBmYWlsOgotCWlmIChlcDkzeHhfcnRjLT5tbWlvX2Jhc2UpIHsKLQkJaW91bm1hcChlcDkzeHhfcnRjLT5tbWlvX2Jhc2UpOwotCQlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IE5VTEw7Ci0JfQotCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwotZmFpbF9mcmVlOgotCWtmcmVlKGVwOTN4eF9ydGMpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOworZXhpdDoKKwlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IE5VTEw7CiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBfX2V4aXQgZXA5M3h4X3J0Y19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IGVwOTN4eF9ydGMgKmVwOTN4eF9ydGMgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAotCS8qIGNsZWFudXAgc3lzZnMgKi8KLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2NvbXBfZGVsZXRlKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2NvbXBfcHJlbG9hZCk7Ci0KLQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKLQotCWlvdW5tYXAoZXA5M3h4X3J0Yy0+bW1pb19iYXNlKTsKLQlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IE5VTEw7Ci0KLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwotCisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmVwOTN4eF9ydGNfc3lzZnNfZmlsZXMpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOworCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gTlVMTDsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW1heDg5MjUuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tYXg4OTI1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNkYmIxNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tYXg4OTI1LmMKQEAgLTAsMCArMSwzMTQgQEAKKy8qCisgKiBSVEMgZHJpdmVyIGZvciBNYXhpbSBNQVg4OTI1CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCUhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0BtYXJ2ZWxsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvbWF4ODkyNS5oPgorCitlbnVtIHsKKwlSVENfU0VDID0gMCwKKwlSVENfTUlOLAorCVJUQ19IT1VSLAorCVJUQ19XRUVLREFZLAorCVJUQ19EQVRFLAorCVJUQ19NT05USCwKKwlSVENfWUVBUjEsCisJUlRDX1lFQVIyLAorfTsKKworI2RlZmluZSBNQVg4OTI1X1JUQ19TRUMJCQkweDAwCisjZGVmaW5lIE1BWDg5MjVfUlRDX01JTgkJCTB4MDEKKyNkZWZpbmUgTUFYODkyNV9SVENfSE9VUgkJMHgwMgorI2RlZmluZSBNQVg4OTI1X1JUQ19XRUVLREFZCQkweDAzCisjZGVmaW5lIE1BWDg5MjVfUlRDX0RBVEUJCTB4MDQKKyNkZWZpbmUgTUFYODkyNV9SVENfTU9OVEgJCTB4MDUKKyNkZWZpbmUgTUFYODkyNV9SVENfWUVBUjEJCTB4MDYKKyNkZWZpbmUgTUFYODkyNV9SVENfWUVBUjIJCTB4MDcKKyNkZWZpbmUgTUFYODkyNV9BTEFSTTBfU0VDCQkweDA4CisjZGVmaW5lIE1BWDg5MjVfQUxBUk0wX01JTgkJMHgwOQorI2RlZmluZSBNQVg4OTI1X0FMQVJNMF9IT1VSCQkweDBhCisjZGVmaW5lIE1BWDg5MjVfQUxBUk0wX1dFRUtEQVkJCTB4MGIKKyNkZWZpbmUgTUFYODkyNV9BTEFSTTBfREFURQkJMHgwYworI2RlZmluZSBNQVg4OTI1X0FMQVJNMF9NT04JCTB4MGQKKyNkZWZpbmUgTUFYODkyNV9BTEFSTTBfWUVBUjEJCTB4MGUKKyNkZWZpbmUgTUFYODkyNV9BTEFSTTBfWUVBUjIJCTB4MGYKKyNkZWZpbmUgTUFYODkyNV9BTEFSTTFfU0VDCQkweDEwCisjZGVmaW5lIE1BWDg5MjVfQUxBUk0xX01JTgkJMHgxMQorI2RlZmluZSBNQVg4OTI1X0FMQVJNMV9IT1VSCQkweDEyCisjZGVmaW5lIE1BWDg5MjVfQUxBUk0xX1dFRUtEQVkJCTB4MTMKKyNkZWZpbmUgTUFYODkyNV9BTEFSTTFfREFURQkJMHgxNAorI2RlZmluZSBNQVg4OTI1X0FMQVJNMV9NT04JCTB4MTUKKyNkZWZpbmUgTUFYODkyNV9BTEFSTTFfWUVBUjEJCTB4MTYKKyNkZWZpbmUgTUFYODkyNV9BTEFSTTFfWUVBUjIJCTB4MTcKKyNkZWZpbmUgTUFYODkyNV9SVENfQ05UTAkJMHgxYgorI2RlZmluZSBNQVg4OTI1X1JUQ19TVEFUVVMJCTB4MjAKKworI2RlZmluZSBUSU1FX05VTQkJCTgKKyNkZWZpbmUgQUxBUk1fMVNFQwkJCSgxIDw8IDcpCisjZGVmaW5lIEhPVVJfMTIJCQkJKDEgPDwgNykKKyNkZWZpbmUgSE9VUl9BTV9QTQkJCSgxIDw8IDUpCisjZGVmaW5lIEFMQVJNMF9JUlEJCQkoMSA8PCAzKQorI2RlZmluZSBBTEFSTTFfSVJRCQkJKDEgPDwgMikKKyNkZWZpbmUgQUxBUk0wX1NUQVRVUwkJCSgxIDw8IDIpCisjZGVmaW5lIEFMQVJNMV9TVEFUVVMJCQkoMSA8PCAxKQorCisKK3N0cnVjdCBtYXg4OTI1X3J0Y19pbmZvIHsKKwlzdHJ1Y3QgcnRjX2RldmljZQkqcnRjX2RldjsKKwlzdHJ1Y3QgbWF4ODkyNV9jaGlwCSpjaGlwOworCXN0cnVjdCBpMmNfY2xpZW50CSpydGM7CisJc3RydWN0IGRldmljZQkJKmRldjsKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBydGNfdXBkYXRlX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbWF4ODkyNV9ydGNfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgbWF4ODkyNV9ydGNfaW5mbyAqKWRhdGE7CisKKwkvKiBkaXNhYmxlIEFMQVJNMCBleGNlcHQgZm9yIDFTRUMgYWxhcm0gKi8KKwltYXg4OTI1X3NldF9iaXRzKGluZm8tPnJ0YywgTUFYODkyNV9BTEFSTTBfQ05UTCwgMHg3ZiwgMCk7CisJcnRjX3VwZGF0ZV9pcnEoaW5mby0+cnRjX2RldiwgMSwgUlRDX0lSUUYgfCBSVENfQUYpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCB0bV9jYWxjKHN0cnVjdCBydGNfdGltZSAqdG0sIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlpZiAobGVuIDwgVElNRV9OVU0pCisJCXJldHVybiAtRUlOVkFMOworCXRtLT50bV95ZWFyID0gKGJ1ZltSVENfWUVBUjJdID4+IDQpICogMTAwMAorCQkJKyAoYnVmW1JUQ19ZRUFSMl0gJiAweGYpICogMTAwCisJCQkrIChidWZbUlRDX1lFQVIxXSA+PiA0KSAqIDEwCisJCQkrIChidWZbUlRDX1lFQVIxXSAmIDB4Zik7CisJdG0tPnRtX3llYXIgLT0gMTkwMDsKKwl0bS0+dG1fbW9uID0gKChidWZbUlRDX01PTlRIXSA+PiA0KSAmIDB4MDEpICogMTAKKwkJCSsgKGJ1ZltSVENfTU9OVEhdICYgMHgwZik7CisJdG0tPnRtX21kYXkgPSAoKGJ1ZltSVENfREFURV0gPj4gNCkgJiAweDAzKSAqIDEwCisJCQkrIChidWZbUlRDX0RBVEVdICYgMHgwZik7CisJdG0tPnRtX3dkYXkgPSBidWZbUlRDX1dFRUtEQVldICYgMHgwNzsKKwlpZiAoYnVmW1JUQ19IT1VSXSAmIEhPVVJfMTIpIHsKKwkJdG0tPnRtX2hvdXIgPSAoKGJ1ZltSVENfSE9VUl0gPj4gNCkgJiAweDEpICogMTAKKwkJCQkrIChidWZbUlRDX0hPVVJdICYgMHgwZik7CisJCWlmIChidWZbUlRDX0hPVVJdICYgSE9VUl9BTV9QTSkKKwkJCXRtLT50bV9ob3VyICs9IDEyOworCX0gZWxzZQorCQl0bS0+dG1faG91ciA9ICgoYnVmW1JUQ19IT1VSXSA+PiA0KSAmIDB4MDMpICogMTAKKwkJCQkrIChidWZbUlRDX0hPVVJdICYgMHgwZik7CisJdG0tPnRtX21pbiA9ICgoYnVmW1JUQ19NSU5dID4+IDQpICYgMHg3KSAqIDEwCisJCQkrIChidWZbUlRDX01JTl0gJiAweDBmKTsKKwl0bS0+dG1fc2VjID0gKChidWZbUlRDX1NFQ10gPj4gNCkgJiAweDcpICogMTAKKwkJCSsgKGJ1ZltSVENfU0VDXSAmIDB4MGYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhdGFfY2FsYyh1bnNpZ25lZCBjaGFyICpidWYsIHN0cnVjdCBydGNfdGltZSAqdG0sIGludCBsZW4pCit7CisJdW5zaWduZWQgY2hhciBoaWdoLCBsb3c7CisKKwlpZiAobGVuIDwgVElNRV9OVU0pCisJCXJldHVybiAtRUlOVkFMOworCisJaGlnaCA9ICh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwMDsKKwlsb3cgPSAodG0tPnRtX3llYXIgKyAxOTAwKSAvIDEwMDsKKwlsb3cgPSBsb3cgLSBoaWdoICogMTA7CisJYnVmW1JUQ19ZRUFSMl0gPSAoaGlnaCA8PCA0KSArIGxvdzsKKwloaWdoID0gKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDsKKwlsb3cgPSB0bS0+dG1feWVhciArIDE5MDA7CisJbG93ID0gbG93IC0gaGlnaCAqIDEwOworCWhpZ2ggPSBoaWdoIC0gKGhpZ2ggLyAxMCkgKiAxMDsKKwlidWZbUlRDX1lFQVIxXSA9IChoaWdoIDw8IDQpICsgbG93OworCWhpZ2ggPSB0bS0+dG1fbW9uIC8gMTA7CisJbG93ID0gdG0tPnRtX21vbjsKKwlsb3cgPSBsb3cgLSBoaWdoICogMTA7CisJYnVmW1JUQ19NT05USF0gPSAoaGlnaCA8PCA0KSArIGxvdzsKKwloaWdoID0gdG0tPnRtX21kYXkgLyAxMDsKKwlsb3cgPSB0bS0+dG1fbWRheTsKKwlsb3cgPSBsb3cgLSBoaWdoICogMTA7CisJYnVmW1JUQ19EQVRFXSA9IChoaWdoIDw8IDQpICsgbG93OworCWJ1ZltSVENfV0VFS0RBWV0gPSB0bS0+dG1fd2RheTsKKwloaWdoID0gdG0tPnRtX2hvdXIgLyAxMDsKKwlsb3cgPSB0bS0+dG1faG91cjsKKwlsb3cgPSBsb3cgLSBoaWdoICogMTA7CisJYnVmW1JUQ19IT1VSXSA9IChoaWdoIDw8IDQpICsgbG93OworCWhpZ2ggPSB0bS0+dG1fbWluIC8gMTA7CisJbG93ID0gdG0tPnRtX21pbjsKKwlsb3cgPSBsb3cgLSBoaWdoICogMTA7CisJYnVmW1JUQ19NSU5dID0gKGhpZ2ggPDwgNCkgKyBsb3c7CisJaGlnaCA9IHRtLT50bV9zZWMgLyAxMDsKKwlsb3cgPSB0bS0+dG1fc2VjOworCWxvdyA9IGxvdyAtIGhpZ2ggKiAxMDsKKwlidWZbUlRDX1NFQ10gPSAoaGlnaCA8PCA0KSArIGxvdzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXg4OTI1X3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBtYXg4OTI1X3J0Y19pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgY2hhciBidWZbVElNRV9OVU1dOworCWludCByZXQ7CisKKwlyZXQgPSBtYXg4OTI1X2J1bGtfcmVhZChpbmZvLT5ydGMsIE1BWDg5MjVfUlRDX1NFQywgVElNRV9OVU0sIGJ1Zik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCXJldCA9IHRtX2NhbGModG0sIGJ1ZiwgVElNRV9OVU0pOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWF4ODkyNV9ydGNfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBtYXg4OTI1X3J0Y19pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgY2hhciBidWZbVElNRV9OVU1dOworCWludCByZXQ7CisKKwlyZXQgPSBkYXRhX2NhbGMoYnVmLCB0bSwgVElNRV9OVU0pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKwlyZXQgPSBtYXg4OTI1X2J1bGtfd3JpdGUoaW5mby0+cnRjLCBNQVg4OTI1X1JUQ19TRUMsIFRJTUVfTlVNLCBidWYpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWF4ODkyNV9ydGNfcmVhZF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbHJtKQoreworCXN0cnVjdCBtYXg4OTI1X3J0Y19pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgY2hhciBidWZbVElNRV9OVU1dOworCWludCByZXQ7CisKKwlyZXQgPSBtYXg4OTI1X2J1bGtfcmVhZChpbmZvLT5ydGMsIE1BWDg5MjVfQUxBUk0wX1NFQywgVElNRV9OVU0sIGJ1Zik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCXJldCA9IHRtX2NhbGMoJmFscm0tPnRpbWUsIGJ1ZiwgVElNRV9OVU0pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKwlyZXQgPSBtYXg4OTI1X3JlZ19yZWFkKGluZm8tPnJ0YywgTUFYODkyNV9SVENfSVJRX01BU0spOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKwlpZiAoKHJldCAmIEFMQVJNMF9JUlEpID09IDApCisJCWFscm0tPmVuYWJsZWQgPSAxOworCWVsc2UKKwkJYWxybS0+ZW5hYmxlZCA9IDA7CisJcmV0ID0gbWF4ODkyNV9yZWdfcmVhZChpbmZvLT5ydGMsIE1BWDg5MjVfUlRDX1NUQVRVUyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCWlmIChyZXQgJiBBTEFSTTBfU1RBVFVTKQorCQlhbHJtLT5wZW5kaW5nID0gMTsKKwllbHNlCisJCWFscm0tPnBlbmRpbmcgPSAwOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWF4ODkyNV9ydGNfc2V0X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pCit7CisJc3RydWN0IG1heDg5MjVfcnRjX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBjaGFyIGJ1ZltUSU1FX05VTV07CisJaW50IHJldDsKKworCXJldCA9IGRhdGFfY2FsYyhidWYsICZhbHJtLT50aW1lLCBUSU1FX05VTSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCXJldCA9IG1heDg5MjVfYnVsa193cml0ZShpbmZvLT5ydGMsIE1BWDg5MjVfQUxBUk0wX1NFQywgVElNRV9OVU0sIGJ1Zik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCS8qIG9ubHkgZW5hYmxlIGFsYXJtIG9uIHllYXIvbW9udGgvZGF5L2hvdXIvbWluL3NlYyAqLworCXJldCA9IG1heDg5MjVfcmVnX3dyaXRlKGluZm8tPnJ0YywgTUFYODkyNV9BTEFSTTBfQ05UTCwgMHg3Nyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0Oworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBtYXg4OTI1X3J0Y19vcHMgPSB7CisJLnJlYWRfdGltZQk9IG1heDg5MjVfcnRjX3JlYWRfdGltZSwKKwkuc2V0X3RpbWUJPSBtYXg4OTI1X3J0Y19zZXRfdGltZSwKKwkucmVhZF9hbGFybQk9IG1heDg5MjVfcnRjX3JlYWRfYWxhcm0sCisJLnNldF9hbGFybQk9IG1heDg5MjVfcnRjX3NldF9hbGFybSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1heDg5MjVfcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1heDg5MjVfY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgbWF4ODkyNV9ydGNfaW5mbyAqaW5mbzsKKwlpbnQgaXJxLCByZXQ7CisKKwlpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1heDg5MjVfcnRjX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PTUVNOworCWluZm8tPmNoaXAgPSBjaGlwOworCWluZm8tPnJ0YyA9IGNoaXAtPnJ0YzsKKwlpbmZvLT5kZXYgPSAmcGRldi0+ZGV2OworCWlycSA9IGNoaXAtPmlycV9iYXNlICsgTUFYODkyNV9JUlFfUlRDX0FMQVJNMDsKKworCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGlycSwgTlVMTCwgcnRjX3VwZGF0ZV9oYW5kbGVyLAorCQkJCSAgIElSUUZfT05FU0hPVCwgInJ0Yy1hbGFybTAiLCBpbmZvKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNoaXAtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IElSUTogIyVkOiAlZFxuIiwKKwkJCWlycSwgcmV0KTsKKwkJZ290byBvdXRfaXJxOworCX0KKworCWluZm8tPnJ0Y19kZXYgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJtYXg4OTI1LXJ0YyIsICZwZGV2LT5kZXYsCisJCQkJCSZtYXg4OTI1X3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKKwlyZXQgPSBQVFJfRVJSKGluZm8tPnJ0Y19kZXYpOworCWlmIChJU19FUlIoaW5mby0+cnRjX2RldikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIFJUQyBkZXZpY2U6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dF9ydGM7CisJfQorCisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOworCisJcmV0dXJuIDA7CitvdXRfcnRjOgorCWZyZWVfaXJxKGNoaXAtPmlycV9iYXNlICsgTUFYODkyNV9JUlFfUlRDX0FMQVJNMCwgaW5mbyk7CitvdXRfaXJxOgorCWtmcmVlKGluZm8pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1heDg5MjVfcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtYXg4OTI1X3J0Y19pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoaW5mbykgeworCQlmcmVlX2lycShpbmZvLT5jaGlwLT5pcnFfYmFzZSArIE1BWDg5MjVfSVJRX1JUQ19BTEFSTTAsIGluZm8pOworCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIoaW5mby0+cnRjX2Rldik7CisJCWtmcmVlKGluZm8pOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWF4ODkyNV9ydGNfZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJtYXg4OTI1LXJ0YyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IG1heDg5MjVfcnRjX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobWF4ODkyNV9ydGNfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1heDg5MjVfcnRjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtYXg4OTI1X3J0Y19kcml2ZXIpOworfQorbW9kdWxlX2luaXQobWF4ODkyNV9ydGNfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtYXg4OTI1X3J0Y19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1heDg5MjVfcnRjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChtYXg4OTI1X3J0Y19leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJNYXhpbSBNQVg4OTI1IFJUQyBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0BtYXJ2ZWxsLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW1jMTM3ODMuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tYzEzNzgzLmMKaW5kZXggODUwZjk4My4uZDYwYzgxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW1jMTM3ODMuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbWMxMzc4My5jCkBAIC0yOCw2ICsyOCwzNCBAQAogCWludCB2YWxpZDsKIH07CiAKK3N0YXRpYyBpbnQgbWMxMzc4M19ydGNfaXJxX2VuYWJsZV91bmxvY2tlZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXVuc2lnbmVkIGludCBlbmFibGVkLCBpbnQgaXJxKQoreworCXN0cnVjdCBtYzEzNzgzX3J0YyAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCAoKmZ1bmMpKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxKTsKKworCWlmICghcHJpdi0+dmFsaWQpCisJCXJldHVybiAtRU5PREFUQTsKKworCWZ1bmMgPSBlbmFibGVkID8gbWMxMzc4M19pcnFfdW5tYXNrIDogbWMxMzc4M19pcnFfbWFzazsKKwlyZXR1cm4gZnVuYyhwcml2LT5tYzEzNzgzLCBpcnEpOworfQorCitzdGF0aWMgaW50IG1jMTM3ODNfcnRjX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LAorCQl1bnNpZ25lZCBpbnQgZW5hYmxlZCwgaW50IGlycSkKK3sKKwlzdHJ1Y3QgbWMxMzc4M19ydGMgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0OworCisJbWMxMzc4M19sb2NrKHByaXYtPm1jMTM3ODMpOworCisJcmV0ID0gbWMxMzc4M19ydGNfaXJxX2VuYWJsZV91bmxvY2tlZChkZXYsIGVuYWJsZWQsIGlycSk7CisKKwltYzEzNzgzX3VubG9jayhwcml2LT5tYzEzNzgzKTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgbWMxMzc4M19ydGNfcmVhZF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKIHsKIAlzdHJ1Y3QgbWMxMzc4M19ydGMgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKQEAgLTc4LDYgKzEwNiw3IEBACiB7CiAJc3RydWN0IG1jMTM3ODNfcnRjICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJdW5zaWduZWQgaW50IHNlY29uZHMsIGRheXM7CisJdW5zaWduZWQgaW50IGFsYXJtc2Vjb25kczsKIAlpbnQgcmV0OwogCiAJc2Vjb25kcyA9IHNlY3MgJSA4NjQwMDsKQEAgLTg2LDcgKzExNSwyMiBAQAogCW1jMTM3ODNfbG9jayhwcml2LT5tYzEzNzgzKTsKIAogCS8qCi0JICogZmlyc3Qgd3JpdGUgc2Vjb25kcz0wIHRvIHByZXZlbnQgYSBkYXkgc3dpdGNoIGJldHdlZW4gd3JpdGluZyBkYXlzCisJICogdGVtcG9yYXJpbHkgaW52YWxpZGF0ZSBhbGFybSB0byBwcmV2ZW50IHRyaWdnZXJpbmcgaXQgd2hlbiB0aGUgZGF5IGlzCisJICogYWxyZWFkeSB1cGRhdGVkIHdoaWxlIHRoZSB0aW1lIGlzbid0IHlldC4KKwkgKi8KKwlyZXQgPSBtYzEzNzgzX3JlZ19yZWFkKHByaXYtPm1jMTM3ODMsIE1DMTM3ODNfUlRDVE9EQSwgJmFsYXJtc2Vjb25kcyk7CisJaWYgKHVubGlrZWx5KHJldCkpCisJCWdvdG8gb3V0OworCisJaWYgKGFsYXJtc2Vjb25kcyA8IDg2NDAwKSB7CisJCXJldCA9IG1jMTM3ODNfcmVnX3dyaXRlKHByaXYtPm1jMTM3ODMsCisJCQkJTUMxMzc4M19SVENUT0RBLCAweDFmZmZmKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpCisJCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIHdyaXRlIHNlY29uZHM9MCB0byBwcmV2ZW50IGEgZGF5IHN3aXRjaCBiZXR3ZWVuIHdyaXRpbmcgZGF5cwogCSAqIGFuZCBzZWNvbmRzIGJlbG93CiAJICovCiAJcmV0ID0gbWMxMzc4M19yZWdfd3JpdGUocHJpdi0+bWMxMzc4MywgTUMxMzc4M19SVENUT0QsIDApOwpAQCAtMTAxLDExICsxNDUsMTkgQEAKIAlpZiAodW5saWtlbHkocmV0KSkKIAkJZ290byBvdXQ7CiAKLQlyZXQgPSBtYzEzNzgzX2Fja2lycShwcml2LT5tYzEzNzgzLCBNQzEzNzgzX0lSUV9SVENSU1QpOworCS8qIHJlc3RvcmUgYWxhcm0gKi8KKwlpZiAoYWxhcm1zZWNvbmRzIDwgODY0MDApIHsKKwkJcmV0ID0gbWMxMzc4M19yZWdfd3JpdGUocHJpdi0+bWMxMzc4MywKKwkJCQlNQzEzNzgzX1JUQ1RPREEsIGFsYXJtc2Vjb25kcyk7CisJCWlmICh1bmxpa2VseShyZXQpKQorCQkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gbWMxMzc4M19pcnFfYWNrKHByaXYtPm1jMTM3ODMsIE1DMTM3ODNfSVJRX1JUQ1JTVCk7CiAJaWYgKHVubGlrZWx5KHJldCkpCiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gbWMxMzc4M191bm1hc2socHJpdi0+bWMxMzc4MywgTUMxMzc4M19JUlFfUlRDUlNUKTsKKwlyZXQgPSBtYzEzNzgzX2lycV91bm1hc2socHJpdi0+bWMxMzc4MywgTUMxMzc4M19JUlFfUlRDUlNUKTsKIG91dDoKIAlwcml2LT52YWxpZCA9ICFyZXQ7CiAKQEAgLTExNCw2ICsxNjYsMTA3IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBtYzEzNzgzX3J0Y19yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFsYXJtKQoreworCXN0cnVjdCBtYzEzNzgzX3J0YyAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIHNlY29uZHMsIGRheXM7CisJdW5zaWduZWQgbG9uZyBzMTk3MDsKKwlpbnQgZW5hYmxlZCwgcGVuZGluZzsKKwlpbnQgcmV0OworCisJbWMxMzc4M19sb2NrKHByaXYtPm1jMTM3ODMpOworCisJcmV0ID0gbWMxMzc4M19yZWdfcmVhZChwcml2LT5tYzEzNzgzLCBNQzEzNzgzX1JUQ1RPREEsICZzZWNvbmRzKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJZ290byBvdXQ7CisJaWYgKHNlY29uZHMgPj0gODY0MDApIHsKKwkJcmV0ID0gLUVOT0RBVEE7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG1jMTM3ODNfcmVnX3JlYWQocHJpdi0+bWMxMzc4MywgTUMxMzc4M19SVENEQVksICZkYXlzKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBtYzEzNzgzX2lycV9zdGF0dXMocHJpdi0+bWMxMzc4MywgTUMxMzc4M19JUlFfVE9EQSwKKwkJCSZlbmFibGVkLCAmcGVuZGluZyk7CisKK291dDoKKwltYzEzNzgzX3VubG9jayhwcml2LT5tYzEzNzgzKTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlhbGFybS0+ZW5hYmxlZCA9IGVuYWJsZWQ7CisJYWxhcm0tPnBlbmRpbmcgPSBwZW5kaW5nOworCisJczE5NzAgPSBkYXlzICogODY0MDAgKyBzZWNvbmRzOworCisJcnRjX3RpbWVfdG9fdG0oczE5NzAsICZhbGFybS0+dGltZSk7CisJZGV2X2RiZyhkZXYsICIlczogJWx1XG4iLCBfX2Z1bmNfXywgczE5NzApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWMxMzc4M19ydGNfc2V0X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFsYXJtKQoreworCXN0cnVjdCBtYzEzNzgzX3J0YyAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgczE5NzA7CisJdW5zaWduZWQgc2Vjb25kcywgZGF5czsKKwlpbnQgcmV0OworCisJbWMxMzc4M19sb2NrKHByaXYtPm1jMTM3ODMpOworCisJLyogZGlzYWJsZSBhbGFybSB0byBwcmV2ZW50IGZhbHNlIHRyaWdnZXJpbmcgKi8KKwlyZXQgPSBtYzEzNzgzX3JlZ193cml0ZShwcml2LT5tYzEzNzgzLCBNQzEzNzgzX1JUQ1RPREEsIDB4MWZmZmYpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIG91dDsKKworCXJldCA9IG1jMTM3ODNfaXJxX2Fjayhwcml2LT5tYzEzNzgzLCBNQzEzNzgzX0lSUV9UT0RBKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBydGNfdG1fdG9fdGltZSgmYWxhcm0tPnRpbWUsICZzMTk3MCk7CisJaWYgKHVubGlrZWx5KHJldCkpCisJCWdvdG8gb3V0OworCisJZGV2X2RiZyhkZXYsICIlczogbyUyLnMgJWx1XG4iLCBfX2Z1bmNfXywgYWxhcm0tPmVuYWJsZWQgPyAibiIgOiAiZmYiLAorCQkJczE5NzApOworCisJcmV0ID0gbWMxMzc4M19ydGNfaXJxX2VuYWJsZV91bmxvY2tlZChkZXYsIGFsYXJtLT5lbmFibGVkLAorCQkJTUMxMzc4M19JUlFfVE9EQSk7CisJaWYgKHVubGlrZWx5KHJldCkpCisJCWdvdG8gb3V0OworCisJc2Vjb25kcyA9IHMxOTcwICUgODY0MDA7CisJZGF5cyA9IHMxOTcwIC8gODY0MDA7CisKKwlyZXQgPSBtYzEzNzgzX3JlZ193cml0ZShwcml2LT5tYzEzNzgzLCBNQzEzNzgzX1JUQ0RBWUEsIGRheXMpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIG91dDsKKworCXJldCA9IG1jMTM3ODNfcmVnX3dyaXRlKHByaXYtPm1jMTM3ODMsIE1DMTM3ODNfUlRDVE9EQSwgc2Vjb25kcyk7CisKK291dDoKKwltYzEzNzgzX3VubG9jayhwcml2LT5tYzEzNzgzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtYzEzNzgzX3J0Y19hbGFybV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldikKK3sKKwlzdHJ1Y3QgbWMxMzc4M19ydGMgKnByaXYgPSBkZXY7CisJc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMgPSBwcml2LT5tYzEzNzgzOworCisJZGV2X2RiZygmcHJpdi0+cnRjLT5kZXYsICJBbGFybVxuIik7CisKKwlydGNfdXBkYXRlX2lycShwcml2LT5ydGMsIDEsIFJUQ19JUlFGIHwgUlRDX0FGKTsKKworCW1jMTM3ODNfaXJxX2FjayhtYzEzNzgzLCBpcnEpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCiBzdGF0aWMgaXJxcmV0dXJuX3QgbWMxMzc4M19ydGNfdXBkYXRlX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2KQogewogCXN0cnVjdCBtYzEzNzgzX3J0YyAqcHJpdiA9IGRldjsKQEAgLTEyMyw3ICsyNzYsNyBAQAogCiAJcnRjX3VwZGF0ZV9pcnEocHJpdi0+cnRjLCAxLCBSVENfSVJRRiB8IFJUQ19VRik7CiAKLQltYzEzNzgzX2Fja2lycShtYzEzNzgzLCBpcnEpOworCW1jMTM3ODNfaXJxX2FjayhtYzEzNzgzLCBpcnEpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMTMxLDI0ICsyODQsMjEgQEAKIHN0YXRpYyBpbnQgbWMxMzc4M19ydGNfdXBkYXRlX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LAogCQl1bnNpZ25lZCBpbnQgZW5hYmxlZCkKIHsKLQlzdHJ1Y3QgbWMxMzc4M19ydGMgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQgcmV0ID0gLUVOT0RBVEE7CisJcmV0dXJuIG1jMTM3ODNfcnRjX2lycV9lbmFibGUoZGV2LCBlbmFibGVkLCBNQzEzNzgzX0lSUV8xSFopOworfQogCi0JbWMxMzc4M19sb2NrKHByaXYtPm1jMTM3ODMpOwotCWlmICghcHJpdi0+dmFsaWQpCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gKGVuYWJsZWQgPyBtYzEzNzgzX3VubWFzayA6IG1jMTM3ODNfbWFzaykocHJpdi0+bWMxMzc4MywKLQkJCU1DMTM3ODNfSVJRXzFIWik7Ci1vdXQ6Ci0JbWMxMzc4M191bmxvY2socHJpdi0+bWMxMzc4Myk7Ci0KLQlyZXR1cm4gcmV0Oworc3RhdGljIGludCBtYzEzNzgzX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJcmV0dXJuIG1jMTM3ODNfcnRjX2lycV9lbmFibGUoZGV2LCBlbmFibGVkLCBNQzEzNzgzX0lSUV9UT0RBKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIG1jMTM3ODNfcnRjX29wcyA9IHsKIAkucmVhZF90aW1lID0gbWMxMzc4M19ydGNfcmVhZF90aW1lLAogCS5zZXRfbW1zcyA9IG1jMTM3ODNfcnRjX3NldF9tbXNzLAorCS5yZWFkX2FsYXJtID0gbWMxMzc4M19ydGNfcmVhZF9hbGFybSwKKwkuc2V0X2FsYXJtID0gbWMxMzc4M19ydGNfc2V0X2FsYXJtLAorCS5hbGFybV9pcnFfZW5hYmxlID0gbWMxMzc4M19ydGNfYWxhcm1faXJxX2VuYWJsZSwKIAkudXBkYXRlX2lycV9lbmFibGUgPSBtYzEzNzgzX3J0Y191cGRhdGVfaXJxX2VuYWJsZSwKIH07CiAKQEAgLTE2MCw3ICszMTAsNyBAQAogCWRldl9kYmcoJnByaXYtPnJ0Yy0+ZGV2LCAiUlRDUlNUXG4iKTsKIAlwcml2LT52YWxpZCA9IDA7CiAKLQltYzEzNzgzX21hc2sobWMxMzc4MywgaXJxKTsKKwltYzEzNzgzX2lycV9tYXNrKG1jMTM3ODMsIGlycSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0xNjksNiArMzE5LDcgQEAKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBtYzEzNzgzX3J0YyAqcHJpdjsKKwlpbnQgcnRjcnN0X3BlbmRpbmc7CiAKIAlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXYpCkBAIC0xNzcsOCArMzI4LDYgQEAKIAlwcml2LT5tYzEzNzgzID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpOwogCi0JcHJpdi0+dmFsaWQgPSAxOwotCiAJbWMxMzc4M19sb2NrKHByaXYtPm1jMTM3ODMpOwogCiAJcmV0ID0gbWMxMzc4M19pcnFfcmVxdWVzdChwcml2LT5tYzEzNzgzLCBNQzEzNzgzX0lSUV9SVENSU1QsCkBAIC0xODYsMzMgKzMzNSw0NSBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX3Jlc2V0X2lycV9yZXF1ZXN0OwogCisJcmV0ID0gbWMxMzc4M19pcnFfc3RhdHVzKHByaXYtPm1jMTM3ODMsIE1DMTM3ODNfSVJRX1JUQ1JTVCwKKwkJCU5VTEwsICZydGNyc3RfcGVuZGluZyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcmVzZXRfaXJxX3N0YXR1czsKKworCXByaXYtPnZhbGlkID0gIXJ0Y3JzdF9wZW5kaW5nOworCiAJcmV0ID0gbWMxMzc4M19pcnFfcmVxdWVzdF9ub3VubWFzayhwcml2LT5tYzEzNzgzLCBNQzEzNzgzX0lSUV8xSFosCiAJCQltYzEzNzgzX3J0Y191cGRhdGVfaGFuZGxlciwgRFJJVkVSX05BTUUsIHByaXYpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX3VwZGF0ZV9pcnFfcmVxdWVzdDsKIAotCW1jMTM3ODNfdW5sb2NrKHByaXYtPm1jMTM3ODMpOworCXJldCA9IG1jMTM3ODNfaXJxX3JlcXVlc3Rfbm91bm1hc2socHJpdi0+bWMxMzc4MywgTUMxMzc4M19JUlFfVE9EQSwKKwkJCW1jMTM3ODNfcnRjX2FsYXJtX2hhbmRsZXIsIERSSVZFUl9OQU1FLCBwcml2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9hbGFybV9pcnFfcmVxdWVzdDsKIAogCXByaXYtPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIocGRldi0+bmFtZSwKIAkJCSZwZGV2LT5kZXYsICZtYzEzNzgzX3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKLQogCWlmIChJU19FUlIocHJpdi0+cnRjKSkgewogCQlyZXQgPSBQVFJfRVJSKHByaXYtPnJ0Yyk7CiAKLQkJbWMxMzc4M19sb2NrKHByaXYtPm1jMTM3ODMpOworCQltYzEzNzgzX2lycV9mcmVlKHByaXYtPm1jMTM3ODMsIE1DMTM3ODNfSVJRX1RPREEsIHByaXYpOworZXJyX2FsYXJtX2lycV9yZXF1ZXN0OgogCiAJCW1jMTM3ODNfaXJxX2ZyZWUocHJpdi0+bWMxMzc4MywgTUMxMzc4M19JUlFfMUhaLCBwcml2KTsKIGVycl91cGRhdGVfaXJxX3JlcXVlc3Q6CiAKK2Vycl9yZXNldF9pcnFfc3RhdHVzOgorCiAJCW1jMTM3ODNfaXJxX2ZyZWUocHJpdi0+bWMxMzc4MywgTUMxMzc4M19JUlFfUlRDUlNULCBwcml2KTsKIGVycl9yZXNldF9pcnFfcmVxdWVzdDoKIAotCQltYzEzNzgzX3VubG9jayhwcml2LT5tYzEzNzgzKTsKLQogCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAkJa2ZyZWUocHJpdik7CiAJfQogCisJbWMxMzc4M191bmxvY2socHJpdi0+bWMxMzc4Myk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMjAsMTAgKzM4MSwxMSBAQAogewogCXN0cnVjdCBtYzEzNzgzX3J0YyAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCi0JcnRjX2RldmljZV91bnJlZ2lzdGVyKHByaXYtPnJ0Yyk7Ci0KIAltYzEzNzgzX2xvY2socHJpdi0+bWMxMzc4Myk7CiAKKwlydGNfZGV2aWNlX3VucmVnaXN0ZXIocHJpdi0+cnRjKTsKKworCW1jMTM3ODNfaXJxX2ZyZWUocHJpdi0+bWMxMzc4MywgTUMxMzc4M19JUlFfVE9EQSwgcHJpdik7CiAJbWMxMzc4M19pcnFfZnJlZShwcml2LT5tYzEzNzgzLCBNQzEzNzgzX0lSUV8xSFosIHByaXYpOwogCW1jMTM3ODNfaXJxX2ZyZWUocHJpdi0+bWMxMzc4MywgTUMxMzc4M19JUlFfUlRDUlNULCBwcml2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW14Yy5jIGIvZHJpdmVycy9ydGMvcnRjLW14Yy5jCmluZGV4IDZiZDUwNzIuLjg3MTBmOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1teGMuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbXhjLmMKQEAgLTM5Niw4ICszOTYsMTEgQEAKIAlwZGF0YS0+aW9hZGRyID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCiAJY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiY2tpbCIpOwotCWlmIChJU19FUlIoY2xrKSkKLQkJcmV0dXJuIFBUUl9FUlIoY2xrKTsKKwlpZiAoSVNfRVJSKGNsaykpIHsKKwkJaW91bm1hcChwZGF0YS0+aW9hZGRyKTsKKwkJcmV0ID0gUFRSX0VSUihjbGspOworCQlnb3RvIGV4aXRfZnJlZV9wZGF0YTsKKwl9CiAKIAlyYXRlID0gY2xrX2dldF9yYXRlKGNsayk7CiAJY2xrX3B1dChjbGspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXBjZjIxMjMuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wY2YyMTIzLmMKaW5kZXggZTc1ZGY5ZC4uMmNlYjM2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXBjZjIxMjMuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcGNmMjEyMy5jCkBAIC0zMTUsNyArMzE1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHBjZjIxMjNfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBwY2YyMTIzX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBwY2YyMTIzX3BsYXRfZGF0YSAqcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOwogCWludCBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXR3bC5jIGIvZHJpdmVycy9ydGMvcnRjLXR3bC5jCmluZGV4IGM2YTgzYTIuLmVkMWI4NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy10d2wuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtdHdsLmMKQEAgLTU3LDcgKzU3LDcgQEAKIAlSRUdfUlRDX0NPTVBfTFNCX1JFRywKIAlSRUdfUlRDX0NPTVBfTVNCX1JFRywKIH07Ci1jb25zdCBzdGF0aWMgdTggdHdsNDAzMF9ydGNfcmVnX21hcFtdID0geworc3RhdGljIGNvbnN0IHU4IHR3bDQwMzBfcnRjX3JlZ19tYXBbXSA9IHsKIAlbUkVHX1NFQ09ORFNfUkVHXSA9IDB4MDAsCiAJW1JFR19NSU5VVEVTX1JFR10gPSAweDAxLAogCVtSRUdfSE9VUlNfUkVHXSA9IDB4MDIsCkBAIC04MCw3ICs4MCw3IEBACiAJW1JFR19SVENfQ09NUF9MU0JfUkVHXSA9IDB4MTAsCiAJW1JFR19SVENfQ09NUF9NU0JfUkVHXSA9IDB4MTEsCiB9OwotY29uc3Qgc3RhdGljIHU4IHR3bDYwMzBfcnRjX3JlZ19tYXBbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCB0d2w2MDMwX3J0Y19yZWdfbWFwW10gPSB7CiAJW1JFR19TRUNPTkRTX1JFR10gPSAweDAwLAogCVtSRUdfTUlOVVRFU19SRUddID0gMHgwMSwKIAlbUkVHX0hPVVJTX1JFR10gPSAweDAyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXdtODM1MC5jIGIvZHJpdmVycy9ydGMvcnRjLXdtODM1MC5jCmluZGV4IGYxZTQ0MDUyLi4zZDBkYzc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtd204MzUwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXdtODM1MC5jCkBAIC0zMDcsMTEgKzMwNywxOCBAQAogewogCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCisJLyogU3VwcHJlc3MgZHVwbGljYXRlIGNoYW5nZXMgc2luY2UgZ2VuaXJxIG5lc3RzIGVuYWJsZSBhbmQKKwkgKiBkaXNhYmxlIGNhbGxzLiAqLworCWlmIChlbmFibGVkID09IHdtODM1MC0+cnRjLnVwZGF0ZV9lbmFibGVkKQorCQlyZXR1cm4gMDsKKwogCWlmIChlbmFibGVkKQogCQl3bTgzNTBfdW5tYXNrX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfUlRDX1NFQyk7CiAJZWxzZQogCQl3bTgzNTBfbWFza19pcnEod204MzUwLCBXTTgzNTBfSVJRX1JUQ19TRUMpOwogCisJd204MzUwLT5ydGMudXBkYXRlX2VuYWJsZWQgPSBlbmFibGVkOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ3OCw4ICs0ODUsOCBAQAogCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCB3bTgzNTBfcnRjICp3bV9ydGMgPSAmd204MzUwLT5ydGM7CiAKLQl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX1JUQ19TRUMpOwotCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfUlRDX0FMTSk7CisJd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9SVENfU0VDLCB3bTgzNTApOworCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfUlRDX0FMTSwgd204MzUwKTsKIAogCXJ0Y19kZXZpY2VfdW5yZWdpc3Rlcih3bV9ydGMtPnJ0Yyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCmluZGV4IDQ5NTFhYTguLmJiZWE5MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KICNpbmNsdWRlIDxhc20vaWRhbHMuaD4KICNpbmNsdWRlIDxhc20vaXRjdy5oPgorI2luY2x1ZGUgPGFzbS9kaWFnLmg+CiAKIC8qIFRoaXMgaXMgdWdseS4uLiAqLwogI2RlZmluZSBQUklOVEtfSEVBREVSICJkYXNkOiIKQEAgLTIyMTIsNiArMjIxMywxMyBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlpZiAoKG1vZGUgJiBGTU9ERV9XUklURSkgJiYKKwkgICAgKHRlc3RfYml0KERBU0RfRkxBR19ERVZJQ0VfUk8sICZiYXNlLT5mbGFncykgfHwKKwkgICAgIChiYXNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9SRUFET05MWSkpKSB7CisJCXJjID0gLUVST0ZTOworCQlnb3RvIG91dDsKKwl9CisKIAlyZXR1cm4gMDsKIAogb3V0OgpAQCAtMjI4OSw2ICsyMjk3LDM0IEBACiAgKiBTRUNUSU9OOiBjb21tb24gZnVuY3Rpb25zIGZvciBjY3dfZHJpdmVyIHVzZQogICovCiAKKy8qCisgKiBJcyB0aGUgZGV2aWNlIHJlYWQtb25seT8KKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJlcG9ydCB0aGUgc2V0dGluZyBvZiB0aGUKKyAqIHJlYWRvbmx5IGRldmljZSBhdHRyaWJ1dGUsIGJ1dCBob3cgaXQgaXMgY29uZmlndXJlZCBpbiB6L1ZNLgorICovCitpbnQgZGFzZF9kZXZpY2VfaXNfcm8oc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IGNjd19kZXZfaWQgZGV2X2lkOworCXN0cnVjdCBkaWFnMjEwIGRpYWdfZGF0YTsKKwlpbnQgcmM7CisKKwlpZiAoIU1BQ0hJTkVfSVNfVk0pCisJCXJldHVybiAwOworCWNjd19kZXZpY2VfZ2V0X2lkKGRldmljZS0+Y2RldiwgJmRldl9pZCk7CisJbWVtc2V0KCZkaWFnX2RhdGEsIDAsIHNpemVvZihkaWFnX2RhdGEpKTsKKwlkaWFnX2RhdGEudnJkY2R2bm8gPSBkZXZfaWQuZGV2bm87CisJZGlhZ19kYXRhLnZyZGNsZW4gPSBzaXplb2YoZGlhZ19kYXRhKTsKKwlyYyA9IGRpYWcyMTAoJmRpYWdfZGF0YSk7CisJaWYgKHJjID09IDAgfHwgcmMgPT0gMikgeworCQlyZXR1cm4gZGlhZ19kYXRhLnZyZGN2ZmxhICYgMHg4MDsKKwl9IGVsc2UgeworCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsICJkaWFnMjEwIGZhaWxlZCBmb3IgZGV2PSUwNHggd2l0aCByYz0lZCIsCisJCQkgIGRldl9pZC5kZXZubywgcmMpOworCQlyZXR1cm4gMDsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkYXNkX2RldmljZV9pc19ybyk7CisKIHN0YXRpYyB2b2lkIGRhc2RfZ2VuZXJpY19hdXRvX29ubGluZSh2b2lkICpkYXRhLCBhc3luY19jb29raWVfdCBjb29raWUpCiB7CiAJc3RydWN0IGNjd19kZXZpY2UgKmNkZXYgPSBkYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzk5MF9lcnAuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMKaW5kZXggNDQ3OTZiYS4uNTEyMjRmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzk5MF9lcnAuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jCkBAIC0xMDQ1LDYgKzEwNDUsMTAgQEAKIAogCQllcnAtPnJldHJpZXMgPSA1OwogCisJfSBlbHNlIGlmIChzZW5zZVsxXSAmIFNOUzFfV1JJVEVfSU5ISUJJVEVEKSB7CisJCWRldl9lcnIoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQW4gSS9PIHJlcXVlc3Qgd2FzIHJlamVjdGVkIgorCQkJIiBiZWNhdXNlIHdyaXRpbmcgaXMgaW5oaWJpdGVkXG4iKTsKKwkJZXJwID0gZGFzZF8zOTkwX2VycF9jbGVhbnVwKGVycCwgREFTRF9DUVJfRkFJTEVEKTsKIAl9IGVsc2UgewogCQkvKiBmYXRhbCBlcnJvciAtICBzZXQgc3RhdHVzIHRvIEZBSUxFRAogCQkgICBpbnRlcm5hbCBlcnJvciAwOSAtIENvbW1hbmQgUmVqZWN0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCmluZGV4IGQ0OTc2NmYuLjhlMjM5MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jCkBAIC03NDIsNiArNzQyLDcgQEAKIAkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgZGFzZF9kZXZtYXAgKmRldm1hcDsKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKIAlpbnQgdmFsOwogCWNoYXIgKmVuZHA7CiAKQEAgLTc1OCwxMiArNzU5LDE0IEBACiAJCWRldm1hcC0+ZmVhdHVyZXMgfD0gREFTRF9GRUFUVVJFX1JFQURPTkxZOwogCWVsc2UKIAkJZGV2bWFwLT5mZWF0dXJlcyAmPSB+REFTRF9GRUFUVVJFX1JFQURPTkxZOwotCWlmIChkZXZtYXAtPmRldmljZSkKLQkJZGV2bWFwLT5kZXZpY2UtPmZlYXR1cmVzID0gZGV2bWFwLT5mZWF0dXJlczsKLQlpZiAoZGV2bWFwLT5kZXZpY2UgJiYgZGV2bWFwLT5kZXZpY2UtPmJsb2NrCi0JICAgICYmIGRldm1hcC0+ZGV2aWNlLT5ibG9jay0+Z2RwKQotCQlzZXRfZGlza19ybyhkZXZtYXAtPmRldmljZS0+YmxvY2stPmdkcCwgdmFsKTsKKwlkZXZpY2UgPSBkZXZtYXAtPmRldmljZTsKKwlpZiAoZGV2aWNlKSB7CisJCWRldmljZS0+ZmVhdHVyZXMgPSBkZXZtYXAtPmZlYXR1cmVzOworCQl2YWwgPSB2YWwgfHwgdGVzdF9iaXQoREFTRF9GTEFHX0RFVklDRV9STywgJmRldmljZS0+ZmxhZ3MpOworCX0KIAlzcGluX3VubG9jaygmZGFzZF9kZXZtYXBfbG9jayk7CisJaWYgKGRldmljZSAmJiBkZXZpY2UtPmJsb2NrICYmIGRldmljZS0+YmxvY2stPmdkcCkKKwkJc2V0X2Rpc2tfcm8oZGV2aWNlLT5ibG9jay0+Z2RwLCB2YWwpOwogCXJldHVybiBjb3VudDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCmluZGV4IDZlMTQ4NjMuLjY4N2YzMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKQEAgLTE0NSwxMiArMTQ1LDEwIEBACiAJbWRza190ZXJtX2lvKGRldmljZSk7CiAJcmMgPSBtZHNrX2luaXRfaW8oZGV2aWNlLCBkZXZpY2UtPmJsb2NrLT5icF9ibG9jaywgMCwgTlVMTCk7CiAJaWYgKHJjID09IDQpIHsKLQkJaWYgKCEoZGV2aWNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9SRUFET05MWSkpIHsKKwkJaWYgKCEodGVzdF9hbmRfc2V0X2JpdChEQVNEX0ZMQUdfREVWSUNFX1JPLCAmZGV2aWNlLT5mbGFncykpKQogCQkJcHJfd2FybmluZygiJXM6IFRoZSBhY2Nlc3MgbW9kZSBvZiBhIERJQUcgZGV2aWNlICIKIAkJCQkgICAiY2hhbmdlZCB0byByZWFkLW9ubHlcbiIsCiAJCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7Ci0JCQlkZXZpY2UtPmZlYXR1cmVzIHw9IERBU0RfRkVBVFVSRV9SRUFET05MWTsKLQkJfQogCQlyYyA9IDA7CiAJfQogCWlmIChyYykKQEAgLTQ0OSw3ICs0NDcsNyBAQAogCQlyYyA9IC1FSU87CiAJfSBlbHNlIHsKIAkJaWYgKHJjID09IDQpCi0JCQlkZXZpY2UtPmZlYXR1cmVzIHw9IERBU0RfRkVBVFVSRV9SRUFET05MWTsKKwkJCXNldF9iaXQoREFTRF9GTEFHX0RFVklDRV9STywgJmRldmljZS0+ZmxhZ3MpOwogCQlwcl9pbmZvKCIlczogTmV3IERBU0Qgd2l0aCAlbGQgYnl0ZS9ibG9jaywgdG90YWwgc2l6ZSAlbGQgIgogCQkJIktCJXNcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCiAJCQkodW5zaWduZWQgbG9uZykgYmxvY2stPmJwX2Jsb2NrLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCmluZGV4IDFjY2EyMWEuLjAxZjRlN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKQEAgLTEwODksNiArMTA4OSw3IEBACiAJc3RydWN0IGRhc2RfZWNrZF9wcml2YXRlICpwcml2YXRlOwogCXN0cnVjdCBkYXNkX2Jsb2NrICpibG9jazsKIAlpbnQgaXNfa25vd24sIHJjOworCWludCByZWFkb25seTsKIAogCWlmICghY2N3X2RldmljZV9pc19wYXRoZ3JvdXAoZGV2aWNlLT5jZGV2KSkgewogCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsCkBAIC0xMTgyLDE1ICsxMTgzLDIwIEBACiAJZWxzZQogCQlwcml2YXRlLT5yZWFsX2N5bCA9IHByaXZhdGUtPnJkY19kYXRhLm5vX2N5bDsKIAorCXJlYWRvbmx5ID0gZGFzZF9kZXZpY2VfaXNfcm8oZGV2aWNlKTsKKwlpZiAocmVhZG9ubHkpCisJCXNldF9iaXQoREFTRF9GTEFHX0RFVklDRV9STywgJmRldmljZS0+ZmxhZ3MpOworCiAJZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LCAiTmV3IERBU0QgJTA0WC8lMDJYIChDVSAlMDRYLyUwMlgpICIKLQkJICJ3aXRoICVkIGN5bGluZGVycywgJWQgaGVhZHMsICVkIHNlY3RvcnNcbiIsCisJCSAid2l0aCAlZCBjeWxpbmRlcnMsICVkIGhlYWRzLCAlZCBzZWN0b3JzJXNcbiIsCiAJCSBwcml2YXRlLT5yZGNfZGF0YS5kZXZfdHlwZSwKIAkJIHByaXZhdGUtPnJkY19kYXRhLmRldl9tb2RlbCwKIAkJIHByaXZhdGUtPnJkY19kYXRhLmN1X3R5cGUsCiAJCSBwcml2YXRlLT5yZGNfZGF0YS5jdV9tb2RlbC5tb2RlbCwKIAkJIHByaXZhdGUtPnJlYWxfY3lsLAogCQkgcHJpdmF0ZS0+cmRjX2RhdGEudHJrX3Blcl9jeWwsCi0JCSBwcml2YXRlLT5yZGNfZGF0YS5zZWNfcGVyX3Ryayk7CisJCSBwcml2YXRlLT5yZGNfZGF0YS5zZWNfcGVyX3RyaywKKwkJIHJlYWRvbmx5ID8gIiwgcmVhZC1vbmx5IGRldmljZSIgOiAiIik7CiAJcmV0dXJuIDA7CiAKIG91dF9lcnIzOgpAQCAtMjgzOSw4ICsyODQ1LDEzIEBACiAJY2hhciAqcHNmX2RhdGEsICpyc3NkX3Jlc3VsdDsKIAlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CiAJc3RydWN0IGNjdzEgKmNjdzsKKwljaGFyIHBzZjAsIHBzZjE7CiAJaW50IHJjOwogCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pICYmICFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQorCQlyZXR1cm4gLUVBQ0NFUzsKKwlwc2YwID0gcHNmMSA9IDA7CisKIAkvKiBDb3B5IHBhcm1zIGZyb20gY2FsbGVyICovCiAJcmMgPSAtRUZBVUxUOwogCWlmIChjb3B5X2Zyb21fdXNlcigmdXNycGFybSwgYXJncCwgc2l6ZW9mKHVzcnBhcm0pKSkKQEAgLTI4NjksMTIgKzI4ODAsOCBAQAogCQkJICAgKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpIHVzcnBhcm0ucHNmX2RhdGEsCiAJCQkgICB1c3JwYXJtLnBzZl9kYXRhX2xlbikpCiAJCWdvdG8gb3V0X2ZyZWU7Ci0KLQkvKiBzYW5pdHkgY2hlY2sgb24gc3lzY2FsbCBoZWFkZXIgKi8KLQlpZiAocHNmX2RhdGFbMF0gIT0gMHgxNyAmJiBwc2ZfZGF0YVsxXSAhPSAweGNlKSB7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBvdXRfZnJlZTsKLQl9CisJcHNmMCA9IHBzZl9kYXRhWzBdOworCXBzZjEgPSBwc2ZfZGF0YVsxXTsKIAogCS8qIHNldHVwIENDV3MgZm9yIFBTRiArIFJTU0QgKi8KIAljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChEQVNEX0VDS0RfTUFHSUMsIDIgLCAwLCBkZXZpY2UpOwpAQCAtMjkyNSw3ICsyOTMyLDkgQEAKIAlrZnJlZShyc3NkX3Jlc3VsdCk7CiAJa2ZyZWUocHNmX2RhdGEpOwogb3V0OgotCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwgIlN5bW1ldHJpeCBpb2N0bDogcmM9JWQiLCByYyk7CisJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLAorCQkgICAgICAiU3ltbWV0cml4IGlvY3RsICgweCUwMnggMHglMDJ4KTogcmM9JWQiLAorCQkgICAgICAoaW50KSBwc2YwLCAoaW50KSBwc2YxLCByYyk7CiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5jCmluZGV4IDBmMTUyNDQuLjM3MjgyYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5jCkBAIC0xMjQsNiArMTI0LDcgQEAKIAlzdHJ1Y3QgZGFzZF9mYmFfcHJpdmF0ZSAqcHJpdmF0ZTsKIAlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiA9IGRldmljZS0+Y2RldjsKIAlpbnQgcmM7CisJaW50IHJlYWRvbmx5OwogCiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9mYmFfcHJpdmF0ZSAqKSBkZXZpY2UtPnByaXZhdGU7CiAJaWYgKCFwcml2YXRlKSB7CkBAIC0xNjIsMTYgKzE2MywyMSBAQAogCQlyZXR1cm4gcmM7CiAJfQogCisJcmVhZG9ubHkgPSBkYXNkX2RldmljZV9pc19ybyhkZXZpY2UpOworCWlmIChyZWFkb25seSkKKwkJc2V0X2JpdChEQVNEX0ZMQUdfREVWSUNFX1JPLCAmZGV2aWNlLT5mbGFncyk7CisKIAlkZXZfaW5mbygmZGV2aWNlLT5jZGV2LT5kZXYsCiAJCSAiTmV3IEZCQSBEQVNEICUwNFgvJTAyWCAoQ1UgJTA0WC8lMDJYKSB3aXRoICVkIE1CICIKLQkJICJhbmQgJWQgQi9ibGtcbiIsCisJCSAiYW5kICVkIEIvYmxrJXNcbiIsCiAJCSBjZGV2LT5pZC5kZXZfdHlwZSwKIAkJIGNkZXYtPmlkLmRldl9tb2RlbCwKIAkJIGNkZXYtPmlkLmN1X3R5cGUsCiAJCSBjZGV2LT5pZC5jdV9tb2RlbCwKIAkJICgocHJpdmF0ZS0+cmRjX2RhdGEuYmxrX2Jkc2EgKgogCQkgICAocHJpdmF0ZS0+cmRjX2RhdGEuYmxrX3NpemUgPj4gOSkpID4+IDExKSwKLQkJIHByaXZhdGUtPnJkY19kYXRhLmJsa19zaXplKTsKKwkJIHByaXZhdGUtPnJkY19kYXRhLmJsa19zaXplLAorCQkgcmVhZG9ubHkgPyAiLCByZWFkLW9ubHkgZGV2aWNlIiA6ICIiKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMKaW5kZXggOTRmOTJhMS4uMzBhMWNhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jCkBAIC03MCw3ICs3MCw4IEBACiAJfQogCWxlbiArPSBzcHJpbnRmKGdkcC0+ZGlza19uYW1lICsgbGVuLCAiJWMiLCAnYScrKGJhc2UtPmRldmluZGV4JTI2KSk7CiAKLQlpZiAoYmxvY2stPmJhc2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX1JFQURPTkxZKQorCWlmIChiYXNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9SRUFET05MWSB8fAorCSAgICB0ZXN0X2JpdChEQVNEX0ZMQUdfREVWSUNFX1JPLCAmYmFzZS0+ZmxhZ3MpKQogCQlzZXRfZGlza19ybyhnZHAsIDEpOwogCWdkcC0+cHJpdmF0ZV9kYXRhID0gYmxvY2s7CiAJZ2RwLT5xdWV1ZSA9IGJsb2NrLT5yZXF1ZXN0X3F1ZXVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmggYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaAppbmRleCBlZDczY2U1Li5hOTFkNGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaAorKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaApAQCAtNDM2LDYgKzQzNiwxMCBAQAogI2RlZmluZSBEQVNEX0ZMQUdfT0ZGTElORQkzCS8qIGRldmljZSBpcyBpbiBvZmZsaW5lIHByb2Nlc3NpbmcgKi8KICNkZWZpbmUgREFTRF9GTEFHX0VFUl9TTlNTCTQJLyogQSBTTlNTIGlzIHJlcXVpcmVkICovCiAjZGVmaW5lIERBU0RfRkxBR19FRVJfSU5fVVNFCTUJLyogQSBTTlNTIHJlcXVlc3QgaXMgcnVubmluZyAqLworI2RlZmluZSBEQVNEX0ZMQUdfREVWSUNFX1JPCTYJLyogVGhlIGRldmljZSBpdHNlbGYgaXMgcmVhZC1vbmx5LiBEb24ndAorCQkJCQkgKiBjb25mdXNlIHRoaXMgd2l0aCB0aGUgdXNlciBzcGVjaWZpZWQKKwkJCQkJICogcmVhZC1vbmx5IGZlYXR1cmUuCisJCQkJCSAqLwogCiB2b2lkIGRhc2RfcHV0X2RldmljZV93YWtlKHN0cnVjdCBkYXNkX2RldmljZSAqKTsKIApAQCAtNjA5LDYgKzYxMyw5IEBACiB2b2lkIGRhc2RfZGV2aWNlX3NldF9zdG9wX2JpdHMoc3RydWN0IGRhc2RfZGV2aWNlICosIGludCk7CiB2b2lkIGRhc2RfZGV2aWNlX3JlbW92ZV9zdG9wX2JpdHMoc3RydWN0IGRhc2RfZGV2aWNlICosIGludCk7CiAKK2ludCBkYXNkX2RldmljZV9pc19ybyhzdHJ1Y3QgZGFzZF9kZXZpY2UgKik7CisKKwogLyogZXh0ZXJuYWxzIGluIGRhc2RfZGV2bWFwLmMgKi8KIGV4dGVybiBpbnQgZGFzZF9tYXhfZGV2aW5kZXg7CiBleHRlcm4gaW50IGRhc2RfcHJvYmVvbmx5OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMKaW5kZXggNzAzOWQ5Yy4uMzQ3OWY4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jCkBAIC0xOTksNyArMTk5LDggQEAKIAlpZiAoIWFyZ3ApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGJsb2NrLT5iYXNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9SRUFET05MWSkKKwlpZiAoYmxvY2stPmJhc2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX1JFQURPTkxZIHx8CisJICAgIHRlc3RfYml0KERBU0RfRkxBR19ERVZJQ0VfUk8sICZibG9jay0+YmFzZS0+ZmxhZ3MpKQogCQlyZXR1cm4gLUVST0ZTOwogCWlmIChjb3B5X2Zyb21fdXNlcigmZmRhdGEsIGFyZ3AsIHNpemVvZihzdHJ1Y3QgZm9ybWF0X2RhdGFfdCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTM0OSw3ICszNTAsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoZ2V0X3VzZXIoaW50dmFsLCAoaW50IF9fdXNlciAqKWFyZ3ApKQogCQlyZXR1cm4gLUVGQVVMVDsKLQorCWlmICghaW50dmFsICYmIHRlc3RfYml0KERBU0RfRkxBR19ERVZJQ0VfUk8sICZibG9jay0+YmFzZS0+ZmxhZ3MpKQorCQlyZXR1cm4gLUVST0ZTOwogCXNldF9kaXNrX3JvKGJkZXYtPmJkX2Rpc2ssIGludHZhbCk7CiAJcmV0dXJuIGRhc2Rfc2V0X2ZlYXR1cmUoYmxvY2stPmJhc2UtPmNkZXYsIERBU0RfRkVBVFVSRV9SRUFET05MWSwgaW50dmFsKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCmluZGV4IGM2YWJiNzUuLjZkMjI5ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwpAQCAtNzY0LDcgKzc2NCw3IEBACiBzdGF0aWMgdm9pZCBpb19zdWJjaGFubmVsX3JlZ2lzdGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogewogCXN0cnVjdCBzdWJjaGFubmVsICpzY2g7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBhZGp1c3RfaW5pdF9jb3VudCA9IDE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CkBAIC03OTMsNiArNzkzLDcgQEAKIAkJCQkJICAgICAgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLnNzaWQsCiAJCQkJCSAgICAgIGNkZXYtPnByaXZhdGUtPmRldl9pZC5kZXZubyk7CiAJCX0KKwkJYWRqdXN0X2luaXRfY291bnQgPSAwOwogCQlnb3RvIG91dDsKIAl9CiAJLyoKQEAgLTgxOCw3ICs4MTksNyBAQAogCWNkZXYtPnByaXZhdGUtPmZsYWdzLnJlY29nX2RvbmUgPSAxOwogCXdha2VfdXAoJmNkZXYtPnByaXZhdGUtPndhaXRfcSk7CiBvdXRfZXJyOgotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjY3dfZGV2aWNlX2luaXRfY291bnQpKQorCWlmIChhZGp1c3RfaW5pdF9jb3VudCAmJiBhdG9taWNfZGVjX2FuZF90ZXN0KCZjY3dfZGV2aWNlX2luaXRfY291bnQpKQogCQl3YWtlX3VwKCZjY3dfZGV2aWNlX2luaXRfd3EpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jCmluZGV4IGM5NGViMmEuLjZjZTgzZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jCkBAIC0zMyw3ICszMyw2IEBACiAJREJGX0hFWCgmaW5pdF9kYXRhLT5pbnB1dF9oYW5kbGVyLCBzaXplb2Yodm9pZCAqKSk7CiAJREJGX0hFWCgmaW5pdF9kYXRhLT5vdXRwdXRfaGFuZGxlciwgc2l6ZW9mKHZvaWQgKikpOwogCURCRl9IRVgoJmluaXRfZGF0YS0+aW50X3Bhcm0sIHNpemVvZihsb25nKSk7Ci0JREJGX0hFWCgmaW5pdF9kYXRhLT5mbGFncywgc2l6ZW9mKGxvbmcpKTsKIAlEQkZfSEVYKCZpbml0X2RhdGEtPmlucHV0X3NiYWxfYWRkcl9hcnJheSwgc2l6ZW9mKHZvaWQgKikpOwogCURCRl9IRVgoJmluaXRfZGF0YS0+b3V0cHV0X3NiYWxfYWRkcl9hcnJheSwgc2l6ZW9mKHZvaWQgKikpOwogCURCRl9FVkVOVCgiaXJxOiU4bHgiLCAodW5zaWduZWQgbG9uZylpcnFfcHRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCmluZGV4IDIzMmVmMDQuLjRmOGY3NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwpAQCAtNTg4LDEwICs1ODgsMTEgQEAKIAlpZiAocS0+aXNfaW5wdXRfcSkgewogCQlxcGVyZl9pbmMocSwgaW5ib3VuZF9oYW5kbGVyKTsKIAkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgImtpaCBzOiUwMnggYzolMDJ4Iiwgc3RhcnQsIGNvdW50KTsKLQl9IGVsc2UKKwl9IGVsc2UgewogCQlxcGVyZl9pbmMocSwgb3V0Ym91bmRfaGFuZGxlcik7CiAJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJrb2g6IHM6JTAyeCBjOiUwMngiLAogCQkJICAgICAgc3RhcnQsIGNvdW50KTsKKwl9CiAKIAlxLT5oYW5kbGVyKHEtPmlycV9wdHItPmNkZXYsIHEtPnFkaW9fZXJyb3IsIHEtPm5yLCBzdGFydCwgY291bnQsCiAJCSAgIHEtPmlycV9wdHItPmludF9wYXJtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvS2NvbmZpZyBiL2RyaXZlcnMvczM5MC9uZXQvS2NvbmZpZwppbmRleCBjYjkwOWE1Li45NzdiYjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9zMzkwL25ldC9LY29uZmlnCkBAIC00Myw2ICs0MywxNiBAQAogCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gcmVjZWl2ZSBTTVNHIG1lc3NhZ2VzCiAJICBmcm9tIG90aGVyIFZNIGd1ZXN0IHN5c3RlbXMuCiAKK2NvbmZpZyBTTVNHSVVDVl9FVkVOVAorCXRyaXN0YXRlICJEZWxpdmVyIElVQ1Ygc3BlY2lhbCBtZXNzYWdlcyBhcyB1ZXZlbnRzIChWTSBvbmx5KSIKKwlkZXBlbmRzIG9uIFNNU0dJVUNWCisJaGVscAorCSAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGRlbGl2ZXIgQ1Agc3BlY2lhbCBtZXNzYWdlcyAoU01TR3MpIGFzCisJICB1ZXZlbnRzLiAgVGhlIGRyaXZlciBoYW5kbGVzIG9ubHkgdGhvc2Ugc3BlY2lhbCBtZXNzYWdlcyB0aGF0CisJICBzdGFydCB3aXRoICJBUFAiLgorCisJICBUbyBjb21waWxlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTS4gVGhlIG1vZHVsZSBuYW1lIGlzICJzbXNnaXVjdl9hcHAiLgorCiBjb25maWcgQ0xBVwogCXRyaXN0YXRlICJDTEFXIGRldmljZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gQ0NXICYmIE5FVERFVklDRVMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3MzOTAvbmV0L01ha2VmaWxlCmluZGV4IDZjYWI1YTYuLjRkZmU4YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zMzkwL25ldC9NYWtlZmlsZQpAQCAtNiw2ICs2LDcgQEAKIG9iai0kKENPTkZJR19DVENNKSArPSBjdGNtLm8gZnNtLm8KIG9iai0kKENPTkZJR19ORVRJVUNWKSArPSBuZXRpdWN2Lm8gZnNtLm8KIG9iai0kKENPTkZJR19TTVNHSVVDVikgKz0gc21zZ2l1Y3Yubworb2JqLSQoQ09ORklHX1NNU0dJVUNWX0VWRU5UKSArPSBzbXNnaXVjdl9hcHAubwogb2JqLSQoQ09ORklHX0xDUykgKz0gbGNzLm8KIG9iai0kKENPTkZJR19DTEFXKSArPSBjbGF3Lm8KIHFldGgteSArPSBxZXRoX2NvcmVfc3lzLm8gcWV0aF9jb3JlX21haW4ubyBxZXRoX2NvcmVfbXBjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwppbmRleCBmYThhNTE5Li43ZDI1YmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCkBAIC0zODA1LDkgKzM4MDUsNiBAQAogCWluaXRfZGF0YS5pbnB1dF9oYW5kbGVyICAgICAgICAgID0gY2FyZC0+ZGlzY2lwbGluZS5pbnB1dF9oYW5kbGVyOwogCWluaXRfZGF0YS5vdXRwdXRfaGFuZGxlciAgICAgICAgID0gY2FyZC0+ZGlzY2lwbGluZS5vdXRwdXRfaGFuZGxlcjsKIAlpbml0X2RhdGEuaW50X3Bhcm0gICAgICAgICAgICAgICA9ICh1bnNpZ25lZCBsb25nKSBjYXJkOwotCWluaXRfZGF0YS5mbGFncyAgICAgICAgICAgICAgICAgID0gUURJT19JTkJPVU5EXzBDT1BZX1NCQUxTIHwKLQkJCQkJICAgUURJT19PVVRCT1VORF8wQ09QWV9TQkFMUyB8Ci0JCQkJCSAgIFFESU9fVVNFX09VVEJPVU5EX1BDSVM7CiAJaW5pdF9kYXRhLmlucHV0X3NiYWxfYWRkcl9hcnJheSAgPSAodm9pZCAqKikgaW5fc2JhbF9wdHJzOwogCWluaXRfZGF0YS5vdXRwdXRfc2JhbF9hZGRyX2FycmF5ID0gKHZvaWQgKiopIG91dF9zYmFsX3B0cnM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYyBiL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYwppbmRleCA2N2YyNDg1Li5lY2VmMWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jCkBAIC0zMSw5ICszMSw5IEBACiAKIHN0cnVjdCBzbXNnX2NhbGxiYWNrIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JY2hhciAqcHJlZml4OworCWNvbnN0IGNoYXIgKnByZWZpeDsKIAlpbnQgbGVuOwotCXZvaWQgKCpjYWxsYmFjaykoY2hhciAqZnJvbSwgY2hhciAqc3RyKTsKKwl2b2lkICgqY2FsbGJhY2spKGNvbnN0IGNoYXIgKmZyb20sIGNoYXIgKnN0cik7CiB9OwogCiBNT0RVTEVfQVVUSE9SCkBAIC0xMDAsOCArMTAwLDggQEAKIAlrZnJlZShidWZmZXIpOwogfQogCi1pbnQgc21zZ19yZWdpc3Rlcl9jYWxsYmFjayhjaGFyICpwcmVmaXgsCi0JCQkgICB2b2lkICgqY2FsbGJhY2spKGNoYXIgKmZyb20sIGNoYXIgKnN0cikpCitpbnQgc21zZ19yZWdpc3Rlcl9jYWxsYmFjayhjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgICB2b2lkICgqY2FsbGJhY2spKGNvbnN0IGNoYXIgKmZyb20sIGNoYXIgKnN0cikpCiB7CiAJc3RydWN0IHNtc2dfY2FsbGJhY2sgKmNiOwogCkBAIC0xMTcsOCArMTE3LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBzbXNnX3VucmVnaXN0ZXJfY2FsbGJhY2soY2hhciAqcHJlZml4LAotCQkJICAgICAgdm9pZCAoKmNhbGxiYWNrKShjaGFyICpmcm9tLCBjaGFyICpzdHIpKQordm9pZCBzbXNnX3VucmVnaXN0ZXJfY2FsbGJhY2soY29uc3QgY2hhciAqcHJlZml4LAorCQkJICAgICAgdm9pZCAoKmNhbGxiYWNrKShjb25zdCBjaGFyICpmcm9tLAorCQkJCQkgICAgICAgY2hhciAqc3RyKSkKIHsKIAlzdHJ1Y3Qgc21zZ19jYWxsYmFjayAqY2IsICp0bXA7CiAKQEAgLTE3Niw3ICsxNzcsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc21zZ19kcml2ZXIgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLm5hbWUgPSAiU01TR0lVQ1YiLAorCS5uYW1lID0gU01TR0lVQ1ZfRFJWX05BTUUsCiAJLmJ1cyAgPSAmaXVjdl9idXMsCiAJLnBtID0gJnNtc2dfcG1fb3BzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuaCBiL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuaAppbmRleCA2N2Y1ZDRmLi4xNDlhMTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5oCkBAIC01LDYgKzUsMTAgQEAKICAqIEF1dGhvcihzKTogTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKQogICovCiAKLWludCAgc21zZ19yZWdpc3Rlcl9jYWxsYmFjayhjaGFyICosIHZvaWQgKCopKGNoYXIgKiwgY2hhciAqKSk7Ci12b2lkIHNtc2dfdW5yZWdpc3Rlcl9jYWxsYmFjayhjaGFyICosIHZvaWQgKCopKGNoYXIgKiwgY2hhciAqKSk7CisjZGVmaW5lIFNNU0dJVUNWX0RSVl9OQU1FICAgICAiU01TR0lVQ1YiCisKK2ludCAgc21zZ19yZWdpc3Rlcl9jYWxsYmFjayhjb25zdCBjaGFyICosCisJCQkgICAgdm9pZCAoKikoY29uc3QgY2hhciAqLCBjaGFyICopKTsKK3ZvaWQgc21zZ191bnJlZ2lzdGVyX2NhbGxiYWNrKGNvbnN0IGNoYXIgKiwKKwkJCSAgICAgIHZvaWQgKCopKGNvbnN0IGNoYXIgKiwgY2hhciAqKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3ZfYXBwLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2X2FwcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNTc5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2X2FwcC5jCkBAIC0wLDAgKzEsMjExIEBACisvKgorICogRGVsaXZlciB6L1ZNIENQIHNwZWNpYWwgbWVzc2FnZXMgKFNNU0cpIGFzIHVldmVudHMuCisgKgorICogVGhlIGRyaXZlciByZWdpc3RlcnMgZm9yIHovVk0gQ1Agc3BlY2lhbCBtZXNzYWdlcyB3aXRoIHRoZQorICogIkFQUCIgcHJlZml4LiBJbmNvbWluZyBtZXNzYWdlcyBhcmUgZGVsaXZlcmVkIHRvIHVzZXIgc3BhY2UKKyAqIGFzIHVldmVudHMuCisgKgorICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDEwCisgKiBBdXRob3Iocyk6IEhlbmRyaWsgQnJ1ZWNrbmVyIDxicnVlY2tuZXJAbGludXgudm5ldC5pYm0uY29tPgorICoKKyAqLworI2RlZmluZSBLTVNHX0NPTVBPTkVOVAkJInNtc2dpdWN2X2FwcCIKKyNkZWZpbmUgcHJfZm10KGZtdCkJCUtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxuZXQvaXVjdi9pdWN2Lmg+CisjaW5jbHVkZSAic21zZ2l1Y3YuaCIKKworLyogcHJlZml4IHVzZWQgZm9yIFNNU0cgcmVnaXN0cmF0aW9uICovCisjZGVmaW5lIFNNU0dfUFJFRklYCQkiQVBQIgorCisvKiBTTVNHIHJlbGF0ZWQgdWV2ZW50IGVudmlyb25tZW50IHZhcmlhYmxlcyAqLworI2RlZmluZSBFTlZfU0VOREVSX1NUUgkJIlNNU0dfU0VOREVSPSIKKyNkZWZpbmUgRU5WX1NFTkRFUl9MRU4JCShzdHJsZW4oRU5WX1NFTkRFUl9TVFIpICsgOCArIDEpCisjZGVmaW5lIEVOVl9QUkVGSVhfU1RSCQkiU01TR19JRD0iCisjZGVmaW5lIEVOVl9QUkVGSVhfTEVOCQkoc3RybGVuKEVOVl9QUkVGSVhfU1RSKSArIFwKKwkJCQkgc3RybGVuKFNNU0dfUFJFRklYKSArIDEpCisjZGVmaW5lIEVOVl9URVhUX1NUUgkJIlNNU0dfVEVYVD0iCisjZGVmaW5lIEVOVl9URVhUX0xFTihtc2cpCShzdHJsZW4oRU5WX1RFWFRfU1RSKSArIHN0cmxlbigobXNnKSkgKyAxKQorCisvKiB6L1ZNIHVzZXIgSUQgd2hpY2ggaXMgcGVybWl0dGVkIHRvIHNlbmQgU01TR3MKKyAqIElmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQgb3IgZW1wdHkgKCIiKSwgc3BlY2lhbCBtZXNzYWdlcyBhcmUKKyAqIGFjY2VwdGVkIGZyb20gYW55IHovVk0gdXNlciBJRC4gKi8KK3N0YXRpYyBjaGFyICpzZW5kZXI7Cittb2R1bGVfcGFyYW0oc2VuZGVyLCBjaGFycCwgMDQwMCk7CitNT0RVTEVfUEFSTV9ERVNDKHNlbmRlciwgInovVk0gdXNlciBJRCBmcm9tIHdoaWNoIENQIFNNU0dzIGFyZSBhY2NlcHRlZCIpOworCisvKiBTTVNHIGRldmljZSByZXByZXNlbnRhdGlvbiAqLworc3RhdGljIHN0cnVjdCBkZXZpY2UgKnNtc2dfYXBwX2RldjsKKworLyogbGlzdCBlbGVtZW50IGZvciBxdWV1aW5nIHJlY2VpdmVkIG1lc3NhZ2VzIGZvciBkZWxpdmVyeSAqLworc3RydWN0IHNtc2dfYXBwX2V2ZW50IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY2hhciAqYnVmOworCWNoYXIgKmVudnBbNF07Cit9OworCisvKiBxdWV1ZSBmb3Igb3V0Z29pbmcgdWV2ZW50cyAqLworc3RhdGljIExJU1RfSEVBRChzbXNnX2V2ZW50X3F1ZXVlKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soc21zZ19ldmVudF9xdWV1ZV9sb2NrKTsKKworc3RhdGljIHZvaWQgc21zZ19hcHBfZXZlbnRfZnJlZShzdHJ1Y3Qgc21zZ19hcHBfZXZlbnQgKmV2KQoreworCWtmcmVlKGV2LT5idWYpOworCWtmcmVlKGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBzbXNnX2FwcF9ldmVudCAqc21zZ19hcHBfZXZlbnRfYWxsb2MoY29uc3QgY2hhciAqZnJvbSwKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlzdHJ1Y3Qgc21zZ19hcHBfZXZlbnQgKmV2OworCisJZXYgPSBremFsbG9jKHNpemVvZigqZXYpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWV2KQorCQlyZXR1cm4gTlVMTDsKKworCWV2LT5idWYgPSBremFsbG9jKEVOVl9TRU5ERVJfTEVOICsgRU5WX1BSRUZJWF9MRU4gKworCQkJICBFTlZfVEVYVF9MRU4obXNnKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFldi0+YnVmKSB7CisJCWtmcmVlKGV2KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogc2V0dGluZyB1cCBlbnZpcm9ubWVudCBwb2ludGVycyBpbnRvIGJ1ZiAqLworCWV2LT5lbnZwWzBdID0gZXYtPmJ1ZjsKKwlldi0+ZW52cFsxXSA9IGV2LT5lbnZwWzBdICsgRU5WX1NFTkRFUl9MRU47CisJZXYtPmVudnBbMl0gPSBldi0+ZW52cFsxXSArIEVOVl9QUkVGSVhfTEVOOworCWV2LT5lbnZwWzNdID0gTlVMTDsKKworCS8qIHNldHRpbmcgdXAgZW52aXJvbm1lbnQ6IHNlbmRlciwgcHJlZml4IG5hbWUsIGFuZCBtZXNzYWdlIHRleHQgKi8KKwlzbnByaW50Zihldi0+ZW52cFswXSwgRU5WX1NFTkRFUl9MRU4sIEVOVl9TRU5ERVJfU1RSICIlcyIsIGZyb20pOworCXNucHJpbnRmKGV2LT5lbnZwWzFdLCBFTlZfUFJFRklYX0xFTiwgRU5WX1BSRUZJWF9TVFIgIiVzIiwgU01TR19QUkVGSVgpOworCXNucHJpbnRmKGV2LT5lbnZwWzJdLCBFTlZfVEVYVF9MRU4obXNnKSwgRU5WX1RFWFRfU1RSICIlcyIsIG1zZyk7CisKKwlyZXR1cm4gZXY7Cit9CisKK3N0YXRpYyB2b2lkIHNtc2dfZXZlbnRfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJTElTVF9IRUFEKGV2ZW50X3F1ZXVlKTsKKwlzdHJ1Y3Qgc21zZ19hcHBfZXZlbnQgKnAsICpuOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCWRldiA9IGdldF9kZXZpY2Uoc21zZ19hcHBfZGV2KTsKKwlpZiAoIWRldikKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2JoKCZzbXNnX2V2ZW50X3F1ZXVlX2xvY2spOworCWxpc3Rfc3BsaWNlX2luaXQoJnNtc2dfZXZlbnRfcXVldWUsICZldmVudF9xdWV1ZSk7CisJc3Bpbl91bmxvY2tfYmgoJnNtc2dfZXZlbnRfcXVldWVfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgJmV2ZW50X3F1ZXVlLCBsaXN0KSB7CisJCWxpc3RfZGVsKCZwLT5saXN0KTsKKwkJa29iamVjdF91ZXZlbnRfZW52KCZkZXYtPmtvYmosIEtPQkpfQ0hBTkdFLCBwLT5lbnZwKTsKKwkJc21zZ19hcHBfZXZlbnRfZnJlZShwKTsKKwl9CisKKwlwdXRfZGV2aWNlKGRldik7Cit9CitzdGF0aWMgREVDTEFSRV9XT1JLKHNtc2dfZXZlbnRfd29yaywgc21zZ19ldmVudF93b3JrX2ZuKTsKKworc3RhdGljIHZvaWQgc21zZ19hcHBfY2FsbGJhY2soY29uc3QgY2hhciAqZnJvbSwgY2hhciAqbXNnKQoreworCXN0cnVjdCBzbXNnX2FwcF9ldmVudCAqc2U7CisKKwkvKiBjaGVjayBpZiB0aGUgb3JpZ2luYXRpbmcgei9WTSB1c2VyIElEIG1hdGNoZXMKKwkgKiB0aGUgY29uZmlndXJlZCBzZW5kZXIuICovCisJaWYgKHNlbmRlciAmJiBzdHJsZW4oc2VuZGVyKSA+IDAgJiYgc3RyY21wKGZyb20sIHNlbmRlcikgIT0gMCkKKwkJcmV0dXJuOworCisJLyogZ2V0IHN0YXJ0IG9mIG1lc3NhZ2UgdGV4dCAoc2tpcCBwcmVmaXggYW5kIGxlYWRpbmcgYmxhbmtzKSAqLworCW1zZyArPSBzdHJsZW4oU01TR19QUkVGSVgpOworCXdoaWxlICgqbXNnICYmIGlzc3BhY2UoKm1zZykpCisJCW1zZysrOworCWlmICgqbXNnID09ICdcMCcpCisJCXJldHVybjsKKworCS8qIGFsbG9jYXRlIGV2ZW50IGxpc3QgZWxlbWVudCBhbmQgaXRzIGVudmlyb25tZW50ICovCisJc2UgPSBzbXNnX2FwcF9ldmVudF9hbGxvYyhmcm9tLCBtc2cpOworCWlmICghc2UpCisJCXJldHVybjsKKworCS8qIHF1ZXVlIGV2ZW50IGFuZCBzY2hlZHVsZSB3b3JrIGZ1bmN0aW9uICovCisJc3Bpbl9sb2NrKCZzbXNnX2V2ZW50X3F1ZXVlX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJnNlLT5saXN0LCAmc21zZ19ldmVudF9xdWV1ZSk7CisJc3Bpbl91bmxvY2soJnNtc2dfZXZlbnRfcXVldWVfbG9jayk7CisKKwlzY2hlZHVsZV93b3JrKCZzbXNnX2V2ZW50X3dvcmspOworCXJldHVybjsKK30KKworc3RhdGljIGludCBfX2luaXQgc21zZ2l1Y3ZfYXBwX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqc21zZ2l1Y3ZfZHJ2OworCWludCByYzsKKworCWlmICghTUFDSElORV9JU19WTSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzbXNnX2FwcF9kZXYgPSBremFsbG9jKHNpemVvZigqc21zZ19hcHBfZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzbXNnX2FwcF9kZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJc21zZ2l1Y3ZfZHJ2ID0gZHJpdmVyX2ZpbmQoU01TR0lVQ1ZfRFJWX05BTUUsICZpdWN2X2J1cyk7CisJaWYgKCFzbXNnaXVjdl9kcnYpIHsKKwkJa2ZyZWUoc21zZ19hcHBfZGV2KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmMgPSBkZXZfc2V0X25hbWUoc21zZ19hcHBfZGV2LCBLTVNHX0NPTVBPTkVOVCk7CisJaWYgKHJjKSB7CisJCWtmcmVlKHNtc2dfYXBwX2Rldik7CisJCWdvdG8gZmFpbF9wdXRfZHJpdmVyOworCX0KKwlzbXNnX2FwcF9kZXYtPmJ1cyA9ICZpdWN2X2J1czsKKwlzbXNnX2FwcF9kZXYtPnBhcmVudCA9IGl1Y3Zfcm9vdDsKKwlzbXNnX2FwcF9kZXYtPnJlbGVhc2UgPSAodm9pZCAoKikoc3RydWN0IGRldmljZSAqKSkga2ZyZWU7CisJc21zZ19hcHBfZGV2LT5kcml2ZXIgPSBzbXNnaXVjdl9kcnY7CisJcmMgPSBkZXZpY2VfcmVnaXN0ZXIoc21zZ19hcHBfZGV2KTsKKwlpZiAocmMpIHsKKwkJcHV0X2RldmljZShzbXNnX2FwcF9kZXYpOworCQlnb3RvIGZhaWxfcHV0X2RyaXZlcjsKKwl9CisKKwkvKiByZWdpc3RlciB3aXRoIHRoZSBzbXNnaXVjdiBkZXZpY2UgZHJpdmVyICovCisJcmMgPSBzbXNnX3JlZ2lzdGVyX2NhbGxiYWNrKFNNU0dfUFJFRklYLCBzbXNnX2FwcF9jYWxsYmFjayk7CisJaWYgKHJjKSB7CisJCWRldmljZV91bnJlZ2lzdGVyKHNtc2dfYXBwX2Rldik7CisJCWdvdG8gZmFpbF9wdXRfZHJpdmVyOworCX0KKworCXJjID0gMDsKK2ZhaWxfcHV0X2RyaXZlcjoKKwlwdXRfZHJpdmVyKHNtc2dpdWN2X2Rydik7CisJcmV0dXJuIHJjOworfQorbW9kdWxlX2luaXQoc21zZ2l1Y3ZfYXBwX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgc21zZ2l1Y3ZfYXBwX2V4aXQodm9pZCkKK3sKKwkvKiB1bnJlZ2lzdGVyIGNhbGxiYWNrICovCisJc21zZ191bnJlZ2lzdGVyX2NhbGxiYWNrKFNNU0dfUFJFRklYLCBzbXNnX2FwcF9jYWxsYmFjayk7CisKKwkvKiBjYW5jZWwgcGVuZGluZyB3b3JrIGFuZCBmbHVzaCBhbnkgcXVldWVkIGV2ZW50IHdvcmsgKi8KKwljYW5jZWxfd29ya19zeW5jKCZzbXNnX2V2ZW50X3dvcmspOworCXNtc2dfZXZlbnRfd29ya19mbigmc21zZ19ldmVudF93b3JrKTsKKworCWRldmljZV91bnJlZ2lzdGVyKHNtc2dfYXBwX2Rldik7Cit9Cittb2R1bGVfZXhpdChzbXNnaXVjdl9hcHBfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRGVsaXZlciB6L1ZNIENQIFNNU0cgYXMgdWV2ZW50cyIpOworTU9EVUxFX0FVVEhPUigiSGVuZHJpayBCcnVlY2tuZXIgPGJydWVja25lckBsaW51eC52bmV0LmlibS5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jCmluZGV4IDcxYjk3ZmY3Li42NDc5MjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYwpAQCAtMzE5LDggKzMxOSw2IEBACiAJaWQtPmlucHV0X2hhbmRsZXIgPSB6ZmNwX3FkaW9faW50X3Jlc3A7CiAJaWQtPm91dHB1dF9oYW5kbGVyID0gemZjcF9xZGlvX2ludF9yZXE7CiAJaWQtPmludF9wYXJtID0gKHVuc2lnbmVkIGxvbmcpIHFkaW87Ci0JaWQtPmZsYWdzID0gUURJT19JTkJPVU5EXzBDT1BZX1NCQUxTIHwKLQkJICAgIFFESU9fT1VUQk9VTkRfMENPUFlfU0JBTFMgfCBRRElPX1VTRV9PVVRCT1VORF9QQ0lTOwogCWlkLT5pbnB1dF9zYmFsX2FkZHJfYXJyYXkgPSAodm9pZCAqKikgKHFkaW8tPnJlc3BfcS5zYmFsKTsKIAlpZC0+b3V0cHV0X3NiYWxfYWRkcl9hcnJheSA9ICh2b2lkICoqKSAocWRpby0+cmVxX3Euc2JhbCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCmluZGV4IDc0NmUwNzAuLmQ2ZmY3MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKKysrIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwpAQCAtMTAwOSw2ICsxMDA5LDEwIEBACiAJZGVwZW5kcyBvbiBTRVJJQUxfU0hfU0NJPXkKIAlzZWxlY3QgU0VSSUFMX0NPUkVfQ09OU09MRQogCitjb25maWcgU0VSSUFMX1NIX1NDSV9ETUEKKwlib29sICJETUEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNFUklBTF9TSF9TQ0kgJiYgU0hfRE1BRSAmJiBFWFBFUklNRU5UQUwKKwogY29uZmlnIFNFUklBTF9QTlg4WFhYCiAJYm9vbCAiRW5hYmxlIFBOWDhYWFggU29DcycgVUFSVCBTdXBwb3J0IgogCWRlcGVuZHMgb24gTUlQUyAmJiAoU09DX1BOWDg1NTAgfHwgU09DX1BOWDgzM1gpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCmluZGV4IDQyZjMzMzMuLjk4MGYzOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCkBAIC00OCw2ICs0OCw5IEBACiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogCiAjaWZkZWYgQ09ORklHX1NVUEVSSAogI2luY2x1ZGUgPGFzbS9zaF9iaW9zLmg+CkBAIC04NCw2ICs4NywyNyBAQAogCXN0cnVjdCBjbGsJCSpkY2xrOwogCiAJc3RydWN0IGxpc3RfaGVhZAlub2RlOworCXN0cnVjdCBkbWFfY2hhbgkJCSpjaGFuX3R4OworCXN0cnVjdCBkbWFfY2hhbgkJCSpjaGFuX3J4OworI2lmZGVmIENPTkZJR19TRVJJQUxfU0hfU0NJX0RNQQorCXN0cnVjdCBkZXZpY2UJCQkqZG1hX2RldjsKKwllbnVtIHNoX2RtYWVfc2xhdmVfY2hhbl9pZAlzbGF2ZV90eDsKKwllbnVtIHNoX2RtYWVfc2xhdmVfY2hhbl9pZAlzbGF2ZV9yeDsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IJKmRlc2NfdHg7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yCSpkZXNjX3J4WzJdOworCWRtYV9jb29raWVfdAkJCWNvb2tpZV90eDsKKwlkbWFfY29va2llX3QJCQljb29raWVfcnhbMl07CisJZG1hX2Nvb2tpZV90CQkJYWN0aXZlX3J4OworCXN0cnVjdCBzY2F0dGVybGlzdAkJc2dfdHg7CisJdW5zaWduZWQgaW50CQkJc2dfbGVuX3R4OworCXN0cnVjdCBzY2F0dGVybGlzdAkJc2dfcnhbMl07CisJc2l6ZV90CQkJCWJ1Zl9sZW5fcng7CisJc3RydWN0IHNoX2RtYWVfc2xhdmUJCXBhcmFtX3R4OworCXN0cnVjdCBzaF9kbWFlX3NsYXZlCQlwYXJhbV9yeDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXdvcmtfdHg7CisJc3RydWN0IHdvcmtfc3RydWN0CQl3b3JrX3J4OworCXN0cnVjdCB0aW1lcl9saXN0CQlyeF90aW1lcjsKKyNlbmRpZgogfTsKIAogc3RydWN0IHNoX3NjaV9wcml2IHsKQEAgLTI2OSwyOSArMjkzLDQ0IEBACiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQotc3RhdGljIGlubGluZSBpbnQgc2NpZl90eHJvb20oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3N0YXRpYyBpbnQgc2NpZl90eGZpbGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlyZXR1cm4gU0NJRl9UWFJPT01fTUFYIC0gKHNjaV9pbihwb3J0LCBTQ1RGRFIpICYgMHhmZik7CisJcmV0dXJuIHNjaV9pbihwb3J0LCBTQ1RGRFIpICYgMHhmZjsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2NpZl9yeHJvb20oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3N0YXRpYyBpbnQgc2NpZl90eHJvb20oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlyZXR1cm4gU0NJRl9UWFJPT01fTUFYIC0gc2NpZl90eGZpbGwocG9ydCk7Cit9CisKK3N0YXRpYyBpbnQgc2NpZl9yeGZpbGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlyZXR1cm4gc2NpX2luKHBvcnQsIFNDUkZEUikgJiAweGZmOwogfQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzKQotc3RhdGljIGlubGluZSBpbnQgc2NpZl90eHJvb20oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3N0YXRpYyBpbnQgc2NpZl90eGZpbGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlpZiAoKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwMDAwMCkgfHwKLQkgICAgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwODAwMCkpIHsKKwlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTAwMDAwIHx8CisJICAgIHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwODAwMCkKIAkJLyogU0NJRjAvMSovCi0JCXJldHVybiBTQ0lGX1RYUk9PTV9NQVggLSAoc2NpX2luKHBvcnQsIFNDVEZEUikgJiAweGZmKTsKLQl9IGVsc2UgeworCQlyZXR1cm4gc2NpX2luKHBvcnQsIFNDVEZEUikgJiAweGZmOworCWVsc2UKIAkJLyogU0NJRjIgKi8KLQkJcmV0dXJuIFNDSUYyX1RYUk9PTV9NQVggLSAoc2NpX2luKHBvcnQsIFNDRkRSKSA+PiA4KTsKLQl9CisJCXJldHVybiBzY2lfaW4ocG9ydCwgU0NGRFIpID4+IDg7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNjaWZfcnhyb29tKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCitzdGF0aWMgaW50IHNjaWZfdHhyb29tKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwMDAwMCB8fAorCSAgICBwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDgwMDApCisJCS8qIFNDSUYwLzEqLworCQlyZXR1cm4gU0NJRl9UWFJPT01fTUFYIC0gc2NpZl90eGZpbGwocG9ydCk7CisJZWxzZQorCQkvKiBTQ0lGMiAqLworCQlyZXR1cm4gU0NJRjJfVFhST09NX01BWCAtIHNjaWZfdHhmaWxsKHBvcnQpOworfQorCitzdGF0aWMgaW50IHNjaWZfcnhmaWxsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJaWYgKChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApIHx8CiAJICAgIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDgwMDApKSB7CkBAIC0zMDMsMjMgKzM0MiwzMyBAQAogCX0KIH0KICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBzY2lmX3R4cm9vbShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBzY2lmX3R4ZmlsbChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXJldHVybiBTQ0lGX1RYUk9PTV9NQVggLSAoc2NpX2luKHBvcnQsIFNDRkRSKSA+PiA4KTsKKwlyZXR1cm4gc2NpX2luKHBvcnQsIFNDRkRSKSA+PiA4OwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzY2lmX3J4cm9vbShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBzY2lmX3R4cm9vbShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXJldHVybiBTQ0lGX1RYUk9PTV9NQVggLSBzY2lmX3R4ZmlsbChwb3J0KTsKK30KKworc3RhdGljIGludCBzY2lmX3J4ZmlsbChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCXJldHVybiBzY2lfaW4ocG9ydCwgU0NGRFIpICYgU0NJRl9SRkRDX01BU0s7CiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBpbnQgc2NpX3R4cm9vbShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBzY2lfdHhmaWxsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0JcmV0dXJuIChzY2lfaW4ocG9ydCwgU0N4U1IpICYgU0NJX1REUkUpICE9IDA7CisJcmV0dXJuICEoc2NpX2luKHBvcnQsIFNDeFNSKSAmIFNDSV9URFJFKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2NpX3J4cm9vbShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBzY2lfdHhyb29tKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJcmV0dXJuICFzY2lfdHhmaWxsKHBvcnQpOworfQorCitzdGF0aWMgaW50IHNjaV9yeGZpbGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlyZXR1cm4gKHNjaV9pbihwb3J0LCBTQ3hTUikgJiBTQ3hTUl9SRHhGKHBvcnQpKSAhPSAwOwogfQpAQCAtNDA2LDkgKzQ1NSw5IEBACiAKIAl3aGlsZSAoMSkgewogCQlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1NDSSkKLQkJCWNvdW50ID0gc2NpX3J4cm9vbShwb3J0KTsKKwkJCWNvdW50ID0gc2NpX3J4ZmlsbChwb3J0KTsKIAkJZWxzZQotCQkJY291bnQgPSBzY2lmX3J4cm9vbShwb3J0KTsKKwkJCWNvdW50ID0gc2NpZl9yeGZpbGwocG9ydCk7CiAKIAkJLyogRG9uJ3QgY29weSBtb3JlIGJ5dGVzIHRoYW4gdGhlcmUgaXMgcm9vbSBmb3IgaW4gdGhlIGJ1ZmZlciAqLwogCQljb3VudCA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgY291bnQpOwpAQCAtNDUzLDEwICs1MDIsMTAgQEAKIAkJCQl9CiAKIAkJCQkvKiBTdG9yZSBkYXRhIGFuZCBzdGF0dXMgKi8KLQkJCQlpZiAoc3RhdHVzJlNDeFNSX0ZFUihwb3J0KSkgeworCQkJCWlmIChzdGF0dXMgJiBTQ3hTUl9GRVIocG9ydCkpIHsKIAkJCQkJZmxhZyA9IFRUWV9GUkFNRTsKIAkJCQkJZGV2X25vdGljZShwb3J0LT5kZXYsICJmcmFtZSBlcnJvclxuIik7Ci0JCQkJfSBlbHNlIGlmIChzdGF0dXMmU0N4U1JfUEVSKHBvcnQpKSB7CisJCQkJfSBlbHNlIGlmIChzdGF0dXMgJiBTQ3hTUl9QRVIocG9ydCkpIHsKIAkJCQkJZmxhZyA9IFRUWV9QQVJJVFk7CiAJCQkJCWRldl9ub3RpY2UocG9ydC0+ZGV2LCAicGFyaXR5IGVycm9yXG4iKTsKIAkJCQl9IGVsc2UKQEAgLTYxOCwxMyArNjY3LDM5IEBACiAJcmV0dXJuIGNvcGllZDsKIH0KIAotc3RhdGljIGlycXJldHVybl90IHNjaV9yeF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqcG9ydCkKK3N0YXRpYyBpcnFyZXR1cm5fdCBzY2lfcnhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKnB0cikKIHsKKyNpZmRlZiBDT05GSUdfU0VSSUFMX1NIX1NDSV9ETUEKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gcHRyOworCXN0cnVjdCBzY2lfcG9ydCAqcyA9IHRvX3NjaV9wb3J0KHBvcnQpOworCisJaWYgKHMtPmNoYW5fcngpIHsKKwkJdW5zaWduZWQgbG9uZyB0b3V0OworCQl1MTYgc2NyID0gc2NpX2luKHBvcnQsIFNDU0NSKTsKKwkJdTE2IHNzciA9IHNjaV9pbihwb3J0LCBTQ3hTUik7CisKKwkJLyogRGlzYWJsZSBmdXR1cmUgUnggaW50ZXJydXB0cyAqLworCQlzY2lfb3V0KHBvcnQsIFNDU0NSLCBzY3IgJiB+U0NJX0NUUkxfRkxBR1NfUklFKTsKKwkJLyogQ2xlYXIgY3VycmVudCBpbnRlcnJ1cHQgKi8KKwkJc2NpX291dChwb3J0LCBTQ3hTUiwgc3NyICYgfigxIHwgU0N4U1JfUkR4Rihwb3J0KSkpOworCQkvKiBDYWxjdWxhdGUgZGVsYXkgZm9yIDEuNSBETUEgYnVmZmVycyAqLworCQl0b3V0ID0gKHBvcnQtPnRpbWVvdXQgLSBIWiAvIDUwKSAqIHMtPmJ1Zl9sZW5fcnggKiAzIC8KKwkJCXBvcnQtPmZpZm9zaXplIC8gMjsKKwkJZGV2X2RiZyhwb3J0LT5kZXYsICJSeCBJUlE6IHNldHVwIHRpbWVvdXQgaW4gJWx1IG1zXG4iLAorCQkJdG91dCAqIDEwMDAgLyBIWik7CisJCWlmICh0b3V0IDwgMikKKwkJCXRvdXQgPSAyOworCQltb2RfdGltZXIoJnMtPnJ4X3RpbWVyLCBqaWZmaWVzICsgdG91dCk7CisKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKyNlbmRpZgorCiAJLyogSSB0aGluayBzY2lfcmVjZWl2ZV9jaGFycyBoYXMgdG8gYmUgY2FsbGVkIGlycmVzcGVjdGl2ZQogCSAqIG9mIHdoZXRoZXIgdGhlIElfSVhPRkYgaXMgc2V0LCBvdGhlcndpc2UsIGhvdyBpcyB0aGUgaW50ZXJydXB0CiAJICogdG8gYmUgZGlzYWJsZWQ/CiAJICovCi0Jc2NpX3JlY2VpdmVfY2hhcnMocG9ydCk7CisJc2NpX3JlY2VpdmVfY2hhcnMocHRyKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTY4MCw2ICs3NTUsNyBAQAogewogCXVuc2lnbmVkIHNob3J0IHNzcl9zdGF0dXMsIHNjcl9zdGF0dXMsIGVycl9lbmFibGVkOwogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBwdHI7CisJc3RydWN0IHNjaV9wb3J0ICpzID0gdG9fc2NpX3BvcnQocG9ydCk7CiAJaXJxcmV0dXJuX3QgcmV0ID0gSVJRX05PTkU7CiAKIAlzc3Jfc3RhdHVzID0gc2NpX2luKHBvcnQsIFNDeFNSKTsKQEAgLTY4NywxMCArNzYzLDE1IEBACiAJZXJyX2VuYWJsZWQgPSBzY3Jfc3RhdHVzICYgKFNDSV9DVFJMX0ZMQUdTX1JFSUUgfCBTQ0lfQ1RSTF9GTEFHU19SSUUpOwogCiAJLyogVHggSW50ZXJydXB0ICovCi0JaWYgKChzc3Jfc3RhdHVzICYgU0N4U1JfVER4RShwb3J0KSkgJiYgKHNjcl9zdGF0dXMgJiBTQ0lfQ1RSTF9GTEFHU19USUUpKQorCWlmICgoc3NyX3N0YXR1cyAmIFNDeFNSX1REeEUocG9ydCkpICYmIChzY3Jfc3RhdHVzICYgU0NJX0NUUkxfRkxBR1NfVElFKSAmJgorCSAgICAhcy0+Y2hhbl90eCkKIAkJcmV0ID0gc2NpX3R4X2ludGVycnVwdChpcnEsIHB0cik7Ci0JLyogUnggSW50ZXJydXB0ICovCi0JaWYgKChzc3Jfc3RhdHVzICYgU0N4U1JfUkR4Rihwb3J0KSkgJiYgKHNjcl9zdGF0dXMgJiBTQ0lfQ1RSTF9GTEFHU19SSUUpKQorCS8qCisJICogUnggSW50ZXJydXB0OiBpZiB3ZSdyZSB1c2luZyBETUEsIHRoZSBETUEgY29udHJvbGxlciBjbGVhcnMgUkRGIC8KKwkgKiBEUiBmbGFncworCSAqLworCWlmICgoKHNzcl9zdGF0dXMgJiBTQ3hTUl9SRHhGKHBvcnQpKSB8fCBzLT5jaGFuX3J4KSAmJgorCSAgICAoc2NyX3N0YXR1cyAmIFNDSV9DVFJMX0ZMQUdTX1JJRSkpCiAJCXJldCA9IHNjaV9yeF9pbnRlcnJ1cHQoaXJxLCBwdHIpOwogCS8qIEVycm9yIEludGVycnVwdCAqLwogCWlmICgoc3NyX3N0YXR1cyAmIFNDeFNSX0VSUk9SUyhwb3J0KSkgJiYgZXJyX2VuYWJsZWQpCkBAIC02OTksNiArNzgwLDEwIEBACiAJaWYgKChzc3Jfc3RhdHVzICYgU0N4U1JfQlJLKHBvcnQpKSAmJiBlcnJfZW5hYmxlZCkKIAkJcmV0ID0gc2NpX2JyX2ludGVycnVwdChpcnEsIHB0cik7CiAKKwlXQVJOX09OQ0UocmV0ID09IElSUV9OT05FLAorCQkgICIlczogJWQgSVJRICVkLCBzdGF0dXMgJXgsIGNvbnRyb2wgJXhcbiIsIF9fZnVuY19fLAorCQkgIGlycSwgcG9ydC0+bGluZSwgc3NyX3N0YXR1cywgc2NyX3N0YXR1cyk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC04MDAsNyArODg1LDkgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2NpX3R4X2VtcHR5KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJdW5zaWduZWQgc2hvcnQgc3RhdHVzID0gc2NpX2luKHBvcnQsIFNDeFNSKTsKLQlyZXR1cm4gc3RhdHVzICYgU0N4U1JfVEVORChwb3J0KSA/IFRJT0NTRVJfVEVNVCA6IDA7CisJdW5zaWduZWQgc2hvcnQgaW5fdHhfZmlmbyA9IHNjaWZfdHhmaWxsKHBvcnQpOworCisJcmV0dXJuIChzdGF0dXMgJiBTQ3hTUl9URU5EKHBvcnQpKSAmJiAhaW5fdHhfZmlmbyA/IFRJT0NTRVJfVEVNVCA6IDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNjaV9zZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IG1jdHJsKQpAQCAtODEyLDE2ICs4OTksMjk3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2NpX2dldF9tY3RybChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCS8qIFRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBnZXRpbmcgc2lnbmFscyBvZjogRFRSLCBEQ0QsIERTUiwgUkksCisJLyogVGhpcyByb3V0aW5lIGlzIHVzZWQgZm9yIGdldHRpbmcgc2lnbmFscyBvZjogRFRSLCBEQ0QsIERTUiwgUkksCiAJICAgYW5kIENUUy9SVFMgKi8KIAogCXJldHVybiBUSU9DTV9EVFIgfCBUSU9DTV9SVFMgfCBUSU9DTV9EU1I7CiB9CiAKKyNpZmRlZiBDT05GSUdfU0VSSUFMX1NIX1NDSV9ETUEKK3N0YXRpYyB2b2lkIHNjaV9kbWFfdHhfY29tcGxldGUodm9pZCAqYXJnKQoreworCXN0cnVjdCBzY2lfcG9ydCAqcyA9IGFyZzsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJnMtPnBvcnQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkZXZfZGJnKHBvcnQtPmRldiwgIiVzKCVkKVxuIiwgX19mdW5jX18sIHBvcnQtPmxpbmUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKworCXhtaXQtPnRhaWwgKz0gcy0+c2dfdHgubGVuZ3RoOworCXhtaXQtPnRhaWwgJj0gVUFSVF9YTUlUX1NJWkUgLSAxOworCisJcG9ydC0+aWNvdW50LnR4ICs9IHMtPnNnX3R4Lmxlbmd0aDsKKworCWFzeW5jX3R4X2FjayhzLT5kZXNjX3R4KTsKKwlzLT5jb29raWVfdHggPSAtRUlOVkFMOworCXMtPmRlc2NfdHggPSBOVUxMOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCisJaWYgKHVhcnRfY2lyY19jaGFyc19wZW5kaW5nKHhtaXQpIDwgV0FLRVVQX0NIQVJTKQorCQl1YXJ0X3dyaXRlX3dha2V1cChwb3J0KTsKKworCWlmICh1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZyh4bWl0KSkKKwkJc2NoZWR1bGVfd29yaygmcy0+d29ya190eCk7Cit9CisKKy8qIExvY2tpbmc6IGNhbGxlZCB3aXRoIHBvcnQgbG9jayBoZWxkICovCitzdGF0aWMgaW50IHNjaV9kbWFfcnhfcHVzaChzdHJ1Y3Qgc2NpX3BvcnQgKnMsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkgICBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZzLT5wb3J0OworCWludCBpLCBhY3RpdmUsIHJvb207CisKKwlyb29tID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBjb3VudCk7CisKKwlpZiAocy0+YWN0aXZlX3J4ID09IHMtPmNvb2tpZV9yeFswXSkgeworCQlhY3RpdmUgPSAwOworCX0gZWxzZSBpZiAocy0+YWN0aXZlX3J4ID09IHMtPmNvb2tpZV9yeFsxXSkgeworCQlhY3RpdmUgPSAxOworCX0gZWxzZSB7CisJCWRldl9lcnIocG9ydC0+ZGV2LCAiY29va2llICVkIG5vdCBmb3VuZCFcbiIsIHMtPmFjdGl2ZV9yeCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChyb29tIDwgY291bnQpCisJCWRldl93YXJuKHBvcnQtPmRldiwgIlJ4IG92ZXJydW46IGRyb3BwaW5nICV1IGJ5dGVzXG4iLAorCQkJIGNvdW50IC0gcm9vbSk7CisJaWYgKCFyb29tKQorCQlyZXR1cm4gcm9vbTsKKworCWZvciAoaSA9IDA7IGkgPCByb29tOyBpKyspCisJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgKCh1OCAqKXNnX3ZpcnQoJnMtPnNnX3J4W2FjdGl2ZV0pKVtpXSwKKwkJCQkgICAgIFRUWV9OT1JNQUwpOworCisJcG9ydC0+aWNvdW50LnJ4ICs9IHJvb207CisKKwlyZXR1cm4gcm9vbTsKK30KKworc3RhdGljIHZvaWQgc2NpX2RtYV9yeF9jb21wbGV0ZSh2b2lkICphcmcpCit7CisJc3RydWN0IHNjaV9wb3J0ICpzID0gYXJnOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmcy0+cG9ydDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gcG9ydC0+c3RhdGUtPnBvcnQudHR5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNvdW50OworCisJZGV2X2RiZyhwb3J0LT5kZXYsICIlcyglZClcbiIsIF9fZnVuY19fLCBwb3J0LT5saW5lKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisKKwljb3VudCA9IHNjaV9kbWFfcnhfcHVzaChzLCB0dHksIHMtPmJ1Zl9sZW5fcngpOworCisJbW9kX3RpbWVyKCZzLT5yeF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNSkpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCisJaWYgKGNvdW50KQorCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCisJc2NoZWR1bGVfd29yaygmcy0+d29ya19yeCk7Cit9CisKK3N0YXRpYyB2b2lkIHNjaV9zdGFydF9yeChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIHNjaV9zdGFydF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KTsKKworc3RhdGljIHZvaWQgc2NpX3J4X2RtYV9yZWxlYXNlKHN0cnVjdCBzY2lfcG9ydCAqcywgYm9vbCBlbmFibGVfcGlvKQoreworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IHMtPmNoYW5fcng7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZzLT5wb3J0OworCisJcy0+Y2hhbl9yeCA9IE5VTEw7CisJcy0+Y29va2llX3J4WzBdID0gcy0+Y29va2llX3J4WzFdID0gLUVJTlZBTDsKKwlkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4pOworCWRtYV9mcmVlX2NvaGVyZW50KHBvcnQtPmRldiwgcy0+YnVmX2xlbl9yeCAqIDIsCisJCQkgIHNnX3ZpcnQoJnMtPnNnX3J4WzBdKSwgc2dfZG1hX2FkZHJlc3MoJnMtPnNnX3J4WzBdKSk7CisJaWYgKGVuYWJsZV9waW8pCisJCXNjaV9zdGFydF9yeChwb3J0KTsKK30KKworc3RhdGljIHZvaWQgc2NpX3R4X2RtYV9yZWxlYXNlKHN0cnVjdCBzY2lfcG9ydCAqcywgYm9vbCBlbmFibGVfcGlvKQoreworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IHMtPmNoYW5fdHg7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZzLT5wb3J0OworCisJcy0+Y2hhbl90eCA9IE5VTEw7CisJcy0+Y29va2llX3R4ID0gLUVJTlZBTDsKKwlkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4pOworCWlmIChlbmFibGVfcGlvKQorCQlzY2lfc3RhcnRfdHgocG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIHNjaV9zdWJtaXRfcngoc3RydWN0IHNjaV9wb3J0ICpzKQoreworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IHMtPmNoYW5fcng7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSAmcy0+c2dfcnhbaV07CisJCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYzsKKworCQlkZXNjID0gY2hhbi0+ZGV2aWNlLT5kZXZpY2VfcHJlcF9zbGF2ZV9zZyhjaGFuLAorCQkJc2csIDEsIERNQV9GUk9NX0RFVklDRSwgRE1BX1BSRVBfSU5URVJSVVBUKTsKKworCQlpZiAoZGVzYykgeworCQkJcy0+ZGVzY19yeFtpXSA9IGRlc2M7CisJCQlkZXNjLT5jYWxsYmFjayA9IHNjaV9kbWFfcnhfY29tcGxldGU7CisJCQlkZXNjLT5jYWxsYmFja19wYXJhbSA9IHM7CisJCQlzLT5jb29raWVfcnhbaV0gPSBkZXNjLT50eF9zdWJtaXQoZGVzYyk7CisJCX0KKworCQlpZiAoIWRlc2MgfHwgcy0+Y29va2llX3J4W2ldIDwgMCkgeworCQkJaWYgKGkpIHsKKwkJCQlhc3luY190eF9hY2socy0+ZGVzY19yeFswXSk7CisJCQkJcy0+Y29va2llX3J4WzBdID0gLUVJTlZBTDsKKwkJCX0KKwkJCWlmIChkZXNjKSB7CisJCQkJYXN5bmNfdHhfYWNrKGRlc2MpOworCQkJCXMtPmNvb2tpZV9yeFtpXSA9IC1FSU5WQUw7CisJCQl9CisJCQlkZXZfd2FybihzLT5wb3J0LmRldiwKKwkJCQkgImZhaWxlZCB0byByZS1zdGFydCBETUEsIHVzaW5nIFBJT1xuIik7CisJCQlzY2lfcnhfZG1hX3JlbGVhc2UocywgdHJ1ZSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlzLT5hY3RpdmVfcnggPSBzLT5jb29raWVfcnhbMF07CisKKwlkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhjaGFuKTsKK30KKworc3RhdGljIHZvaWQgd29ya19mbl9yeChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHNjaV9wb3J0ICpzID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzY2lfcG9ydCwgd29ya19yeCk7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZzLT5wb3J0OworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYzsKKwlpbnQgbmV3OworCisJaWYgKHMtPmFjdGl2ZV9yeCA9PSBzLT5jb29raWVfcnhbMF0pIHsKKwkJbmV3ID0gMDsKKwl9IGVsc2UgaWYgKHMtPmFjdGl2ZV9yeCA9PSBzLT5jb29raWVfcnhbMV0pIHsKKwkJbmV3ID0gMTsKKwl9IGVsc2UgeworCQlkZXZfZXJyKHBvcnQtPmRldiwgImNvb2tpZSAlZCBub3QgZm91bmQhXG4iLCBzLT5hY3RpdmVfcngpOworCQlyZXR1cm47CisJfQorCWRlc2MgPSBzLT5kZXNjX3J4W25ld107CisKKwlpZiAoZG1hX2FzeW5jX2lzX3R4X2NvbXBsZXRlKHMtPmNoYW5fcngsIHMtPmFjdGl2ZV9yeCwgTlVMTCwgTlVMTCkgIT0KKwkgICAgRE1BX1NVQ0NFU1MpIHsKKwkJLyogSGFuZGxlIGluY29tcGxldGUgRE1BIHJlY2VpdmUgKi8KKwkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnN0YXRlLT5wb3J0LnR0eTsKKwkJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gcy0+Y2hhbl9yeDsKKwkJc3RydWN0IHNoX2Rlc2MgKnNoX2Rlc2MgPSBjb250YWluZXJfb2YoZGVzYywgc3RydWN0IHNoX2Rlc2MsCisJCQkJCQkgICAgICAgYXN5bmNfdHgpOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlpbnQgY291bnQ7CisKKwkJY2hhbi0+ZGV2aWNlLT5kZXZpY2VfdGVybWluYXRlX2FsbChjaGFuKTsKKwkJZGV2X2RiZyhwb3J0LT5kZXYsICJSZWFkICV1IGJ5dGVzIHdpdGggY29va2llICVkXG4iLAorCQkJc2hfZGVzYy0+cGFydGlhbCwgc2hfZGVzYy0+Y29va2llKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCQljb3VudCA9IHNjaV9kbWFfcnhfcHVzaChzLCB0dHksIHNoX2Rlc2MtPnBhcnRpYWwpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisKKwkJaWYgKGNvdW50KQorCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKworCQlzY2lfc3VibWl0X3J4KHMpOworCisJCXJldHVybjsKKwl9CisKKwlzLT5jb29raWVfcnhbbmV3XSA9IGRlc2MtPnR4X3N1Ym1pdChkZXNjKTsKKwlpZiAocy0+Y29va2llX3J4W25ld10gPCAwKSB7CisJCWRldl93YXJuKHBvcnQtPmRldiwgIkZhaWxlZCBzdWJtaXR0aW5nIFJ4IERNQSBkZXNjcmlwdG9yXG4iKTsKKwkJc2NpX3J4X2RtYV9yZWxlYXNlKHMsIHRydWUpOworCQlyZXR1cm47CisJfQorCisJZGV2X2RiZyhwb3J0LT5kZXYsICIlczogY29va2llICVkICMlZFxuIiwgX19mdW5jX18sCisJCXMtPmNvb2tpZV9yeFtuZXddLCBuZXcpOworCisJcy0+YWN0aXZlX3J4ID0gcy0+Y29va2llX3J4WyFuZXddOworfQorCitzdGF0aWMgdm9pZCB3b3JrX2ZuX3R4KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgc2NpX3BvcnQgKnMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHNjaV9wb3J0LCB3b3JrX3R4KTsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlc2M7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gcy0+Y2hhbl90eDsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJnMtPnBvcnQ7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSAmcy0+c2dfdHg7CisKKwkvKgorCSAqIERNQSBpcyBpZGxlIG5vdy4KKwkgKiBQb3J0IHhtaXQgYnVmZmVyIGlzIGFscmVhZHkgbWFwcGVkLCBhbmQgaXQgaXMgb25lIHBhZ2UuLi4gSnVzdCBhZGp1c3QKKwkgKiBvZmZzZXRzIGFuZCBsZW5ndGhzLiBTaW5jZSBpdCBpcyBhIGNpcmN1bGFyIGJ1ZmZlciwgd2UgaGF2ZSB0bworCSAqIHRyYW5zbWl0IHRpbGwgdGhlIGVuZCwgYW5kIHRoZW4gdGhlIHJlc3QuIFRha2UgdGhlIHBvcnQgbG9jayB0byBnZXQgYQorCSAqIGNvbnNpc3RlbnQgeG1pdCBidWZmZXIgc3RhdGUuCisJICovCisJc3Bpbl9sb2NrX2lycSgmcG9ydC0+bG9jayk7CisJc2ctPm9mZnNldCA9IHhtaXQtPnRhaWwgJiAoVUFSVF9YTUlUX1NJWkUgLSAxKTsKKwlzZy0+ZG1hX2FkZHJlc3MgPSAoc2dfZG1hX2FkZHJlc3Moc2cpICYgfihVQVJUX1hNSVRfU0laRSAtIDEpKSArCisJCXNnLT5vZmZzZXQ7CisJc2ctPmxlbmd0aCA9IG1pbigoaW50KUNJUkNfQ05UKHhtaXQtPmhlYWQsIHhtaXQtPnRhaWwsIFVBUlRfWE1JVF9TSVpFKSwKKwkJQ0lSQ19DTlRfVE9fRU5EKHhtaXQtPmhlYWQsIHhtaXQtPnRhaWwsIFVBUlRfWE1JVF9TSVpFKSk7CisJc2ctPmRtYV9sZW5ndGggPSBzZy0+bGVuZ3RoOworCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+bG9jayk7CisKKwlCVUdfT04oIXNnLT5sZW5ndGgpOworCisJZGVzYyA9IGNoYW4tPmRldmljZS0+ZGV2aWNlX3ByZXBfc2xhdmVfc2coY2hhbiwKKwkJCXNnLCBzLT5zZ19sZW5fdHgsIERNQV9UT19ERVZJQ0UsCisJCQlETUFfUFJFUF9JTlRFUlJVUFQgfCBETUFfQ1RSTF9BQ0spOworCWlmICghZGVzYykgeworCQkvKiBzd2l0Y2ggdG8gUElPICovCisJCXNjaV90eF9kbWFfcmVsZWFzZShzLCB0cnVlKTsKKwkJcmV0dXJuOworCX0KKworCWRtYV9zeW5jX3NnX2Zvcl9kZXZpY2UocG9ydC0+ZGV2LCBzZywgMSwgRE1BX1RPX0RFVklDRSk7CisKKwlzcGluX2xvY2tfaXJxKCZwb3J0LT5sb2NrKTsKKwlzLT5kZXNjX3R4ID0gZGVzYzsKKwlkZXNjLT5jYWxsYmFjayA9IHNjaV9kbWFfdHhfY29tcGxldGU7CisJZGVzYy0+Y2FsbGJhY2tfcGFyYW0gPSBzOworCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+bG9jayk7CisJcy0+Y29va2llX3R4ID0gZGVzYy0+dHhfc3VibWl0KGRlc2MpOworCWlmIChzLT5jb29raWVfdHggPCAwKSB7CisJCWRldl93YXJuKHBvcnQtPmRldiwgIkZhaWxlZCBzdWJtaXR0aW5nIFR4IERNQSBkZXNjcmlwdG9yXG4iKTsKKwkJLyogc3dpdGNoIHRvIFBJTyAqLworCQlzY2lfdHhfZG1hX3JlbGVhc2UocywgdHJ1ZSk7CisJCXJldHVybjsKKwl9CisKKwlkZXZfZGJnKHBvcnQtPmRldiwgIiVzOiAlcDogJWQuLi4lZCwgY29va2llICVkXG4iLCBfX2Z1bmNfXywKKwkJeG1pdC0+YnVmLCB4bWl0LT50YWlsLCB4bWl0LT5oZWFkLCBzLT5jb29raWVfdHgpOworCisJZG1hX2FzeW5jX2lzc3VlX3BlbmRpbmcoY2hhbik7Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQgc2NpX3N0YXJ0X3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJdW5zaWduZWQgc2hvcnQgY3RybDsKIAorI2lmZGVmIENPTkZJR19TRVJJQUxfU0hfU0NJX0RNQQorCXN0cnVjdCBzY2lfcG9ydCAqcyA9IHRvX3NjaV9wb3J0KHBvcnQpOworCisJaWYgKHMtPmNoYW5fdHgpIHsKKwkJaWYgKCF1YXJ0X2NpcmNfZW1wdHkoJnMtPnBvcnQuc3RhdGUtPnhtaXQpICYmIHMtPmNvb2tpZV90eCA8IDApCisJCQlzY2hlZHVsZV93b3JrKCZzLT53b3JrX3R4KTsKKworCQlyZXR1cm47CisJfQorI2VuZGlmCisKIAkvKiBTZXQgVElFIChUcmFuc21pdCBJbnRlcnJ1cHQgRW5hYmxlKSBiaXQgaW4gU0NTQ1IgKi8KIAljdHJsID0gc2NpX2luKHBvcnQsIFNDU0NSKTsKIAljdHJsIHw9IFNDSV9DVFJMX0ZMQUdTX1RJRTsKQEAgLTgzOCwxMyArMTIwNiwxMiBAQAogCXNjaV9vdXQocG9ydCwgU0NTQ1IsIGN0cmwpOwogfQogCi1zdGF0aWMgdm9pZCBzY2lfc3RhcnRfcngoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IHR0eV9zdGFydCkKK3N0YXRpYyB2b2lkIHNjaV9zdGFydF9yeChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXVuc2lnbmVkIHNob3J0IGN0cmw7CisJdW5zaWduZWQgc2hvcnQgY3RybCA9IFNDSV9DVFJMX0ZMQUdTX1JJRSB8IFNDSV9DVFJMX0ZMQUdTX1JFSUU7CiAKIAkvKiBTZXQgUklFIChSZWNlaXZlIEludGVycnVwdCBFbmFibGUpIGJpdCBpbiBTQ1NDUiAqLwotCWN0cmwgPSBzY2lfaW4ocG9ydCwgU0NTQ1IpOwotCWN0cmwgfD0gU0NJX0NUUkxfRkxBR1NfUklFIHwgU0NJX0NUUkxfRkxBR1NfUkVJRTsKKwljdHJsIHw9IHNjaV9pbihwb3J0LCBTQ1NDUik7CiAJc2NpX291dChwb3J0LCBTQ1NDUiwgY3RybCk7CiB9CiAKQEAgLTg2OCwxNiArMTIzNSwxNTQgQEAKIAkvKiBOb3RoaW5nIGhlcmUgeWV0IC4uICovCiB9CiAKKyNpZmRlZiBDT05GSUdfU0VSSUFMX1NIX1NDSV9ETUEKK3N0YXRpYyBib29sIGZpbHRlcihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHZvaWQgKnNsYXZlKQoreworCXN0cnVjdCBzaF9kbWFlX3NsYXZlICpwYXJhbSA9IHNsYXZlOworCisJZGV2X2RiZyhjaGFuLT5kZXZpY2UtPmRldiwgIiVzOiBzbGF2ZSBJRCAlZFxuIiwgX19mdW5jX18sCisJCXBhcmFtLT5zbGF2ZV9pZCk7CisKKwlpZiAocGFyYW0tPmRtYV9kZXYgPT0gY2hhbi0+ZGV2aWNlLT5kZXYpIHsKKwkJY2hhbi0+cHJpdmF0ZSA9IHBhcmFtOworCQlyZXR1cm4gdHJ1ZTsKKwl9IGVsc2UgeworCQlyZXR1cm4gZmFsc2U7CisJfQorfQorCitzdGF0aWMgdm9pZCByeF90aW1lcl9mbih1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3Qgc2NpX3BvcnQgKnMgPSAoc3RydWN0IHNjaV9wb3J0ICopYXJnOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmcy0+cG9ydDsKKworCXUxNiBzY3IgPSBzY2lfaW4ocG9ydCwgU0NTQ1IpOworCXNjaV9vdXQocG9ydCwgU0NTQ1IsIHNjciB8IFNDSV9DVFJMX0ZMQUdTX1JJRSk7CisJZGV2X2RiZyhwb3J0LT5kZXYsICJETUEgUnggdGltZWQgb3V0XG4iKTsKKwlzY2hlZHVsZV93b3JrKCZzLT53b3JrX3J4KTsKK30KKworc3RhdGljIHZvaWQgc2NpX3JlcXVlc3RfZG1hKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHNjaV9wb3J0ICpzID0gdG9fc2NpX3BvcnQocG9ydCk7CisJc3RydWN0IHNoX2RtYWVfc2xhdmUgKnBhcmFtOworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbjsKKwlkbWFfY2FwX21hc2tfdCBtYXNrOworCWludCBuZW50OworCisJZGV2X2RiZyhwb3J0LT5kZXYsICIlczogcG9ydCAlZCBETUEgJXBcbiIsIF9fZnVuY19fLAorCQlwb3J0LT5saW5lLCBzLT5kbWFfZGV2KTsKKworCWlmICghcy0+ZG1hX2RldikKKwkJcmV0dXJuOworCisJZG1hX2NhcF96ZXJvKG1hc2spOworCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgbWFzayk7CisKKwlwYXJhbSA9ICZzLT5wYXJhbV90eDsKKworCS8qIFNsYXZlIElELCBlLmcuLCBTSERNQV9TTEFWRV9TQ0lGMF9UWCAqLworCXBhcmFtLT5zbGF2ZV9pZCA9IHMtPnNsYXZlX3R4OworCXBhcmFtLT5kbWFfZGV2ID0gcy0+ZG1hX2RldjsKKworCXMtPmNvb2tpZV90eCA9IC1FSU5WQUw7CisJY2hhbiA9IGRtYV9yZXF1ZXN0X2NoYW5uZWwobWFzaywgZmlsdGVyLCBwYXJhbSk7CisJZGV2X2RiZyhwb3J0LT5kZXYsICIlczogVFg6IGdvdCBjaGFubmVsICVwXG4iLCBfX2Z1bmNfXywgY2hhbik7CisJaWYgKGNoYW4pIHsKKwkJcy0+Y2hhbl90eCA9IGNoYW47CisJCXNnX2luaXRfdGFibGUoJnMtPnNnX3R4LCAxKTsKKwkJLyogVUFSVCBjaXJjdWxhciB0eCBidWZmZXIgaXMgYW4gYWxpZ25lZCBwYWdlLiAqLworCQlCVUdfT04oKGludClwb3J0LT5zdGF0ZS0+eG1pdC5idWYgJiB+UEFHRV9NQVNLKTsKKwkJc2dfc2V0X3BhZ2UoJnMtPnNnX3R4LCB2aXJ0X3RvX3BhZ2UocG9ydC0+c3RhdGUtPnhtaXQuYnVmKSwKKwkJCSAgICBVQVJUX1hNSVRfU0laRSwgKGludClwb3J0LT5zdGF0ZS0+eG1pdC5idWYgJiB+UEFHRV9NQVNLKTsKKwkJbmVudCA9IGRtYV9tYXBfc2cocG9ydC0+ZGV2LCAmcy0+c2dfdHgsIDEsIERNQV9UT19ERVZJQ0UpOworCQlpZiAoIW5lbnQpCisJCQlzY2lfdHhfZG1hX3JlbGVhc2UocywgZmFsc2UpOworCQllbHNlCisJCQlkZXZfZGJnKHBvcnQtPmRldiwgIiVzOiBtYXBwZWQgJWRAJXAgdG8gJXhcbiIsIF9fZnVuY19fLAorCQkJCXNnX2RtYV9sZW4oJnMtPnNnX3R4KSwKKwkJCQlwb3J0LT5zdGF0ZS0+eG1pdC5idWYsIHNnX2RtYV9hZGRyZXNzKCZzLT5zZ190eCkpOworCisJCXMtPnNnX2xlbl90eCA9IG5lbnQ7CisKKwkJSU5JVF9XT1JLKCZzLT53b3JrX3R4LCB3b3JrX2ZuX3R4KTsKKwl9CisKKwlwYXJhbSA9ICZzLT5wYXJhbV9yeDsKKworCS8qIFNsYXZlIElELCBlLmcuLCBTSERNQV9TTEFWRV9TQ0lGMF9SWCAqLworCXBhcmFtLT5zbGF2ZV9pZCA9IHMtPnNsYXZlX3J4OworCXBhcmFtLT5kbWFfZGV2ID0gcy0+ZG1hX2RldjsKKworCWNoYW4gPSBkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIGZpbHRlciwgcGFyYW0pOworCWRldl9kYmcocG9ydC0+ZGV2LCAiJXM6IFJYOiBnb3QgY2hhbm5lbCAlcFxuIiwgX19mdW5jX18sIGNoYW4pOworCWlmIChjaGFuKSB7CisJCWRtYV9hZGRyX3QgZG1hWzJdOworCQl2b2lkICpidWZbMl07CisJCWludCBpOworCisJCXMtPmNoYW5fcnggPSBjaGFuOworCisJCXMtPmJ1Zl9sZW5fcnggPSAyICogbWF4KDE2LCAoaW50KXBvcnQtPmZpZm9zaXplKTsKKwkJYnVmWzBdID0gZG1hX2FsbG9jX2NvaGVyZW50KHBvcnQtPmRldiwgcy0+YnVmX2xlbl9yeCAqIDIsCisJCQkJCSAgICAmZG1hWzBdLCBHRlBfS0VSTkVMKTsKKworCQlpZiAoIWJ1ZlswXSkgeworCQkJZGV2X3dhcm4ocG9ydC0+ZGV2LAorCQkJCSAiZmFpbGVkIHRvIGFsbG9jYXRlIGRtYSBidWZmZXIsIHVzaW5nIFBJT1xuIik7CisJCQlzY2lfcnhfZG1hX3JlbGVhc2UocywgdHJ1ZSk7CisJCQlyZXR1cm47CisJCX0KKworCQlidWZbMV0gPSBidWZbMF0gKyBzLT5idWZfbGVuX3J4OworCQlkbWFbMV0gPSBkbWFbMF0gKyBzLT5idWZfbGVuX3J4OworCisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSAmcy0+c2dfcnhbaV07CisKKwkJCXNnX2luaXRfdGFibGUoc2csIDEpOworCQkJc2dfc2V0X3BhZ2Uoc2csIHZpcnRfdG9fcGFnZShidWZbaV0pLCBzLT5idWZfbGVuX3J4LAorCQkJCSAgICAoaW50KWJ1ZltpXSAmIH5QQUdFX01BU0spOworCQkJc2ctPmRtYV9hZGRyZXNzID0gZG1hW2ldOworCQkJc2ctPmRtYV9sZW5ndGggPSBzZy0+bGVuZ3RoOworCQl9CisKKwkJSU5JVF9XT1JLKCZzLT53b3JrX3J4LCB3b3JrX2ZuX3J4KTsKKwkJc2V0dXBfdGltZXIoJnMtPnJ4X3RpbWVyLCByeF90aW1lcl9mbiwgKHVuc2lnbmVkIGxvbmcpcyk7CisKKwkJc2NpX3N1Ym1pdF9yeChzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNjaV9mcmVlX2RtYShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBzY2lfcG9ydCAqcyA9IHRvX3NjaV9wb3J0KHBvcnQpOworCisJaWYgKCFzLT5kbWFfZGV2KQorCQlyZXR1cm47CisKKwlpZiAocy0+Y2hhbl90eCkKKwkJc2NpX3R4X2RtYV9yZWxlYXNlKHMsIGZhbHNlKTsKKwlpZiAocy0+Y2hhbl9yeCkKKwkJc2NpX3J4X2RtYV9yZWxlYXNlKHMsIGZhbHNlKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IHNjaV9zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHNjaV9wb3J0ICpzID0gdG9fc2NpX3BvcnQocG9ydCk7CiAKKwlkZXZfZGJnKHBvcnQtPmRldiwgIiVzKCVkKVxuIiwgX19mdW5jX18sIHBvcnQtPmxpbmUpOworCiAJaWYgKHMtPmVuYWJsZSkKIAkJcy0+ZW5hYmxlKHBvcnQpOwogCiAJc2NpX3JlcXVlc3RfaXJxKHMpOworI2lmZGVmIENPTkZJR19TRVJJQUxfU0hfU0NJX0RNQQorCXNjaV9yZXF1ZXN0X2RtYShwb3J0KTsKKyNlbmRpZgogCXNjaV9zdGFydF90eChwb3J0KTsKLQlzY2lfc3RhcnRfcngocG9ydCwgMSk7CisJc2NpX3N0YXJ0X3J4KHBvcnQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04ODYsOCArMTM5MSwxMyBAQAogewogCXN0cnVjdCBzY2lfcG9ydCAqcyA9IHRvX3NjaV9wb3J0KHBvcnQpOwogCisJZGV2X2RiZyhwb3J0LT5kZXYsICIlcyglZClcbiIsIF9fZnVuY19fLCBwb3J0LT5saW5lKTsKKwogCXNjaV9zdG9wX3J4KHBvcnQpOwogCXNjaV9zdG9wX3R4KHBvcnQpOworI2lmZGVmIENPTkZJR19TRVJJQUxfU0hfU0NJX0RNQQorCXNjaV9mcmVlX2RtYShwb3J0KTsKKyNlbmRpZgogCXNjaV9mcmVlX2lycShzKTsKIAogCWlmIChzLT5kaXNhYmxlKQpAQCAtOTM3LDYgKzE0NDcsOSBAQAogCiAJc2NpX291dChwb3J0LCBTQ1NNUiwgc21yX3ZhbCk7CiAKKwlkZXZfZGJnKHBvcnQtPmRldiwgIiVzOiBTTVIgJXgsIHQgJXgsIFNDU0NSICV4XG4iLCBfX2Z1bmNfXywgc21yX3ZhbCwgdCwKKwkJU0NTQ1JfSU5JVChwb3J0KSk7CisKIAlpZiAodCA+IDApIHsKIAkJaWYgKHQgPj0gMjU2KSB7CiAJCQlzY2lfb3V0KHBvcnQsIFNDU01SLCAoc2NpX2luKHBvcnQsIFNDU01SKSAmIH4zKSB8IDEpOwpAQCAtOTU0LDcgKzE0NjcsNyBAQAogCXNjaV9vdXQocG9ydCwgU0NTQ1IsIFNDU0NSX0lOSVQocG9ydCkpOwogCiAJaWYgKCh0ZXJtaW9zLT5jX2NmbGFnICYgQ1JFQUQpICE9IDApCi0JCXNjaV9zdGFydF9yeChwb3J0LCAwKTsKKwkJc2NpX3N0YXJ0X3J4KHBvcnQpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqc2NpX3R5cGUoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKQEAgLTEwNDksMTkgKzE1NjIsMjEgQEAKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgsCiAJCQkJICAgICAgc3RydWN0IHBsYXRfc2NpX3BvcnQgKnApCiB7Ci0Jc2NpX3BvcnQtPnBvcnQub3BzCT0gJnNjaV91YXJ0X29wczsKLQlzY2lfcG9ydC0+cG9ydC5pb3R5cGUJPSBVUElPX01FTTsKLQlzY2lfcG9ydC0+cG9ydC5saW5lCT0gaW5kZXg7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZzY2lfcG9ydC0+cG9ydDsKKworCXBvcnQtPm9wcwk9ICZzY2lfdWFydF9vcHM7CisJcG9ydC0+aW90eXBlCT0gVVBJT19NRU07CisJcG9ydC0+bGluZQk9IGluZGV4OwogCiAJc3dpdGNoIChwLT50eXBlKSB7CiAJY2FzZSBQT1JUX1NDSUZBOgotCQlzY2lfcG9ydC0+cG9ydC5maWZvc2l6ZSA9IDY0OworCQlwb3J0LT5maWZvc2l6ZSA9IDY0OwogCQlicmVhazsKIAljYXNlIFBPUlRfU0NJRjoKLQkJc2NpX3BvcnQtPnBvcnQuZmlmb3NpemUgPSAxNjsKKwkJcG9ydC0+Zmlmb3NpemUgPSAxNjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc2NpX3BvcnQtPnBvcnQuZmlmb3NpemUgPSAxOworCQlwb3J0LT5maWZvc2l6ZSA9IDE7CiAJCWJyZWFrOwogCX0KIApAQCAtMTA3MCwxOSArMTU4NSwyOCBAQAogCQlzY2lfcG9ydC0+ZGNsayA9IGNsa19nZXQoJmRldi0+ZGV2LCAicGVyaXBoZXJhbF9jbGsiKTsKIAkJc2NpX3BvcnQtPmVuYWJsZSA9IHNjaV9jbGtfZW5hYmxlOwogCQlzY2lfcG9ydC0+ZGlzYWJsZSA9IHNjaV9jbGtfZGlzYWJsZTsKLQkJc2NpX3BvcnQtPnBvcnQuZGV2ID0gJmRldi0+ZGV2OworCQlwb3J0LT5kZXYgPSAmZGV2LT5kZXY7CiAJfQogCiAJc2NpX3BvcnQtPmJyZWFrX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylzY2lfcG9ydDsKIAlzY2lfcG9ydC0+YnJlYWtfdGltZXIuZnVuY3Rpb24gPSBzY2lfYnJlYWtfdGltZXI7CiAJaW5pdF90aW1lcigmc2NpX3BvcnQtPmJyZWFrX3RpbWVyKTsKIAotCXNjaV9wb3J0LT5wb3J0Lm1hcGJhc2UJPSBwLT5tYXBiYXNlOwotCXNjaV9wb3J0LT5wb3J0Lm1lbWJhc2UJPSBwLT5tZW1iYXNlOworCXBvcnQtPm1hcGJhc2UJPSBwLT5tYXBiYXNlOworCXBvcnQtPm1lbWJhc2UJPSBwLT5tZW1iYXNlOwogCi0Jc2NpX3BvcnQtPnBvcnQuaXJxCT0gcC0+aXJxc1tTQ0l4X1RYSV9JUlFdOwotCXNjaV9wb3J0LT5wb3J0LmZsYWdzCT0gcC0+ZmxhZ3M7Ci0Jc2NpX3BvcnQtPnR5cGUJCT0gc2NpX3BvcnQtPnBvcnQudHlwZSA9IHAtPnR5cGU7CisJcG9ydC0+aXJxCT0gcC0+aXJxc1tTQ0l4X1RYSV9JUlFdOworCXBvcnQtPmZsYWdzCT0gcC0+ZmxhZ3M7CisJc2NpX3BvcnQtPnR5cGUJPSBwb3J0LT50eXBlID0gcC0+dHlwZTsKKworI2lmZGVmIENPTkZJR19TRVJJQUxfU0hfU0NJX0RNQQorCXNjaV9wb3J0LT5kbWFfZGV2CT0gcC0+ZG1hX2RldjsKKwlzY2lfcG9ydC0+c2xhdmVfdHgJPSBwLT5kbWFfc2xhdmVfdHg7CisJc2NpX3BvcnQtPnNsYXZlX3J4CT0gcC0+ZG1hX3NsYXZlX3J4OworCisJZGV2X2RiZyhwb3J0LT5kZXYsICIlczogRE1BIGRldmljZSAlcCwgdHggJWQsIHJ4ICVkXG4iLCBfX2Z1bmNfXywKKwkJcC0+ZG1hX2RldiwgcC0+ZG1hX3NsYXZlX3R4LCBwLT5kbWFfc2xhdmVfcngpOworI2VuZGlmCiAKIAltZW1jcHkoJnNjaV9wb3J0LT5pcnFzLCAmcC0+aXJxcywgc2l6ZW9mKHAtPmlycXMpKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKaW5kZXggZmMyZTk2My4uNzY5NmE2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKQEAgLTcxLDggKzcxLDYgQEAKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcGFuZWwvS2NvbmZpZyIKIAotc291cmNlICJkcml2ZXJzL3N0YWdpbmcvYWx0cGNpZWNoZG1hL0tjb25maWciCi0KIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvS2NvbmZpZyIKQEAgLTgxLDIwICs3OSwxNCBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9taW1pby9LY29uZmlnIgotCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9mcm9udGllci9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9kcmVhbS9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9iM2RmZy9LY29uZmlnIgotCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9waGlzb24vS2NvbmZpZyIKIAotc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcDlhdXRoL0tjb25maWciCi0KIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2xpbmU2L0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9LY29uZmlnIgpAQCAtMTE3LDcgKzEwOSw3IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3ZtZS9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9yYXIvS2NvbmZpZyIKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3Jhcl9yZWdpc3Rlci9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9zZXAvS2NvbmZpZyIKIApAQCAtMTQzLDUgKzEzNSw5IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3NtN3h4L0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvS2NvbmZpZyIKKwogZW5kaWYgIyAhU1RBR0lOR19FWENMVURFX0JVSUxECiBlbmRpZiAjIFNUQUdJTkcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQppbmRleCBiNWU2N2I4Li5lYTJlNzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCkBAIC0xOCwxOCArMTgsMTQgQEAKIG9iai0kKENPTkZJR19DT01FREkpCQkrPSBjb21lZGkvCiBvYmotJChDT05GSUdfQVNVU19PTEVEKQkJKz0gYXN1c19vbGVkLwogb2JqLSQoQ09ORklHX1BBTkVMKQkJKz0gcGFuZWwvCi1vYmotJChDT05GSUdfQUxURVJBX1BDSUVfQ0hETUEpCSs9IGFsdHBjaWVjaGRtYS8KIG9iai0kKENPTkZJR19SODE4N1NFKQkJKz0gcnRsODE4N3NlLwogb2JqLSQoQ09ORklHX1JUTDgxOTJTVSkJCSs9IHJ0bDgxOTJzdS8KIG9iai0kKENPTkZJR19SVEw4MTkyVSkJCSs9IHJ0bDgxOTJ1Lwogb2JqLSQoQ09ORklHX1JUTDgxOTJFKQkJKz0gcnRsODE5MmUvCi1vYmotJChDT05GSUdfSU5QVVRfTUlNSU8pCSs9IG1pbWlvLwogb2JqLSQoQ09ORklHX1RSQU5aUE9SVCkJCSs9IGZyb250aWVyLwogb2JqLSQoQ09ORklHX0RSRUFNKQkJKz0gZHJlYW0vCiBvYmotJChDT05GSUdfUE9ITUVMRlMpCQkrPSBwb2htZWxmcy8KLW9iai0kKENPTkZJR19CM0RGRykJCSs9IGIzZGZnLwogb2JqLSQoQ09ORklHX0lERV9QSElTT04pCSs9IHBoaXNvbi8KLW9iai0kKENPTkZJR19QTEFOOUFVVEgpCQkrPSBwOWF1dGgvCiBvYmotJChDT05GSUdfTElORTZfVVNCKQkJKz0gbGluZTYvCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9RVUFURUNIMikJKz0gc2VycXRfdXNiMi8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1FVQVRFQ0hfVVNCMikJKz0gcXVhdGVjaF91c2IyLwpAQCAtMzksNyArMzUsNyBAQAogb2JqLSQoQ09ORklHX0ZCX1VETCkJCSs9IHVkbGZiLwogb2JqLSQoQ09ORklHX0hZUEVSVikJCSs9IGh2Lwogb2JqLSQoQ09ORklHX1ZNRV9CVVMpCQkrPSB2bWUvCi1vYmotJChDT05GSUdfUkFSX1JFR0lTVEVSKQkrPSByYXIvCitvYmotJChDT05GSUdfUkFSX1JFR0lTVEVSKQkrPSByYXJfcmVnaXN0ZXIvCiBvYmotJChDT05GSUdfRFhfU0VQKQkJKz0gc2VwLwogb2JqLSQoQ09ORklHX0lJTykJCSs9IGlpby8KIG9iai0kKENPTkZJR19SQU1aU1dBUCkJCSs9IHJhbXpzd2FwLwpAQCAtNTMsMyArNDksNSBAQAogb2JqLSQoQ09ORklHX1BDTUNJQV9XQVZFTEFOKQkrPSB3YXZlbGFuLwogb2JqLSQoQ09ORklHX1BDTUNJQV9ORVRXQVZFKQkrPSBuZXR3YXZlLwogb2JqLSQoQ09ORklHX0ZCX1NNN1hYKQkJKz0gc203eHgvCitvYmotJChDT05GSUdfRFQzMTU1KQkJKz0gZHQzMTU1Lworb2JqLSQoQ09ORklHX0NSWVNUQUxIRCkJCSs9IGNyeXN0YWxoZC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbHRwY2llY2hkbWEvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9hbHRwY2llY2hkbWEvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY0YmY5Mi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWx0cGNpZWNoZG1hL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1jb25maWcgQUxURVJBX1BDSUVfQ0hETUEKLQl0cmlzdGF0ZSAiQWx0ZXJhIFBDSSBFeHByZXNzIENoYWluaW5nIERNQSBkcml2ZXIiCi0JZGVwZW5kcyBvbiBQQ0kKLQlkZWZhdWx0IE4KLQktLS1oZWxwLS0tCi0JICBBIHJlZmVyZW5jZSBkcml2ZXIgdGhhdCBleGVyY2lzZXMgdGhlIENoYWluaW5nIERNQSBsb2dpYyByZWZlcmVuY2UKLQkgIGRlc2lnbiBnZW5lcmF0ZWQgYWxvbmcgdGhlIEFsdGVyYSBGUEdBIFBDSSBFeHByZXNzIHNvZnQgb3IgaGFyZCBjb3JlLAotCSAgb25seSBpZiBpbnN0YW50aWF0ZWQgdXNpbmcgdGhlIE1lZ2FXaXphcmQsIG5vdCB0aGUgU09QQyBidWlsZGVyLCBvZgotCSAgUXVhcnR1cyA4LjEuCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbHRwY2llY2hkbWEvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvYWx0cGNpZWNoZG1hL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDhjODQzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbHRwY2llY2hkbWEvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLW9iai0kKENPTkZJR19BTFRFUkFfUENJRV9DSERNQSkJKz0gYWx0cGNpZWNoZG1hLm8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FsdHBjaWVjaGRtYS9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL2FsdHBjaWVjaGRtYS9UT0RPCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmM5NDVmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbHRwY2llY2hkbWEvVE9ETworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLURPTkU6Ci0gICAgLSBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gbG9naWMgdGVzdGJlbmNoCi0KLVRPRE86Ci0JLSBjaGVja3BhdGNoLnBsIGNsZWFudXBzLgotCS0ga2VlcCBzdGF0ZSBvZiBETUEgZW5naW5lcy4KLQktIGtlZXAgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBrZWVwcyBzdGF0ZSBvZiBlYWNoIHRyYW5zZmVyLgotCS0gaW50ZXJydXB0IGhhbmRsZXIgc2hvdWxkIGl0ZXJhdGUgb3ZlciBvdXRzdGFuZGluZyBkZXNjcmlwdG9yIHRhYmxlcy4KLQktIGNvbXBsZXRlIHVzZXJzcGFjZSBjZGV2IHRvIHJlYWQvd3JpdGUgdXNpbmcgdGhlIERNQSBlbmdpbmVzLgotCS0gc3BsaXQgb2ZmIHRoZSBETUEgc3VwcG9ydCBmdW5jdGlvbnMgaW4gYSBtb2R1bGUsIHJlLXVzYWJsZSBieSBjdXN0b20KLQkgIGRyaXZlcnMuCi0KLVBsZWFzZSBjb29yZGluYXRlIHdvcmsgd2l0aCwgYW5kIHNlbmQgcGF0Y2hlcyB0bwotTGVvbiBXb2VzdGVuYmVyZyA8bGVvbkBzaWRlYnJhbmNoLmNvbT4KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FsdHBjaWVjaGRtYS9hbHRwY2llY2hkbWEuYyBiL2RyaXZlcnMvc3RhZ2luZy9hbHRwY2llY2hkbWEvYWx0cGNpZWNoZG1hLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmMDdkZDQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FsdHBjaWVjaGRtYS9hbHRwY2llY2hkbWEuYworKysgL2Rldi9udWxsCkBAIC0xLDExODIgKzAsMCBAQAotLyoqCi0gKiBEcml2ZXIgZm9yIEFsdGVyYSBQQ0llIGNvcmUgY2hhaW5pbmcgRE1BIHJlZmVyZW5jZSBkZXNpZ24uCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IExlb24gV29lc3RlbmJlcmcgIDxsZW9uLndvZXN0ZW5iZXJnQGF4b24udHY+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTmlja29sYXMgSGVwcGVybWFubiAgPGhlcHBlcm1hbm53ZHRAZ21haWwuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0gKgotICoKLSAqIFJhdGlvbmFsZTogVGhpcyBkcml2ZXIgZXhlcmNpc2VzIHRoZSBjaGFpbmluZyBETUEgcmVhZCBhbmQgd3JpdGUgZW5naW5lCi0gKiBpbiB0aGUgcmVmZXJlbmNlIGRlc2lnbi4gSXQgaXMgbWVhbnQgYXMgYSBjb21wbGVtZW50YXJ5IHJlZmVyZW5jZQotICogZHJpdmVyIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHRlc3RpbmcgZWFybHkgZGVzaWducyBhcyB3ZWxsIGFzIGEgYmFzaXMgdG8KLSAqIHdyaXRlIHlvdXIgY3VzdG9tIGRyaXZlci4KLSAqCi0gKiBTdGF0dXM6IFRlc3QgcmVzdWx0cyBmcm9tIExlb24gV29lc3RlbmJlcmcgIDxsZW9uLndvZXN0ZW5iZXJnQGF4b24udHY+OgotICoKLSAqIFNlbmRlcm8gQm9hcmQgdy8gQ3ljbG9uZSBJSSBFUDJDMzVGNjcyQzZOLCBQWDEwMTFBIFBDSWUgeDEgUEhZIG9uIGEKLSAqIERlbGwgUHJlY2lzaW9uIDM3MCBQQywgeDg2LCBrZXJuZWwgMi42LjIwIGZyb20gVWJ1bnR1IDcuMDQuCi0gKgotICogU2VuZGVybyBCb2FyZCB3LyBDeWNsb25lIElJIEVQMkMzNUY2NzJDNk4sIFBYMTAxMUEgUENJZSB4MSBQSFkgb24gYQotICogRnJlZXNjYWxlIE1QQzgzMTNFLVJEQiBib2FyZCwgUG93ZXJQQywgMi42LjI0IHcvIEZyZWVzY2FsZSBwYXRjaGVzLgotICoKLSAqIERyaXZlciB0ZXN0cyBwYXNzZWQgd2l0aCBQQ0llIENvbXBpbGVyIDguMS4gV2l0aCBQQ0llIDguMCB0aGUgRE1BCi0gKiBsb29wYmFjayB0ZXN0IGhhZCByZXByb2R1Y2FibGUgY29tcGFyZSBlcnJvcnMuIEkgYXNzdW1lIGEgY2hhbmdlCi0gKiBpbiB0aGUgY29tcGlsZXIgb3IgcmVmZXJlbmNlIGRlc2lnbiwgYnV0IGNvdWxkIG5vdCBmaW5kIGV2aWRlbmNlIG5vcgotICogZG9jdW1lbnRhdGlvbiBvbiBhIGNoYW5nZSBvciBmaXggaW4gdGhhdCBkaXJlY3Rpb24uCi0gKgotICogVGhlIHJlZmVyZW5jZSBkZXNpZ24gZG9lcyBub3QgaGF2ZSByZWFkYWJsZSBsb2NhdGlvbnMgYW5kIHRodXMgYQotICogZHVtbXkgcmVhZCwgdXNlZCB0byBmbHVzaCBQQ0kgcG9zdGVkIHdyaXRlcywgY2Fubm90IGJlIHBlcmZvcm1lZC4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotCi0KLS8qIGJ5IGRlZmF1bHQgZG8gbm90IGJ1aWxkIHRoZSBjaGFyYWN0ZXIgZGV2aWNlIGludGVyZmFjZSAqLwotLyogWFhYIEl0IGlzIG5vbi1mdW5jdGlvbmFsIHlldCAqLwotI2lmbmRlZiBBTFRQQ0lFQ0hETUFfQ0RFVgotIyAgZGVmaW5lIEFMVFBDSUVDSERNQV9DREVWIDAKLSNlbmRpZgotCi0vKiBidWlsZCB0aGUgY2hhcmFjdGVyIGRldmljZSBpbnRlcmZhY2U/ICovCi0jaWYgQUxUUENJRUNIRE1BX0NERVYKLSMgIGRlZmluZSBNQVhfQ0hETUFfU0laRSAoOCAqIDEwMjQgKiAxMDI0KQotIyAgaW5jbHVkZSAibWFwcGVyX3VzZXJfdG9fc2cuaCIKLSNlbmRpZgotCi0vKiogZHJpdmVyIG5hbWUsIG1pbWlja3MgQWx0ZXJhIG5hbWluZyBvZiB0aGUgcmVmZXJlbmNlIGRlc2lnbiAqLwotI2RlZmluZSBEUlZfTkFNRSAiYWx0cGNpZWNoZG1hIgotLyoqIG51bWJlciBvZiBCQVJzIG9uIHRoZSBkZXZpY2UgKi8KLSNkZWZpbmUgQVBFX0JBUl9OVU0gKDYpCi0vKiogQkFSIG51bWJlciB3aGVyZSB0aGUgUkNTTEFWRSBtZW1vcnkgc2l0cyAqLwotI2RlZmluZSBBUEVfQkFSX1JDU0xBVkUgKDApCi0vKiogQkFSIG51bWJlciB3aGVyZSB0aGUgRGVzY3JpcHRvciBIZWFkZXIgc2l0cyAqLwotI2RlZmluZSBBUEVfQkFSX0hFQURFUiAoMikKLQotLyoqIG1heGltdW0gc2l6ZSBpbiBieXRlcyBvZiB0aGUgZGVzY3JpcHRvciB0YWJsZSwgY2hkbWEgbG9naWMgbGltaXQgKi8KLSNkZWZpbmUgQVBFX0NIRE1BX1RBQkxFX1NJWkUgKDQwOTYpCi0vKiBzaW5nbGUgdHJhbnNmZXIgbXVzdCBub3QgZXhjZWVkIDI1NSB0YWJsZSBlbnRyaWVzLiB3b3JzdCBjYXNlIHRoaXMgY2FuIGJlCi0gKiBhY2hpZXZlZCBieSAyNTUgc2NhdHRlcmVkIHBhZ2VzLCB3aXRoIG9ubHkgYSBzaW5nbGUgYnl0ZSBpbiB0aGUgaGVhZCBhbmQKLSAqIHRhaWwgcGFnZXMuIDI1MyAqIFBBR0VfU0laRSBpcyBhIHNhZmUgdXBwZXIgYm91bmQgZm9yIHRoZSB0cmFuc2ZlciBzaXplLgotICovCi0jZGVmaW5lIEFQRV9DSERNQV9NQVhfVFJBTlNGRVJfTEVOICgyNTMgKiBQQUdFX1NJWkUpCi0KLS8qKgotICogU3BlY2lmaWVzIHRob3NlIEJBUnMgdG8gYmUgbWFwcGVkIGFuZCB0aGUgbGVuZ3RoIG9mIGVhY2ggbWFwcGluZy4KLSAqCi0gKiBaZXJvICgwKSBtZWFucyBkbyBub3QgbWFwLCBvdGhlcndpc2Ugc3BlY2lmaWVzIHRoZSBCQVIgbGVuZ3RocyB0byBiZSBtYXBwZWQuCi0gKiBJZiB0aGUgYWN0dWFsIEJBUiBsZW5ndGggaXMgbGVzcywgdGhpcyBpcyBjb25zaWRlcmVkIGFuIGVycm9yOyB0aGVuCi0gKiByZWNvbmZpZ3VyZSB5b3VyIFBDSWUgY29yZS4KLSAqCi0gKiBAc2VlIHVnX3BjaV9leHByZXNzIDguMCwgdGFibGUgNy0yIGF0IHBhZ2UgNy0xMy4KLSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgYmFyX21pbl9sZW5bQVBFX0JBUl9OVU1dID0KLQl7IDMyNzY4LCAwLCAyNTYsIDAsIDMyNzY4LCAwIH07Ci0KLS8qKgotICogRGVzY3JpcHRvciBIZWFkZXIsIGNvbnRyb2xzIHRoZSBETUEgcmVhZCBlbmdpbmUgb3Igd3JpdGUgZW5naW5lLgotICoKLSAqIFRoZSBkZXNjcmlwdG9yIGhlYWRlciBpcyB0aGUgbWFpbiBkYXRhIHN0cnVjdHVyZSBmb3Igc3RhcnRpbmcgRE1BIHRyYW5zZmVycy4KLSAqCi0gKiBJdCBzaXRzIGluIEVuZCBQb2ludCAoRlBHQSkgbWVtb3J5IEJBUlsyXSBmb3IgMzItYml0IG9yIEJBUlszOjJdIGZvciA2NC1iaXQuCi0gKiBJdCByZWZlcmVuY2VzIGEgZGVzY3JpcHRvciB0YWJsZSB3aGljaCBleGlzdHMgaW4gUm9vdCBDb21wbGV4IChQQykgbWVtb3J5LgotICogV3JpdGluZyB0aGUgcmNsYXN0IGZpZWxkIHN0YXJ0cyB0aGUgRE1BIG9wZXJhdGlvbiwgdGh1cyBhbGwgb3RoZXIgc3RydWN0dXJlcwotICogYW5kIGZpZWxkcyBtdXN0IGJlIHNldHVwIGJlZm9yZSBkb2luZyBzby4KLSAqCi0gKiBAc2VlIHVnX3BjaV9leHByZXNzIDguMCwgdGFibGVzIDctMywgNy00IGFuZCA3LTUgYXQgcGFnZSA3LTE0LgotICogQG5vdGUgVGhpcyBoZWFkZXIgbXVzdCBiZSB3cml0dGVuIGluIGZvdXIgMzItYml0IChQQ0kgRFdPUkQpIHdyaXRlcy4KLSAqLwotc3RydWN0IGFwZV9jaGRtYV9oZWFkZXIgewotCS8qKgotCSAqIHcwIGNvbnNpc3RzIG9mIHR3byAxNi1iaXQgZmllbGRzOgotCSAqIGxzYiB1MTYgbnVtYmVyOyBudW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gYXBlX2NoZG1hX3RhYmxlCi0JICogbXNiIHUxNiBjb250cm9sOyBnbG9iYWwgY29udHJvbCBmbGFncwotCSAqLwotCXUzMiB3MDsKLQkvKiBidXMgYWRkcmVzcyB0byBhcGVfY2hkbWFfdGFibGUgaW4gUm9vdCBDb21wbGV4IG1lbW9yeSAqLwotCXUzMiBiZHRfYWRkcl9oOwotCXUzMiBiZHRfYWRkcl9sOwotCS8qKgotCSAqIHczIGNvbnNpc3RzIG9mIHR3byAxNi1iaXQgZmllbGRzOgotCSAqIC0gbHNiIHUxNiByY2xhc3Q7IGxhc3QgZGVzY3JpcHRvciBudW1iZXIgYXZhaWxhYmxlIGluIFJvb3QgQ29tcGxleAotCSAqICAgIC0gemVybyAoMCkgbWVhbnMgdGhlIGZpcnN0IGRlc2NyaXB0b3IgaXMgcmVhZHksCi0JICogICAgLSBvbmUgKDEpIG1lYW5zIHR3byBkZXNjcmlwdG9ycyBhcmUgcmVhZHksIGV0Yy4KLQkgKiAtIG1zYiB1MTYgcmVzZXJ2ZWQ7Ci0JICoKLQkgKiBAbm90ZSB3cml0aW5nIHRvIHRoaXMgbWVtb3J5IGxvY2F0aW9uIHN0YXJ0cyB0aGUgRE1BIG9wZXJhdGlvbiEKLQkgKi8KLQl1MzIgdzM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqCi0gKiBEZXNjcmlwdG9yIEVudHJ5LCBkZXNjcmliaW5nIGEgKG5vbi1zY2F0dGVyZWQpIHNpbmdsZSBtZW1vcnkgYmxvY2sgdHJhbnNmZXIuCi0gKgotICogVGhlcmUgaXMgb25lIGRlc2NyaXB0b3IgZm9yIGVhY2ggbWVtb3J5IGJsb2NrIGludm9sdmVkIGluIHRoZSB0cmFuc2ZlciwgYQotICogYmxvY2sgYmVpbmcgYSBjb250aWd1b3VzIGFkZHJlc3MgcmFuZ2Ugb24gdGhlIGJ1cy4KLSAqCi0gKiBNdWx0aXBsZSBkZXNjcmlwdG9ycyBhcmUgY2hhaW5lZCBieSBtZWFucyBvZiB0aGUgYXBlX2NoZG1hX3RhYmxlIGRhdGEKLSAqIHN0cnVjdHVyZS4KLSAqCi0gKiBAc2VlIHVnX3BjaV9leHByZXNzIDguMCwgdGFibGVzIDctNiwgNy03IGFuZCA3LTggYXQgcGFnZSA3LTE0IGFuZCBwYWdlIDctMTUuCi0gKi8KLXN0cnVjdCBhcGVfY2hkbWFfZGVzYyB7Ci0JLyoqCi0JICogdzAgY29uc2lzdHMgb2YgdHdvIDE2LWJpdCBmaWVsZHM6Ci0JICogbnVtYmVyIG9mIERXT1JEUyB0byB0cmFuc2ZlcgotCSAqIC0gbHNiIHUxNiBsZW5ndGg7Ci0JICogZ2xvYmFsIGNvbnRyb2wKLQkgKiAtIG1zYiB1MTYgY29udHJvbDsKLQkgKi8KLQl1MzIgdzA7Ci0JLyogYWRkcmVzcyBvZiBtZW1vcnkgaW4gdGhlIEVuZCBQb2ludCAqLwotCXUzMiBlcF9hZGRyOwotCS8qIGJ1cyBhZGRyZXNzIG9mIHNvdXJjZSBvciBkZXN0aW5hdGlvbiBtZW1vcnkgaW4gdGhlIFJvb3QgQ29tcGxleCAqLwotCXUzMiByY19hZGRyX2g7Ci0JdTMyIHJjX2FkZHJfbDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioKLSAqIERlc2NyaXB0b3IgVGFibGUsIGFuIGFycmF5IG9mIGRlc2NyaXB0b3JzIGRlc2NyaWJpbmcgYSBjaGFpbmVkIHRyYW5zZmVyLgotICoKLSAqIEFuIGFycmF5IG9mIGRlc2NyaXB0b3JzLCBwcmVjZWRlZCBieSB3b3Jrc3BhY2UgZm9yIHRoZSBFbmQgUG9pbnQuCi0gKiBJdCBleGlzdHMgaW4gUm9vdCBDb21wbGV4IG1lbW9yeS4KLSAqCi0gKiBUaGUgRW5kIFBvaW50IGNhbiB1cGRhdGUgaXRzIGxhc3QgY29tcGxldGVkIGRlc2NyaXB0b3IgbnVtYmVyIGluIHRoZQotICogZXBsYXN0IGZpZWxkIGlmIHJlcXVlc3RlZCBieSBzZXR0aW5nIHRoZSBFUExBU1RfRU5BIGJpdCBlaXRoZXIKLSAqIGdsb2JhbGx5IGluIHRoZSBoZWFkZXIncyBvciBsb2NhbGx5IGluIGFueSBkZXNjcmlwdG9yJ3MgY29udHJvbCBmaWVsZC4KLSAqCi0gKiBAbm90ZSB0aGlzIHN0cnVjdHVyZSBtYXkgbm90IGV4Y2VlZCA0MDk2IGJ5dGVzLiBUaGlzIHJlc3VsdHMgaW4gYQotICogbWF4aW11bSBvZiA0MDk2IC8gKDQgKiA0KSAtIDEgPSAyNTUgZGVzY3JpcHRvcnMgcGVyIGNoYWluZWQgdHJhbnNmZXIuCi0gKgotICogQHNlZSB1Z19wY2lfZXhwcmVzcyA4LjAsIHRhYmxlcyA3LTksIDctMTAgYW5kIDctMTEgYXQgcGFnZSA3LTE3IGFuZCBwYWdlIDctMTguCi0gKi8KLXN0cnVjdCBhcGVfY2hkbWFfdGFibGUgewotCS8qIHdvcmtzcGFjZSAweDAwLTB4MGIsIHJlc2VydmVkICovCi0JdTMyIHJlc2VydmVkMVszXTsKLQkvKiB3b3Jrc3BhY2UgMHgwYy0weDBmLCBsYXN0IGRlc2NyaXB0b3IgaGFuZGxlZCBieSBFbmQgUG9pbnQgKi8KLQl1MzIgdzM7Ci0JLyogdGhlIGFjdHVhbCBhcnJheSBvZiBkZXNjcmlwdG9ycwotICAgICogMHgxMC0weDFmLCAweDIwLTB4MmYsIC4uLiAweGZmMC0weGZmZiAoMjU1IGVudHJpZXMpCi0gICAgKi8KLQlzdHJ1Y3QgYXBlX2NoZG1hX2Rlc2MgZGVzY1syNTVdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogQWx0ZXJhIFBDSSBFeHByZXNzICgnYXBlJykgYm9hcmQgc3BlY2lmaWMgYm9vayBrZWVwaW5nIGRhdGEKLSAqCi0gKiBLZWVwcyBzdGF0ZSBvZiB0aGUgUENJZSBjb3JlIGFuZCB0aGUgQ2hhaW5pbmcgRE1BIGNvbnRyb2xsZXIKLSAqIGFwcGxpY2F0aW9uLgotICovCi1zdHJ1Y3QgYXBlX2RldiB7Ci0JLyoqIHRoZSBrZXJuZWwgcGNpIGRldmljZSBkYXRhIHN0cnVjdHVyZSBwcm92aWRlZCBieSBwcm9iZSgpICovCi0Jc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7Ci0JLyoqCi0JICoga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgbWFwcGVkIEJBUiBtZW1vcnkgYW5kIElPIHJlZ2lvbnMgb2YKLQkgKiB0aGUgRW5kIFBvaW50LiBVc2VkIGJ5IG1hcF9iYXJzKCkvdW5tYXBfYmFycygpLgotCSAqLwotCXZvaWQgKiBfX2lvbWVtIGJhcltBUEVfQkFSX05VTV07Ci0JLyoqIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MgZm9yIERlc2NyaXB0b3IgVGFibGUgaW4gUm9vdCBDb21wbGV4IG1lbW9yeSAqLwotCXN0cnVjdCBhcGVfY2hkbWFfdGFibGUgKnRhYmxlX3ZpcnQ7Ci0JLyoqCi0JICogYnVzIGFkZHJlc3MgZm9yIHRoZSBEZXNjcmlwdG9yIFRhYmxlIGluIFJvb3QgQ29tcGxleCBtZW1vcnksIGluCi0JICogQ1BVLW5hdGl2ZSBlbmRpYW5lc3MKLQkgKi8KLQlkbWFfYWRkcl90IHRhYmxlX2J1czsKLQkvKiBpZiB0aGUgZGV2aWNlIHJlZ2lvbnMgY291bGQgbm90IGJlIGFsbG9jYXRlZCwgYXNzdW1lIGFuZCByZW1lbWJlciBpdAotCSAqIGlzIGluIHVzZSBieSBhbm90aGVyIGRyaXZlcjsgdGhpcyBkcml2ZXIgbXVzdCBub3QgZGlzYWJsZSB0aGUgZGV2aWNlLgotCSAqLwotCWludCBpbl91c2U7Ci0JLyogd2hldGhlciB0aGlzIGRyaXZlciBlbmFibGVkIG1zaSBmb3IgdGhlIGRldmljZSAqLwotCWludCBtc2lfZW5hYmxlZDsKLQkvKiB3aGV0aGVyIHRoaXMgZHJpdmVyIGNvdWxkIG9idGFpbiB0aGUgcmVnaW9ucyAqLwotCWludCBnb3RfcmVnaW9uczsKLQkvKiBpcnEgbGluZSBzdWNjZXNzZnVsbHkgcmVxdWVzdGVkIGJ5IHRoaXMgZHJpdmVyLCAtMSBvdGhlcndpc2UgKi8KLQlpbnQgaXJxX2xpbmU7Ci0JLyogYm9hcmQgcmV2aXNpb24gKi8KLQl1OCByZXZpc2lvbjsKLQkvKiBpbnRlcnJ1cHQgY291bnQsIGluY3JlbWVudGVkIGJ5IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAqLwotCWludCBpcnFfY291bnQ7Ci0jaWYgQUxUUENJRUNIRE1BX0NERVYKLQkvKiBjaGFyYWN0ZXIgZGV2aWNlICovCi0JZGV2X3QgY2Rldm5vOwotCXN0cnVjdCBjZGV2IGNkZXY7Ci0JLyogdXNlciBzcGFjZSBzY2F0dGVyIGdhdGhlciBtYXBwZXIgKi8KLQlzdHJ1Y3Qgc2dfbWFwcGluZ190ICpzZ207Ci0jZW5kaWYKLX07Ci0KLS8qKgotICogVXNpbmcgdGhlIHN1YnN5c3RlbSB2ZW5kb3IgaWQgYW5kIHN1YnN5c3RlbSBpZCwgaXQgaXMgcG9zc2libGUgdG8KLSAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gZGlmZmVyZW50IGNhcmRzIGJhc2VzIGFyb3VuZCB0aGUgc2FtZQotICogKHRoaXJkLXBhcnR5KSBsb2dpYyBjb3JlLgotICoKLSAqIERlZmF1bHQgQWx0ZXJhIHZlbmRvciBhbmQgZGV2aWNlIElEJ3MsIGFuZCBzb21lIChub24tcmVzZXJ2ZWQpCi0gKiBJRCdzIGFyZSBub3cgdXNlZCBoZXJlIHRoYXQgYXJlIHVzZWQgYW1vbmdzdCB0aGUgdGVzdGVycy9kZXZlbG9wZXJzLgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaWRzW10gPSB7Ci0JeyBQQ0lfREVWSUNFKDB4MTE3MiwgMHhFMDAxKSwgfSwKLQl7IFBDSV9ERVZJQ0UoMHgyMDcxLCAweDIwNzEpLCB9LAotCXsgMCwgfQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpZHMpOwotCi0jaWYgQUxUUENJRUNIRE1BX0NERVYKLS8qIHByb3RvdHlwZXMgZm9yIGNoYXJhY3RlciBkZXZpY2UgKi8KLXN0YXRpYyBpbnQgc2dfaW5pdChzdHJ1Y3QgYXBlX2RldiAqYXBlKTsKLXN0YXRpYyB2b2lkIHNnX2V4aXQoc3RydWN0IGFwZV9kZXYgKmFwZSk7Ci0jZW5kaWYKLQotLyoqCi0gKiBhbHRwY2llY2hkbWFfaXNyKCkgLSBJbnRlcnJ1cHQgaGFuZGxlcgotICoKLSAqLwotc3RhdGljIGlycXJldHVybl90IGFsdHBjaWVjaGRtYV9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCXN0cnVjdCBhcGVfZGV2ICphcGUgPSAoc3RydWN0IGFwZV9kZXYgKilkZXZfaWQ7Ci0JaWYgKCFhcGUpCi0JCXJldHVybiBJUlFfTk9ORTsKLQlhcGUtPmlycV9jb3VudCsrOwotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgc2Nhbl9iYXJzKHN0cnVjdCBhcGVfZGV2ICphcGUsIHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IEFQRV9CQVJfTlVNOyBpKyspIHsKLQkJdW5zaWduZWQgbG9uZyBiYXJfc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCBpKTsKLQkJaWYgKGJhcl9zdGFydCkgewotCQkJdW5zaWduZWQgbG9uZyBiYXJfZW5kID0gcGNpX3Jlc291cmNlX2VuZChkZXYsIGkpOwotCQkJdW5zaWduZWQgbG9uZyBiYXJfZmxhZ3MgPSBwY2lfcmVzb3VyY2VfZmxhZ3MoZGV2LCBpKTsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJCQVIlZCAweCUwOGx4LTB4JTA4bHggZmxhZ3MgMHglMDhseFxuIiwKLQkJCSAgaSwgYmFyX3N0YXJ0LCBiYXJfZW5kLCBiYXJfZmxhZ3MpOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIFVubWFwIHRoZSBCQVIgcmVnaW9ucyB0aGF0IGhhZCBiZWVuIG1hcHBlZCBlYXJsaWVyIHVzaW5nIG1hcF9iYXJzKCkKLSAqLwotc3RhdGljIHZvaWQgdW5tYXBfYmFycyhzdHJ1Y3QgYXBlX2RldiAqYXBlLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBBUEVfQkFSX05VTTsgaSsrKSB7Ci0JICAvKiBpcyB0aGlzIEJBUiBtYXBwZWQ/ICovCi0JCWlmIChhcGUtPmJhcltpXSkgewotCQkJLyogdW5tYXAgQkFSICovCi0JCQlwY2lfaW91bm1hcChkZXYsIGFwZS0+YmFyW2ldKTsKLQkJCWFwZS0+YmFyW2ldID0gTlVMTDsKLQkJfQotCX0KLX0KLQotLyoqCi0gKiBNYXAgdGhlIGRldmljZSBtZW1vcnkgcmVnaW9ucyBpbnRvIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgYWZ0ZXIKLSAqIHZlcmlmeWluZyB0aGVpciBzaXplcyByZXNwZWN0IHRoZSBtaW5pbXVtIHNpemVzIG5lZWRlZCwgZ2l2ZW4gYnkgdGhlCi0gKiBiYXJfbWluX2xlbltdIGFycmF5LgotICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBtYXBfYmFycyhzdHJ1Y3QgYXBlX2RldiAqYXBlLCBzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCWludCByYzsKLQlpbnQgaTsKLQkvKiBpdGVyYXRlIHRocm91Z2ggYWxsIHRoZSBCQVJzICovCi0JZm9yIChpID0gMDsgaSA8IEFQRV9CQVJfTlVNOyBpKyspIHsKLQkJdW5zaWduZWQgbG9uZyBiYXJfc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCBpKTsKLQkJdW5zaWduZWQgbG9uZyBiYXJfZW5kID0gcGNpX3Jlc291cmNlX2VuZChkZXYsIGkpOwotCQl1bnNpZ25lZCBsb25nIGJhcl9sZW5ndGggPSBiYXJfZW5kIC0gYmFyX3N0YXJ0ICsgMTsKLQkJYXBlLT5iYXJbaV0gPSBOVUxMOwotCQkvKiBkbyBub3QgbWFwLCBhbmQgc2tpcCwgQkFScyB3aXRoIGxlbmd0aCAwICovCi0JCWlmICghYmFyX21pbl9sZW5baV0pCi0JCQljb250aW51ZTsKLQkJLyogZG8gbm90IG1hcCBCQVJzIHdpdGggYWRkcmVzcyAwICovCi0JCWlmICghYmFyX3N0YXJ0IHx8ICFiYXJfZW5kKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiQkFSICMlZCBpcyBub3QgcHJlc2VudD8hXG4iLCBpKTsKLQkJCXJjID0gLTE7Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KLQkJYmFyX2xlbmd0aCA9IGJhcl9lbmQgLSBiYXJfc3RhcnQgKyAxOwotCQkvKiBCQVIgbGVuZ3RoIGlzIGxlc3MgdGhhbiBkcml2ZXIgcmVxdWlyZXM/ICovCi0JCWlmIChiYXJfbGVuZ3RoIDwgYmFyX21pbl9sZW5baV0pIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJCQVIgIyVkIGxlbmd0aCA9ICVsdSBieXRlcyBidXQgZHJpdmVyICIKLQkJCSJyZXF1aXJlcyBhdCBsZWFzdCAlbHUgYnl0ZXNcbiIsCi0JCQlpLCBiYXJfbGVuZ3RoLCBiYXJfbWluX2xlbltpXSk7Ci0JCQlyYyA9IC0xOwotCQkJZ290byBmYWlsOwotCQl9Ci0JCS8qIG1hcCB0aGUgZGV2aWNlIG1lbW9yeSBvciBJTyByZWdpb24gaW50byBrZXJuZWwgdmlydHVhbAotCQkgKiBhZGRyZXNzIHNwYWNlICovCi0JCWFwZS0+YmFyW2ldID0gcGNpX2lvbWFwKGRldiwgaSwgYmFyX21pbl9sZW5baV0pOwotCQlpZiAoIWFwZS0+YmFyW2ldKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IG1hcCBCQVIgIyVkLlxuIiwgaSk7Ci0JCQlyYyA9IC0xOwotCQkJZ290byBmYWlsOwotCQl9Ci0JCXByaW50ayhLRVJOX0RFQlVHICJCQVJbJWRdIG1hcHBlZCBhdCAweCVwIHdpdGggbGVuZ3RoICVsdSgvJWx1KS5cbiIsIGksCi0JCWFwZS0+YmFyW2ldLCBiYXJfbWluX2xlbltpXSwgYmFyX2xlbmd0aCk7Ci0JfQotCS8qIHN1Y2Nlc3NmdWxseSBtYXBwZWQgYWxsIHJlcXVpcmVkIEJBUiByZWdpb25zICovCi0JcmMgPSAwOwotCWdvdG8gc3VjY2VzczsKLWZhaWw6Ci0JLyogdW5tYXAgYW55IEJBUnMgdGhhdCB3ZSBkaWQgbWFwICovCi0JdW5tYXBfYmFycyhhcGUsIGRldik7Ci1zdWNjZXNzOgotCXJldHVybiByYzsKLX0KLQotI2lmIDAgLyogbm90IHlldCBpbXBsZW1lbnRlZCBmdWxseSBGSVhNRSBhZGQgb3Bjb2RlICovCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgcmNzbGF2ZV90ZXN0KHN0cnVjdCBhcGVfZGV2ICphcGUsIHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JdTMyICpyY3NsYXZlX21lbSA9ICh1MzIgKilhcGUtPmJhcltBUEVfQkFSX1JDU0xBVkVdOwotCXUzMiByZXN1bHQgPSAwOwotCS8qKiB0aGlzIG51bWJlciBpcyBhc3N1bWVkIHRvIGJlIGRpZmZlcmVudCBlYWNoIHRpbWUgdGhpcyB0ZXN0IHJ1bnMgKi8KLQl1MzIgc2VlZCA9ICh1MzIpamlmZmllczsKLQl1MzIgdmFsdWUgPSBzZWVkOwotCWludCBpOwotCi0JLyogd3JpdGUgbG9vcCAqLwotCXZhbHVlID0gc2VlZDsKLQlmb3IgKGkgPSAxMDI0OyBpIDwgMzI3NjggLyA0IDsgaSsrKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJXcml0aW5nIDB4JTA4eCB0byAweCVwLlxuIiwKLQkJCSh1MzIpdmFsdWUsICh2b2lkICopcmNzbGF2ZV9tZW0gKyBpKTsKLQkJaW93cml0ZTMyKHZhbHVlLCByY3NsYXZlX21lbSArIGkpOwotCQl2YWx1ZSsrOwotCX0KLQkvKiByZWFkLWJhY2sgbG9vcCAqLwotCXZhbHVlID0gc2VlZDsKLQlmb3IgKGkgPSAxMDI0OyBpIDwgMzI3NjggLyA0OyBpKyspIHsKLQkJcmVzdWx0ID0gaW9yZWFkMzIocmNzbGF2ZV9tZW0gKyBpKTsKLQkJaWYgKHJlc3VsdCAhPSB2YWx1ZSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIldyb3RlIDB4JTA4eCB0byAweCVwLCBidXQgcmVhZCBiYWNrIDB4JTA4eC5cbiIsCi0JCQkJKHUzMil2YWx1ZSwgKHZvaWQgKilyY3NsYXZlX21lbSArIGksICh1MzIpcmVzdWx0KTsKLQkJCWJyZWFrOwotCQl9Ci0JCXZhbHVlKys7Ci0JfQotfQotI2VuZGlmCi0KLS8qIG9idGFpbiB0aGUgMzIgbW9zdCBzaWduaWZpY2FudCAoaGlnaCkgYml0cyBvZiBhIDMyLWJpdCBvciA2NC1iaXQgYWRkcmVzcyAqLwotI2RlZmluZSBwY2lfZG1hX2goYWRkcikgKChhZGRyID4+IDE2KSA+PiAxNikKLS8qIG9idGFpbiB0aGUgMzIgbGVhc3Qgc2lnbmlmaWNhbnQgKGxvdykgYml0cyBvZiBhIDMyLWJpdCBvciA2NC1iaXQgYWRkcmVzcyAqLwotI2RlZmluZSBwY2lfZG1hX2woYWRkcikgKGFkZHIgJiAweGZmZmZmZmZmVUwpCi0KLS8qIGFwZV9maWxsX2NoZG1hX2Rlc2MoKSAtIEZpbGwgYSBBbHRlcmEgUENJIEV4cHJlc3MgQ2hhaW5pbmcgRE1BIGRlc2NyaXB0b3IKLSAqCi0gKiBAZGVzYyBwb2ludGVyIHRvIGRlc2NyaXB0b3IgdG8gYmUgZmlsbGVkCi0gKiBAYWRkciByb290IGNvbXBsZXggYWRkcmVzcwotICogQGVwX2FkZHIgZW5kIHBvaW50IGFkZHJlc3MKLSAqIEBsZW4gbnVtYmVyIG9mIGJ5dGVzLCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGFwZV9jaGRtYV9kZXNjX3NldChzdHJ1Y3QgYXBlX2NoZG1hX2Rlc2MgKmRlc2MsIGRtYV9hZGRyX3QgYWRkciwgdTMyIGVwX2FkZHIsIGludCBsZW4pCi17Ci0gIEJVR19PTihsZW4gJiAzKTsKLQlkZXNjLT53MCA9IGNwdV90b19sZTMyKGxlbiAvIDQpOwotCWRlc2MtPmVwX2FkZHIgPSBjcHVfdG9fbGUzMihlcF9hZGRyKTsKLQlkZXNjLT5yY19hZGRyX2ggPSBjcHVfdG9fbGUzMihwY2lfZG1hX2goYWRkcikpOwotCWRlc2MtPnJjX2FkZHJfbCA9IGNwdV90b19sZTMyKHBjaV9kbWFfbChhZGRyKSk7Ci19Ci0KLSNpZiBBTFRQQ0lFQ0hETUFfQ0RFVgotLyoKLSAqIGFwZV9zZ190b19jaGRtYV90YWJsZSgpIC0gQ3JlYXRlIGEgZGV2aWNlIGRlc2NyaXB0b3IgdGFibGUgZnJvbSBhIHNjYXR0ZXJsaXN0LgotICoKLSAqIFRoZSBzY2F0dGVybGlzdCBtdXN0IGhhdmUgYmVlbiBtYXBwZWQgYnkgcGNpX21hcF9zZyhzZ20tPnNnbCkuCi0gKgotICogQHNnbCBzY2F0dGVybGlzdC4KLSAqIEBuZW50cyBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgc2NhdHRlcmxpc3QuCi0gKiBAZmlyc3QgU3RhcnQgaW5kZXggaW4gdGhlIHNjYXR0ZXJsaXN0IHNnbS0+c2dsLgotICogQGVwX2FkZHIgRW5kIFBvaW50IGFkZHJlc3MgZm9yIHRoZSBzY2F0dGVyL2dhdGhlciB0cmFuc2Zlci4KLSAqIEBkZXNjIHBvaW50ZXIgdG8gZmlyc3QgZGVzY3JpcHRvcgotICoKLSAqIFJldHVybnMgTnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHRhYmxlIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLgotICovCi1zdGF0aWMgaW50IGFwZV9zZ190b19jaGRtYV90YWJsZShzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgaW50IG5lbnRzLCBpbnQgZmlyc3QsIHN0cnVjdCBhcGVfY2hkbWFfZGVzYyAqZGVzYywgdTMyIGVwX2FkZHIpCi17Ci0JaW50IGkgPSBmaXJzdCwgaiA9IDA7Ci0JLyogaW5zcGVjdCBmaXJzdCBlbnRyeSAqLwotCWRtYV9hZGRyX3QgYWRkciA9IHNnX2RtYV9hZGRyZXNzKCZzZ2xbaV0pOwotCXVuc2lnbmVkIGludCBsZW4gPSBzZ19kbWFfbGVuKCZzZ2xbaV0pOwotCS8qIGNvbnRpZ3VvdXMgYmxvY2sgKi8KLQlkbWFfYWRkcl90IGNvbnRfYWRkciA9IGFkZHI7Ci0JdW5zaWduZWQgaW50IGNvbnRfbGVuID0gbGVuOwotCS8qIGl0ZXJhdGUgb3ZlciByZW1haW5pbmcgZW50cmllcyAqLwotCWZvciAoOyBqIDwgMjUgJiYgaSA8IG5lbnRzIC0gMTsgaSsrKSB7Ci0JCS8qIGJ1cyBhZGRyZXNzIG9mIG5leHQgZW50cnkgaSArIDEgKi8KLQkJZG1hX2FkZHJfdCBuZXh0ID0gc2dfZG1hX2FkZHJlc3MoJnNnbFtpICsgMV0pOwotCQkvKiBsZW5ndGggb2YgdGhpcyBlbnRyeSBpICovCi0JCWxlbiA9IHNnX2RtYV9sZW4oJnNnbFtpXSk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlMDRkOiBhZGRyPTB4JUx4IGxlbmd0aD0weCUwOHhcbiIsIGksCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKWFkZHIsIGxlbik7Ci0JCS8qIGVudHJ5IGkgKyAxIGlzIG5vbi1jb250aWd1b3VzIHdpdGggZW50cnkgaT8gKi8KLQkJaWYgKG5leHQgIT0gYWRkciArIGxlbikgewotCQkJLyogVE9ETyBjcmVhdGUgZW50cnkgaGVyZSAod2UgY291bGQgb3ZlcndyaXRlIGkpICovCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJTRkOiBjb250X2FkZHI9MHglTHggY29udF9sZW49MHglMDh4XG4iLCBqLAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpY29udF9hZGRyLCBjb250X2xlbik7Ci0JCQkvKiBzZXQgZGVzY3JpcHRvciBmb3IgY29udGlndW91cyB0cmFuc2ZlciAqLwotCQkJYXBlX2NoZG1hX2Rlc2Nfc2V0KCZkZXNjW2pdLCBjb250X2FkZHIsIGVwX2FkZHIsIGNvbnRfbGVuKTsKLQkJCS8qIG5leHQgZW5kIHBvaW50IG1lbW9yeSBhZGRyZXNzICovCi0JCQllcF9hZGRyICs9IGNvbnRfbGVuOwotCQkJLyogc3RhcnQgbmV3IGNvbnRpZ3VvdXMgYmxvY2sgKi8KLQkJCWNvbnRfYWRkciA9IG5leHQ7Ci0JCQljb250X2xlbiA9IDA7Ci0JCQlqKys7Ci0JCX0KLQkJLyogYWRkIGVudHJ5IGkgKyAxIHRvIGN1cnJlbnQgY29udGlndW91cyBibG9jayAqLwotCQljb250X2xlbiArPSBsZW47Ci0JCS8qIGdvdG8gZW50cnkgaSArIDEgKi8KLQkJYWRkciA9IG5leHQ7Ci0JfQotCS8qIFRPRE8gY3JlYXRlIGVudHJ5IGhlcmUgICh3ZSBjb3VsZCBvdmVyd3JpdGUgaSkgKi8KLQlwcmludGsoS0VSTl9ERUJVRyAiJTA0ZDogYWRkcj0weCVMeCBsZW5ndGg9MHglMDh4XG4iLCBpLAotCQkodW5zaWduZWQgbG9uZyBsb25nKWFkZHIsIGxlbik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiU0ZDogY29udF9hZGRyPTB4JUx4IGxlbmd0aD0weCUwOHhcbiIsIGosCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpY29udF9hZGRyLCBjb250X2xlbik7Ci0JaisrOwotCXJldHVybiBqOwotfQotI2VuZGlmCi0KLS8qIGNvbXBhcmUgYnVmZmVycyAqLwotc3RhdGljIGlubGluZSBpbnQgY29tcGFyZSh1MzIgKnAsIHUzMiAqcSwgaW50IGxlbikKLXsKLQlpbnQgcmVzdWx0ID0gLTE7Ci0JaW50IGZhaWwgPSAwOwotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBsZW4gLyA0OyBpKyspIHsKLQkJaWYgKCpwID09ICpxKSB7Ci0JCQkvKiBldmVyeSBzbyBtYW55IHUzMiB3b3Jkcywgc2hvdyBlcXVhbHMgKi8KLQkJCWlmICgoaSAmIDI1NSkgPT0gMCkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiWyVwXSA9IDB4JTA4eCAgICBbJXBdID0gMHglMDh4XG4iLCBwLCAqcCwgcSwgKnEpOwotCQl9IGVsc2UgewotCQkJZmFpbCsrOwotCQkJLyogc2hvdyB0aGUgZmlyc3QgZmV3IG1pc2NvbXBhcmVzICovCi0JCQlpZiAoZmFpbCA8IDEwKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICJbJXBdID0gMHglMDh4ICE9IFslcF0gPSAweCUwOHggPyFcbiIsIHAsICpwLCBxLCAqcSk7Ci0JCQkJLyogYnV0IHN0b3AgYWZ0ZXIgYSB3aGlsZSAqLwotCQkJZWxzZSBpZiAoZmFpbCA9PSAxMCkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiLS0tbW9yZSBlcnJvcnMgZm9sbG93ISBub3QgcHJpbnRlZC0tLVxuIik7Ci0JCQllbHNlCi0JCQkJLyogc3RvcCBjb21wYXJlIGFmdGVyIHRoaXMgbWFueSBlcnJvcnMgKi8KLQkJCWJyZWFrOwotCQl9Ci0JCXArKzsKLQkJcSsrOwotCX0KLQlpZiAoIWZhaWwpCi0JCXJlc3VsdCA9IDA7Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogZG1hX3Rlc3QoKSAtIFBlcmZvcm0gRE1BIGxvb3AgYmFjayB0ZXN0IHRvIGVuZCBwb2ludCBhbmQgYmFjayB0byByb290IGNvbXBsZXguCi0gKgotICogQWxsb2NhdGUgYSBjYWNoZS1jb2hlcmVudCBidWZmZXIgaW4gaG9zdCBtZW1vcnksIGNvbnNpc3Rpbmcgb2YgZm91ciBwYWdlcy4KLSAqCi0gKiBGaWxsIHRoZSBmb3VyIG1lbW9yeSBwYWdlcyBzdWNoIHRoYXQgZWFjaCAzMi1iaXQgd29yZCBjb250YWlucyBpdHMgb3duIGFkZHJlc3MuCi0gKgotICogTm93IHBlcmZvcm0gYSBsb29wIGJhY2sgdGVzdCwgaGF2ZSB0aGUgZW5kIHBvaW50IGRldmljZSBjb3B5IHRoZSBmaXJzdCBidWZmZXIKLSAqIGhhbGYgdG8gZW5kIHBvaW50IG1lbW9yeSwgdGhlbiBoYXZlIGl0IGNvcHkgYmFjayBpbnRvIHRoZSBzZWNvbmQgaGFsZi4KLSAqCi0gKiAgIENyZWF0ZSBhIGRlc2NyaXB0b3IgdGFibGUgdG8gY29weSB0aGUgZmlyc3QgYnVmZmVyIGhhbGYgaW50byBFbmQgUG9pbnQKLSAqICAgbWVtb3J5LiBJbnN0cnVjdCB0aGUgRW5kIFBvaW50IHRvIGRvIGEgRE1BIHJlYWQgdXNpbmcgdGhhdCB0YWJsZS4KLSAqCi0gKiAgIENyZWF0ZSBhIGRlc2NyaXB0b3IgdGFibGUgdG8gY29weSBFbmQgUG9pbnQgbWVtb3J5IHRvIHRoZSBzZWNvbmQgYnVmZmVyCi0gKiAgIGhhbGYuIEluc3RydWN0IHRoZSBFbmQgUG9pbnQgdG8gZG8gYSBETUEgd3JpdGUgdXNpbmcgdGhhdCB0YWJsZS4KLSAqCi0gKiBDb21wYXJlIHJlc3VsdHMsIGZhaWwgb3IgcGFzcy4KLSAqCi0gKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IGRtYV90ZXN0KHN0cnVjdCBhcGVfZGV2ICphcGUsIHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JLyogdGVzdCByZXN1bHQ7IGd1aWx0eSB1bnRpbCBwcm92ZW4gaW5ub2NlbnQgKi8KLQlpbnQgcmVzdWx0ID0gLTE7Ci0JLyogdGhlIERNQSByZWFkIGhlYWRlciBzaXRzIGF0IGFkZHJlc3MgMHgwMCBvZiB0aGUgRE1BIGVuZ2luZSBCQVIgKi8KLQlzdHJ1Y3QgYXBlX2NoZG1hX2hlYWRlciAqd3JpdGVfaGVhZGVyID0gKHN0cnVjdCBhcGVfY2hkbWFfaGVhZGVyICopYXBlLT5iYXJbQVBFX0JBUl9IRUFERVJdOwotCS8qIHRoZSB3cml0ZSBETUEgaGVhZGVyIHNpdHMgYWZ0ZXIgdGhlIHJlYWQgaGVhZGVyIGF0IGFkZHJlc3MgMHgxMCAqLwotCXN0cnVjdCBhcGVfY2hkbWFfaGVhZGVyICpyZWFkX2hlYWRlciA9IHdyaXRlX2hlYWRlciArIDE7Ci0JLyogdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyICovCi0JdTggKmJ1ZmZlcl92aXJ0ID0gMDsKLQkvKiBidXMgYWRkcmVzcyBvZiB0aGUgYWxsb2NhdGVkIGJ1ZmZlciAqLwotCWRtYV9hZGRyX3QgYnVmZmVyX2J1cyA9IDA7Ci0JaW50IGksIG4gPSAwLCBpcnFfY291bnQ7Ci0KLQkvKiB0ZW1wb3JhcnkgdmFsdWUgdXNlZCB0byBjb25zdHJ1Y3QgMzItYml0IGRhdGEgd29yZHMgKi8KLQl1MzIgdzsKLQotCXByaW50ayhLRVJOX0RFQlVHICJiYXJfdGVzdHMoKSwgUEFHRV9TSVpFID0gMHglMHhcbiIsIChpbnQpUEFHRV9TSVpFKTsKLQlwcmludGsoS0VSTl9ERUJVRyAid3JpdGVfaGVhZGVyID0gMHglcC5cbiIsIHdyaXRlX2hlYWRlcik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgInJlYWRfaGVhZGVyID0gMHglcC5cbiIsIHJlYWRfaGVhZGVyKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJndyaXRlX2hlYWRlci0+dzMgPSAweCVwXG4iLCAmd3JpdGVfaGVhZGVyLT53Myk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiZyZWFkX2hlYWRlci0+dzMgPSAweCVwXG4iLCAmcmVhZF9oZWFkZXItPnczKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiYXBlLT50YWJsZV92aXJ0ID0gMHglcC5cbiIsIGFwZS0+dGFibGVfdmlydCk7Ci0KLQlpZiAoIXdyaXRlX2hlYWRlciB8fCAhcmVhZF9oZWFkZXIgfHwgIWFwZS0+dGFibGVfdmlydCkKLQkJZ290byBmYWlsOwotCi0JLyogYWxsb2NhdGUgYW5kIG1hcCBjb2hlcmVudGx5LWNhY2hlZCBtZW1vcnkgZm9yIGEgRE1BLWFibGUgYnVmZmVyICovCi0JLyogQHNlZSBEb2N1bWVudGF0aW9uL1BDSS9QQ0ktRE1BLW1hcHBpbmcudHh0LCBuZWFyIGxpbmUgMzE4ICovCi0JYnVmZmVyX3ZpcnQgPSAodTggKilwY2lfYWxsb2NfY29uc2lzdGVudChkZXYsIFBBR0VfU0laRSAqIDQsICZidWZmZXJfYnVzKTsKLQlpZiAoIWJ1ZmZlcl92aXJ0KSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJDb3VsZCBub3QgYWxsb2NhdGUgY29oZXJlbnQgRE1BIGJ1ZmZlci5cbiIpOwotCQlnb3RvIGZhaWw7Ci0JfQotCXByaW50ayhLRVJOX0RFQlVHICJBbGxvY2F0ZWQgY2FjaGUtY29oZXJlbnQgRE1BIGJ1ZmZlciAodmlydHVhbCBhZGRyZXNzID0gJXAsIGJ1cyBhZGRyZXNzID0gMHglMDE2bGx4KS5cbiIsCi0JICAgICAgIGJ1ZmZlcl92aXJ0LCAodTY0KWJ1ZmZlcl9idXMpOwotCi0JLyogZmlsbCBmaXJzdCBoYWxmIG9mIGJ1ZmZlciB3aXRoIGl0cyB2aXJ0dWFsIGFkZHJlc3MgYXMgZGF0YSAqLwotCWZvciAoaSA9IDA7IGkgPCA0ICogUEFHRV9TSVpFOyBpICs9IDQpCi0jaWYgMAotCQkqKHUzMiAqKShidWZmZXJfdmlydCArIGkpID0gaSAvIFBBR0VfU0laRSArIDE7Ci0jZWxzZQotCQkqKHUzMiAqKShidWZmZXJfdmlydCArIGkpID0gKHUzMikodW5zaWduZWQgbG9uZykoYnVmZmVyX3ZpcnQgKyBpKTsKLSNlbmRpZgotI2lmIDAKLSAgY29tcGFyZSgodTMyICopYnVmZmVyX3ZpcnQsICh1MzIgKikoYnVmZmVyX3ZpcnQgKyAyICogUEFHRV9TSVpFKSwgODE5Mik7Ci0jZW5kaWYKLQotI2lmIDAKLQkvKiBmaWxsIHNlY29uZCBoYWxmIG9mIGJ1ZmZlciB3aXRoIHplcm9lcyAqLwotCWZvciAoaSA9IDIgKiBQQUdFX1NJWkU7IGkgPCA0ICogUEFHRV9TSVpFOyBpICs9IDQpCi0JCSoodTMyICopKGJ1ZmZlcl92aXJ0ICsgaSkgPSAwOwotI2VuZGlmCi0KLQkvKiBpbnZhbGlkYXRlIEVQTEFTVCwgb3V0c2lkZSAwLTI1NSwgMHhGQURFIGlzIGZyb20gdGhlIHRlc3RiZW5jaCAqLwotCWFwZS0+dGFibGVfdmlydC0+dzMgPSBjcHVfdG9fbGUzMigweDAwMDBGQURFKTsKLQotCS8qIGZpbGwgaW4gZmlyc3QgZGVzY3JpcHRvciAqLwotCW4gPSAwOwotCS8qIHJlYWQgODE5MiBieXRlcyBmcm9tIFJDIGJ1ZmZlciB0byBFUCBhZGRyZXNzIDQwOTYgKi8KLQlhcGVfY2hkbWFfZGVzY19zZXQoJmFwZS0+dGFibGVfdmlydC0+ZGVzY1tuXSwgYnVmZmVyX2J1cywgNDA5NiwgMiAqIFBBR0VfU0laRSk7Ci0jaWYgMQotCWZvciAoaSA9IDA7IGkgPCAyNTU7IGkrKykKLQkJYXBlX2NoZG1hX2Rlc2Nfc2V0KCZhcGUtPnRhYmxlX3ZpcnQtPmRlc2NbaV0sIGJ1ZmZlcl9idXMsIDQwOTYsIDIgKiBQQUdFX1NJWkUpOwotCS8qIGluZGV4IG9mIGxhc3QgZGVzY3JpcHRvciAqLwotCW4gPSBpIC0gMTsKLSNlbmRpZgotI2lmIDAKLQkvKiBmaWxsIGluIG5leHQgZGVzY3JpcHRvciAqLwotCW4rKzsKLQkvKiByZWFkIDEwMjQgYnl0ZXMgZnJvbSBSQyBidWZmZXIgdG8gRVAgYWRkcmVzcyA0MDk2ICsgMTAyNCAqLwotCWFwZV9jaGRtYV9kZXNjX3NldCgmYXBlLT50YWJsZV92aXJ0LT5kZXNjW25dLCBidWZmZXJfYnVzICsgMTAyNCwgNDA5NiArIDEwMjQsIDEwMjQpOwotI2VuZGlmCi0KLSNpZiAxCi0JLyogZW5hYmxlIE1TSSBhZnRlciB0aGUgbGFzdCBkZXNjcmlwdG9yIGlzIGNvbXBsZXRlZCAqLwotCWlmIChhcGUtPm1zaV9lbmFibGVkKQotCQlhcGUtPnRhYmxlX3ZpcnQtPmRlc2Nbbl0udzAgfD0gY3B1X3RvX2xlMzIoMVVMIDw8IDE2KS8qbG9jYWwgTVNJKi87Ci0jZW5kaWYKLSNpZiAwCi0JLyogZHVtcCBkZXNjcmlwdG9yIHRhYmxlIGZvciBkZWJ1Z2dpbmcgKi8KLQlwcmludGsoS0VSTl9ERUJVRyAiRGVzY3JpcHRvciBUYWJsZSAoUmVhZCwgaW4gUm9vdCBDb21wbGV4IE1lbW9yeSwgIyA9ICVkKVxuIiwgbiArIDEpOwotCWZvciAoaSA9IDA7IGkgPCA0ICsgKG4gKyAxKSAqIDQ7IGkgKz0gNCkgewotCQl1MzIgKnAgPSAodTMyICopYXBlLT50YWJsZV92aXJ0OwotCQlwICs9IGk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIweCUwOHgvMHglMDJ4OiAweCUwOHggKExFTj0weCV4KVxuIiwgKHUzMilwLCAodTMyKXAgJiAxNSwgKnAsIDQgKiBsZTMyX3RvX2NwdSgqcCkpOwotCQlwKys7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIweCUwOHgvMHglMDJ4OiAweCUwOHggKEVQQT0weCV4KVxuIiwgKHUzMilwLCAodTMyKXAgJiAxNSwgKnAsIGxlMzJfdG9fY3B1KCpwKSk7Ci0JCXArKzsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIjB4JTA4eC8weCUwMng6IDB4JTA4eCAoUkNIPTB4JXgpXG4iLCAodTMyKXAsICh1MzIpcCAmIDE1LCAqcCwgbGUzMl90b19jcHUoKnApKTsKLQkJcCsrOwotCQlwcmludGsoS0VSTl9ERUJVRyAiMHglMDh4LzB4JTAyeDogMHglMDh4IChSQ0w9MHgleClcbiIsICh1MzIpcCwgKHUzMilwICYgMTUsICpwLCBsZTMyX3RvX2NwdSgqcCkpOwotCX0KLSNlbmRpZgotCS8qIHNldCBhdmFpbGFibGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHRhYmxlICovCi0JdyA9ICh1MzIpKG4gKyAxKTsKLQl3IHw9ICgxVUwgPDwgMTgpLypnbG9iYWwgRVBMQVNUX0VOKi87Ci0jaWYgMAotCWlmIChhcGUtPm1zaV9lbmFibGVkKQotCQl3IHw9ICgxVUwgPDwgMTcpLypnbG9iYWwgTVNJKi87Ci0jZW5kaWYKLQlwcmludGsoS0VSTl9ERUJVRyAid3JpdGluZyAweCUwOHggdG8gMHglcFxuIiwgdywgKHZvaWQgKikmcmVhZF9oZWFkZXItPncwKTsKLQlpb3dyaXRlMzIodywgJnJlYWRfaGVhZGVyLT53MCk7Ci0KLQkvKiB3cml0ZSB0YWJsZSBhZGRyZXNzIChoaWdoZXIgMzItYml0cykgKi8KLQlwcmludGsoS0VSTl9ERUJVRyAid3JpdGluZyAweCUwOHggdG8gMHglcFxuIiwgKHUzMikoKGFwZS0+dGFibGVfYnVzID4+IDE2KSA+PiAxNiksICh2b2lkICopJnJlYWRfaGVhZGVyLT5iZHRfYWRkcl9oKTsKLQlpb3dyaXRlMzIocGNpX2RtYV9oKGFwZS0+dGFibGVfYnVzKSwgJnJlYWRfaGVhZGVyLT5iZHRfYWRkcl9oKTsKLQotCS8qIHdyaXRlIHRhYmxlIGFkZHJlc3MgKGxvd2VyIDMyLWJpdHMpICovCi0JcHJpbnRrKEtFUk5fREVCVUcgIndyaXRpbmcgMHglMDh4IHRvIDB4JXBcbiIsICh1MzIpKGFwZS0+dGFibGVfYnVzICYgMHhmZmZmZmZmZlVMKSwgKHZvaWQgKikmcmVhZF9oZWFkZXItPmJkdF9hZGRyX2wpOwotCWlvd3JpdGUzMihwY2lfZG1hX2woYXBlLT50YWJsZV9idXMpLCAmcmVhZF9oZWFkZXItPmJkdF9hZGRyX2wpOwotCi0JLyogbWVtb3J5IHdyaXRlIGJhcnJpZXIgKi8KLQl3bWIoKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiRmx1c2ggcG9zdGVkIHdyaXRlc1xuIik7Ci0JLyoqIEZJWE1FIEFkZCBkdW1teSByZWFkIHRvIGZsdXNoIHBvc3RlZCB3cml0ZXMgYnV0IG5lZWQgYSByZWFkYWJsZSBsb2NhdGlvbiEgKi8KLSNpZiAwCi0JKHZvaWQpaW9yZWFkMzIoKTsKLSNlbmRpZgotCi0JLyogcmVtZW1iZXIgSVJRIGNvdW50IGJlZm9yZSB0aGUgdHJhbnNmZXIgKi8KLQlpcnFfY291bnQgPSBhcGUtPmlycV9jb3VudDsKLQkvKiB3cml0ZSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgLSB0aGlzIHN0YXJ0cyB0aGUgRE1BICovCi0JcHJpbnRrKEtFUk5fREVCVUcgIlxuU3RhcnQgRE1BIHJlYWRcbiIpOwotCXByaW50ayhLRVJOX0RFQlVHICJ3cml0aW5nIDB4JTA4eCB0byAweCVwXG4iLCAodTMyKW4sICh2b2lkICopJnJlYWRfaGVhZGVyLT53Myk7Ci0JaW93cml0ZTMyKG4sICZyZWFkX2hlYWRlci0+dzMpOwotCXByaW50ayhLRVJOX0RFQlVHICJFUExBU1QgPSAlbHVcbiIsIGxlMzJfdG9fY3B1KCoodTMyICopJmFwZS0+dGFibGVfdmlydC0+dzMpICYgMHhmZmZmVUwpOwotCi0JLyoqIG1lbW9yeSB3cml0ZSBiYXJyaWVyICovCi0Jd21iKCk7Ci0JLyogZHVtbXkgcmVhZCB0byBmbHVzaCBwb3N0ZWQgd3JpdGVzICovCi0JLyogRklYTUUgTmVlZCBhIHJlYWRhYmxlIGxvY2F0aW9uISAqLwotI2lmIDAKLQkodm9pZClpb3JlYWQzMigpOwotI2VuZGlmCi0JcHJpbnRrKEtFUk5fREVCVUcgIlBPTEwgRk9SIFJFQUQ6XG4iKTsKLQkvKiBwb2xsIGZvciBjaGFpbiBjb21wbGV0aW9uLCAxMDAwIHRpbWVzIDEgbWlsbGlzZWNvbmQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKLQkJdm9sYXRpbGUgdTMyICpwID0gJmFwZS0+dGFibGVfdmlydC0+dzM7Ci0JCXUzMiBlcGxhc3QgPSBsZTMyX3RvX2NwdSgqcCkgJiAweGZmZmZVTDsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkVQTEFTVCA9ICV1LCBuID0gJWRcbiIsIGVwbGFzdCwgbik7Ci0JCWlmIChlcGxhc3QgPT0gbikgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIkRPTkVcbiIpOwotCQkJLyogcHJpbnQgSVJRIGNvdW50IGJlZm9yZSB0aGUgdHJhbnNmZXIgKi8KLQkJCXByaW50ayhLRVJOX0RFQlVHICIjSVJRcyBkdXJpbmcgdHJhbnNmZXI6ICVkXG4iLCBhcGUtPmlycV9jb3VudCAtIGlycV9jb3VudCk7Ci0JCQlicmVhazsKLQkJfQotCQl1ZGVsYXkoMTAwKTsKLQl9Ci0KLQkvKiBpbnZhbGlkYXRlIEVQTEFTVCwgb3V0c2lkZSAwLTI1NSwgMHhGQURFIGlzIGZyb20gdGhlIHRlc3RiZW5jaCAqLwotCWFwZS0+dGFibGVfdmlydC0+dzMgPSBjcHVfdG9fbGUzMigweDAwMDBGQURFKTsKLQotCS8qIHNldHVwIGZpcnN0IGRlc2NyaXB0b3IgKi8KLQluID0gMDsKLQlhcGVfY2hkbWFfZGVzY19zZXQoJmFwZS0+dGFibGVfdmlydC0+ZGVzY1tuXSwgYnVmZmVyX2J1cyArIDgxOTIsIDQwOTYsIDIgKiBQQUdFX1NJWkUpOwotI2lmIDEKLQlmb3IgKGkgPSAwOyBpIDwgMjU1OyBpKyspCi0JCWFwZV9jaGRtYV9kZXNjX3NldCgmYXBlLT50YWJsZV92aXJ0LT5kZXNjW2ldLCBidWZmZXJfYnVzICsgODE5MiwgNDA5NiwgMiAqIFBBR0VfU0laRSk7Ci0KLQkvKiBpbmRleCBvZiBsYXN0IGRlc2NyaXB0b3IgKi8KLQluID0gaSAtIDE7Ci0jZW5kaWYKLSNpZiAxIC8qIHRlc3QgdmFyaWFibGUsIG1ha2UgYSBtb2R1bGUgb3B0aW9uIGxhdGVyICovCi0JaWYgKGFwZS0+bXNpX2VuYWJsZWQpCi0JCWFwZS0+dGFibGVfdmlydC0+ZGVzY1tuXS53MCB8PSBjcHVfdG9fbGUzMigxVUwgPDwgMTYpLypsb2NhbCBNU0kqLzsKLSNlbmRpZgotI2lmIDAKLQkvKiBkdW1wIGRlc2NyaXB0b3IgdGFibGUgZm9yIGRlYnVnZ2luZyAqLwotCXByaW50ayhLRVJOX0RFQlVHICJEZXNjcmlwdG9yIFRhYmxlIChXcml0ZSwgaW4gUm9vdCBDb21wbGV4IE1lbW9yeSwgIyA9ICVkKVxuIiwgbiArIDEpOwotCWZvciAoaSA9IDA7IGkgPCA0ICsgKG4gKyAxKSAqIDQ7IGkgKz0gNCkgewotCQl1MzIgKnAgPSAodTMyICopYXBlLT50YWJsZV92aXJ0OwotCQlwICs9IGk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIweCUwOHgvMHglMDJ4OiAweCUwOHggKExFTj0weCV4KVxuIiwgKHUzMilwLCAodTMyKXAgJiAxNSwgKnAsIDQgKiBsZTMyX3RvX2NwdSgqcCkpOwotCQlwKys7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIweCUwOHgvMHglMDJ4OiAweCUwOHggKEVQQT0weCV4KVxuIiwgKHUzMilwLCAodTMyKXAgJiAxNSwgKnAsIGxlMzJfdG9fY3B1KCpwKSk7Ci0JCXArKzsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIjB4JTA4eC8weCUwMng6IDB4JTA4eCAoUkNIPTB4JXgpXG4iLCAodTMyKXAsICh1MzIpcCAmIDE1LCAqcCwgbGUzMl90b19jcHUoKnApKTsKLQkJcCsrOwotCQlwcmludGsoS0VSTl9ERUJVRyAiMHglMDh4LzB4JTAyeDogMHglMDh4IChSQ0w9MHgleClcbiIsICh1MzIpcCwgKHUzMilwICYgMTUsICpwLCBsZTMyX3RvX2NwdSgqcCkpOwotCX0KLSNlbmRpZgotCi0JLyogc2V0IG51bWJlciBvZiBhdmFpbGFibGUgZGVzY3JpcHRvcnMgaW4gdGhlIHRhYmxlICovCi0JdyA9ICh1MzIpKG4gKyAxKTsKLQkvKiBlbmFibGUgdXBkYXRlcyBvZiBlcGxhc3QgZm9yIGVhY2ggZGVzY3JpcHRvciBjb21wbGV0aW9uICovCi0JdyB8PSAodTMyKSgxVUwgPDwgMTgpLypnbG9iYWwgRVBMQVNUX0VOKi87Ci0jaWYgMCAgIC8qIHRlc3QgdmFyaWFibGUsIG1ha2UgYSBtb2R1bGUgb3B0aW9uIGxhdGVyICovCi0JLyogZW5hYmxlIE1TSSBmb3IgZWFjaCBkZXNjcmlwdG9yIGNvbXBsZXRpb24gKi8KLQlpZiAoYXBlLT5tc2lfZW5hYmxlZCkKLQkJdyB8PSAoMVVMIDw8IDE3KS8qZ2xvYmFsIE1TSSovOwotI2VuZGlmCi0JaW93cml0ZTMyKHcsICZ3cml0ZV9oZWFkZXItPncwKTsKLQlpb3dyaXRlMzIocGNpX2RtYV9oKGFwZS0+dGFibGVfYnVzKSwgJndyaXRlX2hlYWRlci0+YmR0X2FkZHJfaCk7Ci0JaW93cml0ZTMyKHBjaV9kbWFfbChhcGUtPnRhYmxlX2J1cyksICZ3cml0ZV9oZWFkZXItPmJkdF9hZGRyX2wpOwotCi0JLyoqIG1lbW9yeSB3cml0ZSBiYXJyaWVyIGFuZCBmbHVzaCBwb3N0ZWQgd3JpdGVzICovCi0Jd21iKCk7Ci0JLyogZHVtbXkgcmVhZCB0byBmbHVzaCBwb3N0ZWQgd3JpdGVzICovCi0JLyogRklYTUUgTmVlZCBhIHJlYWRhYmxlIGxvY2F0aW9uISAqLwotI2lmIDAKLQkodm9pZClpb3JlYWQzMigpOwotI2VuZGlmCi0JaXJxX2NvdW50ID0gYXBlLT5pcnFfY291bnQ7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiXG5TdGFydCBETUEgd3JpdGVcbiIpOwotCWlvd3JpdGUzMihuLCAmd3JpdGVfaGVhZGVyLT53Myk7Ci0KLQkvKiogbWVtb3J5IHdyaXRlIGJhcnJpZXIgKi8KLQl3bWIoKTsKLQkvKiogZHVtbXkgcmVhZCB0byBmbHVzaCBwb3N0ZWQgd3JpdGVzICovCi0JLyogKHZvaWQpIGlvcmVhZDMyKCk7ICovCi0KLQlwcmludGsoS0VSTl9ERUJVRyAiUE9MTCBGT1IgV1JJVEU6XG4iKTsKLQkvKiBwb2xsIGZvciBjb21wbGV0aW9uLCAxMDAwIHRpbWVzIDEgbWlsbGlzZWNvbmQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKLQkJdm9sYXRpbGUgdTMyICpwID0gJmFwZS0+dGFibGVfdmlydC0+dzM7Ci0JCXUzMiBlcGxhc3QgPSBsZTMyX3RvX2NwdSgqcCkgJiAweGZmZmZVTDsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkVQTEFTVCA9ICV1LCBuID0gJWRcbiIsIGVwbGFzdCwgbik7Ci0JCWlmIChlcGxhc3QgPT0gbikgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIkRPTkVcbiIpOwotCQkJLyogcHJpbnQgSVJRIGNvdW50IGJlZm9yZSB0aGUgdHJhbnNmZXIgKi8KLQkJCXByaW50ayhLRVJOX0RFQlVHICIjSVJRcyBkdXJpbmcgdHJhbnNmZXI6ICVkXG4iLCBhcGUtPmlycV9jb3VudCAtIGlycV9jb3VudCk7Ci0JCQlicmVhazsKLQkJfQotCQl1ZGVsYXkoMTAwKTsKLQl9Ci0JLyogc29mdC1yZXNldCBETUEgd3JpdGUgZW5naW5lICovCi0JaW93cml0ZTMyKDB4MDAwMGZmZmZVTCwgJndyaXRlX2hlYWRlci0+dzApOwotCS8qIHNvZnQtcmVzZXQgRE1BIHJlYWQgZW5naW5lICovCi0JaW93cml0ZTMyKDB4MDAwMGZmZmZVTCwgJnJlYWRfaGVhZGVyLT53MCk7Ci0KLQkvKiogbWVtb3J5IHdyaXRlIGJhcnJpZXIgKi8KLQl3bWIoKTsKLQkvKiBkdW1teSByZWFkIHRvIGZsdXNoIHBvc3RlZCB3cml0ZXMgKi8KLQkvKiBGSVhNRSBOZWVkIGEgcmVhZGFibGUgbG9jYXRpb24hICovCi0jaWYgMAotCSh2b2lkKWlvcmVhZDMyKCk7Ci0jZW5kaWYKLQkvKiBjb21wYXJlIGZpcnN0IGhhbGYgb2YgYnVmZmVyIHdpdGggc2Vjb25kIGhhbGYsIHNob3VsZCBiZSBpZGVudGljYWwgKi8KLQlyZXN1bHQgPSBjb21wYXJlKCh1MzIgKilidWZmZXJfdmlydCwgKHUzMiAqKShidWZmZXJfdmlydCArIDIgKiBQQUdFX1NJWkUpLCA4MTkyKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiRE1BIGxvb3AgYmFjayB0ZXN0ICVzLlxuIiwgcmVzdWx0ID8gIkZBSUxFRCIgOiAiUEFTU0VEIik7Ci0KLQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldiwgNCAqIFBBR0VfU0laRSwgYnVmZmVyX3ZpcnQsIGJ1ZmZlcl9idXMpOwotZmFpbDoKLQlwcmludGsoS0VSTl9ERUJVRyAiYmFyX3Rlc3RzKCkgZW5kLCByZXN1bHQgJWRcbiIsIHJlc3VsdCk7Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotLyogQ2FsbGVkIHdoZW4gdGhlIFBDSSBzdWIgc3lzdGVtIHRoaW5rcyB3ZSBjYW4gY29udHJvbCB0aGUgZ2l2ZW4gZGV2aWNlLgotICogSW5zcGVjdCBpZiB3ZSBjYW4gc3VwcG9ydCB0aGUgZGV2aWNlIGFuZCBpZiBzbyB0YWtlIGNvbnRyb2wgb2YgaXQuCi0gKgotICogUmV0dXJuIDAgd2hlbiB3ZSBoYXZlIHRha2VuIGNvbnRyb2wgb2YgdGhlIGdpdmVuIGRldmljZS4KLSAqCi0gKiAtIGFsbG9jYXRlIGJvYXJkIHNwZWNpZmljIGJvb2trZWVwaW5nCi0gKiAtIGFsbG9jYXRlIGNvaGVyZW50bHktbWFwcGVkIG1lbW9yeSBmb3IgdGhlIGRlc2NyaXB0b3IgdGFibGUKLSAqIC0gZW5hYmxlIHRoZSBib2FyZAotICogLSB2ZXJpZnkgYm9hcmQgcmV2aXNpb24KLSAqIC0gcmVxdWVzdCByZWdpb25zCi0gKiAtIHF1ZXJ5IERNQSBtYXNrCi0gKiAtIG9idGFpbiBhbmQgcmVxdWVzdCBpcnEKLSAqIC0gbWFwIHJlZ2lvbnMgaW50byBrZXJuZWwgYWRkcmVzcyBzcGFjZQotICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCi17Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgYXBlX2RldiAqYXBlID0gTlVMTDsKLQl1OCBpcnFfcGluLCBpcnFfbGluZTsKLQlwcmludGsoS0VSTl9ERUJVRyAicHJvYmUoZGV2ID0gMHglcCwgcGNpaWQgPSAweCVwKVxuIiwgZGV2LCBpZCk7Ci0KLQkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBlci1ib2FyZCBib29rIGtlZXBpbmcgKi8KLQlhcGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXBlX2RldiksIEdGUF9LRVJORUwpOwotCWlmICghYXBlKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJDb3VsZCBub3Qga3phbGxvYygpYXRlIG1lbW9yeS5cbiIpOwotCQlnb3RvIGVycl9hcGU7Ci0JfQotCWFwZS0+cGNpX2RldiA9IGRldjsKLQlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBhcGUpOwotCXByaW50ayhLRVJOX0RFQlVHICJwcm9iZSgpIGFwZSA9IDB4JXBcbiIsIGFwZSk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAic2l6ZW9mKHN0cnVjdCBhcGVfY2hkbWFfdGFibGUpID0gJWQuXG4iLAotCQkoaW50KXNpemVvZihzdHJ1Y3QgYXBlX2NoZG1hX3RhYmxlKSk7Ci0JLyogdGhlIHJlZmVyZW5jZSBkZXNpZ24gaGFzIGEgc2l6ZSByZXN0cmljdGlvbiBvbiB0aGUgdGFibGUgc2l6ZSAqLwotCUJVR19PTihzaXplb2Yoc3RydWN0IGFwZV9jaGRtYV90YWJsZSkgPiBBUEVfQ0hETUFfVEFCTEVfU0laRSk7Ci0KLQkvKiBhbGxvY2F0ZSBhbmQgbWFwIGNvaGVyZW50bHktY2FjaGVkIG1lbW9yeSBmb3IgYSBkZXNjcmlwdG9yIHRhYmxlICovCi0JLyogQHNlZSBMREQzIHBhZ2UgNDQ2ICovCi0JYXBlLT50YWJsZV92aXJ0ID0gKHN0cnVjdCBhcGVfY2hkbWFfdGFibGUgKilwY2lfYWxsb2NfY29uc2lzdGVudChkZXYsCi0JCUFQRV9DSERNQV9UQUJMRV9TSVpFLCAmYXBlLT50YWJsZV9idXMpOwotCS8qIGNvdWxkIG5vdCBhbGxvY2F0ZSB0YWJsZT8gKi8KLQlpZiAoIWFwZS0+dGFibGVfdmlydCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IGRtYV9hbGxvYygpYXRlX2NvaGVyZW50IG1lbW9yeS5cbiIpOwotCQlnb3RvIGVycl90YWJsZTsKLQl9Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAidGFibGVfdmlydCA9ICVwLCB0YWJsZV9idXMgPSAweCUxNmxseC5cbiIsCi0JCWFwZS0+dGFibGVfdmlydCwgKHU2NClhcGUtPnRhYmxlX2J1cyk7Ci0KLQkvKiBlbmFibGUgZGV2aWNlICovCi0JcmMgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOwotCWlmIChyYykgewotCQlwcmludGsoS0VSTl9ERUJVRyAicGNpX2VuYWJsZV9kZXZpY2UoKSBmYWlsZWRcbiIpOwotCQlnb3RvIGVycl9lbmFibGU7Ci0JfQotCi0JLyogZW5hYmxlIGJ1cyBtYXN0ZXIgY2FwYWJpbGl0eSBvbiBkZXZpY2UgKi8KLQlwY2lfc2V0X21hc3RlcihkZXYpOwotCS8qIGVuYWJsZSBtZXNzYWdlIHNpZ25hbGVkIGludGVycnVwdHMgKi8KLQlyYyA9IHBjaV9lbmFibGVfbXNpKGRldik7Ci0JLyogY291bGQgbm90IHVzZSBNU0k/ICovCi0JaWYgKHJjKSB7Ci0JCS8qIHJlc29ydCB0byBsZWdhY3kgaW50ZXJydXB0cyAqLwotCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IGVuYWJsZSBNU0kgaW50ZXJydXB0aW5nLlxuIik7Ci0JCWFwZS0+bXNpX2VuYWJsZWQgPSAwOwotCS8qIE1TSSBlbmFibGVkLCByZW1lbWJlciBmb3IgY2xlYW51cCAqLwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJFbmFibGVkIE1TSSBpbnRlcnJ1cHRpbmcuXG4iKTsKLQkJYXBlLT5tc2lfZW5hYmxlZCA9IDE7Ci0JfQotCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZhcGUtPnJldmlzaW9uKTsKLSNpZiAwIC8qIGV4YW1wbGUgKi8KLQkvKiAoZm9yIGV4YW1wbGUpIHRoaXMgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgcmV2aXNpb24gMHg0MiAqLwotICAgIGlmIChhcGUtPnJldmlzaW9uID09IDB4NDIpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlJldmlzaW9uIDB4NDIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlci5cbiIpOwotCQlyYyA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyX3JldjsKLQl9Ci0jZW5kaWYKLQkvKiogWFhYIGNoZWNrIGZvciBuYXRpdmUgb3IgbGVnYWN5IFBDSWUgZW5kcG9pbnQ/ICovCi0KLQlyYyA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCBEUlZfTkFNRSk7Ci0JLyogY291bGQgbm90IHJlcXVlc3QgYWxsIHJlZ2lvbnM/ICovCi0JaWYgKHJjKSB7Ci0JCS8qIGFzc3VtZSBkZXZpY2UgaXMgaW4gdXNlIChhbmQgZG8gbm90IGRpc2FibGUgaXQgbGF0ZXIhKSAqLwotCQlhcGUtPmluX3VzZSA9IDE7Ci0JCWdvdG8gZXJyX3JlZ2lvbnM7Ci0JfQotCWFwZS0+Z290X3JlZ2lvbnMgPSAxOwotCi0jaWYgMSAgIC8qIEB0b2RvIEZvciBub3csIGRpc2FibGUgNjQtYml0LCBiZWNhdXNlIEkgZG8gbm90IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyAoREFDISkgKi8KLQkvKiBxdWVyeSBmb3IgRE1BIHRyYW5zZmVyICovCi0JLyogQHNlZSBEb2N1bWVudGF0aW9uL1BDSS9QQ0ktRE1BLW1hcHBpbmcudHh0ICovCi0JaWYgKCFwY2lfc2V0X2RtYV9tYXNrKGRldiwgRE1BX0JJVF9NQVNLKDY0KSkpIHsKLQkJcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKGRldiwgRE1BX0JJVF9NQVNLKDY0KSk7Ci0JCS8qIHVzZSA2NC1iaXQgRE1BICovCi0JCXByaW50ayhLRVJOX0RFQlVHICJVc2luZyBhIDY0LWJpdCBETUEgbWFzay5cbiIpOwotCX0gZWxzZQotI2VuZGlmCi0JaWYgKCFwY2lfc2V0X2RtYV9tYXNrKGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkNvdWxkIG5vdCBzZXQgNjQtYml0IERNQSBtYXNrLlxuIik7Ci0JCXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhkZXYsIERNQV9CSVRfTUFTSygzMikpOwotCQkvKiB1c2UgMzItYml0IERNQSAqLwotCQlwcmludGsoS0VSTl9ERUJVRyAiVXNpbmcgYSAzMi1iaXQgRE1BIG1hc2suXG4iKTsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9ERUJVRyAiTm8gc3VpdGFibGUgRE1BIHBvc3NpYmxlLlxuIik7Ci0JCS8qKiBAdG9kbyBDaG9vc2UgcHJvcGVyIGVycm9yIHJldHVybiBjb2RlICovCi0JCXJjID0gLTE7Ci0JCWdvdG8gZXJyX21hc2s7Ci0JfQotCi0JcmMgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9JTlRFUlJVUFRfUElOLCAmaXJxX3Bpbik7Ci0JLyogY291bGQgbm90IHJlYWQ/ICovCi0JaWYgKHJjKQotCQlnb3RvIGVycl9pcnE7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIklSUSBwaW4gIyVkICgwPW5vbmUsIDE9SU5UQSMuLi40PUlOVEQjKS5cbiIsIGlycV9waW4pOwotCi0JLyogQHNlZSBMREQzLCBwYWdlIDMxOCAqLwotCXJjID0gcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsICZpcnFfbGluZSk7Ci0JLyogY291bGQgbm90IHJlYWQ/ICovCi0JaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJDb3VsZCBub3QgcXVlcnkgUENJX0lOVEVSUlVQVF9MSU5FLCBlcnJvciAlZFxuIiwgcmMpOwotCQlnb3RvIGVycl9pcnE7Ci0JfQotCXByaW50ayhLRVJOX0RFQlVHICJJUlEgbGluZSAjJWQuXG4iLCBpcnFfbGluZSk7Ci0jaWYgMQotCWlycV9saW5lID0gZGV2LT5pcnE7Ci0JLyogQHNlZSBMREQzLCBwYWdlIDI1OSAqLwotCXJjID0gcmVxdWVzdF9pcnEoaXJxX2xpbmUsIGFsdHBjaWVjaGRtYV9pc3IsIElSUUZfU0hBUkVELCBEUlZfTkFNRSwgKHZvaWQgKilhcGUpOwotCWlmIChyYykgewotCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IHJlcXVlc3QgSVJRICMlZCwgZXJyb3IgJWRcbiIsIGlycV9saW5lLCByYyk7Ci0JCWFwZS0+aXJxX2xpbmUgPSAtMTsKLQkJZ290byBlcnJfaXJxOwotCX0KLQkvKiByZW1lbWJlciB3aGljaCBpcnEgd2UgYWxsb2NhdGVkICovCi0JYXBlLT5pcnFfbGluZSA9IChpbnQpaXJxX2xpbmU7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIlN1Y2Nlc2Z1bGx5IHJlcXVlc3RlZCBJUlEgIyVkIHdpdGggZGV2X2lkIDB4JXBcbiIsIGlycV9saW5lLCBhcGUpOwotI2VuZGlmCi0JLyogc2hvdyBCQVJzICovCi0Jc2Nhbl9iYXJzKGFwZSwgZGV2KTsKLQkvKiBtYXAgQkFScyAqLwotCXJjID0gbWFwX2JhcnMoYXBlLCBkZXYpOwotCWlmIChyYykKLQkJZ290byBlcnJfbWFwOwotI2lmIEFMVFBDSUVDSERNQV9DREVWCi0JLyogaW5pdGlhbGl6ZSBjaGFyYWN0ZXIgZGV2aWNlICovCi0JcmMgPSBzZ19pbml0KGFwZSk7Ci0JaWYgKHJjKQotCQlnb3RvIGVycl9jZGV2OwotI2VuZGlmCi0JLyogcGVyZm9ybSBETUEgZW5naW5lcyBsb29wIGJhY2sgdGVzdCAqLwotCXJjID0gZG1hX3Rlc3QoYXBlLCBkZXYpOwotCSh2b2lkKXJjOwotCS8qIHN1Y2Nlc3NmdWxseSB0b29rIHRoZSBkZXZpY2UgKi8KLQlyYyA9IDA7Ci0JcHJpbnRrKEtFUk5fREVCVUcgInByb2JlKCkgc3VjY2Vzc2Z1bC5cbiIpOwotCWdvdG8gZW5kOwotI2lmIEFMVFBDSUVDSERNQV9DREVWCi1lcnJfY2RldjoKLQkvKiB1bm1hcCB0aGUgQkFScyAqLwotCXVubWFwX2JhcnMoYXBlLCBkZXYpOwotI2VuZGlmCi1lcnJfbWFwOgotCS8qIGZyZWUgYWxsb2NhdGVkIGlycSAqLwotCWlmIChhcGUtPmlycV9saW5lID49IDApCi0JCWZyZWVfaXJxKGFwZS0+aXJxX2xpbmUsICh2b2lkICopYXBlKTsKLWVycl9pcnE6Ci0JaWYgKGFwZS0+bXNpX2VuYWJsZWQpCi0JCXBjaV9kaXNhYmxlX21zaShkZXYpOwotCS8qIGRpc2FibGUgdGhlIGRldmljZSBpZmYgaXQgaXMgbm90IGluIHVzZSAqLwotCWlmICghYXBlLT5pbl91c2UpCi0JCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwotCWlmIChhcGUtPmdvdF9yZWdpb25zKQotCQlwY2lfcmVsZWFzZV9yZWdpb25zKGRldik7Ci1lcnJfbWFzazoKLWVycl9yZWdpb25zOgotLyplcnJfcmV2OiovCi0vKiBjbGVhbiB1cCBldmVyeXRoaW5nIGJlZm9yZSBkZXZpY2UgZW5hYmxlKCkgKi8KLWVycl9lbmFibGU6Ci0JaWYgKGFwZS0+dGFibGVfdmlydCkKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYsIEFQRV9DSERNQV9UQUJMRV9TSVpFLCBhcGUtPnRhYmxlX3ZpcnQsIGFwZS0+dGFibGVfYnVzKTsKLS8qIGNsZWFuIHVwIGV2ZXJ5dGhpbmcgYmVmb3JlIGFsbG9jYXRpbmcgZGVzY3JpcHRvciB0YWJsZSAqLwotZXJyX3RhYmxlOgotCWlmIChhcGUpCi0JCWtmcmVlKGFwZSk7Ci1lcnJfYXBlOgotZW5kOgotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgX19kZXZleGl0IHJlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXN0cnVjdCBhcGVfZGV2ICphcGUgPSBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTsKLQotCXByaW50ayhLRVJOX0RFQlVHICJyZW1vdmUoMHglcClcbiIsIGRldik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgInJlbW92ZShkZXYgPSAweCVwKSB3aGVyZSBhcGUgPSAweCVwXG4iLCBkZXYsIGFwZSk7Ci0KLQkvKiByZW1vdmUgY2hhcmFjdGVyIGRldmljZSAqLwotI2lmIEFMVFBDSUVDSERNQV9DREVWCi0Jc2dfZXhpdChhcGUpOwotI2VuZGlmCi0KLQlpZiAoYXBlLT50YWJsZV92aXJ0KQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldiwgQVBFX0NIRE1BX1RBQkxFX1NJWkUsIGFwZS0+dGFibGVfdmlydCwgYXBlLT50YWJsZV9idXMpOwotCi0JLyogZnJlZSBJUlEKLQkgKiBAc2VlIExERDMgcGFnZSAyNzkKLQkgKi8KLQlpZiAoYXBlLT5pcnFfbGluZSA+PSAwKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJGcmVlaW5nIElSUSAjJWQgZm9yIGRldl9pZCAweCUwOGx4LlxuIiwKLQkJYXBlLT5pcnFfbGluZSwgKHVuc2lnbmVkIGxvbmcpYXBlKTsKLQkJZnJlZV9pcnEoYXBlLT5pcnFfbGluZSwgKHZvaWQgKilhcGUpOwotCX0KLQkvKiBNU0kgd2FzIGVuYWJsZWQ/ICovCi0JaWYgKGFwZS0+bXNpX2VuYWJsZWQpIHsKLQkJLyogRGlzYWJsZSBNU0kgQHNlZSBEb2N1bWVudGF0aW9uL01TSS1IT1dUTy50eHQgKi8KLQkJcGNpX2Rpc2FibGVfbXNpKGRldik7Ci0JCWFwZS0+bXNpX2VuYWJsZWQgPSAwOwotCX0KLQkvKiB1bm1hcCB0aGUgQkFScyAqLwotCXVubWFwX2JhcnMoYXBlLCBkZXYpOwotCWlmICghYXBlLT5pbl91c2UpCi0JCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwotCWlmIChhcGUtPmdvdF9yZWdpb25zKQotCQkvKiB0byBiZSBjYWxsZWQgYWZ0ZXIgZGV2aWNlIGRpc2FibGUgKi8KLQkJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYpOwotfQotCi0jaWYgQUxUUENJRUNIRE1BX0NERVYKLQotLyoKLSAqIENhbGxlZCB3aGVuIHRoZSBkZXZpY2UgZ29lcyBmcm9tIHVudXNlZCB0byB1c2VkLgotICovCi1zdGF0aWMgaW50IHNnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IGFwZV9kZXYgKmFwZTsKLQlwcmludGsoS0VSTl9ERUJVRyBEUlZfTkFNRSAiX29wZW4oKVxuIik7Ci0JLyogcG9pbnRlciB0byBjb250YWluaW5nIGRhdGEgc3RydWN0dXJlIG9mIHRoZSBjaGFyYWN0ZXIgZGV2aWNlIGlub2RlICovCi0JYXBlID0gY29udGFpbmVyX29mKGlub2RlLT5pX2NkZXYsIHN0cnVjdCBhcGVfZGV2LCBjZGV2KTsKLQkvKiBjcmVhdGUgYSByZWZlcmVuY2UgdG8gb3VyIGRldmljZSBzdGF0ZSBpbiB0aGUgb3BlbmVkIGZpbGUgKi8KLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBhcGU7Ci0JLyogY3JlYXRlIHZpcnR1YWwgbWVtb3J5IG1hcHBlciAqLwotCWFwZS0+c2dtID0gc2dfY3JlYXRlX21hcHBlcihNQVhfQ0hETUFfU0laRSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBDYWxsZWQgd2hlbiB0aGUgZGV2aWNlIGdvZXMgZnJvbSB1c2VkIHRvIHVudXNlZC4KLSAqLwotc3RhdGljIGludCBzZ19jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQkvKiBmZXRjaCBkZXZpY2Ugc3BlY2lmaWMgZGF0YSBzdG9yZWQgZWFybGllciBkdXJpbmcgb3BlbiAqLwotCXN0cnVjdCBhcGVfZGV2ICphcGUgPSAoc3RydWN0IGFwZV9kZXYgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0JcHJpbnRrKEtFUk5fREVCVUcgRFJWX05BTUUgIl9jbG9zZSgpXG4iKTsKLQkvKiBkZXN0cm95IHZpcnR1YWwgbWVtb3J5IG1hcHBlciAqLwotCXNnX2Rlc3Ryb3lfbWFwcGVyKGFwZS0+c2dtKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2dfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKLXsKLQkvKiBmZXRjaCBkZXZpY2Ugc3BlY2lmaWMgZGF0YSBzdG9yZWQgZWFybGllciBkdXJpbmcgb3BlbiAqLwotCXN0cnVjdCBhcGVfZGV2ICphcGUgPSAoc3RydWN0IGFwZV9kZXYgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0JKHZvaWQpYXBlOwotCXByaW50ayhLRVJOX0RFQlVHIERSVl9OQU1FICJfcmVhZChidWY9MHglcCwgY291bnQ9JWxsZCwgcG9zPSVsbHUpXG4iLCBidWYsIChzNjQpY291bnQsICh1NjQpKnBvcyk7Ci0JcmV0dXJuIGNvdW50OwotfQotCi0vKiBzZ193cml0ZSgpIC0gV3JpdGUgdG8gdGhlIGRldmljZQotICoKLSAqIEBidWYgdXNlcnNwYWNlIGJ1ZmZlcgotICogQGNvdW50IG51bWJlciBvZiBieXRlcyBpbiB0aGUgdXNlcnNwYWNlIGJ1ZmZlcgotICoKLSAqIEl0ZXJhdGUgb3ZlciB0aGUgdXNlcnNwYWNlIGJ1ZmZlciwgdGFraW5nIGF0IG1vc3QgMjU1ICogUEFHRV9TSVpFIGJ5dGVzIGZvcgotICogZWFjaCBETUEgdHJhbnNmZXIuCi0gKiAgIEZvciBlYWNoIHRyYW5zZmVyLCBnZXQgdGhlIHVzZXIgcGFnZXMsIGJ1aWxkIGEgc2dsaXN0LCBtYXAsIGJ1aWxkIGEKLSAqICAgZGVzY3JpcHRvciB0YWJsZS4gc3VibWl0IHRoZSB0cmFuc2Zlci4gd2FpdCBmb3IgdGhlIGludGVycnVwdCBoYW5kbGVyCi0gKiAgIHRvIHdha2UgdXMgb24gY29tcGxldGlvbi4KLSAqLwotc3RhdGljIHNzaXplX3Qgc2dfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCi17Ci0JaW50IGh3bmVudHMsIHRlbnRzOwotCXNpemVfdCB0cmFuc2Zlcl9sZW4sIHJlbWFpbmluZyA9IGNvdW50LCBkb25lID0gMDsKLQl1NjQgdHJhbnNmZXJfYWRkciA9ICh1NjQpYnVmOwotCS8qIGZldGNoIGRldmljZSBzcGVjaWZpYyBkYXRhIHN0b3JlZCBlYXJsaWVyIGR1cmluZyBvcGVuICovCi0Jc3RydWN0IGFwZV9kZXYgKmFwZSA9IChzdHJ1Y3QgYXBlX2RldiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlwcmludGsoS0VSTl9ERUJVRyBEUlZfTkFNRSAiX3dyaXRlKGJ1Zj0weCVwLCBjb3VudD0lbGxkLCBwb3M9JWxsdSlcbiIsCi0JCWJ1ZiwgKHM2NCljb3VudCwgKHU2NCkqcG9zKTsKLQkvKiBUT0RPIHRyYW5zZmVyIGJvdW5kYXJpZXMgYXQgUEFHRV9TSVpFIGdyYW51bGFyaXR5ICovCi0Jd2hpbGUgKHJlbWFpbmluZyA+IDApIHsKLQkJLyogbGltaXQgRE1BIHRyYW5zZmVyIHNpemUgKi8KLQkJdHJhbnNmZXJfbGVuID0gKHJlbWFpbmluZyA8IEFQRV9DSERNQV9NQVhfVFJBTlNGRVJfTEVOKSA/IHJlbWFpbmluZyA6Ci0JCQlBUEVfQ0hETUFfTUFYX1RSQU5TRkVSX0xFTjsKLQkJLyogZ2V0IGFsbCB1c2VyIHNwYWNlIGJ1ZmZlciBwYWdlcyBhbmQgY3JlYXRlIGEgc2NhdHRlcmdhdGhlciBsaXN0ICovCi0JCXNnbV9tYXBfdXNlcl9wYWdlcyhhcGUtPnNnbSwgdHJhbnNmZXJfYWRkciwgdHJhbnNmZXJfbGVuLCAwLypyZWFkIGZyb20gdXNlcnNwYWNlKi8pOwotCQlwcmludGsoS0VSTl9ERUJVRyBEUlZfTkFNRSAibWFwcGVkX3BhZ2VzPSVkXG4iLCBhcGUtPnNnbS0+bWFwcGVkX3BhZ2VzKTsKLQkJLyogbWFwIGFsbCBlbnRyaWVzIGluIHRoZSBzY2F0dGVyZ2F0aGVyIGxpc3QgKi8KLQkJaHduZW50cyA9IHBjaV9tYXBfc2coYXBlLT5wY2lfZGV2LCBhcGUtPnNnbS0+c2dsLCBhcGUtPnNnbS0+bWFwcGVkX3BhZ2VzLCBETUFfVE9fREVWSUNFKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgRFJWX05BTUUgImh3bmVudHM9JWRcbiIsIGh3bmVudHMpOwotCQkvKiBidWlsZCBkZXZpY2UgZGVzY3JpcHRvciB0YWJsZXMgYW5kIHN1Ym1pdCB0aGVtIHRvIHRoZSBETUEgZW5naW5lICovCi0JCXRlbnRzID0gYXBlX3NnX3RvX2NoZG1hX3RhYmxlKGFwZS0+c2dtLT5zZ2wsIGh3bmVudHMsIDAsICZhcGUtPnRhYmxlX3ZpcnQtPmRlc2NbMF0sIDQwOTYpOwotCQlwcmludGsoS0VSTl9ERUJVRyBEUlZfTkFNRSAidGVudHM9JWRcbiIsIGh3bmVudHMpOwotI2lmIDAKLQkJd2hpbGUgKHRhYmxlcykgewotCQkJLyogVE9ETyBidWlsZCB0YWJsZSAqLwotCQkJLyogVE9ETyBzdWJtaXQgdGFibGUgdG8gdGhlIGRldmljZSAqLwotCQkJLyogaWYgZW5naW5lIHN0b3BwZWQgYW5kIHVuZmluaXNoZWQgd29yayB0aGVuIHN0YXJ0IGVuZ2luZSAqLwotCQl9Ci0JCXB1dCBvdXJzZWx2ZXMgb24gd2FpdCBxdWV1ZQotI2VuZGlmCi0KLQkJZG1hX3VubWFwX3NnKE5VTEwsIGFwZS0+c2dtLT5zZ2wsIGFwZS0+c2dtLT5tYXBwZWRfcGFnZXMsIERNQV9UT19ERVZJQ0UpOwotCQkvKiBkaXJ0eSBhbmQgZnJlZSB0aGUgcGFnZXMgKi8KLQkJc2dtX3VubWFwX3VzZXJfcGFnZXMoYXBlLT5zZ20sIDEvKmRpcnRpZWQqLyk7Ci0JCS8qIGJvb2sga2VlcGluZyAqLwotCQl0cmFuc2Zlcl9hZGRyICs9IHRyYW5zZmVyX2xlbjsKLQkJcmVtYWluaW5nIC09IHRyYW5zZmVyX2xlbjsKLQkJZG9uZSArPSB0cmFuc2Zlcl9sZW47Ci0JfQotCXJldHVybiBkb25lOwotfQotCi0vKgotICogY2hhcmFjdGVyIGRldmljZSBmaWxlIG9wZXJhdGlvbnMKLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2dfZm9wcyA9IHsKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkub3BlbiA9IHNnX29wZW4sCi0JLnJlbGVhc2UgPSBzZ19jbG9zZSwKLQkucmVhZCA9IHNnX3JlYWQsCi0JLndyaXRlID0gc2dfd3JpdGUsCi19OwotCi0vKiBzZ19pbml0KCkgLSBJbml0aWFsaXplIGNoYXJhY3RlciBkZXZpY2UKLSAqCi0gKiBYWFggU2hvdWxkIGlkZWFsbHkgYmUgdGllZCB0byB0aGUgZGV2aWNlLCBvbiBkZXZpY2UgcHJvYmUsIG5vdCBtb2R1bGUgaW5pdC4KLSAqLwotc3RhdGljIGludCBzZ19pbml0KHN0cnVjdCBhcGVfZGV2ICphcGUpCi17Ci0JaW50IHJjOwotCXByaW50ayhLRVJOX0RFQlVHIERSVl9OQU1FICIgc2dfaW5pdCgpXG4iKTsKLQkvKiBhbGxvY2F0ZSBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUgKi8KLQlyYyA9IGFsbG9jX2NocmRldl9yZWdpb24oJmFwZS0+Y2Rldm5vLCAwLypyZXF1ZXN0ZWQgbWlub3IqLywgMS8qY291bnQqLywgRFJWX05BTUUpOwotCS8qIGFsbG9jYXRpb24gZmFpbGVkPyAqLwotCWlmIChyYyA8IDApIHsKLQkJcHJpbnRrKCJhbGxvY19jaHJkZXZfcmVnaW9uKCkgPSAlZFxuIiwgcmMpOwotCQlnb3RvIGZhaWxfYWxsb2M7Ci0JfQotCS8qIGNvdXBsZSB0aGUgZGV2aWNlIGZpbGUgb3BlcmF0aW9ucyB0byB0aGUgY2hhcmFjdGVyIGRldmljZSAqLwotCWNkZXZfaW5pdCgmYXBlLT5jZGV2LCAmc2dfZm9wcyk7Ci0JYXBlLT5jZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7Ci0JLyogYnJpbmcgY2hhcmFjdGVyIGRldmljZSBsaXZlICovCi0JcmMgPSBjZGV2X2FkZCgmYXBlLT5jZGV2LCBhcGUtPmNkZXZubywgMS8qY291bnQqLyk7Ci0JaWYgKHJjIDwgMCkgewotCQlwcmludGsoImNkZXZfYWRkKCkgPSAlZFxuIiwgcmMpOwotCQlnb3RvIGZhaWxfYWRkOwotCX0KLQlwcmludGsoS0VSTl9ERUJVRyAiYWx0cGNpZWNoZG1hID0gJWQ6JWRcbiIsIE1BSk9SKGFwZS0+Y2Rldm5vKSwgTUlOT1IoYXBlLT5jZGV2bm8pKTsKLQlyZXR1cm4gMDsKLWZhaWxfYWRkOgotCS8qIGZyZWUgdGhlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUgKi8KLSAgICB1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oYXBlLT5jZGV2bm8sIDEvKmNvdW50Ki8pOwotZmFpbF9hbGxvYzoKLQlyZXR1cm4gLTE7Ci19Ci0KLS8qIHNnX2V4aXQoKSAtIENsZWFudXAgY2hhcmFjdGVyIGRldmljZQotICoKLSAqIFhYWCBTaG91bGQgaWRlYWxseSBiZSB0aWVkIHRvIHRoZSBkZXZpY2UsIG9uIGRldmljZSByZW1vdmUsIG5vdCBtb2R1bGUgZXhpdC4KLSAqLwotCi1zdGF0aWMgdm9pZCBzZ19leGl0KHN0cnVjdCBhcGVfZGV2ICphcGUpCi17Ci0JcHJpbnRrKEtFUk5fREVCVUcgRFJWX05BTUUgIiBzZ19leGl0KClcbiIpOwotCS8qIHJlbW92ZSB0aGUgY2hhcmFjdGVyIGRldmljZSAqLwotCWNkZXZfZGVsKCZhcGUtPmNkZXYpOwotCS8qIGZyZWUgdGhlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUgKi8KLQl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oYXBlLT5jZGV2bm8sIDEvKmNvdW50Ki8pOwotfQotCi0jZW5kaWYgLyogQUxUUENJRUNIRE1BX0NERVYgKi8KLQotLyogdXNlZCB0byByZWdpc3RlciB0aGUgZHJpdmVyIHdpdGggdGhlIFBDSSBrZXJuZWwgc3ViIHN5c3RlbQotICogQHNlZSBMREQzIHBhZ2UgMzExCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwY2lfZHJpdmVyID0gewotCS5uYW1lID0gRFJWX05BTUUsCi0JLmlkX3RhYmxlID0gaWRzLAotCS5wcm9iZSA9IHByb2JlLAotCS5yZW1vdmUgPSBfX2RldmV4aXRfcChyZW1vdmUpLAotCS8qIHJlc3VtZSwgc3VzcGVuZCBhcmUgb3B0aW9uYWwgKi8KLX07Ci0KLS8qKgotICogYWx0ZXJhcGNpZWNoZG1hX2luaXQoKSAtIE1vZHVsZSBpbml0aWFsaXphdGlvbiwgcmVnaXN0ZXJzIGRldmljZXMuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGFsdGVyYXBjaWVjaGRtYV9pbml0KHZvaWQpCi17Ci0JaW50IHJjID0gMDsKLQlwcmludGsoS0VSTl9ERUJVRyBEUlZfTkFNRSAiIGluaXQoKSwgYnVpbHQgYXQgIiBfX0RBVEVfXyAiICIgX19USU1FX18gIlxuIik7Ci0JLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgUENJIGJ1cyBkcml2ZXIgKi8KLQlyYyA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnBjaV9kcml2ZXIpOwotCWlmIChyYyA8IDApCi0JCXJldHVybiByYzsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBhbHRlcmFwY2llY2hkbWFfaW5pdCgpIC0gTW9kdWxlIGNsZWFudXAsIHVucmVnaXN0ZXJzIGRldmljZXMuCi0gKi8KLXN0YXRpYyB2b2lkIF9fZXhpdCBhbHRlcmFwY2llY2hkbWFfZXhpdCh2b2lkKQotewotCXByaW50ayhLRVJOX0RFQlVHIERSVl9OQU1FICIgZXhpdCgpLCBidWlsdCBhdCAiIF9fREFURV9fICIgIiBfX1RJTUVfXyAiXG4iKTsKLQkvKiB1bnJlZ2lzdGVyIHRoaXMgZHJpdmVyIGZyb20gdGhlIFBDSSBidXMgZHJpdmVyICovCi0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZwY2lfZHJpdmVyKTsKLX0KLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfaW5pdChhbHRlcmFwY2llY2hkbWFfaW5pdCk7Ci1tb2R1bGVfZXhpdChhbHRlcmFwY2llY2hkbWFfZXhpdCk7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hcmxhbi9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9hcmxhbi9NYWtlZmlsZQppbmRleCA5ZTU4ZTVmLi41YTg0ZDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXJsYW4vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FybGFuL01ha2VmaWxlCkBAIC0xLDMgKzEsMyBAQAotb2JqLSQoQ09ORklHX0FSTEFOKSArPSBhcmxhbi5vIAorb2JqLSQoQ09ORklHX0FSTEFOKSArPSBhcmxhbi5vCiAKIGFybGFuLW9ianMgOj0gYXJsYW4tbWFpbi5vIGFybGFuLXByb2MubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FybGFuL2FybGFuLmggYi9kcml2ZXJzL3N0YWdpbmcvYXJsYW4vYXJsYW4uaAppbmRleCBmYjNhZDUxLi5mZmNkM2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXJsYW4vYXJsYW4uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXJsYW4vYXJsYW4uaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk3IEN1bGxlbiBKZW5uaW5ncwotICogIENvcHlyaWdodCAoQykgMTk5OCBFbG1lci5Kb2FuZGlAdXQuZWUsICszNy0yNTUtMTM1MDAJCisgKiAgQ29weXJpZ2h0IChDKSAxOTk4IEVsbWVyLkpvYW5kaUB1dC5lZSwgKzM3LTI1NS0xMzUwMAogICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMKICAqLwogCkBAIC0yMCwxNCArMjAsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAKIAotLy8jZGVmaW5lIEFSTEFOX0RFQlVHR0lORyAxCisvKiAjZGVmaW5lIEFSTEFOX0RFQlVHR0lORyAxICovCiAKICNkZWZpbmUgQVJMQU5fUFJPQ19JTlRFUkZBQ0UKICNkZWZpbmUgTUFYX0FSTEFOUyA0IC8qIG5vdCBtb3JlIHRoYW4gNCAhICovCkBAIC01MSw4ICs1MSw4IEBACiBleHRlcm4gaW50CWFybGFuX2VudHJ5X2RlYnVnOwogZXh0ZXJuIGludAlhcmxhbl9leGl0X2RlYnVnOwogZXh0ZXJuIGludAl0ZXN0TWVtb3J5OwotZXh0ZXJuIGludCAgICAgYXJsYW5fY29tbWFuZChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwgaW50IGNvbW1hbmQpOwotIAorZXh0ZXJuIGludCAgICAgYXJsYW5fY29tbWFuZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY29tbWFuZCk7CisKICNkZWZpbmUgU0lEVU5LTk9XTiAtMQogI2RlZmluZSByYWRpb05vZGVJZFVOS05PV04gLTEKICNkZWZpbmUgaXJxVU5LTk9XTiAwCkBAIC02NSwyMiArNjUsMjEgQEAKICNkZWZpbmUgcmVnaXN0cmF0aW9uTW9kZVVOS05PV04gLTEKIAogCi0jZGVmaW5lIElGREVCVUcoIEwgKSBpZiAoIChMKSAmIGFybGFuX2RlYnVnICkgCi0jZGVmaW5lIEFSTEFOX0ZBS0VfSERSX0xFTiAxMiAKKyNkZWZpbmUgSUZERUJVRyhMKSBpZiAoKEwpICYgYXJsYW5fZGVidWcpCisjZGVmaW5lIEFSTEFOX0ZBS0VfSERSX0xFTiAxMgogCiAjaWZkZWYgQVJMQU5fREVCVUdHSU5HCiAJI2RlZmluZSBERUJVRyAxCiAJI2RlZmluZSBBUkxBTl9FTlRSWV9FWElUX0RFQlVHR0lORyAxCi0JI2RlZmluZSBBUkxBTl9ERUJVRyhhLGIpIHByaW50ayhLRVJOX0RFQlVHIGEsIGIpCisJI2RlZmluZSBBUkxBTl9ERUJVRyhhLCBiKSBwcmludGsoS0VSTl9ERUJVRyBhLCBiKQogI2Vsc2UKLQkjZGVmaW5lIEFSTEFOX0RFQlVHKGEsYikgCisJI2RlZmluZSBBUkxBTl9ERUJVRyhhLCBiKQogI2VuZGlmCiAKICNkZWZpbmUgQVJMQU5fU0hNRU1fU0laRQkweDIwMDAKIAotc3RydWN0IGFybGFuX3NobWVtCi17Ci0gICAgICAvKiBIZWFkZXIgU2lnbmF0dXJlICovIAorc3RydWN0IGFybGFuX3NobWVtIHsKKyAgICAgIC8qIEhlYWRlciBTaWduYXR1cmUgKi8KICAgICAgIHZvbGF0aWxlCWNoYXIgdGV4dFJlZ2lvbls0OF07CiAgICAgICB2b2xhdGlsZQl1X2NoYXIgcmVzZXRGbGFnOwogICAgICAgdm9sYXRpbGUJdV9jaGFyICBkaWFnbm9zdGljSW5mbzsKQEAgLTkxLDEwICs5MCwxMCBAQAogICAgICAgdm9sYXRpbGUJdV9jaGFyIGhhcmR3YXJlVHlwZTsKICAgICAgIHZvbGF0aWxlCXVfY2hhciBtYWpvckhhcmR3YXJlVmVyc2lvbjsKICAgICAgIHZvbGF0aWxlCXVfY2hhciBtaW5vckhhcmR3YXJlVmVyc2lvbjsKLSAgICAgIHZvbGF0aWxlCXVfY2hhciByYWRpb01vZHVsZTsvLyBzaG93cyBFRVBST00sIGNhbiBiZSBvdmVycmlkZGVuIGF0IDB4MTExCi0gICAgICB2b2xhdGlsZQl1X2NoYXIgZGVmYXVsdENoYW5uZWxTZXQ7IC8vIHNob3dzIEVFUHJvbSwgY2FuIGJlIG92ZXJyaWlkZW4gYXQgMHgxMEEKKyAgICAgIHZvbGF0aWxlCXVfY2hhciByYWRpb01vZHVsZTsvKiBzaG93cyBFRVBST00sIGNhbiBiZSBvdmVycmlkZGVuIGF0IDB4MTExICovCisgICAgICB2b2xhdGlsZQl1X2NoYXIgZGVmYXVsdENoYW5uZWxTZXQ7IC8qIHNob3dzIEVFUHJvbSwgY2FuIGJlIG92ZXJyaWlkZW4gYXQgMHgxMEEgKi8KICAgICAgIHZvbGF0aWxlCXVfY2hhciBfMls0N107Ci0gICAgICAKKwogICAgICAgLyogQ29udHJvbC9TdGF0dXMgQmxvY2sgLSAweDAwODAgKi8KICAgICAgIHZvbGF0aWxlCXVfY2hhciBpbnRlcnJ1cHRJblByb2dyZXNzOyAvKiBub3QgdXNlZCBieSBsYW5jcHUgKi8KICAgICAgIHZvbGF0aWxlCXVfY2hhciBjbnRybFJlZ0ltYWdlOyAvKiBub3QgdXNlZCBieSBsYW5jcHUgKi8KQEAgLTExMyw3ICsxMTIsNyBAQAogICAgICAgdm9sYXRpbGUJdV9jaGFyIHJ4UXVhbGl0eTsKICAgICAgIHZvbGF0aWxlCXVfY2hhciBzY3JhbWJsZWQ7CiAgICAgICB2b2xhdGlsZQl1X2NoYXIgXzRbMV07Ci0gICAgICAKKwogICAgICAgLyogVHJhbnNtaXQgU3RhdHVzIC0gMHgwMGIwICovCiAgICAgICB2b2xhdGlsZQl1X2NoYXIgdHhTdGF0dXM7CiAgICAgICB2b2xhdGlsZQl1X2NoYXIgdHhBY2tRdWFsaXR5OwpAQCAtMTUxLDcgKzE1MCw3IEBACiAgICAgICB2b2xhdGlsZQl1X3Nob3J0IHJvdXRlcklkOwogICAgICAgdm9sYXRpbGUJdV9jaGFyIF8xMFs5XTsKICAgICAgIHZvbGF0aWxlCXVfY2hhciB0eEF0dGVudWF0aW9uOwotICAgICAgdm9sYXRpbGUJdV9jaGFyIHN5c3RlbUlkWzRdOyAKKyAgICAgIHZvbGF0aWxlCXVfY2hhciBzeXN0ZW1JZFs0XTsKICAgICAgIHZvbGF0aWxlCXVfc2hvcnQgZ2xvYmFsQ2hlY2tzdW07CiAgICAgICB2b2xhdGlsZQl1X2NoYXIgXzExWzRdOwogICAgICAgdm9sYXRpbGUJdV9zaG9ydCBtYXhEYXRhZ3JhbVNpemU7CkBAIC0yMDcsMTkgKzIwNiwxOSBAQAogICAgICAgdm9sYXRpbGUJdV9jaGFyIGhvc3RjcHVMb2NrOwogICAgICAgdm9sYXRpbGUJdV9jaGFyIGxhbmNwdUxvY2s7CiAgICAgICB2b2xhdGlsZQl1X2NoYXIgcmVzZXRUaW1lWzE4XTsKLSAgICAgIAorCiAgICAgICB2b2xhdGlsZQl1X2NoYXIgbnVtRGF0YWdyYW1zVHJhbnNtaXR0ZWRbNF07CiAgICAgICB2b2xhdGlsZQl1X2NoYXIgbnVtUmVUcmFuc21pc3Npb25zWzRdOwogICAgICAgdm9sYXRpbGUJdV9jaGFyIG51bUZyYW1lc0Rpc2NhcmRlZFs0XTsKICAgICAgIHZvbGF0aWxlCXVfY2hhciBudW1EYXRhZ3JhbXNSZWNlaXZlZFs0XTsKICAgICAgIHZvbGF0aWxlCXVfY2hhciBudW1EdXBsaWNhdGVSZWNlaXZlZEZyYW1lc1s0XTsKICAgICAgIHZvbGF0aWxlCXVfY2hhciBudW1EYXRhZ3JhbXNEaXNjYXJkZWRbNF07Ci0gICAgICAKKwogICAgICAgdm9sYXRpbGUJdV9zaG9ydCBtYXhOdW1SZVRyYW5zbWl0RGF0YWdyYW07CiAgICAgICB2b2xhdGlsZQl1X3Nob3J0IG1heE51bVJlVHJhbnNtaXRGcmFtZXM7CiAgICAgICB2b2xhdGlsZQl1X3Nob3J0IG1heE51bUNvbnNlY3V0aXZlRHVwbGljYXRlRnJhbWVzOwogICAgICAgLyogbWlzYWxpZ25lZCBoZXJlIHNvIHdlIGhhdmUgdG8gZ28gdG8gY2hhcmFjdGVycyAqLwotICAgICAKKwogICAgICAgdm9sYXRpbGUJdV9jaGFyIG51bUJ5dGVzVHJhbnNtaXR0ZWRbNF07CiAgICAgICB2b2xhdGlsZQl1X2NoYXIgbnVtQnl0ZXNSZWNlaXZlZFs0XTsKICAgICAgIHZvbGF0aWxlCXVfY2hhciBudW1DUkNFcnJvcnNbNF07CkBAIC0yNTksNyArMjU4LDcgQEAKICAgICAgIGludCBjaGFubmVsTnVtYmVyOwogICAgICAgaW50IHNjcmFtYmxpbmdEaXNhYmxlOwogICAgICAgaW50IHR4QXR0ZW51YXRpb247Ci0gICAgICBpbnQgc3lzdGVtSWQ7IAorICAgICAgaW50IHN5c3RlbUlkOwogICAgICAgaW50IG1heERhdGFncmFtU2l6ZTsKICAgICAgIGludCBtYXhGcmFtZVNpemU7CiAgICAgICBpbnQgbWF4UmV0cmllczsKQEAgLTMxNiw4ICszMTUsNyBAQAogCiBleHRlcm4gc3RydWN0IGFybGFuX2NvbmZfc3RydSBhcmxhbl9jb25mW01BWF9BUkxBTlNdOwogCi1zdHJ1Y3QgVHhQYXJhbQoteworc3RydWN0IFR4UGFyYW0gewogICAgICAgdm9sYXRpbGUJc2hvcnQgCQlvZmZzZXQ7CiAgICAgICB2b2xhdGlsZSAJc2hvcnQgCQlsZW5ndGg7CiAgICAgICB2b2xhdGlsZQl1X2NoYXIgCQlkZXN0WzZdOwpAQCAtMzMwLDEyICszMjgsMTIgQEAKICNkZWZpbmUgVFhfUklOR19TSVpFIDIKIC8qIEluZm9ybWF0aW9uIHRoYXQgbmVlZCB0byBiZSBrZXB0IGZvciBlYWNoIGJvYXJkLiAqLwogc3RydWN0IGFybGFuX3ByaXZhdGUgewotICAgICAgc3RydWN0IGFybGFuX3NobWVtIF9faW9tZW0gKiBjYXJkOwotICAgICAgc3RydWN0IGFybGFuX3NobWVtICogY29uZjsKKyAgICAgIHN0cnVjdCBhcmxhbl9zaG1lbSBfX2lvbWVtICpjYXJkOworICAgICAgc3RydWN0IGFybGFuX3NobWVtICpjb25mOwogCi0gICAgICBzdHJ1Y3QgYXJsYW5fY29uZl9zdHJ1ICogQ29uZjsJICAgICAKKyAgICAgIHN0cnVjdCBhcmxhbl9jb25mX3N0cnUgKkNvbmY7CiAgICAgICBpbnQJYmFkOwotICAgICAgaW50IAlyZXNldDsKKyAgICAgIGludAlyZXNldDsKICAgICAgIHVuc2lnbmVkIGxvbmcgbGFzdFJlc2V0OwogICAgICAgc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAgICAgICBzdHJ1Y3QgdGltZXJfbGlzdCB0eF9kZWxheV90aW1lcjsKQEAgLTQwNywzOCArNDA1LDM4IEBACiAKICNkZWZpbmUgVFhCdWZmU3RhcnQoZGV2KSBvZmZzZXRvZihzdHJ1Y3QgYXJsYW5fc2htZW0sIHR4QnVmZmVyKQogI2RlZmluZSBUWEJ1ZmZFbmQoZGV2KSBvZmZzZXRvZihzdHJ1Y3QgYXJsYW5fc2htZW0sIHh4QnVmZmVyKQotIAotI2RlZmluZSBSRUFEU0hNKHRvLGZyb20sYXR5cGUpIHtcCisKKyNkZWZpbmUgUkVBRFNITSh0bywgZnJvbSwgYXR5cGUpIHtcCiAJYXR5cGUgdG1wO1wKLQltZW1jcHlfZnJvbWlvKCYodG1wKSwmKGZyb20pLHNpemVvZihhdHlwZSkpO1wKKwltZW1jcHlfZnJvbWlvKCYodG1wKSwgJihmcm9tKSwgc2l6ZW9mKGF0eXBlKSk7XAogCXRvID0gdG1wO1wKIAl9CiAKLSNkZWZpbmUgUkVBRFNITUVNKGZyb20sYXR5cGUpXAorI2RlZmluZSBSRUFEU0hNRU0oZnJvbSwgYXR5cGUpXAogCWF0eXBlIGZyb207IFwKIAlSRUFEU0hNKGZyb20sIGFybGFuLT5mcm9tLCBhdHlwZSk7CiAKLSNkZWZpbmUgV1JJVEVTSE0odG8sZnJvbSxhdHlwZSkgXAorI2RlZmluZSBXUklURVNITSh0bywgZnJvbSwgYXR5cGUpIFwKIAl7IGF0eXBlIHRtcFNITSA9IGZyb207XAotCW1lbWNweV90b2lvKCYodG8pLCZ0bXBTSE0sc2l6ZW9mKGF0eXBlKSk7XAorCW1lbWNweV90b2lvKCYodG8pLCAmdG1wU0hNLCBzaXplb2YoYXR5cGUpKTtcCiAJfQogCi0jZGVmaW5lIERFQlVHU0hNKGxldmVsU0hNLHN0cmluZ1NITSxzdHVmZixhdHlwZSkgXAorI2RlZmluZSBERUJVR1NITShsZXZlbFNITSwgc3RyaW5nU0hNLCBzdHVmZiwgYXR5cGUpIFwKIAl7CWF0eXBlIHRtcFNITTsgXAotCQltZW1jcHlfZnJvbWlvKCZ0bXBTSE0sJihzdHVmZiksc2l6ZW9mKGF0eXBlKSk7XAotCQlJRkRFQlVHKGxldmVsU0hNKSBwcmludGsoc3RyaW5nU0hNLHRtcFNITSk7XAorCQltZW1jcHlfZnJvbWlvKCZ0bXBTSE0sICYoc3R1ZmYpLCBzaXplb2YoYXR5cGUpKTtcCisJCUlGREVCVUcobGV2ZWxTSE0pIHByaW50ayhzdHJpbmdTSE0sIHRtcFNITSk7XAogCX0KIAogI2RlZmluZSBXUklURVNITUIodG8sIHZhbCkgXAotCXdyaXRlYih2YWwsJih0bykpCisJd3JpdGViKHZhbCwgJih0bykpCiAjZGVmaW5lIFJFQURTSE1CKHRvKSBcCiAJcmVhZGIoJih0bykpCiAjZGVmaW5lIFdSSVRFU0hNUyh0bywgdmFsKSBcCi0Jd3JpdGV3KHZhbCwmKHRvKSkKKwl3cml0ZXcodmFsLCAmKHRvKSkKICNkZWZpbmUgUkVBRFNITVModG8pIFwKIAlyZWFkdygmKHRvKSkKICNkZWZpbmUgV1JJVEVTSE1JKHRvLCB2YWwpIFwKLQl3cml0ZWwodmFsLCYodG8pKQorCXdyaXRlbCh2YWwsICYodG8pKQogI2RlZmluZSBSRUFEU0hNSSh0bykgXAogCXJlYWRsKCYodG8pKQogCkBAIC00NDcsNTEgKzQ0NSw1MSBAQAogCiAKICNkZWZpbmUgcmVnaXN0cmF0aW9uQmFkKGRldilcCi0gICAoICggICBSRUFEU0hNQigoKHN0cnVjdCBhcmxhbl9wcml2YXRlICopbmV0ZGV2X3ByaXYoZGV2KSktPmNhcmQtPnJlZ2lzdHJhdGlvbk1vZGUpICAgID4gMCkgJiYgXAotICAgICAoICAgUkVBRFNITUIoKChzdHJ1Y3QgYXJsYW5fcHJpdmF0ZSAqKW5ldGRldl9wcml2KGRldikpLT5jYXJkLT5yZWdpc3RyYXRpb25TdGF0dXMpID09IDApICAgICkKKyAgICAoKCAgIFJFQURTSE1CKCgoc3RydWN0IGFybGFuX3ByaXZhdGUgKiluZXRkZXZfcHJpdihkZXYpKS0+Y2FyZC0+cmVnaXN0cmF0aW9uTW9kZSkgICAgPiAwKSAmJiBcCisgICAgICggICBSRUFEU0hNQigoKHN0cnVjdCBhcmxhbl9wcml2YXRlICopbmV0ZGV2X3ByaXYoZGV2KSktPmNhcmQtPnJlZ2lzdHJhdGlvblN0YXR1cykgPT0gMCkpCiAKIAogI2RlZmluZSByZWFkQ29udHJvbFJlZ2lzdGVyKGRldilcCi0gCVJFQURTSE1CKCgoc3RydWN0IGFybGFuX3ByaXZhdGUgKiluZXRkZXZfcHJpdihkZXYpKS0+Y2FyZC0+Y250cmxSZWdJbWFnZSkKKwlSRUFEU0hNQigoKHN0cnVjdCBhcmxhbl9wcml2YXRlICopbmV0ZGV2X3ByaXYoZGV2KSktPmNhcmQtPmNudHJsUmVnSW1hZ2UpCiAKLSNkZWZpbmUgd3JpdGVDb250cm9sUmVnaXN0ZXIoZGV2LCB2KXtcCi0gICBXUklURVNITUIoKChzdHJ1Y3QgYXJsYW5fcHJpdmF0ZSAqKW5ldGRldl9wcml2KGRldikpLT5jYXJkLT5jbnRybFJlZ0ltYWdlCSwoKHYpICYweEYpICk7XAotICAgV1JJVEVTSE1CKCgoc3RydWN0IGFybGFuX3ByaXZhdGUgKiluZXRkZXZfcHJpdihkZXYpKS0+Y2FyZC0+Y29udHJvbFJlZ2lzdGVyCSwodikgCSk7fQorI2RlZmluZSB3cml0ZUNvbnRyb2xSZWdpc3RlcihkZXYsIHYpIHtcCisgICBXUklURVNITUIoKChzdHJ1Y3QgYXJsYW5fcHJpdmF0ZSAqKW5ldGRldl9wcml2KGRldikpLT5jYXJkLT5jbnRybFJlZ0ltYWdlLCAoKHYpICYgMHhGKSk7XAorICAgV1JJVEVTSE1CKCgoc3RydWN0IGFybGFuX3ByaXZhdGUgKiluZXRkZXZfcHJpdihkZXYpKS0+Y2FyZC0+Y29udHJvbFJlZ2lzdGVyLCAodikpOyB9CiAKIAogI2RlZmluZSBhcmxhbl9pbnRlcnJ1cHRfbGFuY3B1KGRldikge1wKICAgIGludCBjcjsgICBcCiAgICBcCiAgICBjciA9IHJlYWRDb250cm9sUmVnaXN0ZXIoZGV2KTtcCi0gICBpZiAoY3IgJiBBUkxBTl9DSEFOTkVMX0FUVEVOVElPTil7IFwKKyAgIGlmIChjciAmIEFSTEFOX0NIQU5ORUxfQVRURU5USU9OKSB7IFwKICAgICAgIHdyaXRlQ29udHJvbFJlZ2lzdGVyKGRldiwgKGNyICYgfkFSTEFOX0NIQU5ORUxfQVRURU5USU9OKSk7XAotICAgfWVsc2UgIFwKKyAgIH0gZWxzZSAgXAogICAgICAgd3JpdGVDb250cm9sUmVnaXN0ZXIoZGV2LCAoY3IgfCBBUkxBTl9DSEFOTkVMX0FUVEVOVElPTikpO1wKIH0KIAotI2RlZmluZSBjbGVhckNoYW5uZWxBdHRlbnRpb24oZGV2KXsgXAotICAgd3JpdGVDb250cm9sUmVnaXN0ZXIoZGV2LHJlYWRDb250cm9sUmVnaXN0ZXIoZGV2KSAmIH5BUkxBTl9DSEFOTkVMX0FUVEVOVElPTik7fQorI2RlZmluZSBjbGVhckNoYW5uZWxBdHRlbnRpb24oZGV2KSB7IFwKKyAgIHdyaXRlQ29udHJvbFJlZ2lzdGVyKGRldiwgcmVhZENvbnRyb2xSZWdpc3RlcihkZXYpICYgfkFSTEFOX0NIQU5ORUxfQVRURU5USU9OKTsgfQogI2RlZmluZSBzZXRIYXJkd2FyZVJlc2V0KGRldikge1wKLSAgIHdyaXRlQ29udHJvbFJlZ2lzdGVyKGRldixyZWFkQ29udHJvbFJlZ2lzdGVyKGRldikgfCBBUkxBTl9SRVNFVCk7fQorICAgd3JpdGVDb250cm9sUmVnaXN0ZXIoZGV2LCByZWFkQ29udHJvbFJlZ2lzdGVyKGRldikgfCBBUkxBTl9SRVNFVCk7IH0KICNkZWZpbmUgY2xlYXJIYXJkd2FyZVJlc2V0KGRldikge1wKLSAgIHdyaXRlQ29udHJvbFJlZ2lzdGVyKGRldixyZWFkQ29udHJvbFJlZ2lzdGVyKGRldikgJiB+QVJMQU5fUkVTRVQpO30KLSNkZWZpbmUgc2V0SW50ZXJydXB0RW5hYmxlKGRldil7XAotICAgd3JpdGVDb250cm9sUmVnaXN0ZXIoZGV2LHJlYWRDb250cm9sUmVnaXN0ZXIoZGV2KSB8IEFSTEFOX0lOVEVSUlVQVF9FTkFCTEUpICA7fQotI2RlZmluZSBjbGVhckludGVycnVwdEVuYWJsZShkZXYpe1wKLSAgIHdyaXRlQ29udHJvbFJlZ2lzdGVyKGRldixyZWFkQ29udHJvbFJlZ2lzdGVyKGRldikgJiB+QVJMQU5fSU5URVJSVVBUX0VOQUJMRSkgIDt9Ci0jZGVmaW5lIHNldENsZWFySW50ZXJydXB0KGRldil7XAotICAgd3JpdGVDb250cm9sUmVnaXN0ZXIoZGV2LHJlYWRDb250cm9sUmVnaXN0ZXIoZGV2KSB8IEFSTEFOX0NMRUFSX0lOVEVSUlVQVCkgICA7fQotI2RlZmluZSBjbGVhckNsZWFySW50ZXJydXB0KGRldil7XAotICAgd3JpdGVDb250cm9sUmVnaXN0ZXIoZGV2LHJlYWRDb250cm9sUmVnaXN0ZXIoZGV2KSAmIH5BUkxBTl9DTEVBUl9JTlRFUlJVUFQpO30KLSNkZWZpbmUgc2V0UG93ZXJPZmYoZGV2KXtcCi0gICB3cml0ZUNvbnRyb2xSZWdpc3RlcihkZXYscmVhZENvbnRyb2xSZWdpc3RlcihkZXYpIHwgKEFSTEFOX1BPV0VSICYmIEFSTEFOX0FDQ0VTUykpO1wKLSAgIHdyaXRlQ29udHJvbFJlZ2lzdGVyKGRldixyZWFkQ29udHJvbFJlZ2lzdGVyKGRldikgJiB+QVJMQU5fQUNDRVNTKTt9Ci0jZGVmaW5lIHNldFBvd2VyT24oZGV2KXtcCi0gICB3cml0ZUNvbnRyb2xSZWdpc3RlcihkZXYscmVhZENvbnRyb2xSZWdpc3RlcihkZXYpICYgfihBUkxBTl9QT1dFUikpOyAgIH0KLSNkZWZpbmUgYXJsYW5fbG9ja19jYXJkX2FjY2VzcyhkZXYpe1wKLSAgIHdyaXRlQ29udHJvbFJlZ2lzdGVyKGRldixyZWFkQ29udHJvbFJlZ2lzdGVyKGRldikgJiB+QVJMQU5fQUNDRVNTKTt9Ci0jZGVmaW5lIGFybGFuX3VubG9ja19jYXJkX2FjY2VzcyhkZXYpe1wKLSAgIHdyaXRlQ29udHJvbFJlZ2lzdGVyKGRldixyZWFkQ29udHJvbFJlZ2lzdGVyKGRldikgfCBBUkxBTl9BQ0NFU1MgKTsgfSAgCisgICB3cml0ZUNvbnRyb2xSZWdpc3RlcihkZXYsIHJlYWRDb250cm9sUmVnaXN0ZXIoZGV2KSAmIH5BUkxBTl9SRVNFVCk7IH0KKyNkZWZpbmUgc2V0SW50ZXJydXB0RW5hYmxlKGRldikge1wKKyAgIHdyaXRlQ29udHJvbFJlZ2lzdGVyKGRldiwgcmVhZENvbnRyb2xSZWdpc3RlcihkZXYpIHwgQVJMQU5fSU5URVJSVVBUX0VOQUJMRSkgIDsgfQorI2RlZmluZSBjbGVhckludGVycnVwdEVuYWJsZShkZXYpIHtcCisgICB3cml0ZUNvbnRyb2xSZWdpc3RlcihkZXYsIHJlYWRDb250cm9sUmVnaXN0ZXIoZGV2KSAmIH5BUkxBTl9JTlRFUlJVUFRfRU5BQkxFKSAgOyB9CisjZGVmaW5lIHNldENsZWFySW50ZXJydXB0KGRldikge1wKKyAgIHdyaXRlQ29udHJvbFJlZ2lzdGVyKGRldiwgcmVhZENvbnRyb2xSZWdpc3RlcihkZXYpIHwgQVJMQU5fQ0xFQVJfSU5URVJSVVBUKSAgIDsgfQorI2RlZmluZSBjbGVhckNsZWFySW50ZXJydXB0KGRldikge1wKKyAgIHdyaXRlQ29udHJvbFJlZ2lzdGVyKGRldiwgcmVhZENvbnRyb2xSZWdpc3RlcihkZXYpICYgfkFSTEFOX0NMRUFSX0lOVEVSUlVQVCk7IH0KKyNkZWZpbmUgc2V0UG93ZXJPZmYoZGV2KSB7XAorICAgd3JpdGVDb250cm9sUmVnaXN0ZXIoZGV2LCByZWFkQ29udHJvbFJlZ2lzdGVyKGRldikgfCAoQVJMQU5fUE9XRVIgJiYgQVJMQU5fQUNDRVNTKSk7XAorICAgd3JpdGVDb250cm9sUmVnaXN0ZXIoZGV2LCByZWFkQ29udHJvbFJlZ2lzdGVyKGRldikgJiB+QVJMQU5fQUNDRVNTKTsgfQorI2RlZmluZSBzZXRQb3dlck9uKGRldikge1wKKyAgIHdyaXRlQ29udHJvbFJlZ2lzdGVyKGRldiwgcmVhZENvbnRyb2xSZWdpc3RlcihkZXYpICYgfihBUkxBTl9QT1dFUikpOyB9CisjZGVmaW5lIGFybGFuX2xvY2tfY2FyZF9hY2Nlc3MoZGV2KSB7XAorICAgd3JpdGVDb250cm9sUmVnaXN0ZXIoZGV2LCByZWFkQ29udHJvbFJlZ2lzdGVyKGRldikgJiB+QVJMQU5fQUNDRVNTKTsgfQorI2RlZmluZSBhcmxhbl91bmxvY2tfY2FyZF9hY2Nlc3MoZGV2KSB7XAorICAgd3JpdGVDb250cm9sUmVnaXN0ZXIoZGV2LCByZWFkQ29udHJvbFJlZ2lzdGVyKGRldikgfCBBUkxBTl9BQ0NFU1MpOyB9CiAKIAogCkBAIC01MjUsNyArNTIzLDYgQEAKIAkJCQkJfCBBUkxBTl9DT01NQU5EX1JFU0VUKQogCiAKLSAKICNkZWZpbmUgQVJMQU5fREVCVUdfQ0hBSU5fTE9DS1MJCTB4MDAwMDEKICNkZWZpbmUgQVJMQU5fREVCVUdfUkVTRVQJCTB4MDAwMDIKICNkZWZpbmUgQVJMQU5fREVCVUdfVElNSU5HCQkweDAwMDA0CkBAIC01MzYsNCArNTMzLDMgQEAKICNkZWZpbmUgQVJMQU5fREVCVUdfSU5URVJSVVBUCQkweDAwMDgwCiAjZGVmaW5lIEFSTEFOX0RFQlVHX1NUQVJUVVAJCTB4MDAxMDAKICNkZWZpbmUgQVJMQU5fREVCVUdfU0hVVERPV04JCTB4MDAyMDAKLSAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hc3VzX29sZWQvYXN1c19vbGVkLmMgYi9kcml2ZXJzL3N0YWdpbmcvYXN1c19vbGVkL2FzdXNfb2xlZC5jCmluZGV4IDQzYzU3YjcuLmNhZGI2ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hc3VzX29sZWQvYXN1c19vbGVkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FzdXNfb2xlZC9hc3VzX29sZWQuYwpAQCAtNTIsNiArNTIsMTAgQEAKICNkZWZpbmUgQVNVU19PTEVEX0RJU1BfSEVJR0hUCQkzMgogI2RlZmluZSBBU1VTX09MRURfUEFDS0VUX0JVRl9TSVpFCTI1NgogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQVNVUyAgICAgIDB4MGIwNQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FTVVNfTENNICAgICAgMHgxNzI2CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVNVU19MQ00yICAgICAweDE3NWIKKwogTU9EVUxFX0FVVEhPUigiSmFrdWIgU2NobWlkdGtlLCBzamFrdWJAZ21haWwuY29tIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFzdXMgT0xFRCBEcml2ZXIgdiIgQVNVU19PTEVEX1ZFUlNJT04pOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtODMsMTggKzg3LDIwIEBACiB9OwogCiAvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCS8qIEFzdXMgRzEvRzIgKGFuZCB2YXJpYW50cykqLwotCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTcyNikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BU1VTLCBVU0JfREVWSUNFX0lEX0FTVVNfTENNKSB9LAogCS8qIEFzdXMgRzUwViAoYW5kIHBvc3NpYmx5IG90aGVycyAtIEc3MD8gRzcxPykqLwotCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTc1YikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BU1VTLCBVU0JfREVWSUNFX0lEX0FTVVNfTENNMikgfSwKIAl7IH0sCiB9OwogCiAvKiBwYXJhbWV0ZXJzIG9mIHNwZWNpZmljIGRldmljZXMgKi8KIHN0YXRpYyBzdHJ1Y3Qgb2xlZF9kZXZfZGVzY19zdHIgb2xlZF9kZXZfZGVzY190YWJsZVtdID0gewotCXsgMHgwYjA1LCAweDE3MjYsIDEyOCwgUEFDS19NT0RFX0cxLCAiRzEvRzIiIH0sCi0JeyAweDBiMDUsIDB4MTc1YiwgMjU2LCBQQUNLX01PREVfRzUwLCAiRzUwIiB9LAorCXsgVVNCX1ZFTkRPUl9JRF9BU1VTLCBVU0JfREVWSUNFX0lEX0FTVVNfTENNLCAxMjgsIFBBQ0tfTU9ERV9HMSwKKwkJIkcxL0cyIiB9LAorCXsgVVNCX1ZFTkRPUl9JRF9BU1VTLCBVU0JfREVWSUNFX0lEX0FTVVNfTENNMiwgMjU2LCBQQUNLX01PREVfRzUwLAorCQkiRzUwIiB9LAogCXsgfSwKIH07CiAKQEAgLTQyNCw2ICs0MzAsMTEgQEAKIAogCQlrZnJlZShvZGV2LT5idWYpOwogCQlvZGV2LT5idWYgPSBrbWFsbG9jKG9kZXYtPmJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKG9kZXYtPmJ1ZiA9PSBOVUxMKSB7CisJCQlvZGV2LT5idWZfc2l6ZSA9IDA7CisJCQlwcmludGsoQVNVU19PTEVEX0VSUk9SICJPdXQgb2YgbWVtb3J5IVxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQogCiAJCW1lbXNldChvZGV2LT5idWYsIDB4ZmYsIG9kZXYtPmJ1Zl9zaXplKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2IzZGZnL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU2NTczYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLWNvbmZpZyBCM0RGRwotICAgICAgIHRyaXN0YXRlICJCcm9udGVzIDNkIEZyYW1lIEZyYW1lZ3JhYmJlciIKLSAgICAgICBkZXBlbmRzIG9uIFBDSQotICAgICAgIGRlZmF1bHQgbgotICAgICAgIC0tLWhlbHAtLS0KLSAgICAgICAgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBCcm9udGVzIDNkIEZyYW1lZ3JhYmJlcgotICAgICAgICAgUENJIGNhcmQuCi0KLSAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKLSAgICAgICAgIHdpbGwgYmUgY2FsbGVkIGIzZGZnLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2IzZGZnL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2IzZGZnL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MWY0MzlmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLW9iai0kKENPTkZJR19CM0RGRykgKz0gYjNkZmcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2IzZGZnL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvVE9ETwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVhOTI5OC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvVE9ETworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotCi0gLSBxdWV1ZS93YWl0IGJ1ZmZlciBwcmVzZW50cyBmaWxsdGltZSByZXN1bHRzIGZvciBlYWNoIGZyYW1lPwotIC0gY291bnRpbmcgb2YgZHJvcHBlZCBmcmFtZXMKLSAtIHJldmlldyBlbmRpYW5uZXNzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvYjNkZmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9iM2RmZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTQzYzUxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9iM2RmZy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEwMCArMCwwIEBACi0gLyoKLSAqIEJyb250ZXMgUENJIGZyYW1lIGdyYWJiZXIgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IDNNIENvbXBhbnkKLSAqIENvbnRhY3Q6IEp1c3RpbiBCcm9uZGVyIDxqc2Jyb25kZXJAYnJvbnRlczNkLmNvbT4KLSAqIE9yaWdpbmFsIEF1dGhvcnM6IERhbmllbCBEcmFrZSA8ZGRyYWtlQGJyb250ZXMzZC5jb20+Ci0gKiAgICAgICAgICAgICAgICAgICBEdWFuZSBHcmlmZmluIDxkdWFuZWdAZGdoZGEuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYjNkZmdfbmJ1ZiA9IDI7Ci0KLW1vZHVsZV9wYXJhbV9uYW1lZChidWZmZXJfY291bnQsIGIzZGZnX25idWYsIHVpbnQsIDA0NDQpOwotCi1NT0RVTEVfUEFSTV9ERVNDKGJ1ZmZlcl9jb3VudCwgIk51bWJlciBvZiBidWZmZXJzIChtaW4gMiwgZGVmYXVsdCAyKSIpOwotCi1NT0RVTEVfQVVUSE9SKCJEYW5pZWwgRHJha2UgPGRkcmFrZUBicm9udGVzM2QuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJCcm9udGVzIGZyYW1lIGdyYWJiZXIgZHJpdmVyIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLSNkZWZpbmUgRFJJVkVSX05BTUUgImIzZGZnIgotI2RlZmluZSBCM0RGR19NQVhfREVWUyA0Ci0jZGVmaW5lIEIzREZHX0ZSQU1FU19QRVJfQlVGRkVSIDMKLQotI2RlZmluZSBCM0RGR19CQVJfUkVHUwkwCi0jZGVmaW5lIEIzREZHX1JFR1NfTEVOR1RIIDB4MTAwMDAKLQotI2RlZmluZSBCM0RGR19JT0NfTUFHSUMJCTB4YjMgLyogZGZnIDotKSAqLwotI2RlZmluZSBCM0RGR19JT0NHRlJNU1oJCV9JT1IoQjNERkdfSU9DX01BR0lDLCAxLCBpbnQpCi0jZGVmaW5lIEIzREZHX0lPQ1ROVU1CVUZTCV9JTyhCM0RGR19JT0NfTUFHSUMsIDIpCi0jZGVmaW5lIEIzREZHX0lPQ1RUUkFOUwkJX0lPKEIzREZHX0lPQ19NQUdJQywgMykKLSNkZWZpbmUgQjNERkdfSU9DVFFVRVVFQlVGCV9JTyhCM0RGR19JT0NfTUFHSUMsIDQpCi0jZGVmaW5lIEIzREZHX0lPQ1RQT0xMQlVGCV9JT1dSKEIzREZHX0lPQ19NQUdJQywgNSwgc3RydWN0IGIzZGZnX3BvbGwpCi0jZGVmaW5lIEIzREZHX0lPQ1RXQUlUQlVGCV9JT1dSKEIzREZHX0lPQ19NQUdJQywgNiwgc3RydWN0IGIzZGZnX3dhaXQpCi0jZGVmaW5lIEIzREZHX0lPQ0dXQU5EU1RBVAlfSU9SKEIzREZHX0lPQ19NQUdJQywgNywgaW50KQotCi1lbnVtIHsKLQkvKiBudW1iZXIgb2YgNGtiIHBhZ2VzIHBlciBmcmFtZSAqLwotCUIzRF9SRUdfRlJNX1NJWkUgPSAweDAsCi0KLQkvKiBiaXQgMDogc2V0IHRvIGVuYWJsZSBpbnRlcnJ1cHRzCi0JICogYml0IDE6IHNldCB0byBlbmFibGUgY2FibGUgc3RhdHVzIGNoYW5nZSBpbnRlcnJ1cHRzICovCi0JQjNEX1JFR19IV19DVFJMID0gMHg0LAotCi0JLyogYml0IDAtMSAtIDEtYmFzZWQgSUQgb2YgbmV4dCBwZW5kaW5nIGZyYW1lIHRyYW5zZmVyICgwID0gbm9uZSkKLQkgKiBiaXQgMiBpbmRpY2F0ZXMgdGhlIHByZXZpb3VzIERNQSB0cmFuc2ZlciBoYXMgY29tcGxldGVkCi0JICogYml0IDMgaW5kaWNhdGVzIHdhbmQgY2FibGUgc3RhdHVzIGNoYW5nZQotCSAqIGJpdCA4OjE1IC0gY291bnRlciBvZiBudW1iZXIgb2YgZGlzY2FyZGVkIHRyaXBsZXRzICovCi0JQjNEX1JFR19ETUFfU1RTID0gMHg4LAotCi0JLyogYml0IDA6IHdhbmQgc3RhdHVzICgxID0gcHJlc2VudCwgMCA9IGRpc2Nvbm5lY3RlZCkgKi8KLQlCM0RfUkVHX1dBTkRfU1RTID0gMHhjLAotCi0JLyogYnVzIGFkZHJlc3MgZm9yIERNQSB0cmFuc2ZlcnMuIGxvd2VyIDIgYml0cyBtdXN0IGJlIHplcm8gYmVjYXVzZSBETUEKLQkgKiB3b3JrcyB3aXRoIDMyIGJpdCB3b3JkIHNpemUuICovCi0JQjNEX1JFR19FQzIyMF9ETUFfQUREUiA9IDB4ODAwMCwKLQotCS8qIGJpdCAyMDowIC0gbnVtYmVyIG9mIDMyIGJpdCB3b3JkcyB0byBiZSB0cmFuc2ZlcnJlZAotCSAqIGJpdCAyMTozMSAtIHJlc2VydmVkICovCi0JQjNEX1JFR19FQzIyMF9UUkZfU0laRSA9IDB4ODAwNCwKLQotCS8qIGJpdCAwIC0gZXJyb3IgYml0Ci0JICogYml0IDEgLSBpbnRlcnJ1cHQgYml0IChzZXQgdG8gZ2VuZXJhdGUgaW50ZXJydXB0IGF0IGVuZCBvZiB0cmFuc2ZlcikKLQkgKiBiaXQgMiAtIHN0YXJ0IGJpdCAoc2V0IHRvIHN0YXJ0IHRyYW5zZmVyKQotCSAqIGJpdCAzIC0gZGlyZWN0aW9uICgwID0gRE1BX1RPX0RFVklDRSwgMSA9IERNQV9GUk9NX0RFVklDRQotCSAqIGJpdCA0OjMxIC0gcmVzZXJ2ZWQgKi8KLQlCM0RfUkVHX0VDMjIwX0RNQV9TVFMgPSAweDgwMDgsCi19OwotCi1lbnVtIGIzZGZnX2J1ZmZlcl9zdGF0ZSB7Ci0JQjNERkdfQlVGRkVSX1BPTExFRCA9IDAsCi0JQjNERkdfQlVGRkVSX1BFTkRJTkcsCi0JQjNERkdfQlVGRkVSX1BPUFVMQVRFRCwKLX07Ci0KLXN0cnVjdCBiM2RmZ19idWZmZXIgewotCXVuc2lnbmVkIGNoYXIgKmZyYW1lW0IzREZHX0ZSQU1FU19QRVJfQlVGRkVSXTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JdTggc3RhdGU7Ci19OwotCi1zdHJ1Y3QgYjNkZmdfZGV2IHsKLQotCS8qIG5vIHByb3RlY3Rpb24gbmVlZGVkOiBhbGwgZmluYWxpemVkIGF0IGluaXRpYWxpemF0aW9uIHRpbWUgKi8KLQlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKLQlzdHJ1Y3QgY2RldiBjaGFyZGV2OwotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQl2b2lkIF9faW9tZW0gKnJlZ3M7Ci0JdW5zaWduZWQgaW50IGZyYW1lX3NpemU7Ci0KLQkvKgotCSAqIFByb3RlY3RzIGJ1ZmZlciBzdGF0ZSwgaW5jbHVkaW5nIGJ1ZmZlcl9xdWV1ZSwgdHJpcGxldF9yZWFkeSwKLQkgKiBjdXJfZG1hX2ZyYW1lX2lkeCAmIGN1cl9kbWFfZnJhbWVfYWRkci4KLQkgKi8KLQlzcGlubG9ja190IGJ1ZmZlcl9sb2NrOwotCXN0cnVjdCBiM2RmZ19idWZmZXIgKmJ1ZmZlcnM7Ci0Jc3RydWN0IGxpc3RfaGVhZCBidWZmZXJfcXVldWU7Ci0KLQkvKiBMYXN0IGZyYW1lIGluIHRyaXBsZXQgdHJhbnNmZXJyZWQgKC0xIGlmIG5vbmUpLiAqLwotCWludCBjdXJfZG1hX2ZyYW1lX2lkeDsKLQotCS8qIEN1cnJlbnQgZnJhbWUncyBhZGRyZXNzIGZvciBETUEuICovCi0JZG1hX2FkZHJfdCBjdXJfZG1hX2ZyYW1lX2FkZHI7Ci0KLQkvKgotCSAqIFByb3RlY3RzIGNzdGF0ZV90c3RhbXAuCi0JICogTmVzdHMgaW5zaWRlIGJ1ZmZlcl9sb2NrLgotCSAqLwotCXNwaW5sb2NrX3QgY3N0YXRlX2xvY2s7Ci0JdW5zaWduZWQgbG9uZyBjc3RhdGVfdHN0YW1wOwotCi0JLyoKLQkgKiBQcm90ZWN0cyB0cmlwbGV0c19kcm9wcGVkLgotCSAqIE5lc3RzIGluc2lkZSBidWZmZXJzX2xvY2suCi0JICovCi0Jc3BpbmxvY2tfdCB0cmlwbGV0c19kcm9wcGVkX2xvY2s7Ci0JdW5zaWduZWQgaW50IHRyaXBsZXRzX2Ryb3BwZWQ7Ci0KLQl3YWl0X3F1ZXVlX2hlYWRfdCBidWZmZXJfd2FpdHF1ZXVlOwotCi0JdW5zaWduZWQgaW50IHRyYW5zbWlzc2lvbl9lbmFibGVkOjE7Ci0JdW5zaWduZWQgaW50IHRyaXBsZXRfcmVhZHk6MTsKLX07Ci0KLXN0YXRpYyB1OCBiM2RmZ19kZXZpY2VzW0IzREZHX01BWF9ERVZTXTsKLQotc3RhdGljIHN0cnVjdCBjbGFzcyAqYjNkZmdfY2xhc3M7Ci1zdGF0aWMgZGV2X3QgYjNkZmdfZGV2dDsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGIzZGZnX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JeyBQQ0lfREVWSUNFKDB4MGIzZCwgMHgwMDAxKSB9LAotCXsgfSwKLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiM2RmZ19pZHMpOwotCi0vKioqKiogdXNlci12aXNpYmxlIHR5cGVzICoqKioqLwotCi1zdHJ1Y3QgYjNkZmdfcG9sbCB7Ci0JaW50IGJ1ZmZlcl9pZHg7Ci0JdW5zaWduZWQgaW50IHRyaXBsZXRzX2Ryb3BwZWQ7Ci19OwotCi1zdHJ1Y3QgYjNkZmdfd2FpdCB7Ci0JaW50IGJ1ZmZlcl9pZHg7Ci0JdW5zaWduZWQgaW50IHRpbWVvdXQ7Ci0JdW5zaWduZWQgaW50IHRyaXBsZXRzX2Ryb3BwZWQ7Ci19OwotCi0vKioqKiByZWdpc3RlciBJL08gKioqKi8KLQotc3RhdGljIHUzMiBiM2RmZ19yZWFkMzIoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYsIHUxNiByZWcpCi17Ci0JcmV0dXJuIGlvcmVhZDMyKGZnZGV2LT5yZWdzICsgcmVnKTsKLX0KLQotc3RhdGljIHZvaWQgYjNkZmdfd3JpdGUzMihzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiwgdTE2IHJlZywgdTMyIHZhbHVlKQotewotCWlvd3JpdGUzMih2YWx1ZSwgZmdkZXYtPnJlZ3MgKyByZWcpOwotfQotCi0vKioqKiBidWZmZXIgbWFuYWdlbWVudCAqKioqLwotCi0vKgotICogUHJvZ3JhbSBFQzIyMCBmb3IgdHJhbnNmZXIgb2YgYSBzcGVjaWZpYyBmcmFtZS4KLSAqIENhbGxlZCB3aXRoIGJ1ZmZlcl9sb2NrIGhlbGQuCi0gKi8KLXN0YXRpYyBpbnQgc2V0dXBfZnJhbWVfdHJhbnNmZXIoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYsCi0Jc3RydWN0IGIzZGZnX2J1ZmZlciAqYnVmLCBpbnQgZnJhbWUpCi17Ci0JdW5zaWduZWQgY2hhciAqZnJtX2FkZHI7Ci0JZG1hX2FkZHJfdCBmcm1fYWRkcl9kbWE7Ci0JdW5zaWduZWQgaW50IGZybV9zaXplID0gZmdkZXYtPmZyYW1lX3NpemU7Ci0KLQlmcm1fYWRkciA9IGJ1Zi0+ZnJhbWVbZnJhbWVdOwotCWZybV9hZGRyX2RtYSA9IHBjaV9tYXBfc2luZ2xlKGZnZGV2LT5wZGV2LCBmcm1fYWRkciwKLQkJCQkJICBmcm1fc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGZnZGV2LT5wZGV2LCBmcm1fYWRkcl9kbWEpKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWZnZGV2LT5jdXJfZG1hX2ZyYW1lX2FkZHIgPSBmcm1fYWRkcl9kbWE7Ci0JZmdkZXYtPmN1cl9kbWFfZnJhbWVfaWR4ID0gZnJhbWU7Ci0KLQliM2RmZ193cml0ZTMyKGZnZGV2LCBCM0RfUkVHX0VDMjIwX0RNQV9BRERSLAotCQkJCQljcHVfdG9fbGUzMihmcm1fYWRkcl9kbWEpKTsKLQliM2RmZ193cml0ZTMyKGZnZGV2LCBCM0RfUkVHX0VDMjIwX1RSRl9TSVpFLAotCQkJCQljcHVfdG9fbGUzMihmcm1fc2l6ZSA+PiAyKSk7Ci0JYjNkZmdfd3JpdGUzMihmZ2RldiwgQjNEX1JFR19FQzIyMF9ETUFfU1RTLCAweGYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIENhbGxlciBzaG91bGQgaG9sZCBidWZmZXIgbG9jayAqLwotc3RhdGljIHZvaWQgZGVxdWV1ZV9hbGxfYnVmZmVycyhzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldikKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgYjNkZmdfbmJ1ZjsgaSsrKSB7Ci0JCXN0cnVjdCBiM2RmZ19idWZmZXIgKmJ1ZiA9ICZmZ2Rldi0+YnVmZmVyc1tpXTsKLQkJYnVmLT5zdGF0ZSA9IEIzREZHX0JVRkZFUl9QT0xMRUQ7Ci0JCWxpc3RfZGVsX2luaXQoJmJ1Zi0+bGlzdCk7Ci0JfQotfQotCi0vKiBxdWV1ZSBhIGJ1ZmZlciB0byByZWNlaXZlIGRhdGEgKi8KLXN0YXRpYyBpbnQgcXVldWVfYnVmZmVyKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2LCBpbnQgYnVmaWR4KQotewotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZmZ2Rldi0+cGRldi0+ZGV2OwotCXN0cnVjdCBiM2RmZ19idWZmZXIgKmJ1ZjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByID0gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKLQlpZiAoYnVmaWR4IDwgMCB8fCBidWZpZHggPj0gYjNkZmdfbmJ1ZikgewotCQlkZXZfZGJnKGRldiwgIkludmFsaWQgYnVmZmVyIGluZGV4LCAlZFxuIiwgYnVmaWR4KTsKLQkJciA9IC1FTk9FTlQ7Ci0JCWdvdG8gb3V0OwotCX0KLQlidWYgPSAmZmdkZXYtPmJ1ZmZlcnNbYnVmaWR4XTsKLQotCWlmICh1bmxpa2VseShidWYtPnN0YXRlID09IEIzREZHX0JVRkZFUl9QRU5ESU5HKSkgewotCQlkZXZfZGJnKGRldiwgImJ1ZmZlciAlZCBpcyBhbHJlYWR5IHF1ZXVlZFxuIiwgYnVmaWR4KTsKLQkJciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWJ1Zi0+c3RhdGUgPSBCM0RGR19CVUZGRVJfUEVORElORzsKLQlsaXN0X2FkZF90YWlsKCZidWYtPmxpc3QsICZmZ2Rldi0+YnVmZmVyX3F1ZXVlKTsKLQotCWlmIChmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQgJiYgZmdkZXYtPnRyaXBsZXRfcmVhZHkpIHsKLQkJZGV2X2RiZyhkZXYsICJ0cmlwbGV0IGlzIHJlYWR5LCBwdXNoaW5nIGltbWVkaWF0ZWx5XG4iKTsKLQkJZmdkZXYtPnRyaXBsZXRfcmVhZHkgPSAwOwotCQlyID0gc2V0dXBfZnJhbWVfdHJhbnNmZXIoZmdkZXYsIGJ1ZiwgMCk7Ci0JCWlmIChyKQotCQkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gbWFwIERNQSBidWZmZXJcbiIpOwotCX0KLQotb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZnZGV2LT5idWZmZXJfbG9jaywgZmxhZ3MpOwotCXJldHVybiByOwotfQotCi0vKiBub24tYmxvY2tpbmcgYnVmZmVyIHBvbGwuIHJldHVybnMgMSBpZiBkYXRhIGlzIHByZXNlbnQgaW4gdGhlIGJ1ZmZlciwKLSAqIDAgb3RoZXJ3aXNlICovCi1zdGF0aWMgaW50IHBvbGxfYnVmZmVyKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2LCB2b2lkIF9fdXNlciAqYXJnKQotewotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZmZ2Rldi0+cGRldi0+ZGV2OwotCXN0cnVjdCBiM2RmZ19wb2xsIHA7Ci0Jc3RydWN0IGIzZGZnX2J1ZmZlciAqYnVmOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHIgPSAxOwotCWludCBhcmdfb3V0ID0gMDsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigmcCwgYXJnLCBzaXplb2YocCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmICh1bmxpa2VseSghZmdkZXYtPnRyYW5zbWlzc2lvbl9lbmFibGVkKSkgewotCQlkZXZfZGJnKGRldiwgImNhbm5vdCBwb2xsLCB0cmFuc21pc3Npb24gZGlzYWJsZWRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAocC5idWZmZXJfaWR4IDwgMCB8fCBwLmJ1ZmZlcl9pZHggPj0gYjNkZmdfbmJ1ZikKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0KLQlidWYgPSAmZmdkZXYtPmJ1ZmZlcnNbcC5idWZmZXJfaWR4XTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKLQotCWlmIChsaWtlbHkoYnVmLT5zdGF0ZSA9PSBCM0RGR19CVUZGRVJfUE9QVUxBVEVEKSkgewotCQlhcmdfb3V0ID0gMTsKLQkJYnVmLT5zdGF0ZSA9IEIzREZHX0JVRkZFUl9QT0xMRUQ7Ci0KLQkJLyogSVJRcyBhbHJlYWR5IGRpc2FibGVkIGJ5IHNwaW5fbG9ja19pcnFzYXZlIGFib3ZlLiAqLwotCQlzcGluX2xvY2soJmZnZGV2LT50cmlwbGV0c19kcm9wcGVkX2xvY2spOwotCQlwLnRyaXBsZXRzX2Ryb3BwZWQgPSBmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZDsKLQkJZmdkZXYtPnRyaXBsZXRzX2Ryb3BwZWQgPSAwOwotCQlzcGluX3VubG9jaygmZmdkZXYtPnRyaXBsZXRzX2Ryb3BwZWRfbG9jayk7Ci0JfSBlbHNlIHsKLQkJciA9IDA7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoYXJnX291dCAmJiBjb3B5X3RvX3VzZXIoYXJnLCAmcCwgc2l6ZW9mKHApKSkKLQkJciA9IC1FRkFVTFQ7Ci0KLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2NzdGF0ZV9jaGFuZ2Uoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgd2hlbjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZmZ2Rldi0+Y3N0YXRlX2xvY2ssIGZsYWdzKTsKLQl3aGVuID0gZmdkZXYtPmNzdGF0ZV90c3RhbXA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmdkZXYtPmNzdGF0ZV9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHdoZW47Ci19Ci0KLXN0YXRpYyBpbnQgaXNfZXZlbnRfcmVhZHkoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYsIHN0cnVjdCBiM2RmZ19idWZmZXIgKmJ1ZiwKLQkJCSAgdW5zaWduZWQgbG9uZyB3aGVuKQotewotCWludCByZXN1bHQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKLQlzcGluX2xvY2soJmZnZGV2LT5jc3RhdGVfbG9jayk7Ci0JcmVzdWx0ID0gKCFmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQgfHwKLQkJICBidWYtPnN0YXRlID09IEIzREZHX0JVRkZFUl9QT1BVTEFURUQgfHwKLQkJICB3aGVuICE9IGZnZGV2LT5jc3RhdGVfdHN0YW1wKTsKLQlzcGluX3VubG9jaygmZmdkZXYtPmNzdGF0ZV9sb2NrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIHNsZWVwIHVudGlsIGEgc3BlY2lmaWMgYnVmZmVyIGJlY29tZXMgcG9wdWxhdGVkICovCi1zdGF0aWMgaW50IHdhaXRfYnVmZmVyKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2LCB2b2lkIF9fdXNlciAqYXJnKQotewotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZmZ2Rldi0+cGRldi0+ZGV2OwotCXN0cnVjdCBiM2RmZ193YWl0IHc7Ci0Jc3RydWN0IGIzZGZnX2J1ZmZlciAqYnVmOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHdoZW47Ci0JaW50IHI7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJncsIGFyZywgc2l6ZW9mKHcpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoIWZnZGV2LT50cmFuc21pc3Npb25fZW5hYmxlZCkgewotCQlkZXZfZGJnKGRldiwgImNhbm5vdCB3YWl0LCB0cmFuc21pc3Npb24gZGlzYWJsZWRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAody5idWZmZXJfaWR4IDwgMCB8fCB3LmJ1ZmZlcl9pZHggPj0gYjNkZmdfbmJ1ZikKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0KLQlidWYgPSAmZmdkZXYtPmJ1ZmZlcnNbdy5idWZmZXJfaWR4XTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKLQotCWlmIChidWYtPnN0YXRlID09IEIzREZHX0JVRkZFUl9QT1BVTEFURUQpIHsKLQkJciA9IHcudGltZW91dDsKLQkJZ290byBvdXRfdHJpcGxldHNfZHJvcHBlZDsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKLQotCXdoZW4gPSBnZXRfY3N0YXRlX2NoYW5nZShmZ2Rldik7Ci0JaWYgKHcudGltZW91dCA+IDApIHsKLQkJciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGZnZGV2LT5idWZmZXJfd2FpdHF1ZXVlLAotCQkJaXNfZXZlbnRfcmVhZHkoZmdkZXYsIGJ1Ziwgd2hlbiksCi0JCQkody50aW1lb3V0ICogSFopIC8gMTAwMCk7Ci0KLQkJaWYgKHVubGlrZWx5KHIgPCAwKSkKLQkJCWdvdG8gb3V0OwotCi0JCXcudGltZW91dCA9IHIgKiAxMDAwIC8gSFo7Ci0JfSBlbHNlIHsKLQkJciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShmZ2Rldi0+YnVmZmVyX3dhaXRxdWV1ZSwKLQkJCWlzX2V2ZW50X3JlYWR5KGZnZGV2LCBidWYsIHdoZW4pKTsKLQotCQlpZiAodW5saWtlbHkocikpIHsKLQkJCXIgPSAtRVJFU1RBUlRTWVM7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCS8qIFRPRE86IEluZm9ybSB0aGUgdXNlciB2aWEgZmllbGQocykgaW4gdz8gKi8KLQlpZiAoIWZnZGV2LT50cmFuc21pc3Npb25fZW5hYmxlZCB8fCB3aGVuICE9IGdldF9jc3RhdGVfY2hhbmdlKGZnZGV2KSkgewotCQlyID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZnZGV2LT5idWZmZXJfbG9jaywgZmxhZ3MpOwotCi0JaWYgKGJ1Zi0+c3RhdGUgIT0gQjNERkdfQlVGRkVSX1BPUFVMQVRFRCkgewotCQlyID0gLUVUSU1FRE9VVDsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQotCWJ1Zi0+c3RhdGUgPSBCM0RGR19CVUZGRVJfUE9MTEVEOwotCi1vdXRfdHJpcGxldHNfZHJvcHBlZDoKLQotCS8qIElSUXMgYWxyZWFkeSBkaXNhYmxlZCBieSBzcGluX2xvY2tfaXJxc2F2ZSBhYm92ZS4gKi8KLQlzcGluX2xvY2soJmZnZGV2LT50cmlwbGV0c19kcm9wcGVkX2xvY2spOwotCXcudHJpcGxldHNfZHJvcHBlZCA9IGZnZGV2LT50cmlwbGV0c19kcm9wcGVkOwotCWZnZGV2LT50cmlwbGV0c19kcm9wcGVkID0gMDsKLQlzcGluX3VubG9jaygmZmdkZXYtPnRyaXBsZXRzX2Ryb3BwZWRfbG9jayk7Ci0KLW91dF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7Ci0JaWYgKGNvcHlfdG9fdXNlcihhcmcsICZ3LCBzaXplb2YodykpKQotCQlyID0gLUVGQVVMVDsKLW91dDoKLQlyZXR1cm4gcjsKLX0KLQotLyogbW1hcCBwYWdlIGZhdWx0IGhhbmRsZXIgKi8KLXN0YXRpYyBpbnQgYjNkZmdfdm1hX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCXN0cnVjdCB2bV9mYXVsdCAqdm1mKQotewotCXN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2ID0gdm1hLT52bV9maWxlLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBvZmYgPSB2bWYtPnBnb2ZmIDw8IFBBR0VfU0hJRlQ7Ci0JdW5zaWduZWQgaW50IGZyYW1lX3NpemUgPSBmZ2Rldi0+ZnJhbWVfc2l6ZTsKLQl1bnNpZ25lZCBpbnQgYnVmX3NpemUgPSBmcmFtZV9zaXplICogQjNERkdfRlJBTUVTX1BFUl9CVUZGRVI7Ci0JdW5zaWduZWQgY2hhciAqYWRkcjsKLQotCS8qIGRldGVybWluZSB3aGljaCBidWZmZXIgdGhlIG9mZnNldCBsaWVzIHdpdGhpbiAqLwotCXVuc2lnbmVkIGludCBidWZfaWR4ID0gb2ZmIC8gYnVmX3NpemU7Ci0JLyogYW5kIHRoZSBvZmZzZXQgaW50byB0aGUgYnVmZmVyICovCi0JdW5zaWduZWQgaW50IGJ1Zl9vZmYgPSBvZmYgJSBidWZfc2l6ZTsKLQotCS8qIGRldGVybWluZSB3aGljaCBmcmFtZSBpbnNpZGUgdGhlIGJ1ZmZlciB0aGUgb2Zmc2V0IGxpZXMgaW4gKi8KLQl1bnNpZ25lZCBpbnQgZnJtX2lkeCA9IGJ1Zl9vZmYgLyBmcmFtZV9zaXplOwotCS8qIGFuZCB0aGUgb2Zmc2V0IGludG8gdGhlIGZyYW1lICovCi0JdW5zaWduZWQgaW50IGZybV9vZmYgPSBidWZfb2ZmICUgZnJhbWVfc2l6ZTsKLQotCWlmICh1bmxpa2VseShidWZfaWR4ID49IGIzZGZnX25idWYpKQotCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwotCi0JYWRkciA9IGZnZGV2LT5idWZmZXJzW2J1Zl9pZHhdLmZyYW1lW2ZybV9pZHhdICsgZnJtX29mZjsKLQl2bV9pbnNlcnRfcGZuKHZtYSwgKHVuc2lnbmVkIGxvbmcpdm1mLT52aXJ0dWFsX2FkZHJlc3MsCi0JCQkgIHZpcnRfdG9fcGh5cyhhZGRyKSA+PiBQQUdFX1NISUZUKTsKLQotCXJldHVybiBWTV9GQVVMVF9OT1BBR0U7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgYjNkZmdfdm1fb3BzID0gewotCS5mYXVsdCA9IGIzZGZnX3ZtYV9mYXVsdCwKLX07Ci0KLXN0YXRpYyBpbnQgZ2V0X3dhbmRfc3RhdHVzKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2LCBpbnQgX191c2VyICphcmcpCi17Ci0JdTMyIHduZHN0YXQgPSBiM2RmZ19yZWFkMzIoZmdkZXYsIEIzRF9SRUdfV0FORF9TVFMpOwotCWRldl9kYmcoJmZnZGV2LT5wZGV2LT5kZXYsICJ3YW5kIHN0YXR1cyAleFxuIiwgd25kc3RhdCk7Ci0JcmV0dXJuIF9fcHV0X3VzZXIod25kc3RhdCAmIDB4MSwgYXJnKTsKLX0KLQotc3RhdGljIGludCBlbmFibGVfdHJhbnNtaXNzaW9uKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJmZnZGV2LT5wZGV2LT5kZXY7Ci0KLQlkZXZfZGJnKGRldiwgImVuYWJsZSB0cmFuc21pc3Npb25cbiIpOwotCi0JLyogY2hlY2sgdGhlIGNhYmxlIGlzIHBsdWdnZWQgaW4uICovCi0JaWYgKCFiM2RmZ19yZWFkMzIoZmdkZXYsIEIzRF9SRUdfV0FORF9TVFMpKSB7Ci0JCWRldl9kYmcoZGV2LCAiY2Fubm90IHN0YXJ0IHRyYW5zbWlzc2lvbiB3aXRob3V0IHdhbmRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7Ci0KLQkvKiBIYW5kbGUgcmFjaW5nIGVuYWJsZV90cmFuc21pc3Npb24gY2FsbHMuICovCi0JaWYgKGZnZGV2LT50cmFuc21pc3Npb25fZW5hYmxlZCkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jc3Bpbl9sb2NrKCZmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZF9sb2NrKTsKLQlmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZCA9IDA7Ci0Jc3Bpbl91bmxvY2soJmZnZGV2LT50cmlwbGV0c19kcm9wcGVkX2xvY2spOwotCi0JZmdkZXYtPnRyaXBsZXRfcmVhZHkgPSAwOwotCWZnZGV2LT5jdXJfZG1hX2ZyYW1lX2lkeCA9IC0xOwotCWZnZGV2LT50cmFuc21pc3Npb25fZW5hYmxlZCA9IDE7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKLQotCS8qIEVuYWJsZSBETUEgYW5kIGNhYmxlIHN0YXR1cyBpbnRlcnJ1cHRzLiAqLwotCWIzZGZnX3dyaXRlMzIoZmdkZXYsIEIzRF9SRUdfSFdfQ1RSTCwgMHgwMyk7Ci0KLW91dDoKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZGlzYWJsZV90cmFuc21pc3Npb24oc3RydWN0IGIzZGZnX2RldiAqZmdkZXYpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJmZnZGV2LT5wZGV2LT5kZXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MzIgdG1wOwotCi0JZGV2X2RiZyhkZXYsICJkaXNhYmxlIHRyYW5zbWlzc2lvblxuIik7Ci0KLQkvKiBndWFyYW50ZWUgdGhhdCBubyBtb3JlIGludGVycnVwdHMgd2lsbCBiZSBzZXJ2aWNlZCAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKLQlmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQgPSAwOwotCi0JYjNkZmdfd3JpdGUzMihmZ2RldiwgQjNEX1JFR19IV19DVFJMLCAwKTsKLQotCS8qIEZJWE1FOiB0ZW1wb3JhcnkgZGVidWdnaW5nIG9ubHkuIGlmIHRoZSBib2FyZCBzdG9wcyB0cmFuc21pdHRpbmcsCi0JICogaGl0dGluZyBjdHJsK2MgYW5kIHNlZWluZyB0aGlzIG1lc3NhZ2UgaXMgdXNlZnVsIGZvciBkZXRlcm1pbmluZwotCSAqIHRoZSBzdGF0ZSBvZiB0aGUgYm9hcmQuICovCi0JdG1wID0gYjNkZmdfcmVhZDMyKGZnZGV2LCBCM0RfUkVHX0RNQV9TVFMpOwotCWRldl9kYmcoZGV2LCAiRE1BX1NUUyByZWFkcyAleCBhZnRlciBUWCBzdG9wcGVkXG4iLCB0bXApOwotCi0JZGVxdWV1ZV9hbGxfYnVmZmVycyhmZ2Rldik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7Ci0KLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmZnZGV2LT5idWZmZXJfd2FpdHF1ZXVlKTsKLX0KLQotc3RhdGljIGludCBzZXRfdHJhbnNtaXNzaW9uKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2LCBpbnQgZW5hYmxlZCkKLXsKLQlpbnQgcmVzID0gMDsKLQotCWlmIChlbmFibGVkICYmICFmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQpCi0JCXJlcyA9IGVuYWJsZV90cmFuc21pc3Npb24oZmdkZXYpOwotCWVsc2UgaWYgKCFlbmFibGVkICYmIGZnZGV2LT50cmFuc21pc3Npb25fZW5hYmxlZCkKLQkJZGlzYWJsZV90cmFuc21pc3Npb24oZmdkZXYpOwotCi0JcmV0dXJuIHJlczsKLX0KLQotLyogQ2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0LiAqLwotc3RhdGljIHZvaWQgaGFuZGxlX2NzdGF0ZV91bnBsdWcoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYpCi17Ci0JLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cy4gKi8KLQliM2RmZ193cml0ZTMyKGZnZGV2LCBCM0RfUkVHX0hXX0NUUkwsIDApOwotCi0JLyogU3RvcCB0cmFuc21pc3Npb24uICovCi0Jc3Bpbl9sb2NrKCZmZ2Rldi0+YnVmZmVyX2xvY2spOwotCWZnZGV2LT50cmFuc21pc3Npb25fZW5hYmxlZCA9IDA7Ci0KLQlmZ2Rldi0+Y3VyX2RtYV9mcmFtZV9pZHggPSAtMTsKLQlmZ2Rldi0+dHJpcGxldF9yZWFkeSA9IDA7Ci0JaWYgKGZnZGV2LT5jdXJfZG1hX2ZyYW1lX2FkZHIpIHsKLQkJcGNpX3VubWFwX3NpbmdsZShmZ2Rldi0+cGRldiwgZmdkZXYtPmN1cl9kbWFfZnJhbWVfYWRkciwKLQkJCQkgZmdkZXYtPmZyYW1lX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCWZnZGV2LT5jdXJfZG1hX2ZyYW1lX2FkZHIgPSAwOwotCX0KLQlkZXF1ZXVlX2FsbF9idWZmZXJzKGZnZGV2KTsKLQlzcGluX3VubG9jaygmZmdkZXYtPmJ1ZmZlcl9sb2NrKTsKLX0KLQotLyogQ2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0LiAqLwotc3RhdGljIHZvaWQgaGFuZGxlX2NzdGF0ZV9jaGFuZ2Uoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYpCi17Ci0JdTMyIGNzdGF0ZSA9IGIzZGZnX3JlYWQzMihmZ2RldiwgQjNEX1JFR19XQU5EX1NUUyk7Ci0JdW5zaWduZWQgbG9uZyB3aGVuOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZmZ2Rldi0+cGRldi0+ZGV2OwotCi0JZGV2X2RiZyhkZXYsICJjYWJsZSBzdGF0ZSBjaGFuZ2U6ICV1XG4iLCBjc3RhdGUpOwotCi0JLyoKLQkgKiBXaGVuIHRoZSB3YW5kIGlzIHVucGx1Z2dlZCB3ZSByZXNldCBvdXIgc3RhdGUuIFRoZSBoYXJkd2FyZSB3aWxsCi0JICogaGF2ZSBkb25lIHRoZSBzYW1lIGludGVybmFsbHkuCi0JICoKLQkgKiBOb3RlIHdlIHNob3VsZCBuZXZlciBzZWUgYSBjYWJsZSAqcGx1Z2dlZCogZXZlbnQsIGFzIGludGVycnVwdHMKLQkgKiBzaG91bGQgb25seSBiZSBlbmFibGVkIHdoZW4gdHJhbnNtaXR0aW5nLCB3aGljaCByZXF1aXJlcyB0aGUgY2FibGUKLQkgKiB0byBiZSBwbHVnZ2VkLiBJZiB3ZSBkbyBzZWUgb25lIGl0IHByb2JhYmx5IG1lYW5zIHRoZSBjYWJsZSBoYXMgYmVlbgotCSAqIHVucGx1Z2dlZCBhbmQgcmUtcGx1Z2dlZCB2ZXJ5IHJhcGlkbHkuIFBvc3NpYmx5IGJlY2F1c2UgaXQgaGFzIGEKLQkgKiBicm9rZW4gd2lyZSBhbmQgaXMgbW9tZW50YXJpbHkgbG9zaW5nIGNvbnRhY3QuCi0JICoKLQkgKiBUT0RPOiBBdCB0aGUgbW9tZW50IGlmIHlvdSBwbHVnIGluIHRoZSBjYWJsZSB0aGVuIGVuYWJsZSB0cmFuc21pc3Npb24KLQkgKiB0aGUgaGFyZHdhcmUgd2lsbCByYWlzZSBhIGNvdXBsZSBvZiBzcHVyaW91cyBpbnRlcnJ1cHRzLCBzbwotCSAqIGp1c3QgaWdub3JlIHRoZW0gZm9yIG5vdy4KLQkgKgotCSAqIE9uY2UgdGhlIGhhcmR3YXJlIGlzIGZpeGVkIHdlIHNob3VsZCBjb21wbGFpbiBhbmQgdHJlYXQgaXQgYXMgYW4KLQkgKiB1bnBsdWcuIE9yIGF0IGxlYXN0IHRyYWNrIGhvdyBmcmVxdWVudGx5IGl0IGlzIGhhcHBlbmluZyBhbmQgZG8KLQkgKiBzbyBpZiB0b28gbWFueSBjb21lIGluLgotCSAqLwotCWlmIChjc3RhdGUpIHsKLQkJZGV2X3dhcm4oZGV2LCAiaWdub3JpbmcgdW5leHBlY3RlZCBwbHVnIGV2ZW50XG4iKTsKLQkJcmV0dXJuOwotCX0KLQloYW5kbGVfY3N0YXRlX3VucGx1ZyhmZ2Rldik7Ci0KLQkvKgotCSAqIFJlY29yZCBjYWJsZSBzdGF0ZSBjaGFuZ2UgdGltZXN0YW1wICYgd2FrZSBhbnlvbmUgd2FpdGluZwotCSAqIG9uIGEgY2FibGUgc3RhdGUgY2hhbmdlLiBCZSBwYXJhbm9pZCBhYm91dCBlbnN1cmluZyBldmVudHMKLQkgKiBhcmUgbm90IG1pc3NlZCBpZiB3ZSBzb21laG93IGdldCB0d28gaW50ZXJydXB0cyBpbiBhIGppZmZ5LgotCSAqLwotCXNwaW5fbG9jaygmZmdkZXYtPmNzdGF0ZV9sb2NrKTsKLQl3aGVuID0gamlmZmllc182NDsKLQlpZiAod2hlbiA8PSBmZ2Rldi0+Y3N0YXRlX3RzdGFtcCkKLQkJd2hlbiA9IGZnZGV2LT5jc3RhdGVfdHN0YW1wICsgMTsKLQlmZ2Rldi0+Y3N0YXRlX3RzdGFtcCA9IHdoZW47Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZmZ2Rldi0+YnVmZmVyX3dhaXRxdWV1ZSk7Ci0Jc3Bpbl91bmxvY2soJmZnZGV2LT5jc3RhdGVfbG9jayk7Ci19Ci0KLS8qIENhbGxlZCB3aXRoIGJ1ZmZlcl9sb2NrIGhlbGQuICovCi1zdGF0aWMgdm9pZCB0cmFuc2Zlcl9jb21wbGV0ZShzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldikKLXsKLQlzdHJ1Y3QgYjNkZmdfYnVmZmVyICpidWY7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJmZnZGV2LT5wZGV2LT5kZXY7Ci0KLQlwY2lfdW5tYXBfc2luZ2xlKGZnZGV2LT5wZGV2LCBmZ2Rldi0+Y3VyX2RtYV9mcmFtZV9hZGRyLAotCQkJIGZnZGV2LT5mcmFtZV9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCWZnZGV2LT5jdXJfZG1hX2ZyYW1lX2FkZHIgPSAwOwotCi0JYnVmID0gbGlzdF9lbnRyeShmZ2Rldi0+YnVmZmVyX3F1ZXVlLm5leHQsIHN0cnVjdCBiM2RmZ19idWZmZXIsIGxpc3QpOwotCi0JZGV2X2RiZyhkZXYsICJoYW5kbGUgZnJhbWUgY29tcGxldGlvblxuIik7Ci0JaWYgKGZnZGV2LT5jdXJfZG1hX2ZyYW1lX2lkeCA9PSBCM0RGR19GUkFNRVNfUEVSX0JVRkZFUiAtIDEpIHsKLQotCQkvKiBsYXN0IGZyYW1lIG9mIHRoYXQgdHJpcGxldCBjb21wbGV0ZWQgKi8KLQkJZGV2X2RiZyhkZXYsICJ0cmlwbGV0IGNvbXBsZXRlZFxuIik7Ci0JCWJ1Zi0+c3RhdGUgPSBCM0RGR19CVUZGRVJfUE9QVUxBVEVEOwotCQlsaXN0X2RlbF9pbml0KCZidWYtPmxpc3QpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmZnZGV2LT5idWZmZXJfd2FpdHF1ZXVlKTsKLQl9Ci19Ci0KLS8qCi0gKiBDYWxsZWQgd2l0aCBidWZmZXJfbG9jayBoZWxkLgotICoKLSAqIE5vdGUgdGhhdCBpZHggaXMgdGhlICgxLWJhc2VkKSAqbmV4dCogZnJhbWUgdG8gYmUgdHJhbnNmZXJyZWQsIHdoaWxlCi0gKiBjdXJfZG1hX2ZyYW1lX2lkeCBpcyB0aGUgKDAtYmFzZWQpICpsYXN0KiBmcmFtZSB0byBoYXZlIGJlZW4gdHJhbnNmZXJyZWQgKG9yCi0gKiAtMSBpZiBub25lKS4gVGh1cyB0aGVyZSBzaG91bGQgYmUgYSBkaWZmZXJlbmNlIG9mIDIgYmV0d2VlbiB0aGVtLgotICovCi1zdGF0aWMgYm9vbCBzZXR1cF9uZXh0X2ZyYW1lX3RyYW5zZmVyKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2LCBpbnQgaWR4KQotewotCXN0cnVjdCBiM2RmZ19idWZmZXIgKmJ1ZjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZmdkZXYtPnBkZXYtPmRldjsKLQlib29sIG5lZWRfYWNrID0gMTsKLQotCWRldl9kYmcoZGV2LCAicHJvZ3JhbSBETUEgdHJhbnNmZXIgZm9yIG5leHQgZnJhbWU6ICVkXG4iLCBpZHgpOwotCi0JYnVmID0gbGlzdF9lbnRyeShmZ2Rldi0+YnVmZmVyX3F1ZXVlLm5leHQsIHN0cnVjdCBiM2RmZ19idWZmZXIsIGxpc3QpOwotCWlmIChpZHggPT0gZmdkZXYtPmN1cl9kbWFfZnJhbWVfaWR4ICsgMikgewotCQlpZiAoc2V0dXBfZnJhbWVfdHJhbnNmZXIoZmdkZXYsIGJ1ZiwgaWR4IC0gMSkpCi0JCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0byBtYXAgRE1BIGJ1ZmZlclxuIik7Ci0JCW5lZWRfYWNrID0gMDsKLQl9IGVsc2UgewotCQlkZXZfZXJyKGRldiwgImZyYW1lIG1pc21hdGNoLCBnb3QgJWQsIGV4cGVjdGVkICVkXG4iLAotCQkJaWR4LCBmZ2Rldi0+Y3VyX2RtYV9mcmFtZV9pZHggKyAyKTsKLQotCQkvKiBGSVhNRTogaGFuZGxlIGRyb3BwZWQgdHJpcGxldHMgaGVyZSAqLwotCX0KLQotCXJldHVybiBuZWVkX2FjazsKLX0KLQotc3RhdGljIGlycXJldHVybl90IGIzZGZnX2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCXN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2ID0gZGV2X2lkOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZmZ2Rldi0+cGRldi0+ZGV2OwotCXUzMiBzdHM7Ci0JdTggZHJvcHBlZDsKLQlib29sIG5lZWRfYWNrID0gMTsKLQlpcnFyZXR1cm5fdCByZXMgPSBJUlFfSEFORExFRDsKLQotCXN0cyA9IGIzZGZnX3JlYWQzMihmZ2RldiwgQjNEX1JFR19ETUFfU1RTKTsKLQlpZiAodW5saWtlbHkoc3RzID09IDApKSB7Ci0JCWRldl93YXJuKGRldiwgImlnbm9yZSBpbnRlcnJ1cHQsIERNQSBzdGF0dXMgaXMgMFxuIik7Ci0JCXJlcyA9IElSUV9OT05FOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAodW5saWtlbHkoIWZnZGV2LT50cmFuc21pc3Npb25fZW5hYmxlZCkpIHsKLQkJZGV2X3dhcm4oZGV2LCAiaWdub3JlIGludGVycnVwdCwgVFggZGlzYWJsZWRcbiIpOwotCQlyZXMgPSBJUlFfSEFORExFRDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogSGFuZGxlIGRyb3BwZWQgZnJhbWVzLCBhcyByZXBvcnRlZCBieSB0aGUgaGFyZHdhcmUuICovCi0JZHJvcHBlZCA9IChzdHMgPj4gOCkgJiAweGZmOwotCWRldl9kYmcoZGV2LCAiaW50cjogRE1BX1NUUz0lMDh4IChkcm9wPSVkIGNvbXA9JWQgbmV4dD0lZClcbiIsCi0JCXN0cywgZHJvcHBlZCwgISEoc3RzICYgMHg0KSwgc3RzICYgMHgzKTsKLQlpZiAodW5saWtlbHkoZHJvcHBlZCA+IDApKSB7Ci0JCXNwaW5fbG9jaygmZmdkZXYtPnRyaXBsZXRzX2Ryb3BwZWRfbG9jayk7Ci0JCWZnZGV2LT50cmlwbGV0c19kcm9wcGVkICs9IGRyb3BwZWQ7Ci0JCXNwaW5fdW5sb2NrKCZmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZF9sb2NrKTsKLQl9Ci0KLQkvKiBIYW5kbGUgYSBjYWJsZSBzdGF0ZSBjaGFuZ2UgKGkuZS4gdGhlIHdhbmQgYmVpbmcgdW5wbHVnZ2VkKS4gKi8KLQlpZiAoc3RzICYgMHgwOCkgewotCQloYW5kbGVfY3N0YXRlX2NoYW5nZShmZ2Rldik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXNwaW5fbG9jaygmZmdkZXYtPmJ1ZmZlcl9sb2NrKTsKLQlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmZmdkZXYtPmJ1ZmZlcl9xdWV1ZSkpKSB7Ci0KLQkJLyogRklYTUUgbmVlZCBtb3JlIHNhbml0eSBjaGVja2luZyBoZXJlICovCi0JCWRldl9pbmZvKGRldiwgImJ1ZmZlciBub3QgcmVhZHkgZm9yIG5leHQgdHJhbnNmZXJcbiIpOwotCQlmZ2Rldi0+dHJpcGxldF9yZWFkeSA9IDE7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQkvKiBIYXMgYSBmcmFtZSB0cmFuc2ZlciBiZWVuIGNvbXBsZXRlZD8gKi8KLQlpZiAoc3RzICYgMHg0KSB7Ci0JCXUzMiBkbWFfc3RhdHVzID0gYjNkZmdfcmVhZDMyKGZnZGV2LCBCM0RfUkVHX0VDMjIwX0RNQV9TVFMpOwotCi0JCS8qIENoZWNrIGZvciBETUEgZXJyb3JzIHJlcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZS4gKi8KLQkJaWYgKHVubGlrZWx5KGRtYV9zdGF0dXMgJiAweDEpKSB7Ci0JCQlkZXZfZXJyKGRldiwgIkVDMjIwIGVycm9yOiAlMDh4XG4iLCBkbWFfc3RhdHVzKTsKLQotCQkJLyogRklYTUUgZmxlc2ggb3V0IGVycm9yIGhhbmRsaW5nICovCi0JCQlnb3RvIG91dF91bmxvY2s7Ci0JCX0KLQotCQkvKiBTYW5pdHkgY2hlY2ssIHdlIHNob3VsZCBoYXZlIGEgZnJhbWUgaW5kZXggYXQgdGhpcyBwb2ludC4gKi8KLQkJaWYgKHVubGlrZWx5KGZnZGV2LT5jdXJfZG1hX2ZyYW1lX2lkeCA9PSAtMSkpIHsKLQkJCWRldl9lcnIoZGV2LCAiY29tcGxldGVkIGJ1dCBubyBsYXN0IGlkeD9cbiIpOwotCi0JCQkvKiBGSVhNRSBmbGVzaCBvdXQgZXJyb3IgaGFuZGxpbmcgKi8KLQkJCWdvdG8gb3V0X3VubG9jazsKLQkJfQotCi0JCXRyYW5zZmVyX2NvbXBsZXRlKGZnZGV2KTsKLQl9Ci0KLQkvKiBJcyB0aGVyZSBhbm90aGVyIGZyYW1lIHRyYW5zZmVyIHBlbmRpbmc/ICovCi0JaWYgKHN0cyAmIDB4MykKLQkJbmVlZF9hY2sgPSBzZXR1cF9uZXh0X2ZyYW1lX3RyYW5zZmVyKGZnZGV2LCBzdHMgJiAweDMpOwotCWVsc2UKLQkJZmdkZXYtPmN1cl9kbWFfZnJhbWVfaWR4ID0gLTE7Ci0KLW91dF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2soJmZnZGV2LT5idWZmZXJfbG9jayk7Ci1vdXQ6Ci0JaWYgKG5lZWRfYWNrKSB7Ci0JCWRldl9kYmcoZGV2LCAiYWNrbm93bGVkZ2luZyBpbnRlcnJ1cHRcbiIpOwotCQliM2RmZ193cml0ZTMyKGZnZGV2LCBCM0RfUkVHX0VDMjIwX0RNQV9TVFMsIDB4MGIpOwotCX0KLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgaW50IGIzZGZnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jc3RydWN0IGIzZGZnX2RldiAqZmdkZXYgPQotCQljb250YWluZXJfb2YoaW5vZGUtPmlfY2Rldiwgc3RydWN0IGIzZGZnX2RldiwgY2hhcmRldik7Ci0KLQlkZXZfZGJnKCZmZ2Rldi0+cGRldi0+ZGV2LCAib3BlblxuIik7Ci0JZmlscC0+cHJpdmF0ZV9kYXRhID0gZmdkZXY7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYjNkZmdfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlkZXZfZGJnKCZmZ2Rldi0+cGRldi0+ZGV2LCAicmVsZWFzZVxuIik7Ci0JZGlzYWJsZV90cmFuc21pc3Npb24oZmdkZXYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgbG9uZyBiM2RmZ19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0Jc3RydWN0IGIzZGZnX2RldiAqZmdkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgQjNERkdfSU9DR0ZSTVNaOgotCQlyZXR1cm4gX19wdXRfdXNlcihmZ2Rldi0+ZnJhbWVfc2l6ZSwgKGludCBfX3VzZXIgKikgYXJnKTsKLQljYXNlIEIzREZHX0lPQ0dXQU5EU1RBVDoKLQkJcmV0dXJuIGdldF93YW5kX3N0YXR1cyhmZ2RldiwgKGludCBfX3VzZXIgKikgYXJnKTsKLQljYXNlIEIzREZHX0lPQ1RUUkFOUzoKLQkJcmV0dXJuIHNldF90cmFuc21pc3Npb24oZmdkZXYsIChpbnQpIGFyZyk7Ci0JY2FzZSBCM0RGR19JT0NUUVVFVUVCVUY6Ci0JCXJldHVybiBxdWV1ZV9idWZmZXIoZmdkZXYsIChpbnQpIGFyZyk7Ci0JY2FzZSBCM0RGR19JT0NUUE9MTEJVRjoKLQkJcmV0dXJuIHBvbGxfYnVmZmVyKGZnZGV2LCAodm9pZCBfX3VzZXIgKikgYXJnKTsKLQljYXNlIEIzREZHX0lPQ1RXQUlUQlVGOgotCQlyZXR1cm4gd2FpdF9idWZmZXIoZmdkZXYsICh2b2lkIF9fdXNlciAqKSBhcmcpOwotCWRlZmF1bHQ6Ci0JCWRldl9kYmcoJmZnZGV2LT5wZGV2LT5kZXYsICJ1bnJlY29nbmlzZWQgaW9jdGwgJXhcbiIsIGNtZCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBiM2RmZ19wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICpwb2xsX3RhYmxlKQotewotCXN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHdoZW47Ci0JaW50IGk7Ci0JaW50IHIgPSAwOwotCi0Jd2hlbiA9IGdldF9jc3RhdGVfY2hhbmdlKGZnZGV2KTsKLQlwb2xsX3dhaXQoZmlscCwgJmZnZGV2LT5idWZmZXJfd2FpdHF1ZXVlLCBwb2xsX3RhYmxlKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKLQlmb3IgKGkgPSAwOyBpIDwgYjNkZmdfbmJ1ZjsgaSsrKSB7Ci0JCWlmIChmZ2Rldi0+YnVmZmVyc1tpXS5zdGF0ZSA9PSBCM0RGR19CVUZGRVJfUE9QVUxBVEVEKSB7Ci0JCQlyID0gUE9MTElOIHwgUE9MTFJETk9STTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZnZGV2LT5idWZmZXJfbG9jaywgZmxhZ3MpOwotCi0JLyogVE9ETzogQ29uZmlybSB0aGlzIGlzIGhvdyB3ZSB3YW50IHRvIGNvbW11bmljYXRlIHRoZSBjaGFuZ2UuICovCi0JaWYgKCFmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQgfHwgd2hlbiAhPSBnZXRfY3N0YXRlX2NoYW5nZShmZ2RldikpCi0JCXIgPSBQT0xMRVJSOwotCi0JcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyBpbnQgYjNkZmdfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IGIzZGZnX2RldiAqZmdkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7Ci0JdW5zaWduZWQgbG9uZyB2c2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKLQl1bnNpZ25lZCBsb25nIGJ1ZmRhdGFsZW4gPSBiM2RmZ19uYnVmICogZmdkZXYtPmZyYW1lX3NpemUgKiAzOwotCXVuc2lnbmVkIGxvbmcgcHNpemUgPSBidWZkYXRhbGVuIC0gb2Zmc2V0OwotCWludCByID0gMDsKLQotCWlmICh2c2l6ZSA8PSBwc2l6ZSkgewotCQl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPIHwgVk1fUkVTRVJWRUQgfCBWTV9DQU5fTk9OTElORUFSIHwKLQkJCQkgVk1fUEZOTUFQOwotCQl2bWEtPnZtX29wcyA9ICZiM2RmZ192bV9vcHM7Ci0JfSBlbHNlIHsKLQkJciA9IC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGIzZGZnX2ZvcHMgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLm9wZW4gPSBiM2RmZ19vcGVuLAotCS5yZWxlYXNlID0gYjNkZmdfcmVsZWFzZSwKLQkudW5sb2NrZWRfaW9jdGwgPSBiM2RmZ19pb2N0bCwKLQkucG9sbCA9IGIzZGZnX3BvbGwsCi0JLm1tYXAgPSBiM2RmZ19tbWFwLAotfTsKLQotc3RhdGljIHZvaWQgZnJlZV9hbGxfZnJhbWVfYnVmZmVycyhzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldikKLXsKLQlpbnQgaSwgajsKLQlmb3IgKGkgPSAwOyBpIDwgYjNkZmdfbmJ1ZjsgaSsrKQotCQlmb3IgKGogPSAwOyBqIDwgQjNERkdfRlJBTUVTX1BFUl9CVUZGRVI7IGorKykKLQkJCWtmcmVlKGZnZGV2LT5idWZmZXJzW2ldLmZyYW1lW2pdKTsKLQlrZnJlZShmZ2Rldi0+YnVmZmVycyk7Ci19Ci0KLS8qIGluaXRpYWxpemUgZGV2aWNlIGFuZCBhbnkgZGF0YSBzdHJ1Y3R1cmVzLiBjYWxsZWQgYmVmb3JlIGFueSBpbnRlcnJ1cHRzCi0gKiBhcmUgZW5hYmxlZC4gKi8KLXN0YXRpYyBpbnQgYjNkZmdfaW5pdF9kZXYoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYpCi17Ci0JaW50IGksIGo7Ci0JdTMyIGZybV9zaXplID0gYjNkZmdfcmVhZDMyKGZnZGV2LCBCM0RfUkVHX0ZSTV9TSVpFKTsKLQotCS8qIERpc2FibGUgaW50ZXJydXB0cy4gSW4gYWJub3JtYWwgY2lyY3Vtc3RhbmNlcyAoZS5nLiBhZnRlciBhIGNyYXNoKQotCSAqIHRoZSBib2FyZCBtYXkgc3RpbGwgYmUgdHJhbnNtaXR0aW5nIGZyb20gdGhlIHByZXZpb3VzIHNlc3Npb24uIElmIHdlCi0JICogZW5zdXJlIHRoYXQgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgYmVmb3JlIHdlIGxhdGVyIGVuYWJsZSB0aGVtLCB3ZQotCSAqIGFyZSBzdXJlIHRvIGNhcHR1cmUgYSB0cmlwbGV0IGZyb20gdGhlIHN0YXJ0LCByYXRoZXIgdGhhbiBzdGFydGluZwotCSAqIGZyb20gZnJhbWUgMiBvciAzLiBEaXNhYmxpbmcgaW50ZXJydXB0cyBjYXVzZXMgdGhlIEZHIHRvIHRocm93IGF3YXkKLQkgKiBhbGwgYnVmZmVyZWQgZGF0YSBhbmQgc3RvcCBidWZmZXJpbmcgbW9yZSB1bnRpbCBpbnRlcnJ1cHRzIGFyZQotCSAqIGVuYWJsZWQgYWdhaW4uCi0JICovCi0JYjNkZmdfd3JpdGUzMihmZ2RldiwgQjNEX1JFR19IV19DVFJMLCAwKTsKLQotCWZnZGV2LT5mcmFtZV9zaXplID0gZnJtX3NpemUgKiA0MDk2OwotCWZnZGV2LT5idWZmZXJzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGIzZGZnX2J1ZmZlcikgKiBiM2RmZ19uYnVmLAotCQkJCSBHRlBfS0VSTkVMKTsKLQlpZiAoIWZnZGV2LT5idWZmZXJzKQotCQlnb3RvIGVycl9ub19idWY7Ci0JZm9yIChpID0gMDsgaSA8IGIzZGZnX25idWY7IGkrKykgewotCQlzdHJ1Y3QgYjNkZmdfYnVmZmVyICpidWYgPSAmZmdkZXYtPmJ1ZmZlcnNbaV07Ci0JCWZvciAoaiA9IDA7IGogPCBCM0RGR19GUkFNRVNfUEVSX0JVRkZFUjsgaisrKSB7Ci0JCQlidWYtPmZyYW1lW2pdID0ga21hbGxvYyhmZ2Rldi0+ZnJhbWVfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIWJ1Zi0+ZnJhbWVbal0pCi0JCQkJZ290byBlcnJfbm9fbWVtOwotCQl9Ci0JCUlOSVRfTElTVF9IRUFEKCZidWYtPmxpc3QpOwotCX0KLQotCUlOSVRfTElTVF9IRUFEKCZmZ2Rldi0+YnVmZmVyX3F1ZXVlKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZmZ2Rldi0+YnVmZmVyX3dhaXRxdWV1ZSk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmZnZGV2LT5idWZmZXJfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmZnZGV2LT5jc3RhdGVfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmZnZGV2LT50cmlwbGV0c19kcm9wcGVkX2xvY2spOwotCXJldHVybiAwOwotCi1lcnJfbm9fbWVtOgotCWZyZWVfYWxsX2ZyYW1lX2J1ZmZlcnMoZmdkZXYpOwotZXJyX25vX2J1ZjoKLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotLyogZmluZCBuZXh0IGZyZWUgbWlub3IgbnVtYmVyLCByZXR1cm5zIC0xIGlmIG5vbmUgYXJlIGF2YWlsYWJpbGUgKi8KLXN0YXRpYyBpbnQgZ2V0X2ZyZWVfbWlub3Iodm9pZCkKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgQjNERkdfTUFYX0RFVlM7IGkrKykgewotCQlpZiAoYjNkZmdfZGV2aWNlc1tpXSA9PSAwKQotCQkJcmV0dXJuIGk7Ci0JfQotCXJldHVybiAtMTsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgYjNkZmdfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2ID0ga3phbGxvYyhzaXplb2YoKmZnZGV2KSwgR0ZQX0tFUk5FTCk7Ci0JaW50IHIgPSAwOwotCWludCBtaW5vciA9IGdldF9mcmVlX21pbm9yKCk7Ci0JZGV2X3QgZGV2bm8gPSBNS0RFVihNQUpPUihiM2RmZ19kZXZ0KSwgbWlub3IpOwotCXVuc2lnbmVkIGxvbmcgcmVzX2xlbjsKLQlyZXNvdXJjZV9zaXplX3QgcmVzX2Jhc2U7Ci0KLQlpZiAoZmdkZXYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAobWlub3IgPCAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInRvbyBtYW55IGRldmljZXMgZm91bmQhXG4iKTsKLQkJciA9IC1FSU87Ci0JCWdvdG8gZXJyX2ZyZWU7Ci0JfQotCi0JYjNkZmdfZGV2aWNlc1ttaW5vcl0gPSAxOwotCWRldl9pbmZvKCZwZGV2LT5kZXYsICJwcm9iZSBkZXZpY2Ugd2l0aCBJUlEgJWRcbiIsIHBkZXYtPmlycSk7Ci0KLQljZGV2X2luaXQoJmZnZGV2LT5jaGFyZGV2LCAmYjNkZmdfZm9wcyk7Ci0JZmdkZXYtPmNoYXJkZXYub3duZXIgPSBUSElTX01PRFVMRTsKLQotCXIgPSBjZGV2X2FkZCgmZmdkZXYtPmNoYXJkZXYsIGRldm5vLCAxKTsKLQlpZiAocikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgYWRkIGNoYXIgZGV2aWNlXG4iKTsKLQkJZ290byBlcnJfcmVsZWFzZV9taW5vcjsKLQl9Ci0KLQlmZ2Rldi0+ZGV2ID0gZGV2aWNlX2NyZWF0ZSgKLQkJYjNkZmdfY2xhc3MsCi0JCSZwZGV2LT5kZXYsCi0JCWRldm5vLAotCQlkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldiksCi0JCURSSVZFUl9OQU1FICIlZCIsIG1pbm9yKTsKLQotCWlmIChJU19FUlIoZmdkZXYtPmRldikpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGNyZWF0ZSBkZXZpY2VcbiIpOwotCQlyID0gUFRSX0VSUihmZ2Rldi0+ZGV2KTsKLQkJZ290byBlcnJfZGVsX2NkZXY7Ci0JfQotCi0JciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwotCWlmIChyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBlbmFibGUgUENJIGRldmljZVxuIik7Ci0JCWdvdG8gZXJyX2Rldl91bnJlZzsKLQl9Ci0KLQlyZXNfbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBCM0RGR19CQVJfUkVHUyk7Ci0JaWYgKHJlc19sZW4gIT0gQjNERkdfUkVHU19MRU5HVEgpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCByZWdpc3RlciByZXNvdXJjZSBzaXplXG4iKTsKLQkJciA9IC1FSU87Ci0JCWdvdG8gZXJyX2Rpc2FibGU7Ci0JfQotCi0JaWYgKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBCM0RGR19CQVJfUkVHUykKLQkJCQkhPSAoSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX1NJWkVBTElHTikpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCByZXNvdXJjZSBmbGFnc1xuIik7Ci0JCXIgPSAtRUlPOwotCQlnb3RvIGVycl9kaXNhYmxlOwotCX0KLQlyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUklWRVJfTkFNRSk7Ci0JaWYgKHIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzXG4iKTsKLQkJZ290byBlcnJfZGlzYWJsZTsKLQl9Ci0KLQlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQotCXIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOwotCWlmIChyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvblxuIik7Ci0JCWdvdG8gZXJyX2ZyZWVfcmVzOwotCX0KLQotCXJlc19iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIEIzREZHX0JBUl9SRUdTKTsKLQlmZ2Rldi0+cmVncyA9IGlvcmVtYXBfbm9jYWNoZShyZXNfYmFzZSwgcmVzX2xlbik7Ci0JaWYgKCFmZ2Rldi0+cmVncykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZWdzIGlvcmVtYXAgZmFpbGVkXG4iKTsKLQkJciA9IC1FSU87Ci0JCWdvdG8gZXJyX2ZyZWVfcmVzOwotCX0KLQotCWZnZGV2LT5wZGV2ID0gcGRldjsKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgZmdkZXYpOwotCXIgPSBiM2RmZ19pbml0X2RldihmZ2Rldik7Ci0JaWYgKHIgPCAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBpbml0YWxpemUgZGV2aWNlXG4iKTsKLQkJZ290byBlcnJfdW5tYXA7Ci0JfQotCi0JciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgYjNkZmdfaW50ciwgSVJRRl9TSEFSRUQsIERSSVZFUl9OQU1FLCBmZ2Rldik7Ci0JaWYgKHIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGRuJ3QgcmVxdWVzdCBpcnEgJWRcbiIsIHBkZXYtPmlycSk7Ci0JCWdvdG8gZXJyX2ZyZWVfYnVmczsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX2ZyZWVfYnVmczoKLQlmcmVlX2FsbF9mcmFtZV9idWZmZXJzKGZnZGV2KTsKLWVycl91bm1hcDoKLQlpb3VubWFwKGZnZGV2LT5yZWdzKTsKLWVycl9mcmVlX3JlczoKLQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwotZXJyX2Rpc2FibGU6Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotZXJyX2Rldl91bnJlZzoKLQlkZXZpY2VfZGVzdHJveShiM2RmZ19jbGFzcywgZGV2bm8pOwotZXJyX2RlbF9jZGV2OgotCWNkZXZfZGVsKCZmZ2Rldi0+Y2hhcmRldik7Ci1lcnJfcmVsZWFzZV9taW5vcjoKLQliM2RmZ19kZXZpY2VzW21pbm9yXSA9IDA7Ci1lcnJfZnJlZToKLQlrZnJlZShmZ2Rldik7Ci0JcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBiM2RmZ19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IGIzZGZnX2RldiAqZmdkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0JdW5zaWduZWQgaW50IG1pbm9yID0gTUlOT1IoZmdkZXYtPmNoYXJkZXYuZGV2KTsKLQotCWRldl9kYmcoJnBkZXYtPmRldiwgInJlbW92ZVxuIik7Ci0KLQlmcmVlX2lycShwZGV2LT5pcnEsIGZnZGV2KTsKLQlpb3VubWFwKGZnZGV2LT5yZWdzKTsKLQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQlkZXZpY2VfZGVzdHJveShiM2RmZ19jbGFzcywgTUtERVYoTUFKT1IoYjNkZmdfZGV2dCksIG1pbm9yKSk7Ci0JY2Rldl9kZWwoJmZnZGV2LT5jaGFyZGV2KTsKLQlmcmVlX2FsbF9mcmFtZV9idWZmZXJzKGZnZGV2KTsKLQlrZnJlZShmZ2Rldik7Ci0JYjNkZmdfZGV2aWNlc1ttaW5vcl0gPSAwOwotfQotCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYjNkZmdfZHJpdmVyID0gewotCS5uYW1lID0gRFJJVkVSX05BTUUsCi0JLmlkX3RhYmxlID0gYjNkZmdfaWRzLAotCS5wcm9iZSA9IGIzZGZnX3Byb2JlLAotCS5yZW1vdmUgPSBfX2RldmV4aXRfcChiM2RmZ19yZW1vdmUpLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgYjNkZmdfbW9kdWxlX2luaXQodm9pZCkKLXsKLQlpbnQgcjsKLQotCWlmIChiM2RmZ19uYnVmIDwgMikgewotCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUKLQkJCSAgICI6IGJ1ZmZlcl9jb3VudCBpcyBvdXQgb2YgcmFuZ2UgKG11c3QgYmUgPj0gMikiKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiBsb2FkZWRcbiIpOwotCi0JYjNkZmdfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsIERSSVZFUl9OQU1FKTsKLQlpZiAoSVNfRVJSKGIzZGZnX2NsYXNzKSkKLQkJcmV0dXJuIFBUUl9FUlIoYjNkZmdfY2xhc3MpOwotCi0JciA9IGFsbG9jX2NocmRldl9yZWdpb24oJmIzZGZnX2RldnQsIDAsIEIzREZHX01BWF9ERVZTLCBEUklWRVJfTkFNRSk7Ci0JaWYgKHIpCi0JCWdvdG8gZXJyMTsKLQotCXIgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZiM2RmZ19kcml2ZXIpOwotCWlmIChyKQotCQlnb3RvIGVycjI7Ci0KLQlyZXR1cm4gcjsKLQotZXJyMjoKLQl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oYjNkZmdfZGV2dCwgQjNERkdfTUFYX0RFVlMpOwotZXJyMToKLQljbGFzc19kZXN0cm95KGIzZGZnX2NsYXNzKTsKLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGIzZGZnX21vZHVsZV9leGl0KHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiB1bmxvYWRlZFxuIik7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZiM2RmZ19kcml2ZXIpOwotCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihiM2RmZ19kZXZ0LCBCM0RGR19NQVhfREVWUyk7Ci0JY2xhc3NfZGVzdHJveShiM2RmZ19jbGFzcyk7Ci19Ci0KLW1vZHVsZV9pbml0KGIzZGZnX21vZHVsZV9pbml0KTsKLW1vZHVsZV9leGl0KGIzZGZnX21vZHVsZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9LY29uZmlnCmluZGV4IDFkNzRkYWIuLjFlN2UwYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvS2NvbmZpZwpAQCAtNCw3ICs0LDcgQEAKIAogY29uZmlnIEJBVE1BTl9BRFYKIAl0cmlzdGF0ZSAiQi5BLlQuTS5BLk4uIEFkdmFuY2VkIE1lc2hpbmcgUHJvdG9jb2wiCi0JZGVwZW5kcyBvbiBQUk9DX0ZTICYmIFBBQ0tFVAorCWRlcGVuZHMgb24gUFJPQ19GUyAmJiBORVQKICAgICAgICAgZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCkBAIC0xNCwxMCArMTQsMTAgQEAKICAgICAgICAgaHR0cDovL3d3dy5vcGVuLW1lc2gub3JnLyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgdXNlciBzcGFjZQogICAgICAgICB0b29scy4KIAotY29uZmlnIEJBVE1BTl9ERUJVRworY29uZmlnIEJBVE1BTl9BRFZfREVCVUcKIAlib29sICJCLkEuVC5NLkEuTi4gZGVidWdnaW5nIgogCWRlcGVuZHMgb24gQkFUTUFOX0FEViAhPSBuCi0JaGVscAorCS0tLWhlbHAtLS0KIAogCSAgVGhpcyBpcyBhbiBvcHRpb24gZm9yIHVzZSBieSBkZXZlbG9wZXJzOyBtb3N0IHBlb3BsZSBzaG91bGQKIAkgIHNheSBOIGhlcmUuIFRoaXMgZW5hYmxlcyBjb21waWxhdGlvbiBvZiBzdXBwb3J0IGZvcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9NYWtlZmlsZQppbmRleCAwMmRhODcxLi40MmI0ZTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9NYWtlZmlsZQpAQCAtMTksNCArMTksNCBAQAogIwogCiBvYmotbSArPSBiYXRtYW4tYWR2Lm8KLWJhdG1hbi1hZHYtb2JqcyA6PSBtYWluLm8gcHJvYy5vIHNlbmQubyByb3V0aW5nLm8gc29mdC1pbnRlcmZhY2UubyBkZXZpY2UubyB0cmFuc2xhdGlvbi10YWJsZS5vIGJpdGFycmF5Lm8gaGFzaC5vIHJpbmdfYnVmZmVyLm8gdmlzLm8gaGFyZC1pbnRlcmZhY2UubyBhZ2dyZWdhdGlvbi5vIGxvZy5vCitiYXRtYW4tYWR2LW9ianMgOj0gbWFpbi5vIHByb2MubyBzZW5kLm8gcm91dGluZy5vIHNvZnQtaW50ZXJmYWNlLm8gZGV2aWNlLm8gdHJhbnNsYXRpb24tdGFibGUubyBiaXRhcnJheS5vIGhhc2gubyByaW5nX2J1ZmZlci5vIHZpcy5vIGhhcmQtaW50ZXJmYWNlLm8gYWdncmVnYXRpb24ubyBvcmlnaW5hdG9yLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L1JFQURNRSBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L1JFQURNRQppbmRleCAzYWFmMzkzLi43ZDY2NmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9SRUFETUUKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvUkVBRE1FCkBAIC0xLDQgKzEsNCBAQAotW3N0YXRlOiAwNy0xMS0yMDA5XQorW3N0YXRlOiAwNi0wMS0yMDEwXQogCiBCQVRNQU4tQURWCiAtLS0tLS0tLS0tCkBAIC0xNSwxOSArMTUsNiBAQAogVGhpcyBpcyBiYXRtYW4tYWR2YW5jZWQgaW1wbGVtZW50ZWQgYXMgTGludXgga2VybmVsIGRyaXZlci4gSXQgZG9lcyBub3QgZGVwZW5kCiBvbiBhbnkgbmV0d29yayAob3RoZXIpIGRyaXZlciwgYW5kIGNhbiBiZSB1c2VkIG9uIHdpZmkgYXMgd2VsbCBhcyBldGhlcm5ldCwKIHZwbiwgZXRjIC4uLiAoYW55dGhpbmcgd2l0aCBldGhlcm5ldC1zdHlsZSBsYXllciAyKS4KLUl0IGNvbXBpbGVzIGFnYWluc3QgYW5kIHNob3VsZCB3b3JrIHdpdGggTGludXggMi42LjIwIC0gMi42LjMxLiBTdXBwb3J0aW5nIG9sZGVyCi12ZXJzaW9ucyBpcyBub3QgcGxhbm5lZCwgYnV0IGl0J3MgcHJvYmFibHkgZWFzeSB0byBiYWNrcG9ydCBpdC4gSWYgeW91IHdvcmsgb24gYQotYmFja3BvcnQsIGZlZWwgZnJlZSB0byBjb250YWN0IHVzLiAgOi0pCi0KLUNPTVBJTEUKLS0tLS0tLS0KLVRvIGNvbXBpbGUgYWdhaW5zdCB5b3VyIGN1cnJlbnRseSBpbnN0YWxsZWQga2VybmVsLCBqdXN0IHR5cGU6Ci0KLSMgbWFrZQotCi1pZiB5b3Ugd2FudCB0byBjb21waWxlIGFnYWluc3Qgc29tZSBvdGhlciBrZXJuZWwsIHVzZToKLQotIyBtYWtlIEtFUk5FTFBBVEg9L3BhdGgvdG8va2VybmVsCiAKIFVTQUdFCiAtLS0tLQpAQCAtNzMsMTYgKzYwLDkgQEAKIAogIyBjYXQgL3Byb2MvbmV0L2JhdG1hbi1hZHYvdmlzCiAKLVRoaXMgb3V0cHV0IGZvcm1hdCBpcyBhIGdyYXBodml6IGZvcm1hdHRlZCB0ZXh0IGZpbGUgd2hpY2ggY2FuIGJlCi1wcm9jZXNzZWQgd2l0aCBncmFwaHZpei10b29scyBsaWtlIGRvdC4KLVRoZSBsYWJlbHMgYXJlIHNpbWlsYXIvY29tcGF0aWJsZSB0byB0aGUgRVRYIG1ldHJpYywgMS4wIG1lYW5zIHBlcmZlY3QKLWNvbm5lY3Rpb24gKDEwMCUpLCAyLjAgbWVhbnMgNTAlLCAzLjAgbWVhbnMgMzMlIGFuZCBzbyBvbi4KLQotQWx0ZXJuYXRpdmVseSwgYSBKU09OIG91dHB1dCBmb3JtYXQgaXMgYXZhaWxhYmxlLiBUaGUgZm9ybWF0IGNhbiBiZSBzZXQKLXVzaW5nIGJ5IHdyaXRpbmcgZWl0aGVyICJkb3RfZHJhdyIgb3IgImpzb24iIGludG8gdGhlIHZpc19mb3JtYXQgZmlsZS4KLSJkb3RfZHJhdyIgaXMgc2VsZWN0ZWQgYnkgZGVmYXVsdC4KLQotZWNobyAianNvbiIgPiAvcHJvYy9uZXQvYmF0bWFuLWFkdi92aXNfZm9ybWF0CitUaGUgb3V0cHV0IGlzIGluIGEgZ2VuZXJpYyByYXcgZm9ybWF0LiBVc2UgdGhlIGJhdGN0bCB0b29sIChTZWUgYmVsb3cpCit0byBjb252ZXJ0IHRoaXMgdG8gb3RoZXIgZm9ybWF0cyBtb3JlIHN1aXRhYmxlIGZvciBncmFwaGluZywgZWcKK2dyYXBodml6IGRvdCwgb3IgSlNPTiBkYXRhLWludGVyY2hhbmdlIGZvcm1hdC4KIAogSW4gdmVyeSBtb2JpbGUgc2NlbmFyaW9zLCB5b3UgbWlnaHQgd2FudCB0byBhZGp1c3QgdGhlIG9yaWdpbmF0b3IKIGludGVydmFsIHRvIGEgbG93ZXIgdmFsdWUuIFRoaXMgd2lsbCBtYWtlIHRoZSBtZXNoIG1vcmUgcmVzcG9uc2l2ZSB0bwpAQCAtOTYsMTUgKzc2LDU5IEBACiAKICMgZWNobyAiIiA+IC9wcm9jL25ldC9iYXRtYW4tYWR2L2ludGVyZmFjZXMKIAorTE9HR0lORy9ERUJVR0dJTkcKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBlcnJvciBtZXNzYWdlcywgd2FybmluZ3MgYW5kIGluZm9ybWF0aW9uIG1lc3NhZ2VzIGFyZSBzZW50IHRvIHRoZQora2VybmVsIGxvZy4gRGVwZW5kaW5nIG9uIHlvdXIgb3BlcmF0aW5nIHN5c3RlbSBkaXN0cmlidXRpb24gdGhpcyBjYW4gYmUKK3JlYWQgaW4gb25lIG9mIGEgbnVtYmVyIG9mIHdheXMuIFRyeSB1c2luZyB0aGUgY29tbWFuZHM6IGRtZXNnLAorbG9ncmVhZCwgb3IgbG9va2luZyBpbiB0aGUgZmlsZXMgL3Zhci9sb2cva2Vybi5sb2cgb3IKKy92YXIvbG9nL3N5c2xvZy4gQWxsIGJhdG1hbi1hZHYgbWVzc2FnZXMgYXJlIHByZWZpeGVkIHdpdGgKKyJiYXRtYW4tYWR2OiIgU28gdG8gc2VlIGp1c3QgdGhlc2UgbWVzc2FnZXMgdHJ5CisKK2RtZXNnIHwgZ3JlcCBiYXRtYW4tYWR2CisKK1doZW4gaW52ZXN0aWdhdGluZyBwcm9ibGVtcyB3aXRoIHlvdXIgbWVzaCBuZXR3b3JrIGl0IGlzIHNvbWV0aW1lcworbmVjZXNzYXJ5IHRvIHNlZSBtb3JlIGRldGFpbCBkZWJ1ZyBtZXNzYWdlcy4gVGhpcyBtdXN0IGJlIGVuYWJsZWQgd2hlbgorY29tcGlsaW5nIHRoZSBiYXRtYW4tYWR2IG1vZHVsZS4gVXNlICJtYWtlIG1lbnVjb25maWciIGFuZCBlbmFibGUgdGhlCitvcHRpb24gIkIuQS5ULk0uQS5OLiBkZWJ1Z2dpbmciLgorCitUaGUgYWRkaXRpb25hbCBkZWJ1ZyBvdXRwdXQgaXMgYnkgZGVmYXVsdCBkaXNhYmxlZC4gSXQgY2FuIGJlIGVuYWJsZWQKK2VpdGhlciBhdCBrZXJuZWwgbW9kdWxlIGxvYWQgdGltZSBvciBkdXJpbmcgcnVuIHRpbWUuIFRvIGVuYWJsZSBkZWJ1Zworb3V0cHV0IGF0IG1vZHVsZSBsb2FkIHRpbWUsIGFkZCB0aGUgbW9kdWxlIHBhcmFtZXRlciBkZWJ1Zz08dmFsdWU+LgorPHZhbHVlPiBjYW4gdGFrZSBvbmUgb2YgZm91ciB2YWx1ZXMuCisKKzAgLSBBbGwgZGVidWcgb3V0cHV0IGRpc2FibGVkCisxIC0gRW5hYmxlIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gcm91dGluZyAvIGZsb29kaW5nIC8gYnJvYWRjYXN0aW5nCisyIC0gRW5hYmxlIHJvdXRlIG9yIGhuYSBhZGRlZCAvIGNoYW5nZWQgLyBkZWxldGVkCiszIC0gRW5hYmxlIGFsbCBtZXNzYWdlcworCitlLmcuCisKK21vZHByb2JlIGJhdG1hbi1hZHYgZGVidWc9MgorCit3aWxsIGxvYWQgdGhlIG1vZHVsZSBhbmQgZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIGZvciB3aGVuIHJvdXRlcyBvciBITkFzCitjaGFuZ2UuCisKK1RoZSBkZWJ1ZyBvdXRwdXQgY2FuIGFsc28gYmUgY2hhbmdlZCBhdCBydW50aW1lIHVzaW5nIHRoZSBmaWxlCisvc3lzL21vZHVsZS9iYXRtYW4tYWR2L3BhcmFtZXRlcnMvZGVidWcuIGUuZy4KKworZWNobyAyID4gL3N5cy9tb2R1bGUvYmF0bWFuLWFkdi9wYXJhbWV0ZXJzL2RlYnVnCisKK2VuYWJsZXMgZGVidWcgbWVzc2FnZXMgZm9yIHdoZW4gcm91dGVzIG9yIEhOQXMKKworVGhlIGRlYnVnIG91dHB1dCBpcyBzZW50IHRvIHRoZSBrZXJuZWwgbG9ncy4gU28gdHJ5IGRtZXNnLCBsb2dyZWFkIGV0YwordG8gc2VlIHRoZSBkZWJ1ZyBtZXNzYWdlcy4KKwogQkFUQ1RMCiAtLS0tLS0KIAotQi5BLlQuTS5BLk4uICBhZHZhbmNlZCAgb3BlcmF0ZXMgb24gbGF5ZXIgMiBhbmQgdGh1cyBhbGwgaG9zdHMgcGFydGljaS0KLXBhdGluZyBpbiB0aGUgdmlydHVhbCBzd2l0Y2ggYXJlIGNvbXBsZXRlbHkgdHJhbnNwYXJlbnQgZm9yIGFsbCAgcHJvdG8tCi1jb2xzIGFib3ZlIGxheWVyIDIuIFRoZXJlZm9yZSB0aGUgY29tbW9uIGRpYWdub3NpcyB0b29scyBkbyBub3Qgd29yayBhcwotZXhwZWN0ZWQuIFRvIG92ZXJjb21lIHRoZXNlIHByb2JsZW1zIGJhdGN0bCB3YXMgY3JlYXRlZC4gQXQgdGhlICBtb21lbnQKLXRoZSAgYmF0Y3RsIGNvbnRhaW5zIHBpbmcsIHRyYWNlcm91dGUsIHRjcGR1bXAgYW5kIGludGVyZmFjZXMgdG8gdGhlCi1rZXJuZWwgbW9kdWxlIHNldHRpbmdzLgorQi5BLlQuTS5BLk4uICBhZHZhbmNlZCBvcGVyYXRlcyBvbiBsYXllciAyIGFuZCB0aHVzIGFsbCBob3N0cworcGFydGljaXBhdGluZyBpbiB0aGUgdmlydHVhbCBzd2l0Y2ggYXJlIGNvbXBsZXRlbHkgdHJhbnNwYXJlbnQgZm9yIGFsbAorcHJvdG9jb2xzIGFib3ZlIGxheWVyIDIuIFRoZXJlZm9yZSB0aGUgY29tbW9uIGRpYWdub3NpcyB0b29scyBkbyBub3QKK3dvcmsgYXMgZXhwZWN0ZWQuIFRvIG92ZXJjb21lIHRoZXNlIHByb2JsZW1zIGJhdGN0bCB3YXMgY3JlYXRlZC4gQXQKK3RoZSBtb21lbnQgdGhlIGJhdGN0bCBjb250YWlucyBwaW5nLCB0cmFjZXJvdXRlLCB0Y3BkdW1wIGFuZAoraW50ZXJmYWNlcyB0byB0aGUga2VybmVsIG1vZHVsZSBzZXR0aW5ncy4KIAogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIG1hbnBhZ2UgKG1hbiBiYXRjdGwpLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvVE9ETwppbmRleCBlYTZkY2Y5Li4yZjE1MTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L1RPRE8KQEAgLTE3LDMwICsxNyw2IEBACiAtPiB0cmFuc3RhYmxlX2dsb2JhbCAocmVhZC1vbmx5KSBbb3V0cHV0cyB0aGUgZ2xvYmFsIHRyYW5zbGF0aW9uIHRhYmxlXQogLT4gdHJhbnN0YWJsZV9sb2NhbCAocmVhZC1vbmx5KSBbb3V0cHV0cyB0aGUgbG9jYWwgdHJhbnNsYXRpb24gdGFibGVdCiAKLT0+IHZpcyAicmF3IiBkYXRhIG91dHB1dAotKiB0aGUgcmF3IGZvcm1hdCBzaGFsbCByZXBsYWNlIGRvdCBkcmF3IC8ganNvbiB0byBvZmZlciBhIG5ldXRyYWwgdGhhdCBjYW4KLSogYmUgY29udmVydGVkCi0qIHRoZSBmb3JtYXQgKGNvbW1hIHNlcGVyYXRlZCBlbnRyaWVzKToKLS0+ICJtYWMiIC0+IG1hYyBhZGRyZXNzIG9mIGFuIG9yaWdpbmF0b3IgKGVhY2ggbGluZSBiZWdpbnMgd2l0aCBpdCkKLS0+ICJUUSBtYWMgdmFsdWUiIC0+IHNyYyBtYWMncyBsaW5rIHF1YWxpdHkgdG93YXJkcyBtYWMgYWRkcmVzcwotLT4gIkhOQSBtYWMiIC0+IEhOQSBhbm5vdW5jZWQgYnkgc291cmNlIG1hYwotLT4gIlBSSU1BUlkiIC0+IHRoaXMgaXMgYSBwcmltYXJ5IGludGVyZmFjZQotLT4gIlNFQyBtYWMiIC0+IHNlY29uZGFyeSBtYWMgYWRkcmVzcyBvZiBzb3VyY2UgKHJlcXVpcmVzIHByZWNlZWRpbmcKLS0+IFBSSU1BUlkpCi0KLT0+IGxvZ2dpbmcKLSogdGhlIGxvZyBsZXZlbCBMT0dfVFlQRV9DUklULCBMT0dfVFlQRV9XQVJOICYgTE9HX1RZUEVfTk9USUNFIHdpbGwgYmUKLSogdW5pZmllZCB0byB1c2UgcHJpbnRrCi0qIExPR19UWVBFX0JBVE1BTiAmIExPR19UWVBFX1JPVVRFUyB3aWxsIGFsc28gdXNlIHByaW50ayBidXQgb25seSBhZnRlciB0aGUKLSogaW50ZXJuYWwgZGVidWcgbGV2ZWwgaGFzIGJlZW4gcmFpc2VkCi0qIHRoZSBpbnRlcm5hbCBkZWJ1ZyBsZXZlbCBjYW4gYmUgbW9kaWZpZWQgdXNpbmcgYSBtb2R1bGUgcGFyYW1ldGVyIChkZWJ1ZykKLSogb3IgYXQgcnVuIHRpbWUgdmlhIC9zeXMvbW9kdWxlL2JhdG1hbi1hZHYvcGFyYW1ldGVycy9kZWJ1ZwotKiBtYWtlIHVzZSBvZiBwcmludGsgJXBNIHN1cHBvcnQgaW5zdGVhZCBvZiBjb252ZXJ0aW5nIG1hYyBhZGRyZXNzZXMKLSogbWFudWFsbHkKLQotPT4gc3RyaXAgb3V0IGFsbCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHN1cHBvcnQgdG8gb2xkZXIga2VybmVscwotICAgKG9ubHkgZm91bmQgaW4gY29tcGF0LmgpCi0KID0+IGZpeCBjaGVja3BhdGNoLnBsIGVycm9ycwogCiBQbGVhc2Ugc2VuZCBhbGwgcGF0Y2hlcyB0bzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2FnZ3JlZ2F0aW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9hZ2dyZWdhdGlvbi5jCmluZGV4IDljNmU2ODEuLjc5MTczMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2FnZ3JlZ2F0aW9uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYWdncmVnYXRpb24uYwpAQCAtOTYsNiArOTYsNyBAQAogCQkJICAgaW50IG93bl9wYWNrZXQpCiB7CiAJc3RydWN0IGZvcndfcGFja2V0ICpmb3J3X3BhY2tldF9hZ2dyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlmb3J3X3BhY2tldF9hZ2dyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGZvcndfcGFja2V0KSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFmb3J3X3BhY2tldF9hZ2dyKQpAQCAtMTE1LDYgKzExNiw3IEBACiAJICAgICAgIHBhY2tldF9idWZmLAogCSAgICAgICBmb3J3X3BhY2tldF9hZ2dyLT5wYWNrZXRfbGVuKTsKIAorCWZvcndfcGFja2V0X2FnZ3ItPnNrYiA9IE5VTEw7CiAJZm9yd19wYWNrZXRfYWdnci0+b3duID0gb3duX3BhY2tldDsKIAlmb3J3X3BhY2tldF9hZ2dyLT5pZl9pbmNvbWluZyA9IGlmX2luY29taW5nOwogCWZvcndfcGFja2V0X2FnZ3ItPm51bV9wYWNrZXRzID0gMDsKQEAgLTEyNiw5ICsxMjgsOSBAQAogCQlmb3J3X3BhY2tldF9hZ2dyLT5kaXJlY3RfbGlua19mbGFncyB8PSAxOwogCiAJLyogYWRkIG5ldyBwYWNrZXQgdG8gcGFja2V0IGxpc3QgKi8KLQlzcGluX2xvY2soJmZvcndfYmF0X2xpc3RfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmZvcndfYmF0X2xpc3RfbG9jaywgZmxhZ3MpOwogCWhsaXN0X2FkZF9oZWFkKCZmb3J3X3BhY2tldF9hZ2dyLT5saXN0LCAmZm9yd19iYXRfbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJmZvcndfYmF0X2xpc3RfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZm9yd19iYXRfbGlzdF9sb2NrLCBmbGFncyk7CiAKIAkvKiBzdGFydCB0aW1lciBmb3IgdGhpcyBwYWNrZXQgKi8KIAlJTklUX0RFTEFZRURfV09SSygmZm9yd19wYWNrZXRfYWdnci0+ZGVsYXllZF93b3JrLApAQCAtMTY4LDkgKzE3MCwxMCBAQAogCXN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0ID0KIAkJKHN0cnVjdCBiYXRtYW5fcGFja2V0ICopcGFja2V0X2J1ZmY7CiAJYm9vbCBkaXJlY3RfbGluayA9IGJhdG1hbl9wYWNrZXQtPmZsYWdzICYgRElSRUNUTElOSyA/IDEgOiAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBmaW5kIHBvc2l0aW9uIGZvciB0aGUgcGFja2V0IGluIHRoZSBmb3J3YXJkIHF1ZXVlICovCi0Jc3Bpbl9sb2NrKCZmb3J3X2JhdF9saXN0X2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZmb3J3X2JhdF9saXN0X2xvY2ssIGZsYWdzKTsKIAkvKiBvd24gcGFja2V0cyBhcmUgbm90IHRvIGJlIGFnZ3JlZ2F0ZWQgKi8KIAlpZiAoKGF0b21pY19yZWFkKCZhZ2dyZWdhdGlvbl9lbmFibGVkKSkgJiYgKCFvd25fcGFja2V0KSkgewogCQlobGlzdF9mb3JfZWFjaF9lbnRyeShmb3J3X3BhY2tldF9wb3MsIHRtcF9ub2RlLCAmZm9yd19iYXRfbGlzdCwKQEAgLTE5MSw3ICsxOTQsNyBAQAogCSAqIHN1aXRhYmxlIGFnZ3JlZ2F0aW9uIHBhY2tldCBmb3VuZCAqLwogCWlmIChmb3J3X3BhY2tldF9hZ2dyID09IE5VTEwpIHsKIAkJLyogdGhlIGZvbGxvd2luZyBzZWN0aW9uIGNhbiBydW4gd2l0aG91dCB0aGUgbG9jayAqLwotCQlzcGluX3VubG9jaygmZm9yd19iYXRfbGlzdF9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZm9yd19iYXRfbGlzdF9sb2NrLCBmbGFncyk7CiAJCW5ld19hZ2dyZWdhdGVkX3BhY2tldChwYWNrZXRfYnVmZiwgcGFja2V0X2xlbiwKIAkJCQkgICAgICBzZW5kX3RpbWUsIGRpcmVjdF9saW5rLAogCQkJCSAgICAgIGlmX2luY29taW5nLCBvd25fcGFja2V0KTsKQEAgLTE5OSw3ICsyMDIsNyBAQAogCQlhZ2dyZWdhdGUoZm9yd19wYWNrZXRfYWdnciwKIAkJCSAgcGFja2V0X2J1ZmYsIHBhY2tldF9sZW4sCiAJCQkgIGRpcmVjdF9saW5rKTsKLQkJc3Bpbl91bmxvY2soJmZvcndfYmF0X2xpc3RfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZvcndfYmF0X2xpc3RfbG9jaywgZmxhZ3MpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYml0YXJyYXkuYyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2JpdGFycmF5LmMKaW5kZXggM2M2N2Y1Zi4uMjEyZWVmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYml0YXJyYXkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9iaXRhcnJheS5jCkBAIC0yMSw3ICsyMSw2IEBACiAKICNpbmNsdWRlICJtYWluLmgiCiAjaW5jbHVkZSAiYml0YXJyYXkuaCIKLSNpbmNsdWRlICJsb2cuaCIKIAogLyogcmV0dXJucyB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBpbiB0aGUgZ2l2ZW4gc2VxX2JpdHMgaW5kaWNhdGVzIHRydWUKICAqIGFuZCBjdXJyX3NlcW5vIGlzIHdpdGhpbiByYW5nZSBvZiBsYXN0X3NlcW5vICovCkBAIC04MCw4ICs3OSw4IEBACiAJCSAqIGZyb20uCiAJCSAqCiAJCSAqIGxlZnQgaXMgaGlnaCwgcmlnaHQgaXMgbG93OiBGRURDIEJBOTggNzY1NCAzMjEwCi0JCSAqCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXiBeXgotCQkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnZ2dgorCQkgKgkJCQkJICBeXiBeXgorCQkgKgkJCSAgICAgICB2dnZ2CiAJCSAqIF5eXl4gPSBmcm9tLCB2dnZ2diA9dG8sIHdlJ2QgaGF2ZSB3b3JkX251bT09MSBhbmQKIAkJICogd29yZF9vZmZzZXQ9PVdPUkRfQklUX1NJWkUvMiA/Pz8/PyBpbiB0aGlzIGV4YW1wbGUuCiAJCSAqICg9MjQgYml0cykKQEAgLTEzMywxMyArMTMyLDEzIEBACiAJICAgIChzZXFfbnVtX2RpZmYgPCAtVFFfTE9DQUxfV0lORE9XX1NJWkUpKSB7CiAKIAkJaWYgKHNlcV9udW1fZGlmZiA+IFRRX0xPQ0FMX1dJTkRPV19TSVpFKQotCQkJZGVidWdfbG9nKExPR19UWVBFX0JBVE1BTiwKLQkJCQkgICJXZSBtaXNzZWQgYSBsb3Qgb2YgcGFja2V0cyAoJWkpICFcbiIsCi0JCQkJICBzZXFfbnVtX2RpZmYtMSk7CisJCQliYXRfZGJnKERCR19CQVRNQU4sCisJCQkJIldlIG1pc3NlZCBhIGxvdCBvZiBwYWNrZXRzICglaSkgIVxuIiwKKwkJCQlzZXFfbnVtX2RpZmYtMSk7CiAKIAkJaWYgKC1zZXFfbnVtX2RpZmYgPiBUUV9MT0NBTF9XSU5ET1dfU0laRSkKLQkJCWRlYnVnX2xvZyhMT0dfVFlQRV9CQVRNQU4sCi0JCQkJICAiT3RoZXIgaG9zdCBwcm9iYWJseSByZXN0YXJ0ZWQgIVxuIik7CisJCQliYXRfZGJnKERCR19CQVRNQU4sCisJCQkJIk90aGVyIGhvc3QgcHJvYmFibHkgcmVzdGFydGVkICFcbiIpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBOVU1fV09SRFM7IGkrKykKIAkJCXNlcV9iaXRzW2ldID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2NvbXBhdC5oIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvY29tcGF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0ZTBhNDUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvY29tcGF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczoKLSAqCi0gKiBNYXJlayBMaW5kbmVyLCBTaW1vbiBXdW5kZXJsaWNoCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxLCBVU0EKLSAqCi0gKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIG1hY3JvcyBmb3IgbWFpbnRhaW5pbmcgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zCi0gKiBvZiB0aGUgTGludXgga2VybmVsLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CS8qIExJTlVYX1ZFUlNJT05fQ09ERSAqLwotCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNiwgMjIpCi0KLSNkZWZpbmUgc2tiX3NldF9uZXR3b3JrX2hlYWRlcihfc2tiLCBfb2Zmc2V0KSBcCi0JZG8geyAoX3NrYiktPm5oLnJhdyA9IChfc2tiKS0+ZGF0YSArIChfb2Zmc2V0KTsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBza2JfcmVzZXRfbWFjX2hlYWRlcihfc2tiKSBcCi0JZG8geyAoX3NrYiktPm1hYy5yYXcgPSAoX3NrYiktPmRhdGE7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgbGlzdF9maXJzdF9lbnRyeShwdHIsIHR5cGUsIG1lbWJlcikgXAotCWxpc3RfZW50cnkoKHB0ciktPm5leHQsIHR5cGUsIG1lbWJlcikKLQotI2VuZGlmIC8qIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDIyKSAqLwotCi0KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA2LCAyNikKLQotI2RlZmluZSBkZXZpY2VfY3JlYXRlKF9jbHMsIF9wYXJlbnQsIF9kZXZ0LCBfZGV2aWNlLCBfZm10KSBcCi0JY2xhc3NfZGV2aWNlX2NyZWF0ZShfY2xzLCBfcGFyZW50LCBfZGV2dCwgX2RldmljZSwgX2ZtdCkKLQotI2RlZmluZSBkZXZpY2VfZGVzdHJveShfY2xzLCBfZGV2aWNlKSBcCi0JY2xhc3NfZGV2aWNlX2Rlc3Ryb3koX2NscywgX2RldmljZSkKLQotI2Vsc2UKLQotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDI3KQotCi0jZGVmaW5lIGRldmljZV9jcmVhdGUoX2NscywgX3BhcmVudCwgX2RldnQsIF9kZXZpY2UsIF9mbXQpIFwKLQlkZXZpY2VfY3JlYXRlX2RydmRhdGEoX2NscywgX3BhcmVudCwgX2RldnQsIF9kZXZpY2UsIF9mbXQpCi0KLSNlbmRpZiAvKiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA2LCAyNykgKi8KLQotI2VuZGlmIC8qIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDI2KSAqLwotCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNiwgMjMpCi0KLSNkZWZpbmUgY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKHdxKSBjYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrKHdxKQotCi0jZW5kaWYgLyogTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNiwgMjMpICovCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNiwgMjUpCi0jZGVmaW5lIHN0cmljdF9zdHJ0b3VsKGNwLCBiYXNlLCByZXMpIFwKLQkoeyBcCi0JaW50IHJldCA9IDA7IFwKLQljaGFyICplbmRwOyBcCi0JKnJlcyA9IHNpbXBsZV9zdHJ0b3VsKGNwLCAmZW5kcCwgYmFzZSk7IFwKLQlpZiAoY3AgPT0gZW5kcCkgXAotCQlyZXQgPSAtRUlOVkFMOyBcCi0JcmV0OyBcCi19KQotI2VuZGlmIC8qIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDI1KSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvZGV2aWNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9kZXZpY2UuYwppbmRleCAxZTdkMWY4Li5lN2Y0NDIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9kZXZpY2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9kZXZpY2UuYwpAQCAtMTksMTQgKzE5LDEzIEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlICJtYWluLmgiCiAjaW5jbHVkZSAiZGV2aWNlLmgiCi0jaW5jbHVkZSAibG9nLmgiCiAjaW5jbHVkZSAic2VuZC5oIgogI2luY2x1ZGUgInR5cGVzLmgiCiAjaW5jbHVkZSAiaGFzaC5oIgotCi0jaW5jbHVkZSAiY29tcGF0LmgiCisjaW5jbHVkZSAiaGFyZC1pbnRlcmZhY2UuaCIKIAogc3RhdGljIHN0cnVjdCBjbGFzcyAqYmF0bWFuX2NsYXNzOwogCkBAIC02MCw3ICs1OSw3IEBACiAJLyogcmVnaXN0ZXIgb3VyIGRldmljZSAtIGtlcm5lbCBhc3NpZ25zIGEgZnJlZSBtYWpvciBudW1iZXIgKi8KIAl0bXBfbWFqb3IgPSByZWdpc3Rlcl9jaHJkZXYoMCwgRFJJVkVSX0RFVklDRSwgJmZvcHMpOwogCWlmICh0bXBfbWFqb3IgPCAwKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9XQVJOLCAiUmVnaXN0ZXJpbmcgdGhlIGNoYXJhY3RlciBkZXZpY2UgZmFpbGVkIHdpdGggJWRcbiIsCisJCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjpSZWdpc3RlcmluZyB0aGUgY2hhcmFjdGVyIGRldmljZSBmYWlsZWQgd2l0aCAlZFxuIiwKIAkJCSAgdG1wX21ham9yKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNjgsNyArNjcsNyBAQAogCWJhdG1hbl9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgImJhdG1hbi1hZHYiKTsKIAogCWlmIChJU19FUlIoYmF0bWFuX2NsYXNzKSkgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfV0FSTiwgIkNvdWxkIG5vdCByZWdpc3RlciBjbGFzcyAnYmF0bWFuLWFkdicgXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OkNvdWxkIG5vdCByZWdpc3RlciBjbGFzcyAnYmF0bWFuLWFkdicgXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMTEsNyArMTEwLDcgQEAKIAl9CiAKIAlpZiAoZGV2aWNlX2NsaWVudF9oYXNoW2ldICE9IGRldmljZV9jbGllbnQpIHsKLQkJZGVidWdfbG9nKExPR19UWVBFX1dBUk4sICJFcnJvciAtIGNhbid0IGFkZCBhbm90aGVyIHBhY2tldCBjbGllbnQ6IG1heGltdW0gbnVtYmVyIG9mIGNsaWVudHMgcmVhY2hlZCBcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6RXJyb3IgLSBjYW4ndCBhZGQgYW5vdGhlciBwYWNrZXQgY2xpZW50OiBtYXhpbXVtIG51bWJlciBvZiBjbGllbnRzIHJlYWNoZWQgXG4iKTsKIAkJa2ZyZWUoZGV2aWNlX2NsaWVudCk7CiAJCXJldHVybiAtRVhGVUxMOwogCX0KQEAgLTExOSw3ICsxMTgsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZkZXZpY2VfY2xpZW50LT5xdWV1ZV9saXN0KTsKIAlkZXZpY2VfY2xpZW50LT5xdWV1ZV9sZW4gPSAwOwogCWRldmljZV9jbGllbnQtPmluZGV4ID0gaTsKLQlkZXZpY2VfY2xpZW50LT5sb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoZGV2aWNlX2NsaWVudC0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmRldmljZV9jbGllbnQtPmxvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldmljZV9jbGllbnQtPnF1ZXVlX3dhaXQpOwogCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGV2aWNlX2NsaWVudDsKQEAgLTEzNCw4ICsxMzMsOSBAQAogCQkoc3RydWN0IGRldmljZV9jbGllbnQgKilmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGRldmljZV9wYWNrZXQgKmRldmljZV9wYWNrZXQ7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9wb3MsICpsaXN0X3Bvc190bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmZGV2aWNlX2NsaWVudC0+bG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldmljZV9jbGllbnQtPmxvY2ssIGZsYWdzKTsKIAogCS8qIGZvciBhbGwgcGFja2V0cyBpbiB0aGUgcXVldWUgLi4uICovCiAJbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3RfcG9zLCBsaXN0X3Bvc190bXAsICZkZXZpY2VfY2xpZW50LT5xdWV1ZV9saXN0KSB7CkBAIC0xNDcsNyArMTQ3LDcgQEAKIAl9CiAKIAlkZXZpY2VfY2xpZW50X2hhc2hbZGV2aWNlX2NsaWVudC0+aW5kZXhdID0gTlVMTDsKLQlzcGluX3VubG9jaygmZGV2aWNlX2NsaWVudC0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2aWNlX2NsaWVudC0+bG9jaywgZmxhZ3MpOwogCiAJa2ZyZWUoZGV2aWNlX2NsaWVudCk7CiAJZGVjX21vZHVsZV9jb3VudCgpOwpAQCAtMTYyLDYgKzE2Miw3IEBACiAJCShzdHJ1Y3QgZGV2aWNlX2NsaWVudCAqKWZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZGV2aWNlX3BhY2tldCAqZGV2aWNlX3BhY2tldDsKIAlpbnQgZXJyb3I7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spICYmIChkZXZpY2VfY2xpZW50LT5xdWV1ZV9sZW4gPT0gMCkpCiAJCXJldHVybiAtRUFHQUlOOwpAQCAtMTc4LDE0ICsxNzksMTQgQEAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCXNwaW5fbG9jaygmZGV2aWNlX2NsaWVudC0+bG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldmljZV9jbGllbnQtPmxvY2ssIGZsYWdzKTsKIAogCWRldmljZV9wYWNrZXQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkZXZpY2VfY2xpZW50LT5xdWV1ZV9saXN0LAogCQkJCQkgc3RydWN0IGRldmljZV9wYWNrZXQsIGxpc3QpOwogCWxpc3RfZGVsKCZkZXZpY2VfcGFja2V0LT5saXN0KTsKIAlkZXZpY2VfY2xpZW50LT5xdWV1ZV9sZW4tLTsKIAotCXNwaW5fdW5sb2NrKCZkZXZpY2VfY2xpZW50LT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZpY2VfY2xpZW50LT5sb2NrLCBmbGFncyk7CiAKIAllcnJvciA9IF9fY29weV90b191c2VyKGJ1ZiwgJmRldmljZV9wYWNrZXQtPmljbXBfcGFja2V0LAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaWNtcF9wYWNrZXQpKTsKQEAgLTIwNiw5ICsyMDcsMTEgQEAKIAlzdHJ1Y3QgaWNtcF9wYWNrZXQgaWNtcF9wYWNrZXQ7CiAJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOwogCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZjsKKwl1aW50OF90IGRzdGFkZHJbRVRIX0FMRU5dOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAobGVuIDwgc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldCkpIHsKLQkJZGVidWdfbG9nKExPR19UWVBFX05PVElDRSwgIkVycm9yIC0gY2FuJ3Qgc2VuZCBwYWNrZXQgZnJvbSBjaGFyIGRldmljZTogaW52YWxpZCBwYWNrZXQgc2l6ZVxuIik7CisJCWJhdF9kYmcoREJHX0JBVE1BTiwgImJhdG1hbi1hZHY6RXJyb3IgLSBjYW4ndCBzZW5kIHBhY2tldCBmcm9tIGNoYXIgZGV2aWNlOiBpbnZhbGlkIHBhY2tldCBzaXplXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yMTksMTIgKzIyMiwxMiBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWlmIChpY21wX3BhY2tldC5wYWNrZXRfdHlwZSAhPSBCQVRfSUNNUCkgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfTk9USUNFLCAiRXJyb3IgLSBjYW4ndCBzZW5kIHBhY2tldCBmcm9tIGNoYXIgZGV2aWNlOiBnb3QgYm9ndXMgcGFja2V0IHR5cGUgKGV4cGVjdGVkOiBCQVRfSUNNUClcbiIpOworCQliYXRfZGJnKERCR19CQVRNQU4sICJiYXRtYW4tYWR2OkVycm9yIC0gY2FuJ3Qgc2VuZCBwYWNrZXQgZnJvbSBjaGFyIGRldmljZTogZ290IGJvZ3VzIHBhY2tldCB0eXBlIChleHBlY3RlZDogQkFUX0lDTVApXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKGljbXBfcGFja2V0Lm1zZ190eXBlICE9IEVDSE9fUkVRVUVTVCkgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfTk9USUNFLCAiRXJyb3IgLSBjYW4ndCBzZW5kIHBhY2tldCBmcm9tIGNoYXIgZGV2aWNlOiBnb3QgYm9ndXMgbWVzc2FnZSB0eXBlIChleHBlY3RlZDogRUNIT19SRVFVRVNUKVxuIik7CisJCWJhdF9kYmcoREJHX0JBVE1BTiwgImJhdG1hbi1hZHY6RXJyb3IgLSBjYW4ndCBzZW5kIHBhY2tldCBmcm9tIGNoYXIgZGV2aWNlOiBnb3QgYm9ndXMgbWVzc2FnZSB0eXBlIChleHBlY3RlZDogRUNIT19SRVFVRVNUKVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjQwLDcgKzI0Myw3IEBACiAJaWYgKGF0b21pY19yZWFkKCZtb2R1bGVfc3RhdGUpICE9IE1PRFVMRV9BQ1RJVkUpCiAJCWdvdG8gZHN0X3VucmVhY2g7CiAKLQlzcGluX2xvY2soJm9yaWdfaGFzaF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKIAlvcmlnX25vZGUgPSAoKHN0cnVjdCBvcmlnX25vZGUgKiloYXNoX2ZpbmQob3JpZ19oYXNoLCBpY21wX3BhY2tldC5kc3QpKTsKIAogCWlmICghb3JpZ19ub2RlKQpAQCAtMjUwLDkgKzI1MywxNSBAQAogCQlnb3RvIHVubG9jazsKIAogCWJhdG1hbl9pZiA9IG9yaWdfbm9kZS0+YmF0bWFuX2lmOworCW1lbWNweShkc3RhZGRyLCBvcmlnX25vZGUtPnJvdXRlci0+YWRkciwgRVRIX0FMRU4pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKIAogCWlmICghYmF0bWFuX2lmKQotCQlnb3RvIHVubG9jazsKKwkJZ290byBkc3RfdW5yZWFjaDsKKworCWlmIChiYXRtYW5faWYtPmlmX2FjdGl2ZSAhPSBJRl9BQ1RJVkUpCisJCWdvdG8gZHN0X3VucmVhY2g7CiAKIAltZW1jcHkoaWNtcF9wYWNrZXQub3JpZywKIAkgICAgICAgYmF0bWFuX2lmLT5uZXRfZGV2LT5kZXZfYWRkciwKQEAgLTI2MCwxMyArMjY5LDEyIEBACiAKIAlzZW5kX3Jhd19wYWNrZXQoKHVuc2lnbmVkIGNoYXIgKikmaWNtcF9wYWNrZXQsCiAJCQlzaXplb2Yoc3RydWN0IGljbXBfcGFja2V0KSwKLQkJCWJhdG1hbl9pZiwgb3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIpOworCQkJYmF0bWFuX2lmLCBkc3RhZGRyKTsKIAotCXNwaW5fdW5sb2NrKCZvcmlnX2hhc2hfbG9jayk7CiAJZ290byBvdXQ7CiAKIHVubG9jazoKLQlzcGluX3VubG9jaygmb3JpZ19oYXNoX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CiBkc3RfdW5yZWFjaDoKIAlpY21wX3BhY2tldC5tc2dfdHlwZSA9IERFU1RJTkFUSU9OX1VOUkVBQ0hBQkxFOwogCWJhdF9kZXZpY2VfYWRkX3BhY2tldChkZXZpY2VfY2xpZW50LCAmaWNtcF9wYWNrZXQpOwpAQCAtMjkxLDYgKzI5OSw3IEBACiAJCQkgICBzdHJ1Y3QgaWNtcF9wYWNrZXQgKmljbXBfcGFja2V0KQogewogCXN0cnVjdCBkZXZpY2VfcGFja2V0ICpkZXZpY2VfcGFja2V0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkZXZpY2VfcGFja2V0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRldmljZV9wYWNrZXQpLCBHRlBfS0VSTkVMKTsKIApAQCAtMzAxLDEyICszMTAsMTIgQEAKIAltZW1jcHkoJmRldmljZV9wYWNrZXQtPmljbXBfcGFja2V0LCBpY21wX3BhY2tldCwKIAkgICAgICAgc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldCkpOwogCi0Jc3Bpbl9sb2NrKCZkZXZpY2VfY2xpZW50LT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2aWNlX2NsaWVudC0+bG9jaywgZmxhZ3MpOwogCiAJLyogd2hpbGUgd2FpdGluZyBmb3IgdGhlIGxvY2sgdGhlIGRldmljZV9jbGllbnQgY291bGQgaGF2ZSBiZWVuCiAJICogZGVsZXRlZCAqLwogCWlmICghZGV2aWNlX2NsaWVudF9oYXNoW2ljbXBfcGFja2V0LT51aWRdKSB7Ci0JCXNwaW5fdW5sb2NrKCZkZXZpY2VfY2xpZW50LT5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2aWNlX2NsaWVudC0+bG9jaywgZmxhZ3MpOwogCQlrZnJlZShkZXZpY2VfcGFja2V0KTsKIAkJcmV0dXJuOwogCX0KQEAgLTMyMyw3ICszMzIsNyBAQAogCQlkZXZpY2VfY2xpZW50LT5xdWV1ZV9sZW4tLTsKIAl9CiAKLQlzcGluX3VubG9jaygmZGV2aWNlX2NsaWVudC0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2aWNlX2NsaWVudC0+bG9jaywgZmxhZ3MpOwogCiAJd2FrZV91cCgmZGV2aWNlX2NsaWVudC0+cXVldWVfd2FpdCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYwppbmRleCA1ZWEzNWRhLi5iZWZkNDg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMKQEAgLTIxLDEzICsyMSwxMSBAQAogCiAjaW5jbHVkZSAibWFpbi5oIgogI2luY2x1ZGUgImhhcmQtaW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAibG9nLmgiCiAjaW5jbHVkZSAic29mdC1pbnRlcmZhY2UuaCIKICNpbmNsdWRlICJzZW5kLmgiCiAjaW5jbHVkZSAidHJhbnNsYXRpb24tdGFibGUuaCIKICNpbmNsdWRlICJyb3V0aW5nLmgiCiAjaW5jbHVkZSAiaGFzaC5oIgotI2luY2x1ZGUgImNvbXBhdC5oIgogCiAjZGVmaW5lIE1JTih4LCB5KSAoKHgpIDwgKHkpID8gKHgpIDogKHkpKQogCkBAIC03NSw3ICs3Myw2IEBACiBzdGF0aWMgdm9pZCBjaGVja19rbm93bl9tYWNfYWRkcih1aW50OF90ICphZGRyKQogewogCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZjsKLQljaGFyIG1hY19zdHJpbmdbRVRIX1NUUl9MRU5dOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGJhdG1hbl9pZiwgJmlmX2xpc3QsIGxpc3QpIHsKQEAgLTg2LDEwICs4Myw5IEBACiAJCWlmICghY29tcGFyZV9vcmlnKGJhdG1hbl9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIGFkZHIpKQogCQkJY29udGludWU7CiAKLQkJYWRkcl90b19zdHJpbmcobWFjX3N0cmluZywgYWRkcik7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9XQVJOLCAiVGhlIG5ld2x5IGFkZGVkIG1hYyBhZGRyZXNzICglcykgYWxyZWFkeSBleGlzdHMgb246ICVzXG4iLAotCQkgICAgICAgICAgbWFjX3N0cmluZywgYmF0bWFuX2lmLT5kZXYpOwotCQlkZWJ1Z19sb2coTE9HX1RZUEVfV0FSTiwgIkl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGtlZXAgbWFjIGFkZHJlc3NlcyB1bmlxdWUgdG8gYXZvaWQgcHJvYmxlbXMhXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmF0bWFuLWFkdjpUaGUgbmV3bHkgYWRkZWQgbWFjIGFkZHJlc3MgKCVwTSkgYWxyZWFkeSBleGlzdHMgb246ICVzXG4iLAorCQkgICAgICAgYWRkciwgYmF0bWFuX2lmLT5kZXYpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJiYXRtYW4tYWR2Okl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGtlZXAgbWFjIGFkZHJlc3NlcyB1bmlxdWUgdG8gYXZvaWQgcHJvYmxlbXMhXG4iKTsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CkBAIC0xNTQsOSArMTUwLDYgQEAKIAlpZiAoYmF0bWFuX2lmLT5pZl9hY3RpdmUgIT0gSUZfQUNUSVZFKQogCQlyZXR1cm47CiAKLQlpZiAoYmF0bWFuX2lmLT5yYXdfc29jaykKLQkJc29ja19yZWxlYXNlKGJhdG1hbl9pZi0+cmF3X3NvY2spOwotCiAJLyoqCiAJICogYmF0bWFuX2lmLT5uZXRfZGV2IGhhcyBiZWVuIGFjcXVpcmVkIGJ5IGRldl9nZXRfYnlfbmFtZSgpIGluCiAJICogcHJvY19pbnRlcmZhY2VzX3dyaXRlKCkgYW5kIGhhcyB0byBiZSB1bnJlZmVyZW5jZWQuCkBAIC0xNjUsMjIgKzE1OCwxNiBAQAogCWlmIChiYXRtYW5faWYtPm5ldF9kZXYpCiAJCWRldl9wdXQoYmF0bWFuX2lmLT5uZXRfZGV2KTsKIAotCWJhdG1hbl9pZi0+cmF3X3NvY2sgPSBOVUxMOwotCWJhdG1hbl9pZi0+bmV0X2RldiA9IE5VTEw7Ci0KIAliYXRtYW5faWYtPmlmX2FjdGl2ZSA9IElGX0lOQUNUSVZFOwogCWFjdGl2ZV9pZnMtLTsKIAotCWRlYnVnX2xvZyhMT0dfVFlQRV9OT1RJQ0UsICJJbnRlcmZhY2UgZGVhY3RpdmF0ZWQ6ICVzXG4iLAotCSAgICAgICAgICBiYXRtYW5faWYtPmRldik7CisJcHJpbnRrKEtFUk5fSU5GTyAiYmF0bWFuLWFkdjpJbnRlcmZhY2UgZGVhY3RpdmF0ZWQ6ICVzXG4iLAorCQkgIGJhdG1hbl9pZi0+ZGV2KTsKIH0KIAogLyogKHJlKWFjdGl2YXRlIGdpdmVuIGludGVyZmFjZS4gKi8KIHN0YXRpYyB2b2lkIGhhcmRpZl9hY3RpdmF0ZV9pbnRlcmZhY2Uoc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmKQogewotCXN0cnVjdCBzb2NrYWRkcl9sbCBiaW5kX2FkZHI7Ci0JaW50IHJldHZhbDsKLQogCWlmIChiYXRtYW5faWYtPmlmX2FjdGl2ZSAhPSBJRl9JTkFDVElWRSkKIAkJcmV0dXJuOwogCkBAIC0xOTIsMzUgKzE3OSw4IEBACiAJaWYgKCFiYXRtYW5faWYtPm5ldF9kZXYpCiAJCWdvdG8gZGV2X2VycjsKIAotCXJldHZhbCA9IHNvY2tfY3JlYXRlX2tlcm4oUEZfUEFDS0VULCBTT0NLX1JBVywKLQkJCQkgIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQkFUTUFOKSwKLQkJCQkgICZiYXRtYW5faWYtPnJhd19zb2NrKTsKLQotCWlmIChyZXR2YWwgPCAwKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9XQVJOLCAiQ2FuJ3QgY3JlYXRlIHJhdyBzb2NrZXQ6ICVpXG4iLAotCQkJICByZXR2YWwpOwotCQlnb3RvIHNvY2tfZXJyOwotCX0KLQotCWJpbmRfYWRkci5zbGxfZmFtaWx5ID0gQUZfUEFDS0VUOwotCWJpbmRfYWRkci5zbGxfaWZpbmRleCA9IGJhdG1hbl9pZi0+bmV0X2Rldi0+aWZpbmRleDsKLQliaW5kX2FkZHIuc2xsX3Byb3RvY29sID0gMDsJLyogaXMgc2V0IGJ5IHRoZSBrZXJuZWwgKi8KLQotCXJldHZhbCA9IGtlcm5lbF9iaW5kKGJhdG1hbl9pZi0+cmF3X3NvY2ssCi0JCQkgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmYmluZF9hZGRyLCBzaXplb2YoYmluZF9hZGRyKSk7Ci0KLQlpZiAocmV0dmFsIDwgMCkgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfV0FSTiwgIkNhbid0IGNyZWF0ZSBiaW5kIHJhdyBzb2NrZXQ6ICVpXG4iLAotCQkJICByZXR2YWwpOwotCQlnb3RvIGJpbmRfZXJyOwotCX0KLQogCWNoZWNrX2tub3duX21hY19hZGRyKGJhdG1hbl9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIpOwogCi0JYmF0bWFuX2lmLT5yYXdfc29jay0+c2stPnNrX3VzZXJfZGF0YSA9Ci0JCWJhdG1hbl9pZi0+cmF3X3NvY2stPnNrLT5za19kYXRhX3JlYWR5OwotCWJhdG1hbl9pZi0+cmF3X3NvY2stPnNrLT5za19kYXRhX3JlYWR5ID0gYmF0bWFuX2RhdGFfcmVhZHk7Ci0KIAlhZGRyX3RvX3N0cmluZyhiYXRtYW5faWYtPmFkZHJfc3RyLCBiYXRtYW5faWYtPm5ldF9kZXYtPmRldl9hZGRyKTsKIAogCW1lbWNweSgoKHN0cnVjdCBiYXRtYW5fcGFja2V0ICopKGJhdG1hbl9pZi0+cGFja2V0X2J1ZmYpKS0+b3JpZywKQEAgLTIzNSwxNyArMTk1LDEyIEBACiAJaWYgKGJhdG1hbl9pZi0+aWZfbnVtID09IDApCiAJCXNldF9tYWluX2lmX2FkZHIoYmF0bWFuX2lmLT5uZXRfZGV2LT5kZXZfYWRkcik7CiAKLQlkZWJ1Z19sb2coTE9HX1RZUEVfTk9USUNFLCAiSW50ZXJmYWNlIGFjdGl2YXRlZDogJXNcbiIsCi0JICAgICAgICAgIGJhdG1hbl9pZi0+ZGV2KTsKKwlwcmludGsoS0VSTl9JTkZPICJiYXRtYW4tYWR2OkludGVyZmFjZSBhY3RpdmF0ZWQ6ICVzXG4iLAorCQkgIGJhdG1hbl9pZi0+ZGV2KTsKIAogCXJldHVybjsKIAotYmluZF9lcnI6Ci0Jc29ja19yZWxlYXNlKGJhdG1hbl9pZi0+cmF3X3NvY2spOwotc29ja19lcnI6Ci0JZGV2X3B1dChiYXRtYW5faWYtPm5ldF9kZXYpOwogZGV2X2VycjoKLQliYXRtYW5faWYtPnJhd19zb2NrID0gTlVMTDsKIAliYXRtYW5faWYtPm5ldF9kZXYgPSBOVUxMOwogfQogCkBAIC0yOTAsNyArMjQ1LDcgQEAKIAlkYXRhX3B0ciA9IGttYWxsb2MoKGlmX251bSArIDEpICogc2l6ZW9mKFRZUEVfT0ZfV09SRCkgKiBOVU1fV09SRFMsCiAJCQkgICBHRlBfQVRPTUlDKTsKIAlpZiAoIWRhdGFfcHRyKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9XQVJOLCAiQ2FuJ3QgcmVzaXplIG9yaWc6IG91dCBvZiBtZW1vcnlcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6Q2FuJ3QgcmVzaXplIG9yaWc6IG91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0zMDEsNyArMjU2LDcgQEAKIAogCWRhdGFfcHRyID0ga21hbGxvYygoaWZfbnVtICsgMSkgKiBzaXplb2YodWludDhfdCksIEdGUF9BVE9NSUMpOwogCWlmICghZGF0YV9wdHIpIHsKLQkJZGVidWdfbG9nKExPR19UWVBFX1dBUk4sICJDYW4ndCByZXNpemUgb3JpZzogb3V0IG9mIG1lbW9yeVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjpDYW4ndCByZXNpemUgb3JpZzogb3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTMxOSwxNiArMjc0LDE2IEBACiAJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmOwogCXN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0OwogCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKLQlzdHJ1Y3QgaGFzaF9pdF90ICpoYXNoaXQgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJSEFTSElUKGhhc2hpdCk7CiAKIAliYXRtYW5faWYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYmF0bWFuX2lmKSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIWJhdG1hbl9pZikgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfV0FSTiwgIkNhbid0IGFkZCBpbnRlcmZhY2UgKCVzKTogb3V0IG9mIG1lbW9yeVxuIiwgZGV2KTsKKwkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OkNhbid0IGFkZCBpbnRlcmZhY2UgKCVzKTogb3V0IG9mIG1lbW9yeVxuIiwgZGV2KTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWJhdG1hbl9pZi0+cmF3X3NvY2sgPSBOVUxMOwogCWJhdG1hbl9pZi0+bmV0X2RldiA9IE5VTEw7CiAKIAlpZiAoKGlmX251bSA9PSAwKSAmJiAobnVtX2huYSA+IDApKQpAQCAtMzM5LDcgKzI5NCw3IEBACiAJYmF0bWFuX2lmLT5wYWNrZXRfYnVmZiA9IGttYWxsb2MoYmF0bWFuX2lmLT5wYWNrZXRfbGVuLCBHRlBfS0VSTkVMKTsKIAogCWlmICghYmF0bWFuX2lmLT5wYWNrZXRfYnVmZikgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfV0FSTiwgIkNhbid0IGFkZCBpbnRlcmZhY2UgcGFja2V0ICglcyk6IG91dCBvZiBtZW1vcnlcbiIsIGRldik7CisJCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjpDYW4ndCBhZGQgaW50ZXJmYWNlIHBhY2tldCAoJXMpOiBvdXQgb2YgbWVtb3J5XG4iLCBkZXYpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTM0OCw3ICszMDMsNyBAQAogCWJhdG1hbl9pZi0+aWZfYWN0aXZlID0gSUZfSU5BQ1RJVkU7CiAJSU5JVF9SQ1VfSEVBRCgmYmF0bWFuX2lmLT5yY3UpOwogCi0JZGVidWdfbG9nKExPR19UWVBFX05PVElDRSwgIkFkZGluZyBpbnRlcmZhY2U6ICVzXG4iLCBkZXYpOworCXByaW50ayhLRVJOX0lORk8gImJhdG1hbi1hZHY6QWRkaW5nIGludGVyZmFjZTogJXNcbiIsIGRldik7CiAJYXZhaWxfaWZzKys7CiAKIAlJTklUX0xJU1RfSEVBRCgmYmF0bWFuX2lmLT5saXN0KTsKQEAgLTM3NiwyMCArMzMxLDIwIEBACiAKIAkvKiByZXNpemUgYWxsIG9yaWcgbm9kZXMgYmVjYXVzZSBvcmlnX25vZGUtPmJjYXN0X293bihfc3VtKSBkZXBlbmQgb24KIAkgKiBpZl9udW0gKi8KLQlzcGluX2xvY2soJm9yaWdfaGFzaF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKIAotCXdoaWxlIChOVUxMICE9IChoYXNoaXQgPSBoYXNoX2l0ZXJhdGUob3JpZ19oYXNoLCBoYXNoaXQpKSkgewotCQlvcmlnX25vZGUgPSBoYXNoaXQtPmJ1Y2tldC0+ZGF0YTsKKwl3aGlsZSAoaGFzaF9pdGVyYXRlKG9yaWdfaGFzaCwgJmhhc2hpdCkpIHsKKwkJb3JpZ19ub2RlID0gaGFzaGl0LmJ1Y2tldC0+ZGF0YTsKIAkJaWYgKHJlc2l6ZV9vcmlnKG9yaWdfbm9kZSwgaWZfbnVtKSA9PSAtMSkgewotCQkJc3Bpbl91bmxvY2soJm9yaWdfaGFzaF9sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KIAotCXNwaW5fdW5sb2NrKCZvcmlnX2hhc2hfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKIAogCWlmICghaGFyZGlmX2lzX2ludGVyZmFjZV91cChiYXRtYW5faWYtPmRldikpCi0JCWRlYnVnX2xvZyhMT0dfVFlQRV9XQVJOLCAiTm90IHVzaW5nIGludGVyZmFjZSAlcyAocmV0cnlpbmcgbGF0ZXIpOiBpbnRlcmZhY2Ugbm90IGFjdGl2ZVxuIiwgYmF0bWFuX2lmLT5kZXYpOworCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6Tm90IHVzaW5nIGludGVyZmFjZSAlcyAocmV0cnlpbmcgbGF0ZXIpOiBpbnRlcmZhY2Ugbm90IGFjdGl2ZVxuIiwgYmF0bWFuX2lmLT5kZXYpOwogCWVsc2UKIAkJaGFyZGlmX2FjdGl2YXRlX2ludGVyZmFjZShiYXRtYW5faWYpOwogCkBAIC00MDAsOCArMzU1LDcgQEAKIAlyZXR1cm4gMTsKIAogb3V0OgotCWlmIChiYXRtYW5faWYtPnBhY2tldF9idWZmKQotCQlrZnJlZShiYXRtYW5faWYtPnBhY2tldF9idWZmKTsKKwlrZnJlZShiYXRtYW5faWYtPnBhY2tldF9idWZmKTsKIAlrZnJlZShiYXRtYW5faWYpOwogCWtmcmVlKGRldik7CiAJcmV0dXJuIC0xOwpAQCAtNDEzLDcgKzM2Nyw3IEBACiB9CiAKIHN0YXRpYyBpbnQgaGFyZF9pZl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQorCQkJICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopcHRyOwogCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZiA9IGdldF9iYXRtYW5faWZfYnlfbmFtZShkZXYtPm5hbWUpOwpAQCAtNDM2LDcgKzM5MCw2IEBACiAJCWJyZWFrOwogCS8qIE5FVERFVl9DSEFOR0VBRERSIC0gbWFjIGFkZHJlc3MgY2hhbmdlIC0gd2hhdCBhcmUgd2UgZG9pbmcgaGVyZSA/ICovCiAJZGVmYXVsdDoKLQkJLyogZGVidWdfbG9nKExPR19UWVBFX0NSSVQsICJoYXJkX2lmX2V2ZW50OiAlcyAlaVxuIiwgZGV2LT5uYW1lLCBldmVudCk7ICovCiAJCWJyZWFrOwogCX07CiAKQEAgLTQ0Niw2ICszOTksMTIyIEBACiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQogCisvKiBmaW5kIGJhdG1hbiBpbnRlcmZhY2UgYnkgbmV0ZGV2LiBhc3N1bWVzIHJjdV9yZWFkX2xvY2sgb24gKi8KK3N0YXRpYyBzdHJ1Y3QgYmF0bWFuX2lmICpmaW5kX2JhdG1hbl9pZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZjsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShiYXRtYW5faWYsICZpZl9saXN0LCBsaXN0KSB7CisJCWlmIChiYXRtYW5faWYtPm5ldF9kZXYgPT0gZGV2KSB7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCXJldHVybiBiYXRtYW5faWY7CisJCX0KKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKworLyogcmVjZWl2ZSBhIHBhY2tldCB3aXRoIHRoZSBiYXRtYW4gZXRoZXJ0eXBlIGNvbWluZyBvbiBhIGhhcmQKKyAqIGludGVyZmFjZSAqLworaW50IGJhdG1hbl9za2JfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCXN0cnVjdCBwYWNrZXRfdHlwZSAqcHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKK3sKKwlzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldDsKKwlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWY7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzOworCWludCByZXQ7CisKKwlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKKworCS8qIHNrYiB3YXMgcmVsZWFzZWQgYnkgc2tiX3NoYXJlX2NoZWNrKCkgKi8KKwlpZiAoIXNrYikKKwkJZ290byBlcnJfb3V0OworCisJaWYgKGF0b21pY19yZWFkKCZtb2R1bGVfc3RhdGUpICE9IE1PRFVMRV9BQ1RJVkUpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwkvKiBwYWNrZXQgc2hvdWxkIGhvbGQgYXQgbGVhc3QgdHlwZSBhbmQgdmVyc2lvbiAqLworCWlmICh1bmxpa2VseShza2JfaGVhZGxlbihza2IpIDwgMikpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwkvKiBleHBlY3QgYSB2YWxpZCBldGhlcm5ldCBoZWFkZXIgaGVyZS4gKi8KKwlpZiAodW5saWtlbHkoc2tiLT5tYWNfbGVuICE9IHNpemVvZihzdHJ1Y3QgZXRoaGRyKQorCQkJCXx8ICFza2JfbWFjX2hlYWRlcihza2IpKSkKKwkJZ290byBlcnJfZnJlZTsKKworCWJhdG1hbl9pZiA9IGZpbmRfYmF0bWFuX2lmKHNrYi0+ZGV2KTsKKwlpZiAoIWJhdG1hbl9pZikKKwkJZ290byBlcnJfZnJlZTsKKworCS8qIGRpc2NhcmQgZnJhbWVzIG9uIG5vdCBhY3RpdmUgaW50ZXJmYWNlcyAqLworCWlmIChiYXRtYW5faWYtPmlmX2FjdGl2ZSAhPSBJRl9BQ1RJVkUpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlzdGF0cyA9IChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKWRldl9nZXRfc3RhdHMoc2tiLT5kZXYpOworCWlmIChzdGF0cykgeworCQlzdGF0cy0+cnhfcGFja2V0cysrOworCQlzdGF0cy0+cnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJfQorCisJYmF0bWFuX3BhY2tldCA9IChzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqKXNrYi0+ZGF0YTsKKworCWlmIChiYXRtYW5fcGFja2V0LT52ZXJzaW9uICE9IENPTVBBVF9WRVJTSU9OKSB7CisJCWJhdF9kYmcoREJHX0JBVE1BTiwKKwkJCSJEcm9wIHBhY2tldDogaW5jb21wYXRpYmxlIGJhdG1hbiB2ZXJzaW9uICglaSlcbiIsCisJCQliYXRtYW5fcGFja2V0LT52ZXJzaW9uKTsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwkvKiBhbGwgcmVjZWl2ZSBoYW5kbGVycyByZXR1cm4gd2hldGhlciB0aGV5IHJlY2VpdmVkIG9yIHJldXNlZAorCSAqIHRoZSBzdXBwbGllZCBza2IuIGlmIG5vdCwgd2UgaGF2ZSB0byBmcmVlIHRoZSBza2IuICovCisKKwlzd2l0Y2ggKGJhdG1hbl9wYWNrZXQtPnBhY2tldF90eXBlKSB7CisJCS8qIGJhdG1hbiBvcmlnaW5hdG9yIHBhY2tldCAqLworCWNhc2UgQkFUX1BBQ0tFVDoKKwkJcmV0ID0gcmVjdl9iYXRfcGFja2V0KHNrYiwgYmF0bWFuX2lmKTsKKwkJYnJlYWs7CisKKwkJLyogYmF0bWFuIGljbXAgcGFja2V0ICovCisJY2FzZSBCQVRfSUNNUDoKKwkJcmV0ID0gcmVjdl9pY21wX3BhY2tldChza2IpOworCQlicmVhazsKKworCQkvKiB1bmljYXN0IHBhY2tldCAqLworCWNhc2UgQkFUX1VOSUNBU1Q6CisJCXJldCA9IHJlY3ZfdW5pY2FzdF9wYWNrZXQoc2tiKTsKKwkJYnJlYWs7CisKKwkJLyogYnJvYWRjYXN0IHBhY2tldCAqLworCWNhc2UgQkFUX0JDQVNUOgorCQlyZXQgPSByZWN2X2JjYXN0X3BhY2tldChza2IpOworCQlicmVhazsKKworCQkvKiB2aXMgcGFja2V0ICovCisJY2FzZSBCQVRfVklTOgorCQlyZXQgPSByZWN2X3Zpc19wYWNrZXQoc2tiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gTkVUX1JYX0RST1A7CisJfQorCisJaWYgKHJldCA9PSBORVRfUlhfRFJPUCkKKwkJa2ZyZWVfc2tiKHNrYik7CisKKwkvKiByZXR1cm4gTkVUX1JYX1NVQ0NFU1MgaW4gYW55IGNhc2UgYXMgd2UKKwkgKiBtb3N0IHByb2JhYmx5IGRyb3BwZWQgdGhlIHBhY2tldCBmb3IKKwkgKiByb3V0aW5nLWxvZ2ljYWwgcmVhc29ucy4gKi8KKworCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKKworZXJyX2ZyZWU6CisJa2ZyZWVfc2tiKHNrYik7CitlcnJfb3V0OgorCXJldHVybiBORVRfUlhfRFJPUDsKK30KKworCiBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaGFyZF9pZl9ub3RpZmllciA9IHsKLSAgICAgICAgLm5vdGlmaWVyX2NhbGwgPSBoYXJkX2lmX2V2ZW50LAorCS5ub3RpZmllcl9jYWxsID0gaGFyZF9pZl9ldmVudCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaAppbmRleCA3NDIzNThjLi45N2M2ZWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmgKQEAgLTMyLDUgKzMyLDkgQEAKIGNoYXIgaGFyZGlmX2dldF9hY3RpdmVfaWZfbnVtKHZvaWQpOwogdm9pZCBoYXJkaWZfY2hlY2tfaW50ZXJmYWNlc19zdGF0dXModm9pZCk7CiB2b2lkIGhhcmRpZl9jaGVja19pbnRlcmZhY2VzX3N0YXR1c193cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworaW50IGJhdG1hbl9za2JfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IHBhY2tldF90eXBlICpwdHlwZSwKKwkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpOwogaW50IGhhcmRpZl9taW5fbXR1KHZvaWQpOwogdm9pZCB1cGRhdGVfbWluX210dSh2b2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2hhc2guYyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2hhc2guYwppbmRleCA2MWNiNGEyLi41YTIwMThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9oYXNoLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaGFzaC5jCkBAIC02NCwyNCArNjQsMTggQEAKIAlrZnJlZShoYXNoKTsKIH0KIAotLyogaXRlcmF0ZSB0aG91Z2ggdGhlIGhhc2guIGZpcnN0IGVsZW1lbnQgaXMgc2VsZWN0ZWQgd2l0aCBpdGVyX2luIE5VTEwuICB1c2UKLSAqIHRoZSByZXR1cm5lZCBpdGVyYXRvciB0byBhY2Nlc3MgdGhlIGVsZW1lbnRzIHVudGlsIGhhc2hfaXRfdCByZXR1cm5zIE5VTEwuICovCi1zdHJ1Y3QgaGFzaF9pdF90ICpoYXNoX2l0ZXJhdGUoc3RydWN0IGhhc2h0YWJsZV90ICpoYXNoLAotCQkJICAgICAgIHN0cnVjdCBoYXNoX2l0X3QgKml0ZXJfaW4pCi17Ci0Jc3RydWN0IGhhc2hfaXRfdCAqaXRlcjsKKy8qIGl0ZXJhdGUgdGhvdWdoIHRoZSBoYXNoLiBGaXJzdCBlbGVtZW50IGlzIHNlbGVjdGVkIGlmIGFuIGl0ZXJhdG9yCisgKiBpbml0aWFsaXplZCB3aXRoIEhBU0hJVCgpIGlzIHN1cHBsaWVkIGFzIGl0ZXIuIFVzZSB0aGUgcmV0dXJuZWQKKyAqIChvciBzdXBwbGllZCkgaXRlcmF0b3IgdG8gYWNjZXNzIHRoZSBlbGVtZW50cyB1bnRpbCBoYXNoX2l0ZXJhdGUgcmV0dXJucworICogTlVMTC4gKi8KIAorc3RydWN0IGhhc2hfaXRfdCAqaGFzaF9pdGVyYXRlKHN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCwKKwkJCSAgICAgICBzdHJ1Y3QgaGFzaF9pdF90ICppdGVyKQorewogCWlmICghaGFzaCkKIAkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAoaXRlcl9pbiA9PSBOVUxMKSB7Ci0JCWl0ZXIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGFzaF9pdF90KSwgR0ZQX0FUT01JQyk7Ci0JCWl0ZXItPmluZGV4ID0gLTE7Ci0JCWl0ZXItPmJ1Y2tldCA9IE5VTEw7Ci0JCWl0ZXItPnByZXZfYnVja2V0ID0gTlVMTDsKLQl9IGVsc2UgewotCQlpdGVyID0gaXRlcl9pbjsKLQl9CisJaWYgKCFpdGVyKQorCQlyZXR1cm4gTlVMTDsKIAogCS8qIHNhbml0eSBjaGVja3MgZmlyc3QgKGlmIG91ciBidWNrZXQgZ290IGRlbGV0ZWQgaW4gdGhlIGxhc3QKIAkgKiBpdGVyYXRpb24pOiAqLwpAQCAtMTM5LDcgKzEzMyw2IEBACiAJfQogCiAJLyogbm90aGluZyB0byBpdGVyYXRlIG92ZXIgYW55bW9yZSAqLwotCWtmcmVlKGl0ZXIpOwogCXJldHVybiBOVUxMOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9oYXNoLmggYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9oYXNoLmgKaW5kZXggYmI2MGYwOC4uYTcwZDZkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaGFzaC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2hhc2guaApAQCAtMjEsNiArMjEsMTEgQEAKIAogI2lmbmRlZiBfQkFUTUFOX0hBU0hfSAogI2RlZmluZSBfQkFUTUFOX0hBU0hfSAorI2RlZmluZSBIQVNISVQobmFtZSkgc3RydWN0IGhhc2hfaXRfdCBuYW1lID0geyBcCisJCS5pbmRleCA9IC0xLCAuYnVja2V0ID0gTlVMTCwgXAorCQkucHJldl9idWNrZXQgPSBOVUxMLCBcCisJCS5maXJzdF9idWNrZXQgPSBOVUxMIH0KKwogCiB0eXBlZGVmIGludCAoKmhhc2hkYXRhX2NvbXBhcmVfY2IpKHZvaWQgKiwgdm9pZCAqKTsKIHR5cGVkZWYgaW50ICgqaGFzaGRhdGFfY2hvb3NlX2NiKSh2b2lkICosIGludCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9sb2cuYyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2xvZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzdjN2YwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2xvZy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBCLkEuVC5NLkEuTi4gY29udHJpYnV0b3JzOgotICoKLSAqIE1hcmVrIExpbmRuZXIsIFNpbW9uIFd1bmRlcmxpY2gKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEsIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSAibWFpbi5oIgotI2luY2x1ZGUgImxvZy5oIgotCi0jZGVmaW5lIExPR19CVUZfTUFTSyAobG9nX2J1Zl9sZW4tMSkKLSNkZWZpbmUgTE9HX0JVRihpZHgpIChsb2dfYnVmWyhpZHgpICYgTE9HX0JVRl9NQVNLXSkKLQotc3RhdGljIGNoYXIgbG9nX2J1ZltMT0dfQlVGX0xFTl07Ci1zdGF0aWMgaW50IGxvZ19idWZfbGVuID0gTE9HX0JVRl9MRU47Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBsb2dfc3RhcnQ7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBsb2dfZW5kOwotdWludDhfdCBsb2dfbGV2ZWw7Ci0KLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobG9nYnVmX2xvY2spOwotCi1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbG9nX29wZXJhdGlvbnMgPSB7Ci0JLm9wZW4gICAgICAgICAgID0gbG9nX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gbG9nX3JlbGVhc2UsCi0JLnJlYWQgICAgICAgICAgID0gbG9nX3JlYWQsCi0JLndyaXRlICAgICAgICAgID0gbG9nX3dyaXRlLAotCS5wb2xsICAgICAgICAgICA9IGxvZ19wb2xsLAotfTsKLQotc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGxvZ193YWl0KTsKLQotc3RhdGljIHZvaWQgZW1pdF9sb2dfY2hhcihjaGFyIGMpCi17Ci0JTE9HX0JVRihsb2dfZW5kKSA9IGM7Ci0JbG9nX2VuZCsrOwotCi0JaWYgKGxvZ19lbmQgLSBsb2dfc3RhcnQgPiBsb2dfYnVmX2xlbikKLQkJbG9nX3N0YXJ0ID0gbG9nX2VuZCAtIGxvZ19idWZfbGVuOwotfQotCi1zdGF0aWMgaW50IGZkZWJ1Z19sb2coY2hhciAqZm10LCAuLi4pCi17Ci0JaW50IHByaW50ZWRfbGVuOwotCWNoYXIgKnA7Ci0JdmFfbGlzdCBhcmdzOwotCXN0YXRpYyBjaGFyIGRlYnVnX2xvZ19idWZbMjU2XTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmxvZ2J1Zl9sb2NrLCBmbGFncyk7Ci0JdmFfc3RhcnQoYXJncywgZm10KTsKLQlwcmludGVkX2xlbiA9IHZzY25wcmludGYoZGVidWdfbG9nX2J1Ziwgc2l6ZW9mKGRlYnVnX2xvZ19idWYpLCBmbXQsCi0JCQkJIGFyZ3MpOwotCXZhX2VuZChhcmdzKTsKLQotCWZvciAocCA9IGRlYnVnX2xvZ19idWY7ICpwICE9IDA7IHArKykKLQkJZW1pdF9sb2dfY2hhcigqcCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2didWZfbG9jaywgZmxhZ3MpOwotCi0Jd2FrZV91cCgmbG9nX3dhaXQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBkZWJ1Z19sb2coaW50IHR5cGUsIGNoYXIgKmZtdCwgLi4uKQotewotCXZhX2xpc3QgYXJnczsKLQlpbnQgcmV0dmFsID0gMDsKLQljaGFyIHRtcF9sb2dfYnVmWzI1Nl07Ci0KLQkvKiBvbmx5IGNyaXRpY2FsIGluZm9ybWF0aW9uIGdldCBpbnRvIHRoZSBvZmZpY2lhbCBrZXJuZWwgbG9nICovCi0JaWYgKHR5cGUgPT0gTE9HX1RZUEVfQ1JJVCkgewotCQl2YV9zdGFydChhcmdzLCBmbXQpOwotCQl2c2NucHJpbnRmKHRtcF9sb2dfYnVmLCBzaXplb2YodG1wX2xvZ19idWYpLCBmbXQsIGFyZ3MpOwotCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6ICVzIiwgdG1wX2xvZ19idWYpOwotCQl2YV9lbmQoYXJncyk7Ci0JfQotCi0JaWYgKCh0eXBlID09IExPR19UWVBFX0NSSVQpIHx8IChsb2dfbGV2ZWwgJiB0eXBlKSkgewotCQl2YV9zdGFydChhcmdzLCBmbXQpOwotCQl2c2NucHJpbnRmKHRtcF9sb2dfYnVmLCBzaXplb2YodG1wX2xvZ19idWYpLCBmbXQsIGFyZ3MpOwotCQlmZGVidWdfbG9nKCJbJTEwdV0gJXMiLCAoamlmZmllcyAvIEhaKSwgdG1wX2xvZ19idWYpOwotCQl2YV9lbmQoYXJncyk7Ci0JfQotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotaW50IGxvZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWluY19tb2R1bGVfY291bnQoKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IGxvZ19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWRlY19tb2R1bGVfY291bnQoKTsKLQlyZXR1cm4gMDsKLX0KLQotc3NpemVfdCBsb2dfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAotCQkgbG9mZl90ICpwcG9zKQotewotCWludCBlcnJvciwgaSA9IDA7Ci0JY2hhciBjOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSAmJiAhKGxvZ19lbmQgLSBsb2dfc3RhcnQpKQotCQlyZXR1cm4gLUVBR0FJTjsKLQotCWlmICgoIWJ1ZikgfHwgKGNvdW50IDwgMCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGNvdW50ID09IDApCi0JCXJldHVybiAwOwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBidWYsIGNvdW50KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQllcnJvciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShsb2dfd2FpdCwgKGxvZ19zdGFydCAtIGxvZ19lbmQpKTsKLQotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmxvZ2J1Zl9sb2NrLCBmbGFncyk7Ci0KLQl3aGlsZSAoKCFlcnJvcikgJiYgKGxvZ19zdGFydCAhPSBsb2dfZW5kKSAmJiAoaSA8IGNvdW50KSkgewotCQljID0gTE9HX0JVRihsb2dfc3RhcnQpOwotCi0JCWxvZ19zdGFydCsrOwotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvZ2J1Zl9sb2NrLCBmbGFncyk7Ci0KLQkJZXJyb3IgPSBfX3B1dF91c2VyKGMsIGJ1Zik7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvZ2J1Zl9sb2NrLCBmbGFncyk7Ci0KLQkJYnVmKys7Ci0JCWkrKzsKLQotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvZ2J1Zl9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIWVycm9yKQotCQlyZXR1cm4gaTsKLQotCXJldHVybiBlcnJvcjsKLX0KLQotc3NpemVfdCBsb2dfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKLQkJICBsb2ZmX3QgKnBwb3MpCi17Ci0JcmV0dXJuIGNvdW50OwotfQotCi11bnNpZ25lZCBpbnQgbG9nX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCi17Ci0JcG9sbF93YWl0KGZpbGUsICZsb2dfd2FpdCwgd2FpdCk7Ci0KLQlpZiAobG9nX2VuZCAtIGxvZ19zdGFydCkKLQkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L21haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L21haW4uYwppbmRleCBiYjg5YmZjLi4yZTBiNDgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9tYWluLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvbWFpbi5jCkBAIC0yMSw5ICsyMSw5IEBACiAKICNpbmNsdWRlICJtYWluLmgiCiAjaW5jbHVkZSAicHJvYy5oIgotI2luY2x1ZGUgImxvZy5oIgogI2luY2x1ZGUgInJvdXRpbmcuaCIKICNpbmNsdWRlICJzZW5kLmgiCisjaW5jbHVkZSAib3JpZ2luYXRvci5oIgogI2luY2x1ZGUgInNvZnQtaW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiZGV2aWNlLmgiCiAjaW5jbHVkZSAidHJhbnNsYXRpb24tdGFibGUuaCIKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJ0eXBlcy5oIgogI2luY2x1ZGUgInZpcy5oIgogI2luY2x1ZGUgImhhc2guaCIKLSNpbmNsdWRlICJjb21wYXQuaCIKIAogc3RydWN0IGxpc3RfaGVhZCBpZl9saXN0Owogc3RydWN0IGhsaXN0X2hlYWQgZm9yd19iYXRfbGlzdDsKQEAgLTQ0LDE5ICs0MywzNCBAQAogCiBhdG9taWNfdCBvcmlnaW5hdG9yX2ludGVydmFsOwogYXRvbWljX3QgdmlzX2ludGVydmFsOworYXRvbWljX3QgdmlzX21vZGU7CiBhdG9taWNfdCBhZ2dyZWdhdGlvbl9lbmFibGVkOwogaW50MTZfdCBudW1faG5hOwogaW50MTZfdCBudW1faWZzOwogCiBzdHJ1Y3QgbmV0X2RldmljZSAqc29mdF9kZXZpY2U7CiAKLXN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmt0aHJlYWRfdGFzazsKLQogdW5zaWduZWQgY2hhciBicm9hZGNhc3RBZGRyW10gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07CiBhdG9taWNfdCBtb2R1bGVfc3RhdGU7CiAKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgYmF0bWFuX2Fkdl9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9CQVRNQU4pLAorCS5mdW5jID0gYmF0bWFuX3NrYl9yZWN2LAorfTsKKwogc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmJhdF9ldmVudF93b3JrcXVldWU7CiAKKyNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9ERUJVRworaW50IGRlYnVnOworCittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CisKK2ludCBiYXRfZGVidWdfdHlwZShpbnQgdHlwZSkKK3sKKwlyZXR1cm4gZGVidWcgJiB0eXBlOworfQorI2VuZGlmCisKIGludCBpbml0X21vZHVsZSh2b2lkKQogewogCWludCByZXR2YWw7CkBAIC03MCw2ICs4NCw3IEBACiAJYXRvbWljX3NldCgmb3JpZ2luYXRvcl9pbnRlcnZhbCwgMTAwMCk7CiAJYXRvbWljX3NldCgmdmlzX2ludGVydmFsLCAxMDAwKTsvKiBUT0RPOiByYWlzZSB0aGlzIGxhdGVyLCB0aGlzIGlzIG9ubHkKIAkJCQkJICogZm9yIGRlYnVnZ2luZyBub3cuICovCisJYXRvbWljX3NldCgmdmlzX21vZGUsIFZJU19UWVBFX0NMSUVOVF9VUERBVEUpOwogCWF0b21pY19zZXQoJmFnZ3JlZ2F0aW9uX2VuYWJsZWQsIDEpOwogCiAJLyogdGhlIG5hbWUgc2hvdWxkIG5vdCBiZSBsb25nZXIgdGhhbiAxMCBjaGFycyAtIHNlZQpAQCAtOTAsMjEgKzEwNSwyMiBAQAogCQkJCSAgIGludGVyZmFjZV9zZXR1cCk7CiAKIAlpZiAoIXNvZnRfZGV2aWNlKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9DUklULCAiVW5hYmxlIHRvIGFsbG9jYXRlIHRoZSBiYXRtYW4gaW50ZXJmYWNlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OlVuYWJsZSB0byBhbGxvY2F0ZSB0aGUgYmF0bWFuIGludGVyZmFjZVxuIik7CiAJCWdvdG8gZW5kOwogCX0KIAogCXJldHZhbCA9IHJlZ2lzdGVyX25ldGRldihzb2Z0X2RldmljZSk7CiAKIAlpZiAocmV0dmFsIDwgMCkgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfQ1JJVCwgIlVuYWJsZSB0byByZWdpc3RlciB0aGUgYmF0bWFuIGludGVyZmFjZTogJWlcbiIsIHJldHZhbCk7CisJCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjpVbmFibGUgdG8gcmVnaXN0ZXIgdGhlIGJhdG1hbiBpbnRlcmZhY2U6ICVpXG4iLCByZXR2YWwpOwogCQlnb3RvIGZyZWVfc29mdF9kZXZpY2U7CiAJfQogCiAJcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZoYXJkX2lmX25vdGlmaWVyKTsKKwlkZXZfYWRkX3BhY2soJmJhdG1hbl9hZHZfcGFja2V0X3R5cGUpOwogCi0JZGVidWdfbG9nKExPR19UWVBFX0NSSVQsICJCLkEuVC5NLkEuTi4gYWR2YW5jZWQgJXMlcyAoY29tcGF0aWJpbGl0eSB2ZXJzaW9uICVpKSBsb2FkZWQgXG4iLAotCSAgICAgICAgICBTT1VSQ0VfVkVSU0lPTiwgUkVWSVNJT05fVkVSU0lPTl9TVFIsIENPTVBBVF9WRVJTSU9OKTsKKwlwcmludGsoS0VSTl9JTkZPICJiYXRtYW4tYWR2OkIuQS5ULk0uQS5OLiBhZHZhbmNlZCAlcyVzIChjb21wYXRpYmlsaXR5IHZlcnNpb24gJWkpIGxvYWRlZCBcbiIsCisJCSAgU09VUkNFX1ZFUlNJT04sIFJFVklTSU9OX1ZFUlNJT05fU1RSLCBDT01QQVRfVkVSU0lPTik7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTI0LDYgKzE0MCw4IEBACiAJCXNvZnRfZGV2aWNlID0gTlVMTDsKIAl9CiAKKwlkZXZfcmVtb3ZlX3BhY2soJmJhdG1hbl9hZHZfcGFja2V0X3R5cGUpOworCiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmhhcmRfaWZfbm90aWZpZXIpOwogCWNsZWFudXBfcHJvY2ZzKCk7CiAKQEAgLTE1MSwyMiArMTY5LDEyIEBACiAJaWYgKHZpc19pbml0KCkgPCAxKQogCQlnb3RvIGVycjsKIAotCS8qIChyZSlzdGFydCBrZXJuZWwgdGhyZWFkIGZvciBwYWNrZXQgcHJvY2Vzc2luZyAqLwotCWlmICgha3RocmVhZF90YXNrKSB7Ci0JCWt0aHJlYWRfdGFzayA9IGt0aHJlYWRfcnVuKHBhY2tldF9yZWN2X3RocmVhZCwgTlVMTCwgImJhdG1hbi1hZHYiKTsKLQotCQlpZiAoSVNfRVJSKGt0aHJlYWRfdGFzaykpIHsKLQkJCWRlYnVnX2xvZyhMT0dfVFlQRV9DUklULCAiVW5hYmxlIHRvIHN0YXJ0IHBhY2tldCByZWNlaXZlIHRocmVhZFxuIik7Ci0JCQlrdGhyZWFkX3Rhc2sgPSBOVUxMOwotCQl9Ci0JfQotCiAJdXBkYXRlX21pbl9tdHUoKTsKIAlhdG9taWNfc2V0KCZtb2R1bGVfc3RhdGUsIE1PRFVMRV9BQ1RJVkUpOwogCWdvdG8gZW5kOwogCiBlcnI6Ci0JZGVidWdfbG9nKExPR19UWVBFX0NSSVQsICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBtZXNoIGluZm9ybWF0aW9uIHN0cnVjdHVyZXM6IG91dCBvZiBtZW0gP1xuIik7CisJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1lc2ggaW5mb3JtYXRpb24gc3RydWN0dXJlczogb3V0IG9mIG1lbSA/XG4iKTsKIAlzaHV0ZG93bl9tb2R1bGUoKTsKIGVuZDoKIAlyZXR1cm47CkBAIC0xODIsMTQgKzE5MCw3IEBACiAKIAl2aXNfcXVpdCgpOwogCi0JLyogZGVhY3RpdmF0ZSBrZXJuZWwgdGhyZWFkIGZvciBwYWNrZXQgcHJvY2Vzc2luZyAoaWYgcnVubmluZykgKi8KLQlpZiAoa3RocmVhZF90YXNrKSB7Ci0JCWF0b21pY19zZXQoJmV4aXRfY29uZCwgMSk7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdGhyZWFkX3dhaXQpOwotCQlrdGhyZWFkX3N0b3Aoa3RocmVhZF90YXNrKTsKLQotCQlrdGhyZWFkX3Rhc2sgPSBOVUxMOwotCX0KKwkvKiBUT0RPOiB1bnJlZ2lzdGVyIEJBVE1BTiBwYWNrICovCiAKIAlvcmlnaW5hdG9yX2ZyZWUoKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvbWFpbi5oIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvbWFpbi5oCmluZGV4IGZhY2I2YjcuLmRlYjQxZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L21haW4uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9tYWluLmgKQEAgLTMzLDE2ICszMywxNiBAQAogCiAjZGVmaW5lIFRRX01BWF9WQUxVRSAyNTUKICNkZWZpbmUgSklUVEVSIDIwCi0jZGVmaW5lIFRUTCA1MAkJICAgICAgICAgIC8qIFRpbWUgVG8gTGl2ZSBvZiBicm9hZGNhc3QgbWVzc2FnZXMgKi8KLSNkZWZpbmUgTUFYX0FERFIgMTYJICAgICAgICAgIC8qIG51bWJlciBvZiBpbnRlcmZhY2VzIHdoaWNoIGNhbiBiZSBhZGRlZCB0bworI2RlZmluZSBUVEwgNTAJCQkgIC8qIFRpbWUgVG8gTGl2ZSBvZiBicm9hZGNhc3QgbWVzc2FnZXMgKi8KKyNkZWZpbmUgTUFYX0FERFIgMTYJCSAgLyogbnVtYmVyIG9mIGludGVyZmFjZXMgd2hpY2ggY2FuIGJlIGFkZGVkIHRvCiAJCQkJICAgKiBiYXRtYW4uICovCiAKLSNkZWZpbmUgUFVSR0VfVElNRU9VVCAyMDAwMDAgICAgICAvKiBwdXJnZSBvcmlnaW5hdG9ycyBhZnRlciB0aW1lIGluIG1zIGlmIG5vCisjZGVmaW5lIFBVUkdFX1RJTUVPVVQgMjAwMDAwCSAgLyogcHVyZ2Ugb3JpZ2luYXRvcnMgYWZ0ZXIgdGltZSBpbiBtcyBpZiBubwogCQkJCSAgICogdmFsaWQgcGFja2V0IGNvbWVzIGluIC0+IFRPRE86IGNoZWNrCiAJCQkJICAgKiBpbmZsdWVuY2Ugb24gVFFfTE9DQUxfV0lORE9XX1NJWkUgKi8KICNkZWZpbmUgTE9DQUxfSE5BX1RJTUVPVVQgMzYwMDAwMAogCi0jZGVmaW5lIFRRX0xPQ0FMX1dJTkRPV19TSVpFIDY0ICAgLyogc2xpZGluZyBwYWNrZXQgcmFuZ2Ugb2YgcmVjZWl2ZWQgb3JpZ2luYXRvcgorI2RlZmluZSBUUV9MT0NBTF9XSU5ET1dfU0laRSA2NAkgIC8qIHNsaWRpbmcgcGFja2V0IHJhbmdlIG9mIHJlY2VpdmVkIG9yaWdpbmF0b3IKIAkJCQkgICAqIG1lc3NhZ2VzIGluIHNxdWVuY2UgbnVtYmVycyAoc2hvdWxkIGJlIGEKIAkJCQkgICAqIG11bHRpcGxlIG9mIG91ciB3b3JkIHNpemUpICovCiAjZGVmaW5lIFRRX0dMT0JBTF9XSU5ET1dfU0laRSA1CkBAIC02OSwyNCArNjksMjcgQEAKIAogCiAvKgotICogTG9nZ2luZworICogRGVidWcgTWVzc2FnZXMKICAqLwogCi0jZGVmaW5lIExPR19UWVBFX0NSSVQgMAkJLyogaGlnaGVzdCBwcmlvcml0eSBmb3IgZmF0YWwgZXJyb3JzIHN1Y2ggYXMKLQkJCQkgKiBibG9ja2VkIHNvY2tldHMgLyBmYWlsZWQgcGFja2V0IGRlbGl2ZXJ5IC8KLQkJCQkgKiBwcm9ncmFtbWluZyBlcnJvcnMgKi8KLSNkZWZpbmUgTE9HX1RZUEVfV0FSTiAxCQkvKiB3YXJuaW5ncyBmb3Igc21hbGwgZXJyb3JzIGxpa2Ugd3JvbmcgdXNlcgotCQkJCSAqIGlucHV0IC8gZGFtYWdlZCBwYWNrZXRzIC8gZXRjICovCi0jZGVmaW5lIExPR19UWVBFX05PVElDRSAyCS8qIG5vdGljZSBpbmZvcm1hdGlvbiBmb3IgbmV3IGludGVyZmFjZXMgLwotCQkJCSAqIGNoYW5nZWQgc2V0dGluZ3MgLyBuZXcgb3JpZ2luYXRvcnMgLyBldGMgKi8KLSNkZWZpbmUgTE9HX1RZUEVfQkFUTUFOIDQJLyogYWxsIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gcm91dGluZyAvIGZsb29kaW5nIC8KLQkJCQkgKiBicm9hZGNhc3RpbmcgLyBldGMgKi8KLSNkZWZpbmUgTE9HX1RZUEVfUk9VVEVTIDgJLyogcm91dGUgb3IgaG5hIGFkZGVkIC8gY2hhbmdlZCAvIGRlbGV0ZWQgKi8KLSNkZWZpbmUgTE9HX1RZUEVfQ1JJVF9OQU1FCSJjcml0aWNhbCIKLSNkZWZpbmUgTE9HX1RZUEVfV0FSTl9OQU1FCSJ3YXJuaW5ncyIKLSNkZWZpbmUgTE9HX1RZUEVfTk9USUNFX05BTUUJIm5vdGljZXMiCi0jZGVmaW5lIExPR19UWVBFX0JBVE1BTl9OQU1FCSJiYXRtYW4iCi0jZGVmaW5lIExPR19UWVBFX1JPVVRFU19OQU1FCSJyb3V0ZXMiCisjZGVmaW5lIERCR19CQVRNQU4gMQkvKiBhbGwgbWVzc2FnZXMgcmVsYXRlZCB0byByb3V0aW5nIC8gZmxvb2RpbmcgLworCQkJICogYnJvYWRjYXN0aW5nIC8gZXRjICovCisjZGVmaW5lIERCR19ST1VURVMgMgkvKiByb3V0ZSBvciBobmEgYWRkZWQgLyBjaGFuZ2VkIC8gZGVsZXRlZCAqLworCisjaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfREVCVUcKK2V4dGVybiBpbnQgZGVidWc7CisKK2V4dGVybiBpbnQgYmF0X2RlYnVnX3R5cGUoaW50IHR5cGUpOworI2RlZmluZSBiYXRfZGJnKHR5cGUsIGZtdCwgYXJnLi4uKSBkbyB7CQkJCQlcCisJCWlmIChiYXRfZGVidWdfdHlwZSh0eXBlKSkJCQkJXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgImJhdG1hbi1hZHY6IiBmbXQsICMjIGFyZyk7CVwKKwl9CQkJCQkJCQlcCisJd2hpbGUgKDApCisjZWxzZSAvKiAhQ09ORklHX0JBVE1BTl9BRFZfREVCVUcgKi8KKyNkZWZpbmUgYmF0X2RiZyh0eXBlLCBmbXQsIGFyZy4uLikgZG8gewkJXAorCX0JCQkJCVwKKwl3aGlsZSAoMCkKKyNlbmRpZgogCiAvKgogICogIFZpcwpAQCAtMTI3LDYgKzEzMCw3IEBACiAKIGV4dGVybiBhdG9taWNfdCBvcmlnaW5hdG9yX2ludGVydmFsOwogZXh0ZXJuIGF0b21pY190IHZpc19pbnRlcnZhbDsKK2V4dGVybiBhdG9taWNfdCB2aXNfbW9kZTsKIGV4dGVybiBhdG9taWNfdCBhZ2dyZWdhdGlvbl9lbmFibGVkOwogZXh0ZXJuIGludDE2X3QgbnVtX2huYTsKIGV4dGVybiBpbnQxNl90IG51bV9pZnM7CkBAIC0xNDcsNSArMTUxLDMgQEAKIGludCBpc19teV9tYWModWludDhfdCAqYWRkcik7CiBpbnQgaXNfYmNhc3QodWludDhfdCAqYWRkcik7CiBpbnQgaXNfbWNhc3QodWludDhfdCAqYWRkcik7Ci0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5YzI0MTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMKQEAgLTAsMCArMSwyNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczoKKyAqCisgKiBNYXJlayBMaW5kbmVyLCBTaW1vbiBXdW5kZXJsaWNoCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EKKyAqCisgKi8KKworLyogaW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudGVyIGZvciB0aGlzIG9yaWdpbmF0b3IgKi8KKworI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICJvcmlnaW5hdG9yLmgiCisjaW5jbHVkZSAiaGFzaC5oIgorI2luY2x1ZGUgInRyYW5zbGF0aW9uLXRhYmxlLmgiCisjaW5jbHVkZSAicm91dGluZy5oIgorCitzdGF0aWMgREVDTEFSRV9ERUxBWUVEX1dPUksocHVyZ2Vfb3JpZ193cSwgcHVyZ2Vfb3JpZyk7CisKK3N0YXRpYyB2b2lkIHN0YXJ0X3B1cmdlX3RpbWVyKHZvaWQpCit7CisJcXVldWVfZGVsYXllZF93b3JrKGJhdF9ldmVudF93b3JrcXVldWUsICZwdXJnZV9vcmlnX3dxLCAxICogSFopOworfQorCitpbnQgb3JpZ2luYXRvcl9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpZiAob3JpZ19oYXNoKQorCQlyZXR1cm4gMTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOworCW9yaWdfaGFzaCA9IGhhc2hfbmV3KDEyOCwgY29tcGFyZV9vcmlnLCBjaG9vc2Vfb3JpZyk7CisKKwlpZiAoIW9yaWdfaGFzaCkKKwkJZ290byBlcnI7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOworCXN0YXJ0X3B1cmdlX3RpbWVyKCk7CisJcmV0dXJuIDE7CisKK2VycjoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCit2b2lkIG9yaWdpbmF0b3JfZnJlZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIW9yaWdfaGFzaCkKKwkJcmV0dXJuOworCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwdXJnZV9vcmlnX3dxKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOworCWhhc2hfZGVsZXRlKG9yaWdfaGFzaCwgZnJlZV9vcmlnX25vZGUpOworCW9yaWdfaGFzaCA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKK30KKworc3RydWN0IG5laWdoX25vZGUgKgorY3JlYXRlX25laWdoYm9yKHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwgc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19uZWlnaF9ub2RlLAorCQl1aW50OF90ICpuZWlnaCwgc3RydWN0IGJhdG1hbl9pZiAqaWZfaW5jb21pbmcpCit7CisJc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGU7CisKKwliYXRfZGJnKERCR19CQVRNQU4sICJDcmVhdGluZyBuZXcgbGFzdC1ob3AgbmVpZ2hib3Igb2Ygb3JpZ2luYXRvclxuIik7CisKKwluZWlnaF9ub2RlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5laWdoX25vZGUpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIW5laWdoX25vZGUpCisJCXJldHVybiBOVUxMOworCisJSU5JVF9MSVNUX0hFQUQoJm5laWdoX25vZGUtPmxpc3QpOworCisJbWVtY3B5KG5laWdoX25vZGUtPmFkZHIsIG5laWdoLCBFVEhfQUxFTik7CisJbmVpZ2hfbm9kZS0+b3JpZ19ub2RlID0gb3JpZ19uZWlnaF9ub2RlOworCW5laWdoX25vZGUtPmlmX2luY29taW5nID0gaWZfaW5jb21pbmc7CisKKwlsaXN0X2FkZF90YWlsKCZuZWlnaF9ub2RlLT5saXN0LCAmb3JpZ19ub2RlLT5uZWlnaF9saXN0KTsKKwlyZXR1cm4gbmVpZ2hfbm9kZTsKK30KKwordm9pZCBmcmVlX29yaWdfbm9kZSh2b2lkICpkYXRhKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfcG9zLCAqbGlzdF9wb3NfdG1wOworCXN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlOworCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSA9IChzdHJ1Y3Qgb3JpZ19ub2RlICopZGF0YTsKKworCS8qIGZvciBhbGwgbmVpZ2hib3JzIHRvd2FyZHMgdGhpcyBvcmlnaW5hdG9yIC4uLiAqLworCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0X3BvcywgbGlzdF9wb3NfdG1wLCAmb3JpZ19ub2RlLT5uZWlnaF9saXN0KSB7CisJCW5laWdoX25vZGUgPSBsaXN0X2VudHJ5KGxpc3RfcG9zLCBzdHJ1Y3QgbmVpZ2hfbm9kZSwgbGlzdCk7CisKKwkJbGlzdF9kZWwobGlzdF9wb3MpOworCQlrZnJlZShuZWlnaF9ub2RlKTsKKwl9CisKKwlobmFfZ2xvYmFsX2RlbF9vcmlnKG9yaWdfbm9kZSwgIm9yaWdpbmF0b3IgdGltZWQgb3V0Iik7CisKKwlrZnJlZShvcmlnX25vZGUtPmJjYXN0X293bik7CisJa2ZyZWUob3JpZ19ub2RlLT5iY2FzdF9vd25fc3VtKTsKKwlrZnJlZShvcmlnX25vZGUpOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGZpbmRzIG9yIGNyZWF0ZXMgYW4gb3JpZ2luYXRvciBlbnRyeSBmb3IgdGhlIGdpdmVuCisgKiBhZGRyZXNzIGlmIGl0IGRvZXMgbm90IGV4aXRzICovCitzdHJ1Y3Qgb3JpZ19ub2RlICpnZXRfb3JpZ19ub2RlKHVpbnQ4X3QgKmFkZHIpCit7CisJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOworCXN0cnVjdCBoYXNodGFibGVfdCAqc3dhcGhhc2g7CisJaW50IHNpemU7CisKKwlvcmlnX25vZGUgPSAoKHN0cnVjdCBvcmlnX25vZGUgKiloYXNoX2ZpbmQob3JpZ19oYXNoLCBhZGRyKSk7CisKKwlpZiAob3JpZ19ub2RlICE9IE5VTEwpCisJCXJldHVybiBvcmlnX25vZGU7CisKKwliYXRfZGJnKERCR19CQVRNQU4sICJDcmVhdGluZyBuZXcgb3JpZ2luYXRvcjogJXBNIFxuIiwgYWRkcik7CisKKwlvcmlnX25vZGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb3JpZ19ub2RlKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFvcmlnX25vZGUpCisJCXJldHVybiBOVUxMOworCisJSU5JVF9MSVNUX0hFQUQoJm9yaWdfbm9kZS0+bmVpZ2hfbGlzdCk7CisKKwltZW1jcHkob3JpZ19ub2RlLT5vcmlnLCBhZGRyLCBFVEhfQUxFTik7CisJb3JpZ19ub2RlLT5yb3V0ZXIgPSBOVUxMOworCW9yaWdfbm9kZS0+YmF0bWFuX2lmID0gTlVMTDsKKwlvcmlnX25vZGUtPmhuYV9idWZmID0gTlVMTDsKKworCXNpemUgPSBudW1faWZzICogc2l6ZW9mKFRZUEVfT0ZfV09SRCkgKiBOVU1fV09SRFM7CisKKwlvcmlnX25vZGUtPmJjYXN0X293biA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCFvcmlnX25vZGUtPmJjYXN0X293bikKKwkJZ290byBmcmVlX29yaWdfbm9kZTsKKworCXNpemUgPSBudW1faWZzICogc2l6ZW9mKHVpbnQ4X3QpOworCW9yaWdfbm9kZS0+YmNhc3Rfb3duX3N1bSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCFvcmlnX25vZGUtPmJjYXN0X293bl9zdW0pCisJCWdvdG8gZnJlZV9iY2FzdF9vd247CisKKwlpZiAoaGFzaF9hZGQob3JpZ19oYXNoLCBvcmlnX25vZGUpIDwgMCkKKwkJZ290byBmcmVlX2JjYXN0X293bl9zdW07CisKKwlpZiAob3JpZ19oYXNoLT5lbGVtZW50cyAqIDQgPiBvcmlnX2hhc2gtPnNpemUpIHsKKwkJc3dhcGhhc2ggPSBoYXNoX3Jlc2l6ZShvcmlnX2hhc2gsIG9yaWdfaGFzaC0+c2l6ZSAqIDIpOworCisJCWlmIChzd2FwaGFzaCA9PSBOVUxMKQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgImJhdG1hbi1hZHY6Q291bGRuJ3QgcmVzaXplIG9yaWcgaGFzaCB0YWJsZSBcbiIpOworCQllbHNlCisJCQlvcmlnX2hhc2ggPSBzd2FwaGFzaDsKKwl9CisKKwlyZXR1cm4gb3JpZ19ub2RlOworZnJlZV9iY2FzdF9vd25fc3VtOgorCWtmcmVlKG9yaWdfbm9kZS0+YmNhc3Rfb3duX3N1bSk7CitmcmVlX2JjYXN0X293bjoKKwlrZnJlZShvcmlnX25vZGUtPmJjYXN0X293bik7CitmcmVlX29yaWdfbm9kZToKKwlrZnJlZShvcmlnX25vZGUpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgYm9vbCBwdXJnZV9vcmlnX25laWdoYm9ycyhzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCisJCQkJIHN0cnVjdCBuZWlnaF9ub2RlICoqYmVzdF9uZWlnaF9ub2RlKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfcG9zLCAqbGlzdF9wb3NfdG1wOworCXN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlOworCWJvb2wgbmVpZ2hfcHVyZ2VkID0gZmFsc2U7CisKKwkqYmVzdF9uZWlnaF9ub2RlID0gTlVMTDsKKworCisJLyogZm9yIGFsbCBuZWlnaGJvcnMgdG93YXJkcyB0aGlzIG9yaWdpbmF0b3IgLi4uICovCisJbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3RfcG9zLCBsaXN0X3Bvc190bXAsICZvcmlnX25vZGUtPm5laWdoX2xpc3QpIHsKKwkJbmVpZ2hfbm9kZSA9IGxpc3RfZW50cnkobGlzdF9wb3MsIHN0cnVjdCBuZWlnaF9ub2RlLCBsaXN0KTsKKworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLAorCQkJICAgICAgIChuZWlnaF9ub2RlLT5sYXN0X3ZhbGlkICsKKwkJCQkoKFBVUkdFX1RJTUVPVVQgKiBIWikgLyAxMDAwKSkpKSB7CisKKwkJCWJhdF9kYmcoREJHX0JBVE1BTiwgIm5laWdoYm9yIHRpbWVvdXQ6IG9yaWdpbmF0b3IgJXBNLCBuZWlnaGJvcjogJXBNLCBsYXN0X3ZhbGlkICVsdVxuIiwgb3JpZ19ub2RlLT5vcmlnLCBuZWlnaF9ub2RlLT5hZGRyLCAobmVpZ2hfbm9kZS0+bGFzdF92YWxpZCAvIEhaKSk7CisKKwkJCW5laWdoX3B1cmdlZCA9IHRydWU7CisJCQlsaXN0X2RlbChsaXN0X3Bvcyk7CisJCQlrZnJlZShuZWlnaF9ub2RlKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoKmJlc3RfbmVpZ2hfbm9kZSA9PSBOVUxMKSB8fAorCQkJICAgIChuZWlnaF9ub2RlLT50cV9hdmcgPiAoKmJlc3RfbmVpZ2hfbm9kZSktPnRxX2F2ZykpCisJCQkJKmJlc3RfbmVpZ2hfbm9kZSA9IG5laWdoX25vZGU7CisJCX0KKwl9CisJcmV0dXJuIG5laWdoX3B1cmdlZDsKK30KKworCitzdGF0aWMgYm9vbCBwdXJnZV9vcmlnX25vZGUoc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlKQoreworCXN0cnVjdCBuZWlnaF9ub2RlICpiZXN0X25laWdoX25vZGU7CisKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLAorCQkgICAgICAgKG9yaWdfbm9kZS0+bGFzdF92YWxpZCArCisJCQkoKDIgKiBQVVJHRV9USU1FT1VUICogSFopIC8gMTAwMCkpKSkgeworCisJCWJhdF9kYmcoREJHX0JBVE1BTiwKKwkJCSJPcmlnaW5hdG9yIHRpbWVvdXQ6IG9yaWdpbmF0b3IgJXBNLCBsYXN0X3ZhbGlkICVsdVxuIiwKKwkJCW9yaWdfbm9kZS0+b3JpZywgKG9yaWdfbm9kZS0+bGFzdF92YWxpZCAvIEhaKSk7CisJCXJldHVybiB0cnVlOworCX0gZWxzZSB7CisJCWlmIChwdXJnZV9vcmlnX25laWdoYm9ycyhvcmlnX25vZGUsICZiZXN0X25laWdoX25vZGUpKQorCQkJdXBkYXRlX3JvdXRlcyhvcmlnX25vZGUsIGJlc3RfbmVpZ2hfbm9kZSwKKwkJCQkgICAgICBvcmlnX25vZGUtPmhuYV9idWZmLAorCQkJCSAgICAgIG9yaWdfbm9kZS0+aG5hX2J1ZmZfbGVuKTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCit2b2lkIHB1cmdlX29yaWcoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCUhBU0hJVChoYXNoaXQpOworCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CisKKwkvKiBmb3IgYWxsIG9yaWdpbnMuLi4gKi8KKwl3aGlsZSAoaGFzaF9pdGVyYXRlKG9yaWdfaGFzaCwgJmhhc2hpdCkpIHsKKwkJb3JpZ19ub2RlID0gaGFzaGl0LmJ1Y2tldC0+ZGF0YTsKKwkJaWYgKHB1cmdlX29yaWdfbm9kZShvcmlnX25vZGUpKSB7CisJCQloYXNoX3JlbW92ZV9idWNrZXQob3JpZ19oYXNoLCAmaGFzaGl0KTsKKwkJCWZyZWVfb3JpZ19ub2RlKG9yaWdfbm9kZSk7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOworCisJc3RhcnRfcHVyZ2VfdGltZXIoKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9sb2cuaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L29yaWdpbmF0b3IuaApzaW1pbGFyaXR5IGluZGV4IDYxJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9sb2cuaApyZW5hbWUgdG8gZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvb3JpZ2luYXRvci5oCmluZGV4IDc4MGUzYWIuLjZlZjdhMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2xvZy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L29yaWdpbmF0b3IuaApAQCAtMTksMTQgKzE5LDEzIEBACiAgKgogICovCiAKLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbG9nX29wZXJhdGlvbnM7Ci1leHRlcm4gdWludDhfdCBsb2dfbGV2ZWw7CitpbnQgb3JpZ2luYXRvcl9pbml0KHZvaWQpOwordm9pZCBmcmVlX29yaWdfbm9kZSh2b2lkICpkYXRhKTsKK3ZvaWQgb3JpZ2luYXRvcl9mcmVlKHZvaWQpOwordm9pZCBwdXJnZV9vcmlnKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX2ZpbmQoY2hhciAqbWFjKTsKK3N0cnVjdCBvcmlnX25vZGUgKmdldF9vcmlnX25vZGUodWludDhfdCAqYWRkcik7CitzdHJ1Y3QgbmVpZ2hfbm9kZSAqCitjcmVhdGVfbmVpZ2hib3Ioc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlLCBzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25laWdoX25vZGUsCisJCXVpbnQ4X3QgKm5laWdoLCBzdHJ1Y3QgYmF0bWFuX2lmICppZl9pbmNvbWluZyk7CiAKLWludCBkZWJ1Z19sb2coaW50IHR5cGUsIGNoYXIgKmZtdCwgLi4uKTsKLWludCBsb2dfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci1pbnQgbG9nX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3NpemVfdCBsb2dfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAotCQkgbG9mZl90ICpwcG9zKTsKLXNzaXplX3QgbG9nX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCi0JCSAgbG9mZl90ICpwcG9zKTsKLXVuc2lnbmVkIGludCBsb2dfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9wYWNrZXQuaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3BhY2tldC5oCmluZGV4IDU2MjdjYTMuLmFkMDA2Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3BhY2tldC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3BhY2tldC5oCkBAIC05MCw3ICs5MCw3IEBACiAJdWludDhfdCAgZW50cmllczsJIC8qIG51bWJlciBvZiBlbnRyaWVzIGJlaGluZCB0aGlzIHN0cnVjdCAqLwogCXVpbnQ4X3QgIHR0bDsJCSAvKiBUVEwgKi8KIAl1aW50OF90ICB2aXNfb3JpZ1s2XTsJIC8qIG9yaWdpbmF0b3IgdGhhdCBpbmZvcm1zIGFib3V0IGl0cwotCQkJCSAgKiBuZWlnaGJvdXJzICovCisJCQkJICAqIG5laWdoYm9ycyAqLwogCXVpbnQ4X3QgIHRhcmdldF9vcmlnWzZdOyAvKiB3aG8gc2hvdWxkIHJlY2VpdmUgdGhpcyBwYWNrZXQgKi8KIAl1aW50OF90ICBzZW5kZXJfb3JpZ1s2XTsgLyogd2hvIHNlbnQgb3IgcmVicm9hZGNhc3RlZCB0aGlzIHBhY2tldCAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3Byb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3Byb2MuYwppbmRleCBhYWMzZGY3Li43ZGU2MGU4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvcHJvYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3Byb2MuYwpAQCAtMjEsMjMgKzIxLDE4IEBACiAKICNpbmNsdWRlICJtYWluLmgiCiAjaW5jbHVkZSAicHJvYy5oIgotI2luY2x1ZGUgImxvZy5oIgogI2luY2x1ZGUgInJvdXRpbmcuaCIKICNpbmNsdWRlICJ0cmFuc2xhdGlvbi10YWJsZS5oIgogI2luY2x1ZGUgImhhcmQtaW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAidHlwZXMuaCIKICNpbmNsdWRlICJoYXNoLmgiCiAjaW5jbHVkZSAidmlzLmgiCi0jaW5jbHVkZSAiY29tcGF0LmgiCi0KLXN0YXRpYyB1aW50OF90IHZpc19mb3JtYXQgPSBET1RfRFJBVzsKIAogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19iYXRtYW5fZGlyLCAqcHJvY19pbnRlcmZhY2VfZmlsZTsKIHN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2Nfb3JpZ19pbnRlcnZhbF9maWxlLCAqcHJvY19vcmlnaW5hdG9yc19maWxlOwotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19sb2dfZmlsZSwgKnByb2NfbG9nX2xldmVsX2ZpbGU7CiBzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3RyYW5zdF9sb2NhbF9maWxlOwogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY190cmFuc3RfZ2xvYmFsX2ZpbGU7Ci1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3Zpc19maWxlLCAqcHJvY192aXNfZm9ybWF0X2ZpbGU7CitzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3Zpc19zcnZfZmlsZSwgKnByb2NfdmlzX2RhdGFfZmlsZTsKIHN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfYWdncl9maWxlOwogCiBzdGF0aWMgaW50IHByb2NfaW50ZXJmYWNlc19yZWFkKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCkBAIC02OCw3ICs2Myw3IEBACiAJCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqZGF0YSkKIHsKIAljaGFyICppZl9zdHJpbmcsICpjb2xvbl9wdHIgPSBOVUxMLCAqY3JfcHRyID0gTlVMTDsKLQlpbnQgbm90X2NvcGllZCA9IDAsIGlmX251bSA9IDA7CisJaW50IG5vdF9jb3BpZWQgPSAwLCBpZl9udW0gPSAwLCBhZGRfc3VjY2VzczsKIAlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYgPSBOVUxMOwogCiAJaWZfc3RyaW5nID0ga21hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CkBAIC03Nyw4ICs3Miw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJaWYgKGNvdW50ID4gSUZOQU1TSVogLSAxKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9XQVJOLAotCQkJICAiQ2FuJ3QgYWRkIGludGVyZmFjZTogZGV2aWNlIG5hbWUgaXMgdG9vIGxvbmdcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJiYXRtYW4tYWR2OkNhbid0IGFkZCBpbnRlcmZhY2U6IGRldmljZSBuYW1lIGlzIHRvbyBsb25nXG4iKTsKIAkJZ290byBlbmQ7CiAJfQogCkBAIC0xMDUsNyArOTksNyBAQAogCXJjdV9yZWFkX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShiYXRtYW5faWYsICZpZl9saXN0LCBsaXN0KSB7CiAJCWlmIChzdHJuY21wKGJhdG1hbl9pZi0+ZGV2LCBpZl9zdHJpbmcsIGNvdW50KSA9PSAwKSB7Ci0JCQlkZWJ1Z19sb2coTE9HX1RZUEVfV0FSTiwgIkdpdmVuIGludGVyZmFjZSBpcyBhbHJlYWR5IGFjdGl2ZTogJXNcbiIsIGlmX3N0cmluZyk7CisJCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6R2l2ZW4gaW50ZXJmYWNlIGlzIGFscmVhZHkgYWN0aXZlOiAlc1xuIiwgaWZfc3RyaW5nKTsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJZ290byBlbmQ7CiAKQEAgLTExNSwyMiArMTA5LDE3IEBACiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCi0JaGFyZGlmX2FkZF9pbnRlcmZhY2UoaWZfc3RyaW5nLCBpZl9udW0pOworCWFkZF9zdWNjZXNzID0gaGFyZGlmX2FkZF9pbnRlcmZhY2UoaWZfc3RyaW5nLCBpZl9udW0pOworCWlmIChhZGRfc3VjY2VzcyA8IDApCisJCWdvdG8gZW5kOworCisJbnVtX2lmcyA9IGlmX251bSArIDE7CiAKIAlpZiAoKGF0b21pY19yZWFkKCZtb2R1bGVfc3RhdGUpID09IE1PRFVMRV9JTkFDVElWRSkgJiYKIAkgICAgKGhhcmRpZl9nZXRfYWN0aXZlX2lmX251bSgpID4gMCkpCiAJCWFjdGl2YXRlX21vZHVsZSgpOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCWlmIChsaXN0X2VtcHR5KCZpZl9saXN0KSkgewotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJZ290byBlbmQ7Ci0JfQotCXJjdV9yZWFkX3VubG9jaygpOwotCi0JbnVtX2lmcyA9IGlmX251bSArIDE7CiAJcmV0dXJuIGNvdW50OwotCiBlbmQ6CiAJa2ZyZWUoaWZfc3RyaW5nKTsKIAlyZXR1cm4gY291bnQ7CkBAIC0xNjIsMjAgKzE1MSwxOCBAQAogCiAJcmV0dmFsID0gc3RyaWN0X3N0cnRvdWwoaW50ZXJ2YWxfc3RyaW5nLCAxMCwgJm9yaWdpbmF0b3JfaW50ZXJ2YWxfdG1wKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9XQVJOLCAiTmV3IG9yaWdpbmF0b3IgaW50ZXJ2YWwgaW52YWxpZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjpOZXcgb3JpZ2luYXRvciBpbnRlcnZhbCBpbnZhbGlkXG4iKTsKIAkJZ290byBlbmQ7CiAJfQogCiAJaWYgKG9yaWdpbmF0b3JfaW50ZXJ2YWxfdG1wIDw9IEpJVFRFUiAqIDIpIHsKLQkJZGVidWdfbG9nKExPR19UWVBFX1dBUk4sCi0JCQkgICJOZXcgb3JpZ2luYXRvciBpbnRlcnZhbCB0b28gc21hbGw6ICVpIChtaW46ICVpKVxuIiwKLQkJCSAgb3JpZ2luYXRvcl9pbnRlcnZhbF90bXAsIEpJVFRFUiAqIDIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJiYXRtYW4tYWR2Ok5ldyBvcmlnaW5hdG9yIGludGVydmFsIHRvbyBzbWFsbDogJWxpIChtaW46ICVpKVxuIiwKKwkJICAgICAgIG9yaWdpbmF0b3JfaW50ZXJ2YWxfdG1wLCBKSVRURVIgKiAyKTsKIAkJZ290byBlbmQ7CiAJfQogCi0JZGVidWdfbG9nKExPR19UWVBFX05PVElDRSwKLQkJICAiQ2hhbmdpbmcgb3JpZ2luYXRvciBpbnRlcnZhbCBmcm9tOiAlaSB0bzogJWlcbiIsCi0JCSAgYXRvbWljX3JlYWQoJm9yaWdpbmF0b3JfaW50ZXJ2YWwpLCBvcmlnaW5hdG9yX2ludGVydmFsX3RtcCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiYmF0bWFuLWFkdjpDaGFuZ2luZyBvcmlnaW5hdG9yIGludGVydmFsIGZyb206ICVpIHRvOiAlbGlcbiIsCisJICAgICAgIGF0b21pY19yZWFkKCZvcmlnaW5hdG9yX2ludGVydmFsKSwgb3JpZ2luYXRvcl9pbnRlcnZhbF90bXApOwogCiAJYXRvbWljX3NldCgmb3JpZ2luYXRvcl9pbnRlcnZhbCwgb3JpZ2luYXRvcl9pbnRlcnZhbF90bXApOwogCkBAIC0xOTEsMTEgKzE3OCwxMiBAQAogCiBzdGF0aWMgaW50IHByb2Nfb3JpZ2luYXRvcnNfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogewotCXN0cnVjdCBoYXNoX2l0X3QgKmhhc2hpdCA9IE5VTEw7CisJSEFTSElUKGhhc2hpdCk7CiAJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOwogCXN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlOwogCWludCBiYXRtYW5fY291bnQgPSAwOwogCWNoYXIgb3JpZ19zdHJbRVRIX1NUUl9MRU5dLCByb3V0ZXJfc3RyW0VUSF9TVFJfTEVOXTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCWlmIChsaXN0X2VtcHR5KCZpZl9saXN0KSkgewpAQCAtMjE4LDExICsyMDYsMTEgQEAKIAkJICAgKChzdHJ1Y3QgYmF0bWFuX2lmICopaWZfbGlzdC5uZXh0KS0+YWRkcl9zdHIpOwogCiAJcmN1X3JlYWRfdW5sb2NrKCk7Ci0Jc3Bpbl9sb2NrKCZvcmlnX2hhc2hfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CiAKLQl3aGlsZSAoTlVMTCAhPSAoaGFzaGl0ID0gaGFzaF9pdGVyYXRlKG9yaWdfaGFzaCwgaGFzaGl0KSkpIHsKKwl3aGlsZSAoaGFzaF9pdGVyYXRlKG9yaWdfaGFzaCwgJmhhc2hpdCkpIHsKIAotCQlvcmlnX25vZGUgPSBoYXNoaXQtPmJ1Y2tldC0+ZGF0YTsKKwkJb3JpZ19ub2RlID0gaGFzaGl0LmJ1Y2tldC0+ZGF0YTsKIAogCQlpZiAoIW9yaWdfbm9kZS0+cm91dGVyKQogCQkJY29udGludWU7CkBAIC0yNDksNyArMjM3LDcgQEAKIAogCX0KIAotCXNwaW5fdW5sb2NrKCZvcmlnX2hhc2hfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKIAogCWlmIChiYXRtYW5fY291bnQgPT0gMCkKIAkJc2VxX3ByaW50ZihzZXEsICJObyBiYXRtYW4gbm9kZXMgaW4gcmFuZ2UgLi4uIFxuIik7CkBAIC0yNjMsODQgKzI1MSw2IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHByb2Nfb3JpZ2luYXRvcnNfcmVhZCwgTlVMTCk7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY19sb2dfbGV2ZWxfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQotewotCi0Jc2VxX3ByaW50ZihzZXEsICJbeF0gJXMgKCVkKVxuIiwgTE9HX1RZUEVfQ1JJVF9OQU1FLCBMT0dfVFlQRV9DUklUKTsKLQlzZXFfcHJpbnRmKHNlcSwgIlslY10gJXMgKCVkKVxuIiwKLQkJICAgKExPR19UWVBFX1dBUk4gJiBsb2dfbGV2ZWwpID8gJ3gnIDogJyAnLAotCQkgICBMT0dfVFlQRV9XQVJOX05BTUUsIExPR19UWVBFX1dBUk4pOwotCXNlcV9wcmludGYoc2VxLCAiWyVjXSAlcyAoJWQpXG4iLAotCQkgICAoTE9HX1RZUEVfTk9USUNFICYgbG9nX2xldmVsKSA/ICd4JyA6ICcgJywKLQkJICAgTE9HX1RZUEVfTk9USUNFX05BTUUsIExPR19UWVBFX05PVElDRSk7Ci0Jc2VxX3ByaW50ZihzZXEsICJbJWNdICVzICglZClcbiIsCi0JCSAgIChMT0dfVFlQRV9CQVRNQU4gJiBsb2dfbGV2ZWwpID8gJ3gnIDogJyAnLAotCQkgICBMT0dfVFlQRV9CQVRNQU5fTkFNRSwgTE9HX1RZUEVfQkFUTUFOKTsKLQlzZXFfcHJpbnRmKHNlcSwgIlslY10gJXMgKCVkKVxuIiwKLQkJICAgKExPR19UWVBFX1JPVVRFUyAmIGxvZ19sZXZlbCkgPyAneCcgOiAnICcsCi0JCSAgIExPR19UWVBFX1JPVVRFU19OQU1FLCBMT0dfVFlQRV9ST1VURVMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHByb2NfbG9nX2xldmVsX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHByb2NfbG9nX2xldmVsX3JlYWQsIE5VTEwpOwotfQotCi1zdGF0aWMgc3NpemVfdCBwcm9jX2xvZ19sZXZlbF93cml0ZShzdHJ1Y3QgZmlsZSAqaW5zdGFuY2UsCi0JCQkJICAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyYnVmZmVyLAotCQkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqZGF0YSkKLXsKLQljaGFyICpsb2dfbGV2ZWxfc3RyaW5nLCAqdG9rcHRyLCAqY3A7Ci0JaW50IGZpbmlzaGVkLCBub3RfY29waWVkID0gMDsKLQl1bnNpZ25lZCBsb25nIGxvZ19sZXZlbF90bXAgPSAwOwotCi0JbG9nX2xldmVsX3N0cmluZyA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOwotCi0JaWYgKCFsb2dfbGV2ZWxfc3RyaW5nKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW5vdF9jb3BpZWQgPSBjb3B5X2Zyb21fdXNlcihsb2dfbGV2ZWxfc3RyaW5nLCB1c2VyYnVmZmVyLCBjb3VudCk7Ci0JbG9nX2xldmVsX3N0cmluZ1tjb3VudCAtIG5vdF9jb3BpZWQgLSAxXSA9IDA7Ci0KLQlpZiAoc3RyaWN0X3N0cnRvdWwobG9nX2xldmVsX3N0cmluZywgMTAsICZsb2dfbGV2ZWxfdG1wKSA8IDApIHsKLQkJLyogd2FzIG5vdCBhIG51bWJlciwgZG9pbmcgdGV4dHVhbCBwYXJzaW5nICovCi0JCWxvZ19sZXZlbF90bXAgPSAwOwotCQl0b2twdHIgPSBsb2dfbGV2ZWxfc3RyaW5nOwotCi0JCWZvciAoY3AgPSBsb2dfbGV2ZWxfc3RyaW5nLCBmaW5pc2hlZCA9IDA7ICFmaW5pc2hlZDsgY3ArKykgewotCQkJc3dpdGNoICgqY3ApIHsKLQkJCWNhc2UgMDoKLQkJCQlmaW5pc2hlZCA9IDE7Ci0JCQljYXNlICcgJzoKLQkJCWNhc2UgJ1xuJzoKLQkJCWNhc2UgJ1x0JzoKLQkJCQkqY3AgPSAwOwotCQkJCS8qIGNvbXBhcmUgKi8KLQkJCQlpZiAoc3RyY21wKHRva3B0ciwgTE9HX1RZUEVfV0FSTl9OQU1FKSA9PSAwKQotCQkJCQlsb2dfbGV2ZWxfdG1wIHw9IExPR19UWVBFX1dBUk47Ci0JCQkJaWYgKHN0cmNtcCh0b2twdHIsIExPR19UWVBFX05PVElDRV9OQU1FKSA9PSAwKQotCQkJCQlsb2dfbGV2ZWxfdG1wIHw9IExPR19UWVBFX05PVElDRTsKLQkJCQlpZiAoc3RyY21wKHRva3B0ciwgTE9HX1RZUEVfQkFUTUFOX05BTUUpID09IDApCi0JCQkJCWxvZ19sZXZlbF90bXAgfD0gTE9HX1RZUEVfQkFUTUFOOwotCQkJCWlmIChzdHJjbXAodG9rcHRyLCBMT0dfVFlQRV9ST1VURVNfTkFNRSkgPT0gMCkKLQkJCQkJbG9nX2xldmVsX3RtcCB8PSBMT0dfVFlQRV9ST1VURVM7Ci0JCQkJdG9rcHRyID0gY3AgKyAxOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlkZWJ1Z19sb2coTE9HX1RZUEVfQ1JJVCwgIkNoYW5naW5nIGxvZ19sZXZlbCBmcm9tOiAlaSB0bzogJWlcbiIsCi0JCSAgbG9nX2xldmVsLCBsb2dfbGV2ZWxfdG1wKTsKLQlsb2dfbGV2ZWwgPSBsb2dfbGV2ZWxfdG1wOwotCi0Ja2ZyZWUobG9nX2xldmVsX3N0cmluZyk7Ci0JcmV0dXJuIGNvdW50OwotfQotCiBzdGF0aWMgaW50IHByb2NfdHJhbnN0X2xvY2FsX3JlYWQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKIHsKIAljaGFyICpidWY7CkBAIC00MDUsMTcyICszMTUsOCBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwcm9jX3RyYW5zdF9nbG9iYWxfcmVhZCwgTlVMTCk7CiB9CiAKLS8qIGluc2VydCBpbnRlcmZhY2UgdG8gdGhlIGxpc3Qgb2YgaW50ZXJmYWNlcyBvZiBvbmUgb3JpZ2luYXRvciAqLwotCi1zdGF0aWMgdm9pZCBwcm9jX3Zpc19pbnNlcnRfaW50ZXJmYWNlKGNvbnN0IHVpbnQ4X3QgKmludGVyZmFjZSwKLQkJCQkgICAgICBzdHJ1Y3QgdmlzX2lmX2xpc3QgKippZl9lbnRyeSwKLQkJCQkgICAgICBib29sIHByaW1hcnkpCi17Ci0JLyogRGlkIHdlIGdldCBhbiBlbXB0eSBsaXN0PyAodGhlbiBpbnNlcnQgaW1lZGlhdGVseSkgKi8KLQlpZigqaWZfZW50cnkgPT0gTlVMTCkgewotCQkqaWZfZW50cnkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdmlzX2lmX2xpc3QpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCppZl9lbnRyeSA9PSBOVUxMKQotCQkJcmV0dXJuOwotCi0JCSgqaWZfZW50cnkpLT5wcmltYXJ5ID0gcHJpbWFyeTsKLQkJKCppZl9lbnRyeSktPm5leHQgPSBOVUxMOwotCQltZW1jcHkoKCppZl9lbnRyeSktPmFkZHIsIGludGVyZmFjZSwgRVRIX0FMRU4pOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCB2aXNfaWZfbGlzdCAqaGVhZF9pZl9lbnRyeSA9ICppZl9lbnRyeTsKLQkJLyogRG8gd2UgYWxyZWFkeSBoYXZlIHRoaXMgaW50ZXJmYWNlIGluIG91ciBsaXN0PyAqLwotCQl3aGlsZSAoIWNvbXBhcmVfb3JpZygoKmlmX2VudHJ5KS0+YWRkciwgKHZvaWQgKilpbnRlcmZhY2UpKSB7Ci0KLQkJCS8qIE9yIGRpZCB3ZSByZWFjaCB0aGUgZW5kICh0aGVuIGFwcGVuZCB0aGUgaW50ZXJmYWNlKSAqLwotCQkJaWYgKCgqaWZfZW50cnkpLT5uZXh0ID09IE5VTEwpIHsKLQkJCQkoKmlmX2VudHJ5KS0+bmV4dCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2aXNfaWZfbGlzdCksIEdGUF9LRVJORUwpOwotCQkJCWlmICgoKmlmX2VudHJ5KS0+bmV4dCA9PSBOVUxMKQotCQkJCQlyZXR1cm47Ci0KLQkJCQltZW1jcHkoKCppZl9lbnRyeSktPm5leHQtPmFkZHIsIGludGVyZmFjZSwgRVRIX0FMRU4pOwotCQkJCSgqaWZfZW50cnkpLT5uZXh0LT5wcmltYXJ5ID0gcHJpbWFyeTsKLQkJCQkoKmlmX2VudHJ5KS0+bmV4dC0+bmV4dCA9IE5VTEw7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQkqaWZfZW50cnkgPSAoKmlmX2VudHJ5KS0+bmV4dDsKLQkJfQotCQkvKiBSZXdpbmQgdGhlIGxpc3QgdG8gaXRzIGhlYWQgKi8KLQkJKmlmX2VudHJ5ID0gaGVhZF9pZl9lbnRyeTsKLQl9Ci19Ci0vKiByZWFkIGFuIGVudHJ5ICAqLwotCi1zdGF0aWMgdm9pZCBwcm9jX3Zpc19yZWFkX2VudHJ5KHN0cnVjdCBzZXFfZmlsZSAqc2VxLAotCQkJCXN0cnVjdCB2aXNfaW5mb19lbnRyeSAqZW50cnksCi0JCQkJc3RydWN0IHZpc19pZl9saXN0ICoqaWZfZW50cnksCi0JCQkJdWludDhfdCAqdmlzX29yaWcsCi0JCQkJdWludDhfdCBjdXJyZW50X2Zvcm1hdCwKLQkJCQl1aW50OF90IGZpcnN0X2xpbmUpCi17Ci0JY2hhciBmcm9tWzQwXTsKLQljaGFyIHRvWzQwXTsKLQlpbnQgaW50X3BhcnQsIGZyYWNfcGFydDsKLQotCWFkZHJfdG9fc3RyaW5nKHRvLCBlbnRyeS0+ZGVzdCk7Ci0JaWYgKGVudHJ5LT5xdWFsaXR5ID09IDApIHsKLSNpZm5kZWYgVklTX1NVQkNMVVNURVJTX0RJU0FCTEVECi0JCXByb2NfdmlzX2luc2VydF9pbnRlcmZhY2UodmlzX29yaWcsIGlmX2VudHJ5LCB0cnVlKTsKLSNlbmRpZiAvKiBWSVNfU1VCQ0xVU1RFUlNfRElTQUJMRUQgKi8KLQkJYWRkcl90b19zdHJpbmcoZnJvbSwgdmlzX29yaWcpOwotCQlpZiAoY3VycmVudF9mb3JtYXQgPT0gRE9UX0RSQVcpIHsKLQkJCXNlcV9wcmludGYoc2VxLCAiXHRcIiVzXCIgLT4gXCIlc1wiIFtsYWJlbD1cIkhOQVwiXVxuIiwKLQkJCQkgICBmcm9tLCB0byk7Ci0JCX0gZWxzZSB7Ci0JCQlzZXFfcHJpbnRmKHNlcSwKLQkJCQkgICAiJXNcdHsgcm91dGVyIDogXCIlc1wiLCBnYXRld2F5ICAgOiBcIiVzXCIsIGxhYmVsIDogXCJITkFcIiB9IiwKLQkJCQkgICAoZmlyc3RfbGluZSA/ICIiIDogIixcbiIpLCBmcm9tLCB0byk7Ci0JCX0KLQl9IGVsc2UgewotI2lmbmRlZiBWSVNfU1VCQ0xVU1RFUlNfRElTQUJMRUQKLQkJcHJvY192aXNfaW5zZXJ0X2ludGVyZmFjZShlbnRyeS0+c3JjLCBpZl9lbnRyeSwgY29tcGFyZV9vcmlnKGVudHJ5LT5zcmMsIHZpc19vcmlnKSk7Ci0jZW5kaWYgLyogVklTX1NVQkNMVVNURVJTX0RJU0FCTEVEICovCi0JCWFkZHJfdG9fc3RyaW5nKGZyb20sIGVudHJ5LT5zcmMpOwotCi0JCS8qIGtlcm5lbCBoYXMgbm8gcHJpbnRmLXN1cHBvcnQgZm9yICVmPyBpdCdkIGJlIGJldHRlciB0byByZXR1cm4KLQkJICogdGhpcyBpbiBmbG9hdC4gKi8KLQotCQlpbnRfcGFydCA9IFRRX01BWF9WQUxVRSAvIGVudHJ5LT5xdWFsaXR5OwotCQlmcmFjX3BhcnQgPSAxMDAwICogVFFfTUFYX1ZBTFVFIC8gZW50cnktPnF1YWxpdHkgLSBpbnRfcGFydCAqIDEwMDA7Ci0KLQkJaWYgKGN1cnJlbnRfZm9ybWF0ID09IERPVF9EUkFXKSB7Ci0JCQlzZXFfcHJpbnRmKHNlcSwKLQkJCQkgICAiXHRcIiVzXCIgLT4gXCIlc1wiIFtsYWJlbD1cIiVkLiVkXCJdXG4iLAotCQkJCSAgIGZyb20sIHRvLCBpbnRfcGFydCwgZnJhY19wYXJ0KTsKLQkJfSBlbHNlIHsKLQkJCXNlcV9wcmludGYoc2VxLAotCQkJCSAgICIlc1x0eyByb3V0ZXIgOiBcIiVzXCIsIG5laWdoYm91ciA6IFwiJXNcIiwgbGFiZWwgOiAlZC4lZCB9IiwKLQkJCQkgICAoZmlyc3RfbGluZSA/ICIiIDogIixcbiIpLCBmcm9tLCB0bywgaW50X3BhcnQsIGZyYWNfcGFydCk7Ci0JCX0KLQl9Ci19Ci0KLQotc3RhdGljIGludCBwcm9jX3Zpc19yZWFkKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCi17Ci0Jc3RydWN0IGhhc2hfaXRfdCAqaGFzaGl0ID0gTlVMTDsKLQlzdHJ1Y3QgdmlzX2luZm8gKmluZm87Ci0Jc3RydWN0IHZpc19pbmZvX2VudHJ5ICplbnRyaWVzOwotCXN0cnVjdCB2aXNfaWZfbGlzdCAqaWZfZW50cmllcyA9IE5VTEw7Ci0JaW50IGk7Ci0JdWludDhfdCBjdXJyZW50X2Zvcm1hdCwgZmlyc3RfbGluZSA9IDE7Ci0jaWZuZGVmIFZJU19TVUJDTFVTVEVSU19ESVNBQkxFRAotCWNoYXIgdG1wX2FkZHJfc3RyW0VUSF9TVFJfTEVOXTsKLQlzdHJ1Y3QgdmlzX2lmX2xpc3QgKnRtcF9pZl9uZXh0OwotI2VuZGlmIC8qIFZJU19TVUJDTFVTVEVSU19ESVNBQkxFRCAqLwotCi0JY3VycmVudF9mb3JtYXQgPSB2aXNfZm9ybWF0OwotCi0JcmN1X3JlYWRfbG9jaygpOwotCWlmIChsaXN0X2VtcHR5KCZpZl9saXN0KSB8fCAoIWlzX3Zpc19zZXJ2ZXIoKSkpIHsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCWlmIChjdXJyZW50X2Zvcm1hdCA9PSBET1RfRFJBVykKLQkJCXNlcV9wcmludGYoc2VxLCAiZGlncmFwaCB7XG59XG4iKTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQlpZiAoY3VycmVudF9mb3JtYXQgPT0gRE9UX0RSQVcpCi0JCXNlcV9wcmludGYoc2VxLCAiZGlncmFwaCB7XG4iKTsKLQotCXNwaW5fbG9jaygmdmlzX2hhc2hfbG9jayk7Ci0Jd2hpbGUgKE5VTEwgIT0gKGhhc2hpdCA9IGhhc2hfaXRlcmF0ZSh2aXNfaGFzaCwgaGFzaGl0KSkpIHsKLQkJaW5mbyA9IGhhc2hpdC0+YnVja2V0LT5kYXRhOwotCQllbnRyaWVzID0gKHN0cnVjdCB2aXNfaW5mb19lbnRyeSAqKQotCQkJKChjaGFyICopaW5mbyArIHNpemVvZihzdHJ1Y3QgdmlzX2luZm8pKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+cGFja2V0LmVudHJpZXM7IGkrKykgewotCQkJcHJvY192aXNfcmVhZF9lbnRyeShzZXEsICZlbnRyaWVzW2ldLCAmaWZfZW50cmllcywKLQkJCQkJICAgIGluZm8tPnBhY2tldC52aXNfb3JpZywKLQkJCQkJICAgIGN1cnJlbnRfZm9ybWF0LCBmaXJzdF9saW5lKTsKLQkJCWlmIChmaXJzdF9saW5lKQotCQkJCWZpcnN0X2xpbmUgPSAwOwotCQl9Ci0KLSNpZm5kZWYgVklTX1NVQkNMVVNURVJTX0RJU0FCTEVECi0JCS8qIEdlbmVyYXRlIHN1YmdyYXBocyBmcm9tIHRoZSBjb2xsZWN0ZWQgaXRlbXMgKi8KLQkJaWYgKGN1cnJlbnRfZm9ybWF0ID09IERPVF9EUkFXKSB7Ci0KLQkJCWFkZHJfdG9fc3RyaW5nKHRtcF9hZGRyX3N0ciwgaW5mby0+cGFja2V0LnZpc19vcmlnKTsKLQkJCXNlcV9wcmludGYoc2VxLCAiXHRzdWJncmFwaCBcImNsdXN0ZXJfJXNcIiB7XG4iLCB0bXBfYWRkcl9zdHIpOwotCQkJd2hpbGUgKGlmX2VudHJpZXMgIT0gTlVMTCkgewotCi0JCQkJYWRkcl90b19zdHJpbmcodG1wX2FkZHJfc3RyLCBpZl9lbnRyaWVzLT5hZGRyKTsKLQkJCQlpZiAoaWZfZW50cmllcy0+cHJpbWFyeSkKLQkJCQkJc2VxX3ByaW50ZihzZXEsICJcdFx0XCIlc1wiIFtwZXJpcGhlcmllcz0yXVxuIiwgdG1wX2FkZHJfc3RyKTsKLQkJCQllbHNlCi0JCQkJCXNlcV9wcmludGYoc2VxLCAiXHRcdFwiJXNcIlxuIiwgdG1wX2FkZHJfc3RyKTsKLQotCQkJCS8qIC4uLiBhbmQgZW1wdHkgdGhlIGxpc3Qgd2hpbGUgZG9pbmcgdGhpcyAqLwotCQkJCXRtcF9pZl9uZXh0ID0gaWZfZW50cmllcy0+bmV4dDsKLQkJCQlrZnJlZShpZl9lbnRyaWVzKTsKLQkJCQlpZl9lbnRyaWVzID0gdG1wX2lmX25leHQ7Ci0JCQl9Ci0JCQlzZXFfcHJpbnRmKHNlcSwgIlx0fVxuIik7Ci0JCX0KLSNlbmRpZiAvKiBWSVNfU1VCQ0xVU1RFUlNfRElTQUJMRUQgKi8KLQl9Ci0Jc3Bpbl91bmxvY2soJnZpc19oYXNoX2xvY2spOwotCi0JaWYgKGN1cnJlbnRfZm9ybWF0ID09IERPVF9EUkFXKQotCQlzZXFfcHJpbnRmKHNlcSwgIn1cbiIpOwotCWVsc2UKLQkJc2VxX3ByaW50ZihzZXEsICJcbiIpOwotZW5kOgotCXJldHVybiAwOwotfQotCiAvKiBzZXR0aW5nIHRoZSBtb2RlIG9mIHRoZSB2aXMgc2VydmVyIGJ5IHRoZSB1c2VyICovCi1zdGF0aWMgc3NpemVfdCBwcm9jX3Zpc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKiBidWZmZXIsCitzdGF0aWMgc3NpemVfdCBwcm9jX3Zpc19zcnZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmZmVyLAogCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJY2hhciAqdmlzX21vZGVfc3RyaW5nOwpAQCAtNTg0LDcyICszMzAsODQgQEAKIAlub3RfY29waWVkID0gY29weV9mcm9tX3VzZXIodmlzX21vZGVfc3RyaW5nLCBidWZmZXIsIGNvdW50KTsKIAl2aXNfbW9kZV9zdHJpbmdbY291bnQgLSBub3RfY29waWVkIC0gMV0gPSAwOwogCi0JaWYgKHN0cmNtcCh2aXNfbW9kZV9zdHJpbmcsICJjbGllbnQiKSA9PSAwKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9OT1RJQ0UsICJTZXR0aW5nIFZJUyBtb2RlIHRvIGNsaWVudFxuIik7Ci0JCXZpc19zZXRfbW9kZShWSVNfVFlQRV9DTElFTlRfVVBEQVRFKTsKLQl9IGVsc2UgaWYgKHN0cmNtcCh2aXNfbW9kZV9zdHJpbmcsICJzZXJ2ZXIiKSA9PSAwKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9OT1RJQ0UsICJTZXR0aW5nIFZJUyBtb2RlIHRvIHNlcnZlclxuIik7Ci0JCXZpc19zZXRfbW9kZShWSVNfVFlQRV9TRVJWRVJfU1lOQyk7CisJaWYgKChzdHJjbXAodmlzX21vZGVfc3RyaW5nLCAiY2xpZW50IikgPT0gMCkgfHwKKwkJCShzdHJjbXAodmlzX21vZGVfc3RyaW5nLCAiZGlzYWJsZWQiKSA9PSAwKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJiYXRtYW4tYWR2OlNldHRpbmcgVklTIG1vZGUgdG8gY2xpZW50IChkaXNhYmxpbmcgdmlzIHNlcnZlcilcbiIpOworCQlhdG9taWNfc2V0KCZ2aXNfbW9kZSwgVklTX1RZUEVfQ0xJRU5UX1VQREFURSk7CisJfSBlbHNlIGlmICgoc3RyY21wKHZpc19tb2RlX3N0cmluZywgInNlcnZlciIpID09IDApIHx8CisJCQkoc3RyY21wKHZpc19tb2RlX3N0cmluZywgImVuYWJsZWQiKSA9PSAwKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJiYXRtYW4tYWR2OlNldHRpbmcgVklTIG1vZGUgdG8gc2VydmVyIChlbmFibGluZyB2aXMgc2VydmVyKVxuIik7CisJCWF0b21pY19zZXQoJnZpc19tb2RlLCBWSVNfVFlQRV9TRVJWRVJfU1lOQyk7CiAJfSBlbHNlCi0JCWRlYnVnX2xvZyhMT0dfVFlQRV9XQVJOLCAiVW5rbm93biBWSVMgbW9kZTogJXNcbiIsCi0JCQkgIHZpc19tb2RlX3N0cmluZyk7CisJCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjpVbmtub3duIFZJUyBtb2RlOiAlc1xuIiwKKwkJICAgICAgIHZpc19tb2RlX3N0cmluZyk7CiAKIAlrZnJlZSh2aXNfbW9kZV9zdHJpbmcpOwogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGludCBwcm9jX3Zpc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBwcm9jX3Zpc19zcnZfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwcm9jX3Zpc19yZWFkLCBOVUxMKTsKLX0KKwlpbnQgdmlzX3NlcnZlciA9IGF0b21pY19yZWFkKCZ2aXNfbW9kZSk7CiAKLXN0YXRpYyBpbnQgcHJvY192aXNfZm9ybWF0X3JlYWQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKLXsKLQl1aW50OF90IGN1cnJlbnRfZm9ybWF0ID0gdmlzX2Zvcm1hdDsKKwlzZXFfcHJpbnRmKHNlcSwgIlslY10gY2xpZW50IG1vZGUgKHNlcnZlciBkaXNhYmxlZCkgXG4iLAorCQkJKHZpc19zZXJ2ZXIgPT0gVklTX1RZUEVfQ0xJRU5UX1VQREFURSkgPyAneCcgOiAnICcpOworCXNlcV9wcmludGYoc2VxLCAiWyVjXSBzZXJ2ZXIgbW9kZSAoc2VydmVyIGVuYWJsZWQpIFxuIiwKKwkJCSh2aXNfc2VydmVyID09IFZJU19UWVBFX1NFUlZFUl9TWU5DKSA/ICd4JyA6ICcgJyk7CiAKLQlzZXFfcHJpbnRmKHNlcSwgIlslY10gJXNcbiIsCi0JCSAgIChjdXJyZW50X2Zvcm1hdCA9PSBET1RfRFJBVykgPyAneCcgOiAnICcsCi0JCSAgIFZJU19GT1JNQVRfRERfTkFNRSk7Ci0Jc2VxX3ByaW50ZihzZXEsICJbJWNdICVzXG4iLAotCQkgICAoY3VycmVudF9mb3JtYXQgPT0gSlNPTikgPyAneCcgOiAnICcsCi0JCSAgIFZJU19GT1JNQVRfSlNPTl9OQU1FKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwcm9jX3Zpc19mb3JtYXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgcHJvY192aXNfc3J2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHByb2NfdmlzX2Zvcm1hdF9yZWFkLCBOVUxMKTsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcHJvY192aXNfc3J2X3JlYWQsIE5VTEwpOwogfQogCi1zdGF0aWMgc3NpemVfdCBwcm9jX3Zpc19mb3JtYXRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJICAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCitzdGF0aWMgaW50IHByb2NfdmlzX2RhdGFfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQogewotCWNoYXIgKnZpc19mb3JtYXRfc3RyaW5nOwotCWludCBub3RfY29waWVkID0gMDsKKwlIQVNISVQoaGFzaGl0KTsKKwlzdHJ1Y3QgdmlzX2luZm8gKmluZm87CisJc3RydWN0IHZpc19pbmZvX2VudHJ5ICplbnRyaWVzOworCUhMSVNUX0hFQUQodmlzX2lmX2xpc3QpOworCWludCBpOworCWNoYXIgdG1wX2FkZHJfc3RyW0VUSF9TVFJfTEVOXTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB2aXNfc2VydmVyID0gYXRvbWljX3JlYWQoJnZpc19tb2RlKTsKIAotCXZpc19mb3JtYXRfc3RyaW5nID0ga21hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CisJcmN1X3JlYWRfbG9jaygpOworCWlmIChsaXN0X2VtcHR5KCZpZl9saXN0KSB8fCAodmlzX3NlcnZlciA9PSBWSVNfVFlQRV9DTElFTlRfVVBEQVRFKSkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJZ290byBlbmQ7CisJfQogCi0JaWYgKCF2aXNfZm9ybWF0X3N0cmluZykKLQkJcmV0dXJuIC1FTk9NRU07CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlub3RfY29waWVkID0gY29weV9mcm9tX3VzZXIodmlzX2Zvcm1hdF9zdHJpbmcsIGJ1ZmZlciwgY291bnQpOwotCXZpc19mb3JtYXRfc3RyaW5nW2NvdW50IC0gbm90X2NvcGllZCAtIDFdID0gMDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmlzX2hhc2hfbG9jaywgZmxhZ3MpOworCXdoaWxlIChoYXNoX2l0ZXJhdGUodmlzX2hhc2gsICZoYXNoaXQpKSB7CisJCWluZm8gPSBoYXNoaXQuYnVja2V0LT5kYXRhOworCQllbnRyaWVzID0gKHN0cnVjdCB2aXNfaW5mb19lbnRyeSAqKQorCQkJKChjaGFyICopaW5mbyArIHNpemVvZihzdHJ1Y3QgdmlzX2luZm8pKTsKKwkJYWRkcl90b19zdHJpbmcodG1wX2FkZHJfc3RyLCBpbmZvLT5wYWNrZXQudmlzX29yaWcpOworCQlzZXFfcHJpbnRmKHNlcSwgIiVzLCIsIHRtcF9hZGRyX3N0cik7CiAKLQlpZiAoc3RyY21wKHZpc19mb3JtYXRfc3RyaW5nLCBWSVNfRk9STUFUX0REX05BTUUpID09IDApIHsKLQkJZGVidWdfbG9nKExPR19UWVBFX05PVElDRSwgIlNldHRpbmcgVklTIG91dHB1dCBmb3JtYXQgdG86ICVzXG4iLAotCQkJICBWSVNfRk9STUFUX0REX05BTUUpOwotCQl2aXNfZm9ybWF0ID0gRE9UX0RSQVc7Ci0JfSBlbHNlIGlmIChzdHJjbXAodmlzX2Zvcm1hdF9zdHJpbmcsIFZJU19GT1JNQVRfSlNPTl9OQU1FKSA9PSAwKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9OT1RJQ0UsICJTZXR0aW5nIFZJUyBvdXRwdXQgZm9ybWF0IHRvOiAlc1xuIiwKLQkJCSAgVklTX0ZPUk1BVF9KU09OX05BTUUpOwotCQl2aXNfZm9ybWF0ID0gSlNPTjsKLQl9IGVsc2UKLQkJZGVidWdfbG9nKExPR19UWVBFX1dBUk4sICJVbmtub3duIFZJUyBvdXRwdXQgZm9ybWF0OiAlc1xuIiwKLQkJCSAgdmlzX2Zvcm1hdF9zdHJpbmcpOworCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+cGFja2V0LmVudHJpZXM7IGkrKykgeworCQkJcHJvY192aXNfcmVhZF9lbnRyeShzZXEsICZlbnRyaWVzW2ldLCAmdmlzX2lmX2xpc3QsCisJCQkJCSAgICBpbmZvLT5wYWNrZXQudmlzX29yaWcpOworCQl9CiAKLQlrZnJlZSh2aXNfZm9ybWF0X3N0cmluZyk7Ci0JcmV0dXJuIGNvdW50OworCQkvKiBhZGQgcHJpbWFyeS9zZWNvbmRhcnkgcmVjb3JkcyAqLworCQlwcm9jX3Zpc19yZWFkX3ByaW1fc2VjKHNlcSwgJnZpc19pZl9saXN0KTsKKwkJc2VxX3ByaW50ZihzZXEsICJcbiIpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aXNfaGFzaF9sb2NrLCBmbGFncyk7CisKK2VuZDoKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jX3Zpc19kYXRhX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHByb2NfdmlzX2RhdGFfcmVhZCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbnQgcHJvY19hZ2dyX3JlYWQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKQEAgLTY2NSw2ICs0MjMsNyBAQAogCWNoYXIgKmFnZ3Jfc3RyaW5nOwogCWludCBub3RfY29waWVkID0gMDsKIAl1bnNpZ25lZCBsb25nIGFnZ3JlZ2F0aW9uX2VuYWJsZWRfdG1wOworCWludCByZXR2YWw7CiAKIAlhZ2dyX3N0cmluZyA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOwogCkBAIC02NzQsMjIgKzQzMywyMSBAQAogCW5vdF9jb3BpZWQgPSBjb3B5X2Zyb21fdXNlcihhZ2dyX3N0cmluZywgYnVmZmVyLCBjb3VudCk7CiAJYWdncl9zdHJpbmdbY291bnQgLSBub3RfY29waWVkIC0gMV0gPSAwOwogCi0Jc3RyaWN0X3N0cnRvdWwoYWdncl9zdHJpbmcsIDEwLCAmYWdncmVnYXRpb25fZW5hYmxlZF90bXApOworCXJldHZhbCA9IHN0cmljdF9zdHJ0b3VsKGFnZ3Jfc3RyaW5nLCAxMCwgJmFnZ3JlZ2F0aW9uX2VuYWJsZWRfdG1wKTsKIAotCWlmICgoYWdncmVnYXRpb25fZW5hYmxlZF90bXAgIT0gMCkgJiYgKGFnZ3JlZ2F0aW9uX2VuYWJsZWRfdG1wICE9IDEpKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9XQVJOLCAiQWdncmVnYXRpb24gY2FuIG9ubHkgYmUgZW5hYmxlZCAoMSkgb3IgZGlzYWJsZWQgKDApLCBnaXZlbiB2YWx1ZTogJWxpXG4iLCBhZ2dyZWdhdGlvbl9lbmFibGVkX3RtcCk7Ci0JCWdvdG8gZW5kOworCWlmIChyZXR2YWwgfHwgYWdncmVnYXRpb25fZW5hYmxlZF90bXAgPiAxKSB7CisJCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjpBZ2dyZWdhdGlvbiBjYW4gb25seSBiZSBlbmFibGVkICgxKSBvciBkaXNhYmxlZCAoMCksIGdpdmVuIHZhbHVlOiAlbGlcbiIsIGFnZ3JlZ2F0aW9uX2VuYWJsZWRfdG1wKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPICJiYXRtYW4tYWR2OkNoYW5naW5nIGFnZ3JlZ2F0aW9uIGZyb206ICVzICglaSkgdG86ICVzICglbGkpXG4iLAorCQkgICAgICAgKGF0b21pY19yZWFkKCZhZ2dyZWdhdGlvbl9lbmFibGVkKSA9PSAxID8KKwkJCSJlbmFibGVkIiA6ICJkaXNhYmxlZCIpLAorCQkgICAgICAgYXRvbWljX3JlYWQoJmFnZ3JlZ2F0aW9uX2VuYWJsZWQpLAorCQkgICAgICAgKGFnZ3JlZ2F0aW9uX2VuYWJsZWRfdG1wID09IDEgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSwKKwkJICAgICAgIGFnZ3JlZ2F0aW9uX2VuYWJsZWRfdG1wKTsKKwkJYXRvbWljX3NldCgmYWdncmVnYXRpb25fZW5hYmxlZCwKKwkJCSAgICh1bnNpZ25lZClhZ2dyZWdhdGlvbl9lbmFibGVkX3RtcCk7CiAJfQogCi0JZGVidWdfbG9nKExPR19UWVBFX05PVElDRSwgIkNoYW5naW5nIGFnZ3JlZ2F0aW9uIGZyb206ICVzICglaSkgdG86ICVzICglbGkpXG4iLAotCQkgIChhdG9taWNfcmVhZCgmYWdncmVnYXRpb25fZW5hYmxlZCkgPT0gMSA/Ci0JCSAgICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpLAotCQkgIGF0b21pY19yZWFkKCZhZ2dyZWdhdGlvbl9lbmFibGVkKSwKLQkJICAoYWdncmVnYXRpb25fZW5hYmxlZF90bXAgPT0gMSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpLAotCQkgIGFnZ3JlZ2F0aW9uX2VuYWJsZWRfdG1wKTsKLQotCWF0b21pY19zZXQoJmFnZ3JlZ2F0aW9uX2VuYWJsZWQsICh1bnNpZ25lZClhZ2dyZWdhdGlvbl9lbmFibGVkX3RtcCk7Ci1lbmQ6CiAJa2ZyZWUoYWdncl9zdHJpbmcpOwogCXJldHVybiBjb3VudDsKIH0KQEAgLTcxNSwyMCArNDczLDIwIEBACiAJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfdmlzX2Zvcm1hdF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY192aXNfc3J2X2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IHByb2NfdmlzX2Zvcm1hdF9vcGVuLAorCS5vcGVuCQk9IHByb2NfdmlzX3Nydl9vcGVuLAogCS5yZWFkCQk9IHNlcV9yZWFkLAotCS53cml0ZQkJPSBwcm9jX3Zpc19mb3JtYXRfd3JpdGUsCisJLndyaXRlCQk9IHByb2NfdmlzX3Nydl93cml0ZSwKIAkubGxzZWVrCQk9IHNlcV9sc2VlaywKIAkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY192aXNfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfdmlzX2RhdGFfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4JCT0gcHJvY192aXNfb3BlbiwKKwkub3BlbgkJPSBwcm9jX3Zpc19kYXRhX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCi0JLndyaXRlCQk9IHByb2NfdmlzX3dyaXRlLAorCS53cml0ZQkJPSBwcm9jX2R1bW15X3dyaXRlLAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAogCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCiB9OwpAQCAtNzYwLDE1ICs1MTgsNiBAQAogCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2xvZ19sZXZlbF9mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbgkJPSBwcm9jX2xvZ19sZXZlbF9vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS53cml0ZQkJPSBwcm9jX2xvZ19sZXZlbF93cml0ZSwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19pbnRlcmZhY2VzX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IHByb2NfaW50ZXJmYWNlc19vcGVuLApAQCAtNzk1LDEyICs1NDQsNiBAQAogCWlmIChwcm9jX3RyYW5zdF9sb2NhbF9maWxlKQogCQlyZW1vdmVfcHJvY19lbnRyeShQUk9DX0ZJTEVfVFJBTlNUX0xPQ0FMLCBwcm9jX2JhdG1hbl9kaXIpOwogCi0JaWYgKHByb2NfbG9nX2ZpbGUpCi0JCXJlbW92ZV9wcm9jX2VudHJ5KFBST0NfRklMRV9MT0csIHByb2NfYmF0bWFuX2Rpcik7Ci0KLQlpZiAocHJvY19sb2dfbGV2ZWxfZmlsZSkKLQkJcmVtb3ZlX3Byb2NfZW50cnkoUFJPQ19GSUxFX0xPR19MRVZFTCwgcHJvY19iYXRtYW5fZGlyKTsKLQogCWlmIChwcm9jX29yaWdpbmF0b3JzX2ZpbGUpCiAJCXJlbW92ZV9wcm9jX2VudHJ5KFBST0NfRklMRV9PUklHSU5BVE9SUywgcHJvY19iYXRtYW5fZGlyKTsKIApAQCAtODEwLDExICs1NTMsMTEgQEAKIAlpZiAocHJvY19pbnRlcmZhY2VfZmlsZSkKIAkJcmVtb3ZlX3Byb2NfZW50cnkoUFJPQ19GSUxFX0lOVEVSRkFDRVMsIHByb2NfYmF0bWFuX2Rpcik7CiAKLQlpZiAocHJvY192aXNfZmlsZSkKLQkJcmVtb3ZlX3Byb2NfZW50cnkoUFJPQ19GSUxFX1ZJUywgcHJvY19iYXRtYW5fZGlyKTsKKwlpZiAocHJvY192aXNfZGF0YV9maWxlKQorCQlyZW1vdmVfcHJvY19lbnRyeShQUk9DX0ZJTEVfVklTX0RBVEEsIHByb2NfYmF0bWFuX2Rpcik7CiAKLQlpZiAocHJvY192aXNfZm9ybWF0X2ZpbGUpCi0JCXJlbW92ZV9wcm9jX2VudHJ5KFBST0NfRklMRV9WSVNfRk9STUFULCBwcm9jX2JhdG1hbl9kaXIpOworCWlmIChwcm9jX3Zpc19zcnZfZmlsZSkKKwkJcmVtb3ZlX3Byb2NfZW50cnkoUFJPQ19GSUxFX1ZJU19TUlYsIHByb2NfYmF0bWFuX2Rpcik7CiAKIAlpZiAocHJvY19hZ2dyX2ZpbGUpCiAJCXJlbW92ZV9wcm9jX2VudHJ5KFBST0NfRklMRV9BR0dSLCBwcm9jX2JhdG1hbl9kaXIpOwpAQCAtODYyLDE3ICs2MDUsNiBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQlwcm9jX2xvZ19sZXZlbF9maWxlID0gY3JlYXRlX3Byb2NfZW50cnkoUFJPQ19GSUxFX0xPR19MRVZFTCwKLQkJCQkJCVNfSVdVU1IgfCBTX0lSVUdPLAotCQkJCQkJcHJvY19iYXRtYW5fZGlyKTsKLQlpZiAocHJvY19sb2dfbGV2ZWxfZmlsZSkgewotCQlwcm9jX2xvZ19sZXZlbF9maWxlLT5wcm9jX2ZvcHMgPSAmcHJvY19sb2dfbGV2ZWxfZm9wczsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6IFJlZ2lzdGVyaW5nIHRoZSAnL3Byb2MvbmV0LyVzLyVzJyBmaWxlIGZhaWxlZFxuIiwgUFJPQ19ST09UX0RJUiwgUFJPQ19GSUxFX0xPR19MRVZFTCk7Ci0JCWNsZWFudXBfcHJvY2ZzKCk7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQogCXByb2Nfb3JpZ2luYXRvcnNfZmlsZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KFBST0NfRklMRV9PUklHSU5BVE9SUywKIAkJCQkJCSAgU19JUlVHTywgcHJvY19iYXRtYW5fZGlyKTsKIAlpZiAocHJvY19vcmlnaW5hdG9yc19maWxlKSB7CkBAIC04ODMsMTYgKzYxNSw2IEBACiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXByb2NfbG9nX2ZpbGUgPSBjcmVhdGVfcHJvY19lbnRyeShQUk9DX0ZJTEVfTE9HLAotCQkJCQkgIFNfSVJVR08sIHByb2NfYmF0bWFuX2Rpcik7Ci0JaWYgKHByb2NfbG9nX2ZpbGUpIHsKLQkJcHJvY19sb2dfZmlsZS0+cHJvY19mb3BzID0gJnByb2NfbG9nX29wZXJhdGlvbnM7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OiBSZWdpc3RlcmluZyB0aGUgJy9wcm9jL25ldC8lcy8lcycgZmlsZSBmYWlsZWRcbiIsIFBST0NfRklMRV9MT0csIFBST0NfRklMRV9HQVRFV0FZUyk7Ci0JCWNsZWFudXBfcHJvY2ZzKCk7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQogCXByb2NfdHJhbnN0X2xvY2FsX2ZpbGUgPSBjcmVhdGVfcHJvY19lbnRyeShQUk9DX0ZJTEVfVFJBTlNUX0xPQ0FMLAogCQkJCQkJICAgU19JUlVHTywgcHJvY19iYXRtYW5fZGlyKTsKIAlpZiAocHJvY190cmFuc3RfbG9jYWxfZmlsZSkgewpAQCAtOTEzLDIzICs2MzUsMjMgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JcHJvY192aXNfZmlsZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KFBST0NfRklMRV9WSVMsIFNfSVdVU1IgfCBTX0lSVUdPLAotCQkJCQkgIHByb2NfYmF0bWFuX2Rpcik7Ci0JaWYgKHByb2NfdmlzX2ZpbGUpIHsKLQkJcHJvY192aXNfZmlsZS0+cHJvY19mb3BzID0gJnByb2NfdmlzX2ZvcHM7CisJcHJvY192aXNfc3J2X2ZpbGUgPSBjcmVhdGVfcHJvY19lbnRyeShQUk9DX0ZJTEVfVklTX1NSViwKKwkJCQkJCVNfSVdVU1IgfCBTX0lSVUdPLAorCQkJCQkJcHJvY19iYXRtYW5fZGlyKTsKKwlpZiAocHJvY192aXNfc3J2X2ZpbGUpIHsKKwkJcHJvY192aXNfc3J2X2ZpbGUtPnByb2NfZm9wcyA9ICZwcm9jX3Zpc19zcnZfZm9wczsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6IFJlZ2lzdGVyaW5nIHRoZSAnL3Byb2MvbmV0LyVzLyVzJyBmaWxlIGZhaWxlZFxuIiwgUFJPQ19ST09UX0RJUiwgUFJPQ19GSUxFX1ZJUyk7CisJCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjogUmVnaXN0ZXJpbmcgdGhlICcvcHJvYy9uZXQvJXMvJXMnIGZpbGUgZmFpbGVkXG4iLCBQUk9DX1JPT1RfRElSLCBQUk9DX0ZJTEVfVklTX1NSVik7CiAJCWNsZWFudXBfcHJvY2ZzKCk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXByb2NfdmlzX2Zvcm1hdF9maWxlID0gY3JlYXRlX3Byb2NfZW50cnkoUFJPQ19GSUxFX1ZJU19GT1JNQVQsCi0JCQkJCQkgU19JV1VTUiB8IFNfSVJVR08sCi0JCQkJCQkgcHJvY19iYXRtYW5fZGlyKTsKLQlpZiAocHJvY192aXNfZm9ybWF0X2ZpbGUpIHsKLQkJcHJvY192aXNfZm9ybWF0X2ZpbGUtPnByb2NfZm9wcyA9ICZwcm9jX3Zpc19mb3JtYXRfZm9wczsKKwlwcm9jX3Zpc19kYXRhX2ZpbGUgPSBjcmVhdGVfcHJvY19lbnRyeShQUk9DX0ZJTEVfVklTX0RBVEEsIFNfSVJVR08sCisJCQkJCSAgcHJvY19iYXRtYW5fZGlyKTsKKwlpZiAocHJvY192aXNfZGF0YV9maWxlKSB7CisJCXByb2NfdmlzX2RhdGFfZmlsZS0+cHJvY19mb3BzID0gJnByb2NfdmlzX2RhdGFfZm9wczsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6IFJlZ2lzdGVyaW5nIHRoZSAnL3Byb2MvbmV0LyVzLyVzJyBmaWxlIGZhaWxlZFxuIiwgUFJPQ19ST09UX0RJUiwgUFJPQ19GSUxFX1ZJU19GT1JNQVQpOworCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6IFJlZ2lzdGVyaW5nIHRoZSAnL3Byb2MvbmV0LyVzLyVzJyBmaWxlIGZhaWxlZFxuIiwgUFJPQ19ST09UX0RJUiwgUFJPQ19GSUxFX1ZJU19EQVRBKTsKIAkJY2xlYW51cF9wcm9jZnMoKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQpAQCAtOTQ2LDUgKzY2OCwzIEBACiAKIAlyZXR1cm4gMDsKIH0KLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9wcm9jLmggYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9wcm9jLmgKaW5kZXggMTZkM2VmZC4uY2Q2OTBlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvcHJvYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3Byb2MuaApAQCAtMzEsMTkgKzMxLDEwIEBACiAjZGVmaW5lIFBST0NfRklMRV9MT0dfTEVWRUwgImxvZ19sZXZlbCIKICNkZWZpbmUgUFJPQ19GSUxFX1RSQU5TVF9MT0NBTCAidHJhbnN0YWJsZV9sb2NhbCIKICNkZWZpbmUgUFJPQ19GSUxFX1RSQU5TVF9HTE9CQUwgInRyYW5zdGFibGVfZ2xvYmFsIgotI2RlZmluZSBQUk9DX0ZJTEVfVklTICJ2aXMiCi0jZGVmaW5lIFBST0NfRklMRV9WSVNfRk9STUFUICJ2aXNfZm9ybWF0IgorI2RlZmluZSBQUk9DX0ZJTEVfVklTX1NSViAidmlzX3NlcnZlciIKKyNkZWZpbmUgUFJPQ19GSUxFX1ZJU19EQVRBICJ2aXNfZGF0YSIKICNkZWZpbmUgUFJPQ19GSUxFX0FHR1IgImFnZ3JlZ2F0ZV9vZ20iCiAKIHZvaWQgY2xlYW51cF9wcm9jZnModm9pZCk7CiBpbnQgc2V0dXBfcHJvY2ZzKHZvaWQpOwogCi0vKiBXaGlsZSBzY2FubmluZyBmb3IgdmlzLWVudHJpZXMgb2YgYSBwYXJ0aWN1bGFyIHZpcy1vcmlnaW5hdG9yCi0gKiB0aGlzIGxpc3QgY29sbGVjdHMgaXRzIGludGVyZmFjZXMgdG8gY3JlYXRlIGEgc3ViZ3JhcGgvY2x1c3RlcgotICogb3V0IG9mIHRoZW0gbGF0ZXIKLSAqLwotc3RydWN0IHZpc19pZl9saXN0IHsKLQl1aW50OF90IGFkZHJbRVRIX0FMRU5dOwotCWJvb2wgcHJpbWFyeTsKLQlzdHJ1Y3QgdmlzX2lmX2xpc3QgKm5leHQ7Ci19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvcm91dGluZy5jIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvcm91dGluZy5jCmluZGV4IDRhMTRjMzYuLmQ4OTA0OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3JvdXRpbmcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9yb3V0aW5nLmMKQEAgLTE5LDMwNCArMTksMjI2IEBACiAgKgogICovCiAKLQotCi0KLQogI2luY2x1ZGUgIm1haW4uaCIKICNpbmNsdWRlICJyb3V0aW5nLmgiCi0jaW5jbHVkZSAibG9nLmgiCiAjaW5jbHVkZSAic2VuZC5oIgorI2luY2x1ZGUgImhhc2guaCIKICNpbmNsdWRlICJzb2Z0LWludGVyZmFjZS5oIgogI2luY2x1ZGUgImhhcmQtaW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiZGV2aWNlLmgiCiAjaW5jbHVkZSAidHJhbnNsYXRpb24tdGFibGUuaCIKKyNpbmNsdWRlICJvcmlnaW5hdG9yLmgiCiAjaW5jbHVkZSAidHlwZXMuaCIKLSNpbmNsdWRlICJoYXNoLmgiCiAjaW5jbHVkZSAicmluZ19idWZmZXIuaCIKICNpbmNsdWRlICJ2aXMuaCIKICNpbmNsdWRlICJhZ2dyZWdhdGlvbi5oIgotI2luY2x1ZGUgImNvbXBhdC5oIgotCi0KIAogREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQodGhyZWFkX3dhaXQpOwotc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKHB1cmdlX29yaWdfd3EsIHB1cmdlX29yaWcpOwotCi1zdGF0aWMgYXRvbWljX3QgZGF0YV9yZWFkeV9jb25kOwotYXRvbWljX3QgZXhpdF9jb25kOwotCi1zdGF0aWMgdm9pZCBzdGFydF9wdXJnZV90aW1lcih2b2lkKQotewotCXF1ZXVlX2RlbGF5ZWRfd29yayhiYXRfZXZlbnRfd29ya3F1ZXVlLCAmcHVyZ2Vfb3JpZ193cSwgMSAqIEhaKTsKLX0KLQotaW50IG9yaWdpbmF0b3JfaW5pdCh2b2lkKQotewotCWlmIChvcmlnX2hhc2gpCi0JCXJldHVybiAxOwotCi0Jc3Bpbl9sb2NrKCZvcmlnX2hhc2hfbG9jayk7Ci0Jb3JpZ19oYXNoID0gaGFzaF9uZXcoMTI4LCBjb21wYXJlX29yaWcsIGNob29zZV9vcmlnKTsKLQotCWlmICghb3JpZ19oYXNoKQotCQlnb3RvIGVycjsKLQotCXNwaW5fdW5sb2NrKCZvcmlnX2hhc2hfbG9jayk7Ci0Jc3RhcnRfcHVyZ2VfdGltZXIoKTsKLQlyZXR1cm4gMTsKLQotZXJyOgotCXNwaW5fdW5sb2NrKCZvcmlnX2hhc2hfbG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgb3JpZ2luYXRvcl9mcmVlKHZvaWQpCi17Ci0JaWYgKCFvcmlnX2hhc2gpCi0JCXJldHVybjsKLQotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHVyZ2Vfb3JpZ193cSk7Ci0KLQlzcGluX2xvY2soJm9yaWdfaGFzaF9sb2NrKTsKLQloYXNoX2RlbGV0ZShvcmlnX2hhc2gsIGZyZWVfb3JpZ19ub2RlKTsKLQlvcmlnX2hhc2ggPSBOVUxMOwotCXNwaW5fdW5sb2NrKCZvcmlnX2hhc2hfbG9jayk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbmVpZ2hfbm9kZSAqY3JlYXRlX25laWdoYm9yKHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwgc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19uZWlnaF9ub2RlLCB1aW50OF90ICpuZWlnaCwgc3RydWN0IGJhdG1hbl9pZiAqaWZfaW5jb21pbmcpCi17Ci0Jc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGU7Ci0KLQlkZWJ1Z19sb2coTE9HX1RZUEVfQkFUTUFOLCAiQ3JlYXRpbmcgbmV3IGxhc3QtaG9wIG5laWdoYm91ciBvZiBvcmlnaW5hdG9yXG4iKTsKLQotCW5laWdoX25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbmVpZ2hfbm9kZSksIEdGUF9BVE9NSUMpOwotCW1lbXNldChuZWlnaF9ub2RlLCAwLCBzaXplb2Yoc3RydWN0IG5laWdoX25vZGUpKTsKLQlJTklUX0xJU1RfSEVBRCgmbmVpZ2hfbm9kZS0+bGlzdCk7Ci0KLQltZW1jcHkobmVpZ2hfbm9kZS0+YWRkciwgbmVpZ2gsIEVUSF9BTEVOKTsKLQluZWlnaF9ub2RlLT5vcmlnX25vZGUgPSBvcmlnX25laWdoX25vZGU7Ci0JbmVpZ2hfbm9kZS0+aWZfaW5jb21pbmcgPSBpZl9pbmNvbWluZzsKLQotCWxpc3RfYWRkX3RhaWwoJm5laWdoX25vZGUtPmxpc3QsICZvcmlnX25vZGUtPm5laWdoX2xpc3QpOwotCXJldHVybiBuZWlnaF9ub2RlOwotfQotCi12b2lkIGZyZWVfb3JpZ19ub2RlKHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9wb3MsICpsaXN0X3Bvc190bXA7Ci0Jc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGU7Ci0Jc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlID0gKHN0cnVjdCBvcmlnX25vZGUgKilkYXRhOwotCi0JLyogZm9yIGFsbCBuZWlnaGJvdXJzIHRvd2FyZHMgdGhpcyBvcmlnaW5hdG9yIC4uLiAqLwotCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0X3BvcywgbGlzdF9wb3NfdG1wLCAmb3JpZ19ub2RlLT5uZWlnaF9saXN0KSB7Ci0JCW5laWdoX25vZGUgPSBsaXN0X2VudHJ5KGxpc3RfcG9zLCBzdHJ1Y3QgbmVpZ2hfbm9kZSwgbGlzdCk7Ci0KLQkJbGlzdF9kZWwobGlzdF9wb3MpOwotCQlrZnJlZShuZWlnaF9ub2RlKTsKLQl9Ci0KLQlobmFfZ2xvYmFsX2RlbF9vcmlnKG9yaWdfbm9kZSwgIm9yaWdpbmF0b3IgdGltZWQgb3V0Iik7Ci0KLQlrZnJlZShvcmlnX25vZGUtPmJjYXN0X293bik7Ci0Ja2ZyZWUob3JpZ19ub2RlLT5iY2FzdF9vd25fc3VtKTsKLQlrZnJlZShvcmlnX25vZGUpOwotfQotCi0vKiB0aGlzIGZ1bmN0aW9uIGZpbmRzIG9yIGNyZWF0ZXMgYW4gb3JpZ2luYXRvciBlbnRyeSBmb3IgdGhlIGdpdmVuIGFkZHJlc3MgaWYgaXQgZG9lcyBub3QgZXhpdHMgKi8KLXN0YXRpYyBzdHJ1Y3Qgb3JpZ19ub2RlICpnZXRfb3JpZ19ub2RlKHVpbnQ4X3QgKmFkZHIpCi17Ci0Jc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOwotCXN0cnVjdCBoYXNodGFibGVfdCAqc3dhcGhhc2g7Ci0JY2hhciBvcmlnX3N0cltFVEhfU1RSX0xFTl07Ci0KLQlvcmlnX25vZGUgPSAoKHN0cnVjdCBvcmlnX25vZGUgKiloYXNoX2ZpbmQob3JpZ19oYXNoLCBhZGRyKSk7Ci0KLQlpZiAob3JpZ19ub2RlICE9IE5VTEwpCi0JCXJldHVybiBvcmlnX25vZGU7Ci0KLQlhZGRyX3RvX3N0cmluZyhvcmlnX3N0ciwgYWRkcik7Ci0JZGVidWdfbG9nKExPR19UWVBFX0JBVE1BTiwgIkNyZWF0aW5nIG5ldyBvcmlnaW5hdG9yOiAlcyBcbiIsIG9yaWdfc3RyKTsKLQotCW9yaWdfbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBvcmlnX25vZGUpLCBHRlBfQVRPTUlDKTsKLQltZW1zZXQob3JpZ19ub2RlLCAwLCBzaXplb2Yoc3RydWN0IG9yaWdfbm9kZSkpOwotCUlOSVRfTElTVF9IRUFEKCZvcmlnX25vZGUtPm5laWdoX2xpc3QpOwotCi0JbWVtY3B5KG9yaWdfbm9kZS0+b3JpZywgYWRkciwgRVRIX0FMRU4pOwotCW9yaWdfbm9kZS0+cm91dGVyID0gTlVMTDsKLQlvcmlnX25vZGUtPmJhdG1hbl9pZiA9IE5VTEw7Ci0Jb3JpZ19ub2RlLT5obmFfYnVmZiA9IE5VTEw7Ci0KLQlvcmlnX25vZGUtPmJjYXN0X293biA9IGttYWxsb2MobnVtX2lmcyAqIHNpemVvZihUWVBFX09GX1dPUkQpICogTlVNX1dPUkRTLCBHRlBfQVRPTUlDKTsKLQltZW1zZXQob3JpZ19ub2RlLT5iY2FzdF9vd24sIDAsIG51bV9pZnMgKiBzaXplb2YoVFlQRV9PRl9XT1JEKSAqIE5VTV9XT1JEUyk7Ci0KLQlvcmlnX25vZGUtPmJjYXN0X293bl9zdW0gPSBrbWFsbG9jKG51bV9pZnMgKiBzaXplb2YodWludDhfdCksIEdGUF9BVE9NSUMpOwotCW1lbXNldChvcmlnX25vZGUtPmJjYXN0X293bl9zdW0sIDAsIG51bV9pZnMgKiBzaXplb2YodWludDhfdCkpOwotCi0JaGFzaF9hZGQob3JpZ19oYXNoLCBvcmlnX25vZGUpOwotCi0JaWYgKG9yaWdfaGFzaC0+ZWxlbWVudHMgKiA0ID4gb3JpZ19oYXNoLT5zaXplKSB7Ci0JCXN3YXBoYXNoID0gaGFzaF9yZXNpemUob3JpZ19oYXNoLCBvcmlnX2hhc2gtPnNpemUgKiAyKTsKLQotCQlpZiAoc3dhcGhhc2ggPT0gTlVMTCkKLQkJCWRlYnVnX2xvZyhMT0dfVFlQRV9DUklULCAiQ291bGRuJ3QgcmVzaXplIG9yaWcgaGFzaCB0YWJsZSBcbiIpOwotCQllbHNlCi0JCQlvcmlnX2hhc2ggPSBzd2FwaGFzaDsKLQl9Ci0KLQlyZXR1cm4gb3JpZ19ub2RlOwotfQogCiB2b2lkIHNsaWRlX293bl9iY2FzdF93aW5kb3coc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmKQogewotCXN0cnVjdCBoYXNoX2l0X3QgKmhhc2hpdCA9IE5VTEw7CisJSEFTSElUKGhhc2hpdCk7CiAJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOworCVRZUEVfT0ZfV09SRCAqd29yZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZvcmlnX2hhc2hfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CiAKLQl3aGlsZSAoTlVMTCAhPSAoaGFzaGl0ID0gaGFzaF9pdGVyYXRlKG9yaWdfaGFzaCwgaGFzaGl0KSkpIHsKLQkJb3JpZ19ub2RlID0gaGFzaGl0LT5idWNrZXQtPmRhdGE7CisJd2hpbGUgKGhhc2hfaXRlcmF0ZShvcmlnX2hhc2gsICZoYXNoaXQpKSB7CisJCW9yaWdfbm9kZSA9IGhhc2hpdC5idWNrZXQtPmRhdGE7CisJCXdvcmQgPSAmKG9yaWdfbm9kZS0+YmNhc3Rfb3duW2JhdG1hbl9pZi0+aWZfbnVtICogTlVNX1dPUkRTXSk7CiAKLQkJYml0X2dldF9wYWNrZXQoKFRZUEVfT0ZfV09SRCAqKSYob3JpZ19ub2RlLT5iY2FzdF9vd25bYmF0bWFuX2lmLT5pZl9udW0gKiBOVU1fV09SRFNdKSwgMSwgMCk7Ci0JCW9yaWdfbm9kZS0+YmNhc3Rfb3duX3N1bVtiYXRtYW5faWYtPmlmX251bV0gPSBiaXRfcGFja2V0X2NvdW50KChUWVBFX09GX1dPUkQgKikmKG9yaWdfbm9kZS0+YmNhc3Rfb3duW2JhdG1hbl9pZi0+aWZfbnVtICogTlVNX1dPUkRTXSkpOworCQliaXRfZ2V0X3BhY2tldCh3b3JkLCAxLCAwKTsKKwkJb3JpZ19ub2RlLT5iY2FzdF9vd25fc3VtW2JhdG1hbl9pZi0+aWZfbnVtXSA9CisJCQliaXRfcGFja2V0X2NvdW50KHdvcmQpOwogCX0KIAotCXNwaW5fdW5sb2NrKCZvcmlnX2hhc2hfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlX3JvdXRlcyhzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsIHN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlLCB1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwgaW50IGhuYV9idWZmX2xlbikKK3N0YXRpYyB2b2lkIHVwZGF0ZV9ITkEoc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlLAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqaG5hX2J1ZmYsIGludCBobmFfYnVmZl9sZW4pCiB7Ci0JY2hhciBvcmlnX3N0cltFVEhfU1RSX0xFTl0sIG5laWdoX3N0cltFVEhfU1RSX0xFTl0sIHJvdXRlcl9zdHJbRVRIX1NUUl9MRU5dOworCWlmICgoaG5hX2J1ZmZfbGVuICE9IG9yaWdfbm9kZS0+aG5hX2J1ZmZfbGVuKSB8fAorCSAgICAoKGhuYV9idWZmX2xlbiA+IDApICYmCisJICAgICAob3JpZ19ub2RlLT5obmFfYnVmZl9sZW4gPiAwKSAmJgorCSAgICAgKG1lbWNtcChvcmlnX25vZGUtPmhuYV9idWZmLCBobmFfYnVmZiwgaG5hX2J1ZmZfbGVuKSAhPSAwKSkpIHsKKworCQlpZiAob3JpZ19ub2RlLT5obmFfYnVmZl9sZW4gPiAwKQorCQkJaG5hX2dsb2JhbF9kZWxfb3JpZyhvcmlnX25vZGUsCisJCQkJCSAgICAib3JpZ2luYXRvciBjaGFuZ2VkIGhuYSIpOworCisJCWlmICgoaG5hX2J1ZmZfbGVuID4gMCkgJiYgKGhuYV9idWZmICE9IE5VTEwpKQorCQkJaG5hX2dsb2JhbF9hZGRfb3JpZyhvcmlnX25vZGUsIGhuYV9idWZmLCBobmFfYnVmZl9sZW4pOworCX0KK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3JvdXRlKHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwKKwkJCSBzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZSwKKwkJCSB1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwgaW50IGhuYV9idWZmX2xlbikKK3sKKwkvKiByb3V0ZSBkZWxldGVkICovCisJaWYgKChvcmlnX25vZGUtPnJvdXRlciAhPSBOVUxMKSAmJiAobmVpZ2hfbm9kZSA9PSBOVUxMKSkgeworCisJCWJhdF9kYmcoREJHX1JPVVRFUywgIkRlbGV0aW5nIHJvdXRlIHRvd2FyZHM6ICVwTVxuIiwKKwkJCW9yaWdfbm9kZS0+b3JpZyk7CisJCWhuYV9nbG9iYWxfZGVsX29yaWcob3JpZ19ub2RlLCAib3JpZ2luYXRvciB0aW1lZCBvdXQiKTsKKworCQkvKiByb3V0ZSBhZGRlZCAqLworCX0gZWxzZSBpZiAoKG9yaWdfbm9kZS0+cm91dGVyID09IE5VTEwpICYmIChuZWlnaF9ub2RlICE9IE5VTEwpKSB7CisKKwkJYmF0X2RiZyhEQkdfUk9VVEVTLAorCQkJIkFkZGluZyByb3V0ZSB0b3dhcmRzOiAlcE0gKHZpYSAlcE0pXG4iLAorCQkJb3JpZ19ub2RlLT5vcmlnLCBuZWlnaF9ub2RlLT5hZGRyKTsKKwkJaG5hX2dsb2JhbF9hZGRfb3JpZyhvcmlnX25vZGUsIGhuYV9idWZmLCBobmFfYnVmZl9sZW4pOworCisJCS8qIHJvdXRlIGNoYW5nZWQgKi8KKwl9IGVsc2UgeworCQliYXRfZGJnKERCR19ST1VURVMsICJDaGFuZ2luZyByb3V0ZSB0b3dhcmRzOiAlcE0gKG5vdyB2aWEgJXBNIC0gd2FzIHZpYSAlcE0pXG4iLCBvcmlnX25vZGUtPm9yaWcsIG5laWdoX25vZGUtPmFkZHIsIG9yaWdfbm9kZS0+cm91dGVyLT5hZGRyKTsKKwl9CisKKwlpZiAobmVpZ2hfbm9kZSAhPSBOVUxMKQorCQlvcmlnX25vZGUtPmJhdG1hbl9pZiA9IG5laWdoX25vZGUtPmlmX2luY29taW5nOworCWVsc2UKKwkJb3JpZ19ub2RlLT5iYXRtYW5faWYgPSBOVUxMOworCisJb3JpZ19ub2RlLT5yb3V0ZXIgPSBuZWlnaF9ub2RlOworfQorCisKK3ZvaWQgdXBkYXRlX3JvdXRlcyhzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCisJCQkgIHN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlLAorCQkJICB1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwgaW50IGhuYV9idWZmX2xlbikKK3sKIAogCWlmIChvcmlnX25vZGUgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JaWYgKG9yaWdfbm9kZS0+cm91dGVyICE9IG5laWdoX25vZGUpIHsKLQkJYWRkcl90b19zdHJpbmcob3JpZ19zdHIsIG9yaWdfbm9kZS0+b3JpZyk7Ci0KLQkJLyogcm91dGUgZGVsZXRlZCAqLwotCQlpZiAoKG9yaWdfbm9kZS0+cm91dGVyICE9IE5VTEwpICYmIChuZWlnaF9ub2RlID09IE5VTEwpKSB7Ci0KLQkJCWRlYnVnX2xvZyhMT0dfVFlQRV9ST1VURVMsICJEZWxldGluZyByb3V0ZSB0b3dhcmRzOiAlc1xuIiwgb3JpZ19zdHIpOwotCQkJaG5hX2dsb2JhbF9kZWxfb3JpZyhvcmlnX25vZGUsICJvcmlnaW5hdG9yIHRpbWVkIG91dCIpOwotCi0JCS8qIHJvdXRlIGFkZGVkICovCi0JCX0gZWxzZSBpZiAoKG9yaWdfbm9kZS0+cm91dGVyID09IE5VTEwpICYmIChuZWlnaF9ub2RlICE9IE5VTEwpKSB7Ci0KLQkJCWFkZHJfdG9fc3RyaW5nKG5laWdoX3N0ciwgbmVpZ2hfbm9kZS0+YWRkcik7Ci0JCQlkZWJ1Z19sb2coTE9HX1RZUEVfUk9VVEVTLCAiQWRkaW5nIHJvdXRlIHRvd2FyZHM6ICVzICh2aWEgJXMpXG4iLCBvcmlnX3N0ciwgbmVpZ2hfc3RyKTsKLQkJCWhuYV9nbG9iYWxfYWRkX29yaWcob3JpZ19ub2RlLCBobmFfYnVmZiwgaG5hX2J1ZmZfbGVuKTsKLQotCQkvKiByb3V0ZSBjaGFuZ2VkICovCi0JCX0gZWxzZSB7Ci0KLQkJCWFkZHJfdG9fc3RyaW5nKG5laWdoX3N0ciwgbmVpZ2hfbm9kZS0+YWRkcik7Ci0JCQlhZGRyX3RvX3N0cmluZyhyb3V0ZXJfc3RyLCBvcmlnX25vZGUtPnJvdXRlci0+YWRkcik7Ci0JCQlkZWJ1Z19sb2coTE9HX1RZUEVfUk9VVEVTLCAiQ2hhbmdpbmcgcm91dGUgdG93YXJkczogJXMgKG5vdyB2aWEgJXMgLSB3YXMgdmlhICVzKVxuIiwgb3JpZ19zdHIsIG5laWdoX3N0ciwgcm91dGVyX3N0cik7Ci0KLQkJfQotCi0JCWlmIChuZWlnaF9ub2RlICE9IE5VTEwpCi0JCQlvcmlnX25vZGUtPmJhdG1hbl9pZiA9IG5laWdoX25vZGUtPmlmX2luY29taW5nOwotCQllbHNlCi0JCQlvcmlnX25vZGUtPmJhdG1hbl9pZiA9IE5VTEw7Ci0KLQkJb3JpZ19ub2RlLT5yb3V0ZXIgPSBuZWlnaF9ub2RlOwotCisJaWYgKG9yaWdfbm9kZS0+cm91dGVyICE9IG5laWdoX25vZGUpCisJCXVwZGF0ZV9yb3V0ZShvcmlnX25vZGUsIG5laWdoX25vZGUsIGhuYV9idWZmLCBobmFfYnVmZl9sZW4pOwogCS8qIG1heSBiZSBqdXN0IEhOQSBjaGFuZ2VkICovCi0JfSBlbHNlIHsKLQotCQlpZiAoKGhuYV9idWZmX2xlbiAhPSBvcmlnX25vZGUtPmhuYV9idWZmX2xlbikgfHwgKChobmFfYnVmZl9sZW4gPiAwKSAmJiAob3JpZ19ub2RlLT5obmFfYnVmZl9sZW4gPiAwKSAmJiAobWVtY21wKG9yaWdfbm9kZS0+aG5hX2J1ZmYsIGhuYV9idWZmLCBobmFfYnVmZl9sZW4pICE9IDApKSkgewotCi0JCQlpZiAob3JpZ19ub2RlLT5obmFfYnVmZl9sZW4gPiAwKQotCQkJCWhuYV9nbG9iYWxfZGVsX29yaWcob3JpZ19ub2RlLCAib3JpZ2luYXRvciBjaGFuZ2VkIGhuYSIpOwotCi0JCQlpZiAoKGhuYV9idWZmX2xlbiA+IDApICYmIChobmFfYnVmZiAhPSBOVUxMKSkKLQkJCQlobmFfZ2xvYmFsX2FkZF9vcmlnKG9yaWdfbm9kZSwgaG5hX2J1ZmYsIGhuYV9idWZmX2xlbik7Ci0KLQkJfQotCi0JfQorCWVsc2UKKwkJdXBkYXRlX0hOQShvcmlnX25vZGUsIGhuYV9idWZmLCBobmFfYnVmZl9sZW4pOwogfQogCi1zdGF0aWMgaW50IGlzQmlkaXJlY3Rpb25hbE5laWdoKHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwgc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19uZWlnaF9ub2RlLCBzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCwgc3RydWN0IGJhdG1hbl9pZiAqaWZfaW5jb21pbmcpCitzdGF0aWMgaW50IGlzQmlkaXJlY3Rpb25hbE5laWdoKHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwKKwkJCQlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25laWdoX25vZGUsCisJCQkJc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQsCisJCQkJc3RydWN0IGJhdG1hbl9pZiAqaWZfaW5jb21pbmcpCiB7CiAJc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGUgPSBOVUxMLCAqdG1wX25laWdoX25vZGUgPSBOVUxMOwotCWNoYXIgb3JpZ19zdHJbRVRIX1NUUl9MRU5dLCBuZWlnaF9zdHJbRVRIX1NUUl9MRU5dOwogCXVuc2lnbmVkIGNoYXIgdG90YWxfY291bnQ7CiAKLQlhZGRyX3RvX3N0cmluZyhvcmlnX3N0ciwgb3JpZ19ub2RlLT5vcmlnKTsKLQlhZGRyX3RvX3N0cmluZyhuZWlnaF9zdHIsIG9yaWdfbmVpZ2hfbm9kZS0+b3JpZyk7Ci0KIAlpZiAob3JpZ19ub2RlID09IG9yaWdfbmVpZ2hfbm9kZSkgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcF9uZWlnaF9ub2RlLCAmb3JpZ19ub2RlLT5uZWlnaF9saXN0LCBsaXN0KSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wX25laWdoX25vZGUsCisJCQkJICAgICZvcmlnX25vZGUtPm5laWdoX2xpc3QsCisJCQkJICAgIGxpc3QpIHsKIAotCQkJaWYgKGNvbXBhcmVfb3JpZyh0bXBfbmVpZ2hfbm9kZS0+YWRkciwgb3JpZ19uZWlnaF9ub2RlLT5vcmlnKSAmJiAodG1wX25laWdoX25vZGUtPmlmX2luY29taW5nID09IGlmX2luY29taW5nKSkKKwkJCWlmIChjb21wYXJlX29yaWcodG1wX25laWdoX25vZGUtPmFkZHIsCisJCQkJCSBvcmlnX25laWdoX25vZGUtPm9yaWcpICYmCisJCQkgICAgKHRtcF9uZWlnaF9ub2RlLT5pZl9pbmNvbWluZyA9PSBpZl9pbmNvbWluZykpCiAJCQkJbmVpZ2hfbm9kZSA9IHRtcF9uZWlnaF9ub2RlOwogCQl9CiAKLQkJaWYgKG5laWdoX25vZGUgPT0gTlVMTCkKLQkJCW5laWdoX25vZGUgPSBjcmVhdGVfbmVpZ2hib3Iob3JpZ19ub2RlLCBvcmlnX25laWdoX25vZGUsIG9yaWdfbmVpZ2hfbm9kZS0+b3JpZywgaWZfaW5jb21pbmcpOworCQlpZiAoIW5laWdoX25vZGUpCisJCQluZWlnaF9ub2RlID0gY3JlYXRlX25laWdoYm9yKG9yaWdfbm9kZSwKKwkJCQkJCSAgICAgb3JpZ19uZWlnaF9ub2RlLAorCQkJCQkJICAgICBvcmlnX25laWdoX25vZGUtPm9yaWcsCisJCQkJCQkgICAgIGlmX2luY29taW5nKTsKKwkJLyogY3JlYXRlX25laWdoYm9yIGZhaWxlZCwgcmV0dXJuIDAgKi8KKwkJaWYgKCFuZWlnaF9ub2RlKQorCQkJcmV0dXJuIDA7CiAKIAkJbmVpZ2hfbm9kZS0+bGFzdF92YWxpZCA9IGppZmZpZXM7CiAJfSBlbHNlIHsKIAkJLyogZmluZCBwYWNrZXQgY291bnQgb2YgY29ycmVzcG9uZGluZyBvbmUgaG9wIG5laWdoYm9yICovCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wX25laWdoX25vZGUsICZvcmlnX25laWdoX25vZGUtPm5laWdoX2xpc3QsIGxpc3QpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXBfbmVpZ2hfbm9kZSwKKwkJCQkgICAgJm9yaWdfbmVpZ2hfbm9kZS0+bmVpZ2hfbGlzdCwgbGlzdCkgewogCi0JCQlpZiAoY29tcGFyZV9vcmlnKHRtcF9uZWlnaF9ub2RlLT5hZGRyLCBvcmlnX25laWdoX25vZGUtPm9yaWcpICYmICh0bXBfbmVpZ2hfbm9kZS0+aWZfaW5jb21pbmcgPT0gaWZfaW5jb21pbmcpKQorCQkJaWYgKGNvbXBhcmVfb3JpZyh0bXBfbmVpZ2hfbm9kZS0+YWRkciwKKwkJCQkJIG9yaWdfbmVpZ2hfbm9kZS0+b3JpZykgJiYKKwkJCSAgICAodG1wX25laWdoX25vZGUtPmlmX2luY29taW5nID09IGlmX2luY29taW5nKSkKIAkJCQluZWlnaF9ub2RlID0gdG1wX25laWdoX25vZGU7CiAJCX0KIAotCQlpZiAobmVpZ2hfbm9kZSA9PSBOVUxMKQotCQkJbmVpZ2hfbm9kZSA9IGNyZWF0ZV9uZWlnaGJvcihvcmlnX25laWdoX25vZGUsIG9yaWdfbmVpZ2hfbm9kZSwgb3JpZ19uZWlnaF9ub2RlLT5vcmlnLCBpZl9pbmNvbWluZyk7CisJCWlmICghbmVpZ2hfbm9kZSkKKwkJCW5laWdoX25vZGUgPSBjcmVhdGVfbmVpZ2hib3Iob3JpZ19uZWlnaF9ub2RlLAorCQkJCQkJICAgICBvcmlnX25laWdoX25vZGUsCisJCQkJCQkgICAgIG9yaWdfbmVpZ2hfbm9kZS0+b3JpZywKKwkJCQkJCSAgICAgaWZfaW5jb21pbmcpOworCQkvKiBjcmVhdGVfbmVpZ2hib3IgZmFpbGVkLCByZXR1cm4gMCAqLworCQlpZiAoIW5laWdoX25vZGUpCisJCQlyZXR1cm4gMDsKIAl9CiAKIAlvcmlnX25vZGUtPmxhc3RfdmFsaWQgPSBqaWZmaWVzOwogCiAJLyogcGF5IGF0dGVudGlvbiB0byBub3QgZ2V0IGEgdmFsdWUgYmlnZ2VyIHRoYW4gMTAwICUgKi8KLQl0b3RhbF9jb3VudCA9IChvcmlnX25laWdoX25vZGUtPmJjYXN0X293bl9zdW1baWZfaW5jb21pbmctPmlmX251bV0gPiBuZWlnaF9ub2RlLT5yZWFsX3BhY2tldF9jb3VudCA/IG5laWdoX25vZGUtPnJlYWxfcGFja2V0X2NvdW50IDogb3JpZ19uZWlnaF9ub2RlLT5iY2FzdF9vd25fc3VtW2lmX2luY29taW5nLT5pZl9udW1dKTsKKwl0b3RhbF9jb3VudCA9IChvcmlnX25laWdoX25vZGUtPmJjYXN0X293bl9zdW1baWZfaW5jb21pbmctPmlmX251bV0gPgorCQkgICAgICAgbmVpZ2hfbm9kZS0+cmVhbF9wYWNrZXRfY291bnQgPworCQkgICAgICAgbmVpZ2hfbm9kZS0+cmVhbF9wYWNrZXRfY291bnQgOgorCQkgICAgICAgb3JpZ19uZWlnaF9ub2RlLT5iY2FzdF9vd25fc3VtW2lmX2luY29taW5nLT5pZl9udW1dKTsKIAogCS8qIGlmIHdlIGhhdmUgdG9vIGZldyBwYWNrZXRzICh0b28gbGVzcyBkYXRhKSB3ZSBzZXQgdHFfb3duIHRvIHplcm8gKi8KIAkvKiBpZiB3ZSByZWNlaXZlIHRvbyBmZXcgcGFja2V0cyBpdCBpcyBub3QgY29uc2lkZXJlZCBiaWRpcmVjdGlvbmFsICovCi0JaWYgKCh0b3RhbF9jb3VudCA8IFRRX0xPQ0FMX0JJRFJFQ1RfU0VORF9NSU5JTVVNKSB8fCAobmVpZ2hfbm9kZS0+cmVhbF9wYWNrZXRfY291bnQgPCBUUV9MT0NBTF9CSURSRUNUX1JFQ1ZfTUlOSU1VTSkpCisJaWYgKCh0b3RhbF9jb3VudCA8IFRRX0xPQ0FMX0JJRFJFQ1RfU0VORF9NSU5JTVVNKSB8fAorCSAgICAobmVpZ2hfbm9kZS0+cmVhbF9wYWNrZXRfY291bnQgPCBUUV9MT0NBTF9CSURSRUNUX1JFQ1ZfTUlOSU1VTSkpCiAJCW9yaWdfbmVpZ2hfbm9kZS0+dHFfb3duID0gMDsKIAllbHNlCi0JCS8qIG5laWdoX25vZGUtPnJlYWxfcGFja2V0X2NvdW50IGlzIG5ldmVyIHplcm8gYXMgd2Ugb25seSBwdXJnZSBvbGQgaW5mb3JtYXRpb24gd2hlbiBnZXR0aW5nIG5ldyBpbmZvcm1hdGlvbiAqLwotCQlvcmlnX25laWdoX25vZGUtPnRxX293biA9IChUUV9NQVhfVkFMVUUgKiB0b3RhbF9jb3VudCkgLyBuZWlnaF9ub2RlLT5yZWFsX3BhY2tldF9jb3VudDsKKwkJLyogbmVpZ2hfbm9kZS0+cmVhbF9wYWNrZXRfY291bnQgaXMgbmV2ZXIgemVybyBhcyB3ZQorCQkgKiBvbmx5IHB1cmdlIG9sZCBpbmZvcm1hdGlvbiB3aGVuIGdldHRpbmcgbmV3CisJCSAqIGluZm9ybWF0aW9uICovCisJCW9yaWdfbmVpZ2hfbm9kZS0+dHFfb3duID0gKFRRX01BWF9WQUxVRSAqIHRvdGFsX2NvdW50KSAvCisJCQluZWlnaF9ub2RlLT5yZWFsX3BhY2tldF9jb3VudDsKIAogCS8qCi0JICogMSAtICgoMS14KSAqKiAzKSwgbm9ybWFsaXplZCB0byBUUV9NQVhfVkFMVUUKLQkgKiB0aGlzIGRvZXMgYWZmZWN0IHRoZSBuZWFybHktc3ltbWV0cmljIGxpbmtzIG9ubHkgYSBsaXR0bGUsCi0JICogYnV0IHB1bmlzaGVzIGFzeW1tZXRyaWMgbGlua3MgbW9yZS4KLQkgKiB0aGlzIHdpbGwgZ2l2ZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgVFFfTUFYX1ZBTFVFCisJICogMSAtICgoMS14KSAqKiAzKSwgbm9ybWFsaXplZCB0byBUUV9NQVhfVkFMVUUgdGhpcyBkb2VzCisJICogYWZmZWN0IHRoZSBuZWFybHktc3ltbWV0cmljIGxpbmtzIG9ubHkgYSBsaXR0bGUsIGJ1dAorCSAqIHB1bmlzaGVzIGFzeW1tZXRyaWMgbGlua3MgbW9yZS4gIFRoaXMgd2lsbCBnaXZlIGEgdmFsdWUKKwkgKiBiZXR3ZWVuIDAgYW5kIFRRX01BWF9WQUxVRQogCSAqLwotCW9yaWdfbmVpZ2hfbm9kZS0+dHFfYXN5bV9wZW5hbHR5ID0gVFFfTUFYX1ZBTFVFIC0gKFRRX01BWF9WQUxVRSAqCi0JCQkoVFFfTE9DQUxfV0lORE9XX1NJWkUgLSBuZWlnaF9ub2RlLT5yZWFsX3BhY2tldF9jb3VudCkgKgotCQkJKFRRX0xPQ0FMX1dJTkRPV19TSVpFIC0gbmVpZ2hfbm9kZS0+cmVhbF9wYWNrZXRfY291bnQpICoKLQkJCShUUV9MT0NBTF9XSU5ET1dfU0laRSAtIG5laWdoX25vZGUtPnJlYWxfcGFja2V0X2NvdW50KSkgLwotCQkJKFRRX0xPQ0FMX1dJTkRPV19TSVpFICogVFFfTE9DQUxfV0lORE9XX1NJWkUgKiBUUV9MT0NBTF9XSU5ET1dfU0laRSk7CisJb3JpZ19uZWlnaF9ub2RlLT50cV9hc3ltX3BlbmFsdHkgPQorCQlUUV9NQVhfVkFMVUUgLQorCQkoVFFfTUFYX1ZBTFVFICoKKwkJIChUUV9MT0NBTF9XSU5ET1dfU0laRSAtIG5laWdoX25vZGUtPnJlYWxfcGFja2V0X2NvdW50KSAqCisJCSAoVFFfTE9DQUxfV0lORE9XX1NJWkUgLSBuZWlnaF9ub2RlLT5yZWFsX3BhY2tldF9jb3VudCkgKgorCQkgKFRRX0xPQ0FMX1dJTkRPV19TSVpFIC0gbmVpZ2hfbm9kZS0+cmVhbF9wYWNrZXRfY291bnQpKSAvCisJCShUUV9MT0NBTF9XSU5ET1dfU0laRSAqCisJCSBUUV9MT0NBTF9XSU5ET1dfU0laRSAqCisJCSBUUV9MT0NBTF9XSU5ET1dfU0laRSk7CiAKLQliYXRtYW5fcGFja2V0LT50cSA9ICgoYmF0bWFuX3BhY2tldC0+dHEgKiBvcmlnX25laWdoX25vZGUtPnRxX293biAqIG9yaWdfbmVpZ2hfbm9kZS0+dHFfYXN5bV9wZW5hbHR5KSAvIChUUV9NQVhfVkFMVUUgKiAgVFFfTUFYX1ZBTFVFKSk7CisJYmF0bWFuX3BhY2tldC0+dHEgPSAoKGJhdG1hbl9wYWNrZXQtPnRxICoKKwkJCSAgICAgIG9yaWdfbmVpZ2hfbm9kZS0+dHFfb3duICoKKwkJCSAgICAgIG9yaWdfbmVpZ2hfbm9kZS0+dHFfYXN5bV9wZW5hbHR5KSAvCisJCQkgICAgIChUUV9NQVhfVkFMVUUgKgkgVFFfTUFYX1ZBTFVFKSk7CiAKLQlkZWJ1Z19sb2coTE9HX1RZUEVfQkFUTUFOLCAiYmlkaXJlY3Rpb25hbDogb3JpZyA9ICUtMTVzIG5laWdoID0gJS0xNXMgPT4gb3duX2JjYXN0ID0gJTJpLCByZWFsIHJlY3YgPSAlMmksIGxvY2FsIHRxOiAlM2ksIGFzeW1fcGVuYWx0eTogJTNpLCB0b3RhbCB0cTogJTNpIFxuIiwKLQkJICBvcmlnX3N0ciwgbmVpZ2hfc3RyLCB0b3RhbF9jb3VudCwgbmVpZ2hfbm9kZS0+cmVhbF9wYWNrZXRfY291bnQsIG9yaWdfbmVpZ2hfbm9kZS0+dHFfb3duLCBvcmlnX25laWdoX25vZGUtPnRxX2FzeW1fcGVuYWx0eSwgYmF0bWFuX3BhY2tldC0+dHEpOworCWJhdF9kYmcoREJHX0JBVE1BTiwgImJpZGlyZWN0aW9uYWw6IG9yaWcgPSAlLTE1cE0gbmVpZ2ggPSAlLTE1cE0gPT4gb3duX2JjYXN0ID0gJTJpLCByZWFsIHJlY3YgPSAlMmksIGxvY2FsIHRxOiAlM2ksIGFzeW1fcGVuYWx0eTogJTNpLCB0b3RhbCB0cTogJTNpIFxuIiwKKwkJb3JpZ19ub2RlLT5vcmlnLCBvcmlnX25laWdoX25vZGUtPm9yaWcsIHRvdGFsX2NvdW50LAorCQluZWlnaF9ub2RlLT5yZWFsX3BhY2tldF9jb3VudCwgb3JpZ19uZWlnaF9ub2RlLT50cV9vd24sCisJCW9yaWdfbmVpZ2hfbm9kZS0+dHFfYXN5bV9wZW5hbHR5LCBiYXRtYW5fcGFja2V0LT50cSk7CiAKLQkvKiBpZiBsaW5rIGhhcyB0aGUgbWluaW11bSByZXF1aXJlZCB0cmFuc21pc3Npb24gcXVhbGl0eSBjb25zaWRlciBpdCBiaWRpcmVjdGlvbmFsICovCisJLyogaWYgbGluayBoYXMgdGhlIG1pbmltdW0gcmVxdWlyZWQgdHJhbnNtaXNzaW9uIHF1YWxpdHkKKwkgKiBjb25zaWRlciBpdCBiaWRpcmVjdGlvbmFsICovCiAJaWYgKGJhdG1hbl9wYWNrZXQtPnRxID49IFRRX1RPVEFMX0JJRFJFQ1RfTElNSVQpCiAJCXJldHVybiAxOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZV9vcmlnKHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwgc3RydWN0IGV0aGhkciAqZXRoaGRyLCBzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCwgc3RydWN0IGJhdG1hbl9pZiAqaWZfaW5jb21pbmcsIHVuc2lnbmVkIGNoYXIgKmhuYV9idWZmLCBpbnQgaG5hX2J1ZmZfbGVuLCBjaGFyIGlzX2R1cGxpY2F0ZSkKK3N0YXRpYyB2b2lkIHVwZGF0ZV9vcmlnKHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwgc3RydWN0IGV0aGhkciAqZXRoaGRyLAorCQkJc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQsCisJCQlzdHJ1Y3QgYmF0bWFuX2lmICppZl9pbmNvbWluZywKKwkJCXVuc2lnbmVkIGNoYXIgKmhuYV9idWZmLCBpbnQgaG5hX2J1ZmZfbGVuLAorCQkJY2hhciBpc19kdXBsaWNhdGUpCiB7CiAJc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGUgPSBOVUxMLCAqdG1wX25laWdoX25vZGUgPSBOVUxMOwogCWludCB0bXBfaG5hX2J1ZmZfbGVuOwogCi0JZGVidWdfbG9nKExPR19UWVBFX0JBVE1BTiwgInVwZGF0ZV9vcmlnaW5hdG9yKCk6IFNlYXJjaGluZyBhbmQgdXBkYXRpbmcgb3JpZ2luYXRvciBlbnRyeSBvZiByZWNlaXZlZCBwYWNrZXQgXG4iKTsKKwliYXRfZGJnKERCR19CQVRNQU4sICJ1cGRhdGVfb3JpZ2luYXRvcigpOiBTZWFyY2hpbmcgYW5kIHVwZGF0aW5nIG9yaWdpbmF0b3IgZW50cnkgb2YgcmVjZWl2ZWQgcGFja2V0IFxuIik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcF9uZWlnaF9ub2RlLCAmb3JpZ19ub2RlLT5uZWlnaF9saXN0LCBsaXN0KSB7Ci0JCWlmIChjb21wYXJlX29yaWcodG1wX25laWdoX25vZGUtPmFkZHIsIGV0aGhkci0+aF9zb3VyY2UpICYmICh0bXBfbmVpZ2hfbm9kZS0+aWZfaW5jb21pbmcgPT0gaWZfaW5jb21pbmcpKSB7CisJCWlmIChjb21wYXJlX29yaWcodG1wX25laWdoX25vZGUtPmFkZHIsIGV0aGhkci0+aF9zb3VyY2UpICYmCisJCSAgICAodG1wX25laWdoX25vZGUtPmlmX2luY29taW5nID09IGlmX2luY29taW5nKSkgewogCQkJbmVpZ2hfbm9kZSA9IHRtcF9uZWlnaF9ub2RlOwogCQkJY29udGludWU7CiAJCX0KQEAgLTMyNCwxOSArMjQ2LDM0IEBACiAJCWlmIChpc19kdXBsaWNhdGUpCiAJCQljb250aW51ZTsKIAotCQlyaW5nX2J1ZmZlcl9zZXQodG1wX25laWdoX25vZGUtPnRxX3JlY3YsICZ0bXBfbmVpZ2hfbm9kZS0+dHFfaW5kZXgsIDApOwotCQl0bXBfbmVpZ2hfbm9kZS0+dHFfYXZnID0gcmluZ19idWZmZXJfYXZnKHRtcF9uZWlnaF9ub2RlLT50cV9yZWN2KTsKKwkJcmluZ19idWZmZXJfc2V0KHRtcF9uZWlnaF9ub2RlLT50cV9yZWN2LAorCQkJCSZ0bXBfbmVpZ2hfbm9kZS0+dHFfaW5kZXgsIDApOworCQl0bXBfbmVpZ2hfbm9kZS0+dHFfYXZnID0KKwkJCXJpbmdfYnVmZmVyX2F2Zyh0bXBfbmVpZ2hfbm9kZS0+dHFfcmVjdik7CiAJfQogCi0JaWYgKG5laWdoX25vZGUgPT0gTlVMTCkKLQkJbmVpZ2hfbm9kZSA9IGNyZWF0ZV9uZWlnaGJvcihvcmlnX25vZGUsIGdldF9vcmlnX25vZGUoZXRoaGRyLT5oX3NvdXJjZSksIGV0aGhkci0+aF9zb3VyY2UsIGlmX2luY29taW5nKTsKLQllbHNlCi0JCWRlYnVnX2xvZyhMT0dfVFlQRV9CQVRNQU4sICJVcGRhdGluZyBleGlzdGluZyBsYXN0LWhvcCBuZWlnaGJvdXIgb2Ygb3JpZ2luYXRvclxuIik7CisJaWYgKCFuZWlnaF9ub2RlKSB7CisJCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfdG1wOworCisJCW9yaWdfdG1wID0gZ2V0X29yaWdfbm9kZShldGhoZHItPmhfc291cmNlKTsKKwkJaWYgKCFvcmlnX3RtcCkKKwkJCXJldHVybjsKKworCQluZWlnaF9ub2RlID0gY3JlYXRlX25laWdoYm9yKG9yaWdfbm9kZSwKKwkJCQkJICAgICBvcmlnX3RtcCwKKwkJCQkJICAgICBldGhoZHItPmhfc291cmNlLCBpZl9pbmNvbWluZyk7CisJCWlmICghbmVpZ2hfbm9kZSkKKwkJCXJldHVybjsKKwl9IGVsc2UKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLAorCQkJIlVwZGF0aW5nIGV4aXN0aW5nIGxhc3QtaG9wIG5laWdoYm9yIG9mIG9yaWdpbmF0b3JcbiIpOwogCiAJb3JpZ19ub2RlLT5mbGFncyA9IGJhdG1hbl9wYWNrZXQtPmZsYWdzOwogCW5laWdoX25vZGUtPmxhc3RfdmFsaWQgPSBqaWZmaWVzOwogCi0JcmluZ19idWZmZXJfc2V0KG5laWdoX25vZGUtPnRxX3JlY3YsICZuZWlnaF9ub2RlLT50cV9pbmRleCwgYmF0bWFuX3BhY2tldC0+dHEpOworCXJpbmdfYnVmZmVyX3NldChuZWlnaF9ub2RlLT50cV9yZWN2LAorCQkJJm5laWdoX25vZGUtPnRxX2luZGV4LAorCQkJYmF0bWFuX3BhY2tldC0+dHEpOwogCW5laWdoX25vZGUtPnRxX2F2ZyA9IHJpbmdfYnVmZmVyX2F2ZyhuZWlnaF9ub2RlLT50cV9yZWN2KTsKIAogCWlmICghaXNfZHVwbGljYXRlKSB7CkBAIC0zNDQsOSArMjgxLDExIEBACiAJCW5laWdoX25vZGUtPmxhc3RfdHRsID0gYmF0bWFuX3BhY2tldC0+dHRsOwogCX0KIAotCXRtcF9obmFfYnVmZl9sZW4gPSAoaG5hX2J1ZmZfbGVuID4gYmF0bWFuX3BhY2tldC0+bnVtX2huYSAqIEVUSF9BTEVOID8gYmF0bWFuX3BhY2tldC0+bnVtX2huYSAqIEVUSF9BTEVOIDogaG5hX2J1ZmZfbGVuKTsKKwl0bXBfaG5hX2J1ZmZfbGVuID0gKGhuYV9idWZmX2xlbiA+IGJhdG1hbl9wYWNrZXQtPm51bV9obmEgKiBFVEhfQUxFTiA/CisJCQkgICAgYmF0bWFuX3BhY2tldC0+bnVtX2huYSAqIEVUSF9BTEVOIDogaG5hX2J1ZmZfbGVuKTsKIAotCS8qIGlmIHRoaXMgbmVpZ2hib3IgYWxyZWFkeSBpcyBvdXIgbmV4dCBob3AgdGhlcmUgaXMgbm90aGluZyB0byBjaGFuZ2UgKi8KKwkvKiBpZiB0aGlzIG5laWdoYm9yIGFscmVhZHkgaXMgb3VyIG5leHQgaG9wIHRoZXJlIGlzIG5vdGhpbmcKKwkgKiB0byBjaGFuZ2UgKi8KIAlpZiAob3JpZ19ub2RlLT5yb3V0ZXIgPT0gbmVpZ2hfbm9kZSkKIAkJZ290byB1cGRhdGVfaG5hOwogCkBAIC0zNTUsMTEgKzI5NCwxMiBAQAogCSAgICAob3JpZ19ub2RlLT5yb3V0ZXItPnRxX2F2ZyA+IG5laWdoX25vZGUtPnRxX2F2ZykpCiAJCWdvdG8gdXBkYXRlX2huYTsKIAotCS8qIGlmIHRoZSBUUSBpcyB0aGUgc2FtZSBhbmQgdGhlIGxpbmsgbm90IG1vcmUgc3ltZXRyaWMgd2Ugd29uJ3QgY29uc2lkZXIgaXQgZWl0aGVyICovCisJLyogaWYgdGhlIFRRIGlzIHRoZSBzYW1lIGFuZCB0aGUgbGluayBub3QgbW9yZSBzeW1ldHJpYyB3ZQorCSAqIHdvbid0IGNvbnNpZGVyIGl0IGVpdGhlciAqLwogCWlmICgob3JpZ19ub2RlLT5yb3V0ZXIpICYmCiAJICAgICAoKG5laWdoX25vZGUtPnRxX2F2ZyA9PSBvcmlnX25vZGUtPnJvdXRlci0+dHFfYXZnKSAmJgotCSAgICAgKG9yaWdfbm9kZS0+cm91dGVyLT5vcmlnX25vZGUtPmJjYXN0X293bl9zdW1baWZfaW5jb21pbmctPmlmX251bV0gPj0KLQkgICAgICBuZWlnaF9ub2RlLT5vcmlnX25vZGUtPmJjYXN0X293bl9zdW1baWZfaW5jb21pbmctPmlmX251bV0pKSkKKwkgICAgIChvcmlnX25vZGUtPnJvdXRlci0+b3JpZ19ub2RlLT5iY2FzdF9vd25fc3VtW2lmX2luY29taW5nLT5pZl9udW1dCisJICAgICAgPj0gbmVpZ2hfbm9kZS0+b3JpZ19ub2RlLT5iY2FzdF9vd25fc3VtW2lmX2luY29taW5nLT5pZl9udW1dKSkpCiAJCWdvdG8gdXBkYXRlX2huYTsKIAogCXVwZGF0ZV9yb3V0ZXMob3JpZ19ub2RlLCBuZWlnaF9ub2RlLCBobmFfYnVmZiwgdG1wX2huYV9idWZmX2xlbik7CkBAIC0zNjcsNjAgKzMwNyw3MiBAQAogCiB1cGRhdGVfaG5hOgogCXVwZGF0ZV9yb3V0ZXMob3JpZ19ub2RlLCBvcmlnX25vZGUtPnJvdXRlciwgaG5hX2J1ZmYsIHRtcF9obmFfYnVmZl9sZW4pOwotCXJldHVybjsKIH0KIAotc3RhdGljIGNoYXIgY291bnRfcmVhbF9wYWNrZXRzKHN0cnVjdCBldGhoZHIgKmV0aGhkciwgc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQsIHN0cnVjdCBiYXRtYW5faWYgKmlmX2luY29taW5nKQorc3RhdGljIGNoYXIgY291bnRfcmVhbF9wYWNrZXRzKHN0cnVjdCBldGhoZHIgKmV0aGhkciwKKwkJCSAgICAgICBzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCwKKwkJCSAgICAgICBzdHJ1Y3QgYmF0bWFuX2lmICppZl9pbmNvbWluZykKIHsKIAlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7CiAJc3RydWN0IG5laWdoX25vZGUgKnRtcF9uZWlnaF9ub2RlOwogCWNoYXIgaXNfZHVwbGljYXRlID0gMDsKLQorCXVpbnQxNl90IHNlcV9kaWZmOwogCiAJb3JpZ19ub2RlID0gZ2V0X29yaWdfbm9kZShiYXRtYW5fcGFja2V0LT5vcmlnKTsKIAlpZiAob3JpZ19ub2RlID09IE5VTEwpCiAJCXJldHVybiAwOwogCi0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcF9uZWlnaF9ub2RlLCAmb3JpZ19ub2RlLT5uZWlnaF9saXN0LCBsaXN0KSB7CiAKIAkJaWYgKCFpc19kdXBsaWNhdGUpCi0JCQlpc19kdXBsaWNhdGUgPSBnZXRfYml0X3N0YXR1cyh0bXBfbmVpZ2hfbm9kZS0+cmVhbF9iaXRzLCBvcmlnX25vZGUtPmxhc3RfcmVhbF9zZXFubywgYmF0bWFuX3BhY2tldC0+c2Vxbm8pOwotCi0JCWlmIChjb21wYXJlX29yaWcodG1wX25laWdoX25vZGUtPmFkZHIsIGV0aGhkci0+aF9zb3VyY2UpICYmICh0bXBfbmVpZ2hfbm9kZS0+aWZfaW5jb21pbmcgPT0gaWZfaW5jb21pbmcpKQotCQkJYml0X2dldF9wYWNrZXQodG1wX25laWdoX25vZGUtPnJlYWxfYml0cywgYmF0bWFuX3BhY2tldC0+c2Vxbm8gLSBvcmlnX25vZGUtPmxhc3RfcmVhbF9zZXFubywgMSk7CisJCQlpc19kdXBsaWNhdGUgPQorCQkJCWdldF9iaXRfc3RhdHVzKHRtcF9uZWlnaF9ub2RlLT5yZWFsX2JpdHMsCisJCQkJCSAgICAgICBvcmlnX25vZGUtPmxhc3RfcmVhbF9zZXFubywKKwkJCQkJICAgICAgIGJhdG1hbl9wYWNrZXQtPnNlcW5vKTsKKwkJc2VxX2RpZmYgPSBiYXRtYW5fcGFja2V0LT5zZXFubyAtIG9yaWdfbm9kZS0+bGFzdF9yZWFsX3NlcW5vOworCQlpZiAoY29tcGFyZV9vcmlnKHRtcF9uZWlnaF9ub2RlLT5hZGRyLCBldGhoZHItPmhfc291cmNlKSAmJgorCQkgICAgKHRtcF9uZWlnaF9ub2RlLT5pZl9pbmNvbWluZyA9PSBpZl9pbmNvbWluZykpCisJCQliaXRfZ2V0X3BhY2tldCh0bXBfbmVpZ2hfbm9kZS0+cmVhbF9iaXRzLCBzZXFfZGlmZiwgMSk7CiAJCWVsc2UKLQkJCWJpdF9nZXRfcGFja2V0KHRtcF9uZWlnaF9ub2RlLT5yZWFsX2JpdHMsIGJhdG1hbl9wYWNrZXQtPnNlcW5vIC0gb3JpZ19ub2RlLT5sYXN0X3JlYWxfc2Vxbm8sIDApOworCQkJYml0X2dldF9wYWNrZXQodG1wX25laWdoX25vZGUtPnJlYWxfYml0cywgc2VxX2RpZmYsIDApOwogCi0JCXRtcF9uZWlnaF9ub2RlLT5yZWFsX3BhY2tldF9jb3VudCA9IGJpdF9wYWNrZXRfY291bnQodG1wX25laWdoX25vZGUtPnJlYWxfYml0cyk7CisJCXRtcF9uZWlnaF9ub2RlLT5yZWFsX3BhY2tldF9jb3VudCA9CisJCQliaXRfcGFja2V0X2NvdW50KHRtcF9uZWlnaF9ub2RlLT5yZWFsX2JpdHMpOwogCX0KIAogCWlmICghaXNfZHVwbGljYXRlKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9CQVRNQU4sICJ1cGRhdGluZyBsYXN0X3NlcW5vOiBvbGQgJWQsIG5ldyAlZCBcbiIsIG9yaWdfbm9kZS0+bGFzdF9yZWFsX3NlcW5vLCBiYXRtYW5fcGFja2V0LT5zZXFubyk7CisJCWJhdF9kYmcoREJHX0JBVE1BTiwgInVwZGF0aW5nIGxhc3Rfc2Vxbm86IG9sZCAlZCwgbmV3ICVkIFxuIiwKKwkJCW9yaWdfbm9kZS0+bGFzdF9yZWFsX3NlcW5vLCBiYXRtYW5fcGFja2V0LT5zZXFubyk7CiAJCW9yaWdfbm9kZS0+bGFzdF9yZWFsX3NlcW5vID0gYmF0bWFuX3BhY2tldC0+c2Vxbm87CiAJfQogCiAJcmV0dXJuIGlzX2R1cGxpY2F0ZTsKIH0KIAotdm9pZCByZWNlaXZlX2JhdF9wYWNrZXQoc3RydWN0IGV0aGhkciAqZXRoaGRyLCBzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCwgdW5zaWduZWQgY2hhciAqaG5hX2J1ZmYsIGludCBobmFfYnVmZl9sZW4sIHN0cnVjdCBiYXRtYW5faWYgKmlmX2luY29taW5nKQordm9pZCByZWNlaXZlX2JhdF9wYWNrZXQoc3RydWN0IGV0aGhkciAqZXRoaGRyLAorCQkJCXN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0LAorCQkJCXVuc2lnbmVkIGNoYXIgKmhuYV9idWZmLCBpbnQgaG5hX2J1ZmZfbGVuLAorCQkJCXN0cnVjdCBiYXRtYW5faWYgKmlmX2luY29taW5nKQogewogCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZjsKIAlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25laWdoX25vZGUsICpvcmlnX25vZGU7Ci0JY2hhciBvcmlnX3N0cltFVEhfU1RSX0xFTl0sIHByZXZfc2VuZGVyX3N0cltFVEhfU1RSX0xFTl0sIG5laWdoX3N0cltFVEhfU1RSX0xFTl07CiAJY2hhciBoYXNfZGlyZWN0bGlua19mbGFnOwotCWNoYXIgaXNfbXlfYWRkciA9IDAsIGlzX215X29yaWcgPSAwLCBpc19teV9vbGRvcmlnID0gMCwgaXNfYnJvYWRjYXN0ID0gMCwgaXNfYmlkaXJlY3Rpb25hbCwgaXNfc2luZ2xlX2hvcF9uZWlnaCwgaXNfZHVwbGljYXRlOworCWNoYXIgaXNfbXlfYWRkciA9IDAsIGlzX215X29yaWcgPSAwLCBpc19teV9vbGRvcmlnID0gMDsKKwljaGFyIGlzX2Jyb2FkY2FzdCA9IDAsIGlzX2JpZGlyZWN0aW9uYWwsIGlzX3NpbmdsZV9ob3BfbmVpZ2g7CisJY2hhciBpc19kdXBsaWNhdGU7CiAJdW5zaWduZWQgc2hvcnQgaWZfaW5jb21pbmdfc2Vxbm87CiAKLQkvKiBTaWxlbnRseSBkcm9wIHdoZW4gdGhlIGJhdG1hbiBwYWNrZXQgaXMgYWN0dWFsbHkgbm90IGEgY29ycmVjdCBwYWNrZXQuCisJLyogU2lsZW50bHkgZHJvcCB3aGVuIHRoZSBiYXRtYW4gcGFja2V0IGlzIGFjdHVhbGx5IG5vdCBhCisJICogY29ycmVjdCBwYWNrZXQuCiAJICoKIAkgKiBUaGlzIG1pZ2h0IGhhcHBlbiBpZiBhIHBhY2tldCBpcyBwYWRkZWQgKGUuZy4gRXRoZXJuZXQgaGFzIGEKIAkgKiBtaW5pbXVtIGZyYW1lIGxlbmd0aCBvZiA2NCBieXRlKSBhbmQgdGhlIGFnZ3JlZ2F0aW9uIGludGVycHJldHMKIAkgKiBpdCBhcyBhbiBhZGRpdGlvbmFsIGxlbmd0aC4KIAkgKgotCSAqIFRPRE86IEEgbW9yZSBzYW5lIHNvbHV0aW9uIHdvdWxkIGJlIHRvIGhhdmUgYSBiaXQgaW4gdGhlIGJhdG1hbl9wYWNrZXQKLQkgKiB0byBkZXRlY3Qgd2hldGhlciB0aGUgcGFja2V0IGlzIHRoZSBsYXN0IHBhY2tldCBpbiBhbiBhZ2dyZWdhdGlvbi4KLQkgKiBIZXJlIHdlIGV4cGVjdCB0aGF0IHRoZSBwYWRkaW5nIGlzIGFsd2F5cyB6ZXJvIChvciBub3QgMHgwMSkKKwkgKiBUT0RPOiBBIG1vcmUgc2FuZSBzb2x1dGlvbiB3b3VsZCBiZSB0byBoYXZlIGEgYml0IGluIHRoZQorCSAqIGJhdG1hbl9wYWNrZXQgdG8gZGV0ZWN0IHdoZXRoZXIgdGhlIHBhY2tldCBpcyB0aGUgbGFzdAorCSAqIHBhY2tldCBpbiBhbiBhZ2dyZWdhdGlvbi4gIEhlcmUgd2UgZXhwZWN0IHRoYXQgdGhlIHBhZGRpbmcKKwkgKiBpcyBhbHdheXMgemVybyAob3Igbm90IDB4MDEpCiAJICovCiAJaWYgKGJhdG1hbl9wYWNrZXQtPnBhY2tldF90eXBlICE9IEJBVF9QQUNLRVQpCiAJCXJldHVybjsKQEAgLTQyOCwyNyArMzgwLDMxIEBACiAJLyogY291bGQgYmUgY2hhbmdlZCBieSBzY2hlZHVsZV9vd25fcGFja2V0KCkgKi8KIAlpZl9pbmNvbWluZ19zZXFubyA9IGF0b21pY19yZWFkKCZpZl9pbmNvbWluZy0+c2Vxbm8pOwogCi0JYWRkcl90b19zdHJpbmcob3JpZ19zdHIsIGJhdG1hbl9wYWNrZXQtPm9yaWcpOwotCWFkZHJfdG9fc3RyaW5nKHByZXZfc2VuZGVyX3N0ciwgYmF0bWFuX3BhY2tldC0+cHJldl9zZW5kZXIpOwotCWFkZHJfdG9fc3RyaW5nKG5laWdoX3N0ciwgZXRoaGRyLT5oX3NvdXJjZSk7Ci0KIAloYXNfZGlyZWN0bGlua19mbGFnID0gKGJhdG1hbl9wYWNrZXQtPmZsYWdzICYgRElSRUNUTElOSyA/IDEgOiAwKTsKIAotCWlzX3NpbmdsZV9ob3BfbmVpZ2ggPSAoY29tcGFyZV9vcmlnKGV0aGhkci0+aF9zb3VyY2UsIGJhdG1hbl9wYWNrZXQtPm9yaWcpID8gMSA6IDApOworCWlzX3NpbmdsZV9ob3BfbmVpZ2ggPSAoY29tcGFyZV9vcmlnKGV0aGhkci0+aF9zb3VyY2UsCisJCQkJCSAgICBiYXRtYW5fcGFja2V0LT5vcmlnKSA/IDEgOiAwKTsKIAotCWRlYnVnX2xvZyhMT0dfVFlQRV9CQVRNQU4sICJSZWNlaXZlZCBCQVRNQU4gcGFja2V0IHZpYSBOQjogJXMsIElGOiAlcyBbJXNdIChmcm9tIE9HOiAlcywgdmlhIHByZXYgT0c6ICVzLCBzZXFubyAlZCwgdHEgJWQsIFRUTCAlZCwgViAlZCwgSURGICVkKSBcbiIsIG5laWdoX3N0ciwgaWZfaW5jb21pbmctPmRldiwgaWZfaW5jb21pbmctPmFkZHJfc3RyLCBvcmlnX3N0ciwgcHJldl9zZW5kZXJfc3RyLCBiYXRtYW5fcGFja2V0LT5zZXFubywgYmF0bWFuX3BhY2tldC0+dHEsIGJhdG1hbl9wYWNrZXQtPnR0bCwgYmF0bWFuX3BhY2tldC0+dmVyc2lvbiwgaGFzX2RpcmVjdGxpbmtfZmxhZyk7CisJYmF0X2RiZyhEQkdfQkFUTUFOLCAiUmVjZWl2ZWQgQkFUTUFOIHBhY2tldCB2aWEgTkI6ICVwTSwgSUY6ICVzIFslc10gKGZyb20gT0c6ICVwTSwgdmlhIHByZXYgT0c6ICVwTSwgc2Vxbm8gJWQsIHRxICVkLCBUVEwgJWQsIFYgJWQsIElERiAlZCkgXG4iLAorCQlldGhoZHItPmhfc291cmNlLCBpZl9pbmNvbWluZy0+ZGV2LCBpZl9pbmNvbWluZy0+YWRkcl9zdHIsCisJCWJhdG1hbl9wYWNrZXQtPm9yaWcsIGJhdG1hbl9wYWNrZXQtPnByZXZfc2VuZGVyLAorCQliYXRtYW5fcGFja2V0LT5zZXFubywgYmF0bWFuX3BhY2tldC0+dHEsIGJhdG1hbl9wYWNrZXQtPnR0bCwKKwkJYmF0bWFuX3BhY2tldC0+dmVyc2lvbiwgaGFzX2RpcmVjdGxpbmtfZmxhZyk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShiYXRtYW5faWYsICZpZl9saXN0LCBsaXN0KSB7CiAJCWlmIChiYXRtYW5faWYtPmlmX2FjdGl2ZSAhPSBJRl9BQ1RJVkUpCiAJCQljb250aW51ZTsKIAotCQlpZiAoY29tcGFyZV9vcmlnKGV0aGhkci0+aF9zb3VyY2UsIGJhdG1hbl9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIpKQorCQlpZiAoY29tcGFyZV9vcmlnKGV0aGhkci0+aF9zb3VyY2UsCisJCQkJIGJhdG1hbl9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIpKQogCQkJaXNfbXlfYWRkciA9IDE7CiAKLQkJaWYgKGNvbXBhcmVfb3JpZyhiYXRtYW5fcGFja2V0LT5vcmlnLCBiYXRtYW5faWYtPm5ldF9kZXYtPmRldl9hZGRyKSkKKwkJaWYgKGNvbXBhcmVfb3JpZyhiYXRtYW5fcGFja2V0LT5vcmlnLAorCQkJCSBiYXRtYW5faWYtPm5ldF9kZXYtPmRldl9hZGRyKSkKIAkJCWlzX215X29yaWcgPSAxOwogCi0JCWlmIChjb21wYXJlX29yaWcoYmF0bWFuX3BhY2tldC0+cHJldl9zZW5kZXIsIGJhdG1hbl9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIpKQorCQlpZiAoY29tcGFyZV9vcmlnKGJhdG1hbl9wYWNrZXQtPnByZXZfc2VuZGVyLAorCQkJCSBiYXRtYW5faWYtPm5ldF9kZXYtPmRldl9hZGRyKSkKIAkJCWlzX215X29sZG9yaWcgPSAxOwogCiAJCWlmIChjb21wYXJlX29yaWcoZXRoaGRyLT5oX3NvdXJjZSwgYnJvYWRjYXN0QWRkcikpCkBAIC00NTYsNDQgKzQxMiw2MSBAQAogCX0KIAogCWlmIChiYXRtYW5fcGFja2V0LT52ZXJzaW9uICE9IENPTVBBVF9WRVJTSU9OKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9CQVRNQU4sICJEcm9wIHBhY2tldDogaW5jb21wYXRpYmxlIGJhdG1hbiB2ZXJzaW9uICglaSkgXG4iLCBiYXRtYW5fcGFja2V0LT52ZXJzaW9uKTsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLAorCQkJIkRyb3AgcGFja2V0OiBpbmNvbXBhdGlibGUgYmF0bWFuIHZlcnNpb24gKCVpKVxuIiwKKwkJCWJhdG1hbl9wYWNrZXQtPnZlcnNpb24pOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKGlzX215X2FkZHIpIHsKLQkJZGVidWdfbG9nKExPR19UWVBFX0JBVE1BTiwgIkRyb3AgcGFja2V0OiByZWNlaXZlZCBteSBvd24gYnJvYWRjYXN0IChzZW5kZXI6ICVzKSBcbiIsIG5laWdoX3N0cik7CisJCWJhdF9kYmcoREJHX0JBVE1BTiwKKwkJCSJEcm9wIHBhY2tldDogcmVjZWl2ZWQgbXkgb3duIGJyb2FkY2FzdCAoc2VuZGVyOiAlcE0pXG4iLAorCQkJZXRoaGRyLT5oX3NvdXJjZSk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoaXNfYnJvYWRjYXN0KSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9CQVRNQU4sICJEcm9wIHBhY2tldDogaWdub3JpbmcgYWxsIHBhY2tldHMgd2l0aCBicm9hZGNhc3Qgc291cmNlIGFkZHIgKHNlbmRlcjogJXMpIFxuIiwgbmVpZ2hfc3RyKTsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCAiRHJvcCBwYWNrZXQ6IGlnbm9yaW5nIGFsbCBwYWNrZXRzIHdpdGggYnJvYWRjYXN0IHNvdXJjZSBhZGRyIChzZW5kZXI6ICVwTSkgXG4iLCBldGhoZHItPmhfc291cmNlKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmIChpc19teV9vcmlnKSB7CisJCVRZUEVfT0ZfV09SRCAqd29yZDsKKwkJaW50IG9mZnNldDsKKwogCQlvcmlnX25laWdoX25vZGUgPSBnZXRfb3JpZ19ub2RlKGV0aGhkci0+aF9zb3VyY2UpOwogCi0JCS8qIG5laWdoYm91ciBoYXMgdG8gaW5kaWNhdGUgZGlyZWN0IGxpbmsgYW5kIGl0IGhhcyB0byBjb21lIHZpYSB0aGUgY29ycmVzcG9uZGluZyBpbnRlcmZhY2UgKi8KLQkJLyogaWYgcmVjZWl2ZWQgc2Vxbm8gZXF1YWxzIGxhc3Qgc2VuZCBzZXFubyBzYXZlIG5ldyBzZXFubyBmb3IgYmlkaXJlY3Rpb25hbCBjaGVjayAqLwotCQlpZiAoaGFzX2RpcmVjdGxpbmtfZmxhZyAmJiBjb21wYXJlX29yaWcoaWZfaW5jb21pbmctPm5ldF9kZXYtPmRldl9hZGRyLCBiYXRtYW5fcGFja2V0LT5vcmlnKSAmJgotCQkJCSAgKGJhdG1hbl9wYWNrZXQtPnNlcW5vIC0gaWZfaW5jb21pbmdfc2Vxbm8gKyAyID09IDApKSB7Ci0JCQliaXRfbWFyaygoVFlQRV9PRl9XT1JEICopJihvcmlnX25laWdoX25vZGUtPmJjYXN0X293bltpZl9pbmNvbWluZy0+aWZfbnVtICogTlVNX1dPUkRTXSksIDApOwotCQkJb3JpZ19uZWlnaF9ub2RlLT5iY2FzdF9vd25fc3VtW2lmX2luY29taW5nLT5pZl9udW1dID0gYml0X3BhY2tldF9jb3VudCgoVFlQRV9PRl9XT1JEICopJihvcmlnX25laWdoX25vZGUtPmJjYXN0X293bltpZl9pbmNvbWluZy0+aWZfbnVtICogTlVNX1dPUkRTXSkpOworCQlpZiAoIW9yaWdfbmVpZ2hfbm9kZSkKKwkJCXJldHVybjsKKworCQkvKiBuZWlnaGJvciBoYXMgdG8gaW5kaWNhdGUgZGlyZWN0IGxpbmsgYW5kIGl0IGhhcyB0bworCQkgKiBjb21lIHZpYSB0aGUgY29ycmVzcG9uZGluZyBpbnRlcmZhY2UgKi8KKwkJLyogaWYgcmVjZWl2ZWQgc2Vxbm8gZXF1YWxzIGxhc3Qgc2VuZCBzZXFubyBzYXZlIG5ldworCQkgKiBzZXFubyBmb3IgYmlkaXJlY3Rpb25hbCBjaGVjayAqLworCQlpZiAoaGFzX2RpcmVjdGxpbmtfZmxhZyAmJgorCQkgICAgY29tcGFyZV9vcmlnKGlmX2luY29taW5nLT5uZXRfZGV2LT5kZXZfYWRkciwKKwkJCQkgYmF0bWFuX3BhY2tldC0+b3JpZykgJiYKKwkJICAgIChiYXRtYW5fcGFja2V0LT5zZXFubyAtIGlmX2luY29taW5nX3NlcW5vICsgMiA9PSAwKSkgeworCQkJb2Zmc2V0ID0gaWZfaW5jb21pbmctPmlmX251bSAqIE5VTV9XT1JEUzsKKwkJCXdvcmQgPSAmKG9yaWdfbmVpZ2hfbm9kZS0+YmNhc3Rfb3duW29mZnNldF0pOworCQkJYml0X21hcmsod29yZCwgMCk7CisJCQlvcmlnX25laWdoX25vZGUtPmJjYXN0X293bl9zdW1baWZfaW5jb21pbmctPmlmX251bV0gPQorCQkJCWJpdF9wYWNrZXRfY291bnQod29yZCk7CiAJCX0KIAotCQlkZWJ1Z19sb2coTE9HX1RZUEVfQkFUTUFOLCAiRHJvcCBwYWNrZXQ6IG9yaWdpbmF0b3IgcGFja2V0IGZyb20gbXlzZWxmICh2aWEgbmVpZ2hib3VyKSBcbiIpOworCQliYXRfZGJnKERCR19CQVRNQU4sICJEcm9wIHBhY2tldDogb3JpZ2luYXRvciBwYWNrZXQgZnJvbSBteXNlbGYgKHZpYSBuZWlnaGJvcikgXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmIChiYXRtYW5fcGFja2V0LT50cSA9PSAwKSB7CiAJCWNvdW50X3JlYWxfcGFja2V0cyhldGhoZHIsIGJhdG1hbl9wYWNrZXQsIGlmX2luY29taW5nKTsKIAotCQlkZWJ1Z19sb2coTE9HX1RZUEVfQkFUTUFOLCAiRHJvcCBwYWNrZXQ6IG9yaWdpbmF0b3IgcGFja2V0IHdpdGggdHEgZXF1YWwgMCBcbiIpOworCQliYXRfZGJnKERCR19CQVRNQU4sICJEcm9wIHBhY2tldDogb3JpZ2luYXRvciBwYWNrZXQgd2l0aCB0cSBlcXVhbCAwIFxuIik7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoaXNfbXlfb2xkb3JpZykgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfQkFUTUFOLCAiRHJvcCBwYWNrZXQ6IGlnbm9yaW5nIGFsbCByZWJyb2FkY2FzdCBlY2hvcyAoc2VuZGVyOiAlcykgXG4iLCBuZWlnaF9zdHIpOworCQliYXRfZGJnKERCR19CQVRNQU4sICJEcm9wIHBhY2tldDogaWdub3JpbmcgYWxsIHJlYnJvYWRjYXN0IGVjaG9zIChzZW5kZXI6ICVwTSkgXG4iLCBldGhoZHItPmhfc291cmNlKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTA0LDUwNyArNDc3LDUwMiBAQAogCQlyZXR1cm47CiAKIAkvKiBhdm9pZCB0ZW1wb3Jhcnkgcm91dGluZyBsb29wcyAqLwotCWlmICgob3JpZ19ub2RlLT5yb3V0ZXIpICYmIChvcmlnX25vZGUtPnJvdXRlci0+b3JpZ19ub2RlLT5yb3V0ZXIpICYmCi0JICAgIChjb21wYXJlX29yaWcob3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIsIGJhdG1hbl9wYWNrZXQtPnByZXZfc2VuZGVyKSkgJiYKKwlpZiAoKG9yaWdfbm9kZS0+cm91dGVyKSAmJgorCSAgICAob3JpZ19ub2RlLT5yb3V0ZXItPm9yaWdfbm9kZS0+cm91dGVyKSAmJgorCSAgICAoY29tcGFyZV9vcmlnKG9yaWdfbm9kZS0+cm91dGVyLT5hZGRyLAorCQkJICBiYXRtYW5fcGFja2V0LT5wcmV2X3NlbmRlcikpICYmCiAJICAgICEoY29tcGFyZV9vcmlnKGJhdG1hbl9wYWNrZXQtPm9yaWcsIGJhdG1hbl9wYWNrZXQtPnByZXZfc2VuZGVyKSkgJiYKLQkgICAgKGNvbXBhcmVfb3JpZyhvcmlnX25vZGUtPnJvdXRlci0+YWRkciwgb3JpZ19ub2RlLT5yb3V0ZXItPm9yaWdfbm9kZS0+cm91dGVyLT5hZGRyKSkpIHsKLQkJZGVidWdfbG9nKExPR19UWVBFX0JBVE1BTiwgIkRyb3AgcGFja2V0OiBpZ25vcmluZyBhbGwgcmVicm9hZGNhc3QgcGFja2V0cyB0aGF0IG1heSBtYWtlIG1lIGxvb3AgKHNlbmRlcjogJXMpIFxuIiwgbmVpZ2hfc3RyKTsKKwkgICAgKGNvbXBhcmVfb3JpZyhvcmlnX25vZGUtPnJvdXRlci0+YWRkciwKKwkJCSAgb3JpZ19ub2RlLT5yb3V0ZXItPm9yaWdfbm9kZS0+cm91dGVyLT5hZGRyKSkpIHsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCAiRHJvcCBwYWNrZXQ6IGlnbm9yaW5nIGFsbCByZWJyb2FkY2FzdCBwYWNrZXRzIHRoYXQgbWF5IG1ha2UgbWUgbG9vcCAoc2VuZGVyOiAlcE0pIFxuIiwgZXRoaGRyLT5oX3NvdXJjZSk7CiAJCXJldHVybjsKIAl9CiAKLQkvKiBpZiBzZW5kZXIgaXMgYSBkaXJlY3QgbmVpZ2hib3IgdGhlIHNlbmRlciBtYWMgZXF1YWxzIG9yaWdpbmF0b3IgbWFjICovCi0Jb3JpZ19uZWlnaF9ub2RlID0gKGlzX3NpbmdsZV9ob3BfbmVpZ2ggPyBvcmlnX25vZGUgOiBnZXRfb3JpZ19ub2RlKGV0aGhkci0+aF9zb3VyY2UpKTsKKwkvKiBpZiBzZW5kZXIgaXMgYSBkaXJlY3QgbmVpZ2hib3IgdGhlIHNlbmRlciBtYWMgZXF1YWxzCisJICogb3JpZ2luYXRvciBtYWMgKi8KKwlvcmlnX25laWdoX25vZGUgPSAoaXNfc2luZ2xlX2hvcF9uZWlnaCA/CisJCQkgICBvcmlnX25vZGUgOiBnZXRfb3JpZ19ub2RlKGV0aGhkci0+aF9zb3VyY2UpKTsKIAlpZiAob3JpZ19uZWlnaF9ub2RlID09IE5VTEwpCiAJCXJldHVybjsKIAotCS8qIGRyb3AgcGFja2V0IGlmIHNlbmRlciBpcyBub3QgYSBkaXJlY3QgbmVpZ2hib3IgYW5kIGlmIHdlIGRvbid0IHJvdXRlIHRvd2FyZHMgaXQgKi8KLQlpZiAoIWlzX3NpbmdsZV9ob3BfbmVpZ2ggJiYgKG9yaWdfbmVpZ2hfbm9kZS0+cm91dGVyID09IE5VTEwpKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9CQVRNQU4sICJEcm9wIHBhY2tldDogT0dNIHZpYSB1bmtub3duIG5laWdoYm9yISBcbiIpOworCS8qIGRyb3AgcGFja2V0IGlmIHNlbmRlciBpcyBub3QgYSBkaXJlY3QgbmVpZ2hib3IgYW5kIGlmIHdlCisJICogZG9uJ3Qgcm91dGUgdG93YXJkcyBpdCAqLworCWlmICghaXNfc2luZ2xlX2hvcF9uZWlnaCAmJgorCSAgICAob3JpZ19uZWlnaF9ub2RlLT5yb3V0ZXIgPT0gTlVMTCkpIHsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCAiRHJvcCBwYWNrZXQ6IE9HTSB2aWEgdW5rbm93biBuZWlnaGJvciFcbiIpOwogCQlyZXR1cm47CiAJfQogCi0JaXNfYmlkaXJlY3Rpb25hbCA9IGlzQmlkaXJlY3Rpb25hbE5laWdoKG9yaWdfbm9kZSwgb3JpZ19uZWlnaF9ub2RlLCBiYXRtYW5fcGFja2V0LCBpZl9pbmNvbWluZyk7CisJaXNfYmlkaXJlY3Rpb25hbCA9IGlzQmlkaXJlY3Rpb25hbE5laWdoKG9yaWdfbm9kZSwgb3JpZ19uZWlnaF9ub2RlLAorCQkJCQkJYmF0bWFuX3BhY2tldCwgaWZfaW5jb21pbmcpOwogCi0JLyogdXBkYXRlIHJhbmtpbmcgaWYgaXQgaXMgbm90IGEgZHVwbGljYXRlIG9yIGhhcyB0aGUgc2FtZSBzZXFubyBhbmQgc2ltaWxhciB0dGwgYXMgdGhlIG5vbi1kdXBsaWNhdGUgKi8KLQlpZiAoaXNfYmlkaXJlY3Rpb25hbCAmJiAoIWlzX2R1cGxpY2F0ZSB8fAotCQkoKG9yaWdfbm9kZS0+bGFzdF9yZWFsX3NlcW5vID09IGJhdG1hbl9wYWNrZXQtPnNlcW5vKSAmJgotCQkJKG9yaWdfbm9kZS0+bGFzdF90dGwgLSAzIDw9IGJhdG1hbl9wYWNrZXQtPnR0bCkpKSkKLQkJdXBkYXRlX29yaWcob3JpZ19ub2RlLCBldGhoZHIsIGJhdG1hbl9wYWNrZXQsIGlmX2luY29taW5nLCBobmFfYnVmZiwgaG5hX2J1ZmZfbGVuLCBpc19kdXBsaWNhdGUpOworCS8qIHVwZGF0ZSByYW5raW5nIGlmIGl0IGlzIG5vdCBhIGR1cGxpY2F0ZSBvciBoYXMgdGhlIHNhbWUKKwkgKiBzZXFubyBhbmQgc2ltaWxhciB0dGwgYXMgdGhlIG5vbi1kdXBsaWNhdGUgKi8KKwlpZiAoaXNfYmlkaXJlY3Rpb25hbCAmJgorCSAgICAoIWlzX2R1cGxpY2F0ZSB8fAorCSAgICAgKChvcmlnX25vZGUtPmxhc3RfcmVhbF9zZXFubyA9PSBiYXRtYW5fcGFja2V0LT5zZXFubykgJiYKKwkgICAgICAob3JpZ19ub2RlLT5sYXN0X3R0bCAtIDMgPD0gYmF0bWFuX3BhY2tldC0+dHRsKSkpKQorCQl1cGRhdGVfb3JpZyhvcmlnX25vZGUsIGV0aGhkciwgYmF0bWFuX3BhY2tldCwKKwkJCSAgICBpZl9pbmNvbWluZywgaG5hX2J1ZmYsIGhuYV9idWZmX2xlbiwgaXNfZHVwbGljYXRlKTsKIAotCS8qIGlzIHNpbmdsZSBob3AgKGRpcmVjdCkgbmVpZ2hib3VyICovCisJLyogaXMgc2luZ2xlIGhvcCAoZGlyZWN0KSBuZWlnaGJvciAqLwogCWlmIChpc19zaW5nbGVfaG9wX25laWdoKSB7CiAKIAkJLyogbWFyayBkaXJlY3QgbGluayBvbiBpbmNvbWluZyBpbnRlcmZhY2UgKi8KLQkJc2NoZWR1bGVfZm9yd2FyZF9wYWNrZXQob3JpZ19ub2RlLCBldGhoZHIsIGJhdG1hbl9wYWNrZXQsIDEsIGhuYV9idWZmX2xlbiwgaWZfaW5jb21pbmcpOworCQlzY2hlZHVsZV9mb3J3YXJkX3BhY2tldChvcmlnX25vZGUsIGV0aGhkciwgYmF0bWFuX3BhY2tldCwKKwkJCQkJMSwgaG5hX2J1ZmZfbGVuLCBpZl9pbmNvbWluZyk7CiAKLQkJZGVidWdfbG9nKExPR19UWVBFX0JBVE1BTiwgIkZvcndhcmRpbmcgcGFja2V0OiByZWJyb2FkY2FzdCBuZWlnaGJvdXIgcGFja2V0IHdpdGggZGlyZWN0IGxpbmsgZmxhZyBcbiIpOworCQliYXRfZGJnKERCR19CQVRNQU4sICJGb3J3YXJkaW5nIHBhY2tldDogcmVicm9hZGNhc3QgbmVpZ2hib3IgcGFja2V0IHdpdGggZGlyZWN0IGxpbmsgZmxhZ1xuIik7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBtdWx0aWhvcCBvcmlnaW5hdG9yICovCiAJaWYgKCFpc19iaWRpcmVjdGlvbmFsKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9CQVRNQU4sICJEcm9wIHBhY2tldDogbm90IHJlY2VpdmVkIHZpYSBiaWRpcmVjdGlvbmFsIGxpbmtcbiIpOworCQliYXRfZGJnKERCR19CQVRNQU4sCisJCQkiRHJvcCBwYWNrZXQ6IG5vdCByZWNlaXZlZCB2aWEgYmlkaXJlY3Rpb25hbCBsaW5rXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmIChpc19kdXBsaWNhdGUpIHsKLQkJZGVidWdfbG9nKExPR19UWVBFX0JBVE1BTiwgIkRyb3AgcGFja2V0OiBkdXBsaWNhdGUgcGFja2V0IHJlY2VpdmVkXG4iKTsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCAiRHJvcCBwYWNrZXQ6IGR1cGxpY2F0ZSBwYWNrZXQgcmVjZWl2ZWRcbiIpOwogCQlyZXR1cm47CiAJfQogCi0JZGVidWdfbG9nKExPR19UWVBFX0JBVE1BTiwgIkZvcndhcmRpbmcgcGFja2V0OiByZWJyb2FkY2FzdCBvcmlnaW5hdG9yIHBhY2tldCBcbiIpOwotCXNjaGVkdWxlX2ZvcndhcmRfcGFja2V0KG9yaWdfbm9kZSwgZXRoaGRyLCBiYXRtYW5fcGFja2V0LCAwLCBobmFfYnVmZl9sZW4sIGlmX2luY29taW5nKTsKKwliYXRfZGJnKERCR19CQVRNQU4sCisJCSJGb3J3YXJkaW5nIHBhY2tldDogcmVicm9hZGNhc3Qgb3JpZ2luYXRvciBwYWNrZXRcbiIpOworCXNjaGVkdWxlX2ZvcndhcmRfcGFja2V0KG9yaWdfbm9kZSwgZXRoaGRyLCBiYXRtYW5fcGFja2V0LAorCQkJCTAsIGhuYV9idWZmX2xlbiwgaWZfaW5jb21pbmcpOwogfQogCi12b2lkIHB1cmdlX29yaWcoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoraW50IHJlY3ZfYmF0X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZikKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X3BvcywgKmxpc3RfcG9zX3RtcDsKLQlzdHJ1Y3QgaGFzaF9pdF90ICpoYXNoaXQgPSBOVUxMOwotCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKLQlzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZSwgKmJlc3RfbmVpZ2hfbm9kZTsKLQljaGFyIG9yaWdfc3RyW0VUSF9TVFJfTEVOXSwgbmVpZ2hfc3RyW0VUSF9TVFJfTEVOXSwgbmVpZ2hfcHVyZ2VkOwotCi0Jc3Bpbl9sb2NrKCZvcmlnX2hhc2hfbG9jayk7Ci0KLQkvKiBmb3IgYWxsIG9yaWdpbnMuLi4gKi8KLQl3aGlsZSAoTlVMTCAhPSAoaGFzaGl0ID0gaGFzaF9pdGVyYXRlKG9yaWdfaGFzaCwgaGFzaGl0KSkpIHsKLQotCQlvcmlnX25vZGUgPSBoYXNoaXQtPmJ1Y2tldC0+ZGF0YTsKLQkJYWRkcl90b19zdHJpbmcob3JpZ19zdHIsIG9yaWdfbm9kZS0+b3JpZyk7Ci0KLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgb3JpZ19ub2RlLT5sYXN0X3ZhbGlkICsgKCgyICogUFVSR0VfVElNRU9VVCAqIEhaKSAvIDEwMDApKSkgewotCi0JCQlkZWJ1Z19sb2coTE9HX1RZUEVfQkFUTUFOLCAiT3JpZ2luYXRvciB0aW1lb3V0OiBvcmlnaW5hdG9yICVzLCBsYXN0X3ZhbGlkICV1IFxuIiwgb3JpZ19zdHIsIChvcmlnX25vZGUtPmxhc3RfdmFsaWQgLyBIWikpOwotCi0JCQloYXNoX3JlbW92ZV9idWNrZXQob3JpZ19oYXNoLCBoYXNoaXQpOwotCQkJZnJlZV9vcmlnX25vZGUob3JpZ19ub2RlKTsKLQotCQl9IGVsc2UgewotCi0JCQliZXN0X25laWdoX25vZGUgPSBOVUxMOwotCQkJbmVpZ2hfcHVyZ2VkID0gMDsKLQotCQkJLyogZm9yIGFsbCBuZWlnaGJvdXJzIHRvd2FyZHMgdGhpcyBvcmlnaW5hdG9yIC4uLiAqLwotCQkJbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3RfcG9zLCBsaXN0X3Bvc190bXAsICZvcmlnX25vZGUtPm5laWdoX2xpc3QpIHsKLQkJCQluZWlnaF9ub2RlID0gbGlzdF9lbnRyeShsaXN0X3Bvcywgc3RydWN0IG5laWdoX25vZGUsIGxpc3QpOwotCi0JCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbmVpZ2hfbm9kZS0+bGFzdF92YWxpZCArICgoUFVSR0VfVElNRU9VVCAqIEhaKSAvIDEwMDApKSkgewotCi0JCQkJCWFkZHJfdG9fc3RyaW5nKG5laWdoX3N0ciwgbmVpZ2hfbm9kZS0+YWRkcik7Ci0JCQkJCWRlYnVnX2xvZyhMT0dfVFlQRV9CQVRNQU4sICJOZWlnaGJvdXIgdGltZW91dDogb3JpZ2luYXRvciAlcywgbmVpZ2hib3VyOiAlcywgbGFzdF92YWxpZCAldSBcbiIsIG9yaWdfc3RyLCBuZWlnaF9zdHIsIChuZWlnaF9ub2RlLT5sYXN0X3ZhbGlkIC8gSFopKTsKLQotCQkJCQluZWlnaF9wdXJnZWQgPSAxOwotCQkJCQlsaXN0X2RlbChsaXN0X3Bvcyk7Ci0JCQkJCWtmcmVlKG5laWdoX25vZGUpOwotCi0JCQkJfSBlbHNlIHsKLQotCQkJCQlpZiAoKGJlc3RfbmVpZ2hfbm9kZSA9PSBOVUxMKSB8fCAobmVpZ2hfbm9kZS0+dHFfYXZnID4gYmVzdF9uZWlnaF9ub2RlLT50cV9hdmcpKQotCQkJCQkJYmVzdF9uZWlnaF9ub2RlID0gbmVpZ2hfbm9kZTsKLQotCQkJCX0KLQotCQkJfQotCi0JCQlpZiAobmVpZ2hfcHVyZ2VkKQotCQkJCXVwZGF0ZV9yb3V0ZXMob3JpZ19ub2RlLCBiZXN0X25laWdoX25vZGUsIG9yaWdfbm9kZS0+aG5hX2J1ZmYsIG9yaWdfbm9kZS0+aG5hX2J1ZmZfbGVuKTsKLQotCQl9Ci0KLQl9Ci0KLQlzcGluX3VubG9jaygmb3JpZ19oYXNoX2xvY2spOwotCi0Jc3RhcnRfcHVyZ2VfdGltZXIoKTsKLX0KLQotc3RhdGljIGludCByZWNlaXZlX3Jhd19wYWNrZXQoc3RydWN0IHNvY2tldCAqcmF3X3NvY2ssIHVuc2lnbmVkIGNoYXIgKnBhY2tldF9idWZmLCBpbnQgcGFja2V0X2J1ZmZfbGVuKQotewotCXN0cnVjdCBrdmVjIGlvdjsKLQlzdHJ1Y3QgbXNnaGRyIG1zZzsKLQotCWlvdi5pb3ZfYmFzZSA9IHBhY2tldF9idWZmOwotCWlvdi5pb3ZfbGVuID0gcGFja2V0X2J1ZmZfbGVuOwotCi0JbXNnLm1zZ19mbGFncyA9IE1TR19ET05UV0FJVDsJLyogbm9uLWJsb2NraW5nICovCi0JbXNnLm1zZ19uYW1lID0gTlVMTDsKLQltc2cubXNnX25hbWVsZW4gPSAwOwotCW1zZy5tc2dfY29udHJvbCA9IE5VTEw7Ci0KLQlyZXR1cm4ga2VybmVsX3JlY3Ztc2cocmF3X3NvY2ssICZtc2csICZpb3YsIDEsIHBhY2tldF9idWZmX2xlbiwgTVNHX0RPTlRXQUlUKTsKLX0KLQotaW50IHBhY2tldF9yZWN2X3RocmVhZCh2b2lkICpkYXRhKQotewotCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZjsKIAlzdHJ1Y3QgZXRoaGRyICpldGhoZHI7Ci0Jc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQ7Ci0Jc3RydWN0IHVuaWNhc3RfcGFja2V0ICp1bmljYXN0X3BhY2tldDsKLQlzdHJ1Y3QgYmNhc3RfcGFja2V0ICpiY2FzdF9wYWNrZXQ7Ci0Jc3RydWN0IGljbXBfcGFja2V0ICppY21wX3BhY2tldDsKLQlzdHJ1Y3QgdmlzX3BhY2tldCAqdmlzX3BhY2tldDsKLQlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7Ci0JdW5zaWduZWQgY2hhciAqcGFja2V0X2J1ZmYsIHNyY19zdHJbRVRIX1NUUl9MRU5dLCBkc3Rfc3RyW0VUSF9TVFJfTEVOXTsKLQlpbnQgdmlzX2luZm9fbGVuOwotCWludCByZXN1bHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWF0b21pY19zZXQoJmRhdGFfcmVhZHlfY29uZCwgMCk7Ci0JYXRvbWljX3NldCgmZXhpdF9jb25kLCAwKTsKLQlwYWNrZXRfYnVmZiA9IGttYWxsb2MoUEFDS0JVRkZfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwYWNrZXRfYnVmZikgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfQ1JJVCwgIkNvdWxkIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHBhY2tldCBidWZmZXIuIDooXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KKwkvKiBkcm9wIHBhY2tldCBpZiBpdCBoYXMgbm90IG5lY2Vzc2FyeSBtaW5pbXVtIHNpemUgKi8KKwlpZiAoc2tiX2hlYWRsZW4oc2tiKSA8IHNpemVvZihzdHJ1Y3QgYmF0bWFuX3BhY2tldCkpCisJCXJldHVybiBORVRfUlhfRFJPUDsKIAotCXdoaWxlICgoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgJiYgKCFhdG9taWNfcmVhZCgmZXhpdF9jb25kKSkpIHsKKwlldGhoZHIgPSAoc3RydWN0IGV0aGhkciAqKXNrYl9tYWNfaGVhZGVyKHNrYik7CiAKLQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHRocmVhZF93YWl0LCAoYXRvbWljX3JlYWQoJmRhdGFfcmVhZHlfY29uZCkgfHwgYXRvbWljX3JlYWQoJmV4aXRfY29uZCkpKTsKKwkvKiBwYWNrZXQgd2l0aCBicm9hZGNhc3QgaW5kaWNhdGlvbiBidXQgdW5pY2FzdCByZWNpcGllbnQgKi8KKwlpZiAoIWlzX2JjYXN0KGV0aGhkci0+aF9kZXN0KSkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOwogCi0JCWF0b21pY19zZXQoJmRhdGFfcmVhZHlfY29uZCwgMCk7CisJLyogcGFja2V0IHdpdGggYnJvYWRjYXN0IHNlbmRlciBhZGRyZXNzICovCisJaWYgKGlzX2JjYXN0KGV0aGhkci0+aF9zb3VyY2UpKQorCQlyZXR1cm4gTkVUX1JYX0RST1A7CiAKLQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCBhdG9taWNfcmVhZCgmZXhpdF9jb25kKSkKLQkJCWJyZWFrOworCXNwaW5fbG9ja19pcnFzYXZlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOworCS8qIFRPRE86IHdlIHVzZSBoZWFkbGVuIGluc3RlYWQgb2YgImxlbmd0aCIsIGJlY2F1c2UKKwkgKiBvbmx5IHRoaXMgZGF0YSBpcyBwYWdlZCBpbi4gKi8KKwkvKiBUT0RPOiBpcyBhbm90aGVyIHNrYl9jb3B5IG5lZWRlZCBoZXJlPyB0aGVyZSB3aWxsIGJlCisJICogd3JpdHRlbiBvbiB0aGUgZGF0YSwgYnV0IG5vYm9keSAoPykgc2hvdWxkIGZ1cnRoZXIgdXNlCisJICogdGhpcyBkYXRhICovCisJcmVjZWl2ZV9hZ2dyX2JhdF9wYWNrZXQoZXRoaGRyLAorCQkJCXNrYi0+ZGF0YSwKKwkJCQlza2JfaGVhZGxlbihza2IpLAorCQkJCWJhdG1hbl9pZik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKIAotCQkvKiB3ZSBvbmx5IHdhbnQgdG8gc2FmZWx5IHRyYXZlcnNlIHRoZSBsaXN0LCBoYXJkLWludGVyZmFjZXMKLQkJICogd29uJ3QgYmUgZGVsZXRlZCBhbnl3YXkgYXMgbG9uZyBhcyB0aGlzIHRocmVhZCBydW5zLiAqLwotCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoYmF0bWFuX2lmLCAmaWZfbGlzdCwgbGlzdCkgewotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQkJCXJlc3VsdCA9IC0xOwotCi0JCQl3aGlsZSAoMSkgewotCQkJCWlmIChiYXRtYW5faWYtPmlmX2FjdGl2ZSAhPSBJRl9BQ1RJVkUpIHsKLQkJCQkJaWYgKGJhdG1hbl9pZi0+aWZfYWN0aXZlICE9IElGX1RPX0JFX0FDVElWQVRFRCkKLQkJCQkJCWRlYnVnX2xvZyhMT0dfVFlQRV9OT1RJQ0UsCi0JCQkJCQkgICAgICAgICAgIkNvdWxkIG5vdCByZWFkIGZyb20gZGVhY3RpdmF0ZWQgaW50ZXJmYWNlICVzIVxuIiwKLQkJCQkJCSAgICAgICAgICBiYXRtYW5faWYtPmRldik7Ci0KLQkJCQkJaWYgKGJhdG1hbl9pZi0+cmF3X3NvY2spCi0JCQkJCQlyZWNlaXZlX3Jhd19wYWNrZXQoYmF0bWFuX2lmLT5yYXdfc29jaywgcGFja2V0X2J1ZmYsIFBBQ0tCVUZGX1NJWkUpOwotCQkJCQlyZXN1bHQgPSAwOwotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCQlyZXN1bHQgPSByZWNlaXZlX3Jhd19wYWNrZXQoYmF0bWFuX2lmLT5yYXdfc29jaywgcGFja2V0X2J1ZmYsIFBBQ0tCVUZGX1NJWkUpOwotCQkJCWlmIChyZXN1bHQgPD0gMCkKLQkJCQkJYnJlYWs7Ci0KLQkJCQlpZiAocmVzdWx0IDwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpICsgMikKLQkJCQkJY29udGludWU7Ci0KLQkJCQlldGhoZHIgPSAoc3RydWN0IGV0aGhkciAqKXBhY2tldF9idWZmOwotCQkJCWJhdG1hbl9wYWNrZXQgPSAoc3RydWN0IGJhdG1hbl9wYWNrZXQgKikocGFja2V0X2J1ZmYgKyBzaXplb2Yoc3RydWN0IGV0aGhkcikpOwotCi0JCQkJaWYgKGJhdG1hbl9wYWNrZXQtPnZlcnNpb24gIT0gQ09NUEFUX1ZFUlNJT04pIHsKLQkJCQkJZGVidWdfbG9nKExPR19UWVBFX0JBVE1BTiwgIkRyb3AgcGFja2V0OiBpbmNvbXBhdGlibGUgYmF0bWFuIHZlcnNpb24gKCVpKSBcbiIsIGJhdG1hbl9wYWNrZXQtPnZlcnNpb24pOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0KLQkJCQlzd2l0Y2ggKGJhdG1hbl9wYWNrZXQtPnBhY2tldF90eXBlKSB7Ci0JCQkJLyogYmF0bWFuIG9yaWdpbmF0b3IgcGFja2V0ICovCi0JCQkJY2FzZSBCQVRfUEFDS0VUOgotCQkJCQkvKiBwYWNrZXQgd2l0aCBicm9hZGNhc3QgaW5kaWNhdGlvbiBidXQgdW5pY2FzdCByZWNpcGllbnQgKi8KLQkJCQkJaWYgKCFpc19iY2FzdChldGhoZHItPmhfZGVzdCkpCi0JCQkJCQljb250aW51ZTsKLQotCQkJCQkvKiBwYWNrZXQgd2l0aCBicm9hZGNhc3Qgc2VuZGVyIGFkZHJlc3MgKi8KLQkJCQkJaWYgKGlzX2JjYXN0KGV0aGhkci0+aF9zb3VyY2UpKQotCQkJCQkJY29udGludWU7Ci0KLQkJCQkJLyogZHJvcCBwYWNrZXQgaWYgaXQgaGFzIG5vdCBhdCBsZWFzdCBvbmUgYmF0bWFuIHBhY2tldCBhcyBwYXlsb2FkICovCi0JCQkJCWlmIChyZXN1bHQgPCBzaXplb2Yoc3RydWN0IGV0aGhkcikgKyBzaXplb2Yoc3RydWN0IGJhdG1hbl9wYWNrZXQpKQotCQkJCQkJY29udGludWU7Ci0KLQkJCQkJc3Bpbl9sb2NrKCZvcmlnX2hhc2hfbG9jayk7Ci0JCQkJCXJlY2VpdmVfYWdncl9iYXRfcGFja2V0KGV0aGhkciwKLQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0X2J1ZmYgKyBzaXplb2Yoc3RydWN0IGV0aGhkciksCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCAtIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwKLQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgYmF0bWFuX2lmKTsKLQkJCQkJc3Bpbl91bmxvY2soJm9yaWdfaGFzaF9sb2NrKTsKLQotCQkJCQlicmVhazsKLQotCQkJCS8qIGJhdG1hbiBpY21wIHBhY2tldCAqLwotCQkJCWNhc2UgQkFUX0lDTVA6Ci0JCQkJCS8qIHBhY2tldCB3aXRoIHVuaWNhc3QgaW5kaWNhdGlvbiBidXQgYnJvYWRjYXN0IHJlY2lwaWVudCAqLwotCQkJCQlpZiAoaXNfYmNhc3QoZXRoaGRyLT5oX2Rlc3QpKQotCQkJCQkJY29udGludWU7Ci0KLQkJCQkJLyogcGFja2V0IHdpdGggYnJvYWRjYXN0IHNlbmRlciBhZGRyZXNzICovCi0JCQkJCWlmIChpc19iY2FzdChldGhoZHItPmhfc291cmNlKSkKLQkJCQkJCWNvbnRpbnVlOwotCi0JCQkJCS8qIG5vdCBmb3IgbWUgKi8KLQkJCQkJaWYgKCFpc19teV9tYWMoZXRoaGRyLT5oX2Rlc3QpKQotCQkJCQkJY29udGludWU7Ci0KLQkJCQkJLyogZHJvcCBwYWNrZXQgaWYgaXQgaGFzIG5vdCBuZWNlc3NhcnkgbWluaW11bSBzaXplICovCi0JCQkJCWlmIChyZXN1bHQgPCBzaXplb2Yoc3RydWN0IGV0aGhkcikgKyBzaXplb2Yoc3RydWN0IGljbXBfcGFja2V0KSkKLQkJCQkJCWNvbnRpbnVlOwotCi0JCQkJCWljbXBfcGFja2V0ID0gKHN0cnVjdCBpY21wX3BhY2tldCAqKShwYWNrZXRfYnVmZiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7Ci0KLQkJCQkJLyogcGFja2V0IGZvciBtZSAqLwotCQkJCQlpZiAoaXNfbXlfbWFjKGljbXBfcGFja2V0LT5kc3QpKSB7Ci0KLQkJCQkJCS8qIGFkZCBkYXRhIHRvIGRldmljZSBxdWV1ZSAqLwotCQkJCQkJaWYgKGljbXBfcGFja2V0LT5tc2dfdHlwZSAhPSBFQ0hPX1JFUVVFU1QpIHsKLQkJCQkJCQliYXRfZGV2aWNlX3JlY2VpdmVfcGFja2V0KGljbXBfcGFja2V0KTsKLQkJCQkJCQljb250aW51ZTsKLQkJCQkJCX0KLQotCQkJCQkJLyogYW5zd2VyIGVjaG8gcmVxdWVzdCAocGluZykgKi8KLQkJCQkJCS8qIGdldCByb3V0aW5nIGluZm9ybWF0aW9uICovCi0JCQkJCQlzcGluX2xvY2soJm9yaWdfaGFzaF9sb2NrKTsKLQkJCQkJCW9yaWdfbm9kZSA9ICgoc3RydWN0IG9yaWdfbm9kZSAqKWhhc2hfZmluZChvcmlnX2hhc2gsIGljbXBfcGFja2V0LT5vcmlnKSk7Ci0KLQkJCQkJCWlmICgob3JpZ19ub2RlICE9IE5VTEwpICYmIChvcmlnX25vZGUtPmJhdG1hbl9pZiAhPSBOVUxMKSAmJiAob3JpZ19ub2RlLT5yb3V0ZXIgIT0gTlVMTCkpIHsKLQotCQkJCQkJCW1lbWNweShpY21wX3BhY2tldC0+ZHN0LCBpY21wX3BhY2tldC0+b3JpZywgRVRIX0FMRU4pOwotCQkJCQkJCW1lbWNweShpY21wX3BhY2tldC0+b3JpZywgZXRoaGRyLT5oX2Rlc3QsIEVUSF9BTEVOKTsKLQkJCQkJCQlpY21wX3BhY2tldC0+bXNnX3R5cGUgPSBFQ0hPX1JFUExZOwotCQkJCQkJCWljbXBfcGFja2V0LT50dGwgPSBUVEw7Ci0KLQkJCQkJCQlzZW5kX3Jhd19wYWNrZXQocGFja2V0X2J1ZmYgKyBzaXplb2Yoc3RydWN0IGV0aGhkciksCi0JCQkJCQkJICAgICAgICAgICAgICAgIHJlc3VsdCAtIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwKLQkJCQkJCQkgICAgICAgICAgICAgICAgb3JpZ19ub2RlLT5iYXRtYW5faWYsCi0JCQkJCQkJICAgICAgICAgICAgICAgIG9yaWdfbm9kZS0+cm91dGVyLT5hZGRyKTsKLQotCQkJCQkJfQotCi0JCQkJCQlzcGluX3VubG9jaygmb3JpZ19oYXNoX2xvY2spOwotCQkJCQkJY29udGludWU7Ci0KLQkJCQkJfQotCi0JCQkJCS8qIFRUTCBleGNlZWRlZCAqLwotCQkJCQlpZiAoaWNtcF9wYWNrZXQtPnR0bCA8IDIpIHsKLQotCQkJCQkJYWRkcl90b19zdHJpbmcoc3JjX3N0ciwgaWNtcF9wYWNrZXQtPm9yaWcpOwotCQkJCQkJYWRkcl90b19zdHJpbmcoZHN0X3N0ciwgaWNtcF9wYWNrZXQtPmRzdCk7Ci0KLQkJCQkJCWRlYnVnX2xvZyhMT0dfVFlQRV9OT1RJQ0UsICJFcnJvciAtIGNhbid0IHNlbmQgcGFja2V0IGZyb20gJXMgdG8gJXM6IHR0bCBleGNlZWRlZFxuIiwgc3JjX3N0ciwgZHN0X3N0cik7Ci0KLQkJCQkJCS8qIHNlbmQgVFRMIGV4Y2VlZGVkIGlmIHBhY2tldCBpcyBhbiBlY2hvIHJlcXVlc3QgKHRyYWNlcm91dGUpICovCi0JCQkJCQlpZiAoaWNtcF9wYWNrZXQtPm1zZ190eXBlICE9IEVDSE9fUkVRVUVTVCkKLQkJCQkJCQljb250aW51ZTsKLQotCQkJCQkJLyogZ2V0IHJvdXRpbmcgaW5mb3JtYXRpb24gKi8KLQkJCQkJCXNwaW5fbG9jaygmb3JpZ19oYXNoX2xvY2spOwotCQkJCQkJb3JpZ19ub2RlID0gKChzdHJ1Y3Qgb3JpZ19ub2RlICopaGFzaF9maW5kKG9yaWdfaGFzaCwgaWNtcF9wYWNrZXQtPm9yaWcpKTsKLQotCQkJCQkJaWYgKChvcmlnX25vZGUgIT0gTlVMTCkgJiYgKG9yaWdfbm9kZS0+YmF0bWFuX2lmICE9IE5VTEwpICYmIChvcmlnX25vZGUtPnJvdXRlciAhPSBOVUxMKSkgewotCi0JCQkJCQkJbWVtY3B5KGljbXBfcGFja2V0LT5kc3QsIGljbXBfcGFja2V0LT5vcmlnLCBFVEhfQUxFTik7Ci0JCQkJCQkJbWVtY3B5KGljbXBfcGFja2V0LT5vcmlnLCBldGhoZHItPmhfZGVzdCwgRVRIX0FMRU4pOwotCQkJCQkJCWljbXBfcGFja2V0LT5tc2dfdHlwZSA9IFRUTF9FWENFRURFRDsKLQkJCQkJCQlpY21wX3BhY2tldC0+dHRsID0gVFRMOwotCi0JCQkJCQkJc2VuZF9yYXdfcGFja2V0KHBhY2tldF9idWZmICsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLAotCQkJCQkJCSAgICAgICAgICAgICAgICByZXN1bHQgLSBzaXplb2Yoc3RydWN0IGV0aGhkciksCi0JCQkJCQkJICAgICAgICAgICAgICAgIG9yaWdfbm9kZS0+YmF0bWFuX2lmLAotCQkJCQkJCSAgICAgICAgICAgICAgICBvcmlnX25vZGUtPnJvdXRlci0+YWRkcik7Ci0KLQkJCQkJCX0KLQotCQkJCQkJc3Bpbl91bmxvY2soJm9yaWdfaGFzaF9sb2NrKTsKLQkJCQkJCWNvbnRpbnVlOwotCi0JCQkJCX0KLQotCQkJCQkvKiBnZXQgcm91dGluZyBpbmZvcm1hdGlvbiAqLwotCQkJCQlzcGluX2xvY2soJm9yaWdfaGFzaF9sb2NrKTsKLQkJCQkJb3JpZ19ub2RlID0gKChzdHJ1Y3Qgb3JpZ19ub2RlICopaGFzaF9maW5kKG9yaWdfaGFzaCwgaWNtcF9wYWNrZXQtPmRzdCkpOwotCi0JCQkJCWlmICgob3JpZ19ub2RlICE9IE5VTEwpICYmIChvcmlnX25vZGUtPmJhdG1hbl9pZiAhPSBOVUxMKSAmJiAob3JpZ19ub2RlLT5yb3V0ZXIgIT0gTlVMTCkpIHsKLQotCQkJCQkJLyogZGVjcmVtZW50IHR0bCAqLwotCQkJCQkJaWNtcF9wYWNrZXQtPnR0bC0tOwotCi0JCQkJCQkvKiByb3V0ZSBpdCAqLwotCQkJCQkJc2VuZF9yYXdfcGFja2V0KHBhY2tldF9idWZmICsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLAotCQkJCQkJICAgICAgICAgICAgICAgIHJlc3VsdCAtIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwKLQkJCQkJCSAgICAgICAgICAgICAgICBvcmlnX25vZGUtPmJhdG1hbl9pZiwKLQkJCQkJCSAgICAgICAgICAgICAgICBvcmlnX25vZGUtPnJvdXRlci0+YWRkcik7Ci0JCQkJCX0KLQotCQkJCQlzcGluX3VubG9jaygmb3JpZ19oYXNoX2xvY2spOwotCQkJCQlicmVhazsKLQotCQkJCS8qIHVuaWNhc3QgcGFja2V0ICovCi0JCQkJY2FzZSBCQVRfVU5JQ0FTVDoKLQkJCQkJLyogcGFja2V0IHdpdGggdW5pY2FzdCBpbmRpY2F0aW9uIGJ1dCBicm9hZGNhc3QgcmVjaXBpZW50ICovCi0JCQkJCWlmIChpc19iY2FzdChldGhoZHItPmhfZGVzdCkpCi0JCQkJCQljb250aW51ZTsKLQotCQkJCQkvKiBwYWNrZXQgd2l0aCBicm9hZGNhc3Qgc2VuZGVyIGFkZHJlc3MgKi8KLQkJCQkJaWYgKGlzX2JjYXN0KGV0aGhkci0+aF9zb3VyY2UpKQotCQkJCQkJY29udGludWU7Ci0KLQkJCQkJLyogbm90IGZvciBtZSAqLwotCQkJCQlpZiAoIWlzX215X21hYyhldGhoZHItPmhfZGVzdCkpCi0JCQkJCQljb250aW51ZTsKLQotCQkJCQkvKiBkcm9wIHBhY2tldCBpZiBpdCBoYXMgbm90IG5lY2Vzc2FyeSBtaW5pbXVtIHNpemUgKi8KLQkJCQkJaWYgKHJlc3VsdCA8IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArIHNpemVvZihzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQpKQotCQkJCQkJY29udGludWU7Ci0KLQkJCQkJdW5pY2FzdF9wYWNrZXQgPSAoc3RydWN0IHVuaWNhc3RfcGFja2V0ICopKHBhY2tldF9idWZmICsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTsKLQotCQkJCQkvKiBwYWNrZXQgZm9yIG1lICovCi0JCQkJCWlmIChpc19teV9tYWModW5pY2FzdF9wYWNrZXQtPmRlc3QpKSB7Ci0KLQkJCQkJCWludGVyZmFjZV9yeChzb2Z0X2RldmljZSwgcGFja2V0X2J1ZmYgKyBzaXplb2Yoc3RydWN0IGV0aGhkcikgKyBzaXplb2Yoc3RydWN0IHVuaWNhc3RfcGFja2V0KSwgcmVzdWx0IC0gc2l6ZW9mKHN0cnVjdCBldGhoZHIpIC0gc2l6ZW9mKHN0cnVjdCB1bmljYXN0X3BhY2tldCkpOwotCQkJCQkJY29udGludWU7Ci0KLQkJCQkJfQotCi0JCQkJCS8qIFRUTCBleGNlZWRlZCAqLwotCQkJCQlpZiAodW5pY2FzdF9wYWNrZXQtPnR0bCA8IDIpIHsKLQkJCQkJCWFkZHJfdG9fc3RyaW5nKHNyY19zdHIsICgoc3RydWN0IGV0aGhkciAqKSh1bmljYXN0X3BhY2tldCArIDEpKS0+aF9zb3VyY2UpOwotCQkJCQkJYWRkcl90b19zdHJpbmcoZHN0X3N0ciwgdW5pY2FzdF9wYWNrZXQtPmRlc3QpOwotCi0JCQkJCQlkZWJ1Z19sb2coTE9HX1RZUEVfTk9USUNFLCAiRXJyb3IgLSBjYW4ndCBzZW5kIHBhY2tldCBmcm9tICVzIHRvICVzOiB0dGwgZXhjZWVkZWRcbiIsIHNyY19zdHIsIGRzdF9zdHIpOwotCQkJCQkJY29udGludWU7Ci0JCQkJCX0KLQotCQkJCQkvKiBnZXQgcm91dGluZyBpbmZvcm1hdGlvbiAqLwotCQkJCQlzcGluX2xvY2soJm9yaWdfaGFzaF9sb2NrKTsKLQkJCQkJb3JpZ19ub2RlID0gKChzdHJ1Y3Qgb3JpZ19ub2RlICopaGFzaF9maW5kKG9yaWdfaGFzaCwgdW5pY2FzdF9wYWNrZXQtPmRlc3QpKTsKLQotCQkJCQlpZiAoKG9yaWdfbm9kZSAhPSBOVUxMKSAmJiAob3JpZ19ub2RlLT5iYXRtYW5faWYgIT0gTlVMTCkgJiYgKG9yaWdfbm9kZS0+cm91dGVyICE9IE5VTEwpKSB7Ci0JCQkJCQkvKiBkZWNyZW1lbnQgdHRsICovCi0JCQkJCQl1bmljYXN0X3BhY2tldC0+dHRsLS07Ci0KLQkJCQkJCS8qIHJvdXRlIGl0ICovCi0JCQkJCQlzZW5kX3Jhd19wYWNrZXQocGFja2V0X2J1ZmYgKyBzaXplb2Yoc3RydWN0IGV0aGhkciksCi0JCQkJCQkgICAgICAgICAgICAgICAgcmVzdWx0IC0gc2l6ZW9mKHN0cnVjdCBldGhoZHIpLAotCQkJCQkJICAgICAgICAgICAgICAgIG9yaWdfbm9kZS0+YmF0bWFuX2lmLAotCQkJCQkJICAgICAgICAgICAgICAgIG9yaWdfbm9kZS0+cm91dGVyLT5hZGRyKTsKLQkJCQkJfQotCi0JCQkJCXNwaW5fdW5sb2NrKCZvcmlnX2hhc2hfbG9jayk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJLyogYnJvYWRjYXN0IHBhY2tldCAqLwotCQkJCWNhc2UgQkFUX0JDQVNUOgotCQkJCQkvKiBwYWNrZXQgd2l0aCBicm9hZGNhc3QgaW5kaWNhdGlvbiBidXQgdW5pY2FzdCByZWNpcGllbnQgKi8KLQkJCQkJaWYgKCFpc19iY2FzdChldGhoZHItPmhfZGVzdCkpCi0JCQkJCQljb250aW51ZTsKLQotCQkJCQkvKiBwYWNrZXQgd2l0aCBicm9hZGNhc3Qgc2VuZGVyIGFkZHJlc3MgKi8KLQkJCQkJaWYgKGlzX2JjYXN0KGV0aGhkci0+aF9zb3VyY2UpKQotCQkJCQkJY29udGludWU7Ci0KLQkJCQkJLyogZHJvcCBwYWNrZXQgaWYgaXQgaGFzIG5vdCBuZWNlc3NhcnkgbWluaW11bSBzaXplICovCi0JCQkJCWlmIChyZXN1bHQgPCBzaXplb2Yoc3RydWN0IGV0aGhkcikgKyBzaXplb2Yoc3RydWN0IGJjYXN0X3BhY2tldCkpCi0JCQkJCQljb250aW51ZTsKLQotCQkJCQkvKiBpZ25vcmUgYnJvYWRjYXN0cyBzZW50IGJ5IG15c2VsZiAqLwotCQkJCQlpZiAoaXNfbXlfbWFjKGV0aGhkci0+aF9zb3VyY2UpKQotCQkJCQkJY29udGludWU7Ci0KLQkJCQkJYmNhc3RfcGFja2V0ID0gKHN0cnVjdCBiY2FzdF9wYWNrZXQgKikocGFja2V0X2J1ZmYgKyBzaXplb2Yoc3RydWN0IGV0aGhkcikpOwotCi0JCQkJCS8qIGlnbm9yZSBicm9hZGNhc3RzIG9yaWdpbmF0ZWQgYnkgbXlzZWxmICovCi0JCQkJCWlmIChpc19teV9tYWMoYmNhc3RfcGFja2V0LT5vcmlnKSkKLQkJCQkJCWNvbnRpbnVlOwotCi0JCQkJCXNwaW5fbG9jaygmb3JpZ19oYXNoX2xvY2spOwotCQkJCQlvcmlnX25vZGUgPSAoKHN0cnVjdCBvcmlnX25vZGUgKiloYXNoX2ZpbmQob3JpZ19oYXNoLCBiY2FzdF9wYWNrZXQtPm9yaWcpKTsKLQotCQkJCQlpZiAob3JpZ19ub2RlID09IE5VTEwpIHsKLQkJCQkJCXNwaW5fdW5sb2NrKCZvcmlnX2hhc2hfbG9jayk7Ci0JCQkJCQljb250aW51ZTsKLQkJCQkJfQotCi0JCQkJCS8qIGNoZWNrIGZsb29kIGhpc3RvcnkgKi8KLQkJCQkJaWYgKGdldF9iaXRfc3RhdHVzKG9yaWdfbm9kZS0+YmNhc3RfYml0cywgb3JpZ19ub2RlLT5sYXN0X2JjYXN0X3NlcW5vLCBudG9ocyhiY2FzdF9wYWNrZXQtPnNlcW5vKSkpIHsKLQkJCQkJCXNwaW5fdW5sb2NrKCZvcmlnX2hhc2hfbG9jayk7Ci0JCQkJCQljb250aW51ZTsKLQkJCQkJfQotCi0JCQkJCS8qIG1hcmsgYnJvYWRjYXN0IGluIGZsb29kIGhpc3RvcnkgKi8KLQkJCQkJaWYgKGJpdF9nZXRfcGFja2V0KG9yaWdfbm9kZS0+YmNhc3RfYml0cywgbnRvaHMoYmNhc3RfcGFja2V0LT5zZXFubykgLSBvcmlnX25vZGUtPmxhc3RfYmNhc3Rfc2Vxbm8sIDEpKQotCQkJCQkJb3JpZ19ub2RlLT5sYXN0X2JjYXN0X3NlcW5vID0gbnRvaHMoYmNhc3RfcGFja2V0LT5zZXFubyk7Ci0KLQkJCQkJc3Bpbl91bmxvY2soJm9yaWdfaGFzaF9sb2NrKTsKLQotCQkJCQkvKiBicm9hZGNhc3QgZm9yIG1lICovCi0JCQkJCWludGVyZmFjZV9yeChzb2Z0X2RldmljZSwgcGFja2V0X2J1ZmYgKyBzaXplb2Yoc3RydWN0IGV0aGhkcikgKyBzaXplb2Yoc3RydWN0IGJjYXN0X3BhY2tldCksIHJlc3VsdCAtIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSAtIHNpemVvZihzdHJ1Y3QgYmNhc3RfcGFja2V0KSk7Ci0KLQkJCQkJLyogcmVicm9hZGNhc3QgcGFja2V0ICovCi0JCQkJCWFkZF9iY2FzdF9wYWNrZXRfdG9fbGlzdChwYWNrZXRfYnVmZiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwKLQkJCQkJCQkJCXJlc3VsdCAtIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7Ci0KLQkJCQkJYnJlYWs7Ci0KLQkJCQkvKiB2aXMgcGFja2V0ICovCi0JCQkJY2FzZSBCQVRfVklTOgotCQkJCQkvKiBkcm9wIGlmIHRvbyBzaG9ydC4gKi8KLQkJCQkJaWYgKHJlc3VsdCA8IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArIHNpemVvZihzdHJ1Y3QgdmlzX3BhY2tldCkpCi0JCQkJCQljb250aW51ZTsKLQotCQkJCQkvKiBub3QgZm9yIG1lICovCi0JCQkJCWlmICghaXNfbXlfbWFjKGV0aGhkci0+aF9kZXN0KSkKLQkJCQkJCWNvbnRpbnVlOwotCi0JCQkJCXZpc19wYWNrZXQgPSAoc3RydWN0IHZpc19wYWNrZXQgKikocGFja2V0X2J1ZmYgKyBzaXplb2Yoc3RydWN0IGV0aGhkcikpOwotCQkJCQl2aXNfaW5mb19sZW4gPSByZXN1bHQgIC0gc2l6ZW9mKHN0cnVjdCBldGhoZHIpIC0gc2l6ZW9mKHN0cnVjdCB2aXNfcGFja2V0KTsKLQotCQkJCQkvKiBpZ25vcmUgb3duIHBhY2tldHMgKi8KLQkJCQkJaWYgKGlzX215X21hYyh2aXNfcGFja2V0LT52aXNfb3JpZykpCi0JCQkJCQljb250aW51ZTsKLQotCQkJCQlpZiAoaXNfbXlfbWFjKHZpc19wYWNrZXQtPnNlbmRlcl9vcmlnKSkKLQkJCQkJCWNvbnRpbnVlOwotCi0JCQkJCXN3aXRjaCAodmlzX3BhY2tldC0+dmlzX3R5cGUpIHsKLQkJCQkJY2FzZSBWSVNfVFlQRV9TRVJWRVJfU1lOQzoKLQkJCQkJCXJlY2VpdmVfc2VydmVyX3N5bmNfcGFja2V0KHZpc19wYWNrZXQsIHZpc19pbmZvX2xlbik7Ci0JCQkJCQlicmVhazsKLQotCQkJCQljYXNlIFZJU19UWVBFX0NMSUVOVF9VUERBVEU6Ci0JCQkJCQlyZWNlaXZlX2NsaWVudF91cGRhdGVfcGFja2V0KHZpc19wYWNrZXQsIHZpc19pbmZvX2xlbik7Ci0JCQkJCQlicmVhazsKLQotCQkJCQlkZWZhdWx0OgkvKiBpZ25vcmUgdW5rbm93biBwYWNrZXQgKi8KLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQl9Ci0KLQkJCWlmICgocmVzdWx0IDwgMCkgJiYgKHJlc3VsdCAhPSAtRUFHQUlOKSkKLQkJCQlkZWJ1Z19sb2coTE9HX1RZUEVfQ1JJVCwgIkNvdWxkIG5vdCByZWNlaXZlIHBhY2tldCBmcm9tIGludGVyZmFjZSAlczogJWlcbiIsIGJhdG1hbl9pZi0+ZGV2LCByZXN1bHQpOwotCi0JCQkvKiBsb2NrIGZvciB0aGUgbmV4dCBpdGVyYXRpb24gKi8KLQkJCXJjdV9yZWFkX2xvY2soKTsKLQkJfQotCQlyY3VfcmVhZF91bmxvY2soKTsKLQotCX0KLQlrZnJlZShwYWNrZXRfYnVmZik7Ci0KLQkvKiBkbyBub3QgZXhpdCB1bnRpbCBrdGhyZWFkX3N0b3AoKSBpcyBhY3R1YWxseSBjYWxsZWQsIG90aGVyd2lzZSBpdCB3aWxsIHdhaXQgZm9yIHVzCi0JICogZm9yZXZlci4gKi8KLQl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKLQkJc2NoZWR1bGUoKTsKLQotCXJldHVybiAwOworCWtmcmVlX3NrYihza2IpOworCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKIH0KIAotdm9pZCBiYXRtYW5fZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4pCitzdGF0aWMgaW50IHJlY3ZfbXlfaWNtcF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQl2b2lkICgqZGF0YV9yZWFkeSkoc3RydWN0IHNvY2sgKiwgaW50KSA9IHNrLT5za191c2VyX2RhdGE7CisJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOworCXN0cnVjdCBpY21wX3BhY2tldCAqaWNtcF9wYWNrZXQ7CisJc3RydWN0IGV0aGhkciAqZXRoaGRyOworCXN0cnVjdCBza19idWZmICpza2Jfb2xkOworCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZjsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdWludDhfdCBkc3RhZGRyW0VUSF9BTEVOXTsKIAotCWRhdGFfcmVhZHkoc2ssIGxlbik7CisJaWNtcF9wYWNrZXQgPSAoc3RydWN0IGljbXBfcGFja2V0ICopIHNrYi0+ZGF0YTsKKwlldGhoZHIgPSAoc3RydWN0IGV0aGhkciAqKSBza2JfbWFjX2hlYWRlcihza2IpOwogCi0JYXRvbWljX3NldCgmZGF0YV9yZWFkeV9jb25kLCAxKTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnRocmVhZF93YWl0KTsKKwkvKiBhZGQgZGF0YSB0byBkZXZpY2UgcXVldWUgKi8KKwlpZiAoaWNtcF9wYWNrZXQtPm1zZ190eXBlICE9IEVDSE9fUkVRVUVTVCkgeworCQliYXRfZGV2aWNlX3JlY2VpdmVfcGFja2V0KGljbXBfcGFja2V0KTsKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCX0KKworCS8qIGFuc3dlciBlY2hvIHJlcXVlc3QgKHBpbmcpICovCisJLyogZ2V0IHJvdXRpbmcgaW5mb3JtYXRpb24gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKKwlvcmlnX25vZGUgPSAoKHN0cnVjdCBvcmlnX25vZGUgKiloYXNoX2ZpbmQob3JpZ19oYXNoLAorCQkJCQkJICAgaWNtcF9wYWNrZXQtPm9yaWcpKTsKKwlyZXQgPSBORVRfUlhfRFJPUDsKKworCWlmICgob3JpZ19ub2RlICE9IE5VTEwpICYmCisJICAgIChvcmlnX25vZGUtPmJhdG1hbl9pZiAhPSBOVUxMKSAmJgorCSAgICAob3JpZ19ub2RlLT5yb3V0ZXIgIT0gTlVMTCkpIHsKKworCQkvKiBkb24ndCBsb2NrIHdoaWxlIHNlbmRpbmcgdGhlIHBhY2tldHMgLi4uIHdlIHRoZXJlZm9yZQorCQkgKiBjb3B5IHRoZSByZXF1aXJlZCBkYXRhIGJlZm9yZSBzZW5kaW5nICovCisJCWJhdG1hbl9pZiA9IG9yaWdfbm9kZS0+YmF0bWFuX2lmOworCQltZW1jcHkoZHN0YWRkciwgb3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIsIEVUSF9BTEVOKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKKworCQkvKiBjcmVhdGUgYSBjb3B5IG9mIHRoZSBza2IsIGlmIG5lZWRlZCwgdG8gbW9kaWZ5IGl0LiAqLworCQlza2Jfb2xkID0gTlVMTDsKKwkJaWYgKCFza2JfY2xvbmVfd3JpdGFibGUoc2tiLCBzaXplb2Yoc3RydWN0IGljbXBfcGFja2V0KSkpIHsKKwkJCXNrYl9vbGQgPSBza2I7CisJCQlza2IgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOworCQkJaWYgKCFza2IpCisJCQkJcmV0dXJuIE5FVF9SWF9EUk9QOworCQkJaWNtcF9wYWNrZXQgPSAoc3RydWN0IGljbXBfcGFja2V0ICopIHNrYi0+ZGF0YTsKKwkJCWtmcmVlX3NrYihza2Jfb2xkKTsKKwkJfQorCisJCW1lbWNweShpY21wX3BhY2tldC0+ZHN0LCBpY21wX3BhY2tldC0+b3JpZywgRVRIX0FMRU4pOworCQltZW1jcHkoaWNtcF9wYWNrZXQtPm9yaWcsIGV0aGhkci0+aF9kZXN0LCBFVEhfQUxFTik7CisJCWljbXBfcGFja2V0LT5tc2dfdHlwZSA9IEVDSE9fUkVQTFk7CisJCWljbXBfcGFja2V0LT50dGwgPSBUVEw7CisKKwkJc2VuZF9za2JfcGFja2V0KHNrYiwgYmF0bWFuX2lmLCBkc3RhZGRyKTsKKwkJcmV0ID0gTkVUX1JYX1NVQ0NFU1M7CisKKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgcmVjdl9pY21wX3R0bF9leGNlZWRlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKKwlzdHJ1Y3QgaWNtcF9wYWNrZXQgKmljbXBfcGFja2V0OworCXN0cnVjdCBldGhoZHIgKmV0aGhkcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX29sZDsKKwlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWY7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVpbnQ4X3QgZHN0YWRkcltFVEhfQUxFTl07CisKKwlpY21wX3BhY2tldCA9IChzdHJ1Y3QgaWNtcF9wYWNrZXQgKilza2ItPmRhdGE7CisJZXRoaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpOworCisJLyogc2VuZCBUVEwgZXhjZWVkZWQgaWYgcGFja2V0IGlzIGFuIGVjaG8gcmVxdWVzdCAodHJhY2Vyb3V0ZSkgKi8KKwlpZiAoaWNtcF9wYWNrZXQtPm1zZ190eXBlICE9IEVDSE9fUkVRVUVTVCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJiYXRtYW4tYWR2Oldhcm5pbmcgLSBjYW4ndCBmb3J3YXJkIGljbXAgcGFja2V0IGZyb20gJXBNIHRvICVwTTogdHRsIGV4Y2VlZGVkXG4iLAorCQkJaWNtcF9wYWNrZXQtPm9yaWcsIGljbXBfcGFja2V0LT5kc3QpOworCQlyZXR1cm4gTkVUX1JYX0RST1A7CisJfQorCisJLyogZ2V0IHJvdXRpbmcgaW5mb3JtYXRpb24gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKKwlvcmlnX25vZGUgPSAoKHN0cnVjdCBvcmlnX25vZGUgKikKKwkJICAgICBoYXNoX2ZpbmQob3JpZ19oYXNoLCBpY21wX3BhY2tldC0+b3JpZykpOworCXJldCA9IE5FVF9SWF9EUk9QOworCisJaWYgKChvcmlnX25vZGUgIT0gTlVMTCkgJiYKKwkgICAgKG9yaWdfbm9kZS0+YmF0bWFuX2lmICE9IE5VTEwpICYmCisJICAgIChvcmlnX25vZGUtPnJvdXRlciAhPSBOVUxMKSkgeworCisJCS8qIGRvbid0IGxvY2sgd2hpbGUgc2VuZGluZyB0aGUgcGFja2V0cyAuLi4gd2UgdGhlcmVmb3JlCisJCSAqIGNvcHkgdGhlIHJlcXVpcmVkIGRhdGEgYmVmb3JlIHNlbmRpbmcgKi8KKwkJYmF0bWFuX2lmID0gb3JpZ19ub2RlLT5iYXRtYW5faWY7CisJCW1lbWNweShkc3RhZGRyLCBvcmlnX25vZGUtPnJvdXRlci0+YWRkciwgRVRIX0FMRU4pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOworCisJCS8qIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIHNrYiwgaWYgbmVlZGVkLCB0byBtb2RpZnkgaXQuICovCisJCWlmICghc2tiX2Nsb25lX3dyaXRhYmxlKHNrYiwgc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldCkpKSB7CisJCQlza2Jfb2xkID0gc2tiOworCQkJc2tiID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKKwkJCWlmICghc2tiKQorCQkJCXJldHVybiBORVRfUlhfRFJPUDsKKwkJCWljbXBfcGFja2V0ID0gKHN0cnVjdCBpY21wX3BhY2tldCAqKSBza2ItPmRhdGE7CisJCQlrZnJlZV9za2Ioc2tiX29sZCk7CisJCX0KKworCQltZW1jcHkoaWNtcF9wYWNrZXQtPmRzdCwgaWNtcF9wYWNrZXQtPm9yaWcsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGljbXBfcGFja2V0LT5vcmlnLCBldGhoZHItPmhfZGVzdCwgRVRIX0FMRU4pOworCQlpY21wX3BhY2tldC0+bXNnX3R5cGUgPSBUVExfRVhDRUVERUQ7CisJCWljbXBfcGFja2V0LT50dGwgPSBUVEw7CisKKwkJc2VuZF9za2JfcGFja2V0KHNrYiwgYmF0bWFuX2lmLCBkc3RhZGRyKTsKKwkJcmV0ID0gTkVUX1JYX1NVQ0NFU1M7CisKKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKKworaW50IHJlY3ZfaWNtcF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWNtcF9wYWNrZXQgKmljbXBfcGFja2V0OworCXN0cnVjdCBldGhoZHIgKmV0aGhkcjsKKwlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7CisJc3RydWN0IHNrX2J1ZmYgKnNrYl9vbGQ7CisJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmOworCWludCBoZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWNtcF9wYWNrZXQpOworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1aW50OF90IGRzdGFkZHJbRVRIX0FMRU5dOworCisJLyogZHJvcCBwYWNrZXQgaWYgaXQgaGFzIG5vdCBuZWNlc3NhcnkgbWluaW11bSBzaXplICovCisJaWYgKHNrYl9oZWFkbGVuKHNrYikgPCBoZHJfc2l6ZSkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJZXRoaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpOworCisJLyogcGFja2V0IHdpdGggdW5pY2FzdCBpbmRpY2F0aW9uIGJ1dCBicm9hZGNhc3QgcmVjaXBpZW50ICovCisJaWYgKGlzX2JjYXN0KGV0aGhkci0+aF9kZXN0KSkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJLyogcGFja2V0IHdpdGggYnJvYWRjYXN0IHNlbmRlciBhZGRyZXNzICovCisJaWYgKGlzX2JjYXN0KGV0aGhkci0+aF9zb3VyY2UpKQorCQlyZXR1cm4gTkVUX1JYX0RST1A7CisKKwkvKiBub3QgZm9yIG1lICovCisJaWYgKCFpc19teV9tYWMoZXRoaGRyLT5oX2Rlc3QpKQorCQlyZXR1cm4gTkVUX1JYX0RST1A7CisKKwlpY21wX3BhY2tldCA9IChzdHJ1Y3QgaWNtcF9wYWNrZXQgKikgc2tiLT5kYXRhOworCisJLyogcGFja2V0IGZvciBtZSAqLworCWlmIChpc19teV9tYWMoaWNtcF9wYWNrZXQtPmRzdCkpCisJCXJldHVybiByZWN2X215X2ljbXBfcGFja2V0KHNrYik7CisKKwkvKiBUVEwgZXhjZWVkZWQgKi8KKwlpZiAoaWNtcF9wYWNrZXQtPnR0bCA8IDIpCisJCXJldHVybiByZWN2X2ljbXBfdHRsX2V4Y2VlZGVkKHNrYik7CisKKwlyZXQgPSBORVRfUlhfRFJPUDsKKworCS8qIGdldCByb3V0aW5nIGluZm9ybWF0aW9uICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CisJb3JpZ19ub2RlID0gKChzdHJ1Y3Qgb3JpZ19ub2RlICopCisJCSAgICAgaGFzaF9maW5kKG9yaWdfaGFzaCwgaWNtcF9wYWNrZXQtPmRzdCkpOworCisJaWYgKChvcmlnX25vZGUgIT0gTlVMTCkgJiYKKwkgICAgKG9yaWdfbm9kZS0+YmF0bWFuX2lmICE9IE5VTEwpICYmCisJICAgIChvcmlnX25vZGUtPnJvdXRlciAhPSBOVUxMKSkgeworCisJCS8qIGRvbid0IGxvY2sgd2hpbGUgc2VuZGluZyB0aGUgcGFja2V0cyAuLi4gd2UgdGhlcmVmb3JlCisJCSAqIGNvcHkgdGhlIHJlcXVpcmVkIGRhdGEgYmVmb3JlIHNlbmRpbmcgKi8KKwkJYmF0bWFuX2lmID0gb3JpZ19ub2RlLT5iYXRtYW5faWY7CisJCW1lbWNweShkc3RhZGRyLCBvcmlnX25vZGUtPnJvdXRlci0+YWRkciwgRVRIX0FMRU4pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOworCisJCS8qIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIHNrYiwgaWYgbmVlZGVkLCB0byBtb2RpZnkgaXQuICovCisJCWlmICghc2tiX2Nsb25lX3dyaXRhYmxlKHNrYiwgc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldCkpKSB7CisJCQlza2Jfb2xkID0gc2tiOworCQkJc2tiID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKKwkJCWlmICghc2tiKQorCQkJCXJldHVybiBORVRfUlhfRFJPUDsKKwkJCWljbXBfcGFja2V0ID0gKHN0cnVjdCBpY21wX3BhY2tldCAqKSBza2ItPmRhdGE7CisJCQlrZnJlZV9za2Ioc2tiX29sZCk7CisJCX0KKworCQkvKiBkZWNyZW1lbnQgdHRsICovCisJCWljbXBfcGFja2V0LT50dGwtLTsKKworCQkvKiByb3V0ZSBpdCAqLworCQlzZW5kX3NrYl9wYWNrZXQoc2tiLCBiYXRtYW5faWYsIGRzdGFkZHIpOworCQlyZXQgPSBORVRfUlhfU1VDQ0VTUzsKKworCX0gZWxzZQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHJlY3ZfdW5pY2FzdF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQgKnVuaWNhc3RfcGFja2V0OworCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKKwlzdHJ1Y3QgZXRoaGRyICpldGhoZHI7CisJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmOworCXN0cnVjdCBza19idWZmICpza2Jfb2xkOworCXVpbnQ4X3QgZHN0YWRkcltFVEhfQUxFTl07CisJaW50IGhkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCB1bmljYXN0X3BhY2tldCk7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogZHJvcCBwYWNrZXQgaWYgaXQgaGFzIG5vdCBuZWNlc3NhcnkgbWluaW11bSBzaXplICovCisJaWYgKHNrYl9oZWFkbGVuKHNrYikgPCBoZHJfc2l6ZSkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJZXRoaGRyID0gKHN0cnVjdCBldGhoZHIgKikgc2tiX21hY19oZWFkZXIoc2tiKTsKKworCS8qIHBhY2tldCB3aXRoIHVuaWNhc3QgaW5kaWNhdGlvbiBidXQgYnJvYWRjYXN0IHJlY2lwaWVudCAqLworCWlmIChpc19iY2FzdChldGhoZHItPmhfZGVzdCkpCisJCXJldHVybiBORVRfUlhfRFJPUDsKKworCS8qIHBhY2tldCB3aXRoIGJyb2FkY2FzdCBzZW5kZXIgYWRkcmVzcyAqLworCWlmIChpc19iY2FzdChldGhoZHItPmhfc291cmNlKSkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJLyogbm90IGZvciBtZSAqLworCWlmICghaXNfbXlfbWFjKGV0aGhkci0+aF9kZXN0KSkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJdW5pY2FzdF9wYWNrZXQgPSAoc3RydWN0IHVuaWNhc3RfcGFja2V0ICopIHNrYi0+ZGF0YTsKKworCS8qIHBhY2tldCBmb3IgbWUgKi8KKwlpZiAoaXNfbXlfbWFjKHVuaWNhc3RfcGFja2V0LT5kZXN0KSkgeworCQlpbnRlcmZhY2Vfcngoc2tiLCBoZHJfc2l6ZSk7CisJCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKKwl9CisKKwkvKiBUVEwgZXhjZWVkZWQgKi8KKwlpZiAodW5pY2FzdF9wYWNrZXQtPnR0bCA8IDIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmF0bWFuLWFkdjpXYXJuaW5nIC0gY2FuJ3QgZm9yd2FyZCB1bmljYXN0IHBhY2tldCBmcm9tICVwTSB0byAlcE06IHR0bCBleGNlZWRlZFxuIiwKKwkJICAgICAgIGV0aGhkci0+aF9zb3VyY2UsIHVuaWNhc3RfcGFja2V0LT5kZXN0KTsKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCX0KKworCXJldCA9IE5FVF9SWF9EUk9QOworCS8qIGdldCByb3V0aW5nIGluZm9ybWF0aW9uICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CisJb3JpZ19ub2RlID0gKChzdHJ1Y3Qgb3JpZ19ub2RlICopCisJCSAgICAgaGFzaF9maW5kKG9yaWdfaGFzaCwgdW5pY2FzdF9wYWNrZXQtPmRlc3QpKTsKKworCWlmICgob3JpZ19ub2RlICE9IE5VTEwpICYmCisJICAgIChvcmlnX25vZGUtPmJhdG1hbl9pZiAhPSBOVUxMKSAmJgorCSAgICAob3JpZ19ub2RlLT5yb3V0ZXIgIT0gTlVMTCkpIHsKKworCQkvKiBkb24ndCBsb2NrIHdoaWxlIHNlbmRpbmcgdGhlIHBhY2tldHMgLi4uIHdlIHRoZXJlZm9yZQorCQkgKiBjb3B5IHRoZSByZXF1aXJlZCBkYXRhIGJlZm9yZSBzZW5kaW5nICovCisJCWJhdG1hbl9pZiA9IG9yaWdfbm9kZS0+YmF0bWFuX2lmOworCQltZW1jcHkoZHN0YWRkciwgb3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIsIEVUSF9BTEVOKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKKworCQkvKiBjcmVhdGUgYSBjb3B5IG9mIHRoZSBza2IsIGlmIG5lZWRlZCwgdG8gbW9kaWZ5IGl0LiAqLworCQlpZiAoIXNrYl9jbG9uZV93cml0YWJsZShza2IsIHNpemVvZihzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQpKSkgeworCQkJc2tiX29sZCA9IHNrYjsKKwkJCXNrYiA9IHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7CisJCQlpZiAoIXNrYikKKwkJCQlyZXR1cm4gTkVUX1JYX0RST1A7CisJCQl1bmljYXN0X3BhY2tldCA9IChzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQgKikgc2tiLT5kYXRhOworCQkJa2ZyZWVfc2tiKHNrYl9vbGQpOworCQl9CisJCS8qIGRlY3JlbWVudCB0dGwgKi8KKwkJdW5pY2FzdF9wYWNrZXQtPnR0bC0tOworCisJCS8qIHJvdXRlIGl0ICovCisJCXNlbmRfc2tiX3BhY2tldChza2IsIGJhdG1hbl9pZiwgZHN0YWRkcik7CisJCXJldCA9IE5FVF9SWF9TVUNDRVNTOworCisJfSBlbHNlCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCisKK2ludCByZWN2X2JjYXN0X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKKwlzdHJ1Y3QgYmNhc3RfcGFja2V0ICpiY2FzdF9wYWNrZXQ7CisJc3RydWN0IGV0aGhkciAqZXRoaGRyOworCWludCBoZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmNhc3RfcGFja2V0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogZHJvcCBwYWNrZXQgaWYgaXQgaGFzIG5vdCBuZWNlc3NhcnkgbWluaW11bSBzaXplICovCisJaWYgKHNrYl9oZWFkbGVuKHNrYikgPCBoZHJfc2l6ZSkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJZXRoaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpOworCisJLyogcGFja2V0IHdpdGggYnJvYWRjYXN0IGluZGljYXRpb24gYnV0IHVuaWNhc3QgcmVjaXBpZW50ICovCisJaWYgKCFpc19iY2FzdChldGhoZHItPmhfZGVzdCkpCisJCXJldHVybiBORVRfUlhfRFJPUDsKKworCS8qIHBhY2tldCB3aXRoIGJyb2FkY2FzdCBzZW5kZXIgYWRkcmVzcyAqLworCWlmIChpc19iY2FzdChldGhoZHItPmhfc291cmNlKSkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJLyogaWdub3JlIGJyb2FkY2FzdHMgc2VudCBieSBteXNlbGYgKi8KKwlpZiAoaXNfbXlfbWFjKGV0aGhkci0+aF9zb3VyY2UpKQorCQlyZXR1cm4gTkVUX1JYX0RST1A7CisKKwliY2FzdF9wYWNrZXQgPSAoc3RydWN0IGJjYXN0X3BhY2tldCAqKSBza2ItPmRhdGE7CisKKwkvKiBpZ25vcmUgYnJvYWRjYXN0cyBvcmlnaW5hdGVkIGJ5IG15c2VsZiAqLworCWlmIChpc19teV9tYWMoYmNhc3RfcGFja2V0LT5vcmlnKSkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CisJb3JpZ19ub2RlID0gKChzdHJ1Y3Qgb3JpZ19ub2RlICopCisJCSAgICAgaGFzaF9maW5kKG9yaWdfaGFzaCwgYmNhc3RfcGFja2V0LT5vcmlnKSk7CisKKwlpZiAob3JpZ19ub2RlID09IE5VTEwpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCX0KKworCS8qIGNoZWNrIGZsb29kIGhpc3RvcnkgKi8KKwlpZiAoZ2V0X2JpdF9zdGF0dXMob3JpZ19ub2RlLT5iY2FzdF9iaXRzLAorCQkJICAgb3JpZ19ub2RlLT5sYXN0X2JjYXN0X3NlcW5vLAorCQkJICAgbnRvaHMoYmNhc3RfcGFja2V0LT5zZXFubykpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CisJCXJldHVybiBORVRfUlhfRFJPUDsKKwl9CisKKwkvKiBtYXJrIGJyb2FkY2FzdCBpbiBmbG9vZCBoaXN0b3J5ICovCisJaWYgKGJpdF9nZXRfcGFja2V0KG9yaWdfbm9kZS0+YmNhc3RfYml0cywKKwkJCSAgIG50b2hzKGJjYXN0X3BhY2tldC0+c2Vxbm8pIC0KKwkJCSAgIG9yaWdfbm9kZS0+bGFzdF9iY2FzdF9zZXFubywgMSkpCisJCW9yaWdfbm9kZS0+bGFzdF9iY2FzdF9zZXFubyA9IG50b2hzKGJjYXN0X3BhY2tldC0+c2Vxbm8pOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKKworCS8qIHJlYnJvYWRjYXN0IHBhY2tldCAqLworCWFkZF9iY2FzdF9wYWNrZXRfdG9fbGlzdChza2IpOworCisJLyogYnJvYWRjYXN0IGZvciBtZSAqLworCWludGVyZmFjZV9yeChza2IsIGhkcl9zaXplKTsKKworCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKK30KKworaW50IHJlY3ZfdmlzX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCB2aXNfcGFja2V0ICp2aXNfcGFja2V0OworCXN0cnVjdCBldGhoZHIgKmV0aGhkcjsKKwlpbnQgaGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IHZpc19wYWNrZXQpOworCisJaWYgKHNrYl9oZWFkbGVuKHNrYikgPCBoZHJfc2l6ZSkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJdmlzX3BhY2tldCA9IChzdHJ1Y3QgdmlzX3BhY2tldCAqKSBza2ItPmRhdGE7CisJZXRoaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpOworCisJLyogbm90IGZvciBtZSAqLworCWlmICghaXNfbXlfbWFjKGV0aGhkci0+aF9kZXN0KSkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJLyogaWdub3JlIG93biBwYWNrZXRzICovCisJaWYgKGlzX215X21hYyh2aXNfcGFja2V0LT52aXNfb3JpZykpCisJCXJldHVybiBORVRfUlhfRFJPUDsKKworCWlmIChpc19teV9tYWModmlzX3BhY2tldC0+c2VuZGVyX29yaWcpKQorCQlyZXR1cm4gTkVUX1JYX0RST1A7CisKKwlzd2l0Y2ggKHZpc19wYWNrZXQtPnZpc190eXBlKSB7CisJY2FzZSBWSVNfVFlQRV9TRVJWRVJfU1lOQzoKKwkJLyogVE9ETzogaGFuZGxlIGZyYWdtZW50ZWQgc2ticyBwcm9wZXJseSAqLworCQlyZWNlaXZlX3NlcnZlcl9zeW5jX3BhY2tldCh2aXNfcGFja2V0LCBza2JfaGVhZGxlbihza2IpKTsKKwkJYnJlYWs7CisKKwljYXNlIFZJU19UWVBFX0NMSUVOVF9VUERBVEU6CisJCS8qIFRPRE86IGhhbmRsZSBmcmFnbWVudGVkIHNrYnMgcHJvcGVybHkgKi8KKwkJcmVjZWl2ZV9jbGllbnRfdXBkYXRlX3BhY2tldCh2aXNfcGFja2V0LCBza2JfaGVhZGxlbihza2IpKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgkvKiBpZ25vcmUgdW5rbm93biBwYWNrZXQgKi8KKwkJYnJlYWs7CisJfQorCisJLyogV2UgdGFrZSBhIGNvcHkgb2YgdGhlIGRhdGEgaW4gdGhlIHBhY2tldCwgc28gd2Ugc2hvdWxkCisJICAgYWx3YXlzIGZyZWUgdGhlIHNrYnVmLiAqLworCXJldHVybiBORVRfUlhfRFJPUDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3JvdXRpbmcuaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3JvdXRpbmcuaAppbmRleCAwMTIzZWE4Li45MzliOGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9yb3V0aW5nLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvcm91dGluZy5oCkBAIC0yMiwxMyArMjIsMTggQEAKICNpbmNsdWRlICJ0eXBlcy5oIgogCiBleHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgdGhyZWFkX3dhaXQ7Ci1leHRlcm4gYXRvbWljX3QgZXhpdF9jb25kOwogCi1pbnQgb3JpZ2luYXRvcl9pbml0KHZvaWQpOwotdm9pZCBmcmVlX29yaWdfbm9kZSh2b2lkICpkYXRhKTsKLXZvaWQgb3JpZ2luYXRvcl9mcmVlKHZvaWQpOwogdm9pZCBzbGlkZV9vd25fYmNhc3Rfd2luZG93KHN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZik7Ci12b2lkIGJhdG1hbl9kYXRhX3JlYWR5KHN0cnVjdCBzb2NrICpzaywgaW50IGxlbik7Ci12b2lkIHB1cmdlX29yaWcoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLWludCBwYWNrZXRfcmVjdl90aHJlYWQodm9pZCAqZGF0YSk7Ci12b2lkIHJlY2VpdmVfYmF0X3BhY2tldChzdHJ1Y3QgZXRoaGRyICpldGhoZHIsIHN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0LCB1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwgaW50IGhuYV9idWZmX2xlbiwgc3RydWN0IGJhdG1hbl9pZiAqaWZfaW5jb21pbmcpOwordm9pZCByZWNlaXZlX2JhdF9wYWNrZXQoc3RydWN0IGV0aGhkciAqZXRoaGRyLAorCQkJCXN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0LAorCQkJCXVuc2lnbmVkIGNoYXIgKmhuYV9idWZmLCBpbnQgaG5hX2J1ZmZfbGVuLAorCQkJCXN0cnVjdCBiYXRtYW5faWYgKmlmX2luY29taW5nKTsKK3ZvaWQgdXBkYXRlX3JvdXRlcyhzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCisJCQkJc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGUsCisJCQkJdW5zaWduZWQgY2hhciAqaG5hX2J1ZmYsIGludCBobmFfYnVmZl9sZW4pOworaW50IHJlY3ZfaWNtcF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgcmVjdl91bmljYXN0X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCByZWN2X2JjYXN0X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCByZWN2X3Zpc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgcmVjdl9iYXRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NlbmQuYyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NlbmQuYwppbmRleCBlYjYxNzUwLi4yYTlmYWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zZW5kLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc2VuZC5jCkBAIC0yMSwxNiArMjEsMTQgQEAKIAogI2luY2x1ZGUgIm1haW4uaCIKICNpbmNsdWRlICJzZW5kLmgiCi0jaW5jbHVkZSAibG9nLmgiCiAjaW5jbHVkZSAicm91dGluZy5oIgogI2luY2x1ZGUgInRyYW5zbGF0aW9uLXRhYmxlLmgiCisjaW5jbHVkZSAic29mdC1pbnRlcmZhY2UuaCIKICNpbmNsdWRlICJoYXJkLWludGVyZmFjZS5oIgogI2luY2x1ZGUgInR5cGVzLmgiCiAjaW5jbHVkZSAidmlzLmgiCiAjaW5jbHVkZSAiYWdncmVnYXRpb24uaCIKIAotI2luY2x1ZGUgImNvbXBhdC5oIgotCiAvKiBhcHBseSBob3AgcGVuYWx0eSBmb3IgYSBub3JtYWwgbGluayAqLwogc3RhdGljIHVpbnQ4X3QgaG9wX3BlbmFsdHkoY29uc3QgdWludDhfdCB0cSkKIHsKQEAgLTU5LDUxICs1Nyw2OSBAQAogCXJldHVybiBzZW5kX3RpbWU7CiB9CiAKLS8qIHNlbmRzIGEgcmF3IHBhY2tldC4gKi8KLXZvaWQgc2VuZF9yYXdfcGFja2V0KHVuc2lnbmVkIGNoYXIgKnBhY2tfYnVmZiwgaW50IHBhY2tfYnVmZl9sZW4sCi0JCSAgICAgc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmLCB1aW50OF90ICpkc3RfYWRkcikKKy8qIHNlbmQgb3V0IGFuIGFscmVhZHkgcHJlcGFyZWQgcGFja2V0IHRvIHRoZSBnaXZlbiBhZGRyZXNzIHZpYSB0aGUKKyAqIHNwZWNpZmllZCBiYXRtYW4gaW50ZXJmYWNlICovCitpbnQgc2VuZF9za2JfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmLAorCQkJCXVpbnQ4X3QgKmRzdF9hZGRyKQogewogCXN0cnVjdCBldGhoZHIgKmV0aGhkcjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCByZXR2YWw7Ci0JY2hhciAqZGF0YTsKIAogCWlmIChiYXRtYW5faWYtPmlmX2FjdGl2ZSAhPSBJRl9BQ1RJVkUpCi0JCXJldHVybjsKKwkJZ290byBzZW5kX3NrYl9lcnI7CisKKwlpZiAodW5saWtlbHkoIWJhdG1hbl9pZi0+bmV0X2RldikpCisJCWdvdG8gc2VuZF9za2JfZXJyOwogCiAJaWYgKCEoYmF0bWFuX2lmLT5uZXRfZGV2LT5mbGFncyAmIElGRl9VUCkpIHsKLQkJZGVidWdfbG9nKExPR19UWVBFX1dBUk4sCi0JCSAgICAgICAgICJJbnRlcmZhY2UgJXMgaXMgbm90IHVwIC0gY2FuJ3Qgc2VuZCBwYWNrZXQgdmlhIHRoYXQgaW50ZXJmYWNlIChJRl9UT19CRV9ERUFDVElWQVRFRCB3YXMgaGVyZSkgIVxuIiwKLQkJICAgICAgICAgIGJhdG1hbl9pZi0+ZGV2KTsKLQkJcmV0dXJuOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiYmF0bWFuLWFkdjpJbnRlcmZhY2UgJXMgaXMgbm90IHVwIC0gY2FuJ3Qgc2VuZCBwYWNrZXQgdmlhIHRoYXQgaW50ZXJmYWNlIVxuIiwKKwkJICAgICAgIGJhdG1hbl9pZi0+ZGV2KTsKKwkJZ290byBzZW5kX3NrYl9lcnI7CiAJfQogCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihwYWNrX2J1ZmZfbGVuICsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuOwotCWRhdGEgPSBza2JfcHV0KHNrYiwgcGFja19idWZmX2xlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7CisJLyogcHVzaCB0byB0aGUgZXRoZXJuZXQgaGVhZGVyLiAqLworCWlmIChteV9za2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSkgPCAwKQorCQlnb3RvIHNlbmRfc2tiX2VycjsKIAotCW1lbWNweShkYXRhICsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLCBwYWNrX2J1ZmYsIHBhY2tfYnVmZl9sZW4pOworCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAKLQlldGhoZHIgPSAoc3RydWN0IGV0aGhkciAqKSBkYXRhOworCWV0aGhkciA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYl9tYWNfaGVhZGVyKHNrYik7CiAJbWVtY3B5KGV0aGhkci0+aF9zb3VyY2UsIGJhdG1hbl9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAltZW1jcHkoZXRoaGRyLT5oX2Rlc3QsIGRzdF9hZGRyLCBFVEhfQUxFTik7CiAJZXRoaGRyLT5oX3Byb3RvID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9CQVRNQU4pOwogCi0Jc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKIAlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgRVRIX0hMRU4pOwogCXNrYi0+cHJpb3JpdHkgPSBUQ19QUklPX0NPTlRST0w7CiAJc2tiLT5wcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQkFUTUFOKTsKKwogCXNrYi0+ZGV2ID0gYmF0bWFuX2lmLT5uZXRfZGV2OwogCiAJLyogZGV2X3F1ZXVlX3htaXQoKSByZXR1cm5zIGEgbmVnYXRpdmUgcmVzdWx0IG9uIGVycm9yLgkgSG93ZXZlciBvbgogCSAqIGNvbmdlc3Rpb24gYW5kIHRyYWZmaWMgc2hhcGluZywgaXQgZHJvcHMgYW5kIHJldHVybnMgTkVUX1hNSVRfRFJPUAogCSAqICh3aGljaCBpcyA+IDApLiBUaGlzIHdpbGwgbm90IGJlIHRyZWF0ZWQgYXMgYW4gZXJyb3IuICovCi0JcmV0dmFsID0gZGV2X3F1ZXVlX3htaXQoc2tiKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJZGVidWdfbG9nKExPR19UWVBFX0NSSVQsCi0JCSAgICAgICAgICAiQ2FuJ3Qgd3JpdGUgdG8gcmF3IHNvY2tldCAoSUZfVE9fQkVfREVBQ1RJVkFURUQgd2FzIGhlcmUpOiAlaVxuIiwKLQkJICAgICAgICAgIHJldHZhbCk7CisKKwlyZXR1cm4gZGV2X3F1ZXVlX3htaXQoc2tiKTsKK3NlbmRfc2tiX2VycjoKKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gTkVUX1hNSVRfRFJPUDsKK30KKworLyogc2VuZHMgYSByYXcgcGFja2V0LiAqLwordm9pZCBzZW5kX3Jhd19wYWNrZXQodW5zaWduZWQgY2hhciAqcGFja19idWZmLCBpbnQgcGFja19idWZmX2xlbiwKKwkJICAgICBzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYsIHVpbnQ4X3QgKmRzdF9hZGRyKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJY2hhciAqZGF0YTsKKworCXNrYiA9IGRldl9hbGxvY19za2IocGFja19idWZmX2xlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7CisJaWYgKCFza2IpCisJCXJldHVybjsKKwlkYXRhID0gc2tiX3B1dChza2IsIHBhY2tfYnVmZl9sZW4gKyBzaXplb2Yoc3RydWN0IGV0aGhkcikpOworCW1lbWNweShkYXRhICsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLCBwYWNrX2J1ZmYsIHBhY2tfYnVmZl9sZW4pOworCS8qIHB1bGwgYmFjayB0byB0aGUgYmF0bWFuICJuZXR3b3JrIGhlYWRlciIgKi8KKwlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7CisJc2VuZF9za2JfcGFja2V0KHNrYiwgYmF0bWFuX2lmLCBkc3RfYWRkcik7CiB9CiAKIC8qIFNlbmQgYSBwYWNrZXQgdG8gYSBnaXZlbiBpbnRlcmZhY2UgKi8KQEAgLTExNCw3ICsxMzAsNiBAQAogCXVpbnQ4X3QgcGFja2V0X251bTsKIAlpbnQxNl90IGJ1ZmZfcG9zOwogCXN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0OwotCWNoYXIgb3JpZ19zdHJbRVRIX1NUUl9MRU5dOwogCiAJaWYgKGJhdG1hbl9pZi0+aWZfYWN0aXZlICE9IElGX0FDVElWRSkKIAkJcmV0dXJuOwpAQCAtMTM2LDE5ICsxNTEsMTggQEAKIAkJZWxzZQogCQkJYmF0bWFuX3BhY2tldC0+ZmxhZ3MgJj0gfkRJUkVDVExJTks7CiAKLQkJYWRkcl90b19zdHJpbmcob3JpZ19zdHIsIGJhdG1hbl9wYWNrZXQtPm9yaWcpOwogCQlmd2Rfc3RyID0gKHBhY2tldF9udW0gPiAwID8gIkZvcndhcmRpbmciIDogKGZvcndfcGFja2V0LT5vd24gPwogCQkJCQkJCSAgICAiU2VuZGluZyBvd24iIDoKIAkJCQkJCQkgICAgIkZvcndhcmRpbmciKSk7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9CQVRNQU4sCi0JCQkgICIlcyAlc3BhY2tldCAob3JpZ2luYXRvciAlcywgc2Vxbm8gJWQsIFRRICVkLCBUVEwgJWQsIElERiAlcykgb24gaW50ZXJmYWNlICVzIFslc11cbiIsCi0JCQkgIGZ3ZF9zdHIsCi0JCQkgIChwYWNrZXRfbnVtID4gMCA/ICJhZ2dyZWdhdGVkICIgOiAiIiksCi0JCQkgIG9yaWdfc3RyLCBudG9ocyhiYXRtYW5fcGFja2V0LT5zZXFubyksCi0JCQkgIGJhdG1hbl9wYWNrZXQtPnRxLCBiYXRtYW5fcGFja2V0LT50dGwsCi0JCQkgIChiYXRtYW5fcGFja2V0LT5mbGFncyAmIERJUkVDVExJTksgPwotCQkJICAgIm9uIiA6ICJvZmYiKSwKLQkJCSAgYmF0bWFuX2lmLT5kZXYsIGJhdG1hbl9pZi0+YWRkcl9zdHIpOworCQliYXRfZGJnKERCR19CQVRNQU4sCisJCQkiJXMgJXNwYWNrZXQgKG9yaWdpbmF0b3IgJXBNLCBzZXFubyAlZCwgVFEgJWQsIFRUTCAlZCwgSURGICVzKSBvbiBpbnRlcmZhY2UgJXMgWyVzXVxuIiwKKwkJCWZ3ZF9zdHIsCisJCQkocGFja2V0X251bSA+IDAgPyAiYWdncmVnYXRlZCAiIDogIiIpLAorCQkJYmF0bWFuX3BhY2tldC0+b3JpZywgbnRvaHMoYmF0bWFuX3BhY2tldC0+c2Vxbm8pLAorCQkJYmF0bWFuX3BhY2tldC0+dHEsIGJhdG1hbl9wYWNrZXQtPnR0bCwKKwkJCShiYXRtYW5fcGFja2V0LT5mbGFncyAmIERJUkVDVExJTksgPworCQkJICJvbiIgOiAib2ZmIiksCisJCQliYXRtYW5faWYtPmRldiwgYmF0bWFuX2lmLT5hZGRyX3N0cik7CiAKIAkJYnVmZl9wb3MgKz0gc2l6ZW9mKHN0cnVjdCBiYXRtYW5fcGFja2V0KSArCiAJCQkoYmF0bWFuX3BhY2tldC0+bnVtX2huYSAqIEVUSF9BTEVOKTsKQEAgLTE2OCwzMiArMTgyLDI4IEBACiAJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmOwogCXN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0ID0KIAkJKHN0cnVjdCBiYXRtYW5fcGFja2V0ICopKGZvcndfcGFja2V0LT5wYWNrZXRfYnVmZik7Ci0JY2hhciBvcmlnX3N0cltFVEhfU1RSX0xFTl07CiAJdW5zaWduZWQgY2hhciBkaXJlY3RsaW5rID0gKGJhdG1hbl9wYWNrZXQtPmZsYWdzICYgRElSRUNUTElOSyA/IDEgOiAwKTsKIAogCWlmICghZm9yd19wYWNrZXQtPmlmX2luY29taW5nKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9DUklULAotCQkJICAiRXJyb3IgLSBjYW4ndCBmb3J3YXJkIHBhY2tldDogaW5jb21pbmcgaWZhY2Ugbm90IHNwZWNpZmllZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjogRXJyb3IgLSBjYW4ndCBmb3J3YXJkIHBhY2tldDogaW5jb21pbmcgaWZhY2Ugbm90IHNwZWNpZmllZFxuIik7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoZm9yd19wYWNrZXQtPmlmX2luY29taW5nLT5pZl9hY3RpdmUgIT0gSUZfQUNUSVZFKQogCQlyZXR1cm47CiAKLQlhZGRyX3RvX3N0cmluZyhvcmlnX3N0ciwgYmF0bWFuX3BhY2tldC0+b3JpZyk7Ci0KIAkvKiBtdWx0aWhvbWVkIHBlZXIgYXNzdW1lZCAqLwogCS8qIG5vbi1wcmltYXJ5IE9HTXMgYXJlIG9ubHkgYnJvYWRjYXN0ZWQgb24gdGhlaXIgaW50ZXJmYWNlICovCiAJaWYgKChkaXJlY3RsaW5rICYmIChiYXRtYW5fcGFja2V0LT50dGwgPT0gMSkpIHx8CiAJICAgIChmb3J3X3BhY2tldC0+b3duICYmIChmb3J3X3BhY2tldC0+aWZfaW5jb21pbmctPmlmX251bSA+IDApKSkgewogCiAJCS8qIEZJWE1FOiB3aGF0IGFib3V0IGFnZ3JlZ2F0ZWQgcGFja2V0cyA/ICovCi0JCWRlYnVnX2xvZyhMT0dfVFlQRV9CQVRNQU4sCi0JCQkgICIlcyBwYWNrZXQgKG9yaWdpbmF0b3IgJXMsIHNlcW5vICVkLCBUVEwgJWQpIG9uIGludGVyZmFjZSAlcyBbJXNdXG4iLAotCQkJICAoZm9yd19wYWNrZXQtPm93biA/ICJTZW5kaW5nIG93biIgOiAiRm9yd2FyZGluZyIpLAotCQkJICBvcmlnX3N0ciwgbnRvaHMoYmF0bWFuX3BhY2tldC0+c2Vxbm8pLAotCQkJICBiYXRtYW5fcGFja2V0LT50dGwsIGZvcndfcGFja2V0LT5pZl9pbmNvbWluZy0+ZGV2LAotCQkJICBmb3J3X3BhY2tldC0+aWZfaW5jb21pbmctPmFkZHJfc3RyKTsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLAorCQkJIiVzIHBhY2tldCAob3JpZ2luYXRvciAlcE0sIHNlcW5vICVkLCBUVEwgJWQpIG9uIGludGVyZmFjZSAlcyBbJXNdXG4iLAorCQkJKGZvcndfcGFja2V0LT5vd24gPyAiU2VuZGluZyBvd24iIDogIkZvcndhcmRpbmciKSwKKwkJCWJhdG1hbl9wYWNrZXQtPm9yaWcsIG50b2hzKGJhdG1hbl9wYWNrZXQtPnNlcW5vKSwKKwkJCWJhdG1hbl9wYWNrZXQtPnR0bCwgZm9yd19wYWNrZXQtPmlmX2luY29taW5nLT5kZXYsCisJCQlmb3J3X3BhY2tldC0+aWZfaW5jb21pbmctPmFkZHJfc3RyKTsKIAogCQlzZW5kX3Jhd19wYWNrZXQoZm9yd19wYWNrZXQtPnBhY2tldF9idWZmLAogCQkJCWZvcndfcGFja2V0LT5wYWNrZXRfbGVuLApAQCAtMjM4LDYgKzI0OCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBzZW5kX3RpbWU7CiAJc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQ7CisJaW50IHZpc19zZXJ2ZXIgPSBhdG9taWNfcmVhZCgmdmlzX21vZGUpOwogCiAJLyoqCiAJICogdGhlIGludGVyZmFjZSBnZXRzIGFjdGl2YXRlZCBoZXJlIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuCkBAIC0yNjIsNyArMjczLDcgQEAKIAkvKiBjaGFuZ2Ugc2VxdWVuY2UgbnVtYmVyIHRvIG5ldHdvcmsgb3JkZXIgKi8KIAliYXRtYW5fcGFja2V0LT5zZXFubyA9IGh0b25zKCh1aW50MTZfdClhdG9taWNfcmVhZCgmYmF0bWFuX2lmLT5zZXFubykpOwogCi0JaWYgKGlzX3Zpc19zZXJ2ZXIoKSkKKwlpZiAodmlzX3NlcnZlciA9PSBWSVNfVFlQRV9TRVJWRVJfU1lOQykKIAkJYmF0bWFuX3BhY2tldC0+ZmxhZ3MgPSBWSVNfU0VSVkVSOwogCWVsc2UKIAkJYmF0bWFuX3BhY2tldC0+ZmxhZ3MgPSAwOwpAQCAtMjg2LDcgKzI5Nyw3IEBACiAJdW5zaWduZWQgbG9uZyBzZW5kX3RpbWU7CiAKIAlpZiAoYmF0bWFuX3BhY2tldC0+dHRsIDw9IDEpIHsKLQkJZGVidWdfbG9nKExPR19UWVBFX0JBVE1BTiwgInR0bCBleGNlZWRlZCBcbiIpOworCQliYXRfZGJnKERCR19CQVRNQU4sICJ0dGwgZXhjZWVkZWQgXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzE0LDkgKzMyNSw5IEBACiAJLyogYXBwbHkgaG9wIHBlbmFsdHkgKi8KIAliYXRtYW5fcGFja2V0LT50cSA9IGhvcF9wZW5hbHR5KGJhdG1hbl9wYWNrZXQtPnRxKTsKIAotCWRlYnVnX2xvZyhMT0dfVFlQRV9CQVRNQU4sICJGb3J3YXJkaW5nIHBhY2tldDogdHFfb3JpZzogJWksIHRxX2F2ZzogJWksIHRxX2Zvcnc6ICVpLCB0dGxfb3JpZzogJWksIHR0bF9mb3J3OiAlaSBcbiIsCi0JCSAgaW5fdHEsIHRxX2F2ZywgYmF0bWFuX3BhY2tldC0+dHEsIGluX3R0bCAtIDEsCi0JCSAgYmF0bWFuX3BhY2tldC0+dHRsKTsKKwliYXRfZGJnKERCR19CQVRNQU4sICJGb3J3YXJkaW5nIHBhY2tldDogdHFfb3JpZzogJWksIHRxX2F2ZzogJWksIHRxX2Zvcnc6ICVpLCB0dGxfb3JpZzogJWksIHR0bF9mb3J3OiAlaSBcbiIsCisJCWluX3RxLCB0cV9hdmcsIGJhdG1hbl9wYWNrZXQtPnRxLCBpbl90dGwgLSAxLAorCQliYXRtYW5fcGFja2V0LT50dGwpOwogCiAJYmF0bWFuX3BhY2tldC0+c2Vxbm8gPSBodG9ucyhiYXRtYW5fcGFja2V0LT5zZXFubyk7CiAKQEAgLTMzMyw2ICszNDQsOCBAQAogCiBzdGF0aWMgdm9pZCBmb3J3X3BhY2tldF9mcmVlKHN0cnVjdCBmb3J3X3BhY2tldCAqZm9yd19wYWNrZXQpCiB7CisJaWYgKGZvcndfcGFja2V0LT5za2IpCisJCWtmcmVlX3NrYihmb3J3X3BhY2tldC0+c2tiKTsKIAlrZnJlZShmb3J3X3BhY2tldC0+cGFja2V0X2J1ZmYpOwogCWtmcmVlKGZvcndfcGFja2V0KTsKIH0KQEAgLTM0MCwxMiArMzUzLDEzIEBACiBzdGF0aWMgdm9pZCBfYWRkX2JjYXN0X3BhY2tldF90b19saXN0KHN0cnVjdCBmb3J3X3BhY2tldCAqZm9yd19wYWNrZXQsCiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzZW5kX3RpbWUpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlJTklUX0hMSVNUX05PREUoJmZvcndfcGFja2V0LT5saXN0KTsKIAogCS8qIGFkZCBuZXcgcGFja2V0IHRvIHBhY2tldCBsaXN0ICovCi0Jc3Bpbl9sb2NrKCZmb3J3X2JjYXN0X2xpc3RfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmZvcndfYmNhc3RfbGlzdF9sb2NrLCBmbGFncyk7CiAJaGxpc3RfYWRkX2hlYWQoJmZvcndfcGFja2V0LT5saXN0LCAmZm9yd19iY2FzdF9saXN0KTsKLQlzcGluX3VubG9jaygmZm9yd19iY2FzdF9saXN0X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZvcndfYmNhc3RfbGlzdF9sb2NrLCBmbGFncyk7CiAKIAkvKiBzdGFydCB0aW1lciBmb3IgdGhpcyBwYWNrZXQgKi8KIAlJTklUX0RFTEFZRURfV09SSygmZm9yd19wYWNrZXQtPmRlbGF5ZWRfd29yaywKQEAgLTM1NCw3ICszNjgsNyBAQAogCQkJICAgc2VuZF90aW1lKTsKIH0KIAotdm9pZCBhZGRfYmNhc3RfcGFja2V0X3RvX2xpc3QodW5zaWduZWQgY2hhciAqcGFja2V0X2J1ZmYsIGludCBwYWNrZXRfbGVuKQordm9pZCBhZGRfYmNhc3RfcGFja2V0X3RvX2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgZm9yd19wYWNrZXQgKmZvcndfcGFja2V0OwogCkBAIC0zNjIsMTQgKzM3NiwxNiBAQAogCWlmICghZm9yd19wYWNrZXQpCiAJCXJldHVybjsKIAotCWZvcndfcGFja2V0LT5wYWNrZXRfYnVmZiA9IGttYWxsb2MocGFja2V0X2xlbiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFmb3J3X3BhY2tldC0+cGFja2V0X2J1ZmYpIHsKKwlza2IgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOworCWlmICghc2tiKSB7CiAJCWtmcmVlKGZvcndfcGFja2V0KTsKIAkJcmV0dXJuOwogCX0KIAotCWZvcndfcGFja2V0LT5wYWNrZXRfbGVuID0gcGFja2V0X2xlbjsKLQltZW1jcHkoZm9yd19wYWNrZXQtPnBhY2tldF9idWZmLCBwYWNrZXRfYnVmZiwgZm9yd19wYWNrZXQtPnBhY2tldF9sZW4pOworCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CisKKwlmb3J3X3BhY2tldC0+c2tiID0gc2tiOworCWZvcndfcGFja2V0LT5wYWNrZXRfYnVmZiA9IE5VTEw7CiAKIAkvKiBob3cgb2Z0ZW4gZGlkIHdlIHNlbmQgdGhlIGJjYXN0IHBhY2tldCA/ICovCiAJZm9yd19wYWNrZXQtPm51bV9wYWNrZXRzID0gMDsKQEAgLTM4NCwxNiArNDAwLDIwIEBACiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKIAlzdHJ1Y3QgZm9yd19wYWNrZXQgKmZvcndfcGFja2V0ID0KIAkJY29udGFpbmVyX29mKGRlbGF5ZWRfd29yaywgc3RydWN0IGZvcndfcGFja2V0LCBkZWxheWVkX3dvcmspOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjE7CiAKLQlzcGluX2xvY2soJmZvcndfYmNhc3RfbGlzdF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZm9yd19iY2FzdF9saXN0X2xvY2ssIGZsYWdzKTsKIAlobGlzdF9kZWwoJmZvcndfcGFja2V0LT5saXN0KTsKLQlzcGluX3VubG9jaygmZm9yd19iY2FzdF9saXN0X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZvcndfYmNhc3RfbGlzdF9sb2NrLCBmbGFncyk7CiAKIAkvKiByZWJyb2FkY2FzdCBwYWNrZXQgKi8KIAlyY3VfcmVhZF9sb2NrKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoYmF0bWFuX2lmLCAmaWZfbGlzdCwgbGlzdCkgewotCQlzZW5kX3Jhd19wYWNrZXQoZm9yd19wYWNrZXQtPnBhY2tldF9idWZmLAotCQkJCWZvcndfcGFja2V0LT5wYWNrZXRfbGVuLAorCQkvKiBzZW5kIGEgY29weSBvZiB0aGUgc2F2ZWQgc2tiICovCisJCXNrYjEgPSBza2JfY29weShmb3J3X3BhY2tldC0+c2tiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHNrYjEpCisJCQlzZW5kX3NrYl9wYWNrZXQoc2tiMSwKIAkJCQliYXRtYW5faWYsIGJyb2FkY2FzdEFkZHIpOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTQxNSwxMCArNDM1LDExIEBACiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKIAlzdHJ1Y3QgZm9yd19wYWNrZXQgKmZvcndfcGFja2V0ID0KIAkJY29udGFpbmVyX29mKGRlbGF5ZWRfd29yaywgc3RydWN0IGZvcndfcGFja2V0LCBkZWxheWVkX3dvcmspOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2soJmZvcndfYmF0X2xpc3RfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmZvcndfYmF0X2xpc3RfbG9jaywgZmxhZ3MpOwogCWhsaXN0X2RlbCgmZm9yd19wYWNrZXQtPmxpc3QpOwotCXNwaW5fdW5sb2NrKCZmb3J3X2JhdF9saXN0X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZvcndfYmF0X2xpc3RfbG9jaywgZmxhZ3MpOwogCiAJc2VuZF9wYWNrZXQoZm9yd19wYWNrZXQpOwogCkBAIC00MzgsMzggKzQ1OSwzOSBAQAogewogCXN0cnVjdCBmb3J3X3BhY2tldCAqZm9yd19wYWNrZXQ7CiAJc3RydWN0IGhsaXN0X25vZGUgKnRtcF9ub2RlLCAqc2FmZV90bXBfbm9kZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZGVidWdfbG9nKExPR19UWVBFX0JBVE1BTiwgInB1cmdlX291dHN0YW5kaW5nX3BhY2tldHMoKVxuIik7CisJYmF0X2RiZyhEQkdfQkFUTUFOLCAicHVyZ2Vfb3V0c3RhbmRpbmdfcGFja2V0cygpXG4iKTsKIAogCS8qIGZyZWUgYmNhc3QgbGlzdCAqLwotCXNwaW5fbG9jaygmZm9yd19iY2FzdF9saXN0X2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZmb3J3X2JjYXN0X2xpc3RfbG9jaywgZmxhZ3MpOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZm9yd19wYWNrZXQsIHRtcF9ub2RlLCBzYWZlX3RtcF9ub2RlLAogCQkJCSAgJmZvcndfYmNhc3RfbGlzdCwgbGlzdCkgewogCi0JCXNwaW5fdW5sb2NrKCZmb3J3X2JjYXN0X2xpc3RfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZvcndfYmNhc3RfbGlzdF9sb2NrLCBmbGFncyk7CiAKIAkJLyoqCiAJCSAqIHNlbmRfb3V0c3RhbmRpbmdfYmNhc3RfcGFja2V0KCkgd2lsbCBsb2NrIHRoZSBsaXN0IHRvCiAJCSAqIGRlbGV0ZSB0aGUgaXRlbSBmcm9tIHRoZSBsaXN0CiAJCSAqLwogCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmZvcndfcGFja2V0LT5kZWxheWVkX3dvcmspOwotCQlzcGluX2xvY2soJmZvcndfYmNhc3RfbGlzdF9sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmZvcndfYmNhc3RfbGlzdF9sb2NrLCBmbGFncyk7CiAJfQotCXNwaW5fdW5sb2NrKCZmb3J3X2JjYXN0X2xpc3RfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZm9yd19iY2FzdF9saXN0X2xvY2ssIGZsYWdzKTsKIAogCS8qIGZyZWUgYmF0bWFuIHBhY2tldCBsaXN0ICovCi0Jc3Bpbl9sb2NrKCZmb3J3X2JhdF9saXN0X2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZmb3J3X2JhdF9saXN0X2xvY2ssIGZsYWdzKTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvcndfcGFja2V0LCB0bXBfbm9kZSwgc2FmZV90bXBfbm9kZSwKIAkJCQkgICZmb3J3X2JhdF9saXN0LCBsaXN0KSB7CiAKLQkJc3Bpbl91bmxvY2soJmZvcndfYmF0X2xpc3RfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZvcndfYmF0X2xpc3RfbG9jaywgZmxhZ3MpOwogCiAJCS8qKgogCQkgKiBzZW5kX291dHN0YW5kaW5nX2JhdF9wYWNrZXQoKSB3aWxsIGxvY2sgdGhlIGxpc3QgdG8KIAkJICogZGVsZXRlIHRoZSBpdGVtIGZyb20gdGhlIGxpc3QKIAkJICovCiAJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZm9yd19wYWNrZXQtPmRlbGF5ZWRfd29yayk7Ci0JCXNwaW5fbG9jaygmZm9yd19iYXRfbGlzdF9sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmZvcndfYmF0X2xpc3RfbG9jaywgZmxhZ3MpOwogCX0KLQlzcGluX3VubG9jaygmZm9yd19iYXRfbGlzdF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmb3J3X2JhdF9saXN0X2xvY2ssIGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NlbmQuaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NlbmQuaAppbmRleCA1OWQ1MDA5Li41ZmM2ZjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zZW5kLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc2VuZC5oCkBAIC0yMiw2ICsyMiw5IEBACiAjaW5jbHVkZSAidHlwZXMuaCIKIAogdm9pZCBzZW5kX293bl9wYWNrZXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworaW50IHNlbmRfc2tiX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZiwKKwkJCQl1aW50OF90ICpkc3RfYWRkcik7CiB2b2lkIHNlbmRfcmF3X3BhY2tldCh1bnNpZ25lZCBjaGFyICpwYWNrX2J1ZmYsIGludCBwYWNrX2J1ZmZfbGVuLAogCQkgICAgIHN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZiwgdWludDhfdCAqZHN0X2FkZHIpOwogdm9pZCBzY2hlZHVsZV9vd25fcGFja2V0KHN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZik7CkBAIC0zMCw3ICszMyw3IEBACiAJCQkgICAgIHN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0LAogCQkJICAgICB1aW50OF90IGRpcmVjdGxpbmssIGludCBobmFfYnVmZl9sZW4sCiAJCQkgICAgIHN0cnVjdCBiYXRtYW5faWYgKmlmX291dGdvaW5nKTsKLXZvaWQgYWRkX2JjYXN0X3BhY2tldF90b19saXN0KHVuc2lnbmVkIGNoYXIgKnBhY2tldF9idWZmLCBpbnQgcGFja2V0X2xlbik7Cit2b2lkIGFkZF9iY2FzdF9wYWNrZXRfdG9fbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHZvaWQgc2VuZF9vdXRzdGFuZGluZ19iY2FzdF9wYWNrZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHZvaWQgc2VuZF9vdXRzdGFuZGluZ19iYXRfcGFja2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiB2b2lkIHB1cmdlX291dHN0YW5kaW5nX3BhY2tldHModm9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zb2Z0LWludGVyZmFjZS5jIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc29mdC1pbnRlcmZhY2UuYwppbmRleCBkNTQzZjUwLi5jOWIzNWQ5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc29mdC1pbnRlcmZhY2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zb2Z0LWludGVyZmFjZS5jCkBAIC0yNCwxOCArMjQsMTUgQEAKICNpbmNsdWRlICJoYXJkLWludGVyZmFjZS5oIgogI2luY2x1ZGUgInNlbmQuaCIKICNpbmNsdWRlICJ0cmFuc2xhdGlvbi10YWJsZS5oIgotI2luY2x1ZGUgImxvZy5oIgogI2luY2x1ZGUgInR5cGVzLmgiCiAjaW5jbHVkZSAiaGFzaC5oIgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgImNvbXBhdC5oIgogCiBzdGF0aWMgdWludDE2X3QgYmNhc3Rfc2Vxbm8gPSAxOyAvKiBnaXZlIG93biBiY2FzdCBtZXNzYWdlcyBzZXEgbnVtYmVycyB0byBhdm9pZAogCQkJCSAgKiBicm9hZGNhc3Qgc3Rvcm1zICovCiBzdGF0aWMgaW50MzJfdCBza2JfcGFja2V0czsKIHN0YXRpYyBpbnQzMl90IHNrYl9iYWRfcGFja2V0czsKLXN0YXRpYyBpbnQzMl90IGxvY2tfZHJvcHBlZDsKIAogdW5zaWduZWQgY2hhciBtYWluSWZBZGRyW0VUSF9BTEVOXTsKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1haW5JZkFkZHJfZGVmYXVsdFtFVEhfQUxFTl07CkBAIC02OCwxMiArNjUsMTIgQEAKIAlyZXR1cm4gKG1lbWNtcChtYWluSWZBZGRyLCBtYWluSWZBZGRyX2RlZmF1bHQsIEVUSF9BTEVOKSAhPSAwID8gMSA6IDApOwogfQogCi1zdGF0aWMgaW50IG15X3NrYl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCitpbnQgbXlfc2tiX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIAogCXNrYl9wYWNrZXRzKys7Ci0JaWYgKHNrYi0+ZGF0YSAtIGxlbiA8IHNrYi0+aGVhZCkgeworCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IGxlbikgewogCQlza2JfYmFkX3BhY2tldHMrKzsKIAkJcmVzdWx0ID0gcHNrYl9leHBhbmRfaGVhZChza2IsIGxlbiwgMCwgR0ZQX0FUT01JQyk7CiAKQEAgLTEyMiw3ICsxMTksNyBAQAogCiAJLyogZ2VuZXJhdGUgcmFuZG9tIGFkZHJlc3MgKi8KIAlyYW5kb21fZXRoZXJfYWRkcihkZXZfYWRkcik7Ci0JbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGRldl9hZGRyLCBzaXplb2YoZGV2LT5kZXZfYWRkcikpOworCW1lbWNweShkZXYtPmRldl9hZGRyLCBkZXZfYWRkciwgRVRIX0FMRU4pOwogCiAJU0VUX0VUSFRPT0xfT1BTKGRldiwgJmJhdF9ldGh0b29sX29wcyk7CiAKQEAgLTE0Nyw5ICsxNDQsMTggQEAKIAlyZXR1cm4gJnByaXYtPnN0YXRzOwogfQogCi1pbnQgaW50ZXJmYWNlX3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKQoraW50IGludGVyZmFjZV9zZXRfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKIHsKLQlyZXR1cm4gLUVCVVNZOworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCWhuYV9sb2NhbF9yZW1vdmUoZGV2LT5kZXZfYWRkciwgIm1hYyBhZGRyZXNzIGNoYW5nZWQiKTsKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgRVRIX0FMRU4pOworCWhuYV9sb2NhbF9hZGQoZGV2LT5kZXZfYWRkcik7CisKKwlyZXR1cm4gMDsKIH0KIAogaW50IGludGVyZmFjZV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQpAQCAtMTcwLDcgKzE3NiwxMCBAQAogCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKIAlzdHJ1Y3QgZXRoaGRyICpldGhoZHIgPSAoc3RydWN0IGV0aGhkciAqKXNrYi0+ZGF0YTsKIAlzdHJ1Y3QgYmF0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZjsKKwl1aW50OF90IGRzdGFkZHJbNl07CiAJaW50IGRhdGFfbGVuID0gc2tiLT5sZW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChhdG9taWNfcmVhZCgmbW9kdWxlX3N0YXRlKSAhPSBNT0RVTEVfQUNUSVZFKQogCQlnb3RvIGRyb3BwZWQ7CkBAIC0xODYsNyArMTk1LDYgQEAKIAkJCWdvdG8gZHJvcHBlZDsKIAogCQliY2FzdF9wYWNrZXQgPSAoc3RydWN0IGJjYXN0X3BhY2tldCAqKXNrYi0+ZGF0YTsKLQogCQliY2FzdF9wYWNrZXQtPnZlcnNpb24gPSBDT01QQVRfVkVSU0lPTjsKIAogCQkvKiBiYXRtYW4gcGFja2V0IHR5cGU6IGJyb2FkY2FzdCAqLwpAQCAtMTk1LDI3ICsyMDMsMjEgQEAKIAkJLyogaHcgYWRkcmVzcyBvZiBmaXJzdCBpbnRlcmZhY2UgaXMgdGhlIG9yaWcgbWFjIGJlY2F1c2Ugb25seQogCQkgKiB0aGlzIG1hYyBpcyBrbm93biB0aHJvdWdob3V0IHRoZSBtZXNoICovCiAJCW1lbWNweShiY2FzdF9wYWNrZXQtPm9yaWcsIG1haW5JZkFkZHIsIEVUSF9BTEVOKTsKKwogCQkvKiBzZXQgYnJvYWRjYXN0IHNlcXVlbmNlIG51bWJlciAqLwogCQliY2FzdF9wYWNrZXQtPnNlcW5vID0gaHRvbnMoYmNhc3Rfc2Vxbm8pOwogCiAJCWJjYXN0X3NlcW5vKys7CiAKIAkJLyogYnJvYWRjYXN0IHBhY2tldCAqLwotCQlhZGRfYmNhc3RfcGFja2V0X3RvX2xpc3Qoc2tiLT5kYXRhLCBza2ItPmxlbik7CisJCWFkZF9iY2FzdF9wYWNrZXRfdG9fbGlzdChza2IpOworCQkvKiBhIGNvcHkgaXMgc3RvcmVkIGluIHRoZSBiY2FzdCBsaXN0LCB0aGVyZWZvcmUgcmVtb3ZpbmcKKwkJICogdGhlIG9yaWdpbmFsIHNrYi4gKi8KKwkJa2ZyZWVfc2tiKHNrYik7CiAKIAkvKiB1bmljYXN0IHBhY2tldCAqLwogCX0gZWxzZSB7Ci0KLQkJLyogc2ltcGx5IHNwaW5fbG9jaygpaW5nIGNhbiBkZWFkbG9jayB3aGVuIHRoZSBsb2NrIGlzIGFscmVhZHkKLQkJICogaG9sZC4gKi8KLQkJLyogVE9ETzogZGVmZXIgdGhlIHdvcmsgaW4gYSB3b3JraW5nIHF1ZXVlIGluc3RlYWQgb2YKLQkJICogZHJvcHBpbmcgKi8KLQkJaWYgKCFzcGluX3RyeWxvY2soJm9yaWdfaGFzaF9sb2NrKSkgewotCQkJbG9ja19kcm9wcGVkKys7Ci0JCQlkZWJ1Z19sb2coTE9HX1RZUEVfTk9USUNFLCAiJWQgcGFja2V0cyBkcm9wcGVkIGJlY2F1c2UgbG9jayB3YXMgaG9sZFxuIiwgbG9ja19kcm9wcGVkKTsKLQkJCWdvdG8gZHJvcHBlZDsKLQkJfQotCisJCXNwaW5fbG9ja19pcnFzYXZlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOwogCQkvKiBnZXQgcm91dGluZyBpbmZvcm1hdGlvbiAqLwogCQlvcmlnX25vZGUgPSAoKHN0cnVjdCBvcmlnX25vZGUgKiloYXNoX2ZpbmQob3JpZ19oYXNoLAogCQkJCQkJCSAgIGV0aGhkci0+aF9kZXN0KSk7CkBAIC0yNDQsMTQgKzI0NiwxNyBAQAogCQkJaWYgKG9yaWdfbm9kZS0+YmF0bWFuX2lmLT5pZl9hY3RpdmUgIT0gSUZfQUNUSVZFKQogCQkJCWdvdG8gdW5sb2NrOwogCi0JCQlzZW5kX3Jhd19wYWNrZXQoc2tiLT5kYXRhLCBza2ItPmxlbiwKLQkJCQkJb3JpZ19ub2RlLT5iYXRtYW5faWYsCi0JCQkJCW9yaWdfbm9kZS0+cm91dGVyLT5hZGRyKTsKKwkJCS8qIGRvbid0IGxvY2sgd2hpbGUgc2VuZGluZyB0aGUgcGFja2V0cyAuLi4gd2UgdGhlcmVmb3JlCisJCQkgKiBjb3B5IHRoZSByZXF1aXJlZCBkYXRhIGJlZm9yZSBzZW5kaW5nICovCisKKwkJCWJhdG1hbl9pZiA9IG9yaWdfbm9kZS0+YmF0bWFuX2lmOworCQkJbWVtY3B5KGRzdGFkZHIsIG9yaWdfbm9kZS0+cm91dGVyLT5hZGRyLCBFVEhfQUxFTik7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOworCisJCQlzZW5kX3NrYl9wYWNrZXQoc2tiLCBiYXRtYW5faWYsIGRzdGFkZHIpOwogCQl9IGVsc2UgewogCQkJZ290byB1bmxvY2s7CiAJCX0KLQotCQlzcGluX3VubG9jaygmb3JpZ19oYXNoX2xvY2spOwogCX0KIAogCXByaXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKQEAgLTI1OSw0MiArMjY0LDQ0IEBACiAJZ290byBlbmQ7CiAKIHVubG9jazoKLQlzcGluX3VubG9jaygmb3JpZ19oYXNoX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CiBkcm9wcGVkOgogCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIGVuZDoKLQlrZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCi12b2lkIGludGVyZmFjZV9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwYWNrZXQsIGludCBwYWNrZXRfbGVuKQordm9pZCBpbnRlcmZhY2Vfcngoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhkcl9zaXplKQogewotCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNvZnRfZGV2aWNlOwogCXN0cnVjdCBiYXRfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKLQlza2IgPSBkZXZfYWxsb2Nfc2tiKHBhY2tldF9sZW4pOwotCi0JaWYgKCFza2IpIHsKLQkJcHJpdi0+c3RhdHMucnhfZHJvcHBlZCsrOwotCQlnb3RvIG91dDsKKwkvKiBjaGVjayBpZiBlbm91Z2ggc3BhY2UgaXMgYXZhaWxhYmxlIGZvciBwdWxsaW5nLCBhbmQgcHVsbCAqLworCWlmICghcHNrYl9tYXlfcHVsbChza2IsIGhkcl9zaXplKSkgeworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuOwogCX0KKwlza2JfcHVsbF9yY3N1bShza2IsIGhkcl9zaXplKTsKKy8qCXNrYl9zZXRfbWFjX2hlYWRlcihza2IsIC1zaXplb2Yoc3RydWN0IGV0aGhkcikpOyovCiAKLQltZW1jcHkoc2tiX3B1dChza2IsIHBhY2tldF9sZW4pLCBwYWNrZXQsIHBhY2tldF9sZW4pOwotCi0JLyogV3JpdGUgbWV0YWRhdGEsIGFuZCB0aGVuIHBhc3MgdG8gdGhlIHJlY2VpdmUgbGV2ZWwgKi8KIAlza2ItPmRldiA9IGRldjsKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwotCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisKKwkvKiBzaG91bGQgbm90IGJlIG5lY2Nlc2FyeSBhbnltb3JlIGFzIHdlIHVzZSBza2JfcHVsbF9yY3N1bSgpCisJICogVE9ETzogcGxlYXNlIHZlcmlmeSB0aGlzIGFuZCByZW1vdmUgdGhpcyBUT0RPCisJICogLS0gRGVjIDIxc3QgMjAwOSwgU2ltb24gV3VuZGVybGljaCAqLworCisvKglza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOyovCisKKwkvKiBUT0RPOiBzZXQgc2tiLT5wa3RfdHlwZSB0byBQQUNLRVRfQlJPQURDQVNULCBQQUNLRVRfTVVMVElDQVNULAorCSAqIFBBQ0tFVF9PVEhFUkhPU1Qgb3IgUEFDS0VUX0hPU1QgKi8KIAogCXByaXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSBwYWNrZXRfbGVuOworCXByaXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAogCW5ldGlmX3J4KHNrYik7Ci0KLW91dDoKLQlyZXR1cm47CiB9CiAKIC8qIGV0aHRvb2wgKi8KQEAgLTMzMCw3ICszMzcsNiBAQAogCiBzdGF0aWMgdm9pZCBiYXRfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiB2YWx1ZSkKIHsKLQlyZXR1cm47CiB9CiAKIHN0YXRpYyB1MzIgYmF0X2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zb2Z0LWludGVyZmFjZS5oIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc29mdC1pbnRlcmZhY2UuaAppbmRleCA1MTVlMjc2Li5jMGNhZDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zb2Z0LWludGVyZmFjZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NvZnQtaW50ZXJmYWNlLmgKQEAgLTI4LDYgKzI4LDcgQEAKIGludCBpbnRlcmZhY2Vfc2V0X21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpOwogaW50IGludGVyZmFjZV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KTsKIGludCBpbnRlcmZhY2VfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci12b2lkIGludGVyZmFjZV9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwYWNrZXQsIGludCBwYWNrZXRfbGVuKTsKK3ZvaWQgaW50ZXJmYWNlX3J4KHN0cnVjdCBza19idWZmICpza2IsIGludCBoZHJfc2l6ZSk7CitpbnQgbXlfc2tiX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbik7CiAKIGV4dGVybiB1bnNpZ25lZCBjaGFyIG1haW5JZkFkZHJbXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jCmluZGV4IGMyMTkwZTEuLmQ1NmY2NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYwpAQCAtMjEsMTEgKzIxLDkgQEAKIAogI2luY2x1ZGUgIm1haW4uaCIKICNpbmNsdWRlICJ0cmFuc2xhdGlvbi10YWJsZS5oIgotI2luY2x1ZGUgImxvZy5oIgogI2luY2x1ZGUgInNvZnQtaW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAidHlwZXMuaCIKICNpbmNsdWRlICJoYXNoLmgiCi0jaW5jbHVkZSAiY29tcGF0LmgiCiAKIHN0cnVjdCBoYXNodGFibGVfdCAqaG5hX2xvY2FsX2hhc2g7CiBzdGF0aWMgc3RydWN0IGhhc2h0YWJsZV90ICpobmFfZ2xvYmFsX2hhc2g7CkBAIC02Miw3ICs2MCw2IEBACiAJc3RydWN0IGhuYV9sb2NhbF9lbnRyeSAqaG5hX2xvY2FsX2VudHJ5OwogCXN0cnVjdCBobmFfZ2xvYmFsX2VudHJ5ICpobmFfZ2xvYmFsX2VudHJ5OwogCXN0cnVjdCBoYXNodGFibGVfdCAqc3dhcGhhc2g7Ci0JY2hhciBobmFfc3RyW0VUSF9TVFJfTEVOXTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhuYV9sb2NhbF9oYXNoX2xvY2ssIGZsYWdzKTsKQEAgLTc1LDE5ICs3MiwxNyBAQAogCQlyZXR1cm47CiAJfQogCi0JYWRkcl90b19zdHJpbmcoaG5hX3N0ciwgYWRkcik7Ci0KIAkvKiBvbmx5IGFubm91bmNlIGFzIG1hbnkgaG9zdHMgYXMgcG9zc2libGUgaW4gdGhlIGJhdG1hbi1wYWNrZXQgYW5kCiAJICAgc3BhY2UgaW4gYmF0bWFuX3BhY2tldC0+bnVtX2huYSBUaGF0IGFsc28gc2hvdWxkIGdpdmUgYSBsaW1pdCB0bwogCSAgIE1BQy1mbG9vZGluZy4gKi8KIAlpZiAoKG51bV9obmEgKyAxID4gKEVUSF9EQVRBX0xFTiAtIEJBVF9QQUNLRVRfTEVOKSAvIEVUSF9BTEVOKSB8fAogCSAgICAobnVtX2huYSArIDEgPiAyNTUpKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9ST1VURVMsICJDYW4ndCBhZGQgbmV3IGxvY2FsIGhuYSBlbnRyeSAoJXMpOiBudW1iZXIgb2YgbG9jYWwgaG5hIGVudHJpZXMgZXhjZWVkcyBwYWNrZXQgc2l6ZSBcbiIsIGhuYV9zdHIpOworCQliYXRfZGJnKERCR19ST1VURVMsICJDYW4ndCBhZGQgbmV3IGxvY2FsIGhuYSBlbnRyeSAoJXBNKTogbnVtYmVyIG9mIGxvY2FsIGhuYSBlbnRyaWVzIGV4Y2VlZHMgcGFja2V0IHNpemUgXG4iLCBhZGRyKTsKIAkJcmV0dXJuOwogCX0KIAotCWRlYnVnX2xvZyhMT0dfVFlQRV9ST1VURVMsICJDcmVhdGluZyBuZXcgbG9jYWwgaG5hIGVudHJ5OiAlcyBcbiIsCi0JCSAgaG5hX3N0cik7CisJYmF0X2RiZyhEQkdfUk9VVEVTLCAiQ3JlYXRpbmcgbmV3IGxvY2FsIGhuYSBlbnRyeTogJXBNIFxuIiwKKwkJYWRkcik7CiAKIAlobmFfbG9jYWxfZW50cnkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaG5hX2xvY2FsX2VudHJ5KSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFobmFfbG9jYWxfZW50cnkpCkBAIC0xMTMsNyArMTA4LDcgQEAKIAkJCQkgICAgICAgaG5hX2xvY2FsX2hhc2gtPnNpemUgKiAyKTsKIAogCQlpZiAoc3dhcGhhc2ggPT0gTlVMTCkKLQkJCWRlYnVnX2xvZyhMT0dfVFlQRV9DUklULCAiQ291bGRuJ3QgcmVzaXplIGxvY2FsIGhuYSBoYXNoIHRhYmxlIFxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6Q291bGRuJ3QgcmVzaXplIGxvY2FsIGhuYSBoYXNoIHRhYmxlIFxuIik7CiAJCWVsc2UKIAkJCWhuYV9sb2NhbF9oYXNoID0gc3dhcGhhc2g7CiAJfQpAQCAtMTM1LDE4ICsxMzAsMTggQEAKIGludCBobmFfbG9jYWxfZmlsbF9idWZmZXIodW5zaWduZWQgY2hhciAqYnVmZiwgaW50IGJ1ZmZfbGVuKQogewogCXN0cnVjdCBobmFfbG9jYWxfZW50cnkgKmhuYV9sb2NhbF9lbnRyeTsKLQlzdHJ1Y3QgaGFzaF9pdF90ICpoYXNoaXQgPSBOVUxMOworCUhBU0hJVChoYXNoaXQpOwogCWludCBpID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhuYV9sb2NhbF9oYXNoX2xvY2ssIGZsYWdzKTsKIAotCXdoaWxlIChOVUxMICE9IChoYXNoaXQgPSBoYXNoX2l0ZXJhdGUoaG5hX2xvY2FsX2hhc2gsIGhhc2hpdCkpKSB7CisJd2hpbGUgKGhhc2hfaXRlcmF0ZShobmFfbG9jYWxfaGFzaCwgJmhhc2hpdCkpIHsKIAogCQlpZiAoYnVmZl9sZW4gPCAoaSArIDEpICogRVRIX0FMRU4pCiAJCQlicmVhazsKIAotCQlobmFfbG9jYWxfZW50cnkgPSBoYXNoaXQtPmJ1Y2tldC0+ZGF0YTsKKwkJaG5hX2xvY2FsX2VudHJ5ID0gaGFzaGl0LmJ1Y2tldC0+ZGF0YTsKIAkJbWVtY3B5KGJ1ZmYgKyAoaSAqIEVUSF9BTEVOKSwgaG5hX2xvY2FsX2VudHJ5LT5hZGRyLCBFVEhfQUxFTik7CiAKIAkJaSsrOwpAQCAtMTY0LDE4ICsxNTksMTggQEAKIGludCBobmFfbG9jYWxfZmlsbF9idWZmZXJfdGV4dCh1bnNpZ25lZCBjaGFyICpidWZmLCBpbnQgYnVmZl9sZW4pCiB7CiAJc3RydWN0IGhuYV9sb2NhbF9lbnRyeSAqaG5hX2xvY2FsX2VudHJ5OwotCXN0cnVjdCBoYXNoX2l0X3QgKmhhc2hpdCA9IE5VTEw7CisJSEFTSElUKGhhc2hpdCk7CiAJaW50IGJ5dGVzX3dyaXR0ZW4gPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaG5hX2xvY2FsX2hhc2hfbG9jaywgZmxhZ3MpOwogCi0Jd2hpbGUgKE5VTEwgIT0gKGhhc2hpdCA9IGhhc2hfaXRlcmF0ZShobmFfbG9jYWxfaGFzaCwgaGFzaGl0KSkpIHsKKwl3aGlsZSAoaGFzaF9pdGVyYXRlKGhuYV9sb2NhbF9oYXNoLCAmaGFzaGl0KSkgewogCiAJCWlmIChidWZmX2xlbiA8IGJ5dGVzX3dyaXR0ZW4gKyBFVEhfU1RSX0xFTiArIDQpCiAJCQlicmVhazsKIAotCQlobmFfbG9jYWxfZW50cnkgPSBoYXNoaXQtPmJ1Y2tldC0+ZGF0YTsKKwkJaG5hX2xvY2FsX2VudHJ5ID0gaGFzaGl0LmJ1Y2tldC0+ZGF0YTsKIAogCQlieXRlc193cml0dGVuICs9IHNucHJpbnRmKGJ1ZmYgKyBieXRlc193cml0dGVuLCBFVEhfU1RSX0xFTiArIDQsCiAJCQkJCSAgIiAqICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLApAQCAtMjAyLDI3ICsxOTcsMzkgQEAKIHN0YXRpYyB2b2lkIGhuYV9sb2NhbF9kZWwoc3RydWN0IGhuYV9sb2NhbF9lbnRyeSAqaG5hX2xvY2FsX2VudHJ5LAogCQkJICBjaGFyICptZXNzYWdlKQogewotCWNoYXIgaG5hX3N0cltFVEhfU1RSX0xFTl07Ci0KLQlhZGRyX3RvX3N0cmluZyhobmFfc3RyLCBobmFfbG9jYWxfZW50cnktPmFkZHIpOwotCWRlYnVnX2xvZyhMT0dfVFlQRV9ST1VURVMsICJEZWxldGluZyBsb2NhbCBobmEgZW50cnkgKCVzKTogJXMgXG4iLAotCQkgIGhuYV9zdHIsIG1lc3NhZ2UpOworCWJhdF9kYmcoREJHX1JPVVRFUywgIkRlbGV0aW5nIGxvY2FsIGhuYSBlbnRyeSAoJXBNKTogJXMgXG4iLAorCQlobmFfbG9jYWxfZW50cnktPmFkZHIsIG1lc3NhZ2UpOwogCiAJaGFzaF9yZW1vdmUoaG5hX2xvY2FsX2hhc2gsIGhuYV9sb2NhbF9lbnRyeS0+YWRkcik7CiAJX2huYV9sb2NhbF9kZWwoaG5hX2xvY2FsX2VudHJ5KTsKIH0KIAordm9pZCBobmFfbG9jYWxfcmVtb3ZlKHVpbnQ4X3QgKmFkZHIsIGNoYXIgKm1lc3NhZ2UpCit7CisJc3RydWN0IGhuYV9sb2NhbF9lbnRyeSAqaG5hX2xvY2FsX2VudHJ5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG5hX2xvY2FsX2hhc2hfbG9jaywgZmxhZ3MpOworCisJaG5hX2xvY2FsX2VudHJ5ID0gKHN0cnVjdCBobmFfbG9jYWxfZW50cnkgKikKKwkJaGFzaF9maW5kKGhuYV9sb2NhbF9oYXNoLCBhZGRyKTsKKwlpZiAoaG5hX2xvY2FsX2VudHJ5KQorCQlobmFfbG9jYWxfZGVsKGhuYV9sb2NhbF9lbnRyeSwgbWVzc2FnZSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZobmFfbG9jYWxfaGFzaF9sb2NrLCBmbGFncyk7Cit9CisKIHZvaWQgaG5hX2xvY2FsX3B1cmdlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgaG5hX2xvY2FsX2VudHJ5ICpobmFfbG9jYWxfZW50cnk7Ci0Jc3RydWN0IGhhc2hfaXRfdCAqaGFzaGl0ID0gTlVMTDsKKwlIQVNISVQoaGFzaGl0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZobmFfbG9jYWxfaGFzaF9sb2NrLCBmbGFncyk7CiAKLQl3aGlsZSAoTlVMTCAhPSAoaGFzaGl0ID0gaGFzaF9pdGVyYXRlKGhuYV9sb2NhbF9oYXNoLCBoYXNoaXQpKSkgewotCQlobmFfbG9jYWxfZW50cnkgPSBoYXNoaXQtPmJ1Y2tldC0+ZGF0YTsKKwl3aGlsZSAoaGFzaF9pdGVyYXRlKGhuYV9sb2NhbF9oYXNoLCAmaGFzaGl0KSkgeworCQlobmFfbG9jYWxfZW50cnkgPSBoYXNoaXQuYnVja2V0LT5kYXRhOwogCiAJCXRpbWVvdXQgPSBobmFfbG9jYWxfZW50cnktPmxhc3Rfc2VlbiArCiAJCQkoKExPQ0FMX0hOQV9USU1FT1VUIC8gMTAwMCkgKiBIWik7CkBAIC0yNjQsMTMgKzI3MSwxMCBAQAogCXN0cnVjdCBobmFfZ2xvYmFsX2VudHJ5ICpobmFfZ2xvYmFsX2VudHJ5OwogCXN0cnVjdCBobmFfbG9jYWxfZW50cnkgKmhuYV9sb2NhbF9lbnRyeTsKIAlzdHJ1Y3QgaGFzaHRhYmxlX3QgKnN3YXBoYXNoOwotCWNoYXIgaG5hX3N0cltFVEhfU1RSX0xFTl0sIG9yaWdfc3RyW0VUSF9TVFJfTEVOXTsKIAlpbnQgaG5hX2J1ZmZfY291bnQgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgY2hhciAqaG5hX3B0cjsKIAotCWFkZHJfdG9fc3RyaW5nKG9yaWdfc3RyLCBvcmlnX25vZGUtPm9yaWcpOwotCiAJd2hpbGUgKChobmFfYnVmZl9jb3VudCArIDEpICogRVRIX0FMRU4gPD0gaG5hX2J1ZmZfbGVuKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZobmFfZ2xvYmFsX2hhc2hfbG9jaywgZmxhZ3MpOwogCkBAIC0yOTAsOCArMjk0LDkgQEAKIAogCQkJbWVtY3B5KGhuYV9nbG9iYWxfZW50cnktPmFkZHIsIGhuYV9wdHIsIEVUSF9BTEVOKTsKIAotCQkJYWRkcl90b19zdHJpbmcoaG5hX3N0ciwgaG5hX2dsb2JhbF9lbnRyeS0+YWRkcik7Ci0JCQlkZWJ1Z19sb2coTE9HX1RZUEVfUk9VVEVTLCAiQ3JlYXRpbmcgbmV3IGdsb2JhbCBobmEgZW50cnk6ICVzICh2aWEgJXMpXG4iLCBobmFfc3RyLCBvcmlnX3N0cik7CisJCQliYXRfZGJnKERCR19ST1VURVMsCisJCQkJIkNyZWF0aW5nIG5ldyBnbG9iYWwgaG5hIGVudHJ5OiAlcE0gKHZpYSAlcE0pXG4iLAorCQkJCWhuYV9nbG9iYWxfZW50cnktPmFkZHIsIG9yaWdfbm9kZS0+b3JpZyk7CiAKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZobmFfZ2xvYmFsX2hhc2hfbG9jaywgZmxhZ3MpOwogCQkJaGFzaF9hZGQoaG5hX2dsb2JhbF9oYXNoLCBobmFfZ2xvYmFsX2VudHJ5KTsKQEAgLTMxNiwxNCArMzIxLDE2IEBACiAJCWhuYV9idWZmX2NvdW50Kys7CiAJfQogCi0Jb3JpZ19ub2RlLT5obmFfYnVmZl9sZW4gPSBobmFfYnVmZl9sZW47CisJLyogaW5pdGlhbGl6ZSwgYW5kIG92ZXJ3cml0ZSBpZiBtYWxsb2Mgc3VjY2VlZHMgKi8KKwlvcmlnX25vZGUtPmhuYV9idWZmID0gTlVMTDsKKwlvcmlnX25vZGUtPmhuYV9idWZmX2xlbiA9IDA7CiAKLQlpZiAob3JpZ19ub2RlLT5obmFfYnVmZl9sZW4gPiAwKSB7Ci0JCW9yaWdfbm9kZS0+aG5hX2J1ZmYgPSBrbWFsbG9jKG9yaWdfbm9kZS0+aG5hX2J1ZmZfbGVuLAotCQkJCQkgICAgICBHRlBfQVRPTUlDKTsKLQkJbWVtY3B5KG9yaWdfbm9kZS0+aG5hX2J1ZmYsIGhuYV9idWZmLCBvcmlnX25vZGUtPmhuYV9idWZmX2xlbik7Ci0JfSBlbHNlIHsKLQkJb3JpZ19ub2RlLT5obmFfYnVmZiA9IE5VTEw7CisJaWYgKGhuYV9idWZmX2xlbiA+IDApIHsKKwkJb3JpZ19ub2RlLT5obmFfYnVmZiA9IGttYWxsb2MoaG5hX2J1ZmZfbGVuLCBHRlBfQVRPTUlDKTsKKwkJaWYgKG9yaWdfbm9kZS0+aG5hX2J1ZmYpIHsKKwkJCW1lbWNweShvcmlnX25vZGUtPmhuYV9idWZmLCBobmFfYnVmZiwgaG5hX2J1ZmZfbGVuKTsKKwkJCW9yaWdfbm9kZS0+aG5hX2J1ZmZfbGVuID0gaG5hX2J1ZmZfbGVuOworCQl9CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhuYV9nbG9iYWxfaGFzaF9sb2NrLCBmbGFncyk7CkBAIC0zMzMsNyArMzQwLDcgQEAKIAkJCQkgICAgICAgaG5hX2dsb2JhbF9oYXNoLT5zaXplICogMik7CiAKIAkJaWYgKHN3YXBoYXNoID09IE5VTEwpCi0JCQlkZWJ1Z19sb2coTE9HX1RZUEVfQ1JJVCwgIkNvdWxkbid0IHJlc2l6ZSBnbG9iYWwgaG5hIGhhc2ggdGFibGUgXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjpDb3VsZG4ndCByZXNpemUgZ2xvYmFsIGhuYSBoYXNoIHRhYmxlIFxuIik7CiAJCWVsc2UKIAkJCWhuYV9nbG9iYWxfaGFzaCA9IHN3YXBoYXNoOwogCX0KQEAgLTM0NCwxNyArMzUxLDE3IEBACiBpbnQgaG5hX2dsb2JhbF9maWxsX2J1ZmZlcl90ZXh0KHVuc2lnbmVkIGNoYXIgKmJ1ZmYsIGludCBidWZmX2xlbikKIHsKIAlzdHJ1Y3QgaG5hX2dsb2JhbF9lbnRyeSAqaG5hX2dsb2JhbF9lbnRyeTsKLQlzdHJ1Y3QgaGFzaF9pdF90ICpoYXNoaXQgPSBOVUxMOworCUhBU0hJVChoYXNoaXQpOwogCWludCBieXRlc193cml0dGVuID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhuYV9nbG9iYWxfaGFzaF9sb2NrLCBmbGFncyk7CiAKLQl3aGlsZSAoTlVMTCAhPSAoaGFzaGl0ID0gaGFzaF9pdGVyYXRlKGhuYV9nbG9iYWxfaGFzaCwgaGFzaGl0KSkpIHsKKwl3aGlsZSAoaGFzaF9pdGVyYXRlKGhuYV9nbG9iYWxfaGFzaCwgJmhhc2hpdCkpIHsKIAkJaWYgKGJ1ZmZfbGVuIDwgYnl0ZXNfd3JpdHRlbiArICgyICogRVRIX1NUUl9MRU4pICsgMTApCiAJCQlicmVhazsKIAotCQlobmFfZ2xvYmFsX2VudHJ5ID0gaGFzaGl0LT5idWNrZXQtPmRhdGE7CisJCWhuYV9nbG9iYWxfZW50cnkgPSBoYXNoaXQuYnVja2V0LT5kYXRhOwogCiAJCWJ5dGVzX3dyaXR0ZW4gKz0gc25wcmludGYoYnVmZiArIGJ5dGVzX3dyaXR0ZW4sCiAJCQkJCSAgKDIgKiBFVEhfU1RSX0xFTikgKyAxMCwKQEAgLTM4MSwxMiArMzg4LDkgQEAKIHZvaWQgX2huYV9nbG9iYWxfZGVsX29yaWcoc3RydWN0IGhuYV9nbG9iYWxfZW50cnkgKmhuYV9nbG9iYWxfZW50cnksCiAJCQkgIGNoYXIgKm1lc3NhZ2UpCiB7Ci0JY2hhciBobmFfc3RyW0VUSF9TVFJfTEVOXSwgb3JpZ19zdHJbRVRIX1NUUl9MRU5dOwotCi0JYWRkcl90b19zdHJpbmcob3JpZ19zdHIsIGhuYV9nbG9iYWxfZW50cnktPm9yaWdfbm9kZS0+b3JpZyk7Ci0JYWRkcl90b19zdHJpbmcoaG5hX3N0ciwgaG5hX2dsb2JhbF9lbnRyeS0+YWRkcik7Ci0KLQlkZWJ1Z19sb2coTE9HX1RZUEVfUk9VVEVTLCAiRGVsZXRpbmcgZ2xvYmFsIGhuYSBlbnRyeSAlcyAodmlhICVzKTogJXMgXG4iLCBobmFfc3RyLCBvcmlnX3N0ciwgbWVzc2FnZSk7CisJYmF0X2RiZyhEQkdfUk9VVEVTLCAiRGVsZXRpbmcgZ2xvYmFsIGhuYSBlbnRyeSAlcE0gKHZpYSAlcE0pOiAlcyBcbiIsCisJCWhuYV9nbG9iYWxfZW50cnktPmFkZHIsIGhuYV9nbG9iYWxfZW50cnktPm9yaWdfbm9kZS0+b3JpZywKKwkJbWVzc2FnZSk7CiAKIAloYXNoX3JlbW92ZShobmFfZ2xvYmFsX2hhc2gsIGhuYV9nbG9iYWxfZW50cnktPmFkZHIpOwogCWtmcmVlKGhuYV9nbG9iYWxfZW50cnkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmgKaW5kZXggZjdkYTgxMS4uMjgxMTI1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5oCkBAIC0yMyw2ICsyMyw3IEBACiAKIGludCBobmFfbG9jYWxfaW5pdCh2b2lkKTsKIHZvaWQgaG5hX2xvY2FsX2FkZCh1aW50OF90ICphZGRyKTsKK3ZvaWQgaG5hX2xvY2FsX3JlbW92ZSh1aW50OF90ICphZGRyLCBjaGFyICptZXNzYWdlKTsKIGludCBobmFfbG9jYWxfZmlsbF9idWZmZXIodW5zaWduZWQgY2hhciAqYnVmZiwgaW50IGJ1ZmZfbGVuKTsKIGludCBobmFfbG9jYWxfZmlsbF9idWZmZXJfdGV4dCh1bnNpZ25lZCBjaGFyICpidWZmLCBpbnQgYnVmZl9sZW4pOwogdm9pZCBobmFfbG9jYWxfcHVyZ2Uoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3R5cGVzLmggYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi90eXBlcy5oCmluZGV4IDNhMGVmMGMuLmRlYzFiNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3R5cGVzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvdHlwZXMuaApAQCAtMzksNyArMzksNiBAQAogCWNoYXIgaWZfYWN0aXZlOwogCWNoYXIgYWRkcl9zdHJbRVRIX1NUUl9MRU5dOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2OwotCXN0cnVjdCBzb2NrZXQgKnJhd19zb2NrOwogCWF0b21pY190IHNlcW5vOwogCXVuc2lnbmVkIGNoYXIgKnBhY2tldF9idWZmOwogCWludCBwYWNrZXRfbGVuOwpAQCAtNzUsNyArNzQsNyBAQAogCXVpbnQ4X3QgdHFfaW5kZXg7CiAJdWludDhfdCB0cV9hdmc7CiAJdWludDhfdCBsYXN0X3R0bDsKLQl1bnNpZ25lZCBsb25nIGxhc3RfdmFsaWQ7ICAgICAgICAgICAgLyogd2hlbiBsYXN0IHBhY2tldCB2aWEgdGhpcyBuZWlnaGJvdXIgd2FzIHJlY2VpdmVkICovCisJdW5zaWduZWQgbG9uZyBsYXN0X3ZhbGlkOyAgICAgICAgICAgIC8qIHdoZW4gbGFzdCBwYWNrZXQgdmlhIHRoaXMgbmVpZ2hib3Igd2FzIHJlY2VpdmVkICovCiAJVFlQRV9PRl9XT1JEIHJlYWxfYml0c1tOVU1fV09SRFNdOwogCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKIAlzdHJ1Y3QgYmF0bWFuX2lmICppZl9pbmNvbWluZzsKQEAgLTExMyw2ICsxMTIsNyBAQAogCXN0cnVjdCBobGlzdF9ub2RlIGxpc3Q7CiAJdW5zaWduZWQgbG9uZyBzZW5kX3RpbWU7CiAJdWludDhfdCBvd247CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1bnNpZ25lZCBjaGFyICpwYWNrZXRfYnVmZjsKIAl1aW50MTZfdCBwYWNrZXRfbGVuOwogCXVpbnQzMl90IGRpcmVjdF9saW5rX2ZsYWdzOwpAQCAtMTIxLDQgKzEyMSwxNCBAQAogCXN0cnVjdCBiYXRtYW5faWYgKmlmX2luY29taW5nOwogfTsKIAorLyogV2hpbGUgc2Nhbm5pbmcgZm9yIHZpcy1lbnRyaWVzIG9mIGEgcGFydGljdWxhciB2aXMtb3JpZ2luYXRvcgorICogdGhpcyBsaXN0IGNvbGxlY3RzIGl0cyBpbnRlcmZhY2VzIHRvIGNyZWF0ZSBhIHN1YmdyYXBoL2NsdXN0ZXIKKyAqIG91dCBvZiB0aGVtIGxhdGVyCisgKi8KK3N0cnVjdCBpZl9saXN0X2VudHJ5IHsKKwl1aW50OF90IGFkZHJbRVRIX0FMRU5dOworCWJvb2wgcHJpbWFyeTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBsaXN0OworfTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi92aXMuYyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3Zpcy5jCmluZGV4IGY2YzlhY2IuLmZlZGVjMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3Zpcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3Zpcy5jCkBAIC0yMywxMSArMjMsOSBAQAogI2luY2x1ZGUgInNlbmQuaCIKICNpbmNsdWRlICJ0cmFuc2xhdGlvbi10YWJsZS5oIgogI2luY2x1ZGUgInZpcy5oIgotI2luY2x1ZGUgImxvZy5oIgogI2luY2x1ZGUgInNvZnQtaW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiaGFyZC1pbnRlcmZhY2UuaCIKICNpbmNsdWRlICJoYXNoLmgiCi0jaW5jbHVkZSAiY29tcGF0LmgiCiAKIHN0cnVjdCBoYXNodGFibGVfdCAqdmlzX2hhc2g7CiBERUZJTkVfU1BJTkxPQ0sodmlzX2hhc2hfbG9jayk7CkBAIC01MCwzOSArNDgsNiBAQAogCWtmcmVlKGluZm8pOwogfQogCi0vKiBzZXQgdGhlIG1vZGUgb2YgdGhlIHZpc3VhbGl6YXRpb24gdG8gY2xpZW50IG9yIHNlcnZlciAqLwotdm9pZCB2aXNfc2V0X21vZGUoaW50IG1vZGUpCi17Ci0Jc3Bpbl9sb2NrKCZ2aXNfaGFzaF9sb2NrKTsKLQotCWlmIChteV92aXNfaW5mbyAhPSBOVUxMKQotCQlteV92aXNfaW5mby0+cGFja2V0LnZpc190eXBlID0gbW9kZTsKLQotCXNwaW5fdW5sb2NrKCZ2aXNfaGFzaF9sb2NrKTsKLX0KLQotLyogaXNfdmlzX3NlcnZlcigpLCBsb2NrZWQgb3V0c2lkZSAqLwotc3RhdGljIGludCBpc192aXNfc2VydmVyX2xvY2tlZCh2b2lkKQotewotCWlmIChteV92aXNfaW5mbyAhPSBOVUxMKQotCQlpZiAobXlfdmlzX2luZm8tPnBhY2tldC52aXNfdHlwZSA9PSBWSVNfVFlQRV9TRVJWRVJfU1lOQykKLQkJCXJldHVybiAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIGdldCB0aGUgY3VycmVudCBzZXQgbW9kZSAqLwotaW50IGlzX3Zpc19zZXJ2ZXIodm9pZCkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCXNwaW5fbG9jaygmdmlzX2hhc2hfbG9jayk7Ci0JcmV0ID0gaXNfdmlzX3NlcnZlcl9sb2NrZWQoKTsKLQlzcGluX3VubG9jaygmdmlzX2hhc2hfbG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiAvKiBDb21wYXJlIHR3byB2aXMgcGFja2V0cywgdXNlZCBieSB0aGUgaGFzaGluZyBhbGdvcml0aG0gKi8KIHN0YXRpYyBpbnQgdmlzX2luZm9fY21wKHZvaWQgKmRhdGExLCB2b2lkICpkYXRhMikKIHsKQEAgLTExNSw2ICs4MCw2OCBAQAogCXJldHVybiBoYXNoICUgc2l6ZTsKIH0KIAorLyogaW5zZXJ0IGludGVyZmFjZSB0byB0aGUgbGlzdCBvZiBpbnRlcmZhY2VzIG9mIG9uZSBvcmlnaW5hdG9yLCBpZiBpdAorICogZG9lcyBub3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgbGlzdCAqLworc3RhdGljIHZvaWQgcHJvY192aXNfaW5zZXJ0X2ludGVyZmFjZShjb25zdCB1aW50OF90ICppbnRlcmZhY2UsCisJCQkJICAgICAgc3RydWN0IGhsaXN0X2hlYWQgKmlmX2xpc3QsCisJCQkJICAgICAgYm9vbCBwcmltYXJ5KQoreworCXN0cnVjdCBpZl9saXN0X2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIHBvcywgaWZfbGlzdCwgbGlzdCkgeworCQlpZiAoY29tcGFyZV9vcmlnKGVudHJ5LT5hZGRyLCAodm9pZCAqKWludGVyZmFjZSkpCisJCQlyZXR1cm47CisJfQorCisJLyogaXRzIGEgbmV3IGFkZHJlc3MsIGFkZCBpdCB0byB0aGUgbGlzdCAqLworCWVudHJ5ID0ga21hbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuOworCW1lbWNweShlbnRyeS0+YWRkciwgaW50ZXJmYWNlLCBFVEhfQUxFTik7CisJZW50cnktPnByaW1hcnkgPSBwcmltYXJ5OworCWhsaXN0X2FkZF9oZWFkKCZlbnRyeS0+bGlzdCwgaWZfbGlzdCk7Cit9CisKK3ZvaWQgcHJvY192aXNfcmVhZF9wcmltX3NlYyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKKwkJCSAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqaWZfbGlzdCkKK3sKKwlzdHJ1Y3QgaWZfbGlzdF9lbnRyeSAqZW50cnk7CisJc3RydWN0IGhsaXN0X25vZGUgKnBvcywgKm47CisJY2hhciB0bXBfYWRkcl9zdHJbRVRIX1NUUl9MRU5dOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgcG9zLCBuLCBpZl9saXN0LCBsaXN0KSB7CisJCWlmIChlbnRyeS0+cHJpbWFyeSkgeworCQkJc2VxX3ByaW50ZihzZXEsICJQUklNQVJZLCAiKTsKKwkJfSBlbHNlIHsKKwkJCWFkZHJfdG9fc3RyaW5nKHRtcF9hZGRyX3N0ciwgZW50cnktPmFkZHIpOworCQkJc2VxX3ByaW50ZihzZXEsICJTRUMgJXMsICIsIHRtcF9hZGRyX3N0cik7CisJCX0KKworCQlobGlzdF9kZWwoJmVudHJ5LT5saXN0KTsKKwkJa2ZyZWUoZW50cnkpOworCX0KK30KKworLyogcmVhZCBhbiBlbnRyeSAgKi8KK3ZvaWQgcHJvY192aXNfcmVhZF9lbnRyeShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKKwkJCQlzdHJ1Y3QgdmlzX2luZm9fZW50cnkgKmVudHJ5LAorCQkJCXN0cnVjdCBobGlzdF9oZWFkICppZl9saXN0LAorCQkJCXVpbnQ4X3QgKnZpc19vcmlnKQoreworCWNoYXIgdG9bNDBdOworCisJYWRkcl90b19zdHJpbmcodG8sIGVudHJ5LT5kZXN0KTsKKwlpZiAoZW50cnktPnF1YWxpdHkgPT0gMCkgeworCQlwcm9jX3Zpc19pbnNlcnRfaW50ZXJmYWNlKHZpc19vcmlnLCBpZl9saXN0LCB0cnVlKTsKKwkJc2VxX3ByaW50ZihzZXEsICJITkEgJXMsICIsIHRvKTsKKwl9IGVsc2UgeworCQlwcm9jX3Zpc19pbnNlcnRfaW50ZXJmYWNlKGVudHJ5LT5zcmMsIGlmX2xpc3QsCisJCQkJCSAgY29tcGFyZV9vcmlnKGVudHJ5LT5zcmMsIHZpc19vcmlnKSk7CisJCXNlcV9wcmludGYoc2VxLCAiVFEgJXMgJWQsICIsIHRvLCBlbnRyeS0+cXVhbGl0eSk7CisJfQorfQorCiAvKiB0cmllcyB0byBhZGQgb25lIGVudHJ5IHRvIHRoZSByZWNlaXZlIGxpc3QuICovCiBzdGF0aWMgdm9pZCByZWN2X2xpc3RfYWRkKHN0cnVjdCBsaXN0X2hlYWQgKnJlY3ZfbGlzdCwgY2hhciAqbWFjKQogewpAQCAtMjA4LDIxICsyMzUsMjMgQEAKIHsKIAlzdHJ1Y3QgdmlzX2luZm8gKmluZm87CiAJaW50IGlzX25ldzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB2aXNfc2VydmVyID0gYXRvbWljX3JlYWQoJnZpc19tb2RlKTsKIAotCXNwaW5fbG9jaygmdmlzX2hhc2hfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnZpc19oYXNoX2xvY2ssIGZsYWdzKTsKIAlpbmZvID0gYWRkX3BhY2tldCh2aXNfcGFja2V0LCB2aXNfaW5mb19sZW4sICZpc19uZXcpOwogCWlmIChpbmZvID09IE5VTEwpCiAJCWdvdG8gZW5kOwogCiAJLyogb25seSBpZiB3ZSBhcmUgc2VydmVyIG91cnNlbHZlcyBhbmQgcGFja2V0IGlzIG5ld2VyIHRoYW4gdGhlIG9uZSBpbgogCSAqIGhhc2guKi8KLQlpZiAoaXNfdmlzX3NlcnZlcl9sb2NrZWQoKSAmJiBpc19uZXcpIHsKKwlpZiAodmlzX3NlcnZlciA9PSBWSVNfVFlQRV9TRVJWRVJfU1lOQyAmJiBpc19uZXcpIHsKIAkJbWVtY3B5KGluZm8tPnBhY2tldC50YXJnZXRfb3JpZywgYnJvYWRjYXN0QWRkciwgRVRIX0FMRU4pOwogCQlpZiAobGlzdF9lbXB0eSgmaW5mby0+c2VuZF9saXN0KSkKIAkJCWxpc3RfYWRkX3RhaWwoJmluZm8tPnNlbmRfbGlzdCwgJnNlbmRfbGlzdCk7CiAJfQogZW5kOgotCXNwaW5fdW5sb2NrKCZ2aXNfaGFzaF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aXNfaGFzaF9sb2NrLCBmbGFncyk7CiB9CiAKIC8qIGhhbmRsZSBhbiBpbmNvbWluZyBjbGllbnQgdXBkYXRlIHBhY2tldCBhbmQgc2NoZWR1bGUgZm9yd2FyZCBpZiBuZWVkZWQuICovCkBAIC0yMzEsMTIgKzI2MCwxNCBAQAogewogCXN0cnVjdCB2aXNfaW5mbyAqaW5mbzsKIAlpbnQgaXNfbmV3OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHZpc19zZXJ2ZXIgPSBhdG9taWNfcmVhZCgmdmlzX21vZGUpOwogCiAJLyogY2xpZW50cyBzaGFsbCBub3QgYnJvYWRjYXN0LiAqLwogCWlmIChpc19iY2FzdCh2aXNfcGFja2V0LT50YXJnZXRfb3JpZykpCiAJCXJldHVybjsKIAotCXNwaW5fbG9jaygmdmlzX2hhc2hfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnZpc19oYXNoX2xvY2ssIGZsYWdzKTsKIAlpbmZvID0gYWRkX3BhY2tldCh2aXNfcGFja2V0LCB2aXNfaW5mb19sZW4sICZpc19uZXcpOwogCWlmIChpbmZvID09IE5VTEwpCiAJCWdvdG8gZW5kOwpAQCAtMjQ0LDcgKzI3NSw3IEBACiAKIAogCS8qIHNlbmQgb25seSBpZiB3ZSdyZSB0aGUgdGFyZ2V0IHNlcnZlciBvciAuLi4gKi8KLQlpZiAoaXNfdmlzX3NlcnZlcl9sb2NrZWQoKSAmJgorCWlmICh2aXNfc2VydmVyID09IFZJU19UWVBFX1NFUlZFUl9TWU5DICAmJgogCSAgICBpc19teV9tYWMoaW5mby0+cGFja2V0LnRhcmdldF9vcmlnKSAmJgogCSAgICBpc19uZXcpIHsKIAkJaW5mby0+cGFja2V0LnZpc190eXBlID0gVklTX1RZUEVfU0VSVkVSX1NZTkM7CS8qIHVwZ3JhZGUhICovCkBAIC0yNTgsNyArMjg5LDcgQEAKIAkJCWxpc3RfYWRkX3RhaWwoJmluZm8tPnNlbmRfbGlzdCwgJnNlbmRfbGlzdCk7CiAJfQogZW5kOgotCXNwaW5fdW5sb2NrKCZ2aXNfaGFzaF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aXNfaGFzaF9sb2NrLCBmbGFncyk7CiB9CiAKIC8qIFdhbGsgdGhlIG9yaWdpbmF0b3JzIGFuZCBmaW5kIHRoZSBWSVMgc2VydmVyIHdpdGggdGhlIGJlc3QgdHEuIFNldCB0aGUgcGFja2V0CkBAIC0yNjcsMTIgKzI5OCwxMiBAQAogICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgb3JpZ2luYXRvciBoYXNoIGxvY2tlZCAqLwogc3RhdGljIGludCBmaW5kX2Jlc3RfdmlzX3NlcnZlcihzdHJ1Y3QgdmlzX2luZm8gKmluZm8pCiB7Ci0Jc3RydWN0IGhhc2hfaXRfdCAqaGFzaGl0ID0gTlVMTDsKKwlIQVNISVQoaGFzaGl0KTsKIAlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7CiAJaW50IGJlc3RfdHEgPSAtMTsKIAotCXdoaWxlIChOVUxMICE9IChoYXNoaXQgPSBoYXNoX2l0ZXJhdGUob3JpZ19oYXNoLCBoYXNoaXQpKSkgewotCQlvcmlnX25vZGUgPSBoYXNoaXQtPmJ1Y2tldC0+ZGF0YTsKKwl3aGlsZSAoaGFzaF9pdGVyYXRlKG9yaWdfaGFzaCwgJmhhc2hpdCkpIHsKKwkJb3JpZ19ub2RlID0gaGFzaGl0LmJ1Y2tldC0+ZGF0YTsKIAkJaWYgKChvcmlnX25vZGUgIT0gTlVMTCkgJiYKIAkJICAgIChvcmlnX25vZGUtPnJvdXRlciAhPSBOVUxMKSAmJgogCQkgICAgKG9yaWdfbm9kZS0+ZmxhZ3MgJiBWSVNfU0VSVkVSKSAmJgpAQCAtMjk4LDcgKzMyOSw4IEBACiAgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgaWYgbm8gcGFja2V0IGNvdWxkIGJlIGdlbmVyYXRlZCAqLwogc3RhdGljIGludCBnZW5lcmF0ZV92aXNfcGFja2V0KHZvaWQpCiB7Ci0Jc3RydWN0IGhhc2hfaXRfdCAqaGFzaGl0ID0gTlVMTDsKKwlIQVNISVQoaGFzaGl0X2xvY2FsKTsKKwlIQVNISVQoaGFzaGl0X2dsb2JhbCk7CiAJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOwogCXN0cnVjdCB2aXNfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgdmlzX2luZm8gKilteV92aXNfaW5mbzsKIAlzdHJ1Y3QgdmlzX2luZm9fZW50cnkgKmVudHJ5LCAqZW50cnlfYXJyYXk7CkBAIC0zMDcsMjcgKzMzOSwyNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpbmZvLT5maXJzdF9zZWVuID0gamlmZmllczsKKwlpbmZvLT5wYWNrZXQudmlzX3R5cGUgPSBhdG9taWNfcmVhZCgmdmlzX21vZGUpOwogCi0Jc3Bpbl9sb2NrKCZvcmlnX2hhc2hfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CiAJbWVtY3B5KGluZm8tPnBhY2tldC50YXJnZXRfb3JpZywgYnJvYWRjYXN0QWRkciwgRVRIX0FMRU4pOwogCWluZm8tPnBhY2tldC50dGwgPSBUVEw7CiAJaW5mby0+cGFja2V0LnNlcW5vKys7CiAJaW5mby0+cGFja2V0LmVudHJpZXMgPSAwOwogCi0JaWYgKCFpc192aXNfc2VydmVyX2xvY2tlZCgpKSB7CisJaWYgKGluZm8tPnBhY2tldC52aXNfdHlwZSA9PSBWSVNfVFlQRV9DTElFTlRfVVBEQVRFKSB7CiAJCWJlc3RfdHEgPSBmaW5kX2Jlc3RfdmlzX3NlcnZlcihpbmZvKTsKIAkJaWYgKGJlc3RfdHEgPCAwKSB7Ci0JCQlzcGluX3VubG9jaygmb3JpZ19oYXNoX2xvY2spOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCX0KLQloYXNoaXQgPSBOVUxMOwogCiAJZW50cnlfYXJyYXkgPSAoc3RydWN0IHZpc19pbmZvX2VudHJ5ICopCiAJCSgoY2hhciAqKWluZm8gKyBzaXplb2Yoc3RydWN0IHZpc19pbmZvKSk7CiAKLQl3aGlsZSAoTlVMTCAhPSAoaGFzaGl0ID0gaGFzaF9pdGVyYXRlKG9yaWdfaGFzaCwgaGFzaGl0KSkpIHsKLQkJb3JpZ19ub2RlID0gaGFzaGl0LT5idWNrZXQtPmRhdGE7CisJd2hpbGUgKGhhc2hfaXRlcmF0ZShvcmlnX2hhc2gsICZoYXNoaXRfZ2xvYmFsKSkgeworCQlvcmlnX25vZGUgPSBoYXNoaXRfZ2xvYmFsLmJ1Y2tldC0+ZGF0YTsKIAkJaWYgKG9yaWdfbm9kZS0+cm91dGVyICE9IE5VTEwKIAkJCSYmIGNvbXBhcmVfb3JpZyhvcmlnX25vZGUtPnJvdXRlci0+YWRkciwgb3JpZ19ub2RlLT5vcmlnKQogCQkJJiYgb3JpZ19ub2RlLT5iYXRtYW5faWYKQEAgLTM0MiwxOCArMzc0LDE3IEBACiAJCQlpbmZvLT5wYWNrZXQuZW50cmllcysrOwogCiAJCQlpZiAodmlzX3BhY2tldF9mdWxsKGluZm8pKSB7Ci0JCQkJc3Bpbl91bmxvY2soJm9yaWdfaGFzaF9sb2NrKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOwogCQkJCXJldHVybiAwOwogCQkJfQogCQl9CiAJfQogCi0Jc3Bpbl91bmxvY2soJm9yaWdfaGFzaF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOwogCi0JaGFzaGl0ID0gTlVMTDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaG5hX2xvY2FsX2hhc2hfbG9jaywgZmxhZ3MpOwotCXdoaWxlIChOVUxMICE9IChoYXNoaXQgPSBoYXNoX2l0ZXJhdGUoaG5hX2xvY2FsX2hhc2gsIGhhc2hpdCkpKSB7Ci0JCWhuYV9sb2NhbF9lbnRyeSA9IGhhc2hpdC0+YnVja2V0LT5kYXRhOworCXdoaWxlIChoYXNoX2l0ZXJhdGUoaG5hX2xvY2FsX2hhc2gsICZoYXNoaXRfbG9jYWwpKSB7CisJCWhuYV9sb2NhbF9lbnRyeSA9IGhhc2hpdF9sb2NhbC5idWNrZXQtPmRhdGE7CiAJCWVudHJ5ID0gJmVudHJ5X2FycmF5W2luZm8tPnBhY2tldC5lbnRyaWVzXTsKIAkJbWVtc2V0KGVudHJ5LT5zcmMsIDAsIEVUSF9BTEVOKTsKIAkJbWVtY3B5KGVudHJ5LT5kZXN0LCBobmFfbG9jYWxfZW50cnktPmFkZHIsIEVUSF9BTEVOKTsKQEAgLTM3MSwxNiArNDAyLDE2IEBACiAKIHN0YXRpYyB2b2lkIHB1cmdlX3Zpc19wYWNrZXRzKHZvaWQpCiB7Ci0Jc3RydWN0IGhhc2hfaXRfdCAqaGFzaGl0ID0gTlVMTDsKKwlIQVNISVQoaGFzaGl0KTsKIAlzdHJ1Y3QgdmlzX2luZm8gKmluZm87CiAKLQl3aGlsZSAoTlVMTCAhPSAoaGFzaGl0ID0gaGFzaF9pdGVyYXRlKHZpc19oYXNoLCBoYXNoaXQpKSkgewotCQlpbmZvID0gaGFzaGl0LT5idWNrZXQtPmRhdGE7CisJd2hpbGUgKGhhc2hfaXRlcmF0ZSh2aXNfaGFzaCwgJmhhc2hpdCkpIHsKKwkJaW5mbyA9IGhhc2hpdC5idWNrZXQtPmRhdGE7CiAJCWlmIChpbmZvID09IG15X3Zpc19pbmZvKQkvKiBuZXZlciBwdXJnZSBvd24gZGF0YS4gKi8KIAkJCWNvbnRpbnVlOwogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLAotCQkJICAgICAgIGluZm8tPmZpcnN0X3NlZW4gKyAoVklTX1RJTUVPVVQvMTAwMCkqSFopKSB7Ci0JCQloYXNoX3JlbW92ZV9idWNrZXQodmlzX2hhc2gsIGhhc2hpdCk7CisJCQkgICAgICAgaW5mby0+Zmlyc3Rfc2VlbiArIChWSVNfVElNRU9VVCpIWikvMTAwMCkpIHsKKwkJCWhhc2hfcmVtb3ZlX2J1Y2tldCh2aXNfaGFzaCwgJmhhc2hpdCk7CiAJCQlmcmVlX2luZm8oaW5mbyk7CiAJCX0KIAl9CkBAIC0zODgsMTQgKzQxOSwxNSBAQAogCiBzdGF0aWMgdm9pZCBicm9hZGNhc3RfdmlzX3BhY2tldChzdHJ1Y3QgdmlzX2luZm8gKmluZm8sIGludCBwYWNrZXRfbGVuZ3RoKQogewotCXN0cnVjdCBoYXNoX2l0X3QgKmhhc2hpdCA9IE5VTEw7CisJSEFTSElUKGhhc2hpdCk7CiAJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2soJm9yaWdfaGFzaF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKIAogCS8qIHNlbmQgdG8gYWxsIHJvdXRlcnMgaW4gcmFuZ2UuICovCi0Jd2hpbGUgKE5VTEwgIT0gKGhhc2hpdCA9IGhhc2hfaXRlcmF0ZShvcmlnX2hhc2gsIGhhc2hpdCkpKSB7Ci0JCW9yaWdfbm9kZSA9IGhhc2hpdC0+YnVja2V0LT5kYXRhOworCXdoaWxlIChoYXNoX2l0ZXJhdGUob3JpZ19oYXNoLCAmaGFzaGl0KSkgeworCQlvcmlnX25vZGUgPSBoYXNoaXQuYnVja2V0LT5kYXRhOwogCiAJCS8qIGlmIGl0J3MgYSB2aXMgc2VydmVyIGFuZCByZWFjaGFibGUsIHNlbmQgaXQuICovCiAJCWlmIChvcmlnX25vZGUgJiYKQEAgLTQxOCwxNCArNDUwLDE1IEBACiAJCX0KIAl9CiAJbWVtY3B5KGluZm8tPnBhY2tldC50YXJnZXRfb3JpZywgYnJvYWRjYXN0QWRkciwgRVRIX0FMRU4pOwotCXNwaW5fdW5sb2NrKCZvcmlnX2hhc2hfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgdW5pY2FzdF92aXNfcGFja2V0KHN0cnVjdCB2aXNfaW5mbyAqaW5mbywgaW50IHBhY2tldF9sZW5ndGgpCiB7CiAJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2soJm9yaWdfaGFzaF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKIAlvcmlnX25vZGUgPSAoKHN0cnVjdCBvcmlnX25vZGUgKikKIAkJICAgICBoYXNoX2ZpbmQob3JpZ19oYXNoLCBpbmZvLT5wYWNrZXQudGFyZ2V0X29yaWcpKTsKIApAQCAtNDM2LDcgKzQ2OSw3IEBACiAJCQkJb3JpZ19ub2RlLT5iYXRtYW5faWYsCiAJCQkJb3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIpOwogCX0KLQlzcGluX3VubG9jaygmb3JpZ19oYXNoX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CiB9CiAKIC8qIG9ubHkgc2VuZCBvbmUgdmlzIHBhY2tldC4gY2FsbGVkIGZyb20gc2VuZF92aXNfcGFja2V0cygpICovCkBAIC00NDUsOCArNDc4LDcgQEAKIAlpbnQgcGFja2V0X2xlbmd0aDsKIAogCWlmIChpbmZvLT5wYWNrZXQudHRsIDwgMikgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfTk9USUNFLAotCQkJICAiRXJyb3IgLSBjYW4ndCBzZW5kIHZpcyBwYWNrZXQ6IHR0bCBleGNlZWRlZFxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJhdG1hbi1hZHY6IEVycm9yIC0gY2FuJ3Qgc2VuZCB2aXMgcGFja2V0OiB0dGwgZXhjZWVkZWRcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC00NjcsOCArNDk5LDkgQEAKIHN0YXRpYyB2b2lkIHNlbmRfdmlzX3BhY2tldHMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCB2aXNfaW5mbyAqaW5mbywgKnRlbXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmdmlzX2hhc2hfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnZpc19oYXNoX2xvY2ssIGZsYWdzKTsKIAlwdXJnZV92aXNfcGFja2V0cygpOwogCiAJaWYgKGdlbmVyYXRlX3Zpc19wYWNrZXQoKSA9PSAwKQpAQCAtNDc5LDcgKzUxMiw3IEBACiAJCWxpc3RfZGVsX2luaXQoJmluZm8tPnNlbmRfbGlzdCk7CiAJCXNlbmRfdmlzX3BhY2tldChpbmZvKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJnZpc19oYXNoX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpc19oYXNoX2xvY2ssIGZsYWdzKTsKIAlzdGFydF92aXNfdGltZXIoKTsKIH0KIHN0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyh2aXNfdGltZXJfd3EsIHNlbmRfdmlzX3BhY2tldHMpOwpAQCAtNDg4LDIwICs1MjEsMjEgQEAKICAqIGluaXRpYWxpemVkIChlLmcuIGJhdDAgaXMgaW5pdGlhbGl6ZWQsIGludGVyZmFjZXMgaGF2ZSBiZWVuIGFkZGVkKSAqLwogaW50IHZpc19pbml0KHZvaWQpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpZiAodmlzX2hhc2gpCiAJCXJldHVybiAxOwogCi0Jc3Bpbl9sb2NrKCZ2aXNfaGFzaF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmlzX2hhc2hfbG9jaywgZmxhZ3MpOwogCiAJdmlzX2hhc2ggPSBoYXNoX25ldygyNTYsIHZpc19pbmZvX2NtcCwgdmlzX2luZm9fY2hvb3NlKTsKIAlpZiAoIXZpc19oYXNoKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9DUklULCAiQ2FuJ3QgaW5pdGlhbGl6ZSB2aXNfaGFzaFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjpDYW4ndCBpbml0aWFsaXplIHZpc19oYXNoXG4iKTsKIAkJZ290byBlcnI7CiAJfQogCiAJbXlfdmlzX2luZm8gPSBrbWFsbG9jKDEwMDAsIEdGUF9BVE9NSUMpOwogCWlmICghbXlfdmlzX2luZm8pIHsKLQkJZGVidWdfbG9nKExPR19UWVBFX0NSSVQsICJDYW4ndCBpbml0aWFsaXplIHZpcyBwYWNrZXRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6Q2FuJ3QgaW5pdGlhbGl6ZSB2aXMgcGFja2V0XG4iKTsKIAkJZ290byBlcnI7CiAJfQogCkBAIC01MTEsNyArNTQ1LDYgQEAKIAlJTklUX0xJU1RfSEVBRCgmbXlfdmlzX2luZm8tPnNlbmRfbGlzdCk7CiAJbXlfdmlzX2luZm8tPnBhY2tldC52ZXJzaW9uID0gQ09NUEFUX1ZFUlNJT047CiAJbXlfdmlzX2luZm8tPnBhY2tldC5wYWNrZXRfdHlwZSA9IEJBVF9WSVM7Ci0JbXlfdmlzX2luZm8tPnBhY2tldC52aXNfdHlwZSA9IFZJU19UWVBFX0NMSUVOVF9VUERBVEU7CiAJbXlfdmlzX2luZm8tPnBhY2tldC50dGwgPSBUVEw7CiAJbXlfdmlzX2luZm8tPnBhY2tldC5zZXFubyA9IDA7CiAJbXlfdmlzX2luZm8tPnBhY2tldC5lbnRyaWVzID0gMDsKQEAgLTUyMiwxOSArNTU1LDE5IEBACiAJbWVtY3B5KG15X3Zpc19pbmZvLT5wYWNrZXQuc2VuZGVyX29yaWcsIG1haW5JZkFkZHIsIEVUSF9BTEVOKTsKIAogCWlmIChoYXNoX2FkZCh2aXNfaGFzaCwgbXlfdmlzX2luZm8pIDwgMCkgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfQ1JJVCwKLQkJCSAgIkNhbid0IGFkZCBvd24gdmlzIHBhY2tldCBpbnRvIGhhc2hcbiIpOworCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgImJhdG1hbi1hZHY6Q2FuJ3QgYWRkIG93biB2aXMgcGFja2V0IGludG8gaGFzaFxuIik7CiAJCWZyZWVfaW5mbyhteV92aXNfaW5mbyk7CS8qIG5vdCBpbiBoYXNoLCBuZWVkIHRvIHJlbW92ZSBpdAogCQkJCQkgKiBtYW51YWxseS4gKi8KIAkJZ290byBlcnI7CiAJfQogCi0Jc3Bpbl91bmxvY2soJnZpc19oYXNoX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpc19oYXNoX2xvY2ssIGZsYWdzKTsKIAlzdGFydF92aXNfdGltZXIoKTsKIAlyZXR1cm4gMTsKIAogZXJyOgotCXNwaW5fdW5sb2NrKCZ2aXNfaGFzaF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aXNfaGFzaF9sb2NrLCBmbGFncyk7CiAJdmlzX3F1aXQoKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTU0MiwyMyArNTc1LDIzIEBACiAvKiBzaHV0ZG93biB2aXMtc2VydmVyICovCiB2b2lkIHZpc19xdWl0KHZvaWQpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpZiAoIXZpc19oYXNoKQogCQlyZXR1cm47CiAKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnZpc190aW1lcl93cSk7CiAKLQlzcGluX2xvY2soJnZpc19oYXNoX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZ2aXNfaGFzaF9sb2NrLCBmbGFncyk7CiAJLyogcHJvcGVybHkgcmVtb3ZlLCBraWxsIHRpbWVycyAuLi4gKi8KIAloYXNoX2RlbGV0ZSh2aXNfaGFzaCwgZnJlZV9pbmZvKTsKIAl2aXNfaGFzaCA9IE5VTEw7CiAJbXlfdmlzX2luZm8gPSBOVUxMOwotCXNwaW5fdW5sb2NrKCZ2aXNfaGFzaF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aXNfaGFzaF9sb2NrLCBmbGFncyk7CiB9CiAKIC8qIHNjaGVkdWxlIHBhY2tldHMgZm9yIChyZSl0cmFuc21pc3Npb24gKi8KIHN0YXRpYyB2b2lkIHN0YXJ0X3Zpc190aW1lcih2b2lkKQogewogCXF1ZXVlX2RlbGF5ZWRfd29yayhiYXRfZXZlbnRfd29ya3F1ZXVlLCAmdmlzX3RpbWVyX3dxLAotCQkJICAgKGF0b21pY19yZWFkKCZ2aXNfaW50ZXJ2YWwpLzEwMDApICogSFopOworCQkJICAgKGF0b21pY19yZWFkKCZ2aXNfaW50ZXJ2YWwpICogSFopIC8gMTAwMCk7CiB9Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3Zpcy5oIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvdmlzLmgKaW5kZXggMjc2ZmFiYS4uMGNkYWZkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvdmlzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvdmlzLmgKQEAgLTQ1LDE2ICs0NSwxNSBAQAogCXVpbnQ4X3QgbWFjW0VUSF9BTEVOXTsKIH07CiAKLWVudW0gdmlzX2Zvcm1hdHMgewotCURPVF9EUkFXLAotCUpTT04sCi19OwotCiBleHRlcm4gc3RydWN0IGhhc2h0YWJsZV90ICp2aXNfaGFzaDsKIGV4dGVybiBzcGlubG9ja190IHZpc19oYXNoX2xvY2s7CiAKLXZvaWQgdmlzX3NldF9tb2RlKGludCBtb2RlKTsKLWludCBpc192aXNfc2VydmVyKHZvaWQpOwordm9pZCBwcm9jX3Zpc19yZWFkX2VudHJ5KHN0cnVjdCBzZXFfZmlsZSAqc2VxLAorCQkJCXN0cnVjdCB2aXNfaW5mb19lbnRyeSAqZW50cnksCisJCQkJc3RydWN0IGhsaXN0X2hlYWQgKmlmX2xpc3QsCisJCQkJdWludDhfdCAqdmlzX29yaWcpOwordm9pZCBwcm9jX3Zpc19yZWFkX3ByaW1fc2VjKHN0cnVjdCBzZXFfZmlsZSAqc2VxLAorCQkJICAgIHN0cnVjdCBobGlzdF9oZWFkICppZl9saXN0KTsKIHZvaWQgcmVjZWl2ZV9zZXJ2ZXJfc3luY19wYWNrZXQoc3RydWN0IHZpc19wYWNrZXQgKnZpc19wYWNrZXQsCiAJCQkJaW50IHZpc19pbmZvX2xlbik7CiB2b2lkIHJlY2VpdmVfY2xpZW50X3VwZGF0ZV9wYWNrZXQoc3RydWN0IHZpc19wYWNrZXQgKnZpc19wYWNrZXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9jb21wYXQzMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfY29tcGF0MzIuYwppbmRleCBhOWZkY2RhLi41ODFhYTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9jb21wYXQzMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2NvbXBhdDMyLmMKQEAgLTI2LDcgKzI2LDYgQEAKIAogI2RlZmluZSBfX05PX1ZFUlNJT05fXwogI2luY2x1ZGUgImNvbWVkaS5oIgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAiY29tZWRpX2NvbXBhdDMyLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmMKaW5kZXggODExNzc0OC4uYWNhOTY3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2ZvcHMuYwpAQCAtNjMsNyArNjMsNyBAQAogaW50IGNvbWVkaV9hdXRvY29uZmlnID0gMTsKIG1vZHVsZV9wYXJhbShjb21lZGlfYXV0b2NvbmZpZywgYm9vbCwgMDQ0NCk7CiAKLWludCBjb21lZGlfbnVtX2xlZ2FjeV9taW5vcnMgPSAwOworaW50IGNvbWVkaV9udW1fbGVnYWN5X21pbm9yczsKIG1vZHVsZV9wYXJhbShjb21lZGlfbnVtX2xlZ2FjeV9taW5vcnMsIGludCwgMDQ0NCk7CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY29tZWRpX2ZpbGVfaW5mb190YWJsZV9sb2NrKTsKQEAgLTE1MTAsNyArMTUxMCw3IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90IGNvbWVkaV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLAotCQkJICAgIGxvZmZfdCAqIG9mZnNldCkKKwkJCQlsb2ZmX3QgKm9mZnNldCkKIHsKIAlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKQEAgLTE2MTIsNyArMTYxMiw3IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90IGNvbWVkaV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsCi0JCQkgICBsb2ZmX3QgKiBvZmZzZXQpCisJCQkJbG9mZl90ICpvZmZzZXQpCiB7CiAJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CkBAIC0yMDA0LDEyICsyMDA0LDEwIEBACiAJaWYgKGFzeW5jLT5jYl9tYXNrICYgcy0+YXN5bmMtPmV2ZW50cykgewogCQlpZiAoY29tZWRpX2dldF9zdWJkZXZpY2VfcnVuZmxhZ3MocykgJiBTUkZfVVNFUikgewogCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhc3luYy0+d2FpdF9oZWFkKTsKLQkJCWlmIChzLT5zdWJkZXZfZmxhZ3MgJiBTREZfQ01EX1JFQUQpIHsKKwkJCWlmIChzLT5zdWJkZXZfZmxhZ3MgJiBTREZfQ01EX1JFQUQpCiAJCQkJa2lsbF9mYXN5bmMoJmRldi0+YXN5bmNfcXVldWUsIFNJR0lPLCBQT0xMX0lOKTsKLQkJCX0KLQkJCWlmIChzLT5zdWJkZXZfZmxhZ3MgJiBTREZfQ01EX1dSSVRFKSB7CisJCQlpZiAocy0+c3ViZGV2X2ZsYWdzICYgU0RGX0NNRF9XUklURSkKIAkJCQlraWxsX2Zhc3luYygmZGV2LT5hc3luY19xdWV1ZSwgU0lHSU8sIFBPTExfT1VUKTsKLQkJCX0KIAkJfSBlbHNlIHsKIAkJCWlmIChhc3luYy0+Y2JfZnVuYykKIAkJCQlhc3luYy0+Y2JfZnVuYyhzLT5hc3luYy0+ZXZlbnRzLCBhc3luYy0+Y2JfYXJnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzLmMKaW5kZXggYzJhNjMyZC4uNDRkNmI2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KIAotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiBzdGF0aWMgaW50IHBvc3Rjb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CkBAIC05OSwxMSArOTksMTAgQEAKIHN0YXRpYyB2b2lkIF9fY29tZWRpX2RldmljZV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAlkZXYtPmF0dGFjaGVkID0gMDsKLQlpZiAoZGV2LT5kcml2ZXIpIHsKKwlpZiAoZGV2LT5kcml2ZXIpCiAJCWRldi0+ZHJpdmVyLT5kZXRhY2goZGV2KTsKLQl9IGVsc2UgeworCWVsc2UKIAkJcHJpbnRrKCJCVUc6IGRldi0+ZHJpdmVyPU5VTEwgaW4gY29tZWRpX2RldmljZV9kZXRhY2goKVxuIik7Ci0JfQogCWNsZWFudXBfZGV2aWNlKGRldik7CiB9CiAKQEAgLTM4MCw5ICszNzksOCBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKGluc24tPmluc24gPT0gSU5TTl9SRUFEKSB7CisJaWYgKGluc24tPmluc24gPT0gSU5TTl9SRUFEKQogCQlkYXRhWzBdID0gKG5ld19kYXRhWzFdID4+IChjaGFuIC0gYmFzZV9iaXRmaWVsZF9jaGFubmVsKSkgJiAxOwotCX0KIAogCXJldHVybiAxOwogfQpAQCAtNDI5LDkgKzQyNyw5IEBACiAJbmV3X3NpemUgPSAobmV3X3NpemUgKyBQQUdFX1NJWkUgLSAxKSAmIFBBR0VfTUFTSzsKIAogCS8qIGlmIG5vIGNoYW5nZSBpcyByZXF1aXJlZCwgZG8gbm90aGluZyAqLwotCWlmIChhc3luYy0+cHJlYWxsb2NfYnVmICYmIGFzeW5jLT5wcmVhbGxvY19idWZzeiA9PSBuZXdfc2l6ZSkgeworCWlmIChhc3luYy0+cHJlYWxsb2NfYnVmICYmIGFzeW5jLT5wcmVhbGxvY19idWZzeiA9PSBuZXdfc2l6ZSkKIAkJcmV0dXJuIDA7Ci0JfQorCiAJLyogIGRlYWxsb2NhdGUgb2xkIGJ1ZmZlciAqLwogCWlmIChhc3luYy0+cHJlYWxsb2NfYnVmKSB7CiAJCXZ1bm1hcChhc3luYy0+cHJlYWxsb2NfYnVmKTsKQEAgLTQ5NCw5ICs0OTIsOSBAQAogCQkJCQkgICAgKHZvaWQgKikKIAkJCQkJICAgIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAkJCQl9Ci0JCQkJaWYgKGFzeW5jLT5idWZfcGFnZV9saXN0W2ldLnZpcnRfYWRkciA9PSBOVUxMKSB7CisJCQkJaWYgKGFzeW5jLT5idWZfcGFnZV9saXN0W2ldLnZpcnRfYWRkciA9PSBOVUxMKQogCQkJCQlicmVhazsKLQkJCQl9CisKIAkJCQltZW1fbWFwX3Jlc2VydmUodmlydF90b19wYWdlCiAJCQkJCQkoYXN5bmMtPmJ1Zl9wYWdlX2xpc3RbaV0uCiAJCQkJCQkgdmlydF9hZGRyKSk7CkBAIC02MTksOSArNjE3LDkgQEAKIHsKIAl1bnNpZ25lZCBpbnQgZnJlZV9lbmQgPSBhc3luYy0+YnVmX3JlYWRfY291bnQgKyBhc3luYy0+cHJlYWxsb2NfYnVmc3o7CiAKLQlpZiAoKGludCkoYXN5bmMtPmJ1Zl93cml0ZV9hbGxvY19jb3VudCArIG5ieXRlcyAtIGZyZWVfZW5kKSA+IDApIHsKKwlpZiAoKGludCkoYXN5bmMtPmJ1Zl93cml0ZV9hbGxvY19jb3VudCArIG5ieXRlcyAtIGZyZWVfZW5kKSA+IDApCiAJCW5ieXRlcyA9IGZyZWVfZW5kIC0gYXN5bmMtPmJ1Zl93cml0ZV9hbGxvY19jb3VudDsKLQl9CisKIAlhc3luYy0+YnVmX3dyaXRlX2FsbG9jX2NvdW50ICs9IG5ieXRlczsKIAkvKiBiYXJyaWVyIGluc3VyZXMgdGhlIHJlYWQgb2YgYnVmX3JlYWRfY291bnQgYWJvdmUgb2NjdXJzIGJlZm9yZQogCSAgIHdlIHdyaXRlIGRhdGEgdG8gdGhlIHdyaXRlLWFsbG9jJ2VkIGJ1ZmZlciBzcGFjZSAqLwpAQCAtNjM1LDkgKzYzMyw5IEBACiB7CiAJdW5zaWduZWQgaW50IGZyZWVfZW5kID0gYXN5bmMtPmJ1Zl9yZWFkX2NvdW50ICsgYXN5bmMtPnByZWFsbG9jX2J1ZnN6OwogCi0JaWYgKChpbnQpKGFzeW5jLT5idWZfd3JpdGVfYWxsb2NfY291bnQgKyBuYnl0ZXMgLSBmcmVlX2VuZCkgPiAwKSB7CisJaWYgKChpbnQpKGFzeW5jLT5idWZfd3JpdGVfYWxsb2NfY291bnQgKyBuYnl0ZXMgLSBmcmVlX2VuZCkgPiAwKQogCQluYnl0ZXMgPSAwOwotCX0KKwogCWFzeW5jLT5idWZfd3JpdGVfYWxsb2NfY291bnQgKz0gbmJ5dGVzOwogCS8qIGJhcnJpZXIgaW5zdXJlcyB0aGUgcmVhZCBvZiBidWZfcmVhZF9jb3VudCBhYm92ZSBvY2N1cnMgYmVmb3JlCiAJICAgd2Ugd3JpdGUgZGF0YSB0byB0aGUgd3JpdGUtYWxsb2MnZWQgYnVmZmVyIHNwYWNlICovCkBAIC02NTcsOSArNjU1LDkgQEAKIAlhc3luYy0+YnVmX3dyaXRlX2NvdW50ICs9IG5ieXRlczsKIAlhc3luYy0+YnVmX3dyaXRlX3B0ciArPSBuYnl0ZXM7CiAJY29tZWRpX2J1Zl9tdW5nZShhc3luYywgYXN5bmMtPmJ1Zl93cml0ZV9jb3VudCAtIGFzeW5jLT5tdW5nZV9jb3VudCk7Ci0JaWYgKGFzeW5jLT5idWZfd3JpdGVfcHRyID49IGFzeW5jLT5wcmVhbGxvY19idWZzeikgeworCWlmIChhc3luYy0+YnVmX3dyaXRlX3B0ciA+PSBhc3luYy0+cHJlYWxsb2NfYnVmc3opCiAJCWFzeW5jLT5idWZfd3JpdGVfcHRyICU9IGFzeW5jLT5wcmVhbGxvY19idWZzejsKLQl9CisKIAlyZXR1cm4gbmJ5dGVzOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0Nocm9uby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9DaHJvbm8uYwppbmRleCAwYWYxMmZkLi5mYmMyNmEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0Nocm9uby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfQ2hyb25vLmMKQEAgLTE3LDcgKzE3LDcgQEAKIAogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIAotWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCitZb3Ugc2hvdWxkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCiAKIEBlbmR2ZXJiYXRpbQogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfRGlnX2lvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0RpZ19pby5jCmluZGV4IGYzZTQ3ZTUuLmE2ODk4ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfRGlnX2lvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9EaWdfaW8uYwpAQCAtMTcsNyArMTcsNyBAQAogCiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogCi1Zb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KK1lvdSBzaG91bGQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KIAogQGVuZHZlcmJhdGltCiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9JTkNDUFQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfSU5DQ1BULmMKaW5kZXggYTE1Yzk1Mi4uMGU0OThlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9JTkNDUFQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0lOQ0NQVC5jCkBAIC0xNyw3ICsxNyw3IEBACiAKIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAKLVlvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorWW91IHNob3VsZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgogCiBAZW5kdmVyYmF0aW0KICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0lucF9jcHQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfSW5wX2NwdC5jCmluZGV4IDBmYzIyODUuLjIwNGQ3OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfSW5wX2NwdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfSW5wX2NwdC5jCkBAIC0xNyw3ICsxNyw3IEBACiAKIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAKLVlvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorWW91IHNob3VsZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgogCiBAZW5kdmVyYmF0aW0KICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1B3bS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Qd20uYwppbmRleCAxMzhhODRmLi4xNDhjZTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1B3bS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfUHdtLmMKQEAgLTE3LDcgKzE3LDcgQEAKIAogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIAotWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCitZb3Ugc2hvdWxkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCiAKIEBlbmR2ZXJiYXRpbQogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfU3NpLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1NzaS5jCmluZGV4IGE0NDVkYWIuLjYzNjBkZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfU3NpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Tc2kuYwpAQCAtMTcsNyArMTcsNyBAQAogCiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogCi1Zb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KK1lvdSBzaG91bGQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KIAogQGVuZHZlcmJhdGltCiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Ub3IuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfVG9yLmMKaW5kZXggN2UxMjU0NC4uMzQ0ZGY5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Ub3IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1Rvci5jCkBAIC0xNyw3ICsxNyw3IEBACiAKIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAKLVlvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorWW91IHNob3VsZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgogCiBAZW5kdmVyYmF0aW0KICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1R0bC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9UdGwuYwppbmRleCBkM2Q3OGQzLi5kZTZmNzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1R0bC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfVHRsLmMKQEAgLTE3LDcgKzE3LDcgQEAKIAogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIAotWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCitZb3Ugc2hvdWxkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCiAKIEBlbmR2ZXJiYXRpbQogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9hbWNjX1M1OTIwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfYW1jY19TNTkyMC5jCmluZGV4IDZlOWU3ZWQuLjk3YzEwYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9hbWNjX1M1OTIwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2FtY2NfUzU5MjAuYwpAQCAtMTcsNyArMTcsNyBAQAogCiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogCi1Zb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KK1lvdSBzaG91bGQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KIAogQGVuZHZlcmJhdGltCiAqLwpAQCAtMTczLDExICsxNzMsMTAgQEAKIAkJCX0gd2hpbGUgKGR3X2VlcHJvbV9idXN5ID09IEVFUFJPTV9CVVNZKTsKIAogCQkJLyogU2VsZWN0IHRoZSB1cHBlciBhZGRyZXNzIHBhcnQgKi8KLQkJCWlmIChpX0NvdW50ZXIgPT0gMCkgeworCQkJaWYgKGlfQ291bnRlciA9PSAwKQogCQkJCWJfUmVhZExvd0J5dGUgPSBwYl9SZWFkQnl0ZVswXTsKLQkJCX0gZWxzZSB7CisJCQllbHNlCiAJCQkJYl9SZWFkSGlnaEJ5dGUgPSBwYl9SZWFkQnl0ZVswXTsKLQkJCX0KIAogCQkJLyogU2xlZXAgKi8KIAkJCW1zbGVlcCgxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9jb21tb24uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9jb21tb24uYwppbmRleCBhNTY1MzVmLi44ZGI1YWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2NvbW1vbi5jCkBAIC0xNyw3ICsxNyw3IEBACiAKIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAKLVlvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorWW91IHNob3VsZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgogCiBAZW5kdmVyYmF0aW0KICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfY29tbW9uLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfY29tbW9uLmgKaW5kZXggM2FiMjdjZi4uY2FlYjZmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9jb21tb24uaApAQCAtNzcsOCArNzcsOCBAQAogCWludCBpX05ickFvQ2hhbm5lbDsJLyogIG51bSBvZiBEL0EgY2hhbnMgKi8KIAlpbnQgaV9BaU1heGRhdGE7CS8qICByZXNvbHV0aW9uIG9mIEEvRCAqLwogCWludCBpX0FvTWF4ZGF0YTsJLyogIHJlc29sdXRpb24gb2YgRC9BICovCi0gICAgICAgIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpwcl9BaVJhbmdlbGlzdDsJLyogcmFuZ2VsaXN0IGZvciBBL0QgKi8KLSAgICAgICAgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKnByX0FvUmFuZ2VsaXN0OwkvKiByYW5nZWxpc3QgZm9yIEQvQSAqLworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpwcl9BaVJhbmdlbGlzdDsJLyogcmFuZ2VsaXN0IGZvciBBL0QgKi8KKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcHJfQW9SYW5nZWxpc3Q7CS8qIHJhbmdlbGlzdCBmb3IgRC9BICovCiAKIAlpbnQgaV9OYnJEaUNoYW5uZWw7CS8qICBOdW1iZXIgb2YgREkgY2hhbm5lbHMgKi8KIAlpbnQgaV9OYnJEb0NoYW5uZWw7CS8qICBOdW1iZXIgb2YgRE8gY2hhbm5lbHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9lZXByb20uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9lZXByb20uYwppbmRleCA2OWI0MjczLi5iZWEzMjlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfZWVwcm9tLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2VlcHJvbS5jCkBAIC0xNyw3ICsxNyw3IEBACiAKIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAKLVlvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorWW91IHNob3VsZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgogCiBAZW5kdmVyYmF0aW0KICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X0FQQ0kxNzEwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X0FQQ0kxNzEwLmMKaW5kZXggNDc1MTdhOS4uZDdkNzY4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9BUENJMTcxMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfQVBDSTE3MTAuYwpAQCAtMTcsNyArMTcsNyBAQAogCiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogCi1Zb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KK1lvdSBzaG91bGQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KIAogQGVuZHZlcmJhdGltCiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMDM1LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kwMzUuYwppbmRleCAwMTY3MjFlLi43OTEyOTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kwMzUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kwMzUuYwpAQCAtMTcsNyArMTcsNyBAQAogCiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogCi1Zb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KK1lvdSBzaG91bGQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KIAogQGVuZHZlcmJhdGltCiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTAzMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTAzMi5jCmluZGV4IDcyM2E5N2IuLmZlMDY3ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTEwMzIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxMDMyLmMKQEAgLTE3LDcgKzE3LDcgQEAKIAogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIAotWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCitZb3Ugc2hvdWxkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCiAKIEBlbmR2ZXJiYXRpbQogKi8KQEAgLTU0LDcgKzU0LDcgQEAKICNpbmNsdWRlICJod2Rydl9hcGNpMTAzMi5oIgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAvKiBHbG9iYWwgdmFyaWFibGVzICovCi11bnNpZ25lZCBpbnQgdWlfSW50ZXJydXB0U3RhdHVzID0gMDsKK3Vuc2lnbmVkIGludCB1aV9JbnRlcnJ1cHRTdGF0dXM7CiAKIC8qCiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTEwOCw5ICsxMDgsOSBAQAogCQkJdWlfVG1wVmFsdWUgPQogCQkJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTAzMl9ESUdJVEFMX0lQX0lSUSk7CiAJCX0JCS8qIGlmIChkYXRhWzFdID09IEFERElEQVRBX09SKSAqLwotCQllbHNlIHsKKwkJZWxzZQogCQkJb3V0bCgweDYsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxMDMyX0RJR0lUQUxfSVBfSVJRKTsKLQkJfQkJLyogZWxzZSBpZihkYXRhWzFdID09IEFERElEQVRBX09SKSAqLworCQkJCS8qIGVsc2UgaWYoZGF0YVsxXSA9PSBBRERJREFUQV9PUikgKi8KIAl9CQkJLyogIGlmKCBkYXRhWzBdID09IEFERElEQVRBX0VOQUJMRSkgKi8KIAllbHNlIHsKIAkJdWxfQ29tbWFuZDEgPSB1bF9Db21tYW5kMSAmIDB4RkZGRjAwMDA7CkBAIC0yMjEsOSArMjIxLDkgQEAKIAkJfQkJLyogc3dpdGNoKHVpX05vT2ZDaGFubmVscykgKi8KIAl9CQkJLyogaWYoZGF0YVsxXT09MCkgKi8KIAllbHNlIHsKLQkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQlpZiAoZGF0YVsxXSA9PSAxKQogCQkJKmRhdGEgPSB1aV9JbnRlcnJ1cHRTdGF0dXM7Ci0JCX0JCS8qIGlmKGRhdGFbMV09PTEpICovCisJCQkJLyogaWYoZGF0YVsxXT09MSkgKi8KIAl9CQkJLyogZWxzZSBpZihkYXRhWzFdPT0wKSAqLwogCXJldHVybiBpbnNuLT5uOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTUwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTUwMC5jCmluZGV4IDM2YjkyOWYuLmQ1ZTA2YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1MDAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTAwLmMKQEAgLTE3LDcgKzE3LDcgQEAKIAogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIAotWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCitZb3Ugc2hvdWxkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCiAKIEBlbmR2ZXJiYXRpbQogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1MTYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1MTYuYwppbmRleCA4NjZlYjhkLi43OTQ4YzQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTE2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTUxNi5jCkBAIC0xNyw3ICsxNyw3IEBACiAKIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAKLVlvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorWW91IHNob3VsZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgogCiBAZW5kdmVyYmF0aW0KICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTY0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTY0LmMKaW5kZXggM2FlNjYzYi4uNDQxMzI3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTU2NC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1NjQuYwpAQCAtMTcsNyArMTcsNyBAQAogCiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogCi1Zb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KK1lvdSBzaG91bGQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KIAogQGVuZHZlcmJhdGltCiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTZ4eC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTZ4eC5jCmluZGV4IDk4OGUzZmMuLjhiYzg4YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE2eHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNnh4LmMKQEAgLTE3LDcgKzE3LDcgQEAKIAogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIAotWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCitZb3Ugc2hvdWxkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCiAKIEBlbmR2ZXJiYXRpbQogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIwMTYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIwMTYuYwppbmRleCBkMzQ4Y2Q1Li44OTc4M2IxZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIwMTYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kyMDE2LmMKQEAgLTE3LDcgKzE3LDcgQEAKIAogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIAotWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCitZb3Ugc2hvdWxkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCiAKIEBlbmR2ZXJiYXRpbQogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIwMzIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIwMzIuYwppbmRleCBlYzgxNzA4Li4yZDMyNTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kyMDMyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjAzMi5jCkBAIC0xNyw3ICsxNyw3IEBACiAKIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAKLVlvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorWW91IHNob3VsZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgogCiBAZW5kdmVyYmF0aW0KICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kyMjAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kyMjAwLmMKaW5kZXggYWExNTlkYy4uZTAxODg5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjIwMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIyMDAuYwpAQCAtMTcsNyArMTcsNyBAQAogCiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogCi1Zb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KK1lvdSBzaG91bGQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KIAogQGVuZHZlcmJhdGltCiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzEyMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzEyMC5jCmluZGV4IDE3MmZiYTguLmY5M2RkZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMxMjAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMTIwLmMKQEAgLTE3LDcgKzE3LDcgQEAKIAogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIAotWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCitZb3Ugc2hvdWxkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCiAKIEBlbmR2ZXJiYXRpbQogKi8KQEAgLTQ1LDcgKzQ1LDcgQEAKICovCiAKICNpbmNsdWRlICJod2Rydl9hcGNpMzEyMC5oIgotc3RhdGljIHVuc2lnbmVkIGludCB1aV9UZW1wID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdWlfVGVtcDsKIAogLyogRlVOQ1RJT04gREVGSU5JVElPTlMgKi8KIApAQCAtOTgsMjUgKzk4LDIyIEBACiAKIAkJZGV2cHJpdi0+Yl9JbnRlcnJ1cHRNb2RlID0gQVBDSTMxMjBfRU9TX01PREU7CiAKLQkJaWYgKGRhdGFbMV0pIHsKKwkJaWYgKGRhdGFbMV0pCiAJCQlkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9IEFQQ0kzMTIwX0VOQUJMRTsKLQkJfSBlbHNlCisJCWVsc2UKIAkJCWRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID0gQVBDSTMxMjBfRElTQUJMRTsKIAkJLyogIENvcHkgY2hhbm5lbCBsaXN0IGFuZCBSYW5nZSBMaXN0IHRvIGRldnByaXYgKi8KIAogCQlkZXZwcml2LT51aV9BaU5icm9mQ2hhbm5lbHMgPSBkYXRhWzNdOwotCQlmb3IgKGkgPSAwOyBpIDwgZGV2cHJpdi0+dWlfQWlOYnJvZkNoYW5uZWxzOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IGRldnByaXYtPnVpX0FpTmJyb2ZDaGFubmVsczsgaSsrKQogCQkJZGV2cHJpdi0+dWlfQWlDaGFubmVsTGlzdFtpXSA9IGRhdGFbNCArIGldOwotCQl9CiAKLQl9IGVsc2UJCQkvKiAgRU9DICovCi0JeworCX0gZWxzZSB7CQkJLyogIEVPQyAqLwogCQlkZXZwcml2LT5iX0ludGVycnVwdE1vZGUgPSBBUENJMzEyMF9FT0NfTU9ERTsKLQkJaWYgKGRhdGFbMV0pIHsKKwkJaWYgKGRhdGFbMV0pCiAJCQlkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9IEFQQ0kzMTIwX0VOQUJMRTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJZGV2cHJpdi0+Yl9Fb2NFb3NJbnRlcnJ1cHQgPSBBUENJMzEyMF9ESVNBQkxFOwotCQl9CiAJfQogCiAJcmV0dXJuIGluc24tPm47CkBAIC0xNjYsMTMgKzE2Myw5IEBACiAJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgPSAwOwogLyogZGV2cHJpdi0+Yl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXI9MDsgKi8KIAotCWlmIChpbnNuLT51bnVzZWRbMF0gPT0gMjIyKQkvKiAgc2Vjb25kIGluc24gcmVhZCAqLwotCXsKLQotCQlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJaWYgKGluc24tPnVudXNlZFswXSA9PSAyMjIpIHsJLyogIHNlY29uZCBpbnNuIHJlYWQgKi8KKwkJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykKIAkJCWRhdGFbaV0gPSBkZXZwcml2LT51aV9BaVJlYWREYXRhW2ldOwotCQl9Ci0KIAl9IGVsc2UgewogCQlkZXZwcml2LT50c2tfQ3VycmVudCA9IGN1cnJlbnQ7CS8qICBTYXZlIHRoZSBjdXJyZW50IHByb2Nlc3MgdGFzayBzdHJ1Y3R1cmUgKi8KIC8qCkBAIC01MTksOSArNTEyLDggQEAKIAogCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCiAKLQlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19OT1cgJiYgY21kLT5zdGFydF9zcmMgIT0gVFJJR19FWFQpIHsKKwlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19OT1cgJiYgY21kLT5zdGFydF9zcmMgIT0gVFJJR19FWFQpCiAJCWVycisrOwotCX0KIAogCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKIAkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVykKQEAgLTU0OCwxNiArNTQwLDE0IEBACiAJCWVycisrOwogCX0KIAotCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpCS8qICBUZXN0IERlbGF5IHRpbWluZyAqLwotCXsKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CS8qICBUZXN0IERlbGF5IHRpbWluZyAqLwogCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IHRoaXNfYm9hcmQtPnVpX01pbkRlbGF5dGltZU5zKSB7CiAJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gdGhpc19ib2FyZC0+dWlfTWluRGVsYXl0aW1lTnM7CiAJCQllcnIrKzsKIAkJfQogCX0KIAotCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpCS8qICBUZXN0IEFjcXVpc2l0aW9uIHRpbWluZyAqLwotCXsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CS8qICBUZXN0IEFjcXVpc2l0aW9uIHRpbWluZyAqLwogCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CiAJCQlpZiAoKGNtZC0+Y29udmVydF9hcmcpCiAJCQkJJiYgKGNtZC0+Y29udmVydF9hcmcgPApAQCAtNjUzLDExICs2NDMsMTAgQEAKIAkvKiBVUERBVEUtMC43LjU3LT4wLjcuNjhkZXZwcml2LT51aV9BaURhdGFMZW5ndGg9cy0+YXN5bmMtPmRhdGFfbGVuOyAqLwogCWRldnByaXYtPnVpX0FpRGF0YUxlbmd0aCA9IHMtPmFzeW5jLT5wcmVhbGxvY19idWZzejsKIAotCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKQogCQlkZXZwcml2LT51aV9BaU5icm9mU2NhbnMgPSBjbWQtPnN0b3BfYXJnOwotCX0gZWxzZSB7CisJZWxzZQogCQlkZXZwcml2LT51aV9BaU5icm9mU2NhbnMgPSAwOwotCX0KIAogCWRldnByaXYtPnVpX0FpVGltZXIwID0gMDsJLyogIHZhcmlhYmxlcyBjaGFuZ2VkIHRvIHRpbWVyMCx0aW1lcjEgKi8KIAlkZXZwcml2LT51aV9BaVRpbWVyMSA9IDA7CkBAIC04NDksOSArODM4LDggQEAKIAl9CiAvKioqIEVMMjQxMDAzIEVuZCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLQlpZiAoZGV2cHJpdi0+Yl9FeHR0cmlnRW5hYmxlID09IEFQQ0kzMTIwX0VOQUJMRSkgeworCWlmIChkZXZwcml2LT5iX0V4dHRyaWdFbmFibGUgPT0gQVBDSTMxMjBfRU5BQkxFKQogCQlpX0FQQ0kzMTIwX0V4dHRyaWdFbmFibGUoZGV2KTsJLyogIGFjdGl2YXRlIEVYVCB0cmlnZ2VyICovCi0JfQogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgMToKIAkJLyogIGluaXQgdGltZXIwIGluIG1vZGUgMiAqLwpAQCAtMTA0OSwxMiArMTAzNywxMCBAQAogCQkJCQlkbWFsZW4xID0gNDsKIAkJCX0KIAkJfSBlbHNlIHsJLyogIGlzbid0IG91dHB1dCBidWZmIHNtYWxsZXIgdGhhdCBvdXIgRE1BIGJ1ZmY/ICovCi0JCQlpZiAoZG1hbGVuMCA+IChkZXZwcml2LT51aV9BaURhdGFMZW5ndGgpKSB7CisJCQlpZiAoZG1hbGVuMCA+IChkZXZwcml2LT51aV9BaURhdGFMZW5ndGgpKQogCQkJCWRtYWxlbjAgPSBkZXZwcml2LT51aV9BaURhdGFMZW5ndGg7Ci0JCQl9Ci0JCQlpZiAoZG1hbGVuMSA+IChkZXZwcml2LT51aV9BaURhdGFMZW5ndGgpKSB7CisJCQlpZiAoZG1hbGVuMSA+IChkZXZwcml2LT51aV9BaURhdGFMZW5ndGgpKQogCQkJCWRtYWxlbjEgPSBkZXZwcml2LT51aV9BaURhdGFMZW5ndGg7Ci0JCQl9CiAJCX0KIAkJZGV2cHJpdi0+dWlfRG1hQnVmZmVyVXNlc2l6ZVswXSA9IGRtYWxlbjA7CiAJCWRldnByaXYtPnVpX0RtYUJ1ZmZlclVzZXNpemVbMV0gPSBkbWFsZW4xOwpAQCAtMTM1NiwxMSArMTM0MiwxMCBAQAogCQkvKiAgc3RvcmUgcmFuZ2UgbGlzdCB0byBjYXJkICovCiAJCXVzX1RtcFZhbHVlID0gQ1JfQ0hBTihjaGFubGlzdFtpXSk7CS8qICBnZXQgY2hhbm5lbCBudW1iZXI7ICovCiAKLQkJaWYgKENSX1JBTkdFKGNoYW5saXN0W2ldKSA8IEFQQ0kzMTIwX0JJUE9MQVJfUkFOR0VTKSB7CisJCWlmIChDUl9SQU5HRShjaGFubGlzdFtpXSkgPCBBUENJMzEyMF9CSVBPTEFSX1JBTkdFUykKIAkJCXVzX1RtcFZhbHVlICY9ICgofkFQQ0kzMTIwX1VOSVBPTEFSKSAmIDB4ZmYpOwkvKiAgc2V0IGJpcG9sYXIgKi8KLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJdXNfVG1wVmFsdWUgfD0gQVBDSTMxMjBfVU5JUE9MQVI7CS8qICBlbmFibGUgdW5pcG9sYXIuLi4uLi4gKi8KLQkJfQogCiAJCWdhaW4gPSBDUl9SQU5HRShjaGFubGlzdFtpXSk7CS8qICBnZXQgZ2FpbiBudW1iZXIgKi8KIAkJdXNfVG1wVmFsdWUgfD0gKChnYWluICYgMHgwMykgPDwgNCk7CS8qIDw8NCBmb3IgRzAgYW5kIEcxIGJpdCBpbiBSQU0gKi8KQEAgLTE1MTQsOCArMTQ5OSw3IEBACiAJLyogIENoZWNrIElmIEVPUyBpbnRlcnJ1cHQgKi8KIAlpZiAoKGludF9kYXEgJiAweDIpICYmIChkZXZwcml2LT5iX0ludGVycnVwdE1vZGUgPT0gQVBDSTMxMjBfRU9TX01PREUpKSB7CiAKLQkJaWYgKGRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID09IEFQQ0kzMTIwX0VOQUJMRSkJLyogIGVuYWJsZSB0aGlzIGluIHdpdGhvdXQgRE1BID8/PyAqLwotCQl7CisJCWlmIChkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9PSBBUENJMzEyMF9FTkFCTEUpIHsJLyogIGVuYWJsZSB0aGlzIGluIHdpdGhvdXQgRE1BID8/PyAqLwogCiAJCQlpZiAoZGV2cHJpdi0+Yl9BaUN5Y2xpY0FjcXVpc2l0aW9uID09IEFQQ0kzMTIwX0VOQUJMRSkgewogCQkJCXVpX0NoZWNrID0gMDsKQEAgLTE5NjYsOCArMTk1MCw3IEBACiAJCUFQQ0kzMTIwX0RJU0FCTEVfRU9TX0lOVDsKIAlvdXRiKGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyLAogCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUklURV9NT0RFX1NFTEVDVCk7Ci0JaWYgKGRhdGFbMF0gPT0gQVBDSTMxMjBfVElNRVIpCS8qIGluaXRpYWxpemUgdGltZXIgKi8KLQl7CisJaWYgKGRhdGFbMF0gPT0gQVBDSTMxMjBfVElNRVIpIHsJLyogaW5pdGlhbGl6ZSB0aW1lciAqLwogCQkvKiBkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3Rlcj1kZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciB8CiAJCSAqIEFQQ0kzMTIwX0VOQUJMRV9USU1FUl9JTlQ7ICovCiAKQEAgLTIwMDYsOCArMTk4OSw3IEBACiAJCS8qICB0aW1lcjIgaW4gVGltZXIgbW9kZSBlbmFibGVkICovCiAJCWRldnByaXYtPmJfVGltZXIyTW9kZSA9IEFQQ0kzMTIwX1RJTUVSOwogCi0JfSBlbHNlCQkJLyogIEluaXRpYWxpemUgV2F0Y2ggZG9nICovCi0JeworCX0gZWxzZSB7CQkJLyogIEluaXRpYWxpemUgV2F0Y2ggZG9nICovCiAKIAkJLyogU2V0IHRoZSBUaW1lciAyIGluIG1vZGUgNShXYXRjaGRvZykgKi8KIApAQCAtMjA5Miw4ICsyMDc0LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKGRhdGFbMF0gPT0gMikJLyogIHdyaXRlIG5ldyB2YWx1ZSAqLwotCXsKKwlpZiAoZGF0YVswXSA9PSAyKSB7CS8qICB3cml0ZSBuZXcgdmFsdWUgKi8KIAkJaWYgKGRldnByaXYtPmJfVGltZXIyTW9kZSAhPSBBUENJMzEyMF9USU1FUikgewogCQkJY29tZWRpX2Vycm9yKGRldiwKIAkJCQkid3JpdGUgOnRpbWVyMiAgbm90IGNvbmZpZ3VyZWQgIGluIFRJTUVSIE1PREUiKTsKQEAgLTIxMTMsMTMgKzIwOTQsMTEgQEAKIAogCQkvKiAgUmVzZXQgRkNfVElNRVIgQklUICovCiAJCWluYihkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9TVEFUVVNfUkVHSVNURVIpOwotCQlpZiAoZGV2cHJpdi0+Yl9UaW1lcjJNb2RlID09IEFQQ0kzMTIwX1RJTUVSKQkvKiBzdGFydCB0aW1lciAqLwotCQl7CisJCWlmIChkZXZwcml2LT5iX1RpbWVyMk1vZGUgPT0gQVBDSTMxMjBfVElNRVIpIHsJLyogc3RhcnQgdGltZXIgKi8KIAkJCS8qIEVuYWJsZSBUaW1lciAqLwogCQkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPQogCQkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyICYgMHgwQjsKLQkJfSBlbHNlCQkvKiBzdGFydCB3YXRjaCBkb2cgKi8KLQkJeworCQl9IGVsc2UgewkJLyogc3RhcnQgd2F0Y2ggZG9nICovCiAJCQkvKiBFbmFibGUgV2F0Y2hEb2cgKi8KIAkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KIAkJCQkoZGV2cHJpdi0+CkBAIC0yMTQ2LDggKzIxMjUsNyBAQAogCQlvdXRiKGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyLAogCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfV1JJVEVfTU9ERV9TRUxFQ1QpOwogCi0JCWlmIChkZXZwcml2LT5iX1RpbWVyMk1vZGUgPT0gQVBDSTMxMjBfVElNRVIpCS8qIHN0YXJ0IHRpbWVyICovCi0JCXsKKwkJaWYgKGRldnByaXYtPmJfVGltZXIyTW9kZSA9PSBBUENJMzEyMF9USU1FUikgewkvKiBzdGFydCB0aW1lciAqLwogCQkJLyogRm9yIFRpbWVyIG1vZGUgaXMgIEdhdGUyIG11c3QgYmUgYWN0aXZhdGVkICAgKip0aW1lciBzdGFydGVkICovCiAJCQlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciA9CiAJCQkJZGV2cHJpdi0+CkBAIC0yMjk5LDggKzIyNzcsNyBAQAogCQkvKiAgY29tYmluaW5nIGJvdGggd29yZHMgKi8KIAkJZGF0YVswXSA9ICh1bnNpZ25lZCBpbnQpICgodXNfVG1wVmFsdWUpIHwgKCh1c19UbXBWYWx1ZV8yKSA8PCAxNikpOwogCi0JfSBlbHNlCQkJLyogIFJlYWQgd2F0Y2ggZG9nIHN0YXR1cyAqLwotCXsKKwl9IGVsc2UgewkJCS8qICBSZWFkIHdhdGNoIGRvZyBzdGF0dXMgKi8KIAogCQl1c19TdGF0dXNWYWx1ZSA9IGludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9SRF9TVEFUVVMpOwogCQl1c19TdGF0dXNWYWx1ZSA9CkBAIC0yNDQxLDEwICsyNDE4LDkgQEAKIAkJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBBUENJMzEyMF9ESVNBQkxFOwogCQlkZXZwcml2LT5iX0RpZ2l0YWxPdXRwdXRSZWdpc3RlciA9IDA7CiAJfQotCWlmICghZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMpIHsKKwlpZiAoIWRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzKQogCQl1aV9UZW1wID0gMDsKLQotCX0JCQkvKiBpZighZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgKSAqLworCQkJCS8qIGlmKCFkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyApICovCiAKIAlyZXR1cm4gaW5zbi0+bjsKIH0KQEAgLTI1MDQsMjMgKzI0ODAsMjMgQEAKIAogLyoKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBGdW5jdGlvbiBuYW1lICAgICA6aW50IGlfQVBDSTMxMjBfSW5zbldyaXRlRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHwKLXxzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAJCQkgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJICAgICAgICAgfAorfCBGdW5jdGlvbiBuYW1lCQk6aW50IGlfQVBDSTMxMjBfSW5zbldyaXRlRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHwKK3xzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKQl8Cit8CQkJCQkJCQkJCXwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBUYXNrICAgICAgICAgICAgICA6IFdyaXRlIGRpZ2lhdGwgb3V0cHV0CQkJCQkJCQkgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8Cit8IFRhc2sJCQk6IFdyaXRlIGRpZ2lhdGwgb3V0cHV0CQkJCQl8Cit8IAkJCQkJCQkJCQl8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkgCSB8Ci18ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMJCQkJCQkJCQkgfAotfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAJCQkJCQkJCQkJIHwKLSAgICAgICAgICAgICAgICAgICAgICBkYXRhWzBdICAgICBWYWx1ZSB0byBiZSB3cml0dGVuCi0gICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXSAgICA6MSBTZXQgZGlnaXRhbCBvL3AgT04KLSAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdICAgICAyIFNldCBkaWdpdGFsIG8vcCBPRkYgd2l0aCBtZW1vcnkgT04KK3wgSW5wdXQgUGFyYW1ldGVycwk6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJfAorfAkJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCQkJIAl8Cit8CQkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuCQkJCXwKK3wJCQl1bnNpZ25lZCBpbnQgKmRhdGEJCQkJCXwKKwkJCWRhdGFbMF0gICAgIFZhbHVlIHRvIGJlIHdyaXR0ZW4KKwkJCWRhdGFbMV0gICAgOjEgU2V0IGRpZ2l0YWwgby9wIE9OCisJCQlkYXRhWzFdICAgICAyIFNldCBkaWdpdGFsIG8vcCBPRkYgd2l0aCBtZW1vcnkgT04KICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8Cit8IFJldHVybiBWYWx1ZQkJOgkJCQkJCQl8Cit8CQkJCQkJCQkJCXwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogKi8KIApAQCAtMjYxNSw4ICsyNTkxLDcgQEAKIAl1aV9DaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAKIAkvKiB0aGlzX2JvYXJkLT5pX2h3ZHJ2X0luc25Xcml0ZUFuYWxvZ091dHB1dChkZXYsIHVpX1JhbmdlLCB1aV9DaGFubmVsLGRhdGFbMF0pOyAqLwotCWlmICh1aV9SYW5nZSkJCS8qICBpZiAxIHRoZW4gdW5pcG9sYXIgKi8KLQl7CisJaWYgKHVpX1JhbmdlKSB7CQkvKiAgaWYgMSB0aGVuIHVuaXBvbGFyICovCiAKIAkJaWYgKGRhdGFbMF0gIT0gMCkKIAkJCWRhdGFbMF0gPQpAQCAtMjYyNyw4ICsyNjAyLDcgQEAKIAkJCQkoKCgodWlfQ2hhbm5lbCAmIDB4MDMpIDw8IDE0KSAmIDB4QzAwMCkgfCAoMSA8PAogCQkJCQkxMykgfCA4MTkyKTsKIAotCX0gZWxzZQkJCS8qICBpZiAwIHRoZW4gICBiaXBvbGFyICovCi0JeworCX0gZWxzZSB7CQkJLyogIGlmIDAgdGhlbiAgIGJpcG9sYXIgKi8KIAkJZGF0YVswXSA9CiAJCQkoKCgodWlfQ2hhbm5lbCAmIDB4MDMpIDw8IDE0KSAmIDB4QzAwMCkgfCAoMCA8PCAxMykgfAogCQkJZGF0YVswXSk7CkBAIC0yNjM5LDggKzI2MTMsNyBAQAogICogb3V0IHB1dCBuIHZhbHVlcyBhdCB0aGUgZ2l2ZW4gY2hhbm5lbC4gcHJpbnRrKCJcbndhaXRpbmcgZm9yCiAgKiBEQV9SRUFEWSBCSVQiKTsKICAqLwotCWRvCQkJLyogV2FpdGluZyBvZiBEQV9SRUFEWSBCSVQgKi8KLQl7CisJZG8gewkJCS8qIFdhaXRpbmcgb2YgREFfUkVBRFkgQklUICovCiAJCXVzX1RtcFZhbHVlID0KIAkJCSgodW5zaWduZWQgc2hvcnQpIGludyhkZXZwcml2LT5pb2Jhc2UgKwogCQkJCUFQQ0kzMTIwX1JEX1NUQVRVUykpICYgMHgwMDAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzIwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzIwMC5jCmluZGV4IDk4YzIzODcuLjU2MGM4NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMyMDAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMjAwLmMKQEAgLTE3LDcgKzE3LDcgQEAKIAogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIAotWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCitZb3Ugc2hvdWxkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCiAKIEBlbmR2ZXJiYXRpbQogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTM1MDEuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTM1MDEuYwppbmRleCA3YjM4ZDE3Li40ZWQ0NDFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzNTAxLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzUwMS5jCkBAIC0xNyw3ICsxNyw3IEBACiAKIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAKLVlvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorWW91IHNob3VsZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgogCiBAZW5kdmVyYmF0aW0KICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzeHh4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzeHh4LmMKaW5kZXggMWQxZTVmYy4uMzY5MjMyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpM3h4eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTN4eHguYwpAQCAtMTcsNyArMTcsNyBAQAogCiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogCi1Zb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KK1lvdSBzaG91bGQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KIAogQGVuZHZlcmJhdGltCiAqLwpAQCAtMTIwNiw3ICsxMjA2LDcgQEAKIAogCQlpZiAoYl9DaGFubmVsIDwgOCkgewogCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQkJCS8qIFJlYWQgcG9ydCAwIChmaXJzdCBkaWdpdGFsIG91dHB1dCBwb3J0KSBhbmQgc2V0L3Jlc2V0IHRoZSBzZWxjdGVkIGNoYW5uZWwgKi8KKwkJCS8qIFJlYWQgcG9ydCAwIChmaXJzdCBkaWdpdGFsIG91dHB1dCBwb3J0KSBhbmQgc2V0L3Jlc2V0IHRoZSBzZWxlY3RlZCBjaGFubmVsICovCiAJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAJCQlkd19TdGF0dXMgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgODApOwpAQCAtMTIyOCw3ICsxMjI4LDcgQEAKIAkJCQlpZiAoKGRldnByaXYtPnVsX1RUTFBvcnRDb25maWd1cmF0aW9uWzBdICYgMHhGRikKIAkJCQkJPT0gMHhGRikgewogCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCQkJCQkvKiBSZWFkIHBvcnQgMiAoZmlyc3QgZGlnaXRhbCBvdXRwdXQgcG9ydCkgYW5kIHNldC9yZXNldCB0aGUgc2VsY3RlZCBjaGFubmVsICovCisJCQkJCS8qIFJlYWQgcG9ydCAyIChmaXJzdCBkaWdpdGFsIG91dHB1dCBwb3J0KSBhbmQgc2V0L3Jlc2V0IHRoZSBzZWxlY3RlZCBjaGFubmVsICovCiAJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAkJCQkJZHdfU3RhdHVzID0gaW5sKGRldnByaXYtPmlvYmFzZSArIDExMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTkxMTguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpOTExOC5jCmluZGV4IDc5MWVhODMuLjk5MzRhM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpOTExOC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpOTExOC5jCkBAIC04OCw5ICs4OCw5IEBACiAjZGVmaW5lIElPUkFOR0VfOTExOCAJNjQJLyogSSBob3BlICovCiAjZGVmaW5lIFBDSTkxMThfQ0hBTkxFTgkyNTUJLyogbGVuIG9mIGNoYW5saXN0LCBzb21lIHNvdXJjZSBzYXkgMjU2LCBidXQgcmVhbGl0eSBsb29rcyBsaWtlIDI1NSA6LSggKi8KIAotI2RlZmluZSBQQ0k5MTE4X0NOVDAJMHgwMAkvKiBSL1c6IDgyNTQgY291dGVyIDAgKi8KLSNkZWZpbmUgUENJOTExOF9DTlQxCTB4MDQJLyogUi9XOiA4MjU0IGNvdXRlciAwICovCi0jZGVmaW5lIFBDSTkxMThfQ05UMgkweDA4CS8qIFIvVzogODI1NCBjb3V0ZXIgMCAqLworI2RlZmluZSBQQ0k5MTE4X0NOVDAJMHgwMAkvKiBSL1c6IDgyNTQgY291bnRlciAwICovCisjZGVmaW5lIFBDSTkxMThfQ05UMQkweDA0CS8qIFIvVzogODI1NCBjb3VudGVyIDAgKi8KKyNkZWZpbmUgUENJOTExOF9DTlQyCTB4MDgJLyogUi9XOiA4MjU0IGNvdW50ZXIgMCAqLwogI2RlZmluZSBQQ0k5MTE4X0NOVENUUkwJMHgwYwkvKiBXOiAgIDgyNTQgY291bnRlciBjb250cm9sICovCiAjZGVmaW5lIFBDSTkxMThfQURfREFUQQkweDEwCS8qIFI6ICAgQS9EIGRhdGEgKi8KICNkZWZpbmUgUENJOTExOF9EQTEJMHgxMAkvKiBXOiAgIEQvQSByZWdpc3RlcnMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHExMmIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHExMmIuYwppbmRleCBjNWVkOGJiLi5mM2JhNjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRxMTJiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkcTEyYi5jCkBAIC00MiwyMyArNDIsMjMgQEAKICAgb3B0aW9uIDE6IEkvTyBiYXNlIGFkZHJlc3MuIFRoZSBmb2xsb3dpbmcgdGFibGUgaXMgcHJvdmlkZWQgYXMgYSBoZWxwCiAgICBvZiB0aGUgaGFyZHdhcmUganVtcGVycy4KIAotICAgICAgICAgYWRkcmVzcyAgICAgICAgICAgIGp1bXBlciBKQURSCi0gICAgICAgICAgMHgzMDAgICAgICAgICAgICAgICAgIDEgKGZhY3RvcnkgZGVmYXVsdCkKLSAgICAgICAgICAweDMyMCAgICAgICAgICAgICAgICAgMgotICAgICAgICAgIDB4MzQwICAgICAgICAgICAgICAgICAzCi0gICAgICAgICAgMHgzNjAgICAgICAgICAgICAgICAgIDQKLSAgICAgICAgICAweDM4MCAgICAgICAgICAgICAgICAgNQotICAgICAgICAgIDB4M0EwICAgICAgICAgICAgICAgICA2CisJIGFkZHJlc3MgICAgICAgICAgICBqdW1wZXIgSkFEUgorCSAgMHgzMDAgICAgICAgICAgICAgICAgIDEgKGZhY3RvcnkgZGVmYXVsdCkKKwkgIDB4MzIwICAgICAgICAgICAgICAgICAyCisJICAweDM0MCAgICAgICAgICAgICAgICAgMworCSAgMHgzNjAgICAgICAgICAgICAgICAgIDQKKwkgIDB4MzgwICAgICAgICAgICAgICAgICA1CisJICAweDNBMCAgICAgICAgICAgICAgICAgNgogCiAgIG9wdGlvbiAyOiB1bmlwb2xhci9iaXBvbGFyIEFEQyBzZWxlY3Rpb246IDAgLT4gYmlwb2xhciwgMSAtPiB1bmlwb2xhcgogCi0gICAgICAgIHNlbGVjdGlvbiAgICAgICAgIGNvbWVkaV9jb25maWcgb3B0aW9uICAgICAgICAgICAgSlVCCi0gICAgICAgICBiaXBvbGFyICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgMi0zIChmYWN0b3J5IGRlZmF1bHQpCi0gICAgICAgICB1bmlwb2xhciAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgMS0yCisJc2VsZWN0aW9uICAgICAgICAgY29tZWRpX2NvbmZpZyBvcHRpb24gICAgICAgICAgICBKVUIKKwkgYmlwb2xhciAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgIDItMyAoZmFjdG9yeSBkZWZhdWx0KQorCSB1bmlwb2xhciAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgMS0yCiAKICAgb3B0aW9uIDM6IHNpbmdsZS1lbmRlZC9kaWZmZXJlbnRpYWwgQUkgc2VsZWN0aW9uOiAwIC0+IFNFLCAxIC0+IGRpZmZlcmVudGlhbAogCi0gICAgICAgIHNlbGVjdGlvbiAgICAgICAgIGNvbWVkaV9jb25maWcgb3B0aW9uICAgICBKQ0hBICAgIEpDSEIKKwlzZWxlY3Rpb24gICAgICAgICBjb21lZGlfY29uZmlnIG9wdGlvbiAgICAgSkNIQSAgICBKQ0hCCiAgICAgICAgc2luZ2xlLWVuZGVkICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAxLTIgICAgIDEtMiAoZmFjdG9yeSBkZWZhdWx0KQogICAgICAgIGRpZmZlcmVudGlhbCAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgMi0zICAgICAyLTMKIApAQCAtMTQwLDcgKzE0MCw3IEBACiAJLmFpX2JpdHMgPSAxMiwKIAkuZGlfY2hhbnMgPSA4LAogCS5kb19jaGFucyA9IDUKLSAgICAgICAgfSovCisJfSovCiB9OwogCiAjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBhZHExMmJfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKQEAgLTE2NCwxNCArMTY0LDE1IEBACiBzdGF0aWMgaW50IGFkcTEyYl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCSBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpOwogc3RhdGljIGludCBhZHExMmJfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworCiBzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2FkcTEyYiA9IHsKLWRyaXZlcl9uYW1lOiJhZHExMmIiLAotbW9kdWxlOlRISVNfTU9EVUxFLAotYXR0YWNoOmFkcTEyYl9hdHRhY2gsCi1kZXRhY2g6YWRxMTJiX2RldGFjaCwKLWJvYXJkX25hbWU6JmFkcTEyYl9ib2FyZHNbMF0ubmFtZSwKLW9mZnNldDpzaXplb2Yoc3RydWN0IGFkcTEyYl9ib2FyZCksCi1udW1fbmFtZXM6QVJSQVlfU0laRShhZHExMmJfYm9hcmRzKSwKKwkuZHJpdmVyX25hbWUgPSAiYWRxMTJiIiwKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCisJLmF0dGFjaCA9IGFkcTEyYl9hdHRhY2gsCisJLmRldGFjaCA9IGFkcTEyYl9kZXRhY2gsCisJLmJvYXJkX25hbWUgPSAmYWRxMTJiX2JvYXJkc1swXS5uYW1lLAorCS5vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGFkcTEyYl9ib2FyZCksCisJLm51bV9uYW1lcyA9IEFSUkFZX1NJWkUoYWRxMTJiX2JvYXJkcyksCiB9OwogCiBzdGF0aWMgaW50IGFkcTEyYl9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LApAQCAtMjAwLDE1ICsyMDEsMTYgQEAKIAl1bmlwb2xhciA9IGl0LT5vcHRpb25zWzFdOwogCWRpZmZlcmVudGlhbCA9IGl0LT5vcHRpb25zWzJdOwogCi0JcHJpbnRrKCJjb21lZGklZDogYWRxMTJiIGNhbGxlZCB3aXRoIG9wdGlvbnMgYmFzZT0weCUwM2x4LCAlcyBhbmQgJXNcbiIsCi0JICAgICAgIGRldi0+bWlub3IsIGlvYmFzZSwgKHVuaXBvbGFyID09IDEpID8gInVuaXBvbGFyIiA6ICJiaXBvbGFyIiwKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogYWRxMTJiIGNhbGxlZCB3aXRoIG9wdGlvbnMgYmFzZT0weCUwM2x4LCAiCisJICAgICAgICIlcyBhbmQgJXNcbiIsIGRldi0+bWlub3IsIGlvYmFzZSwKKwkgICAgICAgKHVuaXBvbGFyID09IDEpID8gInVuaXBvbGFyIiA6ICJiaXBvbGFyIiwKIAkgICAgICAgKGRpZmZlcmVudGlhbCA9PSAxKSA/ICJkaWZmZXJlbnRpYWwiIDogInNpbmdsZS1lbmRlZCIpOwogCiAJLyogaWYgbm8gYWRkcmVzcyB3YXMgc3BlY2lmaWVkLCB0cnkgdGhlIGRlZmF1bHQgMHgzMDAgKi8KIAlpZiAoaW9iYXNlID09IDApIHsKLQkJcHJpbnRrCi0JCSAgICAoImNvbWVkaSVkOiBhZHExMmIgd2FybmluZzogSS9PIGJhc2UgYWRkcmVzcyBub3Qgc3BlY2lmaWVkLiBUcnlpbmcgdGhlIGRlZmF1bHQgMHgzMDAuXG4iLAotCQkgICAgIGRldi0+bWlub3IpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJjb21lZGklZDogYWRxMTJiIHdhcm5pbmc6IEkvTyBiYXNlICIKKwkJICAgICAgICJhZGRyZXNzIG5vdCBzcGVjaWZpZWQuIFRyeWluZyB0aGUgZGVmYXVsdCAweDMwMC5cbiIsCisJCSAgICAgICBkZXYtPm1pbm9yKTsKIAkJaW9iYXNlID0gMHgzMDA7CiAJfQogCkBAIC0yNTksMTEgKzI2MSwxMCBAQAogCQlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmFpX3NlX2NoYW5zOwogCX0KIAotCWlmICh1bmlwb2xhcikgeworCWlmICh1bmlwb2xhcikKIAkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYWRxMTJiX2FpX3VuaXBvbGFyOwotCX0gZWxzZSB7CisJZWxzZQogCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9hZHExMmJfYWlfYmlwb2xhcjsKLQl9CiAKIAlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc2JvYXJkLT5haV9iaXRzKSAtIDE7CiAKQEAgLTI4OSw3ICsyOTAsNyBAQAogCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CiAJcy0+aW5zbl9iaXRzID0gYWRxMTJiX2RvX2luc25fYml0czsKIAotCXByaW50aygiYXR0YWNoZWRcbiIpOworCXByaW50ayhLRVJOX0lORk8gImF0dGFjaGVkXG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzA5LDcgKzMxMCw3IEBACiAKIAlrZnJlZShkZXZwcml2KTsKIAotCXByaW50aygiY29tZWRpJWQ6IGFkcTEyYjogcmVtb3ZlZFxuIiwgZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IGFkcTEyYjogcmVtb3ZlZFxuIiwgZGV2LT5taW5vcik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM0NCwxNyArMzQ1LDE4IEBACiAJCS8qIHdhaXQgZm9yIGVuZCBvZiBjb252ZXJ0aW9uICovCiAJCWkgPSAwOwogCQlkbyB7Ci0vKiB1ZGVsYXkoMSk7ICovCisJCQkvKiB1ZGVsYXkoMSk7ICovCiAJCQlzdGF0dXMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBBRFExMkJfU1RJTlIpOwogCQkJc3RhdHVzID0gc3RhdHVzICYgQURRMTJCX0VPQzsKIAkJfSB3aGlsZSAoc3RhdHVzID09IDAgJiYgKytpIDwgVElNRU9VVCk7Ci0vKiB9IHdoaWxlICgrK2kgPCAxMCk7ICovCisJCS8qIH0gd2hpbGUgKCsraSA8IDEwKTsgKi8KIAogCQkvKiByZWFkIGRhdGEgKi8KIAkJaGkgPSBpbmIoZGV2LT5pb2Jhc2UgKyBBRFExMkJfQURISUcpOwogCQlsbyA9IGluYihkZXYtPmlvYmFzZSArIEFEUTEyQl9BRExPVyk7CiAKLQkJLyogcHJpbnRrKCJkZWJ1ZzogY2hhbj0lZCByYW5nZT0lZCBzdGF0dXM9JWQgaGk9JWQgbG89JWRcbiIsIGNoYW5uZWwsIHJhbmdlLCBzdGF0dXMsICBoaSwgbG8pOyAqLworCQkvKiBwcmludGsoImRlYnVnOiBjaGFuPSVkIHJhbmdlPSVkIHN0YXR1cz0lZCBoaT0lZCBsbz0lZFxuIiwKKwkJICAgICAgIGNoYW5uZWwsIHJhbmdlLCBzdGF0dXMsICBoaSwgbG8pOyAqLwogCQlkYXRhW25dID0gKGhpIDw8IDgpIHwgbG87CiAKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWR2X3BjaTE3MTAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpMTcxMC5jCmluZGV4IDk1MWU1NzkuLjM5NGQyZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpMTcxMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpMTcxMC5jCkBAIC04NCw5ICs4NCw5IEBACiAjZGVmaW5lIFBDSTE3MXhfREFSRUYJMTQJLyogVzogICBEL0EgcmVmZXJlbmNlIGNvbnRyb2wgKi8KICNkZWZpbmUgUENJMTcxeF9ESQkxNgkvKiBSOiAgIGRpZ2kgaW5wdXRzICovCiAjZGVmaW5lIFBDSTE3MXhfRE8JMTYJLyogUjogICBkaWdpIGlucHV0cyAqLwotI2RlZmluZSBQQ0kxNzF4X0NOVDAJMjQJLyogUi9XOiA4MjU0IGNvdXRlciAwICovCi0jZGVmaW5lIFBDSTE3MXhfQ05UMQkyNgkvKiBSL1c6IDgyNTQgY291dGVyIDEgKi8KLSNkZWZpbmUgUENJMTcxeF9DTlQyCTI4CS8qIFIvVzogODI1NCBjb3V0ZXIgMiAqLworI2RlZmluZSBQQ0kxNzF4X0NOVDAJMjQJLyogUi9XOiA4MjU0IGNvdW50ZXIgMCAqLworI2RlZmluZSBQQ0kxNzF4X0NOVDEJMjYJLyogUi9XOiA4MjU0IGNvdW50ZXIgMSAqLworI2RlZmluZSBQQ0kxNzF4X0NOVDIJMjgJLyogUi9XOiA4MjU0IGNvdW50ZXIgMiAqLwogI2RlZmluZSBQQ0kxNzF4X0NOVENUUkwJMzAJLyogVzogICA4MjU0IGNvdW50ZXIgY29udHJvbCAqLwogCiAvKiB1cHBlciBiaXRzIGZyb20gc3RhdHVzIHJlZ2lzdGVyIChQQ0kxNzF4X1NUQVRVUykgKGxvd2VyIGlzIHNhbWUgd290aCBjb250cm9sIHJlZykgKi8KQEAgLTcyNCw2ICs3MjQsNyBAQAogCQkJZGV2cHJpdi0+YWlfYWN0X3NjYW4rKzsKIAkJfQogCX0KKwlzLT5hc3luYy0+Y3VyX2NoYW4gPSBqOwogCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEVORDogbW92ZV9ibG9ja19mcm9tX2ZpZm8oLi4uKVxuIik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMDM0LDE0ICsxMDM1LDYgQEAKIAkJfQogCX0KIAotCWlmICghY21kLT5jaGFubGlzdF9sZW4pIHsKLQkJY21kLT5jaGFubGlzdF9sZW4gPSAxOwotCQllcnIrKzsKLQl9Ci0JaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID4gdGhpc19ib2FyZC0+bl9haWNoYW4pIHsKLQkJY21kLT5jaGFubGlzdF9sZW4gPSB0aGlzX2JvYXJkLT5uX2FpY2hhbjsKLQkJZXJyKys7Ci0JfQogCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgewogCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOwogCQllcnIrKzsKQEAgLTEyMzAsNiArMTIyMywxMiBAQAogCQlEUFJJTlRLKCJHUzogJTJkLiBbJTR4XT0lNHggJTR4XG4iLCBpLCBjaGFucHJvZywgcmFuZ2UsCiAJCQlkZXZwcml2LT5hY3RfY2hhbmxpc3RbaV0pOwogCX0KKyNpZmRlZiBQQ0kxNzF4X1BBUkFOT0lEQ0hFQ0sKKwlmb3IgKCA7IGkgPCBuX2NoYW47IGkrKykgeyAvKiBzdG9yZSByZW1haW5kZXIgb2YgY2hhbm5lbCBsaXN0ICovCisJCWRldnByaXYtPmFjdF9jaGFubGlzdFtpXSA9CisJCSAgICAoQ1JfQ0hBTihjaGFubGlzdFtpXSkgPDwgMTIpICYgMHhmMDAwOworCX0KKyNlbmRpZgogCiAJZGV2cHJpdi0+YWlfZXRfTXV4VmFsID0KIAkgICAgQ1JfQ0hBTihjaGFubGlzdFswXSkgfCAoQ1JfQ0hBTihjaGFubGlzdFtzZWdsZW4gLSAxXSkgPDwgOCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWlvX2lpcm9fMTYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9haW9faWlyb18xNi5jCmluZGV4IDM4NTdmZDUuLjRiYWVmOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9haW9faWlyb18xNi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9haW9faWlyb18xNi5jCkBAIC05OCw3ICs5OCw3IEBACiAJaW50IGlvYmFzZTsKIAlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAotCXByaW50aygiY29tZWRpJWQ6IGFpb19paXJvXzE2OiAiLCBkZXYtPm1pbm9yKTsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogYWlvX2lpcm9fMTY6ICIsIGRldi0+bWlub3IpOwogCiAJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOwogCkBAIC0xNDAsNyArMTQwLDcgQEAKIAogc3RhdGljIGludCBhaW9faWlyb18xNl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKLQlwcmludGsoImNvbWVkaSVkOiBhaW9faWlyb18xNjogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogYWlvX2lpcm9fMTY6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CiAKIAlpZiAoZGV2LT5pb2Jhc2UpCiAJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBBSU9fSUlST18xNl9TSVpFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19kaW8yMDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19kaW8yMDAuYwppbmRleCA2OWFiMjgxLi4yMDRmMzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfZGlvMjAwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX2RpbzIwMC5jCkBAIC00OCw4ICs0OCw4IEBACiAKIFNVQkRFVklDRVMKIAotICAgICAgICAgICAgICAgICAgICBQQzIxOEUgICAgICAgICBQQzIxMkUgICAgICBQQzIxNUUvUENJMjE1Ci0gICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0KKwkJICAgIFBDMjE4RSAgICAgICAgIFBDMjEyRSAgICAgIFBDMjE1RS9QQ0kyMTUKKwkJIC0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0KICAgU3ViZGV2aWNlcyAgICAgICAgICAgNyAgICAgICAgICAgICAgNiAgICAgICAgICAgICAgNQogICAgMCAgICAgICAgICAgICAgICAgQ1RSLVgxICAgICAgICAgUFBJLVggICAgICAgICAgUFBJLVgKICAgIDEgICAgICAgICAgICAgICAgIENUUi1YMiAgICAgICAgIENUUi1ZMSAgICAgICAgIFBQSS1ZCkBAIC01OSw4ICs1OSw4IEBACiAgICA1ICAgICAgICAgICAgICAgICBDVFItWjIgICAgICAgSU5URVJSVVBUCiAgICA2ICAgICAgICAgICAgICAgSU5URVJSVVBUCiAKLSAgICAgICAgICAgICAgICAgICAgUEMyMTRFICAgICAgUEMyNzJFL1BDSTI3MgotICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tCisJCSAgICBQQzIxNEUgICAgICBQQzI3MkUvUENJMjcyCisJCSAtLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tCiAgIFN1YmRldmljZXMgICAgICAgICAgIDQgICAgICAgICAgICAgIDQKICAgIDAgICAgICAgICAgICAgICAgIFBQSS1YICAgICAgICAgIFBQSS1YCiAgICAxICAgICAgICAgICAgICAgICBQUEktWSAgICAgICAgICBQUEktWQpAQCAtOTYsOCArOTYsOCBAQAogICAgIDAgdG8gNyBhcyBmb2xsb3dzOgogCiAgICAgICAwLiAgQ0xLIG4sIHRoZSBjb3VudGVyIGNoYW5uZWwncyBkZWRpY2F0ZWQgQ0xLIGlucHV0IGZyb20gdGhlIFNLMQotICAgICAgICBjb25uZWN0b3IuICAoTi5CLiBmb3Igb3RoZXIgdmFsdWVzLCB0aGUgY291bnRlciBjaGFubmVsJ3MgQ0xLbgotICAgICAgICBwaW4gb24gdGhlIFNLMSBjb25uZWN0b3IgaXMgYW4gb3V0cHV0ISkKKwljb25uZWN0b3IuICAoTi5CLiBmb3Igb3RoZXIgdmFsdWVzLCB0aGUgY291bnRlciBjaGFubmVsJ3MgQ0xLbgorCXBpbiBvbiB0aGUgU0sxIGNvbm5lY3RvciBpcyBhbiBvdXRwdXQhKQogICAgICAgMS4gIEludGVybmFsIDEwIE1IeiBjbG9jay4KICAgICAgIDIuICBJbnRlcm5hbCAxIE1IeiBjbG9jay4KICAgICAgIDMuICBJbnRlcm5hbCAxMDAga0h6IGNsb2NrLgpAQCAtMTA1LDggKzEwNSw4IEBACiAgICAgICA1LiAgSW50ZXJuYWwgMSBrSHogY2xvY2suCiAgICAgICA2LiAgT1VUIG4tMSwgdGhlIG91dHB1dCBvZiBjb3VudGVyIGNoYW5uZWwgbi0xIChzZWUgbm90ZSAxIGJlbG93KS4KICAgICAgIDcuICBFeHQgQ2xvY2ssIHRoZSBjb3VudGVyIGNoaXAncyBkZWRpY2F0ZWQgRXh0IENsb2NrIGlucHV0IGZyb20KLSAgICAgICAgdGhlIFNLMSBjb25uZWN0b3IuICBUaGlzIHBpbiBpcyBzaGFyZWQgYnkgYWxsIHRocmVlIGNvdW50ZXIKLSAgICAgICAgY2hhbm5lbHMgb24gdGhlIGNoaXAuCisJdGhlIFNLMSBjb25uZWN0b3IuICBUaGlzIHBpbiBpcyBzaGFyZWQgYnkgYWxsIHRocmVlIGNvdW50ZXIKKwljaGFubmVscyBvbiB0aGUgY2hpcC4KIAogICBJTlNOX0NPTkZJR19HRVRfQ0xPQ0tfU1JDLiAgUmV0dXJucyB0aGUgY291bnRlciBjaGFubmVsJ3MgY3VycmVudAogICAgIGNsb2NrIHNvdXJjZSBpbiBkYXRhWzFdLiAgRm9yIGludGVybmFsIGNsb2NrIHNvdXJjZXMsIGRhdGFbMl0gaXMgc2V0CkBAIC0xMjAsMTAgKzEyMCwxMCBAQAogICAgICAgMC4gIFZDQyAoaW50ZXJuYWwgKzVWIGQuYy4pLCBpLmUuIGdhdGUgcGVybWFuZW50bHkgZW5hYmxlZC4KICAgICAgIDEuICBHTkQgKGludGVybmFsIDBWIGQuYy4pLCBpLmUuIGdhdGUgcGVybWFuZW50bHkgZGlzYWJsZWQuCiAgICAgICAyLiAgR0FUIG4sIHRoZSBjb3VudGVyIGNoYW5uZWwncyBkZWRpY2F0ZWQgR0FUIGlucHV0IGZyb20gdGhlIFNLMQotICAgICAgICBjb25uZWN0b3IuICAoTi5CLiBmb3Igb3RoZXIgdmFsdWVzLCB0aGUgY291bnRlciBjaGFubmVsJ3MgR0FUbgotICAgICAgICBwaW4gb24gdGhlIFNLMSBjb25uZWN0b3IgaXMgYW4gb3V0cHV0ISkKKwljb25uZWN0b3IuICAoTi5CLiBmb3Igb3RoZXIgdmFsdWVzLCB0aGUgY291bnRlciBjaGFubmVsJ3MgR0FUbgorCXBpbiBvbiB0aGUgU0sxIGNvbm5lY3RvciBpcyBhbiBvdXRwdXQhKQogICAgICAgMy4gIC9PVVQgbi0yLCB0aGUgaW52ZXJ0ZWQgb3V0cHV0IG9mIGNvdW50ZXIgY2hhbm5lbCBuLTIgKHNlZSBub3RlCi0gICAgICAgIDIgYmVsb3cpLgorCTIgYmVsb3cpLgogICAgICAgNC4gIFJlc2VydmVkLgogICAgICAgNS4gIFJlc2VydmVkLgogICAgICAgNi4gIFJlc2VydmVkLgpAQCAtMTUzLDggKzE1Myw4IEBACiAKIElOVEVSUlVQVCBTT1VSQ0VTCiAKLSAgICAgICAgICAgICAgICAgICAgUEMyMThFICAgICAgICAgUEMyMTJFICAgICAgUEMyMTVFL1BDSTIxNQotICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tCisJCSAgICBQQzIxOEUgICAgICAgICBQQzIxMkUgICAgICBQQzIxNUUvUENJMjE1CisJCSAtLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tCiAgIFNvdXJjZXMgICAgICAgICAgICAgIDYgICAgICAgICAgICAgIDYgICAgICAgICAgICAgIDYKICAgIDAgICAgICAgICAgICAgIENUUi1YMS1PVVQgICAgICBQUEktWC1DMCAgICAgICBQUEktWC1DMAogICAgMSAgICAgICAgICAgICAgQ1RSLVgyLU9VVCAgICAgIFBQSS1YLUMzICAgICAgIFBQSS1YLUMzCkBAIC0xNjMsOCArMTYzLDggQEAKICAgIDQgICAgICAgICAgICAgIENUUi1aMS1PVVQgICAgIENUUi1aMS1PVVQgICAgIENUUi1aMS1PVVQKICAgIDUgICAgICAgICAgICAgIENUUi1aMi1PVVQgICAgIENUUi1aMi1PVVQgICAgIENUUi1aMi1PVVQKIAotICAgICAgICAgICAgICAgICAgICBQQzIxNEUgICAgICBQQzI3MkUvUENJMjcyCi0gICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0KKwkJICAgIFBDMjE0RSAgICAgIFBDMjcyRS9QQ0kyNzIKKwkJIC0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0KICAgU291cmNlcyAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgNgogICAgMCAgICAgICAgICAgICAgIEpVTVBFUi1KNSAgICAgIFBQSS1YLUMwCiAgICAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBJLVgtQzMKQEAgLTQzNSwxMSArNDM1LDEzIEBACiAgKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlCiAgKi8KICNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IGRpbzIwMF9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQotI2RlZmluZSB0aGlzbGF5b3V0ICgmZGlvMjAwX2xheW91dHNbKChzdHJ1Y3QgZGlvMjAwX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpLT5sYXlvdXRdKQorI2RlZmluZSB0aGlzbGF5b3V0ICgmZGlvMjAwX2xheW91dHNbKChzdHJ1Y3QgZGlvMjAwX2JvYXJkICopIFwKKwkJICAgIGRldi0+Ym9hcmRfcHRyKS0+bGF5b3V0XSkKIAogLyogdGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoaXMgaGFyZHdhcmUgZHJpdmVyLiAgSWYKICAgIHNldmVyYWwgaGFyZHdhcmUgZHJpdmVycyBrZWVwIHNpbWlsYXIgaW5mb3JtYXRpb24gaW4gdGhpcyBzdHJ1Y3R1cmUsCi0gICBmZWVsIGZyZWUgdG8gc3VnZ2VzdCBtb3ZpbmcgdGhlIHZhcmlhYmxlIHRvIHRoZSBzdHJ1Y3QgY29tZWRpX2RldmljZSBzdHJ1Y3QuICAqLworICAgZmVlbCBmcmVlIHRvIHN1Z2dlc3QgbW92aW5nIHRoZSB2YXJpYWJsZSB0byB0aGUgc3RydWN0IGNvbWVkaV9kZXZpY2Ugc3RydWN0LgorICovCiBzdHJ1Y3QgZGlvMjAwX3ByaXZhdGUgewogI2lmZGVmIENPTkZJR19DT01FRElfUENJCiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CS8qIFBDSSBkZXZpY2UgKi8KQEAgLTYwMyw5ICs2MDUsOCBAQAogCiAJc3VicHJpdi0+YWN0aXZlID0gMDsKIAlzdWJwcml2LT5lbmFibGVkX2lzbnMgPSAwOwotCWlmIChzdWJwcml2LT5oYXNfaW50X3NjZSkgeworCWlmIChzdWJwcml2LT5oYXNfaW50X3NjZSkKIAkJb3V0YigwLCBzdWJwcml2LT5pb2Jhc2UpOwotCX0KIH0KIAogLyoKQEAgLTYyOSwxNiArNjMwLDE0IEBACiAJCS8qIERldGVybWluZSBpbnRlcnJ1cHQgc291cmNlcyB0byBlbmFibGUuICovCiAJCWlzbl9iaXRzID0gMDsKIAkJaWYgKGNtZC0+Y2hhbmxpc3QpIHsKLQkJCWZvciAobiA9IDA7IG4gPCBjbWQtPmNoYW5saXN0X2xlbjsgbisrKSB7CisJCQlmb3IgKG4gPSAwOyBuIDwgY21kLT5jaGFubGlzdF9sZW47IG4rKykKIAkJCQlpc25fYml0cyB8PSAoMVUgPDwgQ1JfQ0hBTihjbWQtPmNoYW5saXN0W25dKSk7Ci0JCQl9CiAJCX0KIAkJaXNuX2JpdHMgJj0gc3VicHJpdi0+dmFsaWRfaXNuczsKIAkJLyogRW5hYmxlIGludGVycnVwdCBzb3VyY2VzLiAqLwogCQlzdWJwcml2LT5lbmFibGVkX2lzbnMgPSBpc25fYml0czsKLQkJaWYgKHN1YnByaXYtPmhhc19pbnRfc2NlKSB7CisJCWlmIChzdWJwcml2LT5oYXNfaW50X3NjZSkKIAkJCW91dGIoaXNuX2JpdHMsIHN1YnByaXYtPmlvYmFzZSk7Ci0JCX0KIAl9CiAKIAlyZXR1cm4gcmV0dmFsOwpAQCAtNjYyLDE0ICs2NjEsMTMgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzdWJwcml2LT5zcGlubG9jaywgZmxhZ3MpOwogCXMtPmFzeW5jLT5pbnR0cmlnID0gMDsKLQlpZiAoc3VicHJpdi0+YWN0aXZlKSB7CisJaWYgKHN1YnByaXYtPmFjdGl2ZSkKIAkJZXZlbnQgPSBkaW8yMDBfc3RhcnRfaW50cihkZXYsIHMpOwotCX0KKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnByaXYtPnNwaW5sb2NrLCBmbGFncyk7CiAKLQlpZiAoZXZlbnQpIHsKKwlpZiAoZXZlbnQpCiAJCWNvbWVkaV9ldmVudChkZXYsIHMpOwotCX0KIAogCXJldHVybiAxOwogfQpAQCAtNzI2LDkgKzcyNCw4IEBACiAJCSAqIFJlZW5hYmxlIHRoZW0gTk9XIHRvIG1pbmltaXplIHRoZSB0aW1lIHRoZXkgYXJlIGRpc2FibGVkLgogCQkgKi8KIAkJY3VyX2VuYWJsZWQgPSBzdWJwcml2LT5lbmFibGVkX2lzbnM7Ci0JCWlmIChzdWJwcml2LT5oYXNfaW50X3NjZSkgeworCQlpZiAoc3VicHJpdi0+aGFzX2ludF9zY2UpCiAJCQlvdXRiKGN1cl9lbmFibGVkLCBzdWJwcml2LT5pb2Jhc2UpOwotCQl9CiAKIAkJaWYgKHN1YnByaXYtPmFjdGl2ZSkgewogCQkJLyoKQEAgLTc0Nyw5ICs3NDQsOCBAQAogCQkJCWxlbiA9IHMtPmFzeW5jLT5jbWQuY2hhbmxpc3RfbGVuOwogCQkJCWZvciAobiA9IDA7IG4gPCBsZW47IG4rKykgewogCQkJCQljaCA9IENSX0NIQU4ocy0+YXN5bmMtPmNtZC5jaGFubGlzdFtuXSk7Ci0JCQkJCWlmICh0cmlnZ2VyZWQgJiAoMVUgPDwgY2gpKSB7CisJCQkJCWlmICh0cmlnZ2VyZWQgJiAoMVUgPDwgY2gpKQogCQkJCQkJdmFsIHw9ICgxVSA8PCBuKTsKLQkJCQkJfQogCQkJCX0KIAkJCQkvKiBXcml0ZSB0aGUgc2NhbiB0byB0aGUgYnVmZmVyLiAqLwogCQkJCWlmIChjb21lZGlfYnVmX3B1dChzLT5hc3luYywgdmFsKSkgewpAQCAtNzgxLDkgKzc3Nyw4IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnByaXYtPnNwaW5sb2NrLCBmbGFncyk7CiAKLQlpZiAob2xkZXZlbnRzICE9IHMtPmFzeW5jLT5ldmVudHMpIHsKKwlpZiAob2xkZXZlbnRzICE9IHMtPmFzeW5jLT5ldmVudHMpCiAJCWNvbWVkaV9ldmVudChkZXYsIHMpOwotCX0KIAogCXJldHVybiAodHJpZ2dlcmVkICE9IDApOwogfQpAQCAtNzk4LDkgKzc5Myw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzdWJwcml2LT5zcGlubG9jaywgZmxhZ3MpOwotCWlmIChzdWJwcml2LT5hY3RpdmUpIHsKKwlpZiAoc3VicHJpdi0+YWN0aXZlKQogCQlkaW8yMDBfc3RvcF9pbnRyKGRldiwgcyk7Ci0JfQorCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3VicHJpdi0+c3BpbmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwpAQCAtODQ2LDcgKzg0MSw4IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIDE7CiAKLQkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseQorCQkgICBjb21wYXRpYmxlICovCiAKIAkvKiB0aGVzZSB0ZXN0cyBhcmUgdHJ1ZSBpZiBtb3JlIHRoYW4gb25lIF9zcmMgYml0IGlzIHNldCAqLwogCWlmICgoY21kLT5zdGFydF9zcmMgJiAoY21kLT5zdGFydF9zcmMgLSAxKSkgIT0gMCkKQEAgLTk1Miw5ICs5NDgsOCBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdWJwcml2LT5zcGlubG9jaywgZmxhZ3MpOwogCi0JaWYgKGV2ZW50KSB7CisJaWYgKGV2ZW50KQogCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKLQl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTk4MCw5ICs5NzUsOCBAQAogCXN1YnByaXYtPnZhbGlkX2lzbnMgPSB2YWxpZF9pc25zOwogCXNwaW5fbG9ja19pbml0KCZzdWJwcml2LT5zcGlubG9jayk7CiAKLQlpZiAoaGFzX2ludF9zY2UpIHsKKwlpZiAoaGFzX2ludF9zY2UpCiAJCW91dGIoMCwgc3VicHJpdi0+aW9iYXNlKTsJLyogRGlzYWJsZSBpbnRlcnJ1cHQgc291cmNlcy4gKi8KLQl9CiAKIAlzLT5wcml2YXRlID0gc3VicHJpdjsKIAlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CkBAIC0xMDEzLDEwICsxMDA3LDcgQEAKIAkJCSAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewogCXN0cnVjdCBkaW8yMDBfc3ViZGV2X2ludHIgKnN1YnByaXYgPSBzLT5wcml2YXRlOwotCi0JaWYgKHN1YnByaXYpIHsKLQkJa2ZyZWUoc3VicHJpdik7Ci0JfQorCWtmcmVlKHN1YnByaXYpOwogfQogCiAvKgpAQCAtMTAyNyw5ICsxMDE4LDggQEAKIAlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKIAlpbnQgaGFuZGxlZDsKIAotCWlmICghZGV2LT5hdHRhY2hlZCkgeworCWlmICghZGV2LT5hdHRhY2hlZCkKIAkJcmV0dXJuIElSUV9OT05FOwotCX0KIAogCWlmIChkZXZwcml2LT5pbnRyX3NkID49IDApIHsKIAkJaGFuZGxlZCA9IGRpbzIwMF9oYW5kbGVfcmVhZF9pbnRyKGRldiwKQEAgLTEyNjYsMTAgKzEyNTYsNyBAQAogCQkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJc3RydWN0IGRpbzIwMF9zdWJkZXZfaW50ciAqc3VicHJpdiA9IHMtPnByaXZhdGU7Ci0KLQlpZiAoc3VicHJpdikgewotCQlrZnJlZShzdWJwcml2KTsKLQl9CisJa2ZyZWUoc3VicHJpdik7CiB9CiAKIC8qCkBAIC0xMzQ4LDkgKzEzMzUsOCBAQAogI2VuZGlmCiAJewogCQlyZXQgPSBkaW8yMDBfcmVxdWVzdF9yZWdpb24oZGV2LT5taW5vciwgaW9iYXNlLCBESU8yMDBfSU9fU0laRSk7Ci0JCWlmIChyZXQgPCAwKSB7CisJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKLQkJfQogCX0KIAlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKIApAQCAtMTM3MSwxNyArMTM1NywxNyBAQAogCQkJcmV0ID0gZGlvMjAwX3N1YmRldl84MjU0X2luaXQoZGV2LCBzLCBpb2Jhc2UsCiAJCQkJCQkgICAgICBsYXlvdXQtPnNkaW5mb1tuXSwKIAkJCQkJCSAgICAgIGxheW91dC0+aGFzX2Nsa19nYXRfc2NlKTsKLQkJCWlmIChyZXQgPCAwKSB7CisJCQlpZiAocmV0IDwgMCkKIAkJCQlyZXR1cm4gcmV0OwotCQkJfQorCiAJCQlicmVhazsKIAkJY2FzZSBzZF84MjU1OgogCQkJLyogZGlnaXRhbCBpL28gc3ViZGV2aWNlICg4MjU1KSAqLwogCQkJcmV0ID0gc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIDAsCiAJCQkJCSAgICAgICBpb2Jhc2UgKyBsYXlvdXQtPnNkaW5mb1tuXSk7Ci0JCQlpZiAocmV0IDwgMCkgeworCQkJaWYgKHJldCA8IDApCiAJCQkJcmV0dXJuIHJldDsKLQkJCX0KKwogCQkJYnJlYWs7CiAJCWNhc2Ugc2RfaW50cjoKIAkJCS8qICdJTlRFUlJVUFQnIHN1YmRldmljZSAqLwpAQCAtMTM5Miw5ICsxMzc4LDkgQEAKIAkJCQkJCQkgICAgICBsYXlvdXQtPnNkaW5mb1tuXSwKIAkJCQkJCQkgICAgICBsYXlvdXQtPgogCQkJCQkJCSAgICAgIGhhc19pbnRfc2NlKTsKLQkJCQlpZiAocmV0IDwgMCkgeworCQkJCWlmIChyZXQgPCAwKQogCQkJCQlyZXR1cm4gcmV0OwotCQkJCX0KKwogCQkJCWRldnByaXYtPmludHJfc2QgPSBuOwogCQkJfSBlbHNlIHsKIAkJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOwpAQCAtMTQwNyw5ICsxMzkzLDggQEAKIAl9CiAKIAlzZHggPSBkZXZwcml2LT5pbnRyX3NkOwotCWlmIChzZHggPj0gMCAmJiBzZHggPCBkZXYtPm5fc3ViZGV2aWNlcykgeworCWlmIChzZHggPj0gMCAmJiBzZHggPCBkZXYtPm5fc3ViZGV2aWNlcykKIAkJZGV2LT5yZWFkX3N1YmRldiA9ICZkZXYtPnN1YmRldmljZXNbc2R4XTsKLQl9CiAKIAlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CiAKQEAgLTE0MzQsMTEgKzE0MTksMTAgQEAKIAkJcHJpbnRrKCIocGNpICVzKSAiLCBwY2lfbmFtZShwY2lfZGV2KSk7CiAjZW5kaWYKIAl9Ci0JaWYgKGlycSkgeworCWlmIChpcnEpCiAJCXByaW50aygiKGlycSAldSVzKSAiLCBpcnEsIChkZXYtPmlycSA/ICIiIDogIiBVTkFWQUlMQUJMRSIpKTsKLQl9IGVsc2UgeworCWVsc2UKIAkJcHJpbnRrKCIobm8gaXJxKSAiKTsKLQl9CiAKIAlwcmludGsoImF0dGFjaGVkXG4iKTsKIApAQCAtMTQ2MSw5ICsxNDQ1LDggQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpJWQ6ICVzOiBkZXRhY2hcbiIsIGRldi0+bWlub3IsCiAJICAgICAgIERJTzIwMF9EUklWRVJfTkFNRSk7CiAKLQlpZiAoZGV2LT5pcnEpIHsKKwlpZiAoZGV2LT5pcnEpCiAJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotCX0KIAlpZiAoZGV2LT5zdWJkZXZpY2VzKSB7CiAJCWxheW91dCA9IHRoaXNsYXlvdXQ7CiAJCWZvciAobiA9IDA7IG4gPCBkZXYtPm5fc3ViZGV2aWNlczsgbisrKSB7CkBAIC0xNDg2LDIyICsxNDY5LDE5IEBACiAJaWYgKGRldnByaXYpIHsKICNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQogCQlpZiAoZGV2cHJpdi0+cGNpX2RldikgewotCQkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQlpZiAoZGV2LT5pb2Jhc2UpCiAJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOwotCQkJfQogCQkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CiAJCX0gZWxzZQogI2VuZGlmCiAJCXsKLQkJCWlmIChkZXYtPmlvYmFzZSkgeworCQkJaWYgKGRldi0+aW9iYXNlKQogCQkJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBESU8yMDBfSU9fU0laRSk7Ci0JCQl9CiAJCX0KIAl9Ci0JaWYgKGRldi0+Ym9hcmRfbmFtZSkgeworCWlmIChkZXYtPmJvYXJkX25hbWUpCiAJCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiAlcyByZW1vdmVkXG4iLAogCQkgICAgICAgZGV2LT5taW5vciwgZGV2LT5ib2FyZF9uYW1lKTsKLQl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wYzIzNi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjMjM2LmMKaW5kZXggMTAzMmE4MS4uYTMwN2Q2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjMjM2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjMjM2LmMKQEAgLTc4LDE4ICs3OCwxOCBAQAogICovCiAvKiBEaXNhYmxlIGludGVycnVwdCwgYWxzbyBjbGVhciBhbnkgaW50ZXJydXB0IHRoZXJlICovCiAjZGVmaW5lIFBDSTIzNl9JTlRSX0RJU0FCTEUgKFBMWDkwNTJfSU5UQ1NSX0xJMUVOQUJfRElTQUJMRUQgXAotICAgICAgICB8IFBMWDkwNTJfSU5UQ1NSX0xJMVBPTF9ISUdIIFwKLSAgICAgICAgfCBQTFg5MDUyX0lOVENTUl9MSTJQT0xfSElHSCBcCi0gICAgICAgIHwgUExYOTA1Ml9JTlRDU1JfUENJRU5BQl9ESVNBQkxFRCBcCi0gICAgICAgIHwgUExYOTA1Ml9JTlRDU1JfTEkxU0VMX0VER0UgXAotICAgICAgICB8IFBMWDkwNTJfSU5UQ1NSX0xJMUNMUklOVF9BU1NFUlRFRCkKKwl8IFBMWDkwNTJfSU5UQ1NSX0xJMVBPTF9ISUdIIFwKKwl8IFBMWDkwNTJfSU5UQ1NSX0xJMlBPTF9ISUdIIFwKKwl8IFBMWDkwNTJfSU5UQ1NSX1BDSUVOQUJfRElTQUJMRUQgXAorCXwgUExYOTA1Ml9JTlRDU1JfTEkxU0VMX0VER0UgXAorCXwgUExYOTA1Ml9JTlRDU1JfTEkxQ0xSSU5UX0FTU0VSVEVEKQogLyogRW5hYmxlIGludGVycnVwdCwgYWxzbyBjbGVhciBhbnkgaW50ZXJydXB0IHRoZXJlLiAqLwogI2RlZmluZSBQQ0kyMzZfSU5UUl9FTkFCTEUgKFBMWDkwNTJfSU5UQ1NSX0xJMUVOQUJfRU5BQkxFRCBcCi0gICAgICAgIHwgUExYOTA1Ml9JTlRDU1JfTEkxUE9MX0hJR0ggXAotICAgICAgICB8IFBMWDkwNTJfSU5UQ1NSX0xJMlBPTF9ISUdIIFwKLSAgICAgICAgfCBQTFg5MDUyX0lOVENTUl9QQ0lFTkFCX0VOQUJMRUQgXAotICAgICAgICB8IFBMWDkwNTJfSU5UQ1NSX0xJMVNFTF9FREdFIFwKLSAgICAgICAgfCBQTFg5MDUyX0lOVENTUl9MSTFDTFJJTlRfQVNTRVJURUQpCisJfCBQTFg5MDUyX0lOVENTUl9MSTFQT0xfSElHSCBcCisJfCBQTFg5MDUyX0lOVENTUl9MSTJQT0xfSElHSCBcCisJfCBQTFg5MDUyX0lOVENTUl9QQ0lFTkFCX0VOQUJMRUQgXAorCXwgUExYOTA1Ml9JTlRDU1JfTEkxU0VMX0VER0UgXAorCXwgUExYOTA1Ml9JTlRDU1JfTEkxQ0xSSU5UX0FTU0VSVEVEKQogCiAvKgogICogQm9hcmQgZGVzY3JpcHRpb25zIGZvciBBbXBsaWNvbiBQQzM2QVQgYW5kIFBDSTIzNi4KQEAgLTE1MCwxMiArMTUwLDEzIEBACiAKIC8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIGhhcmR3YXJlIGRyaXZlci4gIElmCiAgICBzZXZlcmFsIGhhcmR3YXJlIGRyaXZlcnMga2VlcCBzaW1pbGFyIGluZm9ybWF0aW9uIGluIHRoaXMgc3RydWN0dXJlLAotICAgZmVlbCBmcmVlIHRvIHN1Z2dlc3QgbW92aW5nIHRoZSB2YXJpYWJsZSB0byB0aGUgc3RydWN0IGNvbWVkaV9kZXZpY2Ugc3RydWN0LiAgKi8KKyAgIGZlZWwgZnJlZSB0byBzdWdnZXN0IG1vdmluZyB0aGUgdmFyaWFibGUgdG8gdGhlIHN0cnVjdCBjb21lZGlfZGV2aWNlIHN0cnVjdC4KKyAqLwogc3RydWN0IHBjMjM2X3ByaXZhdGUgewogI2lmZGVmIENPTkZJR19DT01FRElfUENJCiAJLyogUENJIGRldmljZSAqLwogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwotCXVuc2lnbmVkIGxvbmcgbGNyX2lvYmFzZTsJLyogUExYIFBDSTkwNTIgY29uZmlnIHJlZ2lzdGVycyBpbiBQQ0lCQVIxICovCisJdW5zaWduZWQgbG9uZyBsY3JfaW9iYXNlOyAvKiBQTFggUENJOTA1MiBjb25maWcgcmVnaXN0ZXJzIGluIFBDSUJBUjEgKi8KICNlbmRpZgogCWludCBlbmFibGVfaXJxOwogfTsKQEAgLTM0NSw5ICszNDYsOCBAQAogI2VuZGlmCiAJewogCQlyZXQgPSBwYzIzNl9yZXF1ZXN0X3JlZ2lvbihkZXYtPm1pbm9yLCBpb2Jhc2UsIFBDMjM2X0lPX1NJWkUpOwotCQlpZiAocmV0IDwgMCkgeworCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7Ci0JCX0KIAl9CiAJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CiAKQEAgLTM5OSwxMSArMzk5LDEwIEBACiAJCXByaW50aygiKHBjaSAlcykgIiwgcGNpX25hbWUocGNpX2RldikpOwogI2VuZGlmCiAJfQotCWlmIChpcnEpIHsKKwlpZiAoaXJxKQogCQlwcmludGsoIihpcnEgJXUlcykgIiwgaXJxLCAoZGV2LT5pcnEgPyAiIiA6ICIgVU5BVkFJTEFCTEUiKSk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXByaW50aygiKG5vIGlycSkgIik7Ci0JfQogCiAJcHJpbnRrKCJhdHRhY2hlZFxuIik7CiAKQEAgLTQyMiwyNyArNDIxLDI0IEBACiB7CiAJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaSVkOiAlczogZGV0YWNoXG4iLCBkZXYtPm1pbm9yLAogCSAgICAgICBQQzIzNl9EUklWRVJfTkFNRSk7Ci0JaWYgKGRldnByaXYpIHsKKwlpZiAoZGV2cHJpdikKIAkJcGMyMzZfaW50cl9kaXNhYmxlKGRldik7Ci0JfQorCiAJaWYgKGRldi0+aXJxKQogCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKLQlpZiAoZGV2LT5zdWJkZXZpY2VzKSB7CisJaWYgKGRldi0+c3ViZGV2aWNlcykKIAkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDApOwotCX0KIAlpZiAoZGV2cHJpdikgewogI2lmZGVmIENPTkZJR19DT01FRElfUENJCiAJCWlmIChkZXZwcml2LT5wY2lfZGV2KSB7Ci0JCQlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJCWlmIChkZXYtPmlvYmFzZSkKIAkJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGNpX2Rldik7Ci0JCQl9CiAJCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lfZGV2KTsKIAkJfSBlbHNlCiAjZW5kaWYKIAkJewotCQkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQlpZiAoZGV2LT5pb2Jhc2UpCiAJCQkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIFBDMjM2X0lPX1NJWkUpOwotCQkJfQogCQl9CiAJfQogCWlmIChkZXYtPmJvYXJkX25hbWUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMjQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMjQuYwppbmRleCBkOTgzNjg3Li5iNDFlNWU1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjaTIyNC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMjQuYwpAQCAtMTUzNiwyMCArMTUzNiwxMiBAQAogCiAJCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOwogCQkvKiBBTyBzdWJkZXZpY2UgKi8KLQkJaWYgKHMtPnJhbmdlX3RhYmxlX2xpc3QpIHsKLQkJCWtmcmVlKHMtPnJhbmdlX3RhYmxlX2xpc3QpOwotCQl9CisJCWtmcmVlKHMtPnJhbmdlX3RhYmxlX2xpc3QpOwogCX0KIAlpZiAoZGV2cHJpdikgewotCQlpZiAoZGV2cHJpdi0+YW9fcmVhZGJhY2spIHsKLQkJCWtmcmVlKGRldnByaXYtPmFvX3JlYWRiYWNrKTsKLQkJfQotCQlpZiAoZGV2cHJpdi0+YW9fc2Nhbl92YWxzKSB7Ci0JCQlrZnJlZShkZXZwcml2LT5hb19zY2FuX3ZhbHMpOwotCQl9Ci0JCWlmIChkZXZwcml2LT5hb19zY2FuX29yZGVyKSB7Ci0JCQlrZnJlZShkZXZwcml2LT5hb19zY2FuX29yZGVyKTsKLQkJfQorCQlrZnJlZShkZXZwcml2LT5hb19yZWFkYmFjayk7CisJCWtmcmVlKGRldnByaXYtPmFvX3NjYW5fdmFscyk7CisJCWtmcmVlKGRldnByaXYtPmFvX3NjYW5fb3JkZXIpOwogCQlpZiAoZGV2cHJpdi0+cGNpX2RldikgewogCQkJaWYgKGRldi0+aW9iYXNlKSB7CiAJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2M2eGRpZ2lvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYzZ4ZGlnaW8uYwppbmRleCBhYmIwNTMyLi5mYjBkNWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYzZ4ZGlnaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYzZ4ZGlnaW8uYwpAQCAtNDUsNyArNDUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3BucC5oPgogCiAjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCkBAIC0yMjAsMTEgKzIyMCwxMSBAQAogCS8qIHByaW50aygiSW5zaWRlIEM2WF9lbmNJbnB1dFxuIik7ICovCiAKIAllbmMudmFsdWUgPSAwOwotCWlmIChjaGFubmVsID09IDApIHsKKwlpZiAoY2hhbm5lbCA9PSAwKQogCQlwcGNtZCA9IDB4NDg7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXBwY21kID0gMHg1MDsKLQl9CisKIAlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgcHBjbWQpOwogCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOwogCXdoaWxlICgoKHRtcCAmIDB4ODApID09IDApICYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CkBAIC0zOTEsOSArMzkxLDggQEAKIAlpbnQgbjsKIAlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwogCi0JZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspCiAJCWRhdGFbbl0gPSAoQzZYX2VuY0lucHV0KGRldi0+aW9iYXNlLCBjaGFuKSAmIDB4ZmZmZmZmKTsKLQl9CiAKIAlyZXR1cm4gbjsKIH0KQEAgLTQyMCw5ICs0MTksOSBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgYzZ4ZGlnaW9fcG5wX3RibFtdID0gewogCS8qIFN0YW5kYXJkIExQVCBQcmludGVyIFBvcnQgKi8KLQl7LmlkID0gIlBOUDA0MDAiLC5kcml2ZXJfZGF0YSA9IDB9LAorCXsuaWQgPSAiUE5QMDQwMCIsIC5kcml2ZXJfZGF0YSA9IDB9LAogCS8qIEVDUCBQcmludGVyIFBvcnQgKi8KLQl7LmlkID0gIlBOUDA0MDEiLC5kcml2ZXJfZGF0YSA9IDB9LAorCXsuaWQgPSAiUE5QMDQwMSIsIC5kcml2ZXJfZGF0YSA9IDB9LAogCXt9CiB9OwogCkBAIC00NTIsMTUgKzQ1MSwxNCBAQAogCWlmIChyZXN1bHQgPCAwKQogCQlyZXR1cm4gcmVzdWx0OwogCi0JLyogIE1ha2Ugc3VyZSB0aGF0IFBuUCBwb3J0cyBnZXRzIGFjdGl2YXRlZCAqLworCS8qICBNYWtlIHN1cmUgdGhhdCBQblAgcG9ydHMgZ2V0IGFjdGl2YXRlZCAqLwogCXBucF9yZWdpc3Rlcl9kcml2ZXIoJmM2eGRpZ2lvX3BucF9kcml2ZXIpOwogCiAJaXJxID0gaXQtPm9wdGlvbnNbMV07Ci0JaWYgKGlycSA+IDApIHsKKwlpZiAoaXJxID4gMCkKIAkJcHJpbnRrKCJjb21lZGklZDogaXJxID0gJXUgaWdub3JlZFxuIiwgZGV2LT5taW5vciwgaXJxKTsKLQl9IGVsc2UgaWYgKGlycSA9PSAwKSB7CisJZWxzZSBpZiAoaXJxID09IDApCiAJCXByaW50aygiY29tZWRpJWQ6IG5vIGlycVxuIiwgZGV2LT5taW5vcik7Ci0JfQogCiAJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CiAJLyogcHdtIG91dHB1dCBzdWJkZXZpY2UgKi8KQEAgLTQ4MywxOSArNDgxLDE5IEBACiAJcy0+bWF4ZGF0YSA9IDB4ZmZmZmZmOwogCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3Vua25vd247CiAKLQkvKiAgICAgICAgICAgcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7ICovCisJLyoJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7ICovCiAJLyogcHdtIG91dHB1dCBzdWJkZXZpY2UgKi8KLQkvKiAgICAgICBzLT50eXBlID0gQ09NRURJX1NVQkRfQ09VTlRFUjsgIC8vIE5vdCBzdXJlIHdoYXQgdG8gcHV0IGhlcmUgKi8KLQkvKiAgICAgICBzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEVBQkxFOyAqLwotCS8qICAgICAgIHMtPm5fY2hhbiA9IDE7ICovCi0JLyogICAgICAgcy0+dHJpZ1swXSA9IGM2eGRpZ2lvX2VpX2luaXQ7ICovCi0JLyogICAgICAgcy0+aW5zbl9yZWFkID0gYzZ4ZGlnaW9fZWlfaW5pdF9pbnNuX3JlYWQ7ICovCi0JLyogICAgICAgcy0+aW5zbl93cml0ZSA9IGM2eGRpZ2lvX2VpX2luaXRfaW5zbl93cml0ZTsgKi8KLQkvKiAgICAgICBzLT5tYXhkYXRhID0gMHhGRkZGOyAgLy8gUmVhbGx5IGp1c3QgYSBkb24ndCBjYXJlICovCi0JLyogICAgICAgcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsgLy8gTm90IHN1cmUgd2hhdCB0byBwdXQgaGVyZSAqLworCS8qCXMtPnR5cGUgPSBDT01FRElfU1VCRF9DT1VOVEVSOyAgLy8gTm90IHN1cmUgd2hhdCB0byBwdXQgaGVyZSAqLworCS8qCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklURUFCTEU7ICovCisJLyoJcy0+bl9jaGFuID0gMTsgKi8KKwkvKglzLT50cmlnWzBdID0gYzZ4ZGlnaW9fZWlfaW5pdDsgKi8KKwkvKglzLT5pbnNuX3JlYWQgPSBjNnhkaWdpb19laV9pbml0X2luc25fcmVhZDsgKi8KKwkvKglzLT5pbnNuX3dyaXRlID0gYzZ4ZGlnaW9fZWlfaW5pdF9pbnNuX3dyaXRlOyAqLworCS8qCXMtPm1heGRhdGEgPSAweEZGRkY7ICAvLyBSZWFsbHkganVzdCBhIGRvbid0IGNhcmUgKi8KKwkvKglzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOyAvLyBOb3Qgc3VyZSB3aGF0IHRvIHB1dCBoZXJlICovCiAKLQkvKiAgSSB3aWxsIGNhbGwgdGhpcyBpbml0IGFueXdheSBidXQgbW9yZSB0aGFuIGxpa2VseSB0aGUgRFNQIGJvYXJkIHdpbGwgbm90IGJlIGNvbm5lY3QgKi8KLQkvKiAgd2hlbiBkZXZpY2UgZHJpdmVyIGlzIGxvYWRlZC4gKi8KKwkvKiAgSSB3aWxsIGNhbGwgdGhpcyBpbml0IGFueXdheSBidXQgbW9yZSB0aGFuIGxpa2VseSB0aGUgRFNQIGJvYXJkICovCisJLyogIHdpbGwgbm90IGJlIGNvbm5lY3RlZCB3aGVuIGRldmljZSBkcml2ZXIgaXMgbG9hZGVkLiAqLwogCWJvYXJkX2luaXQoZGV2KTsKIAogCXJldHVybiAwOwpAQCAtNTAzLDE2ICs1MDEsMTcgQEAKIAogc3RhdGljIGludCBjNnhkaWdpb19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKLS8qIGJvYXJkX2hhbHQoZGV2KTsgIG1heSBub3QgbmVlZCB0aGlzICovCisJLyogYm9hcmRfaGFsdChkZXYpOyAgbWF5IG5vdCBuZWVkIHRoaXMgKi8KIAogCXByaW50aygiY29tZWRpJWQ6IGM2eGRpZ2lvOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOwogCi0JaWYgKGRldi0+aW9iYXNlKSB7CisJaWYgKGRldi0+aW9iYXNlKQogCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgQzZYRElHSU9fU0laRSk7Ci0JfQotCWlmIChkZXYtPmlycSkgeworCisJLyogIE5vdCB1c2luZyBJUlEgc28gSSBhbSBub3Qgc3VyZSBpZiBJIG5lZWQgdGhpcyAqLworCWlmIChkZXYtPmlycSkKIAkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7Ci0JfQkJCS8qICBOb3QgdXNpbmcgSVJRIHNvIEkgYW0gbm90IHN1cmUgaWYgSSBuZWVkIHRoaXMgKi8KKwogCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmYzZ4ZGlnaW9fcG5wX2RyaXZlcik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkYXMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkYXMuYwppbmRleCBmM2U2NmM0Li40MzQ1OTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGFzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhcy5jCkBAIC01MTgsNyArNTE4LDcgQEAKIHN0YXRpYyBpbnQgdHJpbXBvdF84NDAyX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsLAogCQkJICAgICAgdWludDhfdCB2YWx1ZSk7CiBzdGF0aWMgaW50IG52cmFtX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGFkZHJlc3MsCi0JCSAgICAgIHVpbnQ4X3QgKiBkYXRhKTsKKwkJICAgICAgdWludDhfdCAqZGF0YSk7CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNhbF9lbmFibGVfYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewpAQCAtNzYwLDkgKzc2MCw4IEBACiAJaWYgKGRldi0+c3ViZGV2aWNlcykKIAkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDIpOwogCWlmIChkZXZwcml2ICYmIGRldnByaXYtPnBjaV9kZXYpIHsKLQkJaWYgKGRldnByaXYtPnM1OTMzX2NvbmZpZykgeworCQlpZiAoZGV2cHJpdi0+czU5MzNfY29uZmlnKQogCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOwotCQl9CiAJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaV9kZXYpOwogCX0KIApAQCAtMTI0OCw5ICsxMjQ3LDggQEAKIAkJCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CiAKIAkvKiAgc2V0IG51bWJlciBvZiBjb252ZXJzaW9ucyAqLwotCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKQogCQlkZXZwcml2LT5jb3VudCA9IGNtZC0+Y2hhbmxpc3RfbGVuICogY21kLT5zdG9wX2FyZzsKLQl9CiAJLyogIGVuYWJsZSBpbnRlcnJ1cHRzICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKIAlkZXZwcml2LT5hZGNfZmlmb19iaXRzIHw9IElOVEU7CkBAIC0xNDQ5LDkgKzE0NDcsOCBAQAogCQkJICAgZGV2cHJpdi0+YW9fZGl2aXNvcjIsIDIpOwogCX0KIAkvKiAgc2V0IG51bWJlciBvZiBjb252ZXJzaW9ucyAqLwotCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKQogCQlkZXZwcml2LT5hb19jb3VudCA9IGNtZC0+Y2hhbmxpc3RfbGVuICogY21kLT5zdG9wX2FyZzsKLQl9CiAJLyogIHNldCBwYWNlciBzb3VyY2UgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOwogCXN3aXRjaCAoY21kLT5zY2FuX2JlZ2luX3NyYykgewpAQCAtMTQ5NCw5ICsxNDkxLDggQEAKIAkJCQkJICAgICAgIG51bV9wb2ludHMgKiBzaXplb2Yoc2hvcnQpKTsKIAludW1fcG9pbnRzID0gbnVtX2J5dGVzIC8gc2l6ZW9mKHNob3J0KTsKIAotCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKQogCQlkZXZwcml2LT5hb19jb3VudCAtPSBudW1fcG9pbnRzOwotCX0KIAkvKiAgd3JpdGUgZGF0YSB0byBib2FyZCdzIGZpZm8gKi8KIAlvdXRzdyhkZXZwcml2LT5hb19yZWdpc3RlcnMgKyBEQUNEQVRBLCBkZXZwcml2LT5hb19idWZmZXIsIG51bV9ieXRlcyk7CiAKQEAgLTE1MzQsOSArMTUzMCw4IEBACiAJc3RhdGljIGNvbnN0IGludCB0aW1lb3V0ID0gMTAwMDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChkZXYtPmF0dGFjaGVkID09IDApIHsKKwlpZiAoZGV2LT5hdHRhY2hlZCA9PSAwKQogCQlyZXR1cm4gSVJRX05PTkU7Ci0JfQogCiAJYXN5bmMgPSBzLT5hc3luYzsKIAlhc3luYy0+ZXZlbnRzID0gMDsKQEAgLTE1NTgsMTUgKzE1NTMsMTMgQEAKIAogCXN0YXR1cyA9IGludyhkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIElOVF9BRENGSUZPKTsKICNpZmRlZiBDQl9QQ0lEQVNfREVCVUcKLQlpZiAoKHN0YXR1cyAmIChJTlQgfCBFT0FJIHwgTEFERlVMIHwgREFIRkkgfCBEQUVNSSkpID09IDApIHsKKwlpZiAoKHN0YXR1cyAmIChJTlQgfCBFT0FJIHwgTEFERlVMIHwgREFIRkkgfCBEQUVNSSkpID09IDApCiAJCWNvbWVkaV9lcnJvcihkZXYsICJzcHVyaW91cyBpbnRlcnJ1cHQiKTsKLQl9CiAjZW5kaWYKIAogCS8qICBjaGVjayBmb3IgYW5hbG9nIG91dHB1dCBpbnRlcnJ1cHQgKi8KLQlpZiAoc3RhdHVzICYgKERBSEZJIHwgREFFTUkpKSB7CisJaWYgKHN0YXR1cyAmIChEQUhGSSB8IERBRU1JKSkKIAkJaGFuZGxlX2FvX2ludGVycnVwdChkZXYsIHN0YXR1cyk7Ci0JfQogCS8qICBjaGVjayBmb3IgYW5hbG9nIGlucHV0IGludGVycnVwdHMgKi8KIAkvKiAgaWYgZmlmbyBoYWxmLWZ1bGwgKi8KIAlpZiAoc3RhdHVzICYgQURIRkkpIHsKQEAgLTE2NzUsOSArMTY2OCw4IEBACiAJCQkJCSAgICAgICBudW1fcG9pbnRzICogc2l6ZW9mKHNob3J0KSk7CiAJCW51bV9wb2ludHMgPSBudW1fYnl0ZXMgLyBzaXplb2Yoc2hvcnQpOwogCi0JCWlmIChhc3luYy0+Y21kLnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJaWYgKGFzeW5jLT5jbWQuc3RvcF9zcmMgPT0gVFJJR19DT1VOVCkKIAkJCWRldnByaXYtPmFvX2NvdW50IC09IG51bV9wb2ludHM7Ci0JCX0KIAkJLyogIHdyaXRlIGRhdGEgdG8gYm9hcmQncyBmaWZvICovCiAJCW91dHN3KGRldnByaXYtPmFvX3JlZ2lzdGVycyArIERBQ0RBVEEsIGRldnByaXYtPmFvX2J1ZmZlciwKIAkJICAgICAgbnVtX3BvaW50cyk7CkBAIC0xODUyLDcgKzE4NDQsNyBAQAogfQogCiBzdGF0aWMgaW50IG52cmFtX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGFkZHJlc3MsCi0JCSAgICAgIHVpbnQ4X3QgKiBkYXRhKQorCQkJdWludDhfdCAqZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IGRldnByaXYtPnM1OTMzX2NvbmZpZzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRkYS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRkYS5jCmluZGV4IDc4MjM1NzcuLjgxODI5ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkZGEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGRhLmMKQEAgLTQxMCw5ICs0MTAsOCBAQAogICovCiAJaWYgKGRldnByaXYpIHsKIAkJaWYgKGRldnByaXYtPnBjaV9kZXYpIHsKLQkJCWlmIChkZXZwcml2LT5kYWMpIHsKKwkJCWlmIChkZXZwcml2LT5kYWMpCiAJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOwotCQkJfQogCQkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CiAJCX0KIAl9CkBAIC02NzcsOSArNjc2LDggQEAKIAogCWZvciAoaSA9IDE7IGkgPD0gdmFsdWVfd2lkdGg7IGkrKykgewogCQkvKiAgcmVhZCBiaXRzIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGZpcnN0ICovCi0JCWlmIChpbndfcChkZXZwcml2LT5kYWMgKyBEQUNBTElCUkFUSU9OMSkgJiBTRVJJQUxfT1VUX0JJVCkgeworCQlpZiAoaW53X3AoZGV2cHJpdi0+ZGFjICsgREFDQUxJQlJBVElPTjEpICYgU0VSSUFMX09VVF9CSVQpCiAJCQl2YWx1ZSB8PSAxIDw8ICh2YWx1ZV93aWR0aCAtIGkpOwotCQl9CiAJfQogCiAJcmV0dXJuIHZhbHVlOwpAQCAtNzE2LDkgKzcxNCw4IEBACiAJLyogIHNlbmQgc2VyaWFsIG91dHB1dCBzdHJlYW0gdG8gZWVwcm9tICovCiAJY2FsMl9iaXRzID0gU0VMRUNUX0VFUFJPTV9CSVQgfCBERVNFTEVDVF9SRUZfREFDX0JJVCB8IERVTU1ZX0JJVDsKIAkvKiAgZGVhY3RpdmF0ZSBjYWxkYWNzIChvbmUgY2FsZGFjIGZvciBldmVyeSB0d28gY2hhbm5lbHMpICovCi0JZm9yIChpID0gMDsgaSA8IG1heF9udW1fY2FsZGFjczsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG1heF9udW1fY2FsZGFjczsgaSsrKQogCQljYWwyX2JpdHMgfD0gREVTRUxFQ1RfQ0FMREFDX0JJVChpKTsKLQl9CiAJb3V0d19wKGNhbDJfYml0cywgZGV2cHJpdi0+ZGFjICsgREFDQUxJQlJBVElPTjIpOwogCiAJLyogIHRlbGwgZWVwcm9tIHdlIHdhbnQgdG8gcmVhZCAqLwpAQCAtNzU2LDkgKzc1Myw4IEBACiAqLwogCWNhbDJfYml0cyA9IERFU0VMRUNUX1JFRl9EQUNfQklUIHwgRFVNTVlfQklUOwogCS8qICBkZWFjdGl2YXRlIGNhbGRhY3MgKG9uZSBjYWxkYWMgZm9yIGV2ZXJ5IHR3byBjaGFubmVscykgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbWF4X251bV9jYWxkYWNzOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbWF4X251bV9jYWxkYWNzOyBpKyspCiAJCWNhbDJfYml0cyB8PSBERVNFTEVDVF9DQUxEQUNfQklUKGkpOwotCX0KIAkvKiAgYWN0aXZhdGUgdGhlIGNhbGRhYyB3ZSB3YW50ICovCiAJY2FsMl9iaXRzICY9IH5ERVNFTEVDVF9DQUxEQUNfQklUKGNhbGRhYyk7CiAJb3V0d19wKGNhbDJfYml0cywgZGV2cHJpdi0+ZGFjICsgREFDQUxJQlJBVElPTjIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRpby5jCmluZGV4IDdkYWFkMGEuLjM4Y2NkMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGlvLmMKQEAgLTI4MywxNyArMjgzLDE1IEBACiAJcHJpbnRrKCJjb21lZGklZDogY2JfcGNpZGlvOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOwogCWlmIChkZXZwcml2KSB7CiAJCWlmIChkZXZwcml2LT5wY2lfZGV2KSB7Ci0JCQlpZiAoZGV2cHJpdi0+ZGlvX3JlZ19iYXNlKSB7CisJCQlpZiAoZGV2cHJpdi0+ZGlvX3JlZ19iYXNlKQogCQkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lfZGV2KTsKLQkJCX0KIAkJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaV9kZXYpOwogCQl9CiAJfQogCWlmIChkZXYtPnN1YmRldmljZXMpIHsKIAkJaW50IGk7Ci0JCWZvciAoaSA9IDA7IGkgPCB0aGlzYm9hcmQtPm5fODI1NTsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCB0aGlzYm9hcmQtPm5fODI1NTsgaSsrKQogCQkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIGkpOwotCQl9CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaW1kYXMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2ltZGFzLmMKaW5kZXggY2JiY2EwNS4uMmU2MTcyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaW1kYXMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpbWRhcy5jCkBAIC0zMzAsMTEgKzMzMCwxMCBAQAogCiAJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CiAJLyogZGlnaXRhbCBpL28gc3ViZGV2aWNlICovCi0JaWYgKHRoaXNib2FyZC0+aGFzX2RpbykgeworCWlmICh0aGlzYm9hcmQtPmhhc19kaW8pCiAJCXN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBOVUxMLCBkZXZwcml2LT5CQURSNCk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7Ci0JfQogCiAJcHJpbnRrKCJhdHRhY2hlZFxuIik7CiAKQEAgLTM2NSw5ICszNjQsOCBAQAogCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKIAlpZiAoZGV2cHJpdikgewogCQlpZiAoZGV2cHJpdi0+cGNpX2RldikgewotCQkJaWYgKGRldnByaXYtPkJBRFIwKSB7CisJCQlpZiAoZGV2cHJpdi0+QkFEUjApCiAJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOwotCQkJfQogCQkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpbWRkYS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaW1kZGEuYwppbmRleCA5ODBmYTBhLi5lMzJhMzE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpbWRkYS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2ltZGRhLmMKQEAgLTI4NCwxMSArMjg0LDEwIEBACiAJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5hb19jaGFuczsKIAlzLT5tYXhkYXRhID0gZmlndXJlX291dF9tYXhkYXRhKHRoaXNib2FyZC0+YW9fYml0cyk7CiAJLyogdGhpcyBpcyBoYXJkLWNvZGVkIGhlcmUgKi8KLQlpZiAoaXQtPm9wdGlvbnNbMl0pIHsKKwlpZiAoaXQtPm9wdGlvbnNbMl0pCiAJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMDsKLQl9IGVsc2UgeworCWVsc2UKIAkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjU7Ci0JfQogCXMtPmluc25fd3JpdGUgPSAmYW9fd2luc247CiAJcy0+aW5zbl9yZWFkID0gJmFvX3JpbnNuOwogCkBAIC0zMzcsOSArMzM2LDggQEAKIAkJfQogCiAJCWlmIChkZXZwcml2LT5wY2lfZGV2KSB7Ci0JCQlpZiAoZGV2cHJpdi0+cmVnaXN0ZXJzKSB7CisJCQlpZiAoZGV2cHJpdi0+cmVnaXN0ZXJzKQogCQkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lfZGV2KTsKLQkJCX0KIAkJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaV9kZXYpOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfYm9uZC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9ib25kLmMKaW5kZXggY2YzOWEyNC4uZDcyNjBjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9ib25kLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9ib25kLmMKQEAgLTQxNyw3ICs0MTcsNyBAQAogCQlpbnQgc2RldiA9IC0xLCBuY2hhbnMsIHRtcDsKIAkJc3RydWN0IEJvbmRlZERldmljZSAqYmRldiA9IE5VTEw7CiAKLQkJaWYgKG1pbm9yIDwgMCB8fCBtaW5vciA+IENPTUVESV9OVU1fQk9BUkRfTUlOT1JTKSB7CisJCWlmIChtaW5vciA8IDAgfHwgbWlub3IgPj0gQ09NRURJX05VTV9CT0FSRF9NSU5PUlMpIHsKIAkJCUVSUk9SKCJNaW5vciAlZCBpcyBpbnZhbGlkIVxuIiwgbWlub3IpOwogCQkJcmV0dXJuIDA7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb250ZWNfcGNpX2Rpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbnRlY19wY2lfZGlvLmMKaW5kZXggYjE2ZDY1Mi4uOTUxMTgxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbnRlY19wY2lfZGlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbnRlY19wY2lfZGlvLmMKQEAgLTE3Myw5ICsxNzMsOCBAQAogCXByaW50aygiY29tZWRpJWQ6IGNvbnRlYzogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKIAogCWlmIChkZXZwcml2ICYmIGRldnByaXYtPnBjaV9kZXYpIHsKLQkJaWYgKGRldi0+aW9iYXNlKSB7CisJCWlmIChkZXYtPmlvYmFzZSkKIAkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lfZGV2KTsKLQkJfQogCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lfZGV2KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMwOF9jcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczA4X2NzLmMKaW5kZXggOWI5NDVlNS4uZjEyZWYxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczA4X2NzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczA4X2NzLmMKQEAgLTM0LDcgKzM0LDcgQEAKIGRhczA4IGRyaXZlci4KIAogT3B0aW9ucyAoZm9yIHBjbS1kYXMwOCk6Ci0gICAgICAgIE5PTkUKKwlOT05FCiAKIENvbW1hbmQgc3VwcG9ydCBkb2VzIG5vdCBleGlzdCwgYnV0IGNvdWxkIGJlIGFkZGVkIGZvciB0aGlzIGJvYXJkLgogKi8KQEAgLTUyLDcgKzUyLDcgQEAKICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqY3VyX2RldiA9IE5VTEw7CitzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmN1cl9kZXY7CiAKICNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IGRhczA4X2JvYXJkX3N0cnVjdCAqKWRldi0+Ym9hcmRfcHRyKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzNjQwMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczY0MDIuYwppbmRleCA5MjQ4N2Y1Li5hNDA0YTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzNjQwMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM2NDAyLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogI2RlZmluZSBEQVM2NDAyX1NJWkUgMTYKIAotI2RlZmluZSBOX1dPUkRTIDMwMDAqNjQKKyNkZWZpbmUgTl9XT1JEUyAoMzAwMCo2NCkKIAogI2RlZmluZSBTVE9QICAgIDAKICNkZWZpbmUgU1RBUlQgICAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzODAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzODAwLmMKaW5kZXggZWNiOTdjZC4uYWFkYzQ5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczgwMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM4MDAuYwpAQCAtMzk5LDkgKzM5OSw4IEBACiAJCX0gZWxzZSB7CiAJCQlmaWZvX2VtcHR5ID0gMDsJLyogIGNpby1kYXM4MDIvMTYgaGFzIG5vIGZpZm8gZW1wdHkgc3RhdHVzIGJpdCAqLwogCQl9Ci0JCWlmIChmaWZvX2VtcHR5KSB7CisJCWlmIChmaWZvX2VtcHR5KQogCQkJYnJlYWs7Ci0JCX0KIAkJLyogc3RyaXAgb2ZmIGV4dHJhbmVvdXMgYml0cyBmb3IgMTIgYml0IGNhcmRzICovCiAJCWlmICh0aGlzYm9hcmQtPnJlc29sdXRpb24gPT0gMTIpCiAJCQlkYXRhUG9pbnQgPSAoZGF0YVBvaW50ID4+IDQpICYgMHhmZmY7CkBAIC00NTcsOSArNDU2LDggQEAKIAlpbnQgYm9hcmQ7CiAKIAlwcmludGsoImNvbWVkaSVkOiBkYXM4MDA6IGlvIDB4JWx4IiwgZGV2LT5taW5vciwgaW9iYXNlKTsKLQlpZiAoaXJxKSB7CisJaWYgKGlycSkKIAkJcHJpbnRrKCIsIGlycSAldSIsIGlycSk7Ci0JfQogCXByaW50aygiXG4iKTsKIAogCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGRldi0+cHJpdmF0ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RtbTMyYXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kbW0zMmF0LmMKaW5kZXggOWRiOWE0Ni4uZDVjYmQ1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RtbTMyYXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZG1tMzJhdC5jCkBAIC0xMDQ4LDExICsxMDQ4LDEwIEBACiAJICogdmFsdWUgQ09NRURJX0lOUFVUIG9yIENPTUVESV9PVVRQVVQuICovCiAKIAkvKiBpZiBvdXRwdXQgY2xlYXIgdGhlIGJpdCwgb3RoZXJ3aXNlIHNldCBpdCAqLwotCWlmIChkYXRhWzBdID09IENPTUVESV9PVVRQVVQpIHsKKwlpZiAoZGF0YVswXSA9PSBDT01FRElfT1VUUFVUKQogCQlkZXZwcml2LT5kaW9fY29uZmlnICY9IH5jaGFuYml0OwotCX0gZWxzZSB7CisJZWxzZQogCQlkZXZwcml2LT5kaW9fY29uZmlnIHw9IGNoYW5iaXQ7Ci0JfQogCS8qIGdldCBhY2Nlc3MgdG8gdGhlIERJTyByZWdzICovCiAJZG1tX291dGIoZGV2LCBETU0zMkFUX0NOVFJMLCBETU0zMkFUX0RJT0FDQyk7CiAJLyogc2V0IHRoZSBESU8ncyB0byB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gc2V0dGluZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgwMS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgwMS5jCmluZGV4IDdiOWFmNWQuLjNmMzY1YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MDEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODAxLmMKQEAgLTE4LDEwICsxOCwxMCBAQAogICBbMV0gLSB1bnVzZWQKICAgWzJdIC0gQS9EIHJlZmVyZW5jZSAwPWRpZmZlcmVudGlhbCwgMT1zaW5nbGUtZW5kZWQKICAgWzNdIC0gQS9EIHJhbmdlCi0gICAgICAgICAgMCA9IFstMTAsMTBdCisJICAwID0gWy0xMCwgMTBdCiAJICAxID0gWzAsMTBdCiAgIFs0XSAtIEQvQSAwIHJhbmdlCi0gICAgICAgICAgMCA9IFstMTAsMTBdCisJICAwID0gWy0xMCwgMTBdCiAJICAxID0gWy01LDVdCiAJICAyID0gWy0yLjUsMi41XQogCSAgMyA9IFswLDEwXQpAQCAtMjc5LDkgKzI3OSw4IEBACiAKIAlkbyB7CiAJCXN0YXQgPSBpbmJfcChkZXYtPmlvYmFzZSArIERUMjgwMV9TVEFUVVMpOwotCQlpZiAoc3RhdCAmIChEVF9TX0NPTVBPU0lURV9FUlJPUiB8IERUX1NfUkVBRFkpKSB7CisJCWlmIChzdGF0ICYgKERUX1NfQ09NUE9TSVRFX0VSUk9SIHwgRFRfU19SRUFEWSkpCiAJCQlyZXR1cm4gc3RhdDsKLQkJfQogCQlpZiAoc3RhdCAmIERUX1NfREFUQV9PVVRfUkVBRFkpIHsKIAkJCSpkYXRhID0gaW5iX3AoZGV2LT5pb2Jhc2UgKyBEVDI4MDFfREFUQSk7CiAJCQlyZXR1cm4gMDsKQEAgLTMxNSw5ICszMTQsOCBAQAogCWRvIHsKIAkJc3RhdCA9IGluYl9wKGRldi0+aW9iYXNlICsgRFQyODAxX1NUQVRVUyk7CiAKLQkJaWYgKHN0YXQgJiBEVF9TX0NPTVBPU0lURV9FUlJPUikgeworCQlpZiAoc3RhdCAmIERUX1NfQ09NUE9TSVRFX0VSUk9SKQogCQkJcmV0dXJuIHN0YXQ7Ci0JCX0KIAkJaWYgKCEoc3RhdCAmIERUX1NfREFUQV9JTl9GVUxMKSkgewogCQkJb3V0Yl9wKGRhdGEgJiAweGZmLCBkZXYtPmlvYmFzZSArIERUMjgwMV9EQVRBKTsKIAkJCXJldHVybiAwOwpAQCAtMzU0LDE4ICszNTIsMTUgQEAKIAlpbnQgc3RhdDsKIAogCXN0YXQgPSBpbmJfcChkZXYtPmlvYmFzZSArIERUMjgwMV9TVEFUVVMpOwotCWlmIChzdGF0ICYgRFRfU19SRUFEWSkgeworCWlmIChzdGF0ICYgRFRfU19SRUFEWSkKIAkJcmV0dXJuIDA7Ci0JfQogCWRvIHsKIAkJc3RhdCA9IGluYl9wKGRldi0+aW9iYXNlICsgRFQyODAxX1NUQVRVUyk7CiAKLQkJaWYgKHN0YXQgJiBEVF9TX0NPTVBPU0lURV9FUlJPUikgeworCQlpZiAoc3RhdCAmIERUX1NfQ09NUE9TSVRFX0VSUk9SKQogCQkJcmV0dXJuIHN0YXQ7Ci0JCX0KLQkJaWYgKHN0YXQgJiBEVF9TX1JFQURZKSB7CisJCWlmIChzdGF0ICYgRFRfU19SRUFEWSkKIAkJCXJldHVybiAwOwotCQl9CiAJfSB3aGlsZSAoLS10aW1lb3V0ID4gMCk7CiAKIAlyZXR1cm4gLUVUSU1FOwpAQCAtMzgyLDkgKzM3Nyw4IEBACiAJCXByaW50awogCQkgICAgKCJkdDI4MDE6IGNvbXBvc2l0ZS1lcnJvciBpbiBkdDI4MDFfd3JpdGVjbWQoKSwgaWdub3JpbmdcbiIpOwogCX0KLQlpZiAoIShzdGF0ICYgRFRfU19SRUFEWSkpIHsKKwlpZiAoIShzdGF0ICYgRFRfU19SRUFEWSkpCiAJCXByaW50aygiZHQyODAxOiAhcmVhZHkgaW4gZHQyODAxX3dyaXRlY21kKCksIGlnbm9yaW5nXG4iKTsKLQl9CiAJb3V0Yl9wKGNvbW1hbmQsIGRldi0+aW9iYXNlICsgRFQyODAxX0NNRCk7CiAKIAlyZXR1cm4gMDsKQEAgLTQxOCw5ICs0MTIsOCBAQAogCQlpZiAoc3RhdCAmIERUX1NfUkVBRFkpCiAJCQlicmVhazsKIAl9IHdoaWxlICh0aW1lb3V0LS0pOwotCWlmICghdGltZW91dCkgeworCWlmICghdGltZW91dCkKIAkJcHJpbnRrKCJkdDI4MDE6IHRpbWVvdXQgMSBzdGF0dXM9MHglMDJ4XG4iLCBzdGF0KTsKLQl9CiAKIAkvKiBwcmludGsoImR0MjgwMTogcmVhZGluZyBkdW1teVxuIik7ICovCiAJLyogZHQyODAxX3JlYWRkYXRhKGRldiwmYm9hcmRfY29kZSk7ICovCkBAIC00MzYsOSArNDI5LDggQEAKIAkJaWYgKHN0YXQgJiBEVF9TX1JFQURZKQogCQkJYnJlYWs7CiAJfSB3aGlsZSAodGltZW91dC0tKTsKLQlpZiAoIXRpbWVvdXQpIHsKKwlpZiAoIXRpbWVvdXQpCiAJCXByaW50aygiZHQyODAxOiB0aW1lb3V0IDIgc3RhdHVzPTB4JTAyeFxuIiwgc3RhdCk7Ci0JfQogCiAJRFBSSU5USygiZHQyODAxOiByZWFkaW5nIGNvZGVcbiIpOwogCWR0MjgwMV9yZWFkZGF0YShkZXYsICZib2FyZF9jb2RlKTsKQEAgLTYyMywxMSArNjE1LDEwIEBACiBzdGF0aWMgaW50IGR0MjgwMV9lcnJvcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBpbnQgc3RhdCkKIHsKIAlpZiAoc3RhdCA8IDApIHsKLQkJaWYgKHN0YXQgPT0gLUVUSU1FKSB7CisJCWlmIChzdGF0ID09IC1FVElNRSkKIAkJCXByaW50aygiZHQyODAxOiB0aW1lb3V0XG4iKTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJcHJpbnRrKCJkdDI4MDE6IGVycm9yICVkXG4iLCBzdGF0KTsKLQkJfQogCQlyZXR1cm4gc3RhdDsKIAl9CiAJcHJpbnRrKCJkdDI4MDE6IGVycm9yIHN0YXR1cyAweCUwMngsIHJlc2V0dGluZy4uLlxuIiwgc3RhdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODE1LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODE1LmMKaW5kZXggZDFkYjkzYy4uZDFhNGY3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxNS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTUuYwpAQCAtMzQsMTkgKzM0LDE5IEBACiAgIFswXSAtIEkvTyBwb3J0IGJhc2UgYmFzZSBhZGRyZXNzCiAgIFsxXSAtIElSUSAodW51c2VkKQogICBbMl0gLSBWb2x0YWdlIHVuaXBvbGFyL2JpcG9sYXIgY29uZmlndXJhdGlvbgotICAgICAgICAgIDAgPT0gdW5pcG9sYXIgNVYgICgwViAtLSArNVYpCi0JICAxID09IGJpcG9sYXIgNVYgICgtNVYgLS0gKzVWKQorCTAgPT0gdW5pcG9sYXIgNVYgICgwViAtLSArNVYpCisJMSA9PSBiaXBvbGFyIDVWICAoLTVWIC0tICs1VikKICAgWzNdIC0gQ3VycmVudCBvZmZzZXQgY29uZmlndXJhdGlvbgotICAgICAgICAgIDAgPT0gZGlzYWJsZWQgICgwbUEgLS0gKzMybUFWKQotICAgICAgICAgIDEgPT0gZW5hYmxlZCAgKCs0bUEgLS0gKzIwbUFWKQorCTAgPT0gZGlzYWJsZWQgICgwbUEgLS0gKzMybUFWKQorCTEgPT0gZW5hYmxlZCAgKCs0bUEgLS0gKzIwbUFWKQogICBbNF0gLSBGaXJtd2FyZSBwcm9ncmFtIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAwID09IHByb2dyYW0gMSAoc2VlIG1hbnVhbCB0YWJsZSA1LTQpCi0gICAgICAgICAgMSA9PSBwcm9ncmFtIDIgKHNlZSBtYW51YWwgdGFibGUgNS00KQotICAgICAgICAgIDIgPT0gcHJvZ3JhbSAzIChzZWUgbWFudWFsIHRhYmxlIDUtNCkKLSAgICAgICAgICAzID09IHByb2dyYW0gNCAoc2VlIG1hbnVhbCB0YWJsZSA1LTQpCisJMCA9PSBwcm9ncmFtIDEgKHNlZSBtYW51YWwgdGFibGUgNS00KQorCTEgPT0gcHJvZ3JhbSAyIChzZWUgbWFudWFsIHRhYmxlIDUtNCkKKwkyID09IHByb2dyYW0gMyAoc2VlIG1hbnVhbCB0YWJsZSA1LTQpCisJMyA9PSBwcm9ncmFtIDQgKHNlZSBtYW51YWwgdGFibGUgNS00KQogICBbNV0gLSBBbmFsb2cgb3V0cHV0IDAgcmFuZ2UgY29uZmlndXJhdGlvbgotICAgICAgICAgIDAgPT0gdm9sdGFnZQotICAgICAgICAgIDEgPT0gY3VycmVudAorCTAgPT0gdm9sdGFnZQorCTEgPT0gY3VycmVudAogICBbNl0gLSBBbmFsb2cgb3V0cHV0IDEgcmFuZ2UgY29uZmlndXJhdGlvbiAoc2FtZSBvcHRpb25zKQogICBbN10gLSBBbmFsb2cgb3V0cHV0IDIgcmFuZ2UgY29uZmlndXJhdGlvbiAoc2FtZSBvcHRpb25zKQogICBbOF0gLSBBbmFsb2cgb3V0cHV0IDMgcmFuZ2UgY29uZmlndXJhdGlvbiAoc2FtZSBvcHRpb25zKQpAQCAtNjEsMTcgKzYxLDExIEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2R0MjgxNV9hb18zMl9jdXJyZW50ID0geyAxLCB7Ci0JCQkJCQkJCSAgICAgUkFOR0VfbUEoMCwKLQkJCQkJCQkJCSAgICAgIDMyKQotCQkJCQkJCQkgICAgIH0KLX07CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UKKwlyYW5nZV9kdDI4MTVfYW9fMzJfY3VycmVudCA9IHsxLCB7UkFOR0VfbUEoMCwgMzIpfSB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZHQyODE1X2FvXzIwX2N1cnJlbnQgPSB7IDEsIHsKLQkJCQkJCQkJICAgICBSQU5HRV9tQSg0LAotCQkJCQkJCQkJICAgICAgMjApCi0JCQkJCQkJCSAgICAgfQotfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZQorCXJhbmdlX2R0MjgxNV9hb18yMF9jdXJyZW50ID0gezEsIHtSQU5HRV9tQSg0LCAyMCl9IH07CiAKICNkZWZpbmUgRFQyODE1X1NJWkUgMgogCkBAIC0xMTgsOSArMTEyLDggQEAKIAlpbnQgaTsKIAlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwogCi0JZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspCiAJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKLQl9CiAKIAlyZXR1cm4gaTsKIH0KQEAgLTEzOSw5ICsxMzIsOCBAQAogCiAJCXN0YXR1cyA9IGR0MjgxNV93YWl0X2Zvcl9zdGF0dXMoZGV2LCAweDAwKTsKIAkJaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCQlwcmludGsKLQkJCSAgICAoImR0MjgxNTogZmFpbGVkIHRvIHdyaXRlIGxvdyBieXRlIG9uICVkIHJlYXNvbiAleFxuIiwKLQkJCSAgICAgY2hhbiwgc3RhdHVzKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImR0MjgxNTogZmFpbGVkIHRvIHdyaXRlIGxvdyBieXRlICIKKwkJCSAgICAgICAib24gJWQgcmVhc29uICV4XG4iLCBjaGFuLCBzdGF0dXMpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCkBAIC0xNDksOSArMTQxLDggQEAKIAogCQlzdGF0dXMgPSBkdDI4MTVfd2FpdF9mb3Jfc3RhdHVzKGRldiwgMHgxMCk7CiAJCWlmIChzdGF0dXMgIT0gMHgxMCkgewotCQkJcHJpbnRrCi0JCQkgICAgKCJkdDI4MTU6IGZhaWxlZCB0byB3cml0ZSBoaWdoIGJ5dGUgb24gJWQgcmVhc29uICV4XG4iLAotCQkJICAgICBjaGFuLCBzdGF0dXMpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZHQyODE1OiBmYWlsZWQgdG8gd3JpdGUgaGlnaCBieXRlICIKKwkJCSAgICAgICAib24gJWQgcmVhc29uICV4XG4iLCBjaGFuLCBzdGF0dXMpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbaV07CkBAIC0xNjMsMjQgKzE1NCwyNCBAQAogICBvcHRpb25zWzBdICAgQm9hcmQgYmFzZSBhZGRyZXNzCiAgIG9wdGlvbnNbMV0gICBJUlEgKG5vdCBhcHBsaWNhYmxlKQogICBvcHRpb25zWzJdICAgVm9sdGFnZSB1bmlwb2xhci9iaXBvbGFyIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAgICAgICAgMCA9PSB1bmlwb2xhciA1ViAgKDBWIC0tICs1VikKLQkJIDEgPT0gYmlwb2xhciA1ViAgKC01ViAtLSArNVYpCisJCTAgPT0gdW5pcG9sYXIgNVYgICgwViAtLSArNVYpCisJCTEgPT0gYmlwb2xhciA1ViAgKC01ViAtLSArNVYpCiAgIG9wdGlvbnNbM10gICBDdXJyZW50IG9mZnNldCBjb25maWd1cmF0aW9uCi0gICAgICAgICAgICAgICAgIDAgPT0gZGlzYWJsZWQgICgwbUEgLS0gKzMybUFWKQotICAgICAgICAgICAgICAgICAxID09IGVuYWJsZWQgICgrNG1BIC0tICsyMG1BVikKKwkJMCA9PSBkaXNhYmxlZCAgKDBtQSAtLSArMzJtQVYpCisJCTEgPT0gZW5hYmxlZCAgKCs0bUEgLS0gKzIwbUFWKQogICBvcHRpb25zWzRdICAgRmlybXdhcmUgcHJvZ3JhbSBjb25maWd1cmF0aW9uCi0gICAgICAgICAgICAgICAgIDAgPT0gcHJvZ3JhbSAxIChzZWUgbWFudWFsIHRhYmxlIDUtNCkKLSAgICAgICAgICAgICAgICAgMSA9PSBwcm9ncmFtIDIgKHNlZSBtYW51YWwgdGFibGUgNS00KQotICAgICAgICAgICAgICAgICAyID09IHByb2dyYW0gMyAoc2VlIG1hbnVhbCB0YWJsZSA1LTQpCi0gICAgICAgICAgICAgICAgIDMgPT0gcHJvZ3JhbSA0IChzZWUgbWFudWFsIHRhYmxlIDUtNCkKKwkJMCA9PSBwcm9ncmFtIDEgKHNlZSBtYW51YWwgdGFibGUgNS00KQorCQkxID09IHByb2dyYW0gMiAoc2VlIG1hbnVhbCB0YWJsZSA1LTQpCisJCTIgPT0gcHJvZ3JhbSAzIChzZWUgbWFudWFsIHRhYmxlIDUtNCkKKwkJMyA9PSBwcm9ncmFtIDQgKHNlZSBtYW51YWwgdGFibGUgNS00KQogICBvcHRpb25zWzVdICAgQW5hbG9nIG91dHB1dCAwIHJhbmdlIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAgICAgICAgMCA9PSB2b2x0YWdlCi0gICAgICAgICAgICAgICAgIDEgPT0gY3VycmVudAorCQkwID09IHZvbHRhZ2UKKwkJMSA9PSBjdXJyZW50CiAgIG9wdGlvbnNbNl0gICBBbmFsb2cgb3V0cHV0IDEgcmFuZ2UgY29uZmlndXJhdGlvbgogICAuLi4KICAgb3B0aW9uc1sxMl0gICBBbmFsb2cgb3V0cHV0IDcgcmFuZ2UgY29uZmlndXJhdGlvbgotICAgICAgICAgICAgICAgICAwID09IHZvbHRhZ2UKLSAgICAgICAgICAgICAgICAgMSA9PSBjdXJyZW50CisJCTAgPT0gdm9sdGFnZQorCQkxID09IGN1cnJlbnQKICAqLwogCiBzdGF0aWMgaW50IGR0MjgxNV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQpAQCAtMTkxLDkgKzE4Miw5IEBACiAJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CiAKIAlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKLQlwcmludGsoImNvbWVkaSVkOiBkdDI4MTU6IDB4JTA0bHggIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogZHQyODE1OiAweCUwNGx4ICIsIGRldi0+bWlub3IsIGlvYmFzZSk7CiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIERUMjgxNV9TSVpFLCAiZHQyODE1IikpIHsKLQkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0yMzYsMTkgKzIyNywxNyBAQAogCQkJdW5zaWduZWQgaW50IHByb2dyYW07CiAJCQlwcm9ncmFtID0gKGl0LT5vcHRpb25zWzRdICYgMHgzKSA8PCAzIHwgMHg3OwogCQkJb3V0Yihwcm9ncmFtLCBkZXYtPmlvYmFzZSArIERUMjgxNV9EQVRBKTsKLQkJCXByaW50aygiLCBwcm9ncmFtOiAweCV4IChAdD0lZClcbiIsIHByb2dyYW0sIGkpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiLCBwcm9ncmFtOiAweCV4IChAdD0lZClcbiIsCisJCQkgICAgICAgcHJvZ3JhbSwgaSk7CiAJCQlicmVhazsKIAkJfSBlbHNlIGlmIChzdGF0dXMgIT0gMHgwMCkgewotCQkJcHJpbnRrKCJkdDI4MTU6IHVuZXhwZWN0ZWQgc3RhdHVzIDB4JXggKEB0PSVkKVxuIiwKLQkJCSAgICAgICBzdGF0dXMsIGkpOwotCQkJaWYgKHN0YXR1cyAmIDB4NjApIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImR0MjgxNTogdW5leHBlY3RlZCBzdGF0dXMgMHgleCAiCisJCQkgICAgICAgIihAdD0lZClcbiIsIHN0YXR1cywgaSk7CisJCQlpZiAoc3RhdHVzICYgMHg2MCkKIAkJCQlvdXRiKDB4MDAsIGRldi0+aW9iYXNlICsgRFQyODE1X1NUQVRVUyk7Ci0JCQl9CiAJCX0KIAl9CiAKLQlwcmludGsoIlxuIik7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjYwLDcgKzI0OSw3IEBACiAKIHN0YXRpYyBpbnQgZHQyODE1X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewotCXByaW50aygiY29tZWRpJWQ6IGR0MjgxNTogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogZHQyODE1OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOwogCiAJZHQyODE1X2ZyZWVfcmVzb3VyY2VzKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDk4MTIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDk4MTIuYwppbmRleCAzMTJmNGYyLi45NmNhYWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQ5ODEyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0OTgxMi5jCkBAIC0yNjQsNyArMjY0LDcgQEAKIAogc3RhdGljIERFQ0xBUkVfTVVURVgoZHQ5ODEyX211dGV4KTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGR0OTgxMl90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGR0OTgxMl90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKDB4MDg2NywgMHg5ODEyKX0sCiAJe30JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9mbDUxMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ZsNTEyLmMKaW5kZXggOGZjYTE4MC4uYTEwYTJiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ZsNTEyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ZsNTEyLmMKQEAgLTc2LDE0ICs3NiwxNCBAQAogCXVuc2lnbmVkIGxvbmcgaW9iYXNlID0gZGV2LT5pb2Jhc2U7CiAKIAlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CS8qIHNhbXBsZSBuIHRpbWVzIG9uIHNlbGVjdGVkIGNoYW5uZWwgKi8KLQkJLyogWFhYIHByb2JhYmx5IGNhbiBtb3ZlIG5leHQgc3RlcCBvdXQgb2YgZm9yKCkgbG9vcCAtLSB3aWxsIG1ha2UKLQkJICogQUkgYSBsaXR0bGUgYml0IGZhc3Rlci4gKi8KKwkJLyogWFhYIHByb2JhYmx5IGNhbiBtb3ZlIG5leHQgc3RlcCBvdXQgb2YgZm9yKCkgbG9vcCAtLSB3aWxsCisJCSAqIG1ha2UgQUkgYSBsaXR0bGUgYml0IGZhc3Rlci4gKi8KIAkJb3V0YihjaGFuLCBpb2Jhc2UgKyAyKTsJLyogc2VsZWN0IGNoYW4gKi8KIAkJb3V0YigwLCBpb2Jhc2UgKyAzKTsJLyogc3RhcnQgY29udmVyc2lvbiAqLwogCQkvKiBYWFggc2hvdWxkIHRlc3QgImRvbmUiIGZsYWcgaW5zdGVhZCBvZiBkZWxheSAqLwogCQl1ZGVsYXkoMzApOwkvKiBzbGVlcCAzMCB1c2VjICovCiAJCWxvX2J5dGUgPSBpbmIoaW9iYXNlICsgMik7CS8qIGxvdyA4IGJ5dGUgKi8KLQkJaGlfYnl0ZSA9IGluYihpb2Jhc2UgKyAzKSAmIDB4ZjsJLyogaGlnaCA0IGJpdCBhbmQgbWFzayAqLworCQloaV9ieXRlID0gaW5iKGlvYmFzZSArIDMpICYgMHhmOyAvKiBoaWdoIDQgYml0IGFuZCBtYXNrICovCiAJCWRhdGFbbl0gPSBsb19ieXRlICsgKGhpX2J5dGUgPDwgOCk7CiAJfQogCXJldHVybiBuOwpAQCAtMTAxLDggKzEwMSwxMCBAQAogCXVuc2lnbmVkIGxvbmcgaW9iYXNlID0gZGV2LT5pb2Jhc2U7CS8qIGdldCBiYXNlIGFkZHJlc3MgICovCiAKIAlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CS8qIHdyaXRlIG4gZGF0YSBzZXQgKi8KLQkJb3V0YihkYXRhW25dICYgMHgwZmYsIGlvYmFzZSArIDQgKyAyICogY2hhbik7CS8qIHdyaXRlIGxvdyBieXRlICAgKi8KLQkJb3V0YigoZGF0YVtuXSAmIDB4ZjAwKSA+PiA4LCBpb2Jhc2UgKyA0ICsgMiAqIGNoYW4pOwkvKiB3cml0ZSBoaWdoIGJ5dGUgICovCisJCS8qIHdyaXRlIGxvdyBieXRlICAgKi8KKwkJb3V0YihkYXRhW25dICYgMHgwZmYsIGlvYmFzZSArIDQgKyAyICogY2hhbik7CisJCS8qIHdyaXRlIGhpZ2ggYnl0ZSAgKi8KKwkJb3V0YigoZGF0YVtuXSAmIDB4ZjAwKSA+PiA4LCBpb2Jhc2UgKyA0ICsgMiAqIGNoYW4pOwogCQlpbmIoaW9iYXNlICsgNCArIDIgKiBjaGFuKTsJLyogdHJpZyAqLwogCiAJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtuXTsKQEAgLTEyMSw5ICsxMjMsOCBAQAogCWludCBuOwogCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAKLQlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykKIAkJZGF0YVtuXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOwotCX0KIAogCXJldHVybiBuOwogfQpAQCAtMTM0LDEzICsxMzUsMTUgQEAKIHN0YXRpYyBpbnQgZmw1MTJfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKIHsKIAl1bnNpZ25lZCBsb25nIGlvYmFzZTsKLQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsJLyogcG9pbnRlciB0byB0aGUgc3ViZGV2aWNlOgotCQkJCQkgICBBbmFsb2cgaW4sIEFuYWxvZyBvdXQsICggbm90IG1hZGUgLT5hbmQgRGlnaXRhbCBJTykgKi8KKworCS8qIHBvaW50ZXIgdG8gdGhlIHN1YmRldmljZTogQW5hbG9nIGluLCBBbmFsb2cgb3V0LAorCSAgIChub3QgbWFkZSAtPmFuZCBEaWdpdGFsIElPKSAqLworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCiAJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07Ci0JcHJpbnRrKCJjb21lZGk6JWQgZmw1MTI6IDB4JTA0bHgiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaTolZCBmbDUxMjogMHglMDRseCIsIGRldi0+bWlub3IsIGlvYmFzZSk7CiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIEZMNTEyX1NJWkUsICJmbDUxMiIpKSB7Ci0JCXByaW50aygiIEkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiIEkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCWRldi0+aW9iYXNlID0gaW9iYXNlOwpAQCAtMTQ5LDcgKzE1Miw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAjaWYgREVCVUcKLQlwcmludGsoIm1hbGxvYyBva1xuIik7CisJcHJpbnRrKEtFUk5fREVCVUcgIm1hbGxvYyBva1xuIik7CiAjZW5kaWYKIAogCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMikgPCAwKQpAQCAtMTYwLDI0ICsxNjMsMzcgQEAKIAkgKi8KIAkvKiBBbmFsb2cgaW5kcHV0ICovCiAJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7Ci0Jcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOwkvKiBkZWZpbmUgc3ViZGV2aWNlIGFzIEFuYWxvZyBJbiAgICovCi0Jcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORDsJLyogeW91IGNhbiByZWFkIGl0IGZyb20gdXNlcnNwYWNlICAqLwotCXMtPm5fY2hhbiA9IDE2OwkJLyogTnVtYmVyIG9mIEFuYWxvZyBpbnB1dCBjaGFubmVscyAqLwotCXMtPm1heGRhdGEgPSAweDBmZmY7CS8qIGFjY2VwdCBvbmx5IDEyIGJpdHMgb2YgZGF0YSAgICAgKi8KLQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9mbDUxMjsJLyogZGV2aWNlIHVzZSBvbmUgb2YgdGhlIHJhbmdlcyAgICAqLwotCXMtPmluc25fcmVhZCA9IGZsNTEyX2FpX2luc247CS8qIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiByZWFkIEFEICAgKi8KLQlwcmludGsoImNvbWVkaTogZmw1MTI6IHN1YmRldmljZSAwIGluaXRpYWxpemVkXG4iKTsKKwkvKiBkZWZpbmUgc3ViZGV2aWNlIGFzIEFuYWxvZyBJbiAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwkvKiB5b3UgY2FuIHJlYWQgaXQgZnJvbSB1c2Vyc3BhY2UgKi8KKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EOworCS8qIE51bWJlciBvZiBBbmFsb2cgaW5wdXQgY2hhbm5lbHMgKi8KKwlzLT5uX2NoYW4gPSAxNjsKKwkvKiBhY2NlcHQgb25seSAxMiBiaXRzIG9mIGRhdGEgKi8KKwlzLT5tYXhkYXRhID0gMHgwZmZmOworCS8qIGRldmljZSB1c2Ugb25lIG9mIHRoZSByYW5nZXMgKi8KKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9mbDUxMjsKKwkvKiBmdW5jdGlvbiB0byBjYWxsIHdoZW4gcmVhZCBBRCAqLworCXMtPmluc25fcmVhZCA9IGZsNTEyX2FpX2luc247CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpOiBmbDUxMjogc3ViZGV2aWNlIDAgaW5pdGlhbGl6ZWRcbiIpOwogCiAJLyogQW5hbG9nIG91dHB1dCAqLwogCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOwotCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsJLyogZGVmaW5lIHN1YmRldmljZSBhcyBBbmFsb2cgT1VUICAgKi8KLQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CS8qIHlvdSBjYW4gd3JpdGUgaXQgZnJvbSB1c2Vyc3BhY2UgICovCi0Jcy0+bl9jaGFuID0gMjsJCS8qIE51bWJlciBvZiBBbmFsb2cgb3V0cHV0IGNoYW5uZWxzICovCi0Jcy0+bWF4ZGF0YSA9IDB4MGZmZjsJLyogYWNjZXB0IG9ubHkgMTIgYml0cyBvZiBkYXRhICAgICAgKi8KLQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9mbDUxMjsJLyogZGV2aWNlIHVzZSBvbmUgb2YgdGhlIHJhbmdlcyAgICAgKi8KLQlzLT5pbnNuX3dyaXRlID0gZmw1MTJfYW9faW5zbjsJLyogZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHdyaXRlIERBICAgKi8KLQlzLT5pbnNuX3JlYWQgPSBmbDUxMl9hb19pbnNuX3JlYWRiYWNrOwkvKiBmdW5jdGlvbiB0byBjYWxsIHdoZW4gcmVhZGluZyBEQSAgICovCi0JcHJpbnRrKCJjb21lZGk6IGZsNTEyOiBzdWJkZXZpY2UgMSBpbml0aWFsaXplZFxuIik7CisJLyogZGVmaW5lIHN1YmRldmljZSBhcyBBbmFsb2cgT1VUICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCS8qIHlvdSBjYW4gd3JpdGUgaXQgZnJvbSB1c2Vyc3BhY2UgKi8KKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJLyogTnVtYmVyIG9mIEFuYWxvZyBvdXRwdXQgY2hhbm5lbHMgKi8KKwlzLT5uX2NoYW4gPSAyOworCS8qIGFjY2VwdCBvbmx5IDEyIGJpdHMgb2YgZGF0YSAqLworCXMtPm1heGRhdGEgPSAweDBmZmY7CisJLyogZGV2aWNlIHVzZSBvbmUgb2YgdGhlIHJhbmdlcyAqLworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2ZsNTEyOworCS8qIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB3cml0ZSBEQSAqLworCXMtPmluc25fd3JpdGUgPSBmbDUxMl9hb19pbnNuOworCS8qIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiByZWFkaW5nIERBICovCisJcy0+aW5zbl9yZWFkID0gZmw1MTJfYW9faW5zbl9yZWFkYmFjazsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGk6IGZsNTEyOiBzdWJkZXZpY2UgMSBpbml0aWFsaXplZFxuIik7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTE4Niw2ICsyMDIsNiBAQAogewogCWlmIChkZXYtPmlvYmFzZSkKIAkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIEZMNTEyX1NJWkUpOwotCXByaW50aygiY29tZWRpJWQ6IGZsNTEyOiBkdW1teSBpIGRldGFjaFxuIiwgZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IGZsNTEyOiBkdW1teSBpIGRldGFjaFxuIiwgZGV2LT5taW5vcik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvanIzX3BjaS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuYwppbmRleCBiZDM5Nzg0Li5mZTViNDk1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvanIzX3BjaS5jCkBAIC05NTQsNiArOTU0LDggQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitNT0RVTEVfRklSTVdBUkUoImNvbWVkaS9qcjNwY2kuaWRtIik7CisKIHN0YXRpYyBpbnQganIzX3BjaV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tcGM2MjQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tcGM2MjQuYwppbmRleCBjYjRkYTJhLi4xMmU3MmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbXBjNjI0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21wYzYyNC5jCkBAIC0yODQsNyArMjg0LDcgQEAKIAlvdXRiKGluc24tPmNoYW5zcGVjLCBkZXYtPmlvYmFzZSArIE1QQzYyNF9HTk1VWENIKTsKIC8qIHByaW50aygiQ2hhbm5lbCAlZDogXG4iLCBpbnNuLT5jaGFuc3BlYyk7ICovCiAJaWYgKCFpbnNuLT5uKSB7Ci0JCXByaW50aygiTVBDNjI0OiBXYXJuaW5nLCBubyBkYXRhIHRvIGFxdWlyZVxuIik7CisJCXByaW50aygiTVBDNjI0OiBXYXJuaW5nLCBubyBkYXRhIHRvIGFjcXVpcmVcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjV4eC5jCmluZGV4IGJiZjc1ZWIuLmMyMjNmNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1eHguYwpAQCAtMjYsMTIgKzI2LDEzIEBACiAvKgogRHJpdmVyOiBuaV82NXh4CiBEZXNjcmlwdGlvbjogTmF0aW9uYWwgSW5zdHJ1bWVudHMgNjV4eCBzdGF0aWMgZGlvIGJvYXJkcwotQXV0aG9yOiBKb24gR3JpZXJzb24gPGpkQHJlbmtvLmNvLnVrPiwgRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorQXV0aG9yOiBKb24gR3JpZXJzb24gPGpkQHJlbmtvLmNvLnVrPiwKKwlGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiBTdGF0dXM6IHRlc3RpbmcKLURldmljZXM6IFtOYXRpb25hbCBJbnN0cnVtZW50c10gUENJLTY1MDkgKG5pXzY1eHgpLCBQWEktNjUwOSwgUENJLTY1MTAsIFBDSS02NTExLAotICBQWEktNjUxMSwgUENJLTY1MTIsIFBYSS02NTEyLCBQQ0ktNjUxMywgUFhJLTY1MTMsIFBDSS02NTE0LCBQWEktNjUxNCwgUENJLTY1MTUsCi0gIFBYSS02NTE1LCBQQ0ktNjUxNiwgUENJLTY1MTcsIFBDSS02NTE4LCBQQ0ktNjUxOSwgUENJLTY1MjAsIFBDSS02NTIxLCBQWEktNjUyMSwKLSAgUENJLTY1MjgsIFBYSS02NTI4CitEZXZpY2VzOiBbTmF0aW9uYWwgSW5zdHJ1bWVudHNdIFBDSS02NTA5IChuaV82NXh4KSwgUFhJLTY1MDksIFBDSS02NTEwLAorICBQQ0ktNjUxMSwgUFhJLTY1MTEsIFBDSS02NTEyLCBQWEktNjUxMiwgUENJLTY1MTMsIFBYSS02NTEzLCBQQ0ktNjUxNCwKKyAgUFhJLTY1MTQsIFBDSS02NTE1LCBQWEktNjUxNSwgUENJLTY1MTYsIFBDSS02NTE3LCBQQ0ktNjUxOCwgUENJLTY1MTksCisgIFBDSS02NTIwLCBQQ0ktNjUyMSwgUFhJLTY1MjEsIFBDSS02NTI4LCBQWEktNjUyOAogVXBkYXRlZDogV2VkIE9jdCAxOCAwODo1OToxMSBFRFQgMjAwNgogCiBCYXNlZCBvbiB0aGUgUENJLTY1MjcgZHJpdmVyIGJ5IGRzLgpAQCAtNDE4LDkgKzQxOSwxMCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAliYXNlX2JpdGZpZWxkX2NoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKIAlmb3IgKGogPSAwOyBqIDwgbWF4X3BvcnRzX3Blcl9iaXRmaWVsZDsgKytqKSB7Ci0JCWNvbnN0IHVuc2lnbmVkIHBvcnRfb2Zmc2V0ID0gbmlfNjV4eF9wb3J0X2J5X2NoYW5uZWwoYmFzZV9iaXRmaWVsZF9jaGFubmVsKSArIGo7CisJCWNvbnN0IHVuc2lnbmVkIHBvcnRfb2Zmc2V0ID0KKwkJCW5pXzY1eHhfcG9ydF9ieV9jaGFubmVsKGJhc2VfYml0ZmllbGRfY2hhbm5lbCkgKyBqOwogCQljb25zdCB1bnNpZ25lZCBwb3J0ID0KLQkJICAgIHNwcml2YXRlKHMpLT5iYXNlX3BvcnQgKyBwb3J0X29mZnNldDsKKwkJCXNwcml2YXRlKHMpLT5iYXNlX3BvcnQgKyBwb3J0X29mZnNldDsKIAkJdW5zaWduZWQgYmFzZV9wb3J0X2NoYW5uZWw7CiAJCXVuc2lnbmVkIHBvcnRfbWFzaywgcG9ydF9kYXRhLCBwb3J0X3JlYWRfYml0czsKIAkJaW50IGJpdHNoaWZ0OwpAQCAtNDYzLDExICs0NjUsMTEgQEAKIAkJCSAqIHN1YmRldmljZS4pICovCiAJCQlwb3J0X3JlYWRfYml0cyBePSAweEZGOwogCQl9Ci0JCWlmIChiaXRzaGlmdCA+IDApIHsKKwkJaWYgKGJpdHNoaWZ0ID4gMCkKIAkJCXBvcnRfcmVhZF9iaXRzIDw8PSBiaXRzaGlmdDsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJcG9ydF9yZWFkX2JpdHMgPj49IC1iaXRzaGlmdDsKLQkJfQorCiAJCXJlYWRfYml0cyB8PSBwb3J0X3JlYWRfYml0czsKIAl9CiAJZGF0YVsxXSA9IHJlYWRfYml0czsKQEAgLTUzMiw3ICs1MzQsOCBAQAogCWlmIChlcnIpCiAJCXJldHVybiAxOwogCi0JLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkKKwljb21wYXRpYmxlICovCiAKIAlpZiAoZXJyKQogCQlyZXR1cm4gMjsKQEAgLTY1Miw3ICs2NTUsNyBAQAogCXVuc2lnbmVkIGk7CiAJaW50IHJldDsKIAotCXByaW50aygiY29tZWRpJWQ6IG5pXzY1eHg6IiwgZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IG5pXzY1eHg6IiwgZGV2LT5taW5vcik7CiAKIAlyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBuaV82NXh4X3ByaXZhdGUpKTsKIAlpZiAocmV0IDwgMCkKQEAgLTY2NCwxNSArNjY3LDE1IEBACiAKIAlyZXQgPSBtaXRlX3NldHVwKHByaXZhdGUoZGV2KS0+bWl0ZSk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJlcnJvciBzZXR0aW5nIHVwIG1pdGVcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJlcnJvciBzZXR0aW5nIHVwIG1pdGVcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCWRldi0+Ym9hcmRfbmFtZSA9IGJvYXJkKGRldiktPm5hbWU7CiAJZGV2LT5pcnEgPSBtaXRlX2lycShwcml2YXRlKGRldiktPm1pdGUpOwotCXByaW50aygiICVzIiwgZGV2LT5ib2FyZF9uYW1lKTsKKwlwcmludGsoS0VSTl9JTkZPICIgJXMiLCBkZXYtPmJvYXJkX25hbWUpOwogCi0JcHJpbnRrKCIgSUQ9MHglMDJ4IiwKKwlwcmludGsoS0VSTl9JTkZPICIgSUQ9MHglMDJ4IiwKIAkgICAgICAgcmVhZGIocHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArIElEX1JlZ2lzdGVyKSk7CiAKIAlyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgNCk7CkBAIC03NzMsNyArNzc2LDcgQEAKIAkJCSAgIm5pXzY1eHgiLCBkZXYpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldi0+aXJxID0gMDsKLQkJcHJpbnRrKCIgaXJxIG5vdCBhdmFpbGFibGUiKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiIGlycSBub3QgYXZhaWxhYmxlIik7CiAJfQogCiAJcHJpbnRrKCJcbiIpOwpAQCAtNzkwLDIxICs3OTMsMTcgQEAKIAkJICAgICAgIE1hc3Rlcl9JbnRlcnJ1cHRfQ29udHJvbCk7CiAJfQogCi0JaWYgKGRldi0+aXJxKSB7CisJaWYgKGRldi0+aXJxKQogCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKLQl9CiAKIAlpZiAocHJpdmF0ZShkZXYpKSB7CiAJCXVuc2lnbmVkIGk7CiAJCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5fc3ViZGV2aWNlczsgKytpKSB7Ci0JCQlpZiAoZGV2LT5zdWJkZXZpY2VzW2ldLnByaXZhdGUpIHsKLQkJCQlrZnJlZShkZXYtPnN1YmRldmljZXNbaV0ucHJpdmF0ZSk7Ci0JCQkJZGV2LT5zdWJkZXZpY2VzW2ldLnByaXZhdGUgPSBOVUxMOwotCQkJfQorCQkJa2ZyZWUoZGV2LT5zdWJkZXZpY2VzW2ldLnByaXZhdGUpOworCQkJZGV2LT5zdWJkZXZpY2VzW2ldLnByaXZhdGUgPSBOVUxMOwogCQl9Ci0JCWlmIChwcml2YXRlKGRldiktPm1pdGUpIHsKKwkJaWYgKHByaXZhdGUoZGV2KS0+bWl0ZSkKIAkJCW1pdGVfdW5zZXR1cChwcml2YXRlKGRldiktPm1pdGUpOwotCQl9CiAJfQogCXJldHVybiAwOwogfQpAQCAtODMwLDcgKzgyOSw3IEBACiAJCQl9CiAJCX0KIAl9Ci0JcHJpbnRrKCJubyBkZXZpY2UgZm91bmRcbiIpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIm5vIGRldmljZSBmb3VuZFxuIik7CiAJbWl0ZV9saXN0X2RldmljZXMoKTsKIAlyZXR1cm4gLUVJTzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NjB4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjYweC5jCmluZGV4IDQwNGQzYzUuLjAxNzYzMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NjB4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY2MHguYwpAQCAtNTIsNyArNTIsOCBAQAogfTsKIAogI2RlZmluZSBOVU1fUEZJX0NIQU5ORUxTIDQwCi0vKiByZWFsbHkgdGhlcmUgYXJlIG9ubHkgdXAgdG8gMyBkbWEgY2hhbm5lbHMsIGJ1dCB0aGUgcmVnaXN0ZXIgbGF5b3V0IGFsbG93cyBmb3IgNCAqLworLyogcmVhbGx5IHRoZXJlIGFyZSBvbmx5IHVwIHRvIDMgZG1hIGNoYW5uZWxzLCBidXQgdGhlIHJlZ2lzdGVyIGxheW91dCBhbGxvd3MKK2ZvciA0ICovCiAjZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTCA0CiAKIC8qIFNlZSBSZWdpc3Rlci1MZXZlbCBQcm9ncmFtbWVyIE1hbnVhbCBwYWdlIDMuMSAqLwpAQCAtMTk4LDcgKzE5OSw3IEBACiAJY29uc3QgY2hhciAqbmFtZTsJLyogIFJlZ2lzdGVyIE5hbWUgKi8KIAlpbnQgb2Zmc2V0OwkJLyogIE9mZnNldCBmcm9tIGJhc2UgYWRkcmVzcyBmcm9tIEdQQ1QgY2hpcCAqLwogCWVudW0gbmlfNjYweF9yZWdpc3Rlcl9kaXJlY3Rpb24gZGlyZWN0aW9uOwotCWVudW0gbmlfNjYweF9yZWdpc3Rlcl93aWR0aCBzaXplOwkvKiAgMSBieXRlLCAyIGJ5dGVzLCBvciA0IGJ5dGVzICovCisJZW51bSBuaV82NjB4X3JlZ2lzdGVyX3dpZHRoIHNpemU7IC8qIDEgYnl0ZSwgMiBieXRlcywgb3IgNCBieXRlcyAqLwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBOSV82NjB4UmVnaXN0ZXJEYXRhIHJlZ2lzdGVyRGF0YVtOdW1SZWdpc3RlcnNdID0gewpAQCAtMzgyLDggKzM4Myw4IEBACiB9OwogCiAvKiBPZmZzZXQgb2YgdGhlIEdQQ1QgY2hpcHMgZnJvbSB0aGUgYmFzZS1hZHJlc3Mgb2YgdGhlIGNhcmQgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBHUENUX09GRlNFVFsyXSA9IHsgMHgwLCAweDgwMCB9OwkvKiBGaXJzdCBjaGlwIGlzIGF0IGJhc2UtYWRkcmVzcyArCi0JCQkJCQkJICAgMHgwMCwgZXRjLiAqLworLyogRmlyc3QgY2hpcCBpcyBhdCBiYXNlLWFkZHJlc3MgKyAweDAwLCBldGMuICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgR1BDVF9PRkZTRVRbMl0gPSB7IDB4MCwgMHg4MDAgfTsKIAogLyogQm9hcmQgZGVzY3JpcHRpb24qLwogc3RydWN0IG5pXzY2MHhfYm9hcmQgewpAQCAtNjkxLDEzICs2OTIsMTMgQEAKIAkJbmlfNjYweF9yZWdpc3RlciA9IEcwU3RhdHVzUmVnaXN0ZXI7CiAJCWJyZWFrOwogCWNhc2UgTklUSU9fRzFfU3RhdHVzX1JlZzoKLQkJbmlfNjYweF9yZWdpc3RlciA9IEcwU3RhdHVzUmVnaXN0ZXI7CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMVN0YXR1c1JlZ2lzdGVyOwogCQlicmVhazsKIAljYXNlIE5JVElPX0cyX1N0YXR1c19SZWc6Ci0JCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMFN0YXR1c1JlZ2lzdGVyOworCQluaV82NjB4X3JlZ2lzdGVyID0gRzJTdGF0dXNSZWdpc3RlcjsKIAkJYnJlYWs7CiAJY2FzZSBOSVRJT19HM19TdGF0dXNfUmVnOgotCQluaV82NjB4X3JlZ2lzdGVyID0gRzBTdGF0dXNSZWdpc3RlcjsKKwkJbmlfNjYweF9yZWdpc3RlciA9IEczU3RhdHVzUmVnaXN0ZXI7CiAJCWJyZWFrOwogCWNhc2UgTklUSU9fRzBfSW50ZXJydXB0X0VuYWJsZV9SZWc6CiAJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMEludGVycnVwdEVuYWJsZTsKQEAgLTcxMiw3ICs3MTMsNyBAQAogCQluaV82NjB4X3JlZ2lzdGVyID0gRzNJbnRlcnJ1cHRFbmFibGU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50aygiJXM6IHVuaGFuZGxlZCByZWdpc3RlciAweCV4IGluIHN3aXRjaC5cbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB1bmhhbmRsZWQgcmVnaXN0ZXIgMHgleCBpbiBzd2l0Y2guXG4iLAogCQkgICAgICAgX19mdW5jX18sIHJlZyk7CiAJCUJVRygpOwogCQlyZXR1cm4gMDsKQEAgLTczNyw3ICs3MzgsNyBAQAogCQl3cml0ZWwoYml0cywgd3JpdGVfYWRkcmVzcyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50aygiJXM6ICVzOiBidWchIHVuaGFuZGxlZCBjYXNlIChyZWc9MHgleCkgaW4gc3dpdGNoLlxuIiwKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICVzOiBidWchIHVuaGFuZGxlZCBjYXNlIChyZWc9MHgleCkgaW4gc3dpdGNoLlxuIiwKIAkJICAgICAgIF9fRklMRV9fLCBfX2Z1bmNfXywgcmVnKTsKIAkJQlVHKCk7CiAJCWJyZWFrOwpAQCAtNzYwLDcgKzc2MSw3IEBACiAJCXJldHVybiByZWFkbChyZWFkX2FkZHJlc3MpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoIiVzOiAlczogYnVnISB1bmhhbmRsZWQgY2FzZSAocmVnPTB4JXgpIGluIHN3aXRjaC5cbiIsCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAlczogYnVnISB1bmhhbmRsZWQgY2FzZSAocmVnPTB4JXgpIGluIHN3aXRjaC5cbiIsCiAJCSAgICAgICBfX0ZJTEVfXywgX19mdW5jX18sIHJlZyk7CiAJCUJVRygpOwogCQlicmVhazsKQEAgLTk5Myw5ICs5OTQsOSBAQAogCXNwaW5fbG9ja19pbml0KCZwcml2YXRlKGRldiktPm1pdGVfY2hhbm5lbF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcHJpdmF0ZShkZXYpLT5pbnRlcnJ1cHRfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnByaXZhdGUoZGV2KS0+c29mdF9yZWdfY29weV9sb2NrKTsKLQlmb3IgKGkgPSAwOyBpIDwgTlVNX1BGSV9DSEFOTkVMUzsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IE5VTV9QRklfQ0hBTk5FTFM7ICsraSkKIAkJcHJpdmF0ZShkZXYpLT5wZmlfb3V0cHV0X3NlbGVjdHNbaV0gPSBwZmlfb3V0cHV0X3NlbGVjdF9jb3VudGVyOwotCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0xMDA4LDkgKzEwMDksOCBAQAogCQlmb3IgKGogPSAwOyBqIDwgY291bnRlcnNfcGVyX2NoaXA7ICsraikgewogCQkJcHJpdmF0ZShkZXYpLT5taXRlX3JpbmdzW2ldW2pdID0KIAkJCSAgICBtaXRlX2FsbG9jX3JpbmcocHJpdmF0ZShkZXYpLT5taXRlKTsKLQkJCWlmIChwcml2YXRlKGRldiktPm1pdGVfcmluZ3NbaV1bal0gPT0gTlVMTCkgeworCQkJaWYgKHByaXZhdGUoZGV2KS0+bWl0ZV9yaW5nc1tpXVtqXSA9PSBOVUxMKQogCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfQogCQl9CiAJfQogCXJldHVybiAwOwpAQCAtMTAyMiw5ICsxMDIyLDggQEAKIAl1bnNpZ25lZCBqOwogCiAJZm9yIChpID0gMDsgaSA8IGJvYXJkKGRldiktPm5fY2hpcHM7ICsraSkgewotCQlmb3IgKGogPSAwOyBqIDwgY291bnRlcnNfcGVyX2NoaXA7ICsraikgeworCQlmb3IgKGogPSAwOyBqIDwgY291bnRlcnNfcGVyX2NoaXA7ICsraikKIAkJCW1pdGVfZnJlZV9yaW5nKHByaXZhdGUoZGV2KS0+bWl0ZV9yaW5nc1tpXVtqXSk7Ci0JCX0KIAl9CiB9CiAKQEAgLTEwMzYsNyArMTAzNSw3IEBACiAJdW5zaWduZWQgaTsKIAl1bnNpZ25lZCBnbG9iYWxfaW50ZXJydXB0X2NvbmZpZ19iaXRzOwogCi0JcHJpbnRrKCJjb21lZGklZDogbmlfNjYweDogIiwgZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IG5pXzY2MHg6ICIsIGRldi0+bWlub3IpOwogCiAJcmV0ID0gbmlfNjYweF9hbGxvY2F0ZV9wcml2YXRlKGRldik7CiAJaWYgKHJldCA8IDApCkBAIC0xMDQ5LDcgKzEwNDgsNyBAQAogCiAJcmV0ID0gbWl0ZV9zZXR1cDIocHJpdmF0ZShkZXYpLT5taXRlLCAxKTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImVycm9yIHNldHRpbmcgdXAgbWl0ZVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImVycm9yIHNldHRpbmcgdXAgbWl0ZVxuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCWNvbWVkaV9zZXRfaHdfZGV2KGRldiwgJnByaXZhdGUoZGV2KS0+bWl0ZS0+cGNpZGV2LT5kZXYpOwpAQCAtMTA1Nyw3ICsxMDU2LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXByaW50aygiICVzICIsIGRldi0+Ym9hcmRfbmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiICVzICIsIGRldi0+Ym9hcmRfbmFtZSk7CiAKIAlkZXYtPm5fc3ViZGV2aWNlcyA9IDIgKyBOSV82NjBYX01BWF9OVU1fQ09VTlRFUlM7CiAKQEAgLTEwNzgsMTUgKzEwNzcsMTYgQEAKIAlzLT5pbnNuX2JpdHMgPSBuaV82NjB4X2Rpb19pbnNuX2JpdHM7CiAJcy0+aW5zbl9jb25maWcgPSBuaV82NjB4X2Rpb19pbnNuX2NvbmZpZzsKIAlzLT5pb19iaXRzID0gMDsJCS8qIGFsbCBiaXRzIGRlZmF1bHQgdG8gaW5wdXQgKi8KLQkvKiAgd2UgdXNlIHRoZSBpb2NvbmZpZyByZWdpc3RlcnMgdG8gY29udHJvbCBkaW8gZGlyZWN0aW9uLCBzbyB6ZXJvIG91dHB1dCBlbmFibGVzIGluIHN0YyBkaW8gY29udHJvbCByZWcgKi8KKwkvKiAgd2UgdXNlIHRoZSBpb2NvbmZpZyByZWdpc3RlcnMgdG8gY29udHJvbCBkaW8gZGlyZWN0aW9uLCBzbyB6ZXJvCisJb3V0cHV0IGVuYWJsZXMgaW4gc3RjIGRpbyBjb250cm9sIHJlZyAqLwogCW5pXzY2MHhfd3JpdGVfcmVnaXN0ZXIoZGV2LCAwLCAwLCBTVENESU9Db250cm9sKTsKIAogCXByaXZhdGUoZGV2KS0+Y291bnRlcl9kZXYgPSBuaV9ncGN0X2RldmljZV9jb25zdHJ1Y3QoZGV2LAotCQkJCQkJCSAgICAgJm5pX2dwY3Rfd3JpdGVfcmVnaXN0ZXIsCi0JCQkJCQkJICAgICAmbmlfZ3BjdF9yZWFkX3JlZ2lzdGVyLAotCQkJCQkJCSAgICAgbmlfZ3BjdF92YXJpYW50XzY2MHgsCi0JCQkJCQkJICAgICBuaV82NjB4X251bV9jb3VudGVycwotCQkJCQkJCSAgICAgKGRldikpOworCQkJCQkJICAgICAmbmlfZ3BjdF93cml0ZV9yZWdpc3RlciwKKwkJCQkJCSAgICAgJm5pX2dwY3RfcmVhZF9yZWdpc3RlciwKKwkJCQkJCSAgICAgbmlfZ3BjdF92YXJpYW50XzY2MHgsCisJCQkJCQkgICAgIG5pXzY2MHhfbnVtX2NvdW50ZXJzCisJCQkJCQkgICAgIChkZXYpKTsKIAlpZiAocHJpdmF0ZShkZXYpLT5jb3VudGVyX2RldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlmb3IgKGkgPSAwOyBpIDwgTklfNjYwWF9NQVhfTlVNX0NPVU5URVJTOyArK2kpIHsKQEAgLTExMTgsMTIgKzExMTgsMTIgQEAKIAkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CiAJCX0KIAl9Ci0JZm9yIChpID0gMDsgaSA8IGJvYXJkKGRldiktPm5fY2hpcHM7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBib2FyZChkZXYpLT5uX2NoaXBzOyArK2kpCiAJCWluaXRfdGlvX2NoaXAoZGV2LCBpKTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IG5pXzY2MHhfbnVtX2NvdW50ZXJzKGRldik7ICsraSkgeworCisJZm9yIChpID0gMDsgaSA8IG5pXzY2MHhfbnVtX2NvdW50ZXJzKGRldik7ICsraSkKIAkJbmlfdGlvX2luaXRfY291bnRlcigmcHJpdmF0ZShkZXYpLT5jb3VudGVyX2Rldi0+Y291bnRlcnNbaV0pOwotCX0KKwogCWZvciAoaSA9IDA7IGkgPCBOVU1fUEZJX0NIQU5ORUxTOyArK2kpIHsKIAkJaWYgKGkgPCBtaW5fY291bnRlcl9wZmlfY2hhbikKIAkJCW5pXzY2MHhfc2V0X3BmaV9yb3V0aW5nKGRldiwgaSwgcGZpX291dHB1dF9zZWxlY3RfZG8pOwpAQCAtMTEzNCwxMyArMTEzNCwxMyBAQAogCX0KIAkvKiB0byBiZSBzYWZlLCBzZXQgY291bnRlcnN3YXAgYml0cyBvbiB0aW8gY2hpcHMgYWZ0ZXIgYWxsIHRoZSBjb3VudGVyCiAJICAgb3V0cHV0cyBoYXZlIGJlZW4gc2V0IHRvIGhpZ2ggaW1wZWRhbmNlIG1vZGUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgYm9hcmQoZGV2KS0+bl9jaGlwczsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IGJvYXJkKGRldiktPm5fY2hpcHM7ICsraSkKIAkJc2V0X3Rpb19jb3VudGVyc3dhcChkZXYsIGkpOwotCX0KKwogCXJldCA9IHJlcXVlc3RfaXJxKG1pdGVfaXJxKHByaXZhdGUoZGV2KS0+bWl0ZSksIG5pXzY2MHhfaW50ZXJydXB0LAogCQkJICBJUlFGX1NIQVJFRCwgIm5pXzY2MHgiLCBkZXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygiIGlycSBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiIGlycSBub3QgYXZhaWxhYmxlXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJZGV2LT5pcnEgPSBtaXRlX2lycShwcml2YXRlKGRldiktPm1pdGUpOwpAQCAtMTE0OSwxMyArMTE0OSwxMyBAQAogCQlnbG9iYWxfaW50ZXJydXB0X2NvbmZpZ19iaXRzIHw9IENhc2NhZGVfSW50X0VuYWJsZV9CaXQ7CiAJbmlfNjYweF93cml0ZV9yZWdpc3RlcihkZXYsIDAsIGdsb2JhbF9pbnRlcnJ1cHRfY29uZmlnX2JpdHMsCiAJCQkgICAgICAgR2xvYmFsSW50ZXJydXB0Q29uZmlnUmVnaXN0ZXIpOwotCXByaW50aygiYXR0YWNoZWRcbiIpOworCXByaW50ayhLRVJOX0lORk8gImF0dGFjaGVkXG4iKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBuaV82NjB4X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewotCXByaW50aygiY29tZWRpJWQ6IG5pXzY2MHg6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IG5pXzY2MHg6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CiAKIAkvKiBGcmVlIGlycSAqLwogCWlmIChkZXYtPmlycSkKQEAgLTExOTMsOSArMTE5Myw4IEBACiAJCQkgICAgICAgcHJpdmF0ZShkZXYpLT4KIAkJCSAgICAgICBkbWFfY29uZmlndXJhdGlvbl9zb2Z0X2NvcGllc1tjaGlwc2V0XSwKIAkJCSAgICAgICBETUFDb25maWdSZWdpc3Rlcik7Ci0JZm9yIChpID0gMDsgaSA8IE5VTV9QRklfQ0hBTk5FTFM7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBOVU1fUEZJX0NIQU5ORUxTOyArK2kpCiAJCW5pXzY2MHhfd3JpdGVfcmVnaXN0ZXIoZGV2LCBjaGlwc2V0LCAwLCBJT0NvbmZpZ1JlZyhpKSk7Ci0JfQogfQogCiBzdGF0aWMgaW50CkBAIC0xMjM0LDcgKzEyMzMsNyBAQAogCQkJfQogCQl9CiAJfQotCXByaW50aygibm8gZGV2aWNlIGZvdW5kXG4iKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICJubyBkZXZpY2UgZm91bmRcbiIpOwogCW1pdGVfbGlzdF9kZXZpY2VzKCk7CiAJcmV0dXJuIC1FSU87CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY3MHguYwppbmRleCA5YjQzNTQ3Li4xZTc5MmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmMKQEAgLTkzLDcgKzkzLDcgQEAKIAl7CiAJUENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDJjOTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LCB7CiAJUENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDE5MjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAotCSAgICAvKiB7IFBDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgwMDAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sICovCisJLyp7IFBDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgwMDAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sKi8KIAl7CiAJMH0KIH07CkBAIC0xNTEsNyArMTUxLDcgQEAKIAlpbnQgcmV0OwogCWludCBpOwogCi0JcHJpbnRrKCJjb21lZGklZDogbmlfNjcweDogIiwgZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IG5pXzY3MHg6ICIsIGRldi0+bWlub3IpOwogCiAJcmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgbmlfNjcweF9wcml2YXRlKSk7CiAJaWYgKHJldCA8IDApCkBAIC0xNjMsMTIgKzE2MywxMiBAQAogCiAJcmV0ID0gbWl0ZV9zZXR1cChkZXZwcml2LT5taXRlKTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImVycm9yIHNldHRpbmcgdXAgbWl0ZVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImVycm9yIHNldHRpbmcgdXAgbWl0ZVxuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKIAlkZXYtPmlycSA9IG1pdGVfaXJxKGRldnByaXYtPm1pdGUpOwotCXByaW50aygiICVzIiwgZGV2LT5ib2FyZF9uYW1lKTsKKwlwcmludGsoS0VSTl9JTkZPICIgJXMiLCBkZXYtPmJvYXJkX25hbWUpOwogCiAJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAyKSA8IDApCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjA3LDIxICsyMDcsMjIgQEAKIAlzLT5pbnNuX2JpdHMgPSBuaV82NzB4X2Rpb19pbnNuX2JpdHM7CiAJcy0+aW5zbl9jb25maWcgPSBuaV82NzB4X2Rpb19pbnNuX2NvbmZpZzsKIAotCXdyaXRlbCgweDEwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIE1JU0NfQ09OVFJPTF9PRkZTRVQpOwkvKiBDb25maWcgb2YgbWlzYyByZWdpc3RlcnMgKi8KLQl3cml0ZWwoMHgwMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBBT19DT05UUk9MX09GRlNFVCk7CS8qIENvbmZpZyBvZiBhbyByZWdpc3RlcnMgKi8KKwkvKiBDb25maWcgb2YgbWlzYyByZWdpc3RlcnMgKi8KKwl3cml0ZWwoMHgxMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBNSVNDX0NPTlRST0xfT0ZGU0VUKTsKKwkvKiBDb25maWcgb2YgYW8gcmVnaXN0ZXJzICovCisJd3JpdGVsKDB4MDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgQU9fQ09OVFJPTF9PRkZTRVQpOwogCi0JcHJpbnRrKCJhdHRhY2hlZFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiYXR0YWNoZWRcbiIpOwogCiAJcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBpbnQgbmlfNjcweF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKLQlwcmludGsoImNvbWVkaSVkOiBuaV82NzB4OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiBuaV82NzB4OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOwogCi0JaWYgKGRldi0+c3ViZGV2aWNlc1swXS5yYW5nZV90YWJsZV9saXN0KSB7Ci0JCWtmcmVlKGRldi0+c3ViZGV2aWNlc1swXS5yYW5nZV90YWJsZV9saXN0KTsKLQl9CisJa2ZyZWUoZGV2LT5zdWJkZXZpY2VzWzBdLnJhbmdlX3RhYmxlX2xpc3QpOworCiAJaWYgKGRldi0+cHJpdmF0ZSAmJiBkZXZwcml2LT5taXRlKQogCQltaXRlX3Vuc2V0dXAoZGV2cHJpdi0+bWl0ZSk7CiAKQEAgLTI1MCw4ICsyNTEsMTEgQEAKIAkgICB2Y2goMTUpICAgICAgOiAgICAgICAzMCAgICAgIHwgaWNoKDMxKSAgICAgICA6ICAgICAgIDMxICAgICAgKi8KIAogCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKLQkJd3JpdGVsKCgoY2hhbiAmIDE1KSA8PCAxKSB8ICgoY2hhbiAmIDE2KSA+PiA0KSwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBBT19DSEFOX09GRlNFVCk7CS8qIEZpcnN0IHdyaXRlIGluIGNoYW5uZWwgcmVnaXN0ZXIgd2hpY2ggY2hhbm5lbCB0byB1c2UgKi8KLQkJd3JpdGVsKGRhdGFbaV0sIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgQU9fVkFMVUVfT0ZGU0VUKTsJLyogd3JpdGUgY2hhbm5lbCB2YWx1ZSAqLworCQkvKiBGaXJzdCB3cml0ZSBpbiBjaGFubmVsIHJlZ2lzdGVyIHdoaWNoIGNoYW5uZWwgdG8gdXNlICovCisJCXdyaXRlbCgoKGNoYW4gJiAxNSkgPDwgMSkgfCAoKGNoYW4gJiAxNikgPj4gNCksCisJCSAgICAgICBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEFPX0NIQU5fT0ZGU0VUKTsKKwkJLyogd3JpdGUgY2hhbm5lbCB2YWx1ZSAqLworCQl3cml0ZWwoZGF0YVtpXSwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBBT19WQUxVRV9PRkZTRVQpOwogCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbaV07CiAJfQogCkBAIC0zNDQsNyArMzQ4LDcgQEAKIAkJCX0KIAkJfQogCX0KLQlwcmludGsoIm5vIGRldmljZSBmb3VuZFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAibm8gZGV2aWNlIGZvdW5kXG4iKTsKIAltaXRlX2xpc3RfZGV2aWNlcygpOwogCXJldHVybiAtRUlPOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0bWlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRtaW8uYwppbmRleCA4ZWFkMzExLi4wMDNkMDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRtaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRtaW8uYwpAQCAtMzI5LDExICszMjksMTEgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwbnBfZGV2aWNlX2lkIGRldmljZV9pZHNbXSA9IHsKLQl7LmlkID0gIk5JQzE5MDAiLC5kcml2ZXJfZGF0YSA9IDB9LAotCXsuaWQgPSAiTklDMjQwMCIsLmRyaXZlcl9kYXRhID0gMH0sCi0Jey5pZCA9ICJOSUMyNTAwIiwuZHJpdmVyX2RhdGEgPSAwfSwKLQl7LmlkID0gIk5JQzI2MDAiLC5kcml2ZXJfZGF0YSA9IDB9LAotCXsuaWQgPSAiTklDMjcwMCIsLmRyaXZlcl9kYXRhID0gMH0sCisJey5pZCA9ICJOSUMxOTAwIiwgLmRyaXZlcl9kYXRhID0gMH0sCisJey5pZCA9ICJOSUMyNDAwIiwgLmRyaXZlcl9kYXRhID0gMH0sCisJey5pZCA9ICJOSUMyNTAwIiwgLmRyaXZlcl9kYXRhID0gMH0sCisJey5pZCA9ICJOSUMyNjAwIiwgLmRyaXZlcl9kYXRhID0gMH0sCisJey5pZCA9ICJOSUMyNzAwIiwgLmRyaXZlcl9kYXRhID0gMH0sCiAJey5pZCA9ICIifQogfTsKIApAQCAtMzYyLDkgKzM2Miw5IEBACiAKIAlpZiAoZGV2LT5pb2Jhc2UpCiAJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBOSV9TSVpFKTsKLQlpZiAoZGV2LT5pcnEpIHsKKwlpZiAoZGV2LT5pcnEpCiAJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotCX0KKwogCWlmIChkZXZwcml2LT5pc2FwbnBfZGV2KQogCQlwbnBfZGV2aWNlX2RldGFjaChkZXZwcml2LT5pc2FwbnBfZGV2KTsKIApAQCAtMzg3LDggKzM4Nyw4IEBACiAKIAkJaWYgKHBucF9kZXZpY2VfYXR0YWNoKGlzYXBucF9kZXYpIDwgMCkgewogCQkJcHJpbnRrCi0JCQkgICAgKCJuaV9hdG1pbzogJXMgZm91bmQgYnV0IGFscmVhZHkgYWN0aXZlLCBza2lwcGluZy5cbiIsCi0JCQkgICAgIG5pX2JvYXJkc1tpXS5uYW1lKTsKKwkJCSAoIm5pX2F0bWlvOiAlcyBmb3VuZCBidXQgYWxyZWFkeSBhY3RpdmUsIHNraXBwaW5nLlxuIiwKKwkJCSAgbmlfYm9hcmRzW2ldLm5hbWUpOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKHBucF9hY3RpdmF0ZV9kZXYoaXNhcG5wX2RldikgPCAwKSB7CkBAIC00OTYsOSArNDk2LDkgQEAKIAkvKiBnZW5lcmljIEUgc2VyaWVzIHN0dWZmIGluIG5pX21pb19jb21tb24uYyAqLwogCiAJcmV0ID0gbmlfRV9pbml0KGRldiwgaXQpOwotCWlmIChyZXQgPCAwKSB7CisJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7Ci0JfQorCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUwOSwxNiArNTA5LDE2IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbl9uaV9ib2FyZHM7IGkrKykgewotCQlpZiAobmlfYm9hcmRzW2ldLmRldmljZV9pZCA9PSBkZXZpY2VfaWQpIHsKKwkJaWYgKG5pX2JvYXJkc1tpXS5kZXZpY2VfaWQgPT0gZGV2aWNlX2lkKQogCQkJcmV0dXJuIGk7Ci0JCX0KKwogCX0KLQlpZiAoZGV2aWNlX2lkID09IDI1NSkgeworCWlmIChkZXZpY2VfaWQgPT0gMjU1KQogCQlwcmludGsoIiBjYW4ndCBmaW5kIGJvYXJkXG4iKTsKLQl9IGVsc2UgaWYgKGRldmljZV9pZCA9PSAwKSB7CisJIGVsc2UgaWYgKGRldmljZV9pZCA9PSAwKQogCQlwcmludGsoIiBFRVBST00gcmVhZCBlcnJvciAoPykgb3IgZGV2aWNlIG5vdCBmb3VuZFxuIik7Ci0JfSBlbHNlIHsKKwkgZWxzZQogCQlwcmludGsoIiB1bmtub3duIGRldmljZSBJRCAlZCAtLSBjb250YWN0IGF1dGhvclxuIiwgZGV2aWNlX2lkKTsKLQl9CisKIAlyZXR1cm4gLTE7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxXzcwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2RhcV83MDAuYwppbmRleCBlZjVlMTE4Li5jOWIwMzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxXzcwMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfNzAwLmMKQEAgLTc2LDEzICs3NiwxNSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBkaW83MDBfYm9hcmQgZGlvNzAwX2JvYXJkc1tdID0gewogCXsKIAkgLm5hbWUgPSAiZGFxY2FyZC03MDAiLAotCSAuZGV2aWNlX2lkID0gMHg0NzQzLAkvKiAgMHgxMGIgaXMgbWFudWZhY3R1cmVyIGlkLCAweDQ3NDMgaXMgZGV2aWNlIGlkICovCisJICAvKiAgMHgxMGIgaXMgbWFudWZhY3R1cmVyIGlkLCAweDQ3NDMgaXMgZGV2aWNlIGlkICovCisJIC5kZXZpY2VfaWQgPSAweDQ3NDMsCiAJIC5idXN0eXBlID0gcGNtY2lhX2J1c3R5cGUsCiAJIC5oYXZlX2RpbyA9IDEsCiAJIH0sCiAJewogCSAubmFtZSA9ICJuaV9kYXFfNzAwIiwKLQkgLmRldmljZV9pZCA9IDB4NDc0MywJLyogIDB4MTBiIGlzIG1hbnVmYWN0dXJlciBpZCwgMHg0NzQzIGlzIGRldmljZSBpZCAqLworCSAgLyogIDB4MTBiIGlzIG1hbnVmYWN0dXJlciBpZCwgMHg0NzQzIGlzIGRldmljZSBpZCAqLworCSAuZGV2aWNlX2lkID0gMHg0NzQzLAogCSAuYnVzdHlwZSA9IHBjbWNpYV9idXN0eXBlLAogCSAuaGF2ZV9kaW8gPSAxLAogCSB9LApAQCAtMzA5LDExICszMTEsMTEgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlDQUxMQkFDS19BUkcgPSBhcmc7Ci0JaWYgKGNiID09IE5VTEwpIHsKKwlpZiAoY2IgPT0gTlVMTCkKIAkJQ0FMTEJBQ0tfRlVOQyA9IHN1YmRldl83MDBfY2I7Ci0JfSBlbHNlIHsKKwkgZWxzZQogCQlDQUxMQkFDS19GVU5DID0gY2I7Ci0JfQorCiAJcy0+aW5zbl9iaXRzID0gc3ViZGV2XzcwMF9pbnNuOwogCXMtPmluc25fY29uZmlnID0gc3ViZGV2XzcwMF9pbnNuX2NvbmZpZzsKIApAQCAtMzQ1LDEyICszNDcsMTAgQEAKIAogdm9pZCBzdWJkZXZfNzAwX2NsZWFudXAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7Ci0JaWYgKHMtPnByaXZhdGUpIHsKLQkJaWYgKHN1YmRldnByaXYtPmhhdmVfaXJxKSB7Ci0JCX0KKwlpZiAocy0+cHJpdmF0ZSkKKwkJaWYgKHN1YmRldnByaXYtPmhhdmVfaXJxKQogCi0JCWtmcmVlKHMtPnByaXZhdGUpOwotCX0KKwkJCWtmcmVlKHMtPnByaXZhdGUpOwogfQogCiBFWFBPUlRfU1lNQk9MKHN1YmRldl83MDBfaW5pdCk7CkBAIC0zOTAsOSArMzkwLDkgQEAKIAlwcmludGsoImNvbWVkaSVkOiBuaV9kYXFfNzAwOiAlcywgaW8gMHglbHgiLCBkZXYtPm1pbm9yLAogCSAgICAgICB0aGlzYm9hcmQtPm5hbWUsIGlvYmFzZSk7CiAjaWZkZWYgaW5jb21wbGV0ZQotCWlmIChpcnEpIHsKKwlpZiAoaXJxKQogCQlwcmludGsoIiwgaXJxICV1IiwgaXJxKTsKLQl9CisKICNlbmRpZgogCiAJcHJpbnRrKCJcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYwppbmRleCBkYzNmMzk4Li4zYzg4Y2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYwpAQCAtOTAsOCArOTAsMTAgQEAKIAogI2RlZmluZSBEUlZfTkFNRSAibmlfbGFicGMiCiAKLSNkZWZpbmUgTEFCUENfU0laRSAgICAgICAgICAgMzIJLyogIHNpemUgb2YgaW8gcmVnaW9uIHVzZWQgYnkgYm9hcmQgKi8KLSNkZWZpbmUgTEFCUENfVElNRVJfQkFTRSAgICAgICAgICAgIDUwMAkvKiAgMiBNSHogbWFzdGVyIGNsb2NrICovCisvKiBzaXplIG9mIGlvIHJlZ2lvbiB1c2VkIGJ5IGJvYXJkICovCisjZGVmaW5lIExBQlBDX1NJWkUgICAgICAgICAgIDMyCisvKiAyIE1IeiBtYXN0ZXIgY2xvY2sgKi8KKyNkZWZpbmUgTEFCUENfVElNRVJfQkFTRSAgICAgICAgICAgIDUwMAogCiAvKiBSZWdpc3RlcnMgZm9yIHRoZSBsYWItcGMrICovCiAKQEAgLTk5LDY5ICsxMDEsMTEwIEBACiAjZGVmaW5lIENPTU1BTkQxX1JFRwkweDAKICNkZWZpbmUgICBBRENfR0FJTl9NQVNLCSgweDcgPDwgNCkKICNkZWZpbmUgICBBRENfQ0hBTl9CSVRTKHgpCSgoeCkgJiAweDcpCi0jZGVmaW5lICAgQURDX1NDQU5fRU5fQklUCTB4ODAJLyogIGVuYWJsZXMgbXVsdGkgY2hhbm5lbCBzY2FucyAqLworLyogZW5hYmxlcyBtdWx0aSBjaGFubmVsIHNjYW5zICovCisjZGVmaW5lICAgQURDX1NDQU5fRU5fQklUCTB4ODAKICNkZWZpbmUgQ09NTUFORDJfUkVHCTB4MQotI2RlZmluZSAgIFBSRVRSSUdfQklUCTB4MQkvKiAgZW5hYmxlIHByZXRyaWdnZXJpbmcgKHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBTV1RSSUcpICovCi0jZGVmaW5lICAgSFdUUklHX0JJVAkweDIJLyogIGVuYWJsZSBwYWNlZCBjb252ZXJzaW9ucyBvbiBleHRlcm5hbCB0cmlnZ2VyICovCi0jZGVmaW5lICAgU1dUUklHX0JJVAkweDQJLyogIGVuYWJsZSBwYWNlZCBjb252ZXJzaW9ucyAqLwotI2RlZmluZSAgIENBU0NBREVfQklUCTB4OAkvKiAgdXNlIHR3byBjYXNjYWRlZCBjb3VudGVycyBmb3IgcGFjaW5nICovCisvKiBlbmFibGUgcHJldHJpZ2dlcmluZyAodXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIFNXVFJJRykgKi8KKyNkZWZpbmUgICBQUkVUUklHX0JJVAkweDEKKy8qIGVuYWJsZSBwYWNlZCBjb252ZXJzaW9ucyBvbiBleHRlcm5hbCB0cmlnZ2VyICovCisjZGVmaW5lICAgSFdUUklHX0JJVAkweDIKKy8qIGVuYWJsZSBwYWNlZCBjb252ZXJzaW9ucyAqLworI2RlZmluZSAgIFNXVFJJR19CSVQJMHg0CisvKiB1c2UgdHdvIGNhc2NhZGVkIGNvdW50ZXJzIGZvciBwYWNpbmcgKi8KKyNkZWZpbmUgICBDQVNDQURFX0JJVAkweDgKICNkZWZpbmUgICBEQUNfUEFDRURfQklUKGNoYW5uZWwpCSgweDQwIDw8ICgoY2hhbm5lbCkgJiAweDEpKQogI2RlZmluZSBDT01NQU5EM19SRUcJMHgyCi0jZGVmaW5lICAgRE1BX0VOX0JJVAkweDEJLyogIGVuYWJsZSBkbWEgdHJhbnNmZXJzICovCi0jZGVmaW5lICAgRElPX0lOVFJfRU5fQklUCTB4MgkvKiAgZW5hYmxlIGludGVycnVwdHMgZm9yIDgyNTUgKi8KLSNkZWZpbmUgICBETUFUQ19JTlRSX0VOX0JJVAkweDQJLyogIGVuYWJsZSBkbWEgdGVybWluYWwgY291bnQgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgVElNRVJfSU5UUl9FTl9CSVQJMHg4CS8qICBlbmFibGUgdGltZXIgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgRVJSX0lOVFJfRU5fQklUCTB4MTAJLyogIGVuYWJsZSBlcnJvciBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICBBRENfRk5FX0lOVFJfRU5fQklUCTB4MjAJLyogIGVuYWJsZSBmaWZvIG5vdCBlbXB0eSBpbnRlcnJ1cHQgKi8KKy8qIGVuYWJsZSBkbWEgdHJhbnNmZXJzICovCisjZGVmaW5lICAgRE1BX0VOX0JJVAkweDEKKy8qIGVuYWJsZSBpbnRlcnJ1cHRzIGZvciA4MjU1ICovCisjZGVmaW5lICAgRElPX0lOVFJfRU5fQklUCTB4MgorLyogZW5hYmxlIGRtYSB0ZXJtaW5hbCBjb3VudCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICBETUFUQ19JTlRSX0VOX0JJVAkweDQKKy8qIGVuYWJsZSB0aW1lciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICBUSU1FUl9JTlRSX0VOX0JJVAkweDgKKy8qIGVuYWJsZSBlcnJvciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICBFUlJfSU5UUl9FTl9CSVQJMHgxMAorLyogZW5hYmxlIGZpZm8gbm90IGVtcHR5IGludGVycnVwdCAqLworI2RlZmluZSAgIEFEQ19GTkVfSU5UUl9FTl9CSVQJMHgyMAogI2RlZmluZSBBRENfQ09OVkVSVF9SRUcJMHgzCiAjZGVmaW5lIERBQ19MU0JfUkVHKGNoYW5uZWwpCSgweDQgKyAyICogKChjaGFubmVsKSAmIDB4MSkpCiAjZGVmaW5lIERBQ19NU0JfUkVHKGNoYW5uZWwpCSgweDUgKyAyICogKChjaGFubmVsKSAmIDB4MSkpCiAjZGVmaW5lIEFEQ19DTEVBUl9SRUcJMHg4CiAjZGVmaW5lIERNQVRDX0NMRUFSX1JFRwkweGEKICNkZWZpbmUgVElNRVJfQ0xFQVJfUkVHCTB4YwotI2RlZmluZSBDT01NQU5ENl9SRUcJMHhlCS8qICAxMjAwIGJvYXJkcyBvbmx5ICovCi0jZGVmaW5lICAgQURDX0NPTU1PTl9CSVQJMHgxCS8qICBzZWxlY3QgZ3JvdW5kIG9yIGNvbW1vbi1tb2RlIHJlZmVyZW5jZSAqLwotI2RlZmluZSAgIEFEQ19VTklQX0JJVAkweDIJLyogIGFkYyB1bmlwb2xhciAqLwotI2RlZmluZSAgIERBQ19VTklQX0JJVChjaGFubmVsKQkoMHg0IDw8ICgoY2hhbm5lbCkgJiAweDEpKQkvKiAgZGFjIHVuaXBvbGFyICovCi0jZGVmaW5lICAgQURDX0ZIRl9JTlRSX0VOX0JJVAkweDIwCS8qICBlbmFibGUgZmlmbyBoYWxmIGZ1bGwgaW50ZXJydXB0ICovCi0jZGVmaW5lICAgQTFfSU5UUl9FTl9CSVQJMHg0MAkvKiAgZW5hYmxlIGludGVycnVwdCBvbiBlbmQgb2YgaGFyZHdhcmUgY291bnQgKi8KLSNkZWZpbmUgICBBRENfU0NBTl9VUF9CSVQgMHg4MAkvKiAgc2NhbiB1cCBmcm9tIGNoYW5uZWwgemVybyBpbnN0ZWFkIG9mIGRvd24gdG8gemVybyAqLworLyogMTIwMCBib2FyZHMgb25seSAqLworI2RlZmluZSBDT01NQU5ENl9SRUcJMHhlCisvKiBzZWxlY3QgZ3JvdW5kIG9yIGNvbW1vbi1tb2RlIHJlZmVyZW5jZSAqLworI2RlZmluZSAgIEFEQ19DT01NT05fQklUCTB4MQorLyogIGFkYyB1bmlwb2xhciAqLworI2RlZmluZSAgIEFEQ19VTklQX0JJVAkweDIKKy8qICBkYWMgdW5pcG9sYXIgKi8KKyNkZWZpbmUgICBEQUNfVU5JUF9CSVQoY2hhbm5lbCkJKDB4NCA8PCAoKGNoYW5uZWwpICYgMHgxKSkKKy8qIGVuYWJsZSBmaWZvIGhhbGYgZnVsbCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgICBBRENfRkhGX0lOVFJfRU5fQklUCTB4MjAKKy8qIGVuYWJsZSBpbnRlcnJ1cHQgb24gZW5kIG9mIGhhcmR3YXJlIGNvdW50ICovCisjZGVmaW5lICAgQTFfSU5UUl9FTl9CSVQJMHg0MAorLyogc2NhbiB1cCBmcm9tIGNoYW5uZWwgemVybyBpbnN0ZWFkIG9mIGRvd24gdG8gemVybyAqLworI2RlZmluZSAgIEFEQ19TQ0FOX1VQX0JJVCAweDgwCiAjZGVmaW5lIENPTU1BTkQ0X1JFRwkweGYKLSNkZWZpbmUgICBJTlRFUlZBTF9TQ0FOX0VOX0JJVAkweDEJLyogIGVuYWJsZXMgJ2ludGVydmFsJyBzY2FubmluZyAqLwotI2RlZmluZSAgIEVYVF9TQ0FOX0VOX0JJVAkweDIJLyogIGVuYWJsZXMgZXh0ZXJuYWwgc2lnbmFsIG9uIGNvdW50ZXIgYjEgb3V0cHV0IHRvIHRyaWdnZXIgc2NhbiAqLwotI2RlZmluZSAgIEVYVF9DT05WRVJUX09VVF9CSVQJMHg0CS8qICBjaG9vc2VzIGRpcmVjdGlvbiAob3V0cHV0IG9yIGlucHV0KSBmb3IgRVhUQ09OViogbGluZSAqLwotI2RlZmluZSAgIEFEQ19ESUZGX0JJVAkweDgJLyogIGNob29zZXMgZGlmZmVyZW50aWFsIGlucHV0cyBmb3IgYWRjIChpbiBjb25qdW5jdGlvbiB3aXRoIGJvYXJkIGp1bXBlcikgKi8KKy8qIGVuYWJsZXMgJ2ludGVydmFsJyBzY2FubmluZyAqLworI2RlZmluZSAgIElOVEVSVkFMX1NDQU5fRU5fQklUCTB4MQorLyogZW5hYmxlcyBleHRlcm5hbCBzaWduYWwgb24gY291bnRlciBiMSBvdXRwdXQgdG8gdHJpZ2dlciBzY2FuICovCisjZGVmaW5lICAgRVhUX1NDQU5fRU5fQklUCTB4MgorLyogY2hvb3NlcyBkaXJlY3Rpb24gKG91dHB1dCBvciBpbnB1dCkgZm9yIEVYVENPTlYqIGxpbmUgKi8KKyNkZWZpbmUgICBFWFRfQ09OVkVSVF9PVVRfQklUCTB4NAorLyogY2hvb3NlcyBkaWZmZXJlbnRpYWwgaW5wdXRzIGZvciBhZGMgKGluIGNvbmp1bmN0aW9uIHdpdGggYm9hcmQganVtcGVyKSAqLworI2RlZmluZSAgIEFEQ19ESUZGX0JJVAkweDgKICNkZWZpbmUgICBFWFRfQ09OVkVSVF9ESVNBQkxFX0JJVAkweDEwCi0jZGVmaW5lIENPTU1BTkQ1X1JFRwkweDFjCS8qICAxMjAwIGJvYXJkcyBvbmx5LCBjYWxpYnJhdGlvbiBzdHVmZiAqLwotI2RlZmluZSAgIEVFUFJPTV9XUklURV9VTlBST1RFQ1RfQklUCTB4NAkvKiAgZW5hYmxlIGVlcHJvbSBmb3Igd3JpdGUgKi8KLSNkZWZpbmUgICBESVRIRVJfRU5fQklUCTB4OAkvKiAgZW5hYmxlIGRpdGhlcmluZyAqLwotI2RlZmluZSAgIENBTERBQ19MT0FEX0JJVAkweDEwCS8qICBsb2FkIGNhbGlicmF0aW9uIGRhYyAqLwotI2RlZmluZSAgIFNDTE9DS19CSVQJMHgyMAkvKiAgc2VyaWFsIGNsb2NrIC0gcmlzaW5nIGVkZ2Ugd3JpdGVzLCBmYWxsaW5nIGVkZ2UgcmVhZHMgKi8KLSNkZWZpbmUgICBTREFUQV9CSVQJMHg0MAkvKiAgc2VyaWFsIGRhdGEgYml0IGZvciB3cml0aW5nIHRvIGVlcHJvbSBvciBjYWxpYnJhdGlvbiBkYWNzICovCi0jZGVmaW5lICAgRUVQUk9NX0VOX0JJVAkweDgwCS8qICBlbmFibGUgZWVwcm9tIGZvciByZWFkL3dyaXRlICovCisvKiAxMjAwIGJvYXJkcyBvbmx5LCBjYWxpYnJhdGlvbiBzdHVmZiAqLworI2RlZmluZSBDT01NQU5ENV9SRUcJMHgxYworLyogZW5hYmxlIGVlcHJvbSBmb3Igd3JpdGUgKi8KKyNkZWZpbmUgICBFRVBST01fV1JJVEVfVU5QUk9URUNUX0JJVAkweDQKKy8qIGVuYWJsZSBkaXRoZXJpbmcgKi8KKyNkZWZpbmUgICBESVRIRVJfRU5fQklUCTB4OAorLyogbG9hZCBjYWxpYnJhdGlvbiBkYWMgKi8KKyNkZWZpbmUgICBDQUxEQUNfTE9BRF9CSVQJMHgxMAorLyogc2VyaWFsIGNsb2NrIC0gcmlzaW5nIGVkZ2Ugd3JpdGVzLCBmYWxsaW5nIGVkZ2UgcmVhZHMgKi8KKyNkZWZpbmUgICBTQ0xPQ0tfQklUCTB4MjAKKy8qIHNlcmlhbCBkYXRhIGJpdCBmb3Igd3JpdGluZyB0byBlZXByb20gb3IgY2FsaWJyYXRpb24gZGFjcyAqLworI2RlZmluZSAgIFNEQVRBX0JJVAkweDQwCisvKiBlbmFibGUgZWVwcm9tIGZvciByZWFkL3dyaXRlICovCisjZGVmaW5lICAgRUVQUk9NX0VOX0JJVAkweDgwCiAjZGVmaW5lIElOVEVSVkFMX0NPVU5UX1JFRwkweDFlCiAjZGVmaW5lIElOVEVSVkFMX0xPQURfUkVHCTB4MWYKICNkZWZpbmUgICBJTlRFUlZBTF9MT0FEX0JJVFMJMHgxCiAKIC8qIHJlYWQtb25seSByZWdpc3RlcnMgKi8KICNkZWZpbmUgU1RBVFVTMV9SRUcJMHgwCi0jZGVmaW5lICAgREFUQV9BVkFJTF9CSVQJMHgxCS8qICBkYXRhIGlzIGF2YWlsYWJsZSBpbiBmaWZvICovCi0jZGVmaW5lICAgT1ZFUlJVTl9CSVQJMHgyCS8qICBvdmVycnVuIGhhcyBvY2N1cnJlZCAqLwotI2RlZmluZSAgIE9WRVJGTE9XX0JJVAkweDQJLyogIGZpZm8gb3ZlcmZsb3cgKi8KLSNkZWZpbmUgICBUSU1FUl9CSVQJMHg4CS8qICB0aW1lciBpbnRlcnJ1cHQgaGFzIG9jY3VyZWQgKi8KLSNkZWZpbmUgICBETUFUQ19CSVQJMHgxMAkvKiAgZG1hIHRlcm1pbmFsIGNvdW50IGhhcyBvY2N1cmVkICovCi0jZGVmaW5lICAgRVhUX1RSSUdfQklUCTB4NDAJLyogIGV4dGVybmFsIHRyaWdnZXIgaGFzIG9jY3VyZWQgKi8KLSNkZWZpbmUgU1RBVFVTMl9SRUcJMHgxZAkvKiAgMTIwMCBib2FyZHMgb25seSAqLwotI2RlZmluZSAgIEVFUFJPTV9PVVRfQklUCTB4MQkvKiAgcHJvZ3JhbW1hYmxlIGVlcHJvbSBzZXJpYWwgb3V0cHV0ICovCi0jZGVmaW5lICAgQTFfVENfQklUCTB4MgkvKiAgY291bnRlciBBMSB0ZXJtaW5hbCBjb3VudCAqLwotI2RlZmluZSAgIEZOSEZfQklUCTB4NAkvKiAgZmlmbyBub3QgaGFsZiBmdWxsICovCisvKiBkYXRhIGlzIGF2YWlsYWJsZSBpbiBmaWZvICovCisjZGVmaW5lICAgREFUQV9BVkFJTF9CSVQJMHgxCisvKiBvdmVycnVuIGhhcyBvY2N1cnJlZCAqLworI2RlZmluZSAgIE9WRVJSVU5fQklUCTB4MgorLyogZmlmbyBvdmVyZmxvdyAqLworI2RlZmluZSAgIE9WRVJGTE9XX0JJVAkweDQKKy8qIHRpbWVyIGludGVycnVwdCBoYXMgb2NjdXJlZCAqLworI2RlZmluZSAgIFRJTUVSX0JJVAkweDgKKy8qIGRtYSB0ZXJtaW5hbCBjb3VudCBoYXMgb2NjdXJlZCAqLworI2RlZmluZSAgIERNQVRDX0JJVAkweDEwCisvKiBleHRlcm5hbCB0cmlnZ2VyIGhhcyBvY2N1cmVkICovCisjZGVmaW5lICAgRVhUX1RSSUdfQklUCTB4NDAKKy8qIDEyMDAgYm9hcmRzIG9ubHkgKi8KKyNkZWZpbmUgU1RBVFVTMl9SRUcJMHgxZAorLyogcHJvZ3JhbW1hYmxlIGVlcHJvbSBzZXJpYWwgb3V0cHV0ICovCisjZGVmaW5lICAgRUVQUk9NX09VVF9CSVQJMHgxCisvKiBjb3VudGVyIEExIHRlcm1pbmFsIGNvdW50ICovCisjZGVmaW5lICAgQTFfVENfQklUCTB4MgorLyogZmlmbyBub3QgaGFsZiBmdWxsICovCisjZGVmaW5lICAgRk5IRl9CSVQJMHg0CiAjZGVmaW5lIEFEQ19GSUZPX1JFRwkweGEKIAogI2RlZmluZSBESU9fQkFTRV9SRUcJMHgxMAogI2RlZmluZSBDT1VOVEVSX0FfQkFTRV9SRUcJMHgxNAogI2RlZmluZSBDT1VOVEVSX0FfQ09OVFJPTF9SRUcJKENPVU5URVJfQV9CQVNFX1JFRyArIDB4MykKLSNkZWZpbmUgICBJTklUX0EwX0JJVFMJMHgxNAkvKiAgY2hlY2sgbW9kZXMgcHV0IGNvbnZlcnNpb24gcGFjZXIgb3V0cHV0IGluIGhhcm1sZXNzIHN0YXRlIChhMCBtb2RlIDIpICovCi0jZGVmaW5lICAgSU5JVF9BMV9CSVRTCTB4NzAJLyogIHB1dCBoYXJkd2FyZSBjb252ZXJzaW9uIGNvdW50ZXIgb3V0cHV0IGluIGhhcm1sZXNzIHN0YXRlIChhMSBtb2RlIDApICovCisvKiBjaGVjayBtb2RlcyBwdXQgY29udmVyc2lvbiBwYWNlciBvdXRwdXQgaW4gaGFybWxlc3Mgc3RhdGUgKGEwIG1vZGUgMikgKi8KKyNkZWZpbmUgICBJTklUX0EwX0JJVFMJMHgxNAorLyogcHV0IGhhcmR3YXJlIGNvbnZlcnNpb24gY291bnRlciBvdXRwdXQgaW4gaGFybWxlc3Mgc3RhdGUgKGExIG1vZGUgMCkgKi8KKyNkZWZpbmUgICBJTklUX0ExX0JJVFMJMHg3MAogI2RlZmluZSBDT1VOVEVSX0JfQkFTRV9SRUcJMHgxOAogCiBzdGF0aWMgaW50IGxhYnBjX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpOwpAQCAtNDIzLDcgKzQ2Niw3IEBACiAJIC5haV9zY2FuX3VwID0gMSwKIAkgLm1lbW9yeV9tYXBwZWRfaW8gPSAxLAogCSB9LAotCS8qICBkdW1teSBlbnRyeSBzbyBwY2kgYm9hcmQgd29ya3Mgd2hlbiBjb21lZGlfY29uZmlnIGlzIHBhc3NlZCBkcml2ZXIgbmFtZSAqLworLyogZHVtbXkgZW50cnkgc28gcGNpIGJvYXJkIHdvcmtzIHdoZW4gY29tZWRpX2NvbmZpZyBpcyBwYXNzZWQgZHJpdmVyIG5hbWUgKi8KIAl7CiAJIC5uYW1lID0gRFJWX05BTUUsCiAJIC5idXN0eXBlID0gcGNpX2J1c3R5cGUsCkBAIC00MzYsOCArNDc5LDEwIEBACiAgKi8KICNkZWZpbmUgdGhpc2JvYXJkICgoc3RydWN0IGxhYnBjX2JvYXJkX3N0cnVjdCAqKWRldi0+Ym9hcmRfcHRyKQogCi1zdGF0aWMgY29uc3QgaW50IGRtYV9idWZmZXJfc2l6ZSA9IDB4ZmYwMDsJLyogIHNpemUgaW4gYnl0ZXMgb2YgZG1hIGJ1ZmZlciAqLwotc3RhdGljIGNvbnN0IGludCBzYW1wbGVfc2l6ZSA9IDI7CS8qICAyIGJ5dGVzIHBlciBzYW1wbGUgKi8KKy8qIHNpemUgaW4gYnl0ZXMgb2YgZG1hIGJ1ZmZlciAqLworc3RhdGljIGNvbnN0IGludCBkbWFfYnVmZmVyX3NpemUgPSAweGZmMDA7CisvKiAyIGJ5dGVzIHBlciBzYW1wbGUgKi8KK3N0YXRpYyBjb25zdCBpbnQgc2FtcGxlX3NpemUgPSAyOwogCiAjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgbGFicGNfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKIApAQCAtNDgzLDEyICs1MjgsMTAgQEAKIAogCXByaW50aygiY29tZWRpJWQ6IG5pX2xhYnBjOiAlcywgaW8gMHglbHgiLCBkZXYtPm1pbm9yLCB0aGlzYm9hcmQtPm5hbWUsCiAJICAgICAgIGlvYmFzZSk7Ci0JaWYgKGlycSkgeworCWlmIChpcnEpCiAJCXByaW50aygiLCBpcnEgJXUiLCBpcnEpOwotCX0KLQlpZiAoZG1hX2NoYW4pIHsKKwlpZiAoZG1hX2NoYW4pCiAJCXByaW50aygiLCBkbWEgJXUiLCBkbWFfY2hhbik7Ci0JfQogCXByaW50aygiXG4iKTsKIAogCWlmIChpb2Jhc2UgPT0gMCkgewpAQCAtNTEzLDcgKzU1Niw3IEBACiAJCWRldnByaXYtPnJlYWRfYnl0ZSA9IGxhYnBjX2luYjsKIAkJZGV2cHJpdi0+d3JpdGVfYnl0ZSA9IGxhYnBjX291dGI7CiAJfQotCS8qICBpbml0aWFsaXplIGJvYXJkJ3MgY29tbWFuZCByZWdpc3RlcnMgKi8KKwkvKiBpbml0aWFsaXplIGJvYXJkJ3MgY29tbWFuZCByZWdpc3RlcnMgKi8KIAlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQxX2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDFfUkVHKTsKIAlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQyX2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDJfUkVHKTsKIAlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQzX2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDNfUkVHKTsKQEAgLTUzOCwxMiArNTgxLDEyIEBACiAJfQogCWRldi0+aXJxID0gaXJxOwogCi0JLyogIGdyYWIgZG1hIGNoYW5uZWwgKi8KKwkvKiBncmFiIGRtYSBjaGFubmVsICovCiAJaWYgKGRtYV9jaGFuID4gMykgewogCQlwcmludGsoIiBpbnZhbGlkIGRtYSBjaGFubmVsICV1XG4iLCBkbWFfY2hhbik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0gZWxzZSBpZiAoZG1hX2NoYW4pIHsKLQkJLyogIGFsbG9jYXRlIGRtYSBidWZmZXIgKi8KKwkJLyogYWxsb2NhdGUgZG1hIGJ1ZmZlciAqLwogCQlkZXZwcml2LT5kbWFfYnVmZmVyID0KIAkJICAgIGttYWxsb2MoZG1hX2J1ZmZlcl9zaXplLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJCWlmIChkZXZwcml2LT5kbWFfYnVmZmVyID09IE5VTEwpIHsKQEAgLTU3NSw3ICs2MTgsNyBAQAogCSAgICBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTiB8IFNERl9ESUZGIHwgU0RGX0NNRF9SRUFEOwogCXMtPm5fY2hhbiA9IDg7CiAJcy0+bGVuX2NoYW5saXN0ID0gODsKLQlzLT5tYXhkYXRhID0gKDEgPDwgMTIpIC0gMTsJLyogIDEyIGJpdCByZXNvbHV0aW9uICovCisJcy0+bWF4ZGF0YSA9ICgxIDw8IDEyKSAtIDE7CS8qIDEyIGJpdCByZXNvbHV0aW9uICovCiAJcy0+cmFuZ2VfdGFibGUgPSB0aGlzYm9hcmQtPmFpX3JhbmdlX3RhYmxlOwogCXMtPmRvX2NtZCA9IGxhYnBjX2FpX2NtZDsKIAlzLT5kb19jbWR0ZXN0ID0gbGFicGNfYWlfY21kdGVzdDsKQEAgLTU4NSw4ICs2MjgsMTEgQEAKIAkvKiBhbmFsb2cgb3V0cHV0ICovCiAJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CiAJaWYgKHRoaXNib2FyZC0+aGFzX2FvKSB7Ci0vKiBDb3VsZCBwcm92aWRlIGNvbW1hbmQgc3VwcG9ydCwgZXhjZXB0IGl0IG9ubHkgaGFzIGEgb25lIHNhbXBsZQotICogaGFyZHdhcmUgYnVmZmVyIGZvciBhbmFsb2cgb3V0cHV0IGFuZCBubyB1bmRlcnJ1biBmbGFnLiAqLworCQkvKgorCQkgKiBDb3VsZCBwcm92aWRlIGNvbW1hbmQgc3VwcG9ydCwgZXhjZXB0IGl0IG9ubHkgaGFzIGEKKwkJICogb25lIHNhbXBsZSBoYXJkd2FyZSBidWZmZXIgZm9yIGFuYWxvZyBvdXRwdXQgYW5kIG5vCisJCSAqIHVuZGVycnVuIGZsYWcuCisJCSAqLwogCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CiAJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRSB8IFNERl9HUk9VTkQ7CiAJCXMtPm5fY2hhbiA9IE5VTV9BT19DSEFOOwpAQCAtNjA4LDcgKzY1NCw4IEBACiAKIAkvKiA4MjU1IGRpbyAqLwogCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOwotCS8qICBpZiBib2FyZCB1c2VzIGlvIG1lbW9yeSB3ZSBoYXZlIHRvIGdpdmUgYSBjdXN0b20gY2FsbGJhY2sgZnVuY3Rpb24gdG8gdGhlIDgyNTUgZHJpdmVyICovCisJLyogIGlmIGJvYXJkIHVzZXMgaW8gbWVtb3J5IHdlIGhhdmUgdG8gZ2l2ZSBhIGN1c3RvbSBjYWxsYmFjaworCSAqIGZ1bmN0aW9uIHRvIHRoZSA4MjU1IGRyaXZlciAqLwogCWlmICh0aGlzYm9hcmQtPm1lbW9yeV9tYXBwZWRfaW8pCiAJCXN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBsYWJwY19kaW9fbWVtX2NhbGxiYWNrLAogCQkJCSAodW5zaWduZWQgbG9uZykoZGV2LT5pb2Jhc2UgKyBESU9fQkFTRV9SRUcpKTsKQEAgLTY0MCwxNCArNjg3LDEyIEBACiAJCXMtPmluc25fcmVhZCA9IGxhYnBjX2VlcHJvbV9yZWFkX2luc247CiAJCXMtPmluc25fd3JpdGUgPSBsYWJwY19lZXByb21fd3JpdGVfaW5zbjsKIAotCQlmb3IgKGkgPSAwOyBpIDwgRUVQUk9NX1NJWkU7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgRUVQUk9NX1NJWkU7IGkrKykKIAkJCWRldnByaXYtPmVlcHJvbV9kYXRhW2ldID0gbGFicGNfZWVwcm9tX3JlYWQoZGV2LCBpKTsKLQkJfQogI2lmZGVmIExBQlBDX0RFQlVHCiAJCXByaW50aygiIGVlcHJvbToiKTsKLQkJZm9yIChpID0gMDsgaSA8IEVFUFJPTV9TSVpFOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IEVFUFJPTV9TSVpFOyBpKyspCiAJCQlwcmludGsoIiAlaToweCV4ICIsIGksIGRldnByaXYtPmVlcHJvbV9kYXRhW2ldKTsKLQkJfQogCQlwcmludGsoIlxuIik7CiAjZW5kaWYKIAl9IGVsc2UKQEAgLTY2OSw3ICs3MTQsNyBAQAogCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBsYWJwY19wcml2YXRlKSkgPCAwKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCS8qICBnZXQgYmFzZSBhZGRyZXNzLCBpcnEgZXRjLiBiYXNlZCBvbiBidXN0eXBlICovCisJLyogZ2V0IGJhc2UgYWRkcmVzcywgaXJxIGV0Yy4gYmFzZWQgb24gYnVzdHlwZSAqLwogCXN3aXRjaCAodGhpc2JvYXJkLT5idXN0eXBlKSB7CiAJY2FzZSBpc2FfYnVzdHlwZToKIAkJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CkBAIC02NzksOSArNzI0LDggQEAKIAljYXNlIHBjaV9idXN0eXBlOgogI2lmZGVmIENPTkZJR19DT01FRElfUENJCiAJCXJldHZhbCA9IGxhYnBjX2ZpbmRfZGV2aWNlKGRldiwgaXQtPm9wdGlvbnNbMF0sIGl0LT5vcHRpb25zWzFdKTsKLQkJaWYgKHJldHZhbCA8IDApIHsKKwkJaWYgKHJldHZhbCA8IDApCiAJCQlyZXR1cm4gcmV0dmFsOwotCQl9CiAJCXJldHZhbCA9IG1pdGVfc2V0dXAoZGV2cHJpdi0+bWl0ZSk7CiAJCWlmIChyZXR2YWwgPCAwKQogCQkJcmV0dXJuIHJldHZhbDsKQEAgLTcxNSw3ICs3NTksNyBAQAogCWZvciAobWl0ZSA9IG1pdGVfZGV2aWNlczsgbWl0ZTsgbWl0ZSA9IG1pdGUtPm5leHQpIHsKIAkJaWYgKG1pdGUtPnVzZWQpCiAJCQljb250aW51ZTsKLQkJLyogIGlmIGJ1cy9zbG90IGFyZSBzcGVjaWZpZWQgdGhlbiBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgYnVzL3Nsb3QgKi8KKy8qIGlmIGJ1cy9zbG90IGFyZSBzcGVjaWZpZWQgdGhlbiBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgYnVzL3Nsb3QgKi8KIAkJaWYgKGJ1cyB8fCBzbG90KSB7CiAJCQlpZiAoYnVzICE9IG1pdGUtPnBjaWRldi0+YnVzLT5udW1iZXIKIAkJCSAgICB8fCBzbG90ICE9IFBDSV9TTE9UKG1pdGUtPnBjaWRldi0+ZGV2Zm4pKQpAQCAtNzI2LDcgKzc3MCw3IEBACiAJCQkJY29udGludWU7CiAJCQlpZiAobWl0ZV9kZXZpY2VfaWQobWl0ZSkgPT0gbGFicGNfYm9hcmRzW2ldLmRldmljZV9pZCkgewogCQkJCWRldnByaXYtPm1pdGUgPSBtaXRlOwotCQkJCS8qICBmaXh1cCBib2FyZCBwb2ludGVyLCBpbiBjYXNlIHdlIHdlcmUgdXNpbmcgdGhlIGR1bW15ICJuaV9sYWJwYyIgZW50cnkgKi8KKy8qIGZpeHVwIGJvYXJkIHBvaW50ZXIsIGluIGNhc2Ugd2Ugd2VyZSB1c2luZyB0aGUgZHVtbXkgIm5pX2xhYnBjIiBlbnRyeSAqLwogCQkJCWRldi0+Ym9hcmRfcHRyID0gJmxhYnBjX2JvYXJkc1tpXTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KQEAgLTk5NCw3ICsxMDM4LDcgQEAKIAkgICAgY21kLT5zdG9wX3NyYyAhPSBUUklHX0VYVCAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkKIAkJZXJyKys7CiAKLQkvKiAgY2FuJ3QgaGF2ZSBleHRlcm5hbCBzdG9wIGFuZCBzdGFydCB0cmlnZ2VycyBhdCBvbmNlICovCisJLyogY2FuJ3QgaGF2ZSBleHRlcm5hbCBzdG9wIGFuZCBzdGFydCB0cmlnZ2VycyBhdCBvbmNlICovCiAJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUICYmIGNtZC0+c3RvcF9zcmMgPT0gVFJJR19FWFQpCiAJCWVycisrOwogCkBAIC0xMDA4LDkgKzEwNTIsOSBAQAogCQllcnIrKzsKIAl9CiAKLQlpZiAoIWNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJaWYgKCFjbWQtPmNoYW5saXN0X2xlbikKIAkJZXJyKys7Ci0JfQorCiAJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CiAJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CiAJCWVycisrOwpAQCAtMTAyMiw3ICsxMDY2LDcgQEAKIAkJCWVycisrOwogCQl9CiAJfQotCS8qICBtYWtlIHN1cmUgc2NhbiB0aW1pbmcgaXMgbm90IHRvbyBmYXN0ICovCisJLyogbWFrZSBzdXJlIHNjYW4gdGltaW5nIGlzIG5vdCB0b28gZmFzdCAqLwogCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKIAkJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUiAmJgogCQkgICAgY21kLT5zY2FuX2JlZ2luX2FyZyA8CkBAIC0xMDM4LDcgKzEwODIsNyBAQAogCQkJZXJyKys7CiAJCX0KIAl9Ci0JLyogIHN0b3Agc291cmNlICovCisJLyogc3RvcCBzb3VyY2UgKi8KIAlzd2l0Y2ggKGNtZC0+c3RvcF9zcmMpIHsKIAljYXNlIFRSSUdfQ09VTlQ6CiAJCWlmICghY21kLT5zdG9wX2FyZykgewpAQCAtMTA5NSw3ICsxMTM5LDcgQEAKIAlyYW5nZSA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pOwogCWFyZWYgPSBDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbMF0pOwogCi0JLyogIG1ha2Ugc3VyZSBib2FyZCBpcyBkaXNhYmxlZCBiZWZvcmUgc2V0dGluZyB1cCBhcXVpc2l0aW9uICovCisJLyogbWFrZSBzdXJlIGJvYXJkIGlzIGRpc2FibGVkIGJlZm9yZSBzZXR0aW5nIHVwIGFxdWlzaXRpb24gKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOwogCWRldnByaXYtPmNvbW1hbmQyX2JpdHMgJj0gflNXVFJJR19CSVQgJiB+SFdUUklHX0JJVCAmIH5QUkVUUklHX0JJVDsKIAlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQyX2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDJfUkVHKTsKQEAgLTExMDUsOSArMTE0OSw5IEBACiAJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kM19iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQzX1JFRyk7CiAKIAkvKiAgaW5pdGlhbGl6ZSBzb2Z0d2FyZSBjb252ZXJzaW9uIGNvdW50ICovCi0JaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpCiAJCWRldnByaXYtPmNvdW50ID0gY21kLT5zdG9wX2FyZyAqIGNtZC0+Y2hhbmxpc3RfbGVuOwotCX0KKwogCS8qICBzZXR1cCBoYXJkd2FyZSBjb252ZXJzaW9uIGNvdW50ZXIgKi8KIAlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0VYVCkgewogCQkvKiAgbG9hZCBjb3VudGVyIGExIHdpdGggY291bnQgb2YgMyAocGMrIG1hbnVhbCBzYXlzIHRoaXMgaXMgbWluaW11bSBhbGxvd2VkKSB1c2luZyBtb2RlIDAgKi8KQEAgLTExNzYsMTcgKzEyMjAsMTggQEAKIAkJY2hhbm5lbCA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtjbWQtPmNoYW5saXN0X2xlbiAtIDFdKTsKIAllbHNlCiAJCWNoYW5uZWwgPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pOwotCS8qICBtdW5nZSBjaGFubmVsIGJpdHMgZm9yIGRpZmZlcmVudGlhbCAvIHNjYW4gZGlzYWJsZWQgbW9kZSAqLworCS8qIG11bmdlIGNoYW5uZWwgYml0cyBmb3IgZGlmZmVyZW50aWFsIC8gc2NhbiBkaXNhYmxlZCBtb2RlICovCiAJaWYgKGxhYnBjX2FpX3NjYW5fbW9kZShjbWQpICE9IE1PREVfU0lOR0xFX0NIQU4gJiYgYXJlZiA9PSBBUkVGX0RJRkYpCiAJCWNoYW5uZWwgKj0gMjsKIAlkZXZwcml2LT5jb21tYW5kMV9iaXRzIHw9IEFEQ19DSEFOX0JJVFMoY2hhbm5lbCk7CiAJZGV2cHJpdi0+Y29tbWFuZDFfYml0cyB8PSB0aGlzYm9hcmQtPmFpX3JhbmdlX2NvZGVbcmFuZ2VdOwogCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDFfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EMV9SRUcpOwotCS8qICBtYW51YWwgc2F5cyB0byBzZXQgc2NhbiBlbmFibGUgYml0IG9uIHNlY29uZCBwYXNzICovCisJLyogbWFudWFsIHNheXMgdG8gc2V0IHNjYW4gZW5hYmxlIGJpdCBvbiBzZWNvbmQgcGFzcyAqLwogCWlmIChsYWJwY19haV9zY2FuX21vZGUoY21kKSA9PSBNT0RFX01VTFRfQ0hBTl9VUCB8fAogCSAgICBsYWJwY19haV9zY2FuX21vZGUoY21kKSA9PSBNT0RFX01VTFRfQ0hBTl9ET1dOKSB7CiAJCWRldnByaXYtPmNvbW1hbmQxX2JpdHMgfD0gQURDX1NDQU5fRU5fQklUOwotCQkvKiBuZWVkIGEgYnJpZWYgZGVsYXkgYmVmb3JlIGVuYWJsaW5nIHNjYW4sIG9yIHNjYW4gbGlzdCB3aWxsIGdldCBzY3Jld2VkIHdoZW4geW91IHN3aXRjaAorCQkvKiBuZWVkIGEgYnJpZWYgZGVsYXkgYmVmb3JlIGVuYWJsaW5nIHNjYW4sIG9yIHNjYW4KKwkJICogbGlzdCB3aWxsIGdldCBzY3Jld2VkIHdoZW4geW91IHN3aXRjaAogCQkgKiBiZXR3ZWVuIHNjYW4gdXAgdG8gc2NhbiBkb3duIG1vZGUgLSBkdW5ubyB3aHkgKi8KIAkJdWRlbGF5KDEpOwogCQlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQxX2JpdHMsCkBAIC0xMzM4LDcgKzEzODMsNyBAQAogCWNtZCA9ICZhc3luYy0+Y21kOwogCWFzeW5jLT5ldmVudHMgPSAwOwogCi0JLyogIHJlYWQgYm9hcmQgc3RhdHVzICovCisJLyogcmVhZCBib2FyZCBzdGF0dXMgKi8KIAlkZXZwcml2LT5zdGF0dXMxX2JpdHMgPSBkZXZwcml2LT5yZWFkX2J5dGUoZGV2LT5pb2Jhc2UgKyBTVEFUVVMxX1JFRyk7CiAJaWYgKHRoaXNib2FyZC0+cmVnaXN0ZXJfbGF5b3V0ID09IGxhYnBjXzEyMDBfbGF5b3V0KQogCQlkZXZwcml2LT5zdGF0dXMyX2JpdHMgPQpAQCAtMTM1Miw3ICsxMzk3LDcgQEAKIAl9CiAKIAlpZiAoZGV2cHJpdi0+c3RhdHVzMV9iaXRzICYgT1ZFUlJVTl9CSVQpIHsKLQkJLyogIGNsZWFyIGVycm9yIGludGVycnVwdCAqLworCQkvKiBjbGVhciBlcnJvciBpbnRlcnJ1cHQgKi8KIAkJZGV2cHJpdi0+d3JpdGVfYnl0ZSgweDEsIGRldi0+aW9iYXNlICsgQURDX0NMRUFSX1JFRyk7CiAJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SIHwgQ09NRURJX0NCX0VPQTsKIAkJY29tZWRpX2V2ZW50KGRldiwgcyk7CkBAIC0xMzYxLDcgKzE0MDYsMTAgQEAKIAl9CiAKIAlpZiAoZGV2cHJpdi0+Y3VycmVudF90cmFuc2ZlciA9PSBpc2FfZG1hX3RyYW5zZmVyKSB7Ci0JCS8qICBpZiBhIGRtYSB0ZXJtaW5hbCBjb3VudCBvZiBleHRlcm5hbCBzdG9wIHRyaWdnZXIgaGFzIG9jY3VycmVkICovCisJCS8qCisJCSAqIGlmIGEgZG1hIHRlcm1pbmFsIGNvdW50IG9mIGV4dGVybmFsIHN0b3AgdHJpZ2dlcgorCQkgKiBoYXMgb2NjdXJyZWQKKwkJICovCiAJCWlmIChkZXZwcml2LT5zdGF0dXMxX2JpdHMgJiBETUFUQ19CSVQgfHwKIAkJICAgICh0aGlzYm9hcmQtPnJlZ2lzdGVyX2xheW91dCA9PSBsYWJwY18xMjAwX2xheW91dAogCQkgICAgICYmIGRldnByaXYtPnN0YXR1czJfYml0cyAmIEExX1RDX0JJVCkpIHsKQEAgLTE0NzksOSArMTUyNyw5IEBACiAJfQogCiAJLyogd3JpdGUgZGF0YSB0byBjb21lZGkgYnVmZmVyICovCi0JZm9yIChpID0gMDsgaSA8IG51bV9wb2ludHM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBudW1fcG9pbnRzOyBpKyspCiAJCWNmY193cml0ZV90b19idWZmZXIocywgZGV2cHJpdi0+ZG1hX2J1ZmZlcltpXSk7Ci0JfQorCiAJaWYgKGFzeW5jLT5jbWQuc3RvcF9zcmMgPT0gVFJJR19DT1VOVCkKIAkJZGV2cHJpdi0+Y291bnQgLT0gbnVtX3BvaW50czsKIApAQCAtMTUwMyw3ICsxNTUxLDcgQEAKIAlkZXZwcml2LT53cml0ZV9ieXRlKDB4MSwgZGV2LT5pb2Jhc2UgKyBETUFUQ19DTEVBUl9SRUcpOwogfQogCi0vKiBtYWtlcyBzdXJlIGFsbCBkYXRhIGFxdWlyZWQgYnkgYm9hcmQgaXMgdHJhbnNmZXJlZCB0byBjb21lZGkgKHVzZWQKKy8qIG1ha2VzIHN1cmUgYWxsIGRhdGEgYWNxdWlyZWQgYnkgYm9hcmQgaXMgdHJhbnNmZXJlZCB0byBjb21lZGkgKHVzZWQKICAqIHdoZW4gYXF1aXNpdGlvbiBpcyB0ZXJtaW5hdGVkIGJ5IHN0b3Bfc3JjID09IFRSSUdfRVhUKS4gKi8KIHN0YXRpYyB2b2lkIGxhYnBjX2RyYWluX2RyZWdzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CkBAIC0xNTM3LDQxICsxNTg1LDQxIEBACiAJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwogCXJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOwogCWRldnByaXYtPmNvbW1hbmQxX2JpdHMgfD0gdGhpc2JvYXJkLT5haV9yYW5nZV9jb2RlW3JhbmdlXTsKLQkvKiAgbXVuZ2UgY2hhbm5lbCBiaXRzIGZvciBkaWZmZXJlbnRpYWwvc2NhbiBkaXNhYmxlZCBtb2RlICovCisJLyogbXVuZ2UgY2hhbm5lbCBiaXRzIGZvciBkaWZmZXJlbnRpYWwvc2NhbiBkaXNhYmxlZCBtb2RlICovCiAJaWYgKENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpID09IEFSRUZfRElGRikKIAkJY2hhbiAqPSAyOwogCWRldnByaXYtPmNvbW1hbmQxX2JpdHMgfD0gQURDX0NIQU5fQklUUyhjaGFuKTsKIAlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQxX2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDFfUkVHKTsKIAotCS8qICBzZXR1cCBjb21tYW5kNiByZWdpc3RlciBmb3IgMTIwMCBib2FyZHMgKi8KKwkvKiBzZXR1cCBjb21tYW5kNiByZWdpc3RlciBmb3IgMTIwMCBib2FyZHMgKi8KIAlpZiAodGhpc2JvYXJkLT5yZWdpc3Rlcl9sYXlvdXQgPT0gbGFicGNfMTIwMF9sYXlvdXQpIHsKIAkJLyogIHJlZmVyZW5jZSBpbnB1dHMgdG8gZ3JvdW5kIG9yIGNvbW1vbj8gKi8KIAkJaWYgKENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpICE9IEFSRUZfR1JPVU5EKQogCQkJZGV2cHJpdi0+Y29tbWFuZDZfYml0cyB8PSBBRENfQ09NTU9OX0JJVDsKIAkJZWxzZQogCQkJZGV2cHJpdi0+Y29tbWFuZDZfYml0cyAmPSB+QURDX0NPTU1PTl9CSVQ7Ci0JCS8qICBiaXBvbGFyIG9yIHVuaXBvbGFyIHJhbmdlPyAqLworCQkvKiBiaXBvbGFyIG9yIHVuaXBvbGFyIHJhbmdlPyAqLwogCQlpZiAodGhpc2JvYXJkLT5haV9yYW5nZV9pc191bmlwb2xhcltyYW5nZV0pCiAJCQlkZXZwcml2LT5jb21tYW5kNl9iaXRzIHw9IEFEQ19VTklQX0JJVDsKIAkJZWxzZQogCQkJZGV2cHJpdi0+Y29tbWFuZDZfYml0cyAmPSB+QURDX1VOSVBfQklUOwotCQkvKiAgZG9uJ3QgaW50ZXJydXB0IG9uIGZpZm8gaGFsZiBmdWxsICovCisJCS8qIGRvbid0IGludGVycnVwdCBvbiBmaWZvIGhhbGYgZnVsbCAqLwogCQlkZXZwcml2LT5jb21tYW5kNl9iaXRzICY9IH5BRENfRkhGX0lOVFJfRU5fQklUOwotCQkvKiAgZG9uJ3QgZW5hYmxlIGludGVycnVwdCBvbiBjb3VudGVyIGExIHRlcm1pbmFsIGNvdW50PyAqLworCQkvKiBkb24ndCBlbmFibGUgaW50ZXJydXB0IG9uIGNvdW50ZXIgYTEgdGVybWluYWwgY291bnQ/ICovCiAJCWRldnByaXYtPmNvbW1hbmQ2X2JpdHMgJj0gfkExX0lOVFJfRU5fQklUOwotCQkvKiAgd3JpdGUgdG8gcmVnaXN0ZXIgKi8KKwkJLyogd3JpdGUgdG8gcmVnaXN0ZXIgKi8KIAkJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNl9iaXRzLAogCQkJCSAgICBkZXYtPmlvYmFzZSArIENPTU1BTkQ2X1JFRyk7CiAJfQotCS8qICBzZXR1cCBjb21tYW5kNCByZWdpc3RlciAqLworCS8qIHNldHVwIGNvbW1hbmQ0IHJlZ2lzdGVyICovCiAJZGV2cHJpdi0+Y29tbWFuZDRfYml0cyA9IDA7CiAJZGV2cHJpdi0+Y29tbWFuZDRfYml0cyB8PSBFWFRfQ09OVkVSVF9ESVNBQkxFX0JJVDsKLQkvKiAgc2luZ2xlLWVuZGVkL2RpZmZlcmVudGlhbCAqLworCS8qIHNpbmdsZS1lbmRlZC9kaWZmZXJlbnRpYWwgKi8KIAlpZiAoQ1JfQVJFRihpbnNuLT5jaGFuc3BlYykgPT0gQVJFRl9ESUZGKQogCQlkZXZwcml2LT5jb21tYW5kNF9iaXRzIHw9IEFEQ19ESUZGX0JJVDsKIAlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQ0X2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDRfUkVHKTsKIAotCS8qICBpbml0aWFsaXplIHBhY2VyIGNvdW50ZXIgb3V0cHV0IHRvIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IGNhdXNlIGFueSBwcm9ibGVtcyAqLworCS8qIGluaXRpYWxpemUgcGFjZXIgY291bnRlciBvdXRwdXQgdG8gbWFrZSBzdXJlIGl0IGRvZXNuJ3QgY2F1c2UgYW55IHByb2JsZW1zICovCiAJZGV2cHJpdi0+d3JpdGVfYnl0ZShJTklUX0EwX0JJVFMsIGRldi0+aW9iYXNlICsgQ09VTlRFUl9BX0NPTlRST0xfUkVHKTsKIAogCWxhYnBjX2NsZWFyX2FkY19maWZvKGRldik7CkBAIC0xNjA4LDcgKzE2NTYsNyBAQAogCiAJY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwogCi0JLyogIHR1cm4gb2ZmIHBhY2luZyBvZiBhbmFsb2cgb3V0cHV0IGNoYW5uZWwgKi8KKwkvKiB0dXJuIG9mZiBwYWNpbmcgb2YgYW5hbG9nIG91dHB1dCBjaGFubmVsICovCiAJLyogbm90ZTogaGFyZHdhcmUgYnVnIGluIGRhcWNhcmQtMTIwMCBtZWFucyBwYWNpbmcgY2Fubm90CiAJICogYmUgaW5kZXBlbmRlbnRseSBlbmFibGVkL2Rpc2FibGVkIGZvciBpdHMgdGhlIHR3byBjaGFubmVscyAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CkBAIC0xNjE2LDcgKzE2NjQsNyBAQAogCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDJfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EMl9SRUcpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKIAotCS8qICBzZXQgcmFuZ2UgKi8KKwkvKiBzZXQgcmFuZ2UgKi8KIAlpZiAodGhpc2JvYXJkLT5yZWdpc3Rlcl9sYXlvdXQgPT0gbGFicGNfMTIwMF9sYXlvdXQpIHsKIAkJcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CiAJCWlmIChyYW5nZSAmIEFPX1JBTkdFX0lTX1VOSVBPTEFSKQpAQCAtMTYyNywxMyArMTY3NSwxMyBAQAogCQlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQ2X2JpdHMsCiAJCQkJICAgIGRldi0+aW9iYXNlICsgQ09NTUFORDZfUkVHKTsKIAl9Ci0JLyogIHNlbmQgZGF0YSAqLworCS8qIHNlbmQgZGF0YSAqLwogCWxzYiA9IGRhdGFbMF0gJiAweGZmOwogCW1zYiA9IChkYXRhWzBdID4+IDgpICYgMHhmZjsKIAlkZXZwcml2LT53cml0ZV9ieXRlKGxzYiwgZGV2LT5pb2Jhc2UgKyBEQUNfTFNCX1JFRyhjaGFubmVsKSk7CiAJZGV2cHJpdi0+d3JpdGVfYnl0ZShtc2IsIGRldi0+aW9iYXNlICsgREFDX01TQl9SRUcoY2hhbm5lbCkpOwogCi0JLyogIHJlbWVtYmVyIHZhbHVlIGZvciByZWFkYmFjayAqLworCS8qIHJlbWVtYmVyIHZhbHVlIGZvciByZWFkYmFjayAqLwogCWRldnByaXYtPmFvX3ZhbHVlW2NoYW5uZWxdID0gZGF0YVswXTsKIAogCXJldHVybiAxOwpAQCAtMTcwNSwxNCArMTc1MywxNCBAQAogCiAJaWYgKGNtZC5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKQogCQlmcmVxID0gMTAwMDAwMDAwMCAvIGNtZC5jb252ZXJ0X2FyZzsKLQkvKiAgcmV0dXJuIHNvbWUgZGVmYXVsdCB2YWx1ZSAqLworCS8qIHJldHVybiBzb21lIGRlZmF1bHQgdmFsdWUgKi8KIAllbHNlCiAJCWZyZXEgPSAweGZmZmZmZmZmOwogCi0JLyogIG1ha2UgYnVmZmVyIGZpbGwgaW4gbm8gbW9yZSB0aGFuIDEvMyBzZWNvbmQgKi8KKwkvKiBtYWtlIGJ1ZmZlciBmaWxsIGluIG5vIG1vcmUgdGhhbiAxLzMgc2Vjb25kICovCiAJc2l6ZSA9IChmcmVxIC8gMykgKiBzYW1wbGVfc2l6ZTsKIAotCS8qICBzZXQgYSBtaW5pbXVtIGFuZCBtYXhpbXVtIHNpemUgYWxsb3dlZCAqLworCS8qIHNldCBhIG1pbmltdW0gYW5kIG1heGltdW0gc2l6ZSBhbGxvd2VkICovCiAJaWYgKHNpemUgPiBkbWFfYnVmZmVyX3NpemUpCiAJCXNpemUgPSBkbWFfYnVmZmVyX3NpemUgLSBkbWFfYnVmZmVyX3NpemUgJSBzYW1wbGVfc2l6ZTsKIAllbHNlIGlmIChzaXplIDwgc2FtcGxlX3NpemUpCkBAIC0xNzI0LDEzICsxNzcyLDIxIEBACiAvKiBmaWd1cmVzIG91dCB3aGF0IGNvdW50ZXIgdmFsdWVzIHRvIHVzZSBiYXNlZCBvbiBjb21tYW5kICovCiBzdGF0aWMgdm9pZCBsYWJwY19hZGNfdGltaW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7Ci0JY29uc3QgaW50IG1heF9jb3VudGVyX3ZhbHVlID0gMHgxMDAwMDsJLyogIG1heCB2YWx1ZSBmb3IgMTYgYml0IGNvdW50ZXIgaW4gbW9kZSAyICovCi0JY29uc3QgaW50IG1pbl9jb3VudGVyX3ZhbHVlID0gMjsJLyogIG1pbiB2YWx1ZSBmb3IgMTYgYml0IGNvdW50ZXIgaW4gbW9kZSAyICovCisJLyogbWF4IHZhbHVlIGZvciAxNiBiaXQgY291bnRlciBpbiBtb2RlIDIgKi8KKwljb25zdCBpbnQgbWF4X2NvdW50ZXJfdmFsdWUgPSAweDEwMDAwOworCS8qIG1pbiB2YWx1ZSBmb3IgMTYgYml0IGNvdW50ZXIgaW4gbW9kZSAyICovCisJY29uc3QgaW50IG1pbl9jb3VudGVyX3ZhbHVlID0gMjsKIAl1bnNpZ25lZCBpbnQgYmFzZV9wZXJpb2Q7CiAKLQkvKiAgaWYgYm90aCBjb252ZXJ0IGFuZCBzY2FuIHRyaWdnZXJzIGFyZSBUUklHX1RJTUVSLCB0aGVuIHRoZXkgYm90aCByZWx5IG9uIGNvdW50ZXIgYjAgKi8KKwkvKgorCSAqIGlmIGJvdGggY29udmVydCBhbmQgc2NhbiB0cmlnZ2VycyBhcmUgVFJJR19USU1FUiwgdGhlbiB0aGV5CisJICogYm90aCByZWx5IG9uIGNvdW50ZXIgYjAKKwkgKi8KIAlpZiAobGFicGNfYWlfY29udmVydF9wZXJpb2QoY21kKSAmJiBsYWJwY19haV9zY2FuX3BlcmlvZChjbWQpKSB7Ci0JCS8qICBwaWNrIHRoZSBsb3dlc3QgYjAgZGl2aXNvciB2YWx1ZSB3ZSBjYW4gKGZvciBtYXhpbXVtIGlucHV0IGNsb2NrIHNwZWVkIG9uIGNvbnZlcnQgYW5kIHNjYW4gY291bnRlcnMpICovCisJCS8qCisJCSAqIHBpY2sgdGhlIGxvd2VzdCBiMCBkaXZpc29yIHZhbHVlIHdlIGNhbiAoZm9yIG1heGltdW0gaW5wdXQKKwkJICogY2xvY2sgc3BlZWQgb24gY29udmVydCBhbmQgc2NhbiBjb3VudGVycykKKwkJICovCiAJCWRldnByaXYtPmRpdmlzb3JfYjAgPSAobGFicGNfYWlfc2Nhbl9wZXJpb2QoY21kKSAtIDEpIC8KIAkJICAgIChMQUJQQ19USU1FUl9CQVNFICogbWF4X2NvdW50ZXJfdmFsdWUpICsgMTsKIAkJaWYgKGRldnByaXYtPmRpdmlzb3JfYjAgPCBtaW5fY291bnRlcl92YWx1ZSkKQEAgLTE3ODAsNyArMTgzNiwxMCBAQAogCQkJCQkgICAgYmFzZV9wZXJpb2QgKiBkZXZwcml2LT5kaXZpc29yX2EwKTsKIAkJbGFicGNfc2V0X2FpX3NjYW5fcGVyaW9kKGNtZCwKIAkJCQkJIGJhc2VfcGVyaW9kICogZGV2cHJpdi0+ZGl2aXNvcl9iMSk7Ci0JCS8qICBpZiBvbmx5IG9uZSBUUklHX1RJTUVSIGlzIHVzZWQsIHdlIGNhbiBlbXBsb3kgdGhlIGdlbmVyaWMgY2FzY2FkZWQgdGltaW5nIGZ1bmN0aW9ucyAqLworCQkvKgorCQkgKiBpZiBvbmx5IG9uZSBUUklHX1RJTUVSIGlzIHVzZWQsIHdlIGNhbiBlbXBsb3kgdGhlIGdlbmVyaWMKKwkJICogY2FzY2FkZWQgdGltaW5nIGZ1bmN0aW9ucworCQkgKi8KIAl9IGVsc2UgaWYgKGxhYnBjX2FpX3NjYW5fcGVyaW9kKGNtZCkpIHsKIAkJdW5zaWduZWQgaW50IHNjYW5fcGVyaW9kOwogCkBAIC0xODY0LDkgKzE5MjMsOCBAQAogCQl1ZGVsYXkoMSk7CiAJCWRldnByaXYtPnN0YXR1czJfYml0cyA9CiAJCSAgICBkZXZwcml2LT5yZWFkX2J5dGUoZGV2LT5pb2Jhc2UgKyBTVEFUVVMyX1JFRyk7Ci0JCWlmIChkZXZwcml2LT5zdGF0dXMyX2JpdHMgJiBFRVBST01fT1VUX0JJVCkgeworCQlpZiAoZGV2cHJpdi0+c3RhdHVzMl9iaXRzICYgRUVQUk9NX09VVF9CSVQpCiAJCQl2YWx1ZSB8PSAxIDw8ICh2YWx1ZV93aWR0aCAtIGkpOwotCQl9CiAJfQogCiAJcmV0dXJuIHZhbHVlOwpAQCAtMTg3Niw4ICsxOTM0LDEwIEBACiAJCQkJICAgICAgdW5zaWduZWQgaW50IGFkZHJlc3MpCiB7CiAJdW5zaWduZWQgaW50IHZhbHVlOwotCWNvbnN0IGludCByZWFkX2luc3RydWN0aW9uID0gMHgzOwkvKiAgYml0cyB0byB0ZWxsIGVlcHJvbSB0byBleHBlY3QgYSByZWFkICovCi0JY29uc3QgaW50IHdyaXRlX2xlbmd0aCA9IDg7CS8qICA4IGJpdCB3cml0ZSBsZW5ndGhzIHRvIGVlcHJvbSAqLworCS8qICBiaXRzIHRvIHRlbGwgZWVwcm9tIHRvIGV4cGVjdCBhIHJlYWQgKi8KKwljb25zdCBpbnQgcmVhZF9pbnN0cnVjdGlvbiA9IDB4MzsKKwkvKiAgOCBiaXQgd3JpdGUgbGVuZ3RocyB0byBlZXByb20gKi8KKwljb25zdCBpbnQgd3JpdGVfbGVuZ3RoID0gODsKIAogCS8qICBlbmFibGUgcmVhZC93cml0ZSB0byBlZXByb20gKi8KIAlkZXZwcml2LT5jb21tYW5kNV9iaXRzICY9IH5FRVBST01fRU5fQklUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jb21tb24uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY29tbW9uLmMKaW5kZXggZDZkNDljMy4uYmQxNmY5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jb21tb24uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NvbW1vbi5jCkBAIC0zNzk1LDcgKzM3OTUsNyBAQAogI2VuZGlmCiAJaW50IHJldHZhbCA9IDA7CiAJdW5zaWduZWQgaTsKLQljb25zdCB1bnNpZ25lZCB0aW1lb3V0ID0gMTAwOworCWNvbnN0IHVuc2lnbmVkIHRpbWVvdXQgPSAxMDAwOwogCiAJcy0+YXN5bmMtPmludHRyaWcgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKaW5kZXggMmQ4OGE1Yi4uOWQzMzc1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYwpAQCAtMSw4ICsxLDggQEAKIC8qCiAgICAgY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKICAgICBkcml2ZXIgZm9yIE5hdGlvbmFsIEluc3RydW1lbnRzIFBDSS1ESU8tOTYvUENJLTY1MDgKLSAgICAgICAgICAgICAgIE5hdGlvbmFsIEluc3RydW1lbnRzIFBDSS1ESU8tMzJIUwotICAgICAgICAgICAgICAgTmF0aW9uYWwgSW5zdHJ1bWVudHMgUENJLTY1MDMKKwkJTmF0aW9uYWwgSW5zdHJ1bWVudHMgUENJLURJTy0zMkhTCisJCU5hdGlvbmFsIEluc3RydW1lbnRzIFBDSS02NTAzCiAKICAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCiAgICAgQ29weXJpZ2h0IChDKSAxOTk5LDIwMDIgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CkBAIC01MTgsNyArNTE4LDggQEAKIAluaV9wY2lkaW9fcHJpbnRfc3RhdHVzKHN0YXR1cyk7CiAKIAkvKiBwcmludGsoImJ1ZlswXT0lMDh4XG4iLCoodW5zaWduZWQgaW50ICopYXN5bmMtPnByZWFsbG9jX2J1Zik7ICovCi0JLyogcHJpbnRrKCJidWZbNDA5Nl09JTA4eFxuIiwqKHVuc2lnbmVkIGludCAqKShhc3luYy0+cHJlYWxsb2NfYnVmKzQwOTYpKTsgKi8KKwkvKiBwcmludGsoImJ1Zls0MDk2XT0lMDh4XG4iLAorCSAgICAgICAqKHVuc2lnbmVkIGludCAqKShhc3luYy0+cHJlYWxsb2NfYnVmKzQwOTYpKTsgKi8KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgaXJxX2ZsYWdzKTsKIAlpZiAoZGV2cHJpdi0+ZGlfbWl0ZV9jaGFuKQpAQCAtNTI2LDcgKzUyNyw5IEBACiAjaWZkZWYgTUlURV9ERUJVRwogCW1pdGVfcHJpbnRfY2hzcihtX3N0YXR1cyk7CiAjZW5kaWYKLQkvKiBwcmludGsoIm1pdGVfYnl0ZXNfdHJhbnNmZXJyZWQ6ICVkXG4iLG1pdGVfYnl0ZXNfdHJhbnNmZXJyZWQobWl0ZSxESV9ETUFfQ0hBTikpOyAqLworCS8qIHByaW50aygibWl0ZV9ieXRlc190cmFuc2ZlcnJlZDogJWRcbiIsCisJICAgICAgIG1pdGVfYnl0ZXNfdHJhbnNmZXJyZWQobWl0ZSxESV9ETUFfQ0hBTikpOyAqLworCiAJLyogbWl0ZV9kdW1wX3JlZ3MobWl0ZSk7ICovCiAJaWYgKG1fc3RhdHVzICYgQ0hTUl9JTlQpIHsKIAkJaWYgKG1fc3RhdHVzICYgQ0hTUl9MSU5LQykgewpAQCAtNTY1LDcgKzU2OCw4IEBACiAJCQkJCURQUklOVEsoInRvbyBtdWNoIHdvcmsgaW4gaW50ZXJydXB0XG4iKTsKIAkJCQkJd3JpdGViKDB4MDAsCiAJCQkJCSAgICAgICBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArCi0JCQkJCSAgICAgICBNYXN0ZXJfRE1BX0FuZF9JbnRlcnJ1cHRfQ29udHJvbCk7CisJCQkJCSAgICAgICBNYXN0ZXJfRE1BX0FuZF9JbnRlcnJ1cHRfQ29udHJvbAorCQkJCQkgICAgICApOwogCQkJCQlnb3RvIG91dDsKIAkJCQl9CiAJCQkJQXV4RGF0YSA9CkBAIC01NzksOCArNTgzLDEwIEBACiAJCQkJZmxhZ3MgPSByZWFkYihkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArCiAJCQkJCSAgICAgIEdyb3VwXzFfRmxhZ3MpOwogCQkJfQotCQkJLyogRFBSSU5USygiYnVmX2ludF9jb3VudDogJWRcbiIsYXN5bmMtPmJ1Zl9pbnRfY291bnQpOyAqLwotCQkJLyogRFBSSU5USygiMSkgSW50RW49JWQsZmxhZ3M9JWQsc3RhdHVzPSVkXG4iLEludEVuLGZsYWdzLHN0YXR1cyk7ICovCisJCQkvKiBEUFJJTlRLKCJidWZfaW50X2NvdW50OiAlZFxuIiwKKwkJCQlhc3luYy0+YnVmX2ludF9jb3VudCk7ICovCisJCQkvKiBEUFJJTlRLKCIxKSBJbnRFbj0lZCxmbGFncz0lZCxzdGF0dXM9JWRcbiIsCisJCQkJSW50RW4sZmxhZ3Msc3RhdHVzKTsgKi8KIAkJCS8qIG5pX3BjaWRpb19wcmludF9mbGFncyhmbGFncyk7ICovCiAJCQkvKiBuaV9wY2lkaW9fcHJpbnRfc3RhdHVzKHN0YXR1cyk7ICovCiAJCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9CTE9DSzsKQEAgLTYyNyw4ICs2MzMsOCBAQAogCQlmbGFncyA9IHJlYWRiKGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgR3JvdXBfMV9GbGFncyk7CiAJCXN0YXR1cyA9IHJlYWRiKGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKIAkJCSAgICAgICBJbnRlcnJ1cHRfQW5kX1dpbmRvd19TdGF0dXMpOwotCQkvKiBEUFJJTlRLKCJsb29wIGVuZDogSW50RW49MHglMDJ4LGZsYWdzPTB4JTAyeCxzdGF0dXM9MHglMDJ4XG4iLCAqLwotCQkvKiBJbnRFbixmbGFncyxzdGF0dXMpOyAqLworCQkvKiBEUFJJTlRLKCJsb29wIGVuZDogSW50RW49MHglMDJ4LGZsYWdzPTB4JTAyeCwiCisJCQkic3RhdHVzPTB4JTAyeFxuIiwgSW50RW4sIGZsYWdzLCBzdGF0dXMpOyAqLwogCQkvKiBuaV9wY2lkaW9fcHJpbnRfZmxhZ3MoZmxhZ3MpOyAqLwogCQkvKiBuaV9wY2lkaW9fcHJpbnRfc3RhdHVzKHN0YXR1cyk7ICovCiAJfQpAQCAtNjU1LDExICs2NjEsMTAgQEAKIHsKIAlpbnQgaTsKIAotCXByaW50aygiZ3JvdXBfMV9mbGFnczoiKTsKKwlwcmludGsoS0VSTl9JTkZPICJncm91cF8xX2ZsYWdzOiIpOwogCWZvciAoaSA9IDc7IGkgPj0gMDsgaS0tKSB7Ci0JCWlmIChmbGFncyAmICgxIDw8IGkpKSB7CisJCWlmIChmbGFncyAmICgxIDw8IGkpKQogCQkJcHJpbnRrKCIgJXMiLCBmbGFnc19zdHJpbmdzW2ldKTsKLQkJfQogCX0KIAlwcmludGsoIlxuIik7CiB9CkBAIC02NzMsMTEgKzY3OCwxMCBAQAogewogCWludCBpOwogCi0JcHJpbnRrKCJncm91cF9zdGF0dXM6Iik7CisJcHJpbnRrKEtFUk5fSU5GTyAiZ3JvdXBfc3RhdHVzOiIpOwogCWZvciAoaSA9IDc7IGkgPj0gMDsgaS0tKSB7Ci0JCWlmIChmbGFncyAmICgxIDw8IGkpKSB7CisJCWlmIChmbGFncyAmICgxIDw8IGkpKQogCQkJcHJpbnRrKCIgJXMiLCBzdGF0dXNfc3RyaW5nc1tpXSk7Ci0JCX0KIAl9CiAJcHJpbnRrKCJcbiIpOwogfQpAQCAtNzkzLDcgKzc5Nyw4IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIDE7CiAKLQkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseQorCWNvbXBhdGlibGUgKi8KIAogCS8qIG5vdGUgdGhhdCBtdXR1YWwgY29tcGF0aWJpbGl0eSBpcyBub3QgYW4gaXNzdWUgaGVyZSAqLwogCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVyAmJiBjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0lOVCkKQEAgLTk3NCw3ICs5NzksOCBAQAogCiAJLyogY2xlYXIgYW5kIGVuYWJsZSBpbnRlcnJ1cHRzICovCiAJd3JpdGViKDB4ZmYsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgR3JvdXBfMV9GaXJzdF9DbGVhcik7Ci0JLyogd3JpdGViKENsZWFyRXhwaXJlZCxkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkcitHcm91cF8xX1NlY29uZF9DbGVhcik7ICovCisJLyogd3JpdGViKENsZWFyRXhwaXJlZCwKKwkgICAgICAgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIrR3JvdXBfMV9TZWNvbmRfQ2xlYXIpOyAqLwogCiAJd3JpdGViKEludEVuLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEludGVycnVwdF9Db250cm9sKTsKIAl3cml0ZWIoMHgwMywKQEAgLTEwNTIsNyArMTA1OCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgcGNpXzY1MzRfbG9hZF9mcGdhKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIGludCBmcGdhX2luZGV4LAotCQkJICAgICAgdTggKiBkYXRhLCBpbnQgZGF0YV9sZW4pCisJCQkgICAgICB1OCAqZGF0YSwgaW50IGRhdGFfbGVuKQogewogCXN0YXRpYyBjb25zdCBpbnQgdGltZW91dCA9IDEwMDA7CiAJaW50IGksIGo7CkBAIC0xMDY2LDkgKzEwNzIsOCBAQAogCQl1ZGVsYXkoMSk7CiAJfQogCWlmIChpID09IHRpbWVvdXQpIHsKLQkJcHJpbnRrCi0JCSAgICAoIm5pX3BjaWRpbzogZmFpbGVkIHRvIGxvYWQgZnBnYSAlaSwgd2FpdGluZyBmb3Igc3RhdHVzIDB4MlxuIiwKLQkJICAgICBmcGdhX2luZGV4KTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibmlfcGNpZGlvOiBmYWlsZWQgdG8gbG9hZCBmcGdhICVpLCAiCisJCSAgICAgICAid2FpdGluZyBmb3Igc3RhdHVzIDB4MlxuIiwgZnBnYV9pbmRleCk7CiAJCXJldHVybiAtRUlPOwogCX0KIAl3cml0ZXcoMHg4MCB8IGZwZ2FfaW5kZXgsCkBAIC0xMDc5LDkgKzEwODQsOCBAQAogCQl1ZGVsYXkoMSk7CiAJfQogCWlmIChpID09IHRpbWVvdXQpIHsKLQkJcHJpbnRrCi0JCSAgICAoIm5pX3BjaWRpbzogZmFpbGVkIHRvIGxvYWQgZnBnYSAlaSwgd2FpdGluZyBmb3Igc3RhdHVzIDB4M1xuIiwKLQkJICAgICBmcGdhX2luZGV4KTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibmlfcGNpZGlvOiBmYWlsZWQgdG8gbG9hZCBmcGdhICVpLCAiCisJCSAgICAgICAid2FpdGluZyBmb3Igc3RhdHVzIDB4M1xuIiwgZnBnYV9pbmRleCk7CiAJCXJldHVybiAtRUlPOwogCX0KIAlmb3IgKGogPSAwOyBqICsgMSA8IGRhdGFfbGVuOykgewpAQCAtMTE3NCw5ICsxMTc4LDEwIEBACiAJaW50IG5fc3ViZGV2aWNlczsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCi0JcHJpbnRrKCJjb21lZGklZDogbmlkaW86IiwgZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IG5pZGlvOiIsIGRldi0+bWlub3IpOwogCi0JaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBuaWRpbzk2X3ByaXZhdGUpKSkgPCAwKQorCXJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IG5pZGlvOTZfcHJpdmF0ZSkpOworCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCXNwaW5fbG9ja19pbml0KCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jayk7CiAKQEAgLTExODYsNyArMTE5MSw3IEBACiAKIAlyZXQgPSBtaXRlX3NldHVwKGRldnByaXYtPm1pdGUpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygiZXJyb3Igc2V0dGluZyB1cCBtaXRlXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiZXJyb3Igc2V0dGluZyB1cCBtaXRlXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJY29tZWRpX3NldF9od19kZXYoZGV2LCAmZGV2cHJpdi0+bWl0ZS0+cGNpZGV2LT5kZXYpOwpAQCAtMTE5NiwxOCArMTIwMSwxOSBAQAogCiAJZGV2LT5ib2FyZF9uYW1lID0gdGhpc19ib2FyZC0+bmFtZTsKIAlpcnEgPSBtaXRlX2lycShkZXZwcml2LT5taXRlKTsKLQlwcmludGsoIiAlcyIsIGRldi0+Ym9hcmRfbmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiICVzIiwgZGV2LT5ib2FyZF9uYW1lKTsKIAlpZiAodGhpc19ib2FyZC0+dXNlc19maXJtd2FyZSkgewogCQlyZXQgPSBwY2lfNjUzNF91cGxvYWRfZmlybXdhcmUoZGV2LCBpdC0+b3B0aW9ucyk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAl9Ci0JaWYgKCF0aGlzX2JvYXJkLT5pc19kaW9kYXEpIHsKKwlpZiAoIXRoaXNfYm9hcmQtPmlzX2Rpb2RhcSkKIAkJbl9zdWJkZXZpY2VzID0gdGhpc19ib2FyZC0+bl84MjU1OwotCX0gZWxzZSB7CisJZWxzZQogCQluX3N1YmRldmljZXMgPSAxOwotCX0KLQlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCBuX3N1YmRldmljZXMpKSA8IDApCisKKwlyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgbl9zdWJkZXZpY2VzKTsKKwlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAogCWlmICghdGhpc19ib2FyZC0+aXNfZGlvZGFxKSB7CkBAIC0xMjIwLDcgKzEyMjYsNyBAQAogCQl9CiAJfSBlbHNlIHsKIAotCQlwcmludGsoIiByZXY9JWQiLAorCQlwcmludGsoS0VSTl9JTkZPICIgcmV2PSVkIiwKIAkJICAgICAgIHJlYWRiKGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgQ2hpcF9WZXJzaW9uKSk7CiAKIAkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CkBAIC0xMjUzLDkgKzEyNTksOSBAQAogCiAJCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgbmlkaW9faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCQkgICJuaV9wY2lkaW8iLCBkZXYpOwotCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKCIgaXJxIG5vdCBhdmFpbGFibGUiKTsKLQkJfQorCQlpZiAocmV0IDwgMCkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiBpcnEgbm90IGF2YWlsYWJsZSIpOworCiAJCWRldi0+aXJxID0gaXJxOwogCX0KIApAQCAtMTI2OSw5ICsxMjc1LDggQEAKIAlpbnQgaTsKIAogCWlmICh0aGlzX2JvYXJkICYmICF0aGlzX2JvYXJkLT5pc19kaW9kYXEpIHsKLQkJZm9yIChpID0gMDsgaSA8IHRoaXNfYm9hcmQtPm5fODI1NTsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCB0aGlzX2JvYXJkLT5uXzgyNTU7IGkrKykKIAkJCXN1YmRldl84MjU1X2NsZWFudXAoZGV2LCBkZXYtPnN1YmRldmljZXMgKyBpKTsKLQkJfQogCX0KIAogCWlmIChkZXYtPmlycSkKQEAgLTEzMTAsNyArMTMxNSw3IEBACiAJCQl9CiAJCX0KIAl9Ci0JcHJpbnRrKCJubyBkZXZpY2UgZm91bmRcbiIpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIm5vIGRldmljZSBmb3VuZFxuIik7CiAJbWl0ZV9saXN0X2RldmljZXMoKTsKIAlyZXR1cm4gLUVJTzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MTEuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MTEuYwppbmRleCA0OTE0Nzg0Li5hNDk5ZjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzExLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcxMS5jCkBAIC0yMDcsMTEgKzIwNywxMCBAQAogCiAJLyogRklYTUUhIE5vdGhpbmcgZWxzZSBzZXRzIG50cmlnISAqLwogCWlmICghKC0tZGV2cHJpdi0+bnRyaWcpKSB7Ci0JCWlmICh0aGlzX2JvYXJkLT5pc184MTEyKSB7CisJCWlmICh0aGlzX2JvYXJkLT5pc184MTEyKQogCQkJb3V0YigxLCBkZXYtPmlvYmFzZSArIFBDTDcxMV9NT0RFKTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDcxMV9NT0RFKTsKLQkJfQogCiAJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKIAl9CkBAIC0yMzIsMTUgKzIzMSwxNSBAQAogCQkvKgogCQkgKiAgU2V0IHRoZSBjb3JyZWN0IGNoYW5uZWwuICBUaGUgdHdvIGNoYW5uZWwgYmFua3MgYXJlIHN3aXRjaGVkCiAJCSAqICB1c2luZyB0aGUgbWFzayB2YWx1ZS4KLQkJICogIE5COiBUbyB1c2UgZGlmZmVyZW50aWFsIGNoYW5uZWxzLCB5b3Ugc2hvdWxkIHVzZSBtYXNrID0gMHgzMCwKLQkJICogIGJ1dCBJIGhhdmVuJ3Qgd3JpdHRlbiB0aGUgc3VwcG9ydCBmb3IgdGhpcyB5ZXQuIC9KSgorCQkgKiAgTkI6IFRvIHVzZSBkaWZmZXJlbnRpYWwgY2hhbm5lbHMsIHlvdSBzaG91bGQgdXNlCisJCSAqICBtYXNrID0gMHgzMCwgYnV0IEkgaGF2ZW4ndCB3cml0dGVuIHRoZSBzdXBwb3J0IGZvciB0aGlzCisJCSAqICB5ZXQuIC9KSgogCQkgKi8KIAotCQlpZiAoY2hhbl9yZWdpc3RlciA+PSA4KSB7CisJCWlmIChjaGFuX3JlZ2lzdGVyID49IDgpCiAJCQljaGFuX3JlZ2lzdGVyID0gMHgyMCB8IChjaGFuX3JlZ2lzdGVyICYgMHg3KTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJY2hhbl9yZWdpc3RlciB8PSAweDEwOwotCQl9CiAJfSBlbHNlIHsKIAkJb3V0YihjaGFuX3JlZ2lzdGVyLCBkZXYtPmlvYmFzZSArIFBDTDcxMV9NVVgpOwogCX0KQEAgLTI1NiwxNSArMjU1LDEzIEBACiAKIAlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CiAJCS8qCi0JCSAqICBXcml0ZSB0aGUgY29ycmVjdCBtb2RlIChzb2Z0d2FyZSBwb2xsaW5nKSBhbmQgc3RhcnQgcG9sbGluZyBieSB3cml0aW5nCi0JCSAqICB0byB0aGUgdHJpZ2dlciByZWdpc3RlcgorCQkgKiAgV3JpdGUgdGhlIGNvcnJlY3QgbW9kZSAoc29mdHdhcmUgcG9sbGluZykgYW5kIHN0YXJ0IHBvbGxpbmcKKwkJICogIGJ5IHdyaXRpbmcgdG8gdGhlIHRyaWdnZXIgcmVnaXN0ZXIKIAkJICovCiAJCW91dGIoMSwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfTU9ERSk7CiAKLQkJaWYgKHRoaXNfYm9hcmQtPmlzXzgxMTIpIHsKLQkJfSBlbHNlIHsKKwkJaWYgKCF0aGlzX2JvYXJkLT5pc184MTEyKQogCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDcxMV9TT0ZUVFJJRyk7Ci0JCX0KIAogCQlpID0gUENMNzExX1RJTUVPVVQ7CiAJCXdoaWxlICgtLWkpIHsKQEAgLTQ2Miw5ICs0NTksOCBAQAogCWludCBuOwogCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAKLQlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykKIAkJZGF0YVtuXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOwotCX0KIAogCXJldHVybiBuOwogCkBAIC02MTksOSArNjE1LDggQEAKIAkgICB0aGlzIGlzIHRoZSAiYmFzZSB2YWx1ZSIgZm9yIHRoZSBtb2RlIHJlZ2lzdGVyLCB3aGljaCBpcwogCSAgIHVzZWQgZm9yIHRoZSBpcnEgb24gdGhlIFBDTDcxMQogCSAqLwotCWlmICh0aGlzX2JvYXJkLT5pc19wY2w3MTFiKSB7CisJaWYgKHRoaXNfYm9hcmQtPmlzX3BjbDcxMWIpCiAJCWRldnByaXYtPm1vZGUgPSAoZGV2LT5pcnEgPDwgNCk7Ci0JfQogCiAJLyogY2xlYXIgREFDICovCiAJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDcxMV9EQTBfTE8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcyNC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcyNC5jCmluZGV4IGRmMWY0ZWYuLjBmMTAzYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MjQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI0LmMKQEAgLTE3LDcgKzE3LDcgQEAKICAgICAgWzBdIC0gSU8gQmFzZQogICAgICBbMV0gLSBJUlEgKDA9ZGlzYWJsZSBJUlEpIElSUSBpc24ndCBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lIQogICAgICBbMl0gLW51bWJlciBvZiBESU86Ci0gICAgICAgICAgICAgIDAsIDE0NDogMTQ0IERJTyBjb25maWd1cmF0aW9uCisJICAgICAgMCwgMTQ0OiAxNDQgRElPIGNvbmZpZ3VyYXRpb24KIAkgICAgICAxLCAgOTY6ICA5NiBESU8gY29uZmlndXJhdGlvbgogKi8KIC8qCkBAIC0xMzcsOCArMTM3LDggQEAKIAlpb3JhbmdlID0gdGhpc19ib2FyZC0+aW9fcmFuZ2U7CiAJaWYgKCh0aGlzX2JvYXJkLT5jYW5faGF2ZTk2KSAmJiAoKGl0LT5vcHRpb25zWzFdID09IDEpCiAJCQkJCSB8fCAoaXQtPm9wdGlvbnNbMV0gPT0gOTYpKSkKLQkJaW9yYW5nZSA9IFBDTDcyMl85Nl9TSVpFOwkvKiAgUENMLTcyNCBpbiA5NiBESU8gY29uZmlndXJhdGlvbiAqLwotCXByaW50aygiY29tZWRpJWQ6IHBjbDcyNDogYm9hcmQ9JXMsIDB4JTAzbHggIiwgZGV2LT5taW5vciwKKwkJaW9yYW5nZSA9IFBDTDcyMl85Nl9TSVpFOyAvKiBQQ0wtNzI0IGluIDk2IERJTyBjb25maWd1cmF0aW9uICovCisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IHBjbDcyNDogYm9hcmQ9JXMsIDB4JTAzbHggIiwgZGV2LT5taW5vciwKIAkgICAgICAgdGhpc19ib2FyZC0+bmFtZSwgaW9iYXNlKTsKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgaW9yYW5nZSwgInBjbDcyNCIpKSB7CiAJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOwpAQCAtMTU1LDE2ICsxNTUsMTYgQEAKIAkJaXJxID0gaXQtPm9wdGlvbnNbMV07CiAJCWlmIChpcnEpIHsJLyogd2Ugd2FudCB0byB1c2UgSVJRICovCiAJCQlpZiAoKCgxIDw8IGlycSkgJiB0aGlzX2JvYXJkLT5JUlFiaXRzKSA9PSAwKSB7Ci0JCQkJcHJpbnRrCi0JCQkJICAgICgiLCBJUlEgJXUgaXMgb3V0IG9mIGFsbG93ZWQgcmFuZ2UsIERJU0FCTElORyBJVCIsCi0JCQkJICAgICBpcnEpOworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkgICAgICAgIiwgSVJRICV1IGlzIG91dCBvZiBhbGxvd2VkIHJhbmdlLCAiCisJCQkJICAgICAgICJESVNBQkxJTkcgSVQiLCBpcnEpOwogCQkJCWlycSA9IDA7CS8qIEJhZCBJUlEgKi8KIAkJCX0gZWxzZSB7CiAJCQkJaWYgKHJlcXVlc3RfaXJxCiAJCQkJICAgIChpcnEsIGludGVycnVwdF9wY2w3MjQsIDAsICJwY2w3MjQiLCBkZXYpKSB7Ci0JCQkJCXByaW50awotCQkJCQkgICAgKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBJUlEgJXUsIERJU0FCTElORyBJVCIsCi0JCQkJCSAgICAgaXJxKTsKKwkJCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkgICAgICAgIiwgdW5hYmxlIHRvIGFsbG9jYXRlIElSUSAldSwgIgorCQkJCQkgICAgICAgIkRJU0FCTElORyBJVCIsIGlycSk7CiAJCQkJCWlycSA9IDA7CS8qIENhbid0IHVzZSBJUlEgKi8KIAkJCQl9IGVsc2UgewogCQkJCQlwcmludGsoIiwgaXJxPSV1IiwgaXJxKTsKQEAgLTIwNywxNiArMjA3LDE0IEBACiB7CiAJaW50IGk7CiAKLS8qIHByaW50aygiY29tZWRpJWQ6IHBjbDcyNDogcmVtb3ZlXG4iLGRldi0+bWlub3IpOyAqLworCS8qIHByaW50aygiY29tZWRpJWQ6IHBjbDcyNDogcmVtb3ZlXG4iLGRldi0+bWlub3IpOyAqLwogCi0JZm9yIChpID0gMDsgaSA8IGRldi0+bl9zdWJkZXZpY2VzOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5uX3N1YmRldmljZXM7IGkrKykKIAkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIGkpOwotCX0KIAogI2lmZGVmIFBDTDcyNF9JUlEKLQlpZiAoZGV2LT5pcnEpIHsKKwlpZiAoZGV2LT5pcnEpCiAJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotCX0KICNlbmRpZgogCiAJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIHRoaXNfYm9hcmQtPmlvX3JhbmdlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MjUuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MjUuYwppbmRleCAxZGE0OTQxLi42MDI2MWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcyNS5jCkBAIC02Niw3ICs2Niw3IEBACiAJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CiAKIAlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKLQlwcmludGsoImNvbWVkaSVkOiBwY2w3MjU6IDB4JTA0bHggIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogcGNsNzI1OiAweCUwNGx4ICIsIGRldi0+bWlub3IsIGlvYmFzZSk7CiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIFBDTDcyNV9TSVpFLCAicGNsNzI1IikpIHsKIAkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CiAJCXJldHVybiAtRUlPOwpAQCAtOTYsMTQgKzk2LDE0IEBACiAJcy0+aW5zbl9iaXRzID0gcGNsNzI1X2RpX2luc247CiAJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKIAotCXByaW50aygiXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJcbiIpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcGNsNzI1X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewotCXByaW50aygiY29tZWRpJWQ6IHBjbDcyNTogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogcGNsNzI1OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOwogCiAJaWYgKGRldi0+aW9iYXNlKQogCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgUENMNzI1X1NJWkUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDczMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDczMC5jCmluZGV4IGM5ODU5YzkuLmU1ZTdiZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MzAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzMwLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAogCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOwogCWlvcmFuZ2UgPSB0aGlzX2JvYXJkLT5pb19yYW5nZTsKLQlwcmludGsoImNvbWVkaSVkOiBwY2w3MzA6IGJvYXJkPSVzIDB4JTA0bHggIiwgZGV2LT5taW5vciwKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogcGNsNzMwOiBib2FyZD0lcyAweCUwNGx4ICIsIGRldi0+bWlub3IsCiAJICAgICAgIHRoaXNfYm9hcmQtPm5hbWUsIGlvYmFzZSk7CiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIGlvcmFuZ2UsICJwY2w3MzAiKSkgewogCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKQEAgLTE1MiwxNCArMTUyLDE0IEBACiAJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKIAlzLT5wcml2YXRlID0gKHZvaWQgKilQQ0w3MzBfRElPX0xPOwogCi0JcHJpbnRrKCJcbiIpOworCXByaW50ayhLRVJOX0lORk8gIlxuIik7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwY2w3MzBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7Ci0JcHJpbnRrKCJjb21lZGklZDogcGNsNzMwOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiBwY2w3MzA6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CiAKIAlpZiAoZGV2LT5pb2Jhc2UpCiAJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCB0aGlzX2JvYXJkLT5pb19yYW5nZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODEyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODEyLmMKaW5kZXggMGE1YmMzZC4uZDQ2MzRjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTIuYwpAQCAtOTU1LDYgKzk1NSw3IEBACiAJdW5zaWduZWQgaW50IG1hc2ssIHRpbWVvdXQ7CiAJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CiAJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCXVuc2lnbmVkIGludCBuZXh0X2NoYW47CiAKIAlzLT5hc3luYy0+ZXZlbnRzID0gMDsKIApAQCAtOTkzLDkgKzk5NCwxOCBAQAogCQkgICAgICAgKChpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfQURfSEkpIDw8IDgpIHwKIAkJCWluYihkZXYtPmlvYmFzZSArIFBDTDgxMl9BRF9MTykpICYgbWFzayk7CiAKKwkvKiBTZXQgdXAgbmV4dCBjaGFubmVsLiBBZGRlZCBieSBhYmJvdHRpIDIwMTAtMDEtMjAsIGJ1dCB1bnRlc3RlZC4gKi8KKwluZXh0X2NoYW4gPSBzLT5hc3luYy0+Y3VyX2NoYW4gKyAxOworCWlmIChuZXh0X2NoYW4gPj0gZGV2cHJpdi0+YWlfbl9jaGFuKQorCQluZXh0X2NoYW4gPSAwOworCWlmIChkZXZwcml2LT5haV9jaGFubGlzdFtzLT5hc3luYy0+Y3VyX2NoYW5dICE9CisJCQlkZXZwcml2LT5haV9jaGFubGlzdFtuZXh0X2NoYW5dKQorCQlzZXR1cF9yYW5nZV9jaGFubmVsKGRldiwgcywgZGV2cHJpdi0+YWlfY2hhbmxpc3RbbmV4dF9jaGFuXSwgMCk7CisKIAlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODEyX0NMUklOVCk7CS8qIGNsZWFyIElOVCByZXF1ZXN0ICovCiAKLQlpZiAocy0+YXN5bmMtPmN1cl9jaGFuID09IDApIHsJLyogb25lIHNjYW4gZG9uZSAqLworCXMtPmFzeW5jLT5jdXJfY2hhbiA9IG5leHRfY2hhbjsKKwlpZiAobmV4dF9jaGFuID09IDApIHsJLyogb25lIHNjYW4gZG9uZSAqLwogCQlkZXZwcml2LT5haV9hY3Rfc2NhbisrOwogCQlpZiAoIShkZXZwcml2LT5haV9uZXZlcmVuZGluZykpCiAJCQlpZiAoZGV2cHJpdi0+YWlfYWN0X3NjYW4gPj0gZGV2cHJpdi0+YWlfc2NhbnMpIHsJLyogYWxsIGRhdGEgc2FtcGxlZCAqLwpAQCAtMTAyMSw3ICsxMDMxLDkgQEAKIAlmb3IgKGkgPSBsZW47IGk7IGktLSkgewogCQljb21lZGlfYnVmX3B1dChzLT5hc3luYywgcHRyW2J1ZnB0cisrXSk7CS8qICBnZXQgb25lIHNhbXBsZSAqLwogCi0JCWlmIChzLT5hc3luYy0+Y3VyX2NoYW4gPT0gMCkgeworCQlzLT5hc3luYy0+Y3VyX2NoYW4rKzsKKwkJaWYgKHMtPmFzeW5jLT5jdXJfY2hhbiA+PSBkZXZwcml2LT5haV9uX2NoYW4pIHsKKwkJCXMtPmFzeW5jLT5jdXJfY2hhbiA9IDA7CiAJCQlkZXZwcml2LT5haV9hY3Rfc2NhbisrOwogCQkJaWYgKCFkZXZwcml2LT5haV9uZXZlcmVuZGluZykKIAkJCQlpZiAoZGV2cHJpdi0+YWlfYWN0X3NjYW4gPj0gZGV2cHJpdi0+YWlfc2NhbnMpIHsJLyogYWxsIGRhdGEgc2FtcGxlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxNi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxNi5jCmluZGV4IDg1MmZlMjQuLjk4MjA3NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE2LmMKQEAgLTIwMiw2ICsyMDIsNyBAQAogCXVuc2lnbmVkIGludCBhaV9hY3RfY2hhbmxpc3RbMTZdOwkvKiAgTVVYIHNldHRpbmcgZm9yIGFjdHVhbCBBSSBvcGVyYXRpb25zICovCiAJdW5zaWduZWQgaW50IGFpX2FjdF9jaGFubGlzdF9sZW47CS8qICBob3cgbG9uZyBpcyBhY3R1YWwgTVVYIGxpc3QgKi8KIAl1bnNpZ25lZCBpbnQgYWlfYWN0X2NoYW5saXN0X3BvczsJLyogIGFjdHVhbCBwb3NpdGlvbiBpbiBNVVggbGlzdCAqLworCXVuc2lnbmVkIGludCBhaV9uX2NoYW47CQkvKiAgaG93IG1hbnkgY2hhbm5lbHMgcGVyIHNjYW4gKi8KIAl1bnNpZ25lZCBpbnQgYWlfcG9sbF9wdHI7CS8qICBob3cgbWFueSBzYW1wZXMgdHJhbnNmZXIgcG9sbCAqLwogCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJfYWk7CS8qICBwdHIgdG8gQUkgc3ViZGV2aWNlICovCiAjaWZkZWYgdW51c2VkCkBAIC0yMTMsOSArMjE0LDEyIEBACiAvKgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLwotc3RhdGljIGludCBjaGVja19hbmRfc2V0dXBfY2hhbm5lbF9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCi0JCQkJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJCQl1bnNpZ25lZCBpbnQgKmNoYW5saXN0LCBpbnQgY2hhbmxlbik7CitzdGF0aWMgaW50IGNoZWNrX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgKmNoYW5saXN0LCB1bnNpZ25lZCBpbnQgY2hhbmxlbik7CitzdGF0aWMgdm9pZCBzZXR1cF9jaGFubmVsX2xpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmNoYW5saXN0LCB1bnNpZ25lZCBpbnQgc2VnbGVuKTsKIHN0YXRpYyBpbnQgcGNsODE2X2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKIHN0YXRpYyB2b2lkIHN0YXJ0X3BhY2VyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIGludCBtb2RlLApAQCAtMzIwLDcgKzMyNCw5IEBACiAJaWYgKCsrZGV2cHJpdi0+YWlfYWN0X2NoYW5saXN0X3BvcyA+PSBkZXZwcml2LT5haV9hY3RfY2hhbmxpc3RfbGVuKQogCQlkZXZwcml2LT5haV9hY3RfY2hhbmxpc3RfcG9zID0gMDsKIAotCWlmIChzLT5hc3luYy0+Y3VyX2NoYW4gPT0gMCkgeworCXMtPmFzeW5jLT5jdXJfY2hhbisrOworCWlmIChzLT5hc3luYy0+Y3VyX2NoYW4gPj0gZGV2cHJpdi0+YWlfbl9jaGFuKSB7CisJCXMtPmFzeW5jLT5jdXJfY2hhbiA9IDA7CiAJCWRldnByaXYtPmFpX2FjdF9zY2FuKys7CiAJfQogCkBAIC0zNTMsNiArMzU5LDExIEBACiAJCWlmICgrK2RldnByaXYtPmFpX2FjdF9jaGFubGlzdF9wb3MgPj0KIAkJICAgIGRldnByaXYtPmFpX2FjdF9jaGFubGlzdF9sZW4pIHsKIAkJCWRldnByaXYtPmFpX2FjdF9jaGFubGlzdF9wb3MgPSAwOworCQl9CisKKwkJcy0+YXN5bmMtPmN1cl9jaGFuKys7CisJCWlmIChzLT5hc3luYy0+Y3VyX2NoYW4gPj0gZGV2cHJpdi0+YWlfbl9jaGFuKSB7CisJCQlzLT5hc3luYy0+Y3VyX2NoYW4gPSAwOwogCQkJZGV2cHJpdi0+YWlfYWN0X3NjYW4rKzsKIAkJfQogCkBAIC01NTgsMTQgKzU2OSw2IEBACiAJCX0KIAl9CiAKLQlpZiAoIWNtZC0+Y2hhbmxpc3RfbGVuKSB7Ci0JCWNtZC0+Y2hhbmxpc3RfbGVuID0gMTsKLQkJZXJyKys7Ci0JfQotCWlmIChjbWQtPmNoYW5saXN0X2xlbiA+IHRoaXNfYm9hcmQtPm5fYWljaGFuKSB7Ci0JCWNtZC0+Y2hhbmxpc3RfbGVuID0gdGhpc19ib2FyZC0+bl9haWNoYW47Ci0JCWVycisrOwotCX0KIAlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKIAkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKIAkJZXJyKys7CkBAIC02MDMsNiArNjA2LDE0IEBACiAJCXJldHVybiA0OwogCX0KIAorCS8qIHN0ZXAgNTogY29tcGxhaW4gYWJvdXQgc3BlY2lhbCBjaGFubGlzdCBjb25zaWRlcmF0aW9ucyAqLworCisJaWYgKGNtZC0+Y2hhbmxpc3QpIHsKKwkJaWYgKCFjaGVja19jaGFubmVsX2xpc3QoZGV2LCBzLCBjbWQtPmNoYW5saXN0LAorCQkJCQljbWQtPmNoYW5saXN0X2xlbikpCisJCQlyZXR1cm4gNTsJLyogIGluY29ycmVjdCBjaGFubmVscyBsaXN0ICovCisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYxMCw2ICs2MjEsNyBAQAogewogCXVuc2lnbmVkIGludCBkaXZpc29yMSA9IDAsIGRpdmlzb3IyID0gMCwgZG1hX2ZsYWdzLCBieXRlcywgZG1haXJxOwogCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBpbnQgc2VnbGVuOwogCiAJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfTk9XKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY0MiwxMSArNjU0LDEzIEBACiAKIAlzdGFydF9wYWNlcihkZXYsIC0xLCAwLCAwKTsJLyogIHN0b3AgcGFjZXIgKi8KIAotCWlmICghY2hlY2tfYW5kX3NldHVwX2NoYW5uZWxfbGlzdChkZXYsIHMsIGNtZC0+Y2hhbmxpc3QsCi0JCQkJCSAgY21kLT5jaGFubGlzdF9sZW4pKQorCXNlZ2xlbiA9IGNoZWNrX2NoYW5uZWxfbGlzdChkZXYsIHMsIGNtZC0+Y2hhbmxpc3QsIGNtZC0+Y2hhbmxpc3RfbGVuKTsKKwlpZiAoc2VnbGVuIDwgMSkKIAkJcmV0dXJuIC1FSU5WQUw7CisJc2V0dXBfY2hhbm5lbF9saXN0KGRldiwgcywgY21kLT5jaGFubGlzdCwgc2VnbGVuKTsKIAl1ZGVsYXkoMSk7CiAKKwlkZXZwcml2LT5haV9uX2NoYW4gPSBjbWQtPmNoYW5saXN0X2xlbjsKIAlkZXZwcml2LT5haV9hY3Rfc2NhbiA9IDA7CiAJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKIAlkZXZwcml2LT5pcnFfYmxvY2tlZCA9IDE7CkBAIC04NzEsMTIgKzg4NSwxMiBAQAogLyoKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIENoZWNrIGlmIGNoYW5uZWwgbGlzdCBmcm9tIHVzZXIgaXMgYnVpbGRlZCBjb3JyZWN0bHkKLSBJZiBpdCdzIG9rLCB0aGVuIHByb2dyYW0gc2Nhbi9nYWluIGxvZ2ljCisgSWYgaXQncyBvaywgdGhlbiByZXR1cm4gbm9uLXplcm8gbGVuZ3RoIG9mIHJlcGVhdGVkIHNlZ21lbnQgb2YgY2hhbm5lbCBsaXN0CiAqLwogc3RhdGljIGludAotY2hlY2tfYW5kX3NldHVwX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAotCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgdW5zaWduZWQgaW50ICpjaGFubGlzdCwKLQkJCSAgICAgaW50IGNoYW5sZW4pCitjaGVja19jaGFubmVsX2xpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHVuc2lnbmVkIGludCAqY2hhbmxpc3QsCisJCSAgIHVuc2lnbmVkIGludCBjaGFubGVuKQogewogCXVuc2lnbmVkIGludCBjaGFuc2VnbWVudFsxNl07CiAJdW5zaWduZWQgaW50IGksIG5vd211c3RiZWNoYW4sIHNlZ2xlbiwgc2VncG9zOwpAQCAtOTMwLDYgKzk0NCwyMCBAQAogCQlzZWdsZW4gPSAxOwogCX0KIAorCXJldHVybiBzZWdsZW47CS8qICB3ZSBjYW4gc2VydmUgdGhpcyB3aXRoIE1VWCBsb2dpYyAqLworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgUHJvZ3JhbSBzY2FuL2dhaW4gbG9naWMgd2l0aCBjaGFubmVsIGxpc3QuCisqLworc3RhdGljIHZvaWQKK3NldHVwX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgdW5zaWduZWQgaW50ICpjaGFubGlzdCwKKwkJICAgdW5zaWduZWQgaW50IHNlZ2xlbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwogCWRldnByaXYtPmFpX2FjdF9jaGFubGlzdF9sZW4gPSBzZWdsZW47CiAJZGV2cHJpdi0+YWlfYWN0X2NoYW5saXN0X3BvcyA9IDA7CiAKQEAgLTk0Miw4ICs5NzAsNiBAQAogCXVkZWxheSgxKTsKIAogCW91dGIoZGV2cHJpdi0+YWlfYWN0X2NoYW5saXN0WzBdIHwgKGRldnByaXYtPmFpX2FjdF9jaGFubGlzdFtzZWdsZW4gLSAxXSA8PCA0KSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfTVVYKTsJLyogc2VsZWN0IGNoYW5uZWwgaW50ZXJ2YWwgdG8gc2NhbiAqLwotCi0JcmV0dXJuIDE7CQkvKiAgd2UgY2FuIHNlcnZlIHRoaXMgd2l0aCBNVVggbG9naWMgKi8KIH0KIAogI2lmZGVmIHVudXNlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxOC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxOC5jCmluZGV4IGQwNDgxMDEuLmM5ZDc1MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE4LmMKQEAgLTU1Nyw4ICs1NTcsMTQgQEAKIAkJY29tZWRpX2V2ZW50KGRldiwgcyk7CiAJCXJldHVybiBJUlFfSEFORExFRDsKIAl9Ci0JaWYgKHMtPmFzeW5jLT5jdXJfY2hhbiA9PSAwKSB7CisJZGV2cHJpdi0+YWN0X2NoYW5saXN0X3BvcysrOworCWlmIChkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zID49IGRldnByaXYtPmFjdF9jaGFubGlzdF9sZW4pIHsKKwkJZGV2cHJpdi0+YWN0X2NoYW5saXN0X3BvcyA9IDA7CisJfQorCXMtPmFzeW5jLT5jdXJfY2hhbisrOworCWlmIChzLT5hc3luYy0+Y3VyX2NoYW4gPj0gZGV2cHJpdi0+YWlfbl9jaGFuKSB7CiAJCS8qICBwcmludGsoIkUiKTsgKi8KKwkJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKIAkJZGV2cHJpdi0+YWlfYWN0X3NjYW4tLTsKIAl9CiAKQEAgLTYyNyw5ICs2MzMsMTMgQEAKIAogCQlkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zKys7CiAJCWlmIChkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zID49IGRldnByaXYtPmFjdF9jaGFubGlzdF9sZW4pIHsKLQkJCWRldnByaXYtPmFpX2FjdF9zY2FuLS07CiAJCQlkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zID0gMDsKIAkJfQorCQlzLT5hc3luYy0+Y3VyX2NoYW4rKzsKKwkJaWYgKHMtPmFzeW5jLT5jdXJfY2hhbiA+PSBkZXZwcml2LT5haV9uX2NoYW4pIHsKKwkJCXMtPmFzeW5jLT5jdXJfY2hhbiA9IDA7CisJCQlkZXZwcml2LT5haV9hY3Rfc2Nhbi0tOworCQl9CiAKIAkJaWYgKCFkZXZwcml2LT5uZXZlcmVuZGluZ19haSkKIAkJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA9PSAwKSB7CS8qIGFsbCBkYXRhIHNhbXBsZWQgKi8KQEAgLTcxNyw3ICs3MjcsMTQgQEAKIAkJCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBkbWFidWZbYnVmcHRyKytdID4+IDQpOwkvKiAgZ2V0IG9uZSBzYW1wbGUgKi8KIAkJCWJ1ZnB0ciAmPSAoZGV2cHJpdi0+ZG1hc2FtcGxzaXplIC0gMSk7CiAKLQkJCWlmIChzLT5hc3luYy0+Y3VyX2NoYW4gPT0gMCkgeworCQkJZGV2cHJpdi0+YWN0X2NoYW5saXN0X3BvcysrOworCQkJaWYgKGRldnByaXYtPmFjdF9jaGFubGlzdF9wb3MgPj0KKwkJCQkJZGV2cHJpdi0+YWN0X2NoYW5saXN0X2xlbikgeworCQkJCWRldnByaXYtPmFjdF9jaGFubGlzdF9wb3MgPSAwOworCQkJfQorCQkJcy0+YXN5bmMtPmN1cl9jaGFuKys7CisJCQlpZiAocy0+YXN5bmMtPmN1cl9jaGFuID49IGRldnByaXYtPmFpX25fY2hhbikgeworCQkJCXMtPmFzeW5jLT5jdXJfY2hhbiA9IDA7CiAJCQkJZGV2cHJpdi0+YWlfYWN0X3NjYW4tLTsKIAkJCX0KIApAQCAtNzk2LDcgKzgxMywxMyBAQAogCiAJCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCAobG8gPj4gNCkgfCAoaW5iKGRldi0+aW9iYXNlICsgUENMODE4X0ZJX0RBVEFISSkgPDwgNCkpOwkvKiAgZ2V0IG9uZSBzYW1wbGUgKi8KIAotCQlpZiAocy0+YXN5bmMtPmN1cl9jaGFuID09IDApIHsKKwkJZGV2cHJpdi0+YWN0X2NoYW5saXN0X3BvcysrOworCQlpZiAoZGV2cHJpdi0+YWN0X2NoYW5saXN0X3BvcyA+PSBkZXZwcml2LT5hY3RfY2hhbmxpc3RfbGVuKSB7CisJCQlkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zID0gMDsKKwkJfQorCQlzLT5hc3luYy0+Y3VyX2NoYW4rKzsKKwkJaWYgKHMtPmFzeW5jLT5jdXJfY2hhbiA+PSBkZXZwcml2LT5haV9uX2NoYW4pIHsKKwkJCXMtPmFzeW5jLT5jdXJfY2hhbiA9IDA7CiAJCQlkZXZwcml2LT5haV9hY3Rfc2Nhbi0tOwogCQl9CiAKQEAgLTEzNjksMTQgKzEzOTIsNiBAQAogCQl9CiAJfQogCi0JaWYgKCFjbWQtPmNoYW5saXN0X2xlbikgewotCQljbWQtPmNoYW5saXN0X2xlbiA9IDE7Ci0JCWVycisrOwotCX0KLQlpZiAoY21kLT5jaGFubGlzdF9sZW4gPiBzLT5uX2NoYW4pIHsKLQkJY21kLT5jaGFubGlzdF9sZW4gPSBzLT5uX2NoYW47Ci0JCWVycisrOwotCX0KIAlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKIAkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKIAkJZXJyKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtMzcyNC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbTM3MjQuYwppbmRleCA1MjgxMTgyLi5lZDYxMDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtMzcyNC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY20zNzI0LmMKQEAgLTEyMSwyNSArMTIxLDIyIEBACiB7CiAJLyogMSBpbiBpb19iaXRzIGluZGljYXRlcyBvdXRwdXQgKi8KIAlpZiAocy0+aW9fYml0cyAmIDB4MDAwMGZmKSB7Ci0JCWlmIChkZXZubyA9PSAwKSB7CisJCWlmIChkZXZubyA9PSAwKQogCQkJY29uZmlnIHw9IEJVRl9BMDsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJY29uZmlnIHw9IEJVRl9BMTsKLQkJfQogCX0KIAlpZiAocy0+aW9fYml0cyAmIDB4MDBmZjAwKSB7Ci0JCWlmIChkZXZubyA9PSAwKSB7CisJCWlmIChkZXZubyA9PSAwKQogCQkJY29uZmlnIHw9IEJVRl9CMDsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJY29uZmlnIHw9IEJVRl9CMTsKLQkJfQogCX0KIAlpZiAocy0+aW9fYml0cyAmIDB4ZmYwMDAwKSB7Ci0JCWlmIChkZXZubyA9PSAwKSB7CisJCWlmIChkZXZubyA9PSAwKQogCQkJY29uZmlnIHw9IEJVRl9DMDsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJY29uZmlnIHw9IEJVRl9DMTsKLQkJfQogCX0KIAlyZXR1cm4gY29uZmlnOwogfQpAQCAtMTU1LDI2ICsxNTIsMjcgQEAKIAlidWZmZXJfY29uZmlnID0gMDsKIAogCS8qIDEgaW4gaW9fYml0cyBpbmRpY2F0ZXMgb3V0cHV0LCAxIGluIGNvbmZpZyBpbmRpY2F0ZXMgaW5wdXQgKi8KLQlpZiAoIShzLT5pb19iaXRzICYgMHgwMDAwZmYpKSB7CisJaWYgKCEocy0+aW9fYml0cyAmIDB4MDAwMGZmKSkKIAkJY29uZmlnIHw9IENSX0FfSU87Ci0JfQotCWlmICghKHMtPmlvX2JpdHMgJiAweDAwZmYwMCkpIHsKKworCWlmICghKHMtPmlvX2JpdHMgJiAweDAwZmYwMCkpCiAJCWNvbmZpZyB8PSBDUl9CX0lPOwotCX0KLQlpZiAoIShzLT5pb19iaXRzICYgMHhmZjAwMDApKSB7CisKKwlpZiAoIShzLT5pb19iaXRzICYgMHhmZjAwMDApKQogCQljb25maWcgfD0gQ1JfQ19JTzsKLQl9CiAKIAlidWZmZXJfY29uZmlnID0gY29tcHV0ZV9idWZmZXIoMCwgMCwgZGV2LT5zdWJkZXZpY2VzKTsKIAlidWZmZXJfY29uZmlnID0gY29tcHV0ZV9idWZmZXIoYnVmZmVyX2NvbmZpZywgMSwgKGRldi0+c3ViZGV2aWNlcykgKyAxKTsKIAotCWlmIChzID09IGRldi0+c3ViZGV2aWNlcykgeworCWlmIChzID09IGRldi0+c3ViZGV2aWNlcykKIAkJcG9ydF84MjU1X2NmZyA9IGRldi0+aW9iYXNlICsgXzgyNTVfQ1I7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXBvcnRfODI1NV9jZmcgPSBkZXYtPmlvYmFzZSArIFNJWkVfODI1NSArIF84MjU1X0NSOwotCX0KKwogCW91dGIoYnVmZmVyX2NvbmZpZywgZGV2LT5pb2Jhc2UgKyA4KTsJLyogdXBkYXRlIGJ1ZmZlciByZWdpc3RlciAqLwotCS8qIHByaW50aygicGNtMzcyNCBidWZmZXJfY29uZmlnICglbHgpICVkLCAleFxuIiwgZGV2LT5pb2Jhc2UgKyBfODI1NV9DUiwgY2hhbnNwZWMsIGJ1ZmZlcl9jb25maWcpOyAqLworCS8qIHByaW50aygicGNtMzcyNCBidWZmZXJfY29uZmlnICglbHgpICVkLCAleFxuIiwKKwkgICAgICAgZGV2LT5pb2Jhc2UgKyBfODI1NV9DUiwgY2hhbnNwZWMsIGJ1ZmZlcl9jb25maWcpOyAqLworCiAJb3V0Yihjb25maWcsIHBvcnRfODI1NV9jZmcpOwogfQogCkBAIC0xODksMjkgKzE4NywyOSBAQAogCXByaXYgPSAoc3RydWN0IHByaXZfcGNtMzcyNCAqKShkZXYtPnByaXZhdGUpOwogCiAJbWFzayA9IDEgPDwgQ1JfQ0hBTihjaGFuc3BlYyk7Ci0JaWYgKHMgPT0gZGV2LT5zdWJkZXZpY2VzKSB7CS8qICBzdWJkZXYgMCAqLworCWlmIChzID09IGRldi0+c3ViZGV2aWNlcykJLyogIHN1YmRldiAwICovCiAJCXByaXYtPmRpb18xIHw9IG1hc2s7Ci0JfSBlbHNlIHsJCS8qIHN1YmRldiAxICovCisJZWxzZQkJLyogc3ViZGV2IDEgKi8KIAkJcHJpdi0+ZGlvXzIgfD0gbWFzazsKLQl9Ci0JaWYgKHByaXYtPmRpb18xICYgMHhmZjAwMDApIHsKKworCWlmIChwcml2LT5kaW9fMSAmIDB4ZmYwMDAwKQogCQlnYXRlY2ZnIHw9IEdBVEVfQzA7Ci0JfQotCWlmIChwcml2LT5kaW9fMSAmIDB4ZmYwMCkgeworCisJaWYgKHByaXYtPmRpb18xICYgMHhmZjAwKQogCQlnYXRlY2ZnIHw9IEdBVEVfQjA7Ci0JfQotCWlmIChwcml2LT5kaW9fMSAmIDB4ZmYpIHsKKworCWlmIChwcml2LT5kaW9fMSAmIDB4ZmYpCiAJCWdhdGVjZmcgfD0gR0FURV9BMDsKLQl9Ci0JaWYgKHByaXYtPmRpb18yICYgMHhmZjAwMDApIHsKKworCWlmIChwcml2LT5kaW9fMiAmIDB4ZmYwMDAwKQogCQlnYXRlY2ZnIHw9IEdBVEVfQzE7Ci0JfQotCWlmIChwcml2LT5kaW9fMiAmIDB4ZmYwMCkgeworCisJaWYgKHByaXYtPmRpb18yICYgMHhmZjAwKQogCQlnYXRlY2ZnIHw9IEdBVEVfQjE7Ci0JfQotCWlmIChwcml2LT5kaW9fMiAmIDB4ZmYpIHsKKworCWlmIChwcml2LT5kaW9fMiAmIDB4ZmYpCiAJCWdhdGVjZmcgfD0gR0FURV9BMTsKLQl9CisKIAkvKiAgICAgICBwcmludGsoImdhdGUgY29udHJvbCAleFxuIiwgZ2F0ZWNmZyk7ICovCiAJb3V0YihnYXRlY2ZnLCBkZXYtPmlvYmFzZSArIDkpOwogfQpAQCAtMjI1LDE1ICsyMjMsMTQgQEAKIAl1bnNpZ25lZCBpbnQgYml0czsKIAogCW1hc2sgPSAxIDw8IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwotCWlmIChtYXNrICYgMHgwMDAwZmYpIHsKKwlpZiAobWFzayAmIDB4MDAwMGZmKQogCQliaXRzID0gMHgwMDAwZmY7Ci0JfSBlbHNlIGlmIChtYXNrICYgMHgwMGZmMDApIHsKKwllbHNlIGlmIChtYXNrICYgMHgwMGZmMDApCiAJCWJpdHMgPSAweDAwZmYwMDsKLQl9IGVsc2UgaWYgKG1hc2sgJiAweDBmMDAwMCkgeworCWVsc2UgaWYgKG1hc2sgJiAweDBmMDAwMCkKIAkJYml0cyA9IDB4MGYwMDAwOwotCX0gZWxzZSB7CisJZWxzZQogCQliaXRzID0gMHhmMDAwMDA7Ci0JfQogCiAJc3dpdGNoIChkYXRhWzBdKSB7CiAJY2FzZSBJTlNOX0NPTkZJR19ESU9fSU5QVVQ6CkBAIC0yNzIsNyArMjY5LDcgQEAKIAkoKHN0cnVjdCBwcml2X3BjbTM3MjQgKikoZGV2LT5wcml2YXRlKSktPmRpb18xID0gMDsKIAkoKHN0cnVjdCBwcml2X3BjbTM3MjQgKikoZGV2LT5wcml2YXRlKSktPmRpb18yID0gMDsKIAotCXByaW50aygiY29tZWRpJWQ6IHBjbTM3MjQ6IGJvYXJkPSVzLCAweCUwM2x4ICIsIGRldi0+bWlub3IsCisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IHBjbTM3MjQ6IGJvYXJkPSVzLCAweCUwM2x4ICIsIGRldi0+bWlub3IsCiAJICAgICAgIHRoaXNfYm9hcmQtPm5hbWUsIGlvYmFzZSk7CiAJaWYgKCFpb2Jhc2UgfHwgIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgaW9yYW5nZSwgInBjbTM3MjQiKSkgewogCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKQEAgLTI4MSw3ICsyNzgsNyBAQAogCiAJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CiAJZGV2LT5ib2FyZF9uYW1lID0gdGhpc19ib2FyZC0+bmFtZTsKLQlwcmludGsoIlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKIAogCW5fc3ViZGV2aWNlcyA9IHRoaXNfYm9hcmQtPm51bW9mcG9ydHM7CiAKQEAgLTMwMiwxMyArMjk5LDExIEBACiAJaW50IGk7CiAKIAlpZiAoZGV2LT5zdWJkZXZpY2VzKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5fc3ViZGV2aWNlczsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5fc3ViZGV2aWNlczsgaSsrKQogCQkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIGkpOwotCQl9CiAJfQotCWlmIChkZXYtPmlvYmFzZSkgeworCWlmIChkZXYtPmlvYmFzZSkKIAkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIHRoaXNfYm9hcmQtPmlvX3JhbmdlKTsKLQl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY20zNzMwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtMzczMC5jCmluZGV4IDllNGFkYmQuLjIyYjdhYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY20zNzMwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbTM3MzAuYwpAQCAtNzMsNyArNzMsNyBAQAogCXVuc2lnbmVkIGxvbmcgaW9iYXNlOwogCiAJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07Ci0JcHJpbnRrKCJjb21lZGklZDogcGNtMzczMDogMHglMDRseCAiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiBwY20zNzMwOiAweCUwNGx4ICIsIGRldi0+bWlub3IsIGlvYmFzZSk7CiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIFBDTTM3MzBfU0laRSwgInBjbTM3MzAiKSkgewogCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKIAkJcmV0dXJuIC1FSU87CkBAIC0xNDAsMTQgKzE0MCwxNCBAQAogCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CiAJcy0+cHJpdmF0ZSA9ICh2b2lkICopUENNMzczMF9ESUM7CiAKLQlwcmludGsoIlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHBjbTM3MzBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7Ci0JcHJpbnRrKCJjb21lZGklZDogcGNtMzczMDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogcGNtMzczMDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKIAogCWlmIChkZXYtPmlvYmFzZSkKIAkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIFBDTTM3MzBfU0laRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtYWQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21hZC5jCmluZGV4IGFjYWM2NzAuLmZhYjgwOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21hZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21hZC5jCkBAIC0zNCwxMSArMzQsMTEgQEAKICAgWzBdIC0gSS9PIHBvcnQgYmFzZQogICBbMV0gLSB1bnVzZWQKICAgWzJdIC0gQW5hbG9nIGlucHV0IHJlZmVyZW5jZQotICAgICAgICAgIDAgPSBzaW5nbGUgZW5kZWQKLSAgICAgICAgICAxID0gZGlmZmVyZW50aWFsCisJMCA9IHNpbmdsZSBlbmRlZAorCTEgPSBkaWZmZXJlbnRpYWwKICAgWzNdIC0gQW5hbG9nIGlucHV0IGVuY29kaW5nIChtdXN0IG1hdGNoIGp1bXBlcnMpCi0gICAgICAgICAgMCA9IHN0cmFpZ2h0IGJpbmFyeQotICAgICAgICAgIDEgPSB0d28ncyBjb21wbGVtZW50CisJMCA9IHN0cmFpZ2h0IGJpbmFyeQorCTEgPSB0d28ncyBjb21wbGVtZW50CiAqLwogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC0xMTMsOSArMTEzLDggQEAKIAkJZGF0YVtuXSA9IGluYihkZXYtPmlvYmFzZSArIFBDTUFEX0xTQik7CiAJCWRhdGFbbl0gfD0gKGluYihkZXYtPmlvYmFzZSArIFBDTUFEX01TQikgPDwgOCk7CiAKLQkJaWYgKGRldnByaXYtPnR3b3NfY29tcCkgeworCQlpZiAoZGV2cHJpdi0+dHdvc19jb21wKQogCQkJZGF0YVtuXSBePSAoMSA8PCAodGhpc19ib2FyZC0+bl9haV9iaXRzIC0gMSkpOwotCQl9CiAJfQogCiAJcmV0dXJuIG47CkBAIC0xMzUsMTEgKzEzNCwxMiBAQAogCXVuc2lnbmVkIGxvbmcgaW9iYXNlOwogCiAJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07Ci0JcHJpbnRrKCJjb21lZGklZDogcGNtYWQ6IDB4JTA0bHggIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogcGNtYWQ6IDB4JTA0bHggIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgUENNQURfU0laRSwgInBjbWFkIikpIHsKLQkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXByaW50ayhLRVJOX0NPTlQgIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQorCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CiAJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CiAKIAlyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgMSk7CkBAIC0xNjYsMTEgKzE2NiwxMSBAQAogCiBzdGF0aWMgaW50IHBjbWFkX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewotCXByaW50aygiY29tZWRpJWQ6IHBjbWFkOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiBwY21hZDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKIAotCWlmIChkZXYtPmlycSkgeworCWlmIChkZXYtPmlycSkKIAkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7Ci0JfQorCiAJaWYgKGRldi0+aW9iYXNlKQogCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgUENNQURfU0laRSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21taW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21taW8uYwppbmRleCAzNWJhOTM5Li42Y2E0MTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtbWlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbW1pby5jCkBAIC01NTAsNyArNTUwLDcgQEAKIAogCWlmIChpcnFbMF0pIHsKIAkJcHJpbnRrKCJpcnE6ICV1ICIsIGlycVswXSk7Ci0JCWlmIChpcnFbMV0gJiYgdGhpc2JvYXJkLT5kaW9fbnVtX2FzaWNzID09IDIpCisJCWlmICh0aGlzYm9hcmQtPmRpb19udW1fYXNpY3MgPT0gMiAmJiBpcnFbMV0pCiAJCQlwcmludGsoInNlY29uZCBBU0lDIGlycTogJXUgIiwgaXJxWzFdKTsKIAl9IGVsc2UgewogCQlwcmludGsoIihJUlEgbW9kZSBkaXNhYmxlZCkgIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcG9jLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcG9jLmMKaW5kZXggZDIzZTU4OC4uMWViYzM1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BvYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wb2MuYwpAQCAtMTIyLDIyICsxMjIsMjEgQEAKIAl1bnNpZ25lZCBpbnQgaW9zaXplOwogCiAJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07Ci0JcHJpbnRrKCJjb21lZGklZDogcG9jOiB1c2luZyAlcyBpb2Jhc2UgMHglbHhcbiIsIGRldi0+bWlub3IsCisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IHBvYzogdXNpbmcgJXMgaW9iYXNlIDB4JWx4XG4iLCBkZXYtPm1pbm9yLAogCSAgICAgICB0aGlzX2JvYXJkLT5uYW1lLCBpb2Jhc2UpOwogCiAJZGV2LT5ib2FyZF9uYW1lID0gdGhpc19ib2FyZC0+bmFtZTsKIAogCWlmIChpb2Jhc2UgPT0gMCkgewotCQlwcmludGsoImlvIGJhc2UgYWRkcmVzcyByZXF1aXJlZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiaW8gYmFzZSBhZGRyZXNzIHJlcXVpcmVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaW9zaXplID0gdGhpc19ib2FyZC0+aW9zaXplOwogCS8qIGNoZWNrIGlmIGlvIGFkZHJlc3NlcyBhcmUgYXZhaWxhYmxlICovCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIGlvc2l6ZSwgImRhYzAyIikpIHsKLQkJcHJpbnRrCi0JCSAgICAoIkkvTyBwb3J0IGNvbmZsaWN0OiBmYWlsZWQgdG8gYWxsb2NhdGUgcG9ydHMgMHglbHggdG8gMHglbHhcbiIsCi0JCSAgICAgaW9iYXNlLCBpb2Jhc2UgKyBpb3NpemUgLSAxKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJJL08gcG9ydCBjb25mbGljdDogZmFpbGVkIHRvIGFsbG9jYXRlIHBvcnRzICIKKwkJCSIweCVseCB0byAweCVseFxuIiwgaW9iYXNlLCBpb2Jhc2UgKyBpb3NpemUgLSAxKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCWRldi0+aW9iYXNlID0gaW9iYXNlOwpAQCAtMTU2LDkgKzE1NSw4IEBACiAJcy0+aW5zbl93cml0ZSA9IHRoaXNfYm9hcmQtPndpbnNuOwogCXMtPmluc25fcmVhZCA9IHRoaXNfYm9hcmQtPnJpbnNuOwogCXMtPmluc25fYml0cyA9IHRoaXNfYm9hcmQtPmluc25iaXRzOwotCWlmIChzLT50eXBlID09IENPTUVESV9TVUJEX0FPIHx8IHMtPnR5cGUgPT0gQ09NRURJX1NVQkRfRE8pIHsKKwlpZiAocy0+dHlwZSA9PSBDT01FRElfU1VCRF9BTyB8fCBzLT50eXBlID09IENPTUVESV9TVUJEX0RPKQogCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7Ci0JfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjksNyArMTY3LDcgQEAKIAlpZiAoZGV2LT5pb2Jhc2UpCiAJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCB0aGlzX2JvYXJkLT5pb3NpemUpOwogCi0JcHJpbnRrKCJjb21lZGklZDogZGFjMDI6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IGRhYzAyOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRpODAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRpODAwLmMKaW5kZXggMmM5ZDA1Yi4uMDI4ZWQ2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0aTgwMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGk4MDAuYwpAQCAtMzIsMjIgKzMyLDIyIEBACiAgIFswXSAtIEkvTyBwb3J0IGJhc2UgYWRkcmVzcwogICBbMV0gLSBJUlEKICAgWzJdIC0gQS9EIHJlZmVyZW5jZQotICAgICAgICAgIDAgPSBkaWZmZXJlbnRpYWwKLSAgICAgICAgICAxID0gcHNldWRvZGlmZmVyZW50aWFsIChjb21tb24pCi0gICAgICAgICAgMiA9IHNpbmdsZS1lbmRlZAorCTAgPSBkaWZmZXJlbnRpYWwKKwkxID0gcHNldWRvZGlmZmVyZW50aWFsIChjb21tb24pCisJMiA9IHNpbmdsZS1lbmRlZAogICBbM10gLSBBL0QgcmFuZ2UKLSAgICAgICAgICAwID0gWy0xMCwxMF0KLSAgICAgICAgICAxID0gWy01LDVdCi0gICAgICAgICAgMiA9IFswLDEwXQorCTAgPSBbLTEwLDEwXQorCTEgPSBbLTUsNV0KKwkyID0gWzAsMTBdCiAgIFs0XSAtIEEvRCBlbmNvZGluZwotICAgICAgICAgIDAgPSB0d28ncyBjb21wbGVtZW50Ci0gICAgICAgICAgMSA9IHN0cmFpZ2h0IGJpbmFyeQorCTAgPSB0d28ncyBjb21wbGVtZW50CisJMSA9IHN0cmFpZ2h0IGJpbmFyeQogICBbNV0gLSBEQUMgMCByYW5nZQotICAgICAgICAgIDAgPSBbLTEwLDEwXQotICAgICAgICAgIDEgPSBbMCwxMF0KKwkwID0gWy0xMCwxMF0KKwkxID0gWzAsMTBdCiAgIFs2XSAtIERBQyAwIGVuY29kaW5nCi0gICAgICAgICAgMCA9IHR3bydzIGNvbXBsZW1lbnQKLSAgICAgICAgICAxID0gc3RyYWlnaHQgYmluYXJ5CisJMCA9IHR3bydzIGNvbXBsZW1lbnQKKwkxID0gc3RyYWlnaHQgYmluYXJ5CiAgIFs3XSAtIERBQyAxIHJhbmdlIChzYW1lIGFzIERBQyAwKQogICBbOF0gLSBEQUMgMSBlbmNvZGluZyAoc2FtZSBhcyBEQUMgMCkKICovCkBAIC0yMjUsNyArMjI1LDcgQEAKIAkJZm9yICh0ID0gUlRJODAwX1RJTUVPVVQ7IHQ7IHQtLSkgewogCQkJc3RhdHVzID0gaW5iKGRldi0+aW9iYXNlICsgUlRJODAwX0NTUik7CiAJCQlpZiAoc3RhdHVzICYgUlRJODAwX09WRVJSVU4pIHsKLQkJCQlwcmludGsoInJ0aTgwMDogYS9kIG92ZXJydW5cbiIpOworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgInJ0aTgwMDogYS9kIG92ZXJydW5cbiIpOwogCQkJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBSVEk4MDBfQ0xSRkxBR1MpOwogCQkJCXJldHVybiAtRUlPOwogCQkJfQpAQCAtMjM0LDE1ICsyMzQsMTQgQEAKIAkJCXVkZWxheSgxKTsKIAkJfQogCQlpZiAodCA9PSAwKSB7Ci0JCQlwcmludGsoInJ0aTgwMDogdGltZW91dFxuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJydGk4MDA6IHRpbWVvdXRcbiIpOwogCQkJcmV0dXJuIC1FVElNRTsKIAkJfQogCQlkYXRhW2ldID0gaW5iKGRldi0+aW9iYXNlICsgUlRJODAwX0FEQ0xPKTsKIAkJZGF0YVtpXSB8PSAoMHhmICYgaW5iKGRldi0+aW9iYXNlICsgUlRJODAwX0FEQ0hJKSkgPDwgODsKIAotCQlpZiAoZGV2cHJpdi0+YWRjX2NvZGluZyA9PSBhZGNfMmNvbXApIHsKKwkJaWYgKGRldnByaXYtPmFkY19jb2RpbmcgPT0gYWRjXzJjb21wKQogCQkJZGF0YVtpXSBePSAweDgwMDsKLQkJfQogCX0KIAogCXJldHVybiBpOwpAQCAtMjcxLDkgKzI3MCw5IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CiAJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZCA9IGRhdGFbaV07Ci0JCWlmIChkZXZwcml2LT5kYWMwX2NvZGluZyA9PSBkYWNfMmNvbXApIHsKKwkJaWYgKGRldnByaXYtPmRhYzBfY29kaW5nID09IGRhY18yY29tcCkKIAkJCWQgXj0gMHg4MDA7Ci0JCX0KKwogCQlvdXRiKGQgJiAweGZmLAogCQkgICAgIGRldi0+aW9iYXNlICsgKGNoYW4gPyBSVEk4MDBfREFDMUxPIDogUlRJODAwX0RBQzBMTykpOwogCQlvdXRiKGQgPj4gOCwKQEAgLTMxNSwxNSArMzE0LDE1IEBACiAgICBvcHRpb25zWzBdIC0gSS9PIHBvcnQKICAgIG9wdGlvbnNbMV0gLSBpcnEKICAgIG9wdGlvbnNbMl0gLSBhL2QgbXV4Ci0gICAJMD1kaWZmZXJlbnRpYWwsIDE9cHNldWRvZGlmZiwgMj1zaW5nbGUKKwkwPWRpZmZlcmVudGlhbCwgMT1wc2V1ZG9kaWZmLCAyPXNpbmdsZQogICAgb3B0aW9uc1szXSAtIGEvZCByYW5nZQotICAgCTA9Ymlwb2xhcjEwLCAxPWJpcG9sYXI1LCAyPXVuaXBvbGFyMTAKKwkwPWJpcG9sYXIxMCwgMT1iaXBvbGFyNSwgMj11bmlwb2xhcjEwCiAgICBvcHRpb25zWzRdIC0gYS9kIGNvZGluZwotICAgCTA9MidzIGNvbXAsIDE9c3RyYWlnaHQgYmluYXJ5CisJMD0yJ3MgY29tcCwgMT1zdHJhaWdodCBiaW5hcnkKICAgIG9wdGlvbnNbNV0gLSBkYWMwIHJhbmdlCi0gICAJMD1iaXBvbGFyMTAsIDE9dW5pcG9sYXIxMAorCTA9Ymlwb2xhcjEwLCAxPXVuaXBvbGFyMTAKICAgIG9wdGlvbnNbNl0gLSBkYWMwIGNvZGluZwotICAgCTA9MidzIGNvbXAsIDE9c3RyYWlnaHQgYmluYXJ5CisJMD0yJ3MgY29tcCwgMT1zdHJhaWdodCBiaW5hcnkKICAgIG9wdGlvbnNbN10gLSBkYWMxIHJhbmdlCiAgICBvcHRpb25zWzhdIC0gZGFjMSBjb2RpbmcKICAqLwpAQCAtMzM2LDE1ICszMzUsMTUgQEAKIAlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAogCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOwotCXByaW50aygiY29tZWRpJWQ6IHJ0aTgwMDogMHglMDRseCAiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiBydGk4MDA6IDB4JTA0bHhcbiIsIGRldi0+bWlub3IsIGlvYmFzZSk7CiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIFJUSTgwMF9TSVpFLCAicnRpODAwIikpIHsKLQkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCWRldi0+aW9iYXNlID0gaW9iYXNlOwogCiAjaWZkZWYgREVCVUcKLQlwcmludGsoImZpbmdlcnByaW50PSV4LCV4LCV4LCV4LCV4ICIsCisJcHJpbnRrKEtFUk5fREVCVUcgImZpbmdlcnByaW50PSV4LCV4LCV4LCV4LCV4ICIsCiAJICAgICAgIGluYihkZXYtPmlvYmFzZSArIDApLAogCSAgICAgICBpbmIoZGV2LT5pb2Jhc2UgKyAxKSwKIAkgICAgICAgaW5iKGRldi0+aW9iYXNlICsgMiksCkBAIC0zNTcsMTUgKzM1NiwxNSBAQAogCiAJaXJxID0gaXQtPm9wdGlvbnNbMV07CiAJaWYgKGlycSkgewotCQlwcmludGsoIiggaXJxID0gJXUgKSIsIGlycSk7CisJCXByaW50ayhLRVJOX0lORk8gIiggaXJxID0gJXUgKVxuIiwgaXJxKTsKIAkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBydGk4MDBfaW50ZXJydXB0LCAwLCAicnRpODAwIiwgZGV2KTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCXByaW50aygiIEZhaWxlZCB0byBhbGxvY2F0ZSBJUlFcbiIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiIEZhaWxlZCB0byBhbGxvY2F0ZSBJUlFcbiIpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCQlkZXYtPmlycSA9IGlycTsKIAl9IGVsc2UgewotCQlwcmludGsoIiggbm8gaXJxICkiKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiKCBubyBpcnEgKVxuIik7CiAJfQogCiAJZGV2LT5ib2FyZF9uYW1lID0gdGhpc19ib2FyZC0+bmFtZTsKQEAgLTQ2MSwxNCArNDYwLDEyIEBACiAJcy0+dHlwZSA9IENPTUVESV9TVUJEX1RJTUVSOwogI2VuZGlmCiAKLQlwcmludGsoIlxuIik7Ci0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBydGk4MDBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7Ci0JcHJpbnRrKCJjb21lZGklZDogcnRpODAwOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiBydGk4MDA6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CiAKIAlpZiAoZGV2LT5pb2Jhc2UpCiAJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBSVEk4MDBfU0laRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRpODAyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRpODAyLmMKaW5kZXggMmY3NWM3My4uMjE1N2VkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0aTgwMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGk4MDIuYwpAQCAtMTA2LDkgKzEwNiw5IEBACiAJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CiAKIAlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKLQlwcmludGsoImNvbWVkaSVkOiBydGk4MDI6IDB4JTA0bHggIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogcnRpODAyOiAweCUwNGx4ICIsIGRldi0+bWlub3IsIGlvYmFzZSk7CiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIFJUSTgwMl9TSVpFLCAicnRpODAyIikpIHsKLQkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCWRldi0+aW9iYXNlID0gaW9iYXNlOwpAQCAtMTM4LDE0ICsxMzgsMTIgQEAKIAkJICAgID8gJnJhbmdlX3VuaXBvbGFyMTAgOiAmcmFuZ2VfYmlwb2xhcjEwOwogCX0KIAotCXByaW50aygiXG4iKTsKLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHJ0aTgwMl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKLQlwcmludGsoImNvbWVkaSVkOiBydGk4MDI6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IHJ0aTgwMjogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKIAogCWlmIChkZXYtPmlvYmFzZSkKIAkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIFJUSTgwMl9TSVpFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNjI2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczYyNi5jCmluZGV4IGZkZDdhYjkuLmEzY2M5MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNjI2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M2MjYuYwpAQCAtMTQwLDcgKzE0MCw3IEBACiAJc2hvcnQgYWxsb2NhdGVkQnVmOwogCXVpbnQ4X3QgYWlfY21kX3J1bm5pbmc7CS8qICBhaV9jbWQgaXMgcnVubmluZyAqLwogCXVpbnQ4X3QgYWlfY29udGlub3VzOwkvKiAgY29udGlub3VzIGFxdWlzaXRpb24gKi8KLQlpbnQgYWlfc2FtcGxlX2NvdW50OwkvKiAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gYXF1aXJlICovCisJaW50IGFpX3NhbXBsZV9jb3VudDsJLyogIG51bWJlciBvZiBzYW1wbGVzIHRvIGFjcXVpcmUgKi8KIAl1bnNpZ25lZCBpbnQgYWlfc2FtcGxlX3RpbWVyOwogCS8qICB0aW1lIGJldHdlZW4gc2FtcGxlcyBpbiAgdW5pdHMgb2YgdGhlIHRpbWVyICovCiAJaW50IGFpX2NvbnZlcnRfY291bnQ7CS8qICBjb252ZXJzaW9uIGNvdW50ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zZXJpYWwyMDAyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc2VyaWFsMjAwMi5jCmluZGV4IGRiMzdkY2QuLmRkMmI5MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zZXJpYWwyMDAyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3NlcmlhbDIwMDIuYwpAQCAtMzk3LDcgKzM5Nyw3IEBACiAJY2hhciBwb3J0WzIwXTsKIAogCXNwcmludGYocG9ydCwgIi9kZXYvdHR5UyVkIiwgZGV2cHJpdi0+cG9ydCk7Ci0JZGV2cHJpdi0+dHR5ID0gZmlscF9vcGVuKHBvcnQsIDAsIE9fUkRXUik7CisJZGV2cHJpdi0+dHR5ID0gZmlscF9vcGVuKHBvcnQsIE9fUkRXUiwgMCk7CiAJaWYgKElTX0VSUihkZXZwcml2LT50dHkpKSB7CiAJCXByaW50aygic2VyaWFsXzIwMDI6IGZpbGUgb3BlbiBlcnJvciA9ICVsZFxuIiwKIAkJICAgICAgIFBUUl9FUlIoZGV2cHJpdi0+dHR5KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc3N2X2RucC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3Nzdl9kbnAuYwppbmRleCA0OTE4ZmJmLi4xN2M5MmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc3N2X2RucC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zc3ZfZG5wLmMKQEAgLTMwMCwxMSArMzAwLDExIEBACiAKIAkvKiByZWFkICdvbGQnIGRpcmVjdGlvbiBvZiB0aGUgcG9ydCBhbmQgc2V0IGJpdHMgKG91dD0xLCBpbj0wKSAgICAgICAgICAgICAqLwogCXJlZ2lzdGVyX2J1ZmZlciA9IGluYihDU0NEUik7Ci0JaWYgKGRhdGFbMF0gPT0gQ09NRURJX09VVFBVVCkgeworCWlmIChkYXRhWzBdID09IENPTUVESV9PVVRQVVQpCiAJCXJlZ2lzdGVyX2J1ZmZlciB8PSAoMSA8PCBjaGFuKTsKLQl9IGVsc2UgeworCWVsc2UKIAkJcmVnaXN0ZXJfYnVmZmVyICY9IH4oMSA8PCBjaGFuKTsKLQl9CisKIAlvdXRiKHJlZ2lzdGVyX2J1ZmZlciwgQ1NDRFIpOwogCiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4LmMKaW5kZXggOWExYjU1OS4uODk0MmFlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYwpAQCAtOTUsNyArOTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CkBAIC0yODksNyArMjg4LDcgQEAKIAkvKiBjb250aW5vdXMgYXF1aXNpdGlvbiAqLwogCXNob3J0IGludCBhaV9jb250aW5vdXM7CiAJc2hvcnQgaW50IGFvX2NvbnRpbm91czsKLQkvKiBudW1iZXIgb2Ygc2FtcGxlcyB0byBhcXVpcmUgKi8KKwkvKiBudW1iZXIgb2Ygc2FtcGxlcyB0byBhY3F1aXJlICovCiAJaW50IGFpX3NhbXBsZV9jb3VudDsKIAlpbnQgYW9fc2FtcGxlX2NvdW50OwogCS8qIHRpbWUgYmV0d2VlbiBzYW1wbGVzIGluIHVuaXRzIG9mIHRoZSB0aW1lciAqLwpAQCAtMjgzMyw3ICsyODMyLDcgQEAKIH07CiAKIC8qIFRhYmxlIHdpdGggdGhlIFVTQi1kZXZpY2VzOiBqdXN0IG5vdyBvbmx5IHRlc3RpbmcgSURzICovCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiZHV4c3ViX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiZHV4c3ViX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHgxM2Q4LCAweDAwMDEpfSwKIAl7VVNCX0RFVklDRSgweDEzZDgsIDB4MDAwMil9LAogCXt9CQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXhmYXN0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4ZmFzdC5jCmluZGV4IDJlNjc1Y2MuLmU4OWI4MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXhmYXN0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eGZhc3QuYwpAQCAtNDQsNyArNDQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgImNvbWVkaV9mYy5oIgpAQCAtMTgyLDcgKzE4MSw3IEBACiAJCQkJCQkgICBjb250ZXh0ICovCiAJc2hvcnQgaW50IGFpX2NtZF9ydW5uaW5nOwkvKiBhc3luY2hyb25vdXMgY29tbWFuZCBpcyBydW5uaW5nICovCiAJc2hvcnQgaW50IGFpX2NvbnRpbm91czsJLyogY29udGlub3VzIGFxdWlzaXRpb24gKi8KLQlsb25nIGludCBhaV9zYW1wbGVfY291bnQ7CS8qIG51bWJlciBvZiBzYW1wbGVzIHRvIGFxdWlyZSAqLworCWxvbmcgaW50IGFpX3NhbXBsZV9jb3VudDsJLyogbnVtYmVyIG9mIHNhbXBsZXMgdG8gYWNxdWlyZSAqLwogCXVpbnQ4X3QgKmR1eF9jb21tYW5kczsJLyogY29tbWFuZHMgKi8KIAlpbnQgaWdub3JlOwkJLyogY291bnRlciB3aGljaCBpZ25vcmVzIHRoZSBmaXJzdAogCQkJCSAgIGJ1ZmZlcnMgKi8KQEAgLTE3NjksNyArMTc2OCw3IEBACiAvKgogICogVGFibGUgd2l0aCB0aGUgVVNCLWRldmljZXM6IGp1c3Qgbm93IG9ubHkgdGVzdGluZyBJRHMKICAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYmR1eGZhc3RzdWJfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JkdXhmYXN0c3ViX3RhYmxlW10gPSB7CiAJLyogeyBVU0JfREVWSUNFKDB4NGI0LCAweDg2MTMpIH0sIHRlc3RpbmcgKi8KIAl7VVNCX0RFVklDRSgweDEzZDgsIDB4MDAxMCl9LAkvKiByZWFsIElEICovCiAJe1VTQl9ERVZJQ0UoMHgxM2Q4LCAweDAwMTEpfSwJLyogcmVhbCBJRCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3ZtazgweHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy92bWs4MHh4LmMKaW5kZXggYzM0YTBiOS4uNjQ3OWMzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3ZtazgweHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdm1rODB4eC5jCkBAIC03NSw3ICs3NSw3IEBACiAJREVWSUNFX1ZNSzgwNjEKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB2bWs4MHh4X2lkX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgdm1rODB4eF9pZF90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKDB4MTBjZiwgMHg1NTAwKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1ZNSzgwNTV9LAogCXtVU0JfREVWSUNFKDB4MTBjZiwgMHg1NTAxKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1ZNSzgwNTV9LAogCXtVU0JfREVWSUNFKDB4MTBjZiwgMHg1NTAyKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1ZNSzgwNTV9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YjQxNGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL0tjb25maWcKQEAgLTAsMCArMSw2IEBACitjb25maWcgQ1JZU1RBTEhECisJdHJpc3RhdGUgIkJyb2FkY29tIENyeXN0YWwgSEQgdmlkZW8gZGVjb2RlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJCisJZGVmYXVsdCBuCisJaGVscAorCSAgU3VwcG9ydCBmb3IgdGhlIEJyb2FkY29tIENyeXN0YWwgSEQgdmlkZW8gZGVjb2RlciBjaGlwc2V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmFmMGNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9NYWtlZmlsZQpAQCAtMCwwICsxLDYgQEAKK29iai0kKENPTkZJR19DUllTVEFMSEQpCSs9IGNyeXN0YWxoZC5vCisKK2NyeXN0YWxoZC1vYmpzCQk6PSBjcnlzdGFsaGRfY21kcy5vCVwKKwkJCSAgIGNyeXN0YWxoZF9ody5vCVwKKwkJCSAgIGNyeXN0YWxoZF9sbngubwlcCisJCQkgICBjcnlzdGFsaGRfbWlzYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjliZTVkMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvVE9ETwpAQCAtMCwwICsxLDE2IEBACistIFRlc3RpbmcKKy0gQ2xlYW51cCByZXR1cm4gY29kZXMKKy0gQ2xlYW51cCB0eXBlZGVmcworLSBDbGVhbnVwIGFsbCBXSU4qIHJlZmVyZW5jZXMKKy0gQWxsb2NhdGUgYW4gQWNjZWxlcmF0b3IgZGV2aWNlIGNsYXNzIHNwZWNpZmljIE1ham9yIG51bWJlciwKKyAgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnkgb3RoZXIgb3BlbiBzb3VyY2VkIGFjY2VsZXJhdG9ycywgaXQgaXMgdGhlIG9ubHkKKyAgb25lIGluIHRoYXQgY2F0ZWdvcnkgZm9yIG5vdy4KKyAgQSBzb21ld2hhdCBzaW1pbGFyIGRldmljZSBpcyB0aGUgRFhSMi8zCisKK1BsZWFzZSBzZW5kIHBhdGNoZXMgdG86CitHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPgorTmFyZW4gU2Fua2FyIDxuc2Fua2FyQGJyb2FkY29tLmNvbT4KK0phcm9kIFdpbHNvbiA8amFyb2RAd2lsc29uZXQuY29tPgorU2NvdHQgRGF2aWxsYSA8ZGF2aWxsYUA0cGkuY29tPgorTWFudSBBYnJhaGFtIDxhYnJhaGFtLm1hbnVAZ21haWwuY29tPgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2JjX2R0c19kZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2JjX2R0c19kZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM0Y2MwNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvYmNfZHRzX2RlZnMuaApAQCAtMCwwICsxLDQ5OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQoYykgMjAwNi0yMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLgorICoKKyAqICBOYW1lOiBiY19kdHNfZGVmcy5oCisgKgorICogIERlc2NyaXB0aW9uOiBDb21tb24gZGVmaW5pdGlvbnMgZm9yIGFsbCBjb21wb25lbnRzLiBPbmx5IHR5cGVzCisgKgkJIGlzIGFsbG93ZWQgdG8gYmUgaW5jbHVkZWQgZnJvbSB0aGlzIGZpbGUuCisgKgorICogIEFVCisgKgorICogIEhJU1RPUlk6CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIGhlYWRlciBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIGhlYWRlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgaGVhZGVyLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0JDX0RUU19ERUZTX0hfCisjZGVmaW5lIF9CQ19EVFNfREVGU19IXworCisjaW5jbHVkZSAiYmNfZHRzX3R5cGVzLmgiCisKKy8qIEJJVCBNYXNrICovCisjZGVmaW5lIEJDX0JJVChfeCkJCSgxIDw8IChfeCkpCisKK3R5cGVkZWYgZW51bSBfQkNfU1RBVFVTIHsKKwlCQ19TVFNfU1VDQ0VTUwkJPSAwLAorCUJDX1NUU19JTlZfQVJHCQk9IDEsCisJQkNfU1RTX0JVU1kJCT0gMiwKKwlCQ19TVFNfTk9UX0lNUEwJCT0gMywKKwlCQ19TVFNfUEdNX1FVSVQJCT0gNCwKKwlCQ19TVFNfTk9fQUNDRVNTCT0gNSwKKwlCQ19TVFNfSU5TVUZGX1JFUwk9IDYsCisJQkNfU1RTX0lPX0VSUk9SCQk9IDcsCisJQkNfU1RTX05PX0RBVEEJCT0gOCwKKwlCQ19TVFNfVkVSX01JU01BVENICT0gOSwKKwlCQ19TVFNfVElNRU9VVAkJPSAxMCwKKwlCQ19TVFNfRldfQ01EX0VSUgk9IDExLAorCUJDX1NUU19ERUNfTk9UX09QRU4JPSAxMiwKKwlCQ19TVFNfRVJSX1VTQUdFCT0gMTMsCisJQkNfU1RTX0lPX1VTRVJfQUJPUlQJPSAxNCwKKwlCQ19TVFNfSU9fWEZSX0VSUk9SCT0gMTUsCisJQkNfU1RTX0RFQ19OT1RfU1RBUlRFRAk9IDE2LAorCUJDX1NUU19GV0hFWF9OT1RfRk9VTkQJPSAxNywKKwlCQ19TVFNfRk1UX0NIQU5HRQk9IDE4LAorCUJDX1NUU19ISUZfQUNDRVNTCT0gMTksCisJQkNfU1RTX0NNRF9DQU5DRUxMRUQJPSAyMCwKKwlCQ19TVFNfRldfQVVUSF9GQUlMRUQJPSAyMSwKKwlCQ19TVFNfQk9PVExPQURFUl9GQUlMRUQgPSAyMiwKKwlCQ19TVFNfQ0VSVF9WRVJJRllfRVJST1IgPSAyMywKKwlCQ19TVFNfREVDX0VYSVNUX09QRU4JPSAyNCwKKwlCQ19TVFNfUEVORElORwkJPSAyNSwKKwlCQ19TVFNfQ0xLX05PQ0hHCT0gMjYsCisKKwkvKiBNdXN0IGJlIHRoZSBsYXN0IG9uZS4qLworCUJDX1NUU19FUlJPUgkJPSAtMQorfSBCQ19TVEFUVVM7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogICAgUmVnaXN0cnkgS2V5IERlZmluaXRpb25zCQkJCSoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgQkNfUkVHX0tFWV9NQUlOX1BBVEgJIlNvZnR3YXJlXFxCcm9hZGNvbVxcTWVkaWFQQ1xcNzAwMTAiCisjZGVmaW5lIEJDX1JFR19LRVlfRldQQVRICQkiRmlybXdhcmVGaWxlUGF0aCIKKyNkZWZpbmUgQkNfUkVHX0tFWV9TRUNfT1BUCQkiRGJnT3B0aW9ucyIKKworLyoKKyAqIE9wdGlvbnM6CisgKgorICogIGJbNV0gPSBFbmFibGUgUlNBIEtFWSBpbiBFRVBST00gU3VwcG9ydAorICogIGJbNl0gPSBFbmFibGUgT2xkIFBJQiBzY2hlbWUuICgwID0gVXNlIFBJQiB3aXRoIHZpZGVvIHNjaGVtZSkKKyAqCisgKiAgYlsxMl0gPSBFbmFibGUgc2VuZCBtZXNzYWdlIHRvIE5vdGlmeUljb24KKyAqCisgKi8KKwordHlwZWRlZiBlbnVtIF9CQ19TV19PUFRJT05TIHsKKwlCQ19PUFRfRE9TRVJfT1VUX0VOQ1JZUFQJPSBCQ19CSVQoMyksCisJQkNfT1BUX0xJTktfT1VUX0VOQ1JZUFQJCT0gQkNfQklUKDI5KSwKK30gQkNfU1dfT1BUSU9OUzsKKwordHlwZWRlZiBzdHJ1Y3QgX0JDX1JFR19DT05GSUd7CisJdWludDMyX3QJCURiZ09wdGlvbnM7Cit9IEJDX1JFR19DT05GSUc7CisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8IGRlZmluZWQoX19MSU5VWF9VU0VSX18pCisjZWxzZQorLyogQWxpZ24gZGF0YSBzdHJ1Y3R1cmVzICovCisjZGVmaW5lIEFMSUdOKHgpCV9fZGVjbHNwZWMoYWxpZ24oeCkpCisjZW5kaWYKKworLyogbW9kZQorICogYlswXS4uYls3XQk9IF9EdHNEZXZpY2VPcGVuTW9kZQorICogYls4XQkJPSAgTG9hZCBuZXcgRlcKKyAqIGJbOV0JCT0gIExvYWQgZmlsZSBwbGF5IGJhY2sgRlcKKyAqIGJbMTBdCT0gIERpc2sgZm9ybWF0ICgwIGZvciBIRCBEVkQgYW5kIDEgZm9yIEJMVSByYXkpCisgKiBiWzExXS1iWzE1XQk9ICBkZWZhdWx0IG91dHB1dCByZXNvbHV0aW9uCisgKiBiWzE2XQk9ICBTa2lwIFRYIENQQiBCdWZmZXIgQ2hlY2sKKyAqIGJbMTddCT0gIEFkYXB0aXZlIE91dHB1dCBFbmNyeXB0L1NjcmFtYmxlIFNjaGVtZQorICogYlsxOF0tYlszMV0JPSAgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKKyAqLworCisvKiBUbyBhbGxvdyBtdWx0aXBsZSBhcHBzIHRvIG9wZW4gdGhlIGRldmljZS4gKi8KK2VudW0gX0R0c0RldmljZU9wZW5Nb2RlIHsKKwlEVFNfUExBWUJBQ0tfTU9ERSA9IDAsCisJRFRTX0RJQUdfTU9ERSwKKwlEVFNfTU9OSVRPUl9NT0RFLAorCURUU19IV0lOSVRfTU9ERQorfTsKKworLyogVG8gZW5hYmxlIHRoZSBmaWx0ZXIgdG8gc2VsZWN0aXZlbHkgZW5hYmxlL2Rpc2FibGUgZml4ZXMgb3IgZXJyYXRhcyAqLworZW51bSBfRHRzRGV2aWNlRml4TW9kZSB7CisJRFRTX0xPQURfTkVXX0ZXCQk9IEJDX0JJVCg4KSwKKwlEVFNfTE9BRF9GSUxFX1BMQVlfRlcJPSBCQ19CSVQoOSksCisJRFRTX0RJU0tfRk1UX0JECQk9IEJDX0JJVCgxMCksCisJLyogYlsxMV0tYlsxNV0gOiBEZWZhdWx0IG91dHB1dCByZXNvbHV0aW9uICovCisJRFRTX1NLSVBfVFhfQ0hLX0NQQgk9IEJDX0JJVCgxNiksCisJRFRTX0FEQVBUSVZFX09VVFBVVF9QRVIJPSBCQ19CSVQoMTcpLAorCURUU19JTlRFTExJTUFQCQk9IEJDX0JJVCgxOCksCisJLyogYlsxOV0tYlsyMV0gOiBzZWxlY3QgY2xvY2sgZnJlcXVlbmN5ICovCisJRFRTX1BMQVlCQUNLX0RST1BfUlBUX01PREUgPSBCQ19CSVQoMjIpCit9OworCisjZGVmaW5lIERUU19ERkxUX1JFU09MVVRJT04oeCkJKHg8PDExKQorCisjZGVmaW5lIERUU19ERkxUX0NMT0NLKHgpICh4PDwxOSkKKworLyogRi9XIEZpbGUgVmVyc2lvbiBjb3JyZXNwb25kaW5nIHRvIFMvVyBSZWxlYXNlcyAqLworZW51bSBfRldfRklMRV9WRVIgeworCS8qIFMvVyByZWxlYXNlOiAwMi4wNC4wMglGL1cgcmVsZWFzZSAyLjEyLjIuMCAqLworCUJDX0ZXX1ZFUl8wMjA0MDIgPSAoKDEyPDwxNikgfCAoMjw8OCkgfCAoMCkpCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqICAgIFN0cmVhbSBUeXBlcyBmb3IgRHRzT3BlbkRlY29kZXIoKQkJCSoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2VudW0gX0R0c09wZW5EZWNTdHJlYW1UeXBlcyB7CisJQkNfU1RSRUFNX1RZUEVfRVMJCT0gMCwKKwlCQ19TVFJFQU1fVFlQRV9QRVMJCT0gMSwKKwlCQ19TVFJFQU1fVFlQRV9UUwkJPSAyLAorCUJDX1NUUkVBTV9UWVBFX0VTX1RTVEFNUAk9IDYsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqICAgIFZpZGVvIEFsZ29yaXRobXMgZm9yIER0c1NldFZpZGVvUGFyYW1zKCkJCSoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2VudW0gX0R0c1NldFZpZGVvUGFyYW1zQWxnbyB7CisJQkNfVklEX0FMR09fSDI2NAkJPSAwLAorCUJDX1ZJRF9BTEdPX01QRUcyCQk9IDEsCisJQkNfVklEX0FMR09fVkMxCQkJPSA0LAorCUJDX1ZJRF9BTEdPX1ZDMU1QCQk9IDcsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqICAgIE1QRUcgRXh0ZW5zaW9uIHRvIHRoZSBQUEIJCQkJKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBCQ19NUEVHX1ZBTElEX1BBTlNDQU4JCSgxKQorCit0eXBlZGVmIHN0cnVjdCBfQkNfUElCX0VYVF9NUEVHIHsKKwl1aW50MzJfdAl2YWxpZDsKKwkvKiBBbHdheXMgdmFsaWQsICBkZWZhdWx0cyB0byBwaWN0dXJlIHNpemUgaWYgbm8KKwkgKiBzZXF1ZW5jZSBkaXNwbGF5IGV4dGVuc2lvbiBpbiB0aGUgc3RyZWFtLiAqLworCXVpbnQzMl90CWRpc3BsYXlfaG9yaXpvbnRhbF9zaXplOworCXVpbnQzMl90CWRpc3BsYXlfdmVydGljYWxfc2l6ZTsKKworCS8qIE1QRUdfVkFMSURfUEFOU0NBTgorCSAqIE9mZnNldHMgYXJlIGEgY29weSB2YWx1ZXMgZnJvbSB0aGUgTVBFRyBzdHJlYW0uICovCisJdWludDMyX3QJb2Zmc2V0X2NvdW50OworCWludDMyX3QJCWhvcml6b250YWxfb2Zmc2V0WzNdOworCWludDMyX3QJCXZlcnRpY2FsX29mZnNldFszXTsKKworfSBCQ19QSUJfRVhUX01QRUc7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogICAgSC4yNjQgRXh0ZW5zaW9uIHRvIHRoZSBQUEIJCQkqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBCaXQgZGVmaW5pdGlvbnMgZm9yICdvdGhlci5oMjY0LnZhbGlkJyBmaWVsZCAqLworI2RlZmluZSBIMjY0X1ZBTElEX1BBTlNDQU4JCSgxKQorI2RlZmluZSBIMjY0X1ZBTElEX1NQU19DUk9QCQkoMikKKyNkZWZpbmUgSDI2NF9WQUxJRF9WVUkJCQkoNCkKKwordHlwZWRlZiBzdHJ1Y3QgX0JDX1BJQl9FWFRfSDI2NCB7CisJLyogJ3ZhbGlkJyBzcGVjaWZpZXMgd2hpY2ggZmllbGRzIChvciBzZXRzIG9mCisJICogZmllbGRzKSBiZWxvdyBhcmUgdmFsaWQuICBJZiB0aGUgY29ycmVzcG9uZGluZworCSAqIGJpdCBpbiAndmFsaWQnIGlzIE5PVCBzZXQgdGhlbiB0aGF0IGZpZWxkKHMpCisJICogaXMgKGFyZSkgbm90IGluaXRpYWxpemVkLiAqLworCXVpbnQzMl90CXZhbGlkOworCisJLyogSDI2NF9WQUxJRF9QQU5TQ0FOICovCisJdWludDMyX3QJcGFuX3NjYW5fY291bnQ7CisJaW50MzJfdAkJcGFuX3NjYW5fbGVmdFszXTsKKwlpbnQzMl90CQlwYW5fc2Nhbl9yaWdodFszXTsKKwlpbnQzMl90CQlwYW5fc2Nhbl90b3BbM107CisJaW50MzJfdAkJcGFuX3NjYW5fYm90dG9tWzNdOworCisJLyogSDI2NF9WQUxJRF9TUFNfQ1JPUCAqLworCWludDMyX3QJCXNwc19jcm9wX2xlZnQ7CisJaW50MzJfdAkJc3BzX2Nyb3BfcmlnaHQ7CisJaW50MzJfdAkJc3BzX2Nyb3BfdG9wOworCWludDMyX3QJCXNwc19jcm9wX2JvdHRvbTsKKworCS8qIEgyNjRfVkFMSURfVlVJICovCisJdWludDMyX3QJY2hyb21hX3RvcDsKKwl1aW50MzJfdAljaHJvbWFfYm90dG9tOworCit9IEJDX1BJQl9FWFRfSDI2NDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiAgICBWQzEgRXh0ZW5zaW9uIHRvIHRoZSBQUEIJCQkJKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBWQzFfVkFMSURfUEFOU0NBTgkJKDEpCisKK3R5cGVkZWYgc3RydWN0IF9CQ19QSUJfRVhUX1ZDMSB7CisJdWludDMyX3QJdmFsaWQ7CisKKwkvKiBBbHdheXMgdmFsaWQsIGRlZmF1bHRzIHRvIHBpY3R1cmUgc2l6ZSBpZiBubworCSAqIHNlcXVlbmNlIGRpc3BsYXkgZXh0ZW5zaW9uIGluIHRoZSBzdHJlYW0uICovCisJdWludDMyX3QJZGlzcGxheV9ob3Jpem9udGFsX3NpemU7CisJdWludDMyX3QJZGlzcGxheV92ZXJ0aWNhbF9zaXplOworCisJLyogVkMxIHBhbiBzY2FuIHdpbmRvd3MgKi8KKwl1aW50MzJfdAludW1fcGFuc2Nhbl93aW5kb3dzOworCWludDMyX3QJCXBzX2hvcml6X29mZnNldFs0XTsKKwlpbnQzMl90CQlwc192ZXJ0X29mZnNldFs0XTsKKwlpbnQzMl90CQlwc193aWR0aFs0XTsKKwlpbnQzMl90CQlwc19oZWlnaHRbNF07CisKK30gQkNfUElCX0VYVF9WQzE7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiAgICBQaWN0dXJlIEluZm9ybWF0aW9uIEJsb2NrCQkJCSoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfV0lONjQpIHx8IGRlZmluZWQoX19MSU5VWF9VU0VSX18pCisvKiBWYWx1ZXMgZm9yICdwdWxsZG93bicgZmllbGQuICAnMCcgbWVhbnMgbm8gcHVsbGRvd24gaW5mb3JtYXRpb24KKyAqIHdhcyBwcmVzZW50IGZvciB0aGlzIHBpY3R1cmUuICovCitlbnVtIHsKKwl2ZGVjTm9QdWxsZG93bkluZm8JPSAwLAorCXZkZWNUb3AJCQk9IDEsCisJdmRlY0JvdHRvbQkJPSAyLAorCXZkZWNUb3BCb3R0b20JCT0gMywKKwl2ZGVjQm90dG9tVG9wCQk9IDQsCisJdmRlY1RvcEJvdHRvbVRvcAk9IDUsCisJdmRlY0JvdHRvbVRvcEJvdHRvbQk9IDYsCisJdmRlY0ZyYW1lX1gyCQk9IDcsCisJdmRlY0ZyYW1lX1gzCQk9IDgsCisJdmRlY0ZyYW1lX1gxCQk9IDksCisJdmRlY0ZyYW1lX1g0CQk9IDEwLAorfTsKKworLyogVmFsdWVzIGZvciB0aGUgJ2ZyYW1lX3JhdGUnIGZpZWxkLiAqLworZW51bSB7CisJdmRlY0ZyYW1lUmF0ZVVua25vd24gPSAwLAorCXZkZWNGcmFtZVJhdGUyM185NywKKwl2ZGVjRnJhbWVSYXRlMjQsCisJdmRlY0ZyYW1lUmF0ZTI1LAorCXZkZWNGcmFtZVJhdGUyOV85NywKKwl2ZGVjRnJhbWVSYXRlMzAsCisJdmRlY0ZyYW1lUmF0ZTUwLAorCXZkZWNGcmFtZVJhdGU1OV85NCwKKwl2ZGVjRnJhbWVSYXRlNjAsCit9OworCisvKiBWYWx1ZXMgZm9yIHRoZSAnYXNwZWN0X3JhdGlvJyBmaWVsZC4gKi8KK2VudW0geworCXZkZWNBc3BlY3RSYXRpb1Vua25vd24gPSAwLAorCXZkZWNBc3BlY3RSYXRpb1NxdWFyZSwKKwl2ZGVjQXNwZWN0UmF0aW8xMl8xMSwKKwl2ZGVjQXNwZWN0UmF0aW8xMF8xMSwKKwl2ZGVjQXNwZWN0UmF0aW8xNl8xMSwKKwl2ZGVjQXNwZWN0UmF0aW80MF8zMywKKwl2ZGVjQXNwZWN0UmF0aW8yNF8xMSwKKwl2ZGVjQXNwZWN0UmF0aW8yMF8xMSwKKwl2ZGVjQXNwZWN0UmF0aW8zMl8xMSwKKwl2ZGVjQXNwZWN0UmF0aW84MF8zMywKKwl2ZGVjQXNwZWN0UmF0aW8xOF8xMSwKKwl2ZGVjQXNwZWN0UmF0aW8xNV8xMSwKKwl2ZGVjQXNwZWN0UmF0aW82NF8zMywKKwl2ZGVjQXNwZWN0UmF0aW8xNjBfOTksCisJdmRlY0FzcGVjdFJhdGlvNF8zLAorCXZkZWNBc3BlY3RSYXRpbzE2XzksCisJdmRlY0FzcGVjdFJhdGlvMjIxXzEsCisJdmRlY0FzcGVjdFJhdGlvT3RoZXIgPSAyNTUsCit9OworCisvKiBWYWx1ZXMgZm9yIHRoZSAnY29sb3VyX3ByaW1hcmllcycgZmllbGQuICovCitlbnVtIHsKKwl2ZGVjQ29sb3VyUHJpbWFyaWVzVW5rbm93biA9IDAsCisJdmRlY0NvbG91clByaW1hcmllc0JUNzA5LAorCXZkZWNDb2xvdXJQcmltYXJpZXNVbnNwZWNpZmllZCwKKwl2ZGVjQ29sb3VyUHJpbWFyaWVzUmVzZXJ2ZWQsCisJdmRlY0NvbG91clByaW1hcmllc0JUNDcwXzJNID0gNCwKKwl2ZGVjQ29sb3VyUHJpbWFyaWVzQlQ0NzBfMkJHLAorCXZkZWNDb2xvdXJQcmltYXJpZXNTTVBURTE3ME0sCisJdmRlY0NvbG91clByaW1hcmllc1NNUFRFMjQwTSwKKwl2ZGVjQ29sb3VyUHJpbWFyaWVzR2VuZXJpY0ZpbG0sCit9OworCitlbnVtIHsKKwl2ZGVjUkVTT0xVVElPTl9DVVNUT00JPSAweDAwMDAwMDAwLCAvKiBjdXN0b20gKi8KKwl2ZGVjUkVTT0xVVElPTl80ODBpCT0gMHgwMDAwMDAwMSwgLyogNDgwaSAqLworCXZkZWNSRVNPTFVUSU9OXzEwODBpCT0gMHgwMDAwMDAwMiwgLyogMTA4MGkgKDE5MjB4MTA4MCwgNjBpKSAqLworCXZkZWNSRVNPTFVUSU9OX05UU0MJPSAweDAwMDAwMDAzLCAvKiBOVFNDICg3MjB4NDgzLCA2MGkpICovCisJdmRlY1JFU09MVVRJT05fNDgwcAk9IDB4MDAwMDAwMDQsIC8qIDQ4MHAgKDcyMHg0ODAsIDYwcCkgKi8KKwl2ZGVjUkVTT0xVVElPTl83MjBwCT0gMHgwMDAwMDAwNSwgLyogNzIwcCAoMTI4MHg3MjAsIDYwcCkgKi8KKwl2ZGVjUkVTT0xVVElPTl9QQUwxCT0gMHgwMDAwMDAwNiwgLyogUEFMXzEgKDcyMHg1NzYsIDUwaSkgKi8KKwl2ZGVjUkVTT0xVVElPTl8xMDgwaTI1CT0gMHgwMDAwMDAwNywgLyogMTA4MGkyNSAoMTkyMHgxMDgwLCA1MGkpICovCisJdmRlY1JFU09MVVRJT05fNzIwcDUwCT0gMHgwMDAwMDAwOCwgLyogNzIwcDUwICgxMjgweDcyMCwgNTBwKSAqLworCXZkZWNSRVNPTFVUSU9OXzU3NnAJPSAweDAwMDAwMDA5LCAvKiA1NzZwICg3MjB4NTc2LCA1MHApICovCisJdmRlY1JFU09MVVRJT05fMTA4MGkyOV85NyA9IDB4MDAwMDAwMEEsIC8qIDEwODBpICgxOTIweDEwODAsIDU5Ljk0aSkgKi8KKwl2ZGVjUkVTT0xVVElPTl83MjBwNTlfOTQgID0gMHgwMDAwMDAwQiwgLyogNzIwcCAoMTI4MHg3MjAsIDU5Ljk0cCkgKi8KKwl2ZGVjUkVTT0xVVElPTl9TRF9EVkQJPSAweDAwMDAwMDBDLCAvKiBTRCBEVkQgKDcyMHg0ODMsIDYwaSkgKi8KKwl2ZGVjUkVTT0xVVElPTl80ODBwNjU2CT0gMHgwMDAwMDAwRCwgLyogNDgwcCAoNzIweDQ4MCwgNjBwKSwgb3V0cHV0IGJ1cyB3aWR0aCA4IGJpdCwgY2xvY2sgNzQuMjVNSHogKi8KKwl2ZGVjUkVTT0xVVElPTl8xMDgwcDIzXzk3NiA9IDB4MDAwMDAwMEUsIC8qIDEwODBwMjNfOTc2ICgxOTIweDEwODAsIDIzLjk3NnApICovCisJdmRlY1JFU09MVVRJT05fNzIwcDIzXzk3NiAgPSAweDAwMDAwMDBGLCAvKiA3MjBwMjNfOTc2ICgxMjgweDcyMHAsIDIzLjk3NnApICovCisJdmRlY1JFU09MVVRJT05fMjQwcDI5Xzk3ICAgPSAweDAwMDAwMDEwLCAvKiAyNDBwICgxNDQweDI0MCwgMjkuOTdwICkgKi8KKwl2ZGVjUkVTT0xVVElPTl8yNDBwMzAJPSAweDAwMDAwMDExLCAvKiAyNDBwICgxNDQweDI0MCwgMzBwKSAqLworCXZkZWNSRVNPTFVUSU9OXzI4OHAyNQk9IDB4MDAwMDAwMTIsIC8qIDI4OHAgKDE0NDB4Mjg4cCwgMjVwKSAqLworCXZkZWNSRVNPTFVUSU9OXzEwODBwMjlfOTcgPSAweDAwMDAwMDEzLCAvKiAxMDgwcDI5Xzk3ICgxOTIweDEwODAsIDI5Ljk3cCkgKi8KKwl2ZGVjUkVTT0xVVElPTl8xMDgwcDMwCT0gMHgwMDAwMDAxNCwgLyogMTA4MHAzMCAoMTkyMHgxMDgwLCAzMHApICovCisJdmRlY1JFU09MVVRJT05fMTA4MHAyNAk9IDB4MDAwMDAwMTUsIC8qIDEwODBwMjQgKDE5MjB4MTA4MCwgMjRwKSAqLworCXZkZWNSRVNPTFVUSU9OXzEwODBwMjUJPSAweDAwMDAwMDE2LCAvKiAxMDgwcDI1ICgxOTIweDEwODAsIDI1cCkgKi8KKwl2ZGVjUkVTT0xVVElPTl83MjBwMjQJPSAweDAwMDAwMDE3LCAvKiA3MjBwMjQgKDEyODB4NzIwLCAyNXApICovCisJdmRlY1JFU09MVVRJT05fNzIwcDI5Xzk3ICA9IDB4MDAwMDAwMTgsIC8qIDcyMHAyOS45NyAoMTI4MHg3MjAsIDI5Ljk3cCkgKi8KKwl2ZGVjUkVTT0xVVElPTl80ODBwMjNfOTc2ID0gMHgwMDAwMDAxOSwgLyogNDgwcDIzLjk3NiAoNzIwKjQ4MCwgMjMuOTc2KSAqLworCXZkZWNSRVNPTFVUSU9OXzQ4MHAyOV85NyAgPSAweDAwMDAwMDFBLCAvKiA0ODBwMjkuOTc2ICg3MjAqNDgwLCAyOS45N3ApICovCisJdmRlY1JFU09MVVRJT05fNTc2cDI1CT0gMHgwMDAwMDAxQiwgLyogNTc2cDI1ICg3MjAqNTc2LCAyNXApICovCisJLyogRm9yIFplcm8gRnJhbWUgUmF0ZSAqLworCXZkZWNSRVNPTFVUSU9OXzQ4MHAwCT0gMHgwMDAwMDAxQywgLyogNDgwcCAoNzIweDQ4MCwgMHApICovCisJdmRlY1JFU09MVVRJT05fNDgwaTAJPSAweDAwMDAwMDFELCAvKiA0ODBpICg3MjB4NDgwLCAwaSkgKi8KKwl2ZGVjUkVTT0xVVElPTl81NzZwMAk9IDB4MDAwMDAwMUUsIC8qIDU3NnAgKDcyMHg1NzYsIDBwKSAqLworCXZkZWNSRVNPTFVUSU9OXzcyMHAwCT0gMHgwMDAwMDAxRiwgLyogNzIwcCAoMTI4MHg3MjAsIDBwKSAqLworCXZkZWNSRVNPTFVUSU9OXzEwODBwMAk9IDB4MDAwMDAwMjAsIC8qIDEwODBwICgxOTIweDEwODAsIDBwKSAqLworCXZkZWNSRVNPTFVUSU9OXzEwODBpMAk9IDB4MDAwMDAwMjEsIC8qIDEwODBpICgxOTIweDEwODAsIDBpKSAqLworfTsKKworLyogQml0IGRlZmluaXRpb25zIGZvciAnZmxhZ3MnIGZpZWxkICovCisjZGVmaW5lIFZERUNfRkxBR19FT1MJCQkJKDB4MDAwNCkKKworI2RlZmluZSBWREVDX0ZMQUdfRlJBTUUJCQkJKDB4MDAwMCkKKyNkZWZpbmUgVkRFQ19GTEFHX0ZJRUxEUEFJUgkJCSgweDAwMDgpCisjZGVmaW5lIFZERUNfRkxBR19UT1BGSUVMRAkJCSgweDAwMTApCisjZGVmaW5lIFZERUNfRkxBR19CT1RUT01GSUVMRAkJCSgweDAwMTgpCisKKyNkZWZpbmUgVkRFQ19GTEFHX1BST0dSRVNTSVZFX1NSQwkJKDB4MDAwMCkKKyNkZWZpbmUgVkRFQ19GTEFHX0lOVEVSTEFDRURfU1JDCQkoMHgwMDIwKQorI2RlZmluZSBWREVDX0ZMQUdfVU5LTk9XTl9TUkMJCQkoMHgwMDQwKQorCisjZGVmaW5lIFZERUNfRkxBR19CT1RUT01fRklSU1QJCQkoMHgwMDgwKQorI2RlZmluZSBWREVDX0ZMQUdfTEFTVF9QSUNUVVJFCQkJKDB4MDEwMCkKKworI2RlZmluZSBWREVDX0ZMQUdfUElDVFVSRV9NRVRBX0RBVEFfUFJFU0VOVAkoMHg0MDAwMCkKKworI2VuZGlmIC8qIF9XSU4zMiB8fCBfV0lONjQgKi8KKworZW51bSBfQkNfT1VUUFVUX0ZPUk1BVCB7CisJTU9ERTQyMAkJCQk9IDB4MCwKKwlNT0RFNDIyX1lVWTIJCQk9IDB4MSwKKwlNT0RFNDIyX1VZVlkJCQk9IDB4MiwKK307CisKK3R5cGVkZWYgc3RydWN0IF9CQ19QSUNfSU5GT19CTE9DSyB7CisJLyogQ29tbW9uIGZpZWxkcy4gKi8KKwl1aW50NjRfdAl0aW1lU3RhbXA7CS8qIFRpbWVzdGFtcCAqLworCXVpbnQzMl90CXBpY3R1cmVfbnVtYmVyOwkvKiBPcmRpbmFsIGRpc3BsYXkgbnVtYmVyICAqLworCXVpbnQzMl90CXdpZHRoOwkJLyogcGl4ZWxzCSAgICAqLworCXVpbnQzMl90CWhlaWdodDsJCS8qIHBpeGVscwkgICAgKi8KKwl1aW50MzJfdAljaHJvbWFfZm9ybWF0OwkvKiAweDQyMCwgMHg0MjIgb3IgMHg0NDQgKi8KKwl1aW50MzJfdAlwdWxsZG93bjsKKwl1aW50MzJfdAlmbGFnczsKKwl1aW50MzJfdAlmcmFtZV9yYXRlOworCXVpbnQzMl90CWFzcGVjdF9yYXRpbzsKKwl1aW50MzJfdAljb2xvdXJfcHJpbWFyaWVzOworCXVpbnQzMl90CXBpY3R1cmVfbWV0YV9wYXlsb2FkOworCXVpbnQzMl90CXNlc3NfbnVtOworCXVpbnQzMl90CXljb207CisJdWludDMyX3QJY3VzdG9tX2FzcGVjdF9yYXRpb193aWR0aF9oZWlnaHQ7CisJdWludDMyX3QJbl9kcm9wOwkvKiBudW1iZXIgb2Ygbm9uLXJlZmVyZW5jZSBmcmFtZXMgcmVtYWluaW5nIHRvIGJlIGRyb3BwZWQgKi8KKworCS8qIFByb3RvY29sLXNwZWNpZmljIGV4dGVuc2lvbnMuICovCisJdW5pb24geworCQlCQ19QSUJfRVhUX0gyNjQJaDI2NDsKKwkJQkNfUElCX0VYVF9NUEVHCW1wZWc7CisJCUJDX1BJQl9FWFRfVkMxCSB2YzE7CisJfSBvdGhlcjsKKworfSBCQ19QSUNfSU5GT19CTE9DSywgKlBCQ19QSUNfSU5GT19CTE9DSzsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiAgICBQcm9jT3V0IEluZm8JCQkJCSoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIE9wdGlvbmFsIGZsYWdzIGZvciBQcm9jT3V0IEludGVyZmFjZS4qLworZW51bSBfUE9VVF9PUFRJT05BTF9JTl9GTEFHU197CisJLyogRmxhZ3MgZnJvbSBBcHAgdG8gRGV2aWNlICovCisJQkNfUE9VVF9GTEFHU19ZVjEyCSAgPSAweDAxLAkvKiBDb3B5IERhdGEgaW4gWVYxMiBmb3JtYXQgKi8KKwlCQ19QT1VUX0ZMQUdTX1NUUklERQkgID0gMHgwMiwJLyogU3RyaWRlIHNpemUgaXMgdmFsaWQuICovCisJQkNfUE9VVF9GTEFHU19TSVpFCSAgPSAweDA0LAkvKiBUYWtlIHNpemUgaW5mb3JtYXRpb24gZnJvbSBBcHBsaWNhdGlvbiAqLworCUJDX1BPVVRfRkxBR1NfSU5URVJMQUNFRCAgPSAweDA4LAkvKiBjb3B5IG9ubHkgaGFsZiB0aGUgYnl0ZXMgKi8KKwlCQ19QT1VUX0ZMQUdTX0lOVEVSTEVBVkVEID0gMHgxMCwJLyogaW50ZXJsZWF2ZWQgZnJhbWUgKi8KKworCS8qIEZsYWdzIGZyb20gRGV2aWNlIHRvIEFQUCAqLworCUJDX1BPVVRfRkxBR1NfRk1UX0NIQU5HRSAgPSAweDEwMDAwLAkvKiBEYXRhIGlzIG5vdCBWQUxJRCB3aGVuIHRoaXMgZmxhZyBpcyBzZXQgKi8KKwlCQ19QT1VUX0ZMQUdTX1BJQl9WQUxJRAkgID0gMHgyMDAwMCwJLyogUElCIEluZm9ybWF0aW9uIHZhbGlkICovCisJQkNfUE9VVF9GTEFHU19FTkNSWVBURUQJICA9IDB4NDAwMDAsCS8qIERhdGEgaXMgZW5jcnlwdGVkLiAqLworCUJDX1BPVVRfRkxBR1NfRkxEX0JPVAkgID0gMHg4MDAwMCwJLyogQm90dG9tIEZpZWxkIGRhdGEgKi8KK307CisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8IGRlZmluZWQoX19MSU5VWF9VU0VSX18pCit0eXBlZGVmIEJDX1NUQVRVUygqZHRzX3BvdXRfY2FsbGJhY2spKHZvaWQgICpzaG5kLCB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LCB1aW50MzJfdCBzdHJpZGUsIHZvaWQgKnBPdXQpOworI2Vsc2UKK3R5cGVkZWYgQkNfU1RBVFVTKCpkdHNfcG91dF9jYWxsYmFjaykodm9pZCAgKnNobmQsIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsIHVpbnQzMl90IHN0cmlkZSwgc3RydWN0IF9CQ19EVFNfUFJPQ19PVVQgKnBPdXQpOworI2VuZGlmCisKKy8qIExpbmUgMjEgQ2xvc2VkIENhcHRpb24gKi8KKy8qIFVzZXIgRGF0YSAqLworI2RlZmluZSBNQVhfVURfU0laRQkJMTc5MgkvKiAxOTIwIC0gMTI4ICovCisKK3R5cGVkZWYgc3RydWN0IF9CQ19EVFNfUFJPQ19PVVQgeworCXVpbnQ4X3QJCSpZYnVmZjsJCQkvKiBDYWxsZXIgU3VwcGxpZWQgYnVmZmVyIGZvciBZIGRhdGEgKi8KKwl1aW50MzJfdAlZYnVmZlN6OwkJLyogQ2FsbGVyIFN1cHBsaWVkIFkgYnVmZmVyIHNpemUgKi8KKwl1aW50MzJfdAlZQnVmZkRvbmVTejsJCS8qIFRyYW5zZmVycmVkIFkgZGF0YXNpemUgKi8KKworCXVpbnQ4X3QJCSpVVmJ1ZmY7CQkvKiBDYWxsZXIgU3VwcGxpZWQgYnVmZmVyIGZvciBVViBkYXRhICovCisJdWludDMyX3QJVVZidWZmU3o7CQkvKiBDYWxsZXIgU3VwcGxpZWQgVVYgYnVmZmVyIHNpemUgKi8KKwl1aW50MzJfdAlVVkJ1ZmZEb25lU3o7CQkvKiBUcmFuc2ZlcnJlZCBVViBkYXRhIHNpemUgKi8KKworCXVpbnQzMl90CVN0cmlkZVN6OwkJLyogQ2FsbGVyIHN1cHBsaWVkIFN0cmlkZSBTaXplICovCisJdWludDMyX3QJUG91dEZsYWdzOwkJLyogQ2FsbCBJTiBGbGFncyAqLworCisJdWludDMyX3QJZGlzY0NudDsJCS8qIFBpY3R1cmUgZGlzY29udGludWl0eSBjb3VudCAqLworCisJQkNfUElDX0lORk9fQkxPQ0sgUGljSW5mbzsJCS8qIFBpY3R1cmUgSW5mb3JtYXRpb24gQmxvY2sgRGF0YSAqLworCisJLyogTGluZSAyMSBDbG9zZWQgQ2FwdGlvbiAqLworCS8qIFVzZXIgRGF0YSAqLworCXVpbnQzMl90CVVzZXJEYXRhU3o7CisJdWludDhfdAkJVXNlckRhdGFbTUFYX1VEX1NJWkVdOworCisJdm9pZAkJKmhuZDsKKwlkdHNfcG91dF9jYWxsYmFjayBBcHBDYWxsQmFjazsKKwl1aW50OF90CQlEcm9wRnJhbWVzOworCXVpbnQ4X3QJCWI0MjJNb2RlOwkJLyogUGljdHVyZSBvdXRwdXQgTW9kZSAqLworCXVpbnQ4X3QJCWJQaWJFbmM7CQkvKiBQSUIgZW5jcnlwdGVkICovCisJdWludDhfdAkJYlJldmVydFNjcmFtYmxlOworCit9IEJDX0RUU19QUk9DX09VVDsKKwordHlwZWRlZiBzdHJ1Y3QgX0JDX0RUU19TVEFUVVMgeworCXVpbnQ4X3QJCVJlYWR5TGlzdENvdW50OwkvKiBOdW1iZXIgb2YgZnJhbWVzIGluIHJlYWR5IGxpc3QgKHJlcG9ydGVkIGJ5IGRyaXZlcikgKi8KKwl1aW50OF90CQlGcmVlTGlzdENvdW50OwkvKiBOdW1iZXIgb2YgZnJhbWUgYnVmZmVycyBmcmVlLiAgKHJlcG9ydGVkIGJ5IGRyaXZlcikgKi8KKwl1aW50OF90CQlQb3dlclN0YXRlQ2hhbmdlOyAvKiBOdW1iZXIgb2YgYWN0aXZlIHN0YXRlIHBvd2VyIHRyYW5zaXRpb25zIChyZXBvcnRlZCBieSBkcml2ZXIpICovCisJdWludDhfdAkJcmVzZXJ2ZWRfWzFdOworCisJdWludDMyX3QJRnJhbWVzRHJvcHBlZDsJLyogTnVtYmVyIG9mIGZyYW1lcyBkcm9wcGVkLiAgKHJlcG9ydGVkIGJ5IERJTCkgKi8KKwl1aW50MzJfdAlGcmFtZXNDYXB0dXJlZDsJLyogTnVtYmVyIG9mIGZyYW1lcyBjYXB0dXJlZC4gKHJlcG9ydGVkIGJ5IERJTCkgKi8KKwl1aW50MzJfdAlGcmFtZXNSZXBlYXRlZDsJLyogTnVtYmVyIG9mIGZyYW1lcyByZXBlYXRlZC4gKHJlcG9ydGVkIGJ5IERJTCkgKi8KKworCXVpbnQzMl90CUlucHV0Q291bnQ7CS8qIFRpbWVzIGNvbXByZXNzZWQgdmlkZW8gaGFzIGJlZW4gc2VudCB0byB0aGUgSFcuCisJCQkJCSAqIGkuZS4gU3VjY2Vzc2Z1bCBEdHNQcm9jSW5wdXQoKSBjYWxscyAocmVwb3J0ZWQgYnkgRElMKSAqLworCXVpbnQ2NF90CUlucHV0VG90YWxTaXplOwkvKiBBbW91bnQgb2YgY29tcHJlc3NlZCB2aWRlbyB0aGF0IGhhcyBiZWVuIHNlbnQgdG8gdGhlIEhXLgorCQkJCQkgKiAocmVwb3J0ZWQgYnkgRElMKSAqLworCXVpbnQzMl90CUlucHV0QnVzeUNvdW50OwkvKiBUaW1lcyBjb21wcmVzc2VkIHZpZGVvIGhhcyBhdHRlbXB0ZWQgdG8gYmUgc2VudCB0byB0aGUgSFcKKwkJCQkJICogYnV0IHRoZSBpbnB1dCBGSUZPIHdhcyBmdWxsLiAocmVwb3J0ZWQgYnkgRElMKSAqLworCisJdWludDMyX3QJUElCTWlzc0NvdW50OwkvKiBBbW91bnQgb2YgdGltZXMgYSBQSUIgaXMgaW52YWxpZC4gKHJlcG9ydGVkIGJ5IERJTCkgKi8KKworCXVpbnQzMl90CWNwYkVtcHR5U2l6ZTsJLyogc3VwcG9ydGVkIG9ubHkgZm9yIEguMjY0LCBzcGVjaWZpY2FsbHkgY2hhbmdlZCBmb3IKKwkJCQkJICogQWRvYmUuIFJlcG9ydCBzaXplIG9mIENQQiBidWZmZXIgYXZhaWxhYmxlLgorCQkJCQkgKiBSZXBvcnRlZCBieSBESUwgKi8KKwl1aW50NjRfdAlOZXh0VGltZVN0YW1wOwkvKiBUaW1lU3RhbXAgb2YgdGhlIG5leHQgcGljdHVyZSB0aGF0IHdpbGwgYmUgcmV0dXJuZWQKKwkJCQkJICogYnkgYSBjYWxsIHRvIFByb2NPdXRwdXQuIEFkZGVkIGZvciBBZG9iZS4gUmVwb3J0ZWQKKwkJCQkJICogYmFjayBmcm9tIHRoZSBkcml2ZXIgKi8KKwl1aW50OF90CQlyZXNlcnZlZF9fWzE2XTsKKworfSBCQ19EVFNfU1RBVFVTOworCisjZGVmaW5lIEJDX1NXQVAzMihfdikJCQlcCisJKCgoKF92KSAmIDB4RkYwMDAwMDApPj4yNCl8CVwKKwkgICgoKF92KSAmIDB4MDBGRjAwMDApPj44KXwJXAorCSAgKCgoX3YpICYgMHgwMDAwRkYwMCk8PDgpfAlcCisJICAoKChfdikgJiAweDAwMDAwMEZGKTw8MjQpKQorCisjZGVmaW5lIFdNX0FHRU5UX1RSQVlJQ09OX0RFQ09ERVJfT1BFTgkxMDAwMQorI2RlZmluZSBXTV9BR0VOVF9UUkFZSUNPTl9ERUNPREVSX0NMT1NFCTEwMDAyCisjZGVmaW5lIFdNX0FHRU5UX1RSQVlJQ09OX0RFQ09ERVJfU1RBUlQJMTAwMDMKKyNkZWZpbmUgV01fQUdFTlRfVFJBWUlDT05fREVDT0RFUl9TVE9QCTEwMDA0CisjZGVmaW5lIFdNX0FHRU5UX1RSQVlJQ09OX0RFQ09ERVJfUlVOCTEwMDA1CisjZGVmaW5lIFdNX0FHRU5UX1RSQVlJQ09OX0RFQ09ERVJfUEFVU0UJMTAwMDYKKworCisjZW5kaWYJLyogX0JDX0RUU19ERUZTX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2JjX2R0c19nbG9iX2xueC5oIGIvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9iY19kdHNfZ2xvYl9sbnguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzEyNWUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9iY19kdHNfZ2xvYl9sbnguaApAQCAtMCwwICsxLDI5OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQoYykgMjAwNi0yMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLgorICoKKyAqICBOYW1lOiBiY19kdHNfZ2xvYl9sbnguaAorICoKKyAqICBEZXNjcmlwdGlvbjogV3JhcHBlciB0byBXaW5kb3dzIGR0c19nbG9iLmggZm9yIExpbmstTGludXggdXNhZ2UuCisgKgkJIFRoZSBpZGVhIGlzIHRvIGRlZmluZSBhZGRpdGlvbmFsIExpbnV4IHJlbGF0ZWQgZGVmcworICoJCSBpbiB0aGlzIGZpbGUgdG8gYXZvaWQgY2hhbmdlcyB0byBleGlzdGluZyBXaW5kb3dzCisgKgkJIGdsb2IgZmlsZS4KKyAqCisgKiAgQVUKKyAqCisgKiAgSElTVE9SWToKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgaGVhZGVyIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgaGVhZGVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBoZWFkZXIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfQkNfRFRTX0dMT0JfTE5YX0hfCisjZGVmaW5lIF9CQ19EVFNfR0xPQl9MTlhfSF8KKworI2lmZGVmIF9fTElOVVhfVVNFUl9fCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorCisjZGVmaW5lIERSVklGTElCX0lOVF9BUEkKKworI2VuZGlmCisKKyNpbmNsdWRlICJiY19kdHNfZGVmcy5oIgorI2luY2x1ZGUgImJjbV83MDAxMl9yZWdzLmgiCS8qIExpbmsgUmVnaXN0ZXIgZGVmcyAqLworCisjZGVmaW5lIENSWVNUQUxIRF9BUElfTkFNRQkiY3J5c3RhbGhkIgorI2RlZmluZSBDUllTVEFMSERfQVBJX0RFVl9OQU1FCSIvZGV2L2NyeXN0YWxoZCIKKworLyoKKyAqIFRoZXNlIGFyZSBTVyBzdGFjayB0dW5hYmxlIHBhcmFtZXRlcnMgc2hhcmVkCisgKiBiZXR3ZWVuIHRoZSBkcml2ZXIgYW5kIHRoZSBhcHBsaWNhdGlvbi4KKyAqLworZW51bSBfQkNfRFRTX0dMT0JBTFMgeworCUJDX01BWF9GV19DTURfQlVGRl9TWgk9IDB4NDAsCQkvKiBGVyBwYXNzdGhyb3VnaCBjbWQvcnNwIGJ1ZmZlciBzaXplICovCisJUENJX0NGR19TSVpFCQk9IDI1NiwJCS8qIFBDSSBjb25maWcgc2l6ZSBidWZmZXIgKi8KKwlCQ19JT0NUTF9EQVRBX1BPT0xfU0laRQk9IDgsCQkvKiBCQ19JT0NUTF9EQVRBIFBvb2wgc2l6ZSAqLworCUJDX0xJTktfTUFYX09QRU5TCT0gMywJCS8qIE1heGltdW0gc2ltdWx0YW5lb3VzIG9wZW5zKi8KKwlCQ19MSU5LX01BWF9TR0xTCT0gMTAyNCwJCS8qIE1heGltdW0gU0cgZWxlbWVudHMgNE0vNEsgKi8KKwlCQ19UWF9MSVNUX0NOVAkJPSAyLAkJLyogTWF4IFR4IERNQSBSaW5ncyAqLworCUJDX1JYX0xJU1RfQ05UCQk9IDgsCQkvKiBNYXggUnggRE1BIFJpbmdzKi8KKwlCQ19QUk9DX09VVFBVVF9USU1FT1VUCT0gMzAwMCwJCS8qIE1pbGxpc2Vjb25kcyAqLworCUJDX0lORklGT19USFJFU0hPTEQJPSAweDEwMDAwLAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgX0JDX0NNRF9SRUdfQUNDIHsKKwl1aW50MzJfdAkJT2Zmc2V0OworCXVpbnQzMl90CQlWYWx1ZTsKK30gQkNfQ01EX1JFR19BQ0M7CisKK3R5cGVkZWYgc3RydWN0IF9CQ19DTURfREVWX01FTSB7CisJdWludDMyX3QJCVN0YXJ0T2ZmOworCXVpbnQzMl90CQlOdW1Ed29yZHM7CisJdWludDMyX3QJCVJzcmQ7Cit9IEJDX0NNRF9ERVZfTUVNOworCisvKiBGVyBQYXNzdGhyb3VnaCBjb21tYW5kIHN0cnVjdHVyZSAqLworZW51bSBfYmNfZndfY21kX2ZsYWdzIHsKKwlCQ19GV19DTURfRkxBR1NfTk9ORQk9IDAsCisJQkNfRldfQ01EX1BJQl9RUwk9IDB4MDEsCit9OworCit0eXBlZGVmIHN0cnVjdCBfQkNfRldfQ01EIHsKKwl1aW50MzJfdAkJY21kW0JDX01BWF9GV19DTURfQlVGRl9TWl07CisJdWludDMyX3QJCXJzcFtCQ19NQVhfRldfQ01EX0JVRkZfU1pdOworCXVpbnQzMl90CQlmbGFnczsKKwl1aW50MzJfdAkJYWRkX2RhdGE7Cit9IEJDX0ZXX0NNRCwgKlBCQ19GV19DTUQ7CisKK3R5cGVkZWYgc3RydWN0IF9CQ19IV19UWVBFIHsKKwl1aW50MTZfdAkJUGNpRGV2SWQ7CisJdWludDE2X3QJCVBjaVZlbklkOworCXVpbnQ4X3QJCQlId1JldjsKKwl1aW50OF90CQkJQWxpZ25bM107Cit9IEJDX0hXX1RZUEU7CisKK3R5cGVkZWYgc3RydWN0IF9CQ19QQ0lfQ0ZHIHsKKwl1aW50MzJfdAkJU2l6ZTsKKwl1aW50MzJfdAkJT2Zmc2V0OworCXVpbnQ4X3QJCQlwY2lfY2ZnX3NwYWNlW1BDSV9DRkdfU0laRV07Cit9IEJDX1BDSV9DRkc7CisKK3R5cGVkZWYgc3RydWN0IF9CQ19WRVJTSU9OX0lORk9fIHsKKwl1aW50OF90CQkJRHJpdmVyTWFqb3I7CisJdWludDhfdAkJCURyaXZlck1pbm9yOworCXVpbnQxNl90CQlEcml2ZXJSZXZpc2lvbjsKK30gQkNfVkVSU0lPTl9JTkZPOworCit0eXBlZGVmIHN0cnVjdCBfQkNfU1RBUlRfUlhfQ0FQXyB7CisJdWludDMyX3QJCVJzcmQ7CisJdWludDMyX3QJCVN0YXJ0RGVsaXZlcnlUaHNoOworCXVpbnQzMl90CQlQYXVzZVRoc2g7CisJdWludDMyX3QJCVJlc3VtZVRoc2g7Cit9IEJDX1NUQVJUX1JYX0NBUDsKKwordHlwZWRlZiBzdHJ1Y3QgX0JDX0ZMVVNIX1JYX0NBUF8geworCXVpbnQzMl90CQlSc3JkOworCXVpbnQzMl90CQliRGlzY2FyZE9ubHk7Cit9IEJDX0ZMVVNIX1JYX0NBUDsKKwordHlwZWRlZiBzdHJ1Y3QgX0JDX0RUU19TVEFUUyB7CisJdWludDhfdAkJCWRydlJMTDsKKwl1aW50OF90CQkJZHJ2RkxMOworCXVpbnQ4X3QJCQllb3NEZXRlY3RlZDsKKwl1aW50OF90CQkJcHdyX3N0YXRlX2NoYW5nZTsKKworCS8qIFN0YXRzIGZyb20gQXBwICovCisJdWludDMyX3QJCW9wRnJhbWVEcm9wcGVkOworCXVpbnQzMl90CQlvcEZyYW1lQ2FwdHVyZWQ7CisJdWludDMyX3QJCWlwU2FtcGxlQ250OworCXVpbnQ2NF90CQlpcFRvdGFsU2l6ZTsKKwl1aW50MzJfdAkJcmVwdGRGcmFtZXM7CisJdWludDMyX3QJCXBhdXNlQ291bnQ7CisJdWludDMyX3QJCXBpYk1pc3NlczsKKwl1aW50MzJfdAkJZGlzY0NvdW50ZXI7CisKKwkvKiBTdGF0cyBmcm9tIERyaXZlciAqLworCXVpbnQzMl90CQlUeEZpZm9Cc3lDbnQ7CisJdWludDMyX3QJCWludENvdW50OworCXVpbnQzMl90CQlEcnZJZ25JbnRyQ250OworCXVpbnQzMl90CQlEcnZUb3RhbEZybURyb3BwZWQ7CisJdWludDMyX3QJCURydlRvdGFsSFdFcnJzOworCXVpbnQzMl90CQlEcnZUb3RhbFBJQkZsdXNoQ250OworCXVpbnQzMl90CQlEcnZUb3RhbEZybUNhcHR1cmVkOworCXVpbnQzMl90CQlEcnZQSUJNaXNzZXM7CisJdWludDMyX3QJCURydlBhdXNlVGltZTsKKwl1aW50MzJfdAkJRHJ2UmVwZWF0ZWRGcm1zOworCXVpbnQzMl90CQlyZXMxWzEzXTsKKworfSBCQ19EVFNfU1RBVFM7CisKK3R5cGVkZWYgc3RydWN0IF9CQ19QUk9DX0lOUFVUXyB7CisJdWludDhfdAkJCSpwRG1hQnVmZjsKKwl1aW50MzJfdAkJQnVmZlN6OworCXVpbnQ4X3QJCQlNYXBwZWQ7CisJdWludDhfdAkJCUVuY3J5cHRlZDsKKwl1aW50OF90CQkJUnNyZFsyXTsKKwl1aW50MzJfdAkJRHJhbU9mZnNldDsJLyogRm9yIGRlYnVnIHVzZSBvbmx5ICovCit9IEJDX1BST0NfSU5QVVQsICpQQkNfUFJPQ19JTlBVVDsKKwordHlwZWRlZiBzdHJ1Y3QgX0JDX0RFQ19ZVVZfQlVGRlMgeworCXVpbnQzMl90CQliNDIyTW9kZTsKKwl1aW50OF90CQkJKll1dkJ1ZmY7CisJdWludDMyX3QJCVl1dkJ1ZmZTejsKKwl1aW50MzJfdAkJVVZidWZmT2Zmc2V0OworCXVpbnQzMl90CQlZQnVmZkRvbmVTejsKKwl1aW50MzJfdAkJVVZCdWZmRG9uZVN6OworCXVpbnQzMl90CQlSZWZDbnQ7Cit9IEJDX0RFQ19ZVVZfQlVGRlM7CisKK2VudW0gX0RFQ09VVF9DT01QTEVUSU9OX0ZMQUdTeworCUNPTVBfRkxBR19OT19JTkZPCT0gMHgwMCwKKwlDT01QX0ZMQUdfRk1UX0NIQU5HRQk9IDB4MDEsCisJQ09NUF9GTEFHX1BJQl9WQUxJRAk9IDB4MDIsCisJQ09NUF9GTEFHX0RBVEFfVkFMSUQJPSAweDA0LAorCUNPTVBfRkxBR19EQVRBX0VOQwk9IDB4MDgsCisJQ09NUF9GTEFHX0RBVEFfQk9UCT0gMHgxMCwKK307CisKK3R5cGVkZWYgc3RydWN0IF9CQ19ERUNfT1VUX0JVRkZ7CisJQkNfREVDX1lVVl9CVUZGUwlPdXRQdXRCdWZmczsKKwlCQ19QSUNfSU5GT19CTE9DSwlQaWJJbmZvOworCXVpbnQzMl90CQlGbGFnczsKKwl1aW50MzJfdAkJQmFkRnJDbnQ7Cit9IEJDX0RFQ19PVVRfQlVGRjsKKwordHlwZWRlZiBzdHJ1Y3QgX0JDX05PVElGWV9NT0RFIHsKKwl1aW50MzJfdAkJTW9kZTsKKwl1aW50MzJfdAkJUnN2clszXTsKK30gQkNfTk9USUZZX01PREU7CisKK3R5cGVkZWYgc3RydWN0IF9CQ19DTE9DSyB7CisJdWludDMyX3QJCWNsazsKKwl1aW50MzJfdAkJUnN2clszXTsKK30gQkNfQ0xPQ0s7CisKK3R5cGVkZWYgc3RydWN0IF9CQ19JT0NUTF9EQVRBIHsKKwlCQ19TVEFUVVMJCVJldFN0czsKKwl1aW50MzJfdAkJSW9jdGxEYXRhU3o7CisJdWludDMyX3QJCVRpbWVvdXQ7CisJdW5pb24geworCQlCQ19DTURfUkVHX0FDQwkJcmVnQWNjOworCQlCQ19DTURfREVWX01FTQkJZGV2TWVtOworCQlCQ19GV19DTUQJCWZ3Q21kOworCQlCQ19IV19UWVBFCQlod1R5cGU7CisJCUJDX1BDSV9DRkcJCXBjaUNmZzsKKwkJQkNfVkVSU0lPTl9JTkZPCQlWZXJJbmZvOworCQlCQ19QUk9DX0lOUFVUCQlQcm9jSW5wdXQ7CisJCUJDX0RFQ19ZVVZfQlVGRlMJUnhCdWZmczsKKwkJQkNfREVDX09VVF9CVUZGCQlEZWNPdXREYXRhOworCQlCQ19TVEFSVF9SWF9DQVAJCVJ4Q2FwOworCQlCQ19GTFVTSF9SWF9DQVAJCUZsdXNoUnhDYXA7CisJCUJDX0RUU19TVEFUUwkJZHJ2U3RhdDsKKwkJQkNfTk9USUZZX01PREUJCU5vdGlmeU1vZGU7CisJCUJDX0NMT0NLCQkJY2xvY2tWYWx1ZTsKKwl9IHU7CisJc3RydWN0IF9CQ19JT0NUTF9EQVRBCSpuZXh0OworfSBCQ19JT0NUTF9EQVRBOworCit0eXBlZGVmIGVudW0gX0JDX0RSVl9DTUR7CisJRFJWX0NNRF9WRVJTSU9OID0gMCwJLyogR2V0IFNXIHZlcnNpb24gKi8KKwlEUlZfQ01EX0dFVF9IV1RZUEUsCS8qIEdldCBIVyB2ZXJzaW9uIGFuZCB0eXBlIERvemVyL1RhbmsgKi8KKwlEUlZfQ01EX1JFR19SRCwJCS8qIFJlYWQgRGV2aWNlIFJlZ2lzdGVyICovCisJRFJWX0NNRF9SRUdfV1IsCQkvKiBXcml0ZSBEZXZpY2UgUmVnaXN0ZXIgKi8KKwlEUlZfQ01EX0ZQR0FfUkQsCS8qIFJlYWQgRlBHQSBSZWdpc3RlciAqLworCURSVl9DTURfRlBHQV9XUiwJLyogV3J0aWUgRlBHQSBSZWlzdGVyICovCisJRFJWX0NNRF9NRU1fUkQsCQkvKiBSZWFkIERldmljZSBNZW1vcnkgKi8KKwlEUlZfQ01EX01FTV9XUiwJCS8qIFdyaXRlIERldmljZSBNZW1vcnkgKi8KKwlEUlZfQ01EX1JEX1BDSV9DRkcsCS8qIFJlYWQgUENJIENvbmZpZyBTcGFjZSAqLworCURSVl9DTURfV1JfUENJX0NGRywJLyogV3JpdGUgdGhlIFBDSSBDb25maWd1cmF0aW9uIFNwYWNlKi8KKwlEUlZfQ01EX0ZXX0RPV05MT0FELAkvKiBEb3dubG9hZCBGaXJtd2FyZSAqLworCURSVl9JU1NVRV9GV19DTUQsCS8qIElzc3VlIEZXIENtZCAocGFzcyB0aHJvdWdoIG1vZGUpICovCisJRFJWX0NNRF9QUk9DX0lOUFVULAkvKiBQcm9jZXNzIElucHV0IFNhbXBsZSAqLworCURSVl9DTURfQUREX1JYQlVGRlMsCS8qIEFkZCBSeCBzaWRlIGJ1ZmZlcnMgdG8gZHJpdmVyIHBvb2wgKi8KKwlEUlZfQ01EX0ZFVENIX1JYQlVGRiwJLyogR2V0IFJ4IERNQWVkIGJ1ZmZlciAqLworCURSVl9DTURfU1RBUlRfUlhfQ0FQLAkvKiBTdGFydCBSeCBCdWZmZXIgQ2FwdHVyZSAqLworCURSVl9DTURfRkxVU0hfUlhfQ0FQLAkvKiBTdG9wIHRoZSBjYXB0dXJlIGZvciBub3cuLi53ZSB3aWxsIGVuaGFuY2UgdGhpcyBsYXRlciovCisJRFJWX0NNRF9HRVRfRFJWX1NUQVQsCS8qIEdldCBEcml2ZXIgSW50ZXJuYWwgU3RhdGlzdGljcyAqLworCURSVl9DTURfUlNUX0RSVl9TVEFULAkvKiBSZXNldCBEcml2ZXIgSW50ZXJuYWwgU3RhdGlzdGljcyAqLworCURSVl9DTURfTk9USUZZX01PREUsCS8qIE5vdGlmeSB0aGUgTW9kZSB0byBkcml2ZXIgaW4gd2hpY2ggdGhlIGFwcGxpY2F0aW9uIGlzIE9wZXJhdGluZyovCisJRFJWX0NNRF9DSEFOR0VfQ0xPQ0ssCS8qIENoYW5nZSB0aGUgY29yZSBjbG9jayB0byBlaXRoZXIgc2F2ZSBwb3dlciBvciBpbXByb3ZlIHBlcmZvcm1hbmNlICovCisKKwkvKiBNVVNUIGJlIHRoZSBsYXN0IG9uZS4uICovCisJRFJWX0NNRF9FTkQsCQkJLyogRW5kIG9mIHRoZSBMaXN0Li4gKi8KK30gQkNfRFJWX0NNRDsKKworI2RlZmluZSBCQ19JT0NfQkFTRQkJJ2InCisjZGVmaW5lIEJDX0lPQ19WT0lECQlfSU9DX05PTkUKKyNkZWZpbmUgQkNfSU9DX0lPV1IobnIsIHR5cGUpCV9JT1dSKEJDX0lPQ19CQVNFLCBuciwgdHlwZSkKKyNkZWZpbmUgQkNfSU9DVExfTUIJCUJDX0lPQ1RMX0RBVEEKKworI2RlZmluZQlCQ01fSU9DX0dFVF9WRVJTSU9OCUJDX0lPQ19JT1dSKERSVl9DTURfVkVSU0lPTiwgQkNfSU9DVExfTUIpCisjZGVmaW5lCUJDTV9JT0NfR0VUX0hXVFlQRQlCQ19JT0NfSU9XUihEUlZfQ01EX0dFVF9IV1RZUEUsIEJDX0lPQ1RMX01CKQorI2RlZmluZQlCQ01fSU9DX1JFR19SRAkJQkNfSU9DX0lPV1IoRFJWX0NNRF9SRUdfUkQsIEJDX0lPQ1RMX01CKQorI2RlZmluZQlCQ01fSU9DX1JFR19XUgkJQkNfSU9DX0lPV1IoRFJWX0NNRF9SRUdfV1IsIEJDX0lPQ1RMX01CKQorI2RlZmluZQlCQ01fSU9DX01FTV9SRAkJQkNfSU9DX0lPV1IoRFJWX0NNRF9NRU1fUkQsIEJDX0lPQ1RMX01CKQorI2RlZmluZQlCQ01fSU9DX01FTV9XUgkJQkNfSU9DX0lPV1IoRFJWX0NNRF9NRU1fV1IsIEJDX0lPQ1RMX01CKQorI2RlZmluZSBCQ01fSU9DX0ZQR0FfUkQJCUJDX0lPQ19JT1dSKERSVl9DTURfRlBHQV9SRCwgQkNfSU9DVExfTUIpCisjZGVmaW5lIEJDTV9JT0NfRlBHQV9XUgkJQkNfSU9DX0lPV1IoRFJWX0NNRF9GUEdBX1dSLCBCQ19JT0NUTF9NQikKKyNkZWZpbmUJQkNNX0lPQ19SRF9QQ0lfQ0ZHCUJDX0lPQ19JT1dSKERSVl9DTURfUkRfUENJX0NGRywgQkNfSU9DVExfTUIpCisjZGVmaW5lCUJDTV9JT0NfV1JfUENJX0NGRwlCQ19JT0NfSU9XUihEUlZfQ01EX1dSX1BDSV9DRkcsIEJDX0lPQ1RMX01CKQorI2RlZmluZSBCQ01fSU9DX1BST0NfSU5QVVQJQkNfSU9DX0lPV1IoRFJWX0NNRF9QUk9DX0lOUFVULCBCQ19JT0NUTF9NQikKKyNkZWZpbmUgQkNNX0lPQ19BRERfUlhCVUZGUwlCQ19JT0NfSU9XUihEUlZfQ01EX0FERF9SWEJVRkZTLCBCQ19JT0NUTF9NQikKKyNkZWZpbmUgQkNNX0lPQ19GRVRDSF9SWEJVRkYJQkNfSU9DX0lPV1IoRFJWX0NNRF9GRVRDSF9SWEJVRkYsIEJDX0lPQ1RMX01CKQorI2RlZmluZQlCQ01fSU9DX0ZXX0NNRAkJQkNfSU9DX0lPV1IoRFJWX0lTU1VFX0ZXX0NNRCwgQkNfSU9DVExfTUIpCisjZGVmaW5lCUJDTV9JT0NfU1RBUlRfUlhfQ0FQCUJDX0lPQ19JT1dSKERSVl9DTURfU1RBUlRfUlhfQ0FQLCBCQ19JT0NUTF9NQikKKyNkZWZpbmUgQkNNX0lPQ19GTFVTSF9SWF9DQVAJQkNfSU9DX0lPV1IoRFJWX0NNRF9GTFVTSF9SWF9DQVAsIEJDX0lPQ1RMX01CKQorI2RlZmluZSBCQ01fSU9DX0dFVF9EUlZfU1RBVAlCQ19JT0NfSU9XUihEUlZfQ01EX0dFVF9EUlZfU1RBVCwgQkNfSU9DVExfTUIpCisjZGVmaW5lIEJDTV9JT0NfUlNUX0RSVl9TVEFUCUJDX0lPQ19JT1dSKERSVl9DTURfUlNUX0RSVl9TVEFULCBCQ19JT0NUTF9NQikKKyNkZWZpbmUgQkNNX0lPQ19OT1RJRllfTU9ERQlCQ19JT0NfSU9XUihEUlZfQ01EX05PVElGWV9NT0RFLCBCQ19JT0NUTF9NQikKKyNkZWZpbmUJQkNNX0lPQ19GV19ET1dOTE9BRAlCQ19JT0NfSU9XUihEUlZfQ01EX0ZXX0RPV05MT0FELCBCQ19JT0NUTF9NQikKKyNkZWZpbmUgQkNNX0lPQ19DSEdfQ0xLCQlCQ19JT0NfSU9XUihEUlZfQ01EX0NIQU5HRV9DTE9DSywgQkNfSU9DVExfTUIpCisjZGVmaW5lCUJDTV9JT0NfRU5ECQlCQ19JT0NfVk9JRAorCisvKiBXcmFwcGVyIGZvciBtYWluIElPQ1RMIGRhdGEgKi8KK3R5cGVkZWYgc3RydWN0IF9jcnlzdGFsaGRfaW9jdGxfZGF0YSB7CisJQkNfSU9DVExfREFUQQkJdWRhdGE7CQkvKiBJT0NUTCBmcm9tIEFwcC4uKi8KKwl1aW50MzJfdAkJdV9pZDsJCS8qIERyaXZlciBzcGVjaWZpYyB1c2VyIElEICovCisJdWludDMyX3QJCWNtZDsJCS8qIENtZCBJRCBmb3IgZHJpdmVyJ3MgdXNlLiAqLworCXZvaWQJCQkqYWRkX2NkYXRhOwkvKiBBZGRpdGlvbmFsIGNvbW1hbmQgc3BlY2lmaWMgZGF0YS4uKi8KKwl1aW50MzJfdAkJYWRkX2NkYXRhX3N6OwkvKiBBZGRpdGlvbmFsIGNvbW1hbmQgc3BlY2lmaWMgZGF0YSBzaXplICovCisJc3RydWN0IF9jcnlzdGFsaGRfaW9jdGxfZGF0YSAqbmV4dDsJLyogTGlzdC9GaWZvIG1hbmFnZW1lbnQgKi8KK30gY3J5c3RhbGhkX2lvY3RsX2RhdGE7CisKKworZW51bSBfY3J5c3RhbGhkX2ttb2RfdmVyeworCWNyeXN0YWxoZF9rbW9kX21ham9yCT0gMCwKKwljcnlzdGFsaGRfa21vZF9taW5vcgk9IDksCisJY3J5c3RhbGhkX2ttb2RfcmV2CT0gMjcsCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvYmNfZHRzX3R5cGVzLmggYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2JjX2R0c190eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMGM4MTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2JjX2R0c190eXBlcy5oCkBAIC0wLDAgKzEsMTIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodChjKSAyMDA2LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24uCisgKgorICogIE5hbWU6IGJjX2R0c190eXBlcy5oCisgKgorICogIERlc2NyaXB0aW9uOiBEYXRhIHR5cGVzCisgKgorICogIEFVCisgKgorICogIEhJU1RPUlk6CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIGhlYWRlciBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIGhlYWRlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgaGVhZGVyLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0JDX0RUU19UWVBFU19IXworI2RlZmluZSBfQkNfRFRTX1RZUEVTX0hfCisKKyNpZmRlZiBfX0xJTlVYX1VTRVJfXyAgLy8gRG9uJ3QgaW5jbHVkZSB0aGVzZSBmb3IgS0VSTkVMLi4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfV0lONjQpIHx8IGRlZmluZWQoX1dJTjMyKQordHlwZWRlZiB1aW50MzJfdAkJVTMyOwordHlwZWRlZiBpbnQzMl90CQkJUzMyOwordHlwZWRlZiB1aW50MTZfdAkJVTE2OwordHlwZWRlZiBpbnQxNl90CQkJUzE2OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyCQlVODsKK3R5cGVkZWYgY2hhcgkJCVM4OworI2VuZGlmCisKKyNpZm5kZWYgUFZPSUQKK3R5cGVkZWYgdm9pZAkqUFZPSUQ7CisjZW5kaWYKKworI2lmbmRlZiBCT09MCit0eXBlZGVmIGludAlCT09MOworI2VuZGlmCisKKyNpZmRlZiBXSU4zMgorICAgIHR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NAlVNjQ7CisjZWxpZiBkZWZpbmVkKF9XSU42NCkKKyAgICB0eXBlZGVmIHVpbnQ2NF90IFU2NDsKKyNlbmRpZgorCisjaWZkZWYgX1dJTjY0CisjaWYgIShkZWZpbmVkKFBPSU5URVJfMzIpKQorI2RlZmluZSBQT0lOVEVSXzMyCV9fcHRyMzIKKyNlbmRpZgorI2Vsc2UJLyogX1dJTjMyICovCisjZGVmaW5lIFBPSU5URVJfMzIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCBkZWZpbmVkKF9fTElOVVhfVVNFUl9fKQorCisjaWZkZWYgX19MSU5VWF9VU0VSX18JLyogRG9uJ3QgaW5jbHVkZSB0aGVzZSBmb3IgS0VSTkVMICovCit0eXBlZGVmIHVpbnQzMl90CVVMT05HOwordHlwZWRlZiBpbnQzMl90CQlMT05HOwordHlwZWRlZiB2b2lkCQkqSEFORExFOworI2lmbmRlZiBWT0lECit0eXBlZGVmIHZvaWQJCVZPSUQ7CisjZW5kaWYKK3R5cGVkZWYgdm9pZAkJKkxQVk9JRDsKK3R5cGVkZWYgdWludDMyX3QJRFdPUkQ7Cit0eXBlZGVmIHVpbnQzMl90CVVJTlQzMjsKK3R5cGVkZWYgdWludDMyX3QJKkxQRFdPUkQ7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIJKlBVQ0hBUjsKKworI2lmbmRlZiBUUlVFCisJI2RlZmluZSBUUlVFCQkxCisjZW5kaWYKKworI2lmbmRlZiBGQUxTRQorCSNkZWZpbmUgRkFMU0UJCTAKKyNlbmRpZgorCisjZGVmaW5lIFRFWFQKKworI2Vsc2UKKworLyogRm9yIEtlcm5lbCB1c2FnZS4uICovCit0eXBlZGVmIGJvb2wJYmNfYm9vbF90OworI2VuZGlmCisKKyNlbHNlCisKKyNpZm5kZWYgdWludDY0X3QKK3R5cGVkZWYgc3RydWN0IF91aW50NjRfdCB7CisJdWludDMyX3QgbG93X2R3OworCXVpbnQzMl90IGhpX2R3OworfSB1aW50NjRfdDsKKyNlbmRpZgorCisjaWZuZGVmIGludDMyX3QKK3R5cGVkZWYgc2lnbmVkIGxvbmcJCWludDMyX3Q7CisjZW5kaWYKKworI2lmbmRlZiB1aW50MzJfdAordHlwZWRlZiB1bnNpZ25lZCBsb25nCXVpbnQzMl90OworI2VuZGlmCisKKyNpZm5kZWYgdWludDE2X3QKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJdWludDE2X3Q7CisjZW5kaWYKKworI2lmbmRlZiB1aW50OF90Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIJdWludDhfdDsKKyNlbmRpZgorI2VuZGlmCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2JjbV83MDAxMl9yZWdzLmggYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2JjbV83MDAxMl9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkyMmY1NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvYmNtXzcwMDEyX3JlZ3MuaApAQCAtMCwwICsxLDc1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDksIEJyb2FkY29tIENvcnBvcmF0aW9uLgorICoKKyAqICBOYW1lOiBiY21fNzAwMTJfcmVncy5oCisgKgorICogIERlc2NyaXB0aW9uOiBCQ003MDAxMiByZWdpc3RlcnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgaGVhZGVyIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgaGVhZGVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBoZWFkZXIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIE1BQ0ZJTEVfSF9fCisjZGVmaW5lIE1BQ0ZJTEVfSF9fCisKKy8qKgorICogbSA9IG1lbW9yeSwgYyA9IGNvcmUsIHIgPSByZWdpc3RlciwgZiA9IGZpZWxkLCBkID0gZGF0YS4KKyAqLworI2lmICFkZWZpbmVkKEdFVF9GSUVMRCkgJiYgIWRlZmluZWQoU0VUX0ZJRUxEKQorI2RlZmluZSBCUkNNX0FMSUdOKGMscixmKSAgIGMjI18jI3IjI18jI2YjI19BTElHTgorI2RlZmluZSBCUkNNX0JJVFMoYyxyLGYpICAgIGMjI18jI3IjI18jI2YjI19CSVRTCisjZGVmaW5lIEJSQ01fTUFTSyhjLHIsZikgICAgYyMjXyMjciMjXyMjZiMjX01BU0sKKyNkZWZpbmUgQlJDTV9TSElGVChjLHIsZikgICBjIyNfIyNyIyNfIyNmIyNfU0hJRlQKKworI2RlZmluZSBHRVRfRklFTEQobSxjLHIsZikgXAorCSgoKChtKSAmIEJSQ01fTUFTSyhjLHIsZikpID4+IEJSQ01fU0hJRlQoYyxyLGYpKSA8PCBCUkNNX0FMSUdOKGMscixmKSkKKworI2RlZmluZSBTRVRfRklFTEQobSxjLHIsZixkKSBcCisJKChtKSA9ICgoKG0pICYgfkJSQ01fTUFTSyhjLHIsZikpIHwgKCgoKGQpID4+IEJSQ01fQUxJR04oYyxyLGYpKSA8PCBcCisJIEJSQ01fU0hJRlQoYyxyLGYpKSAmIEJSQ01fTUFTSyhjLHIsZikpKSBcCisJKQorCisjZGVmaW5lIFNFVF9UWVBFX0ZJRUxEKG0sYyxyLGYsZCkgU0VUX0ZJRUxEKG0sYyxyLGYsYyMjXyMjZCkKKyNkZWZpbmUgU0VUX05BTUVfRklFTEQobSxjLHIsZixkKSBTRVRfRklFTEQobSxjLHIsZixjIyNfIyNyIyNfIyNmIyNfIyNkKQorI2RlZmluZSBTRVRfVkFMVUVfRklFTEQobSxjLHIsZixkKSBTRVRfRklFTEQobSxjLHIsZixkKQorCisjZW5kaWYgLyogR0VUICYgU0VUICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3JlIEVudW1zLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFbnVtczogQUVTX1JHUl9CUklER0VfUkVTRVRfQ1RSTAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQUVTX1JHUl9CUklER0VfUkVTRVRfQ1RSTF9ERUFTU0VSVCAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRVNfUkdSX0JSSURHRV9SRVNFVF9DVFJMX0FTU0VSVCAgICAgICAgICAgICAgICAgICAxCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFbnVtczogQ0NFX1JHUl9CUklER0VfUkVTRVRfQ1RSTAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQ0NFX1JHUl9CUklER0VfUkVTRVRfQ1RSTF9ERUFTU0VSVCAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDQ0VfUkdSX0JSSURHRV9SRVNFVF9DVFJMX0FTU0VSVCAgICAgICAgICAgICAgICAgICAxCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFbnVtczogREJVX1JHUl9CUklER0VfUkVTRVRfQ1RSTAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgREJVX1JHUl9CUklER0VfUkVTRVRfQ1RSTF9ERUFTU0VSVCAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBEQlVfUkdSX0JSSURHRV9SRVNFVF9DVFJMX0FTU0VSVCAgICAgICAgICAgICAgICAgICAxCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFbnVtczogRENJX1JHUl9CUklER0VfUkVTRVRfQ1RSTAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgRENJX1JHUl9CUklER0VfUkVTRVRfQ1RSTF9ERUFTU0VSVCAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBEQ0lfUkdSX0JSSURHRV9SRVNFVF9DVFJMX0FTU0VSVCAgICAgICAgICAgICAgICAgICAxCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFbnVtczogR0lTQl9BUkJJVEVSX0RFQVNTRVJUX0FTU0VSVAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgR0lTQl9BUkJJVEVSX0RFQVNTRVJUX0FTU0VSVF9ERUFTU0VSVCAgICAgICAgICAgICAgMAorI2RlZmluZSBHSVNCX0FSQklURVJfREVBU1NFUlRfQVNTRVJUX0FTU0VSVCAgICAgICAgICAgICAgICAxCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFbnVtczogR0lTQl9BUkJJVEVSX1VOTUFTS19NQVNLCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBHSVNCX0FSQklURVJfVU5NQVNLX01BU0tfVU5NQVNLICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdJU0JfQVJCSVRFUl9VTk1BU0tfTUFTS19NQVNLICAgICAgICAgICAgICAgICAgICAgIDEKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVudW1zOiBHSVNCX0FSQklURVJfRElTQUJMRV9FTkFCTEUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEdJU0JfQVJCSVRFUl9ESVNBQkxFX0VOQUJMRV9ESVNBQkxFICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR0lTQl9BUkJJVEVSX0RJU0FCTEVfRU5BQkxFX0VOQUJMRSAgICAgICAgICAgICAgICAgMQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRW51bXM6IEkyQ19HUl9CUklER0VfUkVTRVRfQ1RSTAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSTJDX0dSX0JSSURHRV9SRVNFVF9DVFJMX0RFQVNTRVJUICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJMkNfR1JfQlJJREdFX1JFU0VUX0NUUkxfQVNTRVJUICAgICAgICAgICAgICAgICAgICAxCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFbnVtczogTUlTQ19HUl9CUklER0VfUkVTRVRfQ1RSTAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTUlTQ19HUl9CUklER0VfUkVTRVRfQ1RSTF9ERUFTU0VSVCAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNSVNDX0dSX0JSSURHRV9SRVNFVF9DVFJMX0FTU0VSVCAgICAgICAgICAgICAgICAgICAxCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFbnVtczogT1RQX0dSX0JSSURHRV9SRVNFVF9DVFJMCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBPVFBfR1JfQlJJREdFX1JFU0VUX0NUUkxfREVBU1NFUlQgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE9UUF9HUl9CUklER0VfUkVTRVRfQ1RSTF9BU1NFUlQgICAgICAgICAgICAgICAgICAgIDEKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJDTTcwMDEyX1RHVF9UT1BfUENJRV9DRkcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFBDSUVfQ0ZHX0RFVklDRV9WRU5ET1JfSUQgICAgICAweDAwMDAwMDAwIC8qIERFVklDRV9WRU5ET1JfSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfU1RBVFVTX0NPTU1BTkQgICAgICAgIDB4MDAwMDAwMDQgLyogU1RBVFVTX0NPTU1BTkQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfUENJX0NMQVNTQ09ERV9BTkRfUkVWSVNJT05fSUQgMHgwMDAwMDAwOCAvKiBQQ0lfQ0xBU1NDT0RFX0FORF9SRVZJU0lPTl9JRCBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19CSVNUX0hFQURFUl9UWVBFX0xBVEVOQ1lfVElNRVJfQ0FDSEVfTElORV9TSVpFIDB4MDAwMDAwMGMgLyogQklTVF9IRUFERVJfVFlQRV9MQVRFTkNZX1RJTUVSX0NBQ0hFX0xJTkVfU0laRSBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19CQVNFX0FERFJFU1NfMSAgICAgICAgMHgwMDAwMDAxMCAvKiBCQVNFX0FERFJFU1NfMSBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19CQVNFX0FERFJFU1NfMiAgICAgICAgMHgwMDAwMDAxNCAvKiBCQVNFX0FERFJFU1NfMiBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19CQVNFX0FERFJFU1NfMyAgICAgICAgMHgwMDAwMDAxOCAvKiBCQVNFX0FERFJFU1NfMyBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19CQVNFX0FERFJFU1NfNCAgICAgICAgMHgwMDAwMDAxYyAvKiBCQVNFX0FERFJFU1NfNCBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19DQVJEQlVTX0NJU19QT0lOVEVSICAgMHgwMDAwMDAyOCAvKiBDQVJEQlVTX0NJU19QT0lOVEVSIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1NVQlNZU1RFTV9ERVZJQ0VfVkVORE9SX0lEIDB4MDAwMDAwMmMgLyogU1VCU1lTVEVNX0RFVklDRV9WRU5ET1JfSUQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfRVhQQU5TSU9OX1JPTV9CQVNFX0FERFJFU1MgMHgwMDAwMDAzMCAvKiBFWFBBTlNJT05fUk9NX0JBU0VfQUREUkVTUyBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19DQVBBQklMSVRJRVNfUE9JTlRFUiAgMHgwMDAwMDAzNCAvKiBDQVBBQklMSVRJRVNfUE9JTlRFUiBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19JTlRFUlJVUFQgICAgICAgICAgICAgMHgwMDAwMDAzYyAvKiBJTlRFUlJVUFQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfVlBEX0NBUEFCSUxJVElFUyAgICAgIDB4MDAwMDAwNDAgLyogVlBEX0NBUEFCSUxJVElFUyBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19WUERfREFUQSAgICAgICAgICAgICAgMHgwMDAwMDA0NCAvKiBWUERfREFUQSBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19QT1dFUl9NQU5BR0VNRU5UX0NBUEFCSUxJVFkgMHgwMDAwMDA0OCAvKiBQT1dFUl9NQU5BR0VNRU5UX0NBUEFCSUxJVFkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfUE9XRVJfTUFOQUdFTUVOVF9DT05UUk9MX1NUQVRVUyAweDAwMDAwMDRjIC8qIFBPV0VSX01BTkFHRU1FTlRfQ09OVFJPTF9TVEFUVVMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfTVNJX0NBUEFCSUxJVFlfSEVBREVSIDB4MDAwMDAwNTAgLyogTVNJX0NBUEFCSUxJVFlfSEVBREVSIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX01TSV9MT1dFUl9BRERSRVNTICAgICAweDAwMDAwMDU0IC8qIE1TSV9MT1dFUl9BRERSRVNTIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX01TSV9VUFBFUl9BRERSRVNTX1JFR0lTVEVSIDB4MDAwMDAwNTggLyogTVNJX1VQUEVSX0FERFJFU1NfUkVHSVNURVIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfTVNJX0RBVEEgICAgICAgICAgICAgIDB4MDAwMDAwNWMgLyogTVNJX0RBVEEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfQlJPQURDT01fVkVORE9SX1NQRUNJRklDX0NBUEFCSUxJVFlfSEVBREVSIDB4MDAwMDAwNjAgLyogQlJPQURDT01fVkVORE9SX1NQRUNJRklDX0NBUEFCSUxJVFlfSEVBREVSIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1JFU0VUX0NPVU5URVJTX0lOSVRJQUxfVkFMVUVTIDB4MDAwMDAwNjQgLyogUkVTRVRfQ09VTlRFUlNfSU5JVElBTF9WQUxVRVMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfTUlTQ0VMTEFORU9VU19IT1NUX0NPTlRST0wgMHgwMDAwMDA2OCAvKiBNSVNDRUxMQU5FT1VTX0hPU1RfQ09OVFJPTCBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19TUEFSRSAgICAgICAgICAgICAgICAgMHgwMDAwMDA2YyAvKiBTUEFSRSBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19QQ0lfU1RBVEUgICAgICAgICAgICAgMHgwMDAwMDA3MCAvKiBQQ0lfU1RBVEUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfQ0xPQ0tfQ09OVFJPTCAgICAgICAgIDB4MDAwMDAwNzQgLyogQ0xPQ0tfQ09OVFJPTCBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19SRUdJU1RFUl9CQVNFICAgICAgICAgMHgwMDAwMDA3OCAvKiBSRUdJU1RFUl9CQVNFIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX01FTU9SWV9CQVNFICAgICAgICAgICAweDAwMDAwMDdjIC8qIE1FTU9SWV9CQVNFIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1JFR0lTVEVSX0RBVEEgICAgICAgICAweDAwMDAwMDgwIC8qIFJFR0lTVEVSX0RBVEEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfTUVNT1JZX0RBVEEgICAgICAgICAgIDB4MDAwMDAwODQgLyogTUVNT1JZX0RBVEEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfRVhQQU5TSU9OX1JPTV9CQVJfU0laRSAweDAwMDAwMDg4IC8qIEVYUEFOU0lPTl9ST01fQkFSX1NJWkUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfRVhQQU5TSU9OX1JPTV9BRERSRVNTIDB4MDAwMDAwOGMgLyogRVhQQU5TSU9OX1JPTV9BRERSRVNTIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0VYUEFOU0lPTl9ST01fREFUQSAgICAweDAwMDAwMDkwIC8qIEVYUEFOU0lPTl9ST01fREFUQSBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19WUERfSU5URVJGQUNFICAgICAgICAgMHgwMDAwMDA5NCAvKiBWUERfSU5URVJGQUNFIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1VORElfUkVDRUlWRV9CRF9TVEFOREFSRF9QUk9EVUNFUl9SSU5HX1BST0RVQ0VSX0lOREVYX01BSUxCT1hfVVBQRVIgMHgwMDAwMDA5OCAvKiBVTkRJX1JFQ0VJVkVfQkRfU1RBTkRBUkRfUFJPRFVDRVJfUklOR19QUk9EVUNFUl9JTkRFWF9NQUlMQk9YX1VQUEVSIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1VORElfUkVDRUlWRV9CRF9TVEFOREFSRF9QUk9EVUNFUl9SSU5HX1BST0RVQ0VSX0lOREVYX01BSUxCT1hfTE9XRVIgMHgwMDAwMDA5YyAvKiBVTkRJX1JFQ0VJVkVfQkRfU1RBTkRBUkRfUFJPRFVDRVJfUklOR19QUk9EVUNFUl9JTkRFWF9NQUlMQk9YX0xPV0VSIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1VORElfUkVDRUlWRV9SRVRVUk5fUklOR19DT05TVU1FUl9JTkRFWF9VUFBFUiAweDAwMDAwMGEwIC8qIFVORElfUkVDRUlWRV9SRVRVUk5fUklOR19DT05TVU1FUl9JTkRFWF9VUFBFUiBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19VTkRJX1JFQ0VJVkVfUkVUVVJOX1JJTkdfQ09OU1VNRVJfSU5ERVhfTE9XRVIgMHgwMDAwMDBhNCAvKiBVTkRJX1JFQ0VJVkVfUkVUVVJOX1JJTkdfQ09OU1VNRVJfSU5ERVhfTE9XRVIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfVU5ESV9TRU5EX0JEX1BST0RVQ0VSX0lOREVYX01BSUxCT1hfVVBQRVIgMHgwMDAwMDBhOCAvKiBVTkRJX1NFTkRfQkRfUFJPRFVDRVJfSU5ERVhfTUFJTEJPWF9VUFBFUiBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19VTkRJX1NFTkRfQkRfUFJPRFVDRVJfSU5ERVhfTUFJTEJPWF9MT1dFUiAweDAwMDAwMGFjIC8qIFVORElfU0VORF9CRF9QUk9EVUNFUl9JTkRFWF9NQUlMQk9YX0xPV0VSIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0lOVF9NQUlMQk9YX1VQUEVSICAgICAweDAwMDAwMGIwIC8qIElOVF9NQUlMQk9YX1VQUEVSIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0lOVF9NQUlMQk9YX0xPV0VSICAgICAweDAwMDAwMGI0IC8qIElOVF9NQUlMQk9YX0xPV0VSIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1BST0RVQ1RfSURfQU5EX0FTSUNfUkVWSVNJT04gMHgwMDAwMDBiYyAvKiBQUk9EVUNUX0lEX0FORF9BU0lDX1JFVklTSU9OIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0ZVTkNUSU9OX0VWRU5UICAgICAgICAweDAwMDAwMGMwIC8qIEZVTkNUSU9OX0VWRU5UIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0ZVTkNUSU9OX0VWRU5UX01BU0sgICAweDAwMDAwMGM0IC8qIEZVTkNUSU9OX0VWRU5UX01BU0sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfRlVOQ1RJT05fUFJFU0VOVCAgICAgIDB4MDAwMDAwYzggLyogRlVOQ1RJT05fUFJFU0VOVCBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19QQ0lFX0NBUEFCSUxJVElFUyAgICAgMHgwMDAwMDBjYyAvKiBQQ0lFX0NBUEFCSUxJVElFUyBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19ERVZJQ0VfQ0FQQUJJTElUSUVTICAgMHgwMDAwMDBkMCAvKiBERVZJQ0VfQ0FQQUJJTElUSUVTIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0RFVklDRV9TVEFUVVNfQ09OVFJPTCAweDAwMDAwMGQ0IC8qIERFVklDRV9TVEFUVVNfQ09OVFJPTCBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19MSU5LX0NBUEFCSUxJVFkgICAgICAgMHgwMDAwMDBkOCAvKiBMSU5LX0NBUEFCSUxJVFkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfTElOS19TVEFUVVNfQ09OVFJPTCAgIDB4MDAwMDAwZGMgLyogTElOS19TVEFUVVNfQ09OVFJPTCBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19ERVZJQ0VfQ0FQQUJJTElUSUVTXzIgMHgwMDAwMDBmMCAvKiBERVZJQ0VfQ0FQQUJJTElUSUVTXzIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfREVWSUNFX1NUQVRVU19DT05UUk9MXzIgMHgwMDAwMDBmNCAvKiBERVZJQ0VfU1RBVFVTX0NPTlRST0xfMiBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19MSU5LX0NBUEFCSUxJVElFU18yICAgMHgwMDAwMDBmOCAvKiBMSU5LX0NBUEFCSUxJVElFU18yIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0xJTktfU1RBVFVTX0NPTlRST0xfMiAweDAwMDAwMGZjIC8qIExJTktfU1RBVFVTX0NPTlRST0xfMiBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19BRFZBTkNFRF9FUlJPUl9SRVBPUlRJTkdfRU5IQU5DRURfQ0FQQUJJTElUWV9IRUFERVIgMHgwMDAwMDEwMCAvKiBBRFZBTkNFRF9FUlJPUl9SRVBPUlRJTkdfRU5IQU5DRURfQ0FQQUJJTElUWV9IRUFERVIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfVU5DT1JSRUNUQUJMRV9FUlJPUl9TVEFUVVMgMHgwMDAwMDEwNCAvKiBVTkNPUlJFQ1RBQkxFX0VSUk9SX1NUQVRVUyBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19VTkNPUlJFQ1RBQkxFX0VSUk9SX01BU0sgMHgwMDAwMDEwOCAvKiBVTkNPUlJFQ1RBQkxFX0VSUk9SX01BU0sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfVU5DT1JSRUNUQUJMRV9FUlJPUl9TRVZFUklUWSAweDAwMDAwMTBjIC8qIFVOQ09SUkVDVEFCTEVfRVJST1JfU0VWRVJJVFkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfQ09SUkVDVEFCTEVfRVJST1JfU1RBVFVTIDB4MDAwMDAxMTAgLyogQ09SUkVDVEFCTEVfRVJST1JfU1RBVFVTIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0NPUlJFQ1RBQkxFX0VSUk9SX01BU0sgMHgwMDAwMDExNCAvKiBDT1JSRUNUQUJMRV9FUlJPUl9NQVNLIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0FEVkFOQ0VEX0VSUk9SX0NBUEFCSUxJVElFU19BTkRfQ09OVFJPTCAweDAwMDAwMTE4IC8qIEFEVkFOQ0VEX0VSUk9SX0NBUEFCSUxJVElFU19BTkRfQ09OVFJPTCBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19IRUFERVJfTE9HXzEgICAgICAgICAgMHgwMDAwMDExYyAvKiBIRUFERVJfTE9HXzEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfSEVBREVSX0xPR18yICAgICAgICAgIDB4MDAwMDAxMjAgLyogSEVBREVSX0xPR18yIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0hFQURFUl9MT0dfMyAgICAgICAgICAweDAwMDAwMTI0IC8qIEhFQURFUl9MT0dfMyBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19IRUFERVJfTE9HXzQgICAgICAgICAgMHgwMDAwMDEyOCAvKiBIRUFERVJfTE9HXzQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfVklSVFVBTF9DSEFOTkVMX0VOSEFOQ0VEX0NBUEFCSUxJVFlfSEVBREVSIDB4MDAwMDAxM2MgLyogVklSVFVBTF9DSEFOTkVMX0VOSEFOQ0VEX0NBUEFCSUxJVFlfSEVBREVSIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1BPUlRfVkNfQ0FQQUJJTElUWSAgICAweDAwMDAwMTQwIC8qIFBPUlRfVkNfQ0FQQUJJTElUWSBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19QT1JUX1ZDX0NBUEFCSUxJVFlfMiAgMHgwMDAwMDE0NCAvKiBQT1JUX1ZDX0NBUEFCSUxJVFlfMiBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19QT1JUX1ZDX1NUQVRVU19DT05UUk9MIDB4MDAwMDAxNDggLyogUE9SVF9WQ19TVEFUVVNfQ09OVFJPTCBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19WQ19SRVNPVVJDRV9DQVBBQklMSVRZIDB4MDAwMDAxNGMgLyogVkNfUkVTT1VSQ0VfQ0FQQUJJTElUWSBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19WQ19SRVNPVVJDRV9DT05UUk9MICAgMHgwMDAwMDE1MCAvKiBWQ19SRVNPVVJDRV9DT05UUk9MIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1ZDX1JFU09VUkNFX1NUQVRVUyAgICAweDAwMDAwMTU0IC8qIFZDX1JFU09VUkNFX1NUQVRVUyBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19ERVZJQ0VfU0VSSUFMX05PX0VOSEFOQ0VEX0NBUEFCSUxJVFlfSEVBREVSIDB4MDAwMDAxNjAgLyogREVWSUNFX1NFUklBTF9OT19FTkhBTkNFRF9DQVBBQklMSVRZX0hFQURFUiBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19ERVZJQ0VfU0VSSUFMX05PX0xPV0VSX0RXIDB4MDAwMDAxNjQgLyogREVWSUNFX1NFUklBTF9OT19MT1dFUl9EVyBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19ERVZJQ0VfU0VSSUFMX05PX1VQUEVSX0RXIDB4MDAwMDAxNjggLyogREVWSUNFX1NFUklBTF9OT19VUFBFUl9EVyBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19QT1dFUl9CVURHRVRJTkdfRU5IQU5DRURfQ0FQQUJJTElUWV9IRUFERVIgMHgwMDAwMDE2YyAvKiBQT1dFUl9CVURHRVRJTkdfRU5IQU5DRURfQ0FQQUJJTElUWV9IRUFERVIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfUE9XRVJfQlVER0VUSU5HX0RBVEFfU0VMRUNUIDB4MDAwMDAxNzAgLyogUE9XRVJfQlVER0VUSU5HX0RBVEFfU0VMRUNUIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1BPV0VSX0JVREdFVElOR19EQVRBICAweDAwMDAwMTc0IC8qIFBPV0VSX0JVREdFVElOR19EQVRBIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1BPV0VSX0JVREdFVElOR19DQVBBQklMSVRZIDB4MDAwMDAxNzggLyogUE9XRVJfQlVER0VUSU5HX0NBUEFCSUxJVFkgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfRklSTVdBUkVfUE9XRVJfQlVER0VUSU5HXzJfMSAweDAwMDAwMTdjIC8qIEZJUk1XQVJFX1BPV0VSX0JVREdFVElOR18yXzEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfRklSTVdBUkVfUE9XRVJfQlVER0VUSU5HXzRfMyAweDAwMDAwMTgwIC8qIEZJUk1XQVJFX1BPV0VSX0JVREdFVElOR180XzMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfRklSTVdBUkVfUE9XRVJfQlVER0VUSU5HXzZfNSAweDAwMDAwMTg0IC8qIEZJUk1XQVJFX1BPV0VSX0JVREdFVElOR182XzUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfRklSTVdBUkVfUE9XRVJfQlVER0VUSU5HXzhfNyAweDAwMDAwMTg4IC8qIEZJUk1XQVJFX1BPV0VSX0JVREdFVElOR184XzcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfUENJRV8xXzFfQURWSVNPUllfTk9OX0ZBVEFMX0VSUk9SX01BU0tJTkcgMHgwMDAwMDE4YyAvKiBQQ0lFXzFfMV9BRFZJU09SWV9OT05fRkFUQUxfRVJST1JfTUFTS0lORyBSZWdpc3RlciAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCQ003MDAxMl9UR1RfVE9QX1BDSUVfVEwKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFBDSUVfVExfVExfQ09OVFJPTCAgICAgICAgICAgICAweDAwMDAwNDAwIC8qIFRMX0NPTlRST0wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9UTF9UUkFOU0FDVElPTl9DT05GSUdVUkFUSU9OIDB4MDAwMDA0MDQgLyogVFJBTlNBQ1RJT05fQ09ORklHVVJBVElPTiBSZWdpc3RlciAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCQ003MDAxMl9UR1RfVE9QX1BDSUVfRExMCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBQQ0lFX0RMTF9EQVRBX0xJTktfQ09OVFJPTCAgICAgMHgwMDAwMDUwMCAvKiBEQVRBX0xJTktfQ09OVFJPTCBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0RMTF9EQVRBX0xJTktfU1RBVFVTICAgICAgMHgwMDAwMDUwNCAvKiBEQVRBX0xJTktfU1RBVFVTIFJlZ2lzdGVyICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJDTTcwMDEyX1RHVF9UT1BfSU5UUgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVUyAgICAgICAgICAgICAgIDB4MDAwMDA3MDAgLyogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBJTlRSX0lOVFJfU0VUICAgICAgICAgICAgICAgICAgMHgwMDAwMDcwNCAvKiBJbnRlcnJ1cHQgU2V0IFJlZ2lzdGVyICovCisjZGVmaW5lIElOVFJfSU5UUl9DTFJfUkVHICAgICAgICAgICAgICAweDAwMDAwNzA4IC8qIEludGVycnVwdCBDbGVhciBSZWdpc3RlciAqLworI2RlZmluZSBJTlRSX0lOVFJfTVNLX1NUU19SRUcgICAgICAgICAgMHgwMDAwMDcwYyAvKiBJbnRlcnJ1cHQgTWFzayBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSU5UUl9JTlRSX01TS19TRVRfUkVHICAgICAgICAgIDB4MDAwMDA3MTAgLyogSW50ZXJydXB0IE1hc2sgU2V0IFJlZ2lzdGVyICovCisjZGVmaW5lIElOVFJfSU5UUl9NU0tfQ0xSX1JFRyAgICAgICAgICAweDAwMDAwNzE0IC8qIEludGVycnVwdCBNYXNrIENsZWFyIFJlZ2lzdGVyICovCisjZGVmaW5lIElOVFJfRU9JX0NUUkwgICAgICAgICAgICAgICAgICAweDAwMDAwNzIwIC8qIEVuZCBvZiBpbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCQ003MDAxMl9NSVNDX1RPUF9NSVNDMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTUlTQzFfVFhfRklSU1RfREVTQ19MX0FERFJfTElTVDAgMHgwMDAwMGMwMCAvKiBUeCBETUEgRGVzY3JpcHRvciBMaXN0MCBGaXJzdCBEZXNjcmlwdG9yIGxvd2VyIEFkZHJlc3MgKi8KKyNkZWZpbmUgTUlTQzFfVFhfRklSU1RfREVTQ19VX0FERFJfTElTVDAgMHgwMDAwMGMwNCAvKiBUeCBETUEgRGVzY3JpcHRvciBMaXN0MCBGaXJzdCBEZXNjcmlwdG9yIFVwcGVyIEFkZHJlc3MgKi8KKyNkZWZpbmUgTUlTQzFfVFhfRklSU1RfREVTQ19MX0FERFJfTElTVDEgMHgwMDAwMGMwOCAvKiBUeCBETUEgRGVzY3JpcHRvciBMaXN0MSBGaXJzdCBEZXNjcmlwdG9yIExvd2VyIEFkZHJlc3MgKi8KKyNkZWZpbmUgTUlTQzFfVFhfRklSU1RfREVTQ19VX0FERFJfTElTVDEgMHgwMDAwMGMwYyAvKiBUeCBETUEgRGVzY3JpcHRvciBMaXN0MSBGaXJzdCBEZXNjcmlwdG9yIFVwcGVyIEFkZHJlc3MgKi8KKyNkZWZpbmUgTUlTQzFfVFhfU1dfREVTQ19MSVNUX0NUUkxfU1RTIDB4MDAwMDBjMTAgLyogVHggRE1BIFNvZnR3YXJlIERlc2NyaXB0b3IgTGlzdCBDb250cm9sIGFuZCBTdGF0dXMgKi8KKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVUyAgICAgIDB4MDAwMDBjMTggLyogVHggRE1BIEVuZ2luZSBFcnJvciBTdGF0dXMgKi8KKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0xJU1QwX0NVUl9ERVNDX0xfQUREUiAweDAwMDAwYzFjIC8qIFR4IERNQSBMaXN0MCBDdXJyZW50IERlc2NyaXB0b3IgTG93ZXIgQWRkcmVzcyAqLworI2RlZmluZSBNSVNDMV9UWF9ETUFfTElTVDBfQ1VSX0RFU0NfVV9BRERSIDB4MDAwMDBjMjAgLyogVHggRE1BIExpc3QwIEN1cnJlbnQgRGVzY3JpcHRvciBVcHBlciBBZGRyZXNzICovCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9MSVNUMF9DVVJfQllURV9DTlRfUkVNIDB4MDAwMDBjMjQgLyogVHggRE1BIExpc3QwIEN1cnJlbnQgRGVzY3JpcHRvciBVcHBlciBBZGRyZXNzICovCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9MSVNUMV9DVVJfREVTQ19MX0FERFIgMHgwMDAwMGMyOCAvKiBUeCBETUEgTGlzdDEgQ3VycmVudCBEZXNjcmlwdG9yIExvd2VyIEFkZHJlc3MgKi8KKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0xJU1QxX0NVUl9ERVNDX1VfQUREUiAweDAwMDAwYzJjIC8qIFR4IERNQSBMaXN0MSBDdXJyZW50IERlc2NyaXB0b3IgVXBwZXIgQWRkcmVzcyAqLworI2RlZmluZSBNSVNDMV9UWF9ETUFfTElTVDFfQ1VSX0JZVEVfQ05UX1JFTSAweDAwMDAwYzMwIC8qIFR4IERNQSBMaXN0MSBDdXJyZW50IERlc2NyaXB0b3IgVXBwZXIgQWRkcmVzcyAqLworI2RlZmluZSBNSVNDMV9ZX1JYX0ZJUlNUX0RFU0NfTF9BRERSX0xJU1QwIDB4MDAwMDBjMzQgLyogWSBSeCBEZXNjcmlwdG9yIExpc3QwIEZpcnN0IERlc2NyaXB0b3IgTG93ZXIgQWRkcmVzcyAqLworI2RlZmluZSBNSVNDMV9ZX1JYX0ZJUlNUX0RFU0NfVV9BRERSX0xJU1QwIDB4MDAwMDBjMzggLyogWSBSeCBEZXNjcmlwdG9yIExpc3QwIEZpcnN0IERlc2NyaXB0b3IgVXBwZXIgQWRkcmVzcyAqLworI2RlZmluZSBNSVNDMV9ZX1JYX0ZJUlNUX0RFU0NfTF9BRERSX0xJU1QxIDB4MDAwMDBjM2MgLyogWSBSeCBEZXNjcmlwdG9yIExpc3QxIEZpcnN0IERlc2NyaXB0b3IgTG93ZXIgQWRkcmVzcyAqLworI2RlZmluZSBNSVNDMV9ZX1JYX0ZJUlNUX0RFU0NfVV9BRERSX0xJU1QxIDB4MDAwMDBjNDAgLyogWSBSeCBEZXNjcmlwdG9yIExpc3QxIEZpcnN0IERlc2NyaXB0b3IgVXBwZXIgQWRkcmVzcyAqLworI2RlZmluZSBNSVNDMV9ZX1JYX1NXX0RFU0NfTElTVF9DVFJMX1NUUyAweDAwMDAwYzQ0IC8qIFkgUnggU29mdHdhcmUgRGVzY3JpcHRvciBMaXN0IENvbnRyb2wgYW5kIFN0YXR1cyAqLworI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVUyAgICAgICAgMHgwMDAwMGM0YyAvKiBZIFJ4IEVuZ2luZSBFcnJvciBTdGF0dXMgKi8KKyNkZWZpbmUgTUlTQzFfWV9SWF9MSVNUMF9DVVJfREVTQ19MX0FERFIgMHgwMDAwMGM1MCAvKiBZIFJ4IExpc3QwIEN1cnJlbnQgRGVzY3JpcHRvciBMb3dlciBBZGRyZXNzICovCisjZGVmaW5lIE1JU0MxX1lfUlhfTElTVDBfQ1VSX0RFU0NfVV9BRERSIDB4MDAwMDBjNTQgLyogWSBSeCBMaXN0MCBDdXJyZW50IERlc2NyaXB0b3IgVXBwZXIgQWRkcmVzcyAqLworI2RlZmluZSBNSVNDMV9ZX1JYX0xJU1QwX0NVUl9CWVRFX0NOVCAgMHgwMDAwMGM1OCAvKiBZIFJ4IExpc3QwIEN1cnJlbnQgRGVzY3JpcHRvciBCeXRlIENvdW50ICovCisjZGVmaW5lIE1JU0MxX1lfUlhfTElTVDFfQ1VSX0RFU0NfTF9BRERSIDB4MDAwMDBjNWMgLyogWSBSeCBMaXN0MSBDdXJyZW50IERlc2NyaXB0b3IgTG93ZXIgYWRkcmVzcyAqLworI2RlZmluZSBNSVNDMV9ZX1JYX0xJU1QxX0NVUl9ERVNDX1VfQUREUiAweDAwMDAwYzYwIC8qIFkgUnggTGlzdDEgQ3VycmVudCBEZXNjcmlwdG9yIFVwcGVyIGFkZHJlc3MgKi8KKyNkZWZpbmUgTUlTQzFfWV9SWF9MSVNUMV9DVVJfQllURV9DTlQgIDB4MDAwMDBjNjQgLyogWSBSeCBMaXN0MSBDdXJyZW50IERlc2NyaXB0b3IgQnl0ZSBDb3VudCAqLworI2RlZmluZSBNSVNDMV9VVl9SWF9GSVJTVF9ERVNDX0xfQUREUl9MSVNUMCAweDAwMDAwYzY4IC8qIFVWIFJ4IERlc2NyaXB0b3IgTGlzdDAgRmlyc3QgRGVzY3JpcHRvciBsb3dlciBBZGRyZXNzICovCisjZGVmaW5lIE1JU0MxX1VWX1JYX0ZJUlNUX0RFU0NfVV9BRERSX0xJU1QwIDB4MDAwMDBjNmMgLyogVVYgUnggRGVzY3JpcHRvciBMaXN0MCBGaXJzdCBEZXNjcmlwdG9yIFVwcGVyIEFkZHJlc3MgKi8KKyNkZWZpbmUgTUlTQzFfVVZfUlhfRklSU1RfREVTQ19MX0FERFJfTElTVDEgMHgwMDAwMGM3MCAvKiBVViBSeCBEZXNjcmlwdG9yIExpc3QxIEZpcnN0IERlc2NyaXB0b3IgTG93ZXIgQWRkcmVzcyAqLworI2RlZmluZSBNSVNDMV9VVl9SWF9GSVJTVF9ERVNDX1VfQUREUl9MSVNUMSAweDAwMDAwYzc0IC8qIFVWIFJ4IERlc2NyaXB0b3IgTGlzdDEgRmlyc3QgRGVzY3JpcHRvciBVcHBlciBBZGRyZXNzICovCisjZGVmaW5lIE1JU0MxX1VWX1JYX1NXX0RFU0NfTElTVF9DVFJMX1NUUyAweDAwMDAwYzc4IC8qIFVWIFJ4IFNvZnR3YXJlIERlc2NyaXB0b3IgTGlzdCBDb250cm9sIGFuZCBTdGF0dXMgKi8KKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTICAgICAgIDB4MDAwMDBjN2MgLyogVVYgUnggRW5naW5lIEVycm9yIFN0YXR1cyAqLworI2RlZmluZSBNSVNDMV9VVl9SWF9MSVNUMF9DVVJfREVTQ19MX0FERFIgMHgwMDAwMGM4MCAvKiBVViBSeCBMaXN0MCBDdXJyZW50IERlc2NyaXB0b3IgTG93ZXIgQWRkcmVzcyAqLworI2RlZmluZSBNSVNDMV9VVl9SWF9MSVNUMF9DVVJfREVTQ19VX0FERFIgMHgwMDAwMGM4NCAvKiBVViBSeCBMaXN0MCBDdXJyZW50IERlc2NyaXB0b3IgVXBwZXIgQWRkcmVzcyAqLworI2RlZmluZSBNSVNDMV9VVl9SWF9MSVNUMF9DVVJfQllURV9DTlQgMHgwMDAwMGM4OCAvKiBVViBSeCBMaXN0MCBDdXJyZW50IERlc2NyaXB0b3IgQnl0ZSBDb3VudCAqLworI2RlZmluZSBNSVNDMV9VVl9SWF9MSVNUMV9DVVJfREVTQ19MX0FERFIgMHgwMDAwMGM4YyAvKiBVViBSeCBMaXN0MSBDdXJyZW50IERlc2NyaXB0b3IgTG93ZXIgQWRkcmVzcyAqLworI2RlZmluZSBNSVNDMV9VVl9SWF9MSVNUMV9DVVJfREVTQ19VX0FERFIgMHgwMDAwMGM5MCAvKiBVViBSeCBMaXN0MSBDdXJyZW50IERlc2NyaXB0b3IgVXBwZXIgQWRkcmVzcyAqLworI2RlZmluZSBNSVNDMV9VVl9SWF9MSVNUMV9DVVJfQllURV9DTlQgMHgwMDAwMGM5NCAvKiBVViBSeCBMaXN0MSBDdXJyZW50IERlc2NyaXB0b3IgQnl0ZSBDb3VudCAqLworI2RlZmluZSBNSVNDMV9ETUFfREVCVUdfT1BUSU9OU19SRUcgICAgMHgwMDAwMGM5OCAvKiBETUEgRGVidWcgT3B0aW9ucyBSZWdpc3RlciAqLworI2RlZmluZSBNSVNDMV9SRUFEX0NIQU5ORUxfRVJST1JfU1RBVFVTIDB4MDAwMDBjOWMgLyogUmVhZCBDaGFubmVsIEVycm9yIFN0YXR1cyAqLworI2RlZmluZSBNSVNDMV9QQ0lFX0RNQV9DVFJMICAgICAgICAgICAgMHgwMDAwMGNhMCAvKiBQQ0lFIERNQSBDb250cm9sIFJlZ2lzdGVyICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJDTTcwMDEyX01JU0NfVE9QX01JU0MyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBNSVNDMl9HTE9CQUxfQ1RSTCAgICAgICAgICAgICAgMHgwMDAwMGQwMCAvKiBHbG9iYWwgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNSVNDMl9JTlRFUk5BTF9TVEFUVVMgICAgICAgICAgMHgwMDAwMGQwNCAvKiBJbnRlcm5hbCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlTQzJfSU5URVJOQUxfU1RBVFVTX01VWF9DVFJMIDB4MDAwMDBkMDggLyogSW50ZXJuYWwgRGVidWcgTXV4IENvbnRyb2wgKi8KKyNkZWZpbmUgTUlTQzJfREVCVUdfRklGT19MRU5HVEggICAgICAgIDB4MDAwMDBkMGMgLyogRGVidWcgRklGTyBMZW5ndGggKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQkNNNzAwMTJfTUlTQ19UT1BfTUlTQzMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIE1JU0MzX1JFU0VUX0NUUkwgICAgICAgICAgICAgICAweDAwMDAwZTAwIC8qIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlTQzNfQklTVF9DVFJMICAgICAgICAgICAgICAgIDB4MDAwMDBlMDQgLyogQklTVCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE1JU0MzX0JJU1RfU1RBVFVTICAgICAgICAgICAgICAweDAwMDAwZTA4IC8qIEJJU1QgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIE1JU0MzX1JYX0NIRUNLU1VNICAgICAgICAgICAgICAweDAwMDAwZTBjIC8qIFJlY2VpdmUgQ2hlY2tzdW0gKi8KKyNkZWZpbmUgTUlTQzNfVFhfQ0hFQ0tTVU0gICAgICAgICAgICAgIDB4MDAwMDBlMTAgLyogVHJhbnNtaXQgQ2hlY2tzdW0gKi8KKyNkZWZpbmUgTUlTQzNfRUNPX0NUUkxfQ09SRSAgICAgICAgICAgIDB4MDAwMDBlMTQgLyogRUNPIENvcmUgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNSVNDM19DU0lfVEVTVF9DVFJMICAgICAgICAgICAgMHgwMDAwMGUxOCAvKiBDU0kgVGVzdCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE1JU0MzX0hEX0RWSV9URVNUX0NUUkwgICAgICAgICAweDAwMDAwZTFjIC8qIEhEIERWSSBUZXN0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQkNNNzAwMTJfTUlTQ19UT1BfTUlTQ19QRVJTVAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTUlTQ19QRVJTVF9FQ09fQ1RSTF9QRVJTVCAgICAgIDB4MDAwMDBlODAgLyogRUNPIFBDSUUgUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNSVNDX1BFUlNUX0RFQ09ERVJfQ1RSTCAgICAgICAgMHgwMDAwMGU4NCAvKiBEZWNvZGVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlTQ19QRVJTVF9DQ0VfU1RBVFVTICAgICAgICAgIDB4MDAwMDBlODggLyogQ29uZmlnIENvcHkgRW5naW5lIFN0YXR1cyAqLworI2RlZmluZSBNSVNDX1BFUlNUX1BDSUVfREVCVUcgICAgICAgICAgMHgwMDAwMGU4YyAvKiBQQ0lFIERlYnVnIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlTQ19QRVJTVF9QQ0lFX0RFQlVHX1NUQVRVUyAgIDB4MDAwMDBlOTAgLyogUENJRSBEZWJ1ZyBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlTQ19QRVJTVF9WUkVHX0NUUkwgICAgICAgICAgIDB4MDAwMDBlOTQgLyogVm9sdGFnZSBSZWd1bGF0b3IgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNSVNDX1BFUlNUX01FTV9DVFJMICAgICAgICAgICAgMHgwMDAwMGU5OCAvKiBNZW1vcnkgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNSVNDX1BFUlNUX0NMT0NLX0NUUkwgICAgICAgICAgMHgwMDAwMGU5YyAvKiBDbG9jayBDb250cm9sIFJlZ2lzdGVyICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJDTTcwMDEyX01JU0NfVE9QX0dJU0JfQVJCSVRFUgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgR0lTQl9BUkJJVEVSX1JFVklTSU9OICAgICAgICAgIDB4MDAwMDBmMDAgLyogR0lTQiBBUkJJVEVSIFJFVklTSU9OICovCisjZGVmaW5lIEdJU0JfQVJCSVRFUl9TQ1JBVENIICAgICAgICAgICAweDAwMDAwZjA0IC8qIEdJU0IgQVJCSVRFUiBTY3JhdGNoIFJlZ2lzdGVyICovCisjZGVmaW5lIEdJU0JfQVJCSVRFUl9SRVFfTUFTSyAgICAgICAgICAweDAwMDAwZjA4IC8qIEdJU0IgQVJCSVRFUiBNYXN0ZXIgUmVxdWVzdCBNYXNrIFJlZ2lzdGVyICovCisjZGVmaW5lIEdJU0JfQVJCSVRFUl9USU1FUiAgICAgICAgICAgICAweDAwMDAwZjBjIC8qIEdJU0IgQVJCSVRFUiBUaW1lciBWYWx1ZSBSZWdpc3RlciAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCQ003MDAxMl9PVFBfVE9QX09UUAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgT1RQX0NPTkZJR19JTkZPICAgICAgICAgICAgICAgIDB4MDAwMDE0MDAgLyogT1RQIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgT1RQX0NNRCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE0MDQgLyogT1RQIENvbW1hbmQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgT1RQX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDE0MDggLyogT1RQIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBPVFBfQ09OVEVOVF9NSVNDICAgICAgICAgICAgICAgMHgwMDAwMTQwYyAvKiBDb250ZW50IDogTWlzY2VsbGFuZW91cyBSZWdpc3RlciAqLworI2RlZmluZSBPVFBfQ09OVEVOVF9BRVNfMCAgICAgICAgICAgICAgMHgwMDAwMTQxMCAvKiBDb250ZW50IDogQUVTIEtleSAwIFJlZ2lzdGVyICovCisjZGVmaW5lIE9UUF9DT05URU5UX0FFU18xICAgICAgICAgICAgICAweDAwMDAxNDE0IC8qIENvbnRlbnQgOiBBRVMgS2V5IDEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgT1RQX0NPTlRFTlRfQUVTXzIgICAgICAgICAgICAgIDB4MDAwMDE0MTggLyogQ29udGVudCA6IEFFUyBLZXkgMiBSZWdpc3RlciAqLworI2RlZmluZSBPVFBfQ09OVEVOVF9BRVNfMyAgICAgICAgICAgICAgMHgwMDAwMTQxYyAvKiBDb250ZW50IDogQUVTIEtleSAzIFJlZ2lzdGVyICovCisjZGVmaW5lIE9UUF9DT05URU5UX1NIQV8wICAgICAgICAgICAgICAweDAwMDAxNDIwIC8qIENvbnRlbnQgOiBTSEEgS2V5IDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgT1RQX0NPTlRFTlRfU0hBXzEgICAgICAgICAgICAgIDB4MDAwMDE0MjQgLyogQ29udGVudCA6IFNIQSBLZXkgMSBSZWdpc3RlciAqLworI2RlZmluZSBPVFBfQ09OVEVOVF9TSEFfMiAgICAgICAgICAgICAgMHgwMDAwMTQyOCAvKiBDb250ZW50IDogU0hBIEtleSAyIFJlZ2lzdGVyICovCisjZGVmaW5lIE9UUF9DT05URU5UX1NIQV8zICAgICAgICAgICAgICAweDAwMDAxNDJjIC8qIENvbnRlbnQgOiBTSEEgS2V5IDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgT1RQX0NPTlRFTlRfU0hBXzQgICAgICAgICAgICAgIDB4MDAwMDE0MzAgLyogQ29udGVudCA6IFNIQSBLZXkgNCBSZWdpc3RlciAqLworI2RlZmluZSBPVFBfQ09OVEVOVF9TSEFfNSAgICAgICAgICAgICAgMHgwMDAwMTQzNCAvKiBDb250ZW50IDogU0hBIEtleSA1IFJlZ2lzdGVyICovCisjZGVmaW5lIE9UUF9DT05URU5UX1NIQV82ICAgICAgICAgICAgICAweDAwMDAxNDM4IC8qIENvbnRlbnQgOiBTSEEgS2V5IDYgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgT1RQX0NPTlRFTlRfU0hBXzcgICAgICAgICAgICAgIDB4MDAwMDE0M2MgLyogQ29udGVudCA6IFNIQSBLZXkgNyBSZWdpc3RlciAqLworI2RlZmluZSBPVFBfQ09OVEVOVF9DSEVDS1NVTSAgICAgICAgICAgMHgwMDAwMTQ0MCAvKiBDb250ZW50IDogQ2hlY2tzdW0gIFJlZ2lzdGVyICovCisjZGVmaW5lIE9UUF9QUk9HX0NUUkwgICAgICAgICAgICAgICAgICAweDAwMDAxNDQ0IC8qIFByb2dyYW1taW5nIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgT1RQX1BST0dfU1RBVFVTICAgICAgICAgICAgICAgIDB4MDAwMDE0NDggLyogUHJvZ3JhbW1pbmcgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIE9UUF9QUk9HX1BVTFNFICAgICAgICAgICAgICAgICAweDAwMDAxNDRjIC8qIFByb2dyYW0gUHVsc2UgV2lkdGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgT1RQX1ZFUklGWV9QVUxTRSAgICAgICAgICAgICAgIDB4MDAwMDE0NTAgLyogVmVyaWZ5IFB1bHNlIFdpZHRoIFJlZ2lzdGVyICovCisjZGVmaW5lIE9UUF9QUk9HX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAxNDU0IC8qIFByb2dyYW0gTWFzayBSZWdpc3RlciAqLworI2RlZmluZSBPVFBfREFUQV9JTlBVVCAgICAgICAgICAgICAgICAgMHgwMDAwMTQ1OCAvKiBEYXRhIElucHV0IFJlZ2lzdGVyICovCisjZGVmaW5lIE9UUF9EQVRBX09VVFBVVCAgICAgICAgICAgICAgICAweDAwMDAxNDVjIC8qIERhdGEgT3V0cHV0IFJlZ2lzdGVyICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJDTTcwMDEyX0FFU19UT1BfQUVTCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBBRVNfQ09ORklHX0lORk8gICAgICAgICAgICAgICAgMHgwMDAwMTgwMCAvKiBBRVMgQ29uZmlndXJhdGlvbiBJbmZvcm1hdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBBRVNfQ01EICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTgwNCAvKiBBRVMgQ29tbWFuZCBSZWdpc3RlciAqLworI2RlZmluZSBBRVNfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTgwOCAvKiBBRVMgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIEFFU19FRVBST01fQ09ORklHICAgICAgICAgICAgICAweDAwMDAxODBjIC8qIEFFUyBFRVBST00gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBBRVNfRUVQUk9NX0RBVEFfMCAgICAgICAgICAgICAgMHgwMDAwMTgxMCAvKiBBRVMgRUVQUk9NIERhdGEgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBBRVNfRUVQUk9NX0RBVEFfMSAgICAgICAgICAgICAgMHgwMDAwMTgxNCAvKiBBRVMgRUVQUk9NIERhdGEgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBBRVNfRUVQUk9NX0RBVEFfMiAgICAgICAgICAgICAgMHgwMDAwMTgxOCAvKiBBRVMgRUVQUk9NIERhdGEgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBBRVNfRUVQUk9NX0RBVEFfMyAgICAgICAgICAgICAgMHgwMDAwMTgxYyAvKiBBRVMgRUVQUk9NIERhdGEgUmVnaXN0ZXIgMyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCQ003MDAxMl9EQ0lfVE9QX0RDSQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgRENJX0NNRCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFjMDAgLyogRENJIENvbW1hbmQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRENJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDFjMDQgLyogRENJIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBEQ0lfRFJBTV9CQVNFX0FERFIgICAgICAgICAgICAgMHgwMDAwMWMwOCAvKiBEUkFNIEJhc2UgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSBEQ0lfRklSTVdBUkVfQUREUiAgICAgICAgICAgICAgMHgwMDAwMWMwYyAvKiBGaXJtd2FyZSBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIERDSV9GSVJNV0FSRV9EQVRBICAgICAgICAgICAgICAweDAwMDAxYzEwIC8qIEZpcm13YXJlIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRENJX1NJR05BVFVSRV9EQVRBXzAgICAgICAgICAgIDB4MDAwMDFjMTQgLyogU2lnbmF0dXJlIERhdGEgUmVnaXN0ZXIgMCAqLworI2RlZmluZSBEQ0lfU0lHTkFUVVJFX0RBVEFfMSAgICAgICAgICAgMHgwMDAwMWMxOCAvKiBTaWduYXR1cmUgRGF0YSBSZWdpc3RlciAxICovCisjZGVmaW5lIERDSV9TSUdOQVRVUkVfREFUQV8yICAgICAgICAgICAweDAwMDAxYzFjIC8qIFNpZ25hdHVyZSBEYXRhIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgRENJX1NJR05BVFVSRV9EQVRBXzMgICAgICAgICAgIDB4MDAwMDFjMjAgLyogU2lnbmF0dXJlIERhdGEgUmVnaXN0ZXIgMyAqLworI2RlZmluZSBEQ0lfU0lHTkFUVVJFX0RBVEFfNCAgICAgICAgICAgMHgwMDAwMWMyNCAvKiBTaWduYXR1cmUgRGF0YSBSZWdpc3RlciA0ICovCisjZGVmaW5lIERDSV9TSUdOQVRVUkVfREFUQV81ICAgICAgICAgICAweDAwMDAxYzI4IC8qIFNpZ25hdHVyZSBEYXRhIFJlZ2lzdGVyIDUgKi8KKyNkZWZpbmUgRENJX1NJR05BVFVSRV9EQVRBXzYgICAgICAgICAgIDB4MDAwMDFjMmMgLyogU2lnbmF0dXJlIERhdGEgUmVnaXN0ZXIgNiAqLworI2RlZmluZSBEQ0lfU0lHTkFUVVJFX0RBVEFfNyAgICAgICAgICAgMHgwMDAwMWMzMCAvKiBTaWduYXR1cmUgRGF0YSBSZWdpc3RlciA3ICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJDTTcwMDEyX1RHVF9UT1BfSU5UUgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJTlRSIDo6IElOVFJfU1RBVFVTCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSU5UUiA6OiBJTlRSX1NUQVRVUyA6OiByZXNlcnZlZDAgWzMxOjI2XSAqLworI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX3Jlc2VydmVkMF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmMwMDAwMDAKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19yZXNlcnZlZDBfQUxJR04gICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfcmVzZXJ2ZWQwX0JJVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX3Jlc2VydmVkMF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisKKy8qIElOVFIgOjogSU5UUl9TVEFUVVMgOjogUENJRV9UR1RfQ0FfQVRUTiBbMjU6MjVdICovCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfUENJRV9UR1RfQ0FfQVRUTl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX1BDSUVfVEdUX0NBX0FUVE5fQUxJR04gICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19QQ0lFX1RHVF9DQV9BVFROX0JJVFMgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfUENJRV9UR1RfQ0FfQVRUTl9TSElGVCAgICAgICAgICAgICAgICAgICAgMjUKKworLyogSU5UUiA6OiBJTlRSX1NUQVRVUyA6OiBQQ0lFX1RHVF9VUl9BVFROIFsyNDoyNF0gKi8KKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19QQ0lFX1RHVF9VUl9BVFROX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfUENJRV9UR1RfVVJfQVRUTl9BTElHTiAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX1BDSUVfVEdUX1VSX0FUVE5fQklUUyAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19QQ0lFX1RHVF9VUl9BVFROX1NISUZUICAgICAgICAgICAgICAgICAgICAyNAorCisvKiBJTlRSIDo6IElOVFJfU1RBVFVTIDo6IHJlc2VydmVkMSBbMjM6MTRdICovCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfcmVzZXJ2ZWQxX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMGZmYzAwMAorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX3Jlc2VydmVkMV9BTElHTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19yZXNlcnZlZDFfQklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX3Jlc2VydmVkMV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0CisKKy8qIElOVFIgOjogSU5UUl9TVEFUVVMgOjogTDFfVVZfUlhfRE1BX0VSUl9JTlRSIFsxMzoxM10gKi8KKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMV9VVl9SWF9ETUFfRVJSX0lOVFJfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDFfVVZfUlhfRE1BX0VSUl9JTlRSX0FMSUdOICAgICAgICAgICAgICAgMAorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wxX1VWX1JYX0RNQV9FUlJfSU5UUl9CSVRTICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMV9VVl9SWF9ETUFfRVJSX0lOVFJfU0hJRlQgICAgICAgICAgICAgICAxMworCisvKiBJTlRSIDo6IElOVFJfU1RBVFVTIDo6IEwxX1VWX1JYX0RNQV9ET05FX0lOVFIgWzEyOjEyXSAqLworI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wxX1VWX1JYX0RNQV9ET05FX0lOVFJfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMV9VVl9SWF9ETUFfRE9ORV9JTlRSX0FMSUdOICAgICAgICAgICAgICAwCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDFfVVZfUlhfRE1BX0RPTkVfSU5UUl9CSVRTICAgICAgICAgICAgICAgMQorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wxX1VWX1JYX0RNQV9ET05FX0lOVFJfU0hJRlQgICAgICAgICAgICAgIDEyCisKKy8qIElOVFIgOjogSU5UUl9TVEFUVVMgOjogTDFfWV9SWF9ETUFfRVJSX0lOVFIgWzExOjExXSAqLworI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wxX1lfUlhfRE1BX0VSUl9JTlRSX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMV9ZX1JYX0RNQV9FUlJfSU5UUl9BTElHTiAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDFfWV9SWF9ETUFfRVJSX0lOVFJfQklUUyAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wxX1lfUlhfRE1BX0VSUl9JTlRSX1NISUZUICAgICAgICAgICAgICAgIDExCisKKy8qIElOVFIgOjogSU5UUl9TVEFUVVMgOjogTDFfWV9SWF9ETUFfRE9ORV9JTlRSIFsxMDoxMF0gKi8KKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMV9ZX1JYX0RNQV9ET05FX0lOVFJfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDFfWV9SWF9ETUFfRE9ORV9JTlRSX0FMSUdOICAgICAgICAgICAgICAgMAorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wxX1lfUlhfRE1BX0RPTkVfSU5UUl9CSVRTICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMV9ZX1JYX0RNQV9ET05FX0lOVFJfU0hJRlQgICAgICAgICAgICAgICAxMAorCisvKiBJTlRSIDo6IElOVFJfU1RBVFVTIDo6IEwxX1RYX0RNQV9FUlJfSU5UUiBbMDk6MDldICovCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDFfVFhfRE1BX0VSUl9JTlRSX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wxX1RYX0RNQV9FUlJfSU5UUl9BTElHTiAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMV9UWF9ETUFfRVJSX0lOVFJfQklUUyAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDFfVFhfRE1BX0VSUl9JTlRSX1NISUZUICAgICAgICAgICAgICAgICAgOQorCisvKiBJTlRSIDo6IElOVFJfU1RBVFVTIDo6IEwxX1RYX0RNQV9ET05FX0lOVFIgWzA4OjA4XSAqLworI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wxX1RYX0RNQV9ET05FX0lOVFJfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMV9UWF9ETUFfRE9ORV9JTlRSX0FMSUdOICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDFfVFhfRE1BX0RPTkVfSU5UUl9CSVRTICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wxX1RYX0RNQV9ET05FX0lOVFJfU0hJRlQgICAgICAgICAgICAgICAgIDgKKworLyogSU5UUiA6OiBJTlRSX1NUQVRVUyA6OiByZXNlcnZlZDIgWzA3OjA2XSAqLworI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX3Jlc2VydmVkMl9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwYzAKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19yZXNlcnZlZDJfQUxJR04gICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfcmVzZXJ2ZWQyX0JJVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX3Jlc2VydmVkMl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKworLyogSU5UUiA6OiBJTlRSX1NUQVRVUyA6OiBMMF9VVl9SWF9ETUFfRVJSX0lOVFIgWzA1OjA1XSAqLworI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wwX1VWX1JYX0RNQV9FUlJfSU5UUl9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMF9VVl9SWF9ETUFfRVJSX0lOVFJfQUxJR04gICAgICAgICAgICAgICAwCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDBfVVZfUlhfRE1BX0VSUl9JTlRSX0JJVFMgICAgICAgICAgICAgICAgMQorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wwX1VWX1JYX0RNQV9FUlJfSU5UUl9TSElGVCAgICAgICAgICAgICAgIDUKKworLyogSU5UUiA6OiBJTlRSX1NUQVRVUyA6OiBMMF9VVl9SWF9ETUFfRE9ORV9JTlRSIFswNDowNF0gKi8KKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMF9VVl9SWF9ETUFfRE9ORV9JTlRSX01BU0sgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDBfVVZfUlhfRE1BX0RPTkVfSU5UUl9BTElHTiAgICAgICAgICAgICAgMAorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wwX1VWX1JYX0RNQV9ET05FX0lOVFJfQklUUyAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMF9VVl9SWF9ETUFfRE9ORV9JTlRSX1NISUZUICAgICAgICAgICAgICA0CisKKy8qIElOVFIgOjogSU5UUl9TVEFUVVMgOjogTDBfWV9SWF9ETUFfRVJSX0lOVFIgWzAzOjAzXSAqLworI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wwX1lfUlhfRE1BX0VSUl9JTlRSX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMF9ZX1JYX0RNQV9FUlJfSU5UUl9BTElHTiAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDBfWV9SWF9ETUFfRVJSX0lOVFJfQklUUyAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wwX1lfUlhfRE1BX0VSUl9JTlRSX1NISUZUICAgICAgICAgICAgICAgIDMKKworLyogSU5UUiA6OiBJTlRSX1NUQVRVUyA6OiBMMF9ZX1JYX0RNQV9ET05FX0lOVFIgWzAyOjAyXSAqLworI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wwX1lfUlhfRE1BX0RPTkVfSU5UUl9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMF9ZX1JYX0RNQV9ET05FX0lOVFJfQUxJR04gICAgICAgICAgICAgICAwCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDBfWV9SWF9ETUFfRE9ORV9JTlRSX0JJVFMgICAgICAgICAgICAgICAgMQorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wwX1lfUlhfRE1BX0RPTkVfSU5UUl9TSElGVCAgICAgICAgICAgICAgIDIKKworLyogSU5UUiA6OiBJTlRSX1NUQVRVUyA6OiBMMF9UWF9ETUFfRVJSX0lOVFIgWzAxOjAxXSAqLworI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wwX1RYX0RNQV9FUlJfSU5UUl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMF9UWF9ETUFfRVJSX0lOVFJfQUxJR04gICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDBfVFhfRE1BX0VSUl9JTlRSX0JJVFMgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wwX1RYX0RNQV9FUlJfSU5UUl9TSElGVCAgICAgICAgICAgICAgICAgIDEKKworLyogSU5UUiA6OiBJTlRSX1NUQVRVUyA6OiBMMF9UWF9ETUFfRE9ORV9JTlRSIFswMDowMF0gKi8KKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMF9UWF9ETUFfRE9ORV9JTlRSX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDBfVFhfRE1BX0RPTkVfSU5UUl9BTElHTiAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wwX1RYX0RNQV9ET05FX0lOVFJfQklUUyAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMF9UWF9ETUFfRE9ORV9JTlRSX1NISUZUICAgICAgICAgICAgICAgICAwCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1JU0MxIDo6IFRYX1NXX0RFU0NfTElTVF9DVFJMX1NUUworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE1JU0MxIDo6IFRYX1NXX0RFU0NfTElTVF9DVFJMX1NUUyA6OiByZXNlcnZlZDAgWzMxOjA0XSAqLworI2RlZmluZSBNSVNDMV9UWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFNfcmVzZXJ2ZWQwX01BU0sgICAgICAgICAgICAgIDB4ZmZmZmZmZjAKKyNkZWZpbmUgTUlTQzFfVFhfU1dfREVTQ19MSVNUX0NUUkxfU1RTX3Jlc2VydmVkMF9BTElHTiAgICAgICAgICAgICAwCisjZGVmaW5lIE1JU0MxX1RYX1NXX0RFU0NfTElTVF9DVFJMX1NUU19yZXNlcnZlZDBfQklUUyAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgTUlTQzFfVFhfU1dfREVTQ19MSVNUX0NUUkxfU1RTX3Jlc2VydmVkMF9TSElGVCAgICAgICAgICAgICA0CisKKy8qIE1JU0MxIDo6IFRYX1NXX0RFU0NfTElTVF9DVFJMX1NUUyA6OiBETUFfREFUQV9TRVJWX1BUUiBbMDM6MDNdICovCisjZGVmaW5lIE1JU0MxX1RYX1NXX0RFU0NfTElTVF9DVFJMX1NUU19ETUFfREFUQV9TRVJWX1BUUl9NQVNLICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBNSVNDMV9UWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFNfRE1BX0RBVEFfU0VSVl9QVFJfQUxJR04gICAgIDAKKyNkZWZpbmUgTUlTQzFfVFhfU1dfREVTQ19MSVNUX0NUUkxfU1RTX0RNQV9EQVRBX1NFUlZfUFRSX0JJVFMgICAgICAxCisjZGVmaW5lIE1JU0MxX1RYX1NXX0RFU0NfTElTVF9DVFJMX1NUU19ETUFfREFUQV9TRVJWX1BUUl9TSElGVCAgICAgMworCisvKiBNSVNDMSA6OiBUWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFMgOjogREVTQ19TRVJWX1BUUiBbMDI6MDJdICovCisjZGVmaW5lIE1JU0MxX1RYX1NXX0RFU0NfTElTVF9DVFJMX1NUU19ERVNDX1NFUlZfUFRSX01BU0sgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBNSVNDMV9UWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFNfREVTQ19TRVJWX1BUUl9BTElHTiAgICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfVFhfU1dfREVTQ19MSVNUX0NUUkxfU1RTX0RFU0NfU0VSVl9QVFJfQklUUyAgICAgICAgICAxCisjZGVmaW5lIE1JU0MxX1RYX1NXX0RFU0NfTElTVF9DVFJMX1NUU19ERVNDX1NFUlZfUFRSX1NISUZUICAgICAgICAgMgorCisvKiBNSVNDMSA6OiBUWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFMgOjogVFhfRE1BX0hBTFRfT05fRVJST1IgWzAxOjAxXSAqLworI2RlZmluZSBNSVNDMV9UWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFNfVFhfRE1BX0hBTFRfT05fRVJST1JfTUFTSyAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTUlTQzFfVFhfU1dfREVTQ19MSVNUX0NUUkxfU1RTX1RYX0RNQV9IQUxUX09OX0VSUk9SX0FMSUdOICAwCisjZGVmaW5lIE1JU0MxX1RYX1NXX0RFU0NfTElTVF9DVFJMX1NUU19UWF9ETUFfSEFMVF9PTl9FUlJPUl9CSVRTICAgMQorI2RlZmluZSBNSVNDMV9UWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFNfVFhfRE1BX0hBTFRfT05fRVJST1JfU0hJRlQgIDEKKworLyogTUlTQzEgOjogVFhfU1dfREVTQ19MSVNUX0NUUkxfU1RTIDo6IFRYX0RNQV9SVU5fU1RPUCBbMDA6MDBdICovCisjZGVmaW5lIE1JU0MxX1RYX1NXX0RFU0NfTElTVF9DVFJMX1NUU19UWF9ETUFfUlVOX1NUT1BfTUFTSyAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNSVNDMV9UWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFNfVFhfRE1BX1JVTl9TVE9QX0FMSUdOICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfVFhfU1dfREVTQ19MSVNUX0NUUkxfU1RTX1RYX0RNQV9SVU5fU1RPUF9CSVRTICAgICAgICAxCisjZGVmaW5lIE1JU0MxX1RYX1NXX0RFU0NfTElTVF9DVFJMX1NUU19UWF9ETUFfUlVOX1NUT1BfU0hJRlQgICAgICAgMAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNSVNDMSA6OiBUWF9ETUFfRVJST1JfU1RBVFVTCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTUlTQzEgOjogVFhfRE1BX0VSUk9SX1NUQVRVUyA6OiByZXNlcnZlZDAgWzMxOjEwXSAqLworI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX3Jlc2VydmVkMF9NQVNLICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZjMDAKKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19yZXNlcnZlZDBfQUxJR04gICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQwX0JJVFMgICAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19yZXNlcnZlZDBfU0hJRlQgICAgICAgICAgICAgICAgICAxMAorCisvKiBNSVNDMSA6OiBUWF9ETUFfRVJST1JfU1RBVFVTIDo6IFRYX0wxX0RFU0NfVFhfQUJPUlRfRVJST1JTIFswOTowOV0gKi8KKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19UWF9MMV9ERVNDX1RYX0FCT1JUX0VSUk9SU19NQVNLICAweDAwMDAwMjAwCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfVFhfTDFfREVTQ19UWF9BQk9SVF9FUlJPUlNfQUxJR04gMAorI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wxX0RFU0NfVFhfQUJPUlRfRVJST1JTX0JJVFMgIDEKKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19UWF9MMV9ERVNDX1RYX0FCT1JUX0VSUk9SU19TSElGVCA5CisKKy8qIE1JU0MxIDo6IFRYX0RNQV9FUlJPUl9TVEFUVVMgOjogcmVzZXJ2ZWQxIFswODowOF0gKi8KKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19yZXNlcnZlZDFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQxX0FMSUdOICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX3Jlc2VydmVkMV9CSVRTICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19yZXNlcnZlZDFfU0hJRlQgICAgICAgICAgICAgICAgICA4CisKKy8qIE1JU0MxIDo6IFRYX0RNQV9FUlJPUl9TVEFUVVMgOjogVFhfTDBfREVTQ19UWF9BQk9SVF9FUlJPUlMgWzA3OjA3XSAqLworI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wwX0RFU0NfVFhfQUJPUlRfRVJST1JTX01BU0sgIDB4MDAwMDAwODAKKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19UWF9MMF9ERVNDX1RYX0FCT1JUX0VSUk9SU19BTElHTiAwCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfVFhfTDBfREVTQ19UWF9BQk9SVF9FUlJPUlNfQklUUyAgMQorI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wwX0RFU0NfVFhfQUJPUlRfRVJST1JTX1NISUZUIDcKKworLyogTUlTQzEgOjogVFhfRE1BX0VSUk9SX1NUQVRVUyA6OiByZXNlcnZlZDIgWzA2OjA2XSAqLworI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX3Jlc2VydmVkMl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19yZXNlcnZlZDJfQUxJR04gICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQyX0JJVFMgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX3Jlc2VydmVkMl9TSElGVCAgICAgICAgICAgICAgICAgIDYKKworLyogTUlTQzEgOjogVFhfRE1BX0VSUk9SX1NUQVRVUyA6OiBUWF9MMV9ETUFfREFUQV9UWF9BQk9SVF9FUlJPUlMgWzA1OjA1XSAqLworI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wxX0RNQV9EQVRBX1RYX0FCT1JUX0VSUk9SU19NQVNLIDB4MDAwMDAwMjAKKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19UWF9MMV9ETUFfREFUQV9UWF9BQk9SVF9FUlJPUlNfQUxJR04gMAorI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wxX0RNQV9EQVRBX1RYX0FCT1JUX0VSUk9SU19CSVRTIDEKKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19UWF9MMV9ETUFfREFUQV9UWF9BQk9SVF9FUlJPUlNfU0hJRlQgNQorCisvKiBNSVNDMSA6OiBUWF9ETUFfRVJST1JfU1RBVFVTIDo6IFRYX0wxX0ZJRk9fRlVMTF9FUlJPUlMgWzA0OjA0XSAqLworI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wxX0ZJRk9fRlVMTF9FUlJPUlNfTUFTSyAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19UWF9MMV9GSUZPX0ZVTExfRVJST1JTX0FMSUdOICAgICAwCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfVFhfTDFfRklGT19GVUxMX0VSUk9SU19CSVRTICAgICAgMQorI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wxX0ZJRk9fRlVMTF9FUlJPUlNfU0hJRlQgICAgIDQKKworLyogTUlTQzEgOjogVFhfRE1BX0VSUk9SX1NUQVRVUyA6OiByZXNlcnZlZDMgWzAzOjAzXSAqLworI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX3Jlc2VydmVkM19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19yZXNlcnZlZDNfQUxJR04gICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQzX0JJVFMgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX3Jlc2VydmVkM19TSElGVCAgICAgICAgICAgICAgICAgIDMKKworLyogTUlTQzEgOjogVFhfRE1BX0VSUk9SX1NUQVRVUyA6OiBUWF9MMF9ETUFfREFUQV9UWF9BQk9SVF9FUlJPUlMgWzAyOjAyXSAqLworI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wwX0RNQV9EQVRBX1RYX0FCT1JUX0VSUk9SU19NQVNLIDB4MDAwMDAwMDQKKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19UWF9MMF9ETUFfREFUQV9UWF9BQk9SVF9FUlJPUlNfQUxJR04gMAorI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wwX0RNQV9EQVRBX1RYX0FCT1JUX0VSUk9SU19CSVRTIDEKKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19UWF9MMF9ETUFfREFUQV9UWF9BQk9SVF9FUlJPUlNfU0hJRlQgMgorCisvKiBNSVNDMSA6OiBUWF9ETUFfRVJST1JfU1RBVFVTIDo6IFRYX0wwX0ZJRk9fRlVMTF9FUlJPUlMgWzAxOjAxXSAqLworI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wwX0ZJRk9fRlVMTF9FUlJPUlNfTUFTSyAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19UWF9MMF9GSUZPX0ZVTExfRVJST1JTX0FMSUdOICAgICAwCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfVFhfTDBfRklGT19GVUxMX0VSUk9SU19CSVRTICAgICAgMQorI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wwX0ZJRk9fRlVMTF9FUlJPUlNfU0hJRlQgICAgIDEKKworLyogTUlTQzEgOjogVFhfRE1BX0VSUk9SX1NUQVRVUyA6OiByZXNlcnZlZDQgWzAwOjAwXSAqLworI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX3Jlc2VydmVkNF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19yZXNlcnZlZDRfQUxJR04gICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQ0X0JJVFMgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX3Jlc2VydmVkNF9TSElGVCAgICAgICAgICAgICAgICAgIDAKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTUlTQzEgOjogWV9SWF9FUlJPUl9TVEFUVVMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBNSVNDMSA6OiBZX1JYX0VSUk9SX1NUQVRVUyA6OiByZXNlcnZlZDAgWzMxOjE0XSAqLworI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDBfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmMwMDAKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQwX0FMSUdOICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkMF9CSVRTICAgICAgICAgICAgICAgICAgICAgMTgKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQwX1NISUZUICAgICAgICAgICAgICAgICAgICAxNAorCisvKiBNSVNDMSA6OiBZX1JYX0VSUk9SX1NUQVRVUyA6OiBSWF9MMV9VTkRFUlJVTl9FUlJPUiBbMTM6MTNdICovCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wxX1VOREVSUlVOX0VSUk9SX01BU0sgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9VTkRFUlJVTl9FUlJPUl9BTElHTiAgICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfVU5ERVJSVU5fRVJST1JfQklUUyAgICAgICAgICAxCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wxX1VOREVSUlVOX0VSUk9SX1NISUZUICAgICAgICAgMTMKKworLyogTUlTQzEgOjogWV9SWF9FUlJPUl9TVEFUVVMgOjogUlhfTDFfT1ZFUlJVTl9FUlJPUiBbMTI6MTJdICovCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wxX09WRVJSVU5fRVJST1JfTUFTSyAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9PVkVSUlVOX0VSUk9SX0FMSUdOICAgICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfT1ZFUlJVTl9FUlJPUl9CSVRTICAgICAgICAgICAxCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wxX09WRVJSVU5fRVJST1JfU0hJRlQgICAgICAgICAgMTIKKworLyogTUlTQzEgOjogWV9SWF9FUlJPUl9TVEFUVVMgOjogUlhfTDBfVU5ERVJSVU5fRVJST1IgWzExOjExXSAqLworI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9VTkRFUlJVTl9FUlJPUl9NQVNLICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfVU5ERVJSVU5fRVJST1JfQUxJR04gICAgICAgICAwCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wwX1VOREVSUlVOX0VSUk9SX0JJVFMgICAgICAgICAgMQorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9VTkRFUlJVTl9FUlJPUl9TSElGVCAgICAgICAgIDExCisKKy8qIE1JU0MxIDo6IFlfUlhfRVJST1JfU1RBVFVTIDo6IFJYX0wwX09WRVJSVU5fRVJST1IgWzEwOjEwXSAqLworI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9PVkVSUlVOX0VSUk9SX01BU0sgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfT1ZFUlJVTl9FUlJPUl9BTElHTiAgICAgICAgICAwCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wwX09WRVJSVU5fRVJST1JfQklUUyAgICAgICAgICAgMQorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9PVkVSUlVOX0VSUk9SX1NISUZUICAgICAgICAgIDEwCisKKy8qIE1JU0MxIDo6IFlfUlhfRVJST1JfU1RBVFVTIDo6IFJYX0wxX0RFU0NfVFhfQUJPUlRfRVJST1JTIFswOTowOV0gKi8KKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfREVTQ19UWF9BQk9SVF9FUlJPUlNfTUFTSyAgICAweDAwMDAwMjAwCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wxX0RFU0NfVFhfQUJPUlRfRVJST1JTX0FMSUdOICAgMAorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9ERVNDX1RYX0FCT1JUX0VSUk9SU19CSVRTICAgIDEKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfREVTQ19UWF9BQk9SVF9FUlJPUlNfU0hJRlQgICA5CisKKy8qIE1JU0MxIDo6IFlfUlhfRVJST1JfU1RBVFVTIDo6IHJlc2VydmVkMSBbMDg6MDhdICovCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkMV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDFfQUxJR04gICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQxX0JJVFMgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkMV9TSElGVCAgICAgICAgICAgICAgICAgICAgOAorCisvKiBNSVNDMSA6OiBZX1JYX0VSUk9SX1NUQVRVUyA6OiBSWF9MMF9ERVNDX1RYX0FCT1JUX0VSUk9SUyBbMDc6MDddICovCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wwX0RFU0NfVFhfQUJPUlRfRVJST1JTX01BU0sgICAgMHgwMDAwMDA4MAorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9ERVNDX1RYX0FCT1JUX0VSUk9SU19BTElHTiAgIDAKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfREVTQ19UWF9BQk9SVF9FUlJPUlNfQklUUyAgICAxCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wwX0RFU0NfVFhfQUJPUlRfRVJST1JTX1NISUZUICAgNworCisvKiBNSVNDMSA6OiBZX1JYX0VSUk9SX1NUQVRVUyA6OiByZXNlcnZlZDIgWzA2OjA1XSAqLworI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDJfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQyX0FMSUdOICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkMl9CSVRTICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDJfU0hJRlQgICAgICAgICAgICAgICAgICAgIDUKKworLyogTUlTQzEgOjogWV9SWF9FUlJPUl9TVEFUVVMgOjogUlhfTDFfRklGT19GVUxMX0VSUk9SUyBbMDQ6MDRdICovCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wxX0ZJRk9fRlVMTF9FUlJPUlNfTUFTSyAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9GSUZPX0ZVTExfRVJST1JTX0FMSUdOICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfRklGT19GVUxMX0VSUk9SU19CSVRTICAgICAgICAxCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wxX0ZJRk9fRlVMTF9FUlJPUlNfU0hJRlQgICAgICAgNAorCisvKiBNSVNDMSA6OiBZX1JYX0VSUk9SX1NUQVRVUyA6OiByZXNlcnZlZDMgWzAzOjAyXSAqLworI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDNfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGMKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQzX0FMSUdOICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkM19CSVRTICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDNfU0hJRlQgICAgICAgICAgICAgICAgICAgIDIKKworLyogTUlTQzEgOjogWV9SWF9FUlJPUl9TVEFUVVMgOjogUlhfTDBfRklGT19GVUxMX0VSUk9SUyBbMDE6MDFdICovCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wwX0ZJRk9fRlVMTF9FUlJPUlNfTUFTSyAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9GSUZPX0ZVTExfRVJST1JTX0FMSUdOICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfRklGT19GVUxMX0VSUk9SU19CSVRTICAgICAgICAxCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wwX0ZJRk9fRlVMTF9FUlJPUlNfU0hJRlQgICAgICAgMQorCisvKiBNSVNDMSA6OiBZX1JYX0VSUk9SX1NUQVRVUyA6OiByZXNlcnZlZDQgWzAwOjAwXSAqLworI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDRfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQ0X0FMSUdOICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkNF9CSVRTICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDRfU0hJRlQgICAgICAgICAgICAgICAgICAgIDAKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTUlTQzEgOjogVVZfUlhfRVJST1JfU1RBVFVTCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTUlTQzEgOjogVVZfUlhfRVJST1JfU1RBVFVTIDo6IHJlc2VydmVkMCBbMzE6MTRdICovCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDBfTUFTSyAgICAgICAgICAgICAgICAgICAgMHhmZmZmYzAwMAorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQwX0FMSUdOICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkMF9CSVRTICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQwX1NISUZUICAgICAgICAgICAgICAgICAgIDE0CisKKy8qIE1JU0MxIDo6IFVWX1JYX0VSUk9SX1NUQVRVUyA6OiBSWF9MMV9VTkRFUlJVTl9FUlJPUiBbMTM6MTNdICovCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9VTkRFUlJVTl9FUlJPUl9NQVNLICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfVU5ERVJSVU5fRVJST1JfQUxJR04gICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wxX1VOREVSUlVOX0VSUk9SX0JJVFMgICAgICAgICAxCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9VTkRFUlJVTl9FUlJPUl9TSElGVCAgICAgICAgMTMKKworLyogTUlTQzEgOjogVVZfUlhfRVJST1JfU1RBVFVTIDo6IFJYX0wxX09WRVJSVU5fRVJST1IgWzEyOjEyXSAqLworI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfT1ZFUlJVTl9FUlJPUl9NQVNLICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wxX09WRVJSVU5fRVJST1JfQUxJR04gICAgICAgICAwCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9PVkVSUlVOX0VSUk9SX0JJVFMgICAgICAgICAgMQorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfT1ZFUlJVTl9FUlJPUl9TSElGVCAgICAgICAgIDEyCisKKy8qIE1JU0MxIDo6IFVWX1JYX0VSUk9SX1NUQVRVUyA6OiBSWF9MMF9VTkRFUlJVTl9FUlJPUiBbMTE6MTFdICovCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9VTkRFUlJVTl9FUlJPUl9NQVNLICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfVU5ERVJSVU5fRVJST1JfQUxJR04gICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wwX1VOREVSUlVOX0VSUk9SX0JJVFMgICAgICAgICAxCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9VTkRFUlJVTl9FUlJPUl9TSElGVCAgICAgICAgMTEKKworLyogTUlTQzEgOjogVVZfUlhfRVJST1JfU1RBVFVTIDo6IFJYX0wwX09WRVJSVU5fRVJST1IgWzEwOjEwXSAqLworI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfT1ZFUlJVTl9FUlJPUl9NQVNLICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wwX09WRVJSVU5fRVJST1JfQUxJR04gICAgICAgICAwCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9PVkVSUlVOX0VSUk9SX0JJVFMgICAgICAgICAgMQorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfT1ZFUlJVTl9FUlJPUl9TSElGVCAgICAgICAgIDEwCisKKy8qIE1JU0MxIDo6IFVWX1JYX0VSUk9SX1NUQVRVUyA6OiBSWF9MMV9ERVNDX1RYX0FCT1JUX0VSUk9SUyBbMDk6MDldICovCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9ERVNDX1RYX0FCT1JUX0VSUk9SU19NQVNLICAgMHgwMDAwMDIwMAorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfREVTQ19UWF9BQk9SVF9FUlJPUlNfQUxJR04gIDAKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wxX0RFU0NfVFhfQUJPUlRfRVJST1JTX0JJVFMgICAxCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9ERVNDX1RYX0FCT1JUX0VSUk9SU19TSElGVCAgOQorCisvKiBNSVNDMSA6OiBVVl9SWF9FUlJPUl9TVEFUVVMgOjogcmVzZXJ2ZWQxIFswODowOF0gKi8KKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkMV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDFfQUxJR04gICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQxX0JJVFMgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkMV9TSElGVCAgICAgICAgICAgICAgICAgICA4CisKKy8qIE1JU0MxIDo6IFVWX1JYX0VSUk9SX1NUQVRVUyA6OiBSWF9MMF9ERVNDX1RYX0FCT1JUX0VSUk9SUyBbMDc6MDddICovCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9ERVNDX1RYX0FCT1JUX0VSUk9SU19NQVNLICAgMHgwMDAwMDA4MAorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfREVTQ19UWF9BQk9SVF9FUlJPUlNfQUxJR04gIDAKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wwX0RFU0NfVFhfQUJPUlRfRVJST1JTX0JJVFMgICAxCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9ERVNDX1RYX0FCT1JUX0VSUk9SU19TSElGVCAgNworCisvKiBNSVNDMSA6OiBVVl9SWF9FUlJPUl9TVEFUVVMgOjogcmVzZXJ2ZWQyIFswNjowNV0gKi8KKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkMl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDYwCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDJfQUxJR04gICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQyX0JJVFMgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkMl9TSElGVCAgICAgICAgICAgICAgICAgICA1CisKKy8qIE1JU0MxIDo6IFVWX1JYX0VSUk9SX1NUQVRVUyA6OiBSWF9MMV9GSUZPX0ZVTExfRVJST1JTIFswNDowNF0gKi8KKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wxX0ZJRk9fRlVMTF9FUlJPUlNfTUFTSyAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9GSUZPX0ZVTExfRVJST1JTX0FMSUdOICAgICAgMAorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfRklGT19GVUxMX0VSUk9SU19CSVRTICAgICAgIDEKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wxX0ZJRk9fRlVMTF9FUlJPUlNfU0hJRlQgICAgICA0CisKKy8qIE1JU0MxIDo6IFVWX1JYX0VSUk9SX1NUQVRVUyA6OiByZXNlcnZlZDMgWzAzOjAyXSAqLworI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQzX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMGMKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkM19BTElHTiAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDNfQklUUyAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQzX1NISUZUICAgICAgICAgICAgICAgICAgIDIKKworLyogTUlTQzEgOjogVVZfUlhfRVJST1JfU1RBVFVTIDo6IFJYX0wwX0ZJRk9fRlVMTF9FUlJPUlMgWzAxOjAxXSAqLworI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfRklGT19GVUxMX0VSUk9SU19NQVNLICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wwX0ZJRk9fRlVMTF9FUlJPUlNfQUxJR04gICAgICAwCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9GSUZPX0ZVTExfRVJST1JTX0JJVFMgICAgICAgMQorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfRklGT19GVUxMX0VSUk9SU19TSElGVCAgICAgIDEKKworLyogTUlTQzEgOjogVVZfUlhfRVJST1JfU1RBVFVTIDo6IHJlc2VydmVkNCBbMDA6MDBdICovCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQ0X0FMSUdOICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkNF9CSVRTICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDRfU0hJRlQgICAgICAgICAgICAgICAgICAgMAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRGF0YXR5cGUgRGVmaW5pdGlvbnMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2VuZGlmIC8qICNpZm5kZWYgTUFDRklMRV9IX18gKi8KKworLyogRW5kIG9mIEZpbGUgKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfY21kcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfY21kcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MTQ1YTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9jbWRzLmMKQEAgLTAsMCArMSwxMDU4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSwgQnJvYWRjb20gQ29ycG9yYXRpb24uCisgKgorICogIE5hbWU6IGNyeXN0YWxoZF9jbWRzIC4gYworICoKKyAqICBEZXNjcmlwdGlvbjoKKyAqCQlCQ003MDAxMCBMaW51eCBkcml2ZXIgdXNlciBjb21tYW5kIGludGVyZmFjZXMuCisgKgorICogIEhJU1RPUlk6CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBjcnlzdGFsaGQgZGV2aWNlIGRyaXZlci4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGRyaXZlci4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAiY3J5c3RhbGhkX2NtZHMuaCIKKyNpbmNsdWRlICJjcnlzdGFsaGRfaHcuaCIKKworc3RhdGljIHN0cnVjdCBjcnlzdGFsaGRfdXNlciAqYmNfY3Byb2NfZ2V0X3VpZChzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4KQoreworCXN0cnVjdCBjcnlzdGFsaGRfdXNlciAqdXNlciA9IE5VTEw7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQkNfTElOS19NQVhfT1BFTlM7IGkrKykgeworCQlpZiAoIWN0eC0+dXNlcltpXS5pbl91c2UpIHsKKwkJCXVzZXIgPSAmY3R4LT51c2VyW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gdXNlcjsKK30KKworc3RhdGljIGludCBiY19jcHJvY19nZXRfdXNlcl9jb3VudChzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4KQoreworCWludCBpLCBjb3VudCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQkNfTElOS19NQVhfT1BFTlM7IGkrKykgeworCQlpZiAoY3R4LT51c2VyW2ldLmluX3VzZSkKKwkJCWNvdW50Kys7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdm9pZCBiY19jcHJvY19tYXJrX3B3cl9zdGF0ZShzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEJDX0xJTktfTUFYX09QRU5TOyBpKyspIHsKKwkJaWYgKCFjdHgtPnVzZXJbaV0uaW5fdXNlKQorCQkJY29udGludWU7CisJCWlmIChjdHgtPnVzZXJbaV0ubW9kZSA9PSBEVFNfRElBR19NT0RFIHx8CisJCSAgICBjdHgtPnVzZXJbaV0ubW9kZSA9PSBEVFNfUExBWUJBQ0tfTU9ERSkgeworCQkJY3R4LT5wd3Jfc3RhdGVfY2hhbmdlID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgQkNfU1RBVFVTIGJjX2Nwcm9jX25vdGlmeV9tb2RlKHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgsCisJCQkJICAgICAgY3J5c3RhbGhkX2lvY3RsX2RhdGEgKmlkYXRhKQoreworCWludCByYyA9IDAsIGkgPSAwOworCisJaWYgKCFjdHggfHwgIWlkYXRhKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJnISFcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJaWYgKGN0eC0+dXNlcltpZGF0YS0+dV9pZF0ubW9kZSAhPSBEVFNfTU9ERV9JTlYpIHsKKwkJQkNNTE9HX0VSUigiQ2xvc2UgdGhlIGhhbmRsZSBmaXJzdC4uXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19FUlJfVVNBR0U7CisJfQorCWlmIChpZGF0YS0+dWRhdGEudS5Ob3RpZnlNb2RlLk1vZGUgPT0gRFRTX01PTklUT1JfTU9ERSkgeworCQljdHgtPnVzZXJbaWRhdGEtPnVfaWRdLm1vZGUgPSBpZGF0YS0+dWRhdGEudS5Ob3RpZnlNb2RlLk1vZGU7CisJCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKKwl9CisJaWYgKGN0eC0+c3RhdGUgIT0gQkNfTElOS19JTlZBTElEKSB7CisJCUJDTUxPR19FUlIoIkxpbmsgaW52YWxpZCBzdGF0ZSAlZCBcbiIsIGN0eC0+c3RhdGUpOworCQlyZXR1cm4gQkNfU1RTX0VSUl9VU0FHRTsKKwl9CisJLyogQ2hlY2sgZm9yIGR1cGxpY2F0ZSBwbGF5YmFjayBzZXNzaW9ucy4uKi8KKwlmb3IgKGkgPSAwOyBpIDwgQkNfTElOS19NQVhfT1BFTlM7IGkrKykgeworCQlpZiAoY3R4LT51c2VyW2ldLm1vZGUgPT0gRFRTX0RJQUdfTU9ERSB8fAorCQkgICAgY3R4LT51c2VyW2ldLm1vZGUgPT0gRFRTX1BMQVlCQUNLX01PREUpIHsKKwkJCUJDTUxPR19FUlIoIm11bHRpcGxlIHBsYXliYWNrIHNlc3Npb25zIGFyZSBub3QgIgorCQkJCSAgICJzdXBwb3J0ZWQuLlxuIik7CisJCQlyZXR1cm4gQkNfU1RTX0VSUl9VU0FHRTsKKwkJfQorCX0KKwljdHgtPmNpbl93YWl0X2V4aXQgPSAwOworCWN0eC0+dXNlcltpZGF0YS0+dV9pZF0ubW9kZSA9IGlkYXRhLT51ZGF0YS51Lk5vdGlmeU1vZGUuTW9kZTsKKwkvKiBTZXR1cCBtbWFwIHBvb2wgZm9yIHVhZGRyIHNnbCBtYXBwaW5nLi4qLworCXJjID0gY3J5c3RhbGhkX2NyZWF0ZV9kaW9fcG9vbChjdHgtPmFkcCwgQkNfTElOS19NQVhfU0dMUyk7CisJaWYgKHJjKQorCQlyZXR1cm4gQkNfU1RTX0VSUk9SOworCisJLyogU2V0dXAgSGFyZHdhcmUgRE1BIHJpbmdzICovCisJcmV0dXJuIGNyeXN0YWxoZF9od19zZXR1cF9kbWFfcmluZ3MoJmN0eC0+aHdfY3R4KTsKK30KKworc3RhdGljIEJDX1NUQVRVUyBiY19jcHJvY19nZXRfdmVyc2lvbihzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4LAorCQkJCSAgICAgIGNyeXN0YWxoZF9pb2N0bF9kYXRhICppZGF0YSkKK3sKKworCWlmICghY3R4IHx8ICFpZGF0YSkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIEFyZyEhXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKwlpZGF0YS0+dWRhdGEudS5WZXJJbmZvLkRyaXZlck1ham9yID0gY3J5c3RhbGhkX2ttb2RfbWFqb3I7CisJaWRhdGEtPnVkYXRhLnUuVmVySW5mby5Ecml2ZXJNaW5vciA9IGNyeXN0YWxoZF9rbW9kX21pbm9yOworCWlkYXRhLT51ZGF0YS51LlZlckluZm8uRHJpdmVyUmV2aXNpb24JPSBjcnlzdGFsaGRfa21vZF9yZXY7CisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCisKK3N0YXRpYyBCQ19TVEFUVVMgYmNfY3Byb2NfZ2V0X2h3dHlwZShzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4LCBjcnlzdGFsaGRfaW9jdGxfZGF0YSAqaWRhdGEpCit7CisJaWYgKCFjdHggfHwgIWlkYXRhKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJnISFcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJY3J5c3RhbGhkX3BjaV9jZmdfcmQoY3R4LT5hZHAsIDAsIDIsCisJCQkgICAodWludDMyX3QgKikmaWRhdGEtPnVkYXRhLnUuaHdUeXBlLlBjaVZlbklkKTsKKwljcnlzdGFsaGRfcGNpX2NmZ19yZChjdHgtPmFkcCwgMiwgMiwKKwkJCSAgICh1aW50MzJfdCAqKSZpZGF0YS0+dWRhdGEudS5od1R5cGUuUGNpRGV2SWQpOworCWNyeXN0YWxoZF9wY2lfY2ZnX3JkKGN0eC0+YWRwLCA4LCAxLAorCQkJICAgKHVpbnQzMl90ICopJmlkYXRhLT51ZGF0YS51Lmh3VHlwZS5Id1Jldik7CisKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBCQ19TVEFUVVMgYmNfY3Byb2NfcmVnX3JkKHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgsCisJCQkJIGNyeXN0YWxoZF9pb2N0bF9kYXRhICppZGF0YSkKK3sKKwlpZiAoIWN0eCB8fCAhaWRhdGEpCisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwlpZGF0YS0+dWRhdGEudS5yZWdBY2MuVmFsdWUgPSBiY19kZWNfcmVnX3JkKGN0eC0+YWRwLAorCQkJCQlpZGF0YS0+dWRhdGEudS5yZWdBY2MuT2Zmc2V0KTsKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBCQ19TVEFUVVMgYmNfY3Byb2NfcmVnX3dyKHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgsCisJCQkJIGNyeXN0YWxoZF9pb2N0bF9kYXRhICppZGF0YSkKK3sKKwlpZiAoIWN0eCB8fCAhaWRhdGEpCisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKworCWJjX2RlY19yZWdfd3IoY3R4LT5hZHAsIGlkYXRhLT51ZGF0YS51LnJlZ0FjYy5PZmZzZXQsCisJCSAgICAgIGlkYXRhLT51ZGF0YS51LnJlZ0FjYy5WYWx1ZSk7CisKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBCQ19TVEFUVVMgYmNfY3Byb2NfbGlua19yZWdfcmQoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCwKKwkJCQkgICAgICBjcnlzdGFsaGRfaW9jdGxfZGF0YSAqaWRhdGEpCit7CisJaWYgKCFjdHggfHwgIWlkYXRhKQorCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisKKwlpZGF0YS0+dWRhdGEudS5yZWdBY2MuVmFsdWUgPSBjcnlzdGFsaGRfcmVnX3JkKGN0eC0+YWRwLAorCQkJCQlpZGF0YS0+dWRhdGEudS5yZWdBY2MuT2Zmc2V0KTsKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBCQ19TVEFUVVMgYmNfY3Byb2NfbGlua19yZWdfd3Ioc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCwKKwkJCQkgICAgICBjcnlzdGFsaGRfaW9jdGxfZGF0YSAqaWRhdGEpCit7CisJaWYgKCFjdHggfHwgIWlkYXRhKQorCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisKKwljcnlzdGFsaGRfcmVnX3dyKGN0eC0+YWRwLCBpZGF0YS0+dWRhdGEudS5yZWdBY2MuT2Zmc2V0LAorCQkgICAgICAgaWRhdGEtPnVkYXRhLnUucmVnQWNjLlZhbHVlKTsKKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworc3RhdGljIEJDX1NUQVRVUyBiY19jcHJvY19tZW1fcmQoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCwKKwkJCQkgY3J5c3RhbGhkX2lvY3RsX2RhdGEgKmlkYXRhKQoreworCUJDX1NUQVRVUyBzdHMgPSBCQ19TVFNfU1VDQ0VTUzsKKworCWlmICghY3R4IHx8ICFpZGF0YSB8fCAhaWRhdGEtPmFkZF9jZGF0YSkKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCisJaWYgKGlkYXRhLT51ZGF0YS51LmRldk1lbS5OdW1Ed29yZHMgPiAoaWRhdGEtPmFkZF9jZGF0YV9zeiAvIDQpKSB7CisJCUJDTUxPR19FUlIoImluc3VmZmljaWVudCBidWZmZXJcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCXN0cyA9IGNyeXN0YWxoZF9tZW1fcmQoY3R4LT5hZHAsIGlkYXRhLT51ZGF0YS51LmRldk1lbS5TdGFydE9mZiwKKwkJCSAgICAgaWRhdGEtPnVkYXRhLnUuZGV2TWVtLk51bUR3b3JkcywKKwkJCSAgICAgKHVpbnQzMl90ICopaWRhdGEtPmFkZF9jZGF0YSk7CisJcmV0dXJuIHN0czsKKworfQorCitzdGF0aWMgQkNfU1RBVFVTIGJjX2Nwcm9jX21lbV93cihzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4LAorCQkJCSBjcnlzdGFsaGRfaW9jdGxfZGF0YSAqaWRhdGEpCit7CisJQkNfU1RBVFVTIHN0cyA9IEJDX1NUU19TVUNDRVNTOworCisJaWYgKCFjdHggfHwgIWlkYXRhIHx8ICFpZGF0YS0+YWRkX2NkYXRhKQorCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisKKwlpZiAoaWRhdGEtPnVkYXRhLnUuZGV2TWVtLk51bUR3b3JkcyA+IChpZGF0YS0+YWRkX2NkYXRhX3N6IC8gNCkpIHsKKwkJQkNNTE9HX0VSUigiaW5zdWZmaWNpZW50IGJ1ZmZlclxuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwlzdHMgPSBjcnlzdGFsaGRfbWVtX3dyKGN0eC0+YWRwLCBpZGF0YS0+dWRhdGEudS5kZXZNZW0uU3RhcnRPZmYsCisJCQkgICAgIGlkYXRhLT51ZGF0YS51LmRldk1lbS5OdW1Ed29yZHMsCisJCQkgICAgICh1aW50MzJfdCAqKWlkYXRhLT5hZGRfY2RhdGEpOworCXJldHVybiBzdHM7Cit9CisKK3N0YXRpYyBCQ19TVEFUVVMgYmNfY3Byb2NfY2ZnX3JkKHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgsCisJCQkJIGNyeXN0YWxoZF9pb2N0bF9kYXRhICppZGF0YSkKK3sKKwl1aW50MzJfdCBpeCwgY250LCBvZmYsIGxlbjsKKwlCQ19TVEFUVVMgc3RzID0gQkNfU1RTX1NVQ0NFU1M7CisJdWludDMyX3QgKnRlbXA7CisKKwlpZiAoIWN0eCB8fCAhaWRhdGEpCisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKworCXRlbXAgPSAodWludDMyX3QgKikgaWRhdGEtPnVkYXRhLnUucGNpQ2ZnLnBjaV9jZmdfc3BhY2U7CisJb2ZmID0gaWRhdGEtPnVkYXRhLnUucGNpQ2ZnLk9mZnNldDsKKwlsZW4gPSBpZGF0YS0+dWRhdGEudS5wY2lDZmcuU2l6ZTsKKworCWlmIChsZW4gPD0gNCkKKwkJcmV0dXJuIGNyeXN0YWxoZF9wY2lfY2ZnX3JkKGN0eC0+YWRwLCBvZmYsIGxlbiwgdGVtcCk7CisKKwkvKiBUcnVuY2F0ZSB0byBkd29yZCBhbGlnbm1lbnQuLiovCisJbGVuID0gNDsKKwljbnQgPSBpZGF0YS0+dWRhdGEudS5wY2lDZmcuU2l6ZSAvIGxlbjsKKwlmb3IgKGl4ID0gMDsgaXggPCBjbnQ7IGl4KyspIHsKKwkJc3RzID0gY3J5c3RhbGhkX3BjaV9jZmdfcmQoY3R4LT5hZHAsIG9mZiwgbGVuLCAmdGVtcFtpeF0pOworCQlpZiAoc3RzICE9IEJDX1NUU19TVUNDRVNTKSB7CisJCQlCQ01MT0dfRVJSKCJjb25maWcgcmVhZCA6ICVkXG4iLCBzdHMpOworCQkJcmV0dXJuIHN0czsKKwkJfQorCQlvZmYgKz0gbGVuOworCX0KKworCXJldHVybiBzdHM7Cit9CisKK3N0YXRpYyBCQ19TVEFUVVMgYmNfY3Byb2NfY2ZnX3dyKHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgsCisJCQkJIGNyeXN0YWxoZF9pb2N0bF9kYXRhICppZGF0YSkKK3sKKwl1aW50MzJfdCBpeCwgY250LCBvZmYsIGxlbjsKKwlCQ19TVEFUVVMgc3RzID0gQkNfU1RTX1NVQ0NFU1M7CisJdWludDMyX3QgKnRlbXA7CisKKwlpZiAoIWN0eCB8fCAhaWRhdGEpCisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKworCXRlbXAgPSAodWludDMyX3QgKikgaWRhdGEtPnVkYXRhLnUucGNpQ2ZnLnBjaV9jZmdfc3BhY2U7CisJb2ZmID0gaWRhdGEtPnVkYXRhLnUucGNpQ2ZnLk9mZnNldDsKKwlsZW4gPSBpZGF0YS0+dWRhdGEudS5wY2lDZmcuU2l6ZTsKKworCWlmIChsZW4gPD0gNCkKKwkJcmV0dXJuIGNyeXN0YWxoZF9wY2lfY2ZnX3dyKGN0eC0+YWRwLCBvZmYsIGxlbiwgdGVtcFswXSk7CisKKwkvKiBUcnVuY2F0ZSB0byBkd29yZCBhbGlnbm1lbnQuLiovCisJbGVuID0gNDsKKwljbnQgPSBpZGF0YS0+dWRhdGEudS5wY2lDZmcuU2l6ZSAvIGxlbjsKKwlmb3IgKGl4ID0gMDsgaXggPCBjbnQ7IGl4KyspIHsKKwkJc3RzID0gY3J5c3RhbGhkX3BjaV9jZmdfd3IoY3R4LT5hZHAsIG9mZiwgbGVuLCB0ZW1wW2l4XSk7CisJCWlmIChzdHMgIT0gQkNfU1RTX1NVQ0NFU1MpIHsKKwkJCUJDTUxPR19FUlIoImNvbmZpZyB3cml0ZSA6ICVkXG4iLCBzdHMpOworCQkJcmV0dXJuIHN0czsKKwkJfQorCQlvZmYgKz0gbGVuOworCX0KKworCXJldHVybiBzdHM7Cit9CisKK3N0YXRpYyBCQ19TVEFUVVMgYmNfY3Byb2NfZG93bmxvYWRfZncoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCwKKwkJCQkgICAgICBjcnlzdGFsaGRfaW9jdGxfZGF0YSAqaWRhdGEpCit7CisJQkNfU1RBVFVTIHN0cyA9IEJDX1NUU19TVUNDRVNTOworCisJaWYgKCFjdHggfHwgIWlkYXRhIHx8ICFpZGF0YS0+YWRkX2NkYXRhIHx8ICFpZGF0YS0+YWRkX2NkYXRhX3N6KSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJnISFcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJaWYgKGN0eC0+c3RhdGUgIT0gQkNfTElOS19JTlZBTElEKSB7CisJCUJDTUxPR19FUlIoIkxpbmsgaW52YWxpZCBzdGF0ZSAlZCBcbiIsIGN0eC0+c3RhdGUpOworCQlyZXR1cm4gQkNfU1RTX0VSUl9VU0FHRTsKKwl9CisKKwlzdHMgPSBjcnlzdGFsaGRfZG93bmxvYWRfZncoY3R4LT5hZHAsICh1aW50OF90ICopaWRhdGEtPmFkZF9jZGF0YSwKKwkJCQkgIGlkYXRhLT5hZGRfY2RhdGFfc3opOworCisJaWYgKHN0cyAhPSBCQ19TVFNfU1VDQ0VTUykgeworCQlCQ01MT0dfRVJSKCJGaXJtd2FyZSBEb3dubG9hZCBGYWlsdXJlISEgLSAlZFxuIiwgc3RzKTsKKwl9IGVsc2UKKwkJY3R4LT5zdGF0ZSB8PSBCQ19MSU5LX0lOSVQ7CisKKwlyZXR1cm4gc3RzOworfQorCisvKgorICogV2UgdXNlIHRoZSBGV19DTUQgaW50ZXJmYWNlIHRvIHN5bmMgdXAgcGxheWJhY2sgc3RhdGUgd2l0aCBhcHBsaWNhdGlvbgorICogYW5kICBmaXJtd2FyZS4gVGhpcyBmdW5jdGlvbiB3aWxsIHBlcmZvcm0gdGhlIHJlcXVpcmVkIHByZSBhbmQgcG9zdAorICogcHJvY2Vzc2luZyBvZiB0aGUgRmlybXdhcmUgY29tbWFuZHMuCisgKgorICogUGF1c2UgLQorICoJRGlzYWJsZSBjYXB0dXJlIGFmdGVyIGRlY29kZXIgcGF1c2UuCisgKiBSZXN1bWUgLQorICoJRmlyc3QgZW5hYmxlIGNhcHR1cmUgYW5kIGlzc3VlIGRlY29kZXIgcmVzdW1lIGNvbW1hbmQuCisgKiBGbHVzaCAtCisgKglBYm9ydCBwZW5kaW5nIGlucHV0IHRyYW5zZmVycyBhbmQgaXNzdWUgZGVjb2RlciBmbHVzaCBjb21tYW5kLgorICoKKyAqLworc3RhdGljIEJDX1NUQVRVUyBiY19jcHJvY19kb19md19jbWQoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCwgY3J5c3RhbGhkX2lvY3RsX2RhdGEgKmlkYXRhKQoreworCUJDX1NUQVRVUyBzdHM7CisJdWludDMyX3QgKmNtZDsKKworCWlmICghKGN0eC0+c3RhdGUgJiBCQ19MSU5LX0lOSVQpKSB7CisJCUJDTUxPR19FUlIoIkxpbmsgaW52YWxpZCBzdGF0ZSAlZCBcbiIsIGN0eC0+c3RhdGUpOworCQlyZXR1cm4gQkNfU1RTX0VSUl9VU0FHRTsKKwl9CisKKwljbWQgPSBpZGF0YS0+dWRhdGEudS5md0NtZC5jbWQ7CisKKwkvKiBQcmUtUHJvY2VzcyAqLworCWlmIChjbWRbMF0gPT0gZUNNRF9DMDExX0RFQ19DSEFOX1BBVVNFKSB7CisJCWlmICghY21kWzNdKSB7CisJCQljdHgtPnN0YXRlICY9IH5CQ19MSU5LX1BBVVNFRDsKKwkJCWNyeXN0YWxoZF9od191bnBhdXNlKCZjdHgtPmh3X2N0eCk7CisJCX0KKwl9IGVsc2UgaWYgKGNtZFswXSA9PSBlQ01EX0MwMTFfREVDX0NIQU5fRkxVU0gpIHsKKwkJQkNNTE9HKEJDTUxPR19JTkZPLCAiRmx1c2ggaXNzdWVkXG4iKTsKKwkJaWYgKGNtZFszXSkKKwkJCWN0eC0+Y2luX3dhaXRfZXhpdCA9IDE7CisJfQorCisJc3RzID0gY3J5c3RhbGhkX2RvX2Z3X2NtZCgmY3R4LT5od19jdHgsICZpZGF0YS0+dWRhdGEudS5md0NtZCk7CisKKwlpZiAoc3RzICE9IEJDX1NUU19TVUNDRVNTKSB7CisJCUJDTUxPRyhCQ01MT0dfSU5GTywgImZ3IGNtZCAleCBmYWlsZWRcbiIsIGNtZFswXSk7CisJCXJldHVybiBzdHM7CisJfQorCisJLyogUG9zdC1Qcm9jZXNzICovCisJaWYgKGNtZFswXSA9PSBlQ01EX0MwMTFfREVDX0NIQU5fUEFVU0UpIHsKKwkJaWYgKGNtZFszXSkgeworCQkJY3R4LT5zdGF0ZSB8PSBCQ19MSU5LX1BBVVNFRDsKKwkJCWNyeXN0YWxoZF9od19wYXVzZSgmY3R4LT5od19jdHgpOworCQl9CisJfQorCisJcmV0dXJuIHN0czsKK30KKworc3RhdGljIHZvaWQgYmNfcHJvY19pbl9jb21wbGV0aW9uKGNyeXN0YWxoZF9kaW9fcmVxICpkaW9faG5kLAorCQkJCSAgd2FpdF9xdWV1ZV9oZWFkX3QgKmV2ZW50LCBCQ19TVEFUVVMgc3RzKQoreworCWlmICghZGlvX2huZCB8fCAhZXZlbnQpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmchIVxuIik7CisJCXJldHVybjsKKwl9CisJaWYgKHN0cyA9PSBCQ19TVFNfSU9fVVNFUl9BQk9SVCkKKwkJIHJldHVybjsKKworCWRpb19obmQtPnVpbmZvLmNvbXBfc3RzID0gc3RzOworCWRpb19obmQtPnVpbmZvLmV2X3N0cyA9IDE7CisJY3J5c3RhbGhkX3NldF9ldmVudChldmVudCk7Cit9CisKK3N0YXRpYyBCQ19TVEFUVVMgYmNfY3Byb2NfY29kZWluX3NsZWVwKHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgpCit7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgc2xlZXBfZXY7CisJaW50IHJjID0gMDsKKworCWlmIChjdHgtPnN0YXRlICYgQkNfTElOS19TVVNQRU5EKQorCQlyZXR1cm4gQkNfU1RTX0lPX1VTRVJfQUJPUlQ7CisKKwlpZiAoY3R4LT5jaW5fd2FpdF9leGl0KSB7CisJCWN0eC0+Y2luX3dhaXRfZXhpdCA9IDA7CisJCXJldHVybiBCQ19TVFNfQ01EX0NBTkNFTExFRDsKKwl9CisJY3J5c3RhbGhkX2NyZWF0ZV9ldmVudCgmc2xlZXBfZXYpOworCWNyeXN0YWxoZF93YWl0X29uX2V2ZW50KCZzbGVlcF9ldiwgMCwgMTAwLCByYywgMCk7CisJaWYgKHJjID09IC1FSU5UUikKKwkJcmV0dXJuIEJDX1NUU19JT19VU0VSX0FCT1JUOworCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCitzdGF0aWMgQkNfU1RBVFVTIGJjX2Nwcm9jX2h3X3R4ZG1hKHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgsCisJCQkJICAgY3J5c3RhbGhkX2lvY3RsX2RhdGEgKmlkYXRhLAorCQkJCSAgIGNyeXN0YWxoZF9kaW9fcmVxICpkaW8pCit7CisJdWludDMyX3QgdHhfbGlzdGlkID0gMDsKKwlCQ19TVEFUVVMgc3RzID0gQkNfU1RTX1NVQ0NFU1M7CisJd2FpdF9xdWV1ZV9oZWFkX3QgZXZlbnQ7CisJaW50IHJjID0gMDsKKworCWlmICghY3R4IHx8ICFpZGF0YSB8fCAhZGlvKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJnISFcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJY3J5c3RhbGhkX2NyZWF0ZV9ldmVudCgmZXZlbnQpOworCisJY3R4LT50eF9saXN0X2lkID0gMDsKKwkvKiBtc2xlZXBfaW50ZXJydXB0aWJsZSgyMDAwKTsgKi8KKwlzdHMgPSBjcnlzdGFsaGRfaHdfcG9zdF90eCgmY3R4LT5od19jdHgsIGRpbywgYmNfcHJvY19pbl9jb21wbGV0aW9uLAorCQkJCSAmZXZlbnQsICZ0eF9saXN0aWQsCisJCQkJIGlkYXRhLT51ZGF0YS51LlByb2NJbnB1dC5FbmNyeXB0ZWQpOworCisJd2hpbGUgKHN0cyA9PSBCQ19TVFNfQlVTWSkgeworCQlzdHMgPSBiY19jcHJvY19jb2RlaW5fc2xlZXAoY3R4KTsKKwkJaWYgKHN0cyAhPSBCQ19TVFNfU1VDQ0VTUykKKwkJCWJyZWFrOworCQlzdHMgPSBjcnlzdGFsaGRfaHdfcG9zdF90eCgmY3R4LT5od19jdHgsIGRpbywKKwkJCQkJIGJjX3Byb2NfaW5fY29tcGxldGlvbiwKKwkJCQkJICZldmVudCwgJnR4X2xpc3RpZCwKKwkJCQkJIGlkYXRhLT51ZGF0YS51LlByb2NJbnB1dC5FbmNyeXB0ZWQpOworCX0KKwlpZiAoc3RzICE9IEJDX1NUU19TVUNDRVNTKSB7CisJCUJDTUxPRyhCQ01MT0dfREJHLCAiX2h3X3R4ZG1hIHJldHVybmluZyBzdHM6JWRcbiIsIHN0cyk7CisJCXJldHVybiBzdHM7CisJfQorCWlmIChjdHgtPmNpbl93YWl0X2V4aXQpCisJCWN0eC0+Y2luX3dhaXRfZXhpdCA9IDA7CisKKwljdHgtPnR4X2xpc3RfaWQgPSB0eF9saXN0aWQ7CisKKwkvKiBfcG9zdCgpIHN1Y2NlZWRlZC4uIHdhaXQgZm9yIHRoZSBjb21wbGV0aW9uLiAqLworCWNyeXN0YWxoZF93YWl0X29uX2V2ZW50KCZldmVudCwgKGRpby0+dWluZm8uZXZfc3RzKSwgMzAwMCwgcmMsIDApOworCWN0eC0+dHhfbGlzdF9pZCA9IDA7CisJaWYgKCFyYykgeworCQlyZXR1cm4gZGlvLT51aW5mby5jb21wX3N0czsKKwl9IGVsc2UgaWYgKHJjID09IC1FQlVTWSkgeworCQlCQ01MT0coQkNNTE9HX0RCRywgIl90eF9wb3N0KCkgVC9PIFxuIik7CisJCXN0cyA9IEJDX1NUU19USU1FT1VUOworCX0gZWxzZSBpZiAocmMgPT0gLUVJTlRSKSB7CisJCUJDTUxPRyhCQ01MT0dfREJHLCAiVHggV2FpdCBTaWduYWwgaW50LlxuIik7CisJCXN0cyA9IEJDX1NUU19JT19VU0VSX0FCT1JUOworCX0gZWxzZSB7CisJCXN0cyA9IEJDX1NUU19JT19FUlJPUjsKKwl9CisKKwkvKiBXZSBhcmUgY2FuY2VsbGluZyB0aGUgSU8gZnJvbSB0aGUgc2FtZSBjb250ZXh0IGFzIHRoZSBfcG9zdCgpLgorCSAqIHNvIG5vIG5lZWQgdG8gd2FpdCBvbiB0aGUgZXZlbnQgYWdhaW4uLiB0aGUgcmV0dXJuIGl0c2VsZgorCSAqIGVuc3VyZXMgdGhlIHJlbGVhc2Ugb2Ygb3VyIHJlc291cmNlcy4KKwkgKi8KKwljcnlzdGFsaGRfaHdfY2FuY2VsX3R4KCZjdHgtPmh3X2N0eCwgdHhfbGlzdGlkKTsKKworCXJldHVybiBzdHM7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBvbiB1c2VyIGJ1ZmZlcnMgKi8KK3N0YXRpYyBCQ19TVEFUVVMgYmNfY3Byb2NfY2hlY2tfaW5idWZmcyhib29sIHBpbiwgdm9pZCAqdWJ1ZmYsIHVpbnQzMl90IHViX3N6LAorCQkJCQl1aW50MzJfdCB1dl9vZmYsIGJvb2wgZW5fNDIyKQoreworCWlmICghdWJ1ZmYgfHwgIXViX3N6KSB7CisJCUJDTUxPR19FUlIoIiVzLT5JbnZhbGlkIEFyZyAlcCAleFxuIiwKKwkJCSgocGluKSA/ICJUWCIgOiAiUlgiKSwgdWJ1ZmYsIHViX3N6KTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCS8qIENoZWNrIGZvciBhbGlnbm1lbnQgKi8KKwlpZiAoKCh1aW50cHRyX3QpdWJ1ZmYpICYgMHgwMykgeworCQlCQ01MT0dfRVJSKCIlcy0tPlVuLWFsaWduZWQgYWRkcmVzcyBub3QgaW1wbGVtZW50ZWQgeWV0Li4gJXAgXG4iLAorCQkJCSgocGluKSA/ICJUWCIgOiAiUlgiKSwgdWJ1ZmYpOworCQlyZXR1cm4gQkNfU1RTX05PVF9JTVBMOworCX0KKwlpZiAocGluKQorCQlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7CisKKwlpZiAoIWVuXzQyMiAmJiAhdXZfb2ZmKSB7CisJCUJDTUxPR19FUlIoIk5lZWQgVVYgb2Zmc2V0IGZvciA0MjAgbW9kZS5cbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJaWYgKGVuXzQyMiAmJiB1dl9vZmYpIHsKKwkJQkNNTE9HX0VSUigiVVYgb2Zmc2V0IGluIDQyMiBtb2RlID8/XG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworc3RhdGljIEJDX1NUQVRVUyBiY19jcHJvY19wcm9jX2lucHV0KHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgsIGNyeXN0YWxoZF9pb2N0bF9kYXRhICppZGF0YSkKK3sKKwl2b2lkICp1YnVmZjsKKwl1aW50MzJfdCB1Yl9zejsKKwljcnlzdGFsaGRfZGlvX3JlcSAqZGlvX2huZCA9IE5VTEw7CisJQkNfU1RBVFVTIHN0cyA9IEJDX1NUU19TVUNDRVNTOworCisJaWYgKCFjdHggfHwgIWlkYXRhKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJnISFcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJdWJ1ZmYgPSBpZGF0YS0+dWRhdGEudS5Qcm9jSW5wdXQucERtYUJ1ZmY7CisJdWJfc3ogPSBpZGF0YS0+dWRhdGEudS5Qcm9jSW5wdXQuQnVmZlN6OworCisJc3RzID0gYmNfY3Byb2NfY2hlY2tfaW5idWZmcygxLCB1YnVmZiwgdWJfc3osIDAsIDApOworCWlmIChzdHMgIT0gQkNfU1RTX1NVQ0NFU1MpCisJCXJldHVybiBzdHM7CisKKwlzdHMgPSBjcnlzdGFsaGRfbWFwX2RpbyhjdHgtPmFkcCwgdWJ1ZmYsIHViX3N6LCAwLCAwLCAxLCAmZGlvX2huZCk7CisJaWYgKHN0cyAhPSBCQ19TVFNfU1VDQ0VTUykgeworCQlCQ01MT0dfRVJSKCJkaW8gbWFwIC0gJWQgXG4iLCBzdHMpOworCQlyZXR1cm4gc3RzOworCX0KKworCWlmICghZGlvX2huZCkKKwkJcmV0dXJuIEJDX1NUU19FUlJPUjsKKworCXN0cyA9IGJjX2Nwcm9jX2h3X3R4ZG1hKGN0eCwgaWRhdGEsIGRpb19obmQpOworCisJY3J5c3RhbGhkX3VubWFwX2RpbyhjdHgtPmFkcCwgZGlvX2huZCk7CisKKwlyZXR1cm4gc3RzOworfQorCitzdGF0aWMgQkNfU1RBVFVTIGJjX2Nwcm9jX2FkZF9jYXBfYnVmZihzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4LAorCQkJCSAgICAgICBjcnlzdGFsaGRfaW9jdGxfZGF0YSAqaWRhdGEpCit7CisJdm9pZCAqdWJ1ZmY7CisJdWludDMyX3QgdWJfc3osIHV2X29mZjsKKwlib29sIGVuXzQyMjsKKwljcnlzdGFsaGRfZGlvX3JlcSAqZGlvX2huZCA9IE5VTEw7CisJQkNfU1RBVFVTIHN0cyA9IEJDX1NUU19TVUNDRVNTOworCisJaWYgKCFjdHggfHwgIWlkYXRhKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJnISFcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJdWJ1ZmYgPSBpZGF0YS0+dWRhdGEudS5SeEJ1ZmZzLll1dkJ1ZmY7CisJdWJfc3ogPSBpZGF0YS0+dWRhdGEudS5SeEJ1ZmZzLll1dkJ1ZmZTejsKKwl1dl9vZmYgPSBpZGF0YS0+dWRhdGEudS5SeEJ1ZmZzLlVWYnVmZk9mZnNldDsKKwllbl80MjIgPSBpZGF0YS0+dWRhdGEudS5SeEJ1ZmZzLmI0MjJNb2RlOworCisJc3RzID0gYmNfY3Byb2NfY2hlY2tfaW5idWZmcygwLCB1YnVmZiwgdWJfc3osIHV2X29mZiwgZW5fNDIyKTsKKwlpZiAoc3RzICE9IEJDX1NUU19TVUNDRVNTKQorCQlyZXR1cm4gc3RzOworCisJc3RzID0gY3J5c3RhbGhkX21hcF9kaW8oY3R4LT5hZHAsIHVidWZmLCB1Yl9zeiwgdXZfb2ZmLAorCQkJICAgICAgZW5fNDIyLCAwLCAmZGlvX2huZCk7CisJaWYgKHN0cyAhPSBCQ19TVFNfU1VDQ0VTUykgeworCQlCQ01MT0dfRVJSKCJkaW8gbWFwIC0gJWQgXG4iLCBzdHMpOworCQlyZXR1cm4gc3RzOworCX0KKworCWlmICghZGlvX2huZCkKKwkJcmV0dXJuIEJDX1NUU19FUlJPUjsKKworCXN0cyA9IGNyeXN0YWxoZF9od19hZGRfY2FwX2J1ZmZlcigmY3R4LT5od19jdHgsIGRpb19obmQsIChjdHgtPnN0YXRlID09IEJDX0xJTktfUkVBRFkpKTsKKwlpZiAoKHN0cyAhPSBCQ19TVFNfU1VDQ0VTUykgJiYgKHN0cyAhPSBCQ19TVFNfQlVTWSkpIHsKKwkJY3J5c3RhbGhkX3VubWFwX2RpbyhjdHgtPmFkcCwgZGlvX2huZCk7CisJCXJldHVybiBzdHM7CisJfQorCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCitzdGF0aWMgQkNfU1RBVFVTIGJjX2Nwcm9jX2ZtdF9jaGFuZ2Uoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCwKKwkJCQkgICAgIGNyeXN0YWxoZF9kaW9fcmVxICpkaW8pCit7CisJQkNfU1RBVFVTIHN0cyA9IEJDX1NUU19TVUNDRVNTOworCisJc3RzID0gY3J5c3RhbGhkX2h3X2FkZF9jYXBfYnVmZmVyKCZjdHgtPmh3X2N0eCwgZGlvLCAwKTsKKwlpZiAoc3RzICE9IEJDX1NUU19TVUNDRVNTKQorCQlyZXR1cm4gc3RzOworCisJY3R4LT5zdGF0ZSB8PSBCQ19MSU5LX0ZNVF9DSEc7CisJaWYgKGN0eC0+c3RhdGUgPT0gQkNfTElOS19SRUFEWSkKKwkJc3RzID0gY3J5c3RhbGhkX2h3X3N0YXJ0X2NhcHR1cmUoJmN0eC0+aHdfY3R4KTsKKworCXJldHVybiBzdHM7Cit9CisKK3N0YXRpYyBCQ19TVEFUVVMgYmNfY3Byb2NfZmV0Y2hfZnJhbWUoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCwKKwkJCQkgICAgICBjcnlzdGFsaGRfaW9jdGxfZGF0YSAqaWRhdGEpCit7CisJY3J5c3RhbGhkX2Rpb19yZXEgKmRpbyA9IE5VTEw7CisJQkNfU1RBVFVTIHN0cyA9IEJDX1NUU19TVUNDRVNTOworCUJDX0RFQ19PVVRfQlVGRiAqZnJhbWU7CisKKwlpZiAoIWN0eCB8fCAhaWRhdGEpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmchIVxuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwlpZiAoIShjdHgtPnN0YXRlICYgQkNfTElOS19DQVBfRU4pKSB7CisJCUJDTUxPRyhCQ01MT0dfREJHLCAiQ2FwdHVyZSBub3QgZW5hYmxlZC4uJXhcbiIsIGN0eC0+c3RhdGUpOworCQlyZXR1cm4gQkNfU1RTX0VSUl9VU0FHRTsKKwl9CisKKwlmcmFtZSA9ICZpZGF0YS0+dWRhdGEudS5EZWNPdXREYXRhOworCisJc3RzID0gY3J5c3RhbGhkX2h3X2dldF9jYXBfYnVmZmVyKCZjdHgtPmh3X2N0eCwgJmZyYW1lLT5QaWJJbmZvLCAmZGlvKTsKKwlpZiAoc3RzICE9IEJDX1NUU19TVUNDRVNTKQorCQlyZXR1cm4gKGN0eC0+c3RhdGUgJiBCQ19MSU5LX1NVU1BFTkQpID8gQkNfU1RTX0lPX1VTRVJfQUJPUlQgOiBzdHM7CisKKwlmcmFtZS0+RmxhZ3MgPSBkaW8tPnVpbmZvLmNvbXBfZmxhZ3M7CisKKwlpZiAoZnJhbWUtPkZsYWdzICYgQ09NUF9GTEFHX0ZNVF9DSEFOR0UpCisJCXJldHVybiBiY19jcHJvY19mbXRfY2hhbmdlKGN0eCwgZGlvKTsKKworCWZyYW1lLT5PdXRQdXRCdWZmcy5ZdXZCdWZmID0gZGlvLT51aW5mby54ZnJfYnVmZjsKKwlmcmFtZS0+T3V0UHV0QnVmZnMuWXV2QnVmZlN6ID0gZGlvLT51aW5mby54ZnJfbGVuOworCWZyYW1lLT5PdXRQdXRCdWZmcy5VVmJ1ZmZPZmZzZXQgPSBkaW8tPnVpbmZvLnV2X29mZnNldDsKKwlmcmFtZS0+T3V0UHV0QnVmZnMuYjQyMk1vZGUgPSBkaW8tPnVpbmZvLmI0MjJtb2RlOworCisJZnJhbWUtPk91dFB1dEJ1ZmZzLllCdWZmRG9uZVN6ID0gZGlvLT51aW5mby55X2RvbmVfc3o7CisJZnJhbWUtPk91dFB1dEJ1ZmZzLlVWQnVmZkRvbmVTeiA9IGRpby0+dWluZm8udXZfZG9uZV9zejsKKworCWNyeXN0YWxoZF91bm1hcF9kaW8oY3R4LT5hZHAsIGRpbyk7CisKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBCQ19TVEFUVVMgYmNfY3Byb2Nfc3RhcnRfY2FwdHVyZShzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4LAorCQkJCQljcnlzdGFsaGRfaW9jdGxfZGF0YSAqaWRhdGEpCit7CisJY3R4LT5zdGF0ZSB8PSBCQ19MSU5LX0NBUF9FTjsKKwlpZiAoY3R4LT5zdGF0ZSA9PSBCQ19MSU5LX1JFQURZKQorCQlyZXR1cm4gY3J5c3RhbGhkX2h3X3N0YXJ0X2NhcHR1cmUoJmN0eC0+aHdfY3R4KTsKKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworc3RhdGljIEJDX1NUQVRVUyBiY19jcHJvY19mbHVzaF9jYXBfYnVmZnMoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCwKKwkJCQkJICBjcnlzdGFsaGRfaW9jdGxfZGF0YSAqaWRhdGEpCit7CisJY3J5c3RhbGhkX2Rpb19yZXEgKmRpbyA9IE5VTEw7CisJQkNfU1RBVFVTIHN0cyA9IEJDX1NUU19TVUNDRVNTOworCUJDX0RFQ19PVVRfQlVGRiAqZnJhbWU7CisJdWludDMyX3QgY291bnQ7CisKKwlpZiAoIWN0eCB8fCAhaWRhdGEpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmchIVxuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwlpZiAoIShjdHgtPnN0YXRlICYgQkNfTElOS19DQVBfRU4pKQorCQlyZXR1cm4gQkNfU1RTX0VSUl9VU0FHRTsKKworCS8qIFdlIHNob3VsZCBhY2sgZmx1c2ggZXZlbiB3aGVuIHdlIGFyZSBpbiBwYXVzZWQvc3VzcGVuZCBzdGF0ZSAqLworCWlmICghKGN0eC0+c3RhdGUgJiBCQ19MSU5LX1JFQURZKSkKKwkJcmV0dXJuIGNyeXN0YWxoZF9od19zdG9wX2NhcHR1cmUoJmN0eC0+aHdfY3R4KTsKKworCWN0eC0+c3RhdGUgJj0gfihCQ19MSU5LX0NBUF9FTnxCQ19MSU5LX0ZNVF9DSEcpOworCisJZnJhbWUgPSAmaWRhdGEtPnVkYXRhLnUuRGVjT3V0RGF0YTsKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBCQ19SWF9MSVNUX0NOVDsgY291bnQrKykgeworCisJCXN0cyA9IGNyeXN0YWxoZF9od19nZXRfY2FwX2J1ZmZlcigmY3R4LT5od19jdHgsICZmcmFtZS0+UGliSW5mbywgJmRpbyk7CisJCWlmIChzdHMgIT0gQkNfU1RTX1NVQ0NFU1MpCisJCQlicmVhazsKKworCQljcnlzdGFsaGRfdW5tYXBfZGlvKGN0eC0+YWRwLCBkaW8pOworCX0KKworCXJldHVybiBjcnlzdGFsaGRfaHdfc3RvcF9jYXB0dXJlKCZjdHgtPmh3X2N0eCk7Cit9CisKK3N0YXRpYyBCQ19TVEFUVVMgYmNfY3Byb2NfZ2V0X3N0YXRzKHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgsCisJCQkJICAgIGNyeXN0YWxoZF9pb2N0bF9kYXRhICppZGF0YSkKK3sKKwlCQ19EVFNfU1RBVFMgKnN0YXRzOworCXN0cnVjdCBjcnlzdGFsaGRfaHdfc3RhdHMJaHdfc3RhdHM7CisKKwlpZiAoIWN0eCB8fCAhaWRhdGEpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmchIVxuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwljcnlzdGFsaGRfaHdfc3RhdHMoJmN0eC0+aHdfY3R4LCAmaHdfc3RhdHMpOworCisJc3RhdHMgPSAmaWRhdGEtPnVkYXRhLnUuZHJ2U3RhdDsKKwlzdGF0cy0+ZHJ2UkxMID0gaHdfc3RhdHMucmR5cV9jb3VudDsKKwlzdGF0cy0+ZHJ2RkxMID0gaHdfc3RhdHMuZnJlZXFfY291bnQ7CisJc3RhdHMtPkRydlRvdGFsRnJtRHJvcHBlZCA9IGh3X3N0YXRzLnJ4X2Vycm9yczsKKwlzdGF0cy0+RHJ2VG90YWxIV0VycnMgPSBod19zdGF0cy5yeF9lcnJvcnMgKyBod19zdGF0cy50eF9lcnJvcnM7CisJc3RhdHMtPmludENvdW50ID0gaHdfc3RhdHMubnVtX2ludGVycnVwdHM7CisJc3RhdHMtPkRydklnbkludHJDbnQgPSBod19zdGF0cy5udW1faW50ZXJydXB0cyAtCisJCQkJaHdfc3RhdHMuZGV2X2ludGVycnVwdHM7CisJc3RhdHMtPlR4Rmlmb0JzeUNudCA9IGh3X3N0YXRzLmNpbl9idXN5OworCXN0YXRzLT5wYXVzZUNvdW50ID0gaHdfc3RhdHMucGF1c2VfY250OworCisJaWYgKGN0eC0+cHdyX3N0YXRlX2NoYW5nZSkKKwkJc3RhdHMtPnB3cl9zdGF0ZV9jaGFuZ2UgPSAxOworCWlmIChjdHgtPnN0YXRlICYgQkNfTElOS19QQVVTRUQpCisJCXN0YXRzLT5EcnZQYXVzZVRpbWUgPSAxOworCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCitzdGF0aWMgQkNfU1RBVFVTIGJjX2Nwcm9jX3Jlc2V0X3N0YXRzKHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgsCisJCQkJICAgICAgY3J5c3RhbGhkX2lvY3RsX2RhdGEgKmlkYXRhKQoreworCWNyeXN0YWxoZF9od19zdGF0cygmY3R4LT5od19jdHgsIE5VTEwpOworCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCitzdGF0aWMgQkNfU1RBVFVTIGJjX2Nwcm9jX2NoZ19jbGsoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCwKKwkJCQkgIGNyeXN0YWxoZF9pb2N0bF9kYXRhICppZGF0YSkKK3sKKwlCQ19DTE9DSyAqY2xvY2s7CisJdWludDMyX3Qgb2xkQ2xrOworCUJDX1NUQVRVUyBzdHMgPSBCQ19TVFNfU1VDQ0VTUzsKKworCWlmICghY3R4IHx8ICFpZGF0YSkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIEFyZyEhXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCWNsb2NrID0gJmlkYXRhLT51ZGF0YS51LmNsb2NrVmFsdWU7CisJb2xkQ2xrID0gY3R4LT5od19jdHguY29yZV9jbG9ja19taHo7CisJY3R4LT5od19jdHguY29yZV9jbG9ja19taHogPSBjbG9jay0+Y2xrOworCisJaWYgKGN0eC0+c3RhdGUgJiBCQ19MSU5LX1JFQURZKSB7CisJCXN0cyA9IGNyeXN0YWxoZF9od19zZXRfY29yZV9jbG9jaygmY3R4LT5od19jdHgpOworCQlpZiAoc3RzID09IEJDX1NUU19DTEtfTk9DSEcpCisJCQljdHgtPmh3X2N0eC5jb3JlX2Nsb2NrX21oeiA9IG9sZENsazsKKwl9CisKKwljbG9jay0+Y2xrID0gY3R4LT5od19jdHguY29yZV9jbG9ja19taHo7CisKKwlyZXR1cm4gc3RzOworfQorCisvKj09PT09PT09PT09PT09PSBDbWQgUHJvYyBUYWJsZS4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KK3N0YXRpYyBjb25zdCBjcnlzdGFsaGRfY21kX3RibF90CWdfY3J5c3RhbGhkX2Nwcm9jX3RibFtdID0geworCXsgQkNNX0lPQ19HRVRfVkVSU0lPTiwJCWJjX2Nwcm9jX2dldF92ZXJzaW9uLAkwfSwKKwl7IEJDTV9JT0NfR0VUX0hXVFlQRSwJCWJjX2Nwcm9jX2dldF9od3R5cGUsCTB9LAorCXsgQkNNX0lPQ19SRUdfUkQsCQliY19jcHJvY19yZWdfcmQsCTB9LAorCXsgQkNNX0lPQ19SRUdfV1IsCQliY19jcHJvY19yZWdfd3IsCTB9LAorCXsgQkNNX0lPQ19GUEdBX1JELAkJYmNfY3Byb2NfbGlua19yZWdfcmQsCTB9LAorCXsgQkNNX0lPQ19GUEdBX1dSLAkJYmNfY3Byb2NfbGlua19yZWdfd3IsCTB9LAorCXsgQkNNX0lPQ19NRU1fUkQsCQliY19jcHJvY19tZW1fcmQsCTB9LAorCXsgQkNNX0lPQ19NRU1fV1IsCQliY19jcHJvY19tZW1fd3IsCTB9LAorCXsgQkNNX0lPQ19SRF9QQ0lfQ0ZHLAkJYmNfY3Byb2NfY2ZnX3JkLAkwfSwKKwl7IEJDTV9JT0NfV1JfUENJX0NGRywJCWJjX2Nwcm9jX2NmZ193ciwJMX0sCisJeyBCQ01fSU9DX0ZXX0RPV05MT0FELAkJYmNfY3Byb2NfZG93bmxvYWRfZncsCTF9LAorCXsgQkNNX0lPQ19GV19DTUQsCQliY19jcHJvY19kb19md19jbWQsCTF9LAorCXsgQkNNX0lPQ19QUk9DX0lOUFVULAkJYmNfY3Byb2NfcHJvY19pbnB1dCwJMX0sCisJeyBCQ01fSU9DX0FERF9SWEJVRkZTLAkJYmNfY3Byb2NfYWRkX2NhcF9idWZmLAkxfSwKKwl7IEJDTV9JT0NfRkVUQ0hfUlhCVUZGLAkJYmNfY3Byb2NfZmV0Y2hfZnJhbWUsCTF9LAorCXsgQkNNX0lPQ19TVEFSVF9SWF9DQVAsCQliY19jcHJvY19zdGFydF9jYXB0dXJlLAkxfSwKKwl7IEJDTV9JT0NfRkxVU0hfUlhfQ0FQLAkJYmNfY3Byb2NfZmx1c2hfY2FwX2J1ZmZzLCAxfSwKKwl7IEJDTV9JT0NfR0VUX0RSVl9TVEFULAkJYmNfY3Byb2NfZ2V0X3N0YXRzLAkwfSwKKwl7IEJDTV9JT0NfUlNUX0RSVl9TVEFULAkJYmNfY3Byb2NfcmVzZXRfc3RhdHMsCTB9LAorCXsgQkNNX0lPQ19OT1RJRllfTU9ERSwJCWJjX2Nwcm9jX25vdGlmeV9tb2RlLAkwfSwKKwl7IEJDTV9JT0NfQ0hHX0NMSywJCWJjX2Nwcm9jX2NoZ19jbGssIDB9LAorCXsgQkNNX0lPQ19FTkQsCQkJTlVMTH0sCit9OworCisvKj09PT09PT09PT09PT09PSBDbWQgUHJvYyBGdW5jdGlvbnMuLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qKgorICogY3J5c3RhbGhkX3N1c3BlbmQgLSBQb3dlciBtYW5hZ2VtZW50IHN1c3BlbmQgcmVxdWVzdC4KKyAqIEBjdHg6IENvbW1hbmQgbGF5ZXIgY29udGV4dC4KKyAqIEBpZGF0YTogSW9kYXRhIC0gcmVxdWlyZWQgZm9yIGludGVybmFsIHVzZS4KKyAqCisgKiBSZXR1cm46CisgKglzdGF0dXMKKyAqCisgKiAxLiBTZXQgdGhlIHN0YXRlIHRvIFN1c3BlbmQuCisgKiAyLiBGbHVzaCB0aGUgUnggQnVmZmVycyBpdCB3aWxsIHVubWFwIGFsbCB0aGUgYnVmZmVycyBhbmQKKyAqICAgIHN0b3AgdGhlIFJ4RE1BIGVuZ2luZS4KKyAqIDMuIENhbmNlbCBUaGUgVFggSW8gYW5kIFN0b3AgRG1hIEVuZ2luZS4KKyAqIDQuIFB1dCB0aGUgRERSIGluIHRvIGRlZXAgc2xlZXAuCisgKiA1LiBTdG9wIHRoZSBoYXJkd2FyZSBwdXR0aW5nIGl0IGluIHRvIFJlc2V0IFN0YXRlLgorICoKKyAqIEN1cnJlbnQgZ3N0cmVhbWVyIGZyYW1lIHdvcmsgZG9lcyBub3QgcHJvdmlkZSBhbnkgcG93ZXIgbWFuYWdlbWVudAorICogcmVsYXRlZCBub3RpZmljYXRpb24gdG8gdXNlciBtb2RlIGRlY29kZXIgcGx1Zy1pbi4gQXMgYSB3b3JrLWFyb3VuZAorICogd2UgcGFzcyBvbiB0aGUgcG93ZXIgbWFuZ2VtZW50IG5vdGlmaWNhdGlvbiB0byBvdXIgcGx1Zy1pbiBieSBjb21wbGV0aW5nCisgKiBhbGwgb3V0c3RhbmRpbmcgcmVxdWVzdHMgd2l0aCBCQ19TVFNfSU9fVVNFUl9BQk9SVCByZXR1cm4gY29kZS4KKyAqLworQkNfU1RBVFVTIGNyeXN0YWxoZF9zdXNwZW5kKHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgsIGNyeXN0YWxoZF9pb2N0bF9kYXRhICppZGF0YSkKK3sKKwlCQ19TVEFUVVMgc3RzID0gQkNfU1RTX1NVQ0NFU1M7CisKKwlpZiAoIWN0eCB8fCAhaWRhdGEpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBQYXJhbWV0ZXJzXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19FUlJPUjsKKwl9CisKKwlpZiAoY3R4LT5zdGF0ZSAmIEJDX0xJTktfU1VTUEVORCkKKwkJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworCisJaWYgKGN0eC0+c3RhdGUgPT0gQkNfTElOS19JTlZBTElEKSB7CisJCUJDTUxPRyhCQ01MT0dfREJHLCAiTm90aGluZyBUbyBEbyBTdXNwZW5kIFN1Y2Nlc3NcbiIpOworCQlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7CisJfQorCisJY3R4LT5zdGF0ZSB8PSBCQ19MSU5LX1NVU1BFTkQ7CisKKwliY19jcHJvY19tYXJrX3B3cl9zdGF0ZShjdHgpOworCisJaWYgKGN0eC0+c3RhdGUgJiBCQ19MSU5LX0NBUF9FTikgeworCQlzdHMgPSBiY19jcHJvY19mbHVzaF9jYXBfYnVmZnMoY3R4LCBpZGF0YSk7CisJCWlmIChzdHMgIT0gQkNfU1RTX1NVQ0NFU1MpCisJCQlyZXR1cm4gc3RzOworCX0KKworCWlmIChjdHgtPnR4X2xpc3RfaWQpIHsKKwkJc3RzID0gY3J5c3RhbGhkX2h3X2NhbmNlbF90eCgmY3R4LT5od19jdHgsIGN0eC0+dHhfbGlzdF9pZCk7CisJCWlmIChzdHMgIT0gQkNfU1RTX1NVQ0NFU1MpCisJCQlyZXR1cm4gc3RzOworCX0KKworCXN0cyA9IGNyeXN0YWxoZF9od19zdXNwZW5kKCZjdHgtPmh3X2N0eCk7CisJaWYgKHN0cyAhPSBCQ19TVFNfU1VDQ0VTUykKKwkJcmV0dXJuIHN0czsKKworCUJDTUxPRyhCQ01MT0dfREJHLCAiQkNNNzAwMTIgc3VzcGVuZCBzdWNjZXNzXG4iKTsKKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworLyoqCisgKiBjcnlzdGFsaGRfcmVzdW1lIC0gUmVzdW1lIGZyYW1lIGNhcHR1cmUuCisgKiBAY3R4OiBDb21tYW5kIGxheWVyIGNvbnRleHR4LgorICoKKyAqIFJldHVybjoKKyAqCXN0YXR1cworICoKKyAqCisgKiBSZXN1bWUgZnJhbWUgY2FwdHVyZS4KKyAqCisgKiBQTV9SZXN1bWUgY2FuJ3QgcmVzdW1lIHRoZSBwbGF5YmFjayBzdGF0ZSBiYWNrIHRvIHByZS1zdXNwZW5kIHN0YXRlCisgKiBiZWNhdXNlIHdlIGRvbid0IGtlZXAgdmlkZW8gY2xpcCByZWxhdGVkIGluZm9ybWF0aW9uIHdpdGhpbiBkcml2ZXIuCisgKiBUbyBnZXQgYmFjayB0byB0aGUgcHJlLXN1c3BlbmQgc3RhdGUgQXBwIHdpbGwgcmUtb3BlbiB0aGUgZGV2aWNlIGFuZAorICogc3RhcnQgYSBuZXcgcGxheWJhY2sgc2Vzc2lvbiBmcm9tIHRoZSBwcmUtc3VzcGVuZCBjbGlwIHBvc2l0aW9uLgorICoKKyAqLworQkNfU1RBVFVTIGNyeXN0YWxoZF9yZXN1bWUoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCkKK3sKKwlCQ01MT0coQkNNTE9HX0RCRywgImNyeXN0YWxoZF9yZXN1bWUgU3VjY2VzcyAleFxuIiwgY3R4LT5zdGF0ZSk7CisKKwliY19jcHJvY19tYXJrX3B3cl9zdGF0ZShjdHgpOworCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCisvKioKKyAqIGNyeXN0YWxoZF91c2VyX29wZW4gLSBDcmVhdGUgYXBwbGljYXRpb24gaGFuZGxlLgorICogQGN0eDogQ29tbWFuZCBsYXllciBjb250ZXh0eC4KKyAqIEB1c2VyX2N0eDogVXNlciBJRCBjb250ZXh0LgorICoKKyAqIFJldHVybjoKKyAqCXN0YXR1cworICoKKyAqIENyZWF0ZXMgYW4gYXBwbGljYXRpb24gc3BlY2lmaWMgVUlEIGFuZCBhbGxvY2F0ZXMKKyAqIGFwcGxpY2F0aW9uIHNwZWNpZmljIHJlc291cmNlcy4gSFcgbGF5ZXIgaW5pdGlhbGl6YXRpb24KKyAqIGlzIGRvbmUgZm9yIHRoZSBmaXJzdCBvcGVuIHJlcXVlc3QuCisgKi8KK0JDX1NUQVRVUyBjcnlzdGFsaGRfdXNlcl9vcGVuKHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgsCisJCQkgICAgc3RydWN0IGNyeXN0YWxoZF91c2VyICoqdXNlcl9jdHgpCit7CisJc3RydWN0IGNyeXN0YWxoZF91c2VyICp1YzsKKworCWlmICghY3R4IHx8ICF1c2VyX2N0eCkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIGFyZy4uXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCXVjID0gYmNfY3Byb2NfZ2V0X3VpZChjdHgpOworCWlmICghdWMpIHsKKwkJQkNNTE9HKEJDTUxPR19JTkZPLCAiTm8gZnJlZSB1c2VyIGNvbnRleHQuLi5cbiIpOworCQlyZXR1cm4gQkNfU1RTX0JVU1k7CisJfQorCisJQkNNTE9HKEJDTUxPR19JTkZPLCAiT3BlbmluZyBuZXcgdXNlclsleF0gaGFuZGxlXG4iLCB1Yy0+dWlkKTsKKworCWNyeXN0YWxoZF9od19vcGVuKCZjdHgtPmh3X2N0eCwgY3R4LT5hZHApOworCisJdWMtPmluX3VzZSA9IDE7CisKKwkqdXNlcl9jdHggPSB1YzsKKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworLyoqCisgKiBjcnlzdGFsaGRfdXNlcl9jbG9zZSAtIENsb3NlIGFwcGxpY2F0aW9uIGhhbmRsZS4KKyAqIEBjdHg6IENvbW1hbmQgbGF5ZXIgY29udGV4dHguCisgKiBAdWM6IFVzZXIgSUQgY29udGV4dC4KKyAqCisgKiBSZXR1cm46CisgKglzdGF0dXMKKyAqCisgKiBDbG9zZXIgYXBsaWNhdGlvbiBoYW5kbGUgYW5kIHJlbGVhc2UgYXBwIHNwZWNpZmljCisgKiByZXNvdXJjZXMuCisgKi8KK0JDX1NUQVRVUyBjcnlzdGFsaGRfdXNlcl9jbG9zZShzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4LCBzdHJ1Y3QgY3J5c3RhbGhkX3VzZXIgKnVjKQoreworCXVpbnQzMl90IG1vZGUgPSB1Yy0+bW9kZTsKKworCWN0eC0+dXNlclt1Yy0+dWlkXS5tb2RlID0gRFRTX01PREVfSU5WOworCWN0eC0+dXNlclt1Yy0+dWlkXS5pbl91c2UgPSAwOworCWN0eC0+Y2luX3dhaXRfZXhpdCA9IDE7CisJY3R4LT5wd3Jfc3RhdGVfY2hhbmdlID0gMDsKKworCUJDTUxPRyhCQ01MT0dfSU5GTywgIkNsb3NpbmcgdXNlclsleF0gaGFuZGxlXG4iLCB1Yy0+dWlkKTsKKworCWlmICgobW9kZSA9PSBEVFNfRElBR19NT0RFKSB8fCAobW9kZSA9PSBEVFNfUExBWUJBQ0tfTU9ERSkpIHsKKwkJY3J5c3RhbGhkX2h3X2ZyZWVfZG1hX3JpbmdzKCZjdHgtPmh3X2N0eCk7CisJCWNyeXN0YWxoZF9kZXN0cm95X2Rpb19wb29sKGN0eC0+YWRwKTsKKwl9IGVsc2UgaWYgKGJjX2Nwcm9jX2dldF91c2VyX2NvdW50KGN0eCkpIHsKKwkJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworCX0KKworCWNyeXN0YWxoZF9od19jbG9zZSgmY3R4LT5od19jdHgpOworCisJY3R4LT5zdGF0ZSA9IEJDX0xJTktfSU5WQUxJRDsKKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworLyoqCisgKiBjcnlzdGFsaGRfc2V0dXBfY21kX2NvbnRleHQgLSBTZXR1cCBDb21tYW5kIGxheWVyIHJlc291cmNlcy4KKyAqIEBjdHg6IENvbW1hbmQgbGF5ZXIgY29udGV4dHguCisgKiBAYWRwOiBBZGFwdGVyIGNvbnRleHQKKyAqCisgKiBSZXR1cm46CisgKglzdGF0dXMKKyAqCisgKiBDYWxsZWQgYXQgdGhlIHRpbWUgb2YgZHJpdmVyIGxvYWQuCisgKi8KK0JDX1NUQVRVUyBfX2RldmluaXQgY3J5c3RhbGhkX3NldHVwX2NtZF9jb250ZXh0KHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgsCisJCQkJICAgIHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHApCit7CisJaW50IGkgPSAwOworCisJaWYgKCFjdHggfHwgIWFkcCkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIGFyZyEhXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCWlmIChjdHgtPmFkcCkKKwkJQkNNTE9HKEJDTUxPR19EQkcsICJSZXNldHRpbmcgQ21kIGNvbnRleHQgZGVsZXRlIG1pc3NpbmcuLlxuIik7CisKKwljdHgtPmFkcCA9IGFkcDsKKwlmb3IgKGkgPSAwOyBpIDwgQkNfTElOS19NQVhfT1BFTlM7IGkrKykgeworCQljdHgtPnVzZXJbaV0udWlkID0gaTsKKwkJY3R4LT51c2VyW2ldLmluX3VzZSA9IDA7CisJCWN0eC0+dXNlcltpXS5tb2RlID0gRFRTX01PREVfSU5WOworCX0KKworCS8qT3BlbiBhbmQgQ2xvc2UgdGhlIEhhcmR3YXJlIHRvIHB1dCBpdCBpbiB0byBzbGVlcCBzdGF0ZSovCisJY3J5c3RhbGhkX2h3X29wZW4oJmN0eC0+aHdfY3R4LCBjdHgtPmFkcCk7CisJY3J5c3RhbGhkX2h3X2Nsb3NlKCZjdHgtPmh3X2N0eCk7CisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCisvKioKKyAqIGNyeXN0YWxoZF9kZWxldGVfY21kX2NvbnRleHQgLSBSZWxlYXNlIENvbW1hbmQgbGF5ZXIgcmVzb3VyY2VzLgorICogQGN0eDogQ29tbWFuZCBsYXllciBjb250ZXh0eC4KKyAqCisgKiBSZXR1cm46CisgKglzdGF0dXMKKyAqCisgKiBDYWxsZWQgYXQgdGhlIHRpbWUgb2YgZHJpdmVyIHVuLWxvYWQuCisgKi8KK0JDX1NUQVRVUyBfX2RldmV4aXQgY3J5c3RhbGhkX2RlbGV0ZV9jbWRfY29udGV4dChzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4KQoreworCUJDTUxPRyhCQ01MT0dfREJHLCAiRGVsZXRpbmcgQ29tbWFuZCBjb250ZXh0Li5cbiIpOworCisJY3R4LT5hZHAgPSBOVUxMOworCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCisvKioKKyAqIGNyeXN0YWxoZF9nZXRfY21kX3Byb2MgIC0gQ3Byb2MgdGFibGUgbG9va3VwLgorICogQGN0eDogQ29tbWFuZCBsYXllciBjb250ZXh0eC4KKyAqIEBjbWQ6IElPQ1RMIGNvbW1hbmQgY29kZS4KKyAqIEB1YzogVXNlciBJRCBjb250ZXh0LgorICoKKyAqIFJldHVybjoKKyAqCWNvbW1hbmQgcHJvYyBmdW5jdGlvbiBwb2ludGVyCisgKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIHByb2Nlc3MgY29udGV4dCwgYXBwbGljYXRpb24ncworICogbW9kZSBvZiBvcGVyYXRpb24gYW5kIHJldHVybnMgdGhlIGZ1bmN0aW9uIHBvaW50ZXIKKyAqIGZyb20gdGhlIGNwcm9jIHRhYmxlLgorICovCitjcnlzdGFsaGRfY21kX3Byb2MgY3J5c3RhbGhkX2dldF9jbWRfcHJvYyhzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4LCB1aW50MzJfdCBjbWQsCisJCQkJICAgICAgc3RydWN0IGNyeXN0YWxoZF91c2VyICp1YykKK3sKKwljcnlzdGFsaGRfY21kX3Byb2MgY3Byb2MgPSBOVUxMOworCXVuc2lnbmVkIGludCBpLCB0Ymxfc3o7CisKKwlpZiAoIWN0eCkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIGFyZy4uIENtZFslZF1cbiIsIGNtZCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmICgoY21kICE9IEJDTV9JT0NfR0VUX0RSVl9TVEFUKSAmJiAoY3R4LT5zdGF0ZSAmIEJDX0xJTktfU1VTUEVORCkpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBTdGF0ZSBbc3VzcGVuZCBTZXRdLi4gQ21kWyVkXVxuIiwgY21kKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJdGJsX3N6ID0gc2l6ZW9mKGdfY3J5c3RhbGhkX2Nwcm9jX3RibCkgLyBzaXplb2YoY3J5c3RhbGhkX2NtZF90YmxfdCk7CisJZm9yIChpID0gMDsgaSA8IHRibF9zejsgaSsrKSB7CisJCWlmIChnX2NyeXN0YWxoZF9jcHJvY190YmxbaV0uY21kX2lkID09IGNtZCkgeworCQkJaWYgKCh1Yy0+bW9kZSA9PSBEVFNfTU9OSVRPUl9NT0RFKSAmJgorCQkJICAgIChnX2NyeXN0YWxoZF9jcHJvY190YmxbaV0uYmxvY2tfbW9uKSkgeworCQkJCUJDTUxPRyhCQ01MT0dfSU5GTywgIkJsb2NraW5nIGNtZCAlZCBcbiIsIGNtZCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQljcHJvYyA9IGdfY3J5c3RhbGhkX2Nwcm9jX3RibFtpXS5jbWRfcHJvYzsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIGNwcm9jOworfQorCisvKioKKyAqIGNyeXN0YWxoZF9jbWRfaW50ZXJydXB0IC0gSVNSIGVudHJ5IHBvaW50CisgKiBAY3R4OiBDb21tYW5kIGxheWVyIGNvbnRleHR4LgorICoKKyAqIFJldHVybjoKKyAqCVRSVUU6IElmIGludGVycnVwdCBmcm9tIGJjbTcwMDEyIGRldmljZS4KKyAqCisgKgorICogSVNSIGVudHJ5IHBvaW50IGZyb20gT1MgbGF5ZXIuCisgKi8KK2Jvb2wgY3J5c3RhbGhkX2NtZF9pbnRlcnJ1cHQoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCkKK3sKKwlpZiAoIWN0eCkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIGFyZy4uXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGNyeXN0YWxoZF9od19pbnRlcnJ1cHQoY3R4LT5hZHAsICZjdHgtPmh3X2N0eCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9jbWRzLmggYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9jbWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIyOTBhZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2NtZHMuaApAQCAtMCwwICsxLDg4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSwgQnJvYWRjb20gQ29ycG9yYXRpb24uCisgKgorICogIE5hbWU6IGNyeXN0YWxoZF9jbWRzIC4gaAorICoKKyAqICBEZXNjcmlwdGlvbjoKKyAqCQlCQ003MDAxMCBMaW51eCBkcml2ZXIgdXNlciBjb21tYW5kIGludGVyZmFjZXMuCisgKgorICogIEhJU1RPUlk6CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBjcnlzdGFsaGQgZGV2aWNlIGRyaXZlci4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGRyaXZlci4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9DUllTVEFMSERfQ01EU19IXworI2RlZmluZSBfQ1JZU1RBTEhEX0NNRFNfSF8KKworLyoKKyAqIE5PVEU6OiBUaGlzIGlzIHRoZSBtYWluIGludGVyZmFjZSBmaWxlIGJldHdlZW4gdGhlIExpbnV4IGxheWVyCisgKiAgICAgICAgYW5kIHRoZSBoYXJ3YXJlIGxheWVyLiBUaGlzIGZpbGUgd2lsbCB1c2UgdGhlIGRlZmluaXRpb25zCisgKiAgICAgICAgZnJvbSBfZHRzX2dsb2IgYW5kIGR0c19kZWZzIGV0Yy4uIHdoaWNoIGFyZSBkZWZpbmVkIGZvcgorICogICAgICAgIHdpbmRvd3MuCisgKi8KKyNpbmNsdWRlICJjcnlzdGFsaGRfbWlzYy5oIgorI2luY2x1ZGUgImNyeXN0YWxoZF9ody5oIgorCitlbnVtIF9jcnlzdGFsaGRfc3RhdGV7CisJQkNfTElOS19JTlZBTElECQk9IDB4MDAsCisJQkNfTElOS19JTklUCQk9IDB4MDEsCisJQkNfTElOS19DQVBfRU4JCT0gMHgwMiwKKwlCQ19MSU5LX0ZNVF9DSEcJCT0gMHgwNCwKKwlCQ19MSU5LX1NVU1BFTkQJCT0gMHgxMCwKKwlCQ19MSU5LX1BBVVNFRAkJPSAweDIwLAorCUJDX0xJTktfUkVBRFkJPSAoQkNfTElOS19JTklUIHwgQkNfTElOS19DQVBfRU4gfCBCQ19MSU5LX0ZNVF9DSEcpLAorfTsKKworc3RydWN0IGNyeXN0YWxoZF91c2VyIHsKKwl1aW50MzJfdAl1aWQ7CisJdWludDMyX3QJaW5fdXNlOworCXVpbnQzMl90CW1vZGU7Cit9OworCisjZGVmaW5lIERUU19NT0RFX0lOVgkoLTEpCisKK3N0cnVjdCBjcnlzdGFsaGRfY21kIHsKKwl1aW50MzJfdAkJc3RhdGU7CisJc3RydWN0IGNyeXN0YWxoZF9hZHAJKmFkcDsKKwlzdHJ1Y3QgY3J5c3RhbGhkX3VzZXIJdXNlcltCQ19MSU5LX01BWF9PUEVOU107CisKKwlzcGlubG9ja190CQljdHhfbG9jazsKKwl1aW50MzJfdAkJdHhfbGlzdF9pZDsKKwl1aW50MzJfdAkJY2luX3dhaXRfZXhpdDsKKwl1aW50MzJfdAkJcHdyX3N0YXRlX2NoYW5nZTsKKwlzdHJ1Y3QgY3J5c3RhbGhkX2h3CWh3X2N0eDsKK307CisKK3R5cGVkZWYgQkNfU1RBVFVTICgqY3J5c3RhbGhkX2NtZF9wcm9jKShzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqLCBjcnlzdGFsaGRfaW9jdGxfZGF0YSAqKTsKKwordHlwZWRlZiBzdHJ1Y3QgX2NyeXN0YWxoZF9jbWRfdGJsIHsKKwl1aW50MzJfdAkJY21kX2lkOworCWNvbnN0IGNyeXN0YWxoZF9jbWRfcHJvYwljbWRfcHJvYzsKKwl1aW50MzJfdAkJYmxvY2tfbW9uOworfSBjcnlzdGFsaGRfY21kX3RibF90OworCisKK0JDX1NUQVRVUyBjcnlzdGFsaGRfc3VzcGVuZChzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4LCBjcnlzdGFsaGRfaW9jdGxfZGF0YSAqaWRhdGEpOworQkNfU1RBVFVTIGNyeXN0YWxoZF9yZXN1bWUoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCk7CitjcnlzdGFsaGRfY21kX3Byb2MgY3J5c3RhbGhkX2dldF9jbWRfcHJvYyhzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4LCB1aW50MzJfdCBjbWQsCisJCQkJICAgICAgc3RydWN0IGNyeXN0YWxoZF91c2VyICp1Yyk7CitCQ19TVEFUVVMgY3J5c3RhbGhkX3VzZXJfb3BlbihzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4LCBzdHJ1Y3QgY3J5c3RhbGhkX3VzZXIgKip1c2VyX2N0eCk7CitCQ19TVEFUVVMgY3J5c3RhbGhkX3VzZXJfY2xvc2Uoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCwgc3RydWN0IGNyeXN0YWxoZF91c2VyICp1Yyk7CitCQ19TVEFUVVMgY3J5c3RhbGhkX3NldHVwX2NtZF9jb250ZXh0KHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgsIHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHApOworQkNfU1RBVFVTIGNyeXN0YWxoZF9kZWxldGVfY21kX2NvbnRleHQoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCk7Citib29sIGNyeXN0YWxoZF9jbWRfaW50ZXJydXB0KHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2Z3X2lmLmggYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9md19pZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MWNkMTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9md19pZi5oCkBAIC0wLDAgKzEsMzY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSwgQnJvYWRjb20gQ29ycG9yYXRpb24uCisgKgorICogIE5hbWU6IGNyeXN0YWxoZF9md19pZiAuIGgKKyAqCisgKiAgRGVzY3JpcHRpb246CisgKgkJQkNNNzAwMTIgRmlybXdhcmUgaW50ZXJmYWNlIGRlZmluaXRpb25zLgorICoKKyAqICBISVNUT1JZOgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgY3J5c3RhbGhkIGRldmljZSBkcml2ZXIuCisgKgorICogVGhpcyBkcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBkcml2ZXIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfQ1JZU1RBTEhEX0ZXX0lGX0hfCisjZGVmaW5lIF9DUllTVEFMSERfRldfSUZfSF8KKworLyogVEJEOiBQdWxsIGluIG9ubHkgcmVxdWlyZWQgZGVmcyBpbnRvIHRoaXMgZmlsZS4uICovCisKKworCisvKiBVc2VyIERhdGEgSGVhZGVyICovCit0eXBlZGVmIHN0cnVjdCB1c2VyX2RhdGEgeworICAgc3RydWN0IHVzZXJfZGF0YQkqbmV4dDsKKyAgIHVpbnQzMl90CQl0eXBlOworICAgdWludDMyX3QJCXNpemU7Cit9IFVEX0hEUjsKKworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogICAgTVBFRyBFeHRlbnNpb24gdG8gdGhlIFBQQgkJCSAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit0eXBlZGVmIHN0cnVjdCB7CisgICB1aW50MzJfdAkJdG9fYmVfZGVmaW5lZDsKKyAgIHVpbnQzMl90CQl2YWxpZDsKKworICAgLyogQWx3YXlzIHZhbGlkLCBkZWZhdWx0cyB0byBwaWN0dXJlIHNpemUgaWYgbm8KKyAgICAgIHNlcXVlbmNlIGRpc3BsYXkgZXh0ZW5zaW9uIGluIHRoZSBzdHJlYW0uICovCisgICB1aW50MzJfdAkJZGlzcGxheV9ob3Jpem9udGFsX3NpemU7CisgICB1aW50MzJfdAkJZGlzcGxheV92ZXJ0aWNhbF9zaXplOworCisgICAvKiBNUEVHX1ZBTElEX1BBTlNDQU4KKyAgICAgIE9mZnNldHMgYXJlIGEgY29weSB2YWx1ZXMgZnJvbSB0aGUgTVBFRyBzdHJlYW0uICovCisgICB1aW50MzJfdAkJb2Zmc2V0X2NvdW50OworICAgaW50MzJfdAkJaG9yaXpvbnRhbF9vZmZzZXRbM107CisgICBpbnQzMl90CQl2ZXJ0aWNhbF9vZmZzZXRbM107CisKKyAgIC8qIE1QRUdfVkFMSURfVVNFUkRBVEEKKyAgICAgIFVzZXIgZGF0YSBpcyBpbiB0aGUgZm9ybSBvZiBhIGxpbmtlZCBsaXN0LiAqLworICAgaW50MzJfdAkJdXNlckRhdGFTaXplOworICAgVURfSERSCQkqdXNlckRhdGE7CisKK30gUFBCX01QRUc7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiAgICBWQzEgRXh0ZW5zaW9uIHRvIHRoZSBQUEIJCQkgICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIHVpbnQzMl90CQl0b19iZV9kZWZpbmVkOworICAgdWludDMyX3QJCXZhbGlkOworCisgICAvKiBBbHdheXMgdmFsaWQsIGRlZmF1bHRzIHRvIHBpY3R1cmUgc2l6ZSBpZiBubworICAgICAgc2VxdWVuY2UgZGlzcGxheSBleHRlbnNpb24gaW4gdGhlIHN0cmVhbS4gKi8KKyAgIHVpbnQzMl90CQlkaXNwbGF5X2hvcml6b250YWxfc2l6ZTsKKyAgIHVpbnQzMl90CQlkaXNwbGF5X3ZlcnRpY2FsX3NpemU7CisKKyAgLyogVkMxIHBhbiBzY2FuIHdpbmRvd3MgKi8KKyAgIHVpbnQzMl90CQludW1fcGFuc2Nhbl93aW5kb3dzOworICAgaW50MzJfdAkJcHNfaG9yaXpfb2Zmc2V0WzRdOworICAgaW50MzJfdAkJcHNfdmVydF9vZmZzZXRbNF07CisgICBpbnQzMl90CQlwc193aWR0aFs0XTsKKyAgIGludDMyX3QJCXBzX2hlaWdodFs0XTsKKworICAgLyogVkMxX1ZBTElEX1VTRVJEQVRBCisgICAgICBVc2VyIGRhdGEgaXMgaW4gdGhlIGZvcm0gb2YgYSBsaW5rZWQgbGlzdC4gKi8KKyAgIGludDMyX3QJCXVzZXJEYXRhU2l6ZTsKKyAgIFVEX0hEUgkJKnVzZXJEYXRhOworCit9IFBQQl9WQzE7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogICAgSC4yNjQgRXh0ZW5zaW9uIHRvIHRoZSBQUEIJCQkqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogQGJyaWVmIEZpbG0gZ3JhaW4gU0VJIG1lc3NhZ2UuCisgKgorICogQ29udGVudCBvZiB0aGUgZmlsbSBncmFpbiBTRUkgbWVzc2FnZS4KKyAqLworCisvKiBtYXhpbXVtIG51bWJlciBvZiBtb2RlbC12YWx1ZXMgYXMgZm9yIFRob21zb24gc3BlYyhzdGFuZGFyZCBzYXlzIDUpICovCisjZGVmaW5lIE1BWF9GR1RfTU9ERUxfVkFMVUUJICgzKQorCisvKiBtYXhpbXVtIG51bWJlciBvZiBpbnRlcnZhbHMoYXMgbWFueSBhcyAyNTYgaW50ZXJ2YWxzPykgKi8KKyNkZWZpbmUgTUFYX0ZHVF9WQUxVRV9JTlRFUlZBTAkoMjU2KQorCit0eXBlZGVmIHN0cnVjdCBGR1RfU0VJIHsKKyAgICBzdHJ1Y3QgRkdUX1NFSSAqbmV4dDsKKyAgICB1bnNpZ25lZCBjaGFyIG1vZGVsX3ZhbHVlc1szXVtNQVhfRkdUX1ZBTFVFX0lOVEVSVkFMXVtNQVhfRkdUX01PREVMX1ZBTFVFXTsKKyAgICB1bnNpZ25lZCBjaGFyIHVwcGVyX2JvdW5kWzNdW01BWF9GR1RfVkFMVUVfSU5URVJWQUxdOworICAgIHVuc2lnbmVkIGNoYXIgbG93ZXJfYm91bmRbM11bTUFYX0ZHVF9WQUxVRV9JTlRFUlZBTF07CisKKyAgICB1bnNpZ25lZCBjaGFyIGNhbmNlbF9mbGFnOwkvKiBDYW5jZWwgZmxhZzogMSBubyBmaWxtIGdyYWluLiAqLworICAgIHVuc2lnbmVkIGNoYXIgbW9kZWxfaWQ7CS8qIE1vZGVsIGlkLiAqLworCisgICAgLyogK3VudXNlZCBTRSBiYXNlZCBvbiBUaG9tc29uIHNwZWMgKi8KKyAgICB1bnNpZ25lZCBjaGFyIGNvbG9yX2Rlc2NfZmxhZzsJLyogU2VwYXJhdGUgY29sb3IgZGVzY3JpdGlvbiBmbGFnLiAqLworICAgIHVuc2lnbmVkIGNoYXIgYml0X2RlcHRoX2x1bWE7CS8qIEJpdCBkZXB0aCBsdW1hIG1pbnVzIDguICovCisgICAgdW5zaWduZWQgY2hhciBiaXRfZGVwdGhfY2hyb21hOwkvKiBCaXQgZGVwdGggY2hyb21hIG1pbnVzIDguICovCisgICAgdW5zaWduZWQgY2hhciBmdWxsX3JhbmdlX2ZsYWc7CS8qIEZ1bGwgcmFuZ2UgZmxhZy4gKi8KKyAgICB1bnNpZ25lZCBjaGFyIGNvbG9yX3ByaW1hcmllczsJLyogQ29sb3IgcHJpbWFyaWVzLiAqLworICAgIHVuc2lnbmVkIGNoYXIgdHJhbnNmZXJfY2hhcmFjdDsJLyogVHJhbnNmZXIgY2hhcmFjdGVyaXN0aWNzLiAqLworICAgIHVuc2lnbmVkIGNoYXIgbWF0cml4X2NvZWZmOwkJLyo8IE1hdHJpeCBjb2VmZmljaWVudHMuICovCisgICAgLyogLXVudXNlZCBTRSBiYXNlZCBvbiBUaG9tc29uIHNwZWMgKi8KKworICAgIHVuc2lnbmVkIGNoYXIgYmxlbmRpbmdfbW9kZV9pZDsJLyogQmxlbmRpbmcgbW9kZS4gKi8KKyAgICB1bnNpZ25lZCBjaGFyIGxvZzJfc2NhbGVfZmFjdG9yOwkvKiBMb2cyIHNjYWxlIGZhY3RvciAoMi03KS4gKi8KKyAgICB1bnNpZ25lZCBjaGFyIGNvbXBfZmxhZ1szXTsJCS8qIENvbXBvbmVudHMgWzAsMl0gcGFyYW1ldGVycyBwcmVzZW50IGZsYWcuICovCisgICAgdW5zaWduZWQgY2hhciBudW1faW50ZXJ2YWxzX21pbnVzMVszXTsgLyogTnVtYmVyIG9mIGludGVuc2l0eSBsZXZlbCBpbnRlcnZhbHMuICovCisgICAgdW5zaWduZWQgY2hhciBudW1fbW9kZWxfdmFsdWVzWzNdOwkvKiBOdW1iZXIgb2YgbW9kZWwgdmFsdWVzLiAqLworICAgIHVpbnQxNl90ICAgICAgcmVwZXRpdGlvbl9wZXJpb2Q7CS8qIFJlcGV0aXRpb24gcGVyaW9kICgwLTE2Mzg0KSAqLworCit9IEZHVF9TRUk7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIC8qICd2YWxpZCcgc3BlY2lmaWVzIHdoaWNoIGZpZWxkcyAob3Igc2V0cyBvZgorICAgICogZmllbGRzKSBiZWxvdyBhcmUgdmFsaWQuICBJZiB0aGUgY29ycmVzcG9uZGluZworICAgICogYml0IGluICd2YWxpZCcgaXMgTk9UIHNldCB0aGVuIHRoYXQgZmllbGQocykKKyAgICAqIGlzIChhcmUpIG5vdCBpbml0aWFsaXplZC4gKi8KKyAgIHVpbnQzMl90CXZhbGlkOworCisgICBpbnQzMl90CQlwb2NfdG9wOwkvKiBQT0MgZm9yIFRvcCBGaWVsZC9GcmFtZSAqLworICAgaW50MzJfdAkJcG9jX2JvdHRvbTsJLyogUE9DIGZvciBCb3R0b20gRmllbGQgICAgKi8KKyAgIHVpbnQzMl90CQlpZHJfcGljX2lkOworCisgICAvKiBIMjY0X1ZBTElEX1BBTlNDQU4gKi8KKyAgIHVpbnQzMl90CQlwYW5fc2Nhbl9jb3VudDsKKyAgIGludDMyX3QJCXBhbl9zY2FuX2xlZnRbM107CisgICBpbnQzMl90CQlwYW5fc2Nhbl9yaWdodFszXTsKKyAgIGludDMyX3QJCXBhbl9zY2FuX3RvcFszXTsKKyAgIGludDMyX3QJCXBhbl9zY2FuX2JvdHRvbVszXTsKKworICAgLyogSDI2NF9WQUxJRF9DVF9UWVBFICovCisgICB1aW50MzJfdAkJY3RfdHlwZV9jb3VudDsKKyAgIHVpbnQzMl90CQljdF90eXBlWzNdOworCisgICAvKiBIMjY0X1ZBTElEX1NQU19DUk9QICovCisgICBpbnQzMl90CQlzcHNfY3JvcF9sZWZ0OworICAgaW50MzJfdAkJc3BzX2Nyb3BfcmlnaHQ7CisgICBpbnQzMl90CQlzcHNfY3JvcF90b3A7CisgICBpbnQzMl90CQlzcHNfY3JvcF9ib3R0b207CisKKyAgIC8qIEgyNjRfVkFMSURfVlVJICovCisgICB1aW50MzJfdAkJY2hyb21hX3RvcDsKKyAgIHVpbnQzMl90CQljaHJvbWFfYm90dG9tOworCisgICAvKiBIMjY0X1ZBTElEX1VTRVIgKi8KKyAgIHVpbnQzMl90CQl1c2VyX2RhdGFfc2l6ZTsKKyAgIFVEX0hEUgkJKnVzZXJfZGF0YTsKKworICAgLyogSDI2NCBWQUxJRCBGR1QgKi8KKyAgIEZHVF9TRUkJCSpwZmd0OworCit9IFBQQl9IMjY0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAvKiBDb21tb24gZmllbGRzLiAqLworICAgdWludDMyX3QJcGljdHVyZV9udW1iZXI7CS8qIE9yZGluYWwgZGlzcGxheSBudW1iZXIgKi8KKyAgIHVpbnQzMl90CXZpZGVvX2J1ZmZlcjsJLyogVmlkZW8gKHBpY2J1ZikgbnVtYmVyICovCisgICB1aW50MzJfdAl2aWRlb19hZGRyZXNzOwkvKiBBZGRyZXNzIG9mIHBpY2J1ZiBZICovCisgICB1aW50MzJfdAl2aWRlb19hZGRyZXNzX3V2OyAvKiBBZGRyZXNzIG9mIHBpY2J1ZiBVViAqLworICAgdWludDMyX3QJdmlkZW9fc3RyaXBlOwkvKiBQaWNidWYgc3RyaXBlICovCisgICB1aW50MzJfdAl2aWRlb193aWR0aDsJLyogUGljYnVmIHdpZHRoICovCisgICB1aW50MzJfdAl2aWRlb19oZWlnaHQ7CS8qIFBpY2J1ZiBoZWlnaHQgKi8KKworICAgdWludDMyX3QJY2hhbm5lbF9pZDsJLyogRGVjb2RlciBjaGFubmVsIElEICovCisgICB1aW50MzJfdAlzdGF0dXM7CQkvKiByZXNlcnZlZCAqLworICAgdWludDMyX3QJd2lkdGg7CQkvKiBwaXhlbHMgKi8KKyAgIHVpbnQzMl90CWhlaWdodDsJCS8qIHBpeGVscyAqLworICAgdWludDMyX3QJY2hyb21hX2Zvcm1hdDsJLyogc2VlIGFib3ZlICovCisgICB1aW50MzJfdAlwdWxsZG93bjsJLyogc2VlIGFib3ZlICovCisgICB1aW50MzJfdAlmbGFnczsJCS8qIHNlZSBhYm92ZSAqLworICAgdWludDMyX3QJcHRzOwkJLyogMzIgTFNCcyBvZiBQVFMgKi8KKyAgIHVpbnQzMl90CXByb3RvY29sOwkvKiBwcm90b2NvbFhYWCAoYWJvdmUpICovCisKKyAgIHVpbnQzMl90CWZyYW1lX3JhdGU7CS8qIHNlZSBhYm92ZSAqLworICAgdWludDMyX3QJbWF0cml4X2NvZWZmOwkvKiBzZWUgYWJvdmUgKi8KKyAgIHVpbnQzMl90CWFzcGVjdF9yYXRpbzsJLyogc2VlIGFib3ZlICovCisgICB1aW50MzJfdAljb2xvdXJfcHJpbWFyaWVzOyAvKiBzZWUgYWJvdmUgKi8KKyAgIHVpbnQzMl90CXRyYW5zZmVyX2NoYXI7CS8qIHNlZSBhYm92ZSAqLworICAgdWludDMyX3QJcGNyX29mZnNldDsJLyogNDVrSHogaWYgUENSIHR5cGU7IGVsc2UgMjdNSHogKi8KKyAgIHVpbnQzMl90CW5fZHJvcDsJCS8qIE51bWJlciBvZiBwaWN0dXJlcyB0byBiZSBkcm9wcGVkICovCisKKyAgIHVpbnQzMl90CWN1c3RvbV9hc3BlY3RfcmF0aW9fd2lkdGhfaGVpZ2h0OworCQkJLyogdXBwZXIgMTYtYml0cyBpcyBZIGFuZCBsb3dlciAxNi1iaXRzIGlzIFggKi8KKworICAgdWludDMyX3QJcGljdHVyZV90YWc7CS8qIEluZGV4aW5nIHRhZyBmcm9tIEJVRCBwYWNrZXRzICovCisgICB1aW50MzJfdAlwaWN0dXJlX2RvbmVfcGF5bG9hZDsKKyAgIHVpbnQzMl90CXBpY3R1cmVfbWV0YV9wYXlsb2FkOworICAgdWludDMyX3QJcmVzZXJ2ZWRbMV07CisKKyAgIC8qIFByb3RvY29sLXNwZWNpZmljIGV4dGVuc2lvbnMuICovCisgICB1bmlvbiB7CisgICAgICBQUEJfSDI2NAloMjY0OworICAgICAgUFBCX01QRUcJbXBlZzsKKyAgICAgIFBQQl9WQzEJIHZjMTsKKyAgIH0gb3RoZXI7CisKK30gUFBCOworCit0eXBlZGVmIHN0cnVjdCB7CisgICB1aW50MzJfdAliRm9ybWF0Q2hhbmdlOworICAgdWludDMyX3QJcmVzb2x1dGlvbjsKKyAgIHVpbnQzMl90CWNoYW5uZWxJZDsKKyAgIHVpbnQzMl90CXBwYlB0cjsKKyAgIGludDMyX3QJcHRzU3RjT2Zmc2V0OworICAgdWludDMyX3QJemVyb1BhbnNjYW5WYWxpZDsKKyAgIHVpbnQzMl90CWRyYW1PdXRCdWZBZGRyOworICAgdWludDMyX3QJeUNvbXBvbmVudDsKKyAgIFBQQgkJCXBwYjsKKworfSBDMDExX1BJQjsKKworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1aW50MzJfdAljb21tYW5kOworICAgIHVpbnQzMl90CXNlcXVlbmNlOworICAgIHVpbnQzMl90CXN0YXR1czsKKyAgICB1aW50MzJfdAlwaWNCdWY7CisgICAgdWludDMyX3QJcGljUmVsQnVmOworICAgIHVpbnQzMl90CXBpY0luZm9EZWxpdmVyeVE7CisgICAgdWludDMyX3QJcGljSW5mb1JlbGVhc2VROworICAgIHVpbnQzMl90CWNoYW5uZWxTdGF0dXM7CisgICAgdWludDMyX3QJdXNlckRhdGFEZWxpdmVyeVE7CisgICAgdWludDMyX3QJdXNlckRhdGFSZWxlYXNlUTsKKyAgICB1aW50MzJfdAl0cmFuc3BvcnRTdHJlYW1DYXB0dXJlQWRkcjsKKyAgICB1aW50MzJfdAlhc3luY0V2ZW50UTsKKworfSBEZWNSc3BDaGFubmVsU3RhcnRWaWRlbzsKKworI2RlZmluZSBlQ01EX0MwMTFfQ01EX0JBU0UJICAoMHg3Mzc2MzAwMCkKKworLyogaG9zdCBjb21tYW5kcyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBlQ01EX1RTX0dFVF9ORVhUX1BJQwk9IDB4NzM3NkYxMDAsIC8qIGRlYnVnIGdldCBuZXh0IHBpY3R1cmUgKi8KKyAgICBlQ01EX1RTX0dFVF9MQVNUX1BJQwk9IDB4NzM3NkYxMDIsIC8qIGRlYnVnIGdldCBsYXN0IHBpYyBzdGF0dXMgKi8KKyAgICBlQ01EX1RTX1JFQURfV1JJVEVfTUVNCT0gMHg3Mzc2RjEwNCwgLyogZGVidWcgcmVhZCB3cml0ZSBtZW1vcnkgKi8KKworICAgIC8qIE5ldyBBUEkgY29tbWFuZHMgKi8KKyAgICAvKiBHZW5lcmFsIGNvbW1hbmRzICovCisgICAgZUNNRF9DMDExX0lOSVQJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgwMSwKKyAgICBlQ01EX0MwMTFfUkVTRVQJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgwMiwKKyAgICBlQ01EX0MwMTFfU0VMRl9URVNUCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MDMsCisgICAgZUNNRF9DMDExX0dFVF9WRVJTSU9OCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgwNCwKKyAgICBlQ01EX0MwMTFfR1BJTwkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDA1LAorICAgIGVDTURfQzAxMV9ERUJVR19TRVRVUAk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MDYsCisKKyAgICAvKiBEZWNvZGluZyBjb21tYW5kcyAqLworICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9PUEVOCQkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDEwMCwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fQ0xPU0UJCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTAxLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9BQ1RJVkFURQkJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMDIsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NUQVRVUwkJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMDMsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX0ZMVVNICQkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDEwNCwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fVFJJQ0tfUExBWQkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDEwNSwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fVFNfUElEUwkJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMDYsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1BTX1NUUkVBTV9JRAkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDEwNywKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fSU5QVVRfUEFSQU1TCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTA4LAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9WSURFT19PVVRQVVQJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMDksCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX09VVFBVVF9GT1JNQVQJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMEEsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NDQUxJTkdfRklMVEVSUwkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDEwQiwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fT1NEX01PREUJCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTBELAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9EUk9QCQkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDEwRSwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fUkVMRUFTRQkJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMEYsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NUUkVBTV9TRVRUSU5HUwkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDExMCwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fUEFVU0VfT1VUUFVUCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTExLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9DSEFOR0UJCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTEyLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfU1RDCQkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDExMywKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fU0VUX1BUUwkJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMTQsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX0NDX01PREUJCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTE1LAorICAgIGVDTURfQzAxMV9ERUNfQ1JFQVRFX0FVRElPX0NPTlRFWFQJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMTYsCisgICAgZUNNRF9DMDExX0RFQ19DT1BZX0FVRElPX0NPTlRFWFQJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMTcsCisgICAgZUNNRF9DMDExX0RFQ19ERUxFVEVfQVVESU9fQ09OVEVYVAkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDExOCwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fU0VUX0RFQ1lQVElPTgkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDExOSwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fU1RBUlRfVklERU8JCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMUEsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NUT1BfVklERU8JCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMUIsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1BJQ19DQVBUVVJFCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTFDLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9QQVVTRQkJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMUQsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1BBVVNFX1NUQVRFCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTFFLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfU0xPV01fUkFURQkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDExRiwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fR0VUX1NMT1dNX1JBVEUJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMjAsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NFVF9GRl9SQVRFCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTIxLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9HRVRfRkZfUkFURQkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDEyMiwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fRlJBTUVfQURWQU5DRQkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDEyMywKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fU0VUX1NLSVBfUElDX01PREUJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDEyNCwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fR0VUX1NLSVBfUElDX01PREUJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDEyNSwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fRklMTF9QSUNfQlVGCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTI2LAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfQ09OVElOVUlUWV9DSEVDSwk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTI3LAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9HRVRfQ09OVElOVUlUWV9DSEVDSwk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTI4LAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfQlJDTV9UUklDS19NT0RFCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMjksCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX0dFVF9CUkNNX1RSSUNLX01PREUJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDEyQSwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fUkVWRVJTRV9GSUVMRF9TVEFUVVMJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDEyQiwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fSV9QSUNUVVJFX0ZPVU5ECQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTJDLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfUEFSQU1FVEVSCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTJELAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfVVNFUl9EQVRBX01PREUJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDEyRSwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fU0VUX1BBVVNFX0RJU1BMQVlfTU9ERQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTJGLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfU0xPV19ESVNQTEFZX01PREUJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDEzMCwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fU0VUX0ZGX0RJU1BMQVlfTU9ERQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTMxLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfRElTUExBWV9USU1JTkdfTU9ERQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTMyLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfRElTUExBWV9NT0RFCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTMzLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9HRVRfRElTUExBWV9NT0RFCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTM0LAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfUkVWRVJTRV9GSUVMRAk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTM1LAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TVFJFQU1fT1BFTgkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDEzNiwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fU0VUX1BDUl9QSUQJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMzcsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NFVF9WSURfUElECQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTM4LAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfUEFOX1NDQU5fTU9ERQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTM5LAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TVEFSVF9ESVNQTEFZX0FUX1BUUwk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTQwLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TVE9QX0RJU1BMQVlfQVRfUFRTCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxNDEsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NFVF9ESVNQTEFZX09SREVSCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxNDIsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX0dFVF9ESVNQTEFZX09SREVSCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxNDMsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NFVF9IT1NUX1RSSUNLX01PREUJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDE0NCwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fU0VUX09QRVJBVElPTl9NT0RFCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxNDUsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX0RJU1BMQVlfUEFVU0VfVU5UT19QVFMJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDE0NiwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fU0VUX1BUU19TVENfRElGRl9USFJFU0hPTEQgPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDE0NywKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fU0VORF9DT01QUkVTU0VEX0JVRgk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTQ4LAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfQ0xJUFBJTkcJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxNDksCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NFVF9QQVJBTUVURVJTX0ZPUl9IQVJEX1JFU0VUX0lOVEVSUlVQVF9UT19IT1NUCisJCQkJCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTUwLAorCisgICAgLyogRGVjb2RlciBSZXZEIGNvbW1hbmRzICovCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NFVF9DU0MJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDE4MCwgLyogY29sb3Igc3BhY2UgY29udmVyc2lvbiAqLworICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfUkFOR0VfUkVNQVAJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDE4MSwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fU0VUX0ZHVAkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDE4MiwKKyAgICAvKiBOb3RlOiAweDE4MyBub3QgaW1wbGVtZW50ZWQgeWV0IGluIFJldiBEIG1haW4gKi8KKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fU0VUX0xBU1RQSUNUVVJFX1BBRERJTkcgPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDE4MywKKworICAgIC8qIERlY29kZXIgNzQxMiBjb21tYW5kcyAoNzQxMi1vbmx5KSAqLworICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfQ09OVEVOVF9LRVkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDE5MCwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fU0VUX1NFU1NJT05fS0VZCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxOTEsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX0ZNVF9DSEFOR0VfQUNLCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxOTIsCisKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fQ1VTVE9NX1ZJRE9VVCAgICA9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MUZGLAorCisgICAgLyogRW5jb2RpbmcgY29tbWFuZHMgKi8KKyAgICBlQ01EX0MwMTFfRU5DX0NIQU5fT1BFTgkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDIwMCwKKyAgICBlQ01EX0MwMTFfRU5DX0NIQU5fQ0xPU0UJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgyMDEsCisgICAgZUNNRF9DMDExX0VOQ19DSEFOX0FDVElWQVRFCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MjAyLAorICAgIGVDTURfQzAxMV9FTkNfQ0hBTl9DT05UUk9MCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MjAzLAorICAgIGVDTURfQzAxMV9FTkNfQ0hBTl9TVEFUSVNUSUNTCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgyMDQsCisKKyAgICBlTk9USUZZX0MwMTFfRU5DX0NIQU5fRVZFTlQJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgyMTAsCisKK30gZUMwMTFfVFNfQ01EOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2h3LmMgYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9ody5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxODE5ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9ody5jCkBAIC0wLDAgKzEsMjM5NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDksIEJyb2FkY29tIENvcnBvcmF0aW9uLgorICoKKyAqICBOYW1lOiBjcnlzdGFsaGRfaHcgLiBjCisgKgorICogIERlc2NyaXB0aW9uOgorICoJCUJDTTcwMDEwIExpbnV4IGRyaXZlciBIVyBsYXllci4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGNyeXN0YWxoZCBkZXZpY2UgZHJpdmVyLgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBkcml2ZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgZHJpdmVyLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgImNyeXN0YWxoZF9ody5oIgorCisvKiBGdW5jdGlvbnMgaW50ZXJuYWwgdG8gdGhpcyBmaWxlICovCisKK3N0YXRpYyB2b2lkIGNyeXN0YWxoZF9lbmFibGVfdWFydHMoc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCkKK3sKKwliY19kZWNfcmVnX3dyKGFkcCwgVWFydFNlbGVjdEEsIEJTVlNfVUFSVF9TVFJFQU0pOworCWJjX2RlY19yZWdfd3IoYWRwLCBVYXJ0U2VsZWN0QiwgQlNWU19VQVJUX0RFQ19PVVRFUik7Cit9CisKKworc3RhdGljIHZvaWQgY3J5c3RhbGhkX3N0YXJ0X2RyYW0oc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCkKK3sKKwliY19kZWNfcmVnX3dyKGFkcCwgU0RSQU1fUEFSQU0sICgoNDAgLyA1IC0gMSkgPDwgIDApIHwKKwkvKiB0cmFzICg0MG5zIHRyYXMpLyg1bnMgcGVyaW9kKSAtMSAoKDE1LzUgLSAxKSA8PCAgNCkgfCAvLyB0cmNkICovCisJCSAgICAgICgoMTUgLyA1IC0gMSkgPDwgIDcpIHwJLyogdHJwICovCisJCSAgICAgICgoMTAgLyA1IC0gMSkgPDwgMTApIHwJLyogdHJyZCAqLworCQkgICAgICAoKDE1IC8gNSArIDEpIDw8IDEyKSB8CS8qIHR3ciAqLworCQkgICAgICAoKDIgKyAxKSA8PCAxNikgfAkJLyogdHd0ciAqLworCQkgICAgICAoKDcwIC8gNSAtIDIpIDw8IDE5KSB8CS8qIHRyZmMgKi8KKwkJICAgICAgKDAgPDwgMjMpKTsKKworCWJjX2RlY19yZWdfd3IoYWRwLCBTRFJBTV9QUkVDSEFSR0UsIDApOworCWJjX2RlY19yZWdfd3IoYWRwLCBTRFJBTV9FWFRfTU9ERSwgMik7CisJYmNfZGVjX3JlZ193cihhZHAsIFNEUkFNX01PREUsIDB4MTMyKTsKKwliY19kZWNfcmVnX3dyKGFkcCwgU0RSQU1fUFJFQ0hBUkdFLCAwKTsKKwliY19kZWNfcmVnX3dyKGFkcCwgU0RSQU1fUkVGUkVTSCwgMCk7CisJYmNfZGVjX3JlZ193cihhZHAsIFNEUkFNX1JFRlJFU0gsIDApOworCWJjX2RlY19yZWdfd3IoYWRwLCBTRFJBTV9NT0RFLCAweDMyKTsKKwkvKiBzZXR0aW5nIHRoZSByZWZyZXNoIHJhdGUgaGVyZSAqLworCWJjX2RlY19yZWdfd3IoYWRwLCBTRFJBTV9SRUZfUEFSQU0sICgoMSA8PCAxMikgfCA5NikpOworfQorCisKK3N0YXRpYyBib29sIGNyeXN0YWxoZF9icmluZ19vdXRfb2ZfcnN0KHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHApCit7CisJbGlua19taXNjX3BlcnN0X2RlY29fY3RybCByc3RfZGVjb19jbnRybDsKKwlsaW5rX21pc2NfcGVyc3RfY2xrX2N0cmwgcnN0X2Nsa19jbnRybDsKKwl1aW50MzJfdCB0ZW1wOworCisJLyoKKwkgKiBMaW5rIGNsb2NrczogTUlTQ19QRVJTVF9DTE9DS19DVFJMIENsZWFyIFBMTCBwb3dlciBkb3duIGJpdCwKKwkgKiBkZWxheSB0byBhbGxvdyBQTEwgdG8gbG9jayBDbGVhciBhbHRlcm5hdGUgY2xvY2ssIHN0b3AgY2xvY2sgYml0cworCSAqLworCXJzdF9jbGtfY250cmwud2hvbGVfcmVnID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIE1JU0NfUEVSU1RfQ0xPQ0tfQ1RSTCk7CisJcnN0X2Nsa19jbnRybC5wbGxfcHdyX2RuID0gMDsKKwljcnlzdGFsaGRfcmVnX3dyKGFkcCwgTUlTQ19QRVJTVF9DTE9DS19DVFJMLCByc3RfY2xrX2NudHJsLndob2xlX3JlZyk7CisJbXNsZWVwX2ludGVycnVwdGlibGUoNTApOworCisJcnN0X2Nsa19jbnRybC53aG9sZV9yZWcgPSBjcnlzdGFsaGRfcmVnX3JkKGFkcCwgTUlTQ19QRVJTVF9DTE9DS19DVFJMKTsKKwlyc3RfY2xrX2NudHJsLnN0b3BfY29yZV9jbGsgPSAwOworCXJzdF9jbGtfY250cmwuc2VsX2FsdF9jbGsgPSAwOworCisJY3J5c3RhbGhkX3JlZ193cihhZHAsIE1JU0NfUEVSU1RfQ0xPQ0tfQ1RSTCwgcnN0X2Nsa19jbnRybC53aG9sZV9yZWcpOworCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDUwKTsKKworCS8qCisJICogQnVzIEFyYml0ZXIgVGltZW91dDogR0lTQl9BUkJJVEVSX1RJTUVSCisJICogU2V0IGludGVybmFsIGJ1cyBhcmJpdGVyIHRpbWVvdXQgdG8gNDB1cyBiYXNlZCBvbiBjb3JlIGNsb2NrIHNwZWVkCisJICogKDYzTUh6ICogNDB1cyA9IDB4OUQ4KQorCSAqLworCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBHSVNCX0FSQklURVJfVElNRVIsIDB4OUQ4KTsKKworCS8qCisJICogRGVjb2RlciBjbG9ja3M6IE1JU0NfUEVSU1RfREVDT0RFUl9DVFJMCisJICogRW5hYmxlIGNsb2NrcyB3aGlsZSA3NDEyIHJlc2V0IGlzIGFzc2VydGVkLCBkZWxheQorCSAqIERlLWFzc2VydCA3NDEyIHJlc2V0CisJICovCisJcnN0X2RlY29fY250cmwud2hvbGVfcmVnID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIE1JU0NfUEVSU1RfREVDT0RFUl9DVFJMKTsKKwlyc3RfZGVjb19jbnRybC5zdG9wX2JjbV83NDEyX2NsayA9IDA7CisJcnN0X2RlY29fY250cmwuYmNtNzQxMl9yc3QgPSAxOworCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBNSVNDX1BFUlNUX0RFQ09ERVJfQ1RSTCwgcnN0X2RlY29fY250cmwud2hvbGVfcmVnKTsKKwltc2xlZXBfaW50ZXJydXB0aWJsZSgxMCk7CisKKwlyc3RfZGVjb19jbnRybC53aG9sZV9yZWcgPSBjcnlzdGFsaGRfcmVnX3JkKGFkcCwgTUlTQ19QRVJTVF9ERUNPREVSX0NUUkwpOworCXJzdF9kZWNvX2NudHJsLmJjbTc0MTJfcnN0ID0gMDsKKwljcnlzdGFsaGRfcmVnX3dyKGFkcCwgTUlTQ19QRVJTVF9ERUNPREVSX0NUUkwsIHJzdF9kZWNvX2NudHJsLndob2xlX3JlZyk7CisJbXNsZWVwX2ludGVycnVwdGlibGUoNTApOworCisJLyogRGlzYWJsZSBPVFBfQ09OVEVOVF9NSVNDIHRvIDAgdG8gZGlzYWJsZSBhbGwgc2VjdXJlIG1vZGVzICovCisJY3J5c3RhbGhkX3JlZ193cihhZHAsIE9UUF9DT05URU5UX01JU0MsIDApOworCisJLyogQ2xlYXIgYml0IDI5IG9mIDB4NDA0ICovCisJdGVtcCA9IGNyeXN0YWxoZF9yZWdfcmQoYWRwLCBQQ0lFX1RMX1RSQU5TQUNUSU9OX0NPTkZJR1VSQVRJT04pOworCXRlbXAgJj0gfkJDX0JJVCgyOSk7CisJY3J5c3RhbGhkX3JlZ193cihhZHAsIFBDSUVfVExfVFJBTlNBQ1RJT05fQ09ORklHVVJBVElPTiwgdGVtcCk7CisKKwkvKiAyLjVWIHJlZ3VsYXRvciBtdXN0IGJlIHNldCB0byAyLjYgdm9sdHMgKCs2JSkgKi8KKwkvKiBGSVhNRTogamFyb2Q6IHdoYXQncyB0aGUgcG9pbnQgb2YgdGhpcyByZWcgcmVhZD8gKi8KKwl0ZW1wID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIE1JU0NfUEVSU1RfVlJFR19DVFJMKTsKKwljcnlzdGFsaGRfcmVnX3dyKGFkcCwgTUlTQ19QRVJTVF9WUkVHX0NUUkwsIDB4RjMpOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNyeXN0YWxoZF9wdXRfaW5fcmVzZXQoc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCkKK3sKKwlsaW5rX21pc2NfcGVyc3RfZGVjb19jdHJsIHJzdF9kZWNvX2NudHJsOworCWxpbmtfbWlzY19wZXJzdF9jbGtfY3RybCAgcnN0X2Nsa19jbnRybDsKKwl1aW50MzJfdCAgICAgICAgICAgICAgICAgIHRlbXA7CisKKwkvKgorCSAqIERlY29kZXIgY2xvY2tzOiBNSVNDX1BFUlNUX0RFQ09ERVJfQ1RSTAorCSAqIEFzc2VydCA3NDEyIHJlc2V0LCBkZWxheQorCSAqIEFzc2VydCA3NDEyIHN0b3AgY2xvY2sKKwkgKi8KKwlyc3RfZGVjb19jbnRybC53aG9sZV9yZWcgPSBjcnlzdGFsaGRfcmVnX3JkKGFkcCwgTUlTQ19QRVJTVF9ERUNPREVSX0NUUkwpOworCXJzdF9kZWNvX2NudHJsLnN0b3BfYmNtXzc0MTJfY2xrID0gMTsKKwljcnlzdGFsaGRfcmVnX3dyKGFkcCwgTUlTQ19QRVJTVF9ERUNPREVSX0NUUkwsIHJzdF9kZWNvX2NudHJsLndob2xlX3JlZyk7CisJbXNsZWVwX2ludGVycnVwdGlibGUoNTApOworCisJLyogQnVzIEFyYml0ZXIgVGltZW91dDogR0lTQl9BUkJJVEVSX1RJTUVSCisJICogU2V0IGludGVybmFsIGJ1cyBhcmJpdGVyIHRpbWVvdXQgdG8gNDB1cyBiYXNlZCBvbiBjb3JlIGNsb2NrIHNwZWVkCisJICogKDYuNzVNSFogKiA0MHVzID0gMHgxMEUpCisJICovCisJY3J5c3RhbGhkX3JlZ193cihhZHAsIEdJU0JfQVJCSVRFUl9USU1FUiwgMHgxMEUpOworCisJLyogTGluayBjbG9ja3M6IE1JU0NfUEVSU1RfQ0xPQ0tfQ1RSTAorCSAqIFN0b3AgY29yZSBjbGssIGRlbGF5CisJICogU2V0IGFsdGVybmF0ZSBjbGssIGRlbGF5LCBzZXQgUExMIHBvd2VyIGRvd24KKwkgKi8KKwlyc3RfY2xrX2NudHJsLndob2xlX3JlZyA9IGNyeXN0YWxoZF9yZWdfcmQoYWRwLCBNSVNDX1BFUlNUX0NMT0NLX0NUUkwpOworCXJzdF9jbGtfY250cmwuc3RvcF9jb3JlX2NsayA9IDE7CisJcnN0X2Nsa19jbnRybC5zZWxfYWx0X2NsayA9IDE7CisJY3J5c3RhbGhkX3JlZ193cihhZHAsIE1JU0NfUEVSU1RfQ0xPQ0tfQ1RSTCwgcnN0X2Nsa19jbnRybC53aG9sZV9yZWcpOworCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDUwKTsKKworCXJzdF9jbGtfY250cmwud2hvbGVfcmVnID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIE1JU0NfUEVSU1RfQ0xPQ0tfQ1RSTCk7CisJcnN0X2Nsa19jbnRybC5wbGxfcHdyX2RuID0gMTsKKwljcnlzdGFsaGRfcmVnX3dyKGFkcCwgTUlTQ19QRVJTVF9DTE9DS19DVFJMLCByc3RfY2xrX2NudHJsLndob2xlX3JlZyk7CisKKwkvKgorCSAqIFJlYWQgYW5kIHJlc3RvcmUgdGhlIFRyYW5zYWN0aW9uIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKKwkgKiBhZnRlciBjb3JlIHJlc2V0CisJICovCisJdGVtcCA9IGNyeXN0YWxoZF9yZWdfcmQoYWRwLCBQQ0lFX1RMX1RSQU5TQUNUSU9OX0NPTkZJR1VSQVRJT04pOworCisJLyoKKwkgKiBMaW5rIGNvcmUgc29mdCByZXNldDogTUlTQzNfUkVTRVRfQ1RSTAorCSAqIC0gV3JpdGUgQklUWzBdPTEgYW5kIHJlYWQgaXQgYmFjayBmb3IgY29yZSByZXNldCB0byB0YWtlIHBsYWNlCisJICovCisJY3J5c3RhbGhkX3JlZ193cihhZHAsIE1JU0MzX1JFU0VUX0NUUkwsIDEpOworCXJzdF9kZWNvX2NudHJsLndob2xlX3JlZyA9IGNyeXN0YWxoZF9yZWdfcmQoYWRwLCBNSVNDM19SRVNFVF9DVFJMKTsKKwltc2xlZXBfaW50ZXJydXB0aWJsZSg1MCk7CisKKwkvKiByZXN0b3JlIHRoZSB0cmFuc2FjdGlvbiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisJY3J5c3RhbGhkX3JlZ193cihhZHAsIFBDSUVfVExfVFJBTlNBQ1RJT05fQ09ORklHVVJBVElPTiwgdGVtcCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgY3J5c3RhbGhkX2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwKQoreworCWludHJfbWFza19yZWcgICBpbnRyX21hc2s7CisJaW50cl9tYXNrLndob2xlX3JlZyA9IGNyeXN0YWxoZF9yZWdfcmQoYWRwLCBJTlRSX0lOVFJfTVNLX1NUU19SRUcpOworCWludHJfbWFzay5tYXNrX3BjaWVfZXJyID0gMTsKKwlpbnRyX21hc2subWFza19wY2llX3JidXNtYXN0X2VyciA9IDE7CisJaW50cl9tYXNrLm1hc2tfcGNpZV9yZ3JfYnJpZGdlICAgPSAxOworCWludHJfbWFzay5tYXNrX3J4X2RvbmUgPSAxOworCWludHJfbWFzay5tYXNrX3J4X2VyciAgPSAxOworCWludHJfbWFzay5tYXNrX3R4X2RvbmUgPSAxOworCWludHJfbWFzay5tYXNrX3R4X2VyciAgPSAxOworCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBJTlRSX0lOVFJfTVNLX1NFVF9SRUcsIGludHJfbWFzay53aG9sZV9yZWcpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBjcnlzdGFsaGRfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCkKK3sKKwlpbnRyX21hc2tfcmVnICAgaW50cl9tYXNrOworCWludHJfbWFzay53aG9sZV9yZWcgPSBjcnlzdGFsaGRfcmVnX3JkKGFkcCwgSU5UUl9JTlRSX01TS19TVFNfUkVHKTsKKwlpbnRyX21hc2subWFza19wY2llX2VyciA9IDE7CisJaW50cl9tYXNrLm1hc2tfcGNpZV9yYnVzbWFzdF9lcnIgPSAxOworCWludHJfbWFzay5tYXNrX3BjaWVfcmdyX2JyaWRnZSAgID0gMTsKKwlpbnRyX21hc2subWFza19yeF9kb25lID0gMTsKKwlpbnRyX21hc2subWFza19yeF9lcnIgID0gMTsKKwlpbnRyX21hc2subWFza190eF9kb25lID0gMTsKKwlpbnRyX21hc2subWFza190eF9lcnIgID0gMTsKKwljcnlzdGFsaGRfcmVnX3dyKGFkcCwgSU5UUl9JTlRSX01TS19DTFJfUkVHLCBpbnRyX21hc2sud2hvbGVfcmVnKTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgY3J5c3RhbGhkX2NsZWFyX2Vycm9ycyhzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwKQoreworCXVpbnQzMl90IHJlZzsKKworCS8qIEZJWE1FOiBqYXJvZDogd291bGRuJ3Qgd2Ugd2FudCB0byB3cml0ZSBhIDAgdG8gdGhlIHJlZz8gT3IgZG9lcyB0aGUgd3JpdGUgY2xlYXIgdGhlIGJpdHMgc3BlY2lmaWVkPyAqLworCXJlZyA9IGNyeXN0YWxoZF9yZWdfcmQoYWRwLCBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVUyk7CisJaWYgKHJlZykKKwkJY3J5c3RhbGhkX3JlZ193cihhZHAsIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTLCByZWcpOworCisJcmVnID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVUyk7CisJaWYgKHJlZykKKwkJY3J5c3RhbGhkX3JlZ193cihhZHAsIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVUywgcmVnKTsKKworCXJlZyA9IGNyeXN0YWxoZF9yZWdfcmQoYWRwLCBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTKTsKKwlpZiAocmVnKQorCQljcnlzdGFsaGRfcmVnX3dyKGFkcCwgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVUywgcmVnKTsKK30KKworc3RhdGljIHZvaWQgY3J5c3RhbGhkX2NsZWFyX2ludGVycnVwdHMoc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCkKK3sKKwl1aW50MzJfdCBpbnRyX3N0cyA9IGNyeXN0YWxoZF9yZWdfcmQoYWRwLCBJTlRSX0lOVFJfU1RBVFVTKTsKKworCWlmIChpbnRyX3N0cykgeworCQljcnlzdGFsaGRfcmVnX3dyKGFkcCwgSU5UUl9JTlRSX0NMUl9SRUcsIGludHJfc3RzKTsKKworCQkvKiBXcml0ZSBFbmQgT2YgSW50ZXJydXB0IGZvciBQQ0lFICovCisJCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBJTlRSX0VPSV9DVFJMLCAxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNyeXN0YWxoZF9zb2Z0X3JzdChzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwKQoreworCXVpbnQzMl90IHZhbDsKKworCS8qIEFzc2VydCBjMDExIHNvZnQgcmVzZXQqLworCWJjX2RlY19yZWdfd3IoYWRwLCBEZWNIdF9Ib3N0U3dSZXNldCwgMHgwMDAwMDAwMSk7CisJbXNsZWVwX2ludGVycnVwdGlibGUoNTApOworCisJLyogUmVsZWFzZSBjMDExIHNvZnQgcmVzZXQqLworCWJjX2RlY19yZWdfd3IoYWRwLCBEZWNIdF9Ib3N0U3dSZXNldCwgMHgwMDAwMDAwMCk7CisKKwkvKiBEaXNhYmxlIFN0dWZmaW5nLi4qLworCXZhbCA9IGNyeXN0YWxoZF9yZWdfcmQoYWRwLCBNSVNDMl9HTE9CQUxfQ1RSTCk7CisJdmFsIHw9IEJDX0JJVCg4KTsKKwljcnlzdGFsaGRfcmVnX3dyKGFkcCwgTUlTQzJfR0xPQkFMX0NUUkwsIHZhbCk7Cit9CisKK3N0YXRpYyBib29sIGNyeXN0YWxoZF9sb2FkX2Zpcm13YXJlX2NvbmZpZyhzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwKQoreworCXVpbnQzMl90IGkgPSAwLCByZWc7CisKKwljcnlzdGFsaGRfcmVnX3dyKGFkcCwgRENJX0RSQU1fQkFTRV9BRERSLCAoQkNfRFJBTV9GV19DRkdfQUREUiA+PiAxOSkpOworCisJY3J5c3RhbGhkX3JlZ193cihhZHAsIEFFU19DTUQsIDApOworCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBBRVNfQ09ORklHX0lORk8sIChCQ19EUkFNX0ZXX0NGR19BRERSICYgMHg3RkZGRikpOworCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBBRVNfQ01ELCAweDEpOworCisJLyogRklYTUU6IGphcm9kOiBJJ3ZlIHNlZW4gdGhpcyBmYWlsLCBhbmQgaW50cm9kdWNpbmcgZXh0cmEgZGVsYXlzIGhlbHBzLi4uICovCisJZm9yIChpID0gMDsgaSA8IDEwMDsgKytpKSB7CisJCXJlZyA9IGNyeXN0YWxoZF9yZWdfcmQoYWRwLCBBRVNfU1RBVFVTKTsKKwkJaWYgKHJlZyAmIDB4MSkKKwkJCXJldHVybiB0cnVlOworCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMCk7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisKK3N0YXRpYyBib29sIGNyeXN0YWxoZF9zdGFydF9kZXZpY2Uoc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCkKK3sKKwl1aW50MzJfdCBkYmdfb3B0aW9ucywgZ2xiX2NudHJsID0gMCwgcmVnX3B3cm1nbXQgPSAwOworCisJQkNNTE9HKEJDTUxPR19JTkZPLCAiU3RhcnRpbmcgQkNNNzAwMTIgRGV2aWNlXG4iKTsKKworCXJlZ19wd3JtZ210ID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIFBDSUVfRExMX0RBVEFfTElOS19DT05UUk9MKTsKKwlyZWdfcHdybWdtdCAmPSB+QVNQTV9MMV9FTkFCTEU7CisKKwljcnlzdGFsaGRfcmVnX3dyKGFkcCwgUENJRV9ETExfREFUQV9MSU5LX0NPTlRST0wsIHJlZ19wd3JtZ210KTsKKworCWlmICghY3J5c3RhbGhkX2JyaW5nX291dF9vZl9yc3QoYWRwKSkgeworCQlCQ01MT0dfRVJSKCJGYWlsZWQgVG8gQnJpbmcgTGluayBPdXQgT2YgUmVzZXRcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJY3J5c3RhbGhkX2Rpc2FibGVfaW50ZXJydXB0cyhhZHApOworCisJY3J5c3RhbGhkX2NsZWFyX2Vycm9ycyhhZHApOworCisJY3J5c3RhbGhkX2NsZWFyX2ludGVycnVwdHMoYWRwKTsKKworCWNyeXN0YWxoZF9lbmFibGVfaW50ZXJydXB0cyhhZHApOworCisJLyogRW5hYmxlIHRoZSBvcHRpb24gZm9yIGdldHRpbmcgdGhlIHRvdGFsIG5vLiBvZiBEV09SRFMKKwkgKiB0aGF0IGhhdmUgYmVlbiB0cmFuc2ZlcmVkIGJ5IHRoZSBSWERNQSBlbmdpbmUKKwkgKi8KKwlkYmdfb3B0aW9ucyA9IGNyeXN0YWxoZF9yZWdfcmQoYWRwLCBNSVNDMV9ETUFfREVCVUdfT1BUSU9OU19SRUcpOworCWRiZ19vcHRpb25zIHw9IDB4MTA7CisJY3J5c3RhbGhkX3JlZ193cihhZHAsIE1JU0MxX0RNQV9ERUJVR19PUFRJT05TX1JFRywgZGJnX29wdGlvbnMpOworCisJLyogRW5hYmxlIFBDSSBHbG9iYWwgQ29udHJvbCBvcHRpb25zICovCisJZ2xiX2NudHJsID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIE1JU0MyX0dMT0JBTF9DVFJMKTsKKwlnbGJfY250cmwgfD0gMHgxMDA7CisJZ2xiX2NudHJsIHw9IDB4ODAwMDsKKwljcnlzdGFsaGRfcmVnX3dyKGFkcCwgTUlTQzJfR0xPQkFMX0NUUkwsIGdsYl9jbnRybCk7CisKKwljcnlzdGFsaGRfZW5hYmxlX2ludGVycnVwdHMoYWRwKTsKKworCWNyeXN0YWxoZF9zb2Z0X3JzdChhZHApOworCWNyeXN0YWxoZF9zdGFydF9kcmFtKGFkcCk7CisJY3J5c3RhbGhkX2VuYWJsZV91YXJ0cyhhZHApOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNyeXN0YWxoZF9zdG9wX2RldmljZShzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwKQoreworCXVpbnQzMl90IHJlZzsKKworCUJDTUxPRyhCQ01MT0dfSU5GTywgIlN0b3BwaW5nIEJDTTcwMDEyIERldmljZVxuIik7CisJLyogQ2xlYXIgYW5kIGRpc2FibGUgaW50ZXJydXB0cyAqLworCWNyeXN0YWxoZF9kaXNhYmxlX2ludGVycnVwdHMoYWRwKTsKKwljcnlzdGFsaGRfY2xlYXJfZXJyb3JzKGFkcCk7CisJY3J5c3RhbGhkX2NsZWFyX2ludGVycnVwdHMoYWRwKTsKKworCWlmICghY3J5c3RhbGhkX3B1dF9pbl9yZXNldChhZHApKQorCQlCQ01MT0dfRVJSKCJGYWlsZWQgdG8gUHV0IExpbmsgVG8gUmVzZXQgU3RhdGVcbiIpOworCisJcmVnID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIFBDSUVfRExMX0RBVEFfTElOS19DT05UUk9MKTsKKwlyZWcgfD0gQVNQTV9MMV9FTkFCTEU7CisJY3J5c3RhbGhkX3JlZ193cihhZHAsIFBDSUVfRExMX0RBVEFfTElOS19DT05UUk9MLCByZWcpOworCisJLyogU2V0IFBDSSBDbGsgUmVxICovCisJcmVnID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIFBDSUVfQ0xLX1JFUV9SRUcpOworCXJlZyB8PSBQQ0lfQ0xLX1JFUV9FTkFCTEU7CisJY3J5c3RhbGhkX3JlZ193cihhZHAsIFBDSUVfQ0xLX1JFUV9SRUcsIHJlZyk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGNyeXN0YWxoZF9yeF9kbWFfcGt0ICpjcnlzdGFsaGRfaHdfYWxsb2NfcnhfcGt0KHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCWNyeXN0YWxoZF9yeF9kbWFfcGt0ICp0ZW1wID0gTlVMTDsKKworCWlmICghaHcpCisJCXJldHVybiBOVUxMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5sb2NrLCBmbGFncyk7CisJdGVtcCA9IGh3LT5yeF9wa3RfcG9vbF9oZWFkOworCWlmICh0ZW1wKSB7CisJCWh3LT5yeF9wa3RfcG9vbF9oZWFkID0gaHctPnJ4X3BrdF9wb29sX2hlYWQtPm5leHQ7CisJCXRlbXAtPmRpb19yZXEgPSBOVUxMOworCQl0ZW1wLT5wa3RfdGFnID0gMDsKKwkJdGVtcC0+ZmxhZ3MgPSAwOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHRlbXA7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXN0YWxoZF9od19mcmVlX3J4X3BrdChzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodywKKwkJCQkgICBjcnlzdGFsaGRfcnhfZG1hX3BrdCAqcGt0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCisJaWYgKCFodyB8fCAhcGt0KQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmxvY2ssIGZsYWdzKTsKKwlwa3QtPm5leHQgPSBody0+cnhfcGt0X3Bvb2xfaGVhZDsKKwlody0+cnhfcGt0X3Bvb2xfaGVhZCA9IHBrdDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+bG9jaywgZmxhZ3MpOworfQorCisvKgorICogQ2FsbCBiYWNrIGZyb20gVFggLSBJT1EgZGVsZXRpb24uCisgKgorICogVGhpcyByb3V0aW5lIHdpbGwgcmVsZWFzZSB0aGUgVFggRE1BIHJpbmdzIGFsbG9jYXRlZAorICogZHJ1aW5nIHNldHVwX2RtYSByaW5ncyBpbnRlcmZhY2UuCisgKgorICogTWVtb3J5IGlzIGFsbG9jYXRlZCBwZXIgRE1BIHJpbmcgYmFzaXMuIFRoaXMgaXMganVzdAorICogYSBwbGFjZSBob2xkZXIgdG8gYmUgYWJsZSB0byBjcmVhdGUgdGhlIGRpbyBxdWV1ZXMuCisgKi8KK3N0YXRpYyB2b2lkIGNyeXN0YWxoZF90eF9kZXNjX3JlbF9jYWxsX2JhY2sodm9pZCAqY29udGV4dCwgdm9pZCAqZGF0YSkKK3sKK30KKworLyoKKyAqIFJ4IFBhY2tldCByZWxlYXNlIGNhbGxiYWNrLi4KKyAqCisgKiBSZWxlYXNlIEFsbCB1c2VyIG1hcHBlZCBjYXB0dXJlIGJ1ZmZlcnMgYW5kIE91ciBETUEgcGFja2V0cworICogYmFjayB0byBvdXIgZnJlZSBwb29sLiBUaGUgYWN0dWFsIGNsZWFudXAgb2YgdGhlIERNQQorICogcmluZyBkZXNjcmlwdG9ycyBoYXBwZW4gZHVyaW5nIGRtYSByaW5nIHJlbGVhc2UuCisgKi8KK3N0YXRpYyB2b2lkIGNyeXN0YWxoZF9yeF9wa3RfcmVsX2NhbGxfYmFjayh2b2lkICpjb250ZXh0LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3ID0gKHN0cnVjdCBjcnlzdGFsaGRfaHcgKiljb250ZXh0OworCWNyeXN0YWxoZF9yeF9kbWFfcGt0ICpwa3QgPSAoY3J5c3RhbGhkX3J4X2RtYV9wa3QgKilkYXRhOworCisJaWYgKCFwa3QgfHwgIWh3KSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgYXJnIC0gJXAgJXBcbiIsIGh3LCBwa3QpOworCQlyZXR1cm47CisJfQorCisJaWYgKHBrdC0+ZGlvX3JlcSkKKwkJY3J5c3RhbGhkX3VubWFwX2Rpbyhody0+YWRwLCBwa3QtPmRpb19yZXEpOworCWVsc2UKKwkJQkNNTE9HX0VSUigiTWlzc2luZyBkaW9fcmVxOiAweCV4XG4iLCBwa3QtPnBrdF90YWcpOworCisJY3J5c3RhbGhkX2h3X2ZyZWVfcnhfcGt0KGh3LCBwa3QpOworfQorCisjZGVmaW5lIGNyeXN0YWxoZF9od19kZWxldGVfaW9xKGFkcCwgcSkJCVwKKwlpZiAocSkgewkJCQlcCisJCWNyeXN0YWxoZF9kZWxldGVfZGlvcShhZHAsIHEpOwlcCisJCXEgPSBOVUxMOwkJCVwKKwl9CisKK3N0YXRpYyB2b2lkIGNyeXN0YWxoZF9od19kZWxldGVfaW9xcyhzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodykKK3sKKwlpZiAoIWh3KQorCQlyZXR1cm47CisKKwlCQ01MT0coQkNNTE9HX0RCRywgIkRlbGV0aW5nIElPUXMgXG4iKTsKKwljcnlzdGFsaGRfaHdfZGVsZXRlX2lvcShody0+YWRwLCBody0+dHhfYWN0cSk7CisJY3J5c3RhbGhkX2h3X2RlbGV0ZV9pb3EoaHctPmFkcCwgaHctPnR4X2ZyZWVxKTsKKwljcnlzdGFsaGRfaHdfZGVsZXRlX2lvcShody0+YWRwLCBody0+cnhfYWN0cSk7CisJY3J5c3RhbGhkX2h3X2RlbGV0ZV9pb3EoaHctPmFkcCwgaHctPnJ4X2ZyZWVxKTsKKwljcnlzdGFsaGRfaHdfZGVsZXRlX2lvcShody0+YWRwLCBody0+cnhfcmR5cSk7Cit9CisKKyNkZWZpbmUgY3J5c3RhbGhkX2h3X2NyZWF0ZV9pb3Eoc3RzLCBodywgcSwgY2IpCQkJXAorZG8gewkJCQkJCQkJXAorCXN0cyA9IGNyeXN0YWxoZF9jcmVhdGVfZGlvcShody0+YWRwLCAmcSwgY2IsIGh3KTsJXAorCWlmIChzdHMgIT0gQkNfU1RTX1NVQ0NFU1MpCQkJCVwKKwkJZ290byBod19jcmVhdGVfaW9xX2VycjsJCQkJXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIENyZWF0ZSBJT1FzLi4KKyAqCisgKiBUWCAtIEFjdGl2ZSAmIEZyZWUKKyAqIFJYIC0gQWN0aXZlLCBSZWFkeSBhbmQgRnJlZS4KKyAqLworc3RhdGljIEJDX1NUQVRVUyBjcnlzdGFsaGRfaHdfY3JlYXRlX2lvcXMoc3RydWN0IGNyeXN0YWxoZF9odyAgICpodykKK3sKKwlCQ19TVEFUVVMgICBzdHMgPSBCQ19TVFNfU1VDQ0VTUzsKKworCWlmICghaHcpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmchIVxuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwljcnlzdGFsaGRfaHdfY3JlYXRlX2lvcShzdHMsIGh3LCBody0+dHhfZnJlZXEsCisJCQkgICAgICBjcnlzdGFsaGRfdHhfZGVzY19yZWxfY2FsbF9iYWNrKTsKKwljcnlzdGFsaGRfaHdfY3JlYXRlX2lvcShzdHMsIGh3LCBody0+dHhfYWN0cSwKKwkJCSAgICAgIGNyeXN0YWxoZF90eF9kZXNjX3JlbF9jYWxsX2JhY2spOworCisJY3J5c3RhbGhkX2h3X2NyZWF0ZV9pb3Eoc3RzLCBodywgaHctPnJ4X2ZyZWVxLAorCQkJICAgICAgY3J5c3RhbGhkX3J4X3BrdF9yZWxfY2FsbF9iYWNrKTsKKwljcnlzdGFsaGRfaHdfY3JlYXRlX2lvcShzdHMsIGh3LCBody0+cnhfcmR5cSwKKwkJCSAgICAgIGNyeXN0YWxoZF9yeF9wa3RfcmVsX2NhbGxfYmFjayk7CisJY3J5c3RhbGhkX2h3X2NyZWF0ZV9pb3Eoc3RzLCBodywgaHctPnJ4X2FjdHEsCisJCQkgICAgICBjcnlzdGFsaGRfcnhfcGt0X3JlbF9jYWxsX2JhY2spOworCisJcmV0dXJuIHN0czsKKworaHdfY3JlYXRlX2lvcV9lcnI6CisJY3J5c3RhbGhkX2h3X2RlbGV0ZV9pb3FzKGh3KTsKKworCXJldHVybiBzdHM7Cit9CisKKworc3RhdGljIGJvb2wgY3J5c3RhbGhkX2NvZGVfaW5fZnVsbChzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwLCB1aW50MzJfdCBuZWVkZWRfc3osCisJCQkJIGJvb2wgYl8xODhfYnl0ZV9wa3RzLCAgdWludDhfdCBmbGFncykKK3sKKwl1aW50MzJfdCBiYXNlLCBlbmQsIHdyaXRlcCwgcmVhZHA7CisJdWludDMyX3QgY3BiU2l6ZSwgY3BiRnVsbG5lc3MsIGZpZm9TaXplOworCisJaWYgKGZsYWdzICYgMHgwMikgeyAvKiBBU0YgQml0IGlzIHNldCAqLworCQliYXNlICAgPSBiY19kZWNfcmVnX3JkKGFkcCwgUkVHX0RlY19Uc0F1ZENEQjJCYXNlKTsKKwkJZW5kICAgID0gYmNfZGVjX3JlZ19yZChhZHAsIFJFR19EZWNfVHNBdWRDREIyRW5kKTsKKwkJd3JpdGVwID0gYmNfZGVjX3JlZ19yZChhZHAsIFJFR19EZWNfVHNBdWRDREIyV3JwdHIpOworCQlyZWFkcCAgPSBiY19kZWNfcmVnX3JkKGFkcCwgUkVHX0RlY19Uc0F1ZENEQjJSZHB0cik7CisJfSBlbHNlIGlmIChiXzE4OF9ieXRlX3BrdHMpIHsgLypFbmNyeXB0ZWQgMTg4IGJ5dGUgcGFja2V0cyovCisJCWJhc2UgICA9IGJjX2RlY19yZWdfcmQoYWRwLCBSRUdfRGVjX1RzVXNlcjBCYXNlKTsKKwkJZW5kICAgID0gYmNfZGVjX3JlZ19yZChhZHAsIFJFR19EZWNfVHNVc2VyMEVuZCk7CisJCXdyaXRlcCA9IGJjX2RlY19yZWdfcmQoYWRwLCBSRUdfRGVjX1RzVXNlcjBXcnB0cik7CisJCXJlYWRwICA9IGJjX2RlY19yZWdfcmQoYWRwLCBSRUdfRGVjX1RzVXNlcjBSZHB0cik7CisJfSBlbHNlIHsKKwkJYmFzZSAgID0gYmNfZGVjX3JlZ19yZChhZHAsIFJFR19EZWNDQV9SZWdDaW5CYXNlKTsKKwkJZW5kICAgID0gYmNfZGVjX3JlZ19yZChhZHAsIFJFR19EZWNDQV9SZWdDaW5FbmQpOworCQl3cml0ZXAgPSBiY19kZWNfcmVnX3JkKGFkcCwgUkVHX0RlY0NBX1JlZ0NpbldyUHRyKTsKKwkJcmVhZHAgID0gYmNfZGVjX3JlZ19yZChhZHAsIFJFR19EZWNDQV9SZWdDaW5SZFB0cik7CisJfQorCisJY3BiU2l6ZSA9IGVuZCAtIGJhc2U7CisJaWYgKHdyaXRlcCA+PSByZWFkcCkKKwkJY3BiRnVsbG5lc3MgPSB3cml0ZXAgLSByZWFkcDsKKwllbHNlCisJCWNwYkZ1bGxuZXNzID0gKGVuZCAtIGJhc2UpIC0gKHJlYWRwIC0gd3JpdGVwKTsKKworCWZpZm9TaXplID0gY3BiU2l6ZSAtIGNwYkZ1bGxuZXNzOworCisJaWYgKGZpZm9TaXplIDwgQkNfSU5GSUZPX1RIUkVTSE9MRCkKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAobmVlZGVkX3N6ID4gKGZpZm9TaXplIC0gQkNfSU5GSUZPX1RIUkVTSE9MRCkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgQkNfU1RBVFVTIGNyeXN0YWxoZF9od190eF9yZXFfY29tcGxldGUoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcsCisJCQkJCSAgICB1aW50MzJfdCBsaXN0X2lkLCBCQ19TVEFUVVMgY3MpCit7CisJdHhfZG1hX3BrdCAqdHhfcmVxOworCisJaWYgKCFodyB8fCAhbGlzdF9pZCkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIEFyZy4uXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCWh3LT5wd3JfbG9jay0tOworCisJdHhfcmVxID0gKHR4X2RtYV9wa3QgKiljcnlzdGFsaGRfZGlvcV9maW5kX2FuZF9mZXRjaChody0+dHhfYWN0cSwgbGlzdF9pZCk7CisJaWYgKCF0eF9yZXEpIHsKKwkJaWYgKGNzICE9IEJDX1NUU19JT19VU0VSX0FCT1JUKQorCQkJQkNNTE9HX0VSUigiRmluZCBhbmQgRmV0Y2ggRGlkIG5vdCBmaW5kIHJlcVxuIik7CisJCXJldHVybiBCQ19TVFNfTk9fREFUQTsKKwl9CisKKwlpZiAodHhfcmVxLT5jYWxsX2JhY2spIHsKKwkJdHhfcmVxLT5jYWxsX2JhY2sodHhfcmVxLT5kaW9fcmVxLCB0eF9yZXEtPmNiX2V2ZW50LCBjcyk7CisJCXR4X3JlcS0+ZGlvX3JlcSAgID0gTlVMTDsKKwkJdHhfcmVxLT5jYl9ldmVudCAgPSBOVUxMOworCQl0eF9yZXEtPmNhbGxfYmFjayA9IE5VTEw7CisJfSBlbHNlIHsKKwkJQkNNTE9HKEJDTUxPR19EQkcsICJNaXNzaW5nIFR4IENhbGxiYWNrIC0gJVhcbiIsCisJCSAgICAgICB0eF9yZXEtPmxpc3RfdGFnKTsKKwl9CisKKwkvKiBOb3cgcHV0IGJhY2sgdGhlIHR4X2xpc3QgYmFjayBpbiBGcmVlUSAqLworCXR4X3JlcS0+bGlzdF90YWcgPSAwOworCisJcmV0dXJuIGNyeXN0YWxoZF9kaW9xX2FkZChody0+dHhfZnJlZXEsIHR4X3JlcSwgZmFsc2UsIDApOworfQorCitzdGF0aWMgYm9vbCBjcnlzdGFsaGRfdHhfbGlzdDBfaGFuZGxlcihzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodywgdWludDMyX3QgZXJyX3N0cykKK3sKKwl1aW50MzJfdCBlcnJfbWFzaywgdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCisJZXJyX21hc2sgPSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wwX0RFU0NfVFhfQUJPUlRfRVJST1JTX01BU0sgfAorCQlNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wwX0RNQV9EQVRBX1RYX0FCT1JUX0VSUk9SU19NQVNLIHwKKwkJTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19UWF9MMF9GSUZPX0ZVTExfRVJST1JTX01BU0s7CisKKwlpZiAoIShlcnJfc3RzICYgZXJyX21hc2spKQorCQlyZXR1cm4gZmFsc2U7CisKKwlCQ01MT0dfRVJSKCJFcnJvciBvbiBUeC1MMCAleCBcbiIsIGVycl9zdHMpOworCisJdG1wID0gZXJyX21hc2s7CisKKwlpZiAoZXJyX3N0cyAmIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfVFhfTDBfRklGT19GVUxMX0VSUk9SU19NQVNLKQorCQl0bXAgJj0gfk1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfVFhfTDBfRklGT19GVUxMX0VSUk9SU19NQVNLOworCisJaWYgKHRtcCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmxvY2ssIGZsYWdzKTsKKwkJLyogcmVzZXQgbGlzdCBpbmRleC4qLworCQlody0+dHhfbGlzdF9wb3N0X2luZGV4ID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmxvY2ssIGZsYWdzKTsKKwl9CisKKwl0bXAgPSBlcnJfc3RzICYgZXJyX21hc2s7CisJY3J5c3RhbGhkX3JlZ193cihody0+YWRwLCBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTLCB0bXApOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNyeXN0YWxoZF90eF9saXN0MV9oYW5kbGVyKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3LCB1aW50MzJfdCBlcnJfc3RzKQoreworCXVpbnQzMl90IGVycl9tYXNrLCB0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKwllcnJfbWFzayA9IE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfVFhfTDFfREVTQ19UWF9BQk9SVF9FUlJPUlNfTUFTSyB8CisJCU1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfVFhfTDFfRE1BX0RBVEFfVFhfQUJPUlRfRVJST1JTX01BU0sgfAorCQlNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wxX0ZJRk9fRlVMTF9FUlJPUlNfTUFTSzsKKworCWlmICghKGVycl9zdHMgJiBlcnJfbWFzaykpCisJCXJldHVybiBmYWxzZTsKKworCUJDTUxPR19FUlIoIkVycm9yIG9uIFR4LUwxICV4IFxuIiwgZXJyX3N0cyk7CisKKwl0bXAgPSBlcnJfbWFzazsKKworCWlmIChlcnJfc3RzICYgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19UWF9MMV9GSUZPX0ZVTExfRVJST1JTX01BU0spCisJCXRtcCAmPSB+TUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19UWF9MMV9GSUZPX0ZVTExfRVJST1JTX01BU0s7CisKKwlpZiAodG1wKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZody0+bG9jaywgZmxhZ3MpOworCQkvKiByZXNldCBsaXN0IGluZGV4LiovCisJCWh3LT50eF9saXN0X3Bvc3RfaW5kZXggPSAwOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+bG9jaywgZmxhZ3MpOworCX0KKworCXRtcCA9IGVycl9zdHMgJiBlcnJfbWFzazsKKwljcnlzdGFsaGRfcmVnX3dyKGh3LT5hZHAsIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVMsIHRtcCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgY3J5c3RhbGhkX3R4X2lzcihzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodywgdWludDMyX3QgaW50X3N0cykKK3sKKwl1aW50MzJfdCBlcnJfc3RzOworCisJaWYgKGludF9zdHMgJiBJTlRSX0lOVFJfU1RBVFVTX0wwX1RYX0RNQV9ET05FX0lOVFJfTUFTSykKKwkJY3J5c3RhbGhkX2h3X3R4X3JlcV9jb21wbGV0ZShodywgaHctPnR4X2lvcV90YWdfc2VlZCArIDAsCisJCQkJCSAgIEJDX1NUU19TVUNDRVNTKTsKKworCWlmIChpbnRfc3RzICYgSU5UUl9JTlRSX1NUQVRVU19MMV9UWF9ETUFfRE9ORV9JTlRSX01BU0spCisJCWNyeXN0YWxoZF9od190eF9yZXFfY29tcGxldGUoaHcsIGh3LT50eF9pb3FfdGFnX3NlZWQgKyAxLAorCQkJCQkgICBCQ19TVFNfU1VDQ0VTUyk7CisKKwlpZiAoIShpbnRfc3RzICYgKElOVFJfSU5UUl9TVEFUVVNfTDBfVFhfRE1BX0VSUl9JTlRSX01BU0sgfAorCQkJIElOVFJfSU5UUl9TVEFUVVNfTDFfVFhfRE1BX0VSUl9JTlRSX01BU0spKSkgeworCQkJIC8qIE5vIGVycm9yIG1hc2sgc2V0Li4gKi8KKwkJCSByZXR1cm47CisJfQorCisJLyogSGFuZGxlIFR4IGVycm9ycy4gKi8KKwllcnJfc3RzID0gY3J5c3RhbGhkX3JlZ19yZChody0+YWRwLCBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTKTsKKworCWlmIChjcnlzdGFsaGRfdHhfbGlzdDBfaGFuZGxlcihodywgZXJyX3N0cykpCisJCWNyeXN0YWxoZF9od190eF9yZXFfY29tcGxldGUoaHcsIGh3LT50eF9pb3FfdGFnX3NlZWQgKyAwLAorCQkJCQkgICBCQ19TVFNfRVJST1IpOworCisJaWYgKGNyeXN0YWxoZF90eF9saXN0MV9oYW5kbGVyKGh3LCBlcnJfc3RzKSkKKwkJY3J5c3RhbGhkX2h3X3R4X3JlcV9jb21wbGV0ZShodywgaHctPnR4X2lvcV90YWdfc2VlZCArIDEsCisJCQkJCSAgIEJDX1NUU19FUlJPUik7CisKKwlody0+c3RhdHMudHhfZXJyb3JzKys7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXN0YWxoZF9od19kdW1wX2Rlc2MocGRtYV9kZXNjcmlwdG9yIHBfZG1hX2Rlc2MsCisJCQkJIHVpbnQzMl90IHVsX2Rlc2NfaW5kZXgsIHVpbnQzMl90IGNudCkKK3sKKwl1aW50MzJfdCBpeCwgbGwgPSAwOworCisJaWYgKCFwX2RtYV9kZXNjIHx8ICFjbnQpCisJCXJldHVybjsKKworCS8qIEZJWE1FOiBqYXJvZDogcGVyaGFwcyBhIG1vZHBhcmFtIGRlc2NfZGVidWcgdG8gZW5hYmxlIHRoaXMsIHJhdGhlciB0aGFuCisJICogc2V0dGluZyBsbCAobG9nIGxldmVsLCBJIHByZXN1bWUpIHRvIG5vbi16ZXJvPyAqLworCWlmICghbGwpCisJCXJldHVybjsKKworCWZvciAoaXggPSB1bF9kZXNjX2luZGV4OyBpeCA8ICh1bF9kZXNjX2luZGV4ICsgY250KTsgaXgrKykgeworCQlCQ01MT0cobGwsICIlc1slZF0gQnVmZlsleDoleF0gTmV4dDpbJXg6JXhdIFhmZXJTejoleCBJbnRyOiV4LExhc3Q6JXhcbiIsCisJCSAgICAgICAoKHBfZG1hX2Rlc2NbdWxfZGVzY19pbmRleF0uZG1hX2RpcikgPyAiVERlc2MiIDogIlJEZXNjIiksCisJCSAgICAgICB1bF9kZXNjX2luZGV4LAorCQkgICAgICAgcF9kbWFfZGVzY1t1bF9kZXNjX2luZGV4XS5idWZmX2FkZHJfaGlnaCwKKwkJICAgICAgIHBfZG1hX2Rlc2NbdWxfZGVzY19pbmRleF0uYnVmZl9hZGRyX2xvdywKKwkJICAgICAgIHBfZG1hX2Rlc2NbdWxfZGVzY19pbmRleF0ubmV4dF9kZXNjX2FkZHJfaGlnaCwKKwkJICAgICAgIHBfZG1hX2Rlc2NbdWxfZGVzY19pbmRleF0ubmV4dF9kZXNjX2FkZHJfbG93LAorCQkgICAgICAgcF9kbWFfZGVzY1t1bF9kZXNjX2luZGV4XS54ZmVyX3NpemUsCisJCSAgICAgICBwX2RtYV9kZXNjW3VsX2Rlc2NfaW5kZXhdLmludHJfZW5hYmxlLAorCQkgICAgICAgcF9kbWFfZGVzY1t1bF9kZXNjX2luZGV4XS5sYXN0X3JlY19pbmRpY2F0b3IpOworCX0KKworfQorCitzdGF0aWMgQkNfU1RBVFVTIGNyeXN0YWxoZF9od19maWxsX2Rlc2MoY3J5c3RhbGhkX2Rpb19yZXEgKmlvcmVxLAorCQkJCSAgICAgIGRtYV9kZXNjcmlwdG9yICpkZXNjLAorCQkJCSAgICAgIGRtYV9hZGRyX3QgZGVzY19wYWRkcl9iYXNlLAorCQkJCSAgICAgIHVpbnQzMl90IHNnX2NudCwgdWludDMyX3Qgc2dfc3RfaXgsCisJCQkJICAgICAgdWludDMyX3Qgc2dfc3Rfb2ZmLCB1aW50MzJfdCB4ZnJfc3opCit7CisJdWludDMyX3QgY291bnQgPSAwLCBpeCA9IDAsIHNnX2l4ID0gMCwgbGVuID0gMCwgbGFzdF9kZXNjX2l4ID0gMDsKKwlkbWFfYWRkcl90IGRlc2NfcGh5X2FkZHIgPSBkZXNjX3BhZGRyX2Jhc2U7CisJYWRkcl82NCBhZGRyX3RlbXA7CisKKwlpZiAoIWlvcmVxIHx8ICFkZXNjIHx8ICFkZXNjX3BhZGRyX2Jhc2UgfHwgIXhmcl9zeiB8fAorCSAgICAoIXNnX2NudCAmJiAhaW9yZXEtPnVpbmZvLmRpcl90eCkpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmdzXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCWZvciAoaXggPSAwOyBpeCA8IHNnX2NudDsgaXgrKykgeworCisJCS8qIFNldHVwIFNHTEUgaW5kZXguICovCisJCXNnX2l4ID0gaXggKyBzZ19zdF9peDsKKworCQkvKiBHZXQgU0dMRSBsZW5ndGggKi8KKwkJbGVuID0gY3J5c3RhbGhkX2dldF9zZ2xlX2xlbihpb3JlcSwgc2dfaXgpOworCQlpZiAobGVuICUgNCkgeworCQkJQkNNTE9HX0VSUigiIGxlbiBpbiBzZyAlZCAlZCAlZFxuIiwgbGVuLCBzZ19peCwgc2dfY250KTsKKwkJCXJldHVybiBCQ19TVFNfTk9UX0lNUEw7CisJCX0KKwkJLyogU2V0dXAgRE1BIGRlc2Mgd2l0aCBQaHkgYWRkciAmIExlbmd0aCBhdCBjdXJyZW50IGluZGV4LiAqLworCQlhZGRyX3RlbXAuZnVsbF9hZGRyID0gY3J5c3RhbGhkX2dldF9zZ2xlX3BhZGRyKGlvcmVxLCBzZ19peCk7CisJCWlmIChzZ19peCA9PSBzZ19zdF9peCkgeworCQkJYWRkcl90ZW1wLmZ1bGxfYWRkciArPSBzZ19zdF9vZmY7CisJCQlsZW4gLT0gc2dfc3Rfb2ZmOworCQl9CisJCW1lbXNldCgmZGVzY1tpeF0sIDAsIHNpemVvZihkZXNjW2l4XSkpOworCQlkZXNjW2l4XS5idWZmX2FkZHJfbG93ICA9IGFkZHJfdGVtcC5sb3dfcGFydDsKKwkJZGVzY1tpeF0uYnVmZl9hZGRyX2hpZ2ggPSBhZGRyX3RlbXAuaGlnaF9wYXJ0OworCQlkZXNjW2l4XS5kbWFfZGlyICAgICAgICA9IGlvcmVxLT51aW5mby5kaXJfdHg7CisKKwkJLyogQ2hhaW4gRE1BIGRlc2NyaXB0b3IuICAqLworCQlhZGRyX3RlbXAuZnVsbF9hZGRyID0gZGVzY19waHlfYWRkciArIHNpemVvZihkbWFfZGVzY3JpcHRvcik7CisJCWRlc2NbaXhdLm5leHRfZGVzY19hZGRyX2xvdyA9IGFkZHJfdGVtcC5sb3dfcGFydDsKKwkJZGVzY1tpeF0ubmV4dF9kZXNjX2FkZHJfaGlnaCA9IGFkZHJfdGVtcC5oaWdoX3BhcnQ7CisKKwkJaWYgKChjb3VudCArIGxlbikgPiB4ZnJfc3opCisJCQlsZW4gPSB4ZnJfc3ogLSBjb3VudDsKKworCQkvKiBEZWJ1Zy4uICovCisJCWlmICgoIWxlbikgfHwgKGxlbiA+IGNyeXN0YWxoZF9nZXRfc2dsZV9sZW4oaW9yZXEsIHNnX2l4KSkpIHsKKwkJCUJDTUxPR19FUlIoImludi1sZW4oJXgpIEl4KCVkKSBjb3VudDoleCB4ZnJfc3o6JXggc2dfY250OiVkXG4iLAorCQkJCSAgIGxlbiwgaXgsIGNvdW50LCB4ZnJfc3osIHNnX2NudCk7CisJCQlyZXR1cm4gQkNfU1RTX0VSUk9SOworCQl9CisJCS8qIExlbmd0aCBleHBlY3RzIE11bHRpcGxlIG9mIDQgKi8KKwkJZGVzY1tpeF0ueGZlcl9zaXplID0gKGxlbiAvIDQpOworCisJCWNyeXN0YWxoZF9od19kdW1wX2Rlc2MoZGVzYywgaXgsIDEpOworCisJCWNvdW50ICs9IGxlbjsKKwkJZGVzY19waHlfYWRkciArPSBzaXplb2YoZG1hX2Rlc2NyaXB0b3IpOworCX0KKworCWxhc3RfZGVzY19peCA9IGl4IC0gMTsKKworCWlmIChpb3JlcS0+ZmJfc2l6ZSkgeworCQltZW1zZXQoJmRlc2NbaXhdLCAwLCBzaXplb2YoZGVzY1tpeF0pKTsKKwkJYWRkcl90ZW1wLmZ1bGxfYWRkciAgICAgPSBpb3JlcS0+ZmJfcGE7CisJCWRlc2NbaXhdLmJ1ZmZfYWRkcl9sb3cgID0gYWRkcl90ZW1wLmxvd19wYXJ0OworCQlkZXNjW2l4XS5idWZmX2FkZHJfaGlnaCA9IGFkZHJfdGVtcC5oaWdoX3BhcnQ7CisJCWRlc2NbaXhdLmRtYV9kaXIgICAgICAgID0gaW9yZXEtPnVpbmZvLmRpcl90eDsKKwkJZGVzY1tpeF0ueGZlcl9zaXplCT0gMTsKKwkJZGVzY1tpeF0uZmlsbF9ieXRlcwk9IDQgLSBpb3JlcS0+ZmJfc2l6ZTsKKwkJY291bnQgKz0gaW9yZXEtPmZiX3NpemU7CisJCWxhc3RfZGVzY19peCsrOworCX0KKworCS8qIHNldHVwIGxhc3QgZGVzY3JpcHRvci4uKi8KKwlkZXNjW2xhc3RfZGVzY19peF0ubGFzdF9yZWNfaW5kaWNhdG9yICA9IDE7CisJZGVzY1tsYXN0X2Rlc2NfaXhdLm5leHRfZGVzY19hZGRyX2xvdyAgPSAwOworCWRlc2NbbGFzdF9kZXNjX2l4XS5uZXh0X2Rlc2NfYWRkcl9oaWdoID0gMDsKKwlkZXNjW2xhc3RfZGVzY19peF0uaW50cl9lbmFibGUgPSAxOworCisJY3J5c3RhbGhkX2h3X2R1bXBfZGVzYyhkZXNjLCBsYXN0X2Rlc2NfaXgsIDEpOworCisJaWYgKGNvdW50ICE9IHhmcl9zeikgeworCQlCQ01MT0dfRVJSKCJpbnRlcmFsIGVycm9yIHN6IGN1cnI6JXggZXhwOiV4XG4iLCBjb3VudCwgeGZyX3N6KTsKKwkJcmV0dXJuIEJDX1NUU19FUlJPUjsKKwl9CisKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBCQ19TVEFUVVMgY3J5c3RhbGhkX3hsYXRfc2dsX3RvX2RtYV9kZXNjKGNyeXN0YWxoZF9kaW9fcmVxICppb3JlcSwKKwkJCQkJICAgICAgcGRtYV9kZXNjX21lbSBwZGVzY19tZW0sCisJCQkJCSAgICAgIHVpbnQzMl90ICp1dl9kZXNjX2luZGV4KQoreworCWRtYV9kZXNjcmlwdG9yICpkZXNjID0gTlVMTDsKKwlkbWFfYWRkcl90IGRlc2NfcGFkZHJfYmFzZSA9IDA7CisJdWludDMyX3Qgc2dfY250ID0gMCwgc2dfc3RfaXggPSAwLCBzZ19zdF9vZmYgPSAwOworCXVpbnQzMl90IHhmcl9zeiA9IDA7CisJQkNfU1RBVFVTIHN0cyA9IEJDX1NUU19TVUNDRVNTOworCisJLyogQ2hlY2sgcGFyYW1zLi4gKi8KKwlpZiAoIWlvcmVxIHx8ICFwZGVzY19tZW0gfHwgIXV2X2Rlc2NfaW5kZXgpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmdzXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCWlmICghcGRlc2NfbWVtLT5zeiB8fCAhcGRlc2NfbWVtLT5wZG1hX2Rlc2Nfc3RhcnQgfHwKKwkgICAgIWlvcmVxLT5zZyB8fCAoIWlvcmVxLT5zZ19jbnQgJiYgIWlvcmVxLT51aW5mby5kaXJfdHgpKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJnc1xuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwlpZiAoKGlvcmVxLT51aW5mby5kaXJfdHgpICYmIChpb3JlcS0+dWluZm8udXZfb2Zmc2V0KSkgeworCQlCQ01MT0dfRVJSKCJVViBvZmZzZXQgZm9yIFRYPz9cbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisKKwl9CisKKwlkZXNjID0gcGRlc2NfbWVtLT5wZG1hX2Rlc2Nfc3RhcnQ7CisJZGVzY19wYWRkcl9iYXNlID0gcGRlc2NfbWVtLT5waHlfYWRkcjsKKworCWlmIChpb3JlcS0+dWluZm8uZGlyX3R4IHx8IChpb3JlcS0+dWluZm8udXZfb2Zmc2V0ID09IDApKSB7CisJCXNnX2NudCA9IGlvcmVxLT5zZ19jbnQ7CisJCXhmcl9zeiA9IGlvcmVxLT51aW5mby54ZnJfbGVuOworCX0gZWxzZSB7CisJCXNnX2NudCA9IGlvcmVxLT51aW5mby51dl9zZ19peCArIDE7CisJCXhmcl9zeiA9IGlvcmVxLT51aW5mby51dl9vZmZzZXQ7CisJfQorCisJc3RzID0gY3J5c3RhbGhkX2h3X2ZpbGxfZGVzYyhpb3JlcSwgZGVzYywgZGVzY19wYWRkcl9iYXNlLCBzZ19jbnQsCisJCQkJICAgc2dfc3RfaXgsIHNnX3N0X29mZiwgeGZyX3N6KTsKKworCWlmICgoc3RzICE9IEJDX1NUU19TVUNDRVNTKSB8fCAhaW9yZXEtPnVpbmZvLnV2X29mZnNldCkKKwkJcmV0dXJuIHN0czsKKworCS8qIFByZXBhcmUgZm9yIFVWIG1hcHBpbmcuLiAqLworCWRlc2MgPSAmcGRlc2NfbWVtLT5wZG1hX2Rlc2Nfc3RhcnRbc2dfY250XTsKKwlkZXNjX3BhZGRyX2Jhc2UgPSBwZGVzY19tZW0tPnBoeV9hZGRyICsKKwkJCSAgKHNnX2NudCAqIHNpemVvZihkbWFfZGVzY3JpcHRvcikpOworCisJLyogRG9uZSB3aXRoIGRlc2MgYWRkci4uIG5vdyB1cGRhdGUgc2cgc3R1ZmYuKi8KKwlzZ19jbnQgICAgPSBpb3JlcS0+c2dfY250IC0gaW9yZXEtPnVpbmZvLnV2X3NnX2l4OworCXhmcl9zeiAgICA9IGlvcmVxLT51aW5mby54ZnJfbGVuIC0gaW9yZXEtPnVpbmZvLnV2X29mZnNldDsKKwlzZ19zdF9peCAgPSBpb3JlcS0+dWluZm8udXZfc2dfaXg7CisJc2dfc3Rfb2ZmID0gaW9yZXEtPnVpbmZvLnV2X3NnX29mZjsKKworCXN0cyA9IGNyeXN0YWxoZF9od19maWxsX2Rlc2MoaW9yZXEsIGRlc2MsIGRlc2NfcGFkZHJfYmFzZSwgc2dfY250LAorCQkJCSAgIHNnX3N0X2l4LCBzZ19zdF9vZmYsIHhmcl9zeik7CisJaWYgKHN0cyAhPSBCQ19TVFNfU1VDQ0VTUykKKwkJcmV0dXJuIHN0czsKKworCSp1dl9kZXNjX2luZGV4ID0gc2dfc3RfaXg7CisKKwlyZXR1cm4gc3RzOworfQorCitzdGF0aWMgdm9pZCBjcnlzdGFsaGRfc3RhcnRfdHhfZG1hX2VuZ2luZShzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodykKK3sKKwl1aW50MzJfdCBkbWFfY250cmw7CisKKwlkbWFfY250cmwgPSBjcnlzdGFsaGRfcmVnX3JkKGh3LT5hZHAsIE1JU0MxX1RYX1NXX0RFU0NfTElTVF9DVFJMX1NUUyk7CisJaWYgKCEoZG1hX2NudHJsICYgRE1BX1NUQVJUX0JJVCkpIHsKKwkJZG1hX2NudHJsIHw9IERNQV9TVEFSVF9CSVQ7CisJCWNyeXN0YWxoZF9yZWdfd3IoaHctPmFkcCwgTUlTQzFfVFhfU1dfREVTQ19MSVNUX0NUUkxfU1RTLAorCQkJICAgICAgIGRtYV9jbnRybCk7CisJfQorCisJcmV0dXJuOworfQorCisvKiBfQ0hFQ0tfVEhJU18KKyAqCisgKiBWZXJpZnkgaWYgdGhlIFN0b3AgZ2VuZXJhdGVzIGEgY29tcGxldGlvbiBpbnRlcnJ1cHQgb3Igbm90LgorICogaWYgaXQgZG9lcyBub3QgZ2VuZXJhdGUgYW4gaW50ZXJydXB0LCB0aGVuIGFkZCBwb2xsaW5nIGhlcmUuCisgKi8KK3N0YXRpYyBCQ19TVEFUVVMgY3J5c3RhbGhkX3N0b3BfdHhfZG1hX2VuZ2luZShzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodykKK3sKKwl1aW50MzJfdCBkbWFfY250cmwsIGNudCA9IDMwOworCXVpbnQzMl90IGwxID0gMSwgbDIgPSAxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCisJZG1hX2NudHJsID0gY3J5c3RhbGhkX3JlZ19yZChody0+YWRwLCBNSVNDMV9UWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFMpOworCisJQkNNTE9HKEJDTUxPR19EQkcsICJTdG9wcGluZyBUWCBETUEgRW5naW5lLi5cbiIpOworCisJLyogRklYTUU6IGphcm9kOiBpbnZlcnQgZG1hX2N0cmwgYW5kIGNoZWNrIGJpdD8gb3IgYXJlIHRoZXJlIG1pc3NpbmcgcGFyZW5zPyAqLworCWlmICghZG1hX2NudHJsICYgRE1BX1NUQVJUX0JJVCkgeworCQlCQ01MT0coQkNNTE9HX0RCRywgIkFscmVhZHkgU3RvcHBlZFxuIik7CisJCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKKwl9CisKKwljcnlzdGFsaGRfZGlzYWJsZV9pbnRlcnJ1cHRzKGh3LT5hZHApOworCisJLyogSXNzdWUgc3RvcCB0byBIVyAqLworCS8qIFRoaXMgYml0IHdoZW4gc2V0IGdhdmUgcHJvYmxlbXMuIFBsZWFzZSBjaGVjayovCisJZG1hX2NudHJsICY9IH5ETUFfU1RBUlRfQklUOworCWNyeXN0YWxoZF9yZWdfd3IoaHctPmFkcCwgTUlTQzFfVFhfU1dfREVTQ19MSVNUX0NUUkxfU1RTLCBkbWFfY250cmwpOworCisJQkNNTE9HKEJDTUxPR19EQkcsICJDbGVhcmVkIHRoZSBETUEgU3RhcnQgYml0XG4iKTsKKworCS8qIFBvbGwgZm9yIDNzZWNvbmRzICgzMCAqIDEwMG1zKSBvbiBib3RoIHRoZSBsaXN0cy4uKi8KKwl3aGlsZSAoKGwxIHx8IGwyKSAmJiBjbnQpIHsKKworCQlpZiAobDEpIHsKKwkJCWwxID0gY3J5c3RhbGhkX3JlZ19yZChody0+YWRwLCBNSVNDMV9UWF9GSVJTVF9ERVNDX0xfQUREUl9MSVNUMCk7CisJCQlsMSAmPSBETUFfU1RBUlRfQklUOworCQl9CisKKwkJaWYgKGwyKSB7CisJCQlsMiA9IGNyeXN0YWxoZF9yZWdfcmQoaHctPmFkcCwgTUlTQzFfVFhfRklSU1RfREVTQ19MX0FERFJfTElTVDEpOworCQkJbDIgJj0gRE1BX1NUQVJUX0JJVDsKKwkJfQorCisJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMCk7CisKKwkJY250LS07CisJfQorCisJaWYgKCFjbnQpIHsKKwkJQkNNTE9HX0VSUigiRmFpbGVkIHRvIHN0b3AgVFggRE1BLi4gbDEgJWQsIGwyICVkXG4iLCBsMSwgbDIpOworCQljcnlzdGFsaGRfZW5hYmxlX2ludGVycnVwdHMoaHctPmFkcCk7CisJCXJldHVybiBCQ19TVFNfRVJST1I7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5sb2NrLCBmbGFncyk7CisJaHctPnR4X2xpc3RfcG9zdF9pbmRleCA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmxvY2ssIGZsYWdzKTsKKwlCQ01MT0coQkNNTE9HX0RCRywgInN0b3BwZWQgVFggRE1BLi5cbiIpOworCWNyeXN0YWxoZF9lbmFibGVfaW50ZXJydXB0cyhody0+YWRwKTsKKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworc3RhdGljIHVpbnQzMl90IGNyeXN0YWxoZF9nZXRfcGliX2F2YWlsX2NudChzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodykKK3sKKwkvKgorCSogUG9zaXRpb24gb2YgdGhlIFBJQiBFbnRyaWVzIGNhbiBiZSBmb3VuZCBhdAorCSogMHRoIGFuZCB0aGUgMXN0IGxvY2F0aW9uIG9mIHRoZSBDaXJjdWxhciBsaXN0LgorCSovCisJdWludDMyX3QgUV9hZGRyOworCXVpbnQzMl90IHBpYl9jbnQsIHJfb2Zmc2V0LCB3X29mZnNldDsKKworCVFfYWRkciA9IGh3LT5waWJfZGVsX1FfYWRkcjsKKworCS8qIEdldCB0aGUgUmVhZCBQb2ludGVyICovCisJY3J5c3RhbGhkX21lbV9yZChody0+YWRwLCBRX2FkZHIsIDEsICZyX29mZnNldCk7CisKKwkvKiBHZXQgdGhlIFdyaXRlIFBvaW50ZXIgKi8KKwljcnlzdGFsaGRfbWVtX3JkKGh3LT5hZHAsIFFfYWRkciArIHNpemVvZih1aW50MzJfdCksIDEsICZ3X29mZnNldCk7CisKKwlpZiAocl9vZmZzZXQgPT0gd19vZmZzZXQpCisJCXJldHVybiAwOwkvKiBRdWV1ZSBpcyBlbXB0eSAqLworCisJaWYgKHdfb2Zmc2V0ID4gcl9vZmZzZXQpCisJCXBpYl9jbnQgPSB3X29mZnNldCAtIHJfb2Zmc2V0OworCWVsc2UKKwkJcGliX2NudCA9ICh3X29mZnNldCArIE1BWF9QSUJfUV9ERVBUSCkgLQorCQkJICAocl9vZmZzZXQgKyBNSU5fUElCX1FfREVQVEgpOworCisJaWYgKHBpYl9jbnQgPiBNQVhfUElCX1FfREVQVEgpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBQSUIgQ291bnQgKCV1KVxuIiwgcGliX2NudCk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBwaWJfY250OworfQorCitzdGF0aWMgdWludDMyX3QgY3J5c3RhbGhkX2dldF9hZGRyX2Zyb21fcGliX1Eoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcpCit7CisJdWludDMyX3QgUV9hZGRyOworCXVpbnQzMl90IGFkZHJfZW50cnksIHJfb2Zmc2V0LCB3X29mZnNldDsKKworCVFfYWRkciA9IGh3LT5waWJfZGVsX1FfYWRkcjsKKworCS8qIEdldCB0aGUgUmVhZCBQb2ludGVyIDBUaCBMb2NhdGlvbiBpcyBSZWFkIFBvaW50ZXIgKi8KKwljcnlzdGFsaGRfbWVtX3JkKGh3LT5hZHAsIFFfYWRkciwgMSwgJnJfb2Zmc2V0KTsKKworCS8qIEdldCB0aGUgV3JpdGUgUG9pbnRlciAxc3QgTG9jYXRpb24gaXMgV3JpdGUgcG9pbnRlciAqLworCWNyeXN0YWxoZF9tZW1fcmQoaHctPmFkcCwgUV9hZGRyICsgc2l6ZW9mKHVpbnQzMl90KSwgMSwgJndfb2Zmc2V0KTsKKworCS8qIFF1ZXVlIGlzIGVtcHR5ICovCisJaWYgKHJfb2Zmc2V0ID09IHdfb2Zmc2V0KQorCQlyZXR1cm4gMDsKKworCWlmICgocl9vZmZzZXQgPCBNSU5fUElCX1FfREVQVEgpIHx8IChyX29mZnNldCA+PSBNQVhfUElCX1FfREVQVEgpKQorCQlyZXR1cm4gMDsKKworCS8qIEdldCB0aGUgQWN0dWFsIEFkZHJlc3Mgb2YgdGhlIFBJQiAqLworCWNyeXN0YWxoZF9tZW1fcmQoaHctPmFkcCwgUV9hZGRyICsgKHJfb2Zmc2V0ICogc2l6ZW9mKHVpbnQzMl90KSksCisJCSAgICAgICAxLCAmYWRkcl9lbnRyeSk7CisKKwkvKiBJbmNyZW1lbnQgdGhlIFJlYWQgUG9pbnRlciAqLworCXJfb2Zmc2V0Kys7CisKKwlpZiAoTUFYX1BJQl9RX0RFUFRIID09IHJfb2Zmc2V0KQorCQlyX29mZnNldCA9IE1JTl9QSUJfUV9ERVBUSDsKKworCS8qIFdyaXRlIGJhY2sgdGhlIHJlYWQgcG9pbnRlciB0byBJdCdzIExvY2F0aW9uICovCisJY3J5c3RhbGhkX21lbV93cihody0+YWRwLCBRX2FkZHIsIDEsICZyX29mZnNldCk7CisKKwlyZXR1cm4gYWRkcl9lbnRyeTsKK30KKworc3RhdGljIGJvb2wgY3J5c3RhbGhkX3JlbF9hZGRyX3RvX3BpYl9RKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3LCB1aW50MzJfdCBhZGRyX3RvX3JlbCkKK3sKKwl1aW50MzJfdCBRX2FkZHI7CisJdWludDMyX3Qgcl9vZmZzZXQsIHdfb2Zmc2V0LCBuX29mZnNldDsKKworCVFfYWRkciA9IGh3LT5waWJfcmVsX1FfYWRkcjsKKworCS8qIEdldCB0aGUgUmVhZCBQb2ludGVyICovCisJY3J5c3RhbGhkX21lbV9yZChody0+YWRwLCBRX2FkZHIsIDEsICZyX29mZnNldCk7CisKKwkvKiBHZXQgdGhlIFdyaXRlIFBvaW50ZXIgKi8KKwljcnlzdGFsaGRfbWVtX3JkKGh3LT5hZHAsIFFfYWRkciArIHNpemVvZih1aW50MzJfdCksIDEsICZ3X29mZnNldCk7CisKKwlpZiAoKHJfb2Zmc2V0IDwgTUlOX1BJQl9RX0RFUFRIKSB8fAorCSAgICAocl9vZmZzZXQgPj0gTUFYX1BJQl9RX0RFUFRIKSkKKwkJcmV0dXJuIGZhbHNlOworCisJbl9vZmZzZXQgPSB3X29mZnNldCArIDE7CisKKwlpZiAoTUFYX1BJQl9RX0RFUFRIID09IG5fb2Zmc2V0KQorCQluX29mZnNldCA9IE1JTl9QSUJfUV9ERVBUSDsKKworCWlmIChyX29mZnNldCA9PSBuX29mZnNldCkKKwkJcmV0dXJuIGZhbHNlOyAvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisKKwkvKiBXcml0ZSB0aGUgRFJBTSBBRERSIHRvIHRoZSBRdWV1ZSBhdCBOZXh0IE9mZnNldCAqLworCWNyeXN0YWxoZF9tZW1fd3IoaHctPmFkcCwgUV9hZGRyICsgKHdfb2Zmc2V0ICogc2l6ZW9mKHVpbnQzMl90KSksCisJCSAgICAgICAxLCAmYWRkcl90b19yZWwpOworCisJLyogUHV0IHRoZSBOZXcgdmFsdWUgb2YgdGhlIHdyaXRlIHBvaW50ZXIgaW4gUXVldWUgKi8KKwljcnlzdGFsaGRfbWVtX3dyKGh3LT5hZHAsIFFfYWRkciArIHNpemVvZih1aW50MzJfdCksIDEsICZuX29mZnNldCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgY3B5X3BpYl90b19hcHAoQzAxMV9QSUIgKnNyY19waWIsIEJDX1BJQ19JTkZPX0JMT0NLICpkc3RfcGliKQoreworCWlmICghc3JjX3BpYiB8fCAhZHN0X3BpYikgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIEFyZ3VtZW50c1xuIik7CisJCXJldHVybjsKKwl9CisKKwlkc3RfcGliLT50aW1lU3RhbXAgICAgICAgICAgID0gMDsKKwlkc3RfcGliLT5waWN0dXJlX251bWJlciAgICAgID0gc3JjX3BpYi0+cHBiLnBpY3R1cmVfbnVtYmVyOworCWRzdF9waWItPndpZHRoICAgICAgICAgICAgICAgPSBzcmNfcGliLT5wcGIud2lkdGg7CisJZHN0X3BpYi0+aGVpZ2h0ICAgICAgICAgICAgICA9IHNyY19waWItPnBwYi5oZWlnaHQ7CisJZHN0X3BpYi0+Y2hyb21hX2Zvcm1hdCAgICAgICA9IHNyY19waWItPnBwYi5jaHJvbWFfZm9ybWF0OworCWRzdF9waWItPnB1bGxkb3duICAgICAgICAgICAgPSBzcmNfcGliLT5wcGIucHVsbGRvd247CisJZHN0X3BpYi0+ZmxhZ3MgICAgICAgICAgICAgICA9IHNyY19waWItPnBwYi5mbGFnczsKKwlkc3RfcGliLT5zZXNzX251bSAgICAgICAgICAgID0gc3JjX3BpYi0+cHRzU3RjT2Zmc2V0OworCWRzdF9waWItPmFzcGVjdF9yYXRpbyAgICAgICAgPSBzcmNfcGliLT5wcGIuYXNwZWN0X3JhdGlvOworCWRzdF9waWItPmNvbG91cl9wcmltYXJpZXMgICAgID0gc3JjX3BpYi0+cHBiLmNvbG91cl9wcmltYXJpZXM7CisJZHN0X3BpYi0+cGljdHVyZV9tZXRhX3BheWxvYWQgPSBzcmNfcGliLT5wcGIucGljdHVyZV9tZXRhX3BheWxvYWQ7CisJZHN0X3BpYi0+ZnJhbWVfcmF0ZQkJPSBzcmNfcGliLT5yZXNvbHV0aW9uIDsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGNyeXN0YWxoZF9od19wcm9jX3BpYihzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodykKK3sKKwl1bnNpZ25lZCBpbnQgY250OworCUMwMTFfUElCIHNyY19waWI7CisJdWludDMyX3QgcGliX2FkZHIsIHBpYl9jbnQ7CisJQkNfUElDX0lORk9fQkxPQ0sgKkFwcFBpYjsKKwljcnlzdGFsaGRfcnhfZG1hX3BrdCAqcnhfcGt0ID0gTlVMTDsKKworCXBpYl9jbnQgPSBjcnlzdGFsaGRfZ2V0X3BpYl9hdmFpbF9jbnQoaHcpOworCisJaWYgKCFwaWJfY250KQorCQlyZXR1cm47CisKKwlmb3IgKGNudCA9IDA7IGNudCA8IHBpYl9jbnQ7IGNudCsrKSB7CisKKwkJcGliX2FkZHIgPSBjcnlzdGFsaGRfZ2V0X2FkZHJfZnJvbV9waWJfUShodyk7CisJCWNyeXN0YWxoZF9tZW1fcmQoaHctPmFkcCwgcGliX2FkZHIsIHNpemVvZihDMDExX1BJQikgLyA0LAorCQkJICAgICAgICh1aW50MzJfdCAqKSZzcmNfcGliKTsKKworCQlpZiAoc3JjX3BpYi5iRm9ybWF0Q2hhbmdlKSB7CisJCQlyeF9wa3QgPSAoY3J5c3RhbGhkX3J4X2RtYV9wa3QgKiljcnlzdGFsaGRfZGlvcV9mZXRjaChody0+cnhfZnJlZXEpOworCQkJaWYgKCFyeF9wa3QpCisJCQkJcmV0dXJuOworCQkJcnhfcGt0LT5mbGFncyA9IDA7CisJCQlyeF9wa3QtPmZsYWdzIHw9IENPTVBfRkxBR19QSUJfVkFMSUQgfCBDT01QX0ZMQUdfRk1UX0NIQU5HRTsKKwkJCUFwcFBpYiA9ICZyeF9wa3QtPnBpYjsKKwkJCWNweV9waWJfdG9fYXBwKCZzcmNfcGliLCBBcHBQaWIpOworCisJCQlCQ01MT0coQkNNTE9HX0RCRywKKwkJCSAgICAgICAiQXBwIFBJQjoleCAleCAleCAleCAleCAleCAleCAleCAleCAleFxuIiwKKwkJCSAgICAgICByeF9wa3QtPnBpYi5waWN0dXJlX251bWJlciwKKwkJCSAgICAgICByeF9wa3QtPnBpYi5hc3BlY3RfcmF0aW8sCisJCQkgICAgICAgcnhfcGt0LT5waWIuY2hyb21hX2Zvcm1hdCwKKwkJCSAgICAgICByeF9wa3QtPnBpYi5jb2xvdXJfcHJpbWFyaWVzLAorCQkJICAgICAgIHJ4X3BrdC0+cGliLmZyYW1lX3JhdGUsCisJCQkgICAgICAgcnhfcGt0LT5waWIuaGVpZ2h0LAorCQkJICAgICAgIHJ4X3BrdC0+cGliLmhlaWdodCwKKwkJCSAgICAgICByeF9wa3QtPnBpYi5uX2Ryb3AsCisJCQkgICAgICAgcnhfcGt0LT5waWIucHVsbGRvd24sCisJCQkgICAgICAgcnhfcGt0LT5waWIueWNvbSk7CisKKwkJCWNyeXN0YWxoZF9kaW9xX2FkZChody0+cnhfcmR5cSwgKHZvaWQgKilyeF9wa3QsIHRydWUsIHJ4X3BrdC0+cGt0X3RhZyk7CisKKwkJfQorCisJCWNyeXN0YWxoZF9yZWxfYWRkcl90b19waWJfUShodywgcGliX2FkZHIpOworCX0KK30KKworc3RhdGljIHZvaWQgY3J5c3RhbGhkX3N0YXJ0X3J4X2RtYV9lbmdpbmUoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcpCit7CisJdWludDMyX3QgICAgICAgIGRtYV9jbnRybDsKKworCWRtYV9jbnRybCA9IGNyeXN0YWxoZF9yZWdfcmQoaHctPmFkcCwgTUlTQzFfWV9SWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFMpOworCWlmICghKGRtYV9jbnRybCAmIERNQV9TVEFSVF9CSVQpKSB7CisJCWRtYV9jbnRybCB8PSBETUFfU1RBUlRfQklUOworCQljcnlzdGFsaGRfcmVnX3dyKGh3LT5hZHAsIE1JU0MxX1lfUlhfU1dfREVTQ19MSVNUX0NUUkxfU1RTLCBkbWFfY250cmwpOworCX0KKworCWRtYV9jbnRybCA9IGNyeXN0YWxoZF9yZWdfcmQoaHctPmFkcCwgTUlTQzFfVVZfUlhfU1dfREVTQ19MSVNUX0NUUkxfU1RTKTsKKwlpZiAoIShkbWFfY250cmwgJiBETUFfU1RBUlRfQklUKSkgeworCQlkbWFfY250cmwgfD0gRE1BX1NUQVJUX0JJVDsKKwkJY3J5c3RhbGhkX3JlZ193cihody0+YWRwLCBNSVNDMV9VVl9SWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFMsIGRtYV9jbnRybCk7CisJfQorCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBjcnlzdGFsaGRfc3RvcF9yeF9kbWFfZW5naW5lKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3KQoreworCXVpbnQzMl90IGRtYV9jbnRybCA9IDAsIGNvdW50ID0gMzA7CisJdWludDMyX3QgbDB5ID0gMSwgbDB1diA9IDEsIGwxeSA9IDEsIGwxdXYgPSAxOworCisJZG1hX2NudHJsID0gY3J5c3RhbGhkX3JlZ19yZChody0+YWRwLCBNSVNDMV9ZX1JYX1NXX0RFU0NfTElTVF9DVFJMX1NUUyk7CisJaWYgKChkbWFfY250cmwgJiBETUFfU1RBUlRfQklUKSkgeworCQlkbWFfY250cmwgJj0gfkRNQV9TVEFSVF9CSVQ7CisJCWNyeXN0YWxoZF9yZWdfd3IoaHctPmFkcCwgTUlTQzFfWV9SWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFMsIGRtYV9jbnRybCk7CisJfQorCisJZG1hX2NudHJsID0gY3J5c3RhbGhkX3JlZ19yZChody0+YWRwLCBNSVNDMV9VVl9SWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFMpOworCWlmICgoZG1hX2NudHJsICYgRE1BX1NUQVJUX0JJVCkpIHsKKwkJZG1hX2NudHJsICY9IH5ETUFfU1RBUlRfQklUOworCQljcnlzdGFsaGRfcmVnX3dyKGh3LT5hZHAsIE1JU0MxX1VWX1JYX1NXX0RFU0NfTElTVF9DVFJMX1NUUywgZG1hX2NudHJsKTsKKwl9CisKKwkvKiBQb2xsIGZvciAzc2Vjb25kcyAoMzAgKiAxMDBtcykgb24gYm90aCB0aGUgbGlzdHMuLiovCisJd2hpbGUgKChsMHkgfHwgbDB1diB8fCBsMXkgfHwgbDF1dikgJiYgY291bnQpIHsKKworCQlpZiAobDB5KSB7CisJCQlsMHkgPSBjcnlzdGFsaGRfcmVnX3JkKGh3LT5hZHAsIE1JU0MxX1lfUlhfRklSU1RfREVTQ19MX0FERFJfTElTVDApOworCQkJbDB5ICY9IERNQV9TVEFSVF9CSVQ7CisJCQlpZiAoIWwweSkgeworCQkJCWh3LT5yeF9saXN0X3N0c1swXSAmPSB+cnhfd2FpdGluZ195X2ludHI7CisJCQl9CisJCX0KKworCQlpZiAobDF5KSB7CisJCQlsMXkgPSBjcnlzdGFsaGRfcmVnX3JkKGh3LT5hZHAsIE1JU0MxX1lfUlhfRklSU1RfREVTQ19MX0FERFJfTElTVDEpOworCQkJbDF5ICY9IERNQV9TVEFSVF9CSVQ7CisJCQlpZiAoIWwxeSkgeworCQkJCWh3LT5yeF9saXN0X3N0c1sxXSAmPSB+cnhfd2FpdGluZ195X2ludHI7CisJCQl9CisJCX0KKworCQlpZiAobDB1dikgeworCQkJbDB1diA9IGNyeXN0YWxoZF9yZWdfcmQoaHctPmFkcCwgTUlTQzFfVVZfUlhfRklSU1RfREVTQ19MX0FERFJfTElTVDApOworCQkJbDB1diAmPSBETUFfU1RBUlRfQklUOworCQkJaWYgKCFsMHV2KSB7CisJCQkJaHctPnJ4X2xpc3Rfc3RzWzBdICY9IH5yeF93YWl0aW5nX3V2X2ludHI7CisJCQl9CisJCX0KKworCQlpZiAobDF1dikgeworCQkJbDF1diA9IGNyeXN0YWxoZF9yZWdfcmQoaHctPmFkcCwgTUlTQzFfVVZfUlhfRklSU1RfREVTQ19MX0FERFJfTElTVDEpOworCQkJbDF1diAmPSBETUFfU1RBUlRfQklUOworCQkJaWYgKCFsMXV2KSB7CisJCQkJaHctPnJ4X2xpc3Rfc3RzWzFdICY9IH5yeF93YWl0aW5nX3V2X2ludHI7CisJCQl9CisJCX0KKwkJbXNsZWVwX2ludGVycnVwdGlibGUoMTAwKTsKKwkJY291bnQtLTsKKwl9CisKKwlody0+cnhfbGlzdF9wb3N0X2luZGV4ID0gMDsKKworCUJDTUxPRyhCQ01MT0dfU1NURVAsICJDYXB0dXJlIFN0b3A6ICVkIExpc3QwOlN0czoleCBMaXN0MTpTdHM6JXhcbiIsCisJICAgICAgIGNvdW50LCBody0+cnhfbGlzdF9zdHNbMF0sIGh3LT5yeF9saXN0X3N0c1sxXSk7Cit9CisKK3N0YXRpYyBCQ19TVEFUVVMgY3J5c3RhbGhkX2h3X3Byb2dfcnhkbWEoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcsIGNyeXN0YWxoZF9yeF9kbWFfcGt0ICpyeF9wa3QpCit7CisJdWludDMyX3QgeV9sb3dfYWRkcl9yZWcsIHlfaGlnaF9hZGRyX3JlZzsKKwl1aW50MzJfdCB1dl9sb3dfYWRkcl9yZWcsIHV2X2hpZ2hfYWRkcl9yZWc7CisJYWRkcl82NCBkZXNjX2FkZHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghaHcgfHwgIXJ4X3BrdCkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIEFyZ3VtZW50c1xuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwlpZiAoaHctPnJ4X2xpc3RfcG9zdF9pbmRleCA+PSBETUFfRU5HSU5FX0NOVCkgeworCQlCQ01MT0dfRVJSKCJMaXN0IE91dCBPZiBib3VuZHMgJXhcbiIsIGh3LT5yeF9saXN0X3Bvc3RfaW5kZXgpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5yeF9sb2NrLCBmbGFncyk7CisJLyogRklYTUU6IGphcm9kOiBzdHNfZnJlZSBpcyBhbiBlbnVtIGZvciAwLCBpbiBjcnlzdGFsaGRfaHcuaC4uLiB5dWsuLi4gKi8KKwlpZiAoc3RzX2ZyZWUgIT0gaHctPnJ4X2xpc3Rfc3RzW2h3LT5yeF9saXN0X3Bvc3RfaW5kZXhdKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5yeF9sb2NrLCBmbGFncyk7CisJCXJldHVybiBCQ19TVFNfQlVTWTsKKwl9CisKKwlpZiAoIWh3LT5yeF9saXN0X3Bvc3RfaW5kZXgpIHsKKwkJeV9sb3dfYWRkcl9yZWcgICA9IE1JU0MxX1lfUlhfRklSU1RfREVTQ19MX0FERFJfTElTVDA7CisJCXlfaGlnaF9hZGRyX3JlZyAgPSBNSVNDMV9ZX1JYX0ZJUlNUX0RFU0NfVV9BRERSX0xJU1QwOworCQl1dl9sb3dfYWRkcl9yZWcgID0gTUlTQzFfVVZfUlhfRklSU1RfREVTQ19MX0FERFJfTElTVDA7CisJCXV2X2hpZ2hfYWRkcl9yZWcgPSBNSVNDMV9VVl9SWF9GSVJTVF9ERVNDX1VfQUREUl9MSVNUMDsKKwl9IGVsc2UgeworCQl5X2xvd19hZGRyX3JlZyAgID0gTUlTQzFfWV9SWF9GSVJTVF9ERVNDX0xfQUREUl9MSVNUMTsKKwkJeV9oaWdoX2FkZHJfcmVnICA9IE1JU0MxX1lfUlhfRklSU1RfREVTQ19VX0FERFJfTElTVDE7CisJCXV2X2xvd19hZGRyX3JlZyAgPSBNSVNDMV9VVl9SWF9GSVJTVF9ERVNDX0xfQUREUl9MSVNUMTsKKwkJdXZfaGlnaF9hZGRyX3JlZyA9IE1JU0MxX1VWX1JYX0ZJUlNUX0RFU0NfVV9BRERSX0xJU1QxOworCX0KKwlyeF9wa3QtPnBrdF90YWcgPSBody0+cnhfcGt0X3RhZ19zZWVkICsgaHctPnJ4X2xpc3RfcG9zdF9pbmRleDsKKwlody0+cnhfbGlzdF9zdHNbaHctPnJ4X2xpc3RfcG9zdF9pbmRleF0gfD0gcnhfd2FpdGluZ195X2ludHI7CisJaWYgKHJ4X3BrdC0+dXZfcGh5X2FkZHIpCisJCWh3LT5yeF9saXN0X3N0c1tody0+cnhfbGlzdF9wb3N0X2luZGV4XSB8PSByeF93YWl0aW5nX3V2X2ludHI7CisJaHctPnJ4X2xpc3RfcG9zdF9pbmRleCA9IChody0+cnhfbGlzdF9wb3N0X2luZGV4ICsgMSkgJSBETUFfRU5HSU5FX0NOVDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+cnhfbG9jaywgZmxhZ3MpOworCisJY3J5c3RhbGhkX2Rpb3FfYWRkKGh3LT5yeF9hY3RxLCAodm9pZCAqKXJ4X3BrdCwgZmFsc2UsIHJ4X3BrdC0+cGt0X3RhZyk7CisKKwljcnlzdGFsaGRfc3RhcnRfcnhfZG1hX2VuZ2luZShodyk7CisJLyogUHJvZ3JhbSB0aGUgWSBkZXNjcmlwdG9yICovCisJZGVzY19hZGRyLmZ1bGxfYWRkciA9IHJ4X3BrdC0+ZGVzY19tZW0ucGh5X2FkZHI7CisJY3J5c3RhbGhkX3JlZ193cihody0+YWRwLCB5X2hpZ2hfYWRkcl9yZWcsIGRlc2NfYWRkci5oaWdoX3BhcnQpOworCWNyeXN0YWxoZF9yZWdfd3IoaHctPmFkcCwgeV9sb3dfYWRkcl9yZWcsIGRlc2NfYWRkci5sb3dfcGFydCB8IDB4MDEpOworCisJaWYgKHJ4X3BrdC0+dXZfcGh5X2FkZHIpIHsKKwkJLyogUHJvZ3JhbSB0aGUgVVYgZGVzY3JpcHRvciAqLworCQlkZXNjX2FkZHIuZnVsbF9hZGRyID0gcnhfcGt0LT51dl9waHlfYWRkcjsKKwkJY3J5c3RhbGhkX3JlZ193cihody0+YWRwLCB1dl9oaWdoX2FkZHJfcmVnLCBkZXNjX2FkZHIuaGlnaF9wYXJ0KTsKKwkJY3J5c3RhbGhkX3JlZ193cihody0+YWRwLCB1dl9sb3dfYWRkcl9yZWcsIGRlc2NfYWRkci5sb3dfcGFydCB8IDB4MDEpOworCX0KKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworc3RhdGljIEJDX1NUQVRVUyBjcnlzdGFsaGRfaHdfcG9zdF9jYXBfYnVmZihzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodywKKwkJCQkJICBjcnlzdGFsaGRfcnhfZG1hX3BrdCAqcnhfcGt0KQoreworCUJDX1NUQVRVUyBzdHMgPSBjcnlzdGFsaGRfaHdfcHJvZ19yeGRtYShodywgcnhfcGt0KTsKKworCWlmIChzdHMgPT0gQkNfU1RTX0JVU1kpCisJCWNyeXN0YWxoZF9kaW9xX2FkZChody0+cnhfZnJlZXEsICh2b2lkICopcnhfcGt0LAorCQkJCSBmYWxzZSwgcnhfcGt0LT5wa3RfdGFnKTsKKworCXJldHVybiBzdHM7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXN0YWxoZF9nZXRfZG5zeihzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodywgdWludDMyX3QgbGlzdF9pbmRleCwKKwkJCSAgICAgdWludDMyX3QgKnlfZHdfZG5zeiwgdWludDMyX3QgKnV2X2R3X2Ruc3opCit7CisJdWludDMyX3QgeV9kbl9zel9yZWcsIHV2X2RuX3N6X3JlZzsKKworCWlmICghbGlzdF9pbmRleCkgeworCQl5X2RuX3N6X3JlZyAgPSBNSVNDMV9ZX1JYX0xJU1QwX0NVUl9CWVRFX0NOVDsKKwkJdXZfZG5fc3pfcmVnID0gTUlTQzFfVVZfUlhfTElTVDBfQ1VSX0JZVEVfQ05UOworCX0gZWxzZSB7CisJCXlfZG5fc3pfcmVnICA9IE1JU0MxX1lfUlhfTElTVDFfQ1VSX0JZVEVfQ05UOworCQl1dl9kbl9zel9yZWcgPSBNSVNDMV9VVl9SWF9MSVNUMV9DVVJfQllURV9DTlQ7CisJfQorCisJKnlfZHdfZG5zeiAgPSBjcnlzdGFsaGRfcmVnX3JkKGh3LT5hZHAsIHlfZG5fc3pfcmVnKTsKKwkqdXZfZHdfZG5zeiA9IGNyeXN0YWxoZF9yZWdfcmQoaHctPmFkcCwgdXZfZG5fc3pfcmVnKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIG1ha2luZyBzdXJlIHRoYXQgdGhlIHR3byBETUEKKyAqIGxpc3RzIGFyZSBmcmVlLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIGlmIERNQSdzIGFyZSBhY3RpdmUsIGJlZm9yZQorICogdHVybmluZyBvZmYgdGhlIERNQS4KKyAqLworc3RhdGljIHZvaWQgY3J5c3RhbGhkX2h3X2ZpbmFsaXplX3BhdXNlKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3KQoreworCXVpbnQzMl90IGRtYV9jbnRybCwgYXNwbTsKKworCWh3LT5zdG9wX3BlbmRpbmcgPSAwOworCisJZG1hX2NudHJsID0gY3J5c3RhbGhkX3JlZ19yZChody0+YWRwLCBNSVNDMV9ZX1JYX1NXX0RFU0NfTElTVF9DVFJMX1NUUyk7CisJaWYgKGRtYV9jbnRybCAmIERNQV9TVEFSVF9CSVQpIHsKKwkJZG1hX2NudHJsICY9IH5ETUFfU1RBUlRfQklUOworCQljcnlzdGFsaGRfcmVnX3dyKGh3LT5hZHAsIE1JU0MxX1lfUlhfU1dfREVTQ19MSVNUX0NUUkxfU1RTLCBkbWFfY250cmwpOworCX0KKworCWRtYV9jbnRybCA9IGNyeXN0YWxoZF9yZWdfcmQoaHctPmFkcCwgTUlTQzFfVVZfUlhfU1dfREVTQ19MSVNUX0NUUkxfU1RTKTsKKwlpZiAoZG1hX2NudHJsICYgRE1BX1NUQVJUX0JJVCkgeworCQlkbWFfY250cmwgJj0gfkRNQV9TVEFSVF9CSVQ7CisJCWNyeXN0YWxoZF9yZWdfd3IoaHctPmFkcCwgTUlTQzFfVVZfUlhfU1dfREVTQ19MSVNUX0NUUkxfU1RTLCBkbWFfY250cmwpOworCX0KKwlody0+cnhfbGlzdF9wb3N0X2luZGV4ID0gMDsKKworCWFzcG0gPSBjcnlzdGFsaGRfcmVnX3JkKGh3LT5hZHAsIFBDSUVfRExMX0RBVEFfTElOS19DT05UUk9MKTsKKwlhc3BtIHw9IEFTUE1fTDFfRU5BQkxFOworCS8qIE5BUkVOIEJDTUxPRyhCQ01MT0dfSU5GTywgImFzcG0gb25cbiIpOyAqLworCWNyeXN0YWxoZF9yZWdfd3IoaHctPmFkcCwgUENJRV9ETExfREFUQV9MSU5LX0NPTlRST0wsIGFzcG0pOworfQorCitzdGF0aWMgQkNfU1RBVFVTIGNyeXN0YWxoZF9yeF9wa3RfZG9uZShzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodywgdWludDMyX3QgbGlzdF9pbmRleCwKKwkJCQkgICAgIEJDX1NUQVRVUyBjb21wX3N0cykKK3sKKwljcnlzdGFsaGRfcnhfZG1hX3BrdCAqcnhfcGt0ID0gTlVMTDsKKwl1aW50MzJfdCB5X2R3X2Ruc3osIHV2X2R3X2Ruc3o7CisJQkNfU1RBVFVTIHN0cyA9IEJDX1NUU19TVUNDRVNTOworCisJaWYgKCFodyB8fCBsaXN0X2luZGV4ID49IERNQV9FTkdJTkVfQ05UKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJndW1lbnRzXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCXJ4X3BrdCA9IGNyeXN0YWxoZF9kaW9xX2ZpbmRfYW5kX2ZldGNoKGh3LT5yeF9hY3RxLAorCQkJCQkgICAgIGh3LT5yeF9wa3RfdGFnX3NlZWQgKyBsaXN0X2luZGV4KTsKKwlpZiAoIXJ4X3BrdCkgeworCQlCQ01MT0dfRVJSKCJBY3QtUTpQb3N0SXg6JXggTDBTdHM6JXggTDFTdHM6JXggY3VycmVudCBMOiV4IHRhZzoleCBjb21wOiV4XG4iLAorCQkJICAgaHctPnJ4X2xpc3RfcG9zdF9pbmRleCwgaHctPnJ4X2xpc3Rfc3RzWzBdLAorCQkJICAgaHctPnJ4X2xpc3Rfc3RzWzFdLCBsaXN0X2luZGV4LAorCQkJICAgaHctPnJ4X3BrdF90YWdfc2VlZCArIGxpc3RfaW5kZXgsIGNvbXBfc3RzKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCWlmIChjb21wX3N0cyA9PSBCQ19TVFNfU1VDQ0VTUykgeworCQljcnlzdGFsaGRfZ2V0X2Ruc3ooaHcsIGxpc3RfaW5kZXgsICZ5X2R3X2Ruc3osICZ1dl9kd19kbnN6KTsKKwkJcnhfcGt0LT5kaW9fcmVxLT51aW5mby55X2RvbmVfc3ogPSB5X2R3X2Ruc3o7CisJCXJ4X3BrdC0+ZmxhZ3MgPSBDT01QX0ZMQUdfREFUQV9WQUxJRDsKKwkJaWYgKHJ4X3BrdC0+dXZfcGh5X2FkZHIpCisJCQlyeF9wa3QtPmRpb19yZXEtPnVpbmZvLnV2X2RvbmVfc3ogPSB1dl9kd19kbnN6OworCQljcnlzdGFsaGRfZGlvcV9hZGQoaHctPnJ4X3JkeXEsIHJ4X3BrdCwgdHJ1ZSwKKwkJCQlody0+cnhfcGt0X3RhZ19zZWVkICsgbGlzdF9pbmRleCk7CisJCXJldHVybiBzdHM7CisJfQorCisJLyogQ2hlY2sgaWYgd2UgY2FuIHBvc3QgdGhpcyBESU8gYWdhaW4uICovCisJcmV0dXJuIGNyeXN0YWxoZF9od19wb3N0X2NhcF9idWZmKGh3LCByeF9wa3QpOworfQorCitzdGF0aWMgYm9vbCBjcnlzdGFsaGRfcnhfbGlzdDBfaGFuZGxlcihzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodywgdWludDMyX3QgaW50X3N0cywKKwkJCQkgICAgIHVpbnQzMl90IHlfZXJyX3N0cywgdWludDMyX3QgdXZfZXJyX3N0cykKK3sKKwl1aW50MzJfdCB0bXA7CisJbGlzdF9zdHMgdG1wX2xzdHM7CisKKwlpZiAoISh5X2Vycl9zdHMgJiBHRVRfWTBfRVJSX01TSykgJiYgISh1dl9lcnJfc3RzICYgR0VUX1VWMF9FUlJfTVNLKSkKKwkJcmV0dXJuIGZhbHNlOworCisJdG1wX2xzdHMgPSBody0+cnhfbGlzdF9zdHNbMF07CisKKwkvKiBZMCAtIERNQSAqLworCXRtcCA9IHlfZXJyX3N0cyAmIEdFVF9ZMF9FUlJfTVNLOworCWlmIChpbnRfc3RzICYgSU5UUl9JTlRSX1NUQVRVU19MMF9ZX1JYX0RNQV9ET05FX0lOVFJfTUFTSykKKwkJaHctPnJ4X2xpc3Rfc3RzWzBdICY9IH5yeF93YWl0aW5nX3lfaW50cjsKKworCWlmICh5X2Vycl9zdHMgJiBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9VTkRFUlJVTl9FUlJPUl9NQVNLKSB7CisJCWh3LT5yeF9saXN0X3N0c1swXSAmPSB+cnhfd2FpdGluZ195X2ludHI7CisJCXRtcCAmPSB+TUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfVU5ERVJSVU5fRVJST1JfTUFTSzsKKwl9CisKKwlpZiAoeV9lcnJfc3RzICYgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfRklGT19GVUxMX0VSUk9SU19NQVNLKSB7CisJCWh3LT5yeF9saXN0X3N0c1swXSAmPSB+cnhfeV9tYXNrOworCQlody0+cnhfbGlzdF9zdHNbMF0gfD0gcnhfeV9lcnJvcjsKKwkJdG1wICY9IH5NSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9GSUZPX0ZVTExfRVJST1JTX01BU0s7CisJfQorCisJaWYgKHRtcCkgeworCQlody0+cnhfbGlzdF9zdHNbMF0gJj0gfnJ4X3lfbWFzazsKKwkJaHctPnJ4X2xpc3Rfc3RzWzBdIHw9IHJ4X3lfZXJyb3I7CisJCWh3LT5yeF9saXN0X3Bvc3RfaW5kZXggPSAwOworCX0KKworCS8qIFVWMCAtIERNQSAqLworCXRtcCA9IHV2X2Vycl9zdHMgJiBHRVRfVVYwX0VSUl9NU0s7CisJaWYgKGludF9zdHMgJiBJTlRSX0lOVFJfU1RBVFVTX0wwX1VWX1JYX0RNQV9ET05FX0lOVFJfTUFTSykKKwkJaHctPnJ4X2xpc3Rfc3RzWzBdICY9IH5yeF93YWl0aW5nX3V2X2ludHI7CisKKwlpZiAodXZfZXJyX3N0cyAmIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9VTkRFUlJVTl9FUlJPUl9NQVNLKSB7CisJCWh3LT5yeF9saXN0X3N0c1swXSAmPSB+cnhfd2FpdGluZ191dl9pbnRyOworCQl0bXAgJj0gfk1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9VTkRFUlJVTl9FUlJPUl9NQVNLOworCX0KKworCWlmICh1dl9lcnJfc3RzICYgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wwX0ZJRk9fRlVMTF9FUlJPUlNfTUFTSykgeworCQlody0+cnhfbGlzdF9zdHNbMF0gJj0gfnJ4X3V2X21hc2s7CisJCWh3LT5yeF9saXN0X3N0c1swXSB8PSByeF91dl9lcnJvcjsKKwkJdG1wICY9IH5NSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfRklGT19GVUxMX0VSUk9SU19NQVNLOworCX0KKworCWlmICh0bXApIHsKKwkJaHctPnJ4X2xpc3Rfc3RzWzBdICY9IH5yeF91dl9tYXNrOworCQlody0+cnhfbGlzdF9zdHNbMF0gfD0gcnhfdXZfZXJyb3I7CisJCWh3LT5yeF9saXN0X3Bvc3RfaW5kZXggPSAwOworCX0KKworCWlmICh5X2Vycl9zdHMgJiBHRVRfWTBfRVJSX01TSykgeworCQl0bXAgPSB5X2Vycl9zdHMgJiBHRVRfWTBfRVJSX01TSzsKKwkJY3J5c3RhbGhkX3JlZ193cihody0+YWRwLCBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVUywgdG1wKTsKKwl9CisKKwlpZiAodXZfZXJyX3N0cyAmIEdFVF9VVjBfRVJSX01TSykgeworCQl0bXAgPSB1dl9lcnJfc3RzICYgR0VUX1VWMF9FUlJfTVNLOworCQljcnlzdGFsaGRfcmVnX3dyKGh3LT5hZHAsIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVUywgdG1wKTsKKwl9CisKKwlyZXR1cm4gKHRtcF9sc3RzICE9IGh3LT5yeF9saXN0X3N0c1swXSk7Cit9CisKK3N0YXRpYyBib29sIGNyeXN0YWxoZF9yeF9saXN0MV9oYW5kbGVyKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3LCB1aW50MzJfdCBpbnRfc3RzLAorCQkJCSAgICAgdWludDMyX3QgeV9lcnJfc3RzLCB1aW50MzJfdCB1dl9lcnJfc3RzKQoreworCXVpbnQzMl90IHRtcDsKKwlsaXN0X3N0cyB0bXBfbHN0czsKKworCWlmICghKHlfZXJyX3N0cyAmIEdFVF9ZMV9FUlJfTVNLKSAmJiAhKHV2X2Vycl9zdHMgJiBHRVRfVVYxX0VSUl9NU0spKQorCQlyZXR1cm4gZmFsc2U7CisKKwl0bXBfbHN0cyA9IGh3LT5yeF9saXN0X3N0c1sxXTsKKworCS8qIFkxIC0gRE1BICovCisJdG1wID0geV9lcnJfc3RzICYgR0VUX1kxX0VSUl9NU0s7CisJaWYgKGludF9zdHMgJiBJTlRSX0lOVFJfU1RBVFVTX0wxX1lfUlhfRE1BX0RPTkVfSU5UUl9NQVNLKQorCQlody0+cnhfbGlzdF9zdHNbMV0gJj0gfnJ4X3dhaXRpbmdfeV9pbnRyOworCisJaWYgKHlfZXJyX3N0cyAmIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wxX1VOREVSUlVOX0VSUk9SX01BU0spIHsKKwkJaHctPnJ4X2xpc3Rfc3RzWzFdICY9IH5yeF93YWl0aW5nX3lfaW50cjsKKwkJdG1wICY9IH5NSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9VTkRFUlJVTl9FUlJPUl9NQVNLOworCX0KKworCWlmICh5X2Vycl9zdHMgJiBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9GSUZPX0ZVTExfRVJST1JTX01BU0spIHsKKwkJLyogQWRkIHJldHJ5LXN1cHBvcnQuLiovCisJCWh3LT5yeF9saXN0X3N0c1sxXSAmPSB+cnhfeV9tYXNrOworCQlody0+cnhfbGlzdF9zdHNbMV0gfD0gcnhfeV9lcnJvcjsKKwkJdG1wICY9IH5NSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9GSUZPX0ZVTExfRVJST1JTX01BU0s7CisJfQorCisJaWYgKHRtcCkgeworCQlody0+cnhfbGlzdF9zdHNbMV0gJj0gfnJ4X3lfbWFzazsKKwkJaHctPnJ4X2xpc3Rfc3RzWzFdIHw9IHJ4X3lfZXJyb3I7CisJCWh3LT5yeF9saXN0X3Bvc3RfaW5kZXggPSAwOworCX0KKworCS8qIFVWMSAtIERNQSAqLworCXRtcCA9IHV2X2Vycl9zdHMgJiBHRVRfVVYxX0VSUl9NU0s7CisJaWYgKGludF9zdHMgJiBJTlRSX0lOVFJfU1RBVFVTX0wxX1VWX1JYX0RNQV9ET05FX0lOVFJfTUFTSykgeworCQlody0+cnhfbGlzdF9zdHNbMV0gJj0gfnJ4X3dhaXRpbmdfdXZfaW50cjsKKwl9CisKKwlpZiAodXZfZXJyX3N0cyAmIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9VTkRFUlJVTl9FUlJPUl9NQVNLKSB7CisJCWh3LT5yeF9saXN0X3N0c1sxXSAmPSB+cnhfd2FpdGluZ191dl9pbnRyOworCQl0bXAgJj0gfk1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9VTkRFUlJVTl9FUlJPUl9NQVNLOworCX0KKworCWlmICh1dl9lcnJfc3RzICYgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wxX0ZJRk9fRlVMTF9FUlJPUlNfTUFTSykgeworCQkvKiBBZGQgcmV0cnktc3VwcG9ydCovCisJCWh3LT5yeF9saXN0X3N0c1sxXSAmPSB+cnhfdXZfbWFzazsKKwkJaHctPnJ4X2xpc3Rfc3RzWzFdIHw9IHJ4X3V2X2Vycm9yOworCQl0bXAgJj0gfk1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9GSUZPX0ZVTExfRVJST1JTX01BU0s7CisJfQorCisJaWYgKHRtcCkgeworCQlody0+cnhfbGlzdF9zdHNbMV0gJj0gfnJ4X3V2X21hc2s7CisJCWh3LT5yeF9saXN0X3N0c1sxXSB8PSByeF91dl9lcnJvcjsKKwkJaHctPnJ4X2xpc3RfcG9zdF9pbmRleCA9IDA7CisJfQorCisJaWYgKHlfZXJyX3N0cyAmIEdFVF9ZMV9FUlJfTVNLKSB7CisJCXRtcCA9IHlfZXJyX3N0cyAmIEdFVF9ZMV9FUlJfTVNLOworCQljcnlzdGFsaGRfcmVnX3dyKGh3LT5hZHAsIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTLCB0bXApOworCX0KKworCWlmICh1dl9lcnJfc3RzICYgR0VUX1VWMV9FUlJfTVNLKSB7CisJCXRtcCA9IHV2X2Vycl9zdHMgJiBHRVRfVVYxX0VSUl9NU0s7CisJCWNyeXN0YWxoZF9yZWdfd3IoaHctPmFkcCwgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTLCB0bXApOworCX0KKworCXJldHVybiAodG1wX2xzdHMgIT0gaHctPnJ4X2xpc3Rfc3RzWzFdKTsKK30KKworCitzdGF0aWMgdm9pZCBjcnlzdGFsaGRfcnhfaXNyKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3LCB1aW50MzJfdCBpbnRyX3N0cykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVpbnQzMl90IGksIGxpc3RfYXZhaWwgPSAwOworCUJDX1NUQVRVUyBjb21wX3N0cyA9IEJDX1NUU19OT19EQVRBOworCXVpbnQzMl90IHlfZXJyX3N0cywgdXZfZXJyX3N0cywgeV9kbl9zeiA9IDAsIHV2X2RuX3N6ID0gMDsKKwlib29sIHJldCA9IDA7CisKKwlpZiAoIWh3KSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJndW1lbnRzXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghKGludHJfc3RzICYgR0VUX1JYX0lOVFJfTUFTSykpCisJCXJldHVybjsKKworCXlfZXJyX3N0cyA9IGNyeXN0YWxoZF9yZWdfcmQoaHctPmFkcCwgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVMpOworCXV2X2Vycl9zdHMgPSBjcnlzdGFsaGRfcmVnX3JkKGh3LT5hZHAsIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVUyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRE1BX0VOR0lORV9DTlQ7IGkrKykgeworCQkvKiBVcGRhdGUgU3RhdGVzLi4qLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPnJ4X2xvY2ssIGZsYWdzKTsKKwkJaWYgKGkgPT0gMCkKKwkJCXJldCA9IGNyeXN0YWxoZF9yeF9saXN0MF9oYW5kbGVyKGh3LCBpbnRyX3N0cywgeV9lcnJfc3RzLCB1dl9lcnJfc3RzKTsKKwkJZWxzZQorCQkJcmV0ID0gY3J5c3RhbGhkX3J4X2xpc3QxX2hhbmRsZXIoaHcsIGludHJfc3RzLCB5X2Vycl9zdHMsIHV2X2Vycl9zdHMpOworCQlpZiAocmV0KSB7CisJCQlzd2l0Y2ggKGh3LT5yeF9saXN0X3N0c1tpXSkgeworCQkJY2FzZSBzdHNfZnJlZToKKwkJCQljb21wX3N0cyA9IEJDX1NUU19TVUNDRVNTOworCQkJCWxpc3RfYXZhaWwgPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSByeF95X2Vycm9yOgorCQkJY2FzZSByeF91dl9lcnJvcjoKKwkJCWNhc2Ugcnhfc3RzX2Vycm9yOgorCQkJCS8qIFdlIGdvdCBlcnJvciBvbiBib3RoIG9yIFkgb3IgdXYuICovCisJCQkJaHctPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCWNyeXN0YWxoZF9nZXRfZG5zeihodywgaSwgJnlfZG5fc3osICZ1dl9kbl9zeik7CisJCQkJLyogRklYTUU6IGphcm9kOiB0aGlzIGlzIHdoZXJlIG15IG1pbmkgcGNpLWUgY2FyZCBpcyB0cmlwcGluZyB1cCAqLworCQkJCUJDTUxPRyhCQ01MT0dfREJHLCAibGlzdF9pbmRleDoleCByeFslZF0gWToleCAiCisJCQkJICAgICAgICJVVjoleCBJbnQ6JXggWURuU3o6JXggVVZEblN6OiV4XG4iLAorCQkJCSAgICAgICBpLCBody0+c3RhdHMucnhfZXJyb3JzLCB5X2Vycl9zdHMsCisJCQkJICAgICAgIHV2X2Vycl9zdHMsIGludHJfc3RzLCB5X2RuX3N6LCB1dl9kbl9zeik7CisJCQkJaHctPnJ4X2xpc3Rfc3RzW2ldID0gc3RzX2ZyZWU7CisJCQkJY29tcF9zdHMgPSBCQ19TVFNfRVJST1I7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCS8qIFdhaXQgZm9yIGNvbXBsZXRpb24uLiovCisJCQkJY29tcF9zdHMgPSBCQ19TVFNfTk9fREFUQTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+cnhfbG9jaywgZmxhZ3MpOworCisJCS8qIGhhbmRsZSBjb21wbGV0aW9uLi4uKi8KKwkJaWYgKGNvbXBfc3RzICE9IEJDX1NUU19OT19EQVRBKSB7CisJCQljcnlzdGFsaGRfcnhfcGt0X2RvbmUoaHcsIGksIGNvbXBfc3RzKTsKKwkJCWNvbXBfc3RzID0gQkNfU1RTX05PX0RBVEE7CisJCX0KKwl9CisKKwlpZiAobGlzdF9hdmFpbCkgeworCQlpZiAoaHctPnN0b3BfcGVuZGluZykgeworCQkJaWYgKChody0+cnhfbGlzdF9zdHNbMF0gPT0gc3RzX2ZyZWUpICYmCisJCQkgICAgKGh3LT5yeF9saXN0X3N0c1sxXSA9PSBzdHNfZnJlZSkpCisJCQkJY3J5c3RhbGhkX2h3X2ZpbmFsaXplX3BhdXNlKGh3KTsKKwkJfSBlbHNlIHsKKwkJCWNyeXN0YWxoZF9od19zdGFydF9jYXB0dXJlKGh3KTsKKwkJfQorCX0KK30KKworc3RhdGljIEJDX1NUQVRVUyBjcnlzdGFsaGRfZndfY21kX3Bvc3RfcHJvYyhzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodywKKwkJCQkJICBCQ19GV19DTUQgKmZ3X2NtZCkKK3sKKwlCQ19TVEFUVVMgc3RzID0gQkNfU1RTX1NVQ0NFU1M7CisJRGVjUnNwQ2hhbm5lbFN0YXJ0VmlkZW8gKnN0X3JzcCA9IE5VTEw7CisKKwlzd2l0Y2ggKGZ3X2NtZC0+Y21kWzBdKSB7CisJY2FzZSBlQ01EX0MwMTFfREVDX0NIQU5fU1RBUlRfVklERU86CisJCXN0X3JzcCA9IChEZWNSc3BDaGFubmVsU3RhcnRWaWRlbyAqKWZ3X2NtZC0+cnNwOworCQlody0+cGliX2RlbF9RX2FkZHIgPSBzdF9yc3AtPnBpY0luZm9EZWxpdmVyeVE7CisJCWh3LT5waWJfcmVsX1FfYWRkciA9IHN0X3JzcC0+cGljSW5mb1JlbGVhc2VROworCQlCQ01MT0coQkNNTE9HX0RCRywgIkRlbFFBZGRyOiV4IFJlbFFBZGRyOiV4XG4iLAorCQkgICAgICAgaHctPnBpYl9kZWxfUV9hZGRyLCBody0+cGliX3JlbF9RX2FkZHIpOworCQlicmVhazsKKwljYXNlIGVDTURfQzAxMV9JTklUOgorCQlpZiAoIShjcnlzdGFsaGRfbG9hZF9maXJtd2FyZV9jb25maWcoaHctPmFkcCkpKSB7CisJCQlCQ01MT0dfRVJSKCJJbnZhbGlkIFBhcmFtcy5cbiIpOworCQkJc3RzID0gQkNfU1RTX0ZXX0FVVEhfRkFJTEVEOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc3RzOworfQorCitzdGF0aWMgQkNfU1RBVFVTIGNyeXN0YWxoZF9wdXRfZGRyMnNsZWVwKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3KQoreworCXVpbnQzMl90IHJlZzsKKwlsaW5rX21pc2NfcGVyc3RfZGVjb2Rlcl9jdHJsIHJzdF9jbnRybF9yZWc7CisKKwkvKiBQdWxzZSByZXNldCBwaW4gb2YgNzQxMiAoTUlTQ19QRVJTVF9ERUNPREVSX0NUUkwpICovCisJcnN0X2NudHJsX3JlZy53aG9sZV9yZWcgPSBjcnlzdGFsaGRfcmVnX3JkKGh3LT5hZHAsIE1JU0NfUEVSU1RfREVDT0RFUl9DVFJMKTsKKworCXJzdF9jbnRybF9yZWcuYmNtXzc0MTJfcnN0ID0gMTsKKwljcnlzdGFsaGRfcmVnX3dyKGh3LT5hZHAsIE1JU0NfUEVSU1RfREVDT0RFUl9DVFJMLCByc3RfY250cmxfcmVnLndob2xlX3JlZyk7CisJbXNsZWVwX2ludGVycnVwdGlibGUoNTApOworCisJcnN0X2NudHJsX3JlZy5iY21fNzQxMl9yc3QgPSAwOworCWNyeXN0YWxoZF9yZWdfd3IoaHctPmFkcCwgTUlTQ19QRVJTVF9ERUNPREVSX0NUUkwsIHJzdF9jbnRybF9yZWcud2hvbGVfcmVnKTsKKworCS8qIENsb3NlIGFsbCBiYW5rcywgcHV0IEREUiBpbiBpZGxlICovCisJYmNfZGVjX3JlZ193cihody0+YWRwLCBTRFJBTV9QUkVDSEFSR0UsIDApOworCisJLyogU2V0IGJpdCAyNSAoZHJvcCBDS0UgcGluIG9mIEREUikgKi8KKwlyZWcgPSBiY19kZWNfcmVnX3JkKGh3LT5hZHAsIFNEUkFNX1BBUkFNKTsKKwlyZWcgfD0gMHgwMjAwMDAwMDsKKwliY19kZWNfcmVnX3dyKGh3LT5hZHAsIFNEUkFNX1BBUkFNLCByZWcpOworCisJLyogUmVzZXQgdGhlIGF1ZGlvIGJsb2NrICovCisJYmNfZGVjX3JlZ193cihody0+YWRwLCBBVURfRFNQX01JU0NfU09GVF9SRVNFVCwgMHgxKTsKKworCS8qIFBvd2VyIGRvd24gUmFwdG9yIFBMTCAqLworCXJlZyA9IGJjX2RlY19yZWdfcmQoaHctPmFkcCwgRGVjSHRfUGxsQ0N0bCk7CisJcmVnIHw9IDB4MDAwMDgwMDA7CisJYmNfZGVjX3JlZ193cihody0+YWRwLCBEZWNIdF9QbGxDQ3RsLCByZWcpOworCisJLyogUG93ZXIgZG93biBhbGwgQXVkaW8gUExMICovCisJYmNfZGVjX3JlZ193cihody0+YWRwLCBBSU9fTUlTQ19QTExfUkVTRVQsIDB4MSk7CisKKwkvKiBQb3dlciBkb3duIHZpZGVvIGNsb2NrICg3NU1IeikgKi8KKwlyZWcgPSBiY19kZWNfcmVnX3JkKGh3LT5hZHAsIERlY0h0X1BsbEVDdGwpOworCXJlZyB8PSAweDAwMDA4MDAwOworCWJjX2RlY19yZWdfd3IoaHctPmFkcCwgRGVjSHRfUGxsRUN0bCwgcmVnKTsKKworCS8qIFBvd2VyIGRvd24gdmlkZW8gY2xvY2sgKDc1TUh6KSAqLworCXJlZyA9IGJjX2RlY19yZWdfcmQoaHctPmFkcCwgRGVjSHRfUGxsREN0bCk7CisJcmVnIHw9IDB4MDAwMDgwMDA7CisJYmNfZGVjX3JlZ193cihody0+YWRwLCBEZWNIdF9QbGxEQ3RsLCByZWcpOworCisJLyogUG93ZXIgZG93biBjb3JlIGNsb2NrICgyMDBNSHopICovCisJcmVnID0gYmNfZGVjX3JlZ19yZChody0+YWRwLCBEZWNIdF9QbGxBQ3RsKTsKKwlyZWcgfD0gMHgwMDAwODAwMDsKKwliY19kZWNfcmVnX3dyKGh3LT5hZHAsIERlY0h0X1BsbEFDdGwsIHJlZyk7CisKKwkvKiBQb3dlciBkb3duIGNvcmUgY2xvY2sgKDIwME1IeikgKi8KKwlyZWcgPSBiY19kZWNfcmVnX3JkKGh3LT5hZHAsIERlY0h0X1BsbEJDdGwpOworCXJlZyB8PSAweDAwMDA4MDAwOworCWJjX2RlY19yZWdfd3IoaHctPmFkcCwgRGVjSHRfUGxsQkN0bCwgcmVnKTsKKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0JDX1NUQVRVUyBjcnlzdGFsaGRfZG93bmxvYWRfZncoc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCwgdm9pZCAqYnVmZmVyLCB1aW50MzJfdCBzeikKK3sKKwl1aW50MzJfdCByZWdfZGF0YSwgY250LCAqdGVtcF9idWZmOworCXVpbnQzMl90IGZ3X3NpZ19sZW4gPSAzNjsKKwl1aW50MzJfdCBkcmFtX29mZnNldCA9IEJDX0ZXSU1HX1NUX0FERFIsIHNpZ19yZWc7CisKKwlCQ01MT0dfRU5URVI7CisKKwlpZiAoIWFkcCB8fCAhYnVmZmVyIHx8ICFzeikgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIFBhcmFtcy5cbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJcmVnX2RhdGEgPSBjcnlzdGFsaGRfcmVnX3JkKGFkcCwgT1RQX0NNRCk7CisJaWYgKCEocmVnX2RhdGEgJiAweDAyKSkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIGh3IGNvbmZpZy4uIG90cCBub3QgcHJvZ3JhbW1lZFxuIik7CisJCXJldHVybiBCQ19TVFNfRVJST1I7CisJfQorCisJcmVnX2RhdGEgPSAwOworCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBEQ0lfQ01ELCAwKTsKKwlyZWdfZGF0YSB8PSBCQ19CSVQoMCk7CisJY3J5c3RhbGhkX3JlZ193cihhZHAsIERDSV9DTUQsIHJlZ19kYXRhKTsKKworCXJlZ19kYXRhID0gMDsKKwljbnQgPSAxMDAwOworCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwKTsKKworCXdoaWxlIChyZWdfZGF0YSAhPSBCQ19CSVQoNCkpIHsKKwkJcmVnX2RhdGEgPSBjcnlzdGFsaGRfcmVnX3JkKGFkcCwgRENJX1NUQVRVUyk7CisJCXJlZ19kYXRhICY9IEJDX0JJVCg0KTsKKwkJaWYgKC0tY250ID09IDApIHsKKwkJCUJDTUxPR19FUlIoIkZpcm13YXJlIERvd25sb2FkIFJEWSBUaW1lb3V0LlxuIik7CisJCQlyZXR1cm4gQkNfU1RTX1RJTUVPVVQ7CisJCX0KKwl9CisKKwltc2xlZXBfaW50ZXJydXB0aWJsZSgxMCk7CisJLyogIExvYWQgdGhlIEZXIHRvIHRoZSBGV19BRERSIGZpZWxkIGluIHRoZSBEQ0lfRklSTVdBUkVfQUREUiAqLworCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBEQ0lfRklSTVdBUkVfQUREUiwgZHJhbV9vZmZzZXQpOworCXRlbXBfYnVmZiA9ICh1aW50MzJfdCAqKWJ1ZmZlcjsKKwlmb3IgKGNudCA9IDA7IGNudCA8IChzeiAtIGZ3X3NpZ19sZW4pOyBjbnQgKz0gNCkgeworCQljcnlzdGFsaGRfcmVnX3dyKGFkcCwgRENJX0RSQU1fQkFTRV9BRERSLCAoZHJhbV9vZmZzZXQgPj4gMTkpKTsKKwkJY3J5c3RhbGhkX3JlZ193cihhZHAsIERDSV9GSVJNV0FSRV9EQVRBLCAqdGVtcF9idWZmKTsKKwkJZHJhbV9vZmZzZXQgKz0gNDsKKwkJdGVtcF9idWZmKys7CisJfQorCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwKTsKKworCXRlbXBfYnVmZisrOworCisJc2lnX3JlZyA9ICh1aW50MzJfdClEQ0lfU0lHTkFUVVJFX0RBVEFfNzsKKwlmb3IgKGNudCA9IDA7IGNudCA8IDg7IGNudCsrKSB7CisJCXVpbnQzMl90IHN3YXBwZWRfZGF0YSA9ICp0ZW1wX2J1ZmY7CisJCXN3YXBwZWRfZGF0YSA9IGJzd2FwXzMyXzEoc3dhcHBlZF9kYXRhKTsKKwkJY3J5c3RhbGhkX3JlZ193cihhZHAsIHNpZ19yZWcsIHN3YXBwZWRfZGF0YSk7CisJCXNpZ19yZWcgLT0gNDsKKwkJdGVtcF9idWZmKys7CisJfQorCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwKTsKKworCXJlZ19kYXRhID0gMDsKKwlyZWdfZGF0YSB8PSBCQ19CSVQoMSk7CisJY3J5c3RhbGhkX3JlZ193cihhZHAsIERDSV9DTUQsIHJlZ19kYXRhKTsKKwltc2xlZXBfaW50ZXJydXB0aWJsZSgxMCk7CisKKwlyZWdfZGF0YSA9IDA7CisJcmVnX2RhdGEgPSBjcnlzdGFsaGRfcmVnX3JkKGFkcCwgRENJX1NUQVRVUyk7CisKKwlpZiAoKHJlZ19kYXRhICYgQkNfQklUKDkpKSA9PSBCQ19CSVQoOSkpIHsKKwkJY250ID0gMTAwMDsKKwkJd2hpbGUgKChyZWdfZGF0YSAmIEJDX0JJVCgwKSkgIT0gQkNfQklUKDApKSB7CisJCQlyZWdfZGF0YSA9IGNyeXN0YWxoZF9yZWdfcmQoYWRwLCBEQ0lfU1RBVFVTKTsKKwkJCXJlZ19kYXRhICY9IEJDX0JJVCgwKTsKKwkJCWlmICghKC0tY250KSkKKwkJCQlicmVhazsKKwkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwKTsKKwkJfQorCQlyZWdfZGF0YSA9IDA7CisJCXJlZ19kYXRhID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIERDSV9DTUQpOworCQlyZWdfZGF0YSB8PSBCQ19CSVQoNCk7CisJCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBEQ0lfQ01ELCByZWdfZGF0YSk7CisKKwl9IGVsc2UgeworCQlCQ01MT0dfRVJSKCJGL3cgU2lnbmF0dXJlIG1pc21hdGNoXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19GV19BVVRIX0ZBSUxFRDsKKwl9CisKKwlCQ01MT0coQkNNTE9HX0lORk8sICJGaXJtd2FyZSBEb3dubG9hZGVkIFN1Y2Nlc3NmdWxseVxuIik7CisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOzsKK30KKworQkNfU1RBVFVTIGNyeXN0YWxoZF9kb19md19jbWQoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcsIEJDX0ZXX0NNRCAqZndfY21kKQoreworCXVpbnQzMl90IGNudCA9IDAsIGNtZF9yZXNfYWRkcjsKKwl1aW50MzJfdCAqY21kX2J1ZmYsICpyZXNfYnVmZjsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBmd19jbWRfZXZlbnQ7CisJaW50IHJjID0gMDsKKwlCQ19TVEFUVVMgc3RzOworCisJY3J5c3RhbGhkX2NyZWF0ZV9ldmVudCgmZndfY21kX2V2ZW50KTsKKworCUJDTUxPR19FTlRFUjsKKworCWlmICghaHcgfHwgIWZ3X2NtZCkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIEFyZ3VtZW50c1xuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwljbWRfYnVmZiA9IGZ3X2NtZC0+Y21kOworCXJlc19idWZmID0gZndfY21kLT5yc3A7CisKKwlpZiAoIWNtZF9idWZmIHx8ICFyZXNfYnVmZikgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIFBhcmFtZXRlcnMgZm9yIEYvVyBDb21tYW5kIFxuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwlody0+cHdyX2xvY2srKzsKKworCWh3LT5md2NtZF9ldnRfc3RzID0gMDsKKwlody0+cGZ3X2NtZF9ldmVudCA9ICZmd19jbWRfZXZlbnQ7CisKKwkvKldyaXRlIHRoZSBjb21tYW5kIHRvIHRoZSBtZW1vcnkqLworCWNyeXN0YWxoZF9tZW1fd3IoaHctPmFkcCwgVFNfSG9zdDJDcHVTbmQsIEZXX0NNRF9CVUZGX1NaLCBjbWRfYnVmZik7CisKKwkvKk1lbW9yeSBSZWFkIGZvciBtZW1vcnkgYXJiaXRyYXRvciBmbHVzaCovCisJY3J5c3RhbGhkX21lbV9yZChody0+YWRwLCBUU19Ib3N0MkNwdVNuZCwgMSwgJmNudCk7CisKKwkvKiBXcml0ZSB0aGUgY29tbWFuZCBhZGRyZXNzIHRvIG1haWxib3ggKi8KKwliY19kZWNfcmVnX3dyKGh3LT5hZHAsIEhzdDJDcHVNYngxLCBUU19Ib3N0MkNwdVNuZCk7CisJbXNsZWVwX2ludGVycnVwdGlibGUoNTApOworCisJY3J5c3RhbGhkX3dhaXRfb25fZXZlbnQoJmZ3X2NtZF9ldmVudCwgaHctPmZ3Y21kX2V2dF9zdHMsIDIwMDAwLCByYywgMCk7CisKKwlpZiAoIXJjKSB7CisJCXN0cyA9IEJDX1NUU19TVUNDRVNTOworCX0gZWxzZSBpZiAocmMgPT0gLUVCVVNZKSB7CisJCUJDTUxPR19FUlIoIkZpcm13YXJlIGNvbW1hbmQgVC9PXG4iKTsKKwkJc3RzID0gQkNfU1RTX1RJTUVPVVQ7CisJfSBlbHNlIGlmIChyYyA9PSAtRUlOVFIpIHsKKwkJQkNNTE9HKEJDTUxPR19EQkcsICJGd0NtZCBXYWl0IFNpZ25hbCBpbnQuXG4iKTsKKwkJc3RzID0gQkNfU1RTX0lPX1VTRVJfQUJPUlQ7CisJfSBlbHNlIHsKKwkJQkNNTE9HX0VSUigiRndDbWQgSU8gRXJyb3IuXG4iKTsKKwkJc3RzID0gQkNfU1RTX0lPX0VSUk9SOworCX0KKworCWlmIChzdHMgIT0gQkNfU1RTX1NVQ0NFU1MpIHsKKwkJQkNNTE9HX0VSUigiRndDbWQgRmFpbGVkLlxuIik7CisJCWh3LT5wd3JfbG9jay0tOworCQlyZXR1cm4gc3RzOworCX0KKworCS8qR2V0IHRoZSBSZXNwb25jZSBBZGRyZXNzKi8KKwljbWRfcmVzX2FkZHIgPSBiY19kZWNfcmVnX3JkKGh3LT5hZHAsIENwdTJIc3RNYngxKTsKKworCS8qUmVhZCB0aGUgUmVzcG9uc2UqLworCWNyeXN0YWxoZF9tZW1fcmQoaHctPmFkcCwgY21kX3Jlc19hZGRyLCBGV19DTURfQlVGRl9TWiwgcmVzX2J1ZmYpOworCisJaHctPnB3cl9sb2NrLS07CisKKwlpZiAocmVzX2J1ZmZbMl0gIT0gQzAxMV9SRVRfU1VDQ0VTUykgeworCQlCQ01MT0dfRVJSKCJyZXNfYnVmZlsyXSAhPSBDMDExX1JFVF9TVUNDRVNTXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19GV19DTURfRVJSOworCX0KKworCXN0cyA9IGNyeXN0YWxoZF9md19jbWRfcG9zdF9wcm9jKGh3LCBmd19jbWQpOworCWlmIChzdHMgIT0gQkNfU1RTX1NVQ0NFU1MpCisJCUJDTUxPR19FUlIoImNyeXN0YWxoZF9md19jbWRfcG9zdF9wcm9jIEZhaWxlZC5cbiIpOworCisJcmV0dXJuIHN0czsKK30KKworYm9vbCBjcnlzdGFsaGRfaHdfaW50ZXJydXB0KHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAsIHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3KQoreworCXVpbnQzMl90IGludHJfc3RzID0gMDsKKwl1aW50MzJfdCBkZWNvX2ludHIgPSAwOworCWJvb2wgcmMgPSAwOworCisJaWYgKCFhZHAgfHwgIWh3LT5kZXZfc3RhcnRlZCkKKwkJcmV0dXJuIHJjOworCisJaHctPnN0YXRzLm51bV9pbnRlcnJ1cHRzKys7CisJaHctPnB3cl9sb2NrKys7CisKKwlkZWNvX2ludHIgPSBiY19kZWNfcmVnX3JkKGFkcCwgU3RyZWFtMkhvc3RfSW50cl9TdHMpOworCWludHJfc3RzICA9IGNyeXN0YWxoZF9yZWdfcmQoYWRwLCBJTlRSX0lOVFJfU1RBVFVTKTsKKworCWlmIChpbnRyX3N0cykgeworCQkvKiBsZXQgc3lzdGVtIGtub3cgd2UgcHJvY2Vzc2VkIGludGVycnVwdC4uKi8KKwkJcmMgPSAxOworCQlody0+c3RhdHMuZGV2X2ludGVycnVwdHMrKzsKKwl9CisKKwlpZiAoZGVjb19pbnRyICYmIChkZWNvX2ludHIgIT0gMHhkZWFkZGVhZCkpIHsKKworCQlpZiAoZGVjb19pbnRyICYgMHg4MDAwMDAwMCkgeworCQkJLypTZXQgdGhlIEV2ZW50IGFuZCB0aGUgc3RhdHVzIGZsYWcqLworCQkJaWYgKGh3LT5wZndfY21kX2V2ZW50KSB7CisJCQkJaHctPmZ3Y21kX2V2dF9zdHMgPSAxOworCQkJCWNyeXN0YWxoZF9zZXRfZXZlbnQoaHctPnBmd19jbWRfZXZlbnQpOworCQkJfQorCQl9CisKKwkJaWYgKGRlY29faW50ciAmIEJDX0JJVCgxKSkKKwkJCWNyeXN0YWxoZF9od19wcm9jX3BpYihodyk7CisKKwkJYmNfZGVjX3JlZ193cihhZHAsIFN0cmVhbTJIb3N0X0ludHJfU3RzLCBkZWNvX2ludHIpOworCQkvKiBGSVhNRTogamFyb2Q6IE5vIHVkZWxheT8gbWlnaHQgdGhpcyBiZSB0aGUgcmVhbCByZWFzb24gbWluaSBwY2ktZSBjYXJkcyB3ZXJlIHN0YWxsaW5nIG91dD8gKi8KKwkJYmNfZGVjX3JlZ193cihhZHAsIFN0cmVhbTJIb3N0X0ludHJfU3RzLCAwKTsKKwkJcmMgPSAxOworCX0KKworCS8qIFJ4IGludGVycnVwdHMgKi8KKwljcnlzdGFsaGRfcnhfaXNyKGh3LCBpbnRyX3N0cyk7CisKKwkvKiBUeCBpbnRlcnJ1cHRzKi8KKwljcnlzdGFsaGRfdHhfaXNyKGh3LCBpbnRyX3N0cyk7CisKKwkvKiBDbGVhciBpbnRlcnJ1cHRzICovCisJaWYgKHJjKSB7CisJCWlmIChpbnRyX3N0cykKKwkJCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBJTlRSX0lOVFJfQ0xSX1JFRywgaW50cl9zdHMpOworCisJCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBJTlRSX0VPSV9DVFJMLCAxKTsKKwl9CisKKwlody0+cHdyX2xvY2stLTsKKworCXJldHVybiByYzsKK30KKworQkNfU1RBVFVTIGNyeXN0YWxoZF9od19vcGVuKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3LCBzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwKQoreworCWlmICghaHcgfHwgIWFkcCkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIEFyZ3VtZW50c1xuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwlpZiAoaHctPmRldl9zdGFydGVkKQorCQlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7CisKKwltZW1zZXQoaHcsIDAsIHNpemVvZihzdHJ1Y3QgY3J5c3RhbGhkX2h3KSk7CisKKwlody0+YWRwID0gYWRwOworCXNwaW5fbG9ja19pbml0KCZody0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmh3LT5yeF9sb2NrKTsKKwkvKiBGSVhNRTogamFyb2Q6IHdoYXQgYXJlIHRoZXNlIG1hZ2ljIG51bWJlcnM/IT8gKi8KKwlody0+dHhfaW9xX3RhZ19zZWVkID0gMHg3MDAyMzA3MDsKKwlody0+cnhfcGt0X3RhZ19zZWVkID0gMHg3MDAyOTA3MDsKKworCWh3LT5zdG9wX3BlbmRpbmcgPSAwOworCWNyeXN0YWxoZF9zdGFydF9kZXZpY2UoaHctPmFkcCk7CisJaHctPmRldl9zdGFydGVkID0gdHJ1ZTsKKworCS8qIHNldCBpbml0aWFsIGNvcmUgY2xvY2sgICovCisJaHctPmNvcmVfY2xvY2tfbWh6ID0gQ0xPQ0tfUFJFU0VUOworCWh3LT5wcmV2X24gPSAwOworCWh3LT5wd3JfbG9jayA9IDA7CisJY3J5c3RhbGhkX2h3X3NldF9jb3JlX2Nsb2NrKGh3KTsKKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworQkNfU1RBVFVTIGNyeXN0YWxoZF9od19jbG9zZShzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodykKK3sKKwlpZiAoIWh3KSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJndW1lbnRzXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCWlmICghaHctPmRldl9zdGFydGVkKQorCQlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7CisKKwkvKiBTdG9wIGFuZCBERFIgc2xlZXAgd2lsbCBoYXBwZW4gaW4gaGVyZSAqLworCWNyeXN0YWxoZF9od19zdXNwZW5kKGh3KTsKKwlody0+ZGV2X3N0YXJ0ZWQgPSBmYWxzZTsKKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworQkNfU1RBVFVTIGNyeXN0YWxoZF9od19zZXR1cF9kbWFfcmluZ3Moc3RydWN0IGNyeXN0YWxoZF9odyAqaHcpCit7CisJdW5zaWduZWQgaW50IGk7CisJdm9pZCAqbWVtOworCXNpemVfdCBtZW1fbGVuOworCWRtYV9hZGRyX3QgcGh5X2FkZHI7CisJQkNfU1RBVFVTIHN0cyA9IEJDX1NUU19TVUNDRVNTOworCWNyeXN0YWxoZF9yeF9kbWFfcGt0ICpycGt0OworCisJaWYgKCFodyB8fCAhaHctPmFkcCkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIEFyZ3VtZW50c1xuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwlzdHMgPSBjcnlzdGFsaGRfaHdfY3JlYXRlX2lvcXMoaHcpOworCWlmIChzdHMgIT0gQkNfU1RTX1NVQ0NFU1MpIHsKKwkJQkNNTE9HX0VSUigiRmFpbGVkIHRvIGNyZWF0ZSBJT1FzLi5cbiIpOworCQlyZXR1cm4gc3RzOworCX0KKworCW1lbV9sZW4gPSBCQ19MSU5LX01BWF9TR0xTICogc2l6ZW9mKGRtYV9kZXNjcmlwdG9yKTsKKworCWZvciAoaSA9IDA7IGkgPCBCQ19UWF9MSVNUX0NOVDsgaSsrKSB7CisJCW1lbSA9IGJjX2tlcm5fZG1hX2FsbG9jKGh3LT5hZHAsIG1lbV9sZW4sICZwaHlfYWRkcik7CisJCWlmIChtZW0pIHsKKwkJCW1lbXNldChtZW0sIDAsIG1lbV9sZW4pOworCQl9IGVsc2UgeworCQkJQkNNTE9HX0VSUigiSW5zdWZmaWNpZW50IE1lbW9yeSBGb3IgVFhcbiIpOworCQkJY3J5c3RhbGhkX2h3X2ZyZWVfZG1hX3JpbmdzKGh3KTsKKwkJCXJldHVybiBCQ19TVFNfSU5TVUZGX1JFUzsKKwkJfQorCQkvKiByeF9wa3RfcG9vbCAtLSBzdGF0aWMgbWVtb3J5IGFsbG9jYXRpb24gICovCisJCWh3LT50eF9wa3RfcG9vbFtpXS5kZXNjX21lbS5wZG1hX2Rlc2Nfc3RhcnQgPSBtZW07CisJCWh3LT50eF9wa3RfcG9vbFtpXS5kZXNjX21lbS5waHlfYWRkciA9IHBoeV9hZGRyOworCQlody0+dHhfcGt0X3Bvb2xbaV0uZGVzY19tZW0uc3ogPSBCQ19MSU5LX01BWF9TR0xTICoKKwkJCQkJCSBzaXplb2YoZG1hX2Rlc2NyaXB0b3IpOworCQlody0+dHhfcGt0X3Bvb2xbaV0ubGlzdF90YWcgPSAwOworCisJCS8qIEFkZCBUWCBkbWEgcmVxdWVzdHMgdG8gRnJlZSBRdWV1ZS4uKi8KKwkJc3RzID0gY3J5c3RhbGhkX2Rpb3FfYWRkKGh3LT50eF9mcmVlcSwKKwkJCQkgICAgICAgJmh3LT50eF9wa3RfcG9vbFtpXSwgZmFsc2UsIDApOworCQlpZiAoc3RzICE9IEJDX1NUU19TVUNDRVNTKSB7CisJCQljcnlzdGFsaGRfaHdfZnJlZV9kbWFfcmluZ3MoaHcpOworCQkJcmV0dXJuIHN0czsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBCQ19SWF9MSVNUX0NOVDsgaSsrKSB7CisJCXJwa3QgPSBremFsbG9jKHNpemVvZigqcnBrdCksIEdGUF9LRVJORUwpOworCQlpZiAoIXJwa3QpIHsKKwkJCUJDTUxPR19FUlIoIkluc3VmZmljaWVudCBNZW1vcnkgRm9yIFJYXG4iKTsKKwkJCWNyeXN0YWxoZF9od19mcmVlX2RtYV9yaW5ncyhodyk7CisJCQlyZXR1cm4gQkNfU1RTX0lOU1VGRl9SRVM7CisJCX0KKworCQltZW0gPSBiY19rZXJuX2RtYV9hbGxvYyhody0+YWRwLCBtZW1fbGVuLCAmcGh5X2FkZHIpOworCQlpZiAobWVtKSB7CisJCQltZW1zZXQobWVtLCAwLCBtZW1fbGVuKTsKKwkJfSBlbHNlIHsKKwkJCUJDTUxPR19FUlIoIkluc3VmZmljaWVudCBNZW1vcnkgRm9yIFJYXG4iKTsKKwkJCWNyeXN0YWxoZF9od19mcmVlX2RtYV9yaW5ncyhodyk7CisJCQlyZXR1cm4gQkNfU1RTX0lOU1VGRl9SRVM7CisJCX0KKwkJcnBrdC0+ZGVzY19tZW0ucGRtYV9kZXNjX3N0YXJ0ID0gbWVtOworCQlycGt0LT5kZXNjX21lbS5waHlfYWRkciA9IHBoeV9hZGRyOworCQlycGt0LT5kZXNjX21lbS5zeiAgPSBCQ19MSU5LX01BWF9TR0xTICogc2l6ZW9mKGRtYV9kZXNjcmlwdG9yKTsKKwkJcnBrdC0+cGt0X3RhZyA9IGh3LT5yeF9wa3RfdGFnX3NlZWQgKyBpOworCQljcnlzdGFsaGRfaHdfZnJlZV9yeF9wa3QoaHcsIHJwa3QpOworCX0KKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworQkNfU1RBVFVTIGNyeXN0YWxoZF9od19mcmVlX2RtYV9yaW5ncyhzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwljcnlzdGFsaGRfcnhfZG1hX3BrdCAqcnBrdCA9IE5VTEw7CisKKwlpZiAoIWh3IHx8ICFody0+YWRwKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJndW1lbnRzXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCS8qIERlbGV0ZSBhbGwgSU9Rcy4uICovCisJY3J5c3RhbGhkX2h3X2RlbGV0ZV9pb3FzKGh3KTsKKworCWZvciAoaSA9IDA7IGkgPCBCQ19UWF9MSVNUX0NOVDsgaSsrKSB7CisJCWlmIChody0+dHhfcGt0X3Bvb2xbaV0uZGVzY19tZW0ucGRtYV9kZXNjX3N0YXJ0KSB7CisJCQliY19rZXJuX2RtYV9mcmVlKGh3LT5hZHAsCisJCQkJaHctPnR4X3BrdF9wb29sW2ldLmRlc2NfbWVtLnN6LAorCQkJCWh3LT50eF9wa3RfcG9vbFtpXS5kZXNjX21lbS5wZG1hX2Rlc2Nfc3RhcnQsCisJCQkJaHctPnR4X3BrdF9wb29sW2ldLmRlc2NfbWVtLnBoeV9hZGRyKTsKKworCQkJaHctPnR4X3BrdF9wb29sW2ldLmRlc2NfbWVtLnBkbWFfZGVzY19zdGFydCA9IE5VTEw7CisJCX0KKwl9CisKKwlCQ01MT0coQkNNTE9HX0RCRywgIlJlbGVhc2luZyBSWCBQa3QgcG9vbFxuIik7CisJZG8geworCQlycGt0ID0gY3J5c3RhbGhkX2h3X2FsbG9jX3J4X3BrdChodyk7CisJCWlmICghcnBrdCkKKwkJCWJyZWFrOworCQliY19rZXJuX2RtYV9mcmVlKGh3LT5hZHAsIHJwa3QtPmRlc2NfbWVtLnN6LAorCQkJCSBycGt0LT5kZXNjX21lbS5wZG1hX2Rlc2Nfc3RhcnQsCisJCQkJIHJwa3QtPmRlc2NfbWVtLnBoeV9hZGRyKTsKKwkJa2ZyZWUocnBrdCk7CisJfSB3aGlsZSAocnBrdCk7CisKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7Cit9CisKK0JDX1NUQVRVUyBjcnlzdGFsaGRfaHdfcG9zdF90eChzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodywgY3J5c3RhbGhkX2Rpb19yZXEgKmlvcmVxLAorCQkJICAgICBod19jb21wX2NhbGxiYWNrIGNhbGxfYmFjaywKKwkJCSAgICAgd2FpdF9xdWV1ZV9oZWFkX3QgKmNiX2V2ZW50LCB1aW50MzJfdCAqbGlzdF9pZCwKKwkJCSAgICAgdWludDhfdCBkYXRhX2ZsYWdzKQoreworCXR4X2RtYV9wa3QgKnR4X2RtYV9wYWNrZXQgPSBOVUxMOworCXVpbnQzMl90IGZpcnN0X2Rlc2NfdV9hZGRyLCBmaXJzdF9kZXNjX2xfYWRkcjsKKwl1aW50MzJfdCBsb3dfYWRkciwgaGlnaF9hZGRyOworCWFkZHJfNjQgZGVzY19hZGRyOworCUJDX1NUQVRVUyBzdHMsIGFkZF9zdHM7CisJdWludDMyX3QgZHVtbXlfaW5kZXggPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJYm9vbCByYzsKKworCWlmICghaHcgfHwgIWlvcmVxIHx8ICFjYWxsX2JhY2sgfHwgIWNiX2V2ZW50IHx8ICFsaXN0X2lkKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJndW1lbnRzXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCS8qCisJICogU2luY2Ugd2UgaGl0IGNvZGUgaW4gYnVzeSBjb25kaXRpb24gdmVyeSBmcmVxdWVudGx5LAorCSAqIHdlIHdpbGwgY2hlY2sgdGhlIGNvZGUgaW4gc3RhdHVzIGZpcnN0IGJlZm9yZQorCSAqIGNoZWNraW5nIHRoZSBhdmFpbGFiaWxpdHkgb2YgZnJlZSBlbGVtLgorCSAqCisJICogVGhpcyB3aWxsIGF2b2lkIHRoZSBRIGZldGNoL2FkZCBpbiBub3JtYWwgY29uZGl0aW9uLgorCSAqLworCXJjID0gY3J5c3RhbGhkX2NvZGVfaW5fZnVsbChody0+YWRwLCBpb3JlcS0+dWluZm8ueGZyX2xlbiwKKwkJCQkgIGZhbHNlLCBkYXRhX2ZsYWdzKTsKKwlpZiAocmMpIHsKKwkJaHctPnN0YXRzLmNpbl9idXN5Kys7CisJCXJldHVybiBCQ19TVFNfQlVTWTsKKwl9CisKKwkvKiBHZXQgYSBsaXN0IGZyb20gVHhGcmVlUSAqLworCXR4X2RtYV9wYWNrZXQgPSAodHhfZG1hX3BrdCAqKWNyeXN0YWxoZF9kaW9xX2ZldGNoKGh3LT50eF9mcmVlcSk7CisJaWYgKCF0eF9kbWFfcGFja2V0KSB7CisJCUJDTUxPR19FUlIoIk5vIGVtcHR5IGVsZW1lbnRzLi5cbiIpOworCQlyZXR1cm4gQkNfU1RTX0VSUl9VU0FHRTsKKwl9CisKKwlzdHMgPSBjcnlzdGFsaGRfeGxhdF9zZ2xfdG9fZG1hX2Rlc2MoaW9yZXEsCisJCQkJCSAgICZ0eF9kbWFfcGFja2V0LT5kZXNjX21lbSwKKwkJCQkJICAgJmR1bW15X2luZGV4KTsKKwlpZiAoc3RzICE9IEJDX1NUU19TVUNDRVNTKSB7CisJCWFkZF9zdHMgPSBjcnlzdGFsaGRfZGlvcV9hZGQoaHctPnR4X2ZyZWVxLCB0eF9kbWFfcGFja2V0LAorCQkJCQkgICBmYWxzZSwgMCk7CisJCWlmIChhZGRfc3RzICE9IEJDX1NUU19TVUNDRVNTKQorCQkJQkNNTE9HX0VSUigiZG91YmxlIGZhdWx0Li5cbiIpOworCisJCXJldHVybiBzdHM7CisJfQorCisJaHctPnB3cl9sb2NrKys7CisKKwlkZXNjX2FkZHIuZnVsbF9hZGRyID0gdHhfZG1hX3BhY2tldC0+ZGVzY19tZW0ucGh5X2FkZHI7CisJbG93X2FkZHIgPSBkZXNjX2FkZHIubG93X3BhcnQ7CisJaGlnaF9hZGRyID0gZGVzY19hZGRyLmhpZ2hfcGFydDsKKworCXR4X2RtYV9wYWNrZXQtPmNhbGxfYmFjayA9IGNhbGxfYmFjazsKKwl0eF9kbWFfcGFja2V0LT5jYl9ldmVudCAgPSBjYl9ldmVudDsKKwl0eF9kbWFfcGFja2V0LT5kaW9fcmVxICAgPSBpb3JlcTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+bG9jaywgZmxhZ3MpOworCisJaWYgKGh3LT50eF9saXN0X3Bvc3RfaW5kZXggPT0gMCkgeworCQlmaXJzdF9kZXNjX3VfYWRkciA9IE1JU0MxX1RYX0ZJUlNUX0RFU0NfVV9BRERSX0xJU1QwOworCQlmaXJzdF9kZXNjX2xfYWRkciA9IE1JU0MxX1RYX0ZJUlNUX0RFU0NfTF9BRERSX0xJU1QwOworCX0gZWxzZSB7CisJCWZpcnN0X2Rlc2NfdV9hZGRyID0gTUlTQzFfVFhfRklSU1RfREVTQ19VX0FERFJfTElTVDE7CisJCWZpcnN0X2Rlc2NfbF9hZGRyID0gTUlTQzFfVFhfRklSU1RfREVTQ19MX0FERFJfTElTVDE7CisJfQorCisJKmxpc3RfaWQgPSB0eF9kbWFfcGFja2V0LT5saXN0X3RhZyA9IGh3LT50eF9pb3FfdGFnX3NlZWQgKworCQkJCQkgICAgIGh3LT50eF9saXN0X3Bvc3RfaW5kZXg7CisKKwlody0+dHhfbGlzdF9wb3N0X2luZGV4ID0gKGh3LT50eF9saXN0X3Bvc3RfaW5kZXggKyAxKSAlIERNQV9FTkdJTkVfQ05UOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmxvY2ssIGZsYWdzKTsKKworCisJLyogSW5zZXJ0IGluIEFjdGl2ZSBRLi4qLworCWNyeXN0YWxoZF9kaW9xX2FkZChody0+dHhfYWN0cSwgdHhfZG1hX3BhY2tldCwgZmFsc2UsCisJCQkgdHhfZG1hX3BhY2tldC0+bGlzdF90YWcpOworCisJLyoKKwkgKiBJbnRlcnJ1cHQgd2lsbCBjb21lIGFzIHNvb24gYXMgeW91IHdyaXRlCisJICogdGhlIHZhbGlkIGJpdC4gU28gYmUgcmVhZHkgZm9yIHRoYXQuIEFsbAorCSAqIHRoZSBpbml0aWFsaXphdGlvbiBzaG91bGQgaGFwcGVuIGJlZm9yZSB0aGF0LgorCSAqLworCWNyeXN0YWxoZF9zdGFydF90eF9kbWFfZW5naW5lKGh3KTsKKwljcnlzdGFsaGRfcmVnX3dyKGh3LT5hZHAsIGZpcnN0X2Rlc2NfdV9hZGRyLCBkZXNjX2FkZHIuaGlnaF9wYXJ0KTsKKworCWNyeXN0YWxoZF9yZWdfd3IoaHctPmFkcCwgZmlyc3RfZGVzY19sX2FkZHIsIGRlc2NfYWRkci5sb3dfcGFydCB8IDB4MDEpOworCQkJCQkvKiBCZSBzdXJlIHdlIHNldCB0aGUgdmFsaWQgYml0IF5eXl4gKi8KKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworLyoKKyAqIFRoaXMgaXMgYSBmb3JjZSBjYW5jZWwgYW5kIHdlIGFyZSByYWNpbmcgd2l0aCBJU1IuCisgKgorICogV2lsbCB0cnkgdG8gcmVtb3ZlIHRoZSByZXEgZnJvbSBBY3RRIGJlZm9yZSBJU1IgZ2V0cyBpdC4KKyAqIElmIElTUiBnZXRzIGl0IGZpcnN0IHRoZW4gdGhlIGNvbXBsZXRpb24gaGFwcGVucyBpbiB0aGUKKyAqIG5vcm1hbCBwYXRoIGFuZCB3ZSB3aWxsIHJldHVybiBfU1RTX05PX0RBVEEgZnJvbSBoZXJlLgorICoKKyAqIEZJWF9NRTogTm90IFRlc3RlZCB0aGUgYWN0dWFsIGNvbmRpdGlvbi4uCisgKi8KK0JDX1NUQVRVUyBjcnlzdGFsaGRfaHdfY2FuY2VsX3R4KHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3LCB1aW50MzJfdCBsaXN0X2lkKQoreworCWlmICghaHcgfHwgIWxpc3RfaWQpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmd1bWVudHNcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJY3J5c3RhbGhkX3N0b3BfdHhfZG1hX2VuZ2luZShodyk7CisJY3J5c3RhbGhkX2h3X3R4X3JlcV9jb21wbGV0ZShodywgbGlzdF9pZCwgQkNfU1RTX0lPX1VTRVJfQUJPUlQpOworCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCitCQ19TVEFUVVMgY3J5c3RhbGhkX2h3X2FkZF9jYXBfYnVmZmVyKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3LAorCQkJCSAgICBjcnlzdGFsaGRfZGlvX3JlcSAqaW9yZXEsIGJvb2wgZW5fcG9zdCkKK3sKKwljcnlzdGFsaGRfcnhfZG1hX3BrdCAqcnBrdDsKKwl1aW50MzJfdCB0YWcsIHV2X2Rlc2NfaXggPSAwOworCUJDX1NUQVRVUyBzdHM7CisKKwlpZiAoIWh3IHx8ICFpb3JlcSkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIEFyZ3VtZW50c1xuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwlycGt0ID0gY3J5c3RhbGhkX2h3X2FsbG9jX3J4X3BrdChodyk7CisJaWYgKCFycGt0KSB7CisJCUJDTUxPR19FUlIoIkluc3VmZmljaWVudCByZXNvdXJjZXNcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOU1VGRl9SRVM7CisJfQorCisJcnBrdC0+ZGlvX3JlcSA9IGlvcmVxOworCXRhZyA9IHJwa3QtPnBrdF90YWc7CisKKwlzdHMgPSBjcnlzdGFsaGRfeGxhdF9zZ2xfdG9fZG1hX2Rlc2MoaW9yZXEsICZycGt0LT5kZXNjX21lbSwgJnV2X2Rlc2NfaXgpOworCWlmIChzdHMgIT0gQkNfU1RTX1NVQ0NFU1MpCisJCXJldHVybiBzdHM7CisKKwlycGt0LT51dl9waHlfYWRkciA9IDA7CisKKwkvKiBTdG9yZSB0aGUgYWRkcmVzcyBvZiBVViBpbiB0aGUgcnggcGFja2V0IGZvciBwb3N0Ki8KKwlpZiAodXZfZGVzY19peCkKKwkJcnBrdC0+dXZfcGh5X2FkZHIgPSBycGt0LT5kZXNjX21lbS5waHlfYWRkciArCisJCQkJICAgIChzaXplb2YoZG1hX2Rlc2NyaXB0b3IpICogKHV2X2Rlc2NfaXggKyAxKSk7CisKKwlpZiAoZW5fcG9zdCkKKwkJc3RzID0gY3J5c3RhbGhkX2h3X3Bvc3RfY2FwX2J1ZmYoaHcsIHJwa3QpOworCWVsc2UKKwkJc3RzID0gY3J5c3RhbGhkX2Rpb3FfYWRkKGh3LT5yeF9mcmVlcSwgcnBrdCwgZmFsc2UsIHRhZyk7CisKKwlyZXR1cm4gc3RzOworfQorCitCQ19TVEFUVVMgY3J5c3RhbGhkX2h3X2dldF9jYXBfYnVmZmVyKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3LAorCQkJCSAgICBCQ19QSUNfSU5GT19CTE9DSyAqcGliLAorCQkJCSAgICBjcnlzdGFsaGRfZGlvX3JlcSAqKmlvcmVxKQoreworCWNyeXN0YWxoZF9yeF9kbWFfcGt0ICpycGt0OworCXVpbnQzMl90IHRpbWVvdXQgPSBCQ19QUk9DX09VVFBVVF9USU1FT1VUIC8gMTAwMDsKKwl1aW50MzJfdCBzaWdfcGVuZGluZyA9IDA7CisKKworCWlmICghaHcgfHwgIWlvcmVxIHx8ICFwaWIpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmd1bWVudHNcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJcnBrdCA9IGNyeXN0YWxoZF9kaW9xX2ZldGNoX3dhaXQoaHctPnJ4X3JkeXEsIHRpbWVvdXQsICZzaWdfcGVuZGluZyk7CisJaWYgKCFycGt0KSB7CisJCWlmIChzaWdfcGVuZGluZykgeworCQkJQkNNTE9HKEJDTUxPR19JTkZPLCAid2FpdCBvbiBmcmFtZSB0aW1lIG91dCAlZFxuIiwgc2lnX3BlbmRpbmcpOworCQkJcmV0dXJuIEJDX1NUU19JT19VU0VSX0FCT1JUOworCQl9IGVsc2UgeworCQkJcmV0dXJuIEJDX1NUU19USU1FT1VUOworCQl9CisJfQorCisJcnBrdC0+ZGlvX3JlcS0+dWluZm8uY29tcF9mbGFncyA9IHJwa3QtPmZsYWdzOworCisJaWYgKHJwa3QtPmZsYWdzICYgQ09NUF9GTEFHX1BJQl9WQUxJRCkKKwkJbWVtY3B5KHBpYiwgJnJwa3QtPnBpYiwgc2l6ZW9mKCpwaWIpKTsKKworCSppb3JlcSA9IHJwa3QtPmRpb19yZXE7CisKKwljcnlzdGFsaGRfaHdfZnJlZV9yeF9wa3QoaHcsIHJwa3QpOworCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCitCQ19TVEFUVVMgY3J5c3RhbGhkX2h3X3N0YXJ0X2NhcHR1cmUoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcpCit7CisJY3J5c3RhbGhkX3J4X2RtYV9wa3QgKnJ4X3BrdDsKKwlCQ19TVEFUVVMgc3RzOworCXVpbnQzMl90IGk7CisKKwlpZiAoIWh3KSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJndW1lbnRzXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCS8qIFRoaXMgaXMgc3RhcnQgb2YgY2FwdHVyZS4uIFBvc3QgdG8gYm90aCB0aGUgbGlzdHMuLiAqLworCWZvciAoaSA9IDA7IGkgPCBETUFfRU5HSU5FX0NOVDsgaSsrKSB7CisJCXJ4X3BrdCA9IGNyeXN0YWxoZF9kaW9xX2ZldGNoKGh3LT5yeF9mcmVlcSk7CisJCWlmICghcnhfcGt0KQorCQkJcmV0dXJuIEJDX1NUU19OT19EQVRBOworCQlzdHMgPSBjcnlzdGFsaGRfaHdfcG9zdF9jYXBfYnVmZihodywgcnhfcGt0KTsKKwkJaWYgKEJDX1NUU19TVUNDRVNTICE9IHN0cykKKwkJCWJyZWFrOworCisJfQorCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCitCQ19TVEFUVVMgY3J5c3RhbGhkX2h3X3N0b3BfY2FwdHVyZShzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodykKK3sKKwl2b2lkICp0ZW1wID0gTlVMTDsKKworCWlmICghaHcpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmd1bWVudHNcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJY3J5c3RhbGhkX3N0b3BfcnhfZG1hX2VuZ2luZShodyk7CisKKwlkbyB7CisJCXRlbXAgPSBjcnlzdGFsaGRfZGlvcV9mZXRjaChody0+cnhfZnJlZXEpOworCQlpZiAodGVtcCkKKwkJCWNyeXN0YWxoZF9yeF9wa3RfcmVsX2NhbGxfYmFjayhodywgdGVtcCk7CisJfSB3aGlsZSAodGVtcCk7CisKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7Cit9CisKK0JDX1NUQVRVUyBjcnlzdGFsaGRfaHdfcGF1c2Uoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcpCit7CisJaHctPnN0YXRzLnBhdXNlX2NudCsrOworCWh3LT5zdG9wX3BlbmRpbmcgPSAxOworCisJaWYgKChody0+cnhfbGlzdF9zdHNbMF0gPT0gc3RzX2ZyZWUpICYmCisJICAgIChody0+cnhfbGlzdF9zdHNbMV0gPT0gc3RzX2ZyZWUpKQorCQljcnlzdGFsaGRfaHdfZmluYWxpemVfcGF1c2UoaHcpOworCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCitCQ19TVEFUVVMgY3J5c3RhbGhkX2h3X3VucGF1c2Uoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcpCit7CisJQkNfU1RBVFVTIHN0czsKKwl1aW50MzJfdCBhc3BtOworCisJaHctPnN0b3BfcGVuZGluZyA9IDA7CisKKwlhc3BtID0gY3J5c3RhbGhkX3JlZ19yZChody0+YWRwLCBQQ0lFX0RMTF9EQVRBX0xJTktfQ09OVFJPTCk7CisJYXNwbSAmPSB+QVNQTV9MMV9FTkFCTEU7CisvKiBOQVJFTiBCQ01MT0coQkNNTE9HX0lORk8sICJhc3BtIG9mZlxuIik7ICovCisJY3J5c3RhbGhkX3JlZ193cihody0+YWRwLCBQQ0lFX0RMTF9EQVRBX0xJTktfQ09OVFJPTCwgYXNwbSk7CisKKwlzdHMgPSBjcnlzdGFsaGRfaHdfc3RhcnRfY2FwdHVyZShodyk7CisJcmV0dXJuIHN0czsKK30KKworQkNfU1RBVFVTIGNyeXN0YWxoZF9od19zdXNwZW5kKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3KQoreworCUJDX1NUQVRVUyBzdHM7CisKKwlpZiAoIWh3KSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJndW1lbnRzXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCXN0cyA9IGNyeXN0YWxoZF9wdXRfZGRyMnNsZWVwKGh3KTsKKwlpZiAoc3RzICE9IEJDX1NUU19TVUNDRVNTKSB7CisJCUJDTUxPR19FUlIoIkZhaWxlZCB0byBQdXQgRERSIFRvIFNsZWVwISFcbiIpOworCQlyZXR1cm4gQkNfU1RTX0VSUk9SOworCX0KKworCWlmICghY3J5c3RhbGhkX3N0b3BfZGV2aWNlKGh3LT5hZHApKSB7CisJCUJDTUxPR19FUlIoIkZhaWxlZCB0byBTdG9wIERldmljZSEhXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19FUlJPUjsKKwl9CisKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7Cit9CisKK3ZvaWQgY3J5c3RhbGhkX2h3X3N0YXRzKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3LCBzdHJ1Y3QgY3J5c3RhbGhkX2h3X3N0YXRzICpzdGF0cykKK3sKKwlpZiAoIWh3KSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJndW1lbnRzXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGlmIGNhbGxlZCB3L05VTEwgc3RhdHMsIGl0cyBhIHJlcSB0byB6ZXJvIG91dCB0aGUgc3RhdHMgKi8KKwlpZiAoIXN0YXRzKSB7CisJCW1lbXNldCgmaHctPnN0YXRzLCAwLCBzaXplb2YoaHctPnN0YXRzKSk7CisJCXJldHVybjsKKwl9CisKKwlody0+c3RhdHMuZnJlZXFfY291bnQgPSBjcnlzdGFsaGRfZGlvcV9jb3VudChody0+cnhfZnJlZXEpOworCWh3LT5zdGF0cy5yZHlxX2NvdW50ICA9IGNyeXN0YWxoZF9kaW9xX2NvdW50KGh3LT5yeF9yZHlxKTsKKwltZW1jcHkoc3RhdHMsICZody0+c3RhdHMsIHNpemVvZigqc3RhdHMpKTsKK30KKworQkNfU1RBVFVTIGNyeXN0YWxoZF9od19zZXRfY29yZV9jbG9jayhzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodykKK3sKKwl1aW50MzJfdCByZWcsIG4sIGk7CisJdWludDMyX3QgdmNvX21nLCByZWZyZXNoX3JlZzsKKworCWlmICghaHcpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmd1bWVudHNcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJLyogRklYTUU6IGphcm9kOiB3aGE/ICovCisJLypuID0gKGh3LT5jb3JlX2Nsb2NrX21oeiAqIDMpIC8gMjAgKyAxOyAqLworCW4gPSBody0+Y29yZV9jbG9ja19taHovNTsKKworCWlmIChuID09IGh3LT5wcmV2X24pCisJCXJldHVybiBCQ19TVFNfQ0xLX05PQ0hHOworCisJaWYgKGh3LT5wd3JfbG9jayA+IDApIHsKKwkJLyogQkNNTE9HKEJDTUxPR19JTkZPLCJwd3JfbG9jayBpcyAldVxuIiwgaHctPnB3cl9sb2NrKSAqLworCQlyZXR1cm4gQkNfU1RTX0NMS19OT0NIRzsKKwl9CisKKwlpID0gbiAqIDI3OworCWlmIChpIDwgNTYwKQorCQl2Y29fbWcgPSAwOworCWVsc2UgaWYgKGkgPCA5MDApCisJCXZjb19tZyA9IDE7CisJZWxzZSBpZiAoaSA8IDEwMzApCisJCXZjb19tZyA9IDI7CisJZWxzZQorCQl2Y29fbWcgPSAzOworCisJcmVnID0gYmNfZGVjX3JlZ19yZChody0+YWRwLCBEZWNIdF9QbGxBQ3RsKTsKKworCXJlZyAmPSAweEZGRkZDRkMwOworCXJlZyB8PSBuOworCXJlZyB8PSB2Y29fbWcgPDwgMTI7CisKKwlCQ01MT0coQkNNTE9HX0lORk8sICJjbG9jayBpcyBtb3ZpbmcgdG8gJWQgd2l0aCBuICVkIHdpdGggdmNvX21nICVkXG4iLAorCSAgICAgICBody0+Y29yZV9jbG9ja19taHosIG4sIHZjb19tZyk7CisKKwkvKiBDaGFuZ2UgdGhlIERSQU0gcmVmcmVzaCByYXRlIHRvIGFjY29tb2RhdGUgdGhlIG5ldyBmcmVxdWVuY3kgKi8KKwkvKiByZWZyZXNoIHJlZyA9ICgocmVmcmVzaF9yYXRlICogY2xvY2tfcmF0ZSkvMTYpIC0gMTsgcm91bmRpbmcgdXAqLworCXJlZnJlc2hfcmVnID0gKDcgKiBody0+Y29yZV9jbG9ja19taHogLyAxNik7CisJYmNfZGVjX3JlZ193cihody0+YWRwLCBTRFJBTV9SRUZfUEFSQU0sICgoMSA8PCAxMikgfCByZWZyZXNoX3JlZykpOworCisJYmNfZGVjX3JlZ193cihody0+YWRwLCBEZWNIdF9QbGxBQ3RsLCByZWcpOworCisJaSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlyZWcgPSBiY19kZWNfcmVnX3JkKGh3LT5hZHAsIERlY0h0X1BsbEFDdGwpOworCisJCWlmIChyZWcgJiAweDAwMDIwMDAwKSB7CisJCQlody0+cHJldl9uID0gbjsKKwkJCS8qIEZJWE1FOiBqYXJvZDogb3V0cHV0dGluZyBhIHJhbmRvbSAiQyIgaXMuLi4gY29uZnVzaW5nLi4uICovCisJCQlCQ01MT0coQkNNTE9HX0lORk8sICJDIik7CisJCQlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7CisJCX0gZWxzZSB7CisJCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMCk7CisJCX0KKwl9CisJQkNNTE9HKEJDTUxPR19JTkZPLCAiY2xrIGNoYW5nZSBmYWlsZWRcbiIpOworCXJldHVybiBCQ19TVFNfQ0xLX05PQ0hHOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfaHcuaCBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2h3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM2MzE4ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2h3LmgKQEAgLTAsMCArMSwzOTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5LCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KKyAqCisgKiAgTmFtZTogY3J5c3RhbGhkX2h3IC4gaAorICoKKyAqICBEZXNjcmlwdGlvbjoKKyAqCQlCQ003MDAxMiBMaW51eCBkcml2ZXIgaGFyZHdhcmUgbGF5ZXIuCisgKgorICogIEhJU1RPUlk6CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBjcnlzdGFsaGQgZGV2aWNlIGRyaXZlci4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGRyaXZlci4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9DUllTVEFMSERfSFdfSF8KKyNkZWZpbmUgX0NSWVNUQUxIRF9IV19IXworCisjaW5jbHVkZSAiY3J5c3RhbGhkX21pc2MuaCIKKyNpbmNsdWRlICJjcnlzdGFsaGRfZndfaWYuaCIKKworLyogSFcgY29uc3RhbnRzLi4qLworI2RlZmluZSBETUFfRU5HSU5FX0NOVAkJMgorI2RlZmluZSBNQVhfUElCX1FfREVQVEgJCTY0CisjZGVmaW5lIE1JTl9QSUJfUV9ERVBUSAkJMgorI2RlZmluZSBXUl9QT0lOVEVSX09GRgkJNAorCisjZGVmaW5lIEFTUE1fTDFfRU5BQkxFCQkoQkNfQklUKDI3KSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgNzQxMiBEZWNvZGVyICBSZWdpc3RlcnMuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgRldfQ01EX0JVRkZfU1oJCTY0CisjZGVmaW5lIFRTX0hvc3QyQ3B1U25kCQkweDAwMDAwMTAwCisjZGVmaW5lIEhzdDJDcHVNYngxCQkweDAwMTAwRjAwCisjZGVmaW5lIENwdTJIc3RNYngxCQkweDAwMTAwRjA0CisjZGVmaW5lIE1ieFN0YXQxCQkweDAwMTAwRjA4CisjZGVmaW5lIFN0cmVhbTJIb3N0X0ludHJfU3RzCTB4MDAxMDBGMjQKKyNkZWZpbmUgQzAxMV9SRVRfU1VDQ0VTUwkweDAJLyogUmV1dHJuIHN0YXR1cyBvZiBmaXJtd2FyZSBjb21tYW5kLiAqLworCisvKiBUUyBpbnB1dCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFNfU3RyZWFtQUZJRk9TdGF0dXMJMHgwMDEwMDQ0QworI2RlZmluZSBUU19TdHJlYW1CRklGT1N0YXR1cwkweDAwMTAwODRDCisKKy8qVUFSVCBTZWxlY3Rpb24gZGVmaW5pdGlvbnMqLworI2RlZmluZSBVYXJ0U2VsZWN0QQkJMHgwMDEwMDMwMAorI2RlZmluZSBVYXJ0U2VsZWN0QgkJMHgwMDEwMDMwNAorCisjZGVmaW5lIEJTVlNfVUFSVF9ERUNfTk9ORQkweDAwCisjZGVmaW5lIEJTVlNfVUFSVF9ERUNfT1VURVIJMHgwMQorI2RlZmluZSBCU1ZTX1VBUlRfREVDX0lOTkVSCTB4MDIKKyNkZWZpbmUgQlNWU19VQVJUX1NUUkVBTQkweDAzCisKKy8qIENvZGUtSW4gZmlmbyAqLworI2RlZmluZSBSRUdfRGVjQ0FfUmVnQ2luQ1RMCTB4YTAwCisjZGVmaW5lIFJFR19EZWNDQV9SZWdDaW5CYXNlCTB4YTBjCisjZGVmaW5lIFJFR19EZWNDQV9SZWdDaW5FbmQJMHhhMTAKKyNkZWZpbmUgUkVHX0RlY0NBX1JlZ0NpbldyUHRyCTB4YTA0CisjZGVmaW5lIFJFR19EZWNDQV9SZWdDaW5SZFB0cgkweGEwOAorCisjZGVmaW5lIFJFR19EZWNfVHNVc2VyMEJhc2UJMHgxMDA4NjQKKyNkZWZpbmUgUkVHX0RlY19Uc1VzZXIwUmRwdHIJMHgxMDA4NjgKKyNkZWZpbmUgUkVHX0RlY19Uc1VzZXIwV3JwdHIJMHgxMDA4NkMKKyNkZWZpbmUgUkVHX0RlY19Uc1VzZXIwRW5kCTB4MTAwODc0CisKKy8qIEFTRiBDYXNlIC4uLiovCisjZGVmaW5lIFJFR19EZWNfVHNBdWRDREIyQmFzZQkweDEwMDM2YworI2RlZmluZSBSRUdfRGVjX1RzQXVkQ0RCMlJkcHRyICAweDEwMDM3OAorI2RlZmluZSBSRUdfRGVjX1RzQXVkQ0RCMldycHRyICAweDEwMDM3NAorI2RlZmluZSBSRUdfRGVjX1RzQXVkQ0RCMkVuZAkweDEwMDM3MAorCisvKiBEUkFNIGJyaW5ndXAgUmVnaXN0ZXJzICovCisjZGVmaW5lIFNEUkFNX1BBUkFNCQkweDAwMDQwODA0CisjZGVmaW5lIFNEUkFNX1BSRUNIQVJHRQkJMHgwMDA0MDhCMAorI2RlZmluZSBTRFJBTV9FWFRfTU9ERQkJMHgwMDA0MDhBNAorI2RlZmluZSBTRFJBTV9NT0RFCQkweDAwMDQwOEEwCisjZGVmaW5lIFNEUkFNX1JFRlJFU0gJCTB4MDAwNDA4OTAKKyNkZWZpbmUgU0RSQU1fUkVGX1BBUkFNCQkweDAwMDQwODA4CisKKyNkZWZpbmUgRGVjSHRfUGxsQUN0bAkJMHgzNDAwMEMKKyNkZWZpbmUgRGVjSHRfUGxsQkN0bAkJMHgzNDAwMTAKKyNkZWZpbmUgRGVjSHRfUGxsQ0N0bAkJMHgzNDAwMTQKKyNkZWZpbmUgRGVjSHRfUGxsREN0bAkJMHgzNDAwMzQKKyNkZWZpbmUgRGVjSHRfUGxsRUN0bAkJMHgzNDAwMzgKKyNkZWZpbmUgQVVEX0RTUF9NSVNDX1NPRlRfUkVTRVQJMHgwMDI0MDEwNAorI2RlZmluZSBBSU9fTUlTQ19QTExfUkVTRVQJMHgwMDI2MDAwQworI2RlZmluZSBQQ0lFX0NMS19SRVFfUkVHCTB4REMKKyNkZWZpbmUJUENJX0NMS19SRVFfRU5BQkxFCShCQ19CSVQoOCkpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIEYvVyBDb3B5IGVuZ2luZSBkZWZpbml0aW9ucy4uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQkNfRldJTUdfU1RfQUREUgkweDAwMDAwMDAwCisvKiBGSVhNRTogamFyb2Q6IHRoZXJlJ3MgYSBrZXJuZWwgZnVuY3Rpb24gdGhhdCdsbCBkbyB0aGlzIGZvciB1cy4uLiAqLworI2RlZmluZSByb3RyMzJfMSh4LCBuKQkJKCgoeCkgPj4gbikgfCAoKHgpIDw8ICgzMiAtIG4pKSkKKyNkZWZpbmUgYnN3YXBfMzJfMSh4KQkJKChyb3RyMzJfMSgoeCksIDI0KSAmIDB4MDBmZjAwZmYpIHwgKHJvdHIzMl8xKCh4KSwgOCkgJiAweGZmMDBmZjAwKSkKKworI2RlZmluZSBEZWNIdF9Ib3N0U3dSZXNldAkweDM0MDAwMAorI2RlZmluZSBCQ19EUkFNX0ZXX0NGR19BRERSCTB4MDAxYzIwMDAKKwordHlwZWRlZiB1bmlvbiBfYWRkcl82NF8geworCXN0cnVjdCB7CisJCXVpbnQzMl90CWxvd19wYXJ0OworCQl1aW50MzJfdAloaWdoX3BhcnQ7CisJfTsKKworCXVpbnQ2NF90CWZ1bGxfYWRkcjsKKworfSBhZGRyXzY0OworCit0eXBlZGVmIHVuaW9uIF9pbnRyX21hc2tfcmVnXyB7CisJc3RydWN0IHsKKwkJdWludDMyX3QJbWFza190eF9kb25lOjE7CisJCXVpbnQzMl90CW1hc2tfdHhfZXJyOjE7CisJCXVpbnQzMl90CW1hc2tfcnhfZG9uZToxOworCQl1aW50MzJfdAltYXNrX3J4X2VycjoxOworCQl1aW50MzJfdAltYXNrX3BjaWVfZXJyOjE7CisJCXVpbnQzMl90CW1hc2tfcGNpZV9yYnVzbWFzdF9lcnI6MTsKKwkJdWludDMyX3QJbWFza19wY2llX3Jncl9icmlkZ2U6MTsKKwkJdWludDMyX3QJcmVzZXJ2ZWQ6MjU7CisJfTsKKworCXVpbnQzMl90CXdob2xlX3JlZzsKKworfSBpbnRyX21hc2tfcmVnOworCit0eXBlZGVmIHVuaW9uIF9saW5rX21pc2NfcGVyc3RfZGVjb19jdHJsXyB7CisJc3RydWN0IHsKKwkJdWludDMyX3QJYmNtNzQxMl9yc3Q6MTsJCS8qIDEgLT4gQkNNNzQxMiBpcyBoZWxkIGluIHJlc2V0LiBSZXNldCB2YWx1ZSAxLiovCisJCXVpbnQzMl90CXJlc2VydmVkMDozOwkJLyogUmVzZXJ2ZWQuTm8gRWZmZWN0Ki8KKwkJdWludDMyX3QJc3RvcF9iY21fNzQxMl9jbGs6MTsJLyogMSAtPlN0b3BzIGJyYW5jaCBvZiAyN01IeiBjbGsgdXNlZCB0byBjbGsgQkNNNzQxMiovCisJCXVpbnQzMl90CXJlc2VydmVkMToyNzsJCS8qIFJlc2V2ZWQuIE5vIEVmZmVjdCovCisJfTsKKworCXVpbnQzMl90CXdob2xlX3JlZzsKKworfSBsaW5rX21pc2NfcGVyc3RfZGVjb19jdHJsOworCit0eXBlZGVmIHVuaW9uIF9saW5rX21pc2NfcGVyc3RfY2xrX2N0cmxfIHsKKwlzdHJ1Y3QgeworCQl1aW50MzJfdAlzZWxfYWx0X2NsazoxOwkgIC8qIFdoZW4gc2V0LCBzZWxlY3RzIGEgNi43NU1IeiBjbG9jayBhcyB0aGUgc291cmNlIG9mIGNvcmVfY2xrICovCisJCXVpbnQzMl90CXN0b3BfY29yZV9jbGs6MTsgIC8qIFdoZW4gc2V0LCBzdG9wcyB0aGUgYnJhbmNoIG9mIGNvcmVfY2xrIHRoYXQgaXMgbm90IG5lZWRlZCBmb3IgbG93IHBvd2VyIG9wZXJhdGlvbiAqLworCQl1aW50MzJfdAlwbGxfcHdyX2RuOjE7CSAgLyogV2hlbiBzZXQsIHBvd2VycyBkb3duIHRoZSBtYWluIFBMTC4gVGhlIGFsdGVybmF0ZSBjbG9jayBiaXQgc2hvdWxkIGJlIHNldAorCQkJCQkJICAgICB0byBzZWxlY3QgYW4gYWx0ZXJuYXRlIGNsb2NrIGJlZm9yZSBzZXR0aW5nIHRoaXMgYml0LiovCisJCXVpbnQzMl90CXJlc2VydmVkMDo1OwkgIC8qIFJlc2VydmVkICovCisJCXVpbnQzMl90CXBsbF9tdWx0Ojg7CSAgLyogVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBtdWx0aXBsaWVyIGZvciB0aGUgUExMLiAqLworCQl1aW50MzJfdAlwbGxfZGl2OjQ7CSAgLyogVGhpcyBzZXR0aW5nIGNvbnRyb2xzIHRoZSBkaXZpZGVyIGZvciB0aGUgUExMLiAqLworCQl1aW50MzJfdAlyZXNlcnZlZDE6MTI7CSAgLyogUmVzZXJ2ZWQgKi8KKwl9OworCisJdWludDMyX3QJd2hvbGVfcmVnOworCit9IGxpbmtfbWlzY19wZXJzdF9jbGtfY3RybDsKKworCit0eXBlZGVmIHVuaW9uIF9saW5rX21pc2NfcGVyc3RfZGVjb2Rlcl9jdHJsXyB7CisJc3RydWN0IHsKKwkJdWludDMyX3QJYmNtXzc0MTJfcnN0OjE7IC8qIDEgLT4gQkNNNzQxMiBpcyBoZWxkIGluIHJlc2V0LiBSZXNldCB2YWx1ZSAxLiovCisJCXVpbnQzMl90CXJlczA6MzsgLyogUmVzZXJ2ZWQuTm8gRWZmZWN0Ki8KKwkJdWludDMyX3QJc3RvcF83NDEyX2NsazoxOyAvKiAxIC0+U3RvcHMgYnJhbmNoIG9mIDI3TUh6IGNsayB1c2VkIHRvIGNsayBCQ003NDEyKi8KKwkJdWludDMyX3QJcmVzMToyNzsgLyogUmVzZXZlZC4gTm8gRWZmZWN0ICovCisJfTsKKworCXVpbnQzMl90CXdob2xlX3JlZzsKKworfSBsaW5rX21pc2NfcGVyc3RfZGVjb2Rlcl9jdHJsOworCisKK3R5cGVkZWYgdW5pb24gX2Rlc2NfbG93X2FkZHJfcmVnXyB7CisJc3RydWN0IHsKKwkJdWludDMyX3QJbGlzdF92YWxpZDoxOworCQl1aW50MzJfdAlyZXNlcnZlZDo0OworCQl1aW50MzJfdAlsb3dfYWRkcjoyNzsKKwl9OworCisJdWludDMyX3QJd2hvbGVfcmVnOworCit9IGRlc2NfbG93X2FkZHJfcmVnOworCit0eXBlZGVmIHN0cnVjdCBfZG1hX2Rlc2NyaXB0b3JfIHsJLyogOCAzMi1iaXQgdmFsdWVzICovCisJLyogMHRoIHUzMiAqLworCXVpbnQzMl90IHNkcmFtX2J1ZmZfYWRkcjoyODsJLyogYml0cyAwLTI3OiAgU0RSQU0gQWRkcmVzcyAqLworCXVpbnQzMl90IHJlczA6NDsJCS8qIGJpdHMgMjgtMzE6IFJlc2VydmVkICovCisKKwkvKiAxc3QgdTMyICovCisJdWludDMyX3QgYnVmZl9hZGRyX2xvdzsJCS8qIDEgYnVmZmVyIGFkZHJlc3MgbG93ICovCisJdWludDMyX3QgYnVmZl9hZGRyX2hpZ2g7CS8qIDIgYnVmZmVyIGFkZHJlc3MgaGlnaCAqLworCisJLyogM3JkIHUzMiAqLworCXVpbnQzMl90IHJlczI6MjsJCS8qIDAtMSAtIFJlc2VydmVkICovCisJdWludDMyX3QgeGZlcl9zaXplOjIzOwkJLyogMi0yNCA9IFhmZXIgc2l6ZSBpbiB3b3JkcyAqLworCXVpbnQzMl90IHJlczM6NjsJCS8qIDI1LTMwIHJlc2VydmVkICovCisJdWludDMyX3QgaW50cl9lbmFibGU6MTsJCS8qIDMxIC0gSW50ZXJydXB0IEFmdGVyIHRoaXMgZGVzYyAqLworCisJLyogNHRoIHUzMiAqLworCXVpbnQzMl90IGVuZGlhbl94bGF0X2FsaWduOjI7CS8qIDAtMSBFbmRpYW4gVHJhbnNsYXRpb24gKi8KKwl1aW50MzJfdCBuZXh0X2Rlc2NfY29udDoxOwkvKiAyIC0gTmV4dCBkZXNjIGlzIGluIGNvbnRpZyBtZW1vcnkgKi8KKwl1aW50MzJfdCByZXM0OjI1OwkJLyogMyAtIDI3IFJlc2VydmVkIGJpdHMgKi8KKwl1aW50MzJfdCBmaWxsX2J5dGVzOjI7CQkvKiAyOC0yOSBCaXRzIEZpbGwgQnl0ZXMgKi8KKwl1aW50MzJfdCBkbWFfZGlyOjE7CQkvKiAzMCBiaXQgRE1BIERpcmVjdGlvbiAqLworCXVpbnQzMl90IGxhc3RfcmVjX2luZGljYXRvcjoxOwkvKiAzMSBiaXQgTGFzdCBSZWNvcmQgSW5kaWNhdG9yICovCisKKwkvKiA1dGggdTMyICovCisJdWludDMyX3QgbmV4dF9kZXNjX2FkZHJfbG93OwkvKiAzMi1iaXRzIE5leHQgRGVzYyBBZGRyIGxvd2VyICovCisKKwkvKiA2dGggdTMyICovCisJdWludDMyX3QgbmV4dF9kZXNjX2FkZHJfaGlnaDsJLyogMzItYml0cyBOZXh0IERlc2MgQWRkciBIaWdoZXIgKi8KKworCS8qIDd0aCB1MzIgKi8KKwl1aW50MzJfdCByZXM4OwkJCS8qIExhc3QgMzJiaXRzIHJlc2VydmVkICovCisKK30gZG1hX2Rlc2NyaXB0b3IsICpwZG1hX2Rlc2NyaXB0b3I7CisKKy8qCisgKiBXZSB3aWxsIGFsbG9jYXRlIHRoZSBtZW1vcnkgaW4gNEsgcGFnZXMKKyAqIHRoZSBsaW5rZWQgbGlzdCB3aWxsIGJlIGEgbGlzdCBvZiAzMiBieXRlIGRlc2NyaXB0b3JzLgorICogVGhlICB2aXJ0dWFsIGFkZHJlc3Mgd2lsbCBkZXRlcm1pbmUgd2hhdCBzaG91bGQgYmUgZnJlZWQuCisgKi8KK3R5cGVkZWYgc3RydWN0IF9kbWFfZGVzY19tZW1fIHsKKwlwZG1hX2Rlc2NyaXB0b3IJCXBkbWFfZGVzY19zdGFydDsgLyogMzItYnl0ZXMgZm9yIGRtYSBkZXNjcmlwdG9yLiBzaG91bGQgYmUgZmlyc3QgZWxlbWVudCAqLworCWRtYV9hZGRyX3QJCXBoeV9hZGRyOwkvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIGVhY2ggRE1BIGRlc2MgKi8KKwl1aW50MzJfdAkJc3o7CisJc3RydWN0IF9kbWFfZGVzY19tZW1fCSpOZXh0OwkJLyogcG9pbnRzIHRvIE5leHQgRGVzY3JpcHRvciBpbiBjaGFpbiAqLworCit9IGRtYV9kZXNjX21lbSwgKnBkbWFfZGVzY19tZW07CisKKworCit0eXBlZGVmIGVudW0gX2xpc3Rfc3RzXyB7CisJc3RzX2ZyZWUgPSAwLAorCisJLyogUlgtWSBCaXRzIDA6NyAqLworCXJ4X3dhaXRpbmdfeV9pbnRyCT0gMHgwMDAwMDAwMSwKKwlyeF95X2Vycm9yCQk9IDB4MDAwMDAwMDQsCisKKwkvKiBSWC1VViBCaXRzIDg6MTYgKi8KKwlyeF93YWl0aW5nX3V2X2ludHIJPSAweDAwMDAxMDAsCisJcnhfdXZfZXJyb3IJCT0gMHgwMDAwNDAwLAorCisJcnhfc3RzX3dhaXRpbmcJCT0gKHJ4X3dhaXRpbmdfeV9pbnRyfHJ4X3dhaXRpbmdfdXZfaW50ciksCisJcnhfc3RzX2Vycm9yCQk9IChyeF95X2Vycm9yfHJ4X3V2X2Vycm9yKSwKKworCXJ4X3lfbWFzawkJPSAweDAwMDAwMEZGLAorCXJ4X3V2X21hc2sJCT0gMHgwMDAwRkYwMCwKKworfSBsaXN0X3N0czsKKwordHlwZWRlZiBzdHJ1Y3QgX3R4X2RtYV9wa3RfIHsKKwlkbWFfZGVzY19tZW0JCWRlc2NfbWVtOworCWh3X2NvbXBfY2FsbGJhY2sJY2FsbF9iYWNrOworCWNyeXN0YWxoZF9kaW9fcmVxCQkqZGlvX3JlcTsKKwl3YWl0X3F1ZXVlX2hlYWRfdAkqY2JfZXZlbnQ7CisJdWludDMyX3QJCWxpc3RfdGFnOworCit9IHR4X2RtYV9wa3Q7CisKK3R5cGVkZWYgc3RydWN0IF9jcnlzdGFsaGRfcnhfZG1hX3BrdCB7CisJZG1hX2Rlc2NfbWVtCQkJZGVzY19tZW07CisJY3J5c3RhbGhkX2Rpb19yZXEJCQkqZGlvX3JlcTsKKwl1aW50MzJfdAkJCXBrdF90YWc7CisJdWludDMyX3QJCQlmbGFnczsKKwlCQ19QSUNfSU5GT19CTE9DSwkJcGliOworCWRtYV9hZGRyX3QJCQl1dl9waHlfYWRkcjsKKwlzdHJ1Y3QgIF9jcnlzdGFsaGRfcnhfZG1hX3BrdAkqbmV4dDsKKworfSBjcnlzdGFsaGRfcnhfZG1hX3BrdDsKKworc3RydWN0IGNyeXN0YWxoZF9od19zdGF0c3sKKwl1aW50MzJfdAlyeF9lcnJvcnM7CisJdWludDMyX3QJdHhfZXJyb3JzOworCXVpbnQzMl90CWZyZWVxX2NvdW50OworCXVpbnQzMl90CXJkeXFfY291bnQ7CisJdWludDMyX3QJbnVtX2ludGVycnVwdHM7CisJdWludDMyX3QJZGV2X2ludGVycnVwdHM7CisJdWludDMyX3QJY2luX2J1c3k7CisJdWludDMyX3QJcGF1c2VfY250OworfTsKKworc3RydWN0IGNyeXN0YWxoZF9odyB7CisJdHhfZG1hX3BrdAkJdHhfcGt0X3Bvb2xbRE1BX0VOR0lORV9DTlRdOworCXNwaW5sb2NrX3QJCWxvY2s7CisKKwl1aW50MzJfdAkJdHhfaW9xX3RhZ19zZWVkOworCXVpbnQzMl90CQl0eF9saXN0X3Bvc3RfaW5kZXg7CisKKwljcnlzdGFsaGRfcnhfZG1hX3BrdAkqcnhfcGt0X3Bvb2xfaGVhZDsKKwl1aW50MzJfdAkJcnhfcGt0X3RhZ19zZWVkOworCisJYm9vbAkJCWRldl9zdGFydGVkOworCXZvaWQJCQkqYWRwOworCisJd2FpdF9xdWV1ZV9oZWFkX3QJKnBmd19jbWRfZXZlbnQ7CisJaW50CQkJZndjbWRfZXZ0X3N0czsKKworCXVpbnQzMl90CQlwaWJfZGVsX1FfYWRkcjsKKwl1aW50MzJfdAkJcGliX3JlbF9RX2FkZHI7CisKKwljcnlzdGFsaGRfZGlvcV90CQkqdHhfZnJlZXE7CisJY3J5c3RhbGhkX2Rpb3FfdAkJKnR4X2FjdHE7CisKKwkvKiBSeCBETUEgRW5naW5lIFNwZWNpZmljIExvY2tzICovCisJc3BpbmxvY2tfdAkJcnhfbG9jazsKKwl1aW50MzJfdAkJcnhfbGlzdF9wb3N0X2luZGV4OworCWxpc3Rfc3RzCQlyeF9saXN0X3N0c1tETUFfRU5HSU5FX0NOVF07CisJY3J5c3RhbGhkX2Rpb3FfdAkJKnJ4X3JkeXE7CisJY3J5c3RhbGhkX2Rpb3FfdAkJKnJ4X2ZyZWVxOworCWNyeXN0YWxoZF9kaW9xX3QJCSpyeF9hY3RxOworCXVpbnQzMl90CQlzdG9wX3BlbmRpbmc7CisKKwkvKiBIVyBjb3VudGVycy4uICovCisJc3RydWN0IGNyeXN0YWxoZF9od19zdGF0cwlzdGF0czsKKworCS8qIENvcmUgY2xvY2sgaW4gTUh6ICovCisJdWludDMyX3QJCWNvcmVfY2xvY2tfbWh6OworCXVpbnQzMl90CQlwcmV2X247CisJdWludDMyX3QJCXB3cl9sb2NrOworfTsKKworLyogQ2xvY2sgZGVmaW5lcyBmb3IgcG93ZXIgY29udHJvbCAqLworI2RlZmluZSBDTE9DS19QUkVTRVQgMTc1CisKKy8qIERNQSBlbmdpbmUgcmVnaXN0ZXIgQklUIG1hc2sgd3JhcHBlcnMuLiAqLworI2RlZmluZSBETUFfU1RBUlRfQklUCQlNSVNDMV9UWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFNfVFhfRE1BX1JVTl9TVE9QX01BU0sKKworI2RlZmluZSBHRVRfUlhfSU5UUl9NQVNLIChJTlRSX0lOVFJfU1RBVFVTX0wxX1VWX1JYX0RNQV9FUlJfSU5UUl9NQVNLIHwJCVwKKwkJCSAgSU5UUl9JTlRSX1NUQVRVU19MMV9VVl9SWF9ETUFfRE9ORV9JTlRSX01BU0sgfAlcCisJCQkgIElOVFJfSU5UUl9TVEFUVVNfTDFfWV9SWF9ETUFfRVJSX0lOVFJfTUFTSyB8CQlcCisJCQkgIElOVFJfSU5UUl9TVEFUVVNfTDFfWV9SWF9ETUFfRE9ORV9JTlRSX01BU0sgfAkJXAorCQkJICBJTlRSX0lOVFJfU1RBVFVTX0wwX1VWX1JYX0RNQV9FUlJfSU5UUl9NQVNLIHwJCVwKKwkJCSAgSU5UUl9JTlRSX1NUQVRVU19MMF9VVl9SWF9ETUFfRE9ORV9JTlRSX01BU0sgfAlcCisJCQkgIElOVFJfSU5UUl9TVEFUVVNfTDBfWV9SWF9ETUFfRVJSX0lOVFJfTUFTSyB8CQlcCisJCQkgIElOVFJfSU5UUl9TVEFUVVNfTDBfWV9SWF9ETUFfRE9ORV9JTlRSX01BU0spCisKKyNkZWZpbmUgR0VUX1kwX0VSUl9NU0sgKE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wwX09WRVJSVU5fRVJST1JfTUFTSyB8CQlcCisJCQlNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9VTkRFUlJVTl9FUlJPUl9NQVNLIHwJCVwKKwkJCU1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wwX0RFU0NfVFhfQUJPUlRfRVJST1JTX01BU0sgfAlcCisJCQlNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9GSUZPX0ZVTExfRVJST1JTX01BU0spCisKKyNkZWZpbmUgR0VUX1VWMF9FUlJfTVNLIChNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfT1ZFUlJVTl9FUlJPUl9NQVNLIHwJCVwKKwkJCSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfVU5ERVJSVU5fRVJST1JfTUFTSyB8CQlcCisJCQkgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wwX0RFU0NfVFhfQUJPUlRfRVJST1JTX01BU0sgfAlcCisJCQkgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wwX0ZJRk9fRlVMTF9FUlJPUlNfTUFTSykKKworI2RlZmluZSBHRVRfWTFfRVJSX01TSyAoTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfT1ZFUlJVTl9FUlJPUl9NQVNLIHwJCVwKKwkJCU1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wxX1VOREVSUlVOX0VSUk9SX01BU0sgfAkJXAorCQkJTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfREVTQ19UWF9BQk9SVF9FUlJPUlNfTUFTSyB8CVwKKwkJCU1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wxX0ZJRk9fRlVMTF9FUlJPUlNfTUFTSykKKworI2RlZmluZSBHRVRfVVYxX0VSUl9NU0sJKE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9PVkVSUlVOX0VSUk9SX01BU0sgfAkJXAorCQkJIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9VTkRFUlJVTl9FUlJPUl9NQVNLIHwJCVwKKwkJCSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfREVTQ19UWF9BQk9SVF9FUlJPUlNfTUFTSyB8CVwKKwkJCSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfRklGT19GVUxMX0VSUk9SU19NQVNLKQorCisKKy8qKioqIEFQSSBFeHBvc2VkIHRvIHRoZSBvdGhlciBsYXllcnMgKioqKi8KK0JDX1NUQVRVUyBjcnlzdGFsaGRfZG93bmxvYWRfZncoc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCwKKwkJCSAgICAgIHZvaWQgKmJ1ZmZlciwgdWludDMyX3Qgc3opOworQkNfU1RBVFVTIGNyeXN0YWxoZF9kb19md19jbWQoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcsIEJDX0ZXX0NNRCAqZndfY21kKTsKK2Jvb2wgY3J5c3RhbGhkX2h3X2ludGVycnVwdChzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwLCBzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodyk7CitCQ19TVEFUVVMgY3J5c3RhbGhkX2h3X29wZW4oc3RydWN0IGNyeXN0YWxoZF9odyAqLCBzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqKTsKK0JDX1NUQVRVUyBjcnlzdGFsaGRfaHdfY2xvc2Uoc3RydWN0IGNyeXN0YWxoZF9odyAqKTsKK0JDX1NUQVRVUyBjcnlzdGFsaGRfaHdfc2V0dXBfZG1hX3JpbmdzKHN0cnVjdCBjcnlzdGFsaGRfaHcgKik7CitCQ19TVEFUVVMgY3J5c3RhbGhkX2h3X2ZyZWVfZG1hX3JpbmdzKHN0cnVjdCBjcnlzdGFsaGRfaHcgKik7CisKKworQkNfU1RBVFVTIGNyeXN0YWxoZF9od19wb3N0X3R4KHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3LCBjcnlzdGFsaGRfZGlvX3JlcSAqaW9yZXEsCisJCQkgICAgIGh3X2NvbXBfY2FsbGJhY2sgY2FsbF9iYWNrLAorCQkJICAgICB3YWl0X3F1ZXVlX2hlYWRfdCAqY2JfZXZlbnQsCisJCQkgICAgIHVpbnQzMl90ICpsaXN0X2lkLCB1aW50OF90IGRhdGFfZmxhZ3MpOworCitCQ19TVEFUVVMgY3J5c3RhbGhkX2h3X3BhdXNlKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3KTsKK0JDX1NUQVRVUyBjcnlzdGFsaGRfaHdfdW5wYXVzZShzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodyk7CitCQ19TVEFUVVMgY3J5c3RhbGhkX2h3X3N1c3BlbmQoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcpOworQkNfU1RBVFVTIGNyeXN0YWxoZF9od19jYW5jZWxfdHgoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcsIHVpbnQzMl90IGxpc3RfaWQpOworQkNfU1RBVFVTIGNyeXN0YWxoZF9od19hZGRfY2FwX2J1ZmZlcihzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodywKKwkJCQkgICAgY3J5c3RhbGhkX2Rpb19yZXEgKmlvcmVxLCBib29sIGVuX3Bvc3QpOworQkNfU1RBVFVTIGNyeXN0YWxoZF9od19nZXRfY2FwX2J1ZmZlcihzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodywKKwkJCQkgICAgQkNfUElDX0lORk9fQkxPQ0sgKnBpYiwKKwkJCQkgICAgY3J5c3RhbGhkX2Rpb19yZXEgKippb3JlcSk7CitCQ19TVEFUVVMgY3J5c3RhbGhkX2h3X3N0b3BfY2FwdHVyZShzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodyk7CitCQ19TVEFUVVMgY3J5c3RhbGhkX2h3X3N0YXJ0X2NhcHR1cmUoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcpOwordm9pZCBjcnlzdGFsaGRfaHdfc3RhdHMoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcsIHN0cnVjdCBjcnlzdGFsaGRfaHdfc3RhdHMgKnN0YXRzKTsKKworLyogQVBJIHRvIHByb2dyYW0gdGhlIGNvcmUgY2xvY2sgb24gdGhlIGRlY29kZXIgKi8KK0JDX1NUQVRVUyBjcnlzdGFsaGRfaHdfc2V0X2NvcmVfY2xvY2soc3RydWN0IGNyeXN0YWxoZF9odyAqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9sbnguYyBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2xueC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYWM3MGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9sbnguYwpAQCAtMCwwICsxLDc2NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBCQ003MDAxMCBMaW51eCBkcml2ZXIKKyAgQ29weXJpZ2h0IChjKSAyMDA1LTIwMDksIEJyb2FkY29tIENvcnBvcmF0aW9uLgorCisgIFRoaXMgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorCisgIFRoaXMgZHJpdmVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICBhbG9uZyB3aXRoIHRoaXMgZHJpdmVyLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSAiY3J5c3RhbGhkX2xueC5oIgorCitzdGF0aWMgc3RydWN0IGNsYXNzICpjcnlzdGFsaGRfY2xhc3M7CisKK3N0YXRpYyBzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqZ19hZHBfaW5mbzsKKworc3RhdGljIGlycXJldHVybl90IGNoZF9kZWNfaXNyKGludCBpcnEsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwID0gKHN0cnVjdCBjcnlzdGFsaGRfYWRwICopIGFyZzsKKwlpbnQgcmMgPSAwOworCWlmIChhZHApCisJCXJjID0gY3J5c3RhbGhkX2NtZF9pbnRlcnJ1cHQoJmFkcC0+Y21kcyk7CisKKwlyZXR1cm4gSVJRX1JFVFZBTChyYyk7Cit9CisKK3N0YXRpYyBpbnQgY2hkX2RlY19lbmFibGVfaW50KHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHApCit7CisJaW50IHJjID0gMDsKKworCWlmICghYWRwIHx8ICFhZHAtPnBkZXYpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBhcmchIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChhZHAtPnBkZXYtPm1zaV9lbmFibGVkKQorCQlhZHAtPm1zaSA9IDE7CisJZWxzZQorCQlhZHAtPm1zaSA9IHBjaV9lbmFibGVfbXNpKGFkcC0+cGRldik7CisKKwlyYyA9IHJlcXVlc3RfaXJxKGFkcC0+cGRldi0+aXJxLCBjaGRfZGVjX2lzciwgSVJRRl9TSEFSRUQsCisJCQkgYWRwLT5uYW1lLCAodm9pZCAqKWFkcCk7CisJaWYgKHJjKSB7CisJCUJDTUxPR19FUlIoIkludGVycnVwdCByZXF1ZXN0IGZhaWxlZC4uIFxuIik7CisJCXBjaV9kaXNhYmxlX21zaShhZHAtPnBkZXYpOworCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBjaGRfZGVjX2Rpc2FibGVfaW50KHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHApCit7CisJaWYgKCFhZHAgfHwgIWFkcC0+cGRldikgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIGFyZyEhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZnJlZV9pcnEoYWRwLT5wZGV2LT5pcnEsIGFkcCk7CisKKwlpZiAoYWRwLT5tc2kpCisJCXBjaV9kaXNhYmxlX21zaShhZHAtPnBkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK2NyeXN0YWxoZF9pb2N0bF9kYXRhICpjaGRfZGVjX2FsbG9jX2lvZGF0YShzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwLCBib29sIGlzcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwljcnlzdGFsaGRfaW9jdGxfZGF0YSAqdGVtcDsKKworCWlmICghYWRwKQorCQlyZXR1cm4gTlVMTDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZHAtPmxvY2ssIGZsYWdzKTsKKworCXRlbXAgPSBhZHAtPmlkYXRhX2ZyZWVfaGVhZDsKKwlpZiAodGVtcCkgeworCQlhZHAtPmlkYXRhX2ZyZWVfaGVhZCA9IGFkcC0+aWRhdGFfZnJlZV9oZWFkLT5uZXh0OworCQltZW1zZXQodGVtcCwgMCwgc2l6ZW9mKCp0ZW1wKSk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRwLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHRlbXA7Cit9CisKK3ZvaWQgY2hkX2RlY19mcmVlX2lvZGF0YShzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwLCBjcnlzdGFsaGRfaW9jdGxfZGF0YSAqaW9kYXRhLAorCQkJIGJvb2wgaXNyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCisJaWYgKCFhZHAgfHwgIWlvZGF0YSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkcC0+bG9jaywgZmxhZ3MpOworCWlvZGF0YS0+bmV4dCA9IGFkcC0+aWRhdGFfZnJlZV9oZWFkOworCWFkcC0+aWRhdGFfZnJlZV9oZWFkID0gaW9kYXRhOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkcC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlzdGFsaGRfdXNlcl9kYXRhKHVuc2lnbmVkIGxvbmcgdWQsIHZvaWQgKmRyLCBpbnQgc2l6ZSwgaW50IHNldCkKK3sKKwlpbnQgcmM7CisKKwlpZiAoIXVkIHx8ICFkcikgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIGFyZyBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc2V0KQorCQlyYyA9IGNvcHlfdG9fdXNlcigodm9pZCAqKXVkLCBkciwgc2l6ZSk7CisJZWxzZQorCQlyYyA9IGNvcHlfZnJvbV91c2VyKGRyLCAodm9pZCAqKXVkLCBzaXplKTsKKworCWlmIChyYykgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIGFyZ3MgZm9yIGNvbW1hbmQgXG4iKTsKKwkJcmMgPSAtRUZBVUxUOworCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBjaGRfZGVjX2ZldGNoX2NkYXRhKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAsIGNyeXN0YWxoZF9pb2N0bF9kYXRhICppbywKKwkJCSAgICAgICB1aW50MzJfdCBtX3N6LCB1bnNpZ25lZCBsb25nIHVhKQoreworCXVuc2lnbmVkIGxvbmcgdWFfb2ZmOworCWludCByYyA9IDA7CisKKwlpZiAoIWFkcCB8fCAhaW8gfHwgIXVhIHx8ICFtX3N6KSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJnISFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpby0+YWRkX2NkYXRhID0gdm1hbGxvYyhtX3N6KTsKKwlpZiAoIWlvLT5hZGRfY2RhdGEpIHsKKwkJQkNNTE9HX0VSUigia2FsbG9jIGZhaWwgZm9yIHN6OiV4XG4iLCBtX3N6KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaW8tPmFkZF9jZGF0YV9zeiA9IG1fc3o7CisJdWFfb2ZmID0gdWEgKyBzaXplb2YoaW8tPnVkYXRhKTsKKwlyYyA9IGNyeXN0YWxoZF91c2VyX2RhdGEodWFfb2ZmLCBpby0+YWRkX2NkYXRhLCBpby0+YWRkX2NkYXRhX3N6LCAwKTsKKwlpZiAocmMpIHsKKwkJQkNNTE9HX0VSUigiZmFpbGVkIHRvIHB1bGwgYWRkX2NkYXRhIHN6OiV4IHVhX29mZjoleFxuIiwKKwkJCSAgIGlvLT5hZGRfY2RhdGFfc3osICh1bnNpZ25lZCBpbnQpdWFfb2ZmKTsKKwkJaWYgKGlvLT5hZGRfY2RhdGEpIHsKKwkJCWtmcmVlKGlvLT5hZGRfY2RhdGEpOworCQkJaW8tPmFkZF9jZGF0YSA9IE5VTEw7CisJCX0KKwkJcmV0dXJuIC1FTk9EQVRBOworCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBjaGRfZGVjX3JlbGVhc2VfY2RhdGEoc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCwKKwkJCQkgY3J5c3RhbGhkX2lvY3RsX2RhdGEgKmlvLCB1bnNpZ25lZCBsb25nIHVhKQoreworCXVuc2lnbmVkIGxvbmcgdWFfb2ZmOworCWludCByYzsKKworCWlmICghYWRwIHx8ICFpbyB8fCAhdWEpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmchIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChpby0+Y21kICE9IEJDTV9JT0NfRldfRE9XTkxPQUQpIHsKKwkJdWFfb2ZmID0gdWEgKyBzaXplb2YoaW8tPnVkYXRhKTsKKwkJcmMgPSBjcnlzdGFsaGRfdXNlcl9kYXRhKHVhX29mZiwgaW8tPmFkZF9jZGF0YSwKKwkJCQkJaW8tPmFkZF9jZGF0YV9zeiwgMSk7CisJCWlmIChyYykgeworCQkJQkNNTE9HX0VSUigiZmFpbGVkIHRvIHB1c2ggYWRkX2NkYXRhIHN6OiV4IHVhX29mZjoleFxuIiwKKwkJCQkgICBpby0+YWRkX2NkYXRhX3N6LCAodW5zaWduZWQgaW50KXVhX29mZik7CisJCQlyZXR1cm4gLUVOT0RBVEE7CisJCX0KKwl9CisKKwlpZiAoaW8tPmFkZF9jZGF0YSkgeworCQl2ZnJlZShpby0+YWRkX2NkYXRhKTsKKwkJaW8tPmFkZF9jZGF0YSA9IE5VTEw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2hkX2RlY19wcm9jX3VzZXJfZGF0YShzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwLAorCQkJCSAgY3J5c3RhbGhkX2lvY3RsX2RhdGEgKmlvLAorCQkJCSAgdW5zaWduZWQgbG9uZyB1YSwgaW50IHNldCkKK3sKKwlpbnQgcmM7CisJdWludDMyX3QgbV9zeiA9IDA7CisKKwlpZiAoIWFkcCB8fCAhaW8gfHwgIXVhKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJnISFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyYyA9IGNyeXN0YWxoZF91c2VyX2RhdGEodWEsICZpby0+dWRhdGEsIHNpemVvZihpby0+dWRhdGEpLCBzZXQpOworCWlmIChyYykgeworCQlCQ01MT0dfRVJSKCJmYWlsZWQgdG8gJXMgaW9kYXRhIFxuIiwgKHNldCA/ICJzZXQiIDogImdldCIpKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXN3aXRjaCAoaW8tPmNtZCkgeworCWNhc2UgQkNNX0lPQ19NRU1fUkQ6CisJY2FzZSBCQ01fSU9DX01FTV9XUjoKKwljYXNlIEJDTV9JT0NfRldfRE9XTkxPQUQ6CisJCW1fc3ogPSBpby0+dWRhdGEudS5kZXZNZW0uTnVtRHdvcmRzICogNDsKKwkJaWYgKHNldCkKKwkJCXJjID0gY2hkX2RlY19yZWxlYXNlX2NkYXRhKGFkcCwgaW8sIHVhKTsKKwkJZWxzZQorCQkJcmMgPSBjaGRfZGVjX2ZldGNoX2NkYXRhKGFkcCwgaW8sIG1fc3osIHVhKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGNoZF9kZWNfYXBpX2NtZChzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwLCB1bnNpZ25lZCBsb25nIHVhLAorCQkJICAgdWludDMyX3QgdWlkLCB1aW50MzJfdCBjbWQsIGNyeXN0YWxoZF9jbWRfcHJvYyBmdW5jKQoreworCWludCByYzsKKwljcnlzdGFsaGRfaW9jdGxfZGF0YSAqdGVtcDsKKwlCQ19TVEFUVVMgc3RzID0gQkNfU1RTX1NVQ0NFU1M7CisKKwl0ZW1wID0gY2hkX2RlY19hbGxvY19pb2RhdGEoYWRwLCAwKTsKKwlpZiAoIXRlbXApIHsKKwkJQkNNTE9HX0VSUigiRmFpbGVkIHRvIGdldCBpb2RhdGEuLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXRlbXAtPnVfaWQgPSB1aWQ7CisJdGVtcC0+Y21kICA9IGNtZDsKKworCXJjID0gY2hkX2RlY19wcm9jX3VzZXJfZGF0YShhZHAsIHRlbXAsIHVhLCAwKTsKKwlpZiAoIXJjKSB7CisJCXN0cyA9IGZ1bmMoJmFkcC0+Y21kcywgdGVtcCk7CisJCWlmIChzdHMgPT0gQkNfU1RTX1BFTkRJTkcpCisJCQlzdHMgPSBCQ19TVFNfTk9UX0lNUEw7CisJCXRlbXAtPnVkYXRhLlJldFN0cyA9IHN0czsKKwkJcmMgPSBjaGRfZGVjX3Byb2NfdXNlcl9kYXRhKGFkcCwgdGVtcCwgdWEsIDEpOworCX0KKworCWlmICh0ZW1wKSB7CisJCWNoZF9kZWNfZnJlZV9pb2RhdGEoYWRwLCB0ZW1wLCAwKTsKKwkJdGVtcCA9IE5VTEw7CisJfQorCisJcmV0dXJuIHJjOworfQorCisvKiBBUEkgaW50ZXJmYWNlcyAqLworc3RhdGljIGludCBjaGRfZGVjX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW4sIHN0cnVjdCBmaWxlICpmZCwKKwkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIHVhKQoreworCXN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAgPSBjaGRfZ2V0X2FkcCgpOworCWNyeXN0YWxoZF9jbWRfcHJvYyBjcHJvYzsKKwlzdHJ1Y3QgY3J5c3RhbGhkX3VzZXIgKnVjOworCisJaWYgKCFhZHAgfHwgIWZkKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgYWRwXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdWMgPSAoc3RydWN0IGNyeXN0YWxoZF91c2VyICopZmQtPnByaXZhdGVfZGF0YTsKKwlpZiAoIXVjKSB7CisJCUJDTUxPR19FUlIoIkZhaWxlZCB0byBnZXQgdWNcbiIpOworCQlyZXR1cm4gLUVOT0RBVEE7CisJfQorCisJY3Byb2MgPSBjcnlzdGFsaGRfZ2V0X2NtZF9wcm9jKCZhZHAtPmNtZHMsIGNtZCwgdWMpOworCWlmICghY3Byb2MpIHsKKwkJQkNNTE9HX0VSUigiVW5oYW5kbGVkIGNvbW1hbmQ6ICVkXG4iLCBjbWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gY2hkX2RlY19hcGlfY21kKGFkcCwgdWEsIHVjLT51aWQsIGNtZCwgY3Byb2MpOworfQorCitzdGF0aWMgaW50IGNoZF9kZWNfb3BlbihzdHJ1Y3QgaW5vZGUgKmluLCBzdHJ1Y3QgZmlsZSAqZmQpCit7CisJc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCA9IGNoZF9nZXRfYWRwKCk7CisJaW50IHJjID0gMDsKKwlCQ19TVEFUVVMgc3RzID0gQkNfU1RTX1NVQ0NFU1M7CisJc3RydWN0IGNyeXN0YWxoZF91c2VyICp1YyA9IE5VTEw7CisKKwlCQ01MT0dfRU5URVI7CisJaWYgKCFhZHApIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBhZHBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoYWRwLT5jZmdfdXNlcnMgPj0gQkNfTElOS19NQVhfT1BFTlMpIHsKKwkJQkNNTE9HKEJDTUxPR19JTkZPLCAiQWxyZWFkeSBpbiB1c2UuJWRcbiIsIGFkcC0+Y2ZnX3VzZXJzKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlzdHMgPSBjcnlzdGFsaGRfdXNlcl9vcGVuKCZhZHAtPmNtZHMsICZ1Yyk7CisJaWYgKHN0cyAhPSBCQ19TVFNfU1VDQ0VTUykgeworCQlCQ01MT0dfRVJSKCJjbWRfdXNlcl9vcGVuIC0gJWQgXG4iLCBzdHMpOworCQlyYyA9IC1FQlVTWTsKKwl9CisKKwlhZHAtPmNmZ191c2VycysrOworCisJZmQtPnByaXZhdGVfZGF0YSA9IHVjOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGNoZF9kZWNfY2xvc2Uoc3RydWN0IGlub2RlICppbiwgc3RydWN0IGZpbGUgKmZkKQoreworCXN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAgPSBjaGRfZ2V0X2FkcCgpOworCXN0cnVjdCBjcnlzdGFsaGRfdXNlciAqdWM7CisKKwlCQ01MT0dfRU5URVI7CisJaWYgKCFhZHApIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBhZHAgXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdWMgPSAoc3RydWN0IGNyeXN0YWxoZF91c2VyICopZmQtPnByaXZhdGVfZGF0YTsKKwlpZiAoIXVjKSB7CisJCUJDTUxPR19FUlIoIkZhaWxlZCB0byBnZXQgdWNcbiIpOworCQlyZXR1cm4gLUVOT0RBVEE7CisJfQorCisJY3J5c3RhbGhkX3VzZXJfY2xvc2UoJmFkcC0+Y21kcywgdWMpOworCisJYWRwLT5jZmdfdXNlcnMtLTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjaGRfZGVjX2ZvcHMgPSB7CisJLm93bmVyICAgPSBUSElTX01PRFVMRSwKKwkuaW9jdGwgICA9IGNoZF9kZWNfaW9jdGwsCisJLm9wZW4gICAgPSBjaGRfZGVjX29wZW4sCisJLnJlbGVhc2UgPSBjaGRfZGVjX2Nsb3NlLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgY2hkX2RlY19pbml0X2NoZGV2KHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHApCit7CisJY3J5c3RhbGhkX2lvY3RsX2RhdGEgKnRlbXA7CisJc3RydWN0IGRldmljZSAqZGV2OworCWludCByYyA9IC1FTk9ERVYsIGkgPSAwOworCisJaWYgKCFhZHApCisJCWdvdG8gZmFpbDsKKworCWFkcC0+Y2hkX2RlY19tYWpvciA9IHJlZ2lzdGVyX2NocmRldigwLCBDUllTVEFMSERfQVBJX05BTUUsCisJCQkJCSAgICAgJmNoZF9kZWNfZm9wcyk7CisJaWYgKGFkcC0+Y2hkX2RlY19tYWpvciA8IDApIHsKKwkJQkNNTE9HX0VSUigiRmFpbGVkIHRvIGNyZWF0ZSBjb25maWcgZGV2XG4iKTsKKwkJcmMgPSBhZHAtPmNoZF9kZWNfbWFqb3I7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiByZWdpc3RlciBjcnlzdGFsaGQgY2xhc3MgKi8KKwljcnlzdGFsaGRfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJjcnlzdGFsaGQiKTsKKwlpZiAoSVNfRVJSKGNyeXN0YWxoZF9jbGFzcykpIHsKKwkJQkNNTE9HX0VSUigiZmFpbGVkIHRvIGNyZWF0ZSBjbGFzc1xuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlkZXYgPSBkZXZpY2VfY3JlYXRlKGNyeXN0YWxoZF9jbGFzcywgTlVMTCwgTUtERVYoYWRwLT5jaGRfZGVjX21ham9yLCAwKSwKKwkJCSAgICBOVUxMLCAiY3J5c3RhbGhkIik7CisJaWYgKCFkZXYpIHsKKwkJQkNNTE9HX0VSUigiZmFpbGVkIHRvIGNyZWF0ZSBkZXZpY2VcbiIpOworCQlnb3RvIGRldmljZV9jcmVhdGVfZmFpbDsKKwl9CisKKwlyYyA9IGNyeXN0YWxoZF9jcmVhdGVfZWxlbV9wb29sKGFkcCwgQkNfTElOS19FTEVNX1BPT0xfU1opOworCWlmIChyYykgeworCQlCQ01MT0dfRVJSKCJmYWlsZWQgdG8gY3JlYXRlIGRldmljZVxuIik7CisJCWdvdG8gZWxlbV9wb29sX2ZhaWw7CisJfQorCisJLyogQWxsb2NhdGUgZ2VuZXJhbCBwdXJwb3NlIGlvY3RsIHBvb2wuICovCisJZm9yIChpID0gMDsgaSA8IENIRF9JT0RBVEFfUE9PTF9TWjsgaSsrKSB7CisJCS8qIEZJWE1FOiBqYXJvZDogd2h5IGF0b21pYz8gKi8KKwkJdGVtcCA9IGt6YWxsb2Moc2l6ZW9mKGNyeXN0YWxoZF9pb2N0bF9kYXRhKSwgR0ZQX0FUT01JQyk7CisJCWlmICghdGVtcCkgeworCQkJQkNNTE9HX0VSUigiaW9jdGwgZGF0YSBwb29sIGt6YWxsb2MgZmFpbGVkXG4iKTsKKwkJCXJjID0gLUVOT01FTTsKKwkJCWdvdG8ga3phbGxvY19mYWlsOworCQl9CisJCS8qIEFkZCB0byBnbG9iYWwgcG9vbC4uICovCisJCWNoZF9kZWNfZnJlZV9pb2RhdGEoYWRwLCB0ZW1wLCAwKTsKKwl9CisKKwlyZXR1cm4gMDsKKwora3phbGxvY19mYWlsOgorCWNyeXN0YWxoZF9kZWxldGVfZWxlbV9wb29sKGFkcCk7CitlbGVtX3Bvb2xfZmFpbDoKKwlkZXZpY2VfZGVzdHJveShjcnlzdGFsaGRfY2xhc3MsIE1LREVWKGFkcC0+Y2hkX2RlY19tYWpvciwgMCkpOworZGV2aWNlX2NyZWF0ZV9mYWlsOgorCWNsYXNzX2Rlc3Ryb3koY3J5c3RhbGhkX2NsYXNzKTsKK2ZhaWw6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgY2hkX2RlY19yZWxlYXNlX2NoZGV2KHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHApCit7CisJY3J5c3RhbGhkX2lvY3RsX2RhdGEgKnRlbXAgPSBOVUxMOworCWlmICghYWRwKQorCQlyZXR1cm47CisKKwlpZiAoYWRwLT5jaGRfZGVjX21ham9yID4gMCkgeworCQkvKiB1bnJlZ2lzdGVyIGNyeXN0YWxoZCBjbGFzcyAqLworCQlkZXZpY2VfZGVzdHJveShjcnlzdGFsaGRfY2xhc3MsIE1LREVWKGFkcC0+Y2hkX2RlY19tYWpvciwgMCkpOworCQl1bnJlZ2lzdGVyX2NocmRldihhZHAtPmNoZF9kZWNfbWFqb3IsIENSWVNUQUxIRF9BUElfTkFNRSk7CisJCUJDTUxPRyhCQ01MT0dfSU5GTywgInJlbGVhc2VkIGFwaSBkZXZpY2UgLSAlZFxuIiwKKwkJICAgICAgIGFkcC0+Y2hkX2RlY19tYWpvcik7CisJCWNsYXNzX2Rlc3Ryb3koY3J5c3RhbGhkX2NsYXNzKTsKKwl9CisJYWRwLT5jaGRfZGVjX21ham9yID0gMDsKKworCS8qIENsZWFyIGlvZGF0YSBwb29sLi4gKi8KKwlkbyB7CisJCXRlbXAgPSBjaGRfZGVjX2FsbG9jX2lvZGF0YShhZHAsIDApOworCQlpZiAodGVtcCkKKwkJCWtmcmVlKHRlbXApOworCX0gd2hpbGUgKHRlbXApOworCisJY3J5c3RhbGhkX2RlbGV0ZV9lbGVtX3Bvb2woYWRwKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgY2hkX3BjaV9yZXNlcnZlX21lbShzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqcGluZm8pCit7CisJaW50IHJjOworCXVuc2lnbmVkIGxvbmcgYmFyMiA9IHBjaV9yZXNvdXJjZV9zdGFydChwaW5mby0+cGRldiwgMik7CisJdWludDMyX3QgbWVtX2xlbiAgID0gcGNpX3Jlc291cmNlX2xlbihwaW5mby0+cGRldiwgMik7CisJdW5zaWduZWQgbG9uZyBiYXIwID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBpbmZvLT5wZGV2LCAwKTsKKwl1aW50MzJfdCBpMm9fbGVuICAgPSBwY2lfcmVzb3VyY2VfbGVuKHBpbmZvLT5wZGV2LCAwKTsKKworCUJDTUxPRyhCQ01MT0dfU1NURVAsICJiYXIyOjB4JWx4LTB4JTA4eCAgYmFyMDoweCVseC0weCUwOHhcbiIsCisJICAgICAgIGJhcjIsIG1lbV9sZW4sIGJhcjAsIGkyb19sZW4pOworCisJcmMgPSBjaGVja19tZW1fcmVnaW9uKGJhcjIsIG1lbV9sZW4pOworCWlmIChyYykgeworCQlCQ01MT0dfRVJSKCJObyB2YWxpZCBtZW0gcmVnaW9uLi4uXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcGluZm8tPmFkZHIgPSBpb3JlbWFwX25vY2FjaGUoYmFyMiwgbWVtX2xlbik7CisJaWYgKCFwaW5mby0+YWRkcikgeworCQlCQ01MT0dfRVJSKCJGYWlsZWQgdG8gcmVtYXAgbWVtIHJlZ2lvbi4uLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBpbmZvLT5wY2lfbWVtX3N0YXJ0ID0gYmFyMjsKKwlwaW5mby0+cGNpX21lbV9sZW4gICA9IG1lbV9sZW47CisKKwlyYyA9IGNoZWNrX21lbV9yZWdpb24oYmFyMCwgaTJvX2xlbik7CisJaWYgKHJjKSB7CisJCUJDTUxPR19FUlIoIk5vIHZhbGlkIG1lbSByZWdpb24uLi5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwaW5mby0+aTJvX2FkZHIgPSBpb3JlbWFwX25vY2FjaGUoYmFyMCwgaTJvX2xlbik7CisJaWYgKCFwaW5mby0+aTJvX2FkZHIpIHsKKwkJQkNNTE9HX0VSUigiRmFpbGVkIHRvIHJlbWFwIG1lbSByZWdpb24uLi5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwaW5mby0+cGNpX2kyb19zdGFydCA9IGJhcjA7CisJcGluZm8tPnBjaV9pMm9fbGVuICAgPSBpMm9fbGVuOworCisJcmMgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBpbmZvLT5wZGV2LCBwaW5mby0+bmFtZSk7CisJaWYgKHJjIDwgMCkgeworCQlCQ01MT0dfRVJSKCJSZWdpb24gcmVxdWVzdCBmYWlsZWQ6ICVkXG4iLCByYyk7CisJCXJldHVybiByYzsKKwl9CisKKwlCQ01MT0coQkNNTE9HX1NTVEVQLCAiTWFwcGVkIGFkZHI6MHglMDhseCAgaTJvX2FkZHI6MHglMDhseFxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcpcGluZm8tPmFkZHIsICh1bnNpZ25lZCBsb25nKXBpbmZvLT5pMm9fYWRkcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGNoZF9wY2lfcmVsZWFzZV9tZW0oc3RydWN0IGNyeXN0YWxoZF9hZHAgKnBpbmZvKQoreworCWlmICghcGluZm8pCisJCXJldHVybjsKKworCWlmIChwaW5mby0+YWRkcikKKwkJaW91bm1hcChwaW5mby0+YWRkcik7CisKKwlpZiAocGluZm8tPmkyb19hZGRyKQorCQlpb3VubWFwKHBpbmZvLT5pMm9fYWRkcik7CisKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBpbmZvLT5wZGV2KTsKK30KKworCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgY2hkX2RlY19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBjcnlzdGFsaGRfYWRwICpwaW5mbzsKKwlCQ19TVEFUVVMgc3RzID0gQkNfU1RTX1NVQ0NFU1M7CisKKwlCQ01MT0dfRU5URVI7CisKKwlwaW5mbyA9IChzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqKSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaWYgKCFwaW5mbykgeworCQlCQ01MT0dfRVJSKCJjb3VsZCBub3QgZ2V0IGFkcFxuIik7CisJCXJldHVybjsKKwl9CisKKwlzdHMgPSBjcnlzdGFsaGRfZGVsZXRlX2NtZF9jb250ZXh0KCZwaW5mby0+Y21kcyk7CisJaWYgKHN0cyAhPSBCQ19TVFNfU1VDQ0VTUykKKwkJQkNNTE9HX0VSUigiY21kIGRlbGV0ZSA6JWQgXG4iLCBzdHMpOworCisJY2hkX2RlY19yZWxlYXNlX2NoZGV2KHBpbmZvKTsKKworCWNoZF9kZWNfZGlzYWJsZV9pbnQocGluZm8pOworCisJY2hkX3BjaV9yZWxlYXNlX21lbShwaW5mbyk7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBpbmZvLT5wZGV2KTsKKworCWtmcmVlKHBpbmZvKTsKKwlnX2FkcF9pbmZvID0gTlVMTDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgY2hkX2RlY19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnRyeSkKK3sKKwlzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqcGluZm87CisJaW50IHJjOworCUJDX1NUQVRVUyBzdHMgPSBCQ19TVFNfU1VDQ0VTUzsKKworCUJDTUxPRyhCQ01MT0dfREJHLCAiUENJX0lORk86IFZlbmRvcjoweCUwNHggRGV2aWNlOjB4JTA0eCAiCisJICAgICAgICJzX3ZlbmRvcjoweCUwNHggc19kZXZpY2U6IDB4JTA0eFxuIiwKKwkgICAgICAgcGRldi0+dmVuZG9yLCBwZGV2LT5kZXZpY2UsIHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IsCisJICAgICAgIHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UpOworCisJLyogRklYTUU6IGphcm9kOiB3aHkgYXRvbWljPyAqLworCXBpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNyeXN0YWxoZF9hZHApLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXBpbmZvKSB7CisJCUJDTUxPR19FUlIoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwaW5mby0+cGRldiA9IHBkZXY7CisKKwlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyYykgeworCQlCQ01MT0dfRVJSKCJGYWlsZWQgdG8gZW5hYmxlIFBDSSBkZXZpY2VcbiIpOworCQlyZXR1cm4gcmM7CisJfQorCisJc25wcmludGYocGluZm8tPm5hbWUsIDMxLCAiY3J5c3RhbGhkX3BjaV9lOiVkOiVkOiVkIiwKKwkJIHBkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChwZGV2LT5kZXZmbiksCisJCSBQQ0lfRlVOQyhwZGV2LT5kZXZmbikpOworCisJcmMgPSBjaGRfcGNpX3Jlc2VydmVfbWVtKHBpbmZvKTsKKwlpZiAocmMpIHsKKwkJQkNNTE9HX0VSUigiRmFpbGVkIHRvIHNldHVwIG1lbW9yeSByZWdpb25zLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBpbmZvLT5wcmVzZW50CT0gMTsKKwlwaW5mby0+ZHJ2X2RhdGEgPSBlbnRyeS0+ZHJpdmVyX2RhdGE7CisKKwkvKiBTZXR1cCBhZGFwdGVyIGxldmVsIGxvY2suLiAqLworCXNwaW5fbG9ja19pbml0KCZwaW5mby0+bG9jayk7CisKKwkvKiBzZXR1cCBhcGkgc3R1ZmYuLiAqLworCWNoZF9kZWNfaW5pdF9jaGRldihwaW5mbyk7CisJcmMgPSBjaGRfZGVjX2VuYWJsZV9pbnQocGluZm8pOworCWlmIChyYykgeworCQlCQ01MT0dfRVJSKCJfZW5hYmxlX2ludCBlcnI6JWQgXG4iLCByYyk7CisJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogU2V0IGRtYSBtYXNrLi4uICovCisJaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpKSB7CisJCXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNjQpKTsKKwkJcGluZm8tPmRtYWJpdHMgPSA2NDsKKwl9IGVsc2UgaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpKSB7CisJCXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKKwkJcGluZm8tPmRtYWJpdHMgPSAzMjsKKwl9IGVsc2UgeworCQlCQ01MT0dfRVJSKCJVbmFibGVkIHRvIHNldHVwIERNQSAlZFxuIiwgcmMpOworCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXN0cyA9IGNyeXN0YWxoZF9zZXR1cF9jbWRfY29udGV4dCgmcGluZm8tPmNtZHMsIHBpbmZvKTsKKwlpZiAoc3RzICE9IEJDX1NUU19TVUNDRVNTKSB7CisJCUJDTUxPR19FUlIoImNtZCBzZXR1cCA6JWQgXG4iLCBzdHMpOworCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIHBpbmZvKTsKKworCWdfYWRwX2luZm8gPSBwaW5mbzsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitpbnQgY2hkX2RlY19wY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHA7CisJY3J5c3RhbGhkX2lvY3RsX2RhdGEgKnRlbXA7CisJQkNfU1RBVFVTIHN0cyA9IEJDX1NUU19TVUNDRVNTOworCisJYWRwID0gKHN0cnVjdCBjcnlzdGFsaGRfYWRwICopcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWlmICghYWRwKSB7CisJCUJDTUxPR19FUlIoImNvdWxkIG5vdCBnZXQgYWRwXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJdGVtcCA9IGNoZF9kZWNfYWxsb2NfaW9kYXRhKGFkcCwgZmFsc2UpOworCWlmICghdGVtcCkgeworCQlCQ01MT0dfRVJSKCJjb3VsZCBub3QgZ2V0IGlvY3RsIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzdHMgPSBjcnlzdGFsaGRfc3VzcGVuZCgmYWRwLT5jbWRzLCB0ZW1wKTsKKwlpZiAoc3RzICE9IEJDX1NUU19TVUNDRVNTKSB7CisJCUJDTUxPR19FUlIoIkJDTTcwMDEyIFN1c3BlbmQgJWRcbiIsIHN0cyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWNoZF9kZWNfZnJlZV9pb2RhdGEoYWRwLCB0ZW1wLCBmYWxzZSk7CisJY2hkX2RlY19kaXNhYmxlX2ludChhZHApOworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCisJLyogRGlzYWJsZSBJTy9idXMgbWFzdGVyL2lycSByb3V0ZXIgKi8KKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjaGRfZGVjX3BjaV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcDsKKwlCQ19TVEFUVVMgc3RzID0gQkNfU1RTX1NVQ0NFU1M7CisJaW50IHJjOworCisJYWRwID0gKHN0cnVjdCBjcnlzdGFsaGRfYWRwICopcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWlmICghYWRwKSB7CisJCUJDTUxPR19FUlIoImNvdWxkIG5vdCBnZXQgYWRwXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCisJLyogZGV2aWNlJ3MgaXJxIHBvc3NpYmx5IGlzIGNoYW5nZWQsIGRyaXZlciBzaG91bGQgdGFrZSBjYXJlICovCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7CisJCUJDTUxPR19FUlIoIkZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZVxuIik7CisJCXJldHVybiAxOworCX0KKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJcmMgPSBjaGRfZGVjX2VuYWJsZV9pbnQoYWRwKTsKKwlpZiAocmMpIHsKKwkJQkNNTE9HX0VSUigiX2VuYWJsZV9pbnQgZXJyOiVkIFxuIiwgcmMpOworCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXN0cyA9IGNyeXN0YWxoZF9yZXN1bWUoJmFkcC0+Y21kcyk7CisJaWYgKHN0cyAhPSBCQ19TVFNfU1VDQ0VTUykgeworCQlCQ01MT0dfRVJSKCJCQ003MDAxMiBSZXN1bWUgJWRcbiIsIHN0cyk7CisJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGNoZF9kZWNfcGNpX2lkX3RhYmxlKSA9IHsKKwl7IFBDSV9WREVWSUNFKEJST0FEQ09NLCAweDE2MTIpLCA4IH0sCisJeyAwLCB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBjaGRfZGVjX3BjaV9pZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBiY19jaGRfNzAwMTJfZHJpdmVyID0geworCS5uYW1lICAgICA9ICJCcm9hZGNvbSA3MDAxMiBEZWNvZGVyIiwKKwkucHJvYmUgICAgPSBjaGRfZGVjX3BjaV9wcm9iZSwKKwkucmVtb3ZlICAgPSBfX2RldmV4aXRfcChjaGRfZGVjX3BjaV9yZW1vdmUpLAorCS5pZF90YWJsZSA9IGNoZF9kZWNfcGNpX2lkX3RhYmxlLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kICA9IGNoZF9kZWNfcGNpX3N1c3BlbmQsCisJLnJlc3VtZSAgID0gY2hkX2RlY19wY2lfcmVzdW1lCisjZW5kaWYKK307CisKK3ZvaWQgY2hkX3NldF9sb2dfbGV2ZWwoc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCwgY2hhciAqYXJnKQoreworCWlmICgoIWFyZykgfHwgKHN0cmxlbihhcmcpIDwgMykpCisJCWdfbGlua2xvZ19sZXZlbCA9IEJDTUxPR19FUlJPUiB8IEJDTUxPR19EQVRBOworCWVsc2UgaWYgKCFzdHJuY21wKGFyZywgInNzdGVwIiwgNSkpCisJCWdfbGlua2xvZ19sZXZlbCA9IEJDTUxPR19JTkZPIHwgQkNNTE9HX0RBVEEgfCBCQ01MT0dfREJHIHwKKwkJCQkgIEJDTUxPR19TU1RFUCB8IEJDTUxPR19FUlJPUjsKKwllbHNlIGlmICghc3RybmNtcChhcmcsICJpbmZvIiwgNCkpCisJCWdfbGlua2xvZ19sZXZlbCA9IEJDTUxPR19FUlJPUiB8IEJDTUxPR19EQVRBIHwgQkNNTE9HX0lORk87CisJZWxzZSBpZiAoIXN0cm5jbXAoYXJnLCAiZGVidWciLCA1KSkKKwkJZ19saW5rbG9nX2xldmVsID0gQkNNTE9HX0VSUk9SIHwgQkNNTE9HX0RBVEEgfCBCQ01MT0dfSU5GTyB8CisJCQkJICBCQ01MT0dfREJHOworCWVsc2UgaWYgKCFzdHJuY21wKGFyZywgInBiYWxsIiwgNSkpCisJCWdfbGlua2xvZ19sZXZlbCA9IDB4RkZGRkZGRkYgJiB+KEJDTUxPR19TUElOTE9DSyk7CisJZWxzZSBpZiAoIXN0cm5jbXAoYXJnLCAic2lsZW50IiwgNikpCisJCWdfbGlua2xvZ19sZXZlbCA9IDA7CisJZWxzZQorCQlnX2xpbmtsb2dfbGV2ZWwgPSAwOworfQorCitzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqY2hkX2dldF9hZHAodm9pZCkKK3sKKwlyZXR1cm4gZ19hZHBfaW5mbzsKK30KKworc3RhdGljIGludCBfX2luaXQgY2hkX2RlY19tb2R1bGVfaW5pdCh2b2lkKQoreworCWludCByYzsKKworCWNoZF9zZXRfbG9nX2xldmVsKE5VTEwsICJkZWJ1ZyIpOworCUJDTUxPRyhCQ01MT0dfREFUQSwgIkxvYWRpbmcgY3J5c3RhbGhkICVkLiVkLiVkIFxuIiwKKwkgICAgICAgY3J5c3RhbGhkX2ttb2RfbWFqb3IsIGNyeXN0YWxoZF9rbW9kX21pbm9yLCBjcnlzdGFsaGRfa21vZF9yZXYpOworCisJcmMgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZiY19jaGRfNzAwMTJfZHJpdmVyKTsKKworCWlmIChyYyA8IDApCisJCUJDTUxPR19FUlIoIkNvdWxkIG5vdCBmaW5kIGFueSBkZXZpY2VzLiBlcnI6JWQgXG4iLCByYyk7CisKKwlyZXR1cm4gcmM7Cit9Cittb2R1bGVfaW5pdChjaGRfZGVjX21vZHVsZV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGNoZF9kZWNfbW9kdWxlX2NsZWFudXAodm9pZCkKK3sKKwlCQ01MT0coQkNNTE9HX0RBVEEsICJ1bmxvYWRpbmcgY3J5c3RhbGhkICVkLiVkLiVkIFxuIiwKKwkgICAgICAgY3J5c3RhbGhkX2ttb2RfbWFqb3IsIGNyeXN0YWxoZF9rbW9kX21pbm9yLCBjcnlzdGFsaGRfa21vZF9yZXYpOworCisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZiY19jaGRfNzAwMTJfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGNoZF9kZWNfbW9kdWxlX2NsZWFudXApOworCitNT0RVTEVfQVVUSE9SKCJOYXJlbiBTYW5rYXIgPG5zYW5rYXJAYnJvYWRjb20uY29tPiIpOworTU9EVUxFX0FVVEhPUigiUHJhc2FkIEJvbGlzZXR0eSA8cHJhc2FkYkBicm9hZGNvbS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oQ1JZU1RBTF9IRF9OQU1FKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygiYmNtNzAwMTIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2xueC5oIGIvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfbG54LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMzOGFlOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2xueC5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5LCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KKyAqCisgKiAgTmFtZTogY3J5c3RhbGhkX2xueCAuIGMKKyAqCisgKiAgRGVzY3JpcHRpb246CisgKgkJQkNNNzAwMTIgTGludXggZHJpdmVyCisgKgorICogIEhJU1RPUlk6CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBjcnlzdGFsaGQgZGV2aWNlIGRyaXZlci4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGRyaXZlci4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9DUllTVEFMSERfTE5YX0hfCisjZGVmaW5lIF9DUllTVEFMSERfTE5YX0hfCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjaW5jbHVkZSAiY3J5c3RhbGhkX2NtZHMuaCIKKworI2RlZmluZSBDUllTVEFMX0hEX05BTUUJCSJCcm9hZGNvbSBDcnlzdGFsIEhEIERlY29kZXIgKEJDTTcwMDEyKSBEcml2ZXIiCisKKworLyogT1Mgc3BlY2lmaWMgUENJIGluZm9ybWF0aW9uIHN0cnVjdHVyZSBhbmQgYWRhcHRlciBpbmZvcm1hdGlvbi4gKi8KK3N0cnVjdCBjcnlzdGFsaGRfYWRwIHsKKwkvKiBIYXJkd2FyZSBib3JhZC9QQ0kgc3BlY2lmaWNzICovCisJY2hhcgkJCW5hbWVbMzJdOworCXN0cnVjdCBwY2lfZGV2CQkqcGRldjsKKworCXVuc2lnbmVkIGxvbmcJCXBjaV9tZW1fc3RhcnQ7CisJdWludDMyX3QJCXBjaV9tZW1fbGVuOworCXZvaWQJCQkqYWRkcjsKKworCXVuc2lnbmVkIGxvbmcJCXBjaV9pMm9fc3RhcnQ7CisJdWludDMyX3QJCXBjaV9pMm9fbGVuOworCXZvaWQJCQkqaTJvX2FkZHI7CisKKwl1bnNpZ25lZCBpbnQJCWRydl9kYXRhOworCXVuc2lnbmVkIGludAkJZG1hYml0czsJLyogMzIgfCA2NCAqLworCXVuc2lnbmVkIGludAkJcmVnaXN0ZXJlZDsKKwl1bnNpZ25lZCBpbnQJCXByZXNlbnQ7CisJdW5zaWduZWQgaW50CQltc2k7CisKKwlzcGlubG9ja190CQlsb2NrOworCisJLyogQVBJIFJlbGF0ZWQgKi8KKwl1bnNpZ25lZCBpbnQJCWNoZF9kZWNfbWFqb3I7CisJdW5zaWduZWQgaW50CQljZmdfdXNlcnM7CisKKwljcnlzdGFsaGRfaW9jdGxfZGF0YQkqaWRhdGFfZnJlZV9oZWFkOwkvKiBpb2N0bCBkYXRhIHBvb2wgKi8KKwljcnlzdGFsaGRfZWxlbV90CQkqZWxlbV9wb29sX2hlYWQ7CS8qIFF1ZXVlIGVsZW1lbnQgcG9vbCAqLworCisJc3RydWN0IGNyeXN0YWxoZF9jbWQJY21kczsKKworCWNyeXN0YWxoZF9kaW9fcmVxCQkqdWFfbWFwX2ZyZWVfaGVhZDsKKwlzdHJ1Y3QgcGNpX3Bvb2wJCSpmaWxsX2J5dGVfcG9vbDsKK307CisKKworc3RydWN0IGNyeXN0YWxoZF9hZHAgKmNoZF9nZXRfYWRwKHZvaWQpOwordm9pZCBjaGRfc2V0X2xvZ19sZXZlbChzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwLCBjaGFyICphcmcpOworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfbWlzYy5jIGIvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfbWlzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4N2RjYzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9taXNjLmMKQEAgLTAsMCArMSwxMDMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgkgICBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSwgQnJvYWRjb20gQ29ycG9yYXRpb24uCisgKgorICogIE5hbWU6IGNyeXN0YWxoZF9taXNjIC4gYworICoKKyAqICBEZXNjcmlwdGlvbjoKKyAqCQlCQ003MDAxMiBMaW51eCBkcml2ZXIgbWlzYyByb3V0aW5lcy4KKyAqCisgKiAgSElTVE9SWToKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGNyeXN0YWxoZCBkZXZpY2UgZHJpdmVyLgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBkcml2ZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgZHJpdmVyLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJjcnlzdGFsaGRfbWlzYy5oIgorI2luY2x1ZGUgImNyeXN0YWxoZF9sbnguaCIKKwordWludDMyX3QgZ19saW5rbG9nX2xldmVsOworCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGNyeXN0YWxoZF9kcmFtX3JkKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAsIHVpbnQzMl90IG1lbV9vZmYpCit7CisJY3J5c3RhbGhkX3JlZ193cihhZHAsIERDSV9EUkFNX0JBU0VfQUREUiwgKG1lbV9vZmYgPj4gMTkpKTsKKwlyZXR1cm4gYmNfZGVjX3JlZ19yZChhZHAsICgweDAwMzgwMDAwIHwgKG1lbV9vZmYgJiAweDAwMDdGRkZGKSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3J5c3RhbGhkX2RyYW1fd3Ioc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCwgdWludDMyX3QgbWVtX29mZiwgdWludDMyX3QgdmFsKQoreworCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBEQ0lfRFJBTV9CQVNFX0FERFIsIChtZW1fb2ZmID4+IDE5KSk7CisJYmNfZGVjX3JlZ193cihhZHAsICgweDAwMzgwMDAwIHwgKG1lbV9vZmYgJiAweDAwMDdGRkZGKSksIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgQkNfU1RBVFVTIGJjX2Noa19kcmFtX3JhbmdlKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAsIHVpbnQzMl90IHN0YXJ0X29mZiwgdWludDMyX3QgY250KQoreworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworc3RhdGljIGNyeXN0YWxoZF9kaW9fcmVxICpjcnlzdGFsaGRfYWxsb2NfZGlvKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHApCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJY3J5c3RhbGhkX2Rpb19yZXEgKnRlbXAgPSBOVUxMOworCisJaWYgKCFhZHApIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmchIVxuIik7CisJCXJldHVybiB0ZW1wOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZhZHAtPmxvY2ssIGZsYWdzKTsKKwl0ZW1wID0gYWRwLT51YV9tYXBfZnJlZV9oZWFkOworCWlmICh0ZW1wKQorCQlhZHAtPnVhX21hcF9mcmVlX2hlYWQgPSBhZHAtPnVhX21hcF9mcmVlX2hlYWQtPm5leHQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRwLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gdGVtcDsKK30KKworc3RhdGljIHZvaWQgY3J5c3RhbGhkX2ZyZWVfZGlvKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAsIGNyeXN0YWxoZF9kaW9fcmVxICpkaW8pCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKwlpZiAoIWFkcCB8fCAhZGlvKQorCQlyZXR1cm47CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkcC0+bG9jaywgZmxhZ3MpOworCWRpby0+c2lnID0gY3J5c3RhbGhkX2Rpb19pbnY7CisJZGlvLT5wYWdlX2NudCA9IDA7CisJZGlvLT5mYl9zaXplID0gMDsKKwltZW1zZXQoJmRpby0+dWluZm8sIDAsIHNpemVvZihkaW8tPnVpbmZvKSk7CisJZGlvLT5uZXh0ID0gYWRwLT51YV9tYXBfZnJlZV9oZWFkOworCWFkcC0+dWFfbWFwX2ZyZWVfaGVhZCA9IGRpbzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZHAtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGNyeXN0YWxoZF9lbGVtX3QgKmNyeXN0YWxoZF9hbGxvY19lbGVtKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHApCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJY3J5c3RhbGhkX2VsZW1fdCAqdGVtcCA9IE5VTEw7CisKKwlpZiAoIWFkcCkKKwkJcmV0dXJuIHRlbXA7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkcC0+bG9jaywgZmxhZ3MpOworCXRlbXAgPSBhZHAtPmVsZW1fcG9vbF9oZWFkOworCWlmICh0ZW1wKSB7CisJCWFkcC0+ZWxlbV9wb29sX2hlYWQgPSBhZHAtPmVsZW1fcG9vbF9oZWFkLT5mbGluazsKKwkJbWVtc2V0KHRlbXAsIDAsIHNpemVvZigqdGVtcCkpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZHAtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiB0ZW1wOworfQorc3RhdGljIHZvaWQgY3J5c3RhbGhkX2ZyZWVfZWxlbShzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwLCBjcnlzdGFsaGRfZWxlbV90ICplbGVtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCisJaWYgKCFhZHAgfHwgIWVsZW0pCisJCXJldHVybjsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRwLT5sb2NrLCBmbGFncyk7CisJZWxlbS0+ZmxpbmsgPSBhZHAtPmVsZW1fcG9vbF9oZWFkOworCWFkcC0+ZWxlbV9wb29sX2hlYWQgPSBlbGVtOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkcC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3J5c3RhbGhkX3NldF9zZyhzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkgIHVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCBvZmZzZXQpCit7CisJc2dfc2V0X3BhZ2Uoc2csIHBhZ2UsIGxlbiwgb2Zmc2V0KTsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJc2ctPmRtYV9sZW5ndGggPSBsZW47CisjZW5kaWYKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNyeXN0YWxoZF9pbml0X3NnKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBlbnRyaWVzKQoreworCS8qIGh0dHA6Ly9sa21sLm9yZy9sa21sLzIwMDcvMTEvMjcvNjggKi8KKwlzZ19pbml0X3RhYmxlKHNnLCBlbnRyaWVzKTsKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PSBFeHRlcm4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKioKKyAqIGJjX2RlY19yZWdfcmQgLSBSZWFkIDc0MTIncyBkZXZpY2UgcmVnaXN0ZXIuCisgKiBAYWRwOiBBZGFwdGVyIGluc3RhbmNlCisgKiBAcmVnX29mZjogUmVnaXN0ZXIgb2Zmc2V0LgorICoKKyAqIFJldHVybjoKKyAqCTMyYml0IHZhbHVlIHJlYWQKKyAqCisgKiA3NDEyJ3MgZGV2aWNlIHJlZ2lzdGVyIHJlYWQgcm91dGluZS4gVGhpcyBpbnRlcmZhY2UgdXNlCisgKiA3NDEyJ3MgZGV2aWNlIGFjY2VzcyByYW5nZSBtYXBwZWQgZnJvbSBCQVItMiAoNE0pIG9mIFBDSWUKKyAqIGNvbmZpZ3VyYXRpb24gc3BhY2UuCisgKi8KK3VpbnQzMl90IGJjX2RlY19yZWdfcmQoc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCwgdWludDMyX3QgcmVnX29mZikKK3sKKwlpZiAoIWFkcCB8fCAocmVnX29mZiA+IGFkcC0+cGNpX21lbV9sZW4pKSB7CisJCUJDTUxPR19FUlIoImRlY19yZF9yZWdfb2ZmIG91dG9mIHJhbmdlOiAweCUwOHhcbiIsIHJlZ19vZmYpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gcmVhZGwoYWRwLT5hZGRyICsgcmVnX29mZik7Cit9CisKKy8qKgorICogYmNfZGVjX3JlZ193ciAtIFdyaXRlIDc0MTIncyBkZXZpY2UgcmVnaXN0ZXIKKyAqIEBhZHA6IEFkYXB0ZXIgaW5zdGFuY2UKKyAqIEByZWdfb2ZmOiBSZWdpc3RlciBvZmZzZXQuCisgKiBAdmFsOiBEd29yZCB2YWx1ZSB0byBiZSB3cml0dGVuLgorICoKKyAqIFJldHVybjoKKyAqCW5vbmUuCisgKgorICogNzQxMidzIGRldmljZSByZWdpc3RlciB3cml0ZSByb3V0aW5lLiBUaGlzIGludGVyZmFjZSB1c2UKKyAqIDc0MTIncyBkZXZpY2UgYWNjZXNzIHJhbmdlIG1hcHBlZCBmcm9tIEJBUi0yICg0TSkgb2YgUENJZQorICogY29uZmlndXJhdGlvbiBzcGFjZS4KKyAqLwordm9pZCBiY19kZWNfcmVnX3dyKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAsIHVpbnQzMl90IHJlZ19vZmYsIHVpbnQzMl90IHZhbCkKK3sKKwlpZiAoIWFkcCB8fCAocmVnX29mZiA+IGFkcC0+cGNpX21lbV9sZW4pKSB7CisJCUJDTUxPR19FUlIoImRlY193cl9yZWdfb2ZmIG91dG9mIHJhbmdlOiAweCUwOHhcbiIsIHJlZ19vZmYpOworCQlyZXR1cm47CisJfQorCXdyaXRlbCh2YWwsIGFkcC0+YWRkciArIHJlZ19vZmYpOworCXVkZWxheSg4KTsKK30KKworLyoqCisgKiBjcnlzdGFsaGRfcmVnX3JkIC0gUmVhZCBMaW5rJ3MgZGV2aWNlIHJlZ2lzdGVyLgorICogQGFkcDogQWRhcHRlciBpbnN0YW5jZQorICogQHJlZ19vZmY6IFJlZ2lzdGVyIG9mZnNldC4KKyAqCisgKiBSZXR1cm46CisgKgkzMmJpdCB2YWx1ZSByZWFkCisgKgorICogTGluayBkZXZpY2UgcmVnaXN0ZXIgIHJlYWQgcm91dGluZS4gVGhpcyBpbnRlcmZhY2UgdXNlCisgKiBMaW5rJ3MgZGV2aWNlIGFjY2VzcyByYW5nZSBtYXBwZWQgZnJvbSBCQVItMSAoNjRLKSBvZiBQQ0llCisgKiBjb25maWd1cmF0aW9uIHNwYWNlLgorICoKKyAqLwordWludDMyX3QgY3J5c3RhbGhkX3JlZ19yZChzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwLCB1aW50MzJfdCByZWdfb2ZmKQoreworCWlmICghYWRwIHx8IChyZWdfb2ZmID4gYWRwLT5wY2lfaTJvX2xlbikpIHsKKwkJQkNNTE9HX0VSUigibGlua19yZF9yZWdfb2ZmIG91dG9mIHJhbmdlOiAweCUwOHhcbiIsIHJlZ19vZmYpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHJlYWRsKGFkcC0+aTJvX2FkZHIgKyByZWdfb2ZmKTsKK30KKworLyoqCisgKiBjcnlzdGFsaGRfcmVnX3dyIC0gV3JpdGUgTGluaydzIGRldmljZSByZWdpc3RlcgorICogQGFkcDogQWRhcHRlciBpbnN0YW5jZQorICogQHJlZ19vZmY6IFJlZ2lzdGVyIG9mZnNldC4KKyAqIEB2YWw6IER3b3JkIHZhbHVlIHRvIGJlIHdyaXR0ZW4uCisgKgorICogUmV0dXJuOgorICoJbm9uZS4KKyAqCisgKiBMaW5rIGRldmljZSByZWdpc3RlciAgd3JpdGUgcm91dGluZS4gVGhpcyBpbnRlcmZhY2UgdXNlCisgKiBMaW5rJ3MgZGV2aWNlIGFjY2VzcyByYW5nZSBtYXBwZWQgZnJvbSBCQVItMSAoNjRLKSBvZiBQQ0llCisgKiBjb25maWd1cmF0aW9uIHNwYWNlLgorICoKKyAqLwordm9pZCBjcnlzdGFsaGRfcmVnX3dyKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAsIHVpbnQzMl90IHJlZ19vZmYsIHVpbnQzMl90IHZhbCkKK3sKKwlpZiAoIWFkcCB8fCAocmVnX29mZiA+IGFkcC0+cGNpX2kyb19sZW4pKSB7CisJCUJDTUxPR19FUlIoImxpbmtfd3JfcmVnX29mZiBvdXRvZiByYW5nZTogMHglMDh4XG4iLCByZWdfb2ZmKTsKKwkJcmV0dXJuOworCX0KKwl3cml0ZWwodmFsLCBhZHAtPmkyb19hZGRyICsgcmVnX29mZik7Cit9CisKKy8qKgorICogY3J5c3RhbGhkX21lbV9yZCAtIFJlYWQgZGF0YSBmcm9tIDc0MTIncyBEUkFNIGFyZWEuCisgKiBAYWRwOiBBZGFwdGVyIGluc3RhbmNlCisgKiBAc3RhcnRfb2ZmOiBTdGFydCBvZmZzZXQuCisgKiBAZHdfY250OiBDb3VudCBpbiBkd29yZHMuCisgKiBAcmRfYnVmZjogQnVmZmVyIHRvIGNvcHkgdGhlIGRhdGEgZnJvbSBkcmFtLgorICoKKyAqIFJldHVybjoKKyAqCVN0YXR1cy4KKyAqCisgKiA3NDEyJ3MgRHJhbSByZWFkIHJvdXRpbmUuCisgKi8KK0JDX1NUQVRVUyBjcnlzdGFsaGRfbWVtX3JkKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAsIHVpbnQzMl90IHN0YXJ0X29mZiwKKwkJCSB1aW50MzJfdCBkd19jbnQsIHVpbnQzMl90ICpyZF9idWZmKQoreworCXVpbnQzMl90IGl4ID0gMDsKKworCWlmICghYWRwIHx8ICFyZF9idWZmIHx8CisJICAgIChiY19jaGtfZHJhbV9yYW5nZShhZHAsIHN0YXJ0X29mZiwgZHdfY250KSAhPSBCQ19TVFNfU1VDQ0VTUykpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBhcmcgXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKwlmb3IgKGl4ID0gMDsgaXggPCBkd19jbnQ7IGl4KyspCisJCXJkX2J1ZmZbaXhdID0gY3J5c3RhbGhkX2RyYW1fcmQoYWRwLCAoc3RhcnRfb2ZmICsgKGl4ICogNCkpKTsKKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworLyoqCisgKiBjcnlzdGFsaGRfbWVtX3dyIC0gV3JpdGUgZGF0YSB0byA3NDEyJ3MgRFJBTSBhcmVhLgorICogQGFkcDogQWRhcHRlciBpbnN0YW5jZQorICogQHN0YXJ0X29mZjogU3RhcnQgb2Zmc2V0LgorICogQGR3X2NudDogQ291bnQgaW4gZHdvcmRzLgorICogQHdyX2J1ZmY6IERhdGEgQnVmZmVyIHRvIGJlIHdyaXR0ZW4uCisgKgorICogUmV0dXJuOgorICoJU3RhdHVzLgorICoKKyAqIDc0MTIncyBEcmFtIHdyaXRlIHJvdXRpbmUuCisgKi8KK0JDX1NUQVRVUyBjcnlzdGFsaGRfbWVtX3dyKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAsIHVpbnQzMl90IHN0YXJ0X29mZiwKKwkJCSB1aW50MzJfdCBkd19jbnQsIHVpbnQzMl90ICp3cl9idWZmKQoreworCXVpbnQzMl90IGl4ID0gMDsKKworCWlmICghYWRwIHx8ICF3cl9idWZmIHx8CisJICAgIChiY19jaGtfZHJhbV9yYW5nZShhZHAsIHN0YXJ0X29mZiwgZHdfY250KSAhPSBCQ19TVFNfU1VDQ0VTUykpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBhcmcgXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCWZvciAoaXggPSAwOyBpeCA8IGR3X2NudDsgaXgrKykKKwkJY3J5c3RhbGhkX2RyYW1fd3IoYWRwLCAoc3RhcnRfb2ZmICsgKGl4ICogNCkpLCB3cl9idWZmW2l4XSk7CisKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7Cit9CisvKioKKyAqIGNyeXN0YWxoZF9wY2lfY2ZnX3JkIC0gUENJZSBjb25maWcgcmVhZAorICogQGFkcDogQWRhcHRlciBpbnN0YW5jZQorICogQG9mZjogUENJIGNvbmZpZyBzcGFjZSBvZmZzZXQuCisgKiBAbGVuOiBTaXplIC0tIEJ5dGUsIFdvcmQgJiBkd29yZC4KKyAqIEB2YWw6IFZhbHVlIHJlYWQKKyAqCisgKiBSZXR1cm46CisgKglTdGF0dXMuCisgKgorICogR2V0IHZhbHVlIGZyb20gTGluaydzIFBDSWUgY29uZmlnIHNwYWNlLgorICovCitCQ19TVEFUVVMgY3J5c3RhbGhkX3BjaV9jZmdfcmQoc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCwgdWludDMyX3Qgb2ZmLAorCQkJICAgICB1aW50MzJfdCBsZW4sIHVpbnQzMl90ICp2YWwpCit7CisJQkNfU1RBVFVTIHN0cyA9IEJDX1NUU19TVUNDRVNTOworCWludCByYyA9IDA7CisKKwlpZiAoIWFkcCB8fCAhdmFsKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgYXJnIFxuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwlzd2l0Y2ggKGxlbikgeworCWNhc2UgMToKKwkJcmMgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShhZHAtPnBkZXYsIG9mZiwgKHU4ICopdmFsKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyYyA9IHBjaV9yZWFkX2NvbmZpZ193b3JkKGFkcC0+cGRldiwgb2ZmLCAodTE2ICopdmFsKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlyYyA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZChhZHAtPnBkZXYsIG9mZiwgKHUzMiAqKXZhbCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJjID0gLUVJTlZBTDsKKwkJc3RzID0gQkNfU1RTX0lOVl9BUkc7CisJCUJDTUxPR19FUlIoIkludmFsaWQgbGVuOiVkXG4iLCBsZW4pOworCX07CisKKwlpZiAocmMgJiYgKHN0cyA9PSBCQ19TVFNfU1VDQ0VTUykpCisJCXN0cyA9IEJDX1NUU19FUlJPUjsKKworCXJldHVybiBzdHM7Cit9CisKKy8qKgorICogY3J5c3RhbGhkX3BjaV9jZmdfd3IgLSBQQ0llIGNvbmZpZyB3cml0ZQorICogQGFkcDogQWRhcHRlciBpbnN0YW5jZQorICogQG9mZjogUENJIGNvbmZpZyBzcGFjZSBvZmZzZXQuCisgKiBAbGVuOiBTaXplIC0tIEJ5dGUsIFdvcmQgJiBkd29yZC4KKyAqIEB2YWw6IFZhbHVlIHRvIGJlIHdyaXR0ZW4KKyAqCisgKiBSZXR1cm46CisgKglTdGF0dXMuCisgKgorICogU2V0IHZhbHVlIHRvIExpbmsncyBQQ0llIGNvbmZpZyBzcGFjZS4KKyAqLworQkNfU1RBVFVTIGNyeXN0YWxoZF9wY2lfY2ZnX3dyKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAsIHVpbnQzMl90IG9mZiwKKwkJCSAgICAgdWludDMyX3QgbGVuLCB1aW50MzJfdCB2YWwpCit7CisJQkNfU1RBVFVTIHN0cyA9IEJDX1NUU19TVUNDRVNTOworCWludCByYyA9IDA7CisKKwlpZiAoIWFkcCB8fCAhdmFsKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgYXJnIFxuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwlzd2l0Y2ggKGxlbikgeworCWNhc2UgMToKKwkJcmMgPSBwY2lfd3JpdGVfY29uZmlnX2J5dGUoYWRwLT5wZGV2LCBvZmYsICh1OCl2YWwpOworCQlicmVhazsKKwljYXNlIDI6CisJCXJjID0gcGNpX3dyaXRlX2NvbmZpZ193b3JkKGFkcC0+cGRldiwgb2ZmLCAodTE2KXZhbCk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJcmMgPSBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGFkcC0+cGRldiwgb2ZmLCB2YWwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyYyA9IC1FSU5WQUw7CisJCXN0cyA9IEJDX1NUU19JTlZfQVJHOworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIGxlbjolZFxuIiwgbGVuKTsKKwl9OworCisJaWYgKHJjICYmIChzdHMgPT0gQkNfU1RTX1NVQ0NFU1MpKQorCQlzdHMgPSBCQ19TVFNfRVJST1I7CisKKwlyZXR1cm4gc3RzOworfQorCisvKioKKyAqIGJjX2tlcm5fZG1hX2FsbG9jIC0gQWxsb2NhdGUgbWVtb3J5IGZvciBEbWEgcmluZ3MKKyAqIEBhZHA6IEFkYXB0ZXIgaW5zdGFuY2UKKyAqIEBzejogU2l6ZSBvZiB0aGUgbWVtb3J5IHRvIGFsbG9jYXRlLgorICogQHBoeV9hZGRyOiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgYWxsb2NhdGVkLgorICoJICAgVHlwZWRlZiB0byBzeXN0ZW0ncyBkbWFfYWRkcl90ICh1NjQpCisgKgorICogUmV0dXJuOgorICogIFBvaW50ZXIgdG8gYWxsb2NhdGVkIG1lbW9yeS4uCisgKgorICogV3JhcHBlciB0byBMaW51eCBrZXJuZWwgaW50ZXJmYWNlLgorICoKKyAqLwordm9pZCAqYmNfa2Vybl9kbWFfYWxsb2Moc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCwgdWludDMyX3Qgc3osCisJCQlkbWFfYWRkcl90ICpwaHlfYWRkcikKK3sKKwl2b2lkICp0ZW1wID0gTlVMTDsKKworCWlmICghYWRwIHx8ICFzeiB8fCAhcGh5X2FkZHIpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZGUgQXJnLi5cbiIpOworCQlyZXR1cm4gdGVtcDsKKwl9CisKKwl0ZW1wID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRwLT5wZGV2LCBzeiwgcGh5X2FkZHIpOworCWlmICh0ZW1wKQorCQltZW1zZXQodGVtcCwgMCwgc3opOworCisJcmV0dXJuIHRlbXA7Cit9CisKKy8qKgorICogYmNfa2Vybl9kbWFfZnJlZSAtIFJlbGVhc2UgRG1hIHJpbmcgbWVtb3J5LgorICogQGFkcDogQWRhcHRlciBpbnN0YW5jZQorICogQHN6OiBTaXplIG9mIHRoZSBtZW1vcnkgdG8gYWxsb2NhdGUuCisgKiBAa2E6IEtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MgcmV0dXJuZWQgZHVyaW5nIF9kaW9fYWxsb2MoKQorICogQHBoeV9hZGRyOiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgYWxsb2NhdGVkLgorICoJICAgVHlwZWRlZiB0byBzeXN0ZW0ncyBkbWFfYWRkcl90ICh1NjQpCisgKgorICogUmV0dXJuOgorICogICAgIG5vbmUuCisgKi8KK3ZvaWQgYmNfa2Vybl9kbWFfZnJlZShzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwLCB1aW50MzJfdCBzeiwgdm9pZCAqa2EsCisJCSAgICAgIGRtYV9hZGRyX3QgcGh5X2FkZHIpCit7CisJaWYgKCFhZHAgfHwgIWthIHx8ICFzeiB8fCAhcGh5X2FkZHIpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZGUgQXJnLi5cbiIpOworCQlyZXR1cm47CisJfQorCisJcGNpX2ZyZWVfY29uc2lzdGVudChhZHAtPnBkZXYsIHN6LCBrYSwgcGh5X2FkZHIpOworfQorCisvKioKKyAqIGNyeXN0YWxoZF9jcmVhdGVfZGlvcSAtIENyZWF0ZSBHZW5lcmljIERJTyBxdWV1ZQorICogQGFkcDogQWRhcHRlciBpbnN0YW5jZQorICogQGRpb3FfaG5kOiBIYW5kbGUgdG8gdGhlIGRpbyBxdWV1ZSBjcmVhdGVkCisgKiBAY2IJOiBPcHRpb25hbCAtIENhbGwgYmFjayBUbyBmcmVlIHRoZSBlbGVtZW50LgorICogQGNiY3R4OiBDb250ZXh0IHRvIHBhc3MgdG8gY2FsbGJhY2suCisgKgorICogUmV0dXJuOgorICogIHN0YXR1cworICoKKyAqIEluaXRpYWxpemUgR2VuZXJpYyBESU8gcXVldWUgdG8gaG9sZCBhbnkgZGF0YS4gQ2FsbGJhY2sKKyAqIHdpbGwgYmUgdXNlZCB0byBmcmVlIGVsZW1lbnRzIHdoaWxlIGRlbGV0aW5nIHRoZSBxdWV1ZS4KKyAqLworQkNfU1RBVFVTIGNyeXN0YWxoZF9jcmVhdGVfZGlvcShzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwLAorCQkJICAgICAgY3J5c3RhbGhkX2Rpb3FfdCAqKmRpb3FfaG5kLAorCQkJICAgICAgY3J5c3RhbGhkX2RhdGFfZnJlZV9jYiBjYiwgdm9pZCAqY2JjdHgpCit7CisJY3J5c3RhbGhkX2Rpb3FfdCAqZGlvcSA9IE5VTEw7CisKKwlpZiAoIWFkcCB8fCAhZGlvcV9obmQpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBhcmchIVxuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwlkaW9xID0ga3phbGxvYyhzaXplb2YoKmRpb3EpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRpb3EpCisJCXJldHVybiBCQ19TVFNfSU5TVUZGX1JFUzsKKworCXNwaW5fbG9ja19pbml0KCZkaW9xLT5sb2NrKTsKKwlkaW9xLT5zaWcgPSBCQ19MSU5LX0RJT1FfU0lHOworCWRpb3EtPmhlYWQgPSAoY3J5c3RhbGhkX2VsZW1fdCAqKSZkaW9xLT5oZWFkOworCWRpb3EtPnRhaWwgPSAoY3J5c3RhbGhkX2VsZW1fdCAqKSZkaW9xLT5oZWFkOworCWNyeXN0YWxoZF9jcmVhdGVfZXZlbnQoJmRpb3EtPmV2ZW50KTsKKwlkaW9xLT5hZHAgPSBhZHA7CisJZGlvcS0+ZGF0YV9yZWxfY2IgPSBjYjsKKwlkaW9xLT5jYl9jb250ZXh0ID0gY2JjdHg7CisJKmRpb3FfaG5kID0gZGlvcTsKKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworLyoqCisgKiBjcnlzdGFsaGRfZGVsZXRlX2Rpb3EgLSBEZWxldGUgR2VuZXJpYyBESU8gcXVldWUKKyAqIEBhZHA6IEFkYXB0ZXIgaW5zdGFuY2UKKyAqIEBkaW9xOiBESU9RIGluc3RhbmNlLi4KKyAqCisgKiBSZXR1cm46CisgKiAgTm9uZS4KKyAqCisgKiBSZWxlYXNlIEdlbmVyaWMgRElPIHF1ZXVlLiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVtb3ZlCisgKiBhbGwgdGhlIGVudHJpZXMgZnJvbSB0aGUgUXVldWUgYW5kIHdpbGwgcmVsZWFzZSBkYXRhCisgKiBieSBjYWxsaW5nIHRoZSBjYWxsIGJhY2sgcHJvdmlkZWQgZHVyaW5nIGNyZWF0aW9uLgorICoKKyAqLwordm9pZCBjcnlzdGFsaGRfZGVsZXRlX2Rpb3Eoc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCwgY3J5c3RhbGhkX2Rpb3FfdCAqZGlvcSkKK3sKKwl2b2lkICp0ZW1wOworCisJaWYgKCFkaW9xIHx8IChkaW9xLT5zaWcgIT0gQkNfTElOS19ESU9RX1NJRykpCisJCXJldHVybjsKKworCWRvIHsKKwkJdGVtcCA9IGNyeXN0YWxoZF9kaW9xX2ZldGNoKGRpb3EpOworCQlpZiAodGVtcCAmJiBkaW9xLT5kYXRhX3JlbF9jYikKKwkJCWRpb3EtPmRhdGFfcmVsX2NiKGRpb3EtPmNiX2NvbnRleHQsIHRlbXApOworCX0gd2hpbGUgKHRlbXApOworCWRpb3EtPnNpZyA9IDA7CisJa2ZyZWUoZGlvcSk7Cit9CisKKy8qKgorICogY3J5c3RhbGhkX2Rpb3FfYWRkIC0gQWRkIG5ldyBESU8gcmVxdWVzdCBlbGVtZW50LgorICogQGlvcTogRElPIHF1ZXVlIGluc3RhbmNlCisgKiBAdDogRElPIHJlcXVlc3QgdG8gYmUgYWRkZWQuCisgKiBAd2FrZTogVHJ1ZSAtIFdha2UgdXAgc3VzcGVuZGVkIHByb2Nlc3MuCisgKiBAdGFnOiBTcGVjaWFsIHRhZyB0byBhc3NpZ24gLSBGb3Igc2VhcmNoIGFuZCBnZXQuCisgKgorICogUmV0dXJuOgorICogIFN0YXR1cy4KKyAqCisgKiBJbnNlcnQgbmV3IGVsZW1lbnQgdG8gUSB0YWlsLgorICovCitCQ19TVEFUVVMgY3J5c3RhbGhkX2Rpb3FfYWRkKGNyeXN0YWxoZF9kaW9xX3QgKmlvcSwgdm9pZCAqZGF0YSwKKwkJCSAgIGJvb2wgd2FrZSwgdWludDMyX3QgdGFnKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCWNyeXN0YWxoZF9lbGVtX3QgKnRtcDsKKworCWlmICghaW9xIHx8IChpb3EtPnNpZyAhPSBCQ19MSU5LX0RJT1FfU0lHKSB8fCAhZGF0YSkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIGFyZyEhXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCXRtcCA9IGNyeXN0YWxoZF9hbGxvY19lbGVtKGlvcS0+YWRwKTsKKwlpZiAoIXRtcCkgeworCQlCQ01MT0dfRVJSKCJObyBmcmVlIGVsZW1lbnRzLlxuIik7CisJCXJldHVybiBCQ19TVFNfSU5TVUZGX1JFUzsKKwl9CisKKwl0bXAtPmRhdGEgPSBkYXRhOworCXRtcC0+dGFnID0gdGFnOworCXNwaW5fbG9ja19pcnFzYXZlKCZpb3EtPmxvY2ssIGZsYWdzKTsKKwl0bXAtPmZsaW5rID0gKGNyeXN0YWxoZF9lbGVtX3QgKikmaW9xLT5oZWFkOworCXRtcC0+YmxpbmsgPSBpb3EtPnRhaWw7CisJdG1wLT5mbGluay0+YmxpbmsgPSB0bXA7CisJdG1wLT5ibGluay0+ZmxpbmsgPSB0bXA7CisJaW9xLT5jb3VudCsrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvcS0+bG9jaywgZmxhZ3MpOworCisJaWYgKHdha2UpCisJCWNyeXN0YWxoZF9zZXRfZXZlbnQoJmlvcS0+ZXZlbnQpOworCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCisvKioKKyAqIGNyeXN0YWxoZF9kaW9xX2ZldGNoIC0gRmV0Y2ggZWxlbWVudCBmcm9tIGhlYWQuCisgKiBAaW9xOiBESU8gcXVldWUgaW5zdGFuY2UKKyAqCisgKiBSZXR1cm46CisgKglkYXRhIGVsZW1lbnQgZnJvbSB0aGUgaGVhZC4uCisgKgorICogUmVtb3ZlIGFuIGVsZW1lbnQgZnJvbSBRdWV1ZS4KKyAqLwordm9pZCAqY3J5c3RhbGhkX2Rpb3FfZmV0Y2goY3J5c3RhbGhkX2Rpb3FfdCAqaW9xKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCWNyeXN0YWxoZF9lbGVtX3QgKnRtcDsKKwljcnlzdGFsaGRfZWxlbV90ICpyZXQgPSBOVUxMOworCXZvaWQgKmRhdGEgPSBOVUxMOworCisJaWYgKCFpb3EgfHwgKGlvcS0+c2lnICE9IEJDX0xJTktfRElPUV9TSUcpKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgYXJnISFcbiIpOworCQlyZXR1cm4gZGF0YTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9xLT5sb2NrLCBmbGFncyk7CisJdG1wID0gaW9xLT5oZWFkOworCWlmICh0bXAgIT0gKGNyeXN0YWxoZF9lbGVtX3QgKikmaW9xLT5oZWFkKSB7CisJCXJldCA9IHRtcDsKKwkJdG1wLT5mbGluay0+YmxpbmsgPSB0bXAtPmJsaW5rOworCQl0bXAtPmJsaW5rLT5mbGluayA9IHRtcC0+Zmxpbms7CisJCWlvcS0+Y291bnQtLTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9xLT5sb2NrLCBmbGFncyk7CisJaWYgKHJldCkgeworCQlkYXRhID0gcmV0LT5kYXRhOworCQljcnlzdGFsaGRfZnJlZV9lbGVtKGlvcS0+YWRwLCByZXQpOworCX0KKworCXJldHVybiBkYXRhOworfQorLyoqCisgKiBjcnlzdGFsaGRfZGlvcV9maW5kX2FuZF9mZXRjaCAtIFNlYXJjaCB0aGUgdGFnIGFuZCBGZXRjaCBlbGVtZW50CisgKiBAaW9xOiBESU8gcXVldWUgaW5zdGFuY2UKKyAqIEB0YWc6IFRhZyB0byBzZWFyY2ggZm9yLgorICoKKyAqIFJldHVybjoKKyAqCWVsZW1lbnQgZnJvbSB0aGUgaGVhZC4uCisgKgorICogU2VhcmNoIFRBRyBhbmQgcmVtb3ZlIHRoZSBlbGVtZW50LgorICovCit2b2lkICpjcnlzdGFsaGRfZGlvcV9maW5kX2FuZF9mZXRjaChjcnlzdGFsaGRfZGlvcV90ICppb3EsIHVpbnQzMl90IHRhZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwljcnlzdGFsaGRfZWxlbV90ICp0bXA7CisJY3J5c3RhbGhkX2VsZW1fdCAqcmV0ID0gTlVMTDsKKwl2b2lkICpkYXRhID0gTlVMTDsKKworCWlmICghaW9xIHx8IChpb3EtPnNpZyAhPSBCQ19MSU5LX0RJT1FfU0lHKSkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIGFyZyEhXG4iKTsKKwkJcmV0dXJuIGRhdGE7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvcS0+bG9jaywgZmxhZ3MpOworCXRtcCA9IGlvcS0+aGVhZDsKKwl3aGlsZSAodG1wICE9IChjcnlzdGFsaGRfZWxlbV90ICopJmlvcS0+aGVhZCkgeworCQlpZiAodG1wLT50YWcgPT0gdGFnKSB7CisJCQlyZXQgPSB0bXA7CisJCQl0bXAtPmZsaW5rLT5ibGluayA9IHRtcC0+Ymxpbms7CisJCQl0bXAtPmJsaW5rLT5mbGluayA9IHRtcC0+Zmxpbms7CisJCQlpb3EtPmNvdW50LS07CisJCQlicmVhazsKKwkJfQorCQl0bXAgPSB0bXAtPmZsaW5rOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb3EtPmxvY2ssIGZsYWdzKTsKKworCWlmIChyZXQpIHsKKwkJZGF0YSA9IHJldC0+ZGF0YTsKKwkJY3J5c3RhbGhkX2ZyZWVfZWxlbShpb3EtPmFkcCwgcmV0KTsKKwl9CisKKwlyZXR1cm4gZGF0YTsKK30KKworLyoqCisgKiBjcnlzdGFsaGRfZGlvcV9mZXRjaF93YWl0IC0gRmV0Y2ggZWxlbWVudCBmcm9tIEhlYWQuCisgKiBAaW9xOiBESU8gcXVldWUgaW5zdGFuY2UKKyAqIEB0b19zZWNzOiBXYWl0IHRpbWVvdXQgaW4gc2Vjb25kcy4uCisgKgorICogUmV0dXJuOgorICoJZWxlbWVudCBmcm9tIHRoZSBoZWFkLi4KKyAqCisgKiBSZXR1cm4gZWxlbWVudCBmcm9tIGhlYWQgaWYgUSBpcyBub3QgZW1wdHkuIFdhaXQgZm9yIG5ldyBlbGVtZW50CisgKiBpZiBRIGlzIGVtcHR5IGZvciBUaW1lb3V0IHNlY29uZHMuCisgKi8KK3ZvaWQgKmNyeXN0YWxoZF9kaW9xX2ZldGNoX3dhaXQoY3J5c3RhbGhkX2Rpb3FfdCAqaW9xLCB1aW50MzJfdCB0b19zZWNzLAorCQkJICAgICAgdWludDMyX3QgKnNpZ19wZW5kKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCWludCByYyA9IDAsIGNvdW50OworCXZvaWQgKnRtcCA9IE5VTEw7CisKKwlpZiAoIWlvcSB8fCAoaW9xLT5zaWcgIT0gQkNfTElOS19ESU9RX1NJRykgfHwgIXRvX3NlY3MgfHwgIXNpZ19wZW5kKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgYXJnISFcbiIpOworCQlyZXR1cm4gdG1wOworCX0KKworCWNvdW50ID0gdG9fc2VjczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9xLT5sb2NrLCBmbGFncyk7CisJd2hpbGUgKChpb3EtPmNvdW50ID09IDApICYmIGNvdW50KSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvcS0+bG9jaywgZmxhZ3MpOworCisJCWNyeXN0YWxoZF93YWl0X29uX2V2ZW50KCZpb3EtPmV2ZW50LCAoaW9xLT5jb3VudCA+IDApLCAxMDAwLCByYywgMCk7CisJCWlmIChyYyA9PSAwKSB7CisJCQlnb3RvIG91dDsKKwkJfSBlbHNlIGlmIChyYyA9PSAtRUlOVFIpIHsKKwkJCUJDTUxPRyhCQ01MT0dfSU5GTywgIkNhbmNlbGxpbmcgZmV0Y2ggd2FpdFxuIik7CisJCQkqc2lnX3BlbmQgPSAxOworCQkJcmV0dXJuIHRtcDsKKwkJfQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9xLT5sb2NrLCBmbGFncyk7CisJCWNvdW50LS07CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvcS0+bG9jaywgZmxhZ3MpOworCitvdXQ6CisJcmV0dXJuIGNyeXN0YWxoZF9kaW9xX2ZldGNoKGlvcSk7Cit9CisKKy8qKgorICogY3J5c3RhbGhkX21hcF9kaW8gLSBNYXAgdXNlciBhZGRyZXNzIGZvciBETUEKKyAqIEBhZHA6CUFkYXB0ZXIgaW5zdGFuY2UKKyAqIEB1YnVmZjoJVXNlciBidWZmZXIgdG8gbWFwLgorICogQHVidWZmX3N6OglVc2VyIGJ1ZmZlciBzaXplLgorICogQHV2X29mZnNldDoJVVYgYnVmZmVyIG9mZnNldC4KKyAqIEBlbl80MjJtb2RlOiBUUlVFOjQyMiBGQUxTRTo0MjAgQ2FwdHVyZSBtb2RlLgorICogQGRpcl90eDoJVFJVRSBmb3IgVHggKFRvIGRldmljZSBmcm9tIGhvc3QpCisgKiBAZGlvX2huZDoJSGFuZGxlIHRvIG1hcHBlZCBESU8gcmVxdWVzdC4KKyAqCisgKiBSZXR1cm46CisgKglTdGF0dXMuCisgKgorICogVGhpcyByb3V0aW5lIG1hcHMgdXNlciBhZGRyZXNzIGFuZCBsb2NrIHBhZ2VzIGZvciBETUEuCisgKgorICovCitCQ19TVEFUVVMgY3J5c3RhbGhkX21hcF9kaW8oc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCwgdm9pZCAqdWJ1ZmYsCisJCQkgIHVpbnQzMl90IHVidWZmX3N6LCB1aW50MzJfdCB1dl9vZmZzZXQsCisJCQkgIGJvb2wgZW5fNDIybW9kZSwgYm9vbCBkaXJfdHgsCisJCQkgIGNyeXN0YWxoZF9kaW9fcmVxICoqZGlvX2huZCkKK3sKKwljcnlzdGFsaGRfZGlvX3JlcQkqZGlvOworCS8qIEZJWE1FOiBqYXJvZDogc2hvdWxkIHNvbWUgb2YgdGhlc2UgdW5zaWduZWQgbG9uZ3MgYmUgdWludDMyX3Qgb3IgdWludHB0cl90PyAqLworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSAwLCBlbmQgPSAwLCB1YWRkciA9IDAsIGNvdW50ID0gMDsKKwl1bnNpZ25lZCBsb25nIHNwc3ogPSAwLCB1dl9zdGFydCA9IDA7CisJaW50IGkgPSAwLCBydyA9IDAsIHJlcyA9IDAsIG5yX3BhZ2VzID0gMCwgc2tpcF9mYl9zZyA9IDA7CisKKwlpZiAoIWFkcCB8fCAhdWJ1ZmYgfHwgIXVidWZmX3N6IHx8ICFkaW9faG5kKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgYXJnIFxuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisJLyogQ29tcHV0ZSBwYWdlcyAqLworCXVhZGRyID0gKHVuc2lnbmVkIGxvbmcpdWJ1ZmY7CisJY291bnQgPSAodW5zaWduZWQgbG9uZyl1YnVmZl9zejsKKwllbmQgPSAodWFkZHIgKyBjb3VudCArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7CisJc3RhcnQgPSB1YWRkciA+PiBQQUdFX1NISUZUOworCW5yX3BhZ2VzID0gZW5kIC0gc3RhcnQ7CisKKwlpZiAoIWNvdW50IHx8ICgodWFkZHIgKyBjb3VudCkgPCB1YWRkcikpIHsKKwkJQkNNTE9HX0VSUigiVXNlciBhZGRyIG92ZXJmbG93ISFcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJZGlvID0gY3J5c3RhbGhkX2FsbG9jX2RpbyhhZHApOworCWlmICghZGlvKSB7CisJCUJDTUxPR19FUlIoImRpbyBwb29sIGVtcHR5Li5cbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOU1VGRl9SRVM7CisJfQorCisJaWYgKGRpcl90eCkgeworCQlydyA9IFdSSVRFOworCQlkaW8tPmRpcmVjdGlvbiA9IERNQV9UT19ERVZJQ0U7CisJfSBlbHNlIHsKKwkJcncgPSBSRUFEOworCQlkaW8tPmRpcmVjdGlvbiA9IERNQV9GUk9NX0RFVklDRTsKKwl9CisKKwlpZiAobnJfcGFnZXMgPiBkaW8tPm1heF9wYWdlcykgeworCQlCQ01MT0dfRVJSKCJtYXhfcGFnZXMoJWQpIGV4Y2VlZGVkKCVkKSEhXG4iLAorCQkJICAgZGlvLT5tYXhfcGFnZXMsIG5yX3BhZ2VzKTsKKwkJY3J5c3RhbGhkX3VubWFwX2RpbyhhZHAsIGRpbyk7CisJCXJldHVybiBCQ19TVFNfSU5TVUZGX1JFUzsKKwl9CisKKwlpZiAodXZfb2Zmc2V0KSB7CisJCXV2X3N0YXJ0ID0gKHVhZGRyICsgKHVuc2lnbmVkIGxvbmcpdXZfb2Zmc2V0KSAgPj4gUEFHRV9TSElGVDsKKwkJZGlvLT51aW5mby51dl9zZ19peCA9IHV2X3N0YXJ0IC0gc3RhcnQ7CisJCWRpby0+dWluZm8udXZfc2dfb2ZmID0gKCh1YWRkciArICh1bnNpZ25lZCBsb25nKXV2X29mZnNldCkgJiB+UEFHRV9NQVNLKTsKKwl9CisKKwlkaW8tPmZiX3NpemUgPSB1YnVmZl9zeiAmIDB4MDM7CisJaWYgKGRpby0+ZmJfc2l6ZSkgeworCQlyZXMgPSBjb3B5X2Zyb21fdXNlcihkaW8tPmZiX3ZhLAorCQkJCSAgICAgKHZvaWQgKikodWFkZHIgKyBjb3VudCAtIGRpby0+ZmJfc2l6ZSksCisJCQkJICAgICBkaW8tPmZiX3NpemUpOworCQlpZiAocmVzKSB7CisJCQlCQ01MT0dfRVJSKCJmYWlsZWQgJWQgdG8gY29weSAldSBmaWxsIGJ5dGVzIGZyb20gJXBcbiIsCisJCQkJICAgcmVzLCBkaW8tPmZiX3NpemUsCisJCQkJICAgKHZvaWQgKikodWFkZHIgKyBjb3VudC1kaW8tPmZiX3NpemUpKTsKKwkJCWNyeXN0YWxoZF91bm1hcF9kaW8oYWRwLCBkaW8pOworCQkJcmV0dXJuIEJDX1NUU19JTlNVRkZfUkVTOworCQl9CisJfQorCisJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCXJlcyA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLCB1YWRkciwgbnJfcGFnZXMsIHJ3ID09IFJFQUQsCisJCQkgICAgIDAsIGRpby0+cGFnZXMsIE5VTEwpOworCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisKKwkvKiBTYXZlIGZvciByZWxlYXNlLi4qLworCWRpby0+c2lnID0gY3J5c3RhbGhkX2Rpb19sb2NrZWQ7CisJaWYgKHJlcyA8IG5yX3BhZ2VzKSB7CisJCUJDTUxPR19FUlIoImdldCBwYWdlcyBmYWlsZWQ6ICVkLSVkXG4iLCBucl9wYWdlcywgcmVzKTsKKwkJZGlvLT5wYWdlX2NudCA9IHJlczsKKwkJY3J5c3RhbGhkX3VubWFwX2RpbyhhZHAsIGRpbyk7CisJCXJldHVybiBCQ19TVFNfRVJST1I7CisJfQorCisJZGlvLT5wYWdlX2NudCA9IG5yX3BhZ2VzOworCS8qIEdldCBzY2F0dGVyL2dhdGhlciAqLworCWNyeXN0YWxoZF9pbml0X3NnKGRpby0+c2csIGRpby0+cGFnZV9jbnQpOworCWNyeXN0YWxoZF9zZXRfc2coJmRpby0+c2dbMF0sIGRpby0+cGFnZXNbMF0sIDAsIHVhZGRyICYgflBBR0VfTUFTSyk7CisJaWYgKG5yX3BhZ2VzID4gMSkgeworCQlkaW8tPnNnWzBdLmxlbmd0aCA9IFBBR0VfU0laRSAtIGRpby0+c2dbMF0ub2Zmc2V0OworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCQlkaW8tPnNnWzBdLmRtYV9sZW5ndGggPSBkaW8tPnNnWzBdLmxlbmd0aDsKKyNlbmRpZgorCQljb3VudCAtPSBkaW8tPnNnWzBdLmxlbmd0aDsKKwkJZm9yIChpID0gMTsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKKwkJCWlmIChjb3VudCA8IDQpIHsKKwkJCQlzcHN6ID0gY291bnQ7CisJCQkJc2tpcF9mYl9zZyA9IDE7CisJCQl9IGVsc2UgeworCQkJCXNwc3ogPSAoY291bnQgPCBQQUdFX1NJWkUpID8KKwkJCQkJKGNvdW50ICYgfjB4MDMpIDogUEFHRV9TSVpFOworCQkJfQorCQkJY3J5c3RhbGhkX3NldF9zZygmZGlvLT5zZ1tpXSwgZGlvLT5wYWdlc1tpXSwgc3BzeiwgMCk7CisJCQljb3VudCAtPSBzcHN6OworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGNvdW50IDwgNCkgeworCQkJZGlvLT5zZ1swXS5sZW5ndGggPSBjb3VudDsKKwkJCXNraXBfZmJfc2cgPSAxOworCQl9IGVsc2UgeworCQkJZGlvLT5zZ1swXS5sZW5ndGggPSBjb3VudCAtIGRpby0+ZmJfc2l6ZTsKKwkJfQorI2lmZGVmIENPTkZJR19YODZfNjQKKwkJZGlvLT5zZ1swXS5kbWFfbGVuZ3RoID0gZGlvLT5zZ1swXS5sZW5ndGg7CisjZW5kaWYKKwl9CisJZGlvLT5zZ19jbnQgPSBwY2lfbWFwX3NnKGFkcC0+cGRldiwgZGlvLT5zZywKKwkJCQkgZGlvLT5wYWdlX2NudCwgZGlvLT5kaXJlY3Rpb24pOworCWlmIChkaW8tPnNnX2NudCA8PSAwKSB7CisJCUJDTUxPR19FUlIoInNnIG1hcCAlZC0lZCBcbiIsIGRpby0+c2dfY250LCBkaW8tPnBhZ2VfY250KTsKKwkJY3J5c3RhbGhkX3VubWFwX2RpbyhhZHAsIGRpbyk7CisJCXJldHVybiBCQ19TVFNfRVJST1I7CisJfQorCWlmIChkaW8tPnNnX2NudCAmJiBza2lwX2ZiX3NnKQorCQlkaW8tPnNnX2NudCAtPSAxOworCWRpby0+c2lnID0gY3J5c3RhbGhkX2Rpb19zZ19tYXBwZWQ7CisJLyogRmlsbCBpbiBVc2VyIGluZm8uLiAqLworCWRpby0+dWluZm8ueGZyX2xlbiAgID0gdWJ1ZmZfc3o7CisJZGlvLT51aW5mby54ZnJfYnVmZiAgPSB1YnVmZjsKKwlkaW8tPnVpbmZvLnV2X29mZnNldCA9IHV2X29mZnNldDsKKwlkaW8tPnVpbmZvLmI0MjJtb2RlICA9IGVuXzQyMm1vZGU7CisJZGlvLT51aW5mby5kaXJfdHggICAgPSBkaXJfdHg7CisKKwkqZGlvX2huZCA9IGRpbzsKKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworLyoqCisgKiBjcnlzdGFsaGRfdW5tYXBfc2dsIC0gUmVsZWFzZSBtYXBwZWQgcmVzb3VyY2VzCisgKiBAYWRwOiBBZGFwdGVyIGluc3RhbmNlCisgKiBAZGlvOiBESU8gcmVxdWVzdCBpbnN0YW5jZQorICoKKyAqIFJldHVybjoKKyAqCVN0YXR1cy4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdG8gdW5tYXAgdGhlIHVzZXIgYnVmZmVyIHBhZ2VzLgorICovCitCQ19TVEFUVVMgY3J5c3RhbGhkX3VubWFwX2RpbyhzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwLCBjcnlzdGFsaGRfZGlvX3JlcSAqZGlvKQoreworCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKKwlpbnQgaiA9IDA7CisKKwlpZiAoIWFkcCB8fCAhZGlvKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgYXJnIFxuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwlpZiAoKGRpby0+cGFnZV9jbnQgPiAwKSAmJiAoZGlvLT5zaWcgIT0gY3J5c3RhbGhkX2Rpb19pbnYpKSB7CisJCWZvciAoaiA9IDA7IGogPCBkaW8tPnBhZ2VfY250OyBqKyspIHsKKwkJCXBhZ2UgPSBkaW8tPnBhZ2VzW2pdOworCQkJaWYgKHBhZ2UpIHsKKwkJCQlpZiAoIVBhZ2VSZXNlcnZlZChwYWdlKSAmJgorCQkJCSAgICAoZGlvLT5kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKSkKKwkJCQkJU2V0UGFnZURpcnR5KHBhZ2UpOworCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoZGlvLT5zaWcgPT0gY3J5c3RhbGhkX2Rpb19zZ19tYXBwZWQpCisJCXBjaV91bm1hcF9zZyhhZHAtPnBkZXYsIGRpby0+c2csIGRpby0+cGFnZV9jbnQsIGRpby0+ZGlyZWN0aW9uKTsKKworCWNyeXN0YWxoZF9mcmVlX2RpbyhhZHAsIGRpbyk7CisKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7Cit9CisKKy8qKgorICogY3J5c3RhbGhkX2NyZWF0ZV9kaW9fcG9vbCAtIEFsbG9jYXRlIG1lbSBwb29sIGZvciBESU8gbWFuYWdlbWVudC4KKyAqIEBhZHA6IEFkYXB0ZXIgaW5zdGFuY2UKKyAqIEBtYXhfcGFnZXM6IE1heCBwYWdlcyBmb3Igc2l6ZSBjYWxjdWxhdGlvbi4KKyAqCisgKiBSZXR1cm46CisgKglzeXN0ZW0gZXJyb3IuCisgKgorICogVGhpcyByb3V0aW5lIGNyZWF0ZXMgYSBtZW1vcnkgcG9vbCB0byBob2xkIGRpbyBjb250ZXh0IGZvcgorICogZm9yIEhXIERpcmVjdCBJTyBvcGVyYXRpb24uCisgKi8KK2ludCBjcnlzdGFsaGRfY3JlYXRlX2Rpb19wb29sKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAsIHVpbnQzMl90IG1heF9wYWdlcykKK3sKKwl1aW50MzJfdCBhc3ogPSAwLCBpID0gMDsKKwl1aW50OF90CSp0ZW1wOworCWNyeXN0YWxoZF9kaW9fcmVxICpkaW87CisKKwlpZiAoIWFkcCB8fCAhbWF4X3BhZ2VzKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJnISFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBHZXQgZG1hIG1lbW9yeSBmb3IgZmlsbCBieXRlIGhhbmRsaW5nLi4qLworCWFkcC0+ZmlsbF9ieXRlX3Bvb2wgPSBwY2lfcG9vbF9jcmVhdGUoImNyeXN0YWxoZF9mYnl0ZSIsCisJCQkJCSAgICAgIGFkcC0+cGRldiwgOCwgOCwgMCk7CisJaWYgKCFhZHAtPmZpbGxfYnl0ZV9wb29sKSB7CisJCUJDTUxPR19FUlIoImZhaWxlZCB0byBjcmVhdGUgZmlsbCBieXRlIHBvb2xcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBHZXQgdGhlIG1heCBzaXplIGZyb20gdXNlciBiYXNlZCBvbiA0MjAvNDIyIG1vZGVzICovCisJYXN6ID0gIChzaXplb2YoKmRpby0+cGFnZXMpICogbWF4X3BhZ2VzKSArCisJICAgICAgIChzaXplb2YoKmRpby0+c2cpICogbWF4X3BhZ2VzKSArIHNpemVvZigqZGlvKTsKKworCUJDTUxPRyhCQ01MT0dfREJHLCAiSW5pdGlhbGl6aW5nIERpbyBwb29sICVkICVkICV4ICVwXG4iLAorCSAgICAgICBCQ19MSU5LX1NHX1BPT0xfU1osIG1heF9wYWdlcywgYXN6LCBhZHAtPmZpbGxfYnl0ZV9wb29sKTsKKworCWZvciAoaSA9IDA7IGkgPCBCQ19MSU5LX1NHX1BPT0xfU1o7IGkrKykgeworCQl0ZW1wID0gKHVpbnQ4X3QgKilremFsbG9jKGFzeiwgR0ZQX0tFUk5FTCk7CisJCWlmICgodGVtcCkgPT0gTlVMTCkgeworCQkJQkNNTE9HX0VSUigiRmFpbGVkIHRvIGFsbG9jICVkIG1lbVxuIiwgYXN6KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJZGlvID0gKGNyeXN0YWxoZF9kaW9fcmVxICopdGVtcDsKKwkJdGVtcCArPSBzaXplb2YoKmRpbyk7CisJCWRpby0+cGFnZXMgPSAoc3RydWN0IHBhZ2UgKiopdGVtcDsKKwkJdGVtcCArPSAoc2l6ZW9mKCpkaW8tPnBhZ2VzKSAqIG1heF9wYWdlcyk7CisJCWRpby0+c2cgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopdGVtcDsKKwkJZGlvLT5tYXhfcGFnZXMgPSBtYXhfcGFnZXM7CisJCWRpby0+ZmJfdmEgPSBwY2lfcG9vbF9hbGxvYyhhZHAtPmZpbGxfYnl0ZV9wb29sLCBHRlBfS0VSTkVMLAorCQkJCQkgICAgJmRpby0+ZmJfcGEpOworCQlpZiAoIWRpby0+ZmJfdmEpIHsKKwkJCUJDTUxPR19FUlIoImZpbGwgYnl0ZSBhbGxvYyBmYWlsZWQuXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJY3J5c3RhbGhkX2ZyZWVfZGlvKGFkcCwgZGlvKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBjcnlzdGFsaGRfZGVzdHJveV9kaW9fcG9vbCAtIFJlbGVhc2UgRElPIG1lbSBwb29sLgorICogQGFkcDogQWRhcHRlciBpbnN0YW5jZQorICoKKyAqIFJldHVybjoKKyAqCW5vbmUuCisgKgorICogVGhpcyByb3V0aW5lIHJlbGVhc2VzIGRpbyBtZW1vcnkgcG9vbCBkdXJpbmcgY2xvc2UuCisgKi8KK3ZvaWQgY3J5c3RhbGhkX2Rlc3Ryb3lfZGlvX3Bvb2woc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCkKK3sKKwljcnlzdGFsaGRfZGlvX3JlcSAqZGlvOworCWludCBjb3VudCA9IDA7CisKKwlpZiAoIWFkcCkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIEFyZyEhXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWRvIHsKKwkJZGlvID0gY3J5c3RhbGhkX2FsbG9jX2RpbyhhZHApOworCQlpZiAoZGlvKSB7CisJCQlpZiAoZGlvLT5mYl92YSkKKwkJCQlwY2lfcG9vbF9mcmVlKGFkcC0+ZmlsbF9ieXRlX3Bvb2wsCisJCQkJCSAgICAgIGRpby0+ZmJfdmEsIGRpby0+ZmJfcGEpOworCQkJY291bnQrKzsKKwkJCWtmcmVlKGRpbyk7CisJCX0KKwl9IHdoaWxlIChkaW8pOworCisJaWYgKGFkcC0+ZmlsbF9ieXRlX3Bvb2wpIHsKKwkJcGNpX3Bvb2xfZGVzdHJveShhZHAtPmZpbGxfYnl0ZV9wb29sKTsKKwkJYWRwLT5maWxsX2J5dGVfcG9vbCA9IE5VTEw7CisJfQorCisJQkNNTE9HKEJDTUxPR19EQkcsICJSZWxlYXNlZCBkaW8gcG9vbCAlZCBcbiIsIGNvdW50KTsKK30KKworLyoqCisgKiBjcnlzdGFsaGRfY3JlYXRlX2VsZW1fcG9vbCAtIExpc3QgZWxlbWVudCBwb29sIGNyZWF0aW9uLgorICogQGFkcDogQWRhcHRlciBpbnN0YW5jZQorICogQHBvb2xfc2l6ZTogTnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBwb29sLgorICoKKyAqIFJldHVybjoKKyAqCTAgLSBzdWNjZXNzLCA8MCBlcnJvcgorICoKKyAqIENyZWF0ZSBnZW5lcmFsIHB1cnBvc2UgbGlzdCBlbGVtZW50IHBvb2wgdG8gaG9sZCBwZW5kaW5nLAorICogYW5kIGFjdGl2ZSByZXF1ZXN0cy4KKyAqLworaW50IF9fZGV2aW5pdCBjcnlzdGFsaGRfY3JlYXRlX2VsZW1fcG9vbChzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwLAorCQl1aW50MzJfdCBwb29sX3NpemUpCit7CisJdWludDMyX3QgaTsKKwljcnlzdGFsaGRfZWxlbV90ICp0ZW1wOworCisJaWYgKCFhZHAgfHwgIXBvb2xfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgcG9vbF9zaXplOyBpKyspIHsKKwkJdGVtcCA9IGt6YWxsb2Moc2l6ZW9mKCp0ZW1wKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdGVtcCkgeworCQkJQkNNTE9HX0VSUigia2FsbG9jIGZhaWxlZCBcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJY3J5c3RhbGhkX2ZyZWVfZWxlbShhZHAsIHRlbXApOworCX0KKwlCQ01MT0coQkNNTE9HX0RCRywgImFsbG9jYXRlZCAlZCBlbGVtXG4iLCBwb29sX3NpemUpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGNyeXN0YWxoZF9kZWxldGVfZWxlbV9wb29sIC0gTGlzdCBlbGVtZW50IHBvb2wgZGVsZXRpb24uCisgKiBAYWRwOiBBZGFwdGVyIGluc3RhbmNlCisgKgorICogUmV0dXJuOgorICoJbm9uZQorICoKKyAqIERlbGV0ZSBnZW5lcmFsIHB1cnBvc2UgbGlzdCBlbGVtZW50IHBvb2wuCisgKi8KK3ZvaWQgY3J5c3RhbGhkX2RlbGV0ZV9lbGVtX3Bvb2woc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCkKK3sKKwljcnlzdGFsaGRfZWxlbV90ICp0ZW1wOworCWludCBkYmdfY250ID0gMDsKKworCWlmICghYWRwKQorCQlyZXR1cm47CisKKwlkbyB7CisJCXRlbXAgPSBjcnlzdGFsaGRfYWxsb2NfZWxlbShhZHApOworCQlpZiAodGVtcCkgeworCQkJa2ZyZWUodGVtcCk7CisJCQlkYmdfY250Kys7CisJCX0KKwl9IHdoaWxlICh0ZW1wKTsKKworCUJDTUxPRyhCQ01MT0dfREJHLCAicmVsZWFzZWQgJWQgZWxlbVxuIiwgZGJnX2NudCk7Cit9CisKKy8qPT09PT09PT09PT09PT09PSBEZWJ1ZyBzdXBwb3J0IHJvdXRpbmVzLi4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwordm9pZCBjcnlzdGFsaGRfc2hvd19idWZmZXIodWludDMyX3Qgb2ZmLCB1aW50OF90ICpidWZmLCB1aW50MzJfdCBkd2NvdW50KQoreworCXVpbnQzMl90IGksIGsgPSAxOworCisJZm9yIChpID0gMDsgaSA8IGR3Y291bnQ7IGkrKykgeworCQlpZiAoayA9PSAxKQorCQkJQkNNTE9HKEJDTUxPR19EQVRBLCAiMHglMDhYIDogIiwgb2ZmKTsKKworCQlCQ01MT0coQkNNTE9HX0RBVEEsICIgMHglMDhYICIsICooKHVpbnQzMl90ICopYnVmZikpOworCisJCWJ1ZmYgKz0gc2l6ZW9mKHVpbnQzMl90KTsKKwkJb2ZmICArPSBzaXplb2YodWludDMyX3QpOworCQlrKys7CisJCWlmICgoaSA9PSBkd2NvdW50IC0gMSkgfHwgKGsgPiA0KSkgeworCQkJQkNNTE9HKEJDTUxPR19EQVRBLCAiXG4iKTsKKwkJCWsgPSAxOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfbWlzYy5oIGIvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfbWlzYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYWE2YWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9taXNjLmgKQEAgLTAsMCArMSwyMjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5LCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KKyAqCisgKiAgTmFtZTogY3J5c3RhbGhkX21pc2MgLiBoCisgKgorICogIERlc2NyaXB0aW9uOgorICoJCUJDTTcwMDEyIExpbnV4IGRyaXZlciBnZW5lcmFsIHB1cnBvc2Ugcm91dGluZXMuCisgKgkJSW5jbHVkZXMgcmVnL21lbSByZWFkIGFuZCB3cml0ZSByb3V0aW5lcy4KKyAqCisgKiAgSElTVE9SWToKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGNyeXN0YWxoZCBkZXZpY2UgZHJpdmVyLgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBkcml2ZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgZHJpdmVyLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0NSWVNUQUxIRF9NSVNDX0hfCisjZGVmaW5lIF9DUllTVEFMSERfTUlTQ19IXworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgImJjX2R0c19nbG9iX2xueC5oIgorCisvKiBHbG9iYWwgbG9nIGxldmVsIHZhcmlhYmxlIGRlZmluZWQgaW4gY3J5c3RhbF9taXNjLmMgZmlsZSAqLworZXh0ZXJuIHVpbnQzMl90IGdfbGlua2xvZ19sZXZlbDsKKworLyogR2xvYmFsIGVsZW1lbnQgcG9vbCBmb3IgYWxsIFF1ZXVlIG1hbmFnZW1lbnQuCisgKiBUWDogQWN0aXZlID0gQkNfVFhfTElTVF9DTlQsIEZyZWUgPSBCQ19UWF9MSVNUX0NOVC4KKyAqIFJYOiBGcmVlID0gQkNfUlhfTElTVF9DTlQsIEFjdGl2ZSA9IDIKKyAqIEZXLUNNRDogNAorICovCisjZGVmaW5lCUJDX0xJTktfRUxFTV9QT09MX1NaCSgoQkNfVFhfTElTVF9DTlQgKiAyKSArIEJDX1JYX0xJU1RfQ05UICsgMiArIDQpCisKKy8qIERyaXZlcidzIElPREFUQSBwb29sIGNvdW50ICovCisjZGVmaW5lCUNIRF9JT0RBVEFfUE9PTF9TWiAgICAoQkNfSU9DVExfREFUQV9QT09MX1NJWkUgKiBCQ19MSU5LX01BWF9PUEVOUykKKworLyogU2NhdHRlciBHYXRoZXIgbWVtb3J5IHBvb2wgc2l6ZSBmb3IgVHggYW5kIFJ4ICovCisjZGVmaW5lIEJDX0xJTktfU0dfUE9PTF9TWiAgICAoQkNfVFhfTElTVF9DTlQgKyBCQ19SWF9MSVNUX0NOVCkKKworZW51bSBfY3J5c3RhbGhkX2Rpb19zaWcgeworCWNyeXN0YWxoZF9kaW9faW52ID0gMCwKKwljcnlzdGFsaGRfZGlvX2xvY2tlZCwKKwljcnlzdGFsaGRfZGlvX3NnX21hcHBlZCwKK307CisKK3N0cnVjdCBjcnlzdGFsaGRfZGlvX3VzZXJfaW5mbyB7CisJdm9pZAkJCSp4ZnJfYnVmZjsKKwl1aW50MzJfdAkJeGZyX2xlbjsKKwl1aW50MzJfdAkJdXZfb2Zmc2V0OworCWJvb2wJCQlkaXJfdHg7CisKKwl1aW50MzJfdAkJdXZfc2dfaXg7CisJdWludDMyX3QJCXV2X3NnX29mZjsKKwlpbnQJCQljb21wX3N0czsKKwlpbnQJCQlldl9zdHM7CisJdWludDMyX3QJCXlfZG9uZV9zejsKKwl1aW50MzJfdAkJdXZfZG9uZV9zejsKKwl1aW50MzJfdAkJY29tcF9mbGFnczsKKwlib29sCQkJYjQyMm1vZGU7Cit9OworCit0eXBlZGVmIHN0cnVjdCBfY3J5c3RhbGhkX2Rpb19yZXEgeworCXVpbnQzMl90CQkJc2lnOworCXVpbnQzMl90CQkJbWF4X3BhZ2VzOworCXN0cnVjdCBwYWdlCQkJKipwYWdlczsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJCSpzZzsKKwlpbnQJCQkJc2dfY250OworCWludAkJCQlwYWdlX2NudDsKKwlpbnQJCQkJZGlyZWN0aW9uOworCXN0cnVjdCBjcnlzdGFsaGRfZGlvX3VzZXJfaW5mbwl1aW5mbzsKKwl2b2lkCQkJCSpmYl92YTsKKwl1aW50MzJfdAkJCWZiX3NpemU7CisJZG1hX2FkZHJfdAkJCWZiX3BhOworCXN0cnVjdCBfY3J5c3RhbGhkX2Rpb19yZXEJCSpuZXh0OworfSBjcnlzdGFsaGRfZGlvX3JlcTsKKworI2RlZmluZSBCQ19MSU5LX0RJT1FfU0lHCSgweDA5MjIzMjgwKQorCit0eXBlZGVmIHN0cnVjdCBfY3J5c3RhbGhkX2VsZW1fcyB7CisJc3RydWN0IF9jcnlzdGFsaGRfZWxlbV9zCSpmbGluazsKKwlzdHJ1Y3QgX2NyeXN0YWxoZF9lbGVtX3MJKmJsaW5rOworCXZvaWQJCQkqZGF0YTsKKwl1aW50MzJfdAkJdGFnOworfSBjcnlzdGFsaGRfZWxlbV90OworCit0eXBlZGVmIHZvaWQgKCpjcnlzdGFsaGRfZGF0YV9mcmVlX2NiKSh2b2lkICpjb250ZXh0LCB2b2lkICpkYXRhKTsKKwordHlwZWRlZiBzdHJ1Y3QgX2NyeXN0YWxoZF9kaW9xX3MgeworCXVpbnQzMl90CQlzaWc7CisJc3RydWN0IGNyeXN0YWxoZF9hZHAJKmFkcDsKKwljcnlzdGFsaGRfZWxlbV90CQkqaGVhZDsKKwljcnlzdGFsaGRfZWxlbV90CQkqdGFpbDsKKwl1aW50MzJfdAkJY291bnQ7CisJc3BpbmxvY2tfdAkJbG9jazsKKwl3YWl0X3F1ZXVlX2hlYWRfdAlldmVudDsKKwljcnlzdGFsaGRfZGF0YV9mcmVlX2NiCWRhdGFfcmVsX2NiOworCXZvaWQJCQkqY2JfY29udGV4dDsKK30gY3J5c3RhbGhkX2Rpb3FfdDsKKwordHlwZWRlZiB2b2lkICgqaHdfY29tcF9jYWxsYmFjaykoY3J5c3RhbGhkX2Rpb19yZXEgKiwKKwkJCQkgd2FpdF9xdWV1ZV9oZWFkX3QgKmV2ZW50LCBCQ19TVEFUVVMgc3RzKTsKKworLyo9PT09PT09PT0gRGVjb2RlciAoNzQxMikgcmVnaXN0ZXIgYWNjZXNzIHJvdXRpbmVzLj09PT09PT09PT09PT09PT09ICovCit1aW50MzJfdCBiY19kZWNfcmVnX3JkKHN0cnVjdCBjcnlzdGFsaGRfYWRwICosIHVpbnQzMl90KTsKK3ZvaWQgYmNfZGVjX3JlZ193cihzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqLCB1aW50MzJfdCwgdWludDMyX3QpOworCisvKj09PT09PT09PSBMaW5rICg3MDAxMikgcmVnaXN0ZXIgYWNjZXNzIHJvdXRpbmVzLi4gPT09PT09PT09PT09PT09PT0qLwordWludDMyX3QgY3J5c3RhbGhkX3JlZ19yZChzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqLCB1aW50MzJfdCk7Cit2b2lkIGNyeXN0YWxoZF9yZWdfd3Ioc3RydWN0IGNyeXN0YWxoZF9hZHAgKiwgdWludDMyX3QsIHVpbnQzMl90KTsKKworLyo9PT09PT09PT0gRGVjb2RlciAoNzQxMikgbWVtb3J5IGFjY2VzcyByb3V0aW5lcy4uPT09PT09PT09PT09PT09PT0qLworQkNfU1RBVFVTIGNyeXN0YWxoZF9tZW1fcmQoc3RydWN0IGNyeXN0YWxoZF9hZHAgKiwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJfdCAqKTsKK0JDX1NUQVRVUyBjcnlzdGFsaGRfbWVtX3dyKHN0cnVjdCBjcnlzdGFsaGRfYWRwICosIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMyX3QgKik7CisKKy8qPT09PT09PT09PUxpbmsgKDcwMDEyKSBQQ0llIENvbmZpZyBhY2Nlc3Mgcm91dGluZXMuPT09PT09PT09PT09PT09PSovCitCQ19TVEFUVVMgY3J5c3RhbGhkX3BjaV9jZmdfcmQoc3RydWN0IGNyeXN0YWxoZF9hZHAgKiwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJfdCAqKTsKK0JDX1NUQVRVUyBjcnlzdGFsaGRfcGNpX2NmZ193cihzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqLCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90KTsKKworLyo9PT09PT09PT0gTGludXggS2VybmVsIEludGVyZmFjZSByb3V0aW5lcy4gPT09PT09PT09PT09PT09PT09PT09PT0gKi8KK3ZvaWQgKmJjX2tlcm5fZG1hX2FsbG9jKHN0cnVjdCBjcnlzdGFsaGRfYWRwICosIHVpbnQzMl90LCBkbWFfYWRkcl90ICopOwordm9pZCBiY19rZXJuX2RtYV9mcmVlKHN0cnVjdCBjcnlzdGFsaGRfYWRwICosIHVpbnQzMl90LAorCQkgICAgICB2b2lkICosIGRtYV9hZGRyX3QpOworI2RlZmluZSBjcnlzdGFsaGRfY3JlYXRlX2V2ZW50KF9ldikJaW5pdF93YWl0cXVldWVfaGVhZChfZXYpCisjZGVmaW5lIGNyeXN0YWxoZF9zZXRfZXZlbnQoX2V2KQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKF9ldikKKyNkZWZpbmUgY3J5c3RhbGhkX3dhaXRfb25fZXZlbnQoZXYsIGNvbmRpdGlvbiwgdGltZW91dCwgcmV0LCBub3NpZykJXAorZG8gewkJCQkJCQkJCVwKKwlERUNMQVJFX1dBSVRRVUVVRShlbnRyeSwgY3VycmVudCk7CQkJCVwKKwl1bnNpZ25lZCBsb25nIGVuZCA9IGppZmZpZXMgKyAoKHRpbWVvdXQgKiBIWikgLyAxMDAwKTsJCVwKKwkJcmV0ID0gMDsJCQkJCQlcCisJYWRkX3dhaXRfcXVldWUoZXYsICZlbnRyeSk7CQkJCQlcCisJZm9yICg7OykgewkJCQkJCQlcCisJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsJCVwKKwkJaWYgKGNvbmRpdGlvbikgewkJCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQl9CQkJCQkJCVwKKwkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgZW5kKSkgewkJCVwKKwkJCXJldCA9IC1FQlVTWTsJCQkJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJfQkJCQkJCQlcCisJCXNjaGVkdWxlX3RpbWVvdXQoKEhaIC8gMTAwID4gMSkgPyBIWiAvIDEwMCA6IDEpOwlcCisJCWlmICghbm9zaWcgJiYgc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsJCVwKKwkJCXJldCA9IC1FSU5UUjsJCQkJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwkJfQkJCQkJCQlcCisJfQkJCQkJCQkJXAorCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsJCQkJXAorCXJlbW92ZV93YWl0X3F1ZXVlKGV2LCAmZW50cnkpOwkJCQkJXAorfSB3aGlsZSAoMCkKKworLyo9PT09PT09PT09PT09PT09IERpcmVjdCBJTyBtYXBwaW5nIHJvdXRpbmVzID09PT09PT09PT09PT09PT09PSovCitleHRlcm4gaW50IGNyeXN0YWxoZF9jcmVhdGVfZGlvX3Bvb2woc3RydWN0IGNyeXN0YWxoZF9hZHAgKiwgdWludDMyX3QpOworZXh0ZXJuIHZvaWQgY3J5c3RhbGhkX2Rlc3Ryb3lfZGlvX3Bvb2woc3RydWN0IGNyeXN0YWxoZF9hZHAgKik7CitleHRlcm4gQkNfU1RBVFVTIGNyeXN0YWxoZF9tYXBfZGlvKHN0cnVjdCBjcnlzdGFsaGRfYWRwICosIHZvaWQgKiwgdWludDMyX3QsCisJCQkJICAgdWludDMyX3QsIGJvb2wsIGJvb2wsIGNyeXN0YWxoZF9kaW9fcmVxKiopOworCitleHRlcm4gQkNfU1RBVFVTIGNyeXN0YWxoZF91bm1hcF9kaW8oc3RydWN0IGNyeXN0YWxoZF9hZHAgKiwgY3J5c3RhbGhkX2Rpb19yZXEqKTsKKyNkZWZpbmUgY3J5c3RhbGhkX2dldF9zZ2xlX3BhZGRyKF9kaW8sIF9peCkgKGNwdV90b19sZTY0KHNnX2RtYV9hZGRyZXNzKCZfZGlvLT5zZ1tfaXhdKSkpCisjZGVmaW5lIGNyeXN0YWxoZF9nZXRfc2dsZV9sZW4oX2RpbywgX2l4KSAoY3B1X3RvX2xlMzIoc2dfZG1hX2xlbigmX2Rpby0+c2dbX2l4XSkpKQorCisvKj09PT09PT09PT09PT09PT0gR2VuZXJhbCBQdXJwb3NlIFF1ZXVlcyA9PT09PT09PT09PT09PT09PT0qLworZXh0ZXJuIEJDX1NUQVRVUyBjcnlzdGFsaGRfY3JlYXRlX2Rpb3Eoc3RydWN0IGNyeXN0YWxoZF9hZHAgKiwgY3J5c3RhbGhkX2Rpb3FfdCAqKiwgY3J5c3RhbGhkX2RhdGFfZnJlZV9jYiAsIHZvaWQgKik7CitleHRlcm4gdm9pZCBjcnlzdGFsaGRfZGVsZXRlX2Rpb3Eoc3RydWN0IGNyeXN0YWxoZF9hZHAgKiwgY3J5c3RhbGhkX2Rpb3FfdCAqKTsKK2V4dGVybiBCQ19TVEFUVVMgY3J5c3RhbGhkX2Rpb3FfYWRkKGNyeXN0YWxoZF9kaW9xX3QgKmlvcSwgdm9pZCAqZGF0YSwgYm9vbCB3YWtlLCB1aW50MzJfdCB0YWcpOworZXh0ZXJuIHZvaWQgKmNyeXN0YWxoZF9kaW9xX2ZldGNoKGNyeXN0YWxoZF9kaW9xX3QgKmlvcSk7CitleHRlcm4gdm9pZCAqY3J5c3RhbGhkX2Rpb3FfZmluZF9hbmRfZmV0Y2goY3J5c3RhbGhkX2Rpb3FfdCAqaW9xLCB1aW50MzJfdCB0YWcpOworZXh0ZXJuIHZvaWQgKmNyeXN0YWxoZF9kaW9xX2ZldGNoX3dhaXQoY3J5c3RhbGhkX2Rpb3FfdCAqaW9xLCB1aW50MzJfdCB0b19zZWNzLCB1aW50MzJfdCAqc2lnX3BlbmQpOworCisjZGVmaW5lIGNyeXN0YWxoZF9kaW9xX2NvdW50KF9pb3EpCSgoX2lvcSkgPyBfaW9xLT5jb3VudCA6IDApCisKK2V4dGVybiBpbnQgY3J5c3RhbGhkX2NyZWF0ZV9lbGVtX3Bvb2woc3RydWN0IGNyeXN0YWxoZF9hZHAgKiwgdWludDMyX3QpOworZXh0ZXJuIHZvaWQgY3J5c3RhbGhkX2RlbGV0ZV9lbGVtX3Bvb2woc3RydWN0IGNyeXN0YWxoZF9hZHAgKik7CisKKworLyo9PT09PT09PT09PT09PT09IERlYnVnIHJvdXRpbmVzL21hY3JvcyAuLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCitleHRlcm4gdm9pZCBjcnlzdGFsaGRfc2hvd19idWZmZXIodWludDMyX3Qgb2ZmLCB1aW50OF90ICpidWZmLCB1aW50MzJfdCBkd2NvdW50KTsKKworZW51bSBfY2hkX2xvZ19sZXZlbHMgeworCUJDTUxPR19FUlJPUgkJPSAweDgwMDAwMDAwLAkvKiBEb24ndCBkaXNhYmxlIHRoaXMgb3B0aW9uICovCisJQkNNTE9HX0RBVEEJCT0gMHg0MDAwMDAwMCwJLyogRGF0YSwgZW5hYmxlIGJ5IGRlZmF1bHQgKi8KKwlCQ01MT0dfU1BJTkxPQ0sJCT0gMHgyMDAwMDAwMCwJLyogU3BjaWFsIGNhc2UgZm9yIFNwaW4gbG9ja3MqLworCisJLyogRm9sbG93aW5nIGFyZSBhbGxvd2VkIG9ubHkgaW4gZGVidWcgbW9kZSAqLworCUJDTUxPR19JTkZPCQk9IDB4MDAwMDAwMDEsCS8qIEdlbmVyaWMgaW5mb3JtYXRpb25hbCAqLworCUJDTUxPR19EQkcJCT0gMHgwMDAwMDAwMiwJLyogRmlyc3QgbGV2ZWwgRGVidWcgaW5mbyAqLworCUJDTUxPR19TU1RFUAkJPSAweDAwMDAwMDA0LAkvKiBTdGVwcGluZyBpbmZvcm1hdGlvbiAqLworCUJDTUxPR19FTlRFUl9MRUFWRQk9IDB4MDAwMDAwMDgsCS8qIHN0YWNrIHRyYWNraW5nICovCit9OworCisjZGVmaW5lIEJDTUxPR19FTlRFUgkJCQlcCitpZiAoZ19saW5rbG9nX2xldmVsICYgQkNNTE9HX0VOVEVSX0xFQVZFKSB7CVwKKwlwcmludGsoIkVudGVyZWQgJXNcbiIsIF9fZnVuY19fKTsJXAorfQorCisjZGVmaW5lIEJDTUxPR19MRUFWRQkJCQlcCitpZiAoZ19saW5rbG9nX2xldmVsICYgQkNNTE9HX0VOVEVSX0xFQVZFKSB7CVwKKwlwcmludGsoIkxlYXZpbmcgJXNcbiIsIF9fZnVuY19fKTsJXAorfQorCisjZGVmaW5lIEJDTUxPRyh0cmFjZSwgZm10LCBhcmdzLi4uKQkJXAoraWYgKGdfbGlua2xvZ19sZXZlbCAmIHRyYWNlKSB7CQkJXAorCXByaW50ayhmbXQsICMjYXJncyk7CQkJXAorfQorCisjZGVmaW5lIEJDTUxPR19FUlIoZm10LCBhcmdzLi4uKQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAoZ19saW5rbG9nX2xldmVsICYgQkNNTE9HX0VSUk9SKSB7CQkJCVwKKwkJcHJpbnRrKCIqRVJSKjolczolZDogImZtdCwgX19GSUxFX18sIF9fTElORV9fLCAjI2FyZ3MpOwlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hdWR1cHMxMS5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hdWR1cHMxMS5jCmluZGV4IDg5YzhmZTIuLjQ2YzdmNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtYXVkdXBzMTEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWF1ZHVwczExLmMKQEAgLTM0MywxMCArMzQzLDExIEBACiAJCQkgc3RydWN0IHY0bDJfY29udHJvbCAqY3RsKQogewogCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2OwogCWludCBlcnI7CiAKIAlpZiAoZmgpIHsKKwkJZGV2ID0gZmgtPmRldjsKIAkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CiAJCWlmICgwICE9IGVycikKIAkJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLW1lZHVzYS12aWRlby5jIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1tZWR1c2EtdmlkZW8uYwppbmRleCAxZWIwNzliLi5kNjAxNjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLW1lZHVzYS12aWRlby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtbWVkdXNhLXZpZGVvLmMKQEAgLTc5NSwxMCArNzk1LDggQEAKIAl2YWx1ZSAmPSAweEZGRkZGRkRGOwogCXJldF92YWwgPSBjeDI1ODIxX2kyY193cml0ZSgmZGV2LT5pMmNfYnVzWzBdLCBNT05fQV9DVFJMLCB2YWx1ZSk7CiAKLQlpZiAocmV0X3ZhbCA8IDApIHsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCWlmIChyZXRfdmFsIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLmMKaW5kZXggYzdjMTRjNy4uOGNkMzk4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8uYwpAQCAtODc2LDcgKzg3Niw3IEBACiAJZHByaW50aygxLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCiAJbiA9IGktPmluZGV4OwotCWlmIChuID4gMikKKwlpZiAobiA+PSAyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICgwID09IElOUFVUKG4pLT50eXBlKQpAQCAtOTYzLDEwICs5NjMsMTEgQEAKIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKIAlzdHJ1Y3QgY3gyNTgyMV9maCAqZmggPSBwcml2OwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldjsKIAlpbnQgZXJyOwogCiAJaWYgKGZoKSB7CisJCWRldiA9IGZoLT5kZXY7CiAJCWVyciA9IHY0bDJfcHJpb19jaGVjaygmZGV2LT5wcmlvLCAmZmgtPnByaW8pOwogCQlpZiAoMCAhPSBlcnIpCiAJCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2NhbWVyYS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2NhbWVyYS9LY29uZmlnCmluZGV4IDBhM2U5MDMuLmJmYjZkMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9jYW1lcmEvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vY2FtZXJhL0tjb25maWcKQEAgLTE1LDcgKzE1LDcgQEAKIAogY29uZmlnIE1TTV9DQU1FUkFfRkxBU0gKIAlib29sICJRdWFsY29tbSBNU00gY2FtZXJhIGZsYXNoIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBNU01fQ0FNRVJBCisJZGVwZW5kcyBvbiBNU01fQ0FNRVJBICYmIEJST0tFTgogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBzdXBwb3J0IGZvciBMRUQgZmxhc2ggZm9yIG1zbSBjYW1lcmEKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2NhbWVyYS9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9jYW1lcmEvTWFrZWZpbGUKaW5kZXggNDQyOWFlNS4uZGIyMjhkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2NhbWVyYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vY2FtZXJhL01ha2VmaWxlCkBAIC0xLDMgKzEsNCBAQAorRVhUUkFfQ0ZMQUdTPS1JZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUKIG9iai0kKENPTkZJR19NVDlUMDEzKSArPSBtdDl0MDEzLm8gbXQ5dDAxM19yZWcubwogb2JqLSQoQ09ORklHX01UOUQxMTIpICs9IG10OWQxMTIubyBtdDlkMTEyX3JlZy5vCiBvYmotJChDT05GSUdfTVQ5UDAxMikgKz0gbXQ5cDAxMl9mb3gubyBtdDlwMDEyX3JlZy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vY2FtZXJhL21zbV9jYW1lcmEuYyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9jYW1lcmEvbXNtX2NhbWVyYS5jCmluZGV4IDdkOTM4NzcuLmRjN2M2MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9jYW1lcmEvbXNtX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9jYW1lcmEvbXNtX2NhbWVyYS5jCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUVVBTENPTU0gSW5jb3Jwb3JhdGVkLgogICovCiAKLS8vRklYTUU6IG1vc3QgYWxsb2NhdGlvbnMgbmVlZCBub3QgYmUgR0ZQX0FUT01JQworLyogRklYTUU6IG1vc3QgYWxsb2NhdGlvbnMgbmVlZCBub3QgYmUgR0ZQX0FUT01JQyAqLwogLyogRklYTUU6IG1hbmFnZW1lbnQgb2YgbXV0ZXhlcyAqLwogLyogRklYTUU6IG1zbV9wbWVtX3JlZ2lvbl9sb29rdXAgcmV0dXJuIHZhbHVlcyAqLwogLyogRklYTUU6IHdheSB0b28gbWFueSBjb3B5IHRvL2Zyb20gdXNlciAqLwpAQCAtNzYsMTQgKzc2LDE0IEBACiAJCWxpc3RfZGVsX2luaXQoJnFjbWQtPmxpc3QpOwkJCVwKIAkJa2ZyZWUocWNtZCk7CQkJCQlcCiAJfTsJCQkJCQkJXAotfSB3aGlsZSgwKQorfSB3aGlsZSAoMCkKIAogI2RlZmluZSBNU01fRFJBSU5fUVVFVUUoc3luYywgbmFtZSkgZG8gewkJCVwKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwkJCQkJXAogCXNwaW5fbG9ja19pcnFzYXZlKCYoc3luYyktPm5hbWUjI19sb2NrLCBmbGFncyk7CQlcCiAJTVNNX0RSQUlOX1FVRVVFX05PU1lOQyhzeW5jLCBuYW1lKTsJCQlcCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmKHN5bmMpLT5uYW1lIyNfbG9jaywgZmxhZ3MpOwlcCi19IHdoaWxlKDApCit9IHdoaWxlICgwKQogCiBzdGF0aWMgaW50IGNoZWNrX292ZXJsYXAoc3RydWN0IGhsaXN0X2hlYWQgKnB0eXBlLAogCQkJdW5zaWduZWQgbG9uZyBwYWRkciwKQEAgLTM2MSw3ICszNjEsNyBAQAogCWlmICghZnJhbWUtPmJ1ZmZlcikgewogCQlwcl9lcnIoIiVzOiBjYW5ub3QgZ2V0IGZyYW1lLCBpbnZhbGlkIGxvb2t1cCBhZGRyZXNzICIKIAkJCSJ5PSV4IGNiY3I9JXggb2Zmc2V0PSVkXG4iLAotCQkJX19GVU5DVElPTl9fLAorCQkJX19mdW5jX18sCiAJCQlwcGh5LT55X3BoeSwKIAkJCXBwaHktPmNiY3JfcGh5LAogCQkJZnJhbWUtPnlfb2ZmKTsKQEAgLTQ1NSw3ICs0NTUsNyBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHN0cnVjdCBtc21fcXVldWVfY21kKiBfX21zbV9jb250cm9sKHN0cnVjdCBtc21fc3luYyAqc3luYywKK3N0YXRpYyBzdHJ1Y3QgbXNtX3F1ZXVlX2NtZCAqX19tc21fY29udHJvbChzdHJ1Y3QgbXNtX3N5bmMgKnN5bmMsCiAJCXN0cnVjdCBtc21fY29udHJvbF9kZXZpY2VfcXVldWUgKnF1ZXVlLAogCQlzdHJ1Y3QgbXNtX3F1ZXVlX2NtZCAqcWNtZCwKIAkJaW50IHRpbWVvdXQpCkBAIC01OTIsOCArNTkyLDcgQEAKIAkgKiBhIHJlc3VsdCBvZiBhIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgd2UgYXJlIGZyZWVpbmcgdGhlIHFjbWQgdGhhdAogCSAqIHdlIGRlcXVldWVkIGZyb20gcXVldWUtPmN0cmxfc3RhdHVzX3EuCiAJICovCi0JaWYgKHFjbWQpCi0JCWtmcmVlKHFjbWQpOworCWtmcmVlKHFjbWQpOwogCiAJQ0RCRygibXNtX2NvbnRyb2w6IGVuZCByYyA9ICVkXG4iLCByYyk7CiAJcmV0dXJuIHJjOwpAQCAtNjcwLDcgKzY2OSw3IEBACiAJCQkJCSYoc3RhdHMuZmQpKTsKIAkJCWlmICghc3RhdHMuYnVmZmVyKSB7CiAJCQkJcHJfZXJyKCIlczogbXNtX3BtZW1fc3RhdHNfcHRvdl9sb29rdXAgZXJyb3JcbiIsCi0JCQkJCV9fRlVOQ1RJT05fXyk7CisJCQkJCV9fZnVuY19fKTsKIAkJCQlyYyA9IC1FSU5WQUw7CiAJCQkJZ290byBmYWlsdXJlOwogCQkJfQpAQCAtNzE4LDggKzcxNyw3IEBACiAJCQkJCWJ1Zi5mbWFpbi5idWZmZXIgPQogCQkJCQkJKHVuc2lnbmVkIGxvbmcpcmVnaW9uLnZhZGRyOwogCQkJCQlidWYuZm1haW4uZmQgPSByZWdpb24uZmQ7Ci0JCQkJfQotCQkJCWVsc2UgeworCQkJCX0gZWxzZSB7CiAJCQkJCXByX2VycigiJXM6IHBtZW0gbG9va3VwIGZhaWxlZFxuIiwKIAkJCQkJCV9fZnVuY19fKTsKIAkJCQkJcmMgPSAtRUlOVkFMOwpAQCAtNzk2LDggKzc5NCw3IEBACiAJfQogCiBmYWlsdXJlOgotCWlmIChxY21kKQotCQlrZnJlZShxY21kKTsKKwlrZnJlZShxY21kKTsKIAogCUNEQkcoIm1zbV9nZXRfc3RhdHM6ICVkXG4iLCByYyk7CiAJcmV0dXJuIHJjOwpAQCAtODM4LDggKzgzNSw4IEBACiAJCQlrZnJlZShxY21kKTsKIAkJCWdvdG8gZW5kOwogCQl9Ci0JfQotCWVsc2UgY3RybGNtZC0+dmFsdWUgPSBOVUxMOworCX0gZWxzZQorCQljdHJsY21kLT52YWx1ZSA9IE5VTEw7CiAKIGVuZDoKIAlDREJHKCJtc21fY3RybF9jbWRfZG9uZTogZW5kIHJjID0gJWRcbiIsIHJjKTsKQEAgLTg2OSwxNCArODY2LDE0IEBACiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXN3aXRjaChjZmdjbWQuY21kX3R5cGUpIHsKKwlzd2l0Y2ggKGNmZ2NtZC5jbWRfdHlwZSkgewogCWNhc2UgQ01EX1NUQVRTX0VOQUJMRToKIAkJYXhpX2RhdGEuYnVmbnVtMSA9CiAJCQltc21fcG1lbV9yZWdpb25fbG9va3VwKCZzeW5jLT5zdGF0cywKIAkJCQkJTVNNX1BNRU1fQUVDX0FXQiwgJnJlZ2lvblswXSwKIAkJCQkJTlVNX1dCX0VYUF9TVEFUX09VVFBVVF9CVUZGRVJTKTsKIAkJaWYgKCFheGlfZGF0YS5idWZudW0xKSB7Ci0JCQlwcl9lcnIoIiVzOiBwbWVtIHJlZ2lvbiBsb29rdXAgZXJyb3JcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlwcl9lcnIoIiVzOiBwbWVtIHJlZ2lvbiBsb29rdXAgZXJyb3JcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWF4aV9kYXRhLnJlZ2lvbiA9ICZyZWdpb25bMF07CkBAIC04ODgsNyArODg1LDcgQEAKIAkJCQkJTVNNX1BNRU1fQUYsICZyZWdpb25bMF0sCiAJCQkJCU5VTV9BRl9TVEFUX09VVFBVVF9CVUZGRVJTKTsKIAkJaWYgKCFheGlfZGF0YS5idWZudW0xKSB7Ci0JCQlwcl9lcnIoIiVzOiBwbWVtIHJlZ2lvbiBsb29rdXAgZXJyb3JcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlwcl9lcnIoIiVzOiBwbWVtIHJlZ2lvbiBsb29rdXAgZXJyb3JcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWF4aV9kYXRhLnJlZ2lvbiA9ICZyZWdpb25bMF07CkBAIC04OTksNyArODk2LDcgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJfZXJyKCIlczogdW5rbm93biBjb21tYW5kIHR5cGUgJWRcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIGNmZ2NtZC5jbWRfdHlwZSk7CisJCQlfX2Z1bmNfXywgY2ZnY21kLmNtZF90eXBlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC05MjgsNyArOTI1LDcgQEAKIAkJCW1zbV9wbWVtX3JlZ2lvbl9sb29rdXAoJnN5bmMtPmZyYW1lLCBwbWVtX3R5cGUsCiAJCQkJJnJlZ2lvblswXSwgOCk7CiAJCWlmICghYXhpX2RhdGEuYnVmbnVtMSkgewotCQkJcHJfZXJyKCIlczogcG1lbSByZWdpb24gbG9va3VwIGVycm9yXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJcHJfZXJyKCIlczogcG1lbSByZWdpb24gbG9va3VwIGVycm9yXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlicmVhazsKQEAgLTkzOSw3ICs5MzYsNyBAQAogCQkJbXNtX3BtZW1fcmVnaW9uX2xvb2t1cCgmc3luYy0+ZnJhbWUsIHBtZW1fdHlwZSwKIAkJCQkmcmVnaW9uWzBdLCA4KTsKIAkJaWYgKCFheGlfZGF0YS5idWZudW0yKSB7Ci0JCQlwcl9lcnIoIiVzOiBwbWVtIHJlZ2lvbiBsb29rdXAgZXJyb3JcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlwcl9lcnIoIiVzOiBwbWVtIHJlZ2lvbiBsb29rdXAgZXJyb3JcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWJyZWFrOwpAQCAtOTUwLDcgKzk0Nyw3IEBACiAJCQltc21fcG1lbV9yZWdpb25fbG9va3VwKCZzeW5jLT5mcmFtZSwgcG1lbV90eXBlLAogCQkJCSZyZWdpb25bMF0sIDgpOwogCQlpZiAoIWF4aV9kYXRhLmJ1Zm51bTEpIHsKLQkJCXByX2VycigiJXM6IHBtZW0gcmVnaW9uIGxvb2t1cCBlcnJvclxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXByX2VycigiJXM6IHBtZW0gcmVnaW9uIGxvb2t1cCBlcnJvclxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIApAQCAtOTU5LDcgKzk1Niw3IEBACiAJCQltc21fcG1lbV9yZWdpb25fbG9va3VwKCZzeW5jLT5mcmFtZSwgcG1lbV90eXBlLAogCQkJCSZyZWdpb25bYXhpX2RhdGEuYnVmbnVtMV0sIDgpOwogCQlpZiAoIWF4aV9kYXRhLmJ1Zm51bTIpIHsKLQkJCXByX2VycigiJXM6IHBtZW0gcmVnaW9uIGxvb2t1cCBlcnJvclxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXByX2VycigiJXM6IHBtZW0gcmVnaW9uIGxvb2t1cCBlcnJvclxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJYnJlYWs7CkBAIC05NzAsNyArOTY3LDcgQEAKIAkJCW1zbV9wbWVtX3JlZ2lvbl9sb29rdXAoJnN5bmMtPmZyYW1lLCBwbWVtX3R5cGUsCiAJCQkJJnJlZ2lvblswXSwgOCk7CiAJCWlmICghYXhpX2RhdGEuYnVmbnVtMikgewotCQkJcHJfZXJyKCIlczogcG1lbSByZWdpb24gbG9va3VwIGVycm9yXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJcHJfZXJyKCIlczogcG1lbSByZWdpb24gbG9va3VwIGVycm9yXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlicmVhazsKQEAgLTk4MSw3ICs5NzgsNyBAQAogCiAJZGVmYXVsdDoKIAkJcHJfZXJyKCIlczogdW5rbm93biBjb21tYW5kIHR5cGUgJWRcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIGNmZ2NtZC0+Y21kX3R5cGUpOworCQkJX19mdW5jX18sIGNmZ2NtZC0+Y21kX3R5cGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTEwNDcsNyArMTA0NCw3IEBACiAJCQlyYyA9IHN5bmMtPnZmZWZuLnZmZV9jb25maWcoJmNmZ2NtZCwgJnBwaHkpOwogCX0gZWxzZSB7CiAJCXByX2VycigiJXM6IG1zbV9wbWVtX2ZyYW1lX3Z0b3BfbG9va3VwIGZhaWxlZFxuIiwKLQkJCV9fRlVOQ1RJT05fXyk7CisJCQlfX2Z1bmNfXyk7CiAJCXJjID0gLUVJTlZBTDsKIAl9CiAKQEAgLTExMzEsNyArMTEyOCw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByX2VycigiJXM6IHVua25vd24gY29tbWFuZCB0eXBlICVkXG4iLAotCQkJX19GVU5DVElPTl9fLCBjZmdjbWQtPmNtZF90eXBlKTsKKwkJCV9fZnVuY19fLCBjZmdjbWQtPmNtZF90eXBlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMTQwLDcgKzExMzcsNyBAQAogCQkJbXNtX3BtZW1fcmVnaW9uX2xvb2t1cCgmc3luYy0+c3RhdHMsIHBtZW1fdHlwZSwKIAkJCQkmcmVnaW9uWzBdLCBOVU1fV0JfRVhQX1NUQVRfT1VUUFVUX0JVRkZFUlMpOwogCQlpZiAoIWF4aV9kYXRhLmJ1Zm51bTEpIHsKLQkJCXByX2VycigiJXM6IHBtZW0gcmVnaW9uIGxvb2t1cCBlcnJvclxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXByX2VycigiJXM6IHBtZW0gcmVnaW9uIGxvb2t1cCBlcnJvclxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJYXhpX2RhdGEucmVnaW9uID0gJnJlZ2lvblswXTsKQEAgLTExNzcsNyArMTE3NCw3IEBACiAJCQljZmdjbWQuY21kX3R5cGUgPSBDTURfU1RBVFNfQUZfQlVGX1JFTEVBU0U7CiAJCWVsc2UgewogCQkJcHJfZXJyKCIlczogaW52YWxpZCBidWYgdHlwZSAlZFxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sCisJCQkJX19mdW5jX18sCiAJCQkJYnVmLnR5cGUpOwogCQkJcmMgPSAtRUlOVkFMOwogCQkJZ290byBwdXRfZG9uZTsKQEAgLTEyMjMsNyArMTIyMCw3IEBACiAKIAlkZWZhdWx0OgogCQlwcl9lcnIoIiVzOiB1bmtub3duIGNvbW1hbmQgdHlwZSAlZFxuIiwKLQkJCV9fRlVOQ1RJT05fXywKKwkJCV9fZnVuY19fLAogCQkJY2ZnY21kLmNtZF90eXBlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTYyMiw3ICsxNjE5LDggQEAKIAlpbnQgcmM7CiAJc3RydWN0IG1zbV9jb250cm9sX2RldmljZSAqY3RybF9wbXNtID0gZmlsZXAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgbXNtX2RldmljZSAqcG1zbSA9IGN0cmxfcG1zbS0+cG1zbTsKLQlwcmludGsoIm1zbV9jYW1lcmE6IFJFTEVBU0UgJXNcbiIsIGZpbGVwLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAibXNtX2NhbWVyYTogUkVMRUFTRSAlc1xuIiwKKwkJCQkJZmlsZXAtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lKTsKIAlyYyA9IF9fbXNtX3JlbGVhc2UocG1zbS0+c3luYyk7CiAJaWYgKCFyYykgewogCQlNU01fRFJBSU5fUVVFVUUoJmN0cmxfcG1zbS0+Y3RybF9xLCBjdHJsX3N0YXR1c19xKTsKQEAgLTE2MzYsNyArMTYzNCw4IEBACiB7CiAJaW50IHJjOwogCXN0cnVjdCBtc21fZGV2aWNlICpwbXNtID0gZmlsZXAtPnByaXZhdGVfZGF0YTsKLQlwcmludGsoIm1zbV9jYW1lcmE6IFJFTEVBU0UgJXNcbiIsIGZpbGVwLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubmFtZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAibXNtX2NhbWVyYTogUkVMRUFTRSAlc1xuIiwKKwkJCQkJZmlsZXAtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lKTsKIAlyYyA9IF9fbXNtX3JlbGVhc2UocG1zbS0+c3luYyk7CiAJaWYgKCFyYykgewogCQlNU01fRFJBSU5fUVVFVUUocG1zbS0+c3luYywgcHJldl9mcmFtZV9xKTsKQEAgLTE3MjAsNyArMTcxOSw3IEBACiAJcWNtZC0+dHlwZSA9IHF0eXBlOwogCiAJaWYgKHF0eXBlID09IE1TTV9DQU1fUV9WRkVfTVNHKSB7Ci0JCXN3aXRjaCh2ZGF0YS0+dHlwZSkgeworCQlzd2l0Y2ggKHZkYXRhLT50eXBlKSB7CiAJCWNhc2UgVkZFX01TR19PVVRQVVQxOgogCQljYXNlIFZGRV9NU0dfT1VUUFVUMjoKIAkJCXFjbWRfZnJhbWUgPQpAQCAtMTg4NSw4ICsxODg0LDEwIEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJcmMgPSBtc21fb3Blbl9jb21tb24oaW5vZGUsIGZpbGVwLCAwKTsKLQlpZiAocmMgPCAwKQorCWlmIChyYyA8IDApIHsKKwkJa2ZyZWUoY3RybF9wbXNtKTsKIAkJcmV0dXJuIHJjOworCX0KIAogCWN0cmxfcG1zbS0+cG1zbSA9IGZpbGVwLT5wcml2YXRlX2RhdGE7CiAJZmlsZXAtPnByaXZhdGVfZGF0YSA9IGN0cmxfcG1zbTsKQEAgLTE5MjksNyArMTkzMCw3IEBACiAJbWVtY3B5KG91dC0+dmFsdWUsIGN0cmwtPnZhbHVlLCBjdHJsLT5sZW5ndGgpOwogCiBlbmQ6Ci0JaWYgKHJjbWQpIGtmcmVlKHJjbWQpOworCWtmcmVlKHJjbWQpOwogCUNEQkcoIl9fbXNtX3Y0bDJfY29udHJvbDogZW5kIHJjID0gJWRcbiIsIHJjKTsKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vY2FtZXJhL21zbV92ZmU3eC5jIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2NhbWVyYS9tc21fdmZlN3guYwppbmRleCAzM2FiM2FjLi42MmZkMjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vY2FtZXJhL21zbV92ZmU3eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9jYW1lcmEvbXNtX3ZmZTd4LmMKQEAgLTI1NSw4ICsyNTUsNyBAQAogCiAJZXh0bGVuID0gc2l6ZW9mKHN0cnVjdCB2ZmVfZnJhbWVfZXh0cmEpOwogCi0JZXh0ZGF0YSA9Ci0JCWttYWxsb2Moc2l6ZW9mKGV4dGxlbiksIEdGUF9BVE9NSUMpOworCWV4dGRhdGEgPSBrbWFsbG9jKGV4dGxlbiwgR0ZQX0FUT01JQyk7CiAJaWYgKCFleHRkYXRhKSB7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBpbml0X2ZhaWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vY2FtZXJhL3M1azNlMmZ4LmMgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vY2FtZXJhL3M1azNlMmZ4LmMKaW5kZXggZWRiYTE5OC4uODQxNzkyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2NhbWVyYS9zNWszZTJmeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9jYW1lcmEvczVrM2UyZnguYwpAQCAtNzQzLDEyICs3NDMsMTIgQEAKIAl9CiAKIAkvKiBpbml0aWFsaXplIEFGICovCi0JaWYgKChyYyA9IHM1azNlMmZ4X2kyY193cml0ZV9iKHM1azNlMmZ4X2NsaWVudC0+YWRkciwKLQkJCTB4MzE0NiwgMHgzQSkpIDwgMCkKKwlyYyA9IHM1azNlMmZ4X2kyY193cml0ZV9iKHM1azNlMmZ4X2NsaWVudC0+YWRkciwgMHgzMTQ2LCAweDNBKTsKKwlpZiAocmMgPCAwKQogCQlnb3RvIGluaXRfZmFpbDE7CiAKLQlpZiAoKHJjID0gczVrM2UyZnhfaTJjX3dyaXRlX2IoczVrM2UyZnhfY2xpZW50LT5hZGRyLAotCQkJMHgzMTMwLCAweDAzKSkgPCAwKQorCXJjID0gczVrM2UyZnhfaTJjX3dyaXRlX2IoczVrM2UyZnhfY2xpZW50LT5hZGRyLCAweDMxMzAsIDB4MDMpOworCWlmIChyYyA8IDApCiAJCWdvdG8gaW5pdF9mYWlsMTsKIAogCWdvdG8gaW5pdF9kb25lOwpAQCAtODE0LDIwICs4MTQsMjAgQEAKIAogc3RhdGljIHVpbnQxNl90IHM1azNlMmZ4X2dldF9wcmV2X3BpeGVsc19wbCh2b2lkKQogewotCXJldHVybiAoczVrM2UyZnhfcmVnX3BhdFtTX1JFU19QUkVWSUVXXS5zaXplX3cgKwotCQlzNWszZTJmeF9yZWdfcGF0W1NfUkVTX1BSRVZJRVddLmJsa19wKTsKKwlyZXR1cm4gczVrM2UyZnhfcmVnX3BhdFtTX1JFU19QUkVWSUVXXS5zaXplX3cgKworCQlzNWszZTJmeF9yZWdfcGF0W1NfUkVTX1BSRVZJRVddLmJsa19wOwogfQogCiBzdGF0aWMgdWludDE2X3QgczVrM2UyZnhfZ2V0X3BpY3RfbGluZXNfcGYodm9pZCkKIHsKLQlyZXR1cm4gKHM1azNlMmZ4X3JlZ19wYXRbU19SRVNfQ0FQVFVSRV0uc2l6ZV9oICsKLQkJczVrM2UyZnhfcmVnX3BhdFtTX1JFU19DQVBUVVJFXS5ibGtfbCk7CisJcmV0dXJuIHM1azNlMmZ4X3JlZ19wYXRbU19SRVNfQ0FQVFVSRV0uc2l6ZV9oICsKKwkJczVrM2UyZnhfcmVnX3BhdFtTX1JFU19DQVBUVVJFXS5ibGtfbDsKIH0KIAogc3RhdGljIHVpbnQxNl90IHM1azNlMmZ4X2dldF9waWN0X3BpeGVsc19wbCh2b2lkKQogewotCXJldHVybiAoczVrM2UyZnhfcmVnX3BhdFtTX1JFU19DQVBUVVJFXS5zaXplX3cgKwotCQlzNWszZTJmeF9yZWdfcGF0W1NfUkVTX0NBUFRVUkVdLmJsa19wKTsKKwlyZXR1cm4gczVrM2UyZnhfcmVnX3BhdFtTX1JFU19DQVBUVVJFXS5zaXplX3cgKworCQlzNWszZTJmeF9yZWdfcGF0W1NfUkVTX0NBUFRVUkVdLmJsa19wOwogfQogCiBzdGF0aWMgdWludDMyX3QgczVrM2UyZnhfZ2V0X3BpY3RfbWF4X2V4cF9sYyh2b2lkKQpAQCAtMTA5MywxNCArMTA5MywxMCBAQAogCiAJYWN0dWFsX3N0ZXAgPSBzdGVwX2RpcmVjdGlvbiAqIChpbnQxNl90KW51bV9zdGVwczsKIAlwb3Nfb2Zmc2V0ID0gaW5pdF9jb2RlICsgczVrM2UyZnhfY3RybC0+Y3Vycl9sZW5zX3BvczsKLQlnYWluID0gYWN0dWFsX3N0ZXAgKiAweDQwMCAvIDU7CisJZ2FpbiA9ICgoYWN0dWFsX3N0ZXAgPDwgMTApIC8gNSkgPj4gMTA7CiAKLQlmb3IgKGkgPSAwOyBpIDw9IDQ7IGkrKykgewotCQlpZiAoYWN0dWFsX3N0ZXAgPj0gMCkKLQkJCXNfbW92ZVtpXSA9ICgoKChpKzEpKmdhaW4rMHgyMDApIC0gKGkqZ2FpbisweDIwMCkpLzB4NDAwKTsKLQkJZWxzZQotCQkJc19tb3ZlW2ldID0gKCgoKGkrMSkqZ2Fpbi0weDIwMCkgLSAoaSpnYWluLTB4MjAwKSkvMHg0MDApOwotCX0KKwlmb3IgKGkgPSAwOyBpIDw9IDQ7IGkrKykKKwkJc19tb3ZlW2ldID0gZ2FpbjsKIAogCS8qIFJpbmcgRGFtcGluZyBDb2RlICovCiAJZm9yIChpID0gMDsgaSA8PSA0OyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL2xpbnV4L2FuZHJvaWRfcG1lbS5oIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbGludXgvYW5kcm9pZF9wbWVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZjMDVkNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL2xpbnV4L2FuZHJvaWRfcG1lbS5oCkBAIC0wLDAgKzEsODAgQEAKKy8qIGRyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL2xpbnV4L2FuZHJvaWRfcG1lbS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX0FORFJPSURfUE1FTV9IXworI2RlZmluZSBfQU5EUk9JRF9QTUVNX0hfCisKKyNkZWZpbmUgUE1FTV9JT0NUTF9NQUdJQyAncCcKKyNkZWZpbmUgUE1FTV9HRVRfUEhZUwkJX0lPVyhQTUVNX0lPQ1RMX01BR0lDLCAxLCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIFBNRU1fTUFQCQlfSU9XKFBNRU1fSU9DVExfTUFHSUMsIDIsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgUE1FTV9HRVRfU0laRQkJX0lPVyhQTUVNX0lPQ1RMX01BR0lDLCAzLCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIFBNRU1fVU5NQVAJCV9JT1coUE1FTV9JT0NUTF9NQUdJQywgNCwgdW5zaWduZWQgaW50KQorLyogVGhpcyBpb2N0bCB3aWxsIGFsbG9jYXRlIHBtZW0gc3BhY2UsIGJhY2tpbmcgdGhlIGZpbGUsIGl0IHdpbGwgZmFpbAorICogaWYgdGhlIGZpbGUgYWxyZWFkeSBoYXMgYW4gYWxsb2NhdGlvbiwgcGFzcyBpdCB0aGUgbGVuIGFzIHRoZSBhcmd1bWVudAorICogdG8gdGhlIGlvY3RsICovCisjZGVmaW5lIFBNRU1fQUxMT0NBVEUJCV9JT1coUE1FTV9JT0NUTF9NQUdJQywgNSwgdW5zaWduZWQgaW50KQorLyogVGhpcyB3aWxsIGNvbm5lY3QgYSBvbmUgcG1lbSBmaWxlIHRvIGFub3RoZXIsIHBhc3MgdGhlIGZpbGUgdGhhdCBpcyBhbHJlYWR5CisgKiBiYWNrZWQgaW4gbWVtb3J5IGFzIHRoZSBhcmd1bWVudCB0byB0aGUgaW9jdGwKKyAqLworI2RlZmluZSBQTUVNX0NPTk5FQ1QJCV9JT1coUE1FTV9JT0NUTF9NQUdJQywgNiwgdW5zaWduZWQgaW50KQorLyogUmV0dXJucyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgcG1lbSByZWdpb24gaXQgaXMgc2VudCB0byBhcyBhIHBtZW1fcmVnaW9uCisgKiBzdHJ1Y3QgKHdpdGggb2Zmc2V0IHNldCB0byAwKS4KKyAqLworI2RlZmluZSBQTUVNX0dFVF9UT1RBTF9TSVpFCV9JT1coUE1FTV9JT0NUTF9NQUdJQywgNywgdW5zaWduZWQgaW50KQorLyogUmV2b2tlcyBncHUgcmVnaXN0ZXJzIGFuZCByZXNldHMgdGhlIGdwdS4gIFBhc3MgYSBwb2ludGVyIHRvIHRoZQorICogc3RhcnQgb2YgdGhlIG1hcHBlZCBncHUgcmVncyAodGhlIHZhZGRyIHJldHVybmVkIGJ5IG1tYXApIGFzIHRoZSBhcmd1bWVudC4KKyAqLworI2RlZmluZSBIVzNEX1JFVk9LRV9HUFUJCV9JT1coUE1FTV9JT0NUTF9NQUdJQywgOCwgdW5zaWduZWQgaW50KQorI2RlZmluZSBIVzNEX0dSQU5UX0dQVQkJX0lPVyhQTUVNX0lPQ1RMX01BR0lDLCA5LCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIEhXM0RfV0FJVF9GT1JfSU5URVJSVVBUCV9JT1coUE1FTV9JT0NUTF9NQUdJQywgMTAsIHVuc2lnbmVkIGludCkKKworaW50IGdldF9wbWVtX2ZpbGUoaW50IGZkLCB1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqdnN0YXJ0LAorCQkgIHVuc2lnbmVkIGxvbmcgKmVuZCwgc3RydWN0IGZpbGUgKipmaWxwKTsKK2ludCBnZXRfcG1lbV91c2VyX2FkZHIoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LAorCQkgICAgICAgdW5zaWduZWQgbG9uZyAqZW5kKTsKK3ZvaWQgcHV0X3BtZW1fZmlsZShzdHJ1Y3QgZmlsZSogZmlsZSk7Cit2b2lkIGZsdXNoX3BtZW1fZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4pOworCitzdHJ1Y3QgYW5kcm9pZF9wbWVtX3BsYXRmb3JtX2RhdGEKK3sKKwljb25zdCBjaGFyKiBuYW1lOworCS8qIHN0YXJ0aW5nIHBoeXNpY2FsIGFkZHJlc3Mgb2YgbWVtb3J5IHJlZ2lvbiAqLworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJLyogc2l6ZSBvZiBtZW1vcnkgcmVnaW9uICovCisJdW5zaWduZWQgbG9uZyBzaXplOworCS8qIHNldCB0byBpbmRpY2F0ZSB0aGUgcmVnaW9uIHNob3VsZCBub3QgYmUgbWFuYWdlZCB3aXRoIGFuIGFsbG9jYXRvciAqLworCXVuc2lnbmVkIG5vX2FsbG9jYXRvcjsKKwkvKiBzZXQgdG8gaW5kaWNhdGUgbWFwcyBvZiB0aGlzIHJlZ2lvbiBzaG91bGQgYmUgY2FjaGVkLCBpZiBhIG1peCBvZgorCSAqIGNhY2hlZCBhbmQgdW5jYWNoZWQgaXMgZGVzaXJlZCwgc2V0IHRoaXMgYW5kIG9wZW4gdGhlIGRldmljZSB3aXRoCisJICogT19TWU5DIHRvIGdldCBhbiB1bmNhY2hlZCByZWdpb24gKi8KKwl1bnNpZ25lZCBjYWNoZWQ7CisJLyogVGhlIE1TTTdrIGhhcyBiaXRzIHRvIGVuYWJsZSBhIHdyaXRlIGJ1ZmZlciBpbiB0aGUgYnVzIGNvbnRyb2xsZXIqLworCXVuc2lnbmVkIGJ1ZmZlcmVkOworfTsKKworc3RydWN0IHBtZW1fcmVnaW9uIHsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwl1bnNpZ25lZCBsb25nIGxlbjsKK307CisKK2ludCBwbWVtX3NldHVwKHN0cnVjdCBhbmRyb2lkX3BtZW1fcGxhdGZvcm1fZGF0YSAqcGRhdGEsCisJICAgICAgIGxvbmcgKCppb2N0bCkoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKSwKKwkgICAgICAgaW50ICgqcmVsZWFzZSkoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopKTsKKworaW50IHBtZW1fcmVtYXAoc3RydWN0IHBtZW1fcmVnaW9uICpyZWdpb24sIHN0cnVjdCBmaWxlICpmaWxlLAorCSAgICAgICB1bnNpZ25lZCBvcGVyYXRpb24pOworCisjZW5kaWYgLy9fQU5EUk9JRF9QUFBfSF8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbGludXgvZ3Bpb19ldmVudC5oIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbGludXgvZ3Bpb19ldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYzVkYTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9saW51eC9ncGlvX2V2ZW50LmgKQEAgLTAsMCArMSwxNTQgQEAKKy8qIGRyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL2xpbnV4L2dwaW9fZXZlbnQuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBHb29nbGUsIEluYy4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9MSU5VWF9HUElPX0VWRU5UX0gKKyNkZWZpbmUgX0xJTlVYX0dQSU9fRVZFTlRfSAorCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKworZW51bSB7CisJR1BJT19FVkVOVF9GVU5DX1VOSU5JVCAgPSAweDAsCisJR1BJT19FVkVOVF9GVU5DX0lOSVQgICAgPSAweDEsCisJR1BJT19FVkVOVF9GVU5DX1NVU1BFTkQgPSAweDIsCisJR1BJT19FVkVOVF9GVU5DX1JFU1VNRSAgPSAweDMsCit9Oworc3RydWN0IGdwaW9fZXZlbnRfaW5mbyB7CisJaW50ICgqZnVuYykoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LAorCQkgICAgc3RydWN0IGdwaW9fZXZlbnRfaW5mbyAqaW5mbywKKwkJICAgIHZvaWQgKipkYXRhLCBpbnQgZnVuYyk7CisJaW50ICgqZXZlbnQpKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiwKKwkJICAgICBzdHJ1Y3QgZ3Bpb19ldmVudF9pbmZvICppbmZvLAorCQkgICAgIHZvaWQgKipkYXRhLCB1bnNpZ25lZCBpbnQgdHlwZSwKKwkJICAgICB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKTsgLyogb3V0IGV2ZW50cyAqLworfTsKKworc3RydWN0IGdwaW9fZXZlbnRfcGxhdGZvcm1fZGF0YSB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3QgZ3Bpb19ldmVudF9pbmZvICoqaW5mbzsKKwlzaXplX3QgaW5mb19jb3VudDsKKwlpbnQgKCpwb3dlcikoY29uc3Qgc3RydWN0IGdwaW9fZXZlbnRfcGxhdGZvcm1fZGF0YSAqcGRhdGEsIGJvb2wgb24pOworfTsKKworI2RlZmluZSBHUElPX0VWRU5UX0RFVl9OQU1FICJncGlvLWV2ZW50IgorCisvKiBLZXkgbWF0cml4ICovCisKK2VudW0gZ3Bpb19ldmVudF9tYXRyaXhfZmxhZ3MgeworCS8qIHVuc2V0OiBkcml2ZSBhY3RpdmUgb3V0cHV0IGxvdywgc2V0OiBkcml2ZSBhY3RpdmUgb3V0cHV0IGhpZ2ggKi8KKwlHUElPS1BGX0FDVElWRV9ISUdIICAgICAgICAgICAgICA9IDFVIDw8IDAsCisJR1BJT0tQRl9ERUJPVU5DRSAgICAgICAgICAgICAgICAgPSAxVSA8PCAxLAorCUdQSU9LUEZfUkVNT1ZFX1NPTUVfUEhBTlRPTV9LRVlTID0gMVUgPDwgMiwKKwlHUElPS1BGX1JFTU9WRV9QSEFOVE9NX0tFWVMgICAgICA9IEdQSU9LUEZfUkVNT1ZFX1NPTUVfUEhBTlRPTV9LRVlTIHwKKwkJCQkJICAgR1BJT0tQRl9ERUJPVU5DRSwKKwlHUElPS1BGX0RSSVZFX0lOQUNUSVZFICAgICAgICAgICA9IDFVIDw8IDMsCisJR1BJT0tQRl9MRVZFTF9UUklHR0VSRURfSVJRICAgICAgPSAxVSA8PCA0LAorCUdQSU9LUEZfUFJJTlRfVU5NQVBQRURfS0VZUyAgICAgID0gMVUgPDwgMTYsCisJR1BJT0tQRl9QUklOVF9NQVBQRURfS0VZUyAgICAgICAgPSAxVSA8PCAxNywKKwlHUElPS1BGX1BSSU5UX1BIQU5UT01fS0VZUyAgICAgICA9IDFVIDw8IDE4LAorfTsKKworZXh0ZXJuIGludCBncGlvX2V2ZW50X21hdHJpeF9mdW5jKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiwKKwkJCXN0cnVjdCBncGlvX2V2ZW50X2luZm8gKmluZm8sIHZvaWQgKipkYXRhLCBpbnQgZnVuYyk7CitzdHJ1Y3QgZ3Bpb19ldmVudF9tYXRyaXhfaW5mbyB7CisJLyogaW5pdGlhbGl6ZSB0byBncGlvX2V2ZW50X21hdHJpeF9mdW5jICovCisJc3RydWN0IGdwaW9fZXZlbnRfaW5mbyBpbmZvOworCS8qIHNpemUgbXVzdCBiZSBuaW5wdXRzICogbm91dHB1dHMgKi8KKwljb25zdCB1bnNpZ25lZCBzaG9ydCAqa2V5bWFwOworCXVuc2lnbmVkIGludCAqaW5wdXRfZ3Bpb3M7CisJdW5zaWduZWQgaW50ICpvdXRwdXRfZ3Bpb3M7CisJdW5zaWduZWQgaW50IG5pbnB1dHM7CisJdW5zaWduZWQgaW50IG5vdXRwdXRzOworCS8qIHRpbWUgdG8gd2FpdCBiZWZvcmUgcmVhZGluZyBpbnB1dHMgYWZ0ZXIgZHJpdmluZyBlYWNoIG91dHB1dCAqLworCWt0aW1lX3Qgc2V0dGxlX3RpbWU7CisJLyogdGltZSB0byB3YWl0IGJlZm9yZSBzY2FubmluZyB0aGUga2V5cGFkIGEgc2Vjb25kIHRpbWUgKi8KKwlrdGltZV90IGRlYm91bmNlX2RlbGF5OworCWt0aW1lX3QgcG9sbF90aW1lOworCXVuc2lnbmVkIGZsYWdzOworfTsKKworLyogRGlyZWN0bHkgY29ubmVjdGVkIGlucHV0cyBhbmQgb3V0cHV0cyAqLworCitlbnVtIGdwaW9fZXZlbnRfZGlyZWN0X2ZsYWdzIHsKKwlHUElPRURGX0FDVElWRV9ISUdIICAgICAgICAgPSAxVSA8PCAwLAorLyoJR1BJT0VERl9VU0VfRE9XTl9JUlEgICAgICAgID0gMVUgPDwgMSwgKi8KKy8qCUdQSU9FREZfVVNFX0lSUSAgICAgICAgICAgICA9ICgxVSA8PCAyKSB8IEdQSU9JREZfVVNFX0RPV05fSVJRLCAqLworCUdQSU9FREZfUFJJTlRfS0VZUyAgICAgICAgICA9IDFVIDw8IDgsCisJR1BJT0VERl9QUklOVF9LRVlfREVCT1VOQ0UgID0gMVUgPDwgOSwKK307CisKK3N0cnVjdCBncGlvX2V2ZW50X2RpcmVjdF9lbnRyeSB7CisJdWludDMyX3QgZ3BpbzoyMzsKKwl1aW50MzJfdCBjb2RlOjk7Cit9OworCisvKiBpbnB1dHMgKi8KK2V4dGVybiBpbnQgZ3Bpb19ldmVudF9pbnB1dF9mdW5jKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiwKKwkJCXN0cnVjdCBncGlvX2V2ZW50X2luZm8gKmluZm8sIHZvaWQgKipkYXRhLCBpbnQgZnVuYyk7CitzdHJ1Y3QgZ3Bpb19ldmVudF9pbnB1dF9pbmZvIHsKKwkvKiBpbml0aWFsaXplIHRvIGdwaW9fZXZlbnRfaW5wdXRfZnVuYyAqLworCXN0cnVjdCBncGlvX2V2ZW50X2luZm8gaW5mbzsKKwlrdGltZV90IGRlYm91bmNlX3RpbWU7CisJa3RpbWVfdCBwb2xsX3RpbWU7CisJdWludDE2X3QgZmxhZ3M7CisJdWludDE2X3QgdHlwZTsKKwljb25zdCBzdHJ1Y3QgZ3Bpb19ldmVudF9kaXJlY3RfZW50cnkgKmtleW1hcDsKKwlzaXplX3Qga2V5bWFwX3NpemU7Cit9OworCisvKiBvdXRwdXRzICovCitleHRlcm4gaW50IGdwaW9fZXZlbnRfb3V0cHV0X2Z1bmMoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LAorCQkJc3RydWN0IGdwaW9fZXZlbnRfaW5mbyAqaW5mbywgdm9pZCAqKmRhdGEsIGludCBmdW5jKTsKK2V4dGVybiBpbnQgZ3Bpb19ldmVudF9vdXRwdXRfZXZlbnQoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LAorCQkJc3RydWN0IGdwaW9fZXZlbnRfaW5mbyAqaW5mbywgdm9pZCAqKmRhdGEsCisJCQl1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSk7CitzdHJ1Y3QgZ3Bpb19ldmVudF9vdXRwdXRfaW5mbyB7CisJLyogaW5pdGlhbGl6ZSB0byBncGlvX2V2ZW50X291dHB1dF9mdW5jIGFuZCBncGlvX2V2ZW50X291dHB1dF9ldmVudCAqLworCXN0cnVjdCBncGlvX2V2ZW50X2luZm8gaW5mbzsKKwl1aW50MTZfdCBmbGFnczsKKwl1aW50MTZfdCB0eXBlOworCWNvbnN0IHN0cnVjdCBncGlvX2V2ZW50X2RpcmVjdF9lbnRyeSAqa2V5bWFwOworCXNpemVfdCBrZXltYXBfc2l6ZTsKK307CisKKworLyogYXhlcyAqLworCitlbnVtIGdwaW9fZXZlbnRfYXhpc19mbGFncyB7CisJR1BJT0VBRl9QUklOVF9VTktOT1dOX0RJUkVDVElPTiAgPSAxVSA8PCAxNiwKKwlHUElPRUFGX1BSSU5UX1JBVyAgICAgICAgICAgICAgICA9IDFVIDw8IDE3LAorCUdQSU9FQUZfUFJJTlRfRVZFTlQgICAgICAgICAgICAgID0gMVUgPDwgMTgsCit9OworCitleHRlcm4gaW50IGdwaW9fZXZlbnRfYXhpc19mdW5jKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldiwKKwkJCXN0cnVjdCBncGlvX2V2ZW50X2luZm8gKmluZm8sIHZvaWQgKipkYXRhLCBpbnQgZnVuYyk7CitzdHJ1Y3QgZ3Bpb19ldmVudF9heGlzX2luZm8geworCS8qIGluaXRpYWxpemUgdG8gZ3Bpb19ldmVudF9heGlzX2Z1bmMgKi8KKwlzdHJ1Y3QgZ3Bpb19ldmVudF9pbmZvIGluZm87CisJdWludDhfdCAgY291bnQ7CisJdWludDhfdCAgdHlwZTsgLyogRVZfUkVMIG9yIEVWX0FCUyAqLworCXVpbnQxNl90IGNvZGU7CisJdWludDE2X3QgZGVjb2RlZF9zaXplOworCXVpbnQxNl90ICgqbWFwKShzdHJ1Y3QgZ3Bpb19ldmVudF9heGlzX2luZm8gKmluZm8sIHVpbnQxNl90IGluKTsKKwl1aW50MzJfdCAqZ3BpbzsKKwl1aW50MzJfdCBmbGFnczsKK307CisjZGVmaW5lIGdwaW9fYXhpc18yYml0X2dyYXlfbWFwIGdwaW9fYXhpc180Yml0X2dyYXlfbWFwCisjZGVmaW5lIGdwaW9fYXhpc18zYml0X2dyYXlfbWFwIGdwaW9fYXhpc180Yml0X2dyYXlfbWFwCit1aW50MTZfdCBncGlvX2F4aXNfNGJpdF9ncmF5X21hcCgKKwkJCXN0cnVjdCBncGlvX2V2ZW50X2F4aXNfaW5mbyAqaW5mbywgdWludDE2X3QgaW4pOwordWludDE2X3QgZ3Bpb19heGlzXzViaXRfc2luZ2xldHJhY2tfbWFwKAorCQkJc3RydWN0IGdwaW9fZXZlbnRfYXhpc19pbmZvICppbmZvLCB1aW50MTZfdCBpbik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbGludXgvbXNtX2Fkc3AuaCBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL2xpbnV4L21zbV9hZHNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc3NWYzZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL2xpbnV4L21zbV9hZHNwLmgKQEAgLTAsMCArMSw4NCBAQAorLyogZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbGludXgvbXNtX2Fkc3AuaAorICoKKyAqIENvcHlyaWdodCAoYykgUVVBTENPTU0gSW5jb3Jwb3JhdGVkCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgR29vZ2xlLCBJbmMuCisgKiBBdXRob3I6IElsaXlhbiBNYWxjaGV2IDxpYm1AYW5kcm9pZC5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKyNpZm5kZWYgX19MSU5VWF9NU01fQURTUF9ICisjZGVmaW5lIF9fTElOVVhfTVNNX0FEU1BfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjZGVmaW5lIEFEU1BfSU9DVExfTUFHSUMgJ3EnCisKKy8qIEFEU1BfSU9DVExfV1JJVEVfQ09NTUFORCAqLworc3RydWN0IGFkc3BfY29tbWFuZF90IHsKKwl1aW50MTZfdCBxdWV1ZTsKKwl1aW50MzJfdCBsZW47CQkvKiBieXRlcyAqLworCXVpbnQ4X3QgKmRhdGE7Cit9OworCisvKiBBRFNQX0lPQ1RMX0dFVF9FVkVOVCAqLworc3RydWN0IGFkc3BfZXZlbnRfdCB7CisJdWludDE2X3QgdHlwZTsJCS8qIDEgPT0gZXZlbnQgKFJQQyksIDAgPT0gbWVzc2FnZSAoYWRzcCkgKi8KKwl1aW50MzJfdCB0aW1lb3V0X21zOwkvKiAtMSBmb3IgaW5maW5pdGUsIDAgZm9yIGltbWVkaWF0ZSByZXR1cm4gKi8KKwl1aW50MTZfdCBtc2dfaWQ7CisJdWludDE2X3QgZmxhZ3M7CQkvKiAxID09IDE2LS1iaXQgZXZlbnQsIDAgPT0gMzItYml0IGV2ZW50ICovCisJdWludDMyX3QgbGVuOwkJLyogc2l6ZSBpbiwgbnVtYmVyIG9mIGJ5dGVzIG91dCAqLworCXVpbnQ4X3QgKmRhdGE7Cit9OworCisjZGVmaW5lIEFEU1BfSU9DVExfRU5BQkxFIFwKKwlfSU9SKEFEU1BfSU9DVExfTUFHSUMsIDEsIHVuc2lnbmVkKQorCisjZGVmaW5lIEFEU1BfSU9DVExfRElTQUJMRSBcCisJX0lPUihBRFNQX0lPQ1RMX01BR0lDLCAyLCB1bnNpZ25lZCkKKworI2RlZmluZSBBRFNQX0lPQ1RMX0RJU0FCTEVfQUNLIFwKKwlfSU9SKEFEU1BfSU9DVExfTUFHSUMsIDMsIHVuc2lnbmVkKQorCisjZGVmaW5lIEFEU1BfSU9DVExfV1JJVEVfQ09NTUFORCBcCisJX0lPUihBRFNQX0lPQ1RMX01BR0lDLCA0LCBzdHJ1Y3QgYWRzcF9jb21tYW5kX3QgKikKKworI2RlZmluZSBBRFNQX0lPQ1RMX0dFVF9FVkVOVCBcCisJX0lPV1IoQURTUF9JT0NUTF9NQUdJQywgNSwgc3RydWN0IGFkc3BfZXZlbnRfZGF0YV90ICopCisKKyNkZWZpbmUgQURTUF9JT0NUTF9TRVRfQ0xLUkFURSBcCisJX0lPUihBRFNQX0lPQ1RMX01BR0lDLCA2LCB1bnNpZ25lZCkKKworI2RlZmluZSBBRFNQX0lPQ1RMX0RJU0FCTEVfRVZFTlRfUlNQIFwKKwlfSU9SKEFEU1BfSU9DVExfTUFHSUMsIDEwLCB1bnNpZ25lZCkKKworc3RydWN0IGFkc3BfcG1lbV9pbmZvIHsKKyAgICAgICAgaW50IGZkOworICAgICAgICB2b2lkICp2YWRkcjsKK307CisKKyNkZWZpbmUgQURTUF9JT0NUTF9SRUdJU1RFUl9QTUVNIFwKKwlfSU9XKEFEU1BfSU9DVExfTUFHSUMsIDEzLCB1bnNpZ25lZCkKKworI2RlZmluZSBBRFNQX0lPQ1RMX1VOUkVHSVNURVJfUE1FTSBcCisJX0lPVyhBRFNQX0lPQ1RMX01BR0lDLCAxNCwgdW5zaWduZWQpCisKKy8qIENhdXNlIGFueSBmdXJ0aGVyIEdFVF9FVkVOVCBpb2N0bHMgdG8gZmFpbCAoLUVOT0RFVikKKyAqIHVudGlsIHRoZSBkZXZpY2UgaXMgY2xvc2VkIGFuZCByZW9wZW5lZC4gIFVzZWZ1bCBmb3IKKyAqIHRlcm1pbmF0aW5nIGV2ZW50IGRpc3BhdGNoIHRocmVhZHMKKyAqLworI2RlZmluZSBBRFNQX0lPQ1RMX0FCT1JUX0VWRU5UX1JFQUQgXAorCV9JT1coQURTUF9JT0NUTF9NQUdJQywgMTUsIHVuc2lnbmVkKQorCisjZGVmaW5lIEFEU1BfSU9DVExfTElOS19UQVNLIFwKKwlfSU9XKEFEU1BfSU9DVExfTUFHSUMsIDE2LCB1bnNpZ25lZCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9saW51eC9tc21fYXVkaW8uaCBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL2xpbnV4L21zbV9hdWRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYmRhYTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9saW51eC9tc21fYXVkaW8uaApAQCAtMCwwICsxLDExNSBAQAorLyogZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbGludXgvbXNtX2F1ZGlvLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlLCBJbmMuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX01TTV9BVURJT19ICisjZGVmaW5lIF9fTElOVVhfTVNNX0FVRElPX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKworLyogUENNIEF1ZGlvICovCisKKyNkZWZpbmUgQVVESU9fSU9DVExfTUFHSUMgJ2EnCisKKyNkZWZpbmUgQVVESU9fU1RBUlQgICAgICAgIF9JT1coQVVESU9fSU9DVExfTUFHSUMsIDAsIHVuc2lnbmVkKQorI2RlZmluZSBBVURJT19TVE9QICAgICAgICAgX0lPVyhBVURJT19JT0NUTF9NQUdJQywgMSwgdW5zaWduZWQpCisjZGVmaW5lIEFVRElPX0ZMVVNIICAgICAgICBfSU9XKEFVRElPX0lPQ1RMX01BR0lDLCAyLCB1bnNpZ25lZCkKKyNkZWZpbmUgQVVESU9fR0VUX0NPTkZJRyAgIF9JT1IoQVVESU9fSU9DVExfTUFHSUMsIDMsIHVuc2lnbmVkKQorI2RlZmluZSBBVURJT19TRVRfQ09ORklHICAgX0lPVyhBVURJT19JT0NUTF9NQUdJQywgNCwgdW5zaWduZWQpCisjZGVmaW5lIEFVRElPX0dFVF9TVEFUUyAgICBfSU9SKEFVRElPX0lPQ1RMX01BR0lDLCA1LCB1bnNpZ25lZCkKKyNkZWZpbmUgQVVESU9fRU5BQkxFX0FVRFBQIF9JT1coQVVESU9fSU9DVExfTUFHSUMsIDYsIHVuc2lnbmVkKQorI2RlZmluZSBBVURJT19TRVRfQURSQyAgICAgX0lPVyhBVURJT19JT0NUTF9NQUdJQywgNywgdW5zaWduZWQpCisjZGVmaW5lIEFVRElPX1NFVF9FUSAgICAgICBfSU9XKEFVRElPX0lPQ1RMX01BR0lDLCA4LCB1bnNpZ25lZCkKKyNkZWZpbmUgQVVESU9fU0VUX1JYX0lJUiAgIF9JT1coQVVESU9fSU9DVExfTUFHSUMsIDksIHVuc2lnbmVkKQorI2RlZmluZSBBVURJT19TRVRfVk9MVU1FICAgX0lPVyhBVURJT19JT0NUTF9NQUdJQywgMTAsIHVuc2lnbmVkKQorI2RlZmluZSBBVURJT19FTkFCTEVfQVVEUFJFICBfSU9XKEFVRElPX0lPQ1RMX01BR0lDLCAxMSwgdW5zaWduZWQpCisjZGVmaW5lIEFVRElPX1NFVF9BR0MgICAgICAgIF9JT1coQVVESU9fSU9DVExfTUFHSUMsIDEyLCB1bnNpZ25lZCkKKyNkZWZpbmUgQVVESU9fU0VUX05TICAgICAgICAgX0lPVyhBVURJT19JT0NUTF9NQUdJQywgMTMsIHVuc2lnbmVkKQorI2RlZmluZSBBVURJT19TRVRfVFhfSUlSICAgICBfSU9XKEFVRElPX0lPQ1RMX01BR0lDLCAxNCwgdW5zaWduZWQpCisjZGVmaW5lIEFVRElPX1BBVVNFCSAgICAgX0lPVyhBVURJT19JT0NUTF9NQUdJQywgMTUsIHVuc2lnbmVkKQorI2RlZmluZSBBVURJT19HRVRfUENNX0NPTkZJRyBfSU9SKEFVRElPX0lPQ1RMX01BR0lDLCAzMCwgdW5zaWduZWQpCisjZGVmaW5lIEFVRElPX1NFVF9QQ01fQ09ORklHIF9JT1coQVVESU9fSU9DVExfTUFHSUMsIDMxLCB1bnNpZ25lZCkKKyNkZWZpbmUgQVVESU9fU1dJVENIX0RFVklDRSAgX0lPVyhBVURJT19JT0NUTF9NQUdJQywgMzIsIHVuc2lnbmVkKQorCisjZGVmaW5lCUFVRElPX01BWF9DT01NT05fSU9DVExfTlVNCTEwMAorCisjZGVmaW5lCUFVRElPX01BWF9DT01NT05fSU9DVExfTlVNCTEwMAorCitzdHJ1Y3QgbXNtX2F1ZGlvX2NvbmZpZyB7CisJdWludDMyX3QgYnVmZmVyX3NpemU7CisJdWludDMyX3QgYnVmZmVyX2NvdW50OworCXVpbnQzMl90IGNoYW5uZWxfY291bnQ7CisJdWludDMyX3Qgc2FtcGxlX3JhdGU7CisJdWludDMyX3QgdHlwZTsKKwl1aW50MzJfdCB1bnVzZWRbM107Cit9OworCitzdHJ1Y3QgbXNtX2F1ZGlvX3N0YXRzIHsKKwl1aW50MzJfdCBieXRlX2NvdW50OworCXVpbnQzMl90IHNhbXBsZV9jb3VudDsKKwl1aW50MzJfdCB1bnVzZWRbMl07Cit9OworCisvKiBBdWRpbyByb3V0aW5nICovCisKKyNkZWZpbmUgU05EX0lPQ1RMX01BR0lDICdzJworCisjZGVmaW5lIFNORF9NVVRFX1VOTVVURUQgMAorI2RlZmluZSBTTkRfTVVURV9NVVRFRCAgIDEKKworc3RydWN0IG1zbV9zbmRfZGV2aWNlX2NvbmZpZyB7CisJdWludDMyX3QgZGV2aWNlOworCXVpbnQzMl90IGVhcl9tdXRlOworCXVpbnQzMl90IG1pY19tdXRlOworfTsKKworI2RlZmluZSBTTkRfU0VUX0RFVklDRSBfSU9XKFNORF9JT0NUTF9NQUdJQywgMiwgc3RydWN0IG1zbV9kZXZpY2VfY29uZmlnICopCisKKyNkZWZpbmUgU05EX01FVEhPRF9WT0lDRSAwCisKK3N0cnVjdCBtc21fc25kX3ZvbHVtZV9jb25maWcgeworCXVpbnQzMl90IGRldmljZTsKKwl1aW50MzJfdCBtZXRob2Q7CisJdWludDMyX3Qgdm9sdW1lOworfTsKKworI2RlZmluZSBTTkRfU0VUX1ZPTFVNRSBfSU9XKFNORF9JT0NUTF9NQUdJQywgMywgc3RydWN0IG1zbV9zbmRfdm9sdW1lX2NvbmZpZyAqKQorCisvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgU05EIGVuZHBvaW50cyBzdXBwb3J0ZWQuICovCisKKyNkZWZpbmUgU05EX0dFVF9OVU1fRU5EUE9JTlRTIF9JT1IoU05EX0lPQ1RMX01BR0lDLCA0LCB1bnNpZ25lZCAqKQorCitzdHJ1Y3QgbXNtX3NuZF9lbmRwb2ludCB7CisJaW50IGlkOyAvKiBpbnB1dCBhbmQgb3V0cHV0ICovCisJY2hhciBuYW1lWzY0XTsgLyogb3V0cHV0IG9ubHkgKi8KK307CisKKy8qIFRha2VzIGFuIGluZGV4IGJldHdlZW4gMCBhbmQgb25lIGxlc3MgdGhhbiB0aGUgbnVtYmVyIHJldHVybmVkIGJ5CisgKiBTTkRfR0VUX05VTV9FTkRQT0lOVFMsIGFuZCByZXR1cm5zIHRoZSBTTkQgaW5kZXggYW5kIG5hbWUgb2YgYQorICogU05EIGVuZHBvaW50LiAgT24gaW5wdXQsIHRoZSAuaWQgZmllbGQgY29udGFpbnMgdGhlIG51bWJlciBvZiB0aGUKKyAqIGVuZHBvaW50LCBhbmQgb24gZXhpdCBpdCBjb250YWlucyB0aGUgU05EIGluZGV4LCB3aGlsZSAubmFtZSBjb250YWlucworICogdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBlbmRwb2ludC4KKyAqLworCisjZGVmaW5lIFNORF9HRVRfRU5EUE9JTlQgX0lPV1IoU05EX0lPQ1RMX01BR0lDLCA1LCBzdHJ1Y3QgbXNtX3NuZF9lbmRwb2ludCAqKQorCitzdHJ1Y3QgbXNtX2F1ZGlvX3BjbV9jb25maWcgeworCXVpbnQzMl90IHBjbV9mZWVkYmFjazsJLyogMCAtIGRpc2FibGUgPiAwIC0gZW5hYmxlICovCisJdWludDMyX3QgYnVmZmVyX2NvdW50OwkvKiBOdW1iZXIgb2YgYnVmZmVycyB0byBhbGxvY2F0ZSAqLworCXVpbnQzMl90IGJ1ZmZlcl9zaXplOwkvKiBTaXplIG9mIGJ1ZmZlciBmb3IgY2FwdHVyaW5nIG9mCisJCQkJICAgUENNIHNhbXBsZXMgKi8KK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL2xpbnV4L21zbV9ycGNyb3V0ZXIuaCBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL2xpbnV4L21zbV9ycGNyb3V0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDg0NWZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbGludXgvbXNtX3JwY3JvdXRlci5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qIGRyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL2xpbnV4L21zbV9ycGNyb3V0ZXIuaAorICoKKyAqIENvcHlyaWdodCAoYykgUVVBTENPTU0gSW5jb3Jwb3JhdGVkCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgR29vZ2xlLCBJbmMuCisgKiBBdXRob3I6IFNhbiBNZWhhdCA8c2FuQGFuZHJvaWQuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisjaWZuZGVmIF9fTElOVVhfTVNNX1JQQ1JPVVRFUl9ICisjZGVmaW5lIF9fTElOVVhfTVNNX1JQQ1JPVVRFUl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNkZWZpbmUgUlBDX1JPVVRFUl9WRVJTSU9OX1YxIDB4MDAwMTAwMDAKKworc3RydWN0IHJwY3JvdXRlcl9pb2N0bF9zZXJ2ZXJfYXJncyB7CisJdWludDMyX3QgcHJvZzsKKwl1aW50MzJfdCB2ZXJzOworfTsKKworI2RlZmluZSBSUENfUk9VVEVSX0lPQ1RMX01BR0lDICgweEMxKQorCisjZGVmaW5lIFJQQ19ST1VURVJfSU9DVExfR0VUX1ZFUlNJT04gXAorCV9JT1IoUlBDX1JPVVRFUl9JT0NUTF9NQUdJQywgMCwgdW5zaWduZWQgaW50KQorCisjZGVmaW5lIFJQQ19ST1VURVJfSU9DVExfR0VUX01UVSBcCisJX0lPUihSUENfUk9VVEVSX0lPQ1RMX01BR0lDLCAxLCB1bnNpZ25lZCBpbnQpCisKKyNkZWZpbmUgUlBDX1JPVVRFUl9JT0NUTF9SRUdJU1RFUl9TRVJWRVIgXAorCV9JT1dSKFJQQ19ST1VURVJfSU9DVExfTUFHSUMsIDIsIHVuc2lnbmVkIGludCkKKworI2RlZmluZSBSUENfUk9VVEVSX0lPQ1RMX1VOUkVHSVNURVJfU0VSVkVSIFwKKwlfSU9XUihSUENfUk9VVEVSX0lPQ1RMX01BR0lDLCAzLCB1bnNpZ25lZCBpbnQpCisKKyNkZWZpbmUgUlBDX1JPVVRFUl9JT0NUTF9HRVRfTUlOT1JfVkVSU0lPTiBcCisJX0lPVyhSUENfUk9VVEVSX0lPQ1RMX01BR0lDLCA0LCB1bnNpZ25lZCBpbnQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbGludXgvd2FrZWxvY2suaCBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL2xpbnV4L3dha2Vsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNjMzFhNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL2xpbnV4L3dha2Vsb2NrLmgKQEAgLTAsMCArMSw5MSBAQAorLyogZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbGludXgvd2FrZWxvY2suaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX1dBS0VMT0NLX0gKKyNkZWZpbmUgX0xJTlVYX1dBS0VMT0NLX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorCisvKiBBIHdha2VfbG9jayBwcmV2ZW50cyB0aGUgc3lzdGVtIGZyb20gZW50ZXJpbmcgc3VzcGVuZCBvciBvdGhlciBsb3cgcG93ZXIKKyAqIHN0YXRlcyB3aGVuIGFjdGl2ZS4gSWYgdGhlIHR5cGUgaXMgc2V0IHRvIFdBS0VfTE9DS19TVVNQRU5ELCB0aGUgd2FrZV9sb2NrCisgKiBwcmV2ZW50cyBhIGZ1bGwgc3lzdGVtIHN1c3BlbmQuIElmIHRoZSB0eXBlIGlzIFdBS0VfTE9DS19JRExFLCBsb3cgcG93ZXIKKyAqIHN0YXRlcyB0aGF0IGNhdXNlIGxhcmdlIGludGVycnVwdCBsYXRlbmNpZXMgb3IgdGhhdCBkaXNhYmxlIGEgc2V0IG9mCisgKiBpbnRlcnJ1cHRzIHdpbGwgbm90IGVudGVyZWQgZnJvbSBpZGxlIHVudGlsIHRoZSB3YWtlX2xvY2tzIGFyZSByZWxlYXNlZC4KKyAqLworCitlbnVtIHsKKwlXQUtFX0xPQ0tfU1VTUEVORCwgLyogUHJldmVudCBzdXNwZW5kICovCisJV0FLRV9MT0NLX0lETEUsICAgIC8qIFByZXZlbnQgbG93IHBvd2VyIGlkbGUgKi8KKwlXQUtFX0xPQ0tfVFlQRV9DT1VOVAorfTsKKworc3RydWN0IHdha2VfbG9jayB7CisjaWZkZWYgQ09ORklHX0hBU19XQUtFTE9DSworCXN0cnVjdCBsaXN0X2hlYWQgICAgbGluazsKKwlpbnQgICAgICAgICAgICAgICAgIGZsYWdzOworCWNvbnN0IGNoYXIgICAgICAgICAqbmFtZTsKKwl1bnNpZ25lZCBsb25nICAgICAgIGV4cGlyZXM7CisjaWZkZWYgQ09ORklHX1dBS0VMT0NLX1NUQVQKKwlzdHJ1Y3QgeworCQlpbnQgICAgICAgICAgICAgY291bnQ7CisJCWludCAgICAgICAgICAgICBleHBpcmVfY291bnQ7CisJCWludCAgICAgICAgICAgICB3YWtldXBfY291bnQ7CisJCWt0aW1lX3QgICAgICAgICB0b3RhbF90aW1lOworCQlrdGltZV90ICAgICAgICAgcHJldmVudF9zdXNwZW5kX3RpbWU7CisJCWt0aW1lX3QgICAgICAgICBtYXhfdGltZTsKKwkJa3RpbWVfdCAgICAgICAgIGxhc3RfdGltZTsKKwl9IHN0YXQ7CisjZW5kaWYKKyNlbmRpZgorfTsKKworI2lmZGVmIENPTkZJR19IQVNfV0FLRUxPQ0sKKwordm9pZCB3YWtlX2xvY2tfaW5pdChzdHJ1Y3Qgd2FrZV9sb2NrICpsb2NrLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbmFtZSk7Cit2b2lkIHdha2VfbG9ja19kZXN0cm95KHN0cnVjdCB3YWtlX2xvY2sgKmxvY2spOwordm9pZCB3YWtlX2xvY2soc3RydWN0IHdha2VfbG9jayAqbG9jayk7Cit2b2lkIHdha2VfbG9ja190aW1lb3V0KHN0cnVjdCB3YWtlX2xvY2sgKmxvY2ssIGxvbmcgdGltZW91dCk7Cit2b2lkIHdha2VfdW5sb2NrKHN0cnVjdCB3YWtlX2xvY2sgKmxvY2spOworCisvKiB3YWtlX2xvY2tfYWN0aXZlIHJldHVybnMgYSBub24temVybyB2YWx1ZSBpZiB0aGUgd2FrZV9sb2NrIGlzIGN1cnJlbnRseQorICogbG9ja2VkLiBJZiB0aGUgd2FrZV9sb2NrIGhhcyBhIHRpbWVvdXQsIGl0IGRvZXMgbm90IGNoZWNrIHRoZSB0aW1lb3V0CisgKiBidXQgaWYgdGhlIHRpbWVvdXQgaGFkIGFyZWFkeSBiZWVuIGNoZWNrZWQgaXQgd2lsbCByZXR1cm4gMC4KKyAqLworaW50IHdha2VfbG9ja19hY3RpdmUoc3RydWN0IHdha2VfbG9jayAqbG9jayk7CisKKy8qIGhhc193YWtlX2xvY2sgcmV0dXJucyAwIGlmIG5vIHdha2UgbG9ja3Mgb2YgdGhlIHNwZWNpZmllZCB0eXBlIGFyZSBhY3RpdmUsCisgKiBhbmQgbm9uLXplcm8gaWYgb25lIG9yIG1vcmUgd2FrZSBsb2NrcyBhcmUgaGVsZC4gU3BlY2lmaWNhbGx5IGl0IHJldHVybnMKKyAqIC0xIGlmIG9uZSBvciBtb3JlIHdha2UgbG9ja3Mgd2l0aCBubyB0aW1lb3V0IGFyZSBhY3RpdmUgb3IgdGhlCisgKiBudW1iZXIgb2YgamlmZmllcyB1bnRpbCBhbGwgYWN0aXZlIHdha2UgbG9ja3MgdGltZSBvdXQuCisgKi8KK2xvbmcgaGFzX3dha2VfbG9jayhpbnQgdHlwZSk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YWtlX2xvY2tfaW5pdChzdHJ1Y3Qgd2FrZV9sb2NrICpsb2NrLCBpbnQgdHlwZSwKKwkJCQkJY29uc3QgY2hhciAqbmFtZSkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCB3YWtlX2xvY2tfZGVzdHJveShzdHJ1Y3Qgd2FrZV9sb2NrICpsb2NrKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHdha2VfbG9jayhzdHJ1Y3Qgd2FrZV9sb2NrICpsb2NrKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHdha2VfbG9ja190aW1lb3V0KHN0cnVjdCB3YWtlX2xvY2sgKmxvY2ssIGxvbmcgdGltZW91dCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCB3YWtlX3VubG9jayhzdHJ1Y3Qgd2FrZV9sb2NrICpsb2NrKSB7fQorCitzdGF0aWMgaW5saW5lIGludCB3YWtlX2xvY2tfYWN0aXZlKHN0cnVjdCB3YWtlX2xvY2sgKmxvY2spIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgbG9uZyBoYXNfd2FrZV9sb2NrKGludCB0eXBlKSB7IHJldHVybiAwOyB9CisKKyNlbmRpZgorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9jYW1lcmEuaCBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvY2FtZXJhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwZjA0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvY2FtZXJhLmgKQEAgLTAsMCArMSwyNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBRVUFMQ09NTSBJbmNvcnBvcmF0ZWQuCisgKi8KKworI2lmbmRlZiBfX0FTTV9fQVJDSF9DQU1FUkFfSAorI2RlZmluZSBfX0FTTV9fQVJDSF9DQU1FUkFfSAorCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSAibGludXgvdHlwZXMuaCIKKworI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxtZWRpYS9tc21fY2FtZXJhLmg+CisKKyNpZmRlZiBDT05GSUdfTVNNX0NBTUVSQV9ERUJVRworI2RlZmluZSBDREJHKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fSU5GTyAibXNtX2NhbWVyYTogIiBmbXQsICMjYXJncykKKyNlbHNlCisjZGVmaW5lIENEQkcoZm10LCBhcmdzLi4uKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSBNU01fQ0FNRVJBX01TRyAwCisjZGVmaW5lIE1TTV9DQU1FUkFfRVZUIDEKKyNkZWZpbmUgTlVNX1dCX0VYUF9ORVVUUkFMX1JFR0lPTl9MSU5FUyA0CisjZGVmaW5lIE5VTV9XQl9FWFBfU1RBVF9PVVRQVVRfQlVGRkVSUyAgMworI2RlZmluZSBOVU1fQVVUT0ZPQ1VTX01VTFRJX1dJTkRPV19HUklEUyAxNgorI2RlZmluZSBOVU1fQUZfU1RBVF9PVVRQVVRfQlVGRkVSUyAgICAgIDMKKworZW51bSBtc21fcXVldWUgeworCU1TTV9DQU1fUV9DVFJMLCAgICAgLyogY29udHJvbCBjb21tYW5kIG9yIGNvbnRyb2wgY29tbWFuZCBzdGF0dXMgKi8KKwlNU01fQ0FNX1FfVkZFX0VWVCwgIC8qIGFkc3AgZXZlbnQgKi8KKwlNU01fQ0FNX1FfVkZFX01TRywgIC8qIGFkc3AgbWVzc2FnZSAqLworCU1TTV9DQU1fUV9WNEwyX1JFUSwgLyogdjRsMiByZXF1ZXN0ICovCit9OworCitlbnVtIHZmZV9yZXNwX21zZyB7CisJVkZFX0VWRU5ULAorCVZGRV9NU0dfR0VORVJBTCwKKwlWRkVfTVNHX1NOQVBTSE9ULAorCVZGRV9NU0dfT1VUUFVUMSwKKwlWRkVfTVNHX09VVFBVVDIsCisJVkZFX01TR19TVEFUU19BRiwKKwlWRkVfTVNHX1NUQVRTX1dFLAorfTsKKworc3RydWN0IG1zbV92ZmVfcGh5X2luZm8geworCXVpbnQzMl90IHNidWZfcGh5OworCXVpbnQzMl90IHlfcGh5OworCXVpbnQzMl90IGNiY3JfcGh5OworfTsKKworc3RydWN0IG1zbV92ZmVfcmVzcCB7CisJZW51bSB2ZmVfcmVzcF9tc2cgdHlwZTsKKwlzdHJ1Y3QgbXNtX3ZmZV9ldnRfbXNnIGV2dF9tc2c7CisJc3RydWN0IG1zbV92ZmVfcGh5X2luZm8gcGh5OworCXZvaWQgICAgKmV4dGRhdGE7CisJaW50MzJfdCBleHRsZW47Cit9OworCitzdHJ1Y3QgbXNtX3ZmZV9jYWxsYmFjayB7CisJdm9pZCAoKnZmZV9yZXNwKShzdHJ1Y3QgbXNtX3ZmZV9yZXNwICosCisJCWVudW0gbXNtX3F1ZXVlLCB2b2lkICpzeW5jZGF0YSk7CisJdm9pZCogKCp2ZmVfYWxsb2MpKGludCwgdm9pZCAqc3luY2RhdGEpOworfTsKKworc3RydWN0IG1zbV9jYW12ZmVfZm4geworCWludCAoKnZmZV9pbml0KShzdHJ1Y3QgbXNtX3ZmZV9jYWxsYmFjayAqLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOworCWludCAoKnZmZV9lbmFibGUpKHN0cnVjdCBjYW1lcmFfZW5hYmxlX2NtZCAqKTsKKwlpbnQgKCp2ZmVfY29uZmlnKShzdHJ1Y3QgbXNtX3ZmZV9jZmdfY21kICosIHZvaWQgKik7CisJaW50ICgqdmZlX2Rpc2FibGUpKHN0cnVjdCBjYW1lcmFfZW5hYmxlX2NtZCAqLAorCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOworCXZvaWQgKCp2ZmVfcmVsZWFzZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKK307CisKK3N0cnVjdCBtc21fc2Vuc29yX2N0cmwgeworCWludCAoKnNfaW5pdCkoY29uc3Qgc3RydWN0IG1zbV9jYW1lcmFfc2Vuc29yX2luZm8gKik7CisJaW50ICgqc19yZWxlYXNlKSh2b2lkKTsKKwlpbnQgKCpzX2NvbmZpZykodm9pZCBfX3VzZXIgKik7Cit9OworCitzdHJ1Y3QgbXNtX3N5bmMgeworCS8qIFRoZXNlIHR3byBxdWV1ZXMgYXJlIGFjY2Vzc2VkIGZyb20gYSBwcm9jZXNzIGNvbnRleHQgb25seS4gKi8KKwlzdHJ1Y3QgaGxpc3RfaGVhZCBmcmFtZTsgLyogbW9zdC1mcmVxdWVudGx5IGFjY2Vzc2VkICovCisJc3RydWN0IGhsaXN0X2hlYWQgc3RhdHM7CisKKwkvKiBUaGUgbWVzc2FnZSBxdWV1ZSBpcyB1c2VkIGJ5IHRoZSBjb250cm9sIHRocmVhZCB0byBzZW5kIGNvbW1hbmRzCisJICogdG8gdGhlIGNvbmZpZyB0aHJlYWQsIGFuZCBhbHNvIGJ5IHRoZSBEU1AgdG8gc2VuZCBtZXNzYWdlcyB0byB0aGUKKwkgKiBjb25maWcgdGhyZWFkLiAgVGh1cyBpdCBpcyB0aGUgb25seSBxdWV1ZSB0aGF0IGlzIGFjY2Vzc2VkIGZyb20KKwkgKiBib3RoIGludGVycnVwdCBhbmQgcHJvY2VzcyBjb250ZXh0LgorCSAqLworCXNwaW5sb2NrX3QgbXNnX2V2ZW50X3FfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG1zZ19ldmVudF9xOworCXdhaXRfcXVldWVfaGVhZF90IG1zZ19ldmVudF93YWl0OworCisJLyogVGhpcyBxdWV1ZSBjb250YWlucyBwcmV2aWV3IGZyYW1lcy4gSXQgaXMgYWNjZXNzZWQgYnkgdGhlIERTUCAoaW4KKwkgKiBpbiBpbnRlcnJ1cHQgY29udGV4dCwgYW5kIGJ5IHRoZSBmcmFtZSB0aHJlYWQuCisJICovCisJc3BpbmxvY2tfdCBwcmV2X2ZyYW1lX3FfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHByZXZfZnJhbWVfcTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBwcmV2X2ZyYW1lX3dhaXQ7CisJaW50IHVuYmxvY2tfcG9sbF9mcmFtZTsKKworCS8qIFRoaXMgcXVldWUgY29udGFpbnMgc25hcHNob3QgZnJhbWVzLiAgSXQgaXMgYWNjZXNzZWQgYnkgdGhlIERTUCAoaW4KKwkgKiBpbnRlcnJ1cHQgY29udGV4dCwgYW5kIGJ5IHRoZSBjb250cm9sIHRocmVhZC4KKwkgKi8KKwlzcGlubG9ja190IHBpY3RfZnJhbWVfcV9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgcGljdF9mcmFtZV9xOworCXdhaXRfcXVldWVfaGVhZF90IHBpY3RfZnJhbWVfd2FpdDsKKworCXN0cnVjdCBtc21fY2FtZXJhX3NlbnNvcl9pbmZvICpzZGF0YTsKKwlzdHJ1Y3QgbXNtX2NhbXZmZV9mbiB2ZmVmbjsKKwlzdHJ1Y3QgbXNtX3NlbnNvcl9jdHJsIHNjdHJsOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJdWludDhfdCBvcGVuY250OworCXZvaWQgKmNyb3BpbmZvOworCWludCAgY3JvcGxlbjsKKwl1bnNpZ25lZCBwaWN0X3BwOworCisJY29uc3QgY2hhciAqYXBwc19pZDsKKworCXN0cnVjdCBtdXRleCBsb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKKyNkZWZpbmUgTVNNX0FQUFNfSURfVjRMMiAibXNtX3Y0bDIiCisjZGVmaW5lIE1TTV9BUFBTX0lEX1BST1AgIm1zbV9xY3QiCisKK3N0cnVjdCBtc21fZGV2aWNlIHsKKwlzdHJ1Y3QgbXNtX3N5bmMgKnN5bmM7IC8qIG1vc3QtZnJlcXVlbnRseSBhY2Nlc3NlZCAqLworCXN0cnVjdCBkZXZpY2UgKmRldmljZTsKKwlzdHJ1Y3QgY2RldiBjZGV2OworCS8qIG9wZW5lZCBpcyBtZWFuaW5nZnVsIG9ubHkgZm9yIHRoZSBjb25maWcgYW5kIGZyYW1lIG5vZGVzLAorCSAqIHdoaWNoIG1heSBiZSBvcGVuZWQgb25seSBvbmNlLgorCSAqLworCWF0b21pY190IG9wZW5lZDsKK307CisKK3N0cnVjdCBtc21fY29udHJvbF9kZXZpY2VfcXVldWUgeworCXNwaW5sb2NrX3QgY3RybF9zdGF0dXNfcV9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgY3RybF9zdGF0dXNfcTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBjdHJsX3N0YXR1c193YWl0OworfTsKKworc3RydWN0IG1zbV9jb250cm9sX2RldmljZSB7CisJc3RydWN0IG1zbV9kZXZpY2UgKnBtc207CisKKwkvKiBUaGlzIHF1ZXVlIHVzZWQgYnkgdGhlIGNvbmZpZyB0aHJlYWQgdG8gc2VuZCByZXNwb25zZXMgYmFjayB0byB0aGUKKwkgKiBjb250cm9sIHRocmVhZC4gIEl0IGlzIGFjY2Vzc2VkIG9ubHkgZnJvbSBhIHByb2Nlc3MgY29udGV4dC4KKwkgKi8KKwlzdHJ1Y3QgbXNtX2NvbnRyb2xfZGV2aWNlX3F1ZXVlIGN0cmxfcTsKK307CisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIHVzZWQgaW4ga2VybmVsICovCitzdHJ1Y3QgbXNtX3F1ZXVlX2NtZCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWVudW0gbXNtX3F1ZXVlIHR5cGU7CisJdm9pZCAqY29tbWFuZDsKK307CisKK3N0cnVjdCByZWdpc3Rlcl9hZGRyZXNzX3ZhbHVlX3BhaXIgeworCXVpbnQxNl90IHJlZ2lzdGVyX2FkZHJlc3M7CisJdWludDE2X3QgcmVnaXN0ZXJfdmFsdWU7Cit9OworCitzdHJ1Y3QgbXNtX3BtZW1fcmVnaW9uIHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBsaXN0OworCWludCB0eXBlOworCXZvaWQgKnZhZGRyOworCXVuc2lnbmVkIGxvbmcgcGFkZHI7CisJdW5zaWduZWQgbG9uZyBsZW47CisJc3RydWN0IGZpbGUgKmZpbGU7CisJdWludDMyX3QgeV9vZmY7CisJdWludDMyX3QgY2Jjcl9vZmY7CisJaW50IGZkOworCXVpbnQ4X3QgIGFjdGl2ZTsKK307CisKK3N0cnVjdCBheGlkYXRhIHsKKwl1aW50MzJfdCBidWZudW0xOworCXVpbnQzMl90IGJ1Zm51bTI7CisJc3RydWN0IG1zbV9wbWVtX3JlZ2lvbiAqcmVnaW9uOworfTsKKworI2lmZGVmIENPTkZJR19NU01fQ0FNRVJBX0ZMQVNICitpbnQgbXNtX2NhbWVyYV9mbGFzaF9zZXRfbGVkX3N0YXRlKHVuc2lnbmVkIGxlZF9zdGF0ZSk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgbXNtX2NhbWVyYV9mbGFzaF9zZXRfbGVkX3N0YXRlKHVuc2lnbmVkIGxlZF9zdGF0ZSkKK3sKKwlyZXR1cm4gLUVOT1RTVVBQOworfQorI2VuZGlmCisKKy8qIEJlbG93IGZ1bmN0aW9ucyBhcmUgYWRkZWQgZm9yIFY0TDIga2VybmVsIEFQSXMgKi8KK3N0cnVjdCBtc21fdjRsMl9kcml2ZXIgeworCXN0cnVjdCBtc21fc3luYyAqc3luYzsKKwlpbnQgKCpvcGVuKShzdHJ1Y3QgbXNtX3N5bmMgKiwgY29uc3QgY2hhciAqYXBwc19pZCk7CisJaW50ICgqcmVsZWFzZSkoc3RydWN0IG1zbV9zeW5jICopOworCWludCAoKmN0cmwpKHN0cnVjdCBtc21fc3luYyAqLCBzdHJ1Y3QgbXNtX2N0cmxfY21kICopOworCWludCAoKnJlZ19wbWVtKShzdHJ1Y3QgbXNtX3N5bmMgKiwgc3RydWN0IG1zbV9wbWVtX2luZm8gKik7CisJaW50ICgqZ2V0X2ZyYW1lKSAoc3RydWN0IG1zbV9zeW5jICosIHN0cnVjdCBtc21fZnJhbWUgKik7CisJaW50ICgqcHV0X2ZyYW1lKSAoc3RydWN0IG1zbV9zeW5jICosIHN0cnVjdCBtc21fZnJhbWUgKik7CisJaW50ICgqZ2V0X3BpY3QpIChzdHJ1Y3QgbXNtX3N5bmMgKiwgc3RydWN0IG1zbV9jdHJsX2NtZCAqKTsKKwl1bnNpZ25lZCBpbnQgKCpkcnZfcG9sbCkgKHN0cnVjdCBtc21fc3luYyAqLCBzdHJ1Y3QgZmlsZSAqLAorCQkJCXN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqKTsKK307CisKK2ludCBtc21fdjRsMl9yZWdpc3RlcihzdHJ1Y3QgbXNtX3Y0bDJfZHJpdmVyICopOworaW50IG1zbV92NGwyX3VucmVnaXN0ZXIoc3RydWN0IG1zbV92NGwyX2RyaXZlciAqKTsKKwordm9pZCBtc21fY2FtdmZlX2luaXQodm9pZCk7CitpbnQgbXNtX2NhbXZmZV9jaGVjayh2b2lkICopOwordm9pZCBtc21fY2FtdmZlX2ZuX2luaXQoc3RydWN0IG1zbV9jYW12ZmVfZm4gKiwgdm9pZCAqKTsKK2ludCBtc21fY2FtZXJhX2Rydl9zdGFydChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCisJCWludCAoKnNlbnNvcl9wcm9iZSkoY29uc3Qgc3RydWN0IG1zbV9jYW1lcmFfc2Vuc29yX2luZm8gKiwKKwkJCQkJc3RydWN0IG1zbV9zZW5zb3JfY3RybCAqKSk7CisKK2VudW0gbXNtX2NhbWlvX2Nsa190eXBlIHsKKwlDQU1JT19WRkVfTURDX0NMSywKKwlDQU1JT19NRENfQ0xLLAorCUNBTUlPX1ZGRV9DTEssCisJQ0FNSU9fVkZFX0FYSV9DTEssCisKKwlDQU1JT19NQVhfQ0xLCit9OworCitlbnVtIG1zbV9jYW1pb19jbGtfc3JjX3R5cGUgeworCU1TTV9DQU1JT19DTEtfU1JDX0lOVEVSTkFMLAorCU1TTV9DQU1JT19DTEtfU1JDX0VYVEVSTkFMLAorCU1TTV9DQU1JT19DTEtfU1JDX01BWAorfTsKKworZW51bSBtc21fc190ZXN0X21vZGUgeworCVNfVEVTVF9PRkYsCisJU19URVNUXzEsCisJU19URVNUXzIsCisJU19URVNUXzMKK307CisKK2VudW0gbXNtX3NfcmVzb2x1dGlvbiB7CisJU19RVFJfU0laRSwKKwlTX0ZVTExfU0laRSwKKwlTX0lOVkFMSURfU0laRQorfTsKKworZW51bSBtc21fc19yZWdfdXBkYXRlIHsKKwkvKiBTZW5zb3IgZWdpc3RlcnMgdGhhdCBuZWVkIHRvIGJlIHVwZGF0ZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uICovCisJU19SRUdfSU5JVCwKKwkvKiBTZW5zb3IgZWdpc3RlcnMgdGhhdCBuZWVkcyBwZXJpb2RpYyBJMkMgd3JpdGVzICovCisJU19VUERBVEVfUEVSSU9ESUMsCisJLyogQWxsIHRoZSBzZW5zb3IgUmVnaXN0ZXJzIHdpbGwgYmUgdXBkYXRlZCAqLworCVNfVVBEQVRFX0FMTCwKKwkvKiBOb3QgdmFsaWQgdXBkYXRlICovCisJU19VUERBVEVfSU5WQUxJRAorfTsKKworZW51bSBtc21fc19zZXR0aW5nIHsKKwlTX1JFU19QUkVWSUVXLAorCVNfUkVTX0NBUFRVUkUKK307CisKK2ludCBtc21fY2FtaW9fZW5hYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CisKK2ludCAgbXNtX2NhbWlvX2Nsa19lbmFibGUoZW51bSBtc21fY2FtaW9fY2xrX3R5cGUgY2xrKTsKK2ludCAgbXNtX2NhbWlvX2Nsa19kaXNhYmxlKGVudW0gbXNtX2NhbWlvX2Nsa190eXBlIGNsayk7CitpbnQgIG1zbV9jYW1pb19jbGtfY29uZmlnKHVpbnQzMl90IGZyZXEpOwordm9pZCBtc21fY2FtaW9fY2xrX3JhdGVfc2V0KGludCByYXRlKTsKK3ZvaWQgbXNtX2NhbWlvX2Nsa19heGlfcmF0ZV9zZXQoaW50IHJhdGUpOworCit2b2lkIG1zbV9jYW1pb19jYW1pZl9wYWRfcmVnX3Jlc2V0KHZvaWQpOwordm9pZCBtc21fY2FtaW9fY2FtaWZfcGFkX3JlZ19yZXNldF8yKHZvaWQpOworCit2b2lkIG1zbV9jYW1pb192ZmVfYmxrX3Jlc2V0KHZvaWQpOworCit2b2lkIG1zbV9jYW1pb19jbGtfc2VsKGVudW0gbXNtX2NhbWlvX2Nsa19zcmNfdHlwZSk7Cit2b2lkIG1zbV9jYW1pb19kaXNhYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CitpbnQgbXNtX2NhbWlvX3Byb2JlX29uKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CitpbnQgbXNtX2NhbWlvX3Byb2JlX29mZihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL21zbV9hZHNwLmggYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL21zbV9hZHNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA4MTY4MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvbXNtX2Fkc3AuaApAQCAtMCwwICsxLDExMiBAQAorLyogaW5jbHVkZS9hc20tYXJtL2FyY2gtbXNtL21zbV9hZHNwLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlLCBJbmMuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9fQVJDSF9NU01fQURTUF9ICisjZGVmaW5lIF9fQVNNX19BUkNIX01TTV9BRFNQX0gKKworc3RydWN0IG1zbV9hZHNwX21vZHVsZTsKKworc3RydWN0IG1zbV9hZHNwX29wcyB7CisJLyogZXZlbnQgaXMgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgd2hlbiBhIG1lc3NhZ2UKKwkgKiBhcnJpdmVzIGZyb20gdGhlIERTUC4gIFVzZSB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcG9pbnRlcgorCSAqIHRvIGNvcHkgdGhlIG1lc3NhZ2UgaW50byBhIGxvY2FsIGJ1ZmZlci4gIERvIE5PVCBjYWxsCisJICogaXQgbXVsdGlwbGUgdGltZXMuCisJICovCisJdm9pZCAoKmV2ZW50KSh2b2lkICpkcml2ZXJfZGF0YSwgdW5zaWduZWQgaWQsIHNpemVfdCBsZW4sCisJCSAgICAgIHZvaWQgKCpnZXRldmVudCkodm9pZCAqcHRyLCBzaXplX3QgbGVuKSk7Cit9OworCisvKiBHZXQsIFB1dCwgRW5hYmxlLCBhbmQgRGlzYWJsZSBhcmUgc3luY2hyb25vdXMgYW5kIG11c3Qgb25seQorICogYmUgY2FsbGVkIGZyb20gdGhyZWFkIGNvbnRleHQuICBFbmFibGUgYW5kIERpc2FibGUgd2lsbCBibG9jaworICogdXAgdG8gb25lIHNlY29uZCBpbiB0aGUgZXZlbnQgb2YgYSBmYXRhbCBEU1AgZXJyb3IgYnV0IGFyZQorICogbXVjaCBmYXN0ZXIgb3RoZXJ3aXNlLgorICovCitpbnQgbXNtX2Fkc3BfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBtc21fYWRzcF9tb2R1bGUgKiptb2R1bGUsCisJCSBzdHJ1Y3QgbXNtX2Fkc3Bfb3BzICpvcHMsIHZvaWQgKmRyaXZlcl9kYXRhKTsKK3ZvaWQgbXNtX2Fkc3BfcHV0KHN0cnVjdCBtc21fYWRzcF9tb2R1bGUgKm1vZHVsZSk7CitpbnQgbXNtX2Fkc3BfZW5hYmxlKHN0cnVjdCBtc21fYWRzcF9tb2R1bGUgKm1vZHVsZSk7CitpbnQgbXNtX2Fkc3BfZGlzYWJsZShzdHJ1Y3QgbXNtX2Fkc3BfbW9kdWxlICptb2R1bGUpOworaW50IGFkc3Bfc2V0X2Nsa3JhdGUoc3RydWN0IG1zbV9hZHNwX21vZHVsZSAqbW9kdWxlLCB1bnNpZ25lZCBsb25nIGNsa19yYXRlKTsKKworLyogV3JpdGUgaXMgc2FmZSB0byBjYWxsIGZyb20gaW50ZXJydXB0IGNvbnRleHQuCisgKi8KK2ludCBtc21fYWRzcF93cml0ZShzdHJ1Y3QgbXNtX2Fkc3BfbW9kdWxlICptb2R1bGUsCisJCSAgIHVuc2lnbmVkIHF1ZXVlX2lkLAorCQkgICB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKKworI2lmIENPTkZJR19NU01fQU1TU19WRVJTSU9OID49IDYzNTAKKy8qIENvbW1hbmQgUXVldWUgSW5kZXhlcyAqLworI2RlZmluZSBRRFNQX2xwbUNvbW1hbmRRdWV1ZSAgICAgICAgICAgICAgMAorI2RlZmluZSBRRFNQX21wdUFmZVF1ZXVlICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBRRFNQX21wdUdyYXBoaWNzQ21kUXVldWUgICAgICAgICAgMgorI2RlZmluZSBRRFNQX21wdU1vZG1hdGhDbWRRdWV1ZSAgICAgICAgICAgMworI2RlZmluZSBRRFNQX21wdVZEZWNDbWRRdWV1ZSAgICAgICAgICAgICAgNAorI2RlZmluZSBRRFNQX21wdVZEZWNQa3RRdWV1ZSAgICAgICAgICAgICAgNQorI2RlZmluZSBRRFNQX21wdVZFbmNDbWRRdWV1ZSAgICAgICAgICAgICAgNgorI2RlZmluZSBRRFNQX3J4TXB1RGVjQ21kUXVldWUgICAgICAgICAgICAgNworI2RlZmluZSBRRFNQX3J4TXB1RGVjUGt0UXVldWUgICAgICAgICAgICAgOAorI2RlZmluZSBRRFNQX3R4TXB1RW5jUXVldWUgICAgICAgICAgICAgICAgOQorI2RlZmluZSBRRFNQX3VQQXVkUFBDbWQxUXVldWUgICAgICAgICAgICAgMTAKKyNkZWZpbmUgUURTUF91UEF1ZFBQQ21kMlF1ZXVlICAgICAgICAgICAgIDExCisjZGVmaW5lIFFEU1BfdVBBdWRQUENtZDNRdWV1ZSAgICAgICAgICAgICAxMgorI2RlZmluZSBRRFNQX3VQQXVkUGxheTBCaXRTdHJlYW1DdHJsUXVldWUgMTMKKyNkZWZpbmUgUURTUF91UEF1ZFBsYXkxQml0U3RyZWFtQ3RybFF1ZXVlIDE0CisjZGVmaW5lIFFEU1BfdVBBdWRQbGF5MkJpdFN0cmVhbUN0cmxRdWV1ZSAxNQorI2RlZmluZSBRRFNQX3VQQXVkUGxheTNCaXRTdHJlYW1DdHJsUXVldWUgMTYKKyNkZWZpbmUgUURTUF91UEF1ZFBsYXk0Qml0U3RyZWFtQ3RybFF1ZXVlIDE3CisjZGVmaW5lIFFEU1BfdVBBdWRQcmVQcm9jQ21kUXVldWUgICAgICAgICAxOAorI2RlZmluZSBRRFNQX3VQQXVkUmVjQml0U3RyZWFtUXVldWUgICAgICAgMTkKKyNkZWZpbmUgUURTUF91UEF1ZFJlY0NtZFF1ZXVlICAgICAgICAgICAgIDIwCisjZGVmaW5lIFFEU1BfdVBEaWFnUXVldWUgICAgICAgICAgICAgICAgICAyMQorI2RlZmluZSBRRFNQX3VQSnBlZ0FjdGlvbkNtZFF1ZXVlICAgICAgICAgMjIKKyNkZWZpbmUgUURTUF91UEpwZWdDZmdDbWRRdWV1ZSAgICAgICAgICAgIDIzCisjZGVmaW5lIFFEU1BfdVBWb2NQcm9jUXVldWUgICAgICAgICAgICAgICAyNAorI2RlZmluZSBRRFNQX3ZmZUNvbW1hbmRRdWV1ZSAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgUURTUF92ZmVDb21tYW5kU2NhbGVRdWV1ZSAgICAgICAgIDI2CisjZGVmaW5lIFFEU1BfdmZlQ29tbWFuZFRhYmxlUXVldWUgICAgICAgICAyNworI2RlZmluZSBRRFNQX01BWF9OVU1fUVVFVUVTICAgICAgICAgICAgICAgMjgKKyNlbHNlCisvKiBDb21tYW5kIFF1ZXVlIEluZGV4ZXMgKi8KKyNkZWZpbmUgUURTUF9scG1Db21tYW5kUXVldWUgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUURTUF9tcHVBZmVRdWV1ZSAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUURTUF9tcHVHcmFwaGljc0NtZFF1ZXVlICAgICAgICAgIDIKKyNkZWZpbmUgUURTUF9tcHVNb2RtYXRoQ21kUXVldWUgICAgICAgICAgIDMKKyNkZWZpbmUgUURTUF9tcHVWRGVjQ21kUXVldWUgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUURTUF9tcHVWRGVjUGt0UXVldWUgICAgICAgICAgICAgIDUKKyNkZWZpbmUgUURTUF9tcHVWRW5jQ21kUXVldWUgICAgICAgICAgICAgIDYKKyNkZWZpbmUgUURTUF9yeE1wdURlY0NtZFF1ZXVlICAgICAgICAgICAgIDcKKyNkZWZpbmUgUURTUF9yeE1wdURlY1BrdFF1ZXVlICAgICAgICAgICAgIDgKKyNkZWZpbmUgUURTUF90eE1wdUVuY1F1ZXVlICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgUURTUF91UEF1ZFBQQ21kMVF1ZXVlICAgICAgICAgICAgIDEwCisjZGVmaW5lIFFEU1BfdVBBdWRQUENtZDJRdWV1ZSAgICAgICAgICAgICAxMQorI2RlZmluZSBRRFNQX3VQQXVkUFBDbWQzUXVldWUgICAgICAgICAgICAgMTIKKyNkZWZpbmUgUURTUF91UEF1ZFBsYXkwQml0U3RyZWFtQ3RybFF1ZXVlIDEzCisjZGVmaW5lIFFEU1BfdVBBdWRQbGF5MUJpdFN0cmVhbUN0cmxRdWV1ZSAxNAorI2RlZmluZSBRRFNQX3VQQXVkUGxheTJCaXRTdHJlYW1DdHJsUXVldWUgMTUKKyNkZWZpbmUgUURTUF91UEF1ZFBsYXkzQml0U3RyZWFtQ3RybFF1ZXVlIDE2CisjZGVmaW5lIFFEU1BfdVBBdWRQbGF5NEJpdFN0cmVhbUN0cmxRdWV1ZSAxNworI2RlZmluZSBRRFNQX3VQQXVkUHJlUHJvY0NtZFF1ZXVlICAgICAgICAgMTgKKyNkZWZpbmUgUURTUF91UEF1ZFJlY0JpdFN0cmVhbVF1ZXVlICAgICAgIDE5CisjZGVmaW5lIFFEU1BfdVBBdWRSZWNDbWRRdWV1ZSAgICAgICAgICAgICAyMAorI2RlZmluZSBRRFNQX3VQSnBlZ0FjdGlvbkNtZFF1ZXVlICAgICAgICAgMjEKKyNkZWZpbmUgUURTUF91UEpwZWdDZmdDbWRRdWV1ZSAgICAgICAgICAgIDIyCisjZGVmaW5lIFFEU1BfdVBWb2NQcm9jUXVldWUgICAgICAgICAgICAgICAyMworI2RlZmluZSBRRFNQX3ZmZUNvbW1hbmRRdWV1ZSAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgUURTUF92ZmVDb21tYW5kU2NhbGVRdWV1ZSAgICAgICAgIDI1CisjZGVmaW5lIFFEU1BfdmZlQ29tbWFuZFRhYmxlUXVldWUgICAgICAgICAyNgorI2RlZmluZSBRRFNQX1FVRVVFX01BWCAgICAgICAgICAgICAgICAgICAgMjYKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvbXNtX3JwY3JvdXRlci5oIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9tc21fcnBjcm91dGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcyNGVjZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvbXNtX3JwY3JvdXRlci5oCkBAIC0wLDAgKzEsMTc5IEBACisvKiogaW5jbHVkZS9hc20tYXJtL2FyY2gtbXNtL21zbV9ycGNyb3V0ZXIuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IFFVQUxDT01NIEluY29ycG9yYXRlZAorICogQXV0aG9yOiBTYW4gTWVoYXQgPHNhbkBhbmRyb2lkLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX19BUkNIX01TTV9SUENST1VURVJfSAorI2RlZmluZSBfX0FTTV9fQVJDSF9NU01fUlBDUk9VVEVSX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaWYgQ09ORklHX01TTV9BTVNTX1ZFUlNJT04gPj0gNjM1MAorLyogUlBDIEFQSSB2ZXJzaW9uIHN0cnVjdHVyZQorICogVmVyc2lvbiBiaXQgMzEgOiAxLT5oYXNoa2V5IHZlcnNpb25pbmcsCisgKiAgICAgICAgICAgICAgICAgIDAtPm1ham9yLW1pbm9yIChiYWNrd2FyZCBjb21wYXRpYmxlKSB2ZXJzaW9uaW5nCisgKiBoYXNoa2V5IHZlcnNpb25pbmc6CisgKiAgIFZlcnNpb24gYml0cyAzMS0wIGhhc2hrZXkKKyAqIG1ham9yLW1pbm9yIChiYWNrd2FyZCBjb21wYXRpYmxlKSB2ZXJzaW9uaW5nCisgKiAgIFZlcnNpb24gYml0cyAzMC0yOCByZXNlcnZlZCAobm8gbWF0Y2gpCisgKiAgIFZlcnNpb24gYml0cyAyNy0xNiBtYWpvciAobXVzdCBtYXRjaCkKKyAqICAgVmVyc2lvbiBiaXRzIDE1LTAgIG1pbm9yIChncmVhdGVyIG9yIGVxdWFsKQorICovCisjZGVmaW5lIFJQQ19WRVJTSU9OX01PREVfTUFTSyAgMHg4MDAwMDAwMAorI2RlZmluZSBSUENfVkVSU0lPTl9NQUpPUl9NQVNLIDB4MGZmZjAwMDAKKyNkZWZpbmUgUlBDX1ZFUlNJT05fTUFKT1JfT0ZGU0VUIDE2CisjZGVmaW5lIFJQQ19WRVJTSU9OX01JTk9SX01BU0sgMHgwMDAwZmZmZgorCisjZGVmaW5lIE1TTV9SUENfVkVSUyhtYWpvciwgbWlub3IpCQkJCQlcCisJKCh1aW50MzJfdCkoKCgobWFqb3IpIDw8IFJQQ19WRVJTSU9OX01BSk9SX09GRlNFVCkgJgkJXAorCQlSUENfVkVSU0lPTl9NQUpPUl9NQVNLKSB8CQkJCVwKKwkoKG1pbm9yKSAmIFJQQ19WRVJTSU9OX01JTk9SX01BU0spKSkKKyNkZWZpbmUgTVNNX1JQQ19HRVRfTUFKT1IodmVycykgKCgodmVycykgJiBSUENfVkVSU0lPTl9NQUpPUl9NQVNLKSA+PglcCisJCQkJCVJQQ19WRVJTSU9OX01BSk9SX09GRlNFVCkKKyNkZWZpbmUgTVNNX1JQQ19HRVRfTUlOT1IodmVycykgKCh2ZXJzKSAmIFJQQ19WRVJTSU9OX01JTk9SX01BU0spCisjZWxzZQorI2RlZmluZSBNU01fUlBDX1ZFUlMobWFqb3IsIG1pbm9yKSAobWFqb3IpCisjZGVmaW5lIE1TTV9SUENfR0VUX01BSk9SKHZlcnMpICh2ZXJzKQorI2RlZmluZSBNU01fUlBDX0dFVF9NSU5PUih2ZXJzKSAwCisjZW5kaWYKKworc3RydWN0IG1zbV9ycGNfZW5kcG9pbnQ7CisKK3N0cnVjdCBycGNzdnJfcGxhdGZvcm1fZGV2aWNlCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSBiYXNlOworCXVpbnQzMl90IHByb2c7CisJdWludDMyX3QgdmVyczsKK307CisKKyNkZWZpbmUgUlBDX0RBVEFfSU4JMAorLyoKKyAqIFN0cnVjdHVyZXMgZm9yIHNlbmRpbmcgLyByZWNlaXZpbmcgZGlyZWN0IFJQQyByZXF1ZXN0cworICogWFhYOiBBbnkgY3JlZC92ZXJpZiBsZW5ndGhzID4gMCBub3Qgc3VwcG9ydGVkCisgKi8KKworc3RydWN0IHJwY19yZXF1ZXN0X2hkcgoreworCXVpbnQzMl90IHhpZDsKKwl1aW50MzJfdCB0eXBlOwkvKiAwICovCisJdWludDMyX3QgcnBjX3ZlcnM7IC8qIDIgKi8KKwl1aW50MzJfdCBwcm9nOworCXVpbnQzMl90IHZlcnM7CisJdWludDMyX3QgcHJvY2VkdXJlOworCXVpbnQzMl90IGNyZWRfZmxhdm9yOworCXVpbnQzMl90IGNyZWRfbGVuZ3RoOworCXVpbnQzMl90IHZlcmZfZmxhdm9yOworCXVpbnQzMl90IHZlcmZfbGVuZ3RoOworfTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwl1aW50MzJfdCBsb3c7CisJdWludDMyX3QgaGlnaDsKK30gcnBjX3JlcGx5X3Byb2dtaXNtYXRjaF9kYXRhOworCit0eXBlZGVmIHN0cnVjdAoreworfSBycGNfZGVuaWVkX3JlcGx5X2hkcjsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwl1aW50MzJfdCB2ZXJmX2ZsYXZvcjsKKwl1aW50MzJfdCB2ZXJmX2xlbmd0aDsKKwl1aW50MzJfdCBhY2NlcHRfc3RhdDsKKyNkZWZpbmUgUlBDX0FDQ0VQVFNUQVRfU1VDQ0VTUyAwCisjZGVmaW5lIFJQQ19BQ0NFUFRTVEFUX1BST0dfVU5BVkFJTCAxCisjZGVmaW5lIFJQQ19BQ0NFUFRTVEFUX1BST0dfTUlTTUFUQ0ggMgorI2RlZmluZSBSUENfQUNDRVBUU1RBVF9QUk9DX1VOQVZBSUwgMworI2RlZmluZSBSUENfQUNDRVBUU1RBVF9HQVJCQUdFX0FSR1MgNAorI2RlZmluZSBSUENfQUNDRVBUU1RBVF9TWVNURU1fRVJSIDUKKyNkZWZpbmUgUlBDX0FDQ0VQVFNUQVRfUFJPR19MT0NLRUQgNgorCS8qCisJICogRm9sbG93aW5nIGRhdGEgaXMgZGVwZW5kYW50IG9uIGFjY2VwdF9zdGF0CisJICogSWYgQUNDRVBUU1RBVCA9PSBQUk9HX01JU01BVENIIHRoZW4gdGhlcmUgaXMgYQorCSAqICdycGNfcmVwbHlfcHJvZ21pc21hdGNoX2RhdGEnIHN0cnVjdHVyZSBmb2xsb3dpbmcgdGhlIGhlYWRlci4KKwkgKiBPdGhlcndpc2UgdGhlIGRhdGEgaXMgcHJvY2VkdXJlIHNwZWNpZmljCisJICovCit9IHJwY19hY2NlcHRlZF9yZXBseV9oZHI7CisKK3N0cnVjdCBycGNfcmVwbHlfaGRyCit7CisJdWludDMyX3QgeGlkOworCXVpbnQzMl90IHR5cGU7CisJdWludDMyX3QgcmVwbHlfc3RhdDsKKyNkZWZpbmUgUlBDTVNHX1JFUExZU1RBVF9BQ0NFUFRFRCAwCisjZGVmaW5lIFJQQ01TR19SRVBMWVNUQVRfREVOSUVEIDEKKwl1bmlvbiB7CisJCXJwY19hY2NlcHRlZF9yZXBseV9oZHIgYWNjX2hkcjsKKwkJcnBjX2RlbmllZF9yZXBseV9oZHIgZG55X2hkcjsKKwl9IGRhdGE7Cit9OworCisvKiBmbGFncyBmb3IgbXNtX3JwY19jb25uZWN0KCkgKi8KKyNkZWZpbmUgTVNNX1JQQ19VTklOVEVSUlVQVElCTEUgMHgwMDAxCisKKy8qIHVzZSBJU19FUlIoKSB0byBjaGVjayBmb3IgZmFpbHVyZSAqLworc3RydWN0IG1zbV9ycGNfZW5kcG9pbnQgKm1zbV9ycGNfb3Blbih2b2lkKTsKKy8qIENvbm5lY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHNlcnZlciB2ZXJzaW9uICovCitzdHJ1Y3QgbXNtX3JwY19lbmRwb2ludCAqbXNtX3JwY19jb25uZWN0KHVpbnQzMl90IHByb2csIHVpbnQzMl90IHZlcnMsIHVuc2lnbmVkIGZsYWdzKTsKK3VpbnQzMl90IG1zbV9ycGNfZ2V0X3ZlcnMoc3RydWN0IG1zbV9ycGNfZW5kcG9pbnQgKmVwdCk7CisvKiBjaGVjayBpZiBzZXJ2ZXIgdmVyc2lvbiBjYW4gaGFuZGxlIGNsaWVudCByZXF1ZXN0ZWQgdmVyc2lvbiAqLworaW50IG1zbV9ycGNfaXNfY29tcGF0aWJsZV92ZXJzaW9uKHVpbnQzMl90IHNlcnZlcl92ZXJzaW9uLAorCQkJCSAgdWludDMyX3QgY2xpZW50X3ZlcnNpb24pOworCitpbnQgbXNtX3JwY19jbG9zZShzdHJ1Y3QgbXNtX3JwY19lbmRwb2ludCAqZXB0KTsKK2ludCBtc21fcnBjX3dyaXRlKHN0cnVjdCBtc21fcnBjX2VuZHBvaW50ICplcHQsCisJCSAgdm9pZCAqZGF0YSwgaW50IGxlbik7CitpbnQgbXNtX3JwY19yZWFkKHN0cnVjdCBtc21fcnBjX2VuZHBvaW50ICplcHQsCisJCSB2b2lkICoqZGF0YSwgdW5zaWduZWQgbGVuLCBsb25nIHRpbWVvdXQpOwordm9pZCBtc21fcnBjX3NldHVwX3JlcShzdHJ1Y3QgcnBjX3JlcXVlc3RfaGRyICpoZHIsCisJCSAgICAgICB1aW50MzJfdCBwcm9nLCB1aW50MzJfdCB2ZXJzLCB1aW50MzJfdCBwcm9jKTsKK2ludCBtc21fcnBjX3JlZ2lzdGVyX3NlcnZlcihzdHJ1Y3QgbXNtX3JwY19lbmRwb2ludCAqZXB0LAorCQkJICAgIHVpbnQzMl90IHByb2csIHVpbnQzMl90IHZlcnMpOworaW50IG1zbV9ycGNfdW5yZWdpc3Rlcl9zZXJ2ZXIoc3RydWN0IG1zbV9ycGNfZW5kcG9pbnQgKmVwdCwKKwkJCSAgICAgIHVpbnQzMl90IHByb2csIHVpbnQzMl90IHZlcnMpOworCisvKiBzaW1wbGUgYmxvY2tpbmcgcnBjIGNhbGwKKyAqCisgKiByZXF1ZXN0IGlzIG1hbmRhdG9yeSBhbmQgbXVzdCBoYXZlIGEgcnBjX3JlcXVlc3RfaGRyCisgKiBhdCB0aGUgc3RhcnQuICBUaGUgaGVhZGVyIHdpbGwgYmUgZmlsbGVkIG91dCBmb3IgeW91LgorICoKKyAqIHJlcGx5IHByb3ZpZGVzIGEgYnVmZmVyIGZvciByZXBsaWVzIG9mIHJlcGx5X21heF9zaXplCisgKi8KK2ludCBtc21fcnBjX2NhbGxfcmVwbHkoc3RydWN0IG1zbV9ycGNfZW5kcG9pbnQgKmVwdCwgdWludDMyX3QgcHJvYywKKwkJICAgICAgIHZvaWQgKnJlcXVlc3QsIGludCByZXF1ZXN0X3NpemUsCisJCSAgICAgICB2b2lkICpyZXBseSwgaW50IHJlcGx5X21heF9zaXplLAorCQkgICAgICAgbG9uZyB0aW1lb3V0KTsKK2ludCBtc21fcnBjX2NhbGwoc3RydWN0IG1zbV9ycGNfZW5kcG9pbnQgKmVwdCwgdWludDMyX3QgcHJvYywKKwkJIHZvaWQgKnJlcXVlc3QsIGludCByZXF1ZXN0X3NpemUsCisJCSBsb25nIHRpbWVvdXQpOworCitzdHJ1Y3QgbXNtX3JwY19zZXJ2ZXIKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdWludDMyX3QgZmxhZ3M7CisKKwl1aW50MzJfdCBwcm9nOworCXVpbnQzMl90IHZlcnM7CisKKwlpbnQgKCpycGNfY2FsbCkoc3RydWN0IG1zbV9ycGNfc2VydmVyICpzZXJ2ZXIsCisJCQlzdHJ1Y3QgcnBjX3JlcXVlc3RfaGRyICpyZXEsIHVuc2lnbmVkIGxlbik7Cit9OworCitpbnQgbXNtX3JwY19jcmVhdGVfc2VydmVyKHN0cnVjdCBtc21fcnBjX3NlcnZlciAqc2VydmVyKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL21zbV9zbWQuaCBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvbXNtX3NtZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZjc3MzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL21zbV9zbWQuaApAQCAtMCwwICsxLDEwNyBAQAorLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtbXNtL21zbV9zbWQuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBHb29nbGUsIEluYy4KKyAqIEF1dGhvcjogQnJpYW4gU3dldGxhbmQgPHN3ZXRsYW5kQGdvb2dsZS5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX01TTV9TTURfSAorI2RlZmluZSBfX0FTTV9BUkNIX01TTV9TTURfSAorCit0eXBlZGVmIHN0cnVjdCBzbWRfY2hhbm5lbCBzbWRfY2hhbm5lbF90OworCisvKiB3YXJuaW5nOiBub3RpZnkoKSBtYXkgYmUgY2FsbGVkIGJlZm9yZSBvcGVuIHJldHVybnMgKi8KK2ludCBzbWRfb3Blbihjb25zdCBjaGFyICpuYW1lLCBzbWRfY2hhbm5lbF90ICoqY2gsIHZvaWQgKnByaXYsCisJICAgICB2b2lkICgqbm90aWZ5KSh2b2lkICpwcml2LCB1bnNpZ25lZCBldmVudCkpOworCisjZGVmaW5lIFNNRF9FVkVOVF9EQVRBIDEKKyNkZWZpbmUgU01EX0VWRU5UX09QRU4gMgorI2RlZmluZSBTTURfRVZFTlRfQ0xPU0UgMworCitpbnQgc21kX2Nsb3NlKHNtZF9jaGFubmVsX3QgKmNoKTsKKworLyogcGFzc2luZyBhIG51bGwgcG9pbnRlciBmb3IgZGF0YSByZWFkcyBhbmQgZGlzY2FyZHMgKi8KK2ludCBzbWRfcmVhZChzbWRfY2hhbm5lbF90ICpjaCwgdm9pZCAqZGF0YSwgaW50IGxlbik7CisKKy8qIFdyaXRlIHRvIHN0cmVhbSBjaGFubmVscyBtYXkgZG8gYSBwYXJ0aWFsIHdyaXRlIGFuZCByZXR1cm4KKyoqIHRoZSBsZW5ndGggYWN0dWFsbHkgd3JpdHRlbi4KKyoqIFdyaXRlIHRvIHBhY2tldCBjaGFubmVscyB3aWxsIG5ldmVyIGRvIGEgcGFydGlhbCB3cml0ZSAtLQorKiogaXQgd2lsbCByZXR1cm4gdGhlIHJlcXVlc3RlZCBsZW5ndGggd3JpdHRlbiBvciBhbiBlcnJvci4KKyovCitpbnQgc21kX3dyaXRlKHNtZF9jaGFubmVsX3QgKmNoLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuKTsKKworaW50IHNtZF93cml0ZV9hdmFpbChzbWRfY2hhbm5lbF90ICpjaCk7CitpbnQgc21kX3JlYWRfYXZhaWwoc21kX2NoYW5uZWxfdCAqY2gpOworCisvKiBSZXR1cm5zIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBjdXJyZW50IHBhY2tldCBiZWluZyByZWFkLgorKiogUmV0dXJucyAwIGlmIG5vIHBhY2tldHMgYXZhaWxhYmxlIG9yIGEgc3RyZWFtIGNoYW5uZWwuCisqLworaW50IHNtZF9jdXJfcGFja2V0X3NpemUoc21kX2NoYW5uZWxfdCAqY2gpOworCisvKiB1c2VkIGZvciB0dHkgdW50aHJvdHRsaW5nIGFuZCB0aGUgbGlrZSAtLSBjYXVzZXMgdGhlIG5vdGlmeSgpCisqKiBjYWxsYmFjayB0byBiZSBjYWxsZWQgZnJvbSB0aGUgc2FtZSBsb2NrIGNvbnRleHQgYXMgaXMgdXNlZAorKiogd2hlbiBpdCBpcyBjYWxsZWQgZnJvbSBjaGFubmVsIHVwZGF0ZXMKKyovCit2b2lkIHNtZF9raWNrKHNtZF9jaGFubmVsX3QgKmNoKTsKKworCisjaWYgMAorLyogdGhlc2UgYXJlIGludGVycnVwdGFibGUgd2FpdHMgd2hpY2ggd2lsbCBibG9jayB5b3UgdW50aWwgdGhlIHNwZWNpZmllZAorKiogbnVtYmVyIG9mIGJ5dGVzIGFyZSByZWFkYWJsZSBvciB3cml0YWJsZS4KKyovCitpbnQgc21kX3dhaXRfdW50aWxfcmVhZGFibGUoc21kX2NoYW5uZWxfdCAqY2gsIGludCBieXRlcyk7CitpbnQgc21kX3dhaXRfdW50aWxfd3JpdGFibGUoc21kX2NoYW5uZWxfdCAqY2gsIGludCBieXRlcyk7CisjZW5kaWYKKwordHlwZWRlZiBlbnVtCit7CisJU01EX1BPUlRfRFMgPSAwLAorCVNNRF9QT1JUX0RJQUcsCisJU01EX1BPUlRfUlBDX0NBTEwsCisJU01EX1BPUlRfUlBDX1JFUExZLAorCVNNRF9QT1JUX0JULAorCVNNRF9QT1JUX0NPTlRST0wsCisJU01EX1BPUlRfTUVNQ1BZX1NQQVJFMSwKKwlTTURfUE9SVF9EQVRBMSwKKwlTTURfUE9SVF9EQVRBMiwKKwlTTURfUE9SVF9EQVRBMywKKwlTTURfUE9SVF9EQVRBNCwKKwlTTURfUE9SVF9EQVRBNSwKKwlTTURfUE9SVF9EQVRBNiwKKwlTTURfUE9SVF9EQVRBNywKKwlTTURfUE9SVF9EQVRBOCwKKwlTTURfUE9SVF9EQVRBOSwKKwlTTURfUE9SVF9EQVRBMTAsCisJU01EX1BPUlRfREFUQTExLAorCVNNRF9QT1JUX0RBVEExMiwKKwlTTURfUE9SVF9EQVRBMTMsCisJU01EX1BPUlRfREFUQTE0LAorCVNNRF9QT1JUX0RBVEExNSwKKwlTTURfUE9SVF9EQVRBMTYsCisJU01EX1BPUlRfREFUQTE3LAorCVNNRF9QT1JUX0RBVEExOCwKKwlTTURfUE9SVF9EQVRBMTksCisJU01EX1BPUlRfREFUQTIwLAorCVNNRF9QT1JUX0dQU19OTUVBLAorCVNNRF9QT1JUX0JSSURHRV8xLAorCVNNRF9QT1JUX0JSSURHRV8yLAorCVNNRF9QT1JUX0JSSURHRV8zLAorCVNNRF9QT1JUX0JSSURHRV80LAorCVNNRF9QT1JUX0JSSURHRV81LAorCVNNRF9QT1JUX0xPT1BCQUNLLAorCVNNRF9QT1JUX0NTX0FQUFNfTU9ERU0sCisJU01EX1BPUlRfQ1NfQVBQU19EU1AsCisJU01EX1BPUlRfQ1NfTU9ERU1fRFNQLAorCVNNRF9OVU1fUE9SVFMsCit9IHNtZF9wb3J0X2lkX3R5cGU7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNWF1ZHBsYXljbWRpLmggYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1YXVkcGxheWNtZGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjZhMzEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNWF1ZHBsYXljbWRpLmgKQEAgLTAsMCArMSw5NCBAQAorI2lmbmRlZiBRRFNQNUFVRFBMQVlDTURJX0gKKyNkZWZpbmUgUURTUDVBVURQTEFZQ01ESV9ICisKKy8qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qCisKKyAgICAgICBRIEQgUyBQIDUgIEEgVSBEIEkgTyAgIFAgTCBBIFkgIFQgQSBTIEsgICBDIE8gTSBNIEEgTiBEIFMKKworR0VORVJBTCBERVNDUklQVElPTgorICBDb21tYW5kIEludGVyZmFjZSBmb3IgQVVEUExBWVRBU0sgb24gUURTUDUKKworUkVGRVJFTkNFUworICBOb25lCisKK0VYVEVSTkFMSVpFRCBGVU5DVElPTlMKKworICBhdWRwbGF5X2NtZF9kZWNfZGF0YV9hdmFpbAorICAgIFNlbmQgYnVmZmVyIHRvIEFVRFBMQVkgdGFzaworCisKK0NvcHlyaWdodChjKSAxOTkyIC0gMjAwOSBieSBRVUFMQ09NTSwgSW5jb3Jwb3JhdGVkLgorCitUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworKj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Ki8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgICAgICAgICAgICAgICBFRElUIEhJU1RPUlkgRk9SIEZJTEUKKworVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGNvbW1lbnRzIGRlc2NyaWJpbmcgY2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZS4KK05vdGljZSB0aGF0IGNoYW5nZXMgYXJlIGxpc3RlZCBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIuCisKKyRIZWFkZXI6IC8vc291cmNlL3Fjb20vcWN0L211bHRpbWVkaWEyL0F1ZGlvL2RyaXZlcnMvUURTUDVEcml2ZXIvUURTUDVJbnRlcmZhY2UvbWFpbi9sYXRlc3QvcWRzcDVhdWRwbGF5Y21kaS5oIzIgJAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisjZGVmaW5lIEFVRFBMQVlfQ01EX0JJVFNUUkVBTV9EQVRBX0FWQUlMCQkweDAwMDAKKyNkZWZpbmUgQVVEUExBWV9DTURfQklUU1RSRUFNX0RBVEFfQVZBSUxfTEVOCVwKKwlzaXplb2YoYXVkcGxheV9jbWRfYml0c3RyZWFtX2RhdGFfYXZhaWwpCisKKy8qIFR5cGUgc3BlY2lmaWNhdGlvbiBvZiBkZWNfZGF0YV9hdmFpbCBtZXNzYWdlIHNlbnQgdG8gQVVEUExBWVRBU0sKKyovCit0eXBlZGVmIHN0cnVjdCB7CisJLypjb21tYW5kIElEKi8KKwl1bnNpZ25lZCBpbnQgY21kX2lkOworCisJLyogRGVjb2RlciBJRCBmb3Igd2hpY2ggbWVzc2FnZSBpcyBiZWluZyBzZW50ICovCisJdW5zaWduZWQgaW50IGRlY29kZXJfaWQ7CisKKwkvKiBTdGFydCBhZGRyZXNzIG9mIGRhdGEgaW4gQVJNIGdsb2JhbCBtZW1vcnkgKi8KKwl1bnNpZ25lZCBpbnQgYnVmX3B0cjsKKworCS8qIE51bWJlciBvZiAxNi1iaXQgd29yZHMgb2YgYml0LXN0cmVhbSBkYXRhIGNvbnRpZ3VvdXNseSBhdmFpbGFibGUgYXQgdGhlCisJICogYWJvdmUtbWVudGlvbmVkIGFkZHJlc3MuICovCisJdW5zaWduZWQgaW50IGJ1Zl9zaXplOworCisJLyogUGFydGl0aW9uIG51bWJlciB1c2VkIGJ5IGF1ZFBsYXlUYXNrIHRvIGNvbW11bmljYXRlIHdpdGggRFNQJ3MgUlRPUworCSAqIGtlcm5lbCAqLworCXVuc2lnbmVkIGludCBwYXJ0aXRpb25fbnVtYmVyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwbGF5X2NtZF9iaXRzdHJlYW1fZGF0YV9hdmFpbDsKKworI2RlZmluZSBBVURQTEFZX0NNRF9IUENNX0JVRl9DRkcgMHgwMDAzCisjZGVmaW5lIEFVRFBMQVlfQ01EX0hQQ01fQlVGX0NGR19MRU4gXAorCXNpemVvZihzdHJ1Y3QgYXVkcGxheV9jbWRfaHBjbV9idWZfY2ZnKQorCitzdHJ1Y3QgYXVkcGxheV9jbWRfaHBjbV9idWZfY2ZnIHsKKwl1bnNpZ25lZCBpbnQgY21kX2lkOworCXVuc2lnbmVkIGludCBob3N0cGNtX2NvbmZpZzsKKwl1bnNpZ25lZCBpbnQgZmVlZGJhY2tfZnJlcXVlbmN5OworCXVuc2lnbmVkIGludCBieXRlX3N3YXA7CisJdW5zaWduZWQgaW50IG1heF9idWZmZXJzOworCXVuc2lnbmVkIGludCBwYXJ0aXRpb25fbnVtYmVyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBBVURQTEFZX0NNRF9CVUZGRVJfUkVGUkVTSCAweDAwMDQKKyNkZWZpbmUgQVVEUExBWV9DTURfQlVGRkVSX1JFRlJFU0hfTEVOIFwKKwlzaXplb2Yoc3RydWN0IGF1ZHBsYXlfY21kX2J1ZmZlcl91cGRhdGUpCisKK3N0cnVjdCBhdWRwbGF5X2NtZF9idWZmZXJfcmVmcmVzaCB7CisJdW5zaWduZWQgaW50IGNtZF9pZDsKKwl1bnNpZ25lZCBpbnQgbnVtX2J1ZmZlcnM7CisJdW5zaWduZWQgaW50IGJ1Zl9yZWFkX2NvdW50OworCXVuc2lnbmVkIGludCBidWYwX2FkZHJlc3M7CisJdW5zaWduZWQgaW50IGJ1ZjBfbGVuZ3RoOworCXVuc2lnbmVkIGludCBidWYxX2FkZHJlc3M7CisJdW5zaWduZWQgaW50IGJ1ZjFfbGVuZ3RoOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyNlbmRpZiAvKiBRRFNQNUFVRFBMQVlDTURfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNWF1ZHBsYXltc2cuaCBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVhdWRwbGF5bXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYzMDM0YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVhdWRwbGF5bXNnLmgKQEAgLTAsMCArMSw3MCBAQAorI2lmbmRlZiBRRFNQNUFVRFBMQVlNU0dfSAorI2RlZmluZSBRRFNQNUFVRFBMQVlNU0dfSAorCisvKj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09KgorCisgICAgICAgUSBEIFMgUCA1ICBBIFUgRCBJIE8gICBQIEwgQSBZICBUIEEgUyBLICAgTSBTIEcKKworR0VORVJBTCBERVNDUklQVElPTgorICBNZXNzYWdlIHNlbnQgYnkgQVVEUExBWSB0YXNrCisKK1JFRkVSRU5DRVMKKyAgTm9uZQorCisKK0NvcHlyaWdodChjKSAxOTkyIC0gMjAwOSBieSBRVUFMQ09NTSwgSW5jb3Jwb3JhdGVkLgorCitUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworKj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Ki8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgICAgICAgICAgICAgICBFRElUIEhJU1RPUlkgRk9SIEZJTEUKKworVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGNvbW1lbnRzIGRlc2NyaWJpbmcgY2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZS4KK05vdGljZSB0aGF0IGNoYW5nZXMgYXJlIGxpc3RlZCBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIuCisKKyRIZWFkZXI6IC8vc291cmNlL3Fjb20vcWN0L211bHRpbWVkaWEyL0F1ZGlvL2RyaXZlcnMvUURTUDVEcml2ZXIvUURTUDVJbnRlcmZhY2UvbWFpbi9sYXRlc3QvcWRzcDVhdWRwbGF5bXNnLmgjMyAkCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisjZGVmaW5lIEFVRFBMQVlfTVNHX0RFQ19ORUVEU19EQVRBCQkweDAwMDEKKyNkZWZpbmUgQVVEUExBWV9NU0dfREVDX05FRURTX0RBVEFfTVNHX0xFTglcCisJc2l6ZW9mKGF1ZHBsYXlfbXNnX2RlY19uZWVkc19kYXRhKQorCit0eXBlZGVmIHN0cnVjdHsKKwkvKiByZXNlcnZlZCovCisJdW5zaWduZWQgaW50IGRlY19pZDsKKworCS8qIFRoZSByZWFkIHBvaW50ZXIgb2Zmc2V0IG9mIGV4dGVybmFsIG1lbW9yeSB1bnRpbCB3aGljaCB0aGUKKwkgKiBiaXRzdHJlYW0gaGFzIGJlZW4gRE1BZWQgaW4uICovCisJdW5zaWduZWQgaW50IGFkZWNEYXRhUmVhZFB0ck9mZnNldDsKKworCS8qIFRoZSBidWZmZXIgc2l6ZSBvZiBleHRlcm5hbCBtZW1vcnkuICovCisJdW5zaWduZWQgaW50IGFkZWNEYXRhQnVmU2l6ZTsKKworCXVuc2lnbmVkIGludCBiaXRzdHJlYW1fZnJlZV9sZW47CisJdW5zaWduZWQgaW50IGJpdHN0cmVhbV93cml0ZV9wdHI7CisJdW5zaWduZWQgaW50IGJpdHN0YXJlbV9idWZfc3RhcnQ7CisJdW5zaWduZWQgaW50IGJpdHN0cmVhbV9idWZfbGVuOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwbGF5X21zZ19kZWNfbmVlZHNfZGF0YTsKKworI2RlZmluZSBBVURQTEFZX01TR19CVUZGRVJfVVBEQVRFIDB4MDAwNAorI2RlZmluZSBBVURQTEFZX01TR19CVUZGRVJfVVBEQVRFX0xFTiBcCisJc2l6ZW9mKHN0cnVjdCBhdWRwbGF5X21zZ19idWZmZXJfdXBkYXRlKQorCitzdHJ1Y3QgYXVkcGxheV9tc2dfYnVmZmVyX3VwZGF0ZSB7CisJdW5zaWduZWQgaW50IGJ1ZmZlcl93cml0ZV9jb3VudDsKKwl1bnNpZ25lZCBpbnQgbnVtX29mX2J1ZmZlcjsKKwl1bnNpZ25lZCBpbnQgYnVmMF9hZGRyZXNzOworCXVuc2lnbmVkIGludCBidWYwX2xlbmd0aDsKKwl1bnNpZ25lZCBpbnQgYnVmMV9hZGRyZXNzOworCXVuc2lnbmVkIGludCBidWYxX2xlbmd0aDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisjZW5kaWYgLyogUURTUDVBVURQTEFZTVNHX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVhdWRwcGNtZGkuaCBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVhdWRwcGNtZGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmVlOWM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNWF1ZHBwY21kaS5oCkBAIC0wLDAgKzEsOTE0IEBACisjaWZuZGVmIFFEU1A1QVVEUFBDTURJX0gKKyNkZWZpbmUgUURTUDVBVURQUENNRElfSAorCisvKj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09KgorCisgICAgQSBVIEQgSSBPICAgUCBPIFMgVCAgIFAgUiBPIEMgRSBTIFMgSSBOIEcgIEkgTiBUIEUgUiBOIEEgTCAgQyBPIE0gTSBBIE4gRCBTCisKK0dFTkVSQUwgREVTQ1JJUFRJT04KKyAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmludGlvbnMgb2YgZm9ybWF0IGJsb2NrcyBvZiBjb21tYW5kcworICB0aGF0IGFyZSBhY2NlcHRlZCBieSBBVURQUCBUYXNrCisKK1JFRkVSRU5DRVMKKyAgTm9uZQorCitFWFRFUk5BTElaRUQgRlVOQ1RJT05TCisgIE5vbmUKKworQ29weXJpZ2h0KGMpIDE5OTIgLSAyMDA4IGJ5IFFVQUxDT01NLCBJbmNvcnBvcmF0ZWQuCisKK1RoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCittYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisqPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgICAgICAgICAgICAgICAgIEVESVQgSElTVE9SWSBGT1IgRklMRQorCitUaGlzIHNlY3Rpb24gY29udGFpbnMgY29tbWVudHMgZGVzY3JpYmluZyBjaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlLgorTm90aWNlIHRoYXQgY2hhbmdlcyBhcmUgbGlzdGVkIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlci4KKworJEhlYWRlcjogLy9zb3VyY2UvcWNvbS9xY3QvbXVsdGltZWRpYTIvQXVkaW8vZHJpdmVycy9RRFNQNURyaXZlci9RRFNQNUludGVyZmFjZS9tYWluL2xhdGVzdC9xZHNwNWF1ZHBwY21kaS5oIzIgJAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKgorICogQVJNIHRvIEFVRFBQVEFTSyBDb21tYW5kcworICoKKyAqIEFSTSB1c2VzIHRocmVlIGNvbW1hbmQgcXVldWVzIHRvIGNvbW11bmljYXRlIHdpdGggQVVEUFBUQVNLCisgKiAxKXVQQXVkUFBDbWQxUXVldWUgOiBVc2VkIGZvciBtb3JlIGZyZXF1ZW50IGFuZCBzaG9ydGVyIGxlbmd0aCBjb21tYW5kcworICogCUxvY2F0aW9uIDogTUVNQQorICogCUJ1ZmZlciBTaXplIDogNiB3b3JkcworICogCU5vIG9mIGJ1ZmZlcnMgaW4gYSBxdWV1ZSA6IDIwIGZvciBnYW1pbmcgYXVkaW8gYW5kIDUgZm9yIG90aGVyIGltYWdlcworICogMil1UEF1ZFBQQ21kMlF1ZXVlIDogVXNlZCBmb3IgY29tbWFuZHMgd2hpY2ggYXJlIG5vdCBtdWNoIGxlbmd0aGllcgorICogCUxvY2F0aW9uIDogTUVNQQorICogCUJ1ZmZlciBTaXplIDogMjMKKyAqIAlObyBvZiBidWZmZXJzIGluIGEgcXVldWUgOiAyCisgKiAzKXVQQXVkT09DbWQzUXVldWUgOiBVc2VkIGZvciBsZW5ndGhpZXIgYW5kIG1vcmUgZnJlcXVlbnQgY29tbWFuZHMKKyAqIAlMb2NhdGlvbiA6IE1FTUEKKyAqIAlCdWZmZXIgU2l6ZSA6IDE0NQorICogCU5vIG9mIGJ1ZmZlcnMgaW4gYSBxdWV1ZSA6IDMKKyAqLworCisvKgorICogQ29tbWFuZHMgUmVsYXRlZCB0byB1UEF1ZFBQQ21kMVF1ZXVlCisgKi8KKworLyoKKyAqIENvbW1hbmQgU3RydWN0dXJlIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBhY3RpdmUgZGVjb2RlcnMKKyAqLworCisjZGVmaW5lIEFVRFBQX0NNRF9DRkdfREVDX1RZUEUgCQkweDAwMDEKKyNkZWZpbmUgQVVEUFBfQ01EX0NGR19ERUNfVFlQRV9MRU4gCXNpemVvZihhdWRwcF9jbWRfY2ZnX2RlY190eXBlKQorCisvKiBFbmFibGUgdGhlIGRlY29kZXIgKi8KKyNkZWZpbmUgQVVEUFBfQ01EX0RFQ19UWVBFX00gICAgICAgICAgIAkweDAwMEYKKworI2RlZmluZSBBVURQUF9DTURfRU5BX0RFQ19WICAgICAgICAgCTB4NDAwMAorI2RlZmluZSBBVURQUF9DTURfRElTX0RFQ19WICAgICAgICAJMHgwMDAwCisjZGVmaW5lIEFVRFBQX0NNRF9ERUNfU1RBVEVfTSAgICAgICAgICAJMHg0MDAwCisKKyNkZWZpbmUgQVVEUFBfQ01EX1VQREFUREVfQ0ZHX0RFQwkweDgwMDAKKyNkZWZpbmUgQVVEUFBfQ01EX0RPTlRfVVBEQVRFX0NGR19ERUMJMHgwMDAwCisKKworLyogVHlwZSBzcGVjaWZpY2F0aW9uIG9mIGNtZF9jZmdfZGVjICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCBjbWRfaWQ7CisJdW5zaWduZWQgc2hvcnQgZGVjMF9jZmc7CisJdW5zaWduZWQgc2hvcnQgZGVjMV9jZmc7CisJdW5zaWduZWQgc2hvcnQgZGVjMl9jZmc7CisJdW5zaWduZWQgc2hvcnQgZGVjM19jZmc7CisJdW5zaWduZWQgc2hvcnQgZGVjNF9jZmc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBwX2NtZF9jZmdfZGVjX3R5cGU7CisKKy8qCisgKiBDb21tYW5kIFN0cnVjdHVyZSB0byBQYXVzZSAsIFJlc3VtZSBhbmQgZmx1c2hlcyB0aGUgc2VsZWN0ZWQgYXVkaW8gZGVjb2RlcnMKKyAqLworCisjZGVmaW5lIEFVRFBQX0NNRF9ERUNfQ1RSTAkJMHgwMDAyCisjZGVmaW5lIEFVRFBQX0NNRF9ERUNfQ1RSTF9MRU4JCXNpemVvZihhdWRwcF9jbWRfZGVjX2N0cmwpCisKKy8qIERlY29kZXIgY29udHJvbCBjb21tYW5kcyBmb3IgcGF1c2UsIHJlc3VtZSBhbmQgZmx1c2ggKi8KKyNkZWZpbmUgQVVEUFBfQ01EX0ZMVVNIX1YgICAgICAgICAJCTB4MjAwMAorCisjZGVmaW5lIEFVRFBQX0NNRF9QQVVTRV9WCQkgICAgICAgIDB4NDAwMAorI2RlZmluZSBBVURQUF9DTURfUkVTVU1FX1YJCSAgICAgICAgMHgwMDAwCisKKyNkZWZpbmUgQVVEUFBfQ01EX1VQREFURV9WCQkgICAgICAgIDB4ODAwMAorI2RlZmluZSBBVURQUF9DTURfSUdOT1JFX1YJCSAgICAgICAgMHgwMDAwCisKKworLyogVHlwZSBTcGVjIGZvciBkZWNvZGVyIGNvbnRyb2wgY29tbWFuZCovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCBjbWRfaWQ7CisJdW5zaWduZWQgc2hvcnQgZGVjMF9jdHJsOworCXVuc2lnbmVkIHNob3J0IGRlYzFfY3RybDsKKwl1bnNpZ25lZCBzaG9ydCBkZWMyX2N0cmw7CisJdW5zaWduZWQgc2hvcnQgZGVjM19jdHJsOworCXVuc2lnbmVkIHNob3J0IGRlYzRfY3RybDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcHBfY21kX2RlY19jdHJsOworCisvKgorICogQ29tbWFuZCBTdHJ1Y3R1cmUgdG8gQ29uZmlndXJlIHRoZSBBVlN5bmMgRmVlZEJhY2sgTWVjaGFuaXNtCisgKi8KKworI2RlZmluZSBBVURQUF9DTURfQVZTWU5DCTB4MDAwMworI2RlZmluZSBBVURQUF9DTURfQVZTWU5DX0xFTglzaXplb2YoYXVkcHBfY21kX2F2c3luYykKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IGNtZF9pZDsKKwl1bnNpZ25lZCBzaG9ydCBvYmplY3RfbnVtYmVyOworCXVuc2lnbmVkIHNob3J0IGludGVycnVwdF9pbnRlcnZhbF9sc3c7CisJdW5zaWduZWQgc2hvcnQgaW50ZXJydXB0X2ludGVydmFsX21zdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcHBfY21kX2F2c3luYzsKKworLyoKKyAqIENvbW1hbmQgU3RydWN0dXJlIHRvIGVuYWJsZSBvciBkaXNhYmxlKHNsZWVwKSB0aGUgICBBVURQUFRBU0sKKyAqLworCisjZGVmaW5lIEFVRFBQX0NNRF9DRkcJMHgwMDA0CisjZGVmaW5lIEFVRFBQX0NNRF9DRkdfTEVOCXNpemVvZihhdWRwcF9jbWRfY2ZnKQorCisjZGVmaW5lIEFVRFBQX0NNRF9DRkdfU0xFRVAgICAJCQkJMHgwMDAwCisjZGVmaW5lIEFVRFBQX0NNRF9DRkdfRU5BQkxFICAJCQkJMHhGRkZGCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCBjbWRfaWQ7CisJdW5zaWduZWQgc2hvcnQgY2ZnOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcF9jbWRfY2ZnOworCisvKgorICogQ29tbWFuZCBTdHJ1Y3R1cmUgdG8gSW5qZWN0IG9yIGRyb3AgdGhlIHNwZWNpZmllZCBubyBvZiBzYW1wbGVzCisgKi8KKworI2RlZmluZSBBVURQUF9DTURfQURKVVNUX1NBTVAJCTB4MDAwNQorI2RlZmluZSBBVURQUF9DTURfQURKVVNUX1NBTVBfTEVOCXNpemVvZihhdWRwcF9jbWRfYWRqdXN0X3NhbXApCisKKyNkZWZpbmUgQVVEUFBfQ01EX1NBTVBfRFJPUAkJLTEKKyNkZWZpbmUgQVVEUFBfQ01EX1NBTVBfSU5TRVJUCQkweDAwMDEKKworI2RlZmluZSBBVURQUF9DTURfTlVNX1NBTVBMRVMJCTB4MDAwMQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQgY21kX2lkOworCXVuc2lnbmVkIHNob3J0IG9iamVjdF9ubzsKKwlzaWduZWQgc2hvcnQgc2FtcGxlX2luc2VydF9vcl9kcm9wOworCXVuc2lnbmVkIHNob3J0IG51bV9zYW1wbGVzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcF9jbWRfYWRqdXN0X3NhbXA7CisKKy8qCisgKiBDb21tYW5kIFN0cnVjdHVyZSB0byBDb25maWd1cmUgQVZTeW5jIEZlZWRiYWNrIE1lY2hhbmlzbQorICovCisKKyNkZWZpbmUgQVVEUFBfQ01EX0FWU1lOQ19DTURfMgkJMHgwMDA2CisjZGVmaW5lIEFVRFBQX0NNRF9BVlNZTkNfQ01EXzJfTEVOCXNpemVvZihhdWRwcF9jbWRfYXZzeW5jX2NtZF8yKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQgY21kX2lkOworCXVuc2lnbmVkIHNob3J0IG9iamVjdF9udW1iZXI7CisJdW5zaWduZWQgc2hvcnQgaW50ZXJydXB0X2ludGVydmFsX2xzdzsKKwl1bnNpZ25lZCBzaG9ydCBpbnRlcnJ1cHRfaW50ZXJ2YWxfbXN3OworCXVuc2lnbmVkIHNob3J0IHNhbXBsZV9jb3VudGVyX2Rsc3c7CisJdW5zaWduZWQgc2hvcnQgc2FtcGxlX2NvdW50ZXJfZG1zdzsKKwl1bnNpZ25lZCBzaG9ydCBzYW1wbGVfY291bnRlcl9tc3c7CisJdW5zaWduZWQgc2hvcnQgYnl0ZV9jb3VudGVyX2Rsc3c7CisJdW5zaWduZWQgc2hvcnQgYnl0ZV9jb3VudGVyX2Rtc3c7CisJdW5zaWduZWQgc2hvcnQgYnl0ZV9jb3VudGVyX21zdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcHBfY21kX2F2c3luY19jbWRfMjsKKworLyoKKyAqIENvbW1hbmQgU3RydWN0dXJlIHRvIENvbmZpZ3VyZSBBVlN5bmMgRmVlZGJhY2sgTWVjaGFuaXNtCisgKi8KKworI2RlZmluZSBBVURQUF9DTURfQVZTWU5DX0NNRF8zCQkweDAwMDcKKyNkZWZpbmUgQVVEUFBfQ01EX0FWU1lOQ19DTURfM19MRU4Jc2l6ZW9mKGF1ZHBwX2NtZF9hdnN5bmNfY21kXzMpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCBjbWRfaWQ7CisJdW5zaWduZWQgc2hvcnQgb2JqZWN0X251bWJlcjsKKwl1bnNpZ25lZCBzaG9ydCBpbnRlcnJ1cHRfaW50ZXJ2YWxfbHN3OworCXVuc2lnbmVkIHNob3J0IGludGVycnVwdF9pbnRlcnZhbF9tc3c7CisJdW5zaWduZWQgc2hvcnQgc2FtcGxlX2NvdW50ZXJfZGxzdzsKKwl1bnNpZ25lZCBzaG9ydCBzYW1wbGVfY291bnRlcl9kbXN3OworCXVuc2lnbmVkIHNob3J0IHNhbXBsZV9jb3VudGVyX21zdzsKKwl1bnNpZ25lZCBzaG9ydCBieXRlX2NvdW50ZXJfZGxzdzsKKwl1bnNpZ25lZCBzaG9ydCBieXRlX2NvdW50ZXJfZG1zdzsKKwl1bnNpZ25lZCBzaG9ydCBieXRlX2NvdW50ZXJfbXN3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcF9jbWRfYXZzeW5jX2NtZF8zOworCisjZGVmaW5lIEFVRFBQX0NNRF9ST1VUSU5HX01PREUgICAgICAweDAwMDgKKyNkZWZpbmUgQVVEUFBfQ01EX1JPVVRJTkdfTU9ERV9MRU4gIFwKK3NpemVvZihzdHJ1Y3QgYXVkcHBfY21kX3JvdXRpbmdfbW9kZSkKKworc3RydWN0IGF1ZHBwX2NtZF9yb3V0aW5nX21vZGUgeworCXVuc2lnbmVkIHNob3J0IGNtZF9pZDsKKwl1bnNpZ25lZCBzaG9ydCBvYmplY3RfbnVtYmVyOworCXVuc2lnbmVkIHNob3J0IHJvdXRpbmdfbW9kZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qCisgKiBDb21tYW5kcyBSZWxhdGVkIHRvIHVQQXVkUFBDbWQyUXVldWUKKyAqLworCisvKgorICogQ29tbWFuZCBTdHJ1Y3R1cmUgdG8gY29uZmlndXJlIFBlciBkZWNvZGVyIFBhcmFtZXRlcnMgKENvbW1vbikKKyAqLworCisjZGVmaW5lIEFVRFBQX0NNRF9DRkdfQURFQ19QQVJBTVMgCQkweDAwMDAKKyNkZWZpbmUgQVVEUFBfQ01EX0NGR19BREVDX1BBUkFNU19DT01NT05fTEVOCVwKKwlzaXplb2YoYXVkcHBfY21kX2NmZ19hZGVjX3BhcmFtc19jb21tb24pCisKKyNkZWZpbmUgQVVEUFBfQ01EX1NUQVRVU19NU0dfRkxBR19FTkFfRkNNCTB4NDAwMAorI2RlZmluZSBBVURQUF9DTURfU1RBVFVTX01TR19GTEFHX0RJU19GQ00JMHgwMDAwCisKKyNkZWZpbmUgQVVEUFBfQ01EX1NUQVRVU19NU0dfRkxBR19FTkFfRENNCTB4ODAwMAorI2RlZmluZSBBVURQUF9DTURfU1RBVFVTX01TR19GTEFHX0RJU19EQ00JMHgwMDAwCisKKy8qIFNhbXBsaW5nIGZyZXF1ZW5jeSovCisjZGVmaW5lICBBVURQUF9DTURfU0FNUF9SQVRFXzk2MDAwIAkweDAwMDAKKyNkZWZpbmUgIEFVRFBQX0NNRF9TQU1QX1JBVEVfODgyMDAgCTB4MDAwMQorI2RlZmluZSAgQVVEUFBfQ01EX1NBTVBfUkFURV82NDAwMCAJMHgwMDAyCisjZGVmaW5lICBBVURQUF9DTURfU0FNUF9SQVRFXzQ4MDAwIAkweDAwMDMKKyNkZWZpbmUgIEFVRFBQX0NNRF9TQU1QX1JBVEVfNDQxMDAgCTB4MDAwNAorI2RlZmluZSAgQVVEUFBfQ01EX1NBTVBfUkFURV8zMjAwMCAJMHgwMDA1CisjZGVmaW5lICBBVURQUF9DTURfU0FNUF9SQVRFXzI0MDAwIAkweDAwMDYKKyNkZWZpbmUgIEFVRFBQX0NNRF9TQU1QX1JBVEVfMjIwNTAgCTB4MDAwNworI2RlZmluZSAgQVVEUFBfQ01EX1NBTVBfUkFURV8xNjAwMCAJMHgwMDA4CisjZGVmaW5lICBBVURQUF9DTURfU0FNUF9SQVRFXzEyMDAwIAkweDAwMDkKKyNkZWZpbmUgIEFVRFBQX0NNRF9TQU1QX1JBVEVfMTEwMjUgCTB4MDAwQQorI2RlZmluZSAgQVVEUFBfQ01EX1NBTVBfUkFURV84MDAwICAJMHgwMDBCCisKKworLyoKKyAqIFR5cGUgc3BlY2lmaWNhdGlvbiBvZiBjbWRfYWRlY19jZmcgc2VudCB0byBhbGwgZGVjb2RlcgorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgc2hvcnQgY21kX2lkOworICB1bnNpZ25lZCBzaG9ydCAgbGVuZ3RoOworICB1bnNpZ25lZCBzaG9ydCAgZGVjX2lkOworICB1bnNpZ25lZCBzaG9ydCAgc3RhdHVzX21zZ19mbGFnOworICB1bnNpZ25lZCBzaG9ydCAgZGVjb2Rlcl9mcmFtZV9jb3VudGVyX21zZ19wZXJpb2Q7CisgIHVuc2lnbmVkIHNob3J0ICBpbnB1dF9zYW1wbGluZ19mcmVxdWVuY3k7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBwX2NtZF9jZmdfYWRlY19wYXJhbXNfY29tbW9uOworCisvKgorICogQ29tbWFuZCBTdHJ1Y3R1cmUgdG8gY29uZmlndXJlIFBlciBkZWNvZGVyIFBhcmFtZXRlcnMgKFdhdikKKyAqLworCisjZGVmaW5lIEFVRFBQX0NNRF9DRkdfQURFQ19QQVJBTVNfV0FWX0xFTglcCisJc2l6ZW9mKGF1ZHBwX2NtZF9jZmdfYWRlY19wYXJhbXNfd2F2KQorCisKKyNkZWZpbmUgQVVEUFBfQ01EX1dBVl9TVEVSRU9fQ0ZHX01PTk8JMHgwMDAxCisjZGVmaW5lIEFVRFBQX0NNRF9XQVZfU1RFUkVPX0NGR19TVEVSRU8JMHgwMDAyCisKKyNkZWZpbmUgQVVEUFBfQ01EX1dBVl9QQ01fV0lEVEhfOAkweDAwMDAKKyNkZWZpbmUgQVVEUFBfQ01EX1dBVl9QQ01fV0lEVEhfMTYJMHgwMDAxCisjZGVmaW5lIEFVRFBQX0NNRF9XQVZfUENNX1dJRFRIXzMyCTB4MDAwMgorCit0eXBlZGVmIHN0cnVjdCB7CisJYXVkcHBfY21kX2NmZ19hZGVjX3BhcmFtc19jb21tb24JCWNvbW1vbjsKKwl1bnNpZ25lZCBzaG9ydAkJCQkJc3RlcmVvX2NmZzsKKwl1bnNpZ25lZCBzaG9ydAkJCQkJcGNtX3dpZHRoOworCXVuc2lnbmVkIHNob3J0IAkJCQkJc2lnbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcHBfY21kX2NmZ19hZGVjX3BhcmFtc193YXY7CisKKy8qCisgKiBDb21tYW5kIFN0cnVjdHVyZSB0byBjb25maWd1cmUgUGVyIGRlY29kZXIgUGFyYW1ldGVycyAoQURQQ00pCisgKi8KKworI2RlZmluZSBBVURQUF9DTURfQ0ZHX0FERUNfUEFSQU1TX0FEUENNX0xFTglcCisJc2l6ZW9mKGF1ZHBwX2NtZF9jZmdfYWRlY19wYXJhbXNfYWRwY20pCisKKworI2RlZmluZQlBVURQUF9DTURfQURQQ01fU1RFUkVPX0NGR19NT05PCQkweDAwMDEKKyNkZWZpbmUgQVVEUFBfQ01EX0FEUENNX1NURVJFT19DRkdfU1RFUkVPCTB4MDAwMgorCit0eXBlZGVmIHN0cnVjdCB7CisJYXVkcHBfY21kX2NmZ19hZGVjX3BhcmFtc19jb21tb24JCWNvbW1vbjsKKwl1bnNpZ25lZCBzaG9ydAkJCQkJc3RlcmVvX2NmZzsKKwl1bnNpZ25lZCBzaG9ydCAJCQkJCWJsb2NrX3NpemU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBwX2NtZF9jZmdfYWRlY19wYXJhbXNfYWRwY207CisKKy8qCisgKiBDb21tYW5kIFN0cnVjdHVyZSB0byBjb25maWd1cmUgUGVyIGRlY29kZXIgUGFyYW1ldGVycyAoTVAzKQorICovCisKKyNkZWZpbmUgQVVEUFBfQ01EX0NGR19BREVDX1BBUkFNU19NUDNfTEVOCVwKKwlzaXplb2YoYXVkcHBfY21kX2NmZ19hZGVjX3BhcmFtc19tcDMpCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIGF1ZHBwX2NtZF9jZmdfYWRlY19wYXJhbXNfY29tbW9uICAgIGNvbW1vbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcHBfY21kX2NmZ19hZGVjX3BhcmFtc19tcDM7CisKKworLyoKKyAqIENvbW1hbmQgU3RydWN0dXJlIHRvIGNvbmZpZ3VyZSBQZXIgZGVjb2RlciBQYXJhbWV0ZXJzIChBQUMpCisgKi8KKworI2RlZmluZSBBVURQUF9DTURfQ0ZHX0FERUNfUEFSQU1TX0FBQ19MRU4JXAorCXNpemVvZihhdWRwcF9jbWRfY2ZnX2FkZWNfcGFyYW1zX2FhYykKKworCisjZGVmaW5lIEFVRFBQX0NNRF9BQUNfRk9STUFUX0FEVFMJCS0xCisjZGVmaW5lCUFVRFBQX0NNRF9BQUNfRk9STUFUX1JBVwkJMHgwMDAwCisjZGVmaW5lCUFVRFBQX0NNRF9BQUNfRk9STUFUX1BTVUVET19SQVcJCTB4MDAwMQorI2RlZmluZQlBVURQUF9DTURfQUFDX0ZPUk1BVF9MT0FTCQkweDAwMDIKKworI2RlZmluZSBBVURQUF9DTURfQUFDX0FVRElPX09CSkVDVF9MQwkJMHgwMDAyCisjZGVmaW5lIEFVRFBQX0NNRF9BQUNfQVVESU9fT0JKRUNUX0xUUAkJMHgwMDA0CisjZGVmaW5lIEFVRFBQX0NNRF9BQUNfQVVESU9fT0JKRUNUX0VSTEMJMHgwMDExCisKKyNkZWZpbmUgQVVEUFBfQ01EX0FBQ19TQlJfT05fRkxBR19PTgkJMHgwMDAxCisjZGVmaW5lIEFVRFBQX0NNRF9BQUNfU0JSX09OX0ZMQUdfT0ZGCQkweDAwMDAKKworI2RlZmluZSBBVURQUF9DTURfQUFDX1NCUl9QU19PTl9GTEFHX09OCQkweDAwMDEKKyNkZWZpbmUgQVVEUFBfQ01EX0FBQ19TQlJfUFNfT05fRkxBR19PRkYJMHgwMDAwCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgYXVkcHBfY21kX2NmZ19hZGVjX3BhcmFtc19jb21tb24JY29tbW9uOworICBzaWduZWQgc2hvcnQJCQkJZm9ybWF0OworICB1bnNpZ25lZCBzaG9ydAkJCWF1ZGlvX29iamVjdDsKKyAgdW5zaWduZWQgc2hvcnQJCQllcF9jb25maWc7CisgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgICAgICAgICAgICAgICAgYWFjX3NlY3Rpb25fZGF0YV9yZXNpbGllbmNlX2ZsYWc7CisgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgICAgICAgICAgICAgICAgYWFjX3NjYWxlZmFjdG9yX2RhdGFfcmVzaWxpZW5jZV9mbGFnOworICB1bnNpZ25lZCBzaG9ydCAgICAgICAgICAgICAgICAgICAgICAgIGFhY19zcGVjdHJhbF9kYXRhX3Jlc2lsaWVuY2VfZmxhZzsKKyAgdW5zaWduZWQgc2hvcnQgICAgICAgICAgICAgICAgICAgICAgICBzYnJfb25fZmxhZzsKKyAgdW5zaWduZWQgc2hvcnQgICAgICAgICAgICAgICAgICAgICAgICBzYnJfcHNfb25fZmxhZzsKKyAgdW5zaWduZWQgc2hvcnQgICAgICAgICAgICAgICAgICAgICAgICBkdWFsX21vbm9fbW9kZTsKKyAgdW5zaWduZWQgc2hvcnQgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsX2NvbmZpZ3VyYXRpb247Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBwX2NtZF9jZmdfYWRlY19wYXJhbXNfYWFjOworCisvKgorICogQ29tbWFuZCBTdHJ1Y3R1cmUgdG8gY29uZmlndXJlIFBlciBkZWNvZGVyIFBhcmFtZXRlcnMgKFYxM0spCisgKi8KKworI2RlZmluZSBBVURQUF9DTURfQ0ZHX0FERUNfUEFSQU1TX1YxM0tfTEVOCVwKKwlzaXplb2Yoc3RydWN0IGF1ZHBwX2NtZF9jZmdfYWRlY19wYXJhbXNfdjEzaykKKworCisjZGVmaW5lIEFVRFBQX0NNRF9TVEVSRU9fQ0ZHX01PTk8JCTB4MDAwMQorI2RlZmluZSBBVURQUF9DTURfU1RFUkVPX0NGR19TVEVSRU8JCTB4MDAwMgorCitzdHJ1Y3QgYXVkcHBfY21kX2NmZ19hZGVjX3BhcmFtc192MTNrIHsKKyAgIGF1ZHBwX2NtZF9jZmdfYWRlY19wYXJhbXNfY29tbW9uICAgIAljb21tb247CisgICB1bnNpZ25lZCBzaG9ydAkJCXN0ZXJlb19jZmc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIEFVRFBQX0NNRF9DRkdfQURFQ19QQVJBTVNfRVZSQ19MRU4gXAorCXNpemVvZihzdHJ1Y3QgYXVkcHBfY21kX2NmZ19hZGVjX3BhcmFtc19ldnJjKQorCitzdHJ1Y3QgYXVkcHBfY21kX2NmZ19hZGVjX3BhcmFtc19ldnJjIHsKKwlhdWRwcF9jbWRfY2ZnX2FkZWNfcGFyYW1zX2NvbW1vbiBjb21tb247CisJdW5zaWduZWQgc2hvcnQgc3RlcmVvX2NmZzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogQ29tbWFuZCBTdHJ1Y3R1cmUgdG8gY29uZmlndXJlIHRoZSAgSE9TVCBQQ00gaW50ZXJmYWNlCisgKi8KKworI2RlZmluZSBBVURQUF9DTURfUENNX0lOVEYJMHgwMDAxCisjZGVmaW5lIEFVRFBQX0NNRF9QQ01fSU5URl8yCTB4MDAwMgorI2RlZmluZSBBVURQUF9DTURfUENNX0lOVEZfTEVOCXNpemVvZihhdWRwcF9jbWRfcGNtX2ludGYpCisKKyNkZWZpbmUgQVVEUFBfQ01EX1BDTV9JTlRGX01PTk9fVgkJICAgICAgICAweDAwMDEKKyNkZWZpbmUgQVVEUFBfQ01EX1BDTV9JTlRGX1NURVJFT19WICAgICAgICAgCTB4MDAwMgorCisvKiBUaGVzZSB0d28gdmFsdWVzIGRpZmZlcmVudGlhdGUgdGhlIHR3byB0eXBlcyBvZiBjb21tYW5kcyB0aGF0IGNvdWxkIGJlIGlzc3VlZAorICogSW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gY29tbWFuZCBhbmQgQnVmZmVyIHVwZGF0ZSBjb21tYW5kICovCisKKyNkZWZpbmUgQVVEUFBfQ01EX1BDTV9JTlRGX0NPTkZJR19DTURfVgkgICAgICAgCTB4MDAwMAorI2RlZmluZSBBVURQUF9DTURfUENNX0lOVEZfQlVGRkVSX0NNRF9WCSAgICAgICAgLTEKKworI2RlZmluZSBBVURQUF9DTURfUENNX0lOVEZfUlhfRU5BX00gICAgICAgICAgICAgIDB4MDAwRgorI2RlZmluZSBBVURQUF9DTURfUENNX0lOVEZfUlhfRU5BX0FSTVRPRFNQX1YgICAgIDB4MDAwOAorI2RlZmluZSBBVURQUF9DTURfUENNX0lOVEZfUlhfRU5BX0RTUFRPQVJNX1YgICAgIDB4MDAwNAorCisvKiBUaGVzZSBmbGFncyBjb250cm9sIHRoZSBlbmFibGluZyBhbmQgZGlzYWJsaW5nIG9mIHRoZSBpbnRlcmZhY2UgdG9nZXRoZXIKKyAqICB3aXRoIGhvc3QgaW50ZXJmYWNlIGJpdCBtYXNrLiAqLworCisjZGVmaW5lIEFVRFBQX0NNRF9QQ01fSU5URl9FTkFfViAgICAgICAgICAgIC0xCisjZGVmaW5lIEFVRFBQX0NNRF9QQ01fSU5URl9ESVNfViAgICAgICAgICAgIDB4MDAwMAorCisKKyNkZWZpbmUgIEFVRFBQX0NNRF9QQ01fSU5URl9GVUxMX0RVUExFWCAgICAgICAgICAgMHgwCisjZGVmaW5lICBBVURQUF9DTURfUENNX0lOVEZfSEFMRl9EVVBMRVhfVE9EU1AgICAgIDB4MQorCisKKyNkZWZpbmUgIEFVRFBQX0NNRF9QQ01fSU5URl9PQkpFQ1RfTlVNICAgICAgICAgICAweDUKKyNkZWZpbmUgIEFVRFBQX0NNRF9QQ01fSU5URl9DT01NT05fT0JKRUNUX05VTSAgICAweDYKKworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQgIGNtZF9pZDsKKwl1bnNpZ25lZCBzaG9ydCAgb2JqZWN0X251bTsKKwlzaWduZWQgc2hvcnQgIGNvbmZpZzsKKwl1bnNpZ25lZCBzaG9ydCAgaW50Zl90eXBlOworCisJLyogRFNQIC0+IEFSTSBDb25maWd1cmF0aW9uICovCisJdW5zaWduZWQgc2hvcnQgIHJlYWRfYnVmMUxTVzsKKwl1bnNpZ25lZCBzaG9ydCAgcmVhZF9idWYxTVNXOworCXVuc2lnbmVkIHNob3J0ICByZWFkX2J1ZjFfbGVuOworCisJdW5zaWduZWQgc2hvcnQgIHJlYWRfYnVmMkxTVzsKKwl1bnNpZ25lZCBzaG9ydCAgcmVhZF9idWYyTVNXOworCXVuc2lnbmVkIHNob3J0ICByZWFkX2J1ZjJfbGVuOworCS8qICAgMDpIT1NUX1BDTV9JTlRGIGRpc2FibGUKKwkqKiAgMHhGRkZGOiBIT1NUX1BDTV9JTlRGIGVuYWJsZQorCSovCisJc2lnbmVkIHNob3J0ICBkc3BfdG9fYXJtX2ZsYWc7CisJdW5zaWduZWQgc2hvcnQgIHBhcnRpdGlvbl9udW1iZXI7CisKKwkvKiBBUk0gLT4gRFNQIENvbmZpZ3VyYXRpb24gKi8KKwl1bnNpZ25lZCBzaG9ydCAgd3JpdGVfYnVmMUxTVzsKKwl1bnNpZ25lZCBzaG9ydCAgd3JpdGVfYnVmMU1TVzsKKwl1bnNpZ25lZCBzaG9ydCAgd3JpdGVfYnVmMV9sZW47CisKKwl1bnNpZ25lZCBzaG9ydCAgd3JpdGVfYnVmMkxTVzsKKwl1bnNpZ25lZCBzaG9ydCAgd3JpdGVfYnVmMk1TVzsKKwl1bnNpZ25lZCBzaG9ydCAgd3JpdGVfYnVmMl9sZW47CisKKwkvKiAgIDA6SE9TVF9QQ01fSU5URiBkaXNhYmxlCisJKiogIDB4RkZGRjogSE9TVF9QQ01fSU5URiBlbmFibGUKKwkqLworCXNpZ25lZCBzaG9ydCAgYXJtX3RvX3J4X2ZsYWc7CisJdW5zaWduZWQgc2hvcnQgIHdlaWdodF9kZWNvZGVyX3RvX3J4OworCXVuc2lnbmVkIHNob3J0ICB3ZWlnaHRfYXJtX3RvX3J4OworCisJdW5zaWduZWQgc2hvcnQgIHBhcnRpdGlvbl9udW1iZXJfYXJtX3RvX2RzcDsKKwl1bnNpZ25lZCBzaG9ydCAgc2FtcGxlX3JhdGU7CisJdW5zaWduZWQgc2hvcnQgIGNoYW5uZWxfbW9kZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcHBfY21kX3BjbV9pbnRmOworCisvKgorICoqICBCVUZGRVIgVVBEQVRFIENPTU1BTkQKKyAqLworI2RlZmluZSBBVURQUF9DTURfUENNX0lOVEZfU0VORF9CVUZfUEFSQU1TX0xFTglcCisJc2l6ZW9mKGF1ZHBwX2NtZF9wY21faW50Zl9zZW5kX2J1ZmZlcikKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1bnNpZ25lZCBzaG9ydCAgY21kX2lkOworICB1bnNpZ25lZCBzaG9ydCAgaG9zdF9wY21fb2JqZWN0OworICAvKiBzZXQgY29uZmlnID0gMHhGRkZGIGZvciBjb25maWd1cmF0aW9uKi8KKyAgc2lnbmVkIHNob3J0ICBjb25maWc7CisgIHVuc2lnbmVkIHNob3J0ICBpbnRmX3R5cGU7CisgIHVuc2lnbmVkIHNob3J0ICBkc3BfdG9fYXJtX2J1Zl9pZDsKKyAgdW5zaWduZWQgc2hvcnQgIGFybV90b19kc3BfYnVmX2lkOworICB1bnNpZ25lZCBzaG9ydCAgYXJtX3RvX2RzcF9idWZfbGVuOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcF9jbWRfcGNtX2ludGZfc2VuZF9idWZmZXI7CisKKworLyoKKyAqIENvbW1hbmRzIFJlbGF0ZWQgdG8gdVBBdWRQUENtZDNRdWV1ZQorICovCisKKy8qCisgKiBDb21tYW5kIFN0cnVjdHVyZSB0byBjb25maWd1cmUgcG9zdCBwcm9jZXNzaW5nIHBhcmFtcyAoQ29tbW1vbikKKyAqLworCisjZGVmaW5lIEFVRFBQX0NNRF9DRkdfT0JKRUNUX1BBUkFNUwkJMHgwMDAwCisjZGVmaW5lIEFVRFBQX0NNRF9DRkdfT0JKRUNUX1BBUkFNU19DT01NT05fTEVOCQlcCisJc2l6ZW9mKGF1ZHBwX2NtZF9jZmdfb2JqZWN0X3BhcmFtc19jb21tb24pCisKKyNkZWZpbmUgQVVEUFBfQ01EX09CSjBfVVBEQVRFCQkweDgwMDAKKyNkZWZpbmUgQVVEUFBfQ01EX09CSjBfRE9OVF9VUERBVEUJMHgwMDAwCisKKyNkZWZpbmUgQVVEUFBfQ01EX09CSjFfVVBEQVRFCQkweDgwMDAKKyNkZWZpbmUgQVVEUFBfQ01EX09CSjFfRE9OVF9VUERBVEUJMHgwMDAwCisKKyNkZWZpbmUgQVVEUFBfQ01EX09CSjJfVVBEQVRFCQkweDgwMDAKKyNkZWZpbmUgQVVEUFBfQ01EX09CSjJfRE9OVF9VUERBVEUJMHgwMDAwCisKKyNkZWZpbmUgQVVEUFBfQ01EX09CSjNfVVBEQVRFCQkweDgwMDAKKyNkZWZpbmUgQVVEUFBfQ01EX09CSjNfRE9OVF9VUERBVEUJMHgwMDAwCisKKyNkZWZpbmUgQVVEUFBfQ01EX09CSjRfVVBEQVRFCQkweDgwMDAKKyNkZWZpbmUgQVVEUFBfQ01EX09CSjRfRE9OVF9VUERBVEUJMHgwMDAwCisKKyNkZWZpbmUgQVVEUFBfQ01EX0hQQ01fVVBEQVRFCQkweDgwMDAKKyNkZWZpbmUgQVVEUFBfQ01EX0hQQ01fRE9OVF9VUERBVEUJMHgwMDAwCisKKyNkZWZpbmUgQVVEUFBfQ01EX0NPTU1PTl9DRkdfVVBEQVRFCQkweDgwMDAKKyNkZWZpbmUgQVVEUFBfQ01EX0NPTU1PTl9DRkdfRE9OVF9VUERBVEUJMHgwMDAwCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCAgY21kX2lkOworCXVuc2lnbmVkIHNob3J0CW9iajBfY2ZnOworCXVuc2lnbmVkIHNob3J0CW9iajFfY2ZnOworCXVuc2lnbmVkIHNob3J0CW9iajJfY2ZnOworCXVuc2lnbmVkIHNob3J0CW9iajNfY2ZnOworCXVuc2lnbmVkIHNob3J0CW9iajRfY2ZnOworCXVuc2lnbmVkIHNob3J0CWhvc3RfcGNtX29ial9jZmc7CisJdW5zaWduZWQgc2hvcnQJY29tbWFuX2NmZzsKKwl1bnNpZ25lZCBzaG9ydCAgY29tbWFuZF90eXBlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcF9jbWRfY2ZnX29iamVjdF9wYXJhbXNfY29tbW9uOworCisvKgorICogQ29tbWFuZCBTdHJ1Y3R1cmUgdG8gY29uZmlndXJlIHBvc3QgcHJvY2Vzc2luZyBwYXJhbXMgKFZvbHVtZSkKKyAqLworCisjZGVmaW5lIEFVRFBQX0NNRF9DRkdfT0JKRUNUX1BBUkFNU19WT0xVTUVfTEVOCQlcCisJc2l6ZW9mKGF1ZHBwX2NtZF9jZmdfb2JqZWN0X3BhcmFtc192b2x1bWUpCisKK3R5cGVkZWYgc3RydWN0IHsKKwlhdWRwcF9jbWRfY2ZnX29iamVjdF9wYXJhbXNfY29tbW9uIAljb21tb247CisJdW5zaWduZWQgc2hvcnQJCQkJCXZvbHVtZTsKKwl1bnNpZ25lZCBzaG9ydAkJCQkJcGFuOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcF9jbWRfY2ZnX29iamVjdF9wYXJhbXNfdm9sdW1lOworCisvKgorICogQ29tbWFuZCBTdHJ1Y3R1cmUgdG8gY29uZmlndXJlIHBvc3QgcHJvY2Vzc2luZyBwYXJhbXMgKFBDTSBGaWx0ZXIpIC0tRE9VQlQKKyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJCQludW1lcmF0b3JfYjBfZmlsdGVyX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAkJCW51bWVyYXRvcl9iMF9maWx0ZXJfbXN3OworCXVuc2lnbmVkIHNob3J0CQkJbnVtZXJhdG9yX2IxX2ZpbHRlcl9sc3c7CisJdW5zaWduZWQgc2hvcnQJCQludW1lcmF0b3JfYjFfZmlsdGVyX21zdzsKKwl1bnNpZ25lZCBzaG9ydAkJCW51bWVyYXRvcl9iMl9maWx0ZXJfbHN3OworCXVuc2lnbmVkIHNob3J0CQkJbnVtZXJhdG9yX2IyX2ZpbHRlcl9tc3c7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIG51bWVyYXRvcjsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CQkJZGVub21pbmF0b3JfYTBfZmlsdGVyX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAkJCWRlbm9taW5hdG9yX2EwX2ZpbHRlcl9tc3c7CisJdW5zaWduZWQgc2hvcnQJCQlkZW5vbWluYXRvcl9hMV9maWx0ZXJfbHN3OworCXVuc2lnbmVkIHNob3J0CQkJZGVub21pbmF0b3JfYTFfZmlsdGVyX21zdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZGVub21pbmF0b3I7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAkJCXNoaWZ0X2ZhY3Rvcl8wOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzaGlmdF9mYWN0b3I7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAkJCXBhbl9maWx0ZXJfMDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgcGFuOworCit0eXBlZGVmIHN0cnVjdCB7CisJCW51bWVyYXRvcgkJbnVtZXJhdG9yX2ZpbHRlcjsKKwkJZGVub21pbmF0b3IJCWRlbm9taW5hdG9yX2ZpbHRlcjsKKwkJc2hpZnRfZmFjdG9yCQlzaGlmdF9mYWN0b3JfZmlsdGVyOworCQlwYW4JCQlwYW5fZmlsdGVyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBmaWx0ZXJfMTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCQludW1lcmF0b3IJCW51bWVyYXRvcl9maWx0ZXJbMl07CisJCWRlbm9taW5hdG9yCQlkZW5vbWluYXRvcl9maWx0ZXJbMl07CisJCXNoaWZ0X2ZhY3RvcgkJc2hpZnRfZmFjdG9yX2ZpbHRlclsyXTsKKwkJcGFuCQkJcGFuX2ZpbHRlclsyXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZmlsdGVyXzI7CisKK3R5cGVkZWYgc3RydWN0IHsKKwkJbnVtZXJhdG9yCQludW1lcmF0b3JfZmlsdGVyWzNdOworCQlkZW5vbWluYXRvcgkJZGVub21pbmF0b3JfZmlsdGVyWzNdOworCQlzaGlmdF9mYWN0b3IJCXNoaWZ0X2ZhY3Rvcl9maWx0ZXJbM107CisJCXBhbgkJCXBhbl9maWx0ZXJbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGZpbHRlcl8zOworCit0eXBlZGVmIHN0cnVjdCB7CisJCW51bWVyYXRvcgkJbnVtZXJhdG9yX2ZpbHRlcls0XTsKKwkJZGVub21pbmF0b3IJCWRlbm9taW5hdG9yX2ZpbHRlcls0XTsKKwkJc2hpZnRfZmFjdG9yCQlzaGlmdF9mYWN0b3JfZmlsdGVyWzRdOworCQlwYW4JCQlwYW5fZmlsdGVyWzRdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBmaWx0ZXJfNDsKKworI2RlZmluZSBBVURQUF9DTURfQ0ZHX09CSkVDVF9QQVJBTVNfUENNX0xFTgkJXAorCXNpemVvZihhdWRwcF9jbWRfY2ZnX29iamVjdF9wYXJhbXNfcGNtKQorCisKK3R5cGVkZWYgc3RydWN0IHsKKwlhdWRwcF9jbWRfY2ZnX29iamVjdF9wYXJhbXNfY29tbW9uIAljb21tb247CisJdW5zaWduZWQgc2hvcnQJCQkJYWN0aXZlX2ZsYWc7CisJdW5zaWduZWQgc2hvcnQgCQkJCW51bV9iYW5kczsKKwl1bmlvbiB7CisJCWZpbHRlcl8xCQkJZmlsdGVyXzFfcGFyYW1zOworCQlmaWx0ZXJfMgkJCWZpbHRlcl8yX3BhcmFtczsKKwkJZmlsdGVyXzMJCQlmaWx0ZXJfM19wYXJhbXM7CisJCWZpbHRlcl80CQkJZmlsdGVyXzRfcGFyYW1zOworCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgcGFyYW1zX2ZpbHRlcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcHBfY21kX2NmZ19vYmplY3RfcGFyYW1zX3BjbTsKKworCisvKgorICogQ29tbWFuZCBTdHJ1Y3R1cmUgdG8gY29uZmlndXJlIHBvc3QgcHJvY2Vzc2luZyBwYXJhbWV0ZXJzIChlcXVhbGl6ZXIpCisgKi8KKworI2RlZmluZSBBVURQUF9DTURfQ0ZHX09CSkVDVF9QQVJBTVNfRVFBTElaRVJfTEVOCQlcCisJc2l6ZW9mKGF1ZHBwX2NtZF9jZmdfb2JqZWN0X3BhcmFtc19lcWFsaXplcikKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CQkJbnVtZXJhdG9yX2NvZWZmXzBfbHN3OworCXVuc2lnbmVkIHNob3J0CQkJbnVtZXJhdG9yX2NvZWZmXzBfbXN3OworCXVuc2lnbmVkIHNob3J0CQkJbnVtZXJhdG9yX2NvZWZmXzFfbHN3OworCXVuc2lnbmVkIHNob3J0CQkJbnVtZXJhdG9yX2NvZWZmXzFfbXN3OworCXVuc2lnbmVkIHNob3J0CQkJbnVtZXJhdG9yX2NvZWZmXzJfbHN3OworCXVuc2lnbmVkIHNob3J0CQkJbnVtZXJhdG9yX2NvZWZmXzJfbXN3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBlcV9udW1lcmF0b3I7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAkJCWRlbm9taW5hdG9yX2NvZWZmXzBfbHN3OworCXVuc2lnbmVkIHNob3J0CQkJZGVub21pbmF0b3JfY29lZmZfMF9tc3c7CisJdW5zaWduZWQgc2hvcnQJCQlkZW5vbWluYXRvcl9jb2VmZl8xX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAkJCWRlbm9taW5hdG9yX2NvZWZmXzFfbXN3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBlcV9kZW5vbWluYXRvcjsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CQkJc2hpZnRfZmFjdG9yOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBlcV9zaGlmdGZhY3RvcjsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWVxX251bWVyYXRvcgludW1lcmF0b3I7CisJZXFfZGVub21pbmF0b3IJZGVub21pbmF0b3I7CisJZXFfc2hpZnRmYWN0b3IJc2hpZnRmYWN0b3I7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGVxX2NvZWZmXzE7CisKK3R5cGVkZWYgc3RydWN0IHsKKwllcV9udW1lcmF0b3IJbnVtZXJhdG9yWzJdOworCWVxX2Rlbm9taW5hdG9yCWRlbm9taW5hdG9yWzJdOworCWVxX3NoaWZ0ZmFjdG9yCXNoaWZ0ZmFjdG9yWzJdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBlcV9jb2VmZl8yOworCit0eXBlZGVmIHN0cnVjdCB7CisJZXFfbnVtZXJhdG9yCW51bWVyYXRvclszXTsKKwllcV9kZW5vbWluYXRvcglkZW5vbWluYXRvclszXTsKKwllcV9zaGlmdGZhY3RvcglzaGlmdGZhY3RvclszXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZXFfY29lZmZfMzsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWVxX251bWVyYXRvcgludW1lcmF0b3JbNF07CisJZXFfZGVub21pbmF0b3IJZGVub21pbmF0b3JbNF07CisJZXFfc2hpZnRmYWN0b3IJc2hpZnRmYWN0b3JbNF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGVxX2NvZWZmXzQ7CisKK3R5cGVkZWYgc3RydWN0IHsKKwllcV9udW1lcmF0b3IJbnVtZXJhdG9yWzVdOworCWVxX2Rlbm9taW5hdG9yCWRlbm9taW5hdG9yWzVdOworCWVxX3NoaWZ0ZmFjdG9yCXNoaWZ0ZmFjdG9yWzVdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBlcV9jb2VmZl81OworCit0eXBlZGVmIHN0cnVjdCB7CisJZXFfbnVtZXJhdG9yCW51bWVyYXRvcls2XTsKKwllcV9kZW5vbWluYXRvcglkZW5vbWluYXRvcls2XTsKKwllcV9zaGlmdGZhY3RvcglzaGlmdGZhY3Rvcls2XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZXFfY29lZmZfNjsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWVxX251bWVyYXRvcgludW1lcmF0b3JbN107CisJZXFfZGVub21pbmF0b3IJZGVub21pbmF0b3JbN107CisJZXFfc2hpZnRmYWN0b3IJc2hpZnRmYWN0b3JbN107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGVxX2NvZWZmXzc7CisKK3R5cGVkZWYgc3RydWN0IHsKKwllcV9udW1lcmF0b3IJbnVtZXJhdG9yWzhdOworCWVxX2Rlbm9taW5hdG9yCWRlbm9taW5hdG9yWzhdOworCWVxX3NoaWZ0ZmFjdG9yCXNoaWZ0ZmFjdG9yWzhdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBlcV9jb2VmZl84OworCit0eXBlZGVmIHN0cnVjdCB7CisJZXFfbnVtZXJhdG9yCW51bWVyYXRvcls5XTsKKwllcV9kZW5vbWluYXRvcglkZW5vbWluYXRvcls5XTsKKwllcV9zaGlmdGZhY3RvcglzaGlmdGZhY3Rvcls5XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZXFfY29lZmZfOTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWVxX251bWVyYXRvcgludW1lcmF0b3JbMTBdOworCWVxX2Rlbm9taW5hdG9yCWRlbm9taW5hdG9yWzEwXTsKKwllcV9zaGlmdGZhY3RvcglzaGlmdGZhY3RvclsxMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGVxX2NvZWZmXzEwOworCit0eXBlZGVmIHN0cnVjdCB7CisJZXFfbnVtZXJhdG9yCW51bWVyYXRvclsxMV07CisJZXFfZGVub21pbmF0b3IJZGVub21pbmF0b3JbMTFdOworCWVxX3NoaWZ0ZmFjdG9yCXNoaWZ0ZmFjdG9yWzExXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZXFfY29lZmZfMTE7CisKK3R5cGVkZWYgc3RydWN0IHsKKwllcV9udW1lcmF0b3IJbnVtZXJhdG9yWzEyXTsKKwllcV9kZW5vbWluYXRvcglkZW5vbWluYXRvclsxMl07CisJZXFfc2hpZnRmYWN0b3IJc2hpZnRmYWN0b3JbMTJdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBlcV9jb2VmZl8xMjsKKworCit0eXBlZGVmIHN0cnVjdCB7CisJYXVkcHBfY21kX2NmZ19vYmplY3RfcGFyYW1zX2NvbW1vbiAJY29tbW9uOworCXVuc2lnbmVkIHNob3J0CQkJCWVxX2ZsYWc7CisJdW5zaWduZWQgc2hvcnQJCQkJbnVtX2JhbmRzOworCXVuaW9uIHsKKwkJZXFfY29lZmZfMQllcV9jb2VmZnNfMTsKKwkJZXFfY29lZmZfMgllcV9jb2VmZnNfMjsKKwkJZXFfY29lZmZfMwllcV9jb2VmZnNfMzsKKwkJZXFfY29lZmZfNAllcV9jb2VmZnNfNDsKKwkJZXFfY29lZmZfNQllcV9jb2VmZnNfNTsKKwkJZXFfY29lZmZfNgllcV9jb2VmZnNfNjsKKwkJZXFfY29lZmZfNwllcV9jb2VmZnNfNzsKKwkJZXFfY29lZmZfOAllcV9jb2VmZnNfODsKKwkJZXFfY29lZmZfOQllcV9jb2VmZnNfOTsKKwkJZXFfY29lZmZfMTAJZXFfY29lZmZzXzEwOworCQllcV9jb2VmZl8xMQllcV9jb2VmZnNfMTE7CisJCWVxX2NvZWZmXzEyCWVxX2NvZWZmc18xMjsKKwl9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGVxX2NvZWZmOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcF9jbWRfY2ZnX29iamVjdF9wYXJhbXNfZXFhbGl6ZXI7CisKKworLyoKKyAqIENvbW1hbmQgU3RydWN0dXJlIHRvIGNvbmZpZ3VyZSBwb3N0IHByb2Nlc3NpbmcgcGFyYW1ldGVycyAoQURSQykKKyAqLworCisjZGVmaW5lIEFVRFBQX0NNRF9DRkdfT0JKRUNUX1BBUkFNU19BRFJDX0xFTgkJXAorCXNpemVvZihhdWRwcF9jbWRfY2ZnX29iamVjdF9wYXJhbXNfYWRyYykKKworCisjZGVmaW5lIEFVRFBQX0NNRF9BRFJDX0ZMQUdfRElTCQkweDAwMDAKKyNkZWZpbmUgQVVEUFBfQ01EX0FEUkNfRkxBR19FTkEJCS0xCisKK3R5cGVkZWYgc3RydWN0IHsKKwlhdWRwcF9jbWRfY2ZnX29iamVjdF9wYXJhbXNfY29tbW9uIAljb21tb247CisJc2lnbmVkIHNob3J0CQkJCWFkcmNfZmxhZzsKKwl1bnNpZ25lZCBzaG9ydAkJCQljb21wcmVzc2lvbl90aDsKKwl1bnNpZ25lZCBzaG9ydAkJCQljb21wcmVzc2lvbl9zbG9wZTsKKwl1bnNpZ25lZCBzaG9ydAkJCQlybXNfdGltZTsKKwl1bnNpZ25lZCBzaG9ydAkJCQlhdHRhY2tfY29uc3RfbHN3OworCXVuc2lnbmVkIHNob3J0CQkJCWF0dGFja19jb25zdF9tc3c7CisJdW5zaWduZWQgc2hvcnQJCQkJcmVsZWFzZV9jb25zdF9sc3c7CisJdW5zaWduZWQgc2hvcnQJCQkJcmVsZWFzZV9jb25zdF9tc3c7CisJdW5zaWduZWQgc2hvcnQJCQkJYWRyY19zeXN0ZW1fZGVsYXk7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBwX2NtZF9jZmdfb2JqZWN0X3BhcmFtc19hZHJjOworCisvKgorICogQ29tbWFuZCBTdHJ1Y3R1cmUgdG8gY29uZmlndXJlIHBvc3QgcHJvY2Vzc2luZyBwYXJhbWV0ZXJzKFNwZWN0cnVtIEFuYWxpemVyKQorICovCisKKyNkZWZpbmUgQVVEUFBfQ01EX0NGR19PQkpFQ1RfUEFSQU1TX1NQRUNUUkFNX0xFTgkJXAorCXNpemVvZihhdWRwcF9jbWRfY2ZnX29iamVjdF9wYXJhbXNfc3BlY3RyYW0pCisKKwordHlwZWRlZiBzdHJ1Y3QgeworCWF1ZHBwX2NtZF9jZmdfb2JqZWN0X3BhcmFtc19jb21tb24gCWNvbW1vbjsKKwl1bnNpZ25lZCBzaG9ydAkJCQlzYW1wbGVfaW50ZXJ2YWw7CisJdW5zaWduZWQgc2hvcnQJCQkJbnVtX2NvZWZmOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcF9jbWRfY2ZnX29iamVjdF9wYXJhbXNfc3BlY3RyYW07CisKKy8qCisgKiBDb21tYW5kIFN0cnVjdHVyZSB0byBjb25maWd1cmUgcG9zdCBwcm9jZXNzaW5nIHBhcmFtZXRlcnMgKFFDb25jZXJ0KQorICovCisKKyNkZWZpbmUgQVVEUFBfQ01EX0NGR19PQkpFQ1RfUEFSQU1TX1FDT05DRVJUX0xFTgkJXAorCXNpemVvZihhdWRwcF9jbWRfY2ZnX29iamVjdF9wYXJhbXNfcWNvbmNlcnQpCisKKworI2RlZmluZSBBVURQUF9DTURfUUNPTl9FTkFfRkxBR19FTkEJCS0xCisjZGVmaW5lIEFVRFBQX0NNRF9RQ09OX0VOQV9GTEFHX0RJUwkJMHgwMDAwCisKKyNkZWZpbmUgQVVEUFBfQ01EX1FDT05fT1BfTU9ERV9IRUFEUEhPTkUJLTEKKyNkZWZpbmUgQVVEUFBfQ01EX1FDT05fT1BfTU9ERV9TUEVBS0VSX0ZST05UCTB4MDAwMAorI2RlZmluZSBBVURQUF9DTURfUUNPTl9PUF9NT0RFX1NQRUFLRVJfU0lERQkweDAwMDEKKyNkZWZpbmUgQVVEUFBfQ01EX1FDT05fT1BfTU9ERV9TUEVBS0VSX0RFU0tUT1AJMHgwMDAyCisKKyNkZWZpbmUgQVVEUFBfQ01EX1FDT05fR0FJTl9VTklUCQkJMHg3RkZGCisjZGVmaW5lIEFVRFBQX0NNRF9RQ09OX0dBSU5fU0lYX0RCCQkJMHg0MDI3CisKKworI2RlZmluZSBBVURQUF9DTURfUUNPTl9FWFBBTlNJT05fTUFYCQkweDdGRkYKKworCit0eXBlZGVmIHN0cnVjdCB7CisJYXVkcHBfY21kX2NmZ19vYmplY3RfcGFyYW1zX2NvbW1vbiAJY29tbW9uOworCXNpZ25lZCBzaG9ydAkJCQllbmFibGVfZmxhZzsKKwlzaWduZWQgc2hvcnQJCQkJb3V0cHV0X21vZGU7CisJc2lnbmVkIHNob3J0CQkJCWdhaW47CisJc2lnbmVkIHNob3J0CQkJCWV4cGFuc2lvbjsKKwlzaWduZWQgc2hvcnQJCQkJZGVsYXk7CisJdW5zaWduZWQgc2hvcnQJCQkJc3RhZ2VzX3Blcl9tb2RlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcF9jbWRfY2ZnX29iamVjdF9wYXJhbXNfcWNvbmNlcnQ7CisKKy8qCisgKiBDb21tYW5kIFN0cnVjdHVyZSB0byBjb25maWd1cmUgcG9zdCBwcm9jZXNzaW5nIHBhcmFtZXRlcnMgKFNpZGUgQ2hhaW4pCisgKi8KKworI2RlZmluZSBBVURQUF9DTURfQ0ZHX09CSkVDVF9QQVJBTVNfU0lERUNIQUlOX0xFTgkJXAorCXNpemVvZihhdWRwcF9jbWRfY2ZnX29iamVjdF9wYXJhbXNfc2lkZWNoYWluKQorCisKKyNkZWZpbmUgQVVEUFBfQ01EX1NJREVDSEFJTl9BQ1RJVkVfRkxBR19ESVMJMHgwMDAwCisjZGVmaW5lIEFVRFBQX0NNRF9TSURFQ0hBSU5fQUNUSVZFX0ZMQUdfRU5BCS0xCisKK3R5cGVkZWYgc3RydWN0IHsKKwlhdWRwcF9jbWRfY2ZnX29iamVjdF9wYXJhbXNfY29tbW9uIAljb21tb247CisJc2lnbmVkIHNob3J0CQkJCWFjdGl2ZV9mbGFnOworCXVuc2lnbmVkIHNob3J0CQkJCW51bV9iYW5kczsKKwl1bmlvbiB7CisJCWZpbHRlcl8xCQkJZmlsdGVyXzFfcGFyYW1zOworCQlmaWx0ZXJfMgkJCWZpbHRlcl8yX3BhcmFtczsKKwkJZmlsdGVyXzMJCQlmaWx0ZXJfM19wYXJhbXM7CisJCWZpbHRlcl80CQkJZmlsdGVyXzRfcGFyYW1zOworCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgcGFyYW1zX2ZpbHRlcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcHBfY21kX2NmZ19vYmplY3RfcGFyYW1zX3NpZGVjaGFpbjsKKworCisvKgorICogQ29tbWFuZCBTdHJ1Y3R1cmUgdG8gY29uZmlndXJlIHBvc3QgcHJvY2Vzc2luZyBwYXJhbWV0ZXJzIChRQUZYKQorICovCisKKyNkZWZpbmUgQVVEUFBfQ01EX0NGR19PQkpFQ1RfUEFSQU1TX1FBRlhfTEVOCQlcCisJc2l6ZW9mKGF1ZHBwX2NtZF9jZmdfb2JqZWN0X3BhcmFtc19xYWZ4KQorCisjZGVmaW5lIEFVRFBQX0NNRF9RQUZYX0VOQV9ESVNBCQkweDAwMDAKKyNkZWZpbmUgQVVEUFBfQ01EX1FBRlhfRU5BX0VOQV9DRkcJLTEKKyNkZWZpbmUgQVVEUFBfQ01EX1FBRlhfRU5BX0RJU19DRkcJMHgwMDAxCisKKyNkZWZpbmUgQVVEUFBfQ01EX1FBRlhfQ01EX1RZUEVfRU5WCTB4MDEwMAorI2RlZmluZSBBVURQUF9DTURfUUFGWF9DTURfVFlQRV9PQkoJMHgwMDEwCisjZGVmaW5lIEFVRFBQX0NNRF9RQUZYX0NNRF9UWVBFX1FVRVJZCTB4MTAwMAorCisjZGVmaW5lIEFVRFBQX0NNRF9RQUZYX0NNRFNfRU5WX09QX01PREUJMHgwMTAwCisjZGVmaW5lIEFVRFBQX0NNRF9RQUZYX0NNRFNfRU5WX0xJU19QT1MJMHgwMTAxCisjZGVmaW5lIEFVRFBQX0NNRF9RQUZYX0NNRFNfRU5WX0xJU19PUkkJMHgwMTAyCisjZGVmaW5lIEFVRFBQX0NNRF9RQUZYX0NNRFNfRU5WX0xJU19WRUwJMFgwMTAzCisjZGVmaW5lIEFVRFBQX0NNRF9RQUZYX0NNRFNfRU5WX0VOVl9SRVMJMHgwMTA3CisKKyNkZWZpbmUgQVVEUFBfQ01EX1FBRlhfQ01EU19PQkpfU0FNUF9GUkVRCTB4MDAxMAorI2RlZmluZSBBVURQUF9DTURfUUFGWF9DTURTX09CSl9WT0wJCTB4MDAxMQorI2RlZmluZSBBVURQUF9DTURfUUFGWF9DTURTX09CSl9ESVNUCQkweDAwMTIKKyNkZWZpbmUgQVVEUFBfQ01EX1FBRlhfQ01EU19PQkpfUE9TCQkweDAwMTMKKyNkZWZpbmUgQVVEUFBfQ01EX1FBRlhfQ01EU19PQkpfVkVMCQkweDAwMTQKKworCit0eXBlZGVmIHN0cnVjdCB7CisJYXVkcHBfY21kX2NmZ19vYmplY3RfcGFyYW1zX2NvbW1vbiAJY29tbW9uOworCXNpZ25lZCBzaG9ydAkJCQllbmFibGU7CisJdW5zaWduZWQgc2hvcnQJCQkJY29tbWFuZF90eXBlOworCXVuc2lnbmVkIHNob3J0CQkJCW51bV9jb21tYW5kczsKKwl1bnNpZ25lZCBzaG9ydAkJCQljb21tYW5kczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcHBfY21kX2NmZ19vYmplY3RfcGFyYW1zX3FhZng7CisKKy8qCisgKiBDb21tYW5kIFN0cnVjdHVyZSB0byBlbmFibGUgLCBkaXNhYmxlIG9yIGNvbmZpZ3VyZSB0aGUgcmV2ZXJiZXJhdGlvbiBlZmZlY3QKKyAqIChDb21tb24pCisgKi8KKworI2RlZmluZSBBVURQUF9DTURfUkVWRVJCX0NPTkZJRwkJMHgwMDAxCisjZGVmaW5lCUFVRFBQX0NNRF9SRVZFUkJfQ09ORklHX0NPTU1PTl9MRU4JXAorCXNpemVvZihhdWRwcF9jbWRfcmV2ZXJiX2NvbmZpZ19jb21tb24pCisKKyNkZWZpbmUgQVVEUFBfQ01EX0VOQV9FTkEJMHhGRkZGCisjZGVmaW5lIEFVRFBQX0NNRF9FTkFfRElTCTB4MDAwMAorI2RlZmluZSBBVURQUF9DTURfRU5BX0NGRwkweDAwMDEKKworI2RlZmluZSBBVURQUF9DTURfQ01EX1RZUEVfRU5WCQkweDAxMDQKKyNkZWZpbmUgQVVEUFBfQ01EX0NNRF9UWVBFX09CSgkJMHgwMDE1CisjZGVmaW5lIEFVRFBQX0NNRF9DTURfVFlQRV9RVUVSWQkweDEwMDAKKworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJCQljbWRfaWQ7CisJdW5zaWduZWQgc2hvcnQJCQllbmFibGU7CisJdW5zaWduZWQgc2hvcnQJCQljbWRfdHlwZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcHBfY21kX3JldmVyYl9jb25maWdfY29tbW9uOworCisvKgorICogQ29tbWFuZCBTdHJ1Y3R1cmUgdG8gZW5hYmxlICwgZGlzYWJsZSBvciBjb25maWd1cmUgdGhlIHJldmVyYmVyYXRpb24gZWZmZWN0CisgKiAoRU5WLTB4MDEwNCkKKyAqLworCisjZGVmaW5lCUFVRFBQX0NNRF9SRVZFUkJfQ09ORklHX0VOVl8xMDRfTEVOCVwKKwlzaXplb2YoYXVkcHBfY21kX3JldmVyYl9jb25maWdfZW52XzEwNCkKKwordHlwZWRlZiBzdHJ1Y3QgeworCWF1ZHBwX2NtZF9yZXZlcmJfY29uZmlnX2NvbW1vbgljb21tb247CisJdW5zaWduZWQgc2hvcnQJCQllbnZfZ2FpbjsKKwl1bnNpZ25lZCBzaG9ydAkJCWRlY2F5X21zdzsKKwl1bnNpZ25lZCBzaG9ydAkJCWRlY2F5X2xzdzsKKwl1bnNpZ25lZCBzaG9ydAkJCWRlY2F5X3RpbWVyYXRpb19tc3c7CisJdW5zaWduZWQgc2hvcnQJCQlkZWNheV90aW1lcmF0aW9fbHN3OworCXVuc2lnbmVkIHNob3J0CQkJZGVsYXlfdGltZTsKKwl1bnNpZ25lZCBzaG9ydAkJCXJldmVyYl9nYWluOworCXVuc2lnbmVkIHNob3J0CQkJcmV2ZXJiX2RlbGF5OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcF9jbWRfcmV2ZXJiX2NvbmZpZ19lbnZfMTA0OworCisvKgorICogQ29tbWFuZCBTdHJ1Y3R1cmUgdG8gZW5hYmxlICwgZGlzYWJsZSBvciBjb25maWd1cmUgdGhlIHJldmVyYmVyYXRpb24gZWZmZWN0CisgKiAoRU5WLTB4MDAxNSkKKyAqLworCisjZGVmaW5lCUFVRFBQX0NNRF9SRVZFUkJfQ09ORklHX0VOVl8xNV9MRU4JXAorCXNpemVvZihhdWRwcF9jbWRfcmV2ZXJiX2NvbmZpZ19lbnZfMTUpCisKK3R5cGVkZWYgc3RydWN0IHsKKwlhdWRwcF9jbWRfcmV2ZXJiX2NvbmZpZ19jb21tb24JY29tbW9uOworCXVuc2lnbmVkIHNob3J0CQkJb2JqZWN0X251bTsKKwl1bnNpZ25lZCBzaG9ydAkJCWFic29sdXRlX2dhaW47Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBwX2NtZF9yZXZlcmJfY29uZmlnX2Vudl8xNTsKKworCisjZW5kaWYgLyogUURTUDVBVURQUENNRElfSCAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1YXVkcHBtc2cuaCBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVhdWRwcG1zZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZmVhMjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1YXVkcHBtc2cuaApAQCAtMCwwICsxLDMxOCBAQAorI2lmbmRlZiBRRFNQNUFVRFBQTVNHX0gKKyNkZWZpbmUgUURTUDVBVURQUE1TR19ICisKKy8qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qCisKKyAgICAgICBRIEQgUyBQIDUgIEEgVSBEIEkgTyAgIFAgTyBTIFQgICBQIFIgTyBDIEUgUyBTIEkgTiBHICAgTSBTIEcKKworR0VORVJBTCBERVNDUklQVElPTgorICBNZXNzYWdlcyBzZW50IGJ5IEFVRFBQVEFTSyB0byBBUk0KKworUkVGRVJFTkNFUworICBOb25lCisKK0VYVEVSTkFMSVpFRCBGVU5DVElPTlMKKyAgTm9uZQorCitDb3B5cmlnaHQoYykgMTk5MiAtIDIwMDkgYnkgUVVBTENPTU0sIEluY29ycG9yYXRlZC4KKworVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKK21heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgICAgICAgICAgICAgICAgRURJVCBISVNUT1JZIEZPUiBGSUxFCisKK1RoaXMgc2VjdGlvbiBjb250YWlucyBjb21tZW50cyBkZXNjcmliaW5nIGNoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUuCitOb3RpY2UgdGhhdCBjaGFuZ2VzIGFyZSBsaXN0ZWQgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyLgorCisgJEhlYWRlcjogLy9zb3VyY2UvcWNvbS9xY3QvbXVsdGltZWRpYTIvQXVkaW8vZHJpdmVycy9RRFNQNURyaXZlci9RRFNQNUludGVyZmFjZS9tYWluL2xhdGVzdC9xZHNwNWF1ZHBwbXNnLmgjNCAkCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qCisgKiBBVURQUFRBU0sgdXNlcyBhdWRQUHVQUmxpc3QgdG8gc2VuZCBtZXNzYWdlcyB0byB0aGUgQVJNCisgKiBMb2NhdGlvbiA6IE1FTUEKKyAqIEJ1ZmZlciBTaXplIDogNDUKKyAqIE5vIG9mIEJ1ZmZlcnMgaW4gYSBxdWV1ZSA6IDUgZm9yIGdhbWluZyBhdWRpbyBhbmQgMSBmb3Igb3RoZXIgaW1hZ2VzCisgKi8KKworLyoKKyAqIE1TRyB0byBJbmZvcm1zIHRoZSBBUk0gb3MgU3VjY2Vzcy9GYWlsdXJlIG9mIGJyaW5naW5nIHVwIHRoZSBkZWNvZGVyCisgKi8KKworI2RlZmluZSBBVURQUF9NU0dfU1RBVFVTX01TRwkJMHgwMDAxCisjZGVmaW5lIEFVRFBQX01TR19TVEFUVVNfTVNHX0xFTglcCisJc2l6ZW9mKGF1ZHBwX21zZ19zdGF0dXNfbXNnKQorCisjZGVmaW5lIEFVRFBQX01TR19TVEFUVVNfU0xFRVAJCTB4MDAwMAorI2RlZmluZSBBVURQUF9NU0dfX1NUQVRVU19JTklUCQkweDAwMDEKKyNkZWZpbmUgQVVEUFBfTVNHX01TR19TVEFUVVNfQ0ZHCTB4MDAwMgorI2RlZmluZSBBVURQUF9NU0dfU1RBVFVTX1BMQVkJCTB4MDAwMworCisjZGVmaW5lIEFVRFBQX01TR19SRUFTT05fTUlQUwkweDAwMDAKKyNkZWZpbmUgQVVEUFBfTVNHX1JFQVNPTl9NRU0JMHgwMDAxCisKK3R5cGVkZWYgc3RydWN0eworCXVuc2lnbmVkIHNob3J0IGRlY19pZDsKKwl1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CisJdW5zaWduZWQgc2hvcnQgcmVhc29uOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcF9tc2dfc3RhdHVzX21zZzsKKworLyoKKyAqIE1TRyB0byBjb21tdW5pY2F0ZSB0aGUgc3BlY3RydW0gYW5hbHl6ZXIgb3V0cHV0IGJhbmRzIHRvIHRoZSBBUk0KKyAqLworI2RlZmluZSBBVURQUF9NU0dfU1BBX0JBTkRTCQkweDAwMDIKKyNkZWZpbmUgQVVEUFBfTVNHX1NQQV9CQU5EU19MRU4JXAorCXNpemVvZihhdWRwcF9tc2dfc3BhX2JhbmRzKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJCQljdXJyZW50X29iamVjdDsKKwl1bnNpZ25lZCBzaG9ydAkJCXNwYV9iYW5kXzE7CisJdW5zaWduZWQgc2hvcnQJCQlzcGFfYmFuZF8yOworCXVuc2lnbmVkIHNob3J0CQkJc3BhX2JhbmRfMzsKKwl1bnNpZ25lZCBzaG9ydAkJCXNwYV9iYW5kXzQ7CisJdW5zaWduZWQgc2hvcnQJCQlzcGFfYmFuZF81OworCXVuc2lnbmVkIHNob3J0CQkJc3BhX2JhbmRfNjsKKwl1bnNpZ25lZCBzaG9ydAkJCXNwYV9iYW5kXzc7CisJdW5zaWduZWQgc2hvcnQJCQlzcGFfYmFuZF84OworCXVuc2lnbmVkIHNob3J0CQkJc3BhX2JhbmRfOTsKKwl1bnNpZ25lZCBzaG9ydAkJCXNwYV9iYW5kXzEwOworCXVuc2lnbmVkIHNob3J0CQkJc3BhX2JhbmRfMTE7CisJdW5zaWduZWQgc2hvcnQJCQlzcGFfYmFuZF8xMjsKKwl1bnNpZ25lZCBzaG9ydAkJCXNwYV9iYW5kXzEzOworCXVuc2lnbmVkIHNob3J0CQkJc3BhX2JhbmRfMTQ7CisJdW5zaWduZWQgc2hvcnQJCQlzcGFfYmFuZF8xNTsKKwl1bnNpZ25lZCBzaG9ydAkJCXNwYV9iYW5kXzE2OworCXVuc2lnbmVkIHNob3J0CQkJc3BhX2JhbmRfMTc7CisJdW5zaWduZWQgc2hvcnQJCQlzcGFfYmFuZF8xODsKKwl1bnNpZ25lZCBzaG9ydAkJCXNwYV9iYW5kXzE5OworCXVuc2lnbmVkIHNob3J0CQkJc3BhX2JhbmRfMjA7CisJdW5zaWduZWQgc2hvcnQJCQlzcGFfYmFuZF8yMTsKKwl1bnNpZ25lZCBzaG9ydAkJCXNwYV9iYW5kXzIyOworCXVuc2lnbmVkIHNob3J0CQkJc3BhX2JhbmRfMjM7CisJdW5zaWduZWQgc2hvcnQJCQlzcGFfYmFuZF8yNDsKKwl1bnNpZ25lZCBzaG9ydAkJCXNwYV9iYW5kXzI1OworCXVuc2lnbmVkIHNob3J0CQkJc3BhX2JhbmRfMjY7CisJdW5zaWduZWQgc2hvcnQJCQlzcGFfYmFuZF8yNzsKKwl1bnNpZ25lZCBzaG9ydAkJCXNwYV9iYW5kXzI4OworCXVuc2lnbmVkIHNob3J0CQkJc3BhX2JhbmRfMjk7CisJdW5zaWduZWQgc2hvcnQJCQlzcGFfYmFuZF8zMDsKKwl1bnNpZ25lZCBzaG9ydAkJCXNwYV9iYW5kXzMxOworCXVuc2lnbmVkIHNob3J0CQkJc3BhX2JhbmRfMzI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBwX21zZ19zcGFfYmFuZHM7CisKKy8qCisgKiBNU0cgdG8gY29tbXVuaWNhdGUgdGhlIFBDTSBJL08gYnVmZmVyIHN0YXR1cyB0byBBUk0KKyAqLworI2RlZmluZSAgQVVEUFBfTVNHX0hPU1RfUENNX0lOVEZfTVNHCQkweDAwMDMKKyNkZWZpbmUgIEFVRFBQX01TR19IT1NUX1BDTV9JTlRGX01TR19MRU4JXAorCXNpemVvZihhdWRwcF9tc2dfaG9zdF9wY21faW50Zl9tc2cpCisKKyNkZWZpbmUgQVVEUFBfTVNHX0hPU1RQQ01fSURfVFhfQVJNCTB4MDAwMAorI2RlZmluZSBBVURQUF9NU0dfSE9TVFBDTV9JRF9BUk1fVFgJMHgwMDAxCisjZGVmaW5lIEFVRFBQX01TR19IT1NUUENNX0lEX1JYX0FSTQkweDAwMDIKKyNkZWZpbmUgQVVEUFBfTVNHX0hPU1RQQ01fSURfQVJNX1JYCTB4MDAwMworCisjZGVmaW5lIEFVRFBQX01TR19TQU1QX0ZSRVFfSU5EWF85NjAwMAkweDAwMDAKKyNkZWZpbmUgQVVEUFBfTVNHX1NBTVBfRlJFUV9JTkRYXzg4MjAwCTB4MDAwMQorI2RlZmluZSBBVURQUF9NU0dfU0FNUF9GUkVRX0lORFhfNjQwMDAJMHgwMDAyCisjZGVmaW5lIEFVRFBQX01TR19TQU1QX0ZSRVFfSU5EWF80ODAwMAkweDAwMDMKKyNkZWZpbmUgQVVEUFBfTVNHX1NBTVBfRlJFUV9JTkRYXzQ0MTAwCTB4MDAwNAorI2RlZmluZSBBVURQUF9NU0dfU0FNUF9GUkVRX0lORFhfMzIwMDAJMHgwMDA1CisjZGVmaW5lIEFVRFBQX01TR19TQU1QX0ZSRVFfSU5EWF8yNDAwMAkweDAwMDYKKyNkZWZpbmUgQVVEUFBfTVNHX1NBTVBfRlJFUV9JTkRYXzIyMDUwCTB4MDAwNworI2RlZmluZSBBVURQUF9NU0dfU0FNUF9GUkVRX0lORFhfMTYwMDAJMHgwMDA4CisjZGVmaW5lIEFVRFBQX01TR19TQU1QX0ZSRVFfSU5EWF8xMjAwMAkweDAwMDkKKyNkZWZpbmUgQVVEUFBfTVNHX1NBTVBfRlJFUV9JTkRYXzExMDI1CTB4MDAwQQorI2RlZmluZSBBVURQUF9NU0dfU0FNUF9GUkVRX0lORFhfODAwMAkweDAwMEIKKworI2RlZmluZSBBVURQUF9NU0dfQ0hBTk5FTF9NT0RFX01PTk8JCTB4MDAwMQorI2RlZmluZSBBVURQUF9NU0dfQ0hBTk5FTF9NT0RFX1NURVJFTwkweDAwMDIKKwordHlwZWRlZiBzdHJ1Y3R7CisJdW5zaWduZWQgc2hvcnQgb2JqX251bTsKKwl1bnNpZ25lZCBzaG9ydCBudW1iZXJzX29mX3NhbXBsZXM7CisJdW5zaWduZWQgc2hvcnQgaG9zdF9wY21faWQ7CisJdW5zaWduZWQgc2hvcnQgYnVmX2luZHg7CisJdW5zaWduZWQgc2hvcnQgc2FtcF9mcmVxX2luZHg7CisJdW5zaWduZWQgc2hvcnQgY2hhbm5lbF9tb2RlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcF9tc2dfaG9zdF9wY21faW50Zl9tc2c7CisKKworLyoKKyAqIE1TRyB0byBjb21tdW5pY2F0ZSAzRCBwb3NpdGlvbiBvZiB0aGUgc291cmNlIGFuZCBsaXN0ZW5lciAsIHNvdXJjZSB2b2x1bWUKKyAqIHNvdXJjZSByb2xsb2ZmLCBzb3VyY2Ugb3JpZW50YXRpb24KKyAqLworCisjZGVmaW5lIEFVRFBQX01TR19RQUZYX1BPUwkJMHgwMDA0CisjZGVmaW5lIEFVRFBQX01TR19RQUZYX1BPU19MRU4JCVwKKwlzaXplb2YoYXVkcHBfbXNnX3FhZnhfcG9zKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJY3VycmVudF9vYmplY3Q7CisJdW5zaWduZWQgc2hvcnQJeF9wb3NfbGlzX21zdzsKKwl1bnNpZ25lZCBzaG9ydAl4X3Bvc19saXNfbHN3OworCXVuc2lnbmVkIHNob3J0CXlfcG9zX2xpc19tc3c7CisJdW5zaWduZWQgc2hvcnQJeV9wb3NfbGlzX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAl6X3Bvc19saXNfbXN3OworCXVuc2lnbmVkIHNob3J0CXpfcG9zX2xpc19sc3c7CisJdW5zaWduZWQgc2hvcnQJeF9md2RfbXN3OworCXVuc2lnbmVkIHNob3J0CXhfZndkX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAl5X2Z3ZF9tc3c7CisJdW5zaWduZWQgc2hvcnQJeV9md2RfbHN3OworCXVuc2lnbmVkIHNob3J0CXpfZndkX21zdzsKKwl1bnNpZ25lZCBzaG9ydAl6X2Z3ZF9sc3c7CisJdW5zaWduZWQgc2hvcnQgCXhfdXBfbXN3OworCXVuc2lnbmVkIHNob3J0CXhfdXBfbHN3OworCXVuc2lnbmVkIHNob3J0IAl5X3VwX21zdzsKKwl1bnNpZ25lZCBzaG9ydAl5X3VwX2xzdzsKKwl1bnNpZ25lZCBzaG9ydCAJel91cF9tc3c7CisJdW5zaWduZWQgc2hvcnQJel91cF9sc3c7CisJdW5zaWduZWQgc2hvcnQgCXhfdmVsX2xpc19tc3c7CisJdW5zaWduZWQgc2hvcnQgCXhfdmVsX2xpc19sc3c7CisJdW5zaWduZWQgc2hvcnQgCXlfdmVsX2xpc19tc3c7CisJdW5zaWduZWQgc2hvcnQgCXlfdmVsX2xpc19sc3c7CisJdW5zaWduZWQgc2hvcnQgCXpfdmVsX2xpc19tc3c7CisJdW5zaWduZWQgc2hvcnQgCXpfdmVsX2xpc19sc3c7CisJdW5zaWduZWQgc2hvcnQJdGhyZWVkX2VuYWJsZV9mbGFnOworCXVuc2lnbmVkIHNob3J0IAl2b2x1bWU7CisJdW5zaWduZWQgc2hvcnQJeF9wb3Nfc291cmNlX21zdzsKKwl1bnNpZ25lZCBzaG9ydAl4X3Bvc19zb3VyY2VfbHN3OworCXVuc2lnbmVkIHNob3J0CXlfcG9zX3NvdXJjZV9tc3c7CisJdW5zaWduZWQgc2hvcnQJeV9wb3Nfc291cmNlX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAl6X3Bvc19zb3VyY2VfbXN3OworCXVuc2lnbmVkIHNob3J0CXpfcG9zX3NvdXJjZV9sc3c7CisJdW5zaWduZWQgc2hvcnQJbWF4X2Rpc3RfMF9tc3c7CisJdW5zaWduZWQgc2hvcnQJbWF4X2Rpc3RfMF9sc3c7CisJdW5zaWduZWQgc2hvcnQJbWluX2Rpc3RfMF9tc3c7CisJdW5zaWduZWQgc2hvcnQJbWluX2Rpc3RfMF9sc3c7CisJdW5zaWduZWQgc2hvcnQJcm9sbF9vZmZfZmFjdG9yOworCXVuc2lnbmVkIHNob3J0CW11dGVfYWZ0ZXJfbWF4X2ZsYWc7CisJdW5zaWduZWQgc2hvcnQJeF92ZWxfc291cmNlX21zdzsKKwl1bnNpZ25lZCBzaG9ydAl4X3ZlbF9zb3VyY2VfbHN3OworCXVuc2lnbmVkIHNob3J0CXlfdmVsX3NvdXJjZV9tc3c7CisJdW5zaWduZWQgc2hvcnQJeV92ZWxfc291cmNlX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAl6X3ZlbF9zb3VyY2VfbXN3OworCXVuc2lnbmVkIHNob3J0CXpfdmVsX3NvdXJjZV9sc3c7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBwX21zZ19xYWZ4X3BvczsKKworLyoKKyAqIE1TRyB0byBwcm92aWRlIEFWU1lOQyBmZWVkYmFjayBmcm9tIERTUCB0byBBUk0KKyAqLworCisjZGVmaW5lIEFVRFBQX01TR19BVlNZTkNfTVNHCQkweDAwMDUKKyNkZWZpbmUgQVVEUFBfTVNHX0FWU1lOQ19NU0dfTEVOCVwKKwlzaXplb2YoYXVkcHBfbXNnX2F2c3luY19tc2cpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAlhY3RpdmVfZmxhZzsKKwl1bnNpZ25lZCBzaG9ydAludW1fc2FtcGxlc19jb3VudGVyMF9IU1c7CisJdW5zaWduZWQgc2hvcnQJbnVtX3NhbXBsZXNfY291bnRlcjBfTVNXOworCXVuc2lnbmVkIHNob3J0CW51bV9zYW1wbGVzX2NvdW50ZXIwX0xTVzsKKwl1bnNpZ25lZCBzaG9ydAludW1fYnl0ZXNfY291bnRlcjBfSFNXOworCXVuc2lnbmVkIHNob3J0CW51bV9ieXRlc19jb3VudGVyMF9NU1c7CisJdW5zaWduZWQgc2hvcnQJbnVtX2J5dGVzX2NvdW50ZXIwX0xTVzsKKwl1bnNpZ25lZCBzaG9ydAlzYW1wX2ZyZXFfb2JqXzA7CisJdW5zaWduZWQgc2hvcnQJc2FtcF9mcmVxX29ial8xOworCXVuc2lnbmVkIHNob3J0CXNhbXBfZnJlcV9vYmpfMjsKKwl1bnNpZ25lZCBzaG9ydAlzYW1wX2ZyZXFfb2JqXzM7CisJdW5zaWduZWQgc2hvcnQJc2FtcF9mcmVxX29ial80OworCXVuc2lnbmVkIHNob3J0CXNhbXBfZnJlcV9vYmpfNTsKKwl1bnNpZ25lZCBzaG9ydAlzYW1wX2ZyZXFfb2JqXzY7CisJdW5zaWduZWQgc2hvcnQJc2FtcF9mcmVxX29ial83OworCXVuc2lnbmVkIHNob3J0CXNhbXBfZnJlcV9vYmpfODsKKwl1bnNpZ25lZCBzaG9ydAlzYW1wX2ZyZXFfb2JqXzk7CisJdW5zaWduZWQgc2hvcnQJc2FtcF9mcmVxX29ial8xMDsKKwl1bnNpZ25lZCBzaG9ydAlzYW1wX2ZyZXFfb2JqXzExOworCXVuc2lnbmVkIHNob3J0CXNhbXBfZnJlcV9vYmpfMTI7CisJdW5zaWduZWQgc2hvcnQJc2FtcF9mcmVxX29ial8xMzsKKwl1bnNpZ25lZCBzaG9ydAlzYW1wX2ZyZXFfb2JqXzE0OworCXVuc2lnbmVkIHNob3J0CXNhbXBfZnJlcV9vYmpfMTU7CisJdW5zaWduZWQgc2hvcnQJbnVtX3NhbXBsZXNfY291bnRlcjRfSFNXOworCXVuc2lnbmVkIHNob3J0CW51bV9zYW1wbGVzX2NvdW50ZXI0X01TVzsKKwl1bnNpZ25lZCBzaG9ydAludW1fc2FtcGxlc19jb3VudGVyNF9MU1c7CisJdW5zaWduZWQgc2hvcnQJbnVtX2J5dGVzX2NvdW50ZXI0X0hTVzsKKwl1bnNpZ25lZCBzaG9ydAludW1fYnl0ZXNfY291bnRlcjRfTVNXOworCXVuc2lnbmVkIHNob3J0CW51bV9ieXRlc19jb3VudGVyNF9MU1c7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBwX21zZ19hdnN5bmNfbXNnOworCisvKgorICogTVNHIHRvIHByb3ZpZGUgUENNIERNQSBNaXNzZWQgZmVlZGJhY2sgZnJvbSB0aGUgRFNQIHRvIEFSTQorICovCisKKyNkZWZpbmUgIEFVRFBQX01TR19QQ01ETUFNSVNTRUQJMHgwMDA2CisjZGVmaW5lICBBVURQUF9NU0dfUENNRE1BTUlTU0VEX0xFTglcCisJc2l6ZW9mKGF1ZHBwX21zZ19wY21kbWFtaXNzZWQpOworCit0eXBlZGVmIHN0cnVjdHsKKwkvKgorCSoqIEJpdCAwCTAgPSBQQ00gRE1BIG5vdCBtaXNzZWQgZm9yIG9iamVjdCAwCisJKiogICAgICAgIDEgPSBQQ00gRE1BIG1pc3NlZCBmb3Igb2JqZWN0MAorCSoqIEJpdCAxCTAgPSBQQ00gRE1BIG5vdCBtaXNzZWQgZm9yIG9iamVjdCAxCisJKiogICAgICAgIDEgPSBQQ00gRE1BIG1pc3NlZCBmb3Igb2JqZWN0MQorCSoqIEJpdCAyCTAgPSBQQ00gRE1BIG5vdCBtaXNzZWQgZm9yIG9iamVjdCAyCisJKiogICAgICAgIDEgPSBQQ00gRE1BIG1pc3NlZCBmb3Igb2JqZWN0MgorCSoqIEJpdCAzCTAgPSBQQ00gRE1BIG5vdCBtaXNzZWQgZm9yIG9iamVjdCAzCisJKiogICAgICAgIDEgPSBQQ00gRE1BIG1pc3NlZCBmb3Igb2JqZWN0MworCSoqIEJpdCA0CTAgPSBQQ00gRE1BIG5vdCBtaXNzZWQgZm9yIG9iamVjdCA0CisJKiogICAgICAgIDEgPSBQQ00gRE1BIG1pc3NlZCBmb3Igb2JqZWN0NAorCSovCisJdW5zaWduZWQgc2hvcnQgcGNtZG1hbWlzc2VkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcF9tc2dfcGNtZG1hbWlzc2VkOworCisvKgorICogTVNHIHRvIEFVRFBQIGVuYWJsZSBvciBkaXNhYmxlIGZlZWRiYWNrIGZvcm0gRFNQIHRvIEFSTQorICovCisKKyNkZWZpbmUgQVVEUFBfTVNHX0NGR19NU0cJMHgwMDA3CisjZGVmaW5lIEFVRFBQX01TR19DRkdfTVNHX0xFTglcCisgICAgc2l6ZW9mKGF1ZHBwX21zZ19jZmdfbXNnKQorCisjZGVmaW5lIEFVRFBQX01TR19FTkFfRU5BCTB4RkZGRgorI2RlZmluZSBBVURQUF9NU0dfRU5BX0RJUwkweDAwMDAKKwordHlwZWRlZiBzdHJ1Y3R7CisJLyogICBFbmFibGVkICAtIDB4ZmZmZgorCSoqICBEaXNhYmxlZCAtIDAKKwkqLworCXVuc2lnbmVkIHNob3J0IGVuYWJsZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBwX21zZ19jZmdfbXNnOworCisvKgorICogTVNHIHRvIGNvbW11bmljYXRlIHRoZSByZXZlcmIgIHBlciBvYmplY3Qgdm9sdW1lCisgKi8KKworI2RlZmluZSBBVURQUF9NU0dfUVJFVkVSQl9WT0xVTUUJMHgwMDA4CisjZGVmaW5lIEFVRFBQX01TR19RUkVWRVJCX1ZPTFVNRV9MRU4JXAorCXNpemVvZihhdWRwcF9tc2dfcXJldmVyYl92b2x1bWUpCisKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CW9ial8wX2dhaW47CisJdW5zaWduZWQgc2hvcnQJb2JqXzFfZ2FpbjsKKwl1bnNpZ25lZCBzaG9ydAlvYmpfMl9nYWluOworCXVuc2lnbmVkIHNob3J0CW9ial8zX2dhaW47CisJdW5zaWduZWQgc2hvcnQJb2JqXzRfZ2FpbjsKKwl1bnNpZ25lZCBzaG9ydAlocGNtX29ial92b2x1bWU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBwX21zZ19xcmV2ZXJiX3ZvbHVtZTsKKworI2RlZmluZSBBVURQUF9NU0dfUk9VVElOR19BQ0sgMHgwMDA5CisjZGVmaW5lIEFVRFBQX01TR19ST1VUSU5HX0FDS19MRU4gXAorICBzaXplb2Yoc3RydWN0IGF1ZHBwX21zZ19yb3V0aW5nX2FjaykKKworc3RydWN0IGF1ZHBwX21zZ19yb3V0aW5nX2FjayB7CisJdW5zaWduZWQgc2hvcnQgZGVjX2lkOworCXVuc2lnbmVkIHNob3J0IHJvdXRpbmdfbW9kZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgQVVEUFBfTVNHX0ZMVVNIX0FDSyAweDAwMEEKKworI2VuZGlmIC8qIFFEU1A1QVVEUFBNU0dfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNWF1ZHByZXByb2NjbWRpLmggYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1YXVkcHJlcHJvY2NtZGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmQzM2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNWF1ZHByZXByb2NjbWRpLmgKQEAgLTAsMCArMSwyNTYgQEAKKyNpZm5kZWYgUURTUDVBVURQUkVQUk9DQ01ESV9ICisjZGVmaW5lIFFEU1A1QVVEUFJFUFJPQ0NNRElfSAorCisvKj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09KgorCisgICAgQSBVIEQgSSBPICAgUCBSIEUgICBQIFIgTyBDIEUgUyBTIEkgTiBHICBJIE4gVCBFIFIgTiBBIEwgIEMgTyBNIE0gQSBOIEQgUworCitHRU5FUkFMIERFU0NSSVBUSU9OCisgIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbnRpb25zIG9mIGZvcm1hdCBibG9ja3Mgb2YgY29tbWFuZHMKKyAgdGhhdCBhcmUgYWNjZXB0ZWQgYnkgQVVEUFJFUFJPQyBUYXNrCisKK1JFRkVSRU5DRVMKKyAgTm9uZQorCitFWFRFUk5BTElaRUQgRlVOQ1RJT05TCisgIE5vbmUKKworQ29weXJpZ2h0KGMpIDE5OTIgLSAyMDA4IGJ5IFFVQUxDT01NLCBJbmNvcnBvcmF0ZWQuCisKK1RoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCittYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisqPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgICAgICAgICAgICAgICAgIEVESVQgSElTVE9SWSBGT1IgRklMRQorCitUaGlzIHNlY3Rpb24gY29udGFpbnMgY29tbWVudHMgZGVzY3JpYmluZyBjaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlLgorTm90aWNlIHRoYXQgY2hhbmdlcyBhcmUgbGlzdGVkIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlci4KKworJEhlYWRlcjogLy9zb3VyY2UvcWNvbS9xY3QvbXVsdGltZWRpYTIvQXVkaW8vZHJpdmVycy9RRFNQNURyaXZlci9RRFNQNUludGVyZmFjZS9tYWluL2xhdGVzdC9xZHNwNWF1ZHByZXByb2NjbWRpLmgjMiAkCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qCisgKiBBVURJT1BSRVBST0MgQ09NTUFORFM6CisgKiBBUk0gdXNlcyB1UEF1ZFByZVByb2NDbWRRdWV1ZSB0byBjb21tdW5pY2F0ZSB3aXRoIEFVRFBSRVBST0NUQVNLCisgKiBMb2NhdGlvbiA6IE1FTUIKKyAqIEJ1ZmZlciBzaXplIDogNTEKKyAqIE51bWJlciBvZiBidWZmZXJzIGluIGEgcXVldWUgOiAzCisgKi8KKworLyoKKyAqIENvbW1hbmQgdG8gY29uZmlndXJlIHRoZSBwYXJhbWV0ZXJzIG9mIEFHQworICovCisKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfQ0ZHX0FHQ19QQVJBTVMJMHgwMDAwCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0NGR19BR0NfUEFSQU1TX0xFTglcCisJc2l6ZW9mKGF1ZHByZXByb2NfY21kX2NmZ19hZ2NfcGFyYW1zKQorCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX1RYX0FHQ19QQVJBTV9NQVNLX0NPTVBfU0xPUEUJMHgwMDA5CisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX1RYX0FHQ19QQVJBTV9NQVNLX0NPTVBfVEgJMHgwMDBBCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX1RYX0FHQ19QQVJBTV9NQVNLX0VYUF9TTE9QRQkweDAwMEIKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfVFhfQUdDX1BBUkFNX01BU0tfRVhQX1RICQkweDAwMEMKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfVFhfQUdDX1BBUkFNX01BU0tfQ09NUF9BSUdfRkxBRwkJMHgwMDBECisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX1RYX0FHQ19QQVJBTV9NQVNLX0NPTVBfU1RBVElDX0dBSU4JMHgwMDBFCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX1RYX0FHQ19QQVJBTV9NQVNLX1RYX0FHQ19FTkFfRkxBRwkweDAwMEYKKworI2RlZmluZQlBVURQUkVQUk9DX0NNRF9UWF9BR0NfRU5BX0ZMQUdfRU5BCS0xCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX1RYX0FHQ19FTkFfRkxBR19ESVMJMHgwMDAwCisKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfQURQX0dBSU5fRkxBR19FTkFfQURQX0dBSU4JLTEKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfQURQX0dBSU5fRkxBR19FTkFfU1RBVElDX0dBSU4JMHgwMDAwCisKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfUEFSQU1fTUFTS19STVNfVEFZCTB4MDAwNAorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9QQVJBTV9NQVNLX1JFTEVBU0VLCTB4MDAwNQorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9QQVJBTV9NQVNLX0RFTEFZCQkweDAwMDYKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfUEFSQU1fTUFTS19BVFRBQ0tLCTB4MDAwNworI2RlZmluZQlBVURQUkVQUk9DX0NNRF9QQVJBTV9NQVNLX0xFQUtSQVRFX1NMT1cJMHgwMDA4CisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX1BBUkFNX01BU0tfTEVBS1JBVEVfRkFTVAkweDAwMDkKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfUEFSQU1fTUFTS19BSUdfUkVMRUFTRUsgCTB4MDAwQQorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9QQVJBTV9NQVNLX0FJR19NSU4JMHgwMDBCCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX1BBUkFNX01BU0tfQUlHX01BWAkweDAwMEMKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfUEFSQU1fTUFTS19MRUFLX1VQCTB4MDAwRAorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9QQVJBTV9NQVNLX0xFQUtfRE9XTgkweDAwMEUKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfUEFSQU1fTUFTS19BSUdfQVRUQUNLSwkweDAwMEYKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CWNtZF9pZDsKKwl1bnNpZ25lZCBzaG9ydAl0eF9hZ2NfcGFyYW1fbWFzazsKKwl1bnNpZ25lZCBzaG9ydAl0eF9hZ2NfZW5hYmxlX2ZsYWc7CisJdW5zaWduZWQgc2hvcnQJc3RhdGljX2dhaW47CisJc2lnbmVkIHNob3J0CWFkYXB0aXZlX2dhaW5fZmxhZzsKKwl1bnNpZ25lZCBzaG9ydAlleHBhbmRlcl90aDsKKwl1bnNpZ25lZCBzaG9ydAlleHBhbmRlcl9zbG9wZTsKKwl1bnNpZ25lZCBzaG9ydAljb21wcmVzc29yX3RoOworCXVuc2lnbmVkIHNob3J0CWNvbXByZXNzb3Jfc2xvcGU7CisJdW5zaWduZWQgc2hvcnQJcGFyYW1fbWFzazsKKwl1bnNpZ25lZCBzaG9ydAlhaWdfYXR0YWNrazsKKwl1bnNpZ25lZCBzaG9ydAlhaWdfbGVha19kb3duOworCXVuc2lnbmVkIHNob3J0CWFpZ19sZWFrX3VwOworCXVuc2lnbmVkIHNob3J0CWFpZ19tYXg7CisJdW5zaWduZWQgc2hvcnQJYWlnX21pbjsKKwl1bnNpZ25lZCBzaG9ydAlhaWdfcmVsZWFzZWs7CisJdW5zaWduZWQgc2hvcnQJYWlnX2xlYWtyYXRlX2Zhc3Q7CisJdW5zaWduZWQgc2hvcnQJYWlnX2xlYWtyYXRlX3Nsb3c7CisJdW5zaWduZWQgc2hvcnQJYXR0YWNra19tc3c7CisJdW5zaWduZWQgc2hvcnQJYXR0YWNra19sc3c7CisJdW5zaWduZWQgc2hvcnQJZGVsYXk7CisJdW5zaWduZWQgc2hvcnQJcmVsZWFzZWtfbXN3OworCXVuc2lnbmVkIHNob3J0CXJlbGVhc2VrX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAlybXNfdGF2OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcmVwcm9jX2NtZF9jZmdfYWdjX3BhcmFtczsKKworCisvKgorICogQ29tbWFuZCB0byBjb25maWd1cmUgdGhlIHBhcmFtcyBvZiBBZHZhbnZlZCBBR0MKKyAqLworCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0NGR19BR0NfUEFSQU1TXzIJCTB4MDAwMQorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9DRkdfQUdDX1BBUkFNU18yX0xFTgkJXAorCXNpemVvZihhdWRwcmVwcm9jX2NtZF9jZmdfYWdjX3BhcmFtc18yKQorCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EXzJfVFhfQUdDX0VOQV9GTEFHX0VOQQktMTsKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfMl9UWF9BR0NfRU5BX0ZMQUdfRElTCTB4MDAwMDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CWNtZF9pZDsKKwl1bnNpZ25lZCBzaG9ydAlhZ2NfcGFyYW1fbWFzazsKKwlzaWduZWQgc2hvcnQJdHhfYWdjX2VuYWJsZV9mbGFnOworCXVuc2lnbmVkIHNob3J0CWNvbXBfc3RhdGljX2dhaW47CisJdW5zaWduZWQgc2hvcnQJZXhwX3RoOworCXVuc2lnbmVkIHNob3J0CWV4cF9zbG9wZTsKKwl1bnNpZ25lZCBzaG9ydAljb21wX3RoOworCXVuc2lnbmVkIHNob3J0CWNvbXBfc2xvcGU7CisJdW5zaWduZWQgc2hvcnQJY29tcF9ybXNfdGF2OworCXVuc2lnbmVkIHNob3J0CWNvbXBfc2FtcF9tYXNrOworCXVuc2lnbmVkIHNob3J0CWNvbXBfYXR0YWNra19tc3c7CisJdW5zaWduZWQgc2hvcnQJY29tcF9hdHRhY2trX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAljb21wX3JlbGVhc2VrX21zdzsKKwl1bnNpZ25lZCBzaG9ydAljb21wX3JlbGVhc2VrX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAljb21wX2RlbGF5OworCXVuc2lnbmVkIHNob3J0CWNvbXBfbWFrZXVwX2dhaW47Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHByZXByb2NfY21kX2NmZ19hZ2NfcGFyYW1zXzI7CisKKy8qCisgKiBDb21tYW5kIHRvIGNvbmZpZ3VyZSBwYXJhbXMgZm9yIG5zCisgKi8KKworI2RlZmluZQlBVURQUkVQUk9DX0NNRF9DRkdfTlNfUEFSQU1TCQkweDAwMDIKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfQ0ZHX05TX1BBUkFNU19MRU4JXAorCXNpemVvZihhdWRwcmVwcm9jX2NtZF9jZmdfbnNfcGFyYW1zKQorCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0VDX01PREVfTkVXX05MTVNfRU5BCTB4MDAwMQorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9FQ19NT0RFX05FV19OTE1TX0RJUyAJMHgwMDAwCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0VDX01PREVfTkVXX0RFU19FTkEJMHgwMDAyCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0VDX01PREVfTkVXX0RFU19ESVMJMHgwMDAwCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0VDX01PREVfTkVXX05TX0VOQQkweDAwMDQKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfRUNfTU9ERV9ORVdfTlNfRElTCTB4MDAwMAorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9FQ19NT0RFX05FV19DTklfRU5BCTB4MDAwOAorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9FQ19NT0RFX05FV19DTklfRElTCTB4MDAwMAorCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0VDX01PREVfTkVXX05MRVNfRU5BCTB4MDAxMAorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9FQ19NT0RFX05FV19OTEVTX0RJUwkweDAwMDAKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfRUNfTU9ERV9ORVdfSEJfRU5BCTB4MDAyMAorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9FQ19NT0RFX05FV19IQl9ESVMJMHgwMDAwCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0VDX01PREVfTkVXX1ZBX0VOQQkweDAwNDAKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfRUNfTU9ERV9ORVdfVkFfRElTCTB4MDAwMAorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9FQ19NT0RFX05FV19QQ0RfRU5BCTB4MDA4MAorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9FQ19NT0RFX05FV19QQ0RfRElTCTB4MDAwMAorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9FQ19NT0RFX05FV19GRUhJX0VOQQkweDAxMDAKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfRUNfTU9ERV9ORVdfRkVISV9ESVMgCTB4MDAwMAorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9FQ19NT0RFX05FV19ORUhJX0VOQQkweDAyMDAKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfRUNfTU9ERV9ORVdfTkVISV9ESVMgCTB4MDAwMAorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9FQ19NT0RFX05FV19OTFBQX0VOQQkweDA0MDAKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfRUNfTU9ERV9ORVdfTkxQUF9ESVMJMHgwMDAwCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0VDX01PREVfTkVXX0ZORV9FTkEJMHgwODAwCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0VDX01PREVfTkVXX0ZORV9ESVMJMHgwMDAwCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0VDX01PREVfTkVXX1BSRU5MTVNfRU5BIAkweDEwMDAKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfRUNfTU9ERV9ORVdfUFJFTkxNU19ESVMgCTB4MDAwMAorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJY21kX2lkOworCXVuc2lnbmVkIHNob3J0CWVjX21vZGVfbmV3OworCXVuc2lnbmVkIHNob3J0CWRlbnNfZ2FtbWFfbjsKKwl1bnNpZ25lZCBzaG9ydAlkZW5zX25mZV9ibG9ja19zaXplOworCXVuc2lnbmVkIHNob3J0CWRlbnNfbGltaXRfbnM7CisJdW5zaWduZWQgc2hvcnQJZGVuc19saW1pdF9uc19kOworCXVuc2lnbmVkIHNob3J0CXdiX2dhbW1hX2U7CisJdW5zaWduZWQgc2hvcnQJd2JfZ2FtbWFfbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcHJlcHJvY19jbWRfY2ZnX25zX3BhcmFtczsKKworLyoKKyAqIENvbW1hbmQgdG8gY29uZmlndXJlIHBhcmFtZXRlcnMgZm9yIElJUiB0dW5pbmcgZmlsdGVyCisgKi8KKworI2RlZmluZQlBVURQUkVQUk9DX0NNRF9DRkdfSUlSX1RVTklOR19GSUxURVJfUEFSQU1TCQkweDAwMDMKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfQ0ZHX0lJUl9UVU5JTkdfRklMVEVSX1BBUkFNU19MRU4JXAorCXNpemVvZihhdWRwcmVwcm9jX2NtZF9jZmdfaWlyX3R1bmluZ19maWx0ZXJfcGFyYW1zKQorCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0lJUl9BQ1RJVkVfRkxBR19ESVMJMHgwMDAwCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0lJUl9BQ1RJVkVfRkxBR19FTkEJMHgwMDAxCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAljbWRfaWQ7CisJdW5zaWduZWQgc2hvcnQJYWN0aXZlX2ZsYWc7CisJdW5zaWduZWQgc2hvcnQJbnVtX2JhbmRzOworCXVuc2lnbmVkIHNob3J0CW51bWVyYXRvcl9jb2VmZl9iMF9maWx0ZXIwX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAludW1lcmF0b3JfY29lZmZfYjBfZmlsdGVyMF9tc3c7CisJdW5zaWduZWQgc2hvcnQJbnVtZXJhdG9yX2NvZWZmX2IxX2ZpbHRlcjBfbHN3OworCXVuc2lnbmVkIHNob3J0CW51bWVyYXRvcl9jb2VmZl9iMV9maWx0ZXIwX21zdzsKKwl1bnNpZ25lZCBzaG9ydAludW1lcmF0b3JfY29lZmZfYjJfZmlsdGVyMF9sc3c7CisJdW5zaWduZWQgc2hvcnQJbnVtZXJhdG9yX2NvZWZmX2IyX2ZpbHRlcjBfbXN3OworCXVuc2lnbmVkIHNob3J0CW51bWVyYXRvcl9jb2VmZl9iMF9maWx0ZXIxX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAludW1lcmF0b3JfY29lZmZfYjBfZmlsdGVyMV9tc3c7CisJdW5zaWduZWQgc2hvcnQJbnVtZXJhdG9yX2NvZWZmX2IxX2ZpbHRlcjFfbHN3OworCXVuc2lnbmVkIHNob3J0CW51bWVyYXRvcl9jb2VmZl9iMV9maWx0ZXIxX21zdzsKKwl1bnNpZ25lZCBzaG9ydAludW1lcmF0b3JfY29lZmZfYjJfZmlsdGVyMV9sc3c7CisJdW5zaWduZWQgc2hvcnQJbnVtZXJhdG9yX2NvZWZmX2IyX2ZpbHRlcjFfbXN3OworCXVuc2lnbmVkIHNob3J0CW51bWVyYXRvcl9jb2VmZl9iMF9maWx0ZXIyX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAludW1lcmF0b3JfY29lZmZfYjBfZmlsdGVyMl9tc3c7CisJdW5zaWduZWQgc2hvcnQJbnVtZXJhdG9yX2NvZWZmX2IxX2ZpbHRlcjJfbHN3OworCXVuc2lnbmVkIHNob3J0CW51bWVyYXRvcl9jb2VmZl9iMV9maWx0ZXIyX21zdzsKKwl1bnNpZ25lZCBzaG9ydAludW1lcmF0b3JfY29lZmZfYjJfZmlsdGVyMl9sc3c7CisJdW5zaWduZWQgc2hvcnQJbnVtZXJhdG9yX2NvZWZmX2IyX2ZpbHRlcjJfbXN3OworCXVuc2lnbmVkIHNob3J0CW51bWVyYXRvcl9jb2VmZl9iMF9maWx0ZXIzX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAludW1lcmF0b3JfY29lZmZfYjBfZmlsdGVyM19tc3c7CisJdW5zaWduZWQgc2hvcnQJbnVtZXJhdG9yX2NvZWZmX2IxX2ZpbHRlcjNfbHN3OworCXVuc2lnbmVkIHNob3J0CW51bWVyYXRvcl9jb2VmZl9iMV9maWx0ZXIzX21zdzsKKwl1bnNpZ25lZCBzaG9ydAludW1lcmF0b3JfY29lZmZfYjJfZmlsdGVyM19sc3c7CisJdW5zaWduZWQgc2hvcnQJbnVtZXJhdG9yX2NvZWZmX2IyX2ZpbHRlcjNfbXN3OworCXVuc2lnbmVkIHNob3J0IAlkZW5vbWluYXRvcl9jb2VmZl9hMF9maWx0ZXIwX2xzdzsKKwl1bnNpZ25lZCBzaG9ydCAJZGVub21pbmF0b3JfY29lZmZfYTBfZmlsdGVyMF9tc3c7CisJdW5zaWduZWQgc2hvcnQgCWRlbm9taW5hdG9yX2NvZWZmX2ExX2ZpbHRlcjBfbHN3OworCXVuc2lnbmVkIHNob3J0IAlkZW5vbWluYXRvcl9jb2VmZl9hMV9maWx0ZXIwX21zdzsKKwl1bnNpZ25lZCBzaG9ydCAJZGVub21pbmF0b3JfY29lZmZfYTBfZmlsdGVyMV9sc3c7CisJdW5zaWduZWQgc2hvcnQgCWRlbm9taW5hdG9yX2NvZWZmX2EwX2ZpbHRlcjFfbXN3OworCXVuc2lnbmVkIHNob3J0IAlkZW5vbWluYXRvcl9jb2VmZl9hMV9maWx0ZXIxX2xzdzsKKwl1bnNpZ25lZCBzaG9ydCAJZGVub21pbmF0b3JfY29lZmZfYTFfZmlsdGVyMV9tc3c7CisgIHVuc2lnbmVkIHNob3J0IAlkZW5vbWluYXRvcl9jb2VmZl9hMF9maWx0ZXIyX2xzdzsKKwl1bnNpZ25lZCBzaG9ydCAJZGVub21pbmF0b3JfY29lZmZfYTBfZmlsdGVyMl9tc3c7CisJdW5zaWduZWQgc2hvcnQgCWRlbm9taW5hdG9yX2NvZWZmX2ExX2ZpbHRlcjJfbHN3OworCXVuc2lnbmVkIHNob3J0IAlkZW5vbWluYXRvcl9jb2VmZl9hMV9maWx0ZXIyX21zdzsKKyAgdW5zaWduZWQgc2hvcnQgCWRlbm9taW5hdG9yX2NvZWZmX2EwX2ZpbHRlcjNfbHN3OworCXVuc2lnbmVkIHNob3J0IAlkZW5vbWluYXRvcl9jb2VmZl9hMF9maWx0ZXIzX21zdzsKKwl1bnNpZ25lZCBzaG9ydCAJZGVub21pbmF0b3JfY29lZmZfYTFfZmlsdGVyM19sc3c7CisJdW5zaWduZWQgc2hvcnQgCWRlbm9taW5hdG9yX2NvZWZmX2ExX2ZpbHRlcjNfbXN3OworCisJdW5zaWduZWQgc2hvcnQJc2hpZnRfZmFjdG9yX2ZpbHRlcjA7CisJdW5zaWduZWQgc2hvcnQJc2hpZnRfZmFjdG9yX2ZpbHRlcjE7CisJdW5zaWduZWQgc2hvcnQJc2hpZnRfZmFjdG9yX2ZpbHRlcjI7CisJdW5zaWduZWQgc2hvcnQJc2hpZnRfZmFjdG9yX2ZpbHRlcjM7CisKKwl1bnNpZ25lZCBzaG9ydAljaGFubmVsX3NlbGVjdGVkMDsKKwl1bnNpZ25lZCBzaG9ydAljaGFubmVsX3NlbGVjdGVkMTsKKwl1bnNpZ25lZCBzaG9ydAljaGFubmVsX3NlbGVjdGVkMjsKKwl1bnNpZ25lZCBzaG9ydAljaGFubmVsX3NlbGVjdGVkMzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSlhdWRwcmVwcm9jX2NtZF9jZmdfaWlyX3R1bmluZ19maWx0ZXJfcGFyYW1zOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVhdWRwcmVwcm9jbXNnLmggYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1YXVkcHJlcHJvY21zZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MGU0MWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1YXVkcHJlcHJvY21zZy5oCkBAIC0wLDAgKzEsODUgQEAKKyNpZm5kZWYgUURTUDVBVURQUkVQUk9DTVNHX0gKKyNkZWZpbmUgUURTUDVBVURQUkVQUk9DTVNHX0gKKworLyo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSoKKworICAgIEEgVSBEIEkgTyAgIFAgUiBFICAgUCBSIE8gQyBFIFMgUyBJIE4gRyAgTSBFIFMgUyBBIEcgRSBTCisKK0dFTkVSQUwgREVTQ1JJUFRJT04KKyAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmludGlvbnMgb2YgZm9ybWF0IGJsb2NrcyBvZiBtZXNzYWdlcworICB0aGF0IGFyZSByY3ZkIGJ5IEFVRFBSRVBST0MgVGFzaworCitSRUZFUkVOQ0VTCisgIE5vbmUKKworRVhURVJOQUxJWkVEIEZVTkNUSU9OUworICBOb25lCisKK0NvcHlyaWdodChjKSAxOTkyIC0gMjAwOCBieSBRVUFMQ09NTSwgSW5jb3Jwb3JhdGVkLgorCitUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworKj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Ki8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgICAgICAgICAgICAgICBFRElUIEhJU1RPUlkgRk9SIEZJTEUKKworVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGNvbW1lbnRzIGRlc2NyaWJpbmcgY2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZS4KK05vdGljZSB0aGF0IGNoYW5nZXMgYXJlIGxpc3RlZCBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIuCisKKyAkSGVhZGVyOiAvL3NvdXJjZS9xY29tL3FjdC9tdWx0aW1lZGlhMi9BdWRpby9kcml2ZXJzL1FEU1A1RHJpdmVyL1FEU1A1SW50ZXJmYWNlL21haW4vbGF0ZXN0L3Fkc3A1YXVkcHJlcHJvY21zZy5oIzMgJAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKgorICogQURTUFJFUFJPQ1RBU0sgTWVzc2FnZXMKKyAqIEFVRFBSRVBST0NUQVNLIHVzZXMgYXVkUHJlUHJvY1VwUmxpc3QgdG8gY29tbXVuaWNhdGUgd2l0aCBBUk0KKyAqIExvY2F0aW9uCTogTUVNQQorICogTWVzc2FnZSBMZW5ndGggIDogMgorICovCisKKy8qCisgKiBNZXNzYWdlIHRvIGluZGljYXRlIHBhcnRpY3VsYXIgZmVhdHVyZSBoYXMgYmVlbiBlbmFibGVkIG9yIGRpc2FibGVkCisgKi8KKworCisjZGVmaW5lCUFVRFBSRVBST0NfTVNHX0NNRF9DRkdfRE9ORV9NU0cJMHgwMDAwCisjZGVmaW5lCUFVRFBSRVBST0NfTVNHX0NNRF9DRkdfRE9ORV9NU0dfTEVOCVwKKwlzaXplb2YoYXVkcHJlcHJvY19tc2dfY21kX2NmZ19kb25lX21zZykKKworI2RlZmluZQlBVURQUkVQUk9DX01TR19UWVBFX0FHQwkJCTB4MDAwMAorI2RlZmluZQlBVURQUkVQUk9DX01TR19UWVBFX05PSVNFX1JFRFVDVElPTgkweDAwMDEKKyNkZWZpbmUJQVVEUFJFUFJPQ19NU0dfVFlQRV9JSVJfRklMVEVSCQkweDAwMDIKKworCisjZGVmaW5lCUFVRFBSRVBST0NfTVNHX1NUQVRVU19GTEFHX0VOQQkJLTEKKyNkZWZpbmUJQVVEUFJFUFJPQ19NU0dfU1RBVFVTX0ZMQUdfRElTCQkweDAwMDAKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CXR5cGU7CisJc2lnbmVkIHNob3J0CXN0YXR1c19mbGFnOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcmVwcm9jX21zZ19jbWRfY2ZnX2RvbmVfbXNnOworCisKKy8qCisgKiBNZXNzYWdlIHRvIGluZGljYXRlIHBhcnRpY3VsYXIgZmVhdHVyZSBoYXMgc2VsZWN0ZWQgZm9yIHdyb25nIHNhbXAgZnJlcQorICovCisKKyNkZWZpbmUJQVVEUFJFUFJPQ19NU0dfRVJST1JfTVNHX0lECQkweDAwMDEKKyNkZWZpbmUJQVVEUFJFUFJPQ19NU0dfRVJST1JfTVNHX0lEX0xFTglcCisJc2l6ZW9mKGF1ZHByZXByb2NfbXNnX2Vycm9yX21zZ19pZCkKKworI2RlZmluZQlBVURQUkVQUk9DX01TR19FUlJfSU5ERVhfTlMJCTB4MDAwMAorCit0eXBlZGVmIHN0cnVjdCB7CisJIHVuc2lnbmVkIHNob3J0CWVycl9pbmRleDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcHJlcHJvY19tc2dfZXJyb3JfbXNnX2lkOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVhdWRyZWNjbWRpLmggYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1YXVkcmVjY21kaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwM2VlMDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1YXVkcmVjY21kaS5oCkBAIC0wLDAgKzEsMTc2IEBACisjaWZuZGVmIFFEU1A1QVVEUkVDQ01ESV9ICisjZGVmaW5lIFFEU1A1QVVEUkVDQ01ESV9ICisKKy8qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qCisKKyAgICBBIFUgRCBJIE8gICBSIEUgQyBPIFIgRCAgSSBOIFQgRSBSIE4gQSBMICBDIE8gTSBNIEEgTiBEIFMKKworR0VORVJBTCBERVNDUklQVElPTgorICBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW50aW9ucyBvZiBmb3JtYXQgYmxvY2tzIG9mIGNvbW1hbmRzCisgIHRoYXQgYXJlIGFjY2VwdGVkIGJ5IEFVRFJFQyBUYXNrCisKK1JFRkVSRU5DRVMKKyAgTm9uZQorCitFWFRFUk5BTElaRUQgRlVOQ1RJT05TCisgIE5vbmUKKworQ29weXJpZ2h0KGMpIDE5OTIgLSAyMDA4IGJ5IFFVQUxDT01NLCBJbmNvcnBvcmF0ZWQuCisKK1RoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCittYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisqPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgICAgICAgICAgICAgICAgRURJVCBISVNUT1JZIEZPUiBGSUxFCisKK1RoaXMgc2VjdGlvbiBjb250YWlucyBjb21tZW50cyBkZXNjcmliaW5nIGNoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUuCitOb3RpY2UgdGhhdCBjaGFuZ2VzIGFyZSBsaXN0ZWQgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyLgorCisgJEhlYWRlcjogLy9zb3VyY2UvcWNvbS9xY3QvbXVsdGltZWRpYTIvQXVkaW8vZHJpdmVycy9RRFNQNURyaXZlci9RRFNQNUludGVyZmFjZS9tYWluL2xhdGVzdC9xZHNwNWF1ZHJlY2NtZGkuaCMzICQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qCisgKiBBVURSRUNUQVNLIENPTU1BTkRTCisgKiBBUk0gdXNlcyAyIHF1ZXVlcyB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBBVURSRUNUQVNLCisgKiAxLnVQQXVkUmVjQ21kUXVldWUKKyAqIExvY2F0aW9uIDpNRU1DCisgKiBCdWZmZXIgU2l6ZSA6IDgKKyAqIE5vIG9mIEJ1ZmZlcnMgaW4gYSBxdWV1ZSA6IDMKKyAqIDIuYXVkUmVjVXBCaXRTdHJlYW1RdWV1ZQorICogTG9jYXRpb24gOiBNRU1DCisgKiBCdWZmZXIgU2l6ZSA6IDQKKyAqIE5vIG9mIGJ1ZmZlcnMgaW4gYSBxdWV1ZSA6IDIKKyAqLworCisvKgorICogQ29tbWFuZHMgb24gdVBBdWRSZWNDbWRRdWV1ZQorICovCisKKy8qCisgKiBDb21tYW5kIHRvIGluaXRpYXRlIGFuZCB0ZXJtaW5hdGUgdGhlIGF1ZGlvIHJlY29yZGluZyBzZWN0aW9uCisgKi8KKworI2RlZmluZSBBVURSRUNfQ01EX0NGRwkJMHgwMDAwCisjZGVmaW5lCUFVRFJFQ19DTURfQ0ZHX0xFTglzaXplb2YoYXVkcmVjX2NtZF9jZmcpCisKKyNkZWZpbmUJQVVEUkVDX0NNRF9UWVBFXzBfSU5ERVhfV0FWCTB4MDAwMAorI2RlZmluZQlBVURSRUNfQ01EX1RZUEVfMF9JTkRFWF9BQUMJMHgwMDAxCisKKyNkZWZpbmUgQVVEUkVDX0NNRF9UWVBFXzBfRU5BCQkweDQwMDAKKyNkZWZpbmUgQVVEUkVDX0NNRF9UWVBFXzBfRElTCQkweDAwMDAKKworI2RlZmluZSBBVURSRUNfQ01EX1RZUEVfMF9OT1VQREFURQkweDAwMDAKKyNkZWZpbmUgQVVEUkVDX0NNRF9UWVBFXzBfVVBEQVRFCTB4ODAwMAorCisjZGVmaW5lCUFVRFJFQ19DTURfVFlQRV8xX0lOREVYX1NCQwkweDAwMDIKKworI2RlZmluZSBBVURSRUNfQ01EX1RZUEVfMV9FTkEJCTB4NDAwMAorI2RlZmluZSBBVURSRUNfQ01EX1RZUEVfMV9ESVMJCTB4MDAwMAorCisjZGVmaW5lIEFVRFJFQ19DTURfVFlQRV8xX05PVVBEQVRFCTB4MDAwMAorI2RlZmluZSBBVURSRUNfQ01EX1RZUEVfMV9VUERBVEUJMHg4MDAwCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCAJY21kX2lkOworCXVuc2lnbmVkIHNob3J0CXR5cGVfMDsKKwl1bnNpZ25lZCBzaG9ydAl0eXBlXzE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHJlY19jbWRfY2ZnOworCisKKy8qCisgKiBDb21tYW5kIHRvIGNvbmZpZ3VyZSB0aGUgcmVjb3JkaW5nIHBhcmFtZXRlcnMgZm9yIFJlY1R5cGUwKEFBQy9XQVYpIGVuY29kZXIKKyAqLworCisjZGVmaW5lCUFVRFJFQ19DTURfQVJFQzBQQVJBTV9DRkcJMHgwMDAxCisjZGVmaW5lCUFVRFJFQ19DTURfQVJFQzBQQVJBTV9DRkdfTEVOCVwKKwlzaXplb2YoYXVkcmVjX2NtZF9hcmVjMHBhcmFtX2NmZykKKworI2RlZmluZQlBVURSRUNfQ01EX1NBTVBfUkFURV9JTkRYXzgwMDAJCTB4MDAwQgorI2RlZmluZQlBVURSRUNfQ01EX1NBTVBfUkFURV9JTkRYXzExMDI1CQkweDAwMEEKKyNkZWZpbmUJQVVEUkVDX0NNRF9TQU1QX1JBVEVfSU5EWF8xMjAwMAkJMHgwMDA5CisjZGVmaW5lCUFVRFJFQ19DTURfU0FNUF9SQVRFX0lORFhfMTYwMDAJCTB4MDAwOAorI2RlZmluZQlBVURSRUNfQ01EX1NBTVBfUkFURV9JTkRYXzIyMDUwCQkweDAwMDcKKyNkZWZpbmUJQVVEUkVDX0NNRF9TQU1QX1JBVEVfSU5EWF8yNDAwMAkJMHgwMDA2CisjZGVmaW5lCUFVRFJFQ19DTURfU0FNUF9SQVRFX0lORFhfMzIwMDAJCTB4MDAwNQorI2RlZmluZQlBVURSRUNfQ01EX1NBTVBfUkFURV9JTkRYXzQ0MTAwCQkweDAwMDQKKyNkZWZpbmUJQVVEUkVDX0NNRF9TQU1QX1JBVEVfSU5EWF80ODAwMAkJMHgwMDAzCisKKyNkZWZpbmUgQVVEUkVDX0NNRF9TVEVSRU9fTU9ERV9NT05PCQkweDAwMDAKKyNkZWZpbmUgQVVEUkVDX0NNRF9TVEVSRU9fTU9ERV9TVEVSRU8JCTB4MDAwMQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQgCWNtZF9pZDsKKwl1bnNpZ25lZCBzaG9ydAlwdHJfdG9fZXh0cGt0X2J1ZmZlcl9tc3c7CisJdW5zaWduZWQgc2hvcnQJcHRyX3RvX2V4dHBrdF9idWZmZXJfbHN3OworCXVuc2lnbmVkIHNob3J0CWJ1Zl9sZW47CisJdW5zaWduZWQgc2hvcnQJc2FtcF9yYXRlX2luZGV4OworCXVuc2lnbmVkIHNob3J0CXN0ZXJlb19tb2RlOworCXVuc2lnbmVkIHNob3J0IAlyZWNfcXVhbGl0eTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcmVjX2NtZF9hcmVjMHBhcmFtX2NmZzsKKworLyoKKyAqIENvbW1hbmQgdG8gY29uZmlndXJlIHRoZSByZWNvcmRpbmcgcGFyYW1ldGVycyBmb3IgUmVjVHlwZTEoU0JDKSBlbmNvZGVyCisgKi8KKworI2RlZmluZSBBVURSRUNfQ01EX0FSRUMxUEFSQU1fQ0ZHCTB4MDAwMgorI2RlZmluZSBBVURSRUNfQ01EX0FSRUMxUEFSQU1fQ0ZHX0xFTglcCisJc2l6ZW9mKGF1ZHJlY19jbWRfYXJlYzFwYXJhbV9jZmcpCisKKyNkZWZpbmUgQVVEUkVDX0NNRF9QQVJBTV9CVUZfQkxPQ0tTXzQJMHgwMDAwCisjZGVmaW5lIEFVRFJFQ19DTURfUEFSQU1fQlVGX0JMT0NLU184CTB4MDAwMQorI2RlZmluZSBBVURSRUNfQ01EX1BBUkFNX0JVRl9CTE9DS1NfMTIJMHgwMDAyCisjZGVmaW5lIEFVRFJFQ19DTURfUEFSQU1fQlVGX0JMT0NLU18xNgkweDAwMDMKKworI2RlZmluZSBBVURSRUNfQ01EX1BBUkFNX0JVRl9TVUJfQkFORFNfOAkweDAwMTAKKyNkZWZpbmUgQVVEUkVDX0NNRF9QQVJBTV9CVUZfTU9ERV9NT05PCQkweDAwMDAKKyNkZWZpbmUgQVVEUkVDX0NNRF9QQVJBTV9CVUZfTU9ERV9EVUFMCQkweDAwNDAKKyNkZWZpbmUgQVVEUkVDX0NNRF9QQVJBTV9CVUZfTU9ERV9TVEVSRU8JMHgwMDUwCisjZGVmaW5lIEFVRFJFQ19DTURfUEFSQU1fQlVGX01PREVfSlNURVJFTwkweDAwNjAKKyNkZWZpbmUgQVVEUkVDX0NNRF9QQVJBTV9CVUZfTE9VRE5FU1MJCTB4MDAwMAorI2RlZmluZSBBVURSRUNfQ01EX1BBUkFNX0JVRl9TTlIJCTB4MDEwMAorI2RlZmluZSBBVURSRUNfQ01EX1BBUkFNX0JVRl9CQVNJQ19WRVIJCTB4MDAwMAorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQgCWNtZF9pZDsKKwl1bnNpZ25lZCBzaG9ydAlwdHJfdG9fZXh0cGt0X2J1ZmZlcl9tc3c7CisJdW5zaWduZWQgc2hvcnQJcHRyX3RvX2V4dHBrdF9idWZmZXJfbHN3OworCXVuc2lnbmVkIHNob3J0CWJ1Zl9sZW47CisJdW5zaWduZWQgc2hvcnQJcGFyYW1fYnVmOworCXVuc2lnbmVkIHNob3J0CWJpdF9yYXRlXzA7CisJdW5zaWduZWQgc2hvcnQJYml0X3JhdGVfMTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcmVjX2NtZF9hcmVjMXBhcmFtX2NmZzsKKworCisvKgorICogQ29tbWFuZHMgb24gYXVkUmVjVXBCaXRTdHJlYW1RdWV1ZQorICovCisKKy8qCisgKiBDb21tYW5kIHRvIGluZGljYXRlIHRoZSBjdXJyZW50IHBhY2tldCByZWFkIGNvdW50CisgKi8KKworI2RlZmluZSBBVURSRUNfQ01EX1BBQ0tFVF9FWFRfUFRSCQkweDAwMDAKKyNkZWZpbmUgQVVEUkVDX0NNRF9QQUNLRVRfRVhUX1BUUl9MRU4JXAorCXNpemVvZihhdWRyZWNfY21kX3BhY2tldF9leHRfcHRyKQorCisjZGVmaW5lIEFVRFJFQ19DTURfVFlQRV8wCTB4MDAwMAorI2RlZmluZSBBVURSRUNfQ01EX1RZUEVfMQkweDAwMDEKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0ICBjbWRfaWQ7CisJdW5zaWduZWQgc2hvcnQJdHlwZTsKKwl1bnNpZ25lZCBzaG9ydCAJY3Vycl9yZWNfY291bnRfbXN3OworCXVuc2lnbmVkIHNob3J0IAljdXJyX3JlY19jb3VudF9sc3c7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHJlY19jbWRfcGFja2V0X2V4dF9wdHI7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNWF1ZHJlY21zZy5oIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNWF1ZHJlY21zZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNmViNTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1YXVkcmVjbXNnLmgKQEAgLTAsMCArMSwxMjcgQEAKKyNpZm5kZWYgUURTUDVBVURSRUNNU0dJX0gKKyNkZWZpbmUgUURTUDVBVURSRUNNU0dJX0gKKworLyo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSoKKworICAgIEEgVSBEIEkgTyAgIFIgRSBDIE8gUiBEICBNIEUgUyBTIEEgRyBFIFMKKworR0VORVJBTCBERVNDUklQVElPTgorICBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW50aW9ucyBvZiBmb3JtYXQgYmxvY2tzIG9mIG1lc3NhZ2VzCisgIHRoYXQgYXJlIHNlbnQgYnkgQVVEUkVDIFRhc2sKKworUkVGRVJFTkNFUworICBOb25lCisKK0VYVEVSTkFMSVpFRCBGVU5DVElPTlMKKyAgTm9uZQorCitDb3B5cmlnaHQoYykgMTk5MiAtIDIwMDggYnkgUVVBTENPTU0sIEluY29ycG9yYXRlZC4KKworVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKK21heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgICAgICAgICAgICAgICBFRElUIEhJU1RPUlkgRk9SIEZJTEUKKworVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGNvbW1lbnRzIGRlc2NyaWJpbmcgY2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZS4KK05vdGljZSB0aGF0IGNoYW5nZXMgYXJlIGxpc3RlZCBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIuCisKKyAkSGVhZGVyOiAvL3NvdXJjZS9xY29tL3FjdC9tdWx0aW1lZGlhMi9BdWRpby9kcml2ZXJzL1FEU1A1RHJpdmVyL1FEU1A1SW50ZXJmYWNlL21haW4vbGF0ZXN0L3Fkc3A1YXVkcmVjbXNnLmgjMyAkCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKgorICogQVVEUkVDVEFTSyBNRVNTQUdFUworICogQVVEUkVDVEFTSyB1c2VzIGF1ZFJlY1VwUmxpc3QgdG8gY29tbXVuaWNhdGUgd2l0aCBBUk0KKyAqIExvY2F0aW9uIDogTUVNQworICogQnVmZmVyIHNpemUgOiA0CisgKiBObyBvZiBidWZmZXJzIGluIGEgcXVldWUgOiAyCisgKi8KKworLyoKKyAqIE1lc3NhZ2UgdG8gbm90aWZ5IHRoYXQgY29uZmlnIGNvbW1hbmQgaXMgZG9uZQorICovCisKKyNkZWZpbmUgQVVEUkVDX01TR19DTURfQ0ZHX0RPTkVfTVNHCTB4MDAwMgorI2RlZmluZSBBVURSRUNfTVNHX0NNRF9DRkdfRE9ORV9NU0dfTEVOCVwKKwlzaXplb2YoYXVkcmVjX21zZ19jbWRfY2ZnX2RvbmVfbXNnKQorCisKKyNkZWZpbmUgQVVEUkVDX01TR19DRkdfRE9ORV9UWVBFXzBfRU5BCQkweDQwMDAKKyNkZWZpbmUgQVVEUkVDX01TR19DRkdfRE9ORV9UWVBFXzBfRElTCQkweDAwMDAKKworI2RlZmluZSBBVURSRUNfTVNHX0NGR19ET05FX1RZUEVfMF9OT19VUERBVEUJMHgwMDAwCisjZGVmaW5lIEFVRFJFQ19NU0dfQ0ZHX0RPTkVfVFlQRV8wX1VQREFURQkweDgwMDAKKworI2RlZmluZSBBVURSRUNfTVNHX0NGR19ET05FX1RZUEVfMV9FTkEJCTB4NDAwMAorI2RlZmluZSBBVURSRUNfTVNHX0NGR19ET05FX1RZUEVfMV9ESVMJCTB4MDAwMAorCisjZGVmaW5lIEFVRFJFQ19NU0dfQ0ZHX0RPTkVfVFlQRV8xX05PX1VQREFURQkweDAwMDAKKyNkZWZpbmUgQVVEUkVDX01TR19DRkdfRE9ORV9UWVBFXzFfVVBEQVRFCTB4ODAwMAorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJdHlwZV8wOworCXVuc2lnbmVkIHNob3J0CXR5cGVfMTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSlhdWRyZWNfbXNnX2NtZF9jZmdfZG9uZV9tc2c7CisKKworLyoKKyAqIE1lc3NhZ2UgdG8gbm90aWZ5IGFyZWMwLzEgY2ZnIGRvbmUgYW5kIHJlY29yZGluZyBwYXJhbXMgcmV2ZCBieSB0YXNrCisgKi8KKworI2RlZmluZQlBVURSRUNfTVNHX0NNRF9BUkVDX1BBUkFNX0NGR19ET05FX01TRwkJMHgwMDAzCisjZGVmaW5lCUFVRFJFQ19NU0dfQ01EX0FSRUNfUEFSQU1fQ0ZHX0RPTkVfTVNHX0xFTglcCisJc2l6ZW9mKGF1ZHJlY19tc2dfY21kX2FyZWNfcGFyYW1fY2ZnX2RvbmVfbXNnKQorCisjZGVmaW5lCUFVRFJFQ19NU0dfQVJFQ19QQVJBTV9UWVBFXzAJMHgwMDAwCisjZGVmaW5lCUFVRFJFQ19NU0dfQVJFQ19QQVJBTV9UWVBFXzEJMHgwMDAxCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAl0eXBlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKWF1ZHJlY19tc2dfY21kX2FyZWNfcGFyYW1fY2ZnX2RvbmVfbXNnOworCisKKy8qCisgKiBNZXNzYWdlIHRvIG5vdGlmeSBubyBtb3JlIGJ1ZmZlcnMgYXJlIGF2YWlsYWJsZSBpbiBleHQgbWVtIHRvIERNRQorICovCisKKyNkZWZpbmUgQVVEUkVDX01TR19GQVRBTF9FUlJfTVNHCQkweDAwMDQKKyNkZWZpbmUgQVVEUkVDX01TR19GQVRBTF9FUlJfTVNHX0xFTglcCisJc2l6ZW9mKGF1ZHJlY19tc2dfZmF0YWxfZXJyX21zZykKKworI2RlZmluZSBBVURSRUNfTVNHX0ZBVEFMX0VSUl9UWVBFXzAJMHgwMDAwCisjZGVmaW5lIEFVRFJFQ19NU0dfRkFUQUxfRVJSX1RZUEVfMQkweDAwMDEKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CXR5cGU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpYXVkcmVjX21zZ19mYXRhbF9lcnJfbXNnOworCisvKgorICogTWVzc2FnZSB0byBub3RpZnkgRE1FIGRlbGl2ZXJkIHRoZSBlbmNvZGVkIHBrdCB0byBleHQgcGt0IGJ1ZmZlcgorICovCisKKyNkZWZpbmUgQVVEUkVDX01TR19QQUNLRVRfUkVBRFlfTVNHCQkweDAwMDUKKyNkZWZpbmUgQVVEUkVDX01TR19QQUNLRVRfUkVBRFlfTVNHX0xFTglcCisJc2l6ZW9mKGF1ZHJlY19tc2dfcGFja2V0X3JlYWR5X21zZykKKworI2RlZmluZSBBVURSRUNfTVNHX1BBQ0tFVF9SRUFEWV9UWVBFXzAJMHgwMDAwCisjZGVmaW5lIEFVRFJFQ19NU0dfUEFDS0VUX1JFQURZX1RZUEVfMQkweDAwMDEKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CXR5cGU7CisJdW5zaWduZWQgc2hvcnQJcGt0X2NvdW50ZXJfbXN3OworCXVuc2lnbmVkIHNob3J0CXBrdF9jb3VudGVyX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAlwa3RfcmVhZF9jbnRfbXN3OworCXVuc2lnbmVkIHNob3J0CXBrdF9yZWFkX2NudF9sc3c7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpYXVkcmVjX21zZ19wYWNrZXRfcmVhZHlfbXNnOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVqcGVnY21kaS5oIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNWpwZWdjbWRpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc0YWQ2YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVqcGVnY21kaS5oCkBAIC0wLDAgKzEsMzc2IEBACisjaWZuZGVmIFFEU1A1VklESlBFR0NNRElfSAorI2RlZmluZSBRRFNQNVZJREpQRUdDTURJX0gKKworLyo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSoKKworICAgIEogUCBFIEcgIEkgTiBUIEUgUiBOIEEgTCAgQyBPIE0gTSBBIE4gRCBTCisKK0dFTkVSQUwgREVTQ1JJUFRJT04KKyAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmludGlvbnMgb2YgZm9ybWF0IGJsb2NrcyBvZiBjb21tYW5kcworICB0aGF0IGFyZSBhY2NlcHRlZCBieSBKUEVHIFRhc2sKKworUkVGRVJFTkNFUworICBOb25lCisKK0VYVEVSTkFMSVpFRCBGVU5DVElPTlMKKyAgTm9uZQorCitDb3B5cmlnaHQoYykgMTk5MiAtIDIwMDggYnkgUVVBTENPTU0sIEluY29ycG9yYXRlZC4KKworVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKK21heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgICAgICAgICAgICAgICAgRURJVCBISVNUT1JZIEZPUiBGSUxFCisKK1RoaXMgc2VjdGlvbiBjb250YWlucyBjb21tZW50cyBkZXNjcmliaW5nIGNoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUuCitOb3RpY2UgdGhhdCBjaGFuZ2VzIGFyZSBsaXN0ZWQgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyLgorCiskSGVhZGVyOiAvL3NvdXJjZS9xY29tL3FjdC9tdWx0aW1lZGlhMi9BZHNwU3ZjLzdYWFgvcWRzcDVjbWQvdmlkZW8vcWRzcDVqcGVnY21kaS5oIzIgJCAkRGF0ZVRpbWU6IDIwMDgvMDcvMzAgMTA6NTA6MjMgJCAkQXV0aG9yOiBwYXZhbnIgJAorUmV2aXNpb24gSGlzdG9yeToKK3doZW4gICAgICAgd2hvICAgICB3aGF0LCB3aGVyZSwgd2h5CistLS0tLS0tLSAgIC0tLSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMDYvMDkvMDggICBzdiAgICAgIGluaXRpYWwgdmVyc2lvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyoKKyAqIEFSTSB0byBKUEVHIGNvbmZpZ3VyYXRpb24gY29tbWFuZHMgYXJlIHBhc3NlZCB0aHJvdWdoIHRoZQorICogdVBKcGVnQ2ZnQ21kUXVldWUKKyAqLworCisvKgorICogQ29tbWFuZCB0byBjb25maWd1cmUgSlBFRyBFbmNvZGVyCisgKi8KKworI2RlZmluZQlKUEVHX0NNRF9FTkNfQ0ZHCQkweDAwMDAKKyNkZWZpbmUJSlBFR19DTURfRU5DX0NGR19MRU4Jc2l6ZW9mKGpwZWdfY21kX2VuY19jZmcpCisKKyNkZWZpbmUJSlBFR19DTURfRU5DX1BST0NFU1NfQ0ZHX09QX1JPVEFUSU9OXzAJCTB4MDAwMAorI2RlZmluZQlKUEVHX0NNRF9FTkNfUFJPQ0VTU19DRkdfT1BfUk9UQVRJT05fOTAJCTB4MDEwMAorI2RlZmluZQlKUEVHX0NNRF9FTkNfUFJPQ0VTU19DRkdfT1BfUk9UQVRJT05fMTgwCTB4MDIwMAorI2RlZmluZQlKUEVHX0NNRF9FTkNfUFJPQ0VTU19DRkdfT1BfUk9UQVRJT05fMjcwCTB4MDMwMAorI2RlZmluZQlKUEVHX0NNRF9FTkNfUFJPQ0VTU19DRkdfSVBfREFUQV9GT1JNQVRfTQkweDAwMDMKKyNkZWZpbmUJSlBFR19DTURfRU5DX1BST0NFU1NfQ0ZHX0lQX0RBVEFfRk9STUFUX0gyVjIJMHgwMDAwCisjZGVmaW5lCUpQRUdfQ01EX0VOQ19QUk9DRVNTX0NGR19JUF9EQVRBX0ZPUk1BVF9IMlYxCTB4MDAwMQorI2RlZmluZQlKUEVHX0NNRF9FTkNfUFJPQ0VTU19DRkdfSVBfREFUQV9GT1JNQVRfSDFWMgkweDAwMDIKKworI2RlZmluZQlKUEVHX0NNRF9JUF9TSVpFX0NGR19MVU1BX0hFSUdIVF9NCQkweDAwMDBGRkZGCisjZGVmaW5lCUpQRUdfQ01EX0lQX1NJWkVfQ0ZHX0xVTUFfV0lEVEhfTQkJMHhGRkZGMDAwMAorI2RlZmluZQlKUEVHX0NNRF9FTkNfVVBTQU1QX0lQX1NJWkVfQ0ZHX0VOQQkJMHgwMDAxCisjZGVmaW5lCUpQRUdfQ01EX0VOQ19VUFNBTVBfSVBfU0laRV9DRkdfRElTCQkweDAwMDAKKworI2RlZmluZQlKUEVHX0NNRF9GUkFHX1NJWkVfTFVNQV9IRUlHSFRfTQkJMHhGRkZGCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworCXVuc2lnbmVkIGludAlwcm9jZXNzX2NmZzsKKwl1bnNpZ25lZCBpbnQJaXBfc2l6ZV9jZmc7CisJdW5zaWduZWQgaW50CW9wX3NpemVfY2ZnOworCXVuc2lnbmVkIGludAlmcmFnX2NmZzsKKwl1bnNpZ25lZCBpbnQJZnJhZ19jZmdfcGFydFsxNl07CisKKwl1bnNpZ25lZCBpbnQgICAgcGFydF9udW07CisKKwl1bnNpZ25lZCBpbnQJb3BfYnVmXzBfY2ZnX3BhcnQxOworCXVuc2lnbmVkIGludAlvcF9idWZfMF9jZmdfcGFydDI7CisJdW5zaWduZWQgaW50CW9wX2J1Zl8xX2NmZ19wYXJ0MTsKKwl1bnNpZ25lZCBpbnQJb3BfYnVmXzFfY2ZnX3BhcnQyOworCisJdW5zaWduZWQgaW50CWx1bWFfcXVudF90YWJsZVszMl07CisJdW5zaWduZWQgaW50CWNocm9tYV9xdW50X3RhYmxlWzMyXTsKKworCXVuc2lnbmVkIGludAl1cHNhbXBfaXBfc2l6ZV9jZmc7CisJdW5zaWduZWQgaW50CXVwc2FtcF9pcF9mcmFtZV9vZmY7CisJdW5zaWduZWQgaW50CXVwc2FtcF9wcF9maWx0ZXJfY29lZmZbNjRdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBqcGVnX2NtZF9lbmNfY2ZnOworCisvKgorICogQ29tbWFuZCB0byBjb25maWd1cmUgSlBFRyBEZWNvZGVyCisgKi8KKworI2RlZmluZQlKUEVHX0NNRF9ERUNfQ0ZHCQkweDAwMDEKKyNkZWZpbmUJSlBFR19DTURfREVDX0NGR19MRU4JCXNpemVvZihqcGVnX2NtZF9kZWNfY2ZnKQorCisjZGVmaW5lCUpQRUdfQ01EX0RFQ19PUF9EQVRBX0ZPUk1BVF9NCQkweDAwMDEKKyNkZWZpbmUgSlBFR19DTURfREVDX09QX0RBVEFfRk9STUFUX0gyVjIJMHgwMDAwCisjZGVmaW5lIEpQRUdfQ01EX0RFQ19PUF9EQVRBX0ZPUk1BVF9IMlYxCTB4MDAwMQorCisjZGVmaW5lIEpQRUdfQ01EX0RFQ19PUF9EQVRBX0ZPUk1BVF9TQ0FMRV9GQUNUT1JfOAkweDAwMDAwMAorI2RlZmluZSBKUEVHX0NNRF9ERUNfT1BfREFUQV9GT1JNQVRfU0NBTEVfRkFDVE9SXzQJMHgwMTAwMDAKKyNkZWZpbmUgSlBFR19DTURfREVDX09QX0RBVEFfRk9STUFUX1NDQUxFX0ZBQ1RPUl8yCTB4MDIwMDAwCisjZGVmaW5lIEpQRUdfQ01EX0RFQ19PUF9EQVRBX0ZPUk1BVF9TQ0FMRV9GQUNUT1JfMQkweDAzMDAwMAorCisjZGVmaW5lCUpQRUdfQ01EX0RFQ19JUF9TVFJFQU1fQlVGX0NGR19QQVJUM19OT1RfRklOQUwJMHgwMDAwCisjZGVmaW5lCUpQRUdfQ01EX0RFQ19JUF9TVFJFQU1fQlVGX0NGR19QQVJUM19GSU5BTAkweDAwMDEKKworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJaW1nX2RpbWVuc2lvbl9jZmc7CisJdW5zaWduZWQgaW50CW9wX2RhdGFfZm9ybWF0OworCXVuc2lnbmVkIGludAlyZXN0YXJ0X2ludGVydmFsOworCXVuc2lnbmVkIGludAlpcF9idWZfcGFydGl0aW9uX251bTsKKwl1bnNpZ25lZCBpbnQJaXBfc3RyZWFtX2J1Zl9jZmdfcGFydDE7CisJdW5zaWduZWQgaW50CWlwX3N0cmVhbV9idWZfY2ZnX3BhcnQyOworCXVuc2lnbmVkIGludAlpcF9zdHJlYW1fYnVmX2NmZ19wYXJ0MzsKKwl1bnNpZ25lZCBpbnQJb3Bfc3RyZWFtX2J1Zl8wX2NmZ19wYXJ0MTsKKwl1bnNpZ25lZCBpbnQJb3Bfc3RyZWFtX2J1Zl8wX2NmZ19wYXJ0MjsKKwl1bnNpZ25lZCBpbnQJb3Bfc3RyZWFtX2J1Zl8wX2NmZ19wYXJ0MzsKKwl1bnNpZ25lZCBpbnQJb3Bfc3RyZWFtX2J1Zl8xX2NmZ19wYXJ0MTsKKwl1bnNpZ25lZCBpbnQJb3Bfc3RyZWFtX2J1Zl8xX2NmZ19wYXJ0MjsKKwl1bnNpZ25lZCBpbnQJb3Bfc3RyZWFtX2J1Zl8xX2NmZ19wYXJ0MzsKKwl1bnNpZ25lZCBpbnQJbHVtYV9xdW50X3RhYmxlXzBfMzsKKwl1bnNpZ25lZCBpbnQJbHVtYV9xdW50X3RhYmxlXzRfNzsKKwl1bnNpZ25lZCBpbnQJbHVtYV9xdW50X3RhYmxlXzhfMTE7CisJdW5zaWduZWQgaW50CWx1bWFfcXVudF90YWJsZV8xMl8xNTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9xdW50X3RhYmxlXzE2XzE5OworCXVuc2lnbmVkIGludAlsdW1hX3F1bnRfdGFibGVfMjBfMjM7CisJdW5zaWduZWQgaW50CWx1bWFfcXVudF90YWJsZV8yNF8yNzsKKwl1bnNpZ25lZCBpbnQJbHVtYV9xdW50X3RhYmxlXzI4XzMxOworCXVuc2lnbmVkIGludAlsdW1hX3F1bnRfdGFibGVfMzJfMzU7CisJdW5zaWduZWQgaW50CWx1bWFfcXVudF90YWJsZV8zNl8zOTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9xdW50X3RhYmxlXzQwXzQzOworCXVuc2lnbmVkIGludAlsdW1hX3F1bnRfdGFibGVfNDRfNDc7CisJdW5zaWduZWQgaW50CWx1bWFfcXVudF90YWJsZV80OF81MTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9xdW50X3RhYmxlXzUyXzU1OworCXVuc2lnbmVkIGludAlsdW1hX3F1bnRfdGFibGVfNTZfNTk7CisJdW5zaWduZWQgaW50CWx1bWFfcXVudF90YWJsZV82MF82MzsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX3F1bnRfdGFibGVfMF8zOworCXVuc2lnbmVkIGludAljaHJvbWFfcXVudF90YWJsZV80Xzc7CisJdW5zaWduZWQgaW50CWNocm9tYV9xdW50X3RhYmxlXzhfMTE7CisJdW5zaWduZWQgaW50CWNocm9tYV9xdW50X3RhYmxlXzEyXzE1OworCXVuc2lnbmVkIGludAljaHJvbWFfcXVudF90YWJsZV8xNl8xOTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX3F1bnRfdGFibGVfMjBfMjM7CisJdW5zaWduZWQgaW50CWNocm9tYV9xdW50X3RhYmxlXzI0XzI3OworCXVuc2lnbmVkIGludAljaHJvbWFfcXVudF90YWJsZV8yOF8zMTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX3F1bnRfdGFibGVfMzJfMzU7CisJdW5zaWduZWQgaW50CWNocm9tYV9xdW50X3RhYmxlXzM2XzM5OworCXVuc2lnbmVkIGludAljaHJvbWFfcXVudF90YWJsZV80MF80MzsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX3F1bnRfdGFibGVfNDRfNDc7CisJdW5zaWduZWQgaW50CWNocm9tYV9xdW50X3RhYmxlXzQ4XzUxOworCXVuc2lnbmVkIGludAljaHJvbWFfcXVudF90YWJsZV81Ml81NTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX3F1bnRfdGFibGVfNTZfNTk7CisJdW5zaWduZWQgaW50CWNocm9tYV9xdW50X3RhYmxlXzYwXzYzOworCXVuc2lnbmVkIGludAlsdW1hX2RjX2htX2NvZGVfY250X3RhYmxlXzBfMzsKKwl1bnNpZ25lZCBpbnQJbHVtYV9kY19obV9jb2RlX2NudF90YWJsZV80Xzc7CisJdW5zaWduZWQgaW50CWx1bWFfZGNfaG1fY29kZV9jbnRfdGFibGVfOF8xMTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9kY19obV9jb2RlX2NudF90YWJsZV8xMl8xNTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9kY19obV9jb2RlX3ZhbF90YWJsZV8wXzM7CisJdW5zaWduZWQgaW50CWx1bWFfZGNfaG1fY29kZV92YWxfdGFibGVfNF83OworCXVuc2lnbmVkIGludAlsdW1hX2RjX2htX2NvZGVfdmFsX3RhYmxlXzhfMTE7CisJdW5zaWduZWQgaW50CWNocm9tYV9kY19obV9jb2RlX2NudF90YWJsZV8wXzM7CisJdW5zaWduZWQgaW50CWNocm9tYV9kY19obV9jb2RlX2NudF90YWJsZV80Xzc7CisJdW5zaWduZWQgaW50CWNocm9tYV9kY19obV9jb2RlX2NudF90YWJsZV84XzExOworCXVuc2lnbmVkIGludAljaHJvbWFfZGNfaG1fY29kZV9jbnRfdGFibGVfMTJfMTU7CisJdW5zaWduZWQgaW50CWNocm9tYV9kY19obV9jb2RlX3ZhbF90YWJsZV8wXzM7CisJdW5zaWduZWQgaW50CWNocm9tYV9kY19obV9jb2RlX3ZhbF90YWJsZV80Xzc7CisJdW5zaWduZWQgaW50CWNocm9tYV9kY19obV9jb2RlX3ZhbF90YWJsZV84XzExOworCXVuc2lnbmVkIGludAlsdW1hX2FjX2htX2NvZGVfY250X3RhYmxlXzBfMzsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX2NudF90YWJsZV80Xzc7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV9jbnRfdGFibGVfOF8xMTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX2NudF90YWJsZV8xMl8xNTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV8wXzM7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfNF83OworCXVuc2lnbmVkIGludAlsdW1hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzhfMTE7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTJfMTU7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTZfMTk7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfMjBfMjM7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfMjRfMjc7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfMjhfMzE7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfMzJfMzU7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfMzZfMzk7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfNDBfNDM7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfNDRfNDc7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfNDhfNTE7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfNTJfNTU7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfNTZfNTk7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfNjBfNjM7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfNjRfNjc7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfNjhfNzE7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfNzJfNzU7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfNzZfNzk7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfODBfODM7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfODRfODc7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfODhfOTE7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfOTJfOTU7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfOTZfOTk7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTAwXzEwMzsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV8xMDRfMTA3OworCXVuc2lnbmVkIGludAlsdW1hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzEwOF8xMTE7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTEyXzExNTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV8xMTZfMTE5OworCXVuc2lnbmVkIGludAlsdW1hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzEyMF8xMjM7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTI0XzEyNzsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV8xMjhfMTMxOworCXVuc2lnbmVkIGludAlsdW1hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzEzMl8xMzU7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTM2XzEzOTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV8xNDBfMTQzOworCXVuc2lnbmVkIGludAlsdW1hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzE0NF8xNDc7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTQ4XzE1MTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV8xNTJfMTU1OworCXVuc2lnbmVkIGludAlsdW1hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzE1Nl8xNTk7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTYwXzE2MTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfY250X3RhYmxlXzBfMzsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfY250X3RhYmxlXzRfNzsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfY250X3RhYmxlXzhfMTE7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX2NudF90YWJsZV8xMl8xNTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzBfMzsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzRfNzsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzhfMTE7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV8xMl8xNTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzE2XzE5OworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfMjBfMjM7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV8yNF8yNzsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzI4XzMxOworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfMzJfMzU7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV8zNl8zOTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzQwXzQzOworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfNDRfNDc7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV80OF81MTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzUyXzU1OworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfNTZfNTk7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV82MF82MzsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzY0XzY3OworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfNjhfNzE7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV83Ml83NTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzc2Xzc5OworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfODBfODM7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV84NF84NzsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzg4XzkxOworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfOTJfOTU7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV85Nl85OTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzEwMF8xMDM7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV8xMDRfMTA3OworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTA4XzExMTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzExMl8xMTU7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV8xMTZfMTE5OworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTIwXzEyMzsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzEyNF8xMjc7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV8xMjhfMTMxOworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTMyXzEzNTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzEzNl8xMzk7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV8xNDBfMTQzOworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTQ0XzE0NzsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzE0OF8xNTE7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV8xNTJfMTU1OworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTU2XzE1OTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzE2MF8xNjE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGpwZWdfY21kX2RlY19jZmc7CisKKworLyoKKyAqIEFSTSB0byBKUEVHIGNvbmZpZ3VyYXRpb24gY29tbWFuZHMgYXJlIHBhc3NlZCB0aHJvdWdoIHRoZQorICogdVBKcGVnQWN0aW9uQ21kUXVldWUKKyAqLworCisvKgorICogQ29tbWFuZCB0byBzdGFydCB0aGUgZW5jb2RlIHByb2Nlc3MKKyAqLworCisjZGVmaW5lCUpQRUdfQ01EX0VOQ19FTkNPREUJCTB4MDAwMAorI2RlZmluZQlKUEVHX0NNRF9FTkNfRU5DT0RFX0xFTgkJc2l6ZW9mKGpwZWdfY21kX2VuY19lbmNvZGUpCisKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CWNtZF9pZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkganBlZ19jbWRfZW5jX2VuY29kZTsKKworCisvKgorICogQ29tbWFuZCB0byB0cmFuc2l0aW9uIGZyb20gY3VycmVudCBzdGF0ZSBvZiBlbmNvZGVyIHRvIElETEUgc3RhdGUKKyAqLworCisjZGVmaW5lCUpQRUdfQ01EX0VOQ19JRExFCQkweDAwMDEKKyNkZWZpbmUJSlBFR19DTURfRU5DX0lETEVfTEVOCQlzaXplb2YoanBlZ19jbWRfZW5jX2lkbGUpCisKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CWNtZF9pZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkganBlZ19jbWRfZW5jX2lkbGU7CisKKworLyoKKyAqIENvbW1hbmQgdG8gaW5mb3JtIHRoZSBlbmNvZGVyIHRoYXQgYW5vdGhlciBidWZmZXIgaXMgcmVhZHkKKyAqLworCisjZGVmaW5lCUpQRUdfQ01EX0VOQ19PUF9DT05TVU1FRAkweDAwMDIKKyNkZWZpbmUJSlBFR19DTURfRU5DX09QX0NPTlNVTUVEX0xFTglzaXplb2YoanBlZ19jbWRfZW5jX29wX2NvbnN1bWVkKQorCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworCXVuc2lnbmVkIGludAlvcF9idWZfYWRkcjsKKwl1bnNpZ25lZCBpbnQJb3BfYnVmX3NpemU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGpwZWdfY21kX2VuY19vcF9jb25zdW1lZDsKKworCisvKgorICogQ29tbWFuZCB0byBzdGFydCB0aGUgZGVjb2RpbmcgcHJvY2VzcworICovCisKKyNkZWZpbmUJSlBFR19DTURfREVDX0RFQ09ERQkJMHgwMDAzCisjZGVmaW5lCUpQRUdfQ01EX0RFQ19ERUNPREVfTEVOCXNpemVvZihqcGVnX2NtZF9kZWNfZGVjb2RlKQorCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAljbWRfaWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGpwZWdfY21kX2RlY19kZWNvZGU7CisKKworLyoKKyAqIENvbW1hbmQgdG8gdHJhbnNpdGlvbiBmcm9tIHRoZSBjdXJyZW50IHN0YXRlIG9mIGRlY29kZXIgdG8gSURMRQorICovCisKKyNkZWZpbmUJSlBFR19DTURfREVDX0lETEUJMHgwMDA0CisjZGVmaW5lCUpQRUdfQ01EX0RFQ19JRExFX0xFTglzaXplb2YoanBlZ19jbWRfZGVjX2lkbGUpCisKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CWNtZF9pZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkganBlZ19jbWRfZGVjX2lkbGU7CisKKworLyoKKyAqIENvbW1hbmQgdG8gaW5mb3JtIHRoYXQgYW4gb3AgYnVmZmVyIGlzIHJlYWR5IGZvciB1c2UKKyAqLworCisjZGVmaW5lCUpQRUdfQ01EX0RFQ19PUF9DT05TVU1FRAkweDAwMDUKKyNkZWZpbmUJSlBFR19DTURfREVDX09QX0NPTlNVTUVEX0xFTglzaXplb2YoanBlZ19jbWRfZGVjX29wX2NvbnN1bWVkKQorCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworCXVuc2lnbmVkIGludAlsdW1hX29wX2J1Zl9hZGRyOworCXVuc2lnbmVkIGludAlsdW1hX29wX2J1Zl9zaXplOworCXVuc2lnbmVkIGludAljaHJvbWFfb3BfYnVmX2FkZHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGpwZWdfY21kX2RlY19vcF9jb25zdW1lZDsKKworCisvKgorICogQ29tbWFuZCB0byBwYXNzIGEgbmV3IGlwIGJ1ZmZlciB0byB0aGUganBlZyBkZWNvZGVyCisgKi8KKworI2RlZmluZQlKUEVHX0NNRF9ERUNfSVAJMHgwMDA2CisjZGVmaW5lCUpQRUdfQ01EX0RFQ19JUF9MRU4Jc2l6ZW9mKGpwZWdfY21kX2RlY19pcF9sZW4pCisKKyNkZWZpbmUJSlBFR19DTURfRU9JX0lORElDQVRPUl9OT1RfRU5ECTB4MDAwMAorI2RlZmluZQlKUEVHX0NNRF9FT0lfSU5ESUNBVE9SX0VORAkweDAwMDEKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CWlwX2J1Zl9hZGRyOworCXVuc2lnbmVkIGludAlpcF9idWZfc2l6ZTsKKwl1bnNpZ25lZCBpbnQJZW9pX2luZGljYXRvcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkganBlZ19jbWRfZGVjX2lwOworCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1anBlZ21zZy5oIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNWpwZWdtc2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTFhYTNmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNWpwZWdtc2cuaApAQCAtMCwwICsxLDE3NyBAQAorI2lmbmRlZiBRRFNQNVZJREpQRUdNU0dJX0gKKyNkZWZpbmUgUURTUDVWSURKUEVHTVNHSV9ICisKKy8qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qCisKKyAgIEogUCBFIEcgIEkgTiBUIEUgUiBOIEEgTCAgTSBFIFMgUyBBIEcgRSBTCisKK0dFTkVSQUwgREVTQ1JJUFRJT04KKyAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmludGlvbnMgb2YgZm9ybWF0IGJsb2NrcyBvZiBtZXNzYWdlcworICB0aGF0IGFyZSBzZW50IGJ5IEpQRUcgVGFzaworCitSRUZFUkVOQ0VTCisgIE5vbmUKKworRVhURVJOQUxJWkVEIEZVTkNUSU9OUworICBOb25lCisKK0NvcHlyaWdodChjKSAxOTkyIC0gMjAwOCBieSBRVUFMQ09NTSwgSW5jb3Jwb3JhdGVkLgorCitUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworKj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Ki8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgICAgICAgICAgICAgICBFRElUIEhJU1RPUlkgRk9SIEZJTEUKKworVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGNvbW1lbnRzIGRlc2NyaWJpbmcgY2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZS4KK05vdGljZSB0aGF0IGNoYW5nZXMgYXJlIGxpc3RlZCBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIuCisKKyRIZWFkZXI6IC8vc291cmNlL3Fjb20vcWN0L211bHRpbWVkaWEyL0Fkc3BTdmMvN1hYWC9xZHNwNWNtZC92aWRlby9xZHNwNWpwZWdtc2cuaCMyICQgJERhdGVUaW1lOiAyMDA4LzA3LzMwIDEwOjUwOjIzICQgJEF1dGhvcjogcGF2YW5yICQKK1JldmlzaW9uIEhpc3Rvcnk6CisKK3doZW4gICAgICAgd2hvICAgICB3aGF0LCB3aGVyZSwgd2h5CistLS0tLS0tLSAgIC0tLSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMDUvMTAvMDggICBzdiAgICAgIGluaXRpYWwgdmVyc2lvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyoKKyAqIE1lc3NhZ2VzIGZyb20gSlBFRyB0YXNrIHRvIEFSTSB0aHJvdWdoIGpwZWd1UE1zZ1F1ZXVlCisgKi8KKworLyoKKyAqIE1lc3NhZ2UgaXMgQUNLIGZvciBDTURfSlBFR0VfRU5DT0RFIGNtZAorICovCisKKyNkZWZpbmUJSlBFR19NU0dfRU5DX0VOQ09ERV9BQ0sJMHgwMDAwCisjZGVmaW5lCUpQRUdfTVNHX0VOQ19FTkNPREVfQUNLX0xFTglcCisJc2l6ZW9mKGpwZWdfbXNnX2VuY19lbmNvZGVfYWNrKQorCit0eXBlZGVmIHN0cnVjdCB7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGpwZWdfbXNnX2VuY19lbmNvZGVfYWNrOworCisKKy8qCisgKiBNZXNzYWdlIGluZm9ybXMgdGhlIHVwIHdoZW4gb3AgYnVmZmVyIGlzIHJlYWR5IGZvciBjb25zdW1wdGlvbiBhbmQKKyAqIHdoZW4gZW5jb2RpbmcgaXMgY29tcGxldGUgb3IgZXJyb3JzCisgKi8KKworI2RlZmluZQlKUEVHX01TR19FTkNfT1BfUFJPRFVDRUQJMHgwMDAxCisjZGVmaW5lCUpQRUdfTVNHX0VOQ19PUF9QUk9EVUNFRF9MRU4JXAorCXNpemVvZihqcGVnX21zZ19lbmNfb3BfcHJvZHVjZWQpCisKKyNkZWZpbmUJSlBFR19NU0dPUF9PUF9CVUZfU1RBVFVTX0VOQ19ET05FX1BST0dSRVNTCTB4MDAwMAorI2RlZmluZQlKUEVHX01TR09QX09QX0JVRl9TVEFUVVNfRU5DX0RPTkVfQ09NUExFVEUJMHgwMDAxCisjZGVmaW5lCUpQRUdfTVNHT1BfT1BfQlVGX1NUQVRVU19FTkNfRVJSCQkweDEwMDAwCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJb3BfYnVmX2FkZHI7CisJdW5zaWduZWQgaW50CW9wX2J1Zl9zaXplOworCXVuc2lnbmVkIGludAlvcF9idWZfc3RhdHVzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBqcGVnX21zZ19lbmNfb3BfcHJvZHVjZWQ7CisKKworLyoKKyAqIE1lc3NhZ2UgdG8gYWNrIENNRF9KUEVHRV9JRExFCisgKi8KKworI2RlZmluZQlKUEVHX01TR19FTkNfSURMRV9BQ0sJMHgwMDAyCisjZGVmaW5lCUpQRUdfTVNHX0VOQ19JRExFX0FDS19MRU4Jc2l6ZW9mKGpwZWdfbXNnX2VuY19pZGxlX2FjaykKKworCit0eXBlZGVmIHN0cnVjdCB7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBqcGVnX21zZ19lbmNfaWRsZV9hY2s7CisKKworLyoKKyAqIE1lc3NhZ2UgdG8gaW5kaWNhdGUgdGhlIGlsbGVnYWwgY29tbWFuZAorICovCisKKyNkZWZpbmUJSlBFR19NU0dfRU5DX0lMTEVHQUxfQ09NTUFORAkweDAwMDMKKyNkZWZpbmUJSlBFR19NU0dfRU5DX0lMTEVHQUxfQ09NTUFORF9MRU4JXAorCXNpemVvZihqcGVnX21zZ19lbmNfaWxsZWdhbF9jb21tYW5kKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CXN0YXR1czsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkganBlZ19tc2dfZW5jX2lsbGVnYWxfY29tbWFuZDsKKworCisvKgorICogTWVzc2FnZSB0byBBQ0sgQ01EX0pQRUdEX0RFQ09ERQorICovCisKKyNkZWZpbmUJSlBFR19NU0dfREVDX0RFQ09ERV9BQ0sJCTB4MDAwNAorI2RlZmluZQlKUEVHX01TR19ERUNfREVDT0RFX0FDS19MRU4JXAorCXNpemVvZihqcGVnX21zZ19kZWNfZGVjb2RlX2FjaykKKworCit0eXBlZGVmIHN0cnVjdCB7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGpwZWdfbXNnX2RlY19kZWNvZGVfYWNrOworCisKKy8qCisgKiBNZXNzYWdlIHRvIGluZm9ybSB1cCB0aGF0IGFuIG9wIGJ1ZmZlciBpcyByZWFkeSBmb3IgY29uc3VtcHRpb24gYW5kIHdoZW4KKyAqIGRlY29kaW5nIGlzIGNvbXBsZXRlIG9yIGFuIGVycm9yIG9jY3VycworICovCisKKyNkZWZpbmUJSlBFR19NU0dfREVDX09QX1BST0RVQ0VECQkweDAwMDUKKyNkZWZpbmUJSlBFR19NU0dfREVDX09QX1BST0RVQ0VEX0xFTglcCisJc2l6ZW9mKGpwZWdfbXNnX2RlY19vcF9wcm9kdWNlZCkKKworI2RlZmluZQlKUEVHX01TR19ERUNfT1BfQlVGX1NUQVRVU19QUk9HUkVTUwkweDAwMDAKKyNkZWZpbmUJSlBFR19NU0dfREVDX09QX0JVRl9TVEFUVVNfRE9ORQkJMHgwMDAxCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJbHVtYV9vcF9idWZfYWRkcjsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX29wX2J1Zl9hZGRyOworCXVuc2lnbmVkIGludAludW1fbWN1czsKKwl1bnNpZ25lZCBpbnQJb3BfYnVmX3N0YXR1czsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkganBlZ19tc2dfZGVjX29wX3Byb2R1Y2VkOworCisvKgorICogTWVzc2FnZSB0byBhY2sgQ01EX0pQRUdEX0lETEUgY21kCisgKi8KKworI2RlZmluZQlKUEVHX01TR19ERUNfSURMRV9BQ0sJMHgwMDA2CisjZGVmaW5lCUpQRUdfTVNHX0RFQ19JRExFX0FDS19MRU4Jc2l6ZW9mKGpwZWdfbXNnX2RlY19pZGxlX2FjaykKKworCit0eXBlZGVmIHN0cnVjdCB7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGpwZWdfbXNnX2RlY19pZGxlX2FjazsKKworCisvKgorICogTWVzc2FnZSB0byBpbmRpY2F0ZSBpbGxlZ2FsIGNtZCB3YXMgcmVjZWl2ZWQKKyAqLworCisjZGVmaW5lCUpQRUdfTVNHX0RFQ19JTExFR0FMX0NPTU1BTkQJMHgwMDA3CisjZGVmaW5lCUpQRUdfTVNHX0RFQ19JTExFR0FMX0NPTU1BTkRfTEVOCVwKKwlzaXplb2YoanBlZ19tc2dfZGVjX2lsbGVnYWxfY29tbWFuZCkKKworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CXN0YXR1czsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkganBlZ19tc2dfZGVjX2lsbGVnYWxfY29tbWFuZDsKKworLyoKKyAqIE1lc3NhZ2UgdG8gcmVxdWVzdCB1cCBmb3IgdGhlIG5leHQgc2VnbWVudCBvZiBpcCBiaXQgc3RyZWFtCisgKi8KKworI2RlZmluZQlKUEVHX01TR19ERUNfSVBfUkVRVUVTVAkJMHgwMDA4CisjZGVmaW5lCUpQRUdfTVNHX0RFQ19JUF9SRVFVRVNUX0xFTglcCisJc2l6ZW9mKGpwZWdfbXNnX2RlY19pcF9yZXF1ZXN0KQorCisKK3R5cGVkZWYgc3RydWN0IHsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkganBlZ19tc2dfZGVjX2lwX3JlcXVlc3Q7CisKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVscG1jbWRpLmggYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1bHBtY21kaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNzZlMmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1bHBtY21kaS5oCkBAIC0wLDAgKzEsODIgQEAKKyNpZm5kZWYgUURTUDVMUE1DTURJX0gKKyNkZWZpbmUgUURTUDVMUE1DTURJX0gKKworLyo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSoKKworICAgIEwgUCBNICAgSSBOIFQgRSBSIE4gQSBMICAgQyBPIE0gTSBBIE4gRCBTCisKK0dFTkVSQUwgREVTQ1JJUFRJT04KKyAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmludGlvbnMgb2YgZm9ybWF0IGJsb2NrcyBvZiBjb21tYW5kcworICB0aGF0IGFyZSBhY2NlcHRlZCBieSBMUE0gVGFzaworCitSRUZFUkVOQ0VTCisgIE5vbmUKKworRVhURVJOQUxJWkVEIEZVTkNUSU9OUworICBOb25lCisKK0NvcHlyaWdodChjKSAxOTkyIC0gMjAwOCBieSBRVUFMQ09NTSwgSW5jb3Jwb3JhdGVkLgorCitUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworKj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Ki8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgICAgICAgICAgICAgICBFRElUIEhJU1RPUlkgRk9SIEZJTEUKKworVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGNvbW1lbnRzIGRlc2NyaWJpbmcgY2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZS4KK05vdGljZSB0aGF0IGNoYW5nZXMgYXJlIGxpc3RlZCBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIuCisKKworJEhlYWRlcjogLy9zb3VyY2UvcWNvbS9xY3QvbXVsdGltZWRpYTIvQWRzcFN2Yy83WFhYL3Fkc3A1Y21kL3ZpZGVvL3Fkc3A1bHBtY21kaS5oIzIgJCAkRGF0ZVRpbWU6IDIwMDgvMDcvMzAgMTA6NTA6MjMgJCAkQXV0aG9yOiBwYXZhbnIgJAorUmV2aXNpb24gSGlzdG9yeToKKword2hlbiAgICAgICB3aG8gICAgIHdoYXQsIHdoZXJlLCB3aHkKKy0tLS0tLS0tICAgLS0tICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiswNi8xMi8wOCAgIHN2ICAgICAgaW5pdGlhbCB2ZXJzaW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisKKy8qCisgKiBDb21tYW5kIHRvIHN0YXJ0IExQTSBwcm9jZXNzaW5nIGJhc2VkIG9uIHRoZSBjb25maWcgcGFyYW1zCisgKi8KKworI2RlZmluZQlMUE1fQ01EX1NUQVJUCQkweDAwMDAKKyNkZWZpbmUJTFBNX0NNRF9TVEFSVF9MRU4Jc2l6ZW9mKGxwbV9jbWRfc3RhcnQpCisKKyNkZWZpbmUJTFBNX0NNRF9TUEFUSUFMX0ZJTFRFUl9QQVJUX09QTU9ERV8wCTB4MDAwMDAwMDAKKyNkZWZpbmUJTFBNX0NNRF9TUEFUSUFMX0ZJTFRFUl9QQVJUX09QTU9ERV8xCTB4MDAwMTAwMDAKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworCXVuc2lnbmVkIGludAlpcF9kYXRhX2NmZ19wYXJ0MTsKKwl1bnNpZ25lZCBpbnQJaXBfZGF0YV9jZmdfcGFydDI7CisJdW5zaWduZWQgaW50CWlwX2RhdGFfY2ZnX3BhcnQzOworCXVuc2lnbmVkIGludAlpcF9kYXRhX2NmZ19wYXJ0NDsKKwl1bnNpZ25lZCBpbnQJb3BfZGF0YV9jZmdfcGFydDE7CisJdW5zaWduZWQgaW50CW9wX2RhdGFfY2ZnX3BhcnQyOworCXVuc2lnbmVkIGludAlvcF9kYXRhX2NmZ19wYXJ0MzsKKwl1bnNpZ25lZCBpbnQJc3BhdGlhbF9maWx0ZXJfcGFydFszMl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGxwbV9jbWRfc3RhcnQ7CisKKworCisvKgorICogQ29tbWFuZCB0byBzdG9wIExQTSBwcm9jZXNzaW5nCisgKi8KKworI2RlZmluZQlMUE1fQ01EX0lETEUJCTB4MDAwMQorI2RlZmluZQlMUE1fQ01EX0lETEVfTEVOCXNpemVvZihscG1fY21kX2lkbGUpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBscG1fY21kX2lkbGU7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1bHBtbXNnLmggYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1bHBtbXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QxMDM5ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVscG1tc2cuaApAQCAtMCwwICsxLDgwIEBACisjaWZuZGVmIFFEU1A1TFBNTVNHSV9ICisjZGVmaW5lIFFEU1A1TFBNTVNHSV9ICisKKy8qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qCisKKyAgICBMIFAgTSAgIEkgTiBUIEUgUiBOIEEgTCAgIE0gRSBTIFMgQSBHIEUgUworCitHRU5FUkFMIERFU0NSSVBUSU9OCisgIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbnRpb25zIG9mIGZvcm1hdCBibG9ja3Mgb2YgY29tbWFuZHMKKyAgdGhhdCBhcmUgYWNjZXB0ZWQgYnkgTFBNIFRhc2sKKworUkVGRVJFTkNFUworICBOb25lCisKK0VYVEVSTkFMSVpFRCBGVU5DVElPTlMKKyAgTm9uZQorCitDb3B5cmlnaHQoYykgMTk5MiAtIDIwMDggYnkgUVVBTENPTU0sIEluY29ycG9yYXRlZC4KKworVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKK21heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgICAgICAgICAgICAgICAgRURJVCBISVNUT1JZIEZPUiBGSUxFCisKK1RoaXMgc2VjdGlvbiBjb250YWlucyBjb21tZW50cyBkZXNjcmliaW5nIGNoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUuCitOb3RpY2UgdGhhdCBjaGFuZ2VzIGFyZSBsaXN0ZWQgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyLgorCiskSGVhZGVyOiAvL3NvdXJjZS9xY29tL3FjdC9tdWx0aW1lZGlhMi9BZHNwU3ZjLzdYWFgvcWRzcDVjbWQvdmlkZW8vcWRzcDVscG1tc2cuaCMyICQgJERhdGVUaW1lOiAyMDA4LzA3LzMwIDEwOjUwOjIzICQgJEF1dGhvcjogcGF2YW5yICQKK1JldmlzaW9uIEhpc3Rvcnk6CisKK3doZW4gICAgICAgd2hvICAgICB3aGF0LCB3aGVyZSwgd2h5CistLS0tLS0tLSAgIC0tLSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMDYvMTIvMDggICBzdiAgICAgIGluaXRpYWwgdmVyc2lvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyoKKyAqIE1lc3NhZ2UgdG8gYWNrbm93bGVkZ2UgQ01EX0xQTV9JRExFIGNvbW1hbmQKKyAqLworCisjZGVmaW5lCUxQTV9NU0dfSURMRV9BQ0sJMHgwMDAwCisjZGVmaW5lCUxQTV9NU0dfSURMRV9BQ0tfTEVOCXNpemVvZihscG1fbXNnX2lkbGVfYWNrKQorCit0eXBlZGVmIHN0cnVjdCB7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGxwbV9tc2dfaWRsZV9hY2s7CisKKworLyoKKyAqIE1lc3NhZ2UgdG8gYWNrbm93bGVkZ2UgQ01EX0xQTV9TVEFSVCBjb21tYW5kCisgKi8KKworCisjZGVmaW5lCUxQTV9NU0dfU1RBUlRfQUNLCTB4MDAwMQorI2RlZmluZQlMUE1fTVNHX1NUQVJUX0FDS19MRU4Jc2l6ZW9mKGxwbV9tc2dfc3RhcnRfYWNrKQorCisKK3R5cGVkZWYgc3RydWN0IHsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbHBtX21zZ19zdGFydF9hY2s7CisKKworLyoKKyAqIE1lc3NhZ2UgdG8gbm90aWZ5IHRoZSBBUk0gdGhhdCBMUE0gcHJvY2Vzc2luZyBpcyBjb21wbGV0ZQorICovCisKKyNkZWZpbmUJTFBNX01TR19ET05FCQkweDAwMDIKKyNkZWZpbmUJTFBNX01TR19ET05FX0xFTglzaXplb2YobHBtX21zZ19kb25lKQorCit0eXBlZGVmIHN0cnVjdCB7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGxwbV9tc2dfZG9uZTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDV2ZGVjY21kaS5oIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNXZkZWNjbWRpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EzMmVlOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDV2ZGVjY21kaS5oCkBAIC0wLDAgKzEsMjM1IEBACisjaWZuZGVmIFFEU1A1VklEREVDQ01ESV9ICisjZGVmaW5lIFFEU1A1VklEREVDQ01ESV9ICisKKy8qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qCisKKyAgICBWIEkgRCBFIE8gIEQgRSBDIE8gRCBFIFIgIEkgTiBUIEUgUiBOIEEgTCAgQyBPIE0gTSBBIE4gRCBTCisKK0dFTkVSQUwgREVTQ1JJUFRJT04KKyAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmludGlvbnMgb2YgZm9ybWF0IGJsb2NrcyBvZiBjb21tYW5kcworICB0aGF0IGFyZSBhY2NlcHRlZCBieSBWSURERUMgVGFzaworCitSRUZFUkVOQ0VTCisgIE5vbmUKKworRVhURVJOQUxJWkVEIEZVTkNUSU9OUworICBOb25lCisKK0NvcHlyaWdodChjKSAxOTkyIC0gMjAwOCBieSBRVUFMQ09NTSwgSW5jb3Jwb3JhdGVkLgorCitUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworKj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Ki8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgICAgICAgICAgICAgICBFRElUIEhJU1RPUlkgRk9SIEZJTEUKKworVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGNvbW1lbnRzIGRlc2NyaWJpbmcgY2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZS4KK05vdGljZSB0aGF0IGNoYW5nZXMgYXJlIGxpc3RlZCBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIuCisKKyRIZWFkZXI6IC8vc291cmNlL3Fjb20vcWN0L211bHRpbWVkaWEyL0Fkc3BTdmMvN1hYWC9xZHNwNWNtZC92aWRlby9xZHNwNXZkZWNjbWRpLmgjMiAkICREYXRlVGltZTogMjAwOC8wNy8zMCAxMDo1MDoyMyAkICRBdXRob3I6IHBhdmFuciAkCitSZXZpc2lvbiBIaXN0b3J5OgorCit3aGVuICAgICAgIHdobyAgICAgd2hhdCwgd2hlcmUsIHdoeQorLS0tLS0tLS0gICAtLS0gICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzA1LzEwLzA4ICAgYWMgICAgICBpbml0aWFsIHZlcnNpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKworLyoKKyAqIENvbW1hbmQgdG8gaW5mb3JtIFZJRERFQyB0aGF0IG5ldyBzdWJmcmFtZSBwYWNrZXQgaXMgcmVhZHkKKyAqLworCisjZGVmaW5lCVZJRERFQ19DTURfU1VCRlJBTUVfUEtUCQkweDAwMDAKKyNkZWZpbmUJVklEREVDX0NNRF9TVUJGUkFNRV9QS1RfTEVOIFwKKwlzaXplb2YodmlkZGVjX2NtZF9zdWJmcmFtZV9wa3QpCisKKyNkZWZpbmUJVklEREVDX0NNRF9TRl9JTkZPXzFfRE1fRE1BX1NUQVRTX0VYQ0hBTkdFX0ZMQUdfRE0JCTB4MDAwMAorI2RlZmluZQlWSURERUNfQ01EX1NGX0lORk9fMV9ETV9ETUFfU1RBVFNfRVhDSEFOR0VfRkxBR19ETUEgCTB4MDAwMQorCisjZGVmaW5lCVZJRERFQ19DTURfU0ZfSU5GT18wX1NVQkZSQU1FX0NPTlRJCQkweDAwMDAKKyNkZWZpbmUJVklEREVDX0NNRF9TRl9JTkZPXzBfU1VCRlJBTUVfRklSU1QJCTB4MDAwMQorI2RlZmluZQlWSURERUNfQ01EX1NGX0lORk9fMF9TVUJGUkFNRV9MQVNUCQkweDAwMDIKKyNkZWZpbmUJVklEREVDX0NNRF9TRl9JTkZPXzBfU1VCRlJBTUVfRklSU1RfQU5EX0xBU1QgCTB4MDAwMworCisjZGVmaW5lCVZJRERFQ19DTURfQ09ERUNfU0VMRUNUSU9OX1dPUkRfTVBFR180CQkweDAwMDAKKyNkZWZpbmUJVklEREVDX0NNRF9DT0RFQ19TRUxFQ1RJT05fV09SRF9IXzI2M19QMAkweDAwMDEKKyNkZWZpbmUJVklEREVDX0NNRF9DT0RFQ19TRUxFQ1RJT05fV09SRF9IXzI2NAkJMHgwMDAyCisjZGVmaW5lCVZJRERFQ19DTURfQ09ERUNfU0VMRUNUSU9OX1dPUkRfSF8yNjNfcDMJMHgwMDAzCisjZGVmaW5lCVZJRERFQ19DTURfQ09ERUNfU0VMRUNUSU9OX1dPUkRfUlY5CQkweDAwMDQKKyNkZWZpbmUJVklEREVDX0NNRF9DT0RFQ19TRUxFQ1RJT05fV09SRF9XTVY5CQkweDAwMDUKKyNkZWZpbmUJVklEREVDX0NNRF9DT0RFQ19TRUxFQ1RJT05fV09SRF9TTUNEQgkJMHgwMDA2CisjZGVmaW5lCVZJRERFQ19DTURfQ09ERUNfU0VMRUNUSU9OX1dPUkRfUUZSRQkJMHgwMDA3CisjZGVmaW5lCVZJRERFQ19DTURfQ09ERUNfU0VMRUNUSU9OX1dPUkRfVkxECQkweDAwMDgKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CWNtZF9pZDsKKwl1bnNpZ25lZCBzaG9ydAlwYWNrZXRfc2VxX251bWJlcjsKKwl1bnNpZ25lZCBzaG9ydAljb2RlY19pbnN0YW5jZV9pZDsKKwl1bnNpZ25lZCBzaG9ydAlzdWJmcmFtZV9wYWNrZXRfc2l6ZV9oaWdoOworCXVuc2lnbmVkIHNob3J0CXN1YmZyYW1lX3BhY2tldF9zaXplX2xvdzsKKwl1bnNpZ25lZCBzaG9ydAlzdWJmcmFtZV9wYWNrZXRfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydAlzdWJmcmFtZV9wYWNrZXRfbG93OworCXVuc2lnbmVkIHNob3J0CXN1YmZyYW1lX3BhY2tldF9wYXJ0aXRpb247CisJdW5zaWduZWQgc2hvcnQJc3RhdGlzdGljc19wYWNrZXRfc2l6ZV9oaWdoOworCXVuc2lnbmVkIHNob3J0CXN0YXRpc3RpY3NfcGFja2V0X3NpemVfbG93OworCXVuc2lnbmVkIHNob3J0CXN0YXRpc3RpY3NfcGFja2V0X2hpZ2g7CisJdW5zaWduZWQgc2hvcnQJc3RhdGlzdGljc19wYWNrZXRfbG93OworCXVuc2lnbmVkIHNob3J0CXN0YXRpc3RpY3NfcGFydGl0aW9uOworCXVuc2lnbmVkIHNob3J0CXN1YmZyYW1lX2luZm9fMTsKKwl1bnNpZ25lZCBzaG9ydAlzdWJmcmFtZV9pbmZvXzA7CisJdW5zaWduZWQgc2hvcnQJY29kZWNfc2VsZWN0aW9uX3dvcmQ7CisJdW5zaWduZWQgc2hvcnQJbnVtX21iczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmlkZGVjX2NtZF9zdWJmcmFtZV9wa3Q7CisKKworLyoKKyAqIENvbW1hbmQgdG8gaW5mb3JtIFZJRERFQyB0YXNrIHRoYXQgcG9zdCBwcm9jZXNzaW5nIGlzIHJlcXVpcmVkIGZvciB0aGUgZnJhbWUKKyAqLworCisjZGVmaW5lCVZJRERFQ19DTURfUFBfRU5BQkxFCQkweDAwMDEKKyNkZWZpbmUJVklEREVDX0NNRF9QUF9FTkFCTEVfTEVOIFwKKwlzaXplb2YodmlkZGVjX2NtZF9wcF9lbmFibGUpCisKKyNkZWZpbmUJVklEREVDX0NNRF9QUF9JTkZPXzBfRE1fRE1BX0xTX0VYQ0hBTkdFX0ZMQUdfRE0JCTB4MDAwMAorI2RlZmluZQlWSURERUNfQ01EX1BQX0lORk9fMF9ETV9ETUFfTFNfRVhDSEFOR0VfRkxBR19ETUEJMHgwMDAxCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAljbWRfaWQ7CisJdW5zaWduZWQgc2hvcnQJcGFja2V0X3NlcV9udW07CisJdW5zaWduZWQgc2hvcnQJY29kZWNfaW5zdGFuY2VfaWQ7CisJdW5zaWduZWQgc2hvcnQJcG9zdHByb2NfaW5mb18wOworCXVuc2lnbmVkIHNob3J0CWNvZGVjX3NlbGVjdGlvbl93b3JkOworCXVuc2lnbmVkIHNob3J0CXBwX291dHB1dF9hZGRyX2hpZ2g7CisJdW5zaWduZWQgc2hvcnQJcHBfb3V0cHV0X2FkZHJfbG93OworCXVuc2lnbmVkIHNob3J0CXBvc3Rwcm9jX2luZm9fMTsKKwl1bnNpZ25lZCBzaG9ydAlsb2FkX3NoYXJpbmdfcGFja2V0X3NpemVfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydAlsb2FkX3NoYXJpbmdfcGFja2V0X3NpemVfbG93OworCXVuc2lnbmVkIHNob3J0CWxvYWRfc2hhcmluZ19wYWNrZXRfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydAlsb2FkX3NoYXJpbmdfcGFja2V0X2xvdzsKKwl1bnNpZ25lZCBzaG9ydAlsb2FkX3NoYXJpbmdfcGFydGl0aW9uOworCXVuc2lnbmVkIHNob3J0CXBwX3BhcmFtXzA7CisJdW5zaWduZWQgc2hvcnQJcHBfcGFyYW1fMTsKKwl1bnNpZ25lZCBzaG9ydAlwcF9wYXJhbV8yOworCXVuc2lnbmVkIHNob3J0CXBwX3BhcmFtXzM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZpZGRlY19jbWRfcHBfZW5hYmxlOworCisKKy8qCisgKiBGUkFNRSBIZWFkZXIgUGFja2V0IDogSXQgaXMgYXQgdGhlIHN0YXJ0IG9mIG5ldyBmcmFtZQorICovCisKKyNkZWZpbmUJVklEREVDX0NNRF9GUkFNRV9IRUFERVJfUEFDS0VUCTB4MDAwMgorI2RlZmluZQlWSURERUNfQ01EX0ZSQU1FX0hFQURFUl9QQUNLRVRfTEVOCVwKKwlzaXplb2YodmlkZGVjX2NtZF9mcmFtZV9oZWFkZXJfcGFja2V0KQorCisjZGVmaW5lCVZJRERFQ19DTURfRlJBTUVfSU5GT18wX0VSUk9SX1NLSVAJMHgwMDAwCisjZGVmaW5lCVZJRERFQ19DTURfRlJBTUVfSU5GT18wX0VSUk9SX0JMQUNLCTB4MDgwMAorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJcGFja2V0X2lkOworCXVuc2lnbmVkIHNob3J0CXhfZGltZW5zaW9uOworCXVuc2lnbmVkIHNob3J0CXlfZGltZW5zaW9uOworCXVuc2lnbmVkIHNob3J0CWxpbmVfd2lkdGg7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfaW5mb18wOworCXVuc2lnbmVkIHNob3J0CWZyYW1lX2J1ZmZlcl8wX2hpZ2g7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzBfbG93OworCXVuc2lnbmVkIHNob3J0CWZyYW1lX2J1ZmZlcl8xX2hpZ2g7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzFfbG93OworCXVuc2lnbmVkIHNob3J0CWZyYW1lX2J1ZmZlcl8yX2hpZ2g7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzJfbG93OworCXVuc2lnbmVkIHNob3J0CWZyYW1lX2J1ZmZlcl8zX2hpZ2g7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzNfbG93OworCXVuc2lnbmVkIHNob3J0CWZyYW1lX2J1ZmZlcl80X2hpZ2g7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzRfbG93OworCXVuc2lnbmVkIHNob3J0CWZyYW1lX2J1ZmZlcl81X2hpZ2g7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzVfbG93OworCXVuc2lnbmVkIHNob3J0CWZyYW1lX2J1ZmZlcl82X2hpZ2g7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzZfbG93OworCXVuc2lnbmVkIHNob3J0CWZyYW1lX2J1ZmZlcl83X2hpZ2g7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzdfbG93OworCXVuc2lnbmVkIHNob3J0CWZyYW1lX2J1ZmZlcl84X2hpZ2g7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzhfbG93OworCXVuc2lnbmVkIHNob3J0CWZyYW1lX2J1ZmZlcl85X2hpZ2g7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzlfbG93OworCXVuc2lnbmVkIHNob3J0CWZyYW1lX2J1ZmZlcl8xMF9oaWdoOworCXVuc2lnbmVkIHNob3J0CWZyYW1lX2J1ZmZlcl8xMF9sb3c7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzExX2hpZ2g7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzExX2xvdzsKKwl1bnNpZ25lZCBzaG9ydAlmcmFtZV9idWZmZXJfMTJfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydAlmcmFtZV9idWZmZXJfMTJfbG93OworCXVuc2lnbmVkIHNob3J0CWZyYW1lX2J1ZmZlcl8xM19oaWdoOworCXVuc2lnbmVkIHNob3J0CWZyYW1lX2J1ZmZlcl8xM19sb3c7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzE0X2hpZ2g7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzE0X2xvdzsKKwl1bnNpZ25lZCBzaG9ydAlmcmFtZV9idWZmZXJfMTVfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydAlmcmFtZV9idWZmZXJfMTVfbG93OworCXVuc2lnbmVkIHNob3J0CW91dHB1dF9mcmFtZV9idWZmZXJfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydAlvdXRwdXRfZnJhbWVfYnVmZmVyX2xvdzsKKwl1bnNpZ25lZCBzaG9ydAllbmRfb2ZfcGFja2V0X21hcmtlcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmlkZGVjX2NtZF9mcmFtZV9oZWFkZXJfcGFja2V0OworCisKKy8qCisgKiBTTElDRSBIRUFERVIgUEFDS0VUCisgKiBJLVNsaWNlIGFuZCBQLVNsaWNlCisgKi8KKworI2RlZmluZQlWSURERUNfQ01EX1NMSUNFX0hFQURFUl9QS1RfSVNMSUNFCQkweDAwMDMKKyNkZWZpbmUJVklEREVDX0NNRF9TTElDRV9IRUFERVJfUEtUX0lTTElDRV9MRU4JXAorCXNpemVvZih2aWRkZWNfY21kX3NsaWNlX2hlYWRlcl9wa3RfaXNsaWNlKQorCisjZGVmaW5lCVZJRERFQ19DTURfSVNMSUNFX0lORk9fMV9NT0RfU0xJQ0VfVFlQRV9QU0xJQ0UJMHgwMDAwCisjZGVmaW5lCVZJRERFQ19DTURfSVNMSUNFX0lORk9fMV9NT0RfU0xJQ0VfVFlQRV9CU0xJQ0UJMHgwMTAwCisjZGVmaW5lCVZJRERFQ19DTURfSVNMSUNFX0lORk9fMV9NT0RfU0xJQ0VfVFlQRV9JU0xJQ0UJMHgwMjAwCisjZGVmaW5lCVZJRERFQ19DTURfSVNMSUNFX0lORk9fMV9NT0RfU0xJQ0VfVFlQRV9TUFNMSUNFCTB4MDMwMAorI2RlZmluZQlWSURERUNfQ01EX0lTTElDRV9JTkZPXzFfTU9EX1NMSUNFX1RZUEVfU0lTTElDRQkweDA0MDAKKyNkZWZpbmUJVklEREVDX0NNRF9JU0xJQ0VfSU5GT18xX05PUEFERElORwkweDAwMDAKKyNkZWZpbmUJVklEREVDX0NNRF9JU0xJQ0VfSU5GT18xX1BBRERJTkcJMHgwODAwCisKKyNkZWZpbmUJVklEREVDX0NNRF9JU0xJQ0VfRU9QX01BUktFUgkJMHg3RkZGCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAljbWRfaWQ7CisJdW5zaWduZWQgc2hvcnQJcGFja2V0X2lkOworCXVuc2lnbmVkIHNob3J0CXNsaWNlX2luZm9fMDsKKwl1bnNpZ25lZCBzaG9ydAlzbGljZV9pbmZvXzE7CisJdW5zaWduZWQgc2hvcnQJc2xpY2VfaW5mb18yOworCXVuc2lnbmVkIHNob3J0CW51bV9ieXRlc19pbl9yYnNwX2hpZ2g7CisJdW5zaWduZWQgc2hvcnQJbnVtX2J5dGVzX2luX3Jic3BfbG93OworCXVuc2lnbmVkIHNob3J0CW51bV9ieXRlc19pbl9yYnNwX2NvbnN1bWVkOworCXVuc2lnbmVkIHNob3J0CWVuZF9vZl9wYWNrZXRfbWFya2VyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2aWRkZWNfY21kX3NsaWNlX2hlYWRlcl9wa3RfaXNsaWNlOworCisKKyNkZWZpbmUJVklEREVDX0NNRF9TTElDRV9IRUFERVJfUEtUX1BTTElDRQkJMHgwMDAzCisjZGVmaW5lCVZJRERFQ19DTURfU0xJQ0VfSEVBREVSX1BLVF9QU0xJQ0VfTEVOCVwKKwlzaXplb2YodmlkZGVjX2NtZF9zbGljZV9oZWFkZXJfcGt0X3BzbGljZSkKKworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJY21kX2lkOworCXVuc2lnbmVkIHNob3J0CXBhY2tldF9pZDsKKwl1bnNpZ25lZCBzaG9ydAlzbGljZV9pbmZvXzA7CisJdW5zaWduZWQgc2hvcnQJc2xpY2VfaW5mb18xOworCXVuc2lnbmVkIHNob3J0CXNsaWNlX2luZm9fMjsKKwl1bnNpZ25lZCBzaG9ydAlzbGljZV9pbmZvXzM7CisJdW5zaWduZWQgc2hvcnQJcmVmaWR4X2wwX21hcF90YWJfaW5mb18wOworCXVuc2lnbmVkIHNob3J0CXJlZmlkeF9sMF9tYXBfdGFiX2luZm9fMTsKKwl1bnNpZ25lZCBzaG9ydAlyZWZpZHhfbDBfbWFwX3RhYl9pbmZvXzI7CisJdW5zaWduZWQgc2hvcnQJcmVmaWR4X2wwX21hcF90YWJfaW5mb18zOworCXVuc2lnbmVkIHNob3J0CW51bV9ieXRlc19pbl9yYnNwX2hpZ2g7CisJdW5zaWduZWQgc2hvcnQJbnVtX2J5dGVzX2luX3Jic3BfbG93OworCXVuc2lnbmVkIHNob3J0CW51bV9ieXRlc19pbl9yYnNwX2NvbnN1bWVkOworCXVuc2lnbmVkIHNob3J0CWVuZF9vZl9wYWNrZXRfbWFya2VyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2aWRkZWNfY21kX3NsaWNlX2hlYWRlcl9wa3RfcHNsaWNlOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNXZkZWNtc2cuaCBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDV2ZGVjbXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE3NDRjMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDV2ZGVjbXNnLmgKQEAgLTAsMCArMSwxMDcgQEAKKyNpZm5kZWYgUURTUDVWSURERUNNU0dJX0gKKyNkZWZpbmUgUURTUDVWSURERUNNU0dJX0gKKworLyo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSoKKworICAgIFYgSSBEIEUgTyAgRCBFIEMgTyBEIEUgUiAgIEkgTiBUIEUgUiBOIEEgTCAgTSBFIFMgUyBBIEcgRSBTCisKK0dFTkVSQUwgREVTQ1JJUFRJT04KKyAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmludGlvbnMgb2YgZm9ybWF0IGJsb2NrcyBvZiBtZXNzYWdlcworICB0aGF0IGFyZSBzZW50IGJ5IFZJRERFQyBUYXNrCisKK1JFRkVSRU5DRVMKKyAgTm9uZQorCitFWFRFUk5BTElaRUQgRlVOQ1RJT05TCisgIE5vbmUKKworQ29weXJpZ2h0KGMpIDE5OTIgLSAyMDA4IGJ5IFFVQUxDT01NLCBJbmNvcnBvcmF0ZWQuCisKK1RoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCittYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisqPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgICAgICAgICAgICAgICAgIEVESVQgSElTVE9SWSBGT1IgRklMRQorCitUaGlzIHNlY3Rpb24gY29udGFpbnMgY29tbWVudHMgZGVzY3JpYmluZyBjaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlLgorTm90aWNlIHRoYXQgY2hhbmdlcyBhcmUgbGlzdGVkIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlci4KKworJEhlYWRlcjogLy9zb3VyY2UvcWNvbS9xY3QvbXVsdGltZWRpYTIvQWRzcFN2Yy83WFhYL3Fkc3A1Y21kL3ZpZGVvL3Fkc3A1dmRlY21zZy5oIzIgJCAkRGF0ZVRpbWU6IDIwMDgvMDcvMzAgMTA6NTA6MjMgJCAkQXV0aG9yOiBwYXZhbnIgJAorUmV2aXNpb24gSGlzdG9yeToKKword2hlbiAgICAgICB3aG8gICAgIHdoYXQsIHdoZXJlLCB3aHkKKy0tLS0tLS0tICAgLS0tICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiswNS8xMC8wOCAgIGFjICAgICAgaW5pdGlhbCB2ZXJzaW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKgorICogTWVzc2FnZSB0byBpbmZvcm0gQVJNIHdoaWNoIFZERUNfU1VCRlJBTUVfUEtUX0NNRCBwcm9jZXNzZWQgYnkgVklEREVDIFRBU0sKKyAqLworCisjZGVmaW5lCVZJRERFQ19NU0dfU1VCRl9ET05FCTB4MDAwMAorI2RlZmluZQlWSURERUNfTVNHX1NVQkZfRE9ORV9MRU4JXAorCXNpemVvZih2aWRkZWNfbXNnX3N1YmZfZG9uZSkKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CXBhY2tldF9zZXFfbnVtYmVyOworCXVuc2lnbmVkIHNob3J0CWNvZGVjX2luc3RhbmNlX2lkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2aWRkZWNfbXNnX3N1YmZfZG9uZTsKKworCisvKgorICogTWVzc2FnZSB0byBpbmZvcm0gQVJNIG9uZSBmcmFtZSBoYXMgYmVlbiBkZWNvZGVkCisgKi8KKworI2RlZmluZQlWSURERUNfTVNHX0ZSQU1FX0RPTkUJMHgwMDAxCisjZGVmaW5lCVZJRERFQ19NU0dfRlJBTUVfRE9ORV9MRU4JXAorCXNpemVvZih2aWRkZWNfbXNnX2ZyYW1lX2RvbmUpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAlwYWNrZXRfc2VxX251bWJlcjsKKwl1bnNpZ25lZCBzaG9ydAljb2RlY19pbnN0YW5jZV9pZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmlkZGVjX21zZ19mcmFtZV9kb25lOworCisKKy8qCisgKiBNZXNzYWdlIHRvIGluZm9ybSBBUk0gdGhhdCBwb3N0IHByb2Nlc3NpbmcgZnJhbWUgaGFzIGJlZW4gZGVjb2RlZAorICovCisKKyNkZWZpbmUJVklEREVDX01TR19QUF9FTkFCTEVfQ01EX0RPTkUJMHgwMDAyCisjZGVmaW5lCVZJRERFQ19NU0dfUFBfRU5BQkxFX0NNRF9ET05FX0xFTglcCisJc2l6ZW9mKHZpZGRlY19tc2dfcHBfZW5hYmxlX2NtZF9kb25lKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJcGFja2V0X3NlcV9udW1iZXI7CisJdW5zaWduZWQgc2hvcnQJY29kZWNfaW5zdGFuY2VfaWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZpZGRlY19tc2dfcHBfZW5hYmxlX2NtZF9kb25lOworCisKKy8qCisgKiBNZXNzYWdlIHRvIGluZm9ybSBBUk0gdGhhdCBvbmUgcG9zdCBwcm9jZXNzaW5nIGZyYW1lIGhhcyBiZWVuIGRlY29kZWQKKyAqLworCisKKyNkZWZpbmUJVklEREVDX01TR19QUF9GUkFNRV9ET05FCQkweDAwMDMKKyNkZWZpbmUJVklEREVDX01TR19QUF9GUkFNRV9ET05FX0xFTglcCisJc2l6ZW9mKHZpZGRlY19tc2dfcHBfZnJhbWVfZG9uZSkKKworI2RlZmluZQlWSURERUNfTVNHX0RJU1BfV09SVEhZX0RJU1AJCTB4MDAwMAorI2RlZmluZQlWSURERUNfTVNHX0RJU1BfV09SVEhZX0RJU1BfTk9ORQkweEZGRkYKKworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJcGFja2V0X3NlcV9udW1iZXI7CisJdW5zaWduZWQgc2hvcnQJY29kZWNfaW5zdGFuY2VfaWQ7CisJdW5zaWduZWQgc2hvcnQJZGlzcGxheV93b3J0aHk7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZpZGRlY19tc2dfcHBfZnJhbWVfZG9uZTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDV2ZW5jY21kaS5oIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNXZlbmNjbWRpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE5NTQ0ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDV2ZW5jY21kaS5oCkBAIC0wLDAgKzEsMjEyIEBACisjaWZuZGVmIFFEU1A1VklERU5DQ01ESV9ICisjZGVmaW5lIFFEU1A1VklERU5DQ01ESV9ICisKKy8qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qCisKKyAgICBWIEkgRCBFIE8gIEUgTiBDIE8gRCBFIFIgIEkgTiBUIEUgUiBOIEEgTCAgQyBPIE0gTSBBIE4gRCBTCisKK0dFTkVSQUwgREVTQ1JJUFRJT04KKyAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmludGlvbnMgb2YgZm9ybWF0IGJsb2NrcyBvZiBjb21tYW5kcworICB0aGF0IGFyZSBhY2NlcHRlZCBieSBWSURFTkMgVGFzaworCitSRUZFUkVOQ0VTCisgIE5vbmUKKworRVhURVJOQUxJWkVEIEZVTkNUSU9OUworICBOb25lCisKK0NvcHlyaWdodChjKSAyMDA4IGJ5IFFVQUxDT01NLCBJbmNvcnBvcmF0ZWQuCisqPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCQkJRURJVCBISVNUT1JZIEZPUiBGSUxFCisKK1RoaXMgc2VjdGlvbiBjb250YWlucyBjb21tZW50cyBkZXNjcmliaW5nIGNoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUuCitOb3RpY2UgdGhhdCBjaGFuZ2VzIGFyZSBsaXN0ZWQgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyLgorCitSZXZpc2lvbiBIaXN0b3J5OgorCit3aGVuICAgICAgIHdobyAgICAgd2hhdCwgd2hlcmUsIHdoeQorLS0tLS0tLS0gICAtLS0gICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzA5LzI1LzA4ICAgdW1lc2hwICAgICAgaW5pdGlhbCB2ZXJzaW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisgICNkZWZpbmUgVklERU5DX0NNRF9DRkcgICAgICAgICAgIDB4MDAwMAorICAjZGVmaW5lIFZJREVOQ19DTURfQUNUSVZFICAgICAgICAweDAwMDEKKyAgI2RlZmluZSBWSURFTkNfQ01EX0lETEUgICAgICAgICAgMHgwMDAyCisgICNkZWZpbmUgVklERU5DX0NNRF9GUkFNRV9TVEFSVCAgIDB4MDAwMworICAjZGVmaW5lIFZJREVOQ19DTURfU1RBVFVTX1FVRVJZICAweDAwMDQKKyAgI2RlZmluZSBWSURFTkNfQ01EX1JDX0NGRyAgICAgICAgMHgwMDA1CisgICNkZWZpbmUgVklERU5DX0NNRF9ESVNfQ0ZHICAgICAgIDB4MDAwNgorICAjZGVmaW5lIFZJREVOQ19DTURfRElTICAgICAgICAgICAweDAwMDcKKyAgI2RlZmluZSBWSURFTkNfQ01EX0lOVFJBX1JFRlJFU0ggMHgwMDA4CisgICNkZWZpbmUgVklERU5DX0NNRF9ESUdJVEFMX1pPT00gIDB4MDAwOQorCisKKy8qCisgKiBDb21tYW5kIHRvIHBhc3MgdGhlIGZyYW1lIG1lc3NhZ2UgaW5mb3JtYXRpb24gdG8gVklERU5DCisgKi8KKworCisjZGVmaW5lIFZJREVOQ19DTURfRlJBTUVfU1RBUlRfTEVOIFwKKwlzaXplb2YodmlkZW5jX2NtZF9mcmFtZV9zdGFydCkKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0ICBjbWRfaWQ7CisJdW5zaWduZWQgc2hvcnQgIGZyYW1lX2luZm87CisJdW5zaWduZWQgc2hvcnQgIGZyYW1lX3Job19idWRnZXRfd29yZF9oaWdoOworCXVuc2lnbmVkIHNob3J0ICBmcmFtZV9yaG9fYnVkZ2V0X3dvcmRfbG93OworCXVuc2lnbmVkIHNob3J0ICBpbnB1dF9sdW1hX2FkZHJfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydCAgaW5wdXRfbHVtYV9hZGRyX2xvdzsKKwl1bnNpZ25lZCBzaG9ydCAgaW5wdXRfY2hyb21hX2FkZHJfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydCAgaW5wdXRfY2hyb21hX2FkZHJfbG93OworCXVuc2lnbmVkIHNob3J0ICByZWZfdm9wX2J1Zl9wdHJfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydCAgcmVmX3ZvcF9idWZfcHRyX2xvdzsKKwl1bnNpZ25lZCBzaG9ydCAgZW5jX3BrdF9idWZfcHRyX2hpZ2g7CisJdW5zaWduZWQgc2hvcnQgIGVuY19wa3RfYnVmX3B0cl9sb3c7CisJdW5zaWduZWQgc2hvcnQgIGVuY19wa3RfYnVmX3NpemVfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydCAgZW5jX3BrdF9idWZfc2l6ZV9sb3c7CisJdW5zaWduZWQgc2hvcnQgIHVuZmlsdF9yZWNvbl92b3BfYnVmX3B0cl9oaWdoOworCXVuc2lnbmVkIHNob3J0ICB1bmZpbHRfcmVjb25fdm9wX2J1Zl9wdHJfbG93OworCXVuc2lnbmVkIHNob3J0ICBmaWx0X3JlY29uX3ZvcF9idWZfcHRyX2hpZ2g7CisJdW5zaWduZWQgc2hvcnQgIGZpbHRfcmVjb25fdm9wX2J1Zl9wdHJfbG93OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2aWRlbmNfY21kX2ZyYW1lX3N0YXJ0OworCisvKgorICogQ29tbWFuZCB0byBwYXNzIHRoZSBmcmFtZS1sZXZlbCBkaWdpdGFsIHN0YWJpbGl6YXRpb24gcGFyYW1ldGVycyB0byBWSURFTkMKKyAqLworCisKKyNkZWZpbmUgVklERU5DX0NNRF9ESVNfTEVOIFwKKyAgICBzaXplb2YodmlkZW5jX2NtZF9kaXMpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCAgY21kX2lkOworCXVuc2lnbmVkIHNob3J0ICB2ZmVfb3V0X3ByZXZfbHVtYV9hZGRyX2hpZ2g7CisJdW5zaWduZWQgc2hvcnQgIHZmZV9vdXRfcHJldl9sdW1hX2FkZHJfbG93OworCXVuc2lnbmVkIHNob3J0ICBzdGFiaWxpemF0aW9uX2luZm87Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZpZGVuY19jbWRfZGlzOworCisvKgorICogQ29tbWFuZCB0byBwYXNzIHRoZSBjb2RlYyByZWxhdGVkIHBhcmFtZXRlcnMgdG8gVklERU5DCisgKi8KKworCisjZGVmaW5lIFZJREVOQ19DTURfQ0ZHX0xFTiBcCisgICAgc2l6ZW9mKHZpZGVuY19jbWRfY2ZnKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQgIGNtZF9pZDsKKwl1bnNpZ25lZCBzaG9ydCAgY2ZnX2luZm9fMDsKKwl1bnNpZ25lZCBzaG9ydCAgY2ZnX2luZm9fMTsKKwl1bnNpZ25lZCBzaG9ydCAgZm91cl9tdl90aHJlc2hvbGQ7CisJdW5zaWduZWQgc2hvcnQgIGlzZV9mc2VfbXZfY29zdF9mYWM7CisJdW5zaWduZWQgc2hvcnQgIHZlbmNfZnJhbWVfZGltOworCXVuc2lnbmVkIHNob3J0ICB2ZW5jX0RNX3BhcnRpdGlvbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmlkZW5jX2NtZF9jZmc7CisKKy8qCisgKiBDb21tYW5kIHRvIHN0YXJ0IHRoZSB2aWRlbyBlbmNvZGluZworICovCisKKworI2RlZmluZSBWSURFTkNfQ01EX0FDVElWRV9MRU4gXAorICAgIHNpemVvZih2aWRlbmNfY21kX2FjdGl2ZSkKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIHNob3J0ICBjbWRfaWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZpZGVuY19jbWRfYWN0aXZlOworCisvKgorICogQ29tbWFuZCB0byBzdG9wIHRoZSB2aWRlbyBlbmNvZGluZworICovCisKKworI2RlZmluZSBWSURFTkNfQ01EX0lETEVfTEVOIFwKKyAgICBzaXplb2YodmlkZW5jX2NtZF9pZGxlKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQgIGNtZF9pZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmlkZW5jX2NtZF9pZGxlOworCisvKgorICogQ29tbWFuZCB0byBxdWVyeSBzdGF1cyBvZiBWSURFTkMKKyAqLworCisKKyNkZWZpbmUgVklERU5DX0NNRF9TVEFUVVNfUVVFUllfTEVOIFwKKyAgICBzaXplb2YodmlkZW5jX2NtZF9zdGF0dXNfcXVlcnkpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCAgY21kX2lkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2aWRlbmNfY21kX3N0YXR1c19xdWVyeTsKKworLyoKKyAqIENvbW1hbmQgdG8gc2V0IHJhdGUgY29udHJvbCBmb3IgYSBmcmFtZQorICovCisKKworI2RlZmluZSBWSURFTkNfQ01EX1JDX0NGR19MRU4gXAorICAgIHNpemVvZih2aWRlbmNfY21kX3JjX2NmZykKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0ICBjbWRfaWQ7CisJdW5zaWduZWQgc2hvcnQgIG1heF9mcmFtZV9xcF9kZWx0YTsKKwl1bnNpZ25lZCBzaG9ydCAgbWF4X21pbl9mcmFtZV9xcDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmlkZW5jX2NtZF9yY19jZmc7CisKKy8qCisgKiBDb21tYW5kIHRvIHNldCBpbnRyYS1yZWZyZXNoaW5nCisgKi8KKworCisjZGVmaW5lIFZJREVOQ19DTURfSU5UUkFfUkVGUkVTSF9MRU4gXAorICAgIHNpemVvZih2aWRlbmNfY21kX2ludHJhX3JlZnJlc2gpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCAgY21kX2lkOworCXVuc2lnbmVkIHNob3J0ICBudW1fbWJfcmVmcmVzaDsKKwl1bnNpZ25lZCBzaG9ydCAgbWJfaW5kZXhbMTVdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2aWRlbmNfY21kX2ludHJhX3JlZnJlc2g7CisKKy8qCisgKiBDb21tYW5kIHRvIHBhc3MgZGlnaXRhbCB6b29tIGluZm9ybWF0aW9uIHRvIHRoZSBWSURFTkMKKyAqLworI2RlZmluZSBWSURFTkNfQ01EX0RJR0lUQUxfWk9PTV9MRU4gXAorICAgIHNpemVvZih2aWRlbmNfY21kX2RpZ2l0YWxfem9vbSkKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0ICBjbWRfaWQ7CisJdW5zaWduZWQgc2hvcnQgIGRpZ2l0YWxfem9vbV9lbjsKKwl1bnNpZ25lZCBzaG9ydCAgbHVtYV9mcmFtZV9zaGlmdF9YOworCXVuc2lnbmVkIHNob3J0ICBsdW1hX2ZyYW1lX3NoaWZ0X1k7CisJdW5zaWduZWQgc2hvcnQgIHVwX2lwX2x1bWFfcm93czsKKwl1bnNpZ25lZCBzaG9ydCAgdXBfaXBfbHVtYV9jb2xzOworCXVuc2lnbmVkIHNob3J0ICB1cF9pcF9jaHJvbWFfcm93czsKKwl1bnNpZ25lZCBzaG9ydCAgdXBfaXBfY2hyb21hX2NvbHM7CisJdW5zaWduZWQgc2hvcnQgIGx1bWFfcGhfaW5jcl9WX2xvdzsKKwl1bnNpZ25lZCBzaG9ydCAgbHVtYV9waF9pbmNyX1ZfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydCAgbHVtYV9waF9pbmNyX0hfbG93OworCXVuc2lnbmVkIHNob3J0ICBsdW1hX3BoX2luY3JfSF9oaWdoOworCXVuc2lnbmVkIHNob3J0ICBjaHJvbWFfcGhfaW5jcl9WX2xvdzsKKwl1bnNpZ25lZCBzaG9ydCAgY2hyb21hX3BoX2luY3JfVl9oaWdoOworCXVuc2lnbmVkIHNob3J0ICBjaHJvbWFfcGhfaW5jcl9IX2xvdzsKKwl1bnNpZ25lZCBzaG9ydCAgY2hyb21hX3BoX2luY3JfSF9oaWdoOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2aWRlbmNfY21kX2RpZ2l0YWxfem9vbTsKKworLyoKKyAqIENvbW1hbmQgdG8gY29uZmlndXJlIGRpZ2l0YWwgc3RhYmlsaXphdGlvbiBwYXJhbWV0ZXJzCisgKi8KKworI2RlZmluZSBWSURFTkNfQ01EX0RJU19DRkdfTEVOIFwKKyAgICBzaXplb2YodmlkZW5jX2NtZF9kaXNfY2ZnKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQgIGNtZF9pZDsKKwl1bnNpZ25lZCBzaG9ydCAgaW1hZ2Vfc3RhYl9zdWJmX3N0YXJ0X3Jvd19jb2w7CisJdW5zaWduZWQgc2hvcnQgIGltYWdlX3N0YWJfc3ViZl9kaW07CisJdW5zaWduZWQgc2hvcnQgIGltYWdlX3N0YWJfaW5mb18wOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2aWRlbmNfY21kX2Rpc19jZmc7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1dmZlY21kaS5oIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNXZmZWNtZGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWU4ZmMyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNXZmZWNtZGkuaApAQCAtMCwwICsxLDkxMCBAQAorI2lmbmRlZiBRRFNQNVZGRUNNRElfSAorI2RlZmluZSBRRFNQNVZGRUNNRElfSAorCisvKj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09KgorCisgICAgViBGIEUgICBJIE4gVCBFIFIgTiBBIEwgICBDIE8gTSBNIEEgTiBEIFMKKworR0VORVJBTCBERVNDUklQVElPTgorICBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW50aW9ucyBvZiBmb3JtYXQgYmxvY2tzIG9mIGNvbW1hbmRzCisgIHRoYXQgYXJlIGFjY2VwdGVkIGJ5IFZGRSBUYXNrCisKK1JFRkVSRU5DRVMKKyAgTm9uZQorCitFWFRFUk5BTElaRUQgRlVOQ1RJT05TCisgIE5vbmUKKworQ29weXJpZ2h0KGMpIDE5OTIgLSAyMDA4IGJ5IFFVQUxDT01NLCBJbmNvcnBvcmF0ZWQuCisKK1RoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCittYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisqPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgICAgICAgICAgICAgICAgIEVESVQgSElTVE9SWSBGT1IgRklMRQorCitUaGlzIHNlY3Rpb24gY29udGFpbnMgY29tbWVudHMgZGVzY3JpYmluZyBjaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlLgorTm90aWNlIHRoYXQgY2hhbmdlcyBhcmUgbGlzdGVkIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlci4KKworJEhlYWRlcjogLy9zb3VyY2UvcWNvbS9xY3QvbXVsdGltZWRpYTIvQWRzcFN2Yy83WFhYL3Fkc3A1Y21kL3ZpZGVvL3Fkc3A1dmZlY21kaS5oIzIgJCAkRGF0ZVRpbWU6IDIwMDgvMDcvMzAgMTA6NTA6MjMgJCAkQXV0aG9yOiBwYXZhbnIgJAorUmV2aXNpb24gSGlzdG9yeToKKword2hlbiAgICAgICB3aG8gICAgIHdoYXQsIHdoZXJlLCB3aHkKKy0tLS0tLS0tICAgLS0tICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiswNi8xMi8wOCAgIHN2ICAgICAgaW5pdGlhbCB2ZXJzaW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb21tYW5kcyB0aHJvdWdoIHZmZUNvbW1hbmRTY2FsZVF1ZXVlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb21tYW5kIHRvIHByb2dyYW0gc2NhbGVyIGZvciBvcDEgLiBtYXggb3Agb2Ygc2NhbGVyIGlzIFZHQQorICovCisKKworI2RlZmluZQlWRkVfQ01EX1NDQUxFX09QMV9DRkcJCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX1NDQUxFX09QMV9DRkdfTEVOCVwKKwlzaXplb2YodmZlX2NtZF9zY2FsZV9vcDFfY2ZnKQorCisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AxX1NFTF9JUF9TRUxfWV9TVEFOREFSRAkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9TQ0FMRV9PUDFfU0VMX0lQX1NFTF9ZX0NBU0NBREVECTB4MDAwMQorI2RlZmluZQlWRkVfQ01EX1NDQUxFX09QMV9TRUxfSF9ZX1NDQUxFUl9ESVMJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AxX1NFTF9IX1lfU0NBTEVSX0VOQQkweDAwMDIKKyNkZWZpbmUJVkZFX0NNRF9TQ0FMRV9PUDFfU0VMX0hfUFBfWV9TQ0FMRVJfRElTCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX1NDQUxFX09QMV9TRUxfSF9QUF9ZX1NDQUxFUl9FTkEJMHgwMDA0CisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AxX1NFTF9WX1lfU0NBTEVSX0RJUwkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9TQ0FMRV9PUDFfU0VMX1ZfWV9TQ0FMRVJfRU5BCTB4MDAwOAorI2RlZmluZQlWRkVfQ01EX1NDQUxFX09QMV9TRUxfVl9QUF9ZX1NDQUxFUl9ESVMJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AxX1NFTF9WX1BQX1lfU0NBTEVSX0VOQQkweDAwMTAKKyNkZWZpbmUJVkZFX0NNRF9TQ0FMRV9PUDFfU0VMX0lQX1NFTF9DQkNSX1NUQU5EQVJECTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX1NDQUxFX09QMV9TRUxfSVBfU0VMX0NCQ1JfQ0FTQ0FERUQJMHgwMDIwCisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AxX1NFTF9IX0NCQ1JfU0NBTEVSX0RJUwkJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AxX1NFTF9IX0NCQ1JfU0NBTEVSX0VOQQkJMHgwMDQwCisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AxX1NFTF9WX0NCQ1JfU0NBTEVSX0RJUwkJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AxX1NFTF9WX0NCQ1JfU0NBTEVSX0VOQQkJMHgwMDgwCisKKyNkZWZpbmUJVkZFX0NNRF9PUDFfUFBfWV9TQ0FMRVJfQ0ZHX1BBUlQxX0RPTlRfTE9BRF9DT0VGRlMJMHg4MDAwMDAwMAorI2RlZmluZQlWRkVfQ01EX09QMV9QUF9ZX1NDQUxFUl9DRkdfUEFSVDFfTE9BRF9DT0VGRlMJMHg4MDAwMDAwMAorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJc2NhbGVfb3AxX3NlbDsKKwl1bnNpZ25lZCBpbnQJeV9zY2FsZXJfY2ZnX3BhcnQxOworCXVuc2lnbmVkIGludAl5X3NjYWxlcl9jZmdfcGFydDI7CisJdW5zaWduZWQgaW50CWNiY3Jfc2NhbGVyX2NmZ19wYXJ0MTsKKwl1bnNpZ25lZCBpbnQJY2Jjcl9zY2FsZXJfY2ZnX3BhcnQyOworCXVuc2lnbmVkIGludAljYmNyX3NjYWxlcl9jZmdfcGFydDM7CisJdW5zaWduZWQgaW50CXBwX3lfc2NhbGVyX2NmZ19wYXJ0MTsKKwl1bnNpZ25lZCBpbnQJcHBfeV9zY2FsZXJfY2ZnX3BhcnQyOworCXVuc2lnbmVkIGludAl5X3NjYWxlcl92X2NvZWZmX2JhbmtfcGFydDFbMTZdOworCXVuc2lnbmVkIGludAl5X3NjYWxlcl92X2NvZWZmX2JhbmtfcGFydDJbMTZdOworCXVuc2lnbmVkIGludAl5X3NjYWxlcl9oX2NvZWZmX2JhbmtfcGFydDFbMTZdOworCXVuc2lnbmVkIGludAl5X3NjYWxlcl9oX2NvZWZmX2JhbmtfcGFydDJbMTZdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX3NjYWxlX29wMV9jZmc7CisKKworLyoKKyAqIENvbW1hbmQgdG8gcHJvZ3JhbSBzY2FsZXIgZm9yIG9wMgorICovCisKKyNkZWZpbmUJVkZFX0NNRF9TQ0FMRV9PUDJfQ0ZHCQkweDAwMDEKKyNkZWZpbmUJVkZFX0NNRF9TQ0FMRV9PUDJfQ0ZHX0xFTglcCisJc2l6ZW9mKHZmZV9jbWRfc2NhbGVfb3AyX2NmZykKKworI2RlZmluZQlWRkVfQ01EX1NDQUxFX09QMl9TRUxfSVBfU0VMX1lfU1RBTkRBUkQJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AyX1NFTF9JUF9TRUxfWV9DQVNDQURFRAkweDAwMDEKKyNkZWZpbmUJVkZFX0NNRF9TQ0FMRV9PUDJfU0VMX0hfWV9TQ0FMRVJfRElTCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX1NDQUxFX09QMl9TRUxfSF9ZX1NDQUxFUl9FTkEJMHgwMDAyCisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AyX1NFTF9IX1BQX1lfU0NBTEVSX0RJUwkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9TQ0FMRV9PUDJfU0VMX0hfUFBfWV9TQ0FMRVJfRU5BCTB4MDAwNAorI2RlZmluZQlWRkVfQ01EX1NDQUxFX09QMl9TRUxfVl9ZX1NDQUxFUl9ESVMJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AyX1NFTF9WX1lfU0NBTEVSX0VOQQkweDAwMDgKKyNkZWZpbmUJVkZFX0NNRF9TQ0FMRV9PUDJfU0VMX1ZfUFBfWV9TQ0FMRVJfRElTCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX1NDQUxFX09QMl9TRUxfVl9QUF9ZX1NDQUxFUl9FTkEJMHgwMDEwCisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AyX1NFTF9JUF9TRUxfQ0JDUl9TVEFOREFSRAkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9TQ0FMRV9PUDJfU0VMX0lQX1NFTF9DQkNSX0NBU0NBREVECTB4MDAyMAorI2RlZmluZQlWRkVfQ01EX1NDQUxFX09QMl9TRUxfSF9DQkNSX1NDQUxFUl9ESVMJCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX1NDQUxFX09QMl9TRUxfSF9DQkNSX1NDQUxFUl9FTkEJCTB4MDA0MAorI2RlZmluZQlWRkVfQ01EX1NDQUxFX09QMl9TRUxfVl9DQkNSX1NDQUxFUl9ESVMJCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX1NDQUxFX09QMl9TRUxfVl9DQkNSX1NDQUxFUl9FTkEJCTB4MDA4MAorCisjZGVmaW5lCVZGRV9DTURfT1AyX1BQX1lfU0NBTEVSX0NGR19QQVJUMV9ET05UX0xPQURfQ09FRkZTCTB4ODAwMDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9PUDJfUFBfWV9TQ0FMRVJfQ0ZHX1BBUlQxX0xPQURfQ09FRkZTCQkweDgwMDAwMDAwCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworCXVuc2lnbmVkIGludAlzY2FsZV9vcDJfc2VsOworCXVuc2lnbmVkIGludAl5X3NjYWxlcl9jZmdfcGFydDE7CisJdW5zaWduZWQgaW50CXlfc2NhbGVyX2NmZ19wYXJ0MjsKKwl1bnNpZ25lZCBpbnQJY2Jjcl9zY2FsZXJfY2ZnX3BhcnQxOworCXVuc2lnbmVkIGludAljYmNyX3NjYWxlcl9jZmdfcGFydDI7CisJdW5zaWduZWQgaW50CWNiY3Jfc2NhbGVyX2NmZ19wYXJ0MzsKKwl1bnNpZ25lZCBpbnQJcHBfeV9zY2FsZXJfY2ZnX3BhcnQxOworCXVuc2lnbmVkIGludAlwcF95X3NjYWxlcl9jZmdfcGFydDI7CisJdW5zaWduZWQgaW50CXlfc2NhbGVyX3ZfY29lZmZfYmFua19wYXJ0MVsxNl07CisJdW5zaWduZWQgaW50CXlfc2NhbGVyX3ZfY29lZmZfYmFua19wYXJ0MlsxNl07CisJdW5zaWduZWQgaW50CXlfc2NhbGVyX2hfY29lZmZfYmFua19wYXJ0MVsxNl07CisJdW5zaWduZWQgaW50CXlfc2NhbGVyX2hfY29lZmZfYmFua19wYXJ0MlsxNl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9jbWRfc2NhbGVfb3AyX2NmZzsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb21tYW5kcyB0aHJvdWdoIHZmZUNvbW1hbmRUYWJsZVF1ZXVlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb21tYW5kIHRvIHByb2dyYW0gdGhlIEFYSSBpcCBwYXRocworICovCisKKyNkZWZpbmUJVkZFX0NNRF9BWElfSVBfQ0ZHCQkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9BWElfSVBfQ0ZHX0xFTgkJc2l6ZW9mKHZmZV9jbWRfYXhpX2lwX2NmZykKKworI2RlZmluZQlWRkVfQ01EX0lQX1NFTF9JUF9GT1JNQVRfOAkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9JUF9TRUxfSVBfRk9STUFUXzEwCTB4MDAwMQorI2RlZmluZQlWRkVfQ01EX0lQX1NFTF9JUF9GT1JNQVRfMTIJMHgwMDAyCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworCXVuc2lnbmVkIGludAlpcF9zZWw7CisJdW5zaWduZWQgaW50CWlwX2NmZ19wYXJ0MTsKKwl1bnNpZ25lZCBpbnQJaXBfY2ZnX3BhcnQyOworCXVuc2lnbmVkIGludAlpcF91bnBhY2tfY2ZnX3BhcnRbNl07CisJdW5zaWduZWQgaW50CWlwX2J1Zl9hZGRyWzhdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdmZlX2NtZF9heGlfaXBfY2ZnOworCisKKy8qCisgKiBDb21tYW5kIHRvIHByb2dyYW0gYXhpIG9wIHBhdGhzCisgKi8KKworI2RlZmluZQlWRkVfQ01EX0FYSV9PUF9DRkcJMHgwMDAxCisjZGVmaW5lCVZGRV9DTURfQVhJX09QX0NGR19MRU4Jc2l6ZW9mKHZmZV9jbWRfYXhpX29wX2NmZykKKworI2RlZmluZQlWRkVfQ01EX09QX1NFTF9PUDEJCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX09QX1NFTF9PUDIJCTB4MDAwMQorI2RlZmluZQlWRkVfQ01EX09QX1NFTF9PUDFfT1AyCQkweDAwMDIKKyNkZWZpbmUJVkZFX0NNRF9PUF9TRUxfQ1RPQQkJMHgwMDAzCisjZGVmaW5lCVZGRV9DTURfT1BfU0VMX0NUT0FfT1AxCQkweDAwMDQKKyNkZWZpbmUJVkZFX0NNRF9PUF9TRUxfQ1RPQV9PUDIJCTB4MDAwNQorI2RlZmluZQlWRkVfQ01EX09QX1NFTF9PUF9GT1JNQVRfOAkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9PUF9TRUxfT1BfRk9STUFUXzEwCTB4MDAwOAorI2RlZmluZQlWRkVfQ01EX09QX1NFTF9PUF9GT1JNQVRfMTIJMHgwMDEwCisKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CW9wX3NlbDsKKwl1bnNpZ25lZCBpbnQJb3AxX3lfY2ZnX3BhcnQxOworCXVuc2lnbmVkIGludAlvcDFfeV9jZmdfcGFydDI7CisJdW5zaWduZWQgaW50CW9wMV9jYmNyX2NmZ19wYXJ0MTsKKwl1bnNpZ25lZCBpbnQJb3AxX2NiY3JfY2ZnX3BhcnQyOworCXVuc2lnbmVkIGludAlvcDJfeV9jZmdfcGFydDE7CisJdW5zaWduZWQgaW50CW9wMl95X2NmZ19wYXJ0MjsKKwl1bnNpZ25lZCBpbnQJb3AyX2NiY3JfY2ZnX3BhcnQxOworCXVuc2lnbmVkIGludAlvcDJfY2Jjcl9jZmdfcGFydDI7CisJdW5zaWduZWQgaW50CW9wMV9idWYxX2FkZHJbMTZdOworCXVuc2lnbmVkIGludAlvcDJfYnVmMV9hZGRyWzE2XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX2NtZF9heGlfb3BfY2ZnOworCisKKworCisvKgorICogQ29tbWFuZCB0byBwcm9ncmFtIHRoZSByb2xsIG9mZiBjb3JyZWN0aW9uIG1vZHVsZQorICovCisKKyNkZWZpbmUJVkZFX0NNRF9ST0xMT0ZGX0NGRwkweDAwMDIKKyNkZWZpbmUJVkZFX0NNRF9ST0xMT0ZGX0NGR19MRU4JXAorCXNpemVvZih2ZmVfY21kX3JvbGxvZmZfY2ZnKQorCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworCXVuc2lnbmVkIGludAljb3JyZWN0aW9uX29wdF9jZW50ZXJfcG9zOworCXVuc2lnbmVkIGludAlyYWRpdXNfc3F1YXJlX2VudHJ5WzMyXTsKKwl1bnNpZ25lZCBpbnQJcmVkX3RhYmxlX2VudHJ5WzMyXTsKKwl1bnNpZ25lZCBpbnQJZ3JlZW5fdGFibGVfZW50cnlbMzJdOworCXVuc2lnbmVkIGludAlibHVlX3RhYmxlX2VudHJ5WzMyXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX2NtZF9yb2xsb2ZmX2NmZzsKKworLyoKKyAqIENvbW1hbmQgdG8gcHJvZ3JhbSBSR0IgZ2FtbWEgdGFibGUKKyAqLworCisjZGVmaW5lCVZGRV9DTURfUkdCX0dBTU1BX0NGRwkJMHgwMDAzCisjZGVmaW5lCVZGRV9DTURfUkdCX0dBTU1BX0NGR19MRU4JXAorCXNpemVvZih2ZmVfY21kX3JnYl9nYW1tYV9jZmcpCisKKyNkZWZpbmUJVkZFX0NNRF9SR0JfR0FNTUFfU0VMX0xJTkVBUgkJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfUkdCX0dBTU1BX1NFTF9QV19MSU5FQVIJCTB4MDAwMQordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CXJnYl9nYW1tYV9zZWw7CisJdW5zaWduZWQgaW50CXJnYl9nYW1tYV9lbnRyeVsyNTZdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX3JnYl9nYW1tYV9jZmc7CisKKworLyoKKyAqIENvbW1hbmQgdG8gcHJvZ3JhbSBsdW1hIGdhbW1hIHRhYmxlIGZvciB0aGUgbm9pc2UgcmVkdWN0aW9uIHBhdGgKKyAqLworCisjZGVmaW5lCVZGRV9DTURfWV9HQU1NQV9DRkcJCTB4MDAwNAorI2RlZmluZQlWRkVfQ01EX1lfR0FNTUFfQ0ZHX0xFTgkJXAorCXNpemVvZih2ZmVfY21kX3lfZ2FtbWFfY2ZnKQorCisjZGVmaW5lCVZGRV9DTURfWV9HQU1NQV9TRUxfTElORUFSCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX1lfR0FNTUFfU0VMX1BXX0xJTkVBUgkweDAwMDEKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CXlfZ2FtbWFfc2VsOworCXVuc2lnbmVkIGludAl5X2dhbW1hX2VudHJ5WzI1Nl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9jbWRfeV9nYW1tYV9jZmc7CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb21tYW5kcyB0aHJvdWdoIHZmZUNvbW1hbmRRdWV1ZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQ29tbWFuZCB0byByZXNldCB0aGUgVkZFIHRvIGEga25vd24gZ29vZCBzdGF0ZS5BbGwgcHJldmlvdXNseSBwcm9ncmFtbWVkCisgKiBQYXJhbXMgd2lsbCBiZSBsb3N0CisgKi8KKworCisjZGVmaW5lCVZGRV9DTURfUkVTRVQJCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX1JFU0VUX0xFTglzaXplb2YodmZlX2NtZF9yZXNldCkKKworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJY21kX2lkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX3Jlc2V0OworCisKKy8qCisgKiBDb21tYW5kIHRvIHN0YXJ0IFZGRSBwcm9jZXNzaW5nIGJhc2VkIG9uIHRoZSBjb25maWcgcGFyYW1zCisgKi8KKworCisjZGVmaW5lCVZGRV9DTURfU1RBUlQJCTB4MDAwMQorI2RlZmluZQlWRkVfQ01EX1NUQVJUX0xFTglzaXplb2YodmZlX2NtZF9zdGFydCkKKworI2RlZmluZQlWRkVfQ01EX1NUQVJUVVBfUEFSQU1TX1NSQ19DQU1JRgkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9TVEFSVFVQX1BBUkFNU19TUkNfQVhJCQkweDAwMDEKKyNkZWZpbmUJVkZFX0NNRF9TVEFSVFVQX1BBUkFNU19NT0RFX0NPTlRJTlVPVVMJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfU1RBUlRVUF9QQVJBTVNfTU9ERV9TTkFQU0hPVAkweDAwMDIKKworI2RlZmluZQlWRkVfQ01EX0lNQUdFX1BMX0JMQUNLX0xWTF9DT1JSX0RJUwkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9JTUFHRV9QTF9CTEFDS19MVkxfQ09SUl9FTkEJMHgwMDAxCisjZGVmaW5lCVZGRV9DTURfSU1BR0VfUExfUk9MTE9GRl9DT1JSX0RJUwkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9JTUFHRV9QTF9ST0xMT0ZGX0NPUlJfRU5BCTB4MDAwMgorI2RlZmluZQlWRkVfQ01EX0lNQUdFX1BMX1dISVRFX0JBTF9ESVMJCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0lNQUdFX1BMX1dISVRFX0JBTF9FTkEJCTB4MDAwNAorI2RlZmluZQlWRkVfQ01EX0lNQUdFX1BMX1JHQl9HQU1NQV9ESVMJCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0lNQUdFX1BMX1JHQl9HQU1NQV9FTkEJCTB4MDAwOAorI2RlZmluZQlWRkVfQ01EX0lNQUdFX1BMX0xVTUFfTk9JU0VfUkVEX1BBVEhfRElTCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0lNQUdFX1BMX0xVTUFfTk9JU0VfUkVEX1BBVEhfRU5BCTB4MDAxMAorI2RlZmluZQlWRkVfQ01EX0lNQUdFX1BMX0FEUF9GSUxURVJfRElTCQkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9JTUFHRV9QTF9BRFBfRklMVEVSX0VOQQkJMHgwMDIwCisjZGVmaW5lCVZGRV9DTURfSU1BR0VfUExfQ0hST01BX1NBTVBfRElTCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0lNQUdFX1BMX0NIUk9NQV9TQU1QX0VOQQkweDAwNDAKKworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJc3RhcnR1cF9wYXJhbXM7CisJdW5zaWduZWQgaW50CWltYWdlX3BpcGVsaW5lOworCXVuc2lnbmVkIGludAlmcmFtZV9kaW1lbnNpb247Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9jbWRfc3RhcnQ7CisKKworLyoKKyAqIENvbW1hbmQgdG8gaGFsdCBhbGwgcHJvY2Vzc2luZworICovCisKKyNkZWZpbmUJVkZFX0NNRF9TVE9QCQkweDAwMDIKKyNkZWZpbmUJVkZFX0NNRF9TVE9QX0xFTglzaXplb2YodmZlX2NtZF9zdG9wKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJY21kX2lkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX3N0b3A7CisKKworLyoKKyAqIENvbW1hbmQgdG8gY29tbWl0IHRoZSBwYXJhbXMgdGhhdCBoYXZlIGJlZW4gcHJvZ3JhbW1lZCB0byB0YWtlCisgKiBlZmZlY3Qgb24gdGhlIG5leHQgZnJhbWUKKyAqLworCisjZGVmaW5lCVZGRV9DTURfVVBEQVRFCQkweDAwMDMKKyNkZWZpbmUJVkZFX0NNRF9VUERBVEVfTEVOCXNpemVvZih2ZmVfY21kX3VwZGF0ZSkKKworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJY21kX2lkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX3VwZGF0ZTsKKworCisvKgorICogQ29tbWFuZCB0byBwcm9ncmFtIENBTUlGIG1vZHVsZQorICovCisKKyNkZWZpbmUJVkZFX0NNRF9DQU1JRl9DRkcJMHgwMDA0CisjZGVmaW5lCVZGRV9DTURfQ0FNSUZfQ0ZHX0xFTglzaXplb2YodmZlX2NtZF9jYW1pZl9jZmcpCisKKyNkZWZpbmUJVkZFX0NNRF9DRkdfVlNZTkNfU1lOQ19FREdFX0hJR0gJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfQ0ZHX1ZTWU5DX1NZTkNfRURHRV9MT1cJCTB4MDAwMgorI2RlZmluZQlWRkVfQ01EX0NGR19IU1lOQ19TWU5DX0VER0VfSElHSAkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9DRkdfSFNZTkNfU1lOQ19FREdFX0xPVwkJMHgwMDA0CisjZGVmaW5lCVZGRV9DTURfQ0ZHX1NZTkNfTU9ERV9BUFMJCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0NGR19TWU5DX01PREVfRUZTCQkwWDAwMDgKKyNkZWZpbmUJVkZFX0NNRF9DRkdfU1lOQ19NT0RFX0VMUwkJMHgwMDEwCisjZGVmaW5lCVZGRV9DTURfQ0ZHX1NZTkNfTU9ERV9SVkQJCTB4MDAxOAorI2RlZmluZQlWRkVfQ01EX0NGR19WRkVfU1VCU0FNUF9FTl9ESVMJCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0NGR19WRkVfU1VCU0FNUF9FTl9FTkEJCTB4MDAyMAorI2RlZmluZQlWRkVfQ01EX0NGR19CVVNfU1VCU0FNUF9FTl9ESVMJCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0NGR19CVVNfU1VCU0FNUF9FTl9FTkEJCTB4MDA4MAorI2RlZmluZQlWRkVfQ01EX0NGR19JUlFfU1VCU0FNUF9FTl9ESVMJCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0NGR19JUlFfU1VCU0FNUF9FTl9FTkEJCTB4MDgwMAorCisjZGVmaW5lCVZGRV9DTURfU1VCU0FNUDJfQ0ZHX1BJWEVMX1NLSVBfMTYJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfU1VCU0FNUDJfQ0ZHX1BJWEVMX1NLSVBfMTIJMHgwMDEwCisKKyNkZWZpbmUJVkZFX0NNRF9FUE9DSF9JUlFfMV9ESVMJCQkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9FUE9DSF9JUlFfMV9FTkEJCQkweDQwMDAKKyNkZWZpbmUJVkZFX0NNRF9FUE9DSF9JUlFfMl9ESVMJCQkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9FUE9DSF9JUlFfMl9FTkEJCQkweDgwMDAKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CWNmZzsKKwl1bnNpZ25lZCBpbnQJZWZzX2NmZzsKKwl1bnNpZ25lZCBpbnQJZnJhbWVfY2ZnOworCXVuc2lnbmVkIGludAl3aW5kb3dfd2lkdGhfY2ZnOworCXVuc2lnbmVkIGludAl3aW5kb3dfaGVpZ2h0X2NmZzsKKwl1bnNpZ25lZCBpbnQJc3Vic2FtcDFfY2ZnOworCXVuc2lnbmVkIGludAlzdWJzYW1wMl9jZmc7CisJdW5zaWduZWQgaW50CWVwb2NoX2lycTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX2NtZF9jYW1pZl9jZmc7CisKKworCisvKgorICogQ29tbWFuZCB0byBwcm9ncmFtIHRoZSBibGFjayBsZXZlbCBtb2R1bGUKKyAqLworCisjZGVmaW5lCVZGRV9DTURfQkxBQ0tfTFZMX0NGRwkJMHgwMDA1CisjZGVmaW5lCVZGRV9DTURfQkxBQ0tfTFZMX0NGR19MRU4Jc2l6ZW9mKHZmZV9jbWRfYmxhY2tfbHZsX2NmZykKKworI2RlZmluZQlWRkVfQ01EX0JMX1NFTF9NQU5VQUwJCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0JMX1NFTF9BVVRPCQkweDAwMDEKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CWJsYWNrX2x2bF9zZWw7CisJdW5zaWduZWQgaW50CWNmZ19wYXJ0WzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX2JsYWNrX2x2bF9jZmc7CisKKworLyoKKyAqIENvbW1hbmQgdG8gcHJvZ3JhbSB0aGUgYWN0aXZlIHJlZ2lvbiBieSBjcm9wcGluZyB0aGUgcmVnaW9uIG9mIGludGVyZXN0CisgKi8KKworI2RlZmluZQlWRkVfQ01EX0FDVElWRV9SRUdJT05fQ0ZHCTB4MDAwNgorI2RlZmluZQlWRkVfQ01EX0FDVElWRV9SRUdJT05fQ0ZHX0xFTglcCisJc2l6ZW9mKHZmZV9jbWRfYWN0aXZlX3JlZ2lvbl9jZmcpCisKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CWNmZ19wYXJ0MTsKKwl1bnNpZ25lZCBpbnQJY2ZnX3BhcnQyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX2FjdGl2ZV9yZWdpb25fY2ZnOworCisKKworLyoKKyAqIENvbW1hbmQgdG8gcHJvZ3JhbSB0aGUgZGVmZWN0aXZlIHBpeGVsIGNvcnJlY3Rpb24oRFBDKSAsCisgKiBhZGFwdGl2ZSBiYXllciBmaWx0ZXIgKEFCRikgYW5kIGRlbW9zYWljIG1vZHVsZXMKKyAqLworCisjZGVmaW5lCVZGRV9DTURfREVNT1NBSUNfQ0ZHCQkweDAwMDcKKyNkZWZpbmUJVkZFX0NNRF9ERU1PU0FJQ19DRkdfTEVOCXNpemVvZih2ZmVfY21kX2RlbW9zYWljX2NmZykKKworI2RlZmluZQlWRkVfQ01EX0RFTU9TQUlDX1BBUlQxX0FCRl9FTl9ESVMJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfREVNT1NBSUNfUEFSVDFfQUJGX0VOX0VOQQkweDAwMDEKKyNkZWZpbmUJVkZFX0NNRF9ERU1PU0FJQ19QQVJUMV9EUENfRU5fRElTCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0RFTU9TQUlDX1BBUlQxX0RQQ19FTl9FTkEJMHgwMDAyCisjZGVmaW5lCVZGRV9DTURfREVNT1NBSUNfUEFSVDFfRk9SQ0VfQUJGX09GRgkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9ERU1PU0FJQ19QQVJUMV9GT1JDRV9BQkZfT04JMHgwMDA0CisjZGVmaW5lCVZGRV9DTURfREVNT1NBSUNfUEFSVDFfU0xPUEVfU0hJRlRfMQkweDAwMDAwMDAwCisjZGVmaW5lCVZGRV9DTURfREVNT1NBSUNfUEFSVDFfU0xPUEVfU0hJRlRfMgkweDEwMDAwMDAwCisjZGVmaW5lCVZGRV9DTURfREVNT1NBSUNfUEFSVDFfU0xPUEVfU0hJRlRfNAkweDIwMDAwMDAwCisjZGVmaW5lCVZGRV9DTURfREVNT1NBSUNfUEFSVDFfU0xPUEVfU0hJRlRfOAkweDMwMDAwMDAwCisjZGVmaW5lCVZGRV9DTURfREVNT1NBSUNfUEFSVDFfU0xPUEVfU0hJRlRfMV8yCTB4NTAwMDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9ERU1PU0FJQ19QQVJUMV9TTE9QRV9TSElGVF8xXzQJMHg2MDAwMDAwMAorI2RlZmluZQlWRkVfQ01EX0RFTU9TQUlDX1BBUlQxX1NMT1BFX1NISUZUXzFfOAkweDcwMDAwMDAwCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworCXVuc2lnbmVkIGludAlkZW1vc2FpY19wYXJ0MTsKKwl1bnNpZ25lZCBpbnQJZGVtb3NhaWNfcGFydDI7CisJdW5zaWduZWQgaW50CWRlbW9zYWljX3BhcnQzOworCXVuc2lnbmVkIGludAlkZW1vc2FpY19wYXJ0NDsKKwl1bnNpZ25lZCBpbnQJZGVtb3NhaWNfcGFydDU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9jbWRfZGVtb3NhaWNfY2ZnOworCisKKy8qCisgKiBDb21tYW5kIHRvIHByb2dyYW0gdGhlIGlwIGZvcm1hdAorICovCisKKyNkZWZpbmUJVkZFX0NNRF9JUF9GT1JNQVRfQ0ZHCQkweDAwMDgKKyNkZWZpbmUJVkZFX0NNRF9JUF9GT1JNQVRfQ0ZHX0xFTglcCisJc2l6ZW9mKHZmZV9jbWRfaXBfZm9ybWF0X2NmZykKKworI2RlZmluZQlWRkVfQ01EX0lQX0ZPUk1BVF9TRUxfUkdSRwkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9JUF9GT1JNQVRfU0VMX0dSR1IJMHgwMDAxCisjZGVmaW5lCVZGRV9DTURfSVBfRk9STUFUX1NFTF9CR0JHCTB4MDAwMgorI2RlZmluZQlWRkVfQ01EX0lQX0ZPUk1BVF9TRUxfR0JHQgkweDAwMDMKKyNkZWZpbmUJVkZFX0NNRF9JUF9GT1JNQVRfU0VMX1lDQllDUgkweDAwMDQKKyNkZWZpbmUJVkZFX0NNRF9JUF9GT1JNQVRfU0VMX1lDUllDQgkweDAwMDUKKyNkZWZpbmUJVkZFX0NNRF9JUF9GT1JNQVRfU0VMX0NCWUNSWQkweDAwMDYKKyNkZWZpbmUJVkZFX0NNRF9JUF9GT1JNQVRfU0VMX0NSWUNCWQkweDAwMDcKKyNkZWZpbmUJVkZFX0NNRF9JUF9GT1JNQVRfU0VMX05PX0NIUk9NQQkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9JUF9GT1JNQVRfU0VMX0NIUk9NQQkweDAwMDgKKworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJaXBfZm9ybWF0X3NlbDsKKwl1bnNpZ25lZCBpbnQJYmFsYW5jZV9nYWluc19wYXJ0MTsKKwl1bnNpZ25lZCBpbnQJYmFsYW5jZV9nYWluc19wYXJ0MjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX2NtZF9pcF9mb3JtYXRfY2ZnOworCisKKworLyoKKyAqIENvbW1hbmQgdG8gcHJvZ3JhbSBtYXggYW5kIG1pbiBhbGxvd2VkIG9wIHZhbHVlcworICovCisKKyNkZWZpbmUJVkZFX0NNRF9PUF9DTEFNUF9DRkcJCTB4MDAwOQorI2RlZmluZQlWRkVfQ01EX09QX0NMQU1QX0NGR19MRU4JXAorCXNpemVvZih2ZmVfY21kX29wX2NsYW1wX2NmZykKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CW9wX2NsYW1wX21heDsKKwl1bnNpZ25lZCBpbnQJb3BfY2xhbXBfbWluOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX29wX2NsYW1wX2NmZzsKKworCisvKgorICogQ29tbWFuZCB0byBwcm9ncmFtIGNocm9tYSBzdWIgc2FtcGxlIG1vZHVsZQorICovCisKKyNkZWZpbmUJVkZFX0NNRF9DSFJPTUFfU1VCU0FNUExFX0NGRwkJMHgwMDBBCisjZGVmaW5lCVZGRV9DTURfQ0hST01BX1NVQlNBTVBMRV9DRkdfTEVOCVwKKwlzaXplb2YodmZlX2NtZF9jaHJvbWFfc3Vic2FtcGxlX2NmZykKKworI2RlZmluZQlWRkVfQ01EX0NIUk9NQV9TVUJTQU1QX1NFTF9IX0lOVEVSRVNUSUFMX1NBTVBTCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0NIUk9NQV9TVUJTQU1QX1NFTF9IX0NPU0lURURfU0FNUFMJMHgwMDAxCisjZGVmaW5lCVZGRV9DTURfQ0hST01BX1NVQlNBTVBfU0VMX1ZfSU5URVJFU1RJQUxfU0FNUFMJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfQ0hST01BX1NVQlNBTVBfU0VMX1ZfQ09TSVRFRF9TQU1QUwkweDAwMDIKKyNkZWZpbmUJVkZFX0NNRF9DSFJPTUFfU1VCU0FNUF9TRUxfSF9TVUJTQU1QX0RJUwkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9DSFJPTUFfU1VCU0FNUF9TRUxfSF9TVUJTQU1QX0VOQQkweDAwMDQKKyNkZWZpbmUJVkZFX0NNRF9DSFJPTUFfU1VCU0FNUF9TRUxfVl9TVUJTQU1QX0RJUwkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9DSFJPTUFfU1VCU0FNUF9TRUxfVl9TVUJTQU1QX0VOQQkweDAwMDgKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CWNocm9tYV9zdWJzYW1wX3NlbDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX2NtZF9jaHJvbWFfc3Vic2FtcGxlX2NmZzsKKworCisvKgorICogQ29tbWFuZCB0byBwcm9ncmFtIHRoZSB3aGl0ZSBiYWxhbmNlIG1vZHVsZQorICovCisKKyNkZWZpbmUJVkZFX0NNRF9XSElURV9CQUxBTkNFX0NGRwkweDAwMEIKKyNkZWZpbmUJVkZFX0NNRF9XSElURV9CQUxBTkNFX0NGR19MRU4JXAorCXNpemVvZih2ZmVfY21kX3doaXRlX2JhbGFuY2VfY2ZnKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJd2hpdGVfYmFsYW5jZV9nYWluczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX2NtZF93aGl0ZV9iYWxhbmNlX2NmZzsKKworCisvKgorICogQ29tbWFuZCB0byBwcm9ncmFtIHRoZSBjb2xvciBwcm9jZXNzaW5nIG1vZHVsZQorICovCisKKyNkZWZpbmUJVkZFX0NNRF9DT0xPUl9QUk9DRVNTX0NGRwkweDAwMEMKKyNkZWZpbmUJVkZFX0NNRF9DT0xPUl9QUk9DRVNTX0NGR19MRU4JXAorCXNpemVvZih2ZmVfY21kX2NvbG9yX3Byb2Nlc3NfY2ZnKQorCisjZGVmaW5lCVZGRV9DTURfQ09MT1JfQ09SUkVfUEFSVDdfUTdfRkFDVE9SUwkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9DT0xPUl9DT1JSRV9QQVJUN19ROF9GQUNUT1JTCTB4MDAwMQorI2RlZmluZQlWRkVfQ01EX0NPTE9SX0NPUlJFX1BBUlQ3X1E5X0ZBQ1RPUlMJMHgwMDAyCisjZGVmaW5lCVZGRV9DTURfQ09MT1JfQ09SUkVfUEFSVDdfUTEwX0ZBQ1RPUlMJMHgwMDAzCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworCXVuc2lnbmVkIGludAljb2xvcl9jb3JyZWN0aW9uX3BhcnQxOworCXVuc2lnbmVkIGludAljb2xvcl9jb3JyZWN0aW9uX3BhcnQyOworCXVuc2lnbmVkIGludAljb2xvcl9jb3JyZWN0aW9uX3BhcnQzOworCXVuc2lnbmVkIGludAljb2xvcl9jb3JyZWN0aW9uX3BhcnQ0OworCXVuc2lnbmVkIGludAljb2xvcl9jb3JyZWN0aW9uX3BhcnQ1OworCXVuc2lnbmVkIGludAljb2xvcl9jb3JyZWN0aW9uX3BhcnQ2OworCXVuc2lnbmVkIGludAljb2xvcl9jb3JyZWN0aW9uX3BhcnQ3OworCXVuc2lnbmVkIGludAljaHJvbWFfZW5oYW5jZV9wYXJ0MTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2VuaGFuY2VfcGFydDI7CisJdW5zaWduZWQgaW50CWNocm9tYV9lbmhhbmNlX3BhcnQzOworCXVuc2lnbmVkIGludAljaHJvbWFfZW5oYW5jZV9wYXJ0NDsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2VuaGFuY2VfcGFydDU7CisJdW5zaWduZWQgaW50CWx1bWFfY2FsY19wYXJ0MTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9jYWxjX3BhcnQyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX2NvbG9yX3Byb2Nlc3NfY2ZnOworCisKKy8qCisgKiBDb21tYW5kIHRvIHByb2dyYW0gYWRhcHRpdmUgZmlsdGVyIG1vZHVsZQorICovCisKKyNkZWZpbmUJVkZFX0NNRF9BRFBfRklMVEVSX0NGRwkJMHgwMDBECisjZGVmaW5lCVZGRV9DTURfQURQX0ZJTFRFUl9DRkdfTEVOCVwKKwlzaXplb2YodmZlX2NtZF9hZHBfZmlsdGVyX2NmZykKKworI2RlZmluZQlWRkVfQ01EX0FTRl9DRkdfUEFSVF9TTU9PVEhfRklMVEVSX0RJUwkJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfQVNGX0NGR19QQVJUX1NNT09USF9GSUxURVJfRU5BCQkweDAwMDEKKyNkZWZpbmUJVkZFX0NNRF9BU0ZfQ0ZHX1BBUlRfTk9fU0hBUlBfTU9ERQkJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfQVNGX0NGR19QQVJUX1NJTkdMRV9GSUxURVIJCTB4MDAwMgorI2RlZmluZQlWRkVfQ01EX0FTRl9DRkdfUEFSVF9EVUFMX0ZJTFRFUgkJMHgwMDA0CisjZGVmaW5lCVZGRV9DTURfQVNGX0NGR19QQVJUX1NIQVJQX01PREUJCQkweDAwMDcKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CWFzZl9jZmdfcGFydFs3XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX2NtZF9hZHBfZmlsdGVyX2NmZzsKKworCisvKgorICogQ29tbWFuZCB0byBwcm9ncmFtIGZvciBmcmFtZSBza2lwIHBhdHRlcm4gZm9yIG9wMSBhbmQgb3AyCisgKi8KKworI2RlZmluZQlWRkVfQ01EX0ZSQU1FX1NLSVBfQ0ZHCQkweDAwMEUKKyNkZWZpbmUJVkZFX0NNRF9GUkFNRV9TS0lQX0NGR19MRU4JXAorCXNpemVvZih2ZmVfY21kX2ZyYW1lX3NraXBfY2ZnKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJZnJhbWVfc2tpcF9wYXR0ZXJuX29wMTsKKwl1bnNpZ25lZCBpbnQJZnJhbWVfc2tpcF9wYXR0ZXJuX29wMjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX2NtZF9mcmFtZV9za2lwX2NmZzsKKworCisvKgorICogQ29tbWFuZCB0byBwcm9ncmFtIGZpZWxkLW9mLXZpZXcgY3JvcCBmb3IgZGlnaXRhbCB6b29tCisgKi8KKworI2RlZmluZQlWRkVfQ01EX0ZPVl9DUk9QCTB4MDAwRgorI2RlZmluZQlWRkVfQ01EX0ZPVl9DUk9QX0xFTglzaXplb2YodmZlX2NtZF9mb3ZfY3JvcCkKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CWZvdl9jcm9wX3BhcnQxOworCXVuc2lnbmVkIGludAlmb3ZfY3JvcF9wYXJ0MjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX2NtZF9mb3ZfY3JvcDsKKworCisKKy8qCisgKiBDb21tYW5kIHRvIHByb2dyYW0gYXV0byBmb2N1cyhBRikgc3RhdGlzdGljcyBtb2R1bGUKKyAqLworCisjZGVmaW5lCVZGRV9DTURfU1RBVFNfQVVUT0ZPQ1VTX0NGRwkweDAwMTAKKyNkZWZpbmUJVkZFX0NNRF9TVEFUU19BVVRPRk9DVVNfQ0ZHX0xFTglcCisJc2l6ZW9mKHZmZV9jbWRfc3RhdHNfYXV0b2ZvY3VzX2NmZykKKworI2RlZmluZQlWRkVfQ01EX0FGX1NUQVRTX1NFTF9TVEFUU19ESVMJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfQUZfU1RBVFNfU0VMX1NUQVRTX0VOQQkweDAwMDEKKyNkZWZpbmUJVkZFX0NNRF9BRl9TVEFUU19TRUxfUFJJX0ZJWEVECTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0FGX1NUQVRTX1NFTF9QUklfVkFSCTB4MDAwMgorI2RlZmluZQlWRkVfQ01EX0FGX1NUQVRTX0NGR19QQVJUX01FVFJJQ19TVU0JMHgwMDAwMDAwMAorI2RlZmluZQlWRkVfQ01EX0FGX1NUQVRTX0NGR19QQVJUX01FVFJJQ19NQVgJMHgwMDIwMDAwMAorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJYWZfc3RhdHNfc2VsOworCXVuc2lnbmVkIGludAlhZl9zdGF0c19jZmdfcGFydFs4XTsKKwl1bnNpZ25lZCBpbnQJYWZfc3RhdHNfb3BfYnVmX2hkcjsKKwl1bnNpZ25lZCBpbnQJYWZfc3RhdHNfb3BfYnVmWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX3N0YXRzX2F1dG9mb2N1c19jZmc7CisKKworLyoKKyAqIENvbW1hbmQgdG8gcHJvZ3JhbSBXaGl0ZSBiYWxhbmNlKHdiKSBhbmQgZXhwb3N1cmUgKGV4cCkKKyAqIHN0YXRpc3RpY3MgbW9kdWxlCisgKi8KKworI2RlZmluZQlWRkVfQ01EX1NUQVRTX1dCX0VYUF9DRkcJMHgwMDExCisjZGVmaW5lCVZGRV9DTURfU1RBVFNfV0JfRVhQX0NGR19MRU4JXAorCXNpemVvZih2ZmVfY21kX3N0YXRzX3diX2V4cF9jZmcpCisKKyNkZWZpbmUJVkZFX0NNRF9XQl9FWFBfU1RBVFNfU0VMX1NUQVRTX0RJUwkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9XQl9FWFBfU1RBVFNfU0VMX1NUQVRTX0VOQQkweDAwMDEKKyNkZWZpbmUJVkZFX0NNRF9XQl9FWFBfU1RBVFNfU0VMX1BSSV9GSVhFRAkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9XQl9FWFBfU1RBVFNfU0VMX1BSSV9WQVIJMHgwMDAyCisKKyNkZWZpbmUJVkZFX0NNRF9XQl9FWFBfU1RBVFNfQ0ZHX1BBUlQxX0VYUF9SRUdfOF84CTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX1dCX0VYUF9TVEFUU19DRkdfUEFSVDFfRVhQX1JFR18xNl8xNgkweDAwMDEKKyNkZWZpbmUJVkZFX0NNRF9XQl9FWFBfU1RBVFNfQ0ZHX1BBUlQxX0VYUF9TUkVHXzhfOAkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9XQl9FWFBfU1RBVFNfQ0ZHX1BBUlQxX0VYUF9TUkVHXzRfNAkweDAwMDIKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CXdiX2V4cF9zdGF0c19zZWw7CisJdW5zaWduZWQgaW50CXdiX2V4cF9zdGF0c19jZmdfcGFydDE7CisJdW5zaWduZWQgaW50CXdiX2V4cF9zdGF0c19jZmdfcGFydDI7CisJdW5zaWduZWQgaW50CXdiX2V4cF9zdGF0c19jZmdfcGFydDM7CisJdW5zaWduZWQgaW50CXdiX2V4cF9zdGF0c19jZmdfcGFydDQ7CisJdW5zaWduZWQgaW50CXdiX2V4cF9zdGF0c19vcF9idWZfaGRyOworCXVuc2lnbmVkIGludAl3Yl9leHBfc3RhdHNfb3BfYnVmWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX3N0YXRzX3diX2V4cF9jZmc7CisKKworLyoKKyAqIENvbW1hbmQgdG8gcHJvZ3JhbSBoaXN0b2dyYW0oaGcpIHN0YXRzIG1vZHVsZQorICovCisKKyNkZWZpbmUJVkZFX0NNRF9TVEFUU19IR19DRkcJCTB4MDAxMgorI2RlZmluZQlWRkVfQ01EX1NUQVRTX0hHX0NGR19MRU4JXAorCXNpemVvZih2ZmVfY21kX3N0YXRzX2hnX2NmZykKKworI2RlZmluZQlWRkVfQ01EX0hHX1NUQVRTX1NFTF9QUklfRklYRUQJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfSEdfU1RBVFNfU0VMX1BSSV9WQVIJMHgwMDAyCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworCXVuc2lnbmVkIGludAloZ19zdGF0c19zZWw7CisJdW5zaWduZWQgaW50CWhnX3N0YXRzX2NmZ19wYXJ0MTsKKwl1bnNpZ25lZCBpbnQJaGdfc3RhdHNfY2ZnX3BhcnQyOworCXVuc2lnbmVkIGludAloZ19zdGF0c19vcF9idWZfaGRyOworCXVuc2lnbmVkIGludAloZ19zdGF0c19vcF9idWY7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9jbWRfc3RhdHNfaGdfY2ZnOworCisKKy8qCisgKiBDb21tYW5kIHRvIGFja25vd2xlZGdlIGxhc3QgTVNHX1ZGRV9PUDEgbWVzc2FnZQorICovCisKKyNkZWZpbmUJVkZFX0NNRF9PUDFfQUNLCQkweDAwMTMKKyNkZWZpbmUJVkZFX0NNRF9PUDFfQUNLX0xFTglzaXplb2YodmZlX2NtZF9vcDFfYWNrKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJb3AxX2J1Zl95X2FkZHI7CisJdW5zaWduZWQgaW50CW9wMV9idWZfY2Jjcl9hZGRyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX29wMV9hY2s7CisKKworCisvKgorICogQ29tbWFuZCB0byBhY2tub3dsZWRnZSBsYXN0IE1TR19WRkVfT1AyIG1lc3NhZ2UKKyAqLworCisjZGVmaW5lCVZGRV9DTURfT1AyX0FDSwkJMHgwMDE0CisjZGVmaW5lCVZGRV9DTURfT1AyX0FDS19MRU4Jc2l6ZW9mKHZmZV9jbWRfb3AyX2FjaykKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CW9wMl9idWZfeV9hZGRyOworCXVuc2lnbmVkIGludAlvcDJfYnVmX2NiY3JfYWRkcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX2NtZF9vcDJfYWNrOworCisKKworLyoKKyAqIENvbW1hbmQgdG8gYWNrbm93bGVkZ2UgTVNHX1ZGRV9TVEFUU19BVVRPRk9DVVMgbXNnCisgKi8KKworI2RlZmluZQlWRkVfQ01EX1NUQVRTX0FGX0FDSwkJMHgwMDE1CisjZGVmaW5lCVZGRV9DTURfU1RBVFNfQUZfQUNLX0xFTglzaXplb2YodmZlX2NtZF9zdGF0c19hZl9hY2spCisKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CWFmX3N0YXRzX29wX2J1ZjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX2NtZF9zdGF0c19hZl9hY2s7CisKKworLyoKKyAqIENvbW1hbmQgdG8gYWNrbm93bGVkZ2UgTVNHX1ZGRV9TVEFUU19XQl9FWFAgbXNnCisgKi8KKworI2RlZmluZQlWRkVfQ01EX1NUQVRTX1dCX0VYUF9BQ0sJMHgwMDE2CisjZGVmaW5lCVZGRV9DTURfU1RBVFNfV0JfRVhQX0FDS19MRU4Jc2l6ZW9mKHZmZV9jbWRfc3RhdHNfd2JfZXhwX2FjaykKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CXdiX2V4cF9zdGF0c19vcF9idWY7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9jbWRfc3RhdHNfd2JfZXhwX2FjazsKKworCisvKgorICogQ29tbWFuZCB0byBhY2tub3dsZWRnZSBNU0dfVkZFX0VQT0NIMSBtZXNzYWdlCisgKi8KKworI2RlZmluZQlWRkVfQ01EX0VQT0NIMV9BQ0sJMHgwMDE3CisjZGVmaW5lCVZGRV9DTURfRVBPQ0gxX0FDS19MRU4Jc2l6ZW9mKHZmZV9jbWRfZXBvY2gxX2FjaykKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IGNtZF9pZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX2NtZF9lcG9jaDFfYWNrOworCisKKy8qCisgKiBDb21tYW5kIHRvIGFja25vd2xlZGdlIE1TR19WRkVfRVBPQ0gyIG1lc3NhZ2UKKyAqLworCisjZGVmaW5lCVZGRV9DTURfRVBPQ0gyX0FDSwkweDAwMTgKKyNkZWZpbmUJVkZFX0NNRF9FUE9DSDJfQUNLX0xFTglzaXplb2YodmZlX2NtZF9lcG9jaDJfYWNrKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQgY21kX2lkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX2Vwb2NoMl9hY2s7CisKKworCisvKgorICogQ29tbWFuZCB0byBjb25maWd1cmUsIGVuYWJsZSBvciBkaXNhYmxlIHN5bmNocm9ub3VzIHRpbWVyMQorICovCisKKyNkZWZpbmUJVkZFX0NNRF9TWU5DX1RJTUVSMV9DRkcJCTB4MDAxOQorI2RlZmluZQlWRkVfQ01EX1NZTkNfVElNRVIxX0NGR19MRU4JXAorCXNpemVvZih2ZmVfY21kX3N5bmNfdGltZXIxX2NmZykKKworI2RlZmluZQlWRkVfQ01EX1NZTkNfVDFfQ0ZHX1BBUlQxX1RJTUVSX0RJUwkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9TWU5DX1QxX0NGR19QQVJUMV9USU1FUl9FTkEJMHgwMDAxCisjZGVmaW5lCVZGRV9DTURfU1lOQ19UMV9DRkdfUEFSVDFfUE9MX0hJR0gJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfU1lOQ19UMV9DRkdfUEFSVDFfUE9MX0xPVwkweDAwMDIKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CXN5bmNfdDFfY2ZnX3BhcnQxOworCXVuc2lnbmVkIGludAlzeW5jX3QxX2hfc3luY19jb3VudGRvd247CisJdW5zaWduZWQgaW50CXN5bmNfdDFfcGNsa19jb3VudGRvd247CisJdW5zaWduZWQgaW50CXN5bmNfdDFfZHVyYXRpb247Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9jbWRfc3luY190aW1lcjFfY2ZnOworCisKKy8qCisgKiBDb21tYW5kIHRvIGNvbmZpZ3VyZSwgZW5hYmxlIG9yIGRpc2FibGUgc3luY2hyb25vdXMgdGltZXIxCisgKi8KKworI2RlZmluZQlWRkVfQ01EX1NZTkNfVElNRVIyX0NGRwkJMHgwMDFBCisjZGVmaW5lCVZGRV9DTURfU1lOQ19USU1FUjJfQ0ZHX0xFTglcCisJc2l6ZW9mKHZmZV9jbWRfc3luY190aW1lcjJfY2ZnKQorCisjZGVmaW5lCVZGRV9DTURfU1lOQ19UMl9DRkdfUEFSVDFfVElNRVJfRElTCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX1NZTkNfVDJfQ0ZHX1BBUlQxX1RJTUVSX0VOQQkweDAwMDEKKyNkZWZpbmUJVkZFX0NNRF9TWU5DX1QyX0NGR19QQVJUMV9QT0xfSElHSAkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9TWU5DX1QyX0NGR19QQVJUMV9QT0xfTE9XCTB4MDAwMgorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJc3luY190Ml9jZmdfcGFydDE7CisJdW5zaWduZWQgaW50CXN5bmNfdDJfaF9zeW5jX2NvdW50ZG93bjsKKwl1bnNpZ25lZCBpbnQJc3luY190Ml9wY2xrX2NvdW50ZG93bjsKKwl1bnNpZ25lZCBpbnQJc3luY190Ml9kdXJhdGlvbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX2NtZF9zeW5jX3RpbWVyMl9jZmc7CisKKworLyoKKyAqIENvbW1hbmQgdG8gY29uZmlndXJlIGFuZCBzdGFydCBhc3luY2hyb25vdXMgdGltZXIxCisgKi8KKworI2RlZmluZQlWRkVfQ01EX0FTWU5DX1RJTUVSMV9TVEFSVAkweDAwMUIKKyNkZWZpbmUJVkZFX0NNRF9BU1lOQ19USU1FUjFfU1RBUlRfTEVOCVwKKwlzaXplb2YodmZlX2NtZF9hc3luY190aW1lcjFfc3RhcnQpCisKKyNkZWZpbmUJVkZFX0NNRF9BU1lOQ19UMV9QT0xBUklUWV9BX0hJR0gJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfQVNZTkNfVDFfUE9MQVJJVFlfQV9MT1cJCTB4MDAwMQorI2RlZmluZQlWRkVfQ01EX0FTWU5DX1QxX1BPTEFSSVRZX0JfSElHSAkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9BU1lOQ19UMV9QT0xBUklUWV9CX0xPVwkJMHgwMDAyCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworCXVuc2lnbmVkIGludAlhc3luY190MWFfY2ZnOworCXVuc2lnbmVkIGludAlhc3luY190MWJfY2ZnOworCXVuc2lnbmVkIGludAlhc3luY190MV9wb2xhcml0eTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX2NtZF9hc3luY190aW1lcjFfc3RhcnQ7CisKKworLyoKKyAqIENvbW1hbmQgdG8gY29uZmlndXJlIGFuZCBzdGFydCBhc3luY2hyb25vdXMgdGltZXIyCisgKi8KKworI2RlZmluZQlWRkVfQ01EX0FTWU5DX1RJTUVSMl9TVEFSVAkweDAwMUMKKyNkZWZpbmUJVkZFX0NNRF9BU1lOQ19USU1FUjJfU1RBUlRfTEVOCVwKKwlzaXplb2YodmZlX2NtZF9hc3luY190aW1lcjJfc3RhcnQpCisKKyNkZWZpbmUJVkZFX0NNRF9BU1lOQ19UMl9QT0xBUklUWV9BX0hJR0gJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfQVNZTkNfVDJfUE9MQVJJVFlfQV9MT1cJCTB4MDAwMQorI2RlZmluZQlWRkVfQ01EX0FTWU5DX1QyX1BPTEFSSVRZX0JfSElHSAkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9BU1lOQ19UMl9QT0xBUklUWV9CX0xPVwkJMHgwMDAyCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworCXVuc2lnbmVkIGludAlhc3luY190MmFfY2ZnOworCXVuc2lnbmVkIGludAlhc3luY190MmJfY2ZnOworCXVuc2lnbmVkIGludAlhc3luY190Ml9wb2xhcml0eTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX2NtZF9hc3luY190aW1lcjJfc3RhcnQ7CisKKworLyoKKyAqIENvbW1hbmQgdG8gcHJvZ3JhbSBwYXJ0aWFsIGNvbmZpZ3VyYXRpb25zIG9mIGF1dG8gZm9jdXMoYWYpCisgKi8KKworI2RlZmluZQlWRkVfQ01EX1NUQVRTX0FGX1VQREFURQkJMHgwMDFECisjZGVmaW5lCVZGRV9DTURfU1RBVFNfQUZfVVBEQVRFX0xFTglcCisJc2l6ZW9mKHZmZV9jbWRfc3RhdHNfYWZfdXBkYXRlKQorCisjZGVmaW5lCVZGRV9DTURfQUZfVVBEQVRFX1BBUlQxX1dJTkRPV19PTkUJMHgwMDAwMDAwMAorI2RlZmluZQlWRkVfQ01EX0FGX1VQREFURV9QQVJUMV9XSU5ET1dfTVVMVEkJMHg4MDAwMDAwMAorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJYWZfdXBkYXRlX3BhcnQxOworCXVuc2lnbmVkIGludAlhZl91cGRhdGVfcGFydDI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9jbWRfc3RhdHNfYWZfdXBkYXRlOworCisKKy8qCisgKiBDb21tYW5kIHRvIHByb2dyYW0gcGFydGlhbCBjZmcgb2Ygd2IgYW5kIGV4cAorICovCisKKyNkZWZpbmUJVkZFX0NNRF9TVEFUU19XQl9FWFBfVVBEQVRFCTB4MDAxRQorI2RlZmluZQlWRkVfQ01EX1NUQVRTX1dCX0VYUF9VUERBVEVfTEVOCVwKKwlzaXplb2YodmZlX2NtZF9zdGF0c193Yl9leHBfdXBkYXRlKQorCisjZGVmaW5lCVZGRV9DTURfV0JfRVhQX1VQREFURV9QQVJUMV9SRUdJT05TXzhfOAkJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfV0JfRVhQX1VQREFURV9QQVJUMV9SRUdJT05TXzE2XzE2CTB4MDAwMQorI2RlZmluZQlWRkVfQ01EX1dCX0VYUF9VUERBVEVfUEFSVDFfU1JFR0lPTlNfOF84CTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX1dCX0VYUF9VUERBVEVfUEFSVDFfU1JFR0lPTlNfNF80CTB4MDAwMgorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJd2JfZXhwX3VwZGF0ZV9wYXJ0MTsKKwl1bnNpZ25lZCBpbnQJd2JfZXhwX3VwZGF0ZV9wYXJ0MjsKKwl1bnNpZ25lZCBpbnQJd2JfZXhwX3VwZGF0ZV9wYXJ0MzsKKwl1bnNpZ25lZCBpbnQJd2JfZXhwX3VwZGF0ZV9wYXJ0NDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX2NtZF9zdGF0c193Yl9leHBfdXBkYXRlOworCisKKworLyoKKyAqIENvbW1hbmQgdG8gcmUgcHJvZ3JhbSB0aGUgQ0FNSUYgRlJBTUUgQ09ORklHIHNldHRpbmdzCisgKi8KKworI2RlZmluZQlWRkVfQ01EX1VQREFURV9DQU1JRl9GUkFNRV9DRkcJCTB4MDAxRgorI2RlZmluZQlWRkVfQ01EX1VQREFURV9DQU1JRl9GUkFNRV9DRkdfTEVOCVwKKwlzaXplb2YodmZlX2NtZF91cGRhdGVfY2FtaWZfZnJhbWVfY2ZnKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJY2FtaWZfZnJhbWVfY2ZnOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX3VwZGF0ZV9jYW1pZl9mcmFtZV9jZmc7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1dmZlbXNnLmggYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1dmZlbXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA1M2NmYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDV2ZmVtc2cuaApAQCAtMCwwICsxLDI5MCBAQAorI2lmbmRlZiBRRFNQNVZGRU1TR0lfSAorI2RlZmluZSBRRFNQNVZGRU1TR0lfSAorCisvKj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09KgorCisgICAgViBGIEUgICBJIE4gVCBFIFIgTiBBIEwgICBNIEUgUyBTIEEgRyBFIFMKKworR0VORVJBTCBERVNDUklQVElPTgorICBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW50aW9ucyBvZiBmb3JtYXQgYmxvY2tzIG9mIGNvbW1hbmRzCisgIHRoYXQgYXJlIHNlbnQgYnkgVkZFIFRhc2sKKworUkVGRVJFTkNFUworICBOb25lCisKK0VYVEVSTkFMSVpFRCBGVU5DVElPTlMKKyAgTm9uZQorCitDb3B5cmlnaHQoYykgMTk5MiAtIDIwMDggYnkgUVVBTENPTU0sIEluY29ycG9yYXRlZC4KKworVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKK21heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgICAgICAgICAgICAgICAgRURJVCBISVNUT1JZIEZPUiBGSUxFCisKK1RoaXMgc2VjdGlvbiBjb250YWlucyBjb21tZW50cyBkZXNjcmliaW5nIGNoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUuCitOb3RpY2UgdGhhdCBjaGFuZ2VzIGFyZSBsaXN0ZWQgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyLgorCiskSGVhZGVyOiAvL3NvdXJjZS9xY29tL3FjdC9tdWx0aW1lZGlhMi9BZHNwU3ZjLzdYWFgvcWRzcDVjbWQvdmlkZW8vcWRzcDV2ZmVtc2cuaCMyICQgJERhdGVUaW1lOiAyMDA4LzA3LzMwIDEwOjUwOjIzICQgJEF1dGhvcjogcGF2YW5yICQKK1JldmlzaW9uIEhpc3Rvcnk6CisKK3doZW4gICAgICAgd2hvICAgICB3aGF0LCB3aGVyZSwgd2h5CistLS0tLS0tLSAgIC0tLSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMDYvMTIvMDggICBzdiAgICAgIGluaXRpYWwgdmVyc2lvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworCisvKgorICogTWVzc2FnZSB0byBhY2tub3dsZWRnZSBDTURfVkZFX1JFU1QgY29tbWFuZAorICovCisKKyNkZWZpbmUJVkZFX01TR19SRVNFVF9BQ0sJMHgwMDAwCisjZGVmaW5lCVZGRV9NU0dfUkVTRVRfQUNLX0xFTglzaXplb2YodmZlX21zZ19yZXNldF9hY2spCisKK3R5cGVkZWYgc3RydWN0IHsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX21zZ19yZXNldF9hY2s7CisKKworLyoKKyAqIE1lc3NhZ2UgdG8gYWNrbm93bGVkZ2UgQ01EX1ZGRV9TVEFSVCBjb21tYW5kCisgKi8KKworI2RlZmluZQlWRkVfTVNHX1NUQVJUX0FDSwkweDAwMDEKKyNkZWZpbmUJVkZFX01TR19TVEFSVF9BQ0tfTEVOCXNpemVvZih2ZmVfbXNnX3N0YXJ0X2FjaykKKwordHlwZWRlZiBzdHJ1Y3QgeworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfbXNnX3N0YXJ0X2FjazsKKworLyoKKyAqIE1lc3NhZ2UgdG8gYWNrbm93bGVkZ2UgQ01EX1ZGRV9TVE9QCWNvbW1hbmQKKyAqLworCisjZGVmaW5lCVZGRV9NU0dfU1RPUF9BQ0sJMHgwMDAyCisjZGVmaW5lCVZGRV9NU0dfU1RPUF9BQ0tfTEVOCXNpemVvZih2ZmVfbXNnX3N0b3BfYWNrKQorCit0eXBlZGVmIHN0cnVjdCB7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9tc2dfc3RvcF9hY2s7CisKKworLyoKKyAqIE1lc3NhZ2UgdG8gYWNrbm93bGVkZ2UgQ01EX1ZGRV9VUERBVEUgY29tbWFuZAorICovCisKKyNkZWZpbmUJVkZFX01TR19VUERBVEVfQUNLCTB4MDAwMworI2RlZmluZQlWRkVfTVNHX1VQREFURV9BQ0tfTEVOCXNpemVvZih2ZmVfbXNnX3VwZGF0ZV9hY2spCisKK3R5cGVkZWYgc3RydWN0IHsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX21zZ191cGRhdGVfYWNrOworCisKKy8qCisgKiBNZXNzYWdlIHRvIG5vdGlmeSB0aGUgQVJNIHRoYXQgc25hcHNob3QgcHJvY2Vzc2luZyBpcyBjb21wbGV0ZQorICogYW5kIHRoYXQgdGhlIFZGRSBpcyBub3cgU1RBVEVfVkZFX0lETEUKKyAqLworCisjZGVmaW5lCVZGRV9NU0dfU05BUFNIT1RfRE9ORQkJMHgwMDA0CisjZGVmaW5lCVZGRV9NU0dfU05BUFNIT1RfRE9ORV9MRU4JXAorCXNpemVvZih2ZmVfbXNnX3NuYXBzaG90X2RvbmUpCisKK3R5cGVkZWYgc3RydWN0IHsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX21zZ19zbmFwc2hvdF9kb25lOworCisKKworLyoKKyAqIE1lc3NhZ2UgdG8gbm90aWZ5IEFSTSB0aGF0IGlsbGVnYWwgY21kIHdhcyByZWNlaXZlZCBhbmQKKyAqIHN5c3RlbSBpcyBpbiB0aGUgSURMRSBzdGF0ZQorICovCisKKyNkZWZpbmUJVkZFX01TR19JTExFR0FMX0NNRAkweDAwMDUKKyNkZWZpbmUJVkZFX01TR19JTExFR0FMX0NNRF9MRU4JXAorCXNpemVvZih2ZmVfbXNnX2lsbGVnYWxfY21kKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CXN0YXR1czsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX21zZ19pbGxlZ2FsX2NtZDsKKworCisvKgorICogTWVzc2FnZSB0byBub3RpZnkgQVJNIHRoYXQgb3AxIGJ1ZiBpcyBmdWxsIGFuZCByZWFkeQorICovCisKKyNkZWZpbmUJVkZFX01TR19PUDEJCTB4MDAwNgorI2RlZmluZQlWRkVfTVNHX09QMV9MRU4JCXNpemVvZih2ZmVfbXNnX29wMSkKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAlvcDFfYnVmX3lfYWRkcjsKKwl1bnNpZ25lZCBpbnQJb3AxX2J1Zl9jYmNyX2FkZHI7CisJdW5zaWduZWQgaW50CWJsYWNrX2xldmVsX2V2ZW5fY29sOworCXVuc2lnbmVkIGludAlibGFja19sZXZlbF9vZGRfY29sOworCXVuc2lnbmVkIGludAlkZWZlY3RfcGl4ZWxzX2RldGVjdGVkOworCXVuc2lnbmVkIGludAlhc2ZfbWF4X2VkZ2U7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9tc2dfb3AxOworCisKKy8qCisgKiBNZXNzYWdlIHRvIG5vdGlmeSBBUk0gdGhhdCBvcDIgYnVmIGlzIGZ1bGwgYW5kIHJlYWR5CisgKi8KKworI2RlZmluZQlWRkVfTVNHX09QMgkJMHgwMDA3CisjZGVmaW5lCVZGRV9NU0dfT1AyX0xFTgkJc2l6ZW9mKHZmZV9tc2dfb3AyKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CW9wMl9idWZfeV9hZGRyOworCXVuc2lnbmVkIGludAlvcDJfYnVmX2NiY3JfYWRkcjsKKwl1bnNpZ25lZCBpbnQJYmxhY2tfbGV2ZWxfZXZlbl9jb2w7CisJdW5zaWduZWQgaW50CWJsYWNrX2xldmVsX29kZF9jb2w7CisJdW5zaWduZWQgaW50CWRlZmVjdF9waXhlbHNfZGV0ZWN0ZWQ7CisJdW5zaWduZWQgaW50CWFzZl9tYXhfZWRnZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX21zZ19vcDI7CisKKworLyoKKyAqIE1lc3NhZ2UgdG8gbm90aWZ5IEFSTSB0aGF0IGF1dG9mb2N1cyhhZikgc3RhdHMgYXJlIHJlYWR5CisgKi8KKworI2RlZmluZQlWRkVfTVNHX1NUQVRTX0FGCTB4MDAwOAorI2RlZmluZQlWRkVfTVNHX1NUQVRTX0FGX0xFTglzaXplb2YodmZlX21zZ19zdGF0c19hZikKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAlhZl9zdGF0c19vcF9idWZmZXI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9tc2dfc3RhdHNfYWY7CisKKworLyoKKyAqIE1lc3NhZ2UgdG8gbm90aWZ5IEFSTSB0aGF0IHdoaXRlIGJhbGFuY2Uod2IpIGFuZCBleHBvc3VyZSAoZXhwKQorICogc3RhdHMgYXJlIHJlYWR5CisgKi8KKworI2RlZmluZQlWRkVfTVNHX1NUQVRTX1dCX0VYUAkJMHgwMDA5CisjZGVmaW5lCVZGRV9NU0dfU1RBVFNfV0JfRVhQX0xFTglcCisJc2l6ZW9mKHZmZV9tc2dfc3RhdHNfd2JfZXhwKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CXdiX2V4cF9zdGF0c19vcF9idWY7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9tc2dfc3RhdHNfd2JfZXhwOworCisKKy8qCisgKiBNZXNzYWdlIHRvIG5vdGlmeSB0aGUgQVJNIHRoYXQgaGlzdG9ncmFtKGhnKSBzdGF0cyBhcmUgcmVhZHkKKyAqLworCisjZGVmaW5lCVZGRV9NU0dfU1RBVFNfSEcJMHgwMDBBCisjZGVmaW5lCVZGRV9NU0dfU1RBVFNfSEdfTEVOCXNpemVvZih2ZmVfbXNnX3N0YXRzX2hnKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWhnX3N0YXRzX29wX2J1ZjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX21zZ19zdGF0c19oZzsKKworCisvKgorICogTWVzc2FnZSB0byBub3RpZnkgdGhlIEFSTSB0aGF0IGVwb2NoMSBldmVudCBvY2N1cnJlZCBpbiB0aGUgQ0FNSUYKKyAqLworCisjZGVmaW5lCVZGRV9NU0dfRVBPQ0gxCQkweDAwMEIKKyNkZWZpbmUJVkZFX01TR19FUE9DSDFfTEVOCXNpemVvZih2ZmVfbXNnX2Vwb2NoMSkKKwordHlwZWRlZiBzdHJ1Y3QgeworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfbXNnX2Vwb2NoMTsKKworCisvKgorICogTWVzc2FnZSB0byBub3RpZnkgdGhlIEFSTSB0aGF0IGVwb2NoMiBldmVudCBvY2N1cnJlZCBpbiB0aGUgQ0FNSUYKKyAqLworCisjZGVmaW5lCVZGRV9NU0dfRVBPQ0gyCQkweDAwMEMKKyNkZWZpbmUJVkZFX01TR19FUE9DSDJfTEVOCXNpemVvZih2ZmVfbXNnX2Vwb2NoMikKKwordHlwZWRlZiBzdHJ1Y3QgeworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfbXNnX2Vwb2NoMjsKKworCisvKgorICogTWVzc2FnZSB0byBub3RpZnkgdGhlIEFSTSB0aGF0IHN5bmMgdGltZXIxIG9wIGlzIGNvbXBsZXRlZAorICovCisKKyNkZWZpbmUJVkZFX01TR19TWU5DX1QxX0RPTkUJCTB4MDAwRAorI2RlZmluZQlWRkVfTVNHX1NZTkNfVDFfRE9ORV9MRU4Jc2l6ZW9mKHZmZV9tc2dfc3luY190MV9kb25lKQorCit0eXBlZGVmIHN0cnVjdCB7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9tc2dfc3luY190MV9kb25lOworCisKKy8qCisgKiBNZXNzYWdlIHRvIG5vdGlmeSB0aGUgQVJNIHRoYXQgc3luYyB0aW1lcjIgb3AgaXMgY29tcGxldGVkCisgKi8KKworI2RlZmluZQlWRkVfTVNHX1NZTkNfVDJfRE9ORQkJMHgwMDBFCisjZGVmaW5lCVZGRV9NU0dfU1lOQ19UMl9ET05FX0xFTglzaXplb2YodmZlX21zZ19zeW5jX3QyX2RvbmUpCisKK3R5cGVkZWYgc3RydWN0IHsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX21zZ19zeW5jX3QyX2RvbmU7CisKKworLyoKKyAqIE1lc3NhZ2UgdG8gbm90aWZ5IHRoZSBBUk0gdGhhdCBhc3luYyB0MSBvcGVyYXRpb24gY29tcGxldGVkCisgKi8KKworI2RlZmluZQlWRkVfTVNHX0FTWU5DX1QxX0RPTkUJCTB4MDAwRgorI2RlZmluZQlWRkVfTVNHX0FTWU5DX1QxX0RPTkVfTEVOCXNpemVvZih2ZmVfbXNnX2FzeW5jX3QxX2RvbmUpCisKK3R5cGVkZWYgc3RydWN0IHsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX21zZ19hc3luY190MV9kb25lOworCisKKworLyoKKyAqIE1lc3NhZ2UgdG8gbm90aWZ5IHRoZSBBUk0gdGhhdCBhc3luYyB0MiBvcGVyYXRpb24gY29tcGxldGVkCisgKi8KKworI2RlZmluZQlWRkVfTVNHX0FTWU5DX1QyX0RPTkUJCTB4MDAxMAorI2RlZmluZQlWRkVfTVNHX0FTWU5DX1QyX0RPTkVfTEVOCXNpemVvZih2ZmVfbXNnX2FzeW5jX3QyX2RvbmUpCisKK3R5cGVkZWYgc3RydWN0IHsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX21zZ19hc3luY190Ml9kb25lOworCisKKworLyoKKyAqIE1lc3NhZ2UgdG8gbm90aWZ5IHRoZSBBUk0gdGhhdCBhbiBlcnJvciBoYXMgb2NjdXJyZWQKKyAqLworCisjZGVmaW5lCVZGRV9NU0dfRVJST1IJCTB4MDAxMQorI2RlZmluZQlWRkVfTVNHX0VSUk9SX0xFTglzaXplb2YodmZlX21zZ19lcnJvcikKKworI2RlZmluZQlWRkVfTVNHX0VSUl9DT05EX05PX0NBTUlGX0VSUgkJMHgwMDAwCisjZGVmaW5lCVZGRV9NU0dfRVJSX0NPTkRfQ0FNSUZfRVJSCQkweDAwMDEKKyNkZWZpbmUJVkZFX01TR19FUlJfQ09ORF9PUDFfWV9OT19CVVNfT0YJMHgwMDAwCisjZGVmaW5lCVZGRV9NU0dfRVJSX0NPTkRfT1AxX1lfQlVTX09GCQkweDAwMDIKKyNkZWZpbmUJVkZFX01TR19FUlJfQ09ORF9PUDFfQ0JDUl9OT19CVVNfT0YJMHgwMDAwCisjZGVmaW5lCVZGRV9NU0dfRVJSX0NPTkRfT1AxX0NCQ1JfQlVTX09GCTB4MDAwNAorI2RlZmluZQlWRkVfTVNHX0VSUl9DT05EX09QMl9ZX05PX0JVU19PRgkweDAwMDAKKyNkZWZpbmUJVkZFX01TR19FUlJfQ09ORF9PUDJfWV9CVVNfT0YJCTB4MDAwOAorI2RlZmluZQlWRkVfTVNHX0VSUl9DT05EX09QMl9DQkNSX05PX0JVU19PRgkweDAwMDAKKyNkZWZpbmUJVkZFX01TR19FUlJfQ09ORF9PUDJfQ0JDUl9CVVNfT0YJMHgwMDEwCisjZGVmaW5lCVZGRV9NU0dfRVJSX0NPTkRfQUZfTk9fQlVTX09GCQkweDAwMDAKKyNkZWZpbmUJVkZFX01TR19FUlJfQ09ORF9BRl9CVVNfT0YJCTB4MDAyMAorI2RlZmluZQlWRkVfTVNHX0VSUl9DT05EX1dCX0VYUF9OT19CVVNfT0YJMHgwMDAwCisjZGVmaW5lCVZGRV9NU0dfRVJSX0NPTkRfV0JfRVhQX0JVU19PRgkJMHgwMDQwCisjZGVmaW5lCVZGRV9NU0dfRVJSX0NPTkRfTk9fQVhJX0VSUgkJMHgwMDAwCisjZGVmaW5lCVZGRV9NU0dfRVJSX0NPTkRfQVhJX0VSUgkJMHgwMDgwCisKKyNkZWZpbmUJVkZFX01TR19DQU1JRl9TVFNfSURMRQkJCTB4MDAwMAorI2RlZmluZQlWRkVfTVNHX0NBTUlGX1NUU19DQVBUVVJFX0RBVEEJCTB4MDAwMQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWVycl9jb25kOworCXVuc2lnbmVkIGludAljYW1pZl9zdHM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9tc2dfZXJyb3I7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tZWRpYS9tc21fY2FtZXJhLmggYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tZWRpYS9tc21fY2FtZXJhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk4MTJkNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21lZGlhL21zbV9jYW1lcmEuaApAQCAtMCwwICsxLDM4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFFVQUxDT01NIEluY29ycG9yYXRlZC4KKyAqLworI2lmbmRlZiBfX0xJTlVYX01TTV9DQU1FUkFfSAorI2RlZmluZSBfX0xJTlVYX01TTV9DQU1FUkFfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjZGVmaW5lIE1TTV9DQU1fSU9DVExfTUFHSUMgJ20nCisKKyNkZWZpbmUgTVNNX0NBTV9JT0NUTF9HRVRfU0VOU09SX0lORk8gXAorCV9JT1IoTVNNX0NBTV9JT0NUTF9NQUdJQywgMSwgc3RydWN0IG1zbV9jYW1zZW5zb3JfaW5mbyAqKQorCisjZGVmaW5lIE1TTV9DQU1fSU9DVExfUkVHSVNURVJfUE1FTSBcCisJX0lPVyhNU01fQ0FNX0lPQ1RMX01BR0lDLCAyLCBzdHJ1Y3QgbXNtX3BtZW1faW5mbyAqKQorCisjZGVmaW5lIE1TTV9DQU1fSU9DVExfVU5SRUdJU1RFUl9QTUVNIFwKKwlfSU9XKE1TTV9DQU1fSU9DVExfTUFHSUMsIDMsIHVuc2lnbmVkKQorCisjZGVmaW5lIE1TTV9DQU1fSU9DVExfQ1RSTF9DT01NQU5EIFwKKwlfSU9XKE1TTV9DQU1fSU9DVExfTUFHSUMsIDQsIHN0cnVjdCBtc21fY3RybF9jbWQgKikKKworI2RlZmluZSBNU01fQ0FNX0lPQ1RMX0NPTkZJR19WRkUgIFwKKwlfSU9XKE1TTV9DQU1fSU9DVExfTUFHSUMsIDUsIHN0cnVjdCBtc21fY2FtZXJhX3ZmZV9jZmdfY21kICopCisKKyNkZWZpbmUgTVNNX0NBTV9JT0NUTF9HRVRfU1RBVFMgXAorCV9JT1IoTVNNX0NBTV9JT0NUTF9NQUdJQywgNiwgc3RydWN0IG1zbV9jYW1lcmFfc3RhdHNfZXZlbnRfY3RybCAqKQorCisjZGVmaW5lIE1TTV9DQU1fSU9DVExfR0VURlJBTUUgXAorCV9JT1IoTVNNX0NBTV9JT0NUTF9NQUdJQywgNywgc3RydWN0IG1zbV9jYW1lcmFfZ2V0X2ZyYW1lICopCisKKyNkZWZpbmUgTVNNX0NBTV9JT0NUTF9FTkFCTEVfVkZFIFwKKwlfSU9XKE1TTV9DQU1fSU9DVExfTUFHSUMsIDgsIHN0cnVjdCBjYW1lcmFfZW5hYmxlX2NtZCAqKQorCisjZGVmaW5lIE1TTV9DQU1fSU9DVExfQ1RSTF9DTURfRE9ORSBcCisJX0lPVyhNU01fQ0FNX0lPQ1RMX01BR0lDLCA5LCBzdHJ1Y3QgY2FtZXJhX2NtZCAqKQorCisjZGVmaW5lIE1TTV9DQU1fSU9DVExfQ09ORklHX0NNRCBcCisJX0lPVyhNU01fQ0FNX0lPQ1RMX01BR0lDLCAxMCwgc3RydWN0IGNhbWVyYV9jbWQgKikKKworI2RlZmluZSBNU01fQ0FNX0lPQ1RMX0RJU0FCTEVfVkZFIFwKKwlfSU9XKE1TTV9DQU1fSU9DVExfTUFHSUMsIDExLCBzdHJ1Y3QgY2FtZXJhX2VuYWJsZV9jbWQgKikKKworI2RlZmluZSBNU01fQ0FNX0lPQ1RMX1BBRF9SRUdfUkVTRVQyIFwKKwlfSU9XKE1TTV9DQU1fSU9DVExfTUFHSUMsIDEyLCBzdHJ1Y3QgY2FtZXJhX2VuYWJsZV9jbWQgKikKKworI2RlZmluZSBNU01fQ0FNX0lPQ1RMX1ZGRV9BUFBTX1JFU0VUIFwKKwlfSU9XKE1TTV9DQU1fSU9DVExfTUFHSUMsIDEzLCBzdHJ1Y3QgY2FtZXJhX2VuYWJsZV9jbWQgKikKKworI2RlZmluZSBNU01fQ0FNX0lPQ1RMX1JFTEVBU0VfRlJBTUVfQlVGRkVSIFwKKwlfSU9XKE1TTV9DQU1fSU9DVExfTUFHSUMsIDE0LCBzdHJ1Y3QgY2FtZXJhX2VuYWJsZV9jbWQgKikKKworI2RlZmluZSBNU01fQ0FNX0lPQ1RMX1JFTEVBU0VfU1RBVFNfQlVGRkVSIFwKKwlfSU9XKE1TTV9DQU1fSU9DVExfTUFHSUMsIDE1LCBzdHJ1Y3QgbXNtX3N0YXRzX2J1ZiAqKQorCisjZGVmaW5lIE1TTV9DQU1fSU9DVExfQVhJX0NPTkZJRyBcCisJX0lPVyhNU01fQ0FNX0lPQ1RMX01BR0lDLCAxNiwgc3RydWN0IG1zbV9jYW1lcmFfdmZlX2NmZ19jbWQgKikKKworI2RlZmluZSBNU01fQ0FNX0lPQ1RMX0dFVF9QSUNUVVJFIFwKKwlfSU9XKE1TTV9DQU1fSU9DVExfTUFHSUMsIDE3LCBzdHJ1Y3QgbXNtX2NhbWVyYV9jdHJsX2NtZCAqKQorCisjZGVmaW5lIE1TTV9DQU1fSU9DVExfU0VUX0NST1AgXAorCV9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgMTgsIHN0cnVjdCBjcm9wX2luZm8gKikKKworI2RlZmluZSBNU01fQ0FNX0lPQ1RMX1BJQ1RfUFAgXAorCV9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgMTksIHVpbnQ4X3QgKikKKworI2RlZmluZSBNU01fQ0FNX0lPQ1RMX1BJQ1RfUFBfRE9ORSBcCisJX0lPVyhNU01fQ0FNX0lPQ1RMX01BR0lDLCAyMCwgc3RydWN0IG1zbV9zbmFwc2hvdF9wcF9zdGF0dXMgKikKKworI2RlZmluZSBNU01fQ0FNX0lPQ1RMX1NFTlNPUl9JT19DRkcgXAorCV9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgMjEsIHN0cnVjdCBzZW5zb3JfY2ZnX2RhdGEgKikKKworI2RlZmluZSBNU01fQ0FNRVJBX0xFRF9PRkYgIDAKKyNkZWZpbmUgTVNNX0NBTUVSQV9MRURfTE9XICAxCisjZGVmaW5lIE1TTV9DQU1FUkFfTEVEX0hJR0ggMgorCisjZGVmaW5lIE1TTV9DQU1fSU9DVExfRkxBU0hfTEVEX0NGRyBcCisJX0lPVyhNU01fQ0FNX0lPQ1RMX01BR0lDLCAyMiwgdW5zaWduZWQgKikKKworI2RlZmluZSBNU01fQ0FNX0lPQ1RMX1VOQkxPQ0tfUE9MTF9GUkFNRSBcCisJX0lPKE1TTV9DQU1fSU9DVExfTUFHSUMsIDIzKQorCisjZGVmaW5lIE1TTV9DQU1fSU9DVExfQ1RSTF9DT01NQU5EXzIgXAorCV9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgMjQsIHN0cnVjdCBtc21fY3RybF9jbWQgKikKKworI2RlZmluZSBNQVhfU0VOU09SX05VTSAgMworI2RlZmluZSBNQVhfU0VOU09SX05BTUUgMzIKKworI2RlZmluZSBNU01fQ0FNX0NUUkxfQ01EX0RPTkUgIDAKKyNkZWZpbmUgTVNNX0NBTV9TRU5TT1JfVkZFX0NNRCAxCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIHN0cnVjdHVyZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBkZWZpbmUgZml2ZSB0eXBlIG9mIHN0cnVjdHVyZXMgZm9yIHVzZXJzcGFjZSA8PT0+IGtlcm5lbAorICogc3BhY2UgY29tbXVuaWNhdGlvbjoKKyAqIGNvbW1hbmQgMSAtIDIgYXJlIGZyb20gdXNlcnNwYWNlID09PiBrZXJuZWwKKyAqIGNvbW1hbmQgMyAtIDQgYXJlIGZyb20ga2VybmVsID09PiB1c2Vyc3BhY2UKKyAqCisgKiAxLiBjb250cm9sIGNvbW1hbmQ6IGNvbnRyb2wgY29tbWFuZChmcm9tIGNvbnRyb2wgdGhyZWFkKSwKKyAqICAgICAgICAgICAgICAgICAgICAgY29udHJvbCBzdGF0dXMgKGZyb20gY29uZmlnIHRocmVhZCk7CisgKi8KK3N0cnVjdCBtc21fY3RybF9jbWQgeworCXVpbnQxNl90IHR5cGU7CisJdWludDE2X3QgbGVuZ3RoOworCXZvaWQgKnZhbHVlOworCXVpbnQxNl90IHN0YXR1czsKKwl1aW50MzJfdCB0aW1lb3V0X21zOworCWludCByZXNwX2ZkOyAvKiBGSVhNRTogdG8gYmUgdXNlZCBieSB0aGUga2VybmVsLCBwYXNzLXRocm91Z2ggZm9yIG5vdyAqLworfTsKKworc3RydWN0IG1zbV92ZmVfZXZ0X21zZyB7CisJdW5zaWduZWQgc2hvcnQgdHlwZTsgLyogMSA9PSBldmVudCAoUlBDKSwgMCA9PSBtZXNzYWdlIChhZHNwKSAqLworCXVuc2lnbmVkIHNob3J0IG1zZ19pZDsKKwl1bnNpZ25lZCBpbnQgbGVuOyAvKiBzaXplIGluLCBudW1iZXIgb2YgYnl0ZXMgb3V0ICovCisJdm9pZCAqZGF0YTsKK307CisKKyNkZWZpbmUgTVNNX0NBTV9SRVNQX0NUUkwgICAgICAgICAwCisjZGVmaW5lIE1TTV9DQU1fUkVTUF9TVEFUX0VWVF9NU0cgMQorI2RlZmluZSBNU01fQ0FNX1JFU1BfVjRMMiAgICAgICAgIDIKKyNkZWZpbmUgTVNNX0NBTV9SRVNQX01BWCAgICAgICAgICAzCisKKy8qIHRoaXMgb25lIGlzIHVzZWQgdG8gc2VuZCBjdHJsL3N0YXR1cyB1cCB0byBjb25maWcgdGhyZWFkICovCitzdHJ1Y3QgbXNtX3N0YXRzX2V2ZW50X2N0cmwgeworCS8qIDAgLSBjdHJsX2NtZCBmcm9tIGNvbnRyb2wgdGhyZWFkLAorCSAqIDEgLSBzdGF0cy9ldmVudCBrZXJuZWwsCisJICogMiAtIFY0TCBjb250cm9sIG9yIHJlYWQgcmVxdWVzdCAqLworCWludCByZXNwdHlwZTsKKwlpbnQgdGltZW91dF9tczsKKwlzdHJ1Y3QgbXNtX2N0cmxfY21kIGN0cmxfY21kOworCS8qIHN0cnVjdCAgdmZlX2V2ZW50X3QgIHN0YXRzX2V2ZW50OyAqLworCXN0cnVjdCBtc21fdmZlX2V2dF9tc2cgc3RhdHNfZXZlbnQ7Cit9OworCisvKiAyLiBjb25maWcgY29tbWFuZDogY29uZmlnIGNvbW1hbmQoZnJvbSBjb25maWcgdGhyZWFkKTsgKi8KK3N0cnVjdCBtc21fY2FtZXJhX2NmZ19jbWQgeworCS8qIHdoYXQgdG8gY29uZmlnOgorCSAqIDEgLSBzZW5zb3IgY29uZmlnLCAyIC0gdmZlIGNvbmZpZyAqLworCXVpbnQxNl90IGNmZ190eXBlOworCisJLyogc2Vuc29yIGNvbmZpZyB0eXBlICovCisJdWludDE2X3QgY21kX3R5cGU7CisJdWludDE2X3QgcXVldWU7CisJdWludDE2X3QgbGVuZ3RoOworCXZvaWQgKnZhbHVlOworfTsKKworI2RlZmluZSBDTURfR0VORVJBTAkJCTAKKyNkZWZpbmUgQ01EX0FYSV9DRkdfT1VUMQkJMQorI2RlZmluZSBDTURfQVhJX0NGR19TTkFQX08xX0FORF9PMgkyCisjZGVmaW5lIENNRF9BWElfQ0ZHX09VVDIJCTMKKyNkZWZpbmUgQ01EX1BJQ1RfVF9BWElfQ0ZHCQk0CisjZGVmaW5lIENNRF9QSUNUX01fQVhJX0NGRwkJNQorI2RlZmluZSBDTURfUkFXX1BJQ1RfQVhJX0NGRwkJNgorI2RlZmluZSBDTURfU1RBVFNfQVhJX0NGRwkJNworI2RlZmluZSBDTURfU1RBVFNfQUZfQVhJX0NGRwkJOAorI2RlZmluZSBDTURfRlJBTUVfQlVGX1JFTEVBU0UJCTkKKyNkZWZpbmUgQ01EX1BSRVZfQlVGX0NGRwkJMTAKKyNkZWZpbmUgQ01EX1NOQVBfQlVGX1JFTEVBU0UJCTExCisjZGVmaW5lIENNRF9TTkFQX0JVRl9DRkcJCTEyCisjZGVmaW5lIENNRF9TVEFUU19ESVNBQkxFCQkxMworI2RlZmluZSBDTURfU1RBVFNfRU5BQkxFCQkxNAorI2RlZmluZSBDTURfU1RBVFNfQUZfRU5BQkxFCQkxNQorI2RlZmluZSBDTURfU1RBVFNfQlVGX1JFTEVBU0UJCTE2CisjZGVmaW5lIENNRF9TVEFUU19BRl9CVUZfUkVMRUFTRQkxNworI2RlZmluZSBVUERBVEVfU1RBVFNfSU5WQUxJRAkJMTgKKworLyogdmZlIGNvbmZpZyBjb21tYW5kOiBjb25maWcgY29tbWFuZChmcm9tIGNvbmZpZyB0aHJlYWQpKi8KK3N0cnVjdCBtc21fdmZlX2NmZ19jbWQgeworCWludCBjbWRfdHlwZTsKKwl1aW50MTZfdCBsZW5ndGg7CisJdm9pZCAqdmFsdWU7Cit9OworCisjZGVmaW5lIE1BWF9DQU1FUkFfRU5BQkxFX05BTUVfTEVOIDMyCitzdHJ1Y3QgY2FtZXJhX2VuYWJsZV9jbWQgeworCWNoYXIgbmFtZVtNQVhfQ0FNRVJBX0VOQUJMRV9OQU1FX0xFTl07Cit9OworCisjZGVmaW5lIE1TTV9QTUVNX09VVFBVVDEJCTAKKyNkZWZpbmUgTVNNX1BNRU1fT1VUUFVUMgkJMQorI2RlZmluZSBNU01fUE1FTV9PVVRQVVQxX09VVFBVVDIJMgorI2RlZmluZSBNU01fUE1FTV9USFVNQkFJTAkJMworI2RlZmluZSBNU01fUE1FTV9NQUlOSU1HCQk0CisjZGVmaW5lIE1TTV9QTUVNX1JBV19NQUlOSU1HCQk1CisjZGVmaW5lIE1TTV9QTUVNX0FFQ19BV0IJCTYKKyNkZWZpbmUgTVNNX1BNRU1fQUYJCQk3CisjZGVmaW5lIE1TTV9QTUVNX01BWAkJCTgKKworI2RlZmluZSBGUkFNRV9QUkVWSUVXX09VVFBVVDEJCTAKKyNkZWZpbmUgRlJBTUVfUFJFVklFV19PVVRQVVQyCQkxCisjZGVmaW5lIEZSQU1FX1NOQVBTSE9UCQkJMgorI2RlZmluZSBGUkFNRV9USFVNQkFJTAkJCTMKKyNkZWZpbmUgRlJBTUVfUkFXX1NOQVBTSE9UCQk0CisjZGVmaW5lIEZSQU1FX01BWAkJCTUKKworc3RydWN0IG1zbV9wbWVtX2luZm8geworCWludCB0eXBlOworCWludCBmZDsKKwl2b2lkICp2YWRkcjsKKwl1aW50MzJfdCB5X29mZjsKKwl1aW50MzJfdCBjYmNyX29mZjsKKwl1aW50OF90IGFjdGl2ZTsKK307CisKK3N0cnVjdCBvdXRwdXRDZmcgeworCXVpbnQzMl90IGhlaWdodDsKKwl1aW50MzJfdCB3aWR0aDsKKworCXVpbnQzMl90IHdpbmRvd19oZWlnaHRfZmlyc3RsaW5lOworCXVpbnQzMl90IHdpbmRvd19oZWlnaHRfbGFzdGxpbmU7Cit9OworCisjZGVmaW5lIE9VVFBVVF8xCTAKKyNkZWZpbmUgT1VUUFVUXzIJMQorI2RlZmluZSBPVVRQVVRfMV9BTkRfMgkyCisjZGVmaW5lIENBTUlGX1RPX0FYSV9WSUFfT1VUUFVUXzIJCTMKKyNkZWZpbmUgT1VUUFVUXzFfQU5EX0NBTUlGX1RPX0FYSV9WSUFfT1VUUFVUXzIJNAorI2RlZmluZSBPVVRQVVRfMl9BTkRfQ0FNSUZfVE9fQVhJX1ZJQV9PVVRQVVRfMQk1CisjZGVmaW5lIExBU1RfQVhJX09VVFBVVF9NT0RFX0VOVU0gPSBPVVRQVVRfMl9BTkRfQ0FNSUZfVE9fQVhJX1ZJQV9PVVRQVVRfMSA2CisKKyNkZWZpbmUgTVNNX0ZSQU1FX1BSRVZfMQkwCisjZGVmaW5lIE1TTV9GUkFNRV9QUkVWXzIJMQorI2RlZmluZSBNU01fRlJBTUVfRU5DCQkyCisKK3N0cnVjdCBtc21fZnJhbWUgeworCWludCBwYXRoOworCXVuc2lnbmVkIGxvbmcgYnVmZmVyOworCXVpbnQzMl90IHlfb2ZmOworCXVpbnQzMl90IGNiY3Jfb2ZmOworCWludCBmZDsKKworCXZvaWQgKmNyb3BpbmZvOworCWludCBjcm9wbGVuOworfTsKKworI2RlZmluZSBTVEFUX0FFQVcJMAorI2RlZmluZSBTVEFUX0FGCQkxCisjZGVmaW5lIFNUQVRfTUFYCTIKKworc3RydWN0IG1zbV9zdGF0c19idWYgeworCWludCB0eXBlOworCXVuc2lnbmVkIGxvbmcgYnVmZmVyOworCWludCBmZDsKK307CisKKyNkZWZpbmUgTVNNX1Y0TDJfVklEX0NBUF9UWVBFCTAKKyNkZWZpbmUgTVNNX1Y0TDJfU1RSRUFNX09OCTEKKyNkZWZpbmUgTVNNX1Y0TDJfU1RSRUFNX09GRgkyCisjZGVmaW5lIE1TTV9WNEwyX1NOQVBTSE9UCTMKKyNkZWZpbmUgTVNNX1Y0TDJfUVVFUllfQ1RSTAk0CisjZGVmaW5lIE1TTV9WNEwyX0dFVF9DVFJMCTUKKyNkZWZpbmUgTVNNX1Y0TDJfU0VUX0NUUkwJNgorI2RlZmluZSBNU01fVjRMMl9RVUVSWQkJNworI2RlZmluZSBNU01fVjRMMl9NQVgJCTgKKworc3RydWN0IGNyb3BfaW5mbyB7CisJdm9pZCAqaW5mbzsKKwlpbnQgbGVuOworfTsKKworc3RydWN0IG1zbV9wb3N0cHJvYyB7CisJaW50IGZ0bnVtOworCXN0cnVjdCBtc21fZnJhbWUgZnRodW1uYWlsOworCWludCBmbW51bTsKKwlzdHJ1Y3QgbXNtX2ZyYW1lIGZtYWluOworfTsKKworc3RydWN0IG1zbV9zbmFwc2hvdF9wcF9zdGF0dXMgeworCXZvaWQgKnN0YXR1czsKK307CisKKyNkZWZpbmUgQ0ZHX1NFVF9NT0RFCQkJMAorI2RlZmluZSBDRkdfU0VUX0VGRkVDVAkJCTEKKyNkZWZpbmUgQ0ZHX1NUQVJUCQkJMgorI2RlZmluZSBDRkdfUFdSX1VQCQkJMworI2RlZmluZSBDRkdfUFdSX0RPV04JCQk0CisjZGVmaW5lIENGR19XUklURV9FWFBPU1VSRV9HQUlOCQk1CisjZGVmaW5lIENGR19TRVRfREVGQVVMVF9GT0NVUwkJNgorI2RlZmluZSBDRkdfTU9WRV9GT0NVUwkJCTcKKyNkZWZpbmUgQ0ZHX1JFR0lTVEVSX1RPX1JFQUxfR0FJTgk4CisjZGVmaW5lIENGR19SRUFMX1RPX1JFR0lTVEVSX0dBSU4JOQorI2RlZmluZSBDRkdfU0VUX0ZQUwkJCTEwCisjZGVmaW5lIENGR19TRVRfUElDVF9GUFMJCTExCisjZGVmaW5lIENGR19TRVRfQlJJR0hUTkVTUwkJMTIKKyNkZWZpbmUgQ0ZHX1NFVF9DT05UUkFTVAkJMTMKKyNkZWZpbmUgQ0ZHX1NFVF9aT09NCQkJMTQKKyNkZWZpbmUgQ0ZHX1NFVF9FWFBPU1VSRV9NT0RFCQkxNQorI2RlZmluZSBDRkdfU0VUX1dCCQkJMTYKKyNkZWZpbmUgQ0ZHX1NFVF9BTlRJQkFORElORwkJMTcKKyNkZWZpbmUgQ0ZHX1NFVF9FWFBfR0FJTgkJMTgKKyNkZWZpbmUgQ0ZHX1NFVF9QSUNUX0VYUF9HQUlOCQkxOQorI2RlZmluZSBDRkdfU0VUX0xFTlNfU0hBRElORwkJMjAKKyNkZWZpbmUgQ0ZHX0dFVF9QSUNUX0ZQUwkJMjEKKyNkZWZpbmUgQ0ZHX0dFVF9QUkVWX0xfUEYJCTIyCisjZGVmaW5lIENGR19HRVRfUFJFVl9QX1BMCQkyMworI2RlZmluZSBDRkdfR0VUX1BJQ1RfTF9QRgkJMjQKKyNkZWZpbmUgQ0ZHX0dFVF9QSUNUX1BfUEwJCTI1CisjZGVmaW5lIENGR19HRVRfQUZfTUFYX1NURVBTCQkyNgorI2RlZmluZSBDRkdfR0VUX1BJQ1RfTUFYX0VYUF9MQwkJMjcKKyNkZWZpbmUgQ0ZHX01BWAkJCQkyOAorCisjZGVmaW5lIE1PVkVfTkVBUgkwCisjZGVmaW5lIE1PVkVfRkFSCTEKKworI2RlZmluZSBTRU5TT1JfUFJFVklFV19NT0RFCQkwCisjZGVmaW5lIFNFTlNPUl9TTkFQU0hPVF9NT0RFCQkxCisjZGVmaW5lIFNFTlNPUl9SQVdfU05BUFNIT1RfTU9ERQkyCisKKyNkZWZpbmUgU0VOU09SX1FUUl9TSVpFCQkJMAorI2RlZmluZSBTRU5TT1JfRlVMTF9TSVpFCQkxCisjZGVmaW5lIFNFTlNPUl9JTlZBTElEX1NJWkUJCTIKKworI2RlZmluZSBDQU1FUkFfRUZGRUNUX09GRgkJMAorI2RlZmluZSBDQU1FUkFfRUZGRUNUX01PTk8JCTEKKyNkZWZpbmUgQ0FNRVJBX0VGRkVDVF9ORUdBVElWRQkJMgorI2RlZmluZSBDQU1FUkFfRUZGRUNUX1NPTEFSSVpFCQkzCisjZGVmaW5lIENBTUVSQV9FRkZFQ1RfUEFTVEVMCQk0CisjZGVmaW5lIENBTUVSQV9FRkZFQ1RfTU9TQUlDCQk1CisjZGVmaW5lIENBTUVSQV9FRkZFQ1RfUkVTSVpFCQk2CisjZGVmaW5lIENBTUVSQV9FRkZFQ1RfU0VQSUEJCTcKKyNkZWZpbmUgQ0FNRVJBX0VGRkVDVF9QT1NURVJJWkUJCTgKKyNkZWZpbmUgQ0FNRVJBX0VGRkVDVF9XSElURUJPQVJECTkKKyNkZWZpbmUgQ0FNRVJBX0VGRkVDVF9CTEFDS0JPQVJECTEwCisjZGVmaW5lIENBTUVSQV9FRkZFQ1RfQVFVQQkJMTEKKyNkZWZpbmUgQ0FNRVJBX0VGRkVDVF9NQVgJCTEyCisKK3N0cnVjdCBzZW5zb3JfcGljdF9mcHMgeworCXVpbnQxNl90IHByZXZmcHM7CisJdWludDE2X3QgcGljdGZwczsKK307CisKK3N0cnVjdCBleHBfZ2Fpbl9jZmcgeworCXVpbnQxNl90IGdhaW47CisJdWludDMyX3QgbGluZTsKK307CisKK3N0cnVjdCBmb2N1c19jZmcgeworCWludDMyX3Qgc3RlcHM7CisJaW50IGRpcjsKK307CisKK3N0cnVjdCBmcHNfY2ZnIHsKKwl1aW50MTZfdCBmX211bHQ7CisJdWludDE2X3QgZnBzX2RpdjsKKwl1aW50MzJfdCBwaWN0X2Zwc19kaXY7Cit9OworCitzdHJ1Y3Qgc2Vuc29yX2NmZ19kYXRhIHsKKwlpbnQgY2ZndHlwZTsKKwlpbnQgbW9kZTsKKwlpbnQgcnM7CisJdWludDhfdCBtYXhfc3RlcHM7CisKKwl1bmlvbiB7CisJCWludDhfdCBlZmZlY3Q7CisJCXVpbnQ4X3QgbGVuc19zaGFkaW5nOworCQl1aW50MTZfdCBwcmV2bF9wZjsKKwkJdWludDE2X3QgcHJldnBfcGw7CisJCXVpbnQxNl90IHBpY3RsX3BmOworCQl1aW50MTZfdCBwaWN0cF9wbDsKKwkJdWludDMyX3QgcGljdF9tYXhfZXhwX2xjOworCQl1aW50MTZfdCBwX2ZwczsKKwkJc3RydWN0IHNlbnNvcl9waWN0X2ZwcyBnZnBzOworCQlzdHJ1Y3QgZXhwX2dhaW5fY2ZnIGV4cF9nYWluOworCQlzdHJ1Y3QgZm9jdXNfY2ZnIGZvY3VzOworCQlzdHJ1Y3QgZnBzX2NmZyBmcHM7CisJfSBjZmc7Cit9OworCisjZGVmaW5lIEdFVF9OQU1FCQkJMAorI2RlZmluZSBHRVRfUFJFVklFV19MSU5FX1BFUl9GUkFNRQkxCisjZGVmaW5lIEdFVF9QUkVWSUVXX1BJWEVMU19QRVJfTElORQkyCisjZGVmaW5lIEdFVF9TTkFQU0hPVF9MSU5FX1BFUl9GUkFNRQkzCisjZGVmaW5lIEdFVF9TTkFQU0hPVF9QSVhFTFNfUEVSX0xJTkUJNAorI2RlZmluZSBHRVRfU05BUFNIT1RfRlBTCQk1CisjZGVmaW5lIEdFVF9TTkFQU0hPVF9NQVhfRVBfTElORV9DTlQJNgorCitzdHJ1Y3QgbXNtX2NhbXNlbnNvcl9pbmZvIHsKKwljaGFyIG5hbWVbTUFYX1NFTlNPUl9OQU1FXTsKKwl1aW50OF90IGZsYXNoX2VuYWJsZWQ7Cit9OworI2VuZGlmIC8qIF9fTElOVVhfTVNNX0NBTUVSQV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vcG1lbS5jIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL3BtZW0uYwppbmRleCBkZWY2NDY4Li41MDNiYTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vcG1lbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9wbWVtLmMKQEAgLTM3LDE3ICszNywxNyBAQAogICogdGhlIGZpbGUgc2hvdWxkIG5vdCBiZSByZWxlYXNlZCB1bnRpbCBwdXRfcG1lbV9maWxlIGlzIGNhbGxlZCAqLwogI2RlZmluZSBQTUVNX0ZMQUdTX0JVU1kgMHgxCiAvKiBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIGEgc3ViYWxsb2NhdGlvbiBvZiBhIGxhcmdlciBtYXN0ZXIgcmFuZ2UgKi8KLSNkZWZpbmUgUE1FTV9GTEFHU19DT05ORUNURUQgMHgxIDw8IDEKKyNkZWZpbmUgUE1FTV9GTEFHU19DT05ORUNURUQgKCAweDEgPDwgMSApCiAvKiBpbmRpY2F0ZXMgdGhpcyBpcyBhIG1hc3RlciBhbmQgbm90IGEgc3ViIGFsbG9jYXRpb24gYW5kIHRoYXQgaXQgaXMgbW1hcGVkICovCi0jZGVmaW5lIFBNRU1fRkxBR1NfTUFTVEVSTUFQIDB4MSA8PCAyCisjZGVmaW5lIFBNRU1fRkxBR1NfTUFTVEVSTUFQICggMHgxIDw8IDIgKQogLyogc3VibWFwIGFuZCB1bnN1Ym1hcCBmbGFncyBpbmRpY2F0ZToKICAqIDAwOiBzdWJyZWdpb24gaGFzIG5ldmVyIGJlZW4gbW1hcGVkCiAgKiAxMDogc3VicmVnaW9uIGhhcyBiZWVuIG1tYXBlZCwgcmVmZXJlbmNlIHRvIHRoZSBtbSB3YXMgdGFrZW4KICAqIDExOiBzdWJyZXRpb24gaGFzIGJlbiByZWxlYXNlZCwgcmVmZXJuZWNlIHRvIHRoZSBtbSBzdGlsbCBoZWxkCiAgKiAwMTogc3VicmV0aW9uIGhhcyBiZWVuIHJlbGVhc2VkLCByZWZlcmVuY2UgdG8gdGhlIG1tIGhhcyBiZWVuIHJlbGVhc2VkCiAgKi8KLSNkZWZpbmUgUE1FTV9GTEFHU19TVUJNQVAgMHgxIDw8IDMKLSNkZWZpbmUgUE1FTV9GTEFHU19VTlNVQk1BUCAweDEgPDwgNAorI2RlZmluZSBQTUVNX0ZMQUdTX1NVQk1BUCAoIDB4MSA8PCAzICkKKyNkZWZpbmUgUE1FTV9GTEFHU19VTlNVQk1BUCAoIDB4MSA8PCA0ICkKIAogCiBzdHJ1Y3QgcG1lbV9kYXRhIHsKQEAgLTkxLDcgKzkxLDcgQEAKIAogI2RlZmluZSBQTUVNX0RFQlVHX01TR1MgMAogI2lmIFBNRU1fREVCVUdfTVNHUwotI2RlZmluZSBETE9HKGZtdCxhcmdzLi4uKSBcCisjZGVmaW5lIERMT0coZm10LCBhcmdzLi4uKSBcCiAJZG8geyBwcmludGsoS0VSTl9JTkZPICJbJXM6JXM6JWRdICJmbXQsIF9fRklMRV9fLCBfX2Z1bmNfXywgX19MSU5FX18sIFwKIAkJICAgICMjYXJncyk7IH0gXAogCXdoaWxlICgwKQpAQCAtMTUyLDcgKzE1Miw3IEBACiBzdGF0aWMgc3RydWN0IHBtZW1faW5mbyBwbWVtW1BNRU1fTUFYX0RFVklDRVNdOwogc3RhdGljIGludCBpZF9jb3VudDsKIAotI2RlZmluZSBQTUVNX0lTX0ZSRUUoaWQsIGluZGV4KSAhKHBtZW1baWRdLmJpdG1hcFtpbmRleF0uYWxsb2NhdGVkKQorI2RlZmluZSBQTUVNX0lTX0ZSRUUoaWQsIGluZGV4KSAoICEocG1lbVtpZF0uYml0bWFwW2luZGV4XS5hbGxvY2F0ZWQpICkKICNkZWZpbmUgUE1FTV9PUkRFUihpZCwgaW5kZXgpIHBtZW1baWRdLmJpdG1hcFtpbmRleF0ub3JkZXIKICNkZWZpbmUgUE1FTV9CVUREWV9JTkRFWChpZCwgaW5kZXgpIChpbmRleCBeICgxIDw8IFBNRU1fT1JERVIoaWQsIGluZGV4KSkpCiAjZGVmaW5lIFBNRU1fTkVYVF9JTkRFWChpZCwgaW5kZXgpIChpbmRleCArICgxIDw8IFBNRU1fT1JERVIoaWQsIGluZGV4KSkpCkBAIC03MDgsOSArNzA4LDggQEAKIAlzdHJ1Y3QgcG1lbV9kYXRhICpkYXRhOwogCWludCBpZDsKIAotCWlmICghaXNfcG1lbV9maWxlKGZpbGUpIHx8ICFoYXNfYWxsb2NhdGlvbihmaWxlKSkgeworCWlmICghaXNfcG1lbV9maWxlKGZpbGUpIHx8ICFoYXNfYWxsb2NhdGlvbihmaWxlKSkKIAkJcmV0dXJuIC0xOwotCX0KIAogCWRhdGEgPSAoc3RydWN0IHBtZW1fZGF0YSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKIAlpZiAoZGF0YS0+aW5kZXggPT0gLTEpIHsKQEAgLTc4OSw5ICs3ODgsOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKmVsdDsKIAl2b2lkICpmbHVzaF9zdGFydCwgKmZsdXNoX2VuZDsKIAotCWlmICghaXNfcG1lbV9maWxlKGZpbGUpIHx8ICFoYXNfYWxsb2NhdGlvbihmaWxlKSkgeworCWlmICghaXNfcG1lbV9maWxlKGZpbGUpIHx8ICFoYXNfYWxsb2NhdGlvbihmaWxlKSkKIAkJcmV0dXJuOwotCX0KIAogCWlkID0gZ2V0X2lkKGZpbGUpOwogCWRhdGEgPSAoc3RydWN0IHBtZW1fZGF0YSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKQEAgLTgzMyw3ICs4MzEsNyBAQAogCXNyY19maWxlID0gZmdldF9saWdodChjb25uZWN0LCAmcHV0X25lZWRlZCk7CiAJRExPRygiY29ubmVjdCAlcCB0byAlcFxuIiwgZmlsZSwgc3JjX2ZpbGUpOwogCWlmICghc3JjX2ZpbGUpIHsKLQkJcHJpbnRrKCJwbWVtOiBzcmMgZmlsZSBub3QgZm91bmQhXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicG1lbTogc3JjIGZpbGUgbm90IGZvdW5kIVxuIik7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX25vX2ZpbGU7CiAJfQpAQCAtODQ2LDcgKzg0NCw3IEBACiAJc3JjX2RhdGEgPSAoc3RydWN0IHBtZW1fZGF0YSAqKXNyY19maWxlLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoaGFzX2FsbG9jYXRpb24oZmlsZSkgJiYgKGRhdGEtPmluZGV4ICE9IHNyY19kYXRhLT5pbmRleCkpIHsKLQkJcHJpbnRrKCJwbWVtOiBmaWxlIGlzIGFscmVhZHkgbWFwcGVkIGJ1dCBkb2Vzbid0IG1hdGNoIHRoaXMiCisJCXByaW50ayhLRVJOX0lORk8gInBtZW06IGZpbGUgaXMgYWxyZWFkeSBtYXBwZWQgYnV0IGRvZXNuJ3QgbWF0Y2ggdGhpcyIKIAkJICAgICAgICIgc3JjX2ZpbGUhXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfYmFkX2ZpbGU7CkBAIC04ODUsNyArODgzLDcgQEAKIAkJbW0gPSBnZXRfdGFza19tbShkYXRhLT50YXNrKTsKIAkJaWYgKCFtbSkgewogI2lmIFBNRU1fREVCVUcKLQkJCXByaW50aygicG1lbTogY2FuJ3QgcmVtYXAgdGFzayBpcyBnb25lIVxuIik7CisJCQlwcmludGsoS0VSTl9ERUJVRyAicG1lbTogY2FuJ3QgcmVtYXAgdGFzayBpcyBnb25lIVxuIik7CiAjZW5kaWYKIAkJCXVwX3JlYWQoJmRhdGEtPnNlbSk7CiAJCQlyZXR1cm4gLTE7CkBAIC05MzYsNyArOTM0LDcgQEAKIAlpZiAodW5saWtlbHkoIVBNRU1fSVNfUEFHRV9BTElHTkVEKHJlZ2lvbi0+b2Zmc2V0KSB8fAogCQkgIVBNRU1fSVNfUEFHRV9BTElHTkVEKHJlZ2lvbi0+bGVuKSkpIHsKICNpZiBQTUVNX0RFQlVHCi0JCXByaW50aygicG1lbTogcmVxdWVzdCBmb3IgdW5hbGlnbmVkIHBtZW0gc3ViYWxsb2NhdGlvbiAiCisJCXByaW50ayhLRVJOX0RFQlVHICJwbWVtOiByZXF1ZXN0IGZvciB1bmFsaWduZWQgcG1lbSBzdWJhbGxvY2F0aW9uICIKIAkJICAgICAgICIlbHggJWx4XG4iLCByZWdpb24tPm9mZnNldCwgcmVnaW9uLT5sZW4pOwogI2VuZGlmCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL3Fkc3A1L01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL3Fkc3A1L01ha2VmaWxlCmluZGV4IDk5MWQ0YTcuLmJlZWRhYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9xZHNwNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vcWRzcDUvTWFrZWZpbGUKQEAgLTEsMyArMSw0IEBACitFWFRSQV9DRkxBR1M9LUlkcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZQogb2JqLXkgKz0gYWRzcC5vCiBpZmVxICgkKENPTkZJR19NU01fQU1TU19WRVJTSU9OXzYzNTApLHkpCiBvYmoteSArPSBhZHNwX2luZm8ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL3Fkc3A1L2F1ZGlvX21wMy5jIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL3Fkc3A1L2F1ZGlvX21wMy5jCmluZGV4IGI5NTU3NGYuLjdlZDZlMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9xZHNwNS9hdWRpb19tcDMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vcWRzcDUvYXVkaW9fbXAzLmMKQEAgLTY1MCw4ICs2NTAsNyBAQAogCQkJCQkJICAgICAgICZhdWRpby0+cmVhZF9waHlzLAogCQkJCQkJICAgICAgIEdGUF9LRVJORUwpOwogCQkJCWlmICghYXVkaW8tPnJlYWRfZGF0YSkgewotCQkJCQlwcl9lcnIoImF1ZGlvX21wMzogbWFsbG9jIHBjbSBcCi0JCQkJCWJ1ZiBmYWlsZWRcbiIpOworCQkJCQlwcl9lcnIoImF1ZGlvX21wMzogbWFsbG9jIHBjbSBidWYgZmFpbGVkXG4iKTsKIAkJCQkJcmMgPSAtMTsKIAkJCQl9IGVsc2UgewogCQkJCQl1aW50OF90IGluZGV4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL3NtZC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9zbWQvTWFrZWZpbGUKaW5kZXggODkyYzc0MS4uMWM4NzYxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL3NtZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vc21kL01ha2VmaWxlCkBAIC0xLDMgKzEsNCBAQAorRVhUUkFfQ0ZMQUdTPS1JZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUKIG9iai0kKENPTkZJR19NU01fU01EKSArPSBzbWQubyBzbWRfdHR5Lm8gc21kX3FtaS5vCiBvYmotJChDT05GSUdfTVNNX09OQ1JQQ1JPVVRFUikgKz0gc21kX3JwY3JvdXRlci5vCiBvYmotJChDT05GSUdfTVNNX09OQ1JQQ1JPVVRFUikgKz0gc21kX3JwY3JvdXRlcl9kZXZpY2UubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL3NtZC9zbWRfcnBjcm91dGVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vc21kL3NtZF9ycGNyb3V0ZXIuYwppbmRleCA1YWMyY2Q0Li42OTkxMWE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vc21kL3NtZF9ycGNyb3V0ZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vc21kL3NtZF9ycGNyb3V0ZXIuYwpAQCAtMzgsOCArMzgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLQogI2luY2x1ZGUgPG1hY2gvbXNtX3NtZC5oPgogI2luY2x1ZGUgInNtZF9ycGNyb3V0ZXIuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMzI5M2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L0tjb25maWcKQEAgLTAsMCArMSw0IEBACitjb25maWcgRFQzMTU1CisJdHJpc3RhdGUgIkRUMzE1NSBEaWdpdGl6ZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBDSQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzZmMjFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9NYWtlZmlsZQpAQCAtMCwwICsxLDYgQEAKK29iai0kKENPTkZJR19EVDMxNTUpCSs9IGR0MzE1NS5vCitkdDMxNTUtb2JqcyA6PQlcCisJCWR0MzE1NV9kcnYubwlcCisJCWR0MzE1NV9pc3IubwlcCisJCWR0MzE1NV9pby5vCVwKKwkJYWxsb2NhdG9yLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmFhM2I2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9UT0RPCkBAIC0wLDAgKzEsMTAgQEAKK1RPRE86CisJLSBmaXggY2hlY2twYXRjaC5wbCBpc3N1ZXMKKwktIHJlbW92ZSBvbGQga2VybmVsIHN1cHBvcnQsIGl0IGlzIG5vdCBuZWVkZWQKKwktIGNvbnZlcnQgdG8gcHJvcGVyIFBDSSBkZXZpY2UgQVBJCisJLSBmaXggc3BhcnNlIHdhcm5pbmdzCisJLSBhdWRpdCBmb3IgY29ycmVjdCBzdWJzeXN0ZW0gaW50ZXJhY3Rpb24KKwktIHJldmlldyByZXZpZXcgcmV2aWV3IQorCitQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+CithbmQgU2NvdHQgU21lZGxleSA8c3NAYWFvLmdvdi5hdT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvYWxsb2NhdG9yLlJFQURNRSBiL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvYWxsb2NhdG9yLlJFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTcwMGI2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9hbGxvY2F0b3IuUkVBRE1FCkBAIC0wLDAgKzEsOTggQEAKKworVGhlIGFsbG9jYXRvciBzaG93biBoZXJlICBleHBsb2l0cyBoaWdoIG1lbW9yeS4gVGhpcyBkb2N1bWVudCBleHBsYWlucworaG93ICBhIHVzZXIgY2FuICBkZWFsICAgd2l0aCBkcml2ZXJzIHVzZXMgICB0aGlzICBhbGxvY2F0b3IgYW5kIGhvdyAgYQorcHJvZ3JhbW1lciBjYW4gbGluayBpbiB0aGUgbW9kdWxlLgorCitUaGUgbW9kdWxlIGlzIGJlaW5nIHVzZWQgYnkgbXkgcHhjIGFuZCBweGRydiBkZXZpY2UgZHJpdmVycyAoYXMgd2VsbCBhcworb3RoZXIgb25lcyksIGF2YWlsYWJsZSBmcm9tIGZ0cC5zeXN0ZW15Lml0L3B1Yi9kZXZlbG9wIGFuZAorZnRwLmxpbnV4Lml0L3B1Yi9QZW9wbGUvUnViaW5pCisKKwlVc2VyJ3MgbWFudWFsCisJPT09PT09PT09PT09PQorCisKK09uZSBvZiB0aGUgbW9zdCBjb21wZWxsaW5nIHByb2JsZW1zIHdpdGggYW55IERNQS1jYXBhYmxlIGRldmljZSBpcyB0aGUKK2FsbG9jYXRpb24gIG9mIGEgc3VpdGFibGUgIG1lbW9yeSBidWZmZXIuIFRoZSAiYWxsb2NhdG9yIiBtb2R1bGUgdHJpZXMKK3RvIGRlYWwgd2l0aCAgdGhlIHByb2JsZW0gaW4gIGEgY2xlYW4gd2F5LiAgVGhlIG1vZHVsZSBpcyAgYWJsZSB0byB1c2UKK2hpZ2ggICBtZW1vcnkgIChhYm92ZSB0aGUgIG9uZSAgIHVzZWQgaW4gIG5vcm1hbCAgIG9wZXJhdGlvbikgIGZvciBETUEKK2FsbG9jYXRpb24uCisKK1RvIHByZXZlbnQgIHRoZSAga2VybmVsIGZvciB1c2luZyAgIGhpZ2ggbWVtb3J5LCAgc28gIHRoYXQgaXQgIHJlbWFpbnMKK2F2YWlsYWJsZSBmb3IgIERNQSwgeW91IHNob3VsZCAgcGFzcyBhICBjb21tYW5kICBsaW5lIGFyZ3VtZW50IHRvICB0aGUKK2tlcm5lbC4gIENvbW1hbmQgbGluZSBhcmd1bWVudHMgIGNhbiBiZSBwYXNzZWQgdG8gIExpbG8sIHRvIExvYWRsaW4gb3IKK3RvIHdoaWNoZXZlciBsb2FkZXIgIHlvdSBhcmUgdXNpbmcgICh1bmxlc3MgaXQncyB2ZXJ5IHBvb3IgaW4gZGVzaWduKS4KK0ZvciBMaWxvLCBlaXRoZXIgdXNlICAiYXBwZW5kPSIgaW4gIC9ldGMvbGlsby5jb25mIG9yIGFkZCAgY29tbWFuZGxpbmUKK2FyZ3VtZW50cyB0byB0aGUgIGludGVyYWN0aXZlIHByb21wdC4gRm9yICBleGFtcGxlLCBJIGhhdmUgYSAzMk1CICBib3gKK2FuZCByZXNlcnZlIHR3byBtZWdzIGZvciBETUE6CisKK0luIGxpbG8uY29uZjoKKwlpbWFnZSA9IC96SW1hZ2UKKwlsYWJlbCA9IGxpbnV4CisJYXBwZW5kID0gIm1lbT0zME0iCisKK09yLCBpbnRlcmFjdGl2ZWx5OgorCUxJTE86IGxpbnV4IG1lbT0zME0KKworT25jZSAgdGhlIGtlcm5lbCBpcyBib290ZWQgIHdpdGggdGhlICByaWdodCBjb21tYW5kLWxpbmUgYXJndW1lbnQsIGFueQorZHJpdmVyICBsaW5rZWQgICB3aXRoICB0aGUgIGFsbG9jYXRvciAgIG1vZHVsZSAgd2lsbCAgYmUgYWJsZSAgIHRvIGdldAorRE1BLWNhcGFibGUgbWVtb3J5IHdpdGhvdXQgIG11Y2ggIHRyb3VibGUgKHVubGVzcyB0aGUgIHZhcmlvdXMgZHJpdmVycworbmVlZCBtb3JlIG1lbW9yeSB0aGFuIGF2YWlsYWJsZSkuCisKK1RoZSBtb2R1bGUgaW1wbGVtZW50cyBhbiBhbGxvYy9mcmVlICBtZWNoYW5pc20sICBzbyB0aGF0IGl0IGNhbiAgc2VydmUKK211bHRpcGxlIGRyaXZlcnMgIGF0IHRoZSAgc2FtZSB0aW1lLiBOb3RlICBob3dldmVyIHRoYXQgIHRoZSBhbGxvY2F0b3IKK3VzZXMgYWxsIG9mICBoaWdoIG1lbW9yeSBhbmQgYXNzdW1lcyB0byAgYmUgdGhlIG9ubHkgcGllY2Ugb2Ygc29mdHdhcmUKK3VzaW5nIHN1Y2ggbWVtb3J5LgorCisKKwlQcm9ncmFtbWVyJ3MgbWFudWFsCisJPT09PT09PT09PT09PT09PT09PQorCitUaGUgYWxsb2NhdG9yLCAgYXMgIHJlbGVhc2VkLCBpcyBkZXNpZ25lZCAgdG8gIGJlIGxpbmtlZCAgdG8gIGEgZGV2aWNlCitkcml2ZXIuICBJbiB0aGlzICBjYXNlLCB0aGUgZHJpdmVyICBtdXN0IGNhbGwgYWxsb2NhdG9yX2luaXQoKSAgYmVmb3JlCit1c2luZyAgIHRoZSAgYWxsb2NhdG9yICAgYW5kICBtdXN0ICBjYWxsICAgYWxsb2NhdG9yX2NsZWFudXAoKSAgYmVmb3JlCit1bmxvYWRpbmcuICBUaGlzIGlzICB1c3VhbGx5ICBkb25lICAgZnJvbSB3aXRoaW4gIGluaXRfbW9kdWxlKCkgICAgYW5kCitjbGVhbnVwX21vZHVsZSgpLiBJZiB0aGUgYWxsb2NhdG9yIGlzIGxpbmtlZCB0byAgYSBkcml2ZXIsIGl0IHdvbid0IGJlCitwb3NzaWJsZSBmb3Igc2V2ZXJhbCBkcml2ZXJzIHRvIGFsbG9jYXRlIGhpZ2ggRE1BIG1lbW9yeSwgYXMgZXhwbGFpbmVkCithYm92ZS4KKworSXQgaXMgcG9zc2libGUsIG9uIHRoZSBvdGhlciBoYW5kLCB0byBjb21waWxlIHRoZSBtb2R1bGUgYXMgYSBzdGFuZGFsb25lCittb2R1bGUsIHNvIHRoYXQgc2V2ZXJhbCBtb2R1bGVzIGNhbiByZWx5IG9uIHRoZSBhbGxvY2F0b3IgZm9yIHRoZXkgRE1BCitidWZmZXJzLiBUbyBjb21waWxlIHRoZSBhbGxvY2F0b3IgYXMgYSBzdGFuZGFsb25lIG1vZHVsZSwgZG8gdGhlCitmb2xsb3dpbmcgaW4gdGhpcyBkaXJlY3RvcnkgKG9yIHByb3ZpZGUgYSBzdWl0YWJsZSBNYWtlZmlsZSwgb3IgZWRpdAordGhlIHNvdXJjZSBjb2RlKToKKworCW1ha2UgYWxsb2NhdG9yLm8gQ0M9ImdjYyAtRGFsbG9jYXRvcl9pbml0PWluaXRfbW9kdWxlIC1EYWxsb2NhdG9yX2NsZWFudXA9Y2xlYW51cF9tb2R1bGUgLWluY2x1ZGUgL3Vzci9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIgorCitUaGUgcHJldmlvdXMgY29tbWFuZGxpbmUgIHRlbGxzICAgdG8gaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ICBpbiAgdGhlCitmaXJzdCBwbGFjZSwgIGFuZCB0byByZW5hbWUgdGhlIGluaXQgIGFuZCBjbGVhbnVwIGZ1bmN0aW9uIHRvIHRoZSBvbmVzCituZWVkZWQgZm9yICBtb2R1bGUgbG9hZGluZyBhbmQgIHVubG9hZGluZy4gIERyaXZlcnMgdXNpbmcgYSBzdGFuZGFsb25lCithbGxvY2F0b3Igd29uJ3QgbmVlZCB0byBjYWxsIGFsbG9jYXRvcl9pbml0KCkgbm9yIGFsbG9jYXRvcl9jbGVhbnVwKCkuCisKK1RoZSBhbGxvY2F0b3IgZXhwb3J0cyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyAoZGVjbGFyZWQgaW4gYWxsb2NhdG9yLmgpOgorCisgICB1bnNpZ25lZCBsb25nIGFsbG9jYXRvcl9hbGxvY2F0ZV9kbWEgKHVuc2lnbmVkIGxvbmcga2lsb2J5dGVzLAorCQkJCQkgaW50IHByaW9yaXR5KTsKKworCVRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBoeXNpY2FsIGFkZHJlc3MsIG92ZXIgaGlnaF9tZW1vcnksCisJd2hpY2ggY29ycmVzcG9uZHMgdG8gYW4gYXJlYSBvZiBhdCBsZWFzdCAia2lsb2J5dGVzIiBraWxvYnl0ZXMuCisJVGhlIGFyZWEgd2lsbCBiZSBvd25lZCBieSB0aGUgbW9kdWxlIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLgorCVRoZSByZXR1cm5lZCBhZGRyZXNzIGNhbiBiZSBwYXNzZWQgdG8gZGV2aWNlIGJvYXJkcywgdG8gaW5zdHJ1Y3QKKwl0aGVpciBETUEgY29udHJvbGxlcnMsIHZpYSBwaHlzX3RvX2J1cygpLiBUaGUgYWRkcmVzcyBjYW4gYmUgdXNlZAorCWJ5IEMgY29kZSBhZnRlciB2cmVtYXAoKS9pb3JlbWFwKCkuIFRoZSAicHJpb3JpdHkiIGFyZ3VtZW50IHNob3VsZAorCWJlIEdGUF9LRVJORUwgb3IgR0ZQX0FUT01JQywgYWNjb3JkaW5nIHRvIHRoZSBjb250ZXh0IG9mIHRoZQorCWNhbGxlcjsgaXQgaXMgdXNlZCB0byBjYWxsIGttYWxsb2MoKSwgYXMgdGhlIGFsbG9jYXRvciBtdXN0IGtlZXAKKwl0cmFjayBvZiBhbnkgcmVnaW9uIGl0IGdpdmVzIGF3YXkuIEluIGNhc2Ugb2YgZXJyb3IgdGhlIGZ1bmN0aW9uCisJcmV0dXJucyAwLCBhbmQgdGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBpc3N1ZSBhIC1FTk9NRU0gZXJyb3IuCisKKworICAgdm9pZCBhbGxvY2F0b3JfZnJlZV9kbWEgKHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CisKKwlUaGlzIGZ1bmN0aW9uIGlzIHRoZSByZXZlcnNlIG9mIHRoZSBwcmV2aW91cyBvbmUuIElmIGEgZHJpdmVyCisJZG9lc24ndCBmcmVlIHRoZSBETUEgbWVtb3J5IGl0IGFsbG9jYXRlZCwgdGhlIGFsbG9jYXRvciB3aWxsCisJY29uc2lkZXIgc3VjaCBtZW1vcnkgYXMgYnVzeS4gTm90ZSwgaG93ZXZlciwgdGhhdAorCWFsbG9jYXRvcl9jbGVhbnVwKCkgY2FsbHMga2ZyZWUoKSBvbiBldmVyeSByZWdpb24gaXQgcmVjbGFpbWVkLAorCXNvIHRoYXQgYSBkcml2ZXIgd2l0aCB0aGUgYWxsb2NhdG9yIGxpbmtlZCBpbiBjYW4gYXZvaWQgY2FsbGluZworCWFsbG9jYXRvcl9mcmVlX2RtYSgpIGF0IHVubG9hZCB0aW1lLgorCisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9hbGxvY2F0b3IuYyBiL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvYWxsb2NhdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc0MjM0YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvYWxsb2NhdG9yLmMKQEAgLTAsMCArMSwyOTUgQEAKKy8qCisgKiBhbGxvY2F0b3IuYyAtLSBhbGxvY2F0ZSBhZnRlciBoaWdoX21lbW9yeSwgaWYgYXZhaWxhYmxlCisgKgorICogTk9URTogdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBteSBwcmV2aW91cyBhbGxvY2F0b3IsIHRoZSBvbmUgdGhhdAorICogICAgICAgYXNzZW1ibGVzIHBhZ2VzLCB3aGljaCByZXZlYWxlZCBpdHNlbGYgYm90aCBzbG93IGFuZCB1bnJlbGlhYmxlLgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCAgIHJ1YmluaUBsaW51eC5pdCAoQWxlc3NhbmRybyBSdWJpbmkpCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKworLS0gQ2hhbmdlcyAtLQorCisgIERhdGUJICAgICAgUHJvZ3JhbW1lciAgRGVzY3JpcHRpb24gb2YgY2hhbmdlcyBtYWRlCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMDItQXVnLTIwMDIgTkpDICAgICAgICAgYWxsb2NhdG9yIG5vdyBzdGVwcyBpbiAxTUIgaW5jcmVtZW50cywgcmF0aGVyCisJCQkgIHRoYW4gZG91YmxpbmcgaXRzIHNpemUgZWFjaCB0aW1lLgorCQkJICBBbHNvLCBhbGxvY2F0b3JfaW5pdCh1MzIgKikgbm93IHJldHVybnMKKwkJCSAgKGluIHRoZSBmaXJzdCBhcmcpIHRoZSBzaXplIG9mIHRoZSBmcmVlCisJCQkgIHNwYWNlLiAgVGhpcyBpcyBubyBsb25nZXIgY29uc2lzdGVudCB3aXRoCisJCQkgIHVzaW5nIHRoZSBhbGxvY2F0b3IgYXMgYSBtb2R1bGUsIGFuZCBzb21lIGNoYW5nZXMKKwkJCSAgbWF5IGJlIG5lY2Vzc2FyeSBmb3IgdGhhdCBwdXJwb3NlLiAgVGhpcyB3YXMKKwkJCSAgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBEVDMxNTUgZHJpdmVyLCBpbgorCQkJICBzdGFuZCBhbG9uZSBtb2RlIG9ubHkhISEKKyAgMjYtT2N0LTIwMDkgU1MJICBQb3J0IHRvIDIuNi4zMCBrZXJuZWwuCisgKi8KKworCisjaWZuZGVmIF9fS0VSTkVMX18KKyMgIGRlZmluZSBfX0tFUk5FTF9fCisjZW5kaWYKKyNpZm5kZWYgTU9EVUxFCisjICBkZWZpbmUgTU9EVUxFCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CS8qIFBBR0VfQUxJR04oKSAqLworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisvKiNkZWZpbmUgQUxMX0RFQlVHKi8KKyNkZWZpbmUgQUxMX01TRyAiYWxsb2NhdG9yOiAiCisKKyN1bmRlZiBQREVCVUcgICAgICAgICAgICAgLyogdW5kZWYgaXQsIGp1c3QgaW4gY2FzZSAqLworI2lmZGVmIEFMTF9ERUJVRworIyAgZGVmaW5lIF9fc3RhdGljCisjICBkZWZpbmUgRFVNUF9MSVNUKCkgZHVtcF9saXN0KCkKKyMgIGlmZGVmIF9fS0VSTkVMX18KKyAgICAgLyogVGhpcyBvbmUgaWYgZGVidWdnaW5nIGlzIG9uLCBhbmQga2VybmVsIHNwYWNlICovCisjICAgIGRlZmluZSBQREVCVUcoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBBTExfTVNHIGZtdCwgIyMgYXJncykKKyMgIGVsc2UKKyAgICAgLyogVGhpcyBvbmUgZm9yIHVzZXIgc3BhY2UgKi8KKyMgICAgZGVmaW5lIFBERUJVRyhmbXQsIGFyZ3MuLi4pIGZwcmludGYoc3RkZXJyLCBmbXQsICMjIGFyZ3MpCisjICBlbmRpZgorI2Vsc2UKKyMgIGRlZmluZSBQREVCVUcoZm10LCBhcmdzLi4uKSAvKiBub3QgZGVidWdnaW5nOiBub3RoaW5nICovCisjICBkZWZpbmUgRFVNUF9MSVNUKCkKKyMgIGRlZmluZSBfX3N0YXRpYyBzdGF0aWMKKyNlbmRpZgorCisjdW5kZWYgUERFQlVHRworI2RlZmluZSBQREVCVUdHKGZtdCwgYXJncy4uLikKKy8qI2RlZmluZSBQREVCVUdHKGZtdCwgYXJncy4uLikgcHJpbnRrKCBLRVJOX0RFQlVHIEFMTF9NU0cgZm10LCAjIyBhcmdzKSovCisKKworaW50IGFsbG9jYXRvcl9oaW1lbSA9IDE7IC8qIDAgPSBwcm9iZSwgcG9zLiA9IG1lZ3MsIG5lZy4gPSBkaXNhYmxlICAgKi8KK2ludCBhbGxvY2F0b3Jfc3RlcCA9IDE7ICAvKiBUaGlzIGlzIHRoZSBzdGVwIHNpemUgaW4gTUIgICAgICAgICAgICAgICovCitpbnQgYWxsb2NhdG9yX3Byb2JlID0gMTsgLyogVGhpcyBpcyBhIGZsYWcgLS0gMT1wcm9iZSwgMD1kb24ndCBwcm9iZSAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY2F0b3JfYnVmZmVyOwkJLyogcGh5c2ljYWwgYWRkcmVzcyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgYWxsb2NhdG9yX2J1ZmZlcl9zaXplOwkvKiBraWxvYnl0ZXMgKi8KKworLyoKKyAqIFRoZSBhbGxvY2F0b3Iga2VlcHMgYSBsaXN0IG9mIERNQSBhcmVhcywgc28gbXVsdGlwbGUgZGV2aWNlcworICogY2FuIGNvZXhpc3QuIFRoZSBsaXN0IGlzIGtlcHQgc29ydGVkIGJ5IGFkZHJlc3MKKyAqLworCitzdHJ1Y3QgYWxsb2NhdG9yX3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBhZGRyZXNzOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlzdHJ1Y3QgYWxsb2NhdG9yX3N0cnVjdCAqbmV4dDsKK307CisKK3N0cnVjdCBhbGxvY2F0b3Jfc3RydWN0ICphbGxvY2F0b3JfbGlzdDsKKworCisjaWZkZWYgQUxMX0RFQlVHCitzdGF0aWMgaW50IGR1bXBfbGlzdCh2b2lkKQoreworCXN0cnVjdCBhbGxvY2F0b3Jfc3RydWN0ICpwdHI7CisKKwlQREVCVUcoIkN1cnJlbnQgbGlzdDpcbiIpOworCWZvciAocHRyID0gYWxsb2NhdG9yX2xpc3Q7IHB0cjsgcHRyID0gcHRyLT5uZXh0KQorCQlQREVCVUcoIjB4JTA4bHggKHNpemUgJWxpa0IpXG4iLCBwdHItPmFkZHJlc3MsIHB0ci0+c2l6ZT4+MTApOworCXJldHVybiAwOworfQorI2VuZGlmCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgYWN0dWFsIGFsbG9jYXRvci4KKyAqCisgKiBJZiBzcGFjZSBpcyBhdmFpbGFibGUgaW4gaGlnaCBtZW1vcnkgKGFzIGRldGVjdGVkIGF0IGxvYWQgdGltZSksIHRoYXQKKyAqIG9uZSBpcyByZXR1cm5lZC4gVGhlIHJldHVybiB2YWx1ZSBpcyBhIHBoeXNpY2FsIGFkZHJlc3MgKGkuZS4sIGl0IGNhbgorICogYmUgdXNlZCBzdHJhaWdodCBhaGVhZCBmb3IgRE1BLCBidXQgbmVlZHMgcmVtYXBwaW5nIGZvciBwcm9ncmFtIHVzZSkuCisgKi8KKwordW5zaWduZWQgbG9uZyBhbGxvY2F0b3JfYWxsb2NhdGVfZG1hKHVuc2lnbmVkIGxvbmcga2lsb2J5dGVzLCBpbnQgcHJpbykKK3sKKwlzdHJ1Y3QgYWxsb2NhdG9yX3N0cnVjdCAqcHRyID0gYWxsb2NhdG9yX2xpc3QsICpuZXdwdHI7CisJdW5zaWduZWQgbG9uZyBieXRlcyA9IGtpbG9ieXRlcyA8PCAxMDsKKworCS8qIGNoZWNrIGlmIGhpZ2ggbWVtb3J5IGlzIGF2YWlsYWJsZSAqLworCWlmICghYWxsb2NhdG9yX2J1ZmZlcikKKwkJcmV0dXJuIDA7CisKKwkvKiBSb3VuZCBpdCB0byBhIG11bHRpcGxlIG9mIHRoZSBwYWdlc2l6ZSAqLworCWJ5dGVzID0gUEFHRV9BTElHTihieXRlcyk7CisJUERFQlVHKCJyZXF1ZXN0IGZvciAlbGkgYnl0ZXNcbiIsIGJ5dGVzKTsKKworCXdoaWxlIChwdHIgJiYgcHRyLT5uZXh0KSB7CisJCWlmIChwdHItPm5leHQtPmFkZHJlc3MgLSAocHRyLT5hZGRyZXNzICsgcHRyLT5zaXplKSA+PSBieXRlcykKKwkJCWJyZWFrOyAvKiBlbm91Z2ggc3BhY2UgKi8KKwkJcHRyID0gcHRyLT5uZXh0OworCX0KKwlpZiAoIXB0ci0+bmV4dCkgeworCQlEVU1QX0xJU1QoKTsKKwkJUERFQlVHKCJhbGxvYyBmYWlsZWRcbiIpOworCQlyZXR1cm4gMDsgLyogZW5kIG9mIGxpc3QgKi8KKwl9CisJbmV3cHRyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFsbG9jYXRvcl9zdHJ1Y3QpLCBwcmlvKTsKKwlpZiAoIW5ld3B0cikKKwkJcmV0dXJuIDA7CisKKwkvKiBvaywgbm93IHN0aWNrIGl0IGFmdGVyIHB0ciAqLworCW5ld3B0ci0+YWRkcmVzcyA9IHB0ci0+YWRkcmVzcyArIHB0ci0+c2l6ZTsKKwluZXdwdHItPnNpemUgPSBieXRlczsKKwluZXdwdHItPm5leHQgPSBwdHItPm5leHQ7CisJcHRyLT5uZXh0ID0gbmV3cHRyOworCisJRFVNUF9MSVNUKCk7CisJUERFQlVHKCJyZXR1cm5pbmcgMHglMDhseFxuIiwgbmV3cHRyLT5hZGRyZXNzKTsKKwlyZXR1cm4gbmV3cHRyLT5hZGRyZXNzOworfQorCitpbnQgYWxsb2NhdG9yX2ZyZWVfZG1hKHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlzdHJ1Y3QgYWxsb2NhdG9yX3N0cnVjdCAqcHRyID0gYWxsb2NhdG9yX2xpc3QsICpwcmV2OworCisJd2hpbGUgKHB0ciAmJiBwdHItPm5leHQpIHsKKwkJaWYgKHB0ci0+bmV4dC0+YWRkcmVzcyA9PSBhZGRyZXNzKQorCQkJYnJlYWs7CisJCXB0ciA9IHB0ci0+bmV4dDsKKwl9CisJLyogdGhlIG9uZSBiZWluZyBmcmVlZCBpcyBwdHItPm5leHQgKi8KKwlwcmV2ID0gcHRyOyBwdHIgPSBwdHItPm5leHQ7CisKKwlpZiAoIXB0cikgeworCQlwcmludGsoS0VSTl9FUlIgQUxMX01TRworCQkJImZyZWVfZG1hKDB4JTA4bHgpIGJ1dCBhZGQuIG5vdCBhbGxvY2F0ZWRcbiIsCisJCQlwdHItPmFkZHJlc3MpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJUERFQlVHRygiZnJlZWluZzogJTA4bHggKCVsaSkgbmV4dCAlMDhseFxuIiwgcHRyLT5hZGRyZXNzLCBwdHItPnNpemUsCisJCXB0ci0+bmV4dC0+YWRkcmVzcyk7CisJcHJldi0+bmV4dCA9IHB0ci0+bmV4dDsKKwlrZnJlZShwdHIpOworCisJLyogZHVtcF9saXN0KCk7ICovCisJcmV0dXJuIDA7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogSW5pdCBhbmQgY2xlYW51cAorICoKKyAqIE9uIGNsZWFudXAgZXZlcnl0aGluZyBpcyByZWxlYXNlZC4gSWYgdGhlIGxpc3QgaXMgbm90IGVtcHR5LCB0aGF0IGEKKyAqIHByb2JsZW0gb2Ygb3VyIGNsaWVudHMKKyAqLworaW50IGFsbG9jYXRvcl9pbml0KHUzMiAqYWxsb2NhdG9yX21heCkKK3sKKwkvKiBjaGVjayBob3cgbXVjaCBmcmVlIG1lbW9yeSBpcyB0aGVyZSAqLworCXZvaWQgKnJlbWFwcGVkOworCXVuc2lnbmVkIGxvbmcgbWF4OworCXVuc2lnbmVkIGxvbmcgdHJpYWxfc2l6ZSA9IGFsbG9jYXRvcl9oaW1lbTw8MjA7CisJdW5zaWduZWQgbG9uZyBsYXN0X3RyaWFsID0gMDsKKwl1bnNpZ25lZCBsb25nIHN0ZXAgPSBhbGxvY2F0b3Jfc3RlcDw8MjA7CisJdW5zaWduZWQgbG9uZyBpID0gMDsKKwlzdHJ1Y3QgYWxsb2NhdG9yX3N0cnVjdCAqaGVhZCwgKnRhaWw7CisJY2hhciB0ZXN0X3N0cmluZ1tdID0gIjAxMjM0NTY3ODlhYmNkZSI7IC8qIDE2IGJ5dGVzICovCisKKwlQREVCVUdHKCJoaW1lbSA9ICVpXG4iLCBhbGxvY2F0b3JfaGltZW0pOworCWlmIChhbGxvY2F0b3JfaGltZW0gPCAwKSAvKiBkb24ndCBldmVuIHRyeSAqLworCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghdHJpYWxfc2l6ZSkKKwkJdHJpYWxfc2l6ZSA9IDE8PDIwOyAvKiBub3Qgc3BlY2lmaWVkOiB0cnkgb25lIG1lZyAqLworCisJd2hpbGUgKDEpIHsKKwkJcmVtYXBwZWQgPSBpb3JlbWFwKF9fcGEoaGlnaF9tZW1vcnkpLCB0cmlhbF9zaXplKTsKKwkJaWYgKCFyZW1hcHBlZCkgeworCQkJUERFQlVHRygiJWxpIG1lZ3MgZmFpbGVkIVxuIiwgdHJpYWxfc2l6ZT4+MjApOworCQkJYnJlYWs7CisJCX0KKwkJUERFQlVHRygiVHJ5aW5nICVsaSBtZWdzIChhdCAlcCwgJXApXG4iLCB0cmlhbF9zaXplPj4yMCwKKwkJCSh2b2lkICopX19wYShoaWdoX21lbW9yeSksIHJlbWFwcGVkKTsKKwkJZm9yIChpID0gbGFzdF90cmlhbDsgaSA8IHRyaWFsX3NpemU7IGkgKz0gMTYpIHsKKwkJCXN0cmNweSgoY2hhciAqKShyZW1hcHBlZCkraSwgdGVzdF9zdHJpbmcpOworCQkJaWYgKHN0cmNtcCgoY2hhciAqKShyZW1hcHBlZCkraSwgdGVzdF9zdHJpbmcpKQorCQkJCWJyZWFrOworCQkJfQorCQlpb3VubWFwKCh2b2lkICopcmVtYXBwZWQpOworCQlzY2hlZHVsZSgpOworCQlsYXN0X3RyaWFsID0gdHJpYWxfc2l6ZTsKKwkJaWYgKGkgPT0gdHJpYWxfc2l6ZSkKKwkJCXRyaWFsX3NpemUgKz0gc3RlcDsgLyogaW5jcmVtZW50LCBpZiBhbGwgd2VudCB3ZWxsICovCisJCWVsc2UgeworCQkJUERFQlVHRygiJWxpIG1lZ3MgY29weSB0ZXN0IGZhaWxlZCFcbiIsIHRyaWFsX3NpemU+PjIwKTsKKwkJCWJyZWFrOworCQl9CisJCWlmICghYWxsb2NhdG9yX3Byb2JlKQorCQkJYnJlYWs7CisJfQorCVBERUJVRygiJWxpIG1lZ3MgKCVsaSBrLCAlbGkgYilcbiIsIGk+PjIwLCBpPj4xMCwgaSk7CisJYWxsb2NhdG9yX2J1ZmZlcl9zaXplID0gaT4+MTA7IC8qIGtpbG9ieXRlcyAqLworCWFsbG9jYXRvcl9idWZmZXIgPSBfX3BhKGhpZ2hfbWVtb3J5KTsKKwlpZiAoIWFsbG9jYXRvcl9idWZmZXJfc2l6ZSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIEFMTF9NU0cgIm5vIGZyZWUgaGlnaCBtZW1vcnkgdG8gdXNlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyoKKwkqIHRvIHNpbXBsaWZ5IHRoaW5ncywgYWx3YXlzIGhhdmUgdHdvIGNlbGxzIGluIHRoZSBsaXN0OgorCSogdGhlIGZpcnN0IGFuZCB0aGUgbGFzdC4gVGhpcyBhdm9pZHMgc29tZSBjb25kaXRpb25hbHMgYW5kCisJKiBleHRyYSBjb2RlIHdoZW4gYWxsb2NhdGluZyBhbmQgZGVhbGxvY2F0aW5nOiB3ZSBvbmx5IHBsYXkKKwkqIGluIHRoZSBtaWRkbGUgb2YgdGhlIGxpc3QKKwkqLworCWhlYWQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWxsb2NhdG9yX3N0cnVjdCksIEdGUF9LRVJORUwpOworCWlmICghaGVhZCkKKwkJcmV0dXJuIC1FTk9NRU07CisJdGFpbCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhbGxvY2F0b3Jfc3RydWN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0YWlsKSB7CisJCWtmcmVlKGhlYWQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltYXggPSBhbGxvY2F0b3JfYnVmZmVyX3NpemU8PDEwOworCisJaGVhZC0+c2l6ZSA9IHRhaWwtPnNpemUgPSAwOworCWhlYWQtPmFkZHJlc3MgPSBhbGxvY2F0b3JfYnVmZmVyOworCXRhaWwtPmFkZHJlc3MgPSBhbGxvY2F0b3JfYnVmZmVyICsgbWF4OworCWhlYWQtPm5leHQgPSB0YWlsOworCXRhaWwtPm5leHQgPSBOVUxMOworCWFsbG9jYXRvcl9saXN0ID0gaGVhZDsKKworCS8qIEJhY2sgdG8gdGhlIHVzZXIgY29kZSwgaW4gS0IgKi8KKwkqYWxsb2NhdG9yX21heCA9IGFsbG9jYXRvcl9idWZmZXJfc2l6ZTsKKworCXJldHVybiAwOyAvKiBvaywgcmVhZHkgKi8KK30KKwordm9pZCBhbGxvY2F0b3JfY2xlYW51cCh2b2lkKQoreworCXN0cnVjdCBhbGxvY2F0b3Jfc3RydWN0ICpwdHIsICpuZXh0OworCisJZm9yIChwdHIgPSBhbGxvY2F0b3JfbGlzdDsgcHRyOyBwdHIgPSBuZXh0KSB7CisJCW5leHQgPSBwdHItPm5leHQ7CisJCVBERUJVRygiZnJlZWluZyBsaXN0OiAweCUwOGx4XG4iLCBwdHItPmFkZHJlc3MpOworCQlrZnJlZShwdHIpOworCX0KKworCWFsbG9jYXRvcl9idWZmZXIgICAgICA9IDA7CisJYWxsb2NhdG9yX2J1ZmZlcl9zaXplID0gMDsKKwlhbGxvY2F0b3JfbGlzdCA9IE5VTEw7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9hbGxvY2F0b3IuaCBiL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvYWxsb2NhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRmMzI2OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvYWxsb2NhdG9yLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIGFsbG9jYXRvci5oIC0tIHByb3RvdHlwZXMgZm9yIGFsbG9jYXRpbmcgaGlnaCBtZW1vcnkKKyAqCisgKiBOT1RFOiB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIG15IHByZXZpb3VzIGFsbG9jYXRvciwgdGhlIG9uZSB0aGF0CisgKiAgICAgICBhc3NlbWJsZXMgcGFnZXMsIHdoaWNoIHJldmVhbGVkIGl0c2VsZiBib3RoIHNsb3cgYW5kIHVucmVsaWFibGUuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4ICAgcnViaW5pQGxpbnV4Lml0IChBbGVzc2FuZHJvIFJ1YmluaSkKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKK3ZvaWQgYWxsb2NhdG9yX2ZyZWVfZG1hKHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7Cit1bnNpZ25lZCBsb25nIGFsbG9jYXRvcl9hbGxvY2F0ZV9kbWEodW5zaWduZWQgbG9uZyBraWxvYnl0ZXMsIGludCBwcmlvcml0eSk7CitpbnQgYWxsb2NhdG9yX2luaXQodTMyICopOwordm9pZCBhbGxvY2F0b3JfY2xlYW51cCh2b2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvZHQzMTU1LmggYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZjc4NjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NS5oCkBAIC0wLDAgKzEsMTcxIEBACisvKgorCitDb3B5cmlnaHQgMTk5NiwyMDAyLDIwMDUgR3JlZ29yeSBELiBIYWdlciwgQWxmcmVkIEEuIFJpenppLCBOb2FoIEouIENvd2FuLAorCQkJIEphc29uIExhcGVudGEsIFNjb3R0IFNtZWRsZXkKKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyLgorCitUaGUgRFQzMTU1IERldmljZSBEcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQKK2FuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCitMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGUgRFQzMTU1IERldmljZSBEcml2ZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCit1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CitvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgRFQzMTU1IERldmljZSBEcml2ZXI7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCitNQSAwMjExMS0xMzA3IFVTQQorCistLSBDaGFuZ2VzIC0tCisKKyAgRGF0ZSAgICAgUHJvZ3JhbW1lciAgRGVzY3JpcHRpb24gb2YgY2hhbmdlcyBtYWRlCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMDMtSnVsLTIwMDAgSk1MICAgICBuL2EKKyAgMTAtT2N0LTIwMDEgU1MgICAgICBwb3J0IHRvIDIuNCBrZXJuZWwuCisgIDI0LUp1bC0yMDAyIFNTICAgICAgcmVtb3ZlIHVudXNlZCBjb2RlICYgYWRkZWQgR1BMIGxpY2VuY2UuCisgIDA1LUF1Zy0yMDA1IFNTICAgICAgcG9ydCB0byAyLjYga2VybmVsOyBtYWtlIENDSVIgbW9kZSBkZWZhdWx0LgorCisqLworCisjaWZuZGVmIF9EVDMxNTVfSU5DCisjZGVmaW5lIF9EVDMxNTVfSU5DCisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CQkvKiBzdHJ1Y3QgdGltZXZhbCAqLworI2Vsc2UKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKworI2RlZmluZSBUUlVFICAxCisjZGVmaW5lIEZBTFNFIDAKKworLyogVW5jb21tZW50IHRoaXMgZm9yIDUwSHogQ0NJUiAqLworI2RlZmluZSBDQ0lSIDEKKworLyogQ2FuIGJlIDEgb3IgMiAqLworI2RlZmluZSBNQVhCT0FSRFMgMQorCisjZGVmaW5lIEJPQVJEX01BWF9CVUZGUwkzCisjZGVmaW5lIE1BWEJVRkZFUlMJKEJPQVJEX01BWF9CVUZGUypNQVhCT0FSRFMpCisKKyNkZWZpbmUgUENJX1BBR0VfU0laRQkoMSA8PCAxMikKKworI2lmZGVmIENDSVIKKyNkZWZpbmUgRFQzMTU1X01BWF9ST1dTCTU3NgorI2RlZmluZSBEVDMxNTVfTUFYX0NPTFMJNzY4CisjZGVmaW5lIEZPUk1BVDUwSFoJVFJVRQorI2Vsc2UKKyNkZWZpbmUgRFQzMTU1X01BWF9ST1dTCTQ4MAorI2RlZmluZSBEVDMxNTVfTUFYX0NPTFMJNjQwCisjZGVmaW5lIEZPUk1BVDUwSFoJRkFMU0UKKyNlbmRpZgorCisvKiBDb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLworc3RydWN0IGR0MzE1NV9jb25maWdfcyB7CisJdTMyIGFjcV9tb2RlOworCXUzMiBjb2xzLCByb3dzOworCXUzMiBjb250aW51b3VzOworfTsKKworCisvKiBob2xkIGRhdGEgZm9yIGVhY2ggZnJhbWUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwl1MzIgYWRkcjsJCS8qIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciB3aXRoIHRoZSBmcmFtZSAqLworCXUzMiB0YWc7CQkvKiB1bmlxdWUgbnVtYmVyIGZvciB0aGUgZnJhbWUgKi8KKwlzdHJ1Y3QgdGltZXZhbCB0aW1lOwkvKiB0aW1lIHRoYXQgY2FwdHVyZSB0b29rIHBsYWNlICovCit9IGZyYW1lX2luZm9fdDsKKworLyoKKyAqIFN0cnVjdHVyZSBmb3IgaW50ZXJydXB0IGFuZCBidWZmZXIgaGFuZGxpbmcuCisgKiBUaGlzIGlzIHRoZSBzZXR1cCBmb3IgMSBjYXJkCisgKi8KK3N0cnVjdCBkdDMxNTVfZmJ1ZmZlcl9zIHsKKwlpbnQgICAgbmJ1ZmZlcnM7CisKKwlmcmFtZV9pbmZvX3QgZnJhbWVfaW5mb1tCT0FSRF9NQVhfQlVGRlNdOworCisJaW50IGVtcHR5X2J1ZmZlcnNbQk9BUkRfTUFYX0JVRkZTXTsJLyogaW5kZXhlcyBlbXB0eSBmcmFtZXMgKi8KKwlpbnQgZW1wdHlfbGVuOwkJCQkvKiBOdW1iZXIgb2YgZW1wdHkgYnVmZmVycyAqLworCQkJCQkJLyogWmVybyBtZWFucyBlbXB0eSAqLworCisJaW50IGFjdGl2ZV9idWY7CQkJLyogV2hlcmUgZGF0YSBpcyBjdXJyZW50bHkgZG1hJ2luZyAqLworCWludCBsb2NrZWRfYnVmOwkJCS8qIEJ1ZmZlcnMgdXNlZCBieSB1c2VyICovCisKKwlpbnQgcmVhZHlfcXVlW0JPQVJEX01BWF9CVUZGU107CisJdTMyIHJlYWR5X2hlYWQ7CS8qIFRoZSBtb3N0IHJlY2VudCBidWZmZXIgbG9jYXRlZCBoZXJlICovCisJdTMyIHJlYWR5X2xlbjsJLyogVGhlIG51bWJlciBvZiByZWFkeSBidWZmZXJzICovCisKKwlpbnQgZXZlbl9oYXBwZW5lZDsKKwlpbnQgZXZlbl9zdG9wcGVkOworCisJaW50IHN0b3BfYWNxdWlyZTsJLyogRmxhZyB0byBzdG9wIGludGVycnVwdHMgKi8KKwl1MzIgZnJhbWVfY291bnQ7CS8qIENvdW50ZXIgZm9yIGZyYW1lcyBhY3F1aXJlZCBieSB0aGlzIGNhcmQgKi8KK307CisKKworCisjZGVmaW5lIERUMzE1NV9NT0RFX0ZSQU1FCTEKKyNkZWZpbmUgRFQzMTU1X01PREVfRklFTEQJMgorCisjZGVmaW5lIERUMzE1NV9TTkFQCQkxCisjZGVmaW5lIERUMzE1NV9BQ1EJCTIKKworLyogVGhlcmUgaXMgb25lIHN0YXR1cyBzdHJ1Y3R1cmUgZm9yIGVhY2ggY2FyZC4gKi8KK3R5cGVkZWYgc3RydWN0IGR0MzE1NV9zdGF0dXNfcyB7CisJaW50IGZpeGVkX21vZGU7CQkvKiBpZiAxLCB3ZSBhcmUgaW4gZml4ZWQgZnJhbWUgbW9kZSAqLworCXUzMiByZWdfYWRkcjsJLyogUmVnaXN0ZXIgYWRkcmVzcyBmb3IgYSBzaW5nbGUgY2FyZCAqLworCXUzMiBtZW1fYWRkcjsJLyogQnVmZmVyIHN0YXJ0IGFkZHIgZm9yIHRoaXMgY2FyZCAqLworCXUzMiBtZW1fc2l6ZTsJLyogVGhpcyBpcyB0aGUgYW1vdW50IG9mIG1lbSBhdmFpbGFibGUgICovCisJdTMyIGlycTsJCS8qIHRoaXMgY2FyZCdzIGlycSAqLworCXN0cnVjdCBkdDMxNTVfY29uZmlnX3MgY29uZmlnOwkJLyogY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKwlzdHJ1Y3QgZHQzMTU1X2ZidWZmZXJfcyBmYnVmZmVyOwkvKiBmcmFtZSBidWZmZXIgc3RhdGUgc3RydWN0ICovCisJdTMyIHN0YXRlOwkJLyogdGhpcyBjYXJkJ3Mgc3RhdGUgKi8KKwl1MzIgZGV2aWNlX2luc3RhbGxlZDsJLyogRmxhZyBpZiBpbnN0YWxsZWQuIDE9aW5zdGFsbGVkICovCit9IGR0MzE1NV9zdGF0dXNfdDsKKworLyogUmVmZXJlbmNlIHRvIGdsb2JhbCBzdGF0dXMgc3RydWN0dXJlICovCitleHRlcm4gc3RydWN0IGR0MzE1NV9zdGF0dXNfcyBkdDMxNTVfc3RhdHVzW01BWEJPQVJEU107CisKKyNkZWZpbmUgRFQzMTU1X1NUQVRFX0lETEUJMHgwMAorI2RlZmluZSBEVDMxNTVfU1RBVEVfRlJBTUUJMHgwMQorI2RlZmluZSBEVDMxNTVfU1RBVEVfRkxECTB4MDIKKyNkZWZpbmUgRFQzMTU1X1NUQVRFX1NUT1AJMHgxMDAKKyNkZWZpbmUgRFQzMTU1X1NUQVRFX0VSUk9SCTB4MjAwCisjZGVmaW5lIERUMzE1NV9TVEFURV9NT0RFCTB4MGZmCisKKyNkZWZpbmUgRFQzMTU1X0lPQ19NQUdJQwknIScKKworI2RlZmluZSBEVDMxNTVfU0VUX0NPTkZJRwlfSU9XKERUMzE1NV9JT0NfTUFHSUMsIDEsIHN0cnVjdCBkdDMxNTVfY29uZmlnX3MpCisjZGVmaW5lIERUMzE1NV9HRVRfQ09ORklHCV9JT1IoRFQzMTU1X0lPQ19NQUdJQywgMiwgc3RydWN0IGR0MzE1NV9zdGF0dXNfcykKKyNkZWZpbmUgRFQzMTU1X1NUT1AJCV9JTyhEVDMxNTVfSU9DX01BR0lDLCAzKQorI2RlZmluZSBEVDMxNTVfU1RBUlQJCV9JTyhEVDMxNTVfSU9DX01BR0lDLCA0KQorI2RlZmluZSBEVDMxNTVfRkxVU0gJCV9JTyhEVDMxNTVfSU9DX01BR0lDLCA1KQorI2RlZmluZSBEVDMxNTVfSU9DX01BWE5SCTUKKworLyogRXJyb3IgY29kZXMgKi8KKworI2RlZmluZSBEVF9FUlJfTk9fQlVGRkVSUwkweDEwMDAwCS8qIG5vdCB1c2VkIGJ1dCBpdCBtaWdodCBiZSBvbmUgZGF5ICovCisjZGVmaW5lIERUX0VSUl9DT1JSVVBUCQkweDIwMDAwCisjZGVmaW5lIERUX0VSUl9PVkVSUlVOCQkweDMwMDAwCisjZGVmaW5lIERUX0VSUl9JMkNfVElNRU9VVAkweDQwMDAwCisjZGVmaW5lIERUX0VSUl9NQVNLCQkweGZmMDAwMC8qIG5vdCB1c2VkIGJ1dCBpdCBtaWdodCBiZSBvbmUgZGF5ICovCisKKy8qIFVzZXIgY29kZSB3aWxsIHByb2JhYmx5IHdhbnQgdG8gZGVjbGFyZSBvbmUgb2YgdGhlc2UgZm9yIGVhY2ggY2FyZCAqLwordHlwZWRlZiBzdHJ1Y3QgZHQzMTU1X3JlYWRfcyB7CisJdTMyIG9mZnNldDsKKwl1MzIgZnJhbWVfc2VxOworCXUzMiBzdGF0ZTsKKworCWZyYW1lX2luZm9fdCBmcmFtZV9pbmZvOworfSBkdDMxNTVfcmVhZF90OworCisjZW5kaWYgLyogX0RUMzE1NV9pbmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvZHQzMTU1LnN5c3Zpbml0IGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTUuc3lzdmluaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJlYzA5MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvZHQzMTU1LnN5c3Zpbml0CkBAIC0wLDAgKzEsNjAgQEAKKyMhIC9iaW4vc2gKKyMKKyMgTW9kdWxlIGxvYWQvdW5sb2FkIHNjcmlwdCBmb3IgdXNlIHdpdGggU3lzVi1zdHlsZSAvZXRjL2luaXQuZC8gc3lzdGVtcy4KKyMgT24gYSBEZWJpYW4gc3lzdGVtLCBjb3B5IHRoaXMgdG8gL2V0Yy9pbml0LmQvZHQzMTU1IGFuZCB0aGVuIHJ1bgorIyAJL3Vzci9zYmluL3VwZGF0ZS1yYy5kIGR0MzE1NSBkZWZhdWx0cyA1NQorIyB0byBjcmVhdGUgdGhlIGFwcHJvcHJpYXRlIC9ldGMvcmM/LmQvW1NLXTU1ZHQzMTU1IHN0YXJ0L3N0b3AgbGlua3MuCisjIChUaGUgIjU1IiBpcyBhcmJpdHJhcnkgYnV0IGlzIHdoYXQgSSB1c2UgdG8gbG9hZCB0aGlzIHJhdGhlciBsYXRlLikKKyMKKyMgICAgQW5keSBEb3VnaGVydHkgICBGZWIgMjIgMjAwMAlkb3VnaGVyYUBsYWZheWV0dGUuZWR1CisjICAgIERlcHQuIG9mIFBoeXNpY3MKKyMgICAgTGFmYXlldHRlIENvbGxlZ2UsIEVhc3RvbiBQQSAxODA0MgorIworCitQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2Jpbjovc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorCisjIEVkaXQgdG8gcG9pbnQgdG8geW91ciBsb2NhbCBjb3B5LgorRklMRT0vdXNyL2xvY2FsL2xpYi9tb2R1bGVzL2R0MzE1NS9kdDMxNTUubworTkFNRT0iZHQzMTU1IgorREVTQz0iZHQzMTU1IEZyYW1lIEdyYWJiZXIgbW9kdWxlIgorREVWPSJkdDMxNTUiCisKK2lmIHRlc3QgISAtZiAkRklMRTsgdGhlbgorICAgIGVjaG8gIlVuYWJsZSB0byBsb2NhdGUgJEZJTEUiCisgICAgZXhpdCAwCitmaQorCitzZXQgLWUKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgIGVjaG8gLW4gIkxvYWRpbmcgJERFU0MgIgorICAgIGlmIC9zYmluL2luc21vZCAtdiAtZiAkRklMRTsgdGhlbgorCW1ham9yPWBncmVwICRERVYgL3Byb2MvZGV2aWNlcyB8IGF3ayAie3ByaW50IFxcJDF9ImAKKwlybSAtZiAvZGV2L2R0MzE1NT8KKwlta25vZCAvZGV2L2R0MzE1NWEgYyAkbWFqb3IgMAorCW1rbm9kIC9kZXYvZHQzMTU1YiBjICRtYWpvciAxCisJY2htb2QgZ28rcncgL2Rldi9kdDMxNTU/CisJZWNobworICAgIGVsc2UKKwllY2hvICIkRklMRSBub3QgbG9hZGVkLiIKKyAgICBmaQorICAgIDs7CisgIHN0b3ApCisgICAgZWNobyAtbiAiVW5sb2FkaW5nICRERVNDOiAiCisgICAgaWYgL3NiaW4vcm1tb2QgJE5BTUUgOyB0aGVuCisJZWNobworICAgIGVsc2UKKwllY2hvICIkREVWIG5vdCByZW1vdmVkIgorCWV4aXQgMAorICAgIGZpCisgICAgcm0gLWYgL2Rldi9kdDMxNTU/CisgICAgOzsKKyAgKikKKyAgICBlY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvJE5BTUUge3N0YXJ0fHN0b3B9IgorICAgIGV4aXQgMQorICAgIDs7Citlc2FjCisKK2V4aXQgMAorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvZHQzMTU1X2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2N2M2MjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9kcnYuYwpAQCAtMCwwICsxLDEwOTUgQEAKKy8qCisKK0NvcHlyaWdodCAxOTk2LDIwMDIsMjAwNSBHcmVnb3J5IEQuIEhhZ2VyLCBBbGZyZWQgQS4gUml6emksIE5vYWggSi4gQ293YW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgSmFzb24gTGFwZW50YSwgU2NvdHQgU21lZGxleSwgR3JlZyBTaGFycAorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRFQzMTU1IERldmljZSBEcml2ZXIuCisKK1RoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdAorYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCitwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKK0xpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKK3VzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKK29mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBEVDMxNTUgRGV2aWNlIERyaXZlcjsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKK01BIDAyMTExLTEzMDcgVVNBCisKKy0tIENoYW5nZXMgLS0KKworICBEYXRlICAgICBQcm9ncmFtbWVyCURlc2NyaXB0aW9uIG9mIGNoYW5nZXMgbWFkZQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAzLUp1bC0yMDAwIEpNTCAgICAgICBuL2EKKyAgMTAtT2N0LTIwMDEgU1MgICAgICAgIHBvcnQgdG8gMi40IGtlcm5lbAorICAwMi1BcHItMjAwMiBTUyAgICAgICAgTW9kcyB0byB1c2UgYWxsb2NhdG9yIGFzIGEgc3RhbmRhbG9uZSBtb2R1bGU7CisgICAgICAgICAgICAgICAgICAgICAgICBNZXJnZWQgSm9obiBSb2xsJ3MgY2hhbmdlcyAoam9obkBjZmEuaGFydmFyZC5lZHUpCisgICAgICAgICAgICAgICAgICAgICAgICB0byBtYWtlIHdvcmsgd2l0aCBtdWx0aXBsZSBib2FyZHMuCisgIDAyLUp1bC0yMDAyIFNTICAgICAgICBNZXJnZWQgSmFtZXMgUm9zZSdzIGNoYWdlcyAocm9zZWpyQHB1cmR1ZS5lZHUpIHRvOgorICAgICAgICAgICAgICAgICAgICAgICAgICogZml4IHN1Y2Nlc3NpdmUgaW50ZXJydXB0LWRyaXZlbiBjYXB0dXJlcworICAgICAgICAgICAgICAgICAgICAgICAgICogYWRkIHNlbGVjdC9wb2xsIHN1cHBvcnQuCisgIDEwLUp1bC0yMDAyIEdDUyAgICAgICBBZGQgZXJyb3IgY2hlY2sgd2hlbiBuZGV2aWNlcyA+IE1BWEJPQVJEUy4KKyAgMDItQXVnLTIwMDIgR0NTICAgICAgIEZpeCBmaWVsZCBtb2RlIHNvIHRoYXQgb2RkIChsb3dlcikgZmllbGQgaXMgc3RvcmVkCisgICAgICAgICAgICAgICAgICAgICAgICBpbiBsb3dlciBoYWxmIG9mIGJ1ZmZlci4KKyAgMDUtQXVnLTIwMDUgU1MgICAgICAgIHBvcnQgdG8gMi42IGtlcm5lbC4KKyAgMjYtT2N0LTIwMDkgU1MJcG9ydCB0byAyLjYuMzAga2VybmVsLgorCistLSBOb3RlcyAtLQorCisqKiBhcHBlbmRlZCAibWVtPTEyNCIgaW4gbGlsby5jb25mIHRvIGFsbG93IGZvciA0bWVncyBmcmVlIG9uIG15IDEyOG1lZyBzeXN0ZW0uCisgKiB1c2luZyBhbGxvY2F0b3IuYyBhbmQgYWxsb2NhdG9yLmggZnJvbSBvJ3JlaWxseSBib29rIChhbGVzc2FuZHJvIHJ1YmluaSkKKyAgICBmdHA6Ly9mdHAuc3lzdGVteS5pdC9wdWIvZGV2ZWxvcCAoc2VlIFJFQURNRS5hbGxvY2F0b3IpCisKKyArIG1pZ2h0IHdhbnQgdG8gZ2V0IHJpZCBvZiBNQVhib2FyZHMgZm9yIGFsbG9jYXRpbmcgaW5pdGlhbCBidWZmZXIuCisgICAgY29uZnVzaW5nIGFuZCBub3QgbmVjZXNzYXJ5CisKKyArIGluIGNsZWFudXBfbW9kdWxlIHRoZSBNT0RfSU5fVVNFIGxvb2tzIGxpa2UgaXQgaXMgY2hlY2sgYWZ0ZXIgaXQgc2hvdWxkCisKKyAqIEdGUF9ETUEgc2hvdWxkIG5vdCBiZSBzZXQgd2l0aCBhIFBDSSBzeXN0ZW0gKHBnIDI5MSkKKworIC0gTkpDIHdoeSBhcmUgb25seSB0d28gYnVmZmVycyBhbGxvd2VkPyAoc2VlIGlzciwgYXBwcm94IGxpbmUgMzU4KQorCisqLworCitleHRlcm4gdm9pZCBwcmludHF1ZXMoaW50KTsKKworI2lmZGVmIE1PRFVMRQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX1BDSQorI2Vycm9yICAiRFQzMTU1IDogIEtlcm5lbCBQQ0kgc3VwcG9ydCBub3QgZW5hYmxlZCAoRFQzMTU1IGRyaXZlIHJlcXVpcmVzIFBDSSkiCisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjaW5jbHVkZSAiZHQzMTU1LmgiCisjaW5jbHVkZSAiZHQzMTU1X2Rydi5oIgorI2luY2x1ZGUgImR0MzE1NV9pc3IuaCIKKyNpbmNsdWRlICJkdDMxNTVfaW8uaCIKKyNpbmNsdWRlICJhbGxvY2F0b3IuaCIKKworLyogRXJyb3IgdmFyaWFibGUuICBaZXJvIG1lYW5zIG5vIGVycm9yLiAqLworaW50IGR0MzE1NV9lcnJubyA9IDA7CisKKyNpZm5kZWYgUENJX0RFVklDRV9JRF9JTlRFTF83MTE2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfNzExNiAweDEyMjMKKyNlbmRpZgorCisjZGVmaW5lIERUMzE1NV9WRU5ET1JJRCAgICBQQ0lfVkVORE9SX0lEX0lOVEVMCisjZGVmaW5lIERUMzE1NV9ERVZJQ0VJRCAgICBQQ0lfREVWSUNFX0lEX0lOVEVMXzcxMTYKKyNkZWZpbmUgTUFYUENJICAgIDE2CisKKyNpZmRlZiBEVF9ERUJVRworI2RlZmluZSBEVF8zMTU1X0RFQlVHX01TRyh4LHkpIHByaW50ayh4LHkpCisjZWxzZQorI2RlZmluZSBEVF8zMTU1X0RFQlVHX01TRyh4LHkpCisjZW5kaWYKKworLyogd2FpdCBxdWV1ZSBmb3IgaW50ZXJydXB0cyAqLword2FpdF9xdWV1ZV9oZWFkX3QgZHQzMTU1X3JlYWRfd2FpdF9xdWV1ZVsgTUFYQk9BUkRTIF07CisKKyNkZWZpbmUgRFRfMzE1NV9TVUNDRVNTIDAKKyNkZWZpbmUgRFRfMzE1NV9GQUlMVVJFIC1FSU8KKworLyogc2V0IHRvIGR5bmFtaWNhbHkgYWxsb2NhdGUsIGJ1dCBpdCBpcyB0dW5hYmxlOiAqLworLyogaW5zbW9kIERUXzMxNTUgZHQzMTU1IGR0MzE1NV9tYWpvcj1YWCAqLworaW50IGR0MzE1NV9tYWpvciA9IDA7CisKKy8qIFRoZSBtaW5vciBudW1iZXJzIGFyZSAwIGFuZCAxIC4uLiB0aGV5IGFyZSBub3QgdHVuYWJsZS4KKyAqIFRoZXkgYXJlIHVzZWQgYXMgdGhlIGluZGljZXMgZm9yIHRoZSBzdHJ1Y3R1cmUgdmVjdG9ycywKKyAqIGFuZCByZWdpc3RlciBhZGRyZXNzIHZlY3RvcnMKKyAqLworCisvKiBHbG9iYWwgc3RydWN0dXJlcyBhbmQgdmFyaWFibGVzICovCisKKy8qIFN0YXR1cyBvZiBlYWNoIGRldmljZSAqLworc3RydWN0IGR0MzE1NV9zdGF0dXNfcyBkdDMxNTVfc3RhdHVzWyBNQVhCT0FSRFMgXTsKKworLyoga2VybmVsIGxvZ2ljYWwgYWRkcmVzcyBvZiB0aGUgYm9hcmQgKi8KK3U4ICpkdDMxNTVfbGJhc2VbIE1BWEJPQVJEUyBdID0geyBOVUxMCisjaWYgTUFYQk9BUkRTID09IDIKKwkJCQkgICAgICAsIE5VTEwKKyNlbmRpZgorfTsKKy8qIERUMzE1NSByZWdpc3RlcnMgICAgICAgICAgICAgICovCit1OCAqZHQzMTU1X2JiYXNlID0gTlVMTDsJCSAgLyoga2VybmVsIGxvZ2ljYWwgYWRkcmVzcyBvZiB0aGUgKgorCQkJCQkgICAqIGJ1ZmZlciByZWdpb24gICAgICAgICAgICAgICAgICovCit1MzIgIGR0MzE1NV9kZXZfb3BlblsgTUFYQk9BUkRTIF0gPSB7MAorI2lmIE1BWEJPQVJEUyA9PSAyCisJCQkJICAgICAgICwgMAorI2VuZGlmCit9OworCit1MzIgIG5kZXZpY2VzID0gMDsKK3UzMiB1bmlxdWVfdGFnID0gMDs7CisKKworLyoKKyAqIFN0b3BzIGludGVycnVwdCBnZW5lcmF0aW9uIHJpZ2h0IGF3YXkgYW5kIHJlc2V0cyB0aGUgc3RhdHVzCisgKiB0byBpZGxlLiAgSSBkb24ndCBrbm93IHdoeSB0aGlzIHdvcmtzIGFuZCB0aGUgb3RoZXIgd2F5IGRvZXNuJ3QuCisgKiAoSmFtZXMgUm9zZSkKKyAqLworc3RhdGljIHZvaWQgcXVpY2tfc3RvcCAoaW50IG1pbm9yKQoreworICAvLyBUT0RPOiBzY290dCB3YXMgaGVyZQorI2lmIDEKKyAgUmVhZE1SZWcoKGR0MzE1NV9sYmFzZVsgbWlub3IgXSArIElOVF9DU1IpLCBpbnRfY3NyX3IucmVnKTsKKyAgLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCisgIGludF9jc3Jfci5mbGQuRkxEX0VORF9FVkVfRU4gPSAwOworICBpbnRfY3NyX3IuZmxkLkZMRF9FTkRfT0REX0VOID0gMDsKKyAgV3JpdGVNUmVnKChkdDMxNTVfbGJhc2VbIG1pbm9yIF0gKyBJTlRfQ1NSKSwgaW50X2Nzcl9yLnJlZyApOworCisgIGR0MzE1NV9zdGF0dXNbIG1pbm9yIF0uc3RhdGUgJj0gfihEVDMxNTVfU1RBVEVfU1RPUHwweGZmKTsKKyAgLyogbWFyayB0aGUgc3lzdGVtIHN0b3BwZWQ6ICovCisgIGR0MzE1NV9zdGF0dXNbIG1pbm9yIF0uc3RhdGUgfD0gRFQzMTU1X1NUQVRFX0lETEU7CisgIGR0MzE1NV9mYnVmZmVyWyBtaW5vciBdLT5zdG9wX2FjcXVpcmUgPSAwOworICBkdDMxNTVfZmJ1ZmZlclsgbWlub3IgXS0+ZXZlbl9zdG9wcGVkID0gMDsKKyNlbHNlCisgIGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlIHw9IERUMzE1NV9TVEFURV9TVE9QOworICBkdDMxNTVfc3RhdHVzW21pbm9yXS5mYnVmZmVyLnN0b3BfYWNxdWlyZSA9IDE7CisjZW5kaWYKKworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIGR0MzE1NV9pc3IoKSBJbnRlcnJ1cHQgc2VydmljZSByb3V0aWVuCisgKgorICogLSBsb29rcyBsaWtlIHRoaXMgaXNyIHN1cHBvcnRzIElSUSBzaGFyaW5nIChvciBjb3VsZCkgSk1MCisgKiAtIEFzc3VtZXMgaXJxJ3MgYXJlIGRpc2FibGVkLCB2aWEgU0FfSU5URVJSVVBUIGZsYWcKKyAqIGJlaW5nIHNldCBpbiByZXF1ZXN0X2lycSgpIGNhbGwgZnJvbSBpbml0X21vZHVsZSgpCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgZHQzMTU1X2lzciggaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyApCit7CisgIGludCAgICBtaW5vciA9IC0xOworICBpbnQgICAgaW5kZXg7CisgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgIHUzMiBidWZmZXJfYWRkcjsKKworICAvKiBmaW5kIG91dCB3aG8gaXNzdWVkIHRoZSBpbnRlcnJ1cHQgKi8KKyAgZm9yICggaW5kZXggPSAwOyBpbmRleCA8IG5kZXZpY2VzOyBpbmRleCsrICkgeworICAgIGlmKCBkZXZfaWQgPT0gKHZvaWQqKSAmZHQzMTU1X3N0YXR1c1sgaW5kZXggXSkKKyAgICAgIHsKKwltaW5vciA9IGluZGV4OworCWJyZWFrOworICAgICAgfQorICB9CisKKyAgLyogaG9wZWZ1bGx5IHdlIHNob3VsZCBub3QgZ2V0IGhlcmUgKi8KKyAgaWYgKCBtaW5vciA8IDAgfHwgbWlub3IgPj0gTUFYQk9BUkRTICkgeworICAgIHByaW50ayhLRVJOX0VSUiAiZHQzMTU1X2lzciBjYWxsZWQgd2l0aCBpbnZhbGlkIGRldl9pZFxuIik7CisgICAgcmV0dXJuOworICB9CisKKyAgLyogQ2hlY2sgZm9yIGNvcnJ1cHRpb24gYW5kIHNldCBhIGZsYWcgaWYgc28gKi8KKyAgUmVhZE1SZWcoIChkdDMxNTVfbGJhc2VbIG1pbm9yIF0gKyBDU1IxKSwgY3NyMV9yLnJlZyApOworCisgIGlmICggKGNzcjFfci5mbGQuRkxEX0NSUFRfRVZFKSB8fCAoY3NyMV9yLmZsZC5GTERfQ1JQVF9PREQpICkKKyAgICB7CisgICAgICAvKiBUT0RPOiB0aGlzIHNob3VsZCBwcm9iYWJseSBzdG9wIGFjcXVpc2l0aW9uICovCisgICAgICAvKiBhbmQgc2V0IHNvbWUgZmxhZ3Mgc28gdGhhdCBkdDMxNTVfcmVhZCAgICAgICovCisgICAgICAvKiByZXR1cm5zIGFuIGVycm9yIG5leHQgdGltZSBpdCBpcyBjYWxsZWQgICAgICovCisgICAgICBkdDMxNTVfZXJybm8gPSBEVF9FUlJfQ09SUlVQVDsKKyAgICAgIHByaW50aygiZHQzMTU1OiAgY29ycnVwdCBmaWVsZFxuIik7CisgICAgICByZXR1cm47CisgICAgfQorCisgIFJlYWRNUmVnKChkdDMxNTVfbGJhc2VbIG1pbm9yIF0gKyBJTlRfQ1NSKSwgaW50X2Nzcl9yLnJlZyk7CisKKyAgLyogSGFuZGxlIHRoZSBldmVuIGZpZWxkIC4uLiAqLworICBpZiAoaW50X2Nzcl9yLmZsZC5GTERfRU5EX0VWRSkKKyAgICB7CisgICAgICBpZiAoIChkdDMxNTVfc3RhdHVzWyBtaW5vciBdLnN0YXRlICYgRFQzMTU1X1NUQVRFX01PREUpID09CisJICAgRFQzMTU1X1NUQVRFX0ZMRCApCisJeworCSAgZHQzMTU1X2ZidWZmZXJbIG1pbm9yIF0tPmZyYW1lX2NvdW50Kys7CisJfQorCisgICAgICBSZWFkSTJDKGR0MzE1NV9sYmFzZVsgbWlub3IgXSwgRVZFTl9DU1IsICZpMmNfZXZlbl9jc3IucmVnKTsKKworICAgICAgLyogQ2xlYXIgdGhlIGludGVycnVwdD8gKi8KKyAgICAgIGludF9jc3Jfci5mbGQuRkxEX0VORF9FVkUgPSAxOworCisgICAgICAvKiBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQgaWYgbGFzdCBmaWVsZCAqLworICAgICAgaWYgKGR0MzE1NV9mYnVmZmVyWyBtaW5vciBdLT5zdG9wX2FjcXVpcmUpCisJeworCSAgcHJpbnRrKCJkdDMxNTU6ICBldmVuIHN0b3BwZWQuXG4iKTsKKwkgIGR0MzE1NV9mYnVmZmVyWyBtaW5vciBdLT5ldmVuX3N0b3BwZWQgPSAxOworCSAgaWYgKGkyY19ldmVuX2Nzci5mbGQuU05HTF9FVkUpCisJICAgIHsKKwkgICAgICBpbnRfY3NyX3IuZmxkLkZMRF9FTkRfRVZFX0VOID0gMDsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgaTJjX2V2ZW5fY3NyLmZsZC5TTkdMX0VWRSAgPSAxOworCSAgICB9CisJfQorCisgICAgICBXcml0ZU1SZWcoIChkdDMxNTVfbGJhc2VbIG1pbm9yIF0gKyBJTlRfQ1NSKSwgaW50X2Nzcl9yLnJlZyApOworCisgICAgICAvKiBTZXQgdXAgbmV4dCBETUEgaWYgd2UgYXJlIGRvaW5nIEZJRUxEUyAqLworICAgICAgaWYgKCAoZHQzMTU1X3N0YXR1c1sgbWlub3IgXS5zdGF0ZSAmIERUMzE1NV9TVEFURV9NT0RFICkgPT0KKwkgICBEVDMxNTVfU1RBVEVfRkxEKQorCXsKKwkgIC8qIEdDUyAoQXVnIDIsIDIwMDIpIC0tIEluIGZpZWxkIG1vZGUsIGRtYSB0aGUgb2RkIGZpZWxkCisJICAgICBpbnRvIHRoZSBsb3dlciBoYWxmIG9mIHRoZSBidWZmZXIgKi8KKwkgIGNvbnN0IHUzMiBzdHJpZGUgPSAgZHQzMTU1X3N0YXR1c1sgbWlub3IgXS5jb25maWcuY29sczsKKwkgIGJ1ZmZlcl9hZGRyID0gZHQzMTU1X2ZidWZmZXJbIG1pbm9yIF0tPgorCSAgICBmcmFtZV9pbmZvWyBkdDMxNTVfZmJ1ZmZlclsgbWlub3IgXS0+YWN0aXZlX2J1ZiBdLmFkZHIKKwkgICAgKyAoRFQzMTU1X01BWF9ST1dTIC8gMikgKiBzdHJpZGU7CisJICBsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKKwkgIGxvY2FsX2lycV9kaXNhYmxlKCk7CisJICB3YWtlX3VwX2ludGVycnVwdGlibGUoICZkdDMxNTVfcmVhZF93YWl0X3F1ZXVlWyBtaW5vciBdICk7CisKKwkgIC8qIFNldCB1cCB0aGUgRE1BIGFkZHJlc3MgZm9yIHRoZSBuZXh0IGZpZWxkICovCisJICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJICBXcml0ZU1SZWcoKGR0MzE1NV9sYmFzZVsgbWlub3IgXSArIE9ERF9ETUFfU1RBUlQpLCBidWZmZXJfYWRkcik7CisJfQorCisgICAgICAvKiBDaGVjayBmb3IgZXJyb3JzLiAqLworICAgICAgaTJjX2V2ZW5fY3NyLmZsZC5ET05FX0VWRSA9IDE7CisgICAgICBpZiAoIGkyY19ldmVuX2Nzci5mbGQuRVJST1JfRVZFICkKKwlkdDMxNTVfZXJybm8gPSBEVF9FUlJfT1ZFUlJVTjsKKworICAgICAgV3JpdGVJMkMoIGR0MzE1NV9sYmFzZVsgbWlub3IgXSwgRVZFTl9DU1IsIGkyY19ldmVuX2Nzci5yZWcgKTsKKworICAgICAgLyogTm90ZSB0aGF0IHdlIGFjdHVhbGx5IHNhdyBhbiBldmVuIGZpZWxkIG1lYW5pbmcgICovCisgICAgICAvKiB0aGF0IHN1YnNlcXVlbnQgb2RkIGZpZWxkIGNvbXBsZXRlIHRoZSBmcmFtZSAgICAgKi8KKyAgICAgIGR0MzE1NV9mYnVmZmVyWyBtaW5vciBdLT5ldmVuX2hhcHBlbmVkID0gMTsKKworICAgICAgLyogcmVjb3JkaW5nIHRoZSB0aW1lIHRoYXQgdGhlIGV2ZW4gZmllbGQgZmluaXNoZWQsIHRoaXMgc2hvdWxkIGJlICovCisgICAgICAvKiBhYm91dCB0aW1lIGluIHRoZSBtaWRkbGUgb2YgdGhlIGZyYW1lICovCisgICAgICBkb19nZXR0aW1lb2ZkYXkoICYoZHQzMTU1X2ZidWZmZXJbIG1pbm9yIF0tPgorCQkJIGZyYW1lX2luZm9bIGR0MzE1NV9mYnVmZmVyWyBtaW5vciBdLT4KKwkJCQkgICAgIGFjdGl2ZV9idWYgXS50aW1lKSApOworICAgICAgcmV0dXJuOworICAgIH0KKworICAvKiAuLi4gbm93IGhhbmRsZSB0aGUgb2RkIGZpZWxkICovCisgIGlmICggaW50X2Nzcl9yLmZsZC5GTERfRU5EX09ERCApCisgICAgeworICAgICAgUmVhZEkyQyggZHQzMTU1X2xiYXNlWyBtaW5vciBdLCBPRERfQ1NSLCAmaTJjX29kZF9jc3IucmVnICk7CisKKyAgICAgIC8qIENsZWFyIHRoZSBpbnRlcnJ1cHQ/ICovCisgICAgICBpbnRfY3NyX3IuZmxkLkZMRF9FTkRfT0REID0gMTsKKworICAgICAgaWYgKGR0MzE1NV9mYnVmZmVyWyBtaW5vciBdLT5ldmVuX2hhcHBlbmVkIHx8CisJICAoZHQzMTU1X3N0YXR1c1sgbWlub3IgXS5zdGF0ZSAmIERUMzE1NV9TVEFURV9NT0RFKSA9PQorCSAgRFQzMTU1X1NUQVRFX0ZMRCkKKwl7CisJICBkdDMxNTVfZmJ1ZmZlclsgbWlub3IgXS0+ZnJhbWVfY291bnQrKzsKKwl9CisKKyAgICAgIGlmICggZHQzMTU1X2ZidWZmZXJbIG1pbm9yIF0tPnN0b3BfYWNxdWlyZSAmJgorCSAgIGR0MzE1NV9mYnVmZmVyWyBtaW5vciBdLT5ldmVuX3N0b3BwZWQgKQorCXsKKwkgIHByaW50ayhLRVJOX0RFQlVHICJkdDMxNTU6ICBzdG9wcGluZyBvZGQuLlxuIik7CisJICBpZiAoIGkyY19vZGRfY3NyLmZsZC5TTkdMX09ERCApCisJICAgIHsKKwkgICAgICAvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KKwkgICAgICBpbnRfY3NyX3IuZmxkLkZMRF9FTkRfT0REX0VOID0gMDsKKwkgICAgICBkdDMxNTVfc3RhdHVzWyBtaW5vciBdLnN0YXRlICY9IH4oRFQzMTU1X1NUQVRFX1NUT1B8MHhmZik7CisKKwkgICAgICAvKiBtYXJrIHRoZSBzeXN0ZW0gc3RvcHBlZDogKi8KKwkgICAgICBkdDMxNTVfc3RhdHVzWyBtaW5vciBdLnN0YXRlIHw9IERUMzE1NV9TVEFURV9JRExFOworCSAgICAgIGR0MzE1NV9mYnVmZmVyWyBtaW5vciBdLT5zdG9wX2FjcXVpcmUgPSAwOworCSAgICAgIGR0MzE1NV9mYnVmZmVyWyBtaW5vciBdLT5ldmVuX3N0b3BwZWQgPSAwOworCisJICAgICAgcHJpbnRrKEtFUk5fREVCVUcgImR0MzE1NTogIHN0YXRlIGlzIG5vdyAleFxuIiwKKwkJICAgICBkdDMxNTVfc3RhdHVzW21pbm9yXS5zdGF0ZSk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGkyY19vZGRfY3NyLmZsZC5TTkdMX09ERCAgPSAxOworCSAgICB9CisJfQorCisgICAgICBXcml0ZU1SZWcoIChkdDMxNTVfbGJhc2VbIG1pbm9yIF0gKyBJTlRfQ1NSKSwgaW50X2Nzcl9yLnJlZyApOworCisgICAgICAvKiBpZiB0aGUgb2RkIGZpZWxkIGhhcyBiZWVuIGFjcXVpcmVkLCB0aGVuICAgICAqLworICAgICAgLyogY2hhbmdlIHRoZSBuZXh0IGRtYSBsb2NhdGlvbiBmb3IgYm90aCBmaWVsZHMgKi8KKyAgICAgIC8qIGFuZCB3YWtlIHVwIHRoZSBwcm9jZXNzIGlmIHNsZWVwaW5nICAgICAgICAgICovCisgICAgICBpZiAoIGR0MzE1NV9mYnVmZmVyWyBtaW5vciBdLT5ldmVuX2hhcHBlbmVkIHx8CisJICAgKGR0MzE1NV9zdGF0dXNbIG1pbm9yIF0uc3RhdGUgJiBEVDMxNTVfU1RBVEVfTU9ERSkgPT0KKwkgICBEVDMxNTVfU1RBVEVfRkxEICkKKwl7CisKKwkgIGxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOworCSAgbG9jYWxfaXJxX2Rpc2FibGUoKTsKKworI2lmZGVmIERFQlVHX1FVRVNfQgorCSAgcHJpbnRxdWVzKCBtaW5vciApOworI2VuZGlmCisJICBpZiAoIGR0MzE1NV9mYnVmZmVyWyBtaW5vciBdLT5uYnVmZmVycyA+IDIgKQorCSAgICB7CisJICAgICAgaWYgKCAhYXJlX2VtcHR5X2J1ZmZlcnMoIG1pbm9yICkgKQorCQl7CisJCSAgLyogVGhlIG51bWJlciBvZiBhY3RpdmUgKyBsb2NrZWQgYnVmZmVycyBpcworCQkgICAqIGF0IG1vc3QgMiwgYW5kIHNpbmNlIHRoZXJlIGFyZSBub25lIGVtcHR5LCB0aGVyZQorCQkgICAqIG11c3QgYmUgYXQgbGVhc3QgbmJ1ZmZlcnMtMiByZWFkeSBidWZmZXJzLgorCQkgICAqIFRoaXMgaXMgd2hlcmUgd2UgJ2Ryb3AgZnJhbWVzJywgb2xkZXN0IGZpcnN0LiAqLworCQkgIHB1c2hfZW1wdHkoIHBvcF9yZWFkeSggbWlub3IgKSwgIG1pbm9yICk7CisJCX0KKworCSAgICAgIC8qIFRoZSByZWFkeV9xdWUgY2FuJ3QgYmUgZnVsbCwgc2luY2Ugd2Uga25vdworCSAgICAgICAqIHRoZXJlIGlzIG9uZSBhY3RpdmUgYnVmZmVyIHJpZ2h0IG5vdywgc28gaXQncyBzYWZlCisJICAgICAgICogdG8gcHVzaCB0aGUgYWN0aXZlIGJ1ZiBvbiB0aGUgcmVhZHlfcXVlLiAqLworCSAgICAgIHB1c2hfcmVhZHkoIG1pbm9yLCBkdDMxNTVfZmJ1ZmZlclsgbWlub3IgXS0+YWN0aXZlX2J1ZiApOworCSAgICAgIC8qIFRoZXJlJ3MgYXQgbGVhc3QgMSBlbXB0eSAtLSBtYWtlIGl0IGFjdGl2ZSAqLworCSAgICAgIGR0MzE1NV9mYnVmZmVyWyBtaW5vciBdLT5hY3RpdmVfYnVmID0gcG9wX2VtcHR5KCBtaW5vciApOworCSAgICAgIGR0MzE1NV9mYnVmZmVyWyBtaW5vciBdLT4KKwkJZnJhbWVfaW5mb1sgZHQzMTU1X2ZidWZmZXJbIG1pbm9yIF0tPgorCQkJICAgIGFjdGl2ZV9idWYgXS50YWcgPSArK3VuaXF1ZV90YWc7CisJICAgIH0KKwkgIGVsc2UgLyogbmJ1ZmZlcnMgPT0gMiwgc3BlY2lhbCBjYXNlICovCisJICAgIHsgLyogVGhlcmUgaXMgMSBhY3RpdmUgYnVmZmVyLgorCSAgICAgICAqIElmIHRoZXJlIGlzIGEgbG9ja2VkIGJ1ZmZlciwga2VlcCB0aGUgYWN0aXZlIGJ1ZmZlcgorCSAgICAgICAqIHRoZSBzYW1lIC0tIHRoYXQgbWVhbnMgd2UgZHJvcCBhIGZyYW1lLgorCSAgICAgICAqLworCSAgICAgIGlmICggZHQzMTU1X2ZidWZmZXJbIG1pbm9yIF0tPmxvY2tlZF9idWYgPCAwICkKKwkJeworCQkgIHB1c2hfcmVhZHkoIG1pbm9yLAorCQkJICAgICAgZHQzMTU1X2ZidWZmZXJbIG1pbm9yIF0tPmFjdGl2ZV9idWYgKTsKKwkJICBpZiAoYXJlX2VtcHR5X2J1ZmZlcnMoIG1pbm9yICkgKQorCQkgICAgeworCQkgICAgICBkdDMxNTVfZmJ1ZmZlclsgbWlub3IgXS0+YWN0aXZlX2J1ZiA9CisJCQlwb3BfZW1wdHkoIG1pbm9yICk7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgeyAvKiBubyBlbXB0eSBvciBsb2NrZWQgYnVmZmVycywgc28gdXNlIGEgcmVhZHlidWYgKi8KKwkJICAgICAgZHQzMTU1X2ZidWZmZXJbIG1pbm9yIF0tPmFjdGl2ZV9idWYgPQorCQkJcG9wX3JlYWR5KCBtaW5vciApOworCQkgICAgfQorCQl9CisJICAgIH0KKworI2lmZGVmIERFQlVHX1FVRVNfQgorCSAgcHJpbnRxdWVzKCBtaW5vciApOworI2VuZGlmCisKKwkgIGR0MzE1NV9mYnVmZmVyWyBtaW5vciBdLT5ldmVuX2hhcHBlbmVkID0gMDsKKworCSAgd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCAmZHQzMTU1X3JlYWRfd2FpdF9xdWV1ZVsgbWlub3IgXSApOworCisJICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfQorCisKKyAgICAgIC8qIFNldCB1cCB0aGUgRE1BIGFkZHJlc3MgZm9yIHRoZSBuZXh0IGZyYW1lL2ZpZWxkICovCisgICAgICBidWZmZXJfYWRkciA9IGR0MzE1NV9mYnVmZmVyWyBtaW5vciBdLT4KKwlmcmFtZV9pbmZvWyBkdDMxNTVfZmJ1ZmZlclsgbWlub3IgXS0+YWN0aXZlX2J1ZiBdLmFkZHI7CisgICAgICBpZiAoIChkdDMxNTVfc3RhdHVzWyBtaW5vciBdLnN0YXRlICYgRFQzMTU1X1NUQVRFX01PREUpID09CisJICAgRFQzMTU1X1NUQVRFX0ZMRCApCisJeworCSAgV3JpdGVNUmVnKChkdDMxNTVfbGJhc2VbIG1pbm9yIF0gKyBFVkVOX0RNQV9TVEFSVCksIGJ1ZmZlcl9hZGRyKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgV3JpdGVNUmVnKChkdDMxNTVfbGJhc2VbIG1pbm9yIF0gKyBFVkVOX0RNQV9TVEFSVCksIGJ1ZmZlcl9hZGRyKTsKKworCSAgV3JpdGVNUmVnKChkdDMxNTVfbGJhc2VbIG1pbm9yIF0gKyBPRERfRE1BX1NUQVJUKSwgYnVmZmVyX2FkZHIKKwkJICAgICsgZHQzMTU1X3N0YXR1c1sgbWlub3IgXS5jb25maWcuY29scyk7CisJfQorCisgICAgICAvKiBEbyBlcnJvciBjaGVja2luZyAqLworICAgICAgaTJjX29kZF9jc3IuZmxkLkRPTkVfT0REID0gMTsKKyAgICAgIGlmICggaTJjX29kZF9jc3IuZmxkLkVSUk9SX09ERCApCisJZHQzMTU1X2Vycm5vID0gRFRfRVJSX09WRVJSVU47CisKKyAgICAgIFdyaXRlSTJDKGR0MzE1NV9sYmFzZVsgbWlub3IgXSwgT0REX0NTUiwgaTJjX29kZF9jc3IucmVnICk7CisKKyAgICAgIHJldHVybjsKKyAgICB9CisgIC8qIElmIHdlIGdldCBoZXJlLCB0aGUgT2RkIEZpZWxkIHdhc24ndCBpdCBlaXRoZXIuLi4gKi8KKyAgcHJpbnRrKCAibmVpdGhlciBldmVuIG5vciBvZGQuICBzaGFyZWQgcGVyaGFwcz9cbiIpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGluaXRfaXNyKGludCBtaW5vcikKKyAqICAgdHVybnMgb24gaW50ZXJ1cHQgZ2VuZXJhdGlvbiBmb3IgdGhlIGNhcmQKKyAqICAgZGVzaWduYXRlZCBieSAibWlub3IiLgorICogICBJdCBpcyBjYWxsZWQgKm9ubHkqIGZyb20gaW5zaWRlIGlvY3RsKCkuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCBkdDMxNTVfaW5pdF9pc3IoaW50IG1pbm9yKQoreworICBjb25zdCB1MzIgc3RyaWRlID0gIGR0MzE1NV9zdGF0dXNbIG1pbm9yIF0uY29uZmlnLmNvbHM7CisKKyAgc3dpdGNoIChkdDMxNTVfc3RhdHVzWyBtaW5vciBdLnN0YXRlICYgRFQzMTU1X1NUQVRFX01PREUpCisgICAgeworICAgIGNhc2UgRFQzMTU1X1NUQVRFX0ZMRDoKKyAgICAgIHsKKwlldmVuX2RtYV9zdGFydF9yICA9IGR0MzE1NV9zdGF0dXNbIG1pbm9yIF0uCisJICBmYnVmZmVyLmZyYW1lX2luZm9bIGR0MzE1NV9zdGF0dXNbIG1pbm9yIF0uZmJ1ZmZlci5hY3RpdmVfYnVmIF0uYWRkcjsKKwlldmVuX2RtYV9zdHJpZGVfciA9IDA7CisJb2RkX2RtYV9zdHJpZGVfciAgPSAwOworCisJV3JpdGVNUmVnKChkdDMxNTVfbGJhc2VbIG1pbm9yIF0gKyBFVkVOX0RNQV9TVEFSVCksCisJCSAgZXZlbl9kbWFfc3RhcnRfcik7CisJV3JpdGVNUmVnKChkdDMxNTVfbGJhc2VbIG1pbm9yIF0gKyBFVkVOX0RNQV9TVFJJREUpLAorCQkgIGV2ZW5fZG1hX3N0cmlkZV9yKTsKKwlXcml0ZU1SZWcoKGR0MzE1NV9sYmFzZVsgbWlub3IgXSArIE9ERF9ETUFfU1RSSURFKSwKKwkJICBvZGRfZG1hX3N0cmlkZV9yKTsKKwlicmVhazsKKyAgICAgIH0KKworICAgIGNhc2UgRFQzMTU1X1NUQVRFX0ZSQU1FOgorICAgIGRlZmF1bHQ6CisgICAgICB7CisJZXZlbl9kbWFfc3RhcnRfciAgPSBkdDMxNTVfc3RhdHVzWyBtaW5vciBdLgorCSAgZmJ1ZmZlci5mcmFtZV9pbmZvWyBkdDMxNTVfc3RhdHVzWyBtaW5vciBdLmZidWZmZXIuYWN0aXZlX2J1ZiBdLmFkZHI7CisJb2RkX2RtYV9zdGFydF9yICAgPSAgZXZlbl9kbWFfc3RhcnRfciArIHN0cmlkZTsKKwlldmVuX2RtYV9zdHJpZGVfciA9ICBzdHJpZGU7CisJb2RkX2RtYV9zdHJpZGVfciAgPSAgc3RyaWRlOworCisJV3JpdGVNUmVnKChkdDMxNTVfbGJhc2VbIG1pbm9yIF0gKyBFVkVOX0RNQV9TVEFSVCksCisJCSAgZXZlbl9kbWFfc3RhcnRfcik7CisJV3JpdGVNUmVnKChkdDMxNTVfbGJhc2VbIG1pbm9yIF0gKyBPRERfRE1BX1NUQVJUKSwKKwkJICBvZGRfZG1hX3N0YXJ0X3IpOworCVdyaXRlTVJlZygoZHQzMTU1X2xiYXNlWyBtaW5vciBdICsgRVZFTl9ETUFfU1RSSURFKSwKKwkJICBldmVuX2RtYV9zdHJpZGVfcik7CisJV3JpdGVNUmVnKChkdDMxNTVfbGJhc2VbIG1pbm9yIF0gKyBPRERfRE1BX1NUUklERSksCisJCSAgb2RkX2RtYV9zdHJpZGVfcik7CisJYnJlYWs7CisgICAgICB9CisgICAgfQorCisgIC8qIDUwLzYwIEh6IHNob3VsZCBiZSBzZXQgYmVmb3JlIHRoaXMgcG9pbnQgYnV0IGxldCdzIG1ha2Ugc3VyZSBpdCBpcyAqLworICAvKiByaWdodCBhbnl3YXkgKi8KKworICBSZWFkSTJDKGR0MzE1NV9sYmFzZVsgbWlub3IgXSwgQ09ORklHLCAmaTJjX2NzcjIucmVnKTsKKyAgaTJjX2NzcjIuZmxkLkhaNTAgPSBGT1JNQVQ1MEhaOworICBXcml0ZUkyQyhkdDMxNTVfbGJhc2VbIG1pbm9yIF0sIENPTkZJRywgaTJjX2NvbmZpZy5yZWcpOworCisgIC8qIGVuYWJsZSBidXNtYXN0ZXIgY2hpcCwgY2xlYXIgZmxhZ3MgKi8KKworICAvKgorICAgKiBUT0RPOgorICAgKiBzaG91bGRuJ3Qgd2UgYmUgY29uY2VyZWQgd2l0aCBjb250aW51b3VzIHZhbHVlcyBvZgorICAgKiBEVDMxNTVfU05BUCAmIERUMzE1NV9BQ1EgaGVyZT8gKFNTKQorICAgKi8KKworICBjc3IxX3IucmVnICAgICAgICAgICAgICAgID0gMDsKKyAgY3NyMV9yLmZsZC5DQVBfQ09OVF9FVkUgICA9IDE7IC8qIHVzZSBjb250aW51b3VzIGNhcHR1cmUgYml0cyB0byAqLworICBjc3IxX3IuZmxkLkNBUF9DT05UX09ERCAgID0gMTsgLyogZW5hYmxlICovCisgIGNzcjFfci5mbGQuRkxEX0ROX0VWRSAgICAgPSAxOyAvKiB3cml0aW5nIGEgMSBjbGVhcnMgZmxhZ3MgKi8KKyAgY3NyMV9yLmZsZC5GTERfRE5fT0REICAgICA9IDE7CisgIGNzcjFfci5mbGQuU1JTVCAgICAgICAgICAgPSAxOyAvKiByZXNldCAgICAgICAgLSBtdXN0IGJlIDEgKi8KKyAgY3NyMV9yLmZsZC5GSUZPX0VOICAgICAgICA9IDE7IC8qIGZpZm8gY29udHJvbCAtIG11c3QgYmUgMSAqLworICBjc3IxX3IuZmxkLkZMRF9DUlBUX0VWRSAgID0gMTsgLyogd3JpdGluZyBhIDEgY2xlYXJzIGZsYWdzICovCisgIGNzcjFfci5mbGQuRkxEX0NSUFRfT0REICAgPSAxOworCisgIFdyaXRlTVJlZygoZHQzMTU1X2xiYXNlWyBtaW5vciBdICsgQ1NSMSksY3NyMV9yLnJlZyk7CisKKyAgLyogRW5hYmxlIGludGVycnVwdHMgYXQgdGhlIGVuZCBvZiBlYWNoIGZpZWxkICovCisKKyAgaW50X2Nzcl9yLnJlZyA9IDA7CisgIGludF9jc3Jfci5mbGQuRkxEX0VORF9FVkVfRU4gPSAxOworICBpbnRfY3NyX3IuZmxkLkZMRF9FTkRfT0REX0VOID0gMTsKKyAgaW50X2Nzcl9yLmZsZC5GTERfU1RBUlRfRU4gPSAwOworCisgIFdyaXRlTVJlZygoZHQzMTU1X2xiYXNlWyBtaW5vciBdICsgSU5UX0NTUiksIGludF9jc3Jfci5yZWcpOworCisgIC8qIHN0YXJ0IGludGVybmFsIEJVU1kgYml0cyAqLworCisgIFJlYWRJMkMoZHQzMTU1X2xiYXNlWyBtaW5vciBdLCBDU1IyLCAmaTJjX2NzcjIucmVnKTsKKyAgaTJjX2NzcjIuZmxkLkJVU1lfT0REICA9IDE7CisgIGkyY19jc3IyLmZsZC5CVVNZX0VWRSAgPSAxOworICBXcml0ZUkyQyhkdDMxNTVfbGJhc2VbIG1pbm9yIF0sIENTUjIsIGkyY19jc3IyLnJlZyk7CisKKyAgLyogTm93IGl0cyB1cCB0byB0aGUgaW50ZXJydXB0IHJvdXRpbmUhISAqLworCisgIHJldHVybjsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlvY3RsKCkKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGR0MzE1NV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJc3RydWN0IGZpbGUgKmZpbGUsCisJCQl1bnNpZ25lZCBpbnQgY21kLAorCQkJdW5zaWduZWQgbG9uZyBhcmcpCit7CisgIGludCBtaW5vciA9IE1JTk9SKGlub2RlLT5pX3JkZXYpOyAvKiBXaGF0IGRldmljZSBhcmUgd2UgaW9jdGwoKSdpbmc/ICovCisKKyAgaWYgKCBtaW5vciA+PSBNQVhCT0FSRFMgfHwgbWlub3IgPCAwICkKKyAgICByZXR1cm4gLUVOT0RFVjsKKworICAvKiBtYWtlIHN1cmUgaXQgaXMgdmFsaWQgY29tbWFuZCAqLworICBpZiAoX0lPQ19OUihjbWQpID4gRFQzMTU1X0lPQ19NQVhOUikKKyAgICB7CisgICAgICBwcmludGsoIkRUMzE1NTogaW52YWxpZCBJT0NUTCgweCV4KVxuIixjbWQpOworICAgICAgcHJpbnRrKCJEVDMxNTU6IFZhbGlkIGNvbW1hbmRzICgweCV4KSwgKDB4JXgpLCAoMHgleCksICgweCV4KSwgKDB4JXgpXG4iLAorCSAgICAgKHVuc2lnbmVkIGludClEVDMxNTVfR0VUX0NPTkZJRywKKwkgICAgICh1bnNpZ25lZCBpbnQpRFQzMTU1X1NFVF9DT05GSUcsCisJICAgICAodW5zaWduZWQgaW50KURUMzE1NV9TVEFSVCwKKwkgICAgICh1bnNpZ25lZCBpbnQpRFQzMTU1X1NUT1AsCisJICAgICAodW5zaWduZWQgaW50KURUMzE1NV9GTFVTSCk7CisgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgc3dpdGNoIChjbWQpCisgICAgeworICAgIGNhc2UgRFQzMTU1X1NFVF9DT05GSUc6CisgICAgICB7CisJaWYgKGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlICE9IERUMzE1NV9TVEFURV9JRExFKQorCSAgcmV0dXJuIC1FQlVTWTsKKworCXsKKwkgIHN0cnVjdCBkdDMxNTVfY29uZmlnX3MgdG1wOworCSAgaWYgKGNvcHlfZnJvbV91c2VyKCh2b2lkICopJnRtcCwgKHZvaWQgKikgYXJnLCBzaXplb2YodG1wKSkpCisJICAgICAgcmV0dXJuIC1FRkFVTFQ7CisJICAvKiBjaGVjayBmb3IgdmFsaWQgc2V0dGluZ3MgKi8KKwkgIGlmICh0bXAucm93cyA+IERUMzE1NV9NQVhfUk9XUyB8fAorCSAgICAgIHRtcC5jb2xzID4gRFQzMTU1X01BWF9DT0xTIHx8CisJICAgICAgKHRtcC5hY3FfbW9kZSAhPSBEVDMxNTVfTU9ERV9GUkFNRSAmJgorCSAgICAgICB0bXAuYWNxX21vZGUgIT0gRFQzMTU1X01PREVfRklFTEQpIHx8CisJICAgICAgKHRtcC5jb250aW51b3VzICE9IERUMzE1NV9TTkFQICYmCisJICAgICAgIHRtcC5jb250aW51b3VzICE9IERUMzE1NV9BQ1EpKQorCSAgICB7CisJICAgICAgcmV0dXJuIC1FSU5WQUw7CisJICAgIH0KKwkgIGR0MzE1NV9zdGF0dXNbbWlub3JdLmNvbmZpZyA9IHRtcDsKKwl9CisJcmV0dXJuIDA7CisgICAgICB9CisgICAgY2FzZSBEVDMxNTVfR0VUX0NPTkZJRzoKKyAgICAgIHsKKwlpZiAoY29weV90b191c2VyKCh2b2lkICopIGFyZywgKHZvaWQgKikgJmR0MzE1NV9zdGF0dXNbbWlub3JdLAorCQkgICAgIHNpemVvZihkdDMxNTVfc3RhdHVzX3QpICkpCisJICAgIHJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworICAgICAgfQorICAgIGNhc2UgRFQzMTU1X0ZMVVNIOiAvKiBGbHVzaGVzIHRoZSBidWZmZXJzIC0tIGVuc3VyZXMgZnJlc2ggZGF0YSAqLworICAgICAgeworCWlmIChkdDMxNTVfc3RhdHVzW21pbm9yXS5zdGF0ZSAhPSBEVDMxNTVfU1RBVEVfSURMRSkKKwkgIHJldHVybiAtRUJVU1k7CisJcmV0dXJuIGR0MzE1NV9mbHVzaChtaW5vcik7CisgICAgICB9CisgICAgY2FzZSBEVDMxNTVfU1RPUDoKKyAgICAgIHsKKwlpZiAoZHQzMTU1X3N0YXR1c1ttaW5vcl0uc3RhdGUgJiBEVDMxNTVfU1RBVEVfU1RPUCB8fAorCSAgICBkdDMxNTVfc3RhdHVzW21pbm9yXS5mYnVmZmVyLnN0b3BfYWNxdWlyZSkKKwkgIHJldHVybiAtRUJVU1k7CisKKwlpZiAoZHQzMTU1X3N0YXR1c1ttaW5vcl0uc3RhdGUgPT0gRFQzMTU1X1NUQVRFX0lETEUpCisJICByZXR1cm4gMDsKKworCXF1aWNrX3N0b3AobWlub3IpOworCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgKikgYXJnLCAodm9pZCAqKSAmZHQzMTU1X3N0YXR1c1ttaW5vcl0sCisJCSAgICAgc2l6ZW9mKGR0MzE1NV9zdGF0dXNfdCkpKQorCSAgICByZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKKyAgICAgIH0KKyAgICBjYXNlIERUMzE1NV9TVEFSVDoKKyAgICAgIHsKKwlpZiAoZHQzMTU1X3N0YXR1c1ttaW5vcl0uc3RhdGUgIT0gRFQzMTU1X1NUQVRFX0lETEUpCisJICByZXR1cm4gLUVCVVNZOworCisJZHQzMTU1X3N0YXR1c1ttaW5vcl0uZmJ1ZmZlci5zdG9wX2FjcXVpcmUgPSAwOworCWR0MzE1NV9zdGF0dXNbbWlub3JdLmZidWZmZXIuZnJhbWVfY291bnQgPSAwOworCisJLyogU2V0IHRoZSBNT0RFIGluIHRoZSBzdGF0dXMgLS0gd2UgZGVmYXVsdCB0byBGUkFNRSAqLworCWlmIChkdDMxNTVfc3RhdHVzW21pbm9yXS5jb25maWcuYWNxX21vZGUgPT0gRFQzMTU1X01PREVfRklFTEQpCisJICB7CisJICAgIGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlID0gRFQzMTU1X1NUQVRFX0ZMRDsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlID0gRFQzMTU1X1NUQVRFX0ZSQU1FOworCSAgfQorCisJZHQzMTU1X2luaXRfaXNyKG1pbm9yKTsKKwlpZiAoY29weV90b191c2VyKCAodm9pZCAqKSBhcmcsICh2b2lkICopICZkdDMxNTVfc3RhdHVzW21pbm9yXSwKKwkJICAgICAgc2l6ZW9mKGR0MzE1NV9zdGF0dXNfdCkpKQorCSAgICByZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKKyAgICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgeworCXByaW50aygiRFQzMTU1OiBpbnZhbGlkIElPQ1RMKDB4JXgpXG4iLGNtZCk7CisgICAgICBwcmludGsoIkRUMzE1NTogVmFsaWQgY29tbWFuZHMgKDB4JXgpLCAoMHgleCksICgweCV4KSwgKDB4JXgpLCAoMHgleClcbiIsCisJICAgICAodW5zaWduZWQgaW50KURUMzE1NV9HRVRfQ09ORklHLAorCSAgICAgKHVuc2lnbmVkIGludClEVDMxNTVfU0VUX0NPTkZJRywKKwkgICAgIERUMzE1NV9TVEFSVCwgRFQzMTU1X1NUT1AsIERUMzE1NV9GTFVTSCk7CisJcmV0dXJuIC1FTk9TWVM7CisgICAgICB9CisgICAgfQorICByZXR1cm4gLUVOT1NZUzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBtbWFwKCkKKyAqCisgKiBvbmx5IGFsbG93IHRoZSB1c2VyIHRvIG1tYXAgdGhlIHJlZ2lzdGVycyBhbmQgYnVmZmVyCisgKiBJdCBpcyBxdWl0ZSBwb3NzaWJsZSB0aGF0IHRoaXMgaXMgYnJva2VuLCBzaW5jZSB0aGUKKyAqIGFkZGl0aW9uIG9mIG9mIHRoZSBjYXBhY2l0eSBmb3IgdHdvIGNhcmRzISEhISEhISEKKyAqIEl0ICpsb29rcyogbGlrZSBpdCBzaG91bGQgd29yayBidXQgc2luY2UgSSdtIG5vdAorICogc3VyZSBob3cgdG8gdXNlIGl0LCBJJ20gbm90IGFjdHVhbGx5IHN1cmUuIChOSkM/IGRpdHRvIGJ5IFNTKQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBkdDMxNTVfbW1hcCAoc3RydWN0IGZpbGUgKiBmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpCit7CisgIC8qIHdoaWNoIGRldmljZSBhcmUgd2UgbW1hcHBpbmc/ICovCisgIGludAkJCQltaW5vciA9IE1JTk9SKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3JkZXYpOworICB1bnNpZ25lZCBsb25nCW9mZnNldDsKKyAgb2Zmc2V0ID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOworCisgIGlmIChvZmZzZXQgPj0gX19wYShoaWdoX21lbW9yeSkgfHwgKGZpbGUtPmZfZmxhZ3MgJiBPX1NZTkMpKQorICAgIHZtYS0+dm1fZmxhZ3MgfD0gVk1fSU87CisKKyAgLyogRG9uJ3QgdHJ5IHRvIHN3YXAgb3V0IHBoeXNpY2FsIHBhZ2VzLi4gKi8KKyAgdm1hLT52bV9mbGFncyB8PSBWTV9SRVNFUlZFRDsKKworICAvKiB0aGV5IGFyZSBtYXBwaW5nIHRoZSByZWdpc3RlcnMgb3IgdGhlIGJ1ZmZlciAqLworICBpZiAoKG9mZnNldCA9PSBkdDMxNTVfc3RhdHVzW21pbm9yXS5yZWdfYWRkciAmJgorICAgICAgIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCA9PSBQQ0lfUEFHRV9TSVpFKSB8fAorICAgICAgKG9mZnNldCA9PSBkdDMxNTVfc3RhdHVzW21pbm9yXS5tZW1fYWRkciAmJgorICAgICAgIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCA9PSBkdDMxNTVfc3RhdHVzW21pbm9yXS5tZW1fc2l6ZSkpCisgICAgeworICAgICAgaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsCisJCQl2bWEtPnZtX3N0YXJ0LAorCQkJb2Zmc2V0ID4+IFBBR0VfU0hJRlQsCisJCQl2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCisJCQl2bWEtPnZtX3BhZ2VfcHJvdCkpIHsKKwkgIHByaW50aygiRFQzMTU1OiByZW1hcF9wYWdlX3JhbmdlKCkgZmFpbGVkLlxuIik7CisJICByZXR1cm4gLUVBR0FJTjsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgcHJpbnRrKCJEVDMxNTU6IGR0MzE1NV9tbWFwKCkgYmFkIGNhbGwuXG4iKTsKKyAgICAgIHJldHVybiAtRU5YSU87CisgICAgfQorCisgIHJldHVybiAwOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogb3BlbigpCisgKgorICogT3VyIHNwZWNpYWwgb3BlbiBjb2RlLgorICogTU9EX0lOQ19VU0VfQ09VTlQgbWFrZSBzdXJlIHRoYXQgdGhlIGRyaXZlciBtZW1vcnkgaXMgbm90IGZyZWVkCisgKiB3aGlsZSB0aGUgZGV2aWNlIGlzIGluIHVzZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZHQzMTU1X29wZW4oIHN0cnVjdCBpbm9kZSogaW5vZGUsIHN0cnVjdCBmaWxlKiBmaWxlcCkKK3sKKyAgaW50IG1pbm9yID0gTUlOT1IoaW5vZGUtPmlfcmRldik7IC8qIHdoYXQgZGV2aWNlIGFyZSB3ZSBvcGVuaW5nPyAqLworICBpZiAoZHQzMTU1X2Rldl9vcGVuWyBtaW5vciBdKSB7CisgICAgcHJpbnRrICgiRFQzMTU1OiAgQWxyZWFkeSBvcGVuZWQgYnkgYW5vdGhlciBwcm9jZXNzLlxuIik7CisgICAgcmV0dXJuIC1FQlVTWTsKKyAgfQorCisgIGlmIChkdDMxNTVfc3RhdHVzWyBtaW5vciBdLmRldmljZV9pbnN0YWxsZWQ9PTApCisgICAgeworICAgICAgcHJpbnRrKCJEVDMxNTUgT3BlbiBFcnJvcjogTm8gc3VjaCBkZXZpY2UgZHQzMTU1IG1pbm9yIG51bWJlciAlZFxuIiwKKwkgICAgIG1pbm9yKTsKKyAgICAgIHJldHVybiAtRUlPOworICAgIH0KKworICBpZiAoZHQzMTU1X3N0YXR1c1sgbWlub3IgXS5zdGF0ZSAhPSBEVDMxNTVfU1RBVEVfSURMRSkgeworICAgIHByaW50ayAoIkRUMzE1NTogIE5vdCBpbiBpZGxlIHN0YXRlIChzdGF0ZSA9ICV4KVxuIiwKKwkgICAgZHQzMTU1X3N0YXR1c1sgbWlub3IgXS5zdGF0ZSk7CisgICAgcmV0dXJuIC1FQlVTWTsKKyAgfQorCisgIHByaW50aygiRFQzMTU1OiBEZXZpY2Ugb3BlbmVkLlxuIik7CisKKyAgZHQzMTU1X2Rldl9vcGVuWyBtaW5vciBdID0gMSA7CisKKyAgZHQzMTU1X2ZsdXNoKCBtaW5vciApOworCisgIC8qIERpc2FibGUgQUxMIGludGVycnVwdHMgKi8KKyAgaW50X2Nzcl9yLnJlZyA9IDA7CisgIFdyaXRlTVJlZyggKGR0MzE1NV9sYmFzZVsgbWlub3IgXSArIElOVF9DU1IpLCBpbnRfY3NyX3IucmVnICk7CisKKyAgaW5pdF93YWl0cXVldWVfaGVhZCgmKGR0MzE1NV9yZWFkX3dhaXRfcXVldWVbbWlub3JdKSk7CisKKyAgcmV0dXJuIDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBjbG9zZSgpCisgKgorICogTm93IGRlY3JlbWVudCB0aGUgdXNlIGNvdW50LgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZHQzMTU1X2Nsb3NlKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApCit7CisgIGludCBtaW5vcjsKKworICBtaW5vciA9IE1JTk9SKGlub2RlLT5pX3JkZXYpOyAvKiB3aGljaCBkZXZpY2UgYXJlIHdlIGNsb3NpbmcgKi8KKyAgaWYgKCFkdDMxNTVfZGV2X29wZW5bIG1pbm9yIF0pCisgICAgeworICAgICAgcHJpbnRrKCJEVDMxNTU6IGF0dGVtcHQgdG8gQ0xPU0UgYSBub3QgT1BFTiBkZXZpY2VcbiIpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGR0MzE1NV9kZXZfb3BlblsgbWlub3IgXSA9IDA7CisKKyAgICAgIGlmIChkdDMxNTVfc3RhdHVzWyBtaW5vciBdLnN0YXRlICE9IERUMzE1NV9TVEFURV9JRExFKQorCXsKKwkgIHF1aWNrX3N0b3AobWlub3IpOworCX0KKyAgICB9CisgIHJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHJlYWQoKQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzc2l6ZV90IGR0MzE1NV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlcCwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworICAvKiB3aGljaCBkZXZpY2UgYXJlIHdlIHJlYWRpbmcgZnJvbT8gKi8KKyAgaW50CQltaW5vciA9IE1JTk9SKGZpbGVwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9yZGV2KTsKKyAgdTMyCQlvZmZzZXQ7CisgIGludAkJZnJhbWVfaW5kZXg7CisgIGZyYW1lX2luZm9fdAkqZnJhbWVfaW5mb19wOworCisgIC8qIFRPRE86IHRoaXMgc2hvdWxkIGNoZWNrIHRoZSBlcnJvciBmbGFnIGFuZCAqLworICAvKiAgIHJldHVybiBhbiBlcnJvciBvbiBoYXJkd2FyZSBmYWlsdXJlcyAqLworICBpZiAoY291bnQgIT0gc2l6ZW9mKGR0MzE1NV9yZWFkX3QpKQorICAgIHsKKyAgICAgIHByaW50aygiRFQzMTU1IEVSUk9SIChOSkMpOiBjb3VudCBpcyBub3QgcmlnaHRcbiIpOworICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisKKyAgLyogSGFjayBoZXJlIC0tIEknbSBnb2luZyB0byBhbGxvdyByZWFkaW5nIGV2ZW4gd2hlbiBpZGxlLgorICAgKiB0aGlzIGlzIHNvIHRoYXQgdGhlIGZyYW1lcyBjYW4gYmUgcmVhZCBhZnRlciBTVE9QIGhhcworICAgKiBiZWVuIGNhbGxlZC4gIExlYXZpbmcgaXQgaGVyZSwgY29tbWVudGVkIG91dCwgYXMgYSByZW1pbmRlcgorICAgKiBmb3IgYSBzaG9ydCB3aGlsZSB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHByb2JsZW1zLgorICAgKiBOb3RlIHRoYXQgaWYgdGhlIGRyaXZlciBpcyBub3Qgb3BlbmVkIGluIG5vbl9ibG9ja2luZyBtb2RlLAorICAgKiBhbmQgdGhlIGRldmljZSBpcyBpZGxlLCB0aGVuIGl0IGNvdWxkIHNpdCBoZXJlIGZvcmV2ZXIhICovCisKKyAgLyogIGlmIChkdDMxNTVfc3RhdHVzW21pbm9yXS5zdGF0ZSA9PSBEVDMxNTVfU1RBVEVfSURMRSkqLworICAvKiAgICByZXR1cm4gLUVCVVNZOyovCisKKyAgLyogbm9uLWJsb2NraW5nIHJlYWRzIHNob3VsZCByZXR1cm4gaWYgbm8gZGF0YSAqLworICBpZiAoZmlsZXAtPmZfZmxhZ3MgJiBPX05ERUxBWSkKKyAgICB7CisgICAgICBpZiAoKGZyYW1lX2luZGV4ID0gZHQzMTU1X2dldF9yZWFkeV9idWZmZXIobWlub3IpKSA8IDApIHsKKwkvKnByaW50ayggImR0MzE1NTogIG5vIGJ1ZmZlcnMgYXZhaWxhYmxlICg/KVxuIik7Ki8KKwkvKiAJCXByaW50cXVlcyhtaW5vcik7ICovCisJcmV0dXJuIC1FQUdBSU47CisgICAgICB9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyoKKyAgICAgICAqIHNsZWVwIHRpbGwgZGF0YSBhcnJpdmVzICwgb3Igd2UgZ2V0IGludGVycnVwdGVkLgorICAgICAgICogTm90ZSB0aGF0IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSgpIGRvZXMgbm90IGFjdHVhbGx5CisgICAgICAgKiBzbGVlcC93YWl0IGlmIGl0J3MgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlIHVwb24gZW50cnkuCisgICAgICAgKi8KKyAgICAgIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkdDMxNTVfcmVhZF93YWl0X3F1ZXVlW21pbm9yXSwKKwkJCSAgICAgICAoZnJhbWVfaW5kZXggPSBkdDMxNTVfZ2V0X3JlYWR5X2J1ZmZlcihtaW5vcikpCisJCQkgICAgICAgPj0gMCk7CisKKyAgICAgIGlmIChmcmFtZV9pbmRleCA8IDApCisJeworCSAgcHJpbnRrICgiRFQzMTU1OiByZWFkOiBpbnRlcnJ1cHRlZFxuIik7CisJICBxdWlja19zdG9wIChtaW5vcik7CisJICBwcmludHF1ZXMobWlub3IpOworCSAgcmV0dXJuIC1FSU5UUjsKKwl9CisgICAgfQorCisgIGZyYW1lX2luZm9fcCA9ICZkdDMxNTVfc3RhdHVzW21pbm9yXS5mYnVmZmVyLmZyYW1lX2luZm9bZnJhbWVfaW5kZXhdOworCisgIC8qIG1ha2UgdGhpcyBhbiBvZmZzZXQgKi8KKyAgb2Zmc2V0ID0gZnJhbWVfaW5mb19wLT5hZGRyIC0gZHQzMTU1X3N0YXR1c1ttaW5vcl0ubWVtX2FkZHI7CisKKyAgcHV0X3VzZXIob2Zmc2V0LCAodW5zaWduZWQgaW50ICopIGJ1Zik7CisgIGJ1ZiArPSBzaXplb2YodTMyKTsKKyAgcHV0X3VzZXIoIGR0MzE1NV9zdGF0dXNbbWlub3JdLmZidWZmZXIuZnJhbWVfY291bnQsICh1bnNpZ25lZCBpbnQgKikgYnVmKTsKKyAgYnVmICs9IHNpemVvZih1MzIpOworICBwdXRfdXNlcihkdDMxNTVfc3RhdHVzW21pbm9yXS5zdGF0ZSwgKHVuc2lnbmVkIGludCAqKSBidWYpOworICBidWYgKz0gc2l6ZW9mKHUzMik7CisgIGlmIChjb3B5X3RvX3VzZXIoYnVmLCBmcmFtZV9pbmZvX3AsIHNpemVvZihmcmFtZV9pbmZvX3QpKSkKKyAgICAgIHJldHVybiAtRUZBVUxUOworCisgIHJldHVybiBzaXplb2YoZHQzMTU1X3JlYWRfdCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZHQzMTU1X3BvbGwgKHN0cnVjdCBmaWxlICogZmlscCwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKyAgaW50IG1pbm9yID0gTUlOT1IoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcmRldik7CisKKyAgaWYgKCFpc19yZWFkeV9idWZfZW1wdHkobWlub3IpKQorICAgIHJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOworCisgIHBvbGxfd2FpdCAoZmlscCwgJmR0MzE1NV9yZWFkX3dhaXRfcXVldWVbbWlub3JdLCB3YWl0KTsKKworICByZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGZpbGUgb3BlcmF0aW9ucyBzdXBwb3J0ZWQgYnkgRFQzMTU1IGRyaXZlcgorICogIG5lZWRlZCBieSBpbml0X21vZHVsZQorICogIHJlZ2lzdGVyX2NocmRldgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHQzMTU1X2ZvcHMgPSB7CisgIHJlYWQ6CQlkdDMxNTVfcmVhZCwKKyAgaW9jdGw6CQlkdDMxNTVfaW9jdGwsCisgIG1tYXA6CQlkdDMxNTVfbW1hcCwKKyAgcG9sbDogICAgICAgICAgIGR0MzE1NV9wb2xsLAorICBvcGVuOgkJZHQzMTU1X29wZW4sCisgIHJlbGVhc2U6CWR0MzE1NV9jbG9zZQorfTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGZpbmRfUENJKCk7CisgKgorICogUENJIGhhcyBiZWVuIHRvdGFsbHkgcmV3b3JrZWQgaW4gMi4xLi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZmluZF9QQ0kgKHZvaWQpCit7CisgIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gTlVMTDsKKyAgaW50IGVycm9yLCBwY2lfaW5kZXggPSAwOworICB1bnNpZ25lZCBzaG9ydCByZXZfZGV2aWNlOworICB1bnNpZ25lZCBsb25nIGJhc2U7CisgIHVuc2lnbmVkIGNoYXIgaXJxOworCisgIHdoaWxlICgocGNpX2RldiA9IHBjaV9nZXRfZGV2aWNlCisJICAoRFQzMTU1X1ZFTkRPUklELCBEVDMxNTVfREVWSUNFSUQsIHBjaV9kZXYpKSAhPSBOVUxMKQorICAgIHsKKyAgICAgIHBjaV9pbmRleCArKzsKKworICAgICAgLyogSXMgaXQgcmVhbGx5IHRoZXJlPyAqLworICAgICAgaWYgKChlcnJvciA9CisJICAgcGNpX3JlYWRfY29uZmlnX3dvcmQocGNpX2RldiwgUENJX0NMQVNTX0RFVklDRSwgJnJldl9kZXZpY2UpKSkKKwljb250aW51ZTsKKworICAgICAgLyogRm91bmQgYSBib2FyZCAqLworICAgICAgRFRfMzE1NV9ERUJVR19NU0coIkRUMzE1NTogRGV2aWNlIG51bWJlciAlZCBcbiIsIHBjaV9pbmRleCk7CisKKyAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgZHJpdmVyIHdhcyBjb21waWxlZCB3aXRoIGVub3VnaCBidWZmZXJzIHRvIGhhbmRsZQorCSB0aGlzIG1hbnkgYm9hcmRzICovCisgICAgICBpZiAocGNpX2luZGV4ID4gTUFYQk9BUkRTKSB7CisJcHJpbnRrKCJEVDMxNTU6IEVSUk9SIC0gZm91bmQgJWQgZGV2aWNlcywgYnV0IGRyaXZlciBvbmx5IGNvbmZpZ3VyZWQgIgorCSAgICAgICAiZm9yICVkIGRldmljZXNcbiIKKwkgICAgICAgIkRUMzE1NTogUGxlYXNlIGNoYW5nZSBNQVhCT0FSRFMgaW4gZHQzMTU1LmhcbiIsCisJICAgICAgIHBjaV9pbmRleCwgTUFYQk9BUkRTKTsKKwlnb3RvIGVycjsKKyAgICAgIH0KKworICAgICAgLyogTm93LCBqdXN0IGdvIG91dCBhbmQgbWFrZSBzdXJlIHRoYXQgdGhpcy90aGVzZSBkZXZpY2UocykgaXMvYXJlCisJIGFjdHVhbGx5IG1hcHBlZCBpbnRvIHRoZSBrZXJuZWwgYWRkcmVzcyBzcGFjZSAqLworICAgICAgaWYgKChlcnJvciA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZCggcGNpX2RldiwgUENJX0JBU0VfQUREUkVTU18wLAorCQkJCQkgICh1MzIgKikgJmJhc2UpKSkKKwl7CisJICBwcmludGsoIkRUMzE1NTogV2FzIG5vdCBhYmxlIHRvIGZpbmQgZGV2aWNlIFxuIik7CisJICBnb3RvIGVycjsKKwl9CisKKyAgICAgIERUXzMxNTVfREVCVUdfTVNHKCJEVDMxNTU6IEJhc2UgYWRkcmVzcyAwIGZvciBkZXZpY2UgaXMgJWx4IFxuIiwgYmFzZSk7CisgICAgICBkdDMxNTVfc3RhdHVzW3BjaV9pbmRleC0xXS5yZWdfYWRkciA9IGJhc2U7CisKKyAgICAgIC8qIFJlbWFwIHRoZSBiYXNlIGFkZHJlc3MgdG8gYSBsb2dpY2FsIGFkZHJlc3MgdGhyb3VnaCB3aGljaCB3ZQorICAgICAgICogY2FuIGFjY2VzcyBpdC4gKi8KKyAgICAgIGR0MzE1NV9sYmFzZVsgcGNpX2luZGV4IC0gMSBdID0gaW9yZW1hcChiYXNlLFBDSV9QQUdFX1NJWkUpOworICAgICAgZHQzMTU1X3N0YXR1c1sgcGNpX2luZGV4IC0gMSBdLnJlZ19hZGRyID0gYmFzZTsKKyAgICAgIERUXzMxNTVfREVCVUdfTVNHKCJEVDMxNTU6IE5ldyBsb2dpY2FsIGFkZHJlc3MgaXMgJXAgXG4iLAorCQkJZHQzMTU1X2xiYXNlW3BjaV9pbmRleC0xXSk7CisgICAgICBpZiAoICFkdDMxNTVfbGJhc2VbcGNpX2luZGV4LTFdICkKKwl7CisJICBwcmludGsoIkRUMzE1NTogVW5hYmxlIHRvIHJlbWFwIGNvbnRyb2wgcmVnaXN0ZXJzXG4iKTsKKwkgIGdvdG8gZXJyOworCX0KKworICAgICAgaWYgKCAoZXJyb3IgPSBwY2lfcmVhZF9jb25maWdfYnl0ZSggcGNpX2RldiwgUENJX0lOVEVSUlVQVF9MSU5FLCAmaXJxKSkgKQorCXsKKwkgIHByaW50aygiRFQzMTU1OiBXYXMgbm90IGFibGUgdG8gZmluZCBkZXZpY2UgXG4iKTsKKwkgIGdvdG8gZXJyOworCX0KKworICAgICAgRFRfMzE1NV9ERUJVR19NU0coIkRUMzE1NTogSVJRIGlzICVkIFxuIixpcnEpOworICAgICAgZHQzMTU1X3N0YXR1c1sgcGNpX2luZGV4LTEgXS5pcnEgPSBpcnE7CisgICAgICAvKiBTZXQgZmxhZzoga3RoIGRldmljZSBmb3VuZCEgKi8KKyAgICAgIGR0MzE1NV9zdGF0dXNbIHBjaV9pbmRleC0xIF0uZGV2aWNlX2luc3RhbGxlZCA9IDE7CisgICAgICBwcmludGsoIkRUMzE1NTogSW5zdGFsbGluZyBkZXZpY2UgJWQgdy9pcnEgJWQgYW5kIGFkZHJlc3MgJXBcbiIsCisJICAgICBwY2lfaW5kZXgsCisJICAgICBkdDMxNTVfc3RhdHVzW3BjaV9pbmRleC0xXS5pcnEsCisJICAgICBkdDMxNTVfbGJhc2VbcGNpX2luZGV4LTFdKTsKKworICAgIH0KKyAgbmRldmljZXMgPSBwY2lfaW5kZXg7CisKKyAgcmV0dXJuIERUXzMxNTVfU1VDQ0VTUzsKKworZXJyOgorICBwY2lfZGV2X3B1dChwY2lfZGV2KTsKKyAgcmV0dXJuIERUXzMxNTVfRkFJTFVSRTsKK30KKwordTMyIGFsbG9jYXRvckFkZHIgPSAwOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGluaXRfbW9kdWxlKCkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBpbml0X21vZHVsZSh2b2lkKQoreworICBpbnQgaW5kZXg7CisgIGludCByY29kZSA9IDA7CisgIGNoYXIgKmRldm5hbWVbIE1BWEJPQVJEUyBdOworCisgIGRldm5hbWVbIDAgXSA9ICJkdDMxNTVhIjsKKyNpZiBNQVhCT0FSRFMgPT0gMgorICBkZXZuYW1lWyAxIF0gPSAiZHQzMTU1YiI7CisjZW5kaWYKKworICBwcmludGsoIkRUMzE1NTogTG9hZGluZyBtb2R1bGUuLi5cbiIpOworCisgIC8qIFJlZ2lzdGVyIHRoZSBkZXZpY2UgZHJpdmVyICovCisgIHJjb2RlID0gcmVnaXN0ZXJfY2hyZGV2KCBkdDMxNTVfbWFqb3IsICJkdDMxNTUiLCAmZHQzMTU1X2ZvcHMgKTsKKyAgaWYoIHJjb2RlIDwgMCApCisgICAgeworICAgICAgcHJpbnRrKCBLRVJOX0lORk8gIkRUMzE1NTogcmVnaXN0ZXJfY2hyZGV2IGZhaWxlZCBcbiIpOworICAgICAgcmV0dXJuIHJjb2RlOworICAgIH0KKworICBpZiggZHQzMTU1X21ham9yID09IDAgKQorICAgIGR0MzE1NV9tYWpvciA9IHJjb2RlOyAvKiBkeW5hbWljICovCisKKworICAvKiBpbml0IHRoZSBzdGF0dXMgdmFyaWFibGVzLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIERNQSBtZW1vcnkgaXMgdGFrZW4gY2FyZSBvZiBpbiBzZXR1cF9idWZmZXJzKCkgKi8KKyAgZm9yICggaW5kZXggPSAwOyBpbmRleCA8IE1BWEJPQVJEUzsgaW5kZXgrKyApCisgICAgeworICAgICAgZHQzMTU1X3N0YXR1c1sgaW5kZXggXS5jb25maWcuYWNxX21vZGUgICA9IERUMzE1NV9NT0RFX0ZSQU1FOworICAgICAgZHQzMTU1X3N0YXR1c1sgaW5kZXggXS5jb25maWcuY29udGludW91cyA9IERUMzE1NV9BQ1E7CisgICAgICBkdDMxNTVfc3RhdHVzWyBpbmRleCBdLmNvbmZpZy5jb2xzICAgICAgID0gRFQzMTU1X01BWF9DT0xTOworICAgICAgZHQzMTU1X3N0YXR1c1sgaW5kZXggXS5jb25maWcucm93cyAgICAgICA9IERUMzE1NV9NQVhfUk9XUzsKKyAgICAgIGR0MzE1NV9zdGF0dXNbIGluZGV4IF0uc3RhdGUgPSBEVDMxNTVfU1RBVEVfSURMRTsKKworICAgICAgLyogZmluZF9QQ0koKSB3aWxsIGNoZWNrIGlmIGRldmljZXMgYXJlIGluc3RhbGxlZDsgKi8KKyAgICAgIC8qIGZpcnN0IGFzc3VtZSB0aGV5J3JlIG5vdDogICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICBkdDMxNTVfc3RhdHVzWyBpbmRleCBdLm1lbV9hZGRyICAgICAgICAgID0gMDsKKyAgICAgIGR0MzE1NV9zdGF0dXNbIGluZGV4IF0ubWVtX3NpemUgICAgICAgICAgPSAwOworICAgICAgZHQzMTU1X3N0YXR1c1sgaW5kZXggXS5zdGF0ZSAgICAgICAgICAgICA9IERUMzE1NV9TVEFURV9JRExFOworICAgICAgZHQzMTU1X3N0YXR1c1sgaW5kZXggXS5kZXZpY2VfaW5zdGFsbGVkICA9IDA7CisgICAgfQorCisgIC8qIE5vdyBsZXQncyBmaW5kIHRoZSBoYXJkd2FyZS4gIGZpbmRfUENJKCkgd2lsbCBzZXQgbmRldmljZXMgdG8gdGhlCisgICAqIG51bWJlciBvZiBjYXJkcyBmb3VuZCBpbiB0aGlzIG1hY2hpbmUuICovCisgICAgeworICAgICAgaWYgKCAocmNvZGUgPSBmaW5kX1BDSSgpKSAhPSAgRFRfMzE1NV9TVUNDRVNTICkKKwl7CisJICBwcmludGsoIkRUMzE1NSBlcnJvcjogZmluZF9QQ0koKSBmYWlsZWQgdG8gZmluZCBkdDMxNTUgYm9hcmQocylcbiIpOworCSAgdW5yZWdpc3Rlcl9jaHJkZXYoIGR0MzE1NV9tYWpvciwgImR0MzE1NSIgKTsKKwkgIHJldHVybiByY29kZTsKKwl9CisgICAgfQorCisgIC8qIE9rLCB0aW1lIHRvIHNldHVwIHRoZSBmcmFtZSBidWZmZXJzICovCisgIGlmKCAocmNvZGUgPSBkdDMxNTVfc2V0dXBfYnVmZmVycygmYWxsb2NhdG9yQWRkcikpIDwgMCApCisgICAgeworICAgICAgcHJpbnRrKCJEVDMxNTU6IEVycm9yOiBzZXR0aW5nIHVwIGJ1ZmZlciBub3QgbGFyZ2UgZW5vdWdoLiIpOworICAgICAgdW5yZWdpc3Rlcl9jaHJkZXYoIGR0MzE1NV9tYWpvciwgImR0MzE1NSIgKTsKKyAgICAgIHJldHVybiByY29kZTsKKyAgICB9CisKKyAgLyogSWYgd2UgYXJlIHRoaXMgZmFyLCB0aGVuIHRoZXJlIGlzIGVub3VnaCBSQU0gKi8KKyAgLyogZm9yIHRoZSBidWZmZXJzOiBQcmludCB0aGUgY29uZmlndXJhdGlvbi4gICAgKi8KKyAgZm9yKCAgaW5kZXggPSAwOyAgaW5kZXggPCBuZGV2aWNlczsgIGluZGV4KysgKQorICAgIHsKKyAgICAgIHByaW50aygiRFQzMTU1OiBEZXZpY2UgPSAlZDsgYWNxX21vZGUgPSAlZDsgIgorCSAgICAgImNvbnRpbnVvdXMgPSAlZDsgY29scyA9ICVkOyByb3dzID0gJWQ7XG4iLAorCSAgICAgaW5kZXggLAorCSAgICAgZHQzMTU1X3N0YXR1c1sgaW5kZXggXS5jb25maWcuYWNxX21vZGUsCisJICAgICBkdDMxNTVfc3RhdHVzWyBpbmRleCBdLmNvbmZpZy5jb250aW51b3VzLAorCSAgICAgZHQzMTU1X3N0YXR1c1sgaW5kZXggXS5jb25maWcuY29scywKKwkgICAgIGR0MzE1NV9zdGF0dXNbIGluZGV4IF0uY29uZmlnLnJvd3MpOworICAgICAgcHJpbnRrKCJEVDMxNTU6IG1fYWRkciA9IDB4JXg7IG1fc2l6ZSA9ICVsZDsgIgorCSAgICAgInN0YXRlID0gJWQ7IGRldmljZV9pbnN0YWxsZWQgPSAlZFxuIiwKKwkgICAgIGR0MzE1NV9zdGF0dXNbIGluZGV4IF0ubWVtX2FkZHIsCisJICAgICAobG9uZyBpbnQpZHQzMTU1X3N0YXR1c1sgaW5kZXggXS5tZW1fc2l6ZSwKKwkgICAgIGR0MzE1NV9zdGF0dXNbIGluZGV4IF0uc3RhdGUsCisJICAgICBkdDMxNTVfc3RhdHVzWyBpbmRleCBdLmRldmljZV9pbnN0YWxsZWQpOworICAgIH0KKworICAvKiBEaXNhYmxlIEFMTCBpbnRlcnJ1cHRzICovCisgIGludF9jc3Jfci5yZWcgPSAwOworICBmb3IoICBpbmRleCA9IDA7ICBpbmRleCA8IG5kZXZpY2VzOyAgaW5kZXgrKyApCisgICAgeworICAgICAgV3JpdGVNUmVnKCAoZHQzMTU1X2xiYXNlWyBpbmRleCBdICsgSU5UX0NTUiksIGludF9jc3Jfci5yZWcgKTsKKyAgICAgIGlmKCBkdDMxNTVfc3RhdHVzWyBpbmRleCBdLmRldmljZV9pbnN0YWxsZWQgKQorCXsKKwkgIC8qCisJICAgKiBUaGlzIGRyaXZlciAqbG9va3MqIGxpa2UgaXQgY2FuIGhhbmRsZSBzaGFyaW5nIGludGVycnVwdHMsCisJICAgKiBidXQgSSBjYW4ndCBhY3R1YWxseSB0ZXN0IG15c2VsZi4gSSd2ZSBoYWQgcmVwb3J0cyB0aGF0IGl0CisJICAgKiBET0VTIHdvcmsgc28gSSdsbCBlbmFibGUgaXQgZm9yIG5vdy4gVGhpcyBjb21tZW50IHdpbGwgcmVtYWluCisJICAgKiBhcyBhIHJlbWluZGVyIGluIGNhc2UgYW55IHByb2JsZW1zIGFyaXNlLiAoU1MpCisJICAgKi8KKwkgIC8qIGluIG9sZGVyIGtlcm5lbHMgZmxhZ3MgYXJlOiBTQV9TSElSUSB8IFNBX0lOVEVSUlVQVCAqLworCSAgcmNvZGUgPSByZXF1ZXN0X2lycSggZHQzMTU1X3N0YXR1c1sgaW5kZXggXS5pcnEsICh2b2lkICopZHQzMTU1X2lzciwKKwkJCSAgICAgICBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsIGRldm5hbWVbIGluZGV4IF0sCisJCQkgICAgICAgKHZvaWQqKSAmZHQzMTU1X3N0YXR1c1tpbmRleF0pOworCSAgaWYoIHJjb2RlIDwgMCApCisJICAgIHsKKwkgICAgICBwcmludGsoIkRUMzE1NTogbWlub3IgJWQgcmVxdWVzdF9pcnEgZmFpbGVkIGZvciBJUlEgJWRcbiIsCisJCSAgICAgaW5kZXgsIGR0MzE1NV9zdGF0dXNbaW5kZXhdLmlycSk7CisJICAgICAgdW5yZWdpc3Rlcl9jaHJkZXYoIGR0MzE1NV9tYWpvciwgImR0MzE1NSIgKTsKKwkgICAgICByZXR1cm4gcmNvZGU7CisJICAgIH0KKwl9CisgICAgfQorCisgIHByaW50aygiRFQzMTU1OiBmaW5pc2hlZCBsb2FkaW5nXG4iKTsKKworICByZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBjbGVhbnVwX21vZHVsZSh2b2lkKQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKyAgaW50IGluZGV4OworCisgIHByaW50aygiRFQzMTU1OiAgY2xlYW51cF9tb2R1bGUgY2FsbGVkXG4iKTsKKworICAvKiByZW1vdmVkIERNQSBhbGxvY2F0ZWQgd2l0aCB0aGUgYWxsb2NhdG9yICovCisjaWZkZWYgU1RBTkRBTE9ORV9BTExPQ0FUT1IKKyAgaWYgKGFsbG9jYXRvckFkZHIgIT0gMCkKKyAgICBhbGxvY2F0b3JfZnJlZV9kbWEoYWxsb2NhdG9yQWRkcik7CisjZWxzZQorICBhbGxvY2F0b3JfY2xlYW51cCgpOworI2VuZGlmCisKKyAgdW5yZWdpc3Rlcl9jaHJkZXYoIGR0MzE1NV9tYWpvciwgImR0MzE1NSIgKTsKKworICBmb3IoIGluZGV4ID0gMDsgaW5kZXggPCBuZGV2aWNlczsgaW5kZXgrKyApCisgICAgeworICAgICAgaWYoIGR0MzE1NV9zdGF0dXNbIGluZGV4IF0uZGV2aWNlX2luc3RhbGxlZCA9PSAxICkKKwl7CisJICBwcmludGsoICJEVDMxNTU6IEZyZWVpbmcgaXJxICVkIGZvciBkZXZpY2UgJWRcbiIsCisJCSAgZHQzMTU1X3N0YXR1c1sgaW5kZXggXS5pcnEsIGluZGV4ICk7CisJICBmcmVlX2lycSggZHQzMTU1X3N0YXR1c1sgaW5kZXggXS5pcnEsICh2b2lkKikmZHQzMTU1X3N0YXR1c1tpbmRleF0gKTsKKwl9CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9kcnYuaCBiL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvZHQzMTU1X2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZTY4YzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9kcnYuaApAQCAtMCwwICsxLDQ1IEBACisvKgorCitDb3B5cmlnaHQgMTk5NiwyMDAyIEdyZWdvcnkgRC4gSGFnZXIsIEFsZnJlZCBBLiBSaXp6aSwgTm9haCBKLiBDb3dhbiwKKwkJICAgIFNjb3R0IFNtZWRsZXkKKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyLgorCitUaGUgRFQzMTU1IERldmljZSBEcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQKK2FuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCitMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGUgRFQzMTU1IERldmljZSBEcml2ZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCit1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CitvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgRFQzMTU1IERldmljZSBEcml2ZXI7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCitNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2lmbmRlZiBEVDMxNTVfRFJWX0lOQworI2RlZmluZSBEVDMxNTVfRFJWX0lOQworCisvKiBrZXJuZWwgbG9naWNhbCBhZGRyZXNzIG9mIHRoZSBmcmFtZSBncmFiYmVycyAqLworZXh0ZXJuIHU4ICpkdDMxNTVfbGJhc2VbTUFYQk9BUkRTXTsKKworLyoga2VybmVsIGxvZ2ljYWwgYWRkcmVzcyBvZiByYW0gYnVmZmVyICovCitleHRlcm4gdTggKmR0MzE1NV9iYmFzZTsKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisKKy8qIHdhaXQgcXVldWUgZm9yIHJlYWRzICovCitleHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgZHQzMTU1X3JlYWRfd2FpdF9xdWV1ZVtNQVhCT0FSRFNdOworI2VuZGlmCisKKy8qIG51bWJlciBvZiBkZXZpY2VzICovCitleHRlcm4gdTMyIG5kZXZpY2VzOworCitleHRlcm4gaW50IGR0MzE1NV9lcnJubzsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9pby5jIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTVfaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjljNjg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTVfaW8uYwpAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAxOTk2LDIwMDIsMjAwNSBHcmVnb3J5IEQuIEhhZ2VyLCBBbGZyZWQgQS4gUml6emksIE5vYWggSi4gQ293YW4sCisgKgkJCSAgICBKYXNvbiBMYXBlbnRhLCBTY290dCBTbWVkbGV5CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyLgorICoKKyAqIFRoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKgorICogVGhpcyBmaWxlIHByb3ZpZGVzIHNvbWUgYmFzaWMgcmVnaXN0ZXIgaW8gcm91dGluZXMuICBJdCBpcyBtb2RpZmllZCBmcm9tCisgKiBkZW1vIGNvZGUgcHJvdmlkZWQgYnkgRGF0YSBUcmFuc2xhdGlvbnMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSAiZHQzMTU1LmgiCisjaW5jbHVkZSAiZHQzMTU1X2lvLmgiCisjaW5jbHVkZSAiZHQzMTU1X2Rydi5oIgorCisKKy8qKioqKiogbG9jYWwgY29waWVzIG9mIGJvYXJkJ3MgMzIgYml0IHJlZ2lzdGVycyAqKioqKiovCit1MzIgZXZlbl9kbWFfc3RhcnRfcjsJLyogIGJpdCAwIHNob3VsZCBhbHdheXMgYmUgMCAqLwordTMyIG9kZF9kbWFfc3RhcnRfcjsJLyogICAgICAgICAgICAgICAuLiAqLwordTMyIGV2ZW5fZG1hX3N0cmlkZV9yOwkvKiAgYml0cyAwJjEgc2hvdWxkIGFsd2F5cyBiZSAwICovCit1MzIgb2RkX2RtYV9zdHJpZGVfcjsJLyogICAgICAgICAgICAgICAuLiAqLwordTMyIGV2ZW5fcGl4ZWxfZm10X3I7Cit1MzIgb2RkX3BpeGVsX2ZtdF9yOworCitGSUZPX1RSSUdHRVJfUgkJZmlmb190cmlnZ2VyX3I7CitYRkVSX01PREVfUgkJeGZlcl9tb2RlX3I7CitDU1IxX1IJCQljc3IxX3I7CitSRVRSWV9XQUlUX0NOVF9SCXJldHJ5X3dhaXRfY250X3I7CitJTlRfQ1NSX1IJCWludF9jc3JfcjsKKwordTMyIGV2ZW5fZmxkX21hc2tfcjsKK3UzMiBvZGRfZmxkX21hc2tfcjsKKworTUFTS19MRU5HVEhfUgkJbWFza19sZW5ndGhfcjsKK0ZJRk9fRkxBR19DTlRfUgkJZmlmb19mbGFnX2NudF9yOworSUlDX0NMS19EVVJfUgkJaWljX2Nsa19kdXJfcjsKK0lJQ19DU1IxX1IJCWlpY19jc3IxX3I7CitJSUNfQ1NSMl9SCQlpaWNfY3NyMl9yOworRE1BX1VQUEVSX0xNVF9SCQlldmVuX2RtYV91cHBlcl9sbXRfcjsKK0RNQV9VUFBFUl9MTVRfUgkJb2RkX2RtYV91cHBlcl9sbXRfcjsKKworCisKKy8qKioqKioqKiBsb2NhbCBjb3BpZXMgb2YgYm9hcmQncyA4IGJpdCBJMkMgcmVnaXN0ZXJzICoqKioqKi8KK0kyQ19DU1IyIGkyY19jc3IyOworSTJDX0VWRU5fQ1NSIGkyY19ldmVuX2NzcjsKK0kyQ19PRERfQ1NSIGkyY19vZGRfY3NyOworSTJDX0NPTkZJRyBpMmNfY29uZmlnOwordTggaTJjX2R0X2lkOwordTggaTJjX3hfY2xpcF9zdGFydDsKK3U4IGkyY195X2NsaXBfc3RhcnQ7Cit1OCBpMmNfeF9jbGlwX2VuZDsKK3U4IGkyY195X2NsaXBfZW5kOwordTggaTJjX2FkX2FkZHI7Cit1OCBpMmNfYWRfbHV0OworSTJDX0FEX0NNRCBpMmNfYWRfY21kOwordTggaTJjX2RpZ19vdXQ7Cit1OCBpMmNfcG1fbHV0X2FkZHI7Cit1OCBpMmNfcG1fbHV0X2RhdGE7CisKKy8qCisgKiB3YWl0X2lic3ljbHIoKQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyByZWFkL3dyaXRlIHRpbWluZyBhbmQgci93IHRpbWVvdXQgZXJyb3IKKyAqCisgKiBSZXR1cm5zIFRSVUUgIGlmIE5FV19DWUNMRSBjbGVhcnMKKyAqIFJldHVybnMgRkFMU0UgaWYgTkVXX0NZQ0xFIGRvZXNuJ3QgY2xlYXIgaW4gcm91Z2hseSAzIG1zZWNzLCBvdGhlcndpc2UKKyAqIHJldHVybnMgMAorICovCitzdGF0aWMgaW50IHdhaXRfaWJzeWNscih1OCAqbHBSZWcpCit7CisJLyogd2FpdCAxMDAgbWljcm9zZWNvbmRzICovCisJdWRlbGF5KDEwMEwpOworCS8qIF9fZGVsYXkobG9vcHNfcGVyX3NlYy8xMDAwMCk7ICovCisJaWYgKGlpY19jc3IyX3IuZmxkLk5FV19DWUNMRSkgeworCQkvKiBpZiBORVdfQ1lDTEUgZGlkbid0IGNsZWFyICovCisJCS8qIFRJTUVPVVQgRVJST1IgKi8KKwkJZHQzMTU1X2Vycm5vID0gRFRfRVJSX0kyQ19USU1FT1VUOworCQlyZXR1cm4gRkFMU0U7CisJfSBlbHNlCisJCXJldHVybiBUUlVFOwkvKiBubyBlcnJvciAqLworfQorCisvKgorICogV3JpdGVJMkMoKQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB3cml0aW5nIHRvIDgtYml0IERUMzE1NSByZWdpc3RlcnMKKyAqCisgKiAxc3QgcGFyYW1ldGVyIGlzIHBvaW50ZXIgdG8gMzItYml0IHJlZ2lzdGVyIGJhc2UgYWRkcmVzcworICogMm5kIHBhcmFtZXRlciBpcyByZWcuIGluZGV4OworICogM3JkIGlzIHZhbHVlIHRvIGJlIHdyaXR0ZW4KKyAqCisgKiBSZXR1cm5zIFRSVUUgICAtICBTdWNjZXNzZnVsIGNvbXBsZXRpb24KKyAqICAgICAgICAgRkFMU0UgIC0gIFRpbWVvdXQgZXJyb3IgLSBjeWNsZSBkaWQgbm90IGNvbXBsZXRlIQorICovCitpbnQgV3JpdGVJMkModTggKmxwUmVnLCB1X3Nob3J0IHdJcmVnSW5kZXgsIHU4IGJ5VmFsKQoreworCWludCB3cml0ZXN0YXQ7CS8qIHN0YXR1cyBmb3IgcmV0dXJuICovCisKKwkvKiByZWFkIDMyIGJpdCBJSUNfQ1NSMiByZWdpc3RlciBkYXRhIGludG8gdW5pb24gKi8KKworCVJlYWRNUmVnKChscFJlZyArIElJQ19DU1IyKSwgaWljX2NzcjJfci5yZWcpOworCisJLyogZm9yIHdyaXRlIG9wZXJhdGlvbiAqLworCWlpY19jc3IyX3IuZmxkLkRJUl9SRCAgICAgID0gMDsKKwkvKiBJMkMgYWRkcmVzcyBvZiBJMkMgcmVnaXN0ZXI6ICovCisJaWljX2NzcjJfci5mbGQuRElSX0FERFIgICAgPSB3SXJlZ0luZGV4OworCS8qIDggYml0IGRhdGEgdG8gYmUgd3JpdHRlbiB0byBJMkMgcmVnICovCisJaWljX2NzcjJfci5mbGQuRElSX1dSX0RBVEEgPSBieVZhbDsKKwkvKiB3aWxsIHN0YXJ0IGEgZGlyZWN0IEkyQyBjeWNsZTogKi8KKwlpaWNfY3NyMl9yLmZsZC5ORVdfQ1lDTEUgICA9IDE7CisKKwkvKiB4ZmVyIHVuaW9uIGRhdGEgaW50byAzMiBiaXQgSUlDX0NTUjIgcmVnaXN0ZXIgKi8KKwlXcml0ZU1SZWcoKGxwUmVnICsgSUlDX0NTUjIpLCBpaWNfY3NyMl9yLnJlZyk7CisKKwkvKiB3YWl0IGZvciBJSUMgY3ljbGUgdG8gZmluaXNoICovCisJd3JpdGVzdGF0ID0gd2FpdF9pYnN5Y2xyKGxwUmVnKTsKKwlyZXR1cm4gd3JpdGVzdGF0OworfQorCisvKgorICogUmVhZEkyQygpCisgKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHJlYWRpbmcgZnJvbSA4LWJpdCBEVDMxNTUgcmVnaXN0ZXJzCisgKgorICogMXN0IHBhcmFtZXRlciBpcyBwb2ludGVyIHRvIDMyLWJpdCByZWdpc3RlciBiYXNlIGFkZHJlc3MKKyAqIDJuZCBwYXJhbWV0ZXIgaXMgcmVnLiBpbmRleDsKKyAqIDNyZCBpcyBhZHJzIG9mIHZhbHVlIHRvIGJlIHJlYWQKKyAqCisgKiBSZXR1cm5zIFRSVUUgICAtICBTdWNjZXNzZnVsIGNvbXBsZXRpb24KKyAqICAgICAgICAgRkFMU0UgIC0gIFRpbWVvdXQgZXJyb3IgLSBjeWNsZSBkaWQgbm90IGNvbXBsZXRlIQorICovCitpbnQgUmVhZEkyQyh1OCAqbHBSZWcsIHVfc2hvcnQgd0lyZWdJbmRleCwgdTggKmJ5VmFsKQoreworCWludCB3cml0ZXN0YXQ7CS8qIHN0YXR1cyBmb3IgcmV0dXJuICovCisKKwkvKiAgcmVhZCAzMiBiaXQgSUlDX0NTUjIgcmVnaXN0ZXIgZGF0YSBpbnRvIHVuaW9uICovCisJUmVhZE1SZWcoKGxwUmVnICsgSUlDX0NTUjIpLCBpaWNfY3NyMl9yLnJlZyk7CisKKwkvKiAgZm9yIHJlYWQgb3BlcmF0aW9uICovCisJaWljX2NzcjJfci5mbGQuRElSX1JEICAgICA9IDE7CisKKwkvKiAgSTJDIGFkZHJlc3Mgb2YgSTJDIHJlZ2lzdGVyOiAqLworCWlpY19jc3IyX3IuZmxkLkRJUl9BRERSICAgPSB3SXJlZ0luZGV4OworCisJLyogIHdpbGwgc3RhcnQgYSBkaXJlY3QgSTJDIGN5Y2xlOiAqLworCWlpY19jc3IyX3IuZmxkLk5FV19DWUNMRSAgPSAxOworCisJLyogIHhmZXIgdW5pb24ncyBkYXRhIGludG8gMzIgYml0IElJQ19DU1IyIHJlZ2lzdGVyICovCisJV3JpdGVNUmVnKChscFJlZyArIElJQ19DU1IyKSwgaWljX2NzcjJfci5yZWcpOworCisJLyogd2FpdCBmb3IgSUlDIGN5Y2xlIHRvIGZpbmlzaCAqLworCXdyaXRlc3RhdCA9IHdhaXRfaWJzeWNscihscFJlZyk7CisKKwkvKiBOZXh0IDIgY29tbWFuZHMgcmVhZCAzMiBiaXQgSUlDX0NTUjEgcmVnaXN0ZXIncyBkYXRhIGludG8gdW5pb24gKi8KKwkvKiBmaXJzdCByZWFkIGRhdGEgaXMgaW4gSUlDX0NTUjEgKi8KKwlSZWFkTVJlZygobHBSZWcgKyBJSUNfQ1NSMSksIGlpY19jc3IxX3IucmVnKTsKKworCS8qIG5vdyBnZXQgZGF0YSB1OCBvdXQgb2YgcmVnaXN0ZXIgKi8KKwkqYnlWYWwgPSAodTgpIGlpY19jc3IxX3IuZmxkLlJEX0RBVEE7CisKKwlyZXR1cm4gd3JpdGVzdGF0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTVfaW8uaCBiL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvZHQzMTU1X2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFhMjUxMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvZHQzMTU1X2lvLmgKQEAgLTAsMCArMSwzNTggQEAKKy8qCisKK0NvcHlyaWdodCAxOTk2LDIwMDIgR3JlZ29yeSBELiBIYWdlciwgQWxmcmVkIEEuIFJpenppLCBOb2FoIEouIENvd2FuLAorCQkgICAgSmFzb24gTGFwZW50YSwgU2NvdHQgU21lZGxleQorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRFQzMTU1IERldmljZSBEcml2ZXIuCisKK1RoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdAorYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCitwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKK0xpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKK3VzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKK29mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBEVDMxNTUgRGV2aWNlIERyaXZlcjsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKK01BIDAyMTExLTEzMDcgVVNBCisKKworLS0gQ2hhbmdlcyAtLQorCisgIERhdGUgICAgIFByb2dyYW1tZXIgIERlc2NyaXB0aW9uIG9mIGNoYW5nZXMgbWFkZQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDI0LUp1bC0yMDAyIFNTICAgICAgIEdQTCBsaWNlbmNlLgorCisqLworCisvKiBUaGlzIGNvZGUgaXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIGV4YW1wbGVzIHByb3ZpZGVkIGJ5IERhdGEgVHJhbnNsYXRpb25zLiovCisKKyNpZm5kZWYgRFQzMTU1X0lPX0lOQworI2RlZmluZSBEVDMxNTVfSU9fSU5DCisKKy8qIG1hY3JvcyB0byBhY2Nlc3MgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgV3JpdGVNUmVnKEFkZHJlc3MsIERhdGEpCSgqKCh1MzIgKikoQWRkcmVzcykpID0gRGF0YSkKKyNkZWZpbmUgUmVhZE1SZWcoQWRkcmVzcywgRGF0YSkJCShEYXRhID0gKigodTMyICopKEFkZHJlc3MpKSkKKworLyoqKioqKioqKioqKioqKioqIDMyIGJpdCByZWdpc3RlciBnbG9iYWxzICAqKioqKioqKioqKioqKi8KKworLyogIG9mZnNldHMgZm9yIDMyLWJpdCBtZW1vcnkgbWFwcGVkIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIEVWRU5fRE1BX1NUQVJUCQkweDAwMAorI2RlZmluZSBPRERfRE1BX1NUQVJUCQkweDAwQworI2RlZmluZSBFVkVOX0RNQV9TVFJJREUJCTB4MDE4CisjZGVmaW5lIE9ERF9ETUFfU1RSSURFCQkweDAyNAorI2RlZmluZSBFVkVOX1BJWEVMX0ZNVAkJMHgwMzAKKyNkZWZpbmUgT0REX1BJWEVMX0ZNVAkJMHgwMzQKKyNkZWZpbmUgRklGT19UUklHR0VSCQkweDAzOAorI2RlZmluZSBYRkVSX01PREUJCTB4MDNDCisjZGVmaW5lIENTUjEJCQkweDA0MAorI2RlZmluZSBSRVRSWV9XQUlUX0NOVAkJMHgwNDQKKyNkZWZpbmUgSU5UX0NTUgkJCTB4MDQ4CisjZGVmaW5lIEVWRU5fRkxEX01BU0sJCTB4MDRDCisjZGVmaW5lIE9ERF9GTERfTUFTSwkJMHgwNTAKKyNkZWZpbmUgTUFTS19MRU5HVEgJCTB4MDU0CisjZGVmaW5lIEZJRk9fRkxBR19DTlQJCTB4MDU4CisjZGVmaW5lIElJQ19DTEtfRFVSCQkweDA1QworI2RlZmluZSBJSUNfQ1NSMQkJMHgwNjAKKyNkZWZpbmUgSUlDX0NTUjIJCTB4MDY0CisjZGVmaW5lIEVWRU5fRE1BX1VQUFJfTE1UCTB4MDhDCisjZGVmaW5lIE9ERF9ETUFfVVBQUl9MTVQJMHgwOTAKKworI2RlZmluZSBDTEtfRFVSX1ZBTAkJMHgwMTAxMDEwMQorCisKKworLyoqKioqKioqIEFzc2lnbm1lbnRzIGFuZCBUeXBlZGVmcyBmb3IgMzIgYml0IE1lbW9yeSBNYXBwZWQgUmVnaXN0ZXJzICoqKioqKioqLworCit0eXBlZGVmIHVuaW9uIGZpZm9fdHJpZ2dlcl90YWcgeworCXUzMiAgIHJlZzsKKwlzdHJ1Y3QgeworCQl1MzIgUEFDS0VEOjY7CisJCXUzMiAgICAgICA6OTsKKwkJdTMyIFBMQU5FUjo3OworCQl1MzIgICAgICAgOjk7CisJfSBmbGQ7Cit9IEZJRk9fVFJJR0dFUl9SOworCit0eXBlZGVmIHVuaW9uIHhmZXJfbW9kZV90YWcgeworCXUzMiAgIHJlZzsKKwlzdHJ1Y3QgeworCQl1MzIgICAgICAgICAgICAgOjI7CisJCXUzMiBGSUVMRF9UT0dHTEU6MTsKKwkJdTMyICAgICAgICAgICAgIDo1OworCQl1MzIgICAgICAgICAgICAgOjI7CisJCXUzMiAgICAgICAgICAgICA6MjI7CisJfSBmbGQ7Cit9IFhGRVJfTU9ERV9SOworCit0eXBlZGVmIHVuaW9uIGNzcjFfdGFnIHsKKwl1MzIgICByZWc7CisJc3RydWN0IHsKKwkJdTMyIENBUF9DT05UX0VWRToxOworCQl1MzIgQ0FQX0NPTlRfT0REOjE7CisJCXUzMiBDQVBfU05HTF9FVkU6MTsKKwkJdTMyIENBUF9TTkdMX09ERDoxOworCQl1MzIgRkxEX0ROX0VWRSAgOjE7CisJCXUzMiBGTERfRE5fT0REICA6MTsKKwkJdTMyIFNSU1QgICAgICAgIDoxOworCQl1MzIgRklGT19FTiAgICAgOjE7CisJCXUzMiBGTERfQ1JQVF9FVkU6MTsKKwkJdTMyIEZMRF9DUlBUX09ERDoxOworCQl1MzIgQUREUl9FUlJfRVZFOjE7CisJCXUzMiBBRERSX0VSUl9PREQ6MTsKKwkJdTMyIENSUFRfRElTICAgIDoxOworCQl1MzIgUkFOR0VfRU4gICAgOjE7CisJCXUzMiAgICAgICAgICAgICA6MTY7CisJfSBmbGQ7Cit9IENTUjFfUjsKKwordHlwZWRlZiB1bmlvbiByZXRyeV93YWl0X2NudF90YWcgeworCXUzMiAgIHJlZzsKKwlzdHJ1Y3QgeworCQl1MzIgUlRSWV9XQUlUX0NOVDo4OworCQl1MzIgICAgICAgICAgICAgIDoyNDsKKwl9IGZsZDsKK30gUkVUUllfV0FJVF9DTlRfUjsKKwordHlwZWRlZiB1bmlvbiBpbnRfY3NyX3RhZyB7CisJdTMyICAgcmVnOworCXN0cnVjdCB7CisJCXUzMiBGTERfRU5EX0VWRSAgIDoxOworCQl1MzIgRkxEX0VORF9PREQgICA6MTsKKwkJdTMyIEZMRF9TVEFSVCAgICAgOjE7CisJCXUzMiAgICAgICAgICAgICAgIDo1OworCQl1MzIgRkxEX0VORF9FVkVfRU46MTsKKwkJdTMyIEZMRF9FTkRfT0REX0VOOjE7CisJCXUzMiBGTERfU1RBUlRfRU4gIDoxOworCQl1MzIgICAgICAgICAgICAgICA6MjE7CisJfSBmbGQ7Cit9IElOVF9DU1JfUjsKKwordHlwZWRlZiB1bmlvbiBtYXNrX2xlbmd0aF90YWcgeworCXUzMiAgIHJlZzsKKwlzdHJ1Y3QgeworCQl1MzIgTUFTS19MRU5fRVZFOjU7CisJCXUzMiAgICAgICAgICAgICA6MTE7CisJCXUzMiBNQVNLX0xFTl9PREQ6NTsKKwkJdTMyICAgICAgICAgICAgIDoxMTsKKwl9IGZsZDsKK30gTUFTS19MRU5HVEhfUjsKKwordHlwZWRlZiB1bmlvbiBmaWZvX2ZsYWdfY250X3RhZyB7CisJdTMyICAgcmVnOworCXN0cnVjdCB7CisJCXUzMiBBRl9DT1VOVDo3OworCQl1MzIgICAgICAgICA6OTsKKwkJdTMyIEFFX0NPVU5UOjc7CisJCXUzMiAgICAgICAgIDo5OworCX0gZmxkOworfSBGSUZPX0ZMQUdfQ05UX1I7CisKK3R5cGVkZWYgdW5pb24gaWljX2Nsa19kdXIgeworCXUzMiAgIHJlZzsKKwlzdHJ1Y3QgeworCQl1MzIgUEhBU0VfMTo4OworCQl1MzIgUEhBU0VfMjo4OworCQl1MzIgUEhBU0VfMzo4OworCQl1MzIgUEhBU0VfNDo4OworCX0gZmxkOworfSBJSUNfQ0xLX0RVUl9SOworCit0eXBlZGVmIHVuaW9uIGlpY19jc3IxX3RhZyB7CisJdTMyICAgcmVnOworCXN0cnVjdCB7CisJCXUzMiBBVVRPX0VOICAgICA6MTsKKwkJdTMyIEJZUEFTUyAgICAgIDoxOworCQl1MzIgU0RBX09VVCAgICAgOjE7CisJCXUzMiBTQ0xfT1VUICAgICA6MTsKKwkJdTMyICAgICAgICAgICAgIDo0OworCQl1MzIgQVVUT19BQk9SVCAgOjE7CisJCXUzMiBESVJFQ1RfQUJPUlQ6MTsKKwkJdTMyIFNEQV9JTiAgICAgIDoxOworCQl1MzIgU0NMX0lOICAgICAgOjE7CisJCXUzMiAgICAgICAgICAgICA6NDsKKwkJdTMyIEFVVE9fQUREUiAgIDo4OworCQl1MzIgUkRfREFUQSAgICAgOjg7CisJfSBmbGQ7Cit9IElJQ19DU1IxX1I7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpaWNfY3NyMl90YWcKKyAqLwordHlwZWRlZiB1bmlvbiBpaWNfY3NyMl90YWcgeworCXUzMiAgIHJlZzsKKwlzdHJ1Y3QgeworCQl1MzIgRElSX1dSX0RBVEEgOjg7CisJCXUzMiBESVJfU1VCX0FERFI6ODsKKwkJdTMyIERJUl9SRCAgICAgIDoxOworCQl1MzIgRElSX0FERFIgICAgOjc7CisJCXUzMiBORVdfQ1lDTEUgICA6MTsKKwkJdTMyICAgICAgICAgICAgIDo3OworCX0gZmxkOworfSAgSUlDX0NTUjJfUjsKKworLyogdXNlIGZvciBib3RoIEVWRU4gYW5kIE9ERCBETUEgVVBQRVIgTElNSVRTICovCisKKy8qCisgKiBkbWFfdXBwZXJfbG10X3RhZworICovCit0eXBlZGVmIHVuaW9uIGRtYV91cHBlcl9sbXRfdGFnICAgeworCXUzMiByZWc7CisJc3RydWN0IHsKKwkJdTMyIERNQV9VUFBFUl9MTVRfVkFMOjI0OworCQl1MzIgICAgICAgICAgICAgICAgICA6ODsKKwl9IGZsZDsKK30gRE1BX1VQUEVSX0xNVF9SOworCisKKy8qCisgKiBHbG9iYWwgZGVjbGFyYXRpb25zIG9mIGxvY2FsIGNvcGllcyBvZiBib2FyZHMnIDMyIGJpdCByZWdpc3RlcnMKKyAqLworZXh0ZXJuIHUzMiBldmVuX2RtYV9zdGFydF9yOwkJLyogIGJpdCAwIHNob3VsZCBhbHdheXMgYmUgMCAqLworZXh0ZXJuIHUzMiBvZGRfZG1hX3N0YXJ0X3I7CQkvKiAgICAgICAgICAgICAgIC4uICAgICAgICAgICovCitleHRlcm4gdTMyIGV2ZW5fZG1hX3N0cmlkZV9yOwkvKiAgYml0cyAwJjEgc2hvdWxkIGFsd2F5cyBiZSAwICovCitleHRlcm4gdTMyIG9kZF9kbWFfc3RyaWRlX3I7CQkvKiAgICAgICAgICAgICAgIC4uICAgICAgICAgICAgICovCitleHRlcm4gdTMyIGV2ZW5fcGl4ZWxfZm10X3I7CitleHRlcm4gdTMyIG9kZF9waXhlbF9mbXRfcjsKKworZXh0ZXJuIEZJRk9fVFJJR0dFUl9SCQlmaWZvX3RyaWdnZXJfcjsKK2V4dGVybiBYRkVSX01PREVfUgkJeGZlcl9tb2RlX3I7CitleHRlcm4gQ1NSMV9SCQkJY3NyMV9yOworZXh0ZXJuIFJFVFJZX1dBSVRfQ05UX1IJCXJldHJ5X3dhaXRfY250X3I7CitleHRlcm4gSU5UX0NTUl9SCQlpbnRfY3NyX3I7CisKK2V4dGVybiB1MzIgZXZlbl9mbGRfbWFza19yOworZXh0ZXJuIHUzMiBvZGRfZmxkX21hc2tfcjsKKworZXh0ZXJuIE1BU0tfTEVOR1RIX1IJCW1hc2tfbGVuZ3RoX3I7CitleHRlcm4gRklGT19GTEFHX0NOVF9SCQlmaWZvX2ZsYWdfY250X3I7CitleHRlcm4gSUlDX0NMS19EVVJfUgkJaWljX2Nsa19kdXJfcjsKK2V4dGVybiBJSUNfQ1NSMV9SCQlpaWNfY3NyMV9yOworZXh0ZXJuIElJQ19DU1IyX1IJCWlpY19jc3IyX3I7CitleHRlcm4gRE1BX1VQUEVSX0xNVF9SCQlldmVuX2RtYV91cHBlcl9sbXRfcjsKK2V4dGVybiBETUFfVVBQRVJfTE1UX1IJCW9kZF9kbWFfdXBwZXJfbG10X3I7CisKKworCisvKioqKioqKioqKioqKioqKiogOCBiaXQgSTJDIHJlZ2lzdGVyIGdsb2JhbHMgICoqKioqKioqKioqLworI2RlZmluZSBDU1IyCQkweDAxMAkvKiBpbmRpY2VzIG9mIDgtYml0IEkyQyBtYXBwZWQgcmVnJ3MqLworI2RlZmluZSBFVkVOX0NTUgkweDAxMQorI2RlZmluZSBPRERfQ1NSCQkweDAxMgorI2RlZmluZSBDT05GSUcJCTB4MDEzCisjZGVmaW5lIERUX0lECQkweDAxRgorI2RlZmluZSBYX0NMSVBfU1RBUlQJMHgwMjAKKyNkZWZpbmUgWV9DTElQX1NUQVJUCTB4MDIyCisjZGVmaW5lIFhfQ0xJUF9FTkQJMHgwMjQKKyNkZWZpbmUgWV9DTElQX0VORAkweDAyNgorI2RlZmluZSBBRF9BRERSCQkweDAzMAorI2RlZmluZSBBRF9MVVQJCTB4MDMxCisjZGVmaW5lIEFEX0NNRAkJMHgwMzIKKyNkZWZpbmUgRElHX09VVAkJMHgwNDAKKyNkZWZpbmUgUE1fTFVUX0FERFIJMHgwNTAKKyNkZWZpbmUgUE1fTFVUX0RBVEEJMHgwNTEKKworCisvKioqKioqKiogQXNzaWdubWVudHMgYW5kIFR5cGVkZWZzIGZvciA4IGJpdCBJMkMgUmVnaXN0ZXJzKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gaTJjX2NzcjJfdGFnIHsKKwl1OCByZWc7CisJc3RydWN0IHsKKwkJdTggQ0hST01fRklMOjE7CisJCXU4IFNZTkNfU05UTDoxOworCQl1OCBIWjUwOjE7CisJCXU4IFNZTkNfUFJFU0VOVDoxOworCQl1OCBCVVNZX0VWRToxOworCQl1OCBCVVNZX09ERDoxOworCQl1OCBESVNQX1BBU1M6MTsKKwl9IGZsZDsKK30gSTJDX0NTUjI7CisKK3R5cGVkZWYgdW5pb24gaTJjX2V2ZW5fY3NyX3RhZyB7CisJdTggICAgcmVnOworCXN0cnVjdCB7CisJCXU4IERPTkVfRVZFIDoxOworCQl1OCBTTkdMX0VWRSA6MTsKKwkJdTggRVJST1JfRVZFOjE7CisJCXU4ICAgICAgICAgIDo1OworCX0gZmxkOworfSBJMkNfRVZFTl9DU1I7CisKK3R5cGVkZWYgdW5pb24gaTJjX29kZF9jc3JfdGFnIHsKKwl1OCByZWc7CisJc3RydWN0IHsKKwkJdTggRE9ORV9PREQ6MTsKKwkJdTggU05HTF9PREQ6MTsKKwkJdTggRVJST1JfT0REOjE7CisJCXU4IDo1OworCX0gZmxkOworfSBJMkNfT0REX0NTUjsKKwordHlwZWRlZiB1bmlvbiBpMmNfY29uZmlnX3RhZyB7CisJdTggcmVnOworCXN0cnVjdCB7CisJCXU4IEFDUV9NT0RFOjI7CisJCXU4IEVYVF9UUklHX0VOOjE7CisJCXU4IEVYVF9UUklHX1BPTDoxOworCQl1OCBIX1NDQUxFOjE7CisJCXU4IENMSVA6MTsKKwkJdTggUE1fTFVUX1NFTDoxOworCQl1OCBQTV9MVVRfUEdNOjE7CisJfSBmbGQ7Cit9IEkyQ19DT05GSUc7CisKKwordHlwZWRlZiB1bmlvbiBpMmNfYWRfY21kX3RhZyB7CisJLyogYml0cyBjYW4gaGF2ZSAzIGRpZmZlcmVudCBtZWFuaW5ncyBkZXBlbmRpbmcgb24gdmFsdWUgb2YgQURfQUREUiAqLworCXU4IHJlZzsKKwkvKiBCdDI1MiBDb21tYW5kIFJlZ2lzdGVyIGlmIEFEX0FERFIgPSAwMGggKi8KKwlzdHJ1Y3QgeworCQl1OCAgICAgICAgICAgICA6MjsKKwkJdTggU1lOQ19MVkxfU0VMOjI7CisJCXU4IFNZTkNfQ05MX1NFTDoyOworCQl1OCBESUdJVElaRV9DTkxfU0VMMToyOworCQl9IGJ0MjUyX2NvbW1hbmQ7CisKKwkvKiBCdDI1MiBJT1VUMCByZWdpc3RlciBpZiBBRF9BRERSID0gMDFoICovCisJc3RydWN0IHsKKwkJdTggSU9VVF9EQVRBOjg7CisJfSBidDI1Ml9pb3V0MDsKKworCS8qIEJUMjUyIElPVVQxIHJlZ2lzdGVyIGlmIEFEX0FERFIgPSAwMmggKi8KKwlzdHJ1Y3QgeworCQl1OCBJT1VUX0RBVEE6ODsKKwl9IGJ0MjUyX2lvdXQxOworfSBJMkNfQURfQ01EOworCisKKy8qKioqKiBHbG9iYWwgZGVjbGFyYXRpb25zIG9mIGxvY2FsIGNvcGllcyBvZiBib2FyZHMnIDggYml0IEkyQyByZWdpc3RlcnMgKioqLworCitleHRlcm4gSTJDX0NTUjIJCQlpMmNfY3NyMjsKK2V4dGVybiBJMkNfRVZFTl9DU1IJCWkyY19ldmVuX2NzcjsKK2V4dGVybiBJMkNfT0REX0NTUgkJaTJjX29kZF9jc3I7CitleHRlcm4gSTJDX0NPTkZJRwkJaTJjX2NvbmZpZzsKK2V4dGVybiB1OAkJCWkyY19kdF9pZDsKK2V4dGVybiB1OAkJCWkyY194X2NsaXBfc3RhcnQ7CitleHRlcm4gdTgJCQlpMmNfeV9jbGlwX3N0YXJ0OworZXh0ZXJuIHU4CQkJaTJjX3hfY2xpcF9lbmQ7CitleHRlcm4gdTgJCQlpMmNfeV9jbGlwX2VuZDsKK2V4dGVybiB1OAkJCWkyY19hZF9hZGRyOworZXh0ZXJuIHU4CQkJaTJjX2FkX2x1dDsKK2V4dGVybiBJMkNfQURfQ01ECQlpMmNfYWRfY21kOworZXh0ZXJuIHU4CQkJaTJjX2RpZ19vdXQ7CitleHRlcm4gdTgJCQlpMmNfcG1fbHV0X2FkZHI7CitleHRlcm4gdTgJCQlpMmNfcG1fbHV0X2RhdGE7CisKKy8qIEZ1bmN0aW9ucyBmb3IgR2xvYmFsIHVzZSAqLworCisvKiBhY2Nlc3MgOC1iaXQgSUlDIHJlZ2lzdGVycyAqLworCitleHRlcm4gaW50IFJlYWRJMkModTggKmxwUmVnLCB1X3Nob3J0IHdJcmVnSW5kZXgsIHU4ICpieVZhbCk7CitleHRlcm4gaW50IFdyaXRlSTJDKHU4ICpscFJlZywgdV9zaG9ydCB3SXJlZ0luZGV4LCB1OCBieVZhbCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTVfaXNyLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9pc3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDdmOTNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTVfaXNyLmMKQEAgLTAsMCArMSw1MTYgQEAKKy8qCisKK0NvcHlyaWdodCAxOTk2LDIwMDIsMjAwNSBHcmVnb3J5IEQuIEhhZ2VyLCBBbGZyZWQgQS4gUml6emksIE5vYWggSi4gQ293YW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgSmFzb24gTGFwZW50YSwgU2NvdHQgU21lZGxleSwgR3JlZyBTaGFycAorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRFQzMTU1IERldmljZSBEcml2ZXIuCisKK1RoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdAorYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCitwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKK0xpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKK3VzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKK29mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBEVDMxNTUgRGV2aWNlIERyaXZlcjsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKK01BIDAyMTExLTEzMDcgVVNBCisKKyAgIEZpbGU6IGR0MzE1NV9pc3IuYworUHVycG9zZTogQnVmZmVyIG1hbmFnZW1lbnQgcm91dGluZXMsIGFuZCBvdGhlciByb3V0aW5lcyBmb3IgdGhlIElTUgorICAgICAgICAgKHRoZSBhY3R1YWwgaXNyIGlzIGluIGR0MzE1NV9kcnYuYykKKworLS0gQ2hhbmdlcyAtLQorCisgIERhdGUgICAgICAgUHJvZ3JhbW1lciAgRGVzY3JpcHRpb24gb2YgY2hhbmdlcyBtYWRlCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMDMtSnVsLTIwMDAgSk1MICAgICAgIG4vYQorICAwMi1BcHItMjAwMiBTUyAgICAgICAgTW9kcyB0byBtYWtlIHdvcmsgd2l0aCBzZXBhcmF0ZSBhbGxvY2F0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZTsgTWVyZ2VkIEpvaG4gUm9sbCdzIG1vZHMgdG8gbWFrZSB3b3JrIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlIGJvYXJkcy4KKyAgMTAtSnVsLTIwMDIgR0NTICAgICAgIENvbXBsZXRlIHJld3JpdGUgb2Ygc2V0dXBfYnVmZmVycyB0byBkaXNhbGxvdworICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVycyB3aGljaCBzcGFuIGEgNE1CIGJvdW5kYXJ5LgorICAyNC1KdWwtMjAwMiBTUyAgICAgICAgR1BMIGxpY2VuY2UuCisgIDMwLUp1bC0yMDAyIE5KQyAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBidWZmZXIgbG9vcC4KKyAgMzEtSnVsLTIwMDIgTkpDICAgICAgIENvbXBsZXRlIHJld3JpdGUgb2YgYnVmZmVyIG1hbmFnZW1lbnQKKyAgMDItQXVnLTIwMDIgTkpDICAgICAgIEluY2x1ZGluZyBzbGFiLmggaW5zdGVhZCBvZiBtYWxsb2MuaCAobm8gd2FybmluZykuCisgICAgICAgICAgICAgICAgICAgICAgICBBbHNvLCBhbGxvY2F0b3JfaW5pdCgpIG5vdyByZXR1cm5zIGFsbG9jYXRvcl9tYXgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvIGNsZWFuZWQgdXAgYWxsb2NhdGVfYnVmZmVycygpIGFjY29yZGluZ2x5LgorICAwOC1BdWctMjAwNSBTUyAgICAgICAgcG9ydCB0byAyLjYga2VybmVsLgorCisqLworCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlICJkdDMxNTUuaCIKKyNpbmNsdWRlICJkdDMxNTVfZHJ2LmgiCisjaW5jbHVkZSAiZHQzMTU1X2lvLmgiCisjaW5jbHVkZSAiZHQzMTU1X2lzci5oIgorI2luY2x1ZGUgImFsbG9jYXRvci5oIgorCisjZGVmaW5lIEZPVVJfTUIgICAgICAgICAoMHgwNDAwMDAwKSAgLyogQ2FuJ3QgRE1BIGFjY3Jvc3MgYSA0TUIgYm91bmRhcnkhKi8KKyNkZWZpbmUgVVBQRVJfMTBfQklUUyAgICgweDNGRjw8MjIpICAvKiBDYW4ndCBETUEgYWNjcm9zcyBhIDRNQiBib3VuZGFyeSEqLworCisKKy8qIFBvaW50ZXIgaW50byBnbG9iYWwgc3RydWN0dXJlIGZvciBoYW5kbGluZyBidWZmZXJzICovCitzdHJ1Y3QgZHQzMTU1X2ZidWZmZXJfcyAqZHQzMTU1X2ZidWZmZXJbTUFYQk9BUkRTXSA9IHtOVUxMCisjaWYgTUFYQk9BUkRTID09IDIKKwkJCQkJCSAgICAgICwgTlVMTAorI2VuZGlmCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTaW1wbGUgYXJyYXkgYmFzZWQgcXVlIHN0cnVjdAorICoKKyAqIFNvbWUgaGFuZHkgZnVuY3Rpb25zIHVzaW5nIHRoZSBidWZmZXJpbmcgc3RydWN0dXJlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGFyZV9lbXB0eV9idWZmZXJzCisgKiBtIGlzIG1pbm9yICMgb2YgZGV2aWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW5saW5lIGJvb2wgYXJlX2VtcHR5X2J1ZmZlcnMoIGludCBtICkKK3sKKyAgcmV0dXJuICggZHQzMTU1X2ZidWZmZXJbIG0gXS0+ZW1wdHlfbGVuICk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcHVzaF9lbXB0eQorICogbSBpcyBtaW5vciAjIG9mIGRldmljZQorICoKKyAqIFRoaXMgaXMgc2xpZ2h0bHkgY29uZnVzaW5nLiAgVGhlIG51bWJlciBlbXB0eV9sZW4gaXMgdGhlIGxpdGVyYWwgIworICogb2YgZW1wdHkgYnVmZmVycy4gIEFmdGVyIGNhbGxpbmcsIGVtcHR5X2xlbi0xIGlzIHRoZSBpbmRleCBpbnRvIHRoZQorICogZW1wdHkgYnVmZmVyIHN0YWNrLiAgU28sIGlmIGVtcHR5X2xlbiA9PSAxLCB0aGVyZSBpcyBvbmUgZW1wdHkgYnVmZmVyLAorICogZ2l2ZW4gYnkgZHQzMTU1X2ZidWZmZXJbbV0tPmVtcHR5X2J1ZmZlcnNbMF0uCisgKiBlbXB0eV9idWZmZXJzIHNob3VsZCBuZXZlciBmaWxsIHVwLCB0aG91Z2ggdGhpcyBpcyBub3QgY2hlY2tlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2lubGluZSB2b2lkIHB1c2hfZW1wdHkoIGludCBpbmRleCwgaW50IG0gKQoreworICBkdDMxNTVfZmJ1ZmZlclttXS0+ZW1wdHlfYnVmZmVyc1sgZHQzMTU1X2ZidWZmZXJbbV0tPmVtcHR5X2xlbiBdID0gaW5kZXg7CisgIGR0MzE1NV9mYnVmZmVyW21dLT5lbXB0eV9sZW4rKzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBwb3BfZW1wdHkoIG0gKQorICogbSBpcyBtaW5vciAjIG9mIGRldmljZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqLworaW5saW5lIGludCBwb3BfZW1wdHkoIGludCBtICkKK3sKKyAgZHQzMTU1X2ZidWZmZXJbbV0tPmVtcHR5X2xlbi0tOworICByZXR1cm4gZHQzMTU1X2ZidWZmZXJbbV0tPmVtcHR5X2J1ZmZlcnNbIGR0MzE1NV9mYnVmZmVyW21dLT5lbXB0eV9sZW4gXTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlzX3JlYWR5X2J1Zl9lbXB0eSggbSApCisgKiBtIGlzIG1pbm9yICMgb2YgZGV2aWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2lubGluZSBib29sIGlzX3JlYWR5X2J1Zl9lbXB0eSggaW50IG0gKQoreworICByZXR1cm4gKChkdDMxNTVfZmJ1ZmZlclsgbSBdLT5yZWFkeV9sZW4pID09IDApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaXNfcmVhZHlfYnVmX2Z1bGwoIG0gKQorICogbSBpcyBtaW5vciAjIG9mIGRldmljZQorICogdGhpcyBzaG91bGQgKm5ldmVyKiBiZSB0cnVlIGlmIHRoZXJlIGFyZSBhbnkgYWN0aXZlLCBsb2NrZWQgb3IgZW1wdHkKKyAqIGJ1ZmZlcnMsIHNpbmNlIGl0IGNvcnJlc3BvbmRzIHRvIG5idWZmZXJzIHJlYWR5IGJ1ZmZlcnMhIQorICogNy8zMS8wMjogdG90YWwgcmV3cml0ZS4gLS1OSkMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqLworaW5saW5lIGJvb2wgaXNfcmVhZHlfYnVmX2Z1bGwoIGludCBtICkKK3sKKyAgcmV0dXJuICggZHQzMTU1X2ZidWZmZXJbIG0gXS0+cmVhZHlfbGVuID09IGR0MzE1NV9mYnVmZmVyWyBtIF0tPm5idWZmZXJzICk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcHVzaF9yZWFkeSggbSwgYnVmZmVyICkKKyAqIG0gaXMgbWlub3IgIyBvZiBkZXZpY2UKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbmxpbmUgdm9pZCBwdXNoX3JlYWR5KCBpbnQgbSwgaW50IGluZGV4ICkKK3sKKyAgaW50IGhlYWQgPSBkdDMxNTVfZmJ1ZmZlclttXS0+cmVhZHlfaGVhZDsKKworICBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5yZWFkeV9xdWVbIGhlYWQgXSA9IGluZGV4OworICBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5yZWFkeV9oZWFkID0gKCAoaGVhZCArIDEpICUKKwkJCQkgICAgICAoZHQzMTU1X2ZidWZmZXJbIG0gXS0+bmJ1ZmZlcnMpICk7CisgIGR0MzE1NV9mYnVmZmVyWyBtIF0tPnJlYWR5X2xlbisrOworCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZ2V0X3RhaWwoKQorICogbSBpcyBtaW5vciAjIG9mIGRldmljZQorICoKKyAqIFNpbXBseSBjb21wdHV0ZXMgdGhlIHRhaWwgZ2l2ZW4gdGhlIGhlYWQgYW5kIHRoZSBsZW5ndGguCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIGludCBnZXRfdGFpbCggaW50IG0gKQoreworICByZXR1cm4gKChkdDMxNTVfZmJ1ZmZlclsgbSBdLT5yZWFkeV9oZWFkIC0KKwkgICBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5yZWFkeV9sZW4gKworCSAgIGR0MzE1NV9mYnVmZmVyWyBtIF0tPm5idWZmZXJzKSUKKwkgIChkdDMxNTVfZmJ1ZmZlclsgbSBdLT5uYnVmZmVycykpOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBwb3BfcmVhZHkoKQorICogbSBpcyBtaW5vciAjIG9mIGRldmljZQorICoKKyAqIFRoaXMgYXNzdW1lcyB0aGF0IHRoZXJlIGlzIGEgcmVhZHkgYnVmZmVyIHJlYWR5Li4uIHNob3VsZAorICogYmUgY2hlY2tlZCAoZS5nLiB3aXRoIGlzX3JlYWR5X2J1Zl9lbXB0eSgpICBwcmlvciB0byBjYWxsLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW5saW5lIGludCBwb3BfcmVhZHkoIGludCBtICkKK3sKKyAgaW50IHRhaWw7CisgIHRhaWwgPSBnZXRfdGFpbChtKTsKKyAgZHQzMTU1X2ZidWZmZXJbIG0gXS0+cmVhZHlfbGVuLS07CisgIHJldHVybiBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5yZWFkeV9xdWVbIHRhaWwgXTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHByaW50cXVlcworICogbSBpcyBtaW5vciAjIG9mIGRldmljZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW5saW5lIHZvaWQgcHJpbnRxdWVzKCBpbnQgbSApCit7CisgIGludCBoZWFkID0gZHQzMTU1X2ZidWZmZXJbIG0gXS0+cmVhZHlfaGVhZDsKKyAgaW50IHRhaWw7CisgIGludCBudW0gPSBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5uYnVmZmVyczsKKyAgaW50IGZyYW1lX2luZGV4OworICBpbnQgaW5kZXg7CisKKyAgdGFpbCA9IGdldF90YWlsKG0pOworCisgIHByaW50aygiXG4gUjoiKTsKKyAgZm9yICggaW5kZXggPSB0YWlsOyBpbmRleCAhPSBoZWFkOyBpbmRleCsrLCBpbmRleCA9IGluZGV4ICUgKG51bSkgKQorICAgIHsKKyAgICAgIGZyYW1lX2luZGV4ID0gZHQzMTU1X2ZidWZmZXJbIG0gXS0+cmVhZHlfcXVlWyBpbmRleCBdOworICAgICAgcHJpbnRrKCIgJWQgIiwgZnJhbWVfaW5kZXggKTsKKyAgICB9CisKKyAgcHJpbnRrKCJcbiBFOiIpOworICBmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgZHQzMTU1X2ZidWZmZXJbIG0gXS0+ZW1wdHlfbGVuOyBpbmRleCsrICkKKyAgICB7CisgICAgICBmcmFtZV9pbmRleCA9IGR0MzE1NV9mYnVmZmVyWyBtIF0tPmVtcHR5X2J1ZmZlcnNbIGluZGV4IF07CisgICAgICBwcmludGsoIiAlZCAiLCBmcmFtZV9pbmRleCApOworICAgIH0KKworICBmcmFtZV9pbmRleCA9IGR0MzE1NV9mYnVmZmVyWyBtIF0tPmFjdGl2ZV9idWY7CisgIHByaW50aygiXG4gQTogJWQiLCBmcmFtZV9pbmRleCk7CisKKyAgZnJhbWVfaW5kZXggPSBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5sb2NrZWRfYnVmOworICBwcmludGsoIlxuIEw6ICVkIFxuIiwgZnJhbWVfaW5kZXggKTsKKworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGFkanVzdF80TUIKKyAqCisgKiAgSWYgYSBidWZmZXIgaW50ZXJzZWN0cyB0aGUgNE1CIGJvdW5kYXJ5LCBwdXNoCisgKiAgdGhlIHN0YXJ0IGFkZHJlc3MgdXAgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUKKyAqICBuZXh0IDRNQiBjaHVuayAoYXNzdW1pbmcgYnVmc2l6ZSA8IDRNQikuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MzIgYWRqdXN0XzRNQiAodTMyIGJ1Zl9hZGRyLCB1MzIgYnVmc2l6ZSkgeworICBpZiAoKChidWZfYWRkcitidWZzaXplKSAmIFVQUEVSXzEwX0JJVFMpICE9IChidWZfYWRkciAmIFVQUEVSXzEwX0JJVFMpKQorICAgIHJldHVybiAoYnVmX2FkZHIrYnVmc2l6ZSkgJiBVUFBFUl8xMF9CSVRTOworICBlbHNlCisgICAgcmV0dXJuIGJ1Zl9hZGRyOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogYWxsb2NhdGVfYnVmZmVycworICoKKyAqICBUcnkgdG8gYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgYWxsIHJlcXVlc3RlZAorICogIGJ1ZmZlcnMuICBJZiB0aGVyZSBpcyBub3QgZW5vdWdoIGZyZWUgc3BhY2UKKyAqICB0cnkgZm9yIGxlc3MgbWVtb3J5LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBhbGxvY2F0ZV9idWZmZXJzICh1MzIgKmJ1Zl9hZGRyLCB1MzIqIHRvdGFsX3NpemVfa2JzLAorCQkgICAgICAgdTMyIGJ1ZnNpemUpCit7CisgIC8qIENvbXB1dGUgdGhlIG1pbmltdW0gYW1vdW50IG9mIG1lbW9yeSBndWFyYW50ZWVkIHRvIGhvbGQgYWxsCisgICAgIE1BWEJVRkZFUlMgc3VjaCB0aGF0IG5vIGJ1ZmZlciBjcm9zc2VzIHRoZSA0TUIgYm91bmRhcnkuCisgICAgIFN0b3JlIHRoaXMgdmFsdWUgaW4gdGhlIHZhcmlhYmxlICJmdWxsX3NpemUiICovCisKKyAgdTMyIGFsbG9jYXRvcl9tYXg7CisgIHUzMiBidWZzX3Blcl9jaHVuayA9IChGT1VSX01CIC8gYnVmc2l6ZSk7CisgIHUzMiBmaWxsZWRfY2h1bmtzID0gKE1BWEJVRkZFUlMtMSkgLyBidWZzX3Blcl9jaHVuazsKKyAgdTMyIGxlZnRvdmVyX2J1ZnMgPSBNQVhCVUZGRVJTIC0gZmlsbGVkX2NodW5rcyAqIGJ1ZnNfcGVyX2NodW5rOworCisgIHUzMiBmdWxsX3NpemUgPSBidWZzaXplICAgICAgLyogcG9zc2libHkgdW51c2FibGUgcGFydCBvZiAxc3QgY2h1bmsgKi8KKyAgICArIGZpbGxlZF9jaHVua3MgKiBGT1VSX01CICAgLyogbWF4ICMgb2YgY29tcGxldGVseSBmaWxsZWQgNG1iIGNodW5rcyAqLworICAgICsgbGVmdG92ZXJfYnVmcyAqIGJ1ZnNpemU7ICAvKiB0aGVzZSBidWZmcyB3aWxsIGJlIGluIGEgcGFydGx5IGZpbGxlZAorCQkJCSAgIGNodW5rIGF0IGJlZ2lubmluZyBvciBlbmQgKi8KKworICB1MzIgZnVsbF9zaXplX2ticyA9IDEgKyAoZnVsbF9zaXplLTEpIC8gMTAyNDsKKyAgdTMyIG1pbl9zaXplX2ticyA9IDIqbmRldmljZXMqYnVmc2l6ZSAvIDEwMjQ7CisgIHUzMiBzaXplX2ticzsKKworICAvKiBOb3csIHRyeSB0byBhbGxvY2F0ZSBmdWxsX3NpemUuICBJZiB0aGlzIGZhaWxzLCBrZWVwIHRyeWluZyBmb3IKKyAgICAgbGVzcyAmIGxlc3MgbWVtb3J5IHVudGlsIGl0IHN1Y2NlZWRzLiAqLworI2lmbmRlZiBTVEFOREFMT05FX0FMTE9DQVRPUgorICAvKiBpbml0aWFsaXplIHRoZSBhbGxvY2F0b3IgICAgICAgICAgICAqLworICBhbGxvY2F0b3JfaW5pdCgmYWxsb2NhdG9yX21heCk7CisjZW5kaWYKKyAgc2l6ZV9rYnMgPSBmdWxsX3NpemVfa2JzOworICAqYnVmX2FkZHIgPSAwOworICBwcmludGsoIkRUMzE1NTogV2Ugd291bGQgbGlrZSB0byBnZXQ6ICVkIEtCXG4iLCBmdWxsX3NpemVfa2JzKTsKKyAgcHJpbnRrKCJEVDMxNTU6IC4uLmJ1dCBuZWVkIGF0IGxlYXN0OiAlZCBLQlxuIiwgbWluX3NpemVfa2JzKTsKKyAgcHJpbnRrKCJEVDMxNTU6IC4uLnRoZSBhbGxvY2F0b3IgaGFzOiAlZCBLQlxuIiwgYWxsb2NhdG9yX21heCk7CisgIHNpemVfa2JzID0gKGZ1bGxfc2l6ZV9rYnMgPD0gYWxsb2NhdG9yX21heCA/IGZ1bGxfc2l6ZV9rYnMgOiBhbGxvY2F0b3JfbWF4KTsKKyAgaWYgKHNpemVfa2JzID4gbWluX3NpemVfa2JzKSB7CisgICAgaWYgKCgqYnVmX2FkZHIgPSBhbGxvY2F0b3JfYWxsb2NhdGVfZG1hIChzaXplX2ticywgR0ZQX0tFUk5FTCkpICE9IDApIHsKKyAgICAgIHByaW50aygiRFQzMTU1OiAgTWFuYWdlZCB0byBhbGxvY2F0ZTogJWQgS0JcbiIsIHNpemVfa2JzKTsKKyAgICAgICp0b3RhbF9zaXplX2ticyA9IHNpemVfa2JzOworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorICAvKiBJZiB3ZSBnb3QgaGVyZSwgdGhlIGFsbG9jYXRpb24gZmFpbGVkICovCisgIHByaW50ayAoIkRUMzE1NTogQWxsb2NhdG9yIGZhaWxlZCFcbiIpOworICAqYnVmX2FkZHIgPSAwOworICAqdG90YWxfc2l6ZV9rYnMgPSAwOworICByZXR1cm47CisKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGR0MzE1NV9zZXR1cF9idWZmZXJzCisgKgorICogIHNldHVwX2J1ZmZlcnMganVzdCBwdXRzIHRoZSBidWZmZXJpbmcgc3lzdGVtIGludG8KKyAqICBhIGNvbnNpc3RlbnQgc3RhdGUgYmVmb3JlIHRoZSBzdGFydCBvZiBpbnRlcnJ1cHRzCisgKgorICogSk1MIDogaXQgbG9va3MgbGlrZSBhbGwgdGhlIGJ1ZmZlcnMgbmVlZCB0byBiZQorICogY29udGludW91cy4gU28gSSdtIGdvaW5nIHRvIHRyeSBhbmQgYWxsb2NhdGUgb25lCisgKiBjb250aW51b3VzIGJ1ZmZlci4KKyAqCisgKiBHQ1MgOiBGaXggRE1BIHByb2JsZW1zIHdoZW4gYnVmZmVyIHNwYW5zCisgKiA0TUIgYm91bmRhcnkuICBBbHNvLCBhZGQgZXJyb3IgY2hlY2tpbmcuICBUaGlzCisgKiBmdW5jdGlvbiB3aWxsIHJldHVybiAtRU5PTUVNIHdoZW4gbm90IGVub3VnaCBtZW1vcnkuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MzIgZHQzMTU1X3NldHVwX2J1ZmZlcnModTMyICphbGxvY2F0b3JBZGRyKQorCit7CisgIHUzMiBpbmRleDsKKyAgdTMyIHJhbWJ1ZmZfYWRkcjsgLyogc3RhcnQgb2YgYWxsb2NhdGlvbiAqLworICB1MzIgcmFtYnVmZl9zaXplOyAvKiB0b3RhbCBzaXplIGFsbG9jYXRlZCB0byBkcml2ZXIgKi8KKyAgdTMyIHJhbWJ1ZmZfYWNtOyAgLyogYWNjdW1sYXRvciwga2VlcCB0cmFjayBvZiBob3cgbXVjaAorCQkJICBpcyBsZWZ0IGFmdGVyIGJlaW5nIHNwbGl0IHVwKi8KKyAgdTMyIHJhbWJ1ZmZfZW5kOyAgLyogZW5kIG9mIHJhbWJ1ZmYgKi8KKyAgdTMyIG51bWJ1ZnM7ICAgICAgLyogbnVtYmVyIG9mIHVzZWZ1bCBidWZmZXJzIGFsbG9jYXRlZCAocGVyIGRldmljZSkgKi8KKyAgdTMyIGJ1ZnNpemUgICAgICA9IERUMzE1NV9NQVhfUk9XUyAqIERUMzE1NV9NQVhfQ09MUzsKKyAgaW50IG07ICAgICAgICAgICAgICAgLyogbWlub3IgIyBvZiBkZXZpY2UsIGxvb3BlZCBmb3IgYWxsIGRldnMgKi8KKworICAvKiB6ZXJvIHRoZSBmYnVmZmVyIHN0YXR1cyBhbmQgYWRkcmVzcyBzdHJ1Y3R1cmUgKi8KKyAgZm9yICggbSA9IDA7IG0gPCBuZGV2aWNlczsgbSsrKQorICAgIHsKKyAgICAgIGR0MzE1NV9mYnVmZmVyWyBtIF0gPSAmKGR0MzE1NV9zdGF0dXNbIG0gXS5mYnVmZmVyKTsKKworICAgICAgLyogTWFrZSBzdXJlIHRoZSBidWZmZXJpbmcgdmFyaWFibGVzIGFyZSBjb25zaXN0ZW50ICovCisgICAgICB7CisJdTggKnB0ciA9ICh1OCAqKSBkdDMxNTVfZmJ1ZmZlclsgbSBdOworCWZvciggaW5kZXggPSAwOyBpbmRleCA8IHNpemVvZihzdHJ1Y3QgZHQzMTU1X2ZidWZmZXJfcyk7IGluZGV4KyspCisJICAqKHB0cisrKT0wOworICAgICAgfQorICAgIH0KKworICAvKiBhbGxvY2F0ZSBhIGxhcmdlIGNvbnRpZ3VvdXMgY2h1bmsgb2YgUkFNICovCisgIGFsbG9jYXRlX2J1ZmZlcnMgKCZyYW1idWZmX2FkZHIsICZyYW1idWZmX3NpemUsIGJ1ZnNpemUpOworICBwcmludGsoIkRUMzE1NTogbWVtIGluZm9cbiIpOworICBwcmludGsoIiAgLSByYW1idWZfYWRkciA9IDB4JXggXG4iLCByYW1idWZmX2FkZHIpOworICBwcmludGsoIiAgLSBsZW5ndGggKGtiKSA9ICV1IFxuIiwgcmFtYnVmZl9zaXplKTsKKyAgaWYoIHJhbWJ1ZmZfYWRkciA9PSAwICkKKyAgICB7CisgICAgICBwcmludGsoIEtFUk5fSU5GTworCSAgICAgICJEVDMxNTU6IEVycm9yIHNldHVwX2J1ZmZlcnMoKSBhbGxvY2F0b3IgZG1hIGZhaWxlZCBcbiIgKTsKKyAgICAgIHJldHVybiAtRU5PTUVNOworICAgIH0KKyAgKmFsbG9jYXRvckFkZHIgPSByYW1idWZmX2FkZHI7CisgIHJhbWJ1ZmZfZW5kID0gcmFtYnVmZl9hZGRyICsgMTAyNCAqIHJhbWJ1ZmZfc2l6ZTsKKworICAvKiBhZnRlciBhbGxvY2F0aW9uLCB3ZSBuZWVkIHRvIGNvdW50IGhvdyBtYW55IHVzZWZ1bCBidWZmZXJzIHRoZXJlCisgICAgIGFyZSBzbyB3ZSBjYW4gZ2l2ZSBhbiBlcXVhbCBudW1iZXIgdG8gZWFjaCBkZXZpY2UgKi8KKyAgcmFtYnVmZl9hY20gPSByYW1idWZmX2FkZHI7CisgIGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBNQVhCVUZGRVJTOyBpbmRleCsrKSB7CisgICAgcmFtYnVmZl9hY20gPSBhZGp1c3RfNE1CIChyYW1idWZmX2FjbSwgYnVmc2l6ZSk7Lyphdm9pZCBzcGFubmluZyA0TUIgYmRyeSovCisgICAgaWYgKHJhbWJ1ZmZfYWNtICsgYnVmc2l6ZSA+IHJhbWJ1ZmZfZW5kKQorICAgICAgYnJlYWs7CisgICAgcmFtYnVmZl9hY20gKz0gYnVmc2l6ZTsKKyAgfQorICAvKiBGb2xsb3dpbmcgbGluZSBpcyBPSywgd2lsbCB3YXN0ZSBidWZmZXJzIGlmIGluZGV4CisgICAqIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5IG5kZXZpY2VzIC1OSkMqLworICBudW1idWZzID0gaW5kZXggLyBuZGV2aWNlczsKKyAgcHJpbnRrKCIgIC0gbnVtYnVmcyA9ICV1XG4iLCBudW1idWZzKTsKKyAgaWYgKG51bWJ1ZnMgPCAyKSB7CisgICAgcHJpbnRrKCBLRVJOX0lORk8KKwkgICAgIkRUMzE1NTogRXJyb3Igc2V0dXBfYnVmZmVycygpIGNvdWxkbid0IGFsbG9jYXRlIDIgYnVmcy9ib2FyZFxuIiApOworICAgIHJldHVybiAtRU5PTUVNOworICB9CisKKyAgLyogbm93IHRoYXQgd2UgaGF2ZSBib2FyZCBtZW1vcnkgd2Ugc3BpdCBpdCB1cCAqLworICAvKiBiZXR3ZWVuIHRoZSBib2FyZHMgYW5kIHRoZSBidWZmZXJzICAgICAgICAgICovCisgIHJhbWJ1ZmZfYWNtID0gcmFtYnVmZl9hZGRyOworICBmb3IgKCBtID0gMDsgbSA8IG5kZXZpY2VzOyBtICsrKQorICAgIHsKKyAgICAgIHJhbWJ1ZmZfYWNtID0gYWRqdXN0XzRNQiAocmFtYnVmZl9hY20sIGJ1ZnNpemUpOworCisgICAgICAvKiBTYXZlIHRoZSBzdGFydCBvZiB0aGlzIGJvYXJkcyBidWZmZXIgc3BhY2UgKGZvciBtbWFwKS4gICovCisgICAgICBkdDMxNTVfc3RhdHVzWyBtIF0ubWVtX2FkZHIgPSByYW1idWZmX2FjbTsKKworICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbnVtYnVmczsgaW5kZXgrKykKKwl7CisJICByYW1idWZmX2FjbSA9IGFkanVzdF80TUIgKHJhbWJ1ZmZfYWNtLCBidWZzaXplKTsKKwkgIGlmIChyYW1idWZmX2FjbSArIGJ1ZnNpemUgPiByYW1idWZmX2VuZCkgeworCSAgICAvKiBTaG91bGQgbmV2ZXIgaGFwcGVuICovCisJICAgIHByaW50ayAoIkRUMzE1NSBQUk9HUkFNIEVSUk9SIChHQ1MpXG4iCisJCSAgICAiRXJyb3IgZGlzdHJpYnV0aW5nIGFsbG9jYXRlZCBidWZmZXJzXG4iKTsKKwkgICAgcmV0dXJuIC1FTk9NRU07CisJICB9CisKKwkgIGR0MzE1NV9mYnVmZmVyWyBtIF0tPmZyYW1lX2luZm9bIGluZGV4IF0uYWRkciA9IHJhbWJ1ZmZfYWNtOworCSAgcHVzaF9lbXB0eSggaW5kZXgsIG0gKTsKKwkgIC8qIHByaW50aygiICAtIEJ1ZmZlciA6ICVseFxuIiwKKwkgICAqIGR0MzE1NV9mYnVmZmVyWyBtIF0tPmZyYW1lX2luZm9bIGluZGV4IF0uYWRkciApOworCSAgICovCisJICBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5uYnVmZmVycyArPSAxOworCSAgcmFtYnVmZl9hY20gKz0gYnVmc2l6ZTsKKwl9CisKKyAgICAgIC8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBhbiBhY3RpdmUgYnVmZmVyIHRoZXJlLiAqLworICAgICAgZHQzMTU1X2ZidWZmZXJbIG0gXS0+YWN0aXZlX2J1ZiAgICA9IHBvcF9lbXB0eSggbSApOworICAgICAgZHQzMTU1X2ZidWZmZXJbIG0gXS0+ZXZlbl9oYXBwZW5lZCA9IDA7CisgICAgICBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5ldmVuX3N0b3BwZWQgID0gMDsKKworICAgICAgLyogbWFrZSBzdXJlIHRoZXJlIGlzIG5vIGxvY2tlZF9idWYgSk1MIDIvMjgvMDAgKi8KKyAgICAgIGR0MzE1NV9mYnVmZmVyWyBtIF0tPmxvY2tlZF9idWYgPSAtMTsKKworICAgICAgZHQzMTU1X3N0YXR1c1sgbSBdLm1lbV9zaXplID0KKwlyYW1idWZmX2FjbSAtIGR0MzE1NV9zdGF0dXNbIG0gXS5tZW1fYWRkcjsKKworICAgICAgLyogc2V0dXAgdGhlIHJlYWR5IHF1ZXVlICovCisgICAgICBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5yZWFkeV9oZWFkID0gMDsKKyAgICAgIGR0MzE1NV9mYnVmZmVyWyBtIF0tPnJlYWR5X2xlbiA9IDA7CisgICAgICBwcmludGsoIkF2YWlsYWJsZSBidWZmZXJzIGZvciBkZXZpY2UgJWQ6ICVkXG4iLAorCSAgICAgbSwgZHQzMTU1X2ZidWZmZXJbIG0gXS0+bmJ1ZmZlcnMpOworICAgIH0KKworICByZXR1cm4gMTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpbnRlcm5hbF9yZWxlYXNlX2xvY2tlZF9idWZmZXIKKyAqCisgKiBUaGUgaW50ZXJuYWwgZnVuY3Rpb24gZm9yIHJlbGVhc2luZyBhIGxvY2tlZCBidWZmZXIuCisgKiBJdCBhc3N1bWVzIGludGVycnVwdHMgYXJlIHR1cm5lZCBvZmYuCisgKgorICogbSBpcyBtaW5vciBudW1iZXIgb2YgZGV2aWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW5saW5lIHZvaWQgaW50ZXJuYWxfcmVsZWFzZV9sb2NrZWRfYnVmZmVyKCBpbnQgbSApCit7CisgIC8qIFBvaW50ZXIgaW50byBnbG9iYWwgc3RydWN0dXJlIGZvciBoYW5kbGluZyBidWZmZXJzICovCisgIGlmICggZHQzMTU1X2ZidWZmZXJbIG0gXS0+bG9ja2VkX2J1ZiA+PSAwICkKKyAgICB7CisgICAgICBwdXNoX2VtcHR5KCBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5sb2NrZWRfYnVmLCBtICk7CisgICAgICBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5sb2NrZWRfYnVmID0gLTE7CisgICAgfQorfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZHQzMTU1X3JlbGVhc2VfbG9ja2VkX2J1ZmZlcigpCisgKiBtIGlzIG1pbm9yICMgb2YgZGV2aWNlCisgKgorICogVGhlIHVzZXIgZnVuY3Rpb24gb2YgdGhlIGFib3ZlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2lubGluZSB2b2lkIGR0MzE1NV9yZWxlYXNlX2xvY2tlZF9idWZmZXIoIGludCBtICkKK3sKKwl1bnNpZ25lZCBsb25nIGludCBmbGFnczsKKwlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWludGVybmFsX3JlbGVhc2VfbG9ja2VkX2J1ZmZlcihtKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBkdDMxNTVfZmx1c2goKQorICogbSBpcyBtaW5vciAjIG9mIGRldmljZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2lubGluZSBpbnQgZHQzMTU1X2ZsdXNoKCBpbnQgbSApCit7CisgIGludCBpbmRleDsKKyAgdW5zaWduZWQgbG9uZyBpbnQgZmxhZ3M7CisgIGxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOworICBsb2NhbF9pcnFfZGlzYWJsZSgpOworCisgIGludGVybmFsX3JlbGVhc2VfbG9ja2VkX2J1ZmZlciggbSApOworICBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5lbXB0eV9sZW4gPSAwOworCisgIGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5uYnVmZmVyczsgaW5kZXgrKyApCisgICAgcHVzaF9lbXB0eSggaW5kZXgsICBtICk7CisKKyAgLyogTWFrZSBzdXJlIHRoZXJlIGlzIGFuIGFjdGl2ZSBidWZmZXIgdGhlcmUuICovCisgIGR0MzE1NV9mYnVmZmVyWyBtIF0tPmFjdGl2ZV9idWYgPSBwb3BfZW1wdHkoIG0gKTsKKworICBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5ldmVuX2hhcHBlbmVkID0gMDsKKyAgZHQzMTU1X2ZidWZmZXJbIG0gXS0+ZXZlbl9zdG9wcGVkICA9IDA7CisKKyAgLyogc2V0dXAgdGhlIHJlYWR5IHF1ZXVlICAqLworICBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5yZWFkeV9oZWFkID0gMDsKKyAgZHQzMTU1X2ZidWZmZXJbIG0gXS0+cmVhZHlfbGVuID0gMDsKKworICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZHQzMTU1X2dldF9yZWFkeV9idWZmZXIoKQorICogbSBpcyBtaW5vciAjIG9mIGRldmljZQorICoKKyAqIGdldF9yZWFkeV9idWZmZXIgd2lsbCBncmFiIHRoZSBuZXh0IGNodW5rIG9mIGRhdGEKKyAqIGlmIGl0IGlzIGFscmVhZHkgdGhlcmUsIG90aGVyd2lzZSBpdCByZXR1cm5zIDAuCisgKiBJZiB0aGUgdXNlciBoYXMgYSBidWZmZXIgbG9ja2VkIGl0IHdpbGwgdW5sb2NrCisgKiB0aGF0IGJ1ZmZlciBiZWZvcmUgcmV0dXJuaW5nIHRoZSBuZXcgb25lLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW5saW5lIGludCBkdDMxNTVfZ2V0X3JlYWR5X2J1ZmZlciggaW50IG0gKQoreworICBpbnQgZnJhbWVfaW5kZXg7CisgIHVuc2lnbmVkIGxvbmcgaW50IGZsYWdzOworICBsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKKyAgbG9jYWxfaXJxX2Rpc2FibGUoKTsKKworI2lmZGVmIERFQlVHX1FVRVNfQQorICBwcmludHF1ZXMoIG0gKTsKKyNlbmRpZgorCisgIGludGVybmFsX3JlbGVhc2VfbG9ja2VkX2J1ZmZlciggbSApOworCisgIGlmIChpc19yZWFkeV9idWZfZW1wdHkoIG0gKSkKKyAgICBmcmFtZV9pbmRleCA9IC0xOworICBlbHNlCisgICAgeworICAgICAgZnJhbWVfaW5kZXggPSBwb3BfcmVhZHkoIG0gKTsKKyAgICAgIGR0MzE1NV9mYnVmZmVyWyBtIF0tPmxvY2tlZF9idWYgPSBmcmFtZV9pbmRleDsKKyAgICB9CisKKyNpZmRlZiBERUJVR19RVUVTX0IKKyAgcHJpbnRxdWVzKCBtICk7CisjZW5kaWYKKworICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKyAgcmV0dXJuIGZyYW1lX2luZGV4OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTVfaXNyLmggYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9pc3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTk1Y2IxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTVfaXNyLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKworQ29weXJpZ2h0IDE5OTYsMjAwMiBHcmVnb3J5IEQuIEhhZ2VyLCBBbGZyZWQgQS4gUml6emksIE5vYWggSi4gQ293YW4sCisJCSAgICBKYXNvbiBMYXBlbnRhLCBTY290dCBTbWVkbGV5CisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBEVDMxNTUgRGV2aWNlIERyaXZlci4KKworVGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0CithbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKK3B1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQordXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorTUEgMDIxMTEtMTMwNyBVU0EKKworCistLSBDaGFuZ2VzIC0tCisKKyAgRGF0ZSAgICAgUHJvZ3JhbW1lciAgIERlc2NyaXB0aW9uIG9mIGNoYW5nZXMgbWFkZQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAzLUp1bC0yMDAwIEpNTCAgICAgICBuL2EKKyAgMjQtSnVsLTIwMDIgU1MgICAgICAgIEdQTCBsaWNlbmNlLgorICAyNi1PY3QtMjAwOSBTUwlQb3J0aW5nIHRvIDIuNi4zMCBrZXJuZWwuCisKKy0tIG5vdGVzIC0tCisKKyovCisKKyNpZm5kZWYgRFQzMTU1X0lTUl9ICisjZGVmaW5lIERUMzE1NV9JU1JfSAorCitleHRlcm4gc3RydWN0IGR0MzE1NV9mYnVmZmVyX3MgKmR0MzE1NV9mYnVmZmVyW01BWEJPQVJEU107CisKKy8qIFVzZXIgZnVuY3Rpb25zIGZvciBidWZmZXJpbmcgKi8KKy8qIEluaXRpYWxpemUgdGhlIGJ1ZmZlcmluZyBzeXN0ZW0uICBUaGlzIHNob3VsZCAqLworLyogYmUgY2FsbGVkIHByaW9yIHRvIGVuYWJsaW5nIGludGVycnVwdHMgKi8KKwordTMyIGR0MzE1NV9zZXR1cF9idWZmZXJzKHUzMiAqYWxsb2NhdG9yQWRkcik7CisKKy8qIEdldCB0aGUgbmV4dCBmcmFtZSBvZiBkYXRhIGlmIGl0IGlzIHJlYWR5LiAgUmV0dXJucyAqLworLyogemVybyBpZiBubyBkYXRhIGlzIHJlYWR5LiAgSWYgdGhlcmUgaXMgZGF0YSBidXQgKi8KKy8qIHRoZSB1c2VyIGhhcyBhIGxvY2tlZCBidWZmZXIsIGl0IHdpbGwgdW5sb2NrIHRoYXQgKi8KKy8qIGJ1ZmZlciBhbmQgcmV0dXJuIGl0IHRvIHRoZSBmcmVlIGxpc3QuICovCisKK2ludCBkdDMxNTVfZ2V0X3JlYWR5X2J1ZmZlcihpbnQgbWlub3IpOworCisvKiBSZXR1cm4gYSBsb2NrZWQgYnVmZmVyIHRvIHRoZSBmcmVlIGxpc3QgKi8KKwordm9pZCBkdDMxNTVfcmVsZWFzZV9sb2NrZWRfYnVmZmVyKGludCBtaW5vcik7CisKKy8qIEZsdXNoIHRoZSBidWZmZXIgc3lzdGVtICovCitpbnQgZHQzMTU1X2ZsdXNoKGludCBtaW5vcik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTaW1wbGUgYXJyYXkgYmFzZWQgcXVlIHN0cnVjdAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2Jvb2wgYXJlX2VtcHR5X2J1ZmZlcnMoaW50IG1pbm9yKTsKK3ZvaWQgcHVzaF9lbXB0eShpbnQgaW5kZXgsIGludCBtaW5vcik7CisKK2ludCAgcG9wX2VtcHR5KGludCBtaW5vcik7CisKK2Jvb2wgaXNfcmVhZHlfYnVmX2VtcHR5KGludCBtaW5vcik7Citib29sIGlzX3JlYWR5X2J1Zl9mdWxsKGludCBtaW5vcik7CisKK3ZvaWQgcHVzaF9yZWFkeShpbnQgbWlub3IsIGludCBpbmRleCk7CitpbnQgIHBvcF9yZWFkeShpbnQgbWlub3IpOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfYWRkcmVzc19tYXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2FkZHJlc3NfbWFwLmgKaW5kZXggZTcxNWU0ZC4uZWE3NDZiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfYWRkcmVzc19tYXAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9hZGRyZXNzX21hcC5oCkBAIC0xNDksNyArMTQ5LDcgQEAKICAqIEdMT0JBTCBNb2R1bGUgb2YgSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKICAqIExvY2F0ZWQgYXQgYWRkcmVzcyAweDAwMDAKICAqLwotdHlwZWRlZiBzdHJ1Y3QgX0dMT0JBTF90IHsJCQkvKiBMb2NhdGlvbjogKi8KK3N0cnVjdCBnbG9iYWxfcmVncyB7CQkJLyogTG9jYXRpb246ICovCiAJdTMyIHR4cV9zdGFydF9hZGRyOwkJCS8qICAweDAwMDAgKi8KIAl1MzIgdHhxX2VuZF9hZGRyOwkJCS8qICAweDAwMDQgKi8KIAl1MzIgcnhxX3N0YXJ0X2FkZHI7CQkJLyogIDB4MDAwOCAqLwpAQCAtMTY1LDkgKzE2NSw3IEBACiAJdTMyIG1zaV9jb25maWc7CQkJCS8qICAweDAwMzAgKi8KIAl1MzIgbG9vcGJhY2s7CQkJLyogIDB4MDAzNCAqLwogCXUzMiB3YXRjaGRvZ190aW1lcjsJCQkvKiAgMHgwMDM4ICovCi19IEdMT0JBTF90LCAqUEdMT0JBTF90OwotCi0vKiBFTkQgT0YgR0xPQkFMIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCit9OwogCiAKIC8qIFNUQVJUIE9GIFRYRE1BIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCkBAIC0yNTUsNyArMjUzLDcgQEAKICAqIFR4IERNQSBNb2R1bGUgb2YgSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKICAqIExvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMDAKICAqLwotdHlwZWRlZiBzdHJ1Y3QgX1RYRE1BX3QgewkJLyogTG9jYXRpb246ICovCitzdHJ1Y3QgdHhkbWFfcmVncyB7CQkJLyogTG9jYXRpb246ICovCiAJdTMyIGNzcjsJCQkvKiAgMHgxMDAwICovCiAJdTMyIHByX2Jhc2VfaGk7CQkJLyogIDB4MTAwNCAqLwogCXUzMiBwcl9iYXNlX2xvOwkJCS8qICAweDEwMDggKi8KQEAgLTI4Miw3ICsyODAsNyBAQAogCXUzMiBEcm9wcGVkVExQQ291bnQ7CQkvKiAgMHgxMDVjICovCiAJdTMyIE5ld1NlcnZpY2VDb21wbGV0ZTsJCS8qICAweDEwNjAgKi8KIAl1MzIgRXRoZXJuZXRQYWNrZXRDb3VudDsJLyogIDB4MTA2NCAqLwotfSBUWERNQV90LCAqUFRYRE1BX3Q7Cit9OwogCiAvKiBFTkQgT0YgVFhETUEgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KIApAQCAtMjkyLDQ1ICsyOTAsMjUgQEAKIC8qCiAgKiBzdHJ1Y3R1cmUgZm9yIGNvbnRyb2wgc3RhdHVzIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAogICogTG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAwMAorICoKKyAqIENTUgorICogMDogaGFsdAorICogMS0zOiB0YworICogNDogZmJyX2JpZ19lbmRpYW4KKyAqIDU6IHBzcl9iaWdfZW5kaWFuCisgKiA2OiBwa3RfYmlnX2VuZGlhbgorICogNzogZG1hX2JpZ19lbmRpYW4KKyAqIDgtOTogZmJyMF9zaXplCisgKiAxMDogZmJyMF9lbmFibGUKKyAqIDExLTEyOiBmYnIxX3NpemUKKyAqIDEzOiBmYnIxX2VuYWJsZQorICogMTQ6IHVudXNlZAorICogMTU6IHBrdF9kcm9wX2Rpc2FibGUKKyAqIDE2OiBwa3RfZG9uZV9mbHVzaAorICogMTc6IGhhbHRfc3RhdHVzCisgKiAxOC0zMTogdW51c2VkCiAgKi8KLXR5cGVkZWYgdW5pb24gX1JYRE1BX0NTUl90IHsKLQl1MzIgdmFsdWU7Ci0Jc3RydWN0IHsKLSNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCi0JCXUzMiB1bnVzZWQyOjE0OwkJLyogYml0cyAxOC0zMSAqLwotCQl1MzIgaGFsdF9zdGF0dXM6MTsJLyogYml0IDE3ICovCi0JCXUzMiBwa3RfZG9uZV9mbHVzaDoxOwkvKiBiaXQgMTYgKi8KLQkJdTMyIHBrdF9kcm9wX2Rpc2FibGU6MTsJLyogYml0IDE1ICovCi0JCXUzMiB1bnVzZWQxOjE7CQkvKiBiaXQgMTQgKi8KLQkJdTMyIGZicjFfZW5hYmxlOjE7CS8qIGJpdCAxMyAqLwotCQl1MzIgZmJyMV9zaXplOjI7CS8qIGJpdHMgMTEtMTIgKi8KLQkJdTMyIGZicjBfZW5hYmxlOjE7CS8qIGJpdCAxMCAqLwotCQl1MzIgZmJyMF9zaXplOjI7CS8qIGJpdHMgOC05ICovCi0JCXUzMiBkbWFfYmlnX2VuZGlhbjoxOwkvKiBiaXQgNyAqLwotCQl1MzIgcGt0X2JpZ19lbmRpYW46MTsJLyogYml0IDYgKi8KLQkJdTMyIHBzcl9iaWdfZW5kaWFuOjE7CS8qIGJpdCA1ICovCi0JCXUzMiBmYnJfYmlnX2VuZGlhbjoxOwkvKiBiaXQgNCAqLwotCQl1MzIgdGM6MzsJCS8qIGJpdHMgMS0zICovCi0JCXUzMiBoYWx0OjE7CQkvKiBiaXQgMCAqLwotI2Vsc2UKLQkJdTMyIGhhbHQ6MTsJCS8qIGJpdCAwICovCi0JCXUzMiB0YzozOwkJLyogYml0cyAxLTMgKi8KLQkJdTMyIGZicl9iaWdfZW5kaWFuOjE7CS8qIGJpdCA0ICovCi0JCXUzMiBwc3JfYmlnX2VuZGlhbjoxOwkvKiBiaXQgNSAqLwotCQl1MzIgcGt0X2JpZ19lbmRpYW46MTsJLyogYml0IDYgKi8KLQkJdTMyIGRtYV9iaWdfZW5kaWFuOjE7CS8qIGJpdCA3ICovCi0JCXUzMiBmYnIwX3NpemU6MjsJLyogYml0cyA4LTkgKi8KLQkJdTMyIGZicjBfZW5hYmxlOjE7CS8qIGJpdCAxMCAqLwotCQl1MzIgZmJyMV9zaXplOjI7CS8qIGJpdHMgMTEtMTIgKi8KLQkJdTMyIGZicjFfZW5hYmxlOjE7CS8qIGJpdCAxMyAqLwotCQl1MzIgdW51c2VkMToxOwkJLyogYml0IDE0ICovCi0JCXUzMiBwa3RfZHJvcF9kaXNhYmxlOjE7CS8qIGJpdCAxNSAqLwotCQl1MzIgcGt0X2RvbmVfZmx1c2g6MTsJLyogYml0IDE2ICovCi0JCXUzMiBoYWx0X3N0YXR1czoxOwkvKiBiaXQgMTcgKi8KLQkJdTMyIHVudXNlZDI6MTQ7CQkvKiBiaXRzIDE4LTMxICovCi0jZW5kaWYKLQl9IGJpdHM7Ci19IFJYRE1BX0NTUl90LCAqUFJYRE1BX0NTUl90OworCiAKIC8qCiAgKiBzdHJ1Y3R1cmUgZm9yIGRtYSB3cml0ZWJhY2sgbG8gcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCkBAIC00NTEsMTggKzQyOSw2IEBACiAgKiAzMS0xMDogdW51c2VkCiAgKiA5LTA6IGZiciBuZGVzYwogICovCi10eXBlZGVmIHVuaW9uIF9SWERNQV9GQlJfTlVNX0RFU190IHsKLQl1MzIgdmFsdWU7Ci0Jc3RydWN0IHsKLSNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCi0JCXUzMiB1bnVzZWQ6MjI7CQkvKiBiaXRzIDEwLTMxICovCi0JCXUzMiBmYnJfbmRlc2M6MTA7CS8qIGJpdHMgMC05ICovCi0jZWxzZQotCQl1MzIgZmJyX25kZXNjOjEwOwkvKiBiaXRzIDAtOSAqLwotCQl1MzIgdW51c2VkOjIyOwkJLyogYml0cyAxMC0zMSAqLwotI2VuZGlmCi0JfSBiaXRzOwotfSBSWERNQV9GQlJfTlVNX0RFU190LCAqUFJYRE1BX0ZCUl9OVU1fREVTX3Q7CiAKIC8qCiAgKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIHJpbmcgMCBhdmFpbGFibGUgb2Zmc2V0IHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcApAQCAtNTMyLDggKzQ5OCw4IEBACiAgKiBSeCBETUEgTW9kdWxlIG9mIEpBR0NvcmUgQWRkcmVzcyBNYXBwaW5nCiAgKiBMb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDAwCiAgKi8KLXR5cGVkZWYgc3RydWN0IF9SWERNQV90IHsJCQkJLyogTG9jYXRpb246ICovCi0JUlhETUFfQ1NSX3QgY3NyOwkJCQkvKiAgMHgyMDAwICovCitzdHJ1Y3QgcnhkbWFfcmVncyB7CQkJCQkvKiBMb2NhdGlvbjogKi8KKwl1MzIgY3NyOwkJCQkJLyogIDB4MjAwMCAqLwogCXUzMiBkbWFfd2JfYmFzZV9sbzsJCQkJLyogIDB4MjAwNCAqLwogCXUzMiBkbWFfd2JfYmFzZV9oaTsJCQkJLyogIDB4MjAwOCAqLwogCXUzMiBudW1fcGt0X2RvbmU7CQkJCS8qICAweDIwMEMgKi8KQEAgLTU2Miw3ICs1MjgsNyBAQAogCXUzMiBmYnIxX2Z1bGxfb2Zmc2V0OwkJCQkvKiAgMHgyMDY4ICovCiAJdTMyIGZicjFfcmRfaW5kZXg7CQkJCS8qICAweDIwNkMgKi8KIAl1MzIgZmJyMV9taW5fZGVzOwkJCQkvKiAgMHgyMDcwICovCi19IFJYRE1BX3QsICpQUlhETUFfdDsKK307CiAKIC8qIEVORCBPRiBSWERNQSBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLwogCkBAIC01NzIsMzMgKzUzOCwxOCBAQAogLyoKICAqIHN0cnVjdHVyZSBmb3IgY29udHJvbCByZWcgaW4gdHhtYWMgYWRkcmVzcyBtYXAKICAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDMwMDAKKyAqCisgKiBiaXRzCisgKiAzMS04OiB1bnVzZWQKKyAqIDc6IGNrbHNlZ19kaXNhYmxlCisgKiA2OiBja2JjbnRfZGlzYWJsZQorICogNTogY2tzZWdudW0KKyAqIDQ6IGFzeW5jX2Rpc2FibGUKKyAqIDM6IGZjX2Rpc2FibGUKKyAqIDI6IG1jaWZfZGlzYWJsZQorICogMTogbWlmX2Rpc2FibGUKKyAqIDA6IHR4bWFjX2VuCiAgKi8KLXR5cGVkZWYgdW5pb24gX1RYTUFDX0NUTF90IHsKLQl1MzIgdmFsdWU7Ci0Jc3RydWN0IHsKLSNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCi0JCXUzMiB1bnVzZWQ6MjQ7CQkvKiBiaXRzIDgtMzEgKi8KLQkJdTMyIGNrbHNlZ19kaWFibGU6MTsJLyogYml0IDcgKi8KLQkJdTMyIGNrYmNudF9kaXNhYmxlOjE7CS8qIGJpdCA2ICovCi0JCXUzMiBja3NlZ251bToxOwkJLyogYml0IDUgKi8KLQkJdTMyIGFzeW5jX2Rpc2FibGU6MTsJLyogYml0IDQgKi8KLQkJdTMyIGZjX2Rpc2FibGU6MTsJLyogYml0IDMgKi8KLQkJdTMyIG1jaWZfZGlzYWJsZToxOwkvKiBiaXQgMiAqLwotCQl1MzIgbWlmX2Rpc2FibGU6MTsJLyogYml0IDEgKi8KLQkJdTMyIHR4bWFjX2VuOjE7CQkvKiBiaXQgMCAqLwotI2Vsc2UKLQkJdTMyIHR4bWFjX2VuOjE7CQkvKiBiaXQgMCAqLwotCQl1MzIgbWlmX2Rpc2FibGU6MTsJLyogYml0IDEgbWFjIGludGVyZmFjZSAqLwotCQl1MzIgbWNpZl9kaXNhYmxlOjE7CS8qIGJpdCAyIG1lbS4gY29udHIuIGludGVyZmFjZSAqLwotCQl1MzIgZmNfZGlzYWJsZToxOwkvKiBiaXQgMyAqLwotCQl1MzIgYXN5bmNfZGlzYWJsZToxOwkvKiBiaXQgNCAqLwotCQl1MzIgY2tzZWdudW06MTsJCS8qIGJpdCA1ICovCi0JCXUzMiBja2JjbnRfZGlzYWJsZToxOwkvKiBiaXQgNiAqLwotCQl1MzIgY2tsc2VnX2RpYWJsZToxOwkvKiBiaXQgNyAqLwotCQl1MzIgdW51c2VkOjI0OwkJLyogYml0cyA4LTMxICovCi0jZW5kaWYKLQl9IGJpdHM7Ci19IFRYTUFDX0NUTF90LCAqUFRYTUFDX0NUTF90OwogCiAvKgogICogc3RydWN0dXJlIGZvciBzaGFkb3cgcG9pbnRlciByZWcgaW4gdHhtYWMgYWRkcmVzcyBtYXAKQEAgLTYxMiwyMyArNTYzLDEyIEBACiAvKgogICogc3RydWN0dXJlIGZvciBlcnJvciBjb3VudCByZWcgaW4gdHhtYWMgYWRkcmVzcyBtYXAKICAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDMwMDgKKyAqCisgKiAzMS0xMjogdW51c2VkCisgKiAxMS04OiByZXNlcnZlZAorICogNy00OiB0eHFfdW5kZXJydW4KKyAqIDMtMDogZmlmb191bmRlcnJ1bgogICovCi10eXBlZGVmIHVuaW9uIF9UWE1BQ19FUlJfQ05UX3QgewotCXUzMiB2YWx1ZTsKLQlzdHJ1Y3QgewotI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKLQkJdTMyIHVudXNlZDoyMDsJCS8qIGJpdHMgMTItMzEgKi8KLQkJdTMyIHJlc2VydmVkOjQ7CQkvKiBiaXRzIDgtMTEgKi8KLQkJdTMyIHR4cV91bmRlcnJ1bjo0OwkvKiBiaXRzIDQtNyAqLwotCQl1MzIgZmlmb191bmRlcnJ1bjo0OwkvKiBiaXRzIDAtMyAqLwotI2Vsc2UKLQkJdTMyIGZpZm9fdW5kZXJydW46NDsJLyogYml0cyAwLTMgKi8KLQkJdTMyIHR4cV91bmRlcnJ1bjo0OwkvKiBiaXRzIDQtNyAqLwotCQl1MzIgcmVzZXJ2ZWQ6NDsJCS8qIGJpdHMgOC0xMSAqLwotCQl1MzIgdW51c2VkOjIwOwkJLyogYml0cyAxMi0zMSAqLwotI2VuZGlmCi0JfSBiaXRzOwotfSBUWE1BQ19FUlJfQ05UX3QsICpQVFhNQUNfRVJSX0NOVF90OwogCiAvKgogICogc3RydWN0dXJlIGZvciBtYXggZmlsbCByZWcgaW4gdHhtYWMgYWRkcmVzcyBtYXAKQEAgLTY1Nyw2NCArNTk3LDMyIEBACiAvKgogICogc3RydWN0dXJlIGZvciBlcnJvciByZWcgaW4gdHhtYWMgYWRkcmVzcyBtYXAKICAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDMwMTgKKyAqCisgKiAzMS05OiB1bnVzZWQKKyAqIDg6IGZpZm9fdW5kZXJydW4KKyAqIDctNjogdW51c2VkCisgKiA1OiBjdHJsMl9lcnIKKyAqIDQ6IHR4cV91bmRlcnJ1bgorICogMzogYmNudF9lcnIKKyAqIDI6IGxzZWdfZXJyCisgKiAxOiBzZWdudW1fZXJyCisgKiAwOiBzZWcwX2VycgogICovCi10eXBlZGVmIHVuaW9uIF9UWE1BQ19FUlJfdCB7Ci0JdTMyIHZhbHVlOwotCXN0cnVjdCB7Ci0jaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAotCQl1MzIgdW51c2VkMjoyMzsJCS8qIGJpdHMgOS0zMSAqLwotCQl1MzIgZmlmb191bmRlcnJ1bjoxOwkvKiBiaXQgOCAqLwotCQl1MzIgdW51c2VkMToyOwkJLyogYml0cyA2LTcgKi8KLQkJdTMyIGN0cmwyX2VycjoxOwkvKiBiaXQgNSAqLwotCQl1MzIgdHhxX3VuZGVycnVuOjE7CS8qIGJpdCA0ICovCi0JCXUzMiBiY250X2VycjoxOwkJLyogYml0IDMgKi8KLQkJdTMyIGxzZWdfZXJyOjE7CQkvKiBiaXQgMiAqLwotCQl1MzIgc2VnbnVtX2VycjoxOwkvKiBiaXQgMSAqLwotCQl1MzIgc2VnMF9lcnI6MTsJCS8qIGJpdCAwICovCi0jZWxzZQotCQl1MzIgc2VnMF9lcnI6MTsJCS8qIGJpdCAwICovCi0JCXUzMiBzZWdudW1fZXJyOjE7CS8qIGJpdCAxICovCi0JCXUzMiBsc2VnX2VycjoxOwkJLyogYml0IDIgKi8KLQkJdTMyIGJjbnRfZXJyOjE7CQkvKiBiaXQgMyAqLwotCQl1MzIgdHhxX3VuZGVycnVuOjE7CS8qIGJpdCA0ICovCi0JCXUzMiBjdHJsMl9lcnI6MTsJLyogYml0IDUgKi8KLQkJdTMyIHVudXNlZDE6MjsJCS8qIGJpdHMgNi03ICovCi0JCXUzMiBmaWZvX3VuZGVycnVuOjE7CS8qIGJpdCA4ICovCi0JCXUzMiB1bnVzZWQyOjIzOwkJLyogYml0cyA5LTMxICovCi0jZW5kaWYKLQl9IGJpdHM7Ci19IFRYTUFDX0VSUl90LCAqUFRYTUFDX0VSUl90OwogCiAvKgogICogc3RydWN0dXJlIGZvciBlcnJvciBpbnRlcnJ1cHQgcmVnIGluIHR4bWFjIGFkZHJlc3MgbWFwCiAgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgzMDFDCisgKgorICogMzEtOTogdW51c2VkCisgKiA4OiBmaWZvX3VuZGVycnVuCisgKiA3LTY6IHVudXNlZAorICogNTogY3RybDJfZXJyCisgKiA0OiB0eHFfdW5kZXJydW4KKyAqIDM6IGJjbnRfZXJyCisgKiAyOiBsc2VnX2VycgorICogMTogc2VnbnVtX2VycgorICogMDogc2VnMF9lcnIKICAqLwotdHlwZWRlZiB1bmlvbiBfVFhNQUNfRVJSX0lOVF90IHsKLQl1MzIgdmFsdWU7Ci0Jc3RydWN0IHsKLSNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCi0JCXUzMiB1bnVzZWQyOjIzOwkJLyogYml0cyA5LTMxICovCi0JCXUzMiBmaWZvX3VuZGVycnVuOjE7CS8qIGJpdCA4ICovCi0JCXUzMiB1bnVzZWQxOjI7CQkvKiBiaXRzIDYtNyAqLwotCQl1MzIgY3RybDJfZXJyOjE7CS8qIGJpdCA1ICovCi0JCXUzMiB0eHFfdW5kZXJydW46MTsJLyogYml0IDQgKi8KLQkJdTMyIGJjbnRfZXJyOjE7CQkvKiBiaXQgMyAqLwotCQl1MzIgbHNlZ19lcnI6MTsJCS8qIGJpdCAyICovCi0JCXUzMiBzZWdudW1fZXJyOjE7CS8qIGJpdCAxICovCi0JCXUzMiBzZWcwX2VycjoxOwkJLyogYml0IDAgKi8KLSNlbHNlCi0JCXUzMiBzZWcwX2VycjoxOwkJLyogYml0IDAgKi8KLQkJdTMyIHNlZ251bV9lcnI6MTsJLyogYml0IDEgKi8KLQkJdTMyIGxzZWdfZXJyOjE7CQkvKiBiaXQgMiAqLwotCQl1MzIgYmNudF9lcnI6MTsJCS8qIGJpdCAzICovCi0JCXUzMiB0eHFfdW5kZXJydW46MTsJLyogYml0IDQgKi8KLQkJdTMyIGN0cmwyX2VycjoxOwkvKiBiaXQgNSAqLwotCQl1MzIgdW51c2VkMToyOwkJLyogYml0cyA2LTcgKi8KLQkJdTMyIGZpZm9fdW5kZXJydW46MTsJLyogYml0IDggKi8KLQkJdTMyIHVudXNlZDI6MjM7CQkvKiBiaXRzIDktMzEgKi8KLSNlbmRpZgotCX0gYml0czsKLX0gVFhNQUNfRVJSX0lOVF90LCAqUFRYTUFDX0VSUl9JTlRfdDsKIAogLyoKICAqIHN0cnVjdHVyZSBmb3IgZXJyb3IgaW50ZXJydXB0IHJlZyBpbiB0eG1hYyBhZGRyZXNzIG1hcApAQCAtNzI4LDE3ICs2MzYsMTcgQEAKIC8qCiAgKiBUeCBNQUMgTW9kdWxlIG9mIEpBR0NvcmUgQWRkcmVzcyBNYXBwaW5nCiAgKi8KLXR5cGVkZWYgc3RydWN0IF9UWE1BQ190IHsJCS8qIExvY2F0aW9uOiAqLwotCVRYTUFDX0NUTF90IGN0bDsJCS8qICAweDMwMDAgKi8KK3N0cnVjdCB0eG1hY19yZWdzIHsJCQkvKiBMb2NhdGlvbjogKi8KKwl1MzIgY3RsOwkJCS8qICAweDMwMDAgKi8KIAl1MzIgc2hhZG93X3B0cjsJCQkvKiAgMHgzMDA0ICovCi0JVFhNQUNfRVJSX0NOVF90IGVycl9jbnQ7CS8qICAweDMwMDggKi8KKwl1MzIgZXJyX2NudDsJCQkvKiAgMHgzMDA4ICovCiAJdTMyIG1heF9maWxsOwkJCS8qICAweDMwMEMgKi8KIAl1MzIgY2ZfcGFyYW07CQkJLyogIDB4MzAxMCAqLwogCXUzMiB0eF90ZXN0OwkJCS8qICAweDMwMTQgKi8KLQlUWE1BQ19FUlJfdCBlcnI7CQkvKiAgMHgzMDE4ICovCi0JVFhNQUNfRVJSX0lOVF90IGVycl9pbnQ7CS8qICAweDMwMUMgKi8KKwl1MzIgZXJyOwkJCS8qICAweDMwMTggKi8KKwl1MzIgZXJyX2ludDsJCQkvKiAgMHgzMDFDICovCiAJdTMyIGJwX2N0cmw7CQkJLyogIDB4MzAyMCAqLwotfSBUWE1BQ190LCAqUFRYTUFDX3Q7Cit9OwogCiAvKiBFTkQgT0YgVFhNQUMgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KIApAQCAtNzQ3LDEwNiArNjU1LDQ3IEBACiAvKgogICogc3RydWN0dXJlIGZvciByeG1hYyBjb250cm9sIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAogICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDAwMAorICoKKyAqIDMxLTc6IHJlc2VydmVkCisgKiA2OiByeG1hY19pbnRfZGlzYWJsZQorICogNTogYXN5bmNfZGlzYWJsZQorICogNDogbWlmX2Rpc2FibGUKKyAqIDM6IHdvbF9kaXNhYmxlCisgKiAyOiBwa3RfZmlsdGVyX2Rpc2FibGUKKyAqIDE6IG1jaWZfZGlzYWJsZQorICogMDogcnhtYWNfZW4KICAqLwotdHlwZWRlZiB1bmlvbiBfUlhNQUNfQ1RSTF90IHsKLQl1MzIgdmFsdWU7Ci0Jc3RydWN0IHsKLSNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCi0JCXUzMiByZXNlcnZlZDoyNTsJCS8qIGJpdHMgNy0zMSAqLwotCQl1MzIgcnhtYWNfaW50X2Rpc2FibGU6MTsJLyogYml0IDYgKi8KLQkJdTMyIGFzeW5jX2Rpc2FibGU6MTsJCS8qIGJpdCA1ICovCi0JCXUzMiBtaWZfZGlzYWJsZToxOwkJLyogYml0IDQgKi8KLQkJdTMyIHdvbF9kaXNhYmxlOjE7CQkvKiBiaXQgMyAqLwotCQl1MzIgcGt0X2ZpbHRlcl9kaXNhYmxlOjE7CS8qIGJpdCAyICovCi0JCXUzMiBtY2lmX2Rpc2FibGU6MTsJCS8qIGJpdCAxICovCi0JCXUzMiByeG1hY19lbjoxOwkJCS8qIGJpdCAwICovCi0jZWxzZQotCQl1MzIgcnhtYWNfZW46MTsJCQkvKiBiaXQgMCAqLwotCQl1MzIgbWNpZl9kaXNhYmxlOjE7CQkvKiBiaXQgMSAqLwotCQl1MzIgcGt0X2ZpbHRlcl9kaXNhYmxlOjE7CS8qIGJpdCAyICovCi0JCXUzMiB3b2xfZGlzYWJsZToxOwkJLyogYml0IDMgKi8KLQkJdTMyIG1pZl9kaXNhYmxlOjE7CQkvKiBiaXQgNCAqLwotCQl1MzIgYXN5bmNfZGlzYWJsZToxOwkJLyogYml0IDUgKi8KLQkJdTMyIHJ4bWFjX2ludF9kaXNhYmxlOjE7CS8qIGJpdCA2ICovCi0JCXUzMiByZXNlcnZlZDoyNTsJCS8qIGJpdHMgNy0zMSAqLwotI2VuZGlmCi0JfSBiaXRzOwotfSBSWE1BQ19DVFJMX3QsICpQUlhNQUNfQ1RSTF90OwogCiAvKgogICogc3RydWN0dXJlIGZvciBXYWtlIE9uIExhbiBDb250cm9sIGFuZCBDUkMgMCByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKICAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwMDQKKyAqIDMxLTE2OiBjcmMKKyAqIDE1LTEyOiByZXNlcnZlZAorICogMTE6IGlnbm9yZV9wcAorICogMTA6IGlnbm9yZV9tcAorICogOTogY2xyX2ludHIKKyAqIDg6IGlnbm9yZV9saW5rX2NoZworICogNzogaWdub3JlX3VuaQorICogNjogaWdub3JlX211bHRpCisgKiA1OiBpZ25vcmVfYnJvYWQKKyAqIDQtMDogdmFsaWRfY3JjIDQtMAogICovCi10eXBlZGVmIHVuaW9uIF9SWE1BQ19XT0xfQ1RMX0NSQzBfdCB7Ci0JdTMyIHZhbHVlOwotCXN0cnVjdCB7Ci0jaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAotCQl1MzIgY3JjMDoxNjsJCS8qIGJpdHMgMTYtMzEgKi8KLQkJdTMyIHJlc2VydmU6NDsJCS8qIGJpdHMgMTItMTUgKi8KLQkJdTMyIGlnbm9yZV9wcDoxOwkvKiBiaXQgMTEgKi8KLQkJdTMyIGlnbm9yZV9tcDoxOwkvKiBiaXQgMTAgKi8KLQkJdTMyIGNscl9pbnRyOjE7CQkvKiBiaXQgOSAqLwotCQl1MzIgaWdub3JlX2xpbmtfY2hnOjE7CS8qIGJpdCA4ICovCi0JCXUzMiBpZ25vcmVfdW5pOjE7CS8qIGJpdCA3ICovCi0JCXUzMiBpZ25vcmVfbXVsdGk6MTsJLyogYml0IDYgKi8KLQkJdTMyIGlnbm9yZV9icm9hZDoxOwkvKiBiaXQgNSAqLwotCQl1MzIgdmFsaWRfY3JjNDoxOwkvKiBiaXQgNCAqLwotCQl1MzIgdmFsaWRfY3JjMzoxOwkvKiBiaXQgMyAqLwotCQl1MzIgdmFsaWRfY3JjMjoxOwkvKiBiaXQgMiAqLwotCQl1MzIgdmFsaWRfY3JjMToxOwkvKiBiaXQgMSAqLwotCQl1MzIgdmFsaWRfY3JjMDoxOwkvKiBiaXQgMCAqLwotI2Vsc2UKLQkJdTMyIHZhbGlkX2NyYzA6MTsJLyogYml0IDAgKi8KLQkJdTMyIHZhbGlkX2NyYzE6MTsJLyogYml0IDEgKi8KLQkJdTMyIHZhbGlkX2NyYzI6MTsJLyogYml0IDIgKi8KLQkJdTMyIHZhbGlkX2NyYzM6MTsJLyogYml0IDMgKi8KLQkJdTMyIHZhbGlkX2NyYzQ6MTsJLyogYml0IDQgKi8KLQkJdTMyIGlnbm9yZV9icm9hZDoxOwkvKiBiaXQgNSAqLwotCQl1MzIgaWdub3JlX211bHRpOjE7CS8qIGJpdCA2ICovCi0JCXUzMiBpZ25vcmVfdW5pOjE7CS8qIGJpdCA3ICovCi0JCXUzMiBpZ25vcmVfbGlua19jaGc6MTsJLyogYml0IDggKi8KLQkJdTMyIGNscl9pbnRyOjE7CQkvKiBiaXQgOSAqLwotCQl1MzIgaWdub3JlX21wOjE7CS8qIGJpdCAxMCAqLwotCQl1MzIgaWdub3JlX3BwOjE7CS8qIGJpdCAxMSAqLwotCQl1MzIgcmVzZXJ2ZTo0OwkJLyogYml0cyAxMi0xNSAqLwotCQl1MzIgY3JjMDoxNjsJCS8qIGJpdHMgMTYtMzEgKi8KLSNlbmRpZgotCX0gYml0czsKLX0gUlhNQUNfV09MX0NUTF9DUkMwX3QsICpQUlhNQUNfV09MX0NUTF9DUkMwX3Q7CiAKIC8qCiAgKiBzdHJ1Y3R1cmUgZm9yIENSQyAxIGFuZCBDUkMgMiByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKICAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwMDgKKyAqCisgKiAzMS0xNjogY3JjMgorICogMTUtMDogY3JjMQogICovCi10eXBlZGVmIHVuaW9uIF9SWE1BQ19XT0xfQ1JDMTJfdCB7Ci0JdTMyIHZhbHVlOwotCXN0cnVjdCB7Ci0jaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAotCQl1MzIgY3JjMjoxNjsJLyogYml0cyAxNi0zMSAqLwotCQl1MzIgY3JjMToxNjsJLyogYml0cyAwLTE1ICovCi0jZWxzZQotCQl1MzIgY3JjMToxNjsJLyogYml0cyAwLTE1ICovCi0JCXUzMiBjcmMyOjE2OwkvKiBiaXRzIDE2LTMxICovCi0jZW5kaWYKLQl9IGJpdHM7Ci19IFJYTUFDX1dPTF9DUkMxMl90LCAqUFJYTUFDX1dPTF9DUkMxMl90OwogCiAvKgogICogc3RydWN0dXJlIGZvciBDUkMgMyBhbmQgQ1JDIDQgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwCiAgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDBDCisgKgorICogMzEtMTY6IGNyYzQKKyAqIDE1LTA6IGNyYzMKICAqLwotdHlwZWRlZiB1bmlvbiBfUlhNQUNfV09MX0NSQzM0X3QgewotCXUzMiB2YWx1ZTsKLQlzdHJ1Y3QgewotI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKLQkJdTMyIGNyYzQ6MTY7CS8qIGJpdHMgMTYtMzEgKi8KLQkJdTMyIGNyYzM6MTY7CS8qIGJpdHMgMC0xNSAqLwotI2Vsc2UKLQkJdTMyIGNyYzM6MTY7CS8qIGJpdHMgMC0xNSAqLwotCQl1MzIgY3JjNDoxNjsJLyogYml0cyAxNi0zMSAqLwotI2VuZGlmCi0JfSBiaXRzOwotfSBSWE1BQ19XT0xfQ1JDMzRfdCwgKlBSWE1BQ19XT0xfQ1JDMzRfdDsKIAogLyoKICAqIHN0cnVjdHVyZSBmb3IgV2FrZSBPbiBMYW4gU291cmNlIEFkZHJlc3MgTG8gcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwCkBAIC05NjYsMTY0ICs4MTUsODQgQEAKIC8qCiAgKiBzdHJ1Y3R1cmUgZm9yIFBhY2tldCBGaWx0ZXIgQ29udHJvbCByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKICAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwODQKKyAqCisgKiAzMS0yMzogdW51c2VkCisgKiAyMi0xNjogbWluX3BrdF9zaXplCisgKiAxNS00OiB1bnVzZWQKKyAqIDM6IGZpbHRlcl9mcmFnX2VuCisgKiAyOiBmaWx0ZXJfdW5pX2VuCisgKiAxOiBmaWx0ZXJfbXVsdGlfZW4KKyAqIDA6IGZpbHRlcl9icm9hZF9lbgogICovCi10eXBlZGVmIHVuaW9uIF9SWE1BQ19QRl9DVFJMX3QgewotCXUzMiB2YWx1ZTsKLQlzdHJ1Y3QgewotI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKLQkJdTMyIHVudXNlZDI6OTsJCS8qIGJpdHMgMjMtMzEgKi8KLQkJdTMyIG1pbl9wa3Rfc2l6ZTo3OwkvKiBiaXRzIDE2LTIyICovCi0JCXUzMiB1bnVzZWQxOjEyOwkJLyogYml0cyA0LTE1ICovCi0JCXUzMiBmaWx0ZXJfZnJhZ19lbjoxOwkvKiBiaXQgMyAqLwotCQl1MzIgZmlsdGVyX3VuaV9lbjoxOwkvKiBiaXQgMiAqLwotCQl1MzIgZmlsdGVyX211bHRpX2VuOjE7CS8qIGJpdCAxICovCi0JCXUzMiBmaWx0ZXJfYnJvYWRfZW46MTsJLyogYml0IDAgKi8KLSNlbHNlCi0JCXUzMiBmaWx0ZXJfYnJvYWRfZW46MTsJLyogYml0IDAgKi8KLQkJdTMyIGZpbHRlcl9tdWx0aV9lbjoxOwkvKiBiaXQgMSAqLwotCQl1MzIgZmlsdGVyX3VuaV9lbjoxOwkvKiBiaXQgMiAqLwotCQl1MzIgZmlsdGVyX2ZyYWdfZW46MTsJLyogYml0IDMgKi8KLQkJdTMyIHVudXNlZDE6MTI7CQkvKiBiaXRzIDQtMTUgKi8KLQkJdTMyIG1pbl9wa3Rfc2l6ZTo3OwkvKiBiaXRzIDE2LTIyICovCi0JCXUzMiB1bnVzZWQyOjk7CQkvKiBiaXRzIDIzLTMxICovCi0jZW5kaWYKLQl9IGJpdHM7Ci19IFJYTUFDX1BGX0NUUkxfdCwgKlBSWE1BQ19QRl9DVFJMX3Q7CiAKIC8qCiAgKiBzdHJ1Y3R1cmUgZm9yIE1lbW9yeSBDb250cm9sbGVyIEludGVyZmFjZSBDb250cm9sIE1heCBTZWdtZW50IHJlZyBpbiByeG1hYwogICogYWRkcmVzcyBtYXAuICBMb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDg4CisgKgorICogMzEtMTA6IHJlc2VydmVkCisgKiA5LTI6IG1heF9zaXplCisgKiAxOiBmY19lbgorICogMDogc2VnX2VuCiAgKi8KLXR5cGVkZWYgdW5pb24gX1JYTUFDX01DSUZfQ1RSTF9NQVhfU0VHX3QgewotCXUzMiB2YWx1ZTsKLQlzdHJ1Y3QgewotI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKLQkJdTMyIHJlc2VydmVkOjIyOwkvKiBiaXRzIDEwLTMxICovCi0JCXUzMiBtYXhfc2l6ZTo4OwkvKiBiaXRzIDItOSAqLwotCQl1MzIgZmNfZW46MTsJLyogYml0IDEgKi8KLQkJdTMyIHNlZ19lbjoxOwkvKiBiaXQgMCAqLwotI2Vsc2UKLQkJdTMyIHNlZ19lbjoxOwkvKiBiaXQgMCAqLwotCQl1MzIgZmNfZW46MTsJLyogYml0IDEgKi8KLQkJdTMyIG1heF9zaXplOjg7CS8qIGJpdHMgMi05ICovCi0JCXUzMiByZXNlcnZlZDoyMjsJLyogYml0cyAxMC0zMSAqLwotI2VuZGlmCi0JfSBiaXRzOwotfSBSWE1BQ19NQ0lGX0NUUkxfTUFYX1NFR190LCAqUFJYTUFDX01DSUZfQ1RSTF9NQVhfU0VHX3Q7CiAKIC8qCiAgKiBzdHJ1Y3R1cmUgZm9yIE1lbW9yeSBDb250cm9sbGVyIEludGVyZmFjZSBXYXRlciBNYXJrIHJlZyBpbiByeG1hYyBhZGRyZXNzCiAgKiBtYXAuICBMb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDhDCisgKgorICogMzEtMjY6IHVudXNlZAorICogMjUtMTY6IG1hcmtfaGkKKyAqIDE1LTEwOiB1bnVzZWQKKyAqIDktMDogbWFya19sbwogICovCi10eXBlZGVmIHVuaW9uIF9SWE1BQ19NQ0lGX1dBVEVSX01BUktfdCB7Ci0JdTMyIHZhbHVlOwotCXN0cnVjdCB7Ci0jaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAotCQl1MzIgcmVzZXJ2ZWQyOjY7CS8qIGJpdHMgMjYtMzEgKi8KLQkJdTMyIG1hcmtfaGk6MTA7CS8qIGJpdHMgMTYtMjUgKi8KLQkJdTMyIHJlc2VydmVkMTo2OwkvKiBiaXRzIDEwLTE1ICovCi0JCXUzMiBtYXJrX2xvOjEwOwkvKiBiaXRzIDAtOSAqLwotI2Vsc2UKLQkJdTMyIG1hcmtfbG86MTA7CS8qIGJpdHMgMC05ICovCi0JCXUzMiByZXNlcnZlZDE6NjsJLyogYml0cyAxMC0xNSAqLwotCQl1MzIgbWFya19oaToxMDsJLyogYml0cyAxNi0yNSAqLwotCQl1MzIgcmVzZXJ2ZWQyOjY7CS8qIGJpdHMgMjYtMzEgKi8KLSNlbmRpZgotCX0gYml0czsKLX0gUlhNQUNfTUNJRl9XQVRFUl9NQVJLX3QsICpQUlhNQUNfTUNJRl9XQVRFUl9NQVJLX3Q7CiAKIC8qCiAgKiBzdHJ1Y3R1cmUgZm9yIFJ4IFF1ZXVlIERpYWxvZyByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAuCiAgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDkwCisgKgorICogMzEtMjY6IHJlc2VydmVkCisgKiAyNS0xNjogcmRfcHRyCisgKiAxNS0xMDogcmVzZXJ2ZWQKKyAqIDktMDogd3JfcHRyCiAgKi8KLXR5cGVkZWYgdW5pb24gX1JYTUFDX1JYUV9ESUFHX3QgewotCXUzMiB2YWx1ZTsKLQlzdHJ1Y3QgewotI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKLQkJdTMyIHJlc2VydmVkMjo2OwkvKiBiaXRzIDI2LTMxICovCi0JCXUzMiByZF9wdHI6MTA7CS8qIGJpdHMgMTYtMjUgKi8KLQkJdTMyIHJlc2VydmVkMTo2OwkvKiBiaXRzIDEwLTE1ICovCi0JCXUzMiB3cl9wdHI6MTA7CS8qIGJpdHMgMC05ICovCi0jZWxzZQotCQl1MzIgd3JfcHRyOjEwOwkvKiBiaXRzIDAtOSAqLwotCQl1MzIgcmVzZXJ2ZWQxOjY7CS8qIGJpdHMgMTAtMTUgKi8KLQkJdTMyIHJkX3B0cjoxMDsJLyogYml0cyAxNi0yNSAqLwotCQl1MzIgcmVzZXJ2ZWQyOjY7CS8qIGJpdHMgMjYtMzEgKi8KLSNlbmRpZgotCX0gYml0czsKLX0gUlhNQUNfUlhRX0RJQUdfdCwgKlBSWE1BQ19SWFFfRElBR190OwogCiAvKgogICogc3RydWN0dXJlIGZvciBzcGFjZSBhdmFpbGlhYmxlIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcC4KICAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwOTQKKyAqCisgKiAzMS0xNzogcmVzZXJ2ZWQKKyAqIDE2OiBzcGFjZV9hdmFpbF9lbgorICogMTUtMTA6IHJlc2VydmVkCisgKiA5LTA6IHNwYWNlX2F2YWlsCiAgKi8KLXR5cGVkZWYgdW5pb24gX1JYTUFDX1NQQUNFX0FWQUlMX3QgewotCXUzMiB2YWx1ZTsKLQlzdHJ1Y3QgewotI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKLQkJdTMyIHJlc2VydmVkMjoxNTsJCS8qIGJpdHMgMTctMzEgKi8KLQkJdTMyIHNwYWNlX2F2YWlsX2VuOjE7CS8qIGJpdCAxNiAqLwotCQl1MzIgcmVzZXJ2ZWQxOjY7CQkvKiBiaXRzIDEwLTE1ICovCi0JCXUzMiBzcGFjZV9hdmFpbDoxMDsJLyogYml0cyAwLTkgKi8KLSNlbHNlCi0JCXUzMiBzcGFjZV9hdmFpbDoxMDsJLyogYml0cyAwLTkgKi8KLQkJdTMyIHJlc2VydmVkMTo2OwkJLyogYml0cyAxMC0xNSAqLwotCQl1MzIgc3BhY2VfYXZhaWxfZW46MTsJLyogYml0IDE2ICovCi0JCXUzMiByZXNlcnZlZDI6MTU7CQkvKiBiaXRzIDE3LTMxICovCi0jZW5kaWYKLQl9IGJpdHM7Ci19IFJYTUFDX1NQQUNFX0FWQUlMX3QsICpQUlhNQUNfU1BBQ0VfQVZBSUxfdDsKIAogLyoKICAqIHN0cnVjdHVyZSBmb3IgbWFuYWdlbWVudCBpbnRlcmZhY2UgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwLgogICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDA5OAorICoKKyAqIDMxLTE4OiByZXNlcnZlZAorICogMTc6IGRyb3BfcGt0X2VuCisgKiAxNi0wOiBkcm9wX3BrdF9tYXNrCiAgKi8KLXR5cGVkZWYgdW5pb24gX1JYTUFDX01JRl9DVExfdCB7Ci0JdTMyIHZhbHVlOwotCXN0cnVjdCB7Ci0jaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAotCQl1MzIgcmVzZXJ2ZToxNDsJCS8qIGJpdHMgMTgtMzEgKi8KLQkJdTMyIGRyb3BfcGt0X2VuOjE7CQkvKiBiaXQgMTcgKi8KLQkJdTMyIGRyb3BfcGt0X21hc2s6MTc7CS8qIGJpdHMgMC0xNiAqLwotI2Vsc2UKLQkJdTMyIGRyb3BfcGt0X21hc2s6MTc7CS8qIGJpdHMgMC0xNiAqLwotCQl1MzIgZHJvcF9wa3RfZW46MTsJCS8qIGJpdCAxNyAqLwotCQl1MzIgcmVzZXJ2ZToxNDsJCS8qIGJpdHMgMTgtMzEgKi8KLSNlbmRpZgotCX0gYml0czsKLX0gUlhNQUNfTUlGX0NUTF90LCAqUFJYTUFDX01JRl9DVExfdDsKIAogLyoKICAqIHN0cnVjdHVyZSBmb3IgRXJyb3IgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwLgogICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDA5QworICoKKyAqIDMxLTQ6IHVudXNlZAorICogMzogbWlmCisgKiAyOiBhc3luYworICogMTogcGt0X2ZpbHRlcgorICogMDogbWNpZgogICovCi10eXBlZGVmIHVuaW9uIF9SWE1BQ19FUlJPUl9SRUdfdCB7Ci0JdTMyIHZhbHVlOwotCXN0cnVjdCB7Ci0jaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAotCQl1MzIgcmVzZXJ2ZToyODsJLyogYml0cyA0LTMxICovCi0JCXUzMiBtaWY6MTsJCS8qIGJpdCAzICovCi0JCXUzMiBhc3luYzoxOwkvKiBiaXQgMiAqLwotCQl1MzIgcGt0X2ZpbHRlcjoxOwkvKiBiaXQgMSAqLwotCQl1MzIgbWNpZjoxOwkvKiBiaXQgMCAqLwotI2Vsc2UKLQkJdTMyIG1jaWY6MTsJLyogYml0IDAgKi8KLQkJdTMyIHBrdF9maWx0ZXI6MTsJLyogYml0IDEgKi8KLQkJdTMyIGFzeW5jOjE7CS8qIGJpdCAyICovCi0JCXUzMiBtaWY6MTsJCS8qIGJpdCAzICovCi0JCXUzMiByZXNlcnZlOjI4OwkvKiBiaXRzIDQtMzEgKi8KLSNlbmRpZgotCX0gYml0czsKLX0gUlhNQUNfRVJST1JfUkVHX3QsICpQUlhNQUNfRVJST1JfUkVHX3Q7CiAKIC8qCiAgKiBSeCBNQUMgTW9kdWxlIG9mIEpBR0NvcmUgQWRkcmVzcyBNYXBwaW5nCiAgKi8KIHR5cGVkZWYgc3RydWN0IF9SWE1BQ190IHsJCQkJLyogTG9jYXRpb246ICovCi0JUlhNQUNfQ1RSTF90IGN0cmw7CQkJCS8qICAweDQwMDAgKi8KLQlSWE1BQ19XT0xfQ1RMX0NSQzBfdCBjcmMwOwkJCS8qICAweDQwMDQgKi8KLQlSWE1BQ19XT0xfQ1JDMTJfdCBjcmMxMjsJCQkvKiAgMHg0MDA4ICovCi0JUlhNQUNfV09MX0NSQzM0X3QgY3JjMzQ7CQkJLyogIDB4NDAwQyAqLworCXUzMiBjdHJsOwkJCQkJLyogIDB4NDAwMCAqLworCXUzMiBjcmMwOwkJCQkJLyogIDB4NDAwNCAqLworCXUzMiBjcmMxMjsJCQkJCS8qICAweDQwMDggKi8KKwl1MzIgY3JjMzQ7CQkJCQkvKiAgMHg0MDBDICovCiAJUlhNQUNfV09MX1NBX0xPX3Qgc2FfbG87CQkJLyogIDB4NDAxMCAqLwogCVJYTUFDX1dPTF9TQV9ISV90IHNhX2hpOwkJCS8qICAweDQwMTQgKi8KIAl1MzIgbWFzazBfd29yZDA7CQkJCS8qICAweDQwMTggKi8KQEAgLTExNTMsMTcgKzkyMiwxNyBAQAogCXUzMiBtdWx0aV9oYXNoMjsJCQkJLyogIDB4NDA3OCAqLwogCXUzMiBtdWx0aV9oYXNoMzsJCQkJLyogIDB4NDA3QyAqLwogCXUzMiBtdWx0aV9oYXNoNDsJCQkJLyogIDB4NDA4MCAqLwotCVJYTUFDX1BGX0NUUkxfdCBwZl9jdHJsOwkJCS8qICAweDQwODQgKi8KLQlSWE1BQ19NQ0lGX0NUUkxfTUFYX1NFR190IG1jaWZfY3RybF9tYXhfc2VnOwkvKiAgMHg0MDg4ICovCi0JUlhNQUNfTUNJRl9XQVRFUl9NQVJLX3QgbWNpZl93YXRlcl9tYXJrOwkvKiAgMHg0MDhDICovCi0JUlhNQUNfUlhRX0RJQUdfdCByeHFfZGlhZzsJCQkvKiAgMHg0MDkwICovCi0JUlhNQUNfU1BBQ0VfQVZBSUxfdCBzcGFjZV9hdmFpbDsJCS8qICAweDQwOTQgKi8KKwl1MzIgcGZfY3RybDsJCQkJCS8qICAweDQwODQgKi8KKwl1MzIgbWNpZl9jdHJsX21heF9zZWc7CQkJCS8qICAweDQwODggKi8KKwl1MzIgbWNpZl93YXRlcl9tYXJrOwkJCQkvKiAgMHg0MDhDICovCisJdTMyIHJ4cV9kaWFnOwkJCQkJLyogIDB4NDA5MCAqLworCXUzMiBzcGFjZV9hdmFpbDsJCQkJLyogIDB4NDA5NCAqLwogCi0JUlhNQUNfTUlGX0NUTF90IG1pZl9jdHJsOwkJCS8qICAweDQwOTggKi8KLQlSWE1BQ19FUlJPUl9SRUdfdCBlcnJfcmVnOwkJCS8qICAweDQwOUMgKi8KKwl1MzIgbWlmX2N0cmw7CQkJCQkvKiAgMHg0MDk4ICovCisJdTMyIGVycl9yZWc7CQkJCQkvKiAgMHg0MDlDICovCiB9IFJYTUFDX3QsICpQUlhNQUNfdDsKIAotLyogRU5EIE9GIFRYTUFDIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCisvKiBFTkQgT0YgUlhNQUMgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KIAogCiAvKiBTVEFSVCBPRiBNQUMgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KQEAgLTEzMzcsMzcgKzExMDYsMTkgQEAKIC8qCiAgKiBzdHJ1Y3R1cmUgZm9yIEludGVyZmFjZSBTdGF0dXMgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KICAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwM0MKKyAqCisgKiAzMS0xMDogcmVzZXJ2ZWQKKyAqIDk6IGV4Y2Vzc19kZWZlcgorICogODogY2xhc2gKKyAqIDc6IHBoeV9qYWJiZXIKKyAqIDY6IHBoeV9saW5rX29rCisgKiA1OiBwaHlfZnVsbF9kdXBsZXgKKyAqIDQ6IHBoeV9zcGVlZAorICogMzogcGUxMDB4X2xpbmtfZmFpbAorICogMjogcGUxMHRfbG9zc19jYXJyaWVyCisgKiAxOiBwZTEwdF9zcWVfZXJyb3IKKyAqIDA6IHBlMTB0X2phYmJlcgogICovCi10eXBlZGVmIHVuaW9uIF9NQUNfSUZfU1RBVF90IHsKLQl1MzIgdmFsdWU7Ci0Jc3RydWN0IHsKLSNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCi0JCXUzMiByZXNlcnZlZDoyMjsJCS8qIGJpdHMgMTAtMzEgKi8KLQkJdTMyIGV4Y2Vzc19kZWZlcjoxOwkvKiBiaXQgOSAqLwotCQl1MzIgY2xhc2g6MTsJCS8qIGJpdCA4ICovCi0JCXUzMiBwaHlfamFiYmVyOjE7CQkvKiBiaXQgNyAqLwotCQl1MzIgcGh5X2xpbmtfb2s6MTsJCS8qIGJpdCA2ICovCi0JCXUzMiBwaHlfZnVsbF9kdXBsZXg6MTsJLyogYml0IDUgKi8KLQkJdTMyIHBoeV9zcGVlZDoxOwkJLyogYml0IDQgKi8KLQkJdTMyIHBlMTAweF9saW5rX2ZhaWw6MTsJLyogYml0IDMgKi8KLQkJdTMyIHBlMTB0X2xvc3NfY2FycmllOjE7CS8qIGJpdCAyICovCi0JCXUzMiBwZTEwdF9zcWVfZXJyb3I6MTsJLyogYml0IDEgKi8KLQkJdTMyIHBlMTB0X2phYmJlcjoxOwkvKiBiaXQgMCAqLwotI2Vsc2UKLQkJdTMyIHBlMTB0X2phYmJlcjoxOwkvKiBiaXQgMCAqLwotCQl1MzIgcGUxMHRfc3FlX2Vycm9yOjE7CS8qIGJpdCAxICovCi0JCXUzMiBwZTEwdF9sb3NzX2NhcnJpZToxOwkvKiBiaXQgMiAqLwotCQl1MzIgcGUxMDB4X2xpbmtfZmFpbDoxOwkvKiBiaXQgMyAqLwotCQl1MzIgcGh5X3NwZWVkOjE7CQkvKiBiaXQgNCAqLwotCQl1MzIgcGh5X2Z1bGxfZHVwbGV4OjE7CS8qIGJpdCA1ICovCi0JCXUzMiBwaHlfbGlua19vazoxOwkJLyogYml0IDYgKi8KLQkJdTMyIHBoeV9qYWJiZXI6MTsJCS8qIGJpdCA3ICovCi0JCXUzMiBjbGFzaDoxOwkJLyogYml0IDggKi8KLQkJdTMyIGV4Y2Vzc19kZWZlcjoxOwkvKiBiaXQgOSAqLwotCQl1MzIgcmVzZXJ2ZWQ6MjI7CQkvKiBiaXRzIDEwLTMxICovCi0jZW5kaWYKLQl9IGJpdHM7Ci19IE1BQ19JRl9TVEFUX3QsICpQTUFDX0lGX1NUQVRfdDsKIAogLyoKICAqIHN0cnVjdHVyZSBmb3IgTWFjIFN0YXRpb24gQWRkcmVzcywgUGFydCAxIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCkBAIC0xNDI4LDcgKzExNzksNyBAQAogCXUzMiBtaWlfbWdtdF9zdGF0OwkJCQkvKiAgMHg1MDMwICovCiAJdTMyIG1paV9tZ210X2luZGljYXRvcjsJCQkJLyogIDB4NTAzNCAqLwogCXUzMiBpZl9jdHJsOwkJCQkJLyogIDB4NTAzOCAqLwotCU1BQ19JRl9TVEFUX3QgaWZfc3RhdDsJCQkJLyogIDB4NTAzQyAqLworCXUzMiBpZl9zdGF0OwkJCQkJLyogIDB4NTAzQyAqLwogCU1BQ19TVEFUSU9OX0FERFIxX3Qgc3RhdGlvbl9hZGRyXzE7CQkvKiAgMHg1MDQwICovCiAJTUFDX1NUQVRJT05fQUREUjJfdCBzdGF0aW9uX2FkZHJfMjsJCS8qICAweDUwNDQgKi8KIH0gTUFDX3QsICpQTUFDX3Q7CkBAIC0xNDk4LDggKzEyNDksOSBAQAogLyoKICAqIE1BQyBTVEFUUyBNb2R1bGUgb2YgSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKICAqLwotdHlwZWRlZiBzdHJ1Y3QgX01BQ19TVEFUX3QgewkJLyogTG9jYXRpb246ICovCi0JdTMyIHBhZFszMl07CQkvKiAgMHg2MDAwIC0gNjA3QyAqLworc3RydWN0IG1hY3N0YXRfcmVncworewkJCQkJLyogTG9jYXRpb246ICovCisJdTMyIHBhZFszMl07CQkJLyogIDB4NjAwMCAtIDYwN0MgKi8KIAogCS8qIFR4L1J4IDAtNjQgQnl0ZSBGcmFtZSBDb3VudGVyICovCiAJdTMyIFRSNjQ7CQkJLyogIDB4NjA4MCAqLwpAQCAtMTY0NCw3ICsxMzk2LDcgQEAKIAogCS8qIENhcnJ5IFJlZ2lzdGVyIFR3byBNYXNrIFJlZ2lzdGVyICovCiAJdTMyIENhcnJ5Mk07CQkJLyogIDB4NjEzQyAqLwotfSBNQUNfU1RBVF90LCAqUE1BQ19TVEFUX3Q7Cit9OwogCiAvKiBFTkQgT0YgTUFDIFNUQVQgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KIApAQCAtMTY4Miw3MCArMTQzNCw0OSBAQAogLyoKICAqIE1lbW9yeSBDb250cm9sIE1vZHVsZSBvZiBKQUdDb3JlIEFkZHJlc3MgTWFwcGluZwogICovCi10eXBlZGVmIHN0cnVjdCBfTU1DX3QgewkJCS8qIExvY2F0aW9uOiAqLworc3RydWN0IG1tY19yZWdzIHsJCS8qIExvY2F0aW9uOiAqLwogCXUzMiBtbWNfY3RybDsJCS8qICAweDcwMDAgKi8KIAl1MzIgc3JhbV9hY2Nlc3M7CS8qICAweDcwMDQgKi8KIAl1MzIgc3JhbV93b3JkMTsJCS8qICAweDcwMDggKi8KIAl1MzIgc3JhbV93b3JkMjsJCS8qICAweDcwMEMgKi8KIAl1MzIgc3JhbV93b3JkMzsJCS8qICAweDcwMTAgKi8KIAl1MzIgc3JhbV93b3JkNDsJCS8qICAweDcwMTQgKi8KLX0gTU1DX3QsICpQTU1DX3Q7Cit9OwogCiAvKiBFTkQgT0YgTU1DIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCiAKIAotLyogU1RBUlQgT0YgRVhQIFJPTSBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLwotCi0vKgotICogRXhwYW5zaW9uIFJPTSBNb2R1bGUgb2YgSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKLSAqLwotCi0vKiBUYWtlIHRoaXMgb3V0IHVudGlsIGl0IGlzIG5vdCBlbXB0eSAqLwotI2lmIDAKLXR5cGVkZWYgc3RydWN0IF9FWFBfUk9NX3QgewotCi19IEVYUF9ST01fdCwgKlBFWFBfUk9NX3Q7Ci0jZW5kaWYKLQotLyogRU5EIE9GIEVYUCBST00gUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KLQotCiAvKgogICogSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKICAqLwogdHlwZWRlZiBzdHJ1Y3QgX0FERFJFU1NfTUFQX3QgewotCUdMT0JBTF90IGdsb2JhbDsKKwlzdHJ1Y3QgZ2xvYmFsX3JlZ3MgZ2xvYmFsOwogCS8qIHVudXNlZCBzZWN0aW9uIG9mIGdsb2JhbCBhZGRyZXNzIG1hcCAqLwotCXU4IHVudXNlZF9nbG9iYWxbNDA5NiAtIHNpemVvZihHTE9CQUxfdCldOwotCVRYRE1BX3QgdHhkbWE7CisJdTggdW51c2VkX2dsb2JhbFs0MDk2IC0gc2l6ZW9mKHN0cnVjdCBnbG9iYWxfcmVncyldOworCXN0cnVjdCB0eGRtYV9yZWdzIHR4ZG1hOwogCS8qIHVudXNlZCBzZWN0aW9uIG9mIHR4ZG1hIGFkZHJlc3MgbWFwICovCi0JdTggdW51c2VkX3R4ZG1hWzQwOTYgLSBzaXplb2YoVFhETUFfdCldOwotCVJYRE1BX3QgcnhkbWE7CisJdTggdW51c2VkX3R4ZG1hWzQwOTYgLSBzaXplb2Yoc3RydWN0IHR4ZG1hX3JlZ3MpXTsKKwlzdHJ1Y3QgcnhkbWFfcmVncyByeGRtYTsKIAkvKiB1bnVzZWQgc2VjdGlvbiBvZiByeGRtYSBhZGRyZXNzIG1hcCAqLwotCXU4IHVudXNlZF9yeGRtYVs0MDk2IC0gc2l6ZW9mKFJYRE1BX3QpXTsKLQlUWE1BQ190IHR4bWFjOworCXU4IHVudXNlZF9yeGRtYVs0MDk2IC0gc2l6ZW9mKHN0cnVjdCByeGRtYV9yZWdzKV07CisJc3RydWN0IHR4bWFjX3JlZ3MgdHhtYWM7CiAJLyogdW51c2VkIHNlY3Rpb24gb2YgdHhtYWMgYWRkcmVzcyBtYXAgKi8KLQl1OCB1bnVzZWRfdHhtYWNbNDA5NiAtIHNpemVvZihUWE1BQ190KV07CisJdTggdW51c2VkX3R4bWFjWzQwOTYgLSBzaXplb2Yoc3RydWN0IHR4bWFjX3JlZ3MpXTsKIAlSWE1BQ190IHJ4bWFjOwogCS8qIHVudXNlZCBzZWN0aW9uIG9mIHJ4bWFjIGFkZHJlc3MgbWFwICovCiAJdTggdW51c2VkX3J4bWFjWzQwOTYgLSBzaXplb2YoUlhNQUNfdCldOwogCU1BQ190IG1hYzsKIAkvKiB1bnVzZWQgc2VjdGlvbiBvZiBtYWMgYWRkcmVzcyBtYXAgKi8KIAl1OCB1bnVzZWRfbWFjWzQwOTYgLSBzaXplb2YoTUFDX3QpXTsKLQlNQUNfU1RBVF90IG1hY1N0YXQ7CisJc3RydWN0IG1hY3N0YXRfcmVncyBtYWNzdGF0OwogCS8qIHVudXNlZCBzZWN0aW9uIG9mIG1hYyBzdGF0IGFkZHJlc3MgbWFwICovCi0JdTggdW51c2VkX21hY19zdGF0WzQwOTYgLSBzaXplb2YoTUFDX1NUQVRfdCldOwotCU1NQ190IG1tYzsKKwl1OCB1bnVzZWRfbWFjX3N0YXRbNDA5NiAtIHNpemVvZihzdHJ1Y3QgbWFjc3RhdF9yZWdzKV07CisJc3RydWN0IG1tY19yZWdzIG1tYzsKIAkvKiB1bnVzZWQgc2VjdGlvbiBvZiBtbWMgYWRkcmVzcyBtYXAgKi8KLQl1OCB1bnVzZWRfbW1jWzQwOTYgLSBzaXplb2YoTU1DX3QpXTsKKwl1OCB1bnVzZWRfbW1jWzQwOTYgLSBzaXplb2Yoc3RydWN0IG1tY19yZWdzKV07CiAJLyogdW51c2VkIHNlY3Rpb24gb2YgYWRkcmVzcyBtYXAgKi8KIAl1OCB1bnVzZWRfWzEwMTU4MDhdOwogCi0vKiBUYWtlIHRoaXMgb3V0IHVudGlsIGl0IGlzIG5vdCBlbXB0eSAqLwotI2lmIDAKLQlFWFBfUk9NX3QgZXhwX3JvbTsKLSNlbmRpZgotCiAJdTggdW51c2VkX2V4cF9yb21bNDA5Nl07CS8qIE1HUy1zaXplIFRCRCAqLwogCXU4IHVudXNlZF9fWzUyNDI4OF07CS8qIHVudXNlZCBzZWN0aW9uIG9mIGFkZHJlc3MgbWFwICovCiB9IEFERFJFU1NfTUFQX3QsICpQQUREUkVTU19NQVBfdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2VlcHJvbS5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfZWVwcm9tLmMKaW5kZXggYmNjYTFmOC4uM2NhMjUzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfZWVwcm9tLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfZWVwcm9tLmMKQEAgLTg0LDE3ICs4NCw0MiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogCiAjaW5jbHVkZSAiZXQxMzEwX3BoeS5oIgotI2luY2x1ZGUgImV0MTMxMF9wbS5oIgotI2luY2x1ZGUgImV0MTMxMF9qYWdjb3JlLmgiCi0jaW5jbHVkZSAiZXQxMzEwX2VlcHJvbS5oIgotCiAjaW5jbHVkZSAiZXQxMzF4X2FkYXB0ZXIuaCIKLSNpbmNsdWRlICJldDEzMXhfaW5pdHBjaS5oIgotI2luY2x1ZGUgImV0MTMxeF9pc3IuaCIKKyNpbmNsdWRlICJldDEzMXguaCIKIAotI2luY2x1ZGUgImV0MTMxMF90eC5oIgorLyoKKyAqIEVFUFJPTSBEZWZpbmVzCisgKi8KIAorLyogTEJDSUYgUmVnaXN0ZXIgR3JvdXBzIChhZGRyZXNzZWQgdmlhIDMyLWJpdCBvZmZzZXRzKSAqLworI2RlZmluZSBMQkNJRl9EV09SRDBfR1JPVVAgICAgICAgMHhBQworI2RlZmluZSBMQkNJRl9EV09SRDFfR1JPVVAgICAgICAgMHhCMAogCisvKiBMQkNJRiBSZWdpc3RlcnMgKGFkZHJlc3NlZCB2aWEgOC1iaXQgb2Zmc2V0cykgKi8KKyNkZWZpbmUgTEJDSUZfQUREUkVTU19SRUdJU1RFUiAgIDB4QUMKKyNkZWZpbmUgTEJDSUZfREFUQV9SRUdJU1RFUiAgICAgIDB4QjAKKyNkZWZpbmUgTEJDSUZfQ09OVFJPTF9SRUdJU1RFUiAgIDB4QjEKKyNkZWZpbmUgTEJDSUZfU1RBVFVTX1JFR0lTVEVSICAgIDB4QjIKKworLyogTEJDSUYgQ29udHJvbCBSZWdpc3RlciBCaXRzICovCisjZGVmaW5lIExCQ0lGX0NPTlRST0xfU0VRVUVOVElBTF9SRUFEICAgMHgwMQorI2RlZmluZSBMQkNJRl9DT05UUk9MX1BBR0VfV1JJVEUgICAgICAgIDB4MDIKKyNkZWZpbmUgTEJDSUZfQ09OVFJPTF9FRVBST01fUkVMT0FEICAgICAweDA4CisjZGVmaW5lIExCQ0lGX0NPTlRST0xfVFdPX0JZVEVfQUREUiAgICAgMHgyMAorI2RlZmluZSBMQkNJRl9DT05UUk9MX0kyQ19XUklURSAgICAgICAgIDB4NDAKKyNkZWZpbmUgTEJDSUZfQ09OVFJPTF9MQkNJRl9FTkFCTEUgICAgICAweDgwCisKKy8qIExCQ0lGIFN0YXR1cyBSZWdpc3RlciBCaXRzICovCisjZGVmaW5lIExCQ0lGX1NUQVRVU19QSFlfUVVFVUVfQVZBSUwgICAgMHgwMQorI2RlZmluZSBMQkNJRl9TVEFUVVNfSTJDX0lETEUgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgTEJDSUZfU1RBVFVTX0FDS19FUlJPUiAgICAgICAgICAweDA0CisjZGVmaW5lIExCQ0lGX1NUQVRVU19HRU5FUkFMX0VSUk9SICAgICAgMHgwOAorI2RlZmluZSBMQkNJRl9TVEFUVVNfQ0hFQ0tTVU1fRVJST1IgICAgIDB4NDAKKyNkZWZpbmUgTEJDSUZfU1RBVFVTX0VFUFJPTV9QUkVTRU5UICAgICAweDgwCisKKy8qIE1pc2NlbGxhbmVvdXMgQ29uc3RyYWludHMgKi8KKyNkZWZpbmUgTUFYX05VTV9SRUdJU1RFUl9QT0xMUyAgICAgICAgICAxMDAwCisjZGVmaW5lIE1BWF9OVU1fV1JJVEVfUkVUUklFUyAgICAgICAgICAgMgogCiBzdGF0aWMgaW50IGVlcHJvbV93YWl0X3JlYWR5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgKnN0YXR1cykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2VlcHJvbS5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfZWVwcm9tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNmM2YTYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfZWVwcm9tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoKLSAqIEFnZXJlIFN5c3RlbXMgSW5jLgotICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCi0gKgotICogQ29weXJpZ2h0IMKpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogZXQxMzEwX2VlcHJvbS5oIC0gRGVmaW5lcywgc3RydWN0cywgZW51bXMsIHByb3RvdHlwZXMsIGV0Yy4gdXNlZCBmb3IgRUVQUk9NCi0gKiAgICAgICAgICAgICAgICAgICBhY2Nlc3Mgcm91dGluZXMKLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIFNPRlRXQVJFIExJQ0VOU0UKLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKLSAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKLSAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KLSAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KLSAqCi0gKiBDb3B5cmlnaHQgwqkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwotICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKLSAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogRGlzY2xhaW1lcgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAotICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQotICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KLSAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICi0gKiBEQU1BR0UuCi0gKgotICovCi0KLSNpZm5kZWYgX19FVDEzMTBfRUVQUk9NX0hfXwotI2RlZmluZSBfX0VUMTMxMF9FRVBST01fSF9fCi0KLSNpbmNsdWRlICJldDEzMTBfYWRkcmVzc19tYXAuaCIKLQotLyoKLSAqIEVFUFJPTSBEZWZpbmVzCi0gKi8KLQotLyogTEJDSUYgUmVnaXN0ZXIgR3JvdXBzIChhZGRyZXNzZWQgdmlhIDMyLWJpdCBvZmZzZXRzKSAqLwotI2RlZmluZSBMQkNJRl9EV09SRDBfR1JPVVAgICAgICAgMHhBQwotI2RlZmluZSBMQkNJRl9EV09SRDFfR1JPVVAgICAgICAgMHhCMAotCi0vKiBMQkNJRiBSZWdpc3RlcnMgKGFkZHJlc3NlZCB2aWEgOC1iaXQgb2Zmc2V0cykgKi8KLSNkZWZpbmUgTEJDSUZfQUREUkVTU19SRUdJU1RFUiAgIDB4QUMKLSNkZWZpbmUgTEJDSUZfREFUQV9SRUdJU1RFUiAgICAgIDB4QjAKLSNkZWZpbmUgTEJDSUZfQ09OVFJPTF9SRUdJU1RFUiAgIDB4QjEKLSNkZWZpbmUgTEJDSUZfU1RBVFVTX1JFR0lTVEVSICAgIDB4QjIKLQotLyogTEJDSUYgQ29udHJvbCBSZWdpc3RlciBCaXRzICovCi0jZGVmaW5lIExCQ0lGX0NPTlRST0xfU0VRVUVOVElBTF9SRUFEICAgMHgwMQotI2RlZmluZSBMQkNJRl9DT05UUk9MX1BBR0VfV1JJVEUgICAgICAgIDB4MDIKLSNkZWZpbmUgTEJDSUZfQ09OVFJPTF9FRVBST01fUkVMT0FEICAgICAweDA4Ci0jZGVmaW5lIExCQ0lGX0NPTlRST0xfVFdPX0JZVEVfQUREUiAgICAgMHgyMAotI2RlZmluZSBMQkNJRl9DT05UUk9MX0kyQ19XUklURSAgICAgICAgIDB4NDAKLSNkZWZpbmUgTEJDSUZfQ09OVFJPTF9MQkNJRl9FTkFCTEUgICAgICAweDgwCi0KLS8qIExCQ0lGIFN0YXR1cyBSZWdpc3RlciBCaXRzICovCi0jZGVmaW5lIExCQ0lGX1NUQVRVU19QSFlfUVVFVUVfQVZBSUwgICAgMHgwMQotI2RlZmluZSBMQkNJRl9TVEFUVVNfSTJDX0lETEUgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgTEJDSUZfU1RBVFVTX0FDS19FUlJPUiAgICAgICAgICAweDA0Ci0jZGVmaW5lIExCQ0lGX1NUQVRVU19HRU5FUkFMX0VSUk9SICAgICAgMHgwOAotI2RlZmluZSBMQkNJRl9TVEFUVVNfQ0hFQ0tTVU1fRVJST1IgICAgIDB4NDAKLSNkZWZpbmUgTEJDSUZfU1RBVFVTX0VFUFJPTV9QUkVTRU5UICAgICAweDgwCi0KLS8qIE1pc2NlbGxhbmVvdXMgQ29uc3RyYWludHMgKi8KLSNkZWZpbmUgTUFYX05VTV9SRUdJU1RFUl9QT0xMUyAgICAgICAgICAxMDAwCi0jZGVmaW5lIE1BWF9OVU1fV1JJVEVfUkVUUklFUyAgICAgICAgICAgMgotCi0vKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlICovCi1zdHJ1Y3QgZXQxMzF4X2FkYXB0ZXI7Ci0KLWludCBldDEzMXhfaW5pdF9lZXByb20oc3RydWN0IGV0MTMxeF9hZGFwdGVyICpldGRldik7Ci0KLSNlbmRpZiAvKiBfRVQxMzEwX0VFUFJPTV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfamFnY29yZS5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfamFnY29yZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODA3YTAxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2phZ2NvcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qCi0gKiBBZ2VyZSBTeXN0ZW1zIEluYy4KLSAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcwotICoKLSAqIENvcHlyaWdodCDCqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIGV0MTMxMF9qYWdjb3JlLmggLSBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiBwZXJ0YWluaW5nIHRvCi0gKiAgICAgICAgICAgICAgICAgICAgdGhlIEpBR0NvcmUKLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIFNPRlRXQVJFIExJQ0VOU0UKLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKLSAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKLSAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KLSAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KLSAqCi0gKiBDb3B5cmlnaHQgwqkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwotICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKLSAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogRGlzY2xhaW1lcgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAotICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQotICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KLSAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICi0gKiBEQU1BR0UuCi0gKgotICovCi0KLSNpZm5kZWYgX19FVDEzMTBfSkFHQ09SRV9IX18KLSNkZWZpbmUgX19FVDEzMTBfSkFHQ09SRV9IX18KLQotI2luY2x1ZGUgImV0MTMxMF9hZGRyZXNzX21hcC5oIgotCi0KLSNkZWZpbmUgSU5URVJOQUxfTUVNX1NJWkUgICAgICAgMHg0MDAJLyogMTAyNCBvZiBpbnRlcm5hbCBtZW1vcnkgKi8KLSNkZWZpbmUgSU5URVJOQUxfTUVNX1JYX09GRlNFVCAgMHgxRkYJLyogNTAlICAgVHgsIDUwJSAgIFJ4ICovCi0KLS8qCi0gKiBGb3IgaW50ZXJydXB0cywgbm9ybWFsIHJ1bm5pbmcgaXM6Ci0gKiAgICAgICByeGRtYV94ZnJfZG9uZSwgcGh5X2ludGVycnVwdCwgbWFjX3N0YXRfaW50ZXJydXB0LAotICogICAgICAgd2F0Y2hkb2dfaW50ZXJydXB0ICYgdHhkbWFfeGZlcl9kb25lCi0gKgotICogSW4gYm90aCBjYXNlcywgd2hlbiBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCBmb3IgZWl0aGVyIFR4IG9yIGJpLWRpcmVjdGlvbiwKLSAqIHdlIGFkZGl0aW9uYWwgZW5hYmxlIHJ4X2ZicjBfbG93IGFuZCByeF9mYnIxX2xvdywgc28gd2Uga25vdyB3aGVuIHRoZQotICogYnVmZmVyIHJpbmdzIGFyZSBydW5uaW5nIGxvdy4KLSAqLwotI2RlZmluZSBJTlRfTUFTS19ESVNBQkxFICAgICAgICAgICAgMHhmZmZmZmZmZgotCi0vKiBOT1RFOiBNYXNraW5nIG91dCBNQUNfU1RBVCBJbnRlcnJ1cHQgZm9yIG5vdy4uLgotICogI2RlZmluZSBJTlRfTUFTS19FTkFCTEUgICAgICAgICAgICAgMHhmZmY2YmYxNwotICogI2RlZmluZSBJTlRfTUFTS19FTkFCTEVfTk9fRkxPVyAgICAgMHhmZmY2YmZkNwotICovCi0jZGVmaW5lIElOVF9NQVNLX0VOQUJMRSAgICAgICAgICAgICAweGZmZmViZjE3Ci0jZGVmaW5lIElOVF9NQVNLX0VOQUJMRV9OT19GTE9XICAgICAweGZmZmViZmQ3Ci0KLS8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KLXN0cnVjdCBldDEzMXhfYWRhcHRlcjsKLQotdm9pZCBDb25maWdHbG9iYWxSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpOwotdm9pZCBDb25maWdNTUNSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIpOwotdm9pZCBldDEzMXhfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgZXQxMzF4X2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotCi0jZW5kaWYgLyogX19FVDEzMTBfSkFHQ09SRV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX21hYy5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfbWFjLmMKaW5kZXggYjhhMWYyMC4uYTI5MmIxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfbWFjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfbWFjLmMKQEAgLTg1LDEyICs4NSwxOSBAQAogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAKICNpbmNsdWRlICJldDEzMTBfcGh5LmgiCi0jaW5jbHVkZSAiZXQxMzEwX3BtLmgiCi0jaW5jbHVkZSAiZXQxMzEwX2phZ2NvcmUuaCIKLSNpbmNsdWRlICJldDEzMTBfbWFjLmgiCi0KICNpbmNsdWRlICJldDEzMXhfYWRhcHRlci5oIgotI2luY2x1ZGUgImV0MTMxeF9pbml0cGNpLmgiCisjaW5jbHVkZSAiZXQxMzF4LmgiCisKKworI2RlZmluZSBDT1VOVEVSX1dSQVBfMjhfQklUIDB4MTAwMDAwMDAKKyNkZWZpbmUgQ09VTlRFUl9XUkFQXzIyX0JJVCAweDQwMDAwMAorI2RlZmluZSBDT1VOVEVSX1dSQVBfMTZfQklUIDB4MTAwMDAKKyNkZWZpbmUgQ09VTlRFUl9XUkFQXzEyX0JJVCAweDEwMDAKKworI2RlZmluZSBDT1VOVEVSX01BU0tfMjhfQklUIChDT1VOVEVSX1dSQVBfMjhfQklUIC0gMSkKKyNkZWZpbmUgQ09VTlRFUl9NQVNLXzIyX0JJVCAoQ09VTlRFUl9XUkFQXzIyX0JJVCAtIDEpCisjZGVmaW5lIENPVU5URVJfTUFTS18xNl9CSVQgKENPVU5URVJfV1JBUF8xNl9CSVQgLSAxKQorI2RlZmluZSBDT1VOVEVSX01BU0tfMTJfQklUIChDT1VOVEVSX1dSQVBfMTJfQklUIC0gMSkKIAogLyoqCiAgKiBDb25maWdNYWNSZWdzMSAtIEluaXRpYWxpemUgdGhlIGZpcnN0IHBhcnQgb2YgTUFDIHJlZ3MKQEAgLTE2Myw5ICsxNzAsOSBAQAogCXUzMiBjZmcxOwogCXUzMiBjZmcyOwogCXUzMiBpZmN0cmw7Ci0JVFhNQUNfQ1RMX3QgY3RsOworCXUzMiBjdGw7CiAKLQljdGwudmFsdWUgPSByZWFkbCgmZXRkZXYtPnJlZ3MtPnR4bWFjLmN0bC52YWx1ZSk7CisJY3RsID0gcmVhZGwoJmV0ZGV2LT5yZWdzLT50eG1hYy5jdGwpOwogCWNmZzEgPSByZWFkbCgmcE1hYy0+Y2ZnMSk7CiAJY2ZnMiA9IHJlYWRsKCZwTWFjLT5jZmcyKTsKIAlpZmN0cmwgPSByZWFkbCgmcE1hYy0+aWZfY3RybCk7CkBAIC0yMTksOSArMjI2LDggQEAKIAl9CiAKIAkvKiBFbmFibGUgVFhNQUMgKi8KLQljdGwuYml0cy50eG1hY19lbiA9IDB4MTsKLQljdGwuYml0cy5mY19kaXNhYmxlID0gMHgxOwotCXdyaXRlbChjdGwudmFsdWUsICZldGRldi0+cmVncy0+dHhtYWMuY3RsLnZhbHVlKTsKKwljdGwgfD0gMHgwNTsJLyogVFggbWFjIGVuYWJsZSwgRkMgZGlzYWJsZSAqLworCXdyaXRlbChjdGwsICZldGRldi0+cmVncy0+dHhtYWMuY3RsKTsKIAogCS8qIFJlYWR5IHRvIHN0YXJ0IHRoZSBSWERNQS9UWERNQSBlbmdpbmUgKi8KIAlpZiAoZXRkZXYtPkZsYWdzICYgZk1QX0FEQVBURVJfTE9XRVJfUE9XRVIpIHsKQEAgLTIzNSwxNSArMjQxLDE1IEBACiAJc3RydWN0IF9SWE1BQ190IF9faW9tZW0gKnBSeE1hYyA9ICZldGRldi0+cmVncy0+cnhtYWM7CiAJUlhNQUNfV09MX1NBX0xPX3Qgc2FfbG87CiAJUlhNQUNfV09MX1NBX0hJX3Qgc2FfaGk7Ci0JUlhNQUNfUEZfQ1RSTF90IHBmX2N0cmwgPSB7IDAgfTsKKwl1MzIgcGZfY3RybCA9IDA7CiAKIAkvKiBEaXNhYmxlIHRoZSBNQUMgd2hpbGUgaXQgaXMgYmVpbmcgY29uZmlndXJlZCAoYWxzbyBkaXNhYmxlIFdPTCkgKi8KLQl3cml0ZWwoMHg4LCAmcFJ4TWFjLT5jdHJsLnZhbHVlKTsKKwl3cml0ZWwoMHg4LCAmcFJ4TWFjLT5jdHJsKTsKIAogCS8qIEluaXRpYWxpemUgV09MIHRvIGRpc2FibGVkLiAqLwotCXdyaXRlbCgwLCAmcFJ4TWFjLT5jcmMwLnZhbHVlKTsKLQl3cml0ZWwoMCwgJnBSeE1hYy0+Y3JjMTIudmFsdWUpOwotCXdyaXRlbCgwLCAmcFJ4TWFjLT5jcmMzNC52YWx1ZSk7CisJd3JpdGVsKDAsICZwUnhNYWMtPmNyYzApOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5jcmMxMik7CisJd3JpdGVsKDAsICZwUnhNYWMtPmNyYzM0KTsKIAogCS8qIFdlIG5lZWQgdG8gc2V0IHRoZSBXT0wgbWFzazAgLSBtYXNrNCBuZXh0LiAgV2UgaW5pdGlhbGl6ZSBpdCB0bwogCSAqIGl0cyBkZWZhdWx0IFZhbHVlcyBvZiAweDAwMDAwMDAwIGJlY2F1c2UgdGhlcmUgYXJlIG5vdCBXT0wgbWFza3MKQEAgLTI4NiwxMiArMjkyLDEyIEBACiAJd3JpdGVsKHNhX2hpLnZhbHVlLCAmcFJ4TWFjLT5zYV9oaS52YWx1ZSk7CiAKIAkvKiBEaXNhYmxlIGFsbCBQYWNrZXQgRmlsdGVyaW5nICovCi0Jd3JpdGVsKDAsICZwUnhNYWMtPnBmX2N0cmwudmFsdWUpOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5wZl9jdHJsKTsKIAogCS8qIExldCdzIGluaXRpYWxpemUgdGhlIFVuaWNhc3QgUGFja2V0IGZpbHRlcmluZyBhZGRyZXNzICovCiAJaWYgKGV0ZGV2LT5QYWNrZXRGaWx0ZXIgJiBFVDEzMVhfUEFDS0VUX1RZUEVfRElSRUNURUQpIHsKIAkJU2V0dXBEZXZpY2VGb3JVbmljYXN0KGV0ZGV2KTsKLQkJcGZfY3RybC5iaXRzLmZpbHRlcl91bmlfZW4gPSAxOworCQlwZl9jdHJsIHw9IDQ7CS8qIFVuaWNhc3QgZmlsdGVyICovCiAJfSBlbHNlIHsKIAkJd3JpdGVsKDAsICZwUnhNYWMtPnVuaV9wZl9hZGRyMS52YWx1ZSk7CiAJCXdyaXRlbCgwLCAmcFJ4TWFjLT51bmlfcGZfYWRkcjIudmFsdWUpOwpAQCAtMjk5LDIwICszMDUsMTYgQEAKIAl9CiAKIAkvKiBMZXQncyBpbml0aWFsaXplIHRoZSBNdWx0aWNhc3QgaGFzaCAqLwotCWlmIChldGRldi0+UGFja2V0RmlsdGVyICYgRVQxMzFYX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QpIHsKLQkJcGZfY3RybC5iaXRzLmZpbHRlcl9tdWx0aV9lbiA9IDA7Ci0JfSBlbHNlIHsKLQkJcGZfY3RybC5iaXRzLmZpbHRlcl9tdWx0aV9lbiA9IDE7CisJaWYgKCEoZXRkZXYtPlBhY2tldEZpbHRlciAmIEVUMTMxWF9QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUKSkgeworCQlwZl9jdHJsIHw9IDI7CS8qIE11bHRpY2FzdCBmaWx0ZXIgKi8KIAkJU2V0dXBEZXZpY2VGb3JNdWx0aWNhc3QoZXRkZXYpOwogCX0KIAogCS8qIFJ1bnQgcGFja2V0IGZpbHRlcmluZy4gIERpZG4ndCB3b3JrIGluIHZlcnNpb24gQSBzaWxpY29uLiAqLwotCXBmX2N0cmwuYml0cy5taW5fcGt0X3NpemUgPSBOSUNfTUlOX1BBQ0tFVF9TSVpFICsgNDsKLQlwZl9jdHJsLmJpdHMuZmlsdGVyX2ZyYWdfZW4gPSAxOworCXBmX2N0cmwgfD0gKE5JQ19NSU5fUEFDS0VUX1NJWkUgKyA0KSA8PCAxNjsKKwlwZl9jdHJsIHw9IDg7CS8qIEZyYWdtZW50IGZpbHRlciAqLwogCi0JaWYgKGV0ZGV2LT5SZWdpc3RyeUp1bWJvUGFja2V0ID4gODE5MikgewotCQlSWE1BQ19NQ0lGX0NUUkxfTUFYX1NFR190IG1jaWZfY3RybF9tYXhfc2VnOwotCisJaWYgKGV0ZGV2LT5SZWdpc3RyeUp1bWJvUGFja2V0ID4gODE5MikKIAkJLyogSW4gb3JkZXIgdG8gdHJhbnNtaXQganVtYm8gcGFja2V0cyBncmVhdGVyIHRoYW4gOGssIHRoZQogCQkgKiBGSUZPIGJldHdlZW4gUnhNQUMgYW5kIFJ4RE1BIG5lZWRzIHRvIGJlIHJlZHVjZWQgaW4gc2l6ZQogCQkgKiB0byAoMTZrIC0gSnVtYm8gcGFja2V0IHNpemUpLiAgSW4gb3JkZXIgdG8gaW1wbGVtZW50IHRoaXMsCkBAIC0zMjAsMjUgKzMyMiwyMSBAQAogCQkgKiBwYWNrZXRzIGRvd24gaW50byBzZWdtZW50cyB3aGljaCBhcmUgKG1heF9zaXplICogMTYpLiAgSW4KIAkJICogdGhpcyBjYXNlIHdlIHNlbGVjdGVkIDI1NiBieXRlcywgc2luY2UgdGhpcyBpcyB0aGUgc2l6ZSBvZgogCQkgKiB0aGUgUENJLUV4cHJlc3MgVExQJ3MgdGhhdCB0aGUgMTMxMCB1c2VzLgorCQkgKgorCQkgKiBzZWdfZW4gb24sIGZjX2VuIG9mZiwgc2l6ZSAweDEwCiAJCSAqLwotCQltY2lmX2N0cmxfbWF4X3NlZy5iaXRzLnNlZ19lbiA9IDB4MTsKLQkJbWNpZl9jdHJsX21heF9zZWcuYml0cy5mY19lbiA9IDB4MDsKLQkJbWNpZl9jdHJsX21heF9zZWcuYml0cy5tYXhfc2l6ZSA9IDB4MTA7Ci0KLQkJd3JpdGVsKG1jaWZfY3RybF9tYXhfc2VnLnZhbHVlLAotCQkgICAgICAgJnBSeE1hYy0+bWNpZl9jdHJsX21heF9zZWcudmFsdWUpOwotCX0gZWxzZSB7Ci0JCXdyaXRlbCgwLCAmcFJ4TWFjLT5tY2lmX2N0cmxfbWF4X3NlZy52YWx1ZSk7Ci0JfQorCQl3cml0ZWwoMHg0MSwgJnBSeE1hYy0+bWNpZl9jdHJsX21heF9zZWcpOworCWVsc2UKKwkJd3JpdGVsKDAsICZwUnhNYWMtPm1jaWZfY3RybF9tYXhfc2VnKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIE1DSUYgd2F0ZXIgbWFya3MgKi8KLQl3cml0ZWwoMCwgJnBSeE1hYy0+bWNpZl93YXRlcl9tYXJrLnZhbHVlKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWNpZl93YXRlcl9tYXJrKTsKIAogCS8qICBJbml0aWFsaXplIHRoZSBNSUYgY29udHJvbCAqLwotCXdyaXRlbCgwLCAmcFJ4TWFjLT5taWZfY3RybC52YWx1ZSk7CisJd3JpdGVsKDAsICZwUnhNYWMtPm1pZl9jdHJsKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIFNwYWNlIEF2YWlsYWJsZSBSZWdpc3RlciAqLwotCXdyaXRlbCgwLCAmcFJ4TWFjLT5zcGFjZV9hdmFpbC52YWx1ZSk7CisJd3JpdGVsKDAsICZwUnhNYWMtPnNwYWNlX2F2YWlsKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIHRoZSBtaWZfY3RybCByZWdpc3RlcgogCSAqIGJpdCAzOiAgUmVjZWl2ZSBjb2RlIGVycm9yLiBPbmUgb3IgbW9yZSBuaWJibGVzIHdlcmUgc2lnbmFsZWQgYXMKQEAgLTM1NCw5ICszNTIsOSBAQAogCSAqIGJpdCAxNzogRHJvcCBwYWNrZXQgZW5hYmxlCiAJICovCiAJaWYgKGV0ZGV2LT5saW5rc3BlZWQgPT0gVFJVRVBIWV9TUEVFRF8xMDBNQlBTKQotCQl3cml0ZWwoMHgzMDAzOCwgJnBSeE1hYy0+bWlmX2N0cmwudmFsdWUpOworCQl3cml0ZWwoMHgzMDAzOCwgJnBSeE1hYy0+bWlmX2N0cmwpOwogCWVsc2UKLQkJd3JpdGVsKDB4MzAwMzAsICZwUnhNYWMtPm1pZl9jdHJsLnZhbHVlKTsKKwkJd3JpdGVsKDB4MzAwMzAsICZwUnhNYWMtPm1pZl9jdHJsKTsKIAogCS8qIEZpbmFsbHkgd2UgaW5pdGlhbGl6ZSBSeE1hYyB0byBiZSBlbmFibGVkICYgV09MIGRpc2FibGVkLiAgUGFja2V0CiAJICogZmlsdGVyIGlzIGFsd2F5cyBlbmFibGVkIHNpbmNlIGl0IGlzIHdoZXJlIHRoZSBydW50IHBhY2tldHMgYXJlCkBAIC0zNjQsMjggKzM2MiwyOCBAQAogCSAqIGRyb3BwaW5nIGRvZXNuJ3Qgd29yaywgc28gaXQgaXMgZGlzYWJsZWQgaW4gdGhlIHBmX2N0cmwgcmVnaXN0ZXIsCiAJICogYnV0IHdlIHN0aWxsIGxlYXZlIHRoZSBwYWNrZXQgZmlsdGVyIG9uLgogCSAqLwotCXdyaXRlbChwZl9jdHJsLnZhbHVlLCAmcFJ4TWFjLT5wZl9jdHJsLnZhbHVlKTsKLQl3cml0ZWwoMHg5LCAmcFJ4TWFjLT5jdHJsLnZhbHVlKTsKKwl3cml0ZWwocGZfY3RybCwgJnBSeE1hYy0+cGZfY3RybCk7CisJd3JpdGVsKDB4OSwgJnBSeE1hYy0+Y3RybCk7CiB9CiAKIHZvaWQgQ29uZmlnVHhNYWNSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqZXRkZXYpCiB7Ci0Jc3RydWN0IF9UWE1BQ190IF9faW9tZW0gKnBUeE1hYyA9ICZldGRldi0+cmVncy0+dHhtYWM7CisJc3RydWN0IHR4bWFjX3JlZ3MgKnR4bWFjID0gJmV0ZGV2LT5yZWdzLT50eG1hYzsKIAogCS8qIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBDb250cm9sIEZyYW1lIFBhcmFtZXRlcnMKIAkgKiBjZnB0IC0gY29udHJvbCBmcmFtZSBwYXVzZSB0aW1lciBzZXQgdG8gNjQgKDB4NDApCiAJICogY2ZlcCAtIGNvbnRyb2wgZnJhbWUgZXh0ZW5kZWQgcGF1c2UgdGltZXIgc2V0IHRvIDB4MAogCSAqLwogCWlmIChldGRldi0+Rmxvd0NvbnRyb2wgPT0gTm9uZSkKLQkJd3JpdGVsKDAsICZwVHhNYWMtPmNmX3BhcmFtKTsKKwkJd3JpdGVsKDAsICZ0eG1hYy0+Y2ZfcGFyYW0pOwogCWVsc2UKLQkJd3JpdGVsKDB4NDAsICZwVHhNYWMtPmNmX3BhcmFtKTsKKwkJd3JpdGVsKDB4NDAsICZ0eG1hYy0+Y2ZfcGFyYW0pOwogfQogCiB2b2lkIENvbmZpZ01hY1N0YXRSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqZXRkZXYpCiB7Ci0Jc3RydWN0IF9NQUNfU1RBVF90IF9faW9tZW0gKm1hY3N0YXQgPQotCQkmZXRkZXYtPnJlZ3MtPm1hY1N0YXQ7CisJc3RydWN0IG1hY3N0YXRfcmVncyBfX2lvbWVtICptYWNzdGF0ID0KKwkJJmV0ZGV2LT5yZWdzLT5tYWNzdGF0OwogCiAJLyogTmV4dCB3ZSBuZWVkIHRvIGluaXRpYWxpemUgYWxsIHRoZSBNQUNfU1RBVCByZWdpc3RlcnMgdG8gemVybyBvbgogCSAqIHRoZSBkZXZpY2UuCkBAIC00NTYsOCArNDU0LDggQEAKIHZvaWQgVXBkYXRlTWFjU3RhdEhvc3RDb3VudGVycyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmV0ZGV2KQogewogCXN0cnVjdCBfY2Vfc3RhdHNfdCAqc3RhdHMgPSAmZXRkZXYtPlN0YXRzOwotCXN0cnVjdCBfTUFDX1NUQVRfdCBfX2lvbWVtICptYWNzdGF0ID0KLQkJJmV0ZGV2LT5yZWdzLT5tYWNTdGF0OworCXN0cnVjdCBtYWNzdGF0X3JlZ3MgX19pb21lbSAqbWFjc3RhdCA9CisJCSZldGRldi0+cmVncy0+bWFjc3RhdDsKIAogCXN0YXRzLT5jb2xsaXNpb25zICs9IHJlYWRsKCZtYWNzdGF0LT5UTmNsKTsKIAlzdGF0cy0+Zmlyc3RfY29sbGlzaW9uICs9IHJlYWRsKCZtYWNzdGF0LT5UU2NsKTsKQEAgLTQ5MywxMSArNDkxLDExIEBACiAJLyogUmVhZCB0aGUgaW50ZXJydXB0IGJpdHMgZnJvbSB0aGUgcmVnaXN0ZXIocykuICBUaGVzZSBhcmUgQ2xlYXIgT24KIAkgKiBXcml0ZS4KIAkgKi8KLQlDYXJyeTEgPSByZWFkbCgmZXRkZXYtPnJlZ3MtPm1hY1N0YXQuQ2FycnkxKTsKLQlDYXJyeTIgPSByZWFkbCgmZXRkZXYtPnJlZ3MtPm1hY1N0YXQuQ2FycnkyKTsKKwlDYXJyeTEgPSByZWFkbCgmZXRkZXYtPnJlZ3MtPm1hY3N0YXQuQ2FycnkxKTsKKwlDYXJyeTIgPSByZWFkbCgmZXRkZXYtPnJlZ3MtPm1hY3N0YXQuQ2FycnkyKTsKIAotCXdyaXRlbChDYXJyeTEsICZldGRldi0+cmVncy0+bWFjU3RhdC5DYXJyeTEpOwotCXdyaXRlbChDYXJyeTIsICZldGRldi0+cmVncy0+bWFjU3RhdC5DYXJyeTIpOworCXdyaXRlbChDYXJyeTEsICZldGRldi0+cmVncy0+bWFjc3RhdC5DYXJyeTEpOworCXdyaXRlbChDYXJyeTIsICZldGRldi0+cmVncy0+bWFjc3RhdC5DYXJyeTIpOwogCiAJLyogV2UgbmVlZCB0byBkbyB1cGRhdGUgdGhlIGhvc3QgY29weSBvZiBhbGwgdGhlIE1BQ19TVEFUIGNvdW50ZXJzLgogCSAqIEZvciBlYWNoIGNvdW50ZXIsIGNoZWNrIGl0J3Mgb3ZlcmZsb3cgYml0LiAgSWYgdGhlIG92ZXJmbG93IGJpdCBpcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfbWFjLmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9tYWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMzODU5NS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9tYWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qCi0gKiBBZ2VyZSBTeXN0ZW1zIEluYy4KLSAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcwotICoKLSAqIENvcHlyaWdodCDCqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIGV0MTMxMF9tYWMuaCAtICBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiBwZXJ0YWluaW5nIHRvIHRoZQotICogICAgICAgICAgICAgICAgIE1BQy4KLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIFNPRlRXQVJFIExJQ0VOU0UKLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKLSAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKLSAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KLSAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KLSAqCi0gKiBDb3B5cmlnaHQgwqkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwotICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKLSAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogRGlzY2xhaW1lcgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAotICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQotICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KLSAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICi0gKiBEQU1BR0UuCi0gKgotICovCi0KLSNpZm5kZWYgX0VUMTMxMF9NQUNfSF8KLSNkZWZpbmUgX0VUMTMxMF9NQUNfSF8KLQotCi0jaW5jbHVkZSAiZXQxMzEwX2FkZHJlc3NfbWFwLmgiCi0KLQotI2RlZmluZSBDT1VOVEVSX1dSQVBfMjhfQklUIDB4MTAwMDAwMDAKLSNkZWZpbmUgQ09VTlRFUl9XUkFQXzIyX0JJVCAweDQwMDAwMAotI2RlZmluZSBDT1VOVEVSX1dSQVBfMTZfQklUIDB4MTAwMDAKLSNkZWZpbmUgQ09VTlRFUl9XUkFQXzEyX0JJVCAweDEwMDAKLQotI2RlZmluZSBDT1VOVEVSX01BU0tfMjhfQklUIChDT1VOVEVSX1dSQVBfMjhfQklUIC0gMSkKLSNkZWZpbmUgQ09VTlRFUl9NQVNLXzIyX0JJVCAoQ09VTlRFUl9XUkFQXzIyX0JJVCAtIDEpCi0jZGVmaW5lIENPVU5URVJfTUFTS18xNl9CSVQgKENPVU5URVJfV1JBUF8xNl9CSVQgLSAxKQotI2RlZmluZSBDT1VOVEVSX01BU0tfMTJfQklUIChDT1VOVEVSX1dSQVBfMTJfQklUIC0gMSkKLQotI2RlZmluZSBVUERBVEVfQ09VTlRFUihIb3N0Q250LCBEZXZDbnQpIFwKLSAgICBIb3N0Q250ID0gSG9zdENudCArIERldkNudDsKLQotLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSAqLwotc3RydWN0IGV0MTMxeF9hZGFwdGVyOwotCi12b2lkIENvbmZpZ01BQ1JlZ3MxKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIENvbmZpZ01BQ1JlZ3MyKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIENvbmZpZ1J4TWFjUmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBDb25maWdUeE1hY1JlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgQ29uZmlnTWFjU3RhdFJlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgQ29uZmlnRmxvd0NvbnRyb2woc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgVXBkYXRlTWFjU3RhdEhvc3RDb3VudGVycyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBIYW5kbGVNYWNTdGF0SW50ZXJydXB0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIFNldHVwRGV2aWNlRm9yTXVsdGljYXN0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIFNldHVwRGV2aWNlRm9yVW5pY2FzdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotCi0jZW5kaWYgLyogX0VUMTMxMF9NQUNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BoeS5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcGh5LmMKaW5kZXggNmVjYWQ2MS4uNGE1NWZiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcGh5LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcGh5LmMKQEAgLTg1LDE3ICs4NSwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogCiAjaW5jbHVkZSAiZXQxMzEwX3BoeS5oIgotI2luY2x1ZGUgImV0MTMxMF9wbS5oIgotI2luY2x1ZGUgImV0MTMxMF9qYWdjb3JlLmgiCiAKICNpbmNsdWRlICJldDEzMXhfYWRhcHRlci5oIgotI2luY2x1ZGUgImV0MTMxeF9uZXRkZXYuaCIKLSNpbmNsdWRlICJldDEzMXhfaW5pdHBjaS5oIgogCiAjaW5jbHVkZSAiZXQxMzEwX2FkZHJlc3NfbWFwLmgiCiAjaW5jbHVkZSAiZXQxMzEwX3R4LmgiCiAjaW5jbHVkZSAiZXQxMzEwX3J4LmgiCi0jaW5jbHVkZSAiZXQxMzEwX21hYy5oIgorCisjaW5jbHVkZSAiZXQxMzF4LmgiCiAKIC8qIFByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyB3aXRoIGxvY2FsIHNjb3BlICovCiBzdGF0aWMgdm9pZCBldDEzMXhfeGN2cl9pbml0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqZXRkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcGh5LmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9waHkuaAppbmRleCA3NThiOWIyLi40NzkwN2JhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9waHkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9waHkuaApAQCAtNzM2LDMyICs3MzYsOCBAQAogCiAvKiBNSSBSZWdpc3RlciAyOSAtIDMxOiBSZXNlcnZlZCBSZWcoMHgxRCAtIDB4MUUpICovCiAKLS8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KLXN0cnVjdCBldDEzMXhfYWRhcHRlcjsKIAogLyogUHJvdG90eXBlcyBmb3IgRVQxMzEwX3BoeS5jICovCi1pbnQgZXQxMzF4X3hjdnJfZmluZChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBldDEzMXhfc2V0cGh5X25vcm1hbChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotCi0vKiBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIGRvZXMgbm90IHdvcmsgYmVjYXVzZSBldDEzMXhfYWRhcHRlciBpcyBub3QgYWx3YXlzCi0gKiBkZWZpbmVkCi0gKi8KLWludCBQaHlNaVJlYWQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLCB1OCB4Y3ZyQWRkciwKLQkgICAgICB1OCB4Y3ZyUmVnLCB1MTYgKnZhbHVlKTsKLSNkZWZpbmUgTWlSZWFkKGFkYXB0ZXIsIHhjdnJSZWcsIHZhbHVlKSBcCi0JUGh5TWlSZWFkKChhZGFwdGVyKSwgKGFkYXB0ZXIpLT5TdGF0cy54Y3ZyX2FkZHIsICh4Y3ZyUmVnKSwgKHZhbHVlKSkKLQotaW50MzJfdCBNaVdyaXRlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKLQkJdTggeGN2UmVnLCB1MTYgdmFsdWUpOwotdm9pZCBldDEzMXhfTWlpX2NoZWNrKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsCi0JCSAgICAgIE1JX0JNU1JfdCBibXNyLCBNSV9CTVNSX3QgYm1zcl9pbnRzKTsKLQotLyogVGhpcyBsYXN0IGlzIG5vdCBzdHJpY3RseSByZXF1aXJlZCAodGhlIGRyaXZlciBjb3VsZCBjYWxsIHRoZSBUUEFMCi0gKiB2ZXJzaW9uIGluc3RlYWQpLCBidXQgdGhpcyBzZXRzIHRoZSBhZGFwdGVyIHVwIGNvcnJlY3RseSwgYW5kIGNhbGxzIHRoZQotICogYWNjZXNzIHJvdXRpbmUgaW5kaXJlY3RseS4gIFRoaXMgcHJvdGVjdHMgdGhlIGRyaXZlciBmcm9tIGNoYW5nZXMgaW4gVFBBTC4KLSAqLwotdm9pZCBTZXRQaHlfMTBCYXNlVEhhbGZEdXBsZXgoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLQogLyogRGVmaW5lcyBmb3IgUEhZIGFjY2VzcyByb3V0aW5lcyAqLwogCiAvKiBEZWZpbmUgYml0IG9wZXJhdGlvbiBmbGFncyAqLwpAQCAtODQzLDE0ICs4MTksNCBAQAogCQkJCQkvKiAjZGVmaW5lIFRSVV9WTUlfTElOS19DT05UUk9MX1JFR0lTVEVSICAgICAgICAgICAyOSAqLwogCQkJCQkvKiAjZGVmaW5lIFRSVV9WTUlfVElNSU5HX0NPTlRST0xfUkVHSVNURVIgKi8KIAotLyogUHJvdG90eXBlcyBmb3IgUEhZIGFjY2VzcyByb3V0aW5lcyAqLwotdm9pZCBFVDEzMTBfUGh5SW5pdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBFVDEzMTBfUGh5UmVzZXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgRVQxMzEwX1BoeVBvd2VyRG93bihzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgZG93bik7Ci12b2lkIEVUMTMxMF9QaHlBZHZlcnRpc2UxMDAwQmFzZVQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAotCQkJCSAgdTE2IGR1cGxleCk7Ci12b2lkIEVUMTMxMF9QaHlBY2Nlc3NNaUJpdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkgICB1MTYgYWN0aW9uLAotCQkJICAgdTE2IHJlZ251bSwgdTE2IGJpdG51bSwgdTggKnZhbHVlKTsKLQogI2VuZGlmIC8qIF9FVDEzMTBfUEhZX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9wbS5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcG0uYwppbmRleCA3ZDA3NzIzLi40MTAxOWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9wbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BtLmMKQEAgLTgzLDEzICs4Myw5IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAKICNpbmNsdWRlICJldDEzMTBfcGh5LmgiCi0jaW5jbHVkZSAiZXQxMzEwX3BtLmgiCi0jaW5jbHVkZSAiZXQxMzEwX2phZ2NvcmUuaCIKLSNpbmNsdWRlICJldDEzMTBfbWFjLmgiCiAjaW5jbHVkZSAiZXQxMzEwX3J4LmgiCi0KICNpbmNsdWRlICJldDEzMXhfYWRhcHRlci5oIgotI2luY2x1ZGUgImV0MTMxeF9pbml0cGNpLmgiCisjaW5jbHVkZSAiZXQxMzF4LmgiCiAKIC8qKgogICogRW5hYmxlUGh5Q29tYSAtIGNhbGxlZCB3aGVuIG5ldHdvcmsgY2FibGUgaXMgdW5wbHVnZ2VkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9wbS5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcG0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk1ZjNhYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9wbS5oCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIEFnZXJlIFN5c3RlbXMgSW5jLgotICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCi0gKgotICogQ29weXJpZ2h0IMKpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogZXQxMzEwX3BtLmggLSBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiBwZXJ0YWluaW5nIHRvIHBvd2VyCi0gKiAgICAgICAgICAgICAgIG1hbmFnZW1lbnQuCi0gKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiBTT0ZUV0FSRSBMSUNFTlNFCi0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCi0gKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCi0gKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCi0gKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCi0gKgotICogQ29weXJpZ2h0IMKpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKLSAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCi0gKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KLSAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIERpc2NsYWltZXIKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKLSAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKLSAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCi0gKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAotICogREFNQUdFLgotICoKLSAqLwotCi0jaWZuZGVmIF9FVDEzMTBfUE1fSF8KLSNkZWZpbmUgX0VUMTMxMF9QTV9IXwotCi0jaW5jbHVkZSAiZXQxMzEwX2FkZHJlc3NfbWFwLmgiCi0KLXR5cGVkZWYgc3RydWN0IF9NUF9QT1dFUl9NR01UIHsKLQkvKiB2YXJpYWJsZSBwdXR0aW5nIHRoZSBwaHkgaW50byBjb21hIG1vZGUgd2hlbiBib290IHVwIHdpdGggbm8gY2FibGUKLQkgKiBwbHVnZ2VkIGluIGFmdGVyIDUgc2Vjb25kcwotCSAqLwotCXU4IFRyYW5zUGh5Q29tYU1vZGVPbkJvb3Q7Ci0KLQkvKiBOZXh0IHR3byB1c2VkIHRvIHNhdmUgcG93ZXIgaW5mb3JtYXRpb24gYXQgcG93ZXIgZG93bi4gVGhpcwotCSAqIGluZm9ybWF0aW9uIHdpbGwgYmUgdXNlZCBkdXJpbmcgcG93ZXIgdXAgdG8gc2V0IHVwIHBhcnRzIG9mIFBvd2VyCi0JICogTWFuYWdlbWVudCBpbiBKQUdDb3JlCi0JICovCi0JdTE2IFBvd2VyRG93blNwZWVkOwotCXU4IFBvd2VyRG93bkR1cGxleDsKLX0gTVBfUE9XRVJfTUdNVCwgKlBNUF9QT1dFUl9NR01UOwotCi0vKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCi0gKi8KLXN0cnVjdCBldDEzMXhfYWRhcHRlcjsKLQotdm9pZCBFbmFibGVQaHlDb21hKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIERpc2FibGVQaHlDb21hKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci0KLSNlbmRpZiAvKiBfRVQxMzEwX1BNX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguYwppbmRleCA4MWMxYTc0Li41NDY4NmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMKQEAgLTg0LDE0ICs4NCw5IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAKICNpbmNsdWRlICJldDEzMTBfcGh5LmgiCi0jaW5jbHVkZSAiZXQxMzEwX3BtLmgiCi0jaW5jbHVkZSAiZXQxMzEwX2phZ2NvcmUuaCIKLQogI2luY2x1ZGUgImV0MTMxeF9hZGFwdGVyLmgiCi0jaW5jbHVkZSAiZXQxMzF4X2luaXRwY2kuaCIKLQogI2luY2x1ZGUgImV0MTMxMF9yeC5oIgotCisjaW5jbHVkZSAiZXQxMzF4LmgiCiAKIHZvaWQgbmljX3JldHVybl9yZmQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpldGRldiwgUE1QX1JGRCBwTXBSZmQpOwogCkBAIC0xMDksMTcgKzEwNCwxNiBAQAogCXUzMiBpLCBqOwogCXUzMiBidWZzaXplOwogCXUzMiBwa3RTdGF0UmluZ1NpemUsIEZCUkNodW5rU2l6ZTsKLQlSWF9SSU5HX3QgKnJ4X3Jpbmc7CisJc3RydWN0IHJ4X3JpbmcgKnJ4X3Jpbmc7CiAKIAkvKiBTZXR1cCBzb21lIGNvbnZlbmllbmNlIHBvaW50ZXJzICovCi0JcnhfcmluZyA9IChSWF9SSU5HX3QgKikgJmFkYXB0ZXItPlJ4UmluZzsKKwlyeF9yaW5nID0gJmFkYXB0ZXItPnJ4X3Jpbmc7CiAKIAkvKiBBbGxvYyBtZW1vcnkgZm9yIHRoZSBsb29rdXAgdGFibGUgKi8KICNpZmRlZiBVU0VfRkJSMAotCXJ4X3JpbmctPkZiclswXSA9IGttYWxsb2Moc2l6ZW9mKEZCUkxPT0tVUFRBQkxFKSwgR0ZQX0tFUk5FTCk7CisJcnhfcmluZy0+ZmJyWzBdID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGZicl9sb29rdXApLCBHRlBfS0VSTkVMKTsKICNlbmRpZgotCi0JcnhfcmluZy0+RmJyWzFdID0ga21hbGxvYyhzaXplb2YoRkJSTE9PS1VQVEFCTEUpLCBHRlBfS0VSTkVMKTsKKwlyeF9yaW5nLT5mYnJbMV0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZmJyX2xvb2t1cCksIEdGUF9LRVJORUwpOwogCiAJLyogVGhlIGZpcnN0IHRoaW5nIHdlIHdpbGwgZG8gaXMgY29uZmlndXJlIHRoZSBzaXplcyBvZiB0aGUgYnVmZmVyCiAJICogcmluZ3MuIFRoZXNlIHdpbGwgY2hhbmdlIGJhc2VkIG9uIGp1bWJvIHBhY2tldCBzdXBwb3J0LiAgTGFyZ2VyCkBAIC0xNjMsMTQgKzE1NywxNCBAQAogCX0KIAogI2lmZGVmIFVTRV9GQlIwCi0JYWRhcHRlci0+UnhSaW5nLlBzck51bUVudHJpZXMgPSBhZGFwdGVyLT5SeFJpbmcuRmJyME51bUVudHJpZXMgKwotCSAgICBhZGFwdGVyLT5SeFJpbmcuRmJyMU51bUVudHJpZXM7CisJYWRhcHRlci0+cnhfcmluZy5Qc3JOdW1FbnRyaWVzID0gYWRhcHRlci0+cnhfcmluZy5GYnIwTnVtRW50cmllcyArCisJICAgIGFkYXB0ZXItPnJ4X3JpbmcuRmJyMU51bUVudHJpZXM7CiAjZWxzZQotCWFkYXB0ZXItPlJ4UmluZy5Qc3JOdW1FbnRyaWVzID0gYWRhcHRlci0+UnhSaW5nLkZicjFOdW1FbnRyaWVzOworCWFkYXB0ZXItPnJ4X3JpbmcuUHNyTnVtRW50cmllcyA9IGFkYXB0ZXItPnJ4X3JpbmcuRmJyMU51bUVudHJpZXM7CiAjZW5kaWYKIAogCS8qIEFsbG9jYXRlIGFuIGFyZWEgb2YgbWVtb3J5IGZvciBGcmVlIEJ1ZmZlciBSaW5nIDEgKi8KLQlidWZzaXplID0gKHNpemVvZihGQlJfREVTQ190KSAqIHJ4X3JpbmctPkZicjFOdW1FbnRyaWVzKSArIDB4ZmZmOworCWJ1ZnNpemUgPSAoc2l6ZW9mKHN0cnVjdCBmYnJfZGVzYykgKiByeF9yaW5nLT5GYnIxTnVtRW50cmllcykgKyAweGZmZjsKIAlyeF9yaW5nLT5wRmJyMVJpbmdWYSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCiAJCQkJCQkgICAgYnVmc2l6ZSwKIAkJCQkJCSAgICAmcnhfcmluZy0+cEZicjFSaW5nUGEpOwpAQCAtMTk0LDEyICsxODgsMTIgQEAKIAkJCQkgICAgICAmcnhfcmluZy0+RmJyMVJlYWxwYSwKIAkJCQkgICAgICAmcnhfcmluZy0+RmJyMW9mZnNldCwgMHgwRkZGKTsKIAotCXJ4X3JpbmctPnBGYnIxUmluZ1ZhID0gKHZvaWQgKikoKHVpbnQ4X3QgKikgcnhfcmluZy0+cEZicjFSaW5nVmEgKworCXJ4X3JpbmctPnBGYnIxUmluZ1ZhID0gKHZvaWQgKikoKHU4ICopIHJ4X3JpbmctPnBGYnIxUmluZ1ZhICsKIAkJCQkJcnhfcmluZy0+RmJyMW9mZnNldCk7CiAKICNpZmRlZiBVU0VfRkJSMAogCS8qIEFsbG9jYXRlIGFuIGFyZWEgb2YgbWVtb3J5IGZvciBGcmVlIEJ1ZmZlciBSaW5nIDAgKi8KLQlidWZzaXplID0gKHNpemVvZihGQlJfREVTQ190KSAqIHJ4X3JpbmctPkZicjBOdW1FbnRyaWVzKSArIDB4ZmZmOworCWJ1ZnNpemUgPSAoc2l6ZW9mKHN0cnVjdCBmYnJfZGVzYykgKiByeF9yaW5nLT5GYnIwTnVtRW50cmllcykgKyAweGZmZjsKIAlyeF9yaW5nLT5wRmJyMFJpbmdWYSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCiAJCQkJCQkgICAgYnVmc2l6ZSwKIAkJCQkJCSAgICAmcnhfcmluZy0+cEZicjBSaW5nUGEpOwpAQCAtMjIzLDcgKzIxNyw3IEBACiAJCQkJICAgICAgJnJ4X3JpbmctPkZicjBSZWFscGEsCiAJCQkJICAgICAgJnJ4X3JpbmctPkZicjBvZmZzZXQsIDB4MEZGRik7CiAKLQlyeF9yaW5nLT5wRmJyMFJpbmdWYSA9ICh2b2lkICopKCh1aW50OF90ICopIHJ4X3JpbmctPnBGYnIwUmluZ1ZhICsKKwlyeF9yaW5nLT5wRmJyMFJpbmdWYSA9ICh2b2lkICopKCh1OCAqKSByeF9yaW5nLT5wRmJyMFJpbmdWYSArCiAJCQkJCXJ4X3JpbmctPkZicjBvZmZzZXQpOwogI2VuZGlmCiAKQEAgLTI3MCwyMyArMjY0LDIzIEBACiAJCQkvKiBTYXZlIHRoZSBWaXJ0dWFsIGFkZHJlc3Mgb2YgdGhpcyBpbmRleCBmb3IgcXVpY2sKIAkJCSAqIGFjY2VzcyBsYXRlcgogCQkJICovCi0JCQlyeF9yaW5nLT5GYnJbMV0tPlZhW2luZGV4XSA9Ci0JCQkgICAgKHVpbnQ4X3QgKikgcnhfcmluZy0+RmJyMU1lbVZhW2ldICsKKwkJCXJ4X3JpbmctPmZiclsxXS0+dmlydFtpbmRleF0gPQorCQkJICAgICh1OCAqKSByeF9yaW5nLT5GYnIxTWVtVmFbaV0gKwogCQkJICAgIChqICogcnhfcmluZy0+RmJyMUJ1ZmZlclNpemUpICsgRmJyMU9mZnNldDsKIAogCQkJLyogbm93IHN0b3JlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGluIHRoZSBkZXNjcmlwdG9yCiAJCQkgKiBzbyB0aGUgZGV2aWNlIGNhbiBhY2Nlc3MgaXQKIAkJCSAqLwotCQkJcnhfcmluZy0+RmJyWzFdLT5QQUhpZ2hbaW5kZXhdID0KKwkJCXJ4X3JpbmctPmZiclsxXS0+YnVzX2hpZ2hbaW5kZXhdID0KIAkJCSAgICAodTMyKSAoRmJyMVRlbXBQYSA+PiAzMik7Ci0JCQlyeF9yaW5nLT5GYnJbMV0tPlBBTG93W2luZGV4XSA9ICh1MzIpIEZicjFUZW1wUGE7CisJCQlyeF9yaW5nLT5mYnJbMV0tPmJ1c19sb3dbaW5kZXhdID0gKHUzMikgRmJyMVRlbXBQYTsKIAogCQkJRmJyMVRlbXBQYSArPSByeF9yaW5nLT5GYnIxQnVmZmVyU2l6ZTsKIAotCQkJcnhfcmluZy0+RmJyWzFdLT5CdWZmZXIxW2luZGV4XSA9Ci0JCQkgICAgcnhfcmluZy0+RmJyWzFdLT5WYVtpbmRleF07Ci0JCQlyeF9yaW5nLT5GYnJbMV0tPkJ1ZmZlcjJbaW5kZXhdID0KLQkJCSAgICByeF9yaW5nLT5GYnJbMV0tPlZhW2luZGV4XSAtIDQ7CisJCQlyeF9yaW5nLT5mYnJbMV0tPmJ1ZmZlcjFbaW5kZXhdID0KKwkJCSAgICByeF9yaW5nLT5mYnJbMV0tPnZpcnRbaW5kZXhdOworCQkJcnhfcmluZy0+ZmJyWzFdLT5idWZmZXIyW2luZGV4XSA9CisJCQkgICAgcnhfcmluZy0+ZmJyWzFdLT52aXJ0W2luZGV4XSAtIDQ7CiAJCX0KIAl9CiAKQEAgLTMxOSwyNyArMzEzLDI3IEBACiAJCWZvciAoaiA9IDA7IGogPCBGQlJfQ0hVTktTOyBqKyspIHsKIAkJCXUzMiBpbmRleCA9IChpICogRkJSX0NIVU5LUykgKyBqOwogCi0JCQlyeF9yaW5nLT5GYnJbMF0tPlZhW2luZGV4XSA9Ci0JCQkgICAgKHVpbnQ4X3QgKikgcnhfcmluZy0+RmJyME1lbVZhW2ldICsKKwkJCXJ4X3JpbmctPmZiclswXS0+dmlydFtpbmRleF0gPQorCQkJICAgICh1OCAqKSByeF9yaW5nLT5GYnIwTWVtVmFbaV0gKwogCQkJICAgIChqICogcnhfcmluZy0+RmJyMEJ1ZmZlclNpemUpICsgRmJyME9mZnNldDsKIAotCQkJcnhfcmluZy0+RmJyWzBdLT5QQUhpZ2hbaW5kZXhdID0KKwkJCXJ4X3JpbmctPmZiclswXS0+YnVzX2hpZ2hbaW5kZXhdID0KIAkJCSAgICAodTMyKSAoRmJyMFRlbXBQYSA+PiAzMik7Ci0JCQlyeF9yaW5nLT5GYnJbMF0tPlBBTG93W2luZGV4XSA9ICh1MzIpIEZicjBUZW1wUGE7CisJCQlyeF9yaW5nLT5mYnJbMF0tPmJ1c19sb3dbaW5kZXhdID0gKHUzMikgRmJyMFRlbXBQYTsKIAogCQkJRmJyMFRlbXBQYSArPSByeF9yaW5nLT5GYnIwQnVmZmVyU2l6ZTsKIAotCQkJcnhfcmluZy0+RmJyWzBdLT5CdWZmZXIxW2luZGV4XSA9Ci0JCQkgICAgcnhfcmluZy0+RmJyWzBdLT5WYVtpbmRleF07Ci0JCQlyeF9yaW5nLT5GYnJbMF0tPkJ1ZmZlcjJbaW5kZXhdID0KLQkJCSAgICByeF9yaW5nLT5GYnJbMF0tPlZhW2luZGV4XSAtIDQ7CisJCQlyeF9yaW5nLT5mYnJbMF0tPmJ1ZmZlcjFbaW5kZXhdID0KKwkJCSAgICByeF9yaW5nLT5mYnJbMF0tPnZpcnRbaW5kZXhdOworCQkJcnhfcmluZy0+ZmJyWzBdLT5idWZmZXIyW2luZGV4XSA9CisJCQkgICAgcnhfcmluZy0+ZmJyWzBdLT52aXJ0W2luZGV4XSAtIDQ7CiAJCX0KIAl9CiAjZW5kaWYKIAogCS8qIEFsbG9jYXRlIGFuIGFyZWEgb2YgbWVtb3J5IGZvciBGSUZPIG9mIFBhY2tldCBTdGF0dXMgcmluZyBlbnRyaWVzICovCiAJcGt0U3RhdFJpbmdTaXplID0KLQkgICAgc2l6ZW9mKFBLVF9TVEFUX0RFU0NfdCkgKiBhZGFwdGVyLT5SeFJpbmcuUHNyTnVtRW50cmllczsKKwkgICAgc2l6ZW9mKHN0cnVjdCBwa3Rfc3RhdF9kZXNjKSAqIGFkYXB0ZXItPnJ4X3JpbmcuUHNyTnVtRW50cmllczsKIAogCXJ4X3JpbmctPnBQU1JpbmdWYSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCiAJCQkJCQkgIHBrdFN0YXRSaW5nU2l6ZSwKQEAgLTM2MCwxNiArMzU0LDE2IEBACiAJICovCiAKIAkvKiBBbGxvY2F0ZSBhbiBhcmVhIG9mIG1lbW9yeSBmb3Igd3JpdGViYWNrIG9mIHN0YXR1cyBpbmZvcm1hdGlvbiAqLwotCXJ4X3JpbmctPnBSeFN0YXR1c1ZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKLQkJCQkJCSAgICBzaXplb2YoUlhfU1RBVFVTX0JMT0NLX3QpLAotCQkJCQkJICAgICZyeF9yaW5nLT5wUnhTdGF0dXNQYSk7Ci0JaWYgKCFyeF9yaW5nLT5wUnhTdGF0dXNWYSkgeworCXJ4X3JpbmctPnJ4X3N0YXR1c19ibG9jayA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJCSAgICBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1c19ibG9jayksCisJCQkJCSAgICAmcnhfcmluZy0+cnhfc3RhdHVzX2J1cyk7CisJaWYgKCFyeF9yaW5nLT5yeF9zdGF0dXNfYmxvY2spIHsKIAkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAogCQkJICAiQ2Fubm90IGFsbG9jIG1lbW9yeSBmb3IgU3RhdHVzIEJsb2NrXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXJ4X3JpbmctPk51bVJmZCA9IE5JQ19ERUZBVUxUX05VTV9SRkQ7Ci0JcHJpbnRrKCJQUlMgJWx4XG4iLCAodW5zaWduZWQgbG9uZylyeF9yaW5nLT5wUnhTdGF0dXNQYSk7CisJcHJpbnRrKCJQUlMgJWx4XG4iLCAodW5zaWduZWQgbG9uZylyeF9yaW5nLT5yeF9zdGF0dXNfYnVzKTsKIAogCS8qIFJlY3YKIAkgKiBwY2lfcG9vbF9jcmVhdGUgaW5pdGlhbGl6ZXMgYSBsb29rYXNpZGUgbGlzdC4gQWZ0ZXIgc3VjY2Vzc2Z1bApAQCAtNDAzLDEwICszOTcsMTAgQEAKIAl1MzIgYnVmc2l6ZTsKIAl1MzIgcGt0U3RhdFJpbmdTaXplOwogCVBNUF9SRkQgcmZkOwotCVJYX1JJTkdfdCAqcnhfcmluZzsKKwlzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZzsKIAogCS8qIFNldHVwIHNvbWUgY29udmVuaWVuY2UgcG9pbnRlcnMgKi8KLQlyeF9yaW5nID0gKFJYX1JJTkdfdCAqKSAmYWRhcHRlci0+UnhSaW5nOworCXJ4X3JpbmcgPSAmYWRhcHRlci0+cnhfcmluZzsKIAogCS8qIEZyZWUgUkZEcyBhbmQgYXNzb2NpYXRlZCBwYWNrZXQgZGVzY3JpcHRvcnMgKi8KIAlXQVJOX09OKHJ4X3JpbmctPm5SZWFkeVJlY3YgIT0gcnhfcmluZy0+TnVtUmZkKTsKQEAgLTQxNyw3ICs0MTEsNyBAQAogCiAJCWxpc3RfZGVsKCZyZmQtPmxpc3Rfbm9kZSk7CiAJCXJmZC0+UGFja2V0ID0gTlVMTDsKLQkJa21lbV9jYWNoZV9mcmVlKGFkYXB0ZXItPlJ4UmluZy5SZWN2TG9va2FzaWRlLCByZmQpOworCQlrbWVtX2NhY2hlX2ZyZWUoYWRhcHRlci0+cnhfcmluZy5SZWN2TG9va2FzaWRlLCByZmQpOwogCX0KIAogCS8qIEZyZWUgRnJlZSBCdWZmZXIgUmluZyAxICovCkBAIC00NDcsMTUgKzQ0MSwxNCBAQAogCQl9CiAKIAkJLyogTm93IHRoZSBGSUZPIGl0c2VsZiAqLwotCQlyeF9yaW5nLT5wRmJyMVJpbmdWYSA9ICh2b2lkICopKCh1aW50OF90ICopCisJCXJ4X3JpbmctPnBGYnIxUmluZ1ZhID0gKHZvaWQgKikoKHU4ICopCiAJCQkJcnhfcmluZy0+cEZicjFSaW5nVmEgLSByeF9yaW5nLT5GYnIxb2Zmc2V0KTsKIAotCQlidWZzaXplID0KLQkJICAgIChzaXplb2YoRkJSX0RFU0NfdCkgKiByeF9yaW5nLT5GYnIxTnVtRW50cmllcykgKyAweGZmZjsKKwkJYnVmc2l6ZSA9IChzaXplb2Yoc3RydWN0IGZicl9kZXNjKSAqIHJ4X3JpbmctPkZicjFOdW1FbnRyaWVzKQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAweGZmZjsKIAotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCi0JCQkJICAgIGJ1ZnNpemUsCi0JCQkJICAgIHJ4X3JpbmctPnBGYnIxUmluZ1ZhLCByeF9yaW5nLT5wRmJyMVJpbmdQYSk7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnhfcmluZy0+cEZicjFSaW5nVmEsIHJ4X3JpbmctPnBGYnIxUmluZ1BhKTsKIAogCQlyeF9yaW5nLT5wRmJyMVJpbmdWYSA9IE5VTEw7CiAJfQpAQCAtNDgxLDExICs0NzQsMTEgQEAKIAkJfQogCiAJCS8qIE5vdyB0aGUgRklGTyBpdHNlbGYgKi8KLQkJcnhfcmluZy0+cEZicjBSaW5nVmEgPSAodm9pZCAqKSgodWludDhfdCAqKQorCQlyeF9yaW5nLT5wRmJyMFJpbmdWYSA9ICh2b2lkICopKCh1OCAqKQogCQkJCXJ4X3JpbmctPnBGYnIwUmluZ1ZhIC0gcnhfcmluZy0+RmJyMG9mZnNldCk7CiAKLQkJYnVmc2l6ZSA9Ci0JCSAgICAoc2l6ZW9mKEZCUl9ERVNDX3QpICogcnhfcmluZy0+RmJyME51bUVudHJpZXMpICsgMHhmZmY7CisJCWJ1ZnNpemUgPSAoc2l6ZW9mKHN0cnVjdCBmYnJfZGVzYykgKiByeF9yaW5nLT5GYnIwTnVtRW50cmllcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDB4ZmZmOwogCiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKIAkJCQkgICAgYnVmc2l6ZSwKQEAgLTQ5OCw3ICs0OTEsNyBAQAogCS8qIEZyZWUgUGFja2V0IFN0YXR1cyBSaW5nICovCiAJaWYgKHJ4X3JpbmctPnBQU1JpbmdWYSkgewogCQlwa3RTdGF0UmluZ1NpemUgPQotCQkgICAgc2l6ZW9mKFBLVF9TVEFUX0RFU0NfdCkgKiBhZGFwdGVyLT5SeFJpbmcuUHNyTnVtRW50cmllczsKKwkJICAgIHNpemVvZihzdHJ1Y3QgcGt0X3N0YXRfZGVzYykgKiBhZGFwdGVyLT5yeF9yaW5nLlBzck51bUVudHJpZXM7CiAKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBwa3RTdGF0UmluZ1NpemUsCiAJCQkJICAgIHJ4X3JpbmctPnBQU1JpbmdWYSwgcnhfcmluZy0+cFBTUmluZ1BhKTsKQEAgLTUwNywxMiArNTAwLDExIEBACiAJfQogCiAJLyogRnJlZSBhcmVhIG9mIG1lbW9yeSBmb3IgdGhlIHdyaXRlYmFjayBvZiBzdGF0dXMgaW5mb3JtYXRpb24gKi8KLQlpZiAocnhfcmluZy0+cFJ4U3RhdHVzVmEpIHsKKwlpZiAocnhfcmluZy0+cnhfc3RhdHVzX2Jsb2NrKSB7CiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKLQkJCQlzaXplb2YoUlhfU1RBVFVTX0JMT0NLX3QpLAotCQkJCXJ4X3JpbmctPnBSeFN0YXR1c1ZhLCByeF9yaW5nLT5wUnhTdGF0dXNQYSk7Ci0KLQkJcnhfcmluZy0+cFJ4U3RhdHVzVmEgPSBOVUxMOworCQkJc2l6ZW9mKHN0cnVjdCByeF9zdGF0dXNfYmxvY2spLAorCQkJcnhfcmluZy0+cnhfc3RhdHVzX2Jsb2NrLCByeF9yaW5nLT5yeF9zdGF0dXNfYnVzKTsKKyAgICAgICAgCXJ4X3JpbmctPnJ4X3N0YXR1c19ibG9jayA9IE5VTEw7CiAJfQogCiAJLyogRnJlZSByZWNlaXZlIGJ1ZmZlciBwb29sICovCkBAIC01MjcsMTAgKzUxOSwxMCBAQAogCiAJLyogRnJlZSB0aGUgRkJSIExvb2t1cCBUYWJsZSAqLwogI2lmZGVmIFVTRV9GQlIwCi0Ja2ZyZWUocnhfcmluZy0+RmJyWzBdKTsKKwlrZnJlZShyeF9yaW5nLT5mYnJbMF0pOwogI2VuZGlmCiAKLQlrZnJlZShyeF9yaW5nLT5GYnJbMV0pOworCWtmcmVlKHJ4X3JpbmctPmZiclsxXSk7CiAKIAkvKiBSZXNldCBDb3VudGVycyAqLwogCXJ4X3JpbmctPm5SZWFkeVJlY3YgPSAwOwpAQCAtNTQ4LDEwICs1NDAsMTAgQEAKIAlQTVBfUkZEIHJmZCA9IE5VTEw7CiAJdTMyIHJmZGN0OwogCXUzMiBudW1yZmQgPSAwOwotCVJYX1JJTkdfdCAqcnhfcmluZyA9IE5VTEw7CisJc3RydWN0IHJ4X3JpbmcgKnJ4X3Jpbmc7CiAKIAkvKiBTZXR1cCBzb21lIGNvbnZlbmllbmNlIHBvaW50ZXJzICovCi0JcnhfcmluZyA9IChSWF9SSU5HX3QgKikgJmFkYXB0ZXItPlJ4UmluZzsKKwlyeF9yaW5nID0gJmFkYXB0ZXItPnJ4X3Jpbmc7CiAKIAkvKiBTZXR1cCBlYWNoIFJGRCAqLwogCWZvciAocmZkY3QgPSAwOyByZmRjdCA8IHJ4X3JpbmctPk51bVJmZDsgcmZkY3QrKykgewpAQCAtNTk0LDkgKzU4Niw5IEBACiAgKi8KIHZvaWQgQ29uZmlnUnhEbWFSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqZXRkZXYpCiB7Ci0Jc3RydWN0IF9SWERNQV90IF9faW9tZW0gKnJ4X2RtYSA9ICZldGRldi0+cmVncy0+cnhkbWE7Ci0Jc3RydWN0IF9yeF9yaW5nX3QgKnJ4X2xvY2FsID0gJmV0ZGV2LT5SeFJpbmc7Ci0JUEZCUl9ERVNDX3QgZmJyX2VudHJ5OworCXN0cnVjdCByeGRtYV9yZWdzIF9faW9tZW0gKnJ4X2RtYSA9ICZldGRldi0+cmVncy0+cnhkbWE7CisJc3RydWN0IHJ4X3JpbmcgKnJ4X2xvY2FsID0gJmV0ZGV2LT5yeF9yaW5nOworCXN0cnVjdCBmYnJfZGVzYyAqZmJyX2VudHJ5OwogCXUzMiBlbnRyeTsKIAl1MzIgcHNyX251bV9kZXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTYxMSwxMSArNjAzLDExIEBACiAJICogYXJlIGV2ZXIgcmV0dXJuZWQsIG1ha2Ugc3VyZSB0aGUgaGlnaCBwYXJ0IGlzIHJldHJpZXZlZCBoZXJlCiAJICogYmVmb3JlIHN0b3JpbmcgdGhlIGFkanVzdGVkIGFkZHJlc3MuCiAJICovCi0Jd3JpdGVsKCh1MzIpICgodTY0KXJ4X2xvY2FsLT5wUnhTdGF0dXNQYSA+PiAzMiksCisJd3JpdGVsKCh1MzIpICgodTY0KXJ4X2xvY2FsLT5yeF9zdGF0dXNfYnVzID4+IDMyKSwKIAkgICAgICAgJnJ4X2RtYS0+ZG1hX3diX2Jhc2VfaGkpOwotCXdyaXRlbCgodTMyKSByeF9sb2NhbC0+cFJ4U3RhdHVzUGEsICZyeF9kbWEtPmRtYV93Yl9iYXNlX2xvKTsKKwl3cml0ZWwoKHUzMikgcnhfbG9jYWwtPnJ4X3N0YXR1c19idXMsICZyeF9kbWEtPmRtYV93Yl9iYXNlX2xvKTsKIAotCW1lbXNldChyeF9sb2NhbC0+cFJ4U3RhdHVzVmEsIDAsIHNpemVvZihSWF9TVEFUVVNfQkxPQ0tfdCkpOworCW1lbXNldChyeF9sb2NhbC0+cnhfc3RhdHVzX2Jsb2NrLCAwLCBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1c19ibG9jaykpOwogCiAJLyogU2V0IHRoZSBhZGRyZXNzIGFuZCBwYXJhbWV0ZXJzIG9mIHRoZSBwYWNrZXQgc3RhdHVzIHJpbmcgaW50byB0aGUKIAkgKiAxMzEwJ3MgcmVnaXN0ZXJzCkBAIC02MzYsMTEgKzYyOCwxMSBAQAogCXJ4X2xvY2FsLT5sb2NhbF9wc3JfZnVsbCA9IDA7CiAKIAkvKiBOb3cncyB0aGUgYmVzdCB0aW1lIHRvIGluaXRpYWxpemUgRkJSMSBjb250ZW50cyAqLwotCWZicl9lbnRyeSA9IChQRkJSX0RFU0NfdCkgcnhfbG9jYWwtPnBGYnIxUmluZ1ZhOworCWZicl9lbnRyeSA9IChzdHJ1Y3QgZmJyX2Rlc2MgKikgcnhfbG9jYWwtPnBGYnIxUmluZ1ZhOwogCWZvciAoZW50cnkgPSAwOyBlbnRyeSA8IHJ4X2xvY2FsLT5GYnIxTnVtRW50cmllczsgZW50cnkrKykgewotCQlmYnJfZW50cnktPmFkZHJfaGkgPSByeF9sb2NhbC0+RmJyWzFdLT5QQUhpZ2hbZW50cnldOwotCQlmYnJfZW50cnktPmFkZHJfbG8gPSByeF9sb2NhbC0+RmJyWzFdLT5QQUxvd1tlbnRyeV07Ci0JCWZicl9lbnRyeS0+d29yZDIuYml0cy5iaSA9IGVudHJ5OworCQlmYnJfZW50cnktPmFkZHJfaGkgPSByeF9sb2NhbC0+ZmJyWzFdLT5idXNfaGlnaFtlbnRyeV07CisJCWZicl9lbnRyeS0+YWRkcl9sbyA9IHJ4X2xvY2FsLT5mYnJbMV0tPmJ1c19sb3dbZW50cnldOworCQlmYnJfZW50cnktPndvcmQyID0gZW50cnk7CiAJCWZicl9lbnRyeSsrOwogCX0KIApAQCAtNjYxLDExICs2NTMsMTEgQEAKIAogI2lmZGVmIFVTRV9GQlIwCiAJLyogTm93J3MgdGhlIGJlc3QgdGltZSB0byBpbml0aWFsaXplIEZCUjAgY29udGVudHMgKi8KLQlmYnJfZW50cnkgPSAoUEZCUl9ERVNDX3QpIHJ4X2xvY2FsLT5wRmJyMFJpbmdWYTsKKwlmYnJfZW50cnkgPSAoc3RydWN0IGZicl9kZXNjICopIHJ4X2xvY2FsLT5wRmJyMFJpbmdWYTsKIAlmb3IgKGVudHJ5ID0gMDsgZW50cnkgPCByeF9sb2NhbC0+RmJyME51bUVudHJpZXM7IGVudHJ5KyspIHsKLQkJZmJyX2VudHJ5LT5hZGRyX2hpID0gcnhfbG9jYWwtPkZiclswXS0+UEFIaWdoW2VudHJ5XTsKLQkJZmJyX2VudHJ5LT5hZGRyX2xvID0gcnhfbG9jYWwtPkZiclswXS0+UEFMb3dbZW50cnldOwotCQlmYnJfZW50cnktPndvcmQyLmJpdHMuYmkgPSBlbnRyeTsKKwkJZmJyX2VudHJ5LT5hZGRyX2hpID0gcnhfbG9jYWwtPmZiclswXS0+YnVzX2hpZ2hbZW50cnldOworCQlmYnJfZW50cnktPmFkZHJfbG8gPSByeF9sb2NhbC0+ZmJyWzBdLT5idXNfbG93W2VudHJ5XTsKKwkJZmJyX2VudHJ5LT53b3JkMiA9IGVudHJ5OwogCQlmYnJfZW50cnkrKzsKIAl9CiAKQEAgLTcyMSwxOCArNzEzLDE3IEBACiAgKi8KIHZvaWQgZXQxMzF4X3J4X2RtYV9kaXNhYmxlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqZXRkZXYpCiB7Ci0JUlhETUFfQ1NSX3QgY3NyOwotCisgICAgICAgIHUzMiBjc3I7CiAJLyogU2V0dXAgdGhlIHJlY2VpdmUgZG1hIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KLQl3cml0ZWwoMHgwMDAwMjAwMSwgJmV0ZGV2LT5yZWdzLT5yeGRtYS5jc3IudmFsdWUpOwotCWNzci52YWx1ZSA9IHJlYWRsKCZldGRldi0+cmVncy0+cnhkbWEuY3NyLnZhbHVlKTsKLQlpZiAoY3NyLmJpdHMuaGFsdF9zdGF0dXMgIT0gMSkgeworCXdyaXRlbCgweDAwMDAyMDAxLCAmZXRkZXYtPnJlZ3MtPnJ4ZG1hLmNzcik7CisJY3NyID0gcmVhZGwoJmV0ZGV2LT5yZWdzLT5yeGRtYS5jc3IpOworCWlmICgoY3NyICYgMHgwMDAyMDAwMCkgIT0gMSkgewkvKiBDaGVjayBoYWx0IHN0YXR1cyAoYml0IDE3KSAqLwogCQl1ZGVsYXkoNSk7Ci0JCWNzci52YWx1ZSA9IHJlYWRsKCZldGRldi0+cmVncy0+cnhkbWEuY3NyLnZhbHVlKTsKLQkJaWYgKGNzci5iaXRzLmhhbHRfc3RhdHVzICE9IDEpCisJCWNzciA9IHJlYWRsKCZldGRldi0+cmVncy0+cnhkbWEuY3NyKTsKKwkJaWYgKChjc3IgJiAweDAwMDIwMDAwKSAhPSAxKQogCQkJZGV2X2VycigmZXRkZXYtPnBkZXYtPmRldiwKLQkJCQkiUlggRG1hIGZhaWxlZCB0byBlbnRlciBoYWx0IHN0YXRlLiBDU1IgMHglMDh4XG4iLAotCQkJCWNzci52YWx1ZSk7CisJCQkiUlggRG1hIGZhaWxlZCB0byBlbnRlciBoYWx0IHN0YXRlLiBDU1IgMHglMDh4XG4iLAorCQkJCWNzcik7CiAJfQogfQogCkBAIC03NDMsMzQgKzczNCwzMyBAQAogdm9pZCBldDEzMXhfcnhfZG1hX2VuYWJsZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmV0ZGV2KQogewogCS8qIFNldHVwIHRoZSByZWNlaXZlIGRtYSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGZvciBub3JtYWwgb3BlcmF0aW9uICovCi0JUlhETUFfQ1NSX3QgY3NyID0geyAwIH07CisJdTMyIGNzciA9ICAweDIwMDA7CS8qIEZCUjEgZW5hYmxlICovCiAKLQljc3IuYml0cy5mYnIxX2VuYWJsZSA9IDE7Ci0JaWYgKGV0ZGV2LT5SeFJpbmcuRmJyMUJ1ZmZlclNpemUgPT0gNDA5NikKLQkJY3NyLmJpdHMuZmJyMV9zaXplID0gMTsKLQllbHNlIGlmIChldGRldi0+UnhSaW5nLkZicjFCdWZmZXJTaXplID09IDgxOTIpCi0JCWNzci5iaXRzLmZicjFfc2l6ZSA9IDI7Ci0JZWxzZSBpZiAoZXRkZXYtPlJ4UmluZy5GYnIxQnVmZmVyU2l6ZSA9PSAxNjM4NCkKLQkJY3NyLmJpdHMuZmJyMV9zaXplID0gMzsKKwlpZiAoZXRkZXYtPnJ4X3JpbmcuRmJyMUJ1ZmZlclNpemUgPT0gNDA5NikKKwkJY3NyIHw9IDB4MDgwMDsKKwllbHNlIGlmIChldGRldi0+cnhfcmluZy5GYnIxQnVmZmVyU2l6ZSA9PSA4MTkyKQorCQljc3IgfD0gMHgxMDAwOworCWVsc2UgaWYgKGV0ZGV2LT5yeF9yaW5nLkZicjFCdWZmZXJTaXplID09IDE2Mzg0KQorCQljc3IgfD0gMHgxODAwOwogI2lmZGVmIFVTRV9GQlIwCi0JY3NyLmJpdHMuZmJyMF9lbmFibGUgPSAxOwotCWlmIChldGRldi0+UnhSaW5nLkZicjBCdWZmZXJTaXplID09IDI1NikKLQkJY3NyLmJpdHMuZmJyMF9zaXplID0gMTsKLQllbHNlIGlmIChldGRldi0+UnhSaW5nLkZicjBCdWZmZXJTaXplID09IDUxMikKLQkJY3NyLmJpdHMuZmJyMF9zaXplID0gMjsKLQllbHNlIGlmIChldGRldi0+UnhSaW5nLkZicjBCdWZmZXJTaXplID09IDEwMjQpCi0JCWNzci5iaXRzLmZicjBfc2l6ZSA9IDM7CisgICAgICAgIGNzciB8PSAweDA0MDA7CQkvKiBGQlIwIGVuYWJsZSAqLworCWlmIChldGRldi0+cnhfcmluZy5GYnIwQnVmZmVyU2l6ZSA9PSAyNTYpCisJICAgICAgICBjc3IgfD0gMHgwMTAwOworCWVsc2UgaWYgKGV0ZGV2LT5yeF9yaW5nLkZicjBCdWZmZXJTaXplID09IDUxMikKKwkJY3NyIHw9IDB4MDIwMDsKKwllbHNlIGlmIChldGRldi0+cnhfcmluZy5GYnIwQnVmZmVyU2l6ZSA9PSAxMDI0KQorCQljc3IgfD0gMHgwMzAwOwogI2VuZGlmCi0Jd3JpdGVsKGNzci52YWx1ZSwgJmV0ZGV2LT5yZWdzLT5yeGRtYS5jc3IudmFsdWUpOworCXdyaXRlbChjc3IsICZldGRldi0+cmVncy0+cnhkbWEuY3NyKTsKIAotCWNzci52YWx1ZSA9IHJlYWRsKCZldGRldi0+cmVncy0+cnhkbWEuY3NyLnZhbHVlKTsKLQlpZiAoY3NyLmJpdHMuaGFsdF9zdGF0dXMgIT0gMCkgeworCWNzciA9IHJlYWRsKCZldGRldi0+cmVncy0+cnhkbWEuY3NyKTsKKwlpZiAoKGNzciAmIDB4MDAwMjAwMDApICE9IDApIHsKIAkJdWRlbGF5KDUpOwotCQljc3IudmFsdWUgPSByZWFkbCgmZXRkZXYtPnJlZ3MtPnJ4ZG1hLmNzci52YWx1ZSk7Ci0JCWlmIChjc3IuYml0cy5oYWx0X3N0YXR1cyAhPSAwKSB7CisJCWNzciA9IHJlYWRsKCZldGRldi0+cmVncy0+cnhkbWEuY3NyKTsKKyAgICAgICAgCWlmICgoY3NyICYgMHgwMDAyMDAwMCkgIT0gMCkgewogCQkJZGV2X2VycigmZXRkZXYtPnBkZXYtPmRldiwKIAkJCSAgICAiUlggRG1hIGZhaWxlZCB0byBleGl0IGhhbHQgc3RhdGUuICBDU1IgMHglMDh4XG4iLAotCQkJCWNzci52YWx1ZSk7CisJCQkJY3NyKTsKIAkJfQogCX0KIH0KQEAgLTc4OCw0NiArNzc4LDQ0IEBACiAgKi8KIFBNUF9SRkQgbmljX3J4X3BrdHMoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpldGRldikKIHsKLQlzdHJ1Y3QgX3J4X3JpbmdfdCAqcnhfbG9jYWwgPSAmZXRkZXYtPlJ4UmluZzsKLQlQUlhfU1RBVFVTX0JMT0NLX3Qgc3RhdHVzOwotCVBQS1RfU1RBVF9ERVNDX3QgcHNyOworCXN0cnVjdCByeF9yaW5nICpyeF9sb2NhbCA9ICZldGRldi0+cnhfcmluZzsKKwlzdHJ1Y3Qgcnhfc3RhdHVzX2Jsb2NrICpzdGF0dXM7CisJc3RydWN0IHBrdF9zdGF0X2Rlc2MgKnBzcjsKIAlQTVBfUkZEIHJmZDsKIAl1MzIgaTsKLQl1aW50OF90ICpidWY7CisJdTggKmJ1ZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7Ci0JdWludDhfdCByaW5kZXg7Ci0JdWludDE2X3QgYmluZGV4OworCXU4IHJpbmRleDsKKwl1MTYgYmluZGV4OwogCXUzMiBsZW47Ci0JUEtUX1NUQVRfREVTQ19XT1JEMF90IFdvcmQwOworCXUzMiB3b3JkMDsKKwl1MzIgd29yZDE7CiAKIAkvKiBSWCBTdGF0dXMgYmxvY2sgaXMgd3JpdHRlbiBieSB0aGUgRE1BIGVuZ2luZSBwcmlvciB0byBldmVyeQogCSAqIGludGVycnVwdC4gSXQgY29udGFpbnMgdGhlIG5leHQgdG8gYmUgdXNlZCBlbnRyeSBpbiB0aGUgUGFja2V0CiAJICogU3RhdHVzIFJpbmcsIGFuZCBhbHNvIHRoZSB0d28gRnJlZSBCdWZmZXIgcmluZ3MuCiAJICovCi0Jc3RhdHVzID0gKFBSWF9TVEFUVVNfQkxPQ0tfdCkgcnhfbG9jYWwtPnBSeFN0YXR1c1ZhOworCXN0YXR1cyA9IHJ4X2xvY2FsLT5yeF9zdGF0dXNfYmxvY2s7CisJd29yZDEgPSBzdGF0dXMtPldvcmQxID4+IDE2OwkvKiBHZXQgdGhlIHVzZWZ1bCBiaXRzICovCiAKLQkvKiBGSVhNRTogdGlkeSBsYXRlciB3aGVuIGNvbnZlcnNpb25zIGNvbXBsZXRlICovCi0JaWYgKHN0YXR1cy0+V29yZDEuYml0cy5QU1JvZmZzZXQgPT0KLQkJCShyeF9sb2NhbC0+bG9jYWxfcHNyX2Z1bGwgJiAweEZGRikgJiYKLQkJCXN0YXR1cy0+V29yZDEuYml0cy5QU1J3cmFwID09Ci0JCQkoKHJ4X2xvY2FsLT5sb2NhbF9wc3JfZnVsbCA+PiAxMikgJiAxKSkgeworCS8qIENoZWNrIHRoZSBQU1IgYW5kIHdyYXAgYml0cyBkbyBub3QgbWF0Y2ggKi8KKwlpZiAoKHdvcmQxICYgMHgxRkZGKSA9PSAocnhfbG9jYWwtPmxvY2FsX3Bzcl9mdWxsICYgMHgxRkZGKSkKIAkJLyogTG9va3MgbGlrZSB0aGlzIHJpbmcgaXMgbm90IHVwZGF0ZWQgeWV0ICovCiAJCXJldHVybiBOVUxMOwotCX0KIAogCS8qIFRoZSBwYWNrZXQgc3RhdHVzIHJpbmcgaW5kaWNhdGVzIHRoYXQgZGF0YSBpcyBhdmFpbGFibGUuICovCi0JcHNyID0gKFBQS1RfU1RBVF9ERVNDX3QpIChyeF9sb2NhbC0+cFBTUmluZ1ZhKSArCisJcHNyID0gKHN0cnVjdCBwa3Rfc3RhdF9kZXNjICopIChyeF9sb2NhbC0+cFBTUmluZ1ZhKSArCiAJCQkocnhfbG9jYWwtPmxvY2FsX3Bzcl9mdWxsICYgMHhGRkYpOwogCiAJLyogR3JhYiBhbnkgaW5mb3JtYXRpb24gdGhhdCBpcyByZXF1aXJlZCBvbmNlIHRoZSBQU1IgaXMKIAkgKiBhZHZhbmNlZCwgc2luY2Ugd2UgY2FuIG5vIGxvbmdlciByZWx5IG9uIHRoZSBtZW1vcnkgYmVpbmcKIAkgKiBhY2N1cmF0ZQogCSAqLwotCWxlbiA9IHBzci0+d29yZDEuYml0cy5sZW5ndGg7Ci0JcmluZGV4ID0gKHVpbnQ4X3QpIHBzci0+d29yZDEuYml0cy5yaTsKLQliaW5kZXggPSAodWludDE2X3QpIHBzci0+d29yZDEuYml0cy5iaTsKLQlXb3JkMCA9IHBzci0+d29yZDA7CisJbGVuID0gcHNyLT53b3JkMSAmIDB4RkZGRjsKKwlyaW5kZXggPSAocHNyLT53b3JkMSA+PiAyNikgJiAweDAzOworCWJpbmRleCA9IChwc3ItPndvcmQxID4+IDE2KSAmIDB4M0ZGOworCXdvcmQwID0gcHNyLT53b3JkMDsKIAogCS8qIEluZGljYXRlIHRoYXQgd2UgaGF2ZSB1c2VkIHRoaXMgUFNSIGVudHJ5LiAqLwogCS8qIEZJWE1FIHdyYXAgMTIgKi8KQEAgLTg0Miw5ICs4MzAsOCBAQAogCSAgICAgICAmZXRkZXYtPnJlZ3MtPnJ4ZG1hLnBzcl9mdWxsX29mZnNldCk7CiAKICNpZm5kZWYgVVNFX0ZCUjAKLQlpZiAocmluZGV4ICE9IDEpIHsKKwlpZiAocmluZGV4ICE9IDEpCiAJCXJldHVybiBOVUxMOwotCX0KICNlbmRpZgogCiAjaWZkZWYgVVNFX0ZCUjAKQEAgLTg5OSw3ICs4ODYsNyBAQAogCiAJaWYgKGxlbikgewogCQlpZiAoZXRkZXYtPlJlcGxpY2FQaHlMb29wYmsgPT0gMSkgewotCQkJYnVmID0gcnhfbG9jYWwtPkZicltyaW5kZXhdLT5WYVtiaW5kZXhdOworCQkJYnVmID0gcnhfbG9jYWwtPmZicltyaW5kZXhdLT52aXJ0W2JpbmRleF07CiAKIAkJCWlmIChtZW1jbXAoJmJ1Zls2XSwgJmV0ZGV2LT5DdXJyZW50QWRkcmVzc1swXSwKIAkJCQkgICBFVEhfQUxFTikgPT0gMCkgewpAQCAtOTExLDggKzg5OCw4IEBACiAJCX0KIAogCQkvKiBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhIG11bHRpY2FzdCBwYWNrZXQgY29taW5nIGluICovCi0JCWlmICgoV29yZDAudmFsdWUgJiBBTENBVEVMX01VTFRJQ0FTVF9QS1QpICYmCi0JCSAgICAhKFdvcmQwLnZhbHVlICYgQUxDQVRFTF9CUk9BRENBU1RfUEtUKSkgeworCQlpZiAoKHdvcmQwICYgQUxDQVRFTF9NVUxUSUNBU1RfUEtUKSAmJgorCQkgICAgISh3b3JkMCAmIEFMQ0FURUxfQlJPQURDQVNUX1BLVCkpIHsKIAkJCS8qIFByb21pc2N1b3VzIG1vZGUgYW5kIE11bHRpY2FzdCBtb2RlIGFyZQogCQkJICogbm90IG11dHVhbGx5IGV4Y2x1c2l2ZSBhcyB3YXMgZmlyc3QKIAkJCSAqIHRob3VnaHQuICBJIGd1ZXNzIFByb21pc2N1b3VzIGlzIGp1c3QKQEAgLTkyMyw4ICs5MTAsOCBAQAogCQkJaWYgKChldGRldi0+UGFja2V0RmlsdGVyICYgRVQxMzFYX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVCkKIAkJCSAgICAmJiAhKGV0ZGV2LT5QYWNrZXRGaWx0ZXIgJiBFVDEzMVhfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVMpCiAJCQkgICAgJiYgIShldGRldi0+UGFja2V0RmlsdGVyICYgRVQxMzFYX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QpKSB7Ci0JCQkJYnVmID0gcnhfbG9jYWwtPkZicltyaW5kZXhdLT4KLQkJCQkJCVZhW2JpbmRleF07CisJCQkJYnVmID0gcnhfbG9jYWwtPmZicltyaW5kZXhdLT4KKwkJCQkJCXZpcnRbYmluZGV4XTsKIAogCQkJCS8qIExvb3AgdGhyb3VnaCBvdXIgbGlzdCB0byBzZWUgaWYgdGhlCiAJCQkJICogZGVzdGluYXRpb24gYWRkcmVzcyBvZiB0aGlzIHBhY2tldApAQCAtOTYzLDcgKzk1MCw3IEBACiAKIAkJCWlmIChsZW4gPiAwKQogCQkJCWV0ZGV2LT5TdGF0cy5tdWx0aXJjdisrOwotCQl9IGVsc2UgaWYgKFdvcmQwLnZhbHVlICYgQUxDQVRFTF9CUk9BRENBU1RfUEtUKQorCQl9IGVsc2UgaWYgKHdvcmQwICYgQUxDQVRFTF9CUk9BRENBU1RfUEtUKQogCQkJZXRkZXYtPlN0YXRzLmJyZGNzdHJjdisrOwogCQllbHNlCiAJCQkvKiBOb3Qgc3VyZSB3aGF0IHRoaXMgY291bnRlciBtZWFzdXJlcyBpbgpAQCAtOTkwLDcgKzk3Nyw3IEBACiAJCWV0ZGV2LT5uZXRfc3RhdHMucnhfYnl0ZXMgKz0gcmZkLT5QYWNrZXRTaXplOwogCiAJCW1lbWNweShza2JfcHV0KHNrYiwgcmZkLT5QYWNrZXRTaXplKSwKLQkJICAgICAgIHJ4X2xvY2FsLT5GYnJbcmluZGV4XS0+VmFbYmluZGV4XSwKKwkJICAgICAgIHJ4X2xvY2FsLT5mYnJbcmluZGV4XS0+dmlydFtiaW5kZXhdLAogCQkgICAgICAgcmZkLT5QYWNrZXRTaXplKTsKIAogCQlza2ItPmRldiA9IGV0ZGV2LT5uZXRkZXY7CkBAIC0xMDE0LDcgKzEwMDEsNyBAQAogICovCiB2b2lkIGV0MTMxeF9yZXNldF9yZWN2KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqZXRkZXYpCiB7Ci0JV0FSTl9PTihsaXN0X2VtcHR5KCZldGRldi0+UnhSaW5nLlJlY3ZMaXN0KSk7CisJV0FSTl9PTihsaXN0X2VtcHR5KCZldGRldi0+cnhfcmluZy5SZWN2TGlzdCkpOwogCiB9CiAKQEAgLTEwMzIsOCArMTAxOSw4IEBACiAKIAkvKiBQcm9jZXNzIHVwIHRvIGF2YWlsYWJsZSBSRkQncyAqLwogCXdoaWxlIChjb3VudCA8IE5VTV9QQUNLRVRTX0hBTkRMRUQpIHsKLQkJaWYgKGxpc3RfZW1wdHkoJmV0ZGV2LT5SeFJpbmcuUmVjdkxpc3QpKSB7Ci0JCQlXQVJOX09OKGV0ZGV2LT5SeFJpbmcublJlYWR5UmVjdiAhPSAwKTsKKwkJaWYgKGxpc3RfZW1wdHkoJmV0ZGV2LT5yeF9yaW5nLlJlY3ZMaXN0KSkgeworCQkJV0FSTl9PTihldGRldi0+cnhfcmluZy5uUmVhZHlSZWN2ICE9IDApOwogCQkJZG9uZSA9IGZhbHNlOwogCQkJYnJlYWs7CiAJCX0KQEAgLTEwNTgsNyArMTA0NSw3IEBACiAJCWV0ZGV2LT5TdGF0cy5pcGFja2V0cysrOwogCiAJCS8qIFNldCB0aGUgc3RhdHVzIG9uIHRoZSBwYWNrZXQsIGVpdGhlciByZXNvdXJjZXMgb3Igc3VjY2VzcyAqLwotCQlpZiAoZXRkZXYtPlJ4UmluZy5uUmVhZHlSZWN2IDwgUkZEX0xPV19XQVRFUl9NQVJLKSB7CisJCWlmIChldGRldi0+cnhfcmluZy5uUmVhZHlSZWN2IDwgUkZEX0xPV19XQVRFUl9NQVJLKSB7CiAJCQlkZXZfd2FybigmZXRkZXYtPnBkZXYtPmRldiwKIAkJCQkgICAgIlJGRCdzIGFyZSBydW5uaW5nIG91dFxuIik7CiAJCX0KQEAgLTEwNjYsMTIgKzEwNTMsMTIgQEAKIAl9CiAKIAlpZiAoY291bnQgPT0gTlVNX1BBQ0tFVFNfSEFORExFRCB8fCAhZG9uZSkgewotCQlldGRldi0+UnhSaW5nLlVuZmluaXNoZWRSZWNlaXZlcyA9IHRydWU7CisJCWV0ZGV2LT5yeF9yaW5nLlVuZmluaXNoZWRSZWNlaXZlcyA9IHRydWU7CiAJCXdyaXRlbChQQVJNX1RYX1RJTUVfSU5UX0RFRiAqIE5BTk9fSU5fQV9NSUNSTywKIAkJICAgICAgICZldGRldi0+cmVncy0+Z2xvYmFsLndhdGNoZG9nX3RpbWVyKTsKIAl9IGVsc2UKIAkJLyogV2F0Y2hkb2cgdGltZXIgd2lsbCBkaXNhYmxlIGl0c2VsZiBpZiBhcHByb3ByaWF0ZS4gKi8KLQkJZXRkZXYtPlJ4UmluZy5VbmZpbmlzaGVkUmVjZWl2ZXMgPSBmYWxzZTsKKwkJZXRkZXYtPnJ4X3JpbmcuVW5maW5pc2hlZFJlY2VpdmVzID0gZmFsc2U7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyIGJ1bXBfZmJyKHUzMiAqZmJyLCB1MzIgbGltaXQpCkBAIC0xMDk5LDEwICsxMDg2LDEwIEBACiAgKi8KIHZvaWQgbmljX3JldHVybl9yZmQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpldGRldiwgUE1QX1JGRCByZmQpCiB7Ci0Jc3RydWN0IF9yeF9yaW5nX3QgKnJ4X2xvY2FsID0gJmV0ZGV2LT5SeFJpbmc7Ci0Jc3RydWN0IF9SWERNQV90IF9faW9tZW0gKnJ4X2RtYSA9ICZldGRldi0+cmVncy0+cnhkbWE7Ci0JdWludDE2X3QgYmkgPSByZmQtPmJ1ZmZlcmluZGV4OwotCXVpbnQ4X3QgcmkgPSByZmQtPnJpbmdpbmRleDsKKwlzdHJ1Y3QgcnhfcmluZyAqcnhfbG9jYWwgPSAmZXRkZXYtPnJ4X3Jpbmc7CisJc3RydWN0IHJ4ZG1hX3JlZ3MgX19pb21lbSAqcnhfZG1hID0gJmV0ZGV2LT5yZWdzLT5yeGRtYTsKKwl1MTYgYmkgPSByZmQtPmJ1ZmZlcmluZGV4OworCXU4IHJpID0gcmZkLT5yaW5naW5kZXg7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIFdlIGRvbid0IHVzZSBhbnkgb2YgdGhlIE9PQiBkYXRhIGJlc2lkZXMgc3RhdHVzLiBPdGhlcndpc2UsIHdlCkBAIC0xMTE2LDE3ICsxMTAzLDE3IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZldGRldi0+RmJyTG9jaywgZmxhZ3MpOwogCiAJCWlmIChyaSA9PSAxKSB7Ci0JCQlQRkJSX0RFU0NfdCBuZXh0ID0KLQkJCSAgICAoUEZCUl9ERVNDX3QpIChyeF9sb2NhbC0+cEZicjFSaW5nVmEpICsKLQkJCSAgICBJTkRFWDEwKHJ4X2xvY2FsLT5sb2NhbF9GYnIxX2Z1bGwpOworCQkJc3RydWN0IGZicl9kZXNjICpuZXh0ID0KKwkJCSAgICAoc3RydWN0IGZicl9kZXNjICopIChyeF9sb2NhbC0+cEZicjFSaW5nVmEpICsKKyAgICAgICAgICAgICAgICAJCSAgICAgICAgICAgIElOREVYMTAocnhfbG9jYWwtPmxvY2FsX0ZicjFfZnVsbCk7CiAKIAkJCS8qIEhhbmRsZSB0aGUgRnJlZSBCdWZmZXIgUmluZyBhZHZhbmNlbWVudCBoZXJlLiBXcml0ZQogCQkJICogdGhlIFBBIC8gQnVmZmVyIEluZGV4IGZvciB0aGUgcmV0dXJuZWQgYnVmZmVyIGludG8KIAkJCSAqIHRoZSBvbGRlc3QgKG5leHQgdG8gYmUgZnJlZWQpRkJSIGVudHJ5CiAJCQkgKi8KLQkJCW5leHQtPmFkZHJfaGkgPSByeF9sb2NhbC0+RmJyWzFdLT5QQUhpZ2hbYmldOwotCQkJbmV4dC0+YWRkcl9sbyA9IHJ4X2xvY2FsLT5GYnJbMV0tPlBBTG93W2JpXTsKLQkJCW5leHQtPndvcmQyLnZhbHVlID0gYmk7CisJCQluZXh0LT5hZGRyX2hpID0gcnhfbG9jYWwtPmZiclsxXS0+YnVzX2hpZ2hbYmldOworCQkJbmV4dC0+YWRkcl9sbyA9IHJ4X2xvY2FsLT5mYnJbMV0tPmJ1c19sb3dbYmldOworCQkJbmV4dC0+d29yZDIgPSBiaTsKIAogCQkJd3JpdGVsKGJ1bXBfZmJyKCZyeF9sb2NhbC0+bG9jYWxfRmJyMV9mdWxsLAogCQkJCXJ4X2xvY2FsLT5GYnIxTnVtRW50cmllcyAtIDEpLApAQCAtMTEzNCwxNyArMTEyMSwxNyBAQAogCQl9CiAjaWZkZWYgVVNFX0ZCUjAKIAkJZWxzZSB7Ci0JCQlQRkJSX0RFU0NfdCBuZXh0ID0KLQkJCSAgICAoUEZCUl9ERVNDX3QpIHJ4X2xvY2FsLT5wRmJyMFJpbmdWYSArCi0JCQkgICAgSU5ERVgxMChyeF9sb2NhbC0+bG9jYWxfRmJyMF9mdWxsKTsKKwkJCXN0cnVjdCBmYnJfZGVzYyAqbmV4dCA9IChzdHJ1Y3QgZmJyX2Rlc2MgKikKKwkJCQlyeF9sb2NhbC0+cEZicjBSaW5nVmEgKworCQkJCQlJTkRFWDEwKHJ4X2xvY2FsLT5sb2NhbF9GYnIwX2Z1bGwpOwogCiAJCQkvKiBIYW5kbGUgdGhlIEZyZWUgQnVmZmVyIFJpbmcgYWR2YW5jZW1lbnQgaGVyZS4gV3JpdGUKIAkJCSAqIHRoZSBQQSAvIEJ1ZmZlciBJbmRleCBmb3IgdGhlIHJldHVybmVkIGJ1ZmZlciBpbnRvCiAJCQkgKiB0aGUgb2xkZXN0IChuZXh0IHRvIGJlIGZyZWVkKSBGQlIgZW50cnkKIAkJCSAqLwotCQkJbmV4dC0+YWRkcl9oaSA9IHJ4X2xvY2FsLT5GYnJbMF0tPlBBSGlnaFtiaV07Ci0JCQluZXh0LT5hZGRyX2xvID0gcnhfbG9jYWwtPkZiclswXS0+UEFMb3dbYmldOwotCQkJbmV4dC0+d29yZDIudmFsdWUgPSBiaTsKKwkJCW5leHQtPmFkZHJfaGkgPSByeF9sb2NhbC0+ZmJyWzBdLT5idXNfaGlnaFtiaV07CisJCQluZXh0LT5hZGRyX2xvID0gcnhfbG9jYWwtPmZiclswXS0+YnVzX2xvd1tiaV07CisJCQluZXh0LT53b3JkMiA9IGJpOwogCiAJCQl3cml0ZWwoYnVtcF9mYnIoJnJ4X2xvY2FsLT5sb2NhbF9GYnIwX2Z1bGwsCiAJCQkJCXJ4X2xvY2FsLT5GYnIwTnVtRW50cmllcyAtIDEpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmgKaW5kZXggNjk1MTQ1OS4uY2E4NGE5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5oCkBAIC05MSwxMjAgKzkxLDYwIEBACiAjZGVmaW5lIEFMQ0FURUxfQlJPQURDQVNUX1BLVAkweDAyMDAwMDAwCiAKIC8qIHR5cGVkZWZzIGZvciBGcmVlIEJ1ZmZlciBEZXNjcmlwdG9ycyAqLwotdHlwZWRlZiB1bmlvbiBfRkJSX1dPUkQyX3QgewotCXUzMiB2YWx1ZTsKLQlzdHJ1Y3QgewotI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKLQkJdTMyIHJlc2VydmVkOjIyOwkvKiBiaXRzIDEwLTMxICovCi0JCXUzMiBiaToxMDsJCS8qIGJpdHMgMC05KEJ1ZmZlciBJbmRleCkgKi8KLSNlbHNlCi0JCXUzMiBiaToxMDsJCS8qIGJpdHMgMC05KEJ1ZmZlciBJbmRleCkgKi8KLQkJdTMyIHJlc2VydmVkOjIyOwkvKiBiaXQgMTAtMzEgKi8KLSNlbmRpZgotCX0gYml0czsKLX0gRkJSX1dPUkQyX3QsICpQRkJSX1dPUkQyX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IF9GQlJfREVTQ190IHsKK3N0cnVjdCBmYnJfZGVzYworewogCXUzMiBhZGRyX2xvOwogCXUzMiBhZGRyX2hpOwotCUZCUl9XT1JEMl90IHdvcmQyOwotfSBGQlJfREVTQ190LCAqUEZCUl9ERVNDX3Q7CisJdTMyIHdvcmQyOwkJLyogQml0cyAxMC0zMSByZXNlcnZlZCwgMC05IGRlc2NyaXB0b3IgKi8KK307CiAKLS8qIFR5cGVkZWZzIGZvciBQYWNrZXQgU3RhdHVzIFJpbmcgRGVzY3JpcHRvcnMgKi8KLXR5cGVkZWYgdW5pb24gX1BLVF9TVEFUX0RFU0NfV09SRDBfdCB7Ci0JdTMyIHZhbHVlOwotCXN0cnVjdCB7Ci0jaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAotCQkvKiB0b3AgMTYgYml0cyBhcmUgZnJvbSB0aGUgQWxjYXRlbCBTdGF0dXMgV29yZCBhcyBlbnVtZXJhdGVkIGluICovCi0JCS8qIFBFLU1DWE1BQyBEYXRhIFNoZWV0IElQRCBEUzU0IDAyMTAtMSAoYWxzbyBJUEQtRFM4MCAwMjA1LTIpICovCi0jaWYgMAotCQl1MzIgYXN3X3RydW5jOjE7CQkvKiBiaXQgMzEoUnggZnJhbWUgdHJ1bmNhdGVkKSAqLwotI2VuZGlmCi0JCXUzMiBhc3dfbG9uZ19ldnQ6MTsJLyogYml0IDMxKFJ4IGxvbmcgZXZlbnQpICovCi0JCXUzMiBhc3dfVkxBTl90YWc6MTsJLyogYml0IDMwKFZMQU4gdGFnIGRldGVjdGVkKSAqLwotCQl1MzIgYXN3X3Vuc3VwcG9ydGVkX29wOjE7CS8qIGJpdCAyOSh1bnN1cHBvcnRlZCBPUCBjb2RlKSAqLwotCQl1MzIgYXN3X3BhdXNlX2ZyYW1lOjE7CS8qIGJpdCAyOChpcyBhIHBhdXNlIGZyYW1lKSAqLwotCQl1MzIgYXN3X2NvbnRyb2xfZnJhbWU6MTsJLyogYml0IDI3KGlzIGEgY29udHJvbCBmcmFtZSkgKi8KLQkJdTMyIGFzd19kcmliYmxlX25pYmJsZToxOwkvKiBiaXQgMjYoc3B1cmlvdXMgYml0cyBhZnRlciBFT1ApICovCi0JCXUzMiBhc3dfYnJvYWRjYXN0OjE7CS8qIGJpdCAyNShoYXMgYSBicm9hZGNhc3QgYWRkcmVzcykgKi8KLQkJdTMyIGFzd19tdWx0aWNhc3Q6MTsJLyogYml0IDI0KGhhcyBhIG11bHRpY2FzdCBhZGRyZXNzKSAqLwotCQl1MzIgYXN3X09LOjE7CQkvKiBiaXQgMjModmFsaWQgQ1JDICsgbm8gY29kZSBlcnJvcikgKi8KLQkJdTMyIGFzd190b29fbG9uZzoxOwkvKiBiaXQgMjIoZnJhbWUgbGVuZ3RoID4gMTUxOCBieXRlcykgKi8KLQkJdTMyIGFzd19sZW5fY2hrX2VycjoxOwkvKiBiaXQgMjEoZnJhbWUgbGVuZ3RoIGZpZWxkIGluY29ycmVjdCkgKi8KLQkJdTMyIGFzd19DUkNfZXJyOjE7CQkvKiBiaXQgMjAoQ1JDIGVycm9yKSAqLwotCQl1MzIgYXN3X2NvZGVfZXJyOjE7CS8qIGJpdCAxOShvbmUgb3IgbW9yZSBuaWJibGVzIHNpZ25hbGxlZCBhcyBlcnJvcnMpICovCi0JCXUzMiBhc3dfZmFsc2VfY2Fycmllcl9ldmVudDoxOwkvKiBiaXQgMTgoYmFkIGNhcnJpZXIgc2luY2UgbGFzdCBnb29kIHBhY2tldCkgKi8KLQkJdTMyIGFzd19SWF9EVl9ldmVudDoxOwkvKiBiaXQgMTcoc2hvcnQgcmVjZWl2ZSBldmVudCBkZXRlY3RlZCkgKi8KLQkJdTMyIGFzd19wcmV2X3BrdF9kcm9wcGVkOjE7LyogYml0IDE2KGUuZy4gSUZHIHRvbyBzbWFsbCBvbiBwcmV2aW91cykgKi8KLQkJdTMyIHVudXNlZDo1OwkJLyogYml0cyAxMS0xNSAqLwotCQl1MzIgdnA6MTsJCQkvKiBiaXQgMTAoVkxBTiBQYWNrZXQpICovCi0JCXUzMiBqcDoxOwkJCS8qIGJpdCA5KEp1bWJvIFBhY2tldCkgKi8KLQkJdTMyIGZ0OjE7CQkJLyogYml0IDgoRnJhbWUgVHJ1bmNhdGVkKSAqLwotCQl1MzIgZHJvcDoxOwkJLyogYml0IDcoRHJvcCBwYWNrZXQpICovCi0JCXUzMiByeG1hY19lcnJvcjoxOwkJLyogYml0IDYoUlhNQUMgRXJyb3IgSW5kaWNhdG9yKSAqLwotCQl1MzIgd29sOjE7CQkJLyogYml0IDUoV09MIEV2ZW50KSAqLwotCQl1MzIgdGNwcDoxOwkJLyogYml0IDQoVENQIGNoZWNrc3VtIHBhc3MpICovCi0JCXUzMiB0Y3BhOjE7CQkvKiBiaXQgMyhUQ1AgY2hlY2tzdW0gYXNzaXN0KSAqLwotCQl1MzIgaXBwOjE7CQkJLyogYml0IDIoSVAgY2hlY2tzdW0gcGFzcykgKi8KLQkJdTMyIGlwYToxOwkJCS8qIGJpdCAxKElQIGNoZWNrc3VtIGFzc2lzdCkgKi8KLQkJdTMyIGhwOjE7CQkJLyogYml0IDAoaGFzaCBwYXNzKSAqLwotI2Vsc2UKLQkJdTMyIGhwOjE7CQkJLyogYml0IDAoaGFzaCBwYXNzKSAqLwotCQl1MzIgaXBhOjE7CQkJLyogYml0IDEoSVAgY2hlY2tzdW0gYXNzaXN0KSAqLwotCQl1MzIgaXBwOjE7CQkJLyogYml0IDIoSVAgY2hlY2tzdW0gcGFzcykgKi8KLQkJdTMyIHRjcGE6MTsJCS8qIGJpdCAzKFRDUCBjaGVja3N1bSBhc3Npc3QpICovCi0JCXUzMiB0Y3BwOjE7CQkvKiBiaXQgNChUQ1AgY2hlY2tzdW0gcGFzcykgKi8KLQkJdTMyIHdvbDoxOwkJCS8qIGJpdCA1KFdPTCBFdmVudCkgKi8KLQkJdTMyIHJ4bWFjX2Vycm9yOjE7CQkvKiBiaXQgNihSWE1BQyBFcnJvciBJbmRpY2F0b3IpICovCi0JCXUzMiBkcm9wOjE7CQkvKiBiaXQgNyhEcm9wIHBhY2tldCkgKi8KLQkJdTMyIGZ0OjE7CQkJLyogYml0IDgoRnJhbWUgVHJ1bmNhdGVkKSAqLwotCQl1MzIganA6MTsJCQkvKiBiaXQgOShKdW1ibyBQYWNrZXQpICovCi0JCXUzMiB2cDoxOwkJCS8qIGJpdCAxMChWTEFOIFBhY2tldCkgKi8KLQkJdTMyIHVudXNlZDo1OwkJLyogYml0cyAxMS0xNSAqLwotCQl1MzIgYXN3X3ByZXZfcGt0X2Ryb3BwZWQ6MTsvKiBiaXQgMTYoZS5nLiBJRkcgdG9vIHNtYWxsIG9uIHByZXZpb3VzKSAqLwotCQl1MzIgYXN3X1JYX0RWX2V2ZW50OjE7CS8qIGJpdCAxNyhzaG9ydCByZWNlaXZlIGV2ZW50IGRldGVjdGVkKSAqLwotCQl1MzIgYXN3X2ZhbHNlX2NhcnJpZXJfZXZlbnQ6MTsJLyogYml0IDE4KGJhZCBjYXJyaWVyIHNpbmNlIGxhc3QgZ29vZCBwYWNrZXQpICovCi0JCXUzMiBhc3dfY29kZV9lcnI6MTsJLyogYml0IDE5KG9uZSBvciBtb3JlIG5pYmJsZXMgc2lnbmFsbGVkIGFzIGVycm9ycykgKi8KLQkJdTMyIGFzd19DUkNfZXJyOjE7CQkvKiBiaXQgMjAoQ1JDIGVycm9yKSAqLwotCQl1MzIgYXN3X2xlbl9jaGtfZXJyOjE7CS8qIGJpdCAyMShmcmFtZSBsZW5ndGggZmllbGQgaW5jb3JyZWN0KSAqLwotCQl1MzIgYXN3X3Rvb19sb25nOjE7CS8qIGJpdCAyMihmcmFtZSBsZW5ndGggPiAxNTE4IGJ5dGVzKSAqLwotCQl1MzIgYXN3X09LOjE7CQkvKiBiaXQgMjModmFsaWQgQ1JDICsgbm8gY29kZSBlcnJvcikgKi8KLQkJdTMyIGFzd19tdWx0aWNhc3Q6MTsJLyogYml0IDI0KGhhcyBhIG11bHRpY2FzdCBhZGRyZXNzKSAqLwotCQl1MzIgYXN3X2Jyb2FkY2FzdDoxOwkvKiBiaXQgMjUoaGFzIGEgYnJvYWRjYXN0IGFkZHJlc3MpICovCi0JCXUzMiBhc3dfZHJpYmJsZV9uaWJibGU6MTsJLyogYml0IDI2KHNwdXJpb3VzIGJpdHMgYWZ0ZXIgRU9QKSAqLwotCQl1MzIgYXN3X2NvbnRyb2xfZnJhbWU6MTsJLyogYml0IDI3KGlzIGEgY29udHJvbCBmcmFtZSkgKi8KLQkJdTMyIGFzd19wYXVzZV9mcmFtZToxOwkvKiBiaXQgMjgoaXMgYSBwYXVzZSBmcmFtZSkgKi8KLQkJdTMyIGFzd191bnN1cHBvcnRlZF9vcDoxOwkvKiBiaXQgMjkodW5zdXBwb3J0ZWQgT1AgY29kZSkgKi8KLQkJdTMyIGFzd19WTEFOX3RhZzoxOwkvKiBiaXQgMzAoVkxBTiB0YWcgZGV0ZWN0ZWQpICovCi0JCXUzMiBhc3dfbG9uZ19ldnQ6MTsJLyogYml0IDMxKFJ4IGxvbmcgZXZlbnQpICovCi0jaWYgMAotCQl1MzIgYXN3X3RydW5jOjE7CQkvKiBiaXQgMzEoUnggZnJhbWUgdHJ1bmNhdGVkKSAqLwotI2VuZGlmCi0jZW5kaWYKLQl9IGJpdHM7Ci19IFBLVF9TVEFUX0RFU0NfV09SRDBfdCwgKlBQS1RfU1RBVF9XT1JEMF90OworLyogUGFja2V0IFN0YXR1cyBSaW5nIERlc2NyaXB0b3JzCisgKgorICogV29yZCAwOgorICoKKyAqIHRvcCAxNiBiaXRzIGFyZSBmcm9tIHRoZSBBbGNhdGVsIFN0YXR1cyBXb3JkIGFzIGVudW1lcmF0ZWQgaW4KKyAqIFBFLU1DWE1BQyBEYXRhIFNoZWV0IElQRCBEUzU0IDAyMTAtMSAoYWxzbyBJUEQtRFM4MCAwMjA1LTIpCisgKgorICogMDogaHAJCQloYXNoIHBhc3MKKyAqIDE6IGlwYQkJCUlQIGNoZWNrc3VtIGFzc2lzdAorICogMjogaXBwCQkJSVAgY2hlY2tzdW0gcGFzcworICogMzogdGNwYQkJCVRDUCBjaGVja3N1bSBhc3Npc3QKKyAqIDQ6IHRjcHAJCQlUQ1AgY2hlY2tzdW0gcGFzcworICogNTogd29sCQkJV09MIEV2ZW50CisgKiA2OiByeG1hY19lcnJvcgkJUlhNQUMgRXJyb3IgSW5kaWNhdG9yCisgKiA3OiBkcm9wCQkJRHJvcCBwYWNrZXQKKyAqIDg6IGZ0CQkJRnJhbWUgVHJ1bmNhdGVkCisgKiA5OiBqcAkJCUp1bWJvIFBhY2tldAorICogMTA6IHZwCQkJVkxBTiBQYWNrZXQKKyAqIDExLTE1OiB1bnVzZWQKKyAqIDE2OiBhc3dfcHJldl9wa3RfZHJvcHBlZCAJZS5nLiBJRkcgdG9vIHNtYWxsIG9uIHByZXZpb3VzCisgKiAxNzogYXN3X1JYX0RWX2V2ZW50CQlzaG9ydCByZWNlaXZlIGV2ZW50IGRldGVjdGVkCisgKiAxODogYXN3X2ZhbHNlX2NhcnJpZXJfZXZlbnQJYmFkIGNhcnJpZXIgc2luY2UgbGFzdCBnb29kIHBhY2tldAorICogMTk6IGFzd19jb2RlX2VycgkJb25lIG9yIG1vcmUgbmliYmxlcyBzaWduYWxsZWQgYXMgZXJyb3JzCisgKiAyMDogYXN3X0NSQ19lcnIJCUNSQyBlcnJvcgorICogMjE6IGFzd19sZW5fY2hrX2VycgkJZnJhbWUgbGVuZ3RoIGZpZWxkIGluY29ycmVjdAorICogMjI6IGFzd190b29fbG9uZwkJZnJhbWUgbGVuZ3RoID4gMTUxOCBieXRlcworICogMjM6IGFzd19PSwkJCXZhbGlkIENSQyArIG5vIGNvZGUgZXJyb3IKKyAqIDI0OiBhc3dfbXVsdGljYXN0CQloYXMgYSBtdWx0aWNhc3QgYWRkcmVzcworICogMjU6IGFzd19icm9hZGNhc3QJCWhhcyBhIGJyb2FkY2FzdCBhZGRyZXNzCisgKiAyNjogYXN3X2RyaWJibGVfbmliYmxlCXNwdXJpb3VzIGJpdHMgYWZ0ZXIgRU9QCisgKiAyNzogYXN3X2NvbnRyb2xfZnJhbWUJaXMgYSBjb250cm9sIGZyYW1lCisgKiAyODogYXN3X3BhdXNlX2ZyYW1lCQlpcyBhIHBhdXNlIGZyYW1lCisgKiAyOTogYXN3X3Vuc3VwcG9ydGVkX29wCXVuc3VwcG9ydGVkIE9QIGNvZGUKKyAqIDMwOiBhc3dfVkxBTl90YWcJCVZMQU4gdGFnIGRldGVjdGVkCisgKiAzMTogYXN3X2xvbmdfZXZ0CQlSeCBsb25nIGV2ZW50CisgKgorICogV29yZCAxOgorICogMC0xNTogbGVuZ3RoCQkJbGVuZ3RoIGluIGJ5dGVzCisgKiAxNi0yNTogYmkJCQlCdWZmZXIgSW5kZXgKKyAqIDI2LTI3OiByaQkJCVJpbmcgSW5kZXgKKyAqIDI4LTMxOiByZXNlcnZlZAorICovCiAKLXR5cGVkZWYgdW5pb24gX1BLVF9TVEFUX0RFU0NfV09SRDFfdCB7Ci0JdTMyIHZhbHVlOwotCXN0cnVjdCB7Ci0jaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAotCQl1MzIgdW51c2VkOjQ7CS8qIGJpdHMgMjgtMzEgKi8KLQkJdTMyIHJpOjI7CQkvKiBiaXRzIDI2LTI3KFJpbmcgSW5kZXgpICovCi0JCXUzMiBiaToxMDsJCS8qIGJpdHMgMTYtMjUoQnVmZmVyIEluZGV4KSAqLwotCQl1MzIgbGVuZ3RoOjE2OwkvKiBiaXQgMC0xNShsZW5ndGggaW4gYnl0ZXMpICovCi0jZWxzZQotCQl1MzIgbGVuZ3RoOjE2OwkvKiBiaXQgMC0xNShsZW5ndGggaW4gYnl0ZXMpICovCi0JCXUzMiBiaToxMDsJCS8qIGJpdHMgMTYtMjUoQnVmZmVyIEluZGV4KSAqLwotCQl1MzIgcmk6MjsJCS8qIGJpdHMgMjYtMjcoUmluZyBJbmRleCkgKi8KLQkJdTMyIHVudXNlZDo0OwkvKiBiaXRzIDI4LTMxICovCi0jZW5kaWYKLQl9IGJpdHM7Ci19IFBLVF9TVEFUX0RFU0NfV09SRDFfdCwgKlBQS1RfU1RBVF9XT1JEMV90OwotCi10eXBlZGVmIHN0cnVjdCBfUEtUX1NUQVRfREVTQ190IHsKLQlQS1RfU1RBVF9ERVNDX1dPUkQwX3Qgd29yZDA7Ci0JUEtUX1NUQVRfREVTQ19XT1JEMV90IHdvcmQxOwotfSBQS1RfU1RBVF9ERVNDX3QsICpQUEtUX1NUQVRfREVTQ190Oworc3RydWN0IHBrdF9zdGF0X2Rlc2MgeworCXUzMiB3b3JkMDsKKwl1MzIgd29yZDE7Cit9OwogCiAvKiBUeXBlZGVmcyBmb3IgdGhlIFJYIERNQSBzdGF0dXMgd29yZCAqLwogCkBAIC0yMjMsNTkgKzE2MywzOCBAQAogICogUlhTVEFUX1dPUkQxX3Qgc3RydWN0dXJlIGhvbGRzIHBhcnQgb2YgdGhlIHN0YXR1cyBiaXRzIG9mIHRoZSBSeCBETUEgZW5naW5lCiAgKiB0aGF0IGdldCBjb3BpZWQgb3V0IHRvIG1lbW9yeSBieSB0aGUgRVQtMTMxMC4gIFdvcmQgMyBpcyBhIDMyIGJpdCB3b3JkCiAgKiB3aGljaCBjb250YWlucyB0aGUgUGFja2V0IFN0YXR1cyBSaW5nIGF2YWlsYWJsZSBvZmZzZXQuCisgKgorICogYml0IDAtMTUgcmVzZXJ2ZWQKKyAqIGJpdCAxNi0yNyBQU1JvZmZzZXQKKyAqIGJpdCAyOCBQU1J3cmFwCisgKiBiaXQgMjktMzEgdW51c2VkCiAgKi8KIAotI2RlZmluZSBSWFNUQVQxX09GRlNFVAkxNgotI2RlZmluZSBSWFNUQVQxX01BU0sJMHhGRkYKLSNkZWZpbmUgUlhTVEFUMV9XUkFQCTB4MTAwMDAwMDAKLQotdHlwZWRlZiB1bmlvbiBfcnhzdGF0X3dvcmQxX3QgewotCXUzMiB2YWx1ZTsKLQlzdHJ1Y3QgewotI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKLQkJdTMyIFBTUnVudXNlZDozOwkvKiBiaXRzIDI5LTMxICovCi0JCXUzMiBQU1J3cmFwOjE7CS8qIGJpdCAyOCAqLwotCQl1MzIgUFNSb2Zmc2V0OjEyOwkvKiBiaXRzIDE2LTI3ICovCi0JCXUzMiByZXNlcnZlZDoxNjsJLyogYml0cyAwLTE1ICovCi0jZWxzZQotCQl1MzIgcmVzZXJ2ZWQ6MTY7CS8qIGJpdHMgMC0xNSAqLwotCQl1MzIgUFNSb2Zmc2V0OjEyOwkvKiBiaXRzIDE2LTI3ICovCi0JCXUzMiBQU1J3cmFwOjE7CS8qIGJpdCAyOCAqLwotCQl1MzIgUFNSdW51c2VkOjM7CS8qIGJpdHMgMjktMzEgKi8KLSNlbmRpZgotCX0gYml0czsKLX0gUlhTVEFUX1dPUkQxX3QsICpQUlhTVEFUX1dPUkQxX3Q7Ci0KIC8qCi0gKiBSWF9TVEFUVVNfQkxPQ0tfdCBpcyBzcnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIHN0YXR1cyBvZiB0aGUgUnggRE1BIGVuZ2luZQotICogaXQgc2l0cyBpbiBmcmVlIG1lbW9yeSwgYW5kIGlzIHBvaW50ZWQgdG8gYnkgMHgxMDFjIC8gMHgxMDIwCisgKiBzdHJ1Y3Qgcnhfc3RhdHVzX2Jsb2NrIGlzIGEgc3RydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgc3RhdHVzIG9mIHRoZSBSeAorICogRE1BIGVuZ2luZSBpdCBzaXRzIGluIGZyZWUgbWVtb3J5LCBhbmQgaXMgcG9pbnRlZCB0byBieSAweDEwMWMgLyAweDEwMjAKICAqLwotdHlwZWRlZiBzdHJ1Y3QgX3J4X3N0YXR1c19ibG9ja190IHsKK3N0cnVjdCByeF9zdGF0dXNfYmxvY2sgewogCXUzMiBXb3JkMDsKLQlSWFNUQVRfV09SRDFfdCBXb3JkMTsKLX0gUlhfU1RBVFVTX0JMT0NLX3QsICpQUlhfU1RBVFVTX0JMT0NLX3Q7CisJdTMyIFdvcmQxOworfTsKIAogLyoKICAqIFN0cnVjdHVyZSBmb3IgbG9vay11cCB0YWJsZSBob2xkaW5nIGZyZWUgYnVmZmVyIHJpbmcgcG9pbnRlcnMKICAqLwotdHlwZWRlZiBzdHJ1Y3QgX0Zickxvb2t1cFRhYmxlIHsKLQl2b2lkICpWYVtNQVhfREVTQ19QRVJfUklOR19SWF07Ci0Jdm9pZCAqQnVmZmVyMVtNQVhfREVTQ19QRVJfUklOR19SWF07Ci0Jdm9pZCAqQnVmZmVyMltNQVhfREVTQ19QRVJfUklOR19SWF07Ci0JdTMyIFBBSGlnaFtNQVhfREVTQ19QRVJfUklOR19SWF07Ci0JdTMyIFBBTG93W01BWF9ERVNDX1BFUl9SSU5HX1JYXTsKLX0gRkJSTE9PS1VQVEFCTEUsICpQRkJSTE9PS1VQVEFCTEU7Ci0KLXR5cGVkZWYgZW51bSB7Ci0JT05FX1BBQ0tFVF9JTlRFUlJVUFQsCi0JRk9VUl9QQUNLRVRfSU5URVJSVVBUCi19IGVSWF9JTlRFUlJVUFRfU1RBVEVfdCwgKlBlUlhfSU5URVJSVVBUX1NUQVRFX3Q7CitzdHJ1Y3QgZmJyX2xvb2t1cCB7CisJdm9pZCAqdmlydFtNQVhfREVTQ19QRVJfUklOR19SWF07CisJdm9pZCAqYnVmZmVyMVtNQVhfREVTQ19QRVJfUklOR19SWF07CisJdm9pZCAqYnVmZmVyMltNQVhfREVTQ19QRVJfUklOR19SWF07CisJdTMyIGJ1c19oaWdoW01BWF9ERVNDX1BFUl9SSU5HX1JYXTsKKwl1MzIgYnVzX2xvd1tNQVhfREVTQ19QRVJfUklOR19SWF07Cit9OwogCiAvKgotICogUlhfUklOR190IGlzIHNydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgYWRhcHRvcidzIGxvY2FsIHJlZmVyZW5jZShzKSB0byB0aGUKLSAqIHJpbmdzCisgKiBzdHJ1Y3QgcnhfcmluZyBpcyB0aGUgc3NydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgYWRhcHRvcidzIGxvY2FsCisgKiByZWZlcmVuY2UocykgdG8gdGhlIHJpbmdzCiAgKi8KLXR5cGVkZWYgc3RydWN0IF9yeF9yaW5nX3Qgeworc3RydWN0IHJ4X3JpbmcgewogI2lmZGVmIFVTRV9GQlIwCiAJdm9pZCAqcEZicjBSaW5nVmE7CiAJZG1hX2FkZHJfdCBwRmJyMFJpbmdQYTsKQEAgLTI5Myw3ICsyMTIsNyBAQAogCWRtYV9hZGRyX3QgRmJyMU1lbVBhW01BWF9ERVNDX1BFUl9SSU5HX1JYIC8gRkJSX0NIVU5LU107CiAJdWludDY0X3QgRmJyMVJlYWxwYTsKIAl1aW50NjRfdCBGYnIxb2Zmc2V0OwotCUZCUkxPT0tVUFRBQkxFICpGYnJbMl07CisJc3RydWN0IGZicl9sb29rdXAgKmZiclsyXTsJLyogT25lIHBlciByaW5nICovCiAJdTMyIGxvY2FsX0ZicjFfZnVsbDsKIAl1MzIgRmJyMU51bUVudHJpZXM7CiAJdTMyIEZicjFCdWZmZXJTaXplOwpAQCAtMzAzLDggKzIyMiw4IEBACiAJdTMyIGxvY2FsX3Bzcl9mdWxsOwogCXUzMiBQc3JOdW1FbnRyaWVzOwogCi0Jdm9pZCAqcFJ4U3RhdHVzVmE7Ci0JZG1hX2FkZHJfdCBwUnhTdGF0dXNQYTsKKwlzdHJ1Y3Qgcnhfc3RhdHVzX2Jsb2NrICpyeF9zdGF0dXNfYmxvY2s7CisJZG1hX2FkZHJfdCByeF9zdGF0dXNfYnVzOwogCiAJc3RydWN0IGxpc3RfaGVhZCBSZWN2QnVmZmVyUG9vbDsKIApAQCAtMzIwLDMwICsyMzksNiBAQAogCiAJLyogbG9va2FzaWRlIGxpc3RzICovCiAJc3RydWN0IGttZW1fY2FjaGUgKlJlY3ZMb29rYXNpZGU7Ci19IFJYX1JJTkdfdCwgKlBSWF9SSU5HX3Q7Ci0KLS8qIEZvcndhcmQgcmVmZXJlbmNlIG9mIFJGRCAqLwotc3RydWN0IF9NUF9SRkQ7Ci0KLS8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KLXN0cnVjdCBldDEzMXhfYWRhcHRlcjsKLQotLyogUFJPVE9UWVBFUyBmb3IgSW5pdGlhbGl6YXRpb24gKi8KLWludCBldDEzMXhfcnhfZG1hX21lbW9yeV9hbGxvYyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBldDEzMXhfcnhfZG1hX21lbW9yeV9mcmVlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci1pbnQgZXQxMzF4X3JmZF9yZXNvdXJjZXNfYWxsb2Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAotCQkJICAgICAgIHN0cnVjdCBfTVBfUkZEICpwTXBSZmQpOwotdm9pZCBldDEzMXhfcmZkX3Jlc291cmNlc19mcmVlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgICAgICBzdHJ1Y3QgX01QX1JGRCAqcE1wUmZkKTsKLWludCBldDEzMXhfaW5pdF9yZWN2KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci0KLXZvaWQgQ29uZmlnUnhEbWFSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIFNldFJ4RG1hVGltZXIoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgZXQxMzF4X3J4X2RtYV9kaXNhYmxlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIGV0MTMxeF9yeF9kbWFfZW5hYmxlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci0KLXZvaWQgZXQxMzF4X3Jlc2V0X3JlY3Yoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLQotdm9pZCBldDEzMXhfaGFuZGxlX3JlY3ZfaW50ZXJydXB0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit9OwogCiAjZW5kaWYgLyogX19FVDEzMTBfUlhfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF90eC5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfdHguYwppbmRleCA5NzdlOGIzLi5iNmZmMjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF90eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3R4LmMKQEAgLTg0LDE1ICs4NCw5IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAKICNpbmNsdWRlICJldDEzMTBfcGh5LmgiCi0jaW5jbHVkZSAiZXQxMzEwX3BtLmgiCi0jaW5jbHVkZSAiZXQxMzEwX2phZ2NvcmUuaCIKLQogI2luY2x1ZGUgImV0MTMxeF9hZGFwdGVyLmgiCi0jaW5jbHVkZSAiZXQxMzF4X2luaXRwY2kuaCIKLSNpbmNsdWRlICJldDEzMXhfaXNyLmgiCi0KICNpbmNsdWRlICJldDEzMTBfdHguaCIKLQorI2luY2x1ZGUgImV0MTMxeC5oIgogCiBzdGF0aWMgaW5saW5lIHZvaWQgZXQxMzF4X2ZyZWVfc2VuZF9wYWNrZXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpldGRldiwKIAkJCQkJICAgc3RydWN0IHRjYiAqdGNiKTsKQEAgLTIwMCw3ICsxOTQsNyBAQAogICovCiB2b2lkIENvbmZpZ1R4RG1hUmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmV0ZGV2KQogewotCXN0cnVjdCBfVFhETUFfdCBfX2lvbWVtICp0eGRtYSA9ICZldGRldi0+cmVncy0+dHhkbWE7CisJc3RydWN0IHR4ZG1hX3JlZ3MgX19pb21lbSAqdHhkbWEgPSAmZXRkZXYtPnJlZ3MtPnR4ZG1hOwogCiAJLyogTG9hZCB0aGUgaGFyZHdhcmUgd2l0aCB0aGUgc3RhcnQgb2YgdGhlIHRyYW5zbWl0IGRlc2NyaXB0b3IgcmluZy4gKi8KIAl3cml0ZWwoKHUzMikgKCh1NjQpZXRkZXYtPnR4X3JpbmcudHhfZGVzY19yaW5nX3BhID4+IDMyKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3R4LmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF90eC5oCmluZGV4IDRmMGVhODEuLjgyZDA2ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3R4LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfdHguaApAQCAtMTQ3LDE4ICsxNDcsNCBAQAogCWludCBzaW5jZV9pcnE7CiB9OwogCi0vKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlICovCi1zdHJ1Y3QgZXQxMzF4X2FkYXB0ZXI7Ci0KLS8qIFBST1RPVFlQRVMgZm9yIGV0MTMxMF90eC5jICovCi1pbnQgZXQxMzF4X3R4X2RtYV9tZW1vcnlfYWxsb2Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgZXQxMzF4X3R4X2RtYV9tZW1vcnlfZnJlZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBDb25maWdUeERtYVJlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgZXQxMzF4X2luaXRfc2VuZChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBldDEzMXhfdHhfZG1hX2Rpc2FibGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgZXQxMzF4X3R4X2RtYV9lbmFibGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgZXQxMzF4X2hhbmRsZV9zZW5kX2ludGVycnVwdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBldDEzMXhfZnJlZV9idXN5X3NlbmRfcGFja2V0cyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotaW50IGV0MTMxeF9zZW5kX3BhY2tldHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7Ci0KICNlbmRpZiAvKiBfX0VUMTMxMF9UWF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4LmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YWJmZTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeC5oCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogTWVyZ2VkIGZyb20gZmlsZXMKKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCisgKgorICogU09GVFdBUkUgTElDRU5TRQorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcworICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbworICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorICoKKyAqIENvcHlyaWdodCDCqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcworICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBEaXNjbGFpbWVyCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCisgKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgorICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKi8KKworLyogZXQxMzF4X2VlcHJvbS5jICovCitpbnQgZXQxMzF4X2luaXRfZWVwcm9tKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqZXRkZXYpOworCisvKiBldDEzMXhfaW5pdHBjaS5jICovCit2b2lkIENvbmZpZ0dsb2JhbFJlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcik7Cit2b2lkIENvbmZpZ01NQ1JlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcik7Cit2b2lkIGV0MTMxeF9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBldDEzMXhfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIGV0MTMxeF9hbGlnbl9hbGxvY2F0ZWRfbWVtb3J5KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgICB1NjQgKnBoeXNfYWRkciwKKwkJCQkgICB1NjQgKm9mZnNldCwgdTY0IG1hc2spOworCitpbnQgZXQxMzF4X2FkYXB0ZXJfc2V0dXAoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK2ludCBldDEzMXhfYWRhcHRlcl9tZW1vcnlfYWxsb2Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X2FkYXB0ZXJfbWVtb3J5X2ZyZWUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X2h3YWRkcl9pbml0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIGV0MTMxeF9zb2Z0X3Jlc2V0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKKy8qIGV0MTMxeF9pc3IuYyAqLworaXJxcmV0dXJuX3QgZXQxMzF4X2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwordm9pZCBldDEzMXhfaXNyX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKworLyogZXQxMzEwX21hYy5jICovCit2b2lkIENvbmZpZ01BQ1JlZ3MxKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIENvbmZpZ01BQ1JlZ3MyKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIENvbmZpZ1J4TWFjUmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBDb25maWdUeE1hY1JlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgQ29uZmlnTWFjU3RhdFJlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgQ29uZmlnRmxvd0NvbnRyb2woc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgVXBkYXRlTWFjU3RhdEhvc3RDb3VudGVycyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBIYW5kbGVNYWNTdGF0SW50ZXJydXB0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIFNldHVwRGV2aWNlRm9yTXVsdGljYXN0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIFNldHVwRGV2aWNlRm9yVW5pY2FzdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworCisvKiBldDEzMXhfbmV0ZGV2LmMgKi8KK3N0cnVjdCBuZXRfZGV2aWNlICpldDEzMXhfZGV2aWNlX2FsbG9jKHZvaWQpOworCisvKiBldDEzMXhfcG0uYyAqLwordm9pZCBFbmFibGVQaHlDb21hKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIERpc2FibGVQaHlDb21hKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKKy8qIGV0MTMxeF9waHkuYyAqLwordm9pZCBFVDEzMTBfUGh5SW5pdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBFVDEzMTBfUGh5UmVzZXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgRVQxMzEwX1BoeVBvd2VyRG93bihzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgZG93bik7Cit2b2lkIEVUMTMxMF9QaHlBZHZlcnRpc2UxMDAwQmFzZVQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgdTE2IGR1cGxleCk7Cit2b2lkIEVUMTMxMF9QaHlBY2Nlc3NNaUJpdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICB1MTYgYWN0aW9uLAorCQkJICAgdTE2IHJlZ251bSwgdTE2IGJpdG51bSwgdTggKnZhbHVlKTsKKworaW50IGV0MTMxeF94Y3ZyX2ZpbmQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X3NldHBoeV9ub3JtYWwoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKworLyogc3RhdGljIGlubGluZSBmdW5jdGlvbiBkb2VzIG5vdCB3b3JrIGJlY2F1c2UgZXQxMzF4X2FkYXB0ZXIgaXMgbm90IGFsd2F5cworICogZGVmaW5lZAorICovCitpbnQgUGh5TWlSZWFkKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwgdTggeGN2ckFkZHIsCisJICAgICAgdTggeGN2clJlZywgdTE2ICp2YWx1ZSk7CisjZGVmaW5lIE1pUmVhZChhZGFwdGVyLCB4Y3ZyUmVnLCB2YWx1ZSkgXAorCVBoeU1pUmVhZCgoYWRhcHRlciksIChhZGFwdGVyKS0+U3RhdHMueGN2cl9hZGRyLCAoeGN2clJlZyksICh2YWx1ZSkpCisKK2ludDMyX3QgTWlXcml0ZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXU4IHhjdlJlZywgdTE2IHZhbHVlKTsKK3ZvaWQgZXQxMzF4X01paV9jaGVjayhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLAorCQkgICAgICBNSV9CTVNSX3QgYm1zciwgTUlfQk1TUl90IGJtc3JfaW50cyk7CisKKy8qIFRoaXMgbGFzdCBpcyBub3Qgc3RyaWN0bHkgcmVxdWlyZWQgKHRoZSBkcml2ZXIgY291bGQgY2FsbCB0aGUgVFBBTAorICogdmVyc2lvbiBpbnN0ZWFkKSwgYnV0IHRoaXMgc2V0cyB0aGUgYWRhcHRlciB1cCBjb3JyZWN0bHksIGFuZCBjYWxscyB0aGUKKyAqIGFjY2VzcyByb3V0aW5lIGluZGlyZWN0bHkuICBUaGlzIHByb3RlY3RzIHRoZSBkcml2ZXIgZnJvbSBjaGFuZ2VzIGluIFRQQUwuCisgKi8KK3ZvaWQgU2V0UGh5XzEwQmFzZVRIYWxmRHVwbGV4KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKKworLyogZXQxMzEwX3J4LmMgKi8KK2ludCBldDEzMXhfcnhfZG1hX21lbW9yeV9hbGxvYyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBldDEzMXhfcnhfZG1hX21lbW9yeV9mcmVlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CitpbnQgZXQxMzF4X3JmZF9yZXNvdXJjZXNfYWxsb2Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICAgIHN0cnVjdCBfTVBfUkZEICpwTXBSZmQpOwordm9pZCBldDEzMXhfcmZkX3Jlc291cmNlc19mcmVlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgICBzdHJ1Y3QgX01QX1JGRCAqcE1wUmZkKTsKK2ludCBldDEzMXhfaW5pdF9yZWN2KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKK3ZvaWQgQ29uZmlnUnhEbWFSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIFNldFJ4RG1hVGltZXIoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X3J4X2RtYV9kaXNhYmxlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIGV0MTMxeF9yeF9kbWFfZW5hYmxlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKK3ZvaWQgZXQxMzF4X3Jlc2V0X3JlY3Yoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKwordm9pZCBldDEzMXhfaGFuZGxlX3JlY3ZfaW50ZXJydXB0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKKy8qIGV0MTMxeF90eC5jICovCitpbnQgZXQxMzF4X3R4X2RtYV9tZW1vcnlfYWxsb2Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X3R4X2RtYV9tZW1vcnlfZnJlZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBDb25maWdUeERtYVJlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X2luaXRfc2VuZChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBldDEzMXhfdHhfZG1hX2Rpc2FibGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X3R4X2RtYV9lbmFibGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X2hhbmRsZV9zZW5kX2ludGVycnVwdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBldDEzMXhfZnJlZV9idXN5X3NlbmRfcGFja2V0cyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IGV0MTMxeF9zZW5kX3BhY2tldHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2FkYXB0ZXIuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2FkYXB0ZXIuaAppbmRleCAzZjdmMzdhLi42NGE2NzhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9hZGFwdGVyLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfYWRhcHRlci5oCkBAIC03NywzOCArNzcsMTEgQEAKICAqLwogI2RlZmluZSBOVU1fVFJBRkZJQ19DTEFTU0VTICAgICAgICAgIDEKIAotLyoKLSAqIFRoZXJlIGFyZSB0aHJlZSB3YXlzIG9mIGNvdW50aW5nIGVycm9ycyAtIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gWCBlcnJvcnMKLSAqIGluIFkgcGFja2V0cyAocmVwcmVzZW50ZWQgYnkgdGhlICJTQU1QTEUiIG1hY3JvcyksIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4KLSAqIE4gZXJyb3JzIGluIGEgUyBtU2VjIHRpbWUgcGVyaW9kICh0aGUgIlBFUklPRCIgbWFjcm9zKSwgb3IgaWYgdGhlcmUgYXJlCi0gKiBjb25zZWN1dGl2ZSBwYWNrZXRzIHdpdGggZXJyb3JzIChDT05TRUNfRVJST1JFRF9USFJFU0gpLiAgVGhpcyBsYXN0IGNvdmVycwotICogZm9yICJCdXJzdHkiIGVycm9ycywgYW5kIHRoZSBlcnJvcmVkIHBhY2tldHMgbWF5IHdlbGwgbm90IGJlIGNvbnRpZ3VvdXMsCi0gKiBidXQgc2V2ZXJhbCBlcnJvcnMgd2hlcmUgdGhlIHBhY2tldCBjb3VudGVyIGhhcyBjaGFuZ2VkIGJ5IGxlc3MgdGhhbiBhCi0gKiBzbWFsbCBhbW91bnQgd2lsbCBjYXVzZSB0aGlzIGNvdW50IHRvIGluY3JlbWVudC4KLSAqLwotI2RlZmluZSBUWF9QQUNLRVRTX0lOX1NBTVBMRSAgICAgICAgMTAwMDAKLSNkZWZpbmUgVFhfTUFYX0VSUk9SU19JTl9TQU1QTEUgICAgIDUwCi0KICNkZWZpbmUgVFhfRVJST1JfUEVSSU9EICAgICAgICAgICAgIDEwMDAKLSNkZWZpbmUgVFhfTUFYX0VSUk9SU19JTl9QRVJJT0QgICAgIDEwCi0KLSNkZWZpbmUgTElOS19ERVRFQ1RJT05fVElNRVIgICAgICAgIDUwMDAKLQotI2RlZmluZSBUWF9DT05TRUNfUkFOR0UgICAgICAgICAgICAgNQotI2RlZmluZSBUWF9DT05TRUNfRVJST1JFRF9USFJFU0ggICAgMTAKIAogI2RlZmluZSBMT19NQVJLX1BFUkNFTlRfRk9SX1BTUiAgICAgMTUKICNkZWZpbmUgTE9fTUFSS19QRVJDRU5UX0ZPUl9SWCAgICAgIDE1CiAKLS8qIENvdW50ZXJzIGZvciBlcnJvciByYXRlIG1vbml0b3JpbmcgKi8KLXR5cGVkZWYgc3RydWN0IF9NUF9FUlJfQ09VTlRFUlMgewotCXUzMiBQa3RDb3VudFR4UGFja2V0czsKLQl1MzIgUGt0Q291bnRUeEVycm9yczsKLQl1MzIgVGltZXJCYXNlZFR4RXJyb3JzOwotCXUzMiBQa3RDb3VudExhc3RFcnJvcjsKLQl1MzIgRXJyZWRDb25zZWNQYWNrZXRzOwotfSBNUF9FUlJfQ09VTlRFUlMsICpQTVBfRVJSX0NPVU5URVJTOwotCiAvKiBSRkQgKFJlY2VpdmUgRnJhbWUgRGVzY3JpcHRvcikgKi8KIHR5cGVkZWYgc3RydWN0IF9NUF9SRkQgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9ub2RlOwpAQCAtMTc0LDYgKzE0NywyMCBAQAogCXUzMiBJbnRlcnJ1cHRTdGF0dXM7CiB9IENFX1NUQVRTX3QsICpQQ0VfU1RBVFNfdDsKIAordHlwZWRlZiBzdHJ1Y3QgX01QX1BPV0VSX01HTVQgeworCS8qIHZhcmlhYmxlIHB1dHRpbmcgdGhlIHBoeSBpbnRvIGNvbWEgbW9kZSB3aGVuIGJvb3QgdXAgd2l0aCBubyBjYWJsZQorCSAqIHBsdWdnZWQgaW4gYWZ0ZXIgNSBzZWNvbmRzCisJICovCisJdTggVHJhbnNQaHlDb21hTW9kZU9uQm9vdDsKKworCS8qIE5leHQgdHdvIHVzZWQgdG8gc2F2ZSBwb3dlciBpbmZvcm1hdGlvbiBhdCBwb3dlciBkb3duLiBUaGlzCisJICogaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIGR1cmluZyBwb3dlciB1cCB0byBzZXQgdXAgcGFydHMgb2YgUG93ZXIKKwkgKiBNYW5hZ2VtZW50IGluIEpBR0NvcmUKKwkgKi8KKwl1MTYgUG93ZXJEb3duU3BlZWQ7CisJdTggUG93ZXJEb3duRHVwbGV4OworfSBNUF9QT1dFUl9NR01ULCAqUE1QX1BPV0VSX01HTVQ7CisKIC8qIFRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlICovCiBzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CkBAIC0yNDgsNyArMjM1LDcgQEAKIAlzdHJ1Y3QgdHhfcmluZyB0eF9yaW5nOwogCiAJLyogUnggTWVtb3J5IFZhcmlhYmxlcyAqLwotCVJYX1JJTkdfdCBSeFJpbmc7CisJc3RydWN0IHJ4X3JpbmcgcnhfcmluZzsKIAogCS8qIExvb3BiYWNrIHNwZWNpZmljcyAqLwogCXU4IFJlcGxpY2FQaHlMb29wYms7CS8qIFJlcGxpY2EgRW5hYmxlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9jb25maWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2NvbmZpZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDJjMGY2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2NvbmZpZy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIEFnZXJlIFN5c3RlbXMgSW5jLgotICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCi0gKgotICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCi0gKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiBldDEzMXhfY29uZmlnLmggLSBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiB0byBzdXBwb3J0Ci0gKiAgICAgICAgICAgICAgICAgICBldDEzMXhfY29uZmlnLmMKLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIFNPRlRXQVJFIExJQ0VOU0UKLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKLSAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKLSAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KLSAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KLSAqCi0gKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCi0gKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcwotICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi0gKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBEaXNjbGFpbWVyCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCCTQVMgSVOUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCi0gKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCi0gKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgotICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLSAqIERBTUFHRS4KLSAqCi0gKi8KLQotI2lmbmRlZiBfX0VUMTMxWF9DT05GSUdfSF9fCi0jZGVmaW5lIF9fRVQxMzFYX0NPTkZJR19IX18KLQotLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSAqLwotc3RydWN0IGV0MTMxeF9hZGFwdGVyOwotCi12b2lkIGV0MTMxeF9jb25maWdfcGFyc2Uoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLQotI2VuZGlmIC8qIF9fRVQxMzFYX0NPTkZJR19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2luaXRwY2kuYyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2luaXRwY2kuYwppbmRleCAwODkyYjZhLi41YWQ3ZTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pbml0cGNpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaW5pdHBjaS5jCkBAIC04NywyMCArODcsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KIAogI2luY2x1ZGUgImV0MTMxMF9waHkuaCIKLSNpbmNsdWRlICJldDEzMTBfcG0uaCIKLSNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgogCiAjaW5jbHVkZSAiZXQxMzF4X2FkYXB0ZXIuaCIKLSNpbmNsdWRlICJldDEzMXhfbmV0ZGV2LmgiCi0jaW5jbHVkZSAiZXQxMzF4X2NvbmZpZy5oIgotI2luY2x1ZGUgImV0MTMxeF9pc3IuaCIKIAogI2luY2x1ZGUgImV0MTMxMF9hZGRyZXNzX21hcC5oIgogI2luY2x1ZGUgImV0MTMxMF90eC5oIgogI2luY2x1ZGUgImV0MTMxMF9yeC5oIgotI2luY2x1ZGUgImV0MTMxMF9tYWMuaCIKLSNpbmNsdWRlICJldDEzMTBfZWVwcm9tLmgiCisjaW5jbHVkZSAiZXQxMzF4LmgiCiAKKyNkZWZpbmUgSU5URVJOQUxfTUVNX1NJWkUgICAgICAgMHg0MDAJLyogMTAyNCBvZiBpbnRlcm5hbCBtZW1vcnkgKi8KKyNkZWZpbmUgSU5URVJOQUxfTUVNX1JYX09GRlNFVCAgMHgxRkYJLyogNTAlICAgVHgsIDUwJSAgIFJ4ICovCiAKIC8qIERlZmluZXMgZm9yIFBhcmFtZXRlciBEZWZhdWx0L01pbi9NYXggdmF1bGVzICovCiAjZGVmaW5lIFBBUk1fU1BFRURfRFVQTEVYX01JTiAgIDAKQEAgLTMyNyw3ICszMjMsNyBAQAogICovCiB2b2lkIENvbmZpZ0dsb2JhbFJlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICpldGRldikKIHsKLQlzdHJ1Y3QgX0dMT0JBTF90IF9faW9tZW0gKnJlZ3MgPSAmZXRkZXYtPnJlZ3MtPmdsb2JhbDsKKwlzdHJ1Y3QgZ2xvYmFsX3JlZ3MgX19pb21lbSAqcmVncyA9ICZldGRldi0+cmVncy0+Z2xvYmFsOwogCiAJd3JpdGVsKDAsICZyZWdzLT5yeHFfc3RhcnRfYWRkcik7CiAJd3JpdGVsKElOVEVSTkFMX01FTV9TSVpFIC0gMSwgJnJlZ3MtPnR4cV9lbmRfYWRkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pbml0cGNpLmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pbml0cGNpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNjk1NjkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaW5pdHBjaS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIEFnZXJlIFN5c3RlbXMgSW5jLgotICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCi0gKgotICogQ29weXJpZ2h0IMKpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogZXQxMzF4X2luaXRwY2kuaCAtIEhlYWRlciB3aGljaCBpbmNsdWRlcyBjb21tb24gZGF0YSBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcwotICogICAgICAgICAgICAgICAgICAgIHJlbGF0ZWQgdG8gdGhlIGRyaXZlcidzIFBDSSAoYW5kIFBDSSBFeHByZXNzKSBpbmZvcm1hdGlvbi4KLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIFNPRlRXQVJFIExJQ0VOU0UKLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKLSAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKLSAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KLSAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KLSAqCi0gKiBDb3B5cmlnaHQgwqkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwotICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKLSAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogRGlzY2xhaW1lcgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAotICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQotICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KLSAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICi0gKiBEQU1BR0UuCi0gKgotICovCi0KLSNpZm5kZWYgX19FVDEzMVhfSU5JVFBDSV9IX18KLSNkZWZpbmUgX19FVDEzMVhfSU5JVFBDSV9IX18KLQotLyogRnVuY3Rpb24gUHJvdG90eXBlcyAqLwotdm9pZCBldDEzMXhfYWxpZ25fYWxsb2NhdGVkX21lbW9yeShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJICAgdTY0ICpwaHlzX2FkZHIsCi0JCQkJICAgdTY0ICpvZmZzZXQsIHU2NCBtYXNrKTsKLQotaW50IGV0MTMxeF9hZGFwdGVyX3NldHVwKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci1pbnQgZXQxMzF4X2FkYXB0ZXJfbWVtb3J5X2FsbG9jKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIGV0MTMxeF9hZGFwdGVyX21lbW9yeV9mcmVlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIGV0MTMxeF9od2FkZHJfaW5pdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBldDEzMXhfc29mdF9yZXNldChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotCi0jZW5kaWYgLyogX19FVDEzMVhfSU5JVFBDSV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2lzci5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaXNyLmMKaW5kZXggZjZkNDUyZC4uOGI2ZTBiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaXNyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaXNyLmMKQEAgLTg1LDExICs4NSwyNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogCiAjaW5jbHVkZSAiZXQxMzEwX3BoeS5oIgotI2luY2x1ZGUgImV0MTMxMF9wbS5oIgotI2luY2x1ZGUgImV0MTMxMF9qYWdjb3JlLmgiCi0jaW5jbHVkZSAiZXQxMzEwX21hYy5oIgotCiAjaW5jbHVkZSAiZXQxMzF4X2FkYXB0ZXIuaCIKKyNpbmNsdWRlICJldDEzMXguaCIKKworLyoKKyAqIEZvciBpbnRlcnJ1cHRzLCBub3JtYWwgcnVubmluZyBpczoKKyAqICAgICAgIHJ4ZG1hX3hmcl9kb25lLCBwaHlfaW50ZXJydXB0LCBtYWNfc3RhdF9pbnRlcnJ1cHQsCisgKiAgICAgICB3YXRjaGRvZ19pbnRlcnJ1cHQgJiB0eGRtYV94ZmVyX2RvbmUKKyAqCisgKiBJbiBib3RoIGNhc2VzLCB3aGVuIGZsb3cgY29udHJvbCBpcyBlbmFibGVkIGZvciBlaXRoZXIgVHggb3IgYmktZGlyZWN0aW9uLAorICogd2UgYWRkaXRpb25hbCBlbmFibGUgcnhfZmJyMF9sb3cgYW5kIHJ4X2ZicjFfbG93LCBzbyB3ZSBrbm93IHdoZW4gdGhlCisgKiBidWZmZXIgcmluZ3MgYXJlIHJ1bm5pbmcgbG93LgorICovCisjZGVmaW5lIElOVF9NQVNLX0RJU0FCTEUgICAgICAgICAgICAweGZmZmZmZmZmCisKKy8qIE5PVEU6IE1hc2tpbmcgb3V0IE1BQ19TVEFUIEludGVycnVwdCBmb3Igbm93Li4uCisgKiAjZGVmaW5lIElOVF9NQVNLX0VOQUJMRSAgICAgICAgICAgICAweGZmZjZiZjE3CisgKiAjZGVmaW5lIElOVF9NQVNLX0VOQUJMRV9OT19GTE9XICAgICAweGZmZjZiZmQ3CisgKi8KKyNkZWZpbmUgSU5UX01BU0tfRU5BQkxFICAgICAgICAgICAgIDB4ZmZmZWJmMTcKKyNkZWZpbmUgSU5UX01BU0tfRU5BQkxFX05PX0ZMT1cgICAgIDB4ZmZmZWJmZDcKKwogCiAvKioKICAqCWV0MTMxeF9lbmFibGVfaW50ZXJydXB0cwktCWVuYWJsZSBpbnRlcnJ1cHQKQEAgLTE4NSw3ICsyMDEsNyBAQAogCQkJaWYgKCsrdGNiLT5zdGFsZSA+IDEpCiAJCQkJc3RhdHVzIHw9IEVUX0lOVFJfVFhETUFfSVNSOwogCi0JCWlmIChhZGFwdGVyLT5SeFJpbmcuVW5maW5pc2hlZFJlY2VpdmVzKQorCQlpZiAoYWRhcHRlci0+cnhfcmluZy5VbmZpbmlzaGVkUmVjZWl2ZXMpCiAJCQlzdGF0dXMgfD0gRVRfSU5UUl9SWERNQV9YRlJfRE9ORTsKIAkJZWxzZSBpZiAodGNiID09IE5VTEwpCiAJCQl3cml0ZWwoMCwgJmFkYXB0ZXItPnJlZ3MtPmdsb2JhbC53YXRjaGRvZ190aW1lcik7CkBAIC0zOTAsNyArNDA2LDcgQEAKIAogCQkvKiBMZXQncyBtb3ZlIG9uIHRvIHRoZSBUeE1hYyAqLwogCQlpZiAoc3RhdHVzICYgRVRfSU5UUl9UWE1BQykgewotCQkJdTMyIGVyciA9IHJlYWRsKCZpb21lbS0+dHhtYWMuZXJyLnZhbHVlKTsKKwkJCXUzMiBlcnIgPSByZWFkbCgmaW9tZW0tPnR4bWFjLmVycik7CiAKIAkJCS8qCiAJCQkgKiBXaGVuIGFueSBvZiB0aGUgZXJyb3JzIG9jY3VyIGFuZCBUWE1BQyBnZW5lcmF0ZXMKQEAgLTQyNSwxMiArNDQxLDEyIEBACiAKIAkJCWRldl93YXJuKCZldGRldi0+cGRldi0+ZGV2LAogCQkJICAiUlhNQUMgaW50ZXJydXB0LCBlcnJvciAweCUwOHguICBSZXF1ZXN0aW5nIHJlc2V0XG4iLAotCQkJCSAgICByZWFkbCgmaW9tZW0tPnJ4bWFjLmVycl9yZWcudmFsdWUpKTsKKwkJCQkgICAgcmVhZGwoJmlvbWVtLT5yeG1hYy5lcnJfcmVnKSk7CiAKIAkJCWRldl93YXJuKCZldGRldi0+cGRldi0+ZGV2LAogCQkJCSAgICAiRW5hYmxlIDB4JTA4eCwgRGlhZyAweCUwOHhcbiIsCi0JCQkJICAgIHJlYWRsKCZpb21lbS0+cnhtYWMuY3RybC52YWx1ZSksCi0JCQkJICAgIHJlYWRsKCZpb21lbS0+cnhtYWMucnhxX2RpYWcudmFsdWUpKTsKKwkJCQkgICAgcmVhZGwoJmlvbWVtLT5yeG1hYy5jdHJsKSwKKwkJCQkgICAgcmVhZGwoJmlvbWVtLT5yeG1hYy5yeHFfZGlhZykpOwogCiAJCQkvKgogCQkJICogSWYgd2UgYXJlIGRlYnVnZ2luZywgd2Ugd2FudCB0byBzZWUgdGhpcyBlcnJvciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2lzci5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaXNyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNmQ1NzcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaXNyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKgotICogQWdlcmUgU3lzdGVtcyBJbmMuCi0gKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKLSAqCi0gKiBDb3B5cmlnaHQgwqkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCi0gKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiBldDEzMXhfaXNyLmggLSBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiBwZXJ0YWluaW5nIHRvIHRoZQotICogICAgICAgICAgICAgICAgSVNSIHByb2Nlc3NpbmcgY29kZS4KLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIFNPRlRXQVJFIExJQ0VOU0UKLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKLSAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKLSAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KLSAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KLSAqCi0gKiBDb3B5cmlnaHQgwqkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwotICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKLSAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogRGlzY2xhaW1lcgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAotICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQotICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KLSAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICi0gKiBEQU1BR0UuCi0gKgotICovCi0KLSNpZm5kZWYgX19FVDEzMVhfSVNSX0hfXwotI2RlZmluZSBfX0VUMTMxWF9JU1JfSF9fCi0KLWlycXJldHVybl90IGV0MTMxeF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKLXZvaWQgZXQxMzF4X2lzcl9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci0KLSNlbmRpZiAvKiBfX0VUMTMxWF9JU1JfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9uZXRkZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X25ldGRldi5jCmluZGV4IGVkYjc4YWUuLjQwZjg5NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X25ldGRldi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X25ldGRldi5jCkBAIC04NSwxNCArODUsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogCiAjaW5jbHVkZSAiZXQxMzEwX3BoeS5oIgotI2luY2x1ZGUgImV0MTMxMF9wbS5oIgotI2luY2x1ZGUgImV0MTMxMF9qYWdjb3JlLmgiCi0jaW5jbHVkZSAiZXQxMzEwX21hYy5oIgogI2luY2x1ZGUgImV0MTMxMF90eC5oIgotCiAjaW5jbHVkZSAiZXQxMzF4X2FkYXB0ZXIuaCIKLSNpbmNsdWRlICJldDEzMXhfaXNyLmgiCi0jaW5jbHVkZSAiZXQxMzF4X2luaXRwY2kuaCIKKyNpbmNsdWRlICJldDEzMXguaCIKIAogc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmV0MTMxeF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIGludCBldDEzMXhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKQEAgLTMzOSw2NiArMzM0LDY0IEBACiAgKiBldDEzMXhfc2V0X3BhY2tldF9maWx0ZXIgLSBDb25maWd1cmVzIHRoZSBSeCBQYWNrZXQgZmlsdGVyaW5nIG9uIHRoZSBkZXZpY2UKICAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIG91ciBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlCiAgKgorICogRklYTUU6IGxvdCBvZiBkdXBzIHdpdGggTUFDIGNvZGUKKyAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZQogICovCiBpbnQgZXQxMzF4X3NldF9wYWNrZXRfZmlsdGVyKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpbnQgc3RhdHVzID0gMDsKIAl1aW50MzJfdCBmaWx0ZXIgPSBhZGFwdGVyLT5QYWNrZXRGaWx0ZXI7Ci0JUlhNQUNfQ1RSTF90IGN0cmw7Ci0JUlhNQUNfUEZfQ1RSTF90IHBmX2N0cmw7CisJdTMyIGN0cmw7CisJdTMyIHBmX2N0cmw7CiAKLQljdHJsLnZhbHVlID0gcmVhZGwoJmFkYXB0ZXItPnJlZ3MtPnJ4bWFjLmN0cmwudmFsdWUpOwotCXBmX2N0cmwudmFsdWUgPSByZWFkbCgmYWRhcHRlci0+cmVncy0+cnhtYWMucGZfY3RybC52YWx1ZSk7CisJY3RybCA9IHJlYWRsKCZhZGFwdGVyLT5yZWdzLT5yeG1hYy5jdHJsKTsKKwlwZl9jdHJsID0gcmVhZGwoJmFkYXB0ZXItPnJlZ3MtPnJ4bWFjLnBmX2N0cmwpOwogCiAJLyogRGVmYXVsdCB0byBkaXNhYmxlZCBwYWNrZXQgZmlsdGVyaW5nLiAgRW5hYmxlIGl0IGluIHRoZSBpbmRpdmlkdWFsCiAJICogY2FzZSBzdGF0ZW1lbnRzIHRoYXQgcmVxdWlyZSB0aGUgZGV2aWNlIHRvIGZpbHRlciBzb21ldGhpbmcKIAkgKi8KLQljdHJsLmJpdHMucGt0X2ZpbHRlcl9kaXNhYmxlID0gMTsKKwljdHJsIHw9IDB4MDQ7CiAKIAkvKiBTZXQgdXMgdG8gYmUgaW4gcHJvbWlzY3VvdXMgbW9kZSBzbyB3ZSByZWNlaXZlIGV2ZXJ5dGhpbmcsIHRoaXMKIAkgKiBpcyBhbHNvIHRydWUgd2hlbiB3ZSBnZXQgYSBwYWNrZXQgZmlsdGVyIG9mIDAKIAkgKi8KLQlpZiAoKGZpbHRlciAmIEVUMTMxWF9QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUykgfHwgZmlsdGVyID09IDApIHsKLQkJcGZfY3RybC5iaXRzLmZpbHRlcl9icm9hZF9lbiA9IDA7Ci0JCXBmX2N0cmwuYml0cy5maWx0ZXJfbXVsdGlfZW4gPSAwOwotCQlwZl9jdHJsLmJpdHMuZmlsdGVyX3VuaV9lbiA9IDA7Ci0JfSBlbHNlIHsKKwlpZiAoKGZpbHRlciAmIEVUMTMxWF9QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUykgfHwgZmlsdGVyID09IDApCisJCXBmX2N0cmwgJj0gfjc7CS8qIENsZWFyIGZpbHRlciBiaXRzICovCisJZWxzZSB7CiAJCS8qCiAJCSAqIFNldCB1cyB1cCB3aXRoIE11bHRpY2FzdCBwYWNrZXQgZmlsdGVyaW5nLiAgVGhyZWUgY2FzZXMgYXJlCiAJCSAqIHBvc3NpYmxlIC0gKDEpIHdlIGhhdmUgYSBtdWx0aS1jYXN0IGxpc3QsICgyKSB3ZSByZWNlaXZlIEFMTAogCQkgKiBtdWx0aWNhc3QgZW50cmllcyBvciAoMykgd2UgcmVjZWl2ZSBub25lLgogCQkgKi8KLQkJaWYgKGZpbHRlciAmIEVUMTMxWF9QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUKSB7Ci0JCQlwZl9jdHJsLmJpdHMuZmlsdGVyX211bHRpX2VuID0gMDsKLQkJfSBlbHNlIHsKKwkJaWYgKGZpbHRlciAmIEVUMTMxWF9QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUKQorCQkJcGZfY3RybCAmPSB+MjsJLyogTXVsdGljYXN0IGZpbHRlciBiaXQgKi8KKwkJZWxzZSB7CiAJCQlTZXR1cERldmljZUZvck11bHRpY2FzdChhZGFwdGVyKTsKLQkJCXBmX2N0cmwuYml0cy5maWx0ZXJfbXVsdGlfZW4gPSAxOwotCQkJY3RybC5iaXRzLnBrdF9maWx0ZXJfZGlzYWJsZSA9IDA7CisJCQlwZl9jdHJsIHw9IDI7CisJCQljdHJsICY9IH4weDA0OwogCQl9CiAKIAkJLyogU2V0IHVzIHVwIHdpdGggVW5pY2FzdCBwYWNrZXQgZmlsdGVyaW5nICovCiAJCWlmIChmaWx0ZXIgJiBFVDEzMVhfUEFDS0VUX1RZUEVfRElSRUNURUQpIHsKIAkJCVNldHVwRGV2aWNlRm9yVW5pY2FzdChhZGFwdGVyKTsKLQkJCXBmX2N0cmwuYml0cy5maWx0ZXJfdW5pX2VuID0gMTsKLQkJCWN0cmwuYml0cy5wa3RfZmlsdGVyX2Rpc2FibGUgPSAwOworCQkJcGZfY3RybCB8PSA0OworCQkJY3RybCAmPSB+MHgwNDsKIAkJfQogCiAJCS8qIFNldCB1cyB1cCB3aXRoIEJyb2FkY2FzdCBwYWNrZXQgZmlsdGVyaW5nICovCiAJCWlmIChmaWx0ZXIgJiBFVDEzMVhfUEFDS0VUX1RZUEVfQlJPQURDQVNUKSB7Ci0JCQlwZl9jdHJsLmJpdHMuZmlsdGVyX2Jyb2FkX2VuID0gMTsKLQkJCWN0cmwuYml0cy5wa3RfZmlsdGVyX2Rpc2FibGUgPSAwOwotCQl9IGVsc2UgewotCQkJcGZfY3RybC5iaXRzLmZpbHRlcl9icm9hZF9lbiA9IDA7Ci0JCX0KKwkJCXBmX2N0cmwgfD0gMTsJLyogQnJvYWRjYXN0IGZpbHRlciBiaXQgKi8KKwkJCWN0cmwgJj0gfjB4MDQ7CisJCX0gZWxzZQorCQkJcGZfY3RybCAmPSB+MTsKIAogCQkvKiBTZXR1cCB0aGUgcmVjZWl2ZSBtYWMgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgLSBQYWNrZXQKIAkJICogRmlsdGVyIGNvbnRyb2wgKyB0aGUgZW5hYmxlIC8gZGlzYWJsZSBmb3IgcGFja2V0IGZpbHRlcgogCQkgKiBpbiB0aGUgY29udHJvbCByZWcuCiAJCSAqLwotCQl3cml0ZWwocGZfY3RybC52YWx1ZSwKLQkJICAgICAgICZhZGFwdGVyLT5yZWdzLT5yeG1hYy5wZl9jdHJsLnZhbHVlKTsKLQkJd3JpdGVsKGN0cmwudmFsdWUsICZhZGFwdGVyLT5yZWdzLT5yeG1hYy5jdHJsLnZhbHVlKTsKKwkJd3JpdGVsKHBmX2N0cmwsICZhZGFwdGVyLT5yZWdzLT5yeG1hYy5wZl9jdHJsKTsKKwkJd3JpdGVsKGN0cmwsICZhZGFwdGVyLT5yZWdzLT5yeG1hYy5jdHJsKTsKIAl9CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTY3NSwxMiArNjY4LDggQEAKIAogCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGRyZXNzLT5zYV9kYXRhLCBuZXRkZXYtPmFkZHJfbGVuKTsKIAotCXByaW50ayhLRVJOX0lORk8KLQkJIiVzOiBTZXR0aW5nIE1BQyBhZGRyZXNzIHRvICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAotCQkJbmV0ZGV2LT5uYW1lLAotCQkJbmV0ZGV2LT5kZXZfYWRkclswXSwgbmV0ZGV2LT5kZXZfYWRkclsxXSwKLQkJCW5ldGRldi0+ZGV2X2FkZHJbMl0sIG5ldGRldi0+ZGV2X2FkZHJbM10sCi0JCQluZXRkZXYtPmRldl9hZGRyWzRdLCBuZXRkZXYtPmRldl9hZGRyWzVdKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogU2V0dGluZyBNQUMgYWRkcmVzcyB0byAlcE1cbiIsCisJCQluZXRkZXYtPm5hbWUsIG5ldGRldi0+ZGV2X2FkZHIpOwogCiAJLyogRnJlZSBSeCBETUEgbWVtb3J5ICovCiAJZXQxMzF4X2FkYXB0ZXJfbWVtb3J5X2ZyZWUoYWRhcHRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9uZXRkZXYuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X25ldGRldi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWI0YTkyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X25ldGRldi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIEFnZXJlIFN5c3RlbXMgSW5jLgotICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCi0gKgotICogQ29weXJpZ2h0IMKpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogZXQxMzF4X25ldGRldi5oIC0gRGVmaW5lcywgc3RydWN0cywgZW51bXMsIHByb3RvdHlwZXMsIGV0Yy4gcmVsYXRlZCB0byB0aGUKLSAqICAgICAgICAgICAgICAgICAgIGRyaXZlcidzIG5ldF9kZXZpY2Ugc3VwcG9ydC4KLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIFNPRlRXQVJFIExJQ0VOU0UKLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKLSAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKLSAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KLSAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KLSAqCi0gKiBDb3B5cmlnaHQgwqkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwotICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKLSAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogRGlzY2xhaW1lcgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAotICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQotICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KLSAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICi0gKiBEQU1BR0UuCi0gKgotICovCi0KLSNpZm5kZWYgX19FVDEzMVhfTkVUREVWX0hfXwotI2RlZmluZSBfX0VUMTMxWF9ORVRERVZfSF9fCi0KLXN0cnVjdCBuZXRfZGV2aWNlICpldDEzMXhfZGV2aWNlX2FsbG9jKHZvaWQpOwotCi0jZW5kaWYgLyogX19FVDEzMVhfTkVUREVWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfdmVyc2lvbi5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfdmVyc2lvbi5oCmluZGV4IDU2OGY2YzguLjJhYTliZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X3ZlcnNpb24uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF92ZXJzaW9uLmgKQEAgLTYyLDIwICs2MiwxMyBAQAogI2RlZmluZSBEUklWRVJfTElDRU5TRQkJIkR1YWwgQlNEL0dQTCIKICNkZWZpbmUgRFJJVkVSX0RFVklDRV9TVFJJTkcJIkVUMTMxMCIKICNkZWZpbmUgRFJJVkVSX05BTUUJCSJldDEzMXgiCi0jZGVmaW5lIERSSVZFUl9NQUpPUl9WRVJTSU9OCTEKLSNkZWZpbmUgRFJJVkVSX01JTk9SX1ZFUlNJT04JMgotI2RlZmluZSBEUklWRVJfUEFUQ0hfVkVSU0lPTgkzCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OX1NUUklORwkiMS4yLjMiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OX1NUUklORwkiMS4yLjMtbGsiCiAjZGVmaW5lIERSSVZFUl9WRU5ET1IJCSJBZ2VyZSBTeXN0ZW1zLCBodHRwOi8vd3d3LmFnZXJlLmNvbSIKICNkZWZpbmUgRFJJVkVSX0RFU0MJCSIxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIgogCi0jZGVmaW5lIFNUUlVDVF9NT0RVTEUJCSJuZXQiCS8qIGJsdXg6IG1pc3NlZCBieSB0aGUga2VybmVsICovCi0KICNkZWZpbmUgRFJJVkVSX0lORk8JCURSSVZFUl9ERVNDICIgZm9yIHRoZSAiXAogCQkJCURSSVZFUl9ERVZJQ0VfU1RSSU5HICIsIHYiIFwKIAkJCQlEUklWRVJfVkVSU0lPTl9TVFJJTkcgIiBieSAiIFwKIAkJCQlEUklWRVJfVkVORE9SCiAKLSNkZWZpbmUgRFJJVkVSX05BTUVfRVhUCQkiZXQxMzF4LmtvIgotCiAjZW5kaWYgLyogX19FVDEzMVhfVkVSU0lPTl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci9hbHBoYXRyYWNrLmMgYi9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvYWxwaGF0cmFjay5jCmluZGV4IDE1YWVkODcuLmE1MGEyMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci9hbHBoYXRyYWNrLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL2FscGhhdHJhY2suYwpAQCAtNTgsNyArNTgsNyBAQAogI2VuZGlmCiAKIC8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfYWxwaGF0cmFja190YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYl9hbHBoYXRyYWNrX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoVkVORE9SX0lELCBQUk9EVUNUX0lEKX0sCiAJe30JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci90cmFuenBvcnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci90cmFuenBvcnQuYwppbmRleCBlZjhmY2M4Li4yZjAzZjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvdHJhbnpwb3J0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL3RyYW56cG9ydC5jCkBAIC01NSw3ICs1NSw3IEBACiAjZW5kaWYKIAogLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYl90cmFuenBvcnRfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfdHJhbnpwb3J0X3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoVkVORE9SX0lELCBQUk9EVUNUX0lEKX0sCiAJe30JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LWRyaXZlci5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctZHJpdmVyLmMKaW5kZXggZmIxMzQ1Zi4uZDQyYmExNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctZHJpdmVyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctZHJpdmVyLmMKQEAgLTEyOCw2ICsxMjgsOCBAQAogCXJldHVybiBydjsKIH0KIAorTU9EVUxFX0ZJUk1XQVJFKCJnbzcwMDdmdy5iaW4iKTsKKwogLyoKICAqIEJvb3QgdGhlIGVuY29kZXIgYW5kIHJlZ2lzdGVyIHRoZSBJMkMgYWRhcHRlciBpZiByZXF1ZXN0ZWQuICBEbyB0aGUKICAqIG1pbmltdW0gaW5pdGlhbGl6YXRpb24gbmVjZXNzYXJ5LCBzaW5jZSB0aGUgYm9hcmQtc3BlY2lmaWMgY29kZSBtYXkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXVzYi5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctdXNiLmMKaW5kZXggMWU4OWRjMC4uZWUyNzhmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctdXNiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctdXNiLmMKQEAgLTQ0NCw3ICs0NDQsOSBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZ283MDA3X3VzYl9pZF90YWJsZVtdID0geworTU9EVUxFX0ZJUk1XQVJFKCJnbzcwMDd0di5iaW4iKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGdvNzAwN191c2JfaWRfdGFibGVbXSA9IHsKIAl7CiAJCS5tYXRjaF9mbGFncwk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX0FORF9WRVJTSU9OIHwKIAkJCQkJVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvczIyNTAtYm9hcmQuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvczIyNTAtYm9hcmQuYwppbmRleCBjMzI0ZjZlLi5kYzg5NTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3MyMjUwLWJvYXJkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1ib2FyZC5jCkBAIC02NjcsNyArNjY3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lkIHMyMjUwX2lkW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgczIyNTBfaWRbXSA9IHsKIAl7ICJzMjI1MCIsIDAgfSwKIAl7IH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3MyMjUwLWxvYWRlci5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1sb2FkZXIuYwppbmRleCBjMTUyYWI5Li4xZGUyZGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3MyMjUwLWxvYWRlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvczIyNTAtbG9hZGVyLmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCiBzdGF0aWMgdm9pZCBzMjI1MGxvYWRlcl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCiB7Ci0JcGRldmljZV9leHRlbnNpb25fdCBzID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXBkZXZpY2VfZXh0ZW5zaW9uX3QgczsKIAlwcmludGsoS0VSTl9JTkZPICJzMjI1MDogZGlzY29ubmVjdFxuIik7CiAJbG9ja19rZXJuZWwoKTsKIAlzID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJdW5sb2NrX2tlcm5lbCgpOwogfQogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgczIyNTBsb2FkZXJfaWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgczIyNTBsb2FkZXJfaWRzW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHgxOTQzLCAweGEyNTApfSwKIAl7fSAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3NhYTcxMzQtZ283MDA3LmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3NhYTcxMzQtZ283MDA3LmMKaW5kZXggNjY1YmJmNS4uYjI1ZDdkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zYWE3MTM0LWdvNzAwNy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvc2FhNzEzNC1nbzcwMDcuYwpAQCAtODQsNiArODQsNyBAQAogCQl9LAogCX0sCiB9OworTU9EVUxFX0ZJUk1XQVJFKCJnbzcwMDd0di5iaW4iKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKiBEcml2ZXIgZm9yIEdQSU8gSFBJIGludGVyZmFjZSAqKioqKioqKioqKioqKioqKioqKiovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLW92NzY0MC5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtb3Y3NjQwLmMKaW5kZXggMDRkNmQzYS4uNGYwY2JkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtb3Y3NjQwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtb3Y3NjQwLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdpc19vdjc2NDBfaWRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3aXNfb3Y3NjQwX2lkW10gPSB7CiAJeyAid2lzX292NzY0MCIsIDAgfSwKIAl7IH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1zYWE3MTEzLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1zYWE3MTEzLmMKaW5kZXggOWFiODkzYi4uZDE5NmUxNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXNhYTcxMTMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1zYWE3MTEzLmMKQEAgLTMwNCw3ICszMDQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGkyY19kZXZpY2VfaWQgd2lzX3NhYTcxMTNfaWRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3aXNfc2FhNzExM19pZFtdID0gewogCXsgIndpc19zYWE3MTEzIiwgMCB9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXNhYTcxMTUuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXNhYTcxMTUuYwppbmRleCA4Njg3YWQyLi4wZjJiNGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1zYWE3MTE1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtc2FhNzExNS5jCkBAIC00MzcsNyArNDM3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdpc19zYWE3MTE1X2lkW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd2lzX3NhYTcxMTVfaWRbXSA9IHsKIAl7ICJ3aXNfc2FhNzExNSIsIDAgfSwKIAl7IH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1zb255LXR1bmVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1zb255LXR1bmVyLmMKaW5kZXggMDg2ODk2Yy4uYzcyM2U0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtc29ueS10dW5lci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXNvbnktdHVuZXIuYwpAQCAtNjg4LDcgKzY4OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3aXNfc29ueV90dW5lcl9pZFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdpc19zb255X3R1bmVyX2lkW10gPSB7CiAJeyAid2lzX3NvbnlfdHVuZXIiLCAwIH0sCiAJeyB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtdHcyODA0LmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy10dzI4MDQuYwppbmRleCBlMTU3OTRhLi4xOTgzODM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy10dzI4MDQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy10dzI4MDQuYwpAQCAtMzI3LDcgKzMyNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3aXNfdHcyODA0X2lkW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd2lzX3R3MjgwNF9pZFtdID0gewogCXsgIndpc190dzI4MDQiLCAwIH0sCiAJeyB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtdHc5OTAzLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy10dzk5MDMuYwppbmRleCA1MDZkY2E2Li5mOTdlMmJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy10dzk5MDMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy10dzk5MDMuYwpAQCAtMzA5LDcgKzMwOSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3aXNfdHc5OTAzX2lkW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd2lzX3R3OTkwM19pZFtdID0gewogCXsgIndpc190dzk5MDMiLCAwIH0sCiAJeyB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtdWRhMTM0Mi5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtdWRhMTM0Mi5jCmluZGV4IDczOWM3YWUuLjVjNGViNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXVkYTEzNDIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy11ZGExMzQyLmMKQEAgLTgyLDcgKzgyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdpc191ZGExMzQyX2lkW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd2lzX3VkYTEzNDJfaWRbXSA9IHsKIAl7ICJ3aXNfdWRhMTM0MiIsIDAgfSwKIAl7IH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvQ2hhbm5lbC5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L0NoYW5uZWwuYwppbmRleCA3NDYzNzBlLi5kNDZlYjE0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L0NoYW5uZWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvQ2hhbm5lbC5jCkBAIC05OTEsOSArOTkxLDggQEAKIHsKIAlzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqY2hhbm5lbCA9IChzdHJ1Y3Qgdm1idXNfY2hhbm5lbCAqKWRhdGE7CiAKLQlpZiAoY2hhbm5lbC0+T25DaGFubmVsQ2FsbGJhY2spIHsKKwlpZiAoY2hhbm5lbC0+T25DaGFubmVsQ2FsbGJhY2spCiAJCWNoYW5uZWwtPk9uQ2hhbm5lbENhbGxiYWNrKGNoYW5uZWwtPkNoYW5uZWxDYWxsYmFja0NvbnRleHQpOwotCX0KIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvSHYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9Idi5jCmluZGV4IGMyODA5ZjIuLjUxMTQ5ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9Idi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9Idi5jCkBAIC0yMDgsNTAgKzIwOCw1MSBAQAogCS8qIEh2UXVlcnlIeXBlcnZpc29yRmVhdHVyZXMobWF4TGVhZik7ICovCiAKIAkvKgotCSAqIERldGVybWluZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB4ZW5saW51eCAoaWUgeDJ2IHNoaW0pIG9yIG5hdGl2ZQotCSAqIGxpbnV4CisJICogV2Ugb25seSBzdXBwb3J0IHJ1bm5pbmcgb24gdG9wIG9mIEh5cGVyLVYKIAkgKi8KIAlyZG1zcmwoSFZfWDY0X01TUl9HVUVTVF9PU19JRCwgZ0h2Q29udGV4dC5HdWVzdElkKTsKLQlpZiAoZ0h2Q29udGV4dC5HdWVzdElkID09IDApIHsKLQkJLyogV3JpdGUgb3VyIE9TIGluZm8gKi8KLQkJd3Jtc3JsKEhWX1g2NF9NU1JfR1VFU1RfT1NfSUQsIEhWX0xJTlVYX0dVRVNUX0lEKTsKLQkJZ0h2Q29udGV4dC5HdWVzdElkID0gSFZfTElOVVhfR1VFU1RfSUQ7Ci0JfQogCi0JLyogU2VlIGlmIHRoZSBoeXBlcmNhbGwgcGFnZSBpcyBhbHJlYWR5IHNldCAqLwotCXJkbXNybChIVl9YNjRfTVNSX0hZUEVSQ0FMTCwgaHlwZXJjYWxsTXNyLkFzVUlOVDY0KTsKLQlpZiAoZ0h2Q29udGV4dC5HdWVzdElkID09IEhWX0xJTlVYX0dVRVNUX0lEKSB7Ci0JCS8qIEFsbG9jYXRlIHRoZSBoeXBlcmNhbGwgcGFnZSBtZW1vcnkgKi8KLQkJLyogdmlydEFkZHIgPSBvc2RfUGFnZUFsbG9jKDEpOyAqLwotCQl2aXJ0QWRkciA9IG9zZF9WaXJ0dWFsQWxsb2NFeGVjKFBBR0VfU0laRSk7Ci0KLQkJaWYgKCF2aXJ0QWRkcikgewotCQkJRFBSSU5UX0VSUihWTUJVUywKLQkJCQkgICAidW5hYmxlIHRvIGFsbG9jYXRlIGh5cGVyY2FsbCBwYWdlISEiKTsKLQkJCWdvdG8gQ2xlYW51cDsKLQkJfQotCi0JCWh5cGVyY2FsbE1zci5FbmFibGUgPSAxOwotCQkvKiBoeXBlcmNhbGxNc3IuR3Vlc3RQaHlzaWNhbEFkZHJlc3MgPQotCQkgKiAJCXZpcnRfdG9fcGh5cyh2aXJ0QWRkcikgPj4gUEFHRV9TSElGVDsgKi8KLQkJaHlwZXJjYWxsTXNyLkd1ZXN0UGh5c2ljYWxBZGRyZXNzID0gdm1hbGxvY190b19wZm4odmlydEFkZHIpOwotCQl3cm1zcmwoSFZfWDY0X01TUl9IWVBFUkNBTEwsIGh5cGVyY2FsbE1zci5Bc1VJTlQ2NCk7Ci0KLQkJLyogQ29uZmlybSB0aGF0IGh5cGVyY2FsbCBwYWdlIGRpZCBnZXQgc2V0dXAuICovCi0JCWh5cGVyY2FsbE1zci5Bc1VJTlQ2NCA9IDA7Ci0JCXJkbXNybChIVl9YNjRfTVNSX0hZUEVSQ0FMTCwgaHlwZXJjYWxsTXNyLkFzVUlOVDY0KTsKLQkJaWYgKCFoeXBlcmNhbGxNc3IuRW5hYmxlKSB7Ci0JCQlEUFJJTlRfRVJSKFZNQlVTLCAidW5hYmxlIHRvIHNldCBoeXBlcmNhbGwgcGFnZSEhIik7Ci0JCQlnb3RvIENsZWFudXA7Ci0JCX0KLQotCQlnSHZDb250ZXh0Lkh5cGVyY2FsbFBhZ2UgPSB2aXJ0QWRkcjsKLQl9IGVsc2UgeworCWlmIChnSHZDb250ZXh0Lkd1ZXN0SWQgIT0gMCkgewogCQlEUFJJTlRfRVJSKFZNQlVTLCAiVW5rbm93biBndWVzdCBpZCAoMHglbGx4KSEhIiwKIAkJCQlnSHZDb250ZXh0Lkd1ZXN0SWQpOwogCQlnb3RvIENsZWFudXA7CiAJfQogCisJLyogV3JpdGUgb3VyIE9TIGluZm8gKi8KKwl3cm1zcmwoSFZfWDY0X01TUl9HVUVTVF9PU19JRCwgSFZfTElOVVhfR1VFU1RfSUQpOworCWdIdkNvbnRleHQuR3Vlc3RJZCA9IEhWX0xJTlVYX0dVRVNUX0lEOworCisJLyogU2VlIGlmIHRoZSBoeXBlcmNhbGwgcGFnZSBpcyBhbHJlYWR5IHNldCAqLworCXJkbXNybChIVl9YNjRfTVNSX0hZUEVSQ0FMTCwgaHlwZXJjYWxsTXNyLkFzVUlOVDY0KTsKKworCS8qCisJKiBBbGxvY2F0ZSB0aGUgaHlwZXJjYWxsIHBhZ2UgbWVtb3J5CisJKiB2aXJ0QWRkciA9IG9zZF9QYWdlQWxsb2MoMSk7CisJKi8KKwl2aXJ0QWRkciA9IG9zZF9WaXJ0dWFsQWxsb2NFeGVjKFBBR0VfU0laRSk7CisKKwlpZiAoIXZpcnRBZGRyKSB7CisJCURQUklOVF9FUlIoVk1CVVMsCisJCQkgICAidW5hYmxlIHRvIGFsbG9jYXRlIGh5cGVyY2FsbCBwYWdlISEiKTsKKwkJZ290byBDbGVhbnVwOworCX0KKworCWh5cGVyY2FsbE1zci5FbmFibGUgPSAxOworCisJaHlwZXJjYWxsTXNyLkd1ZXN0UGh5c2ljYWxBZGRyZXNzID0gdm1hbGxvY190b19wZm4odmlydEFkZHIpOworCXdybXNybChIVl9YNjRfTVNSX0hZUEVSQ0FMTCwgaHlwZXJjYWxsTXNyLkFzVUlOVDY0KTsKKworCS8qIENvbmZpcm0gdGhhdCBoeXBlcmNhbGwgcGFnZSBkaWQgZ2V0IHNldHVwLiAqLworCWh5cGVyY2FsbE1zci5Bc1VJTlQ2NCA9IDA7CisJcmRtc3JsKEhWX1g2NF9NU1JfSFlQRVJDQUxMLCBoeXBlcmNhbGxNc3IuQXNVSU5UNjQpOworCisJaWYgKCFoeXBlcmNhbGxNc3IuRW5hYmxlKSB7CisJCURQUklOVF9FUlIoVk1CVVMsICJ1bmFibGUgdG8gc2V0IGh5cGVyY2FsbCBwYWdlISEiKTsKKwkJZ290byBDbGVhbnVwOworCX0KKworCWdIdkNvbnRleHQuSHlwZXJjYWxsUGFnZSA9IHZpcnRBZGRyOworCiAJRFBSSU5UX0lORk8oVk1CVVMsICJIeXBlcmNhbGwgcGFnZSBWQT0lcCwgUEE9MHglMGxseCIsCiAJCSAgICBnSHZDb250ZXh0Lkh5cGVyY2FsbFBhZ2UsCiAJCSAgICAodTY0KWh5cGVyY2FsbE1zci5HdWVzdFBoeXNpY2FsQWRkcmVzcyA8PCBQQUdFX1NISUZUKTsKQEAgLTI3Myw4ICsyNzQsNiBAQAogCWdIdkNvbnRleHQuU2lnbmFsRXZlbnRQYXJhbS0+RmxhZ051bWJlciA9IDA7CiAJZ0h2Q29udGV4dC5TaWduYWxFdmVudFBhcmFtLT5Sc3ZkWiA9IDA7CiAKLQkvKiBEUFJJTlRfREJHKFZNQlVTLCAiTXkgaWQgJWxsdSIsIEh2R2V0Q3VycmVudFBhcnRpdGlvbklkKCkpOyAqLwotCiAJRFBSSU5UX0VYSVQoVk1CVVMpOwogCiAJcmV0dXJuIHJldDsKQEAgLTMxMSwxNyArMzEwLDE0IEBACiAJCWtmcmVlKGdIdkNvbnRleHQuU2lnbmFsRXZlbnRCdWZmZXIpOwogCX0KIAotCWlmIChnSHZDb250ZXh0Lkd1ZXN0SWQgPT0gSFZfTElOVVhfR1VFU1RfSUQpIHsKLQkJaWYgKGdIdkNvbnRleHQuSHlwZXJjYWxsUGFnZSkgewotCQkJaHlwZXJjYWxsTXNyLkFzVUlOVDY0ID0gMDsKLQkJCXdybXNybChIVl9YNjRfTVNSX0hZUEVSQ0FMTCwgaHlwZXJjYWxsTXNyLkFzVUlOVDY0KTsKLQkJCXZmcmVlKGdIdkNvbnRleHQuSHlwZXJjYWxsUGFnZSk7Ci0JCQlnSHZDb250ZXh0Lkh5cGVyY2FsbFBhZ2UgPSBOVUxMOwotCQl9CisJaWYgKGdIdkNvbnRleHQuSHlwZXJjYWxsUGFnZSkgeworCQloeXBlcmNhbGxNc3IuQXNVSU5UNjQgPSAwOworCQl3cm1zcmwoSFZfWDY0X01TUl9IWVBFUkNBTEwsIGh5cGVyY2FsbE1zci5Bc1VJTlQ2NCk7CisJCXZmcmVlKGdIdkNvbnRleHQuSHlwZXJjYWxsUGFnZSk7CisJCWdIdkNvbnRleHQuSHlwZXJjYWxsUGFnZSA9IE5VTEw7CiAJfQogCiAJRFBSSU5UX0VYSVQoVk1CVVMpOwotCiB9CiAKIC8qKgpAQCAtMzkzLDcgKzM4OSw3IEBACiAJdW5pb24gaHZfc3luaWNfc2llZnAgc2llZnA7CiAJdW5pb24gaHZfc3luaWNfc2ludCBzaGFyZWRTaW50OwogCXVuaW9uIGh2X3N5bmljX3Njb250cm9sIHNjdHJsOwotCXU2NCBndWVzdElEOworCiAJdTMyIGlycVZlY3RvciA9ICooKHUzMiAqKShpcnFhcmcpKTsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCkBAIC00MDksNzIgKzQwNSw0MiBAQAogCiAJRFBSSU5UX0lORk8oVk1CVVMsICJTeW5JQyB2ZXJzaW9uOiAlbGx4IiwgdmVyc2lvbik7CiAKLQkvKiBUT0RPOiBIYW5kbGUgU01QICovCi0JaWYgKGdIdkNvbnRleHQuR3Vlc3RJZCA9PSBIVl9YRU5MSU5VWF9HVUVTVF9JRCkgewotCQlEUFJJTlRfSU5GTyhWTUJVUywgIlNraXBwaW5nIFNJTVAgYW5kIFNJRUZQIHNldHVwIHNpbmNlICIKLQkJCQkiaXQgaXMgYWxyZWFkeSBzZXQuIik7CisJZ0h2Q29udGV4dC5zeW5JQ01lc3NhZ2VQYWdlW2NwdV0gPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKIAotCQlyZG1zcmwoSFZfWDY0X01TUl9TSU1QLCBzaW1wLkFzVUlOVDY0KTsKLQkJcmRtc3JsKEhWX1g2NF9NU1JfU0lFRlAsIHNpZWZwLkFzVUlOVDY0KTsKLQotCQlEUFJJTlRfREJHKFZNQlVTLCAiU2ltcDogJWxseCwgU2lmZXA6ICVsbHgiLAotCQkJICAgc2ltcC5Bc1VJTlQ2NCwgc2llZnAuQXNVSU5UNjQpOwotCi0JCS8qCi0JCSAqIERldGVybWluZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB4ZW5saW51eCAoaWUgeDJ2IHNoaW0pIG9yCi0JCSAqIG5hdGl2ZSBsaW51eAotCQkgKi8KLQkJcmRtc3JsKEhWX1g2NF9NU1JfR1VFU1RfT1NfSUQsIGd1ZXN0SUQpOwotCQlpZiAoZ3Vlc3RJRCA9PSBIVl9MSU5VWF9HVUVTVF9JRCkgewotCQkJZ0h2Q29udGV4dC5zeW5JQ01lc3NhZ2VQYWdlW2NwdV0gPQotCQkJCXBoeXNfdG9fdmlydChzaW1wLkJhc2VTaW1wR3BhIDw8IFBBR0VfU0hJRlQpOwotCQkJZ0h2Q29udGV4dC5zeW5JQ0V2ZW50UGFnZVtjcHVdID0KLQkJCQlwaHlzX3RvX3ZpcnQoc2llZnAuQmFzZVNpZWZwR3BhIDw8IFBBR0VfU0hJRlQpOwotCQl9IGVsc2UgewotCQkJRFBSSU5UX0VSUihWTUJVUywgInVua25vd24gZ3Vlc3QgaWQhISIpOwotCQkJZ290byBDbGVhbnVwOwotCQl9Ci0JCURQUklOVF9EQkcoVk1CVVMsICJNQVBQRUQ6IFNpbXA6ICVwLCBTaWZlcDogJXAiLAotCQkJICAgZ0h2Q29udGV4dC5zeW5JQ01lc3NhZ2VQYWdlW2NwdV0sCi0JCQkgICBnSHZDb250ZXh0LnN5bklDRXZlbnRQYWdlW2NwdV0pOwotCX0gZWxzZSB7Ci0JCWdIdkNvbnRleHQuc3luSUNNZXNzYWdlUGFnZVtjcHVdID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7Ci0JCWlmIChnSHZDb250ZXh0LnN5bklDTWVzc2FnZVBhZ2VbY3B1XSA9PSBOVUxMKSB7Ci0JCQlEUFJJTlRfRVJSKFZNQlVTLAotCQkJCSAgICJ1bmFibGUgdG8gYWxsb2NhdGUgU1lOSUMgbWVzc2FnZSBwYWdlISEiKTsKLQkJCWdvdG8gQ2xlYW51cDsKLQkJfQotCi0JCWdIdkNvbnRleHQuc3luSUNFdmVudFBhZ2VbY3B1XSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMpOwotCQlpZiAoZ0h2Q29udGV4dC5zeW5JQ0V2ZW50UGFnZVtjcHVdID09IE5VTEwpIHsKLQkJCURQUklOVF9FUlIoVk1CVVMsCi0JCQkJICAgInVuYWJsZSB0byBhbGxvY2F0ZSBTWU5JQyBldmVudCBwYWdlISEiKTsKLQkJCWdvdG8gQ2xlYW51cDsKLQkJfQotCi0JCS8qIFNldHVwIHRoZSBTeW5pYydzIG1lc3NhZ2UgcGFnZSAqLwotCQlyZG1zcmwoSFZfWDY0X01TUl9TSU1QLCBzaW1wLkFzVUlOVDY0KTsKLQkJc2ltcC5TaW1wRW5hYmxlZCA9IDE7Ci0JCXNpbXAuQmFzZVNpbXBHcGEgPSB2aXJ0X3RvX3BoeXMoZ0h2Q29udGV4dC5zeW5JQ01lc3NhZ2VQYWdlW2NwdV0pCi0JCQkJCT4+IFBBR0VfU0hJRlQ7Ci0KLQkJRFBSSU5UX0RCRyhWTUJVUywgIkhWX1g2NF9NU1JfU0lNUCBtc3Igc2V0IHRvOiAlbGx4IiwKLQkJCQlzaW1wLkFzVUlOVDY0KTsKLQotCQl3cm1zcmwoSFZfWDY0X01TUl9TSU1QLCBzaW1wLkFzVUlOVDY0KTsKLQotCQkvKiBTZXR1cCB0aGUgU3luaWMncyBldmVudCBwYWdlICovCi0JCXJkbXNybChIVl9YNjRfTVNSX1NJRUZQLCBzaWVmcC5Bc1VJTlQ2NCk7Ci0JCXNpZWZwLlNpZWZwRW5hYmxlZCA9IDE7Ci0JCXNpZWZwLkJhc2VTaWVmcEdwYSA9IHZpcnRfdG9fcGh5cyhnSHZDb250ZXh0LnN5bklDRXZlbnRQYWdlW2NwdV0pCi0JCQkJCT4+IFBBR0VfU0hJRlQ7Ci0KLQkJRFBSSU5UX0RCRyhWTUJVUywgIkhWX1g2NF9NU1JfU0lFRlAgbXNyIHNldCB0bzogJWxseCIsCi0JCQkJc2llZnAuQXNVSU5UNjQpOwotCi0JCXdybXNybChIVl9YNjRfTVNSX1NJRUZQLCBzaWVmcC5Bc1VJTlQ2NCk7CisJaWYgKGdIdkNvbnRleHQuc3luSUNNZXNzYWdlUGFnZVtjcHVdID09IE5VTEwpIHsKKwkJRFBSSU5UX0VSUihWTUJVUywKKwkJCSAgICJ1bmFibGUgdG8gYWxsb2NhdGUgU1lOSUMgbWVzc2FnZSBwYWdlISEiKTsKKwkJZ290byBDbGVhbnVwOwogCX0KIAorCWdIdkNvbnRleHQuc3luSUNFdmVudFBhZ2VbY3B1XSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMpOworCisJaWYgKGdIdkNvbnRleHQuc3luSUNFdmVudFBhZ2VbY3B1XSA9PSBOVUxMKSB7CisJCURQUklOVF9FUlIoVk1CVVMsCisJCQkgICAidW5hYmxlIHRvIGFsbG9jYXRlIFNZTklDIGV2ZW50IHBhZ2UhISIpOworCQlnb3RvIENsZWFudXA7CisJfQorCisJLyogU2V0dXAgdGhlIFN5bmljJ3MgbWVzc2FnZSBwYWdlICovCisJcmRtc3JsKEhWX1g2NF9NU1JfU0lNUCwgc2ltcC5Bc1VJTlQ2NCk7CisJc2ltcC5TaW1wRW5hYmxlZCA9IDE7CisJc2ltcC5CYXNlU2ltcEdwYSA9IHZpcnRfdG9fcGh5cyhnSHZDb250ZXh0LnN5bklDTWVzc2FnZVBhZ2VbY3B1XSkKKwkJPj4gUEFHRV9TSElGVDsKKworCURQUklOVF9EQkcoVk1CVVMsICJIVl9YNjRfTVNSX1NJTVAgbXNyIHNldCB0bzogJWxseCIsIHNpbXAuQXNVSU5UNjQpOworCisJd3Jtc3JsKEhWX1g2NF9NU1JfU0lNUCwgc2ltcC5Bc1VJTlQ2NCk7CisKKwkvKiBTZXR1cCB0aGUgU3luaWMncyBldmVudCBwYWdlICovCisJcmRtc3JsKEhWX1g2NF9NU1JfU0lFRlAsIHNpZWZwLkFzVUlOVDY0KTsKKwlzaWVmcC5TaWVmcEVuYWJsZWQgPSAxOworCXNpZWZwLkJhc2VTaWVmcEdwYSA9IHZpcnRfdG9fcGh5cyhnSHZDb250ZXh0LnN5bklDRXZlbnRQYWdlW2NwdV0pCisJCT4+IFBBR0VfU0hJRlQ7CisKKwlEUFJJTlRfREJHKFZNQlVTLCAiSFZfWDY0X01TUl9TSUVGUCBtc3Igc2V0IHRvOiAlbGx4Iiwgc2llZnAuQXNVSU5UNjQpOworCisJd3Jtc3JsKEhWX1g2NF9NU1JfU0lFRlAsIHNpZWZwLkFzVUlOVDY0KTsKKwogCS8qIFNldHVwIHRoZSBpbnRlcmNlcHRpb24gU0lOVC4gKi8KIAkvKiB3cm1zcmwoKEhWX1g2NF9NU1JfU0lOVDAgKyBIVl9TWU5JQ19JTlRFUkNFUFRJT05fU0lOVF9JTkRFWCksICovCiAJLyoJICBpbnRlcmNlcHRpb25TaW50LkFzVUlOVDY0KTsgKi8KQEAgLTUwNSwxMyArNDcxLDExIEBACiAJcmV0dXJuOwogCiBDbGVhbnVwOgotCWlmIChnSHZDb250ZXh0Lkd1ZXN0SWQgPT0gSFZfTElOVVhfR1VFU1RfSUQpIHsKLQkJaWYgKGdIdkNvbnRleHQuc3luSUNFdmVudFBhZ2VbY3B1XSkKLQkJCW9zZF9QYWdlRnJlZShnSHZDb250ZXh0LnN5bklDRXZlbnRQYWdlW2NwdV0sIDEpOworCWlmIChnSHZDb250ZXh0LnN5bklDRXZlbnRQYWdlW2NwdV0pCisJCW9zZF9QYWdlRnJlZShnSHZDb250ZXh0LnN5bklDRXZlbnRQYWdlW2NwdV0sIDEpOwogCi0JCWlmIChnSHZDb250ZXh0LnN5bklDTWVzc2FnZVBhZ2VbY3B1XSkKLQkJCW9zZF9QYWdlRnJlZShnSHZDb250ZXh0LnN5bklDTWVzc2FnZVBhZ2VbY3B1XSwgMSk7Ci0JfQorCWlmIChnSHZDb250ZXh0LnN5bklDTWVzc2FnZVBhZ2VbY3B1XSkKKwkJb3NkX1BhZ2VGcmVlKGdIdkNvbnRleHQuc3luSUNNZXNzYWdlUGFnZVtjcHVdLCAxKTsKIAogCURQUklOVF9FWElUKFZNQlVTKTsKIAlyZXR1cm47CkBAIC01NDIsMjcgKzUwNiwyMCBAQAogCS8qIERpc2FibGUgdGhlIGludGVycnVwdCAqLwogCXdybXNybChIVl9YNjRfTVNSX1NJTlQwICsgVk1CVVNfTUVTU0FHRV9TSU5ULCBzaGFyZWRTaW50LkFzVUlOVDY0KTsKIAotCS8qCi0JICogRGlzYWJsZSBhbmQgZnJlZSB0aGUgcmVzb3VyY2VzIG9ubHkgaWYgd2UgYXJlIHJ1bm5pbmcgYXMKLQkgKiBuYXRpdmUgbGludXggc2luY2UgaW4geGVubGludXgsIHdlIGFyZSBzaGFyaW5nIHRoZQotCSAqIHJlc291cmNlcyB3aXRoIHRoZSB4MnYgc2hpbQotCSAqLwotCWlmIChnSHZDb250ZXh0Lkd1ZXN0SWQgPT0gSFZfTElOVVhfR1VFU1RfSUQpIHsKLQkJcmRtc3JsKEhWX1g2NF9NU1JfU0lNUCwgc2ltcC5Bc1VJTlQ2NCk7Ci0JCXNpbXAuU2ltcEVuYWJsZWQgPSAwOwotCQlzaW1wLkJhc2VTaW1wR3BhID0gMDsKKwlyZG1zcmwoSFZfWDY0X01TUl9TSU1QLCBzaW1wLkFzVUlOVDY0KTsKKwlzaW1wLlNpbXBFbmFibGVkID0gMDsKKwlzaW1wLkJhc2VTaW1wR3BhID0gMDsKIAotCQl3cm1zcmwoSFZfWDY0X01TUl9TSU1QLCBzaW1wLkFzVUlOVDY0KTsKKwl3cm1zcmwoSFZfWDY0X01TUl9TSU1QLCBzaW1wLkFzVUlOVDY0KTsKIAotCQlyZG1zcmwoSFZfWDY0X01TUl9TSUVGUCwgc2llZnAuQXNVSU5UNjQpOwotCQlzaWVmcC5TaWVmcEVuYWJsZWQgPSAwOwotCQlzaWVmcC5CYXNlU2llZnBHcGEgPSAwOworCXJkbXNybChIVl9YNjRfTVNSX1NJRUZQLCBzaWVmcC5Bc1VJTlQ2NCk7CisJc2llZnAuU2llZnBFbmFibGVkID0gMDsKKwlzaWVmcC5CYXNlU2llZnBHcGEgPSAwOwogCi0JCXdybXNybChIVl9YNjRfTVNSX1NJRUZQLCBzaWVmcC5Bc1VJTlQ2NCk7CisJd3Jtc3JsKEhWX1g2NF9NU1JfU0lFRlAsIHNpZWZwLkFzVUlOVDY0KTsKIAotCQlvc2RfUGFnZUZyZWUoZ0h2Q29udGV4dC5zeW5JQ01lc3NhZ2VQYWdlW2NwdV0sIDEpOwotCQlvc2RfUGFnZUZyZWUoZ0h2Q29udGV4dC5zeW5JQ0V2ZW50UGFnZVtjcHVdLCAxKTsKLQl9CisJb3NkX1BhZ2VGcmVlKGdIdkNvbnRleHQuc3luSUNNZXNzYWdlUGFnZVtjcHVdLCAxKTsKKwlvc2RfUGFnZUZyZWUoZ0h2Q29udGV4dC5zeW5JQ0V2ZW50UGFnZVtjcHVdLCAxKTsKIAogCURQUklOVF9FWElUKFZNQlVTKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9Idi5oIGIvZHJpdmVycy9zdGFnaW5nL2h2L0h2LmgKaW5kZXggZmNlNGI1Yy4uNDFmNWViYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L0h2LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L0h2LmgKQEAgLTQxLDExICs0MSw2IEBACiAKICNkZWZpbmUgSFZfUFJFU0VOVF9CSVQJCQkweDgwMDAwMDAwCiAKLSNkZWZpbmUgSFZfWEVOTElOVVhfR1VFU1RfSURfTE8JCTB4MDAwMDAwMDAKLSNkZWZpbmUgSFZfWEVOTElOVVhfR1VFU1RfSURfSEkJCTB4MEIwMEIxMzUKLSNkZWZpbmUgSFZfWEVOTElOVVhfR1VFU1RfSUQJCSgoKHU2NClIVl9YRU5MSU5VWF9HVUVTVF9JRF9ISSA8PCAzMikgXAotCQkJCQkgIHwgSFZfWEVOTElOVVhfR1VFU1RfSURfTE8pCi0KICNkZWZpbmUgSFZfTElOVVhfR1VFU1RfSURfTE8JCTB4MDAwMDAwMDAKICNkZWZpbmUgSFZfTElOVVhfR1VFU1RfSURfSEkJCTB4QjE2QjAwQjUKICNkZWZpbmUgSFZfTElOVVhfR1VFU1RfSUQJCSgoKHU2NClIVl9MSU5VWF9HVUVTVF9JRF9ISSA8PCAzMikgfCBcCkBAIC0xMDIsOCArOTcsOSBAQAogfTsKIAogc3RydWN0IGh2X2NvbnRleHQgewotCS8qIFhlbkxpbnV4IG9yIG5hdGl2ZSBMaW51eC4gSWYgWGVuTGludXgsIHRoZSBoeXBlcmNhbGwgYW5kIHN5bmljIHBhZ2VzCi0JICogaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZCAqLworCS8qIFdlIG9ubHkgc3VwcG9ydCBydW5uaW5nIG9uIHRvcCBvZiBIeXBlci1WCisJKiBTbyBhdCB0aGlzIHBvaW50IHRoaXMgcmVhbGx5IGNhbiBvbmx5IGNvbnRhaW4gdGhlIEh5cGVyLVYgSUQKKwkqLwogCXU2NCBHdWVzdElkOwogCiAJdm9pZCAqSHlwZXJjYWxsUGFnZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9OZXRWc2NBcGkuaCBiL2RyaXZlcnMvc3RhZ2luZy9odi9OZXRWc2NBcGkuaAppbmRleCAxY2UyYjc0Li45NWQ3YTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvTmV0VnNjQXBpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L05ldFZzY0FwaS5oCkBAIC0xMDUsOCArMTA1LDYgQEAKIAl2b2lkICgqT25MaW5rU3RhdHVzQ2hhbmdlZCkoc3RydWN0IGh2X2RldmljZSAqZGV2LCB1MzIgU3RhdHVzKTsKIAogCS8qIFNwZWNpZmljIHRvIHRoaXMgZHJpdmVyICovCi0JaW50ICgqT25PcGVuKShzdHJ1Y3QgaHZfZGV2aWNlICpkZXYpOwotCWludCAoKk9uQ2xvc2UpKHN0cnVjdCBodl9kZXZpY2UgKmRldik7CiAJaW50ICgqT25TZW5kKShzdHJ1Y3QgaHZfZGV2aWNlICpkZXYsIHN0cnVjdCBodl9uZXR2c2NfcGFja2V0ICpwYWNrZXQpOwogCiAJdm9pZCAqQ29udGV4dDsKQEAgLTExOSw1ICsxMTcsNyBAQAogCiAvKiBJbnRlcmZhY2UgKi8KIGludCBOZXRWc2NJbml0aWFsaXplKHN0cnVjdCBodl9kcml2ZXIgKmRydik7CitpbnQgUm5kaXNGaWx0ZXJPbk9wZW4oc3RydWN0IGh2X2RldmljZSAqRGV2aWNlKTsKK2ludCBSbmRpc0ZpbHRlck9uQ2xvc2Uoc3RydWN0IGh2X2RldmljZSAqRGV2aWNlKTsKIAogI2VuZGlmIC8qIF9ORVRWU0NfQVBJX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvUmluZ0J1ZmZlci5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L1JpbmdCdWZmZXIuYwppbmRleCBmNjlhZTMzLi44MGI4YTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvUmluZ0J1ZmZlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9SaW5nQnVmZmVyLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogR2V0UmluZ0J1ZmZlckF2YWlsQnl0ZXMoUklOR19CVUZGRVJfSU5GTyAqcmJpLCB1MzIgKnJlYWQsIHUzMiAqd3JpdGUpCiB7Ci0JdTMyIHJlYWRfbG9jLHdyaXRlX2xvYzsKKwl1MzIgcmVhZF9sb2MsIHdyaXRlX2xvYzsKIAogCS8qIENhcHR1cmUgdGhlIHJlYWQvd3JpdGUgaW5kaWNlcyBiZWZvcmUgdGhleSBjaGFuZ2VkICovCiAJcmVhZF9sb2MgPSByYmktPlJpbmdCdWZmZXItPlJlYWRJbmRleDsKQEAgLTY4LDcgKzY4LDcgQEAKIAogLS0qLwogc3RhdGljIGlubGluZSB1MzIKLUdldE5leHRXcml0ZUxvY2F0aW9uKFJJTkdfQlVGRkVSX0lORk8qIFJpbmdJbmZvKQorR2V0TmV4dFdyaXRlTG9jYXRpb24oUklOR19CVUZGRVJfSU5GTyAqUmluZ0luZm8pCiB7CiAJdTMyIG5leHQgPSBSaW5nSW5mby0+UmluZ0J1ZmZlci0+V3JpdGVJbmRleDsKIApAQCAtODcsNyArODcsNyBAQAogCiAtLSovCiBzdGF0aWMgaW5saW5lIHZvaWQKLVNldE5leHRXcml0ZUxvY2F0aW9uKFJJTkdfQlVGRkVSX0lORk8qIFJpbmdJbmZvLCB1MzIgTmV4dFdyaXRlTG9jYXRpb24pCitTZXROZXh0V3JpdGVMb2NhdGlvbihSSU5HX0JVRkZFUl9JTkZPICpSaW5nSW5mbywgdTMyIE5leHRXcml0ZUxvY2F0aW9uKQogewogCVJpbmdJbmZvLT5SaW5nQnVmZmVyLT5Xcml0ZUluZGV4ID0gTmV4dFdyaXRlTG9jYXRpb247CiB9CkBAIC0xMDIsNyArMTAyLDcgQEAKIAogLS0qLwogc3RhdGljIGlubGluZSB1MzIKLUdldE5leHRSZWFkTG9jYXRpb24oUklOR19CVUZGRVJfSU5GTyogUmluZ0luZm8pCitHZXROZXh0UmVhZExvY2F0aW9uKFJJTkdfQlVGRkVSX0lORk8gKlJpbmdJbmZvKQogewogCXUzMiBuZXh0ID0gUmluZ0luZm8tPlJpbmdCdWZmZXItPlJlYWRJbmRleDsKIApAQCAtMTIyLDcgKzEyMiw3IEBACiAKIC0tKi8KIHN0YXRpYyBpbmxpbmUgdTMyCi1HZXROZXh0UmVhZExvY2F0aW9uV2l0aE9mZnNldChSSU5HX0JVRkZFUl9JTkZPKiBSaW5nSW5mbywgdTMyIE9mZnNldCkKK0dldE5leHRSZWFkTG9jYXRpb25XaXRoT2Zmc2V0KFJJTkdfQlVGRkVSX0lORk8gKlJpbmdJbmZvLCB1MzIgT2Zmc2V0KQogewogCXUzMiBuZXh0ID0gUmluZ0luZm8tPlJpbmdCdWZmZXItPlJlYWRJbmRleDsKIApAQCAtMTQzLDcgKzE0Myw3IEBACiAKIC0tKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotU2V0TmV4dFJlYWRMb2NhdGlvbihSSU5HX0JVRkZFUl9JTkZPKiBSaW5nSW5mbywgdTMyIE5leHRSZWFkTG9jYXRpb24pCitTZXROZXh0UmVhZExvY2F0aW9uKFJJTkdfQlVGRkVSX0lORk8gKlJpbmdJbmZvLCB1MzIgTmV4dFJlYWRMb2NhdGlvbikKIHsKIAlSaW5nSW5mby0+UmluZ0J1ZmZlci0+UmVhZEluZGV4ID0gTmV4dFJlYWRMb2NhdGlvbjsKIH0KQEAgLTE1OSw3ICsxNTksNyBAQAogCiAtLSovCiBzdGF0aWMgaW5saW5lIHZvaWQgKgotR2V0UmluZ0J1ZmZlcihSSU5HX0JVRkZFUl9JTkZPKiBSaW5nSW5mbykKK0dldFJpbmdCdWZmZXIoUklOR19CVUZGRVJfSU5GTyAqUmluZ0luZm8pCiB7CiAJcmV0dXJuICh2b2lkICopUmluZ0luZm8tPlJpbmdCdWZmZXItPkJ1ZmZlcjsKIH0KQEAgLTE3NSw3ICsxNzUsNyBAQAogCiAtLSovCiBzdGF0aWMgaW5saW5lIHUzMgotR2V0UmluZ0J1ZmZlclNpemUoUklOR19CVUZGRVJfSU5GTyogUmluZ0luZm8pCitHZXRSaW5nQnVmZmVyU2l6ZShSSU5HX0JVRkZFUl9JTkZPICpSaW5nSW5mbykKIHsKIAlyZXR1cm4gUmluZ0luZm8tPlJpbmdEYXRhU2l6ZTsKIH0KQEAgLTE5MCw5ICsxOTAsMTAgQEAKIAogLS0qLwogc3RhdGljIGlubGluZSB1NjQKLUdldFJpbmdCdWZmZXJJbmRpY2VzKFJJTkdfQlVGRkVSX0lORk8qIFJpbmdJbmZvKQorR2V0UmluZ0J1ZmZlckluZGljZXMoUklOR19CVUZGRVJfSU5GTyAqUmluZ0luZm8pCiB7Ci0JcmV0dXJuICgodTY0KVJpbmdJbmZvLT5SaW5nQnVmZmVyLT5Xcml0ZUluZGV4IDw8IDMyKSB8fCBSaW5nSW5mby0+UmluZ0J1ZmZlci0+UmVhZEluZGV4OworCXJldHVybiAoKHU2NClSaW5nSW5mby0+UmluZ0J1ZmZlci0+V3JpdGVJbmRleCA8PCAzMikKKwl8fCBSaW5nSW5mby0+UmluZ0J1ZmZlci0+UmVhZEluZGV4OwogfQogCiAKQEAgLTIxMCw5ICsyMTEsMTQgQEAKIAl1MzIgYnl0ZXNBdmFpbFRvV3JpdGU7CiAJdTMyIGJ5dGVzQXZhaWxUb1JlYWQ7CiAKLQlHZXRSaW5nQnVmZmVyQXZhaWxCeXRlcyhSaW5nSW5mbywgJmJ5dGVzQXZhaWxUb1JlYWQsICZieXRlc0F2YWlsVG9Xcml0ZSk7CisJR2V0UmluZ0J1ZmZlckF2YWlsQnl0ZXMoUmluZ0luZm8sCisJJmJ5dGVzQXZhaWxUb1JlYWQsCisJJmJ5dGVzQXZhaWxUb1dyaXRlKTsKIAotCURQUklOVChWTUJVUywgREVCVUdfUklOR19MVkwsICIlcyA8PHJpbmdpbmZvICVwIGJ1ZmZlciAlcCBhdmFpbCB3cml0ZSAldSBhdmFpbCByZWFkICV1IHJlYWQgaWR4ICV1IHdyaXRlIGlkeCAldT4+IiwKKwlEUFJJTlQoVk1CVVMsCisJCURFQlVHX1JJTkdfTFZMLAorCQkiJXMgPDxyaW5naW5mbyAlcCBidWZmZXIgJXAgYXZhaWwgd3JpdGUgJXUgIgorCQkiYXZhaWwgcmVhZCAldSByZWFkIGlkeCAldSB3cml0ZSBpZHggJXU+PiIsCiAJCVByZWZpeCwKIAkJUmluZ0luZm8sCiAJCVJpbmdJbmZvLT5SaW5nQnVmZmVyLT5CdWZmZXIsCkBAIC0yMjksMTMgKzIzNSwxMyBAQAogQ29weVRvUmluZ0J1ZmZlcigKIAlSSU5HX0JVRkZFUl9JTkZPCSpSaW5nSW5mbywKIAl1MzIJCQkJU3RhcnRXcml0ZU9mZnNldCwKLQl2b2lkICoJCQkJU3JjLAorCXZvaWQJCQkJKlNyYywKIAl1MzIJCQkJU3JjTGVuKTsKIAogc3RhdGljIHUzMgogQ29weUZyb21SaW5nQnVmZmVyKAogCVJJTkdfQlVGRkVSX0lORk8JKlJpbmdJbmZvLAotCXZvaWQgKgkJCQlEZXN0LAorCXZvaWQJCQkJKkRlc3QsCiAJdTMyCQkJCURlc3RMZW4sCiAJdTMyCQkJCVN0YXJ0UmVhZE9mZnNldCk7CiAKQEAgLTI1NiwxNSArMjYyLDE1IEBACiAJdTMyIGJ5dGVzQXZhaWxUb1dyaXRlOwogCXUzMiBieXRlc0F2YWlsVG9SZWFkOwogCi0JaWYgKFJpbmdJbmZvLT5SaW5nQnVmZmVyKQotCXsKLQkJR2V0UmluZ0J1ZmZlckF2YWlsQnl0ZXMoUmluZ0luZm8sICZieXRlc0F2YWlsVG9SZWFkLCAmYnl0ZXNBdmFpbFRvV3JpdGUpOworCWlmIChSaW5nSW5mby0+UmluZ0J1ZmZlcikgeworCQlHZXRSaW5nQnVmZmVyQXZhaWxCeXRlcyhSaW5nSW5mbywKKwkJCQkJJmJ5dGVzQXZhaWxUb1JlYWQsCisJCQkJCSZieXRlc0F2YWlsVG9Xcml0ZSk7CiAKIAkJRGVidWdJbmZvLT5CeXRlc0F2YWlsVG9SZWFkID0gYnl0ZXNBdmFpbFRvUmVhZDsKIAkJRGVidWdJbmZvLT5CeXRlc0F2YWlsVG9Xcml0ZSA9IGJ5dGVzQXZhaWxUb1dyaXRlOwogCQlEZWJ1Z0luZm8tPkN1cnJlbnRSZWFkSW5kZXggPSBSaW5nSW5mby0+UmluZ0J1ZmZlci0+UmVhZEluZGV4OwogCQlEZWJ1Z0luZm8tPkN1cnJlbnRXcml0ZUluZGV4ID0gUmluZ0luZm8tPlJpbmdCdWZmZXItPldyaXRlSW5kZXg7Ci0KIAkJRGVidWdJbmZvLT5DdXJyZW50SW50ZXJydXB0TWFzayA9IFJpbmdJbmZvLT5SaW5nQnVmZmVyLT5JbnRlcnJ1cHRNYXNrOwogCX0KIH0KQEAgLTI5OSw3ICszMDUsNyBAQAogCiAJbWVtc2V0KFJpbmdJbmZvLCAwLCBzaXplb2YoUklOR19CVUZGRVJfSU5GTykpOwogCi0JUmluZ0luZm8tPlJpbmdCdWZmZXIgPSAoUklOR19CVUZGRVIqKUJ1ZmZlcjsKKwlSaW5nSW5mby0+UmluZ0J1ZmZlciA9IChSSU5HX0JVRkZFUiAqKUJ1ZmZlcjsKIAlSaW5nSW5mby0+UmluZ0J1ZmZlci0+UmVhZEluZGV4ID0gUmluZ0luZm8tPlJpbmdCdWZmZXItPldyaXRlSW5kZXggPSAwOwogCiAJUmluZ0luZm8tPlJpbmdTaXplID0gQnVmZmVyTGVuOwpAQCAtMzE5LDcgKzMyNSw3IEBACiAJQ2xlYW51cCB0aGUgcmluZyBidWZmZXIKIAogLS0qLwotdm9pZCBSaW5nQnVmZmVyQ2xlYW51cChSSU5HX0JVRkZFUl9JTkZPKiBSaW5nSW5mbykKK3ZvaWQgUmluZ0J1ZmZlckNsZWFudXAoUklOR19CVUZGRVJfSU5GTyAqUmluZ0luZm8pCiB7CiB9CiAKQEAgLTMzNSwxNCArMzQxLDE0IEBACiBpbnQgUmluZ0J1ZmZlcldyaXRlKFJJTkdfQlVGRkVSX0lORk8gKk91dFJpbmdJbmZvLAogCQkgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsIHUzMiBzZ2NvdW50KQogewotCWludCBpPTA7CisJaW50IGkgPSAwOwogCXUzMiBieXRlQXZhaWxUb1dyaXRlOwogCXUzMiBieXRlQXZhaWxUb1JlYWQ7Ci0JdTMyIHRvdGFsQnl0ZXNUb1dyaXRlPTA7CisJdTMyIHRvdGFsQnl0ZXNUb1dyaXRlID0gMDsKIAogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAJdm9sYXRpbGUgdTMyIG5leHRXcml0ZUxvY2F0aW9uOwotCXU2NCBwcmV2SW5kaWNlcz0wOworCXU2NCBwcmV2SW5kaWNlcyA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCURQUklOVF9FTlRFUihWTUJVUyk7CkBAIC0zNTYsMTcgKzM2MiwyMyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJk91dFJpbmdJbmZvLT5yaW5nX2xvY2ssIGZsYWdzKTsKIAotCUdldFJpbmdCdWZmZXJBdmFpbEJ5dGVzKE91dFJpbmdJbmZvLCAmYnl0ZUF2YWlsVG9SZWFkLCAmYnl0ZUF2YWlsVG9Xcml0ZSk7CisJR2V0UmluZ0J1ZmZlckF2YWlsQnl0ZXMoT3V0UmluZ0luZm8sCisJCQkJJmJ5dGVBdmFpbFRvUmVhZCwKKwkJCQkmYnl0ZUF2YWlsVG9Xcml0ZSk7CiAKIAlEUFJJTlRfREJHKFZNQlVTLCAiV3JpdGluZyAldSBieXRlcy4uLiIsIHRvdGFsQnl0ZXNUb1dyaXRlKTsKIAogCS8qIER1bXBSaW5nSW5mbyhPdXRSaW5nSW5mbywgIkJFRk9SRSAiKTsgKi8KIAotCS8qIElmIHRoZXJlIGlzIG9ubHkgcm9vbSBmb3IgdGhlIHBhY2tldCwgYXNzdW1lIGl0IGlzIGZ1bGwuIE90aGVyd2lzZSwgdGhlIG5leHQgdGltZSBhcm91bmQsIHdlIHRoaW5rIHRoZSByaW5nIGJ1ZmZlciAqLworCS8qIElmIHRoZXJlIGlzIG9ubHkgcm9vbSBmb3IgdGhlIHBhY2tldCwgYXNzdW1lIGl0IGlzIGZ1bGwuICovCisJLyogT3RoZXJ3aXNlLCB0aGUgbmV4dCB0aW1lIGFyb3VuZCwgd2UgdGhpbmsgdGhlIHJpbmcgYnVmZmVyICovCiAJLyogaXMgZW1wdHkgc2luY2UgdGhlIHJlYWQgaW5kZXggPT0gd3JpdGUgaW5kZXggKi8KLQlpZiAoYnl0ZUF2YWlsVG9Xcml0ZSA8PSB0b3RhbEJ5dGVzVG9Xcml0ZSkKLQl7Ci0JCURQUklOVF9EQkcoVk1CVVMsICJObyBtb3JlIHNwYWNlIGxlZnQgb24gb3V0Ym91bmQgcmluZyBidWZmZXIgKG5lZWRlZCAldSwgYXZhaWwgJXUpIiwgdG90YWxCeXRlc1RvV3JpdGUsIGJ5dGVBdmFpbFRvV3JpdGUpOworCWlmIChieXRlQXZhaWxUb1dyaXRlIDw9IHRvdGFsQnl0ZXNUb1dyaXRlKSB7CisJCURQUklOVF9EQkcoVk1CVVMsCisJCQkiTm8gbW9yZSBzcGFjZSBsZWZ0IG9uIG91dGJvdW5kIHJpbmcgYnVmZmVyICIKKwkJCSIobmVlZGVkICV1LCBhdmFpbCAldSkiLAorCQkJdG90YWxCeXRlc1RvV3JpdGUsCisJCQlieXRlQXZhaWxUb1dyaXRlKTsKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZPdXRSaW5nSW5mby0+cmluZ19sb2NrLCBmbGFncyk7CiAKQEAgLTQyMywxNyArNDM1LDIyIEBACiB7CiAJdTMyIGJ5dGVzQXZhaWxUb1dyaXRlOwogCXUzMiBieXRlc0F2YWlsVG9SZWFkOwotCXUzMiBuZXh0UmVhZExvY2F0aW9uPTA7CisJdTMyIG5leHRSZWFkTG9jYXRpb24gPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmSW5SaW5nSW5mby0+cmluZ19sb2NrLCBmbGFncyk7CiAKLQlHZXRSaW5nQnVmZmVyQXZhaWxCeXRlcyhJblJpbmdJbmZvLCAmYnl0ZXNBdmFpbFRvUmVhZCwgJmJ5dGVzQXZhaWxUb1dyaXRlKTsKKwlHZXRSaW5nQnVmZmVyQXZhaWxCeXRlcyhJblJpbmdJbmZvLAorCQkJCSZieXRlc0F2YWlsVG9SZWFkLAorCQkJCSZieXRlc0F2YWlsVG9Xcml0ZSk7CiAKIAkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlYWQgKi8KLQlpZiAoYnl0ZXNBdmFpbFRvUmVhZCA8IEJ1ZmZlckxlbiApCi0JewotCQkvKiBEUFJJTlRfREJHKFZNQlVTLCAiZ290IGNhbGxiYWNrIGJ1dCBub3QgZW5vdWdoIHRvIHJlYWQgPGF2YWlsIHRvIHJlYWQgJWQgcmVhZCBzaXplICVkPiEhIiwgYnl0ZXNBdmFpbFRvUmVhZCwgQnVmZmVyTGVuKTsgKi8KKwlpZiAoYnl0ZXNBdmFpbFRvUmVhZCA8IEJ1ZmZlckxlbikgeworCQkvKiBEUFJJTlRfREJHKFZNQlVTLAorCQkJImdvdCBjYWxsYmFjayBidXQgbm90IGVub3VnaCB0byByZWFkICIKKwkJCSI8YXZhaWwgdG8gcmVhZCAlZCByZWFkIHNpemUgJWQ+ISEiLAorCQkJYnl0ZXNBdmFpbFRvUmVhZCwKKwkJCUJ1ZmZlckxlbik7ICovCiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmSW5SaW5nSW5mby0+cmluZ19sb2NrLCBmbGFncyk7CiAKQEAgLTQ0NCw5ICs0NjEsOSBAQAogCW5leHRSZWFkTG9jYXRpb24gPSBHZXROZXh0UmVhZExvY2F0aW9uKEluUmluZ0luZm8pOwogCiAJbmV4dFJlYWRMb2NhdGlvbiA9IENvcHlGcm9tUmluZ0J1ZmZlcihJblJpbmdJbmZvLAotCQkJCQkJCQkJCQlCdWZmZXIsCi0JCQkJCQkJCQkJCUJ1ZmZlckxlbiwKLQkJCQkJCQkJCQkJbmV4dFJlYWRMb2NhdGlvbik7CisJCQkJCQlCdWZmZXIsCisJCQkJCQlCdWZmZXJMZW4sCisJCQkJCQluZXh0UmVhZExvY2F0aW9uKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJkluUmluZ0luZm8tPnJpbmdfbG9jaywgZmxhZ3MpOwogCkBAIC00NjgsMjQgKzQ4NSwyOSBAQAogewogCXUzMiBieXRlc0F2YWlsVG9Xcml0ZTsKIAl1MzIgYnl0ZXNBdmFpbFRvUmVhZDsKLQl1MzIgbmV4dFJlYWRMb2NhdGlvbj0wOwotCXU2NCBwcmV2SW5kaWNlcz0wOworCXUzMiBuZXh0UmVhZExvY2F0aW9uID0gMDsKKwl1NjQgcHJldkluZGljZXMgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlBU1NFUlQoQnVmZmVyTGVuID4gMCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmSW5SaW5nSW5mby0+cmluZ19sb2NrLCBmbGFncyk7CiAKLQlHZXRSaW5nQnVmZmVyQXZhaWxCeXRlcyhJblJpbmdJbmZvLCAmYnl0ZXNBdmFpbFRvUmVhZCwgJmJ5dGVzQXZhaWxUb1dyaXRlKTsKKwlHZXRSaW5nQnVmZmVyQXZhaWxCeXRlcyhJblJpbmdJbmZvLAorCQkJCSZieXRlc0F2YWlsVG9SZWFkLAorCQkJCSZieXRlc0F2YWlsVG9Xcml0ZSk7CiAKIAlEUFJJTlRfREJHKFZNQlVTLCAiUmVhZGluZyAldSBieXRlcy4uLiIsIEJ1ZmZlckxlbik7CiAKIAkvKiBEdW1wUmluZ0luZm8oSW5SaW5nSW5mbywgIkJFRk9SRSAiKTsgKi8KIAogCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVhZCAqLwotCWlmIChieXRlc0F2YWlsVG9SZWFkIDwgQnVmZmVyTGVuICkKLQl7Ci0JCURQUklOVF9EQkcoVk1CVVMsICJnb3QgY2FsbGJhY2sgYnV0IG5vdCBlbm91Z2ggdG8gcmVhZCA8YXZhaWwgdG8gcmVhZCAlZCByZWFkIHNpemUgJWQ+ISEiLCBieXRlc0F2YWlsVG9SZWFkLCBCdWZmZXJMZW4pOworCWlmIChieXRlc0F2YWlsVG9SZWFkIDwgQnVmZmVyTGVuKSB7CisJCURQUklOVF9EQkcoVk1CVVMsCisJCQkiZ290IGNhbGxiYWNrIGJ1dCBub3QgZW5vdWdoIHRvIHJlYWQgIgorCQkJIjxhdmFpbCB0byByZWFkICVkIHJlYWQgc2l6ZSAlZD4hISIsCisJCQlieXRlc0F2YWlsVG9SZWFkLAorCQkJQnVmZmVyTGVuKTsKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZJblJpbmdJbmZvLT5yaW5nX2xvY2ssIGZsYWdzKTsKIApAQCAtNDk1LDE3ICs1MTcsMTggQEAKIAluZXh0UmVhZExvY2F0aW9uID0gR2V0TmV4dFJlYWRMb2NhdGlvbldpdGhPZmZzZXQoSW5SaW5nSW5mbywgT2Zmc2V0KTsKIAogCW5leHRSZWFkTG9jYXRpb24gPSBDb3B5RnJvbVJpbmdCdWZmZXIoSW5SaW5nSW5mbywKLQkJCQkJCQkJCQkJQnVmZmVyLAotCQkJCQkJCQkJCQlCdWZmZXJMZW4sCi0JCQkJCQkJCQkJCW5leHRSZWFkTG9jYXRpb24pOworCQkJCQkJQnVmZmVyLAorCQkJCQkJQnVmZmVyTGVuLAorCQkJCQkJbmV4dFJlYWRMb2NhdGlvbik7CiAKIAluZXh0UmVhZExvY2F0aW9uID0gQ29weUZyb21SaW5nQnVmZmVyKEluUmluZ0luZm8sCi0JCQkJCQkJCQkJCSZwcmV2SW5kaWNlcywKLQkJCQkJCQkJCQkJc2l6ZW9mKHU2NCksCi0JCQkJCQkJCQkJCW5leHRSZWFkTG9jYXRpb24pOworCQkJCQkJJnByZXZJbmRpY2VzLAorCQkJCQkJc2l6ZW9mKHU2NCksCisJCQkJCQluZXh0UmVhZExvY2F0aW9uKTsKIAogCS8qIE1ha2Ugc3VyZSBhbGwgcmVhZHMgYXJlIGRvbmUgYmVmb3JlIHdlIHVwZGF0ZSB0aGUgcmVhZCBpbmRleCBzaW5jZSAqLwotCS8qIHRoZSB3cml0ZXIgbWF5IHN0YXJ0IHdyaXRpbmcgdG8gdGhlIHJlYWQgYXJlYSBvbmNlIHRoZSByZWFkIGluZGV4IGlzIHVwZGF0ZWQgKi8KKwkvKiB0aGUgd3JpdGVyIG1heSBzdGFydCB3cml0aW5nIHRvIHRoZSByZWFkIGFyZWEgb25jZSB0aGUgcmVhZCBpbmRleCAqLworCS8qaXMgdXBkYXRlZCAqLwogCW1iKCk7CiAKIAkvKiBVcGRhdGUgdGhlIHJlYWQgaW5kZXggKi8KQEAgLTUzMywyNSArNTU2LDIyIEBACiBDb3B5VG9SaW5nQnVmZmVyKAogCVJJTkdfQlVGRkVSX0lORk8JKlJpbmdJbmZvLAogCXUzMgkJCQlTdGFydFdyaXRlT2Zmc2V0LAotCXZvaWQgKgkJCQlTcmMsCisJdm9pZAkJCQkqU3JjLAogCXUzMgkJCQlTcmNMZW4pCiB7Ci0Jdm9pZCAqIHJpbmdCdWZmZXI9R2V0UmluZ0J1ZmZlcihSaW5nSW5mbyk7Ci0JdTMyIHJpbmdCdWZmZXJTaXplPUdldFJpbmdCdWZmZXJTaXplKFJpbmdJbmZvKTsKKwl2b2lkICpyaW5nQnVmZmVyID0gR2V0UmluZ0J1ZmZlcihSaW5nSW5mbyk7CisJdTMyIHJpbmdCdWZmZXJTaXplID0gR2V0UmluZ0J1ZmZlclNpemUoUmluZ0luZm8pOwogCXUzMiBmcmFnTGVuOwogCi0JaWYgKFNyY0xlbiA+IHJpbmdCdWZmZXJTaXplIC0gU3RhcnRXcml0ZU9mZnNldCkgLyogd3JhcC1hcm91bmQgZGV0ZWN0ZWQhICovCi0JeworCS8qIHdyYXAtYXJvdW5kIGRldGVjdGVkISAqLworCWlmIChTcmNMZW4gPiByaW5nQnVmZmVyU2l6ZSAtIFN0YXJ0V3JpdGVPZmZzZXQpIHsKIAkJRFBSSU5UX0RCRyhWTUJVUywgIndyYXAtYXJvdW5kIGRldGVjdGVkISIpOwogCiAJCWZyYWdMZW4gPSByaW5nQnVmZmVyU2l6ZSAtIFN0YXJ0V3JpdGVPZmZzZXQ7CiAJCW1lbWNweShyaW5nQnVmZmVyICsgU3RhcnRXcml0ZU9mZnNldCwgU3JjLCBmcmFnTGVuKTsKIAkJbWVtY3B5KHJpbmdCdWZmZXIsIFNyYyArIGZyYWdMZW4sIFNyY0xlbiAtIGZyYWdMZW4pOwotCX0KLQllbHNlCi0JeworCX0gZWxzZQogCQltZW1jcHkocmluZ0J1ZmZlciArIFN0YXJ0V3JpdGVPZmZzZXQsIFNyYywgU3JjTGVuKTsKLQl9CiAKIAlTdGFydFdyaXRlT2Zmc2V0ICs9IFNyY0xlbjsKIAlTdGFydFdyaXRlT2Zmc2V0ICU9IHJpbmdCdWZmZXJTaXplOwpAQCAtNTczLDI4ICs1OTMsMjcgQEAKIHN0YXRpYyB1MzIKIENvcHlGcm9tUmluZ0J1ZmZlcigKIAlSSU5HX0JVRkZFUl9JTkZPCSpSaW5nSW5mbywKLQl2b2lkICoJCQkJRGVzdCwKKwl2b2lkCQkJCSpEZXN0LAogCXUzMgkJCQlEZXN0TGVuLAogCXUzMgkJCQlTdGFydFJlYWRPZmZzZXQpCiB7Ci0Jdm9pZCAqIHJpbmdCdWZmZXI9R2V0UmluZ0J1ZmZlcihSaW5nSW5mbyk7Ci0JdTMyIHJpbmdCdWZmZXJTaXplPUdldFJpbmdCdWZmZXJTaXplKFJpbmdJbmZvKTsKKwl2b2lkICpyaW5nQnVmZmVyID0gR2V0UmluZ0J1ZmZlcihSaW5nSW5mbyk7CisJdTMyIHJpbmdCdWZmZXJTaXplID0gR2V0UmluZ0J1ZmZlclNpemUoUmluZ0luZm8pOwogCiAJdTMyIGZyYWdMZW47CiAKLQlpZiAoRGVzdExlbiA+IHJpbmdCdWZmZXJTaXplIC0gU3RhcnRSZWFkT2Zmc2V0KSAvKiB3cmFwLWFyb3VuZCBkZXRlY3RlZCBhdCB0aGUgc3JjICovCi0JeworCS8qIHdyYXAtYXJvdW5kIGRldGVjdGVkIGF0IHRoZSBzcmMgKi8KKwlpZiAoRGVzdExlbiA+IHJpbmdCdWZmZXJTaXplIC0gU3RhcnRSZWFkT2Zmc2V0KSB7CiAJCURQUklOVF9EQkcoVk1CVVMsICJzcmMgd3JhcC1hcm91bmQgZGV0ZWN0ZWQhIik7CiAKIAkJZnJhZ0xlbiA9IHJpbmdCdWZmZXJTaXplIC0gU3RhcnRSZWFkT2Zmc2V0OwogCiAJCW1lbWNweShEZXN0LCByaW5nQnVmZmVyICsgU3RhcnRSZWFkT2Zmc2V0LCBmcmFnTGVuKTsKIAkJbWVtY3B5KERlc3QgKyBmcmFnTGVuLCByaW5nQnVmZmVyLCBEZXN0TGVuIC0gZnJhZ0xlbik7Ci0JfQotCWVsc2UKLQl7CisJfSBlbHNlCisKIAkJbWVtY3B5KERlc3QsIHJpbmdCdWZmZXIgKyBTdGFydFJlYWRPZmZzZXQsIERlc3RMZW4pOwotCX0KKwogCiAJU3RhcnRSZWFkT2Zmc2V0ICs9IERlc3RMZW47CiAJU3RhcnRSZWFkT2Zmc2V0ICU9IHJpbmdCdWZmZXJTaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L1JuZGlzRmlsdGVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvUm5kaXNGaWx0ZXIuYwppbmRleCAyNmQ3OTk3Li4xYWI3ZmE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvUm5kaXNGaWx0ZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvUm5kaXNGaWx0ZXIuYwpAQCAtODUsMTAgKzg1LDYgQEAKIAogc3RhdGljIHZvaWQgUm5kaXNGaWx0ZXJPbkNsZWFudXAoc3RydWN0IGh2X2RyaXZlciAqRHJpdmVyKTsKIAotc3RhdGljIGludCBSbmRpc0ZpbHRlck9uT3BlbihzdHJ1Y3QgaHZfZGV2aWNlICpEZXZpY2UpOwotCi1zdGF0aWMgaW50IFJuZGlzRmlsdGVyT25DbG9zZShzdHJ1Y3QgaHZfZGV2aWNlICpEZXZpY2UpOwotCiBzdGF0aWMgaW50IFJuZGlzRmlsdGVyT25TZW5kKHN0cnVjdCBodl9kZXZpY2UgKkRldmljZSwKIAkJCSAgICAgc3RydWN0IGh2X25ldHZzY19wYWNrZXQgKlBhY2tldCk7CiAKQEAgLTY1NCw4ICs2NTAsNiBAQAogCURyaXZlci0+QmFzZS5PbkRldmljZVJlbW92ZSA9IFJuZGlzRmlsdGVyT25EZXZpY2VSZW1vdmU7CiAJRHJpdmVyLT5CYXNlLk9uQ2xlYW51cCA9IFJuZGlzRmlsdGVyT25DbGVhbnVwOwogCURyaXZlci0+T25TZW5kID0gUm5kaXNGaWx0ZXJPblNlbmQ7Ci0JRHJpdmVyLT5Pbk9wZW4gPSBSbmRpc0ZpbHRlck9uT3BlbjsKLQlEcml2ZXItPk9uQ2xvc2UgPSBSbmRpc0ZpbHRlck9uQ2xvc2U7CiAJLyogRHJpdmVyLT5RdWVyeUxpbmtTdGF0dXMgPSBSbmRpc0ZpbHRlclF1ZXJ5RGV2aWNlTGlua1N0YXR1czsgKi8KIAlEcml2ZXItPk9uUmVjZWl2ZUNhbGxiYWNrID0gUm5kaXNGaWx0ZXJPblJlY2VpdmU7CiAKQEAgLTg4OCw3ICs4ODIsNyBAQAogCURQUklOVF9FWElUKE5FVFZTQyk7CiB9CiAKLXN0YXRpYyBpbnQgUm5kaXNGaWx0ZXJPbk9wZW4oc3RydWN0IGh2X2RldmljZSAqRGV2aWNlKQoraW50IFJuZGlzRmlsdGVyT25PcGVuKHN0cnVjdCBodl9kZXZpY2UgKkRldmljZSkKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXREZXZpY2UgPSBEZXZpY2UtPkV4dGVuc2lvbjsKQEAgLTkwMyw3ICs4OTcsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgUm5kaXNGaWx0ZXJPbkNsb3NlKHN0cnVjdCBodl9kZXZpY2UgKkRldmljZSkKK2ludCBSbmRpc0ZpbHRlck9uQ2xvc2Uoc3RydWN0IGh2X2RldmljZSAqRGV2aWNlKQogewogCWludCByZXQ7CiAJc3RydWN0IG5ldHZzY19kZXZpY2UgKm5ldERldmljZSA9IERldmljZS0+RXh0ZW5zaW9uOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L1N0b3JWc2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9TdG9yVnNjLmMKaW5kZXggMmY3YzQyNS4uMzhlYTE0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L1N0b3JWc2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvU3RvclZzYy5jCkBAIC02MjUsNyArNjI1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBTdG9yVnNjT25Ib3N0UmVzZXQoc3RydWN0IGh2X2RldmljZSAqRGV2aWNlKQoraW50IFN0b3JWc2NPbkhvc3RSZXNldChzdHJ1Y3QgaHZfZGV2aWNlICpEZXZpY2UpCiB7CiAJc3RydWN0IHN0b3J2c2NfZGV2aWNlICpzdG9yRGV2aWNlOwogCXN0cnVjdCBzdG9ydnNjX3JlcXVlc3RfZXh0ZW5zaW9uICpyZXF1ZXN0OwpAQCAtODQyLDcgKzg0Miw2IEBACiAJc3RvckRyaXZlci0+QmFzZS5PbkNsZWFudXAJPSBTdG9yVnNjT25DbGVhbnVwOwogCiAJc3RvckRyaXZlci0+T25JT1JlcXVlc3QJCT0gU3RvclZzY09uSU9SZXF1ZXN0OwotCXN0b3JEcml2ZXItPk9uSG9zdFJlc2V0CQk9IFN0b3JWc2NPbkhvc3RSZXNldDsKIAogCURQUklOVF9FWElUKFNUT1JWU0MpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvU3RvclZzY0FwaS5oIGIvZHJpdmVycy9zdGFnaW5nL2h2L1N0b3JWc2NBcGkuaAppbmRleCA2OWMxNDA2Li4xMjZhODU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvU3RvclZzY0FwaS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9TdG9yVnNjQXBpLmgKQEAgLTkxLDEzICs5MSw5IEBACiAJLyogTWF4aW11bSAjIG9mIHJlcXVlc3RzIGluIGZsaWdodCBwZXIgY2hhbm5lbC9kZXZpY2UgKi8KIAl1MzIgTWF4T3V0c3RhbmRpbmdSZXF1ZXN0c1BlckNoYW5uZWw7CiAKLQkvKiBTZXQgYnkgdGhlIGNhbGxlciB0byBhbGxvdyB1cyB0byByZS1lbnVtZXJhdGUgdGhlIGJ1cyBvbiB0aGUgaG9zdCAqLwotCXZvaWQgKCpPbkhvc3RSZXNjYW4pKHN0cnVjdCBodl9kZXZpY2UgKkRldmljZSk7Ci0KIAkvKiBTcGVjaWZpYyB0byB0aGlzIGRyaXZlciAqLwogCWludCAoKk9uSU9SZXF1ZXN0KShzdHJ1Y3QgaHZfZGV2aWNlICpEZXZpY2UsCiAJCQkgICBzdHJ1Y3QgaHZfc3RvcnZzY19yZXF1ZXN0ICpSZXF1ZXN0KTsKLQlpbnQgKCpPbkhvc3RSZXNldCkoc3RydWN0IGh2X2RldmljZSAqRGV2aWNlKTsKIH07CiAKIHN0cnVjdCBzdG9ydnNjX2RldmljZV9pbmZvIHsKQEAgLTEwOCw2ICsxMDQsNyBAQAogCiAvKiBJbnRlcmZhY2UgKi8KIGludCBTdG9yVnNjSW5pdGlhbGl6ZShzdHJ1Y3QgaHZfZHJpdmVyICpkcml2ZXIpOworaW50IFN0b3JWc2NPbkhvc3RSZXNldChzdHJ1Y3QgaHZfZGV2aWNlICpEZXZpY2UpOwogaW50IEJsa1ZzY0luaXRpYWxpemUoc3RydWN0IGh2X2RyaXZlciAqZHJpdmVyKTsKIAogI2VuZGlmIC8qIF9TVE9SVlNDX0FQSV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L1ZlcnNpb25JbmZvLmggYi9kcml2ZXJzL3N0YWdpbmcvaHYvVmVyc2lvbkluZm8uaAppbmRleCA5YzM2NDFkLi4xMGQ3YjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvVmVyc2lvbkluZm8uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvVmVyc2lvbkluZm8uaApAQCAtMjQsOCArMjQsMjQgQEAKICNpZm5kZWYgX19IVl9WRVJTSU9OX0lORk8KICNkZWZpbmUgX19IVl9WRVJTSU9OX0lORk8KIAotc3RhdGljIGNvbnN0IGNoYXIgVmVyc2lvbkRhdGVbXSA9IF9fREFURV9fOwotc3RhdGljIGNvbnN0IGNoYXIgVmVyc2lvblRpbWVbXSA9IF9fVElNRV9fOwotc3RhdGljIGNvbnN0IGNoYXIgVmVyc2lvbkRlc2NbXSA9ICJWZXJzaW9uIDIuMCI7CisvKgorICogV2UgdXNlIHRoZSBzYW1lIHZlcnNpb24gbnVtYmVyaW5nIGZvciBhbGwgSHlwZXItViBtb2R1bGVzLgorICoKKyAqIERlZmluaXRpb24gb2YgdmVyc2lvbmluZyBpcyBhcyBmb2xsb3dzOworICoKKyAqIAlNYWpvciBOdW1iZXIgCUNoYW5nZXMgZm9yIHRoZXNlIHNjZW5hcmlvczsKKyAqCQkJMS4JV2hlbiBhIG5ldyB2ZXJzaW9uIG9mIFdpbmRvd3MgSHlwZXItVgorICoJCQkJaXMgcmVsZWFzZWQuCisgKgkJCTIuCUEgTWFqb3IgY2hhbmdlIGhhcyBvY2N1cnJlZCBpbiB0aGUKKyAqCQkJICAgICAgIAlMaW51eCBJQydzLgorICoJCQkoRm9yIGV4YW1wbGUgdGhlIG1lcmdlIGZvciB0aGUgZmlyc3QgdGltZQorICoJCQlpbnRvIHRoZSBrZXJuZWwpIEV2ZXJ5IHRpbWUgdGhlIE1ham9yIE51bWJlcgorICoJCQljaGFuZ2VzLCB0aGUgUmV2aXNpb24gbnVtYmVyIGlzIHJlc2V0IHRvIDAuCisgKglNaW5vciBOdW1iZXIJQ2hhbmdlcyB3aGVuIG5ldyBmdW5jdGlvbmFsaXR5IGlzIGFkZGVkCisgKgkJCXRvIHRoZSBMaW51eCBJQydzIHRoYXQgaXMgbm90IGEgYnVnIGZpeC4KKyAqCisgKi8KKyNkZWZpbmUgSFZfRFJWX1ZFUlNJT04gICAgICAgICAgICIzLjAiCisKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvVm1idXMuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9WbWJ1cy5jCmluZGV4IDM1YTAyM2UuLjNkMGEyNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9WbWJ1cy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9WbWJ1cy5jCkBAIC0yNzMsMTAgKzI3Myw4IEBACiAKIAlEUFJJTlRfRU5URVIoVk1CVVMpOwogCi0JRFBSSU5UX0lORk8oVk1CVVMsICIrKysrKysrIEJ1aWxkIERhdGU9JXMgJXMgKysrKysrKyIsCi0JCQlWZXJzaW9uRGF0ZSwgVmVyc2lvblRpbWUpOwotCURQUklOVF9JTkZPKFZNQlVTLCAiKysrKysrKyBCdWlsZCBEZXNjcmlwdGlvbj0lcyArKysrKysrIiwKLQkJCVZlcnNpb25EZXNjKTsKKwlEUFJJTlRfSU5GTyhWTUJVUywgIisrKysrKysgSFYgRHJpdmVyIHZlcnNpb24gPSAlcyArKysrKysrIiwKKwkJICAgIEhWX0RSVl9WRVJTSU9OKTsKIAlEUFJJTlRfSU5GTyhWTUJVUywgIisrKysrKysgVm1idXMgc3VwcG9ydGVkIHZlcnNpb24gPSAlZCArKysrKysrIiwKIAkJCVZNQlVTX1JFVklTSU9OX05VTUJFUik7CiAJRFBSSU5UX0lORk8oVk1CVVMsICIrKysrKysrIFZtYnVzIHVzaW5nIFNJTlQgJWQgKysrKysrKyIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjX2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYwppbmRleCA0NWQ5MDgxLi5hYmVhYzEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjX2Rydi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfZGJnLmg+CiAjaW5jbHVkZSAib3NkLmgiCiAjaW5jbHVkZSAibG9nZ2luZy5oIgorI2luY2x1ZGUgIlZlcnNpb25JbmZvLmgiCiAjaW5jbHVkZSAidm1idXMuaCIKICNpbmNsdWRlICJTdG9yVnNjQXBpLmgiCiAKQEAgLTkyLDcgKzkzLDcgQEAKIC8qIFBlciBkZXZpY2Ugc3RydWN0dXJlICovCiBzdHJ1Y3QgYmxvY2tfZGV2aWNlX2NvbnRleHQgewogCS8qIHBvaW50IGJhY2sgdG8gb3VyIGRldmljZSBjb250ZXh0ICovCi0Jc3RydWN0IGRldmljZV9jb250ZXh0ICpkZXZpY2VfY3R4OworCXN0cnVjdCB2bV9kZXZpY2UgKmRldmljZV9jdHg7CiAJc3RydWN0IGttZW1fY2FjaGUgKnJlcXVlc3RfcG9vbDsKIAlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IGdlbmRpc2sgKmdkOwpAQCAtMjU0LDcgKzI1NSw3IEBACiAJCQkJKHN0cnVjdCBibGt2c2NfZHJpdmVyX2NvbnRleHQgKilkcml2ZXJfY3R4OwogCXN0cnVjdCBzdG9ydnNjX2RyaXZlcl9vYmplY3QgKnN0b3J2c2NfZHJ2X29iaiA9CiAJCQkJJmJsa3ZzY19kcnZfY3R4LT5kcnZfb2JqOwotCXN0cnVjdCBkZXZpY2VfY29udGV4dCAqZGV2aWNlX2N0eCA9IGRldmljZV90b19kZXZpY2VfY29udGV4dChkZXZpY2UpOworCXN0cnVjdCB2bV9kZXZpY2UgKmRldmljZV9jdHggPSBkZXZpY2VfdG9fdm1fZGV2aWNlKGRldmljZSk7CiAJc3RydWN0IGh2X2RldmljZSAqZGV2aWNlX29iaiA9ICZkZXZpY2VfY3R4LT5kZXZpY2Vfb2JqOwogCiAJc3RydWN0IGJsb2NrX2RldmljZV9jb250ZXh0ICpibGtkZXYgPSBOVUxMOwpAQCAtNzQyLDcgKzc0Myw3IEBACiAJCQkJKHN0cnVjdCBibGt2c2NfZHJpdmVyX2NvbnRleHQgKilkcml2ZXJfY3R4OwogCXN0cnVjdCBzdG9ydnNjX2RyaXZlcl9vYmplY3QgKnN0b3J2c2NfZHJ2X29iaiA9CiAJCQkJJmJsa3ZzY19kcnZfY3R4LT5kcnZfb2JqOwotCXN0cnVjdCBkZXZpY2VfY29udGV4dCAqZGV2aWNlX2N0eCA9IGRldmljZV90b19kZXZpY2VfY29udGV4dChkZXZpY2UpOworCXN0cnVjdCB2bV9kZXZpY2UgKmRldmljZV9jdHggPSBkZXZpY2VfdG9fdm1fZGV2aWNlKGRldmljZSk7CiAJc3RydWN0IGh2X2RldmljZSAqZGV2aWNlX29iaiA9ICZkZXZpY2VfY3R4LT5kZXZpY2Vfb2JqOwogCXN0cnVjdCBibG9ja19kZXZpY2VfY29udGV4dCAqYmxrZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldmljZSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTg2Miw3ICs4NjMsNyBAQAogCQkJdm9pZCAoKnJlcXVlc3RfY29tcGxldGlvbikoc3RydWN0IGh2X3N0b3J2c2NfcmVxdWVzdCAqKSkKIHsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlX2NvbnRleHQgKmJsa2RldiA9IGJsa3ZzY19yZXEtPmRldjsKLQlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKmRldmljZV9jdHggPSBibGtkZXYtPmRldmljZV9jdHg7CisJc3RydWN0IHZtX2RldmljZSAqZGV2aWNlX2N0eCA9IGJsa2Rldi0+ZGV2aWNlX2N0eDsKIAlzdHJ1Y3QgZHJpdmVyX2NvbnRleHQgKmRyaXZlcl9jdHggPQogCQkJZHJpdmVyX3RvX2RyaXZlcl9jb250ZXh0KGRldmljZV9jdHgtPmRldmljZS5kcml2ZXIpOwogCXN0cnVjdCBibGt2c2NfZHJpdmVyX2NvbnRleHQgKmJsa3ZzY19kcnZfY3R4ID0KQEAgLTE1MDQsNiArMTUwNSw3IEBACiB9CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKEhWX0RSVl9WRVJTSU9OKTsKIG1vZHVsZV9wYXJhbShibGt2c2NfcmluZ2J1ZmZlcl9zaXplLCBpbnQsIFNfSVJVR08pOwogbW9kdWxlX2luaXQoYmxrdnNjX2luaXQpOwogbW9kdWxlX2V4aXQoYmxrdnNjX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzY19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2NfZHJ2LmMKaW5kZXggMGQ3NDU5ZS4uMWFmM2RjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzY19kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjX2Rydi5jCkBAIC0zNSwxNCArMzUsMTMgQEAKICNpbmNsdWRlIDxuZXQvcGt0X3NjaGVkLmg+CiAjaW5jbHVkZSAib3NkLmgiCiAjaW5jbHVkZSAibG9nZ2luZy5oIgorI2luY2x1ZGUgIlZlcnNpb25JbmZvLmgiCiAjaW5jbHVkZSAidm1idXMuaCIKICNpbmNsdWRlICJOZXRWc2NBcGkuaCIKIAotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCiBzdHJ1Y3QgbmV0X2RldmljZV9jb250ZXh0IHsKIAkvKiBwb2ludCBiYWNrIHRvIG91ciBkZXZpY2UgY29udGV4dCAqLwotCXN0cnVjdCBkZXZpY2VfY29udGV4dCAqZGV2aWNlX2N0eDsKKwlzdHJ1Y3Qgdm1fZGV2aWNlICpkZXZpY2VfY3R4OwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogfTsKIApAQCAtNzIsMTEgKzcxLDYgQEAKIHN0YXRpYyBpbnQgbmV0dnNjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZV9jb250ZXh0ICpuZXRfZGV2aWNlX2N0eCA9IG5ldGRldl9wcml2KG5ldCk7Ci0Jc3RydWN0IGRyaXZlcl9jb250ZXh0ICpkcml2ZXJfY3R4ID0KLQkgICAgZHJpdmVyX3RvX2RyaXZlcl9jb250ZXh0KG5ldF9kZXZpY2VfY3R4LT5kZXZpY2VfY3R4LT5kZXZpY2UuZHJpdmVyKTsKLQlzdHJ1Y3QgbmV0dnNjX2RyaXZlcl9jb250ZXh0ICpuZXRfZHJ2X2N0eCA9Ci0JCShzdHJ1Y3QgbmV0dnNjX2RyaXZlcl9jb250ZXh0ICopZHJpdmVyX2N0eDsKLQlzdHJ1Y3QgbmV0dnNjX2RyaXZlciAqbmV0X2Rydl9vYmogPSAmbmV0X2Rydl9jdHgtPmRydl9vYmo7CiAJc3RydWN0IGh2X2RldmljZSAqZGV2aWNlX29iaiA9ICZuZXRfZGV2aWNlX2N0eC0+ZGV2aWNlX2N0eC0+ZGV2aWNlX29iajsKIAlpbnQgcmV0ID0gMDsKIApAQCAtODcsNyArODEsNyBAQAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSk7CiAKIAkJLyogT3BlbiB1cCB0aGUgZGV2aWNlICovCi0JCXJldCA9IG5ldF9kcnZfb2JqLT5Pbk9wZW4oZGV2aWNlX29iaik7CisJCXJldCA9IFJuZGlzRmlsdGVyT25PcGVuKGRldmljZV9vYmopOwogCQlpZiAocmV0ICE9IDApIHsKIAkJCURQUklOVF9FUlIoTkVUVlNDX0RSViwKIAkJCQkgICAidW5hYmxlIHRvIG9wZW4gZGV2aWNlIChyZXQgJWQpLiIsIHJldCk7CkBAIC0xMDYsMTEgKzEwMCw2IEBACiBzdGF0aWMgaW50IG5ldHZzY19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewogCXN0cnVjdCBuZXRfZGV2aWNlX2NvbnRleHQgKm5ldF9kZXZpY2VfY3R4ID0gbmV0ZGV2X3ByaXYobmV0KTsKLQlzdHJ1Y3QgZHJpdmVyX2NvbnRleHQgKmRyaXZlcl9jdHggPQotCSAgICBkcml2ZXJfdG9fZHJpdmVyX2NvbnRleHQobmV0X2RldmljZV9jdHgtPmRldmljZV9jdHgtPmRldmljZS5kcml2ZXIpOwotCXN0cnVjdCBuZXR2c2NfZHJpdmVyX2NvbnRleHQgKm5ldF9kcnZfY3R4ID0KLQkJKHN0cnVjdCBuZXR2c2NfZHJpdmVyX2NvbnRleHQgKilkcml2ZXJfY3R4OwotCXN0cnVjdCBuZXR2c2NfZHJpdmVyICpuZXRfZHJ2X29iaiA9ICZuZXRfZHJ2X2N0eC0+ZHJ2X29iajsKIAlzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2Vfb2JqID0gJm5ldF9kZXZpY2VfY3R4LT5kZXZpY2VfY3R4LT5kZXZpY2Vfb2JqOwogCWludCByZXQ7CiAKQEAgLTExOCw3ICsxMDcsNyBAQAogCiAJbmV0aWZfc3RvcF9xdWV1ZShuZXQpOwogCi0JcmV0ID0gbmV0X2Rydl9vYmotPk9uQ2xvc2UoZGV2aWNlX29iaik7CisJcmV0ID0gUm5kaXNGaWx0ZXJPbkNsb3NlKGRldmljZV9vYmopOwogCWlmIChyZXQgIT0gMCkKIAkJRFBSSU5UX0VSUihORVRWU0NfRFJWLCAidW5hYmxlIHRvIGNsb3NlIGRldmljZSAocmV0ICVkKS4iLCByZXQpOwogCkBAIC0yODIsNyArMjcxLDcgQEAKIHN0YXRpYyB2b2lkIG5ldHZzY19saW5rc3RhdHVzX2NhbGxiYWNrKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9vYmosCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCBzdGF0dXMpCiB7Ci0Jc3RydWN0IGRldmljZV9jb250ZXh0ICpkZXZpY2VfY3R4ID0gdG9fZGV2aWNlX2NvbnRleHQoZGV2aWNlX29iaik7CisJc3RydWN0IHZtX2RldmljZSAqZGV2aWNlX2N0eCA9IHRvX3ZtX2RldmljZShkZXZpY2Vfb2JqKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ID0gZGV2X2dldF9kcnZkYXRhKCZkZXZpY2VfY3R4LT5kZXZpY2UpOwogCiAJRFBSSU5UX0VOVEVSKE5FVFZTQ19EUlYpOwpAQCAtMzA5LDcgKzI5OCw3IEBACiBzdGF0aWMgaW50IG5ldHZzY19yZWN2X2NhbGxiYWNrKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9vYmosCiAJCQkJc3RydWN0IGh2X25ldHZzY19wYWNrZXQgKnBhY2tldCkKIHsKLQlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKmRldmljZV9jdHggPSB0b19kZXZpY2VfY29udGV4dChkZXZpY2Vfb2JqKTsKKwlzdHJ1Y3Qgdm1fZGV2aWNlICpkZXZpY2VfY3R4ID0gdG9fdm1fZGV2aWNlKGRldmljZV9vYmopOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQgPSBkZXZfZ2V0X2RydmRhdGEoJmRldmljZV9jdHgtPmRldmljZSk7CiAJc3RydWN0IG5ldF9kZXZpY2VfY29udGV4dCAqbmV0X2RldmljZV9jdHg7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTQwMSw3ICszOTAsNyBAQAogCXN0cnVjdCBuZXR2c2NfZHJpdmVyX2NvbnRleHQgKm5ldF9kcnZfY3R4ID0KIAkJKHN0cnVjdCBuZXR2c2NfZHJpdmVyX2NvbnRleHQgKilkcml2ZXJfY3R4OwogCXN0cnVjdCBuZXR2c2NfZHJpdmVyICpuZXRfZHJ2X29iaiA9ICZuZXRfZHJ2X2N0eC0+ZHJ2X29iajsKLQlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKmRldmljZV9jdHggPSBkZXZpY2VfdG9fZGV2aWNlX2NvbnRleHQoZGV2aWNlKTsKKwlzdHJ1Y3Qgdm1fZGV2aWNlICpkZXZpY2VfY3R4ID0gZGV2aWNlX3RvX3ZtX2RldmljZShkZXZpY2UpOwogCXN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9vYmogPSAmZGV2aWNlX2N0eC0+ZGV2aWNlX29iajsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ID0gTlVMTDsKIAlzdHJ1Y3QgbmV0X2RldmljZV9jb250ZXh0ICpuZXRfZGV2aWNlX2N0eDsKQEAgLTQ3Myw3ICs0NjIsNyBAQAogCXN0cnVjdCBuZXR2c2NfZHJpdmVyX2NvbnRleHQgKm5ldF9kcnZfY3R4ID0KIAkJKHN0cnVjdCBuZXR2c2NfZHJpdmVyX2NvbnRleHQgKilkcml2ZXJfY3R4OwogCXN0cnVjdCBuZXR2c2NfZHJpdmVyICpuZXRfZHJ2X29iaiA9ICZuZXRfZHJ2X2N0eC0+ZHJ2X29iajsKLQlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKmRldmljZV9jdHggPSBkZXZpY2VfdG9fZGV2aWNlX2NvbnRleHQoZGV2aWNlKTsKKwlzdHJ1Y3Qgdm1fZGV2aWNlICpkZXZpY2VfY3R4ID0gZGV2aWNlX3RvX3ZtX2RldmljZShkZXZpY2UpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQgPSBkZXZfZ2V0X2RydmRhdGEoJmRldmljZV9jdHgtPmRldmljZSk7CiAJc3RydWN0IGh2X2RldmljZSAqZGV2aWNlX29iaiA9ICZkZXZpY2VfY3R4LT5kZXZpY2Vfb2JqOwogCWludCByZXQ7CkBAIC02MTMsNiArNjAyLDggQEAKIAlEUFJJTlRfRVhJVChORVRWU0NfRFJWKTsKIH0KIAorTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oSFZfRFJWX1ZFUlNJT04pOwogbW9kdWxlX3BhcmFtKG5ldHZzY19yaW5nYnVmZmVyX3NpemUsIGludCwgU19JUlVHTyk7CiAKIG1vZHVsZV9pbml0KG5ldHZzY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9zdG9ydnNjX2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L3N0b3J2c2NfZHJ2LmMKaW5kZXggZDQ5ZGMyMS4uMzk4OGY0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L3N0b3J2c2NfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L3N0b3J2c2NfZHJ2LmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfZGJnLmg+CiAjaW5jbHVkZSAib3NkLmgiCiAjaW5jbHVkZSAibG9nZ2luZy5oIgorI2luY2x1ZGUgIlZlcnNpb25JbmZvLmgiCiAjaW5jbHVkZSAidm1idXMuaCIKICNpbmNsdWRlICJTdG9yVnNjQXBpLmgiCiAKQEAgLTM5LDEwICs0MCw4IEBACiBzdHJ1Y3QgaG9zdF9kZXZpY2VfY29udGV4dCB7CiAJLyogbXVzdCBiZSAxc3QgZmllbGQKIAkgKiBGSVhNRSB0aGlzIGlzIGEgYnVnICovCi0Jc3RydWN0IHdvcmtfc3RydWN0IGhvc3RfcmVzY2FuX3dvcms7Ci0KIAkvKiBwb2ludCBiYWNrIHRvIG91ciBkZXZpY2UgY29udGV4dCAqLwotCXN0cnVjdCBkZXZpY2VfY29udGV4dCAqZGV2aWNlX2N0eDsKKwlzdHJ1Y3Qgdm1fZGV2aWNlICpkZXZpY2VfY3R4OwogCXN0cnVjdCBrbWVtX2NhY2hlICpyZXF1ZXN0X3Bvb2w7CiAJdW5zaWduZWQgaW50IHBvcnQ7CiAJdW5zaWduZWQgY2hhciBwYXRoOwpAQCAtNzcsOCArNzYsNiBAQAogc3RhdGljIGludCBzdG9ydnNjX2RldmljZV9hbGxvYyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKik7CiBzdGF0aWMgaW50IHN0b3J2c2NfZGV2aWNlX2NvbmZpZ3VyZShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKik7CiBzdGF0aWMgaW50IHN0b3J2c2NfaG9zdF9yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjbW5kKTsKLXN0YXRpYyB2b2lkIHN0b3J2c2NfaG9zdF9yZXNjYW5fY2FsbGJhY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLXN0YXRpYyB2b2lkIHN0b3J2c2NfaG9zdF9yZXNjYW4oc3RydWN0IGh2X2RldmljZSAqZGV2aWNlX29iaik7CiBzdGF0aWMgaW50IHN0b3J2c2NfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmNyZWF0ZV9ib3VuY2VfYnVmZmVyKHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLApAQCAtOTQsOCArOTEsNiBAQAogCQkJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqYm91bmNlX3NnbCwKIAkJCQkJICB1bnNpZ25lZCBpbnQgb3JpZ19zZ2xfY291bnQpOwogCi1zdGF0aWMgaW50IHN0b3J2c2NfcmVwb3J0X2x1bnMoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB1bnNpZ25lZCBpbnQgbHVuc1tdLAotCQkJICAgICAgIHVuc2lnbmVkIGludCAqbHVuX2NvdW50KTsKIHN0YXRpYyBpbnQgc3RvcnZzY19nZXRfY2hzKHN0cnVjdCBzY3NpX2RldmljZSAqc2Rldiwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKIAkJCSAgIHNlY3Rvcl90IGNhcGFjaXR5LCBpbnQgKmluZm8pOwogCkBAIC0xNDgsNyArMTQzLDYgQEAKIAl2bWJ1c19nZXRfaW50ZXJmYWNlKCZzdG9ydnNjX2Rydl9vYmotPkJhc2UuVm1idXNDaGFubmVsSW50ZXJmYWNlKTsKIAogCXN0b3J2c2NfZHJ2X29iai0+UmluZ0J1ZmZlclNpemUgPSBzdG9ydnNjX3JpbmdidWZmZXJfc2l6ZTsKLQlzdG9ydnNjX2Rydl9vYmotPk9uSG9zdFJlc2NhbiA9IHN0b3J2c2NfaG9zdF9yZXNjYW47CiAKIAkvKiBDYWxsYmFjayB0byBjbGllbnQgZHJpdmVyIHRvIGNvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiAqLwogCWRydl9pbml0KCZzdG9ydnNjX2Rydl9vYmotPkJhc2UpOwpAQCAtMjQwLDcgKzIzNCw3IEBACiAJCQkJKHN0cnVjdCBzdG9ydnNjX2RyaXZlcl9jb250ZXh0ICopZHJpdmVyX2N0eDsKIAlzdHJ1Y3Qgc3RvcnZzY19kcml2ZXJfb2JqZWN0ICpzdG9ydnNjX2Rydl9vYmogPQogCQkJCSZzdG9ydnNjX2Rydl9jdHgtPmRydl9vYmo7Ci0Jc3RydWN0IGRldmljZV9jb250ZXh0ICpkZXZpY2VfY3R4ID0gZGV2aWNlX3RvX2RldmljZV9jb250ZXh0KGRldmljZSk7CisJc3RydWN0IHZtX2RldmljZSAqZGV2aWNlX2N0eCA9IGRldmljZV90b192bV9kZXZpY2UoZGV2aWNlKTsKIAlzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2Vfb2JqID0gJmRldmljZV9jdHgtPmRldmljZV9vYmo7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAlzdHJ1Y3QgaG9zdF9kZXZpY2VfY29udGV4dCAqaG9zdF9kZXZpY2VfY3R4OwpAQCAtMjY2LDkgKzI2MCw2IEBACiAJaG9zdF9kZXZpY2VfY3R4LT5wb3J0ID0gaG9zdC0+aG9zdF9ubzsKIAlob3N0X2RldmljZV9jdHgtPmRldmljZV9jdHggPSBkZXZpY2VfY3R4OwogCi0JSU5JVF9XT1JLKCZob3N0X2RldmljZV9jdHgtPmhvc3RfcmVzY2FuX3dvcmssCi0JCSAgc3RvcnZzY19ob3N0X3Jlc2Nhbl9jYWxsYmFjayk7Ci0KIAlob3N0X2RldmljZV9jdHgtPnJlcXVlc3RfcG9vbCA9CiAJCQkJa21lbV9jYWNoZV9jcmVhdGUoZGV2X25hbWUoJmRldmljZV9jdHgtPmRldmljZSksCiAJCQkJCXNpemVvZihzdHJ1Y3Qgc3RvcnZzY19jbWRfcmVxdWVzdCkgKwpAQCAtMzM5LDcgKzMzMCw3IEBACiAJCQkoc3RydWN0IHN0b3J2c2NfZHJpdmVyX2NvbnRleHQgKilkcml2ZXJfY3R4OwogCXN0cnVjdCBzdG9ydnNjX2RyaXZlcl9vYmplY3QgKnN0b3J2c2NfZHJ2X29iaiA9CiAJCQkmc3RvcnZzY19kcnZfY3R4LT5kcnZfb2JqOwotCXN0cnVjdCBkZXZpY2VfY29udGV4dCAqZGV2aWNlX2N0eCA9IGRldmljZV90b19kZXZpY2VfY29udGV4dChkZXZpY2UpOworCXN0cnVjdCB2bV9kZXZpY2UgKmRldmljZV9jdHggPSBkZXZpY2VfdG9fdm1fZGV2aWNlKGRldmljZSk7CiAJc3RydWN0IGh2X2RldmljZSAqZGV2aWNlX29iaiA9ICZkZXZpY2VfY3R4LT5kZXZpY2Vfb2JqOwogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKIAlzdHJ1Y3QgaG9zdF9kZXZpY2VfY29udGV4dCAqaG9zdF9kZXZpY2VfY3R4ID0KQEAgLTY0MCw3ICs2MzEsNyBAQAogCWludCByZXQ7CiAJc3RydWN0IGhvc3RfZGV2aWNlX2NvbnRleHQgKmhvc3RfZGV2aWNlX2N0eCA9CiAJCShzdHJ1Y3QgaG9zdF9kZXZpY2VfY29udGV4dCAqKXNjbW5kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOwotCXN0cnVjdCBkZXZpY2VfY29udGV4dCAqZGV2aWNlX2N0eCA9IGhvc3RfZGV2aWNlX2N0eC0+ZGV2aWNlX2N0eDsKKwlzdHJ1Y3Qgdm1fZGV2aWNlICpkZXZpY2VfY3R4ID0gaG9zdF9kZXZpY2VfY3R4LT5kZXZpY2VfY3R4OwogCXN0cnVjdCBkcml2ZXJfY29udGV4dCAqZHJpdmVyX2N0eCA9CiAJCWRyaXZlcl90b19kcml2ZXJfY29udGV4dChkZXZpY2VfY3R4LT5kZXZpY2UuZHJpdmVyKTsKIAlzdHJ1Y3Qgc3RvcnZzY19kcml2ZXJfY29udGV4dCAqc3RvcnZzY19kcnZfY3R4ID0KQEAgLTg3OSwxNCArODcwLDcgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBob3N0X2RldmljZV9jb250ZXh0ICpob3N0X2RldmljZV9jdHggPQogCQkoc3RydWN0IGhvc3RfZGV2aWNlX2NvbnRleHQgKilzY21uZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKLQlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKmRldmljZV9jdHggPSBob3N0X2RldmljZV9jdHgtPmRldmljZV9jdHg7Ci0Jc3RydWN0IGRyaXZlcl9jb250ZXh0ICpkcml2ZXJfY3R4ID0KLQkJCWRyaXZlcl90b19kcml2ZXJfY29udGV4dChkZXZpY2VfY3R4LT5kZXZpY2UuZHJpdmVyKTsKLQlzdHJ1Y3Qgc3RvcnZzY19kcml2ZXJfY29udGV4dCAqc3RvcnZzY19kcnZfY3R4ID0KLQkJCShzdHJ1Y3Qgc3RvcnZzY19kcml2ZXJfY29udGV4dCAqKWRyaXZlcl9jdHg7Ci0KLQlzdHJ1Y3Qgc3RvcnZzY19kcml2ZXJfb2JqZWN0ICpzdG9ydnNjX2Rydl9vYmogPQotCQkJJnN0b3J2c2NfZHJ2X2N0eC0+ZHJ2X29iajsKKwlzdHJ1Y3Qgdm1fZGV2aWNlICpkZXZpY2VfY3R4ID0gaG9zdF9kZXZpY2VfY3R4LT5kZXZpY2VfY3R4OwogCiAJRFBSSU5UX0VOVEVSKFNUT1JWU0NfRFJWKTsKIApAQCAtODk0LDggKzg3OCw3IEBACiAJCSAgICBzY21uZC0+ZGV2aWNlLCAmZGV2aWNlX2N0eC0+ZGV2aWNlX29iaik7CiAKIAkvKiBJbnZva2VzIHRoZSB2c2MgdG8gcmVzZXQgdGhlIGhvc3QvYnVzICovCi0JQVNTRVJUKHN0b3J2c2NfZHJ2X29iai0+T25Ib3N0UmVzZXQpOwotCXJldCA9IHN0b3J2c2NfZHJ2X29iai0+T25Ib3N0UmVzZXQoJmRldmljZV9jdHgtPmRldmljZV9vYmopOworCXJldCA9IFN0b3JWc2NPbkhvc3RSZXNldCgmZGV2aWNlX2N0eC0+ZGV2aWNlX29iaik7CiAJaWYgKHJldCAhPSAwKSB7CiAJCURQUklOVF9FWElUKFNUT1JWU0NfRFJWKTsKIAkJcmV0dXJuIHJldDsKQEAgLTkwOSwyMDEgKzg5Miw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoqCi0gKiBzdG9ydnNjX2hvc3RfcmVzY2FuIC0gUmVzY2FuIHRoZSBzY3NpIEhCQQotICovCi1zdGF0aWMgdm9pZCBzdG9ydnNjX2hvc3RfcmVzY2FuX2NhbGxiYWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2Vfb2JqID0KLQkgICAgJigoc3RydWN0IGhvc3RfZGV2aWNlX2NvbnRleHQgKil3b3JrKS0+ZGV2aWNlX2N0eC0+ZGV2aWNlX29iajsKLQlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKmRldmljZV9jdHggPSB0b19kZXZpY2VfY29udGV4dChkZXZpY2Vfb2JqKTsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZkZXZpY2VfY3R4LT5kZXZpY2UpOwotCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKLQlzdHJ1Y3QgaG9zdF9kZXZpY2VfY29udGV4dCAqaG9zdF9kZXZpY2VfY3R4OwotCXN0cnVjdCBzY3NpX2RldmljZSAqKnNkZXZzX3JlbW92ZV9saXN0OwotCXVuc2lnbmVkIGludCBzZGV2c19jb3VudCA9IDA7Ci0JdW5zaWduZWQgaW50IGZvdW5kOwotCXVuc2lnbmVkIGludCBpOwotCXVuc2lnbmVkIGludCBsdW5fY291bnQgPSAwOwotCXVuc2lnbmVkIGludCAqbHVuX2xpc3Q7Ci0KLQlEUFJJTlRfRU5URVIoU1RPUlZTQ19EUlYpOwotCi0JaG9zdF9kZXZpY2VfY3R4ID0gKHN0cnVjdCBob3N0X2RldmljZV9jb250ZXh0ICopaG9zdC0+aG9zdGRhdGE7Ci0JbHVuX2xpc3QgPSBrY2FsbG9jKFNUT1JWU0NfTUFYX0xVTlNfUEVSX1RBUkdFVCwgc2l6ZW9mKHVuc2lnbmVkIGludCksCi0JCQkgICBHRlBfQVRPTUlDKTsKLQlpZiAoIWx1bl9saXN0KSB7Ci0JCURQUklOVF9FUlIoU1RPUlZTQ19EUlYsICJ1bmFibGUgdG8gYWxsb2NhdGUgbHVuIGxpc3QiKTsKLQkJcmV0dXJuOwotCX0KLQotCXNkZXZzX3JlbW92ZV9saXN0ID0ga2NhbGxvYyhTVE9SVlNDX01BWF9MVU5TX1BFUl9UQVJHRVQsCi0JCQkJICAgIHNpemVvZih2b2lkICopLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXNkZXZzX3JlbW92ZV9saXN0KSB7Ci0JCWtmcmVlKGx1bl9saXN0KTsKLQkJRFBSSU5UX0VSUihTVE9SVlNDX0RSViwgInVuYWJsZSB0byBhbGxvY2F0ZSBsdW4gcmVtb3ZlIGxpc3QiKTsKLQkJcmV0dXJuOwotCX0KLQotCURQUklOVF9JTkZPKFNUT1JWU0NfRFJWLCAicmVzY2FubmluZyBob3N0IGZvciBuZXcgc2NzaSBkZXZpY2VzLi4uIik7Ci0KLQkvKiBSZXNjYW4gZm9yIG5ldyBkZXZpY2UgKi8KLQlzY3NpX3NjYW5fdGFyZ2V0KCZob3N0LT5zaG9zdF9nZW5kZXYsIGhvc3RfZGV2aWNlX2N0eC0+cGF0aCwKLQkJCSBob3N0X2RldmljZV9jdHgtPnRhcmdldCwgU0NBTl9XSUxEX0NBUkQsIDEpOwotCi0JRFBSSU5UX0lORk8oU1RPUlZTQ19EUlYsICJyZXNjYW5uaW5nIGhvc3QgZm9yIHJlbW92ZWQgc2NzaSBkZXZpY2UuLi4iKTsKLQotCS8qIFVzZSB0aGUgMXN0IGRldmljZSB0byBzZW5kIHRoZSByZXBvcnQgbHVucyBjbWQgKi8KLQlzaG9zdF9mb3JfZWFjaF9kZXZpY2Uoc2RldiwgaG9zdCkgewotCQlsdW5fY291bnQgPSBTVE9SVlNDX01BWF9MVU5TX1BFUl9UQVJHRVQ7Ci0JCXN0b3J2c2NfcmVwb3J0X2x1bnMoc2RldiwgbHVuX2xpc3QsICZsdW5fY291bnQpOwotCi0JCURQUklOVF9JTkZPKFNUT1JWU0NfRFJWLAotCQkJICAgICJyZXBvcnQgbHVucyBvbiBzY3NpIGRldmljZSAoJXApIGZvdW5kICV1IGx1bnMgIiwKLQkJCSAgICBzZGV2LCBsdW5fY291bnQpOwotCQlEUFJJTlRfSU5GTyhTVE9SVlNDX0RSViwKLQkJCSAgICAiZXhpc3RpbmcgbHVucyBvbiBzY3NpIGRldmljZSAoJXApIGhvc3QgKCVkKSIsCi0JCQkgICAgc2RldiwgaG9zdC0+aG9zdF9ubyk7Ci0KLQkJc2NzaV9kZXZpY2VfcHV0KHNkZXYpOwotCQlicmVhazsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbHVuX2NvdW50OyBpKyspCi0JCURQUklOVF9JTkZPKFNUT1JWU0NfRFJWLCAiJWQpIGx1biAldSIsIGksIGx1bl9saXN0W2ldKTsKLQotCS8qIFJlc2NhbiBmb3IgZGV2aWNlcyB0aGF0IG1heSBoYXZlIGJlZW4gcmVtb3ZlZC4KLQkgKiBXZSBkbyBub3QgaGF2ZSB0byB3b3JyeSB0aGF0IG5ldyBkZXZpY2VzIG1heSBoYXZlIGJlZW4gYWRkZWQgc2luY2UKLQkgKiB0aGlzIGNhbGxiYWNrIGlzIHNlcmlhbGl6ZWQgYnkgdGhlIHdvcmtxdWV1ZSBpZSBhZGQvcmVtb3ZlIGFyZSBkb25lCi0JICogaGVyZS4KLQkgKi8KLQlzaG9zdF9mb3JfZWFjaF9kZXZpY2Uoc2RldiwgaG9zdCkgewotCQkvKiBTZWUgaWYgdGhpcyBkZXZpY2UgaXMgc3RpbGwgaGVyZSAqLwotCQlmb3VuZCA9IDA7Ci0JCWZvciAoaSA9IDA7IGkgPCBsdW5fY291bnQ7IGkrKykgewotCQkJaWYgKHNkZXYtPmx1biA9PSBsdW5fbGlzdFtpXSkgewotCQkJCWZvdW5kID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlpZiAoIWZvdW5kKSB7Ci0JCQlEUFJJTlRfSU5GTyhTVE9SVlNDX0RSViwgImx1biAoJXUpIGRvZXMgbm90IGV4aXN0cyIsCi0JCQkJICAgIHNkZXYtPmx1bik7Ci0JCQlzZGV2c19yZW1vdmVfbGlzdFtzZGV2c19jb3VudCsrXSA9IHNkZXY7Ci0JCX0KLQl9Ci0KLQkvKiBOb3cgcmVtb3ZlIHRoZSBkZXZpY2VzICovCi0JZm9yIChpID0gMDsgaSA8IHNkZXZzX2NvdW50OyBpKyspIHsKLQkJRFBSSU5UX0lORk8oU1RPUlZTQ19EUlYsCi0JCQkgICAgInJlbW92aW5nIHNjc2kgZGV2aWNlICglcCkgbHVuICgldSkuLi4iLAotCQkJICAgIHNkZXZzX3JlbW92ZV9saXN0W2ldLCBzZGV2c19yZW1vdmVfbGlzdFtpXS0+bHVuKTsKLQotCQkvKiBtYWtlIHN1cmUgaXQgaXMgbm90IHJlbW92ZWQgZnJvbSB1bmRlcm5lYXRoIHVzICovCi0JCWlmICghc2NzaV9kZXZpY2VfZ2V0KHNkZXZzX3JlbW92ZV9saXN0W2ldKSkgewotCQkJc2NzaV9yZW1vdmVfZGV2aWNlKHNkZXZzX3JlbW92ZV9saXN0W2ldKTsKLQkJCXNjc2lfZGV2aWNlX3B1dChzZGV2c19yZW1vdmVfbGlzdFtpXSk7Ci0JCX0KLQl9Ci0KLQlEUFJJTlRfSU5GTyhTVE9SVlNDX0RSViwgInJlc2NhbiBjb21wbGV0ZWQgb24gZGV2IG9iaiAoJXApICIKLQkJICAgICJ0YXJnZXQgKCV1KSBidXMgKCV1KSIsIGRldmljZV9vYmosCi0JCSAgICBob3N0X2RldmljZV9jdHgtPnRhcmdldCwgaG9zdF9kZXZpY2VfY3R4LT5wYXRoKTsKLQotCWtmcmVlKGx1bl9saXN0KTsKLQlrZnJlZShzZGV2c19yZW1vdmVfbGlzdCk7Ci0KLQlEUFJJTlRfRVhJVChTVE9SVlNDX0RSVik7Ci19Ci0KLXN0YXRpYyBpbnQgc3RvcnZzY19yZXBvcnRfbHVucyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHVuc2lnbmVkIGludCBsdW5zW10sCi0JCQkgICAgICAgdW5zaWduZWQgaW50ICpsdW5fY291bnQpCi17Ci0JaW50IGksIGo7Ci0JdW5zaWduZWQgaW50IGx1biA9IDA7Ci0JdW5zaWduZWQgaW50IG51bV9sdW5zOwotCWludCByZXN1bHQ7Ci0JdW5zaWduZWQgY2hhciAqZGF0YTsKLQlzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgc3NoZHI7Ci0JdW5zaWduZWQgY2hhciBjbWRbMTZdID0gezB9OwotCS8qIEFkZCAxIHRvIGNvdmVyIHRoZSByZXBvcnRfbHVuIGhlYWRlciAqLwotCXVuc2lnbmVkIGludCByZXBvcnRfbGVuID0gOCAqIChTVE9SVlNDX01BWF9MVU5TX1BFUl9UQVJHRVQrMSk7Ci0JdW5zaWduZWQgbG9uZyBsb25nICpyZXBvcnRfbHVuczsKLQljb25zdCB1bnNpZ25lZCBpbnQgaW5fbHVuX2NvdW50ID0gKmx1bl9jb3VudDsKLQotCSpsdW5fY291bnQgPSAwOwotCi0JcmVwb3J0X2x1bnMgPSBremFsbG9jKHJlcG9ydF9sZW4sIEdGUF9BVE9NSUMpOwotCWlmICghcmVwb3J0X2x1bnMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JY21kWzBdID0gUkVQT1JUX0xVTlM7Ci0KLQkvKiBjbWQgbGVuZ3RoICovCi0JKih1bnNpZ25lZCBpbnQgKikmY21kWzZdID0gY3B1X3RvX2JlMzIocmVwb3J0X2xlbik7Ci0KLQlyZXN1bHQgPSBzY3NpX2V4ZWN1dGVfcmVxKHNkZXYsIGNtZCwgRE1BX0ZST01fREVWSUNFLAotCQkJCSAgKHVuc2lnbmVkIGNoYXIgKilyZXBvcnRfbHVucywgcmVwb3J0X2xlbiwKLQkJCQkgICZzc2hkciwgMzAgKiBIWiwgMywgTlVMTCk7Ci0JaWYgKHJlc3VsdCAhPSAwKSB7Ci0JCWtmcmVlKHJlcG9ydF9sdW5zKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQkvKiBnZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBmaXJzdCBmb3VyIGJ5dGVzICovCi0JcmVwb3J0X2xlbiA9IGJlMzJfdG9fY3B1KCoodW5zaWduZWQgaW50ICopJnJlcG9ydF9sdW5zWzBdKTsKLQotCW51bV9sdW5zID0gKHJlcG9ydF9sZW4gLyBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSk7Ci0JaWYgKG51bV9sdW5zID4gaW5fbHVuX2NvdW50KSB7Ci0JCWtmcmVlKHJlcG9ydF9sdW5zKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JKmx1bl9jb3VudCA9IG51bV9sdW5zOwotCi0JRFBSSU5UX0RCRyhTVE9SVlNDX0RSViwKLQkJICAgInJlcG9ydCBsdW5zIG9uIHNjc2kgZGV2aWNlICglcCkgZm91bmQgJXUgbHVucyAiLAotCQkgICBzZGV2LCBudW1fbHVucyk7Ci0KLQkvKiBsdW4gaWQgc3RhcnRzIGF0IDEgKi8KLQlmb3IgKGkgPSAxOyBpIDwgbnVtX2x1bnMgKyAxOyBpKyspIHsKLQkJbHVuID0gMDsKLQkJZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopJnJlcG9ydF9sdW5zW2ldOwotCQlmb3IgKGogPSAwOyBqIDwgc2l6ZW9mKGx1bik7IGogKz0gMikgewotCQkJbHVuID0gbHVuIHwgKCgoZGF0YVtqXSA8PCA4KSB8IGRhdGFbaiArIDFdKSA8PAotCQkJCShqICogOCkpOwotCQl9Ci0KLQkJbHVuc1tpLTFdID0gbHVuOwotCX0KLQotCWtmcmVlKHJlcG9ydF9sdW5zKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc3RvcnZzY19ob3N0X3Jlc2NhbihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2Vfb2JqKQotewotCXN0cnVjdCBkZXZpY2VfY29udGV4dCAqZGV2aWNlX2N0eCA9IHRvX2RldmljZV9jb250ZXh0KGRldmljZV9vYmopOwotCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoJmRldmljZV9jdHgtPmRldmljZSk7Ci0Jc3RydWN0IGhvc3RfZGV2aWNlX2NvbnRleHQgKmhvc3RfZGV2aWNlX2N0eDsKLQotCURQUklOVF9FTlRFUihTVE9SVlNDX0RSVik7Ci0KLQlob3N0X2RldmljZV9jdHggPSAoc3RydWN0IGhvc3RfZGV2aWNlX2NvbnRleHQgKilob3N0LT5ob3N0ZGF0YTsKLQotCURQUklOVF9JTkZPKFNUT1JWU0NfRFJWLCAiaW5pdGlhdGluZyByZXNjYW4gb24gZGV2IG9iaiAoJXApICIKLQkJICAgICJ0YXJnZXQgKCV1KSBidXMgKCV1KS4uLiIsIGRldmljZV9vYmosCi0JCSAgICBob3N0X2RldmljZV9jdHgtPnRhcmdldCwgaG9zdF9kZXZpY2VfY3R4LT5wYXRoKTsKLQotCS8qCi0JICogV2UgbmVlZCB0byBxdWV1ZSB0aGlzIHNpbmNlIHRoZSBzY2FubmluZyBtYXkgYmxvY2sgYW5kIHRoZSBjYWxsZXIKLQkgKiBtYXkgYmUgaW4gYW4gaW50ciBjb250ZXh0Ci0JICovCi0JLyogc2NzaV9xdWV1ZV93b3JrKGhvc3QsICZob3N0X2RldmljZV9jdHgtPmhvc3RfcmVzY2FuX3dvcmspOyAqLwotCXNjaGVkdWxlX3dvcmsoJmhvc3RfZGV2aWNlX2N0eC0+aG9zdF9yZXNjYW5fd29yayk7Ci0JRFBSSU5UX0VYSVQoU1RPUlZTQ19EUlYpOwotfQotCiBzdGF0aWMgaW50IHN0b3J2c2NfZ2V0X2NocyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHN0cnVjdCBibG9ja19kZXZpY2UgKiBiZGV2LAogCQkJICAgc2VjdG9yX3QgY2FwYWNpdHksIGludCAqaW5mbykKIHsKQEAgLTEyMDMsNiArOTkxLDcgQEAKIH0KIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oSFZfRFJWX1ZFUlNJT04pOwogbW9kdWxlX3BhcmFtKHN0b3J2c2NfcmluZ2J1ZmZlcl9zaXplLCBpbnQsIFNfSVJVR08pOwogbW9kdWxlX2luaXQoc3RvcnZzY19pbml0KTsKIG1vZHVsZV9leGl0KHN0b3J2c2NfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXMuaCBiL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1cy5oCmluZGV4IGFlMGE4OTYuLjY0MDRiODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1cy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1cy5oCkBAIC00MywyMyArNDMsMjMgQEAKIAl2b2lkICgqc2h1dGRvd24pKHN0cnVjdCBkZXZpY2UgKik7CiB9OwogCi1zdHJ1Y3QgZGV2aWNlX2NvbnRleHQgeworc3RydWN0IHZtX2RldmljZSB7CiAJc3RydWN0IHdvcmtfc3RydWN0IHByb2JlX2ZhaWxlZF93b3JrX2l0ZW07CiAJc3RydWN0IGh2X2d1aWQgY2xhc3NfaWQ7CiAJc3RydWN0IGh2X2d1aWQgZGV2aWNlX2lkOwogCWludCBwcm9iZV9lcnJvcjsKLQlzdHJ1Y3QgZGV2aWNlIGRldmljZTsKIAlzdHJ1Y3QgaHZfZGV2aWNlIGRldmljZV9vYmo7CisJc3RydWN0IGRldmljZSBkZXZpY2U7CiB9OwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2VfY29udGV4dCAqdG9fZGV2aWNlX2NvbnRleHQoc3RydWN0IGh2X2RldmljZSAqZCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHZtX2RldmljZSAqdG9fdm1fZGV2aWNlKHN0cnVjdCBodl9kZXZpY2UgKmQpCiB7Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgZGV2aWNlX2NvbnRleHQsIGRldmljZV9vYmopOworCXJldHVybiBjb250YWluZXJfb2YoZCwgc3RydWN0IHZtX2RldmljZSwgZGV2aWNlX29iaik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZV9jb250ZXh0ICpkZXZpY2VfdG9fZGV2aWNlX2NvbnRleHQoc3RydWN0IGRldmljZSAqZCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHZtX2RldmljZSAqZGV2aWNlX3RvX3ZtX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkKQogewotCXJldHVybiBjb250YWluZXJfb2YoZCwgc3RydWN0IGRldmljZV9jb250ZXh0LCBkZXZpY2UpOworCXJldHVybiBjb250YWluZXJfb2YoZCwgc3RydWN0IHZtX2RldmljZSwgZGV2aWNlKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZHJpdmVyX2NvbnRleHQgKmRyaXZlcl90b19kcml2ZXJfY29udGV4dChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19kcnYuYwppbmRleCA4OTRlZWNmLi4yYzkwNjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXNfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX2Rydi5jCkBAIC0yNCw2ICsyNCw5IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CisjaW5jbHVkZSAiVmVyc2lvbkluZm8uaCIKICNpbmNsdWRlICJvc2QuaCIKICNpbmNsdWRlICJsb2dnaW5nLmgiCiAjaW5jbHVkZSAidm1idXMuaCIKQEAgLTQ3LDcgKzUwLDcgQEAKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgZXZlbnRfZHBjOwogCiAJLyogVGhlIGJ1cyByb290IGRldmljZSAqLwotCXN0cnVjdCBkZXZpY2VfY29udGV4dCBkZXZpY2VfY3R4OworCXN0cnVjdCB2bV9kZXZpY2UgZGV2aWNlX2N0eDsKIH07CiAKIHN0YXRpYyBpbnQgdm1idXNfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyKTsKQEAgLTEzNSw3ICsxMzgsNyBAQAogCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZfYXR0ciwKIAkJCQkgICAgICBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGRldmljZV9jb250ZXh0ICpkZXZpY2VfY3R4ID0gZGV2aWNlX3RvX2RldmljZV9jb250ZXh0KGRldik7CisJc3RydWN0IHZtX2RldmljZSAqZGV2aWNlX2N0eCA9IGRldmljZV90b192bV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgaHZfZGV2aWNlX2luZm8gZGV2aWNlX2luZm87CiAKIAltZW1zZXQoJmRldmljZV9pbmZvLCAwLCBzaXplb2Yoc3RydWN0IGh2X2RldmljZV9pbmZvKSk7CkBAIC0yNDUsNyArMjQ4LDcgQEAKIHsKIAlzdHJ1Y3Qgdm1idXNfZHJpdmVyX2NvbnRleHQgKnZtYnVzX2Rydl9jdHggPSAmZ192bWJ1c19kcnY7CiAJc3RydWN0IHZtYnVzX2RyaXZlciAqdm1idXNfZHJ2X29iaiA9ICZnX3ZtYnVzX2Rydi5kcnZfb2JqOwotCXN0cnVjdCBkZXZpY2VfY29udGV4dCAqZGV2X2N0eCA9ICZnX3ZtYnVzX2Rydi5kZXZpY2VfY3R4OworCXN0cnVjdCB2bV9kZXZpY2UgKmRldl9jdHggPSAmZ192bWJ1c19kcnYuZGV2aWNlX2N0eDsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGludCB2ZWN0b3I7CiAKQEAgLTMwNyw3ICszMTAsNyBAQAogCURQUklOVF9JTkZPKFZNQlVTX0RSViwgImlycSAweCV4IHZlY3RvciAweCV4Iiwgdm1idXNfaXJxLCB2ZWN0b3IpOwogCiAJLyogQ2FsbCB0byBidXMgZHJpdmVyIHRvIGFkZCB0aGUgcm9vdCBkZXZpY2UgKi8KLQltZW1zZXQoZGV2X2N0eCwgMCwgc2l6ZW9mKHN0cnVjdCBkZXZpY2VfY29udGV4dCkpOworCW1lbXNldChkZXZfY3R4LCAwLCBzaXplb2Yoc3RydWN0IHZtX2RldmljZSkpOwogCiAJcmV0ID0gdm1idXNfZHJ2X29iai0+QmFzZS5PbkRldmljZUFkZCgmZGV2X2N0eC0+ZGV2aWNlX29iaiwgJnZlY3Rvcik7CiAJaWYgKHJldCAhPSAwKSB7CkBAIC0zNjgsNyArMzcxLDcgQEAKIAlzdHJ1Y3Qgdm1idXNfZHJpdmVyICp2bWJ1c19kcnZfb2JqID0gJmdfdm1idXNfZHJ2LmRydl9vYmo7CiAJc3RydWN0IHZtYnVzX2RyaXZlcl9jb250ZXh0ICp2bWJ1c19kcnZfY3R4ID0gJmdfdm1idXNfZHJ2OwogCi0Jc3RydWN0IGRldmljZV9jb250ZXh0ICpkZXZfY3R4ID0gJmdfdm1idXNfZHJ2LmRldmljZV9jdHg7CisJc3RydWN0IHZtX2RldmljZSAqZGV2X2N0eCA9ICZnX3ZtYnVzX2Rydi5kZXZpY2VfY3R4OwogCiAJRFBSSU5UX0VOVEVSKFZNQlVTX0RSVik7CiAKQEAgLTQ3MSwxMyArNDc0LDEzIEBACiAJCQkJCQkgICBzdHJ1Y3QgaHZfZ3VpZCAqaW5zdGFuY2UsCiAJCQkJCQkgICB2b2lkICpjb250ZXh0KQogewotCXN0cnVjdCBkZXZpY2VfY29udGV4dCAqY2hpbGRfZGV2aWNlX2N0eDsKKwlzdHJ1Y3Qgdm1fZGV2aWNlICpjaGlsZF9kZXZpY2VfY3R4OwogCXN0cnVjdCBodl9kZXZpY2UgKmNoaWxkX2RldmljZV9vYmo7CiAKIAlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKIAogCS8qIEFsbG9jYXRlIHRoZSBuZXcgY2hpbGQgZGV2aWNlICovCi0JY2hpbGRfZGV2aWNlX2N0eCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZpY2VfY29udGV4dCksIEdGUF9LRVJORUwpOworCWNoaWxkX2RldmljZV9jdHggPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgdm1fZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjaGlsZF9kZXZpY2VfY3R4KSB7CiAJCURQUklOVF9FUlIoVk1CVVNfRFJWLAogCQkJInVuYWJsZSB0byBhbGxvY2F0ZSBkZXZpY2VfY29udGV4dCBmb3IgY2hpbGQgZGV2aWNlIik7CkBAIC01MjYsMTAgKzUyOSwxMCBAQAogCQkJCSAgICAgICBzdHJ1Y3QgaHZfZGV2aWNlICpjaGlsZF9kZXZpY2Vfb2JqKQogewogCWludCByZXQgPSAwOwotCXN0cnVjdCBkZXZpY2VfY29udGV4dCAqcm9vdF9kZXZpY2VfY3R4ID0KLQkJCQl0b19kZXZpY2VfY29udGV4dChyb290X2RldmljZV9vYmopOwotCXN0cnVjdCBkZXZpY2VfY29udGV4dCAqY2hpbGRfZGV2aWNlX2N0eCA9Ci0JCQkJdG9fZGV2aWNlX2NvbnRleHQoY2hpbGRfZGV2aWNlX29iaik7CisJc3RydWN0IHZtX2RldmljZSAqcm9vdF9kZXZpY2VfY3R4ID0KKwkJCQl0b192bV9kZXZpY2Uocm9vdF9kZXZpY2Vfb2JqKTsKKwlzdHJ1Y3Qgdm1fZGV2aWNlICpjaGlsZF9kZXZpY2VfY3R4ID0KKwkJCQl0b192bV9kZXZpY2UoY2hpbGRfZGV2aWNlX29iaik7CiAJc3RhdGljIGF0b21pY190IGRldmljZV9udW0gPSBBVE9NSUNfSU5JVCgwKTsKIAogCURQUklOVF9FTlRFUihWTUJVU19EUlYpOwpAQCAtNTcyLDcgKzU3NSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHZtYnVzX2NoaWxkX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9vYmopCiB7Ci0Jc3RydWN0IGRldmljZV9jb250ZXh0ICpkZXZpY2VfY3R4ID0gdG9fZGV2aWNlX2NvbnRleHQoZGV2aWNlX29iaik7CisJc3RydWN0IHZtX2RldmljZSAqZGV2aWNlX2N0eCA9IHRvX3ZtX2RldmljZShkZXZpY2Vfb2JqKTsKIAogCURQUklOVF9FTlRFUihWTUJVU19EUlYpOwogCkBAIC02MTAsNyArNjEzLDcgQEAKICAqLwogc3RhdGljIGludCB2bWJ1c191ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2aWNlLCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCiB7Ci0Jc3RydWN0IGRldmljZV9jb250ZXh0ICpkZXZpY2VfY3R4ID0gZGV2aWNlX3RvX2RldmljZV9jb250ZXh0KGRldmljZSk7CisJc3RydWN0IHZtX2RldmljZSAqZGV2aWNlX2N0eCA9IGRldmljZV90b192bV9kZXZpY2UoZGV2aWNlKTsKIAlpbnQgcmV0OwogCiAJRFBSSU5UX0VOVEVSKFZNQlVTX0RSVik7CkBAIC02ODcsNyArNjkwLDcgQEAKIHsKIAlpbnQgbWF0Y2ggPSAwOwogCXN0cnVjdCBkcml2ZXJfY29udGV4dCAqZHJpdmVyX2N0eCA9IGRyaXZlcl90b19kcml2ZXJfY29udGV4dChkcml2ZXIpOwotCXN0cnVjdCBkZXZpY2VfY29udGV4dCAqZGV2aWNlX2N0eCA9IGRldmljZV90b19kZXZpY2VfY29udGV4dChkZXZpY2UpOworCXN0cnVjdCB2bV9kZXZpY2UgKmRldmljZV9jdHggPSBkZXZpY2VfdG9fdm1fZGV2aWNlKGRldmljZSk7CiAKIAlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKIApAQCAtNzI0LDcgKzcyNyw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHZtYnVzX3Byb2JlX2ZhaWxlZF9jYihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmNvbnRleHQpCiB7Ci0Jc3RydWN0IGRldmljZV9jb250ZXh0ICpkZXZpY2VfY3R4ID0gKHN0cnVjdCBkZXZpY2VfY29udGV4dCAqKWNvbnRleHQ7CisJc3RydWN0IHZtX2RldmljZSAqZGV2aWNlX2N0eCA9IChzdHJ1Y3Qgdm1fZGV2aWNlICopY29udGV4dDsKIAogCURQUklOVF9FTlRFUihWTUJVU19EUlYpOwogCkBAIC03NDYsOCArNzQ5LDggQEAKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgZHJpdmVyX2NvbnRleHQgKmRyaXZlcl9jdHggPQogCQkJZHJpdmVyX3RvX2RyaXZlcl9jb250ZXh0KGNoaWxkX2RldmljZS0+ZHJpdmVyKTsKLQlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKmRldmljZV9jdHggPQotCQkJZGV2aWNlX3RvX2RldmljZV9jb250ZXh0KGNoaWxkX2RldmljZSk7CisJc3RydWN0IHZtX2RldmljZSAqZGV2aWNlX2N0eCA9CisJCQlkZXZpY2VfdG9fdm1fZGV2aWNlKGNoaWxkX2RldmljZSk7CiAKIAlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKIApAQCAtODcxLDcgKzg3NCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHZtYnVzX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKLQlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKmRldmljZV9jdHggPSBkZXZpY2VfdG9fZGV2aWNlX2NvbnRleHQoZGV2aWNlKTsKKwlzdHJ1Y3Qgdm1fZGV2aWNlICpkZXZpY2VfY3R4ID0gZGV2aWNlX3RvX3ZtX2RldmljZShkZXZpY2UpOwogCiAJRFBSSU5UX0VOVEVSKFZNQlVTX0RSVik7CiAKQEAgLTk0Niw2ICs5NDksMTkgQEAKIAl9CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2luaXRkYXRhIG1pY3Jvc29mdF9odl9kbWlfdGFibGVbXSA9IHsKKwl7CisJCS5pZGVudCA9ICJIeXBlci1WIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJNaWNyb3NvZnQgQ29ycG9yYXRpb24iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiVmlydHVhbCBNYWNoaW5lIiksCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJWaXJ0dWFsIE1hY2hpbmUiKSwKKwkJfSwKKwl9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGRtaSwgbWljcm9zb2Z0X2h2X2RtaV90YWJsZSk7CisKIHN0YXRpYyBpbnQgX19pbml0IHZtYnVzX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKQEAgLTk1Nyw2ICs5NzMsOSBAQAogCQl2bWJ1c19sb2dsZXZlbCwgSElXT1JEKHZtYnVzX2xvZ2xldmVsKSwgTE9XT1JEKHZtYnVzX2xvZ2xldmVsKSk7CiAJLyogVG9kbzogaXQgaXMgdXNlZCBmb3IgbG9nbGV2ZWwsIHRvIGJlIHBvcnRlZCB0byBuZXcga2VybmVsLiAqLwogCisJaWYgKCFkbWlfY2hlY2tfc3lzdGVtKG1pY3Jvc29mdF9odl9kbWlfdGFibGUpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCXJldCA9IHZtYnVzX2J1c19pbml0KFZtYnVzSW5pdGlhbGl6ZSk7CiAKIAlEUFJJTlRfRVhJVChWTUJVU19EUlYpOwpAQCAtOTczLDcgKzk5MiwyMCBAQAogCXJldHVybjsKIH0KIAorLyoKKyAqIFdlIHVzZSBhIFBDSSB0YWJsZSB0byBkZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIGF1dG9sb2FkIHRoaXMgZHJpdmVyICBUaGlzIGlzCisgKiBuZWVkZWQgYnkgZGlzdHJvIHRvb2xzIHRvIGRldGVybWluZSBpZiB0aGUgaHlwZXJ2IGRyaXZlcnMgc2hvdWxkIGJlCisgKiBpbnN0YWxsZWQgYW5kL29yIGNvbmZpZ3VyZWQuICBXZSBkb24ndCBkbyBhbnl0aGluZyBlbHNlIHdpdGggdGhlIHRhYmxlLCBidXQKKyAqIGl0IG5lZWRzIHRvIGJlIHByZXNlbnQuCisgKi8KK2NvbnN0IHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtaWNyb3NvZnRfaHZfcGNpX3RhYmxlW10gPSB7CisJeyBQQ0lfREVWSUNFKDB4MTQxNCwgMHg1MzUzKSB9LAkvKiBWR0EgY29tcGF0aWJsZSBjb250cm9sbGVyICovCisJeyAwIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbWljcm9zb2Z0X2h2X3BjaV90YWJsZSk7CisKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKEhWX0RSVl9WRVJTSU9OKTsKIG1vZHVsZV9wYXJhbSh2bWJ1c19pcnEsIGludCwgU19JUlVHTyk7CiBtb2R1bGVfcGFyYW0odm1idXNfbG9nbGV2ZWwsIGludCwgU19JUlVHTyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYwppbmRleCA3NjhmNDQ4Li5iNDU2ZGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jCkBAIC03OSwxMSArNzksMTQgQEAKIAkvKiBEb2VzIGFueW9uZSBjYXJlPyAqLwogCW11dGV4X2xvY2soJmV2X2ludC0+ZXZlbnRfbGlzdF9sb2NrKTsKIAlpZiAodGVzdF9iaXQoSUlPX0JVU1lfQklUX1BPUywgJmV2X2ludC0+aGFuZGxlci5mbGFncykpIHsKLQkJaWYgKGV2X2ludC0+Y3VycmVudF9ldmVudHMgPT0gZXZfaW50LT5tYXhfZXZlbnRzKQorCQlpZiAoZXZfaW50LT5jdXJyZW50X2V2ZW50cyA9PSBldl9pbnQtPm1heF9ldmVudHMpIHsKKwkJCW11dGV4X3VubG9jaygmZXZfaW50LT5ldmVudF9saXN0X2xvY2spOwogCQkJcmV0dXJuIDA7CisJCX0KIAkJZXYgPSBrbWFsbG9jKHNpemVvZigqZXYpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKGV2ID09IE5VTEwpIHsKIAkJCXJldCA9IC1FTk9NRU07CisJCQltdXRleF91bmxvY2soJmV2X2ludC0+ZXZlbnRfbGlzdF9sb2NrKTsKIAkJCWdvdG8gZXJyb3JfcmV0OwogCQl9CiAJCWV2LT5ldi5pZCA9IGV2X2NvZGU7CkBAIC0xMTUsNyArMTE4LDcgQEAKIEVYUE9SVF9TWU1CT0woaWlvX3B1c2hfZXZlbnQpOwogCiAvKiBHZW5lcmljIGludGVycnVwdCBsaW5lIGludGVycnVwdCBoYW5kbGVyICovCi1pcnFyZXR1cm5fdCBpaW9faW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqX2ludF9pbmZvKQorc3RhdGljIGlycXJldHVybl90IGlpb19pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpfaW50X2luZm8pCiB7CiAJc3RydWN0IGlpb19pbnRlcnJ1cHQgKmludF9pbmZvID0gX2ludF9pbmZvOwogCXN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbyA9IGludF9pbmZvLT5kZXZfaW5mbzsKQEAgLTI0OSwxMCArMjUyLDEwIEBACiB9CiBFWFBPUlRfU1lNQk9MKGlpb19yZW1vdmVfZXZlbnRfZnJvbV9saXN0KTsKIAotc3NpemVfdCBpaW9fZXZlbnRfY2hyZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGVwLAotCQkJICAgICAgY2hhciAqYnVmLAotCQkJICAgICAgc2l6ZV90IGNvdW50LAotCQkJICAgICAgbG9mZl90ICpmX3BzKQorc3RhdGljIHNzaXplX3QgaWlvX2V2ZW50X2NocmRldl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlcCwKKwkJCQkgICAgIGNoYXIgX191c2VyICpidWYsCisJCQkJICAgICBzaXplX3QgY291bnQsCisJCQkJICAgICBsb2ZmX3QgKmZfcHMpCiB7CiAJc3RydWN0IGlpb19ldmVudF9pbnRlcmZhY2UgKmV2X2ludCA9IGZpbGVwLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGlpb19kZXRlY3RlZF9ldmVudF9saXN0ICplbDsKQEAgLTI4OSwxNiArMjkyLDE2IEBACiAJbXV0ZXhfdW5sb2NrKCZldl9pbnQtPmV2ZW50X2xpc3RfbG9jayk7CiAJLyoKIAkgKiBQb3NzaWJsZSBjb25jdXJlbmN5IGlzc3VlIGlmIGFuIHVwZGF0ZSBvZiB0aGlzIGV2ZW50IGlzIG9uIGl0cyB3YXkKLQkgKiB0aHJvdWdoLiBNYXkgbGVhZCB0byBuZXcgZXZlbiBiZWluZyByZW1vdmVkIHdoaWxzdCB0aGUgcmVwb3J0ZWQgZXZlbnQKLQkgKiB3YXMgdGhlIHVuZXNjYWxhdGVkIGV2ZW50LiBJbiB0eXBpY2FsIHVzZSBjYXNlIHRoaXMgaXMgbm90IGEgcHJvYmxlbQotCSAqIGFzIHVzZXJzcGFjZSB3aWxsIHNheSByZWFkIGhhbGYgdGhlIGJ1ZmZlciBkdWUgdG8gYSA1MCUgZnVsbCBldmVudAotCSAqIHdoaWNoIHdvdWxkIG1ha2UgdGhlIGNvcnJlY3QgMTAwJSBmdWxsIGluY29ycmVjdCBhbnl3YXkuCisJICogdGhyb3VnaC4gTWF5IGxlYWQgdG8gbmV3IGV2ZW50IGJlaW5nIHJlbW92ZWQgd2hpbHN0IHRoZSByZXBvcnRlZAorCSAqIGV2ZW50IHdhcyB0aGUgdW5lc2NhbGF0ZWQgZXZlbnQuIEluIHR5cGljYWwgdXNlIGNhc2UgdGhpcyBpcyBub3QgYQorCSAqIHByb2JsZW0gYXMgdXNlcnNwYWNlIHdpbGwgc2F5IHJlYWQgaGFsZiB0aGUgYnVmZmVyIGR1ZSB0byBhIDUwJQorCSAqIGZ1bGwgZXZlbnQgd2hpY2ggd291bGQgbWFrZSB0aGUgY29ycmVjdCAxMDAlIGZ1bGwgaW5jb3JyZWN0IGFueXdheS4KIAkgKi8KLQlzcGluX2xvY2soJmVsLT5zaGFyZWRfcG9pbnRlci0+bG9jayk7Ci0JaWYgKGVsLT5zaGFyZWRfcG9pbnRlcikKKwlpZiAoZWwtPnNoYXJlZF9wb2ludGVyKSB7CisJCXNwaW5fbG9jaygmZWwtPnNoYXJlZF9wb2ludGVyLT5sb2NrKTsKIAkJKGVsLT5zaGFyZWRfcG9pbnRlci0+ZXZfcCkgPSBOVUxMOwotCXNwaW5fdW5sb2NrKCZlbC0+c2hhcmVkX3BvaW50ZXItPmxvY2spOwotCisJCXNwaW5fdW5sb2NrKCZlbC0+c2hhcmVkX3BvaW50ZXItPmxvY2spOworCX0KIAlrZnJlZShlbCk7CiAKIAlyZXR1cm4gbGVuOwpAQCAtMzEwLDcgKzMxMyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGlpb19ldmVudF9jaHJkZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApCitzdGF0aWMgaW50IGlpb19ldmVudF9jaHJkZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApCiB7CiAJc3RydWN0IGlpb19oYW5kbGVyICpoYW5kID0gaWlvX2NkZXZfdG9faGFuZGxlcihpbm9kZS0+aV9jZGV2KTsKIAlzdHJ1Y3QgaWlvX2V2ZW50X2ludGVyZmFjZSAqZXZfaW50ID0gaGFuZC0+cHJpdmF0ZTsKQEAgLTMzMiw3ICszMzUsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgaWlvX2V2ZW50X2NocmRldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcCkKK3N0YXRpYyBpbnQgaWlvX2V2ZW50X2NocmRldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcCkKIHsKIAlzdHJ1Y3QgaWlvX2hhbmRsZXIgKmhhbmQgPSBpaW9fY2Rldl90b19oYW5kbGVyKGlub2RlLT5pX2NkZXYpOwogCXN0cnVjdCBpaW9fZXZlbnRfaW50ZXJmYWNlICpldl9pbnQgPSBoYW5kLT5wcml2YXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX2dlbmVyaWMuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vcmluZ19nZW5lcmljLmgKaW5kZXggOTNiOTFiMi4uMDkwNDRhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX2dlbmVyaWMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3JpbmdfZ2VuZXJpYy5oCkBAIC0xNDYsOCArMTQ2LDcgQEAKIAlyaW5nLT5sZW5ndGggPSBsZW5ndGg7CiAJcmluZy0+bG9vcGNvdW50ID0gMDsKIAlyaW5nLT5zaGFyZWRfZXZfcG9pbnRlci5ldl9wID0gMDsKLQlyaW5nLT5zaGFyZWRfZXZfcG9pbnRlci5sb2NrID0KLQkJX19TUElOX0xPQ0tfVU5MT0NLRUQocmluZy0+c2hhcmVkX2V2X3BvaW50ZXItPmxvYyk7CisJc3Bpbl9sb2NrX2luaXQoJnJpbmctPnNoYXJlZF9ldl9wb2ludGVyLmxvY2spOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vcmluZ19zdy5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX3N3LmMKaW5kZXggMzU5ZmY5Mi4uNmY3ZjRkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX3N3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX3N3LmMKQEAgLTgsNyArOCw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgpAQCAtMjEsNyArMjAsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCV9faWlvX2luaXRfcmluZ19idWZmZXIoJnJpbmctPmJ1ZiwgYnl0ZXNfcGVyX2RhdHVtLCBsZW5ndGgpOwotCXJpbmctPnVzZV9sb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoKHJpbmcpLT51c2VfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnJpbmctPnVzZV9sb2NrKTsKIAlyaW5nLT5kYXRhID0ga21hbGxvYyhsZW5ndGgqcmluZy0+YnVmLmJwZCwgR0ZQX0tFUk5FTCk7CiAJcmluZy0+cmVhZF9wID0gMDsKIAlyaW5nLT53cml0ZV9wID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vdHJpZ2dlcl9jb25zdW1lci5oIGIvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyX2NvbnN1bWVyLmgKaW5kZXggYTAyZDcwYi4uOWQ1MmQ5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyX2NvbnN1bWVyLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby90cmlnZ2VyX2NvbnN1bWVyLmgKQEAgLTI3LDcgKzI3LDcgQEAKICAqIGlpb19kZXZpY2VfcmVnaXN0ZXJfdHJpZ2dlcl9jb25zdW1lcigpIC0gc2V0IHVwIGFuIGlpb19kZXYgdG8gdXNlIHRyaWdnZXJzCiAgKiBAZGV2X2luZm86IGlpb19kZXYgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZpY2UgdGhhdCB3aWxsIGNvbnN1bWUgdGhlIHRyaWdnZXIKICAqKi8KLWludCBpaW9fZGV2aWNlX3JlZ2lzdGVyX3RyaWdnZXJfY29uc3VtZXIoc3RydWN0IGlpb19kZXYgKmRldl9pbmZvKQorc3RhdGljIGludCBpaW9fZGV2aWNlX3JlZ2lzdGVyX3RyaWdnZXJfY29uc3VtZXIoc3RydWN0IGlpb19kZXYgKmRldl9pbmZvKQogewogCXJldHVybiAwOwogfTsKQEAgLTM2LDcgKzM2LDcgQEAKICAqIGlpb19kZXZpY2VfdW5yZWdpc3Rlcl90cmlnZ2VyX2NvbnN1bWVyKCkgLSByZXZlcnNlIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcwogICogQGRldl9pbmZvOiBpaW9fZGV2IGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlIHRoYXQgY29uc3VtZWQgdGhlIHRyaWdnZXIKICAqKi8KLWludCBpaW9fZGV2aWNlX3VucmVnaXN0ZXJfdHJpZ2dlcl9jb25zdW1lcihzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8pCitzdGF0aWMgaW50IGlpb19kZXZpY2VfdW5yZWdpc3Rlcl90cmlnZ2VyX2NvbnN1bWVyKHN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbykKIHsKIAlyZXR1cm4gMDsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHJpdmVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHJpdmVyLmMKaW5kZXggZTQwNzhhOS4uMDM5MmE0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2RyaXZlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9kcml2ZXIuYwpAQCAtMzMsNyArMzMsNyBAQAogCiAKIC8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBsaW5lNl9pZF90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGxpbmU2X2lkX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKExJTkU2X1ZFTkRPUl9JRCwgTElORTZfREVWSURfQkFTU1BPRFhUKSB9LAogCXsgVVNCX0RFVklDRShMSU5FNl9WRU5ET1JfSUQsIExJTkU2X0RFVklEX0JBU1NQT0RYVExJVkUpIH0sCiAJeyBVU0JfREVWSUNFKExJTkU2X1ZFTkRPUl9JRCwgTElORTZfREVWSURfQkFTU1BPRFhUUFJPKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3ZhcmlheC5jIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3ZhcmlheC5jCmluZGV4IDQ4ZDgzNGIuLjU4ZmVmODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi92YXJpYXguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvdmFyaWF4LmMKQEAgLTI1NCw3ICsyNTQsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQl2YXJpYXgtPmJ1ZmZlcl9hY3RpdmF0ZVtWQVJJQVhfT0ZGU0VUX0FDVElWQVRFXSA9IHZhbHVlID8gMTogMDsKKwl2YXJpYXgtPmJ1ZmZlcl9hY3RpdmF0ZVtWQVJJQVhfT0ZGU0VUX0FDVElWQVRFXSA9IHZhbHVlID8gMSA6IDA7CiAJbGluZTZfc2VuZF9yYXdfbWVzc2FnZV9hc3luYygmdmFyaWF4LT5saW5lNiwgdmFyaWF4LT5idWZmZXJfYWN0aXZhdGUsCiAJCQkJICAgICBzaXplb2YodmFyaWF4X2FjdGl2YXRlKSk7CiAJcmV0dXJuIGNvdW50OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21pbWlvL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvbWltaW8vS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA1ZGNiMi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWltaW8vS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLWNvbmZpZyBJTlBVVF9NSU1JTwotCXRyaXN0YXRlICJNaW1pbyBYaSBpbnRlcmFjdGl2ZSB3aGl0ZWJvYXJkIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgSU5QVVQKLQlkZWZhdWx0IE4KLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIE1pbWlvIFhpIGludGVyYWN0aXZlCi0JICB3aGl0ZWJvYXJkIGRldmljZS4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWltaW8uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWltaW8vTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvbWltaW8vTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3ODA3ZWUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21pbWlvL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotb2JqLSQoQ09ORklHX0lOUFVUX01JTUlPKQkrPSBtaW1pby5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWltaW8vbWltaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9taW1pby9taW1pby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmE4MTAzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9taW1pby9taW1pby5jCisrKyAvZGV2L251bGwKQEAgLTEsOTE0ICswLDAgQEAKLS8qCi0gKiBIYXJkd2FyZSBldmVudCA9PiBpbnB1dCBldmVudCBtYXBwaW5nOgotICoKLSAqCi0gKgotIGlucHV0Lmg6I2RlZmluZSBCVE5fVE9PTF9QRU4gICAgICAgICAgICAweDE0MCBibGFjawotIGlucHV0Lmg6I2RlZmluZSBCVE5fVE9PTF9SVUJCRVIgICAgICAgICAweDE0MSBibHVlCi0gaW5wdXQuaDojZGVmaW5lIEJUTl9UT09MX0JSVVNIICAgICAgICAgIDB4MTQyIGdyZWVuCi0gaW5wdXQuaDojZGVmaW5lIEJUTl9UT09MX1BFTkNJTCAgICAgICAgIDB4MTQzIHJlZAotIGlucHV0Lmg6I2RlZmluZSBCVE5fVE9PTF9BSVJCUlVTSCAgICAgICAweDE0NCBlcmFzZXIKLSBpbnB1dC5oOiNkZWZpbmUgQlROX1RPT0xfRklOR0VSICAgICAgICAgMHgxNDUgc21hbGwgZXJhc2VyCi0gaW5wdXQuaDojZGVmaW5lIEJUTl9UT09MX01PVVNFICAgICAgICAgIDB4MTQ2IG1pbWlvIGludGVyYWN0aXZlCi0gaW5wdXQuaDojZGVmaW5lIEJUTl9UT09MX0xFTlMgICAgICAgICAgIDB4MTQ3IG1pbWlvIGludGVyYWN0aXZlIGJ1dDEKLSBpbnB1dC5oOiNkZWZpbmUgTE9DQUxCVE5fVE9PTF9FWFRSQTEgICAgMHgxNGEgbWltaW8gaW50ZXJhY3RpdmUgYnV0MiA9PSBCVE5fVE9VQ0gKLSBpbnB1dC5oOiNkZWZpbmUgTE9DQUxCVE5fVE9PTF9FWFRSQTIgICAgMHgxNGIgbWltaW8gZXh0cmEgcGVucyAob3JhbmdlLCBicm93biwgeWVsbG93LCBwdXJwbGUpID09IEJUTl9TVFlMVVMKLSBpbnB1dC5oOiNkZWZpbmUgTE9DQUxCVE5fVE9PTF9FWFRSQTMgICAgMHgxNGMgdW51c2VkID09IEJUTl9TVFlMVVMyCi0gaW5wdXQuaDojZGVmaW5lIEJUTl9UT09MX0RPVUJMRVRBUCAgICAgIDB4MTRkIHVudXNlZAotIGlucHV0Lmg6I2RlZmluZSBCVE5fVE9PTF9UUklQTEVUQVAgICAgICAweDE0ZSB1bnVzZWQKLSAqCi0gKiBNSU1JT19FVl9QRU5ET1dOKE1JTUlPX1BFTl9LKSAgICAgPT4gRVZfS0VZIEJJVChCVE5fVE9PTF9QRU4pCi0gKiBNSU1JT19FVl9QRU5ET1dOKE1JTUlPX1BFTl9CKSAgICAgPT4gRVZfS0VZIEJJVChCVE5fVE9PTF9SVUJCRVIpCi0gKiBNSU1JT19FVl9QRU5ET1dOKE1JTUlPX1BFTl9HKSAgICAgPT4gRVZfS0VZIEJJVChCVE5fVE9PTF9CUlVTSCkKLSAqIE1JTUlPX0VWX1BFTkRPV04oTUlNSU9fUEVOX1IpICAgICA9PiBFVl9LRVkgQklUKEJUTl9UT09MX1BFTkNJTCkKLSAqIE1JTUlPX0VWX1BFTkRPV04oTUlNSU9fUEVOX0UpICAgICA9PiBFVl9LRVkgQklUKEJUTl9UT09MX0FJUkJSVVNIKQotICogTUlNSU9fRVZfUEVORE9XTihNSU1JT19QRU5fRVMpICAgID0+IEVWX0tFWSBCSVQoQlROX1RPT0xfRklOR0VSKQotICogTUlNSU9fRVZfUEVORE9XTihNSU1JT19QRU5fSSkgICAgID0+IEVWX0tFWSBCSVQoQlROX1RPT0xfTU9VU0UpCi0gKiBNSU1JT19FVl9QRU5ET1dOKE1JTUlPX1BFTl9JTCkgICAgPT4gRVZfS0VZIEJJVChCVE5fVE9PTF9MRU5TKQotICogTUlNSU9fRVZfUEVORE9XTihNSU1JT19QRU5fSVIpICAgID0+IEVWX0tFWSBCSVQoQlROX1RPT0xfRE9VQkxFVEFQKQotICogTUlNSU9fRVZfUEVORE9XTihNSU1JT19QRU5fRVgpICAgID0+IEVWX0tFWSBCSVQoQlROX1RPT0xfVFJJUExFVEFQKQotICogTUlNSU9fRVZfUEVOREFUQSAgICAgICAgICAgICAgICAgPT4gRVZfQUJTIEJJVChBQlNfWCksIEJJVChBQlNfWSkKLSAqIE1JTUlPX0VWX01FTVJFU0VUICAgICAgICAgICAgICA9PiBFVl9LRVkgQklUKEJUTl8wKQotICogTUlNSU9fRVZfQUNDKEFDQ19ORVdQQUdFKSAgICAgICA9PiBFVl9LRVkgQklUKEJUTl8xKQotICogTUlNSU9fRVZfQUNDKEFDQ19UQUdQQUdFKSAgICAgID0+IEVWX0tFWSBCSVQoQlROXzIpCi0gKiBNSU1JT19FVl9BQ0MoQUNDX1BSSU5UUEFHRSkgICAgICA9PiBFVl9LRVkgQklUKEJUTl8zKQotICogTUlNSU9fRVZfQUNDKEFDQ19NQVhJTUlaRSkgICAgICA9PiBFVl9LRVkgQklUKEJUTl80KQotICogTUlNSU9fRVZfQUNDKEFDQ19GSU5EQ1RMUE5MKSAgICAgID0+IEVWX0tFWSBCSVQoQlROXzUpCi0gKgotICoKLSAqIG9wZW4gaXNzdWVzOgotICogICAgICAtIGNvbGQtbG9hZCBvZiBkYXRhIGNhcHR1cmVkIHdoZW4gbWltaW8gaW4gc3RhbmRhbG9uZSBtb2RlIG5vdCB5ZXQKLSAqICAgICAgICAgc3VwcG9ydGVkOyBuZWVkIHRvIHNub29wIFdpbjMyIGJveCB0byBzZWUgZGF0YXN0cmVhbSBmb3IgdGhpcy4KLSAqICAgICAgIC0gbWltaW8gbW91c2Ugbm90IHlldCBzdXBwb3J0ZWQ7IG5lZWQgdG8gc25vb3AgV2luMzIgYm94IHRvIHNlZSB0aGUKLSAqICAgICAgICAgZGF0YXN0cmVhbSBmb3IgdGhpcy4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkidjAuMDMxIgotI2RlZmluZSBEUklWRVJfQVVUSE9SCQkibXdpbGRlckBjcy5ubXN1LmVkdSIKLSNkZWZpbmUgRFJJVkVSX0RFU0MJCSJVU0IgbWltaW8teGkgZHJpdmVyIgotCi1lbnVtIHtVUFZBTFVFLCBET1dOVkFMVUUsIE1PVkVWQUxVRX07Ci0KLSNkZWZpbmUgTUlNSU9fWFJBTkdFX01BWAk5NjAwCi0jZGVmaW5lIE1JTUlPX1lSQU5HRV9NQVgJNDgwMAotCi0jZGVmaW5lIExPQ0FMQlROX1RPT0xfRVhUUkExCUJUTl9UT1VDSAotI2RlZmluZSBMT0NBTEJUTl9UT09MX0VYVFJBMglCVE5fU1RZTFVTCi0jZGVmaW5lIExPQ0FMQlROX1RPT0xfRVhUUkEzCUJUTl9TVFlMVVMyCi0KLSNkZWZpbmUgTUlNSU9fVkVORE9SX0lECQkweDA4ZDMKLSNkZWZpbmUgTUlNSU9fUFJPRFVDVF9JRAkweDAwMDEKLSNkZWZpbmUgTUlNSU9fTUFYUEFZTE9BRAkoOCkKLSNkZWZpbmUgTUlNSU9fTUFYTkFNRUxFTgkoNjQpCi0jZGVmaW5lIE1JTUlPX1RYV0FJVAkJKDEpCi0jZGVmaW5lIE1JTUlPX1RYRE9ORQkJKDIpCi0KLSNkZWZpbmUgTUlNSU9fRVZfUEVORE9XTgkoMHgyMikKLSNkZWZpbmUgTUlNSU9fRVZfUEVOREFUQQkoMHgyNCkKLSNkZWZpbmUgTUlNSU9fRVZfUEVOVVAJCSgweDUxKQotI2RlZmluZSBNSU1JT19FVl9NRU1SRVNFVAkoMHg0NSkKLSNkZWZpbmUgTUlNSU9fRVZfQUNDCQkoMHhiMikKLQotI2RlZmluZSBNSU1JT19QRU5fSwkJKDEpCS8qIGJsYWNrIHBlbiAqLwotI2RlZmluZSBNSU1JT19QRU5fQgkJKDIpCS8qIGJsdWUgcGVuICovCi0jZGVmaW5lIE1JTUlPX1BFTl9HCQkoMykJLyogZ3JlZW4gcGVuICovCi0jZGVmaW5lIE1JTUlPX1BFTl9SCQkoNCkJLyogcmVkIHBlbiAqLwotLyogNSwgNiwgNywgOCBhcmUgZXh0cmEgcGVucyAqLwotI2RlZmluZSBNSU1JT19QRU5fRQkJKDkpCS8qIGJpZyBlcmFzZXIgKi8KLSNkZWZpbmUgTUlNSU9fUEVOX0VTCQkoMTApCS8qIGxpbCBlcmFzZXIgKi8KLSNkZWZpbmUgTUlNSU9fUEVOSlVNUF9TVEFSVAkoMTApCi0jZGVmaW5lIE1JTUlPX1BFTkpVTVAJCSg2KQotI2RlZmluZSBNSU1JT19QRU5fSQkJKDE3KQkvKiBtaW1pbyBpbnRlcmFjdGl2ZSAqLwotI2RlZmluZSBNSU1JT19QRU5fSUwJCSgxOCkJLyogbWltaW8gaW50ZXJhY3RpdmUgYnV0dG9uIDEgKi8KLSNkZWZpbmUgTUlNSU9fUEVOX0lSCQkoMTkpCS8qIG1pbWlvIGludGVyYWN0aXZlIGJ1dHRvbiAyICovCi0KLSNkZWZpbmUgTUlNSU9fUEVOX01BWAkJKE1JTUlPX1BFTl9JUikKLQotI2RlZmluZSBBQ0NfRE9ORQkJKDApCi0jZGVmaW5lIEFDQ19ORVdQQUdFCQkoMSkKLSNkZWZpbmUgQUNDX1RBR1BBR0UJCSgyKQotI2RlZmluZSBBQ0NfUFJJTlRQQUdFCQkoNCkKLSNkZWZpbmUgQUNDX01BWElNSVpFCQkoOCkKLSNkZWZpbmUgQUNDX0ZJTkRDVExQTkwJCSgxNikKLQotI2RlZmluZSBpc3ZhbGlkdHhzaXplKG4pCSgobikgPiAwICYmIChuKSA8PSBNSU1JT19NQVhQQVlMT0FEKQotCi0KLXN0cnVjdCBwa3RidWYgewotCXVuc2lnbmVkIGNoYXIgaW5zdHI7Ci0JdW5zaWduZWQgY2hhciBidWZbMTZdOwotCXVuc2lnbmVkIGNoYXIgKnA7Ci0JdW5zaWduZWQgY2hhciAqcTsKLX07Ci0KLXN0cnVjdCB1c2JpbnRlbmRwdCB7Ci0JZG1hX2FkZHJfdCBkbWE7Ci0Jc3RydWN0IHVyYiAqdXJiOwotCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKLQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmRlc2M7Ci19OwotCi1zdHJ1Y3QgbWltaW8gewotCXN0cnVjdCBpbnB1dF9kZXYgKmlkZXY7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVpZmM7Ci0JaW50IG9wZW47Ci0JaW50IHByZXNlbnQ7Ci0JaW50IGdyZWV0ZWQ7Ci0JaW50IHR4ZmxhZ3M7Ci0JY2hhciBwaHlzW01JTUlPX01BWE5BTUVMRU5dOwotCXN0cnVjdCB1c2JpbnRlbmRwdCBpbjsKLQlzdHJ1Y3QgdXNiaW50ZW5kcHQgb3V0OwotCXN0cnVjdCBwa3RidWYgcGt0YnVmOwotCXVuc2lnbmVkIGNoYXIgbWlub3I7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHE7Ci0Jc3BpbmxvY2tfdCB0eGxvY2s7Ci0Jdm9pZCAoKnJ4aGFuZGxlcikoc3RydWN0IG1pbWlvICosIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgaW50KTsKLQlpbnQgbGFzdF9wZW5fZG93bjsKLX07Ci0KLXN0YXRpYyB2b2lkIG1pbWlvX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKik7Ci1zdGF0aWMgdm9pZCBtaW1pb19kZWFsbG9jKHN0cnVjdCBtaW1pbyAqKTsKLXN0YXRpYyB2b2lkIG1pbWlvX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKik7Ci1zdGF0aWMgaW50IG1pbWlvX2dyZWV0KHN0cnVjdCBtaW1pbyAqKTsKLXN0YXRpYyB2b2lkIG1pbWlvX2lycV9pbihzdHJ1Y3QgdXJiICopOwotc3RhdGljIHZvaWQgbWltaW9faXJxX291dChzdHJ1Y3QgdXJiICopOwotc3RhdGljIGludCBtaW1pb19vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKik7Ci1zdGF0aWMgaW50IG1pbWlvX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICosIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICopOwotc3RhdGljIHZvaWQgbWltaW9fcnhfaGFuZGxlcihzdHJ1Y3QgbWltaW8gKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBpbnQpOwotc3RhdGljIGludCBtaW1pb190eChzdHJ1Y3QgbWltaW8gKiwgY29uc3QgY2hhciAqLCBpbnQpOwotCi1zdGF0aWMgY2hhciBtaW1pb19uYW1lW10gPSAiVmlydHVhbEluayBtaW1pby1YaSI7Ci1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgbWltaW9fdGFibGUgW10gPSB7Ci0JeyBVU0JfREVWSUNFKE1JTUlPX1ZFTkRPUl9JRCwgTUlNSU9fUFJPRFVDVF9JRCkgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTI1LCAweGE0YTApIH0sIC8qIGdhZGdldCB6ZXJvIGZpcm13YXJlICovCi0JeyB9Ci19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgbWltaW9fdGFibGUpOwotCi1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbWltaW9fZHJpdmVyID0gewotCS5uYW1lID0gIm1pbWlvIiwKLQkucHJvYmUgPSBtaW1pb19wcm9iZSwKLQkuZGlzY29ubmVjdCA9IG1pbWlvX2Rpc2Nvbm5lY3QsCi0JLmlkX3RhYmxlID0gbWltaW9fdGFibGUsCi19OwotCi1zdGF0aWMgREVDTEFSRV9NVVRFWChkaXNjb25uZWN0X3NlbSk7Ci0KLXN0YXRpYyB2b2lkIG1pbWlvX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYpCi17Ci0Jc3RydWN0IG1pbWlvICptaW1pbzsKLQotCW1pbWlvID0gaW5wdXRfZ2V0X2RydmRhdGEoaWRldik7Ci0JaWYgKCFtaW1pbykgewotCQlkZXZfZXJyKCZpZGV2LT5kZXYsICJudWxsIG1pbWlvIGF0dGFjaGVkIHRvIGlucHV0IGRldmljZVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAobWltaW8tPm9wZW4gPD0gMCkKLQkJZGV2X2VycigmaWRldi0+ZGV2LCAibWltaW8gbm90IG9wZW4uXG4iKTsKLQllbHNlCi0JCW1pbWlvLT5vcGVuLS07Ci0KLQlpZiAobWltaW8tPnByZXNlbnQgPT0gMCAmJiBtaW1pby0+b3BlbiA9PSAwKQotCQltaW1pb19kZWFsbG9jKG1pbWlvKTsKLX0KLQotc3RhdGljIHZvaWQgbWltaW9fZGVhbGxvYyhzdHJ1Y3QgbWltaW8gKm1pbWlvKQotewotCWlmIChtaW1pbyA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQl1c2Jfa2lsbF91cmIobWltaW8tPmluLnVyYik7Ci0KLQl1c2Jfa2lsbF91cmIobWltaW8tPm91dC51cmIpOwotCi0JaWYgKG1pbWlvLT5pZGV2KSB7Ci0JCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKG1pbWlvLT5pZGV2KTsKLQkJaWYgKG1pbWlvLT5pZGV2LT5ncmFiKQotCQkJaW5wdXRfY2xvc2VfZGV2aWNlKG1pbWlvLT5pZGV2LT5ncmFiKTsKLQkJZWxzZQotCQkJZGV2X2RiZygmbWltaW8tPmlkZXYtPmRldiwgIm1pbWlvLT5pZGV2LT5ncmFiID09IE5VTEwiCi0JCQkJIiAtLSBkaWRuJ3QgY2FsbCBpbnB1dF9jbG9zZV9kZXZpY2VcbiIpOwotCX0KLQotCXVzYl9mcmVlX3VyYihtaW1pby0+aW4udXJiKTsKLQotCXVzYl9mcmVlX3VyYihtaW1pby0+b3V0LnVyYik7Ci0KLQlpZiAobWltaW8tPmluLmJ1ZikgewotCQl1c2JfYnVmZmVyX2ZyZWUobWltaW8tPnVkZXYsIE1JTUlPX01BWFBBWUxPQUQsIG1pbWlvLT5pbi5idWYsCi0JCQkJbWltaW8tPmluLmRtYSk7Ci0JfQotCi0JaWYgKG1pbWlvLT5vdXQuYnVmKQotCQl1c2JfYnVmZmVyX2ZyZWUobWltaW8tPnVkZXYsIE1JTUlPX01BWFBBWUxPQUQsIG1pbWlvLT5vdXQuYnVmLAotCQkJCW1pbWlvLT5vdXQuZG1hKTsKLQotCWlmIChtaW1pby0+aWRldikKLQkJaW5wdXRfZnJlZV9kZXZpY2UobWltaW8tPmlkZXYpOwotCi0Ja2ZyZWUobWltaW8pOwotfQotCi1zdGF0aWMgdm9pZCBtaW1pb19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmMpCi17Ci0Jc3RydWN0IG1pbWlvICptaW1pbzsKLQotCWRvd24oJmRpc2Nvbm5lY3Rfc2VtKTsKLQotCW1pbWlvID0gdXNiX2dldF9pbnRmZGF0YShpZmMpOwotCXVzYl9zZXRfaW50ZmRhdGEoaWZjLCBOVUxMKTsKLQlkZXZfZGJnKCZtaW1pby0+aWRldi0+ZGV2LCAiZGlzY29ubmVjdFxuIik7Ci0KLQlpZiAobWltaW8pIHsKLQkJbWltaW8tPnByZXNlbnQgPSAwOwotCi0JCWlmIChtaW1pby0+b3BlbiA8PSAwKQotCQkJbWltaW9fZGVhbGxvYyhtaW1pbyk7Ci0JfQotCi0JdXAoJmRpc2Nvbm5lY3Rfc2VtKTsKLX0KLQotc3RhdGljIGludCBtaW1pb19ncmVldChzdHJ1Y3QgbWltaW8gKm1pbWlvKQotewotCWNvbnN0IHN0cnVjdCBncnRwa3QgewotCQlpbnQgbmJ5dGVzOwotCQl1bnNpZ25lZCBkZWxheTsKLQkJY2hhciBkYXRhWzhdOwotCX0gZ3J0cGt0c1tdID0gewotCQl7IDMsIDAsIHsgMHgxMSwgMHg1NSwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9IH0sCi0JCXsgNSwgMCwgeyAweDUzLCAweDU1LCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDAwIH0gfSwKLQkJeyA1LCAwLCB7IDB4NDMsIDB4NTUsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MDAsIDB4MDAgfSB9LAotCQl7IDUsIDAsIHsgMHgzMywgMHg1NSwgMHgwMCwgMHgwMCwgMHg2NiwgMHgwMCwgMHgwMCwgMHgwMCB9IH0sCi0JCXsgNSwgMCwgeyAweDEzLCAweDAwLCAweDVlLCAweDAyLCAweDRmLCAweDAwLCAweDAwLCAweDAwIH0gfSwKLQkJeyA1LCAwLCB7IDB4MTMsIDB4MDAsIDB4MDQsIDB4MDMsIDB4MTQsIDB4MDAsIDB4MDAsIDB4MDAgfSB9LAotCQl7IDUsIDIsIHsgMHgxMywgMHgwMCwgMHgwMCwgMHgwNCwgMHgxNywgMHgwMCwgMHgwMCwgMHgwMCB9IH0sCi0JCXsgNSwgMCwgeyAweDEzLCAweDAwLCAweDBkLCAweDA4LCAweDE2LCAweDAwLCAweDAwLCAweDAwIH0gfSwKLQkJeyA1LCAwLCB7IDB4MTMsIDB4MDAsIDB4NGQsIDB4MDEsIDB4NWYsIDB4MDAsIDB4MDAsIDB4MDAgfSB9LAotCQl7IDMsIDAsIHsgMHhmMSwgMHg1NSwgMHhhNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9IH0sCi0JCXsgNywgMiwgeyAweDUyLCAweDU1LCAweDAwLCAweDA3LCAweDMxLCAweDU1LCAweDY0LCAweDAwIH0gfSwKLQkJeyAwLCAwLCB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSB9LAotCX07Ci0JaW50IHJzbHQ7Ci0JY29uc3Qgc3RydWN0IGdydHBrdCAqcGt0OwotCi0JZm9yIChwa3QgPSBncnRwa3RzOyBwa3QtPm5ieXRlczsgcGt0KyspIHsKLQkJcnNsdCA9IG1pbWlvX3R4KG1pbWlvLCBwa3QtPmRhdGEsIHBrdC0+bmJ5dGVzKTsKLQkJaWYgKHJzbHQpCi0JCQlyZXR1cm4gcnNsdDsKLQkJaWYgKHBrdC0+ZGVsYXkpCi0JCQltc2xlZXAocGt0LT5kZWxheSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIG1pbWlvX2lycV9pbihzdHJ1Y3QgdXJiICp1cmIpCi17Ci0JaW50IHJzbHQ7Ci0JY2hhciAqZGF0YTsKLQljb25zdCBjaGFyICpyZWFzb24gPSAiZ29pbmcgZG93biI7Ci0Jc3RydWN0IG1pbWlvICptaW1pbzsKLQotCW1pbWlvID0gdXJiLT5jb250ZXh0OwotCi0JaWYgKG1pbWlvID09IE5VTEwpCi0JCS8qIHBhcmFub2lhICovCi0JCXJldHVybjsKLQotCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKLQljYXNlIDA6Ci0JCS8qIHN1Y2Nlc3MgKi8KLQkJYnJlYWs7Ci0JY2FzZSAtRVRJTUVET1VUOgotCQlyZWFzb24gPSAidGltZW91dCAtLSB1bnBsdWdnZWQ/IjsKLQljYXNlIC1FQ09OTlJFU0VUOgotCWNhc2UgLUVOT0VOVDoKLQljYXNlIC1FU0hVVERPV046Ci0JCWRldl9kYmcoJm1pbWlvLT5pZGV2LT5kZXYsICIlcy5cbiIsIHJlYXNvbik7Ci0JCXJldHVybjsKLQlkZWZhdWx0OgotCQlkZXZfZGJnKCZtaW1pby0+aWRldi0+ZGV2LCAidW5rbm93biB1cmItc3RhdHVzOiAlZC5cbiIsCi0JCQl1cmItPnN0YXR1cyk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JZGF0YSA9IG1pbWlvLT5pbi5idWY7Ci0KLQlpZiAobWltaW8tPnJ4aGFuZGxlcikKLQkJbWltaW8tPnJ4aGFuZGxlcihtaW1pbywgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLWV4aXQ6Ci0JLyoKLQkgKiBLZWVwIGxpc3RlbmluZyB0byBkZXZpY2Ugb24gc2FtZSB1cmIuCi0JICovCi0JcnNsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJzbHQpCi0JCWRldl9lcnIoJm1pbWlvLT5pZGV2LT5kZXYsICJ1c2Jfc3VibWl0X3VyYiBmYWlsdXJlOiAlZC5cbiIsCi0JCQlyc2x0KTsKLX0KLQotc3RhdGljIHZvaWQgbWltaW9faXJxX291dChzdHJ1Y3QgdXJiICp1cmIpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgbWltaW8gKm1pbWlvOwotCi0JbWltaW8gPSB1cmItPmNvbnRleHQ7Ci0KLQlpZiAodXJiLT5zdGF0dXMpCi0JCWRldl9kYmcoJm1pbWlvLT5pZGV2LT5kZXYsICJ1cmItc3RhdHVzOiAlZC5cbiIsIHVyYi0+c3RhdHVzKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtaW1pby0+dHhsb2NrLCBmbGFncyk7Ci0JbWltaW8tPnR4ZmxhZ3MgfD0gTUlNSU9fVFhET05FOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1pbWlvLT50eGxvY2ssIGZsYWdzKTsKLQl3bWIoKTsKLQl3YWtlX3VwKCZtaW1pby0+d2FpdHEpOwotfQotCi1zdGF0aWMgaW50IG1pbWlvX29wZW4oc3RydWN0IGlucHV0X2RldiAqaWRldikKLXsKLQlpbnQgcnNsdDsKLQlzdHJ1Y3QgbWltaW8gKm1pbWlvOwotCi0JcnNsdCA9IDA7Ci0JZG93bigmZGlzY29ubmVjdF9zZW0pOwotCW1pbWlvID0gaW5wdXRfZ2V0X2RydmRhdGEoaWRldik7Ci0JZGV2X2RiZygmaWRldi0+ZGV2LCAibWltaW9fb3BlblxuIik7Ci0KLQlpZiAobWltaW8gPT0gTlVMTCkgewotCQlkZXZfZXJyKCZpZGV2LT5kZXYsICJudWxsIG1pbWlvLlxuIik7Ci0JCXJzbHQgPSAtRU5PREVWOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaWYgKG1pbWlvLT5vcGVuKyspCi0JCWdvdG8gZXhpdDsKLQotCWlmIChtaW1pby0+cHJlc2VudCAmJiAhbWltaW8tPmdyZWV0ZWQpIHsKLQkJc3RydWN0IHVyYiAqdXJiID0gbWltaW8tPmluLnVyYjsKLQkJbWltaW8tPmluLnVyYi0+ZGV2ID0gbWltaW8tPnVkZXY7Ci0JCXJzbHQgPSB1c2Jfc3VibWl0X3VyYihtaW1pby0+aW4udXJiLCBHRlBfS0VSTkVMKTsKLQkJaWYgKHJzbHQpIHsKLQkJCWRldl9lcnIoJmlkZXYtPmRldiwgInVzYl9zdWJtaXRfdXJiIGZhaWx1cmUgIgotCQkJCSIocmVzID0gJWQ6ICVzKS4gTm90IGdyZWV0aW5nLlxuIiwKLQkJCQlyc2x0LAotCQkJCSghdXJiID8gInVyYiBpcyBOVUxMIiA6Ci0JCQkJICh1cmItPmhjcHJpdiA/ICJ1cmItPmhjcHJpdiBpcyBub24tTlVMTCIgOgotCQkJCSAgKCF1cmItPmNvbXBsZXRlID8gInVyYiBpcyBub3QgY29tcGxldGUiIDoKLQkJCQkgICAodXJiLT5udW1iZXJfb2ZfcGFja2V0cyA8PSAwID8gInVyYiBoYXMgbm8gcGFja2V0cyIgOgotCQkJCSAgICAodXJiLT5pbnRlcnZhbCA8PSAwID8gInVyYiBpbnRlcnZhbCB0b28gc21hbGwiIDoKLQkJCQkgICAgICJ1cmIgaW50ZXJ2YWwgdG9vIGxhcmdlIG9yIHNvbWUgb3RoZXIgZXJyb3IiKSkpKSkpOwotCQkJcnNsdCA9IC1FSU87Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KLQkJcnNsdCA9IG1pbWlvX2dyZWV0KG1pbWlvKTsKLQkJaWYgKHJzbHQgPT0gMCkgewotCQkJZGV2X2RiZygmaWRldi0+ZGV2LCAiTWltaW8gZ3JlZXRlZCBPSy5cbiIpOwotCQkJbWltaW8tPmdyZWV0ZWQgPSAxOwotCQl9IGVsc2UgewotCQkJZGV2X2RiZygmaWRldi0+ZGV2LCAiTWltaW8gZ3JlZXQgRmFpbHVyZSAoJWQpXG4iLAotCQkJCXJzbHQpOwotCQl9Ci0JfQotCi1leGl0OgotCXVwKCZkaXNjb25uZWN0X3NlbSk7Ci0JcmV0dXJuIHJzbHQ7Ci19Ci0KLXN0YXRpYyBpbnQgbWltaW9fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYywKLQkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKLXsKLQljaGFyIHBhdGhbNjRdOwotCWludCBwaXBlLCBtYXhwOwotCXN0cnVjdCBtaW1pbyAqbWltaW87Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7Ci0Jc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaG9zdGlmYzsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7Ci0JaW50IHJlcyA9IDA7Ci0JaW50IGk7Ci0KLQl1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpZmMpOwotCi0JbWltaW8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWltaW8pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1pbWlvKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlucHV0X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwotCWlmICghaW5wdXRfZGV2KSB7Ci0JCW1pbWlvX2RlYWxsb2MobWltaW8pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQltaW1pby0+dWlmYyA9IGlmYzsKLQltaW1pby0+dWRldiA9IHVkZXY7Ci0JbWltaW8tPnBrdGJ1Zi5wID0gbWltaW8tPnBrdGJ1Zi5idWY7Ci0JbWltaW8tPnBrdGJ1Zi5xID0gbWltaW8tPnBrdGJ1Zi5idWY7Ci0JLyogaW5pdF9pbnB1dF9kZXYobWltaW8tPmlkZXYpOyAqLwotCW1pbWlvLT5pZGV2ID0gaW5wdXRfZGV2OwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1pbWlvLT53YWl0cSk7Ci0Jc3Bpbl9sb2NrX2luaXQoJm1pbWlvLT50eGxvY2spOwotCWhvc3RpZmMgPSBpZmMtPmN1cl9hbHRzZXR0aW5nOwotCi0JaWYgKGhvc3RpZmMtPmRlc2MuYk51bUVuZHBvaW50cyAhPSAyKSB7Ci0JCWRldl9lcnIoJnVkZXYtPmRldiwgIlVuZXhwZWN0ZWQgZW5kcG9pbnQgY291bnQ6ICVkLlxuIiwKLQkJCWhvc3RpZmMtPmRlc2MuYk51bUVuZHBvaW50cyk7Ci0JCW1pbWlvX2RlYWxsb2MobWltaW8pOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQltaW1pby0+aW4uZGVzYyA9ICYoaG9zdGlmYy0+ZW5kcG9pbnRbMF0uZGVzYyk7Ci0JbWltaW8tPm91dC5kZXNjID0gJihob3N0aWZjLT5lbmRwb2ludFsxXS5kZXNjKTsKLQotCW1pbWlvLT5pbi5idWYgPSB1c2JfYnVmZmVyX2FsbG9jKHVkZXYsIE1JTUlPX01BWFBBWUxPQUQsIEdGUF9LRVJORUwsCi0JCQkJCSAmbWltaW8tPmluLmRtYSk7Ci0JbWltaW8tPm91dC5idWYgPSB1c2JfYnVmZmVyX2FsbG9jKHVkZXYsIE1JTUlPX01BWFBBWUxPQUQsIEdGUF9LRVJORUwsCi0JCQkJCSAgJm1pbWlvLT5vdXQuZG1hKTsKLQotCWlmIChtaW1pby0+aW4uYnVmID09IE5VTEwgfHwgbWltaW8tPm91dC5idWYgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJ1c2JfYnVmZmVyX2FsbG9jIGZhaWx1cmUuXG4iKTsKLQkJbWltaW9fZGVhbGxvYyhtaW1pbyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW1pbWlvLT5pbi51cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCW1pbWlvLT5vdXQudXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQotCWlmIChtaW1pby0+aW4udXJiID09IE5VTEwgfHwgbWltaW8tPm91dC51cmIgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJ1c2JfYWxsb2NfdXJiIGZhaWx1cmUuXG4iKTsKLQkJbWltaW9fZGVhbGxvYyhtaW1pbyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qCi0JICogQnVpbGQgdGhlIGlucHV0IHVyYi4KLQkgKi8KLQlwaXBlID0gdXNiX3JjdmludHBpcGUodWRldiwgbWltaW8tPmluLmRlc2MtPmJFbmRwb2ludEFkZHJlc3MpOwotCW1heHAgPSB1c2JfbWF4cGFja2V0KHVkZXYsIHBpcGUsIHVzYl9waXBlb3V0KHBpcGUpKTsKLQlpZiAobWF4cCA+IE1JTUlPX01BWFBBWUxPQUQpCi0JCW1heHAgPSBNSU1JT19NQVhQQVlMT0FEOwotCXVzYl9maWxsX2ludF91cmIobWltaW8tPmluLnVyYiwgdWRldiwgcGlwZSwgbWltaW8tPmluLmJ1ZiwgbWF4cCwKLQkJCSBtaW1pb19pcnFfaW4sIG1pbWlvLCBtaW1pby0+aW4uZGVzYy0+YkludGVydmFsKTsKLQltaW1pby0+aW4udXJiLT50cmFuc2Zlcl9kbWEgPSBtaW1pby0+aW4uZG1hOwotCW1pbWlvLT5pbi51cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwotCi0JLyoKLQkgKiBCdWlsZCB0aGUgb3V0cHV0IHVyYi4KLQkgKi8KLQlwaXBlID0gdXNiX3NuZGludHBpcGUodWRldiwgbWltaW8tPm91dC5kZXNjLT5iRW5kcG9pbnRBZGRyZXNzKTsKLQltYXhwID0gdXNiX21heHBhY2tldCh1ZGV2LCBwaXBlLCB1c2JfcGlwZW91dChwaXBlKSk7Ci0JaWYgKG1heHAgPiBNSU1JT19NQVhQQVlMT0FEKQotCQltYXhwID0gTUlNSU9fTUFYUEFZTE9BRDsKLQl1c2JfZmlsbF9pbnRfdXJiKG1pbWlvLT5vdXQudXJiLCB1ZGV2LCBwaXBlLCBtaW1pby0+b3V0LmJ1ZiwgbWF4cCwKLQkJCSBtaW1pb19pcnFfb3V0LCBtaW1pbywgbWltaW8tPm91dC5kZXNjLT5iSW50ZXJ2YWwpOwotCW1pbWlvLT5vdXQudXJiLT50cmFuc2Zlcl9kbWEgPSBtaW1pby0+b3V0LmRtYTsKLQltaW1pby0+b3V0LnVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7Ci0KLQkvKgotCSAqIEJ1aWxkIGlucHV0IGRldmljZSBpbmZvCi0JICovCi0JdXNiX21ha2VfcGF0aCh1ZGV2LCBwYXRoLCA2NCk7Ci0Jc25wcmludGYobWltaW8tPnBoeXMsIE1JTUlPX01BWE5BTUVMRU4sICIlcy9pbnB1dDAiLCBwYXRoKTsKLQlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dF9kZXYsIG1pbWlvKTsKLQkvKiBpbnB1dF9kZXYtPmRldiA9ICZpZmMtPmRldjsgKi8KLQlpbnB1dF9kZXYtPm9wZW4gPSBtaW1pb19vcGVuOwotCWlucHV0X2Rldi0+Y2xvc2UgPSBtaW1pb19jbG9zZTsKLQlpbnB1dF9kZXYtPm5hbWUgPSBtaW1pb19uYW1lOwotCWlucHV0X2Rldi0+cGh5cyA9IG1pbWlvLT5waHlzOwotCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZpZmMtPmRldjsKLQotCWlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19VU0I7Ci0JaW5wdXRfZGV2LT5pZC52ZW5kb3IgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKLQlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7Ci0JaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5iY2REZXZpY2UpOwotCi0JaW5wdXRfZGV2LT5ldmJpdFswXSB8PSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpOwotCWZvciAoaSA9IEJUTl9UT09MX1BFTjsgaSA8PSBMT0NBTEJUTl9UT09MX0VYVFJBMjsgKytpKQotCQlzZXRfYml0KGksIGlucHV0X2Rldi0+a2V5Yml0KTsKLQotCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9NSVNDKV0gfD0gQklUX01BU0soQlROXzApIHwKLQkJCQkJCSBCSVRfTUFTSyhCVE5fMSkgfAotCQkJCQkJIEJJVF9NQVNLKEJUTl8yKSB8Ci0JCQkJCQkgQklUX01BU0soQlROXzMpIHwKLQkJCQkJCSBCSVRfTUFTSyhCVE5fNCkgfAotCQkJCQkJIEJJVF9NQVNLKEJUTl81KTsKLQkvKiAgIGlucHV0X2Rldi0+a2V5Yml0W0JUTl9NT1VTRV0gfD0gQklUKEJUTl9MRUZUKTsgKi8KLQlpbnB1dF9kZXYtPmFic2JpdFswXSB8PSBCSVRfTUFTSyhBQlNfWCkgfCBCSVRfTUFTSyhBQlNfWSk7Ci0JaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWCwgMCwgTUlNSU9fWFJBTkdFX01BWCwgMCwgMCk7Ci0JaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWSwgMCwgTUlNSU9fWVJBTkdFX01BWCwgMCwgMCk7Ci0JaW5wdXRfZGV2LT5hYnNiaXRbQklUX1dPUkQoQUJTX01JU0MpXSB8PSBCSVRfTUFTSyhBQlNfTUlTQyk7Ci0KLSNpZiAwCi0JaW5wdXRfZGV2LT5hYnNtaW5bQUJTX1hdID0gMDsKLQlpbnB1dF9kZXYtPmFic21pbltBQlNfWV0gPSAwOwotCWlucHV0X2Rldi0+YWJzbWF4W0FCU19YXSA9IDk2MDA7Ci0JaW5wdXRfZGV2LT5hYnNtYXhbQUJTX1ldID0gNDgwMDsKLQlpbnB1dF9kZXYtPmFic2Z1enpbQUJTX1hdID0gMDsKLQlpbnB1dF9kZXYtPmFic2Z1enpbQUJTX1ldID0gMDsKLQlpbnB1dF9kZXYtPmFic2ZsYXRbQUJTX1hdID0gMDsKLQlpbnB1dF9kZXYtPmFic2ZsYXRbQUJTX1ldID0gMDsKLSNlbmRpZgotCi0jaWYgMAotCS8qIHRoaXMgd2lsbCBqdXN0IHJlZHVjZSB0aGUgcHJlY2lzaW9uICovCi0JaW5wdXRfZGV2LT5hYnNmdXp6W0FCU19YXSA9IDg7IC8qIGV4cGVyaW1lbnRhbDsgbWF5IG5lZWQgdG8gY2hhbmdlICovCi0JaW5wdXRfZGV2LT5hYnNmdXp6W0FCU19ZXSA9IDg7IC8qIGV4cGVyaW1lbnRhbDsgbWF5IG5lZWQgdG8gY2hhbmdlICovCi0jZW5kaWYKLQotCS8qCi0JICogUmVnaXN0ZXIgdGhlIGlucHV0IGRldmljZS4KLQkgKi8KLQlyZXMgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UobWltaW8tPmlkZXYpOwotCWlmIChyZXMpIHsKLQkJZGV2X2VycigmdWRldi0+ZGV2LCAiaW5wdXRfcmVnaXN0ZXJfZGV2aWNlIGZhaWx1cmUgKCVkKVxuIiwKLQkJCXJlcyk7Ci0JCW1pbWlvX2RlYWxsb2MobWltaW8pOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JZGV2X2RiZygmbWltaW8tPmlkZXYtPmRldiwgImlucHV0OiAlcyBvbiAlcyAocmVzID0gJWQpLlxuIiwKLQkJaW5wdXRfZGV2LT5uYW1lLCBpbnB1dF9kZXYtPnBoeXMsIHJlcyk7Ci0KLQl1c2Jfc2V0X2ludGZkYXRhKGlmYywgbWltaW8pOwotCW1pbWlvLT5wcmVzZW50ID0gMTsKLQotCS8qCi0JICogU3VibWl0IHRoZSBpbnB1dCB1cmIgdG8gdGhlIHVzYiBzdWJzeXN0ZW0uCi0JICovCi0JbWltaW8tPmluLnVyYi0+ZGV2ID0gbWltaW8tPnVkZXY7Ci0JcmVzID0gdXNiX3N1Ym1pdF91cmIobWltaW8tPmluLnVyYiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHJlcykgewotCQlkZXZfZXJyKCZtaW1pby0+aWRldi0+ZGV2LCAidXNiX3N1Ym1pdF91cmIgZmFpbHVyZSAoJWQpXG4iLAotCQkJcmVzKTsKLQkJbWltaW9fZGVhbGxvYyhtaW1pbyk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCS8qCi0JICogQXR0ZW1wdCB0byBncmVldCB0aGUgbWltaW8gYWZ0ZXIgZ2l2aW5nCi0JICogaXQgc29tZSBwb3N0LWluaXQgc2V0dGxpbmcgdGltZS4KLQkgKgotCSAqIG5vdGU6IHNvbWV0aW1lcyB0aGlzIHNsZWVwIGludGVydmFsIGlzbid0Ci0JICogbG9uZyBlbm91Z2ggdG8gcGVybWl0IHRoZSBkZXZpY2UgdG8gcmUtaW5pdAotCSAqIGFmdGVyIGEgaG90LXN3YXA7IG1heWJlIG5lZWQgdG8gYnVtcCBpdCB1cC4KLQkgKgotCSAqIEFzIGl0IGlzLCB0aGlzIHByb2JhYmx5IGJyZWFrcyBtb2R1bGUgdW5sb2FkaW5nIHN1cHBvcnQhCi0JICovCi0JbXNsZWVwKDEwMjQpOwotCi0JcmVzID0gbWltaW9fZ3JlZXQobWltaW8pOwotCWlmIChyZXMgPT0gMCkgewotCQlkZXZfZGJnKCZtaW1pby0+aWRldi0+ZGV2LCAiTWltaW8gZ3JlZXRlZCBPSy5cbiIpOwotCQltaW1pby0+Z3JlZXRlZCA9IDE7Ci0JCW1pbWlvLT5yeGhhbmRsZXIgPSBtaW1pb19yeF9oYW5kbGVyOwotCX0gZWxzZSB7Ci0JCWRldl9kYmcoJm1pbWlvLT5pZGV2LT5kZXYsICJNaW1pbyBncmVldCBGYWlsdXJlICglZClcbiIsIHJlcyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaGFuZGxlX21pbWlvX3J4X3BlbnVwZG93bihzdHJ1Y3QgbWltaW8gKm1pbWlvLAotCQkJCSAgICAgaW50IGRvd24sCi0JCQkJICAgICBjb25zdCBjaGFyICpjb25zdCBpbnN0cltdLAotCQkJCSAgICAgY29uc3QgaW50IGluc3RyX29mc3RbXSkKLXsKLQlpbnQgcGVuaWQsIHg7Ci0JaWYgKG1pbWlvLT5wa3RidWYucSAtIG1pbWlvLT5wa3RidWYucCA8IChkb3duID8gNCA6IDMpKQotCQlyZXR1cm4gMTsgCQkvKiBwYXJ0aWFsIHBrdCAqLwotCi0JaWYgKGRvd24pIHsKLQkJeCA9ICptaW1pby0+cGt0YnVmLnAgXiAqKG1pbWlvLT5wa3RidWYucCArIDEpIF4KLQkJCSoobWltaW8tPnBrdGJ1Zi5wICsgMik7Ci0JCWlmICh4ICE9ICoobWltaW8tPnBrdGJ1Zi5wICsgMykpIHsKLQkJCWRldl9kYmcoJm1pbWlvLT5pZGV2LT5kZXYsICJFVl9QRU4lczogYmFkIHhzdW0uXG4iLAotCQkJCWRvd24gPyAiRE9XTiI6IlVQIik7Ci0JCQkvKiBza2lwIHRoaXMgZXZlbnQgZGF0YSAqLwotCQkJbWltaW8tPnBrdGJ1Zi5wICs9IDQ7Ci0JCQkvKiBkZWNvZGUgYW55IHJlbWFpbmluZyBldmVudHMgKi8KLQkJCXJldHVybiAwOwotCQl9Ci0JCXBlbmlkID0gbWltaW8tPnBrdGJ1Zi5pbnN0ciA9ICoobWltaW8tPnBrdGJ1Zi5wICsgMik7Ci0JCWlmIChwZW5pZCA+IE1JTUlPX1BFTl9NQVgpIHsKLQkJCWRldl9kYmcoJm1pbWlvLT5pZGV2LT5kZXYsCi0JCQkJIlVubWFwcGVkIHBlbklEIChub3QgaW4gWzAsICVkXSk6ICVkXG4iLAotCQkJCU1JTUlPX1BFTl9NQVgsIChpbnQpbWltaW8tPnBrdGJ1Zi5pbnN0cik7Ci0JCQlwZW5pZCA9IG1pbWlvLT5wa3RidWYuaW5zdHIgPSAwOwotCQl9Ci0JCW1pbWlvLT5sYXN0X3Blbl9kb3duID0gcGVuaWQ7Ci0JfSBlbHNlIHsKLQkJcGVuaWQgPSBtaW1pby0+bGFzdF9wZW5fZG93bjsKLQl9Ci0JZGV2X2RiZygmbWltaW8tPmlkZXYtPmRldiwgIiVzIChpZCAlZCwgY29kZSAlZCkgJXMuXG4iLCBpbnN0cltwZW5pZF0sCi0JCWluc3RyX29mc3RbcGVuaWRdLCBwZW5pZCwgZG93biA/ICJkb3duIiA6ICJ1cCIpOwotCi0JaWYgKGluc3RyX29mc3RbcGVuaWRdID49IDApIHsKLQkJaW50IGNvZGUgPSBCVE5fVE9PTF9QRU4gKyBpbnN0cl9vZnN0W3BlbmlkXTsKLQkJaW50IHZhbHVlID0gZG93biA/IERPV05WQUxVRSA6IFVQVkFMVUU7Ci0JCWlmIChjb2RlID4gS0VZX01BWCkKLQkJCWRldl9kYmcoJm1pbWlvLT5pZGV2LT5kZXYsICJpbnB1dF9ldmVudCB3aWxsIGlnbm9yZSAiCi0JCQkJIi0tIGNvZGUgKCVkKSA+IEtFWV9NQVhcbiIsIGNvZGUpOwotCQlpZiAoIXRlc3RfYml0KGNvZGUsIG1pbWlvLT5pZGV2LT5rZXliaXQpKQotCQkJZGV2X2RiZygmbWltaW8tPmlkZXYtPmRldiwgImlucHV0X2V2ZW50IHdpbGwgaWdub3JlICIKLQkJCQkiLS0gYml0IGZvciBjb2RlICglZCkgbm90IGVuYWJsZWRcbiIsIGNvZGUpOwotCQlpZiAoISF0ZXN0X2JpdChjb2RlLCBtaW1pby0+aWRldi0+a2V5KSA9PSB2YWx1ZSkKLQkJCWRldl9kYmcoJm1pbWlvLT5pZGV2LT5kZXYsICJpbnB1dF9ldmVudCB3aWxsIGlnbm9yZSAiCi0JCQkJIi0tIGJpdCBmb3IgY29kZSAoJWQpIGFscmVhZHkgc2V0IHRvICVkXG4iLAotCQkJCWNvZGUsIHZhbHVlKTsKLQkJaWYgKHZhbHVlICE9IERPV05WQUxVRSkgewotCQkJLyogaW5wdXRfcmVncyhtaW1pby0+aWRldiwgcmVncyk7ICovCi0JCQlpbnB1dF9yZXBvcnRfa2V5KG1pbWlvLT5pZGV2LCBjb2RlLCB2YWx1ZSk7Ci0JCQlpbnB1dF9zeW5jKG1pbWlvLT5pZGV2KTsKLQkJfSBlbHNlIHsKLQkJCS8qIHdhaXQgdW50aWwgd2UgZ2V0IHNvbWUgY29vcmRpbmF0ZXMgKi8KLQkJfQotCX0gZWxzZSB7Ci0JCWRldl9kYmcoJm1pbWlvLT5pZGV2LT5kZXYsICJwZW5JRCBvZmZzZXRbJWRdID09ICVkIGlzIDwgMCAiCi0JCQkiLSBub3Qgc2VuZGluZ1xuIiwgcGVuaWQsIGluc3RyX29mc3RbcGVuaWRdKTsKLQl9Ci0JbWltaW8tPnBrdGJ1Zi5wICs9IGRvd24gPyA0IDogMzsgLyogMyBmb3IgdXAsIDQgZm9yIGRvd24gKi8KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFN0YXkgdHVuZWQgZm9yIHBhcnRpYWwtcGFja2V0IGV4Y2l0ZW1lbnQuCi0gKgotICogVGhpcyByb3V0aW5lIGJ1ZmZlcnMgZGF0YSBwYWNrZXRzIHJlY2VpdmVkIGZyb20gdGhlIG1pbWlvIGRldmljZQotICogaW4gdGhlIG1pbWlvJ3MgZGF0YSBzcGFjZS4gIFRoaXMgYnVmZmVyaW5nIGlzIG5lY2Vzc2FyeSBiZWNhdXNlCi0gKiB0aGUgbWltaW8ncyBpbiBlbmRwb2ludCBjYW4gc2VydmUgdXMgcGFydGlhbCBwYWNrZXRzIG9mIGRhdGEsIGFuZAotICogd2Ugd2FudCB0aGUgZHJpdmVyIHRvIHN1cHBvcnQgdGhlIHNlcnZpY2luZyBvZiBtdWx0aXBsZSBtaW1pb3MuCi0gKiBFbXBpcmljYWwgZXZpZGVuY2UgZ2F0aGVyZWQgc28gZmFyIHN1Z2dlc3RzIHRoYXQgdGhlIG1ldGhvZCBvZgotICogYnVmZmVyaW5nIHBhY2tldCBkYXRhIGluIHRoZSBtaW1pbydzIGRhdGEgc3BhY2Ugd29ya3MuICBQcmV2aW91cwotICogdmVyc2lvbnMgb2YgdGhpcyBkcml2ZXIgZGlkIG5vdCBidWZmZXIgcGFja2V0IGRhdGEgaW4gZWFjaCBtaW1pbydzCi0gKiBkYXRhLXNwYWNlLCBhbmQgd2VyZSB0aGVyZWZvcmUgbm90IGFibGUgdG8gc2VydmljZSBtdWx0aXBsZSBtaW1pb3MuCi0gKiBOb3RlIHRoYXQgc2luY2UgdGhlIGNhbGxlciBvZiB0aGlzIHJvdXRpbmUgaXMgcnVubmluZyBpbiBpbnRlcnJ1cHQKLSAqIGNvbnRleHQsIGNhcmUgbmVlZHMgdG8gYmUgdGFrZW4gdG8gZW5zdXJlIHRoYXQgdGhpcyByb3V0aW5lIGRvZXMgbm90Ci0gKiBiZWNvbWUgYmxvYXRlZCwgYW5kIGl0IG1heSBiZSB0aGF0IGFub3RoZXIgc3BpbmxvY2sgaXMgbmVlZGVkIGluIGVhY2gKLSAqIG1pbWlvIHRvIGd1YXJkIHRoZSBidWZmZXJlZCBwYWNrZXQgZGF0YSBwcm9wZXJseS4KLSAqLwotc3RhdGljIHZvaWQgbWltaW9fcnhfaGFuZGxlcihzdHJ1Y3QgbWltaW8gKm1pbWlvLAotCQkJICAgICB1bnNpZ25lZCBjaGFyICpkYXRhLAotCQkJICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQotewotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZtaW1pby0+aWRldi0+ZGV2OwotCXVuc2lnbmVkIGludCB4OwotCXVuc2lnbmVkIGludCB5OwotCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaW5zdHJbXSA9IHsKLQkJIj8wIiwKLQkJImJsYWNrIHBlbiIsICJibHVlIHBlbiIsICJncmVlbiBwZW4iLCAicmVkIHBlbiIsCi0JCSJicm93biBwZW4iLCAib3JhbmdlIHBlbiIsICJwdXJwbGUgcGVuIiwgInllbGxvdyBwZW4iLAotCQkiYmlnIGVyYXNlciIsICJsaWwgZXJhc2VyIiwKLQkJIj8xMSIsICI/MTIiLCAiPzEzIiwgIj8xNCIsICI/MTUiLCAiPzE2IiwKLQkJIm1pbWlvIGludGVyYWN0aXZlIiwgImludGVyYWN0aXZlIGJ1dHRvbjEiLAotCQkiaW50ZXJhY3RpdmUgYnV0dG9uMiIKLQl9OwotCi0JLyogTWltaW8gSW50ZXJhY3RpdmUgZ2l2ZXM6Ci0JICogZG93bjogWzB4MjIgMHgwMSAweDExIDB4MzIgMHgyNF0KLQkgKiBiMSAgOiBbMHgyMiAweDAxIDB4MTIgMHgzMSAweDI0XQotCSAqIGIyICA6IFsweDIyIDB4MDEgMHgxMyAweDMwIDB4MjRdCi0JICovCi0Jc3RhdGljIGNvbnN0IGludCBpbnN0cl9vZnN0W10gPSB7Ci0JCS0xLAotCQkwLCAxLCAyLCAzLAotCQk5LCA5LCA5LCA5LAotCQk0LCA1LAotCQktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCQk2LCA3LCA4LAotCX07Ci0KLQltZW1jcHkobWltaW8tPnBrdGJ1Zi5xLCBkYXRhLCBuYnl0ZXMpOwotCW1pbWlvLT5wa3RidWYucSArPSBuYnl0ZXM7Ci0KLQl3aGlsZSAobWltaW8tPnBrdGJ1Zi5wIDwgbWltaW8tPnBrdGJ1Zi5xKSB7Ci0JCWludCB0ID0gKm1pbWlvLT5wa3RidWYucDsKLQkJc3dpdGNoICh0KSB7Ci0JCWNhc2UgTUlNSU9fRVZfUEVOVVA6Ci0JCWNhc2UgTUlNSU9fRVZfUEVORE9XTjoKLQkJCWlmIChoYW5kbGVfbWltaW9fcnhfcGVudXBkb3duKG1pbWlvLAotCQkJCQkJICAgICAgdCA9PSBNSU1JT19FVl9QRU5ET1dOLAotCQkJCQkJICAgICAgaW5zdHIsIGluc3RyX29mc3QpKQotCQkJCXJldHVybjsgLyogcGFydGlhbCBwYWNrZXQgKi8KLQkJCWJyZWFrOwotCi0JCWNhc2UgTUlNSU9fRVZfUEVOREFUQToKLQkJCWlmIChtaW1pby0+cGt0YnVmLnEgLSBtaW1pby0+cGt0YnVmLnAgPCA2KQotCQkJCS8qIHBhcnRpYWwgcGt0ICovCi0JCQkJcmV0dXJuOwotCQkJeCA9ICptaW1pby0+cGt0YnVmLnAgXiAqKG1pbWlvLT5wa3RidWYucCArIDEpIF4KLQkJCQkqKG1pbWlvLT5wa3RidWYucCArIDIpIF4KLQkJCQkqKG1pbWlvLT5wa3RidWYucCArIDMpIF4KLQkJCQkqKG1pbWlvLT5wa3RidWYucCArIDQpOwotCQkJaWYgKHggIT0gKihtaW1pby0+cGt0YnVmLnAgKyA1KSkgewotCQkJCWRldl9kYmcoZGV2LCAiRVZfUEVOREFUQTogYmFkIHhzdW0uXG4iKTsKLQkJCQltaW1pby0+cGt0YnVmLnAgKz0gNjsgLyogc2tpcCB0aGlzIGV2ZW50IGRhdGEgKi8KLQkJCQlicmVhazsgLyogZGVjb2RlIGFueSByZW1haW5pbmcgZXZlbnRzICovCi0JCQl9Ci0JCQl4ID0gKihtaW1pby0+cGt0YnVmLnAgKyAxKTsKLQkJCXggPDw9IDg7Ci0JCQl4IHw9ICoobWltaW8tPnBrdGJ1Zi5wICsgMik7Ci0JCQl5ID0gKihtaW1pby0+cGt0YnVmLnAgKyAzKTsKLQkJCXkgPDw9IDg7Ci0JCQl5IHw9ICoobWltaW8tPnBrdGJ1Zi5wICsgNCk7Ci0JCQlkZXZfZGJnKGRldiwgImNvb3JkOiAoJWQsICVkKVxuIiwgeCwgeSk7Ci0JCQlpZiAoaW5zdHJfb2ZzdFttaW1pby0+cGt0YnVmLmluc3RyXSA+PSAwKSB7Ci0JCQkJaW50IGNvZGUgPSBCVE5fVE9PTF9QRU4gKwotCQkJCQkgICBpbnN0cl9vZnN0W21pbWlvLT5sYXN0X3Blbl9kb3duXTsKLSNpZiAwCi0JCQkJLyogVXR0ZXIgaGFjayB0byBlbnN1cmUgd2UgZ2V0IGZvcndhcmRlZCBfQU5EXwotCQkJCSAqIHNvIHdlIGNhbiBpZGVudGlmeSB3aGVuIGEgY29tcGxldGUgc2lnbmFsIGlzCi0JCQkJICogcmVjZWl2ZWQgKi8KLQkJCQltaW1pby0+aWRldi0+YWJzW0FCU19ZXSA9IC0xOwotCQkJCW1pbWlvLT5pZGV2LT5hYnNbQUJTX1hdID0gLTE7Ci0jZW5kaWYKLQkJCQkvKiBpbnB1dF9yZWdzKG1pbWlvLT5pZGV2LCByZWdzKTsgKi8KLQkJCQlpbnB1dF9yZXBvcnRfYWJzKG1pbWlvLT5pZGV2LCBBQlNfWCwgeCk7Ci0JCQkJaW5wdXRfcmVwb3J0X2FicyhtaW1pby0+aWRldiwgQUJTX1ksIHkpOwotCQkJCS8qIGZha2UgYSBwZW51cCAqLwotCQkJCWNoYW5nZV9iaXQoY29kZSwgbWltaW8tPmlkZXYtPmtleSk7Ci0JCQkJaW5wdXRfcmVwb3J0X2tleShtaW1pby0+aWRldiwKLQkJCQkJCSBjb2RlLAotCQkJCQkJIERPV05WQUxVRSk7Ci0JCQkJLyogYWx3YXlzIHN5bmMgaGVyZSAqLwotCQkJCW1pbWlvLT5pZGV2LT5zeW5jID0gMDsKLQkJCQlpbnB1dF9zeW5jKG1pbWlvLT5pZGV2KTsKLQkJCX0KLQkJCW1pbWlvLT5wa3RidWYucCArPSA2OwotCQkJYnJlYWs7Ci0JCWNhc2UgTUlNSU9fRVZfTUVNUkVTRVQ6Ci0JCQlpZiAobWltaW8tPnBrdGJ1Zi5xIC0gbWltaW8tPnBrdGJ1Zi5wIDwgNykKLQkJCQkvKiBwYXJ0aWFsIHBrdCAqLwotCQkJCXJldHVybjsKLQkJCWRldl9kYmcoZGV2LCAibWVtLXJlc2V0LlxuIik7Ci0JCQkvKiBpbnB1dF9yZWdzKG1pbWlvLT5pZGV2LCByZWdzKTsgKi8KLQkJCWlucHV0X2V2ZW50KG1pbWlvLT5pZGV2LCBFVl9LRVksIEJUTl8wLCAxKTsKLQkJCWlucHV0X2V2ZW50KG1pbWlvLT5pZGV2LCBFVl9LRVksIEJUTl8wLCAwKTsKLQkJCWlucHV0X3N5bmMobWltaW8tPmlkZXYpOwotCQkJbWltaW8tPnBrdGJ1Zi5wICs9IDc7Ci0JCQlicmVhazsKLQkJY2FzZSBNSU1JT19FVl9BQ0M6Ci0JCQlpZiAobWltaW8tPnBrdGJ1Zi5xIC0gbWltaW8tPnBrdGJ1Zi5wIDwgNCkKLQkJCQkvKiBwYXJ0aWFsIHBrdCAqLwotCQkJCXJldHVybjsKLQkJCXggPSAqbWltaW8tPnBrdGJ1Zi5wIF4gKihtaW1pby0+cGt0YnVmLnAgKyAxKSBeCi0JCQkJKihtaW1pby0+cGt0YnVmLnAgKyAyKTsKLQkJCWlmICh4ICE9ICoobWltaW8tPnBrdGJ1Zi5wICsgMykpIHsKLQkJCQlkZXZfZGJnKGRldiwgIkVWX0FDQzogYmFkIHhzdW0uXG4iKTsKLQkJCQltaW1pby0+cGt0YnVmLnAgKz0gNDsgLyogc2tpcCB0aGlzIGV2ZW50IGRhdGEgKi8KLQkJCQlicmVhazsgLyogZGVjb2RlIGFueSByZW1haW5pbmcgZXZlbnRzICovCi0JCQl9Ci0JCQlzd2l0Y2ggKCoobWltaW8tPnBrdGJ1Zi5wICsgMikpIHsKLQkJCWNhc2UgQUNDX05FV1BBR0U6Ci0JCQkJZGV2X2RiZygmbWltaW8tPmlkZXYtPmRldiwgIm5ldy1wYWdlLlxuIik7Ci0JCQkJLyogaW5wdXRfcmVncyhtaW1pby0+aWRldiwgcmVncyk7ICovCi0JCQkJaW5wdXRfZXZlbnQobWltaW8tPmlkZXYsIEVWX0tFWSwgQlROXzEsIDEpOwotCQkJCWlucHV0X2V2ZW50KG1pbWlvLT5pZGV2LCBFVl9LRVksIEJUTl8xLCAwKTsKLQkJCQlpbnB1dF9zeW5jKG1pbWlvLT5pZGV2KTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQUNDX1RBR1BBR0U6Ci0JCQkJZGV2X2RiZygmbWltaW8tPmlkZXYtPmRldiwgInRhZy1wYWdlLlxuIik7Ci0JCQkJLyogaW5wdXRfcmVncyhtaW1pby0+aWRldiwgcmVncyk7ICovCi0JCQkJaW5wdXRfZXZlbnQobWltaW8tPmlkZXYsIEVWX0tFWSwgQlROXzIsIDEpOwotCQkJCWlucHV0X2V2ZW50KG1pbWlvLT5pZGV2LCBFVl9LRVksIEJUTl8yLCAwKTsKLQkJCQlpbnB1dF9zeW5jKG1pbWlvLT5pZGV2KTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQUNDX1BSSU5UUEFHRToKLQkJCQlkZXZfZGJnKCZtaW1pby0+aWRldi0+ZGV2LCAicHJpbnQtcGFnZS5cbiIpOwotCQkJCS8qIGlucHV0X3JlZ3MobWltaW8tPmlkZXYsIHJlZ3MpOyovCi0JCQkJaW5wdXRfZXZlbnQobWltaW8tPmlkZXYsIEVWX0tFWSwgQlROXzMsIDEpOwotCQkJCWlucHV0X2V2ZW50KG1pbWlvLT5pZGV2LCBFVl9LRVksIEJUTl8zLCAwKTsKLQkJCQlpbnB1dF9zeW5jKG1pbWlvLT5pZGV2KTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQUNDX01BWElNSVpFOgotCQkJCWRldl9kYmcoJm1pbWlvLT5pZGV2LT5kZXYsCi0JCQkJCSJtYXhpbWl6ZS13aW5kb3cuXG4iKTsKLQkJCQkvKiBpbnB1dF9yZWdzKG1pbWlvLT5pZGV2LCByZWdzKTsgKi8KLQkJCQlpbnB1dF9ldmVudChtaW1pby0+aWRldiwgRVZfS0VZLCBCVE5fNCwgMSk7Ci0JCQkJaW5wdXRfZXZlbnQobWltaW8tPmlkZXYsIEVWX0tFWSwgQlROXzQsIDApOwotCQkJCWlucHV0X3N5bmMobWltaW8tPmlkZXYpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBQ0NfRklORENUTFBOTDoKLQkJCQlkZXZfZGJnKCZtaW1pby0+aWRldi0+ZGV2LCAiZmluZC1jdGwtcGFuZWwuXG4iKTsKLQkJCQkvKiBpbnB1dF9yZWdzKG1pbWlvLT5pZGV2LCByZWdzKTsgKi8KLQkJCQlpbnB1dF9ldmVudChtaW1pby0+aWRldiwgRVZfS0VZLCBCVE5fNSwgMSk7Ci0JCQkJaW5wdXRfZXZlbnQobWltaW8tPmlkZXYsIEVWX0tFWSwgQlROXzUsIDApOwotCQkJCWlucHV0X3N5bmMobWltaW8tPmlkZXYpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBQ0NfRE9ORToKLQkJCQlkZXZfZGJnKCZtaW1pby0+aWRldi0+ZGV2LCAiYWNjLWRvbmUuXG4iKTsKLQkJCQkvKiBubyBldmVudCBpcyBkaXNwYXRjaGVkIHRvIHRoZSBpbnB1dAotCQkJCSAqIHN1YnN5c3RlbSBmb3IgdGhpcyBkZXZpY2UgZXZlbnQuCi0JCQkJICovCi0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWRldl9kYmcoZGV2LCAidW5rbm93biBhY2MgZXZlbnQuXG4iKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCW1pbWlvLT5wa3RidWYucCArPSA0OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQltaW1pby0+cGt0YnVmLnArKzsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBObyBwYXJ0aWFsIGV2ZW50IHdhcyByZWNlaXZlZCwgc28gcmVzZXQgbWltaW8ncyBwa3RidWYgcHRycy4KLQkgKi8KLQltaW1pby0+cGt0YnVmLnAgPSBtaW1pby0+cGt0YnVmLnEgPSBtaW1pby0+cGt0YnVmLmJ1ZjsKLX0KLQotc3RhdGljIGludCBtaW1pb190eChzdHJ1Y3QgbWltaW8gKm1pbWlvLCBjb25zdCBjaGFyICpidWYsIGludCBuYnl0ZXMpCi17Ci0JaW50IHJzbHQ7Ci0JaW50IHRpbWVvdXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQotCWlmICghKGlzdmFsaWR0eHNpemUobmJ5dGVzKSkpIHsKLQkJZGV2X2VycigmbWltaW8tPmlkZXYtPmRldiwgImludmFsaWQgYXJnOiBuYnl0ZXM6ICVkLlxuIiwKLQkJCW5ieXRlcyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qCi0JICogSW5pdCB0aGUgb3V0IHVyYiBhbmQgY29weSB0aGUgZGF0YSB0byBzZW5kLgotCSAqLwotCW1pbWlvLT5vdXQudXJiLT5kZXYgPSBtaW1pby0+dWRldjsKLQltaW1pby0+b3V0LnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IG5ieXRlczsKLQltZW1jcHkobWltaW8tPm91dC51cmItPnRyYW5zZmVyX2J1ZmZlciwgYnVmLCBuYnl0ZXMpOwotCi0JLyoKLQkgKiBTZW5kIHRoZSBkYXRhLgotCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZtaW1pby0+dHhsb2NrLCBmbGFncyk7Ci0JbWltaW8tPnR4ZmxhZ3MgPSBNSU1JT19UWFdBSVQ7Ci0JcnNsdCA9IHVzYl9zdWJtaXRfdXJiKG1pbWlvLT5vdXQudXJiLCBHRlBfQVRPTUlDKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtaW1pby0+dHhsb2NrLCBmbGFncyk7Ci0JZGV2X2RiZygmbWltaW8tPmlkZXYtPmRldiwgInJzbHQ6ICVkLlxuIiwgcnNsdCk7Ci0KLQlpZiAocnNsdCkgewotCQlkZXZfZXJyKCZtaW1pby0+aWRldi0+ZGV2LCAidXNiX3N1Ym1pdF91cmIgZmFpbHVyZTogJWQuXG4iLAotCQkJcnNsdCk7Ci0JCXJldHVybiByc2x0OwotCX0KLQotCS8qCi0JICogV2FpdCBmb3IgY29tcGxldGlvbiB0byBiZSBzaWduYWxsZWQgKHRoZSBtaW1pb19pcnFfb3V0Ci0JICogY29tcGxldGlvbiByb3V0aW5lIHdpbGwgb3IgTUlNSU9fVFhET05FIGluIHdpdGggdHhmbGFncykuCi0JICovCi0JdGltZW91dCA9IEhaOwotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JYWRkX3dhaXRfcXVldWUoJm1pbWlvLT53YWl0cSwgJndhaXQpOwotCi0Jd2hpbGUgKHRpbWVvdXQgJiYgKChtaW1pby0+dHhmbGFncyAmIE1JTUlPX1RYRE9ORSkgPT0gMCkpIHsKLQkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7Ci0JCXJtYigpOwotCX0KLQotCWlmICgobWltaW8tPnR4ZmxhZ3MgJiBNSU1JT19UWERPTkUpID09IDApCi0JCWRldl9kYmcoJm1pbWlvLT5pZGV2LT5kZXYsICJ0eCB0aW1lZCBvdXQuXG4iKTsKLQotCS8qCi0JICogTm93IHRoYXQgY29tcGxldGlvbiBoYXMgYmVlbiBzaWduYWxsZWQsCi0JICogdW5saW5rIHRoZSB1cmIgc28gdGhhdCBpdCBjYW4gYmUgcmVjeWNsZWQuCi0JICovCi0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmbWltaW8tPndhaXRxLCAmd2FpdCk7Ci0JdXNiX3VubGlua191cmIobWltaW8tPm91dC51cmIpOwotCi0JcmV0dXJuIHJzbHQ7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IG1pbWlvX2luaXQodm9pZCkKLXsKLQlpbnQgcnNsdDsKLQotCXJzbHQgPSB1c2JfcmVnaXN0ZXIoJm1pbWlvX2RyaXZlcik7Ci0JaWYgKHJzbHQgIT0gMCkgewotCQllcnIoIiVzOiB1c2JfcmVnaXN0ZXIgZmFpbHVyZTogJWQiLCBfX2Z1bmNfXywgcnNsdCk7Ci0JCXJldHVybiByc2x0OwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjoiCi0JICAgICAgIERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTiAiXG4iKTsKLQlyZXR1cm4gcnNsdDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IG1pbWlvX2V4aXQodm9pZCkKLXsKLQl1c2JfZGVyZWdpc3RlcigmbWltaW9fZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQobWltaW9faW5pdCk7Ci1tb2R1bGVfZXhpdChtaW1pb19leGl0KTsKLQotTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKLU1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY2FnZy5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NhZ2cuYwppbmRleCBkYmQwYTVmLi5mOTUxNGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY2FnZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jYWdnLmMKQEAgLTE4MzIsMTQgKzE4MzIsMTIgQEAKIAogc3RydWN0IGFnZ190aWRfcngqIHpmQWdnUnhFbmFibGVkKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZikKIHsKLSAgICB1MTZfdCAgIGRzdDAsIHNyY1szXSwgYWMsIGFpZCwgZnJhZ09mZjsKLSAgICB1OF90ICAgIHVwOworICAgIHUxNl90ICAgZHN0MCwgc3JjWzNdLCBhaWQ7CiAgICAgdTE2X3QgICBvZmZzZXQgPSAwOwogICAgIHUxNl90ICAgc2VxX25vOwogICAgIHUxNl90IGZyYW1lVHlwZTsKICAgICB1MTZfdCBmcmFtZUN0cmw7CiAgICAgdTE2X3QgZnJhbWVTdWJ0eXBlOwotICAgIHUzMl90IHRjcF9zZXE7CiAgICAgLy9zdHJ1Y3QgYWdnU3RhICphZ2dfc3RhOwogI2lmIFpNX0FHR19GUEdBX1JFT1JERVJJTkcKICAgICBzdHJ1Y3QgYWdnX3RpZF9yeCAqdGlkX3J4OwpAQCAtMTg2NCwxMyArMTg2MiwxNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAjaWZkZWYgWk1fRU5BQkxFX1BFUkZPUk1BTkNFX0VWQUxVQVRJT04KLSAgICB0Y3Bfc2VxID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMjIrMzYpIDw8IDI0OwotICAgIHRjcF9zZXEgKz0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMjIrMzcpIDw8IDE2OwotICAgIHRjcF9zZXEgKz0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMjIrMzgpIDw8IDg7Ci0gICAgdGNwX3NlcSArPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAyMiszOSk7CisgICAgeworICAgICAgICB1MzJfdCB0Y3Bfc2VxOworCisgICAgICAgIHRjcF9zZXEgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAyMiszNikgPDwgMjQ7CisgICAgICAgIHRjcF9zZXEgKz0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMjIrMzcpIDw8IDE2OworICAgICAgICB0Y3Bfc2VxICs9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDIyKzM4KSA8PCA4OworICAgICAgICB0Y3Bfc2VxICs9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDIyKzM5KTsKKyAgICAgICAgWk1fU0VRX0RFQlVHKCJJbiAgICAgICAgICAgICAgICAgICAlNWQsICUxMnVcbiIsIHNlcV9ubywgdGNwX3NlcSk7CisgICAgfQogI2VuZGlmCiAKLSAgICBaTV9TRVFfREVCVUcoIkluICAgICAgICAgICAgICAgICAgICU1ZCwgJTEydVxuIiwgc2VxX25vLCB0Y3Bfc2VxKTsKICAgICBkc3QwID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1Ziwgb2Zmc2V0KzQpOwogCiAgICAgc3JjWzBdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1Ziwgb2Zmc2V0KzEwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jY21kLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY2NtZC5jCmluZGV4IDhkYTI4ZWUuLjNlM2Q5YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jY21kLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NjbWQuYwpAQCAtMTY1OSw3ICsxNjU5LDcgQEAKIAlpZiAoc2V0VmFsdWUpIHsKIAkJLyogd3JpdGUgcmVnaXN0ZXIgZm9yIHNuaWZmZXIgbW9kZSAqLwogCQl6ZkhwU2V0U25pZmZlck1vZGUoZGV2LCAxKTsKLQkJem1fbXNnMF9tbShaTV9MVl8xLCAiZW5hbGJlIHNuaWZmZXIgbW9kZSIpOworCQl6bV9tc2cwX21tKFpNX0xWXzEsICJlbmFibGUgc25pZmZlciBtb2RlIik7CiAJfSBlbHNlIHsKIAkJemZIcFNldFNuaWZmZXJNb2RlKGRldiwgMCk7CiAJCXptX21zZzBfbW0oWk1fTFZfMCwgImRpc2FsYmUgc25pZmZlciBtb2RlIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY2Z1bmMuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jZnVuYy5jCmluZGV4IGQ3YzQ5ZDcuLmUwYTlmMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jZnVuYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jZnVuYy5jCkBAIC0xMTk0LDggKzExOTQsNiBAQAogICAgIHU4X3QgICBpOwogICAgIHUxNl90ICB0ZW1wTWluSW5kZXgsIHRlbXBNaW5WYWx1ZTsKIAotICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLQogICAgIGkgPSAxOwogICAgIHRlbXBNaW5JbmRleCA9IDA7CiAgICAgdGVtcE1pblZhbHVlID0gYXJyYXlbdGVtcE1pbkluZGV4XTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jbW0uYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jbW0uYwppbmRleCBhNmMxYjQxLi40ODRlNzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY21tLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NtbS5jCkBAIC0zNDYsOCArMzQ2LDYgQEAKICAgICB1OF90IHN1cGVyX2ZlYXR1cmU7CiAgICAgdThfdCBvdWlTdXBlckdbNl0gPSB7MHgwMCwweDAzLDB4N2YsMHgwMSwgMHgwMSwgMHgwMH07CiAKLSAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0KICAgICAvKiBHZXQgb2Zmc2V0IG9mIGZpcnN0IGVsZW1lbnQgKi8KICAgICBzdWJUeXBlID0gKHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDApID4+IDQpOwogICAgIGlmICgob2Zmc2V0ID0gemdFbGVtZW50T2Zmc2V0VGFibGVbc3ViVHlwZV0pID09IDB4ZmYpCkBAIC00MTEsOCArNDA5LDYgQEAKICAgICB1OF90IGlkOwogICAgIHU4X3Qgb3VpeHJbNl0gPSB7MHgwMCwweDAzLDB4N2YsMHgwMywgMHgwMSwgMHgwMH07CiAKLSAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0KICAgICAvKiBHZXQgb2Zmc2V0IG9mIGZpcnN0IGVsZW1lbnQgKi8KICAgICBzdWJUeXBlID0gKHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDApID4+IDQpOwogICAgIGlmICgob2Zmc2V0ID0gemdFbGVtZW50T2Zmc2V0VGFibGVbc3ViVHlwZV0pID09IDB4ZmYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY21tc3RhLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY21tc3RhLmMKaW5kZXggYTExZDU1OS4uYzNmZDQ3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NtbXN0YS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jbW1zdGEuYwpAQCAtMjgwOCw3ICsyODA4LDcgQEAKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CiAKICAgICAvKiBjaGVjayBtb2RlIDogQVAvSUJTUyAqLwotICAgIGlmICgod2QtPndsYW5Nb2RlICE9IFpNX01PREVfQVApIHx8ICh3ZC0+d2xhbk1vZGUgIT0gWk1fTU9ERV9JQlNTKSkKKyAgICBpZiAoKHdkLT53bGFuTW9kZSAhPSBaTV9NT0RFX0FQKSAmJiAod2QtPndsYW5Nb2RlICE9IFpNX01PREVfSUJTUykpCiAgICAgewogICAgICAgICB6bV9tc2cwX21tKFpNX0xWXzMsICJJZ25vcmUgcHJvYmUgcmVxIik7CiAgICAgICAgIHJldHVybjsKQEAgLTQ4NDgsOCArNDg0OCw2IEBACiAgICAgdThfdCBNYXhUeFBvd2VyOwogICAgIHU4X3QgTWluVHhQb3dlcjsKIAotICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLQogICAgIC8qIEVsZW1lbnQgSUQgKi8KICAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIFpNX1dMQU5fRUlEX1BPV0VSX0NBUEFCSUxJVFkpOwogCkBAIC01Mjc2LDcgKzUyNzQsNiBAQAogICAgIHU4X3QgICBkYTA7CiAgICAgLy91MTZfdCAgc2FbM107CiAgICAgdTE2X3QgIHJldDsKLSAgICB1MTZfdCAgaTsKICAgICAvL3U4X3QgICAgc2EwOwogCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwpAQCAtNTczOCw4ICs1NzM1LDYgQEAKIAl1OF90ICB3ZWlnaHRPZk40MEJlbG93VGhyID0gMTY7CiAJdThfdCAgd2VpZ2h0T2ZONDBVcFRociAgICA9IDMyOwogCi0gICAgem13X2dldF93bGFuX2RldihkZXYpOwotCiAgICAgaWYoIGlzQk1vZGUgPT0gMCApCiAgICAgICAgIHJldHVybiAoc2lnbmFsU3RyZW5ndGggKyB3ZWlnaHRPZkIpOyAgICAvLyBwdXJlIGIgbW9kZSAsIGRvIG5vdCBhZGQgdGhlIHdlaWdodCB2YWx1ZSBmb3IgdGhpcyBBUCAhCiAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2Nwc21nci5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2Nwc21nci5jCmluZGV4IGNmNzNjYWMuLjk4ZTFmMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jcHNtZ3IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3BzbWdyLmMKQEAgLTM4MSw4ICszODEsNiBAQAogCiBzdGF0aWMgdm9pZCB6ZlBvd2VyU2F2aW5nTWdyRGlzY29ubmVjdE1haW4oemRldl90KiBkZXYpCiB7Ci0gICAgem13X2dldF93bGFuX2RldihkZXYpOwotCiAjaWZkZWYgWk1fRU5BQkxFX0RJU0NPTk5FQ1RfUFMKICAgICBzd2l0Y2god2QtPnN0YS5wc01nci5zdGF0ZSkKICAgICB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3NjYW5tZ3IuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jc2Nhbm1nci5jCmluZGV4IGIzMjgzNWMuLmJlN2Q4ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jc2Nhbm1nci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jc2Nhbm1nci5jCkBAIC0yODksOCArMjg5LDYgQEAKIAogc3RhdGljIHZvaWQgemZTY2FuTWdyRXZlbnRTY2FuQ29tcGxldGVDYih6ZGV2X3QqIGRldikKIHsKLSAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0KICAgICBpZiAoKHpmU3RhSXNDb25uZWN0ZWQoZGV2KSkgJiYgKCF6ZlBvd2VyU2F2aW5nTWdySXNTbGVlcGluZyhkZXYpKSkKICAgICB7CiAgICAgICAgIHpmU2VuZE51bGxEYXRhKGRldiwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3RraXAuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jdGtpcC5jCmluZGV4IGJlNDJmN2EuLmNhMDc0MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jdGtpcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jdGtpcC5jCkBAIC0yNTUsNyArMjU1LDggQEAKICAgICB6Zk1lbW9yeUNvcHkocFNlZWQtPnRhLCB0YSwgNik7CiAgICAgemZNZW1vcnlDb3B5KHBTZWVkLT50aywga2V5LCAxNik7CiAKLSAgICBpdjE2ID0gKmluaXRJdisrOworICAgIGl2MTYgPSAqaW5pdEl2OworICAgIGluaXRJdisrOwogICAgIGl2MTYgKz0gKmluaXRJdjw8ODsKICAgICBpbml0SXYrKzsKIApAQCAtMjY0LDcgKzI2NSw3IEBACiAgICAgZm9yKGk9MDsgaTw0OyBpKyspICAgICAgLy8gaW5pdGl2IGlzIGxpdHRsZSBlbmRpYW4KICAgICB7CiAgICAgICAgIGl2MzIgKz0gKmluaXRJdjw8KGkqOCk7Ci0gICAgICAgICppbml0SXYrKzsKKyAgICAgICAgaW5pdEl2Kys7CiAgICAgfQogCiAgICAgcFNlZWQtPml2MzIgPSBpdjMyKzE7IC8vIEZvcmNlIFJlY2FsY3VsYXRpbmcgb24gVGtpcCBQaGFzZTEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jdHhyeC5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2N0eHJ4LmMKaW5kZXggYWM1NGQ1YS4uNGU3ZjRiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2N0eHJ4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2N0eHJ4LmMKQEAgLTUzNiw4ICs1MzYsNyBAQAogICAgICAgICB6bV9tc2cyX3J4KFpNX0xWXzIsICJpcDE9IiwgZGlwWzFdKTsKIAogICAgICAgICAvL0FSUCByZXF1ZXN0IHRvIDE5Mi4xNjguMS4xNQotICAgICAgICBpZiAoKGFycE9wID09IDB4MDEwMCkgJiYgKGRpcFswXSA9PSAweGE4YzApICYmIChkaXBbMV0gPT0gMHgwZjAxKSk7Ci0gICAgICAgIHsKKyAgICAgICAgaWYgKChhcnBPcCA9PSAweDAxMDApICYmIChkaXBbMF0gPT0gMHhhOGMwKSAmJiAoZGlwWzFdID09IDB4MGYwMSkpIHsKICAgICAgICAgICAgIHptX21zZzBfcngoWk1fTFZfMiwgIkFSUCIpOwogICAgICAgICAgICAgLyogQVJQIHJlc3BvbnNlICovCiAgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgMjAsIDB4MDIwMCk7CkBAIC04ODMsNyArODgyLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB1MTZfdCB6ZlR4U2VuZEV0aCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IHBvcnQsIHUxNl90IGJ1ZlR5cGUsIHUxNl90IGZsYWcpCiB7Ci0gICAgdTE2X3QgZXJyOwogICAgIC8vdTE2X3QgYWRkclRibFNpemU7CiAgICAgLy9zdHJ1Y3QgenNBZGRyVGJsIGFkZHJUYmw7CiAgICAgdTE2X3QgcmVtb3ZlTGVuOwpAQCAtOTA1LDcgKzkwMyw2IEBACiAgICAgdThfdCBxb3NUeXBlLCBrZXlJZHggPSAwOwogICAgIHUxNl90IGZyYWdPZmY7CiAgICAgdTE2X3QgbmV3RmxhZzsKLSAgICBzdHJ1Y3QgenNNaWNWYXIqICBwTWljS2V5OwogICAgIHU4X3QgdGtpcEZyYW1lT2Zmc2V0ID0gMDsKIAogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKQEAgLTE2OTMsOCArMTY5MCw2IEBACiAgICAgdTE2X3QgIHBhY2tldExlbiwga2V5SW5mbywga2V5TGVuLCBrZXlEYXRhTGVuLCBsZW5ndGgsIE9wX0NvZGU7CiAgICAgdTMyX3QgIHJlcGxheUNvdW50ZXJILCByZXBsYXlDb3VudGVyTCwgdmVuZG9ySWQsIFZlbmRvclR5cGU7CiAKLSAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0KICAgICB6bV9kZWJ1Z19tc2cxKCJFQVBPTCBQYWNrZXQgc2l6ZSA9ICIsIHpmd0J1ZkdldFNpemUoZGV2LCBidWYpKTsKIAogICAgIC8qIEVBUE9MIHBhY2tldCB0eXBlICovCkBAIC0yNDM3LDcgKzI0MzIsNiBAQAogICAgICAgICAgICAgICAgICAgICB1MTZfdCBJdk9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgdThfdCBrZXlMZW4gPSA1OwogICAgICAgICAgICAgICAgICAgICB1OF90IGl2WzNdOwotICAgICAgICAgICAgICAgICAgICB1OF90ICp3ZXBLZXk7CiAgICAgICAgICAgICAgICAgICAgIHU4X3Qga2V5SWR4OwogCiAgICAgICAgICAgICAgICAgICAgIEl2T2Zmc2V0ID0gb2Zmc2V0ICsgWk1fU0laRV9PRl9XTEFOX0RBVEFfSEVBREVSOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2xlZG1nci5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2xlZG1nci5jCmluZGV4IDFlMTA0YTkuLmVhZmNlMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9sZWRtZ3IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvbGVkbWdyLmMKQEAgLTE4Nyw3ICsxODcsNiBAQAogCiB2b2lkIHpmTGVkQ3RybFR5cGUyKHpkZXZfdCogZGV2KQogewotICAgIHUzMl90IHRvbiwgdG9mZiwgdG1wLCBwZXJpb2Q7CiAgICAgdTE2X3QgT3BlcmF0ZUxFRDsKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9wdWJfemZpLmggYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvcHViX3pmaS5oCmluZGV4IGI3YjdmNDUuLjUyMDJlNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9wdWJfemZpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL3B1Yl96ZmkuaApAQCAtODE0LDcgKzgxNCw2IEBACiAjZGVmaW5lIFpNX1BFUkZPUk1BTkNFX1JYX0FNU0RVKGRldiwgYnVmLCBsZW4pCiAjZGVmaW5lIFpNX1BFUkZPUk1BTkNFX1JYX0ZMVVNIKGRldikKICNkZWZpbmUgWk1fUEVSRk9STUFOQ0VfUlhfQ0xFQVIoZGV2KQotI2RlZmluZSBaTV9TRVFfREVCVUcKICNkZWZpbmUgWk1fUEVSRk9STUFOQ0VfUlhfUkVPUkRFUihkZXYpCiAjZW5kaWYKIC8qKioqKiBFbmQgb2Ygc2VjdGlvbiAzICoqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL0tjb25maWcKaW5kZXggZjZjYzI2Mi4uZTkxODEzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9LY29uZmlnCkBAIC0xLDYgKzEsOCBAQAogY29uZmlnIE9UVVMKIAl0cmlzdGF0ZSAiQXRoZXJvcyBPVFVTIDgwMi4xMW4gVVNCIHdpcmVsZXNzIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0IgJiYgV0xBTiAmJiBNQUM4MDIxMQorCXNlbGVjdCBXSVJFTEVTU19FWFQKKwlzZWxlY3QgV0VYVF9QUklWCiAJZGVmYXVsdCBOCiAJLS0taGVscC0tLQogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIEF0aGVyb3MgODAyLjExbiBVU0IgaGFyZHdhcmU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9hcGRiZy5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvYXBkYmcuYwppbmRleCAwZWI5M2YxLi5iNTkwMjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9hcGRiZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2FwZGJnLmMKQEAgLTkwLDggKzkwLDI3IEBACiAKICNlbmRpZgogCi1jaGFyIGhleChjaGFyKTsKLXVuc2lnbmVkIGNoYXIgYXNjdG9oZXgoY2hhciAqc3RyKTsKK3N0YXRpYyBjaGFyIGhleChjaGFyIHYpCit7CisJaWYgKGlzZGlnaXQodikpCisJCXJldHVybiB2IC0gJzAnOworCWVsc2UgaWYgKGlzeGRpZ2l0KHYpKQorCQlyZXR1cm4gdG9sb3dlcih2KSAtICdhJyArIDEwOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFzY3RvaGV4KGNoYXIgKnN0cikKK3sKKwl1bnNpZ25lZCBjaGFyIHZhbHVlOworCisJdmFsdWUgPSBoZXgoKnN0cikgJiAweDBmOworCXZhbHVlID0gdmFsdWUgPDwgNDsKKwlzdHIrKzsKKwl2YWx1ZSB8PSBoZXgoKnN0cikgJiAweDBmOworCisJcmV0dXJuIHZhbHVlOworfQogCiBjaGFyICpwcmduYW1lOwogCkBAIC0xMDksMTAgKzEyOCwxMCBAQAogCiBpbnQgcmVhZF9yZWcoaW50IHNvY2ssIHN0cnVjdCBpZnJlcSAqcmVxKQogewotCXN0cnVjdCB6ZGFwX2lvY3RsICp6ZHJlcSA9IDA7CisJc3RydWN0IHpkYXBfaW9jdGwgKnpkcmVxID0gTlVMTDsKIAogCWlmICghc2V0X2lvY3RsKHNvY2ssIHJlcSkpCi0JCQlyZXR1cm4gLTE7CisJCXJldHVybiAtMTsKIAogCS8qCiAJICogemRyZXEgPSAoc3RydWN0IHpkYXBfaW9jdGwgKilyZXEtPmlmcl9kYXRhOwpAQCAtMTI1LDcgKzE0NCw3IEBACiAKIGludCByZWFkX21lbShpbnQgc29jaywgc3RydWN0IGlmcmVxICpyZXEpCiB7Ci0Jc3RydWN0IHpkYXBfaW9jdGwgKnpkcmVxID0gMDsKKwlzdHJ1Y3QgemRhcF9pb2N0bCAqemRyZXEgPSBOVUxMOwogCWludCBpOwogCiAJaWYgKCFzZXRfaW9jdGwoc29jaywgcmVxKSkKQEAgLTM2OCw3ICszODcsNyBAQAogCiAJCXpkcmVxLmFkZHIgPSBhZGRyOwogCQl6ZHJlcS5jbWQgPSBaTV9JT0NUTF9TRVRfUElCU1NfTU9ERTsKLQl9IGVsc2UgCXsKKwl9IGVsc2UgewogCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yIGFjdGlvblxuIik7CiAJCWV4aXQoMSk7CiAJfQpAQCAtMzgwLDI1ICszOTksMyBAQAogCWV4aXQoMCk7CiB9CiAKLXVuc2lnbmVkIGNoYXIgYXNjdG9oZXgoY2hhciAqc3RyKQotewotCXVuc2lnbmVkIGNoYXIgdmFsdWU7Ci0KLQl2YWx1ZSA9IGhleCgqc3RyKSAmIDB4MGY7Ci0JdmFsdWUgPSB2YWx1ZSA8PCA0OwotCXN0cisrOwotCXZhbHVlIHw9IGhleCgqc3RyKSAmIDB4MGY7Ci0KLQlyZXR1cm4gdmFsdWU7Ci19Ci0KLWNoYXIgaGV4KGNoYXIgdikKLXsKLQlpZiAoaXNkaWdpdCh2KSkKLQkJcmV0dXJuIHYgLSAnMCc7Ci0JZWxzZSBpZiAoaXN4ZGlnaXQodikpCi0JCXJldHVybiB0b2xvd2VyKHYpIC0gJ2EnICsgMTA7Ci0JZWxzZQotCQlyZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwbWFpbi5jCmluZGV4IDk0ZjljYmIuLjhkZmY1YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocG1haW4uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBtYWluLmMKQEAgLTEzMTYsNyArMTMxNiw2IEBACiAgICAgICAgIHU4X3QgZXh0T2Zmc2V0LCB1OF90IGluaXRSRikKIHsKICAgICB1MzJfdCBjbWRbOV07Ci0gICAgdTMyX3QgY21kQlszXTsKICAgICB1MTZfdCByZXQ7CiAgICAgdThfdCBvbGRfYmFuZDsKICAgICB1OF90IG5ld19iYW5kOwpAQCAtMzQzNCw3ICszNDMzLDYgQEAKICAgICAvKiBXcml0ZSBQSFkgcmVncyA2NzItNzAzICovCiAgICAgZm9yIChpPTA7IGk8MTI4OyBpKz00KQogICAgIHsKLSAgICAgICAgdTMyX3QgcmVnQWRkciA9IDB4OTgwMCArICg2NzIgKiA0KTsKICAgICAgICAgdTMyX3QgdmFsOwogCiAgICAgICAgIHZhbCA9ICgodTMyX3QpdnBkX2NoYWluMVtpKzNdPDwyNCkgfApAQCAtMzQ4NSw3ICszNDgzLDYgQEAKICAgICAvKiBXcml0ZSBQSFkgcmVncyA2NzItNzAzICsgMHgxMDAwICovCiAgICAgZm9yIChpPTA7IGk8MTI4OyBpKz00KQogICAgIHsKLSAgICAgICAgdTMyX3QgcmVnQWRkciA9IDB4OTgwMCArICg2NzIgKiA0KSArIDB4MTAwMDsKICAgICAgICAgdTMyX3QgdmFsOwogCiAgICAgICAgIHZhbCA9ICgodTMyX3QpdnBkX2NoYWluM1tpKzNdPDwyNCkgfApAQCAtNDU4NCw3ICs0NTgxLDYgQEAKIHZvaWQgemZIcFNldFRUU0lGU1RpbWUoemRldl90KiBkZXYsIHU4X3Qgc2lmc190aW1lKQogewogICAgIHUzMl90IHJlZ192YWx1ZSA9IDA7Ci0gICAgem13X2dldF93bGFuX2RldihkZXYpOwogCiAgICAgc2lmc190aW1lICY9IDB4M2Y7CiAgICAgcmVnX3ZhbHVlID0gMHgxNDQwMGIgfCAoKCh1MzJfdClzaWZzX3RpbWUpPDwyNCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHByZWcuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocHJlZy5jCmluZGV4IGQ5ODk0ZmUuLjE3ODc3N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocHJlZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocHJlZy5jCkBAIC03ODYsNDUgKzc4Niw2IEBACiAJV1QxXzU3NjBfNTgwMCwKIH07CiAKLXN0YXRpYyBSRUdfRE1OX0ZSRVFfQkFORCByZWdEbW41R2h6VHVyYm9GcmVxW10gPSB7Ci0JeyA1MTMwLCA1MjEwLCA1LCAgNiwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogVDFfNTEzMF81MjEwICovCi0JeyA1MjUwLCA1MzMwLCA1LCAgNiwgNDAsIDQwLCBERlNfRkNDMywgTk9fUFNDQU4sIDAsIDB9LAkvKiBUMV81MjUwXzUzMzAgKi8KLQl7IDUzNzAsIDU0OTAsIDUsICA2LCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBUMV81MzcwXzU0OTAgKi8KLQl7IDU1MzAsIDU2NTAsIDUsICA2LCA0MCwgNDAsIERGU19GQ0MzLCBOT19QU0NBTiwgMCwgMH0sCS8qIFQxXzU1MzBfNTY1MCAqLwotCi0JeyA1MTUwLCA1MTkwLCA1LCAgNiwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogVDFfNTE1MF81MTkwICovCi0JeyA1MjMwLCA1MzEwLCA1LCAgNiwgNDAsIDQwLCBERlNfRkNDMywgTk9fUFNDQU4sIDAsIDB9LAkvKiBUMV81MjMwXzUzMTAgKi8KLQl7IDUzNTAsIDU0NzAsIDUsICA2LCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBUMV81MzUwXzU0NzAgKi8KLQl7IDU1MTAsIDU2NzAsIDUsICA2LCA0MCwgNDAsIERGU19GQ0MzLCBOT19QU0NBTiwgMCwgMH0sCS8qIFQxXzU1MTBfNTY3MCAqLwotCi0JeyA1MjAwLCA1MjQwLCAxNywgNiwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogVDFfNTIwMF81MjQwICovCi0JeyA1MjAwLCA1MjQwLCAyMywgNiwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogVDJfNTIwMF81MjQwICovCi0JeyA1MjEwLCA1MjEwLCAxNywgNiwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogVDFfNTIxMF81MjEwICovCi0JeyA1MjEwLCA1MjEwLCAyMywgMCwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogVDJfNTIxMF81MjEwICovCi0KLQl7IDUyODAsIDUyODAsIDIzLCA2LCA0MCwgNDAsIERGU19GQ0MzLCBQU0NBTl9GQ0NfVCwgMCwgMH0sCS8qIFQxXzUyODBfNTI4MCAqLwotCXsgNTI4MCwgNTI4MCwgMjAsIDYsIDQwLCA0MCwgREZTX0ZDQzMsIFBTQ0FOX0ZDQ19ULCAwLCAwfSwJLyogVDJfNTI4MF81MjgwICovCi0JeyA1MjUwLCA1MjUwLCAxNywgMCwgNDAsIDQwLCBERlNfRkNDMywgUFNDQU5fRkNDX1QsIDAsIDB9LAkvKiBUMV81MjUwXzUyNTAgKi8KLQl7IDUyOTAsIDUyOTAsIDIwLCAwLCA0MCwgNDAsIERGU19GQ0MzLCBQU0NBTl9GQ0NfVCwgMCwgMH0sCS8qIFQxXzUyOTBfNTI5MCAqLwotCXsgNTI1MCwgNTI5MCwgMjAsIDAsIDQwLCA0MCwgREZTX0ZDQzMsIFBTQ0FOX0ZDQ19ULCAwLCAwfSwJLyogVDFfNTI1MF81MjkwICovCi0JeyA1MjUwLCA1MjkwLCAyMywgNiwgNDAsIDQwLCBERlNfRkNDMywgUFNDQU5fRkNDX1QsIDAsIDB9LAkvKiBUMl81MjUwXzUyOTAgKi8KLQotCXsgNTU0MCwgNTY2MCwgMjAsIDYsIDQwLCA0MCwgREZTX0ZDQzMsIFBTQ0FOX0ZDQ19ULCAwLCAwfSwJLyogVDFfNTU0MF81NjYwICovCi0JeyA1NzYwLCA1ODAwLCAyMCwgMCwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogVDFfNTc2MF81ODAwICovCi0JeyA1NzYwLCA1ODAwLCAzMCwgNiwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogVDJfNTc2MF81ODAwICovCi0KLQl7IDU3NjUsIDU4MDUsIDMwLCA2LCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBUMV81NzY1XzU4MDUgKi8KLQotCS8qCi0JICogQmVsb3cgYXJlIHRoZSBXV1IgZnJlcXVlbmNpZXMKLQkgKi8KLQotCXsgNTIxMCwgNTI1MCwgMTUsIDAsIDQwLCA0MCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCAwLCAwfSwgLyogV1QxXzUyMTBfNTI1MCAqLwotCXsgNTI5MCwgNTI5MCwgMTgsIDAsIDQwLCA0MCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCAwLCAwfSwgLyogV1QxXzUyOTBfNTI5MCAqLwotCXsgNTU0MCwgNTY2MCwgMjAsIDAsIDQwLCA0MCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCAwLCAwfSwgLyogV1QxXzU1NDBfNTY2MCAqLwotCXsgNTc2MCwgNTgwMCwgMjAsIDAsIDQwLCA0MCwgTk9fREZTLCBQU0NBTl9XV1IsIDAsIDB9LAkvKiBXVDFfNTc2MF81ODAwICovCi19OwotCiAvKgogICogMkdIeiAxMWIgY2hhbm5lbCB0YWdzCiAgKi8KQEAgLTg2NCw0NSArODI1LDYgQEAKIAlXMl8yNDg0XzI0ODQsCiB9OwogCi1zdGF0aWMgUkVHX0RNTl9GUkVRX0JBTkQgcmVnRG1uMkdoekZyZXFbXSA9IHsKLQl7IDIzMTIsIDIzNzIsIDUsICA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIEYxXzIzMTJfMjM3MiAqLwotCXsgMjMxMiwgMjM3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogRjJfMjMxMl8yMzcyICovCi0KLQl7IDI0MTIsIDI0NzIsIDUsICA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIEYxXzI0MTJfMjQ3MiAqLwotCXsgMjQxMiwgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX01LS0EsIDAsIDB9LAkvKiBGMl8yNDEyXzI0NzIgKi8KLQl7IDI0MTIsIDI0NzIsIDMwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIEYzXzI0MTJfMjQ3MiAqLwotCi0JeyAyNDEyLCAyNDYyLCAyNywgNiwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBGMV8yNDEyXzI0NjIgKi8KLQl7IDI0MTIsIDI0NjIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBQU0NBTl9NS0tBLCAwLCAwfSwJLyogRjJfMjQxMl8yNDYyICovCi0JeyAyNDMyLCAyNDQyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBGMV8yNDMyXzI0NDIgKi8KLQotCXsgMjQ1NywgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogRjFfMjQ1N18yNDcyICovCi0KLQl7IDI0NjcsIDI0NzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EsIDAsIDB9LCAvKiBGMV8yNDY3XzI0NzIgKi8KLQotCXsgMjQ4NCwgMjQ4NCwgNSwgIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogRjFfMjQ4NF8yNDg0ICovCi0JeyAyNDg0LCAyNDg0LCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fTUtLQSB8IFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTIsIDAsIDB9LAkvKiBGMl8yNDg0XzI0ODQgKi8KLQotCXsgMjUxMiwgMjczMiwgNSwgIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogRjFfMjUxMl8yNzMyICovCi0KLQkvKgotCSAqIFdXUiBoYXZlIHBvd2VycyBvcGVuZWQgdXAgdG8gMjBkQm0uICBMaW1pdHMgc2hvdWxkIG9mdGVuIGNvbWUgZnJvbSBDVEwvTWF4IHBvd2VycwotCSAqLwotCi0JeyAyMzEyLCAyMzcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBXMV8yMzEyXzIzNzIgKi8KLQl7IDI0MTIsIDI0MTIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIFcxXzI0MTJfMjQxMiAqLwotCXsgMjQxNywgMjQzMiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogVzFfMjQxN18yNDMyICovCi0JeyAyNDM3LCAyNDQyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBXMV8yNDM3XzI0NDIgKi8KLQl7IDI0NDcsIDI0NTcsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIFcxXzI0NDdfMjQ1NyAqLwotCXsgMjQ2MiwgMjQ2MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogVzFfMjQ2Ml8yNDYyICovCi0JeyAyNDY3LCAyNDY3LCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fV1dSIHwgSVNfRUNNX0NIQU4sIDAsIDB9LCAvKiBXMV8yNDY3XzI0NjcgKi8KLQl7IDI0NjcsIDI0NjcsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiB8IElTX0VDTV9DSEFOLCAwLCAwfSwJLyogVzJfMjQ2N18yNDY3ICovCi0JeyAyNDcyLCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fV1dSIHwgSVNfRUNNX0NIQU4sIDAsIDB9LCAvKiBXMV8yNDcyXzI0NzIgKi8KLQl7IDI0NzIsIDI0NzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiB8IElTX0VDTV9DSEFOLCAwLCAwfSwJLyogVzJfMjQ3Ml8yNDcyICovCi0JeyAyNDg0LCAyNDg0LCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fV1dSIHwgSVNfRUNNX0NIQU4sIDAsIDB9LCAvKiBXMV8yNDg0XzI0ODQgKi8KLQl7IDI0ODQsIDI0ODQsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiB8IElTX0VDTV9DSEFOLCAwLCAwfSwJLyogVzJfMjQ4NF8yNDg0ICovCi19OwotCiAKIC8qCiAgKiAyR0h6IDExZyBjaGFubmVsIHRhZ3MKQEAgLTk4NCwxNiArOTA2LDYgQEAKIAlUMV8yNTEyXzI3MzIKIH07CiAKLXN0YXRpYyBSRUdfRE1OX0ZSRVFfQkFORCByZWdEbW4yR2h6MTFnVHVyYm9GcmVxW10gPSB7Ci0JeyAyMzEyLCAyMzcyLCA1LCAgNiwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwgIC8qIFQxXzIzMTJfMjM3MiAqLwotCXsgMjQzNywgMjQzNywgNSwgIDYsIDQwLCA0MCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sICAvKiBUMV8yNDM3XzI0MzcgKi8KLQl7IDI0MzcsIDI0MzcsIDIwLCA2LCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LCAgLyogVDJfMjQzN18yNDM3ICovCi0JeyAyNDM3LCAyNDM3LCAxOCwgNiwgNDAsIDQwLCBOT19ERlMsIFBTQ0FOX1dXUiwgMCwgMH0sIC8qIFQzXzI0MzdfMjQzNyAqLwotCXsgMjUxMiwgMjczMiwgNSwgIDYsIDQwLCA0MCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sICAvKiBUMV8yNTEyXzI3MzIgKi8KLX07Ci0KLQotCiAvKgogICogMkdIeiAxMW4gZnJlcXVlbmN5IHRhZ3MKICAqLwpAQCAtMTAwNSwxNSArOTE3LDYgQEAKICAgICBOR19ERU1PX0FMTF9DSEFOTkVMUywKIH07CiAKLXN0YXRpYyBSRUdfRE1OX0ZSRVFfQkFORCByZWdEbW4yR2h6MTFuZ0ZyZXFbXSA9IHsKLSAgICB7IDI0MjIsIDI0NTIsIDIwLCAwLCA0MCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sICAgIC8qIE5HMV8yNDIyXzI0NTIgKi8KLSAgICB7IDI0MjIsIDI0NTIsIDI3LCAwLCA0MCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sICAgIC8qIE5HMl8yNDIyXzI0NTIgKi8KLSAgICB7IDI0MjIsIDI0NTIsIDMwLCAwLCA0MCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sICAgIC8qIE5HM18yNDIyXzI0NTIgKi8KLQotCXsgMjMxMiwgMjczMiwgMjcsIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwgICAgLyogTkdfREVNT19BTExfQ0hBTk5FTFMgKi8KLX07Ci0KLQogLyoKICAqIDVHSHogMTFuIGZyZXF1ZW5jeSB0YWdzCiAgKi8KQEAgLTEwNTAsNDIgKzk1Myw2IEBACiAgICAgTkFfREVNT19BTExfQ0hBTk5FTFMsCiB9OwogCi1zdGF0aWMgUkVHX0RNTl9GUkVRX0JBTkQgcmVnRG1uNUdoejExbmFGcmVxW10gPSB7Ci0gICAgLyoKLSAgICAgKiBUb0RvOiBUaGlzIHRhYmxlIG5lZWRzIHRvIGJlIGNvbXBsZXRlbHkgcG9wdWxhdGVkIHdpdGggNUdIeiAxMW4gcHJvcGVydGllcwotICAgICAqLwotCXsgNTE5MCwgNTIzMCwgMTUsICAwLCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkgICAgLyogTkExXzUxOTBfNTIzMCAqLwotCXsgNTE5MCwgNTIzMCwgMTcsICA2LCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBOQTJfNTE5MF81MjMwICovCi0JeyA1MTkwLCA1MjMwLCAxOCwgIDYsIDQwLCA0MCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCSAgICAvKiBOQTNfNTE5MF81MjMwICovCi0JeyA1MTkwLCA1MjMwLCAyMCwgIDAsIDQwLCA0MCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIE5BNF81MTkwXzUyMzAgKi8KLQl7IDUxOTAsIDUyMzAsIDIzLCAgNiwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJICAgIC8qIE5BNV81MTkwXzUyMzAgKi8KLQotCXsgNTI3MCwgNTI3MCwgMjMsICA2LCA0MCwgNDAsIERGU19GQ0MzfERGU19FVFNJLCBOT19QU0NBTiwgMCwgMX0sICAvKiBOQTFfNTI3MF81MjcwICovCi0KLQl7IDUyNzAsIDUzMTAsIDE4LCAgNiwgNDAsIDQwLCBERlNfRkNDM3xERlNfRVRTSSwgTk9fUFNDQU4sIDAsIDF9LCAgLyogTkExXzUyNzBfNTMxMCAqLwotCXsgNTI3MCwgNTMxMCwgMjAsICAwLCA0MCwgNDAsIERGU19GQ0MzfERGU19FVFNJfERGU19NS0s0LCBOT19QU0NBTiwgMCwgMX0sICAvKiBOQTJfNTI3MF81MzEwICovCi0JeyA1MjcwLCA1MzEwLCAyMywgIDYsIDQwLCA0MCwgREZTX0ZDQzN8REZTX0VUU0ksIE5PX1BTQ0FOLCAwLCAxfSwgIC8qIE5BM181MjcwXzUzMTAgKi8KLQl7IDUyNzAsIDUzMTAsIDMwLCAgNiwgNDAsIDQwLCBERlNfRkNDM3xERlNfRVRTSSwgTk9fUFNDQU4sIDAsIDF9LCAgLyogTkE0XzUyNzBfNTMxMCAqLwotCi0JeyA1MzEwLCA1MzEwLCAxNywgIDYsIDQwLCA0MCwgREZTX0ZDQzN8REZTX0VUU0ksIE5PX1BTQ0FOLCAwLCAxfSwgIC8qIE5BMV81MzEwXzUzMTAgKi8KLQotCXsgNTUxMCwgNTYzMCwgMzAsICA2LCA0MCwgNDAsIERGU19GQ0MzfERGU19FVFNJLCBOT19QU0NBTiwgMCwgMX0sICAvKiBOQTFfNTUxMF81NjMwICovCi0KLQl7IDU1MTAsIDU2NzAsIDIwLCAgNiwgNDAsIDQwLCBERlNfRkNDM3xERlNfRVRTSXxERlNfTUtLNCwgTk9fUFNDQU4sIDAsIDF9LCAgLyogTkExXzU1MTBfNTY3MCAqLwotCXsgNTUxMCwgNTY3MCwgMjcsICAwLCA0MCwgNDAsIERGU19GQ0MzfERGU19FVFNJLCBOT19QU0NBTiwgMCwgMX0sICAvKiBOQTJfNTUxMF81NjcwICovCi0JeyA1NTEwLCA1NjcwLCAzMCwgIDYsIDQwLCA0MCwgREZTX0ZDQzMsIE5PX1BTQ0FOLCAwLCAxfSwgICAvKiBOQTNfNTUxMF81NjcwICovCi0KLQl7IDU3NTUsIDU3OTUsIDE3LCAgMCwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJICAgIC8qIE5BMV81NzU1XzU3OTUgKi8KLQl7IDU3NTUsIDU3OTUsIDIwLCAgNiwgNDAsIDQwLCBERlNfRVRTSSwgTk9fUFNDQU4sIDAsIDB9LAkgICAgLyogTkEyXzU3NTVfNTc5NSAqLwotCXsgNTc1NSwgNTc5NSwgMjMsICAwLCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkgICAgLyogTkEzXzU3NTVfNTc5NSAqLwotCXsgNTc1NSwgNTc5NSwgMzAsICAwLCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBOQTRfNTc1NV81Nzk1ICovCi0JeyA1NzU1LCA1Nzk1LCAzMCwgIDYsIDQwLCA0MCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCSAgICAvKiBOQTVfNTc1NV81Nzk1ICovCi0KLQl7IDU3OTUsIDU3OTUsIDMwLCAgNiwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJICAgIC8qIE5BMV81Nzk1XzU3OTUgKi8KLQotICAgIHsgNDkyMCwgNjEwMCwgMzAsICA2LCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBOQV9ERU1PX0FMTF9DSEFOTkVMUyAqLwotfTsKLQogdHlwZWRlZiBzdHJ1Y3QgcmVnRG9tYWluIHsKIAl1MTZfdCByZWdEbW5FbnVtOwkvKiB2YWx1ZSBmcm9tIEVudW1SZCB0YWJsZSAqLwogCXU4X3QgY29uZm9ybWFuY2VUZXN0TGltaXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBydy5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwcncuYwppbmRleCBkOWZhZDQ3Li40ZGJkNWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBydy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocHJ3LmMKQEAgLTI4Miw3ICsyODIsNiBAQAogICAgIGVsc2UgaWYgKHNyYyA9PSBaTV9PSURfRkxBU0hfUkVBRCkKICAgICB7CiAgICAgICAgIHUzMl90ICBkYXRhbGVuOwotICAgICAgICB1MTZfdCBpOwogCiAgICAgICAgIGRhdGFsZW4gPSAocnNwWzBdICYgMjU1KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvaW9jdGwuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2lvY3RsLmMKaW5kZXggNjgwOGU2OS4uOGM0N2IxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvaW9jdGwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9pb2N0bC5jCkBAIC04NjYsMTUgKzg2NiwxNSBAQAogCWNoYXIgKmN1cnJlbnRfZXYgPSBleHRyYTsKIAljaGFyICplbmRfYnVmOwogCWludCBpOwotCS8qIHN0cnVjdCB6c0Jzc0xpc3QgQnNzTGlzdDsgKi8KLQlzdHJ1Y3QgenNCc3NMaXN0VjEgKnBCc3NMaXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHpzQnNzTGlzdFYxKSwKLQkJCQkJCQkJR0ZQX0tFUk5FTCk7CiAJLyogQnNzTGlzdCA9IHdkLT5zdGEucEJzc0xpc3Q7ICovCiAJLyogem13X2dldF93bGFuX2RldihkZXYpOyAqLwogCiAJaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQogCQlyZXR1cm4gMDsKIAorCS8qIHN0cnVjdCB6c0Jzc0xpc3QgQnNzTGlzdDsgKi8KKwlzdHJ1Y3QgenNCc3NMaXN0VjEgKnBCc3NMaXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHpzQnNzTGlzdFYxKSwKKwkJCQkJCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKGRhdGEtPmxlbmd0aCA9PSAwKQogCQllbmRfYnVmID0gZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBOwogCWVsc2UKQEAgLTkzMCw3ICs5MzAsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChlc3NpZC0+ZmxhZ3MgPT0gMSkgewotCQlpZiAoZXNzaWQtPmxlbmd0aCA+IChJV19FU1NJRF9NQVhfU0laRSArIDEpKQorCQlpZiAoZXNzaWQtPmxlbmd0aCA+IElXX0VTU0lEX01BWF9TSVpFKQogCQkJcmV0dXJuIC1FMkJJRzsKIAogCQlpZiAoY29weV9mcm9tX3VzZXIoJkVzc2lkQnVmLCBlc3NpZC0+cG9pbnRlciwgZXNzaWQtPmxlbmd0aCkpCkBAIC0yMjI3LDcgKzIyMjcsOCBAQAogCWNhc2UgWkRfQ01EX1NDQU5fUkVROgogCQlwcmludGsoS0VSTl9FUlIgInVzYmRydl93cGFfaW9jdGw6IFpEX0NNRF9TQ0FOX1JFUVxuIik7CiAJCWJyZWFrOwotCWNhc2UgWkRfQ01EX1NFVF9HRU5FUklDX0VMRU1FTlQ6CisJY2FzZSBaRF9DTURfU0VUX0dFTkVSSUNfRUxFTUVOVDogeworCQl1OF90IGxlbiwgKndwYWllOwogCQlwcmludGsoS0VSTl9FUlIgInVzYmRydl93cGFfaW9jdGw6IgogCQkJCQkiIFpEX0NNRF9TRVRfR0VORVJJQ19FTEVNRU5UXG4iKTsKIApAQCAtMjI1MCw4ICsyMjUxLDggQEAKIAkJLyogemZpV2xhblNldFdwYUllKGRldiwgemRwYXJtLT51LmdlbmVyaWNfZWxlbS5kYXRhLAogCQkqIHpkcGFybS0+dS5nZW5lcmljX2VsZW0ubGVuKTsKIAkJKi8KLQkJdThfdCBsZW4gPSB6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmxlbjsKLQkJdThfdCAqd3BhaWUgPSAodThfdCAqKXpkcGFybS0+dS5nZW5lcmljX2VsZW0uZGF0YTsKKwkJbGVuID0gemRwYXJtLT51LmdlbmVyaWNfZWxlbS5sZW47CisJCXdwYWllID0gemRwYXJtLT51LmdlbmVyaWNfZWxlbS5kYXRhOwogCiAJCXByaW50ayhLRVJOX0VSUiAid2QtPmFwLndwYUxlbiA6ICUgZFxuIiwgbGVuKTsKIApAQCAtMjI3Myw2ICsyMjc0LDcgQEAKIAkJKiAjZW5kaWYKIAkJKi8KIAkJYnJlYWs7CisJfQogCiAJLyogI2lmZGVmIFpNX0hPU1RBUERfU1VQUE9SVCAqLwogCWNhc2UgWkRfQ01EX0dFVF9UU0M6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy91c2JkcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3VzYmRydi5jCmluZGV4IGIwYWRiYzguLjVlNmExMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3VzYmRydi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3VzYmRydi5jCkBAIC04MjksNyArODI5LDcgQEAKIHsKICAgICAvKiBBbGxvY2F0ZSBuZXQgZGV2aWNlIHN0cnVjdHVyZSAqLwogICAgIHZhcFt2YXBJZF0uZGV2ID0gYWxsb2NfZXRoZXJkZXYoMCk7Ci0gICAgcHJpbnRrKCJSZWdpc3RlciB2YXAgZGV2PSV4XG4iLCAodTMyX3QpdmFwW3ZhcElkXS5kZXYpOworICAgIHByaW50aygiUmVnaXN0ZXIgdmFwIGRldj0lcFxuIiwgdmFwW3ZhcElkXS5kZXYpOwogCiAgICAgaWYodmFwW3ZhcElkXS5kZXYgPT0gTlVMTCkgewogICAgICAgICBwcmludGsoImFsbG9jX2V0aGVyZGV2IGZhaWxcbiIpOwpAQCAtODgzLDcgKzg4Myw3IEBACiAgICAgcHJpbnRrKCJVbnJlZ2lzdGVyIFZBUCBkZXYgOiAlc1xuIiwgdmFwW3ZhcElkXS5kZXYtPm5hbWUpOwogCiAgICAgaWYodmFwW3ZhcElkXS5kZXYgIT0gTlVMTCkgewotICAgICAgICBwcmludGsoIlVucmVnaXN0ZXIgdmFwIGRldj0leFxuIiwgKHUzMl90KXZhcFt2YXBJZF0uZGV2KTsKKyAgICAgICAgcHJpbnRrKCJVbnJlZ2lzdGVyIHZhcCBkZXY9JXBcbiIsIHZhcFt2YXBJZF0uZGV2KTsKICAgICAgICAgLy8KICAgICAgICAgLy91bnJlZ2lzdGVyX25ldGRldmljZSh3ZHNbd2RzSWRdLmRldik7CiAgICAgICAgIHVucmVnaXN0ZXJfbmV0ZGV2KHZhcFt2YXBJZF0uZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3dyYXBfcGt0LmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy93cmFwX3BrdC5jCmluZGV4IDc1YmI5NTIuLmEyZjVjYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3dyYXBfcGt0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvd3JhcF9wa3QuYwpAQCAtNTgsNyArNTgsNyBAQAogCQkJc2tiMSA9IHNrYl9jb3B5KGJ1ZiwgR0ZQX0FUT01JQyk7CiAJCQlpZiAoc2tiMSAhPSBOVUxMKSB7CiAJCQkJc2tiMS0+ZGV2ID0gZGV2OwotCQkJCXNrYjEtPm1hY19oZWFkZXIgPSBza2IxLT5kYXRhOworCQkJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYjEpOwogCQkJCXNrYjEtPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiAJCQkJc2tiMS0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOwogCQkJCS8qIEVUSF9QXzgwMjExX1JBVyAqLwpAQCAtODUsMTMgKzg1LDcgQEAKIAkvKiBuZXdfYnVmID0gZGV2X2FsbG9jX3NrYigyMDQ4KTsJKi8KIAluZXdfYnVmID0gZGV2X2FsbG9jX3NrYihidWYtPmxlbik7CiAKLSNpZmRlZiBORVRfU0tCVUZGX0RBVEFfVVNFU19PRkZTRVQKLQluZXdfYnVmLT50YWlsID0gMDsKLQluZXdfYnVmLT5sZW4gPSAwOwotI2Vsc2UKLQluZXdfYnVmLT50YWlsID0gbmV3X2J1Zi0+ZGF0YTsKLQluZXdfYnVmLT5sZW4gPSAwOwotI2VuZGlmCisJc2tiX3Jlc2V0X3RhaWxfcG9pbnRlcihuZXdfYnVmKTsKIAogCXNrYl9wdXQobmV3X2J1ZiwgYnVmLT5sZW4pOwogCW1lbWNweShuZXdfYnVmLT5kYXRhLCBidWYtPmRhdGEsIGJ1Zi0+bGVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3pkdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy96ZHVzYi5jCmluZGV4IDJhNmQ5MzcuLjRjZDliN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3pkdXNiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvemR1c2IuYwpAQCAtNDUsNyArNDUsNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWVbXSA9ICJPdHVzIjsKIAogLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHpkMTIyMV9pZHMgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgemQxMjIxX2lkc1tdID0gewogCXsgVVNCX0RFVklDRShWRU5ET1JfQVRIUiwgUFJPRFVDVF9BUjkxNzApIH0sCiAgICAgICAgIHsgVVNCX0RFVklDRShWRU5ET1JfRExJTkssIFBST0RVQ1RfRFdBMTYwQSkgfSwKIAl7IFVTQl9ERVZJQ0UoVkVORE9SX05FVEdFQVIsIFBST0RVQ1RfV05EQTMxMDApIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcDlhdXRoL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcDlhdXRoL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxYzY2ZDIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1jb25maWcgUExBTjlBVVRICi0JdHJpc3RhdGUgIlBsYW4gOSBzdHlsZSBjYXBhYmlsaXR5IGRldmljZSBpbXBsZW1lbnRhdGlvbiIKLQlkZWZhdWx0IG4KLQlkZXBlbmRzIG9uIENSWVBUTwotCWhlbHAKLQkgIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlIFBsYW4gOSBzdHlsZSBjYXBhYmlsaXR5IGRldmljZS4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlCi0JICBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcDlhdXRoLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9wOWF1dGgvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlYmY2ZmYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLW9iai0kKENPTkZJR19QTEFOOUFVVEgpCSs9IHA5YXV0aC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcDlhdXRoL3A5YXV0aC5jIGIvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9wOWF1dGguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI3OTYyNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcDlhdXRoL3A5YXV0aC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDA4ICswLDAgQEAKLS8qCi0gKiBQbGFuIDkgc3R5bGUgY2FwYWJpbGl0eSBkZXZpY2UgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBMaW51eCBLZXJuZWwKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCwgMjAwOSBBc2h3aW4gR2FudGkgPGFzaHdpbi5nYW50aUBnbWFpbC5jb20+Ci0gKgotICogUmVsZWFzZWQgdW5kZXIgdGhlIEdQTHYyCi0gKgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mY250bC5oPgotI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+Ci0jaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9jcmVkLmg+Ci0KLSNpZm5kZWYgQ0FQX01BSk9SCi0jZGVmaW5lIENBUF9NQUpPUiAwCi0jZW5kaWYKLQotI2lmbmRlZiBDQVBfTlJfREVWUwotI2RlZmluZSBDQVBfTlJfREVWUyAyCQkvKiBjYXBoYXNoIGFuZCBjYXB1c2UgKi8KLSNlbmRpZgotCi0jaWZuZGVmIENBUF9OT0RFX1NJWkUKLSNkZWZpbmUgQ0FQX05PREVfU0laRSAyMAotI2VuZGlmCi0KLSNkZWZpbmUgTUFYX0RJR0VTVF9TSVpFICAyMAotCi1zdHJ1Y3QgY2FwX25vZGUgewotCWNoYXIgZGF0YVtDQVBfTk9ERV9TSVpFXTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci19OwotCi1zdHJ1Y3QgY2FwX2RldiB7Ci0Jc3RydWN0IGNhcF9ub2RlICpoZWFkOwotCWludCBub2RlX3NpemU7Ci0JdW5zaWduZWQgbG9uZyBzaXplOwotCXN0cnVjdCBzZW1hcGhvcmUgc2VtOwotCXN0cnVjdCBjZGV2IGNkZXY7Ci19OwotCi1zdGF0aWMgaW50IGNhcF9tYWpvciA9IENBUF9NQUpPUjsKLXN0YXRpYyBpbnQgY2FwX21pbm9yOwotc3RhdGljIGludCBjYXBfbnJfZGV2cyA9IENBUF9OUl9ERVZTOwotc3RhdGljIGludCBjYXBfbm9kZV9zaXplID0gQ0FQX05PREVfU0laRTsKLQotbW9kdWxlX3BhcmFtKGNhcF9tYWpvciwgaW50LCBTX0lSVUdPKTsKLW1vZHVsZV9wYXJhbShjYXBfbWlub3IsIGludCwgU19JUlVHTyk7Ci1tb2R1bGVfcGFyYW0oY2FwX25yX2RldnMsIGludCwgU19JUlVHTyk7Ci0KLU1PRFVMRV9BVVRIT1IoIkFzaHdpbiBHYW50aSIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1zdGF0aWMgc3RydWN0IGNhcF9kZXYgKmNhcF9kZXZpY2VzOwotCi1zdGF0aWMgdm9pZCBoZXhkdW1wKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKLXsKLQl3aGlsZSAobGVuLS0pCi0JCXByaW50aygiJTAyeCIsICpidWYrKyk7Ci0JcHJpbnRrKCJcbiIpOwotfQotCi1zdGF0aWMgY2hhciAqY2FwX2hhc2goY2hhciAqcGxhaW5fdGV4dCwgdW5zaWduZWQgaW50IHBsYWluX3RleHRfc2l6ZSwKLQkJICAgICAgY2hhciAqa2V5LCB1bnNpZ25lZCBpbnQga2V5X3NpemUpCi17Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0IHNnOwotCWNoYXIgKnJlc3VsdDsKLQlzdHJ1Y3QgY3J5cHRvX2hhc2ggKnRmbTsKLQlzdHJ1Y3QgaGFzaF9kZXNjIGRlc2M7Ci0JaW50IHJldDsKLQotCXRmbSA9IGNyeXB0b19hbGxvY19oYXNoKCJobWFjKHNoYTEpIiwgMCwgQ1JZUFRPX0FMR19BU1lOQyk7Ci0JaWYgKElTX0VSUih0Zm0pKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImZhaWxlZCB0byBsb2FkIHRyYW5zZm9ybSBmb3IgaG1hYyhzaGExKTogJWxkXG4iLAotCQkgICAgICAgUFRSX0VSUih0Zm0pKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JZGVzYy50Zm0gPSB0Zm07Ci0JZGVzYy5mbGFncyA9IDA7Ci0KLQlyZXN1bHQgPSBremFsbG9jKE1BWF9ESUdFU1RfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyZXN1bHQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJvdXQgb2YgbWVtb3J5IVxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXNnX3NldF9idWYoJnNnLCBwbGFpbl90ZXh0LCBwbGFpbl90ZXh0X3NpemUpOwotCi0JcmV0ID0gY3J5cHRvX2hhc2hfc2V0a2V5KHRmbSwga2V5LCBrZXlfc2l6ZSk7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgInNldGtleSgpIGZhaWxlZCByZXQ9JWRcbiIsIHJldCk7Ci0JCWtmcmVlKHJlc3VsdCk7Ci0JCXJlc3VsdCA9IE5VTEw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXJldCA9IGNyeXB0b19oYXNoX2RpZ2VzdCgmZGVzYywgJnNnLCBwbGFpbl90ZXh0X3NpemUsIHJlc3VsdCk7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgImRpZ2VzdCAoKSBmYWlsZWQgcmV0PSVkXG4iLCByZXQpOwotCQlrZnJlZShyZXN1bHQpOwotCQlyZXN1bHQgPSBOVUxMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiY3J5cHRvIGhhc2ggZGlnZXN0IHNpemUgJWRcbiIsCi0JICAgICAgIGNyeXB0b19oYXNoX2RpZ2VzdHNpemUodGZtKSk7Ci0JaGV4ZHVtcChyZXN1bHQsIE1BWF9ESUdFU1RfU0laRSk7Ci0KLW91dDoKLQljcnlwdG9fZnJlZV9oYXNoKHRmbSk7Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGludCBjYXBfdHJpbShzdHJ1Y3QgY2FwX2RldiAqZGV2KQotewotCXN0cnVjdCBjYXBfbm9kZSAqdG1wOwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKnE7Ci0JaWYgKGRldi0+aGVhZCAhPSBOVUxMKSB7Ci0JCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHEsICYoZGV2LT5oZWFkLT5saXN0KSkgewotCQkJdG1wID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBjYXBfbm9kZSwgbGlzdCk7Ci0JCQlsaXN0X2RlbChwb3MpOwotCQkJa2ZyZWUodG1wKTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjYXBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlzdHJ1Y3QgY2FwX2RldiAqZGV2OwotCWRldiA9IGNvbnRhaW5lcl9vZihpbm9kZS0+aV9jZGV2LCBzdHJ1Y3QgY2FwX2RldiwgY2Rldik7Ci0JZmlscC0+cHJpdmF0ZV9kYXRhID0gZGV2OwotCi0JLyogdHJpbSB0byAwIHRoZSBsZW5ndGggb2YgdGhlIGRldmljZSBpZiBvcGVuIHdhcyB3cml0ZS1vbmx5ICovCi0JaWYgKChmaWxwLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1dST05MWSkgewotCQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZkZXYtPnNlbSkpCi0JCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCQljYXBfdHJpbShkZXYpOwotCQl1cCgmZGV2LT5zZW0pOwotCX0KLQkvKiBpbml0aWFsaXNlIHRoZSBoZWFkIGlmIGl0IGlzIE5VTEwgKi8KLQlpZiAoZGV2LT5oZWFkID09IE5VTEwpIHsKLQkJZGV2LT5oZWFkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNhcF9ub2RlKSwgR0ZQX0tFUk5FTCk7Ci0JCUlOSVRfTElTVF9IRUFEKCYoZGV2LT5oZWFkLT5saXN0KSk7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGNhcF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3NpemVfdCBjYXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmZfcG9zKQotewotCXN0cnVjdCBjYXBfbm9kZSAqbm9kZV9wdHIsICp0bXA7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zOwotCXN0cnVjdCBjYXBfZGV2ICpkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0Jc3NpemVfdCByZXR2YWwgPSAtRU5PTUVNOwotCXN0cnVjdCBjcmVkICpuZXc7Ci0JaW50IGxlbiwgdGFyZ2V0X2ludCwgc291cmNlX2ludCwgZmxhZyA9IDA7Ci0JY2hhciAqdXNlcl9idWYsICp1c2VyX2J1Zl9ydW5uaW5nLCAqc291cmNlX3VzZXIsICp0YXJnZXRfdXNlciwKLQkgICAgKnJhbmRfc3RyLCAqaGFzaF9zdHIsICpyZXN1bHQ7Ci0KLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZkZXYtPnNlbSkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0KLQl1c2VyX2J1Zl9ydW5uaW5nID0gTlVMTDsKLQloYXNoX3N0ciA9IE5VTEw7Ci0Jbm9kZV9wdHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2FwX25vZGUpLCBHRlBfS0VSTkVMKTsKLQl1c2VyX2J1ZiA9IGt6YWxsb2MoY291bnQrMSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFub2RlX3B0ciB8fCAhdXNlcl9idWYpCi0JCWdvdG8gb3V0OwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKHVzZXJfYnVmLCBidWYsIGNvdW50KSkgewotCQlyZXR2YWwgPSAtRUZBVUxUOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKgotCSAqIElmIHRoZSBtaW5vciBudW1iZXIgaXMgMCAoIC9kZXYvY2FwaGFzaCApIHRoZW4gc2ltcGx5IGFkZCB0aGUKLQkgKiBoYXNoZWQgY2FwYWJpbGl0eSBzdXBwbGllZCBieSB0aGUgdXNlciB0byB0aGUgbGlzdCBvZiBoYXNoZXMKLQkgKi8KLQlpZiAoMCA9PSBpbWlub3IoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUpKSB7Ci0JCWlmIChjb3VudCA+IENBUF9OT0RFX1NJWkUpIHsKLQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlwcmludGsoS0VSTl9JTkZPICJDYXBhYmlsaXR5IGJlaW5nIHdyaXR0ZW4gdG8gL2Rldi9jYXBoYXNoIDogXG4iKTsKLQkJaGV4ZHVtcCh1c2VyX2J1ZiwgY291bnQpOwotCQltZW1jcHkobm9kZV9wdHItPmRhdGEsIHVzZXJfYnVmLCBjb3VudCk7Ci0JCWxpc3RfYWRkKCYobm9kZV9wdHItPmxpc3QpLCAmKGRldi0+aGVhZC0+bGlzdCkpOwotCQlub2RlX3B0ciA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJY2hhciAqdG1wdTsKLQkJaWYgKCFjYXBfZGV2aWNlc1swXS5oZWFkIHx8Ci0JCQkJbGlzdF9lbXB0eSgmKGNhcF9kZXZpY2VzWzBdLmhlYWQtPmxpc3QpKSkgewotCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCS8qCi0JCSAqIGJyZWFrIHRoZSBzdXBwbGllZCBzdHJpbmcgaW50byB0b2tlbnMgd2l0aCBAIGFzIHRoZQotCQkgKiBkZWxpbWl0ZXIgSWYgdGhlIHN0cmluZyBpcyAidXNlcjFAdXNlcjJAcmFuZG9tc3RyaW5nIiB3ZQotCQkgKiBuZWVkIHRvIHNwbGl0IGl0IGFuZCBoYXNoICd1c2VyMUB1c2VyMicgdXNpbmcgJ3JhbmRvbXN0cmluZycKLQkJICogYXMgdGhlIGtleS4KLQkJICovCi0JCXRtcHUgPSB1c2VyX2J1Zl9ydW5uaW5nID0ga3N0cmR1cCh1c2VyX2J1ZiwgR0ZQX0tFUk5FTCk7Ci0JCXNvdXJjZV91c2VyID0gc3Ryc2VwKCZ0bXB1LCAiQCIpOwotCQl0YXJnZXRfdXNlciA9IHN0cnNlcCgmdG1wdSwgIkAiKTsKLQkJcmFuZF9zdHIgPSB0bXB1OwotCQlpZiAoIXNvdXJjZV91c2VyIHx8ICF0YXJnZXRfdXNlciB8fCAhcmFuZF9zdHIpIHsKLQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCS8qIGhhc2ggdGhlIHN0cmluZyB1c2VyMUB1c2VyMiB3aXRoIHJhbmRfc3RyIGFzIHRoZSBrZXkgKi8KLQkJbGVuID0gc3RybGVuKHNvdXJjZV91c2VyKSArIHN0cmxlbih0YXJnZXRfdXNlcikgKyAxOwotCQkvKiBzcmMsIEAsIGxlbiwgXDAgKi8KLQkJaGFzaF9zdHIgPSBremFsbG9jKGxlbisxLCBHRlBfS0VSTkVMKTsKLQkJc3RyY2F0KGhhc2hfc3RyLCBzb3VyY2VfdXNlcik7Ci0JCXN0cmNhdChoYXNoX3N0ciwgIkAiKTsKLQkJc3RyY2F0KGhhc2hfc3RyLCB0YXJnZXRfdXNlcik7Ci0KLQkJcHJpbnRrKEtFUk5fQUxFUlQgInRoZSBzb3VyY2UgdXNlciBpcyAlcyBcbiIsIHNvdXJjZV91c2VyKTsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgInRoZSB0YXJnZXQgdXNlciBpcyAlcyBcbiIsIHRhcmdldF91c2VyKTsKLQotCQlyZXN1bHQgPSBjYXBfaGFzaChoYXNoX3N0ciwgbGVuLCByYW5kX3N0ciwgc3RybGVuKHJhbmRfc3RyKSk7Ci0JCWlmIChOVUxMID09IHJlc3VsdCkgewotCQkJcmV0dmFsID0gLUVGQVVMVDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCW1lbWNweShub2RlX3B0ci0+ZGF0YSwgcmVzdWx0LCBDQVBfTk9ERV9TSVpFKTsgIC8qIHdoeT8gKi8KLQkJLyogQ2hhbmdlIHRoZSBwcm9jZXNzJ3MgdWlkIGlmIHRoZSBoYXNoIGlzIHByZXNlbnQgaW4gdGhlCi0JCSAqIGxpc3Qgb2YgaGFzaGVzCi0JCSAqLwotCQlsaXN0X2Zvcl9lYWNoKHBvcywgJihjYXBfZGV2aWNlcy0+aGVhZC0+bGlzdCkpIHsKLQkJCS8qCi0JCQkgKiBDaGFuZ2UgdGhlIHVzZXIgaWQgb2YgdGhlIHByb2Nlc3MgaWYgdGhlIGhhc2hlcwotCQkJICogbWF0Y2gKLQkJCSAqLwotCQkJaWYgKDAgPT0KLQkJCSAgICBtZW1jbXAocmVzdWx0LAotCQkJCSAgIGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgY2FwX25vZGUsCi0JCQkJCSAgICAgIGxpc3QpLT5kYXRhLAotCQkJCSAgIENBUF9OT0RFX1NJWkUpKSB7Ci0JCQkJdGFyZ2V0X2ludCA9ICh1bnNpZ25lZCBpbnQpCi0JCQkJICAgIHNpbXBsZV9zdHJ0b2wodGFyZ2V0X3VzZXIsIE5VTEwsIDApOwotCQkJCXNvdXJjZV9pbnQgPSAodW5zaWduZWQgaW50KQotCQkJCSAgICBzaW1wbGVfc3RydG9sKHNvdXJjZV91c2VyLCBOVUxMLCAwKTsKLQkJCQlmbGFnID0gMTsKLQotCQkJCS8qCi0JCQkJICogQ2hlY2sgd2hldGhlciB0aGUgcHJvY2VzcyB3cml0aW5nIHRvIGNhcHVzZQotCQkJCSAqIGlzIGFjdHVhbGx5IG93bmVkIGJ5IHRoZSBzb3VyY2Ugb3duZXIKLQkJCQkgKi8KLQkJCQlpZiAoc291cmNlX2ludCAhPSBjdXJyZW50X3VpZCgpKSB7Ci0JCQkJCXByaW50ayhLRVJOX0FMRVJUCi0JCQkJCSAgICAgICAiUHJvY2VzcyBpcyBub3Qgb3duZWQgYnkgdGhlIHNvdXJjZSB1c2VyIG9mIHRoZSBjYXBhYmlsaXR5LlxuIik7Ci0JCQkJCXJldHZhbCA9IC1FRkFVTFQ7Ci0JCQkJCWdvdG8gb3V0OwotCQkJCX0KLQkJCQkvKgotCQkJCSAqIFdoYXQgYWxsIGlkJ3MgbmVlZCB0byBiZSBjaGFuZ2VkIGhlcmU/IHVpZCwKLQkJCQkgKiBldWlkLCBmc2lkLCBzYXZlZGlkcyA/PyAgQ3VycmVudGx5IEkgYW0KLQkJCQkgKiBjaGFuZ2luZyB0aGUgZWZmZWN0aXZlIHVzZXIgaWQgc2luY2UgbW9zdCBvZgotCQkJCSAqIHRoZSBhdXRob3Jpc2F0aW9uIGRlY2lzaW9ucyBhcmUgYmFzZWQgb24gaXQKLQkJCQkgKi8KLQkJCQluZXcgPSBwcmVwYXJlX2NyZWRzKCk7Ci0JCQkJaWYgKCFuZXcpIHsKLQkJCQkJcmV0dmFsID0gLUVOT01FTTsKLQkJCQkJZ290byBvdXQ7Ci0JCQkJfQotCQkJCW5ldy0+dWlkID0gKHVpZF90KSB0YXJnZXRfaW50OwotCQkJCW5ldy0+ZXVpZCA9ICh1aWRfdCkgdGFyZ2V0X2ludDsKLQkJCQlyZXR2YWwgPSBjb21taXRfY3JlZHMobmV3KTsKLQkJCQlpZiAocmV0dmFsKQotCQkJCQlnb3RvIG91dDsKLQotCQkJCS8qCi0JCQkJICogUmVtb3ZlIHRoZSBjYXBhYmlsaXR5IGZyb20gdGhlIGxpc3QgYW5kCi0JCQkJICogYnJlYWsKLQkJCQkgKi8KLQkJCQl0bXAgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGNhcF9ub2RlLCBsaXN0KTsKLQkJCQlsaXN0X2RlbChwb3MpOwotCQkJCWtmcmVlKHRtcCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKDAgPT0gZmxhZykgewotCQkJLyoKLQkJCSAqIFRoZSBjYXBhYmlsaXR5IGlzIG5vdCBwcmVzZW50IGluIHRoZSBsaXN0IG9mIHRoZQotCQkJICogaGFzaGVzIHN0b3JlZCwgaGVuY2UgcmV0dXJuIGZhaWx1cmUKLQkJCSAqLwotCQkJcHJpbnRrKEtFUk5fQUxFUlQKLQkJCSAgICAgICAiSW52YWxpZCBjYXBhYmlsaXkgd3JpdHRlbiB0byAvZGV2L2NhcHVzZSBcbiIpOwotCQkJcmV0dmFsID0gLUVGQVVMVDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCSpmX3BvcyArPSBjb3VudDsKLQlyZXR2YWwgPSBjb3VudDsKLQkvKiB1cGRhdGUgdGhlIHNpemUgKi8KLQlpZiAoZGV2LT5zaXplIDwgKmZfcG9zKQotCQlkZXYtPnNpemUgPSAqZl9wb3M7Ci0KLW91dDoKLQlrZnJlZShub2RlX3B0cik7Ci0Ja2ZyZWUodXNlcl9idWYpOwotCWtmcmVlKHVzZXJfYnVmX3J1bm5pbmcpOwotCWtmcmVlKGhhc2hfc3RyKTsKLQl1cCgmZGV2LT5zZW0pOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNhcF9mb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS53cml0ZSA9IGNhcF93cml0ZSwKLQkub3BlbiA9IGNhcF9vcGVuLAotCS5yZWxlYXNlID0gY2FwX3JlbGVhc2UsCi19OwotCi0vKiBubyBfX2V4aXQgaGVyZSBiZWNhdXNlIGl0IGNhbiBiZSBjYWxsZWQgYnkgdGhlIGluaXQgZnVuY3Rpb24gKi8KLXN0YXRpYyB2b2lkIGNhcF9jbGVhbnVwX21vZHVsZSh2b2lkKQotewotCWludCBpOwotCWRldl90IGRldm5vID0gTUtERVYoY2FwX21ham9yLCBjYXBfbWlub3IpOwotCWlmIChjYXBfZGV2aWNlcykgewotCQlmb3IgKGkgPSAwOyBpIDwgY2FwX25yX2RldnM7IGkrKykgewotCQkJY2FwX3RyaW0oY2FwX2RldmljZXMgKyBpKTsKLQkJCWNkZXZfZGVsKCZjYXBfZGV2aWNlc1tpXS5jZGV2KTsKLQkJfQotCQlrZnJlZShjYXBfZGV2aWNlcyk7Ci0JfQotCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihkZXZubywgY2FwX25yX2RldnMpOwotCi19Ci0KLXN0YXRpYyB2b2lkIGNhcF9zZXR1cF9jZGV2KHN0cnVjdCBjYXBfZGV2ICpkZXYsIGludCBpbmRleCkKLXsKLQlpbnQgZXJyLCBkZXZubyA9IE1LREVWKGNhcF9tYWpvciwgY2FwX21pbm9yICsgaW5kZXgpOwotCWNkZXZfaW5pdCgmZGV2LT5jZGV2LCAmY2FwX2ZvcHMpOwotCWRldi0+Y2Rldi5vd25lciA9IFRISVNfTU9EVUxFOwotCWRldi0+Y2Rldi5vcHMgPSAmY2FwX2ZvcHM7Ci0JZXJyID0gY2Rldl9hZGQoJmRldi0+Y2RldiwgZGV2bm8sIDEpOwotCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX05PVElDRSAiRXJyb3IgJWQgYWRkaW5nIGNhcCVkIiwgZXJyLCBpbmRleCk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNhcF9pbml0X21vZHVsZSh2b2lkKQotewotCWludCByZXN1bHQsIGk7Ci0JZGV2X3QgZGV2ID0gMDsKLQotCWlmIChjYXBfbWFqb3IpIHsKLQkJZGV2ID0gTUtERVYoY2FwX21ham9yLCBjYXBfbWlub3IpOwotCQlyZXN1bHQgPSByZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldiwgY2FwX25yX2RldnMsICJjYXAiKTsKLQl9IGVsc2UgewotCQlyZXN1bHQgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZkZXYsIGNhcF9taW5vciwgY2FwX25yX2RldnMsCi0JCQkJCSAgICAgImNhcCIpOwotCQljYXBfbWFqb3IgPSBNQUpPUihkZXYpOwotCX0KLQotCWlmIChyZXN1bHQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNhcDogY2FuJ3QgZ2V0IG1ham9yICVkXG4iLAotCQkgICAgICAgY2FwX21ham9yKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQljYXBfZGV2aWNlcyA9IGt6YWxsb2MoY2FwX25yX2RldnMgKiBzaXplb2Yoc3RydWN0IGNhcF9kZXYpLAotCQkJICAgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjYXBfZGV2aWNlcykgewotCQlyZXN1bHQgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWw7Ci0JfQotCi0JLyogSW5pdGlhbGl6ZSBlYWNoIGRldmljZS4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgY2FwX25yX2RldnM7IGkrKykgewotCQljYXBfZGV2aWNlc1tpXS5ub2RlX3NpemUgPSBjYXBfbm9kZV9zaXplOwotCQlpbml0X01VVEVYKCZjYXBfZGV2aWNlc1tpXS5zZW0pOwotCQljYXBfc2V0dXBfY2RldigmY2FwX2RldmljZXNbaV0sIGkpOwotCX0KLQotCXJldHVybiAwOwotCi1mYWlsOgotCWNhcF9jbGVhbnVwX21vZHVsZSgpOwotCXJldHVybiByZXN1bHQ7Ci19Ci0KLW1vZHVsZV9pbml0KGNhcF9pbml0X21vZHVsZSk7Ci1tb2R1bGVfZXhpdChjYXBfY2xlYW51cF9tb2R1bGUpOwotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jIGIvZHJpdmVycy9zdGFnaW5nL3BhbmVsL3BhbmVsLmMKaW5kZXggOTVjOTNlOC4uMzc3ODg0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3BhbmVsL3BhbmVsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BhbmVsL3BhbmVsLmMKQEAgLTQxLDcgKzQxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BoaXNvbi9waGlzb24uYyBiL2RyaXZlcnMvc3RhZ2luZy9waGlzb24vcGhpc29uLmMKaW5kZXggZmNiYTc4ZC4uMGM0OTVlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3BoaXNvbi9waGlzb24uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcGhpc29uL3BoaXNvbi5jCkBAIC02OSw3ICs2OSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBoaXNvbl9wY2lfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGhpc29uX3BjaV90YmxbXSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfUEhJU09OLCBQQ0lfREVWSUNFX0lEX1BTNTAwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKIAkgIFBDSV9DTEFTU19TVE9SQUdFX0lERSA8PCA4LCAweGZmZmYwMCwgMCB9LAogCXsgMCwgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9pbm9kZS5jIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2lub2RlLmMKaW5kZXggMTFmYzRkNS4uNjMyNzU1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2lub2RlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2lub2RlLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNkZWZpbmUgUE9ITUVMRlNfTUFHSUNfTlVNCTB4NTA0ZjQ4MmUKIAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwb2htZWxmc19pbm9kZV9jYWNoZTsKK3N0YXRpYyBhdG9taWNfdCBwc2JfYmRpX251bSA9IEFUT01JQ19JTklUKDApOwogCiAvKgogICogUmVtb3ZlcyBpbm9kZSBmcm9tIGFsbCB0cmVlcywgZHJvcHMgbG9jYWwgbmFtZSBjYWNoZSBhbmQgcmVtb3ZlcyBhbGwgcXVldWVkCkBAIC0zMjIsNyArMzIzLDcgQEAKIAl0ID0gbmV0ZnNfdHJhbnNfYWxsb2MocHNiLCBlcnIgKyAxLCAwLCAwKTsKIAlpZiAoIXQpIHsKIAkJZXJyID0gLUVOT01FTTsKLQkJZ290byBlcnJfb3V0X3B1dDsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CiAJfQogCXQtPmNvbXBsZXRlID0gcG9obWVsZnNfd3JpdGVfaW5vZGVfY29tcGxldGU7CiAJdC0+cHJpdmF0ZSA9IGlncmFiKGlub2RlKTsKQEAgLTM5NSw3ICszOTYsOCBAQAogLyoKICAqIFdyaXRlYmFjayBmb3IgZ2l2ZW4gaW5vZGUuCiAgKi8KLXN0YXRpYyBpbnQgcG9obWVsZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHN5bmMpCitzdGF0aWMgaW50IHBvaG1lbGZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7CiAJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSA9IFBPSE1FTEZTX0koaW5vZGUpOwogCkBAIC0xMzMxLDYgKzEzMzMsOCBAQAogCXBvaG1lbGZzX2NyeXB0b19leGl0KHBzYik7CiAJcG9obWVsZnNfc3RhdGVfZXhpdChwc2IpOwogCisJYmRpX2Rlc3Ryb3koJnBzYi0+YmRpKTsKKwogCWtmcmVlKHBzYik7CiAJc2ItPnNfZnNfaW5mbyA9IE5VTEw7CiB9CkBAIC0xNzY3LDggKzE3NzEsNyBAQAogCQlzZXFfcHJpbnRmKG0sICIldSAiLCBjdGwtPmlkeCk7CiAJCWlmIChjdGwtPmFkZHIuc2FfZmFtaWx5ID09IEFGX0lORVQpIHsKIAkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZzdC0+Y3RsLmFkZHI7Ci0JCQkvKiBzZXFfcHJpbnRmKG0sICIlcGk0OiV1IiwgJnNpbi0+c2luX2FkZHIuc19hZGRyLCBudG9ocyhzaW4tPnNpbl9wb3J0KSk7ICovCi0JCQlzZXFfcHJpbnRmKG0sICIldS4ldS4ldS4ldToldSIsIE5JUFFVQUQoc2luLT5zaW5fYWRkci5zX2FkZHIpLCBudG9ocyhzaW4tPnNpbl9wb3J0KSk7CisJCQlzZXFfcHJpbnRmKG0sICIlcEk0OiV1IiwgJnNpbi0+c2luX2FkZHIuc19hZGRyLCBudG9ocyhzaW4tPnNpbl9wb3J0KSk7CiAJCX0gZWxzZSBpZiAoY3RsLT5hZGRyLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgewogCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmc3QtPmN0bC5hZGRyOwogCQkJc2VxX3ByaW50ZihtLCAiJXBpNjoldSIsICZzaW4tPnNpbjZfYWRkciwgbnRvaHMoc2luLT5zaW42X3BvcnQpKTsKQEAgLTE4MTUsMTEgKzE4MTgsMjIgQEAKIAlpZiAoIXBzYikKIAkJZ290byBlcnJfb3V0X2V4aXQ7CiAKKwllcnIgPSBiZGlfaW5pdCgmcHNiLT5iZGkpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9mcmVlX3NiOworCisJZXJyID0gYmRpX3JlZ2lzdGVyKCZwc2ItPmJkaSwgTlVMTCwgInBmcy0lZCIsIGF0b21pY19pbmNfcmV0dXJuKCZwc2JfYmRpX251bSkpOworCWlmIChlcnIpIHsKKwkJYmRpX2Rlc3Ryb3koJnBzYi0+YmRpKTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfc2I7CisJfQorCiAJc2ItPnNfZnNfaW5mbyA9IHBzYjsKIAlzYi0+c19vcCA9ICZwb2htZWxmc19zYl9vcHM7CiAJc2ItPnNfbWFnaWMgPSBQT0hNRUxGU19NQUdJQ19OVU07CiAJc2ItPnNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFOwogCXNiLT5zX2Jsb2Nrc2l6ZSA9IFBBR0VfU0laRTsKKwlzYi0+c19iZGkgPSAmcHNiLT5iZGk7CiAKIAlwc2ItPnNiID0gc2I7CiAKQEAgLTE4NjMsMTEgKzE4NzcsMTEgQEAKIAogCWVyciA9IHBvaG1lbGZzX3BhcnNlX29wdGlvbnMoKGNoYXIgKikgZGF0YSwgcHNiLCAwKTsKIAlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZnJlZV9zYjsKKwkJZ290byBlcnJfb3V0X2ZyZWVfYmRpOwogCiAJZXJyID0gcG9obWVsZnNfY29weV9jcnlwdG8ocHNiKTsKIAlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZnJlZV9zYjsKKwkJZ290byBlcnJfb3V0X2ZyZWVfYmRpOwogCiAJZXJyID0gcG9obWVsZnNfc3RhdGVfaW5pdChwc2IpOwogCWlmIChlcnIpCkBAIC0xOTE2LDYgKzE5MzAsOCBAQAogZXJyX291dF9mcmVlX3N0cmluZ3M6CiAJa2ZyZWUocHNiLT5jaXBoZXJfc3RyaW5nKTsKIAlrZnJlZShwc2ItPmhhc2hfc3RyaW5nKTsKK2Vycl9vdXRfZnJlZV9iZGk6CisJYmRpX2Rlc3Ryb3koJnBzYi0+YmRpKTsKIGVycl9vdXRfZnJlZV9zYjoKIAlrZnJlZShwc2IpOwogZXJyX291dF9leGl0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL25ldGZzLmggYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvbmV0ZnMuaAppbmRleCA2MjNhMDdkLi4wMWNiYTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvbmV0ZnMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvbmV0ZnMuaApAQCAtMTgsNiArMTgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jb25uZWN0b3IuaD4KKyNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgogCiAjZGVmaW5lIFBPSE1FTEZTX0NOX0lEWAkJCTUKICNkZWZpbmUgUE9ITUVMRlNfQ05fVkFMCQkJMApAQCAtNjI0LDYgKzYyNSw4IEBACiAKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiOwogCisJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8JYmRpOworCiAJLyoKIAkgKiBBbGdvcml0aG0gc3RyaW5ncy4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9xdWF0ZWNoX3VzYjIvcXVhdGVjaF91c2IyLmMgYi9kcml2ZXJzL3N0YWdpbmcvcXVhdGVjaF91c2IyL3F1YXRlY2hfdXNiMi5jCmluZGV4IGY3NzI2ZjEuLjE1NjFmNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9xdWF0ZWNoX3VzYjIvcXVhdGVjaF91c2IyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3F1YXRlY2hfdXNiMi9xdWF0ZWNoX3VzYjIuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAjZGVmaW5lIEZPVVJUSENIQVIJKCh1bnNpZ25lZCBjaGFyICopKHVyYi0+dHJhbnNmZXJfYnVmZmVyKSlbaSArIDNdCiAjZGVmaW5lIEZJRlRIQ0hBUgkoKHVuc2lnbmVkIGNoYXIgKikodXJiLT50cmFuc2Zlcl9idWZmZXIpKVtpICsgNF0KIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHF1YXVzYjJfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBxdWF1c2IyX2lkX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBRVUFURUNIX1NTVTJfMTAwKX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBRVUFURUNIX0RTVTJfMTAwKX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBRVUFURUNIX0RTVTJfNDAwKX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9LY29uZmlnCmluZGV4IDI0ZTI1NjkuLjEyN2IzYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9LY29uZmlnCkBAIC01LDcgKzUsNyBAQAogCXNlbGVjdCBMWk9fREVDT01QUkVTUwogCWRlZmF1bHQgbgogCWhlbHAKLQkgIENyZWF0ZXMgdmlydHVhbCBibG9jayBkZXZpY2VzIHdoaWNoIGNhbiBiZSB1c2VkIChvbmx5KSBhcyBhIHN3YXAKKwkgIENyZWF0ZXMgdmlydHVhbCBibG9jayBkZXZpY2VzIHdoaWNoIGNhbiAob25seSkgYmUgdXNlZCBhcyBzd2FwCiAJICBkaXNrcy4gUGFnZXMgc3dhcHBlZCB0byB0aGVzZSBkaXNrcyBhcmUgY29tcHJlc3NlZCBhbmQgc3RvcmVkIGluCiAJICBtZW1vcnkgaXRzZWxmLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXAudHh0IGIvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3JhbXpzd2FwLnR4dAppbmRleCBlOWYxNjE5Li45Njk0YWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXAudHh0CisrKyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcC50eHQKQEAgLTUsOSArNSw5IEBACiAKICogSW50cm9kdWN0aW9uCiAKLUl0IGNyZWF0ZXMgUkFNIGJhc2VkIGJsb2NrIGRldmljZXMgd2hpY2ggY2FuIGJlIHVzZWQgKG9ubHkpIGFzIHN3YXAgZGlza3MuCi1QYWdlcyBzd2FwcGVkIHRvIHRoZXNlIGRldmljZXMgYXJlIGNvbXByZXNzZWQgYW5kIHN0b3JlZCBpbiBtZW1vcnkgaXRzZWxmLgotU2VlIHByb2plY3QgaG9tZSBmb3IgdXNlIGNhc2VzLCBwZXJmb3JtYW5jZSBudW1iZXJzIGFuZCBhIGxvdCBtb3JlLgorVGhlIHJhbXpzd2FwIG1vZHVsZSBjcmVhdGVzIFJBTSBiYXNlZCBibG9jayBkZXZpY2VzIHdoaWNoIGNhbiAob25seSkgYmUgdXNlZCBhcworc3dhcCBkaXNrcy4gUGFnZXMgc3dhcHBlZCB0byB0aGVzZSBkZXZpY2VzIGFyZSBjb21wcmVzc2VkIGFuZCBzdG9yZWQgaW4gbWVtb3J5CitpdHNlbGYuIFNlZSBwcm9qZWN0IGhvbWUgZm9yIHVzZSBjYXNlcywgcGVyZm9ybWFuY2UgbnVtYmVycyBhbmQgYSBsb3QgbW9yZS4KIAogSW5kaXZpZHVhbCByYW16c3dhcCBkZXZpY2VzIGFyZSBjb25maWd1cmVkIGFuZCBpbml0aWFsaXplZCB1c2luZyByenNjb250cm9sCiB1c2Vyc3BhY2UgdXRpbGl0eSBhcyBzaG93biBpbiBleGFtcGxlcyBiZWxvdy4gU2VlIHJ6c2NvbnRyb2wgbWFuIHBhZ2UgZm9yIG1vcmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcF9kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcF9kcnYuYwppbmRleCA5ODlmYWM1Li41ZTQyMmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXBfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3JhbXpzd2FwX2Rydi5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvbXByZXNzZWQgUkFNIGJhc2VkIHN3YXAgZGV2aWNlCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5ICBOaXRpbiBHdXB0YQorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwICBOaXRpbiBHdXB0YQogICoKICAqIFRoaXMgY29kZSBpcyByZWxlYXNlZCB1c2luZyBhIGR1YWwgbGljZW5zZSBzdHJhdGVneTogQlNEL0dQTAogICogWW91IGNhbiBjaG9vc2UgdGhlIGxpY2VuY2UgdGhhdCBiZXR0ZXIgZml0cyB5b3VyIHJlcXVpcmVtZW50cy4KQEAgLTI0LDEyICsyNCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2x6by5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXBvcHMuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCiAjaW5jbHVkZSAicmFtenN3YXBfZHJ2LmgiCiAKQEAgLTIyMiw3ICsyMjAsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgcmFtenN3YXBfaW9jdGxfZ2V0X3N0YXRzKHN0cnVjdCByYW16c3dhcCAqcnpzLAorc3RhdGljIHZvaWQgcmFtenN3YXBfaW9jdGxfZ2V0X3N0YXRzKHN0cnVjdCByYW16c3dhcCAqcnpzLAogCQkJc3RydWN0IHJhbXpzd2FwX2lvY3RsX3N0YXRzICpzKQogewogCXN0cm5jcHkocy0+YmFja2luZ19zd2FwX25hbWUsIHJ6cy0+YmFja2luZ19zd2FwX25hbWUsCkBAIC0yNDAsNyArMjM4LDggQEAKIAogCW1lbV91c2VkID0geHZfZ2V0X3RvdGFsX3NpemVfYnl0ZXMocnpzLT5tZW1fcG9vbCkKIAkJCSsgKHJzLT5wYWdlc19leHBhbmQgPDwgUEFHRV9TSElGVCk7Ci0Jc3VjY193cml0ZXMgPSBycy0+bnVtX3dyaXRlcyAtIHJzLT5mYWlsZWRfd3JpdGVzOworCXN1Y2Nfd3JpdGVzID0gcnpzX3N0YXQ2NF9yZWFkKHJ6cywgJnJzLT5udW1fd3JpdGVzKSAtCisJCQlyenNfc3RhdDY0X3JlYWQocnpzLCAmcnMtPmZhaWxlZF93cml0ZXMpOwogCiAJaWYgKHN1Y2Nfd3JpdGVzICYmIHJzLT5wYWdlc19zdG9yZWQpIHsKIAkJZ29vZF9jb21wcmVzc19wZXJjID0gcnMtPmdvb2RfY29tcHJlc3MgKiAxMDAKQEAgLTI0OSwxMSArMjQ4LDEyIEBACiAJCQkJCS8gcnMtPnBhZ2VzX3N0b3JlZDsKIAl9CiAKLQlzLT5udW1fcmVhZHMgPSBycy0+bnVtX3JlYWRzOwotCXMtPm51bV93cml0ZXMgPSBycy0+bnVtX3dyaXRlczsKLQlzLT5mYWlsZWRfcmVhZHMgPSBycy0+ZmFpbGVkX3JlYWRzOwotCXMtPmZhaWxlZF93cml0ZXMgPSBycy0+ZmFpbGVkX3dyaXRlczsKLQlzLT5pbnZhbGlkX2lvID0gcnMtPmludmFsaWRfaW87CisJcy0+bnVtX3JlYWRzID0gcnpzX3N0YXQ2NF9yZWFkKHJ6cywgJnJzLT5udW1fcmVhZHMpOworCXMtPm51bV93cml0ZXMgPSByenNfc3RhdDY0X3JlYWQocnpzLCAmcnMtPm51bV93cml0ZXMpOworCXMtPmZhaWxlZF9yZWFkcyA9IHJ6c19zdGF0NjRfcmVhZChyenMsICZycy0+ZmFpbGVkX3JlYWRzKTsKKwlzLT5mYWlsZWRfd3JpdGVzID0gcnpzX3N0YXQ2NF9yZWFkKHJ6cywgJnJzLT5mYWlsZWRfd3JpdGVzKTsKKwlzLT5pbnZhbGlkX2lvID0gcnpzX3N0YXQ2NF9yZWFkKHJ6cywgJnJzLT5pbnZhbGlkX2lvKTsKKwlzLT5ub3RpZnlfZnJlZSA9IHJ6c19zdGF0NjRfcmVhZChyenMsICZycy0+bm90aWZ5X2ZyZWUpOwogCXMtPnBhZ2VzX3plcm8gPSBycy0+cGFnZXNfemVybzsKIAogCXMtPmdvb2RfY29tcHJlc3NfcGN0ID0gZ29vZF9jb21wcmVzc19wZXJjOwpAQCAtMjY1LDggKzI2NSw4IEBACiAJcy0+Y29tcHJfZGF0YV9zaXplID0gcnMtPmNvbXByX3NpemU7CiAJcy0+bWVtX3VzZWRfdG90YWwgPSBtZW1fdXNlZDsKIAotCXMtPmJkZXZfbnVtX3JlYWRzID0gcnMtPmJkZXZfbnVtX3JlYWRzOwotCXMtPmJkZXZfbnVtX3dyaXRlcyA9IHJzLT5iZGV2X251bV93cml0ZXM7CisJcy0+YmRldl9udW1fcmVhZHMgPSByenNfc3RhdDY0X3JlYWQocnpzLCAmcnMtPmJkZXZfbnVtX3JlYWRzKTsKKwlzLT5iZGV2X251bV93cml0ZXMgPSByenNfc3RhdDY0X3JlYWQocnpzLCAmcnMtPmJkZXZfbnVtX3dyaXRlcyk7CiAJfQogI2VuZGlmIC8qIENPTkZJR19SQU1aU1dBUF9TVEFUUyAqLwogfQpAQCAtNTAyLDYgKzUwMiwxNCBAQAogCQkJZ290byBiYWRfcGFyYW07CiAJCX0KIAkJZGlza3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CisJCS8qCisJCSAqIENhbiBoYXBwZW4gaWYgdXNlciBnaXZlcyBhbiBleHRlbmRlZCBwYXJ0aXRpb24gYXMKKwkJICogYmFja2luZyBzd2FwIG9yIHNpbXBseSBhIGJhZCBkaXNrLgorCQkgKi8KKwkJaWYgKCFkaXNrc2l6ZSkgeworCQkJcHJfZXJyKCJFcnJvciByZWFkaW5nIGJhY2tpbmcgc3dhcCBzaXplLlxuIik7CisJCQlnb3RvIGJhZF9wYXJhbTsKKwkJfQogCX0gZWxzZSBpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewogCQliZGV2ID0gaW5vZGUtPmlfc2ItPnNfYmRldjsKIAkJaWYgKElTX1NXQVBGSUxFKGlub2RlKSkgewpAQCAtNTE5LDcgKzUyNyw2IEBACiAJcnpzLT5zd2FwX2ZpbGUgPSBzd2FwX2ZpbGU7CiAJcnpzLT5iYWNraW5nX3N3YXAgPSBiZGV2OwogCXJ6cy0+ZGlza3NpemUgPSBkaXNrc2l6ZTsKLQlCVUdfT04oIXJ6cy0+ZGlza3NpemUpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTUzNyw3ICs1NDQsNyBAQAogICogTWFwIGxvZ2ljYWwgcGFnZSBudW1iZXIgJ3BhZ2VudW0nIHRvIHBoeXNpY2FsIHBhZ2UgbnVtYmVyCiAgKiBvbiBiYWNraW5nIHN3YXAgZGV2aWNlLiBGb3IgYmxvY2sgZGV2aWNlLCB0aGlzIGlzIGEgbm9wLgogICovCi11MzIgbWFwX2JhY2tpbmdfc3dhcF9wYWdlKHN0cnVjdCByYW16c3dhcCAqcnpzLCB1MzIgcGFnZW51bSkKK3N0YXRpYyB1MzIgbWFwX2JhY2tpbmdfc3dhcF9wYWdlKHN0cnVjdCByYW16c3dhcCAqcnpzLCB1MzIgcGFnZW51bSkKIHsKIAl1MzIgc2tpcF9wYWdlcywgZW50cmllc19wZXJfcGFnZTsKIAlzaXplX3QgZGVsdGEsIHNlX29mZnNldCwgc2tpcHBlZDsKQEAgLTU5Myw5ICs2MDAsMTMgQEAKIAl1MzIgb2Zmc2V0ID0gcnpzLT50YWJsZVtpbmRleF0ub2Zmc2V0OwogCiAJaWYgKHVubGlrZWx5KCFwYWdlKSkgeworCQkvKgorCQkgKiBObyBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciB6ZXJvIGZpbGxlZCBwYWdlcy4KKwkJICogU2ltcGx5IGNsZWFyIHplcm8gcGFnZSBmbGFnLgorCQkgKi8KIAkJaWYgKHJ6c190ZXN0X2ZsYWcocnpzLCBpbmRleCwgUlpTX1pFUk8pKSB7CiAJCQlyenNfY2xlYXJfZmxhZyhyenMsIGluZGV4LCBSWlNfWkVSTyk7Ci0JCQlzdGF0X2RlYyhyenMtPnN0YXRzLnBhZ2VzX3plcm8pOworCQkJcnpzX3N0YXRfZGVjKCZyenMtPnN0YXRzLnBhZ2VzX3plcm8pOwogCQl9CiAJCXJldHVybjsKIAl9CkBAIC02MDQsNyArNjE1LDcgQEAKIAkJY2xlbiA9IFBBR0VfU0laRTsKIAkJX19mcmVlX3BhZ2UocGFnZSk7CiAJCXJ6c19jbGVhcl9mbGFnKHJ6cywgaW5kZXgsIFJaU19VTkNPTVBSRVNTRUQpOwotCQlzdGF0X2RlYyhyenMtPnN0YXRzLnBhZ2VzX2V4cGFuZCk7CisJCXJ6c19zdGF0X2RlYygmcnpzLT5zdGF0cy5wYWdlc19leHBhbmQpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTYxNCwxMSArNjI1LDExIEBACiAKIAl4dl9mcmVlKHJ6cy0+bWVtX3Bvb2wsIHBhZ2UsIG9mZnNldCk7CiAJaWYgKGNsZW4gPD0gUEFHRV9TSVpFIC8gMikKLQkJc3RhdF9kZWMocnpzLT5zdGF0cy5nb29kX2NvbXByZXNzKTsKKwkJcnpzX3N0YXRfZGVjKCZyenMtPnN0YXRzLmdvb2RfY29tcHJlc3MpOwogCiBvdXQ6CiAJcnpzLT5zdGF0cy5jb21wcl9zaXplIC09IGNsZW47Ci0Jc3RhdF9kZWMocnpzLT5zdGF0cy5wYWdlc19zdG9yZWQpOworCXJ6c19zdGF0X2RlYygmcnpzLT5zdGF0cy5wYWdlc19zdG9yZWQpOwogCiAJcnpzLT50YWJsZVtpbmRleF0ucGFnZSA9IE5VTEw7CiAJcnpzLT50YWJsZVtpbmRleF0ub2Zmc2V0ID0gMDsKQEAgLTY2NCw3ICs2NzUsNiBAQAogCXJldHVybiAwOwogfQogCi0KIC8qCiAgKiBDYWxsZWQgd2hlbiByZXF1ZXN0IHBhZ2UgaXMgbm90IHByZXNlbnQgaW4gcmFtenN3YXAuCiAgKiBJdHMgZWl0aGVyIGluIGJhY2tpbmcgc3dhcCBkZXZpY2UgKGlmIHByZXNlbnQpIG9yCkBAIC02ODAsOCArNjkwLDggQEAKIAkgKi8KIAlpZiAocnpzLT5iYWNraW5nX3N3YXApIHsKIAkJdTMyIHBhZ2VudW07Ci0JCXN0YXRfZGVjKHJ6cy0+c3RhdHMubnVtX3JlYWRzKTsKLQkJc3RhdF9pbmMocnpzLT5zdGF0cy5iZGV2X251bV9yZWFkcyk7CisJCXJ6c19zdGF0NjRfZGVjKHJ6cywgJnJ6cy0+c3RhdHMubnVtX3JlYWRzKTsKKwkJcnpzX3N0YXQ2NF9pbmMocnpzLCAmcnpzLT5zdGF0cy5iZGV2X251bV9yZWFkcyk7CiAJCWJpby0+YmlfYmRldiA9IHJ6cy0+YmFja2luZ19zd2FwOwogCiAJCS8qCkBAIC03MTksNyArNzI5LDcgQEAKIAlzdHJ1Y3Qgem9ial9oZWFkZXIgKnpoZWFkZXI7CiAJdW5zaWduZWQgY2hhciAqdXNlcl9tZW0sICpjbWVtOwogCi0Jc3RhdF9pbmMocnpzLT5zdGF0cy5udW1fcmVhZHMpOworCXJ6c19zdGF0NjRfaW5jKHJ6cywgJnJ6cy0+c3RhdHMubnVtX3JlYWRzKTsKIAogCXBhZ2UgPSBiaW8tPmJpX2lvX3ZlY1swXS5idl9wYWdlOwogCWluZGV4ID0gYmlvLT5iaV9zZWN0b3IgPj4gU0VDVE9SU19QRVJfUEFHRV9TSElGVDsKQEAgLTczMSw3ICs3NDEsNyBAQAogCWlmICghcnpzLT50YWJsZVtpbmRleF0ucGFnZSkKIAkJcmV0dXJuIGhhbmRsZV9yYW16c3dhcF9mYXVsdChyenMsIGJpbyk7CiAKLQkvKiBQYWdlIGlzIHN0b3JlZCB1bmNvbXByZXNzZWQgc2luY2UgaXRzIGluY29tcHJlc3NpYmxlICovCisJLyogUGFnZSBpcyBzdG9yZWQgdW5jb21wcmVzc2VkIHNpbmNlIGl0J3MgaW5jb21wcmVzc2libGUgKi8KIAlpZiAodW5saWtlbHkocnpzX3Rlc3RfZmxhZyhyenMsIGluZGV4LCBSWlNfVU5DT01QUkVTU0VEKSkpCiAJCXJldHVybiBoYW5kbGVfdW5jb21wcmVzc2VkX3BhZ2UocnpzLCBiaW8pOwogCkBAIC03NTMsNyArNzYzLDcgQEAKIAlpZiAodW5saWtlbHkocmV0ICE9IExaT19FX09LKSkgewogCQlwcl9lcnIoIkRlY29tcHJlc3Npb24gZmFpbGVkISBlcnI9JWQsIHBhZ2U9JXVcbiIsCiAJCQlyZXQsIGluZGV4KTsKLQkJc3RhdF9pbmMocnpzLT5zdGF0cy5mYWlsZWRfcmVhZHMpOworCQlyenNfc3RhdDY0X2luYyhyenMsICZyenMtPnN0YXRzLmZhaWxlZF9yZWFkcyk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNzc3LDcgKzc4Nyw3IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2UsICpwYWdlX3N0b3JlOwogCXVuc2lnbmVkIGNoYXIgKnVzZXJfbWVtLCAqY21lbSwgKnNyYzsKIAotCXN0YXRfaW5jKHJ6cy0+c3RhdHMubnVtX3dyaXRlcyk7CisJcnpzX3N0YXQ2NF9pbmMocnpzLCAmcnpzLT5zdGF0cy5udW1fd3JpdGVzKTsKIAogCXBhZ2UgPSBiaW8tPmJpX2lvX3ZlY1swXS5idl9wYWdlOwogCWluZGV4ID0gYmlvLT5iaV9zZWN0b3IgPj4gU0VDVE9SU19QRVJfUEFHRV9TSElGVDsKQEAgLTc4OSwyNSArNzk5LDE2IEBACiAJICogaXMgbm8gbG9uZ2VyIHJlZmVyZW5jZWQgYnkgYW55IHByb2Nlc3MuIFNvLCBpdHMgbm93IHNhZmUKIAkgKiB0byBmcmVlIHRoZSBtZW1vcnkgdGhhdCB3YXMgYWxsb2NhdGVkIGZvciB0aGlzIHBhZ2UuCiAJICovCi0JaWYgKHJ6cy0+dGFibGVbaW5kZXhdLnBhZ2UpCisJaWYgKHJ6cy0+dGFibGVbaW5kZXhdLnBhZ2UgfHwgcnpzX3Rlc3RfZmxhZyhyenMsIGluZGV4LCBSWlNfWkVSTykpCiAJCXJhbXpzd2FwX2ZyZWVfcGFnZShyenMsIGluZGV4KTsKIAotCS8qCi0JICogTm8gbWVtb3J5IGlhIGFsbG9jYXRlZCBmb3IgemVybyBmaWxsZWQgcGFnZXMuCi0JICogU2ltcGx5IGNsZWFyIHplcm8gcGFnZSBmbGFnLgotCSAqLwotCWlmIChyenNfdGVzdF9mbGFnKHJ6cywgaW5kZXgsIFJaU19aRVJPKSkgewotCQlzdGF0X2RlYyhyenMtPnN0YXRzLnBhZ2VzX3plcm8pOwotCQlyenNfY2xlYXJfZmxhZyhyenMsIGluZGV4LCBSWlNfWkVSTyk7Ci0JfQotCiAJbXV0ZXhfbG9jaygmcnpzLT5sb2NrKTsKIAogCXVzZXJfbWVtID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwogCWlmIChwYWdlX3plcm9fZmlsbGVkKHVzZXJfbWVtKSkgewogCQlrdW5tYXBfYXRvbWljKHVzZXJfbWVtLCBLTV9VU0VSMCk7CiAJCW11dGV4X3VubG9jaygmcnpzLT5sb2NrKTsKLQkJc3RhdF9pbmMocnpzLT5zdGF0cy5wYWdlc196ZXJvKTsKKwkJcnpzX3N0YXRfaW5jKCZyenMtPnN0YXRzLnBhZ2VzX3plcm8pOwogCQlyenNfc2V0X2ZsYWcocnpzLCBpbmRleCwgUlpTX1pFUk8pOwogCiAJCXNldF9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLT5iaV9mbGFncyk7CkBAIC04MzEsNyArODMyLDcgQEAKIAlpZiAodW5saWtlbHkocmV0ICE9IExaT19FX09LKSkgewogCQltdXRleF91bmxvY2soJnJ6cy0+bG9jayk7CiAJCXByX2VycigiQ29tcHJlc3Npb24gZmFpbGVkISBlcnI9JWRcbiIsIHJldCk7Ci0JCXN0YXRfaW5jKHJ6cy0+c3RhdHMuZmFpbGVkX3dyaXRlcyk7CisJCXJ6c19zdGF0NjRfaW5jKHJ6cywgJnJ6cy0+c3RhdHMuZmFpbGVkX3dyaXRlcyk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtODU0LDEzICs4NTUsMTMgQEAKIAkJCW11dGV4X3VubG9jaygmcnpzLT5sb2NrKTsKIAkJCXByX2luZm8oIkVycm9yIGFsbG9jYXRpbmcgbWVtb3J5IGZvciBpbmNvbXByZXNzaWJsZSAiCiAJCQkJInBhZ2U6ICV1XG4iLCBpbmRleCk7Ci0JCQlzdGF0X2luYyhyenMtPnN0YXRzLmZhaWxlZF93cml0ZXMpOworCQkJcnpzX3N0YXQ2NF9pbmMocnpzLCAmcnpzLT5zdGF0cy5mYWlsZWRfd3JpdGVzKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKIAkJb2Zmc2V0ID0gMDsKIAkJcnpzX3NldF9mbGFnKHJ6cywgaW5kZXgsIFJaU19VTkNPTVBSRVNTRUQpOwotCQlzdGF0X2luYyhyenMtPnN0YXRzLnBhZ2VzX2V4cGFuZCk7CisJCXJ6c19zdGF0X2luYygmcnpzLT5zdGF0cy5wYWdlc19leHBhbmQpOwogCQlyenMtPnRhYmxlW2luZGV4XS5wYWdlID0gcGFnZV9zdG9yZTsKIAkJc3JjID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwogCQlnb3RvIG1lbXN0b3JlOwpAQCAtODcyLDcgKzg3Myw3IEBACiAJCW11dGV4X3VubG9jaygmcnpzLT5sb2NrKTsKIAkJcHJfaW5mbygiRXJyb3IgYWxsb2NhdGluZyBtZW1vcnkgZm9yIGNvbXByZXNzZWQgIgogCQkJInBhZ2U6ICV1LCBzaXplPSV6dVxuIiwgaW5kZXgsIGNsZW4pOwotCQlzdGF0X2luYyhyenMtPnN0YXRzLmZhaWxlZF93cml0ZXMpOworCQlyenNfc3RhdDY0X2luYyhyenMsICZyenMtPnN0YXRzLmZhaWxlZF93cml0ZXMpOwogCQlpZiAocnpzLT5iYWNraW5nX3N3YXApCiAJCQlmd2Rfd3JpdGVfcmVxdWVzdCA9IDE7CiAJCWdvdG8gb3V0OwpAQCAtOTAxLDkgKzkwMiw5IEBACiAKIAkvKiBVcGRhdGUgc3RhdHMgKi8KIAlyenMtPnN0YXRzLmNvbXByX3NpemUgKz0gY2xlbjsKLQlzdGF0X2luYyhyenMtPnN0YXRzLnBhZ2VzX3N0b3JlZCk7CisJcnpzX3N0YXRfaW5jKCZyenMtPnN0YXRzLnBhZ2VzX3N0b3JlZCk7CiAJaWYgKGNsZW4gPD0gUEFHRV9TSVpFIC8gMikKLQkJc3RhdF9pbmMocnpzLT5zdGF0cy5nb29kX2NvbXByZXNzKTsKKwkJcnpzX3N0YXRfaW5jKCZyenMtPnN0YXRzLmdvb2RfY29tcHJlc3MpOwogCiAJbXV0ZXhfdW5sb2NrKCZyenMtPmxvY2spOwogCkBAIC05MTMsNyArOTE0LDcgQEAKIAogb3V0OgogCWlmIChmd2Rfd3JpdGVfcmVxdWVzdCkgewotCQlzdGF0X2luYyhyenMtPnN0YXRzLmJkZXZfbnVtX3dyaXRlcyk7CisJCXJ6c19zdGF0NjRfaW5jKHJ6cywgJnJ6cy0+c3RhdHMuYmRldl9udW1fd3JpdGVzKTsKIAkJYmlvLT5iaV9iZGV2ID0gcnpzLT5iYWNraW5nX3N3YXA7CiAjaWYgMAogCQkvKgpAQCAtOTQxLDcgKzk0Miw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogLyoKICAqIENoZWNrIGlmIHJlcXVlc3QgaXMgd2l0aGluIGJvdW5kcyBhbmQgcGFnZSBhbGlnbmVkLgogICovCkBAIC05NzUsNyArOTc1LDcgQEAKIAl9CiAKIAlpZiAoIXZhbGlkX3N3YXBfcmVxdWVzdChyenMsIGJpbykpIHsKLQkJc3RhdF9pbmMocnpzLT5zdGF0cy5pbnZhbGlkX2lvKTsKKwkJcnpzX3N0YXQ2NF9pbmMocnpzLCAmcnpzLT5zdGF0cy5pbnZhbGlkX2lvKTsKIAkJYmlvX2lvX2Vycm9yKGJpbyk7CiAJCXJldHVybiAwOwogCX0KQEAgLTEwMDAsNiArMTAwMCw5IEBACiAJdW5zaWduZWQgZW50cmllc19wZXJfcGFnZTsKIAl1bnNpZ25lZCBsb25nIG51bV90YWJsZV9wYWdlcywgZW50cnkgPSAwOwogCisJLyogRG8gbm90IGFjY2VwdCBhbnkgbmV3IEkvTyByZXF1ZXN0ICovCisJcnpzLT5pbml0X2RvbmUgPSAwOworCiAJaWYgKHJ6cy0+YmFja2luZ19zd2FwICYmICFyenMtPm51bV9leHRlbnRzKQogCQlpc19iYWNraW5nX2Jsa2RldiA9IDE7CiAKQEAgLTEwNjYsNiArMTA2OSw3IEBACiAJCQliZF9yZWxlYXNlKHJ6cy0+YmFja2luZ19zd2FwKTsKIAkJZmlscF9jbG9zZShyenMtPnN3YXBfZmlsZSwgTlVMTCk7CiAJCXJ6cy0+YmFja2luZ19zd2FwID0gTlVMTDsKKwkJbWVtc2V0KHJ6cy0+YmFja2luZ19zd2FwX25hbWUsIDAsIE1BWF9TV0FQX05BTUVfTEVOKTsKIAl9CiAKIAkvKiBSZXNldCBzdGF0cyAqLwpAQCAtMTA3Myw5ICsxMDc3LDYgQEAKIAogCXJ6cy0+ZGlza3NpemUgPSAwOwogCXJ6cy0+bWVtbGltaXQgPSAwOwotCi0JLyogQmFjayB0byB1bmluaXRpYWxpemVkIHN0YXRlICovCi0JcnpzLT5pbml0X2RvbmUgPSAwOwogfQogCiBzdGF0aWMgaW50IHJhbXpzd2FwX2lvY3RsX2luaXRfZGV2aWNlKHN0cnVjdCByYW16c3dhcCAqcnpzKQpAQCAtMTI3Niw2ICsxMjc3LDExIEBACiAJCQlyZXQgPSAtRUJVU1k7CiAJCQlnb3RvIG91dDsKIAkJfQorCisJCS8qIE1ha2Ugc3VyZSBhbGwgcGVuZGluZyBJL08gaXMgZmluaXNoZWQgKi8KKwkJaWYgKGJkZXYpCisJCQlmc3luY19iZGV2KGJkZXYpOworCiAJCXJldCA9IHJhbXpzd2FwX2lvY3RsX3Jlc2V0X2RldmljZShyenMpOwogCQlicmVhazsKIApAQCAtMTI5MywxNiArMTI5OSwyMCBAQAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIHZvaWQgY3JlYXRlX2RldmljZShzdHJ1Y3QgcmFtenN3YXAgKnJ6cywgaW50IGRldmljZV9pZCkKK3N0YXRpYyBpbnQgY3JlYXRlX2RldmljZShzdHJ1Y3QgcmFtenN3YXAgKnJ6cywgaW50IGRldmljZV9pZCkKIHsKKwlpbnQgcmV0ID0gMDsKKwogCW11dGV4X2luaXQoJnJ6cy0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnJ6cy0+c3RhdDY0X2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZyenMtPmJhY2tpbmdfc3dhcF9leHRlbnRfbGlzdCk7CiAKIAlyenMtPnF1ZXVlID0gYmxrX2FsbG9jX3F1ZXVlKEdGUF9LRVJORUwpOwogCWlmICghcnpzLT5xdWV1ZSkgewogCQlwcl9lcnIoIkVycm9yIGFsbG9jYXRpbmcgZGlzayBxdWV1ZSBmb3IgZGV2aWNlICVkXG4iLAogCQkJZGV2aWNlX2lkKTsKLQkJcmV0dXJuOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKIAl9CiAKIAlibGtfcXVldWVfbWFrZV9yZXF1ZXN0KHJ6cy0+cXVldWUsIHJhbXpzd2FwX21ha2VfcmVxdWVzdCk7CkBAIC0xMzE0LDcgKzEzMjQsOCBAQAogCQlibGtfY2xlYW51cF9xdWV1ZShyenMtPnF1ZXVlKTsKIAkJcHJfd2FybmluZygiRXJyb3IgYWxsb2NhdGluZyBkaXNrIHN0cnVjdHVyZSBmb3IgZGV2aWNlICVkXG4iLAogCQkJZGV2aWNlX2lkKTsKLQkJcmV0dXJuOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKIAl9CiAKIAlyenMtPmRpc2stPm1ham9yID0gcmFtenN3YXBfbWFqb3I7CkBAIC0xMzI5LDkgKzEzNDAsMTYgQEAKIAkgKiBvciBzZXQgZXF1YWwgdG8gYmFja2luZyBzd2FwIGRldmljZSAoaWYgcHJvdmlkZWQpCiAJICovCiAJc2V0X2NhcGFjaXR5KHJ6cy0+ZGlzaywgMCk7CisKKwlibGtfcXVldWVfcGh5c2ljYWxfYmxvY2tfc2l6ZShyenMtPmRpc2stPnF1ZXVlLCBQQUdFX1NJWkUpOworCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUocnpzLT5kaXNrLT5xdWV1ZSwgUEFHRV9TSVpFKTsKKwogCWFkZF9kaXNrKHJ6cy0+ZGlzayk7CiAKIAlyenMtPmluaXRfZG9uZSA9IDA7CisKK291dDoKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBkZXN0cm95X2RldmljZShzdHJ1Y3QgcmFtenN3YXAgKnJ6cykKQEAgLTEzNDcsMTggKzEzNjUsMjAgQEAKIAogc3RhdGljIGludCBfX2luaXQgcmFtenN3YXBfaW5pdCh2b2lkKQogewotCWludCBpLCByZXQ7CisJaW50IHJldCwgZGV2X2lkOwogCiAJaWYgKG51bV9kZXZpY2VzID4gbWF4X251bV9kZXZpY2VzKSB7CiAJCXByX3dhcm5pbmcoIkludmFsaWQgdmFsdWUgZm9yIG51bV9kZXZpY2VzOiAldVxuIiwKIAkJCQludW1fZGV2aWNlcyk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKIAl9CiAKIAlyYW16c3dhcF9tYWpvciA9IHJlZ2lzdGVyX2Jsa2RldigwLCAicmFtenN3YXAiKTsKIAlpZiAocmFtenN3YXBfbWFqb3IgPD0gMCkgewogCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gZ2V0IG1ham9yIG51bWJlclxuIik7Ci0JCXJldHVybiAtRUJVU1k7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKCFudW1fZGV2aWNlcykgewpAQCAtMTM3MSwxNSArMTM5MSwyMyBAQAogCWRldmljZXMgPSBremFsbG9jKG51bV9kZXZpY2VzICogc2l6ZW9mKHN0cnVjdCByYW16c3dhcCksIEdGUF9LRVJORUwpOwogCWlmICghZGV2aWNlcykgewogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKKwkJZ290byB1bnJlZ2lzdGVyOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBudW1fZGV2aWNlczsgaSsrKQotCQljcmVhdGVfZGV2aWNlKCZkZXZpY2VzW2ldLCBpKTsKKwlmb3IgKGRldl9pZCA9IDA7IGRldl9pZCA8IG51bV9kZXZpY2VzOyBkZXZfaWQrKykgeworCQlyZXQgPSBjcmVhdGVfZGV2aWNlKCZkZXZpY2VzW2Rldl9pZF0sIGRldl9pZCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZyZWVfZGV2aWNlczsKKwl9CiAKIAlyZXR1cm4gMDsKLW91dDoKKworZnJlZV9kZXZpY2VzOgorCXdoaWxlIChkZXZfaWQpCisJCWRlc3Ryb3lfZGV2aWNlKCZkZXZpY2VzWy0tZGV2X2lkXSk7Cit1bnJlZ2lzdGVyOgogCXVucmVnaXN0ZXJfYmxrZGV2KHJhbXpzd2FwX21ham9yLCAicmFtenN3YXAiKTsKK291dDoKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXBfZHJ2LmggYi9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXBfZHJ2LmgKaW5kZXggYTZlYTI0MC4uYzdlMGU3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3JhbXpzd2FwX2Rydi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcF9kcnYuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb21wcmVzc2VkIFJBTSBiYXNlZCBzd2FwIGRldmljZQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSAgTml0aW4gR3VwdGEKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCAgTml0aW4gR3VwdGEKICAqCiAgKiBUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdXNpbmcgYSBkdWFsIGxpY2Vuc2Ugc3RyYXRlZ3k6IEJTRC9HUEwKICAqIFlvdSBjYW4gY2hvb3NlIHRoZSBsaWNlbmNlIHRoYXQgYmV0dGVyIGZpdHMgeW91ciByZXF1aXJlbWVudHMuCkBAIC0xNSw2ICsxNSw5IEBACiAjaWZuZGVmIF9SQU1aU1dBUF9EUlZfSF8KICNkZWZpbmUgX1JBTVpTV0FQX0RSVl9IXwogCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCiAjaW5jbHVkZSAicmFtenN3YXBfaW9jdGwuaCIKICNpbmNsdWRlICJ4dm1hbGxvYy5oIgogCkBAIC03MSwxNSArNzQsNiBAQAogI2RlZmluZSBTRUNUT1JTX1BFUl9QQUdFX1NISUZUCShQQUdFX1NISUZUIC0gU0VDVE9SX1NISUZUKQogI2RlZmluZSBTRUNUT1JTX1BFUl9QQUdFCSgxIDw8IFNFQ1RPUlNfUEVSX1BBR0VfU0hJRlQpCiAKLS8qIERlYnVnZ2luZyBhbmQgU3RhdHMgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19SQU1aU1dBUF9TVEFUUykKLSNkZWZpbmUgc3RhdF9pbmMoc3RhdCkJKChzdGF0KSsrKQotI2RlZmluZSBzdGF0X2RlYyhzdGF0KQkoKHN0YXQpLS0pCi0jZWxzZQotI2RlZmluZSBzdGF0X2luYyh4KQotI2RlZmluZSBzdGF0X2RlYyh4KQotI2VuZGlmCi0KIC8qIEZsYWdzIGZvciByYW16c3dhcCBwYWdlcyAodGFibGVbcGFnZV9ub10uZmxhZ3MpICovCiBlbnVtIHJ6c19wYWdlZmxhZ3MgewogCS8qIFBhZ2UgaXMgc3RvcmVkIHVuY29tcHJlc3NlZCAqLwpAQCAtMTAyLDcgKzk2LDcgQEAKIAl1MTYgb2Zmc2V0OwogCXU4IGNvdW50OwkvKiBvYmplY3QgcmVmIGNvdW50IChub3QgeWV0IHVzZWQpICovCiAJdTggZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKTs7Cit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKTsKIAogLyoKICAqIFN3YXAgZXh0ZW50IGluZm9ybWF0aW9uIGluIGNhc2UgYmFja2luZyBzd2FwIGlzIGEgcmVndWxhcgpAQCAtMTIxLDkgKzExNSwxMCBAQAogI2lmIGRlZmluZWQoQ09ORklHX1JBTVpTV0FQX1NUQVRTKQogCXU2NCBudW1fcmVhZHM7CQkvKiBmYWlsZWQgKyBzdWNjZXNzZnVsICovCiAJdTY0IG51bV93cml0ZXM7CQkvKiAtLWRvLS0gKi8KLQl1NjQgZmFpbGVkX3JlYWRzOwkvKiBjYW4gaGFwcGVuIHdoZW4gbWVtb3J5IGlzIHRvbyBsb3cgKi8KLQl1NjQgZmFpbGVkX3dyaXRlczsJLyogc2hvdWxkIE5FVkVSISBoYXBwZW4gKi8KKwl1NjQgZmFpbGVkX3JlYWRzOwkvKiBzaG91bGQgTkVWRVIhIGhhcHBlbiAqLworCXU2NCBmYWlsZWRfd3JpdGVzOwkvKiBjYW4gaGFwcGVuIHdoZW4gbWVtb3J5IGlzIHRvbyBsb3cgKi8KIAl1NjQgaW52YWxpZF9pbzsJCS8qIG5vbi1zd2FwIEkvTyByZXF1ZXN0cyAqLworCXU2NCBub3RpZnlfZnJlZTsJLyogbm8uIG9mIHN3YXAgc2xvdCBmcmVlIG5vdGlmaWNhdGlvbnMgKi8KIAl1MzIgcGFnZXNfemVybzsJCS8qIG5vLiBvZiB6ZXJvIGZpbGxlZCBwYWdlcyAqLwogCXUzMiBwYWdlc19zdG9yZWQ7CS8qIG5vLiBvZiBwYWdlcyBjdXJyZW50bHkgc3RvcmVkICovCiAJdTMyIGdvb2RfY29tcHJlc3M7CS8qICUgb2YgcGFnZXMgd2l0aCBjb21wcmVzc2lvbiByYXRpbzw9NTAlICovCkBAIC0xMzgsNiArMTMzLDcgQEAKIAl2b2lkICpjb21wcmVzc193b3JrbWVtOwogCXZvaWQgKmNvbXByZXNzX2J1ZmZlcjsKIAlzdHJ1Y3QgdGFibGUgKnRhYmxlOworCXNwaW5sb2NrX3Qgc3RhdDY0X2xvY2s7CS8qIHByb3RlY3QgNjQtYml0IHN0YXRzICovCiAJc3RydWN0IG11dGV4IGxvY2s7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnF1ZXVlOwogCXN0cnVjdCBnZW5kaXNrICpkaXNrOwpAQCAtMTY3LDUgKzE2Myw0OCBAQAogCiAvKi0tICovCiAKLSNlbmRpZgorLyogRGVidWdnaW5nIGFuZCBTdGF0cyAqLworI2lmIGRlZmluZWQoQ09ORklHX1JBTVpTV0FQX1NUQVRTKQorc3RhdGljIHZvaWQgcnpzX3N0YXRfaW5jKHUzMiAqdikKK3sKKwkqdiA9ICp2ICsgMTsKK30KIAorc3RhdGljIHZvaWQgcnpzX3N0YXRfZGVjKHUzMiAqdikKK3sKKwkqdiA9ICp2IC0gMTsKK30KKworc3RhdGljIHZvaWQgcnpzX3N0YXQ2NF9pbmMoc3RydWN0IHJhbXpzd2FwICpyenMsIHU2NCAqdikKK3sKKwlzcGluX2xvY2soJnJ6cy0+c3RhdDY0X2xvY2spOworCSp2ID0gKnYgKyAxOworCXNwaW5fdW5sb2NrKCZyenMtPnN0YXQ2NF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgcnpzX3N0YXQ2NF9kZWMoc3RydWN0IHJhbXpzd2FwICpyenMsIHU2NCAqdikKK3sKKwlzcGluX2xvY2soJnJ6cy0+c3RhdDY0X2xvY2spOworCSp2ID0gKnYgLSAxOworCXNwaW5fdW5sb2NrKCZyenMtPnN0YXQ2NF9sb2NrKTsKK30KKworc3RhdGljIHU2NCByenNfc3RhdDY0X3JlYWQoc3RydWN0IHJhbXpzd2FwICpyenMsIHU2NCAqdikKK3sKKwl1NjQgdmFsOworCisJc3Bpbl9sb2NrKCZyenMtPnN0YXQ2NF9sb2NrKTsKKwl2YWwgPSAqdjsKKwlzcGluX3VubG9jaygmcnpzLT5zdGF0NjRfbG9jayk7CisKKwlyZXR1cm4gdmFsOworfQorI2Vsc2UKKyNkZWZpbmUgcnpzX3N0YXRfaW5jKHYpCisjZGVmaW5lIHJ6c19zdGF0X2RlYyh2KQorI2RlZmluZSByenNfc3RhdDY0X2luYyhyLCB2KQorI2RlZmluZSByenNfc3RhdDY0X2RlYyhyLCB2KQorI2RlZmluZSByenNfc3RhdDY0X3JlYWQociwgdikKKyNlbmRpZiAvKiBDT05GSUdfUkFNWlNXQVBfU1RBVFMgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXBfaW9jdGwuaCBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcF9pb2N0bC5oCmluZGV4IGM3MTNhMDkuLmQyNjA3NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcF9pb2N0bC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcF9pb2N0bC5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvbXByZXNzZWQgUkFNIGJhc2VkIHN3YXAgZGV2aWNlCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5ICBOaXRpbiBHdXB0YQorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwICBOaXRpbiBHdXB0YQogICoKICAqIFRoaXMgY29kZSBpcyByZWxlYXNlZCB1c2luZyBhIGR1YWwgbGljZW5zZSBzdHJhdGVneTogQlNEL0dQTAogICogWW91IGNhbiBjaG9vc2UgdGhlIGxpY2VuY2UgdGhhdCBiZXR0ZXIgZml0cyB5b3VyIHJlcXVpcmVtZW50cy4KQEAgLTI0LDkgKzI0LDEwIEBACiAJCQkJICogc2l6ZSAoaWYgcHJlc2VudCkgKi8KIAl1NjQgbnVtX3JlYWRzOwkJLyogZmFpbGVkICsgc3VjY2Vzc2Z1bCAqLwogCXU2NCBudW1fd3JpdGVzOwkJLyogLS1kby0tICovCi0JdTY0IGZhaWxlZF9yZWFkczsJLyogY2FuIGhhcHBlbiB3aGVuIG1lbW9yeSBpcyB0b28gbG93ICovCi0JdTY0IGZhaWxlZF93cml0ZXM7CS8qIHNob3VsZCBORVZFUiEgaGFwcGVuICovCisJdTY0IGZhaWxlZF9yZWFkczsJLyogc2hvdWxkIE5FVkVSISBoYXBwZW4gKi8KKwl1NjQgZmFpbGVkX3dyaXRlczsJLyogY2FuIGhhcHBlbiB3aGVuIG1lbW9yeSBpcyB0b28gbG93ICovCiAJdTY0IGludmFsaWRfaW87CQkvKiBub24tc3dhcCBJL08gcmVxdWVzdHMgKi8KKwl1NjQgbm90aWZ5X2ZyZWU7CS8qIG5vLiBvZiBzd2FwIHNsb3QgZnJlZSBub3RpZmljYXRpb25zICovCiAJdTMyIHBhZ2VzX3plcm87CQkvKiBuby4gb2YgemVybyBmaWxsZWQgcGFnZXMgKi8KIAl1MzIgZ29vZF9jb21wcmVzc19wY3Q7CS8qIG5vLiBvZiBwYWdlcyB3aXRoIGNvbXByZXNzaW9uIHJhdGlvPD01MCUgKi8KIAl1MzIgcGFnZXNfZXhwYW5kX3BjdDsJLyogbm8uIG9mIGluY29tcHJlc3NpYmxlIHBhZ2VzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAveHZtYWxsb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC94dm1hbGxvYy5jCmluZGV4IGIzZTk4NmMuLjNmZGJiOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC94dm1hbGxvYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC94dm1hbGxvYy5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIHh2bWFsbG9jIG1lbW9yeSBhbGxvY2F0b3IKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgIE5pdGluIEd1cHRhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAgIE5pdGluIEd1cHRhCiAgKgogICogVGhpcyBjb2RlIGlzIHJlbGVhc2VkIHVzaW5nIGEgZHVhbCBsaWNlbnNlIHN0cmF0ZWd5OiBCU0QvR1BMCiAgKiBZb3UgY2FuIGNob29zZSB0aGUgbGljZW5jZSB0aGF0IGJldHRlciBmaXRzIHlvdXIgcmVxdWlyZW1lbnRzLgpAQCAtMjczLDcgKzI3Myw3IEBACiB9CiAKIC8qCi0gKiBBbGxvY2F0ZSBhIHBhZ2UgYW5kIGFkZCBpdCBmcmVlbGlzdCBvZiBnaXZlbiBwb29sLgorICogQWxsb2NhdGUgYSBwYWdlIGFuZCBhZGQgaXQgdG8gZnJlZWxpc3Qgb2YgZ2l2ZW4gcG9vbC4KICAqLwogc3RhdGljIGludCBncm93X3Bvb2woc3RydWN0IHh2X3Bvb2wgKnBvb2wsIGdmcF90IGZsYWdzKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3h2bWFsbG9jLmggYi9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAveHZtYWxsb2MuaAppbmRleCAwMTBjNmZlLi41YjFhODFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAveHZtYWxsb2MuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAveHZtYWxsb2MuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiB4dm1hbGxvYyBtZW1vcnkgYWxsb2NhdG9yCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5ICBOaXRpbiBHdXB0YQorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwICBOaXRpbiBHdXB0YQogICoKICAqIFRoaXMgY29kZSBpcyByZWxlYXNlZCB1c2luZyBhIGR1YWwgbGljZW5zZSBzdHJhdGVneTogQlNEL0dQTAogICogWW91IGNhbiBjaG9vc2UgdGhlIGxpY2VuY2UgdGhhdCBiZXR0ZXIgZml0cyB5b3VyIHJlcXVpcmVtZW50cy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC94dm1hbGxvY19pbnQuaCBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC94dm1hbGxvY19pbnQuaAppbmRleCAwM2MxYTY1Li5lMjNlZDVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAveHZtYWxsb2NfaW50LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3h2bWFsbG9jX2ludC5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIHh2bWFsbG9jIG1lbW9yeSBhbGxvY2F0b3IKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgIE5pdGluIEd1cHRhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAgIE5pdGluIEd1cHRhCiAgKgogICogVGhpcyBjb2RlIGlzIHJlbGVhc2VkIHVzaW5nIGEgZHVhbCBsaWNlbnNlIHN0cmF0ZWd5OiBCU0QvR1BMCiAgKiBZb3UgY2FuIGNob29zZSB0aGUgbGljZW5jZSB0aGF0IGJldHRlciBmaXRzIHlvdXIgcmVxdWlyZW1lbnRzLgpAQCAtNjIsNyArNjIsNyBAQAogCiBzdHJ1Y3QgYmxvY2tfaGVhZGVyIHsKIAl1bmlvbiB7Ci0JCS8qIFRoaXMgY29tbW9uIGhlYWRlciBtdXN0IGJlIEFMSUdOIGJ5dGVzICovCisJCS8qIFRoaXMgY29tbW9uIGhlYWRlciBtdXN0IGJlIFhWX0FMSUdOIGJ5dGVzICovCiAJCXU4IGNvbW1vbltYVl9BTElHTl07CiAJCXN0cnVjdCB7CiAJCQl1MTYgc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9yYXIvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9yYXIvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdmOGJmMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcmFyL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0jCi0jIFJBUiBkZXZpY2UgY29uZmlndXJhdGlvbgotIwotCi1tZW51ICJSQVIgUmVnaXN0ZXIgRHJpdmVyIgotIwotIwlSZXN0cmljdGVkIEFjY2VzcyBSZWdpc3RlciBNYW5hZ2VyCi0jCi1jb25maWcgUkFSX1JFR0lTVEVSCi0JdHJpc3RhdGUgIlJlc3RyaWN0ZWQgQWNjZXNzIFJlZ2lvbiBSZWdpc3RlciBEcml2ZXIiCi0JZGVmYXVsdCBuCi0JLS0taGVscC0tLQotCQlUaGlzIGRyaXZlciBhbGxvd3Mgb3RoZXIga2VybmVsIGRyaXZlcnMgYWNjZXNzIHRvIHRoZQotCQljb250ZW50cyBvZiB0aGUgcmVzdHJpY3RlZCBhY2Nlc3MgcmVnaW9uIGNvbnRyb2wKLQkJcmVnaXN0ZXJzLgotCi1lbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFyL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3Jhci9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQyMmVkMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcmFyL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1FWFRSQV9DRkxBR1MgKz0gLURMSVRUTEVfX0VORElBTgotb2JqLSQoQ09ORklHX1JBUl9SRUdJU1RFUikgKz0gcmFyX2RyaXZlci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFyL3Jhcl9kcml2ZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9yYXIvcmFyX2RyaXZlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODVkMTg5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9yYXIvcmFyX2RyaXZlci5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQ0ICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgva2Rldl90Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgInJhcl9kcml2ZXIuaCIKLQotLyogVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIElQQyBwcm9jZXNzIHRvIHJldHJpZXZlIFJBUiBpbiAqLwotCi0vKiA9PT0gTGluY3JvZnQgTWVzc2FnZSBCdXMgSW50ZXJmYWNlID09PSAqLwotLyogTWVzc2FnZSBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIExOQ19NQ1JfT0ZGU0VUIDB4RDAKLQotLyogTWVzc2FnZSBEYXRhIFJlZ2lzdGVyICovCi0jZGVmaW5lIExOQ19NRFJfT0ZGU0VUIDB4RDQKLQotLyogTWVzc2FnZSBPcGNvZGVzICovCi0jZGVmaW5lIExOQ19NRVNTQUdFX1JFQURfT1BDT0RFICAweEQwCi0jZGVmaW5lIExOQ19NRVNTQUdFX1dSSVRFX09QQ09ERSAweEUwCi0KLS8qIE1lc3NhZ2UgV3JpdGUgQnl0ZSBFbmFibGVzICovCi0jZGVmaW5lIExOQ19NRVNTQUdFX0JZVEVfV1JJVEVfRU5BQkxFUyAweEYKLQotLyogQi11bml0IFBvcnQgKi8KLSNkZWZpbmUgTE5DX0JVTklUX1BPUlQgMHgzCi0KLS8qID09PSBMaW5jcm9mdCBCLVVuaXQgUmVnaXN0ZXJzIC0gUHJvZ3JhbW1lZCBieSBJQTMyIGZpcm13YXJlID09PSAqLwotI2RlZmluZSBMTkNfQlJBUjBMICAweDEwCi0jZGVmaW5lIExOQ19CUkFSMEggIDB4MTEKLSNkZWZpbmUgTE5DX0JSQVIxTCAgMHgxMgotI2RlZmluZSBMTkNfQlJBUjFIICAweDEzCi0KLS8qIFJlc2VydmVkIGZvciBTZVAgKi8KLSNkZWZpbmUgTE5DX0JSQVIyTCAgMHgxNAotI2RlZmluZSBMTkNfQlJBUjJIICAweDE1Ci0KLQotLyogVGhpcyBzdHJ1Y3R1cmUgaXMgb25seSB1c2VkIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24uICovCi1zdHJ1Y3QgUkFSX29mZnNldHMgewotCWludCBsb3c7IC8qIFJlZ2lzdGVyIG9mZnNldCBmb3IgbG93IFJBUiBwaHlzaWNhbCBhZGRyZXNzLiAqLwotCWludCBoaWdoOyAvKiBSZWdpc3RlciBvZmZzZXQgZm9yIGhpZ2ggUkFSIHBoeXNpY2FsIGFkZHJlc3MuICovCi19OwotCi1zdHJ1Y3QgcGNpX2RldiAqcmFyX2RldjsKLXN0YXRpYyB1aW50MzJfdCByZWdpc3RlcmVkOwotCi0vKiBNb29yZXN0b3duIHN1cHBvcnRzIHRocmVlIHJlc3RyaWN0ZWQgYWNjZXNzIHJlZ2lvbnMuICovCi0jZGVmaW5lIE1SU1RfTlVNX1JBUiAzCi0KLXN0cnVjdCBSQVJfYWRkcmVzc19zdHJ1Y3QgcmFyX2FkZHJbTVJTVF9OVU1fUkFSXTsKLQotLyogcHJvdG90eXBlIGZvciBpbml0ICovCi1zdGF0aWMgaW50IF9faW5pdCByYXJfaW5pdF9oYW5kbGVyKHZvaWQpOwotc3RhdGljIHZvaWQgX19leGl0IHJhcl9leGl0X2hhbmRsZXIodm9pZCk7Ci0KLS8qCi0gIGZ1bmN0aW9uIHRoYXQgaXMgYWN0aXZhdGVkIG9uIHRoZSBzdWNjZXNzZnVsbCBwcm9iZSBvZiB0aGUgUkFSIGRldmljZQotKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHJhcl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCByYXJfcGNpX2lkX3RibFtdID0gewotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDQxMTApIH0sCi0JeyAwIH0KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCByYXJfcGNpX2lkX3RibCk7Ci0KLS8qIGZpZWxkIGZvciByZWdpc3RlcmluZyBkcml2ZXIgdG8gUENJIGRldmljZSAqLwotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJhcl9wY2lfZHJpdmVyID0gewotCS5uYW1lID0gInJhcl9kcml2ZXIiLAotCS5pZF90YWJsZSA9IHJhcl9wY2lfaWRfdGJsLAotCS5wcm9iZSA9IHJhcl9wcm9iZQotfTsKLQotLyogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJldHJpZXZlZCBSQVIgaW5mbyB1c2luZyB0aGUgSVBDIG1lc3NhZ2UKLSAgIGJ1cyBpbnRlcmZhY2UgKi8KLXN0YXRpYyBpbnQgbWVtcmFyX2dldF9yYXJfYWRkcihzdHJ1Y3QgcGNpX2RldiogcGRldiwKLQkgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCwKLQkgICAgICAgICAgICAgICAgICAgICAgdTMyICphZGRyKQotewotCS8qCi0JICogPT09PT09PT0gVGhlIExpbmNyb2Z0IE1lc3NhZ2UgQnVzIEludGVyZmFjZSA9PT09PT09PQotCSAqIExpbmNyb2Z0IHJlZ2lzdGVycyBtYXkgYmUgb2J0YWluZWQgZnJvbSB0aGUgUENJCi0JICogKHRoZSBIb3N0IEJyaWRnZSkgdXNpbmcgdGhlIExpbmNyb2Z0IE1lc3NhZ2UgQnVzCi0JICogSW50ZXJmYWNlLiAgVGhhdCBtZXNzYWdlIGJ1cyBpbnRlcmZhY2UgaXMgZ2VuZXJhbGx5Ci0JICogY29tcHJpc2VkIG9mIHR3byByZWdpc3RlcnM6IGEgY29udHJvbCByZWdpc3RlciAoTUNSLCAweERPKQotCSAqIGFuZCBhIGRhdGEgcmVnaXN0ZXIgKE1EUiwgMHhENCkuCi0JICoKLQkgKiBUaGUgTUNSIChtZXNzYWdlIGNvbnRyb2wgcmVnaXN0ZXIpIGZvcm1hdCBpcyB0aGUgZm9sbG93aW5nOgotCSAqICAgMS4gIFszMToyNF06IE9wY29kZQotCSAqICAgMi4gIFsyMzoxNl06IFBvcnQKLQkgKiAgIDMuICBbMTU6OF06IFJlZ2lzdGVyIE9mZnNldAotCSAqICAgNC4gIFs3OjRdOiBCeXRlIEVuYWJsZXMgKHVzZSAweEYgdG8gc2V0IGFsbCBvZiB0aGVzZSBiaXRzCi0JICogICAgICAgICAgICAgIHRvIDEpCi0JICogICA1LiAgWzM6MF06IHJlc2VydmVkCi0JICoKLQkgKiAgUmVhZCAoMHhEMCkgYW5kIHdyaXRlICgweEUwKSBvcGNvZGVzIGFyZSB3cml0dGVuIHRvIHRoZQotCSAqICBjb250cm9sIHJlZ2lzdGVyIHdoZW4gcmVhZGluZyBhbmQgd3JpdGluZyB0byBMaW5jcm9mdAotCSAqICByZWdpc3RlcnMsIHJlc3BlY3RpdmVseS4KLQkgKgotCSAqICBXZSdyZSBpbnRlcmVzdGVkIGluIHJlZ2lzdGVycyBmb3VuZCBpbiB0aGUgTGluY3JvZnQKLQkgKiAgQi11bml0LiAgVGhlIEItdW5pdCBwb3J0IGlzIDB4My4KLQkgKgotCSAqICBUaGUgc2l4IEItdW5pdCBSQVIgcmVnaXN0ZXIgb2Zmc2V0cyB3ZSB1c2UgYXJlIGxpc3RlZAotCSAqICBlYXJsaWVyIGluIHRoaXMgZmlsZS4KLQkgKgotCSAqICBMYXN0bHkgd3JpdGluZyB0byB0aGUgTUNSIHJlZ2lzdGVyIHJlcXVpcmVzIHRoZSAiQnl0ZQotCSAqICBlbmFibGVzIiBiaXRzIHRvIGJlIHNldCB0byAxLiAgVGhpcyBtYXkgYmUgYWNoaWV2ZWQgYnkKLQkgKiAgd3JpdGluZyAweEYgYXQgYml0IDQuCi0JICoKLQkgKiBUaGUgTURSIChtZXNzYWdlIGRhdGEgcmVnaXN0ZXIpIGZvcm1hdCBpcyB0aGUgZm9sbG93aW5nOgotCSAqICAgMS4gWzMxOjBdOiBSZWFkL1dyaXRlIERhdGEKLQkgKgotCSAqICBEYXRhIGJlaW5nIHJlYWQgZnJvbSB0aGlzIHJlZ2lzdGVyIGlzIG9ubHkgYXZhaWxhYmxlIGFmdGVyCi0JICogIHdyaXRpbmcgdGhlIGFwcHJvcHJpYXRlIGNvbnRyb2wgbWVzc2FnZSB0byB0aGUgTUNSCi0JICogIHJlZ2lzdGVyLgotCSAqCi0JICogIERhdGEgYmVpbmcgd3JpdHRlbiB0byB0aGlzIHJlZ2lzdGVyIG11c3QgYmUgd3JpdHRlbiBiZWZvcmUKLQkgKiAgd3JpdGluZyB0aGUgYXBwcm9wcmlhdGUgY29udHJvbCBtZXNzYWdlIHRvIHRoZSBNQ1IKLQkgKiAgcmVnaXN0ZXIuCi0JICovCi0KLQlpbnQgcmVzdWx0ID0gMDsgLyogcmVzdWx0ICovCi0JLyogQ29uc3RydWN0IGNvbnRyb2wgbWVzc2FnZSAqLwotCXUzMiBjb25zdCBtZXNzYWdlID0KLQkgICAgICAgKExOQ19NRVNTQUdFX1JFQURfT1BDT0RFIDw8IDI0KQotCSAgICAgICB8IChMTkNfQlVOSVRfUE9SVCA8PCAxNikKLQkgICAgICAgfCAob2Zmc2V0IDw8IDgpCi0JICAgICAgIHwgKExOQ19NRVNTQUdFX0JZVEVfV1JJVEVfRU5BQkxFUyA8PCA0KTsKLQotCXByaW50ayhLRVJOX1dBUk5JTkcgInJhci0gb2Zmc2V0IHRvIExOQyBNU0cgaXMgJXhcbiIsb2Zmc2V0KTsKLQotCWlmIChhZGRyID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogU2VuZCB0aGUgY29udHJvbCBtZXNzYWdlICovCi0JcmVzdWx0ID0gcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgTE5DX01DUl9PRkZTRVQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlKTsKLQotCXByaW50ayhLRVJOX1dBUk5JTkcgInJhci0gcmVzdWx0IGZyb20gc2VuZCBjdGwgcmVnaXN0ZXIgaXMgJXhcbiIKLQkgICxyZXN1bHQpOwotCi0JaWYgKCFyZXN1bHQpCi0JCXJlc3VsdCA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMTkNfTURSX09GRlNFVCwKLQkJCQkgICAgICAgICAgICAgIGFkZHIpOwotCi0JcHJpbnRrKEtFUk5fV0FSTklORyAicmFyLSByZXN1bHQgZnJvbSByZWFkIGRhdGEgcmVnaXN0ZXIgaXMgJXhcbiIsCi0JICByZXN1bHQpOwotCi0JcHJpbnRrKEtFUk5fV0FSTklORyAicmFyLSB2YWx1ZSByZWFkIGZyb20gZGF0YSByZWdpc3RlciBpcyAleFxuIiwKLQkgICphZGRyKTsKLQotCWlmIChyZXN1bHQpCi0JCXJldHVybiAtMTsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1lbXJhcl9zZXRfcmFyX2FkZHIoc3RydWN0IHBjaV9kZXYqIHBkZXYsCi0JICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQsCi0JICAgICAgICAgICAgICAgICAgICAgIHUzMiBhZGRyKQotewotCS8qCi0JICogPT09PT09PT0gVGhlIExpbmNyb2Z0IE1lc3NhZ2UgQnVzIEludGVyZmFjZSA9PT09PT09PQotCSAqIExpbmNyb2Z0IHJlZ2lzdGVycyBtYXkgYmUgb2J0YWluZWQgZnJvbSB0aGUgUENJCi0JICogKHRoZSBIb3N0IEJyaWRnZSkgdXNpbmcgdGhlIExpbmNyb2Z0IE1lc3NhZ2UgQnVzCi0JICogSW50ZXJmYWNlLiAgVGhhdCBtZXNzYWdlIGJ1cyBpbnRlcmZhY2UgaXMgZ2VuZXJhbGx5Ci0JICogY29tcHJpc2VkIG9mIHR3byByZWdpc3RlcnM6IGEgY29udHJvbCByZWdpc3RlciAoTUNSLCAweERPKQotCSAqIGFuZCBhIGRhdGEgcmVnaXN0ZXIgKE1EUiwgMHhENCkuCi0JICoKLQkgKiBUaGUgTUNSIChtZXNzYWdlIGNvbnRyb2wgcmVnaXN0ZXIpIGZvcm1hdCBpcyB0aGUgZm9sbG93aW5nOgotCSAqICAgMS4gIFszMToyNF06IE9wY29kZQotCSAqICAgMi4gIFsyMzoxNl06IFBvcnQKLQkgKiAgIDMuICBbMTU6OF06IFJlZ2lzdGVyIE9mZnNldAotCSAqICAgNC4gIFs3OjRdOiBCeXRlIEVuYWJsZXMgKHVzZSAweEYgdG8gc2V0IGFsbCBvZiB0aGVzZSBiaXRzCi0JICogICAgICAgICAgICAgIHRvIDEpCi0JICogICA1LiAgWzM6MF06IHJlc2VydmVkCi0JICoKLQkgKiAgUmVhZCAoMHhEMCkgYW5kIHdyaXRlICgweEUwKSBvcGNvZGVzIGFyZSB3cml0dGVuIHRvIHRoZQotCSAqICBjb250cm9sIHJlZ2lzdGVyIHdoZW4gcmVhZGluZyBhbmQgd3JpdGluZyB0byBMaW5jcm9mdAotCSAqICByZWdpc3RlcnMsIHJlc3BlY3RpdmVseS4KLQkgKgotCSAqICBXZSdyZSBpbnRlcmVzdGVkIGluIHJlZ2lzdGVycyBmb3VuZCBpbiB0aGUgTGluY3JvZnQKLQkgKiAgQi11bml0LiAgVGhlIEItdW5pdCBwb3J0IGlzIDB4My4KLQkgKgotCSAqICBUaGUgc2l4IEItdW5pdCBSQVIgcmVnaXN0ZXIgb2Zmc2V0cyB3ZSB1c2UgYXJlIGxpc3RlZAotCSAqICBlYXJsaWVyIGluIHRoaXMgZmlsZS4KLQkgKgotCSAqICBMYXN0bHkgd3JpdGluZyB0byB0aGUgTUNSIHJlZ2lzdGVyIHJlcXVpcmVzIHRoZSAiQnl0ZQotCSAqICBlbmFibGVzIiBiaXRzIHRvIGJlIHNldCB0byAxLiAgVGhpcyBtYXkgYmUgYWNoaWV2ZWQgYnkKLQkgKiAgd3JpdGluZyAweEYgYXQgYml0IDQuCi0JICoKLQkgKiBUaGUgTURSIChtZXNzYWdlIGRhdGEgcmVnaXN0ZXIpIGZvcm1hdCBpcyB0aGUgZm9sbG93aW5nOgotCSAqICAgMS4gWzMxOjBdOiBSZWFkL1dyaXRlIERhdGEKLQkgKgotCSAqICBEYXRhIGJlaW5nIHJlYWQgZnJvbSB0aGlzIHJlZ2lzdGVyIGlzIG9ubHkgYXZhaWxhYmxlIGFmdGVyCi0JICogIHdyaXRpbmcgdGhlIGFwcHJvcHJpYXRlIGNvbnRyb2wgbWVzc2FnZSB0byB0aGUgTUNSCi0JICogIHJlZ2lzdGVyLgotCSAqCi0JICogIERhdGEgYmVpbmcgd3JpdHRlbiB0byB0aGlzIHJlZ2lzdGVyIG11c3QgYmUgd3JpdHRlbiBiZWZvcmUKLQkgKiAgd3JpdGluZyB0aGUgYXBwcm9wcmlhdGUgY29udHJvbCBtZXNzYWdlIHRvIHRoZSBNQ1IKLQkgKiAgcmVnaXN0ZXIuCi0JICovCi0KLQlpbnQgcmVzdWx0ID0gMDsgLyogcmVzdWx0ICovCi0KLQkvKiBDb25zdHJ1Y3QgY29udHJvbCBtZXNzYWdlICovCi0JdTMyIGNvbnN0IG1lc3NhZ2UgPQotCSAgICAgICAoTE5DX01FU1NBR0VfV1JJVEVfT1BDT0RFIDw8IDI0KQotCSAgICAgICB8IChMTkNfQlVOSVRfUE9SVCA8PCAxNikKLQkgICAgICAgfCAob2Zmc2V0IDw8IDgpCi0JICAgICAgIHwgKExOQ19NRVNTQUdFX0JZVEVfV1JJVEVfRU5BQkxFUyA8PCA0KTsKLQotCXByaW50ayhLRVJOX1dBUk5JTkcgInJhci0gb2Zmc2V0IHRvIExOQyBNU0cgaXMgJXhcbiIsb2Zmc2V0KTsKLQotCWlmIChhZGRyID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogU2VuZCB0aGUgY29udHJvbCBtZXNzYWdlICovCi0JcmVzdWx0ID0gcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgTE5DX01EUl9PRkZTRVQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyKTsKLQotCXByaW50ayhLRVJOX1dBUk5JTkcgInJhci0gcmVzdWx0IGZyb20gc2VuZCBjdGwgcmVnaXN0ZXIgaXMgJXhcbiIKLQkgICxyZXN1bHQpOwotCi0JaWYgKCFyZXN1bHQpCi0JCXJlc3VsdCA9IHBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTE5DX01DUl9PRkZTRVQsCi0JCQkJICAgICAgICAgICAgICBtZXNzYWdlKTsKLQotCXByaW50ayhLRVJOX1dBUk5JTkcgInJhci0gcmVzdWx0IGZyb20gd3JpdGUgZGF0YSByZWdpc3RlciBpcyAleFxuIiwKLQkgIHJlc3VsdCk7Ci0KLQlwcmludGsoS0VSTl9XQVJOSU5HICJyYXItIHZhbHVlIHJlYWQgdG8gZGF0YSByZWdpc3RlciBpcyAleFxuIiwKLQkgIGFkZHIpOwotCi0JaWYgKHJlc3VsdCkKLQkJcmV0dXJuIC0xOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLS8qCi0KLSAqIEluaXRpYWxpemUgUkFSIHBhcmFtZXRlcnMsIHN1Y2ggYXMgcGh5c2ljYWwgYWRkcmVzc2VzLCBldGMuCi0KLSAqLwotc3RhdGljIGludCBtZW1yYXJfaW5pdF9yYXJfcGFyYW1zKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBSQVJfb2Zmc2V0cyBjb25zdCBvZmZzZXRzW10gPSB7Ci0JICAgICAgIHsgTE5DX0JSQVIwTCwgTE5DX0JSQVIwSCB9LAotCSAgICAgICB7IExOQ19CUkFSMUwsIExOQ19CUkFSMUggfSwKLQkgICAgICAgeyBMTkNfQlJBUjJMLCBMTkNfQlJBUjJIIH0KLQl9OwotCi0Jc2l6ZV90IGNvbnN0IG51bV9vZmZzZXRzID0gc2l6ZW9mKG9mZnNldHMpIC8gc2l6ZW9mKG9mZnNldHNbMF0pOwotCXN0cnVjdCBSQVJfb2Zmc2V0cyBjb25zdCAqZW5kID0gb2Zmc2V0cyArIG51bV9vZmZzZXRzOwotCXN0cnVjdCBSQVJfb2Zmc2V0cyBjb25zdCAqaTsKLQl1bnNpZ25lZCBpbnQgbiA9IDA7Ci0JaW50IHJlc3VsdCA9IDA7Ci0KLQkvKiBSZXRyaWV2ZSBSQVIgc3RhcnQgYW5kIGVuZCBwaHlzaWNhbCBhZGRyZXNzZXMuICovCi0KLQkvKgotCSAqIEFjY2VzcyB0aGUgUkFSIHJlZ2lzdGVycyB0aHJvdWdoIHRoZSBMaW5jcm9mdCBNZXNzYWdlIEJ1cwotCSAqIEludGVyZmFjZSBvbiBQQ0kgZGV2aWNlOiAwMDowMC4wIEhvc3QgYnJpZGdlLgotCSAqLwotCi0JLyogc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdCgwLCBQQ0lfREVWRk4oMCwwKSk7ICovCi0KLQlpZiAocGRldiA9PSBOVUxMKQotCSAgICAgICByZXR1cm4gLUVOT0RFVjsKLQotCWZvciAoaSA9IG9mZnNldHM7IGkgIT0gZW5kOyArK2ksICsrbikgewotCSAgICAgICBpZiAobWVtcmFyX2dldF9yYXJfYWRkciAocGRldiwKLQkJICAgICAgICAgICAgICAgICAgICAgICAoKmkpLmxvdywKLQkJICAgICAgICAgICAgICAgICAgICAgICAmKHJhcl9hZGRyW25dLmxvdykpICE9IDAKLQkJICAgfHwgbWVtcmFyX2dldF9yYXJfYWRkciAocGRldiwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAoKmkpLmhpZ2gsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgJihyYXJfYWRkcltuXS5oaWdoKSkgIT0gMCkgewotCQkgICAgICAgcmVzdWx0ID0gLTE7Ci0JCSAgICAgICBicmVhazsKLQkgICAgICAgfQotCX0KLQotCS8qIERvbmUgYWNjZXNzaW5nIHRoZSBkZXZpY2UuICovCi0JLyogcGNpX2Rldl9wdXQocGRldik7ICovCi0KLQlpZiAocmVzdWx0ID09IDApIHsKLQlpZigxKSB7Ci0JICAgICAgIHNpemVfdCB6OwotCSAgICAgICBmb3IgKHogPSAwOyB6ICE9IE1SU1RfTlVNX1JBUjsgKyt6KSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJyYXIgLSBCUkFSWyVaZF0gcGh5c2ljYWwgYWRkcmVzcyBsb3dcbiIKLQkJCSAgICAgIlx0bG93OiAgMHglMDh4XG4iCi0JCQkgICAgICJcdGhpZ2g6IDB4JTA4eFxuIiwKLQkJCSAgICAgeiwKLQkJCSAgICAgcmFyX2FkZHJbel0ubG93LAotCQkJICAgICByYXJfYWRkclt6XS5oaWdoKTsKLQkJCX0KLQkgICAgICAgfQotCX0KLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0gIGZ1bmN0aW9uIHRoYXQgaXMgYWN0aXZhdGVkIG9uIHRoZSBzdWNjZXNzZnVsbCBwcm9iZSBvZiB0aGUgUkFSIGRldmljZQotKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHJhcl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKLXsKLQkvKiBlcnJvciAqLwotCWludCBlcnJvcjsKLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JQ09ERQotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLQlERUJVR19QUklOVF8wKFJBUl9ERUJVR19MRVZFTF9FWFRFTkRFRCwKLQkgICJSYXIgcGNpIHByb2JlIHN0YXJ0aW5nXG4iKTsKLQllcnJvciA9IDA7Ci0KLQkvKiBlbmFibGUgdGhlIGRldmljZSAqLwotCWVycm9yID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0JaWYgKGVycm9yKSB7Ci0JCURFQlVHX1BSSU5UXzAoUkFSX0RFQlVHX0xFVkVMX0VYVEVOREVELAotCQkgICJlcnJvciBlbmFibGluZyBwY2kgZGV2aWNlXG4iKTsKLQkJZ290byBlbmRfZnVuY3Rpb247Ci0JfQotCi0JcmFyX2RldiA9IHBkZXY7Ci0JcmVnaXN0ZXJlZCA9IDE7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBSQVIgcGFyYW1ldGVycywgd2hpY2ggaGF2ZSB0byBiZSByZXRyaWV2ZWQgKi8KLQkvKiB2aWEgdGhlIG1lc3NhZ2UgYnVzIHNlcnZpY2UgKi8KLQllcnJvcj1tZW1yYXJfaW5pdF9yYXJfcGFyYW1zKHJhcl9kZXYpOwotCi0JaWYgKGVycm9yKSB7Ci0JCURFQlVHX1BSSU5UXzAoUkFSX0RFQlVHX0xFVkVMX0VYVEVOREVELAotCQkgICJlcnJvciBnZXR0aW5nIFJBUiBhZGRyZXNzZXMgZGV2aWNlXG4iKTsKLQkJcmVnaXN0ZXJlZCA9IDA7Ci0JCWdvdG8gZW5kX2Z1bmN0aW9uOwotCQl9Ci0KLWVuZF9mdW5jdGlvbjoKLQotCXJldHVybiBlcnJvcjsKLX0KLQotLyoKLSAgdGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgdGggZHJpdmVyIHRvCi0gIHRoZSBkZXZpY2Ugc3Vic3lzdGVtKCBlaXRoZXIgUENJLCBVU0IsIGV0YykKLSovCi1zdGF0aWMgaW50IF9faW5pdCByYXJfaW5pdF9oYW5kbGVyKHZvaWQpCi17Ci0JcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnJhcl9wY2lfZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHJhcl9leGl0X2hhbmRsZXIodm9pZCkKLXsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnJhcl9wY2lfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQocmFyX2luaXRfaGFuZGxlcik7Ci1tb2R1bGVfZXhpdChyYXJfZXhpdF9oYW5kbGVyKTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0KLS8qIFRoZSBnZXRfcmFyX2FkZHJlc3MgZnVuY3Rpb24gaXMgdXNlZCBieSBvdGhlciBkZXZpY2UgZHJpdmVycwotICogdG8gb2J0YWluIFJBUiBhZGRyZXNzIGluZm9ybWF0aW9uIG9uIGEgUkFSLiBJdCB0YWtlcyB0d28KLSAqIHBhcmFtZXRlcjoKLSAqCi0gKiBpbnQgcmFyX2luZGV4Ci0gKiBUaGUgcmFyX2luZGV4IGlzIGFuIGluZGV4IHRvIHRoZSByYXIgZm9yIHdoaWNoIHlvdSB3aXNoIHRvIHJldHJpZXZlCi0gKiB0aGUgYWRkcmVzcyBpbmZvcm1hdGlvbi4KLSAqIFZhbHVlcyBjYW4gYmUgMCwxLCBvciAyLgotICoKLSAqIHN0cnVjdCBSQVJfYWRkcmVzc19zdHJ1Y3QgaXMgYSBwb2ludGVyIHRvIGEgcGxhY2UgdG8gd2hpY2ggdGhlIGZ1bmN0aW9uCi0gKiBjYW4gcmV0dXJuIHRoZSBhZGRyZXNzIHN0cnVjdHVyZSBmb3IgdGhlIFJBUi4KLSAqCi0gKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIDAgdXBvbiBzdWNjZXNzIG9yIGEgLTEgaWYgdGhlcmUgaXMgbm8gUkFSCi0gKiBmYWNpbGl0eSBvbiB0aGlzIHN5c3RlbS4KLSAqLwotaW50IGdldF9yYXJfYWRkcmVzcyhpbnQgcmFyX2luZGV4LHN0cnVjdCBSQVJfYWRkcmVzc19zdHJ1Y3QgKmFkZHJlc3NlcykKLXsKLQlpZiAocmVnaXN0ZXJlZCAmJiAocmFyX2luZGV4IDwgMykgJiYgKHJhcl9pbmRleCA+PSAwKSkgewotCQkqYWRkcmVzc2VzPXJhcl9hZGRyW3Jhcl9pbmRleF07Ci0JCS8qIHN0cmlwIG9mZiBsb2NrIGJpdCBpbmZvcm1hdGlvbiAgKi8KLQkJYWRkcmVzc2VzLT5sb3cgPSBhZGRyZXNzZXMtPmxvdyAmIDB4ZmZmZmZmZjA7Ci0JCWFkZHJlc3Nlcy0+aGlnaCA9IGFkZHJlc3Nlcy0+aGlnaCAmIDB4ZmZmZmZmZjA7Ci0JCXJldHVybiAwOwotCQl9Ci0KLQllbHNlIHsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLX0KLQotCi1FWFBPUlRfU1lNQk9MKGdldF9yYXJfYWRkcmVzcyk7Ci0KLS8qIFRoZSBsb2NrX3JhciBmdW5jdGlvbiBpcyB1ZWQgYnkgb3RoZXIgZGV2aWNlIGRyaXZlcnMgdG8gbG9jayBhbiBSQVIuCi0gKiBvbmNlIGFuIFJBUiBpcyBsb2NrZWQsIGl0IHN0YXlzIGxvY2tlZCB1bnRpbCB0aGUgbmV4dCBzeXN0ZW0gcmVib290LgotICogVGhlIGZ1bmN0aW9uIHRha2VzIG9uZSBwYXJhbWV0ZXI6Ci0gKgotICogaW50IHJhcl9pbmRleAotICogVGhlIHJhcl9pbmRleCBpcyBhbiBpbmRleCB0byB0aGUgcmFyIHRoYXQgeW91IHdhbnQgdG8gbG9jay4KLSAqIFZhbHVlcyBjYW4gYmUgMCwxLCBvciAyLgotICoKLSAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgMCB1cG9uIHN1Y2Nlc3Mgb3IgYSAtMSBpZiB0aGVyZSBpcyBubyBSQVIKLSAqIGZhY2lsaXR5IG9uIHRoaXMgc3lzdGVtLgotICovCi1pbnQgbG9ja19yYXIoaW50IHJhcl9pbmRleCkKLXsKLQl1MzIgd29ya2luZ19hZGRyOwotCWludCByZXN1bHQ7Ci1pZiAocmVnaXN0ZXJlZCAmJiAocmFyX2luZGV4IDwgMykgJiYgKHJhcl9pbmRleCA+PSAwKSkgewotCS8qIGZpcnN0IG1ha2Ugc3VyZSB0aGF0IGxvY2sgYml0cyBhcmUgY2xlYXIgKHRoaXMgZG9lcyBsb2NrKSAqLwotCXdvcmtpbmdfYWRkcj1yYXJfYWRkcltyYXJfaW5kZXhdLmxvdyAmIDB4ZmZmZmZmZjA7Ci0KLQkvKiBub3cgc2VuZCB0aGF0IHZhbHVlIHRvIHRoZSByZWdpc3RlciB1c2luZyB0aGUgSVBDICovCi0gICAgICAgIHJlc3VsdD1tZW1yYXJfc2V0X3Jhcl9hZGRyKHJhcl9kZXYscmFyX2luZGV4LHdvcmtpbmdfYWRkcik7Ci0JcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLWVsc2UgewotCXJldHVybiAtRU5PREVWOwotCX0KLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9yYXIvcmFyX2RyaXZlci5oIGIvZHJpdmVycy9zdGFnaW5nL3Jhci9yYXJfZHJpdmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2OTBmOTguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Jhci9yYXJfZHJpdmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKiA9PT0gUkFSIFBoeXNpY2FsIEFkZHJlc3NlcyA9PT0gKi8KLXN0cnVjdCBSQVJfYWRkcmVzc19zdHJ1Y3QgewotICAgICAgICB1MzIgbG93OwotICAgICAgICB1MzIgaGlnaDsKLX07Ci0KLS8qIFRoZSBnZXRfcmFyX2FkZHJlc3MgZnVuY3Rpb24gaXMgdXNlZCBieSBvdGhlciBkZXZpY2UgZHJpdmVycwotICogdG8gb2J0YWluIFJBUiBhZGRyZXNzIGluZm9ybWF0aW9uIG9uIGEgUkFSLiBJdCB0YWtlcyB0d28KLSAqIHBhcmFtZXRlcjoKLSAqCi0gKiBpbnQgcmFyX2luZGV4Ci0gKiBUaGUgcmFyX2luZGV4IGlzIGFuIGluZGV4IHRvIHRoZSByYXIgZm9yIHdoaWNoIHlvdSB3aXNoIHRvIHJldHJpZXZlCi0gKiB0aGUgYWRkcmVzcyBpbmZvcm1hdGlvbi4KLSAqIFZhbHVlcyBjYW4gYmUgMCwxLCBvciAyLgotICoKLSAqIHN0cnVjdCBSQVJfYWRkcmVzc19zdHJ1Y3QgaXMgYSBwb2ludGVyIHRvIGEgcGxhY2UgdG8gd2hpY2ggdGhlIGZ1bmN0aW9uCi0gKiBjYW4gcmV0dXJuIHRoZSBhZGRyZXNzIHN0cnVjdHVyZSBmb3IgdGhlIFJBUi4KLSAqCi0gKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIDAgdXBvbiBzdWNjZXNzIG9yIGEgLTEgaWYgdGhlcmUgaXMgbm8gUkFSCi0gKiBmYWNpbGl0eSBvbiB0aGlzIHN5c3RlbS4KLSAqLwotaW50IGdldF9yYXJfYWRkcmVzcyhpbnQgcmFyX2luZGV4LHN0cnVjdCBSQVJfYWRkcmVzc19zdHJ1Y3QgKmFkZHJlc3Nlcyk7Ci0KLQotLyogVGhlIGxvY2tfcmFyIGZ1bmN0aW9uIGlzIHVlZCBieSBvdGhlciBkZXZpY2UgZHJpdmVycyB0byBsb2NrIGFuIFJBUi4KLSAqIG9uY2UgYW4gUkFSIGlzIGxvY2tlZCwgaXQgc3RheXMgbG9ja2VkIHVudGlsIHRoZSBuZXh0IHN5c3RlbSByZWJvb3QuCi0gKiBUaGUgZnVuY3Rpb24gdGFrZXMgb25lIHBhcmFtZXRlcjoKLSAqCi0gKiBpbnQgcmFyX2luZGV4Ci0gKiBUaGUgcmFyX2luZGV4IGlzIGFuIGluZGV4IHRvIHRoZSByYXIgdGhhdCB5b3Ugd2FudCB0byBsb2NrLgotICogVmFsdWVzIGNhbiBiZSAwLDEsIG9yIDIuCi0gKgotICogVGhlIGZ1bmN0aW9uIHJldHVybnMgYSAwIHVwb24gc3VjY2VzcyBvciBhIC0xIGlmIHRoZXJlIGlzIG5vIFJBUgotICogZmFjaWxpdHkgb24gdGhpcyBzeXN0ZW0uCi0gKi8KLWludCBsb2NrX3JhcihpbnQgcmFyX2luZGV4KTsKLQotCi0vKiBERUJVRyBMRVZFTCBNQVNLUyAqLwotI2RlZmluZSBSQVJfREVCVUdfTEVWRUxfQkFTSUMgICAgICAgMHgxCi0KLSNkZWZpbmUgUkFSX0RFQlVHX0xFVkVMX1JFR0lTVEVSUyAgIDB4MgotCi0jZGVmaW5lIFJBUl9ERUJVR19MRVZFTF9FWFRFTkRFRCAgICAweDQKLQotI2RlZmluZSBERUJVR19MRVZFTAkweDcKLQotLyogRlVOQ1RJT05BTCBNQUNST1MgKi8KLQotLyogZGVidWcgbWFjcm8gd2l0aG91dCBwYXJhbWF0ZXJzICovCi0jZGVmaW5lIERFQlVHX1BSSU5UXzAoREVCVUdfTEVWRUwgLCBpbmZvKSBcCi1kbyBcCi17IFwKLSAgaWYoREVCVUdfTEVWRUwpIFwKLSAgeyBcCi0gICAgcHJpbnRrKEtFUk5fV0FSTklORyBpbmZvKTsgXAotICB9IFwKLX13aGlsZSgwKQotCi0vKiBkZWJ1ZyBtYWNybyB3aXRoIDEgcGFyYW1hdGVyICovCi0jZGVmaW5lIERFQlVHX1BSSU5UXzEoREVCVUdfTEVWRUwgLCBpbmZvICwgcGFyYW0xKSBcCi1kbyBcCi17IFwKLSAgaWYoREVCVUdfTEVWRUwpIFwKLSAgeyBcCi0gICAgcHJpbnRrKEtFUk5fV0FSTklORyBpbmZvICwgcGFyYW0xKTsgXAotICB9IFwKLX13aGlsZSgwKQotCi0vKiBkZWJ1ZyBtYWNybyB3aXRoIDIgcGFyYW1hdGVycyAqLwotI2RlZmluZSBERUJVR19QUklOVF8yKERFQlVHX0xFVkVMICwgaW5mbyAsIHBhcmFtMSwgcGFyYW0yKSBcCi1kbyBcCi17IFwKLSAgaWYoREVCVUdfTEVWRUwpIFwKLSAgeyBcCi0gICAgcHJpbnRrKEtFUk5fV0FSTklORyBpbmZvICwgcGFyYW0xLCBwYXJhbTIpOyBcCi0gIH0gXAotfXdoaWxlKDApCi0KLS8qIGRlYnVnIG1hY3JvIHdpdGggMyBwYXJhbWF0ZXJzICovCi0jZGVmaW5lIERFQlVHX1BSSU5UXzMoREVCVUdfTEVWRUwgLCBpbmZvICwgcGFyYW0xLCBwYXJhbTIgLCBwYXJhbTMpIFwKLWRvIFwKLXsgXAotICBpZihERUJVR19MRVZFTCkgXAotICB7IFwKLSAgICBwcmludGsoS0VSTl9XQVJOSU5HIGluZm8gLCBwYXJhbTEsIHBhcmFtMiAsIHBhcmFtMyk7IFwKLSAgfSBcCi19d2hpbGUoMCkKLQotLyogZGVidWcgbWFjcm8gd2l0aCA0IHBhcmFtYXRlcnMgKi8KLSNkZWZpbmUgREVCVUdfUFJJTlRfNChERUJVR19MRVZFTCAsIGluZm8gLCBwYXJhbTEsIHBhcmFtMiAsIHBhcmFtMyAsIHBhcmFtNCkgXAotZG8gXAoteyBcCi0gIGlmKERFQlVHX0xFVkVMKSBcCi0gIHsgXAotICAgIHByaW50ayhLRVJOX1dBUk5JTkcgaW5mbyAsIHBhcmFtMSwgcGFyYW0yICwgcGFyYW0zICwgcGFyYW00KTsgXAotICB9IFwKLX13aGlsZSgwKQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFyX3JlZ2lzdGVyL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcmFyX3JlZ2lzdGVyL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y3MzgzOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9yYXJfcmVnaXN0ZXIvS2NvbmZpZwpAQCAtMCwwICsxLDMwIEBACisjCisjIFJBUiBkZXZpY2UgY29uZmlndXJhdGlvbgorIworCittZW51ICJSQVIgUmVnaXN0ZXIgRHJpdmVyIgorIworIwlSZXN0cmljdGVkIEFjY2VzcyBSZWdpc3RlciBNYW5hZ2VyCisjCitjb25maWcgUkFSX1JFR0lTVEVSCisJdHJpc3RhdGUgIlJlc3RyaWN0ZWQgQWNjZXNzIFJlZ2lvbiBSZWdpc3RlciBEcml2ZXIiCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCQlUaGlzIGRyaXZlciBhbGxvd3Mgb3RoZXIga2VybmVsIGRyaXZlcnMgYWNjZXNzIHRvIHRoZQorCQljb250ZW50cyBvZiB0aGUgcmVzdHJpY3RlZCBhY2Nlc3MgcmVnaW9uIGNvbnRyb2wKKwkJcmVnaXN0ZXJzLgorCisJCVRoZSByZXN0cmljdGVkIGFjY2VzcyByZWdpb24gY29udHJvbCByZWdpc3RlcnMKKwkJKHJhcl9yZWdpc3RlcnMpIGFyZSB1c2VkIHRvIHBhc3MgYWRkcmVzcyBhbmQKKwkJbG9ja2luZyBpbmZvcm1hdGlvbiBvbiByZXN0cmljdGVkIGFjY2VzcyByZWdpb25zCisJCXRvIG90aGVyIGRyaXZlcnMgdGhhdCB1c2UgcmVzdHJpY3RlZCBhY2Nlc3MgcmVnaW9ucworCisJCVRoZSByZXN0cmljdGVkIGFjY2VzcyByZWdpb25zIGFyZSByZWdpb25zIG9mIG1lbW9yeQorCQlvbiB0aGUgSW50ZWwgTUlEIFBsYXRmb3JtIHRoYXQgYXJlIG5vdCBhY2Nlc3NpYmxlIHRvCisJCXRoZSB4ODYgcHJvY2Vzc29yLCBidXQgYXJlIGFjY2Vzc2libGUgdG8gZGVkaWNhdGVkCisJCXByb2Nlc3NvcnMgb24gYm9hcmQgcGVyaXBoZXJhbCBkZXZpY2VzLgorCisJCVRoZSBwdXJwb3NlIG9mIHRoZSByZXN0cmljdGVkIGFjY2VzcyByZWdpb25zIGlzIHRvCisJCXByb3RlY3Qgc2Vuc2l0aXZlIGRhdGEgZnJvbSBjb21wcm9taXNlIGJ5IHVuYXV0aG9yaXplZAorCQlwcm9ncmFtcyBydW5uaW5nIG9uIHRoZSB4ODYgcHJvY2Vzc29yLgorZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Jhcl9yZWdpc3Rlci9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9yYXJfcmVnaXN0ZXIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU5NTRjYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9yYXJfcmVnaXN0ZXIvTWFrZWZpbGUKQEAgLTAsMCArMSwyIEBACitFWFRSQV9DRkxBR1MgKz0gLURMSVRUTEVfX0VORElBTgorb2JqLSQoQ09ORklHX1JBUl9SRUdJU1RFUikgKz0gcmFyX3JlZ2lzdGVyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9yYXJfcmVnaXN0ZXIvcmFyX3JlZ2lzdGVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvcmFyX3JlZ2lzdGVyL3Jhcl9yZWdpc3Rlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYzBlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcmFyX3JlZ2lzdGVyL3Jhcl9yZWdpc3Rlci5jCkBAIC0wLDAgKzEsNjE1IEBACisvKgorICogIHJhcl9yZWdpc3Rlci5jIC0gQW4gSW50ZWwgUmVzdHJpY3RlZCBBY2Nlc3MgUmVnaW9uIHJlZ2lzdGVyIGRyaXZlcgorICoKKyAqICBDb3B5cmlnaHQoYykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICogIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgMjAwOTEyMDQgTWFyayBBbGx5biA8bWFyay5hLmFsbHluQGludGVsLmNvbT4KKyAqCSAgICAgT3NzYW1hIE90aG1hbiA8b3NzYW1hLm90aG1hbkBpbnRlbC5jb20+CisgKglDbGVhbnVwIHBlciBmZWVkYmFjayBmcm9tIEFsYW4gQ294IGFuZCBBcmphbiBWYW4gRGUgVmVuCisgKgorICogIDIwMDkwODA2IE9zc2FtYSBPdGhtYW4gPG9zc2FtYS5vdGhtYW5AaW50ZWwuY29tPgorICogICAgICBSZXR1cm4gemVybyBoaWdoIGFkZHJlc3MgaWYgdXBwZXIgMjIgYml0cyBpcyB6ZXJvLgorICogICAgICBDbGVhbmVkIHVwIGNoZWNrcGF0Y2ggZXJyb3JzLgorICogICAgICBDbGFyaWZpZWQgdGhhdCBkcml2ZXIgaXMgZGVhbGluZyB3aXRoIGJ1cyBhZGRyZXNzZXMuCisgKgorICogIDIwMDkwNzAyIE9zc2FtYSBPdGhtYW4gPG9zc2FtYS5vdGhtYW5AaW50ZWwuY29tPgorICogICAgICBSZW1vdmVkIHVubmVjZXNzYXJ5IGluY2x1ZGUgZGlyZWN0aXZlcworICogICAgICBDbGVhbmVkIHVwIHNwaW5sb2Nrcy4KKyAqICAgICAgQ2xlYW5lZCB1cCBsb2dnaW5nLgorICogICAgICBJbXByb3ZlZCBpbnZhbGlkIHBhcmFtZXRlciBjaGVja3MuCisgKiAgICAgIEZpeGVkIGFuZCBzaW1wbGlmaWVkIFJBUiBhZGRyZXNzIHJldHJpZXZhbCBhbmQgUkFSIGxvY2tpbmcKKyAqICAgICAgY29kZS4KKyAqCisgKiAgMjAwOTA2MjYgTWFyayBBbGx5biA8bWFyay5hLmFsbHluQGludGVsLmNvbT4KKyAqICAgICAgSW5pdGlhbCBwdWJsaXNoCisgKi8KKworI2RlZmluZSBERUJVRyAxCisKKyNpbmNsdWRlICJyYXJfcmVnaXN0ZXIuaCIKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKy8qID09PSBMaW5jcm9mdCBNZXNzYWdlIEJ1cyBJbnRlcmZhY2UgPT09ICovCisvKiBNZXNzYWdlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTE5DX01DUl9PRkZTRVQgMHhEMAorCisvKiBNYXhpbXVtIG51bWJlciBvZiBjbGllbnRzIChvdGhlciBkcml2ZXJzIHVzaW5nIHRoaXMgZHJpdmVyKSAqLworI2RlZmluZSBNQVhfUkFSX0NMSUVOVFMgMTAKKworLyogTWVzc2FnZSBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lIExOQ19NRFJfT0ZGU0VUIDB4RDQKKworLyogTWVzc2FnZSBPcGNvZGVzICovCisjZGVmaW5lIExOQ19NRVNTQUdFX1JFQURfT1BDT0RFIDB4RDAKKyNkZWZpbmUgTE5DX01FU1NBR0VfV1JJVEVfT1BDT0RFIDB4RTAKKworLyogTWVzc2FnZSBXcml0ZSBCeXRlIEVuYWJsZXMgKi8KKyNkZWZpbmUgTE5DX01FU1NBR0VfQllURV9XUklURV9FTkFCTEVTIDB4RgorCisvKiBCLXVuaXQgUG9ydCAqLworI2RlZmluZSBMTkNfQlVOSVRfUE9SVCAweDMKKworLyogPT09IExpbmNyb2Z0IEItVW5pdCBSZWdpc3RlcnMgLSBQcm9ncmFtbWVkIGJ5IElBMzIgZmlybXdhcmUgPT09ICovCisjZGVmaW5lIExOQ19CUkFSMEwgMHgxMAorI2RlZmluZSBMTkNfQlJBUjBIIDB4MTEKKyNkZWZpbmUgTE5DX0JSQVIxTCAweDEyCisjZGVmaW5lIExOQ19CUkFSMUggMHgxMworCisvKiBSZXNlcnZlZCBmb3IgU2VQICovCisjZGVmaW5lIExOQ19CUkFSMkwgMHgxNAorI2RlZmluZSBMTkNfQlJBUjJIIDB4MTUKKworLyogTW9vcmVzdG93biBzdXBwb3J0cyB0aHJlZSByZXN0cmljdGVkIGFjY2VzcyByZWdpb25zLiAqLworI2RlZmluZSBNUlNUX05VTV9SQVIgMworCisKKy8qIFJBUiBCdXMgQWRkcmVzcyBSYW5nZSAqLworc3RydWN0IFJBUl9hZGRyZXNzX3JhbmdlIHsKKwlkbWFfYWRkcl90IGxvdzsKKwlkbWFfYWRkcl90IGhpZ2g7Cit9OworCisvKiBTdHJ1Y3R1cmUgY29udGFpbmluZyBsb3cgYW5kIGhpZ2ggUkFSIHJlZ2lzdGVyIG9mZnNldHMuICovCitzdHJ1Y3QgUkFSX29mZnNldHMgeworCXUzMiBsb3c7ICAvKiBSZWdpc3RlciBvZmZzZXQgZm9yIGxvdyAgUkFSIGJ1cyBhZGRyZXNzLiAqLworCXUzMiBoaWdoOyAvKiBSZWdpc3RlciBvZmZzZXQgZm9yIGhpZ2ggUkFSIGJ1cyBhZGRyZXNzLiAqLworfTsKKworc3RydWN0IGNsaWVudCB7CisJaW50ICgqY2xpZW50X2NhbGxiYWNrKSh2b2lkICpjbGllbnRfZGF0YSk7CisJdm9pZCAqY3VzdG9tZXJfZGF0YTsKKwlpbnQgY2xpZW50X2NhbGxlZDsKKwl9OworCitzdGF0aWMgREVGSU5FX01VVEVYKHJhcl9tdXRleCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGxuY19yZWdfbXV0ZXgpOworCitzdHJ1Y3QgUkFSX2RldmljZSB7CisJc3RydWN0IFJBUl9vZmZzZXRzIGNvbnN0IHJhcl9vZmZzZXRzW01SU1RfTlVNX1JBUl07CisJc3RydWN0IFJBUl9hZGRyZXNzX3JhbmdlIHJhcl9hZGRyW01SU1RfTlVNX1JBUl07CisJc3RydWN0IHBjaV9kZXYgKnJhcl9kZXY7CisJYm9vbCByZWdpc3RlcmVkOworCX07CisKKy8qIHRoaXMgcGxhdGZvcm0gaGFzIG9ubHkgb25lIHJhcl9kZXZpY2UgZm9yIDMgcmFyIHJlZ2lvbnMgKi8KK3N0YXRpYyBzdHJ1Y3QgUkFSX2RldmljZSBteV9yYXJfZGV2aWNlID0geworCS5yYXJfb2Zmc2V0cyA9IHsKKwkJWzBdLmxvdyA9IExOQ19CUkFSMEwsCisJCVswXS5oaWdoID0gTE5DX0JSQVIwSCwKKwkJWzFdLmxvdyA9IExOQ19CUkFSMUwsCisJCVsxXS5oaWdoID0gTE5DX0JSQVIxSCwKKwkJWzJdLmxvdyA9IExOQ19CUkFSMkwsCisJCVsyXS5oaWdoID0gTE5DX0JSQVIySAorCX0KK307CisKKy8qIHRoaXMgZGF0YSBpcyBmb3IgaGFuZGxpbmcgcmVxdWVzdHMgZnJvbSBvdGhlciBkcml2ZXJzIHdoaWNoIGFycml2ZQorICogcHJpb3IgdG8gdGhpcyBkcml2ZXIgaW5pdGlhbGl6aW5nCisgKi8KKworc3RhdGljIHN0cnVjdCBjbGllbnQgY2xpZW50c1tNQVhfUkFSX0NMSUVOVFNdOworc3RhdGljIGludCBudW1fY2xpZW50czsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZXRyaWV2ZWQgUkFSIGluZm8gdXNpbmcgdGhlIExpbmNyb2Z0CisgKiBtZXNzYWdlIGJ1cyBpbnRlcmZhY2UuCisgKi8KK3N0YXRpYyBpbnQgcmV0cmlldmVfcmFyX2FkZHIoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJaW50IG9mZnNldCwKKwlkbWFfYWRkcl90ICphZGRyKQoreworCS8qCisJICogPT09PT09PT0gVGhlIExpbmNyb2Z0IE1lc3NhZ2UgQnVzIEludGVyZmFjZSA9PT09PT09PQorCSAqIExpbmNyb2Z0IHJlZ2lzdGVycyBtYXkgYmUgb2J0YWluZWQgZnJvbSB0aGUgUENJCisJICogKHRoZSBIb3N0IEJyaWRnZSkgdXNpbmcgdGhlIExpbmNyb2Z0IE1lc3NhZ2UgQnVzCisJICogSW50ZXJmYWNlLiAgVGhhdCBtZXNzYWdlIGJ1cyBpbnRlcmZhY2UgaXMgZ2VuZXJhbGx5CisJICogY29tcHJpc2VkIG9mIHR3byByZWdpc3RlcnM6IGEgY29udHJvbCByZWdpc3RlciAoTUNSLCAweERPKQorCSAqIGFuZCBhIGRhdGEgcmVnaXN0ZXIgKE1EUiwgMHhENCkuCisJICoKKwkgKiBUaGUgTUNSIChtZXNzYWdlIGNvbnRyb2wgcmVnaXN0ZXIpIGZvcm1hdCBpcyB0aGUgZm9sbG93aW5nOgorCSAqICAgMS4gIFszMToyNF06IE9wY29kZQorCSAqICAgMi4gIFsyMzoxNl06IFBvcnQKKwkgKiAgIDMuICBbMTU6OF06IFJlZ2lzdGVyIE9mZnNldAorCSAqICAgNC4gIFs3OjRdOiBCeXRlIEVuYWJsZXMgKHVzZSAweEYgdG8gc2V0IGFsbCBvZiB0aGVzZSBiaXRzCisJICogICAgICAgICAgICAgIHRvIDEpCisJICogICA1LiAgWzM6MF06IHJlc2VydmVkCisJICoKKwkgKiAgUmVhZCAoMHhEMCkgYW5kIHdyaXRlICgweEUwKSBvcGNvZGVzIGFyZSB3cml0dGVuIHRvIHRoZQorCSAqICBjb250cm9sIHJlZ2lzdGVyIHdoZW4gcmVhZGluZyBhbmQgd3JpdGluZyB0byBMaW5jcm9mdAorCSAqICByZWdpc3RlcnMsIHJlc3BlY3RpdmVseS4KKwkgKgorCSAqICBXZSdyZSBpbnRlcmVzdGVkIGluIHJlZ2lzdGVycyBmb3VuZCBpbiB0aGUgTGluY3JvZnQKKwkgKiAgQi11bml0LiAgVGhlIEItdW5pdCBwb3J0IGlzIDB4My4KKwkgKgorCSAqICBUaGUgc2l4IEItdW5pdCBSQVIgcmVnaXN0ZXIgb2Zmc2V0cyB3ZSB1c2UgYXJlIGxpc3RlZAorCSAqICBlYXJsaWVyIGluIHRoaXMgZmlsZS4KKwkgKgorCSAqICBMYXN0bHkgd3JpdGluZyB0byB0aGUgTUNSIHJlZ2lzdGVyIHJlcXVpcmVzIHRoZSAiQnl0ZQorCSAqICBlbmFibGVzIiBiaXRzIHRvIGJlIHNldCB0byAxLiAgVGhpcyBtYXkgYmUgYWNoaWV2ZWQgYnkKKwkgKiAgd3JpdGluZyAweEYgYXQgYml0IDQuCisJICoKKwkgKiBUaGUgTURSIChtZXNzYWdlIGRhdGEgcmVnaXN0ZXIpIGZvcm1hdCBpcyB0aGUgZm9sbG93aW5nOgorCSAqICAgMS4gWzMxOjBdOiBSZWFkL1dyaXRlIERhdGEKKwkgKgorCSAqICBEYXRhIGJlaW5nIHJlYWQgZnJvbSB0aGlzIHJlZ2lzdGVyIGlzIG9ubHkgYXZhaWxhYmxlIGFmdGVyCisJICogIHdyaXRpbmcgdGhlIGFwcHJvcHJpYXRlIGNvbnRyb2wgbWVzc2FnZSB0byB0aGUgTUNSCisJICogIHJlZ2lzdGVyLgorCSAqCisJICogIERhdGEgYmVpbmcgd3JpdHRlbiB0byB0aGlzIHJlZ2lzdGVyIG11c3QgYmUgd3JpdHRlbiBiZWZvcmUKKwkgKiAgd3JpdGluZyB0aGUgYXBwcm9wcmlhdGUgY29udHJvbCBtZXNzYWdlIHRvIHRoZSBNQ1IKKwkgKiAgcmVnaXN0ZXIuCisJKi8KKworCWludCByZXN1bHQ7CisKKwkvKiBDb25zdHJ1Y3QgY29udHJvbCBtZXNzYWdlICovCisJdTMyIGNvbnN0IG1lc3NhZ2UgPQorCQkgKExOQ19NRVNTQUdFX1JFQURfT1BDT0RFIDw8IDI0KQorCQkgfCAoTE5DX0JVTklUX1BPUlQgPDwgMTYpCisJCSB8IChvZmZzZXQgPDwgOCkKKwkJIHwgKExOQ19NRVNTQUdFX0JZVEVfV1JJVEVfRU5BQkxFUyA8PCA0KTsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgIk9mZnNldCBmb3IgJ2dldCcgTE5DIE1TRyBpcyAleFxuIiwgb2Zmc2V0KTsKKworCWlmIChhZGRyID09IDApIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkqIFdlIHN5bmNocm9uaXplIGFjY2VzcyB0byB0aGUgTGluY3JvZnQgTUNSIGFuZCBNRFIgcmVnaXN0ZXJzCisJKiB1bnRpbCBCT1RIIHRoZSBjb21tYW5kIGlzIGlzc3VlZCB0aHJvdWdoIHRoZSBNQ1IgcmVnaXN0ZXIKKwkqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgTURSIHJlZ2lzdGVyLgorCSogT3RoZXJ3aXNlIGEgcmFjZSBjb25kaXRpb24gd291bGQgZXhpc3QgYmV0d2VlbiBhY2Nlc3NlcyB0bworCSogYm90aCByZWdpc3RlcnMuCisJKi8KKworCW11dGV4X2xvY2soJmxuY19yZWdfbXV0ZXgpOworCisJLyogU2VuZCB0aGUgY29udHJvbCBtZXNzYWdlICovCisJcmVzdWx0ID0gcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBMTkNfTUNSX09GRlNFVCwgbWVzc2FnZSk7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJSZXN1bHQgZnJvbSBzZW5kIGN0bCByZWdpc3RlciBpcyAleFxuIiwgcmVzdWx0KTsKKworCWlmICghcmVzdWx0KSB7CisJCXJlc3VsdCA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBMTkNfTURSX09GRlNFVCwKKwkJCSh1MzIgKilhZGRyKTsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LAorCQkJIlJlc3VsdCBmcm9tIHJlYWQgZGF0YSByZWdpc3RlciBpcyAleFxuIiwgcmVzdWx0KTsKKworCQlkZXZfZGJnKCZwZGV2LT5kZXYsCisJCQkiVmFsdWUgcmVhZCBmcm9tIGRhdGEgcmVnaXN0ZXIgaXMgJWx4XG4iLAorCQkJICh1bnNpZ25lZCBsb25nKSphZGRyKTsKKwl9CisKKwltdXRleF91bmxvY2soJmxuY19yZWdfbXV0ZXgpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBzZXRfcmFyX2FkZHJlc3Moc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJaW50IG9mZnNldCwKKwlkbWFfYWRkcl90IGFkZHIpCit7CisJLyoKKwkqIERhdGEgYmVpbmcgd3JpdHRlbiB0byB0aGlzIHJlZ2lzdGVyIG11c3QgYmUgd3JpdHRlbiBiZWZvcmUKKwkqIHdyaXRpbmcgdGhlIGFwcHJvcHJpYXRlIGNvbnRyb2wgbWVzc2FnZSB0byB0aGUgTUNSCisJKiByZWdpc3Rlci4KKwkqIEBub3RlIFNlZSByYXJfZ2V0X2FkZHJlc3MoKSBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUKKwkqIG1lc3NhZ2UgYnVzIGludGVyZmFjZSBiZWluZyB1c2VkIGhlcmUuCisJKi8KKworCWludCByZXN1bHQgPSAwOworCisJLyogQ29uc3RydWN0IGNvbnRyb2wgbWVzc2FnZSAqLworCXUzMiBjb25zdCBtZXNzYWdlID0gKExOQ19NRVNTQUdFX1dSSVRFX09QQ09ERSA8PCAyNCkKKwkJfCAoTE5DX0JVTklUX1BPUlQgPDwgMTYpCisJCXwgKG9mZnNldCA8PCA4KQorCQl8IChMTkNfTUVTU0FHRV9CWVRFX1dSSVRFX0VOQUJMRVMgPDwgNCk7CisKKwlpZiAoYWRkciA9PSAwKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldl9kYmcoJnBkZXYtPmRldiwgIk9mZnNldCBmb3IgJ3NldCcgTE5DIE1TRyBpcyAleFxuIiwgb2Zmc2V0KTsKKworCS8qCisJKiBXZSBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gdGhlIExpbmNyb2Z0IE1DUiBhbmQgTURSIHJlZ2lzdGVycworCSogdW50aWwgQk9USCB0aGUgY29tbWFuZCBpcyBpc3N1ZWQgdGhyb3VnaCB0aGUgTUNSIHJlZ2lzdGVyCisJKiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgZGF0YSBpcyByZWFkIGZyb20gdGhlIE1EUiByZWdpc3Rlci4KKwkqIE90aGVyd2lzZSBhIHJhY2UgY29uZGl0aW9uIHdvdWxkIGV4aXN0IGJldHdlZW4gYWNjZXNzZXMgdG8KKwkqIGJvdGggcmVnaXN0ZXJzLgorCSovCisKKwltdXRleF9sb2NrKCZsbmNfcmVnX211dGV4KTsKKworCS8qIFNlbmQgdGhlIGNvbnRyb2wgbWVzc2FnZSAqLworCXJlc3VsdCA9IHBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgTE5DX01EUl9PRkZTRVQsIGFkZHIpOworCisJZGV2X2RiZygmcGRldi0+ZGV2LCAiUmVzdWx0IGZyb20gd3JpdGUgZGF0YSByZWdpc3RlciBpcyAleFxuIiwgcmVzdWx0KTsKKworCWlmICghcmVzdWx0KSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwKKwkJCSJWYWx1ZSB3cml0dGVuIHRvIGRhdGEgcmVnaXN0ZXIgaXMgJWx4XG4iLAorCQkJICh1bnNpZ25lZCBsb25nKWFkZHIpOworCisJCXJlc3VsdCA9IHBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgTE5DX01DUl9PRkZTRVQsIG1lc3NhZ2UpOworCisJCWRldl9kYmcoJnBkZXYtPmRldiwgIlJlc3VsdCBmcm9tIHNlbmQgY3RsIHJlZ2lzdGVyIGlzICV4XG4iLAorCQkJcmVzdWx0KTsKKwl9CisKKwltdXRleF91bmxvY2soJmxuY19yZWdfbXV0ZXgpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyogSW5pdGlhbGl6ZSBSQVIgcGFyYW1ldGVycywgc3VjaCBhcyBidXMgYWRkcmVzc2VzLCBldGMuCisqLworc3RhdGljIGludCBpbml0X3Jhcl9wYXJhbXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHJlc3VsdCA9IDA7CisKKwkvKiBSZXRyaWV2ZSBSQVIgc3RhcnQgYW5kIGVuZCBidXMgYWRkcmVzc2VzLgorCSogQWNjZXNzIHRoZSBSQVIgcmVnaXN0ZXJzIHRocm91Z2ggdGhlIExpbmNyb2Z0IE1lc3NhZ2UgQnVzCisJKiBJbnRlcmZhY2Ugb24gUENJIGRldmljZTogMDA6MDAuMCBIb3N0IGJyaWRnZS4KKwkqLworCisJZm9yIChpID0gMDsgaSA8IE1SU1RfTlVNX1JBUjsgKytpKSB7CisJCXN0cnVjdCBSQVJfb2Zmc2V0cyBjb25zdCAqb2Zmc2V0ID0KKwkJCSZteV9yYXJfZGV2aWNlLnJhcl9vZmZzZXRzW2ldOworCQlzdHJ1Y3QgUkFSX2FkZHJlc3NfcmFuZ2UgKmFkZHIgPSAmbXlfcmFyX2RldmljZS5yYXJfYWRkcltpXTsKKworCWlmICgocmV0cmlldmVfcmFyX2FkZHIocGRldiwgb2Zmc2V0LT5sb3csICZhZGRyLT5sb3cpICE9IDApCisJCXx8IChyZXRyaWV2ZV9yYXJfYWRkcihwZGV2LCBvZmZzZXQtPmhpZ2gsICZhZGRyLT5oaWdoKSAhPSAwKSkgeworCQlyZXN1bHQgPSAtMTsKKwkJYnJlYWs7CisJCX0KKworCQkvKgorCQkqIE9ubHkgdGhlIHVwcGVyIDIyIGJpdHMgb2YgdGhlIFJBUiBhZGRyZXNzZXMgYXJlCisJCSogc3RvcmVkIGluIHRoZWlyIGNvcnJlc3BvbmRpbmcgUkFSIHJlZ2lzdGVycyBzbyB3ZQorCQkqIG11c3Qgc2V0IHRoZSBsb3dlciAxMCBiaXRzIGFjY29yZGluZ2x5LgorCisJCSogVGhlIGxvdyBhZGRyZXNzIGhhcyBpdHMgbG93ZXIgMTAgYml0cyBjbGVhcmVkLCBhbmQKKwkJKiB0aGUgaGlnaCBhZGRyZXNzIGhhcyBhbGwgaXRzIGxvd2VyIDEwIGJpdHMgc2V0LAorCQkqIGUuZy46CisJCSogbG93ID0gMHgyZmZmZmMwMAorCQkqLworCisJCWFkZHItPmxvdyAmPSAoZG1hX2FkZHJfdCkweGZmZmZmYzAwdTsKKworCQkvKgorCQkqIFNldCBiaXRzIDk6MCBvbiB1cHBzZXIgYWRkcmVzcyBpZiBiaXRzIDMxOjEwIGFyZSBub24KKwkJKiB6ZXJvOyBvdGhlcndpemUgY2xlYXIgYWxsIGJpdHMKKwkJKi8KKworCQlpZiAoKGFkZHItPmhpZ2ggJiAweGZmZmZmYzAwdSkgPT0gMCkKKwkJCWFkZHItPmhpZ2ggPSAwOworCQllbHNlCisJCQlhZGRyLT5oaWdoIHw9IDB4M2ZmdTsKKwl9CisJLyogRG9uZSBhY2Nlc3NpbmcgdGhlIGRldmljZS4gKi8KKworCWlmIChyZXN1bHQgPT0gMCkgeworCQlpbnQgejsKKwkJZm9yICh6ID0gMDsgeiAhPSBNUlNUX05VTV9SQVI7ICsreikgeworCQkJLyoKKwkJCSogIkJSQVIiIHJlZmVycyB0byB0aGUgUkFSIHJlZ2lzdGVycyBpbiB0aGUKKwkJCSogTGluY3JvZnQgQi11bml0LgorCQkJKi8KKwkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJCUkFSWyV1XSBidXMgYWRkcmVzcyByYW5nZSA9ICIKKwkJCSAgIlslbHgsICVseF1cbiIsIHosCisJCQkgICh1bnNpZ25lZCBsb25nKW15X3Jhcl9kZXZpY2UucmFyX2FkZHJbel0ubG93LAorCQkJICAodW5zaWduZWQgbG9uZylteV9yYXJfZGV2aWNlLnJhcl9hZGRyW3pdLmhpZ2gpOworCQl9CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFRoZSByYXJfZ2V0X2FkZHJlc3MgZnVuY3Rpb24gaXMgdXNlZCBieSBvdGhlciBkZXZpY2UgZHJpdmVycworICogdG8gb2J0YWluIFJBUiBhZGRyZXNzIGluZm9ybWF0aW9uIG9uIGEgUkFSLiBJdCB0YWtlcyB0aHJlZQorICogcGFyYW1ldGVyczoKKyAqCisgKiBpbnQgcmFyX2luZGV4CisgKiBUaGUgcmFyX2luZGV4IGlzIGFuIGluZGV4IHRvIHRoZSByYXIgZm9yIHdoaWNoIHlvdSB3aXNoIHRvIHJldHJpZXZlCisgKiB0aGUgYWRkcmVzcyBpbmZvcm1hdGlvbi4KKyAqIFZhbHVlcyBjYW4gYmUgMCwxLCBvciAyLgorICoKKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgMCB1cG9uIHN1Y2Nlc3Mgb3IgYSAtMSBpZiB0aGVyZSBpcyBubyBSQVIKKyAqIGZhY2lsaXR5IG9uIHRoaXMgc3lzdGVtLgorICovCitpbnQgcmFyX2dldF9hZGRyZXNzKGludCByYXJfaW5kZXgsCisJZG1hX2FkZHJfdCAqc3RhcnRfYWRkcmVzcywKKwlkbWFfYWRkcl90ICplbmRfYWRkcmVzcykKK3sKKwlpbnQgcmVzdWx0ID0gLUVOT0RFVjsKKworCWlmIChteV9yYXJfZGV2aWNlLnJlZ2lzdGVyZWQpIHsKKwkJaWYgKHN0YXJ0X2FkZHJlc3MgPT0gMCB8fCBlbmRfYWRkcmVzcyA9PSAwCisJCQl8fCByYXJfaW5kZXggPj0gTVJTVF9OVU1fUkFSIHx8IHJhcl9pbmRleCA8IDApIHsKKwkJCXJlc3VsdCA9IC1FSU5WQUw7CisJCX0gZWxzZSB7CisJCQkqc3RhcnRfYWRkcmVzcyA9CisJCQkJbXlfcmFyX2RldmljZS5yYXJfYWRkcltyYXJfaW5kZXhdLmxvdzsKKwkJCSplbmRfYWRkcmVzcyA9CisJCQkJbXlfcmFyX2RldmljZS5yYXJfYWRkcltyYXJfaW5kZXhdLmhpZ2g7CisKKwkJCXJlc3VsdCA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorRVhQT1JUX1NZTUJPTChyYXJfZ2V0X2FkZHJlc3MpOworCisvKgorICogVGhlIHJhcl9sb2NrIGZ1bmN0aW9uIGlzIHVlZCBieSBvdGhlciBkZXZpY2UgZHJpdmVycyB0byBsb2NrIGFuIFJBUi4KKyAqIG9uY2UgYW4gUkFSIGlzIGxvY2tlZCwgaXQgc3RheXMgbG9ja2VkIHVudGlsIHRoZSBuZXh0IHN5c3RlbSByZWJvb3QuCisgKiBUaGUgZnVuY3Rpb24gdGFrZXMgb25lIHBhcmFtZXRlcjoKKyAqCisgKiBpbnQgcmFyX2luZGV4CisgKiBUaGUgcmFyX2luZGV4IGlzIGFuIGluZGV4IHRvIHRoZSByYXIgdGhhdCB5b3Ugd2FudCB0byBsb2NrLgorICogVmFsdWVzIGNhbiBiZSAwLDEsIG9yIDIuCisgKgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMgYSAwIHVwb24gc3VjY2VzcyBvciBhIC0xIGlmIHRoZXJlIGlzIG5vIFJBUgorICogZmFjaWxpdHkgb24gdGhpcyBzeXN0ZW0uCisgKi8KK2ludCByYXJfbG9jayhpbnQgcmFyX2luZGV4KQoreworCWludCByZXN1bHQgPSAtRU5PREVWOworCisJaWYgKHJhcl9pbmRleCA+PSBNUlNUX05VTV9SQVIgfHwgcmFyX2luZGV4IDwgMCkgeworCQlyZXN1bHQgPSAtRUlOVkFMOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCWRldl9kYmcoJm15X3Jhcl9kZXZpY2UucmFyX2Rldi0+ZGV2LCAicmFyX2xvY2sgbXV0ZXggbG9ja2luZ1xuIik7CisJbXV0ZXhfbG9jaygmcmFyX211dGV4KTsKKworCWlmIChteV9yYXJfZGV2aWNlLnJlZ2lzdGVyZWQpIHsKKworCQlkbWFfYWRkcl90IGxvdyA9IG15X3Jhcl9kZXZpY2UucmFyX2FkZHJbcmFyX2luZGV4XS5sb3cgJgorCQkJMHhmZmZmZmMwMHU7CisKKwkJZG1hX2FkZHJfdCBoaWdoID0gbXlfcmFyX2RldmljZS5yYXJfYWRkcltyYXJfaW5kZXhdLmhpZ2ggJgorCQkJMHhmZmZmZmMwMHU7CisKKwkJLyoKKwkJKiBPbmx5IGFsbG93IEkvTyBmcm9tIHRoZSBncmFwaGljcyBhbmQgTGFuZ3dlbGw7CisJCSogTm90IGZyb20gdGhlIHg5NiBwcm9jZXNzb3IKKwkJKi8KKwkJaWYgKHJhcl9pbmRleCA9PSAoaW50KVJBUl9UWVBFX1ZJREVPKSB7CisJCQlsb3cgfD0gMHgwMDAwMDAwOTsKKwkJCWhpZ2ggfD0gMHgwMDAwMDAxNTsKKwkJfQorCisJCWVsc2UgaWYgKHJhcl9pbmRleCA9PSAoaW50KVJBUl9UWVBFX0FVRElPKSB7CisJCQkvKiBPbmx5IGFsbG93IEkvTyBmcm9tIExhbmd3ZWxsOyBub3RoaW5nIGZyb20geDg2ICovCisJCQlsb3cgfD0gMHgwMDAwMDAwODsKKwkJCWhpZ2ggfD0gMHgwMDAwMDAxODsKKwkJfQorCisJCWVsc2UKKwkJCS8qIFJlYWQtb25seSBmcm9tIGFsbCBhZ2VudHMgKi8KKwkJCWhpZ2ggfD0gMHgwMDAwMDAxODsKKworCQkvKgorCQkqIE5vdyBwcm9ncmFtIHRoZSByZWdpc3RlciB1c2luZyB0aGUgTGluY3JvZnQgbWVzc2FnZQorCQkqIGJ1cyBpbnRlcmZhY2UuCisJCSovCisJCXJlc3VsdCA9IHNldF9yYXJfYWRkcmVzcyhteV9yYXJfZGV2aWNlLnJhcl9kZXYsCisJCQlteV9yYXJfZGV2aWNlLnJhcl9vZmZzZXRzW3Jhcl9pbmRleF0ubG93LAorCQkJbG93KTsKKworCQlpZiAocmVzdWx0ID09IDApCisJCQlyZXN1bHQgPSBzZXRfcmFyX2FkZHJlc3MoCisJCQlteV9yYXJfZGV2aWNlLnJhcl9kZXYsCisJCQlteV9yYXJfZGV2aWNlLnJhcl9vZmZzZXRzW3Jhcl9pbmRleF0uaGlnaCwKKwkJCWhpZ2gpOworCX0KKworCWRldl9kYmcoJm15X3Jhcl9kZXZpY2UucmFyX2Rldi0+ZGV2LCAicmFyX2xvY2sgbXV0ZXggdW5sb2NraW5nXG4iKTsKKwltdXRleF91bmxvY2soJnJhcl9tdXRleCk7CisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0wocmFyX2xvY2spOworCisvKiBUaGUgcmVnaXN0ZXJfcmFyIGZ1bmN0aW9uIGlzIHRvIHVzZWQgYnkgb3RoZXIgZGV2aWNlIGRyaXZlcnMKKyAqIHRvIGVuc3VyZSB0aGF0IHRoaXMgZHJpdmVyIGlzIHJlYWR5LiBBcyB3ZSBjYW5ub3QgYmUgc3VyZSBvZgorICogdGhlIGNvbXBpbGUvZXhlY3V0ZSBvcmRlciBvZiBkaXJ2ZXJzIGluIHRoZXIga2VybmVsLCBpdCBpcworICogYmVzdCB0byBnaXZlIHRoaXMgZHJpdmVyIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2FsbCB3aGVuCisgKiBpdCBpcyByZWFkeSB0byBnaXZlIG91dCBhZGRyZXNzZXMuIFRoZSBjYWxsYmFjayBmdW5jdGlvbgorICogd291bGQgaGF2ZSB0aG9zZSBzdGVwcyB0aGF0IGNvbnRpbnVlIHRoZSBpbml0aWFsaXphdGlvbiBvZgorICogYSBkcml2ZXIgdGhhdCBkbyByZXF1aXJlIGEgdmFsaWQgUkFSIGFkZHJlc3MuIE9uZSBvZiB0aG9zZQorICogc3RlcHMgd291bGQgYmUgdG8gY2FsbCByYXJfZ2V0X2FkZHJlc3MoKQorICogVGhpcyBmdW5jdGlvbiByZXR1cm4gMCBvbiBzdWNjZXNzIGFuIC0xIG9uIGZhaWx1cmUuCisqLworaW50IHJlZ2lzdGVyX3JhcihpbnQgKCpjYWxsYmFjaykodm9pZCAqeW91cnBhcmFtZXRlciksIHZvaWQgKnlvdXJwYXJhbWV0ZXIpCit7CisKKwlpbnQgcmVzdWx0ID0gLUVOT0RFVjsKKworCWlmIChjYWxsYmFjayA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnJhcl9tdXRleCk7CisKKwlpZiAobXlfcmFyX2RldmljZS5yZWdpc3RlcmVkKSB7CisKKwkJbXV0ZXhfdW5sb2NrKCZyYXJfbXV0ZXgpOworCQkvKgorCQkqIGlmIHRoZSBkcml2ZXIgYWxyZWFkeSByZWdpc3RlcmVkLCB0aGVuIHdlIGNhbiBzaW1wbHkKKwkJKiBjYWxsIHRoZSBjYWxsYmFjayByaWdodCBub3cKKwkJKi8KKworCQlyZXR1cm4gKCpjYWxsYmFjaykoeW91cnBhcmFtZXRlcik7CisJfQorCisJaWYgKG51bV9jbGllbnRzIDwgTVJTVF9OVU1fUkFSKSB7CisKKwkJY2xpZW50c1tudW1fY2xpZW50c10uY2xpZW50X2NhbGxiYWNrID0gY2FsbGJhY2s7CisJCWNsaWVudHNbbnVtX2NsaWVudHNdLmN1c3RvbWVyX2RhdGEgPSB5b3VycGFyYW1ldGVyOworCQludW1fY2xpZW50cyArPSAxOworCQlyZXN1bHQgPSAwOworCX0KKworCW11dGV4X3VubG9jaygmcmFyX211dGV4KTsKKwlyZXR1cm4gcmVzdWx0OworCit9CitFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX3Jhcik7CisKKy8qIFN1c3BlbmQgLSByZXR1cm5zIC1FTk9TWVMgKi8KK3N0YXRpYyBpbnQgcmFyX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgaW50IHJhcl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIHRoZSBkcml2ZXIgd2l0aCB0aGUgZGV2aWNlIHN1YnN5c3RlbSAoCisgKiBlaXRoZXIgUENJLCBVU0IsIGV0YykuCisgKiBGdW5jdGlvbiB0aGF0IGlzIGFjdGl2YWVkIG9uIHRoZSBzdWNjZXNmdWwgcHJvYmUgb2YgdGhlIFJBUiBkZXZpY2UKKyAqIChNb29yZXN0b3duIGhvc3QgY29udHJvbGxlcikuCisgKi8KK3N0YXRpYyBpbnQgcmFyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgZXJyb3I7CisJaW50IGNvdW50ZXI7CisKKwlkZXZfZGJnKCZkZXYtPmRldiwgIlBDSSBwcm9iZSBzdGFydGluZ1xuIik7CisKKwkvKiBlbmFibGUgdGhlIGRldmljZSAqLworCWVycm9yID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsCisJCQkiRXJyb3IgZW5hYmxpbmcgUkFSIHJlZ2lzdGVyIFBDSSBkZXZpY2VcbiIpOworCQlnb3RvIGVuZF9mdW5jdGlvbjsKKwl9CisKKwkvKiB3ZSBoYXZlIG9ubHkgb25lIGRldmljZTsgZmlsbCBpbiB0aGUgcmFyX2RldmljZSBzdHJ1Y3R1cmUgKi8KKwlteV9yYXJfZGV2aWNlLnJhcl9kZXYgPSBkZXY7CisKKwkvKgorCSogSW5pdGlhbGl6ZSB0aGUgUkFSIHBhcmFtZXRlcnMsIHdoaWNoIGhhdmUgdG8gYmUgcmV0cmlldmVkCisJKiB2aWEgdGhlIG1lc3NhZ2UgYnVzIGludGVyZmFjZS4KKwkqLworCWVycm9yID0gaW5pdF9yYXJfcGFyYW1zKGRldik7CisJaWYgKGVycm9yKSB7CisJCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOworCisJCWRldl9lcnIoJmRldi0+ZGV2LAorCQkJIkVycm9yIHJldHJpZXZpbmcgUkFSIGFkZHJlc3Nlc1xuIik7CisKKwkJZ290byBlbmRfZnVuY3Rpb247CisJfQorCisJZGV2X2RiZygmZGV2LT5kZXYsICJQQ0kgcHJvYmUgbG9ja2luZ1xuIik7CisJbXV0ZXhfbG9jaygmcmFyX211dGV4KTsKKwlteV9yYXJfZGV2aWNlLnJlZ2lzdGVyZWQgPSAxOworCisJLyogbm93IGNhbGwgYW55b25lIHdobyBoYXMgcmVnaXN0ZXJlZCAodXNpbmcgY2FsbGJhY2tzKSAqLworCWZvciAoY291bnRlciA9IDA7IGNvdW50ZXIgPCBudW1fY2xpZW50czsgY291bnRlciArPSAxKSB7CisJCWlmIChjbGllbnRzW2NvdW50ZXJdLmNsaWVudF9jYWxsYmFjaykgeworCQkJZXJyb3IgPSAoKmNsaWVudHNbY291bnRlcl0uY2xpZW50X2NhbGxiYWNrKSgKKwkJCQljbGllbnRzW2NvdW50ZXJdLmN1c3RvbWVyX2RhdGEpOworCQkJLyogc2V0IGNhbGxiYWNrIHRvIE5VTEwgdG8gaW5kaWNhdGUgaXQgaGFzIGJlZW4gZG9uZSAqLworCQkJY2xpZW50c1tjb3VudGVyXS5jbGllbnRfY2FsbGJhY2sgPSBOVUxMOworCQkJCWRldl9kYmcoJm15X3Jhcl9kZXZpY2UucmFyX2Rldi0+ZGV2LAorCQkJCSJDYWxsYmFjayBjYWxsZWQgZm9yICVkXG4iLAorCQkJY291bnRlcik7CisJCX0KKwl9CisKKwlkZXZfZGJnKCZkZXYtPmRldiwgIlBDSSBwcm9iZSB1bmxvY2tpbmdcbiIpOworCW11dGV4X3VubG9jaygmcmFyX211dGV4KTsKKworZW5kX2Z1bmN0aW9uOgorCisJcmV0dXJuIGVycm9yOworfQorCitjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCByYXJfcGNpX2lkX3RibFtdID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfUkFSX0RFVklDRV9JRCkgfSwKKwl7IDAgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHJhcl9wY2lfaWRfdGJsKTsKKworY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKm15X2lkX3RhYmxlID0gcmFyX3BjaV9pZF90Ymw7CisKKy8qIGZpZWxkIGZvciByZWdpc3RlcmluZyBkcml2ZXIgdG8gUENJIGRldmljZSAqLworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJhcl9wY2lfZHJpdmVyID0geworCS5uYW1lID0gInJhcl9yZWdpc3Rlcl9kcml2ZXIiLAorCS5pZF90YWJsZSA9IHJhcl9wY2lfaWRfdGJsLAorCS5wcm9iZSA9IHJhcl9wcm9iZSwKKwkuc3VzcGVuZCA9IHJhcl9zdXNwZW5kLAorCS5yZXN1bWUgPSByYXJfcmVzdW1lCit9OworCitzdGF0aWMgaW50IF9faW5pdCByYXJfaW5pdF9oYW5kbGVyKHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnJhcl9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHJhcl9leGl0X2hhbmRsZXIodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnJhcl9wY2lfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocmFyX2luaXRfaGFuZGxlcik7Cittb2R1bGVfZXhpdChyYXJfZXhpdF9oYW5kbGVyKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbCBSZXN0cmljdGVkIEFjY2VzcyBSZWdpb24gUmVnaXN0ZXIgRHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFyX3JlZ2lzdGVyL3Jhcl9yZWdpc3Rlci5oIGIvZHJpdmVycy9zdGFnaW5nL3Jhcl9yZWdpc3Rlci9yYXJfcmVnaXN0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWFkZTBmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Jhcl9yZWdpc3Rlci9yYXJfcmVnaXN0ZXIuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorICogdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAorICogd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcworICogZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICovCisKKworI2lmbmRlZiBfUkFSX1JFR0lTVEVSX0gKKyNkZWZpbmUgX1JBUl9SRUdJU1RFUl9ICisKKyMgaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogZm9sbG93aW5nIGFyZSB1c2VkIGJvdGggaW4gZHJpdmVycyBhcyB3ZWxsIGFzIHVzZXIgc3BhY2UgYXBwcyAqLworZW51bSBSQVJfdHlwZSB7CisJUkFSX1RZUEVfVklERU8gPSAwLAorCVJBUl9UWVBFX0FVRElPLAorCVJBUl9UWVBFX0lNQUdFLAorCVJBUl9UWVBFX0RBVEEKK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qIFBDSSBkZXZpY2UgaWQgZm9yIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgUENJX1JBUl9ERVZJQ0VfSUQgMHg0MTEwCisKKy8qIFRoZSByZWdpc3Rlcl9yYXIgZnVuY3Rpb24gaXMgdG8gdXNlZCBieSBvdGhlciBkZXZpY2UgZHJpdmVycworICogdG8gZW5zdXJlIHRoYXQgdGhpcyBkcml2ZXIgaXMgcmVhZHkuIEFzIHdlIGNhbm5vdCBiZSBzdXJlIG9mCisgKiB0aGUgY29tcGlsZS9leGVjdXRlIG9yZGVyIG9mIGRpcnZlcnMgaW4gdGhlciBrZXJuZWwsIGl0IGlzCisgKiBiZXN0IHRvIGdpdmUgdGhpcyBkcml2ZXIgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdoZW4KKyAqIGl0IGlzIHJlYWR5IHRvIGdpdmUgb3V0IGFkZHJlc3Nlcy4gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiB3b3VsZCBoYXZlIHRob3NlIHN0ZXBzIHRoYXQgY29udGludWUgdGhlIGluaXRpYWxpemF0aW9uIG9mCisgKiBhIGRyaXZlciB0aGF0IGRvIHJlcXVpcmUgYSB2YWxpZCBSQVIgYWRkcmVzcy4gT25lIG9mIHRob3NlCisgKiBzdGVwcyB3b3VsZCBiZSB0byBjYWxsIGdldF9yYXJfYWRkcmVzcygpCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybiAwIG9uIHN1Y2Nlc3MgYW4gLTEgb24gZmFpbHVyZS4KKyAqLworaW50IHJlZ2lzdGVyX3JhcihpbnQgKCpjYWxsYmFjaykodm9pZCAqeW91cnBhcmFtZXRlciksIHZvaWQgKnlvdXJwYXJhbWV0ZXIpOworCisvKiBUaGUgZ2V0X3Jhcl9hZGRyZXNzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgb3RoZXIgZGV2aWNlIGRyaXZlcnMKKyAqIHRvIG9idGFpbiBSQVIgYWRkcmVzcyBpbmZvcm1hdGlvbiBvbiBhIFJBUi4gSXQgdGFrZXMgdHdvCisgKiBwYXJhbWV0ZXI6CisgKgorICogaW50IHJhcl9pbmRleAorICogVGhlIHJhcl9pbmRleCBpcyBhbiBpbmRleCB0byB0aGUgcmFyIGZvciB3aGljaCB5b3Ugd2lzaCB0byByZXRyaWV2ZQorICogdGhlIGFkZHJlc3MgaW5mb3JtYXRpb24uCisgKiBWYWx1ZXMgY2FuIGJlIDAsMSwgb3IgMi4KKyAqCisgKiBzdHJ1Y3QgUkFSX2FkZHJlc3Nfc3RydWN0IGlzIGEgcG9pbnRlciB0byBhIHBsYWNlIHRvIHdoaWNoIHRoZSBmdW5jdGlvbgorICogY2FuIHJldHVybiB0aGUgYWRkcmVzcyBzdHJ1Y3R1cmUgZm9yIHRoZSBSQVIuCisgKgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMgYSAwIHVwb24gc3VjY2VzcyBvciBhIC0xIGlmIHRoZXJlIGlzIG5vIFJBUgorICogZmFjaWxpdHkgb24gdGhpcyBzeXN0ZW0uCisgKi8KK2ludCByYXJfZ2V0X2FkZHJlc3MoaW50IHJhcl9pbmRleCwKKwkJZG1hX2FkZHJfdCAqc3RhcnRfYWRkcmVzcywKKwkJZG1hX2FkZHJfdCAqZW5kX2FkZHJlc3MpOworCisvKiBUaGUgbG9ja19yYXIgZnVuY3Rpb24gaXMgdWVkIGJ5IG90aGVyIGRldmljZSBkcml2ZXJzIHRvIGxvY2sgYW4gUkFSLgorICogb25jZSBhbiBSQVIgaXMgbG9ja2VkLCBpdCBzdGF5cyBsb2NrZWQgdW50aWwgdGhlIG5leHQgc3lzdGVtIHJlYm9vdC4KKyAqIFRoZSBmdW5jdGlvbiB0YWtlcyBvbmUgcGFyYW1ldGVyOgorICoKKyAqIGludCByYXJfaW5kZXgKKyAqIFRoZSByYXJfaW5kZXggaXMgYW4gaW5kZXggdG8gdGhlIHJhciB0aGF0IHlvdSB3YW50IHRvIGxvY2suCisgKiBWYWx1ZXMgY2FuIGJlIDAsMSwgb3IgMi4KKyAqCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIDAgdXBvbiBzdWNjZXNzIG9yIGEgLTEgaWYgdGhlcmUgaXMgbm8gUkFSCisgKiBmYWNpbGl0eSBvbiB0aGlzIHN5c3RlbS4KKyAqLworaW50IHJhcl9sb2NrKGludCByYXJfaW5kZXgpOworCisjZW5kaWYgIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAgLyogX1JBUl9SRUdJU1RFUl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL0tjb25maWcKaW5kZXggZjk5NjJiNi4uZjNhN2U0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvS2NvbmZpZwpAQCAtMyw2ICszLDggQEAKIAlkZXBlbmRzIG9uIFBDSSAmJiBYODYgJiYgV0xBTgogCXNlbGVjdCBXSVJFTEVTU19FWFQKIAlzZWxlY3QgV0VYVF9QUklWCisJc2VsZWN0IENSQ19DQ0lUVAorCXNlbGVjdCBGV19MT0FERVIKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIHRoZSBSYWxpbmsgMjg2MCBhbmQgMzA5MAogCSAgd2lyZWxlc3MgY2hpcHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9maXJtd2FyZS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vZmlybXdhcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZlY2QzMi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9maXJtd2FyZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTU4ICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChjKSAyMDA3LCBSYWxpbmsgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbgotIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSBSZWRpc3RyaWJ1dGlvbi4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gYmluYXJ5IGZvcm0sIHdpdGhvdXQKLSBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gbWV0OgotCi0gCSogUmVkaXN0cmlidXRpb25zIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUKLSAJZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotIAlwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gCSogTmVpdGhlciB0aGUgbmFtZSBvZiBSYWxpbmsgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIAlzdXBwbGllcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gCXNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIAkqIE5vIHJldmVyc2UgZW5naW5lZXJpbmcsIGRlY29tcGlsYXRpb24sIG9yIGRpc2Fzc2VtYmx5IG9mIHRoaXMgc29mdHdhcmUKLSAJaXMgcGVybWl0dGVkLgotCi0gTGltaXRlZCBwYXRlbnQgbGljZW5zZS4gUmFsaW5rIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gZ3JhbnRzIGEgd29ybGQtd2lkZSwKLSByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSB1bmRlciBwYXRlbnRzIGl0IG5vdyBvciBoZXJlYWZ0ZXIKLSBvd25zIG9yIGNvbnRyb2xzIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBpbXBvcnQsIG9mZmVyIHRvIHNlbGwgYW5kCi0gc2VsbCAoIlV0aWxpemUiKSB0aGlzIHNvZnR3YXJlLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkKLSBzdWNoIHBhdGVudCBpcyBuZWNlc3NhcnkgdG8gVXRpbGl6ZSB0aGUgc29mdHdhcmUgYWxvbmUsIG9yIGluCi0gY29tYmluYXRpb24gd2l0aCBhbiBvcGVyYXRpbmcgc3lzdGVtIGxpY2Vuc2VkIHVuZGVyIGFuIGFwcHJvdmVkIE9wZW4KLSBTb3VyY2UgbGljZW5zZSBhcyBsaXN0ZWQgYnkgdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUgYXQKLSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMuICBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi0gYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoaXMgc29mdHdhcmUuICBObyBoYXJkd2FyZSBwZXIKLSBzZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuCi0KLSBESVNDTEFJTUVSLiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECi0gQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLAotIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECi0gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKLSBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCi0gVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAotIERBTUFHRS4KLSovCi0vKiBBVVRPIEdFTiBQTEVBU0UgRE8gTk9UIE1PRElGWSBJVCAqLwotLyogQVVUTyBHRU4gUExFQVNFIERPIE5PVCBNT0RJRlkgSVQgKi8KLQotCi11OCBGaXJtd2FyZUltYWdlXzI4NjAgW10gPSB7Ci0weDAyLCAweDAzLCAweDVlLCAweDAyLCAweDAyLCAweGIxLCAweDIyLCAweDIyLCAweGZmLCAweGZmLCAweGZmLCAweDAyLCAweDAxLCAweDgyLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHgwMiwgMHgwMCwgMHgxZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMiwgMHgwMSwgMHgzMywgMHhjMCwgMHhlMCwKLTB4YzAsIDB4ZjAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ZDAsIDB4NzUsIDB4ZDAsIDB4MTgsIDB4YzIsIDB4YWYsIDB4MzAsIDB4NDUsIDB4MDMsCi0weDEyLCAweDEwLCAweDA5LCAweDkwLCAweDA0LCAweDE2LCAweGUwLCAweDMwLCAweGUzLCAweDAzLCAweDc0LCAweDA4LCAweGYwLCAweDkwLCAweDA0LCAweDE0LAotMHhlMCwgMHgyMCwgMHhlNywgMHgwMywgMHgwMiwgMHgwMCwgMHhjYiwgMHg3NCwgMHg4MCwgMHhmMCwgMHg5MCwgMHg3MCwgMHgxMiwgMHhlMCwgMHhmNSwgMHgyZiwKLTB4OTAsIDB4MDQsIDB4MDQsIDB4ZTAsIDB4MjQsIDB4Y2YsIDB4NjAsIDB4MzAsIDB4MTQsIDB4NjAsIDB4NDIsIDB4MjQsIDB4ZTIsIDB4NjAsIDB4NDcsIDB4MTQsCi0weDYwLCAweDU1LCAweDI0LCAweDIxLCAweDcwLCAweDYwLCAweGU1LCAweDU1LCAweDI0LCAweGZlLCAweDYwLCAweDA3LCAweDE0LCAweDYwLCAweDA4LCAweDI0LAotMHgwMiwgMHg3MCwgMHgwOCwgMHg3ZCwgMHgwMSwgMHg4MCwgMHgyOCwgMHg3ZCwgMHgwMiwgMHg4MCwgMHgyNCwgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHhmNSwKLTB4NTAsIDB4ODUsIDB4MmYsIDB4NDAsIDB4ZDIsIDB4MDEsIDB4ODAsIDB4M2UsIDB4ZTUsIDB4NTUsIDB4NjQsIDB4MDMsIDB4NjAsIDB4MDQsIDB4ZTUsIDB4NTUsCi0weDcwLCAweDA0LCAweDdkLCAweDAyLCAweDgwLCAweDA5LCAweDg1LCAweDJmLCAweDQxLCAweGQyLCAweDAyLCAweDgwLCAweDI5LCAweGFkLCAweDU1LCAweGFmLAotMHgyZiwgMHgxMiwgMHgwMiwgMHg4ZCwgMHg4MCwgMHgyMCwgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHhmNSwgMHg0NywgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwKLTB4ZjUsIDB4NDQsIDB4MTIsIDB4MTAsIDB4MjUsIDB4ODAsIDB4MDYsIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4ZjUsIDB4NDUsIDB4ZTQsIDB4ZmQsIDB4YWYsCi0weDJmLCAweDEyLCAweDAyLCAweDhkLCAweGQyLCAweDA0LCAweDkwLCAweDcwLCAweDEzLCAweGU0LCAweGYwLCAweGQyLCAweGFmLCAweGQwLCAweGQwLCAweGQwLAotMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhmMCwgMHhkMCwgMHhlMCwgMHgzMiwgMHg5MCwgMHg3MCwgMHgyYSwgMHhlMCwgMHgzMCwgMHhlMSwgMHg1MywgMHhjMiwKLTB4YWYsIDB4OTAsIDB4NzAsIDB4MjgsIDB4ZTAsIDB4OTAsIDB4MTAsIDB4MWMsIDB4ZjAsIDB4OTAsIDB4NzAsIDB4MjksIDB4ZTAsIDB4OTAsIDB4MTAsIDB4MWQsCi0weGYwLCAweDkwLCAweDcwLCAweDJhLCAweGUwLCAweDkwLCAweDEwLCAweDFlLCAweGYwLCAweDkwLCAweDEwLCAweDFjLCAweGUwLCAweGY1LCAweDMwLCAweDkwLAotMHgxMCwgMHgxZSwgMHhlMCwgMHgyMCwgMHhlMSwgMHhmMywgMHg5MCwgMHgxMCwgMHgxYywgMHhlMCwgMHg5MCwgMHg3MCwgMHgyOCwgMHhmMCwgMHg5MCwgMHgxMCwKLTB4MWQsIDB4ZTAsIDB4OTAsIDB4NzAsIDB4MjksIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MWUsIDB4ZTAsIDB4OTAsIDB4NzAsIDB4MmEsIDB4ZjAsIDB4MzAsIDB4NGEsCi0weDBkLCAweDkwLCAweDcwLCAweDI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDAyLCAweDJjLCAweDc0LCAweGZmLCAweGYwLCAweGMyLCAweDA1LAotMHhkMiwgMHhhZiwgMHgyMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHhmMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHhkMCwgMHhlOCwgMHhjMCwgMHhlMCwKLTB4ZTksIDB4YzAsIDB4ZTAsIDB4ZWEsIDB4YzAsIDB4ZTAsIDB4ZWIsIDB4YzAsIDB4ZTAsIDB4ZWMsIDB4YzAsIDB4ZTAsIDB4ZWQsIDB4YzAsIDB4ZTAsIDB4ZWUsCi0weGMwLCAweGUwLCAweGVmLCAweGMwLCAweGUwLCAweGMyLCAweGFmLCAweDMwLCAweDQ1LCAweDAzLCAweDEyLCAweDEwLCAweDEyLCAweGQyLCAweGFmLCAweGQwLAotMHhlMCwgMHhmZiwgMHhkMCwgMHhlMCwgMHhmZSwgMHhkMCwgMHhlMCwgMHhmZCwgMHhkMCwgMHhlMCwgMHhmYywgMHhkMCwgMHhlMCwgMHhmYiwgMHhkMCwgMHhlMCwKLTB4ZmEsIDB4ZDAsIDB4ZTAsIDB4ZjksIDB4ZDAsIDB4ZTAsIDB4ZjgsIDB4ZDAsIDB4ZDAsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZjAsIDB4ZDAsCi0weGUwLCAweDMyLCAweGMwLCAweGUwLCAweGMwLCAweGYwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweGQwLCAweDc1LCAweGQwLCAweDEwLCAweGMyLAotMHhhZiwgMHgzMCwgMHg0NSwgMHgwMywgMHgxMiwgMHgxMCwgMHgwYywgMHgzMCwgMHg1OCwgMHgwYSwgMHhlNSwgMHg1NCwgMHg2MCwgMHgwNCwgMHgxNSwgMHg1NCwKLTB4ODAsIDB4MDIsIDB4YzIsIDB4NTgsIDB4MzAsIDB4NTksIDB4MGEsIDB4ZTUsIDB4NTAsIDB4NjAsIDB4MDQsIDB4MTUsIDB4NTAsIDB4ODAsIDB4MDIsIDB4YzIsCi0weDU5LCAweGQ1LCAweDUzLCAweDA3LCAweDMwLCAweDYwLCAweDA0LCAweDE1LCAweDQ2LCAweGQyLCAweDA0LCAweDMwLCAweDQ1LCAweDAzLCAweDEyLCAweDEwLAotMHgwZiwgMHhjMiwgMHg4ZCwgMHhkMiwgMHhhZiwgMHhkMCwgMHhkMCwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhmMCwgMHhkMCwgMHhlMCwgMHgzMiwKLTB4MTIsIDB4MDIsIDB4ZDMsIDB4MzAsIDB4NDUsIDB4MDMsIDB4MTIsIDB4MTAsIDB4MDMsIDB4MzAsIDB4MDEsIDB4MDYsIDB4MjAsIDB4MDksIDB4MDMsIDB4MTIsCi0weDEwLCAweDFjLCAweDMwLCAweDAyLCAweDA2LCAweDIwLCAweDBhLCAweDAzLCAweDEyLCAweDEwLCAweDFmLCAweDMwLCAweDAzLCAweDA2LCAweDIwLCAweDBiLAotMHgwMywgMHgxMiwgMHgxMCwgMHgxZiwgMHgzMCwgMHgwNCwgMHgwNiwgMHgyMCwgMHgwYywgMHgwMywgMHgxMiwgMHgxMCwgMHgyMiwgMHgyMCwgMHgxMywgMHgwOSwKLTB4MjAsIDB4MTEsIDB4MDYsIDB4ZTUsIDB4MmIsIDB4NDUsIDB4MmMsIDB4NjAsIDB4MDMsIDB4ZDMsIDB4ODAsIDB4MDEsIDB4YzMsIDB4OTIsIDB4YTksIDB4MTIsCi0weDAyLCAweGVjLCAweDgwLCAweGJmLCAweGMyLCAweDQzLCAweGQyLCAweDQ1LCAweGU0LCAweGY1LCAweDIwLCAweGY1LCAweDIxLCAweGY1LCAweDUzLCAweGY1LAotMHg0NiwgMHhmNSwgMHgyYiwgMHhmNSwgMHgyYywgMHhjMiwgMHg0MiwgMHhmNSwgMHg1MSwgMHhmNSwgMHg1MiwgMHhmNSwgMHg1NSwgMHg5MCwgMHgwNCwgMHgxOCwKLTB4NzQsIDB4ODAsIDB4ZjAsIDB4OTAsIDB4MDQsIDB4MWEsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4YzIsIDB4MTksIDB4YzIsIDB4MTgsIDB4YzIsIDB4MWEsIDB4MjIsCi0weGM4LCAweGVmLCAweGM4LCAweGU2LCAweGZhLCAweDA4LCAweGU2LCAweDRhLCAweDYwLCAweDBjLCAweGM4LCAweGVmLCAweGM4LCAweDA4LCAweGU2LCAweDE2LAotMHgxOCwgMHg3MCwgMHgwMSwgMHgxNiwgMHhjMywgMHgyMiwgMHhlZCwgMHgyNCwgMHhmZiwgMHhmZCwgMHhlYywgMHgzNCwgMHhmZiwgMHhjOCwgMHhlZiwgMHhjOCwKLTB4ZjYsIDB4MDgsIDB4YzYsIDB4ZWQsIDB4YzYsIDB4ZDMsIDB4MjIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4NzAsIDB4MTIsCi0weDc0LCAweDAxLCAweDkzLCAweDcwLCAweDBkLCAweGEzLCAweGEzLCAweDkzLCAweGY4LCAweDc0LCAweDAxLCAweDkzLCAweGY1LCAweDgyLCAweDg4LCAweDgzLAotMHhlNCwgMHg3MywgMHg3NCwgMHgwMiwgMHg5MywgMHg2OCwgMHg2MCwgMHhlZiwgMHhhMywgMHhhMywgMHhhMywgMHg4MCwgMHhkZiwgMHhlZiwgMHhmNCwgMHg2MCwKLTB4MWYsIDB4ZTQsIDB4ZmUsIDB4MTIsIDB4MDMsIDB4NmEsIDB4ZTAsIDB4YjQsIDB4ZmYsIDB4MTIsIDB4MTIsIDB4MDMsIDB4NmEsIDB4ZWYsIDB4ZjAsIDB4NzQsCi0weDFjLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDcwLCAweGY1LCAweDgzLCAweGVkLCAweGYwLCAweDIyLCAweDBlLCAweGJlLCAweDA0LCAweGUzLAotMHgyMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHhmMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHhkMCwgMHg3NSwgMHhkMCwgMHgwOCwgMHhjMiwgMHhhZiwKLTB4MzAsIDB4NDUsIDB4MDMsIDB4MTIsIDB4MTAsIDB4MDYsIDB4ZDIsIDB4YWYsIDB4ZDAsIDB4ZDAsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZjAsCi0weGQwLCAweGUwLCAweDMyLCAweGMyLCAweGFmLCAweDEyLCAweDAwLCAweDA2LCAweDEyLCAweDAyLCAweDE0LCAweDEyLCAweDAzLCAweDFjLCAweGU0LCAweGY1LAotMHgyMiwgMHhmNSwgMHg0NywgMHg5MCwgMHgwNCwgMHgwMCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhkMiwgMHhhZiwgMHgyMiwgMHgzMCwgMHg0NSwgMHgwMywgMHgxMiwKLTB4MTAsIDB4MTUsIDB4ZTUsIDB4MjAsIDB4NzAsIDB4MDMsIDB4MjAsIDB4MTAsIDB4MDMsIDB4MzAsIDB4MTEsIDB4MDMsIDB4NDMsIDB4ODcsIDB4MDEsIDB4MjIsCi0weGMwLCAweDJhLCAweDc0LCAweDAzLCAweGMwLCAweGUwLCAweGMwLCAweDgyLCAweGMwLCAweDgzLCAweDc1LCAweDJhLCAweDBhLCAweDIyLCAweGMwLCAweDJhLAotMHg3NCwgMHgwMywgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MiwgMHhjMCwgMHg4MywgMHg3NSwgMHgyYSwgMHgxOCwgMHgyMiwgMHg3NSwgMHg4OSwgMHgwMiwgMHhlNCwKLTB4ZjUsIDB4OGMsIDB4ZjUsIDB4OGEsIDB4ZjUsIDB4ODgsIDB4ZjUsIDB4YjgsIDB4ZjUsIDB4ZTgsIDB4NzUsIDB4OTAsIDB4MTgsIDB4ZDIsIDB4OGMsIDB4NzUsCi0weGE4LCAweDA1LCAweDIyLCAweGNlLCAweGVmLCAweGNlLCAweGVlLCAweDYwLCAweDA4LCAweDdmLCAweGZmLCAweDEyLCAweDAzLCAweDgwLCAweDFlLCAweDgwLAotMHhmNSwgMHgyMiwgMHhjOCwgMHhlZiwgMHhjOCwgMHhlNiwgMHg2MCwgMHgwMywgMHgxNiwgMHhjMywgMHgyMiwgMHhlZCwgMHgxNCwgMHhmNiwgMHhkMywgMHgyMiwKLTB4YzgsIDB4ZWYsIDB4YzgsIDB4ZTYsIDB4NjAsIDB4MDYsIDB4MTYsIDB4ZTYsIDB4MjQsIDB4ZmYsIDB4YjMsIDB4MjIsIDB4YzMsIDB4MjIsIDB4NzgsIDB4N2YsCi0weGU0LCAweGY2LCAweGQ4LCAweGZkLCAweDc1LCAweDgxLCAweDVmLCAweDAyLCAweDAxLCAweGQwLCAweDc0LCAweDE0LCAweDJlLCAweGY1LCAweDgyLCAweGU0LAotMHgzNCwgMHg3MCwgMHhmNSwgMHg4MywgMHgyMiwgMHhlZiwgMHg5MCwgMHgwMywgMHg3ZSwgMHg5MywgMHg5MCwgMHgwMywgMHgwMCwgMHg3MywgMHgwYSwgMHgxOCwKLTB4ZWYsIDB4NjAsIDB4MDMsIDB4MWYsIDB4ODAsIDB4ZmEsIDB4MjIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHgwMiwgMHgxMCwgMHgyOCwgMHgwMiwgMHgxMCwgMHgzYiwgMHgwMiwgMHgxMCwgMHgzYywgMHgwMiwgMHgxMiwgMHhiOCwgMHgwMiwKLTB4MTIsIDB4YjksIDB4MDIsIDB4MTMsIDB4M2UsIDB4MDIsIDB4MTMsIDB4M2YsIDB4YzMsIDB4MjIsIDB4ZmYsIDB4ZmYsIDB4MDIsIDB4MTYsIDB4NTYsIDB4MDIsCi0weDE3LCAweDZiLCAweDAyLCAweDE0LCAweDJhLCAweDAyLCAweDEzLCAweDQwLCAweDMwLCAweDA1LCAweDA2LCAweDIwLCAweDBkLCAweDAzLCAweDEyLCAweDAwLAotMHhkOCwgMHgzMCwgMHgwNiwgMHgwNiwgMHgyMCwgMHgwZSwgMHgwMywgMHgxMiwgMHgxOCwgMHg1ZSwgMHgyMiwgMHgyMiwgMHg5MCwgMHgwNCwgMHgxNCwgMHhlMCwKLTB4MjAsIDB4ZTcsIDB4MDMsIDB4MDIsIDB4MTIsIDB4YjcsIDB4OTAsIDB4NzAsIDB4MTIsIDB4ZTAsIDB4ZjUsIDB4NTYsIDB4OTAsIDB4MDQsIDB4MDQsIDB4ZTAsCi0weDEyLCAweDAyLCAweDY3LCAweDExLCAweDRlLCAweDMwLCAweDExLCAweDI1LCAweDMxLCAweDEwLCAweDg3LCAweDMzLCAweDEwLCAweGFhLCAweDM0LCAweDEwLAotMHhjMywgMHgzNSwgMHgxMSwgMHg1NywgMHg1MCwgMHgxMSwgMHg3YiwgMHg1MSwgMHgxMSwgMHg4NCwgMHg1MiwgMHgxMSwgMHg4NCwgMHg1MywgMHgxMSwgMHg4NCwKLTB4NTQsIDB4MTEsIDB4YzUsIDB4NTUsIDB4MTEsIDB4ZGMsIDB4NzAsIDB4MTIsIDB4MDcsIDB4NzEsIDB4MTIsIDB4MzQsIDB4NzIsIDB4MTIsIDB4NWUsIDB4ODAsCi0weDEyLCAweDgxLCAweDgzLCAweDAwLCAweDAwLCAweDEyLCAweGI3LCAweDc1LCAweDI0LCAweDA1LCAweDc1LCAweDI1LCAweGRjLCAweDkwLCAweDcwLCAweDlmLAotMHg3NCwgMHgxMiwgMHhmMCwgMHhkMiwgMHgxOCwgMHhkMiwgMHg2MSwgMHg3NSwgMHgzNSwgMHgwZCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwKLTB4NTYsIDB4ZjQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTIsIDB4YjcsIDB4MDIsIDB4MTIsIDB4YWEsIDB4YzIsIDB4MTgsIDB4OTAsIDB4MDEsIDB4MTQsIDB4ZTAsCi0weDU0LCAweGZkLCAweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDcwLCAweDAzLCAweDAyLCAweDEyLCAweGI3LAotMHgwMiwgMHgxMiwgMHhhYSwgMHhlNSwgMHg1NSwgMHg2NCwgMHgwMiwgMHg3MCwgMHgzNywgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHg2MCwgMHgwOCwgMHg5MCwKLTB4MDEsIDB4MGQsIDB4NzQsIDB4MDksIDB4ZjAsIDB4ODAsIDB4MjUsIDB4ZTUsIDB4MzQsIDB4MTQsIDB4NjAsIDB4MGEsIDB4MTQsIDB4NjAsIDB4MGYsIDB4MTQsCi0weDYwLCAweDE0LCAweDI0LCAweDAzLCAweDcwLCAweDE2LCAweDkwLCAweDAxLCAweDBkLCAweDc0LCAweDA4LCAweGYwLCAweDgwLCAweDBlLCAweDkwLCAweDAxLAotMHgwZCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg4MCwgMHgwNiwgMHg5MCwgMHgwMSwgMHgwZCwgMHg3NCwgMHgxYiwgMHhmMCwgMHg3ZCwgMHgwMSwgMHg4MCwgMHgwMiwKLTB4N2QsIDB4MDIsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MDIsIDB4OGQsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4MWIsIDB4OTAsCi0weDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDcwLCAweDAzLCAweDAyLAotMHgxMiwgMHhiNywgMHgwMiwgMHgxMiwgMHhhYSwgMHgyMCwgMHgwMiwgMHgwMywgMHgzMCwgMHgwMywgMHgxZCwgMHg3ZCwgMHgwMiwgMHhhZiwgMHg1NiwgMHgxMiwKLTB4MDIsIDB4OGQsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsCi0weDcwLCAweDAzLCAweDAyLCAweDEyLCAweGI3LCAweDAyLCAweDEyLCAweGFhLCAweDg1LCAweDU2LCAweDQxLCAweGQyLCAweDAyLCAweDIyLCAweDkwLCAweDcwLAotMHgxMSwgMHhlMCwgMHgyNCwgMHhmZiwgMHg5MiwgMHgxYiwgMHgyMiwgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHg1NCwgMHg3ZiwgMHg2NCwgMHgwMiwgMHg2MCwKLTB4MDMsIDB4MDIsIDB4MTIsIDB4YjcsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4NjQsIDB4MDgsIDB4NjAsIDB4MDgsIDB4ZTAsIDB4NjQsIDB4MjAsIDB4NjAsCi0weDAzLCAweDAyLCAweDEyLCAweGI3LCAweDc1LCAweDRlLCAweDAzLCAweDc1LCAweDRmLCAweDIwLCAweDIyLCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweDI0LAotMHhmZiwgMHg5MiwgMHg0NywgMHgyMiwgMHg5MCwgMHgwNCwgMHgwNCwgMHhlMCwgMHgyNSwgMHhlMCwgMHgyNCwgMHg1ZCwgMHhmNSwgMHg1NywgMHg5MCwgMHg3MCwKLTB4MTAsIDB4ZTAsIDB4ZmYsIDB4NzQsIDB4NDcsIDB4MjUsIDB4NTcsIDB4ZjgsIDB4YzYsIDB4ZWYsIDB4YzYsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4ZmYsCi0weDc0LCAweDQ4LCAweDI1LCAweDU3LCAweGY4LCAweGM2LCAweGVmLCAweGM2LCAweGU0LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDAyLCAweDhkLCAweDkwLAotMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg3MCwgMHgwMywgMHgwMiwKLTB4MTIsIDB4YjcsIDB4MDIsIDB4MTIsIDB4YWEsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDcsIDB4MDgsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4NTQsIDB4MDcsCi0weGY1LCAweDI2LCAweGU0LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDAyLCAweDhkLCAweGQyLCAweDA0LCAweDIyLCAweDkwLCAweDcwLCAweDEwLCAweGUwLAotMHhmZSwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHhmZCwgMHhlZCwgMHhmOCwgMHhlNiwgMHhmNSwgMHg1NywgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwMiwKLTB4OGQsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NzAsCi0weDAzLCAweDAyLCAweDEyLCAweGI3LCAweDAyLCAweDEyLCAweGFhLCAweDkwLCAweDcwLCAweDEwLCAweGUwLCAweGZlLCAweDkwLCAweDcwLCAweDExLCAweGUwLAotMHhmZCwgMHhlZCwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHhmNSwgMHg1NywgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwMiwgMHg4ZCwgMHg5MCwKLTB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NzAsIDB4MDMsIDB4MDIsCi0weDEyLCAweGI3LCAweDgwLCAweDc2LCAweGU0LCAweGY1LCAweDRlLCAweGY1LCAweDRmLCAweDc1LCAweDI2LCAweGZmLCAweGMyLCAweDE5LCAweGMyLCAweDE4LAotMHhjMiwgMHgxYSwgMHg3NSwgMHgzNCwgMHhmZiwgMHhhZCwgMHg1NywgMHhhZiwgMHg1NiwgMHgxMiwgMHgwMiwgMHg4ZCwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwKLTB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NjAsIDB4NWIsIDB4ODAsIDB4NGMsIDB4OTAsIDB4NzAsCi0weDEwLCAweGUwLCAweDI0LCAweGZmLCAweDkyLCAweDRhLCAweGQyLCAweDA1LCAweGFkLCAweDU3LCAweGFmLCAweDU2LCAweDEyLCAweDAyLCAweDhkLCAweDkwLAotMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg2MCwgMHgzOCwgMHg4MCwKLTB4MjksIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4ZjUsIDB4MzQsIDB4ZDMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MGQsIDB4ZTAsCi0weDU0LCAweGZiLCAweGYwLCAweGFkLCAweDU3LCAweGFmLCAweDU2LCAweDEyLCAweDAyLCAweDhkLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLAotMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg2MCwgMHgwZCwgMHg5MCwgMHg3MCwgMHgyNSwgMHhlMCwgMHg0NCwgMHgwMSwKLTB4ZjAsIDB4OTAsIDB4MDIsIDB4MmMsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4MjIsIDB4MjIsIDB4ZTUsIDB4NTMsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MTMsIDB4M2QsCi0weGU1LCAweDRmLCAweDQ1LCAweDRlLCAweDYwLCAweDA4LCAweGU1LCAweDRmLCAweDE1LCAweDRmLCAweDcwLCAweDAyLCAweDE1LCAweDRlLCAweGEyLCAweDE5LAotMHhlNCwgMHgzMywgMHg5MCwgMHg3MCwgMHg5MCwgMHhmMCwgMHhhMiwgMHgxOCwgMHhlNCwgMHgzMywgMHhhMywgMHhmMCwgMHgzMCwgMHgxOSwgMHg0ZCwgMHg5MCwKLTB4NzAsIDB4OTgsIDB4NzQsIDB4MjMsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4MjUsIDB4ZjAsIDB4ZTUsIDB4MjQsIDB4YTMsIDB4ZjAsIDB4N2YsIDB4MzUsIDB4N2QsCi0weDMyLCAweDEyLCAweDAzLCAweDQyLCAweDUwLCAweDA5LCAweDkwLCAweDEwLCAweDA0LCAweGUwLCAweDU0LCAweGY3LCAweGYwLCAweGQyLCAweDA2LCAweGU1LAotMHgzNSwgMHhkMywgMHg5NCwgMHgxMCwgMHg0MCwgMHgxZSwgMHgzMCwgMHgxYSwgMHgxYiwgMHhjMiwgMHgxYSwgMHhhMiwgMHgxOCwgMHg5MiwgMHgxOSwgMHgyMCwKLTB4MTksIDB4MTIsIDB4OTAsIDB4MDQsIDB4MDksIDB4ZTAsIDB4NTQsIDB4ZGQsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MDQsIDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsCi0weGMyLCAweDYxLCAweGQyLCAweDAzLCAweGU1LCAweDM1LCAweGI0LCAweDBiLCAweDE0LCAweGQyLCAweDAzLCAweDIyLCAweGU0LCAweGY1LCAweDM1LCAweGEyLAotMHgxOCwgMHg5MiwgMHgxOSwgMHgzMCwgMHgxOSwgMHgwNywgMHg5MCwgMHgwNCwgMHgwOSwgMHhlMCwgMHg0NCwgMHgyMiwgMHhmMCwgMHgyMiwgMHgyMiwgMHgyMiwKLTB4YzIsIDB4NGIsIDB4YzIsIDB4NGMsIDB4ZTUsIDB4NDQsIDB4MTIsIDB4MDIsIDB4NjcsIDB4MTMsIDB4NjIsIDB4MDAsIDB4MTMsIDB4ZjUsIDB4MDQsIDB4MTMsCi0weGYxLCAweDA4LCAweDEzLCAweGNjLCAweDEwLCAweDEzLCAweDc2LCAweDIwLCAweDEzLCAweDk2LCAweDYwLCAweDEzLCAweGE3LCAweGEwLCAweDAwLCAweDAwLAotMHgxMywgMHhmNywgMHg4NSwgMHg0OCwgMHg0MywgMHg4NSwgMHg0YSwgMHg0MiwgMHg4NSwgMHg0YywgMHg1ZSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNiwgMHg2MCwKLTB4MDMsIDB4MDIsIDB4MTMsIDB4ZjcsIDB4ODAsIDB4MWIsIDB4ZTUsIDB4NDgsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NDMsIDB4ZTUsIDB4NGEsIDB4YzQsCi0weDU0LCAweDBmLCAweGY1LCAweDQyLCAweGU1LCAweDRjLCAweGM0LCAweDU0LCAweDBmLCAweGY1LCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDcwLAotMHg2NiwgMHg1MywgMHg0MywgMHgwZiwgMHg4MCwgMHg2MSwgMHg4NSwgMHg0OSwgMHg0MywgMHg4NSwgMHg0YiwgMHg0MiwgMHg4NSwgMHg0ZCwgMHg1ZSwgMHhlNSwKLTB4NDcsIDB4NjQsIDB4MDYsIDB4NzAsIDB4NTIsIDB4ODAsIDB4MWIsIDB4ZTUsIDB4NDksIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NDMsIDB4ZTUsIDB4NGIsCi0weGM0LCAweDU0LCAweDBmLCAweGY1LCAweDQyLCAweGU1LCAweDRkLCAweGM0LCAweDU0LCAweDBmLCAweGY1LCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LAotMHg3MCwgMHgzNSwgMHhlNSwgMHg0MywgMHg1NCwgMHgwZiwgMHg0NCwgMHgxMCwgMHhmNSwgMHg0MywgMHg4MCwgMHgyYiwgMHhlNSwgMHg0NywgMHhiNCwgMHgwNCwKLTB4MDYsIDB4NTMsIDB4NWUsIDB4ZmIsIDB4NzUsIDB4NDIsIDB4MDksIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDUsIDB4MDYsIDB4NDMsIDB4NWUsIDB4MDQsIDB4NzUsCi0weDQyLCAweDA5LCAweGU1LCAweDQ3LCAweGI0LCAweDA2LCAweDEwLCAweGU1LCAweDQzLCAweDU0LCAweDBmLCAweDQ0LCAweDMwLCAweGY1LCAweDQzLCAweDgwLAotMHgwNiwgMHhkMiwgMHg0YiwgMHg4MCwgMHgwMiwgMHhkMiwgMHg0YywgMHhlNCwgMHhmNSwgMHgzOCwgMHhlNSwgMHg0MiwgMHhjNCwgMHg1NCwgMHhmMCwgMHhmZiwKLTB4ZTUsIDB4NDMsIDB4NTQsIDB4MGYsIDB4NGYsIDB4ZjUsIDB4NWYsIDB4OTAsIDB4NzAsIDB4NDQsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4NWUsIDB4ZjAsIDB4YTMsCi0weGU1LCAweDRhLCAweGYwLCAweGEzLCAweGU1LCAweDQ4LCAweGYwLCAweGEzLCAweGU1LCAweDRjLCAweGYwLCAweGEzLCAweGU1LCAweDQ0LCAweGYwLCAweGEzLAotMHhlNSwgMHg0MiwgMHhmMCwgMHhhMywgMHhlNSwgMHg0MywgMHhmMCwgMHhkMiwgMHg2MCwgMHgyMiwgMHhlNSwgMHg0NywgMHg2MCwgMHgxMCwgMHgyNCwgMHhjMCwKLTB4NzAsIDB4MDMsIDB4MTIsIDB4MTYsIDB4MzYsIDB4MTIsIDB4MTQsIDB4M2YsIDB4YzIsIDB4YWYsIDB4YzIsIDB4MDQsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4YzIsCi0weGFmLCAweDkwLCAweDA0LCAweDE0LCAweGUwLCAweDU0LCAweDBlLCAweDYwLCAweDA0LCAweGQyLCAweDFjLCAweDgwLCAweDA4LCAweGU1LCAweDRlLCAweDQ1LAotMHg0ZiwgMHgyNCwgMHhmZiwgMHg5MiwgMHgxYywgMHhkMiwgMHhhZiwgMHg5MCwgMHgwNCwgMHgxNCwgMHhlMCwgMHhhMiwgMHhlNCwgMHg5MiwgMHgxZCwgMHg3NCwKLTB4MWUsIDB4ZjAsIDB4ZTUsIDB4NWYsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4MmQsIDB4ZTUsIDB4MzgsIDB4NzAsIDB4MTMsIDB4MzAsIDB4MWMsIDB4MDUsIDB4ZTUsCi0weDVmLCAweDIwLCAweGU1LCAweDBiLCAweDMwLCAweDFkLCAweDE5LCAweGU1LCAweDVmLCAweDU0LCAweDMwLCAweGZmLCAweGJmLCAweDMwLCAweDExLCAweGU1LAotMHgzOCwgMHg3MCwgMHgwNSwgMHg3NSwgMHgzOCwgMHgwYywgMHg4MCwgMHgwMiwgMHgxNSwgMHgzOCwgMHhkMiwgMHg2YywgMHhkMiwgMHg2ZCwgMHg4MCwgMHgwZiwKLTB4ZTUsIDB4NWYsIDB4MzAsIDB4ZTYsIDB4MDYsIDB4YzIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4ODAsIDB4MDQsIDB4ZDIsIDB4NmMsIDB4YzIsIDB4NmQsIDB4ZTUsCi0weDQ3LCAweDY0LCAweDAzLCAweDcwLCAweDIxLCAweDMwLCAweDRiLCAweDA2LCAweGMyLCAweDZjLCAweGQyLCAweDZkLCAweDgwLCAweDE4LCAweGU1LCAweDM4LAotMHg3MCwgMHgwMywgMHgzMCwgMHg0YywgMHgxMSwgMHhjMiwgMHg0YywgMHhlNSwgMHgzOCwgMHg3MCwgMHgwNSwgMHg3NSwgMHgzOCwgMHgwNywgMHg4MCwgMHgwMiwKLTB4MTUsIDB4MzgsIDB4ZDIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4OTAsIDB4NzAsIDB4NDYsIDB4ZTUsIDB4MmQsIDB4ZjAsIDB4MjAsIDB4NjksIDB4MDcsIDB4ZTUsCi0weDVlLCAweDIwLCAweGUwLCAweDAyLCAweGIyLCAweDY4LCAweDIwLCAweDZiLCAweDA3LCAweGU1LCAweDVlLCAweDIwLCAweGUxLCAweDAyLCAweGIyLCAweDZhLAotMHgyMCwgMHg2ZCwgMHgwNywgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMiwgMHgwMiwgMHhiMiwgMHg2YywgMHg5MCwgMHg3MCwgMHg0NywgMHhlNSwgMHgyZCwgMHhmMCwKLTB4NzUsIDB4MmUsIDB4NDAsIDB4MjAsIDB4NjksIDB4MDQsIDB4YTIsIDB4NjgsIDB4ODAsIDB4MTUsIDB4MzAsIDB4NjgsIDB4MDYsIDB4ZTUsIDB4NDYsIDB4YTIsCi0weGUzLCAweDgwLCAweDBjLCAweGU1LCAweDQ2LCAweDU0LCAweGYwLCAweGZmLCAweGJmLCAweGYwLCAweDAzLCAweGQzLCAweDgwLCAweDAxLCAweGMzLCAweDkyLAotMHg3MywgMHg5MiwgMHg3MiwgMHgyMCwgMHg2YiwgMHgwNCwgMHhhMiwgMHg2YSwgMHg4MCwgMHgxNSwgMHgzMCwgMHg2YSwgMHgwNiwgMHhlNSwgMHg0NiwgMHhhMiwKLTB4ZTMsIDB4ODAsIDB4MGMsIDB4ZTUsIDB4NDYsIDB4NTQsIDB4ZjAsIDB4ZmYsIDB4YmYsIDB4ZjAsIDB4MDMsIDB4ZDMsIDB4ODAsIDB4MDEsIDB4YzMsIDB4OTIsCi0weDc1LCAweDkyLCAweDc0LCAweDIwLCAweDZkLCAweDA0LCAweGEyLCAweDZjLCAweDgwLCAweDE1LCAweDMwLCAweDZjLCAweDA2LCAweGU1LCAweDQ2LCAweGEyLAotMHhlMywgMHg4MCwgMHgwYywgMHhlNSwgMHg0NiwgMHg1NCwgMHhmMCwgMHhmZiwgMHhiZiwgMHhmMCwgMHgwMywgMHhkMywgMHg4MCwgMHgwMSwgMHhjMywgMHg5MiwKLTB4NzEsIDB4OTIsIDB4NzAsIDB4OTAsIDB4MTAsIDB4MmYsIDB4ZTUsIDB4MmUsIDB4ZjAsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsIDB4NzAsIDB4NDYsIDB4OTAsCi0weDAyLCAweDI5LCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweGU1LCAweDQzLCAweGM0LCAweDU0LCAweDBmLCAweDE0LCAweDYwLCAweDE0LCAweDI0LCAweGZlLAotMHg2MCwgMHgxZiwgMHgyNCwgMHgwMywgMHg2MCwgMHgwMywgMHgwMiwgMHgxNiwgMHgzNSwgMHg5MCwgMHgwMiwgMHgyOCwgMHhlMCwgMHgzMCwgMHg0NywgMHgwZCwKLTB4ODAsIDB4MDcsIDB4OTAsIDB4MDIsIDB4MjgsIDB4ZTAsIDB4MjAsIDB4NDcsIDB4MDQsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4MjIsIDB4NDQsIDB4MDEsIDB4ZjAsCi0weDIyLCAweGU1LCAweDQ2LCAweDMwLCAweGUzLCAweDA0LCAweDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweDkwLCAweDAyLCAweDI4LCAweGUwLAotMHg1NCwgMHhmZSwgMHg0ZiwgMHhmMCwgMHgyMiwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNywgMHg2MCwgMHgwMywgMHgwMiwgMHgxNiwgMHgzNSwgMHhmNSwgMHgyNywKLTB4OTAsIDB4MDIsIDB4MjksIDB4ZTAsIDB4NTQsIDB4ZmMsIDB4ZjAsIDB4ZTUsIDB4MjYsIDB4MTQsIDB4NjAsIDB4MjYsIDB4MTQsIDB4NjAsIDB4MmUsIDB4MTQsCi0weDYwLCAweDM2LCAweDI0LCAweDAzLCAweDcwLCAweDVmLCAweGU1LCAweDQ2LCAweDEzLCAweDEzLCAweDEzLCAweDU0LCAweDFmLCAweDc1LCAweGYwLCAweDAzLAotMHg4NCwgMHhhZiwgMHhmMCwgMHgyMCwgMHg0NywgMHgwNCwgMHg3ZSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZSwgMHgwMCwgMHhlZiwgMHg2ZSwgMHgyNCwgMHhmZiwKLTB4ODAsIDB4MDIsIDB4YTIsIDB4NDcsIDB4OTIsIDB4MzksIDB4YTIsIDB4NDcsIDB4YjMsIDB4OTIsIDB4MzgsIDB4ODAsIDB4M2YsIDB4ZTUsIDB4NDYsIDB4MzAsCi0weGUzLCAweDAzLCAweGQzLCAweDgwLCAweDI3LCAweGMzLCAweDgwLCAweDI0LCAweGU1LCAweDQ2LCAweDMwLCAweGUzLCAweDBkLCAweDU0LCAweDcwLCAweGMzLAotMHg5NCwgMHg2MCwgMHg1MCwgMHgwNiwgMHg3ZSwgMHgwMCwgMHg3ZiwgMHgwMSwgMHg4MCwgMHgwNCwgMHg3ZSwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgyMCwgMHg0NywKLTB4MDQsIDB4N2QsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2QsIDB4MDAsIDB4ZWYsIDB4NmQsIDB4NGUsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4MzgsIDB4YTIsIDB4NDcsCi0weGIzLCAweDkyLCAweDM5LCAweDgwLCAweDA3LCAweGEyLCAweDQ3LCAweGIzLCAweDkyLCAweDM4LCAweDkyLCAweDM5LCAweDkwLCAweDAyLCAweDI4LCAweGUwLAotMHg1NCwgMHhmYywgMHg0NSwgMHgyNywgMHhmMCwgMHgyMiwgMHhlNCwgMHg5MCwgMHgwMiwgMHgyOSwgMHhmMCwgMHgzMCwgMHg0NywgMHgwNCwgMHhhZiwgMHg0NSwKLTB4ODAsIDB4MDQsIDB4ZTUsIDB4NDUsIDB4ZjQsIDB4ZmYsIDB4OTAsIDB4MDIsIDB4MjgsIDB4ZWYsIDB4ZjAsIDB4MjIsIDB4OGYsIDB4NTAsIDB4ZDIsIDB4NTksCi0weDIyLCAweDhmLCAweDU0LCAweGQyLCAweDU4LCAweDIyLCAweGU0LCAweGY1LCAweDMwLCAweGMyLCAweGFmLCAweGU1LCAweDUxLCAweDE0LCAweDYwLCAweDRhLAotMHgxNCwgMHg2MCwgMHg2YSwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgxNywgMHg0YywgMHhkMiwgMHg1OSwgMHg3NSwgMHg1NSwgMHgwMSwgMHgyMCwKLTB4MTksIDB4MWMsIDB4OTAsIDB4MDIsIDB4MDgsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MjMsIDB4OTAsIDB4MDQsIDB4MzQsCi0weGUwLCAweGI0LCAweDAyLCAweDFjLCAweGEzLCAweGUwLCAweGI0LCAweDAyLCAweDE3LCAweGEzLCAweGUwLCAweGI0LCAweDAyLCAweDEyLCAweDdmLCAweDIwLAotMHgxMiwgMHgxNiwgMHg0YywgMHg5MCwgMHgxMCwgMHgwNCwgMHhlMCwgMHg1NCwgMHhmMywgMHhmMCwgMHg3NSwgMHg1MSwgMHgwMSwgMHgwMiwgMHgxNywgMHg0YywKLTB4ZTUsIDB4NTAsIDB4NzAsIDB4MDYsIDB4NzUsIDB4MzAsIDB4MDMsIDB4MDIsIDB4MTcsIDB4NGMsIDB4OTAsIDB4MTIsIDB4MDAsIDB4ZTAsIDB4NTQsIDB4MDMsCi0weDcwLCAweDE1LCAweDdmLCAweDIwLCAweDEyLCAweDE2LCAweDRjLCAweDIwLCAweDE5LCAweDA3LCAweDkwLCAweDAyLCAweDA4LCAweGUwLCAweDU0LCAweGZiLAotMHhmMCwgMHg3NSwgMHg1MSwgMHgwMiwgMHgwMiwgMHgxNywgMHg0YywgMHhlNSwgMHg1MCwgMHg3MCwgMHgwMiwgMHg4MCwgMHg3YSwgMHgyMCwgMHgxOSwgMHgwZiwKLTB4OTAsIDB4MDIsIDB4MDgsIDB4ZTAsIDB4MjAsIDB4ZTMsIDB4NmMsIDB4OTAsIDB4MDQsIDB4MzcsIDB4ZTAsIDB4NjQsIDB4MjIsIDB4NzAsIDB4NjQsIDB4OTAsCi0weDEyLCAweDA0LCAweDc0LCAweDBhLCAweGYwLCAweDMwLCAweDFiLCAweDExLCAweDkwLCAweDEzLCAweDI4LCAweGUwLCAweDU0LCAweGYwLCAweGYwLCAweGEzLAotMHhlMCwgMHg1NCwgMHhmMCwgMHhmMCwgMHhhMywgMHhlMCwgMHg1NCwgMHhmYSwgMHhmMCwgMHgyMCwgMHgxOSwgMHgwNywgMHg5MCwgMHgwNCwgMHgwMSwgMHhlMCwKLTB4NDQsIDB4MTAsIDB4ZjAsIDB4ZTUsIDB4MzQsIDB4ZjQsIDB4OTAsIDB4MDQsIDB4MDEsIDB4NjAsIDB4MDYsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4ODAsCi0weDA0LCAweGUwLCAweDU0LCAweGY5LCAweGYwLCAweDIwLCAweDE5LCAweDA3LCAweDkwLCAweDEyLCAweDA0LCAweGUwLCAweDQ0LCAweDA0LCAweGYwLCAweGU1LAotMHgzNCwgMHhmNCwgMHg2MCwgMHgxNCwgMHg5MCwgMHgwMSwgMHgwZCwgMHhlMCwgMHhmNSwgMHgzMywgMHhlNSwgMHgzNCwgMHhkMywgMHg5NCwgMHgwMiwgMHg0MCwKLTB4MDcsIDB4OTAsIDB4MTIsIDB4MDQsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4NzUsIDB4MzAsIDB4MDEsIDB4NzUsIDB4NTUsIDB4MDIsIDB4ZTQsIDB4ZjUsCi0weDUxLCAweDgwLCAweDA5LCAweGU1LCAweDUwLCAweDcwLCAweDA1LCAweDc1LCAweDMwLCAweDAzLCAweGY1LCAweDUxLCAweGU1LCAweDMwLCAweDYwLCAweDE4LAotMHhjMiwgMHgwMSwgMHhlNCwgMHhmNSwgMHg1MSwgMHhjMiwgMHg1OSwgMHgyMCwgMHgxOSwgMHgwZSwgMHhhZCwgMHgzMCwgMHhhZiwgMHg0MCwgMHgxMiwgMHgxOCwKLTB4MmEsIDB4ZTUsIDB4MzAsIDB4YjQsIDB4MDMsIDB4MDIsIDB4ZDIsIDB4MDMsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4YzIsIDB4YWYsIDB4MzAsIDB4MDEsIDB4MGUsCi0weGU0LCAweGY1LCAweDUxLCAweGMyLCAweDU5LCAweGMyLCAweDAxLCAweDdkLCAweDAyLCAweGFmLCAweDQwLCAweDEyLCAweDE4LCAweDJhLCAweGU1LCAweDUyLAotMHgxNCwgMHg2MCwgMHg1NSwgMHgxNCwgMHg2MCwgMHgyZiwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgxOCwgMHgyNywgMHhlNSwgMHgzNCwgMHhmNCwKLTB4NjAsIDB4MjMsIDB4ZTUsIDB4MzQsIDB4ZDMsIDB4OTQsIDB4MDIsIDB4NDAsIDB4MTYsIDB4OTAsIDB4MTIsIDB4MDQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsCi0weDkwLCAweDAxLCAweDBkLCAweGUwLCAweDIwLCAweGUzLCAweDAzLCAweDAyLCAweDE4LCAweDI3LCAweDdmLCAweDUwLCAweDEyLCAweDE2LCAweDUxLCAweDc1LAotMHg1MiwgMHgwMiwgMHg3NSwgMHg1NSwgMHgwMywgMHhlNSwgMHgzNCwgMHhmNCwgMHg2MCwgMHgwYSwgMHhlNSwgMHg1NCwgMHg3MCwgMHg2OSwgMHg5MCwgMHgwMSwKLTB4MGQsIDB4ZTUsIDB4MzMsIDB4ZjAsIDB4OTAsIDB4MTIsIDB4MDQsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4N2YsIDB4MjAsIDB4MTIsIDB4MTYsIDB4NTEsCi0weDc1LCAweDUyLCAweDAxLCAweDc1LCAweDU1LCAweDAzLCAweDgwLCAweDRmLCAweGU1LCAweDU0LCAweDcwLCAweDRiLCAweDkwLCAweDA0LCAweDAxLCAweGUwLAotMHg0NCwgMHgwZSwgMHhmMCwgMHgyMCwgMHgxOSwgMHgwNCwgMHhlMCwgMHg1NCwgMHhlZiwgMHhmMCwgMHg5MCwgMHgxMywgMHgyOCwgMHhlMCwgMHg0NCwgMHgwZiwKLTB4ZjAsIDB4YTMsIDB4ZTAsIDB4NDQsIDB4MGYsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NDQsIDB4MDUsIDB4ZjAsIDB4OTAsIDB4MTIsIDB4MDQsIDB4NzQsIDB4MDMsCi0weGYwLCAweDIwLCAweDE5LCAweDA3LCAweDkwLCAweDAyLCAweDA4LCAweGUwLCAweDQ0LCAweDA1LCAweGYwLCAweDkwLCAweDEwLCAweDA0LCAweGUwLCAweDQ0LAotMHgwYywgMHhmMCwgMHhlNCwgMHhmNSwgMHg1MiwgMHhmNSwgMHg1NSwgMHgzMCwgMHgwMiwgMHgwYiwgMHhjMiwgMHgwMiwgMHg3ZCwgMHgwMSwgMHhhZiwgMHg0MSwKLTB4MTIsIDB4MTgsIDB4MmEsIDB4ODAsIDB4MDIsIDB4YzIsIDB4MDMsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4ZWYsIDB4ZjQsIDB4NjAsIDB4MmQsIDB4ZTQsIDB4ZmUsCi0weDc0LCAweDE0LCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDcwLCAweGY1LCAweDgzLCAweGUwLCAweGI0LCAweGZmLCAweDE5LCAweDc0LCAweDE0LAotMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3MCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHg3NCwgMHgxYywgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwKLTB4MzQsIDB4NzAsIDB4ZjUsIDB4ODMsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4MGUsIDB4YmUsIDB4MDQsIDB4ZDUsIDB4MjIsIDB4MjIsIDB4MjIsIDB4MjAsIDB4MTksCi0weDAzLCAweDAyLCAweDE5LCAweDBmLCAweDkwLCAweDcwLCAweDgwLCAweGUwLCAweDA0LCAweGYwLCAweDkwLCAweDA0LCAweDM3LCAweGUwLCAweDMwLCAweGU1LAotMHgwMywgMHgwMiwgMHgxOSwgMHgwYiwgMHg5MCwgMHgwNCwgMHgyOCwgMHhlMCwgMHhmNSwgMHgzMSwgMHhhMywgMHhlMCwgMHhmNSwgMHgzMCwgMHhmNSwgMHgzMiwKLTB4ZTQsIDB4ZjUsIDB4MzcsIDB4OTAsIDB4NzAsIDB4ODEsIDB4ZTAsIDB4MDQsIDB4ZjAsIDB4OTAsIDB4NzAsIDB4ODIsIDB4ZTAsIDB4MDQsIDB4ZjAsIDB4ZTUsCi0weDMyLCAweDc1LCAweGYwLCAweDgwLCAweGE0LCAweDI0LCAweDAwLCAweGZmLCAweGU1LCAweGYwLCAweDM0LCAweDgwLCAweGZlLCAweGU1LCAweDMwLCAweDY1LAotMHgzMiwgMHg3MCwgMHgwNSwgMHhmYywgMHg3ZCwgMHgxOCwgMHg4MCwgMHgwNCwgMHg3YywgMHgwMCwgMHg3ZCwgMHgwMCwgMHhlZiwgMHgyZCwgMHhmZiwgMHhlZSwKLTB4M2MsIDB4ZmUsIDB4MTIsIDB4MTksIDB4MTAsIDB4NTAsIDB4MjUsIDB4OTAsIDB4NzAsIDB4ODMsIDB4ZTAsIDB4MDQsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4MTQsCi0weGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGUwLCAweDMwLCAweGUxLCAweDA2LCAweDkwLCAweDcwLCAweDkyLCAweDc0LCAweDQ1LCAweGYwLCAweDkwLCAweDcwLAotMHg5MywgMHhlMCwgMHgwNCwgMHhmMCwgMHg5MCwgMHgwNCwgMHgwMSwgMHhlMCwgMHg5MCwgMHg3MCwgMHg5NCwgMHhmMCwgMHhlNSwgMHgzMiwgMHg2NSwgMHgzMSwKLTB4NjAsIDB4MTAsIDB4ZTQsIDB4MjUsIDB4MzIsIDB4ZmYsIDB4ZTQsIDB4MzQsIDB4ODAsIDB4OGYsIDB4ODIsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4MzIsCi0weDgwLCAweDk3LCAweDkwLCAweDA0LCAweDEwLCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDA0LCAweDI4LCAweGU1LCAweDMxLCAweGYwLCAweGEzLCAweGU1LAotMHgzMCwgMHhmMCwgMHg5MCwgMHgwNCwgMHgxMSwgMHg3NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgxOCwgMHg2YSwgMHhjMiwgMHgwNiwgMHhkMiwgMHgxYSwgMHgyMiwKLTB4OTAsIDB4NzAsIDB4ODQsIDB4ZTUsIDB4MzcsIDB4ZjAsIDB4YzMsIDB4OTQsIDB4MDYsIDB4NTAsIDB4MTksIDB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsCi0weGI0LCAweGZmLCAweDA3LCAweDA1LCAweDM3LCAweGU0LCAweGY1LCAweDM2LCAweDgwLCAweDU5LCAweGU0LCAweGY1LCAweDM3LCAweDhmLCAweDgyLCAweDhlLAotMHg4MywgMHhmMCwgMHg4MCwgMHg0ZiwgMHhlNSwgMHgzNiwgMHg3NSwgMHhmMCwgMHgwNiwgMHg4NCwgMHg3NCwgMHgwOCwgMHgyNSwgMHhmMCwgMHhmNSwgMHg4MiwKLTB4ZTQsIDB4MzQsIDB4MTAsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmQsIDB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4ZmMsIDB4NmQsIDB4NzAsIDB4MzAsCi0weDkwLCAweDcwLCAweDg4LCAweGUwLCAweDA0LCAweGYwLCAweGEzLCAweGUwLCAweGZkLCAweGQzLCAweDk1LCAweDM3LCAweDQwLCAweDAyLCAweDgwLCAweDAyLAotMHhhZCwgMHgzNywgMHg5MCwgMHg3MCwgMHg4OSwgMHhlZCwgMHhmMCwgMHgwNSwgMHgzNywgMHgwNSwgMHgzNiwgMHhlNSwgMHgzNiwgMHg3NSwgMHhmMCwgMHgwNiwKLTB4ODQsIDB4NzQsIDB4OGEsIDB4MjUsIDB4ZjAsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4NzAsIDB4ZjUsIDB4ODMsIDB4ZWMsIDB4ZjAsIDB4ODAsIDB4MDMsCi0weGU0LCAweGY1LCAweDM3LCAweDBmLCAweGJmLCAweDAwLCAweDAxLCAweDBlLCAweGVmLCAweDU0LCAweDdmLCAweDYwLCAweDBhLCAweGU1LCAweDM3LCAweGMzLAotMHg5NCwgMHg0ZSwgMHg1MCwgMHgwMywgMHgwMiwgMHgxOSwgMHgxMCwgMHhlNSwgMHgzNywgMHhiNCwgMHg0ZSwgMHgwMywgMHhkMywgMHg4MCwgMHgwMSwgMHhjMywKLTB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5NCwgMHhlYiwgfSA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9maXJtd2FyZV8zMDcwLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9maXJtd2FyZV8zMDcwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MTBkNDAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vZmlybXdhcmVfMzA3MC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTE3ICswLDAgQEAKLS8qIEFVVE8gR0VOIFBMRUFTRSBETyBOT1QgTU9ESUZZIElUICovCi0vKiBBVVRPIEdFTiBQTEVBU0UgRE8gTk9UIE1PRElGWSBJVCAqLwotCi0KLXU4IEZpcm13YXJlSW1hZ2VfMzA3MCBbXSA9IHsKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDIsIDB4MTAsIDB4MjgsIDB4MDIsIDB4MTAsIDB4MzIsIDB4MDIsIDB4MTAsIDB4NzgsIDB4MDIsIDB4MTMsIDB4MWYsIDB4MDIsCi0weDEzLCAweDIwLCAweDAyLCAweDEzLCAweDNmLCAweDAyLCAweDEzLCAweDQ0LCAweDEyLCAweDEzLCAweDQwLCAweDIyLCAweDAyLCAweDE3LCAweGFlLCAweDAyLAotMHgxOCwgMHhkMiwgMHgwMiwgMHgxNCwgMHgzZCwgMHgwMiwgMHgxMywgMHg3OCwgMHgzMCwgMHgwNSwgMHgwNiwgMHgyMCwgMHgwZCwgMHgwMywgMHgxMiwgMHgxOSwKLTB4OTUsIDB4MjIsIDB4OTAsIDB4MDEsIDB4OGMsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MWIsIDB4ZTUsIDB4NGMsIDB4MzAsIDB4ZTAsIDB4MDQsIDB4N2YsIDB4NDAsCi0weDgwLCAweDAyLCAweDdmLCAweDAwLCAweDkwLCAweDEwLCAweDJmLCAweGVmLCAweGYwLCAweDkwLCAweDAxLCAweDhjLCAweDc0LCAweDA4LCAweGYwLCAweGU0LAotMHg5MCwgMHgwMSwgMHhhNywgMHhmMCwgMHg5MCwgMHgwMSwgMHg4YywgMHhlMCwgMHgzMCwgMHhlMCwgMHgxYywgMHg5MCwgMHgwMSwgMHg4MCwgMHhlMCwgMHhiNCwKLTB4MDIsIDB4MTUsIDB4YTMsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MTAsIDB4OTAsIDB4MDEsIDB4ODQsIDB4ZTAsIDB4YjQsIDB4ODEsIDB4MDksIDB4OTAsIDB4MDEsCi0weDhjLCAweDc0LCAweDAxLCAweGYwLCAweDEyLCAweDBkLCAweGM4LCAweDIyLCAweDkwLCAweDA0LCAweDE0LCAweGUwLCAweDIwLCAweGU3LCAweDAzLCAweDAyLAotMHgxMywgMHgxZSwgMHg5MCwgMHg3MCwgMHgxMiwgMHhlMCwgMHhmNSwgMHg1NiwgMHg5MCwgMHgwNCwgMHgwNCwgMHhlMCwgMHgxMiwgMHgwYSwgMHg5ZCwgMHgxMCwKLTB4ZDksIDB4MzEsIDB4MTAsIDB4YmQsIDB4MzYsIDB4MTEsIDB4MDIsIDB4NTAsIDB4MTEsIDB4MzksIDB4NTEsIDB4MTEsIDB4NDIsIDB4NTIsIDB4MTEsIDB4NDIsCi0weDUzLCAweDExLCAweDQyLCAweDU0LCAweDExLCAweDgzLCAweDU1LCAweDExLCAweGQyLCAweDU2LCAweDEyLCAweDI1LCAweDcwLCAweDEyLCAweDUwLCAweDcxLAotMHgxMiwgMHg3ZSwgMHg3MiwgMHgxMiwgMHhkNSwgMHg3MywgMHgxMiwgMHhmNiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMywgMHgxZSwgMHg5MCwgMHg3MCwgMHgxMSwKLTB4ZTAsIDB4ZjUsIDB4M2MsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTUsIDB4NTYsCi0weGY0LCAweDcwLCAweDAzLCAweDAyLCAweDEzLCAweDFlLCAweDAyLCAweDEzLCAweDE3LCAweDIwLCAweDAyLCAweDAzLCAweDMwLCAweDAzLCAweDFkLCAweDdkLAotMHgwMiwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHg5MSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywKLTB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTMsIDB4MWUsIDB4MDIsIDB4MTMsIDB4MTcsIDB4ODUsIDB4NTYsIDB4NDEsIDB4ZDIsCi0weDAyLCAweDIyLCAweDkwLCAweDcwLCAweDEwLCAweGUwLCAweDU0LCAweDdmLCAweGZmLCAweGJmLCAweDBhLCAweDBkLCAweDkwLCAweDcwLCAweDExLCAweGUwLAotMHhiNCwgMHgwOCwgMHgwNiwgMHg3NSwgMHg0ZSwgMHgwMSwgMHg3NSwgMHg0ZiwgMHg4NCwgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmZiwKLTB4YmYsIDB4MDIsIDB4MTIsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4NjQsIDB4MDgsIDB4NjAsIDB4MDQsIDB4ZTAsIDB4YjQsIDB4MjAsIDB4MDYsIDB4NzUsCi0weDRlLCAweDAzLCAweDc1LCAweDRmLCAweDIwLCAweGU0LCAweGY1LCAweDI3LCAweDIyLCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweDI0LCAweGZmLCAweDkyLAotMHg0NywgMHgyMiwgMHg5MCwgMHgwNCwgMHgwNCwgMHhlMCwgMHgyNSwgMHhlMCwgMHgyNCwgMHg1ZCwgMHhmNSwgMHg1NywgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwKLTB4ZmYsIDB4NzQsIDB4NDcsIDB4MjUsIDB4NTcsIDB4ZjgsIDB4YzYsIDB4ZWYsIDB4YzYsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4ZmYsIDB4NzQsIDB4NDgsCi0weDI1LCAweDU3LCAweGY4LCAweGM2LCAweGVmLCAweGM2LCAweGU0LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweDkxLCAweDkwLCAweDA0LCAweDE0LAotMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg3MCwgMHgwMywgMHgwMiwgMHgxMywgMHgxZSwKLTB4MDIsIDB4MTMsIDB4MTcsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDcsIDB4NjAsIDB4MWQsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDgsIDB4NjAsIDB4MTcsIDB4ZTUsCi0weDQ3LCAweDY0LCAweDA5LCAweDYwLCAweDExLCAweGU1LCAweDQ3LCAweDY0LCAweDBhLCAweDYwLCAweDBiLCAweGU1LCAweDQ3LCAweDY0LCAweDBiLCAweDYwLAotMHgwNSwgMHhlNSwgMHg0NywgMHhiNCwgMHgwYywgMHgwOCwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHg1NCwgMHgwZiwgMHhmNSwgMHgzYSwgMHhlNSwgMHg0NywKLTB4YjQsIDB4MDksIDB4MDgsIDB4ZTUsIDB4M2EsIDB4YjQsIDB4MDMsIDB4MDMsIDB4ZTQsIDB4ZjUsIDB4NDYsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MGEsIDB4MDgsCi0weGU1LCAweDNhLCAweGI0LCAweDAxLCAweDAzLCAweGU0LCAweGY1LCAweDQ2LCAweGU0LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweDkxLCAweGQyLAotMHgwNCwgMHgyMiwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHhmNCwgMHhmZiwgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHg1ZiwgMHhmZiwgMHg5MCwgMHg3MCwKLTB4MTEsIDB4ZTAsIDB4NTUsIDB4MjcsIDB4NGYsIDB4OTAsIDB4NzAsIDB4MTgsIDB4ZjAsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4OTAsIDB4NzAsIDB4MTksCi0weGYwLCAweGU0LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweDkxLCAweDMwLCAweDE1LCAweDAzLCAweGQyLCAweDE0LCAweDIyLCAweDkwLCAweDcwLAotMHgxOCwgMHhlMCwgMHhmNSwgMHgyNywgMHg5MCwgMHgwMiwgMHgyOSwgMHhlMCwgMHhmZiwgMHg5MCwgMHg3MCwgMHgxOSwgMHhlMCwgMHhmZSwgMHhlZiwgMHg1ZSwKLTB4OTAsIDB4MDIsIDB4MjksIDB4ZjAsIDB4MzAsIDB4NDcsIDB4MDQsIDB4YWYsIDB4MjcsIDB4ODAsIDB4MDQsIDB4ZTUsIDB4MjcsIDB4ZjQsIDB4ZmYsIDB4OTAsCi0weDAyLCAweDI4LCAweGVmLCAweGYwLCAweDIyLCAweDkwLCAweDcwLCAweDEwLCAweGUwLCAweGZlLCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweGZkLCAweGVkLAotMHhmOCwgMHhlNiwgMHhmNSwgMHg1NywgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHg5MSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwKLTB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTMsIDB4MWUsIDB4MDIsIDB4MTMsIDB4MTcsCi0weDkwLCAweDcwLCAweDEwLCAweGUwLCAweGZlLCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweGZkLCAweGVkLCAweGY1LCAweDgyLCAweDhlLCAweDgzLCAweGUwLAotMHhmNSwgMHg1NywgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHg5MSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwKLTB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTMsIDB4MWUsIDB4MDIsIDB4MTMsIDB4MTcsIDB4OTAsIDB4MTAsCi0weDAwLCAweGUwLCAweGY1LCAweDU3LCAweDkwLCAweDEwLCAweDAyLCAweGUwLCAweGY1LCAweDU4LCAweGEzLCAweGUwLCAweGY1LCAweDU5LCAweGU1LCAweDU4LAotMHhiNCwgMHg3MCwgMHgxZSwgMHhlNSwgMHg1OSwgMHhiNCwgMHgzMCwgMHgxOSwgMHg5MCwgMHgwNSwgMHgwOCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHhmZCwKLTB4OTAsIDB4MDUsIDB4MDUsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4ZWQsIDB4NTQsIDB4ZmUsIDB4OTAsIDB4MDUsIDB4MDgsCi0weGYwLCAweGU0LCAweGY1LCAweDRlLCAweGY1LCAweDRmLCAweDc1LCAweDNhLCAweGZmLCAweDc1LCAweDNjLCAweGZmLCAweGFkLCAweDU3LCAweGFmLCAweDU2LAotMHgxMiwgMHgwYiwgMHg5MSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwKLTB4ZjQsIDB4NjAsIDB4NGIsIDB4ODAsIDB4NDIsIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4OTMsIDB4ZTQsIDB4ZmQsIDB4YWYsCi0weDU2LCAweDEyLCAweDBiLCAweDkxLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LAotMHg1NiwgMHhmNCwgMHg2MCwgMHgyYSwgMHg4MCwgMHgyMSwgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHgyNCwgMHhmZiwgMHg5MiwgMHg0YSwgMHhkMiwgMHgwNSwKLTB4YWQsIDB4NTcsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsIDB4OTEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsCi0weDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDYwLCAweDA3LCAweDkwLCAweDcwLCAweDI1LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDIyLCAweDIyLAotMHhlNSwgMHg1MywgMHg3MCwgMHgxYSwgMHgzMCwgMHg2MCwgMHgwOSwgMHhiMiwgMHg0ZCwgMHgzMCwgMHg0ZCwgMHgwNCwgMHgwNSwgMHg0NiwgMHhjMiwgMHgwNCwKLTB4ZTUsIDB4NGYsIDB4NDUsIDB4NGUsIDB4NjAsIDB4MDgsIDB4ZTUsIDB4NGYsIDB4MTUsIDB4NGYsIDB4NzAsIDB4MDIsIDB4MTUsIDB4NGUsIDB4MjIsIDB4MjIsCi0weGMyLCAweDQyLCAweGQzLCAweDIyLCAweDMwLCAweDE0LCAweDMwLCAweDkwLCAweDcwLCAweDE5LCAweGUwLCAweDU1LCAweDI3LCAweGZmLCAweDkwLCAweDcwLAotMHgxOCwgMHhlMCwgMHg0ZiwgMHhmNSwgMHgyNywgMHg5MCwgMHgwMiwgMHgyOSwgMHhlMCwgMHhmZiwgMHg5MCwgMHg3MCwgMHgxOSwgMHhlMCwgMHhmZSwgMHhlZiwKLTB4NWUsIDB4OTAsIDB4MDIsIDB4MjksIDB4ZjAsIDB4MzAsIDB4NDcsIDB4MDQsIDB4YWYsIDB4MjcsIDB4ODAsIDB4MDQsIDB4ZTUsIDB4MjcsIDB4ZjQsIDB4ZmYsCi0weDkwLCAweDAyLCAweDI4LCAweGVmLCAweGYwLCAweGMyLCAweDE0LCAweDIyLCAweGMyLCAweDRiLCAweGMyLCAweDRjLCAweGU1LCAweDQ0LCAweDEyLCAweDBhLAotMHg5ZCwgMHgxMywgMHg5YSwgMHgwMCwgMHgxNCwgMHgyOCwgMHgwNCwgMHgxNCwgMHgyNCwgMHgwOCwgMHgxNCwgMHgwNCwgMHgxMCwgMHgxMywgMHhhZSwgMHgyMCwKLTB4MTMsIDB4Y2UsIDB4NjAsIDB4MTMsIDB4ZGYsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MmEsIDB4ODUsIDB4NDgsIDB4NDMsIDB4ODUsIDB4NGEsIDB4NDIsCi0weDg1LCAweDRjLCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDYwLCAweDAzLCAweDAyLCAweDE0LCAweDJhLCAweDgwLCAweDFiLCAweGU1LCAweDQ4LAotMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg0MywgMHhlNSwgMHg0YSwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg0MiwgMHhlNSwgMHg0YywgMHhjNCwgMHg1NCwKLTB4MGYsIDB4ZjUsIDB4NWUsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsIDB4NzAsIDB4NjEsIDB4NTMsIDB4NDMsIDB4MGYsIDB4ODAsIDB4NWMsIDB4ODUsIDB4NDksCi0weDQzLCAweDg1LCAweDRiLCAweDQyLCAweDg1LCAweDRkLCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDcwLCAweDRkLCAweDgwLCAweDFiLCAweGU1LAotMHg0OSwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg0MywgMHhlNSwgMHg0YiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg0MiwgMHhlNSwgMHg0ZCwgMHhjNCwKLTB4NTQsIDB4MGYsIDB4ZjUsIDB4NWUsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsIDB4NzAsIDB4MzAsIDB4ZTUsIDB4NDMsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MTAsCi0weGY1LCAweDQzLCAweDgwLCAweDI2LCAweGU1LCAweDQ3LCAweDY0LCAweDA0LCAweDYwLCAweDA1LCAweGU1LCAweDQ3LCAweGI0LCAweDA1LCAweDA2LCAweDQzLAotMHg1ZSwgMHgwNCwgMHg3NSwgMHg0MiwgMHgwOSwgMHhlNSwgMHg0NywgMHhiNCwgMHgwNiwgMHgxMCwgMHhlNSwgMHg0MywgMHg1NCwgMHgwZiwgMHg0NCwgMHgzMCwKLTB4ZjUsIDB4NDMsIDB4ODAsIDB4MDYsIDB4ZDIsIDB4NGIsIDB4ODAsIDB4MDIsIDB4ZDIsIDB4NGMsIDB4ZTQsIDB4ZjUsIDB4MjUsIDB4ZTUsIDB4NDIsIDB4YzQsCi0weDU0LCAweGYwLCAweGZmLCAweGU1LCAweDQzLCAweDU0LCAweDBmLCAweDRmLCAweGY1LCAweDVmLCAweGQyLCAweDYwLCAweDIyLCAweGQyLCAweDE1LCAweGU1LAotMHg0NywgMHgyNCwgMHhmNSwgMHg2MCwgMHgwYiwgMHgyNCwgMHhjYiwgMHg2MCwgMHgwNywgMHgyNCwgMHg0MCwgMHg3MCwgMHgwNiwgMHhjMiwgMHgxNSwgMHgyMiwKLTB4MTIsIDB4MTcsIDB4NzksIDB4MTIsIDB4MTQsIDB4NWYsIDB4YzIsIDB4MTUsIDB4YzIsIDB4YWYsIDB4YzIsIDB4MDQsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4YzIsCi0weGFmLCAweDkwLCAweDA0LCAweDE0LCAweGUwLCAweDU0LCAweDBlLCAweDYwLCAweDA0LCAweGQyLCAweDE4LCAweDgwLCAweDA4LCAweGU1LCAweDRlLCAweDQ1LAotMHg0ZiwgMHgyNCwgMHhmZiwgMHg5MiwgMHgxOCwgMHhkMiwgMHhhZiwgMHg5MCwgMHgwNCwgMHgxNCwgMHhlMCwgMHhhMiwgMHhlNCwgMHg5MiwgMHgxOSwgMHg3NCwKLTB4MWUsIDB4ZjAsIDB4ZTUsIDB4NWYsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4MmQsIDB4ZTUsIDB4MjUsIDB4NzAsIDB4MTMsIDB4MzAsIDB4MTgsIDB4MDUsIDB4ZTUsCi0weDVmLCAweDIwLCAweGU1LCAweDBiLCAweDMwLCAweDE5LCAweDE5LCAweGU1LCAweDVmLCAweDU0LCAweDMwLCAweGZmLCAweGJmLCAweDMwLCAweDExLCAweGU1LAotMHgyNSwgMHg3MCwgMHgwNSwgMHg3NSwgMHgyNSwgMHgwYywgMHg4MCwgMHgwMiwgMHgxNSwgMHgyNSwgMHhkMiwgMHg2YywgMHhkMiwgMHg2ZCwgMHg4MCwgMHgwZiwKLTB4ZTUsIDB4NWYsIDB4MzAsIDB4ZTYsIDB4MDYsIDB4YzIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4ODAsIDB4MDQsIDB4ZDIsIDB4NmMsIDB4YzIsIDB4NmQsIDB4ZTUsCi0weDQ3LCAweDY0LCAweDAzLCAweDcwLCAweDIxLCAweDMwLCAweDRiLCAweDA2LCAweGMyLCAweDZjLCAweGQyLCAweDZkLCAweDgwLCAweDE4LCAweGU1LCAweDI1LAotMHg3MCwgMHgwMywgMHgzMCwgMHg0YywgMHgxMSwgMHhjMiwgMHg0YywgMHhlNSwgMHgyNSwgMHg3MCwgMHgwNSwgMHg3NSwgMHgyNSwgMHgwNywgMHg4MCwgMHgwMiwKLTB4MTUsIDB4MjUsIDB4ZDIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDksIDB4MTQsIDB4ZTUsIDB4NDQsIDB4MjAsIDB4ZTMsIDB4MGIsCi0weGU1LCAweDNhLCAweDY0LCAweDAyLCAweDYwLCAweDA1LCAweGU1LCAweDNhLCAweGI0LCAweDAzLCAweDA0LCAweGMyLCAweDZjLCAweGQyLCAweDZkLCAweGU1LAotMHg0NywgMHhiNCwgMHgwYSwgMHgxMywgMHhlNSwgMHgzYSwgMHhiNCwgMHgwMSwgMHgwNiwgMHhjMiwgMHg2YywgMHhkMiwgMHg2ZCwgMHg4MCwgMHgwOCwgMHhlNSwKLTB4M2EsIDB4NzAsIDB4MDQsIDB4ZDIsIDB4NmMsIDB4YzIsIDB4NmQsIDB4MjAsIDB4NjksIDB4MDcsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTAsIDB4MDIsIDB4YjIsCi0weDY4LCAweDIwLCAweDZiLCAweDA3LCAweGU1LCAweDVlLCAweDIwLCAweGUxLCAweDAyLCAweGIyLCAweDZhLCAweDIwLCAweDZkLCAweDA3LCAweGU1LCAweDVlLAotMHgyMCwgMHhlMiwgMHgwMiwgMHhiMiwgMHg2YywgMHg3NSwgMHgyZSwgMHg0MCwgMHgyMCwgMHg2OSwgMHgwNCwgMHhhMiwgMHg2OCwgMHg4MCwgMHgyNiwgMHgzMCwKLTB4NjgsIDB4MDYsIDB4ZTUsIDB4NDYsIDB4YTIsIDB4ZTIsIDB4ODAsIDB4MWQsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTIsIDB4MDQsIDB4N2YsIDB4MDEsIDB4ODAsCi0weDAyLCAweDdmLCAweDAwLCAweGU1LCAweDQ2LCAweDU0LCAweGYwLCAweGZlLCAweGJlLCAweGYwLCAweDA0LCAweDdlLCAweDAxLCAweDgwLCAweDAyLCAweDdlLAotMHgwMCwgMHhlZSwgMHg2ZiwgMHgyNCwgMHhmZiwgMHg5MiwgMHg3MywgMHg5MiwgMHg3MiwgMHgyMCwgMHg2YiwgMHgwNCwgMHhhMiwgMHg2YSwgMHg4MCwgMHgyNiwKLTB4MzAsIDB4NmEsIDB4MDYsIDB4ZTUsIDB4NDYsIDB4YTIsIDB4ZTIsIDB4ODAsIDB4MWQsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTAsIDB4MDQsIDB4N2YsIDB4MDEsCi0weDgwLCAweDAyLCAweDdmLCAweDAwLCAweGU1LCAweDQ2LCAweDU0LCAweGYwLCAweGZlLCAweGJlLCAweGYwLCAweDA0LCAweDdlLCAweDAxLCAweDgwLCAweDAyLAotMHg3ZSwgMHgwMCwgMHhlZSwgMHg2ZiwgMHgyNCwgMHhmZiwgMHg5MiwgMHg3NSwgMHg5MiwgMHg3NCwgMHgyMCwgMHg2ZCwgMHgwNCwgMHhhMiwgMHg2YywgMHg4MCwKLTB4MjYsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MGEsIDB4NzAsIDB4MjIsIDB4MzAsIDB4NmMsIDB4MDYsIDB4ZTUsIDB4NDYsIDB4YTIsIDB4ZTMsIDB4ODAsIDB4MTcsCi0weGU1LCAweDNhLCAweGI0LCAweDAxLCAweDA2LCAweGU1LCAweDQ2LCAweGEyLCAweGUzLCAweDgwLCAweDM0LCAweGU1LCAweDQ2LCAweDIwLCAweGU0LCAweDAzLAotMHgzMCwgMHhlNSwgMHgwMywgMHhkMywgMHg4MCwgMHgwMSwgMHhjMywgMHg4MCwgMHgyNiwgMHgzMCwgMHg2YywgMHgwNiwgMHhlNSwgMHg0NiwgMHhhMiwgMHhlMiwKLTB4ODAsIDB4MWQsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTEsIDB4MDQsIDB4N2YsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4NTQsCi0weGYwLCAweGZlLCAweGJlLCAweGYwLCAweDA0LCAweDdlLCAweDAxLCAweDgwLCAweDAyLCAweDdlLCAweDAwLCAweGVlLCAweDZmLCAweDI0LCAweGZmLCAweDkyLAotMHg3MSwgMHg5MiwgMHg3MCwgMHg5MCwgMHgxMCwgMHgwMCwgMHhlMCwgMHg5MCwgMHgxMCwgMHgyYywgMHhmMCwgMHg5MCwgMHgxMCwgMHgwMywgMHhlMCwgMHhjMywKLTB4OTQsIDB4MzAsIDB4NDAsIDB4MTQsIDB4YTIsIDB4NzEsIDB4OTIsIDB4NzcsIDB4YTIsIDB4NzAsIDB4OTIsIDB4NzYsIDB4ZTUsIDB4MmUsIDB4MTMsIDB4MTMsCi0weDU0LCAweDNmLCAweGY1LCAweDJlLCAweGMyLCAweDc3LCAweGQyLCAweDc2LCAweDkwLCAweDEwLCAweDJmLCAweGU1LCAweDJlLCAweGYwLCAweGU1LCAweDQ3LAotMHg2NCwgMHgwNiwgMHg3MCwgMHgzOSwgMHg5MCwgMHgwMiwgMHgyOSwgMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHhlNSwgMHg0MywgMHhjNCwgMHg1NCwgMHgwZiwKLTB4MTQsIDB4NjAsIDB4MGMsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MGMsIDB4MjQsIDB4MDMsIDB4NzAsIDB4MTMsIDB4YzIsIDB4MzgsIDB4ODAsIDB4MGYsIDB4ZDIsCi0weDM4LCAweDgwLCAweDBiLCAweGU1LCAweDQ2LCAweDMwLCAweGUyLCAweDAzLCAweGQzLCAweDgwLCAweDAxLCAweGMzLCAweDkyLCAweDM4LCAweDMwLCAweDQ3LAotMHgwNSwgMHhhZiwgMHgyNywgMHgwMiwgMHgxNywgMHg3MywgMHhlNSwgMHgyNywgMHhmNCwgMHhmZiwgMHgwMiwgMHgxNywgMHg3MywgMHhlNSwgMHg0NywgMHg2NCwKLTB4MDcsIDB4NjAsIDB4MGYsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDgsIDB4NjAsIDB4MDksIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDksIDB4NjAsIDB4MDMsIDB4MDIsCi0weDE2LCAweGYyLCAweDkwLCAweDAyLCAweDI5LCAweGUwLCAweDU0LCAweGZjLCAweGYwLCAweGU1LCAweDNhLCAweDE0LCAweDYwLCAweDIyLCAweDE0LCAweDYwLAotMHgyNSwgMHgxNCwgMHg2MCwgMHgyZCwgMHgyNCwgMHhmYywgMHg2MCwgMHg0OSwgMHgyNCwgMHhmOSwgMHg2MCwgMHgxNCwgMHgyNCwgMHgwZSwgMHg3MCwgMHg1MCwKLTB4ZTUsIDB4NDYsIDB4MTMsIDB4MTMsIDB4NTQsIDB4M2YsIDB4NzUsIDB4ZjAsIDB4MDMsIDB4ODQsIDB4ZTUsIDB4ZjAsIDB4MjQsIDB4ZmYsIDB4ODAsIDB4M2EsCi0weGQyLCAweDM5LCAweGMyLCAweDM4LCAweDgwLCAweDNlLCAweGU1LCAweDQ2LCAweDMwLCAweGUyLCAweDAzLCAweGQzLCAweDgwLCAweDFkLCAweGMzLCAweDgwLAotMHgxYSwgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwZCwgMHg1NCwgMHgzOCwgMHhjMywgMHg5NCwgMHgzMCwgMHg1MCwgMHgwNiwgMHg3ZSwgMHgwMCwgMHg3ZiwKLTB4MDEsIDB4ODAsIDB4MDQsIDB4N2UsIDB4MDAsIDB4N2YsIDB4MDAsIDB4ZWUsIDB4NGYsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4MzgsIDB4YzIsIDB4MzksIDB4ODAsCi0weDEzLCAweGU1LCAweDQ2LCAweDMwLCAweGUyLCAweDAzLCAweGQzLCAweDgwLCAweDAxLCAweGMzLCAweDkyLCAweDM5LCAweGMyLCAweDM4LCAweDgwLCAweDA0LAotMHhjMiwgMHgzOCwgMHhjMiwgMHgzOSwgMHgzMCwgMHg0NywgMHgwNCwgMHhhZiwgMHgyNywgMHg4MCwgMHgwNCwgMHhlNSwgMHgyNywgMHhmNCwgMHhmZiwgMHgwMiwKLTB4MTcsIDB4NzMsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MGMsIDB4NjAsIDB4MDYsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MGIsIDB4NzAsIDB4N2EsIDB4OTAsIDB4MDIsCi0weDI5LCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweGU1LCAweDNhLCAweDE0LCAweDYwLCAweDIwLCAweDE0LCAweDYwLCAweDIxLCAweDE0LCAweDYwLCAweDJiLAotMHgyNCwgMHhmYywgMHg2MCwgMHg0NSwgMHgyNCwgMHhmOSwgMHg2MCwgMHgxMiwgMHgyNCwgMHgwZSwgMHg3MCwgMHg0YSwgMHhlNSwgMHg0NiwgMHgxMywgMHgxMywKLTB4NTQsIDB4M2YsIDB4NzUsIDB4ZjAsIDB4MDMsIDB4ODQsIDB4ZTUsIDB4ZjAsIDB4ODAsIDB4MjksIDB4ZDIsIDB4MzksIDB4ODAsIDB4M2EsIDB4ZTUsIDB4NDYsCi0weDMwLCAweGUyLCAweDAzLCAweGQzLCAweDgwLCAweDAxLCAweGMzLCAweDkyLCAweDM5LCAweDgwLCAweDJkLCAweGU1LCAweDQ2LCAweDMwLCAweGUyLCAweDBkLAotMHg1NCwgMHgzOCwgMHhjMywgMHg5NCwgMHgzMCwgMHg1MCwgMHgwNiwgMHg3ZSwgMHgwMCwgMHg3ZiwgMHgwMSwgMHg4MCwgMHgwNCwgMHg3ZSwgMHgwMCwgMHg3ZiwKLTB4MDAsIDB4ZWUsIDB4NGYsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4MzksIDB4ODAsIDB4MGYsIDB4ZTUsIDB4NDYsIDB4MzAsIDB4ZTIsIDB4MDMsIDB4ZDMsIDB4ODAsCi0weDAxLCAweGMzLCAweDkyLCAweDM5LCAweDgwLCAweDAyLCAweGMyLCAweDM5LCAweDMwLCAweDQ3LCAweDA0LCAweGFmLCAweDI3LCAweDgwLCAweDA0LCAweGU1LAotMHgyNywgMHhmNCwgMHhmZiwgMHg5MCwgMHgwMiwgMHgyOCwgMHhlZiwgMHhmMCwgMHgyMiwgMHhlNSwgMHg0NywgMHhiNCwgMHgwYiwgMHgxMCwgMHg5MCwgMHgwMiwKLTB4MjksIDB4ZTAsIDB4NTQsIDB4ZWIsIDB4ZjAsIDB4ZTUsIDB4MjcsIDB4NTQsIDB4ZWIsIDB4NDUsIDB4NDUsIDB4ZjUsIDB4MjcsIDB4MjIsIDB4ZTQsIDB4OTAsCi0weDAyLCAweDI5LCAweGYwLCAweDMwLCAweDQ3LCAweDA0LCAweGFmLCAweDQ1LCAweDgwLCAweDA0LCAweGU1LCAweDQ1LCAweGY0LCAweGZmLCAweDkwLCAweDAyLAotMHgyOCwgMHhlZiwgMHhmMCwgMHgyMiwgMHg4ZiwgMHg1MCwgMHhkMiwgMHg1OSwgMHgyMiwgMHg4ZiwgMHg1NCwgMHhkMiwgMHg1OCwgMHgyMiwgMHhlNCwgMHhmNSwKLTB4NjIsIDB4YzIsIDB4YWYsIDB4ZTUsIDB4NTEsIDB4MTQsIDB4NjAsIDB4NDgsIDB4MTQsIDB4NjAsIDB4NjYsIDB4MjQsIDB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsCi0weDE4LCAweGI2LCAweGQyLCAweDU5LCAweDc1LCAweDU1LCAweDAxLCAweDkwLCAweDAyLCAweGEyLCAweGUwLCAweDU0LCAweDdmLCAweGYwLCAweGEzLCAweGUwLAotMHgyMCwgMHhlNywgMHgyMywgMHg5MCwgMHgwNCwgMHgzNCwgMHhlMCwgMHhiNCwgMHgwMiwgMHgxYywgMHhhMywgMHhlMCwgMHhiNCwgMHgwMiwgMHgxNywgMHhhMywKLTB4ZTAsIDB4YjQsIDB4MDIsIDB4MTIsIDB4N2YsIDB4MjAsIDB4MTIsIDB4MTcsIDB4YTQsIDB4OTAsIDB4MTAsIDB4MDQsIDB4ZTAsIDB4NTQsIDB4ZjMsIDB4ZjAsCi0weDc1LCAweDUxLCAweDAxLCAweDAyLCAweDE4LCAweGI2LCAweGU1LCAweDUwLCAweDcwLCAweDA2LCAweDc1LCAweDYyLCAweDAzLCAweDAyLCAweDE4LCAweGI2LAotMHg5MCwgMHgxMiwgMHgwMCwgMHhlMCwgMHg1NCwgMHgwMywgMHg3MCwgMHgxMiwgMHg3ZiwgMHgyMCwgMHgxMiwgMHgxNywgMHhhNCwgMHg5MCwgMHgwMiwgMHhhMiwKLTB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4NzUsIDB4NTEsIDB4MDIsIDB4MDIsIDB4MTgsIDB4YjYsIDB4ZTUsIDB4NTAsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTgsCi0weGIxLCAweDkwLCAweDAyLCAweGEzLCAweGUwLCAweDMwLCAweGU2LCAweDAzLCAweDAyLCAweDE4LCAweGFkLCAweDkwLCAweDA0LCAweDM3LCAweGUwLCAweDY0LAotMHgyMiwgMHg3MCwgMHg3YSwgMHg5MCwgMHgwMSwgMHg4YSwgMHg3NCwgMHg3ZSwgMHhmMCwgMHg5MCwgMHgwMSwgMHg5NiwgMHhmMCwgMHg5MCwgMHgxMiwgMHgwNCwKLTB4NzQsIDB4MGEsIDB4ZjAsIDB4ZTUsIDB4NTgsIDB4YjQsIDB4NzIsIDB4MTUsIDB4ZTUsIDB4NTksIDB4YjQsIDB4MzUsIDB4MTAsIDB4ZTQsIDB4OTAsIDB4MDUsCi0weDAwLCAweGYwLCAweGEzLCAweDc0LCAweDA4LCAweGYwLCAweGEzLCAweDc0LCAweDAxLCAweGYwLCAweDc0LCAweDAzLCAweGYwLCAweDdmLCAweDAxLCAweDEyLAotMHgwZCwgMHgyYSwgMHg5MCwgMHgxMywgMHgyOCwgMHhlMCwgMHg1NCwgMHhmMCwgMHhmMCwgMHhhMywgMHhlMCwgMHg1NCwgMHhmMCwgMHhmMCwgMHhlNSwgMHg1OSwKLTB4YjQsIDB4MzUsIDB4MTQsIDB4ZTUsIDB4M2MsIDB4ZjQsIDB4NjAsIDB4MDYsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4ZjMsIDB4ODAsIDB4MTQsIDB4OTAsIDB4MTMsCi0weDJhLCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweDgwLCAweDE0LCAweGU1LCAweDNjLCAweGY0LCAweDkwLCAweDEzLCAweDJhLCAweDYwLCAweDA4LCAweGUwLAotMHg1NCwgMHhmMiwgMHg0NSwgMHgzYywgMHhmMCwgMHg4MCwgMHgwNCwgMHhlMCwgMHg1NCwgMHhmYSwgMHhmMCwgMHg5MCwgMHgwNCwgMHgwMSwgMHhlMCwgMHg1NCwKLTB4ZmQsIDB4ZjAsIDB4NzUsIDB4NjIsIDB4MDEsIDB4NzUsIDB4NTUsIDB4MDIsIDB4ZTQsIDB4ZjUsIDB4NTEsIDB4ODAsIDB4MDksIDB4ZTUsIDB4NTAsIDB4NzAsCi0weDA1LCAweDc1LCAweDYyLCAweDAzLCAweGY1LCAweDUxLCAweGU1LCAweDYyLCAweDYwLCAweDE1LCAweGMyLCAweDAxLCAweGU0LCAweGY1LCAweDUxLCAweGMyLAotMHg1OSwgMHhhZCwgMHg2MiwgMHhhZiwgMHg0MCwgMHgxMiwgMHgxOSwgMHg2MSwgMHhlNSwgMHg2MiwgMHhiNCwgMHgwMywgMHgwMiwgMHhkMiwgMHgwMywgMHhkMiwKLTB4YWYsIDB4MjIsIDB4YzIsIDB4YWYsIDB4MzAsIDB4MDEsIDB4MTIsIDB4ZTQsIDB4OTAsIDB4MDEsIDB4OTYsIDB4ZjAsIDB4ZjUsIDB4NTEsIDB4YzIsIDB4NTksCi0weGMyLCAweDAxLCAweDdkLCAweDAyLCAweGFmLCAweDQwLCAweDEyLCAweDE5LCAweDYxLCAweGU1LCAweDUyLCAweDE0LCAweDYwLCAweDA5LCAweDA0LCAweDcwLAotMHg2ZCwgMHg3NSwgMHg1MiwgMHgwMSwgMHg3NSwgMHg1NSwgMHgwMywgMHg5MCwgMHgwNCwgMHgwMSwgMHhlMCwgMHg0NCwgMHgwZSwgMHhmMCwgMHg5MCwgMHgxMywKLTB4MjgsIDB4ZTAsIDB4NDQsIDB4MGYsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NDQsIDB4MGYsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NDQsIDB4MDUsIDB4ZjAsIDB4OTAsCi0weDEyLCAweDA0LCAweDc0LCAweDAzLCAweGYwLCAweGU1LCAweDU4LCAweGI0LCAweDcyLCAweDE2LCAweGU1LCAweDU5LCAweGI0LCAweDM1LCAweDExLCAweDkwLAotMHgwNSwgMHgwMCwgMHg3NCwgMHhlMiwgMHhmMCwgMHhhMywgMHg3NCwgMHgwOCwgMHhmMCwgMHhhMywgMHg3NCwgMHgwMSwgMHhmMCwgMHg3NCwgMHgwMywgMHhmMCwKLTB4N2YsIDB4MDEsIDB4MTIsIDB4MGQsIDB4MmEsIDB4OTAsIDB4MDIsIDB4YTIsIDB4ZTAsIDB4NDQsIDB4YzAsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MDQsIDB4ZTAsCi0weDQ0LCAweDBjLCAweGYwLCAweGU0LCAweGY1LCAweDUyLCAweGY1LCAweDU1LCAweDMwLCAweDAyLCAweDA5LCAweGMyLCAweDAyLCAweDdkLCAweDAxLCAweGFmLAotMHg0MSwgMHgxMiwgMHgxOSwgMHg2MSwgMHgzMCwgMHgwMywgMHgwMiwgMHhjMiwgMHgwMywgMHhlNCwgMHg5MCwgMHgwMSwgMHg5NiwgMHhmMCwgMHhkMiwgMHhhZiwKLTB4MjIsIDB4ZWYsIDB4ZjQsIDB4NjAsIDB4MmQsIDB4ZTQsIDB4ZmUsIDB4NzQsIDB4MTQsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4NzAsIDB4ZjUsCi0weDgzLCAweGUwLCAweGI0LCAweGZmLCAweDE5LCAweDc0LCAweDE0LCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDcwLCAweGY1LCAweDgzLCAweGVmLAotMHhmMCwgMHg3NCwgMHgxYywgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3MCwgMHhmNSwgMHg4MywgMHhlZCwgMHhmMCwgMHgyMiwgMHgwZSwgMHhiZSwKLTB4MDQsIDB4ZDUsIDB4MjIsIDB4MjIsIDB4MjIsIDB4OTAsIDB4NzAsIDB4MmEsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4NGQsIDB4YzIsIDB4YWYsIDB4OTAsIDB4NzAsCi0weDI4LCAweGUwLCAweDkwLCAweDEwLCAweDFjLCAweGYwLCAweDkwLCAweDcwLCAweDI5LCAweGUwLCAweDkwLCAweDEwLCAweDFkLCAweGYwLCAweDkwLCAweDcwLAotMHgyYSwgMHhlMCwgMHg5MCwgMHgxMCwgMHgxZSwgMHhmMCwgMHg5MCwgMHgxMCwgMHgxYywgMHhlMCwgMHhmNSwgMHg2MiwgMHg5MCwgMHgxMCwgMHgxZSwgMHhlMCwKLTB4MjAsIDB4ZTEsIDB4ZjMsIDB4OTAsIDB4MTAsIDB4MWMsIDB4ZTAsIDB4OTAsIDB4NzAsIDB4MjgsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MWQsIDB4ZTAsIDB4OTAsCi0weDcwLCAweDI5LCAweGYwLCAweDkwLCAweDEwLCAweDFlLCAweGUwLCAweDkwLCAweDcwLCAweDJhLCAweGYwLCAweDMwLCAweDRhLCAweDA3LCAweDkwLCAweDcwLAotMHgyNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHhjMiwgMHgwNSwgMHhkMiwgMHhhZiwgMHgyMiwgMHgyMiwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4N2IsIDB4YzQsCi0weGZmLCAweGZmLCAweGZmLCAweDAyLCAweDEwLCAweDI4LCAweDAyLCAweDEwLCAweDMyLCAweDAyLCAweDEwLCAweDc4LCAweDAyLCAweDEzLCAweDFmLCAweDAyLAotMHgxMywgMHgyMCwgMHgwMiwgMHgxMywgMHgzZiwgMHgwMiwgMHgxMywgMHg0NCwgMHgxMiwgMHgxMywgMHg0MCwgMHgyMiwgMHgwMiwgMHgxNywgMHhhZSwgMHgwMiwKLTB4MTgsIDB4ZDIsIDB4MDIsIDB4MTQsIDB4M2QsIDB4MDIsIDB4MTMsIDB4NzgsIDB4MzAsIDB4MDUsIDB4MDYsIDB4MjAsIDB4MGQsIDB4MDMsIDB4MTIsIDB4MTksCi0weDk1LCAweDIyLCAweDkwLCAweDAxLCAweDhjLCAweGUwLCAweDMwLCAweGUzLCAweDFiLCAweGU1LCAweDRjLCAweDMwLCAweGUwLCAweDA0LCAweDdmLCAweDQwLAotMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHg5MCwgMHgxMCwgMHgyZiwgMHhlZiwgMHhmMCwgMHg5MCwgMHgwMSwgMHg4YywgMHg3NCwgMHgwOCwgMHhmMCwgMHhlNCwKLTB4OTAsIDB4MDEsIDB4YTcsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4OGMsIDB4ZTAsIDB4MzAsIDB4ZTAsIDB4MWMsIDB4OTAsIDB4MDEsIDB4ODAsIDB4ZTAsIDB4YjQsCi0weDAyLCAweDE1LCAweGEzLCAweGUwLCAweGI0LCAweDAxLCAweDEwLCAweDkwLCAweDAxLCAweDg0LCAweGUwLCAweGI0LCAweDgxLCAweDA5LCAweDkwLCAweDAxLAotMHg4YywgMHg3NCwgMHgwMSwgMHhmMCwgMHgxMiwgMHgwZCwgMHhkZCwgMHgyMiwgMHg5MCwgMHgwNCwgMHgxNCwgMHhlMCwgMHgyMCwgMHhlNywgMHgwMywgMHgwMiwKLTB4MTMsIDB4MWUsIDB4OTAsIDB4NzAsIDB4MTIsIDB4ZTAsIDB4ZjUsIDB4NTYsIDB4OTAsIDB4MDQsIDB4MDQsIDB4ZTAsIDB4MTIsIDB4MGEsIDB4YjYsIDB4MTAsCi0weGQ5LCAweDMxLCAweDEwLCAweGJkLCAweDM2LCAweDExLCAweDAyLCAweDUwLCAweDExLCAweDM5LCAweDUxLCAweDExLCAweDQyLCAweDUyLCAweDExLCAweDQyLAotMHg1MywgMHgxMSwgMHg0MiwgMHg1NCwgMHgxMSwgMHg4MywgMHg1NSwgMHgxMSwgMHhkMiwgMHg1NiwgMHgxMiwgMHgyNSwgMHg3MCwgMHgxMiwgMHg1MCwgMHg3MSwKLTB4MTIsIDB4N2UsIDB4NzIsIDB4MTIsIDB4ZDUsIDB4NzMsIDB4MTIsIDB4ZjYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MWUsIDB4OTAsIDB4NzAsIDB4MTEsCi0weGUwLCAweGY1LCAweDNjLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU1LCAweDU2LAotMHhmNCwgMHg3MCwgMHgwMywgMHgwMiwgMHgxMywgMHgxZSwgMHgwMiwgMHgxMywgMHgxNywgMHgyMCwgMHgwMiwgMHgwMywgMHgzMCwgMHgwMywgMHgxZCwgMHg3ZCwKLTB4MDIsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsIDB4YWEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsCi0weGYwLCAweGU1LCAweDU2LCAweGY0LCAweDcwLCAweDAzLCAweDAyLCAweDEzLCAweDFlLCAweDAyLCAweDEzLCAweDE3LCAweDg1LCAweDU2LCAweDQxLCAweGQyLAotMHgwMiwgMHgyMiwgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmZiwgMHhiZiwgMHgwYSwgMHgwZCwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwKLTB4YjQsIDB4MDgsIDB4MDYsIDB4NzUsIDB4NGUsIDB4MDEsIDB4NzUsIDB4NGYsIDB4ODQsIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4ZmYsCi0weGJmLCAweDAyLCAweDEyLCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweDY0LCAweDA4LCAweDYwLCAweDA0LCAweGUwLCAweGI0LCAweDIwLCAweDA2LCAweDc1LAotMHg0ZSwgMHgwMywgMHg3NSwgMHg0ZiwgMHgyMCwgMHhlNCwgMHhmNSwgMHgyNywgMHgyMiwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHgyNCwgMHhmZiwgMHg5MiwKLTB4NDcsIDB4MjIsIDB4OTAsIDB4MDQsIDB4MDQsIDB4ZTAsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4NWQsIDB4ZjUsIDB4NTcsIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsCi0weGZmLCAweDc0LCAweDQ3LCAweDI1LCAweDU3LCAweGY4LCAweGM2LCAweGVmLCAweGM2LCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweGZmLCAweDc0LCAweDQ4LAotMHgyNSwgMHg1NywgMHhmOCwgMHhjNiwgMHhlZiwgMHhjNiwgMHhlNCwgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHhhYSwgMHg5MCwgMHgwNCwgMHgxNCwKLTB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTMsIDB4MWUsCi0weDAyLCAweDEzLCAweDE3LCAweGU1LCAweDQ3LCAweDY0LCAweDA3LCAweDYwLCAweDFkLCAweGU1LCAweDQ3LCAweDY0LCAweDA4LCAweDYwLCAweDE3LCAweGU1LAotMHg0NywgMHg2NCwgMHgwOSwgMHg2MCwgMHgxMSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwYSwgMHg2MCwgMHgwYiwgMHhlNSwgMHg0NywgMHg2NCwgMHgwYiwgMHg2MCwKLTB4MDUsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MGMsIDB4MDgsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4M2EsIDB4ZTUsIDB4NDcsCi0weGI0LCAweDA5LCAweDA4LCAweGU1LCAweDNhLCAweGI0LCAweDAzLCAweDAzLCAweGU0LCAweGY1LCAweDQ2LCAweGU1LCAweDQ3LCAweGI0LCAweDBhLCAweDA4LAotMHhlNSwgMHgzYSwgMHhiNCwgMHgwMSwgMHgwMywgMHhlNCwgMHhmNSwgMHg0NiwgMHhlNCwgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHhhYSwgMHhkMiwKLTB4MDQsIDB4MjIsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4ZjQsIDB4ZmYsIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4NWYsIDB4ZmYsIDB4OTAsIDB4NzAsCi0weDExLCAweGUwLCAweDU1LCAweDI3LCAweDRmLCAweDkwLCAweDcwLCAweDE4LCAweGYwLCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweDkwLCAweDcwLCAweDE5LAotMHhmMCwgMHhlNCwgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHhhYSwgMHgzMCwgMHgxNSwgMHgwMywgMHhkMiwgMHgxNCwgMHgyMiwgMHg5MCwgMHg3MCwKLTB4MTgsIDB4ZTAsIDB4ZjUsIDB4MjcsIDB4OTAsIDB4MDIsIDB4MjksIDB4ZTAsIDB4ZmYsIDB4OTAsIDB4NzAsIDB4MTksIDB4ZTAsIDB4ZmUsIDB4ZWYsIDB4NWUsCi0weDkwLCAweDAyLCAweDI5LCAweGYwLCAweDMwLCAweDQ3LCAweDA0LCAweGFmLCAweDI3LCAweDgwLCAweDA0LCAweGU1LCAweDI3LCAweGY0LCAweGZmLCAweDkwLAotMHgwMiwgMHgyOCwgMHhlZiwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHhmZSwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHhmZCwgMHhlZCwKLTB4ZjgsIDB4ZTYsIDB4ZjUsIDB4NTcsIDB4ZmQsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsIDB4YWEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsCi0weGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDcwLCAweDAzLCAweDAyLCAweDEzLCAweDFlLCAweDAyLCAweDEzLCAweDE3LAotMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHhmZSwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHhmZCwgMHhlZCwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwKLTB4ZjUsIDB4NTcsIDB4ZmQsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsIDB4YWEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsCi0weDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDcwLCAweDAzLCAweDAyLCAweDEzLCAweDFlLCAweDAyLCAweDEzLCAweDE3LCAweDkwLCAweDEwLAotMHgwMCwgMHhlMCwgMHhmNSwgMHg1NywgMHg5MCwgMHgxMCwgMHgwMiwgMHhlMCwgMHhmNSwgMHg1OCwgMHhhMywgMHhlMCwgMHhmNSwgMHg1OSwgMHhlNSwgMHg1OCwKLTB4YjQsIDB4NzAsIDB4MWUsIDB4ZTUsIDB4NTksIDB4YjQsIDB4MzAsIDB4MTksIDB4OTAsIDB4MDUsIDB4MDgsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ZmQsCi0weDkwLCAweDA1LCAweDA1LCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweDQ0LCAweDA0LCAweGYwLCAweGVkLCAweDU0LCAweGZlLCAweDkwLCAweDA1LCAweDA4LAotMHhmMCwgMHhlNCwgMHhmNSwgMHg0ZSwgMHhmNSwgMHg0ZiwgMHg3NSwgMHgzYSwgMHhmZiwgMHg3NSwgMHgzYywgMHhmZiwgMHhhZCwgMHg1NywgMHhhZiwgMHg1NiwKLTB4MTIsIDB4MGIsIDB4YWEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsCi0weGY0LCAweDYwLCAweDRiLCAweDgwLCAweDQyLCAweDkwLCAweDcwLCAweDEwLCAweGUwLCAweDI0LCAweGZmLCAweDkyLCAweDkzLCAweGU0LCAweGZkLCAweGFmLAotMHg1NiwgMHgxMiwgMHgwYiwgMHhhYSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwKLTB4NTYsIDB4ZjQsIDB4NjAsIDB4MmEsIDB4ODAsIDB4MjEsIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NGEsIDB4ZDIsIDB4MDUsCi0weGFkLCAweDU3LCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweGFhLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLCAweDcwLAotMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg2MCwgMHgwNywgMHg5MCwgMHg3MCwgMHgyNSwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgyMiwgMHgyMiwKLTB4ZTUsIDB4NTMsIDB4NzAsIDB4MWEsIDB4MzAsIDB4NjAsIDB4MDksIDB4YjIsIDB4NGQsIDB4MzAsIDB4NGQsIDB4MDQsIDB4MDUsIDB4NDYsIDB4YzIsIDB4MDQsCi0weGU1LCAweDRmLCAweDQ1LCAweDRlLCAweDYwLCAweDA4LCAweGU1LCAweDRmLCAweDE1LCAweDRmLCAweDcwLCAweDAyLCAweDE1LCAweDRlLCAweDIyLCAweDIyLAotMHhjMiwgMHg0MiwgMHhkMywgMHgyMiwgMHgzMCwgMHgxNCwgMHgzMCwgMHg5MCwgMHg3MCwgMHgxOSwgMHhlMCwgMHg1NSwgMHgyNywgMHhmZiwgMHg5MCwgMHg3MCwKLTB4MTgsIDB4ZTAsIDB4NGYsIDB4ZjUsIDB4MjcsIDB4OTAsIDB4MDIsIDB4MjksIDB4ZTAsIDB4ZmYsIDB4OTAsIDB4NzAsIDB4MTksIDB4ZTAsIDB4ZmUsIDB4ZWYsCi0weDVlLCAweDkwLCAweDAyLCAweDI5LCAweGYwLCAweDMwLCAweDQ3LCAweDA0LCAweGFmLCAweDI3LCAweDgwLCAweDA0LCAweGU1LCAweDI3LCAweGY0LCAweGZmLAotMHg5MCwgMHgwMiwgMHgyOCwgMHhlZiwgMHhmMCwgMHhjMiwgMHgxNCwgMHgyMiwgMHhjMiwgMHg0YiwgMHhjMiwgMHg0YywgMHhlNSwgMHg0NCwgMHgxMiwgMHgwYSwKLTB4YjYsIDB4MTMsIDB4OWEsIDB4MDAsIDB4MTQsIDB4MjgsIDB4MDQsIDB4MTQsIDB4MjQsIDB4MDgsIDB4MTQsIDB4MDQsIDB4MTAsIDB4MTMsIDB4YWUsIDB4MjAsCi0weDEzLCAweGNlLCAweDYwLCAweDEzLCAweGRmLCAweGEwLCAweDAwLCAweDAwLCAweDE0LCAweDJhLCAweDg1LCAweDQ4LCAweDQzLCAweDg1LCAweDRhLCAweDQyLAotMHg4NSwgMHg0YywgMHg1ZSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNiwgMHg2MCwgMHgwMywgMHgwMiwgMHgxNCwgMHgyYSwgMHg4MCwgMHgxYiwgMHhlNSwgMHg0OCwKLTB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NDMsIDB4ZTUsIDB4NGEsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NDIsIDB4ZTUsIDB4NGMsIDB4YzQsIDB4NTQsCi0weDBmLCAweGY1LCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDcwLCAweDYxLCAweDUzLCAweDQzLCAweDBmLCAweDgwLCAweDVjLCAweDg1LCAweDQ5LAotMHg0MywgMHg4NSwgMHg0YiwgMHg0MiwgMHg4NSwgMHg0ZCwgMHg1ZSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNiwgMHg3MCwgMHg0ZCwgMHg4MCwgMHgxYiwgMHhlNSwKLTB4NDksIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NDMsIDB4ZTUsIDB4NGIsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NDIsIDB4ZTUsIDB4NGQsIDB4YzQsCi0weDU0LCAweDBmLCAweGY1LCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDcwLCAweDMwLCAweGU1LCAweDQzLCAweDU0LCAweDBmLCAweDQ0LCAweDEwLAotMHhmNSwgMHg0MywgMHg4MCwgMHgyNiwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNCwgMHg2MCwgMHgwNSwgMHhlNSwgMHg0NywgMHhiNCwgMHgwNSwgMHgwNiwgMHg0MywKLTB4NWUsIDB4MDQsIDB4NzUsIDB4NDIsIDB4MDksIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDYsIDB4MTAsIDB4ZTUsIDB4NDMsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MzAsCi0weGY1LCAweDQzLCAweDgwLCAweDA2LCAweGQyLCAweDRiLCAweDgwLCAweDAyLCAweGQyLCAweDRjLCAweGU0LCAweGY1LCAweDI1LCAweGU1LCAweDQyLCAweGM0LAotMHg1NCwgMHhmMCwgMHhmZiwgMHhlNSwgMHg0MywgMHg1NCwgMHgwZiwgMHg0ZiwgMHhmNSwgMHg1ZiwgMHhkMiwgMHg2MCwgMHgyMiwgMHhkMiwgMHgxNSwgMHhlNSwKLTB4NDcsIDB4MjQsIDB4ZjUsIDB4NjAsIDB4MGIsIDB4MjQsIDB4Y2IsIDB4NjAsIDB4MDcsIDB4MjQsIDB4NDAsIDB4NzAsIDB4MDYsIDB4YzIsIDB4MTUsIDB4MjIsCi0weDEyLCAweDE3LCAweDc5LCAweDEyLCAweDE0LCAweDVmLCAweGMyLCAweDE1LCAweGMyLCAweGFmLCAweGMyLCAweDA0LCAweGQyLCAweGFmLCAweDIyLCAweGMyLAotMHhhZiwgMHg5MCwgMHgwNCwgMHgxNCwgMHhlMCwgMHg1NCwgMHgwZSwgMHg2MCwgMHgwNCwgMHhkMiwgMHgxOCwgMHg4MCwgMHgwOCwgMHhlNSwgMHg0ZSwgMHg0NSwKLTB4NGYsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4MTgsIDB4ZDIsIDB4YWYsIDB4OTAsIDB4MDQsIDB4MTQsIDB4ZTAsIDB4YTIsIDB4ZTQsIDB4OTIsIDB4MTksIDB4NzQsCi0weDFlLCAweGYwLCAweGU1LCAweDVmLCAweDU0LCAweDBmLCAweGY1LCAweDJkLCAweGU1LCAweDI1LCAweDcwLCAweDEzLCAweDMwLCAweDE4LCAweDA1LCAweGU1LAotMHg1ZiwgMHgyMCwgMHhlNSwgMHgwYiwgMHgzMCwgMHgxOSwgMHgxOSwgMHhlNSwgMHg1ZiwgMHg1NCwgMHgzMCwgMHhmZiwgMHhiZiwgMHgzMCwgMHgxMSwgMHhlNSwKLTB4MjUsIDB4NzAsIDB4MDUsIDB4NzUsIDB4MjUsIDB4MGMsIDB4ODAsIDB4MDIsIDB4MTUsIDB4MjUsIDB4ZDIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4ODAsIDB4MGYsCi0weGU1LCAweDVmLCAweDMwLCAweGU2LCAweDA2LCAweGMyLCAweDZjLCAweGQyLCAweDZkLCAweDgwLCAweDA0LCAweGQyLCAweDZjLCAweGMyLCAweDZkLCAweGU1LAotMHg0NywgMHg2NCwgMHgwMywgMHg3MCwgMHgyMSwgMHgzMCwgMHg0YiwgMHgwNiwgMHhjMiwgMHg2YywgMHhkMiwgMHg2ZCwgMHg4MCwgMHgxOCwgMHhlNSwgMHgyNSwKLTB4NzAsIDB4MDMsIDB4MzAsIDB4NGMsIDB4MTEsIDB4YzIsIDB4NGMsIDB4ZTUsIDB4MjUsIDB4NzAsIDB4MDUsIDB4NzUsIDB4MjUsIDB4MDcsIDB4ODAsIDB4MDIsCi0weDE1LCAweDI1LCAweGQyLCAweDZjLCAweGQyLCAweDZkLCAweGU1LCAweDQ3LCAweGI0LCAweDA5LCAweDE0LCAweGU1LCAweDQ0LCAweDIwLCAweGUzLCAweDBiLAotMHhlNSwgMHgzYSwgMHg2NCwgMHgwMiwgMHg2MCwgMHgwNSwgMHhlNSwgMHgzYSwgMHhiNCwgMHgwMywgMHgwNCwgMHhjMiwgMHg2YywgMHhkMiwgMHg2ZCwgMHhlNSwKLTB4NDcsIDB4YjQsIDB4MGEsIDB4MTMsIDB4ZTUsIDB4M2EsIDB4YjQsIDB4MDEsIDB4MDYsIDB4YzIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4ODAsIDB4MDgsIDB4ZTUsCi0weDNhLCAweDcwLCAweDA0LCAweGQyLCAweDZjLCAweGMyLCAweDZkLCAweDIwLCAweDY5LCAweDA3LCAweGU1LCAweDVlLCAweDIwLCAweGUwLCAweDAyLCAweGIyLAotMHg2OCwgMHgyMCwgMHg2YiwgMHgwNywgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMSwgMHgwMiwgMHhiMiwgMHg2YSwgMHgyMCwgMHg2ZCwgMHgwNywgMHhlNSwgMHg1ZSwKLTB4MjAsIDB4ZTIsIDB4MDIsIDB4YjIsIDB4NmMsIDB4NzUsIDB4MmUsIDB4NDAsIDB4MjAsIDB4NjksIDB4MDQsIDB4YTIsIDB4NjgsIDB4ODAsIDB4MjYsIDB4MzAsCi0weDY4LCAweDA2LCAweGU1LCAweDQ2LCAweGEyLCAweGUyLCAweDgwLCAweDFkLCAweGU1LCAweDVlLCAweDIwLCAweGUyLCAweDA0LCAweDdmLCAweDAxLCAweDgwLAotMHgwMiwgMHg3ZiwgMHgwMCwgMHhlNSwgMHg0NiwgMHg1NCwgMHhmMCwgMHhmZSwgMHhiZSwgMHhmMCwgMHgwNCwgMHg3ZSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZSwKLTB4MDAsIDB4ZWUsIDB4NmYsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NzMsIDB4OTIsIDB4NzIsIDB4MjAsIDB4NmIsIDB4MDQsIDB4YTIsIDB4NmEsIDB4ODAsIDB4MjYsCi0weDMwLCAweDZhLCAweDA2LCAweGU1LCAweDQ2LCAweGEyLCAweGUyLCAweDgwLCAweDFkLCAweGU1LCAweDVlLCAweDIwLCAweGUwLCAweDA0LCAweDdmLCAweDAxLAotMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHhlNSwgMHg0NiwgMHg1NCwgMHhmMCwgMHhmZSwgMHhiZSwgMHhmMCwgMHgwNCwgMHg3ZSwgMHgwMSwgMHg4MCwgMHgwMiwKLTB4N2UsIDB4MDAsIDB4ZWUsIDB4NmYsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NzUsIDB4OTIsIDB4NzQsIDB4MjAsIDB4NmQsIDB4MDQsIDB4YTIsIDB4NmMsIDB4ODAsCi0weDI2LCAweGU1LCAweDQ3LCAweDY0LCAweDBhLCAweDcwLCAweDIyLCAweDMwLCAweDZjLCAweDA2LCAweGU1LCAweDQ2LCAweGEyLCAweGUzLCAweDgwLCAweDE3LAotMHhlNSwgMHgzYSwgMHhiNCwgMHgwMSwgMHgwNiwgMHhlNSwgMHg0NiwgMHhhMiwgMHhlMywgMHg4MCwgMHgzNCwgMHhlNSwgMHg0NiwgMHgyMCwgMHhlNCwgMHgwMywKLTB4MzAsIDB4ZTUsIDB4MDMsIDB4ZDMsIDB4ODAsIDB4MDEsIDB4YzMsIDB4ODAsIDB4MjYsIDB4MzAsIDB4NmMsIDB4MDYsIDB4ZTUsIDB4NDYsIDB4YTIsIDB4ZTIsCi0weDgwLCAweDFkLCAweGU1LCAweDVlLCAweDIwLCAweGUxLCAweDA0LCAweDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweGU1LCAweDQ2LCAweDU0LAotMHhmMCwgMHhmZSwgMHhiZSwgMHhmMCwgMHgwNCwgMHg3ZSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZSwgMHgwMCwgMHhlZSwgMHg2ZiwgMHgyNCwgMHhmZiwgMHg5MiwKLTB4NzEsIDB4OTIsIDB4NzAsIDB4OTAsIDB4MTAsIDB4MDAsIDB4ZTAsIDB4OTAsIDB4MTAsIDB4MmMsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MDMsIDB4ZTAsIDB4YzMsCi0weDk0LCAweDMwLCAweDQwLCAweDE0LCAweGEyLCAweDcxLCAweDkyLCAweDc3LCAweGEyLCAweDcwLCAweDkyLCAweDc2LCAweGU1LCAweDJlLCAweDEzLCAweDEzLAotMHg1NCwgMHgzZiwgMHhmNSwgMHgyZSwgMHhjMiwgMHg3NywgMHhkMiwgMHg3NiwgMHg5MCwgMHgxMCwgMHgyZiwgMHhlNSwgMHgyZSwgMHhmMCwgMHhlNSwgMHg0NywKLTB4NjQsIDB4MDYsIDB4NzAsIDB4MzksIDB4OTAsIDB4MDIsIDB4MjksIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4ZTUsIDB4NDMsIDB4YzQsIDB4NTQsIDB4MGYsCi0weDE0LCAweDYwLCAweDBjLCAweDI0LCAweGZlLCAweDYwLCAweDBjLCAweDI0LCAweDAzLCAweDcwLCAweDEzLCAweGMyLCAweDM4LCAweDgwLCAweDBmLCAweGQyLAotMHgzOCwgMHg4MCwgMHgwYiwgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwMywgMHhkMywgMHg4MCwgMHgwMSwgMHhjMywgMHg5MiwgMHgzOCwgMHgzMCwgMHg0NywKLTB4MDUsIDB4YWYsIDB4MjcsIDB4MDIsIDB4MTcsIDB4NzMsIDB4ZTUsIDB4MjcsIDB4ZjQsIDB4ZmYsIDB4MDIsIDB4MTcsIDB4NzMsIDB4ZTUsIDB4NDcsIDB4NjQsCi0weDA3LCAweDYwLCAweDBmLCAweGU1LCAweDQ3LCAweDY0LCAweDA4LCAweDYwLCAweDA5LCAweGU1LCAweDQ3LCAweDY0LCAweDA5LCAweDYwLCAweDAzLCAweDAyLAotMHgxNiwgMHhmMiwgMHg5MCwgMHgwMiwgMHgyOSwgMHhlMCwgMHg1NCwgMHhmYywgMHhmMCwgMHhlNSwgMHgzYSwgMHgxNCwgMHg2MCwgMHgyMiwgMHgxNCwgMHg2MCwKLTB4MjUsIDB4MTQsIDB4NjAsIDB4MmQsIDB4MjQsIDB4ZmMsIDB4NjAsIDB4NDksIDB4MjQsIDB4ZjksIDB4NjAsIDB4MTQsIDB4MjQsIDB4MGUsIDB4NzAsIDB4NTAsCi0weGU1LCAweDQ2LCAweDEzLCAweDEzLCAweDU0LCAweDNmLCAweDc1LCAweGYwLCAweDAzLCAweDg0LCAweGU1LCAweGYwLCAweDI0LCAweGZmLCAweDgwLCAweDNhLAotMHhkMiwgMHgzOSwgMHhjMiwgMHgzOCwgMHg4MCwgMHgzZSwgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwMywgMHhkMywgMHg4MCwgMHgxZCwgMHhjMywgMHg4MCwKLTB4MWEsIDB4ZTUsIDB4NDYsIDB4MzAsIDB4ZTIsIDB4MGQsIDB4NTQsIDB4MzgsIDB4YzMsIDB4OTQsIDB4MzAsIDB4NTAsIDB4MDYsIDB4N2UsIDB4MDAsIDB4N2YsCi0weDAxLCAweDgwLCAweDA0LCAweDdlLCAweDAwLCAweDdmLCAweDAwLCAweGVlLCAweDRmLCAweDI0LCAweGZmLCAweDkyLCAweDM4LCAweGMyLCAweDM5LCAweDgwLAotMHgxMywgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwMywgMHhkMywgMHg4MCwgMHgwMSwgMHhjMywgMHg5MiwgMHgzOSwgMHhjMiwgMHgzOCwgMHg4MCwgMHgwNCwKLTB4YzIsIDB4MzgsIDB4YzIsIDB4MzksIDB4MzAsIDB4NDcsIDB4MDQsIDB4YWYsIDB4MjcsIDB4ODAsIDB4MDQsIDB4ZTUsIDB4MjcsIDB4ZjQsIDB4ZmYsIDB4MDIsCi0weDE3LCAweDczLCAweGU1LCAweDQ3LCAweDY0LCAweDBjLCAweDYwLCAweDA2LCAweGU1LCAweDQ3LCAweDY0LCAweDBiLCAweDcwLCAweDdhLCAweDkwLCAweDAyLAotMHgyOSwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHhlNSwgMHgzYSwgMHgxNCwgMHg2MCwgMHgyMCwgMHgxNCwgMHg2MCwgMHgyMSwgMHgxNCwgMHg2MCwgMHgyYiwKLTB4MjQsIDB4ZmMsIDB4NjAsIDB4NDUsIDB4MjQsIDB4ZjksIDB4NjAsIDB4MTIsIDB4MjQsIDB4MGUsIDB4NzAsIDB4NGEsIDB4ZTUsIDB4NDYsIDB4MTMsIDB4MTMsCi0weDU0LCAweDNmLCAweDc1LCAweGYwLCAweDAzLCAweDg0LCAweGU1LCAweGYwLCAweDgwLCAweDI5LCAweGQyLCAweDM5LCAweDgwLCAweDNhLCAweGU1LCAweDQ2LAotMHgzMCwgMHhlMiwgMHgwMywgMHhkMywgMHg4MCwgMHgwMSwgMHhjMywgMHg5MiwgMHgzOSwgMHg4MCwgMHgyZCwgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwZCwKLTB4NTQsIDB4MzgsIDB4YzMsIDB4OTQsIDB4MzAsIDB4NTAsIDB4MDYsIDB4N2UsIDB4MDAsIDB4N2YsIDB4MDEsIDB4ODAsIDB4MDQsIDB4N2UsIDB4MDAsIDB4N2YsCi0weDAwLCAweGVlLCAweDRmLCAweDI0LCAweGZmLCAweDkyLCAweDM5LCAweDgwLCAweDBmLCAweGU1LCAweDQ2LCAweDMwLCAweGUyLCAweDAzLCAweGQzLCAweDgwLAotMHgwMSwgMHhjMywgMHg5MiwgMHgzOSwgMHg4MCwgMHgwMiwgMHhjMiwgMHgzOSwgMHgzMCwgMHg0NywgMHgwNCwgMHhhZiwgMHgyNywgMHg4MCwgMHgwNCwgMHhlNSwKLTB4MjcsIDB4ZjQsIDB4ZmYsIDB4OTAsIDB4MDIsIDB4MjgsIDB4ZWYsIDB4ZjAsIDB4MjIsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MGIsIDB4MTAsIDB4OTAsIDB4MDIsCi0weDI5LCAweGUwLCAweDU0LCAweGViLCAweGYwLCAweGU1LCAweDI3LCAweDU0LCAweGViLCAweDQ1LCAweDQ1LCAweGY1LCAweDI3LCAweDIyLCAweGU0LCAweDkwLAotMHgwMiwgMHgyOSwgMHhmMCwgMHgzMCwgMHg0NywgMHgwNCwgMHhhZiwgMHg0NSwgMHg4MCwgMHgwNCwgMHhlNSwgMHg0NSwgMHhmNCwgMHhmZiwgMHg5MCwgMHgwMiwKLTB4MjgsIDB4ZWYsIDB4ZjAsIDB4MjIsIDB4OGYsIDB4NTAsIDB4ZDIsIDB4NTksIDB4MjIsIDB4OGYsIDB4NTQsIDB4ZDIsIDB4NTgsIDB4MjIsIDB4ZTQsIDB4ZjUsCi0weDYyLCAweGMyLCAweGFmLCAweGU1LCAweDUxLCAweDE0LCAweDYwLCAweDQ4LCAweDE0LCAweDYwLCAweDY2LCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLAotMHgxOCwgMHhiNiwgMHhkMiwgMHg1OSwgMHg3NSwgMHg1NSwgMHgwMSwgMHg5MCwgMHgwMiwgMHhhMiwgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmMCwgMHhhMywgMHhlMCwKLTB4MjAsIDB4ZTcsIDB4MjMsIDB4OTAsIDB4MDQsIDB4MzQsIDB4ZTAsIDB4YjQsIDB4MDIsIDB4MWMsIDB4YTMsIDB4ZTAsIDB4YjQsIDB4MDIsIDB4MTcsIDB4YTMsCi0weGUwLCAweGI0LCAweDAyLCAweDEyLCAweDdmLCAweDIwLCAweDEyLCAweDE3LCAweGE0LCAweDkwLCAweDEwLCAweDA0LCAweGUwLCAweDU0LCAweGYzLCAweGYwLAotMHg3NSwgMHg1MSwgMHgwMSwgMHgwMiwgMHgxOCwgMHhiNiwgMHhlNSwgMHg1MCwgMHg3MCwgMHgwNiwgMHg3NSwgMHg2MiwgMHgwMywgMHgwMiwgMHgxOCwgMHhiNiwKLTB4OTAsIDB4MTIsIDB4MDAsIDB4ZTAsIDB4NTQsIDB4MDMsIDB4NzAsIDB4MTIsIDB4N2YsIDB4MjAsIDB4MTIsIDB4MTcsIDB4YTQsIDB4OTAsIDB4MDIsIDB4YTIsCi0weGUwLCAweDU0LCAweGJmLCAweGYwLCAweDc1LCAweDUxLCAweDAyLCAweDAyLCAweDE4LCAweGI2LCAweGU1LCAweDUwLCAweDcwLCAweDAzLCAweDAyLCAweDE4LAotMHhiMSwgMHg5MCwgMHgwMiwgMHhhMywgMHhlMCwgMHgzMCwgMHhlNiwgMHgwMywgMHgwMiwgMHgxOCwgMHhhZCwgMHg5MCwgMHgwNCwgMHgzNywgMHhlMCwgMHg2NCwKLTB4MjIsIDB4NzAsIDB4N2EsIDB4OTAsIDB4MDEsIDB4OGEsIDB4NzQsIDB4N2UsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4OTYsIDB4ZjAsIDB4OTAsIDB4MTIsIDB4MDQsCi0weDc0LCAweDBhLCAweGYwLCAweGU1LCAweDU4LCAweGI0LCAweDcyLCAweDE1LCAweGU1LCAweDU5LCAweGI0LCAweDM1LCAweDEwLCAweGU0LCAweDkwLCAweDA1LAotMHgwMCwgMHhmMCwgMHhhMywgMHg3NCwgMHgwOCwgMHhmMCwgMHhhMywgMHg3NCwgMHgwMSwgMHhmMCwgMHg3NCwgMHgwMywgMHhmMCwgMHg3ZiwgMHgwMSwgMHgxMiwKLTB4MGQsIDB4NDgsIDB4OTAsIDB4MTMsIDB4MjgsIDB4ZTAsIDB4NTQsIDB4ZjAsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4ZjAsIDB4ZjAsIDB4ZTUsIDB4NTksCi0weGI0LCAweDM1LCAweDE0LCAweGU1LCAweDNjLCAweGY0LCAweDYwLCAweDA2LCAweGEzLCAweGUwLCAweDU0LCAweGYzLCAweDgwLCAweDE0LCAweDkwLCAweDEzLAotMHgyYSwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHg4MCwgMHgxNCwgMHhlNSwgMHgzYywgMHhmNCwgMHg5MCwgMHgxMywgMHgyYSwgMHg2MCwgMHgwOCwgMHhlMCwKLTB4NTQsIDB4ZjIsIDB4NDUsIDB4M2MsIDB4ZjAsIDB4ODAsIDB4MDQsIDB4ZTAsIDB4NTQsIDB4ZmEsIDB4ZjAsIDB4OTAsIDB4MDQsIDB4MDEsIDB4ZTAsIDB4NTQsCi0weGZkLCAweGYwLCAweDc1LCAweDYyLCAweDAxLCAweDc1LCAweDU1LCAweDAyLCAweGU0LCAweGY1LCAweDUxLCAweDgwLCAweDA5LCAweGU1LCAweDUwLCAweDcwLAotMHgwNSwgMHg3NSwgMHg2MiwgMHgwMywgMHhmNSwgMHg1MSwgMHhlNSwgMHg2MiwgMHg2MCwgMHgxNSwgMHhjMiwgMHgwMSwgMHhlNCwgMHhmNSwgMHg1MSwgMHhjMiwKLTB4NTksIDB4YWQsIDB4NjIsIDB4YWYsIDB4NDAsIDB4MTIsIDB4MTksIDB4NjEsIDB4ZTUsIDB4NjIsIDB4YjQsIDB4MDMsIDB4MDIsIDB4ZDIsIDB4MDMsIDB4ZDIsCi0weGFmLCAweDIyLCAweGMyLCAweGFmLCAweDMwLCAweDAxLCAweDEyLCAweGU0LCAweDkwLCAweDAxLCAweDk2LCAweGYwLCAweGY1LCAweDUxLCAweGMyLCAweDU5LAotMHhjMiwgMHgwMSwgMHg3ZCwgMHgwMiwgMHhhZiwgMHg0MCwgMHgxMiwgMHgxOSwgMHg2MSwgMHhlNSwgMHg1MiwgMHgxNCwgMHg2MCwgMHgwOSwgMHgwNCwgMHg3MCwKLTB4NmQsIDB4NzUsIDB4NTIsIDB4MDEsIDB4NzUsIDB4NTUsIDB4MDMsIDB4OTAsIDB4MDQsIDB4MDEsIDB4ZTAsIDB4NDQsIDB4MGUsIDB4ZjAsIDB4OTAsIDB4MTMsCi0weDI4LCAweGUwLCAweDQ0LCAweDBmLCAweGYwLCAweGEzLCAweGUwLCAweDQ0LCAweDBmLCAweGYwLCAweGEzLCAweGUwLCAweDQ0LCAweDA1LCAweGYwLCAweDkwLAotMHgxMiwgMHgwNCwgMHg3NCwgMHgwMywgMHhmMCwgMHhlNSwgMHg1OCwgMHhiNCwgMHg3MiwgMHgxNiwgMHhlNSwgMHg1OSwgMHhiNCwgMHgzNSwgMHgxMSwgMHg5MCwKLTB4MDUsIDB4MDAsIDB4NzQsIDB4ZTIsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4NzQsIDB4MDMsIDB4ZjAsCi0weDdmLCAweDAxLCAweDEyLCAweDBkLCAweDQ4LCAweDkwLCAweDAyLCAweGEyLCAweGUwLCAweDQ0LCAweGMwLCAweGYwLCAweDkwLCAweDEwLCAweDA0LCAweGUwLAotMHg0NCwgMHgwYywgMHhmMCwgMHhlNCwgMHhmNSwgMHg1MiwgMHhmNSwgMHg1NSwgMHgzMCwgMHgwMiwgMHgwOSwgMHhjMiwgMHgwMiwgMHg3ZCwgMHgwMSwgMHhhZiwKLTB4NDEsIDB4MTIsIDB4MTksIDB4NjEsIDB4MzAsIDB4MDMsIDB4MDIsIDB4YzIsIDB4MDMsIDB4ZTQsIDB4OTAsIDB4MDEsIDB4OTYsIDB4ZjAsIDB4ZDIsIDB4YWYsCi0weDIyLCAweGVmLCAweGY0LCAweDYwLCAweDJkLCAweGU0LCAweGZlLCAweDc0LCAweDE0LCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDcwLCAweGY1LAotMHg4MywgMHhlMCwgMHhiNCwgMHhmZiwgMHgxOSwgMHg3NCwgMHgxNCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3MCwgMHhmNSwgMHg4MywgMHhlZiwKLTB4ZjAsIDB4NzQsIDB4MWMsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4NzAsIDB4ZjUsIDB4ODMsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4MGUsIDB4YmUsCi0weDA0LCAweGQ1LCAweDIyLCAweDIyLCAweDIyLCAweDkwLCAweDcwLCAweDJhLCAweGUwLCAweDMwLCAweGUxLCAweDRkLCAweGMyLCAweGFmLCAweDkwLCAweDcwLAotMHgyOCwgMHhlMCwgMHg5MCwgMHgxMCwgMHgxYywgMHhmMCwgMHg5MCwgMHg3MCwgMHgyOSwgMHhlMCwgMHg5MCwgMHgxMCwgMHgxZCwgMHhmMCwgMHg5MCwgMHg3MCwKLTB4MmEsIDB4ZTAsIDB4OTAsIDB4MTAsIDB4MWUsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MWMsIDB4ZTAsIDB4ZjUsIDB4NjIsIDB4OTAsIDB4MTAsIDB4MWUsIDB4ZTAsCi0weDIwLCAweGUxLCAweGYzLCAweDkwLCAweDEwLCAweDFjLCAweGUwLCAweDkwLCAweDcwLCAweDI4LCAweGYwLCAweDkwLCAweDEwLCAweDFkLCAweGUwLCAweDkwLAotMHg3MCwgMHgyOSwgMHhmMCwgMHg5MCwgMHgxMCwgMHgxZSwgMHhlMCwgMHg5MCwgMHg3MCwgMHgyYSwgMHhmMCwgMHgzMCwgMHg0YSwgMHgwNywgMHg5MCwgMHg3MCwKLTB4MjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4YzIsIDB4MDUsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4MjIsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDY1LCAweGQzLCB9IDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3J0bXBfbWN1LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9ydG1wX21jdS5jCmluZGV4IDlmMDM5MDEuLjg0NGQ0YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3J0bXBfbWN1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vcnRtcF9tY3UuYwpAQCAtMzcsMzUgKzM3LDM4IEBACiAKICNpbmNsdWRlCSIuLi9ydF9jb25maWcuaCIKIAotI2lmIGRlZmluZWQoUlQyODYwKSB8fCBkZWZpbmVkKFJUMzA5MCkKLSNpbmNsdWRlICJmaXJtd2FyZS5oIgotI2luY2x1ZGUgIi4uLy4uL3J0MzA5MC9maXJtd2FyZS5oIgotI2VuZGlmCi0jaWZkZWYgUlQyODcwCi0jaW5jbHVkZSAiLi4vLi4vcnQzMDcwL2Zpcm13YXJlLmgiCi0jaW5jbHVkZSAiZmlybXdhcmVfMzA3MC5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxsaW51eC9iaXRyZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMtY2NpdHQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogCiAjaWZkZWYgUlRNUF9NQUNfVVNCCi0vKiAqLwotLyogUlQyODcwIEZpcm13YXJlIFNwZWMgb25seSB1c2VkIDEgb2N0IGZvciB2ZXJzaW9uIGV4cHJlc3Npb24gKi8KLS8qICovCi0jZGVmaW5lIEZJUk1XQVJFX01JTk9SX1ZFUlNJT04JNwotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwogCi0vKiBOZXcgOGsgYnl0ZSBmaXJtd2FyZSBzaXplIGZvciBSVDMwNzEvUlQzMDcyICovCi0jZGVmaW5lIEZJUk1XQVJFSU1BR0VfTUFYX0xFTkdUSAkweDIwMDAKLSNkZWZpbmUgRklSTVdBUkVJTUFHRV9MRU5HVEgJCQkoc2l6ZW9mIChGaXJtd2FyZUltYWdlKSAvIHNpemVvZih1OCkpCi0jZGVmaW5lIEZJUk1XQVJFX01BSk9SX1ZFUlNJT04JCTAKKyNkZWZpbmUgRklSTVdBUkVJTUFHRV9MRU5HVEgJCTB4MTAwMAogCi0jZGVmaW5lIEZJUk1XQVJFSU1BR0VWMV9MRU5HVEgJCTB4MTAwMAotI2RlZmluZSBGSVJNV0FSRUlNQUdFVjJfTEVOR1RICQkweDEwMDAKKyNkZWZpbmUgRklSTVdBUkVfMjg3MF9NSU5fVkVSU0lPTgkxMgorI2RlZmluZSBGSVJNV0FSRV8yODcwX0ZJTEVOQU1FCQkicnQyODcwLmJpbiIKK01PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV8yODcwX0ZJTEVOQU1FKTsKIAotI2lmZGVmIFJUTVBfTUFDX1BDSQotI2RlZmluZSBGSVJNV0FSRV9NSU5PUl9WRVJTSU9OCQkyCi0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCisjZGVmaW5lIEZJUk1XQVJFXzMwNzBfTUlOX1ZFUlNJT04JMTcKKyNkZWZpbmUgRklSTVdBUkVfMzA3MF9GSUxFTkFNRQkJInJ0MzA3MC5iaW4iCitNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfMzA3MF9GSUxFTkFNRSk7CisKKyNkZWZpbmUgRklSTVdBUkVfMzA3MV9NSU5fVkVSU0lPTgkxNworI2RlZmluZSBGSVJNV0FSRV8zMDcxX0ZJTEVOQU1FCQkicnQzMDcxLmJpbiIJLyogZm9yIFJUMzA3MS9SVDMwNzIgKi8KK01PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV8zMDcxX0ZJTEVOQU1FKTsKKworI2Vsc2UgLyogUlRNUF9NQUNfUENJICovCisKKyNkZWZpbmUgRklSTVdBUkVJTUFHRV9MRU5HVEgJCTB4MjAwMAorCisjZGVmaW5lIEZJUk1XQVJFXzI4NjBfTUlOX1ZFUlNJT04JMTEKKyNkZWZpbmUgRklSTVdBUkVfMjg2MF9GSUxFTkFNRQkJInJ0Mjg2MC5iaW4iCitNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfMjg2MF9GSUxFTkFNRSk7CisKKyNkZWZpbmUgRklSTVdBUkVfMzA5MF9NSU5fVkVSU0lPTgkxOQorI2RlZmluZSBGSVJNV0FSRV8zMDkwX0ZJTEVOQU1FCQkicnQzMDkwLmJpbiIJLyogZm9yIFJUMzA5MC9SVDMzOTAgKi8KK01PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV8zMDkwX0ZJTEVOQU1FKTsKKworI2VuZGlmCiAKIC8qCiAJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC05MCw2ICs5Myw3OCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpcm13YXJlICpydG1wX2dldF9maXJtd2FyZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICphZGFwdGVyKQoreworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IE5VTEw7CisJdTggbWluX3ZlcnNpb247CisJc3RydWN0IGRldmljZSAqZGV2OworCWludCBlcnI7CisKKwlpZiAoYWRhcHRlci0+ZmlybXdhcmUpCisJCXJldHVybiBhZGFwdGVyLT5maXJtd2FyZTsKKworI2lmZGVmIFJUTVBfTUFDX1VTQgorCWlmIChJU19SVDMwNzEoYWRhcHRlcikpIHsKKwkJbmFtZSA9IEZJUk1XQVJFXzMwNzFfRklMRU5BTUU7CisJCW1pbl92ZXJzaW9uID0gRklSTVdBUkVfMzA3MV9NSU5fVkVSU0lPTjsKKwl9IGVsc2UgaWYgKElTX1JUMzA3MChhZGFwdGVyKSkgeworCQluYW1lID0gRklSTVdBUkVfMzA3MF9GSUxFTkFNRTsKKwkJbWluX3ZlcnNpb24gPSBGSVJNV0FSRV8zMDcwX01JTl9WRVJTSU9OOworCX0gZWxzZSB7CisJCW5hbWUgPSBGSVJNV0FSRV8yODcwX0ZJTEVOQU1FOworCQltaW5fdmVyc2lvbiA9IEZJUk1XQVJFXzI4NzBfTUlOX1ZFUlNJT047CisJfQorCWRldiA9ICYoKHN0cnVjdCBvc19jb29raWUgKilhZGFwdGVyLT5PU19Db29raWUpLT5wVXNiX0Rldi0+ZGV2OworI2Vsc2UgLyogUlRNUF9NQUNfUENJICovCisJaWYgKElTX1JUMzA5MChhZGFwdGVyKSB8fCBJU19SVDMzOTAoYWRhcHRlcikpIHsKKwkJbmFtZSA9IEZJUk1XQVJFXzMwOTBfRklMRU5BTUU7CisJCW1pbl92ZXJzaW9uID0gRklSTVdBUkVfMzA5MF9NSU5fVkVSU0lPTjsKKwl9IGVsc2UgeworCQluYW1lID0gRklSTVdBUkVfMjg2MF9GSUxFTkFNRTsKKwkJbWluX3ZlcnNpb24gPSBGSVJNV0FSRV8yODYwX01JTl9WRVJTSU9OOworCX0KKwlkZXYgPSAmKChzdHJ1Y3Qgb3NfY29va2llICopYWRhcHRlci0+T1NfQ29va2llKS0+cGNpX2Rldi0+ZGV2OworI2VuZGlmCisKKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgbmFtZSwgZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoZGV2LCAiZmlybXdhcmUgZmlsZSAlcyByZXF1ZXN0IGZhaWxlZCAoJWQpXG4iLAorCQkJbmFtZSwgZXJyKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKGZ3LT5zaXplIDwgRklSTVdBUkVJTUFHRV9MRU5HVEgpIHsKKwkJZGV2X2VycihkZXYsICJmaXJtd2FyZSBmaWxlICVzIHNpemUgaXMgaW52YWxpZFxuIiwgbmFtZSk7CisJCWdvdG8gaW52YWxpZDsKKwl9CisKKwkvKiBpcyBpdCBuZXcgZW5vdWdoPyAqLworCWFkYXB0ZXItPkZpcm13YXJlVmVyc2lvbiA9IGZ3LT5kYXRhW0ZJUk1XQVJFSU1BR0VfTEVOR1RIIC0gM107CisJaWYgKGFkYXB0ZXItPkZpcm13YXJlVmVyc2lvbiA8IG1pbl92ZXJzaW9uKSB7CisJCWRldl9lcnIoZGV2LAorCQkJImZpcm13YXJlIGZpbGUgJXMgaXMgdG9vIG9sZDsiCisJCQkiIGRyaXZlciByZXF1aXJlcyB2JWQgb3IgbGF0ZXJcbiIsCisJCQluYW1lLCBtaW5fdmVyc2lvbik7CisJCWdvdG8gaW52YWxpZDsKKwl9CisKKwkvKiBpcyB0aGUgaW50ZXJuYWwgQ1JDIGNvcnJlY3Q/ICovCisJaWYgKGNyY19jY2l0dCgweGZmZmYsIGZ3LT5kYXRhLCBGSVJNV0FSRUlNQUdFX0xFTkdUSCAtIDIpICE9CisJICAgIChmdy0+ZGF0YVtGSVJNV0FSRUlNQUdFX0xFTkdUSCAtIDJdIHwKKwkgICAgIChmdy0+ZGF0YVtGSVJNV0FSRUlNQUdFX0xFTkdUSCAtIDFdIDw8IDgpKSkgeworCQlkZXZfZXJyKGRldiwgImZpcm13YXJlIGZpbGUgJXMgZmFpbGVkIGludGVybmFsIENSQ1xuIiwgbmFtZSk7CisJCWdvdG8gaW52YWxpZDsKKwl9CisKKwlhZGFwdGVyLT5maXJtd2FyZSA9IGZ3OworCXJldHVybiBmdzsKKworaW52YWxpZDoKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwlyZXR1cm4gTlVMTDsKK30KKwogLyoKIAk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtMTA5LDQ2ICsxODQsMTYgQEAKICovCiBpbnQgUnRtcEFzaWNMb2FkRmlybXdhcmUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQogewotCisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKIAlpbnQgU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKLQl1OCAqcEZpcm13YXJlSW1hZ2UgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgRmlsZUxlbmd0aCwgSW5kZXg7CisJdW5zaWduZWQgbG9uZyBJbmRleDsKIAl1MzIgTWFjUmVnID0gMDsKLSNpZmRlZiBSVE1QX01BQ19VU0IKLQl1MzIgVmVyc2lvbiA9IChwQWQtPk1BQ1ZlcnNpb24gPj4gMTYpOwotI2VuZGlmCiAKLQkvKiBOZXcgOGsgYnl0ZSBmaXJtd2FyZSBzaXplIGZvciBSVDMwNzEvUlQzMDcyICovCi0JewotI2lmZGVmIFJUTVBfTUFDX1BDSQotCQlpZiAoSVNfUlQzMDkwKHBBZCkgfHwgSVNfUlQzMzkwKHBBZCkpIHsKLQkJCXBGaXJtd2FyZUltYWdlID0gRmlybXdhcmVJbWFnZV8zMDkwOwotCQkJRmlsZUxlbmd0aCA9IEZJUk1XQVJFSU1BR0VfTUFYX0xFTkdUSDsKLQkJfSBlbHNlIHsKLQkJCXBGaXJtd2FyZUltYWdlID0gRmlybXdhcmVJbWFnZV8yODYwOwotCQkJRmlsZUxlbmd0aCA9IEZJUk1XQVJFSU1BR0VfTUFYX0xFTkdUSDsKLQkJfQotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotI2lmZGVmIFJUTVBfTUFDX1VTQgotCQkvKiB0aGUgZmlybXdhcmUgaW1hZ2UgY29uc2lzdHMgb2YgdHdvIHBhcnRzICovCi0JCWlmICgoVmVyc2lvbiAhPSAweDI4NjApICYmIChWZXJzaW9uICE9IDB4Mjg3MikgJiYgKFZlcnNpb24gIT0gMHgzMDcwKSkgewkvKiB1c2UgdGhlIHNlY29uZCBwYXJ0ICovCi0JCQkvKnByaW50aygiS0g6VXNlIE5ldyBWZXJzaW9uLHBhcnQyXG4iKTsgKi8KLQkJCXBGaXJtd2FyZUltYWdlID0KLQkJCSAgICAodTggKikmCi0JCQkgICAgRmlybXdhcmVJbWFnZV8zMDcwW0ZJUk1XQVJFSU1BR0VWMV9MRU5HVEhdOwotCQkJRmlsZUxlbmd0aCA9IEZJUk1XQVJFSU1BR0VWMl9MRU5HVEg7Ci0JCX0gZWxzZSB7Ci0JCQkvKnByaW50aygiS0g6VXNlIE5ldyBWZXJzaW9uLHBhcnQxXG4iKTsgKi8KLQkJCWlmIChWZXJzaW9uID09IDB4MzA3MCkKLQkJCQlwRmlybXdhcmVJbWFnZSA9IEZpcm13YXJlSW1hZ2VfMzA3MDsKLQkJCWVsc2UKLQkJCQlwRmlybXdhcmVJbWFnZSA9IEZpcm13YXJlSW1hZ2VfMjg3MDsKLQkJCUZpbGVMZW5ndGggPSBGSVJNV0FSRUlNQUdFVjFfTEVOR1RIOwotCQl9Ci0jZW5kaWYgLyogUlRNUF9NQUNfVVNCIC8vICovCi0JfQorCWZ3ID0gcnRtcF9nZXRfZmlybXdhcmUocEFkKTsKKwlpZiAoIWZ3KQorCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKIAotCVJUTVBfV1JJVEVfRklSTVdBUkUocEFkLCBwRmlybXdhcmVJbWFnZSwgRmlsZUxlbmd0aCk7CisJUlRNUF9XUklURV9GSVJNV0FSRShwQWQsIGZ3LT5kYXRhLCBGSVJNV0FSRUlNQUdFX0xFTkdUSCk7CiAKIAkvKiBjaGVjayBpZiBNQ1UgaXMgcmVhZHkgKi8KIAlJbmRleCA9IDA7CkBAIC0yMjEsNyArMjY2LDcgQEAKIAkJCQkgKCJBc2ljU2VuZENvbW1hblRvTWN1OjpNYWlsIGJveCBpcyBidXN5XG4iKSk7CiAJCX0gd2hpbGUgKGkrKyA8IDEwMCk7CiAKLQkJaWYgKGkgPj0gMTAwKSB7CisJCWlmIChpID4gMTAwKSB7CiAJCQlEQkdQUklOVF9FUlIoKCJIMk1fTUFJTEJPWCBzdGlsbCBob2xkIGJ5IE1DVS4gY29tbWFuZCBmYWlsXG4iKSk7CiAJCQlyZXR1cm4gRkFMU0U7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYwppbmRleCA5MzU3ZmIyLi5iNWM3OGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5jCkBAIC0yNSw2ICsyNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAicnRfY29uZmlnLmgiCiAKQEAgLTI2MCw2ICsyNjEsOCBAQAogCiAJTmRpc0ZyZWVTcGluTG9jaygmcEFkLT5pcnFfbG9jayk7CiAKKwlyZWxlYXNlX2Zpcm13YXJlKHBBZC0+ZmlybXdhcmUpOworCiAJdmZyZWUocEFkKTsJCS8qIHBjaV9mcmVlX2NvbnNpc3RlbnQob3NfY29va2llLT5wY2lfZGV2LHNpemVvZihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyKSxwQWQsb3NfY29va2llLT5wQWRfcGEpOyAqLwogCWlmIChvc19jb29raWUpCiAJCWtmcmVlKG9zX2Nvb2tpZSk7CkBAIC00NjIsOSArNDY1LDkgQEAKIAlpZiAoKHNrYiA9CiAJICAgICBfX2Rldl9hbGxvY19za2IoSGRyTGVuICsgRGF0YVNpemUgKyAyLCBNRU1fQUxMT0NfRkxBRykpICE9IE5VTEwpIHsKIAkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKLQkJTmRpc01vdmVNZW1vcnkoc2tiLT50YWlsLCBwSGVhZGVyODAyXzMsIEhkckxlbik7CisJCU5kaXNNb3ZlTWVtb3J5KHNrYl90YWlsX3BvaW50ZXIoc2tiKSwgcEhlYWRlcjgwMl8zLCBIZHJMZW4pOwogCQlza2JfcHV0KHNrYiwgSGRyTGVuKTsKLQkJTmRpc01vdmVNZW1vcnkoc2tiLT50YWlsLCBwRGF0YSwgRGF0YVNpemUpOworCQlOZGlzTW92ZU1lbW9yeShza2JfdGFpbF9wb2ludGVyKHNrYiksIHBEYXRhLCBEYXRhU2l6ZSk7CiAJCXNrYl9wdXQoc2tiLCBEYXRhU2l6ZSk7CiAJCXNrYi0+ZGV2ID0gZ2V0X25ldGRldl9mcm9tX2Jzc2lkKHBBZCwgRnJvbVdoaWNoQlNTSUQpOwogCQlwUGFja2V0ID0gT1NQS1RfVE9fUlRQS1Qoc2tiKTsKQEAgLTUxNSw3ICs1MTgsNyBAQAogCQlwQ2xvbmVkUGt0LT5kZXYgPSBwUnhQa3QtPmRldjsKIAkJcENsb25lZFBrdC0+ZGF0YSA9IHBEYXRhOwogCQlwQ2xvbmVkUGt0LT5sZW4gPSBEYXRhU2l6ZTsKLQkJcENsb25lZFBrdC0+dGFpbCA9IHBDbG9uZWRQa3QtPmRhdGEgKyBwQ2xvbmVkUGt0LT5sZW47CisJCXNrYl9zZXRfdGFpbF9wb2ludGVyKHBDbG9uZWRQa3QsIERhdGFTaXplKQogCQlBU1NFUlQoRGF0YVNpemUgPCAxNTMwKTsKIAl9CiAJcmV0dXJuIHBDbG9uZWRQa3Q7CkBAIC01MzUsNyArNTM4LDcgQEAKIAlwT1NQa3QtPmRldiA9IGdldF9uZXRkZXZfZnJvbV9ic3NpZChwQWQsIEZyb21XaGljaEJTU0lEKTsKIAlwT1NQa3QtPmRhdGEgPSBwUnhCbGstPnBEYXRhOwogCXBPU1BrdC0+bGVuID0gcFJ4QmxrLT5EYXRhU2l6ZTsKLQlwT1NQa3QtPnRhaWwgPSBwT1NQa3QtPmRhdGEgKyBwT1NQa3QtPmxlbjsKKwlza2Jfc2V0X3RhaWxfcG9pbnRlcihwT1NQa3QsIHBPU1BrdC0+bGVuKTsKIH0KIAogdm9pZCB3bGFuXzgwMl8xMV90b184MDJfM19wYWNrZXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLApAQCAtNTUzLDcgKzU1Niw3IEBACiAJcE9TUGt0LT5kZXYgPSBnZXRfbmV0ZGV2X2Zyb21fYnNzaWQocEFkLCBGcm9tV2hpY2hCU1NJRCk7CiAJcE9TUGt0LT5kYXRhID0gcFJ4QmxrLT5wRGF0YTsKIAlwT1NQa3QtPmxlbiA9IHBSeEJsay0+RGF0YVNpemU7Ci0JcE9TUGt0LT50YWlsID0gcE9TUGt0LT5kYXRhICsgcE9TUGt0LT5sZW47CisJc2tiX3NldF90YWlsX3BvaW50ZXIocE9TUGt0LCBwT1NQa3QtPmxlbik7CiAKIAkvKiAqLwogCS8qIGNvcHkgODAyLjMgaGVhZGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmgKaW5kZXggZjg1NTA4ZC4uYTdjNTQwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguaApAQCAtNjU4LDkgKzY1OCw5IEBACiAJCShSVFBLVF9UT19PU1BLVChfcGt0KS0+bGVuKSA9IChfbGVuKQogCiAjZGVmaW5lIEdFVF9PU19QS1RfREFUQVRBSUwoX3BrdCkgXAotCQkoUlRQS1RfVE9fT1NQS1QoX3BrdCktPnRhaWwpCisJCShza2JfdGFpbF9wb2ludGVyKFJUUEtUX1RPX09TUEtUKF9wa3QpKQogI2RlZmluZSBTRVRfT1NfUEtUX0RBVEFUQUlMKF9wa3QsIF9zdGFydCwgX2xlbikJXAotCQkoKFJUUEtUX1RPX09TUEtUKF9wa3QpKS0+dGFpbCkgPSAodTggKikoKF9zdGFydCkgKyAoX2xlbikpCisJCShza2Jfc2V0X3RhaWxfcG9pbnRlcihSVFBLVF9UT19PU1BLVChfcGt0KSwgX2xlbikpCiAKICNkZWZpbmUgR0VUX09TX1BLVF9IRUFEKF9wa3QpIFwKIAkJKFJUUEtUX1RPX09TUEtUKF9wa3QpLT5oZWFkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9tYWluX2Rldi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9tYWluX2Rldi5jCmluZGV4IGMzZDkyODAyLi5mYmRkYjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X21haW5fZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9tYWluX2Rldi5jCkBAIC0yMTYsNyArMjE2LDcgQEAKIAl1MzIgaSA9IDA7CiAKICNpZmRlZiBSVE1QX01BQ19VU0IKLQlERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCh1bmxpbmtfd2FrZXVwKTsKKwlERUNMQVJFX1dBSVRfUVVFVUVfSEVBRF9PTlNUQUNLKHVubGlua193YWtldXApOwogCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0bXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oCmluZGV4IGM1MGFiZjQuLjQ0MDFhNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oCkBAIC0xNzE5LDYgKzE3MTksNyBAQAogCXZvaWQgKk9TX0Nvb2tpZTsJLyogc2F2ZSBzcGVjaWZpYyBzdHJ1Y3R1cmUgcmVsYXRpdmUgdG8gT1MgKi8KIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldjsKIAl1bnNpZ25lZCBsb25nIFZpcnR1YWxJZkNudDsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlOwogCiAJc3RydWN0IHJ0X3J0bXBfY2hpcF9vcCBjaGlwT3BzOwogCXUxNiBUaGlzVGJ0dE51bVRvTmV4dFdha2VVcDsKQEAgLTQwNDMsMTAgKzQwNDQsMTAgQEAKIAkJCXUxNiBPZmZzZXQsIHU4ICpwRGF0YSwgdTE2IGxlbmd0aCk7CiAKIGludCBSVFVTQk11bHRpV3JpdGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJIHUxNiBPZmZzZXQsIHU4ICpwRGF0YSwgdTE2IGxlbmd0aCk7CisJCSAgICB1MTYgT2Zmc2V0LCBjb25zdCB1OCAqcERhdGEsIHUxNiBsZW5ndGgpOwogCiBpbnQgUlRVU0JNdWx0aVdyaXRlX09uZUJ5dGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSB1MTYgT2Zmc2V0LCB1OCAqcERhdGEpOworCQkJICAgIHUxNiBPZmZzZXQsIGNvbnN0IHU4ICpwRGF0YSk7CiAKIGludCBSVFVTQlJlYWRCQlBSZWdpc3RlcihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCiAJCQkgICAgICB1OCBJZCwgdTggKnBWYWx1ZSk7CkBAIC00MTEyLDcgKzQxMTMsNyBAQAogCQkJICB1MTYgT2Zmc2V0LCB1MTYgVmFsdWUpOwogCiBpbnQgUlRVU0JGaXJtd2FyZVdyaXRlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICB1OCAqcEZ3SW1hZ2UsIHVuc2lnbmVkIGxvbmcgRndMZW4pOworCQkgICAgICAgY29uc3QgdTggKnBGd0ltYWdlLCB1bnNpZ25lZCBsb25nIEZ3TGVuKTsKIAogaW50IFJUVVNCVmVuZGVyUmVzZXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvY29ubmVjdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvY29ubmVjdC5jCmluZGV4IDE3ZTU5YmEuLjU1NzMyYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL2Nvbm5lY3QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9jb25uZWN0LmMKQEAgLTYyLDggKzYyLDggQEAKIHU4IENpcGhlclN1aXRlV3BhTm9uZUFlc0xlbiA9CiAgICAgKHNpemVvZihDaXBoZXJTdWl0ZVdwYU5vbmVBZXMpIC8gc2l6ZW9mKHU4KSk7CiAKLS8qIFRoZSBmb2xsb3dpbmcgTUFDUk8gaXMgY2FsbGVkIGFmdGVyIDEuIHN0YXJ0aW5nIGFuIG5ldyBJQlNTLCAyLiBzdWNjZXNmdWxseSBKT0lOIGFuIElCU1MsICovCi0vKiBvciAzLiBzdWNjZXNmdWxseSBBU1NPQ0lBVEUgdG8gYSBCU1MsIDQuIHN1Y2Nlc3NmdWxseSBSRV9BU1NPQ0lBVEUgdG8gYSBCU1MgKi8KKy8qIFRoZSBmb2xsb3dpbmcgTUFDUk8gaXMgY2FsbGVkIGFmdGVyIDEuIHN0YXJ0aW5nIGFuIG5ldyBJQlNTLCAyLiBzdWNjZXNzZnVsbHkgSk9JTiBhbiBJQlNTLCAqLworLyogb3IgMy4gc3VjY2Vzc2Z1bGx5IEFTU09DSUFURSB0byBhIEJTUywgNC4gc3VjY2Vzc2Z1bGx5IFJFX0FTU09DSUFURSB0byBhIEJTUyAqLwogLyogQWxsIHNldHRpbmdzIHN1Y2Nlc3NmdWx5IG5lZ290aWF0ZWQgZnVyaW5nIE1MTUUgc3RhdGUgbWFjaGluZXMgYmVjb21lIGZpbmFsIHNldHRpbmdzICovCiAvKiBhbmQgYXJlIGNvcGllZCB0byBwQWQtPlN0YUFjdGl2ZSAqLwogI2RlZmluZSBDT1BZX1NFVFRJTkdTX0ZST01fTUxNRV9BVVhfVE9fQUNUSVZFX0NGRyhfcEFkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhX2lvY3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YV9pb2N0bC5jCmluZGV4IGQ4ZmJlNmMuLmRlNGI2MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhX2lvY3RsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGFfaW9jdGwuYwpAQCAtOTc1LDEwICs5NzUsNyBAQAogCQkvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CiAJCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKLQkJaWYgKElORlJBX09OKHBBZGFwdGVyKSB8fCBBREhPQ19PTihwQWRhcHRlcikpCi0JCQlpd2UudS5mcmVxLm0gPSBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5DaGFubmVsOwotCQllbHNlCi0JCQlpd2UudS5mcmVxLm0gPSBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5DaGFubmVsOworCQlpd2UudS5mcmVxLm0gPSBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5DaGFubmVsOwogCQlpd2UudS5mcmVxLmUgPSAwOwogCQlpd2UudS5mcmVxLmkgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3VzYl9tYWluX2Rldi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC91c2JfbWFpbl9kZXYuYwppbmRleCA5MjVhMjM2Li4xODczYTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3VzYl9tYWluX2Rldi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvdXNiX21haW5fZGV2LmMKQEAgLTIxNiwxMCArMjE2LDYgQEAKIHN0YXRpYyBpbnQgcnQyODcwX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CiAjZW5kaWYgLyogQ09ORklHX1BNIC8vICovCiAKLXN0YXRpYyBpbnQgcnR1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCi0JCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOwotc3RhdGljIHZvaWQgcnR1c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7Ci0KIHN0YXRpYyBCT09MRUFOIFVTQkRldkNvbmZpZ0luaXQoSU4gc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKIAkJCQlJTiBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJCQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCkBAIC0yOTYsNyArMjkyLDcgQEAKIAogfQogCi1zdGF0aWMgaW50IHJ0dXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorc3RhdGljIGludCBfX2RldmluaXQgcnR1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9LY29uZmlnCmluZGV4IGZkM2JhM2EuLjZlYTE3MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL0tjb25maWcKQEAgLTMsNSArMyw3IEBACiAJZGVwZW5kcyBvbiBVU0IgJiYgWDg2ICYmIFdMQU4KIAlzZWxlY3QgV0lSRUxFU1NfRVhUCiAJc2VsZWN0IFdFWFRfUFJJVgorCXNlbGVjdCBDUkNfQ0NJVFQKKwlzZWxlY3QgRldfTE9BREVSCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZHJpdmVyIGZvciB0aGUgUmFsaW5rIHh4NzAgd2lyZWxlc3MgY2hpcHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydHVzYl9pby5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnR1c2JfaW8uYwppbmRleCAzNDQ0M2YyLi5jZjBkMmY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydHVzYl9pby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3J0dXNiX2lvLmMKQEAgLTg0LDcgKzg0LDcgQEAKIAk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCiBpbnQgUlRVU0JGaXJtd2FyZVdyaXRlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICB1OCAqcEZ3SW1hZ2UsIHVuc2lnbmVkIGxvbmcgRndMZW4pCisJCSAgICAgICBjb25zdCB1OCAqcEZ3SW1hZ2UsIHVuc2lnbmVkIGxvbmcgRndMZW4pCiB7CiAJdTMyIE1hY1JlZzsKIAlpbnQgU3RhdHVzOwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLwogaW50IFJUVVNCTXVsdGlXcml0ZV9PbmVCeXRlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgdTE2IE9mZnNldCwgdTggKnBEYXRhKQorCQkJICAgIHUxNiBPZmZzZXQsIGNvbnN0IHU4ICpwRGF0YSkKIHsKIAlpbnQgU3RhdHVzOwogCkBAIC0xNzUsMTggKzE3NSwxOCBAQAogCVN0YXR1cyA9IFJUVVNCX1ZlbmRvclJlcXVlc3QocEFkLAogCQkJCSAgICAgVVNCRF9UUkFOU0ZFUl9ESVJFQ1RJT05fT1VULAogCQkJCSAgICAgREVWSUNFX1ZFTkRPUl9SRVFVRVNUX09VVCwKLQkJCQkgICAgIDB4NiwgMCwgT2Zmc2V0LCBwRGF0YSwgMSk7CisJCQkJICAgICAweDYsIDAsIE9mZnNldCwgKHU4ICopcERhdGEsIDEpOwogCiAJcmV0dXJuIFN0YXR1czsKIH0KIAogaW50IFJUVVNCTXVsdGlXcml0ZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgdTE2IE9mZnNldCwgdTggKnBEYXRhLCB1MTYgbGVuZ3RoKQorCQkgICAgdTE2IE9mZnNldCwgY29uc3QgdTggKnBEYXRhLCB1MTYgbGVuZ3RoKQogewogCWludCBTdGF0dXM7CiAKIAl1MTYgaW5kZXggPSAwLCBWYWx1ZTsKLQl1OCAqcFNyYyA9IHBEYXRhOworCWNvbnN0IHU4ICpwU3JjID0gcERhdGE7CiAJdTE2IHJlc3VkZSA9IDA7CiAKIAlyZXN1ZGUgPSBsZW5ndGggJSAyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9maXJtd2FyZS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9maXJtd2FyZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2Y5Y2JjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvZmlybXdhcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1OCArMCwwIEBACi0vKgotIENvcHlyaWdodCAoYykgMjAwNywgUmFsaW5rIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24KLSBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gUmVkaXN0cmlidXRpb24uICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIGJpbmFyeSBmb3JtLCB3aXRob3V0Ci0gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIG1ldDoKLQotIAkqIFJlZGlzdHJpYnV0aW9ucyBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlCi0gCWZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAJcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIAkqIE5laXRoZXIgdGhlIG5hbWUgb2YgUmFsaW5rIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAJc3VwcGxpZXJzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotIAlzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAJKiBObyByZXZlcnNlIGVuZ2luZWVyaW5nLCBkZWNvbXBpbGF0aW9uLCBvciBkaXNhc3NlbWJseSBvZiB0aGlzIHNvZnR3YXJlCi0gCWlzIHBlcm1pdHRlZC4KLQotIExpbWl0ZWQgcGF0ZW50IGxpY2Vuc2UuIFJhbGluayBUZWNobm9sb2d5IENvcnBvcmF0aW9uIGdyYW50cyBhIHdvcmxkLXdpZGUsCi0gcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UgdW5kZXIgcGF0ZW50cyBpdCBub3cgb3IgaGVyZWFmdGVyCi0gb3ducyBvciBjb250cm9scyB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgaW1wb3J0LCBvZmZlciB0byBzZWxsIGFuZAotIHNlbGwgKCJVdGlsaXplIikgdGhpcyBzb2Z0d2FyZSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55Ci0gc3VjaCBwYXRlbnQgaXMgbmVjZXNzYXJ5IHRvIFV0aWxpemUgdGhlIHNvZnR3YXJlIGFsb25lLCBvciBpbgotIGNvbWJpbmF0aW9uIHdpdGggYW4gb3BlcmF0aW5nIHN5c3RlbSBsaWNlbnNlZCB1bmRlciBhbiBhcHByb3ZlZCBPcGVuCi0gU291cmNlIGxpY2Vuc2UgYXMgbGlzdGVkIGJ5IHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlIGF0Ci0gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzLiAgVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotIGFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGlzIHNvZnR3YXJlLiAgTm8gaGFyZHdhcmUgcGVyCi0gc2UgaXMgbGljZW5zZWQgaGVyZXVuZGVyLgotCi0gRElTQ0xBSU1FUi4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAotIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywKLSBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAotIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQotIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLSBEQU1BR0UuCi0qLwotLyogQVVUTyBHRU4gUExFQVNFIERPIE5PVCBNT0RJRlkgSVQgKi8KLS8qIEFVVE8gR0VOIFBMRUFTRSBETyBOT1QgTU9ESUZZIElUICovCi0KLQotdTggRmlybXdhcmVJbWFnZV8yODcwIFtdID0gewotMHhmZiwgMHhmZiwgMHhmZiwgMHgwMiwgMHgxMCwgMHgyOCwgMHgwMiwgMHgxMCwgMHgzMiwgMHgwMiwgMHgxMCwgMHg3OCwgMHgwMiwgMHgxMiwgMHg2NywgMHgwMiwKLTB4MTIsIDB4NjgsIDB4MDIsIDB4MTIsIDB4ODcsIDB4MDIsIDB4MTIsIDB4OGMsIDB4MTIsIDB4MTIsIDB4ODgsIDB4MjIsIDB4MDIsIDB4MTYsIDB4NDksIDB4MDIsCi0weDE3LCAweDFmLCAweDAyLCAweDEzLCAweDc3LCAweDAyLCAweDEyLCAweDhkLCAweDMwLCAweDA1LCAweDA2LCAweDIwLCAweDBkLCAweDAzLCAweDEyLCAweDE3LAotMHhjMSwgMHgyMiwgMHg5MCwgMHgwMSwgMHg4YywgMHhlMCwgMHgzMCwgMHhlMywgMHgxYiwgMHhlNSwgMHg0YywgMHgzMCwgMHhlMCwgMHgwNCwgMHg3ZiwgMHg0MCwKLTB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4OTAsIDB4MTAsIDB4MmYsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4OGMsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4ZTQsCi0weDkwLCAweDAxLCAweGE3LCAweGYwLCAweDkwLCAweDAxLCAweDhjLCAweGUwLCAweDMwLCAweGUwLCAweDFjLCAweDkwLCAweDAxLCAweDgwLCAweGUwLCAweGI0LAotMHgwMiwgMHgxNSwgMHhhMywgMHhlMCwgMHhiNCwgMHgwMSwgMHgxMCwgMHg5MCwgMHgwMSwgMHg4NCwgMHhlMCwgMHhiNCwgMHg4MSwgMHgwOSwgMHg5MCwgMHgwMSwKLTB4OGMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MTIsIDB4MGQsIDB4YzgsIDB4MjIsIDB4OTAsIDB4MDQsIDB4MTQsIDB4ZTAsIDB4MjAsIDB4ZTcsIDB4MDMsIDB4MDIsCi0weDEyLCAweDY2LCAweDkwLCAweDcwLCAweDEyLCAweGUwLCAweGY1LCAweDU2LCAweDkwLCAweDA0LCAweDA0LCAweGUwLCAweDEyLCAweDBhLCAweDlkLCAweDEwLAotMHhiNywgMHgzMSwgMHgxMCwgMHhlMCwgMHg1MCwgMHgxMSwgMHgwNCwgMHg1MSwgMHgxMSwgMHgwZCwgMHg1MiwgMHgxMSwgMHgwZCwgMHg1MywgMHgxMSwgMHgwZCwKLTB4NTQsIDB4MTEsIDB4NGUsIDB4NTUsIDB4MTEsIDB4N2UsIDB4NzAsIDB4MTEsIDB4YTksIDB4NzEsIDB4MTEsIDB4ZDcsIDB4NzIsIDB4MTIsIDB4MWQsIDB4NzMsCi0weDEyLCAweDNlLCAweDgwLCAweDAwLCAweDAwLCAweDEyLCAweDY2LCAweDIwLCAweDAyLCAweDAzLCAweDMwLCAweDAzLCAweDFkLCAweDdkLCAweDAyLCAweGFmLAotMHg1NiwgMHgxMiwgMHgwYiwgMHg5MSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwKLTB4NTYsIDB4ZjQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTIsIDB4NjYsIDB4MDIsIDB4MTIsIDB4NWYsIDB4ODUsIDB4NTYsIDB4NDEsIDB4ZDIsIDB4MDIsIDB4MjIsCi0weDkwLCAweDcwLCAweDEwLCAweGUwLCAweDU0LCAweDdmLCAweDY0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDEyLCAweDY2LCAweDkwLCAweDcwLCAweDExLAotMHhlMCwgMHg2NCwgMHgwOCwgMHg2MCwgMHgwOCwgMHhlMCwgMHg2NCwgMHgyMCwgMHg2MCwgMHgwMywgMHgwMiwgMHgxMiwgMHg2NiwgMHg3NSwgMHg0ZSwgMHgwMywKLTB4NzUsIDB4NGYsIDB4MjAsIDB4MjIsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NDcsIDB4MjIsIDB4OTAsIDB4MDQsIDB4MDQsCi0weGUwLCAweDI1LCAweGUwLCAweDI0LCAweDVkLCAweGY1LCAweDU3LCAweDkwLCAweDcwLCAweDEwLCAweGUwLCAweGZmLCAweDc0LCAweDQ3LCAweDI1LCAweDU3LAotMHhmOCwgMHhjNiwgMHhlZiwgMHhjNiwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHhmZiwgMHg3NCwgMHg0OCwgMHgyNSwgMHg1NywgMHhmOCwgMHhjNiwgMHhlZiwKLTB4YzYsIDB4ZTQsIDB4ZmQsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsIDB4OTEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsCi0weDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDcwLCAweDAzLCAweDAyLCAweDEyLCAweDY2LCAweDAyLCAweDEyLCAweDVmLCAweGU1LCAweDQ3LAotMHg2NCwgMHgwNywgMHg2MCwgMHgwYiwgMHhlNSwgMHg0NywgMHg2NCwgMHgwOCwgMHg2MCwgMHgwNSwgMHhlNSwgMHg0NywgMHhiNCwgMHgwOSwgMHgwOCwgMHg5MCwKLTB4NzAsIDB4MTEsIDB4ZTAsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4M2EsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDksIDB4MDgsIDB4ZTUsIDB4M2EsIDB4YjQsIDB4MDMsCi0weDAzLCAweGU0LCAweGY1LCAweDQ2LCAweGU0LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweDkxLCAweGQyLCAweDA0LCAweDIyLCAweDkwLCAweDcwLAotMHgxMCwgMHhlMCwgMHhmZSwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHhmZCwgMHhlZCwgMHhmOCwgMHhlNiwgMHhmNSwgMHg1NywgMHhmZCwgMHhhZiwgMHg1NiwKLTB4MTIsIDB4MGIsIDB4OTEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsCi0weGY0LCAweDcwLCAweDAzLCAweDAyLCAweDEyLCAweDY2LCAweDAyLCAweDEyLCAweDVmLCAweDkwLCAweDcwLCAweDEwLCAweGUwLCAweGZlLCAweDkwLCAweDcwLAotMHgxMSwgMHhlMCwgMHhmZCwgMHhlZCwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHhmNSwgMHg1NywgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwKLTB4OTEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NzAsCi0weDAzLCAweDAyLCAweDEyLCAweDY2LCAweDAyLCAweDEyLCAweDVmLCAweDkwLCAweDEwLCAweDAyLCAweGUwLCAweGI0LCAweDcwLCAweDFlLCAweGEzLCAweGUwLAotMHhiNCwgMHgzMCwgMHgxOSwgMHg5MCwgMHgwNSwgMHgwOCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHhmZCwgMHg5MCwgMHgwNSwgMHgwNSwgMHhlMCwgMHg1NCwKLTB4ZmIsIDB4ZjAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4ZWQsIDB4NTQsIDB4ZmUsIDB4OTAsIDB4MDUsIDB4MDgsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4NGUsIDB4ZjUsCi0weDRmLCAweDc1LCAweDNhLCAweGZmLCAweGFkLCAweDU3LCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweDkxLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLAotMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg2MCwgMHg0YiwgMHg4MCwgMHg0MiwgMHg5MCwgMHg3MCwgMHgxMCwKLTB4ZTAsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4OTMsIDB4ZTQsIDB4ZmQsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsIDB4OTEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsCi0weDgwLCAweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDYwLCAweDJhLCAweDgwLCAweDIxLCAweDkwLCAweDcwLAotMHgxMCwgMHhlMCwgMHgyNCwgMHhmZiwgMHg5MiwgMHg0YSwgMHhkMiwgMHgwNSwgMHhhZCwgMHg1NywgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHg5MSwgMHg5MCwKLTB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NjAsIDB4MDcsIDB4OTAsCi0weDcwLCAweDI1LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDIyLCAweDIyLCAweGU1LCAweDUzLCAweDcwLCAweDFhLCAweDMwLCAweDYwLCAweDA5LCAweGIyLAotMHg0ZCwgMHgzMCwgMHg0ZCwgMHgwNCwgMHgwNSwgMHg0NiwgMHhjMiwgMHgwNCwgMHhlNSwgMHg0ZiwgMHg0NSwgMHg0ZSwgMHg2MCwgMHgwOCwgMHhlNSwgMHg0ZiwKLTB4MTUsIDB4NGYsIDB4NzAsIDB4MDIsIDB4MTUsIDB4NGUsIDB4MjIsIDB4MjIsIDB4YzIsIDB4NDIsIDB4ZDMsIDB4MjIsIDB4MjIsIDB4YzIsIDB4NGIsIDB4YzIsCi0weDRjLCAweGU1LCAweDQ0LCAweDEyLCAweDBhLCAweDlkLCAweDEyLCAweGFmLCAweDAwLCAweDEzLCAweDQyLCAweDA0LCAweDEzLCAweDNlLCAweDA4LCAweDEzLAotMHgxOSwgMHgxMCwgMHgxMiwgMHhjMywgMHgyMCwgMHgxMiwgMHhlMywgMHg2MCwgMHgxMiwgMHhmNCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0NCwgMHg4NSwKLTB4NDgsIDB4NDMsIDB4ODUsIDB4NGEsIDB4NDIsIDB4ODUsIDB4NGMsIDB4NWUsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MTMsCi0weDQ0LCAweDgwLCAweDFiLCAweGU1LCAweDQ4LCAweGM0LCAweDU0LCAweDBmLCAweGY1LCAweDQzLCAweGU1LCAweDRhLCAweGM0LCAweDU0LCAweDBmLCAweGY1LAotMHg0MiwgMHhlNSwgMHg0YywgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg1ZSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNiwgMHg3MCwgMHg2NiwgMHg1MywgMHg0MywKLTB4MGYsIDB4ODAsIDB4NjEsIDB4ODUsIDB4NDksIDB4NDMsIDB4ODUsIDB4NGIsIDB4NDIsIDB4ODUsIDB4NGQsIDB4NWUsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsCi0weDcwLCAweDUyLCAweDgwLCAweDFiLCAweGU1LCAweDQ5LCAweGM0LCAweDU0LCAweDBmLCAweGY1LCAweDQzLCAweGU1LCAweDRiLCAweGM0LCAweDU0LCAweDBmLAotMHhmNSwgMHg0MiwgMHhlNSwgMHg0ZCwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg1ZSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNiwgMHg3MCwgMHgzNSwgMHhlNSwKLTB4NDMsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MTAsIDB4ZjUsIDB4NDMsIDB4ODAsIDB4MmIsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDQsIDB4MDYsIDB4NTMsIDB4NWUsCi0weGZiLCAweDc1LCAweDQyLCAweDA5LCAweGU1LCAweDQ3LCAweGI0LCAweDA1LCAweDA2LCAweDQzLCAweDVlLCAweDA0LCAweDc1LCAweDQyLCAweDA5LCAweGU1LAotMHg0NywgMHhiNCwgMHgwNiwgMHgxMCwgMHhlNSwgMHg0MywgMHg1NCwgMHgwZiwgMHg0NCwgMHgzMCwgMHhmNSwgMHg0MywgMHg4MCwgMHgwNiwgMHhkMiwgMHg0YiwKLTB4ODAsIDB4MDIsIDB4ZDIsIDB4NGMsIDB4ZTQsIDB4ZjUsIDB4MjUsIDB4ZTUsIDB4NDIsIDB4YzQsIDB4NTQsIDB4ZjAsIDB4ZmYsIDB4ZTUsIDB4NDMsIDB4NTQsCi0weDBmLCAweDRmLCAweGY1LCAweDVmLCAweDkwLCAweDcwLCAweDQ0LCAweGYwLCAweGEzLCAweGU1LCAweDVlLCAweGYwLCAweGEzLCAweGU1LCAweDRhLCAweGYwLAotMHhhMywgMHhlNSwgMHg0OCwgMHhmMCwgMHhhMywgMHhlNSwgMHg0YywgMHhmMCwgMHhhMywgMHhlNSwgMHg0NCwgMHhmMCwgMHhhMywgMHhlNSwgMHg0MiwgMHhmMCwKLTB4YTMsIDB4ZTUsIDB4NDMsIDB4ZjAsIDB4ZDIsIDB4NjAsIDB4MjIsIDB4ZTUsIDB4NDcsIDB4NjAsIDB4MTAsIDB4MjQsIDB4YzAsIDB4NzAsIDB4MDMsIDB4MTIsCi0weDE2LCAweDI5LCAweDEyLCAweDEzLCAweDhjLCAweGMyLCAweGFmLCAweGMyLCAweDA0LCAweGQyLCAweGFmLCAweDIyLCAweGMyLCAweGFmLCAweDkwLCAweDA0LAotMHgxNCwgMHhlMCwgMHg1NCwgMHgwZSwgMHg2MCwgMHgwNCwgMHhkMiwgMHgxOCwgMHg4MCwgMHgwOCwgMHhlNSwgMHg0ZSwgMHg0NSwgMHg0ZiwgMHgyNCwgMHhmZiwKLTB4OTIsIDB4MTgsIDB4ZDIsIDB4YWYsIDB4OTAsIDB4MDQsIDB4MTQsIDB4ZTAsIDB4YTIsIDB4ZTQsIDB4OTIsIDB4MTksIDB4NzQsIDB4MWUsIDB4ZjAsIDB4ZTUsCi0weDVmLCAweDU0LCAweDBmLCAweGY1LCAweDJkLCAweGU1LCAweDI1LCAweDcwLCAweDEzLCAweDMwLCAweDE4LCAweDA1LCAweGU1LCAweDVmLCAweDIwLCAweGU1LAotMHgwYiwgMHgzMCwgMHgxOSwgMHgxOSwgMHhlNSwgMHg1ZiwgMHg1NCwgMHgzMCwgMHhmZiwgMHhiZiwgMHgzMCwgMHgxMSwgMHhlNSwgMHgyNSwgMHg3MCwgMHgwNSwKLTB4NzUsIDB4MjUsIDB4MGMsIDB4ODAsIDB4MDIsIDB4MTUsIDB4MjUsIDB4ZDIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4ODAsIDB4MGYsIDB4ZTUsIDB4NWYsIDB4MzAsCi0weGU2LCAweDA2LCAweGMyLCAweDZjLCAweGQyLCAweDZkLCAweDgwLCAweDA0LCAweGQyLCAweDZjLCAweGMyLCAweDZkLCAweGU1LCAweDQ3LCAweDY0LCAweDAzLAotMHg3MCwgMHgyMSwgMHgzMCwgMHg0YiwgMHgwNiwgMHhjMiwgMHg2YywgMHhkMiwgMHg2ZCwgMHg4MCwgMHgxOCwgMHhlNSwgMHgyNSwgMHg3MCwgMHgwMywgMHgzMCwKLTB4NGMsIDB4MTEsIDB4YzIsIDB4NGMsIDB4ZTUsIDB4MjUsIDB4NzAsIDB4MDUsIDB4NzUsIDB4MjUsIDB4MDcsIDB4ODAsIDB4MDIsIDB4MTUsIDB4MjUsIDB4ZDIsCi0weDZjLCAweGQyLCAweDZkLCAweGU1LCAweDQ3LCAweGI0LCAweDA5LCAweDE0LCAweGU1LCAweDQ0LCAweDIwLCAweGUzLCAweDBiLCAweGU1LCAweDNhLCAweDY0LAotMHgwMiwgMHg2MCwgMHgwNSwgMHhlNSwgMHgzYSwgMHhiNCwgMHgwMywgMHgwNCwgMHhjMiwgMHg2YywgMHhkMiwgMHg2ZCwgMHg5MCwgMHg3MCwgMHg0NiwgMHhlNSwKLTB4MmQsIDB4ZjAsIDB4MjAsIDB4NjksIDB4MDcsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTAsIDB4MDIsIDB4YjIsIDB4NjgsIDB4MjAsIDB4NmIsIDB4MDcsIDB4ZTUsCi0weDVlLCAweDIwLCAweGUxLCAweDAyLCAweGIyLCAweDZhLCAweDIwLCAweDZkLCAweDA3LCAweGU1LCAweDVlLCAweDIwLCAweGUyLCAweDAyLCAweGIyLCAweDZjLAotMHg5MCwgMHg3MCwgMHg0NywgMHhlNSwgMHgyZCwgMHhmMCwgMHg3NSwgMHgyZSwgMHg0MCwgMHgyMCwgMHg2OSwgMHgwNCwgMHhhMiwgMHg2OCwgMHg4MCwgMHgyNiwKLTB4MzAsIDB4NjgsIDB4MDYsIDB4ZTUsIDB4NDYsIDB4YTIsIDB4ZTIsIDB4ODAsIDB4MWQsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTIsIDB4MDQsIDB4N2YsIDB4MDEsCi0weDgwLCAweDAyLCAweDdmLCAweDAwLCAweGU1LCAweDQ2LCAweDU0LCAweGYwLCAweGZlLCAweGJlLCAweGYwLCAweDA0LCAweDdlLCAweDAxLCAweDgwLCAweDAyLAotMHg3ZSwgMHgwMCwgMHhlZSwgMHg2ZiwgMHgyNCwgMHhmZiwgMHg5MiwgMHg3MywgMHg5MiwgMHg3MiwgMHgyMCwgMHg2YiwgMHgwNCwgMHhhMiwgMHg2YSwgMHg4MCwKLTB4MjYsIDB4MzAsIDB4NmEsIDB4MDYsIDB4ZTUsIDB4NDYsIDB4YTIsIDB4ZTIsIDB4ODAsIDB4MWQsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTAsIDB4MDQsIDB4N2YsCi0weDAxLCAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweGU1LCAweDQ2LCAweDU0LCAweGYwLCAweGZlLCAweGJlLCAweGYwLCAweDA0LCAweDdlLCAweDAxLCAweDgwLAotMHgwMiwgMHg3ZSwgMHgwMCwgMHhlZSwgMHg2ZiwgMHgyNCwgMHhmZiwgMHg5MiwgMHg3NSwgMHg5MiwgMHg3NCwgMHgyMCwgMHg2ZCwgMHgwNCwgMHhhMiwgMHg2YywKLTB4ODAsIDB4MjYsIDB4MzAsIDB4NmMsIDB4MDYsIDB4ZTUsIDB4NDYsIDB4YTIsIDB4ZTIsIDB4ODAsIDB4MWQsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTEsIDB4MDQsCi0weDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweGU1LCAweDQ2LCAweDU0LCAweGYwLCAweGZlLCAweGJlLCAweGYwLCAweDA0LCAweDdlLCAweDAxLAotMHg4MCwgMHgwMiwgMHg3ZSwgMHgwMCwgMHhlZSwgMHg2ZiwgMHgyNCwgMHhmZiwgMHg5MiwgMHg3MSwgMHg5MiwgMHg3MCwgMHg5MCwgMHgxMCwgMHgwMCwgMHhlMCwKLTB4OTAsIDB4MTAsIDB4MmYsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MDMsIDB4ZTAsIDB4YzMsIDB4OTQsIDB4MzAsIDB4NDAsIDB4MTQsIDB4YTIsIDB4NzEsIDB4OTIsCi0weDc3LCAweGEyLCAweDcwLCAweDkyLCAweDc2LCAweGU1LCAweDJlLCAweDEzLCAweDEzLCAweDU0LCAweDNmLCAweGY1LCAweDJlLCAweGMyLCAweDc3LCAweGQyLAotMHg3NiwgMHg5MCwgMHgxMCwgMHgyZiwgMHhlNSwgMHgyZSwgMHhmMCwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNiwgMHg3MCwgMHg0YywgMHg5MCwgMHgwMiwgMHgyOSwKLTB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4ZTUsIDB4NDMsIDB4YzQsIDB4NTQsIDB4MGYsIDB4MTQsIDB4NjAsIDB4MTQsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MjMsCi0weDI0LCAweDAzLCAweDYwLCAweDAzLCAweDAyLCAweDE2LCAweDE4LCAweDkwLCAweDAyLCAweDI4LCAweGUwLCAweDMwLCAweDQ3LCAweDBmLCAweDgwLCAweDA3LAotMHg5MCwgMHgwMiwgMHgyOCwgMHhlMCwgMHgyMCwgMHg0NywgMHgwNiwgMHg1NCwgMHhmZSwgMHhmMCwgMHgwMiwgMHgxNiwgMHgxOCwgMHg0NCwgMHgwMSwgMHhmMCwKLTB4MDIsIDB4MTYsIDB4MTgsIDB4ZTUsIDB4NDYsIDB4MzAsIDB4ZTIsIDB4MDQsIDB4N2YsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4OTAsIDB4MDIsCi0weDI4LCAweGUwLCAweDU0LCAweGZlLCAweDRmLCAweGYwLCAweDAyLCAweDE2LCAweDE4LCAweGU1LCAweDQ3LCAweDY0LCAweDA3LCAweDYwLCAweDBmLCAweGU1LAotMHg0NywgMHg2NCwgMHgwOCwgMHg2MCwgMHgwOSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwOSwgMHg2MCwgMHgwMywgMHgwMiwgMHgxNiwgMHgxOCwgMHhlNCwgMHhmNSwKLTB4MjcsIDB4OTAsIDB4MDIsIDB4MjksIDB4ZTAsIDB4NTQsIDB4ZmMsIDB4ZjAsIDB4ZTUsIDB4M2EsIDB4MTQsIDB4NjAsIDB4MmQsIDB4MTQsIDB4NjAsIDB4MmUsCi0weDE0LCAweDYwLCAweDM2LCAweDI0LCAweGZjLCAweDYwLCAweDVmLCAweDI0LCAweGY5LCAweDYwLCAweDFmLCAweDI0LCAweDBlLCAweDcwLCAweDY5LCAweGU1LAotMHg0NiwgMHgxMywgMHgxMywgMHg1NCwgMHgzZiwgMHg3NSwgMHhmMCwgMHgwMywgMHg4NCwgMHhhZiwgMHhmMCwgMHgyMCwgMHg0NywgMHgwNCwgMHg3ZSwgMHgwMSwKLTB4ODAsIDB4MDIsIDB4N2UsIDB4MDAsIDB4ZWYsIDB4NmUsIDB4MjQsIDB4ZmYsIDB4ODAsIDB4NDUsIDB4YTIsIDB4NDcsIDB4ODAsIDB4NDEsIDB4ZTUsIDB4NDYsCi0weDMwLCAweGUyLCAweDAzLCAweGQzLCAweDgwLCAweDI3LCAweGMzLCAweDgwLCAweDI0LCAweGU1LCAweDQ2LCAweDMwLCAweGUyLCAweDBkLCAweDU0LCAweDM4LAotMHhjMywgMHg5NCwgMHgzMCwgMHg1MCwgMHgwNiwgMHg3ZSwgMHgwMCwgMHg3ZiwgMHgwMSwgMHg4MCwgMHgwNCwgMHg3ZSwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgyMCwKLTB4NDcsIDB4MDQsIDB4N2QsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2QsIDB4MDAsIDB4ZWYsIDB4NmQsIDB4NGUsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4MzgsIDB4YTIsCi0weDQ3LCAweGIzLCAweDkyLCAweDM5LCAweDgwLCAweDE5LCAweGU1LCAweDQ2LCAweDMwLCAweGUyLCAweDAzLCAweGQzLCAweDgwLCAweDAxLCAweGMzLCAweDkyLAotMHgzOSwgMHhhMiwgMHg0NywgMHhiMywgMHg5MiwgMHgzOCwgMHg4MCwgMHgwNywgMHhhMiwgMHg0NywgMHhiMywgMHg5MiwgMHgzOCwgMHg5MiwgMHgzOSwgMHg5MCwKLTB4MDIsIDB4MjgsIDB4ZTAsIDB4NTQsIDB4ZmMsIDB4NDUsIDB4MjcsIDB4ZjAsIDB4OTAsIDB4NzAsIDB4OWMsIDB4ZTUsIDB4M2EsIDB4ZjAsIDB4YTMsIDB4ZTUsCi0weDQ3LCAweGYwLCAweDkwLCAweDcwLCAweDQxLCAweGU1LCAweDNhLCAweGYwLCAweDIyLCAweGU0LCAweDkwLCAweDAyLCAweDI5LCAweGYwLCAweDMwLCAweDQ3LAotMHgwNCwgMHhhZiwgMHg0NSwgMHg4MCwgMHgwNCwgMHhlNSwgMHg0NSwgMHhmNCwgMHhmZiwgMHg5MCwgMHgwMiwgMHgyOCwgMHhlZiwgMHhmMCwgMHgyMiwgMHg4ZiwKLTB4NTAsIDB4ZDIsIDB4NTksIDB4MjIsIDB4OGYsIDB4NTQsIDB4ZDIsIDB4NTgsIDB4MjIsIDB4ZTQsIDB4ZjUsIDB4NjIsIDB4YzIsIDB4YWYsIDB4ZTUsIDB4NTEsCi0weDE0LCAweDYwLCAweDQ2LCAweDE0LCAweDYwLCAweDYyLCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDE3LCAweDAzLCAweGQyLCAweDU5LCAweDc1LAotMHg1NSwgMHgwMSwgMHg5MCwgMHgwMiwgMHhhMiwgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmMCwgMHhhMywgMHhlMCwgMHgyMCwgMHhlNywgMHgyMiwgMHg5MCwgMHgwNCwKLTB4MzQsIDB4ZTAsIDB4YjQsIDB4MDIsIDB4MWIsIDB4YTMsIDB4ZTAsIDB4YjQsIDB4MDIsIDB4MTYsIDB4YTMsIDB4ZTAsIDB4YjQsIDB4MDIsIDB4MTEsIDB4N2YsCi0weDIwLCAweDEyLCAweDE2LCAweDNmLCAweDkwLCAweDEwLCAweDA0LCAweGUwLCAweDU0LCAweGYzLCAweGYwLCAweDc1LCAweDUxLCAweDAxLCAweDgwLCAweDczLAotMHhlNSwgMHg1MCwgMHg3MCwgMHgwNSwgMHg3NSwgMHg2MiwgMHgwMywgMHg4MCwgMHg2YSwgMHg5MCwgMHgxMiwgMHgwMCwgMHhlMCwgMHg1NCwgMHgwMywgMHg3MCwKLTB4MTEsIDB4N2YsIDB4MjAsIDB4MTIsIDB4MTYsIDB4M2YsIDB4OTAsIDB4MDIsIDB4YTIsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4NzUsIDB4NTEsIDB4MDIsCi0weDgwLCAweDUxLCAweGU1LCAweDUwLCAweDcwLCAweDAyLCAweDgwLCAweDQ2LCAweDkwLCAweDAyLCAweGEzLCAweGUwLCAweDIwLCAweGU2LCAweDNiLCAweDkwLAotMHgwNCwgMHgzNywgMHhlMCwgMHg2NCwgMHgyMiwgMHg3MCwgMHgzMywgMHg5MCwgMHgwMSwgMHg4YSwgMHg3NCwgMHg3ZSwgMHhmMCwgMHg5MCwgMHgwMSwgMHg5NiwKLTB4ZjAsIDB4OTAsIDB4MTIsIDB4MDQsIDB4NzQsIDB4MGEsIDB4ZjAsIDB4OTAsIDB4MTMsIDB4MjgsIDB4ZTAsIDB4NTQsIDB4ZjAsIDB4ZjAsIDB4YTMsIDB4ZTAsCi0weDU0LCAweGYwLCAweGYwLCAweGEzLCAweGUwLCAweDU0LCAweGZhLCAweGYwLCAweDkwLCAweDA0LCAweDAxLCAweGUwLCAweDU0LCAweGY5LCAweGYwLCAweDc1LAotMHg2MiwgMHgwMSwgMHg3NSwgMHg1NSwgMHgwMiwgMHhlNCwgMHhmNSwgMHg1MSwgMHg4MCwgMHgwOSwgMHhlNSwgMHg1MCwgMHg3MCwgMHgwNSwgMHg3NSwgMHg2MiwKLTB4MDMsIDB4ZjUsIDB4NTEsIDB4ZTUsIDB4NjIsIDB4NjAsIDB4MTUsIDB4YzIsIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4NTEsIDB4YzIsIDB4NTksIDB4YWQsIDB4NjIsCi0weGFmLCAweDQwLCAweDEyLCAweDE3LCAweDhkLCAweGU1LCAweDYyLCAweGI0LCAweDAzLCAweDAyLCAweGQyLCAweDAzLCAweGQyLCAweGFmLCAweDIyLCAweGMyLAotMHhhZiwgMHgzMCwgMHgwMSwgMHgxMiwgMHhlNCwgMHg5MCwgMHgwMSwgMHg5NiwgMHhmMCwgMHhmNSwgMHg1MSwgMHhjMiwgMHg1OSwgMHhjMiwgMHgwMSwgMHg3ZCwKLTB4MDIsIDB4YWYsIDB4NDAsIDB4MTIsIDB4MTcsIDB4OGQsIDB4ZTUsIDB4NTIsIDB4MTQsIDB4NjAsIDB4MDksIDB4MDQsIDB4NzAsIDB4NGMsIDB4NzUsIDB4NTIsCi0weDAxLCAweDc1LCAweDU1LCAweDAzLCAweDkwLCAweDA0LCAweDAxLCAweGUwLCAweDQ0LCAweDBlLCAweGYwLCAweDkwLCAweDEzLCAweDI4LCAweGUwLCAweDQ0LAotMHgwZiwgMHhmMCwgMHhhMywgMHhlMCwgMHg0NCwgMHgwZiwgMHhmMCwgMHhhMywgMHhlMCwgMHg0NCwgMHgwNSwgMHhmMCwgMHg5MCwgMHgxMiwgMHgwNCwgMHg3NCwKLTB4MDMsIDB4ZjAsIDB4OTAsIDB4MDIsIDB4YTIsIDB4ZTAsIDB4NDQsIDB4YzAsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MDQsIDB4ZTAsIDB4NDQsIDB4MGMsIDB4ZjAsCi0weGU0LCAweGY1LCAweDUyLCAweGY1LCAweDU1LCAweDMwLCAweDAyLCAweDBiLCAweGMyLCAweDAyLCAweDdkLCAweDAxLCAweGFmLCAweDQxLCAweDEyLCAweDE3LAotMHg4ZCwgMHg4MCwgMHgwMiwgMHhjMiwgMHgwMywgMHhlNCwgMHg5MCwgMHgwMSwgMHg5NiwgMHhmMCwgMHhkMiwgMHhhZiwgMHgyMiwgMHhlZiwgMHhmNCwgMHg2MCwKLTB4MmQsIDB4ZTQsIDB4ZmUsIDB4NzQsIDB4MTQsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4NzAsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4YjQsIDB4ZmYsCi0weDE5LCAweDc0LCAweDE0LCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDcwLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDc0LCAweDFjLCAweDJlLAotMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3MCwgMHhmNSwgMHg4MywgMHhlZCwgMHhmMCwgMHgyMiwgMHgwZSwgMHhiZSwgMHgwNCwgMHhkNSwgMHgyMiwgMHgyMiwKLTB4MjIsIDB4OTAsIDB4NzAsIDB4MmEsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4NGQsIDB4YzIsIDB4YWYsIDB4OTAsIDB4NzAsIDB4MjgsIDB4ZTAsIDB4OTAsIDB4MTAsCi0weDFjLCAweGYwLCAweDkwLCAweDcwLCAweDI5LCAweGUwLCAweDkwLCAweDEwLCAweDFkLCAweGYwLCAweDkwLCAweDcwLCAweDJhLCAweGUwLCAweDkwLCAweDEwLAotMHgxZSwgMHhmMCwgMHg5MCwgMHgxMCwgMHgxYywgMHhlMCwgMHhmNSwgMHg2MiwgMHg5MCwgMHgxMCwgMHgxZSwgMHhlMCwgMHgyMCwgMHhlMSwgMHhmMywgMHg5MCwKLTB4MTAsIDB4MWMsIDB4ZTAsIDB4OTAsIDB4NzAsIDB4MjgsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MWQsIDB4ZTAsIDB4OTAsIDB4NzAsIDB4MjksIDB4ZjAsIDB4OTAsCi0weDEwLCAweDFlLCAweGUwLCAweDkwLCAweDcwLCAweDJhLCAweGYwLCAweDMwLCAweDRhLCAweDA3LCAweDkwLCAweDcwLCAweDI0LCAweGUwLCAweDQ0LCAweDAxLAotMHhmMCwgMHhjMiwgMHgwNSwgMHhkMiwgMHhhZiwgMHgyMiwgMHgyMiwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg5NCwgMHgzZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDIsIDB4MTAsIDB4MjgsIDB4MDIsIDB4MTAsIDB4MzIsIDB4MDIsIDB4MTAsIDB4NzgsIDB4MDIsIDB4MTIsIDB4NjcsIDB4MDIsCi0weDEyLCAweDY4LCAweDAyLCAweDEyLCAweDg3LCAweDAyLCAweDEyLCAweDhjLCAweDEyLCAweDEyLCAweDg4LCAweDIyLCAweDAyLCAweDE2LCAweDQ5LCAweDAyLAotMHgxNywgMHgxZiwgMHgwMiwgMHgxMywgMHg3NywgMHgwMiwgMHgxMiwgMHg4ZCwgMHgzMCwgMHgwNSwgMHgwNiwgMHgyMCwgMHgwZCwgMHgwMywgMHgxMiwgMHgxNywKLTB4YzEsIDB4MjIsIDB4OTAsIDB4MDEsIDB4OGMsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MWIsIDB4ZTUsIDB4NGMsIDB4MzAsIDB4ZTAsIDB4MDQsIDB4N2YsIDB4NDAsCi0weDgwLCAweDAyLCAweDdmLCAweDAwLCAweDkwLCAweDEwLCAweDJmLCAweGVmLCAweGYwLCAweDkwLCAweDAxLCAweDhjLCAweDc0LCAweDA4LCAweGYwLCAweGU0LAotMHg5MCwgMHgwMSwgMHhhNywgMHhmMCwgMHg5MCwgMHgwMSwgMHg4YywgMHhlMCwgMHgzMCwgMHhlMCwgMHgxYywgMHg5MCwgMHgwMSwgMHg4MCwgMHhlMCwgMHhiNCwKLTB4MDIsIDB4MTUsIDB4YTMsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MTAsIDB4OTAsIDB4MDEsIDB4ODQsIDB4ZTAsIDB4YjQsIDB4ODEsIDB4MDksIDB4OTAsIDB4MDEsCi0weDhjLCAweDc0LCAweDAxLCAweGYwLCAweDEyLCAweDBkLCAweGRkLCAweDIyLCAweDkwLCAweDA0LCAweDE0LCAweGUwLCAweDIwLCAweGU3LCAweDAzLCAweDAyLAotMHgxMiwgMHg2NiwgMHg5MCwgMHg3MCwgMHgxMiwgMHhlMCwgMHhmNSwgMHg1NiwgMHg5MCwgMHgwNCwgMHgwNCwgMHhlMCwgMHgxMiwgMHgwYSwgMHhiNiwgMHgxMCwKLTB4YjcsIDB4MzEsIDB4MTAsIDB4ZTAsIDB4NTAsIDB4MTEsIDB4MDQsIDB4NTEsIDB4MTEsIDB4MGQsIDB4NTIsIDB4MTEsIDB4MGQsIDB4NTMsIDB4MTEsIDB4MGQsCi0weDU0LCAweDExLCAweDRlLCAweDU1LCAweDExLCAweDdlLCAweDcwLCAweDExLCAweGE5LCAweDcxLCAweDExLCAweGQ3LCAweDcyLCAweDEyLCAweDFkLCAweDczLAotMHgxMiwgMHgzZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg2NiwgMHgyMCwgMHgwMiwgMHgwMywgMHgzMCwgMHgwMywgMHgxZCwgMHg3ZCwgMHgwMiwgMHhhZiwKLTB4NTYsIDB4MTIsIDB4MGIsIDB4YWEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsCi0weDU2LCAweGY0LCAweDcwLCAweDAzLCAweDAyLCAweDEyLCAweDY2LCAweDAyLCAweDEyLCAweDVmLCAweDg1LCAweDU2LCAweDQxLCAweGQyLCAweDAyLCAweDIyLAotMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHg1NCwgMHg3ZiwgMHg2NCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgxMiwgMHg2NiwgMHg5MCwgMHg3MCwgMHgxMSwKLTB4ZTAsIDB4NjQsIDB4MDgsIDB4NjAsIDB4MDgsIDB4ZTAsIDB4NjQsIDB4MjAsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MTIsIDB4NjYsIDB4NzUsIDB4NGUsIDB4MDMsCi0weDc1LCAweDRmLCAweDIwLCAweDIyLCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweDI0LCAweGZmLCAweDkyLCAweDQ3LCAweDIyLCAweDkwLCAweDA0LCAweDA0LAotMHhlMCwgMHgyNSwgMHhlMCwgMHgyNCwgMHg1ZCwgMHhmNSwgMHg1NywgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHhmZiwgMHg3NCwgMHg0NywgMHgyNSwgMHg1NywKLTB4ZjgsIDB4YzYsIDB4ZWYsIDB4YzYsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4ZmYsIDB4NzQsIDB4NDgsIDB4MjUsIDB4NTcsIDB4ZjgsIDB4YzYsIDB4ZWYsCi0weGM2LCAweGU0LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweGFhLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLAotMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg3MCwgMHgwMywgMHgwMiwgMHgxMiwgMHg2NiwgMHgwMiwgMHgxMiwgMHg1ZiwgMHhlNSwgMHg0NywKLTB4NjQsIDB4MDcsIDB4NjAsIDB4MGIsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDgsIDB4NjAsIDB4MDUsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDksIDB4MDgsIDB4OTAsCi0weDcwLCAweDExLCAweGUwLCAweDU0LCAweDBmLCAweGY1LCAweDNhLCAweGU1LCAweDQ3LCAweGI0LCAweDA5LCAweDA4LCAweGU1LCAweDNhLCAweGI0LCAweDAzLAotMHgwMywgMHhlNCwgMHhmNSwgMHg0NiwgMHhlNCwgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHhhYSwgMHhkMiwgMHgwNCwgMHgyMiwgMHg5MCwgMHg3MCwKLTB4MTAsIDB4ZTAsIDB4ZmUsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4ZmQsIDB4ZWQsIDB4ZjgsIDB4ZTYsIDB4ZjUsIDB4NTcsIDB4ZmQsIDB4YWYsIDB4NTYsCi0weDEyLCAweDBiLCAweGFhLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LAotMHhmNCwgMHg3MCwgMHgwMywgMHgwMiwgMHgxMiwgMHg2NiwgMHgwMiwgMHgxMiwgMHg1ZiwgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHhmZSwgMHg5MCwgMHg3MCwKLTB4MTEsIDB4ZTAsIDB4ZmQsIDB4ZWQsIDB4ZjUsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4NTcsIDB4ZmQsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsCi0weGFhLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDcwLAotMHgwMywgMHgwMiwgMHgxMiwgMHg2NiwgMHgwMiwgMHgxMiwgMHg1ZiwgMHg5MCwgMHgxMCwgMHgwMiwgMHhlMCwgMHhiNCwgMHg3MCwgMHgxZSwgMHhhMywgMHhlMCwKLTB4YjQsIDB4MzAsIDB4MTksIDB4OTAsIDB4MDUsIDB4MDgsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ZmQsIDB4OTAsIDB4MDUsIDB4MDUsIDB4ZTAsIDB4NTQsCi0weGZiLCAweGYwLCAweDQ0LCAweDA0LCAweGYwLCAweGVkLCAweDU0LCAweGZlLCAweDkwLCAweDA1LCAweDA4LCAweGYwLCAweGU0LCAweGY1LCAweDRlLCAweGY1LAotMHg0ZiwgMHg3NSwgMHgzYSwgMHhmZiwgMHhhZCwgMHg1NywgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHhhYSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwKLTB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NjAsIDB4NGIsIDB4ODAsIDB4NDIsIDB4OTAsIDB4NzAsIDB4MTAsCi0weGUwLCAweDI0LCAweGZmLCAweDkyLCAweDkzLCAweGU0LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweGFhLCAweDkwLCAweDA0LCAweDE0LCAweDc0LAotMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg2MCwgMHgyYSwgMHg4MCwgMHgyMSwgMHg5MCwgMHg3MCwKLTB4MTAsIDB4ZTAsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NGEsIDB4ZDIsIDB4MDUsIDB4YWQsIDB4NTcsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsIDB4YWEsIDB4OTAsCi0weDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDYwLCAweDA3LCAweDkwLAotMHg3MCwgMHgyNSwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgyMiwgMHgyMiwgMHhlNSwgMHg1MywgMHg3MCwgMHgxYSwgMHgzMCwgMHg2MCwgMHgwOSwgMHhiMiwKLTB4NGQsIDB4MzAsIDB4NGQsIDB4MDQsIDB4MDUsIDB4NDYsIDB4YzIsIDB4MDQsIDB4ZTUsIDB4NGYsIDB4NDUsIDB4NGUsIDB4NjAsIDB4MDgsIDB4ZTUsIDB4NGYsCi0weDE1LCAweDRmLCAweDcwLCAweDAyLCAweDE1LCAweDRlLCAweDIyLCAweDIyLCAweGMyLCAweDQyLCAweGQzLCAweDIyLCAweDIyLCAweGMyLCAweDRiLCAweGMyLAotMHg0YywgMHhlNSwgMHg0NCwgMHgxMiwgMHgwYSwgMHhiNiwgMHgxMiwgMHhhZiwgMHgwMCwgMHgxMywgMHg0MiwgMHgwNCwgMHgxMywgMHgzZSwgMHgwOCwgMHgxMywKLTB4MTksIDB4MTAsIDB4MTIsIDB4YzMsIDB4MjAsIDB4MTIsIDB4ZTMsIDB4NjAsIDB4MTIsIDB4ZjQsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4NDQsIDB4ODUsCi0weDQ4LCAweDQzLCAweDg1LCAweDRhLCAweDQyLCAweDg1LCAweDRjLCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDYwLCAweDAzLCAweDAyLCAweDEzLAotMHg0NCwgMHg4MCwgMHgxYiwgMHhlNSwgMHg0OCwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg0MywgMHhlNSwgMHg0YSwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwKLTB4NDIsIDB4ZTUsIDB4NGMsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NWUsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsIDB4NzAsIDB4NjYsIDB4NTMsIDB4NDMsCi0weDBmLCAweDgwLCAweDYxLCAweDg1LCAweDQ5LCAweDQzLCAweDg1LCAweDRiLCAweDQyLCAweDg1LCAweDRkLCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LAotMHg3MCwgMHg1MiwgMHg4MCwgMHgxYiwgMHhlNSwgMHg0OSwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg0MywgMHhlNSwgMHg0YiwgMHhjNCwgMHg1NCwgMHgwZiwKLTB4ZjUsIDB4NDIsIDB4ZTUsIDB4NGQsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NWUsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsIDB4NzAsIDB4MzUsIDB4ZTUsCi0weDQzLCAweDU0LCAweDBmLCAweDQ0LCAweDEwLCAweGY1LCAweDQzLCAweDgwLCAweDJiLCAweGU1LCAweDQ3LCAweGI0LCAweDA0LCAweDA2LCAweDUzLCAweDVlLAotMHhmYiwgMHg3NSwgMHg0MiwgMHgwOSwgMHhlNSwgMHg0NywgMHhiNCwgMHgwNSwgMHgwNiwgMHg0MywgMHg1ZSwgMHgwNCwgMHg3NSwgMHg0MiwgMHgwOSwgMHhlNSwKLTB4NDcsIDB4YjQsIDB4MDYsIDB4MTAsIDB4ZTUsIDB4NDMsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MzAsIDB4ZjUsIDB4NDMsIDB4ODAsIDB4MDYsIDB4ZDIsIDB4NGIsCi0weDgwLCAweDAyLCAweGQyLCAweDRjLCAweGU0LCAweGY1LCAweDI1LCAweGU1LCAweDQyLCAweGM0LCAweDU0LCAweGYwLCAweGZmLCAweGU1LCAweDQzLCAweDU0LAotMHgwZiwgMHg0ZiwgMHhmNSwgMHg1ZiwgMHg5MCwgMHg3MCwgMHg0NCwgMHhmMCwgMHhhMywgMHhlNSwgMHg1ZSwgMHhmMCwgMHhhMywgMHhlNSwgMHg0YSwgMHhmMCwKLTB4YTMsIDB4ZTUsIDB4NDgsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4NGMsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4NDQsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4NDIsIDB4ZjAsCi0weGEzLCAweGU1LCAweDQzLCAweGYwLCAweGQyLCAweDYwLCAweDIyLCAweGU1LCAweDQ3LCAweDYwLCAweDEwLCAweDI0LCAweGMwLCAweDcwLCAweDAzLCAweDEyLAotMHgxNiwgMHgyOSwgMHgxMiwgMHgxMywgMHg4YywgMHhjMiwgMHhhZiwgMHhjMiwgMHgwNCwgMHhkMiwgMHhhZiwgMHgyMiwgMHhjMiwgMHhhZiwgMHg5MCwgMHgwNCwKLTB4MTQsIDB4ZTAsIDB4NTQsIDB4MGUsIDB4NjAsIDB4MDQsIDB4ZDIsIDB4MTgsIDB4ODAsIDB4MDgsIDB4ZTUsIDB4NGUsIDB4NDUsIDB4NGYsIDB4MjQsIDB4ZmYsCi0weDkyLCAweDE4LCAweGQyLCAweGFmLCAweDkwLCAweDA0LCAweDE0LCAweGUwLCAweGEyLCAweGU0LCAweDkyLCAweDE5LCAweDc0LCAweDFlLCAweGYwLCAweGU1LAotMHg1ZiwgMHg1NCwgMHgwZiwgMHhmNSwgMHgyZCwgMHhlNSwgMHgyNSwgMHg3MCwgMHgxMywgMHgzMCwgMHgxOCwgMHgwNSwgMHhlNSwgMHg1ZiwgMHgyMCwgMHhlNSwKLTB4MGIsIDB4MzAsIDB4MTksIDB4MTksIDB4ZTUsIDB4NWYsIDB4NTQsIDB4MzAsIDB4ZmYsIDB4YmYsIDB4MzAsIDB4MTEsIDB4ZTUsIDB4MjUsIDB4NzAsIDB4MDUsCi0weDc1LCAweDI1LCAweDBjLCAweDgwLCAweDAyLCAweDE1LCAweDI1LCAweGQyLCAweDZjLCAweGQyLCAweDZkLCAweDgwLCAweDBmLCAweGU1LCAweDVmLCAweDMwLAotMHhlNiwgMHgwNiwgMHhjMiwgMHg2YywgMHhkMiwgMHg2ZCwgMHg4MCwgMHgwNCwgMHhkMiwgMHg2YywgMHhjMiwgMHg2ZCwgMHhlNSwgMHg0NywgMHg2NCwgMHgwMywKLTB4NzAsIDB4MjEsIDB4MzAsIDB4NGIsIDB4MDYsIDB4YzIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4ODAsIDB4MTgsIDB4ZTUsIDB4MjUsIDB4NzAsIDB4MDMsIDB4MzAsCi0weDRjLCAweDExLCAweGMyLCAweDRjLCAweGU1LCAweDI1LCAweDcwLCAweDA1LCAweDc1LCAweDI1LCAweDA3LCAweDgwLCAweDAyLCAweDE1LCAweDI1LCAweGQyLAotMHg2YywgMHhkMiwgMHg2ZCwgMHhlNSwgMHg0NywgMHhiNCwgMHgwOSwgMHgxNCwgMHhlNSwgMHg0NCwgMHgyMCwgMHhlMywgMHgwYiwgMHhlNSwgMHgzYSwgMHg2NCwKLTB4MDIsIDB4NjAsIDB4MDUsIDB4ZTUsIDB4M2EsIDB4YjQsIDB4MDMsIDB4MDQsIDB4YzIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4OTAsIDB4NzAsIDB4NDYsIDB4ZTUsCi0weDJkLCAweGYwLCAweDIwLCAweDY5LCAweDA3LCAweGU1LCAweDVlLCAweDIwLCAweGUwLCAweDAyLCAweGIyLCAweDY4LCAweDIwLCAweDZiLCAweDA3LCAweGU1LAotMHg1ZSwgMHgyMCwgMHhlMSwgMHgwMiwgMHhiMiwgMHg2YSwgMHgyMCwgMHg2ZCwgMHgwNywgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMiwgMHgwMiwgMHhiMiwgMHg2YywKLTB4OTAsIDB4NzAsIDB4NDcsIDB4ZTUsIDB4MmQsIDB4ZjAsIDB4NzUsIDB4MmUsIDB4NDAsIDB4MjAsIDB4NjksIDB4MDQsIDB4YTIsIDB4NjgsIDB4ODAsIDB4MjYsCi0weDMwLCAweDY4LCAweDA2LCAweGU1LCAweDQ2LCAweGEyLCAweGUyLCAweDgwLCAweDFkLCAweGU1LCAweDVlLCAweDIwLCAweGUyLCAweDA0LCAweDdmLCAweDAxLAotMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHhlNSwgMHg0NiwgMHg1NCwgMHhmMCwgMHhmZSwgMHhiZSwgMHhmMCwgMHgwNCwgMHg3ZSwgMHgwMSwgMHg4MCwgMHgwMiwKLTB4N2UsIDB4MDAsIDB4ZWUsIDB4NmYsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NzMsIDB4OTIsIDB4NzIsIDB4MjAsIDB4NmIsIDB4MDQsIDB4YTIsIDB4NmEsIDB4ODAsCi0weDI2LCAweDMwLCAweDZhLCAweDA2LCAweGU1LCAweDQ2LCAweGEyLCAweGUyLCAweDgwLCAweDFkLCAweGU1LCAweDVlLCAweDIwLCAweGUwLCAweDA0LCAweDdmLAotMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHhlNSwgMHg0NiwgMHg1NCwgMHhmMCwgMHhmZSwgMHhiZSwgMHhmMCwgMHgwNCwgMHg3ZSwgMHgwMSwgMHg4MCwKLTB4MDIsIDB4N2UsIDB4MDAsIDB4ZWUsIDB4NmYsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NzUsIDB4OTIsIDB4NzQsIDB4MjAsIDB4NmQsIDB4MDQsIDB4YTIsIDB4NmMsCi0weDgwLCAweDI2LCAweDMwLCAweDZjLCAweDA2LCAweGU1LCAweDQ2LCAweGEyLCAweGUyLCAweDgwLCAweDFkLCAweGU1LCAweDVlLCAweDIwLCAweGUxLCAweDA0LAotMHg3ZiwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHhlNSwgMHg0NiwgMHg1NCwgMHhmMCwgMHhmZSwgMHhiZSwgMHhmMCwgMHgwNCwgMHg3ZSwgMHgwMSwKLTB4ODAsIDB4MDIsIDB4N2UsIDB4MDAsIDB4ZWUsIDB4NmYsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NzEsIDB4OTIsIDB4NzAsIDB4OTAsIDB4MTAsIDB4MDAsIDB4ZTAsCi0weDkwLCAweDEwLCAweDJmLCAweGYwLCAweDkwLCAweDEwLCAweDAzLCAweGUwLCAweGMzLCAweDk0LCAweDMwLCAweDQwLCAweDE0LCAweGEyLCAweDcxLCAweDkyLAotMHg3NywgMHhhMiwgMHg3MCwgMHg5MiwgMHg3NiwgMHhlNSwgMHgyZSwgMHgxMywgMHgxMywgMHg1NCwgMHgzZiwgMHhmNSwgMHgyZSwgMHhjMiwgMHg3NywgMHhkMiwKLTB4NzYsIDB4OTAsIDB4MTAsIDB4MmYsIDB4ZTUsIDB4MmUsIDB4ZjAsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsIDB4NzAsIDB4NGMsIDB4OTAsIDB4MDIsIDB4MjksCi0weGUwLCAweDU0LCAweGZlLCAweGYwLCAweGU1LCAweDQzLCAweGM0LCAweDU0LCAweDBmLCAweDE0LCAweDYwLCAweDE0LCAweDI0LCAweGZlLCAweDYwLCAweDIzLAotMHgyNCwgMHgwMywgMHg2MCwgMHgwMywgMHgwMiwgMHgxNiwgMHgxOCwgMHg5MCwgMHgwMiwgMHgyOCwgMHhlMCwgMHgzMCwgMHg0NywgMHgwZiwgMHg4MCwgMHgwNywKLTB4OTAsIDB4MDIsIDB4MjgsIDB4ZTAsIDB4MjAsIDB4NDcsIDB4MDYsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4MDIsIDB4MTYsIDB4MTgsIDB4NDQsIDB4MDEsIDB4ZjAsCi0weDAyLCAweDE2LCAweDE4LCAweGU1LCAweDQ2LCAweDMwLCAweGUyLCAweDA0LCAweDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweDkwLCAweDAyLAotMHgyOCwgMHhlMCwgMHg1NCwgMHhmZSwgMHg0ZiwgMHhmMCwgMHgwMiwgMHgxNiwgMHgxOCwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNywgMHg2MCwgMHgwZiwgMHhlNSwKLTB4NDcsIDB4NjQsIDB4MDgsIDB4NjAsIDB4MDksIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDksIDB4NjAsIDB4MDMsIDB4MDIsIDB4MTYsIDB4MTgsIDB4ZTQsIDB4ZjUsCi0weDI3LCAweDkwLCAweDAyLCAweDI5LCAweGUwLCAweDU0LCAweGZjLCAweGYwLCAweGU1LCAweDNhLCAweDE0LCAweDYwLCAweDJkLCAweDE0LCAweDYwLCAweDJlLAotMHgxNCwgMHg2MCwgMHgzNiwgMHgyNCwgMHhmYywgMHg2MCwgMHg1ZiwgMHgyNCwgMHhmOSwgMHg2MCwgMHgxZiwgMHgyNCwgMHgwZSwgMHg3MCwgMHg2OSwgMHhlNSwKLTB4NDYsIDB4MTMsIDB4MTMsIDB4NTQsIDB4M2YsIDB4NzUsIDB4ZjAsIDB4MDMsIDB4ODQsIDB4YWYsIDB4ZjAsIDB4MjAsIDB4NDcsIDB4MDQsIDB4N2UsIDB4MDEsCi0weDgwLCAweDAyLCAweDdlLCAweDAwLCAweGVmLCAweDZlLCAweDI0LCAweGZmLCAweDgwLCAweDQ1LCAweGEyLCAweDQ3LCAweDgwLCAweDQxLCAweGU1LCAweDQ2LAotMHgzMCwgMHhlMiwgMHgwMywgMHhkMywgMHg4MCwgMHgyNywgMHhjMywgMHg4MCwgMHgyNCwgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwZCwgMHg1NCwgMHgzOCwKLTB4YzMsIDB4OTQsIDB4MzAsIDB4NTAsIDB4MDYsIDB4N2UsIDB4MDAsIDB4N2YsIDB4MDEsIDB4ODAsIDB4MDQsIDB4N2UsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MjAsCi0weDQ3LCAweDA0LCAweDdkLCAweDAxLCAweDgwLCAweDAyLCAweDdkLCAweDAwLCAweGVmLCAweDZkLCAweDRlLCAweDI0LCAweGZmLCAweDkyLCAweDM4LCAweGEyLAotMHg0NywgMHhiMywgMHg5MiwgMHgzOSwgMHg4MCwgMHgxOSwgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwMywgMHhkMywgMHg4MCwgMHgwMSwgMHhjMywgMHg5MiwKLTB4MzksIDB4YTIsIDB4NDcsIDB4YjMsIDB4OTIsIDB4MzgsIDB4ODAsIDB4MDcsIDB4YTIsIDB4NDcsIDB4YjMsIDB4OTIsIDB4MzgsIDB4OTIsIDB4MzksIDB4OTAsCi0weDAyLCAweDI4LCAweGUwLCAweDU0LCAweGZjLCAweDQ1LCAweDI3LCAweGYwLCAweDkwLCAweDcwLCAweDljLCAweGU1LCAweDNhLCAweGYwLCAweGEzLCAweGU1LAotMHg0NywgMHhmMCwgMHg5MCwgMHg3MCwgMHg0MSwgMHhlNSwgMHgzYSwgMHhmMCwgMHgyMiwgMHhlNCwgMHg5MCwgMHgwMiwgMHgyOSwgMHhmMCwgMHgzMCwgMHg0NywKLTB4MDQsIDB4YWYsIDB4NDUsIDB4ODAsIDB4MDQsIDB4ZTUsIDB4NDUsIDB4ZjQsIDB4ZmYsIDB4OTAsIDB4MDIsIDB4MjgsIDB4ZWYsIDB4ZjAsIDB4MjIsIDB4OGYsCi0weDUwLCAweGQyLCAweDU5LCAweDIyLCAweDhmLCAweDU0LCAweGQyLCAweDU4LCAweDIyLCAweGU0LCAweGY1LCAweDYyLCAweGMyLCAweGFmLCAweGU1LCAweDUxLAotMHgxNCwgMHg2MCwgMHg0NiwgMHgxNCwgMHg2MCwgMHg2MiwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgxNywgMHgwMywgMHhkMiwgMHg1OSwgMHg3NSwKLTB4NTUsIDB4MDEsIDB4OTAsIDB4MDIsIDB4YTIsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4MjAsIDB4ZTcsIDB4MjIsIDB4OTAsIDB4MDQsCi0weDM0LCAweGUwLCAweGI0LCAweDAyLCAweDFiLCAweGEzLCAweGUwLCAweGI0LCAweDAyLCAweDE2LCAweGEzLCAweGUwLCAweGI0LCAweDAyLCAweDExLCAweDdmLAotMHgyMCwgMHgxMiwgMHgxNiwgMHgzZiwgMHg5MCwgMHgxMCwgMHgwNCwgMHhlMCwgMHg1NCwgMHhmMywgMHhmMCwgMHg3NSwgMHg1MSwgMHgwMSwgMHg4MCwgMHg3MywKLTB4ZTUsIDB4NTAsIDB4NzAsIDB4MDUsIDB4NzUsIDB4NjIsIDB4MDMsIDB4ODAsIDB4NmEsIDB4OTAsIDB4MTIsIDB4MDAsIDB4ZTAsIDB4NTQsIDB4MDMsIDB4NzAsCi0weDExLCAweDdmLCAweDIwLCAweDEyLCAweDE2LCAweDNmLCAweDkwLCAweDAyLCAweGEyLCAweGUwLCAweDU0LCAweGJmLCAweGYwLCAweDc1LCAweDUxLCAweDAyLAotMHg4MCwgMHg1MSwgMHhlNSwgMHg1MCwgMHg3MCwgMHgwMiwgMHg4MCwgMHg0NiwgMHg5MCwgMHgwMiwgMHhhMywgMHhlMCwgMHgyMCwgMHhlNiwgMHgzYiwgMHg5MCwKLTB4MDQsIDB4MzcsIDB4ZTAsIDB4NjQsIDB4MjIsIDB4NzAsIDB4MzMsIDB4OTAsIDB4MDEsIDB4OGEsIDB4NzQsIDB4N2UsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4OTYsCi0weGYwLCAweDkwLCAweDEyLCAweDA0LCAweDc0LCAweDBhLCAweGYwLCAweDkwLCAweDEzLCAweDI4LCAweGUwLCAweDU0LCAweGYwLCAweGYwLCAweGEzLCAweGUwLAotMHg1NCwgMHhmMCwgMHhmMCwgMHhhMywgMHhlMCwgMHg1NCwgMHhmYSwgMHhmMCwgMHg5MCwgMHgwNCwgMHgwMSwgMHhlMCwgMHg1NCwgMHhmOSwgMHhmMCwgMHg3NSwKLTB4NjIsIDB4MDEsIDB4NzUsIDB4NTUsIDB4MDIsIDB4ZTQsIDB4ZjUsIDB4NTEsIDB4ODAsIDB4MDksIDB4ZTUsIDB4NTAsIDB4NzAsIDB4MDUsIDB4NzUsIDB4NjIsCi0weDAzLCAweGY1LCAweDUxLCAweGU1LCAweDYyLCAweDYwLCAweDE1LCAweGMyLCAweDAxLCAweGU0LCAweGY1LCAweDUxLCAweGMyLCAweDU5LCAweGFkLCAweDYyLAotMHhhZiwgMHg0MCwgMHgxMiwgMHgxNywgMHg4ZCwgMHhlNSwgMHg2MiwgMHhiNCwgMHgwMywgMHgwMiwgMHhkMiwgMHgwMywgMHhkMiwgMHhhZiwgMHgyMiwgMHhjMiwKLTB4YWYsIDB4MzAsIDB4MDEsIDB4MTIsIDB4ZTQsIDB4OTAsIDB4MDEsIDB4OTYsIDB4ZjAsIDB4ZjUsIDB4NTEsIDB4YzIsIDB4NTksIDB4YzIsIDB4MDEsIDB4N2QsCi0weDAyLCAweGFmLCAweDQwLCAweDEyLCAweDE3LCAweDhkLCAweGU1LCAweDUyLCAweDE0LCAweDYwLCAweDA5LCAweDA0LCAweDcwLCAweDRjLCAweDc1LCAweDUyLAotMHgwMSwgMHg3NSwgMHg1NSwgMHgwMywgMHg5MCwgMHgwNCwgMHgwMSwgMHhlMCwgMHg0NCwgMHgwZSwgMHhmMCwgMHg5MCwgMHgxMywgMHgyOCwgMHhlMCwgMHg0NCwKLTB4MGYsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NDQsIDB4MGYsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NDQsIDB4MDUsIDB4ZjAsIDB4OTAsIDB4MTIsIDB4MDQsIDB4NzQsCi0weDAzLCAweGYwLCAweDkwLCAweDAyLCAweGEyLCAweGUwLCAweDQ0LCAweGMwLCAweGYwLCAweDkwLCAweDEwLCAweDA0LCAweGUwLCAweDQ0LCAweDBjLCAweGYwLAotMHhlNCwgMHhmNSwgMHg1MiwgMHhmNSwgMHg1NSwgMHgzMCwgMHgwMiwgMHgwYiwgMHhjMiwgMHgwMiwgMHg3ZCwgMHgwMSwgMHhhZiwgMHg0MSwgMHgxMiwgMHgxNywKLTB4OGQsIDB4ODAsIDB4MDIsIDB4YzIsIDB4MDMsIDB4ZTQsIDB4OTAsIDB4MDEsIDB4OTYsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4ZWYsIDB4ZjQsIDB4NjAsCi0weDJkLCAweGU0LCAweGZlLCAweDc0LCAweDE0LCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDcwLCAweGY1LCAweDgzLCAweGUwLCAweGI0LCAweGZmLAotMHgxOSwgMHg3NCwgMHgxNCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3MCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHg3NCwgMHgxYywgMHgyZSwKLTB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4NzAsIDB4ZjUsIDB4ODMsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4MGUsIDB4YmUsIDB4MDQsIDB4ZDUsIDB4MjIsIDB4MjIsCi0weDIyLCAweDkwLCAweDcwLCAweDJhLCAweGUwLCAweDMwLCAweGUxLCAweDRkLCAweGMyLCAweGFmLCAweDkwLCAweDcwLCAweDI4LCAweGUwLCAweDkwLCAweDEwLAotMHgxYywgMHhmMCwgMHg5MCwgMHg3MCwgMHgyOSwgMHhlMCwgMHg5MCwgMHgxMCwgMHgxZCwgMHhmMCwgMHg5MCwgMHg3MCwgMHgyYSwgMHhlMCwgMHg5MCwgMHgxMCwKLTB4MWUsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MWMsIDB4ZTAsIDB4ZjUsIDB4NjIsIDB4OTAsIDB4MTAsIDB4MWUsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4ZjMsIDB4OTAsCi0weDEwLCAweDFjLCAweGUwLCAweDkwLCAweDcwLCAweDI4LCAweGYwLCAweDkwLCAweDEwLCAweDFkLCAweGUwLCAweDkwLCAweDcwLCAweDI5LCAweGYwLCAweDkwLAotMHgxMCwgMHgxZSwgMHhlMCwgMHg5MCwgMHg3MCwgMHgyYSwgMHhmMCwgMHgzMCwgMHg0YSwgMHgwNywgMHg5MCwgMHg3MCwgMHgyNCwgMHhlMCwgMHg0NCwgMHgwMSwKLTB4ZjAsIDB4YzIsIDB4MDUsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4MjIsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4OWIsIDB4YzAsIH0gOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9tZDQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvbWQ0LmgKaW5kZXggYTljYzdiMC4uYjNmYjYzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9tZDQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL21kNC5oCkBAIC0zNSw4ICszNSw4IEBACiAJdTgJYnVmZmVyWzY0XTsgICAgICAvKiBpbnB1dCBidWZmZXIgKi8KIH0JTUQ0X0NUWDsKIAotdm9pZCBNRDRJbml0IChNRDRfQ1RYICopOwotdm9pZCBNRDRVcGRhdGUgKE1ENF9DVFggKiwgdTggKiwgVUlOVCk7Ci12b2lkIE1ENEZpbmFsICh1OCBbMTZdLCBNRDRfQ1RYICopOwordm9pZCBNRDRJbml0KE1ENF9DVFggKik7Cit2b2lkIE1ENFVwZGF0ZShNRDRfQ1RYICosIHU4ICosIFVJTlQpOwordm9pZCBNRDRGaW5hbCh1OCBbMTZdLCBNRDRfQ1RYICopOwogCi0jZW5kaWYgLy9fX01ENF9IX18KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisjZW5kaWYgLypfX01ENF9IX18qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9maXJtd2FyZS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9maXJtd2FyZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzA1NmUyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvZmlybXdhcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxNyArMCwwIEBACi0vKiBBVVRPIEdFTiBQTEVBU0UgRE8gTk9UIE1PRElGWSBJVCAqLwotLyogQVVUTyBHRU4gUExFQVNFIERPIE5PVCBNT0RJRlkgSVQgKi8KLQotCi11OCBGaXJtd2FyZUltYWdlXzMwOTAgW10gPSB7Ci0weDAyLCAweDAyLCAweGYzLCAweDAyLCAweDAyLCAweGExLCAweDIyLCAweDIyLCAweGZmLCAweGZmLCAweGZmLCAweDAyLCAweDAxLCAweDI3LCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHgwMiwgMHgwMCwgMHgxZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMiwgMHgwMCwgMHhkOCwgMHhjMCwgMHhlMCwKLTB4YzAsIDB4ZjAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ZDAsIDB4NzUsIDB4ZDAsIDB4MTgsIDB4YzIsIDB4YWYsIDB4MzAsIDB4NDUsIDB4MDMsCi0weDEyLCAweDEwLCAweDA5LCAweDkwLCAweDA0LCAweDE2LCAweGUwLCAweDMwLCAweGUzLCAweDAzLCAweDc0LCAweDA4LCAweGYwLCAweDkwLCAweDA0LCAweDE0LAotMHhlMCwgMHgyMCwgMHhlNywgMHgwMywgMHgwMiwgMHgwMCwgMHhjYiwgMHg3NCwgMHg4MCwgMHhmMCwgMHg5MCwgMHg3MCwgMHgxMiwgMHhlMCwgMHhmNSwgMHgzNiwKLTB4OTAsIDB4MDQsIDB4MDQsIDB4ZTAsIDB4MjQsIDB4Y2YsIDB4NjAsIDB4MzAsIDB4MTQsIDB4NjAsIDB4NDIsIDB4MjQsIDB4ZTIsIDB4NjAsIDB4NDcsIDB4MTQsCi0weDYwLCAweDU1LCAweDI0LCAweDIxLCAweDcwLCAweDYwLCAweGU1LCAweDU1LCAweDI0LCAweGZlLCAweDYwLCAweDA3LCAweDE0LCAweDYwLCAweDA4LCAweDI0LAotMHgwMiwgMHg3MCwgMHgwOCwgMHg3ZCwgMHgwMSwgMHg4MCwgMHgyOCwgMHg3ZCwgMHgwMiwgMHg4MCwgMHgyNCwgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHhmNSwKLTB4NTAsIDB4ODUsIDB4MzYsIDB4NDAsIDB4ZDIsIDB4MDEsIDB4ODAsIDB4M2UsIDB4ZTUsIDB4NTUsIDB4NjQsIDB4MDMsIDB4NjAsIDB4MDQsIDB4ZTUsIDB4NTUsCi0weDcwLCAweDA0LCAweDdkLCAweDAyLCAweDgwLCAweDA5LCAweDg1LCAweDM2LCAweDQxLCAweGQyLCAweDAyLCAweDgwLCAweDI5LCAweGFkLCAweDU1LCAweGFmLAotMHgzNiwgMHgxMiwgMHgwMiwgMHg3ZCwgMHg4MCwgMHgyMCwgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHhmNSwgMHg0NywgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwKLTB4ZjUsIDB4NDQsIDB4MTIsIDB4MTAsIDB4MjUsIDB4ODAsIDB4MDYsIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4ZjUsIDB4NDUsIDB4ZTQsIDB4ZmQsIDB4YWYsCi0weDM2LCAweDEyLCAweDAyLCAweDdkLCAweGQyLCAweDA0LCAweDkwLCAweDcwLCAweDEzLCAweGU0LCAweGYwLCAweGQyLCAweGFmLCAweGQwLCAweGQwLCAweGQwLAotMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhmMCwgMHhkMCwgMHhlMCwgMHgzMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHhmMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwKLTB4YzAsIDB4ZDAsIDB4ZTgsIDB4YzAsIDB4ZTAsIDB4ZTksIDB4YzAsIDB4ZTAsIDB4ZWEsIDB4YzAsIDB4ZTAsIDB4ZWIsIDB4YzAsIDB4ZTAsIDB4ZWMsIDB4YzAsCi0weGUwLCAweGVkLCAweGMwLCAweGUwLCAweGVlLCAweGMwLCAweGUwLCAweGVmLCAweGMwLCAweGUwLCAweGMyLCAweGFmLCAweDMwLCAweDQ1LCAweDAzLCAweDEyLAotMHgxMCwgMHgxMiwgMHhkMiwgMHhhZiwgMHhkMCwgMHhlMCwgMHhmZiwgMHhkMCwgMHhlMCwgMHhmZSwgMHhkMCwgMHhlMCwgMHhmZCwgMHhkMCwgMHhlMCwgMHhmYywKLTB4ZDAsIDB4ZTAsIDB4ZmIsIDB4ZDAsIDB4ZTAsIDB4ZmEsIDB4ZDAsIDB4ZTAsIDB4ZjksIDB4ZDAsIDB4ZTAsIDB4ZjgsIDB4ZDAsIDB4ZDAsIDB4ZDAsIDB4ODIsCi0weGQwLCAweDgzLCAweGQwLCAweGYwLCAweGQwLCAweGUwLCAweDMyLCAweGMwLCAweGUwLCAweGMwLCAweGYwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLAotMHhkMCwgMHg3NSwgMHhkMCwgMHgxMCwgMHhjMiwgMHhhZiwgMHgzMCwgMHg0NSwgMHgwMywgMHgxMiwgMHgxMCwgMHgwYywgMHgzMCwgMHg1OCwgMHgwYSwgMHhlNSwKLTB4NTQsIDB4NjAsIDB4MDQsIDB4MTUsIDB4NTQsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NTgsIDB4MzAsIDB4NTksIDB4MGEsIDB4ZTUsIDB4NTAsIDB4NjAsIDB4MDQsCi0weDE1LCAweDUwLCAweDgwLCAweDAyLCAweGMyLCAweDU5LCAweGQ1LCAweDUzLCAweDA3LCAweDMwLCAweDYwLCAweDA0LCAweDE1LCAweDQ2LCAweGQyLCAweDA0LAotMHgzMCwgMHg0NSwgMHgwMywgMHgxMiwgMHgxMCwgMHgwZiwgMHhjMiwgMHg4ZCwgMHhkMiwgMHhhZiwgMHhkMCwgMHhkMCwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywKLTB4ZDAsIDB4ZjAsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4OTAsIDB4NzAsIDB4MmEsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4NDMsIDB4YzIsIDB4YWYsIDB4OTAsIDB4NzAsCi0weDI4LCAweGUwLCAweDkwLCAweDEwLCAweDFjLCAweGYwLCAweDkwLCAweDcwLCAweDI5LCAweGUwLCAweDkwLCAweDEwLCAweDFkLCAweGYwLCAweDkwLCAweDcwLAotMHgyYSwgMHhlMCwgMHg5MCwgMHgxMCwgMHgxZSwgMHhmMCwgMHg5MCwgMHgxMCwgMHgxYywgMHhlMCwgMHhmNSwgMHgzNywgMHg5MCwgMHgxMCwgMHgxZSwgMHhlMCwKLTB4MjAsIDB4ZTEsIDB4ZjMsIDB4OTAsIDB4MTAsIDB4MWMsIDB4ZTAsIDB4OTAsIDB4NzAsIDB4MjgsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MWQsIDB4ZTAsIDB4OTAsCi0weDcwLCAweDI5LCAweGYwLCAweDkwLCAweDEwLCAweDFlLCAweGUwLCAweDkwLCAweDcwLCAweDJhLCAweGYwLCAweGMyLCAweDA1LCAweGQyLCAweGFmLCAweDIyLAotMHgxMiwgMHgwMiwgMHhjMywgMHgzMCwgMHg0NSwgMHgwMywgMHgxMiwgMHgxMCwgMHgwMywgMHgzMCwgMHgwMSwgMHgwNiwgMHgyMCwgMHgwOSwgMHgwMywgMHgxMiwKLTB4MTAsIDB4MWMsIDB4MzAsIDB4MDIsIDB4MDYsIDB4MjAsIDB4MGEsIDB4MDMsIDB4MTIsIDB4MTAsIDB4MWYsIDB4MzAsIDB4MDMsIDB4MDYsIDB4MjAsIDB4MGIsCi0weDAzLCAweDEyLCAweDEwLCAweDFmLCAweDMwLCAweDA0LCAweDA2LCAweDIwLCAweDBjLCAweDAzLCAweDEyLCAweDEwLCAweDIyLCAweDIwLCAweDEzLCAweDA5LAotMHgyMCwgMHgxMSwgMHgwNiwgMHhlNSwgMHgyYiwgMHg0NSwgMHgyYywgMHg2MCwgMHgwMywgMHhkMywgMHg4MCwgMHgwMSwgMHhjMywgMHg5MiwgMHhhOSwgMHgxMiwKLTB4MDMsIDB4MWMsIDB4ODAsIDB4YmYsIDB4YzIsIDB4NDMsIDB4ZDIsIDB4NDUsIDB4ZTQsIDB4ZjUsIDB4MjAsIDB4ZjUsIDB4MjEsIDB4ZjUsIDB4NTMsIDB4ZjUsCi0weDQ2LCAweGY1LCAweDJiLCAweGY1LCAweDJjLCAweGMyLCAweDQyLCAweGY1LCAweDUxLCAweGY1LCAweDUyLCAweGY1LCAweDU1LCAweDkwLCAweDA0LCAweDE4LAotMHg3NCwgMHg4MCwgMHhmMCwgMHg5MCwgMHgwNCwgMHgxYSwgMHg3NCwgMHgwOCwgMHhmMCwgMHhjMiwgMHgxYSwgMHhjMiwgMHgxOCwgMHhjMiwgMHgxYiwgMHgyMiwKLTB4YzgsIDB4ZWYsIDB4YzgsIDB4ZTYsIDB4ZmEsIDB4MDgsIDB4ZTYsIDB4NGEsIDB4NjAsIDB4MGMsIDB4YzgsIDB4ZWYsIDB4YzgsIDB4MDgsIDB4ZTYsIDB4MTYsCi0weDE4LCAweDcwLCAweDAxLCAweDE2LCAweGMzLCAweDIyLCAweGVkLCAweDI0LCAweGZmLCAweGZkLCAweGVjLCAweDM0LCAweGZmLCAweGM4LCAweGVmLCAweGM4LAotMHhmNiwgMHgwOCwgMHhjNiwgMHhlZCwgMHhjNiwgMHhkMywgMHgyMiwgMHhkMCwgMHg4MywgMHhkMCwgMHg4MiwgMHhmOCwgMHhlNCwgMHg5MywgMHg3MCwgMHgxMiwKLTB4NzQsIDB4MDEsIDB4OTMsIDB4NzAsIDB4MGQsIDB4YTMsIDB4YTMsIDB4OTMsIDB4ZjgsIDB4NzQsIDB4MDEsIDB4OTMsIDB4ZjUsIDB4ODIsIDB4ODgsIDB4ODMsCi0weGU0LCAweDczLCAweDc0LCAweDAyLCAweDkzLCAweDY4LCAweDYwLCAweGVmLCAweGEzLCAweGEzLCAweGEzLCAweDgwLCAweGRmLCAweGVmLCAweGY0LCAweDYwLAotMHgxZiwgMHhlNCwgMHhmZSwgMHgxMiwgMHgwMywgMHg1YiwgMHhlMCwgMHhiNCwgMHhmZiwgMHgxMiwgMHgxMiwgMHgwMywgMHg1YiwgMHhlZiwgMHhmMCwgMHg3NCwKLTB4MWMsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4NzAsIDB4ZjUsIDB4ODMsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4MGUsIDB4YmUsIDB4MDQsIDB4ZTMsCi0weDIyLCAweGMwLCAweGUwLCAweGMwLCAweGYwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweGQwLCAweDc1LCAweGQwLCAweDA4LCAweGMyLCAweGFmLAotMHgzMCwgMHg0NSwgMHgwMywgMHgxMiwgMHgxMCwgMHgwNiwgMHhkMiwgMHhhZiwgMHhkMCwgMHhkMCwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhmMCwKLTB4ZDAsIDB4ZTAsIDB4MzIsIDB4YzIsIDB4YWYsIDB4MTIsIDB4MDAsIDB4MDYsIDB4MTIsIDB4MDIsIDB4MDQsIDB4MTIsIDB4MDIsIDB4ZGMsIDB4ZTQsIDB4ZjUsCi0weDIyLCAweGY1LCAweDQ3LCAweDkwLCAweDA0LCAweDAwLCAweDc0LCAweDgwLCAweGYwLCAweGQyLCAweGFmLCAweDIyLCAweDc1LCAweDg5LCAweDAyLCAweGU0LAotMHhmNSwgMHg4YywgMHhmNSwgMHg4YSwgMHhmNSwgMHg4OCwgMHhmNSwgMHhiOCwgMHhmNSwgMHhlOCwgMHg3NSwgMHg5MCwgMHgxOCwgMHhkMiwgMHg4YywgMHg3NSwKLTB4YTgsIDB4MDUsIDB4MjIsIDB4NzgsIDB4N2YsIDB4ZTQsIDB4ZjYsIDB4ZDgsIDB4ZmQsIDB4NzUsIDB4ODEsIDB4NWYsIDB4MDIsIDB4MDEsIDB4YzAsIDB4ZmYsCi0weGMwLCAweDI2LCAweDc0LCAweDAzLCAweGMwLCAweGUwLCAweGMwLCAweDgyLCAweGMwLCAweDgzLCAweDc1LCAweDI2LCAweDBhLCAweDIyLCAweGMwLCAweDI2LAotMHg3NCwgMHgwMywgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MiwgMHhjMCwgMHg4MywgMHg3NSwgMHgyNiwgMHgxOCwgMHgyMiwgMHgzMCwgMHg0NSwgMHgwMywgMHgxMiwKLTB4MTAsIDB4MTUsIDB4ZTUsIDB4MjAsIDB4NzAsIDB4MDMsIDB4MjAsIDB4MTAsIDB4MDMsIDB4MzAsIDB4MTEsIDB4MDMsIDB4NDMsIDB4ODcsIDB4MDEsIDB4MjIsCi0weGNlLCAweGVmLCAweGNlLCAweGVlLCAweDYwLCAweDA4LCAweDdmLCAweGZmLCAweDEyLCAweDAzLCAweDcxLCAweDFlLCAweDgwLCAweGY1LCAweDIyLCAweGM4LAotMHhlZiwgMHhjOCwgMHhlNiwgMHg2MCwgMHgwMywgMHgxNiwgMHhjMywgMHgyMiwgMHhlZCwgMHgxNCwgMHhmNiwgMHhkMywgMHgyMiwgMHhjOCwgMHhlZiwgMHhjOCwKLTB4ZTYsIDB4NjAsIDB4MDYsIDB4MTYsIDB4ZTYsIDB4MjQsIDB4ZmYsIDB4YjMsIDB4MjIsIDB4YzMsIDB4MjIsIDB4NzQsIDB4MTQsIDB4MmUsIDB4ZjUsIDB4ODIsCi0weGU0LCAweDM0LCAweDcwLCAweGY1LCAweDgzLCAweDIyLCAweGVmLCAweDkwLCAweDAzLCAweDZmLCAweDkzLCAweDkwLCAweDAzLCAweDAwLCAweDczLCAweDBhLAotMHgxOCwgMHhlZiwgMHg2MCwgMHgwMywgMHgxZiwgMHg4MCwgMHhmYSwgMHgyMiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHgwMiwgMHgxMCwgMHgyOCwgMHgwMiwgMHgxMCwgMHgzYiwgMHgwMiwgMHgxMCwgMHgzYywgMHgwMiwgMHgxMywgMHg2OCwgMHgwMiwKLTB4MTMsIDB4NjksIDB4MDIsIDB4MTQsIDB4MWUsIDB4MDIsIDB4MTQsIDB4MWYsIDB4YzMsIDB4MjIsIDB4ZmYsIDB4ZmYsIDB4MDIsIDB4MTksIDB4YTEsIDB4MDIsCi0weDFiLCAweDMxLCAweDAyLCAweDE0LCAweGVhLCAweDAyLCAweDE0LCAweDIwLCAweDMwLCAweDA1LCAweDA2LCAweDIwLCAweDBkLCAweDAzLCAweDEyLCAweDAxLAotMHg3NSwgMHgzMCwgMHgwNiwgMHgwNiwgMHgyMCwgMHgwZSwgMHgwMywgMHgxMiwgMHgxYywgMHg0ZiwgMHgyMiwgMHgyMiwgMHg5MCwgMHgwNCwgMHgxNCwgMHhlMCwKLTB4MjAsIDB4ZTcsIDB4MDMsIDB4MDIsIDB4MTMsIDB4NjcsIDB4OTAsIDB4NzAsIDB4MTIsIDB4ZTAsIDB4ZjUsIDB4NTYsIDB4OTAsIDB4MDQsIDB4MDQsIDB4ZTAsCi0weDEyLCAweDAyLCAweDU3LCAweDExLCAweDExLCAweDMwLCAweDEwLCAweGUyLCAweDMxLCAweDEwLCAweDkwLCAweDMzLCAweDEwLCAweGEwLCAweDM0LCAweDEwLAotMHhiZSwgMHgzNSwgMHgxMCwgMHhhYywgMHgzNiwgMHgxMSwgMHgxZiwgMHg1MCwgMHgxMSwgMHg2OCwgMHg1MSwgMHgxMSwgMHg3MSwgMHg1MiwgMHgxMSwgMHg3MSwKLTB4NTMsIDB4MTEsIDB4NzEsIDB4NTQsIDB4MTEsIDB4YjMsIDB4NTUsIDB4MTIsIDB4MTYsIDB4NzAsIDB4MTIsIDB4NDIsIDB4NzEsIDB4MTIsIDB4NzEsIDB4NzIsCi0weDEyLCAweGRhLCAweDczLCAweDEyLCAweGZlLCAweDgwLCAweDEzLCAweDI5LCAweDgzLCAweDEzLCAweDQ3LCAweDg0LCAweDAwLCAweDAwLCAweDEzLCAweDY3LAotMHhkMiwgMHgxOCwgMHhkMiwgMHg2MSwgMHg3NSwgMHgzNSwgMHgyYSwgMHg3NSwgMHgzMiwgMHgwYiwgMHg3NSwgMHgzMywgMHhiOCwgMHgwMiwgMHgxMywgMHg2MiwKLTB4YzIsIDB4MTgsIDB4OTAsIDB4MDEsIDB4MTQsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4MDIsIDB4MTMsIDB4NjIsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsCi0weGY1LCAweDNjLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweDIyLCAweGU1LCAweDU1LAotMHhiNCwgMHgwMiwgMHgwZiwgMHhlNSwgMHg1OSwgMHhiNCwgMHgyOCwgMHgwNiwgMHg5MCwgMHgwMSwgMHgwZCwgMHg3NCwgMHgwOCwgMHhmMCwgMHg3ZCwgMHgwMSwKLTB4ODAsIDB4MDIsIDB4N2QsIDB4MDIsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MDIsIDB4N2QsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4MDIsCi0weDEzLCAweDYyLCAweDIwLCAweDAyLCAweDAzLCAweDMwLCAweDAzLCAweDEwLCAweDdkLCAweDAyLCAweGFmLCAweDU2LCAweDEyLCAweDAyLCAweDdkLCAweDkwLAotMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHgwMiwgMHgxMywgMHg2MiwgMHhlNSwgMHgzNCwgMHhjMywgMHg5NCwgMHgwMywgMHg0MCwgMHgwYywgMHg5MCwKLTB4MDEsIDB4MGMsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4ODUsIDB4NTYsIDB4NDEsIDB4ZDIsIDB4MDIsCi0weDIyLCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweGY0LCAweDcwLCAweDAzLCAweDAyLCAweDEzLCAweDY3LCAweGUwLCAweGY1LCAweDMwLCAweDIyLCAweGU1LAotMHgzNCwgMHhjMywgMHg5NCwgMHgwMywgMHg0MCwgMHgwNywgMHhlNSwgMHg1NSwgMHg2MCwgMHgwMywgMHgwMiwgMHgxMywgMHg2NywgMHg5MCwgMHg3MCwgMHgxMCwKLTB4ZTAsIDB4NTQsIDB4N2YsIDB4ZmYsIDB4YmYsIDB4MGEsIDB4MGQsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4YjQsIDB4MDgsIDB4MDYsIDB4NzUsIDB4NGUsCi0weDAxLCAweDc1LCAweDRmLCAweDg0LCAweDkwLCAweDcwLCAweDEwLCAweGUwLCAweDU0LCAweDdmLCAweDY0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDEzLAotMHg2NywgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHg2NCwgMHgwOCwgMHg2MCwgMHgwOCwgMHhlMCwgMHg2NCwgMHgyMCwgMHg2MCwgMHgwMywgMHgwMiwgMHgxMywKLTB4NjcsIDB4NzUsIDB4NGUsIDB4MDMsIDB4NzUsIDB4NGYsIDB4MjAsIDB4MjIsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NDcsCi0weDIyLCAweGU1LCAweDM0LCAweGMzLCAweDk0LCAweDAzLCAweDQwLCAweDA3LCAweGU1LCAweDU1LCAweDYwLCAweDAzLCAweDAyLCAweDEzLCAweDA5LCAweDkwLAotMHgwNCwgMHgwNCwgMHhlMCwgMHgyNSwgMHhlMCwgMHgyNCwgMHg1ZCwgMHhmNSwgMHg1NywgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHhmZiwgMHg3NCwgMHg0NywKLTB4MjUsIDB4NTcsIDB4ZjgsIDB4YzYsIDB4ZWYsIDB4YzYsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4ZmYsIDB4NzQsIDB4NDgsIDB4MjUsIDB4NTcsIDB4ZjgsCi0weGM2LCAweGVmLCAweGM2LCAweGU0LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDAyLCAweDdkLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLAotMHgwMiwgMHgxMywgMHg2MiwgMHhlNSwgMHgzNCwgMHhjMywgMHg5NCwgMHgwMywgMHg0MCwgMHgwNywgMHhlNSwgMHg1NSwgMHg2MCwgMHgwMywgMHgwMiwgMHgxMywKLTB4MDksIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDcsIDB4NjAsIDB4MjMsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDgsIDB4NjAsIDB4MWQsIDB4ZTUsIDB4NDcsIDB4NjQsCi0weDA5LCAweDYwLCAweDE3LCAweGU1LCAweDQ3LCAweDY0LCAweDBhLCAweDYwLCAweDExLCAweGU1LCAweDQ3LCAweDY0LCAweDBiLCAweDYwLCAweDBiLCAweGU1LAotMHg0NywgMHg2NCwgMHgwZCwgMHg2MCwgMHgwNSwgMHhlNSwgMHg0NywgMHhiNCwgMHgwZCwgMHgwOCwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHg1NCwgMHgwZiwKLTB4ZjUsIDB4M2EsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDksIDB4MDgsIDB4ZTUsIDB4M2EsIDB4YjQsIDB4MDMsIDB4MDMsIDB4ZTQsIDB4ZjUsIDB4NDYsIDB4ZTUsCi0weDQ3LCAweGI0LCAweDBhLCAweDA4LCAweGU1LCAweDNhLCAweGI0LCAweDAxLCAweDAzLCAweGU0LCAweGY1LCAweDQ2LCAweGU0LCAweGZkLCAweGFmLCAweDU2LAotMHgxMiwgMHgwMiwgMHg3ZCwgMHhkMiwgMHgwNCwgMHgyMiwgMHhlNSwgMHgzNCwgMHhjMywgMHg5NCwgMHgwMywgMHg0MCwgMHgwNywgMHhlNSwgMHg1NSwgMHg2MCwKLTB4MDMsIDB4MDIsIDB4MTMsIDB4MDksIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4ZmUsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4ZmQsIDB4ZWQsIDB4ZjgsCi0weGU2LCAweGY1LCAweDU3LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDAyLCAweDdkLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweDAyLAotMHgxMywgMHg2MiwgMHhlNSwgMHgzNCwgMHhjMywgMHg5NCwgMHgwMywgMHg0MCwgMHgwNywgMHhlNSwgMHg1NSwgMHg2MCwgMHgwMywgMHgwMiwgMHgxMywgMHgwOSwKLTB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4ZmUsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4ZmQsIDB4ZWQsIDB4ZjUsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsCi0weGY1LCAweDU3LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDAyLCAweDdkLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweDAyLCAweDEzLAotMHg2MiwgMHg5MCwgMHgxMCwgMHgwMCwgMHhlMCwgMHhmNSwgMHg1NywgMHg5MCwgMHgxMCwgMHgwMiwgMHhlMCwgMHhmNSwgMHg1OCwgMHhhMywgMHhlMCwgMHhmNSwKLTB4NTksIDB4ZTUsIDB4NTgsIDB4YjQsIDB4NzAsIDB4MWUsIDB4ZTUsIDB4NTksIDB4YjQsIDB4MzAsIDB4MTksIDB4OTAsIDB4MDUsIDB4MDgsIDB4ZTAsIDB4NDQsCi0weDAxLCAweGYwLCAweGZkLCAweDkwLCAweDA1LCAweDA1LCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweDQ0LCAweDA0LCAweGYwLCAweGVkLCAweDU0LCAweGZlLAotMHg5MCwgMHgwNSwgMHgwOCwgMHhmMCwgMHhlNCwgMHhmNSwgMHg0ZSwgMHhmNSwgMHg0ZiwgMHg3NSwgMHgzYSwgMHhmZiwgMHhjMiwgMHgxYSwgMHhjMiwgMHgxOCwKLTB4YzIsIDB4MWIsIDB4ZjUsIDB4MzQsIDB4OTAsIDB4MDUsIDB4YTQsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4YTMsIDB4NzQsCi0weDAzLCAweGYwLCAweGU0LCAweGY1LCAweDMwLCAweGMyLCAweDE5LCAweDc1LCAweDNjLCAweGZmLCAweGFkLCAweDU3LCAweGFmLCAweDU2LCAweDEyLCAweDAyLAotMHg3ZCwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHgwMiwgMHgxMywgMHg2MiwgMHhlNSwgMHgzNCwgMHhjMywgMHg5NCwgMHgwMywgMHg0MCwKLTB4MDYsIDB4ZTUsIDB4NTUsIDB4NjAsIDB4MDIsIDB4ODAsIDB4MjIsIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4OTMsIDB4ZTQsCi0weGZkLCAweGFmLCAweDU2LCAweDEyLCAweDAyLCAweDdkLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweDgwLCAweDY0LCAweGU1LCAweDM0LAotMHhjMywgMHg5NCwgMHgwMywgMHg0MCwgMHgwYiwgMHhlNSwgMHg1NSwgMHg2MCwgMHgwNywgMHg3ZCwgMHgwMywgMHhhZiwgMHg1NiwgMHgwMiwgMHgwMiwgMHg3ZCwKLTB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NGEsIDB4ZDIsIDB4MDUsIDB4YWQsIDB4NTcsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MDIsCi0weDdkLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweDgwLCAweDM5LCAweGU0LCAweGY1LCAweDM0LCAweGY1LCAweDMwLCAweDkwLCAweDcwLAotMHgxMCwgMHhlMCwgMHhmNCwgMHg2MCwgMHgwMywgMHhlMCwgMHhmNSwgMHgzNCwgMHhhZCwgMHg1NywgMHhhZiwgMHg1NiwgMHgxMiwgMHgwMiwgMHg3ZCwgMHg5MCwKLTB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ODAsIDB4MWIsIDB4ZDIsIDB4MTksIDB4MDUsIDB4MmYsIDB4ZTUsIDB4MmYsIDB4YjQsIDB4MWEsIDB4MDMsCi0weGU0LCAweGY1LCAweDJmLCAweGQyLCAweDA0LCAweGFkLCAweDU3LCAweGFmLCAweDU2LCAweDEyLCAweDAyLCAweDdkLCAweDkwLCAweDA0LCAweDE0LCAweDc0LAotMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHgyMiwgMHgyMiwgMHhlNSwgMHgzNCwgMHhjMywgMHg5NCwgMHgwMywgMHg0MCwgMHgxNywKLTB4ZTUsIDB4NTUsIDB4YjQsIDB4MDIsIDB4MTIsIDB4ZTUsIDB4MzAsIDB4NjAsIDB4MGUsIDB4MzAsIDB4NjAsIDB4MGIsIDB4NzQsIDB4ZmQsIDB4MjUsIDB4NDYsCi0weGY1LCAweDQ2LCAweGQyLCAweDA0LCAweGU0LCAweGY1LCAweDUzLCAweGU1LCAweDUzLCAweDYwLCAweDAzLCAweDAyLCAweDE0LCAweDFkLCAweDMwLCAweDYwLAotMHgyMSwgMHhiMiwgMHg0ZCwgMHgzMCwgMHg0ZCwgMHgxYywgMHhlNSwgMHgzNCwgMHhjMywgMHg5NCwgMHgwMywgMHg0MCwgMHgxMSwgMHhlNSwgMHg1NSwgMHhiNCwKLTB4MDIsIDB4MGMsIDB4ZTUsIDB4MzAsIDB4NjAsIDB4MDgsIDB4NzQsIDB4MDMsIDB4MjUsIDB4NDYsIDB4ZjUsIDB4NDYsIDB4ODAsIDB4MDIsIDB4MDUsIDB4NDYsCi0weGMyLCAweDA0LCAweGU1LCAweDRmLCAweDQ1LCAweDRlLCAweDYwLCAweDA4LCAweGU1LCAweDRmLCAweDE1LCAweDRmLCAweDcwLCAweDAyLCAweDE1LCAweDRlLAotMHgzMCwgMHgxYSwgMHg0OSwgMHg3ZiwgMHgzMiwgMHg3ZCwgMHhiOCwgMHg3YywgMHgwYiwgMHgxMiwgMHgwMiwgMHgzMCwgMHg1MCwgMHgwNiwgMHg5MCwgMHgwNCwKLTB4MTAsIDB4NzQsIDB4NDAsIDB4ZjAsIDB4N2YsIDB4MzUsIDB4N2QsIDB4MzIsIDB4MTIsIDB4MDMsIDB4M2YsIDB4NTAsIDB4MDksIDB4OTAsIDB4MTAsIDB4MDQsCi0weGUwLCAweDU0LCAweGY3LCAweGYwLCAweGQyLCAweDA2LCAweGU1LCAweDM1LCAweGQzLCAweDk0LCAweDJkLCAweDQwLCAweDMwLCAweDMwLCAweDFiLCAweDJkLAotMHhjMiwgMHgxYiwgMHhhMiwgMHgxOCwgMHg5MiwgMHgxYSwgMHgyMCwgMHgxYSwgMHgyNCwgMHg5MCwgMHgwNCwgMHgwOSwgMHhlMCwgMHg1NCwgMHhkZCwgMHhmMCwKLTB4OTAsIDB4MTAsIDB4MDQsIDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsIDB4YzIsIDB4NjEsIDB4ZDIsIDB4MDMsIDB4MjIsIDB4ZTQsIDB4ZjUsIDB4MzUsIDB4YTIsCi0weDE4LCAweDkyLCAweDFhLCAweDMwLCAweDFhLCAweDA3LCAweDkwLCAweDA0LCAweDA5LCAweGUwLCAweDQ0LCAweDIyLCAweGYwLCAweDIyLCAweDIyLCAweDIyLAotMHhjMiwgMHg0YiwgMHhjMiwgMHg0YywgMHhlNSwgMHg0NCwgMHgxMiwgMHgwMiwgMHg1NywgMHgxNCwgMHg0MiwgMHgwMCwgMHgxNCwgMHhkNSwgMHgwNCwgMHgxNCwKLTB4ZDEsIDB4MDgsIDB4MTQsIDB4YWMsIDB4MTAsIDB4MTQsIDB4NTYsIDB4MjAsIDB4MTQsIDB4NzYsIDB4NjAsIDB4MTQsIDB4ODcsIDB4YTAsIDB4MDAsIDB4MDAsCi0weDE0LCAweGQ3LCAweDg1LCAweDQ4LCAweDQzLCAweDg1LCAweDRhLCAweDQyLCAweDg1LCAweDRjLCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDYwLAotMHgwMywgMHgwMiwgMHgxNCwgMHhkNywgMHg4MCwgMHgxYiwgMHhlNSwgMHg0OCwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg0MywgMHhlNSwgMHg0YSwgMHhjNCwKLTB4NTQsIDB4MGYsIDB4ZjUsIDB4NDIsIDB4ZTUsIDB4NGMsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NWUsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsIDB4NzAsCi0weDY2LCAweDUzLCAweDQzLCAweDBmLCAweDgwLCAweDYxLCAweDg1LCAweDQ5LCAweDQzLCAweDg1LCAweDRiLCAweDQyLCAweDg1LCAweDRkLCAweDVlLCAweGU1LAotMHg0NywgMHg2NCwgMHgwNiwgMHg3MCwgMHg1MiwgMHg4MCwgMHgxYiwgMHhlNSwgMHg0OSwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg0MywgMHhlNSwgMHg0YiwKLTB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NDIsIDB4ZTUsIDB4NGQsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NWUsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsCi0weDcwLCAweDM1LCAweGU1LCAweDQzLCAweDU0LCAweDBmLCAweDQ0LCAweDEwLCAweGY1LCAweDQzLCAweDgwLCAweDJiLCAweGU1LCAweDQ3LCAweGI0LCAweDA0LAotMHgwNiwgMHg1MywgMHg1ZSwgMHhmYiwgMHg3NSwgMHg0MiwgMHgwOSwgMHhlNSwgMHg0NywgMHhiNCwgMHgwNSwgMHgwNiwgMHg0MywgMHg1ZSwgMHgwNCwgMHg3NSwKLTB4NDIsIDB4MDksIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDYsIDB4MTAsIDB4ZTUsIDB4NDMsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MzAsIDB4ZjUsIDB4NDMsIDB4ODAsCi0weDA2LCAweGQyLCAweDRiLCAweDgwLCAweDAyLCAweGQyLCAweDRjLCAweGU0LCAweGY1LCAweDJhLCAweGU1LCAweDQyLCAweGM0LCAweDU0LCAweGYwLCAweGZmLAotMHhlNSwgMHg0MywgMHg1NCwgMHgwZiwgMHg0ZiwgMHhmNSwgMHg1ZiwgMHhkMiwgMHg2MCwgMHgyMiwgMHhlNSwgMHg0NywgMHg2MCwgMHgxYSwgMHgyNCwgMHhjMCwKLTB4NjAsIDB4MGEsIDB4MjQsIDB4MzUsIDB4NzAsIDB4MDksIDB4MTIsIDB4MTksIDB4NWYsIDB4MTIsIDB4MTUsIDB4MDksIDB4MTIsIDB4MTksIDB4NWYsIDB4MTIsCi0weDE1LCAweDA5LCAweGMyLCAweGFmLCAweGMyLCAweDA0LCAweGQyLCAweGFmLCAweDIyLCAweGMyLCAweGFmLCAweDkwLCAweDA0LCAweDE0LCAweGUwLCAweDU0LAotMHgwZSwgMHg2MCwgMHgwNCwgMHhkMiwgMHgxYywgMHg4MCwgMHgwOCwgMHhlNSwgMHg0ZSwgMHg0NSwgMHg0ZiwgMHgyNCwgMHhmZiwgMHg5MiwgMHgxYywgMHhkMiwKLTB4YWYsIDB4OTAsIDB4MDQsIDB4MTQsIDB4ZTAsIDB4YTIsIDB4ZTQsIDB4OTIsIDB4MWQsIDB4NzQsIDB4MWUsIDB4ZjAsIDB4ZTUsIDB4NWYsIDB4NTQsIDB4MGYsCi0weGY1LCAweDJkLCAweGU1LCAweDJhLCAweDcwLCAweDEzLCAweDMwLCAweDFjLCAweDA1LCAweGU1LCAweDVmLCAweDIwLCAweGU1LCAweDBiLCAweDMwLCAweDFkLAotMHgyOSwgMHhlNSwgMHg1ZiwgMHg1NCwgMHgzMCwgMHg2NCwgMHgzMCwgMHg3MCwgMHgyMSwgMHhlNSwgMHgyYSwgMHg3MCwgMHgxNSwgMHhlNSwgMHgzNCwgMHhjMywKLTB4OTQsIDB4MDMsIDB4NDAsIDB4MDksIDB4ZTUsIDB4MzAsIDB4NjAsIDB4MDUsIDB4NzUsIDB4MmEsIDB4MDUsIDB4ODAsIDB4MDcsIDB4NzUsIDB4MmEsIDB4MGMsCi0weDgwLCAweDAyLCAweDE1LCAweDJhLCAweGQyLCAweDZjLCAweGQyLCAweDZkLCAweDgwLCAweDBmLCAweGU1LCAweDVmLCAweDMwLCAweGU2LCAweDA2LCAweGMyLAotMHg2YywgMHhkMiwgMHg2ZCwgMHg4MCwgMHgwNCwgMHhkMiwgMHg2YywgMHhjMiwgMHg2ZCwgMHhlNSwgMHg0NywgMHg2NCwgMHgwMywgMHg3MCwgMHgyMSwgMHgzMCwKLTB4NGIsIDB4MDYsIDB4YzIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4ODAsIDB4MTgsIDB4ZTUsIDB4MmEsIDB4NzAsIDB4MDMsIDB4MzAsIDB4NGMsIDB4MTEsIDB4YzIsCi0weDRjLCAweGU1LCAweDJhLCAweDcwLCAweDA1LCAweDc1LCAweDJhLCAweDA3LCAweDgwLCAweDAyLCAweDE1LCAweDJhLCAweGQyLCAweDZjLCAweGQyLCAweDZkLAotMHhlNSwgMHg0NywgMHhiNCwgMHgwOSwgMHgxNCwgMHhlNSwgMHg0NCwgMHgyMCwgMHhlMywgMHgwYiwgMHhlNSwgMHgzYSwgMHg2NCwgMHgwMiwgMHg2MCwgMHgwNSwKLTB4ZTUsIDB4M2EsIDB4YjQsIDB4MDMsIDB4MDQsIDB4YzIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MGEsIDB4MTMsIDB4ZTUsIDB4M2EsCi0weGI0LCAweDAxLCAweDA2LCAweGMyLCAweDZjLCAweGQyLCAweDZkLCAweDgwLCAweDA4LCAweGU1LCAweDNhLCAweDcwLCAweDA0LCAweGQyLCAweDZjLCAweGMyLAotMHg2ZCwgMHgyMCwgMHg2OSwgMHgwNywgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMCwgMHgwMiwgMHhiMiwgMHg2OCwgMHgyMCwgMHg2YiwgMHgwNywgMHhlNSwgMHg1ZSwKLTB4MjAsIDB4ZTEsIDB4MDIsIDB4YjIsIDB4NmEsIDB4MjAsIDB4NmQsIDB4MDcsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTIsIDB4MDIsIDB4YjIsIDB4NmMsIDB4NzUsCi0weDJlLCAweDQwLCAweDIwLCAweDY5LCAweDA0LCAweGEyLCAweDY4LCAweDgwLCAweDQ1LCAweDMwLCAweDY4LCAweDA2LCAweGU1LCAweDQ2LCAweGEyLCAweGUyLAotMHg4MCwgMHgzYywgMHgzMCwgMHgxOSwgMHgxYywgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMiwgMHgwNCwgMHg3ZiwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwKLTB4ZTUsIDB4MmYsIDB4YjQsIDB4MTksIDB4MDQsIDB4N2UsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2UsIDB4MDAsIDB4ZWUsIDB4NmYsIDB4MjQsIDB4ZmYsIDB4ODAsCi0weDFkLCAweGU1LCAweDVlLCAweDIwLCAweGUyLCAweDA0LCAweDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweGU1LCAweDQ2LCAweDU0LCAweGYwLAotMHhmZSwgMHhiZSwgMHhmMCwgMHgwNCwgMHg3ZSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZSwgMHgwMCwgMHhlZSwgMHg2ZiwgMHgyNCwgMHhmZiwgMHg5MiwgMHg3MywKLTB4OTIsIDB4NzIsIDB4MjAsIDB4NmIsIDB4MDQsIDB4YTIsIDB4NmEsIDB4ODAsIDB4NDUsIDB4MzAsIDB4NmEsIDB4MDYsIDB4ZTUsIDB4NDYsIDB4YTIsIDB4ZTIsCi0weDgwLCAweDNjLCAweDMwLCAweDE5LCAweDFjLCAweGU1LCAweDVlLCAweDIwLCAweGUwLCAweDA0LCAweDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmLCAweDAwLAotMHhlNSwgMHgyZiwgMHhiNCwgMHgxOSwgMHgwNCwgMHg3ZSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZSwgMHgwMCwgMHhlZSwgMHg2ZiwgMHgyNCwgMHhmZiwgMHg4MCwKLTB4MWQsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTAsIDB4MDQsIDB4N2YsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4NTQsIDB4ZjAsCi0weGZlLCAweGJlLCAweGYwLCAweDA0LCAweDdlLCAweDAxLCAweDgwLCAweDAyLCAweDdlLCAweDAwLCAweGVlLCAweDZmLCAweDI0LCAweGZmLCAweDkyLCAweDc1LAotMHg5MiwgMHg3NCwgMHgyMCwgMHg2ZCwgMHgwNCwgMHhhMiwgMHg2YywgMHg4MCwgMHg2NCwgMHhlNSwgMHg0NywgMHg2NCwgMHgwYSwgMHg3MCwgMHgxOSwgMHhlNSwKLTB4M2EsIDB4YjQsIDB4MDEsIDB4MDYsIDB4ZTUsIDB4NDYsIDB4YTIsIDB4ZTMsIDB4ODAsIDB4NTMsIDB4ZTUsIDB4NDYsIDB4MjAsIDB4ZTQsIDB4MDMsIDB4MzAsCi0weGU1LCAweDAzLCAweGQzLCAweDgwLCAweDAxLCAweGMzLCAweDgwLCAweDQ1LCAweDMwLCAweDZjLCAweDA2LCAweGU1LCAweDQ2LCAweGEyLCAweGUyLCAweDgwLAotMHgzYywgMHgzMCwgMHgxOSwgMHgxYywgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMSwgMHgwNCwgMHg3ZiwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHhlNSwKLTB4MmYsIDB4YjQsIDB4MTksIDB4MDQsIDB4N2UsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2UsIDB4MDAsIDB4ZWUsIDB4NmYsIDB4MjQsIDB4ZmYsIDB4ODAsIDB4MWQsCi0weGU1LCAweDVlLCAweDIwLCAweGUxLCAweDA0LCAweDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweGU1LCAweDQ2LCAweDU0LCAweGYwLCAweGZlLAotMHhiZSwgMHhmMCwgMHgwNCwgMHg3ZSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZSwgMHgwMCwgMHhlZSwgMHg2ZiwgMHgyNCwgMHhmZiwgMHg5MiwgMHg3MSwgMHg5MiwKLTB4NzAsIDB4OTAsIDB4MTAsIDB4MDAsIDB4ZTAsIDB4OTAsIDB4MTAsIDB4MmMsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MDMsIDB4ZTAsIDB4YzMsIDB4OTQsIDB4MzAsCi0weDQwLCAweDE0LCAweGEyLCAweDcxLCAweDkyLCAweDc3LCAweGEyLCAweDcwLCAweDkyLCAweDc2LCAweGU1LCAweDJlLCAweDEzLCAweDEzLCAweDU0LCAweDNmLAotMHhmNSwgMHgyZSwgMHhjMiwgMHg3NywgMHhkMiwgMHg3NiwgMHg5MCwgMHgxMCwgMHgyZiwgMHhlNSwgMHgyZSwgMHhmMCwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNiwKLTB4NzAsIDB4NDYsIDB4OTAsIDB4MDIsIDB4MjksIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4ZTUsIDB4NDMsIDB4YzQsIDB4NTQsIDB4MGYsIDB4MTQsIDB4NjAsCi0weDE0LCAweDI0LCAweGZlLCAweDYwLCAweDFmLCAweDI0LCAweDAzLCAweDYwLCAweDAzLCAweDAyLCAweDE5LCAweDVlLCAweDkwLCAweDAyLCAweDI4LCAweGUwLAotMHgzMCwgMHg0NywgMHgwZCwgMHg4MCwgMHgwNywgMHg5MCwgMHgwMiwgMHgyOCwgMHhlMCwgMHgyMCwgMHg0NywgMHgwNCwgMHg1NCwgMHhmZSwgMHhmMCwgMHgyMiwKLTB4NDQsIDB4MDEsIDB4ZjAsIDB4MjIsIDB4ZTUsIDB4NDYsIDB4MzAsIDB4ZTIsIDB4MDQsIDB4N2YsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4OTAsCi0weDAyLCAweDI4LCAweGUwLCAweDU0LCAweGZlLCAweDRmLCAweGYwLCAweDIyLCAweGU1LCAweDQ3LCAweDY0LCAweDA3LCAweDYwLCAweDBmLCAweGU1LCAweDQ3LAotMHg2NCwgMHgwOCwgMHg2MCwgMHgwOSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwOSwgMHg2MCwgMHgwMywgMHgwMiwgMHgxOCwgMHgyNywgMHhlNCwgMHhmNSwgMHgyNywKLTB4OTAsIDB4MDIsIDB4MjksIDB4ZTAsIDB4NTQsIDB4ZmMsIDB4ZjAsIDB4ZTUsIDB4M2EsIDB4MTQsIDB4NjAsIDB4MmQsIDB4MTQsIDB4NjAsIDB4MmUsIDB4MTQsCi0weDYwLCAweDM2LCAweDI0LCAweGZjLCAweDYwLCAweDVmLCAweDI0LCAweGY5LCAweDYwLCAweDFmLCAweDI0LCAweDBlLCAweDcwLCAweDY5LCAweGU1LCAweDQ2LAotMHgxMywgMHgxMywgMHg1NCwgMHgzZiwgMHg3NSwgMHhmMCwgMHgwMywgMHg4NCwgMHhhZiwgMHhmMCwgMHgyMCwgMHg0NywgMHgwNCwgMHg3ZSwgMHgwMSwgMHg4MCwKLTB4MDIsIDB4N2UsIDB4MDAsIDB4ZWYsIDB4NmUsIDB4MjQsIDB4ZmYsIDB4ODAsIDB4NDUsIDB4YTIsIDB4NDcsIDB4ODAsIDB4NDEsIDB4ZTUsIDB4NDYsIDB4MzAsCi0weGUyLCAweDAzLCAweGQzLCAweDgwLCAweDI3LCAweGMzLCAweDgwLCAweDI0LCAweGU1LCAweDQ2LCAweDMwLCAweGUyLCAweDBkLCAweDU0LCAweDM4LCAweGMzLAotMHg5NCwgMHgzMCwgMHg1MCwgMHgwNiwgMHg3ZSwgMHgwMCwgMHg3ZiwgMHgwMSwgMHg4MCwgMHgwNCwgMHg3ZSwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgyMCwgMHg0NywKLTB4MDQsIDB4N2QsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2QsIDB4MDAsIDB4ZWYsIDB4NmQsIDB4NGUsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4MzgsIDB4YTIsIDB4NDcsCi0weGIzLCAweDkyLCAweDM5LCAweDgwLCAweDE5LCAweGU1LCAweDQ2LCAweDMwLCAweGUyLCAweDAzLCAweGQzLCAweDgwLCAweDAxLCAweGMzLCAweDkyLCAweDM5LAotMHhhMiwgMHg0NywgMHhiMywgMHg5MiwgMHgzOCwgMHg4MCwgMHgwNywgMHhhMiwgMHg0NywgMHhiMywgMHg5MiwgMHgzOCwgMHg5MiwgMHgzOSwgMHg5MCwgMHgwMiwKLTB4MjgsIDB4ZTAsIDB4NTQsIDB4ZmMsIDB4MDIsIDB4MTksIDB4NWIsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MGMsIDB4NjAsIDB4MDksIDB4ZTUsIDB4NDcsIDB4NjQsCi0weDBiLCAweDYwLCAweDAzLCAweDAyLCAweDE4LCAweGM2LCAweGU0LCAweGY1LCAweDI3LCAweDkwLCAweDAyLCAweDI5LCAweGUwLCAweDU0LCAweGZkLCAweGYwLAotMHhlNSwgMHgzYSwgMHgxNCwgMHg2MCwgMHgyYiwgMHgxNCwgMHg2MCwgMHgyZSwgMHgxNCwgMHg2MCwgMHgzOCwgMHgyNCwgMHhmYywgMHg2MCwgMHg1YywgMHgyNCwKLTB4ZjksIDB4NjAsIDB4MWQsIDB4MjQsIDB4MGUsIDB4NzAsIDB4NjEsIDB4ZTUsIDB4NDYsIDB4MTMsIDB4MTMsIDB4NTQsIDB4M2YsIDB4NzUsIDB4ZjAsIDB4MDMsCi0weDg0LCAweGFmLCAweGYwLCAweDIwLCAweDQ3LCAweDA0LCAweDdlLCAweDAxLCAweDgwLCAweDAyLCAweDdlLCAweDAwLCAweGVmLCAweDZlLCAweDgwLCAweDM1LAotMHhhMiwgMHg0NywgMHg5MiwgMHgzOSwgMHg4MCwgMHg0NywgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwMywgMHhkMywgMHg4MCwgMHgwMSwgMHhjMywgMHg5MiwKLTB4MzksIDB4ODAsIDB4M2EsIDB4ZTUsIDB4NDYsIDB4MzAsIDB4ZTIsIDB4MGQsIDB4NTQsIDB4MzgsIDB4YzMsIDB4OTQsIDB4MzAsIDB4NTAsIDB4MDYsIDB4N2UsCi0weDAwLCAweDdmLCAweDAxLCAweDgwLCAweDA0LCAweDdlLCAweDAwLCAweDdmLCAweDAwLCAweDIwLCAweDQ3LCAweDA0LCAweDdkLCAweDAxLCAweDgwLCAweDAyLAotMHg3ZCwgMHgwMCwgMHhlZiwgMHg2ZCwgMHg0ZSwgMHgyNCwgMHhmZiwgMHg5MiwgMHgzOSwgMHg4MCwgMHgxMiwgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwMywKLTB4ZDMsIDB4ODAsIDB4MDEsIDB4YzMsIDB4OTIsIDB4MzksIDB4ODAsIDB4MDUsIDB4YTIsIDB4NDcsIDB4YjMsIDB4OTIsIDB4MzksIDB4OTAsIDB4MDIsIDB4MjgsCi0weGUwLCAweDU0LCAweGZkLCAweDAyLCAweDE5LCAweDViLCAweGU1LCAweDQ3LCAweDY0LCAweDBkLCAweDYwLCAweDAzLCAweDAyLCAweDE5LCAweDVlLCAweGY1LAotMHgyNywgMHg5MCwgMHgwMiwgMHgyOSwgMHhlMCwgMHg1NCwgMHhlZiwgMHhmMCwgMHhlNSwgMHgzYSwgMHgxNCwgMHg2MCwgMHgyYiwgMHgxNCwgMHg2MCwgMHgyZSwKLTB4MTQsIDB4NjAsIDB4MzgsIDB4MjQsIDB4ZmMsIDB4NjAsIDB4NWMsIDB4MjQsIDB4ZjksIDB4NjAsIDB4MWQsIDB4MjQsIDB4MGUsIDB4NzAsIDB4NjEsIDB4ZTUsCi0weDQ2LCAweDEzLCAweDEzLCAweDU0LCAweDNmLCAweDc1LCAweGYwLCAweDAzLCAweDg0LCAweGFmLCAweGYwLCAweDIwLCAweDQ3LCAweDA0LCAweDdlLCAweDAxLAotMHg4MCwgMHgwMiwgMHg3ZSwgMHgwMCwgMHhlZiwgMHg2ZSwgMHg4MCwgMHgzNSwgMHhhMiwgMHg0NywgMHg5MiwgMHgzYywgMHg4MCwgMHg0NywgMHhlNSwgMHg0NiwKLTB4MzAsIDB4ZTIsIDB4MDMsIDB4ZDMsIDB4ODAsIDB4MDEsIDB4YzMsIDB4OTIsIDB4M2MsIDB4ODAsIDB4M2EsIDB4ZTUsIDB4NDYsIDB4MzAsIDB4ZTIsIDB4MGQsCi0weDU0LCAweDM4LCAweGMzLCAweDk0LCAweDMwLCAweDUwLCAweDA2LCAweDdlLCAweDAwLCAweDdmLCAweDAxLCAweDgwLCAweDA0LCAweDdlLCAweDAwLCAweDdmLAotMHgwMCwgMHgyMCwgMHg0NywgMHgwNCwgMHg3ZCwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZCwgMHgwMCwgMHhlZiwgMHg2ZCwgMHg0ZSwgMHgyNCwgMHhmZiwgMHg5MiwKLTB4M2MsIDB4ODAsIDB4MTIsIDB4ZTUsIDB4NDYsIDB4MzAsIDB4ZTIsIDB4MDMsIDB4ZDMsIDB4ODAsIDB4MDEsIDB4YzMsIDB4OTIsIDB4M2MsIDB4ODAsIDB4MDUsCi0weGEyLCAweDQ3LCAweGIzLCAweDkyLCAweDNjLCAweDkwLCAweDAyLCAweDI4LCAweGUwLCAweDU0LCAweGVmLCAweDQ1LCAweDI3LCAweGYwLCAweDIyLCAweGU1LAotMHg0NywgMHg2NCwgMHgwYiwgMHg3MCwgMHgxYywgMHg5MCwgMHgwMiwgMHgyOSwgMHhlMCwgMHg1NCwgMHhlYiwgMHhmMCwgMHgzMCwgMHg0NywgMHgwNCwgMHhhZiwKLTB4NDUsIDB4ODAsIDB4MDUsIDB4ZTUsIDB4NDUsIDB4NjQsIDB4MTQsIDB4ZmYsIDB4OTAsIDB4MDIsIDB4MjgsIDB4ZTAsIDB4NTQsIDB4ZWIsIDB4NGYsIDB4ZjAsCi0weDIyLCAweGU0LCAweDkwLCAweDAyLCAweDI5LCAweGYwLCAweDMwLCAweDQ3LCAweDA0LCAweGFmLCAweDQ1LCAweDgwLCAweDA0LCAweGU1LCAweDQ1LCAweGY0LAotMHhmZiwgMHg5MCwgMHgwMiwgMHgyOCwgMHhlZiwgMHhmMCwgMHgyMiwgMHg4ZiwgMHg1MCwgMHhkMiwgMHg1OSwgMHgyMiwgMHg4ZiwgMHg1NCwgMHhkMiwgMHg1OCwKLTB4MjIsIDB4ZTQsIDB4ZjUsIDB4MzcsIDB4YzIsIDB4YWYsIDB4ZTUsIDB4NTEsIDB4MTQsIDB4NjAsIDB4NGEsIDB4MTQsIDB4NjAsIDB4NmIsIDB4MjQsIDB4MDIsCi0weDYwLCAweDAzLCAweDAyLCAweDFiLCAweDEyLCAweGQyLCAweDU5LCAweDc1LCAweDU1LCAweDAxLCAweDIwLCAweDFhLCAweDFjLCAweDkwLCAweDAyLCAweDA4LAotMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHhlMCwgMHgyMCwgMHhlMSwgMHgyMywgMHg5MCwgMHgwNCwgMHgzNCwgMHhlMCwgMHhiNCwgMHgwMiwgMHgxYywgMHhhMywKLTB4ZTAsIDB4YjQsIDB4MDIsIDB4MTcsIDB4YTMsIDB4ZTAsIDB4YjQsIDB4MDIsIDB4MTIsIDB4N2YsIDB4MjAsIDB4MTIsIDB4MTksIDB4OTcsIDB4OTAsIDB4MTAsCi0weDA0LCAweGUwLCAweDU0LCAweGYzLCAweGYwLCAweDc1LCAweDUxLCAweDAxLCAweDAyLCAweDFiLCAweDEyLCAweGU1LCAweDUwLCAweDcwLCAweDA2LCAweDc1LAotMHgzNywgMHgwMywgMHgwMiwgMHgxYiwgMHgxMiwgMHg5MCwgMHgxMiwgMHgwMCwgMHhlMCwgMHg1NCwgMHgwMywgMHg3MCwgMHgxNSwgMHg3ZiwgMHgyMCwgMHgxMiwKLTB4MTksIDB4OTcsIDB4MjAsIDB4MWEsIDB4MDcsIDB4OTAsIDB4MDIsIDB4MDgsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4NzUsIDB4NTEsIDB4MDIsIDB4MDIsCi0weDFiLCAweDEyLCAweGU1LCAweDUwLCAweDcwLCAweDAzLCAweDAyLCAweDFiLCAweDBkLCAweDIwLCAweDFhLCAweDE1LCAweDkwLCAweDAyLCAweDA4LCAweGUwLAotMHgzMCwgMHhlMywgMHgwMywgMHgwMiwgMHgxYiwgMHgwOSwgMHg5MCwgMHgwNCwgMHgzNywgMHhlMCwgMHg2NCwgMHgyMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgxYiwKLTB4MDksIDB4OTAsIDB4MTIsIDB4MDQsIDB4NzQsIDB4MGEsIDB4ZjAsIDB4ZTUsIDB4NTgsIDB4YjQsIDB4NzIsIDB4MTUsIDB4ZTUsIDB4NTksIDB4YjQsIDB4MzUsCi0weDEwLCAweGU0LCAweDkwLCAweDA1LCAweDAwLCAweGYwLCAweGEzLCAweDc0LCAweDA4LCAweGYwLCAweGEzLCAweDc0LCAweDAxLCAweGYwLCAweDc0LCAweDAzLAotMHhmMCwgMHg3ZiwgMHgwMSwgMHgxMiwgMHgwMywgMHgzMCwgMHg5MCwgMHgxMywgMHgyOCwgMHhlMCwgMHg1NCwgMHhmMCwgMHhmMCwgMHhhMywgMHhlMCwgMHg1NCwKLTB4ZjAsIDB4ZjAsIDB4ZTUsIDB4NTksIDB4YjQsIDB4MzUsIDB4MTQsIDB4ZTUsIDB4M2MsIDB4ZjQsIDB4NjAsIDB4MDYsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4ZjMsCi0weDgwLCAweDE0LCAweDkwLCAweDEzLCAweDJhLCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweDgwLCAweDE0LCAweGU1LCAweDNjLCAweGY0LCAweDkwLCAweDEzLAotMHgyYSwgMHg2MCwgMHgwOCwgMHhlMCwgMHg1NCwgMHhmMiwgMHg0NSwgMHgzYywgMHhmMCwgMHg4MCwgMHgwNCwgMHhlMCwgMHg1NCwgMHhmYSwgMHhmMCwgMHgyMCwKLTB4MWEsIDB4MDcsIDB4OTAsIDB4MDQsIDB4MDEsIDB4ZTAsIDB4NDQsIDB4MTAsIDB4ZjAsIDB4ZTUsIDB4MzQsIDB4YzMsIDB4OTQsIDB4MDMsIDB4NDAsIDB4MDksCi0weGU1LCAweDMwLCAweDcwLCAweDA1LCAweDc1LCAweDhjLCAweDQwLCAweDgwLCAweDAzLCAweDc1LCAweDhjLCAweDgwLCAweDkwLCAweDA0LCAweDAxLCAweGUwLAotMHg1NCwgMHhmZCwgMHhmMCwgMHgyMCwgMHgxYSwgMHgwNywgMHg5MCwgMHgxMiwgMHgwNCwgMHhlMCwgMHg0NCwgMHgwNCwgMHhmMCwgMHhlNSwgMHg1OSwgMHhiNCwKLTB4MjgsIDB4MDYsIDB4OTAsIDB4MDEsIDB4MGQsIDB4ZTAsIDB4ZjUsIDB4MzEsIDB4ZTUsIDB4MzQsIDB4YzMsIDB4OTQsIDB4MDIsIDB4NDAsIDB4MTQsIDB4OTAsCi0weDAxLCAweDBkLCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweGU1LCAweDU5LCAweDY0LCAweDM1LCAweDYwLCAweDA3LCAweDkwLCAweDEyLCAweDA0LCAweGUwLAotMHg1NCwgMHhmZCwgMHhmMCwgMHhlNSwgMHgzNCwgMHhjMywgMHg5NCwgMHgwMywgMHg0MCwgMHgxNCwgMHgyMCwgMHgwMiwgMHgxMSwgMHgyMCwgMHgwMywgMHgwZSwKLTB4OTAsIDB4MDEsIDB4MGQsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4MGMsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4NzUsIDB4MzcsCi0weDAxLCAweDc1LCAweDU1LCAweDAyLCAweGU0LCAweGY1LCAweDUxLCAweDgwLCAweDA5LCAweGU1LCAweDUwLCAweDcwLCAweDA1LCAweDc1LCAweDM3LCAweDAzLAotMHhmNSwgMHg1MSwgMHhlNSwgMHgzNywgMHg2MCwgMHgxOCwgMHhjMiwgMHgwMSwgMHhlNCwgMHhmNSwgMHg1MSwgMHhjMiwgMHg1OSwgMHgyMCwgMHgxYSwgMHgwZSwKLTB4YWQsIDB4MzcsIDB4YWYsIDB4NDAsIDB4MTIsIDB4MWMsIDB4MWIsIDB4ZTUsIDB4MzcsIDB4YjQsIDB4MDMsIDB4MDIsIDB4ZDIsIDB4MDMsIDB4ZDIsIDB4YWYsCi0weDIyLCAweGMyLCAweGFmLCAweDMwLCAweDAxLCAweDBlLCAweGU0LCAweGY1LCAweDUxLCAweGMyLCAweDU5LCAweGMyLCAweDAxLCAweDdkLCAweDAyLCAweGFmLAotMHg0MCwgMHgxMiwgMHgxYywgMHgxYiwgMHhlNSwgMHg1MiwgMHgxNCwgMHg2MCwgMHg1YywgMHgxNCwgMHg2MCwgMHgzYSwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywKLTB4MDIsIDB4MWMsIDB4MTgsIDB4ZTUsIDB4MzQsIDB4YzMsIDB4OTQsIDB4MDMsIDB4NDAsIDB4MGMsIDB4OTAsIDB4MDEsIDB4MGMsIDB4ZTAsIDB4NDQsIDB4MDIsCi0weGYwLCAweGEzLCAweGUwLCAweDQ0LCAweDA0LCAweGYwLCAweGU1LCAweDM0LCAweGMzLCAweDk0LCAweDAyLCAweDQwLCAweDEzLCAweDkwLCAweDEyLCAweDA0LAotMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg3ZiwgMHgzMiwgMHgxMiwgMHgwMywgMHgzMCwgMHg5MCwgMHgwMSwgMHgwZCwgMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwKLTB4NzUsIDB4NTIsIDB4MDIsIDB4NzUsIDB4NTUsIDB4MDMsIDB4ZTUsIDB4NTksIDB4YjQsIDB4MjgsIDB4MDYsIDB4OTAsIDB4MDEsIDB4MGQsIDB4ZTUsIDB4MzEsCi0weGYwLCAweDkwLCAweDEyLCAweDA0LCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweDdmLCAweDIwLCAweDEyLCAweDE5LCAweDljLCAweDc1LCAweDUyLCAweDAxLAotMHg3NSwgMHg1NSwgMHgwMywgMHg4MCwgMHg3MywgMHhlNSwgMHg1NCwgMHg3MCwgMHg2ZiwgMHg5MCwgMHgwNCwgMHgwMSwgMHhlMCwgMHg0NCwgMHgwZSwgMHhmMCwKLTB4MjAsIDB4MWEsIDB4MDQsIDB4ZTAsIDB4NTQsIDB4ZWYsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4OGMsIDB4OTAsIDB4MTMsIDB4MjgsIDB4ZTAsIDB4NDQsIDB4MGYsCi0weGYwLCAweGEzLCAweGUwLCAweDQ0LCAweDBmLCAweGYwLCAweGEzLCAweGUwLCAweDQ0LCAweDA1LCAweGYwLCAweDkwLCAweDEyLCAweDA0LCAweDc0LCAweDAzLAotMHhmMCwgMHhlNSwgMHg1OCwgMHhiNCwgMHg3MiwgMHgxNiwgMHhlNSwgMHg1OSwgMHhiNCwgMHgzNSwgMHgxMSwgMHg5MCwgMHgwNSwgMHgwMCwgMHg3NCwgMHhlMiwKLTB4ZjAsIDB4YTMsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4N2YsIDB4MDEsIDB4MTIsIDB4MDMsCi0weDMwLCAweDIwLCAweDFhLCAweDA3LCAweDkwLCAweDAyLCAweDA4LCAweGUwLCAweDQ0LCAweDA1LCAweGYwLCAweDkwLCAweDEwLCAweDA0LCAweGUwLCAweDQ0LAotMHgwYywgMHhmMCwgMHhlNCwgMHhmNSwgMHg1MiwgMHhmNSwgMHg1NSwgMHgzMCwgMHgwMiwgMHgwOSwgMHhjMiwgMHgwMiwgMHg3ZCwgMHgwMSwgMHhhZiwgMHg0MSwKLTB4MTIsIDB4MWMsIDB4MWIsIDB4MzAsIDB4MDMsIDB4MDIsIDB4YzIsIDB4MDMsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4ZWYsIDB4ZjQsIDB4NjAsIDB4MmQsIDB4ZTQsCi0weGZlLCAweDc0LCAweDE0LCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDcwLCAweGY1LCAweDgzLCAweGUwLCAweGI0LCAweGZmLCAweDE5LCAweDc0LAotMHgxNCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3MCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHg3NCwgMHgxYywgMHgyZSwgMHhmNSwgMHg4MiwKLTB4ZTQsIDB4MzQsIDB4NzAsIDB4ZjUsIDB4ODMsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4MGUsIDB4YmUsIDB4MDQsIDB4ZDUsIDB4MjIsIDB4MjIsIDB4MjIsIDB4MzAsCi0weDFhLCAweDc3LCAweDkwLCAweDA0LCAweDM3LCAweGUwLCAweDIwLCAweGU1LCAweDZjLCAweDkwLCAweDA0LCAweDI4LCAweGUwLCAweGY1LCAweDM4LCAweGEzLAotMHhlMCwgMHhmNSwgMHgzNywgMHhmNSwgMHgzOSwgMHhlNCwgMHhmNSwgMHgyNSwgMHhlNSwgMHgzOSwgMHg3NSwgMHhmMCwgMHg4MCwgMHhhNCwgMHgyNCwgMHgwMCwKLTB4ZmYsIDB4ZTUsIDB4ZjAsIDB4MzQsIDB4ODAsIDB4ZmUsIDB4ZTUsIDB4MzcsIDB4NjUsIDB4MzksIDB4NzAsIDB4MDUsIDB4ZmMsIDB4N2QsIDB4MjgsIDB4ODAsCi0weDA0LCAweDdjLCAweDAwLCAweDdkLCAweDAwLCAweGVmLCAweDJkLCAweGZmLCAweGVlLCAweDNjLCAweGZlLCAweDEyLCAweDFjLCAweGNhLCAweDUwLCAweDA3LAotMHg5MCwgMHgwMSwgMHgxNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHhlNSwgMHgzOSwgMHg2NSwgMHgzOCwgMHg2MCwgMHgxMCwgMHhlNCwgMHgyNSwgMHgzOSwKLTB4ZmYsIDB4ZTQsIDB4MzQsIDB4ODAsIDB4OGYsIDB4ODIsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4MzksIDB4ODAsIDB4YmIsIDB4OTAsIDB4MDQsIDB4MTAsCi0weDc0LCAweDAxLCAweGYwLCAweDkwLCAweDA0LCAweDI4LCAweGU1LCAweDM4LCAweGYwLCAweGEzLCAweGU1LCAweDM3LCAweGYwLCAweDkwLCAweDA0LCAweDExLAotMHg3NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHg4ZCwgMHhjMiwgMHgwNiwgMHhkMiwgMHgxYiwgMHgyMiwgMHhlNSwgMHgyNSwgMHhjMywgMHg5NCwgMHgwNiwgMHg1MCwKLTB4MTksIDB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4YjQsIDB4ZmYsIDB4MDcsIDB4MDUsIDB4MjUsIDB4ZTQsIDB4ZjUsIDB4MjQsIDB4ODAsIDB4MmUsCi0weGU0LCAweGY1LCAweDI1LCAweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGYwLCAweDgwLCAweDI0LCAweGU1LCAweDI0LCAweDc1LCAweGYwLCAweDA2LCAweDg0LAotMHg3NCwgMHgwOCwgMHgyNSwgMHhmMCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgxMCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZCwgMHg4ZiwgMHg4MiwgMHg4ZSwKLTB4ODMsIDB4ZTAsIDB4NmQsIDB4NzAsIDB4MDYsIDB4MDUsIDB4MjUsIDB4MDUsIDB4MjQsIDB4ODAsIDB4MDMsIDB4ZTQsIDB4ZjUsIDB4MjUsIDB4MGYsIDB4YmYsCi0weDAwLCAweDAxLCAweDBlLCAweGVmLCAweDU0LCAweDdmLCAweDYwLCAweDA3LCAweGU1LCAweDI1LCAweGMzLCAweDk0LCAweDJhLCAweDQwLCAweGFiLCAweGU1LAotMHgyNSwgMHhiNCwgMHgyYSwgMHgwMywgMHhkMywgMHg4MCwgMHgwMSwgMHhjMywgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhlMywgMHgzNCwgfSA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL0tjb25maWcKaW5kZXggZTI0YTZmNy4uMTU1YTc4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvS2NvbmZpZwpAQCAtMyw2ICszLDcgQEAKIAlkZXBlbmRzIG9uIFBDSSAmJiBXTEFOCiAJc2VsZWN0IFdJUkVMRVNTX0VYVAogCXNlbGVjdCBXRVhUX1BSSVYKKwlzZWxlY3QgRUVQUk9NXzkzQ1g2CiAJZGVmYXVsdCBOCiAJLS0taGVscC0tLQogCSAgSWYgYnVpbHQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkIHI4MTg3c2Uua28uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9NYWtlZmlsZQppbmRleCBiMzk1YWNmLi5lNmFkZjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvTWFrZWZpbGUKQEAgLTE4LDcgKzE4LDYgQEAKIAogcjgxODdzZS1vYmpzIDo9CQkJXAogCQlyODE4MF9jb3JlLm8JCVwKLQkJcjgxODBfOTNjeDYubwkJXAogCQlyODE4MF93eC5vCQlcCiAJCXI4MTgwX3J0bDgyMjV6Mi5vCVwKIAkJcjgxODViX2luaXQubwkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9UT0RPCmluZGV4IGE3NjJlNzkuLjcwNDk0OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvVE9ETworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL1RPRE8KQEAgLTUsNyArNSw2IEBACiAtIHN3aXRjaCB0byB1c2Ugc2hhcmVkICJsaWJydGwiIGluc3RlYWQgb2YgcHJpdmF0ZSBpZWVlODAyMTEgc3RhY2sKIC0gc3dpdGNoIHRvIHVzZSBMSUI4MDIxMQogLSBzd2l0Y2ggdG8gdXNlIE1BQzgwMjExCi0tIHN3aXRjaCB0byB1c2UgRUVQUk9NXzkzQ1g2CiAtIHVzZSBrZXJuZWwgY29kaW5nIHN0eWxlCiAtIGNoZWNrcGF0Y2gucGwgZml4ZXMKIC0gc3BhcnNlIGZpeGVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTEuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMS5oCmluZGV4IDkwODYwNDcuLjRjZDk1YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMS5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgogCkBAIC0xNjEsMTAgKzE2Miw2IEBACiAjZGVmaW5lIElFRUU4MDIxMV9ERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgkvKiBDT05GSUdfSUVFRTgwMjExX0RFQlVHICovCiAKLSNkZWZpbmUgTUFDX0ZNVCAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiCi0jZGVmaW5lIE1BQ19BUkcoeCkgKCh1OCAqKSh4KSlbMF0sICgodTggKikoeCkpWzFdLCAoKHU4ICopKHgpKVsyXSwgXAotCQkgICAoKHU4ICopKHgpKVszXSwgKCh1OCAqKSh4KSlbNF0sICgodTggKikoeCkpWzVdCi0KIC8qCiAgKiBUbyB1c2UgdGhlIGRlYnVnIHN5c3RlbTsKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfY2NtcC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYwppbmRleCAxNzJlOGYzLi40MGYxYjk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfY2NtcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF9jY21wLmMKQEAgLTI4NSw3ICsyODUsNyBAQAogCWlmICghKGtleWlkeCAmICgxIDw8IDUpKSkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiQ0NNUDogcmVjZWl2ZWQgcGFja2V0IHdpdGhvdXQgRXh0SVYiCi0JCQkgICAgICAgIiBmbGFnIGZyb20gIiBNQUNfRk1UICJcbiIsIE1BQ19BUkcoaGRyLT5hZGRyMikpOworCQkJICAgICAgICIgZmxhZyBmcm9tICVwTVxuIiwgaGRyLT5hZGRyMik7CiAJCX0KIAkJa2V5LT5kb3QxMVJTTkFTdGF0c0NDTVBGb3JtYXRFcnJvcnMrKzsKIAkJcmV0dXJuIC0yOwpAQCAtMjk4LDkgKzI5OCw5IEBACiAJfQogCWlmICgha2V5LT5rZXlfc2V0KSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJDQ01QOiByZWNlaXZlZCBwYWNrZXQgZnJvbSAiIE1BQ19GTVQKKwkJCXByaW50ayhLRVJOX0RFQlVHICJDQ01QOiByZWNlaXZlZCBwYWNrZXQgZnJvbSAlcE0iCiAJCQkgICAgICAgIiB3aXRoIGtleWlkPSVkIHRoYXQgZG9lcyBub3QgaGF2ZSBhIGNvbmZpZ3VyZWQiCi0JCQkgICAgICAgIiBrZXlcbiIsIE1BQ19BUkcoaGRyLT5hZGRyMiksIGtleWlkeCk7CisJCQkgICAgICAgIiBrZXlcbiIsIGhkci0+YWRkcjIsIGtleWlkeCk7CiAJCX0KIAkJcmV0dXJuIC0zOwogCX0KQEAgLTMxNSwxMSArMzE1LDkgQEAKIAogCWlmIChtZW1jbXAocG4sIGtleS0+cnhfcG4sIENDTVBfUE5fTEVOKSA8PSAwKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJDQ01QOiByZXBsYXkgZGV0ZWN0ZWQ6IFNUQT0iIE1BQ19GTVQKLQkJCSAgICAgICAiIHByZXZpb3VzIFBOICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCAiCi0JCQkgICAgICAgInJlY2VpdmVkIFBOICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKLQkJCSAgICAgICBNQUNfQVJHKGhkci0+YWRkcjIpLCBNQUNfQVJHKGtleS0+cnhfcG4pLAotCQkJICAgICAgIE1BQ19BUkcocG4pKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJDQ01QOiByZXBsYXkgZGV0ZWN0ZWQ6IFNUQT0lcE0iCisJCQkgICAgICAgIiBwcmV2aW91cyBQTiAlcG0gcmVjZWl2ZWQgUE4gJXBtXG4iLAorCQkJICAgICAgIGhkci0+YWRkcjIsIGtleS0+cnhfcG4sIHBuKTsKIAkJfQogCQlrZXktPmRvdDExUlNOQVN0YXRzQ0NNUFJlcGxheXMrKzsKIAkJcmV0dXJuIC00OwpAQCAtMzQ3LDcgKzM0NSw3IEBACiAJaWYgKG1lbWNtcChtaWMsIGEsIENDTVBfTUlDX0xFTikgIT0gMCkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiQ0NNUDogZGVjcnlwdCBmYWlsZWQ6IFNUQT0iCi0JCQkgICAgICAgTUFDX0ZNVCAiXG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCSAgICAgICAiJXBNXG4iLCBoZHItPmFkZHIyKTsKIAkJfQogCQlrZXktPmRvdDExUlNOQVN0YXRzQ0NNUERlY3J5cHRFcnJvcnMrKzsKIAkJcmV0dXJuIC01OwpAQCAtNDIzLDExICs0MjEsMTAgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NjbXBfZGF0YSAqY2NtcCA9IHByaXY7CiAJcCArPSBzcHJpbnRmKHAsICJrZXlbJWRdIGFsZz1DQ01QIGtleV9zZXQ9JWQgIgotCQkgICAgICJ0eF9wbj0lMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggIgotCQkgICAgICJyeF9wbj0lMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggIgorCQkgICAgICJ0eF9wbj0lcG0gcnhfcG49JXBtICIKIAkJICAgICAiZm9ybWF0X2Vycm9ycz0lZCByZXBsYXlzPSVkIGRlY3J5cHRfZXJyb3JzPSVkXG4iLAogCQkgICAgIGNjbXAtPmtleV9pZHgsIGNjbXAtPmtleV9zZXQsCi0JCSAgICAgTUFDX0FSRyhjY21wLT50eF9wbiksIE1BQ19BUkcoY2NtcC0+cnhfcG4pLAorCQkgICAgIGNjbXAtPnR4X3BuLCBjY21wLT5yeF9wbiwKIAkJICAgICBjY21wLT5kb3QxMVJTTkFTdGF0c0NDTVBGb3JtYXRFcnJvcnMsCiAJCSAgICAgY2NtcC0+ZG90MTFSU05BU3RhdHNDQ01QUmVwbGF5cywKIAkJICAgICBjY21wLT5kb3QxMVJTTkFTdGF0c0NDTVBEZWNyeXB0RXJyb3JzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jCmluZGV4IGU2ZDgzODUuLmE1MjU0MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3RraXAuYwpAQCAtMzg1LDcgKzM4NSw3IEBACiAJaWYgKCEoa2V5aWR4ICYgKDEgPDwgNSkpKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJUS0lQOiByZWNlaXZlZCBwYWNrZXQgd2l0aG91dCBFeHRJViIKLQkJCSAgICAgICAiIGZsYWcgZnJvbSAiIE1BQ19GTVQgIlxuIiwgTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCQkgICAgICAgIiBmbGFnIGZyb20gJXBNXG4iLCBoZHItPmFkZHIyKTsKIAkJfQogCQlyZXR1cm4gLTI7CiAJfQpAQCAtMzk3LDkgKzM5Nyw5IEBACiAJfQogCWlmICghdGtleS0+a2V5X3NldCkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiVEtJUDogcmVjZWl2ZWQgcGFja2V0IGZyb20gIiBNQUNfRk1UCisJCQlwcmludGsoS0VSTl9ERUJVRyAiVEtJUDogcmVjZWl2ZWQgcGFja2V0IGZyb20gJXBNIgogCQkJICAgICAgICIgd2l0aCBrZXlpZD0lZCB0aGF0IGRvZXMgbm90IGhhdmUgYSBjb25maWd1cmVkIgotCQkJICAgICAgICIga2V5XG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpLCBrZXlpZHgpOworCQkJICAgICAgICIga2V5XG4iLCBoZHItPmFkZHIyLCBrZXlpZHgpOwogCQl9CiAJCXJldHVybiAtMzsKIAl9CkBAIC00MTAsOSArNDEwLDkgQEAKIAlpZiAoaXYzMiA8IHRrZXktPnJ4X2l2MzIgfHwKIAkgICAgKGl2MzIgPT0gdGtleS0+cnhfaXYzMiAmJiBpdjE2IDw9IHRrZXktPnJ4X2l2MTYpKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJUS0lQOiByZXBsYXkgZGV0ZWN0ZWQ6IFNUQT0iIE1BQ19GTVQKKwkJCXByaW50ayhLRVJOX0RFQlVHICJUS0lQOiByZXBsYXkgZGV0ZWN0ZWQ6IFNUQT0lcE0iCiAJCQkgICAgICAgIiBwcmV2aW91cyBUU0MgJTA4eCUwNHggcmVjZWl2ZWQgVFNDICIKLQkJCSAgICAgICAiJTA4eCUwNHhcbiIsIE1BQ19BUkcoaGRyLT5hZGRyMiksCisJCQkgICAgICAgIiUwOHglMDR4XG4iLCBoZHItPmFkZHIyLAogCQkJICAgICAgIHRrZXktPnJ4X2l2MzIsIHRrZXktPnJ4X2l2MTYsIGl2MzIsIGl2MTYpOwogCQl9CiAJCXRrZXktPmRvdDExUlNOQVN0YXRzVEtJUFJlcGxheXMrKzsKQEAgLTQzMSw4ICs0MzEsOCBAQAogCWlmIChjcnlwdG9fYmxrY2lwaGVyX2RlY3J5cHQoJmRlc2MsICZzZywgJnNnLCBwbGVuICsgNCkpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIjogVEtJUDogZmFpbGVkIHRvIGRlY3J5cHQgIgotCQkJICAgICAgICJyZWNlaXZlZCBwYWNrZXQgZnJvbSAiIE1BQ19GTVQgIlxuIiwKLQkJCSAgICAgICBNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCSAgICAgICAicmVjZWl2ZWQgcGFja2V0IGZyb20gJXBNXG4iLAorCQkJICAgICAgIGhkci0+YWRkcjIpOwogCQl9CiAJCXJldHVybiAtNzsKIAl9CkBAIC00NTAsNyArNDUwLDcgQEAKIAkJfQogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiVEtJUDogSUNWIGVycm9yIGRldGVjdGVkOiBTVEE9IgotCQkJICAgICAgIE1BQ19GTVQgIlxuIiwgTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCQkgICAgICAgIiVwTVxuIiwgaGRyLT5hZGRyMik7CiAJCX0KIAkJdGtleS0+ZG90MTFSU05BU3RhdHNUS0lQSUNWRXJyb3JzKys7CiAJCXJldHVybiAtNTsKQEAgLTYwNCw4ICs2MDQsOCBAQAogCQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOwogCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKilza2ItPmRhdGE7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogTWljaGFlbCBNSUMgdmVyaWZpY2F0aW9uIGZhaWxlZCBmb3IgIgotCQkgICAgICAgIk1TRFUgZnJvbSAiIE1BQ19GTVQgIiBrZXlpZHg9JWRcbiIsCi0JCSAgICAgICBza2ItPmRldiA/IHNrYi0+ZGV2LT5uYW1lIDogIk4vQSIsIE1BQ19BUkcoaGRyLT5hZGRyMiksCisJCSAgICAgICAiTVNEVSBmcm9tICVwTSBrZXlpZHg9JWRcbiIsCisJCSAgICAgICBza2ItPmRldiA/IHNrYi0+ZGV2LT5uYW1lIDogIk4vQSIsIGhkci0+YWRkcjIsCiAJCSAgICAgICBrZXlpZHgpOwogCQlpZiAoc2tiLT5kZXYpCiAJCQlpZWVlODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShza2ItPmRldiwgaGRyLCBrZXlpZHgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfcnguYwppbmRleCA5MTI4YzE4Li4yYjcwODBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfcnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfcnguYwpAQCAtMzExLDggKzMxMSw4IEBACiAJICAgIHN0cmNtcChjcnlwdC0+b3BzLT5uYW1lLCAiVEtJUCIpID09IDApIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUS0lQIGNvdW50ZXJtZWFzdXJlczogZHJvcHBlZCAiCi0JCQkgICAgICAgInJlY2VpdmVkIHBhY2tldCBmcm9tICIgTUFDX0ZNVCAiXG4iLAotCQkJICAgICAgIGllZWUtPmRldi0+bmFtZSwgTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCQkgICAgICAgInJlY2VpdmVkIHBhY2tldCBmcm9tICVwTVxuIiwKKwkJCSAgICAgICBpZWVlLT5kZXYtPm5hbWUsIGhkci0+YWRkcjIpOwogCQl9CiAJCXJldHVybiAtMTsKIAl9CkBAIC0zMjMsOCArMzIzLDggQEAKIAlhdG9taWNfZGVjKCZjcnlwdC0+cmVmY250KTsKIAlpZiAocmVzIDwgMCkgewogCQlJRUVFODAyMTFfREVCVUdfRFJPUCgKLQkJCSJkZWNyeXB0aW9uIGZhaWxlZCAoU0E9IiBNQUNfRk1UCi0JCQkiKSByZXM9JWRcbiIsIE1BQ19BUkcoaGRyLT5hZGRyMiksIHJlcyk7CisJCQkiZGVjcnlwdGlvbiBmYWlsZWQgKFNBPSVwTSIKKwkJCSIpIHJlcz0lZFxuIiwgaGRyLT5hZGRyMiwgcmVzKTsKIAkJaWYgKHJlcyA9PSAtMikKIAkJCUlFRUU4MDIxMV9ERUJVR19EUk9QKCJEZWNyeXB0aW9uIGZhaWxlZCBJQ1YgIgogCQkJCQkgICAgICJtaXNtYXRjaCAoa2V5ICVkKVxuIiwKQEAgLTM1Niw4ICszNTYsOCBAQAogCWF0b21pY19kZWMoJmNyeXB0LT5yZWZjbnQpOwogCWlmIChyZXMgPCAwKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogTVNEVSBkZWNyeXB0aW9uL01JQyB2ZXJpZmljYXRpb24gZmFpbGVkIgotCQkgICAgICAgIiAoU0E9IiBNQUNfRk1UICIga2V5aWR4PSVkKVxuIiwKLQkJICAgICAgIGllZWUtPmRldi0+bmFtZSwgTUFDX0FSRyhoZHItPmFkZHIyKSwga2V5aWR4KTsKKwkJICAgICAgICIgKFNBPSVwTSBrZXlpZHg9JWQpXG4iLAorCQkgICAgICAgaWVlZS0+ZGV2LT5uYW1lLCBoZHItPmFkZHIyLCBrZXlpZHgpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC01NTAsOCArNTUwLDggQEAKIAkJCSAqIGZyYW1lcyBzaWxlbnRseSBpbnN0ZWFkIG9mIGZpbGxpbmcgc3lzdGVtIGxvZyB3aXRoCiAJCQkgKiB0aGVzZSByZXBvcnRzLiAqLwogCQkJSUVFRTgwMjExX0RFQlVHX0RST1AoIkRlY3J5cHRpb24gZmFpbGVkIChub3Qgc2V0KSIKLQkJCQkJICAgICAiIChTQT0iIE1BQ19GTVQgIilcbiIsCi0JCQkJCSAgICAgTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCQkJCSAgICAgIiAoU0E9JXBNKVxuIiwKKwkJCQkJICAgICBoZHItPmFkZHIyKTsKIAkJCWllZWUtPmllZWVfc3RhdHMucnhfZGlzY2FyZHNfdW5kZWNyeXB0YWJsZSsrOwogCQkJZ290byByeF9kcm9wcGVkOwogCQl9CkBAIC03MDksOCArNzA5LDggQEAKIAkJfSBlbHNlIHsKIAkJCUlFRUU4MDIxMV9ERUJVR19EUk9QKAogCQkJCSJlbmNyeXB0aW9uIGNvbmZpZ3VyZWQsIGJ1dCBSWCAiCi0JCQkJImZyYW1lIG5vdCBlbmNyeXB0ZWQgKFNBPSIgTUFDX0ZNVCAiKVxuIiwKLQkJCQlNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCQkiZnJhbWUgbm90IGVuY3J5cHRlZCAoU0E9JXBNKVxuIiwKKwkJCQloZHItPmFkZHIyKTsKIAkJCWdvdG8gcnhfZHJvcHBlZDsKIAkJfQogCX0KQEAgLTcyOSw5ICs3MjksOSBAQAogCSAgICAhaWVlZTgwMjExX2lzX2VhcG9sX2ZyYW1lKGllZWUsIHNrYiwgaGRybGVuKSkgewogCQlJRUVFODAyMTFfREVCVUdfRFJPUCgKIAkJCSJkcm9wcGVkIHVuZW5jcnlwdGVkIFJYIGRhdGEgIgotCQkJImZyYW1lIGZyb20gIiBNQUNfRk1UCisJCQkiZnJhbWUgZnJvbSAlcE0iCiAJCQkiIChkcm9wX3VuZW5jcnlwdGVkPTEpXG4iLAotCQkJTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCQloZHItPmFkZHIyKTsKIAkJZ290byByeF9kcm9wcGVkOwogCX0KIC8qCkBAIC0xMTk2LDExICsxMTk2LDExIEBACiAJfQogCiAJaWYgKG5ldHdvcmstPm1vZGUgPT0gMCkgewotCQlJRUVFODAyMTFfREVCVUdfU0NBTigiRmlsdGVyZWQgb3V0ICclcyAoIiBNQUNfRk1UICIpJyAiCisJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJGaWx0ZXJlZCBvdXQgJyVzICglcE0pJyAiCiAJCQkJICAgICAibmV0d29yay5cbiIsCiAJCQkJICAgICBlc2NhcGVfZXNzaWQobmV0d29yay0+c3NpZCwKIAkJCQkJCSAgbmV0d29yay0+c3NpZF9sZW4pLAotCQkJCSAgICAgTUFDX0FSRyhuZXR3b3JrLT5ic3NpZCkpOworCQkJCSAgICAgbmV0d29yay0+YnNzaWQpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTEzNDEsOSArMTM0MSw5IEBACiAJbWVtc2V0KCZuZXR3b3JrLCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrKSk7CiAKIAlJRUVFODAyMTFfREVCVUdfU0NBTigKLQkJIiclcycgKCIgTUFDX0ZNVCAiKTogJWMlYyVjJWMgJWMlYyVjJWMtJWMlYyVjJWMgJWMlYyVjJWNcbiIsCisJCSInJXMnICglcE0pOiAlYyVjJWMlYyAlYyVjJWMlYy0lYyVjJWMlYyAlYyVjJWMlY1xuIiwKIAkJZXNjYXBlX2Vzc2lkKGluZm9fZWxlbWVudC0+ZGF0YSwgaW5mb19lbGVtZW50LT5sZW4pLAotCQlNQUNfQVJHKGJlYWNvbi0+aGVhZGVyLmFkZHIzKSwKKwkJYmVhY29uLT5oZWFkZXIuYWRkcjMsCiAJCShiZWFjb24tPmNhcGFiaWxpdHkgJiAoMTw8MHhmKSkgPyAnMScgOiAnMCcsCiAJCShiZWFjb24tPmNhcGFiaWxpdHkgJiAoMTw8MHhlKSkgPyAnMScgOiAnMCcsCiAJCShiZWFjb24tPmNhcGFiaWxpdHkgJiAoMTw8MHhkKSkgPyAnMScgOiAnMCcsCkBAIC0xMzYyLDEwICsxMzYyLDEwIEBACiAJCShiZWFjb24tPmNhcGFiaWxpdHkgJiAoMTw8MHgwKSkgPyAnMScgOiAnMCcpOwogCiAJaWYgKGllZWU4MDIxMV9uZXR3b3JrX2luaXQoaWVlZSwgYmVhY29uLCAmbmV0d29yaywgc3RhdHMpKSB7Ci0JCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJEcm9wcGVkICclcycgKCIgTUFDX0ZNVCAiKSB2aWEgJXMuXG4iLAorCQlJRUVFODAyMTFfREVCVUdfU0NBTigiRHJvcHBlZCAnJXMnICglcE0pIHZpYSAlcy5cbiIsCiAJCQkJICAgICBlc2NhcGVfZXNzaWQoaW5mb19lbGVtZW50LT5kYXRhLAogCQkJCQkJICBpbmZvX2VsZW1lbnQtPmxlbiksCi0JCQkJICAgICBNQUNfQVJHKGJlYWNvbi0+aGVhZGVyLmFkZHIzKSwKKwkJCQkgICAgIGJlYWNvbi0+aGVhZGVyLmFkZHIzLAogCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUoYmVhY29uLT5oZWFkZXIuZnJhbWVfY3RsKSA9PQogCQkJCSAgICAgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1AgPwogCQkJCSAgICAgIlBST0JFIFJFU1BPTlNFIiA6ICJCRUFDT04iKTsKQEAgLTE0NjQsMTEgKzE0NjQsMTEgQEAKIAkJCS8qIElmIHRoZXJlIGFyZSBubyBtb3JlIHNsb3RzLCBleHBpcmUgdGhlIG9sZGVzdCAqLwogCQkJbGlzdF9kZWwoJm9sZGVzdC0+bGlzdCk7CiAJCQl0YXJnZXQgPSBvbGRlc3Q7Ci0JCQlJRUVFODAyMTFfREVCVUdfU0NBTigiRXhwaXJlZCAnJXMnICgiIE1BQ19GTVQgIikgZnJvbSAiCisJCQlJRUVFODAyMTFfREVCVUdfU0NBTigiRXhwaXJlZCAnJXMnICglcE0pIGZyb20gIgogCQkJCQkgICAgICJuZXR3b3JrIGxpc3QuXG4iLAogCQkJCQkgICAgIGVzY2FwZV9lc3NpZCh0YXJnZXQtPnNzaWQsCiAJCQkJCQkJICB0YXJnZXQtPnNzaWRfbGVuKSwKLQkJCQkJICAgICBNQUNfQVJHKHRhcmdldC0+YnNzaWQpKTsKKwkJCQkJICAgICB0YXJnZXQtPmJzc2lkKTsKIAkJfSBlbHNlIHsKIAkJCS8qIE90aGVyd2lzZSBqdXN0IHB1bGwgZnJvbSB0aGUgZnJlZSBsaXN0ICovCiAJCQl0YXJnZXQgPSBsaXN0X2VudHJ5KGllZWUtPm5ldHdvcmtfZnJlZV9saXN0Lm5leHQsCkBAIC0xNDc4LDEwICsxNDc4LDEwIEBACiAKIAogI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKLQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkFkZGluZyAnJXMnICgiIE1BQ19GTVQgIikgdmlhICVzLlxuIiwKKwkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkFkZGluZyAnJXMnICglcE0pIHZpYSAlcy5cbiIsCiAJCQkJICAgICBlc2NhcGVfZXNzaWQobmV0d29yay5zc2lkLAogCQkJCQkJICBuZXR3b3JrLnNzaWRfbGVuKSwKLQkJCQkgICAgIE1BQ19BUkcobmV0d29yay5ic3NpZCksCisJCQkJICAgICBuZXR3b3JrLmJzc2lkLAogCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUoYmVhY29uLT5oZWFkZXIuZnJhbWVfY3RsKSA9PQogCQkJCSAgICAgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1AgPwogCQkJCSAgICAgIlBST0JFIFJFU1BPTlNFIiA6ICJCRUFDT04iKTsKQEAgLTE0OTIsMTAgKzE0OTIsMTAgQEAKIAkJaWYoaWVlZS0+c29mdG1hY19mZWF0dXJlcyAmIElFRUVfU09GVE1BQ19BU1NPQ0lBVEUpCiAJCQlpZWVlODAyMTFfc29mdG1hY19uZXdfbmV0KGllZWUsJm5ldHdvcmspOwogCX0gZWxzZSB7Ci0JCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJVcGRhdGluZyAnJXMnICgiIE1BQ19GTVQgIikgdmlhICVzLlxuIiwKKwkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIlVwZGF0aW5nICclcycgKCVwTSkgdmlhICVzLlxuIiwKIAkJCQkgICAgIGVzY2FwZV9lc3NpZCh0YXJnZXQtPnNzaWQsCiAJCQkJCQkgIHRhcmdldC0+c3NpZF9sZW4pLAotCQkJCSAgICAgTUFDX0FSRyh0YXJnZXQtPmJzc2lkKSwKKwkJCQkgICAgIHRhcmdldC0+YnNzaWQsCiAJCQkJICAgICBXTEFOX0ZDX0dFVF9TVFlQRShiZWFjb24tPmhlYWRlci5mcmFtZV9jdGwpID09CiAJCQkJICAgICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCA/CiAJCQkJICAgICAiUFJPQkUgUkVTUE9OU0UiIDogIkJFQUNPTiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKaW5kZXggYTIxNTA2Ny4uYzJmNDcyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCkBAIC0xNTczLDcgKzE1NzMsNyBAQAogCQlpZWVlODAyMTFfcmVzcF90b19hc3NvY19ycShpZWVlLCBkZXN0KTsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPIk5ldyBjbGllbnQgYXNzb2NpYXRlZDogIk1BQ19GTVQiXG4iLCBNQUNfQVJHKGRlc3QpKTsKKwlwcmludGsoS0VSTl9JTkZPIk5ldyBjbGllbnQgYXNzb2NpYXRlZDogJXBNXG4iLCBkZXN0KTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hY193eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWNfd3guYwppbmRleCBmMWQ2Y2I0Li5hZDQyYmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hY193eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjX3d4LmMKQEAgLTQ4Miw4ICs0ODIsNyBAQAogCQkoIWllZWUtPmVudGVyX3NsZWVwX3N0YXRlKSB8fAogCQkoIWllZWUtPnBzX2lzX3F1ZXVlX2VtcHR5KSl7CiAKLQkJcHJpbnRrKCJFUlJPUi4gUFMgbW9kZSBpcyB0cnlpZWQgdG8gYmUgdXNlIGJ1dFwKLWRyaXZlciBtaXNzZWQgYSBjYWxsYmFja1xuXG4iKTsKKwkJcHJpbnRrKCJFUlJPUi4gUFMgbW9kZSB0cmllZCB0byBiZSB1c2UgYnV0IGRyaXZlciBtaXNzZWQgYSBjYWxsYmFja1xuXG4iKTsKIAogCQlyZXR1cm4gLTE7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwppbmRleCA2OWJkMDIxLi42Y2IzMWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwpAQCAtMTk4LDggKzE5OCw4IEBACiAJCWhlYWRlciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKWZyYWctPmRhdGE7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVEtJUCBjb3VudGVybWVhc3VyZXM6IGRyb3BwZWQgIgotCQkJICAgICAgICJUWCBwYWNrZXQgdG8gIiBNQUNfRk1UICJcbiIsCi0JCQkgICAgICAgaWVlZS0+ZGV2LT5uYW1lLCBNQUNfQVJHKGhlYWRlci0+YWRkcjEpKTsKKwkJCSAgICAgICAiVFggcGFja2V0IHRvICVwTVxuIiwKKwkJCSAgICAgICBpZWVlLT5kZXYtPm5hbWUsIGhlYWRlci0+YWRkcjEpOwogCQl9CiAJCXJldHVybiAtMTsKIAl9CkBAIC00MDcsNyArNDA3LDcgQEAKIAkJCW1lbWNweSgmaGVhZGVyLmFkZHIyLCBzcmMsIEVUSF9BTEVOKTsKIAkJCW1lbWNweSgmaGVhZGVyLmFkZHIzLCBpZWVlLT5jdXJyZW50X25ldHdvcmsuYnNzaWQsIEVUSF9BTEVOKTsKIAkJfQotCS8vCXByaW50ayhLRVJOX1dBUk5JTkcgImVzc2lkIE1BQyBhZGRyZXNzIGlzICJNQUNfRk1ULCBNQUNfQVJHKCZoZWFkZXIuYWRkcjEpKTsKKwkvLwlwcmludGsoS0VSTl9XQVJOSU5HICJlc3NpZCBNQUMgYWRkcmVzcyBpcyAlcE0iLCAmaGVhZGVyLmFkZHIxKTsKIAkJaGVhZGVyLmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KGZjKTsKIAkJLy9oZHJfbGVuID0gSUVFRTgwMjExXzNBRERSX0xFTjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwppbmRleCA2YWFkNDhmLi5iZDVlNzdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwpAQCAtMjM0LDEwICsyMzQsMTAgQEAKIAkJCWVsc2UKIAkJCQlJRUVFODAyMTFfREVCVUdfU0NBTigKIAkJCQkJIk5vdCBzaG93aW5nIG5ldHdvcmsgJyVzICgiCi0JCQkJCU1BQ19GTVQgIiknIGR1ZSB0byBhZ2UgKCVsdW1zKS5cbiIsCisJCQkJCSIlcE0pJyBkdWUgdG8gYWdlICglbHVtcykuXG4iLAogCQkJCQllc2NhcGVfZXNzaWQobmV0d29yay0+c3NpZCwKIAkJCQkJCSAgICAgbmV0d29yay0+c3NpZF9sZW4pLAotCQkJCQlNQUNfQVJHKG5ldHdvcmstPmJzc2lkKSwKKwkJCQkJbmV0d29yay0+YnNzaWQsCiAJCQkJCShqaWZmaWVzIC0gbmV0d29yay0+bGFzdF9zY2FubmVkKSAvIChIWiAvIDEwMCkpOwogCQl9CiAJfQpAQCAtNjk0LDcgKzY5NCw3IEBACiAjaWYgMQogCWNhc2UgSVdfQVVUSF9XUEFfRU5BQkxFRDoKIAkJaWVlZS0+d3BhX2VuYWJsZWQgPSAoZGF0YS0+dmFsdWUpPzE6MDsKLQkJLy9wcmludGsoImVuYWxiZSB3cGE6JWRcbiIsIGllZWUtPndwYV9lbmFibGVkKTsKKwkJLy9wcmludGsoImVuYWJsZSB3cGE6JWRcbiIsIGllZWUtPndwYV9lbmFibGVkKTsKIAkJYnJlYWs7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MC5oCmluZGV4IGNlODI4ODguLmQxNWJkZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwLmgKQEAgLTM2Niw3ICszNjYsNiBAQAogCXNob3J0IGRpdmVyc2l0eTsKIAl1OCBjc190cmVzaG9sZDsKIAlzaG9ydCByY3JfY3NlbnNlOwotCXNob3J0IHJmX2NoaXA7CiAJdTMyIGtleTBbNF07CiAJc2hvcnQgKCpyZl9zZXRfc2Vucykoc3RydWN0IG5ldF9kZXZpY2UgKmRldixzaG9ydCBzZW5zKTsKIAl2b2lkICgqcmZfc2V0X2NoYW4pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsc2hvcnQgY2gpOwpAQCAtNDc5LDkgKzQ3OCw2IEBACiAJdTggcmV0cnlfcnRzOwogCXUxNiBydHM7CiAKLS8vYWRkIGZvciBSRiBwb3dlciBvbiBwb3dlciBvZmYgYnkgbGl6aGFvbWluZyAwODA1MTIKLQl1OAkgUmVnVGhyZWVXaXJlTW9kZTsgLy8gU2VlICJUaHJlZSB3aXJlIG1vZGUiIGRlZmluZWQgYWJvdmUsIDIwMDYuMDUuMzEsIGJ5IHJjbmprby4KLQogLy9ieSBhbXkgZm9yIGxlZAogCUxFRF9TVFJBVEVHWV84MTg1IExlZFN0cmF0ZWd5OwogLy9ieSBhbXkgZm9yIGxlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF85M2N4Ni5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF85M2N4Ni5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTQ3MTFmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfOTNjeDYuYworKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKgotICAgVGhpcyBmaWxlcyBjb250YWlucyBjYXJkIGVlcHJvbSAoOTNjNDYgb3IgOTNjNTYpIHByb2dyYW1taW5nIHJvdXRpbmVzLAotICAgbWVtb3J5IGlzIGFkZHJlc3NlZCBieSAxNiBiaXRzIHdvcmRzLgotCi0gICBUaGlzIGlzIHBhcnQgb2YgcnRsODE4MCBPcGVuU291cmNlIGRyaXZlci4KLSAgIENvcHlyaWdodCAoQykgQW5kcmVhIE1lcmVsbG8gMjAwNCAgPGFuZHJlYW1ybEB0aXNjYWxpLml0PgotICAgUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIEdQTCAoR2VuZXJhbCBQdWJsaWMgTGljZW5jZSkKLQotICAgUGFydHMgb2YgdGhpcyBkcml2ZXIgYXJlIGJhc2VkIG9uIHRoZSBHUEwgcGFydCBvZiB0aGUKLSAgIG9mZmljaWFsIHJlYWx0ZWsgZHJpdmVyLgotCi0gICBQYXJ0cyBvZiB0aGlzIGRyaXZlciBhcmUgYmFzZWQgb24gdGhlIHJ0bDgxODAgZHJpdmVyIHNrZWxldG9uCi0gICBmcm9tIFBhdHJpYyBTY2hlbmtlICYgQW5kcmVzIFNhbG9tb24uCi0KLSAgIFBhcnRzIG9mIHRoaXMgZHJpdmVyIGFyZSBiYXNlZCBvbiB0aGUgSW50ZWwgUHJvIFdpcmVsZXNzIDIxMDAgR1BMIGRyaXZlci4KLQotICAgV2Ugd2FudCB0byB0YW5rcyB0aGUgQXV0aG9ycyBvZiB0aG9zZSBwcm9qZWN0cyBhbmQgdGhlIE5kaXN3cmFwcGVyCi0gICBwcm9qZWN0IEF1dGhvcnMuCi0qLwotCi0jaW5jbHVkZSAicjgxODBfOTNjeDYuaCIKLQotdm9pZCBlcHJvbV9jcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzaG9ydCBiaXQpCi17Ci0JaWYoYml0KQotCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEVQUk9NX0NNRCwKLQkJCSAgICAgICAoMTw8RVBST01fQ1NfU0hJRlQpIHwgXAotCQkJICAgICAgIHJlYWRfbmljX2J5dGUoZGV2LCBFUFJPTV9DTUQpKTsgLy9lbmFibGUgRVBST00KLQllbHNlCi0JCXdyaXRlX25pY19ieXRlKGRldiwgRVBST01fQ01ELCByZWFkX25pY19ieXRlKGRldiwgRVBST01fQ01EKVwKLQkJCSAgICAgICAmfigxPDxFUFJPTV9DU19TSElGVCkpOyAvL2Rpc2FibGUgRVBST00KLQotCWZvcmNlX3BjaV9wb3N0aW5nKGRldik7Ci0JdWRlbGF5KEVQUk9NX0RFTEFZKTsKLX0KLQotCi12b2lkIGVwcm9tX2NrX2N5Y2xlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jd3JpdGVfbmljX2J5dGUoZGV2LCBFUFJPTV9DTUQsCi0JCSAgICAgICAoMTw8RVBST01fQ0tfU0hJRlQpIHwgcmVhZF9uaWNfYnl0ZShkZXYsRVBST01fQ01EKSk7Ci0JZm9yY2VfcGNpX3Bvc3RpbmcoZGV2KTsKLQl1ZGVsYXkoRVBST01fREVMQVkpOwotCXdyaXRlX25pY19ieXRlKGRldiwgRVBST01fQ01ELAotCQkgICAgICAgcmVhZF9uaWNfYnl0ZShkZXYsIEVQUk9NX0NNRCkgJn4gKDE8PEVQUk9NX0NLX1NISUZUKSk7Ci0JZm9yY2VfcGNpX3Bvc3RpbmcoZGV2KTsKLQl1ZGVsYXkoRVBST01fREVMQVkpOwotfQotCi0KLXZvaWQgZXByb21fdyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LHNob3J0IGJpdCkKLXsKLQlpZihiaXQpCi0JCXdyaXRlX25pY19ieXRlKGRldiwgRVBST01fQ01ELCAoMTw8RVBST01fV19TSElGVCkgfCBcCi0JCQkgICAgICAgcmVhZF9uaWNfYnl0ZShkZXYsRVBST01fQ01EKSk7Ci0JZWxzZQotCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEVQUk9NX0NNRCwgcmVhZF9uaWNfYnl0ZShkZXYsRVBST01fQ01EKVwKLQkJCSAgICAgICAmfigxPDxFUFJPTV9XX1NISUZUKSk7Ci0KLQlmb3JjZV9wY2lfcG9zdGluZyhkZXYpOwotCXVkZWxheShFUFJPTV9ERUxBWSk7Ci19Ci0KLQotc2hvcnQgZXByb21fcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXNob3J0IGJpdDsKLQotCWJpdD0ocmVhZF9uaWNfYnl0ZShkZXYsIEVQUk9NX0NNRCkgJiAoMTw8RVBST01fUl9TSElGVCkgKTsKLQl1ZGVsYXkoRVBST01fREVMQVkpOwotCi0JaWYoYml0KSByZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQotCi12b2lkIGVwcm9tX3NlbmRfYml0c19zdHJpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc2hvcnQgYltdLCBpbnQgbGVuKQotewotCWludCBpOwotCi0JZm9yKGk9MDsgaTxsZW47IGkrKyl7Ci0JCWVwcm9tX3coZGV2LCBiW2ldKTsKLQkJZXByb21fY2tfY3ljbGUoZGV2KTsKLQl9Ci19Ci0KLQotdTMyIGVwcm9tX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGFkZHIpCi17Ci0Jc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCXNob3J0IHJlYWRfY21kW109ezEsMSwwfTsKLQlzaG9ydCBhZGRyX3N0cls4XTsKLQlpbnQgaTsKLQlpbnQgYWRkcl9sZW47Ci0JdTMyIHJldDsKLQotCXJldD0wOwotICAgICAgICAvL2VuYWJsZSBFUFJPTSBwcm9ncmFtbWluZwotCXdyaXRlX25pY19ieXRlKGRldiwgRVBST01fQ01ELAotCQkgICAgICAgKEVQUk9NX0NNRF9QUk9HUkFNPDxFUFJPTV9DTURfT1BFUkFUSU5HX01PREVfU0hJRlQpKTsKLQlmb3JjZV9wY2lfcG9zdGluZyhkZXYpOwotCXVkZWxheShFUFJPTV9ERUxBWSk7Ci0KLQlpZiAocHJpdi0+ZXByb210eXBlPT1FUFJPTV85M2M1Nil7Ci0JCWFkZHJfc3RyWzddPWFkZHIgJiAxOwotCQlhZGRyX3N0cls2XT1hZGRyICYgKDE8PDEpOwotCQlhZGRyX3N0cls1XT1hZGRyICYgKDE8PDIpOwotCQlhZGRyX3N0cls0XT1hZGRyICYgKDE8PDMpOwotCQlhZGRyX3N0clszXT1hZGRyICYgKDE8PDQpOwotCQlhZGRyX3N0clsyXT1hZGRyICYgKDE8PDUpOwotCQlhZGRyX3N0clsxXT1hZGRyICYgKDE8PDYpOwotCQlhZGRyX3N0clswXT1hZGRyICYgKDE8PDcpOwotCQlhZGRyX2xlbj04OwotCX1lbHNlewotCQlhZGRyX3N0cls1XT1hZGRyICYgMTsKLQkJYWRkcl9zdHJbNF09YWRkciAmICgxPDwxKTsKLQkJYWRkcl9zdHJbM109YWRkciAmICgxPDwyKTsKLQkJYWRkcl9zdHJbMl09YWRkciAmICgxPDwzKTsKLQkJYWRkcl9zdHJbMV09YWRkciAmICgxPDw0KTsKLQkJYWRkcl9zdHJbMF09YWRkciAmICgxPDw1KTsKLQkJYWRkcl9sZW49NjsKLQl9Ci0JZXByb21fY3MoZGV2LCAxKTsKLQllcHJvbV9ja19jeWNsZShkZXYpOwotCWVwcm9tX3NlbmRfYml0c19zdHJpbmcoZGV2LCByZWFkX2NtZCwgMyk7Ci0JZXByb21fc2VuZF9iaXRzX3N0cmluZyhkZXYsIGFkZHJfc3RyLCBhZGRyX2xlbik7Ci0KLQkvL2tlZXAgY2hpcCBwaW4gRCB0byBsb3cgc3RhdGUgd2hpbGUgcmVhZGluZy4KLQkvL0knbSB1bnN1cmUgaWYgaXQgaXMgbmVjZXNzYXJ5LCBidXQgYW55d2F5IHNob3VsZG4ndCBodXJ0Ci0JZXByb21fdyhkZXYsIDApOwotCi0JZm9yKGk9MDtpPDE2O2krKyl7Ci0JCS8vZWVwcm9tIG5lZWRzIGEgY2xrIGN5Y2xlIGJldHdlZW4gd3JpdGluZyBvcGNvZGUmYWRyCi0JCS8vYW5kIHJlYWRpbmcgZGF0YS4gKGVlcHJvbSBvdXRzIGEgZHVtbXkgMCkKLQkJZXByb21fY2tfY3ljbGUoZGV2KTsKLQkJcmV0IHw9IChlcHJvbV9yKGRldik8PCgxNS1pKSk7Ci0JfQotCi0JZXByb21fY3MoZGV2LCAwKTsKLQllcHJvbV9ja19jeWNsZShkZXYpOwotCi0JLy9kaXNhYmxlIEVQUk9NIHByb2dyYW1taW5nCi0Jd3JpdGVfbmljX2J5dGUoZGV2LCBFUFJPTV9DTUQsCi0JCSAgICAgICAoRVBST01fQ01EX05PUk1BTDw8RVBST01fQ01EX09QRVJBVElOR19NT0RFX1NISUZUKSk7Ci0JcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfOTNjeDYuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfOTNjeDYuaAppbmRleCAzNmFlMTAwLi43OWU3MzkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwXzkzY3g2LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF85M2N4Ni5oCkBAIC00NSwxMyArNDUsMTAgQEAKIAogI2RlZmluZQlFUFJPTV9UWFBXX09GRE1fQ0gxXzIgMHgyMAogCi0vLyNkZWZpbmUJRVBST01fVFhQV19DSDFfMiAweDEwCi0jZGVmaW5lICBFUFJPTV9UWFBXX0NIMV8yIDB4MzAKLSNkZWZpbmUJRVBST01fVFhQV19DSDNfNCAweDExCi0jZGVmaW5lCUVQUk9NX1RYUFdfQ0g1XzYgMHgxMgotI2RlZmluZQlFUFJPTV9UWFBXX0NIN184IDB4MTMKLSNkZWZpbmUJRVBST01fVFhQV19DSDlfMTAgMHgxNAotI2RlZmluZQlFUFJPTV9UWFBXX0NIMTFfMTIgMHgxNQotI2RlZmluZQlFUFJPTV9UWFBXX0NIMTNfMTQgMHgxNgorI2RlZmluZQlFUFJPTV9UWFBXX0NIMV8yIDB4MzAKIAotdTMyIGVwcm9tX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldix1MzIgYWRkcik7IC8vcmVhZHMgYSAxNiBiaXRzIHdvcmQKKyNkZWZpbmUgUlRMODE4WF9FRVBST01fQ01EX1JFQUQJCSgxIDw8IDApCisjZGVmaW5lIFJUTDgxOFhfRUVQUk9NX0NNRF9XUklURQkoMSA8PCAxKQorI2RlZmluZSBSVEw4MThYX0VFUFJPTV9DTURfQ0sJCSgxIDw8IDIpCisjZGVmaW5lIFJUTDgxOFhfRUVQUk9NX0NNRF9DUwkJKDEgPDwgMykKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2NvcmUuYwppbmRleCAxODQ3ZjM4Li5iMTc1N2FjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2NvcmUuYwpAQCAtMzEsNiArMzEsNyBAQAogI3VuZGVmIERVTU1ZX1JYCiAKICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2VlcHJvbV85M2N4Ni5oPgogCiAjaW5jbHVkZSAicjgxODBfaHcuaCIKICNpbmNsdWRlICJyODE4MC5oIgpAQCAtNDEsMTMgKzQyLDYgQEAKIAogI2luY2x1ZGUgImllZWU4MDIxMS9kb3QxMWQuaCIKIAotI2lmbmRlZiBQQ0lfVkVORE9SX0lEX0JFTEtJTgotCSNkZWZpbmUgUENJX1ZFTkRPUl9JRF9CRUxLSU4gMHgxNzk5Ci0jZW5kaWYKLSNpZm5kZWYgUENJX1ZFTkRPUl9JRF9ETElOSwotCSNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ETElOSyAweDExODYKLSNlbmRpZgotCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcnRsODE4MF9wY2lfaWRfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKICAgICAgICAgewogICAgICAgICAgICAgICAgIC52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX1JFQUxURUssCkBAIC02NjksMTEgKzY2Myw4IEBACiAKIHZvaWQgcnRsODE4MF9SU1NJX2NhbGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKnJzc2ksIHU4ICpxdWFsKQogewotCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKIAl1MzIgdGVtcDsKIAl1MzIgdGVtcDI7Ci0JdTMyIHRlbXAzOwotCXUzMiBsc2I7CiAJdTMyIHE7CiAJdTMyIG9yaWdfcXVhbDsKIAl1OCAgX3Jzc2k7CkBAIC02OTUsODggKzY4Niw2IEBACiAJKnF1YWwgPSB0ZW1wOwogCXRlbXAyID0gKnJzc2k7CiAKLQlzd2l0Y2gocHJpdi0+cmZfY2hpcCl7Ci0JY2FzZSBSRkNISVBJRF9SRk1EOgotCQlsc2IgPSB0ZW1wMiAmIDE7Ci0JCXRlbXAyICY9IDB4N2U7Ci0JCWlmICggIWxzYiB8fCAhKHRlbXAyIDw9IDB4M2MpICkgewotCQkJdGVtcDIgPSAweDY0OwotCQl9IGVsc2UgewotCQkJdGVtcDIgPSAxMDAgKiB0ZW1wMiAvIDB4M2M7Ci0JCX0KLQkJKnJzc2kgPSB0ZW1wMiAmIDB4ZmY7Ci0JCV9yc3NpID0gdGVtcDIgJiAweGZmOwotCQlicmVhazsKLQljYXNlIFJGQ0hJUElEX0lOVEVSU0lMOgotCQlsc2IgPSB0ZW1wMjsKLQkJdGVtcDIgJj0gMHhmZmZmZmZmZTsKLQkJdGVtcDIgKj0gMjUxOwotCQl0ZW1wMyA9IHRlbXAyOwotCQl0ZW1wMiA8PD0gNjsKLQkJdGVtcDMgKz0gdGVtcDI7Ci0JCXRlbXAzIDw8PSAxOwotCQl0ZW1wMiA9IDB4NDk1MGRmOwotCQl0ZW1wMiAtPSB0ZW1wMzsKLQkJbHNiICY9IDE7Ci0JCWlmICggdGVtcDIgPD0gMHgzZTAwMDAgKSB7Ci0JCQlpZiAoIHRlbXAyIDwgMHhmZmVmMDAwMCApCi0JCQkJdGVtcDIgPSAweGZmZWYwMDAwOwotCQl9IGVsc2UgewotCQkJdGVtcDIgPSAweDNlMDAwMDsKLQkJfQotCQlpZiAoICFsc2IgKSB7Ci0JCQl0ZW1wMiAtPSAweGYwMDAwOwotCQl9IGVsc2UgewotCQkJdGVtcDIgKz0gMHhmMDAwMDsKLQkJfQotCi0JCXRlbXAzID0gMHg0ZDAwMDA7Ci0JCXRlbXAzIC09IHRlbXAyOwotCQl0ZW1wMyAqPSAxMDA7Ci0JCXRlbXAzID0gdGVtcDMgLyAweDZkOwotCQl0ZW1wMyA+Pj0gMHgxMDsKLQkJX3Jzc2kgPSB0ZW1wMyAmIDB4ZmY7Ci0JCSpyc3NpID0gdGVtcDMgJiAweGZmOwotCQlicmVhazsKLQljYXNlIFJGQ0hJUElEX0dDVDoKLQkgICAgICAgIGxzYiA9IHRlbXAyICYgMTsKLQkJdGVtcDIgJj0gMHg3ZTsKLQkJaWYgKCAhIGxzYiB8fCAhKHRlbXAyIDw9IDB4M2MpICl7Ci0JCQl0ZW1wMiA9IDB4NjQ7Ci0JCX0gZWxzZSB7Ci0JCQl0ZW1wMiA9ICgxMDAgKiB0ZW1wMikgLyAweDNjOwotCQl9Ci0JCSpyc3NpID0gdGVtcDIgJiAweGZmOwotCQlfcnNzaSA9IHRlbXAyICYgMHhmZjsKLQkJYnJlYWs7Ci0JY2FzZSBSRkNISVBJRF9QSElMSVBTOgotCQlpZiggb3JpZ19xdWFsIDw9IDB4NGUgKXsKLQkJCV9yc3NpID0gU1RSRU5HVEhfTUFQW29yaWdfcXVhbF07Ci0JCQkqcnNzaSA9IF9yc3NpOwotCQl9IGVsc2UgewotCQkJb3JpZ19xdWFsIC09IDB4ODA7Ci0JCQlpZiAoICFvcmlnX3F1YWwgKXsKLQkJCQlfcnNzaSA9IDE7Ci0JCQkJKnJzc2kgPSAxOwotCQkJfSBlbHNlIHsKLQkJCQlfcnNzaSA9IDB4MzI7Ci0JCQkJKnJzc2kgPSAweDMyOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCWNhc2UgUkZDSElQSURfTUFYSU06Ci0JCWxzYiA9IHRlbXAyICYgMTsKLQkJdGVtcDIgJj0gMHg3ZTsKLQkJdGVtcDIgPj49IDE7Ci0JCXRlbXAyICs9IDB4NDI7Ci0JCWlmKCBsc2IgIT0gMCApewotCQkJdGVtcDIgKz0gMHhhOwotCQl9Ci0JCSpyc3NpID0gdGVtcDIgJiAweGZmOwotCQlfcnNzaSA9IHRlbXAyICYgMHhmZjsKLQkJYnJlYWs7Ci0JfQotCiAJaWYgKCBfcnNzaSA8IDB4NjQgKXsKIAkJaWYgKCBfcnNzaSA9PSAwICkgewogCQkJKnJzc2kgPSAxOwpAQCAtMTQyMSwxMSArMTMzMCw5IEBACiAJcmV0dXJuIE5fREJQUzsKIH0KIAotLy97YnkgYW15IDA4MDMxMgogLy8KIC8vCURlc2NyaXB0aW9uOgogLy8gCUZvciBOZXRnZWFyIGNhc2UsIHRoZXkgd2FudCBnb29kLWxvb2tpbmcgc2luZ2FsIHN0cmVuZ3RoLgotLy8JCTIwMDQuMTIuMDUsIGJ5IHJjbmprby4KIC8vCiBsb25nIE5ldGdlYXJTaWduYWxTdHJlbmd0aFRyYW5zbGF0ZShsb25nIExhc3RTUywgbG9uZyBDdXJyU1MpCiB7CkBAIC0xNDgxLDcgKzEzODgsNiBAQAogLy8JCVRoaXMgaXMgZGlmZmVyZW50IHdpdGggUGVyZm9ybVNpZ25hbFNtb290aGluZzgxODUgaW4gc21vb3RoaW5nIGZvbXVsYS4KIC8vCQlObyBkcmFtYXRpYyBhZGp1c3Rpb24gaXMgYXBwbHkgYmVjYXVzZSBkeW5hbWljIG1lY2hhbmlzbSBuZWVkIHNvbWUgZGVncmVlCiAvLwkJb2YgY29ycmVjdG5lc3MuIFBvcnRlZCBmcm9tIDgxODdCLgotLy8JMjAwNy0wMi0yNiwgYnkgQnJ1Y2UuCiAvLwogdm9pZCBQZXJmb3JtVW5kZWNvcmF0ZWRTaWduYWxTbW9vdGhpbmc4MTg1KHN0cnVjdCByODE4MF9wcml2ICpwcml2LAogCQkJCQkgICBib29sIGJDY2tSYXRlKQpAQCAtMTUwMiw3ICsxNDA4LDYgQEAKIAkJcHJpdi0+Q3VyQ0NLUlNTSSA9IDA7CiB9CiAKLS8vYnkgYW15IDA4MDMxMn0KIAogLyogVGhpcyBpcyByb3VnaCBSWCBpc3IgaGFuZGxpbmcgcm91dGluZSovCiB2b2lkIHJ0bDgxODBfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTE2MzgsNyArMTU0Myw3IEBACiAJCX0KIAogCQlzaWduYWw9KHVuc2lnbmVkIGNoYXIpKCgoKihwcml2LT5yeHJpbmd0YWlsKzMpKSYgKDB4MDBmZjAwMDApKT4+MTYpOwotCQlzaWduYWw9KHNpZ25hbCYweGZlKT4+MTsJLy8gTW9kaWZ5IGJ5IGhpa2FydSA2LjYKKwkJc2lnbmFsID0gKHNpZ25hbCAmIDB4ZmUpID4+IDE7CiAKIAkJcXVhbGl0eT0odW5zaWduZWQgY2hhcikoKCoocHJpdi0+cnhyaW5ndGFpbCszKSkgJiAoMHhmZikpOwogCkBAIC0xNjUyLDcgKzE1NTcsNiBAQAogCiAJCXN0YXRzLnJhdGUgPSBydGw4MTgwX3JhdGUycmF0ZShyYXRlKTsKIAkJQW50ZW5uYSA9ICgoKCoocHJpdi0+cnhyaW5ndGFpbCArMykpJiAoMHgwMDAwODAwMCkpID09IDAgKT8gMDoxIDsKLS8vYnkgYW15IGZvciBhbnRlbm5hCiAJCWlmKCFydGw4MTgwX0lzV2lyZWxlc3NCTW9kZShzdGF0cy5yYXRlKSkKIAkJeyAvLyBPRkRNIHJhdGUuCiAKQEAgLTE2OTEsMTEgKzE1OTUsMTAgQEAKIAkJCVJYQUdDPSg5NS1SWEFHQykqMTAwLzY1OwogCQl9CiAJCXByaXYtPlNpZ25hbFN0cmVuZ3RoID0gKHU4KVJYQUdDOwotCQlwcml2LT5SZWN2U2lnbmFsUG93ZXIgPSBSeEFHQ19kQm0gOyAgLy8gSXQgY2FuIHVzZSBkaXJlY3RseSBieSBTRDMgQ01MaW4KKwkJcHJpdi0+UmVjdlNpZ25hbFBvd2VyID0gUnhBR0NfZEJtOwogCQlwcml2LT5SeFBvd2VyID0gcnhwb3dlcjsKIAkJcHJpdi0+UlNTSSA9IFJTU0k7Ci0vL3tieSBhbXkgMDgwMzEyCi0JCS8vIFNRIHRyYW5zbGF0aW9uIGZvcm11bGFyIGlzIHByb3ZpZGVkIGJ5IFNEMyBEWi4gMjAwNi4wNi4yNywgYnkgcmNuamtvLgorCQkvKiBTUSB0cmFuc2xhdGlvbiBmb3JtdWxhIGlzIHByb3ZpZGVkIGJ5IFNEMyBEWi4gMjAwNi4wNi4yNyAqLwogCQlpZihxdWFsaXR5ID49IDEyNykKIAkJCXF1YWxpdHkgPSAxOy8vMDsgLy8wIHdpbGwgY2F1c2UgZXBjIHRvIHNob3cgc2lnbmFsIHplcm8gLCB3YWxrIGFyb3VkIG5vdzsKIAkJZWxzZSBpZihxdWFsaXR5IDwgMjcpCkBAIC0xNzEyLDcgKzE2MTUsNiBAQAogCS8vCXByaW50aygiPT09PT09PT09PT09PT09PT09PT09PT09PT0+cnggOiBSWEFHQyBpcyAlZCxzaWduYWxzdHJlbmd0aCBpcyAlZFxuIixSWEFHQyxzdGF0cy5zaWduYWxzdHJlbmd0aCk7CiAJCXN0YXRzLnJzc2kgPSBwcml2LT53c3RhdHMucXVhbC5xdWFsID0gcHJpdi0+U2lnbmFsUXVhbGl0eTsKIAkJc3RhdHMubm9pc2UgPSBwcml2LT53c3RhdHMucXVhbC5ub2lzZSA9IDEwMCAtIHByaXYgLT53c3RhdHMucXVhbC5xdWFsOwotLy9ieSBhbXkgMDgwMzEyfQogCQliSHdFcnJvciA9ICgoKCoocHJpdi0+cnhyaW5ndGFpbCkpJiAoMHgwMDAwMGZmZikpID09IDQwODApfCAoKCgqKHByaXYtPnJ4cmluZ3RhaWwpKSYgKDB4MDQwMDAwMDApKSAhPSAwICkKIAkJCXwgKCgoKihwcml2LT5yeHJpbmd0YWlsKSkmICgweDA4MDAwMDAwKSkgIT0gMCApfCAoKCh+KCoocHJpdi0+cnhyaW5ndGFpbCkpKSYgKDB4MTAwMDAwMDApKSAhPSAwICl8ICgoKH4oKihwcml2LT5yeHJpbmd0YWlsKSkpJiAoMHgyMDAwMDAwMCkpICE9IDAgKTsKIAkJYkNSQyA9ICgoKihwcml2LT5yeHJpbmd0YWlsKSkgJiAoMHgwMDAwMjAwMCkpID4+IDEzOwpAQCAtMTcyNSwxMSArMTYyNywxMiBAQAogCQkJCShlcU1hY0FkZHIocHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuYnNzaWQsIChmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMpPyBoZHItPmFkZHIxIDogKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTICk/IGhkci0+YWRkcjIgOiBoZHItPmFkZHIzKSkKIAkJCQkgJiYgKCFiSHdFcnJvcikgJiYgKCFiQ1JDKSYmICghYklDVikpCiAJCQl7Ci0vL2J5IGFteSAwODAzMTIKLQkJCQkvLyBQZXJmb3JtIHNpZ25hbCBzbW9vdGhpbmcgZm9yIGR5bmFtaWMgbWVjaGFuaXNtIG9uIGRlbWFuZC4KLQkJCQkvLyBUaGlzIGlzIGRpZmZlcmVudCB3aXRoIFBlcmZvcm1TaWduYWxTbW9vdGhpbmc4MTg1IGluIHNtb290aGluZyBmb211bGEuCi0JCQkJLy8gTm8gZHJhbWF0aWMgYWRqdXN0aW9uIGlzIGFwcGx5IGJlY2F1c2UgZHluYW1pYyBtZWNoYW5pc20gbmVlZCBzb21lIGRlZ3JlZQotCQkJCS8vIG9mIGNvcnJlY3RuZXNzLiAyMDA3LjAxLjIzLCBieSBzaGllbiBjaGFuZy4KKwkJCQkvKiBQZXJmb3JtIHNpZ25hbCBzbW9vdGhpbmcgZm9yIGR5bmFtaWMKKwkJCQkgKiBtZWNoYW5pc20gb24gZGVtYW5kLiBUaGlzIGlzIGRpZmZlcmVudAorCQkJCSAqIHdpdGggUGVyZm9ybVNpZ25hbFNtb290aGluZzgxODUgaW4gc21vb3RoaW5nCisJCQkJICogZm9tdWxhLiBObyBkcmFtYXRpYyBhZGp1c3Rpb24gaXMgYXBwbHkKKwkJCQkgKiBiZWNhdXNlIGR5bmFtaWMgbWVjaGFuaXNtIG5lZWQgc29tZSBkZWdyZWUKKwkJCQkgKiBvZiBjb3JyZWN0bmVzcy4gKi8KIAkJCQlQZXJmb3JtVW5kZWNvcmF0ZWRTaWduYWxTbW9vdGhpbmc4MTg1KHByaXYsYkNja1JhdGUpOwogCQkJCS8vCiAJCQkJLy8gRm9yIGdvb2QtbG9va2luZyBzaW5nYWwgc3RyZW5ndGguCkBAIC0xNzQ5LDEyICsxNjUyLDkgQEAKIAogCQkvLyBGaWd1cmUgb3V0IHdoaWNoIGFudGVubmEgdGhhdCByZWNlaXZlZCB0aGUgbGFzdGVkIHBhY2tldC4KIAkJCQlwcml2LT5MYXN0UnhQa3RBbnRlbm5hID0gQW50ZW5uYSA/IDEgOiAwOyAvLyAwOiBhdXgsIDE6IG1haW4uCi0vL2J5IGFteSAwODAzMTIKIAkJCSAgICBTd0FudGVubmFEaXZlcnNpdHlSeE9rODE4NShkZXYsIHByaXYtPlNpZ25hbFN0cmVuZ3RoKTsKIAkJCX0KIAotLy9ieSBhbXkgZm9yIGFudGVubmEKLSNpZm5kZWYgRFVNTVlfUlgKIAkJaWYoZmlyc3QpewogCQkJaWYoIXByaXYtPnJ4X3NrYl9jb21wbGV0ZSl7CiAJCQkJLyogc2VlbXMgdGhhdCBIVyBzb21ldGltZXMgZmFpbHMgdG8gcmVpY2V2ZSBhbmQKQEAgLTE4MTAsMTkgKzE3MTAsMTIgQEAKIAkJaWYobGFzdCAmJiAhcHJpdi0+cnhfc2tiX2NvbXBsZXRlKXsKIAkJCWlmKHByaXYtPnJ4X3NrYi0+bGVuID4gNCkKIAkJCQlza2JfdHJpbShwcml2LT5yeF9za2IscHJpdi0+cnhfc2tiLT5sZW4tNCk7Ci0jaWZuZGVmIFJYX0RPTlRfUEFTU19VTAogCQkJaWYoIWllZWU4MDIxMV9ydGxfcngocHJpdi0+aWVlZTgwMjExLAotCQkJCQkgcHJpdi0+cnhfc2tiLCAmc3RhdHMpKXsKLSNlbmRpZiAvLyBSWF9ET05UX1BBU1NfVUwKLQorCQkJCQkgcHJpdi0+cnhfc2tiLCAmc3RhdHMpKQogCQkJCWRldl9rZnJlZV9za2JfYW55KHByaXYtPnJ4X3NrYik7Ci0jaWZuZGVmIFJYX0RPTlRfUEFTU19VTAotCQkJfQotI2VuZGlmCiAJCQlwcml2LT5yeF9za2JfY29tcGxldGU9MTsKIAkJfQogCi0jZW5kaWYgLy9EVU1NWV9SWAogCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UocHJpdi0+cGRldiwKIAkJCQkgICAgcHJpdi0+cnhidWZmZXItPmRtYSwKIAkJCQkgICAgcHJpdi0+cnhidWZmZXJzaXplICogXApAQCAtMjA1Niw3ICsxOTQ5LDcgQEAKIAl1MTYJCQlSdHNEdXIgPSAwOwogCXUxNgkJCVRoaXNGcmFtZVRpbWUgPSAwOwogCXUxNgkJCVR4RGVzY0R1cmF0aW9uID0gMDsKLQl1OCAJCQlvd25iaXRfZmxhZyA9IGZhbHNlOyAvL2FkZGVkIGJ5IGRhdmlkIHdvbyBmb3Igc3luYyBUeCwgMjAwNy4xMi4xNAorCXU4IAkJCW93bmJpdF9mbGFnID0gZmFsc2U7CiAKIAlzd2l0Y2gocHJpb3JpdHkpIHsKIAljYXNlIE1BTkFHRV9QUklPUklUWToKQEAgLTIxMjMsNyArMjAxNiw4IEBACiAJCQkvL1lKLGFkZCwwODA4MjgsZm9yIEtlZXAgYWxpdmUKIAkJCXByaXYtPk51bVR4VW5pY2FzdCsrOwogCi0JCQkvLyBGaWd1cmUgb3V0IEFDSyByYXRlIGFjY29yZGluZyB0byBCU1MgYmFzaWMgcmF0ZSBhbmQgVHggcmF0ZSwgMjAwNi4wMy4wOCBieSByY25qa28uCisJCQkvKiBGaWd1cmUgb3V0IEFDSyByYXRlIGFjY29yZGluZyB0byBCU1MgYmFzaWMgcmF0ZQorCQkJICogYW5kIFR4IHJhdGUuICovCiAJCQlBY2tUaW1lID0gQ29tcHV0ZVR4VGltZSgxNCwgMTAsMCwgMCk7CS8vIEFja0NUU0xuZyA9IDE0IHVzZSAxTSBicHMgc2VuZAogCiAJCQlpZiAoICgobGVuICsgc0NyY0xuZykgPiBwcml2LT5ydHMpICYmIHByaXYtPnJ0cyApCkBAIC0yMjA2LDcgKzIxMDAsNyBAQAogCQkqdGFpbCB8PSAoMTw8MTUpOyAvKiBubyBlbmNyeXB0ICovCiAKIAkJaWYocmVtYWluPT1sZW4gJiYgIWRlc2NmcmFnKSB7Ci0JCQlvd25iaXRfZmxhZyA9IGZhbHNlOwkvL2FkZGVkIGJ5IGRhdmlkIHdvbywyMDA3LjEyLjE0CisJCQlvd25iaXRfZmxhZyA9IGZhbHNlOwogCQkJKnRhaWwgPSAqdGFpbHwgKDE8PDI5KSA7IC8vZmlzdCBzZWdtZW50IG9mIHRoZSBwYWNrZXQKIAkJCSp0YWlsID0gKnRhaWwgfChsZW4pOwogCQl9IGVsc2UgewpAQCAtMjU1NiwyNyArMjQ1MCwxNiBAQAogCX0KIAogCS8vIFR4IEhpZ2ggUG93ZXIgTWVjaGFuaXNtLgotI2lmZGVmIEhJR0hfUE9XRVIKIAlpZihDaGVja0hpZ2hQb3dlcigoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhKSkKLQl7CiAJCXF1ZXVlX3dvcmsocHJpdi0+aWVlZTgwMjExLT53cSwgKHZvaWQgKikmcHJpdi0+aWVlZTgwMjExLT50eF9wd193cSk7Ci0JfQotI2VuZGlmCiAKIAkvLyBUeCBQb3dlciBUcmFja2luZyBvbiA4N1NFLgotI2lmZGVmIFRYX1RSQUNLCi0JLy9pZiggcHJpdi0+YlR4UG93ZXJUcmFjayApCS8vbHptIG1vZCAwODA4MjYKLQlpZiggQ2hlY2tUeFB3clRyYWNraW5nKChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGEpKTsKKwlpZiAoQ2hlY2tUeFB3clRyYWNraW5nKChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGEpKQogCQlUeFB3clRyYWNraW5nODdTRSgoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhKTsKLSNlbmRpZgogCiAJLy8gUGVyZm9ybSBESUcgaW1tZWRpYXRlbHkuCi0jaWZkZWYgU1dfRElHCiAJaWYoQ2hlY2tEaWcoKHN0cnVjdCBuZXRfZGV2aWNlICopZGF0YSkgPT0gdHJ1ZSkKLQl7CiAJCXF1ZXVlX3dvcmsocHJpdi0+aWVlZTgwMjExLT53cSwgKHZvaWQgKikmcHJpdi0+aWVlZTgwMjExLT5od19kaWdfd3EpOwotCX0KLSNlbmRpZgogICAgCXJ0bDgxODBfd2F0Y2hfZG9nKChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGEpOwogCiAJcXVldWVfd29yayhwcml2LT5pZWVlODAyMTEtPndxLCAodm9pZCAqKSZwcml2LT5pZWVlODAyMTEtPkdQSU9DaGFuZ2VSRldvcmtJdGVtKTsKQEAgLTI2NzUsNiArMjU1OCwzNiBAQAogfQogLy9ZSixhZGQsMDgwODI4LGVuZAogCitzdGF0aWMgdm9pZCBydGw4MTg3c2VfZWVwcm9tX3JlZ2lzdGVyX3JlYWQoc3RydWN0IGVlcHJvbV85M2N4NiAqZWVwcm9tKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBlZXByb20tPmRhdGE7CisJdTggcmVnID0gcmVhZF9uaWNfYnl0ZShkZXYsIEVQUk9NX0NNRCk7CisKKwllZXByb20tPnJlZ19kYXRhX2luID0gcmVnICYgUlRMODE4WF9FRVBST01fQ01EX1dSSVRFOworCWVlcHJvbS0+cmVnX2RhdGFfb3V0ID0gcmVnICYgUlRMODE4WF9FRVBST01fQ01EX1JFQUQ7CisJZWVwcm9tLT5yZWdfZGF0YV9jbG9jayA9IHJlZyAmIFJUTDgxOFhfRUVQUk9NX0NNRF9DSzsKKwllZXByb20tPnJlZ19jaGlwX3NlbGVjdCA9IHJlZyAmIFJUTDgxOFhfRUVQUk9NX0NNRF9DUzsKK30KKworc3RhdGljIHZvaWQgcnRsODE4N3NlX2VlcHJvbV9yZWdpc3Rlcl93cml0ZShzdHJ1Y3QgZWVwcm9tXzkzY3g2ICplZXByb20pCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGVlcHJvbS0+ZGF0YTsKKwl1OCByZWcgPSAyIDw8IDY7CisKKwlpZiAoZWVwcm9tLT5yZWdfZGF0YV9pbikKKwkJcmVnIHw9IFJUTDgxOFhfRUVQUk9NX0NNRF9XUklURTsKKwlpZiAoZWVwcm9tLT5yZWdfZGF0YV9vdXQpCisJCXJlZyB8PSBSVEw4MThYX0VFUFJPTV9DTURfUkVBRDsKKwlpZiAoZWVwcm9tLT5yZWdfZGF0YV9jbG9jaykKKwkJcmVnIHw9IFJUTDgxOFhfRUVQUk9NX0NNRF9DSzsKKwlpZiAoZWVwcm9tLT5yZWdfY2hpcF9zZWxlY3QpCisJCXJlZyB8PSBSVEw4MThYX0VFUFJPTV9DTURfQ1M7CisKKwl3cml0ZV9uaWNfYnl0ZShkZXYsIEVQUk9NX0NNRCwgcmVnKTsKKwlyZWFkX25pY19ieXRlKGRldiwgRVBST01fQ01EKTsKKwl1ZGVsYXkoMTApOworfQorCiBzaG9ydCBydGw4MTgwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CkBAIC0yNjgzLDggKzI1OTYsMTYgQEAKIAl1MzIgdXNWYWx1ZTsKIAl1MTYgdG1wdTE2OwogCWludCBpLCBqOworCXN0cnVjdCBlZXByb21fOTNjeDYgZWVwcm9tOworCXUxNiBlZXByb21fdmFsOwogCi0JcHJpdi0+Y2hhbm5lbF9wbGFuID0gZXByb21fcmVhZChkZXYsIEVFUFJPTV9DT1VOVFJZX0NPREU+PjEpICYgMHhGRjsKKwllZXByb20uZGF0YSA9IGRldjsKKwllZXByb20ucmVnaXN0ZXJfcmVhZCA9IHJ0bDgxODdzZV9lZXByb21fcmVnaXN0ZXJfcmVhZDsKKwllZXByb20ucmVnaXN0ZXJfd3JpdGUgPSBydGw4MTg3c2VfZWVwcm9tX3JlZ2lzdGVyX3dyaXRlOworCWVlcHJvbS53aWR0aCA9IFBDSV9FRVBST01fV0lEVEhfOTNDNDY7CisKKwllZXByb21fOTNjeDZfcmVhZCgmZWVwcm9tLCBFRVBST01fQ09VTlRSWV9DT0RFPj4xLCAmZWVwcm9tX3ZhbCk7CisJcHJpdi0+Y2hhbm5lbF9wbGFuID0gZWVwcm9tX3ZhbCAmIDB4RkY7CiAJaWYocHJpdi0+Y2hhbm5lbF9wbGFuID4gQ09VTlRSWV9DT0RFX0dMT0JBTF9ET01BSU4pewogCQlwcmludGsoInJ0bDgxODBfaW5pdDpFcnJvciBjaGFubmVsIHBsYW4hIFNldCB0byBkZWZhdWx0LlxuIik7CiAJCXByaXYtPmNoYW5uZWxfcGxhbiA9IDA7CkBAIC0yNzAxLDggKzI2MjIsNiBAQAogCXByaXYtPnR4YmVhY29uY291bnQgPSAyOwogCXByaXYtPnJ4X3NrYl9jb21wbGV0ZSA9IDE7CiAKLQlwcml2LT5SZWdUaHJlZVdpcmVNb2RlID0gSFdfVEhSRUVfV0lSRV9TSTsKLQogCXByaXYtPlJGQ2hhbmdlSW5Qcm9ncmVzcyA9IGZhbHNlOwogCXByaXYtPlNldFJGUG93ZXJTdGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTsKIAlwcml2LT5SRlByb2dUeXBlID0gMDsKQEAgLTI3NDcsMTAgKzI2NjYsOCBAQAogCXByaXYtPlR4UG9sbGluZ1RpbWVzID0gMDsvL2x6bSBhZGQgMDgwODI2CiAJcHJpdi0+YkxlaXN1cmVQcyA9IHRydWU7CiAJcHJpdi0+ZG90MTFQb3dlclNhdmVNb2RlID0gZUFjdGl2ZTsKLS8vYnkgYW15IGZvciBhbnRlbm5hCiAJcHJpdi0+QWRNaW5DaGVja1BlcmlvZCA9IDU7CiAJcHJpdi0+QWRNYXhDaGVja1BlcmlvZCA9IDEwOwotLy8gTG93ZXIgc2lnbmFsIHN0cmVuZ3RoIHRocmVzaG9sZCB0byBmaXQgdGhlIEhXIHBhcnRpY2lwYXRpb24gaW4gYW50ZW5uYSBkaXZlcnNpdHkuICtieSBhbXkgMDgwMzEyCiAJcHJpdi0+QWRNYXhSeFNzVGhyZXNob2xkID0gMzA7Ly82MC0+MzAKIAlwcml2LT5BZFJ4U3NUaHJlc2hvbGQgPSAyMDsvLzUwLT4yMAogCXByaXYtPkFkQ2hlY2tQZXJpb2QgPSBwcml2LT5BZE1pbkNoZWNrUGVyaW9kOwpAQCAtMjc2NSw4ICsyNjgyLDYgQEAKIAlpbml0X3RpbWVyKCZwcml2LT5Td0FudGVubmFEaXZlcnNpdHlUaW1lcik7CiAJcHJpdi0+U3dBbnRlbm5hRGl2ZXJzaXR5VGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRldjsKIAlwcml2LT5Td0FudGVubmFEaXZlcnNpdHlUaW1lci5mdW5jdGlvbiA9ICh2b2lkICopU3dBbnRlbm5hRGl2ZXJzaXR5VGltZXJDYWxsYmFjazsKLS8vYnkgYW15IGZvciBhbnRlbm5hCi0vL3tieSBhbXkgMDgwMzEyCiAJcHJpdi0+YkRpZ01lY2hhbmlzbSA9IDE7CiAJcHJpdi0+SW5pdGlhbEdhaW4gPSA2OwogCXByaXYtPmJYdGFsQ2FsaWJyYXRpb24gPSBmYWxzZTsKQEAgLTI4MDMsNTggKzI3MTgsNjMgQEAKIAlwcml2LT5OdW1UeFVuaWNhc3QgPSAwOwogCXByaXYtPmtlZXBBbGl2ZUxldmVsID0gREVGQVVMVF9LRUVQX0FMSVZFX0xFVkVMOwogCXByaXYtPlBvd2VyUHJvZmlsZSA9IFBPV0VSX1BST0ZJTEVfQUM7Ci0gICAgcHJpdi0+Q3VyclJldHJ5Q250PTA7Ci0gICAgcHJpdi0+TGFzdFJldHJ5Q250PTA7Ci0gICAgcHJpdi0+TGFzdFR4b2tDbnQ9MDsKLSAgICBwcml2LT5MYXN0Unhva0NudD0wOwotICAgIHByaXYtPkxhc3RSZXRyeVJhdGU9MDsKLSAgICBwcml2LT5iVHJ5dXBpbmc9MDsKLSAgICBwcml2LT5DdXJyVHhSYXRlPTA7Ci0gICAgcHJpdi0+Q3VyclJldHJ5UmF0ZT0wOwotICAgIHByaXYtPlRyeXVwaW5nQ291bnQ9MDsKLSAgICBwcml2LT5Ucnl1cGluZ0NvdW50Tm9EYXRhPTA7Ci0gICAgcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YT0wOwotICAgIHByaXYtPkxhc3RUeE9LQnl0ZXM9MDsKLSAgICBwcml2LT5MYXN0RmFpbFR4UmF0ZT0wOwotICAgIHByaXYtPkxhc3RGYWlsVHhSYXRlU1M9MDsKLSAgICBwcml2LT5GYWlsVHhSYXRlQ291bnQ9MDsKLSAgICBwcml2LT5MYXN0VHhUaHJvdWdocHV0PTA7Ci0gICAgcHJpdi0+TnVtVHhPa0J5dGVzVG90YWw9MDsKKwlwcml2LT5DdXJyUmV0cnlDbnQgPSAwOworCXByaXYtPkxhc3RSZXRyeUNudCA9IDA7CisJcHJpdi0+TGFzdFR4b2tDbnQgPSAwOworCXByaXYtPkxhc3RSeG9rQ250ID0gMDsKKwlwcml2LT5MYXN0UmV0cnlSYXRlID0gMDsKKwlwcml2LT5iVHJ5dXBpbmcgPSAwOworCXByaXYtPkN1cnJUeFJhdGUgPSAwOworCXByaXYtPkN1cnJSZXRyeVJhdGUgPSAwOworCXByaXYtPlRyeXVwaW5nQ291bnQgPSAwOworCXByaXYtPlRyeXVwaW5nQ291bnROb0RhdGEgPSAwOworCXByaXYtPlRyeURvd25Db3VudExvd0RhdGEgPSAwOworCXByaXYtPkxhc3RUeE9LQnl0ZXMgPSAwOworCXByaXYtPkxhc3RGYWlsVHhSYXRlID0gMDsKKwlwcml2LT5MYXN0RmFpbFR4UmF0ZVNTID0gMDsKKwlwcml2LT5GYWlsVHhSYXRlQ291bnQgPSAwOworCXByaXYtPkxhc3RUeFRocm91Z2hwdXQgPSAwOworCXByaXYtPk51bVR4T2tCeXRlc1RvdGFsID0gMDsKIAlwcml2LT5Gb3JjZWREYXRhUmF0ZSA9IDA7CiAJcHJpdi0+UmVnQk1vZGVHYWluU3RhZ2UgPSAxOwogCi0JcHJpdi0+cHJvbWlzYyA9IChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpID8gMTowOworCXByaXYtPnByb21pc2MgPSAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSA/IDEgOiAwOwogCXNwaW5fbG9ja19pbml0KCZwcml2LT5pcnFfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmlycV90aF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+dHhfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnBzX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZwcml2LT5yZl9wc19sb2NrKTsKLQlzZW1hX2luaXQoJnByaXYtPnd4X3NlbSwxKTsKLQlzZW1hX2luaXQoJnByaXYtPnJmX3N0YXRlLDEpOwotCUlOSVRfV09SSygmcHJpdi0+cmVzZXRfd3EsKHZvaWQqKSBydGw4MTgwX3Jlc3RhcnRfd3EpOwotCUlOSVRfV09SSygmcHJpdi0+dHhfaXJxX3dxLCh2b2lkKikgcnRsODE4MF90eF9pcnFfd3EpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5pZWVlODAyMTEtPmh3X3dha2V1cF93cSwodm9pZCopIHJ0bDgxODBfaHdfd2FrZXVwX3dxKTsKLQlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+aWVlZTgwMjExLT5od19zbGVlcF93cSwodm9pZCopIHJ0bDgxODBfaHdfc2xlZXBfd3EpOwotCUlOSVRfV09SSygmcHJpdi0+aWVlZTgwMjExLT53bW1fcGFyYW1fdXBkYXRlX3dxLCh2b2lkKikgcnRsODE4MF93bW1fcGFyYW1fdXBkYXRlKTsKLQlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+aWVlZTgwMjExLT5yYXRlX2FkYXB0ZXJfd3EsKHZvaWQqKXJ0bDgxODBfcmF0ZV9hZGFwdGVyKTsvLytieSBhbXkgMDgwMzEyCi0JSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmllZWU4MDIxMS0+aHdfZGlnX3dxLCh2b2lkKilydGw4MTgwX2h3X2RpZ193cSk7Ly8rYnkgYW15IDA4MDMxMgotCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5pZWVlODAyMTEtPnR4X3B3X3dxLCh2b2lkKilydGw4MTgwX3R4X3B3X3dxKTsvLytieSBhbXkgMDgwMzEyCi0KLQlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+aWVlZTgwMjExLT5HUElPQ2hhbmdlUkZXb3JrSXRlbSwodm9pZCopIEdQSU9DaGFuZ2VSRldvcmtJdGVtQ2FsbEJhY2spOwotCisJc2VtYV9pbml0KCZwcml2LT53eF9zZW0sIDEpOworCXNlbWFfaW5pdCgmcHJpdi0+cmZfc3RhdGUsIDEpOworCUlOSVRfV09SSygmcHJpdi0+cmVzZXRfd3EsICh2b2lkICopcnRsODE4MF9yZXN0YXJ0X3dxKTsKKwlJTklUX1dPUksoJnByaXYtPnR4X2lycV93cSwgKHZvaWQgKilydGw4MTgwX3R4X2lycV93cSk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmllZWU4MDIxMS0+aHdfd2FrZXVwX3dxLAorCQkJICAodm9pZCAqKXJ0bDgxODBfaHdfd2FrZXVwX3dxKTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+aWVlZTgwMjExLT5od19zbGVlcF93cSwKKwkJCSAgKHZvaWQgKilydGw4MTgwX2h3X3NsZWVwX3dxKTsKKwlJTklUX1dPUksoJnByaXYtPmllZWU4MDIxMS0+d21tX3BhcmFtX3VwZGF0ZV93cSwKKwkJICAodm9pZCAqKXJ0bDgxODBfd21tX3BhcmFtX3VwZGF0ZSk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmllZWU4MDIxMS0+cmF0ZV9hZGFwdGVyX3dxLAorCQkJICAodm9pZCAqKXJ0bDgxODBfcmF0ZV9hZGFwdGVyKTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+aWVlZTgwMjExLT5od19kaWdfd3EsCisJCQkgKHZvaWQgKilydGw4MTgwX2h3X2RpZ193cSk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmllZWU4MDIxMS0+dHhfcHdfd3EsCisJCQkgKHZvaWQgKilydGw4MTgwX3R4X3B3X3dxKTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+aWVlZTgwMjExLT5HUElPQ2hhbmdlUkZXb3JrSXRlbSwKKwkJCSAodm9pZCAqKSBHUElPQ2hhbmdlUkZXb3JrSXRlbUNhbGxCYWNrKTsKIAl0YXNrbGV0X2luaXQoJnByaXYtPmlycV9yeF90YXNrbGV0LAogCQkgICAgICh2b2lkKCopKHVuc2lnbmVkIGxvbmcpKSBydGw4MTgwX2lycV9yeF90YXNrbGV0LAogCQkgICAgICh1bnNpZ25lZCBsb25nKXByaXYpOwogCi0gICAgaW5pdF90aW1lcigmcHJpdi0+d2F0Y2hfZG9nX3RpbWVyKTsKKwlpbml0X3RpbWVyKCZwcml2LT53YXRjaF9kb2dfdGltZXIpOwogCXByaXYtPndhdGNoX2RvZ190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGV2OwogCXByaXYtPndhdGNoX2RvZ190aW1lci5mdW5jdGlvbiA9IHdhdGNoX2RvZ19hZGFwdGl2ZTsKIAotICAgIGluaXRfdGltZXIoJnByaXYtPnJhdGVhZGFwdGVyX3RpbWVyKTsKLSAgICAgICAgcHJpdi0+cmF0ZWFkYXB0ZXJfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRldjsKLSAgICAgICAgcHJpdi0+cmF0ZWFkYXB0ZXJfdGltZXIuZnVuY3Rpb24gPSB0aW1lcl9yYXRlX2FkYXB0aXZlOwotCQlwcml2LT5SYXRlQWRhcHRpdmVQZXJpb2Q9IFJBVEVfQURBUFRJVkVfVElNRVJfUEVSSU9EOwotCQlwcml2LT5iRW5oYW5jZVR4UHdyPWZhbHNlOworCWluaXRfdGltZXIoJnByaXYtPnJhdGVhZGFwdGVyX3RpbWVyKTsKKwlwcml2LT5yYXRlYWRhcHRlcl90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGV2OworCXByaXYtPnJhdGVhZGFwdGVyX3RpbWVyLmZ1bmN0aW9uID0gdGltZXJfcmF0ZV9hZGFwdGl2ZTsKKwlwcml2LT5SYXRlQWRhcHRpdmVQZXJpb2QgPSBSQVRFX0FEQVBUSVZFX1RJTUVSX1BFUklPRDsKKwlwcml2LT5iRW5oYW5jZVR4UHdyID0gZmFsc2U7CiAKIAlwcml2LT5pZWVlODAyMTEtPnNvZnRtYWNfaGFyZF9zdGFydF94bWl0ID0gcnRsODE4MF9oYXJkX3N0YXJ0X3htaXQ7CiAJcHJpdi0+aWVlZTgwMjExLT5zZXRfY2hhbiA9IHJ0bDgxODBfc2V0X2NoYW47CkBAIC0yODc3LDMwICsyNzk3LDI4IEBACiAKIAlwcml2LT5DU01ldGhvZCA9ICgweDAxIDw8IDI5KTsKIAotCXByaXYtPlRyYW5zbWl0Q29uZmlnCT0KLQkJCQkJCQkJCTE8PFRDUl9EdXJQcm9jTW9kZV9PRkZTRVQgfAkJLy9mb3IgUlRMODE4NUIsIGR1cmF0aW9uIHNldHRpbmcgYnkgSFcKLQkJCQkJCQkJCSg3PDxUQ1JfTVhETUFfT0ZGU0VUKSB8CS8vIE1heCBETUEgQnVyc3QgU2l6ZSBwZXIgVHggRE1BIEJ1cnN0LCA3OiByZXNlcnZpZWQuCi0JCQkJCQkJCQkocHJpdi0+U2hvcnRSZXRyeUxpbWl0PDxUQ1JfU1JMX09GRlNFVCkgfAkvLyBTaG9ydCByZXRyeSBsaW1pdAotCQkJCQkJCQkJKHByaXYtPkxvbmdSZXRyeUxpbWl0PDxUQ1JfTFJMX09GRlNFVCkgfAkvLyBMb25nIHJldHJ5IGxpbWl0Ci0JCQkJCQkJCQkoMCA/IFRDUl9TQVQgOiAwKTsJLy8gRkFMU0U6IEhXIHByb3ZpZXMgUExDUCBsZW5ndGggYW5kIExFTkdFWFQsIFRVUkU6IFNXIHByb2l2ZWRzIHRoZW0KKwlwcml2LT5UcmFuc21pdENvbmZpZyA9CVRDUl9EdXJQcm9jTW9kZV9PRkZTRVQgfAorCQkJCSg3PDxUQ1JfTVhETUFfT0ZGU0VUKSB8CisJCQkJKHByaXYtPlNob3J0UmV0cnlMaW1pdDw8VENSX1NSTF9PRkZTRVQpIHwKKwkJCQkocHJpdi0+TG9uZ1JldHJ5TGltaXQ8PFRDUl9MUkxfT0ZGU0VUKSB8CisJCQkJKDAgPyBUQ1JfU0FUIDogMCk7CiAKLQlwcml2LT5SZWNlaXZlQ29uZmlnCT0KLQkJCQkJCQkJUkNSX0FNRiB8IFJDUl9BREYgfAkJCQkvL2FjY2VwdCBtYW5hZ2VtZW50L2RhdGEKLQkJCQkJCQkJUkNSX0FDRiB8CQkJCQkJLy9hY2NlcHQgY29udHJvbCBmcmFtZSBmb3IgU1cgQVAgbmVlZHMgUFMtcG9sbCwgMjAwNS4wNy4wNywgYnkgcmNuamtvLgotCQkJCQkJCQlSQ1JfQUIgfCBSQ1JfQU0gfCBSQ1JfQVBNIHwJCS8vYWNjZXB0IEJDL01DL1VDCi0JCQkJCQkJCSg3PDxSQ1JfTVhETUFfT0ZGU0VUKSB8IC8vIE1heCBETUEgQnVyc3QgU2l6ZSBwZXIgUnggRE1BIEJ1cnN0LCA3OiB1bmxpbWl0ZWQuCi0JCQkJCQkJCShwcml2LT5FYXJseVJ4VGhyZXNob2xkPDxSQ1JfRklGT19PRkZTRVQpIHwgLy8gUnggRklGTyBUaHJlc2hvbGQsIDc6IE5vIFJ4IHRocmVzaG9sZC4KLQkJCQkJCQkJKHByaXYtPkVhcmx5UnhUaHJlc2hvbGQgPT0gNyA/IFJDUl9PTkxZRVJMUEtUOjApOworCXByaXYtPlJlY2VpdmVDb25maWcgPQlSQ1JfQU1GIHwgUkNSX0FERiB8IFJDUl9BQ0YgfAorCQkJCVJDUl9BQiB8IFJDUl9BTSB8IFJDUl9BUE0gfAorCQkJCSg3PDxSQ1JfTVhETUFfT0ZGU0VUKSB8CisJCQkJKHByaXYtPkVhcmx5UnhUaHJlc2hvbGQ8PFJDUl9GSUZPX09GRlNFVCkgfAorCQkJCShwcml2LT5FYXJseVJ4VGhyZXNob2xkID09IDcgPworCQkJCQkgUkNSX09OTFlFUkxQS1QgOiAwKTsKIAogCXByaXYtPkludHJNYXNrCQk9IElNUl9UTUdET0sgfCBJTVJfVEJERVIgfCBJTVJfVEhQREVSIHwKLQkJCQkJCQkJSU1SX1RIUERFUiB8IElNUl9USFBET0sgfAotCQkJCQkJCQlJTVJfVFZPREVSIHwgSU1SX1RWT0RPSyB8Ci0JCQkJCQkJCUlNUl9UVklERVIgfCBJTVJfVFZJRE9LIHwKLQkJCQkJCQkJSU1SX1RCRURFUiB8IElNUl9UQkVET0sgfAotCQkJCQkJCQlJTVJfVEJLREVSIHwgSU1SX1RCS0RPSyB8Ci0JCQkJCQkJCUlNUl9SRFUgfAkJCQkJCS8vIFRvIGhhbmRsZSB0aGUgZGVmcmFnbWVudGF0aW9uIG5vdCBlbm91Z2ggUnggZGVzY3JpcHRvcnMgY2FzZS4gQW5uaWUsIDIwMDYtMDMtMjcuCi0JCQkJCQkJCUlNUl9SRVIgfCBJTVJfUk9LIHwKLQkJCQkJCQkJSU1SX1JRb1NPSzsgLy8gPE5PVEU+IFJPSyBhbmQgUlFvU09LIGFyZSBtdXR1YWxseSBleGNsdXNpdmUsIHNvLCB3ZSBtdXN0IGhhbmRsZSBSUW9TT0sgaW50ZXJydXB0IHRvIHJlY2VpdmUgUW9TIGZyYW1lcywgMjAwNS4xMi4wOSwgYnkgcmNuamtvLgorCQkJCSAgSU1SX1RIUERFUiB8IElNUl9USFBET0sgfAorCQkJCSAgSU1SX1RWT0RFUiB8IElNUl9UVk9ET0sgfAorCQkJCSAgSU1SX1RWSURFUiB8IElNUl9UVklET0sgfAorCQkJCSAgSU1SX1RCRURFUiB8IElNUl9UQkVET0sgfAorCQkJCSAgSU1SX1RCS0RFUiB8IElNUl9UQktET0sgfAorCQkJCSAgSU1SX1JEVSB8CisJCQkJICBJTVJfUkVSIHwgSU1SX1JPSyB8CisJCQkJICBJTVJfUlFvU09LOwogCiAJcHJpdi0+SW5pdGlhbEdhaW4gPSA2OwogCkBAIC0yOTEzLDcgKzI4MzEsOCBAQAogCS8vIGp1c3QgZm9yIHN5bmMgODUKIAlwcml2LT5lbmFibGVfZ3BpbzAgPSAwOwogCi0JdXNWYWx1ZSA9IGVwcm9tX3JlYWQoZGV2LCBFRVBST01fU1dfUkVWRF9PRkZTRVQpOworCWVlcHJvbV85M2N4Nl9yZWFkKCZlZXByb20sIEVFUFJPTV9TV19SRVZEX09GRlNFVCwgJmVlcHJvbV92YWwpOworCXVzVmFsdWUgPSBlZXByb21fdmFsOwogCURNRVNHKCJ1c1ZhbHVlIGlzIDB4JXhcbiIsdXNWYWx1ZSk7CiAJLy8zUmVhZCBBbnRlbm5hRGl2ZXJzaXR5CiAKQEAgLTI5NTMsNTQgKzI4NzIsNDYgQEAKIAllbHNlCiAJCXByaXYtPmVwcm9tdHlwZT1FUFJPTV85M2M0NjsKIAotCWRldi0+ZGV2X2FkZHJbMF09ZXByb21fcmVhZChkZXYsTUFDX0FEUikgJiAweGZmOwotCWRldi0+ZGV2X2FkZHJbMV09KGVwcm9tX3JlYWQoZGV2LE1BQ19BRFIpICYgMHhmZjAwKT4+ODsKLQlkZXYtPmRldl9hZGRyWzJdPWVwcm9tX3JlYWQoZGV2LE1BQ19BRFIrMSkgJiAweGZmOwotCWRldi0+ZGV2X2FkZHJbM109KGVwcm9tX3JlYWQoZGV2LE1BQ19BRFIrMSkgJiAweGZmMDApPj44OwotCWRldi0+ZGV2X2FkZHJbNF09ZXByb21fcmVhZChkZXYsTUFDX0FEUisyKSAmIDB4ZmY7Ci0JZGV2LT5kZXZfYWRkcls1XT0oZXByb21fcmVhZChkZXYsTUFDX0FEUisyKSAmIDB4ZmYwMCk+Pjg7CisJZWVwcm9tXzkzY3g2X211bHRpcmVhZCgmZWVwcm9tLCAweDcsIChfX2xlMTYgKikKKwkJCSAgICAgICBkZXYtPmRldl9hZGRyLCAzKTsKIAogCWZvcihpPTEsaj0wOyBpPDE0OyBpKz0yLGorKyl7Ci0JCXdvcmQgPSBlcHJvbV9yZWFkKGRldixFUFJPTV9UWFBXX0NIMV8yICsgaik7CisJCWVlcHJvbV85M2N4Nl9yZWFkKCZlZXByb20sIEVQUk9NX1RYUFdfQ0gxXzIgKyBqLCAmd29yZCk7CiAJCXByaXYtPmNodHhwd3JbaV09d29yZCAmIDB4ZmY7CiAJCXByaXYtPmNodHhwd3JbaSsxXT0od29yZCAmIDB4ZmYwMCk+Pjg7CiAJfQogCWZvciAoaSA9IDEsIGogPSAwOyBpIDwgMTQ7IGkgKz0gMiwgaisrKSB7Ci0JCXdvcmQgPSBlcHJvbV9yZWFkKGRldiwgRVBST01fVFhQV19PRkRNX0NIMV8yICsgaik7CisJCWVlcHJvbV85M2N4Nl9yZWFkKCZlZXByb20sIEVQUk9NX1RYUFdfT0ZETV9DSDFfMiArIGosICZ3b3JkKTsKIAkJcHJpdi0+Y2h0eHB3cl9vZmRtW2ldID0gd29yZCAmIDB4ZmY7Ci0JCXByaXYtPmNodHhwd3Jfb2ZkbVtpKzFdID0gKHdvcmQgJiAweGZmMDApPj44OworCQlwcml2LT5jaHR4cHdyX29mZG1baSsxXSA9ICh3b3JkICYgMHhmZjAwKSA+PiA4OwogCX0KIAotCS8vM1JlYWQgY3J5c3RhbCBjYWxpYnRyYXRpb24gYW5kIHRoZXJtYWwgbWV0ZXIgaW5kaWNhdGlvbiBvbiA4N1NFLgorCS8qIDNSZWFkIGNyeXN0YWwgY2FsaWJ0cmF0aW9uIGFuZCB0aGVybWFsIG1ldGVyIGluZGljYXRpb24gb24gODdTRS4gKi8KKwllZXByb21fOTNjeDZfcmVhZCgmZWVwcm9tLCBFRVBST01fUlNWPj4xLCAmdG1wdTE2KTsKIAotCS8vIEJ5IFNEMyBTWSdzIHJlcXVlc3QuIEFkZGVkIGJ5IFJvZ2VyLCAyMDA3LjEyLjExLgorCS8qIENyeXN0YWwgY2FsaWJyYXRpb24gZm9yIFhpbiBhbmQgWG91dCByZXNwLiAqLworCXByaXYtPlh0YWxDYWxfWG91dCA9IHRtcHUxNiAmIEVFUFJPTV9YVEFMX0NBTF9YT1VUX01BU0s7CisJcHJpdi0+WHRhbENhbF9YaW4gPSAodG1wdTE2ICYgRUVQUk9NX1hUQUxfQ0FMX1hJTl9NQVNLKSA+PiA0OworCWlmICgodG1wdTE2ICYgRUVQUk9NX1hUQUxfQ0FMX0VOQUJMRSkgPj4gMTIpCisJCXByaXYtPmJYdGFsQ2FsaWJyYXRpb24gPSB0cnVlOwogCi0JdG1wdTE2ID0gZXByb21fcmVhZChkZXYsIEVFUFJPTV9SU1Y+PjEpOworCS8qIFRoZXJtYWwgbWV0ZXIgcmVmZXJlbmNlIGluZGljYXRpb24uICovCisJcHJpdi0+VGhlcm1hbE1ldGVyID0gICh1OCkoKHRtcHUxNiAmIEVFUFJPTV9USEVSTUFMX01FVEVSX01BU0spID4+IDgpOworCWlmICgodG1wdTE2ICYgRUVQUk9NX1RIRVJNQUxfTUVURVJfRU5BQkxFKSA+PiAxMykKKwkJcHJpdi0+YlR4UG93ZXJUcmFjayA9IHRydWU7CiAKLQkJLy8gQ3J5c3RhbCBjYWxpYnJhdGlvbiBmb3IgWGluIGFuZCBYb3V0IHJlc3AuCi0JCXByaXYtPlh0YWxDYWxfWG91dCA9IHRtcHUxNiAmIEVFUFJPTV9YVEFMX0NBTF9YT1VUX01BU0s7IC8vIDB+Ny41cEYKLQkJcHJpdi0+WHRhbENhbF9YaW4gPSAodG1wdTE2ICYgRUVQUk9NX1hUQUxfQ0FMX1hJTl9NQVNLKT4+NDsgLy8gMH43LjVwRgotCQlpZigodG1wdTE2ICYgRUVQUk9NX1hUQUxfQ0FMX0VOQUJMRSk+PjEyKQotCQkJcHJpdi0+Ylh0YWxDYWxpYnJhdGlvbiA9IHRydWU7Ci0KLQkJLy8gVGhlcm1hbCBtZXRlciByZWZlcmVuY2UgaW5kaWNhdGlvbi4KLQkJcHJpdi0+VGhlcm1hbE1ldGVyID0gICh1OCkoKHRtcHUxNiAmIEVFUFJPTV9USEVSTUFMX01FVEVSX01BU0spPj44KTsKLQkJaWYoKHRtcHUxNiAmIEVFUFJPTV9USEVSTUFMX01FVEVSX0VOQUJMRSk+PjEzKQotCQkJcHJpdi0+YlR4UG93ZXJUcmFjayA9IHRydWU7Ci0KLQl3b3JkID0gZXByb21fcmVhZChkZXYsRVBST01fVFhQV19CQVNFKTsKKwllZXByb21fOTNjeDZfcmVhZCgmZWVwcm9tLCBFUFJPTV9UWFBXX0JBU0UsICZ3b3JkKTsKIAlwcml2LT5jY2tfdHhwd3JfYmFzZSA9IHdvcmQgJiAweGY7CiAJcHJpdi0+b2ZkbV90eHB3cl9iYXNlID0gKHdvcmQ+PjQpICYgMHhmOwogCi0JdmVyc2lvbiA9IGVwcm9tX3JlYWQoZGV2LEVQUk9NX1ZFUlNJT04pOworCWVlcHJvbV85M2N4Nl9yZWFkKCZlZXByb20sIEVQUk9NX1ZFUlNJT04sICZ2ZXJzaW9uKTsKIAlETUVTRygiRUVQUk9NIHZlcnNpb24gJXgiLHZlcnNpb24pOwogCXByaXYtPnJjcl9jc2Vuc2UgPSAzOwogCi0JcHJpdi0+Y3NfdHJlc2hvbGQgPSAoZXByb21fcmVhZChkZXYsIEVORVJHWV9UUkVTSE9MRCkgJiAweGZmMDApID4+IDg7CisJZWVwcm9tXzkzY3g2X3JlYWQoJmVlcHJvbSwgRU5FUkdZX1RSRVNIT0xELCAmZWVwcm9tX3ZhbCk7CisJcHJpdi0+Y3NfdHJlc2hvbGQgPSAoZWVwcm9tX3ZhbCAmIDB4ZmYwMCkgPj4gODsKIAotCXByaXYtPnJmX2NoaXAgPSAweGZmICYgZXByb21fcmVhZChkZXYsIFJGQ0hJUElEKTsKLQotCXByaXYtPnJmX2NoaXAgPSBSRl9aRUJSQTQ7CisJZWVwcm9tXzkzY3g2X3JlYWQoJmVlcHJvbSwgUkZDSElQSUQsICZlZXByb21fdmFsKTsKIAlwcml2LT5yZl9zbGVlcCA9IHJ0bDgyMjV6NF9yZl9zbGVlcDsKIAlwcml2LT5yZl93YWtldXAgPSBydGw4MjI1ejRfcmZfd2FrZXVwOwogCURNRVNHVygiKipQTEVBU0UqKiBSRVBPUlQgU1VDQ0VTU0ZVTC9VTlNVQ0NFU1NGVUwgVE8gUmVhbHRlayEiKTsKQEAgLTMwMTAsNyArMjkyMSw2IEBACiAJcHJpdi0+cmZfc2V0X2NoYW4gPSBydGw4MjI1ejJfcmZfc2V0X2NoYW47CiAJcHJpdi0+cmZfc2V0X3NlbnMgPSBOVUxMOwogCi0KIAlpZiAoMCE9YWxsb2NfcnhfZGVzY19yaW5nKGRldiwgcHJpdi0+cnhidWZmZXJzaXplLCBwcml2LT5yeHJpbmdjb3VudCkpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0zMDQyLDExICsyOTUyLDcgQEAKIAkJCQkgIFRYX0JFQUNPTl9SSU5HX0FERFIpKQogCQlyZXR1cm4gLUVOT01FTTsKIAotI2lmICFkZWZpbmVkKFNBX1NISVJRKQogICAgICAgICBpZihyZXF1ZXN0X2lycShkZXYtPmlycSwgKHZvaWQgKilydGw4MTgwX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KSl7Ci0jZWxzZQotICAgICAgICBpZihyZXF1ZXN0X2lycShkZXYtPmlycSwgKHZvaWQgKilydGw4MTgwX2ludGVycnVwdCwgU0FfU0hJUlEsIGRldi0+bmFtZSwgZGV2KSl7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBETUVTR0UoIkVycm9yIGFsbG9jYXRpbmcgSVJRICVkIixkZXYtPmlycSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogCX1lbHNlewpAQCAtMzE2OSw0MyArMzA3NSw2IEBACiAJcnRsODE4NV93cml0ZV9waHkoZGV2LCBhZHIsIGRhdGEgfCAweDEwMDAwKTsKIH0KIAotLyogNzAqMyA9IDIxMCBtcwotICogSSBob3BlIHRoaXMgaXMgZW5vdWd0aAotICovCi0jZGVmaW5lIE1BWF9QSFkgNzAKLXZvaWQgd3JpdGVfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGFkciwgdTggZGF0YSkKLXsKLQl1MzIgcGh5OwotCWludCBpOwotCi0JcGh5ID0gMHhmZjAwMDA7Ci0JcGh5IHw9IGFkcjsKLQlwaHkgfD0gMHg4MDsgLyogdGhpcyBzaG91bGQgZW5hYmxlIHdyaXRpbmcgKi8KLQlwaHkgfD0gKGRhdGE8PDgpOwotCi0JLy9QSFlfQURSLCBQSFlfUiBhbmQgUEhZX1cgIGFyZSBjb250aWcgYW5kIHRyZWF0ZWQgYXMgb25lIGR3b3JkCi0Jd3JpdGVfbmljX2R3b3JkKGRldixQSFlfQURSLCBwaHkpOwotCi0JcGh5PSAweGZmZmYwMDsKLQlwaHkgfD0gYWRyOwotCi0Jd3JpdGVfbmljX2R3b3JkKGRldixQSFlfQURSLCBwaHkpOwotCWZvcihpPTA7aTxNQVhfUEhZO2krKyl7Ci0JCXBoeT1yZWFkX25pY19kd29yZChkZXYsUEhZX0FEUik7Ci0JCXBoeT0gcGh5ICYgMHhmZjAwMDA7Ci0JCXBoeT0gcGh5ID4+IDE2OwotCQlpZihwaHkgPT0gZGF0YSl7IC8vU1VDQ0VTUyEKLQkJCWZvcmNlX3BjaV9wb3N0aW5nKGRldik7Ci0JCQltZGVsYXkoMyk7IC8vcmFuZG9tIHZhbHVlCi0JCQlyZXR1cm47Ci0JCX1lbHNlewotCQkJZm9yY2VfcGNpX3Bvc3RpbmcoZGV2KTsKLQkJCW1kZWxheSgzKTsgLy9yYW5kb20gdmFsdWUKLQkJfQotCX0KLQlETUVTR1cgKCJQaHkgd3JpdGluZyAleCAleCBmYWlsZWQhIiwgYWRyLGRhdGEpOwotfQotCiB2b2lkIHJ0bDgxODVfc2V0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgaTsKQEAgLTMzMzUsNyArMzIwNCw2IEBACiB9CiAvLwogLy8gQ2hhbmdlIGN1cnJlbnQgYW5kIGRlZmF1bHQgcHJlYW1ibGUgbW9kZS4KLS8vIDIwMDUuMDEuMDYsIGJ5IHJjbmprby4KIC8vCiBib29sCiBNZ250QWN0U2V0XzgwMl8xMV9Qb3dlclNhdmVNb2RlKApAQCAtMzQ1NCw3ICszMzIyLDYgQEAKIAlNZ250TGlua0tlZXBBbGl2ZShwcml2KTsKIAogCS8vWUosYWRkLDA4MDgyOCxmb3IgTFBTCi0jaWZkZWYgRU5BQkxFX0xQUwogCWlmIChwcml2LT5Qb3dlclByb2ZpbGUgPT0gUE9XRVJfUFJPRklMRV9CQVRURVJZKQogCQlwcml2LT5iTGVpc3VyZVBzID0gdHJ1ZTsKIAllbHNlIGlmIChwcml2LT5Qb3dlclByb2ZpbGUgPT0gUE9XRVJfUFJPRklMRV9BQykgewpAQCAtMzQ2NCw3ICszMzMxLDYgQEAKIAogCWlmKHByaXYtPmllZWU4MDIxMS0+c3RhdGUgPT0gSUVFRTgwMjExX0xJTktFRCl7CiAJCXByaXYtPmxpbmtfZGV0ZWN0Lk51bVJ4T2tJblBlcmlvZCA9IHByaXYtPmllZWU4MDIxMS0+TnVtUnhEYXRhSW5QZXJpb2Q7Ci0JCS8vcHJpbnRrKCJUeE9rPSVkIFJ4T2s9JWRcbiIsIHByaXYtPmxpbmtfZGV0ZWN0Lk51bVR4T2tJblBlcmlvZCwgcHJpdi0+bGlua19kZXRlY3QuTnVtUnhPa0luUGVyaW9kKTsKIAkJaWYoCXByaXYtPmxpbmtfZGV0ZWN0Lk51bVJ4T2tJblBlcmlvZD4gNjY2IHx8CiAJCQlwcml2LT5saW5rX2RldGVjdC5OdW1UeE9rSW5QZXJpb2Q+IDY2NiApIHsKIAkJCWJCdXN5VHJhZmZpYyA9IHRydWU7CkBAIC0zNDgxLDcgKzMzNDcsNiBAQAogCQkJTGVpc3VyZVBTTGVhdmUocHJpdik7CiAJfSBlbHNlCiAJCUxlaXN1cmVQU0xlYXZlKHByaXYpOwotI2VuZGlmCiAJcHJpdi0+bGlua19kZXRlY3QuYkJ1c3lUcmFmZmljID0gYkJ1c3lUcmFmZmljOwogCXByaXYtPmxpbmtfZGV0ZWN0Lk51bVJ4T2tJblBlcmlvZCA9IDA7CiAJcHJpdi0+bGlua19kZXRlY3QuTnVtVHhPa0luUGVyaW9kID0gMDsKQEAgLTM1MDMsMTYgKzMzNjgsMTEgQEAKIAkJaWYocHJpdi0+aWVlZTgwMjExLT5pd19tb2RlID09IElXX01PREVfQURIT0MpCiAJCQlJUFNMZWF2ZShkZXYpOwogCX0KLSNpZmRlZiBSQVRFX0FEQVBUCiAgICAgICAgdGltZXJfcmF0ZV9hZGFwdGl2ZSgodW5zaWduZWQgbG9uZylkZXYpOwotI2VuZGlmCiAJd2F0Y2hfZG9nX2FkYXB0aXZlKCh1bnNpZ25lZCBsb25nKWRldik7Ci0jaWZkZWYgU1dfQU5URQogICAgICAgICBpZihwcml2LT5iU3dBbnRlbm5hRGl2ZXJpdHkpCiAJCQlTd0FudGVubmFEaXZlcnNpdHlUaW1lckNhbGxiYWNrKGRldik7Ci0jZW5kaWYKIAlpZWVlODAyMTFfc29mdG1hY19zdGFydF9wcm90b2NvbChwcml2LT5pZWVlODAyMTEpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM3NDgsNyArMzYwOCw3IEBACiAJZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZyODE4MF93eF9oYW5kbGVyc19kZWY7CiAKIAlkZXYtPnR5cGU9QVJQSFJEX0VUSEVSOwotCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBIWiozOyAvL2FkZGVkIGJ5IGRhdmlkIHdvbywgMjAwNy4xMi4xMworCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBIWiozOwogCiAJaWYgKGRldl9hbGxvY19uYW1lKGRldiwgaWZuYW1lKSA8IDApewogICAgICAgICAgICAgICAgIERNRVNHKCJPb3BzOiBkZXZuYW1lIGFscmVhZHkgdGFrZW4hIFRyeWluZyB3bGFuJSVkLi4uXG4iKTsKQEAgLTM4NjQsOCArMzcyNCw3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiXG5MaW51eCBrZXJuZWwgZHJpdmVyIGZvciBSVEw4MTgwIFwKLS8gUlRMODE4NSBiYXNlZCBXTEFOIGNhcmRzXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJcbkxpbnV4IGtlcm5lbCBkcml2ZXIgZm9yIFJUTDgxODAgLyBSVEw4MTg1IGJhc2VkIFdMQU4gY2FyZHNcbiIpOwogCXByaW50ayhLRVJOX0lORk8gIkNvcHlyaWdodCAoYykgMjAwNC0yMDA1LCBBbmRyZWEgTWVyZWxsb1xuIik7CiAJRE1FU0coIkluaXRpYWxpemluZyBtb2R1bGUiKTsKIAlETUVTRygiV2lyZWxlc3MgZXh0ZW5zaW9ucyB2ZXJzaW9uICVkIiwgV0lSRUxFU1NfRVhUKTsKQEAgLTQyMzYsNjAgKzQwOTUsNTEgQEAKICAgICAgICAgc3RhdGljIGNoYXIgKmVudnBbXSA9IHsiSE9NRT0vIiwgIlRFUk09bGludXgiLCAiUEFUSD0vdXNyL2JpbjovYmluIiwgTlVMTH07CiAJc3RhdGljIGludCByZWFkZl9jb3VudCA9IDA7CiAKLSNpZmRlZiBFTkFCTEVfTFBTCiAJaWYocmVhZGZfY291bnQgJSAxMCA9PSAwKQogCQlwcml2LT5Qb3dlclByb2ZpbGUgPSByZWFkX2FjYWRhcHRlcl9maWxlKCIvcHJvYy9hY3BpL2FjX2FkYXB0ZXIvQUMwL3N0YXRlIik7CiAKIAlyZWFkZl9jb3VudCA9IChyZWFkZl9jb3VudCsxKSUweGZmZmY7Ci0jZW5kaWYKLQkJewotCQkJLy8gV2Ugc2hvdWxkIHR1cm4gb2ZmIExFRCBiZWZvcmUgcG9sbGluZyBGRjUxWzRdLgorCS8qIFdlIHNob3VsZCB0dXJuIG9mZiBMRUQgYmVmb3JlIHBvbGxpbmcgRkY1MVs0XS4gKi8KIAotCQkJLy9UdXJuIG9mZiBMRUQuCi0JCQlidFBTUiA9IHJlYWRfbmljX2J5dGUoZGV2LCBQU1IpOwotCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBQU1IsIChidFBTUiAmIH5CSVQzKSk7CisJLyogVHVybiBvZmYgTEVELiAqLworCWJ0UFNSID0gcmVhZF9uaWNfYnl0ZShkZXYsIFBTUik7CisJd3JpdGVfbmljX2J5dGUoZGV2LCBQU1IsIChidFBTUiAmIH5CSVQzKSk7CiAKLQkJCS8vSXQgbmVlZCB0byBkZWxheSA0dXMgc3VnZ2VzdGVkIGJ5IEpvbmcsIDIwMDgtMDEtMTYKLQkJCXVkZWxheSg0KTsKKwkvKiBJdCBuZWVkIHRvIGRlbGF5IDR1cyBzdWdnZXN0ZWQgYnkgSm9uZywgMjAwOC0wMS0xNiAqLworCXVkZWxheSg0KTsKIAotCQkJLy9IVyByYWRpbyBPbi9PZmYgYWNjb3JkaW5nIHRvIHRoZSB2YWx1ZSBvZiBGRjUxWzRdKGNvbmZpZzApCi0JCQlidENvbmZpZzAgPSBidFBTUiA9IHJlYWRfbmljX2J5dGUoZGV2LCBDT05GSUcwKTsKKwkvKiBIVyByYWRpbyBPbi9PZmYgYWNjb3JkaW5nIHRvIHRoZSB2YWx1ZSBvZiBGRjUxWzRdKGNvbmZpZzApICovCisJYnRDb25maWcwID0gYnRQU1IgPSByZWFkX25pY19ieXRlKGRldiwgQ09ORklHMCk7CiAKLQkJCS8vVHVybiBvbiBMRUQuCi0JCQl3cml0ZV9uaWNfYnl0ZShkZXYsIFBTUiwgYnRQU1J8IEJJVDMpOworCWVSZlBvd2VyU3RhdGVUb1NldCA9IChidENvbmZpZzAgJiBCSVQ0KSA/ICBlUmZPbiA6IGVSZk9mZjsKIAotCQkJZVJmUG93ZXJTdGF0ZVRvU2V0ID0gKGJ0Q29uZmlnMCAmIEJJVDQpID8gIGVSZk9uIDogZVJmT2ZmOworCS8qIFR1cm4gTEVEIGJhY2sgb24gd2hlbiByYWRpbyBlbmFibGVkICovCisJaWYgKGVSZlBvd2VyU3RhdGVUb1NldCA9PSBlUmZPbikKKwkJd3JpdGVfbmljX2J5dGUoZGV2LCBQU1IsIGJ0UFNSIHwgQklUMyk7CiAKLQkJCWlmKChwcml2LT5pZWVlODAyMTEtPmJId1JhZGlvT2ZmID09IHRydWUpICYmIChlUmZQb3dlclN0YXRlVG9TZXQgPT0gZVJmT24pKQotCQkJewotCQkJCXByaXYtPmllZWU4MDIxMS0+Ykh3UmFkaW9PZmYgPSBmYWxzZTsKLQkJCQliQWN0dWFsbHlTZXQgPSB0cnVlOwotCQkJfQotCQkJZWxzZSBpZigocHJpdi0+aWVlZTgwMjExLT5iSHdSYWRpb09mZiA9PSBmYWxzZSkgJiYgKGVSZlBvd2VyU3RhdGVUb1NldCA9PSBlUmZPZmYpKQotCQkJewotCQkJCXByaXYtPmllZWU4MDIxMS0+Ykh3UmFkaW9PZmYgPSB0cnVlOwotCQkJCWJBY3R1YWxseVNldCA9IHRydWU7Ci0JCQl9CisJaWYgKChwcml2LT5pZWVlODAyMTEtPmJId1JhZGlvT2ZmID09IHRydWUpICYmCisJICAgKGVSZlBvd2VyU3RhdGVUb1NldCA9PSBlUmZPbikpIHsKKwkJcHJpdi0+aWVlZTgwMjExLT5iSHdSYWRpb09mZiA9IGZhbHNlOworCQliQWN0dWFsbHlTZXQgPSB0cnVlOworCX0gZWxzZSBpZiAoKHByaXYtPmllZWU4MDIxMS0+Ykh3UmFkaW9PZmYgPT0gZmFsc2UpICYmCisJCSAgKGVSZlBvd2VyU3RhdGVUb1NldCA9PSBlUmZPZmYpKSB7CisJCXByaXYtPmllZWU4MDIxMS0+Ykh3UmFkaW9PZmYgPSB0cnVlOworCQliQWN0dWFsbHlTZXQgPSB0cnVlOworCX0KIAotCQkJaWYoYkFjdHVhbGx5U2V0KQotCQkJewotCQkJCU1nbnRBY3RTZXRfUkZfU3RhdGUoZGV2LCBlUmZQb3dlclN0YXRlVG9TZXQsIFJGX0NIQU5HRV9CWV9IVyk7CisJaWYgKGJBY3R1YWxseVNldCkgeworCQlNZ250QWN0U2V0X1JGX1N0YXRlKGRldiwgZVJmUG93ZXJTdGF0ZVRvU2V0LCBSRl9DSEFOR0VfQllfSFcpOwogCi0JCQkJLyogVG8gdXBkYXRlIHRoZSBVSSBzdGF0dXMgZm9yIFBvd2VyIHN0YXR1cyBjaGFuZ2VkICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHByaXYtPmllZWU4MDIxMS0+Ykh3UmFkaW9PZmYgPT0gdHJ1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd2WzFdID0gIlJGT0ZGIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lmKCFwcml2LT5SZk9mZlJlYXNvbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZbMV0gPSAiUkZPTiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9lbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICBhcmd2WzFdID0gIlJGT0ZGIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd2WzBdID0gUmFkaW9Qb3dlclBhdGg7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZbMl0gPSBOVUxMOworCQkvKiBUbyB1cGRhdGUgdGhlIFVJIHN0YXR1cyBmb3IgUG93ZXIgc3RhdHVzIGNoYW5nZWQgKi8KKwkJaWYgKHByaXYtPmllZWU4MDIxMS0+Ykh3UmFkaW9PZmYgPT0gdHJ1ZSkKKwkJCWFyZ3ZbMV0gPSAiUkZPRkYiOworCQllbHNlCisJCQlhcmd2WzFdID0gIlJGT04iOworCQlhcmd2WzBdID0gUmFkaW9Qb3dlclBhdGg7CisJCWFyZ3ZbMl0gPSBOVUxMOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxfdXNlcm1vZGVoZWxwZXIoUmFkaW9Qb3dlclBhdGgsYXJndixlbnZwLDEpOwotCQkJfQotCQl9CisJCWNhbGxfdXNlcm1vZGVoZWxwZXIoUmFkaW9Qb3dlclBhdGgsIGFyZ3YsIGVudnAsIDEpOworCX0KIH0KIAogc3RhdGljIHU4IHJlYWRfYWNhZGFwdGVyX2ZpbGUoY2hhciAqZmlsZW5hbWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2RtLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2RtLmMKaW5kZXggY2JjYTU4ZC4uZmM0OTA3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9kbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfZG0uYwpAQCAtMjgyLDMwICsyODIsMTMgQEAKIC8vCQlEaXNwYXRjaCBESUcgaW1wbGVtZW50YXRpb24gYWNjb3JkaW5nIHRvIFJGLgogLy8KIHZvaWQKLUR5bmFtaWNJbml0R2FpbigKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2Ci0JKQorRHluYW1pY0luaXRHYWluKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCi0Jc3dpdGNoKHByaXYtPnJmX2NoaXApCi0JewotCQljYXNlIFJGX1pFQlJBMjogIC8vIFtBbm5pZVdvcmthcm91bmRdIEZvciBaZWJyYTIsIDIwMDUtMDgtMDEuCi0JCWNhc2UgUkZfWkVCUkE0OgotCQkJRElHX1plYnJhKCBkZXYgKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoIkR5bmFtaWNJbml0R2FpbigpOiB1bmtub3duIFJGQ2hpcElEKCVkKSAhISFcbiIsIHByaXYtPnJmX2NoaXApOwotCQkJYnJlYWs7Ci0JfQorCURJR19aZWJyYShkZXYpOwogfQogCiB2b2lkIHJ0bDgxODBfaHdfZGlnX3dxIChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0vLyAgICAgIHN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByODE4MF9wcml2LCB3YXRjaF9kb2dfd3EpOwotLy8gICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGllZWUgPSAoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UqKQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UsIHdhdGNoX2RvZ193cSk7CiAJc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSB0b19kZWxheWVkX3dvcmsod29yayk7CiAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gY29udGFpbmVyX29mKGR3b3JrLHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLGh3X2RpZ193cSk7CiAgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpZWVlLT5kZXY7CkBAIC0xMzEwLDQ0ICsxMjkzLDI0IEBACiAJc3dpdGNoKHUxYkFudGVubmFJbmRleCkKIAl7CiAJY2FzZSAwOgotCQlzd2l0Y2gocHJpdi0+cmZfY2hpcCkKLQkJewotCQljYXNlIFJGX1pFQlJBMjoKLQkJY2FzZSBSRl9aRUJSQTQ6Ci0JCQkvLyBNYWMgcmVnaXN0ZXIsIG1haW4gYW50ZW5uYQotCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBBTlRTRUwsIDB4MDMpOwotCQkJLy9iYXNlIGJhbmQKLQkJCXdyaXRlX3BoeV9jY2soZGV2LDB4MTEsIDB4OWIpOyAvLyBDb25maWcgQ0NLIFJYIGFudGVubmEuCi0JCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MGQsIDB4NWMpOyAvLyBDb25maWcgT0ZETSBSWCBhbnRlbm5hLgorCQkvKiBNYWMgcmVnaXN0ZXIsIG1haW4gYW50ZW5uYSAqLworCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEFOVFNFTCwgMHgwMyk7CisJCS8qIGJhc2UgYmFuZCAqLworCQl3cml0ZV9waHlfY2NrKGRldiwgMHgxMSwgMHg5Yik7IC8qIENvbmZpZyBDQ0sgUlggYW50ZW5uYS4gKi8KKwkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDBkLCAweDVjKTsgLyogQ29uZmlnIE9GRE0gUlggYW50ZW5uYS4gKi8KIAotCi0JCQliQW50ZW5uYVN3aXRjaGVkID0gdHJ1ZTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoIlNldEFudGVubmE4MTg1OiB1bmtub3duIFJGQ2hpcElEKCVkKVxuIiwgcHJpdi0+cmZfY2hpcCk7Ci0JCQlicmVhazsKLQkJfQorCQliQW50ZW5uYVN3aXRjaGVkID0gdHJ1ZTsKIAkJYnJlYWs7CiAKIAljYXNlIDE6Ci0JCXN3aXRjaChwcml2LT5yZl9jaGlwKQotCQl7Ci0JCWNhc2UgUkZfWkVCUkEyOgotCQljYXNlIFJGX1pFQlJBNDoKLQkJCS8vIE1hYyByZWdpc3RlciwgYXV4IGFudGVubmEKLQkJCXdyaXRlX25pY19ieXRlKGRldiwgQU5UU0VMLCAweDAwKTsKLQkJCS8vYmFzZSBiYW5kCi0JCQl3cml0ZV9waHlfY2NrKGRldiwgMHgxMSwgMHhiYik7IC8vIENvbmZpZyBDQ0sgUlggYW50ZW5uYS4KLQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwZCwgMHg1NCk7IC8vIENvbmZpZyBPRkRNIFJYIGFudGVubmEuCisJCS8qIE1hYyByZWdpc3RlciwgYXV4IGFudGVubmEgKi8KKwkJd3JpdGVfbmljX2J5dGUoZGV2LCBBTlRTRUwsIDB4MDApOworCQkvKiBiYXNlIGJhbmQgKi8KKwkJd3JpdGVfcGh5X2NjayhkZXYsIDB4MTEsIDB4YmIpOyAvKiBDb25maWcgQ0NLIFJYIGFudGVubmEuICovCisJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwZCwgMHg1NCk7IC8qIENvbmZpZyBPRkRNIFJYIGFudGVubmEuICovCiAKLQkJCWJBbnRlbm5hU3dpdGNoZWQgPSB0cnVlOwotCQkJYnJlYWs7CisJCWJBbnRlbm5hU3dpdGNoZWQgPSB0cnVlOwogCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoIlNldEFudGVubmE4MTg1OiB1bmtub3duIFJGQ2hpcElEKCVkKVxuIiwgcHJpdi0+cmZfY2hpcCk7Ci0JCQlicmVhazsKLQkJfQogCQlicmVhazsKIAogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX3J0bDgyMjV6Mi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9ydGw4MjI1ejIuYwppbmRleCBhZmUxMGYwLi42ZWRmNWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX3J0bDgyMjV6Mi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfcnRsODIyNXoyLmMKQEAgLTg1NCwxMzQgKzg1NCw0OCBAQAogCWJ0Q29uZmlnMyA9IHJlYWRfbmljX2J5dGUoZGV2LCBDT05GSUczKTsKIAl3cml0ZV9uaWNfYnl0ZShkZXYsIENPTkZJRzMsIChidENvbmZpZzMgfCBDT05GSUczX1BBUk1fRW4pKTsKIAotCXN3aXRjaCAocHJpdi0+cmZfY2hpcCkgewotCWNhc2UgUkZfWkVCUkEyOgotCQlzd2l0Y2ggKGVSRlBvd2VyU3RhdGUpIHsKLQkJY2FzZSBlUmZPbjoKLQkJCVJGX1dyaXRlUmVnKGRldiwweDQsMHg5RkYpOworCXN3aXRjaCAoZVJGUG93ZXJTdGF0ZSkgeworCWNhc2UgZVJmT246CisJCXdyaXRlX25pY193b3JkKGRldiwgMHgzN0MsIDB4MDBFQyk7CiAKLQkJCXdyaXRlX25pY19kd29yZChkZXYsIEFOQVBBUkFNLCBBTkFQQVJNX09OKTsKLQkJCXdyaXRlX25pY19kd29yZChkZXYsIEFOQVBBUkFNMiwgQU5BUEFSTTJfT04pOworCQkvKiB0dXJuIG9uIEFGRSAqLworCQl3cml0ZV9uaWNfYnl0ZShkZXYsIDB4NTQsIDB4MDApOworCQl3cml0ZV9uaWNfYnl0ZShkZXYsIDB4NjIsIDB4MDApOwogCi0JCQl3cml0ZV9uaWNfYnl0ZShkZXYsIENPTkZJRzQsIHByaXYtPlJGUHJvZ1R5cGUpOworCQkvKiB0dXJuIG9uIFJGICovCisJCVJGX1dyaXRlUmVnKGRldiwgMHgwLCAweDAwOWYpOyB1ZGVsYXkoNTAwKTsKKwkJUkZfV3JpdGVSZWcoZGV2LCAweDQsIDB4MDk3Mik7IHVkZWxheSg1MDApOwogCi0JCQkvKiB0dXJuIG9uIENDSyBhbmQgT0ZETSAqLwotCQkJdTFiVG1wID0gcmVhZF9uaWNfYnl0ZShkZXYsIDB4MjRFKTsKLQkJCXdyaXRlX25pY19ieXRlKGRldiwgMHgyNEUsICh1MWJUbXAgJiAofihCSVQ1IHwgQklUNikpKSk7Ci0JCQlicmVhazsKLQkJY2FzZSBlUmZTbGVlcDoKLQkJCWJyZWFrOwotCQljYXNlIGVSZk9mZjoKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYlJlc3VsdCA9IGZhbHNlOwotCQkJYnJlYWs7Ci0JCX0KKwkJLyogdHVybiBvbiBSRiBhZ2FpbiAqLworCQlSRl9Xcml0ZVJlZyhkZXYsIDB4MCwgMHgwMDlmKTsgdWRlbGF5KDUwMCk7CisJCVJGX1dyaXRlUmVnKGRldiwgMHg0LCAweDA5NzIpOyB1ZGVsYXkoNTAwKTsKKworCQkvKiB0dXJuIG9uIEJCICovCisJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgxMCwgMHg0MCk7CisJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgxMiwgMHg0MCk7CisKKwkJLyogQXZvaWQgcG93ZXIgZG93biBhdCBpbml0IHRpbWUuICovCisJCXdyaXRlX25pY19ieXRlKGRldiwgQ09ORklHNCwgcHJpdi0+UkZQcm9nVHlwZSk7CisKKwkJdTFiVG1wID0gcmVhZF9uaWNfYnl0ZShkZXYsIDB4MjRFKTsKKwkJd3JpdGVfbmljX2J5dGUoZGV2LCAweDI0RSwgKHUxYlRtcCAmICh+KEJJVDUgfCBCSVQ2KSkpKTsKIAkJYnJlYWs7Ci0JY2FzZSBSRl9aRUJSQTQ6Ci0JCXN3aXRjaCAoZVJGUG93ZXJTdGF0ZSkgewotCQljYXNlIGVSZk9uOgotCQkJd3JpdGVfbmljX3dvcmQoZGV2LCAweDM3QywgMHgwMEVDKTsKLQotCQkJLyogdHVybiBvbiBBRkUgKi8KLQkJCXdyaXRlX25pY19ieXRlKGRldiwgMHg1NCwgMHgwMCk7Ci0JCQl3cml0ZV9uaWNfYnl0ZShkZXYsIDB4NjIsIDB4MDApOwotCi0JCQkvKiB0dXJuIG9uIFJGICovCi0JCQlSRl9Xcml0ZVJlZyhkZXYsIDB4MCwgMHgwMDlmKTsgdWRlbGF5KDUwMCk7Ci0JCQlSRl9Xcml0ZVJlZyhkZXYsIDB4NCwgMHgwOTcyKTsgdWRlbGF5KDUwMCk7Ci0KLQkJCS8qIHR1cm4gb24gUkYgYWdhaW4gKi8KLQkJCVJGX1dyaXRlUmVnKGRldiwgMHgwLCAweDAwOWYpOyB1ZGVsYXkoNTAwKTsKLQkJCVJGX1dyaXRlUmVnKGRldiwgMHg0LCAweDA5NzIpOyB1ZGVsYXkoNTAwKTsKLQotCQkJLyogdHVybiBvbiBCQiAqLwotCQkJd3JpdGVfcGh5X29mZG0oZGV2LDB4MTAsMHg0MCk7Ci0JCQl3cml0ZV9waHlfb2ZkbShkZXYsMHgxMiwweDQwKTsKLQotCQkJLyogQXZvaWQgcG93ZXIgZG93biBhdCBpbml0IHRpbWUuICovCi0JCQl3cml0ZV9uaWNfYnl0ZShkZXYsIENPTkZJRzQsIHByaXYtPlJGUHJvZ1R5cGUpOwotCi0JCQl1MWJUbXAgPSByZWFkX25pY19ieXRlKGRldiwgMHgyNEUpOwotCQkJd3JpdGVfbmljX2J5dGUoZGV2LCAweDI0RSwgKHUxYlRtcCAmICh+KEJJVDUgfCBCSVQ2KSkpKTsKLQkJCWJyZWFrOwotCQljYXNlIGVSZlNsZWVwOgotCQkJZm9yIChRdWV1ZUlEID0gMCwgaSA9IDA7IFF1ZXVlSUQgPCA2OykgewotCQkJCWlmIChnZXRfY3Vycl90eF9mcmVlX2Rlc2MoZGV2LCBRdWV1ZUlEKSA9PSBwcml2LT50eHJpbmdjb3VudCkgewotCQkJCQlRdWV1ZUlEKys7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXByaXYtPlR4UG9sbGluZ1RpbWVzICsrOwotCQkJCQlpZiAocHJpdi0+VHhQb2xsaW5nVGltZXMgPj0gTFBTX01BWF9TTEVFUF9XQUlUSU5HX1RJTUVTXzg3U0UpIHsKLQkJCQkJCWJBY3Rpb25BbGxvd2VkID0gZmFsc2U7Ci0JCQkJCQlicmVhazsKLQkJCQkJfSBlbHNlCi0JCQkJCQl1ZGVsYXkoMTApOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKGJBY3Rpb25BbGxvd2VkKSB7Ci0JCQkJLyogdHVybiBvZmYgQkIgUlhJUSBtYXRyaXggdG8gY3V0IG9mZiByeCBzaWduYWwgKi8KLQkJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MTAsIDB4MDApOwotCQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgxMiwgMHgwMCk7Ci0KLQkJCQkvKiB0dXJuIG9mZiBSRiAqLwotCQkJCVJGX1dyaXRlUmVnKGRldiwgMHg0LCAweDAwMDApOwotCQkJCVJGX1dyaXRlUmVnKGRldiwgMHgwLCAweDAwMDApOwotCi0JCQkJLyogdHVybiBvZmYgQUZFIGV4Y2VwdCBQTEwgKi8KLQkJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIDB4NjIsIDB4ZmYpOwotCQkJCXdyaXRlX25pY19ieXRlKGRldiwgMHg1NCwgMHhlYyk7Ci0KLQkJCQltZGVsYXkoMSk7Ci0KLQkJCQl7Ci0JCQkJCWludCBpID0gMDsKLQkJCQkJd2hpbGUgKHRydWUpIHsKLQkJCQkJCXU4IHRtcDI0RiA9IHJlYWRfbmljX2J5dGUoZGV2LCAweDI0Zik7Ci0KLQkJCQkJCWlmICgodG1wMjRGID09IDB4MDEpIHx8ICh0bXAyNEYgPT0gMHgwOSkpIHsKLQkJCQkJCQliVHVybk9mZkJCID0gdHJ1ZTsKLQkJCQkJCQlicmVhazsKLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJdWRlbGF5KDEwKTsKLQkJCQkJCQlpKys7Ci0JCQkJCQkJcHJpdi0+VHhQb2xsaW5nVGltZXMrKzsKLQotCQkJCQkJCWlmIChwcml2LT5UeFBvbGxpbmdUaW1lcyA+PSBMUFNfTUFYX1NMRUVQX1dBSVRJTkdfVElNRVNfODdTRSkgewotCQkJCQkJCQliVHVybk9mZkJCID0gZmFsc2U7Ci0JCQkJCQkJCWJyZWFrOwotCQkJCQkJCX0gZWxzZQotCQkJCQkJCQl1ZGVsYXkoMTApOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCi0JCQkJaWYgKGJUdXJuT2ZmQkIpIHsKLQkJCQkJLyogdHVybiBvZmYgQkIgKi8KLQkJCQkJdTFiVG1wID0gcmVhZF9uaWNfYnl0ZShkZXYsIDB4MjRFKTsKLQkJCQkJd3JpdGVfbmljX2J5dGUoZGV2LCAweDI0RSwgKHUxYlRtcCB8IEJJVDUgfCBCSVQ2KSk7Ci0KLQkJCQkJLyogdHVybiBvZmYgQUZFIFBMTCAqLwotCQkJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIDB4NTQsIDB4RkMpOwotCQkJCQl3cml0ZV9uaWNfd29yZChkZXYsIDB4MzdDLCAweDAwRkMpOwotCQkJCX0KLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIGVSZk9mZjoKLQkJCWZvciAoUXVldWVJRCA9IDAsIGkgPSAwOyBRdWV1ZUlEIDwgNjspIHsKLQkJCQlpZiAoZ2V0X2N1cnJfdHhfZnJlZV9kZXNjKGRldiwgUXVldWVJRCkgPT0gcHJpdi0+dHhyaW5nY291bnQpIHsKLQkJCQkJUXVldWVJRCsrOwotCQkJCQljb250aW51ZTsKLQkJCQl9IGVsc2UgewotCQkJCQl1ZGVsYXkoMTApOwotCQkJCQlpKys7Ci0JCQkJfQotCi0JCQkJaWYgKGkgPj0gTUFYX0RPWkVfV0FJVElOR19USU1FU184NUIpCisJY2FzZSBlUmZTbGVlcDoKKwkJZm9yIChRdWV1ZUlEID0gMCwgaSA9IDA7IFF1ZXVlSUQgPCA2OykgeworCQkJaWYgKGdldF9jdXJyX3R4X2ZyZWVfZGVzYyhkZXYsIFF1ZXVlSUQpID09IHByaXYtPnR4cmluZ2NvdW50KSB7CisJCQkJUXVldWVJRCsrOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIHsKKwkJCQlwcml2LT5UeFBvbGxpbmdUaW1lcysrOworCQkJCWlmIChwcml2LT5UeFBvbGxpbmdUaW1lcyA+PSBMUFNfTUFYX1NMRUVQX1dBSVRJTkdfVElNRVNfODdTRSkgeworCQkJCQliQWN0aW9uQWxsb3dlZCA9IGZhbHNlOwogCQkJCQlicmVhazsKKwkJCQl9IGVsc2UKKwkJCQkJdWRlbGF5KDEwKTsKIAkJCX0KKwkJfQogCisJCWlmIChiQWN0aW9uQWxsb3dlZCkgewogCQkJLyogdHVybiBvZmYgQkIgUlhJUSBtYXRyaXggdG8gY3V0IG9mZiByeCBzaWduYWwgKi8KIAkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgxMCwgMHgwMCk7CiAJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MTIsIDB4MDApOwpAQCAtOTk4LDIyICs5MTIsMjMgQEAKIAogCQkJewogCQkJCWludCBpID0gMDsKLQotCQkJCXdoaWxlICh0cnVlKQotCQkJCXsKKwkJCQl3aGlsZSAodHJ1ZSkgewogCQkJCQl1OCB0bXAyNEYgPSByZWFkX25pY19ieXRlKGRldiwgMHgyNGYpOwogCiAJCQkJCWlmICgodG1wMjRGID09IDB4MDEpIHx8ICh0bXAyNEYgPT0gMHgwOSkpIHsKIAkJCQkJCWJUdXJuT2ZmQkIgPSB0cnVlOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0gZWxzZSB7Ci0JCQkJCQliVHVybk9mZkJCID0gZmFsc2U7CiAJCQkJCQl1ZGVsYXkoMTApOwogCQkJCQkJaSsrOwotCQkJCQl9CisJCQkJCQlwcml2LT5UeFBvbGxpbmdUaW1lcysrOwogCi0JCQkJCWlmIChpID4gTUFYX1BPTExJTkdfMjRGX1RJTUVTXzg3U0UpCi0JCQkJCQlicmVhazsKKwkJCQkJCWlmIChwcml2LT5UeFBvbGxpbmdUaW1lcyA+PSBMUFNfTUFYX1NMRUVQX1dBSVRJTkdfVElNRVNfODdTRSkgeworCQkJCQkJCWJUdXJuT2ZmQkIgPSBmYWxzZTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0gZWxzZQorCQkJCQkJCXVkZWxheSgxMCk7CisJCQkJCX0KIAkJCQl9CiAJCQl9CiAKQEAgLTEwMjIsMTUgKzkzNyw2OCBAQAogCQkJCXUxYlRtcCA9IHJlYWRfbmljX2J5dGUoZGV2LCAweDI0RSk7CiAJCQkJd3JpdGVfbmljX2J5dGUoZGV2LCAweDI0RSwgKHUxYlRtcCB8IEJJVDUgfCBCSVQ2KSk7CiAKLQkJCQkvKiB0dXJuIG9mZiBBRkUgUExMICg4ME0pICovCisJCQkJLyogdHVybiBvZmYgQUZFIFBMTCAqLwogCQkJCXdyaXRlX25pY19ieXRlKGRldiwgMHg1NCwgMHhGQyk7CiAJCQkJd3JpdGVfbmljX3dvcmQoZGV2LCAweDM3QywgMHgwMEZDKTsKIAkJCX0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYlJlc3VsdCA9IGZhbHNlOwotCQkJcHJpbnRrKCJTZXRaZWJyYVJGUG93ZXJTdGF0ZTgxODUoKTogdW5rbm93biBzdGF0ZSB0byBzZXQ6IDB4JVghISFcbiIsIGVSRlBvd2VyU3RhdGUpOwotCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBlUmZPZmY6CisJCWZvciAoUXVldWVJRCA9IDAsIGkgPSAwOyBRdWV1ZUlEIDwgNjspIHsKKwkJCWlmIChnZXRfY3Vycl90eF9mcmVlX2Rlc2MoZGV2LCBRdWV1ZUlEKSA9PSBwcml2LT50eHJpbmdjb3VudCkgeworCQkJCVF1ZXVlSUQrKzsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSB7CisJCQkJdWRlbGF5KDEwKTsKKwkJCQlpKys7CisJCQl9CisKKwkJCWlmIChpID49IE1BWF9ET1pFX1dBSVRJTkdfVElNRVNfODVCKQorCQkJCWJyZWFrOworCQl9CisKKwkJLyogdHVybiBvZmYgQkIgUlhJUSBtYXRyaXggdG8gY3V0IG9mZiByeCBzaWduYWwgKi8KKwkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDEwLCAweDAwKTsKKwkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDEyLCAweDAwKTsKKworCQkvKiB0dXJuIG9mZiBSRiAqLworCQlSRl9Xcml0ZVJlZyhkZXYsIDB4NCwgMHgwMDAwKTsKKwkJUkZfV3JpdGVSZWcoZGV2LCAweDAsIDB4MDAwMCk7CisKKwkJLyogdHVybiBvZmYgQUZFIGV4Y2VwdCBQTEwgKi8KKwkJd3JpdGVfbmljX2J5dGUoZGV2LCAweDYyLCAweGZmKTsKKwkJd3JpdGVfbmljX2J5dGUoZGV2LCAweDU0LCAweGVjKTsKKworCQltZGVsYXkoMSk7CisKKwkJeworCQkJaW50IGkgPSAwOworCisJCQl3aGlsZSAodHJ1ZSkgeworCQkJCXU4IHRtcDI0RiA9IHJlYWRfbmljX2J5dGUoZGV2LCAweDI0Zik7CisKKwkJCQlpZiAoKHRtcDI0RiA9PSAweDAxKSB8fCAodG1wMjRGID09IDB4MDkpKSB7CisJCQkJCWJUdXJuT2ZmQkIgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9IGVsc2UgeworCQkJCQliVHVybk9mZkJCID0gZmFsc2U7CisJCQkJCXVkZWxheSgxMCk7CisJCQkJCWkrKzsKKwkJCQl9CisKKwkJCQlpZiAoaSA+IE1BWF9QT0xMSU5HXzI0Rl9USU1FU184N1NFKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChiVHVybk9mZkJCKSB7CisJCQkvKiB0dXJuIG9mZiBCQiAqLworCQkJdTFiVG1wID0gcmVhZF9uaWNfYnl0ZShkZXYsIDB4MjRFKTsKKwkJCXdyaXRlX25pY19ieXRlKGRldiwgMHgyNEUsICh1MWJUbXAgfCBCSVQ1IHwgQklUNikpOworCisJCQkvKiB0dXJuIG9mZiBBRkUgUExMICg4ME0pICovCisJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIDB4NTQsIDB4RkMpOworCQkJd3JpdGVfbmljX3dvcmQoZGV2LCAweDM3QywgMHgwMEZDKTsKIAkJfQogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTg1Yl9pbml0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTg1Yl9pbml0LmMKaW5kZXggNTAzMDlmMi4uYTBlY2UxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4NWJfaW5pdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODViX2luaXQuYwpAQCAtMjM4LDEwMCArMjM4LDEyIEBACiAJcmV0dXJuIGRhdGE7CiB9CiAKLXZvaWQKLVNldE91dHB1dEVuYWJsZU9mUmZQaW5zKAotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYKLQkpCit2b2lkIFNldE91dHB1dEVuYWJsZU9mUmZQaW5zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOwotCi0Jc3dpdGNoKHByaXYtPnJmX2NoaXApCi0JewotCWNhc2UgUkZDSElQSURfUlRMODIyNToKLQljYXNlIFJGX1pFQlJBMjoKLQljYXNlIFJGX1pFQlJBNDoKLQkJd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNFbmFibGUsIDB4MWJmZik7Ci0JCS8vd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNFbmFibGUsIDB4MWZmZik7Ci0JCWJyZWFrOwotCX0KKwl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc0VuYWJsZSwgMHgxYmZmKTsKIH0KIAotdm9pZAotWkVCUkFfUkZTZXJpYWxXcml0ZSgKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCXUzMgkJCWRhdGEyV3JpdGUsCi0JdTgJCQl0b3RhbExlbmd0aCwKLQl1OAkJCWxvdzJoaWdoCi0JKQotewotCVRocmVlV2lyZVJlZwkJdHdyZWc7Ci0JaW50IAkJCQlpOwotCXUxNgkJCQlvdmFsLG92YWwyLG92YWwzOwotCXUzMgkJCQltYXNrOwotCXUxNgkJCQlVc2hvcnRCdWZmZXI7Ci0KLQl1OAkJCXUxYlRtcDsKLQkvLyBSVEw4MTg3UyBIU1NJIFJlYWQvV3JpdGUgRnVuY3Rpb24KLQl1MWJUbXAgPSByZWFkX25pY19ieXRlKGRldiwgUkZfU1dfQ09ORklHKTsKLQl1MWJUbXAgfD0gICBSRl9TV19DRkdfU0k7ICAgLy9yZWcwOFsxXT0xIFNlcmlhbCBJbnRlcmZhY2UoU0kpCi0Jd3JpdGVfbmljX2J5dGUoZGV2LCBSRl9TV19DT05GSUcsIHUxYlRtcCk7Ci0JVXNob3J0QnVmZmVyID0gcmVhZF9uaWNfd29yZChkZXYsIFJGUGluc091dHB1dCk7Ci0Jb3ZhbCA9IFVzaG9ydEJ1ZmZlciAmIDB4ZmZmODsgLy8gV2Ugc2hhbGwgY2xlYXIgYml0MCwgMSwgMiBmaXJzdCwgMjAwNS4xMC4yOCwgYnkgcmNuamtvLgotCi0Jb3ZhbDIgPSByZWFkX25pY193b3JkKGRldiwgUkZQaW5zRW5hYmxlKTsKLQlvdmFsMyA9IHJlYWRfbmljX3dvcmQoZGV2LCBSRlBpbnNTZWxlY3QpOwotCi0JLy8gPFJKX05PVEU+IDMtd2lyZSBzaG91bGQgYmUgY29udHJvbGVkIGJ5IEhXIHdoZW4gd2UgZmluaXNoIFNXIDMtd2lyZSBwcm9ncmFtbWluZy4gMjAwNS4wOC4xMCwgYnkgcmNuamtvLgotCW92YWwzICY9IDB4ZmZmODsKLQotCXdyaXRlX25pY193b3JkKGRldiwgUkZQaW5zRW5hYmxlLCAob3ZhbDJ8MHgwMDA3KSk7IC8vIFNldCBUbyBPdXRwdXQgRW5hYmxlCi0Jd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNTZWxlY3QsIChvdmFsM3wweDAwMDcpKTsgLy8gU2V0IFRvIFNXIFN3aXRjaAotCXVkZWxheSgxMCk7Ci0KLQkvLyBBZGQgdGhpcyB0byBhdm9pZCBoYXJkd2FyZSBhbmQgc29mdHdhcmUgMy13aXJlIGNvbmZsaWN0LgotCS8vIDIwMDUuMDMuMDEsIGJ5IHJjbmprby4KLQl0d3JlZy5sb25nRGF0YSA9IDA7Ci0JdHdyZWcuc3RydWMuZW5hYmxlQiA9IDE7Ci0Jd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNPdXRwdXQsICh0d3JlZy5sb25nRGF0YXxvdmFsKSk7IC8vIFNldCBTSV9FTiAoUkZMRSkKLQl1ZGVsYXkoMik7Ci0JdHdyZWcuc3RydWMuZW5hYmxlQiA9IDA7Ci0Jd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNPdXRwdXQsICh0d3JlZy5sb25nRGF0YXxvdmFsKSk7IC8vIENsZWFyIFNJX0VOIChSRkxFKQotCXVkZWxheSgxMCk7Ci0KLQltYXNrID0gKGxvdzJoaWdoKT8weDAxOigodTMyKTB4MDE8PCh0b3RhbExlbmd0aC0xKSk7Ci0KLQlmb3IoaT0wOyBpPHRvdGFsTGVuZ3RoLzI7IGkrKykKLQl7Ci0JCXR3cmVnLnN0cnVjLmRhdGEgPSAoKGRhdGEyV3JpdGUmbWFzaykhPTApID8gMSA6IDA7Ci0JCXdyaXRlX25pY193b3JkKGRldiwgUkZQaW5zT3V0cHV0LCAodHdyZWcubG9uZ0RhdGF8b3ZhbCkpOwotCQl0d3JlZy5zdHJ1Yy5jbGsgPSAxOwotCQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc091dHB1dCwgKHR3cmVnLmxvbmdEYXRhfG92YWwpKTsKLQkJd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNPdXRwdXQsICh0d3JlZy5sb25nRGF0YXxvdmFsKSk7Ci0KLQkJbWFzayA9IChsb3cyaGlnaCk/KG1hc2s8PDEpOihtYXNrPj4xKTsKLQkJdHdyZWcuc3RydWMuZGF0YSA9ICgoZGF0YTJXcml0ZSZtYXNrKSE9MCkgPyAxIDogMDsKLQkJd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNPdXRwdXQsICh0d3JlZy5sb25nRGF0YXxvdmFsKSk7Ci0JCXdyaXRlX25pY193b3JkKGRldiwgUkZQaW5zT3V0cHV0LCAodHdyZWcubG9uZ0RhdGF8b3ZhbCkpOwotCQl0d3JlZy5zdHJ1Yy5jbGsgPSAwOwotCQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc091dHB1dCwgKHR3cmVnLmxvbmdEYXRhfG92YWwpKTsKLQkJbWFzayA9IChsb3cyaGlnaCk/KG1hc2s8PDEpOihtYXNrPj4xKTsKLQl9Ci0KLQl0d3JlZy5zdHJ1Yy5lbmFibGVCID0gMTsKLQl0d3JlZy5zdHJ1Yy5jbGsgPSAwOwotCXR3cmVnLnN0cnVjLmRhdGEgPSAwOwotCXdyaXRlX25pY193b3JkKGRldiwgUkZQaW5zT3V0cHV0LCB0d3JlZy5sb25nRGF0YXxvdmFsKTsKLQl1ZGVsYXkoMTApOwotCi0Jd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNPdXRwdXQsIG92YWx8MHgwMDA0KTsKLQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc1NlbGVjdCwgb3ZhbDN8MHgwMDAwKTsKLQotCVNldE91dHB1dEVuYWJsZU9mUmZQaW5zKGRldik7Ci19Ci0vL2J5IGFteQotCi0KLWludAorc3RhdGljIGludAogSHdIU1NJVGhyZWVXaXJlKAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJdTgJCQkqcERhdGFCdWYsCkBAIC00NjksNDIwICszODEsMzAgQEAKIAogCXJldHVybiBiUmVzdWx0OwogfQotLy9ieSBhbXkKLQotaW50Ci1Id1RocmVlV2lyZSgKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCXU4CQkJKnBEYXRhQnVmLAotCXU4CQkJbkRhdGFCdWZCaXRDbnQsCi0JaW50CQkJYkhvbGQsCi0JaW50CQkJYldyaXRlCi0JKQotewotCWludAliUmVzdWx0ID0gMTsKLQl1OAlUcnlDbnQ7Ci0JdTgJdTFiVG1wOwotCi0JZG8KLQl7Ci0JCS8vIENoZWNrIGlmIFdFIGFuZCBSRSBhcmUgY2xlYXJlZC4KLQkJZm9yKFRyeUNudCA9IDA7IFRyeUNudCA8IFRDXzNXX1BPTExfTUFYX1RSWV9DTlQ7IFRyeUNudCsrKQotCQl7Ci0JCQl1MWJUbXAgPSByZWFkX25pY19ieXRlKGRldiwgU1dfM1dfQ01EMSk7Ci0JCQlpZiggKHUxYlRtcCAmIChTV18zV19DTUQxX1JFfFNXXzNXX0NNRDFfV0UpKSA9PSAwICkKLQkJCXsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXVkZWxheSgxMCk7Ci0JCX0KLQkJaWYgKFRyeUNudCA9PSBUQ18zV19QT0xMX01BWF9UUllfQ05UKQotCQkJcGFuaWMoIkh3VGhyZWVXaXJlKCk6IENtZFJlZzogJSNYIFJFfFdFIGJpdHMgYXJlIG5vdCBjbGVhciEhXG4iLCB1MWJUbXApOwotCi0JCS8vIEZpbGwgdXAgZGF0YSBidWZmZXIgZm9yIHdyaXRlIG9wZXJhdGlvbi4KLQkJaWYobkRhdGFCdWZCaXRDbnQgPT0gMTYpCi0JCXsKLQkJCXdyaXRlX25pY193b3JkKGRldiwgU1dfM1dfREIwLCAqKCh1MTYgKilwRGF0YUJ1ZikpOwotCQl9Ci0JCWVsc2UgaWYobkRhdGFCdWZCaXRDbnQgPT0gNjQpCi0JCXsKLQkJCXdyaXRlX25pY19kd29yZChkZXYsIFNXXzNXX0RCMCwgKigodTMyICopcERhdGFCdWYpKTsKLQkJCXdyaXRlX25pY19kd29yZChkZXYsIFNXXzNXX0RCMSwgKigodTMyICopKHBEYXRhQnVmICsgNCkpKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCWludCBpZHg7Ci0JCQlpbnQgQnl0ZUNudCA9IG5EYXRhQnVmQml0Q250IC8gODsKLQotCQkJaWYgKChuRGF0YUJ1ZkJpdENudCAlIDgpICE9IDApCi0JCQkJcGFuaWMoIkh3VGhyZWVXaXJlKCk6IG5EYXRhQnVmQml0Q250KCVkKSBzaG91bGQgYmUgbXVsdGlwbGUgb2YgOCEhIVxuIiwKLQkJCQluRGF0YUJ1ZkJpdENudCk7Ci0KLQkJCWlmIChuRGF0YUJ1ZkJpdENudCA+IDY0KQotCQkJCXBhbmljKCJId1RocmVlV2lyZSgpOiBuRGF0YUJ1ZkJpdENudCglZCkgc2hvdWxkIDw9IDY0ISEhXG4iLAotCQkJCW5EYXRhQnVmQml0Q250KTsKLQotCQkJZm9yKGlkeCA9IDA7IGlkeCA8IEJ5dGVDbnQ7IGlkeCsrKQotCQkJewotCQkJCXdyaXRlX25pY19ieXRlKGRldiwgKFNXXzNXX0RCMCtpZHgpLCAqKHBEYXRhQnVmK2lkeCkpOwotCQkJfQotCQl9Ci0KLQkJLy8gRmlsbCB1cCBsZW5ndGggZmllbGQuCi0JCXUxYlRtcCA9ICh1OCkobkRhdGFCdWZCaXRDbnQgLSAxKTsgLy8gTnVtYmVyIG9mIGJpdHMgLSAxLgotCQlpZihiSG9sZCkKLQkJCXUxYlRtcCB8PSBTV18zV19DTUQwX0hPTEQ7Ci0JCXdyaXRlX25pY19ieXRlKGRldiwgU1dfM1dfQ01EMCwgdTFiVG1wKTsKLQotCQkvLyBTZXQgdXAgY29tbWFuZDogV0Ugb3IgUkUuCi0JCWlmKGJXcml0ZSkKLQkJewotCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBTV18zV19DTUQxLCBTV18zV19DTUQxX1dFKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXdyaXRlX25pY19ieXRlKGRldiwgU1dfM1dfQ01EMSwgU1dfM1dfQ01EMV9SRSk7Ci0JCX0KLQotCQkvLyBDaGVjayBpZiBXRSBhbmQgUkUgYXJlIGNsZWFyZWQgYW5kIERPTkUgaXMgc2V0LgotCQlmb3IoVHJ5Q250ID0gMDsgVHJ5Q250IDwgVENfM1dfUE9MTF9NQVhfVFJZX0NOVDsgVHJ5Q250KyspCi0JCXsKLQkJCXUxYlRtcCA9IHJlYWRfbmljX2J5dGUoZGV2LCBTV18zV19DTUQxKTsKLQkJCWlmKCAodTFiVG1wICYgKFNXXzNXX0NNRDFfUkV8U1dfM1dfQ01EMV9XRSkpID09IDAgJiYKLQkJCQkodTFiVG1wICYgU1dfM1dfQ01EMV9ET05FKSAhPSAwICkKLQkJCXsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXVkZWxheSgxMCk7Ci0JCX0KLQkJaWYoVHJ5Q250ID09IFRDXzNXX1BPTExfTUFYX1RSWV9DTlQpCi0JCXsKLQkJCS8vUlRfQVNTRVJUKFRyeUNudCAhPSBUQ18zV19QT0xMX01BWF9UUllfQ05ULAotCQkJLy8JKCJId1RocmVlV2lyZSgpOiBDbWRSZWc6ICUjWCBSRXxXRSBiaXRzIGFyZSBub3QgY2xlYXIgb3IgRE9ORSBpcyBub3Qgc2V0ISFcbiIsIHUxYlRtcCkpOwotCQkJLy8gV29ya2Fyb3VuZCBzdWdnZXN0ZWQgYnkgd2NjaHU6IGNsZWFyIFdFIGhlcmUuIDIwMDYuMDcuMDcsIGJ5IHJjbmprby4KLQkJCXdyaXRlX25pY19ieXRlKGRldiwgU1dfM1dfQ01EMSwgMCk7Ci0JCX0KLQotCQkvLyBSZWFkIGJhY2sgZGF0YSBmb3IgcmVhZCBvcGVyYXRpb24uCi0JCS8vIDxSSl9UT0RPPiBJIGFtIG5vdCBzdXJlIGlmIHRoaXMgaXMgY29ycmVjdCBvdXRwdXQgZm9ybWF0IG9mIGEgcmVhZCBvcGVyYXRpb24uCi0JCWlmKGJXcml0ZSA9PSAwKQotCQl7Ci0JCQlpZihuRGF0YUJ1ZkJpdENudCA9PSAxNikKLQkJCXsKLQkJCQkqKCh1MTYgKilwRGF0YUJ1ZikgPSByZWFkX25pY193b3JkKGRldiwgU1dfM1dfREIwKTsKLQkJCX0KLQkJCWVsc2UgaWYobkRhdGFCdWZCaXRDbnQgPT0gNjQpCi0JCQl7Ci0JCQkJKigodTMyICopcERhdGFCdWYpID0gcmVhZF9uaWNfZHdvcmQoZGV2LCBTV18zV19EQjApOwotCQkJCSooKHUzMiAqKShwRGF0YUJ1ZiArIDQpKSA9IHJlYWRfbmljX2R3b3JkKGRldiwgU1dfM1dfREIxKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlpbnQgaWR4OwotCQkJCWludCBCeXRlQ250ID0gbkRhdGFCdWZCaXRDbnQgLyA4OwotCi0JCQkJaWYgKChuRGF0YUJ1ZkJpdENudCAlIDgpICE9IDApCi0JCQkJCXBhbmljKCJId1RocmVlV2lyZSgpOiBuRGF0YUJ1ZkJpdENudCglZCkgc2hvdWxkIGJlIG11bHRpcGxlIG9mIDghISFcbiIsCi0JCQkJCW5EYXRhQnVmQml0Q250KTsKLQotCQkJCWlmIChuRGF0YUJ1ZkJpdENudCA+IDY0KQotCQkJCQlwYW5pYygiSHdUaHJlZVdpcmUoKTogbkRhdGFCdWZCaXRDbnQoJWQpIHNob3VsZCA8PSA2NCEhIVxuIiwKLQkJCQkJbkRhdGFCdWZCaXRDbnQpOwotCi0JCQkJZm9yKGlkeCA9IDA7IGlkeCA8IEJ5dGVDbnQ7IGlkeCsrKQotCQkJCXsKLQkJCQkJKihwRGF0YUJ1ZitpZHgpID0gcmVhZF9uaWNfYnl0ZShkZXYsIChTV18zV19EQjAraWR4KSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQl9d2hpbGUoMCk7Ci0KLQlyZXR1cm4gYlJlc3VsdDsKLX0KLQogCiB2b2lkCi1SRl9Xcml0ZVJlZygKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCXU4CQlvZmZzZXQsCi0JdTMyCQlkYXRhCi0JKQorUkZfV3JpdGVSZWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggb2Zmc2V0LCB1MzIgZGF0YSkKIHsKLQkvL1JGUmVnCQkJcmVnOwotCXUzMgkJCWRhdGEyV3JpdGU7Ci0JdTgJCQlsZW47Ci0JdTgJCQlsb3cyaGlnaDsKLQkvL3UzMgkJCVJGX1JlYWQgPSAwOwotCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKKwl1MzIgZGF0YTJXcml0ZTsKKwl1OCBsZW47CiAKKwkvKiBQdXJlIEhXIDMtd2lyZS4gKi8KKwlkYXRhMldyaXRlID0gKGRhdGEgPDwgNCkgfCAodTMyKShvZmZzZXQgJiAweDBmKTsKKwlsZW4gPSAxNjsKIAotCXN3aXRjaChwcml2LT5yZl9jaGlwKQotCXsKLQljYXNlIFJGQ0hJUElEX1JUTDgyMjU6Ci0JY2FzZSBSRl9aRUJSQTI6CQkvLyBBbm5pZSAyMDA2LTA1LTEyLgotCWNhc2UgUkZfWkVCUkE0OiAgICAgICAgLy9ieSBhbXkKLQkJc3dpdGNoKHByaXYtPlJlZ1RocmVlV2lyZU1vZGUpCi0JCXsKLQkJY2FzZSBTV19USFJFRV9XSVJFOgotCQkJeyAvLyBQZXJmb3JtIFNXIDMtd2lyZSBwcm9ncmFtbWluZyBieSBkcml2ZXIuCi0JCQkJZGF0YTJXcml0ZSA9IChkYXRhIDw8IDQpIHwgKHUzMikob2Zmc2V0ICYgMHgwZik7Ci0JCQkJbGVuID0gMTY7Ci0JCQkJbG93MmhpZ2ggPSAwOwotCQkJCVpFQlJBX1JGU2VyaWFsV3JpdGUoZGV2LCBkYXRhMldyaXRlLCBsZW4sIGxvdzJoaWdoKTsKLSAgICAgICAJCQl9Ci0JCQlicmVhazsKLQotIAkJY2FzZSBIV19USFJFRV9XSVJFOgotCQkJeyAvLyBQdXJlIEhXIDMtd2lyZS4KLQkJCQlkYXRhMldyaXRlID0gKGRhdGEgPDwgNCkgfCAodTMyKShvZmZzZXQgJiAweDBmKTsKLQkJCQlsZW4gPSAxNjsKLQkJCQlId1RocmVlV2lyZSgKLQkJCQkJZGV2LAotCQkJCQkodTggKikoJmRhdGEyV3JpdGUpLAkvLyBwRGF0YUJ1ZiwKLQkJCQkJbGVuLAkJCQkvLyBuRGF0YUJ1ZkJpdENudCwKLQkJCQkJMCwJCQkJCS8vIGJIb2xkLAotCQkJCQkxKTsJCQkJCS8vIGJXcml0ZQotICAgICAgICAgCQl9Ci0JCQlicmVhazsKLQkJCWNhc2UgSFdfVEhSRUVfV0lSRV9QSTogLy9QYXJhbGxlbCBJbnRlcmZhY2UKLQkJCXsgLy8gUHVyZSBIVyAzLXdpcmUuCi0JCQkJZGF0YTJXcml0ZSA9IChkYXRhIDw8IDQpIHwgKHUzMikob2Zmc2V0ICYgMHgwZik7Ci0JCQkJbGVuID0gMTY7Ci0JCQkJCUh3SFNTSVRocmVlV2lyZSgKLQkJCQkJCWRldiwKLQkJCQkJCSh1OCopKCZkYXRhMldyaXRlKSwJLy8gcERhdGFCdWYsCi0JCQkJCQlsZW4sCQkJCQkJLy8gbkRhdGFCdWZCaXRDbnQsCi0JCQkJCQkwLCAJCQkJCS8vIGJTSQotCQkJCQkJMSk7IAkJCQkJLy8gYldyaXRlCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9wcmludGsoIjMzMzMzXG4iKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCQljYXNlIEhXX1RIUkVFX1dJUkVfU0k6IC8vU2VyaWFsIEludGVyZmFjZQotCQkJeyAvLyBQdXJlIEhXIDMtd2lyZS4KLQkJCQlkYXRhMldyaXRlID0gKGRhdGEgPDwgNCkgfCAodTMyKShvZmZzZXQgJiAweDBmKTsKLQkJCQlsZW4gPSAxNjsKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIiBlbnRlciAgWkVCUkFfUkZTZXJpYWxXcml0ZVxuICIpOwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvdzJoaWdoID0gMDsKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaRUJSQV9SRlNlcmlhbFdyaXRlKGRldiwgZGF0YTJXcml0ZSwgbGVuLCBsb3cyaGlnaCk7Ci0KLQkJCQlId0hTU0lUaHJlZVdpcmUoCi0JCQkJCWRldiwKLQkJCQkJKHU4KikoJmRhdGEyV3JpdGUpLAkvLyBwRGF0YUJ1ZiwKLQkJCQkJbGVuLAkJCQkJCS8vIG5EYXRhQnVmQml0Q250LAotCQkJCQkxLCAJCQkJCS8vIGJTSQotCQkJCQkxKTsgCQkJCQkvLyBiV3JpdGUKLQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIiBleGl0IFpFQlJBX1JGU2VyaWFsV3JpdGVcbiAiKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0KLQkJZGVmYXVsdDoKLQkJCURNRVNHRSgiUkZfV3JpdGVSZWcoKTogaW52YWxpZCBSZWdUaHJlZVdpcmVNb2RlKCVkKSAhISEiLCBwcml2LT5SZWdUaHJlZVdpcmVNb2RlKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJRE1FU0dFKCJSRl9Xcml0ZVJlZygpOiB1bmtub3duIFJGQ2hpcElEOiAlI1giLCBwcml2LT5yZl9jaGlwKTsKLQkJYnJlYWs7Ci0JfQorCUh3SFNTSVRocmVlV2lyZShkZXYsICh1OCAqKSgmZGF0YTJXcml0ZSksIGxlbiwgMSwgMSk7CiB9CiAKLQotdm9pZAotWkVCUkFfUkZTZXJpYWxSZWFkKAotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JdTMyCQlkYXRhMldyaXRlLAotCXU4CQl3TGVuZ3RoLAotCXUzMgkJKmRhdGEyUmVhZCwKLQl1OAkJckxlbmd0aCwKLQl1OAkJbG93MmhpZ2gKLQkpCit1MzIgUkZfUmVhZFJlZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBvZmZzZXQpCiB7Ci0JVGhyZWVXaXJlUmVnCXR3cmVnOwotCWludAkJCQlpOwotCXUxNgkJCW92YWwsb3ZhbDIsb3ZhbDMsdG1wLCB3UmVnODA7Ci0JdTMyCQkJbWFzazsKLQl1OAkJCXUxYlRtcDsKLQlUaHJlZVdpcmVSZWcJdGRhdGE7Ci0JLy9QSEFMX0RBVEFfODE4NwlwSGFsRGF0YSA9IEdldEhhbERhdGE4MTg3KHBBZGFwdGVyKTsKLQl7IC8vIFJUTDgxODdTIEhTU0kgUmVhZC9Xcml0ZSBGdW5jdGlvbgotCQl1MWJUbXAgPSByZWFkX25pY19ieXRlKGRldiwgUkZfU1dfQ09ORklHKTsKLQkJdTFiVG1wIHw9ICAgUkZfU1dfQ0ZHX1NJOyAgIC8vcmVnMDhbMV09MSBTZXJpYWwgSW50ZXJmYWNlKFNJKQotCQl3cml0ZV9uaWNfYnl0ZShkZXYsIFJGX1NXX0NPTkZJRywgdTFiVG1wKTsKLQl9CisJdTMyIGRhdGEyV3JpdGU7CisJdTggd2xlbjsKKwl1MzIgZGF0YVJlYWQ7CiAKLQl3UmVnODAgPSBvdmFsID0gcmVhZF9uaWNfd29yZChkZXYsIFJGUGluc091dHB1dCk7Ci0Jb3ZhbDIgPSByZWFkX25pY193b3JkKGRldiwgUkZQaW5zRW5hYmxlKTsKLQlvdmFsMyA9IHJlYWRfbmljX3dvcmQoZGV2LCBSRlBpbnNTZWxlY3QpOwotCi0Jd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNFbmFibGUsIG92YWwyfDB4Zik7Ci0Jd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNTZWxlY3QsIG92YWwzfDB4Zik7Ci0KLQkqZGF0YTJSZWFkID0gMDsKLQotCS8vIFdlIG11c3QgY2xlYXIgQklUMC0zIGhlcmUsIG90aGVyd2lzZSwKLQkvLyBTV19FbmFsYmUgd2lsbCBiZSB0cnVlIHdoZW4gd2UgZmlyc3QgY2FsbCBaRUJSQV9SRlNlcmlhbFJlYWQoKSBhZnRlciA4MTg3TVBWQyBvcGVuLAotCS8vIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHZhbHVlIHJlYWQgYmVjb21lIDAuIDIwMDUuMDQuMTEsIGJ5IHJjbmprby4KLQlvdmFsICY9IH4weGY7Ci0KLQkvLyBBdm9pZCBjb2xsaXNpb24gd2l0aCBoYXJkd2FyZSB0aHJlZS13aXJlLgotCXR3cmVnLmxvbmdEYXRhID0gMDsKLQl0d3JlZy5zdHJ1Yy5lbmFibGVCID0gMTsKLQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc091dHB1dCwgdHdyZWcubG9uZ0RhdGF8b3ZhbCk7IHVkZWxheSg0KTsKLQotCXR3cmVnLmxvbmdEYXRhID0gMDsKLQl0d3JlZy5zdHJ1Yy5lbmFibGVCID0gMDsKLQl0d3JlZy5zdHJ1Yy5jbGsgPSAwOwotCXR3cmVnLnN0cnVjLnJlYWRfd3JpdGUgPSAwOwotCXdyaXRlX25pY193b3JkKGRldiwgUkZQaW5zT3V0cHV0LCB0d3JlZy5sb25nRGF0YXxvdmFsKTsgdWRlbGF5KDUpOwotCi0JbWFzayA9IChsb3cyaGlnaCkgPyAweDAxIDogKCh1MzIpMHgwMTw8KDMyLTEpKTsKLQlmb3IoaSA9IDA7IGkgPCB3TGVuZ3RoLzI7IGkrKykKLQl7Ci0JCXR3cmVnLnN0cnVjLmRhdGEgPSAoKGRhdGEyV3JpdGUmbWFzaykgIT0gMCkgPyAxIDogMDsKLQkJd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNPdXRwdXQsIHR3cmVnLmxvbmdEYXRhfG92YWwpOyB1ZGVsYXkoMSk7Ci0JCXR3cmVnLnN0cnVjLmNsayA9IDE7Ci0JCXdyaXRlX25pY193b3JkKGRldiwgUkZQaW5zT3V0cHV0LCB0d3JlZy5sb25nRGF0YXxvdmFsKTsgdWRlbGF5KDIpOwotCQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc091dHB1dCwgdHdyZWcubG9uZ0RhdGF8b3ZhbCk7IHVkZWxheSgyKTsKLQotCQltYXNrID0gKGxvdzJoaWdoKSA/IChtYXNrPDwxKTogKG1hc2s+PjEpOwotCi0JCWlmKGkgPT0gMikKLQkJewotCQkJLy8gQ29tbWVudGVkIG91dCBieSBKYWNraWUsIDIwMDQuMDguMjYuIDxSSl9OT1RFPiBXZSBtdXN0IGNvbW1lbnQgb3V0IHRoZSBmb2xsb3dpbmcgdHdvIGxpbmVzIGZvciB3ZSBjYW5ub3QgcHVsbCBkb3duIFZDT1BETiBkdXJpbmcgUkYgU2VyYWlsIFJlYWQuCi0JCQkvL1BsYXRmb3JtRUZJT1dyaXRlMkJ5dGUocEFkYXB0ZXIsIFJGUGluc0VuYWJsZSwgMHhlKTsgICAgIC8vIHR1cm4gb2ZmIGRhdGEgZW5hYmxlCi0JCQkvL1BsYXRmb3JtRUZJT1dyaXRlMkJ5dGUocEFkYXB0ZXIsIFJGUGluc1NlbGVjdCwgMHhlKTsKLQotCQkJdHdyZWcuc3RydWMucmVhZF93cml0ZT0xOwotCQkJd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNPdXRwdXQsIHR3cmVnLmxvbmdEYXRhfG92YWwpOyB1ZGVsYXkoMik7Ci0JCQl0d3JlZy5zdHJ1Yy5jbGsgPSAwOwotCQkJd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNPdXRwdXQsIHR3cmVnLmxvbmdEYXRhfG92YWwpOyB1ZGVsYXkoMik7Ci0JCQlicmVhazsKLQkJfQotCQl0d3JlZy5zdHJ1Yy5kYXRhID0gKChkYXRhMldyaXRlJm1hc2spICE9IDApID8gMTogMDsKLQkJd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNPdXRwdXQsIHR3cmVnLmxvbmdEYXRhfG92YWwpOyB1ZGVsYXkoMik7Ci0JCXdyaXRlX25pY193b3JkKGRldiwgUkZQaW5zT3V0cHV0LCB0d3JlZy5sb25nRGF0YXxvdmFsKTsgdWRlbGF5KDIpOwotCi0JCXR3cmVnLnN0cnVjLmNsayA9IDA7Ci0JCXdyaXRlX25pY193b3JkKGRldiwgUkZQaW5zT3V0cHV0LCB0d3JlZy5sb25nRGF0YXxvdmFsKTsgdWRlbGF5KDEpOwotCi0JCW1hc2sgPSAobG93MmhpZ2gpID8gKG1hc2s8PDEpIDogKG1hc2s+PjEpOwotCX0KLQotCXR3cmVnLnN0cnVjLmNsayA9IDA7Ci0JdHdyZWcuc3RydWMuZGF0YSA9IDA7Ci0Jd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNPdXRwdXQsIHR3cmVnLmxvbmdEYXRhfG92YWwpOyB1ZGVsYXkoMik7Ci0JbWFzayA9IChsb3cyaGlnaCkgPyAweDAxIDogKCh1MzIpMHgwMSA8PCAoMTItMSkpOwotCi0JLy8KLQkvLyAwNjEwMTYsIGJ5IHJjbmprbzoKLQkvLyBXZSBtdXN0IHNldCBkYXRhIHBpbiB0byBIVyBjb250cm9sZWQsIG90aGVyd2lzZSBSRiBjYW4ndCBkcml2ZXIgaXQgYW5kCi0JLy8gdmFsdWUgUkYgcmVnaXN0ZXIgd29uJ3QgYmUgYWJsZSB0byByZWFkIGJhY2sgcHJvcGVybHkuCi0JLy8KLQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc0VuYWJsZSwgKCAoKG92YWwyfDB4MEUpICYgKH4weDAxKSkpICk7Ci0KLQlmb3IoaSA9IDA7IGkgPCByTGVuZ3RoOyBpKyspCi0JewotCQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc091dHB1dCwgdHdyZWcubG9uZ0RhdGF8b3ZhbCk7IHVkZWxheSgxKTsKLQkJdHdyZWcuc3RydWMuY2xrID0gMTsKLQkJd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNPdXRwdXQsIHR3cmVnLmxvbmdEYXRhfG92YWwpOyB1ZGVsYXkoMik7Ci0JCXdyaXRlX25pY193b3JkKGRldiwgUkZQaW5zT3V0cHV0LCB0d3JlZy5sb25nRGF0YXxvdmFsKTsgdWRlbGF5KDIpOwotCQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc091dHB1dCwgdHdyZWcubG9uZ0RhdGF8b3ZhbCk7IHVkZWxheSgyKTsKLQkJdG1wID0gcmVhZF9uaWNfd29yZChkZXYsIFJGUGluc0lucHV0KTsKLQkJdGRhdGEubG9uZ0RhdGEgPSB0bXA7Ci0JCSpkYXRhMlJlYWQgfD0gdGRhdGEuc3RydWMuY2xrID8gbWFzayA6IDA7Ci0KLQkJdHdyZWcuc3RydWMuY2xrID0gMDsKLQkJd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNPdXRwdXQsIHR3cmVnLmxvbmdEYXRhfG92YWwpOyB1ZGVsYXkoMik7Ci0KLQkJbWFzayA9IChsb3cyaGlnaCkgPyAobWFzazw8MSkgOiAobWFzaz4+MSk7Ci0JfQotCXR3cmVnLnN0cnVjLmVuYWJsZUIgPSAxOwotCXR3cmVnLnN0cnVjLmNsayA9IDA7Ci0JdHdyZWcuc3RydWMuZGF0YSA9IDA7Ci0JdHdyZWcuc3RydWMucmVhZF93cml0ZSA9IDE7Ci0Jd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNPdXRwdXQsIHR3cmVnLmxvbmdEYXRhfG92YWwpOyB1ZGVsYXkoMik7Ci0KLQkvL1BsYXRmb3JtRUZJT1dyaXRlMkJ5dGUocEFkYXB0ZXIsIFJGUGluc0VuYWJsZSwgb3ZhbDJ8MHg4KTsgICAvLyBTZXQgVG8gT3V0cHV0IEVuYWJsZQotCXdyaXRlX25pY193b3JkKGRldiwgUkZQaW5zRW5hYmxlLCBvdmFsMik7ICAgLy8gU2V0IFRvIE91dHB1dCBFbmFibGUsIDxSSl9OT1RFPiBXZSBjYW5ub3QgZW5hYmxlIEJJVDMgaGVyZSwgb3RoZXJ3aXNlLCB3ZSB3aWxsIGZhaWxlZCB0byBzd2l0Y2ggY2hhbm5lbC4gMjAwNS4wNC4xMi4KLQkvL1BsYXRmb3JtRUZJT1dyaXRlMkJ5dGUocEFkYXB0ZXIsIFJGUGluc0VuYWJsZSwgMHgxYmZmKTsKLQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc1NlbGVjdCwgb3ZhbDMpOyAgIC8vIFNldCBUbyBTVyBTd2l0Y2gKLQkvL1BsYXRmb3JtRUZJT1dyaXRlMkJ5dGUocEFkYXB0ZXIsIFJGUGluc1NlbGVjdCwgMHgwNDg4KTsKLQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc091dHB1dCwgMHgzYTApOwotCS8vUGxhdGZvcm1FRklPV3JpdGUyQnl0ZShwQWRhcHRlciwgUkZQaW5zT3V0cHV0LCAweDA0ODApOwotfQotCi0KLXUzMgotUkZfUmVhZFJlZygKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCXU4CQlvZmZzZXQKLQkpCi17Ci0Jc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOwotCXUzMgkJCWRhdGEyV3JpdGU7Ci0JdTgJCQl3bGVuOwotCXU4CQkJcmxlbjsKLQl1OAkJCWxvdzJoaWdoOwotCXUzMgkJCWRhdGFSZWFkOwotCi0Jc3dpdGNoKHByaXYtPnJmX2NoaXApCi0JewotCWNhc2UgUkZDSElQSURfUlRMODIyNToKLQljYXNlIFJGX1pFQlJBMjoKLQljYXNlIFJGX1pFQlJBNDoKLQkJc3dpdGNoKHByaXYtPlJlZ1RocmVlV2lyZU1vZGUpCi0JCXsKLQkJCWNhc2UgSFdfVEhSRUVfV0lSRV9QSTogLy8gRm9yIDg3UyAgUGFyYWxsZWwgSW50ZXJmYWNlLgotCQkJewotCQkJCWRhdGEyV3JpdGUgPSAoKHUzMikob2Zmc2V0JjB4MGYpKTsKLQkJCQl3bGVuPTE2OwotCQkJCUh3SFNTSVRocmVlV2lyZSgKLQkJCQkJZGV2LAotCQkJCQkodTgqKSgmZGF0YTJXcml0ZSksCS8vIHBEYXRhQnVmLAotCQkJCQl3bGVuLAkJCQkJLy8gbkRhdGFCdWZCaXRDbnQsCi0JCQkJCTAsIAkJCQkJLy8gYlNJCi0JCQkJCTApOyAJCQkJCS8vIGJXcml0ZQotCQkJCWRhdGFSZWFkPSBkYXRhMldyaXRlOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJCWNhc2UgSFdfVEhSRUVfV0lSRV9TSTogLy8gRm9yIDg3UyBTZXJpYWwgSW50ZXJmYWNlLgotCQkJewotCQkJCWRhdGEyV3JpdGUgPSAoKHUzMikob2Zmc2V0JjB4MGYpKSA7Ci0JCQkJd2xlbj0xNjsKLQkJCQlId0hTU0lUaHJlZVdpcmUoCi0JCQkJCWRldiwKLQkJCQkJKHU4KikoJmRhdGEyV3JpdGUpLAkvLyBwRGF0YUJ1ZiwKLQkJCQkJd2xlbiwJCQkJCS8vIG5EYXRhQnVmQml0Q250LAotCQkJCQkxLCAJCQkJCS8vIGJTSQotCQkJCQkwCQkJCQkvLyBiV3JpdGUKLQkJCQkJKTsKLQkJCQlkYXRhUmVhZD0gZGF0YTJXcml0ZTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCQkvLyBQZXJmb3JtIFNXIDMtd2lyZSBwcm9ncmFtbWluZyBieSBkcml2ZXIuCi0JCQlkZWZhdWx0OgotCQkJewotCQkJCWRhdGEyV3JpdGUgPSAoKHUzMikob2Zmc2V0JjB4MWYpKSA8PCAyNzsgLy8gRm9yIFplYnJhIEUtY3V0LiAyMDA1LjA0LjExLCBieSByY25qa28uCi0JCQkJd2xlbiA9IDY7Ci0JCQkJcmxlbiA9IDEyOwotCQkJCWxvdzJoaWdoID0gMDsKLQkJCQlaRUJSQV9SRlNlcmlhbFJlYWQoZGV2LCBkYXRhMldyaXRlLCB3bGVuLCZkYXRhUmVhZCxybGVuLCBsb3cyaGlnaCk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlkYXRhUmVhZCA9IDA7Ci0JCWJyZWFrOwotCX0KKwlkYXRhMldyaXRlID0gKCh1MzIpKG9mZnNldCAmIDB4MGYpKTsKKwl3bGVuID0gMTY7CisJSHdIU1NJVGhyZWVXaXJlKGRldiwgKHU4ICopKCZkYXRhMldyaXRlKSwgd2xlbiwgMSwgMCk7CisJZGF0YVJlYWQgPSBkYXRhMldyaXRlOwogCiAJcmV0dXJuIGRhdGFSZWFkOwogfQpAQCAtMTA0MywxNSArNTY1LDEyIEBACiAKIAkvLyBQYWdlMCA6IHJlZzAtcmVnMTUKIAotLy8JUkZfV3JpdGVSZWcoZGV2LCAweDAwLCAweDAwM2YpOwkJCW1kZWxheSgxKTsvLzEKIAlSRl9Xcml0ZVJlZyhkZXYsIDB4MDAsIDB4MDA5Zik7ICAgICAgCW1kZWxheSgxKTsvLyAxCiAKIAlSRl9Xcml0ZVJlZyhkZXYsIDB4MDEsIDB4MDZlMCk7CQkJbWRlbGF5KDEpOwogCi0vLwlSRl9Xcml0ZVJlZyhkZXYsIDB4MDIsIDB4MDA0Yyk7CQkJbWRlbGF5KDEpOy8vMgogCVJGX1dyaXRlUmVnKGRldiwgMHgwMiwgMHgwMDRkKTsJCQltZGVsYXkoMSk7Ly8gMgogCi0vLwlSRl9Xcml0ZVJlZyhkZXYsIDB4MDMsIDB4MDAwMCk7CQkJbWRlbGF5KDEpOy8vMwogCVJGX1dyaXRlUmVnKGRldiwgMHgwMywgMHgwN2YxKTsJCQltZGVsYXkoMSk7Ly8gMwogCiAJUkZfV3JpdGVSZWcoZGV2LCAweDA0LCAweDA5NzUpOwkJCW1kZWxheSgxKTsKQEAgLTEwODAsOCArNTk5LDYgQEAKIAogCVJGX1dyaXRlUmVnKGRldiwgMHgwNywgMHgwMUEwKTsJCQltZGVsYXkoMSk7CiAvLyBEb24ndCB3cml0ZSBSRjIzL1JGMjQgdG8gbWFrZSBhIGRpZmZlcmVuY2UgYmV0d2VlbiA4N1MgQyBjdXQgYW5kIEQgY3V0LiBhc2tlZCBieSBTRDMgc3RldmVubC4KLS8vCVJGX1dyaXRlUmVnKGRldiwgMHgwOCwgMHgwNTk3KTsJCQltZGVsYXkoMSk7Ci0vLwlSRl9Xcml0ZVJlZyhkZXYsIDB4MDksIDB4MDUwYSk7CQkJbWRlbGF5KDEpOwogCVJGX1dyaXRlUmVnKGRldiwgMHgwYSwgMHgwMDAxKTsJCQltZGVsYXkoMSk7CiAJUkZfV3JpdGVSZWcoZGV2LCAweDBiLCAweDA0MTgpOwkJCW1kZWxheSgxKTsKIApAQCAtMTA5Nyw3ICs2MTQsNiBAQAogCiAJUkZfV3JpdGVSZWcoZGV2LCAweDBmLCAweDBhY2MpOwkJCW1kZWxheSgxKTsKIAotLy8JUkZfV3JpdGVSZWcoZGV2LCAweDAwLCAweDAxN2YpOwkJCW1kZWxheSgxKTsvLzYKIAlSRl9Xcml0ZVJlZyhkZXYsIDB4MDAsIDB4MDFkNyk7CQkJbWRlbGF5KDEpOy8vIDYKIAogCVJGX1dyaXRlUmVnKGRldiwgMHgwMywgMHgwZTAwKTsJCQltZGVsYXkoMSk7CkBAIC0xMTA2LDIwICs2MjIsMTQgQEAKIAl7CiAJCVJGX1dyaXRlUmVnKGRldiwgMHgwMSwgaSk7ICAgICAgICAgICAgICAgICAgICAgbWRlbGF5KDEpOwogCQlSRl9Xcml0ZVJlZyhkZXYsIDB4MDIsIFpFQlJBX1JGX1JYX0dBSU5fVEFCTEVbaV0pOyBtZGVsYXkoMSk7Ci0JCS8vRGJnUHJpbnQoIlJGIC0gMHgleCA9IDB4JXgiLCBpLCBaRUJSQV9SRl9SWF9HQUlOX1RBQkxFW2ldKTsKIAl9CiAKIAlSRl9Xcml0ZVJlZyhkZXYsIDB4MDUsIDB4MDIwMyk7CQkJbWRlbGF5KDEpOyAJLy8vIDIwMywgMzQzCi0JLy9SRl9Xcml0ZVJlZyhkZXYsIDB4MDYsIDB4MDMwMCk7CQkJbWRlbGF5KDEpOwkvLyA0MDAKIAlSRl9Xcml0ZVJlZyhkZXYsIDB4MDYsIDB4MDIwMCk7CQkJbWRlbGF5KDEpOwkvLyA0MDAKIAogCVJGX1dyaXRlUmVnKGRldiwgMHgwMCwgMHgwMTM3KTsJCQltZGVsYXkoMSk7CS8vIHN3aXRjaCB0byByZWcxNi1yZWczMCwgYW5kIEhTU0kgZGlzYWJsZSAxMzcKIAltZGVsYXkoMTApOyAJLy8gRGVheSAxMCBtcy4gLy8weGZkCiAKLS8vCVJGX1dyaXRlUmVnKGRldiwgMHgwYywgMHgwOWJlKTsJCQltZGVsYXkoMSk7CS8vIDcKLQkvL1JGX1dyaXRlUmVnKGRldiwgMHgwYywgMHgwN2JlKTsJCQltZGVsYXkoMSk7Ci0JLy9tZGVsYXkoMTApOyAJLy8gRGVheSAxMCBtcy4gLy8weGZkCi0KIAlSRl9Xcml0ZVJlZyhkZXYsIDB4MGQsIDB4MDAwOCk7CQkJbWRlbGF5KDEpOwkvLyBaNCBzeW50aGVzaXplciBsb29wIGZpbHRlciBzZXR0aW5nLCAzOTIKIAltZGVsYXkoMTApOyAJLy8gRGVheSAxMCBtcy4gLy8weGZkCiAKQEAgLTExNjUsMTAgKzY3NSw4IEBACiAJCVJGX1dyaXRlUmVnKGRldiwgMHgwZiwgMHgwYWNjKTsJCQltZGVsYXkoMSk7CiAJfQogLy9ieSBhbXkgMDgwMzEyCi0vLwlSRl9Xcml0ZVJlZyhkZXYsIDB4MGYsIDB4MGFjYyk7CQkJbWRlbGF5KDEpOyAgLy8tYnkgYW15IDA4MDMxMgogCiAJUkZfV3JpdGVSZWcoZGV2LCAweDAwLCAweDAwYmYpOwkJCW1kZWxheSgxKTsgLy8gc3dpdGNoIHRvIHJlZzAtcmVnMTUsIGFuZCBIU1NJIGVuYWJsZQotLy8JUkZfV3JpdGVSZWcoZGV2LCAweDBkLCAweDAwOWYpOwkJCW1kZWxheSgxKTsgLy8gUnggQkIgc3RhcnQgY2FsaWJyYXRpb24sIDAwYy8vLWVkd2FyZAogCVJGX1dyaXRlUmVnKGRldiwgMHgwZCwgMHgwOGRmKTsJCQltZGVsYXkoMSk7IC8vIFJ4IEJCIHN0YXJ0IGNhbGlicmF0aW9uLCAwMGMvLytlZHdhcmQKIAlSRl9Xcml0ZVJlZyhkZXYsIDB4MDIsIDB4MDA0ZCk7CQkJbWRlbGF5KDEpOyAvLyB0ZW1wZXJhdHVyZSBtZXRlciBvZmYKIAlSRl9Xcml0ZVJlZyhkZXYsIDB4MDQsIDB4MDk3NSk7CQkJbWRlbGF5KDEpOyAvLyBSeCBtb2RlCkBAIC0xMjE3LDEzICs3MjUsMTAgQEAKIAkvLyBBR0MudHh0CiAJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0vLwlQbGF0Zm9ybUlPV3JpdGU0Qnl0ZSggZGV2LCBQaHlBZGRyLCAweDAwMDAxMjgwKTsJLy8gQW5uaWUsIDIwMDYtMDUtMDUKIAl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MDAsIDB4MTIpOwotCS8vV3JpdGVCQlBvcnRVY2hhcihkZXYsIDB4MDAwMDEyODApOwogCiAJZm9yIChpPTA7IGk8MTI4OyBpKyspCiAJewotCQkvL0RiZ1ByaW50KCJBR0MgLSBbJXgrMV0gPSAweCV4XG4iLCBpLCBaRUJSQV9BR0NbaSsxXSk7CiAKIAkJZGF0YSA9IFpFQlJBX0FHQ1tpKzFdOwogCQlkYXRhID0gZGF0YSA8PCA4OwpAQCAtMTIzOSw3ICs3NDQsNiBAQAogCX0KIAogCVBsYXRmb3JtSU9Xcml0ZTRCeXRlKCBkZXYsIFBoeUFkZHIsIDB4MDAwMDEwODApOwkvLyBBbm5pZSwgMjAwNi0wNS0wNQotCS8vV3JpdGVCQlBvcnRVY2hhcihkZXYsIDB4MDAwMDEwODApOwogCiAJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC0xMjUyLDggKzc1Niw2IEBACiAJCXU0YlJlZ09mZnNldD1pOwogCQl1NGJSZWdWYWx1ZT1PRkRNX0NPTkZJR1tpXTsKIAotCQkvL0RiZ1ByaW50KCJPRkRNIC0gMHgleCA9IDB4JXhcbiIsIHU0YlJlZ09mZnNldCwgdTRiUmVnVmFsdWUpOwotCiAJCVdyaXRlQkJQb3J0VWNoYXIoZGV2LAogCQkJCQkJKDB4MDAwMDAwODAgfAogCQkJCQkJKHU0YlJlZ09mZnNldCAmIDB4N2YpIHwKQEAgLTEyNzcsOSArNzc5LDYgQEAKIAkpCiB7CiAJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOwotCS8vdW5zaWduZWQgY2hhciogSUdUYWJsZTsKLQkvL3U4CQkJRElHX0N1cnJlbnRJbml0aWFsR2FpbiA9IDQ7Ci0JLy91bnNpZ25lZCBjaGFyIHUxVG1wOwogCiAJLy9sem0gYWRkIDA4MDgyNgogCWlmKHByaXYtPmVSRlBvd2VyU3RhdGUgIT0gZVJmT24pCkBAIC0xMjkxLDgxICs3OTAsNTkgQEAKIAkJcmV0dXJuOwogCX0KIAotCXN3aXRjaChwcml2LT5yZl9jaGlwKQotCXsKLQljYXNlIFJGX1pFQlJBNDoKLQkJLy8gRHluYW1pYyBzZXQgaW5pdGlhbCBnYWluLCBmb2xsb3cgODdCCi0JCXN3aXRjaChwcml2LT5Jbml0aWFsR2FpbikKLQkJewotCQkJY2FzZSAxOiAvL204NjFkQm0KLQkJCQkvL0RNRVNHKCJSVEw4MTg3ICsgODIyNSBJbml0aWFsIEdhaW4gU3RhdGUgMTogLTgyIGRCbSBcbiIpOwotCQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgxNywgMHgyNik7CW1kZWxheSgxKTsKLQkJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MjQsIDB4ODYpOwltZGVsYXkoMSk7Ci0JCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDA1LCAweGZhKTsJbWRlbGF5KDEpOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDI6IC8vbTg2MmRCbQotCQkJCS8vRE1FU0coIlJUTDgxODcgKyA4MjI1IEluaXRpYWwgR2FpbiBTdGF0ZSAyOiAtODIgZEJtIFxuIik7Ci0JCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDE3LCAweDM2KTsJbWRlbGF5KDEpOwotCQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgyNCwgMHg4Nik7CW1kZWxheSgxKTsKLQkJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MDUsIDB4ZmEpOwltZGVsYXkoMSk7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMzogLy9tODYzZEJtCi0JCQkJLy9ETUVTRygiUlRMODE4NyArIDgyMjUgSW5pdGlhbCBHYWluIFN0YXRlIDM6IC04MiBkQm0gXG4iKTsKLQkJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MTcsIDB4MzYpOwltZGVsYXkoMSk7Ci0JCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDI0LCAweDg2KTsJbWRlbGF5KDEpOwotCQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwNSwgMHhmYik7CW1kZWxheSgxKTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSA0OiAvL204NjRkQm0KLQkJCQkvL0RNRVNHKCJSVEw4MTg3ICsgODIyNSBJbml0aWFsIEdhaW4gU3RhdGUgNDogLTc4IGRCbSBcbiIpOwotCQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgxNywgMHg0Nik7CW1kZWxheSgxKTsKLQkJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MjQsIDB4ODYpOwltZGVsYXkoMSk7Ci0JCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDA1LCAweGZiKTsJbWRlbGF5KDEpOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDU6IC8vbTgyZEJtCi0JCQkJLy9ETUVTRygiUlRMODE4NyArIDgyMjUgSW5pdGlhbCBHYWluIFN0YXRlIDU6IC03NCBkQm0gXG4iKTsKLQkJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MTcsIDB4NDYpOwltZGVsYXkoMSk7Ci0JCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDI0LCAweDk2KTsJbWRlbGF5KDEpOwotCQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwNSwgMHhmYik7CW1kZWxheSgxKTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSA2OiAvL203OGRCbQotCQkJCS8vRE1FU0cgKCJSVEw4MTg3ICsgODIyNSBJbml0aWFsIEdhaW4gU3RhdGUgNjogLTcwIGRCbSBcbiIpOwotCQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgxNywgMHg1Nik7CW1kZWxheSgxKTsKLQkJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MjQsIDB4OTYpOwltZGVsYXkoMSk7Ci0JCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDA1LCAweGZjKTsJbWRlbGF5KDEpOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDc6IC8vbTc0ZEJtCi0JCQkJLy9ETUVTRygiUlRMODE4NyArIDgyMjUgSW5pdGlhbCBHYWluIFN0YXRlIDc6IC02NiBkQm0gXG4iKTsKLQkJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MTcsIDB4NTYpOwltZGVsYXkoMSk7Ci0JCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDI0LCAweGE2KTsJbWRlbGF5KDEpOwotCQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwNSwgMHhmYyk7CW1kZWxheSgxKTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSA4OgotCQkJCS8vRE1FU0coIlJUTDgxODcgKyA4MjI1IEluaXRpYWwgR2FpbiBTdGF0ZSA4OlxuIik7Ci0JCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDE3LCAweDY2KTsJbWRlbGF5KDEpOwotCQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgyNCwgMHhiNik7CW1kZWxheSgxKTsKLQkJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MDUsIDB4ZmMpOwltZGVsYXkoMSk7Ci0JCQkJYnJlYWs7Ci0KLQotCQkJZGVmYXVsdDoJLy9NUAotCQkJCS8vRE1FU0coIlJUTDgxODcgKyA4MjI1IEluaXRpYWwgR2FpbiBTdGF0ZSAxOiAtODIgZEJtIChkZWZhdWx0KVxuIik7Ci0JCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDE3LCAweDI2KTsJbWRlbGF5KDEpOwotCQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgyNCwgMHg4Nik7CW1kZWxheSgxKTsKLQkJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MDUsIDB4ZmEpOwltZGVsYXkoMSk7Ci0JCQkJYnJlYWs7Ci0JCX0KKwlzd2l0Y2ggKHByaXYtPkluaXRpYWxHYWluKSB7CisJY2FzZSAxOiAvKiBtODYxZEJtICovCisJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgxNywgMHgyNik7CW1kZWxheSgxKTsKKwkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDI0LCAweDg2KTsJbWRlbGF5KDEpOworCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MDUsIDB4ZmEpOwltZGVsYXkoMSk7CiAJCWJyZWFrOwogCisJY2FzZSAyOiAvKiBtODYyZEJtICovCisJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgxNywgMHgzNik7CW1kZWxheSgxKTsKKwkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDI0LCAweDg2KTsJbWRlbGF5KDEpOworCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MDUsIDB4ZmEpOwltZGVsYXkoMSk7CisJCWJyZWFrOwogCi0JZGVmYXVsdDoKLQkJRE1FU0coIlVwZGF0ZUluaXRpYWxHYWluKCk6IHVua25vd24gUkZDaGlwSUQ6ICUjWFxuIiwgcHJpdi0+cmZfY2hpcCk7CisJY2FzZSAzOiAvKiBtODYzZEJtICovCisJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgxNywgMHgzNik7CW1kZWxheSgxKTsKKwkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDI0LCAweDg2KTsJbWRlbGF5KDEpOworCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MDUsIDB4ZmIpOwltZGVsYXkoMSk7CisJCWJyZWFrOworCisJY2FzZSA0OiAvKiBtODY0ZEJtICovCisJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgxNywgMHg0Nik7CW1kZWxheSgxKTsKKwkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDI0LCAweDg2KTsJbWRlbGF5KDEpOworCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MDUsIDB4ZmIpOwltZGVsYXkoMSk7CisJCWJyZWFrOworCisJY2FzZSA1OiAvKiBtODJkQm0gKi8KKwkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDE3LCAweDQ2KTsJbWRlbGF5KDEpOworCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MjQsIDB4OTYpOwltZGVsYXkoMSk7CisJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwNSwgMHhmYik7CW1kZWxheSgxKTsKKwkJYnJlYWs7CisKKwljYXNlIDY6IC8qIG03OGRCbSAqLworCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MTcsIDB4NTYpOwltZGVsYXkoMSk7CisJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgyNCwgMHg5Nik7CW1kZWxheSgxKTsKKwkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDA1LCAweGZjKTsJbWRlbGF5KDEpOworCQlicmVhazsKKworCWNhc2UgNzogLyogbTc0ZEJtICovCisJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgxNywgMHg1Nik7CW1kZWxheSgxKTsKKwkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDI0LCAweGE2KTsJbWRlbGF5KDEpOworCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MDUsIDB4ZmMpOwltZGVsYXkoMSk7CisJCWJyZWFrOworCisJY2FzZSA4OgorCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MTcsIDB4NjYpOwltZGVsYXkoMSk7CisJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgyNCwgMHhiNik7CW1kZWxheSgxKTsKKwkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDA1LCAweGZjKTsJbWRlbGF5KDEpOworCQlicmVhazsKKworCWRlZmF1bHQ6CS8qIE1QICovCisJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgxNywgMHgyNik7CW1kZWxheSgxKTsKKwkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDI0LCAweDg2KTsJbWRlbGF5KDEpOworCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MDUsIDB4ZmEpOwltZGVsYXkoMSk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTEzNzksMTMgKzg1NiwxMSBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYKICkKIHsKLQkvL3N0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKIAl1MzIJdTRiUmZSZWc7CiAKIAl1NGJSZlJlZyA9IFJGX1JlYWRSZWcoZGV2LCAweDAyKTsKIAogCS8vIEVuYWJsZSBUaGVybWFsIG1ldGVyIGluZGljYXRpb24uCi0JLy9wcmludGsoIkluaXRUeFB3clRyYWNraW5nODdTRSgpOiBFbmFibGUgdGhlcm1hbCBtZXRlciBpbmRpY2F0aW9uLCBXcml0ZSBSRlsweDAyXSA9ICUjeCIsIHU0YlJmUmVnfFBXUl9NRVRFUl9FTik7CiAJUkZfV3JpdGVSZWcoZGV2LCAweDAyLCB1NGJSZlJlZ3xQV1JfTUVURVJfRU4pOwkJCW1kZWxheSgxKTsKIH0KIApAQCAtMTM5NywyMSArODcyLDE0IEBACiAJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOwogICAgICAgIHdyaXRlX25pY19kd29yZChkZXYsIFJDUiwgcHJpdi0+UmVjZWl2ZUNvbmZpZyk7CiAJICAgcHJpdi0+UkZQcm9nVHlwZSA9IHJlYWRfbmljX2J5dGUoZGV2LCBDT05GSUc0KSAmIDB4MDM7Ci0gICAgIAkvLyBSRiBjb25maWcKLQlzd2l0Y2gocHJpdi0+cmZfY2hpcCkKLQl7Ci0JY2FzZSBSRl9aRUJSQTI6Ci0JY2FzZSBSRl9aRUJSQTQ6Ci0JCVpFQlJBX0NvbmZpZ184NUJBU0lDX0hhcmRDb2RlKCBkZXYpOwotCQlicmVhazsKLQl9CisJLyogIFJGIGNvbmZpZyAqLworCVpFQlJBX0NvbmZpZ184NUJBU0lDX0hhcmRDb2RlKGRldik7CiAvL3tieSBhbXkgMDgwMzEyCiAJLy8gU2V0IGRlZmF1bHQgaW5pdGlhbCBnYWluIHN0YXRlIHRvIDQsIGFwcHJvdmVkIGJ5IFNEMyBEWiwgYnkgQnJ1Y2UsIDIwMDctMDYtMDYuCiAJaWYocHJpdi0+YkRpZ01lY2hhbmlzbSkKIAl7CiAJCWlmKHByaXYtPkluaXRpYWxHYWluID09IDApCiAJCQlwcml2LT5Jbml0aWFsR2FpbiA9IDQ7Ci0JCS8vcHJpbnRrKCJQaHlDb25maWc4MTg1KCk6IERJRyBpcyBlbmFibGVkLCBzZXQgZGVmYXVsdCBpbml0aWFsIGdhaW4gaW5kZXggdG8gJWRcbiIsIHByaXYtPkluaXRpYWxHYWluKTsKIAl9CiAKIAkvLwpAQCAtMTQyOSwzNCArODk3LDE3IEBACiAJcmV0dXJuOwogfQogCi0KLQotCiB2b2lkCiBId0NvbmZpZ3VyZVJUTDgxODUoCiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYKIAkJKQogewogCS8vUlRMODE4NV9UT0RPOiBEZXRlcm1pbmUgUmV0cnlsaW1pdCwgVHhBR0MsIEF1dG9SYXRlRmFsbGJhY2sgY29udHJvbC4KLS8vCXU4CQliVU5JVkVSU0FMX0NPTlRST0xfUkwgPSAxOwogICAgICAgICB1OCAgICAgICAgICAgICAgYlVOSVZFUlNBTF9DT05UUk9MX1JMID0gMDsKLQogCXU4CQliVU5JVkVSU0FMX0NPTlRST0xfQUdDID0gMTsKIAl1OAkJYlVOSVZFUlNBTF9DT05UUk9MX0FOVCA9IDE7CiAJdTgJCWJBVVRPX1JBVEVfRkFMTEJBQ0tfQ1RMID0gMTsKIAl1OAkJdmFsODsKLQkvL3N0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKLQkvL3N0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTgwMjExOwotICAgICAgCS8vaWYoSVNfV0lSRUxFU1NfTU9ERV9BKGRldikgfHwgSVNfV0lSRUxFU1NfTU9ERV9HKGRldikpCi0vL3tieSBhbXkgMDgwMzEyCWlmKChpZWVlLT5tb2RlID09IElFRUVfRyl8fChpZWVlLT5tb2RlID09IElFRUVfQSkpCi0vLwl7Ci0vLwkJd3JpdGVfbmljX3dvcmQoZGV2LCBCUlNSLCAweGZmZmYpOwotLy8JfQotLy8JZWxzZQotLy8JewotLy8JCXdyaXRlX25pY193b3JkKGRldiwgQlJTUiwgMHgwMDBmKTsKLS8vCX0KLS8vYnkgYW15IDA4MDMxMn0KICAgICAgICAgd3JpdGVfbmljX3dvcmQoZGV2LCBCUlNSLCAweDBmZmYpOwogCS8vIFJldHJ5IGxpbWl0CiAJdmFsOCA9IHJlYWRfbmljX2J5dGUoZGV2LCBDV19DT05GKTsKQEAgLTE1MDcsMjAgKzk1OCwxMSBAQAogCQl2YWw4IHw9IFJBVEVfRkFMTEJBQ0tfQ1RMX0VOQUJMRSB8IFJBVEVfRkFMTEJBQ0tfQ1RMX0FVVE9fU1RFUDE7CiAKIAkJLy8gPFJKX1RPRE9fODE4NUI+IFdlIHNoYWxsIHNldCB1cCB0aGUgQVJGUiBhY2NvcmRpbmcgdG8gdXNlcidzIHNldHRpbmcuCi0JCS8vd3JpdGVfbmljX3dvcmQoZGV2LCBBUkZSLCAweDBmZmYpOyAvLyBzZXQgMU0gfiA1NE0KLS8vYnkgYW15Ci0JICAgICAgICAvLyBBYWRkZWQgYnkgUm9nZXIsIDIwMDcuMTEuMTUuCiAJICAgICAgICBQbGF0Zm9ybUlPV3JpdGUyQnl0ZShkZXYsIEFSRlIsIDB4MGZmZik7IC8vc2V0IDFNIH4gNTRNYnBzLgotLy9ieSBhbXkKLQl9Ci0JZWxzZQotCXsKIAl9CiAJd3JpdGVfbmljX2J5dGUoZGV2LCBSQVRFX0ZBTExCQUNLLCB2YWw4KTsKIH0KIAotCi0KIHN0YXRpYyB2b2lkCiBNYWNDb25maWdfODVCQVNJQ19IYXJkQ29kZSgKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMTU0OCwxNCArOTkwLDExIEBACiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB1NGJSZWdPZmZzZXQgfD0gKHU0YlBhZ2VJbmRleCA8PCA4KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy9EYmdQcmludCgiTUFDIC0gMHgleCA9IDB4JXhcbiIsIHU0YlJlZ09mZnNldCwgdTRiUmVnVmFsdWUpOwogCQl3cml0ZV9uaWNfYnl0ZShkZXYsIHU0YlJlZ09mZnNldCwgKHU4KXU0YlJlZ1ZhbHVlKTsKIAl9CiAJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiB9CiAKLQotCiBzdGF0aWMgdm9pZAogTWFjQ29uZmlnXzg1QkFTSUMoCiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTE1NzgsOCArMTAxNyw2IEBACiAJUGxhdGZvcm1JT1dyaXRlMUJ5dGUoZGV2LCAweDFGOCwgMHgwMCk7CiAKIAkvLyBBc2tlZCBmb3IgYnkgU0QzIENNIExpbiwgMjAwNi4wNi4yNywgYnkgcmNuamtvLgotCS8vUGxhdGZvcm1JT1dyaXRlNEJ5dGUoZGV2LCBSRlRpbWluZywgMHgwMDAwNDAwMSk7Ci0vL2J5IGFteQogCS8vIHBvd2VyIHNhdmUgcGFyYW1ldGVyIGJhc2VkIG9uICI4N1NFIHBvd2VyIHNhdmUgcGFyYW1ldGVycyAyMDA3MTEyNy5kb2MiLCBhcyBmb2xsb3cuCiAKIAkvL0VuYWJsZSBEQTEwIFRYIHBvd2VyIHNhdmluZwpAQCAtMTU5OCwzNSArMTAzNSwxOCBAQAogCXdyaXRlX25pY193b3JkKGRldiwgMHgzNzgsIDB4MDU2MCk7CiAJd3JpdGVfbmljX3dvcmQoZGV2LCAweDM3QSwgMHgwNTYwKTsKIAl3cml0ZV9uaWNfd29yZChkZXYsIDB4MzdDLCAweDAwRUMpOwotLy8Jd3JpdGVfbmljX3dvcmQoZGV2LCAweDM3RSwgMHgwMEZFKTsvLy1lZHdhcmQKIAl3cml0ZV9uaWNfd29yZChkZXYsIDB4MzdFLCAweDAwRUMpOy8vK2Vkd2FyZAogICAgICAgIHdyaXRlX25pY19ieXRlKGRldiwgMHgyNEUsMHgwMSk7Ci0vL2J5IGFteQotCiB9CiAKLQotCi0KIHU4CiBHZXRTdXBwb3J0ZWRXaXJlbGVzc01vZGU4MTg1KAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYKICkKIHsKIAl1OAkJCWJ0U3VwcG9ydGVkV2lyZWxlc3NNb2RlID0gMDsKLQlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7CiAKLQlzd2l0Y2gocHJpdi0+cmZfY2hpcCkKLQl7Ci0JY2FzZSBSRl9aRUJSQTI6Ci0JY2FzZSBSRl9aRUJSQTQ6Ci0JCWJ0U3VwcG9ydGVkV2lyZWxlc3NNb2RlID0gKFdJUkVMRVNTX01PREVfQiB8IFdJUkVMRVNTX01PREVfRyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJ0U3VwcG9ydGVkV2lyZWxlc3NNb2RlID0gV0lSRUxFU1NfTU9ERV9COwotCQlicmVhazsKLQl9Ci0KKwlidFN1cHBvcnRlZFdpcmVsZXNzTW9kZSA9IChXSVJFTEVTU19NT0RFX0IgfCBXSVJFTEVTU19NT0RFX0cpOwogCXJldHVybiBidFN1cHBvcnRlZFdpcmVsZXNzTW9kZTsKIH0KIApAQCAtMTY0MSw3ICsxMDYxLDYgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU4MDIxMTsKIAlBQ19DT0RJTkcJZUFDSTsKIAlBQ19QQVJBTQlBY1BhcmFtOwotCS8vUFNUQV9RT1MJcFN0YVFvcyA9IEFkYXB0ZXItPk1nbnRJbmZvLnBTdGFRb3M7CiAJdTgJYkZvbGxvd0xlZ2FjeVNldHRpbmcgPSAwOwogCXU4ICAgdTFiQUlGUzsKIApAQCAtMTY2Myw0MCArMTA4MiwxNCBAQAogCUNobmxBY2Nlc3NTZXR0aW5nLT5DV21heEluZGV4ID0gNzsgLy8gMjAwNi4wNi4wMiwgYnkgcmNuamtvLgogCiAJd3JpdGVfbmljX2J5dGUoZGV2LCBTSUZTLCBDaG5sQWNjZXNzU2V0dGluZy0+U0lGU19UaW1lcik7Ci0JLy9BZGFwdGVyLT5IYWxGdW5jLlNldEh3UmVnSGFuZGxlciggQWRhcHRlciwgSFdfVkFSX1NMT1RfVElNRSwgJkNobmxBY2Nlc3NTZXR0aW5nLT5TbG90VGltZVRpbWVyICk7CS8vIFJld3JpdGVkIGZyb20gZGlyZWN0bHkgdXNlIFBsYXRmb3JtRUZJT1dyaXRlMUJ5dGUoKSwgYnkgQW5uaWUsIDIwMDYtMDMtMjkuCiAJd3JpdGVfbmljX2J5dGUoZGV2LCBTTE9ULCBDaG5sQWNjZXNzU2V0dGluZy0+U2xvdFRpbWVUaW1lcik7CS8vIFJld3JpdGVkIGZyb20gZGlyZWN0bHkgdXNlIFBsYXRmb3JtRUZJT1dyaXRlMUJ5dGUoKSwgYnkgQW5uaWUsIDIwMDYtMDMtMjkuCiAKIAl1MWJBSUZTID0gYVNpZnNUaW1lICsgKDIgKiBDaG5sQWNjZXNzU2V0dGluZy0+U2xvdFRpbWVUaW1lciApOwogCi0JLy93cml0ZV9uaWNfYnl0ZShkZXYsIEFDX1ZPX1BBUkFNLCB1MWJBSUZTKTsKLQkvL3dyaXRlX25pY19ieXRlKGRldiwgQUNfVklfUEFSQU0sIHUxYkFJRlMpOwotCS8vd3JpdGVfbmljX2J5dGUoZGV2LCBBQ19CRV9QQVJBTSwgdTFiQUlGUyk7Ci0JLy93cml0ZV9uaWNfYnl0ZShkZXYsIEFDX0JLX1BBUkFNLCB1MWJBSUZTKTsKLQogCXdyaXRlX25pY19ieXRlKGRldiwgRUlGUywgQ2hubEFjY2Vzc1NldHRpbmctPkVJRlNfVGltZXIpOwogCiAJd3JpdGVfbmljX2J5dGUoZGV2LCBBY2tUaW1lT3V0UmVnLCAweDVCKTsgLy8gPFJKX0VYUFJfUU9TPiBTdWdnZXN0ZWQgYnkgd2NjaHUsIGl0IGlzIHRoZSBkZWZhdWx0IHZhbHVlIG9mIEVJRlMgcmVnaXN0ZXIsIDIwMDUuMTIuMDguCiAKLSNpZmRlZiBUT0RPCi0JLy8gPFJKX1RPRE9fTk9XXzgxODVCPiBVcGRhdGUgRUNXbWluL0VDV21heCwgQUlGUywgVFhPUCBMaW1pdCBvZiBlYWNoIEFDIHRvIHRoZSB2YWx1ZSBkZWZpbmVkIGJ5IFNQRUMuCi0JaWYoIHBTdGFRb3MtPkN1cnJlbnRRb3NNb2RlID4gUU9TX0RJU0FCTEUgKQotCXsgLy8gUW9TIG1vZGUuCi0JCWlmKHBTdGFRb3MtPlFCc3NXaXJlbGVzc01vZGUgPT0gV2lyZWxlc3NNb2RlKQotCQl7Ci0JCQkvLyBGb2xsb3cgQUMgUGFyYW1ldGVycyBvZiB0aGUgUUJTUy4KLQkJCWZvcihlQUNJID0gMDsgZUFDSSA8IEFDX01BWDsgZUFDSSsrKQotCQkJewotCQkJCUFkYXB0ZXItPkhhbEZ1bmMuU2V0SHdSZWdIYW5kbGVyKEFkYXB0ZXIsIEhXX1ZBUl9BQ19QQVJBTSwgKHB1MUJ5dGUpKCYocFN0YVFvcy0+V01NUGFyYW1FbGUuQWNQYXJhbVtlQUNJXSkpICk7Ci0JCQl9Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkvLyBGb2xsb3cgRGVmYXVsdCBXTU0gQUMgUGFyYW1ldGVycy4KLQkJCWJGb2xsb3dMZWdhY3lTZXR0aW5nID0gMTsKLQkJfQotCX0KLQllbHNlCi0jZW5kaWYKIAl7IC8vIExlZ2FjeSA4MDIuMTEuCiAJCWJGb2xsb3dMZWdhY3lTZXR0aW5nID0gMTsKIApAQCAtMTcxOSwxNCArMTExMiwxMiBAQAogCQlBY1BhcmFtLmYuVFhPUExpbWl0ID0gMDsKIAogCQkvL2x6bSByZXNlcnZlZCAwODA4MjYKLSNpZiAxCiAJCS8vIEZvciB0dXJibyBtb2RlIHNldHRpbmcuIHBvcnQgZnJvbSA4N0IgYnkgSXNhaWFoIDIwMDgtMDgtMDEKIAkJaWYoIGllZWUtPmN1cnJlbnRfbmV0d29yay5UdXJib19FbmFibGUgPT0gMSApCiAJCQlBY1BhcmFtLmYuVFhPUExpbWl0ID0gMHgwMUZGOwogCQkvLyBGb3IgODdTRSB3aXRoIEludGVsIDQ5NjUgIEFkLUhvYyBtb2RlIGhhdmUgcG9vciB0aHJvdWdocHV0ICgxOU1CKQogCQlpZiAoaWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKQogCQkJQWNQYXJhbS5mLlRYT1BMaW1pdCA9IDB4MDAyMDsKLSNlbmRpZgogCiAJCWZvcihlQUNJID0gMDsgZUFDSSA8IEFDX01BWDsgZUFDSSsrKQogCQl7CkBAIC0xNzcwLDE4ICsxMTYxLDEzIEBACiAKIAkJCQkvLyBDZWhjayBBQ00gYml0LgogCQkJCS8vIElmIGl0IGlzIHNldCwgaW1tZWRpYXRlbHkgc2V0IEFDTSBjb250cm9sIGJpdCB0byBkb3duZ3JhZGluZyBBQyBmb3IgcGFzc2luZyBXTU0gdGVzdHBsYW4uIEFubmllLCAyMDA1LTEyLTEzLgotCQkJCS8vd3JpdGVfbmljX2J5dGUoZGV2LCBBQ01fQ09OVFJPTCwgcEFjUGFyYW0tPmYuQWNpQWlmc24pOwogCQkJCXsKIAkJCQkJUEFDSV9BSUZTTglwQWNpQWlmc24gPSAoUEFDSV9BSUZTTikoJnBBY1BhcmFtLT5mLkFjaUFpZnNuKTsKIAkJCQkJQUNfQ09ESU5HCWVBQ0kgPSBwQWNpQWlmc24tPmYuQUNJOwogCiAJCQkJCS8vbW9kaWZpZWQgSm9zZXBoCiAJCQkJCS8vZm9yIDgxODdCIEFzeW5JT1JlYWQgaXNzdWUKLSNpZmRlZiBUT0RPCi0JCQkJCXU4CUFjbUN0cmwgPSBwSGFsRGF0YS0+QWNtQ29udHJvbDsKLSNlbHNlCiAJCQkJCXU4CUFjbUN0cmwgPSAwOwotI2VuZGlmCiAJCQkJCWlmKCBwQWNpQWlmc24tPmYuQUNNICkKIAkJCQkJeyAvLyBBQ00gYml0IGlzIDEuCiAJCQkJCQlzd2l0Y2goZUFDSSkKQEAgLTE4MjMsMTkgKzEyMDksMTAgQEAKIAkJCQkJCQkJYnJlYWs7CiAJCQkJCQl9CiAJCQkJCX0KLQotCQkJCQkvL3ByaW50ayhLRVJOX1dBUk5JTkcgIlNldEh3UmVnODE4NSgpOiBbSFdfVkFSX0FDTV9DVFJMXSBXcml0ZSAweCVYXG4iLCBBY21DdHJsKTsKLQotI2lmZGVmIFRPX0RPCi0JCQkJCXBIYWxEYXRhLT5BY21Db250cm9sID0gQWNtQ3RybDsKLSNlbmRpZgotCQkJCQkvL3dyaXRlX25pY19ieXRlKGRldiwgQUNNX0NPTlRST0wsIEFjbUN0cmwpOwogCQkJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEFDTV9DT05UUk9MLCAwKTsKIAkJCQl9CiAJCQl9CiAJCX0KLQotCiAJfQogfQogCkBAIC0xODQ3LDcgKzEyMjQsNiBAQAogewogCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU4MDIxMTsKLQkvL1BNR05UX0lORk8JCXBNZ250SW5mbyA9ICYoQWRhcHRlci0+TWdudEluZm8pOwogCXU4CWJ0U3VwcG9ydGVkV2lyZWxlc3NNb2RlID0gR2V0U3VwcG9ydGVkV2lyZWxlc3NNb2RlODE4NShkZXYpOwogCiAJaWYoIChidFdpcmVsZXNzTW9kZSAmIGJ0U3VwcG9ydGVkV2lyZWxlc3NNb2RlKSA9PSAwICkKQEAgLTE4ODAsMjQgKzEyNTYsMTEgQEAKIAkJfQogCX0KIAotCi0JLy8gMi4gU3d0aWNoIGJhbmQ6IFJGIG9yIEJCIHNwZWNpZmljIGFjdGlvbnMsCi0JLy8gZm9yIGV4YW1wbGUsIHJlZnJlc2ggdGFibGVzIGluIG9tYzgyNTUsIG9yIGNoYW5nZSBpbml0aWFsIGdhaW4gaWYgbmVjZXNzYXJ5LgotCXN3aXRjaChwcml2LT5yZl9jaGlwKQotCXsKLQljYXNlIFJGX1pFQlJBMjoKLQljYXNlIFJGX1pFQlJBNDoKLQkJewotCQkJLy8gTm90aGluZyB0byBkbyBmb3IgWmVicmEgdG8gc3dpdGNoIGJhbmQuCi0JCQkvLyBVcGRhdGUgY3VycmVudCB3aXJlbGVzcyBtb2RlIGlmIHdlIHN3dGljaCB0byBzcGVjaWZpZWQgYmFuZCBzdWNjZXNzZnVsbHkuCi0JCQlpZWVlLT5tb2RlID0gKFdJUkVMRVNTX01PREUpYnRXaXJlbGVzc01vZGU7Ci0JCX0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlETUVTR1coIkFjdFNldFdpcmVsZXNzTW9kZTgxODUoKTogdW5zdXBwb3J0ZWQgUkY6IDB4JVggISEhXG4iLCBwcml2LT5yZl9jaGlwKTsKLQkJYnJlYWs7Ci0JfQorCS8qIDIuIFN3dGljaCBiYW5kOiBSRiBvciBCQiBzcGVjaWZpYyBhY3Rpb25zLAorCSAqIGZvciBleGFtcGxlLCByZWZyZXNoIHRhYmxlcyBpbiBvbWM4MjU1LCBvciBjaGFuZ2UgaW5pdGlhbCBnYWluIGlmIG5lY2Vzc2FyeS4KKwkgKiBOb3RoaW5nIHRvIGRvIGZvciBaZWJyYSB0byBzd2l0Y2ggYmFuZC4KKwkgKiBVcGRhdGUgY3VycmVudCB3aXJlbGVzcyBtb2RlIGlmIHdlIHN3dGljaCB0byBzcGVjaWZpZWQgYmFuZCBzdWNjZXNzZnVsbHkuICovCisJaWVlZS0+bW9kZSA9IChXSVJFTEVTU19NT0RFKWJ0V2lyZWxlc3NNb2RlOwogCiAJLy8gMy4gQ2hhbmdlIHJlbGF0ZWQgc2V0dGluZy4KIAlpZiggaWVlZS0+bW9kZSA9PSBXSVJFTEVTU19NT0RFX0EgKXsKQEAgLTE5MDksNyArMTI3Miw2IEBACiAJZWxzZSBpZiggaWVlZS0+bW9kZSA9PSBXSVJFTEVTU19NT0RFX0cgKXsKIAkJRE1FU0coIldJUkVMRVNTX01PREVfR1xuIik7CiAJfQotCiAJQWN0VXBkYXRlQ2hhbm5lbEFjY2Vzc1NldHRpbmcoIGRldiwgaWVlZS0+bW9kZSwgJnByaXYtPkNoYW5uZWxBY2Nlc3NTZXR0aW5nKTsKIH0KIApAQCAtMTkyNywxMSArMTI4OSw3IEBACiAJdTE2CQkJcmVhc29uCiAJKQogewotCS8vcHJpbnRrKCI9PT4gRHJ2SUZJbmRpY2F0ZURpc2Fzc29jaWF0aW9uKClcbiIpOwotCiAJLy8gbm90aGluZyBpcyBuZWVkZWQgYWZ0ZXIgZGlzYXNzb2NpYXRpb24gcmVxdWVzdC4KLQotCS8vcHJpbnRrKCI8PT0gRHJ2SUZJbmRpY2F0ZURpc2Fzc29jaWF0aW9uKClcbiIpOwogfQogdm9pZAogTWdudERpc2Nvbm5lY3RJQlNTKApAQCAtMTk0MSwxMSArMTI5OSw3IEBACiAJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOwogCXU4CQkJaTsKIAotCS8vcHJpbnRrKCJYWFhYWFhYWFhYIE1nbnREaXNjb25uZWN0IElCU1NcbiIpOwotCiAJRHJ2SUZJbmRpY2F0ZURpc2Fzc29jaWF0aW9uKGRldiwgdW5zcGVjX3JlYXNvbik7Ci0KLS8vCVBsYXRmb3JtWmVyb01lbW9yeSggcE1nbnRJbmZvLT5Cc3NpZCwgNiApOwogCWZvcihpPTA7aTw2O2krKykgIHByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLmJzc2lkW2ldID0gMHg1NTsKIAogCXByaXYtPmllZWU4MDIxMS0+c3RhdGUgPSBJRUVFODAyMTFfTk9MSU5LOwpAQCAtMTk1NywxNiArMTMxMSwxMCBAQAogCS8vIEJlY2F1c2UgQmNuIERNQSBpc24ndCBjb21wbGV0ZSwgbWdudCBxdWV1ZSB3b3VsZCBzdHVjayB1bnRpbCBCY24gcGFja2V0IHNlbmQuCiAKIAkvLyBEaXNhYmxlIEJlYWNvbiBRdWV1ZSBPd24gYml0LCBzdWdnZXN0ZWQgYnkgam9uZwotLy8JQWRhcHRlci0+SGFsRnVuYy5TZXRUeERlc2NPV05IYW5kbGVyKEFkYXB0ZXIsIEJFQUNPTl9RVUVVRSwgMCwgMCk7CiAJaWVlZTgwMjExX3N0b3Bfc2VuZF9iZWFjb25zKHByaXYtPmllZWU4MDIxMSk7CiAKIAlwcml2LT5pZWVlODAyMTEtPmxpbmtfY2hhbmdlKGRldik7CiAJbm90aWZ5X3d4X2Fzc29jX2V2ZW50KHByaXYtPmllZWU4MDIxMSk7Ci0KLQkvLyBTdG9wIFNXIEJlYWNvbi5Vc2UgaHcgYmVhY29uIHNvIGRvIG5vdCBuZWVkIHRvIGRvIHNvLmJ5IGFteQotCi0vLwkJTWdudEluZGljYXRlTWVkaWFTdGF0dXMoIEFkYXB0ZXIsIFJUX01FRElBX0RJU0NPTk5FQ1QsIEdFTkVSQUxfSU5ESUNBVEUgKTsKLQogfQogdm9pZAogTWxtZURpc2Fzc29jaWF0ZVJlcXVlc3QoCkBAIC0xOTg2LDE0ICsxMzM0LDggQEAKIAkJRHJ2SUZJbmRpY2F0ZURpc2Fzc29jaWF0aW9uKGRldiwgdW5zcGVjX3JlYXNvbik7CiAKIAotCS8vCXBNZ250SW5mby0+QXNvY1RpbWVzdGFtcCA9IDA7CiAJCWZvcihpPTA7aTw2O2krKykgIHByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLmJzc2lkW2ldID0gMHgyMjsKLS8vCQlwTWdudEluZm8tPm1CcmF0ZXMuTGVuZ3RoID0gMDsKLS8vCQlBZGFwdGVyLT5IYWxGdW5jLlNldEh3UmVnSGFuZGxlciggQWRhcHRlciwgSFdfVkFSX0JBU0lDX1JBVEUsIChwdTFCeXRlKSgmcE1nbnRJbmZvLT5tQnJhdGVzKSApOwotCiAJCWllZWU4MDIxMV9kaXNhc3NvY2lhdGUocHJpdi0+aWVlZTgwMjExKTsKLQotCiAJfQogCiB9CkBAIC0yMDExLDIzICsxMzUzLDEyIEBACiAvLyBJIG1vdmUgU2VjQ2xlYXJBbGxLZXlzKCkgdG8gTWdudEFjdFNldF84MDJfMTFfRElTQVNTT0NJQVRFKCkuCiAvLwogLy8JLy8yMDA0LzA5LzE1LCBrY3d1LCB0aGUga2V5IHNob3VsZCBiZSBjbGVhcmVkLCBvciB0aGUgbmV3IGhhbmRzaGFraW5nIHdpbGwgbm90IHN1Y2Nlc3MKLS8vCVNlY0NsZWFyQWxsS2V5cyhBZGFwdGVyKTsKIAogCS8vIEluIFdQQSBXUEEyIG5lZWQgdG8gQ2xlYXIgYWxsIGtleSAuLi4gYmVjYXVzZSBuZXcga2V5IHdpbGwgc2V0IGFmdGVyIG5ldyBoYW5kc2hha2luZy4KLSNpZmRlZiBUT0RPCi0JaWYoICAgcE1nbnRJbmZvLT5TZWN1cml0eUluZm8uQXV0aE1vZGUgPiBSVF84MDJfMTFBdXRoTW9kZUF1dG9Td2l0Y2ggfHwKLQkJKHBNZ250SW5mby0+YkFQU3Vwb3J0Q0NLTSAmJiBwTWdudEluZm8tPmJDQ1g4MDIxeGVuYWJsZSkgKSAgLy8gSW4gQ0NLTSBtb2RlIHdpbGwgQ2xlYXIga2V5Ci0JewotCQlTZWNDbGVhckFsbEtleXMoQWRhcHRlcik7Ci0JCVJUX1RSQUNFKENPTVBfU0VDLCBEQkdfTE9VRCwoIj09PT09PT5DQ0tNIGNsZWFyIGtleS4uLiIpKQotCX0KLSNlbmRpZgogCS8vIDIwMDQuMTAuMTEsIGJ5IHJjbmprby4KLQkvL01sbWVEaXNhc3NvY2lhdGVSZXF1ZXN0KCBBZGFwdGVyLCBwTWdudEluZm8tPkJzc2lkLCBkaXNhc19sdl9zcyApOwogCU1sbWVEaXNhc3NvY2lhdGVSZXF1ZXN0KCBkZXYsIHByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLmJzc2lkLCBhc1JzbiApOwogCiAJcHJpdi0+aWVlZTgwMjExLT5zdGF0ZSA9IElFRUU4MDIxMV9OT0xJTks7Ci0vLwlwTWdudEluZm8tPkFzb2NUaW1lc3RhbXAgPSAwOwogfQogYm9vbAogTWdudERpc2Nvbm5lY3QoCkBAIC0yMDM5LDIwICsxMzcwLDcgQEAKIAkvLwogCS8vIFNjaGVkdWxlIGFuIHdvcmtpdGVtIHRvIHdha2UgdXAgZm9yIHBzIG1vZGUsIDA3MDEwOSwgYnkgcmNuamtvLgogCS8vCi0jaWZkZWYgVE9ETwotCWlmKHBNZ250SW5mby0+bVBzcyAhPSBlQXdha2UpCi0JewotCQkvLwotCQkvLyBVc2luZyBBd2thZVRpbWVyIHRvIHByZXZlbnQgbWlzbWF0Y2ggcHMgc3RhdGUuCi0JCS8vIEluIHRoZSB0aW1lciB0aGUgc3RhdGUgd2lsbCBiZSBjaGFuZ2VkIGFjY29yZGluZyB0byB0aGUgUkYgaXMgYmVpbmcgYXdva2Ugb3Igbm90LiBCeSBCcnVjZSwgMjAwNy0xMC0zMS4KLQkJLy8KLQkJLy8gUGxhdGZvcm1TY2hlZHVsZVdvcmtJdGVtKCAmKHBNZ250SW5mby0+QXdha2VXb3JrSXRlbSkgKTsKLQkJUGxhdGZvcm1TZXRUaW1lciggQWRhcHRlciwgJihwTWdudEluZm8tPkF3YWtlVGltZXIpLCAwICk7Ci0JfQotI2VuZGlmCiAKLQkvLyBJbmRpY2F0aW9uIG9mIGRpc2Fzc29jaWF0aW9uIGV2ZW50LgotCS8vRHJ2SUZJbmRpY2F0ZURpc2Fzc29jaWF0aW9uKEFkYXB0ZXIsIGFzUnNuKTsKIAlpZihJU19ET1QxMURfRU5BQkxFKHByaXYtPmllZWU4MDIxMSkpCiAJCURvdDExZF9SZXNldChwcml2LT5pZWVlODAyMTEpOwogCS8vIEluIGFkaG9jIG1vZGUsIHVwZGF0ZSBiZWFjb24gZnJhbWUuCkBAIC0yMDYwLDggKzEzNzgsNiBAQAogCXsKIAkJaWYoIHByaXYtPmllZWU4MDIxMS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DICkKIAkJewotLy8JCQlSVF9UUkFDRShDT01QX01MTUUsIERCR19MT1VELCAoIk1nbnREaXNjb25uZWN0KCkgPT09PiBNZ250RGlzY29ubmVjdElCU1NcbiIpKTsKLQkJCS8vcHJpbnRrKCJNZ250RGlzY29ubmVjdCgpID09PT4gTWdudERpc2Nvbm5lY3RJQlNTXG4iKTsKIAkJCU1nbnREaXNjb25uZWN0SUJTUyhkZXYpOwogCQl9CiAJCWlmKCBwcml2LT5pZWVlODAyMTEtPml3X21vZGUgPT0gSVdfTU9ERV9JTkZSQSApCkBAIC0yMDcxLDE3ICsxMzg3LDEwIEBACiAJCQkvLyBlLmcuIE9JRF84MDJfMTFfRElTQVNTT0NJQVRFIGluIFdpbmRvd3Mgd2hpbGUgYXMgTWdudERpc2Nvbm5lY3RBUCgpIGlzCiAJCQkvLyB1c2VkIHRvIGhhbmRsZSBkaXNhc3NvY2lhdGlvbiByZWxhdGVkIHRoaW5ncyB0byBBUCwgZS5nLiBzZW5kIERpc2Fzc29jCiAJCQkvLyBmcmFtZSB0byBBUC4gIDIwMDUuMDEuMjcsIGJ5IHJjbmprby4KLS8vCQkJU2VjQ2xlYXJBbGxLZXlzKEFkYXB0ZXIpOwotCi0vLwkJCVJUX1RSQUNFKENPTVBfTUxNRSwgREJHX0xPVUQsICgiTWdudERpc2Nvbm5lY3QoKSA9PT0+IE1nbnREaXNjb25uZWN0QVBcbiIpKTsKLQkJCS8vcHJpbnRrKCJNZ250RGlzY29ubmVjdCgpID09PT4gTWdudERpc2Nvbm5lY3RBUFxuIik7CiAJCQlNZ250RGlzY29ubmVjdEFQKGRldiwgYXNSc24pOwogCQl9Ci0KIAkJLy8gSW5pZGljYXRlIERpc2Nvbm5lY3QsIDIwMDUuMDIuMjMsIGJ5IHJjbmprby4KLS8vCQlNZ250SW5kaWNhdGVNZWRpYVN0YXR1cyggQWRhcHRlciwgUlRfTUVESUFfRElTQ09OTkVDVCwgR0VORVJBTF9JTkRJQ0FURSk7CiAJfQotCiAJcmV0dXJuIHRydWU7CiB9CiAvLwpAQCAtMjEwMSwyNSArMTQxMCwxMiBAQAogCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlib29sCQkJYlJlc3VsdCA9IGZhbHNlOwogCi0vLwlwcmludGsoIi0tLS0tLS0tLT4gU2V0UkZQb3dlclN0YXRlKCk6IGVSRlBvd2VyU3RhdGUoJWQpXG4iLCBlUkZQb3dlclN0YXRlKTsKIAlpZihlUkZQb3dlclN0YXRlID09IHByaXYtPmVSRlBvd2VyU3RhdGUpCiAJewotLy8JCXByaW50aygiPC0tLS0tLS0tLSBTZXRSRlBvd2VyU3RhdGUoKTogZGlzY2FyZCB0aGUgcmVxdWVzdCBmb3IgZVJGUG93ZXJTdGF0ZSglZCkgaXMgdGhlIHNhbWUuXG4iLCBlUkZQb3dlclN0YXRlKTsKIAkJcmV0dXJuIGJSZXN1bHQ7CiAJfQogCi0Jc3dpdGNoKHByaXYtPnJmX2NoaXApCi0JewotCQljYXNlIFJGX1pFQlJBMjoKLQkJY2FzZSBSRl9aRUJSQTQ6Ci0JCQkgYlJlc3VsdCA9IFNldFplYnJhUkZQb3dlclN0YXRlODE4NShkZXYsIGVSRlBvd2VyU3RhdGUpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXByaW50aygiU2V0UkZQb3dlclN0YXRlODE4NSgpOiB1bmtub3duIFJGQ2hpcElEOiAweCVYISEhXG4iLCBwcml2LT5yZl9jaGlwKTsKLQkJCWJyZWFrOzsKLX0KLS8vCXByaW50aygiPC0tLS0tLS0tLSBTZXRSRlBvd2VyU3RhdGUoKTogYlJlc3VsdCglZClcbiIsIGJSZXN1bHQpOworCSBiUmVzdWx0ID0gU2V0WmVicmFSRlBvd2VyU3RhdGU4MTg1KGRldiwgZVJGUG93ZXJTdGF0ZSk7CiAKIAlyZXR1cm4gYlJlc3VsdDsKIH0KQEAgLTIxNDksMzMgKzE0NDUsMjUgQEAKIAlSVF9SRl9QT1dFUl9TVEFURSAJcnRTdGF0ZTsKIAl1MTYJCQkJUkZXYWl0Q291bnRlciA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnOwotLy8JIHByaW50aygiPT09Pk1nbnRBY3RTZXRfUkZfU3RhdGUoKTogU3RhdGVUb1NldCglZCksIENoYW5nZVNvdXJjZSgweCV4KVxuIixTdGF0ZVRvU2V0LCBDaGFuZ2VTb3VyY2UpOwogCS8vCiAJLy8gUHJldmVudCB0aGUgcmFjZSBjb25kaXRpb24gb2YgUkYgc3RhdGUgY2hhbmdlLiBCeSBCcnVjZSwgMjAwNy0xMS0yOC4KIAkvLyBPbmx5IG9uZSB0aHJlYWQgY2FuIGNoYW5nZSB0aGUgUkYgc3RhdGUgYXQgb25lIHRpbWUsIGFuZCBvdGhlcnMgc2hvdWxkIHdhaXQgdG8gYmUgZXhlY3V0ZWQuCiAJLy8KLSNpZiAxCiAJd2hpbGUodHJ1ZSkKIAl7Ci0vLwkJZG93bigmcHJpdi0+cmZfc3RhdGUpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cmZfcHNfbG9jayxmbGFnKTsKIAkJaWYocHJpdi0+UkZDaGFuZ2VJblByb2dyZXNzKQogCQl7Ci0vLwkJCXByaW50aygiPT09PT09PT09PT09PT09PT09PT0+aGFoYTExMTExMTExMVxuIik7Ci0vLwkJCXVwKCZwcml2LT5yZl9zdGF0ZSk7Ci0vLwkJCVJUX1RSQUNFKENPTVBfUkYsIERCR19MT1VELCAoIk1nbnRBY3RTZXRfUkZfU3RhdGUoKTogUkYgQ2hhbmdlIGluIHByb2dyZXNzISBXYWl0IHRvIHNldC4uU3RhdGVUb1NldCglZCkuXG4iLCBTdGF0ZVRvU2V0KSk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZl9wc19sb2NrLGZsYWcpOwogCQkJLy8gU2V0IFJGIGFmdGVyIHRoZSBwcmV2aW91cyBhY3Rpb24gaXMgZG9uZS4KIAkJCXdoaWxlKHByaXYtPlJGQ2hhbmdlSW5Qcm9ncmVzcykKIAkJCXsKIAkJCQlSRldhaXRDb3VudGVyICsrOwotLy8JCQkJUlRfVFJBQ0UoQ09NUF9SRiwgREJHX0xPVUQsICgiTWdudEFjdFNldF9SRl9TdGF0ZSgpOiBXYWl0IDEgbXMgKCVkIHRpbWVzKS4uLlxuIiwgUkZXYWl0Q291bnRlcikpOwogCQkJCXVkZWxheSgxMDAwKTsgLy8gMSBtcwogCiAJCQkJLy8gV2FpdCB0b28gbG9uZywgcmV0dXJuIEZBTFNFIHRvIGF2b2lkIHRvIGJlIHN0dWNrIGhlcmUuCiAJCQkJaWYoUkZXYWl0Q291bnRlciA+IDEwMDApIC8vIDFzZWMKIAkJCQl7Ci0vLwkJCQkJUlRfQVNTRVJUKEZBTFNFLCAoIk1nbnRBY3RTZXRfUkZfU3RhdGUoKTogV2FpdCB0b28gbG9nbiB0byBzZXQgUkZcbiIpKTsKIAkJCQkJcHJpbnRrKCJNZ250QWN0U2V0X1JGX1N0YXRlKCk6IFdhaXQgdG9vIGxvbmcgdG8gc2V0IFJGXG4iKTsKIAkJCQkJLy8gVE9ETzogUmVzZXQgUkYgc3RhdGU/CiAJCQkJCXJldHVybiBmYWxzZTsKQEAgLTIxODQsMTcgKzE0NzIsMTMgQEAKIAkJfQogCQllbHNlCiAJCXsKLS8vCQkJcHJpbnRrKCI9PT09PT09PT09PT09PT09PT09PT09PT0+aGFoYTJcbiIpOwogCQkJcHJpdi0+UkZDaGFuZ2VJblByb2dyZXNzID0gdHJ1ZTsKLS8vCQkJdXAoJnByaXYtPnJmX3N0YXRlKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJmX3BzX2xvY2ssZmxhZyk7CiAJCQlicmVhazsKIAkJfQogCX0KLSNlbmRpZgogCXJ0U3RhdGUgPSBwcml2LT5lUkZQb3dlclN0YXRlOwogCi0KIAlzd2l0Y2goU3RhdGVUb1NldCkKIAl7CiAJY2FzZSBlUmZPbjoKQEAgLTIyMTUsNyArMTQ5OSw2IEBACiAJCQl9CiAJCX0KIAkJZWxzZQotLy8JCQlSVF9UUkFDRShDT01QX1JGLCBEQkdfTE9VRCwgKCJNZ250QWN0U2V0X1JGX1N0YXRlIC0gZVJmb24gcmVqZWN0IHBNZ250SW5mby0+UmZPZmZSZWFzb249IDB4JXgsIENoYW5nZVNvdXJjZT0weCVYXG4iLCBwTWdudEluZm8tPlJmT2ZmUmVhc29uLCBDaGFuZ2VTb3VyY2UpKTsKIAkJCTsKIAkJYnJlYWs7CiAKQEAgLTIyMzIsMzggKzE1MTUsMjYgQEAKIAkJCQkvLwogCQkJCS8vIENhbGxpbmcgTWdudERpc2Nvbm5lY3QoKSBpbnN0ZWFkIG9mIE1nbnRBY3RTZXRfODAyXzExX0RJU0FTU09DSUFURSgpLAogCQkJCS8vIGJlY2F1c2Ugd2UgZG8gTk9UIG5lZWQgdG8gc2V0IHNzaWQgdG8gZHVtbXkgb25lcy4KLQkJCQkvLyBSZXZpc2VkIGJ5IFJvZ2VyLCAyMDA3LjEyLjA0LgogCQkJCS8vCiAJCQkJTWdudERpc2Nvbm5lY3QoIGRldiwgZGlzYXNfbHZfc3MgKTsKIAogCQkJCS8vIENsZWFyIGNvbnRlbnQgb2YgYnNzRGVzY1tdIGFuZCBic3NEZXNjNFF1ZXJ5W10gdG8gYXZvaWQgcmVwb3J0aW5nIG9sZCBic3MgdG8gVUkuCi0JCQkJLy8gMjAwNy4wNS4yOCwgYnkgc2hpZW4gY2hhbmcuCi0vLwkJCQlQbGF0Zm9ybVplcm9NZW1vcnkoIHBNZ250SW5mby0+YnNzRGVzYywgc2l6ZW9mKFJUX1dMQU5fQlNTKSpNQVhfQlNTX0RFU0MgKTsKLS8vCQkJCXBNZ250SW5mby0+TnVtQnNzRGVzYyA9IDA7Ci0vLwkJCQlQbGF0Zm9ybVplcm9NZW1vcnkoIHBNZ250SW5mby0+YnNzRGVzYzRRdWVyeSwgc2l6ZW9mKFJUX1dMQU5fQlNTKSpNQVhfQlNTX0RFU0MgKTsKLS8vCQkJCXBNZ250SW5mby0+TnVtQnNzRGVzYzRRdWVyeSA9IDA7CiAJCQl9CiAKLQotCiAJCXByaXYtPlJmT2ZmUmVhc29uIHw9IENoYW5nZVNvdXJjZTsKIAkJYkFjdGlvbkFsbG93ZWQgPSB0cnVlOwogCQlicmVhazsKLQogCWNhc2UgZVJmU2xlZXA6CiAJCXByaXYtPlJmT2ZmUmVhc29uIHw9IENoYW5nZVNvdXJjZTsKIAkJYkFjdGlvbkFsbG93ZWQgPSB0cnVlOwogCQlicmVhazsKLQogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KIAogCWlmKGJBY3Rpb25BbGxvd2VkKQogCXsKLS8vCQlSVF9UUkFDRShDT01QX1JGLCBEQkdfTE9VRCwgKCJNZ250QWN0U2V0X1JGX1N0YXRlKCk6IEFjdGlvbiBpcyBhbGxvd2VkLi4uLiBTdGF0ZVRvU2V0KCVkKSwgUmZPZmZSZWFzb24oJSNYKVxuIiwgU3RhdGVUb1NldCwgcE1nbnRJbmZvLT5SZk9mZlJlYXNvbikpOwogICAgICAgICAgICAgICAgIC8vIENvbmZpZyBIVyB0byB0aGUgc3BlY2lmaWVkIG1vZGUuCi0vLwkJcHJpbnRrKCJNZ250QWN0U2V0X1JGX1N0YXRlKCk6IEFjdGlvbiBpcyBhbGxvd2VkLi4uLiBTdGF0ZVRvU2V0KCVkKSwgUmZPZmZSZWFzb24oJSNYKVxuIiwgU3RhdGVUb1NldCwgcHJpdi0+UmZPZmZSZWFzb24pOwogCQlTZXRSRlBvd2VyU3RhdGUoZGV2LCBTdGF0ZVRvU2V0KTsKIAogCQkvLyBUdXJuIG9uIFJGLgpAQCAtMjI3Myw3ICsxNTQ0LDYgQEAKIAkJCWlmKGJDb25uZWN0QnlTU0lEKQogCQkJewogCQkJLy8gYnkgYW15IG5vdCBzdXBwb3J0ZWQKLS8vCQkJCU1nbnRBY3RTZXRfODAyXzExX1NTSUQoQWRhcHRlciwgQWRhcHRlci0+TWdudEluZm8uU3NpZC5PY3RldCwgQWRhcHRlci0+TWdudEluZm8uU3NpZC5MZW5ndGgsIFRSVUUgKTsKIAkJCX0KIAkJfQogCQkvLyBUdXJuIG9mZiBSRi4KQEAgLTIyODIsMTggKzE1NTIsMTEgQEAKIAkJCUhhbERpc2FibGVSeDgxODVEdW1teShkZXYpOwogCQl9CiAJfQotCWVsc2UKLQl7Ci0JLy8JcHJpbnRrKCJNZ250QWN0U2V0X1JGX1N0YXRlKCk6IEFjdGlvbiBpcyByZWplY3RlZC4uLi4gU3RhdGVUb1NldCglZCksIENoYW5nZVNvdXJjZSglI1gpLCBSZk9mZlJlYXNvbiglI1gpXG4iLCBTdGF0ZVRvU2V0LCBDaGFuZ2VTb3VyY2UsIHByaXYtPlJmT2ZmUmVhc29uKTsKLQl9CiAKIAkvLyBSZWxlYXNlIFJGIHNwaW5sb2NrCi0vLwlkb3duKCZwcml2LT5yZl9zdGF0ZSk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJmX3BzX2xvY2ssZmxhZyk7CiAJcHJpdi0+UkZDaGFuZ2VJblByb2dyZXNzID0gZmFsc2U7Ci0vLwl1cCgmcHJpdi0+cmZfc3RhdGUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJmX3BzX2xvY2ssZmxhZyk7Ci0vLwlwcmludGsoIjw9PT1NZ250QWN0U2V0X1JGX1N0YXRlKClcbiIpOwogCXJldHVybiBiQWN0aW9uQWxsb3dlZDsKIH0KIHZvaWQKQEAgLTIzMDIsMTUgKzE1NjUsMTIgQEAKIAkpCiB7CiAJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOwotCS8vdTggaW5kZXggPSAwOwotCiAJLy8KIAkvLyBUaGlzIGZsYWcgImJTd1JmUHJvY2Vzc2luZyIsIGluZGljYXRlcyB0aGUgc3RhdHVzIG9mIElQUyBwcm9jZWR1cmUsIHNob3VsZCBiZSBzZXQgaWYgdGhlIElQUyB3b3JraXRlbQogCS8vIGlzIHJlYWxseSBzY2hlZHVsZWQuCiAJLy8gVGhlIG9sZCBjb2RlLCBzZXRzIHRoaXMgZmxhZyBiZWZvcmUgc2NoZWR1bGluZyB0aGUgSVBTIHdvcmtpdGVtIGFuZCBob3dldmVyLCBhdCB0aGUgc2FtZSB0aW1lIHRoZQogCS8vIHByZXZpb3VzIElQUyB3b3JraXRlbSBkaWQgbm90IGVuZCB5ZXQsIGZhaWxzIHRvIHNjaGVkdWxlIHRoZSBjdXJyZW50IHdvcmtpdGVtLiBUaHVzLCBiU3dSZlByb2Nlc3NpbmcKIAkvLyBibG9ja3MgdGhlIElQUyBwcm9jZWR1cmUgb2Ygc3dpdGNoaW5nIFJGLgotCS8vIEJ5IEJydWNlLCAyMDA3LTEyLTI1LgogCS8vCiAJcHJpdi0+YlN3UmZQcm9jZXNzaW5nID0gdHJ1ZTsKIApAQCAtMjMyNiw3ICsxNTg2LDYgQEAKIC8vCiAvLwlEZXNjcmlwdGlvbjoKIC8vCQlFbnRlciB0aGUgaW5hY3RpdmUgcG93ZXIgc2F2ZSBtb2RlLiBSRiB3aWxsIGJlIG9mZgotLy8JMjAwNy4wOC4xNywgYnkgc2hpZW4gY2hhbmcuCiAvLwogdm9pZAogSVBTRW50ZXIoCkBAIC0yMzM1LDEzICsxNTk0LDExIEBACiB7CiAJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOwogCVJUX1JGX1BPV0VSX1NUQVRFIHJ0U3RhdGU7Ci0JLy9wcmludGsoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT5lbnRlciBJUFNcbiIpOwogCWlmIChwcml2LT5iSW5hY3RpdmVQcykKIAl7CiAJCXJ0U3RhdGUgPSBwcml2LT5lUkZQb3dlclN0YXRlOwogCiAJCS8vCi0JCS8vIEFkZGVkIGJ5IEJydWNlLCAyMDA3LTEyLTI1LgogCQkvLyBEbyBub3QgZW50ZXIgSVBTIGluIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKIAkJLy8gKDEpIFJGIGlzIGFscmVhZHkgT0ZGIG9yIFNsZWVwCiAJCS8vICgyKSBiU3dSZlByb2Nlc3NpbmcgKGluZGljYXRlcyB0aGUgSVBTIGlzIHN0aWxsIHVuZGVyIGdvaW5nKQpAQCAtMjM1MiwxMiArMTYwOSwxMCBAQAogCQlpZiAocnRTdGF0ZSA9PSBlUmZPbiAmJiAhcHJpdi0+YlN3UmZQcm9jZXNzaW5nCiAJCQkmJiAocHJpdi0+aWVlZTgwMjExLT5zdGF0ZSAhPSBJRUVFODAyMTFfTElOS0VEICkpCiAJCXsKLQkvLwkJcHJpbnRrKCJJUFNFbnRlcigpOiBUdXJuIG9mZiBSRi5cbiIpOwogCQkJcHJpdi0+ZUluYWN0aXZlUG93ZXJTdGF0ZSA9IGVSZk9mZjsKIAkJCUluYWN0aXZlUG93ZXJTYXZlKGRldik7CiAJCX0KIAl9Ci0vLwlwcmludGsoInByaXYtPmVSRlBvd2VyU3RhdGUgaXMgJWRcbiIscHJpdi0+ZVJGUG93ZXJTdGF0ZSk7CiB9CiB2b2lkCiBJUFNMZWF2ZSgKQEAgLTIzNjYsMjAgKzE2MjEsMTcgQEAKIHsKIAlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7CiAJUlRfUkZfUE9XRVJfU1RBVEUgcnRTdGF0ZTsKLQkvL3ByaW50aygiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0+bGVhdmUgSVBTXG4iKTsKIAlpZiAocHJpdi0+YkluYWN0aXZlUHMpCiAJewogCQlydFN0YXRlID0gcHJpdi0+ZVJGUG93ZXJTdGF0ZTsKIAkJaWYgKChydFN0YXRlID09IGVSZk9mZiB8fCBydFN0YXRlID09IGVSZlNsZWVwKSAmJiAoIXByaXYtPmJTd1JmUHJvY2Vzc2luZykgJiYgcHJpdi0+UmZPZmZSZWFzb24gPD0gUkZfQ0hBTkdFX0JZX0lQUykKIAkJewotLy8JCQlwcmludGsoIklQU0xlYXZlKCk6IFR1cm4gb24gUkYuXG4iKTsKIAkJCXByaXYtPmVJbmFjdGl2ZVBvd2VyU3RhdGUgPSBlUmZPbjsKIAkJCUluYWN0aXZlUG93ZXJTYXZlKGRldik7CiAJCX0KIAl9Ci0vLwlwcmludGsoInByaXYtPmVSRlBvd2VyU3RhdGUgaXMgJWRcbiIscHJpdi0+ZVJGUG93ZXJTdGF0ZSk7CiB9Ci0vL2J5IGFteSBmb3IgcG93ZXIgc2F2ZQorCiB2b2lkIHJ0bDgxODViX2FkYXB0ZXJfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICAgIHN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKQEAgLTIzODgsNzUgKzE2NDAsNDUgQEAKIAl1OCBTdXBwb3J0ZWRXaXJlbGVzc01vZGU7CiAJdTgJCQlJbml0V2lyZWxlc3NNb2RlOwogCXU4CQkJYkludmFsaWRXaXJlbGVzc01vZGUgPSAwOwotCS8vaW50IGk7CiAJdTggdG1wdTg7Ci0gICAgCS8vdTggdTF0bXAsdTJ0bXA7CiAJdTggYnRDUjkzNDY7CiAJdTggVG1wVTFiOwogCXU4IGJ0UFNSOwogCi0JLy9ydGw4MTgwX3J0eF9kaXNhYmxlKGRldik7Ci0vL3tieSBhbXkgMDgwMzEyCiAJd3JpdGVfbmljX2J5dGUoZGV2LDB4MjRlLCAoQklUNXxCSVQ2fEJJVDApKTsKLS8vYnkgYW15IDA4MDMxMn0KIAlydGw4MTgwX3Jlc2V0KGRldik7CiAKIAlwcml2LT5kbWFfcG9sbF9tYXNrID0gMDsKIAlwcml2LT5kbWFfcG9sbF9zdG9wX21hc2sgPSAwOwogCi0JLy9ydGw4MTgwX2JlYWNvbl90eF9kaXNhYmxlKGRldik7Ci0KIAlId0NvbmZpZ3VyZVJUTDgxODUoZGV2KTsKLQogCXdyaXRlX25pY19kd29yZChkZXYsIE1BQzAsICgodTMyKilkZXYtPmRldl9hZGRyKVswXSk7CiAJd3JpdGVfbmljX3dvcmQoZGV2LCBNQUM0LCAoKHUzMiopZGV2LT5kZXZfYWRkcilbMV0gJiAweGZmZmYgKTsKLQogCXdyaXRlX25pY19ieXRlKGRldiwgTVNSLCByZWFkX25pY19ieXRlKGRldiwgTVNSKSAmIDB4ZjMpOwkvLyBkZWZhdWx0IG5ldHdvcmsgdHlwZSB0byAnTm8JTGluaycKLQotCS8vd3JpdGVfbmljX2J5dGUoZGV2LCBCUlNSLCAweDApOwkJLy8gU2V0IEJSU1I9IDFNCi0KIAl3cml0ZV9uaWNfd29yZChkZXYsIEJjbkl0diwgMTAwKTsKIAl3cml0ZV9uaWNfd29yZChkZXYsIEF0aW1XbmQsIDIpOwotCi0JLy9QbGF0Zm9ybUVGSU9Xcml0ZTJCeXRlKGRldiwgRkVNUiwgMHhGRkZGKTsKIAlQbGF0Zm9ybUlPV3JpdGUyQnl0ZShkZXYsIEZFTVIsIDB4RkZGRik7Ci0KIAl3cml0ZV9uaWNfYnl0ZShkZXYsIFdQQV9DT05GSUcsIDApOwotCiAJTWFjQ29uZmlnXzg1QkFTSUMoZGV2KTsKLQogCS8vIE92ZXJyaWRlIHRoZSBSRlNXX0NUUkwgKE1BQyBvZmZzZXQgMHgyNzItMHgyNzMpLCAyMDA2LjA2LjA3LCBieSByY25qa28uCiAJLy8gQlRfREVNT19CT0FSRCB0eXBlCiAJUGxhdGZvcm1JT1dyaXRlMkJ5dGUoZGV2LCBSRlNXX0NUUkwsIDB4NTY5YSk7Ci0vL2J5IGFteQotLy8jaWZkZWYgQ09ORklHX1JUTDgxOFhfUwotCQkvLyBmb3Igam9uZyByZXF1aXJlZAotLy8JUGxhdGZvcm1JT1dyaXRlMkJ5dGUoZGV2LCBSRlNXX0NUUkwsIDB4OWE1Nik7Ci0vLyNlbmRpZgotLy9ieSBhbXkKLQkvL0JUX1FBX0JPQVJECi0JLy9QbGF0Zm9ybUlPV3JpdGUyQnl0ZShkZXYsIFJGU1dfQ1RSTCwgMHg5YTU2KTsKIAogCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAkvLyBTZXQgdXAgUEhZIHJlbGF0ZWQuCiAJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCS8vIEVuYWJsZSBDb25maWczLlBBUkFNX0VuIHRvIHJldmlzZSBBbmFhUGFybS4KIAl3cml0ZV9uaWNfYnl0ZShkZXYsIENSOTM0NiwgMHhjMCk7CS8vIGVuYWJsZSBjb25maWcgcmVnaXN0ZXIgd3JpdGUKLS8vYnkgYW15CiAJdG1wdTggPSByZWFkX25pY19ieXRlKGRldiwgQ09ORklHMyk7CiAJd3JpdGVfbmljX2J5dGUoZGV2LCBDT05GSUczLCAodG1wdTggfENPTkZJRzNfUEFSTV9FbikgKTsKLS8vYnkgYW15CiAJLy8gVHVybiBvbiBBbmFsb2cgcG93ZXIuCiAJLy8gQXNrZWQgZm9yIGJ5IFdpbGxpYW0sIG90aGVyd2lzZSwgTUFDIDMtd2lyZSBjYW4ndCB3b3JrLCAyMDA2LjA2LjI3LCBieSByY25qa28uCiAJd3JpdGVfbmljX2R3b3JkKGRldiwgQU5BUEFSQU0yLCBBTkFQQVJNMl9BU0lDX09OKTsKIAl3cml0ZV9uaWNfZHdvcmQoZGV2LCBBTkFQQVJBTSwgQU5BUEFSTV9BU0lDX09OKTsKLS8vYnkgYW15CiAJd3JpdGVfbmljX3dvcmQoZGV2LCBBTkFQQVJBTTMsIDB4MDAxMCk7Ci0vL2J5IGFteQogCiAJd3JpdGVfbmljX2J5dGUoZGV2LCBDT05GSUczLCB0bXB1OCk7CiAJd3JpdGVfbmljX2J5dGUoZGV2LCBDUjkzNDYsIDB4MDApOwotLy97YnkgYW15IDA4MDMxMiBmb3IgbGVkCiAJLy8gZW5hYmxlIEVFTTAgYW5kIEVFTTEgaW4gOTM0NkNSCiAJYnRDUjkzNDYgPSByZWFkX25pY19ieXRlKGRldiwgQ1I5MzQ2KTsKIAl3cml0ZV9uaWNfYnl0ZShkZXYsIENSOTM0NiwgKGJ0Q1I5MzQ2fDB4QzApICk7CkBAIC0yNDc0LDcgKzE2OTYsNiBAQAogCS8vIEItY3V0IFJGIFJhZGlvIG9uL29mZiAgNWVbM109MAogCWJ0UFNSID0gcmVhZF9uaWNfYnl0ZShkZXYsIFBTUik7CiAJd3JpdGVfbmljX2J5dGUoZGV2LCBQU1IsIChidFBTUiB8IEJJVDMpKTsKLS8vYnkgYW15IDA4MDMxMiBmb3IgbGVkfQogCS8vIHNldHVwIGluaXRpYWwgdGltaW5nIGZvciBSRkUuCiAJd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNPdXRwdXQsIDB4MDQ4MCk7CiAJU2V0T3V0cHV0RW5hYmxlT2ZSZlBpbnMoZGV2KTsKQEAgLTI1MzcsNTUgKzE3NTgsMTkgQEAKIAkJSW5pdFdpcmVsZXNzTW9kZSA9IGllZWUtPm1vZGU7CiAJfQogLy9ieSBhbXkgZm9yIHBvd2VyIHNhdmUKLS8vCXByaW50aygiaW5pdGlhbGl6ZSBFTkFCTEVfSVBTXG4iKTsKIAlwcml2LT5lUkZQb3dlclN0YXRlID0gZVJmT2ZmOwogCXByaXYtPlJmT2ZmUmVhc29uID0gMDsKIAl7Ci0JLy8JdTMyIHRtcDI7Ci0JLy8JdTMyIHRtcCA9IGppZmZpZXM7CiAJCU1nbnRBY3RTZXRfUkZfU3RhdGUoZGV2LCBlUmZPbiwgMCk7Ci0JLy8JdG1wMiA9IGppZmZpZXM7Ci0JLy8JcHJpbnRrKCJyZiBvbiBjb3N0IGppZmZpZXM6JWx4XG4iLCAodG1wMi10bXApKjEwMDAvSFopOwogCX0KLS8vCURydklGSW5kaWNhdGVDdXJyZW50UGh5U3RhdHVzKHByaXYpOwogCQkvLwogCQkvLyBJZiBpbmFjdGl2ZSBwb3dlciBtb2RlIGlzIGVuYWJsZWQsIGRpc2FibGUgcmYgd2hpbGUgaW4gZGlzY29ubmVjdGVkIHN0YXRlLgotCQkvLyAyMDA3LjA3LjE2LCBieSBzaGllbiBjaGFuZy4KIAkJLy8KIAlpZiAocHJpdi0+YkluYWN0aXZlUHMpCiAJewotCS8vCXUzMiB0bXAyOwotCS8vCXUzMiB0bXAgPSBqaWZmaWVzOwogCQlNZ250QWN0U2V0X1JGX1N0YXRlKGRldixlUmZPZmYsIFJGX0NIQU5HRV9CWV9JUFMpOwotCS8vCXRtcDIgPSBqaWZmaWVzOwotCS8vCXByaW50aygicmYgb2ZmIGNvc3QgamlmZmllczolbHhcbiIsICh0bXAyLXRtcCkqMTAwMC9IWik7Ci0KIAl9Ci0vLwlJUFNFbnRlcihkZXYpOwogLy9ieSBhbXkgZm9yIHBvd2VyIHNhdmUKLSNpZmRlZiBUT0RPCi0JLy8gVHVybiBvZmYgUkYgaWYgbmVjZXNzYXJ5LiAyMDA1LjA4LjIzLCBieSByY25qa28uCi0JLy8gV2Ugc2hhbGwgdHVybiBvZmYgUkYgYWZ0ZXIgc2V0dGluZyBDTURSLCBvdGhlcndpc2UsCi0JLy8gUkYgd2lsbCBiZSB0dXJubmVkIG9uIGFmdGVyIHdlIGVuYWJsZSBNQUMgVHgvUnguCi0JaWYoQWRhcHRlci0+TWdudEluZm8uUmVnUmZPZmYgPT0gVFJVRSkKLQl7Ci0JCVNldFJGUG93ZXJTdGF0ZTgxODUoQWRhcHRlciwgUkZfT0ZGKTsKLQl9Ci0JZWxzZQotCXsKLQkJU2V0UkZQb3dlclN0YXRlODE4NShBZGFwdGVyLCBSRl9PTik7Ci0JfQotI2VuZGlmCi0KLS8qICAgLy90aGVzZSBpcyBlcXVhbCB3aXRoIGFib3ZlIFRPRE8uCi0Jd3JpdGVfbmljX2J5dGUoZGV2LCBDUjkzNDYsIDB4YzApOwkvLyBlbmFibGUgY29uZmlnIHJlZ2lzdGVyIHdyaXRlCi0Jd3JpdGVfbmljX2J5dGUoZGV2LCBDT05GSUczLCByZWFkX25pY19ieXRlKGRldiwgQ09ORklHMykgfCBDT05GSUczX1BBUk1fRW4pOwotCVJGX1dyaXRlUmVnKGRldiwgMHg0LCAweDlGRik7Ci0Jd3JpdGVfbmljX2R3b3JkKGRldiwgQU5BUEFSQU0yLCBBTkFQQVJNMl9BU0lDX09OKTsKLQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBBTkFQQVJBTSwgQU5BUEFSTV9BU0lDX09OKTsKLQl3cml0ZV9uaWNfYnl0ZShkZXYsIENPTkZJRzMsIChyZWFkX25pY19ieXRlKGRldiwgQ09ORklHMykmKH5DT05GSUczX1BBUk1fRW4pKSk7Ci0Jd3JpdGVfbmljX2J5dGUoZGV2LCBDUjkzNDYsIDB4MDApOwotKi8KIAogCUFjdFNldFdpcmVsZXNzTW9kZTgxODUoZGV2LCAodTgpKEluaXRXaXJlbGVzc01vZGUpKTsKIApAQCAtMjU5NCwxNCArMTc3OSwxMSBAQAogCXJ0bDgxODViX2lycV9lbmFibGUoZGV2KTsKIAogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0KICB9CiAKLQogdm9pZCBydGw4MTg1Yl9yeF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAl1OCBjbWQ7Ci0JLy91MzIgcnhjb25mOwogCS8qIGZvciBub3cgd2UgYWNjZXB0IGRhdGEsIG1hbmFnZW1lbnQgJiBjdGwgZnJhbWUqLwogCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKIApAQCAtMjYxMywxMSArMTc5NSw2IEBACiAJCXByaXYtPlJlY2VpdmVDb25maWcgPSBwcml2LT5SZWNlaXZlQ29uZmlnIHwgUkNSX0FBUDsKIAl9CiAKLQkvKmlmKHByaXYtPmllZWU4MDIxMS0+aXdfbW9kZSA9PSBJV19NT0RFX01BU1RFUil7Ci0JCXJ4Y29uZiA9IHJ4Y29uZiB8ICgxPDxBQ0NFUFRfQUxMTUFDX0ZSQU1FX1NISUZUKTsKLQkJcnhjb25mID0gcnhjb25mIHwgKDE8PFJYX0NIRUNLX0JTU0lEX1NISUZUKTsKLQl9Ki8KLQogCWlmKHByaXYtPmllZWU4MDIxMS0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpewogCQlwcml2LT5SZWNlaXZlQ29uZmlnID0gcHJpdi0+UmVjZWl2ZUNvbmZpZyB8IFJDUl9BQ0YgfCBSQ1JfQVBXUk1HVCB8IFJDUl9BSUNWOwogCX0KQEAgLTI2MjksOSArMTgwNiw2IEBACiAKIAlmaXhfcnhfZmlmbyhkZXYpOwogCi0jaWZkZWYgREVCVUdfUlgKLQlETUVTRygicnhjb25mOiAleCAleCIscHJpdi0+UmVjZWl2ZUNvbmZpZyAscmVhZF9uaWNfZHdvcmQoZGV2LFJDUikpOwotI2VuZGlmCiAJY21kPXJlYWRfbmljX2J5dGUoZGV2LENNRCk7CiAJd3JpdGVfbmljX2J5dGUoZGV2LENNRCxjbWQgfCAoMTw8Q01EX1JYX0VOQUJMRV9TSElGVCkpOwogCkBAIC0yNjQwLDkgKzE4MTQsNyBAQAogdm9pZCBydGw4MTg1Yl90eF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAl1OCBjbWQ7Ci0JLy91OCB0eF9hZ2NfY3RsOwogCXU4IGJ5dGU7Ci0JLy91MzIgdHhjb25mOwogCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKIAogCXdyaXRlX25pY19kd29yZChkZXYsIFRDUiwgcHJpdi0+VHJhbnNtaXRDb25maWcpOwpAQCAtMjY1MiwyMSArMTgyNCw3IEBACiAKIAlmaXhfdHhfZmlmbyhkZXYpOwogCi0jaWZkZWYgREVCVUdfVFgKLQlETUVTRygidHhjb25mOiAleCAleCIscHJpdi0+VHJhbnNtaXRDb25maWcscmVhZF9uaWNfZHdvcmQoZGV2LFRDUikpOwotI2VuZGlmCi0KIAljbWQ9cmVhZF9uaWNfYnl0ZShkZXYsQ01EKTsKIAl3cml0ZV9uaWNfYnl0ZShkZXYsQ01ELGNtZCB8ICgxPDxDTURfVFhfRU5BQkxFX1NISUZUKSk7Ci0KLQkvL3dyaXRlX25pY19kd29yZChkZXYsVFhfQ09ORix0eGNvbmYpOwotCi0KLS8qCi0JcnRsODE4MF9zZXRfbW9kZShkZXYsRVBST01fQ01EX0NPTkZJRyk7Ci0Jd3JpdGVfbmljX2J5dGUoZGV2LCBUWF9ETUFfUE9MTElORywgcHJpdi0+ZG1hX3BvbGxfbWFzayk7Ci0JcnRsODE4MF9zZXRfbW9kZShkZXYsRVBST01fQ01EX05PUk1BTCk7Ci0JKi8KIH0KIAotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvTWFrZWZpbGUKaW5kZXggNWU0YWE5NS4uZTAzMmMzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9NYWtlZmlsZQpAQCAtMSwxMyArMSwxNSBAQAogTklDX1NFTEVDVCA9IFJUTDgxOTJFCiAKLQogRVhUUkFfQ0ZMQUdTICs9IC1EUlRMODE5MkUKIEVYVFJBX0NGTEFHUyArPSAtc3RkPWdudTg5CiBFWFRSQV9DRkxBR1MgKz0gLU8yCiBFWFRSQV9DRkxBR1MgKz0gLURUSE9NQVNfVFVSQk8KIEVYVFJBX0NGTEFHUyArPSAtREVOQUJMRV9ET1QxMUQKIAotcjgxOTJfcGNpLW9ianMgOj0JCVwKK0VYVFJBX0NGTEFHUyArPSAtREVOQUJMRV9JUFMKK0VYVFJBX0NGTEFHUyArPSAtREVOQUJMRV9MUFMKKworcjgxOTJlX3BjaS1vYmpzIDo9CQlcCiAJcjgxOTJFX2NvcmUubwkJXAogCXI4MTgwXzkzY3g2Lm8JCVwKIAlyODE5MkVfd3gubwkJXApAQCAtMzEsNCArMzMsNSBAQAogCWllZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfY2NtcC5vCVwKIAlpZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3dlcC5vCiAKLW9iai0kKENPTkZJR19SVEw4MTkyRSkgKz0gcjgxOTJfcGNpLm8KK29iai0kKENPTkZJR19SVEw4MTkyRSkgKz0gcjgxOTJlX3BjaS5vCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9kb3QxMWQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9kb3QxMWQuaAppbmRleCAxNWI3YTRiLi41YjBlMmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvZG90MTFkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2RvdDExZC5oCkBAIC0xLDEwMiArMSw5NiBAQAotI2lmbmRlZiBfX0lOQ19ET1QxMURfSAotI2RlZmluZSBfX0lOQ19ET1QxMURfSAorI2lmbmRlZiBJTkNfRE9UMTFEX0gKKyNkZWZpbmUgSU5DX0RPVDExRF9ICiAKICNpZmRlZiBFTkFCTEVfRE9UMTFECiAjaW5jbHVkZSAiaWVlZTgwMjExLmgiCiAKLS8vI2RlZmluZSBFTkFCTEVfRE9UMTFECi0KLS8vI2RlZmluZSBET1QxMURfTUFYX0NITkxfTlVNIDgzCi0KIHR5cGVkZWYgc3RydWN0IF9DSE5MX1RYUE9XRVJfVFJJUExFIHsKIAl1OCBGaXJzdENobmw7CiAJdTggIE51bUNobmxzOwogCXU4ICBNYXhUeFBvd2VySW5EYm07Ci19Q0hOTF9UWFBPV0VSX1RSSVBMRSwgKlBDSE5MX1RYUE9XRVJfVFJJUExFOworfSBDSE5MX1RYUE9XRVJfVFJJUExFLCAqUENITkxfVFhQT1dFUl9UUklQTEU7CiAKIHR5cGVkZWYgZW51bSBfRE9UMTFEX1NUQVRFIHsKIAlET1QxMURfU1RBVEVfTk9ORSA9IDAsCiAJRE9UMTFEX1NUQVRFX0xFQVJORUQsCiAJRE9UMTFEX1NUQVRFX0RPTkUsCi19RE9UMTFEX1NUQVRFOworfSBET1QxMURfU1RBVEU7CisKKy8qKgorICogc3RydWN0IF9SVF9ET1QxMURfSU5GTworICogQENvdW50cnlJZUxlbjogdmFsdWUgZ3JlYXRlciB0aGFuIDAgaWYgQENvdW50cnlJZUJ1ZiBjb250YWlucworICogCSAgICAgICAgICB2YWxpZCBjb3VudHJ5IGluZm9ybWF0aW9uIGVsZW1lbnQuCisgKiBAY2hhbmVsbF9tYXA6IGhvbGRzIGNoYW5uZWwgdmFsdWVzCisgKgkJMCAtIGludmFsaWQsCisgKgkJMSAtIHZhbGlkIChhY3RpdmUgc2NhbiksCisgKgkgCTIgLSB2YWxpZCAocGFzc2l2ZSBzY2FuKQorICogQENvdW50cnlJZVNyY0FkZHIgLSBTb3VyY2UgQVAgb2YgdGhlIGNvdW50cnkgSUUKKyAqLwogCiB0eXBlZGVmIHN0cnVjdCBfUlRfRE9UMTFEX0lORk8gewotCS8vREVDTEFSRV9SVF9PQkpFQ1QoUlRfRE9UMTFEX0lORk8pOworCWJvb2wgYkVuYWJsZWQ7CiAKLQlib29sIGJFbmFibGVkOyAvLyBkb3QxMU11bHRpRG9tYWluQ2FwYWJpbGl0eUVuYWJsZWQKKwl1MTYgQ291bnRyeUllTGVuOworCXU4IENvdW50cnlJZUJ1ZltNQVhfSUVfTEVOXTsKKwl1OCBDb3VudHJ5SWVTcmNBZGRyWzZdOworCXU4IENvdW50cnlJZVdhdGNoZG9nOwogCi0JdTE2IENvdW50cnlJZUxlbjsgLy8gPiAwIGlmIENvdW50cnlJZUJ1ZltdIGNvbnRhaW5zIHZhbGlkIGNvdW50cnkgaW5mb3JtYXRpb24gZWxlbWVudC4KLQl1OCAgQ291bnRyeUllQnVmW01BWF9JRV9MRU5dOwotCXU4ICBDb3VudHJ5SWVTcmNBZGRyWzZdOyAvLyBTb3VyY2UgQVAgb2YgdGhlIGNvdW50cnkgSUUuCi0JdTggIENvdW50cnlJZVdhdGNoZG9nOwotCi0JdTggIGNoYW5uZWxfbWFwW01BWF9DSEFOTkVMX05VTUJFUisxXTsgIC8vISEhVmFsdWUgMDogSW52YWxpZCwgMTogVmFsaWQgKGFjdGl2ZSBzY2FuKSwgMjogVmFsaWQgKHBhc3NpdmUgc2NhbikKLQkvL3U4ICBDaG5sTGlzdExlbjsgLy8gI0J5dGVzIHZhbGlkIGluIENobmxMaXN0W10uCi0JLy91OCAgQ2hubExpc3RbRE9UMTFEX01BWF9DSE5MX05VTV07Ci0JdTggIE1heFR4UHdyRGJtTGlzdFtNQVhfQ0hBTk5FTF9OVU1CRVIrMV07CisJdTggY2hhbm5lbF9tYXBbTUFYX0NIQU5ORUxfTlVNQkVSKzFdOworCXU4IE1heFR4UHdyRGJtTGlzdFtNQVhfQ0hBTk5FTF9OVU1CRVIrMV07CiAKIAlET1QxMURfU1RBVEUgU3RhdGU7Ci19UlRfRE9UMTFEX0lORk8sICpQUlRfRE9UMTFEX0lORk87Ci0jZGVmaW5lIGVxTWFjQWRkcihhLGIpCQkoICgoYSlbMF09PShiKVswXSAmJiAoYSlbMV09PShiKVsxXSAmJiAoYSlbMl09PShiKVsyXSAmJiAoYSlbM109PShiKVszXSAmJiAoYSlbNF09PShiKVs0XSAmJiAoYSlbNV09PShiKVs1XSkgPyAxOjAgKQotI2RlZmluZSBjcE1hY0FkZHIoZGVzLHNyYykJICAgICAgKChkZXMpWzBdPShzcmMpWzBdLChkZXMpWzFdPShzcmMpWzFdLChkZXMpWzJdPShzcmMpWzJdLChkZXMpWzNdPShzcmMpWzNdLChkZXMpWzRdPShzcmMpWzRdLChkZXMpWzVdPShzcmMpWzVdKQotI2RlZmluZSBHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldikgKChQUlRfRE9UMTFEX0lORk8pKChfX3BJZWVlRGV2KS0+cERvdDExZEluZm8pKQorfSBSVF9ET1QxMURfSU5GTywgKlBSVF9ET1QxMURfSU5GTzsKKworI2RlZmluZSBlcU1hY0FkZHIoYSwgYikgKCgoYSlbMF0gPT0gKGIpWzBdICYmIChhKVsxXSA9PSAoYilbMV0gJiYgKGEpWzJdID09IFwKKwkJCShiKVsyXSAmJiAoYSlbM10gPT0gKGIpWzNdICYmIChhKVs0XSA9PSAoYilbNF0gJiYgXAorCQkJKGEpWzVdID09IChiKVs1XSkgPyAxIDogMCkKKworI2RlZmluZSBjcE1hY0FkZHIoZGVzLCBzcmMpICgoZGVzKVswXSA9IChzcmMpWzBdLCAoZGVzKVsxXSA9IChzcmMpWzFdLCBcCisJCQkoZGVzKVsyXSA9IChzcmMpWzJdLCAoZGVzKVszXSA9IChzcmMpWzNdLCBcCisJCQkoZGVzKVs0XSA9IChzcmMpWzRdLCAoZGVzKVs1XSA9IChzcmMpWzVdKQorCisjZGVmaW5lIEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KSAoKFBSVF9ET1QxMURfSU5GTykgXAorCQkJKChfX3BJZWVlRGV2KS0+cERvdDExZEluZm8pKQogCiAjZGVmaW5lIElTX0RPVDExRF9FTkFCTEUoX19wSWVlZURldikgR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5iRW5hYmxlZAotI2RlZmluZSBJU19DT1VOVFJZX0lFX1ZBTElEKF9fcEllZWVEZXYpIChHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZUxlbiA+IDApCisjZGVmaW5lIElTX0NPVU5UUllfSUVfVkFMSUQoX19wSWVlZURldikgXAorCQkJKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllTGVuID4gMCkKIAotI2RlZmluZSBJU19FUVVBTF9DSUVfU1JDKF9fcEllZWVEZXYsIF9fcFRhKSBlcU1hY0FkZHIoR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVTcmNBZGRyLCBfX3BUYSkKLSNkZWZpbmUgVVBEQVRFX0NJRV9TUkMoX19wSWVlZURldiwgX19wVGEpIGNwTWFjQWRkcihHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZVNyY0FkZHIsIF9fcFRhKQorI2RlZmluZSBJU19FUVVBTF9DSUVfU1JDKF9fcEllZWVEZXYsIF9fcFRhKSBcCisJCWVxTWFjQWRkcihHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZVNyY0FkZHIsIF9fcFRhKQorCisjZGVmaW5lIFVQREFURV9DSUVfU1JDKF9fcEllZWVEZXYsIF9fcFRhKSBcCisJCWNwTWFjQWRkcihHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZVNyY0FkZHIsIF9fcFRhKQogCiAjZGVmaW5lIElTX0NPVU5UUllfSUVfQ0hBTkdFRChfX3BJZWVlRGV2LCBfX0llKSBcCi0JKCgoX19JZSkuTGVuZ3RoID09IDAgfHwgKF9fSWUpLkxlbmd0aCAhPSBHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZUxlbikgPyBcCi0JRkFMU0UgOiBcCi0JKCFtZW1jbXAoR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVCdWYsIChfX0llKS5PY3RldCwgKF9fSWUpLkxlbmd0aCkpKQorCSgoKF9fSWUpLkxlbmd0aCA9PSAwIHx8IChfX0llKS5MZW5ndGggIT0gXAorCUdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllTGVuKSA/IEZBTFNFIDogXAorCSghbWVtY21wKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllQnVmLCBcCisJKF9fSWUpLk9jdGV0LCAoX19JZSkuTGVuZ3RoKSkpCiAKICNkZWZpbmUgQ0lFX1dBVENIRE9HX1RIIDEKICNkZWZpbmUgR0VUX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KSBHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZVdhdGNoZG9nCiAjZGVmaW5lIFJFU0VUX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KSBHRVRfQ0lFX1dBVENIRE9HKF9fcEllZWVEZXYpID0gMAogI2RlZmluZSBVUERBVEVfQ0lFX1dBVENIRE9HKF9fcEllZWVEZXYpICsrR0VUX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KQogCi0jZGVmaW5lIElTX0RPVDExRF9TVEFURV9ET05FKF9fcEllZWVEZXYpIChHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPlN0YXRlID09IERPVDExRF9TVEFURV9ET05FKQorI2RlZmluZSBJU19ET1QxMURfU1RBVEVfRE9ORShfX3BJZWVlRGV2KSBcCisJCShHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPlN0YXRlID09IERPVDExRF9TVEFURV9ET05FKQogCiAKLXZvaWQKLURvdDExZF9Jbml0KAotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYKLQkpOwordm9pZCBEb3QxMWRfSW5pdChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2KTsKIAotdm9pZAotRG90MTFkX1Jlc2V0KAotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYKLQkpOwordm9pZCBEb3QxMWRfUmVzZXQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldik7CiAKLXZvaWQKLURvdDExZF9VcGRhdGVDb3VudHJ5SWUoCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldiwKLQl1OCAqCQlwVGFkZHIsCi0JdTE2CUNvdXRyeUllTGVuLAotCXU4ICogcENvdXRyeUllCi0JKTsKK3ZvaWQgRG90MTFkX1VwZGF0ZUNvdW50cnlJZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2LCB1OCAqcFRhZGRyLAorCQl1MTYgQ291dHJ5SWVMZW4sIHU4ICpwQ291dHJ5SWUpOwogCi11OAotRE9UMTFEX0dldE1heFR4UHdySW5EYm0oCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldiwKLQl1OCBDaGFubmVsCi0JKTsKK3U4IERPVDExRF9HZXRNYXhUeFB3ckluRGJtKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYsIHU4IGNoYW5uZWwpOwogCi12b2lkCi1ET1QxMURfU2NhbkNvbXBsZXRlKAotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogZGV2Ci0JKTsKK3ZvaWQgRE9UMTFEX1NjYW5Db21wbGV0ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2KTsKIAotaW50IElzTGVnYWxDaGFubmVsKAotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogZGV2LAotCXU4IGNoYW5uZWwKLSk7CitpbnQgSXNMZWdhbENoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldiwgdTggY2hhbm5lbCk7CiAKLWludCBUb0xlZ2FsQ2hhbm5lbCgKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGRldiwKLQl1OCBjaGFubmVsCi0pOwotI2VuZGlmIC8vRU5BQkxFX0RPVDExRAotI2VuZGlmIC8vICNpZm5kZWYgX19JTkNfRE9UMTFEX0gKK2ludCBUb0xlZ2FsQ2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2LCB1OCBjaGFubmVsKTsKKworI2VuZGlmIC8qIEVOQUJMRV9ET1QxMUQgKi8KKyNlbmRpZiAvKiBJTkNfRE9UMTFEX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEuaAppbmRleCAzYmE5ZTllLi5jMzkyNDllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS5oCkBAIC01NDcsOSArNTQ3LDYgQEAKIAogLyogZGVidWcgbWFjcm9zIG5vdCBkZXBlbmRlbnQgb24gQ09ORklHX0lFRUU4MDIxMV9ERUJVRyAqLwogCi0jZGVmaW5lIE1BQ19GTVQgIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IgotI2RlZmluZSBNQUNfQVJHKHgpICgodTgqKSh4KSlbMF0sKCh1OCopKHgpKVsxXSwoKHU4KikoeCkpWzJdLCgodTgqKSh4KSlbM10sKCh1OCopKHgpKVs0XSwoKHU4KikoeCkpWzVdCi0KIC8qCiAgKiBUbyB1c2UgdGhlIGRlYnVnIHN5c3RlbTsKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTEuaAppbmRleCBhYTc2MzkwLi4xZjYxM2EyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExLmgKQEAgLTM1LDYgKzM1LDcgQEAKICNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KQEAgLTE4MCw2ICsxODEsOCBAQAogICAgICAgICB1OCBEcnZBZ2dyTnVtOwogCXUxNiBwa3Rfc2l6ZTsKICAgICAgICAgdTggcmVzZXJ2ZWQxMjsKKworCXU4IGJkaGNwOwogfWNiX2Rlc2MsICpwY2JfZGVzYzsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLURlZmluZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTYxNSw5ICs2MTgsNiBAQAogCiAvKiBkZWJ1ZyBtYWNyb3Mgbm90IGRlcGVuZGVudCBvbiBDT05GSUdfSUVFRTgwMjExX0RFQlVHICovCiAKLSNkZWZpbmUgTUFDX0ZNVCAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiCi0jZGVmaW5lIE1BQ19BUkcoeCkgKCh1OCopKHgpKVswXSwoKHU4KikoeCkpWzFdLCgodTgqKSh4KSlbMl0sKCh1OCopKHgpKVszXSwoKHU4KikoeCkpWzRdLCgodTgqKSh4KSlbNV0KLQogLyoKICAqIFRvIHVzZSB0aGUgZGVidWcgc3lzdGVtOwogICoKQEAgLTc0Myw2ICs3NDMsOCBAQAogI2RlZmluZSBXTEFOX0ZDX0dFVF9WRVJTKGZjKSAoKGZjKSAmIElFRUU4MDIxMV9GQ1RMX1ZFUlMpCiAjZGVmaW5lIFdMQU5fRkNfR0VUX1RZUEUoZmMpICgoZmMpICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpCiAjZGVmaW5lIFdMQU5fRkNfR0VUX1NUWVBFKGZjKSAoKGZjKSAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKQorI2RlZmluZSBXTEFOX0ZDX01PUkVfREFUQShmYykgKChmYykgJiBJRUVFODAyMTFfRkNUTF9NT1JFREFUQSkKKwogCiAjZGVmaW5lIFdMQU5fRkNfR0VUX0ZSQU1FVFlQRShmYykgKChmYykgJiBJRUVFODAyMTFfRkNUTF9GUkFNRVRZUEUpCiAjZGVmaW5lIFdMQU5fR0VUX1NFUV9GUkFHKHNlcSkgKChzZXEpICYgSUVFRTgwMjExX1NDVExfRlJBRykKQEAgLTEwNTUsNyArMTA1Nyw3IEBACiAjZGVmaW5lIFNFQ19BTEdfTk9ORSAgICAgICAgICAgIDAKICNkZWZpbmUgU0VDX0FMR19XRVAgICAgICAgICAgICAgMQogI2RlZmluZSBTRUNfQUxHX1RLSVAgICAgICAgICAgICAyCi0jZGVmaW5lIFNFQ19BTEdfQ0NNUCAgICAgICAgICAgIDMKKyNkZWZpbmUgU0VDX0FMR19DQ01QICAgICAgICAgICAgNAogCiAjZGVmaW5lIFdFUF9LRVlTIAkJNAogI2RlZmluZSBXRVBfS0VZX0xFTgkJMTMKQEAgLTExMjQsNiArMTEyNiwxNCBAQAogLyogTWluaW1hbCBoZWFkZXI7IGNhbiBiZSB1c2VkIGZvciBwYXNzaW5nIDgwMi4xMSBmcmFtZXMgd2l0aCBzdWZmaWNpZW50CiAgKiBpbmZvcm1hdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0eXBlIG9mIHVuZGVybHlpbmcgZGF0YSB0eXBlIGlzIGFjdHVhbGx5CiAgKiBzdG9yZWQgaW4gdGhlIGRhdGEuICovCisgc3RydWN0IGllZWU4MDIxMV9wc3BvbGxfaGRyIHsKKyAgICAgICAgX19sZTE2IGZyYW1lX2N0bDsKKyAgICAgICAgX19sZTE2IGFpZDsKKwl1OCBic3NpZFtFVEhfQUxFTl07CisgICAgICAgIHU4IHRhW0VUSF9BTEVOXTsKKyAgICAgICAgLy91OCBwYXlsb2FkWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBpZWVlODAyMTFfaGRyIHsKICAgICAgICAgX19sZTE2IGZyYW1lX2N0bDsKICAgICAgICAgX19sZTE2IGR1cmF0aW9uX2lkOwpAQCAtMTY2MCw2ICsxNjcwLDcgQEAKIAlib29sIHJhbGlua19jYXBfZXhpc3Q7CiAJYm9vbCBhdGhlcm9zX2NhcF9leGlzdDsKIAlib29sIGNpc2NvX2NhcF9leGlzdDsKKwlib29sIG1hcnZlbGxfY2FwX2V4aXN0OwogCWJvb2wgdW5rbm93bl9jYXBfZXhpc3Q7CiAvLwl1OAliZXJwX2luZm87CiAJYm9vbAliZXJwX2luZm9fdmFsaWQ7CkBAIC0xODY1LDYgKzE4NzYsMTkgQEAKIAkvLyBMZWlzcmUgUG9zd2VyIFNhdmUgOiBEaXNhYmxlIFJGIGlmIGNvbm5lY3RlZCBidXQgdHJhZmZpYyBpcyBub3QgYnVzeQogCS8vCiAJYm9vbAkJCQliTGVpc3VyZVBzOworCXUzMgkJCQlQb3dlclByb2ZpbGU7CisJdTgJCQkJTHBzSWRsZUNvdW50OworCXU4CQkJCVJlZ01heExQU0F3YWtlSW50dmw7CisJdTgJCQkJTFBTQXdha2VJbnR2bDsKKworCXUzMgkJCQlDdXJQc0xldmVsOworCXUzMgkJCQlSZWdSZlBzTGV2ZWw7CisKKwlib29sCQkJCWJGd0N0cmxMUFM7CisJdTgJCQkJRldDdHJsUFNNb2RlOworCisJYm9vbAkJCQlMaW5rUmVxSW5JUFNSRk9mZlBnczsKKwlib29sCQkJCUJ1ZkNvbm5lY3RpbmZvQmVmb3JlOwogCiB9UlRfUE9XRVJfU0FWRV9DT05UUk9MLCpQUlRfUE9XRVJfU0FWRV9DT05UUk9MOwogCkBAIC0xOTA1LDE0ICsxOTI5LDEyMSBAQAogCiAJdTMyCQkJCU51bVR4T2tJblBlcmlvZDsKIAl1MzIJCQkJTnVtUnhPa0luUGVyaW9kOworCXUzMgkJCQlOdW1SeFVuaWNhc3RPa0luUGVyaW9kOwogCWJvb2wJCQkJYkJ1c3lUcmFmZmljOwogfVJUX0xJTktfREVURUNUX1QsICpQUlRfTElOS19ERVRFQ1RfVDsKIAorLy9hZGRlZCBieSBhbXkgMDkwMzMwCit0eXBlZGVmIGVudW0gX0hXX1ZBUklBQkxFU3sKKwlIV19WQVJfRVRIRVJfQUREUiwKKwlIV19WQVJfTVVMVElDQVNUX1JFRywKKwlIV19WQVJfQkFTSUNfUkFURSwKKwlIV19WQVJfQlNTSUQsCisJSFdfVkFSX01FRElBX1NUQVRVUywKKwlIV19WQVJfU0VDVVJJVFlfQ09ORiwKKwlIV19WQVJfQkVBQ09OX0lOVEVSVkFMLAorCUhXX1ZBUl9BVElNX1dJTkRPVywKKwlIV19WQVJfTElTVEVOX0lOVEVSVkFMLAorCUhXX1ZBUl9DU19DT1VOVEVSLAorCUhXX1ZBUl9ERUZBVUxUS0VZMCwKKwlIV19WQVJfREVGQVVMVEtFWTEsCisJSFdfVkFSX0RFRkFVTFRLRVkyLAorCUhXX1ZBUl9ERUZBVUxUS0VZMywKKwlIV19WQVJfU0lGUywKKwlIV19WQVJfRElGUywKKwlIV19WQVJfRUlGUywKKwlIV19WQVJfU0xPVF9USU1FLAorCUhXX1ZBUl9BQ0tfUFJFQU1CTEUsCisJSFdfVkFSX0NXX0NPTkZJRywKKwlIV19WQVJfQ1dfVkFMVUVTLAorCUhXX1ZBUl9SQVRFX0ZBTExCQUNLX0NPTlRST0wsCisJSFdfVkFSX0NPTlRFTlRJT05fV0lORE9XLAorCUhXX1ZBUl9SRVRSWV9DT1VOVCwKKwlIV19WQVJfVFJfU1dJVENILAorCUhXX1ZBUl9DT01NQU5ELAkJCS8vIEZvciBDb21tYW5kIFJlZ2lzdGVyLCBBbm5pZSwgMjAwNi0wNC0wNy4KKwlIV19WQVJfV1BBX0NPTkZJRywJCS8vMjAwNC8wOC8yMywga2N3dSwgZm9yIDgxODcgU2VjdXJpdHkgY29uZmlnCisJSFdfVkFSX0FNUERVX01JTl9TUEFDRSwJLy8gVGhlIHNwYWNpbmcgYmV0d2VlbiBzdWItZnJhbWUuIFJvZ2VyLCAyMDA4LjA3LjA0LgorCUhXX1ZBUl9TSE9SVEdJX0RFTlNJVFksCS8vIFRoZSBkZW5zaXR5IGZvciBzaG9ydEdJLiBSb2dlciwgMjAwOC4wNy4wNC4KKwlIV19WQVJfQU1QRFVfRkFDVE9SLAorCUhXX1ZBUl9NQ1NfUkFURV9BVkFJTEFCTEUsCisJSFdfVkFSX0FDX1BBUkFNLAkJCS8vIEZvciBBQyBQYXJhbWV0ZXJzLCAyMDA1LjEyLjAxLCBieSByY25qa28uCisJSFdfVkFSX0FDTV9DVFJMLAkJCS8vIEZvciBBQ00gQ29udHJvbCwgQW5uaWUsIDIwMDUtMTItMTMuCisJSFdfVkFSX0RJU19SZXFfUXNpemUsCQkvLyBGb3IgRElTX1JlZ19Rc2l6ZSwgSm9zZXBoCisJSFdfVkFSX0NDWF9DSE5MX0xPQUQsCQkvLyBGb3IgQ0NYIDIgY2hhbm5lbCBsb2FkIHJlcXVlc3QsIDIwMDYuMDUuMDQuCisJSFdfVkFSX0NDWF9OT0lTRV9ISVNUT0dSQU0sCS8vIEZvciBDQ1ggMiBub2lzZSBoaXN0b2dyYW0gcmVxdWVzdCwgMjAwNi4wNS4wNC4KKwlIV19WQVJfQ0NYX0NMTV9OSE0sCQkJLy8gRm9yIENDWCAyIHBhcmFsbGVsIGNoYW5uZWwgbG9hZCByZXF1ZXN0IGFuZCBub2lzZSBoaXN0b2dyYW0gcmVxdWVzdCwgMjAwNi4wNS4xMi4KKwlIV19WQVJfVHhPUExpbWl0LAkJCQkvLyBGb3IgdHVyYm8gbW9kZSByZWxhdGVkIHNldHRpbmdzLCBhZGRlZCBieSBSb2dlciwgMjAwNi4xMi4wNworCUhXX1ZBUl9UVVJCT19NT0RFLAkJCS8vIEZvciB0dXJibyBtb2RlIHJlbGF0ZWQgc2V0dGluZ3MsIGFkZGVkIGJ5IFJvZ2VyLCAyMDA2LjEyLjE1LgorCUhXX1ZBUl9SRl9TVEFURSwgCQkJLy8gRm9yIGNoYW5nZSBvciBxdWVyeSBSRiBwb3dlciBzdGF0ZSwgMDYxMjE0LCByY25qa28uCisJSFdfVkFSX1JGX09GRl9CWV9IVywJCS8vIEZvciBVSSB0byBxdWVyeSBpZiBleHRlcm5hbCBIVyBzaWduYWwgZGlzYWJsZSBSRiwgMDYxMjI5LCByY25qa28uCisJSFdfVkFSX0JVU19TUEVFRCwgCQkvLyBJbiB1bml0IG9mIGJwcy4gMjAwNi4wNy4wMywgYnkgcmNuamtvLgorICAgICAgICBIV19WQVJfU0VUX0RFVl9QT1dFUiwJLy8gU2V0IHRvIGxvdyBwb3dlciwgYWRkZWQgYnkgTGFuSHNpbiwgMjAwNy4KKworCS8vMSEhISEhISEhISEhISEhISEhISEhISEhISEhIQorCS8vMUF0dGVudGlvbiBQbGVhc2UhISE8MTFuIG9yIDgxOTAgc3BlY2lmaWMgY29kZSBzaG91bGQgYmUgcHV0IGJlbG93IHRoaXMgbGluZT4KKwkvLzEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKwlIV19WQVJfUkNSLAkJCQkvL2ZvciBSQ1IsIERhdmlkIDIwMDYsMDUsMTEKKwlIV19WQVJfUkFUUl8wLAorCUhXX1ZBUl9SUlNSLAorCUhXX1ZBUl9DUFVfUlNULAorCUhXX1ZBUl9DRUNIS19CU1NJRCwKKyAgICAgICAgSFdfVkFSX0xCS19NT0RFLAkJCS8vIFNldCBsb29rYmFjayBtb2RlLCAyMDA4LjA2LjExLiBhZGRlZCBieSBSb2dlci4KKwkvLyBTZXQgSFcgcmVsYXRlZCBzZXR0aW5nIGZvciAxMU4gQUVTIGJ1Zy4KKwlIV19WQVJfQUVTXzExTl9GSVgsCisJLy8gU2V0IFVzYiBSeCBBZ2dyZWdhdGlvbgorCUhXX1ZBUl9VU0JfUlhfQUdHUiwKKwlIV19WQVJfVVNFUl9DT05UUk9MX1RVUkJPX01PREUsCisJSFdfVkFSX1JFVFJZX0xJTUlULAorI2lmbmRlZiBfUlRMODE5Ml9FWFRfUEFUQ0hfCisJSFdfVkFSX0lOSVRfVFhfUkFURSwgIC8vR2V0IEN1cnJlbnQgVHggcmF0ZSByZWdpc3Rlci4gMjAwOC4xMi4xMC4gQWRkZWQgYnkgdHlubGkKKyNlbmRpZgorCUhXX1ZBUl9UWF9SQVRFX1JFRywgIC8vR2V0IEN1cnJlbnQgVHggcmF0ZSByZWdpc3Rlci4gMjAwOC4xMi4xMC4gQWRkZWQgYnkgdHlubGkKKwlIV19WQVJfRUZVU0VfVVNBR0UsIC8vR2V0IGN1cnJlbnQgRUZVU0UgdXRpbGl6YXRpb24uIDIwMDguMTIuMTkuIEFkZGVkIGJ5IFJvZ2VyLgorCUhXX1ZBUl9FRlVTRV9CWVRFUywKKwlIV19WQVJfQVVUT0xPQURfU1RBVFVTLCAvL0dldCBjdXJyZW50IGF1dG9sb2FkIHN0YXR1cywgMDogYXV0b2xvYWQgc3VjY2VzcywgMTogYXV0b2xvYWQgZmFpbC4gMjAwOC4xMi4xOS4gQWRkZWQgYnkgUm9nZXIuCisJSFdfVkFSX1JGXzJSX0RJU0FCTEUsIC8vIDJSIGRpc2FibGUKKwlIV19WQVJfU0VUX1JQV00sCisJSFdfVkFSX0gyQ19GV19QV1JNT0RFLCAvLyBGb3Igc2V0dGluZyBGVyByZWxhdGVkIEgyQyBjbWQgc3RydWN0dXJlLiBieSB0eW5saS4gMjAwOS4yLjE4CisJSFdfVkFSX0gyQ19GV19KT0lOQlNTUlBULCAvLyBGb3Igc2V0dGluZyBGVyByZWxhdGVkIEgyQyBjbWQgc3RydWN0dXJlLiBieSB0eW5saS4gMjAwOS4yLjE4CisJSFdfVkFSXzFYMV9SRUNWX0NPTUJJTkUsCS8vIEZvciAxVDJSIGJ1dCBvbmx5IDFTUywgQWRkIGJ5IGhwZmFuIDIwMDkuMDQuMTYgaHBmYW4KKwlIV19WQVJfU1RPUF9TRU5EX0JFQUNPTiwKKwlIV19WQVJfVFNGX1RJTUVSLAkJCS8vIFJlYWQgZnJvbSBUU0YgcmVnaXN0ZXIgdG8gZ2V0IHRoZSBjdXJyZW50IFRTRiB0aW1lciwgYnkgQnJ1Y2UsIDIwMDktMDctMjIuCisJSFdfVkFSX0lPX0NNRCwKKwlIV19WQVJfSEFORExFX0ZXX0MySCwJCS8vQWRkZWQgYnkgdHlubGkuIEZvciBoYW5kbGluZyBGVyBDMkggY29tbWFuZC4gMjAwOS4xMC4wNy4KKwlIV19WQVJfRExfRldfUlNWRF9QQUdFLCAJCS8vQWRkZWQgYnkgdHlubGkuIERvd25sb2FkIHRoZSBwYWNrZXRzIHRoYXQgRlcgd2lsbCB1c2UgdG8gUlNWRCBwYWdlLiAyMDA5LjEwLjE0LgorCUhXX1ZBUl9BSUQsCQkJCS8vQWRkZWQgYnkgdHlubGkuCisJSFdfVkFSX0hXX1NFUV9FTkFCTEUsCQkvL0FkZGVkIGJ5IHR5bmxpLiAyMDA5LjEwLjIwLgorCUhXX1ZBUl9VUERBVEVfVFNGLAkJCS8vQWRkZWQgYnkgdHlubGkuIDIwMDkuMTAuMjIuIEZvciBIdyBjb3VudCBUQlRUIHRpbWUuCisJSFdfVkFSX0JDTl9WQUxJRCwJCQkJLy9BZGRlZCBieSB0eW5saS4KKwlIV19WQVJfRldMUFNfUkZfT04JCQkvL0FkZGVkIGJ5IHR5bmxpLiAyMDA5LjExLjA5LiBGb3IgY2hlY2tpbmcgaWYgRncgZmluaXNocyBSRiBvbiBzZXF1ZW5jZS4KK31IV19WQVJJQUJMRVM7CisKKyNkZWZpbmUgUlRfQ0hFQ0tfRk9SX0hBTkdfUEVSSU9EIDIKIAogc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc2VjdXJpdHkgc2VjOwogCisJYm9vbAluZWVkX3N3X2VuYzsKKyNpZmRlZiBFTkFCTEVfTFBTCisJYm9vbCBiQXdha2VQa3RTZW50OworCXU4ICBMUFNEZWxheUNudDsKKwlib29sIGJJc0FnZ3JlZ2F0ZUZyYW1lOworCWJvb2wgcG9sbGluZzsKKwl2b2lkICgqTGVpc3VyZVBTTGVhdmUpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworI2VuZGlmCisKKyNpZmRlZiBFTkFCTEVfSVBTCisJYm9vbCBwcm90b19zdG9wcHBpbmc7CisJYm9vbCB3eF9zZXRfZW5jOworCXN0cnVjdCBzZW1hcGhvcmUgaXBzX3NlbTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaXBzX2xlYXZlX3dxOworICAgICAgICB2b2lkICgqaWVlZTgwMjExX2lwc19sZWF2ZV93cSkgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworICAgICAgICB2b2lkICgqaWVlZTgwMjExX2lwc19sZWF2ZSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisjZW5kaWYKKwl2b2lkICgqU2V0SHdSZWdIYW5kbGVyKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LHU4IHZhcmlhYmxlLHU4KiB2YWwpOworCXU4ICAgKCpydGxsaWJfYXBfc2VjX3R5cGUpKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKKwogCS8vaHcgc2VjdXJpdHkgcmVsYXRlZAogLy8JdTggaHdzZWNfc3VwcG9ydDsgLy9zdXBwb3J0PwogCXU4IGh3c2VjX2FjdGl2ZTsgIC8vaHcgc2VjdXJpdHkgYWN0aXZlLgpAQCAtMjMxOSw3ICsyNDUwLDcgQEAKIAkgKiBzdG9wX3NlbmRfYmFjb25zIGlzIE5PVCBndWFyYW50ZWVkIHRvIGJlIGNhbGxlZCBvbmx5CiAJICogYWZ0ZXIgc3RhcnRfc2VuZF9iZWFjb25zLgogCSAqLwotCXZvaWQgKCpzdGFydF9zZW5kX2JlYWNvbnMpIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LHUxNiB0eF9yYXRlKTsKKwl2b2lkICgqc3RhcnRfc2VuZF9iZWFjb25zKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAJdm9pZCAoKnN0b3Bfc2VuZF9iZWFjb25zKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIAkvKiBwb3dlciBzYXZlIG1vZGUgcmVsYXRlZCAqLwpAQCAtMjM3Myw2ICsyNTA0LDE5IEBACiAJdTggcHJpdlswXTsKIH07CiAKKyNkZWZpbmUJUlRfUkZfT0ZGX0xFVkxfQVNQTQkJCUJJVDAJLy8gUENJIEFTUE0KKyNkZWZpbmUJUlRfUkZfT0ZGX0xFVkxfQ0xLX1JFUQkJQklUMQkvLyBQQ0kgY2xvY2sgcmVxdWVzdAorI2RlZmluZQlSVF9SRl9PRkZfTEVWTF9QQ0lfRDMJCQlCSVQyCS8vIFBDSSBEMyBtb2RlCisjZGVmaW5lCVJUX1JGX09GRl9MRVZMX0hBTFRfTklDCQlCSVQzCS8vIE5JQyBoYWx0LCByZS1pbml0aWFsaXplIGh3IHBhcmFtZXRlcnMKKyNkZWZpbmUJUlRfUkZfT0ZGX0xFVkxfRlJFRV9GVwkJQklUNAkvLyBGVyBmcmVlLCByZS1kb3dubG9hZCB0aGUgRlcKKyNkZWZpbmUJUlRfUkZfT0ZGX0xFVkxfRldfMzJLCQlCSVQ1CS8vIEZXIGluIDMyaworI2RlZmluZQlSVF9SRl9QU19MRVZFTF9BTFdBWVNfQVNQTQlCSVQ2CS8vIEFsd2F5cyBlbmFibGUgQVNQTSBhbmQgQ2xvY2sgUmVxIGluIGluaXRpYWxpemF0aW9uLgorI2RlZmluZQlSVF9SRl9MUFNfRElTQUxCRV8yUgkJCUJJVDMwCS8vIFdoZW4gTFBTIGlzIG9uLCBkaXNhYmxlIDJSIGlmIG5vIHBhY2tldCBpcyByZWNlaXZlZCBvciB0cmFuc21pdHRkLgorI2RlZmluZQlSVF9SRl9MUFNfTEVWRUxfQVNQTQkJCUJJVDMxCS8vIExQUyB3aXRoIEFTUE0KKyNkZWZpbmUJUlRfSU5fUFNfTEVWRUwocFBTQywgX1BTX0ZMQUcpCSgocFBTQy0+Q3VyUHNMZXZlbCAmIF9QU19GTEFHKSA/IHRydWUgOiBmYWxzZSkKKyNkZWZpbmUJUlRfQ0xFQVJfUFNfTEVWRUwocFBTQywgX1BTX0ZMQUcpCShwUFNDLT5DdXJQc0xldmVsICY9ICh+KF9QU19GTEFHKSkpCisjZGVmaW5lCVJUX1NFVF9QU19MRVZFTChwUFNDLCBfUFNfRkxBRykJKHBQU0MtPkN1clBzTGV2ZWwgfD0gX1BTX0ZMQUcpCisKICNkZWZpbmUgSUVFRV9BICAgICAgICAgICAgKDE8PDApCiAjZGVmaW5lIElFRUVfQiAgICAgICAgICAgICgxPDwxKQogI2RlZmluZSBJRUVFX0cgICAgICAgICAgICAoMTw8MikKQEAgLTI2MDksOSArMjc1Myw5IEBACiBleHRlcm4gdm9pZCBpZWVlODAyMTFfc3RhcnRfc2Nhbl9zeW5jcm8oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX2NoZWNrX2FsbF9uZXRzKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9zdGFydF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfc3RvcF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CitleHRlcm4gdm9pZCBpZWVlODAyMTFfc3RvcF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSx1OCBzaHV0ZG93bik7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfc29mdG1hY19zdGFydF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci1leHRlcm4gdm9pZCBpZWVlODAyMTFfc29mdG1hY19zdG9wX3Byb3RvY29sKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKK2V4dGVybiB2b2lkIGllZWU4MDIxMV9zb2Z0bWFjX3N0b3BfcHJvdG9jb2woc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsdTggc2h1dGRvd24pOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3Jlc2V0X3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9ydGxfd2FrZV9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfcnRsX3N0b3BfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwpAQCAtMjc5OCw1ICsyOTQyLDcgQEAKIAkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMpOwogCiB2b2lkIGllZWU4MDIxMV9pbmRpY2F0ZV9wYWNrZXRzKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3QgaWVlZTgwMjExX3J4YioqIHByeGJJbmRpY2F0ZUFycmF5LHU4ICBpbmRleCk7Cit2b2lkIGllZWU4MDIxMV9zdGFfcHNfc2VuZF9udWxsX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzaG9ydCBwd3IpOwordm9pZCBpZWVlODAyMTFfc3RhX3BzX3NlbmRfcHNwb2xsX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKICNkZWZpbmUgUlRfQVNPQ19SRVRSWV9MSU1JVAk1CiAjZW5kaWYgLyogSUVFRTgwMjExX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCmluZGV4IGIxYzU0OTMuLmIzYzliZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYwpAQCAtMjI1LDcgKzIyNSw3IEBACiB9CiAKIAotdm9pZCBfX2V4aXQgaWVlZTgwMjExX2NyeXB0b19kZWluaXQodm9pZCkKK3ZvaWQgaWVlZTgwMjExX2NyeXB0b19kZWluaXQodm9pZCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwdHIsICpuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF9jY21wLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF9jY21wLmMKaW5kZXggYWI4NzFiMy4uMTc3NmY3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfY2NtcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYwpAQCAtMzMxLDcgKzMzMSw3IEBACiAJaWYgKCEoa2V5aWR4ICYgKDEgPDwgNSkpKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJDQ01QOiByZWNlaXZlZCBwYWNrZXQgd2l0aG91dCBFeHRJViIKLQkJCSAgICAgICAiIGZsYWcgZnJvbSAiIE1BQ19GTVQgIlxuIiwgTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCQkgICAgICAgIiBmbGFnIGZyb20gJXBNXG4iLCBoZHItPmFkZHIyKTsKIAkJfQogCQlrZXktPmRvdDExUlNOQVN0YXRzQ0NNUEZvcm1hdEVycm9ycysrOwogCQlyZXR1cm4gLTI7CkBAIC0zNDQsOSArMzQ0LDkgQEAKIAl9CiAJaWYgKCFrZXktPmtleV9zZXQpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIkNDTVA6IHJlY2VpdmVkIHBhY2tldCBmcm9tICIgTUFDX0ZNVAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIkNDTVA6IHJlY2VpdmVkIHBhY2tldCBmcm9tICVwTSIKIAkJCSAgICAgICAiIHdpdGgga2V5aWQ9JWQgdGhhdCBkb2VzIG5vdCBoYXZlIGEgY29uZmlndXJlZCIKLQkJCSAgICAgICAiIGtleVxuIiwgTUFDX0FSRyhoZHItPmFkZHIyKSwga2V5aWR4KTsKKwkJCSAgICAgICAiIGtleVxuIiwgaGRyLT5hZGRyMiwga2V5aWR4KTsKIAkJfQogCQlyZXR1cm4gLTM7CiAJfQpAQCAtMzYxLDExICszNjEsOSBAQAogCiAJaWYgKG1lbWNtcChwbiwga2V5LT5yeF9wbiwgQ0NNUF9QTl9MRU4pIDw9IDApIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIkNDTVA6IHJlcGxheSBkZXRlY3RlZDogU1RBPSIgTUFDX0ZNVAotCQkJICAgICAgICIgcHJldmlvdXMgUE4gJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4ICIKLQkJCSAgICAgICAicmVjZWl2ZWQgUE4gJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAotCQkJICAgICAgIE1BQ19BUkcoaGRyLT5hZGRyMiksIE1BQ19BUkcoa2V5LT5yeF9wbiksCi0JCQkgICAgICAgTUFDX0FSRyhwbikpOworCQkJLy9wcmludGsoS0VSTl9ERUJVRyAiQ0NNUDogcmVwbGF5IGRldGVjdGVkOiBTVEE9JXBNIgorCQkJLy8gICAgICAgIiBwcmV2aW91cyBQTiAlcG0gcmVjZWl2ZWQgUE4gJXBtXG4iLAorCQkJLy8gICAgICAgaGRyLT5hZGRyMiwga2V5LT5yeF9wbiwgcG4pOwogCQl9CiAJCWtleS0+ZG90MTFSU05BU3RhdHNDQ01QUmVwbGF5cysrOwogCQlyZXR1cm4gLTQ7CkBAIC00MDIsNyArNDAwLDcgQEAKIAkJaWYgKG1lbWNtcChtaWMsIGEsIENDTVBfTUlDX0xFTikgIT0gMCkgewogCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJCXByaW50ayhLRVJOX0RFQlVHICJDQ01QOiBkZWNyeXB0IGZhaWxlZDogU1RBPSIKLQkJCQlNQUNfRk1UICJcbiIsIE1BQ19BUkcoaGRyLT5hZGRyMikpOworCQkJCSIlcE1cbiIsIGhkci0+YWRkcjIpOwogCQkJfQogCQkJa2V5LT5kb3QxMVJTTkFTdGF0c0NDTVBEZWNyeXB0RXJyb3JzKys7CiAJCQlyZXR1cm4gLTU7CkBAIC00NzcsMTIgKzQ3NSwxOSBAQAogc3RhdGljIGNoYXIgKiBpZWVlODAyMTFfY2NtcF9wcmludF9zdGF0cyhjaGFyICpwLCB2b2lkICpwcml2KQogewogCXN0cnVjdCBpZWVlODAyMTFfY2NtcF9kYXRhICpjY21wID0gcHJpdjsKLQlwICs9IHNwcmludGYocCwgImtleVslZF0gYWxnPUNDTVAga2V5X3NldD0lZCAiCi0JCSAgICAgInR4X3BuPSUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCAiCi0JCSAgICAgInJ4X3BuPSUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCAiCi0JCSAgICAgImZvcm1hdF9lcnJvcnM9JWQgcmVwbGF5cz0lZCBkZWNyeXB0X2Vycm9ycz0lZFxuIiwKLQkJICAgICBjY21wLT5rZXlfaWR4LCBjY21wLT5rZXlfc2V0LAotCQkgICAgIE1BQ19BUkcoY2NtcC0+dHhfcG4pLCBNQUNfQVJHKGNjbXAtPnJ4X3BuKSwKKwlpbnQgaTsKKworCXAgKz0gc3ByaW50ZihwLCAia2V5WyVkXSBhbGc9Q0NNUCBrZXlfc2V0PSVkIHR4X3BuPSIsCisJCSAgICAgY2NtcC0+a2V5X2lkeCwgY2NtcC0+a2V5X3NldCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjY21wLT50eF9wbik7IGkrKykKKwkJcCArPSBzcHJpbnRmKHAsICIlMDJ4IiwgY2NtcC0+dHhfcG5baV0pOworCisJc3ByaW50ZihwLCAiIHJ4X3BuPSIpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNjbXAtPnJ4X3BuKTsgaSsrKQorCQlwICs9IHNwcmludGYocCwgIiUwMngiLCBjY21wLT50eF9wbltpXSk7CisKKwlwICs9IHNwcmludGYocCwgIiBmb3JtYXRfZXJyb3JzPSVkIHJlcGxheXM9JWQgZGVjcnlwdF9lcnJvcnM9JWRcbiIsCiAJCSAgICAgY2NtcC0+ZG90MTFSU05BU3RhdHNDQ01QRm9ybWF0RXJyb3JzLAogCQkgICAgIGNjbXAtPmRvdDExUlNOQVN0YXRzQ0NNUFJlcGxheXMsCiAJCSAgICAgY2NtcC0+ZG90MTFSU05BU3RhdHNDQ01QRGVjcnlwdEVycm9ycyk7CkBAIC01MTksNyArNTI0LDcgQEAKIH0KIAogCi12b2lkIF9fZXhpdCBpZWVlODAyMTFfY3J5cHRvX2NjbXBfZXhpdCh2b2lkKQordm9pZCBpZWVlODAyMTFfY3J5cHRvX2NjbXBfZXhpdCh2b2lkKQogewogCWllZWU4MDIxMV91bnJlZ2lzdGVyX2NyeXB0b19vcHMoJmllZWU4MDIxMV9jcnlwdF9jY21wKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3RraXAuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3RraXAuYwppbmRleCA3YTE3OTdlLi4wM2NiMjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jCkBAIC01MjAsNyArNTIwLDcgQEAKIAlpZiAoIShrZXlpZHggJiAoMSA8PCA1KSkpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIlRLSVA6IHJlY2VpdmVkIHBhY2tldCB3aXRob3V0IEV4dElWIgotCQkJICAgICAgICIgZmxhZyBmcm9tICIgTUFDX0ZNVCAiXG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCSAgICAgICAiIGZsYWcgZnJvbSAlcE1cbiIsIGhkci0+YWRkcjIpOwogCQl9CiAJCXJldHVybiAtMjsKIAl9CkBAIC01MzIsOSArNTMyLDkgQEAKIAl9CiAJaWYgKCF0a2V5LT5rZXlfc2V0KSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJUS0lQOiByZWNlaXZlZCBwYWNrZXQgZnJvbSAiIE1BQ19GTVQKKwkJCXByaW50ayhLRVJOX0RFQlVHICJUS0lQOiByZWNlaXZlZCBwYWNrZXQgZnJvbSAlcE0iCiAJCQkgICAgICAgIiB3aXRoIGtleWlkPSVkIHRoYXQgZG9lcyBub3QgaGF2ZSBhIGNvbmZpZ3VyZWQiCi0JCQkgICAgICAgIiBrZXlcbiIsIE1BQ19BUkcoaGRyLT5hZGRyMiksIGtleWlkeCk7CisJCQkgICAgICAgIiBrZXlcbiIsIGhkci0+YWRkcjIsIGtleWlkeCk7CiAJCX0KIAkJcmV0dXJuIC0zOwogCX0KQEAgLTU0Nyw5ICs1NDcsOSBAQAogCQlpZiAoaXYzMiA8IHRrZXktPnJ4X2l2MzIgfHwKIAkJKGl2MzIgPT0gdGtleS0+cnhfaXYzMiAmJiBpdjE2IDw9IHRrZXktPnJ4X2l2MTYpKSB7CiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIlRLSVA6IHJlcGxheSBkZXRlY3RlZDogU1RBPSIgTUFDX0ZNVAorCQkJCXByaW50ayhLRVJOX0RFQlVHICJUS0lQOiByZXBsYXkgZGV0ZWN0ZWQ6IFNUQT0lcE0iCiAJCQkJIiBwcmV2aW91cyBUU0MgJTA4eCUwNHggcmVjZWl2ZWQgVFNDICIKLQkJCQkiJTA4eCUwNHhcbiIsIE1BQ19BUkcoaGRyLT5hZGRyMiksCisJCQkJIiUwOHglMDR4XG4iLCBoZHItPmFkZHIyLAogCQkJCXRrZXktPnJ4X2l2MzIsIHRrZXktPnJ4X2l2MTYsIGl2MzIsIGl2MTYpOwogCQkJfQogCQkJdGtleS0+ZG90MTFSU05BU3RhdHNUS0lQUmVwbGF5cysrOwpAQCAtNTgyLDggKzU4Miw4IEBACiAJCWlmIChjcnlwdG9fYmxrY2lwaGVyX2RlY3J5cHQoJmRlc2MsICZzZywgJnNnLCBwbGVuICsgNCkpIHsKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiOiBUS0lQOiBmYWlsZWQgdG8gZGVjcnlwdCAiCi0JCQkJCQkicmVjZWl2ZWQgcGFja2V0IGZyb20gIiBNQUNfRk1UICJcbiIsCi0JCQkJCQlNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCQkJCSJyZWNlaXZlZCBwYWNrZXQgZnJvbSAlcE1cbiIsCisJCQkJCQloZHItPmFkZHIyKTsKIAkJCX0KIAkJCXJldHVybiAtNzsKIAkJfQpAQCAtNjA2LDggKzYwNiw5IEBACiAJCQkJdGtleS0+cnhfcGhhc2UxX2RvbmUgPSAwOwogCQkJfQogCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJCXByaW50ayhLRVJOX0RFQlVHICJUS0lQOiBJQ1YgZXJyb3IgZGV0ZWN0ZWQ6IFNUQT0iCi0JCQkJTUFDX0ZNVCAiXG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCSAgICAgICAiVEtJUDogSUNWIGVycm9yIGRldGVjdGVkOiBTVEE9JXBNXG4iLAorCQkJCSAgICAgICBoZHItPmFkZHIyKTsKIAkJCX0KIAkJCXRrZXktPmRvdDExUlNOQVN0YXRzVEtJUElDVkVycm9ycysrOwogCQkJcmV0dXJuIC01OwpAQCAtODE2LDggKzgxNyw4IEBACiAKIAkvKiBUT0RPOiBuZWVkZWQgcGFyYW1ldGVyczogY291bnQsIGtleWlkLCBrZXkgdHlwZSwgVFNDICovCiAJc3ByaW50ZihidWYsICJNTE1FLU1JQ0hBRUxNSUNGQUlMVVJFLmluZGljYXRpb24oa2V5aWQ9JWQgJXNjYXN0IGFkZHI9IgotCQlNQUNfRk1UICIpIiwga2V5aWR4LCBoZHItPmFkZHIxWzBdICYgMHgwMSA/ICJicm9hZCIgOiAidW5pIiwKLQkJTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCSIlcE0pIiwga2V5aWR4LCBoZHItPmFkZHIxWzBdICYgMHgwMSA/ICJicm9hZCIgOiAidW5pIiwKKwkJaGRyLT5hZGRyMik7CiAJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOwogCXdycXUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKIAl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgSVdFVkNVU1RPTSwgJndycXUsIGJ1Zik7CkBAIC04NjIsOCArODYzLDggQEAKIAkJc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKIAkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBNaWNoYWVsIE1JQyB2ZXJpZmljYXRpb24gZmFpbGVkIGZvciAiCi0JCSAgICAgICAiTVNEVSBmcm9tICIgTUFDX0ZNVCAiIGtleWlkeD0lZFxuIiwKLQkJICAgICAgIHNrYi0+ZGV2ID8gc2tiLT5kZXYtPm5hbWUgOiAiTi9BIiwgTUFDX0FSRyhoZHItPmFkZHIyKSwKKwkJICAgICAgICJNU0RVIGZyb20gJXBNIGtleWlkeD0lZFxuIiwKKwkJICAgICAgIHNrYi0+ZGV2ID8gc2tiLT5kZXYtPm5hbWUgOiAiTi9BIiwgaGRyLT5hZGRyMiwKIAkJICAgICAgIGtleWlkeCk7CiAJCWlmIChza2ItPmRldikKIAkJCWllZWU4MDIxMV9taWNoYWVsX21pY19mYWlsdXJlKHNrYi0+ZGV2LCBoZHIsIGtleWlkeCk7CkBAIC0xMDExLDcgKzEwMTIsNyBAQAogfQogCiAKLXZvaWQgX19leGl0IGllZWU4MDIxMV9jcnlwdG9fdGtpcF9leGl0KHZvaWQpCit2b2lkIGllZWU4MDIxMV9jcnlwdG9fdGtpcF9leGl0KHZvaWQpCiB7CiAJaWVlZTgwMjExX3VucmVnaXN0ZXJfY3J5cHRvX29wcygmaWVlZTgwMjExX2NyeXB0X3RraXApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKaW5kZXggMDZkOTE3MS4uY2UyNjVhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfcnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCkBAIC0zMTIsNiArMzEyLDE3IEBACiAJaWYgKHNrYi0+bGVuIDwgMjQpCiAJCXJldHVybiAwOwogCisjaWYgMQorICAgICAgICBpZiAoaWVlZS0+aHdzZWNfYWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICAgICAgY2JfZGVzYyAqdGNiX2Rlc2MgPSAoY2JfZGVzYyAqKShza2ItPmNiKyBNQVhfREVWX0FERFJfU0laRSk7CisgICAgICAgICAgICAgICAgdGNiX2Rlc2MtPmJId1NlYyA9IDE7CisKKyAgICAgICAgICAgICAgICBpZihpZWVlLT5uZWVkX3N3X2VuYykKKyAgICAgICAgICAgICAgICAgICAgICAgIHRjYl9kZXNjLT5iSHdTZWMgPSAwOworICAgICAgICB9CisjZW5kaWYKKwogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CiAJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7CiAKQEAgLTM2Niw4ICszNzcsOCBAQAogCSAgICBzdHJjbXAoY3J5cHQtPm9wcy0+bmFtZSwgIlRLSVAiKSA9PSAwKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVEtJUCBjb3VudGVybWVhc3VyZXM6IGRyb3BwZWQgIgotCQkJICAgICAgICJyZWNlaXZlZCBwYWNrZXQgZnJvbSAiIE1BQ19GTVQgIlxuIiwKLQkJCSAgICAgICBpZWVlLT5kZXYtPm5hbWUsIE1BQ19BUkcoaGRyLT5hZGRyMikpOworCQkJICAgICAgICJyZWNlaXZlZCBwYWNrZXQgZnJvbSAlcE1cbiIsCisJCQkgICAgICAgaWVlZS0+ZGV2LT5uYW1lLCBoZHItPmFkZHIyKTsKIAkJfQogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMzc4LDggKzM4OSw4IEBACiAJYXRvbWljX2RlYygmY3J5cHQtPnJlZmNudCk7CiAJaWYgKHJlcyA8IDApIHsKIAkJSUVFRTgwMjExX0RFQlVHX0RST1AoCi0JCQkiZGVjcnlwdGlvbiBmYWlsZWQgKFNBPSIgTUFDX0ZNVAotCQkJIikgcmVzPSVkXG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpLCByZXMpOworCQkJImRlY3J5cHRpb24gZmFpbGVkIChTQT0lcE0iCisJCQkiKSByZXM9JWRcbiIsIGhkci0+YWRkcjIsIHJlcyk7CiAJCWlmIChyZXMgPT0gLTIpCiAJCQlJRUVFODAyMTFfREVCVUdfRFJPUCgiRGVjcnlwdGlvbiBmYWlsZWQgSUNWICIKIAkJCQkJICAgICAibWlzbWF0Y2ggKGtleSAlZClcbiIsCkBAIC00MDYsNiArNDE3LDEwIEBACiAJewogCQljYl9kZXNjICp0Y2JfZGVzYyA9IChjYl9kZXNjICopKHNrYi0+Y2IrIE1BWF9ERVZfQUREUl9TSVpFKTsKIAkJdGNiX2Rlc2MtPmJId1NlYyA9IDE7CisKKyAgICAgICAgICAgICAgICBpZihpZWVlLT5uZWVkX3N3X2VuYykKKyAgICAgICAgICAgICAgICAgICAgICAgIHRjYl9kZXNjLT5iSHdTZWMgPSAwOworCiAJfQogCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKQEAgLTQxNiw4ICs0MzEsOCBAQAogCWF0b21pY19kZWMoJmNyeXB0LT5yZWZjbnQpOwogCWlmIChyZXMgPCAwKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogTVNEVSBkZWNyeXB0aW9uL01JQyB2ZXJpZmljYXRpb24gZmFpbGVkIgotCQkgICAgICAgIiAoU0E9IiBNQUNfRk1UICIga2V5aWR4PSVkKVxuIiwKLQkJICAgICAgIGllZWUtPmRldi0+bmFtZSwgTUFDX0FSRyhoZHItPmFkZHIyKSwga2V5aWR4KTsKKwkJICAgICAgICIgKFNBPSVwTSBrZXlpZHg9JWQpXG4iLAorCQkgICAgICAgaWVlZS0+ZGV2LT5uYW1lLCBoZHItPmFkZHIyLCBrZXlpZHgpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC03OTksNyArODE0LDcgQEAKICNlbmRpZgogfQogCi11OCBwYXJzZV9zdWJmcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAordTggcGFyc2Vfc3ViZnJhbWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UqIGllZWUsc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnJ4X3N0YXRzLAogCQkgIHN0cnVjdCBpZWVlODAyMTFfcnhiICpyeGIsdTgqIHNyYyx1OCogZHN0KQogewpAQCAtODM5LDYgKzg1NCw3IEBACiAJfQogCiAJc2tiX3B1bGwoc2tiLCBMTENPZmZzZXQpOworCWllZWUtPmJJc0FnZ3JlZ2F0ZUZyYW1lID0gYklzQWdncmVnYXRlRnJhbWU7Ly9hZGRlZCBieSBhbXkgZm9yIExlaXN1cmUgUFMKIAogCWlmKCFiSXNBZ2dyZWdhdGVGcmFtZSkgewogCQlyeGItPm5yX3N1YmZyYW1lcyA9IDE7CkBAIC05NDAsNiArOTU2LDcgQEAKIAl1OAlUSUQgPSAwOwogCXUxNglTZXFOdW0gPSAwOwogCVBSWF9UU19SRUNPUkQgcFRTID0gTlVMTDsKKwlib29sIHVuaWNhc3RfcGFja2V0ID0gZmFsc2U7CiAJLy9ib29sIGJJc0FnZ3JlZ2F0ZUZyYW1lID0gZmFsc2U7CiAJLy9hZGRlZCBieSBhbXkgZm9yIHJlb3JkZXIKICNpZmRlZiBOT1RfWUVUCkBAIC0xMDQ1LDggKzEwNjIsOCBAQAogCQkJICogZnJhbWVzIHNpbGVudGx5IGluc3RlYWQgb2YgZmlsbGluZyBzeXN0ZW0gbG9nIHdpdGgKIAkJCSAqIHRoZXNlIHJlcG9ydHMuICovCiAJCQlJRUVFODAyMTFfREVCVUdfRFJPUCgiRGVjcnlwdGlvbiBmYWlsZWQgKG5vdCBzZXQpIgotCQkJCQkgICAgICIgKFNBPSIgTUFDX0ZNVCAiKVxuIiwKLQkJCQkJICAgICBNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCQkJICAgICAiIChTQT0lcE0pXG4iLAorCQkJCQkgICAgIGhkci0+YWRkcjIpOwogCQkJaWVlZS0+aWVlZV9zdGF0cy5yeF9kaXNjYXJkc191bmRlY3J5cHRhYmxlKys7CiAJCQlnb3RvIHJ4X2Ryb3BwZWQ7CiAJCX0KQEAgLTExMTQsOCArMTEzMSw4IEBACiAJCSAgICAoa2V5aWR4ID0gaG9zdGFwX3J4X2ZyYW1lX2RlY3J5cHQoaWVlZSwgc2tiLCBjcnlwdCkpIDwgMCkKIAkJewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gZGVjcnlwdCBtZ210OjphdXRoICIKLQkJCSAgICAgICAiZnJvbSAiIE1BQ19GTVQgIlxuIiwgZGV2LT5uYW1lLAotCQkJICAgICAgIE1BQ19BUkcoaGRyLT5hZGRyMikpOworCQkJICAgICAgICJmcm9tICVwTVxuIiwgZGV2LT5uYW1lLAorCQkJICAgICAgIGhkci0+YWRkcjIpOwogCQkJLyogVE9ETzogY291bGQgaW5mb3JtIGhvc3RhcGQgYWJvdXQgdGhpcyBzbyB0aGF0IGl0CiAJCQkgKiBjb3VsZCBzZW5kIGF1dGggZmFpbHVyZSByZXBvcnQgKi8KIAkJCWdvdG8gcnhfZHJvcHBlZDsKQEAgLTEyMTUsNiArMTIzMiwyNCBAQAogICAgICAgICBpZiAobWVtY21wKGJzc2lkLCBpZWVlLT5jdXJyZW50X25ldHdvcmsuYnNzaWQsIEVUSF9BTEVOKSkKICAgICAgICAgICAgICAgICBnb3RvIHJ4X2Ryb3BwZWQ7CiAKKyNpZmRlZiBFTkFCTEVfTFBTCisJaWYgKChpZWVlLT5pd19tb2RlID09IElXX01PREVfSU5GUkEpICAmJiAoaWVlZS0+c3RhX3NsZWVwID09IDEpCisJCSYmIChpZWVlLT5wb2xsaW5nKSkgeworCQlpZiAoV0xBTl9GQ19NT1JFX0RBVEEoZmMpKSB7CisJCQkvKiBtb3JlIGRhdGEgYml0IGlzIHNldCwgbGV0J3MgcmVxdWVzdCBhIG5ldyBmcmFtZSBmcm9tIHRoZSBBUCAqLworCQkJaWVlZTgwMjExX3N0YV9wc19zZW5kX3BzcG9sbF9mcmFtZShpZWVlKTsKKwkJfSBlbHNlIHsKKwkJCWllZWUtPnBvbGxpbmcgPSAgZmFsc2U7CisJCX0KKwl9CisjZW5kaWYKKworCWllZWUtPm5lZWRfc3dfZW5jID0gMDsKKworICAgICAgICBpZigoIXJ4X3N0YXRzLT5EZWNyeXB0ZWQpKXsKKyAgICAgICAgICAgICAgICBpZWVlLT5uZWVkX3N3X2VuYyA9IDE7CisgICAgICAgIH0KKwogCS8qIHNrYjogaGRyICsgKHBvc3NpYmx5IGZyYWdtZW50ZWQsIHBvc3NpYmx5IGVuY3J5cHRlZCkgcGF5bG9hZCAqLwogCiAJaWYgKGllZWUtPmhvc3RfZGVjcnlwdCAmJiAoZmMgJiBJRUVFODAyMTFfRkNUTF9XRVApICYmCkBAIC0xMjk2LDYgKzEzMzEsOSBAQAogCWllZWUtPkxpbmtEZXRlY3RJbmZvLk51bVJ4T2tJblBlcmlvZCsrOwogCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwlpZigoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKSAmJiAoIWlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKSkKKwkJdW5pY2FzdF9wYWNrZXQgPSB0cnVlOworCiAJaWYgKGNyeXB0ICYmICEoZmMgJiBJRUVFODAyMTFfRkNUTF9XRVApICYmICFpZWVlLT5vcGVuX3dlcCkgewogCQlpZiAoLyppZWVlLT5pZWVlODAyXzF4ICYmKi8KIAkJICAgIGllZWU4MDIxMV9pc19lYXBvbF9mcmFtZShpZWVlLCBza2IsIGhkcmxlbikpIHsKQEAgLTEzMTEsOCArMTM0OSw4IEBACiAJCX0gZWxzZSB7CiAJCQlJRUVFODAyMTFfREVCVUdfRFJPUCgKIAkJCQkiZW5jcnlwdGlvbiBjb25maWd1cmVkLCBidXQgUlggIgotCQkJCSJmcmFtZSBub3QgZW5jcnlwdGVkIChTQT0iIE1BQ19GTVQgIilcbiIsCi0JCQkJTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCQkJImZyYW1lIG5vdCBlbmNyeXB0ZWQgKFNBPSVwTSlcbiIsCisJCQkJaGRyLT5hZGRyMik7CiAJCQlnb3RvIHJ4X2Ryb3BwZWQ7CiAJCX0KIAl9CkBAIC0xMzMxLDkgKzEzNjksOSBAQAogCSAgICAhaWVlZTgwMjExX2lzX2VhcG9sX2ZyYW1lKGllZWUsIHNrYiwgaGRybGVuKSkgewogCQlJRUVFODAyMTFfREVCVUdfRFJPUCgKIAkJCSJkcm9wcGVkIHVuZW5jcnlwdGVkIFJYIGRhdGEgIgotCQkJImZyYW1lIGZyb20gIiBNQUNfRk1UCisJCQkiZnJhbWUgZnJvbSAlcE0iCiAJCQkiIChkcm9wX3VuZW5jcnlwdGVkPTEpXG4iLAotCQkJTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCQloZHItPmFkZHIyKTsKIAkJZ290byByeF9kcm9wcGVkOwogCX0KIC8qCkBAIC0xMzY3LDcgKzE0MDUsNyBAQAogCX0KIAkvKiB0byBwYXJzZSBhbXNkdSBwYWNrZXRzICovCiAJLyogcW9zIGRhdGEgcGFja2V0cyAmIHJlc2VydmVkIGJpdCBpcyAxICovCi0JaWYocGFyc2Vfc3ViZnJhbWUoc2tiLHJ4X3N0YXRzLHJ4YixzcmMsZHN0KSA9PSAwKSB7CisJaWYocGFyc2Vfc3ViZnJhbWUoaWVlZSwgc2tiLHJ4X3N0YXRzLHJ4YixzcmMsZHN0KSA9PSAwKSB7CiAJCS8qIG9ubHkgdG8gZnJlZSByeGIsIGFuZCBub3Qgc3VibWl0IHRoZSBwYWNrZXRzIHRvIHVwcGVyIGxheWVyICovCiAJCWZvcihpID0wOyBpIDwgcnhiLT5ucl9zdWJmcmFtZXM7IGkrKykgewogCQkJZGV2X2tmcmVlX3NrYihyeGItPnN1YmZyYW1lc1tpXSk7CkBAIC0xMzc3LDYgKzE0MTUsMzIgQEAKIAkJZ290byByeF9kcm9wcGVkOwogCX0KIAorI2lmZGVmIEVOQUJMRV9MUFMKKwkJaWYodW5pY2FzdF9wYWNrZXQpCisJCXsKKwkJCWlmICh0eXBlID09IElFRUU4MDIxMV9GVFlQRV9EQVRBKQorCQkJeworCisJCQkJaWYoaWVlZS0+YklzQWdncmVnYXRlRnJhbWUpCisJCQkJCWllZWUtPkxpbmtEZXRlY3RJbmZvLk51bVJ4VW5pY2FzdE9rSW5QZXJpb2QrPXJ4Yi0+bnJfc3ViZnJhbWVzOworCQkJCWVsc2UKKwkJCQkJaWVlZS0+TGlua0RldGVjdEluZm8uTnVtUnhVbmljYXN0T2tJblBlcmlvZCsrOworCisJCQkJLy8gMjAwOS4wMy4wMyBMZWF2ZSBEQyBtb2RlIGltbWVkaWF0ZWx5IHdoZW4gZGV0ZWN0IGhpZ2ggdHJhZmZpYworCQkJCS8vIERiZ1ByaW50KCJlbmRpbmcgU2VxICVkXG4iLCBGcmFtZV9TZXFOdW0ocGR1T1MpKTsKKwkJCQlpZigoaWVlZS0+c3RhdGUgPT0gSUVFRTgwMjExX0xJTktFRCkgLyomJiAhTWdudEluaXRBZGFwdGVySW5Qcm9ncmVzcyhwTWdudEluZm8pKi8pCisJCQkJeworCQkJCQlpZigJKChpZWVlLT5MaW5rRGV0ZWN0SW5mby5OdW1SeFVuaWNhc3RPa0luUGVyaW9kICtpZWVlLT5MaW5rRGV0ZWN0SW5mby5OdW1UeE9rSW5QZXJpb2QpID4gOCApIHx8CisJCQkJCQkoaWVlZS0+TGlua0RldGVjdEluZm8uTnVtUnhVbmljYXN0T2tJblBlcmlvZCA+IDIpICkKKwkJCQkJeworCQkJCQkJaWYoaWVlZS0+TGVpc3VyZVBTTGVhdmUpCisJCQkJCQkJaWVlZS0+TGVpc3VyZVBTTGVhdmUoZGV2KTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorI2VuZGlmCisKIAlpZWVlLT5sYXN0X3J4X3BzX3RpbWUgPSBqaWZmaWVzOwogLy9hZGRlZCBieSBhbXkgZm9yIHJlb3JkZXIKIAlpZihpZWVlLT5wSFRJbmZvLT5iQ3VyUnhSZW9yZGVyRW5hYmxlID09IGZhbHNlIHx8cFRTID09IE5VTEwpewpAQCAtMjAxMywxMiArMjA3NywyMiBAQAogCQkJCWluZm9fZWxlbWVudC0+ZGF0YVsxXSA9PSAweDEzICYmCiAJCQkJaW5mb19lbGVtZW50LT5kYXRhWzJdID09IDB4NzQpKQogCQkJewotCQkJCXByaW50aygiPT09PT09PT0+JXMoKTogYXRocm9zIEFQIGlzIGV4aXN0XG4iLF9fRlVOQ1RJT05fXyk7CisJCQkJLy9wcmludGsoIj09PT09PT09PiVzKCk6IGF0aHJvcyBBUCBpcyBleGlzdFxuIixfX0ZVTkNUSU9OX18pOwogCQkJCW5ldHdvcmstPmF0aGVyb3NfY2FwX2V4aXN0ID0gdHJ1ZTsKIAkJCX0KIAkJCWVsc2UKIAkJCQluZXR3b3JrLT5hdGhlcm9zX2NhcF9leGlzdCA9IGZhbHNlOwogCisJCQlpZiAoKGluZm9fZWxlbWVudC0+bGVuID49IDMgJiYKKwkJCQkJCWluZm9fZWxlbWVudC0+ZGF0YVswXSA9PSAweDAwICYmCisJCQkJCQlpbmZvX2VsZW1lbnQtPmRhdGFbMV0gPT0gMHg1MCAmJgorCQkJCQkJaW5mb19lbGVtZW50LT5kYXRhWzJdID09IDB4NDMpICkKKwkJCXsKKwkJCQluZXR3b3JrLT5tYXJ2ZWxsX2NhcF9leGlzdCA9IHRydWU7CisJCQkJLy9wcmludGsoIj09PT09PT09PiVzKCk6IG1hcnZlbCBBUCBpcyBleGlzdFxuIixfX0ZVTkNUSU9OX18pOworCQkJfQorCisKIAkJCWlmKGluZm9fZWxlbWVudC0+bGVuID49IDMgJiYKIAkJCQlpbmZvX2VsZW1lbnQtPmRhdGFbMF0gPT0gMHgwMCAmJgogCQkJCWluZm9fZWxlbWVudC0+ZGF0YVsxXSA9PSAweDQwICYmCkBAIC0yMjE5LDcgKzIyOTMsOCBAQAogCX0KIAogCWlmKCFuZXR3b3JrLT5hdGhlcm9zX2NhcF9leGlzdCAmJiAhbmV0d29yay0+YnJvYWRjb21fY2FwX2V4aXN0ICYmCi0JCSFuZXR3b3JrLT5jaXNjb19jYXBfZXhpc3QgJiYgIW5ldHdvcmstPnJhbGlua19jYXBfZXhpc3QgJiYgIW5ldHdvcmstPmJzc2h0LmJkUlQyUlRBZ2dyZWdhdGlvbikKKwkJIW5ldHdvcmstPmNpc2NvX2NhcF9leGlzdCAmJiAhbmV0d29yay0+cmFsaW5rX2NhcF9leGlzdCAmJiAhbmV0d29yay0+YnNzaHQuYmRSVDJSVEFnZ3JlZ2F0aW9uICYmCisJCSFuZXR3b3JrLT5tYXJ2ZWxsX2NhcF9leGlzdCkKIAl7CiAJCW5ldHdvcmstPnVua25vd25fY2FwX2V4aXN0ID0gdHJ1ZTsKIAl9CkBAIC0yMzMzLDYgKzI0MDgsNyBAQAogICAgICAgICBuZXR3b3JrLT5icm9hZGNvbV9jYXBfZXhpc3QgPSBmYWxzZTsKIAluZXR3b3JrLT5yYWxpbmtfY2FwX2V4aXN0ID0gZmFsc2U7CiAJbmV0d29yay0+YXRoZXJvc19jYXBfZXhpc3QgPSBmYWxzZTsKKwluZXR3b3JrLT5tYXJ2ZWxsX2NhcF9leGlzdCA9IGZhbHNlOwogCW5ldHdvcmstPmNpc2NvX2NhcF9leGlzdCA9IGZhbHNlOwogCW5ldHdvcmstPnVua25vd25fY2FwX2V4aXN0ID0gZmFsc2U7CiAjaWZkZWYgVEhPTUFTX1RVUkJPCkBAIC0yMzY5LDExICsyNDQ1LDExIEBACiAJfQogCiAJaWYgKG5ldHdvcmstPm1vZGUgPT0gMCkgewotCQlJRUVFODAyMTFfREVCVUdfU0NBTigiRmlsdGVyZWQgb3V0ICclcyAoIiBNQUNfRk1UICIpJyAiCisJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJGaWx0ZXJlZCBvdXQgJyVzICglcE0pJyAiCiAJCQkJICAgICAibmV0d29yay5cbiIsCiAJCQkJICAgICBlc2NhcGVfZXNzaWQobmV0d29yay0+c3NpZCwKIAkJCQkJCSAgbmV0d29yay0+c3NpZF9sZW4pLAotCQkJCSAgICAgTUFDX0FSRyhuZXR3b3JrLT5ic3NpZCkpOworCQkJCSAgICAgbmV0d29yay0+YnNzaWQpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTI0NjMsNiArMjUzOSw3IEBACiAJZHN0LT5icm9hZGNvbV9jYXBfZXhpc3QgPSBzcmMtPmJyb2FkY29tX2NhcF9leGlzdDsKIAlkc3QtPnJhbGlua19jYXBfZXhpc3QgPSBzcmMtPnJhbGlua19jYXBfZXhpc3Q7CiAJZHN0LT5hdGhlcm9zX2NhcF9leGlzdCA9IHNyYy0+YXRoZXJvc19jYXBfZXhpc3Q7CisJZHN0LT5tYXJ2ZWxsX2NhcF9leGlzdCA9IHNyYy0+bWFydmVsbF9jYXBfZXhpc3Q7CiAJZHN0LT5jaXNjb19jYXBfZXhpc3QgPSBzcmMtPmNpc2NvX2NhcF9leGlzdDsKIAlkc3QtPnVua25vd25fY2FwX2V4aXN0ID0gc3JjLT51bmtub3duX2NhcF9leGlzdDsKIAltZW1jcHkoZHN0LT53cGFfaWUsIHNyYy0+d3BhX2llLCBzcmMtPndwYV9pZV9sZW4pOwpAQCAtMjU1Nyw5ICsyNjM0LDkgQEAKIAogCW1lbXNldCgmbmV0d29yaywgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbmV0d29yaykpOwogCUlFRUU4MDIxMV9ERUJVR19TQ0FOKAotCQkiJyVzJyAoIiBNQUNfRk1UICIpOiAlYyVjJWMlYyAlYyVjJWMlYy0lYyVjJWMlYyAlYyVjJWMlY1xuIiwKKwkJIiclcycgKCVwTSk6ICVjJWMlYyVjICVjJWMlYyVjLSVjJWMlYyVjICVjJWMlYyVjXG4iLAogCQllc2NhcGVfZXNzaWQoaW5mb19lbGVtZW50LT5kYXRhLCBpbmZvX2VsZW1lbnQtPmxlbiksCi0JCU1BQ19BUkcoYmVhY29uLT5oZWFkZXIuYWRkcjMpLAorCQliZWFjb24tPmhlYWRlci5hZGRyMywKIAkJKGJlYWNvbi0+Y2FwYWJpbGl0eSAmICgxPDwweGYpKSA/ICcxJyA6ICcwJywKIAkJKGJlYWNvbi0+Y2FwYWJpbGl0eSAmICgxPDwweGUpKSA/ICcxJyA6ICcwJywKIAkJKGJlYWNvbi0+Y2FwYWJpbGl0eSAmICgxPDwweGQpKSA/ICcxJyA6ICcwJywKQEAgLTI1NzgsMTAgKzI2NTUsMTAgQEAKIAkJKGJlYWNvbi0+Y2FwYWJpbGl0eSAmICgxPDwweDApKSA/ICcxJyA6ICcwJyk7CiAKIAlpZiAoaWVlZTgwMjExX25ldHdvcmtfaW5pdChpZWVlLCBiZWFjb24sICZuZXR3b3JrLCBzdGF0cykpIHsKLQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkRyb3BwZWQgJyVzJyAoIiBNQUNfRk1UICIpIHZpYSAlcy5cbiIsCisJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJEcm9wcGVkICclcycgKCVwTSkgdmlhICVzLlxuIiwKIAkJCQkgICAgIGVzY2FwZV9lc3NpZChpbmZvX2VsZW1lbnQtPmRhdGEsCiAJCQkJCQkgIGluZm9fZWxlbWVudC0+bGVuKSwKLQkJCQkgICAgIE1BQ19BUkcoYmVhY29uLT5oZWFkZXIuYWRkcjMpLAorCQkJCSAgICAgYmVhY29uLT5oZWFkZXIuYWRkcjMsCiAJCQkJICAgICBXTEFOX0ZDX0dFVF9TVFlQRShiZWFjb24tPmhlYWRlci5mcmFtZV9jdGwpID09CiAJCQkJICAgICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCA/CiAJCQkJICAgICAiUFJPQkUgUkVTUE9OU0UiIDogIkJFQUNPTiIpOwpAQCAtMjY5MiwxMSArMjc2OSwxMSBAQAogCQkJLyogSWYgdGhlcmUgYXJlIG5vIG1vcmUgc2xvdHMsIGV4cGlyZSB0aGUgb2xkZXN0ICovCiAJCQlsaXN0X2RlbCgmb2xkZXN0LT5saXN0KTsKIAkJCXRhcmdldCA9IG9sZGVzdDsKLQkJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJFeHBpcmVkICclcycgKCIgTUFDX0ZNVCAiKSBmcm9tICIKKwkJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJFeHBpcmVkICclcycgKCVwTSkgZnJvbSAiCiAJCQkJCSAgICAgIm5ldHdvcmsgbGlzdC5cbiIsCiAJCQkJCSAgICAgZXNjYXBlX2Vzc2lkKHRhcmdldC0+c3NpZCwKIAkJCQkJCQkgIHRhcmdldC0+c3NpZF9sZW4pLAotCQkJCQkgICAgIE1BQ19BUkcodGFyZ2V0LT5ic3NpZCkpOworCQkJCQkgICAgIHRhcmdldC0+YnNzaWQpOwogCQl9IGVsc2UgewogCQkJLyogT3RoZXJ3aXNlIGp1c3QgcHVsbCBmcm9tIHRoZSBmcmVlIGxpc3QgKi8KIAkJCXRhcmdldCA9IGxpc3RfZW50cnkoaWVlZS0+bmV0d29ya19mcmVlX2xpc3QubmV4dCwKQEAgLTI3MDYsMTAgKzI3ODMsMTAgQEAKIAogCiAjaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRwotCQlJRUVFODAyMTFfREVCVUdfU0NBTigiQWRkaW5nICclcycgKCIgTUFDX0ZNVCAiKSB2aWEgJXMuXG4iLAorCQlJRUVFODAyMTFfREVCVUdfU0NBTigiQWRkaW5nICclcycgKCVwTSkgdmlhICVzLlxuIiwKIAkJCQkgICAgIGVzY2FwZV9lc3NpZChuZXR3b3JrLnNzaWQsCiAJCQkJCQkgIG5ldHdvcmsuc3NpZF9sZW4pLAotCQkJCSAgICAgTUFDX0FSRyhuZXR3b3JrLmJzc2lkKSwKKwkJCQkgICAgIG5ldHdvcmsuYnNzaWQsCiAJCQkJICAgICBXTEFOX0ZDX0dFVF9TVFlQRShiZWFjb24tPmhlYWRlci5mcmFtZV9jdGwpID09CiAJCQkJICAgICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCA/CiAJCQkJICAgICAiUFJPQkUgUkVTUE9OU0UiIDogIkJFQUNPTiIpOwpAQCAtMjcxOSwxMCArMjc5NiwxMCBAQAogCQlpZihpZWVlLT5zb2Z0bWFjX2ZlYXR1cmVzICYgSUVFRV9TT0ZUTUFDX0FTU09DSUFURSkKIAkJCWllZWU4MDIxMV9zb2Z0bWFjX25ld19uZXQoaWVlZSwmbmV0d29yayk7CiAJfSBlbHNlIHsKLQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIlVwZGF0aW5nICclcycgKCIgTUFDX0ZNVCAiKSB2aWEgJXMuXG4iLAorCQlJRUVFODAyMTFfREVCVUdfU0NBTigiVXBkYXRpbmcgJyVzJyAoJXBNKSB2aWEgJXMuXG4iLAogCQkJCSAgICAgZXNjYXBlX2Vzc2lkKHRhcmdldC0+c3NpZCwKIAkJCQkJCSAgdGFyZ2V0LT5zc2lkX2xlbiksCi0JCQkJICAgICBNQUNfQVJHKHRhcmdldC0+YnNzaWQpLAorCQkJCSAgICAgdGFyZ2V0LT5ic3NpZCwKIAkJCQkgICAgIFdMQU5fRkNfR0VUX1NUWVBFKGJlYWNvbi0+aGVhZGVyLmZyYW1lX2N0bCkgPT0KIAkJCQkgICAgIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQID8KIAkJCQkgICAgICJQUk9CRSBSRVNQT05TRSIgOiAiQkVBQ09OIik7CkBAIC0yNzYxLDEyICsyODM4LDE0IEBACiAJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZWFkZXIsCiAJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKQogeworI2lmIDAKIAlpZihpZWVlLT5zdGFfc2xlZXAgfHwgKGllZWUtPnBzICE9IElFRUU4MDIxMV9QU19ESVNBQkxFRCAmJgogCQkJCWllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9JTkZSQSAmJgogCQkJCWllZWUtPnN0YXRlID09IElFRUU4MDIxMV9MSU5LRUQpKQogCXsKIAkJdGFza2xldF9zY2hlZHVsZSgmaWVlZS0+cHNfdGFzayk7CiAJfQorI2VuZGlmCiAKIAlpZihXTEFOX0ZDX0dFVF9TVFlQRShoZWFkZXItPmZyYW1lX2N0bCkgIT0gSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1AgJiYKIAkJV0xBTl9GQ19HRVRfU1RZUEUoaGVhZGVyLT5mcmFtZV9jdGwpICE9IElFRUU4MDIxMV9TVFlQRV9CRUFDT04pCkBAIC0yNzgwLDYgKzI4NTksMTUgQEAKIAkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkJlYWNvblxuIik7CiAJCWllZWU4MDIxMV9wcm9jZXNzX3Byb2JlX3Jlc3BvbnNlKAogCQkJaWVlZSwgKHN0cnVjdCBpZWVlODAyMTFfcHJvYmVfcmVzcG9uc2UgKiloZWFkZXIsIHN0YXRzKTsKKworCQkvL3ByaW50aygiLS0tLS0tLS0tLS0+JXMoKVxuIiwgX19mdW5jX18pOworCQlpZihpZWVlLT5zdGFfc2xlZXAgfHwgKGllZWUtPnBzICE9IElFRUU4MDIxMV9QU19ESVNBQkxFRCAmJgorCQkJCQlpZWVlLT5pd19tb2RlID09IElXX01PREVfSU5GUkEgJiYKKwkJCQkJaWVlZS0+c3RhdGUgPT0gSUVFRTgwMjExX0xJTktFRCkpCisJCXsKKwkJCXRhc2tsZXRfc2NoZWR1bGUoJmllZWUtPnBzX3Rhc2spOworCQl9CisKIAkJYnJlYWs7CiAKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCmluZGV4IDZkMWRkZWMuLmVhOTZjNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKQEAgLTY0Niw3ICs2NDYsNyBAQAogdm9pZCBpZWVlODAyMTFfc3RhcnRfc2VuZF9iZWFjb25zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQogewogCWlmKGllZWUtPnN0YXJ0X3NlbmRfYmVhY29ucykKLQkJaWVlZS0+c3RhcnRfc2VuZF9iZWFjb25zKGllZWUtPmRldixpZWVlLT5iYXNpY19yYXRlKTsKKwkJaWVlZS0+c3RhcnRfc2VuZF9iZWFjb25zKGllZWUtPmRldik7CiAJaWYoaWVlZS0+c29mdG1hY19mZWF0dXJlcyAmIElFRUVfU09GVE1BQ19CRUFDT05TKQogCQlpZWVlODAyMTFfYmVhY29uc19zdGFydChpZWVlKTsKIH0KQEAgLTY4Niw2ICs2ODYsMTEgQEAKIC8qIGNhbGxlZCB3aXRoIGllZWUtPmxvY2sgaGVsZCAqLwogdm9pZCBpZWVlODAyMTFfcnRsX3N0YXJ0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CisjaWZkZWYgRU5BQkxFX0lQUworCWlmKGllZWUtPmllZWU4MDIxMV9pcHNfbGVhdmVfd3EgIT0gTlVMTCkKKwkJaWVlZS0+aWVlZTgwMjExX2lwc19sZWF2ZV93cShpZWVlLT5kZXYpOworI2VuZGlmCisKICNpZmRlZiBFTkFCTEVfRE9UMTFECiAJaWYoSVNfRE9UMTFEX0VOQUJMRShpZWVlKSApCiAJewpAQCAtMTA5Myw2ICsxMDk4LDQwIEBACiAKIH0KIAorc3RydWN0IHNrX2J1ZmYqIGllZWU4MDIxMV9wc3BvbGxfZnVuYyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfcHNwb2xsX2hkciogaGRyOworCisjaWZkZWYgVVNCX1VTRV9BTElHTk1FTlQKKyAgICAgICAgdTMyIFRtcGFkZHI9MDsKKyAgICAgICAgaW50IGFsaWdubWVudD0wOworICAgICAgICBza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3BzcG9sbF9oZHIpICsgaWVlZS0+dHhfaGVhZHJvb20gKyBVU0JfNTEyQl9BTElHTk1FTlRfU0laRSk7CisjZWxzZQorCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcHNwb2xsX2hkcikraWVlZS0+dHhfaGVhZHJvb20pOworI2VuZGlmCisJaWYgKCFza2IpCisJCXJldHVybiBOVUxMOworCisjaWZkZWYgVVNCX1VTRV9BTElHTk1FTlQKKyAgICAgICAgVG1wYWRkciA9ICh1MzIpc2tiLT5kYXRhOworICAgICAgICBhbGlnbm1lbnQgPSBUbXBhZGRyICYgMHgxZmY7CisgICAgICAgIHNrYl9yZXNlcnZlKHNrYiwoVVNCXzUxMkJfQUxJR05NRU5UX1NJWkUgLSBhbGlnbm1lbnQpKTsKKyNlbmRpZgorCXNrYl9yZXNlcnZlKHNrYiwgaWVlZS0+dHhfaGVhZHJvb20pOworCisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfcHNwb2xsX2hkciopc2tiX3B1dChza2Isc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcHNwb2xsX2hkcikpOworCisJbWVtY3B5KGhkci0+YnNzaWQsIGllZWUtPmN1cnJlbnRfbmV0d29yay5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShoZHItPnRhLCBpZWVlLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisKKwloZHItPmFpZCA9IGNwdV90b19sZTE2KGllZWUtPmFzc29jX2lkIHwgMHhjMDAwKTsKKwloZHItPmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9DVEwgfElFRUU4MDIxMV9TVFlQRV9QU1BPTEwgfCBJRUVFODAyMTFfRkNUTF9QTSk7CisKKwlyZXR1cm4gc2tiOworCit9CisKIAogdm9pZCBpZWVlODAyMTFfcmVzcF90b19hc3NvY19ycShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTgqIGRlc3QpCiB7CkBAIC0xNTgyLDYgKzE2MjEsMTEgQEAKIHsKICNlbmRpZgogCWllZWUtPnN5bmNfc2Nhbl9odXJyeXVwID0gMTsKKyNpZmRlZiBFTkFCTEVfSVBTCisJaWYoaWVlZS0+aWVlZTgwMjExX2lwc19sZWF2ZSAhPSBOVUxMKQorICAgICAgICAJaWVlZS0+aWVlZTgwMjExX2lwc19sZWF2ZShpZWVlLT5kZXYpOworI2VuZGlmCisKIAlkb3duKCZpZWVlLT53eF9zZW0pOwogCiAJaWYgKGllZWUtPmRhdGFfaGFyZF9zdG9wKQpAQCAtMTU5Miw2ICsxNjM2LDE3IEBACiAJLy9pZWVlLT5zZXRfY2hhbihpZWVlLT5kZXYsIGllZWUtPmN1cnJlbnRfbmV0d29yay5jaGFubmVsKTsKIAlIVFNldENvbm5lY3RCd01vZGUoaWVlZSwgSFRfQ0hBTk5FTF9XSURUSF8yMCwgSFRfRVhUQ0hOTF9PRkZTRVRfTk9fRVhUKTsKIAorI2lmZGVmIEVOQUJMRV9JUFMKKwlpZihpZWVlLT5lUkZQb3dlclN0YXRlID09IGVSZk9mZikKKwl7CisJCWlmKGllZWUtPmllZWU4MDIxMV9pcHNfbGVhdmVfd3EgIT0gTlVMTCkKKwkJCWllZWUtPmllZWU4MDIxMV9pcHNfbGVhdmVfd3EoaWVlZS0+ZGV2KTsKKworCQl1cCgmaWVlZS0+d3hfc2VtKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCiAJaWVlZS0+YXNzb2NpYXRlX3NlcSA9IDE7CiAJaWVlZTgwMjExX2Fzc29jaWF0ZV9zdGVwMShpZWVlKTsKIApAQCAtMTg5Nyw3ICsxOTUyLDcgQEAKIAkJaWVlZTgwMjExX3Jlc3BfdG9fYXNzb2NfcnEoaWVlZSwgZGVzdCk7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyJOZXcgY2xpZW50IGFzc29jaWF0ZWQ6ICJNQUNfRk1UIlxuIiwgTUFDX0FSRyhkZXN0KSk7CisJcHJpbnRrKEtFUk5fSU5GTyJOZXcgY2xpZW50IGFzc29jaWF0ZWQ6ICVwTVxuIiwgZGVzdCk7CiAJLy9GSVhNRQogCSNpZiAwCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmllZWUtPmxvY2ssZmxhZ3MpOwpAQCAtMTkxOCw0MyArMTk3Myw5MiBAQAogCiB9CiAKK3ZvaWQgaWVlZTgwMjExX3N0YV9wc19zZW5kX3BzcG9sbF9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKK3sKKworCXN0cnVjdCBza19idWZmICpidWYgPSBpZWVlODAyMTFfcHNwb2xsX2Z1bmMoaWVlZSk7CisKKwlpZiAoYnVmKQorCQlzb2Z0bWFjX3BzX21nbXRfeG1pdChidWYsIGllZWUpOworCit9CiAKIHNob3J0IGllZWU4MDIxMV9zdGFfcHNfc2xlZXAoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHUzMiAqdGltZV9oLCB1MzIgKnRpbWVfbCkKIHsKIAlpbnQgdGltZW91dCA9IGllZWUtPnBzX3RpbWVvdXQ7CiAJdTggZHRpbTsKLQkvKmlmKGllZWUtPnBzID09IElFRUU4MDIxMV9QU19ESVNBQkxFRCB8fAotCQlpZWVlLT5pd19tb2RlICE9IElXX01PREVfSU5GUkEgfHwKLQkJaWVlZS0+c3RhdGUgIT0gSUVFRTgwMjExX0xJTktFRCkKKwlQUlRfUE9XRVJfU0FWRV9DT05UUk9MCXBQU0MgPSAoUFJUX1BPV0VSX1NBVkVfQ09OVFJPTCkoJihpZWVlLT5Qb3dlclNhdmVDb250cm9sKSk7CiAKKwlpZihpZWVlLT5MUFNEZWxheUNudCkKKwl7CisJCS8vcHJpbnRrKCI9PT09PT09PT09PT09PT0+RGVsYXkgZW50ZXIgTFBTIGZvciBESENQIGFuZCBBUlAgcGFja2V0cy4uLlxuIik7CisJCWllZWUtPkxQU0RlbGF5Q250IC0tOwogCQlyZXR1cm4gMDsKLQkqLworCX0KKwogCWR0aW0gPSBpZWVlLT5jdXJyZW50X25ldHdvcmsuZHRpbV9kYXRhOwotCS8vcHJpbnRrKCJEVElNXG4iKTsKKy8vCXByaW50aygiJXMoKTpEVElNOiVkXG4iLF9fRlVOQ1RJT05fXyxkdGltKTsKIAlpZighKGR0aW0gJiBJRUVFODAyMTFfRFRJTV9WQUxJRCkpCiAJCXJldHVybiAwOwogCXRpbWVvdXQgPSBpZWVlLT5jdXJyZW50X25ldHdvcmsuYmVhY29uX2ludGVydmFsOyAvL3Nob3VsZCB3ZSB1c2UgcHNfdGltZW91dCB2YWx1ZSBvciBiZWFjb25faW50ZXJ2YWwKIAkvL3ByaW50aygiVkFMSURcbiIpOwogCWllZWUtPmN1cnJlbnRfbmV0d29yay5kdGltX2RhdGEgPSBJRUVFODAyMTFfRFRJTV9JTlZBTElEOwotCi0JaWYoZHRpbSAmICgoSUVFRTgwMjExX0RUSU1fVUNBU1QgfCBJRUVFODAyMTFfRFRJTV9NQkNBU1QpJiBpZWVlLT5wcykpCisJLyogdGhlcmUncyBubyBuZWVkIHRvIG5vZml0eSBBUCB0aGF0IEkgZmluZCB5b3UgYnVmZmVyZWQgd2l0aCBicm9hZGNhc3QgcGFja2V0ICovCisJaWYoZHRpbSAmIChJRUVFODAyMTFfRFRJTV9VQ0FTVCAmIGllZWUtPnBzKSkKIAkJcmV0dXJuIDI7CiAKLQlpZighdGltZV9hZnRlcihqaWZmaWVzLCBpZWVlLT5kZXYtPnRyYW5zX3N0YXJ0ICsgTVNFQ1ModGltZW91dCkpKQorCWlmKCF0aW1lX2FmdGVyKGppZmZpZXMsIGllZWUtPmRldi0+dHJhbnNfc3RhcnQgKyBNU0VDUyh0aW1lb3V0KSkpeworLy8JCXByaW50aygiJXMoKToxMTFPaCBPaCAsaXQgaXMgbm90IHRpbWUgb3V0IHJldHVybiAwXG4iLF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAwOwotCi0JaWYoIXRpbWVfYWZ0ZXIoamlmZmllcywgaWVlZS0+bGFzdF9yeF9wc190aW1lICsgTVNFQ1ModGltZW91dCkpKQorCX0KKwlpZighdGltZV9hZnRlcihqaWZmaWVzLCBpZWVlLT5sYXN0X3J4X3BzX3RpbWUgKyBNU0VDUyh0aW1lb3V0KSkpeworLy8JCXByaW50aygiJXMoKToyMjJPaCBPaCAsaXQgaXMgbm90IHRpbWUgb3V0IHJldHVybiAwXG4iLF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAwOwotCisJfQogCWlmKChpZWVlLT5zb2Z0bWFjX2ZlYXR1cmVzICYgSUVFRV9TT0ZUTUFDX1NJTkdMRV9RVUVVRSApICYmCiAJCShpZWVlLT5tZ210X3F1ZXVlX3RhaWwgIT0gaWVlZS0+bWdtdF9xdWV1ZV9oZWFkKSkKIAkJcmV0dXJuIDA7CiAKIAlpZih0aW1lX2wpeworCQlpZihpZWVlLT5iQXdha2VQa3RTZW50ID09IHRydWUpIHsKKwkJCXBQU0MtPkxQU0F3YWtlSW50dmwgPSAxOy8vdHggd2FrZSBvbmUgYmVhY29uCisJCX0gZWxzZSB7CisJCQl1OAkJTWF4UGVyaW9kID0gMTsKKworCQkJaWYocFBTQy0+TFBTQXdha2VJbnR2bCA9PSAwKQorCQkJCXBQU0MtPkxQU0F3YWtlSW50dmwgPSAxOworCQkJLy9wTmRpc0NvbW1vbi0+UmVnTFBTTWF4SW50dmwgLy8vIDB4MCAtIGVGYXN0UHMsIDB4RkYgLURUSU0sIDB4Tk4gLSAweE5OICogQmVhY29uSW50dmwKKwkJCWlmKHBQU0MtPlJlZ01heExQU0F3YWtlSW50dmwgPT0gMCkgLy8gRGVmYXVsdCAoMHgwIC0gZUZhc3RQcywgMHhGRiAtRFRJTSwgMHhOTiAtIDB4Tk4gKiBCZWFjb25JbnR2bCkKKwkJCQlNYXhQZXJpb2QgPSAxOyAvLyAxIEJlYWNvbiBpbnRlcnZhbAorCQkJZWxzZSBpZihwUFNDLT5SZWdNYXhMUFNBd2FrZUludHZsID09IDB4RkYpIC8vIERUSU0KKwkJCQlNYXhQZXJpb2QgPSBpZWVlLT5jdXJyZW50X25ldHdvcmsuZHRpbV9wZXJpb2Q7CisJCQllbHNlCisJCQkJTWF4UGVyaW9kID0gcFBTQy0+UmVnTWF4TFBTQXdha2VJbnR2bDsKKwkJCXBQU0MtPkxQU0F3YWtlSW50dmwgPSAocFBTQy0+TFBTQXdha2VJbnR2bCA+PSBNYXhQZXJpb2QpID8gTWF4UGVyaW9kIDogKHBQU0MtPkxQU0F3YWtlSW50dmwgKyAxKTsKKwkJfQorCQl7CisJCQl1OCBMUFNBd2FrZUludHZsX3RtcCA9IDA7CisJCQl1OCBwZXJpb2QgPSBpZWVlLT5jdXJyZW50X25ldHdvcmsuZHRpbV9wZXJpb2Q7CisJCQl1OCBjb3VudCA9IGllZWUtPmN1cnJlbnRfbmV0d29yay50aW0udGltX2NvdW50OworCQkJaWYoY291bnQgPT0gMCApIHsKKwkJCQlpZihwUFNDLT5MUFNBd2FrZUludHZsID4gcGVyaW9kKQorCQkJCQlMUFNBd2FrZUludHZsX3RtcCA9IHBlcmlvZCArIChwUFNDLT5MUFNBd2FrZUludHZsIC0gcGVyaW9kKSAtKChwUFNDLT5MUFNBd2FrZUludHZsLXBlcmlvZCklcGVyaW9kKTsKKwkJCQllbHNlCisJCQkJCUxQU0F3YWtlSW50dmxfdG1wID0gcFBTQy0+TFBTQXdha2VJbnR2bDsKKworCQkJfSBlbHNlIHsKKwkJCQlpZihwUFNDLT5MUFNBd2FrZUludHZsID4gaWVlZS0+Y3VycmVudF9uZXR3b3JrLnRpbS50aW1fY291bnQpCisJCQkJCUxQU0F3YWtlSW50dmxfdG1wID0gY291bnQgKyAocFBTQy0+TFBTQXdha2VJbnR2bCAtIGNvdW50KSAtKChwUFNDLT5MUFNBd2FrZUludHZsLWNvdW50KSVwZXJpb2QpOworCQkJCWVsc2UKKwkJCQkJTFBTQXdha2VJbnR2bF90bXAgPSBwUFNDLT5MUFNBd2FrZUludHZsOy8vaWVlZS0+Y3VycmVudF9uZXR3b3JrLnRpbS50aW1fY291bnQ7Ly9wUFNDLT5MUFNBd2FrZUludHZsOworCQkJfQorCQkJLy9wcmludGsoIj09PT09PT09PT4lcygpYXNzb2NfaWQ6JWQoJSN4KSxiQXdha2VQa3RTZW50OiVkLERUSU06JWQsIHNsZWVwIGludGVydmFsOiVkLCBMUFNBd2FrZUludHZsX3RtcDolZCwgY291bnQ6JWRcbiIsX19mdW5jX18saWVlZS0+YXNzb2NfaWQsY3B1X3RvX2xlMTYoaWVlZS0+YXNzb2NfaWQpLGllZWUtPmJBd2FrZVBrdFNlbnQsaWVlZS0+Y3VycmVudF9uZXR3b3JrLmR0aW1fcGVyaW9kLHBQU0MtPkxQU0F3YWtlSW50dmwsTFBTQXdha2VJbnR2bF90bXAsY291bnQpOworCiAJCSp0aW1lX2wgPSBpZWVlLT5jdXJyZW50X25ldHdvcmsubGFzdF9kdGltX3N0YV90aW1lWzBdCi0JCQkrIChpZWVlLT5jdXJyZW50X25ldHdvcmsuYmVhY29uX2ludGVydmFsKTsKKwkJCSsgTVNFQ1MoaWVlZS0+Y3VycmVudF9uZXR3b3JrLmJlYWNvbl9pbnRlcnZhbCAqIExQU0F3YWtlSW50dmxfdG1wKTsKIAkJLy8JKiBpZWVlLT5jdXJyZW50X25ldHdvcmsuZHRpbV9wZXJpb2QpICogMTAwMDsKIAl9CisJfQogCiAJaWYodGltZV9oKXsKIAkJKnRpbWVfaCA9IGllZWUtPmN1cnJlbnRfbmV0d29yay5sYXN0X2R0aW1fc3RhX3RpbWVbMV07CkBAIC0xOTgyLDYgKzIwODYsOCBAQAogCQlpZWVlLT5zdGF0ZSAhPSBJRUVFODAyMTFfTElOS0VEKSl7CiAKIAkvLwkjd2FybmluZyBDSEVDS19MT0NLX0hFUkUKKwkJcHJpbnRrKCI9PT09PT4lcygpOiBubyBuZWVkIHRvIHBzLHdha2UgdXAhISBpZWVlLT5wcyBpcyAlZCxpZWVlLT5pd19tb2RlIGlzICVkLGllZWUtPnN0YXRlIGlzICVkXG4iLAorCQkJX19GVU5DVElPTl9fLGllZWUtPnBzLGllZWUtPml3X21vZGUsaWVlZS0+c3RhdGUpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWVlZS0+bWdtdF90eF9sb2NrLCBmbGFnczIpOwogCiAJCWllZWU4MDIxMV9zdGFfd2FrZXVwKGllZWUsIDEpOwpAQCAtMTk5MSwyNyArMjA5NywyNyBAQAogCiAJc2xlZXAgPSBpZWVlODAyMTFfc3RhX3BzX3NsZWVwKGllZWUsJnRoLCAmdGwpOwogCS8qIDIgd2FrZSwgMSBzbGVlcCwgMCBkbyBub3RoaW5nICovCi0JaWYoc2xlZXAgPT0gMCkKKwlpZihzbGVlcCA9PSAwKS8vaXQgaXMgbm90IHRpbWUgb3V0IG9yIGR0aW0gaXMgbm90IHZhbGlkCisJeworCQkvL3ByaW50aygiPT09PT09PT09PT0+c2xlZXAgaXMgMCxkbyBub3RoaW5nXG4iKTsKIAkJZ290byBvdXQ7Ci0KKwl9CiAJaWYoc2xlZXAgPT0gMSl7Ci0KLQkJaWYoaWVlZS0+c3RhX3NsZWVwID09IDEpCisJCS8vcHJpbnRrKCI9PT09PT09PT09PT5zbGVlcCBpcyAxLHRvIHNsZWVwXG4iKTsKKwkJaWYoaWVlZS0+c3RhX3NsZWVwID09IDEpeworCQkJLy9wcmludGsoIiVzKDEpOiBzdGFfc2xlZXAgPSAxLCBzbGVlcCBhZ2FpbiArKysrKysrKysrIFxuIiwgX19mdW5jX18pOwogCQkJaWVlZS0+ZW50ZXJfc2xlZXBfc3RhdGUoaWVlZS0+ZGV2LHRoLHRsKTsKKwkJfQogCiAJCWVsc2UgaWYoaWVlZS0+c3RhX3NsZWVwID09IDApewogCQkvLwlwcmludGsoInNlbmQgbnVsbCAxXG4iKTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZpZWVlLT5tZ210X3R4X2xvY2ssIGZsYWdzMik7CiAKIAkJCWlmKGllZWUtPnBzX2lzX3F1ZXVlX2VtcHR5KGllZWUtPmRldikpewotCi0KIAkJCQlpZWVlLT5zdGFfc2xlZXAgPSAyOwotCiAJCQkJaWVlZS0+YWNrX3R4X3RvX2llZWUgPSAxOwotCisJCQkJLy9wcmludGsoIiVzKDIpOiBzdGFfc2xlZXAgPSAwLCBub3RpZnkgQVAgd2Ugd2lsbCBzbGVlcGVkICsrKysrKysrKysgU2VuZE51bGxGdW5jdGlvbkRhdGFcbiIsIF9fZnVuY19fKTsKIAkJCQlpZWVlODAyMTFfc3RhX3BzX3NlbmRfbnVsbF9mcmFtZShpZWVlLDEpOwotCiAJCQkJaWVlZS0+cHNfdGggPSB0aDsKIAkJCQlpZWVlLT5wc190bCA9IHRsOwogCQkJfQpAQCAtMjAxOSwxMSArMjEyNSwxMyBAQAogCiAJCX0KIAorCQlpZWVlLT5iQXdha2VQa3RTZW50ID0gZmFsc2U7Ly9hZnRlciBudWxsIHRvIHBvd2VyIHNhdmUgd2Ugc2V0IGl0IHRvIGZhbHNlLiBub3QgbGlzdGVuIGV2ZXJ5IGJlYWNvbi4KIAogCX1lbHNlIGlmKHNsZWVwID09IDIpewotLy8jd2FybmluZyBDSEVDS19MT0NLX0hFUkUKKwkJLy9wcmludGsoIj09PT09PT09PT0+c2xlZXAgaXMgMix0byB3YWtldXBcbiIpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWVlZS0+bWdtdF90eF9sb2NrLCBmbGFnczIpOwogCisJCS8vcHJpbnRrKCIlcygzKTogcGt0IGJ1ZmZlcmVkIGluIGFwIHdpbGwgYXdha2UgKysrKysrKysrKyBpZWVlODAyMTFfc3RhX3dha2V1cFxuIiwgX19mdW5jX18pOwogCQlpZWVlODAyMTFfc3RhX3dha2V1cChpZWVlLDEpOwogCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPm1nbXRfdHhfbG9jaywgZmxhZ3MyKTsKQEAgLTIwMzgsOSArMjE0NiwxOSBAQAogewogCWlmKGllZWUtPnN0YV9zbGVlcCA9PSAwKXsKIAkJaWYobmwpewotCQkJcHJpbnRrKCJXYXJuaW5nOiBkcml2ZXIgaXMgcHJvYmFibHkgZmFpbGluZyB0byByZXBvcnQgVFggcHMgZXJyb3JcbiIpOwotCQkJaWVlZS0+YWNrX3R4X3RvX2llZWUgPSAxOwotCQkJaWVlZTgwMjExX3N0YV9wc19zZW5kX251bGxfZnJhbWUoaWVlZSwgMCk7CisJCQlpZihpZWVlLT5wSFRJbmZvLT5JT1RBY3Rpb24gJiBIVF9JT1RfQUNUX05VTExfREFUQV9QT1dFUl9TQVZJTkcpCisJCQl7CisJCQkJLy9wcmludGsoIiVzKDEpOiBub3RpZnkgQVAgd2UgYXJlIGF3YWtlZCArKysrKysrKysrIFNlbmROdWxsRnVuY3Rpb25EYXRhXG4iLCBfX2Z1bmNfXyk7CisJCQkJLy9wcmludGsoIldhcm5pbmc6IGRyaXZlciBpcyBwcm9iYWJseSBmYWlsaW5nIHRvIHJlcG9ydCBUWCBwcyBlcnJvclxuIik7CisJCQkJaWVlZS0+YWNrX3R4X3RvX2llZWUgPSAxOworCQkJCWllZWU4MDIxMV9zdGFfcHNfc2VuZF9udWxsX2ZyYW1lKGllZWUsIDApOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWllZWUtPmFja190eF90b19pZWVlID0gMTsKKwkJCQkvL3ByaW50aygiJXMoMik6IG5vdGlmeSBBUCB3ZSBhcmUgYXdha2VkICsrKysrKysrKysgU2VuZCBQUy1Qb2xsXG4iLCBfX2Z1bmNfXyk7CisJCQkJaWVlZTgwMjExX3N0YV9wc19zZW5kX3BzcG9sbF9mcmFtZShpZWVlKTsKKwkJCX0KIAkJfQogCQlyZXR1cm47CiAKQEAgLTIwNDgsMTIgKzIxNjYsMjcgQEAKIAogCWlmKGllZWUtPnN0YV9zbGVlcCA9PSAxKQogCQlpZWVlLT5zdGFfd2FrZV91cChpZWVlLT5kZXYpOwotCi0JaWVlZS0+c3RhX3NsZWVwID0gMDsKLQogCWlmKG5sKXsKLQkJaWVlZS0+YWNrX3R4X3RvX2llZWUgPSAxOwotCQlpZWVlODAyMTFfc3RhX3BzX3NlbmRfbnVsbF9mcmFtZShpZWVlLCAwKTsKKworCQkJaWYoaWVlZS0+cEhUSW5mby0+SU9UQWN0aW9uICYgSFRfSU9UX0FDVF9OVUxMX0RBVEFfUE9XRVJfU0FWSU5HKQorCQkJeworCQkJCS8vcHJpbnRrKCIlcygzKTogbm90aWZ5IEFQIHdlIGFyZSBhd2FrZWQgKysrKysrKysrKyBTZW5kTnVsbEZ1bmN0aW9uRGF0YVxuIiwgX19mdW5jX18pOworCQkJCS8vcHJpbnRrKCJXYXJuaW5nOiBkcml2ZXIgaXMgcHJvYmFibHkgZmFpbGluZyB0byByZXBvcnQgVFggcHMgZXJyb3JcbiIpOworCQkJCWllZWUtPmFja190eF90b19pZWVlID0gMTsKKwkJCQlpZWVlODAyMTFfc3RhX3BzX3NlbmRfbnVsbF9mcmFtZShpZWVlLCAwKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZWVlLT5hY2tfdHhfdG9faWVlZSA9IDE7CisJCQlpZWVlLT5wb2xsaW5nID0gdHJ1ZTsKKwkJCQkvL3ByaW50aygiJXMoNCk6IG5vdGlmeSBBUCB3ZSBhcmUgYXdha2VkICsrKysrKysrKysgU2VuZCBQUy1Qb2xsXG4iLCBfX2Z1bmNfXyk7CisJCQkJLy9pZWVlODAyMTFfc3RhX3BzX3NlbmRfbnVsbF9mcmFtZShpZWVlLCAwKTsKKwkJCQlpZWVlODAyMTFfc3RhX3BzX3NlbmRfcHNwb2xsX2ZyYW1lKGllZWUpOworCQkJfQorCisJfSBlbHNlIHsKKwkJaWVlZS0+c3RhX3NsZWVwID0gMDsKKwkJaWVlZS0+cG9sbGluZyA9IGZhbHNlOwogCX0KIH0KIApAQCAtMjA2NywyMyArMjIwMCwzMCBAQAogCQkvKiBOdWxsIGZyYW1lIHdpdGggUFMgYml0IHNldCAqLwogCQlpZihzdWNjZXNzKXsKIAkJCWllZWUtPnN0YV9zbGVlcCA9IDE7CisJCQkvL3ByaW50aygibm90aWZ5IEFQIHdlIHdpbGwgc2xlZXAgYW5kIHNlbmQgbnVsbCBvaywgc28gc2xlZXAgbm93KysrKysrKysrKyBlbnRlcl9zbGVlcF9zdGF0ZVxuIik7CiAJCQlpZWVlLT5lbnRlcl9zbGVlcF9zdGF0ZShpZWVlLT5kZXYsaWVlZS0+cHNfdGgsaWVlZS0+cHNfdGwpOwogCQl9Ci0JCS8qIGlmIHRoZSBjYXJkIHJlcG9ydCBub3Qgc3VjY2VzcyB3ZSBjYW4ndCBiZSBzdXJlIHRoZSBBUAotCQkgKiBoYXMgbm90IFJYZWQgc28gd2UgY2FuJ3QgYXNzdW1lIHRoZSBBUCBiZWxpZXZlIHVzIGF3YWtlCi0JCSAqLwotCX0KLQkvKiAyMTExMjAwNSAtIHR4IGFnYWluIG51bGwgd2l0aG91dCBQUyBiaXQgaWYgbG9zdCAqLwotCWVsc2UgeworCX0gZWxzZSB7LyogMjExMTIwMDUgLSB0eCBhZ2FpbiBudWxsIHdpdGhvdXQgUFMgYml0IGlmIGxvc3QgKi8KIAogCQlpZigoaWVlZS0+c3RhX3NsZWVwID09IDApICYmICFzdWNjZXNzKXsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZpZWVlLT5tZ210X3R4X2xvY2ssIGZsYWdzMik7Ci0JCQlpZWVlODAyMTFfc3RhX3BzX3NlbmRfbnVsbF9mcmFtZShpZWVlLCAwKTsKKwkJCS8vaWVlZTgwMjExX3N0YV9wc19zZW5kX251bGxfZnJhbWUoaWVlZSwgMCk7CisJCQlpZihpZWVlLT5wSFRJbmZvLT5JT1RBY3Rpb24gJiBIVF9JT1RfQUNUX05VTExfREFUQV9QT1dFUl9TQVZJTkcpCisJCQl7CisJCQkJLy9wcmludGsoIm5vdGlmeSBBUCB3ZSB3aWxsIHNsZWVwIGJ1dCBzZW5kIGJ1bGwgZmFpbGVkLCBzbyByZXNlbmQrKysrKysrKysrIFNlbmROdWxsRnVuY3Rpb25EYXRhXG4iKTsKKwkJCQlpZWVlODAyMTFfc3RhX3BzX3NlbmRfbnVsbF9mcmFtZShpZWVlLCAwKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvL3ByaW50aygibm90aWZ5IEFQIHdlIGFyZSBhd2FrZWQgYnV0IHNlbmQgcHNwb2xsIGZhaWxlZCwgc28gcmVzZW5kKysrKysrKysrKyBTZW5kIFBTLVBvbGxcbiIpOworCQkJCWllZWU4MDIxMV9zdGFfcHNfc2VuZF9wc3BvbGxfZnJhbWUoaWVlZSk7CisJCQl9CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5tZ210X3R4X2xvY2ssIGZsYWdzMik7CiAJCX0KIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bG9jaywgZmxhZ3MpOwogfQorCiB2b2lkIGllZWU4MDIxMV9wcm9jZXNzX2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSogaWVlZSwgc3RydWN0IHNrX2J1ZmYqIHNrYikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciogaGVhZGVyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyKilza2ItPmRhdGE7CkBAIC0yMjI3LDcgKzIzNjcsNyBAQAogCQkJCQkJCQl7CiAJCQkJCQkJCQlpZiAoIWllZWUtPkdldE5tb2RlU3VwcG9ydEJ5U2VjQ2ZnKGllZWUtPmRldikpCiAJCQkJCQkJCQl7Ci0JCQkJCQkJCQkJCQkvLyBXRVAgb3IgVEtJUCBlbmNyeXB0aW9uCisJCQkJCQkJCQkJLy8gV0VQIG9yIFRLSVAgZW5jcnlwdGlvbgogCQkJCQkJCQkJCWlmKElzSFRIYWxmTm1vZGVBUHMoaWVlZSkpCiAJCQkJCQkJCQkJewogCQkJCQkJCQkJCQliU3VwcG9ydE5tb2RlID0gdHJ1ZTsKQEAgLTIyMzgsNyArMjM3OCw3IEBACiAJCQkJCQkJCQkJCWJTdXBwb3J0Tm1vZGUgPSBmYWxzZTsKIAkJCQkJCQkJCQkJYkhhbGZTdXBwb3J0Tm1vZGUgPSBmYWxzZTsKIAkJCQkJCQkJCQl9Ci0JCQkJCQkJCQlwcmludGsoIj09PT09PT09PT0+dG8gbGluayB3aXRoIEFQIHVzaW5nIFNFQyglZCwgJWQpIiwgYlN1cHBvcnRObW9kZSwgYkhhbGZTdXBwb3J0Tm1vZGUpOworCQkJCQkJCQkJcHJpbnRrKCI9PT09PT09PT09PnRvIGxpbmsgd2l0aCBBUCB1c2luZyBTRUMoJWQsICVkKVxuIiwgYlN1cHBvcnRObW9kZSwgYkhhbGZTdXBwb3J0Tm1vZGUpOwogCQkJCQkJCQkJfQogCQkJCQkJCQl9CiAJCQkJCQkJCS8qIER1bW15IHdpcmxlc3MgbW9kZSBzZXR0aW5nIHRvIGF2b2lkIGVuY3J5cHRpb24gaXNzdWUgKi8KQEAgLTI1NzQsNiArMjcxNCw3IEBACiAJCWllZWUtPnNzaWRfc2V0ID0gMTsKIAl9CiAKKwlpZWVlLT5zdGF0ZSA9IElFRUU4MDIxMV9OT0xJTks7CiAJLyogY2hlY2sgaWYgd2UgaGF2ZSB0aGlzIGNlbGwgaW4gb3VyIG5ldHdvcmsgbGlzdCAqLwogCWllZWU4MDIxMV9zb2Z0bWFjX2NoZWNrX2FsbF9uZXRzKGllZWUpOwogCkBAIC0yNzA1LDYgKzI4NDYsMTAgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaWVlZS0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKGllZWUtPnN0YXRlID09IElFRUU4MDIxMV9OT0xJTkspeworI2lmZGVmIEVOQUJMRV9JUFMKKwkJaWYoaWVlZS0+aWVlZTgwMjExX2lwc19sZWF2ZV93cSAhPSBOVUxMKQorCQkJaWVlZS0+aWVlZTgwMjExX2lwc19sZWF2ZV93cShpZWVlLT5kZXYpOworI2VuZGlmCiAJCWllZWUtPmFjdHNjYW5uaW5nID0gdHJ1ZTsKIAkJaWVlZTgwMjExX3J0bF9zdGFydF9zY2FuKGllZWUpOwogCX0KQEAgLTI4MjMsMjEgKzI5NjgsMjMgQEAKIAlyZXR1cm4gc2tiOwogfQogCi12b2lkIGllZWU4MDIxMV9zb2Z0bWFjX3N0b3BfcHJvdG9jb2woc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCit2b2lkIGllZWU4MDIxMV9zb2Z0bWFjX3N0b3BfcHJvdG9jb2woc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4IHNodXRkb3duKQogewogCWllZWUtPnN5bmNfc2Nhbl9odXJyeXVwID0gMTsKIAlkb3duKCZpZWVlLT53eF9zZW0pOwotCWllZWU4MDIxMV9zdG9wX3Byb3RvY29sKGllZWUpOworCWllZWU4MDIxMV9zdG9wX3Byb3RvY29sKGllZWUsIHNodXRkb3duKTsKIAl1cCgmaWVlZS0+d3hfc2VtKTsKIH0KIAogCi12b2lkIGllZWU4MDIxMV9zdG9wX3Byb3RvY29sKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQordm9pZCBpZWVlODAyMTFfc3RvcF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTggc2h1dGRvd24pCiB7CiAJaWYgKCFpZWVlLT5wcm90b19zdGFydGVkKQogCQlyZXR1cm47CiAKLQlpZWVlLT5wcm90b19zdGFydGVkID0gMDsKKwlpZihzaHV0ZG93bikKKwkJaWVlZS0+cHJvdG9fc3RhcnRlZCA9IDA7CisJaWVlZS0+cHJvdG9fc3RvcHBwaW5nID0gMTsKIAogCWllZWU4MDIxMV9zdG9wX3NlbmRfYmVhY29ucyhpZWVlKTsKIAlkZWxfdGltZXJfc3luYygmaWVlZS0+YXNzb2NpYXRlX3RpbWVyKTsKQEAgLTI4NDksNiArMjk5Niw4IEBACiAKIAlpZWVlODAyMTFfZGlzYXNzb2NpYXRlKGllZWUpOwogCVJlbW92ZUFsbFRTKGllZWUpOyAvL2FkZGVkIGFzIHdlIGRpc2Nvbm5lY3QgZnJvbSB0aGUgcHJldmlvdXMgQlNTLCBSZW1vdmUgYWxsIFRTCisKKwlpZWVlLT5wcm90b19zdG9wcHBpbmcgPSAwOwogfQogCiB2b2lkIGllZWU4MDIxMV9zb2Z0bWFjX3N0YXJ0X3Byb3RvY29sKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQpAQCAtMjg5NCw2ICszMDQzLDggQEAKIAogCWllZWUtPmluaXRfd21tcGFyYW1fZmxhZyA9IDA7Ly9yZWluaXRpYWxpemUgQUNfeHhfUEFSQU0gcmVnaXN0ZXJzLgogCisJaWVlZS0+c3RhdGUgPSBJRUVFODAyMTFfTk9MSU5LOworCiAKIAkvKiBpZiB0aGUgdXNlciBzZXQgdGhlIE1BQyBvZiB0aGUgYWQtaG9jIGNlbGwgYW5kIHRoZW4KIAkgKiBzd2l0Y2ggdG8gbWFuYWdlZCBtb2RlLCBzaGFsbCB3ZSAgbWFrZSBzdXJlIHRoYXQgYXNzb2NpYXRpb24KQEAgLTMwMTMsNyArMzE2NCw5IEBACiAjZW5kaWYKIAlzZW1hX2luaXQoJmllZWUtPnd4X3NlbSwgMSk7CiAJc2VtYV9pbml0KCZpZWVlLT5zY2FuX3NlbSwgMSk7Ci0KKyNpZmRlZiBFTkFCTEVfSVBTCisJc2VtYV9pbml0KCZpZWVlLT5pcHNfc2VtLDEpOworI2VuZGlmCiAJc3Bpbl9sb2NrX2luaXQoJmllZWUtPm1nbXRfdHhfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmllZWUtPmJlYWNvbl9sb2NrKTsKIApAQCAtMzUzNyw1ICszNjkwLDYgQEAKIEVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcXVlc3RzKTsKIEVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9zb2Z0bWFjX3NjYW5fc3luY3JvKTsKIEVYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9zdGFydF9zY2FuX3N5bmNybyk7CitFWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfc3RhX3BzX3NlbmRfbnVsbF9mcmFtZSk7CitFWFBPUlRfU1lNQk9MX05PVkVSUyhpZWVlODAyMTFfc3RhX3BzX3NlbmRfcHNwb2xsX2ZyYW1lKTsKICNlbmRpZgotLy9FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFfcHNfc2VuZF9udWxsX2ZyYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWNfd3guYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWNfd3guYwppbmRleCA3YzIxYWFhLi4xYmJkNDlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjX3d4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hY193eC5jCkBAIC0xNjAsNyArMTYwLDcgQEAKIAl9CiAKIAlpZiAoaWZ1cCkKLQkJaWVlZTgwMjExX3N0b3BfcHJvdG9jb2woaWVlZSk7CisJCWllZWU4MDIxMV9zdG9wX3Byb3RvY29sKGllZWUsdHJ1ZSk7CiAKIAkvKiBqdXN0IHRvIGF2b2lkIHRvIGdpdmUgaW5jb25zaXN0ZW50IGluZm9zIGluIHRoZQogCSAqIGdldCB3eCBtZXRob2QuIG5vdCByZWFsbHkgbmVlZGVkIG90aGVyd2lzZQpAQCAtMzAyLDcgKzMwMiw3IEBACiAJaWYgKCFpZWVlLT5wcm90b19zdGFydGVkKXsKIAkJaWVlZS0+aXdfbW9kZSA9IHdycXUtPm1vZGU7CiAJfWVsc2V7Ci0JCWllZWU4MDIxMV9zdG9wX3Byb3RvY29sKGllZWUpOworCQlpZWVlODAyMTFfc3RvcF9wcm90b2NvbChpZWVlLHRydWUpOwogCQlpZWVlLT5pd19tb2RlID0gd3JxdS0+bW9kZTsKIAkJaWVlZTgwMjExX3N0YXJ0X3Byb3RvY29sKGllZWUpOwogCX0KQEAgLTMyNiw2ICszMjYsMTcgQEAKIAlpbnQgYjQwTSA9IDA7CiAJc3RhdGljIGludCBjb3VudCA9IDA7CiAJY2hhbiA9IGllZWUtPmN1cnJlbnRfbmV0d29yay5jaGFubmVsOworCisjaWZkZWYgRU5BQkxFX0xQUworCWlmIChpZWVlLT5MZWlzdXJlUFNMZWF2ZSkgeworCQlpZWVlLT5MZWlzdXJlUFNMZWF2ZShpZWVlLT5kZXYpOworCX0KKworCS8qIG5vdGlmeSBBUCB0byBiZSBpbiBQUyBtb2RlICovCisJaWVlZTgwMjExX3N0YV9wc19zZW5kX251bGxfZnJhbWUoaWVlZSwgMSk7CisJaWVlZTgwMjExX3N0YV9wc19zZW5kX251bGxfZnJhbWUoaWVlZSwgMSk7CisjZW5kaWYKKwogCW5ldGlmX2NhcnJpZXJfb2ZmKGllZWUtPmRldik7CiAKIAlpZiAoaWVlZS0+ZGF0YV9oYXJkX3N0b3ApCkBAIC0zNjAsNiArMzcxLDEyIEBACiAJaWVlZS0+SW5pdGlhbEdhaW5IYW5kbGVyKGllZWUtPmRldixJR19SZXN0b3JlKTsKIAlpZWVlLT5zdGF0ZSA9IElFRUU4MDIxMV9MSU5LRUQ7CiAJaWVlZS0+bGlua19jaGFuZ2UoaWVlZS0+ZGV2KTsKKworI2lmZGVmIEVOQUJMRV9MUFMKKwkvKiBOb3RpZnkgQVAgdGhhdCBJIHdha2UgdXAgYWdhaW4gKi8KKwlpZWVlODAyMTFfc3RhX3BzX3NlbmRfbnVsbF9mcmFtZShpZWVlLCAwKTsKKyNlbmRpZgorCiAJLy8gVG8gcHJldmVudCB0aGUgaW1tZWRpYXRlbHkgY2FsbGluZyB3YXRjaF9kb2cgYWZ0ZXIgc2Nhbi4KIAlpZihpZWVlLT5MaW5rRGV0ZWN0SW5mby5OdW1SZWN2QmNuSW5QZXJpb2Q9PTB8fGllZWUtPkxpbmtEZXRlY3RJbmZvLk51bVJlY3ZEYXRhSW5QZXJpb2Q9PTAgKQogCXsKQEAgLTQyOSw4ICs0NDYsOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZihwcm90b19zdGFydGVkKQotCQlpZWVlODAyMTFfc3RvcF9wcm90b2NvbChpZWVlKTsKKwlpZihwcm90b19zdGFydGVkKXsKKwkJaWVlZTgwMjExX3N0b3BfcHJvdG9jb2woaWVlZSx0cnVlKTsKKwl9CiAKIAogCS8qIHRoaXMgaXMganVzdCB0byBiZSBzdXJlIHRoYXQgdGhlIEdFVCB3eCBjYWxsYmFjawpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKaW5kZXggNzk4ZmI0MS4uYTc1ZjM2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCkBAIC0yMDAsOCArMjAwLDggQEAKIAkJaGVhZGVyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIGZyYWctPmRhdGE7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVEtJUCBjb3VudGVybWVhc3VyZXM6IGRyb3BwZWQgIgotCQkJICAgICAgICJUWCBwYWNrZXQgdG8gIiBNQUNfRk1UICJcbiIsCi0JCQkgICAgICAgaWVlZS0+ZGV2LT5uYW1lLCBNQUNfQVJHKGhlYWRlci0+YWRkcjEpKTsKKwkJCSAgICAgICAiVFggcGFja2V0IHRvICVwTVxuIiwKKwkJCSAgICAgICBpZWVlLT5kZXYtPm5hbWUsIGhlYWRlci0+YWRkcjEpOwogCQl9CiAJCXJldHVybiAtMTsKIAl9CkBAIC0zMzQsNiArMzM0LDEzIEBACiAJaWYoIUFkYXB0ZXItPkhhbEZ1bmMuR2V0Tm1vZGVTdXBwb3J0QnlTZWNDZmdIYW5kbGVyKEFkYXB0ZXIpKQogCQlyZXR1cm47CiAjZW5kaWYKKworICAgICAgICBpZih0Y2JfZGVzYy0+YmRoY3ApLy8gfHwgaWVlZS0+Q250QWZ0ZXJMaW5rPDIpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworCiAjaWYgMQogCWlmKCFpZWVlLT5HZXRObW9kZVN1cHBvcnRCeVNlY0NmZyhpZWVlLT5kZXYpKQogCXsKQEAgLTYyOCw2ICs2MzUsNyBAQAogCWludCBxb3NfYWN0aXZlZCA9IGllZWUtPmN1cnJlbnRfbmV0d29yay5xb3NfZGF0YS5hY3RpdmU7CiAKIAlzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEqIGNyeXB0OworCWJvb2wgICAgYmRoY3AgPWZhbHNlOwogCiAJY2JfZGVzYyAqdGNiX2Rlc2M7CiAKQEAgLTY3Miw2ICs2ODAsNTUgQEAKIAkJfQogCSNlbmRpZgogCisJCS8vIFRoZSBmb2xsb3dpbmcgaXMgZm9yIERIQ1AgYW5kIEFSUCBwYWNrZXQsIHdlIHVzZSBjY2sxTSB0byB0eCB0aGVzZSBwYWNrZXRzIGFuZCBsZXQgTFBTIGF3YWtlIHNvbWUgdGltZQorCQkvLyB0byBwcmV2ZW50IERIQ1AgcHJvdG9jb2wgZmFpbAorCQlpZiAoc2tiLT5sZW4gPiAyODIpey8vTUlOSU1VTV9ESENQX1BBQ0tFVF9TSVpFKSB7CisJCQlpZiAoRVRIX1BfSVAgPT0gZXRoZXJfdHlwZSkgey8vIElQIGhlYWRlcgorCQkJCWNvbnN0IHN0cnVjdCBpcGhkciAqaXAgPSAoc3RydWN0IGlwaGRyICopKCh1OCAqKXNrYi0+ZGF0YSsxNCk7CisJCQkJaWYgKElQUFJPVE9fVURQID09IGlwLT5wcm90b2NvbCkgey8vRklYTUUgd2luZG93cyBpcyAxMSBidXQgaGVyZSBVRFAgaW4gbGludXgga2VybmVsIGlzIDE3LgorCQkJCQlzdHJ1Y3QgdWRwaGRyICp1ZHAgPSAoc3RydWN0IHVkcGhkciAqKSgodTggKilpcCArIChpcC0+aWhsIDw8IDIpKTsKKwkJCQkJLy9pZigoKG50b2hzKHVkcC0+c291cmNlKSA9PSA2OCkgJiYgKG50b2hzKHVkcC0+ZGVzdCkgPT0gNjcpKSB8fAorCQkJCQkvLy8gICAoKG50b2hzKHVkcC0+c291cmNlKSA9PSA2NykgJiYgKG50b2hzKHVkcC0+ZGVzdCkgPT0gNjgpKSkgeworCQkJCQlpZigoKCgodTggKil1ZHApWzFdID09IDY4KSAmJiAoKCh1OCAqKXVkcClbM10gPT0gNjcpKSB8fAorCQkJCQkJCSgoKCh1OCAqKXVkcClbMV0gPT0gNjcpICYmICgoKHU4ICopdWRwKVszXSA9PSA2OCkpKSB7CisJCQkJCQkvLyA2OCA6IFVEUCBCT09UUCBjbGllbnQKKwkJCQkJCS8vIDY3IDogVURQIEJPT1RQIHNlcnZlcgorCQkJCQkJcHJpbnRrKCJESENQIHBrdCBzcmMgcG9ydDolZCwgZGVzdCBwb3J0OiVkISFcbiIsICgodTggKil1ZHApWzFdLCgodTggKil1ZHApWzNdKTsKKwkJCQkJCS8vIFVzZSBsb3cgcmF0ZSB0byBzZW5kIERIQ1AgcGFja2V0LgorCQkJCQkJLy9pZihwTWdudEluZm8tPklPVEFjdGlvbiAmIEhUX0lPVF9BQ1RfV0FfSU9UX0Jyb2FkY29tKQorCQkJCQkJLy97CisJCQkJCQkvLyAgICAgIHRjYl9kZXNjLT5EYXRhUmF0ZSA9IE1nbnRRdWVyeV9UeFJhdGVFeGNsdWRlQ0NLUmF0ZXMoaWVlZSk7Ly8weGM7Ly9vZmRtIDZtCisJCQkJCQkvLyAgICAgIHRjYl9kZXNjLT5iVHhEaXNhYmxlUmF0ZUZhbGxCYWNrID0gZmFsc2U7CisJCQkJCQkvL30KKwkJCQkJCS8vZWxzZQorCQkJCQkJLy9wVGNiLT5EYXRhUmF0ZSA9IEFkYXB0ZXItPk1nbnRJbmZvLkxvd2VzdEJhc2ljUmF0ZTsKKwkJCQkJCS8vUlRQUklOVChGRE0sIFdBX0lPVCwgKCJESENQIFRyYW5zbGF0ZUhlYWRlcigpLCBwVGNiLT5EYXRhUmF0ZSA9IDB4JXhcbiIsIHBUY2ItPkRhdGFSYXRlKSk7CisKKwkJCQkJCWJkaGNwID0gdHJ1ZTsKKyNpZmRlZiBfUlRMODE5Ml9FWFRfUEFUQ0hfCisJCQkJCQlpZWVlLT5MUFNEZWxheUNudCA9IDEwMDsvL3BQU0MtPkxQU0F3YWtlSW50dmwqMjsgLy9BTVksMDkwNzAxCisjZWxzZQorCQkJCQkJaWVlZS0+TFBTRGVsYXlDbnQgPSAxMDA7Ly9wUFNDLT5MUFNBd2FrZUludHZsKjI7CisjZW5kaWYKKwkJCQkJfQorCQkJCX0KKwkJCQl9ZWxzZSBpZihFVEhfUF9BUlAgPT0gZXRoZXJfdHlwZSl7Ly8gSVAgQVJQIHBhY2tldAorCQkJCQlwcmludGsoIj09PT09PT09PT09PT09PT09PkRIQ1AgUHJvdG9jb2wgc3RhcnQgdHggQVJQIHBrdCEhXG4iKTsKKwkJCQkJYmRoY3AgPSB0cnVlOworCQkJCQlpZWVlLT5MUFNEZWxheUNudCA9IGllZWUtPmN1cnJlbnRfbmV0d29yay50aW0udGltX2NvdW50OworCisJCQkJCS8vaWYocE1nbnRJbmZvLT5JT1RBY3Rpb24gJiBIVF9JT1RfQUNUX1dBX0lPVF9Ccm9hZGNvbSkKKwkJCQkJLy97CisJCQkJCS8vICAgICAgdGNiX2Rlc2MtPkRhdGFSYXRlID0gTWdudFF1ZXJ5X1R4UmF0ZUV4Y2x1ZGVDQ0tSYXRlcyhBZGFwdGVyLT5NZ250SW5mby5tQnJhdGVzKTsvLzB4YzsvL29mZG0gNm0KKwkJCQkJLy8gICAgICB0Y2JfZGVzYy0+YlR4RGlzYWJsZVJhdGVGYWxsQmFjayA9IEZBTFNFOworCQkJCQkvL30KKwkJCQkJLy9lbHNlCisJCQkJCS8vICAgICAgdGNiX2Rlc2MtPkRhdGFSYXRlID0gQWRhcHRlci0+TWdudEluZm8uTG93ZXN0QmFzaWNSYXRlOworCQkJCQkvL1JUUFJJTlQoRkRNLCBXQV9JT1QsICgiQVJQIFRyYW5zbGF0ZUhlYWRlcigpLCBwVGNiLT5EYXRhUmF0ZSA9IDB4JXhcbiIsIHBUY2ItPkRhdGFSYXRlKSk7CisKKwkJCQl9CisJCQl9CisKIAkJLyogU2F2ZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyAqLwogCQltZW1jcHkoJmRlc3QsIHNrYi0+ZGF0YSwgRVRIX0FMRU4pOwogCQltZW1jcHkoJnNyYywgc2tiLT5kYXRhK0VUSF9BTEVOLCBFVEhfQUxFTik7CkBAIC04OTUsNiArOTUyLDI1IEBACiAJCWVsc2UKIAkJCS8vdGNiX2Rlc2MtPmRhdGFfcmF0ZSA9IENVUlJFTlRfUkFURShpZWVlLT5jdXJyZW50X25ldHdvcmsubW9kZSwgaWVlZS0+cmF0ZSwgaWVlZS0+SFRDdXJyZW50T3BlcmFSYXRlKTsKIAkJCXRjYl9kZXNjLT5kYXRhX3JhdGUgPSBDVVJSRU5UX1JBVEUoaWVlZS0+bW9kZSwgaWVlZS0+cmF0ZSwgaWVlZS0+SFRDdXJyZW50T3BlcmFSYXRlKTsKKworCQlpZihiZGhjcCA9PSB0cnVlKXsKKwkJCS8vIFVzZSBsb3cgcmF0ZSB0byBzZW5kIERIQ1AgcGFja2V0LgorCQkJLy9pZihpZWVlLT5wSFRJbmZvLT5JT1RBY3Rpb24gJiBIVF9JT1RfQUNUX1dBX0lPVF9Ccm9hZGNvbSkgeworCQkJLy8JdGNiX2Rlc2MtPmRhdGFfcmF0ZSA9IE1HTl8xTTsvL01nbnRRdWVyeV9UeFJhdGVFeGNsdWRlQ0NLUmF0ZXMoaWVlZSk7Ly8weGM7Ly9vZmRtIDZtCisJCQkvLwl0Y2JfZGVzYy0+YlR4RGlzYWJsZVJhdGVGYWxsQmFjayA9IGZhbHNlOworCQkJLy99CisJCQkvL2Vsc2UKKwkJCXsKKwkJCQl0Y2JfZGVzYy0+ZGF0YV9yYXRlID0gTUdOXzFNOworCQkJCXRjYl9kZXNjLT5iVHhEaXNhYmxlUmF0ZUZhbGxCYWNrID0gMTsKKwkJCX0KKworCQkJdGNiX2Rlc2MtPlJBVFJJbmRleCA9IDc7CisJCQl0Y2JfZGVzYy0+YlR4VXNlRHJpdmVyQXNzaW5nZWRSYXRlID0gMTsKKwkJCXRjYl9kZXNjLT5iZGhjcCA9IDE7CisJCX0KKworCiAJCWllZWU4MDIxMV9xdXJleV9TaG9ydFByZWFtYmxlTW9kZShpZWVlLCB0Y2JfZGVzYyk7CiAJCWllZWU4MDIxMV90eF9xdWVyeV9hZ2dfY2FwKGllZWUsIHR4Yi0+ZnJhZ21lbnRzWzBdLCB0Y2JfZGVzYyk7CiAJCWllZWU4MDIxMV9xdWVyeV9IVENhcFNob3J0R0koaWVlZSwgdGNiX2Rlc2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKaW5kZXggMzQ0MWI3Mi4uYTMzMDJkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCkBAIC0zODYsMTAgKzM4NiwxMCBAQAogCQllbHNlCiAJCQlJRUVFODAyMTFfREVCVUdfU0NBTigKIAkJCQkiTm90IHNob3dpbmcgbmV0d29yayAnJXMgKCIKLQkJCQlNQUNfRk1UICIpJyBkdWUgdG8gYWdlICglbHVtcykuXG4iLAorCQkJCSIlcE0pJyBkdWUgdG8gYWdlICglbHVtcykuXG4iLAogCQkJCWVzY2FwZV9lc3NpZChuZXR3b3JrLT5zc2lkLAogCQkJCQkgICAgIG5ldHdvcmstPnNzaWRfbGVuKSwKLQkJCQlNQUNfQVJHKG5ldHdvcmstPmJzc2lkKSwKKwkJCQluZXR3b3JrLT5ic3NpZCwKIAkJCQkoamlmZmllcyAtIG5ldHdvcmstPmxhc3Rfc2Nhbm5lZCkgLyAoSFogLyAxMDApKTsKIAl9CiAKQEAgLTkzMyw3ICs5MzMsNyBAQAogI2lmIDEKIAljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6CiAJCWllZWUtPndwYV9lbmFibGVkID0gKGRhdGEtPnZhbHVlKT8xOjA7Ci0JCS8vcHJpbnRrKCJlbmFsYmUgd3BhOiVkXG4iLCBpZWVlLT53cGFfZW5hYmxlZCk7CisJCS8vcHJpbnRrKCJlbmFibGUgd3BhOiVkXG4iLCBpZWVlLT53cGFfZW5hYmxlZCk7CiAJCWJyZWFrOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYwppbmRleCBlNDFlOGEwLi5hZTBlNWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL3J0bDgxOXhfQkFQcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIAl1MTYgdG1wID0gMDsKIAl1MTYgbGVuID0gaWVlZS0+dHhfaGVhZHJvb20gKyA5OwogCS8vY2F0ZWdvcnkoMSkgKyBhY3Rpb24gZmllbGQoMSkgKyBEaWFsb2cgVG9rZW4oMSkgKyBCQSBQYXJhbWV0ZXIgU2V0KDIpICsgIEJBIFRpbWVvdXQgVmFsdWUoMikgKyAgQkEgU3RhcnQgU2VxQ3RybCgyKShvciBTdGF0dXNDb2RlKDIpKQotCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFJBQ0UgfCBJRUVFODAyMTFfRExfQkEsICI9PT09PT09PT4lcygpLCBmcmFtZSglZCkgc2VudGQgdG86Ik1BQ19GTVQiLCBpZWVlLT5kZXY6JXBcbiIsIF9fRlVOQ1RJT05fXywgdHlwZSwgTUFDX0FSRyhEc3QpLCBpZWVlLT5kZXYpOworCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFJBQ0UgfCBJRUVFODAyMTFfRExfQkEsICI9PT09PT09PT4lcygpLCBmcmFtZSglZCkgc2VudGQgdG86JXBNLCBpZWVlLT5kZXY6JXBcbiIsIF9fRlVOQ1RJT05fXywgdHlwZSwgRHN0LCBpZWVlLT5kZXYpOwogCWlmIChwQkEgPT0gTlVMTHx8aWVlZSA9PSBOVUxMKQogCXsKIAkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICJwQkEoJXApIGlzIE5VTEwgb3IgaWVlZSglcCkgaXMgTlVMTFxuIiwgcEJBLCBpZWVlKTsKQEAgLTI0Myw3ICsyNDMsNyBAQAogCXUxNiBsZW4gPSA2ICsgaWVlZS0+dHhfaGVhZHJvb207CiAKIAlpZiAobmV0X3JhdGVsaW1pdCgpKQotCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFJBQ0UgfCBJRUVFODAyMTFfRExfQkEsICI9PT09PT09PT4lcygpLCBSZWFzb25Db2RlKCVkKSBzZW50ZCB0bzoiTUFDX0ZNVCJcbiIsIF9fRlVOQ1RJT05fXywgUmVhc29uQ29kZSwgTUFDX0FSRyhkc3QpKTsKKwlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RSQUNFIHwgSUVFRTgwMjExX0RMX0JBLCAiPT09PT09PT0+JXMoKSwgUmVhc29uQ29kZSglZCkgc2VudGQgdG86JXBNXG4iLCBfX0ZVTkNUSU9OX18sIFJlYXNvbkNvZGUsIGRzdCk7CiAKIAltZW1zZXQoJkRlbGJhUGFyYW1TZXQsIDAsIDIpOwogCkBAIC0zOTcsNyArMzk3LDcgQEAKIAlwQmFUaW1lb3V0VmFsID0gKHUxNiopKHRhZyArIDUpOwogCXBCYVN0YXJ0U2VxQ3RybCA9IChQU0VRVUVOQ0VfQ09OVFJPTCkocmVxICsgNyk7CiAKLQlwcmludGsoIj09PT09PT09PT09PT09PT09PT09PnJ4IEFEREJBUkVRIGZyb20gOiJNQUNfRk1UIlxuIiwgTUFDX0FSRyhkc3QpKTsKKwlwcmludGsoIj09PT09PT09PT09PT09PT09PT09PnJ4IEFEREJBUkVRIGZyb20gOiVwTVxuIiwgZHN0KTsKIC8vc29tZSBvdGhlciBjYXBhYmlsaXR5IGlzIG5vdCByZWFkeSBub3cuCiAJaWYoCShpZWVlLT5jdXJyZW50X25ldHdvcmsucW9zX2RhdGEuYWN0aXZlID09IDApIHx8CiAJCShpZWVlLT5wSFRJbmZvLT5iQ3VycmVudEhUU3VwcG9ydCA9PSBmYWxzZSkpIC8vfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9IVC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X0hULmgKaW5kZXggOTkyYjcxOC4uZjk2ODgxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X0hULmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X0hULmgKQEAgLTQ1OCw3ICs0NTgsOCBAQAogCUhUX0lPVF9QRUVSX1JBTElOSyA9IDMsCiAJSFRfSU9UX1BFRVJfQVRIRVJPUyA9IDQsCiAJSFRfSU9UX1BFRVJfQ0lTQ089IDUsCi0JSFRfSU9UX1BFRVJfTUFYID0gNgorICAgICAgICBIVF9JT1RfUEVFUl9NQVJWRUxMPTYsCisJSFRfSU9UX1BFRVJfTUFYID0gNwogfUhUX0lPVF9QRUVSX0UsICpQSFRJT1RfUEVFUl9FOwogCiAvLwpAQCAtNDc1LDYgKzQ3Niw3IEBACiAJSFRfSU9UX0FDVF9DRERfRlNZTkMgPSAweDAwMDAwMDgwLAogCUhUX0lPVF9BQ1RfUFVSRV9OX01PREUgPSAweDAwMDAwMTAwLAogCUhUX0lPVF9BQ1RfRk9SQ0VEX0NUUzJTRUxGID0gMHgwMDAwMDIwMCwKKwlIVF9JT1RfQUNUX05VTExfREFUQV9QT1dFUl9TQVZJTkcgPSAweDAwODAwMDAwLAogfUhUX0lPVF9BQ1RJT05fRSwgKlBIVF9JT1RfQUNUSU9OX0U7CiAKICNlbmRpZiAvL19SVEw4MTlYVV9IVFRZUEVfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYwppbmRleCAxZTM5MjE0MS4uNGM0YjFkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X0hUUHJvYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYwpAQCAtMzIsNyArMzIsNyBAQAogc3RhdGljIHU4IFVOS05PV05fQk9SQURDT01bM10gPSB7MHgwMCwgMHgxNCwgMHhiZn07CiBzdGF0aWMgdTggTElOS1NZU1dSVDMzMF9MSU5LU1lTV1JUMzAwX0JST0FEQ09NWzNdID0gezB4MDAsIDB4MWEsIDB4NzB9Owogc3RhdGljIHU4IExJTktTWVNXUlQzNTBfTElOS1NZU1dSVDE1MF9CUk9BRENPTVszXSA9IHsweDAwLCAweDFkLCAweDdlfTsKLXN0YXRpYyB1OCBORVRHRUFSODM0QnYyX0JST0FEQ09NWzNdID0gezB4MDAsIDB4MWIsIDB4MmZ9OworLy9zdGF0aWMgdTggTkVUR0VBUjgzNEJ2Ml9CUk9BRENPTVszXSA9IHsweDAwLCAweDFiLCAweDJmfTsKIHN0YXRpYyB1OCBCRUxLSU5GNUQ4MjMzVjFfUkFMSU5LWzNdID0gezB4MDAsIDB4MTcsIDB4M2Z9OwkvL2Nvc2EgMDMyMDIwMDgKIHN0YXRpYyB1OCBCRUxLSU5GNUQ4MjMzNFYzX1JBTElOS1szXSA9IHsweDAwLCAweDFjLCAweGRmfTsKIHN0YXRpYyB1OCBQQ0lfUkFMSU5LWzNdID0gezB4MDAsIDB4OTAsIDB4Y2N9OwpAQCAtNDAsOCArNDAsOSBAQAogc3RhdGljIHU4IEFJUkxJTktfUkFMSU5LWzNdID0gezB4MDAsIDB4MTgsIDB4MDJ9Owogc3RhdGljIHU4IERMSU5LX0FUSEVST1NbM10gPSB7MHgwMCwgMHgxYywgMHhmMH07CiBzdGF0aWMgdTggQ0lTQ09fQlJPQURDT01bM10gPSB7MHgwMCwgMHgxNywgMHg5NH07CitzdGF0aWMgdTggTElOS1NZU19NQVJWRUxMXzQ0MDBOWzNdID0gezB4MDAsIDB4MTQsIDB4YTR9OwogCi0vLyAyMDA4LzA0LzAxIE1IIEZvciBDaXNjbyBHIG1vZGUgUlggVFAgV2UgbmVlZCB0byBjaGFuZ2UgRlcgZHVyYXRpb24uIFNob3VkIHdlIHB1dCB0aGUKKy8vIDIwMDgvMDQvMDEgTUggRm9yIENpc2NvIEcgbW9kZSBSWCBUUCBXZSBuZWVkIHRvIGNoYW5nZSBGVyBkdXJhdGlvbi4gU2hvdWxkIHdlIHB1dCB0aGUKIC8vIGNvZGUgaW4gb3RoZXIgcGxhY2U/PwogLy9zdGF0aWMgdTggV0lGSV9DSVNDT19HX0FQWzNdID0gezB4MDAsIDB4NDAsIDB4OTZ9OwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zNDksMTIgKzM1MCwxMiBAQAogCWJvb2wJCQlyZXRWYWx1ZSA9IGZhbHNlOwogCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayogbmV0ID0gJmllZWUtPmN1cnJlbnRfbmV0d29yazsKICNpZiAwCi0JaWYocE1nbnRJbmZvLT5iSGFsZk5Nb2RlID09IGZhbHNlKQorCWlmKGllZWUtPmJIYWxmTk1vZGUgPT0gZmFsc2UpCiAJCXJldFZhbHVlID0gZmFsc2U7CiAJZWxzZQogI2VuZGlmCiAJaWYoKG1lbWNtcChuZXQtPmJzc2lkLCBCRUxLSU5GNUQ4MjMzVjFfUkFMSU5LLCAzKT09MCkgfHwKLQkJICAgICAobWVtY21wKG5ldC0+YnNzaWQsIEJFTEtJTkY1RDgyMzM0VjNfUkFMSU5LLCAzKT09MCkgfHwKKwkgICAJICAgICAobWVtY21wKG5ldC0+YnNzaWQsIEJFTEtJTkY1RDgyMzM0VjNfUkFMSU5LLCAzKT09MCkgfHwKIAkJICAgICAobWVtY21wKG5ldC0+YnNzaWQsIFBDSV9SQUxJTkssIDMpPT0wKSB8fAogCQkgICAgIChtZW1jbXAobmV0LT5ic3NpZCwgRURJTUFYX1JBTElOSywgMyk9PTApIHx8CiAJCSAgICAgKG1lbWNtcChuZXQtPmJzc2lkLCBBSVJMSU5LX1JBTElOSywgMyk9PTApIHx8CkBAIC0zNjMsNyArMzY0LDcgQEAKIAllbHNlIGlmKChtZW1jbXAobmV0LT5ic3NpZCwgVU5LTk9XTl9CT1JBRENPTSwgMyk9PTApIHx8CiAgICAgCQkgICAgKG1lbWNtcChuZXQtPmJzc2lkLCBMSU5LU1lTV1JUMzMwX0xJTktTWVNXUlQzMDBfQlJPQURDT00sIDMpPT0wKXx8CiAgICAgCQkgICAgKG1lbWNtcChuZXQtPmJzc2lkLCBMSU5LU1lTV1JUMzUwX0xJTktTWVNXUlQxNTBfQlJPQURDT00sIDMpPT0wKXx8Ci0gICAgCQkgICAgKG1lbWNtcChuZXQtPmJzc2lkLCBORVRHRUFSODM0QnYyX0JST0FEQ09NLCAzKT09MCkgfHwKKyAgICAJCSAgICAvLyhtZW1jbXAobmV0LT5ic3NpZCwgTkVUR0VBUjgzNEJ2Ml9CUk9BRENPTSwgMyk9PTApIHx8CiAgICAgCQkgICAgKG5ldC0+YnJvYWRjb21fY2FwX2V4aXN0KSkKICAgICAJCSAgcmV0VmFsdWUgPSB0cnVlOwogCWVsc2UgaWYobmV0LT5ic3NodC5iZFJUMlJUQWdncmVnYXRpb24pCkBAIC0zODcsMTMgKzM4OCwxNSBAQAogCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayogbmV0ID0gJmllZWUtPmN1cnJlbnRfbmV0d29yazsKIAlpZihuZXQtPmJzc2h0LmJkUlQyUlRBZ2dyZWdhdGlvbikKIAkJcEhUSW5mby0+SU9UUGVlciA9IEhUX0lPVF9QRUVSX1JFQUxURUs7Ci0JZWxzZSBpZihuZXQtPmJyb2FkY29tX2NhcF9leGlzdCkKKwllbHNlIGlmKG5ldC0+YnJvYWRjb21fY2FwX2V4aXN0KXsKIAkJcEhUSW5mby0+SU9UUGVlciA9IEhUX0lPVF9QRUVSX0JST0FEQ09NOworCX0KIAllbHNlIGlmKChtZW1jbXAobmV0LT5ic3NpZCwgVU5LTk9XTl9CT1JBRENPTSwgMyk9PTApIHx8CiAJCQkobWVtY21wKG5ldC0+YnNzaWQsIExJTktTWVNXUlQzMzBfTElOS1NZU1dSVDMwMF9CUk9BRENPTSwgMyk9PTApfHwKLQkJCShtZW1jbXAobmV0LT5ic3NpZCwgTElOS1NZU1dSVDM1MF9MSU5LU1lTV1JUMTUwX0JST0FEQ09NLCAzKT09MCl8fAotCQkJKG1lbWNtcChuZXQtPmJzc2lkLCBORVRHRUFSODM0QnYyX0JST0FEQ09NLCAzKT09MCkgKQorCQkJKG1lbWNtcChuZXQtPmJzc2lkLCBMSU5LU1lTV1JUMzUwX0xJTktTWVNXUlQxNTBfQlJPQURDT00sIDMpPT0wKSl7Ly98fAorCQkJLy8obWVtY21wKG5ldC0+YnNzaWQsIE5FVEdFQVI4MzRCdjJfQlJPQURDT00sIDMpPT0wKSApewogCQlwSFRJbmZvLT5JT1RQZWVyID0gSFRfSU9UX1BFRVJfQlJPQURDT007CisJfQogCWVsc2UgaWYoKG1lbWNtcChuZXQtPmJzc2lkLCBCRUxLSU5GNUQ4MjMzVjFfUkFMSU5LLCAzKT09MCkgfHwKIAkJCShtZW1jbXAobmV0LT5ic3NpZCwgQkVMS0lORjVEODIzMzRWM19SQUxJTkssIDMpPT0wKSB8fAogCQkJKG1lbWNtcChuZXQtPmJzc2lkLCBQQ0lfUkFMSU5LLCAzKT09MCkgfHwKQEAgLTQwNSw2ICs0MDgsMTAgQEAKIAkJcEhUSW5mby0+SU9UUGVlciA9IEhUX0lPVF9QRUVSX0FUSEVST1M7CiAJZWxzZSBpZihtZW1jbXAobmV0LT5ic3NpZCwgQ0lTQ09fQlJPQURDT00sIDMpPT0wKQogCQlwSFRJbmZvLT5JT1RQZWVyID0gSFRfSU9UX1BFRVJfQ0lTQ087CisgICAgICAgIGVsc2UgaWYgKChtZW1jbXAobmV0LT5ic3NpZCwgTElOS1NZU19NQVJWRUxMXzQ0MDBOLCAzKSA9PSAwKSB8fAorCQkJbmV0LT5tYXJ2ZWxsX2NhcF9leGlzdCl7CisJCXBIVEluZm8tPklPVFBlZXIgPSBIVF9JT1RfUEVFUl9NQVJWRUxMOworCX0KIAllbHNlCiAJCXBIVEluZm8tPklPVFBlZXIgPSBIVF9JT1RfUEVFUl9VTktOT1dOOwogCkBAIC00NDIsNiArNDQ5LDE4IEBACiAJcmV0dXJuIHJldDsKICB9CiAKK3U4IEhUSU9UQWN0SXNGb3JjZWRDVFMyU2VsZihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrKQoreworICAgICAgICB1OCAgICAgIHJldFZhbHVlID0gMDsKKyAgICAgICAgLy9pZihuZXR3b3JrLT5tYXJ2ZWxsX2NhcF9leGlzdCkKKyAgICAgICAgaWYoaWVlZS0+cEhUSW5mby0+SU9UUGVlciA9PSBIVF9JT1RfUEVFUl9NQVJWRUxMKQorICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0VmFsdWUgPSAxOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldFZhbHVlOworfQorCiAKIC8qKgogKiBGdW5jdGlvbjoJSFRJT1RBY3RJc0Rpc2FibGVNQ1MxNQpAQCAtNTc4LDYgKzU5NywyMyBAQAogCXJldHVybiByZXRWYWx1ZTsKIH0KIAorLy8KKy8vICBTZW5kIG51bGwgZGF0YSBmb3IgdG8gdGVsbCBBUCB0aGF0IHdlIGFyZSBhd2FrZS4KKy8vCitib29sCitIVElPVEFjdElzTnVsbERhdGFQb3dlclNhdmluZyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSogaWVlZSxzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspCit7CisJYm9vbAlyZXRWYWx1ZSA9IGZhbHNlOworCisJUFJUX0hJR0hfVEhST1VHSFBVVAlwSFRJbmZvID0gaWVlZS0+cEhUSW5mbzsKKwl7CisJCWlmKHBIVEluZm8tPklPVFBlZXIgPT0gSFRfSU9UX1BFRVJfQlJPQURDT00pIC8vIHx8KHBCc3NEZXNjLT5WZW5kZXIgPT0gSFRfSU9UX1BFRVJfQVRIRVJPUyAmJiBwQnNzRGVzYy0+U3ViVHlwZU9mVmVuZGVyID09IEhUX0lPVF9QRUVSX0FUSEVST1NfRElSNjM1KSkKKwkJCXJldHVybiB0cnVlOworCisJfQorCXJldHVybiByZXRWYWx1ZTsKK30KKwogdm9pZCBIVFJlc2V0SU9UU2V0dGluZygKIAlQUlRfSElHSF9USFJPVUdIUFVUCQlwSFRJbmZvCiApCkBAIC0xMDcxLDYgKzExMDcsMTMgQEAKIAkvLyBDb25maWcgYW5kIGNvbmZpZ3VyZSBBLU1TRFUgc2V0dGluZwogCS8vCiAJcEhUSW5mby0+YkN1cnJlbnRfQU1TRFVfU3VwcG9ydCA9IHBIVEluZm8tPmJBTVNEVV9TdXBwb3J0OworICAgICAgICBpZiAoaWVlZS0+cnRsbGliX2FwX3NlY190eXBlICYmCisgICAgICAgICAgIChpZWVlLT5ydGxsaWJfYXBfc2VjX3R5cGUoaWVlZSkmKFNFQ19BTEdfV0VQfFNFQ19BTEdfVEtJUCkpKXsKKyAgICAgICAgICAgICAgICBpZiggKHBIVEluZm8tPklPVFBlZXI9PSBIVF9JT1RfUEVFUl9BVEhFUk9TKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocEhUSW5mby0+SU9UUGVlciA9PSBIVF9JT1RfUEVFUl9VTktOT1dOKSApCisgICAgICAgICAgICAgICAgICAgICAgICBwSFRJbmZvLT5iQ3VycmVudEFNUERVRW5hYmxlID0gZmFsc2U7CisgICAgICAgIH0KKwogCiAJbk1heEFNU0RVU2l6ZSA9IChwUGVlckhUQ2FwLT5NYXhBTVNEVVNpemU9PTApPzM4Mzk6NzkzNTsKIApAQCAtMTUxNSw2ICsxNTU4LDkgQEAKIAkJYklPVEFjdGlvbiA9IEhUSU9UQWN0SXNEaXNhYmxlTUNTMTQoaWVlZSwgcE5ldHdvcmstPmJzc2lkKTsKIAkJaWYoYklPVEFjdGlvbikKIAkJCXBIVEluZm8tPklPVEFjdGlvbiB8PSBIVF9JT1RfQUNUX0RJU0FCTEVfTUNTMTQ7CisJCWJJT1RBY3Rpb24gPSBIVElPVEFjdElzRm9yY2VkQ1RTMlNlbGYoaWVlZSwgcE5ldHdvcmspOworCQlpZihiSU9UQWN0aW9uKQorCQkJcEhUSW5mby0+SU9UQWN0aW9uIHw9IEhUX0lPVF9BQ1RfRk9SQ0VEX0NUUzJTRUxGOwogCiAJCWJJT1RBY3Rpb24gPSBIVElPVEFjdElzRGlzYWJsZU1DUzE1KGllZWUpOwogCQlpZihiSU9UQWN0aW9uKQpAQCAtMTUzNyw2ICsxNTgzLDkgQEAKIAkJaWYoYklPVEFjdGlvbikKIAkJCXBIVEluZm8tPklPVEFjdGlvbiB8PSBIVF9JT1RfQUNUX0NERF9GU1lOQzsKIAorCQliSU9UQWN0aW9uID0gSFRJT1RBY3RJc051bGxEYXRhUG93ZXJTYXZpbmcoaWVlZSwgcE5ldHdvcmspOworCQlpZihiSU9UQWN0aW9uKQorCQkJcEhUSW5mby0+SU9UQWN0aW9uIHw9IEhUX0lPVF9BQ1RfTlVMTF9EQVRBX1BPV0VSX1NBVklORzsKIAogCX0KIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL3J0bDgxOXhfVFNQcm9jLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL3J0bDgxOXhfVFNQcm9jLmMKaW5kZXggMjgxNmI2MC4uZTJjYmZkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X1RTUHJvYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9UU1Byb2MuYwpAQCAtMzA0LDcgKzMwNCw3IEBACiAJCWlmKHNlYXJjaF9kaXJbZGlyXSA9PWZhbHNlICkKIAkJCWNvbnRpbnVlOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBSZXQsIHBzZWFyY2hfbGlzdCwgTGlzdCl7Ci0JLy8JCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFMsICJBREQ6Ik1BQ19GTVQiLCBUSUQ6JWQsIGRpcjolZFxuIiwgTUFDX0FSRyhwUmV0LT5BZGRyKSwgcFJldC0+VFNwZWMuZi5UU0luZm8uZmllbGQudWNUU0lELCBwUmV0LT5UU3BlYy5mLlRTSW5mby5maWVsZC51Y0RpcmVjdGlvbik7CisJLy8JCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFMsICJBREQ6JXBNLCBUSUQ6JWQsIGRpcjolZFxuIiwgcFJldC0+QWRkciwgcFJldC0+VFNwZWMuZi5UU0luZm8uZmllbGQudWNUU0lELCBwUmV0LT5UU3BlYy5mLlRTSW5mby5maWVsZC51Y0RpcmVjdGlvbik7CiAJCQlpZiAobWVtY21wKHBSZXQtPkFkZHIsIEFkZHIsIDYpID09IDApCiAJCQkJaWYgKHBSZXQtPlRTcGVjLmYuVFNJbmZvLmZpZWxkLnVjVFNJRCA9PSBUSUQpCiAJCQkJCWlmKHBSZXQtPlRTcGVjLmYuVFNJbmZvLmZpZWxkLnVjRGlyZWN0aW9uID09IGRpcikKQEAgLTQ2Niw3ICs0NjYsNyBAQAogCQkJCQlSZXNldFJ4VHNFbnRyeSh0bXApOwogCQkJCX0KIAotCQkJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFMsICJ0byBpbml0IGN1cnJlbnQgVFMsIFVQOiVkLCBEaXI6JWQsIGFkZHI6Ik1BQ19GTVQiXG4iLCBVUCwgRGlyLCBNQUNfQVJHKEFkZHIpKTsKKwkJCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RTLCAidG8gaW5pdCBjdXJyZW50IFRTLCBVUDolZCwgRGlyOiVkLCBhZGRyOiVwTVxuIiwgVVAsIERpciwgQWRkcik7CiAJCQkJLy8gUHJlcGFyZSBUUyBJbmZvIHJlbGVhdGVkIGZpZWxkCiAJCQkJcFRTSW5mby0+ZmllbGQudWNUcmFmZmljVHlwZSA9IDA7CQkJLy8gVHJhZmZpYyB0eXBlOiBXTU0gaXMgcmVzZXJ2ZWQgaW4gdGhpcyBmaWVsZAogCQkJCXBUU0luZm8tPmZpZWxkLnVjVFNJRCA9IFVQOwkJCS8vIFRTSUQKQEAgLTU1Miw3ICs1NTIsNyBAQAogdm9pZCBSZW1vdmVQZWVyVFMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UqIGllZWUsIHU4KiBBZGRyKQogewogCVBUU19DT01NT05fSU5GTwlwVFMsIHBUbXBUUzsKLQlwcmludGsoIj09PT09PT09PT09PlJlbW92ZVBlZXJUUywiTUFDX0ZNVCJcbiIsIE1BQ19BUkcoQWRkcikpOworCXByaW50aygiPT09PT09PT09PT0+UmVtb3ZlUGVlclRTLCVwTVxuIiwgQWRkcik7CiAjaWYgMQogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwVFMsIHBUbXBUUywgJmllZWUtPlR4X1RTX1BlbmRpbmdfTGlzdCwgTGlzdCkKIAl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxODBfOTNjeDYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE4MF85M2N4Ni5jCmluZGV4IDc5ZjdhMGYuLjI2MmVkNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE4MF85M2N4Ni5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE4MF85M2N4Ni5jCkBAIC0yMiw3ICsyMiw3IEBACiAKIHN0YXRpYyB2b2lkIGVwcm9tX2NzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHNob3J0IGJpdCkKIHsKLQlpZihiaXQpCisJaWYgKGJpdCkKIAkJd3JpdGVfbmljX2J5dGUoZGV2LCBFUFJPTV9DTUQsCiAJCQkgICAgICAgKDE8PEVQUk9NX0NTX1NISUZUKSB8IFwKIAkJCSAgICAgICByZWFkX25pY19ieXRlKGRldiwgRVBST01fQ01EKSk7IC8vZW5hYmxlIEVQUk9NCkBAIC0zOCwyMyArMzgsMjMgQEAKIHN0YXRpYyB2b2lkIGVwcm9tX2NrX2N5Y2xlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJd3JpdGVfbmljX2J5dGUoZGV2LCBFUFJPTV9DTUQsCi0JCSAgICAgICAoMTw8RVBST01fQ0tfU0hJRlQpIHwgcmVhZF9uaWNfYnl0ZShkZXYsRVBST01fQ01EKSk7CisJCSAgICAgICAoMTw8RVBST01fQ0tfU0hJRlQpIHwgcmVhZF9uaWNfYnl0ZShkZXYsIEVQUk9NX0NNRCkpOwogCWZvcmNlX3BjaV9wb3N0aW5nKGRldik7CiAJdWRlbGF5KEVQUk9NX0RFTEFZKTsKIAl3cml0ZV9uaWNfYnl0ZShkZXYsIEVQUk9NX0NNRCwKLQkJICAgICAgIHJlYWRfbmljX2J5dGUoZGV2LCBFUFJPTV9DTUQpICZ+ICgxPDxFUFJPTV9DS19TSElGVCkpOworCQkgICAgICAgcmVhZF9uaWNfYnl0ZShkZXYsIEVQUk9NX0NNRCkgJiB+KDE8PEVQUk9NX0NLX1NISUZUKSk7CiAJZm9yY2VfcGNpX3Bvc3RpbmcoZGV2KTsKIAl1ZGVsYXkoRVBST01fREVMQVkpOwogfQogCiAKLXN0YXRpYyB2b2lkIGVwcm9tX3coc3RydWN0IG5ldF9kZXZpY2UgKmRldixzaG9ydCBiaXQpCitzdGF0aWMgdm9pZCBlcHJvbV93KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHNob3J0IGJpdCkKIHsKLQlpZihiaXQpCisJaWYgKGJpdCkKIAkJd3JpdGVfbmljX2J5dGUoZGV2LCBFUFJPTV9DTUQsICgxPDxFUFJPTV9XX1NISUZUKSB8IFwKLQkJCSAgICAgICByZWFkX25pY19ieXRlKGRldixFUFJPTV9DTUQpKTsKKwkJCSAgICAgICByZWFkX25pY19ieXRlKGRldiwgRVBST01fQ01EKSk7CiAJZWxzZQotCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEVQUk9NX0NNRCwgcmVhZF9uaWNfYnl0ZShkZXYsRVBST01fQ01EKVwKKwkJd3JpdGVfbmljX2J5dGUoZGV2LCBFUFJPTV9DTUQsIHJlYWRfbmljX2J5dGUoZGV2LCBFUFJPTV9DTUQpXAogCQkJICAgICAgICZ+KDE8PEVQUk9NX1dfU0hJRlQpKTsKIAogCWZvcmNlX3BjaV9wb3N0aW5nKGRldik7CkBAIC02NiwxMCArNjYsMTEgQEAKIHsKIAlzaG9ydCBiaXQ7CiAKLQliaXQ9KHJlYWRfbmljX2J5dGUoZGV2LCBFUFJPTV9DTUQpICYgKDE8PEVQUk9NX1JfU0hJRlQpICk7CisJYml0ID0gKHJlYWRfbmljX2J5dGUoZGV2LCBFUFJPTV9DTUQpICYgKDE8PEVQUk9NX1JfU0hJRlQpKTsKIAl1ZGVsYXkoRVBST01fREVMQVkpOwogCi0JaWYoYml0KSByZXR1cm4gMTsKKwlpZiAoYml0KQorCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzgsNyArNzksNyBAQAogewogCWludCBpOwogCi0JZm9yKGk9MDsgaTxsZW47IGkrKyl7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAJCWVwcm9tX3coZGV2LCBiW2ldKTsKIAkJZXByb21fY2tfY3ljbGUoZGV2KTsKIAl9CkBAIC04OCwzNyArODksMzcgQEAKIHUzMiBlcHJvbV9yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBhZGRyKQogewogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQlzaG9ydCByZWFkX2NtZFtdPXsxLDEsMH07CisJc2hvcnQgcmVhZF9jbWRbXSA9IHsxLCAxLCAwfTsKIAlzaG9ydCBhZGRyX3N0cls4XTsKIAlpbnQgaTsKIAlpbnQgYWRkcl9sZW47CiAJdTMyIHJldDsKIAotCXJldD0wOworCXJldCA9IDA7CiAgICAgICAgIC8vZW5hYmxlIEVQUk9NIHByb2dyYW1taW5nCiAJd3JpdGVfbmljX2J5dGUoZGV2LCBFUFJPTV9DTUQsCiAJCSAgICAgICAoRVBST01fQ01EX1BST0dSQU08PEVQUk9NX0NNRF9PUEVSQVRJTkdfTU9ERV9TSElGVCkpOwogCWZvcmNlX3BjaV9wb3N0aW5nKGRldik7CiAJdWRlbGF5KEVQUk9NX0RFTEFZKTsKIAotCWlmIChwcml2LT5lcHJvbXR5cGU9PUVQUk9NXzkzYzU2KXsKLQkJYWRkcl9zdHJbN109YWRkciAmIDE7Ci0JCWFkZHJfc3RyWzZdPWFkZHIgJiAoMTw8MSk7Ci0JCWFkZHJfc3RyWzVdPWFkZHIgJiAoMTw8Mik7Ci0JCWFkZHJfc3RyWzRdPWFkZHIgJiAoMTw8Myk7Ci0JCWFkZHJfc3RyWzNdPWFkZHIgJiAoMTw8NCk7Ci0JCWFkZHJfc3RyWzJdPWFkZHIgJiAoMTw8NSk7Ci0JCWFkZHJfc3RyWzFdPWFkZHIgJiAoMTw8Nik7Ci0JCWFkZHJfc3RyWzBdPWFkZHIgJiAoMTw8Nyk7Ci0JCWFkZHJfbGVuPTg7Ci0JfWVsc2V7Ci0JCWFkZHJfc3RyWzVdPWFkZHIgJiAxOwotCQlhZGRyX3N0cls0XT1hZGRyICYgKDE8PDEpOwotCQlhZGRyX3N0clszXT1hZGRyICYgKDE8PDIpOwotCQlhZGRyX3N0clsyXT1hZGRyICYgKDE8PDMpOwotCQlhZGRyX3N0clsxXT1hZGRyICYgKDE8PDQpOwotCQlhZGRyX3N0clswXT1hZGRyICYgKDE8PDUpOwotCQlhZGRyX2xlbj02OworCWlmIChwcml2LT5lcHJvbXR5cGUgPT0gRVBST01fOTNjNTYpIHsKKwkJYWRkcl9zdHJbN10gPSBhZGRyICYgMTsKKwkJYWRkcl9zdHJbNl0gPSBhZGRyICYgKDE8PDEpOworCQlhZGRyX3N0cls1XSA9IGFkZHIgJiAoMTw8Mik7CisJCWFkZHJfc3RyWzRdID0gYWRkciAmICgxPDwzKTsKKwkJYWRkcl9zdHJbM10gPSBhZGRyICYgKDE8PDQpOworCQlhZGRyX3N0clsyXSA9IGFkZHIgJiAoMTw8NSk7CisJCWFkZHJfc3RyWzFdID0gYWRkciAmICgxPDw2KTsKKwkJYWRkcl9zdHJbMF0gPSBhZGRyICYgKDE8PDcpOworCQlhZGRyX2xlbiA9IDg7CisJfSBlbHNlIHsKKwkJYWRkcl9zdHJbNV0gPSBhZGRyICYgMTsKKwkJYWRkcl9zdHJbNF0gPSBhZGRyICYgKDE8PDEpOworCQlhZGRyX3N0clszXSA9IGFkZHIgJiAoMTw8Mik7CisJCWFkZHJfc3RyWzJdID0gYWRkciAmICgxPDwzKTsKKwkJYWRkcl9zdHJbMV0gPSBhZGRyICYgKDE8PDQpOworCQlhZGRyX3N0clswXSA9IGFkZHIgJiAoMTw8NSk7CisJCWFkZHJfbGVuID0gNjsKIAl9CiAJZXByb21fY3MoZGV2LCAxKTsKIAllcHJvbV9ja19jeWNsZShkZXYpOwpAQCAtMTI5LDcgKzEzMCw3IEBACiAJLy9JJ20gdW5zdXJlIGlmIGl0IGlzIG5lY2Vzc2FyeSwgYnV0IGFueXdheSBzaG91bGRuJ3QgaHVydAogCWVwcm9tX3coZGV2LCAwKTsKIAotCWZvcihpPTA7aTwxNjtpKyspeworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAJCS8vZWVwcm9tIG5lZWRzIGEgY2xrIGN5Y2xlIGJldHdlZW4gd3JpdGluZyBvcGNvZGUmYWRyCiAJCS8vYW5kIHJlYWRpbmcgZGF0YS4gKGVlcHJvbSBvdXRzIGEgZHVtbXkgMCkKIAkJZXByb21fY2tfY3ljbGUoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE4MF85M2N4Ni5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTgwXzkzY3g2LmgKaW5kZXggNjJlMTRjNy4uNGMzZjY3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTgwXzkzY3g2LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTgwXzkzY3g2LmgKQEAgLTEsMTcgKzEsMTggQEAKLS8qCi0JVGhpcyBpcyBwYXJ0IG9mIHJ0bDgxODcgT3BlblNvdXJjZSBkcml2ZXIKLQlDb3B5cmlnaHQgKEMpIEFuZHJlYSBNZXJlbGxvIDIwMDQtMjAwNSAgPGFuZHJlYW1ybEB0aXNjYWxpLml0PgotCVJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiBHUEwgKEdlbmVyYWwgUHVibGljIExpY2VuY2UpCi0KLQlQYXJ0cyBvZiB0aGlzIGRyaXZlciBhcmUgYmFzZWQgb24gdGhlIEdQTCBwYXJ0IG9mIHRoZSBvZmZpY2lhbCByZWFsdGVrIGRyaXZlcgotCVBhcnRzIG9mIHRoaXMgZHJpdmVyIGFyZSBiYXNlZCBvbiB0aGUgcnRsODE4MCBkcml2ZXIgc2tlbGV0b24gZnJvbSBQYXRyaWMgU2NoZW5rZSAmIEFuZHJlcyBTYWxvbW9uCi0JUGFydHMgb2YgdGhpcyBkcml2ZXIgYXJlIGJhc2VkIG9uIHRoZSBJbnRlbCBQcm8gV2lyZWxlc3MgMjEwMCBHUEwgZHJpdmVyCi0KLQlXZSB3YW50IHRvIHRhbmtzIHRoZSBBdXRob3JzIG9mIHN1Y2ggcHJvamVjdHMgYW5kIHRoZSBOZGlzd3JhcHBlciBwcm9qZWN0IEF1dGhvcnMuCi0qLwotCi0vKlRoaXMgZmlsZXMgY29udGFpbnMgY2FyZCBlZXByb20gKDkzYzQ2IG9yIDkzYzU2KSBwcm9ncmFtbWluZyByb3V0aW5lcyovCi0vKm1lbW9yeSBpcyBhZGRyZXNzZWQgYnkgV09SRFMqLworLyogcjgxODBfOTNjeDYuaCAtIDkzYzQ2IG9yIDkzYzU2IGVlcHJvbSBjYXJkIHByb2dyYW1taW5nIHJvdXRpbmVzCisgKgorICogVGhpcyBpcyBwYXJ0IG9mIHJ0bDgxODcgT3BlblNvdXJjZSBkcml2ZXIKKyAqIENvcHlyaWdodCAoQykgQW5kcmVhIE1lcmVsbG8gMjAwNC0yMDA1ICA8YW5kcmVhbXJsQHRpc2NhbGkuaXQ+CisgKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgR1BMIChHZW5lcmFsIFB1YmxpYyBMaWNlbmNlKQorICogUGFydHMgb2YgdGhpcyBkcml2ZXIgYXJlIGJhc2VkIG9uIHRoZSBHUEwgcGFydCBvZiB0aGUgb2ZmaWNpYWwgcmVhbHRlayBkcml2ZXIKKyAqCisgKiBQYXJ0cyBvZiB0aGlzIGRyaXZlciBhcmUgYmFzZWQgb24gdGhlIHJ0bDgxODAgZHJpdmVyIHNrZWxldG9uIGZyb20KKyAqIFBhdHJpYyBTY2hlbmtlICYgQW5kcmVzIFNhbG9tb24uCisgKgorICogUGFydHMgb2YgdGhpcyBkcml2ZXIgYXJlIGJhc2VkIG9uIHRoZSBJbnRlbCBQcm8gV2lyZWxlc3MgMjEwMCBHUEwgZHJpdmVyCisgKgorICogV2Ugd2FudCB0byB0aGFuayB0aGUgYXV0aG9ycyBvZiB0aGUgYWJvdmUgbWVudGlvbmVkIHByb2plY3RzIGFuZCB0bworICogdGhlIGF1dGhvcnMgb2YgdGhlIE5kaXN3cmFwcGVyIHByb2plY3QuCisgKi8KIAogI2luY2x1ZGUgInI4MTkyRS5oIgogI2luY2x1ZGUgInI4MTkyRV9ody5oIgpAQCAtMzYsNSArMzcsNSBAQAogI2RlZmluZSBFUFJPTV9UWFBXMiAweDFiCiAjZGVmaW5lIEVQUk9NX1RYUFcxIDB4M2QKIAotCi11MzIgZXByb21fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LHUzMiBhZGRyKTsgLy9yZWFkcyBhIDE2IGJpdHMgd29yZAorLyogUmVhZHMgYSAxNiBiaXRzIHdvcmQuICovCit1MzIgZXByb21fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgYWRkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTBfcnRsODI1Ni5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkwX3J0bDgyNTYuYwppbmRleCAzZDY3ZmJiLi4xYmQwNTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTBfcnRsODI1Ni5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MF9ydGw4MjU2LmMKQEAgLTQyOSwxMSArNDI5LDEyIEBACiAJYm9vbCBiUmVzdWx0ID0gdHJ1ZTsKIAkvL3U4IGVSRlBhdGg7CiAJdTgJaSA9IDAsIFF1ZXVlSUQgPSAwOwotCXB0eF9yaW5nCWhlYWQ9TlVMTCx0YWlsPU5VTEw7CisJLy9wdHhfcmluZwloZWFkPU5VTEwsdGFpbD1OVUxMOworCXN0cnVjdCBydGw4MTkyX3R4X3JpbmcgICpyaW5nID0gTlVMTDsKIAogCWlmKHByaXYtPlNldFJGUG93ZXJTdGF0ZUluUHJvZ3Jlc3MgPT0gdHJ1ZSkKIAkJcmV0dXJuIGZhbHNlOwotCVJUX1RSQUNFKENPTVBfUE9XRVIsICI9PT09PT09PT09PT4gU2V0UkZQb3dlclN0YXRlODE5MCgpIVxuIik7CisJLy9SVF9UUkFDRShDT01QX1BTLCAiPT09PT09PT09PT0+IFNldFJGUG93ZXJTdGF0ZTgxOTAoKSFcbiIpOwogCXByaXYtPlNldFJGUG93ZXJTdGF0ZUluUHJvZ3Jlc3MgPSB0cnVlOwogCiAJc3dpdGNoKHByaXYtPnJmX2NoaXApCkBAIC00NDIsMTEgKzQ0MywxMSBAQAogCQlzd2l0Y2goIGVSRlBvd2VyU3RhdGUgKQogCQl7CiAJCQljYXNlIGVSZk9uOgotCQkJCVJUX1RSQUNFKENPTVBfUE9XRVIsICJTZXRSRlBvd2VyU3RhdGU4MTkwKCkgZVJmT24gIVxuIik7CisJCQkJLy9SVF9UUkFDRShDT01QX1BTLCAiU2V0UkZQb3dlclN0YXRlODE5MCgpIGVSZk9uICFcbiIpOwogCQkJCQkJLy9SWFRYIGVuYWJsZSBjb250cm9sOiBPbgogCQkJCQkvL2ZvcihlUkZQYXRoID0gMDsgZVJGUGF0aCA8cEhhbERhdGEtPk51bVRvdGFsUkZQYXRoOyBlUkZQYXRoKyspCi0JCQkJCS8vCVBIWV9TZXRSRlJlZyhBZGFwdGVyLCAoUkY5MF9SQURJT19QQVRIX0UpZVJGUGF0aCwgMHg0LCAweEMwMCwgMHgyKTsKLQkJCQkjaWZkZWYgUlRMODE5MFAKKwkJCQkJLy8JUEhZX1NldFJGUmVnKGRldiwgKFJGOTBfUkFESU9fUEFUSF9FKWVSRlBhdGgsIDB4NCwgMHhDMDAsIDB4Mik7CisjaWZkZWYgUlRMODE5MFAKIAkJCQlpZihwcml2LT5yZl90eXBlID09IFJGXzJUNFIpCiAJCQkJewogCQkJCQkvL2VuYWJsZSBSRi1DaGlwIEEvQgpAQCAtNDc5LDM2ICs0ODAsOTIgQEAKIAkJCQkJLy9hbmFsb2cgdG8gZGlnaXRhbCBwYXJ0MiBvbgogCQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjEsIDB4MTgwMCwgMHgzKTsgLy8gMHg4ODBbMTI6MTFdCiAJCQkJfQotCQkJCSNlbHNlCi0JCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBBTkFQQVIsIDB4MzcpOy8vMTYwTUh6Ci0JCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBNYWNCbGtDdHJsLCAweDE3KTsgLy8gMHg0MDMKLQkJCQltZGVsYXkoMSk7Ci0JCQkJLy9lbmFibGUgY2xvY2sgODAvODggTUh6CisJCQkJZWxzZSBpZihwcml2LT5yZl90eXBlID09IFJGXzFUMVIpCS8vUkYtQworCQkJCXsKKwkJCQkJLy9lbmFibGUgUkYtQ2hpcCBDL0QKKwkJCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9YQ19SRkludGVyZmFjZU9FLCBCSVQ0LCAweDEpOyAvLyAweDg2OFs0XQorCQkJCQkvL2FuYWxvZyB0byBkaWdpdGFsIG9uCisJCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyNCwgMHg0MDAsIDB4MSk7Ly8gMHg4OGNbMTBdCisJCQkJCS8vZGlnaXRhbCB0byBhbmFsb2cgb24KKwkJCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXIxLCAweDgwLCAweDEpOyAvLyAweDg4MFs3XQorCQkJCQkvL3J4IGFudGVubmEgb24KKwkJCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJPRkRNMF9UUnhQYXRoRW5hYmxlLCAweDQsIDB4MSk7Ly8gMHhjMDRbMl0KKwkJCQkJLy9yeCBhbnRlbm5hIG9uCisJCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByT0ZETTFfVFJ4UGF0aEVuYWJsZSwgMHg0LCAweDEpOy8vIDB4ZDA0WzJdCisJCQkJCS8vYW5hbG9nIHRvIGRpZ2l0YWwgcGFydDIgb24KKwkJCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXIxLCAweDgwMCwgMHgxKTsgLy8gMHg4ODBbMTFdCisJCQkJfQogCi0JCQkJcHJpdi0+Ykh3UmZPZmZBY3Rpb24gPSAwOwotCQkJCS8vfQorI2VsaWYgZGVmaW5lZCBSVEw4MTkyRQorCQkJCS8vIHR1cm4gb24gUkYKKwkJCQlpZigocHJpdi0+aWVlZTgwMjExLT5lUkZQb3dlclN0YXRlID09IGVSZk9mZikgJiYgUlRfSU5fUFNfTEVWRUwocFBTQywgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpKQorCQkJCXsgLy8gVGhlIGN1cnJlbnQgUkYgc3RhdGUgaXMgT0ZGIGFuZCB0aGUgUkYgT0ZGIGxldmVsIGlzIGhhbHRpbmcgdGhlIE5JQywgcmUtaW5pdGlhbGl6ZSB0aGUgTklDLgorCQkJCQlib29sIHJ0c3RhdHVzID0gdHJ1ZTsKKwkJCQkJdTMyIEluaXRpbGl6ZUNvdW50ID0gMzsKKwkJCQkJZG8KKwkJCQkJeworCQkJCQkJSW5pdGlsaXplQ291bnQtLTsKKwkJCQkJCXByaXYtPlJlZ1JmT2ZmID0gZmFsc2U7CisJCQkJCQlydHN0YXR1cyA9IE5pY0lGRW5hYmxlTklDKGRldik7CisJCQkJCX13aGlsZSggKHJ0c3RhdHVzICE9IHRydWUpICYmKEluaXRpbGl6ZUNvdW50ID4wKSApOwogCi0JCQkJLy8gQmFzZWJhbmQgcmVzZXQgMjAwOC4wOS4zMCBhZGQKLQkJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEJCX1JFU0VULCAocmVhZF9uaWNfYnl0ZShkZXYsIEJCX1JFU0VUKXxCSVQwKSk7CisJCQkJCWlmKHJ0c3RhdHVzICE9IHRydWUpCisJCQkJCXsKKwkJCQkJCVJUX1RSQUNFKENPTVBfRVJSLCIlcygpOkluaXRpYWxpemUgQWRhcHRlciBmYWlsLHJldHVyblxuIixfX0ZVTkNUSU9OX18pOworCQkJCQkJcHJpdi0+U2V0UkZQb3dlclN0YXRlSW5Qcm9ncmVzcyA9IGZhbHNlOworCQkJCQkJcmV0dXJuIGZhbHNlOworCQkJCQl9CiAKLQkJCQkvLzIgQUZFCi0JCQkJLy8gMjAwOC4wOS4zMCBhZGQKLQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjIsIDB4MjAwMDAwMDAsIDB4MSk7IC8vIDB4ODg0Ci0JCQkJLy9hbmFsb2cgdG8gZGlnaXRhbCBwYXJ0MiBvbgotCQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjEsIDB4NjAsIDB4Myk7CQkvLyAweDg4MFs2OjVdCi0JCQkJLy9kaWdpdGFsIHRvIGFuYWxvZyBvbgotCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyMSwgMHg5OCwgMHgxMyk7IC8vIDB4ODgwWzQ6M10KLQkJCQkvL2FuYWxvZyB0byBkaWdpdGFsIG9uCi0JCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXI0LCAweGYwMywgMHhmMDMpOy8vIDB4ODhjWzk6OF0KLQkJCQkvL3J4IGFudGVubmEgb24KLQkJCQkvL1BIWV9TZXRCQlJlZyhBZGFwdGVyLCByT0ZETTBfVFJ4UGF0aEVuYWJsZSwgMHgzLCAweDMpOy8vIDB4YzA0WzE6MF0KLQkJCQkvL3J4IGFudGVubmEgb24gMjAwOC4wOS4zMCBtYXJrCi0JCQkJLy9QSFlfU2V0QkJSZWcoQWRhcHRlciwgck9GRE0xX1RSeFBhdGhFbmFibGUsIDB4MywgMHgzKTsvLyAweGQwNFsxOjBdCisJCQkJCVJUX0NMRUFSX1BTX0xFVkVMKHBQU0MsIFJUX1JGX09GRl9MRVZMX0hBTFRfTklDKTsKKwkJCQl9IGVsc2UgeworCQkJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEFOQVBBUiwgMHgzNyk7Ly8xNjBNSHoKKwkJCQkJLy93cml0ZV9uaWNfYnl0ZShkZXYsIE1hY0Jsa0N0cmwsIDB4MTcpOyAvLyAweDQwMworCQkJCQltZGVsYXkoMSk7CisJCQkJCS8vZW5hYmxlIGNsb2NrIDgwLzg4IE1IegorCQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjEsIDB4NCwgMHgxKTsgLy8gMHg4ODBbMl0KKwkJCQkJcHJpdi0+Ykh3UmZPZmZBY3Rpb24gPSAwOworCQkJCQkvL30KIAotCQkJCS8vMiBSRgotCQkJCS8vZW5hYmxlIFJGLUNoaXAgQS9CCisJCQkJCS8vUkYtQSwgUkYtQgorCQkJCQkvL2VuYWJsZSBSRi1DaGlwIEEvQgogCQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX1hBX1JGSW50ZXJmYWNlT0UsIEJJVDQsIDB4MSk7CQkvLyAweDg2MFs0XQotCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfWEJfUkZJbnRlcmZhY2VPRSwgQklUNCwgMHgxKTsJCS8vIDB4ODY0WzRdCisJCQkJCS8vYW5hbG9nIHRvIGRpZ2l0YWwgb24KKwkJCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXI0LCAweDMwMCwgMHgzKTsvLyAweDg4Y1s5OjhdCisJCQkJCS8vZGlnaXRhbCB0byBhbmFsb2cgb24KKwkJCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXIxLCAweDE4LCAweDMpOyAvLyAweDg4MFs0OjNdCisJCQkJCS8vcnggYW50ZW5uYSBvbgorCQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgck9GRE0wX1RSeFBhdGhFbmFibGUsIDB4MywgMHgzKTsvLyAweGMwNFsxOjBdCisJCQkJCS8vcnggYW50ZW5uYSBvbgorCQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgck9GRE0xX1RSeFBhdGhFbmFibGUsIDB4MywgMHgzKTsvLyAweGQwNFsxOjBdCisJCQkJCS8vYW5hbG9nIHRvIGRpZ2l0YWwgcGFydDIgb24KKwkJCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXIxLCAweDYwLCAweDMpOyAJLy8gMHg4ODBbNjo1XQorCisJCQkJCS8vIEJhc2ViYW5kIHJlc2V0IDIwMDguMDkuMzAgYWRkCisJCQkJCS8vd3JpdGVfbmljX2J5dGUoZGV2LCBCQl9SRVNFVCwgKHJlYWRfbmljX2J5dGUoZGV2LCBCQl9SRVNFVCl8QklUMCkpOworCisJCQkJLy8yIAlBRkUKKwkJCQkJLy8gMjAwOC4wOS4zMCBhZGQKKwkJCQkJLy9ydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjIsIDB4MjAwMDAwMDAsIDB4MSk7IC8vIDB4ODg0CisJCQkJCS8vYW5hbG9nIHRvIGRpZ2l0YWwgcGFydDIgb24KKwkJCQkJLy9ydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjEsIDB4NjAsIDB4Myk7CQkvLyAweDg4MFs2OjVdCisKKworCQkJCQkvL2RpZ2l0YWwgdG8gYW5hbG9nIG9uCisJCQkJCS8vcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXIxLCAweDk4LCAweDEzKTsgLy8gMHg4ODBbNDozXQorCQkJCQkvL2FuYWxvZyB0byBkaWdpdGFsIG9uCisJCQkJCS8vcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXI0LCAweGYwMywgMHhmMDMpOy8vIDB4ODhjWzk6OF0KKwkJCQkJLy9yeCBhbnRlbm5hIG9uCisJCQkJCS8vUEhZX1NldEJCUmVnKGRldiwgck9GRE0wX1RSeFBhdGhFbmFibGUsIDB4MywgMHgzKTsvLyAweGMwNFsxOjBdCisJCQkJCS8vcnggYW50ZW5uYSBvbiAyMDA4LjA5LjMwIG1hcmsKKwkJCQkJLy9QSFlfU2V0QkJSZWcoZGV2LCByT0ZETTFfVFJ4UGF0aEVuYWJsZSwgMHgzLCAweDMpOy8vIDB4ZDA0WzE6MF0KKworCQkJCS8vMiAJUkYKKwkJCQkJLy9lbmFibGUgUkYtQ2hpcCBBL0IKKwkJCQkJLy9ydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX1hBX1JGSW50ZXJmYWNlT0UsIEJJVDQsIDB4MSk7CQkvLyAweDg2MFs0XQorCQkJCQkvL3J0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfWEJfUkZJbnRlcmZhY2VPRSwgQklUNCwgMHgxKTsJCS8vIDB4ODY0WzRdCisKKwkJCQl9CisKIAkJCQkjZW5kaWYKIAkJCQkJCWJyZWFrOwogCkBAIC01MTcsMTE5ICs1NzQsMTM3IEBACiAJCQkJLy8gQnkgQnJ1Y2UsIDIwMDgtMDEtMTYuCiAJCQkJLy8KIAkJCWNhc2UgZVJmU2xlZXA6Ci0JCQljYXNlIGVSZk9mZjoKLQkJCQlSVF9UUkFDRShDT01QX1BPV0VSLCAiU2V0UkZQb3dlclN0YXRlODE5MCgpIGVSZk9mZi9TbGVlcCAhXG4iKTsKLQkJCQlpZiAocFBTQy0+YkxlaXN1cmVQcykKKwkJCXsKKwkJCQkvLyBIVyBzZXR0aW5nIGhhZCBiZWVuIGNvbmZpZ3VyZWQgd2l0aCBkZWVwZXIgbW9kZS4KKwkJCQlpZihwcml2LT5pZWVlODAyMTEtPmVSRlBvd2VyU3RhdGUgPT0gZVJmT2ZmKQorCQkJCQlicmVhazsKKworCQkJCS8vIFVwZGF0ZSBjdXJyZW50IFJGIHN0YXRlIHZhcmlhYmxlLgorCQkJCS8vcHJpdi0+aWVlZTgwMjExLT5lUkZQb3dlclN0YXRlID0gZVJGUG93ZXJTdGF0ZTsKKworCQkJCS8vaWYgKHBQU0MtPmJMZWlzdXJlUHMpCiAJCQkJewogCQkJCQlmb3IoUXVldWVJRCA9IDAsIGkgPSAwOyBRdWV1ZUlEIDwgTUFYX1RYX1FVRVVFOyApCiAJCQkJCXsKLQkJCQkJCXN3aXRjaChRdWV1ZUlEKSB7Ci0JCQkJCQkJY2FzZSBNR05UX1FVRVVFOgotCQkJCQkJCQl0YWlsPXByaXYtPnR4bWFwcmluZ3RhaWw7Ci0JCQkJCQkJCWhlYWQ9cHJpdi0+dHhtYXByaW5naGVhZDsKLQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJcmluZyA9ICZwcml2LT50eF9yaW5nW1F1ZXVlSURdOwogCi0JCQkJCQkJY2FzZSBCS19RVUVVRToKLQkJCQkJCQkJdGFpbD1wcml2LT50eGJrcHJpbmd0YWlsOwotCQkJCQkJCQloZWFkPXByaXYtPnR4YmtwcmluZ2hlYWQ7Ci0JCQkJCQkJCWJyZWFrOworCQkJCQkJCWlmKHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSA9PSAwKQorCQkJCQkJCXsKKwkJCQkJCQkJUXVldWVJRCsrOworCQkJCQkJCQljb250aW51ZTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZQorCQkJCQkJCXsKKwkJCQkJCQkJUlRfVFJBQ0UoKENPTVBfUE9XRVJ8Q09NUF9SRiksICJlUmYgT2ZmL1NsZWVwOiAlZCB0aW1lcyBUY2JCdXN5UXVldWVbJWRdICE9MCBiZWZvcmUgZG96ZSFcbiIsIChpKzEpLCBRdWV1ZUlEKTsKKwkJCQkJCQkJdWRlbGF5KDEwKTsKKwkJCQkJCQkJaSsrOworCQkJCQkJCX0KIAotCQkJCQkJCWNhc2UgQkVfUVVFVUU6Ci0JCQkJCQkJCXRhaWw9cHJpdi0+dHhiZXByaW5ndGFpbDsKLQkJCQkJCQkJaGVhZD1wcml2LT50eGJlcHJpbmdoZWFkOworCQkJCQkJCWlmKGkgPj0gTUFYX0RPWkVfV0FJVElOR19USU1FU185eCkKKwkJCQkJCQl7CisJCQkJCQkJCVJUX1RSQUNFKENPTVBfUE9XRVIsICJcblxuXG4gVGltZU91dCEhIFNldFJGUG93ZXJTdGF0ZTgxOTAoKTogZVJmT2ZmOiAlZCB0aW1lcyBUY2JCdXN5UXVldWVbJWRdICE9IDAgISEhXG5cblxuIiwgTUFYX0RPWkVfV0FJVElOR19USU1FU185eCwgUXVldWVJRCk7CiAJCQkJCQkJCWJyZWFrOwotCi0JCQkJCQkJY2FzZSBWSV9RVUVVRToKLQkJCQkJCQkJdGFpbD1wcml2LT50eHZpcHJpbmd0YWlsOwotCQkJCQkJCQloZWFkPXByaXYtPnR4dmlwcmluZ2hlYWQ7Ci0JCQkJCQkJCWJyZWFrOwotCi0JCQkJCQkJY2FzZSBWT19RVUVVRToKLQkJCQkJCQkJdGFpbD1wcml2LT50eHZvcHJpbmd0YWlsOwotCQkJCQkJCQloZWFkPXByaXYtPnR4dm9wcmluZ2hlYWQ7Ci0JCQkJCQkJCWJyZWFrOwotCi0JCQkJCQkJZGVmYXVsdDoKLQkJCQkJCQkJdGFpbD1oZWFkPU5VTEw7Ci0JCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KIAkJCQkJCX0KLQkJCQkJCWlmKHRhaWwgPT0gaGVhZCkKKwkJCQl9CisKKwkJCQkvL2lmKEFkYXB0ZXItPkhhcmR3YXJlVHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDgxOTBQKQorI2lmZGVmIFJUTDgxOTBQCisJCQkJeworCQkJCQlQSFlfU2V0UnRsODE5MHBSZk9mZihkZXYpOworCQkJCX0KKwkJCQkvL2Vsc2UgaWYoQWRhcHRlci0+SGFyZHdhcmVUeXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODE5MkUpCisjZWxpZiBkZWZpbmVkIFJUTDgxOTJFCisJCQkJeworCQkJCQlQSFlfU2V0UnRsODE5MmVSZk9mZihkZXYpOworCQkJCX0KKyNlbmRpZgorCQkJfQorCQkJCQkJCQlicmVhazsKKworCQkJY2FzZSBlUmZPZmY6CisJCQkJLy9SVF9UUkFDRShDT01QX1BTLCAiU2V0UkZQb3dlclN0YXRlODE5MCgpIGVSZk9mZi9TbGVlcCAhXG4iKTsKKworCQkJCS8vIFVwZGF0ZSBjdXJyZW50IFJGIHN0YXRlIHZhcmlhYmxlLgorCQkJCS8vcHJpdi0+aWVlZTgwMjExLT5lUkZQb3dlclN0YXRlID0gZVJGUG93ZXJTdGF0ZTsKKworCQkJCS8vCisJCQkJLy8gRGlzY29ubmVjdCB3aXRoIEFueSBBUCBvciBTVEEuCisJCQkJLy8KKwkJCQlmb3IoUXVldWVJRCA9IDAsIGkgPSAwOyBRdWV1ZUlEIDwgTUFYX1RYX1FVRVVFOyApCisJCQkJeworCQkJCQlyaW5nID0gJnByaXYtPnR4X3JpbmdbUXVldWVJRF07CisKKwkJCQkJaWYoc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpID09IDApCiAJCQkJCQl7Ci0JCQkJCQkJLy9EYmdQcmludCgiUXVldWVJRCA9ICVkIiwgUXVldWVJRCk7CiAJCQkJCQkJUXVldWVJRCsrOwogCQkJCQkJCWNvbnRpbnVlOwogCQkJCQkJfQogCQkJCQkJZWxzZQogCQkJCQkJewotCQkJCQkJCVJUX1RSQUNFKENPTVBfUE9XRVIsICJlUmYgT2ZmL1NsZWVwOiAlZCB0aW1lcyBCdXN5UXVldWVbJWRdICE9MCBiZWZvcmUgZG96ZSFcbiIsIChpKzEpLCBRdWV1ZUlEKTsKKwkJCQkJCQlSVF9UUkFDRShDT01QX1BPV0VSLAorCQkJCQkJCSJlUmYgT2ZmL1NsZWVwOiAlZCB0aW1lcyBUY2JCdXN5UXVldWVbJWRdICE9MCBiZWZvcmUgZG96ZSFcbiIsIChpKzEpLCBRdWV1ZUlEKTsKIAkJCQkJCQl1ZGVsYXkoMTApOwogCQkJCQkJCWkrKzsKIAkJCQkJCX0KIAogCQkJCQkJaWYoaSA+PSBNQVhfRE9aRV9XQUlUSU5HX1RJTUVTXzl4KQogCQkJCQkJewotCQkJCQkJCVJUX1RSQUNFKENPTVBfUE9XRVIsICJcblxuXG4gVGltZU91dCEhIFNldFJGUG93ZXJTdGF0ZTgxOTAoKTogZVJmT2ZmOiAlZCB0aW1lcyBCdXN5UXVldWVbJWRdICE9IDAgISEhXG5cblxuIiwgTUFYX0RPWkVfV0FJVElOR19USU1FU185eCwgUXVldWVJRCk7CisJCQkJCQkJUlRfVFJBQ0UoQ09NUF9QT1dFUiwgIlxuXG5cbiBTZXRaZWJyYVJGUG93ZXJTdGF0ZTgxODVCKCk6IGVSZk9mZjogJWQgdGltZXMgVGNiQnVzeVF1ZXVlWyVkXSAhPSAwICEhIVxuXG5cbiIsIE1BWF9ET1pFX1dBSVRJTkdfVElNRVNfOXgsIFF1ZXVlSUQpOwogCQkJCQkJCWJyZWFrOwogCQkJCQkJfQogCQkJCQl9Ci0JCQkJfQotCQkJCSNpZmRlZiBSVEw4MTkwUAotCQkJCWlmKHByaXYtPnJmX3R5cGUgPT0gUkZfMlQ0UikKKworCQkJCS8vaWYoQWRhcHRlci0+SGFyZHdhcmVUeXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODE5MFApCisjaWYgZGVmaW5lZCBSVEw4MTkwUAogCQkJCXsKLQkJCQkJLy9kaXNhYmxlIFJGLUNoaXAgQS9CCi0JCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfWEFfUkZJbnRlcmZhY2VPRSwgQklUNCwgMHgwKTsJCS8vIDB4ODYwWzRdCisJCQkJCVBIWV9TZXRSdGw4MTkwcFJmT2ZmKGRldik7CiAJCQkJfQotCQkJCS8vZGlzYWJsZSBSRi1DaGlwIEMvRAotCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfWENfUkZJbnRlcmZhY2VPRSwgQklUNCwgMHgwKTsgLy8gMHg4NjhbNF0KLQkJCQkvL2FuYWxvZyB0byBkaWdpdGFsIG9mZiwgZm9yIHBvd2VyIHNhdmUKLQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjQsIDB4ZjAwLCAweDApOy8vIDB4ODhjWzExOjhdCi0JCQkJLy9kaWdpdGFsIHRvIGFuYWxvZyBvZmYsIGZvciBwb3dlciBzYXZlCi0JCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXIxLCAweDFlMCwgMHgwKTsgLy8gMHg4ODBbODo1XQotCQkJCS8vcnggYW50ZW5uYSBvZmYKLQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgck9GRE0wX1RSeFBhdGhFbmFibGUsIDB4ZiwgMHgwKTsvLyAweGMwNFszOjBdCi0JCQkJLy9yeCBhbnRlbm5hIG9mZgotCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByT0ZETTFfVFJ4UGF0aEVuYWJsZSwgMHhmLCAweDApOy8vIDB4ZDA0WzM6MF0KLQkJCQkvL2FuYWxvZyB0byBkaWdpdGFsIHBhcnQyIG9mZiwgZm9yIHBvd2VyIHNhdmUKLQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjEsIDB4MWUwMCwgMHgwKTsgLy8gMHg4ODBbMTI6OV0KLSNlbHNlIC8vODE5MkUKLQkJCQkJLy8yIFJGCi0JCQkJLy9kaXNhYmxlIFJGLUNoaXAgQS9CCi0JCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9YQV9SRkludGVyZmFjZU9FLCBCSVQ0LCAweDApOwkJLy8gMHg4NjBbNF0KLQkJCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9YQl9SRkludGVyZmFjZU9FLCBCSVQ0LCAweDApOwkJLy8gMHg4NjRbNF0KLQkJCQkJLy8yIEFGRQotCQkJCS8vYW5hbG9nIHRvIGRpZ2l0YWwgb2ZmLCBmb3IgcG93ZXIgc2F2ZQotCQkJCQkvL1BIWV9TZXRCQlJlZyhBZGFwdGVyLCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyNCwgMHhmMDAsIDB4MCk7Ly8gMHg4OGNbMTE6OF0KLQkJCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXI0LCAweGYwMywgMHgwKTsgLy8gIDIwMDguMDkuMzAgTW9kaWZ5Ci0JCQkJLy9kaWdpdGFsIHRvIGFuYWxvZyBvZmYsIGZvciBwb3dlciBzYXZlCi0JCQkJCS8vUEhZX1NldEJCUmVnKEFkYXB0ZXIsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXIxLCAweDE4LCAweDApOyAvLyAweDg4MFs0OjNdCi0JCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyMSwgMHg5OCwgMHgwKTsgLy8gMHg4ODAgMjAwOC4wOS4zMCBNb2RpZnkKLQkJCQkJLy9yeCBhbnRlbm5hIG9mZiAgMjAwOC4wOS4zMCBtYXJrCi0JCQkJCS8vUEhZX1NldEJCUmVnKEFkYXB0ZXIsIHJPRkRNMF9UUnhQYXRoRW5hYmxlLCAweGYsIDB4MCk7Ly8gMHhjMDRbMzowXQotCQkJCQkvL3J4IGFudGVubmEgb2ZmICAyMDA4LjA5LjMwIG1hcmsKLQkJCQkJLy9QSFlfU2V0QkJSZWcoQWRhcHRlciwgck9GRE0xX1RSeFBhdGhFbmFibGUsIDB4ZiwgMHgwKTsvLyAweGQwNFszOjBdCi0JCQkJLy9hbmFsb2cgdG8gZGlnaXRhbCBwYXJ0MiBvZmYsIGZvciBwb3dlciBzYXZlCi0JCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyMSwgMHg2MCwgMHgwKTsJCS8vIDB4ODgwWzY6NV0KLQkJCQkJLy8gMjAwOC4wOS4zMCBhZGQKLQkJCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXIyLCAweDIwMDAwMDAwLCAweDApOyAvLyAweDg4NAorCQkJCS8vZWxzZSBpZihBZGFwdGVyLT5IYXJkd2FyZVR5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyRSkKKyNlbGlmIGRlZmluZWQgUlRMODE5MkUKKwkJCQl7CisJCQkJCS8vaWYocFBTQy0+UmVnUmZQc0xldmVsICYgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMgJiYgIVJUX0lOX1BTX0xFVkVMKHBQU0MsIFJUX1JGX09GRl9MRVZMX0hBTFRfTklDKSAmJiBwcml2LT5pZWVlODAyMTEtPlJmT2ZmUmVhc29uID4gUkZfQ0hBTkdFX0JZX1BTKQorCQkJCQlpZiAocFBTQy0+UmVnUmZQc0xldmVsICYgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMgJiYgIVJUX0lOX1BTX0xFVkVMKHBQU0MsIFJUX1JGX09GRl9MRVZMX0hBTFRfTklDKSkKKwkJCQkJeyAvLyBEaXNhYmxlIGFsbCBjb21wb25lbnRzLgorCQkJCQkJLy8KKwkJCQkJCS8vIE5vdGU6CisJCQkJCQkvLwlOaWNJRlNldExpbmtTdGF0dXMgaXMgYSBiaWcgcHJvYmxlbSB3aGVuIHdlIGluZGljYXRlIHRoZSBzdGF0dXMgdG8gT1MsCisJCQkJCQkvLwl0aGUgT1MoWFApIHdpbGwgcmVzZXQuIEJ1dCBub3csIHdlIGNubm90IGZpbmQgd2h5IHRoZSBOSUMgaXMgaGFyZCB0byByZWNlaXZlCisJCQkJCQkvLwlwYWNrZXRzIGFmdGVyIFJGIE9OLiBKdXN0IGtlZXAgdGhpcyBmdW5jdGlvbiBoZXJlIGFuZCBzdGlsbCB3b3JrIHRvIGZpbmQgb3V0IHRoZSByb290IGNvdXNlLgorCQkJCQkJLy8JQnkgQnJ1Y2UsIDIwMDktMDUtMDEuCisJCQkJCQkvLworCQkJCQkJLy9OaWNJRlNldExpbmtTdGF0dXMoIEFkYXB0ZXIsIFJUX01FRElBX0RJU0NPTk5FQ1QgKTsKKwkJCQkJCS8vaWYgSFcgcmFkaW8gb2YgLCBuZWVkIHRvIGluZGljYXRlIHNjYW4gY29tcGxldGUgZmlyc3QgZm9yIG5vdCBiZSByZXNldC4KKwkJCQkJCS8vaWYoTWdudFNjYW5JblByb2dyZXNzKHBNZ250SW5mbykpCisJCQkJCQkvLwlNZ250UmVzZXRTY2FuUHJvY2VzcyggQWRhcHRlciApOwogCi0KLQkJCQkJLy9kaXNhYmxlIGNsb2NrIDgwLzg4IE1IeiAyMDA4LjA5LjMwIG1hcmsKLQkJCQkJLy9QSFlfU2V0QkJSZWcoQWRhcHRlciwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjEsIDB4NCwgMHgwKTsgLy8gMHg4ODBbMl0KLQkJCQkJLy8yIEJCCi0JCQkJCS8vIEJhc2ViYW5kIHJlc2V0IDIwMDguMDkuMzAgYWRkCi0JCQkJCXdyaXRlX25pY19ieXRlKGRldiwgQkJfUkVTRVQsIChyZWFkX25pY19ieXRlKGRldiwgQkJfUkVTRVQpfEJJVDApKTsgLy8gMHgxMDEKLQkJCQkJLy9NQUM6IG9mZgotCQkJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIE1hY0Jsa0N0cmwsIDB4MCk7IC8vIDB4NDAzCi0JCQkJCS8vc2xvdyBkb3duIGNwdS9sYnVzIGNsb2NrIGZyb20gMTYwTUh6IHRvIExvd2VyCi0JCQkJCXdyaXRlX25pY19ieXRlKGRldiwgQU5BUEFSLCAweDA3KTsgLy8gMHggMTcgNDBNSHoKLQkJCQlwcml2LT5iSHdSZk9mZkFjdGlvbiA9IDA7Ci0JCQkJLy99CisJCQkJCQkvLyA8MT4gRGlzYWJsZSBJbnRlcnJ1cHQKKwkJCQkJCS8vcnRsODE5Ml9pcnFfZGlzYWJsZShkZXYpOworCQkJCQkJLy8gPDI+IFN0b3AgYWxsIHRpbWVyCisJCQkJCQkvL01nbnRDYW5jZWxBbGxUaW1lcihBZGFwdGVyKTsKKwkJCQkJCS8vIDwzPiBEaXNhYmxlIEFkYXB0ZXIKKwkJCQkJCS8vTmljSUZIYWx0QWRhcHRlcihBZGFwdGVyLCBmYWxzZSk7CisJCQkJCQlOaWNJRkRpc2FibGVOSUMoZGV2KTsKKwkJCQkJCVJUX1NFVF9QU19MRVZFTChwUFNDLCBSVF9SRl9PRkZfTEVWTF9IQUxUX05JQyk7CisJCQkJCX0KKwkJCQkJZWxzZSBpZiAoIShwUFNDLT5SZWdSZlBzTGV2ZWwgJiBSVF9SRl9PRkZfTEVWTF9IQUxUX05JQykpCisJCQkJCXsgLy8gTm9ybWFsIGNhc2UuCisJCQkJICAJCS8vIElQUyBzaG91bGQgZ28gdG8gdGhpcy4KKwkJCQkJCVBIWV9TZXRSdGw4MTkyZVJmT2ZmKGRldik7CisJCQkJCX0KKwkJCQl9CisjZWxzZQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVJUX1RSQUNFKENPTVBfREJHLERCR19UUkFDRSwoIkl0IGlzIG5vdCA4MTkwUGNpIGFuZCA4MTkyUGNpRSBcbiIpKTsKKwkJCQl9CiAJCQkJI2VuZGlmCisKIAkJCQkJYnJlYWs7CiAKIAkJCWRlZmF1bHQ6CiAJCQkJCWJSZXN1bHQgPSBmYWxzZTsKLQkJCQkJUlRfVFJBQ0UoQ09NUF9FUlIsICJTZXRSRlBvd2VyU3RhdGU4MTkwKCk6IHVua25vd24gc3RhdGUgdG8gc2V0OiAweCVYISEhXG4iLCBlUkZQb3dlclN0YXRlKTsKKwkJCQkJUlRfVFJBQ0UoQ09NUF9FUlIsICJTZXRSRlBvd2VyU3RhdGU4MTkwKCk6IHVua25vdyBzdGF0ZSB0byBzZXQ6IDB4JVghISFcbiIsIGVSRlBvd2VyU3RhdGUpOwogCQkJCQlicmVhazsKIAkJfQogCkBAIC02NDQsNjQgKzcxOSwxMSBAQAogCXsKIAkJLy8gVXBkYXRlIGN1cnJlbnQgUkYgc3RhdGUgdmFyaWFibGUuCiAJCXByaXYtPmllZWU4MDIxMS0+ZVJGUG93ZXJTdGF0ZSA9IGVSRlBvd2VyU3RhdGU7Ci0KLQkJc3dpdGNoKHByaXYtPnJmX2NoaXAgKQotCQl7Ci0JCQljYXNlIFJGXzgyNTY6Ci0JCQlzd2l0Y2gocHJpdi0+aWVlZTgwMjExLT5lUkZQb3dlclN0YXRlKQotCQkJewotCQkJCWNhc2UgZVJmT2ZmOgotCQkJCS8vCi0JCQkJLy9JZiBSZiBvZmYgcmVhc29uIGlzIGZyb20gSVBTLCBMZWQgc2hvdWxkIGJsaW5rIHdpdGggbm8gbGluaywgYnkgTWFkZGVzdCAwNzEwMTUKLQkJCQkvLwotCQkJCQlpZihwcml2LT5pZWVlODAyMTEtPlJmT2ZmUmVhc29uPT1SRl9DSEFOR0VfQllfSVBTICkKLQkJCQkJewotCQkJCQkJI2lmZGVmIFRPX0RPCi0JCQkJCQlBZGFwdGVyLT5IYWxGdW5jLkxlZENvbnRyb2xIYW5kbGVyKEFkYXB0ZXIsTEVEX0NUTF9OT19MSU5LKTsKLQkJCQkJCSNlbmRpZgotCQkJCQl9Ci0JCQkJCWVsc2UKLQkJCQkJewotCQkJCQkvLyBUdXJuIG9mZiBMRUQgaWYgUkYgaXMgbm90IE9OLgotCQkJCQkJI2lmZGVmIFRPX0RPCi0JCQkJCQlBZGFwdGVyLT5IYWxGdW5jLkxlZENvbnRyb2xIYW5kbGVyKEFkYXB0ZXIsIExFRF9DVExfUE9XRVJfT0ZGKTsKLQkJCQkJCSNlbmRpZgotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCi0JCQkJY2FzZSBlUmZPbjoKLQkJCQkvLyBUdXJuIG9uIFJGIHdlIGFyZSBzdGlsbCBsaW5rZWQsIHdoaWNoIG1pZ2h0IGhhcHBlbiB3aGVuCi0JCQkJLy8gd2UgcXVpY2tseSB0dXJuIG9mZiBhbmQgb24gSFcgUkYuIDIwMDYuMDUuMTIsIGJ5IHJjbmprby4KLQkJCQkJaWYoIHByaXYtPmllZWU4MDIxMS0+c3RhdGUgPT0gSUVFRTgwMjExX0xJTktFRCkKLQkJCQkJewotCQkJCQkJI2lmZGVmIFRPX0RPCi0JCQkJCQlBZGFwdGVyLT5IYWxGdW5jLkxlZENvbnRyb2xIYW5kbGVyKEFkYXB0ZXIsIExFRF9DVExfTElOSyk7Ci0JCQkJCQkjZW5kaWYKLQkJCQkJfQotCQkJCQllbHNlCi0JCQkJCXsKLQkJCQkJLy8gVHVybiBvZmYgTEVEIGlmIFJGIGlzIG5vdCBPTi4KLQkJCQkJCSNpZmRlZiBUT19ETwotCQkJCQkJQWRhcHRlci0+SGFsRnVuYy5MZWRDb250cm9sSGFuZGxlcihBZGFwdGVyLCBMRURfQ1RMX05PX0xJTkspOwotCQkJCQkJI2VuZGlmCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0KLQkJCQlkZWZhdWx0OgotCQkJLy8gZG8gbm90aGluZy4KLQkJCQkJYnJlYWs7Ci0JCQl9Ly8gU3dpdGNoIFJGIHN0YXRlCi0KLQkJCWJyZWFrOwotCi0JCQlkZWZhdWx0OgotCQkJCVJUX1RSQUNFKENPTVBfRVJSLCAiU2V0UkZQb3dlclN0YXRlODE5MCgpOiBVbmtub3duIFJGIHR5cGVcbiIpOwotCQkJCWJyZWFrOwotCQl9Ly8gU3dpdGNoIFJGQ2hpcElECiAJfQogCisJLy9wcmludGsoIiVzKClwcml2LT5pZWVlODAyMTEtPmVSRlBvd2VyU3RhdGU6JXNcbiIgLF9fZnVuY19fLHByaXYtPmllZWU4MDIxMS0+ZVJGUG93ZXJTdGF0ZSA9PSBlUmZPbiA/ICJPbiIgOiAiT2ZmIik7CiAJcHJpdi0+U2V0UkZQb3dlclN0YXRlSW5Qcm9ncmVzcyA9IGZhbHNlOwotCVJUX1RSQUNFKENPTVBfUE9XRVIsICI8PT09PT09PT09PT0gU2V0UkZQb3dlclN0YXRlODE5MCgpIGJSZXN1bHQgPSAlZCFcbiIsIGJSZXN1bHQpOworCS8vUlRfVFJBQ0UoQ09NUF9QUywgIjw9PT09PT09PT09PSBTZXRSRlBvd2VyU3RhdGU4MTkwKCkgYlJlc3VsdCA9ICVkIVxuIiwgYlJlc3VsdCk7CiAJcmV0dXJuIGJSZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MF9ydGw4MjU2LmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTBfcnRsODI1Ni5oCmluZGV4IDdkOTA5NWEuLmNlNDljNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MF9ydGw4MjU2LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkwX3J0bDgyNTYuaApAQCAtMSwyOCArMSwzMyBAQAotLyoKLSAgVGhpcyBpcyBwYXJ0IG9mIHRoZSBydGw4MTgwLXNhMjQwMCBkcml2ZXIKLSAgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTCAoU2VlIGZpbGUgQ09QWUlORyBmb3IgZGV0YWlscykuCi0gIENvcHlyaWdodCAoYykgMjAwNSBBbmRyZWEgTWVyZWxsbyA8YW5kcmVhbXJsQHRpc2NhbGkuaXQ+CisvKiByODE5MF9ydGw4MjU2LmggLSBydGw4MjU2IHJhZGlvIGZyb250ZW5kCisgKgorICogVGhpcyBpcyBwYXJ0IG9mIHRoZSBydGw4MTgwLXNhMjQwMCBkcml2ZXIKKyAqIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEwgKFNlZSBmaWxlIENPUFlJTkcgZm9yIGRldGFpbHMpLgorICogQ29weXJpZ2h0IChjKSAyMDA1IEFuZHJlYSBNZXJlbGxvIDxhbmRyZWFtcmxAdGlzY2FsaS5pdD4KKyAqCisgKiBNYW55IHRoYW5rcyB0byBSZWFsdGVrIENvcnAuIGZvciB0aGVpciBncmVhdCBzdXBwb3J0IQorICovCiAKLSAgVGhpcyBmaWxlcyBjb250YWlucyBwcm9ncmFtbWluZyBjb2RlIGZvciB0aGUgcnRsODI1NgotICByYWRpbyBmcm9udGVuZC4KLQotICAqTWFueSogdGhhbmtzIHRvIFJlYWx0ZWsgQ29ycC4gZm9yIHRoZWlyIGdyZWF0IHN1cHBvcnQhCi0KLSovCi0KLSNpZm5kZWYgUlRMODIyNUgKLSNkZWZpbmUgUlRMODIyNUgKKyNpZm5kZWYgUlRMODIyNV9ICisjZGVmaW5lIFJUTDgyMjVfSAogCiAjaWZkZWYgUlRMODE5MFAKLSNkZWZpbmUgUlRMODE5WF9UT1RBTF9SRl9QQVRICTQKKyNkZWZpbmUgUlRMODE5WF9UT1RBTF9SRl9QQVRIIDQKICNlbHNlCi0jZGVmaW5lIFJUTDgxOVhfVE9UQUxfUkZfUEFUSCAyIC8vZm9yIDgxOTJFCisjZGVmaW5lIFJUTDgxOVhfVE9UQUxfUkZfUEFUSCAyIC8qIGZvciA4MTkyRSAqLwogI2VuZGlmCi1leHRlcm4gdm9pZCBQSFlfU2V0UkY4MjU2QmFuZHdpZHRoKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYgLCBIVF9DSEFOTkVMX1dJRFRIIEJhbmR3aWR0aCk7Ci1leHRlcm4gUlRfU1RBVFVTIFBIWV9SRjgyNTZfQ29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotZXh0ZXJuIFJUX1NUQVRVUyBwaHlfUkY4MjU2X0NvbmZpZ19QYXJhRmlsZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLWV4dGVybiB2b2lkIFBIWV9TZXRSRjgyNTZDQ0tUeFBvd2VyKHN0cnVjdCBuZXRfZGV2aWNlKglkZXYsIHU4CXBvd2VybGV2ZWwpOwotZXh0ZXJuIHZvaWQgUEhZX1NldFJGODI1Nk9GRE1UeFBvd2VyKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIHU4IHBvd2VybGV2ZWwpOwotZXh0ZXJuIGJvb2wgTWdudEFjdFNldF9SRl9TdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCBSVF9SRl9QT1dFUl9TVEFURSBTdGF0ZVRvU2V0LCBSVF9SRl9DSEFOR0VfU09VUkNFIENoYW5nZVNvdXJjZSk7CiAKLSNlbmRpZgorZXh0ZXJuIHZvaWQgUEhZX1NldFJGODI1NkJhbmR3aWR0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgIEhUX0NIQU5ORUxfV0lEVEggQmFuZHdpZHRoKTsKKworZXh0ZXJuIFJUX1NUQVRVUyBQSFlfUkY4MjU2X0NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworZXh0ZXJuIFJUX1NUQVRVUyBwaHlfUkY4MjU2X0NvbmZpZ19QYXJhRmlsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworZXh0ZXJuIHZvaWQgUEhZX1NldFJGODI1NkNDS1R4UG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggcG93ZXJsZXZlbCk7CitleHRlcm4gdm9pZCBQSFlfU2V0UkY4MjU2T0ZETVR4UG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggcG93ZXJsZXZlbCk7CisKK2V4dGVybiBib29sIE1nbnRBY3RTZXRfUkZfU3RhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlSVF9SRl9QT1dFUl9TVEFURSBTdGF0ZVRvU2V0LAorCQkJCVJUX1JGX0NIQU5HRV9TT1VSQ0UgQ2hhbmdlU291cmNlKTsKKworI2VuZGlmIC8qIFJUTDgyMjVfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRS5oCmluZGV4IDYxYjZmMjUuLmY0YmU5Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFLmgKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSAiaWVlZTgwMjExLmgiCisjaW5jbHVkZSAiaWVlZTgwMjExL2llZWU4MDIxMS5oIgogCiAKIApAQCAtMTAwMyw2ICsxMDAzLDExIEBACiAJaW50IGlycTsKIAlzaG9ydCBpcnFfZW5hYmxlZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZTgwMjExOworI2lmZGVmIEVOQUJMRV9MUFMKKwlib29sIHBzX2ZvcmNlOworCWJvb2wgZm9yY2VfbHBzOworCWJvb2wgYmRpc2FibGVfbmljOworI2VuZGlmCiAJYm9vbCBiZWluZ19pbml0X2FkYXB0ZXI7CiAJdTggUmZfTW9kZTsKIAlzaG9ydCBjYXJkXzgxOTI7IC8qIE86IHJ0bDgxOTIsIDE6cnRsODE4NSBWIEIvQywgMjpydGw4MTg1IFYgRCAqLwpAQCAtMTQ3Nyw3ICsxNDgyLDcgQEAKIHZvaWQgd3JpdGVfbmljX2R3b3JkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB4LHUzMiB5KTsKIHZvaWQgZm9yY2VfcGNpX3Bvc3Rpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKLXZvaWQgcnRsODE5Ml9ydHhfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK3ZvaWQgcnRsODE5Ml9oYWx0X2FkYXB0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCByZXNldCk7CiB2b2lkIHJ0bDgxOTJfcnhfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICopOwogdm9pZCBydGw4MTkyX3R4X2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIApAQCAtMTUxMiw1ICsxNTE3LDE5IEBACiAjaWZkZWYgRU5BQkxFX0lQUwogdm9pZCBJUFNFbnRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgSVBTTGVhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIEluYWN0aXZlUHNXb3JrSXRlbUNhbGxiYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwordm9pZCBJUFNMZWF2ZV93cSh2b2lkICpkYXRhKTsKK3ZvaWQgaWVlZTgwMjExX2lwc19sZWF2ZV93cShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3ZvaWQgaWVlZTgwMjExX2lwc19sZWF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKICNlbmRpZgorI2lmZGVmIEVOQUJMRV9MUFMKK3ZvaWQgTGVpc3VyZVBTRW50ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIExlaXN1cmVQU0xlYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworI2VuZGlmCisKK2Jvb2wgTmljSUZFbmFibGVOSUMoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7Citib29sIE5pY0lGRGlzYWJsZU5JQyhzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKKwordm9pZCBydGw4MTkyX2lycV9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwordm9pZCBQSFlfU2V0UnRsODE5MmVSZk9mZihzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2NvcmUuYwppbmRleCAwY2E1ZDhiLi44ODYxMDVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2NvcmUuYwpAQCAtNjYsNyArNjYsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBFTkFCTEVfRE9UMTFECi0jaW5jbHVkZSAiZG90MTFkLmgiCisjaW5jbHVkZSAiaWVlZTgwMjExL2RvdDExZC5oIgogI2VuZGlmCiAKIC8vc2V0IGhlcmUgdG8gb3BlbiB5b3VyIHRyYWNlIGNvZGUuIC8vV0IKQEAgLTc1LDcgKzc1LDcgQEAKIAkJCS8vCUNPTVBfRVBST00gICAJfAogCQkvLwkJQ09NUF9QSFkJfAogCQkvLwkJQ09NUF9SRgkJfAotCQkJCUNPTVBfRklSTVdBUkUJfAorLy8JCQkJQ09NUF9GSVJNV0FSRQl8CiAJCQkvLwlDT01QX1RSQUNFCXwKIAkJLy8JCUNPTVBfRE9XTgl8CiAJCS8vCQlDT01QX1NXQlcJfApAQCAtMzQzLDYgKzM0MywxNDEgQEAKIAogI2VuZGlmIC8qIFJUTF9JT19NQVAgKi8KIAordTggcnRsODE5MmVfYXBfc2VjX3R5cGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCit7CisJLy9zdHJ1Y3QgcjgxOTJfcHJpdiogcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJLy9zdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU4MDIxMTsKKworCXN0YXRpYyB1OCBjY21wX2llWzRdID0gezB4MDAsMHg1MCwweGYyLDB4MDR9OworCXN0YXRpYyB1OCBjY21wX3Jzbl9pZVs0XSA9IHsweDAwLCAweDBmLCAweGFjLCAweDA0fTsKKwlpbnQgd3BhX2llX2xlbj0gaWVlZS0+d3BhX2llX2xlbjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0X2RhdGEqIGNyeXB0OworCWludCBlbmNyeXB0OworCisJY3J5cHQgPSBpZWVlLT5jcnlwdFtpZWVlLT50eF9rZXlpZHhdOworCisJZW5jcnlwdCA9IChpZWVlLT5jdXJyZW50X25ldHdvcmsuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSB8fFwKKwkJICAoaWVlZS0+aG9zdF9lbmNyeXB0ICYmIGNyeXB0ICYmIGNyeXB0LT5vcHMgJiYgXAorCQkgICAoMCA9PSBzdHJjbXAoY3J5cHQtPm9wcy0+bmFtZSwiV0VQIikpKTsKKworCS8qIHNpbXBseSBqdWRnZSAgKi8KKwlpZihlbmNyeXB0ICYmICh3cGFfaWVfbGVuID09IDApKSB7CisJCS8vIHdlcCBlbmNyeXB0aW9uLCBubyBOIG1vZGUgc2V0dGluZyAqLworCQlyZXR1cm4gU0VDX0FMR19XRVA7CisJfSBlbHNlIGlmKCh3cGFfaWVfbGVuICE9IDApKSB7CisJCS8vIHBhcnNlIHBhaXJ3aXNlIGtleSB0eXBlICovCisJCWlmICgoKGllZWUtPndwYV9pZVswXSA9PSAweGRkKSAmJiAoIW1lbWNtcCgmKGllZWUtPndwYV9pZVsxNF0pLGNjbXBfaWUsNCkpKSB8fAorCQkJCSgoaWVlZS0+d3BhX2llWzBdID09IDB4MzApICYmICghbWVtY21wKCZpZWVlLT53cGFfaWVbMTBdLGNjbXBfcnNuX2llLCA0KSkpKQorCQkJcmV0dXJuIFNFQ19BTEdfQ0NNUDsKKwkJZWxzZQorCQkJcmV0dXJuIFNFQ19BTEdfVEtJUDsKKwl9IGVsc2UgeworCQlyZXR1cm4gU0VDX0FMR19OT05FOworCX0KK30KKwordm9pZAorcnRsODE5MmVfU2V0SHdSZWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldix1OCB2YXJpYWJsZSx1OCogdmFsKQoreworCXN0cnVjdCByODE5Ml9wcml2KiBwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKworCXN3aXRjaCh2YXJpYWJsZSkKKwl7CisKKwkJY2FzZSBIV19WQVJfQlNTSUQ6CisJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBCU1NJRFIsICgodTMyKikodmFsKSlbMF0pOworCQkJd3JpdGVfbmljX3dvcmQoZGV2LCBCU1NJRFIrMiwgKCh1MTYqKSh2YWwrMikpWzBdKTsKKwkJYnJlYWs7CisKKwkJY2FzZSBIV19WQVJfTUVESUFfU1RBVFVTOgorCQl7CisJCQlSVF9PUF9NT0RFCU9wTW9kZSA9ICooKFJUX09QX01PREUgKikodmFsKSk7CisJCQkvL0xFRF9DVExfTU9ERQlMZWRBY3Rpb24gPSBMRURfQ1RMX05PX0xJTks7CisJCQl1OAkJYnRNc3IgPSByZWFkX25pY19ieXRlKGRldiwgTVNSKTsKKworCQkJYnRNc3IgJj0gMHhmYzsKKworCQkJc3dpdGNoKE9wTW9kZSkKKwkJCXsKKwkJCWNhc2UgUlRfT1BfTU9ERV9JTkZSQVNUUlVDVFVSRToKKwkJCQlidE1zciB8PSBNU1JfSU5GUkE7CisJCQkJLy9MZWRBY3Rpb24gPSBMRURfQ1RMX0xJTks7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUlRfT1BfTU9ERV9JQlNTOgorCQkJCWJ0TXNyIHw9IE1TUl9BREhPQzsKKwkJCQkvLyBsZWQgbGluayBzZXQgc2VwZXJhdGUKKwkJCQlicmVhazsKKworCQkJY2FzZSBSVF9PUF9NT0RFX0FQOgorCQkJCWJ0TXNyIHw9IE1TUl9BUDsKKwkJCQkvL0xlZEFjdGlvbiA9IExFRF9DVExfTElOSzsKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlidE1zciB8PSBNU1JfTk9MSU5LOworCQkJCWJyZWFrOworCQkJfQorCisJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIE1TUiwgYnRNc3IpOworCisJCQkvL3ByaXYtPmllZWU4MDIxMS0+TGVkQ29udHJvbEhhbmRsZXIoZGV2LCBMZWRBY3Rpb24pOworCQl9CisJCWJyZWFrOworCisJCWNhc2UgSFdfVkFSX0NFQ0hLX0JTU0lEOgorCQl7CisJCQl1MzIJUmVnUkNSLCBUeXBlOworCisJCQlUeXBlID0gKCh1OCopKHZhbCkpWzBdOworCQkJLy9wcml2LT5pZWVlODAyMTEtPkdldEh3UmVnSGFuZGxlcihkZXYsIEhXX1ZBUl9SQ1IsICh1OCopKCZSZWdSQ1IpKTsKKwkJCVJlZ1JDUiA9IHJlYWRfbmljX2R3b3JkKGRldixSQ1IpOworCQkJcHJpdi0+UmVjZWl2ZUNvbmZpZyA9IFJlZ1JDUjsKKworCQkJaWYgKFR5cGUgPT0gdHJ1ZSkKKwkJCQlSZWdSQ1IgfD0gKFJDUl9DQlNTSUQpOworCQkJZWxzZSBpZiAoVHlwZSA9PSBmYWxzZSkKKwkJCQlSZWdSQ1IgJj0gKH5SQ1JfQ0JTU0lEKTsKKworCQkJLy9wcml2LT5pZWVlODAyMTEtPlNldEh3UmVnSGFuZGxlciggZGV2LCBIV19WQVJfUkNSLCAodTgqKSgmUmVnUkNSKSApOworCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgUkNSLFJlZ1JDUik7CisJCQlwcml2LT5SZWNlaXZlQ29uZmlnID0gUmVnUkNSOworCisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBIV19WQVJfU0xPVF9USU1FOgorCQl7CisJCQkvL1BTVEFfUU9TCXBTdGFRb3MgPSBBZGFwdGVyLT5NZ250SW5mby5wU3RhUW9zOworCQkJLy9BQ19DT0RJTkcJZUFDSTsKKworCQkJcHJpdi0+c2xvdF90aW1lID0gdmFsWzBdOworCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBTTE9UX1RJTUUsIHZhbFswXSk7CisKKwkJfQorCQlicmVhazsKKworCQljYXNlIEhXX1ZBUl9BQ0tfUFJFQU1CTEU6CisJCXsKKwkJCXUzMiByZWdUbXAgPSAwOworCQkJcHJpdi0+c2hvcnRfcHJlYW1ibGUgPSAoYm9vbCkoKih1OCopdmFsICk7CisJCQlyZWdUbXAgPSBwcml2LT5iYXNpY19yYXRlOworCQkJaWYgKHByaXYtPnNob3J0X3ByZWFtYmxlKQorCQkJCXJlZ1RtcCB8PSBCUlNSX0Fja1Nob3J0UG1iOworCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgUlJTUiwgcmVnVG1wKTsKKwkJfQorCQlicmVhazsKKworCQljYXNlIEhXX1ZBUl9DUFVfUlNUOgorCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgQ1BVX0dFTiwgKCh1MzIqKSh2YWwpKVswXSk7CisJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworfQorCiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKQEAgLTM2NSwxMSArNTAwLDYgQEAKIC8vdm9pZCBydGw4MTkyX3JxX3R4X2FjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiB2b2lkIHdhdGNoX2RvZ190aW1lcl9jYWxsYmFjayh1bnNpZ25lZCBsb25nIGRhdGEpOwotI2lmZGVmIEVOQUJMRV9JUFMKLXZvaWQgSVBTRW50ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci12b2lkIElQU0xlYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotdm9pZCBJbmFjdGl2ZVBzV29ya0l0ZW1DYWxsYmFjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLSNlbmRpZgogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tUFJPQ0ZTIFNUVUZGLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC03MDcsNyArODM3LDcgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBydGw4MTkyX2lycV9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit2b2lkIHJ0bDgxOTJfaXJxX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxOTJfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7CiAKQEAgLTcxNyw2ICs4NDcsNyBAQAogfQogCiAKKyNpZiAwCiBzdGF0aWMgdm9pZCBydGw4MTkyX3NldF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsaW50IG1vZGUpCiB7CiAJdTggZWNtZDsKQEAgLTcyNyw3ICs4NTgsNyBAQAogCWVjbWQ9ZWNtZCAmfiAoMTw8RVBST01fQ0tfU0hJRlQpOwogCXdyaXRlX25pY19ieXRlKGRldiwgRVBST01fQ01ELCBlY21kKTsKIH0KLQorI2VuZGlmCiAKIHZvaWQgcnRsODE5Ml91cGRhdGVfbXNyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC04NjEsNyArOTkyLDcgQEAKICAgICByaW5nLT5kZXNjID0gTlVMTDsKIH0KIAotCisjaWYgMAogc3RhdGljIHZvaWQgcnRsODE5Ml9iZWFjb25fZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gKHN0cnVjdCByODE5Ml9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKQEAgLTg3MywzOCArMTAwNCwxMTYgQEAKIAlyZWcgJj0gfihJTVJfQmNuSW50IHwgSU1SX0JjbkludCB8IElNUl9UQkRPSyB8IElNUl9UQkRFUik7CiAJd3JpdGVfbmljX2R3b3JkKHByaXYtPmllZWU4MDIxMS0+ZGV2LCBJTlRBX01BU0ssIHJlZyk7CiB9CisjZW5kaWYKIAotdm9pZCBydGw4MTkyX3J0eF9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit2b2lkIFBIWV9TZXRSdGw4MTkyZVJmT2ZmKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYJKQogewotCXU4IGNtZDsKKwkvL3N0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKworCS8vZGlzYWJsZSBSRi1DaGlwIEEvQgorCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfWEFfUkZJbnRlcmZhY2VPRSwgQklUNCwgMHgwKTsKKwkvL2FuYWxvZyB0byBkaWdpdGFsIG9mZiwgZm9yIHBvd2VyIHNhdmUKKwlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjQsIDB4MzAwLCAweDApOworCS8vZGlnaXRhbCB0byBhbmFsb2cgb2ZmLCBmb3IgcG93ZXIgc2F2ZQorCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyMSwgMHgxOCwgMHgwKTsKKwkvL3J4IGFudGVubmEgb2ZmCisJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJPRkRNMF9UUnhQYXRoRW5hYmxlLCAweGYsIDB4MCk7CisJLy9yeCBhbnRlbm5hIG9mZgorCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByT0ZETTFfVFJ4UGF0aEVuYWJsZSwgMHhmLCAweDApOworCS8vYW5hbG9nIHRvIGRpZ2l0YWwgcGFydDIgb2ZmLCBmb3IgcG93ZXIgc2F2ZQorCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyMSwgMHg2MCwgMHgwKTsKKwlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjEsIDB4NCwgMHgwKTsKKwkvLyBBbmFsb2cgcGFyYW1ldGVyISFDaGFuZ2UgYmlhcyBhbmQgTGJ1cyBjb250cm9sLgorCXdyaXRlX25pY19ieXRlKGRldiwgQU5BUEFSX0ZPUl84MTkyUGNpRSwgMHgwNyk7CisKK30KKwordm9pZCBydGw4MTkyX2hhbHRfYWRhcHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHJlc2V0KQoreworCS8vdTggCWNtZDsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0gICAgICAgIGludCBpOworCWludCBpOworCXU4CU9wTW9kZTsKKwl1OAl1MWJUbXA7CisJdTMyCXVsUmVnUmVhZDsKIAorCU9wTW9kZSA9IFJUX09QX01PREVfTk9fTElOSzsKKwlwcml2LT5pZWVlODAyMTEtPlNldEh3UmVnSGFuZGxlcihkZXYsIEhXX1ZBUl9NRURJQV9TVEFUVVMsICZPcE1vZGUpOworCisjaWYgMQorCWlmKCFwcml2LT5pZWVlODAyMTEtPmJTdXBwb3J0UmVtb3RlV2FrZVVwKQorCXsKKwkJdTFiVG1wID0gMHgwOwkvLyBkaXNhYmxlIHR4L3J4LiBJbiA4MTg1IHdlIHdyaXRlIDB4MTAgKFJlc2V0IGJpdCksIGJ1dCBoZXJlIHdlIG1ha2UgcmVmZXJlbmNlIHRvIFdNQUMgYW5kIHdpcnRlIDB4MC4gMjAwNi4xMS4yMSBFbWlseQorCQkvL3ByaXYtPmllZWU4MDIxMS0+U2V0SHdSZWdIYW5kbGVyKGRldiwgSFdfVkFSX0NPTU1BTkQsICZ1MWJUbXAgKTsJLy8gVXNpbmcgSFdfVkFSX0NPTU1BTkQgaW5zdGVhZCBvZiB3cml0aW5nIENNRFIgZGlyZWN0bHkuIFJld3JpdGVkIGJ5IEFubmllLCAyMDA2LTA0LTA3LgorCQl3cml0ZV9uaWNfYnl0ZShkZXYsIENNRFIsIHUxYlRtcCk7CisJfQorI2Vsc2UKIAljbWQ9cmVhZF9uaWNfYnl0ZShkZXYsQ01EUik7Ci0vLwlpZighcHJpdi0+aWVlZTgwMjExLT5iU3VwcG9ydFJlbW90ZVdha2VVcCkgewotCQl3cml0ZV9uaWNfYnl0ZShkZXYsIENNRFIsIGNtZCAmfiBcCi0JCQkJKENSX1RFfENSX1JFKSk7Ci0vLwl9Ci0JZm9yY2VfcGNpX3Bvc3RpbmcoZGV2KTsKLQltZGVsYXkoMzApOworCXdyaXRlX25pY19ieXRlKGRldiwgQ01EUiwgY21kICZ+IChDUl9URXxDUl9SRSkpOworI2VuZGlmCiAKLSAgICAgICAgZm9yKGkgPSAwOyBpIDwgTUFYX1FVRVVFX1NJWkU7IGkrKykgewotICAgICAgICAgICAgICAgIHNrYl9xdWV1ZV9wdXJnZSgmcHJpdi0+aWVlZTgwMjExLT5za2Jfd2FpdFEgW2ldKTsKLSAgICAgICAgfQotICAgICAgICBmb3IoaSA9IDA7IGkgPCBNQVhfUVVFVUVfU0laRTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgc2tiX3F1ZXVlX3B1cmdlKCZwcml2LT5pZWVlODAyMTEtPnNrYl9hZ2dRIFtpXSk7Ci0gICAgICAgIH0KKwltZGVsYXkoMjApOwogCisJaWYoIXJlc2V0KQorCXsKKwkJLy9QbGF0Zm9ybVN0YWxsRXhlY3V0aW9uKDE1MDAwMCk7CisJCW1kZWxheSgxNTApOworCisjaWZkZWYgUlRMODE5MkUKKwkJCXByaXYtPmJId1JmT2ZmQWN0aW9uID0gMjsKKyNlbmRpZgorCisJCS8vCisJCS8vIENhbGwgTWdudEFjdFNldF9SRl9TdGF0ZSBpbnN0ZWFkIHRvIHByZXZlbnQgUkYgY29uZmlnIHJhY2UgY29uZGl0aW9uLgorCQkvLyBCeSBCcnVjZSwgMjAwOC0wMS0xNy4KKwkJLy8KKwkJaWYoIXByaXYtPmllZWU4MDIxMS0+YlN1cHBvcnRSZW1vdGVXYWtlVXApCisJCXsKKwkJCS8vTWdudEFjdFNldF9SRl9TdGF0ZShBZGFwdGVyLCBlUmZPZmYsIFJGX0NIQU5HRV9CWV9JTklUKTsKKwkJCS8vTWdudEFjdFNldF9SRl9TdGF0ZShBZGFwdGVyLCBlUmZPZmYsIEFkYXB0ZXItPk1nbnRJbmZvLlJmT2ZmUmVhc29uKTsKKwkJCS8vaWYoQWRhcHRlci0+SGFyZHdhcmVUeXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODE5MFApCisKKwkJCVBIWV9TZXRSdGw4MTkyZVJmT2ZmKGRldik7CisKKwkJCS8vIDIwMDYuMTEuMzAuIFN5c3RlbSByZXNldCBiaXQKKwkJCS8vcHJpdi0+aWVlZTgwMjExLT5HZXRId1JlZ0hhbmRsZXIoZGV2LCBIV19WQVJfQ1BVX1JTVCwgKHUzMiopKCZ1bFJlZ1JlYWQpICk7CisJCQl1bFJlZ1JlYWQgPSByZWFkX25pY19kd29yZChkZXYsQ1BVX0dFTik7CisJCQl1bFJlZ1JlYWR8PUNQVV9HRU5fU1lTVEVNX1JFU0VUOworCQkJLy9wcml2LT5pZWVlODAyMTEtPlNldEh3UmVnSGFuZGxlcihkZXYsIEhXX1ZBUl9DUFVfUlNULCAmdWxSZWdSZWFkKTsKKwkJCXdyaXRlX25pY19kd29yZChkZXYsQ1BVX0dFTiwgdWxSZWdSZWFkKTsKKwkJfQorCSAJZWxzZQorCQl7CisJCQkvLzIwMDguMDYuMDMgZm9yIFdPTAorCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgV0ZDUkMwLCAweGZmZmZmZmZmKTsKKwkJCXdyaXRlX25pY19kd29yZChkZXYsIFdGQ1JDMSwgMHhmZmZmZmZmZik7CisJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBXRkNSQzIsIDB4ZmZmZmZmZmYpOworCisJCQkvL1dyaXRlIFBNUiByZWdpc3RlcgorCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBQTVIsIDB4NSk7CisJCQkvL0Rpc2FibGUgdHgsIGVuYW5ibGUgcngKKwkJCXdyaXRlX25pY19ieXRlKGRldiwgTWFjQmxrQ3RybCwgMHhhKTsKKwkJfQorCX0KKworCWZvcihpID0gMDsgaSA8IE1BWF9RVUVVRV9TSVpFOyBpKyspIHsKKwkJc2tiX3F1ZXVlX3B1cmdlKCZwcml2LT5pZWVlODAyMTEtPnNrYl93YWl0USBbaV0pOworCX0KKwlmb3IoaSA9IDA7IGkgPCBNQVhfUVVFVUVfU0laRTsgaSsrKSB7CisJCXNrYl9xdWV1ZV9wdXJnZSgmcHJpdi0+aWVlZTgwMjExLT5za2JfYWdnUSBbaV0pOworCX0KIAogCXNrYl9xdWV1ZV9wdXJnZSgmcHJpdi0+c2tiX3F1ZXVlKTsKIAlyZXR1cm47CiB9CiAKKyNpZiAwCiBzdGF0aWMgdm9pZCBydGw4MTkyX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAgICAgcnRsODE5Ml9pcnFfZGlzYWJsZShkZXYpOwogICAgIHByaW50aygiVGhpcyBpcyBSVEw4MTl4UCBSZXNldCBwcm9jZWR1cmVcbiIpOwogfQorI2VuZGlmCiAKIHN0YXRpYyB1MTYgcnRsX3JhdGVbXSA9IHsxMCwyMCw1NSwxMTAsNjAsOTAsMTIwLDE4MCwyNDAsMzYwLDQ4MCw1NDB9OwogaW5saW5lIHUxNiBydGw4MTkyX3JhdGUycmF0ZShzaG9ydCByYXRlKQpAQCAtOTU0LDYgKzExNjMsMTIgQEAKIAkvKiBzaGFsbCBub3QgYmUgcmVmZXJyZWQgYnkgY29tbWFuZCBwYWNrZXQgKi8KIAlhc3NlcnQocXVldWVfaW5kZXggIT0gVFhDTURfUVVFVUUpOwogCisJaWYoKHByaXYtPmJId1JhZGlvT2ZmID09IHRydWUpfHwoIXByaXYtPnVwKSkKKwl7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm47CisJfQorCiAJLy9zcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfbG9jayxmbGFncyk7CiAKICAgICAgICAgbWVtY3B5KCh1bnNpZ25lZCBjaGFyICopKHNrYi0+Y2IpLCZkZXYsc2l6ZW9mKGRldikpOwpAQCAtOTk2LDYgKzEyMTEsMTMgQEAKICAgICAgICAgY2JfZGVzYyAqdGNiX2Rlc2MgPSAoY2JfZGVzYyAqKShza2ItPmNiICsgTUFYX0RFVl9BRERSX1NJWkUpOwogICAgICAgICB1OCBxdWV1ZV9pbmRleCA9IHRjYl9kZXNjLT5xdWV1ZV9pbmRleDsKIAorICAgICAgICBpZihxdWV1ZV9pbmRleCAhPSBUWENNRF9RVUVVRSl7CisJCWlmKChwcml2LT5iSHdSYWRpb09mZiA9PSB0cnVlKXx8KCFwcml2LT51cCkpCisJCXsKKyAgICAgICAgICAgICAgIAkgCWtmcmVlX3NrYihza2IpOworICAgICAgICAgICAgICAgIAlyZXR1cm4gMDsKKyAgICAgICAgICAgIAl9CisgICAgICAgIH0KIAogCS8vc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnR4X2xvY2ssZmxhZ3MpOwogCkBAIC0xMzc5LDYgKzE2MDEsMTUgQEAKICAgICB1OCogICBwZGFfYWRkciA9IE5VTEw7CiAgICAgaW50ICAgaWR4OwogCisgICAgaWYocHJpdi0+YmRpc2FibGVfbmljKXsKKyAgICAgICAJUlRfVFJBQ0UoQ09NUF9FUlIsIiVzOiBFUlIhISBOaWMgaXMgZGlzYWJsZWQhIENhbid0IHR4IHBhY2tldCBsZW49JWQgcWlkeD0lZCEhIVxuIiwgX19GVU5DVElPTl9fLCBza2ItPmxlbiwgdGNiX2Rlc2MtPnF1ZXVlX2luZGV4KTsKKwkJcmV0dXJuIHNrYi0+bGVuOworICAgIH0KKworI2lmZGVmIEVOQUJMRV9MUFMKKwlwcml2LT5pZWVlODAyMTEtPmJBd2FrZVBrdFNlbnQgPSB0cnVlOworI2VuZGlmCisKICAgICBtYXBwaW5nID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgc2tiLT5kYXRhLCBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CiAgICAgLyogY29sbGVjdCB0aGUgdHggcGFja2V0cyBzdGF0aXRjcyAqLwogICAgIHBkYV9hZGRyID0gKCh1OCopc2tiLT5kYXRhKSArIHNpemVvZihUWF9GV0lORk9fODE5MFBDSSk7CkBAIC0xNDgxLDYgKzE3MTIsNyBAQAogICAgIGlmKChwZGVzYy0+T1dOID09IDEpICYmICh0Y2JfZGVzYy0+cXVldWVfaW5kZXggIT0gQkVBQ09OX1FVRVVFKSkgewogCSAgICBSVF9UUkFDRShDT01QX0VSUiwiTm8gbW9yZSBUWCBkZXNjQCVkLCByaW5nLT5pZHggPSAlZCxpZHggPSAlZCwleCIsIFwKIAkJCSAgICB0Y2JfZGVzYy0+cXVldWVfaW5kZXgscmluZy0+aWR4LCBpZHgsc2tiLT5sZW4pOworCSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5pcnFfdGhfbG9jayxmbGFncyk7CiAJICAgIHJldHVybiBza2ItPmxlbjsKICAgICB9CiAKQEAgLTE1NzUsNyArMTgwNyw3IEBACiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcHJpdi0+cnhfYnVmW2ldID0gc2tiOwogICAgICAgICBtYXBwaW5nID0gKGRtYV9hZGRyX3QgKilza2ItPmNiOwotICAgICAgICAqbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYsIHNrYi0+dGFpbCwvL3NrYl90YWlsX3BvaW50ZXIoc2tiKSwKKyAgICAgICAgKm1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCBza2JfdGFpbF9wb2ludGVyKHNrYiksCiAgICAgICAgICAgICAgICAgcHJpdi0+cnhidWZmZXJzaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCiAgICAgICAgIGVudHJ5LT5CdWZmZXJBZGRyZXNzID0gY3B1X3RvX2xlMzIoKm1hcHBpbmcpOwpAQCAtMTc3OSw3ICsyMDExLDcgQEAKIAkJCQkoKCh1MzIpKHFvc19wYXJhbWV0ZXJzLT5jd19tYXhbaV0pKTw8IEFDX1BBUkFNX0VDV19NQVhfT0ZGU0VUKXwKIAkJCQkoKCh1MzIpKHFvc19wYXJhbWV0ZXJzLT5jd19taW5baV0pKTw8IEFDX1BBUkFNX0VDV19NSU5fT0ZGU0VUKXwKIAkJCQkoKHUzMil1MWJBSUZTIDw8IEFDX1BBUkFNX0FJRlNfT0ZGU0VUKSk7Ci0JCXByaW50aygiPT09PnU0YkFjUGFyYW06JXgsICIsIHU0YkFjUGFyYW0pOworCQkvL3ByaW50aygiPT09PnU0YkFjUGFyYW06JXgsICIsIHU0YkFjUGFyYW0pOwogCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBXRENBUEFSQV9BRERbaV0sIHU0YkFjUGFyYW0pOwogCQkvL3dyaXRlX25pY19kd29yZChkZXYsIFdEQ0FQQVJBX0FERFtpXSwgMHgwMDVlNDMzMik7CiAJfQpAQCAtMTk2NCwxMSArMjE5NiwyNCBAQAogCXdyaXRlX25pY19ieXRlKGRldiwgVUZXUCwgMSk7CiB9CiAKKyNpZiAwCiBzdGF0aWMgdTggY2NtcF9pZVs0XSA9IHsweDAwLDB4NTAsMHhmMiwweDA0fTsKIHN0YXRpYyB1OCBjY21wX3Jzbl9pZVs0XSA9IHsweDAwLCAweDBmLCAweGFjLCAweDA0fTsKKyNlbmRpZgorCiBzdGF0aWMgYm9vbCBHZXRObW9kZVN1cHBvcnRCeVNlY0NmZzgxOTBQY2koc3RydWN0IG5ldF9kZXZpY2UqZGV2KQogewogI2lmIDEKKworCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU4MDIxMTsKKwlpZiAoaWVlZS0+cnRsbGliX2FwX3NlY190eXBlICYmCisJICAgKGllZWUtPnJ0bGxpYl9hcF9zZWNfdHlwZShpZWVlKSYoU0VDX0FMR19XRVB8U0VDX0FMR19US0lQKSkpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0gZWxzZSB7CisJCXJldHVybiB0cnVlOworCX0KKyNlbHNlCiAJc3RydWN0IHI4MTkyX3ByaXYqIHByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKiBpZWVlID0gcHJpdi0+aWVlZTgwMjExOwogICAgICAgICBpbnQgd3BhX2llX2xlbj0gaWVlZS0+d3BhX2llX2xlbjsKQEAgLTE5OTUsMTggKzIyNDAsNiBAQAogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKLSNpZiAwCi0gICAgICAgIC8vSW4gaGVyZSB3ZSBkaXNjdXNzIHdpdGggU0Q0IERhdmlkLiBIZSB0aGluayB3ZSBzdGlsbCBjYW4gc2VuZCBUS0lQIGluIGJyb2FkY2FzdCBncm91cCBrZXkgaW4gTUNTIHJhdGUuCi0gICAgICAgIC8vV2UgY2FuJ3QgZm9yY2UgaW4gRyBtb2RlIGlmIFBhaXJ3aWUga2V5IGlzIEFFUyBhbmQgZ3JvdXAga2V5IGlzIFRLSVAKLSAgICAgICAgaWYoKHBTZWNJbmZvLT5Hcm91cEVuY0FsZ29yaXRobSA9PSBXRVAxMDRfRW5jcnlwdGlvbikgfHwgKHBTZWNJbmZvLT5Hcm91cEVuY0FsZ29yaXRobSA9PSBXRVA0MF9FbmNyeXB0aW9uKSAgfHwKLSAgICAgICAgICAgKHBTZWNJbmZvLT5QYWlyd2lzZUVuY0FsZ29yaXRobSA9PSBXRVAxMDRfRW5jcnlwdGlvbikgfHwKLSAgICAgICAgICAgKHBTZWNJbmZvLT5QYWlyd2lzZUVuY0FsZ29yaXRobSA9PSBXRVA0MF9FbmNyeXB0aW9uKSB8fCAocFNlY0luZm8tPlBhaXJ3aXNlRW5jQWxnb3JpdGhtID09IFRLSVBfRW5jcnlwdGlvbikpCi0gICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSNlbmRpZgogCXJldHVybiB0cnVlOwogI2VuZGlmCiB9CkBAIC0yMDgwLDcgKzIzMTMsNyBAQAogCQkJd2lyZWxlc3NfbW9kZSA9IFdJUkVMRVNTX01PREVfQjsKIAkJfQogCX0KLSNpZmRlZiBUT19ET19MSVNUIC8vLy8gVE9ETzogdGhpcyBmdW5jdGlvbiBkb2Vzbid0IHdvcmsgd2VsbCBhdCB0aGlzIHRpbWUsIHdlIHNob3VkIHdhaXQgZm9yIEZQR0EKKyNpZmRlZiBUT19ET19MSVNUIC8vLy8gVE9ETzogdGhpcyBmdW5jdGlvbiBkb2Vzbid0IHdvcmsgd2VsbCBhdCB0aGlzIHRpbWUsIHdlIHNob3VsZCB3YWl0IGZvciBGUEdBCiAJQWN0VXBkYXRlQ2hhbm5lbEFjY2Vzc1NldHRpbmcoIHBBZGFwdGVyLCBwSGFsRGF0YS0+Q3VycmVudFdpcmVsZXNzTW9kZSwgJnBBZGFwdGVyLT5NZ250SW5mby5JbmZvODE4NS5DaGFubmVsQWNjZXNzU2V0dGluZyApOwogI2VuZGlmCiAJcHJpdi0+aWVlZTgwMjExLT5tb2RlID0gd2lyZWxlc3NfbW9kZTsKQEAgLTIxMjcsNyArMjM2MCwxOSBAQAogfQogc3RhdGljIHZvaWQgcnRsODE5Ml9od19zbGVlcF9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JUlRfVFJBQ0UoQ09NUF9QT1dFUiwgIiVzKCk9PT09PT09PT09PT0+Y29tZSB0byBzbGVlcCBkb3duXG4iLCBfX0ZVTkNUSU9OX18pOworCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZl9wc19sb2NrLGZsYWdzKTsKKwlpZiAocHJpdi0+UkZDaGFuZ2VJblByb2dyZXNzKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJmX3BzX2xvY2ssZmxhZ3MpOworCQlSVF9UUkFDRShDT01QX1JGLCAicnRsODE5Ml9od19zbGVlcF9kb3duKCk6IFJGIENoYW5nZSBpbiBwcm9ncmVzcyEgXG4iKTsKKwkJcHJpbnRrKCJydGw4MTkyX2h3X3NsZWVwX2Rvd24oKTogUkYgQ2hhbmdlIGluIHByb2dyZXNzIVxuIik7CisJCXJldHVybjsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmZfcHNfbG9jayxmbGFncyk7CisJLy9SVF9UUkFDRShDT01QX1BTLCAiJXMoKT09PT09PT09PT09PT5jb21lIHRvIHNsZWVwIGRvd25cbiIsIF9fRlVOQ1RJT05fXyk7CisKIAlNZ250QWN0U2V0X1JGX1N0YXRlKGRldiwgZVJmU2xlZXAsIFJGX0NIQU5HRV9CWV9QUyk7CiB9CiBzdGF0aWMgdm9pZCBydGw4MTkyX2h3X3NsZWVwX3dxIChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC0yMTM4LDIxICsyMzgzLDI5IEBACiAgICAgICAgIHN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gY29udGFpbmVyX29mKHdvcmssc3RydWN0IGRlbGF5ZWRfd29yayx3b3JrKTsKICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBjb250YWluZXJfb2YoZHdvcmssc3RydWN0IGllZWU4MDIxMV9kZXZpY2UsaHdfc2xlZXBfd3EpOwogICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaWVlZS0+ZGV2OwotCS8vcHJpbnRrKCI9PT09PT09PT0+JXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwogICAgICAgICBydGw4MTkyX2h3X3NsZWVwX2Rvd24oZGV2KTsKIH0KLS8vCXByaW50aygiZGV2IGlzICVkXG4iLGRldik7Ci0vLwlwcmludGsoIiYqJiheKigmKCY9PT09PT09PT0+JXMoKVxuIiwgX19GVU5DVElPTl9fKTsKKwogc3RhdGljIHZvaWQgcnRsODE5Ml9od193YWtldXAoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKIHsKLS8vCXUzMiBmbGFncyA9IDA7CisJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCi0vLwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cHNfbG9jayxmbGFncyk7Ci0JUlRfVFJBQ0UoQ09NUF9QT1dFUiwgIiVzKCk9PT09PT09PT09PT0+Y29tZSB0byB3YWtlIHVwXG4iLCBfX0ZVTkNUSU9OX18pOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZl9wc19sb2NrLGZsYWdzKTsKKwlpZiAocHJpdi0+UkZDaGFuZ2VJblByb2dyZXNzKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJmX3BzX2xvY2ssZmxhZ3MpOworCQlSVF9UUkFDRShDT01QX1JGLCAicnRsODE5Ml9od193YWtldXAoKTogUkYgQ2hhbmdlIGluIHByb2dyZXNzISBcbiIpOworCQlwcmludGsoInJ0bDgxOTJfaHdfd2FrZXVwKCk6IFJGIENoYW5nZSBpbiBwcm9ncmVzcyEgc2NoZWR1bGUgd2FrZSB1cCB0YXNrIGFnYWluXG4iKTsKKwkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPmllZWU4MDIxMS0+d3EsJnByaXYtPmllZWU4MDIxMS0+aHdfd2FrZXVwX3dxLE1TRUNTKDEwKSk7Ly9Qb3dlclNhdmUgaXMgbm90IHN1cHBvcnRlZCBpZiBrZXJuZWwgdmVyc2lvbiBpcyBiZWxvdyAyLjYuMjAKKwkJcmV0dXJuOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZl9wc19sb2NrLGZsYWdzKTsKKworCS8vUlRfVFJBQ0UoQ09NUF9QUywgIiVzKCk9PT09PT09PT09PT0+Y29tZSB0byB3YWtlIHVwXG4iLCBfX0ZVTkNUSU9OX18pOwogCU1nbnRBY3RTZXRfUkZfU3RhdGUoZGV2LCBlUmZPbiwgUkZfQ0hBTkdFX0JZX1BTKTsKLQkvL0ZJWE1FOiB3aWxsIHdlIHNlbmQgcGFja2FnZSBzdG9yZWQgd2hpbGUgbmljIGlzIHNsZWVwPwotLy8Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cHNfbG9jayxmbGFncyk7CiB9CisKIHZvaWQgcnRsODE5Ml9od193YWtldXBfd3EgKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIC8vCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByODE4MF9wcml2LCB3YXRjaF9kb2dfd3EpOwpAQCAtMjE2OSw3ICsyNDIyLDYgQEAKICNkZWZpbmUgTUFYX1NMRUVQX1RJTUUgMTAwMDAKIHN0YXRpYyB2b2lkIHJ0bDgxOTJfaHdfdG9fc2xlZXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHRoLCB1MzIgdGwpCiB7Ci0KIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAKIAl1MzIgcmIgPSBqaWZmaWVzOwpAQCAtMjE3Nyw1OCArMjQyOSw1NSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnBzX2xvY2ssZmxhZ3MpOwogCi0JLyogV3JpdGluZyBIVyByZWdpc3RlciB3aXRoIDAgZXF1YWxzIHRvIGRpc2FibGUKLQkgKiB0aGUgdGltZXIsIHRoYXQgaXMgbm90IHJlYWxseSB3aGF0IHdlIHdhbnQKLQkgKi8KLQl0bCAtPSBNU0VDUyg0KzE2KzcpOworCS8vIFdyaXRpbmcgSFcgcmVnaXN0ZXIgd2l0aCAwIGVxdWFscyB0byBkaXNhYmxlCisJLy8gdGhlIHRpbWVyLCB0aGF0IGlzIG5vdCByZWFsbHkgd2hhdCB3ZSB3YW50CisJLy8KKwl0bCAtPSBNU0VDUyg4KzE2KzcpOwogCi0JLy9pZih0bCA9PSAwKSB0bCA9IDE7Ci0KLQkvKiBGSVhNRSBIQUNLIEZJWE1FIEhBQ0sgKi8KLS8vCWZvcmNlX3BjaV9wb3N0aW5nKGRldik7Ci0JLy9tZGVsYXkoMSk7Ci0KLS8vCXJiID0gcmVhZF9uaWNfZHdvcmQoZGV2LCBUU0ZUUik7Ci0KLQkvKiBJZiB0aGUgaW50ZXJ2YWwgaW4gd2l0Y2ggd2UgYXJlIHJlcXVlc3RlZCB0byBzbGVlcCBpcyB0b28KLQkgKiBzaG9ydCB0aGVuIGdpdmUgdXAgYW5kIHJlbWFpbiBhd2FrZQotCSAqLworCS8vIElmIHRoZSBpbnRlcnZhbCBpbiB3aXRjaCB3ZSBhcmUgcmVxdWVzdGVkIHRvIHNsZWVwIGlzIHRvbworCS8vIHNob3J0IHRoZW4gZ2l2ZSB1cCBhbmQgcmVtYWluIGF3YWtlCisJLy8gd2hlbiB3ZSBzbGVlcCBhZnRlciBzZW5kIG51bGwgZnJhbWUsIHRoZSB0aW1lciB3aWxsIGJlIHRvbyBzaG9ydCB0byBzbGVlcC4KKwkvLwogCWlmKCgodGw+PXJiKSYmICh0bC1yYikgPD0gTVNFQ1MoTUlOX1NMRUVQX1RJTUUpKQotCQl8fCgocmI+dGwpJiYgKHJiLXRsKSA8IE1TRUNTKE1JTl9TTEVFUF9USU1FKSkpIHsKKwkJCXx8KChyYj50bCkmJiAocmItdGwpIDwgTVNFQ1MoTUlOX1NMRUVQX1RJTUUpKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5wc19sb2NrLGZsYWdzKTsKLQkJcHJpbnRrKCJ0b28gc2hvcnQgdG8gc2xlZXBcbiIpOworCQlwcmludGsoInRvbyBzaG9ydCB0byBzbGVlcDo6JXgsICV4LCAlbHhcbiIsdGwsIHJiLCAgTVNFQ1MoTUlOX1NMRUVQX1RJTUUpKTsKIAkJcmV0dXJuOwogCX0KIAotLy8Jd3JpdGVfbmljX2R3b3JkKGRldiwgVGltZXJJbnQsIHRsKTsKLS8vCXJiID0gcmVhZF9uaWNfZHdvcmQoZGV2LCBUU0ZUUik7Ci0JewotCQl1MzIgdG1wID0gKHRsPnJiKT8odGwtcmIpOihyYi10bCk7Ci0JLy8JaWYgKHRsPHJiKQotCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+aWVlZTgwMjExLT53cSwgJnByaXYtPmllZWU4MDIxMS0+aHdfd2FrZXVwX3dxLCB0bXApOyAvL2FzIHRsIG1heSBiZSBsZXNzIHRoYW4gcmIKLQl9Ci0JLyogaWYgd2Ugc3VzcGVjdCB0aGUgVGltZXJJbnQgaXMgZ29uZSBiZXlvbmQgdGwKLQkgKiB3aGlsZSBzZXR0aW5nIGl0LCB0aGVuIGdpdmUgdXAKLQkgKi8KLSNpZiAxCiAJaWYoKCh0bCA+IHJiKSAmJiAoKHRsLXJiKSA+IE1TRUNTKE1BWF9TTEVFUF9USU1FKSkpfHwKLQkJKCh0bCA8IHJiKSAmJiAoKHJiLXRsKSA+IE1TRUNTKE1BWF9TTEVFUF9USU1FKSkpKSB7CisJCQkoKHRsIDwgcmIpICYmICh0bD5NU0VDUyg2OSkpICYmICgocmItdGwpID4gTVNFQ1MoTUFYX1NMRUVQX1RJTUUpKSl8fAorCQkJKCh0bDxyYikmJih0bDxNU0VDUyg2OSkpJiYoKHRsKzB4ZmZmZmZmZmYtcmIpPk1TRUNTKE1BWF9TTEVFUF9USU1FKSkpKSB7CiAJCXByaW50aygiPT09PT09PT0+dG9vIGxvbmcgdG8gc2xlZXA6JXgsICV4LCAlbHhcbiIsIHRsLCByYiwgIE1TRUNTKE1BWF9TTEVFUF9USU1FKSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnBzX2xvY2ssZmxhZ3MpOwogCQlyZXR1cm47CiAJfQotI2VuZGlmCi0vLwlpZihwcml2LT5yZl9zbGVlcCkKLS8vCQlwcml2LT5yZl9zbGVlcChkZXYpOwotCi0JLy9wcmludGsoIjw9PT09PT09PT0lcygpXG4iLCBfX0ZVTkNUSU9OX18pOwotCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT5pZWVlODAyMTEtPndxLCAodm9pZCAqKSZwcml2LT5pZWVlODAyMTEtPmh3X3NsZWVwX3dxLDApOworCXsKKwkJdTMyIHRtcCA9ICh0bD5yYik/KHRsLXJiKToocmItdGwpOworCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+aWVlZTgwMjExLT53cSwKKwkJCQkmcHJpdi0+aWVlZTgwMjExLT5od193YWtldXBfd3EsdG1wKTsKKwkJLy9Qb3dlclNhdmUgbm90IHN1cHBvcnRlZCB3aGVuIGtlcm5lbCB2ZXJzaW9uIGxlc3MgMi42LjIwCisJfQorCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT5pZWVlODAyMTEtPndxLAorCQkJKHZvaWQgKikmcHJpdi0+aWVlZTgwMjExLT5od19zbGVlcF93cSwwKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5wc19sb2NrLGZsYWdzKTsKKwogfQogc3RhdGljIHZvaWQgcnRsODE5Ml9pbml0X3ByaXZfdmFyaWFibGUoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKIHsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJdTggaTsKKwlQUlRfUE9XRVJfU0FWRV9DT05UUk9MCXBQU0MgPSAoUFJUX1BPV0VSX1NBVkVfQ09OVFJPTCkoJihwcml2LT5pZWVlODAyMTEtPlBvd2VyU2F2ZUNvbnRyb2wpKTsKKworCS8vIERlZmF1bHQgSGFsdCB0aGUgTklDIGlmIFJGIGlzIE9GRi4KKwlwUFNDLT5SZWdSZlBzTGV2ZWwgfD0gUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUM7CisJcFBTQy0+UmVnUmZQc0xldmVsIHw9IFJUX1JGX09GRl9MRVZMX0NMS19SRVE7CisJcFBTQy0+UmVnUmZQc0xldmVsIHw9IFJUX1JGX09GRl9MRVZMX0FTUE07CisJcFBTQy0+UmVnUmZQc0xldmVsIHw9IFJUX1JGX0xQU19MRVZFTF9BU1BNOworCXBQU0MtPmJMZWlzdXJlUHMgPSB0cnVlOworCXBQU0MtPlJlZ01heExQU0F3YWtlSW50dmwgPSA1OworCXByaXYtPmJId1JhZGlvT2ZmID0gZmFsc2U7CisKIAlwcml2LT5iZWluZ19pbml0X2FkYXB0ZXIgPSBmYWxzZTsKIAlwcml2LT50eGJ1ZmZzaXplID0gMTYwMDsvLzEwMjQ7CiAJcHJpdi0+dHhmd2J1ZmZlcnNpemUgPSA0MDk2OwpAQCAtMjMyOCw2ICsyNTc3LDE3IEBACiAJLy9hZGRlZCBieSBhbXkKIAlwcml2LT5pZWVlODAyMTEtPkluaXRpYWxHYWluSGFuZGxlciA9IEluaXRpYWxHYWluODE5eFBjaTsKIAorI2lmZGVmIEVOQUJMRV9JUFMKKwlwcml2LT5pZWVlODAyMTEtPmllZWU4MDIxMV9pcHNfbGVhdmVfd3EgPSBpZWVlODAyMTFfaXBzX2xlYXZlX3dxOworCXByaXYtPmllZWU4MDIxMS0+aWVlZTgwMjExX2lwc19sZWF2ZSA9IGllZWU4MDIxMV9pcHNfbGVhdmU7CisjZW5kaWYKKyNpZmRlZiBFTkFCTEVfTFBTCisgICAgICAgIHByaXYtPmllZWU4MDIxMS0+TGVpc3VyZVBTTGVhdmUgICAgICAgICAgICA9IExlaXN1cmVQU0xlYXZlOworI2VuZGlmLy9FTkFCTAorCisJcHJpdi0+aWVlZTgwMjExLT5TZXRId1JlZ0hhbmRsZXIgPSBydGw4MTkyZV9TZXRId1JlZzsKKwlwcml2LT5pZWVlODAyMTEtPnJ0bGxpYl9hcF9zZWNfdHlwZSA9IHJ0bDgxOTJlX2FwX3NlY190eXBlOworCiAJcHJpdi0+Y2FyZF90eXBlID0gVVNCOwogCXsKIAkJcHJpdi0+U2hvcnRSZXRyeUxpbWl0ID0gMHgzMDsKQEAgLTI0MDAsNiArMjY2MCwxMCBAQAogCXByaXYtPnByaXZfd3EgPSBjcmVhdGVfd29ya3F1ZXVlKERSVl9OQU1FKTsKICNlbmRpZgogCisjaWZkZWYgRU5BQkxFX0lQUworCUlOSVRfV09SSygmcHJpdi0+aWVlZTgwMjExLT5pcHNfbGVhdmVfd3EsICh2b2lkKilJUFNMZWF2ZV93cSk7CisjZW5kaWYKKwogLy8JSU5JVF9XT1JLKCZwcml2LT5yZXNldF93cSwgKHZvaWQoKikodm9pZCopKSBydGw4MTkyX3Jlc3RhcnQpOwogCUlOSVRfV09SSygmcHJpdi0+cmVzZXRfd3EsICBydGw4MTkyX3Jlc3RhcnQpOwogLy8JSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPndhdGNoX2RvZ193cSwgaGFsX2RtX3dhdGNoZG9nKTsKQEAgLTI1NTAsMTAgKzI4MTQsNyBAQAogCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgYk1hY19UbXBfQWRkciwgNik7CiAJfQogCi0JUlRfVFJBQ0UoQ09NUF9JTklULCAiUGVybWFuZW50IEFkZHJlc3MgPSAlMDJ4LSUwMngtJTAyeC0lMDJ4LSUwMngtJTAyeFxuIiwKLQkJCWRldi0+ZGV2X2FkZHJbMF0sIGRldi0+ZGV2X2FkZHJbMV0sCi0JCQlkZXYtPmRldl9hZGRyWzJdLCBkZXYtPmRldl9hZGRyWzNdLAotCQkJZGV2LT5kZXZfYWRkcls0XSwgZGV2LT5kZXZfYWRkcls1XSk7CisJUlRfVFJBQ0UoQ09NUF9JTklULCAiUGVybWFuZW50IEFkZHJlc3MgPSAlcE1cbiIsIGRldi0+ZGV2X2FkZHIpOwogCiAJCS8vMiBUWCBQb3dlciBDaGVjayBFRVBST00gRmFpbCBvciBub3QKIAlpZihwcml2LT5jYXJkXzgxOTJfdmVyc2lvbiA+IFZFUlNJT05fODE5MF9CRCkgewpAQCAtMjkyNiwxMyArMzE4NywxNCBAQAogCQkjZW5kaWYKIAkJCWJyZWFrOwogCX0KLS8qCi0JLy8yMDA4LjA2LjAzLCBmb3IgV09MCisKKwogCWlmKCBwcml2LT5lZXByb21fdmlkID09IDB4MTE4NiAmJiAgcHJpdi0+ZWVwcm9tX2RpZCA9PSAweDMzMDQpCi0JCXByaXYtPmllZWU4MDIxMS0+YlN1cHBvcnRSZW1vdGVXYWtlVXAgPSBUUlVFOworCQlwcml2LT5pZWVlODAyMTEtPmJTdXBwb3J0UmVtb3RlV2FrZVVwID0gdHJ1ZTsKIAllbHNlCi0JCXByaXYtPmllZWU4MDIxMS0+YlN1cHBvcnRSZW1vdGVXYWtlVXAgPSBGQUxTRTsKLSovCisJCXByaXYtPmllZWU4MDIxMS0+YlN1cHBvcnRSZW1vdGVXYWtlVXAgPSBmYWxzZTsKKworCiAJUlRfVFJBQ0UoQ09NUF9JTklULCAiUmVnQ2hhbm5lbFBsYW4oJWQpXG4iLCBwcml2LT5SZWdDaGFubmVsUGxhbik7CiAJUlRfVFJBQ0UoQ09NUF9JTklULCAiQ2hhbm5lbFBsYW4gPSAlZCBcbiIsIHByaXYtPkNoYW5uZWxQbGFuKTsKIAlSVF9UUkFDRShDT01QX0lOSVQsICJMZWRTdHJhdGVneSA9ICVkIFxuIiwgcHJpdi0+TGVkU3RyYXRlZ3kpOwpAQCAtNDAwNiwxMiArNDI2OCwxOSBAQAogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTgwMjExOwogCiAKKwlyZXR1cm47CisKIAkvLyAyMDA3LjA3LjIwLiBJZiB3ZSBuZWVkIHRvIGNoZWNrIENDSyBzdG9wLCBwbGVhc2UgdW5jb21tZW50IHRoaXMgbGluZS4KIAkvL2JTdHVjayA9IEFkYXB0ZXItPkhhbEZ1bmMuQ2hlY2tIV1N0b3BIYW5kbGVyKEFkYXB0ZXIpOwogCiAJaWYocHJpdi0+UmVzZXRQcm9ncmVzcz09UkVTRVRfVFlQRV9OT1JFU0VUKQogCXsKIFJFU0VUX1NUQVJUOgorI2lmZGVmIEVOQUJMRV9MUFMKKyAgICAgICAgICAgICAgICAvL0xaTSBmb3IgUFMtUG9sbCBBSUQgaXNzdWUuIDA5MDQyOQorICAgICAgICAgICAgICAgIGlmKHByaXYtPmllZWU4MDIxMS0+c3RhdGUgPT0gSUVFRTgwMjExX0xJTktFRCkKKyAgICAgICAgICAgICAgICAgICAgTGVpc3VyZVBTTGVhdmUoZGV2KTsKKyNlbmRpZgogCiAJCVJUX1RSQUNFKENPTVBfUkVTRVQsIj09PT09PT09PT5SZXNldCBwcm9ncmVzcyEhIFxuIik7CiAKQEAgLTQwNTEsOSArNDMyMCw5IEBACiAJCX0KIAkJZWxzZXsKIAkJCXByaW50aygiaWVlZS0+c3RhdGUgaXMgTk9UIExJTktFRFxuIik7Ci0JCQlpZWVlODAyMTFfc29mdG1hY19zdG9wX3Byb3RvY29sKHByaXYtPmllZWU4MDIxMSk7CisJCQlpZWVlODAyMTFfc29mdG1hY19zdG9wX3Byb3RvY29sKHByaXYtPmllZWU4MDIxMSx0cnVlKTsKIAkJfQotCQlydGw4MTkyX3J0eF9kaXNhYmxlKGRldik7CisJCXJ0bDgxOTJfaGFsdF9hZGFwdGVyKGRldiwgdHJ1ZSk7CiAJCXVwKCZwcml2LT53eF9zZW0pOwogCQlSVF9UUkFDRShDT01QX1JFU0VULCIlcygpOjw9PT09PT09PT09ZG93biBwcm9jZXNzIGlzIGZpbmlzaGVkXG4iLF9fRlVOQ1RJT05fXyk7CiAJCVJUX1RSQUNFKENPTVBfUkVTRVQsIiVzKCk6PT09PT09PT09PT0+c3RhcnQgdG8gdXAgdGhlIGRyaXZlclxuIixfX0ZVTkNUSU9OX18pOwpAQCAtNDE1MCw2ICs0NDE5LDEyOCBAQAogCVJUX1RSQUNFKENPTVBfUE9XRVIsICJJbmFjdGl2ZVBzV29ya0l0ZW1DYWxsYmFjaygpIDwtLS0tLS0tLS0gXG4iKTsKIH0KIAorI2lmZGVmIEVOQUJMRV9MUFMKKy8vCisvLyBDaGFuZ2UgY3VycmVudCBhbmQgZGVmYXVsdCBwcmVhbWJsZSBtb2RlLgorLy8gMjAwNS4wMS4wNiwgYnkgcmNuamtvLgorLy8KK2Jvb2wgTWdudEFjdFNldF84MDJfMTFfUG93ZXJTYXZlTW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAl1OCBydFBzTW9kZSkKK3sKKwlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJLy9QUlRfUE9XRVJfU0FWRV9DT05UUk9MIHBQU0MgPSAoUFJUX1BPV0VSX1NBVkVfQ09OVFJPTCkoJihwcml2LT5pZWVlODAyMTEtPlBvd2VyU2F2ZUNvbnRyb2wpKTsKKwkvL3U4IFJwd21WYWwsIEZ3UHdyTW9kZTsKKworCS8vIEN1cnJlbnRseSwgd2UgZG8gbm90IGNoYW5nZSBwb3dlciBzYXZlIG1vZGUgb24gSUJTUyBtb2RlLgorCWlmKHByaXYtPmllZWU4MDIxMS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKQorCXsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8vCisJLy8gPFJKX05PVEU+IElmIHdlIG1ha2UgSFcgdG8gZmlsbCB1cCB0aGUgUHdyTWd0IGJpdCBmb3IgdXMsCisJLy8gc29tZSBBUCB3aWxsIG5vdCByZXNwb25zZSB0byBvdXIgbWdudCBmcmFtZXMgd2l0aCBQd3JNZ3QgYml0IHNldCwKKwkvLyBlLmcuIGNhbm5vdCBhc3NvY2lhdGUgdGhlIEFQLgorCS8vIFNvIEkgY29tbWVudGVkIG91dCBpdC4gMjAwNS4wMi4xNiwgYnkgcmNuamtvLgorCS8vCisvLwkvLyBDaGFuZ2UgZGV2aWNlJ3MgcG93ZXIgc2F2ZSBtb2RlLgorLy8JQWRhcHRlci0+SGFsRnVuYy5TZXRQU01vZGVIYW5kbGVyKCBBZGFwdGVyLCBydFBzTW9kZSApOworCisJLy8gVXBkYXRlIHBvd2VyIHNhdmUgbW9kZSBjb25maWd1cmVkLgorCS8vUlRfVFJBQ0UoQ09NUF9MUFMsIiVzKCk6IHNldCBpZWVlLT5wcyA9ICV4XG4iLF9fRlVOQ1RJT05fXyxydFBzTW9kZSk7CisJaWYoIXByaXYtPnBzX2ZvcmNlKSB7CisJCXByaXYtPmllZWU4MDIxMS0+cHMgPSBydFBzTW9kZTsKKwl9CisKKwkvLyBBd2FrZSBpbW1lZGlhdGVseQorCWlmKHByaXYtPmllZWU4MDIxMS0+c3RhX3NsZWVwICE9IDAgJiYgcnRQc01vZGUgPT0gSUVFRTgwMjExX1BTX0RJU0FCTEVEKQorCXsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCS8vUGxhdGZvcm1TZXRUaW1lcihBZGFwdGVyLCAmKHBNZ250SW5mby0+QXdha2VUaW1lciksIDApOworCQkvLyBOb3RpZnkgdGhlIEFQIHdlIGF3a2UuCisJCXJ0bDgxOTJfaHdfd2FrZXVwKGRldik7CisJCXByaXYtPmllZWU4MDIxMS0+c3RhX3NsZWVwID0gMDsKKworICAgICAgICAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCYocHJpdi0+aWVlZTgwMjExLT5tZ210X3R4X2xvY2spLCBmbGFncyk7CisJCXByaW50aygiTFBTIGxlYXZlOiBub3RpZnkgQVAgd2UgYXJlIGF3YWtlZCArKysrKysrKysrIFNlbmROdWxsRnVuY3Rpb25EYXRhXG4iKTsKKwkJaWVlZTgwMjExX3N0YV9wc19zZW5kX251bGxfZnJhbWUocHJpdi0+aWVlZTgwMjExLCAwKTsKKyAgICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCYocHJpdi0+aWVlZTgwMjExLT5tZ210X3R4X2xvY2spLCBmbGFncyk7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIExlaXN1cmUgUG93ZXIgU2F2ZSBpbiBsaW5rZWQgc3RhdGUuCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8vCisvLwlEZXNjcmlwdGlvbjoKKy8vCQlFbnRlciB0aGUgbGVpc3VyZSBwb3dlciBzYXZlIG1vZGUuCisvLwordm9pZCBMZWlzdXJlUFNFbnRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlQUlRfUE9XRVJfU0FWRV9DT05UUk9MIHBQU0MgPSAoUFJUX1BPV0VSX1NBVkVfQ09OVFJPTCkoJihwcml2LT5pZWVlODAyMTEtPlBvd2VyU2F2ZUNvbnRyb2wpKTsKKworCS8vUlRfVFJBQ0UoQ09NUF9QUywgIkxlaXN1cmVQU0VudGVyKCkuLi5cbiIpOworCS8vUlRfVFJBQ0UoQ09NUF9QUywgInBQU0MtPmJMZWlzdXJlUHMgPSAlZCwgaWVlZS0+cHMgPSAlZCxwUFNDLT5McHNJZGxlQ291bnQgaXMgJWQsUlRfQ0hFQ0tfRk9SX0hBTkdfUEVSSU9EIGlzICVkXG4iLAorCS8vCXBQU0MtPmJMZWlzdXJlUHMsIHByaXYtPmllZWU4MDIxMS0+cHMscFBTQy0+THBzSWRsZUNvdW50LFJUX0NIRUNLX0ZPUl9IQU5HX1BFUklPRCk7CisKKwlpZighKChwcml2LT5pZWVlODAyMTEtPml3X21vZGUgPT0gSVdfTU9ERV9JTkZSQSkgJiYKKwkJKHByaXYtPmllZWU4MDIxMS0+c3RhdGUgPT0gSUVFRTgwMjExX0xJTktFRCkpIHx8CisJCShwcml2LT5pZWVlODAyMTEtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykgfHwKKwkJKHByaXYtPmllZWU4MDIxMS0+aXdfbW9kZSA9PSBJV19NT0RFX01BU1RFUikpCisJCXJldHVybjsKKworCWlmIChwUFNDLT5iTGVpc3VyZVBzKQorCXsKKwkJLy8gSWRsZSBmb3IgYSB3aGlsZSBpZiB3ZSBjb25uZWN0IHRvIEFQIGEgd2hpbGUgYWdvLgorCQlpZihwUFNDLT5McHNJZGxlQ291bnQgPj0gUlRfQ0hFQ0tfRk9SX0hBTkdfUEVSSU9EKSAvLyAgNCBTZWMKKwkJeworCisJCQlpZihwcml2LT5pZWVlODAyMTEtPnBzID09IElFRUU4MDIxMV9QU19ESVNBQkxFRCkKKwkJCXsKKworCQkJCS8vUlRfVFJBQ0UoQ09NUF9MUFMsICJMZWlzdXJlUFNFbnRlcigpOiBFbnRlciA4MDIuMTEgcG93ZXIgc2F2ZSBtb2RlLi4uXG4iKTsKKwkJCQlNZ250QWN0U2V0XzgwMl8xMV9Qb3dlclNhdmVNb2RlKGRldiwgSUVFRTgwMjExX1BTX01CQ0FTVHxJRUVFODAyMTFfUFNfVU5JQ0FTVCk7CisKKwkJCX0KKwkJfQorCQllbHNlCisJCQlwUFNDLT5McHNJZGxlQ291bnQrKzsKKwl9Cit9CisKKworLy8KKy8vCURlc2NyaXB0aW9uOgorLy8JCUxlYXZlIHRoZSBsZWlzdXJlIHBvd2VyIHNhdmUgbW9kZS4KKy8vCit2b2lkIExlaXN1cmVQU0xlYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCVBSVF9QT1dFUl9TQVZFX0NPTlRST0wgcFBTQyA9IChQUlRfUE9XRVJfU0FWRV9DT05UUk9MKSgmKHByaXYtPmllZWU4MDIxMS0+UG93ZXJTYXZlQ29udHJvbCkpOworCisKKwkvL1JUX1RSQUNFKENPTVBfUFMsICJMZWlzdXJlUFNMZWF2ZSgpLi4uXG4iKTsKKwkvL1JUX1RSQUNFKENPTVBfUFMsICJwUFNDLT5iTGVpc3VyZVBzID0gJWQsIGllZWUtPnBzID0gJWRcbiIsCisJLy8JcFBTQy0+YkxlaXN1cmVQcywgcHJpdi0+aWVlZTgwMjExLT5wcyk7CisKKwlpZiAocFBTQy0+YkxlaXN1cmVQcykKKwl7CisJCWlmKHByaXYtPmllZWU4MDIxMS0+cHMgIT0gSUVFRTgwMjExX1BTX0RJU0FCTEVEKQorCQl7CisJCQkvLyBtb3ZlIHRvIGxwc193YWtlY29tcGxldGUoKQorCQkJLy9SVF9UUkFDRShDT01QX0xQUywgIkxlaXN1cmVQU0xlYXZlKCk6IEJ1c3kgVHJhZmZpYyAsIExlYXZlIDgwMi4xMSBwb3dlciBzYXZlLi5cbiIpOworCQkJTWdudEFjdFNldF84MDJfMTFfUG93ZXJTYXZlTW9kZShkZXYsIElFRUU4MDIxMV9QU19ESVNBQkxFRCk7CisKKwkJfQorCX0KK30KKyNlbmRpZgorCisKIC8vCiAvLwlEZXNjcmlwdGlvbjoKIC8vCQlFbnRlciB0aGUgaW5hY3RpdmUgcG93ZXIgc2F2ZSBtb2RlLiBSRiB3aWxsIGJlIG9mZgpAQCAtNDE3OCw2ICs0NTY5LDcgQEAKIAkJCSYmIChwcml2LT5pZWVlODAyMTEtPnN0YXRlICE9IElFRUU4MDIxMV9MSU5LRUQpICkKIAkJewogCQkJUlRfVFJBQ0UoQ09NUF9SRiwiSVBTRW50ZXIoKTogVHVybiBvZmYgUkYuXG4iKTsKKwkJCS8vcHJpbnRrKCJJUFNFbnRlcigpOiBUdXJuIG9mZiBSRi5cbiIpOwogCQkJcFBTQy0+ZUluYWN0aXZlUG93ZXJTdGF0ZSA9IGVSZk9mZjsKIC8vCQkJcXVldWVfd29yayhwcml2LT5wcml2X3dxLCYocFBTQy0+SW5hY3RpdmVQc1dvcmtJdGVtKSk7CiAJCQlJbmFjdGl2ZVBzV29ya0l0ZW1DYWxsYmFjayhkZXYpOwpAQCAtNDIwMywxMiArNDU5NSw1MyBAQAogCQlpZiAocnRTdGF0ZSAhPSBlUmZPbiAgJiYgIXBQU0MtPmJTd1JmUHJvY2Vzc2luZyAmJiBwcml2LT5pZWVlODAyMTEtPlJmT2ZmUmVhc29uIDw9IFJGX0NIQU5HRV9CWV9JUFMpCiAJCXsKIAkJCVJUX1RSQUNFKENPTVBfUE9XRVIsICJJUFNMZWF2ZSgpOiBUdXJuIG9uIFJGLlxuIik7CisJCQkvL3ByaW50aygiSVBTTGVhdmUoKTogVHVybiBvbiBSRi5cbiIpOwogCQkJcFBTQy0+ZUluYWN0aXZlUG93ZXJTdGF0ZSA9IGVSZk9uOwogLy8JCQlxdWV1ZV93b3JrKHByaXYtPnByaXZfd3EsJihwUFNDLT5JbmFjdGl2ZVBzV29ya0l0ZW0pKTsKIAkJCUluYWN0aXZlUHNXb3JrSXRlbUNhbGxiYWNrKGRldik7CiAJCX0KIAl9CiB9CisKK3ZvaWQgSVBTTGVhdmVfd3Eodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZihkYXRhLHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLGlwc19sZWF2ZV93cSk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKKworCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gKHN0cnVjdCByODE5Ml9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlkb3duKCZwcml2LT5pZWVlODAyMTEtPmlwc19zZW0pOworCUlQU0xlYXZlKGRldik7CisJdXAoJnByaXYtPmllZWU4MDIxMS0+aXBzX3NlbSk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX2lwc19sZWF2ZV93cShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gKHN0cnVjdCByODE5Ml9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlSVF9SRl9QT1dFUl9TVEFURQlydFN0YXRlOworCXJ0U3RhdGUgPSBwcml2LT5pZWVlODAyMTEtPmVSRlBvd2VyU3RhdGU7CisKKwlpZihwcml2LT5pZWVlODAyMTEtPlBvd2VyU2F2ZUNvbnRyb2wuYkluYWN0aXZlUHMpeworCQlpZihydFN0YXRlID09IGVSZk9mZil7CisJCQlpZihwcml2LT5pZWVlODAyMTEtPlJmT2ZmUmVhc29uID4gUkZfQ0hBTkdFX0JZX0lQUykKKwkJCXsKKwkJCQlSVF9UUkFDRShDT01QX0VSUiwgIiVzKCk6IFJGIGlzIE9GRi5cbiIsX19GVU5DVElPTl9fKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQllbHNleworCQkJCXByaW50aygiPT09PT09PT09PiVzKCk6IElQU0xlYXZlXG4iLF9fRlVOQ1RJT05fXyk7CisJCQkJcXVldWVfd29yayhwcml2LT5pZWVlODAyMTEtPndxLCZwcml2LT5pZWVlODAyMTEtPmlwc19sZWF2ZV93cSk7CisJCQl9CisJCX0KKwl9Cit9CisvL2FkZGVkIGJ5IGFteSAwOTAzMzEgZW5kCit2b2lkIGllZWU4MDIxMV9pcHNfbGVhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxOTJfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7CisJZG93bigmcHJpdi0+aWVlZTgwMjExLT5pcHNfc2VtKTsKKwlJUFNMZWF2ZShkZXYpOworCXVwKCZwcml2LT5pZWVlODAyMTEtPmlwc19zZW0pOworfQogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIHJ0bDgxOXhfdXBkYXRlX3J4Y291bnRzKApAQCAtNDI0NCwxNSArNDY3NywyMyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJYm9vbCBiQnVzeVRyYWZmaWMgPSBmYWxzZTsKIAlzdGF0aWMgdTggbGFzdF90aW1lID0gMDsKKwlib29sIGJFbnRlclBTID0gZmFsc2U7CisKKwlpZigoIXByaXYtPnVwKSB8fCAocHJpdi0+Ykh3UmFkaW9PZmYgPT0gdHJ1ZSkpCisJCXJldHVybjsKKwogCWlmKCFwcml2LT51cCkKIAkJcmV0dXJuOwogCWhhbF9kbV93YXRjaGRvZyhkZXYpOwogI2lmZGVmIEVOQUJMRV9JUFMKIC8vCXByaW50aygid2F0Y2hfZG9nIEVOQUJMRV9JUFNcbiIpOwogCWlmKGllZWUtPmFjdHNjYW5uaW5nID09IGZhbHNlKXsKLQkJaWYoKGllZWUtPml3X21vZGUgIT0gSVdfTU9ERV9BREhPQykgJiYgKGllZWUtPnN0YXRlID09IElFRUU4MDIxMV9OT0xJTkspICYmIChpZWVlLT5iZWlucmV0cnkgPT0gZmFsc2UpICYmIChpZWVlLT5lUkZQb3dlclN0YXRlID09IGVSZk9uKSAmJiAhaWVlZS0+aXNfc2V0X2tleSl7CisJCS8vcHJpbnRrKCIlZCwlZCwlZCwlZFxuIiwgaWVlZS0+ZVJGUG93ZXJTdGF0ZSwgaWVlZS0+aXNfc2V0X2tleSwgaWVlZS0+cHJvdG9fc3RvcHBwaW5nLCBpZWVlLT53eF9zZXRfZW5jKTsKKwkJaWYoKGllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9JTkZSQSkgJiYgKGllZWUtPnN0YXRlID09IElFRUU4MDIxMV9OT0xJTkspICYmXAorCQkgICAgKGllZWUtPmVSRlBvd2VyU3RhdGUgPT0gZVJmT24pJiYhaWVlZS0+aXNfc2V0X2tleSAmJlwKKwkJICAgICghaWVlZS0+cHJvdG9fc3RvcHBwaW5nKSAmJiAhaWVlZS0+d3hfc2V0X2VuYyl7CiAJCQlpZihpZWVlLT5Qb3dlclNhdmVDb250cm9sLlJldHVyblBvaW50ID09IElQU19DQUxMQkFDS19OT05FKXsKLQkJCQlwcmludGsoIj09PT09PT09PT09PT09PT09PT09PmhhaGE6SVBTRW50ZXIoKVxuIik7CisJCQkJLy9wcmludGsoIj09PT09PT09PT09PT09PT09PT09PmhhaGE6SVBTRW50ZXIoKVxuIik7CiAJCQkJSVBTRW50ZXIoZGV2KTsKIAkJCQkvL2llZWU4MDIxMV9zdG9wX3NjYW4ocHJpdi0+aWVlZTgwMjExKTsKIAkJCX0KQEAgLTQyNjIsMTQgKzQ3MDMsNDkgQEAKIAl7Ly90byBnZXQgYnVzeSB0cmFmZmljIGNvbmRpdGlvbgogCQlpZihpZWVlLT5zdGF0ZSA9PSBJRUVFODAyMTFfTElOS0VEKQogCQl7Ci0JCQlpZigJaWVlZS0+TGlua0RldGVjdEluZm8uTnVtUnhPa0luUGVyaW9kPiA2NjYgfHwKLQkJCQlpZWVlLT5MaW5rRGV0ZWN0SW5mby5OdW1UeE9rSW5QZXJpb2Q+IDY2NiApIHsKKwkJCWlmKAlpZWVlLT5MaW5rRGV0ZWN0SW5mby5OdW1SeE9rSW5QZXJpb2Q+IDEwMCB8fAorCQkJCWllZWUtPkxpbmtEZXRlY3RJbmZvLk51bVR4T2tJblBlcmlvZD4gMTAwICkgewogCQkJCWJCdXN5VHJhZmZpYyA9IHRydWU7CiAJCQl9CiAKKyNpZmRlZiBFTkFCTEVfTFBTCisJCQkvL2FkZGVkIGJ5IGFteSBmb3IgTGVpc3VyZSBQUworCQkJaWYoCSgoaWVlZS0+TGlua0RldGVjdEluZm8uTnVtUnhVbmljYXN0T2tJblBlcmlvZCArIGllZWUtPkxpbmtEZXRlY3RJbmZvLk51bVR4T2tJblBlcmlvZCkgPiA4ICkgfHwKKwkJCQkoaWVlZS0+TGlua0RldGVjdEluZm8uTnVtUnhVbmljYXN0T2tJblBlcmlvZCA+IDIpICkKKwkJCXsKKwkJCQkvL3ByaW50aygiaWVlZS0+TGlua0RldGVjdEluZm8uTnVtUnhVbmljYXN0T2tJblBlcmlvZCBpcyAlZCxpZWVlLT5MaW5rRGV0ZWN0SW5mby5OdW1UeE9rSW5QZXJpb2QgaXMgJWRcbiIsCisJCQkJLy8JaWVlZS0+TGlua0RldGVjdEluZm8uTnVtUnhVbmljYXN0T2tJblBlcmlvZCxpZWVlLT5MaW5rRGV0ZWN0SW5mby5OdW1UeE9rSW5QZXJpb2QpOworCQkJCWJFbnRlclBTPSBmYWxzZTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQliRW50ZXJQUz0gdHJ1ZTsKKwkJCX0KKworCQkJLy9wcmludGsoIioqKmJFbnRlclBTID0gJWRcbiIsIGJFbnRlclBTKTsKKwkJCS8vIExlaXN1cmVQUyBvbmx5IHdvcmsgaW4gaW5mcmEgbW9kZS4KKwkJCWlmKGJFbnRlclBTKQorCQkJeworCQkJCUxlaXN1cmVQU0VudGVyKGRldik7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJTGVpc3VyZVBTTGVhdmUoZGV2KTsKKwkJCX0KKyNlbmRpZgorCiAJCX0KKwkJZWxzZQorCQl7CisjaWZkZWYgRU5BQkxFX0xQUworCQkJLy9SVF9UUkFDRShDT01QX0xQUywiPT09PT5ubyBsaW5rIExQUyBsZWF2ZVxuIik7CisJCQlMZWlzdXJlUFNMZWF2ZShkZXYpOworI2VuZGlmCisJCX0KKwogCSAgICAgICAgaWVlZS0+TGlua0RldGVjdEluZm8uTnVtUnhPa0luUGVyaW9kID0gMDsKIAkgICAgICAgIGllZWUtPkxpbmtEZXRlY3RJbmZvLk51bVR4T2tJblBlcmlvZCA9IDA7CisJCWllZWUtPkxpbmtEZXRlY3RJbmZvLk51bVJ4VW5pY2FzdE9rSW5QZXJpb2QgPSAwOwogCQlpZWVlLT5MaW5rRGV0ZWN0SW5mby5iQnVzeVRyYWZmaWMgPSBiQnVzeVRyYWZmaWM7CiAJfQogCkBAIC00Mjg4LDE0ICs0NzY0LDE0IEBACiAJCQkJaWYoIGllZWUtPmVSRlBvd2VyU3RhdGUgPT0gZVJmT2ZmKQogCQkJCQlSVF9UUkFDRShDT01QX0VSUiwiPT09PT09PT0+JXMoKVxuIixfX0ZVTkNUSU9OX18pOwogCQkJCXByaW50aygiPT09PiVzKCk6IEFQIGlzIHBvd2VyIG9mZixjb25uZWN0IGFub3RoZXIgb25lXG4iLF9fRlVOQ1RJT05fXyk7Ci0JCS8vCQlEb3QxMWRfUmVzZXQoZGV2KTsKKwkJCQkvLwkJRG90MTFkX1Jlc2V0KGRldik7CiAJCQkJaWVlZS0+c3RhdGUgPSBJRUVFODAyMTFfQVNTT0NJQVRJTkc7CiAJCQkJbm90aWZ5X3d4X2Fzc29jX2V2ZW50KHByaXYtPmllZWU4MDIxMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW92ZVBlZXJUUyhwcml2LT5pZWVlODAyMTEscHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuYnNzaWQpOworCQkJCVJlbW92ZVBlZXJUUyhwcml2LT5pZWVlODAyMTEscHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuYnNzaWQpOwogCQkJCWllZWUtPmlzX3JvYW1pbmcgPSB0cnVlOwogCQkJCWllZWUtPmlzX3NldF9rZXkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWVlZS0+bGlua19jaGFuZ2UoZGV2KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVfd29yayhpZWVlLT53cSwgJmllZWUtPmFzc29jaWF0ZV9wcm9jZWR1cmVfd3EpOworCQkJCWllZWUtPmxpbmtfY2hhbmdlKGRldik7CisJCQkJcXVldWVfd29yayhpZWVlLT53cSwgJmllZWUtPmFzc29jaWF0ZV9wcm9jZWR1cmVfd3EpOwogCQkJfQogCQl9CiAJICAgICAgaWVlZS0+TGlua0RldGVjdEluZm8uTnVtUmVjdkJjbkluUGVyaW9kPTA7CkBAIC00MzQ4LDYgKzQ4MjQsNyBAQAogCVJUX1NUQVRVUyBpbml0X3N0YXR1cyA9IFJUX1NUQVRVU19TVUNDRVNTOwogCXByaXYtPnVwPTE7CiAJcHJpdi0+aWVlZTgwMjExLT5pZWVlX3VwPTE7CisJcHJpdi0+YmRpc2FibGVfbmljID0gZmFsc2U7ICAvL1lKLGFkZCwwOTExMTEKIAlSVF9UUkFDRShDT01QX0lOSVQsICJCcmluZ2luZyB1cCBpZmFjZSIpOwogCiAJaW5pdF9zdGF0dXMgPSBydGw4MTkyX2FkYXB0ZXJfc3RhcnQoZGV2KTsKQEAgLTQ0MjIsNiArNDg5OSwxMiBAQAogI2VuZGlmCiAJaWYgKHByaXYtPnVwID09IDApIHJldHVybiAtMTsKIAorI2lmZGVmIEVOQUJMRV9MUFMKKwkvL0xaTSBmb3IgUFMtUG9sbCBBSUQgaXNzdWUuIDA5MDQyOQorCWlmKHByaXYtPmllZWU4MDIxMS0+c3RhdGUgPT0gSUVFRTgwMjExX0xJTktFRCkKKwkJTGVpc3VyZVBTTGVhdmUoZGV2KTsKKyNlbmRpZgorCiAJcHJpdi0+dXA9MDsKIAlwcml2LT5pZWVlODAyMTEtPmllZWVfdXAgPSAwOwogCVJUX1RSQUNFKENPTVBfRE9XTiwgIj09PT09PT09PT0+JXMoKVxuIiwgX19GVU5DVElPTl9fKTsKQEAgLTQ0NTksMTEgKzQ5NDIsOSBAQAogCWRlaW5pdF9oYWxfZG0oZGV2KTsKIAlkZWxfdGltZXJfc3luYygmcHJpdi0+d2F0Y2hfZG9nX3RpbWVyKTsKIAotCWllZWU4MDIxMV9zb2Z0bWFjX3N0b3BfcHJvdG9jb2wocHJpdi0+aWVlZTgwMjExKTsKLSNpZmRlZiBFTkFCTEVfSVBTCi0JTWdudEFjdFNldF9SRl9TdGF0ZShkZXYsIGVSZk9mZiwgUkZfQ0hBTkdFX0JZX0lOSVQpOwotI2VuZGlmCi0JcnRsODE5Ml9ydHhfZGlzYWJsZShkZXYpOworCWllZWU4MDIxMV9zb2Z0bWFjX3N0b3BfcHJvdG9jb2wocHJpdi0+aWVlZTgwMjExLHRydWUpOworCisJcnRsODE5Ml9oYWx0X2FkYXB0ZXIoZGV2LGZhbHNlKTsKIAltZW1zZXQoJnByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLCAwICwgb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrLCBsaXN0KSk7CiAKIAlSVF9UUkFDRShDT01QX0RPV04sICI8PT09PT09PT09PSVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CkBAIC00NDc5LDEwICs0OTYwLDEwIEBACiAJaWYgKHByaXYtPnVwID09IDApIHJldHVybiA7CiAKIAotCWllZWU4MDIxMV9zb2Z0bWFjX3N0b3BfcHJvdG9jb2wocHJpdi0+aWVlZTgwMjExKTsKKwlpZWVlODAyMTFfc29mdG1hY19zdG9wX3Byb3RvY29sKHByaXYtPmllZWU4MDIxMSx0cnVlKTsKIAogCXJ0bDgxOTJfaXJxX2Rpc2FibGUoZGV2KTsKLQlydGw4MTkyX3J0eF9kaXNhYmxlKGRldik7CisJcnRsODE5Ml9oYWx0X2FkYXB0ZXIoZGV2LHRydWUpOwogCV9ydGw4MTkyX3VwKGRldik7CiB9CiAKQEAgLTU4MDYsOCArNjI4Nyw3IEBACiAKICAgICAgICAgICAgICAgICBza2IgPSBuZXdfc2tiOwogICAgICAgICAgICAgICAgIHByaXYtPnJ4X2J1Zltwcml2LT5yeF9pZHhdID0gc2tiOwotICAgICAgICAgICAgICAgICooKGRtYV9hZGRyX3QgKikgc2tiLT5jYikgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCBza2ItPnRhaWwsIHByaXYtPnJ4YnVmZmVyc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKLS8vICAgICAgICAgICAgICAgICooKGRtYV9hZGRyX3QgKikgc2tiLT5jYikgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCBza2JfdGFpbF9wb2ludGVyKHNrYiksIHByaXYtPnJ4YnVmZmVyc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKyAgICAgICAgICAgICAgICAqKChkbWFfYWRkcl90ICopIHNrYi0+Y2IpID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgc2tiX3RhaWxfcG9pbnRlcihza2IpLCBwcml2LT5yeGJ1ZmZlcnNpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgfQpAQCAtNjAzNiw3ICs2NTE2LDcgQEAKIAkvKiBjYWxsIGNhbmNlbF93b3JrX3N5bmMgaW5zdGVhZCBvZiBjYW5jZWxfZGVsYXllZF93b3JrIGlmIGFuZCBvbmx5IGlmIExpbnV4X3ZlcnNpb25fY29kZQogICAgICAgICAgKiBpcyAgb3IgaXMgbmV3ZXIgdGhhbiAyLjYuMjAgYW5kIHdvcmsgc3RydWN0dXJlIGlzIGRlZmluZWQgdG8gYmUgc3RydWN0IHdvcmtfc3RydWN0LgogICAgICAgICAgKiBPdGhlcndpc2UgY2FsbCBjYW5jZWxfZGVsYXllZF93b3JrIGlzIGVub3VnaC4KLSAgICAgICAgICogRklYTUUgKDIuNi4yMCBzaG91ZCAyLjYuMjIsIHdvcmtfc3RydWN0IHNob3VkIG5vdCBjYW5jZWwpCisgICAgICAgICAqIEZJWE1FICgyLjYuMjAgc2hvdWxkIDIuNi4yMiwgd29ya19zdHJ1Y3Qgc2hvdWxkIG5vdCBjYW5jZWwpCiAgICAgICAgICAqICovCiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+d2F0Y2hfZG9nX3dxKTsKIAljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT51cGRhdGVfYmVhY29uX3dxKTsKQEAgLTYzODEsMTEgKzY4NjEsMTMgQEAKIAkJCWlmKHByaXYtPmllZWU4MDIxMS0+UmZPZmZSZWFzb24gPiBSRl9DSEFOR0VfQllfSVBTKQogCQkJewogCQkJCVJUX1RSQUNFKENPTVBfRVJSLCAiJXMoKTogUkYgaXMgT0ZGLlxuIixfX0ZVTkNUSU9OX18pOwotCQkJCXVwKCZwcml2LT53eF9zZW0pOworCQkJCS8vdXAoJnByaXYtPnd4X3NlbSk7CiAJCQkJcmV0dXJuIDsKIAkJCX0KIAkJCWVsc2V7CisJCQkJZG93bigmcHJpdi0+aWVlZTgwMjExLT5pcHNfc2VtKTsKIAkJCQlJUFNMZWF2ZShkZXYpOworCQkJCXVwKCZwcml2LT5pZWVlODAyMTEtPmlwc19zZW0pOwogCQkJfQogCQl9CiAJfQpAQCAtNjM5NCw3ICs2ODc2LDcgQEAKIAlpZiAoRW50cnlObyA+PSBUT1RBTF9DQU1fRU5UUlkpCiAJCVJUX1RSQUNFKENPTVBfRVJSLCAiY2FtIGVudHJ5IGV4Y2VlZHMgaW4gc2V0S2V5KClcbiIpOwogCi0JUlRfVFJBQ0UoQ09NUF9TRUMsICI9PT09PnRvIHNldEtleSgpLCBkZXY6JXAsIEVudHJ5Tm86JWQsIEtleUluZGV4OiVkLCBLZXlUeXBlOiVkLCBNYWNBZGRyIk1BQ19GTVQiXG4iLCBkZXYsRW50cnlObywgS2V5SW5kZXgsIEtleVR5cGUsIE1BQ19BUkcoTWFjQWRkcikpOworCVJUX1RSQUNFKENPTVBfU0VDLCAiPT09PT50byBzZXRLZXkoKSwgZGV2OiVwLCBFbnRyeU5vOiVkLCBLZXlJbmRleDolZCwgS2V5VHlwZTolZCwgTWFjQWRkciVwTVxuIiwgZGV2LEVudHJ5Tm8sIEtleUluZGV4LCBLZXlUeXBlLCBNYWNBZGRyKTsKIAogCWlmIChEZWZhdWx0S2V5KQogCQl1c0NvbmZpZyB8PSBCSVQxNSB8IChLZXlUeXBlPDwyKTsKQEAgLTY0NTUsNiArNjkzNyw2NSBAQAogCVJUX1RSQUNFKENPTVBfU0VDLCAiV1BBX0NvbmZpZz0leCBcbiIsdWNWYWx1ZSk7CiB9CiAKK2Jvb2wgTmljSUZFbmFibGVOSUMoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKK3sKKwlSVF9TVEFUVVMgaW5pdF9zdGF0dXMgPSBSVF9TVEFUVVNfU1VDQ0VTUzsKKwlzdHJ1Y3QgcjgxOTJfcHJpdiogcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJUFJUX1BPV0VSX1NBVkVfQ09OVFJPTCBwUFNDID0gKFBSVF9QT1dFUl9TQVZFX0NPTlRST0wpKCYocHJpdi0+aWVlZTgwMjExLT5Qb3dlclNhdmVDb250cm9sKSk7CisKKwkvL1lKLGFkZCwwOTExMDkKKwlpZiAocHJpdi0+dXAgPT0gMCl7CisJCVJUX1RSQUNFKENPTVBfRVJSLCAiRVJSISEhICVzKCk6IERyaXZlciBpcyBhbHJlYWR5IGRvd24hXG4iLF9fRlVOQ1RJT05fXyk7CisJCXByaXYtPmJkaXNhYmxlX25pYyA9IGZhbHNlOyAgLy9ZSixhZGQsMDkxMTExCisJCXJldHVybiBmYWxzZTsKKwl9CisJLy8gPDE+IFJlc2V0IG1lbW9yeTogZGVzY3JpcHRvciwgYnVmZmVyLC4uCisJLy9OaWNJRlJlc2V0TWVtb3J5KEFkYXB0ZXIpOworCisJLy8gPDI+IEVuYWJsZSBBZGFwdGVyCisJLy9wcmludGsoIj09PT09PT09PT09PiVzKClcbiIsX19GVU5DVElPTl9fKTsKKwkvL3ByaXYtPmJmaXJzdF9pbml0ID0gdHJ1ZTsKKwlpbml0X3N0YXR1cyA9IHJ0bDgxOTJfYWRhcHRlcl9zdGFydChkZXYpOworCWlmIChpbml0X3N0YXR1cyAhPSBSVF9TVEFUVVNfU1VDQ0VTUykgeworCQlSVF9UUkFDRShDT01QX0VSUiwiRVJSISEhICVzKCk6IGluaXRpYWxpemF0aW9uIGlzIGZhaWxlZCFcbiIsX19GVU5DVElPTl9fKTsKKwkJcHJpdi0+YmRpc2FibGVfbmljID0gZmFsc2U7ICAvL1lKLGFkZCwwOTExMTEKKwkJcmV0dXJuIC0xOworCX0KKwkvL3ByaW50aygic3RhcnQgYWRhcHRlciBmaW5pc2hlZFxuIik7CisJUlRfQ0xFQVJfUFNfTEVWRUwocFBTQywgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpOworCS8vcHJpdi0+YmZpcnN0X2luaXQgPSBmYWxzZTsKKworCS8vIDwzPiBFbmFibGUgSW50ZXJydXB0CisJcnRsODE5Ml9pcnFfZW5hYmxlKGRldik7CisJcHJpdi0+YmRpc2FibGVfbmljID0gZmFsc2U7CisJLy9SVF9UUkFDRShDT01QX1BTLCI8PT09PT09PT09PT0lcygpXG4iLF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIChpbml0X3N0YXR1cyA9PSBSVF9TVEFUVVNfU1VDQ0VTUykgPyB0cnVlOmZhbHNlOworfQorYm9vbCBOaWNJRkRpc2FibGVOSUMoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKK3sKKwlib29sCXN0YXR1cyA9IHRydWU7CisJc3RydWN0IHI4MTkyX3ByaXYqIHByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXU4IHRtcF9zdGF0ZSA9IDA7CisJLy8gPDE+IERpc2FibGUgSW50ZXJydXB0CisJLy9SVF9UUkFDRShDT01QX1BTLCAiPT09PT09PT09PiVzKClcbiIsX19GVU5DVElPTl9fKTsKKwlwcml2LT5iZGlzYWJsZV9uaWMgPSB0cnVlOwkvL1lKLG1vdmUsMDkxMTA5CisJdG1wX3N0YXRlID0gcHJpdi0+aWVlZTgwMjExLT5zdGF0ZTsKKworCWllZWU4MDIxMV9zb2Z0bWFjX3N0b3BfcHJvdG9jb2wocHJpdi0+aWVlZTgwMjExLCBmYWxzZSk7CisKKwlwcml2LT5pZWVlODAyMTEtPnN0YXRlID0gdG1wX3N0YXRlOworCXJ0bDgxOTJfY2FuY2VsX2RlZmVycmVkX3dvcmsocHJpdik7CisJcnRsODE5Ml9pcnFfZGlzYWJsZShkZXYpOworCS8vIDwyPiBTdG9wIGFsbCB0aW1lcgorCisJLy8gPDM+IERpc2FibGUgQWRhcHRlcgorCXJ0bDgxOTJfaGFsdF9hZGFwdGVyKGRldiwgZmFsc2UpOworLy8JcHJpdi0+YmRpc2FibGVfbmljID0gdHJ1ZTsKKwkvL1JUX1RSQUNFKENPTVBfUFMsICI8PT09PT09PT09JXMoKVxuIixfX0ZVTkNUSU9OX18pOworCisJcmV0dXJuIHN0YXR1czsKK30KKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0gbW9kdWxlIGluaXQgLyBleGl0IHN0dWJzIC0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfZG0uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfZG0uYwppbmRleCA1ZmZiNGY3Li5hMjQ5ZjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2RtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV9kbS5jCkBAIC0xOSwyNiArMTksMjggQEAKICNpbmNsdWRlICJyODE5eEVfcGh5LmgiCiAjaW5jbHVkZSAicjgxOXhFX3BoeXJlZy5oIgogI2luY2x1ZGUgInI4MTkwX3J0bDgyNTYuaCIKKworI2RlZmluZSBEUlZfTkFNRSAicnRsODE5eEUiCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLURlZmluZSBMb2NhbCBDb25zdGFudC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvLwogLy8gSW5kaWNhdGUgZGlmZmVyZW50IEFQIHZlbmRvciBmb3IgSU9UIGlzc3VlLgogLy8KICNpZmRlZiAgUlRMODE5MFAKIHN0YXRpYyB1MzIgZWRjYV9zZXR0aW5nX0RMW0hUX0lPVF9QRUVSX01BWF0gPQoteyAweDVlNDMyMiwgCTB4NWU0MzIyLCAJMHg1ZTQzMjIsICAJMHg2MDQzMjIsIAkweGE0NGYsIAkweDVlNDMyMn07Cit7IDB4NWU0MzIyLCAJMHg1ZTQzMjIsIAkweDVlNDMyMiwgIAkweDYwNDMyMiwgCTB4YTQ0ZiwgCTB4NWU0MzIyLAkweDVlNDMyMn07CiBzdGF0aWMgdTMyIGVkY2Ffc2V0dGluZ19VTFtIVF9JT1RfUEVFUl9NQVhdID0KLXsgMHg1ZTQzMjIsIAkweGE0NGYsIAkweDVlNDMyMiwgIAkweDYwNDMyMiwgCTB4NWU0MzIyLCAJMHg1ZTQzMjJ9OworeyAweDVlNDMyMiwgCTB4YTQ0ZiwgCTB4NWU0MzIyLCAgCTB4NjA0MzIyLCAJMHg1ZTQzMjIsIAkweDVlNDMyMiwJMHg1ZTQzMjJ9OwogI2Vsc2UKICNpZmRlZiBSVEw4MTkyRQogc3RhdGljIHUzMiBlZGNhX3NldHRpbmdfRExbSFRfSU9UX1BFRVJfTUFYXSA9Ci17IDB4NWU0MzIyLCAJMHg1ZTQzMjIsIAkweDVlNDMyMiwgCTB4NjA0MzIyLCAJMHhhNDRmLCAJMHg1ZTQzMjJ9OworeyAweDVlNDMyMiwgCTB4NWU0MzIyLCAJMHg1ZTQzMjIsIAkweDYwNDMyMiwgCTB4YTQ0ZiwgCTB4NWU0MzIyLAkweDVlNDMyMn07CiBzdGF0aWMgdTMyIGVkY2Ffc2V0dGluZ19VTFtIVF9JT1RfUEVFUl9NQVhdID0KLXsgMHg1ZTQzMjIsIAkweGE0NGYsCQkweDVlNDMyMiwgIAkweDYwNDMyMiwgCTB4NWU0MzIyLCAJMHg1ZTQzMjJ9OworeyAweDVlNDMyMiwgCTB4YTQ0ZiwJCTB4NWU0MzIyLCAgCTB4NjA0MzIyLCAJMHg1ZTQzMjIsIAkweDVlNDMyMiwgCTB4NWU0MzIyfTsKICNlbHNlCiBzdGF0aWMgdTMyIGVkY2Ffc2V0dGluZ19ETFtIVF9JT1RfUEVFUl9NQVhdID0KLXsgMHg1ZTQzMjIsIAkweDVlNDMyMiwgCTB4NWU0MzIyLCAJMHg2MDQzMjIsIAkweGE0NGYsIAkweDVlYTQ0Zn07Cit7IDB4NWU0MzIyLCAJMHg1ZTQzMjIsIAkweDVlNDMyMiwgCTB4NjA0MzIyLCAJMHhhNDRmLCAJMHg1ZWE0NGYsIAkweDVlNDMyMn07CiBzdGF0aWMgdTMyIGVkY2Ffc2V0dGluZ19VTFtIVF9JT1RfUEVFUl9NQVhdID0KLXsgMHg1ZTQzMjIsIAkweGE0NGYsIAkweDVlNDMyMiwgCTB4NjA0MzIyLCAJMHg1ZWE0NGYsIAkweDVlYTQ0Zn07Cit7IDB4NWU0MzIyLCAJMHhhNDRmLCAJMHg1ZTQzMjIsIAkweDYwNDMyMiwgCTB4NWVhNDRmLCAJMHg1ZWE0NGYsIAkweDVlNDMyMn07CiAjZW5kaWYKICNlbmRpZgogCkBAIC0yNzUsNiArMjc3LDMwIEBACiAjZW5kaWYKIAogCisvLyBjYWxsIHRoZSBzY3JpcHQgZmlsZSB0byBlbmFibGUKK3ZvaWQgZG1fY2hlY2tfYWNfZGNfcG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJc3RhdGljIGNoYXIgKmFjX2RjX2NoZWNrX3NjcmlwdF9wYXRoID0gIi9ldGMvYWNwaS93aXJlbGVzcy1ydGwtYWMtZGMtcG93ZXIuc2giOworCWNoYXIgKmFyZ3ZbXSA9IHthY19kY19jaGVja19zY3JpcHRfcGF0aCxEUlZfTkFNRSxOVUxMfTsKKwlzdGF0aWMgY2hhciAqZW52cFtdID0geyJIT01FPS8iLAorCQkJIlRFUk09bGludXgiLAorCQkJIlBBVEg9L3Vzci9iaW46L2JpbiIsCisJCQkgTlVMTH07CisKKwlpZihwcml2LT5SZXNldFByb2dyZXNzID09IFJFU0VUX1RZUEVfU0lMRU5UKQorCXsKKwkJUlRfVFJBQ0UoKENPTVBfSU5JVCB8IENPTVBfUE9XRVIgfCBDT01QX1JGKSwgIkdQSU9DaGFuZ2VSRldvcmtJdGVtQ2FsbEJhY2soKTogU2lsZW50IFJlc2V0aW5nISEhISEhIVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZihwcml2LT5pZWVlODAyMTEtPnN0YXRlICE9IElFRUU4MDIxMV9MSU5LRUQpIHsKKwkJcmV0dXJuOworCX0KKwljYWxsX3VzZXJtb2RlaGVscGVyKGFjX2RjX2NoZWNrX3NjcmlwdF9wYXRoLGFyZ3YsZW52cCwxKTsKKworCXJldHVybjsKK307CiAKIHZvaWQgaGFsX2RtX3dhdGNoZG9nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0yODIsNiArMzA4LDggQEAKIAogCS8vc3RhdGljIHU4IAlwcmV2aW91c19ic3NpZFs2XSA9ezB9OwogCisJZG1fY2hlY2tfYWNfZGNfcG93ZXIoZGV2KTsKKwogCS8qQWRkIGJ5IGFteSAyMDA4LzA1LzE1ICxwb3J0aW5nIGZyb20gd2luZG93cyBjb2RlLiovCiAJZG1fY2hlY2tfcmF0ZV9hZGFwdGl2ZShkZXYpOwogCWRtX2R5bmFtaWNfdHhwb3dlcihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV9ody5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV9ody5oCmluZGV4IDM4ODkwOGYuLjM0NmJmYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfaHcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2h3LmgKQEAgLTgwOCw0ICs4MDgsMTIgQEAKICNkZWZpbmUgR1BJIDB4MTA4CiAjZGVmaW5lIEdQTyAweDEwOQogI2RlZmluZSBHUEUgMHgxMGEKKworI2RlZmluZQlBTkFQQVJfRk9SXzgxOTJQY2lFCQkJCQkJCTB4MTcJCS8vIEFuYWxvZyBwYXJhbWV0ZXIgcmVnaXN0ZXIKKworI2RlZmluZQlNU1JfTk9MSU5LCQkJCQkweDAwCisjZGVmaW5lCU1TUl9BREhPQwkJCQkJMHgwMQorI2RlZmluZQlNU1JfSU5GUkEJCQkJCTB4MDIKKyNkZWZpbmUJTVNSX0FQCQkJCQkJMHgwMworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfd3guYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfd3guYwppbmRleCBkMWViODkyLi4wYjBmMzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX3d4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV93eC5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSAicjgxOTJFX2h3LmgiCiAjaW5jbHVkZSAicjgxOTJFX3d4LmgiCiAjaWZkZWYgRU5BQkxFX0RPVDExRAotI2luY2x1ZGUgImRvdDExZC5oIgorI2luY2x1ZGUgImllZWU4MDIxMS9kb3QxMWQuaCIKICNlbmRpZgogCiAjZGVmaW5lIFJBVEVfQ09VTlQgMTIKQEAgLTcwLDYgKzcwLDkgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAorCWlmKHByaXYtPmJId1JhZGlvT2ZmID09IHRydWUpCisJCXJldHVybiAwOworCiAJZG93bigmcHJpdi0+d3hfc2VtKTsKIAogCXJldCA9IGllZWU4MDIxMV93eF9zZXRfcmF0ZShwcml2LT5pZWVlODAyMTEsaW5mbyx3cnF1LGV4dHJhKTsKQEAgLTg3LDYgKzkwLDkgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAorCWlmKHByaXYtPmJId1JhZGlvT2ZmID09IHRydWUpCisJCXJldHVybiAwOworCiAJZG93bigmcHJpdi0+d3hfc2VtKTsKIAogCXJldCA9IGllZWU4MDIxMV93eF9zZXRfcnRzKHByaXYtPmllZWU4MDIxMSxpbmZvLHdycXUsZXh0cmEpOwpAQCAtMTExLDYgKzExNyw5IEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAKKwlpZihwcml2LT5iSHdSYWRpb09mZiA9PSB0cnVlKQorCQlyZXR1cm4gMDsKKwogCWRvd24oJnByaXYtPnd4X3NlbSk7CiAKIAlyZXQgPSBpZWVlODAyMTFfd3hfc2V0X3Bvd2VyKHByaXYtPmllZWU4MDIxMSxpbmZvLHdycXUsZXh0cmEpOwpAQCAtMjkwLDYgKzI5OSw5IEBACiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCWludCByZXQ7CiAKKwlpZihwcml2LT5iSHdSYWRpb09mZiA9PSB0cnVlKQorCQlyZXR1cm4gMDsKKwogCWRvd24oJnByaXYtPnd4X3NlbSk7CiAKIAlyZXQgPSBpZWVlODAyMTFfd3hfc2V0X3Jhd3R4KHByaXYtPmllZWU4MDIxMSwgaW5mbywgd3JxdSwgZXh0cmEpOwpAQCAtMzI1LDYgKzMzNyw5IEBACiAJaW50IGVuYWJsZSA9IChwYXJtc1swXSA+IDApOwogCXNob3J0IHByZXYgPSBwcml2LT5jcmNtb247CiAKKwlpZihwcml2LT5iSHdSYWRpb09mZiA9PSB0cnVlKQorCQlyZXR1cm4gMDsKKwogCWRvd24oJnByaXYtPnd4X3NlbSk7CiAKIAlpZihlbmFibGUpCkBAIC0zNTIsNiArMzY3LDkgQEAKIAlSVF9SRl9QT1dFUl9TVEFURQlydFN0YXRlOwogCWludCByZXQ7CiAKKwlpZihwcml2LT5iSHdSYWRpb09mZiA9PSB0cnVlKQorCQlyZXR1cm4gMDsKKwogCXJ0U3RhdGUgPSBwcml2LT5pZWVlODAyMTEtPmVSRlBvd2VyU3RhdGU7CiAJZG93bigmcHJpdi0+d3hfc2VtKTsKICNpZmRlZiBFTkFCTEVfSVBTCkBAIC0zNjYsOCArMzg0LDEwIEBACiAJCQkJCXJldHVybiAtMTsKIAkJCQl9CiAJCQkJZWxzZXsKLQkJCQlwcmludGsoIj09PT09PT09PT4lcygpOiBJUFNMZWF2ZVxuIixfX0ZVTkNUSU9OX18pOworCQkJCQlSVF9UUkFDRShDT01QX0VSUiwgIiVzKCk6IElQU0xlYXZlXG4iLF9fRlVOQ1RJT05fXyk7CisJCQkJCWRvd24oJnByaXYtPmllZWU4MDIxMS0+aXBzX3NlbSk7CiAJCQkJCUlQU0xlYXZlKGRldik7CisJCQkJCXVwKCZwcml2LT5pZWVlODAyMTEtPmlwc19zZW0pOwogCQkJCX0KIAkJCX0KIAkJfQpAQCAtNDI1LDcgKzQ0NSw3IEBACiAJICovCiAKIAkvKiB+NSBNYi9zIHJlYWwgKDgwMi4xMWIpICovCi0JcmFuZ2UtPnRocm91Z2hwdXQgPSA1ICogMTAwMCAqIDEwMDA7CisJcmFuZ2UtPnRocm91Z2hwdXQgPSAxMzAgKiAxMDAwICogMTAwMDsKIAogCS8vIFRPRE86IE5vdCB1c2VkIGluIDgwMi4xMWI/CiAvLwlyYW5nZS0+bWluX253aWQ7CS8qIE1pbmltYWwgTldJRCB3ZSBhcmUgYWJsZSB0byBzZXQgKi8KQEAgLTQ2OCw3ICs0ODgsNyBAQAogCXJhbmdlLT5wbXRfZmxhZ3MgPSBJV19QT1dFUl9USU1FT1VUOwogCXJhbmdlLT5wbV9jYXBhID0gSVdfUE9XRVJfUEVSSU9EIHwgSVdfUE9XRVJfVElNRU9VVCB8IElXX1BPV0VSX0FMTF9SOwogCXJhbmdlLT53ZV92ZXJzaW9uX2NvbXBpbGVkID0gV0lSRUxFU1NfRVhUOwotCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IDE2OworCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IDE4OwogCiAvLwlyYW5nZS0+cmV0cnlfY2FwYTsJLyogV2hhdCByZXRyeSBvcHRpb25zIGFyZSBzdXBwb3J0ZWQgKi8KIC8vCXJhbmdlLT5yZXRyeV9mbGFnczsJLyogSG93IHRvIGRlY29kZSBtYXgvbWluIHJldHJ5IGxpbWl0ICovCkBAIC01MTcsNyArNTM3LDEyIEBACiAJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UqIGllZWUgPSBwcml2LT5pZWVlODAyMTE7CiAJUlRfUkZfUE9XRVJfU1RBVEUJcnRTdGF0ZTsKIAlpbnQgcmV0OworCisJaWYocHJpdi0+Ykh3UmFkaW9PZmYgPT0gdHJ1ZSkKKwkJcmV0dXJuIDA7CisKIAlydFN0YXRlID0gcHJpdi0+aWVlZTgwMjExLT5lUkZQb3dlclN0YXRlOworCiAJaWYoIXByaXYtPnVwKSByZXR1cm4gLUVORVRET1dOOwogCWlmIChwcml2LT5pZWVlODAyMTEtPkxpbmtEZXRlY3RJbmZvLmJCdXN5VHJhZmZpYyA9PSB0cnVlKQogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTU0Nyw4ICs1NzIsMTAgQEAKIAkJCQkJcmV0dXJuIC0xOwogCQkJCX0KIAkJCQllbHNlewotCQkJCQlwcmludGsoIj09PT09PT09PT4lcygpOiBJUFNMZWF2ZVxuIixfX0ZVTkNUSU9OX18pOworCQkJCQkvL1JUX1RSQUNFKENPTVBfUFMsICIlcygpOiBJUFNMZWF2ZVxuIixfX0ZVTkNUSU9OX18pOworCQkJCQlkb3duKCZwcml2LT5pZWVlODAyMTEtPmlwc19zZW0pOwogCQkJCQlJUFNMZWF2ZShkZXYpOworCQkJCQl1cCgmcHJpdi0+aWVlZTgwMjExLT5pcHNfc2VtKTsKIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTU4MCw2ICs2MDcsOSBAQAogCWludCByZXQ7CiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCisJaWYocHJpdi0+Ykh3UmFkaW9PZmYgPT0gdHJ1ZSkKKwkJcmV0dXJuIDA7CisKIAlpZighcHJpdi0+dXApIHJldHVybiAtRU5FVERPV047CiAKIAlkb3duKCZwcml2LT53eF9zZW0pOwpAQCAtNTk5LDIzICs2MjksMTYgQEAKIAlSVF9SRl9QT1dFUl9TVEFURQlydFN0YXRlOwogCWludCByZXQ7CiAKKwlpZihwcml2LT5iSHdSYWRpb09mZiA9PSB0cnVlKQorCQlyZXR1cm4gMDsKKwogCXJ0U3RhdGUgPSBwcml2LT5pZWVlODAyMTEtPmVSRlBvd2VyU3RhdGU7CiAJZG93bigmcHJpdi0+d3hfc2VtKTsKKwogI2lmZGVmIEVOQUJMRV9JUFMKLQlpZihwcml2LT5pZWVlODAyMTEtPlBvd2VyU2F2ZUNvbnRyb2wuYkluYWN0aXZlUHMpewotCQlpZihydFN0YXRlID09IGVSZk9mZil7Ci0JCQlpZihwcml2LT5pZWVlODAyMTEtPlJmT2ZmUmVhc29uID4gUkZfQ0hBTkdFX0JZX0lQUykKLQkJCXsKLQkJCQlSVF9UUkFDRShDT01QX0VSUiwgIiVzKCk6IFJGIGlzIE9GRi5cbiIsX19GVU5DVElPTl9fKTsKLQkJCQl1cCgmcHJpdi0+d3hfc2VtKTsKLQkJCQlyZXR1cm4gLTE7Ci0JCQl9Ci0JCQllbHNlewotCQkJCXByaW50aygiPT09PT09PT09PiVzKCk6IElQU0xlYXZlXG4iLF9fRlVOQ1RJT05fXyk7Ci0JCQkJSVBTTGVhdmUoZGV2KTsKLQkJCX0KLQkJfQotCX0KKyAgICAgICAgZG93bigmcHJpdi0+aWVlZTgwMjExLT5pcHNfc2VtKTsKKyAgICAgICAgSVBTTGVhdmUoZGV2KTsKKyAgICAgICAgdXAoJnByaXYtPmllZWU4MDIxMS0+aXBzX3NlbSk7CiAjZW5kaWYKIAlyZXQgPSBpZWVlODAyMTFfd3hfc2V0X2Vzc2lkKHByaXYtPmllZWU4MDIxMSxhLHdycXUsYik7CiAKQEAgLTY1MCw2ICs2NzMsOSBAQAogCWludCByZXQ7CiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCisJaWYocHJpdi0+Ykh3UmFkaW9PZmYgPT0gdHJ1ZSkKKwkJcmV0dXJuIDA7CisKIAlkb3duKCZwcml2LT53eF9zZW0pOwogCiAJcmV0ID0gaWVlZTgwMjExX3d4X3NldF9mcmVxKHByaXYtPmllZWU4MDIxMSwgYSwgd3JxdSwgYik7CkBAIC02NzMsNiArNjk5LDkgQEAKIHsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAKKwlpZihwcml2LT5iSHdSYWRpb09mZiA9PSB0cnVlKQorCQlyZXR1cm4gMDsKKwogCWlmICh3cnF1LT5mcmFnLmRpc2FibGVkKQogCQlwcml2LT5pZWVlODAyMTEtPmZ0cyA9IERFRkFVTFRfRlJBR19USFJFU0hPTEQ7CiAJZWxzZSB7CkBAIC03MTEsOCArNzQwLDE2IEBACiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogLy8gICAgICAgIHN0cnVjdCBzb2NrYWRkciAqdGVtcCA9IChzdHJ1Y3Qgc29ja2FkZHIgKilhd3JxOwogCisJaWYocHJpdi0+Ykh3UmFkaW9PZmYgPT0gdHJ1ZSkKKwkJcmV0dXJuIDA7CisKIAlkb3duKCZwcml2LT53eF9zZW0pOwogCisjaWZkZWYgRU5BQkxFX0lQUworICAgICAgICBkb3duKCZwcml2LT5pZWVlODAyMTEtPmlwc19zZW0pOworICAgICAgICBJUFNMZWF2ZShkZXYpOworICAgICAgICB1cCgmcHJpdi0+aWVlZTgwMjExLT5pcHNfc2VtKTsKKyNlbmRpZgogCXJldCA9IGllZWU4MDIxMV93eF9zZXRfd2FwKHByaXYtPmllZWU4MDIxMSxpbmZvLGF3cnEsZXh0cmEpOwogCiAJdXAoJnByaXYtPnd4X3NlbSk7CkBAIC03NTMsMTQgKzc5MCwyNCBAQAogCXUzMiBod2tleVs0XT17MCwwLDAsMH07CiAJdTggbWFzaz0weGZmOwogCXUzMiBrZXlfaWR4PTA7Ci0JdTggemVyb19hZGRyWzRdWzZdID17CXsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisJdTggemVyb19hZGRyWzRdWzZdID17ezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKIAkJCQl7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDF9LAogCQkJCXsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMn0sCiAJCQkJezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAzfSB9OwogCWludCBpOwogCisJaWYocHJpdi0+Ykh3UmFkaW9PZmYgPT0gdHJ1ZSkKKwkJcmV0dXJuIDA7CisKICAgICAgICBpZighcHJpdi0+dXApIHJldHVybiAtRU5FVERPV047CiAKKyAgICAgICAgcHJpdi0+aWVlZTgwMjExLT53eF9zZXRfZW5jID0gMTsKKyNpZmRlZiBFTkFCTEVfSVBTCisgICAgICAgIGRvd24oJnByaXYtPmllZWU4MDIxMS0+aXBzX3NlbSk7CisgICAgICAgIElQU0xlYXZlKGRldik7CisgICAgICAgIHVwKCZwcml2LT5pZWVlODAyMTEtPmlwc19zZW0pOworI2VuZGlmCisKIAlkb3duKCZwcml2LT53eF9zZW0pOwogCiAJUlRfVFJBQ0UoQ09NUF9TRUMsICJTZXR0aW5nIFNXIHdlcCBrZXkiKTsKQEAgLTc2OCw3ICs4MTUsNiBAQAogCiAJdXAoJnByaXYtPnd4X3NlbSk7CiAKLQogCS8vc29tZXRpbWVzLCB0aGUgbGVuZ3RoIGlzIHplcm8gd2hpbGUgd2UgZG8gbm90IHR5cGUga2V5IHZhbHVlCiAJaWYod3JxdS0+ZW5jb2RpbmcubGVuZ3RoIT0wKXsKIApAQCAtODY4LDYgKzkxNCw4IEBACiAJfQogI2VuZGlmCiAKKwlwcml2LT5pZWVlODAyMTEtPnd4X3NldF9lbmMgPSAwOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtODkzLDYgKzk0MSw5IEBACiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCWludCBlcnIgPSAwOwogCisJaWYocHJpdi0+Ykh3UmFkaW9PZmYgPT0gdHJ1ZSkKKwkJcmV0dXJuIDA7CisKIAlkb3duKCZwcml2LT53eF9zZW0pOwogCiAJaWYgKHdycXUtPnJldHJ5LmZsYWdzICYgSVdfUkVUUllfTElGRVRJTUUgfHwKQEAgLTk4NSw2ICsxMDM2LDEwIEBACiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCiAJc2hvcnQgZXJyID0gMDsKKworCWlmKHByaXYtPmJId1JhZGlvT2ZmID09IHRydWUpCisJCXJldHVybiAwOworCiAJZG93bigmcHJpdi0+d3hfc2VtKTsKIAkvL0RNRVNHKCJhdHRlbXB0IHRvIHNldCBzZW5zaXZpdHkgdG8gJWRkYiIsd3JxdS0+c2Vucy52YWx1ZSk7CiAJaWYocHJpdi0+cmZfc2V0X3NlbnMgPT0gTlVMTCkgewpAQCAtMTAxMSw3ICsxMDY2LDE5IEBACiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKiBpZWVlID0gcHJpdi0+aWVlZTgwMjExOwogCisJaWYocHJpdi0+Ykh3UmFkaW9PZmYgPT0gdHJ1ZSkKKwkJcmV0dXJuIDA7CisKIAlkb3duKCZwcml2LT53eF9zZW0pOworCisJcHJpdi0+aWVlZTgwMjExLT53eF9zZXRfZW5jID0gMTsKKworI2lmZGVmIEVOQUJMRV9JUFMKKyAgICAgICAgZG93bigmcHJpdi0+aWVlZTgwMjExLT5pcHNfc2VtKTsKKyAgICAgICAgSVBTTGVhdmUoZGV2KTsKKyAgICAgICAgdXAoJnByaXYtPmllZWU4MDIxMS0+aXBzX3NlbSk7CisjZW5kaWYKKwogCXJldCA9IGllZWU4MDIxMV93eF9zZXRfZW5jb2RlX2V4dChpZWVlLCBpbmZvLCB3cnF1LCBleHRyYSk7CiAKIAl7CkBAIC0xMDkxLDYgKzExNTgsNyBAQAogCX0KIAogZW5kX2h3X3NlYzoKKwlwcml2LT5pZWVlODAyMTEtPnd4X3NldF9lbmMgPSAwOwogCXVwKCZwcml2LT53eF9zZW0pOwogCXJldHVybiByZXQ7CiAKQEAgLTExMDIsNiArMTE3MCwxMCBAQAogCWludCByZXQ9MDsKIAkvL3ByaW50aygiPT09PT4lcygpXG4iLCBfX0ZVTkNUSU9OX18pOwogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKworCWlmKHByaXYtPmJId1JhZGlvT2ZmID09IHRydWUpCisJCXJldHVybiAwOworCiAJZG93bigmcHJpdi0+d3hfc2VtKTsKIAlyZXQgPSBpZWVlODAyMTFfd3hfc2V0X2F1dGgocHJpdi0+aWVlZTgwMjExLCBpbmZvLCAmKGRhdGEtPnBhcmFtKSwgZXh0cmEpOwogCXVwKCZwcml2LT53eF9zZW0pOwpAQCAtMTExNiw2ICsxMTg4LDEwIEBACiAKIAlpbnQgcmV0PTA7CiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCisJaWYocHJpdi0+Ykh3UmFkaW9PZmYgPT0gdHJ1ZSkKKwkJcmV0dXJuIDA7CisKIAlkb3duKCZwcml2LT53eF9zZW0pOwogCXJldCA9IGllZWU4MDIxMV93eF9zZXRfbWxtZShwcml2LT5pZWVlODAyMTEsIGluZm8sIHdycXUsIGV4dHJhKTsKIAl1cCgmcHJpdi0+d3hfc2VtKTsKQEAgLTExMjksNiArMTIwNSwxMCBAQAogCSAgIC8vcHJpbnRrKCI9PT09PiVzKCksIGxlbjolZFxuIiwgX19GVU5DVElPTl9fLCBkYXRhLT5sZW5ndGgpOwogCWludCByZXQ9MDsKICAgICAgICAgc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCisJaWYocHJpdi0+Ykh3UmFkaW9PZmYgPT0gdHJ1ZSkKKwkJcmV0dXJuIDA7CisKICAgICAgICAgZG93bigmcHJpdi0+d3hfc2VtKTsKICAgICAgICAgcmV0ID0gaWVlZTgwMjExX3d4X3NldF9nZW5faWUocHJpdi0+aWVlZTgwMjExLCBleHRyYSwgZGF0YS0+ZGF0YS5sZW5ndGgpOwogICAgICAgICB1cCgmcHJpdi0+d3hfc2VtKTsKQEAgLTExNDIsNiArMTIyMiw0MiBAQAogCXJldHVybiAtMTsKIH0KIAorLy8gY2hlY2sgYWMvZGMgc3RhdHVzIHdpdGggdGhlIGhlbHAgb2YgdXNlciBzcGFjZSBhcHBsaWNhdGlvbiAqLworc3RhdGljIGludCByODE5Ml93eF9hZGFwdGVyX3Bvd2VyX3N0YXR1cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQl1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisjaWZkZWYgRU5BQkxFX0xQUworCVBSVF9QT1dFUl9TQVZFX0NPTlRST0wgcFBTQyA9IChQUlRfUE9XRVJfU0FWRV9DT05UUk9MKSgmKHByaXYtPmllZWU4MDIxMS0+UG93ZXJTYXZlQ29udHJvbCkpOworCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKiBpZWVlID0gcHJpdi0+aWVlZTgwMjExOworI2VuZGlmCisJZG93bigmcHJpdi0+d3hfc2VtKTsKKworI2lmZGVmIEVOQUJMRV9MUFMKKwlSVF9UUkFDRShDT01QX1BPV0VSLCAiJXMoKTogJXNcbiIsX19GVU5DVElPTl9fLCAoKmV4dHJhID09ICA2KT8iREMgcG93ZXIiOiJBQyBwb3dlciIpOworCS8vIGllZWUtPnBzIHNoYWxsIG5vdCBiZSBzZXQgdW5kZXIgREMgbW9kZSwgb3RoZXJ3aXNlIGl0IGNvbmZsaWN0CisJLy8gd2l0aCBMZWlzdXJlIHBvd2VyIHNhdmUgbW9kZSBzZXR0aW5nLgorCS8vCisJaWYoKmV4dHJhIHx8IHByaXYtPmZvcmNlX2xwcykgeworCQlwcml2LT5wc19mb3JjZSA9IGZhbHNlOworCQlwUFNDLT5iTGVpc3VyZVBzID0gdHJ1ZTsKKwl9IGVsc2UgeworCQkvL0xaTSBmb3IgUFMtUG9sbCBBSUQgaXNzdWUuIDA5MDQyOQorCQlpZihwcml2LT5pZWVlODAyMTEtPnN0YXRlID09IElFRUU4MDIxMV9MSU5LRUQpCisJCQlMZWlzdXJlUFNMZWF2ZShkZXYpOworCisJCXByaXYtPnBzX2ZvcmNlID0gdHJ1ZTsKKwkJcFBTQy0+YkxlaXN1cmVQcyA9IGZhbHNlOworCQlpZWVlLT5wcyA9ICpleHRyYTsKKwl9CisKKyNlbmRpZgorCXVwKCZwcml2LT53eF9zZW0pOworCXJldHVybiAwOworCit9CisKIAogc3RhdGljIGl3X2hhbmRsZXIgcjgxOTJfd3hfaGFuZGxlcnNbXSA9CiB7CkBAIC0xMjMxLDcyICsxMzQ3LDI4IEBACiAJCVNJT0NJV0ZJUlNUUFJJViArIDB4MiwKIAkJSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsIDAsICJyYXd0eCIKIAl9Ci0jaWZkZWYgSk9ITl9JT0NUTAotCSwKLQl7Ci0JCVNJT0NJV0ZJUlNUUFJJViArIDB4MywKLSAgICAgICAgICAgICAgICBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgMCwgInJlYWRSRiIKLQl9Ci0JLAotCXsKLQkJU0lPQ0lXRklSU1RQUklWICsgMHg0LAotICAgICAgICAgICAgICAgIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAwLCAid3JpdGVSRiIKLQl9Ci0JLAotCXsKLQkJU0lPQ0lXRklSU1RQUklWICsgMHg1LAotICAgICAgICAgICAgICAgIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAwLCAicmVhZEJCIgotCX0KLQksCi0JewotCQlTSU9DSVdGSVJTVFBSSVYgKyAweDYsCi0gICAgICAgICAgICAgICAgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsIDAsICJ3cml0ZUJCIgotCX0KLSAgICAgICAgLAotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU0lPQ0lXRklSU1RQUklWICsgMHg3LAotICAgICAgICAgICAgICAgIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAwLCAicmVhZG5pY2IiCi0gICAgICAgIH0KLSAgICAgICAgLAotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU0lPQ0lXRklSU1RQUklWICsgMHg4LAotICAgICAgICAgICAgICAgIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAwLCAid3JpdGVuaWNiIgotICAgICAgICB9Ci0gICAgICAgICwKLSAgICAgICAgewotICAgICAgICAgICAgICAgIFNJT0NJV0ZJUlNUUFJJViArIDB4OSwKLSAgICAgICAgICAgICAgICBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgMCwgImFwaW5mbyIKLSAgICAgICAgfQotCi0jZW5kaWYKIAksCiAJewogCQlTSU9DSVdGSVJTVFBSSVYgKyAweDMsCiAJCUlXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAwLCAiZm9yY2VyZXNldCIKIAogCX0KKwksCisJeworCQlTSU9DSVdGSVJTVFBSSVYgKyAweDQsCisJCUlXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUR8MSwgSVdfUFJJVl9UWVBFX05PTkUsCisJCSJzZXRfcG93ZXIiCisJfQogCiB9OwogCiAKIHN0YXRpYyBpd19oYW5kbGVyIHI4MTkyX3ByaXZhdGVfaGFuZGxlcltdID0gewotLy8JcjgxOTJfd3hfc2V0X21vbml0b3IsICAvKiBTSU9DSVdGSVJTVFBSSVYgKi8KIAlyODE5Ml93eF9zZXRfY3JjbW9uLCAgIC8qU0lPQ0lXU0VDT05EUFJJViovCi0vLwlyODE5Ml93eF9zZXRfZm9yY2Vhc3NvY2lhdGUsCi0vLwlyODE5Ml93eF9zZXRfYmVhY29uaW50ZXJ2YWwsCi0vLwlyODE5Ml93eF9zZXRfbW9uaXRvcl90eXBlLAogCXI4MTkyX3d4X3NldF9zY2FuX3R5cGUsCiAJcjgxOTJfd3hfc2V0X3Jhd3R4LAotI2lmZGVmIEpPSE5fSU9DVEwKLQlyODE5Ml93eF9yZWFkX3JlZ3MsCi0JcjgxOTJfd3hfd3JpdGVfcmVncywKLQlyODE5Ml93eF9yZWFkX2JiLAotCXI4MTkyX3d4X3dyaXRlX2JiLAotICAgICAgICByODE5Ml93eF9yZWFkX25pY2IsCi0gICAgICAgIHI4MTkyX3d4X3dyaXRlX25pY2IsCi0JcjgxOTJfd3hfZ2V0X2FwX3N0YXR1cwotI2VuZGlmCiAJcjgxOTJfd3hfZm9yY2VfcmVzZXQsCisJcjgxOTJfd3hfYWRhcHRlcl9wb3dlcl9zdGF0dXMsCiB9OwogCiAvLyNpZiBXSVJFTEVTU19FWFQgPj0gMTcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfd3guaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfd3guaAppbmRleCA3OWViZGI2Li4wNDcwMzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX3d4LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV93eC5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaWZuZGVmIFI4MTgwX1dYX0gKICNkZWZpbmUgUjgxODBfV1hfSAogLy8jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KLS8vI2luY2x1ZGUgImllZWU4MDIxMS5oIgogZXh0ZXJuIHN0cnVjdCBpd19oYW5kbGVyX2RlZiByODE5Ml93eF9oYW5kbGVyc19kZWY7CiAvKiBFbmFibGUgIHRoZSBydGw4MTl4X2NvcmUuYyB0byBzaGFyZSB0aGlzIGZ1bmN0aW9uLCBkYXZpZCAyMDA4LjkuMjIgKi8KIGV4dGVybiBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqcjgxOTJfZ2V0X3dpcmVsZXNzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTl4RV9jbWRwa3QuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5eEVfY21kcGt0LmMKaW5kZXggMmFhYTRlMS4uODdjMzM0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTl4RV9jbWRwa3QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOXhFX2NtZHBrdC5jCkBAIC0xMzUsNyArMTM1LDcgQEAKICAgICAgICAgICAgICAqIFRyYW5zZm9ybSBmcm9tIGxpdHRsZSBlbmRpYW4gdG8gYmlnIGVuZGlhbgogICAgICAgICAgICAgICogYW5kIHBlbmRpbmcgIHplcm8KICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc2VnX3B0ciA9IHNrYi0+dGFpbDsKKyAgICAgICAgICAgIHNlZ19wdHIgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7CiAgICAgICAgICAgICBmb3IoaT0wIDsgaSA8IGZyYWdfbGVuZ3RoOyBpKz00KSB7CiAgICAgICAgICAgICAgICAgKnNlZ19wdHIrKyA9ICgoaSswKTxmcmFnX2xlbmd0aCk/Y29kZV92aXJ0dWFsX2FkZHJlc3NbaSszXTowOwogICAgICAgICAgICAgICAgICpzZWdfcHRyKysgPSAoKGkrMSk8ZnJhZ19sZW5ndGgpP2NvZGVfdmlydHVhbF9hZGRyZXNzW2krMl06MDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5eEVfZmlybXdhcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5eEVfZmlybXdhcmUuYwppbmRleCAxZjllNDEzLi43OTNhMTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOXhFX2Zpcm13YXJlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTl4RV9maXJtd2FyZS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIFByb2NlZHVyZTogICAgSW5pdCBib290IGNvZGUvZmlybXdhcmUgY29kZS9kYXRhIHNlc3Npb24KKyAqIFByb2NlZHVyZTogSW5pdCBib290IGNvZGUvZmlybXdhcmUgY29kZS9kYXRhIHNlc3Npb24KICAqCiAgKiBEZXNjcmlwdGlvbjogVGhpcyByb3V0aW5lIHdpbGwgaW50aWFsaXplIGZpcm13YXJlLiBJZiBhbnkgZXJyb3Igb2NjdXJzCiAgKgkJZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzLCB0aGUgcm91dGluZSBzaGFsbCB0ZXJtaW5hdGUKQEAgLTcsMTkgKzcsMjEgQEAKICAqCQlOZGlzT3BlbkZpbGUgb25seSBmcm9tIE1pbmlwb3J0SW5pdGlhbGl6ZS4KICAqCiAgKiBBcmd1bWVudHM6ICAgVGhlIHBvaW50ZXIgb2YgdGhlIGFkYXB0ZXIKLQorICoKICAqIFJldHVybnM6CiAgKgkJTkRJU19TVEFUVVNfRkFJTFVSRSAtIHRoZSBmb2xsb3dpbmcgaW5pdGlhbGl6YXRpb24gcHJvY2VzcwogICoJCQkJICAgICAgc2hvdWxkIGJlIHRlcm1pbmF0ZWQKICAqCQlORElTX1NUQVRVU19TVUNDRVNTIC0gaWYgZmlybXdhcmUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcwogICoJCQkJICAgICAgc3VjY2VzcwogICovCisKICNpbmNsdWRlICJyODE5MkUuaCIKICNpbmNsdWRlICJyODE5MkVfaHcuaCIKKwogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAKIC8qIEl0IHNob3VsZCBiZSBkb3VibGUgd29yZCBhbGlnbm1lbnQgKi8KLSNkZWZpbmUgR0VUX0NPTU1BTkRfUEFDS0VUX0ZSQUdfVEhSRVNIT0xEKHYpCSg0ICogKHYgLyA0KSAtIDgpCisjZGVmaW5lIEdFVF9DT01NQU5EX1BBQ0tFVF9GUkFHX1RIUkVTSE9MRCh2KSAoNCAqICh2IC8gNCkgLSA4KQogCiBlbnVtIGZpcm13YXJlX2luaXRfc3RlcCB7CiAJRldfSU5JVF9TVEVQMF9CT09UID0gMCwKQEAgLTQ3LDE3ICs0OSwxNyBAQAogc3RhdGljIGJvb2wgZndfZG93bmxvYWRfY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqY29kZV92aXJ0dWFsX2FkZHJlc3MsCiAJCQkgICAgIHUzMiBidWZmZXJfbGVuKQogewotCXN0cnVjdCByODE5Ml9wcml2ICAgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCWJvb2wgCQkgICAgcnRfc3RhdHVzID0gdHJ1ZTsKLQl1MTYJCSAgICBmcmFnX3RocmVzaG9sZDsKLQl1MTYJCSAgICBmcmFnX2xlbmd0aCwgZnJhZ19vZmZzZXQgPSAwOwotCWludAkJICAgIGk7CisJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCWJvb2wgcnRfc3RhdHVzID0gdHJ1ZTsKKwl1MTYgZnJhZ190aHJlc2hvbGQ7CisJdTE2IGZyYWdfbGVuZ3RoLCBmcmFnX29mZnNldCA9IDA7CisJaW50IGk7CiAKLQlydF9maXJtd2FyZQkgICAgKnBmaXJtd2FyZSA9IHByaXYtPnBGaXJtd2FyZTsKLQlzdHJ1Y3Qgc2tfYnVmZgkgICAgKnNrYjsKLQl1bnNpZ25lZCBjaGFyCSAgICAqc2VnX3B0cjsKLQljYl9kZXNjCQkgICAgKnRjYl9kZXNjOwotCXU4ICAgICAgICAgICAgICAgICAgYkxhc3RJbmlQa3Q7CisJcnRfZmlybXdhcmUgKnBmaXJtd2FyZSA9IHByaXYtPnBGaXJtd2FyZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXVuc2lnbmVkIGNoYXIgKnNlZ19wdHI7CisJY2JfZGVzYyAqdGNiX2Rlc2M7CisJdTggYkxhc3RJbmlQa3Q7CiAKIAlmaXJtd2FyZV9pbml0X3BhcmFtKGRldik7CiAKQEAgLTg5LDEwICs5MSwxNyBAQAogCQkgKiBUcmFuc2Zvcm0gZnJvbSBsaXR0bGUgZW5kaWFuIHRvIGJpZyBlbmRpYW4gYW5kIHBlbmRpbmcgemVybwogCQkgKi8KIAkJZm9yIChpID0gMDsgaSA8IGZyYWdfbGVuZ3RoOyBpICs9IDQpIHsKLQkJCSpzZWdfcHRyKysgPSAoKGkrMCkgPCBmcmFnX2xlbmd0aCkgPyBjb2RlX3ZpcnR1YWxfYWRkcmVzc1tpKzNdIDogMDsKLQkJCSpzZWdfcHRyKysgPSAoKGkrMSkgPCBmcmFnX2xlbmd0aCkgPyBjb2RlX3ZpcnR1YWxfYWRkcmVzc1tpKzJdIDogMDsKLQkJCSpzZWdfcHRyKysgPSAoKGkrMikgPCBmcmFnX2xlbmd0aCkgPyBjb2RlX3ZpcnR1YWxfYWRkcmVzc1tpKzFdIDogMDsKLQkJCSpzZWdfcHRyKysgPSAoKGkrMykgPCBmcmFnX2xlbmd0aCkgPyBjb2RlX3ZpcnR1YWxfYWRkcmVzc1tpKzBdIDogMDsKKwkJCSpzZWdfcHRyKysgPSAoKGkrMCkgPCBmcmFnX2xlbmd0aCkgPyBcCisJCQkJCWNvZGVfdmlydHVhbF9hZGRyZXNzW2krM10gOiAwOworCisJCQkqc2VnX3B0cisrID0gKChpKzEpIDwgZnJhZ19sZW5ndGgpID8gXAorCQkJCQljb2RlX3ZpcnR1YWxfYWRkcmVzc1tpKzJdIDogMDsKKworCQkJKnNlZ19wdHIrKyA9ICgoaSsyKSA8IGZyYWdfbGVuZ3RoKSA/IFwKKwkJCQkJY29kZV92aXJ0dWFsX2FkZHJlc3NbaSsxXSA6IDA7CisKKwkJCSpzZWdfcHRyKysgPSAoKGkrMykgPCBmcmFnX2xlbmd0aCkgPyBcCisJCQkJCWNvZGVfdmlydHVhbF9hZGRyZXNzW2krMF0gOiAwOwogCQl9CiAJCXRjYl9kZXNjLT50eGJ1Zl9zaXplID0gKHUxNilpOwogCQlza2JfcHV0KHNrYiwgaSk7CkBAIC0yMDQsMTYgKzIxMywxNiBAQAogCiBib29sIGluaXRfZmlybXdhcmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcjgxOTJfcHJpdiAJKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCWJvb2wJCQlydF9zdGF0dXMgPSBUUlVFOwotCXUzMgkJCWZpbGVfbGVuZ3RoID0gMDsKLQl1OAkJCSptYXBwZWRfZmlsZSA9IE5VTEw7Ci0JdTMyCQkJaW5pdF9zdGVwID0gMDsKLQllbnVtIG9wdF9yc3RfdHlwZQlyc3Rfb3B0ID0gT1BUX1NZU1RFTV9SRVNFVDsKKwlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJYm9vbCBydF9zdGF0dXMgPSB0cnVlOworCXUzMiBmaWxlX2xlbmd0aCA9IDA7CisJdTggKm1hcHBlZF9maWxlID0gTlVMTDsKKwl1MzIgaW5pdF9zdGVwID0gMDsKKwllbnVtIG9wdF9yc3RfdHlwZSByc3Rfb3B0ID0gT1BUX1NZU1RFTV9SRVNFVDsKIAllbnVtIGZpcm13YXJlX2luaXRfc3RlcAlzdGFydGluZ19zdGF0ZSA9IEZXX0lOSVRfU1RFUDBfQk9PVDsKIAotCXJ0X2Zpcm13YXJlCQkqcGZpcm13YXJlID0gcHJpdi0+cEZpcm13YXJlOwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAJKmZ3X2VudHJ5OworCXJ0X2Zpcm13YXJlICpwZmlybXdhcmUgPSBwcml2LT5wRmlybXdhcmU7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeTsKIAljb25zdCBjaGFyICpmd19uYW1lWzNdID0geyAiUlRMODE5MkUvYm9vdC5pbWciLAogCQkJCSAgICJSVEw4MTkyRS9tYWluLmltZyIsCiAJCQkJICAgIlJUTDgxOTJFL2RhdGEuaW1nIn07CkBAIC0yNDAsMzEgKzI0OSwzNyBAQAogCSAqIERvd25sb2FkIGJvb3QsIG1haW4sIGFuZCBkYXRhIGltYWdlIGZvciBTeXN0ZW0gcmVzZXQuCiAJICogRG93bmxvYWQgZGF0YSBpbWFnZSBmb3IgZmlybXdhcmUgcmVzZXRhCiAJICovCi0JZm9yIChpbml0X3N0ZXAgPSBzdGFydGluZ19zdGF0ZTsgaW5pdF9zdGVwIDw9IEZXX0lOSVRfU1RFUDJfREFUQTsgaW5pdF9zdGVwKyspIHsKKwlmb3IgKGluaXRfc3RlcCA9IHN0YXJ0aW5nX3N0YXRlOyBpbml0X3N0ZXAgPD0gRldfSU5JVF9TVEVQMl9EQVRBOyBcCisJCQlpbml0X3N0ZXArKykgewogCQkvKgogCQkgKiBPcGVuIEltYWdlIGZpbGUsIGFuZCBtYXAgZmlsZSB0byBjb250aW5lb3VzIG1lbW9yeSBpZiBvcGVuIGZpbGUgc3VjY2Vzcy4KIAkJICogb3IgcmVhZCBpbWFnZSBmaWxlIGZyb20gYXJyYXkuIERlZmF1bHQgbG9hZCBmcm9tIElNRyBmaWxlCiAJCSAqLwogCQlpZiAocnN0X29wdCA9PSBPUFRfU1lTVEVNX1JFU0VUKSB7CiAJCQlpZiAocGZpcm13YXJlLT5maXJtd2FyZV9idWZfc2l6ZVtpbml0X3N0ZXBdID09IDApIHsKLQkJCQlyYyA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBmd19uYW1lW2luaXRfc3RlcF0sICZwcml2LT5wZGV2LT5kZXYpOworCQkJCXJjID0gcmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksCisJCQkJCWZ3X25hbWVbaW5pdF9zdGVwXSwgJnByaXYtPnBkZXYtPmRldik7CisKIAkJCQlpZiAocmMgPCAwKSB7CiAJCQkJCVJUX1RSQUNFKENPTVBfRklSTVdBUkUsICJyZXF1ZXN0IGZpcm13YXJlIGZhaWwhXG4iKTsKIAkJCQkJZ290byBkb3dubG9hZF9maXJtd2FyZV9mYWlsOwogCQkJCX0KIAogCQkJCWlmIChmd19lbnRyeS0+c2l6ZSA+IHNpemVvZihwZmlybXdhcmUtPmZpcm13YXJlX2J1Zltpbml0X3N0ZXBdKSkgewotCQkJCQlSVF9UUkFDRShDT01QX0ZJUk1XQVJFLCAiaW1nIGZpbGUgc2l6ZSBleGNlZWQgdGhlIGNvbnRhaW5lciBidWZmZXIgZmFpbCFcbiIpOworCQkJCQlSVF9UUkFDRShDT01QX0ZJUk1XQVJFLCBcCisJCQkJCQkiaW1nIGZpbGUgc2l6ZSBleGNlZWQgdGhlIGNvbnRhaW5lciBidWZmZXIgZmFpbCFcbiIpOwogCQkJCQlnb3RvIGRvd25sb2FkX2Zpcm13YXJlX2ZhaWw7CiAJCQkJfQogCiAJCQkJaWYgKGluaXRfc3RlcCAhPSBGV19JTklUX1NURVAxX01BSU4pIHsKLQkJCQkJbWVtY3B5KHBmaXJtd2FyZS0+ZmlybXdhcmVfYnVmW2luaXRfc3RlcF0sIGZ3X2VudHJ5LT5kYXRhLCBmd19lbnRyeS0+c2l6ZSk7CisJCQkJCW1lbWNweShwZmlybXdhcmUtPmZpcm13YXJlX2J1Zltpbml0X3N0ZXBdLAorCQkJCQkJCWZ3X2VudHJ5LT5kYXRhLCBmd19lbnRyeS0+c2l6ZSk7CiAJCQkJCXBmaXJtd2FyZS0+ZmlybXdhcmVfYnVmX3NpemVbaW5pdF9zdGVwXSA9IGZ3X2VudHJ5LT5zaXplOwogCiAJCQkJfSBlbHNlIHsKIAkJCQkJbWVtc2V0KHBmaXJtd2FyZS0+ZmlybXdhcmVfYnVmW2luaXRfc3RlcF0sIDAsIDEyOCk7Ci0JCQkJCW1lbWNweSgmcGZpcm13YXJlLT5maXJtd2FyZV9idWZbaW5pdF9zdGVwXVsxMjhdLCBmd19lbnRyeS0+ZGF0YSwgZndfZW50cnktPnNpemUpOworCQkJCQltZW1jcHkoJnBmaXJtd2FyZS0+ZmlybXdhcmVfYnVmW2luaXRfc3RlcF1bMTI4XSwgZndfZW50cnktPmRhdGEsCisJCQkJCQkJCQlmd19lbnRyeS0+c2l6ZSk7CiAJCQkJCXBmaXJtd2FyZS0+ZmlybXdhcmVfYnVmX3NpemVbaW5pdF9zdGVwXSA9IGZ3X2VudHJ5LT5zaXplKzEyODsKIAkJCQl9CiAKQEAgLTI3Myw2ICsyODgsNyBAQAogCQkJfQogCQkJbWFwcGVkX2ZpbGUgPSBwZmlybXdhcmUtPmZpcm13YXJlX2J1Zltpbml0X3N0ZXBdOwogCQkJZmlsZV9sZW5ndGggPSBwZmlybXdhcmUtPmZpcm13YXJlX2J1Zl9zaXplW2luaXRfc3RlcF07CisKIAkJfSBlbHNlIGlmIChyc3Rfb3B0ID09IE9QVF9GSVJNV0FSRV9SRVNFVCkgewogCQkJLyogd2Ugb25seSBuZWVkIHRvIGRvd25sb2FkIGRhdGEuaW1nIGhlcmUgKi8KIAkJCW1hcHBlZF9maWxlID0gcGZpcm13YXJlLT5maXJtd2FyZV9idWZbaW5pdF9zdGVwXTsKQEAgLTM0Niw3ICszNjIsMTAgQEAKIAogZG93bmxvYWRfZmlybXdhcmVfZmFpbDoKIAlSVF9UUkFDRShDT01QX0VSUiwgIkVSUiBpbiAlcygpXG4iLCBfX2Z1bmNfXyk7Ci0JcnRfc3RhdHVzID0gRkFMU0U7CisJcnRfc3RhdHVzID0gZmFsc2U7CiAJcmV0dXJuIHJ0X3N0YXR1czsKLQogfQorCitNT0RVTEVfRklSTVdBUkUoIlJUTDgxOTJFL2Jvb3QuaW1nIik7CitNT0RVTEVfRklSTVdBUkUoIlJUTDgxOTJFL21haW4uaW1nIik7CitNT0RVTEVfRklSTVdBUkUoIlJUTDgxOTJFL2RhdGEuaW1nIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOXhFX3BoeS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTl4RV9waHkuYwppbmRleCBjNDQwNTlhLi43YmQ0ZmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOXhFX3BoeS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5eEVfcGh5LmMKQEAgLTUsNyArNSw3IEBACiAjaW5jbHVkZSAicjgxOXhFX3BoeS5oIgogI2luY2x1ZGUgInI4MTkyRV9kbS5oIgogI2lmZGVmIEVOQUJMRV9ET1QxMUQKLSNpbmNsdWRlICJkb3QxMWQuaCIKKyNpbmNsdWRlICJpZWVlODAyMTEvZG90MTFkLmgiCiAjZW5kaWYKIHN0YXRpYyB1MzIgUkZfQ0hBTk5FTF9UQUJMRV9aRUJSQVtdID0gewogCTAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOXhFX3BoeS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTl4RV9waHkuaAppbmRleCBmYTc3YWJlLi40MWUwZDc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOXhFX3BoeS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5eEVfcGh5LmgKQEAgLTEsNDMgKzEsNDYgQEAKICNpZm5kZWYgX1I4MTlYVV9QSFlfSAogI2RlZmluZSBfUjgxOVhVX1BIWV9ICi0vKiBDaGFubmVsIHN3aXRjaDpUaGUgc2l6ZSBvZiBjb21tYW5kIHRhYmxlcyBmb3Igc3dpdGNoIGNoYW5uZWwqLworCisvKiBDaGFubmVsIHN3aXRjaDogdGhlIHNpemUgb2YgY29tbWFuZCB0YWJsZXMgZm9yIHN3aXRjaCBjaGFubmVsICovCiAjZGVmaW5lIE1BWF9QUkVDTURfQ05UIDE2CiAjZGVmaW5lIE1BWF9SRkRFUEVORENNRF9DTlQgMTYKICNkZWZpbmUgTUFYX1BPU1RDTURfQ05UIDE2CiAKICNpZmRlZiBSVEw4MTkwUAogI2RlZmluZSBNQUNQSFlfQXJyYXlfUEdMZW5ndGggMjEKLSNkZWZpbmUgUnRsODE5WE1BQ1BIWV9BcnJheV9QRwkJCVJ0bDgxOTBQY2lNQUNQSFlfQXJyYXlfUEcKLSNkZWZpbmUgUnRsODE5WE1BQ1BIWV9BcnJheQkJCQlSdGw4MTkwUGNpTUFDUEhZX0FycmF5CisjZGVmaW5lIFJ0bDgxOVhNQUNQSFlfQXJyYXlfUEcgUnRsODE5MFBjaU1BQ1BIWV9BcnJheV9QRworI2RlZmluZSBSdGw4MTlYTUFDUEhZX0FycmF5IFJ0bDgxOTBQY2lNQUNQSFlfQXJyYXkKICNkZWZpbmUgUmFkaW9DX0FycmF5TGVuZ3RoIDI0NgogI2RlZmluZSBSYWRpb0RfQXJyYXlMZW5ndGggNzgKLSNkZWZpbmUgUnRsODE5WFJhZGlvQV9BcnJheQkJCQkJUnRsODE5MFBjaVJhZGlvQV9BcnJheQotI2RlZmluZSBSdGw4MTlYUmFkaW9CX0FycmF5CQkJCQlSdGw4MTkwUGNpUmFkaW9CX0FycmF5Ci0jZGVmaW5lIFJ0bDgxOVhSYWRpb0NfQXJyYXkJCQkJCVJ0bDgxOTBQY2lSYWRpb0NfQXJyYXkKLSNkZWZpbmUgUnRsODE5WFJhZGlvRF9BcnJheQkJCQkJUnRsODE5MFBjaVJhZGlvRF9BcnJheQotI2RlZmluZSBSdGw4MTlYQUdDVEFCX0FycmF5CQkJCVJ0bDgxOTBQY2lBR0NUQUJfQXJyYXkKLSNkZWZpbmUgUEhZX1JFR0FycmF5TGVuZ3RoIAkJCQkyODAKLSNkZWZpbmUgUnRsODE5WFBIWV9SRUdBcnJheQkJCQlSdGw4MTkwUGNpUEhZX1JFR0FycmF5Ci0jZGVmaW5lIFBIWV9SRUdfMVQyUkFycmF5TGVuZ3RoIAkJMjgwCi0jZGVmaW5lIFJ0bDgxOVhQSFlfUkVHXzFUMlJBcnJheQkJUnRsODE5MFBjaVBIWV9SRUdfMVQyUkFycmF5CisjZGVmaW5lIFJ0bDgxOVhSYWRpb0FfQXJyYXkgUnRsODE5MFBjaVJhZGlvQV9BcnJheQorI2RlZmluZSBSdGw4MTlYUmFkaW9CX0FycmF5IFJ0bDgxOTBQY2lSYWRpb0JfQXJyYXkKKyNkZWZpbmUgUnRsODE5WFJhZGlvQ19BcnJheSBSdGw4MTkwUGNpUmFkaW9DX0FycmF5CisjZGVmaW5lIFJ0bDgxOVhSYWRpb0RfQXJyYXkgUnRsODE5MFBjaVJhZGlvRF9BcnJheQorI2RlZmluZSBSdGw4MTlYQUdDVEFCX0FycmF5IFJ0bDgxOTBQY2lBR0NUQUJfQXJyYXkKKyNkZWZpbmUgUEhZX1JFR0FycmF5TGVuZ3RoIDI4MAorI2RlZmluZSBSdGw4MTlYUEhZX1JFR0FycmF5IFJ0bDgxOTBQY2lQSFlfUkVHQXJyYXkKKyNkZWZpbmUgUEhZX1JFR18xVDJSQXJyYXlMZW5ndGggMjgwCisjZGVmaW5lIFJ0bDgxOVhQSFlfUkVHXzFUMlJBcnJheSBSdGw4MTkwUGNpUEhZX1JFR18xVDJSQXJyYXkKICNlbmRpZgogCi0JI2lmZGVmIFJUTDgxOTJFCi0JI2RlZmluZSBNQUNQSFlfQXJyYXlfUEdMZW5ndGggMzAKLQkjZGVmaW5lIFJ0bDgxOVhNQUNQSFlfQXJyYXlfUEcJCQlSdGw4MTkyUGNpRU1BQ1BIWV9BcnJheV9QRwotCSNkZWZpbmUgUnRsODE5WE1BQ1BIWV9BcnJheQkJCQlSdGw4MTkyUGNpRU1BQ1BIWV9BcnJheQotCSNkZWZpbmUgUmFkaW9DX0FycmF5TGVuZ3RoIDEKLQkjZGVmaW5lIFJhZGlvRF9BcnJheUxlbmd0aCAxCi0JI2RlZmluZSBSdGw4MTlYUmFkaW9BX0FycmF5CQkJCQlSdGw4MTkyUGNpRVJhZGlvQV9BcnJheQotCSNkZWZpbmUgUnRsODE5WFJhZGlvQl9BcnJheQkJCQkJUnRsODE5MlBjaUVSYWRpb0JfQXJyYXkKLQkjZGVmaW5lIFJ0bDgxOVhSYWRpb0NfQXJyYXkJCQkJCVJ0bDgxOTJQY2lFUmFkaW9DX0FycmF5Ci0JI2RlZmluZSBSdGw4MTlYUmFkaW9EX0FycmF5CQkJCQlSdGw4MTkyUGNpRVJhZGlvRF9BcnJheQotCSNkZWZpbmUgUnRsODE5WEFHQ1RBQl9BcnJheQkJCQlSdGw4MTkyUGNpRUFHQ1RBQl9BcnJheQotCSNkZWZpbmUgUEhZX1JFR0FycmF5TGVuZ3RoIAkJCQkxCi0JI2RlZmluZSBSdGw4MTlYUEhZX1JFR0FycmF5CQkJCVJ0bDgxOTJQY2lFUEhZX1JFR0FycmF5Ci0JI2RlZmluZSBQSFlfUkVHXzFUMlJBcnJheUxlbmd0aCAJCTI5NgotCSNkZWZpbmUgUnRsODE5WFBIWV9SRUdfMVQyUkFycmF5CQlSdGw4MTkyUGNpRVBIWV9SRUdfMVQyUkFycmF5Ci0JI2VuZGlmCisKKyNpZmRlZiBSVEw4MTkyRQorI2RlZmluZSBNQUNQSFlfQXJyYXlfUEdMZW5ndGggMzAKKyNkZWZpbmUgUnRsODE5WE1BQ1BIWV9BcnJheV9QRyBSdGw4MTkyUGNpRU1BQ1BIWV9BcnJheV9QRworI2RlZmluZSBSdGw4MTlYTUFDUEhZX0FycmF5IFJ0bDgxOTJQY2lFTUFDUEhZX0FycmF5CisjZGVmaW5lIFJhZGlvQ19BcnJheUxlbmd0aCAxCisjZGVmaW5lIFJhZGlvRF9BcnJheUxlbmd0aCAxCisjZGVmaW5lIFJ0bDgxOVhSYWRpb0FfQXJyYXkgUnRsODE5MlBjaUVSYWRpb0FfQXJyYXkKKyNkZWZpbmUgUnRsODE5WFJhZGlvQl9BcnJheSBSdGw4MTkyUGNpRVJhZGlvQl9BcnJheQorI2RlZmluZSBSdGw4MTlYUmFkaW9DX0FycmF5IFJ0bDgxOTJQY2lFUmFkaW9DX0FycmF5CisjZGVmaW5lIFJ0bDgxOVhSYWRpb0RfQXJyYXkgUnRsODE5MlBjaUVSYWRpb0RfQXJyYXkKKyNkZWZpbmUgUnRsODE5WEFHQ1RBQl9BcnJheSBSdGw4MTkyUGNpRUFHQ1RBQl9BcnJheQorI2RlZmluZSBQSFlfUkVHQXJyYXlMZW5ndGggMQorI2RlZmluZSBSdGw4MTlYUEhZX1JFR0FycmF5IFJ0bDgxOTJQY2lFUEhZX1JFR0FycmF5CisjZGVmaW5lIFBIWV9SRUdfMVQyUkFycmF5TGVuZ3RoIDI5NgorI2RlZmluZSBSdGw4MTlYUEhZX1JFR18xVDJSQXJyYXkgUnRsODE5MlBjaUVQSFlfUkVHXzFUMlJBcnJheQorI2VuZGlmCisKICNkZWZpbmUgQUdDVEFCX0FycmF5TGVuZ3RoIDM4NAogI2RlZmluZSBNQUNQSFlfQXJyYXlMZW5ndGggMTgKIApAQCAtNDUsNyArNDgsNyBAQAogI2RlZmluZSBSYWRpb0JfQXJyYXlMZW5ndGggNzgKIAogCi10eXBlZGVmIGVudW0gX1N3Q2hubENtZElEewordHlwZWRlZiBlbnVtIF9Td0NobmxDbWRJRCB7CiAJQ21kSURfRW5kLAogCUNtZElEX1NldFR4UG93ZXJMZXZlbCwKIAlDbWRJRF9CQlJlZ1dyaXRlMTAsCkBAIC01MywxNiArNTYsMTUgQEAKIAlDbWRJRF9Xcml0ZVBvcnRVc2hvcnQsCiAJQ21kSURfV3JpdGVQb3J0VWNoYXIsCiAJQ21kSURfUkZfV3JpdGVSZWcsCi19U3dDaG5sQ21kSUQ7Cit9IFN3Q2hubENtZElEOwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRGVmaW5lIHN0cnVjdHVyZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIDEuIFN3aXRjaCBjaGFubmVsIHJlbGF0ZWQgKi8KLXR5cGVkZWYgc3RydWN0IF9Td0NobmxDbWR7Ci0JU3dDaG5sQ21kSUQJQ21kSUQ7Ci0JdTMyCQkJUGFyYTE7Ci0JdTMyCQkJUGFyYTI7Ci0JdTMyCQkJbXNEZWxheTsKLX1fX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgU3dDaG5sQ21kOworLyogc3dpdGNoIGNoYW5uZWwgZGF0YSBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IF9Td0NobmxDbWQgeworCVN3Q2hubENtZElEIENtZElEOworCXUzMiBQYXJhMTsKKwl1MzIgUGFyYTI7CisJdTMyIG1zRGVsYXk7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBTd0NobmxDbWQ7CiAKIGV4dGVybiB1MzIgcnRsODE5WE1BQ1BIWV9BcnJheV9QR1tdOwogZXh0ZXJuIHUzMiBydGw4MTlYUEhZX1JFR18xVDJSQXJyYXlbXTsKQEAgLTcyLDU0ICs3NCw5MCBAQAogZXh0ZXJuIHUzMiBydGw4MTlYUmFkaW9DX0FycmF5W107CiBleHRlcm4gdTMyIHJ0bDgxOVhSYWRpb0RfQXJyYXlbXTsKIAotdHlwZWRlZiBlbnVtIF9IVzkwX0JMT0NLewordHlwZWRlZiBlbnVtIF9IVzkwX0JMT0NLIHsKIAlIVzkwX0JMT0NLX01BQyA9IDAsCiAJSFc5MF9CTE9DS19QSFkwID0gMSwKIAlIVzkwX0JMT0NLX1BIWTEgPSAyLAogCUhXOTBfQkxPQ0tfUkYgPSAzLAotCUhXOTBfQkxPQ0tfTUFYSU1VTSA9IDQsIC8vIE5ldmVyIHVzZSB0aGlzCi19SFc5MF9CTE9DS19FLCAqUEhXOTBfQkxPQ0tfRTsKKwkvKiBEb24ndCBldmVyIHVzZSB0aGlzLiAqLworCUhXOTBfQkxPQ0tfTUFYSU1VTSA9IDQsCit9IEhXOTBfQkxPQ0tfRSwgKlBIVzkwX0JMT0NLX0U7CiAKLXR5cGVkZWYgZW51bSBfUkY5MF9SQURJT19QQVRIewotCVJGOTBfUEFUSF9BID0gMCwJCQkvL1JhZGlvIFBhdGggQQotCVJGOTBfUEFUSF9CID0gMSwJCQkvL1JhZGlvIFBhdGggQgotCVJGOTBfUEFUSF9DID0gMiwJCQkvL1JhZGlvIFBhdGggQwotCVJGOTBfUEFUSF9EID0gMywJCQkvL1JhZGlvIFBhdGggRAotCVJGOTBfUEFUSF9NQVgJCQkJLy9NYXggUkYgbnVtYmVyIDkyIHN1cHBvcnQKLX1SRjkwX1JBRElPX1BBVEhfRSwgKlBSRjkwX1JBRElPX1BBVEhfRTsKK3R5cGVkZWYgZW51bSBfUkY5MF9SQURJT19QQVRIIHsKKwkvKiBSYWRpbyBwYXRocyAqLworCVJGOTBfUEFUSF9BID0gMCwKKwlSRjkwX1BBVEhfQiA9IDEsCisJUkY5MF9QQVRIX0MgPSAyLAorCVJGOTBfUEFUSF9EID0gMywKIAotI2RlZmluZSBiTWFza0J5dGUwICAgICAgICAgICAgICAgIDB4ZmYKLSNkZWZpbmUgYk1hc2tCeXRlMSAgICAgICAgICAgICAgICAweGZmMDAKLSNkZWZpbmUgYk1hc2tCeXRlMiAgICAgICAgICAgICAgICAweGZmMDAwMAotI2RlZmluZSBiTWFza0J5dGUzICAgICAgICAgICAgICAgIDB4ZmYwMDAwMDAKLSNkZWZpbmUgYk1hc2tIV29yZCAgICAgICAgICAgICAgICAweGZmZmYwMDAwCi0jZGVmaW5lIGJNYXNrTFdvcmQgICAgICAgICAgICAgICAgMHgwMDAwZmZmZgotI2RlZmluZSBiTWFza0RXb3JkICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYKKwkvKiBNYXggUkYgbnVtYmVyIDkyIHN1cHBvcnQgKi8KKwlSRjkwX1BBVEhfTUFYCit9IFJGOTBfUkFESU9fUEFUSF9FLCAqUFJGOTBfUkFESU9fUEFUSF9FOwogCi0vL2V4dGVybiB1MzIgcnRsODE5Ml9DYWxjdWxhdGVCaXRTaGlmdCh1MzIgZHdCaXRNYXNrKTsKLWV4dGVybiB1OCBydGw4MTkyX3BoeV9DaGVja0lzTGVnYWxSRlBhdGgoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgdTMyIGVSRlBhdGgpOwotZXh0ZXJuIHZvaWQgcnRsODE5Ml9zZXRCQnJlZyhzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCB1MzIgZHdSZWdBZGRyLCB1MzIgZHdCaXRNYXNrLCB1MzIgZHdEYXRhKTsKLWV4dGVybiB1MzIgcnRsODE5Ml9RdWVyeUJCUmVnKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIHUzMiBkd1JlZ0FkZHIsIHUzMiBkd0JpdE1hc2spOwotLy9leHRlcm4gdTMyIHJ0bDgxOTJfcGh5X1JGU2VyaWFsUmVhZChzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCBSRjkwX1JBRElPX1BBVEhfRSBlUkZQYXRoLCB1MzIgT2Zmc2V0KTsKLS8vZXh0ZXJuIHZvaWQgcnRsODE5Ml9waHlfUkZTZXJpYWxXcml0ZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCBSRjkwX1JBRElPX1BBVEhfRSBlUkZQYXRoLCB1MzIgT2Zmc2V0LCB1MzIgRGF0YSk7Ci1leHRlcm4gdm9pZCBydGw4MTkyX3BoeV9TZXRSRlJlZyhzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCBSRjkwX1JBRElPX1BBVEhfRSBlUkZQYXRoLCB1MzIgUmVnQWRkciwgdTMyIEJpdE1hc2ssIHUzMiBEYXRhKTsKLWV4dGVybiB1MzIgcnRsODE5Ml9waHlfUXVlcnlSRlJlZyhzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCBSRjkwX1JBRElPX1BBVEhfRSBlUkZQYXRoLCB1MzIgUmVnQWRkciwgdTMyIEJpdE1hc2spOwotZXh0ZXJuIHZvaWQgcnRsODE5Ml9waHlfY29uZmlnbWFjKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotZXh0ZXJuIHZvaWQgcnRsODE5Ml9waHlDb25maWdCQihzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCB1OCBDb25maWdUeXBlKTsKLS8vZXh0ZXJuIHZvaWQgcnRsODE5Ml9Jbml0QkJSRlJlZ0RlZihzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLWV4dGVybiBSVF9TVEFUVVMgcnRsODE5Ml9waHlfY2hlY2tCQkFuZFJGKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIEhXOTBfQkxPQ0tfRSBDaGVja0Jsb2NrLCBSRjkwX1JBRElPX1BBVEhfRSBlUkZQYXRoKTsKLS8vZXh0ZXJuIFJUX1NUQVRVUyBydGw4MTkyX0JCX0NvbmZpZ19QYXJhRmlsZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLWV4dGVybiBSVF9TVEFUVVMgcnRsODE5Ml9CQkNvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLWV4dGVybiB2b2lkIHJ0bDgxOTJfcGh5X2dldFR4UG93ZXIoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7Ci1leHRlcm4gdm9pZCBydGw4MTkyX3BoeV9zZXRUeFBvd2VyKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIHU4IGNoYW5uZWwpOworI2RlZmluZSBiTWFza0J5dGUwIDB4ZmYKKyNkZWZpbmUgYk1hc2tCeXRlMSAweGZmMDAKKyNkZWZpbmUgYk1hc2tCeXRlMiAweGZmMDAwMAorI2RlZmluZSBiTWFza0J5dGUzIDB4ZmYwMDAwMDAKKyNkZWZpbmUgYk1hc2tIV29yZCAweGZmZmYwMDAwCisjZGVmaW5lIGJNYXNrTFdvcmQgMHgwMDAwZmZmZgorI2RlZmluZSBiTWFza0RXb3JkIDB4ZmZmZmZmZmYKKworLypleHRlcm4gdTMyIHJ0bDgxOTJfQ2FsY3VsYXRlQml0U2hpZnQodTMyIGR3Qml0TWFzayk7CisKK2V4dGVybiB1MzIgcnRsODE5Ml9waHlfUkZTZXJpYWxSZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQlSRjkwX1JBRElPX1BBVEhfRSBlUkZQYXRoLCB1MzIgT2Zmc2V0KTsKKworZXh0ZXJuIHZvaWQgcnRsODE5Ml9waHlfUkZTZXJpYWxXcml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQlSRjkwX1JBRElPX1BBVEhfRSBlUkZQYXRoLCB1MzIgT2Zmc2V0LCB1MzIgRGF0YSk7CisKK2V4dGVybiB2b2lkIHJ0bDgxOTJfSW5pdEJCUkZSZWdEZWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKK2V4dGVybiBSVF9TVEFUVVMgcnRsODE5Ml9CQl9Db25maWdfUGFyYUZpbGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7ICovCisKK2V4dGVybiB1OCBydGw4MTkyX3BoeV9DaGVja0lzTGVnYWxSRlBhdGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGVSRlBhdGgpOworCitleHRlcm4gdm9pZCBydGw4MTkyX3NldEJCcmVnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkd1JlZ0FkZHIsCisJCQkgICAgIHUzMiBkd0JpdE1hc2ssIHUzMiBkd0RhdGEpOworCitleHRlcm4gdTMyIHJ0bDgxOTJfUXVlcnlCQlJlZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZHdSZWdBZGRyLAorCQkJICAgICB1MzIgZHdCaXRNYXNrKTsKKworZXh0ZXJuIHZvaWQgcnRsODE5Ml9waHlfU2V0UkZSZWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJUkY5MF9SQURJT19QQVRIX0UgZVJGUGF0aCwgdTMyIFJlZ0FkZHIsCisJCXUzMiBCaXRNYXNrLCB1MzIgRGF0YSk7CisKK2V4dGVybiB1MzIgcnRsODE5Ml9waHlfUXVlcnlSRlJlZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQlSRjkwX1JBRElPX1BBVEhfRSBlUkZQYXRoLCB1MzIgUmVnQWRkciwgdTMyIEJpdE1hc2spOworCitleHRlcm4gdm9pZCBydGw4MTkyX3BoeV9jb25maWdtYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKK2V4dGVybiB2b2lkIHJ0bDgxOTJfcGh5Q29uZmlnQkIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggQ29uZmlnVHlwZSk7CisKK2V4dGVybiBSVF9TVEFUVVMgcnRsODE5Ml9waHlfY2hlY2tCQkFuZFJGKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCUhXOTBfQkxPQ0tfRSBDaGVja0Jsb2NrLCBSRjkwX1JBRElPX1BBVEhfRSBlUkZQYXRoKTsKKworZXh0ZXJuIFJUX1NUQVRVUyBydGw4MTkyX0JCQ29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCitleHRlcm4gdm9pZCBydGw4MTkyX3BoeV9nZXRUeFBvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCitleHRlcm4gdm9pZCBydGw4MTkyX3BoeV9zZXRUeFBvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGNoYW5uZWwpOworCiBleHRlcm4gUlRfU1RBVFVTIHJ0bDgxOTJfcGh5X1JGQ29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotZXh0ZXJuIHZvaWQgcnRsODE5Ml9waHlfdXBkYXRlSW5pdEdhaW4oc3RydWN0IG5ldF9kZXZpY2UqIGRldik7Ci1leHRlcm4gdTggcnRsODE5Ml9waHlfQ29uZmlnUkZXaXRoSGVhZGVyRmlsZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCBSRjkwX1JBRElPX1BBVEhfRQllUkZQYXRoKTsKIAotZXh0ZXJuIHU4IHJ0bDgxOTJfcGh5X1N3Q2hubChzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCB1OCBjaGFubmVsKTsKLWV4dGVybiB2b2lkIHJ0bDgxOTJfU2V0QldNb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIEhUX0NIQU5ORUxfV0lEVEgJQmFuZHdpZHRoLCBIVF9FWFRDSE5MX09GRlNFVCBPZmZzZXQpOworZXh0ZXJuIHZvaWQgcnRsODE5Ml9waHlfdXBkYXRlSW5pdEdhaW4oc3RydWN0IG5ldF9kZXZpY2UqIGRldik7CisKK2V4dGVybiB1OCBydGw4MTkyX3BoeV9Db25maWdSRldpdGhIZWFkZXJGaWxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCVJGOTBfUkFESU9fUEFUSF9FIGVSRlBhdGgpOworCitleHRlcm4gdTggcnRsODE5Ml9waHlfU3dDaG5sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGNoYW5uZWwpOworCitleHRlcm4gdm9pZCBydGw4MTkyX1NldEJXTW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQlIVF9DSEFOTkVMX1dJRFRIIEJhbmR3aWR0aCwgSFRfRVhUQ0hOTF9PRkZTRVQgT2Zmc2V0KTsKKwogZXh0ZXJuIHZvaWQgcnRsODE5Ml9Td0NobmxfV29ya0l0ZW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKIGV4dGVybiB2b2lkIHJ0bDgxOTJfU2V0QldNb2RlV29ya0l0ZW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKIGV4dGVybiB2b2lkIEluaXRpYWxHYWluODE5eFBjaShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBPcGVyYXRpb24pOwogCi0jZW5kaWYKKyNlbmRpZiAvKiBfUjgxOVhVX1BIWV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOXhFX3BoeXJlZy5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTl4RV9waHlyZWcuaAppbmRleCAzN2YwZmVlLi5kNWRlMjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOXhFX3BoeXJlZy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5eEVfcGh5cmVnLmgKQEAgLTM4LDYgKzM4LDggQEAKICNkZWZpbmUJTUNTX1RYQUdDCQkJCTB4MzQwCS8vIE1DUyBBR0MKICNkZWZpbmUJQ0NLX1RYQUdDCQkJCTB4MzQ4CS8vIENDSyBBR0MKIAorI2RlZmluZQlNYWNCbGtDdHJsCQkJCTB4NDAzCQkJCQkvLyBNYWMgYmxvY2sgb24vb2ZmIGNvbnRyb2wgcmVnaXN0ZXIKKwogLy9wYWdlOAogI2RlZmluZSByRlBHQTBfUkZNT0QgICAgICAgICAgICAgIAkJMHg4MDAgIC8vUkYgbW9kZSAmIENDSyBUeFNDCiAjZGVmaW5lIHJGUEdBMF9UeEluZm8gICAgICAgICAgICAgCQkweDgwNApAQCAtNzksNTUgKzgxLDcwIEBACiAjZGVmaW5lIHJGUEdBMF9YQl9MU1NJUmVhZEJhY2sgICAgCTB4OGE0CiAjZGVmaW5lIHJGUEdBMF9YQ19MU1NJUmVhZEJhY2sgICAgCTB4OGE4CiAjZGVmaW5lIHJGUEdBMF9YRF9MU1NJUmVhZEJhY2sgICAgCTB4OGFjCi0jZGVmaW5lIHJGUEdBMF9QU0RSZXBvcnQgICAgICAgICAgCQkweDhiNAorI2RlZmluZSByRlBHQTBfUFNEUmVwb3J0CQkweDhiNAogI2RlZmluZSByRlBHQTBfWEFCX1JGSW50ZXJmYWNlUkIgIAkweDhlMAogI2RlZmluZSByRlBHQTBfWENEX1JGSW50ZXJmYWNlUkIgIAkweDhlNAogCi0vL3BhZ2UgOQotI2RlZmluZSByRlBHQTFfUkZNT0QgICAgICAgICAgICAgIAkJMHg5MDAgIC8vUkYgbW9kZSAmIE9GRE0gVHhTQwotI2RlZmluZSByRlBHQTFfVHhCbG9jayAgICAgICAgICAgIAkJMHg5MDQKLSNkZWZpbmUgckZQR0ExX0RlYnVnU2VsZWN0ICAgICAgICAJCTB4OTA4Ci0jZGVmaW5lIHJGUEdBMV9UeEluZm8gICAgICAgICAgICAgCQkweDkwYworLyogUGFnZSA5IC0gUkYgbW9kZSAmIE9GRE0gVHhTQyAqLworI2RlZmluZSByRlBHQTFfUkZNT0QgICAgICAJCTB4OTAwCisjZGVmaW5lIHJGUEdBMV9UeEJsb2NrICAgICAgICAgICAgCTB4OTA0CisjZGVmaW5lIHJGUEdBMV9EZWJ1Z1NlbGVjdCAgICAgICAgCTB4OTA4CisjZGVmaW5lIHJGUEdBMV9UeEluZm8gICAgICAgICAgICAgCTB4OTBjCiAKLS8vcGFnZSBhCi0jZGVmaW5lIHJDQ0swX1N5c3RlbSAgICAgICAgICAgICAgCQkweGEwMAotI2RlZmluZSByQ0NLMF9BRkVTZXR0aW5nICAgICAgICAgIAkJMHhhMDQKLSNkZWZpbmUgckNDSzBfQ0NBICAgICAgICAgICAgICAgICAJCQkweGEwOAotI2RlZmluZSByQ0NLMF9SeEFHQzEgICAgICAgICAgICAgIAkJMHhhMGMgIC8vQUdDIGRlZmF1bHQgdmFsdWUsIHNhdHVyYXRpb24gbGV2ZWwKLSNkZWZpbmUgckNDSzBfUnhBR0MyICAgICAgICAgICAgICAJCTB4YTEwICAvL0FHQyAmIERBR0MKLSNkZWZpbmUgckNDSzBfUnhIUCAgICAgICAgICAgICAgICAJCTB4YTE0Ci0jZGVmaW5lIHJDQ0swX0RTUFBhcmFtZXRlcjEgICAgICAgCTB4YTE4ICAvL1RpbWluZyByZWNvdmVyeSAmIENoYW5uZWwgZXN0aW1hdGlvbiB0aHJlc2hvbGQKLSNkZWZpbmUgckNDSzBfRFNQUGFyYW1ldGVyMiAgICAgICAJMHhhMWMgIC8vU1EgdGhyZXNob2xkCi0jZGVmaW5lIHJDQ0swX1R4RmlsdGVyMSAgICAgICAgICAgCQkweGEyMAotI2RlZmluZSByQ0NLMF9UeEZpbHRlcjIgICAgICAgICAgIAkJMHhhMjQKLSNkZWZpbmUgckNDSzBfRGVidWdQb3J0ICAgICAgICAgICAJCTB4YTI4ICAvL2RlYnVnIHBvcnQgYW5kIFR4IGZpbHRlcjMKLSNkZWZpbmUgckNDSzBfRmFsc2VBbGFybVJlcG9ydCAgICAJMHhhMmMgIC8vMHhhMmQKLSNkZWZpbmUgckNDSzBfVFJTU0lSZXBvcnQgICAgICAgICAJCTB4YTUwCi0jZGVmaW5lIHJDQ0swX1J4UmVwb3J0ICAgICAgICAgICAgCQkweGE1NCAgLy8weGE1NwotI2RlZmluZSByQ0NLMF9GQUNvdW50ZXJMb3dlciAgICAgIAkweGE1YyAgLy8weGE1YgotI2RlZmluZSByQ0NLMF9GQUNvdW50ZXJVcHBlciAgICAgIAkweGE1OCAgLy8weGE1YworLyogUGFnZSBhICovCisjZGVmaW5lIHJDQ0swX1N5c3RlbSAgICAgICAgICAgICAgCTB4YTAwCisjZGVmaW5lIHJDQ0swX0FGRVNldHRpbmcgICAgICAgICAgCTB4YTA0CisjZGVmaW5lIHJDQ0swX0NDQSAgICAgICAgICAgICAgICAgCTB4YTA4CisvKiBBR0MgZGVmYXVsdCB2YWx1ZSwgc2F0dXJhdGlvbiBsZXZlbCAqLworI2RlZmluZSByQ0NLMF9SeEFHQzEgICAgICAgICAgICAgIAkweGEwYworLyogQUdDICYgREFHQyAqLworI2RlZmluZSByQ0NLMF9SeEFHQzIgICAgICAgICAgICAgIAkweGExMAorI2RlZmluZSByQ0NLMF9SeEhQICAgICAgICAgICAgICAgIAkweGExNAorLyogVGltaW5nIHJlY292ZXJ5ICYgY2hhbm5lbCBlc3RpbWF0aW9uIHRocmVzaG9sZCAqLworI2RlZmluZSByQ0NLMF9EU1BQYXJhbWV0ZXIxICAgICAgIAkweGExOAorLyogU1EgdGhyZXNob2xkICovCisjZGVmaW5lIHJDQ0swX0RTUFBhcmFtZXRlcjIgICAgICAgCTB4YTFjCisjZGVmaW5lIHJDQ0swX1R4RmlsdGVyMSAgICAgICAgICAgCTB4YTIwCisjZGVmaW5lIHJDQ0swX1R4RmlsdGVyMiAgICAgICAgICAgCTB4YTI0CisvKiBEZWJ1ZyBwb3J0IGFuZCBUWCBmaWx0ZXIgMyAqLworI2RlZmluZSByQ0NLMF9EZWJ1Z1BvcnQgICAgICAgICAgIAkweGEyOAorI2RlZmluZSByQ0NLMF9GYWxzZUFsYXJtUmVwb3J0ICAgIAkweGEyYworI2RlZmluZSByQ0NLMF9UUlNTSVJlcG9ydCAgICAgICAgIAkweGE1MAorI2RlZmluZSByQ0NLMF9SeFJlcG9ydCAgICAgICAgICAgIAkweGE1NAorI2RlZmluZSByQ0NLMF9GQUNvdW50ZXJMb3dlciAgICAgIAkweGE1YworI2RlZmluZSByQ0NLMF9GQUNvdW50ZXJVcHBlciAgICAgIAkweGE1OAogCi0vL3BhZ2UgYwotI2RlZmluZSByT0ZETTBfTFNURiAgICAgICAgICAgICAgIAkJMHhjMDAKKy8qIFBhZ2UgYyAqLworI2RlZmluZSByT0ZETTBfTFNURiAgICAgICAgICAgICAgCTB4YzAwCiAjZGVmaW5lIHJPRkRNMF9UUnhQYXRoRW5hYmxlICAgICAgCTB4YzA0Ci0jZGVmaW5lIHJPRkRNMF9UUk11eFBhciAgICAgICAgICAgCQkweGMwOAotI2RlZmluZSByT0ZETTBfVFJTV0lzb2xhdGlvbiAgICAgIAkJMHhjMGMKLSNkZWZpbmUgck9GRE0wX1hBUnhBRkUgICAgICAgICAgICAJCTB4YzEwICAvL1J4SVEgREMgb2Zmc2V0LCBSeCBkaWdpdGFsIGZpbHRlciwgREMgbm90Y2ggZmlsdGVyCi0jZGVmaW5lIHJPRkRNMF9YQVJ4SVFJbWJhbGFuY2UgICAgCTB4YzE0ICAvL1J4SVEgaW1ibGFuY2UgbWF0cml4Ci0jZGVmaW5lIHJPRkRNMF9YQlJ4QUZFICAgICAgICAgICAgCQkweGMxOAorI2RlZmluZSByT0ZETTBfVFJNdXhQYXIgICAgICAgICAgIAkweGMwOAorI2RlZmluZSByT0ZETTBfVFJTV0lzb2xhdGlvbiAgICAgIAkweGMwYworLyogUnhJUSBEQyBvZmZzZXQsIFJ4IGRpZ2l0YWwgZmlsdGVyLCBEQyBub3RjaCBmaWx0ZXIgKi8KKyNkZWZpbmUgck9GRE0wX1hBUnhBRkUgICAgICAgICAgICAJMHhjMTAKKy8qIFJ4SVEgaW1ibGFuY2UgbWF0cml4ICovCisjZGVmaW5lIHJPRkRNMF9YQVJ4SVFJbWJhbGFuY2UgICAgCTB4YzE0CisjZGVmaW5lIHJPRkRNMF9YQlJ4QUZFICAgICAgICAgICAgCTB4YzE4CiAjZGVmaW5lIHJPRkRNMF9YQlJ4SVFJbWJhbGFuY2UgICAgCTB4YzFjCi0jZGVmaW5lIHJPRkRNMF9YQ1J4QUZFICAgICAgICAgICAgCQkweGMyMAorI2RlZmluZSByT0ZETTBfWENSeEFGRSAgICAgICAgICAgCTB4YzIwCiAjZGVmaW5lIHJPRkRNMF9YQ1J4SVFJbWJhbGFuY2UgICAgCTB4YzI0Ci0jZGVmaW5lIHJPRkRNMF9YRFJ4QUZFICAgICAgICAgICAgCQkweGMyOAorI2RlZmluZSByT0ZETTBfWERSeEFGRSAgICAgICAgICAgIAkweGMyOAogI2RlZmluZSByT0ZETTBfWERSeElRSW1iYWxhbmNlICAgIAkweGMyYwotI2RlZmluZSByT0ZETTBfUnhEZXRlY3RvcjEgICAgICAgIAkJMHhjMzAgIC8vUEQsQlcgJiBTQkQKLSNkZWZpbmUgck9GRE0wX1J4RGV0ZWN0b3IyICAgICAgICAJCTB4YzM0ICAvL1NCRCAmIEZhbWUgU3luYy4KLSNkZWZpbmUgck9GRE0wX1J4RGV0ZWN0b3IzICAgICAgICAJCTB4YzM4ICAvL0ZyYW1lIFN5bmMuCi0jZGVmaW5lIHJPRkRNMF9SeERldGVjdG9yNCAgICAgICAgCQkweGMzYyAgLy9QRCwgU0JELCBGcmFtZSBTeW5jICYgU2hvcnQtR0kKLSNkZWZpbmUgck9GRE0wX1J4RFNQICAgICAgICAgICAgICAJCTB4YzQwICAvL1J4IFN5bmMgUGF0aAotI2RlZmluZSByT0ZETTBfQ0ZPYW5kREFHQyAgICAgICAgIAkweGM0NCAgLy9DRk8gJiBEQUdDCi0jZGVmaW5lIHJPRkRNMF9DQ0FEcm9wVGhyZXNob2xkICAgCTB4YzQ4IC8vQ0NBIERyb3AgdGhyZXNob2xkCi0jZGVmaW5lIHJPRkRNMF9FQ0NBVGhyZXNob2xkICAgICAgCTB4YzRjIC8vIGVuZXJneSBDQ0EKKy8qIFBELCBCVyAmIFNCRCAqLworI2RlZmluZSByT0ZETTBfUnhEZXRlY3RvcjEgICAgICAgIAkweGMzMAorLyogU0JEICovCisjZGVmaW5lIHJPRkRNMF9SeERldGVjdG9yMgkJMHhjMzQKKy8qIEZyYW1lIFN5bmMgKi8KKyNkZWZpbmUgck9GRE0wX1J4RGV0ZWN0b3IzICAgICAgICAgCTB4YzM4CisvKiBQRCwgU0JELCBGcmFtZSBTeW5jICYgU2hvcnQtR0kgKi8KKyNkZWZpbmUgck9GRE0wX1J4RGV0ZWN0b3I0ICAgICAgICAJMHhjM2MKKy8qIFJ4IFN5bmMgUGF0aCAqLworI2RlZmluZSByT0ZETTBfUnhEU1AJCQkweGM0MAorLyogQ0ZPICYgREFHQyAqLworI2RlZmluZSByT0ZETTBfQ0ZPYW5kREFHQyAgICAgICAgIAkweGM0NAorLyogQ0NBIERyb3AgdGhyZXNob2xkICovCisjZGVmaW5lIHJPRkRNMF9DQ0FEcm9wVGhyZXNob2xkICAgCTB4YzQ4CisvKiBFbmVyZ3kgQ0NBICovCisjZGVmaW5lIHJPRkRNMF9FQ0NBVGhyZXNob2xkICAgICAgCTB4YzRjCiAjZGVmaW5lIHJPRkRNMF9YQUFHQ0NvcmUxICAgICAgICAgCTB4YzUwCiAjZGVmaW5lIHJPRkRNMF9YQUFHQ0NvcmUyICAgICAgICAgCTB4YzU0CiAjZGVmaW5lIHJPRkRNMF9YQkFHQ0NvcmUxICAgICAgICAgCTB4YzU4CkBAIC0xMzksNTAxICsxNTYsNTE3IEBACiAjZGVmaW5lIHJPRkRNMF9BR0NQYXJhbWV0ZXIxICAgICAgCTB4YzcwCiAjZGVmaW5lIHJPRkRNMF9BR0NQYXJhbWV0ZXIyICAgICAgCTB4Yzc0CiAjZGVmaW5lIHJPRkRNMF9BR0NSU1NJVGFibGUgICAgICAgCTB4Yzc4Ci0jZGVmaW5lIHJPRkRNMF9IVFNURkFHQyAgICAgICAgICAgCQkweGM3YworI2RlZmluZSByT0ZETTBfSFRTVEZBR0MgICAgICAgICAgIAkweGM3YwogI2RlZmluZSByT0ZETTBfWEFUeElRSW1iYWxhbmNlICAgCTB4YzgwCi0jZGVmaW5lIHJPRkRNMF9YQVR4QUZFICAgICAgICAgICAgCQkweGM4NAorI2RlZmluZSByT0ZETTBfWEFUeEFGRSAgICAgICAgICAgIAkweGM4NAogI2RlZmluZSByT0ZETTBfWEJUeElRSW1iYWxhbmNlICAgIAkweGM4OAotI2RlZmluZSByT0ZETTBfWEJUeEFGRSAgICAgICAgICAgIAkJMHhjOGMKKyNkZWZpbmUgck9GRE0wX1hCVHhBRkUgICAgICAgICAgICAJMHhjOGMKICNkZWZpbmUgck9GRE0wX1hDVHhJUUltYmFsYW5jZSAgICAJMHhjOTAKLSNkZWZpbmUgck9GRE0wX1hDVHhBRkUgICAgICAgICAgICAJCTB4Yzk0CisjZGVmaW5lIHJPRkRNMF9YQ1R4QUZFICAgICAgICAgICAgCTB4Yzk0CiAjZGVmaW5lIHJPRkRNMF9YRFR4SVFJbWJhbGFuY2UgICAgCTB4Yzk4Ci0jZGVmaW5lIHJPRkRNMF9YRFR4QUZFICAgICAgICAgICAgCQkweGM5YworI2RlZmluZSByT0ZETTBfWERUeEFGRSAgICAgICAgICAgIAkweGM5YwogI2RlZmluZSByT0ZETTBfUnhIUFBhcmFtZXRlciAgICAgIAkweGNlMAogI2RlZmluZSByT0ZETTBfVHhQc2V1ZG9Ob2lzZVdndCAgIAkweGNlNAotI2RlZmluZSByT0ZETTBfRnJhbWVTeW5jICAgICAgICAgIAkJMHhjZjAKLSNkZWZpbmUgck9GRE0wX0RGU1JlcG9ydCAgICAgICAgICAJCTB4Y2Y0Ci0jZGVmaW5lIHJPRkRNMF9UeENvZWZmMSAgICAgICAgICAgCQkweGNhNAotI2RlZmluZSByT0ZETTBfVHhDb2VmZjIgICAgICAgICAgIAkJMHhjYTgKLSNkZWZpbmUgck9GRE0wX1R4Q29lZmYzICAgICAgICAgICAJCTB4Y2FjCi0jZGVmaW5lIHJPRkRNMF9UeENvZWZmNCAgICAgICAgICAgCQkweGNiMAotI2RlZmluZSByT0ZETTBfVHhDb2VmZjUgICAgICAgICAgIAkJMHhjYjQKLSNkZWZpbmUgck9GRE0wX1R4Q29lZmY2ICAgICAgICAgICAJCTB4Y2I4CisjZGVmaW5lIHJPRkRNMF9GcmFtZVN5bmMgICAgICAgICAgCTB4Y2YwCisjZGVmaW5lIHJPRkRNMF9ERlNSZXBvcnQgICAgICAgICAgCTB4Y2Y0CisjZGVmaW5lIHJPRkRNMF9UeENvZWZmMSAgICAgICAgICAgCTB4Y2E0CisjZGVmaW5lIHJPRkRNMF9UeENvZWZmMiAgICAgICAgICAgCTB4Y2E4CisjZGVmaW5lIHJPRkRNMF9UeENvZWZmMyAgICAgICAgICAgCTB4Y2FjCisjZGVmaW5lIHJPRkRNMF9UeENvZWZmNCAgICAgICAgICAgCTB4Y2IwCisjZGVmaW5lIHJPRkRNMF9UeENvZWZmNSAgICAgICAgICAgCTB4Y2I0CisjZGVmaW5lIHJPRkRNMF9UeENvZWZmNiAgICAgICAgICAgCTB4Y2I4CiAKIAotLy9wYWdlIGQKLSNkZWZpbmUgck9GRE0xX0xTVEYgICAgICAgICAgICAgICAJCTB4ZDAwCisvKiBQYWdlIGQgKi8KKyNkZWZpbmUgck9GRE0xX0xTVEYgICAgICAgICAgICAgICAJMHhkMDAKICNkZWZpbmUgck9GRE0xX1RSeFBhdGhFbmFibGUgICAgICAJMHhkMDQKLSNkZWZpbmUgck9GRE0xX0NGTyAgICAgICAgICAgICAgICAJCTB4ZDA4Ci0jZGVmaW5lIHJPRkRNMV9DU0kxICAgICAgICAgICAgICAgCQkweGQxMAotI2RlZmluZSByT0ZETTFfU0JEICAgICAgICAgICAgICAgIAkJMHhkMTQKLSNkZWZpbmUgck9GRE0xX0NTSTIgICAgICAgICAgICAgICAJCTB4ZDE4Ci0jZGVmaW5lIHJPRkRNMV9DRk9UcmFja2luZyAgICAgICAgCQkweGQyYworI2RlZmluZSByT0ZETTFfQ0ZPICAgICAgICAgICAgICAgIAkweGQwOAorI2RlZmluZSByT0ZETTFfQ1NJMSAgICAgICAgICAgICAgIAkweGQxMAorI2RlZmluZSByT0ZETTFfU0JEICAgICAgICAgICAgICAgIAkweGQxNAorI2RlZmluZSByT0ZETTFfQ1NJMiAgICAgICAgICAgICAgIAkweGQxOAorI2RlZmluZSByT0ZETTFfQ0ZPVHJhY2tpbmcgICAgICAgIAkweGQyYwogI2RlZmluZSByT0ZETTFfVFJ4TWVzYXVyZTEgICAgICAgIAkweGQzNAotI2RlZmluZSByT0ZETTFfSW50ZkRldCAgICAgICAgICAgIAkJMHhkM2MKLSNkZWZpbmUgck9GRE0xX1BzZXVkb05vaXNlU3RhdGVBQiAweGQ1MAotI2RlZmluZSByT0ZETTFfUHNldWRvTm9pc2VTdGF0ZUNEIDB4ZDU0Ci0jZGVmaW5lIHJPRkRNMV9SeFBzZXVkb05vaXNlV2d0ICAgMHhkNTgKLSNkZWZpbmUgck9GRE1fUEhZQ291bnRlcjEgICAgICAgICAJCTB4ZGEwICAvL2NjYSwgcGFyaXR5IGZhaWwKLSNkZWZpbmUgck9GRE1fUEhZQ291bnRlcjIgICAgICAgICAJCTB4ZGE0ICAvL3JhdGUgaWxsZWdhbCwgY3JjOCBmYWlsCi0jZGVmaW5lIHJPRkRNX1BIWUNvdW50ZXIzICAgICAgICAgCQkweGRhOCAgLy9NQ1Mgbm90IHN1cHBvcnQKLSNkZWZpbmUgck9GRE1fU2hvcnRDRk9BQiAgICAgICAgICAJCTB4ZGFjCi0jZGVmaW5lIHJPRkRNX1Nob3J0Q0ZPQ0QgICAgICAgICAgCQkweGRiMAotI2RlZmluZSByT0ZETV9Mb25nQ0ZPQUIgICAgICAgICAgIAkJMHhkYjQKLSNkZWZpbmUgck9GRE1fTG9uZ0NGT0NEICAgICAgICAgICAJCTB4ZGI4Ci0jZGVmaW5lIHJPRkRNX1RhaWxDRk9BQiAgICAgICAgICAgCQkweGRiYwotI2RlZmluZSByT0ZETV9UYWlsQ0ZPQ0QgICAgICAgICAgIAkJMHhkYzAKKyNkZWZpbmUgck9GRE0xX0ludGZEZXQgICAgICAgICAgICAJMHhkM2MKKyNkZWZpbmUgck9GRE0xX1BzZXVkb05vaXNlU3RhdGVBQiAJMHhkNTAKKyNkZWZpbmUgck9GRE0xX1BzZXVkb05vaXNlU3RhdGVDRCAJMHhkNTQKKyNkZWZpbmUgck9GRE0xX1J4UHNldWRvTm9pc2VXZ3QgICAJMHhkNTgKKy8qIGNjYSwgcGFyaXR5IGZhaWwgKi8KKyNkZWZpbmUgck9GRE1fUEhZQ291bnRlcjEgICAgICAgICAJMHhkYTAKKy8qIHJhdGUgaWxsZWdhbCwgY3JjOCBmYWlsICovCisjZGVmaW5lIHJPRkRNX1BIWUNvdW50ZXIyICAgCQkweGRhNAorLyogTUNTIG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgck9GRE1fUEhZQ291bnRlcjMgICAgICAgICAJMHhkYTgKKyNkZWZpbmUgck9GRE1fU2hvcnRDRk9BQiAgICAgICAgICAJMHhkYWMKKyNkZWZpbmUgck9GRE1fU2hvcnRDRk9DRCAgICAgICAgICAJMHhkYjAKKyNkZWZpbmUgck9GRE1fTG9uZ0NGT0FCICAgICAgICAgICAJMHhkYjQKKyNkZWZpbmUgck9GRE1fTG9uZ0NGT0NEICAgICAgICAgICAJMHhkYjgKKyNkZWZpbmUgck9GRE1fVGFpbENGT0FCICAgICAgICAgICAJMHhkYmMKKyNkZWZpbmUgck9GRE1fVGFpbENGT0NEICAgICAgICAgICAJMHhkYzAKICNkZWZpbmUgck9GRE1fUFdNZWFzdXJlMSAgICAgICAgICAJMHhkYzQKICNkZWZpbmUgck9GRE1fUFdNZWFzdXJlMiAgICAgICAgICAJMHhkYzgKLSNkZWZpbmUgck9GRE1fQldSZXBvcnQgICAgICAgICAgICAJCTB4ZGNjCi0jZGVmaW5lIHJPRkRNX0FHQ1JlcG9ydCAgICAgICAgICAgCQkweGRkMAotI2RlZmluZSByT0ZETV9SeFNOUiAgICAgICAgICAgICAgIAkJMHhkZDQKLSNkZWZpbmUgck9GRE1fUnhFVk1DU0kgICAgICAgICAgICAJCTB4ZGQ4Ci0jZGVmaW5lIHJPRkRNX1NJR1JlcG9ydCAgICAgICAgICAgCQkweGRkYworI2RlZmluZSByT0ZETV9CV1JlcG9ydCAgICAgICAgICAgIAkweGRjYworI2RlZmluZSByT0ZETV9BR0NSZXBvcnQgICAgICAgICAgIAkweGRkMAorI2RlZmluZSByT0ZETV9SeFNOUiAgICAgICAgICAgICAgIAkweGRkNAorI2RlZmluZSByT0ZETV9SeEVWTUNTSSAgICAgICAgICAgIAkweGRkOAorI2RlZmluZSByT0ZETV9TSUdSZXBvcnQgICAgICAgICAgIAkweGRkYwogCi0vL3BhZ2UgZQotI2RlZmluZSByVHhBR0NfUmF0ZTE4XzA2CQkJMHhlMDAKLSNkZWZpbmUgclR4QUdDX1JhdGU1NF8yNAkJCTB4ZTA0Ci0jZGVmaW5lIHJUeEFHQ19DQ0tfTWNzMzIJCQkweGUwOAotI2RlZmluZSByVHhBR0NfTWNzMDNfTWNzMDAJCQkweGUxMAotI2RlZmluZSByVHhBR0NfTWNzMDdfTWNzMDQJCQkweGUxNAotI2RlZmluZSByVHhBR0NfTWNzMTFfTWNzMDgJCQkweGUxOAotI2RlZmluZSByVHhBR0NfTWNzMTVfTWNzMTIJCQkweGUxYworLyogUGFnZSBlICovCisjZGVmaW5lIHJUeEFHQ19SYXRlMThfMDYJCTB4ZTAwCisjZGVmaW5lIHJUeEFHQ19SYXRlNTRfMjQJCTB4ZTA0CisjZGVmaW5lIHJUeEFHQ19DQ0tfTWNzMzIJCTB4ZTA4CisjZGVmaW5lIHJUeEFHQ19NY3MwM19NY3MwMAkJMHhlMTAKKyNkZWZpbmUgclR4QUdDX01jczA3X01jczA0CQkweGUxNAorI2RlZmluZSByVHhBR0NfTWNzMTFfTWNzMDgJCTB4ZTE4CisjZGVmaW5lIHJUeEFHQ19NY3MxNV9NY3MxMgkJMHhlMWMKIAogCi0vL1JGCi0vL1plYnJhMQorLyogUkYgWmVicmEgMSAqLwogI2RlZmluZSByWmVicmExX0hTU0lFbmFibGUgICAgICAgICAgICAJMHgwCiAjZGVmaW5lIHJaZWJyYTFfVFJ4RW5hYmxlMSAgICAgICAgICAgIAkweDEKICNkZWZpbmUgclplYnJhMV9UUnhFbmFibGUyICAgICAgICAgICAJMHgyCi0jZGVmaW5lIHJaZWJyYTFfQUdDICAgICAgICAgICAgICAgICAgIAkJMHg0CisjZGVmaW5lIHJaZWJyYTFfQUdDICAgICAgICAgICAgICAgICAgIAkweDQKICNkZWZpbmUgclplYnJhMV9DaGFyZ2VQdW1wICAgICAgICAgICAgCTB4NQotI2RlZmluZSByWmVicmExX0NoYW5uZWwgICAgICAgICAgICAgICAJCTB4NwotI2RlZmluZSByWmVicmExX1R4R2FpbiAgICAgICAgICAgICAgIAkgCTB4OAotI2RlZmluZSByWmVicmExX1R4TFBGICAgICAgICAgICAgICAgICAJCTB4OQotI2RlZmluZSByWmVicmExX1J4TFBGICAgICAgICAgICAgICAgICAJCTB4YgorI2RlZmluZSByWmVicmExX0NoYW5uZWwgICAgICAgICAgICAgICAJMHg3CisjZGVmaW5lIHJaZWJyYTFfVHhHYWluICAgICAgICAgICAgICAgCTB4OAorI2RlZmluZSByWmVicmExX1R4TFBGICAgICAgICAgICAgICAgICAJMHg5CisjZGVmaW5lIHJaZWJyYTFfUnhMUEYgICAgICAgICAgICAgICAgIAkweGIKICNkZWZpbmUgclplYnJhMV9SeEhQRkNvcm5lciAgICAgICAgICAgCTB4YwogCi0vL1plYnJhNAotI2RlZmluZSByR2xvYmFsQ3RybCAgICAgICAgICAgICAgICAgICAJCTAKLSNkZWZpbmUgclJUTDgyNTZfVHhMUEYgICAgICAgICAgICAgICAgCQkxOQotI2RlZmluZSByUlRMODI1Nl9SeExQRiAgICAgICAgICAgICAgICAJCTExCisvKiBaZWJyYSA0ICovCisjZGVmaW5lIHJHbG9iYWxDdHJsICAgICAgICAgICAgICAgICAgIAkwCisjZGVmaW5lIHJSVEw4MjU2X1R4TFBGICAgICAgICAgICAgICAgIAkxOQorI2RlZmluZSByUlRMODI1Nl9SeExQRiAgICAgICAgICAgICAgICAJMTEKIAotLy9SVEw4MjU4Ci0jZGVmaW5lIHJSVEw4MjU4X1R4TFBGICAgICAgICAgICAgICAgIAkJMHgxMQotI2RlZmluZSByUlRMODI1OF9SeExQRiAgICAgICAgICAgICAgICAJCTB4MTMKKy8qIFJUTDgyNTggKi8KKyNkZWZpbmUgclJUTDgyNThfVHhMUEYgICAgICAgICAgICAgICAgCTB4MTEKKyNkZWZpbmUgclJUTDgyNThfUnhMUEYgICAgICAgICAgICAgICAgICAweDEzCiAjZGVmaW5lIHJSVEw4MjU4X1JTU0lMUEYgICAgICAgICAgICAgIAkweGEKIAotLy9CaXQgTWFzawotLy9wYWdlLTEKLSNkZWZpbmUgYkJCUmVzZXRCICAgICAgICAgICAgICAgICAJCQkweDEwMAotI2RlZmluZSBiR2xvYmFsUmVzZXRCICAgICAgICAgICAgIAkJMHgyMDAKLSNkZWZpbmUgYk9GRE1UeFN0YXJ0ICAgICAgICAgICAgICAJCTB4NAotI2RlZmluZSBiQ0NLVHhTdGFydCAgICAgICAgICAgICAgIAkJCTB4OAotI2RlZmluZSBiQ1JDMzJEZWJ1ZyAgICAgICAgICAgICAgIAkJMHgxMDAKLSNkZWZpbmUgYlBNQUNMb29wYmFjayAgICAgICAgICAgICAJCTB4MTAKLSNkZWZpbmUgYlR4TFNJRyAgICAgICAgICAgICAgICAgICAJCQkweGZmZmZmZgotI2RlZmluZSBiT0ZETVR4UmF0ZSAgICAgICAgICAgICAgIAkJMHhmCi0jZGVmaW5lIGJPRkRNVHhSZXNlcnZlZCAgICAgICAgICAgCQkweDEwCi0jZGVmaW5lIGJPRkRNVHhMZW5ndGggICAgICAgICAgICAgCQkweDFmZmUwCi0jZGVmaW5lIGJPRkRNVHhQYXJpdHkgICAgICAgICAgICAgCQkweDIwMDAwCi0jZGVmaW5lIGJUeEhUU0lHMSAgICAgICAgICAgICAgICAgCQkJMHhmZmZmZmYKLSNkZWZpbmUgYlR4SFRNQ1NSYXRlICAgICAgICAgICAgICAJCTB4N2YKLSNkZWZpbmUgYlR4SFRCVyAgICAgICAgICAgICAgICAgICAJCQkweDgwCi0jZGVmaW5lIGJUeEhUTGVuZ3RoICAgICAgICAgICAgICAgCQkweGZmZmYwMAotI2RlZmluZSBiVHhIVFNJRzIgICAgICAgICAgICAgICAgIAkJCTB4ZmZmZmZmCi0jZGVmaW5lIGJUeEhUU21vb3RoaW5nICAgICAgICAgICAgCQkweDEKLSNkZWZpbmUgYlR4SFRTb3VuZGluZyAgICAgICAgICAgICAJCTB4MgotI2RlZmluZSBiVHhIVFJlc2VydmVkICAgICAgICAgICAgIAkJMHg0Ci0jZGVmaW5lIGJUeEhUQWdncmVhdGlvbiAgICAgICAgICAgCQkweDgKLSNkZWZpbmUgYlR4SFRTVEJDICAgICAgICAgICAgICAgICAJCQkweDMwCi0jZGVmaW5lIGJUeEhUQWR2YW5jZUNvZGluZyAgICAgICAgCQkweDQwCi0jZGVmaW5lIGJUeEhUU2hvcnRHSSAgICAgICAgICAgICAgCQkweDgwCi0jZGVmaW5lIGJUeEhUTnVtYmVySFRfTFRGICAgICAgICAgCQkweDMwMAotI2RlZmluZSBiVHhIVENSQzggICAgICAgICAgICAgICAgIAkJCTB4M2ZjMDAKLSNkZWZpbmUgYkNvdW50ZXJSZXNldCAgICAgICAgICAgICAJCTB4MTAwMDAKLSNkZWZpbmUgYk51bU9mT0ZETVR4ICAgICAgICAgICAgICAJCTB4ZmZmZgotI2RlZmluZSBiTnVtT2ZDQ0tUeCAgICAgICAgICAgICAgIAkJMHhmZmZmMDAwMAotI2RlZmluZSBiVHhJZGxlSW50ZXJ2YWwgICAgICAgICAgIAkJCTB4ZmZmZgotI2RlZmluZSBiT0ZETVNlcnZpY2UgICAgICAgICAgICAgIAkJMHhmZmZmMDAwMAotI2RlZmluZSBiVHhNQUNIZWFkZXIgICAgICAgICAgICAgIAkJMHhmZmZmZmZmZgotI2RlZmluZSBiVHhEYXRhSW5pdCAgICAgICAgICAgICAgIAkJCTB4ZmYKLSNkZWZpbmUgYlR4SFRNb2RlICAgICAgICAgICAgICAgICAJCTB4MTAwCi0jZGVmaW5lIGJUeERhdGFUeXBlICAgICAgICAgICAgICAgCQkweDMwMDAwCi0jZGVmaW5lIGJUeFJhbmRvbVNlZWQgICAgICAgICAgICAgCQkweGZmZmZmZmZmCi0jZGVmaW5lIGJDQ0tUeFByZWFtYmxlICAgICAgICAgICAJCTB4MQotI2RlZmluZSBiQ0NLVHhTRkQgICAgICAgICAgICAgICAgIAkJCTB4ZmZmZjAwMDAKLSNkZWZpbmUgYkNDS1R4U0lHICAgICAgICAgICAgICAgICAJCQkweGZmCi0jZGVmaW5lIGJDQ0tUeFNlcnZpY2UgICAgICAgICAgICAgCQkweGZmMDAKLSNkZWZpbmUgYkNDS0xlbmd0aEV4dCAgICAgICAgICAgICAJCTB4ODAwMAotI2RlZmluZSBiQ0NLVHhMZW5ndGggICAgICAgICAgICAgIAkJMHhmZmZmMDAwMAotI2RlZmluZSBiQ0NLVHhDUkMxNiAgICAgICAgICAgICAgIAkJMHhmZmZmCi0jZGVmaW5lIGJDQ0tUeFN0YXR1cyAgICAgICAgICAgICAgCQkweDEKLSNkZWZpbmUgYk9GRE1UeFN0YXR1cyAgICAgICAgICAgICAJCTB4MgorLyogQml0IE1hc2sgKi8KKy8qIFBhZ2UgMSAqLworI2RlZmluZSBiQkJSZXNldEIgICAgICAgICAgICAgICAgIAkweDEwMAorI2RlZmluZSBiR2xvYmFsUmVzZXRCICAgICAgICAgICAgIAkweDIwMAorI2RlZmluZSBiT0ZETVR4U3RhcnQgICAgICAgICAgICAgIAkweDQKKyNkZWZpbmUgYkNDS1R4U3RhcnQgICAgICAgICAgICAgICAJMHg4CisjZGVmaW5lIGJDUkMzMkRlYnVnICAgICAgICAgICAgICAgCTB4MTAwCisjZGVmaW5lIGJQTUFDTG9vcGJhY2sgICAgICAgICAgICAgCTB4MTAKKyNkZWZpbmUgYlR4TFNJRyAgICAgICAgICAgICAgICAgICAJMHhmZmZmZmYKKyNkZWZpbmUgYk9GRE1UeFJhdGUgICAgICAgICAgICAgICAJMHhmCisjZGVmaW5lIGJPRkRNVHhSZXNlcnZlZCAgICAgICAgICAgCTB4MTAKKyNkZWZpbmUgYk9GRE1UeExlbmd0aCAgICAgICAgICAgICAJMHgxZmZlMAorI2RlZmluZSBiT0ZETVR4UGFyaXR5ICAgICAgICAgICAgIAkweDIwMDAwCisjZGVmaW5lIGJUeEhUU0lHMSAgICAgICAgICAgICAgICAgCTB4ZmZmZmZmCisjZGVmaW5lIGJUeEhUTUNTUmF0ZSAgICAgICAgICAgICAgCTB4N2YKKyNkZWZpbmUgYlR4SFRCVyAgICAgICAgICAgICAgICAgICAJMHg4MAorI2RlZmluZSBiVHhIVExlbmd0aCAgICAgICAgICAgICAgIAkweGZmZmYwMAorI2RlZmluZSBiVHhIVFNJRzIgICAgICAgICAgICAgICAgIAkweGZmZmZmZgorI2RlZmluZSBiVHhIVFNtb290aGluZyAgICAgICAgICAgIAkweDEKKyNkZWZpbmUgYlR4SFRTb3VuZGluZyAgICAgICAgICAgICAJMHgyCisjZGVmaW5lIGJUeEhUUmVzZXJ2ZWQgICAgICAgICAgICAgCTB4NAorI2RlZmluZSBiVHhIVEFnZ3JlYXRpb24gICAgICAgICAgIAkweDgKKyNkZWZpbmUgYlR4SFRTVEJDICAgICAgICAgICAgICAgICAJMHgzMAorI2RlZmluZSBiVHhIVEFkdmFuY2VDb2RpbmcgICAgICAgIAkweDQwCisjZGVmaW5lIGJUeEhUU2hvcnRHSSAgICAgICAgICAgICAgCTB4ODAKKyNkZWZpbmUgYlR4SFROdW1iZXJIVF9MVEYgICAgICAgICAJMHgzMDAKKyNkZWZpbmUgYlR4SFRDUkM4ICAgICAgICAgICAgICAgICAJMHgzZmMwMAorI2RlZmluZSBiQ291bnRlclJlc2V0ICAgICAgICAgICAgIAkweDEwMDAwCisjZGVmaW5lIGJOdW1PZk9GRE1UeCAgICAgICAgICAgICAgCTB4ZmZmZgorI2RlZmluZSBiTnVtT2ZDQ0tUeCAgICAgICAgICAgICAgIAkweGZmZmYwMDAwCisjZGVmaW5lIGJUeElkbGVJbnRlcnZhbCAgICAgICAgICAgCTB4ZmZmZgorI2RlZmluZSBiT0ZETVNlcnZpY2UgICAgICAgICAgICAgIAkweGZmZmYwMDAwCisjZGVmaW5lIGJUeE1BQ0hlYWRlciAgICAgICAgICAgICAgCTB4ZmZmZmZmZmYKKyNkZWZpbmUgYlR4RGF0YUluaXQgICAgICAgICAgICAgICAJMHhmZgorI2RlZmluZSBiVHhIVE1vZGUgICAgICAgICAgICAgICAgIAkweDEwMAorI2RlZmluZSBiVHhEYXRhVHlwZSAgICAgICAgICAgICAgIAkweDMwMDAwCisjZGVmaW5lIGJUeFJhbmRvbVNlZWQgICAgICAgICAgICAgCTB4ZmZmZmZmZmYKKyNkZWZpbmUgYkNDS1R4UHJlYW1ibGUgICAgICAgICAgIAkweDEKKyNkZWZpbmUgYkNDS1R4U0ZEICAgICAgICAgICAgICAgICAJMHhmZmZmMDAwMAorI2RlZmluZSBiQ0NLVHhTSUcgICAgICAgICAgICAgICAgIAkweGZmCisjZGVmaW5lIGJDQ0tUeFNlcnZpY2UgICAgICAgICAgICAgCTB4ZmYwMAorI2RlZmluZSBiQ0NLTGVuZ3RoRXh0ICAgICAgICAgICAgIAkweDgwMDAKKyNkZWZpbmUgYkNDS1R4TGVuZ3RoICAgICAgICAgICAgICAJMHhmZmZmMDAwMAorI2RlZmluZSBiQ0NLVHhDUkMxNiAgICAgICAgICAgICAgIAkweGZmZmYKKyNkZWZpbmUgYkNDS1R4U3RhdHVzICAgICAgICAgICAgICAJMHgxCisjZGVmaW5lIGJPRkRNVHhTdGF0dXMgICAgICAgICAgICAgCTB4MgogCi0vL3BhZ2UtOAotI2RlZmluZSBiUkZNT0QgICAgICAgICAgICAgICAgICAgIAkJCTB4MQotI2RlZmluZSBiSmFwYW5Nb2RlICAgICAgICAgICAgICAgIAkJMHgyCi0jZGVmaW5lIGJDQ0tUeFNDICAgICAgICAgICAgICAgICAgCQkJMHgzMAotI2RlZmluZSBiQ0NLRW4gICAgICAgICAgICAgICAgICAgIAkJCTB4MTAwMDAwMAotI2RlZmluZSBiT0ZETUVuICAgICAgICAgICAgICAgICAgIAkJCTB4MjAwMDAwMAotI2RlZmluZSBiT0ZETVJ4QURDUGhhc2UgICAgICAgICAgIAkJMHgxMDAwMAotI2RlZmluZSBiT0ZETVR4REFDUGhhc2UgICAgICAgICAgIAkJMHg0MDAwMAotI2RlZmluZSBiWEFUeEFHQyAgICAgICAgICAgICAgICAgIAkJCTB4M2YKLSNkZWZpbmUgYlhCVHhBR0MgICAgICAgICAgICAgICAgICAJCQkweGYwMAotI2RlZmluZSBiWENUeEFHQyAgICAgICAgICAgICAgICAgIAkJCTB4ZjAwMAotI2RlZmluZSBiWERUeEFHQyAgICAgICAgICAgICAgICAgIAkJCTB4ZjAwMDAKLSNkZWZpbmUgYlBBU3RhcnQgICAgICAgICAgICAgICAgICAJCQkweGYwMDAwMDAwCi0jZGVmaW5lIGJUUlN0YXJ0ICAgICAgICAgICAgICAgICAgCQkJMHgwMGYwMDAwMAotI2RlZmluZSBiUkZTdGFydCAgICAgICAgICAgICAgICAgIAkJCTB4MDAwMGYwMDAKLSNkZWZpbmUgYkJCU3RhcnQgICAgICAgICAgICAgICAgICAJCQkweDAwMDAwMGYwCi0jZGVmaW5lIGJCQkNDS1N0YXJ0ICAgICAgICAgICAgICAgCQkweDAwMDAwMDBmCi0jZGVmaW5lIGJQQUVuZCAgICAgICAgICAgICAgICAgICAgCQkJMHhmICAgICAgICAgIC8vUmVnMHg4MTQKLSNkZWZpbmUgYlRSRW5kICAgICAgICAgICAgICAgICAgICAJCQkweDBmMDAwMDAwCi0jZGVmaW5lIGJSRkVuZCAgICAgICAgICAgICAgICAgICAgCQkJMHgwMDBmMDAwMAotI2RlZmluZSBiQ0NBTWFzayAgICAgICAgICAgICAgICAgIAkJCTB4MDAwMDAwZjAgICAvL1QyUgotI2RlZmluZSBiUjJSQ0NBTWFzayAgICAgICAgICAgICAgIAkJMHgwMDAwMGYwMAotI2RlZmluZSBiSFNTSV9SMlREZWxheSAgICAgICAgICAgIAkJMHhmODAwMDAwMAotI2RlZmluZSBiSFNTSV9UMlJEZWxheSAgICAgICAgICAgIAkJMHhmODAwMDAKLSNkZWZpbmUgYkNvbnRUeEhTU0kgICAgICAgICAgICAgICAJCTB4NDAwICAgICAvL2NoYW5uZWwgZ2FpbiBhdCBjb250aW51ZSBUeAotI2RlZmluZSBiSUdGcm9tQ0NLICAgICAgICAgICAgICAgIAkJMHgyMDAKLSNkZWZpbmUgYkFHQ0FkZHJlc3MgICAgICAgICAgICAgICAJCTB4M2YKLSNkZWZpbmUgYlJ4SFBUeCAgICAgICAgICAgICAgICAgICAJCQkweDcwMDAKLSNkZWZpbmUgYlJ4SFBUMlIgICAgICAgICAgICAgICAgICAJCQkweDM4MDAwCi0jZGVmaW5lIGJSeEhQQ0NLSW5pICAgICAgICAgICAgICAgCQkweGMwMDAwCi0jZGVmaW5lIGJBR0NUeENvZGUgICAgICAgICAgICAgICAgCQkweGMwMDAwMAotI2RlZmluZSBiQUdDUnhDb2RlICAgICAgICAgICAgICAgIAkJMHgzMDAwMDAKLSNkZWZpbmUgYjNXaXJlRGF0YUxlbmd0aCAgICAgICAgICAJCTB4ODAwCi0jZGVmaW5lIGIzV2lyZUFkZHJlc3NMZW5ndGggICAgICAgCQkweDQwMAotI2RlZmluZSBiM1dpcmVSRlBvd2VyRG93biAgICAgICAgIAkJMHgxCi0vLyNkZWZpbmUgYkhXU0lTZWxlY3QgICAgICAgICAgICAgICAJCTB4OAotI2RlZmluZSBiNUdQQVBFUG9sYXJpdHkgICAgICAgICAgIAkJMHg0MDAwMDAwMAotI2RlZmluZSBiMkdQQVBFUG9sYXJpdHkgICAgICAgICAgIAkJMHg4MDAwMDAwMAotI2RlZmluZSBiUkZTV19UeERlZmF1bHRBbnQgICAgICAgIAkJMHgzCi0jZGVmaW5lIGJSRlNXX1R4T3B0aW9uQW50ICAgICAgICAgCQkweDMwCi0jZGVmaW5lIGJSRlNXX1J4RGVmYXVsdEFudCAgICAgICAgCQkweDMwMAotI2RlZmluZSBiUkZTV19SeE9wdGlvbkFudCAgICAgICAgIAkJMHgzMDAwCi0jZGVmaW5lIGJSRlNJXzNXaXJlRGF0YSAgICAgICAgICAgCQkweDEKLSNkZWZpbmUgYlJGU0lfM1dpcmVDbG9jayAgICAgICAgICAJCTB4MgotI2RlZmluZSBiUkZTSV8zV2lyZUxvYWQgICAgICAgICAgIAkJMHg0Ci0jZGVmaW5lIGJSRlNJXzNXaXJlUlcgICAgICAgICAgICAgCQkweDgKLSNkZWZpbmUgYlJGU0lfM1dpcmUgICAgICAgICAgICAgICAJCQkweGYgIC8vMy13aXJlIHRvdGFsIGNvbnRyb2wKLSNkZWZpbmUgYlJGU0lfUkZFTlYgICAgICAgICAgICAgICAJCTB4MTAKLSNkZWZpbmUgYlJGU0lfVFJTVyAgICAgICAgICAgICAgICAJCTB4MjAKLSNkZWZpbmUgYlJGU0lfVFJTV0IgICAgICAgICAgICAgICAJCTB4NDAKLSNkZWZpbmUgYlJGU0lfQU5UU1cgICAgICAgICAgICAgICAJCTB4MTAwCi0jZGVmaW5lIGJSRlNJX0FOVFNXQiAgICAgICAgICAgICAgCQkweDIwMAotI2RlZmluZSBiUkZTSV9QQVBFICAgICAgICAgICAgICAgIAkJCTB4NDAwCi0jZGVmaW5lIGJSRlNJX1BBUEU1RyAgICAgICAgICAgICAgCQkweDgwMAotI2RlZmluZSBiQmFuZFNlbGVjdCAgICAgICAgICAgICAgIAkJCTB4MQotI2RlZmluZSBiSFRTSUcyX0dJICAgICAgICAgICAgICAgIAkJCTB4ODAKLSNkZWZpbmUgYkhUU0lHMl9TbW9vdGhpbmcgICAgICAgICAJCTB4MDEKLSNkZWZpbmUgYkhUU0lHMl9Tb3VuZGluZyAgICAgICAgICAJCTB4MDIKLSNkZWZpbmUgYkhUU0lHMl9BZ2dyZWF0b24gICAgICAgICAJCTB4MDgKLSNkZWZpbmUgYkhUU0lHMl9TVEJDICAgICAgICAgICAgICAJCTB4MzAKLSNkZWZpbmUgYkhUU0lHMl9BZHZDb2RpbmcgICAgICAgICAJCTB4NDAKKy8qIFBhZ2UgOCAqLworI2RlZmluZSBiUkZNT0QgICAgICAgICAgICAgICAgICAgIAkweDEKKyNkZWZpbmUgYkphcGFuTW9kZSAgICAgICAgICAgICAgICAJMHgyCisjZGVmaW5lIGJDQ0tUeFNDICAgICAgICAgICAgICAgICAgCTB4MzAKKyNkZWZpbmUgYkNDS0VuICAgICAgICAgICAgICAgICAgICAJMHgxMDAwMDAwCisjZGVmaW5lIGJPRkRNRW4gICAgICAgICAgICAgICAgICAgCTB4MjAwMDAwMAorI2RlZmluZSBiT0ZETVJ4QURDUGhhc2UgICAgICAgICAgIAkweDEwMDAwCisjZGVmaW5lIGJPRkRNVHhEQUNQaGFzZSAgICAgICAgICAgCTB4NDAwMDAKKyNkZWZpbmUgYlhBVHhBR0MgICAgICAgICAgICAgICAgICAJMHgzZgorI2RlZmluZSBiWEJUeEFHQyAgICAgICAgICAgICAgICAgIAkweGYwMAorI2RlZmluZSBiWENUeEFHQyAgICAgICAgICAgICAgICAgIAkweGYwMDAKKyNkZWZpbmUgYlhEVHhBR0MgICAgICAgICAgICAgICAgICAJMHhmMDAwMAorI2RlZmluZSBiUEFTdGFydCAgICAgICAgICAgICAgICAgIAkweGYwMDAwMDAwCisjZGVmaW5lIGJUUlN0YXJ0ICAgICAgICAgICAgICAgICAgCTB4MDBmMDAwMDAKKyNkZWZpbmUgYlJGU3RhcnQgICAgICAgICAgICAgICAgICAJMHgwMDAwZjAwMAorI2RlZmluZSBiQkJTdGFydCAgICAgICAgICAgICAgICAgIAkweDAwMDAwMGYwCisjZGVmaW5lIGJCQkNDS1N0YXJ0ICAgICAgICAgICAgICAgCTB4MDAwMDAwMGYKKy8qIFJlZyl4ODE0ICovCisjZGVmaW5lIGJQQUVuZCAgICAgICAgICAgICAgICAgICAgCTB4ZgorI2RlZmluZSBiVFJFbmQgICAgICAgICAgICAgICAgICAgIAkweDBmMDAwMDAwCisjZGVmaW5lIGJSRkVuZCAgICAgICAgICAgICAgICAgICAgCTB4MDAwZjAwMDAKKy8qIFQyUiAqLworI2RlZmluZSBiQ0NBTWFzayAgICAgICAgICAgICAgICAgIAkweDAwMDAwMGYwCisjZGVmaW5lIGJSMlJDQ0FNYXNrICAgICAgICAgICAgICAgCTB4MDAwMDBmMDAKKyNkZWZpbmUgYkhTU0lfUjJURGVsYXkgICAgICAgICAgICAJMHhmODAwMDAwMAorI2RlZmluZSBiSFNTSV9UMlJEZWxheSAgICAgICAgICAgIAkweGY4MDAwMAorLyogQ2hhbm5lbCBnYWluIGF0IGNvbnRpbnVlIFRYLiAqLworI2RlZmluZSBiQ29udFR4SFNTSSAgICAgICAgICAgICAgIAkweDQwMAorI2RlZmluZSBiSUdGcm9tQ0NLICAgICAgICAgICAgICAgIAkweDIwMAorI2RlZmluZSBiQUdDQWRkcmVzcyAgICAgICAgICAgICAgIAkweDNmCisjZGVmaW5lIGJSeEhQVHggICAgICAgICAgICAgICAgICAgCTB4NzAwMAorI2RlZmluZSBiUnhIUFQyUiAgICAgICAgICAgICAgICAgIAkweDM4MDAwCisjZGVmaW5lIGJSeEhQQ0NLSW5pICAgICAgICAgICAgICAgCTB4YzAwMDAKKyNkZWZpbmUgYkFHQ1R4Q29kZSAgICAgICAgICAgICAgICAJMHhjMDAwMDAKKyNkZWZpbmUgYkFHQ1J4Q29kZSAgICAgICAgICAgICAgICAJMHgzMDAwMDAKKyNkZWZpbmUgYjNXaXJlRGF0YUxlbmd0aCAgICAgICAgICAJMHg4MDAKKyNkZWZpbmUgYjNXaXJlQWRkcmVzc0xlbmd0aCAgICAgICAJMHg0MDAKKyNkZWZpbmUgYjNXaXJlUkZQb3dlckRvd24gICAgICAgICAJMHgxCisvKiNkZWZpbmUgYkhXU0lTZWxlY3QgICAgICAgICAgICAgICAJMHg4ICovCisjZGVmaW5lIGI1R1BBUEVQb2xhcml0eSAgICAgICAgICAgCTB4NDAwMDAwMDAKKyNkZWZpbmUgYjJHUEFQRVBvbGFyaXR5ICAgICAgICAgICAJMHg4MDAwMDAwMAorI2RlZmluZSBiUkZTV19UeERlZmF1bHRBbnQgICAgICAgIAkweDMKKyNkZWZpbmUgYlJGU1dfVHhPcHRpb25BbnQgICAgICAgICAJMHgzMAorI2RlZmluZSBiUkZTV19SeERlZmF1bHRBbnQgICAgICAgIAkweDMwMAorI2RlZmluZSBiUkZTV19SeE9wdGlvbkFudCAgICAgICAgIAkweDMwMDAKKyNkZWZpbmUgYlJGU0lfM1dpcmVEYXRhICAgICAgICAgICAJMHgxCisjZGVmaW5lIGJSRlNJXzNXaXJlQ2xvY2sgICAgICAgICAgCTB4MgorI2RlZmluZSBiUkZTSV8zV2lyZUxvYWQgICAgICAgICAgIAkweDQKKyNkZWZpbmUgYlJGU0lfM1dpcmVSVyAgICAgICAgICAgICAJMHg4CisvKiAzLXdpcmUgdG90YWwgY29udHJvbCAqLworI2RlZmluZSBiUkZTSV8zV2lyZSAgICAgICAgICAgICAgIAkweGYKKyNkZWZpbmUgYlJGU0lfUkZFTlYgICAgICAgICAgICAgICAJMHgxMAorI2RlZmluZSBiUkZTSV9UUlNXICAgICAgICAgICAgICAgIAkweDIwCisjZGVmaW5lIGJSRlNJX1RSU1dCICAgICAgICAgICAgICAgCTB4NDAKKyNkZWZpbmUgYlJGU0lfQU5UU1cgICAgICAgICAgICAgICAJMHgxMDAKKyNkZWZpbmUgYlJGU0lfQU5UU1dCICAgICAgICAgICAgICAJMHgyMDAKKyNkZWZpbmUgYlJGU0lfUEFQRSAgICAgICAgICAgICAgICAJMHg0MDAKKyNkZWZpbmUgYlJGU0lfUEFQRTVHICAgICAgICAgICAgICAJMHg4MDAKKyNkZWZpbmUgYkJhbmRTZWxlY3QgICAgICAgICAgICAgICAJMHgxCisjZGVmaW5lIGJIVFNJRzJfR0kgICAgICAgICAgICAgICAgCTB4ODAKKyNkZWZpbmUgYkhUU0lHMl9TbW9vdGhpbmcgICAgICAgICAJMHgwMQorI2RlZmluZSBiSFRTSUcyX1NvdW5kaW5nICAgICAgICAgIAkweDAyCisjZGVmaW5lIGJIVFNJRzJfQWdncmVhdG9uICAgICAgICAgCTB4MDgKKyNkZWZpbmUgYkhUU0lHMl9TVEJDICAgICAgICAgICAgICAJMHgzMAorI2RlZmluZSBiSFRTSUcyX0FkdkNvZGluZyAgICAgICAgIAkweDQwCiAjZGVmaW5lIGJIVFNJRzJfTnVtT2ZIVExURiAgICAgICAgCTB4MzAwCi0jZGVmaW5lIGJIVFNJRzJfQ1JDOCAgICAgICAgICAgICAgCQkweDNmYwotI2RlZmluZSBiSFRTSUcxX01DUyAgICAgICAgICAgICAgIAkJMHg3ZgotI2RlZmluZSBiSFRTSUcxX0JhbmRXaWR0aCAgICAgICAgIAkJMHg4MAotI2RlZmluZSBiSFRTSUcxX0hUTGVuZ3RoICAgICAgICAgIAkJMHhmZmZmCi0jZGVmaW5lIGJMU0lHX1JhdGUgICAgICAgICAgICAgICAgCQkJMHhmCi0jZGVmaW5lIGJMU0lHX1Jlc2VydmVkICAgICAgICAgICAgCQkweDEwCi0jZGVmaW5lIGJMU0lHX0xlbmd0aCAgICAgICAgICAgICAgCQkweDFmZmZlCi0jZGVmaW5lIGJMU0lHX1Bhcml0eSAgICAgICAgICAgICAgCQkJMHgyMAotI2RlZmluZSBiQ0NLUnhQaGFzZSAgICAgICAgICAgICAgIAkJMHg0Ci0jZGVmaW5lIGJMU1NJUmVhZEFkZHJlc3MgICAgICAgICAgCQkweDNmMDAwMDAwICAgLy9MU1NJICJSZWFkIiBBZGRyZXNzCi0jZGVmaW5lIGJMU1NJUmVhZEVkZ2UgICAgICAgICAgICAgCQkweDgwMDAwMDAwICAgLy9MU1NJICJSZWFkIiBlZGdlIHNpZ25hbAotI2RlZmluZSBiTFNTSVJlYWRCYWNrRGF0YSAgICAgICAgIAkJMHhmZmYKLSNkZWZpbmUgYkxTU0lSZWFkT0tGbGFnICAgICAgICAgICAJCTB4MTAwMAotI2RlZmluZSBiQ0NLU2FtcGxlUmF0ZSAgICAgICAgICAgIAkJMHg4ICAgICAgIC8vMDogNDRNSHosIDE6ODhNSHoKKyNkZWZpbmUgYkhUU0lHMl9DUkM4ICAgICAgICAgICAgICAJMHgzZmMKKyNkZWZpbmUgYkhUU0lHMV9NQ1MgICAgICAgICAgICAgICAJMHg3ZgorI2RlZmluZSBiSFRTSUcxX0JhbmRXaWR0aCAgICAgICAgIAkweDgwCisjZGVmaW5lIGJIVFNJRzFfSFRMZW5ndGggICAgICAgICAgCTB4ZmZmZgorI2RlZmluZSBiTFNJR19SYXRlICAgICAgICAgICAgICAgIAkweGYKKyNkZWZpbmUgYkxTSUdfUmVzZXJ2ZWQgICAgICAgICAgICAJMHgxMAorI2RlZmluZSBiTFNJR19MZW5ndGggICAgICAgICAgICAgIAkweDFmZmZlCisjZGVmaW5lIGJMU0lHX1Bhcml0eSAgICAgICAgICAgICAgCTB4MjAKKyNkZWZpbmUgYkNDS1J4UGhhc2UgICAgICAgICAgICAgICAJMHg0CisvKiBMU1NJICJyZWFkIiBhZGRyZXNzICovCisjZGVmaW5lIGJMU1NJUmVhZEFkZHJlc3MgICAgICAgICAgCTB4M2YwMDAwMDAKKy8qIExTU0kgInJlYWQiIGVkZ2Ugc2lnbmFsICovCisjZGVmaW5lIGJMU1NJUmVhZEVkZ2UgICAgICAgICAgICAgCTB4ODAwMDAwMDAKKyNkZWZpbmUgYkxTU0lSZWFkQmFja0RhdGEgICAgICAgICAJMHhmZmYKKyNkZWZpbmUgYkxTU0lSZWFkT0tGbGFnICAgICAgICAgICAJMHgxMDAwCisvKiAwOiA0NCBNSHosIDE6IDg4TUh6ICovCisjZGVmaW5lIGJDQ0tTYW1wbGVSYXRlICAgICAgICAgICAgCTB4OAogCi0jZGVmaW5lIGJSZWd1bGF0b3IwU3RhbmRieSAgICAgICAgCQkweDEKLSNkZWZpbmUgYlJlZ3VsYXRvclBMTFN0YW5kYnkgICAgICAJCTB4MgotI2RlZmluZSBiUmVndWxhdG9yMVN0YW5kYnkgICAgICAgIAkJMHg0Ci0jZGVmaW5lIGJQTExQb3dlclVwICAgICAgICAgICAgICAgCQkweDgKLSNkZWZpbmUgYkRQTExQb3dlclVwICAgICAgICAgICAgICAJCTB4MTAKLSNkZWZpbmUgYkRBMTBQb3dlclVwICAgICAgICAgICAgICAJCTB4MjAKLSNkZWZpbmUgYkFEN1Bvd2VyVXAgICAgICAgICAgICAgICAJCTB4MjAwCi0jZGVmaW5lIGJEQTZQb3dlclVwICAgICAgICAgICAgICAgCQkweDIwMDAKLSNkZWZpbmUgYlh0YWxQb3dlclVwICAgICAgICAgICAgICAJCTB4NDAwMAotI2RlZmluZSBiNDBNRENsa1Bvd2VyVVAgICAgICAgICAgIAkJMHg4MDAwCi0jZGVmaW5lIGJEQTZEZWJ1Z01vZGUgICAgICAgICAgICAgCQkweDIwMDAwCi0jZGVmaW5lIGJEQTZTd2luZyAgICAgICAgICAgICAgICAgCQkJMHgzODAwMDAKLSNkZWZpbmUgYkFEQ2xrUGhhc2UgICAgICAgICAgICAgICAJCTB4NDAwMDAwMAotI2RlZmluZSBiODBNQ2xrRGVsYXkgICAgICAgICAgICAgIAkJMHgxODAwMDAwMAotI2RlZmluZSBiQUZFV2F0Y2hEb2dFbmFibGUgICAgICAgIAkJMHgyMDAwMDAwMAotI2RlZmluZSBiWHRhbENhcCAgICAgICAgICAgICAgICAJCQkweDBmMDAwMDAwCi0jZGVmaW5lIGJYdGFsQ2FwMDEgICAgICAgICAgICAgICAgCQkJMHhjMDAwMDAwMAotI2RlZmluZSBiWHRhbENhcDIzICAgICAgICAgICAgICAgIAkJCTB4MwotI2RlZmluZSBiWHRhbENhcDkyeAkJCQkJMHgwZjAwMDAwMAotI2RlZmluZSBiSW50RGlmQ2xrRW5hYmxlICAgICAgICAgIAkJMHg0MDAKLSNkZWZpbmUgYkV4dFNpZ0Nsa0VuYWJsZSAgICAgICAgIAkgCTB4ODAwCisjZGVmaW5lIGJSZWd1bGF0b3IwU3RhbmRieSAgICAgICAgCTB4MQorI2RlZmluZSBiUmVndWxhdG9yUExMU3RhbmRieSAgICAgIAkweDIKKyNkZWZpbmUgYlJlZ3VsYXRvcjFTdGFuZGJ5ICAgICAgICAJMHg0CisjZGVmaW5lIGJQTExQb3dlclVwICAgICAgICAgICAgICAgCTB4OAorI2RlZmluZSBiRFBMTFBvd2VyVXAgICAgICAgICAgICAgIAkweDEwCisjZGVmaW5lIGJEQTEwUG93ZXJVcCAgICAgICAgICAgICAgCTB4MjAKKyNkZWZpbmUgYkFEN1Bvd2VyVXAgICAgICAgICAgICAgICAJMHgyMDAKKyNkZWZpbmUgYkRBNlBvd2VyVXAgICAgICAgICAgICAgICAJMHgyMDAwCisjZGVmaW5lIGJYdGFsUG93ZXJVcCAgICAgICAgICAgICAgCTB4NDAwMAorI2RlZmluZSBiNDBNRENsa1Bvd2VyVVAgICAgICAgICAgIAkweDgwMDAKKyNkZWZpbmUgYkRBNkRlYnVnTW9kZSAgICAgICAgICAgICAJMHgyMDAwMAorI2RlZmluZSBiREE2U3dpbmcgICAgICAgICAgICAgICAgIAkweDM4MDAwMAorI2RlZmluZSBiQURDbGtQaGFzZSAgICAgICAgICAgICAgIAkweDQwMDAwMDAKKyNkZWZpbmUgYjgwTUNsa0RlbGF5ICAgICAgICAgICAgICAJMHgxODAwMDAwMAorI2RlZmluZSBiQUZFV2F0Y2hEb2dFbmFibGUgICAgICAgIAkweDIwMDAwMDAwCisjZGVmaW5lIGJYdGFsQ2FwICAgICAgICAgICAgICAgIAkweDBmMDAwMDAwCisjZGVmaW5lIGJYdGFsQ2FwMDEgICAgICAgICAgICAgICAgCTB4YzAwMDAwMDAKKyNkZWZpbmUgYlh0YWxDYXAyMyAgICAgICAgICAgICAgICAJMHgzCisjZGVmaW5lIGJYdGFsQ2FwOTJ4CQkJMHgwZjAwMDAwMAorI2RlZmluZSBiSW50RGlmQ2xrRW5hYmxlICAgICAgICAgIAkweDQwMAorI2RlZmluZSBiRXh0U2lnQ2xrRW5hYmxlICAgICAgICAgCTB4ODAwCiAjZGVmaW5lIGJCYW5kZ2FwTWJpYXNQb3dlclVwICAgICAgCTB4MTAwMDAKLSNkZWZpbmUgYkFEMTFTSEdhaW4gICAgICAgICAgICAgICAJCTB4YzAwMDAKLSNkZWZpbmUgYkFEMTFJbnB1dFJhbmdlICAgICAgICAgICAJCTB4NzAwMDAwCi0jZGVmaW5lIGJBRDExT1BDdXJyZW50ICAgICAgICAgICAgCQkweDM4MDAwMDAKLSNkZWZpbmUgYklQYXRoTG9vcGJhY2sgICAgICAgICAgICAJCTB4NDAwMDAwMAotI2RlZmluZSBiUVBhdGhMb29wYmFjayAgICAgICAgICAgIAkJMHg4MDAwMDAwCi0jZGVmaW5lIGJBRkVMb29wYmFjayAgICAgICAgICAgICAgCQkweDEwMDAwMDAwCi0jZGVmaW5lIGJEQTEwU3dpbmcgICAgICAgICAgICAgICAgCQkweDdlMAotI2RlZmluZSBiREExMFJldmVyc2UgICAgICAgICAgICAgIAkJMHg4MDAKLSNkZWZpbmUgYkRBQ2xrU291cmNlICAgICAgICAgICAgICAJCTB4MTAwMAotI2RlZmluZSBiQUQ3SW5wdXRSYW5nZSAgICAgICAgICAgIAkJMHg2MDAwCi0jZGVmaW5lIGJBRDdHYWluICAgICAgICAgICAgICAgICAgCQkJMHgzODAwMAotI2RlZmluZSBiQUQ3T3V0cHV0Q01Nb2RlICAgICAgICAgIAkJMHg0MDAwMAotI2RlZmluZSBiQUQ3SW5wdXRDTU1vZGUgICAgICAgICAgIAkJMHgzODAwMDAKLSNkZWZpbmUgYkFEN0N1cnJlbnQgICAgICAgICAgICAgICAJCQkweGMwMDAwMAotI2RlZmluZSBiUmVndWxhdG9yQWRqdXN0ICAgICAgICAgIAkJMHg3MDAwMDAwCi0jZGVmaW5lIGJBRDExUG93ZXJVcEF0VHggICAgICAgICAgCQkweDEKLSNkZWZpbmUgYkRBMTBQU0F0VHggICAgICAgICAgICAgICAJCTB4MTAKLSNkZWZpbmUgYkFEMTFQb3dlclVwQXRSeCAgICAgICAgICAJCTB4MTAwCi0jZGVmaW5lIGJEQTEwUFNBdFJ4ICAgICAgICAgICAgICAgCQkweDEwMDAKKyNkZWZpbmUgYkFEMTFTSEdhaW4gICAgICAgICAgICAgICAJMHhjMDAwMAorI2RlZmluZSBiQUQxMUlucHV0UmFuZ2UgICAgICAgICAgIAkweDcwMDAwMAorI2RlZmluZSBiQUQxMU9QQ3VycmVudCAgICAgICAgICAgIAkweDM4MDAwMDAKKyNkZWZpbmUgYklQYXRoTG9vcGJhY2sgICAgICAgICAgICAJMHg0MDAwMDAwCisjZGVmaW5lIGJRUGF0aExvb3BiYWNrICAgICAgICAgICAgCTB4ODAwMDAwMAorI2RlZmluZSBiQUZFTG9vcGJhY2sgICAgICAgICAgICAgIAkweDEwMDAwMDAwCisjZGVmaW5lIGJEQTEwU3dpbmcgICAgICAgICAgICAgICAgCTB4N2UwCisjZGVmaW5lIGJEQTEwUmV2ZXJzZSAgICAgICAgICAgICAgCTB4ODAwCisjZGVmaW5lIGJEQUNsa1NvdXJjZSAgICAgICAgICAgICAgCTB4MTAwMAorI2RlZmluZSBiQUQ3SW5wdXRSYW5nZSAgICAgICAgICAgIAkweDYwMDAKKyNkZWZpbmUgYkFEN0dhaW4gICAgICAgICAgICAgICAgICAJMHgzODAwMAorI2RlZmluZSBiQUQ3T3V0cHV0Q01Nb2RlICAgICAgICAgIAkweDQwMDAwCisjZGVmaW5lIGJBRDdJbnB1dENNTW9kZSAgICAgICAgICAgCTB4MzgwMDAwCisjZGVmaW5lIGJBRDdDdXJyZW50ICAgICAgICAgICAgICAgCTB4YzAwMDAwCisjZGVmaW5lIGJSZWd1bGF0b3JBZGp1c3QgICAgICAgICAgCTB4NzAwMDAwMAorI2RlZmluZSBiQUQxMVBvd2VyVXBBdFR4ICAgICAgICAgIAkweDEKKyNkZWZpbmUgYkRBMTBQU0F0VHggICAgICAgICAgICAgICAJMHgxMAorI2RlZmluZSBiQUQxMVBvd2VyVXBBdFJ4ICAgICAgICAgIAkweDEwMAorI2RlZmluZSBiREExMFBTQXRSeCAgICAgICAgICAgICAgIAkweDEwMDAKIAotI2RlZmluZSBiQ0NLUnhBR0NGb3JtYXQgICAgICAgICAgIAkJMHgyMDAKKyNkZWZpbmUgYkNDS1J4QUdDRm9ybWF0ICAgICAgICAgICAJMHgyMDAKIAotI2RlZmluZSBiUFNERkZUU2FtcGxlcFBvaW50ICAgICAgIAkJMHhjMDAwCi0jZGVmaW5lIGJQU0RBdmVyYWdlTnVtICAgICAgICAgICAgCQkweDMwMDAKLSNkZWZpbmUgYklRUGF0aENvbnRyb2wgICAgICAgICAgICAJCTB4YzAwCi0jZGVmaW5lIGJQU0RGcmVxICAgICAgICAgICAgICAgICAgCQkJMHgzZmYKLSNkZWZpbmUgYlBTREFudGVubmFQYXRoICAgICAgICAgICAJCTB4MzAKLSNkZWZpbmUgYlBTRElRU3dpdGNoICAgICAgICAgICAgICAJCTB4NDAKLSNkZWZpbmUgYlBTRFJ4VHJpZ2dlciAgICAgICAgICAgICAJCTB4NDAwMDAwCi0jZGVmaW5lIGJQU0RUeFRyaWdnZXIgICAgICAgICAgICAgCQkweDgwMDAwMDAwCi0jZGVmaW5lIGJQU0RTaW5lVG9uZVNjYWxlICAgICAgICAJCTB4N2YwMDAwMDAKLSNkZWZpbmUgYlBTRFJlcG9ydCAgICAgICAgICAgICAgICAJCQkweGZmZmYKKyNkZWZpbmUgYlBTREZGVFNhbXBsZXBQb2ludCAgICAgICAJMHhjMDAwCisjZGVmaW5lIGJQU0RBdmVyYWdlTnVtICAgICAgICAgICAgCTB4MzAwMAorI2RlZmluZSBiSVFQYXRoQ29udHJvbCAgICAgICAgICAgIAkweGMwMAorI2RlZmluZSBiUFNERnJlcSAgICAgICAgICAgICAgICAgIAkweDNmZgorI2RlZmluZSBiUFNEQW50ZW5uYVBhdGggICAgICAgICAgIAkweDMwCisjZGVmaW5lIGJQU0RJUVN3aXRjaCAgICAgICAgICAgICAgCTB4NDAKKyNkZWZpbmUgYlBTRFJ4VHJpZ2dlciAgICAgICAgICAgICAJMHg0MDAwMDAKKyNkZWZpbmUgYlBTRFR4VHJpZ2dlciAgICAgICAgICAgICAJMHg4MDAwMDAwMAorI2RlZmluZSBiUFNEU2luZVRvbmVTY2FsZSAgICAgICAgCTB4N2YwMDAwMDAKKyNkZWZpbmUgYlBTRFJlcG9ydCAgICAgICAgICAgICAgICAJMHhmZmZmCiAKLS8vcGFnZS05Ci0jZGVmaW5lIGJPRkRNVHhTQyAgICAgICAgICAgICAgICAgCQkweDMwMDAwMDAwCi0jZGVmaW5lIGJDQ0tUeE9uICAgICAgICAgICAgICAgICAgCQkJMHgxCi0jZGVmaW5lIGJPRkRNVHhPbiAgICAgICAgICAgICAgICAgCQkweDIKLSNkZWZpbmUgYkRlYnVnUGFnZSAgICAgICAgICAgICAgICAJCTB4ZmZmICAvL3Jlc2V0IGRlYnVnIHBhZ2UgYW5kIGFsc28gSFdvcmQsIExXb3JkCi0jZGVmaW5lIGJEZWJ1Z0l0ZW0gICAgICAgICAgICAgICAgCQkweGZmICAgLy9yZXNldCBkZWJ1ZyBwYWdlIGFuZCBMV29yZAotI2RlZmluZSBiQW50TCAgICAgICAgICAgICAgCSAgICAgICAJCTB4MTAKLSNkZWZpbmUgYkFudE5vbkhUICAgICAgICAgICAJICAgICAgCQkJMHgxMDAKLSNkZWZpbmUgYkFudEhUMSAgICAgICAgICAgICAgIAkJCTB4MTAwMAotI2RlZmluZSBiQW50SFQyICAgICAgICAgICAgICAgICAgIAkJCTB4MTAwMDAKLSNkZWZpbmUgYkFudEhUMVMxICAgICAgICAgICAgICAgICAJCQkweDEwMDAwMAotI2RlZmluZSBiQW50Tm9uSFRTMSAgICAgICAgICAgICAgIAkJMHgxMDAwMDAwCisvKiBQYWdlIDggKi8KKyNkZWZpbmUgYk9GRE1UeFNDICAgICAgICAgICAgICAgICAJMHgzMDAwMDAwMAorI2RlZmluZSBiQ0NLVHhPbiAgICAgICAgICAgICAgICAgIAkweDEKKyNkZWZpbmUgYk9GRE1UeE9uICAgICAgICAgICAgICAgICAJMHgyCisvKiBSZXNldCBkZWJ1ZyBwYWdlIGFuZCBhbHNvIEhXb3JkLCBMV29yZCAqLworI2RlZmluZSBiRGVidWdQYWdlICAgICAgICAgICAgICAgIAkweGZmZgorLyogUmVzZXQgZGVidWcgcGFnZSBhbmQgTFdvcmQgKi8KKyNkZWZpbmUgYkRlYnVnSXRlbSAgICAgICAgICAgICAgICAJMHhmZgorI2RlZmluZSBiQW50TCAgICAgICAgICAgICAgCSAgICAgICAJMHgxMAorI2RlZmluZSBiQW50Tm9uSFQgICAgICAgICAgIAkgICAgICAJMHgxMDAKKyNkZWZpbmUgYkFudEhUMSAgICAgICAgICAgICAgIAkJMHgxMDAwCisjZGVmaW5lIGJBbnRIVDIgICAgICAgICAgICAgICAgICAgCTB4MTAwMDAKKyNkZWZpbmUgYkFudEhUMVMxICAgICAgICAgICAgICAgICAJMHgxMDAwMDAKKyNkZWZpbmUgYkFudE5vbkhUUzEgICAgICAgICAgICAgICAJMHgxMDAwMDAwCiAKLS8vcGFnZS1hCi0jZGVmaW5lIGJDQ0tCQk1vZGUgICAgICAgICAgICAgICAgCQkweDMKLSNkZWZpbmUgYkNDS1R4UG93ZXJTYXZpbmcgICAgICAgICAJCTB4ODAKLSNkZWZpbmUgYkNDS1J4UG93ZXJTYXZpbmcgICAgICAgICAJCTB4NDAKLSNkZWZpbmUgYkNDS1NpZGVCYW5kICAgICAgICAgICAgICAJCTB4MTAKLSNkZWZpbmUgYkNDS1NjcmFtYmxlICAgICAgICAgICAgICAJCTB4OAotI2RlZmluZSBiQ0NLQW50RGl2ZXJzaXR5ICAgIAkJICAgICAgCTB4ODAwMAorLyogUGFnZSBhICovCisjZGVmaW5lIGJDQ0tCQk1vZGUgICAgICAgICAgICAgICAgCTB4MworI2RlZmluZSBiQ0NLVHhQb3dlclNhdmluZyAgICAgICAgIAkweDgwCisjZGVmaW5lIGJDQ0tSeFBvd2VyU2F2aW5nICAgICAgICAgCTB4NDAKKyNkZWZpbmUgYkNDS1NpZGVCYW5kICAgICAgICAgICAgICAJMHgxMAorI2RlZmluZSBiQ0NLU2NyYW1ibGUgICAgICAgICAgICAgIAkweDgKKyNkZWZpbmUgYkNDS0FudERpdmVyc2l0eSAgICAJCTB4ODAwMAogI2RlZmluZSBiQ0NLQ2FycmllclJlY292ZXJ5ICAgCSAgICAJMHg0MDAwCi0jZGVmaW5lIGJDQ0tUeFJhdGUgICAgICAgICAgIAkJICAgICAJMHgzMDAwCi0jZGVmaW5lIGJDQ0tEQ0NhbmNlbCAgICAgICAgICAgICAJIAkweDA4MDAKLSNkZWZpbmUgYkNDS0lTSUNhbmNlbCAgICAgICAgICAgICAJCTB4MDQwMAotI2RlZmluZSBiQ0NLTWF0Y2hGaWx0ZXIgICAgICAgICAgIAkJMHgwMjAwCi0jZGVmaW5lIGJDQ0tFcXVhbGl6ZXIgICAgICAgICAgICAgCQkweDAxMDAKLSNkZWZpbmUgYkNDS1ByZWFtYmxlRGV0ZWN0ICAgICAgIAkgCTB4ODAwMDAwCi0jZGVmaW5lIGJDQ0tGYXN0RmFsc2VDQ0EgICAgICAgICAgCQkweDQwMDAwMAotI2RlZmluZSBiQ0NLQ2hFc3RTdGFydCAgICAgICAgICAgIAkJMHgzMDAwMDAKLSNkZWZpbmUgYkNDS0NDQUNvdW50ICAgICAgICAgICAgICAJCTB4MDgwMDAwCi0jZGVmaW5lIGJDQ0tjc19saW0gICAgICAgICAgICAgICAgCQkJMHgwNzAwMDAKLSNkZWZpbmUgYkNDS0Jpc3RNb2RlICAgICAgICAgICAgICAJCTB4ODAwMDAwMDAKLSNkZWZpbmUgYkNDS0NDQU1hc2sgICAgICAgICAgICAgCSAgCTB4NDAwMDAwMDAKKyNkZWZpbmUgYkNDS1R4UmF0ZSAgICAgICAgICAgCQkweDMwMDAKKyNkZWZpbmUgYkNDS0RDQ2FuY2VsICAgICAgICAgICAgIAkweDA4MDAKKyNkZWZpbmUgYkNDS0lTSUNhbmNlbCAgICAgICAgICAgICAJMHgwNDAwCisjZGVmaW5lIGJDQ0tNYXRjaEZpbHRlciAgICAgICAgICAgCTB4MDIwMAorI2RlZmluZSBiQ0NLRXF1YWxpemVyICAgICAgICAgICAgIAkweDAxMDAKKyNkZWZpbmUgYkNDS1ByZWFtYmxlRGV0ZWN0ICAgICAgIAkweDgwMDAwMAorI2RlZmluZSBiQ0NLRmFzdEZhbHNlQ0NBICAgICAgICAgIAkweDQwMDAwMAorI2RlZmluZSBiQ0NLQ2hFc3RTdGFydCAgICAgICAgICAgIAkweDMwMDAwMAorI2RlZmluZSBiQ0NLQ0NBQ291bnQgICAgICAgICAgICAgIAkweDA4MDAwMAorI2RlZmluZSBiQ0NLY3NfbGltICAgICAgICAgICAgICAgIAkweDA3MDAwMAorI2RlZmluZSBiQ0NLQmlzdE1vZGUgICAgICAgICAgICAgIAkweDgwMDAwMDAwCisjZGVmaW5lIGJDQ0tDQ0FNYXNrICAgICAgICAgICAgIAkweDQwMDAwMDAwCiAjZGVmaW5lIGJDQ0tUeERBQ1BoYXNlICAgICAgICAgCSAgIAkweDQKLSNkZWZpbmUgYkNDS1J4QURDUGhhc2UgICAgICAgICAJICAgCTB4MjAwMDAwMDAgICAvL3JfcnhfY2xrCisvKiByX3J4X2NsayAqLworI2RlZmluZSBiQ0NLUnhBRENQaGFzZSAgICAgICAgIAkgCTB4MjAwMDAwMDAKICNkZWZpbmUgYkNDS3JfY3BfbW9kZTAgICAgICAgICAJICAgCTB4MDEwMAotI2RlZmluZSBiQ0NLVHhEQ09mZnNldCAgICAgICAgICAgCSAJMHhmMAotI2RlZmluZSBiQ0NLUnhEQ09mZnNldCAgICAgICAgICAgCSAJMHhmCi0jZGVmaW5lIGJDQ0tDQ0FNb2RlICAgICAgICAgICAgICAJIAkweGMwMDAKLSNkZWZpbmUgYkNDS0ZhbHNlQ1NfbGltICAgICAgICAgICAJCTB4M2YwMAotI2RlZmluZSBiQ0NLQ1NfcmF0aW8gICAgICAgICAgICAgIAkJMHhjMDAwMDAKLSNkZWZpbmUgYkNDS0NvcmdCaXRfc2VsICAgICAgICAgICAJCTB4MzAwMDAwCi0jZGVmaW5lIGJDQ0tQRF9saW0gICAgICAgICAgICAgICAgCQkJMHgwZjAwMDAKLSNkZWZpbmUgYkNDS05ld0NDQSAgICAgICAgICAgICAgICAJCTB4ODAwMDAwMDAKLSNkZWZpbmUgYkNDS1J4SFBvZklHICAgICAgICAgICAgICAJCTB4ODAwMAotI2RlZmluZSBiQ0NLUnhJRyAgICAgICAgICAgICAgICAgIAkJCTB4N2YwMAotI2RlZmluZSBiQ0NLTE5BUG9sYXJpdHkgICAgICAgICAgIAkJMHg4MDAwMDAKLSNkZWZpbmUgYkNDS1J4MXN0R2FpbiAgICAgICAgICAgICAJCTB4N2YwMDAwCi0jZGVmaW5lIGJDQ0tSRkV4dGVuZCAgICAgICAgICAgICAgCQkweDIwMDAwMDAwIC8vQ0NLIFJ4IElpbml0YWwgZ2FpbiBwb2xhcml0eQotI2RlZmluZSBiQ0NLUnhBR0NTYXRMZXZlbCAgICAgICAgCSAJMHgxZjAwMDAwMAotI2RlZmluZSBiQ0NLUnhBR0NTYXRDb3VudCAgICAgICAJICAJMHhlMAotI2RlZmluZSBiQ0NLUnhSRlNldHRsZSAgICAgICAgICAgIAkJMHgxZiAgICAgICAvL0FHQ3NhbXBfZGx5Ci0jZGVmaW5lIGJDQ0tGaXhlZFJ4QUdDICAgICAgICAgICAJIAkweDgwMDAKLS8vI2RlZmluZSBiQ0NLUnhBR0NGb3JtYXQgICAgICAgICAJIAkweDQwMDAgICAvL3JlbW92ZSB0byBIU1NJIHJlZ2lzdGVyIDB4ODI0Ci0jZGVmaW5lIGJDQ0tBbnRlbm5hUG9sYXJpdHkgICAgICAJIAkweDIwMDAKLSNkZWZpbmUgYkNDS1R4RmlsdGVyVHlwZSAgICAgICAgICAJCTB4MGMwMAorI2RlZmluZSBiQ0NLVHhEQ09mZnNldCAgICAgICAgICAgCTB4ZjAKKyNkZWZpbmUgYkNDS1J4RENPZmZzZXQgICAgICAgICAJCTB4ZgorI2RlZmluZSBiQ0NLQ0NBTW9kZSAgICAgICAgICAgICAgCTB4YzAwMAorI2RlZmluZSBiQ0NLRmFsc2VDU19saW0gICAgICAgICAgIAkweDNmMDAKKyNkZWZpbmUgYkNDS0NTX3JhdGlvICAgICAgICAgICAgICAJMHhjMDAwMDAKKyNkZWZpbmUgYkNDS0NvcmdCaXRfc2VsICAgICAgICAgICAJMHgzMDAwMDAKKyNkZWZpbmUgYkNDS1BEX2xpbSAgICAgICAgICAgICAgICAJMHgwZjAwMDAKKyNkZWZpbmUgYkNDS05ld0NDQSAgICAgICAgICAgICAgICAJMHg4MDAwMDAwMAorI2RlZmluZSBiQ0NLUnhIUG9mSUcgICAgICAgICAgICAgIAkweDgwMDAKKyNkZWZpbmUgYkNDS1J4SUcgICAgICAgICAgICAgICAgICAJMHg3ZjAwCisjZGVmaW5lIGJDQ0tMTkFQb2xhcml0eSAgICAgICAgICAgCTB4ODAwMDAwCisjZGVmaW5lIGJDQ0tSeDFzdEdhaW4gICAgICAgICAgICAgCTB4N2YwMDAwCisvKiBDQ0sgUnggSW5pdGlhbCBnYWluIHBvbGFyaXR5ICovCisjZGVmaW5lIGJDQ0tSRkV4dGVuZCAgICAgICAgICAgICAgCTB4MjAwMDAwMDAKKyNkZWZpbmUgYkNDS1J4QUdDU2F0TGV2ZWwgICAgICAgIAkweDFmMDAwMDAwCisjZGVmaW5lIGJDQ0tSeEFHQ1NhdENvdW50ICAgICAgIAkweGUwCisvKiBBR0NTQW1wX2RseSAqLworI2RlZmluZSBiQ0NLUnhSRlNldHRsZSAgICAgICAgICAgIAkweDFmCisjZGVmaW5lIGJDQ0tGaXhlZFJ4QUdDICAgICAgICAgICAJMHg4MDAwCisvKiNkZWZpbmUgYkNDS1J4QUdDRm9ybWF0ICAgICAgICAgCTB4NDAwMCAgcmVtb3ZlIHRvIEhTU0kgcmVnaXN0ZXIgMHg4MjQgKi8KKyNkZWZpbmUgYkNDS0FudGVubmFQb2xhcml0eSAgICAgIAkweDIwMDAKKyNkZWZpbmUgYkNDS1R4RmlsdGVyVHlwZSAgICAgICAgICAJMHgwYzAwCiAjZGVmaW5lIGJDQ0tSeEFHQ1JlcG9ydFR5cGUgICAJICAgCTB4MDMwMAotI2RlZmluZSBiQ0NLUnhEQUdDRW4gICAgICAgICAgICAgIAkJMHg4MDAwMDAwMAotI2RlZmluZSBiQ0NLUnhEQUdDUGVyaW9kICAgICAgICAJICAJMHgyMDAwMDAwMAorI2RlZmluZSBiQ0NLUnhEQUdDRW4gICAgICAgICAgICAgIAkweDgwMDAwMDAwCisjZGVmaW5lIGJDQ0tSeERBR0NQZXJpb2QgICAgICAgIAkweDIwMDAwMDAwCiAjZGVmaW5lIGJDQ0tSeERBR0NTYXRMZXZlbCAgICAgCSAgIAkweDFmMDAwMDAwCi0jZGVmaW5lIGJDQ0tUaW1pbmdSZWNvdmVyeSAgICAgICAJIAkweDgwMDAwMAotI2RlZmluZSBiQ0NLVHhDMCAgICAgICAgICAgICAgICAgIAkJCTB4M2YwMDAwCi0jZGVmaW5lIGJDQ0tUeEMxICAgICAgICAgICAgICAgICAgCQkJMHgzZjAwMDAwMAotI2RlZmluZSBiQ0NLVHhDMiAgICAgICAgICAgICAgICAgIAkJCTB4M2YKLSNkZWZpbmUgYkNDS1R4QzMgICAgICAgICAgICAgICAgICAJCQkweDNmMDAKLSNkZWZpbmUgYkNDS1R4QzQgICAgICAgICAgICAgICAgICAJCQkweDNmMDAwMAotI2RlZmluZSBiQ0NLVHhDNSAgICAgICAgICAgICAgICAgIAkJCTB4M2YwMDAwMDAKLSNkZWZpbmUgYkNDS1R4QzYgICAgICAgICAgICAgICAgICAJCQkweDNmCi0jZGVmaW5lIGJDQ0tUeEM3ICAgICAgICAgICAgICAgICAgCQkJMHgzZjAwCi0jZGVmaW5lIGJDQ0tEZWJ1Z1BvcnQgICAgICAgICAgICAgCQkweGZmMDAwMAotI2RlZmluZSBiQ0NLREFDRGVidWcgICAgICAgICAgICAgIAkJMHgwZjAwMDAwMAotI2RlZmluZSBiQ0NLRmFsc2VBbGFybUVuYWJsZSAgICAgIAkJMHg4MDAwCi0jZGVmaW5lIGJDQ0tGYWxzZUFsYXJtUmVhZCAgICAgICAgCQkweDQwMDAKLSNkZWZpbmUgYkNDS1RSU1NJICAgICAgICAgICAgICAgICAJCQkweDdmCi0jZGVmaW5lIGJDQ0tSeEFHQ1JlcG9ydCAgICAgICAgICAgCQkweGZlCi0jZGVmaW5lIGJDQ0tSeFJlcG9ydF9BbnRTZWwgICAgICAgCQkweDgwMDAwMDAwCi0jZGVmaW5lIGJDQ0tSeFJlcG9ydF9NRk9mZiAgICAgICAgCQkweDQwMDAwMDAwCisjZGVmaW5lIGJDQ0tUaW1pbmdSZWNvdmVyeSAgICAgICAJMHg4MDAwMDAKKyNkZWZpbmUgYkNDS1R4QzAgICAgICAgICAgICAgICAgICAJMHgzZjAwMDAKKyNkZWZpbmUgYkNDS1R4QzEgICAgICAgICAgICAgICAgICAJMHgzZjAwMDAwMAorI2RlZmluZSBiQ0NLVHhDMiAgICAgICAgICAgICAgICAgIAkweDNmCisjZGVmaW5lIGJDQ0tUeEMzICAgICAgICAgICAgICAgICAgCTB4M2YwMAorI2RlZmluZSBiQ0NLVHhDNCAgICAgICAgICAgICAgICAgIAkweDNmMDAwMAorI2RlZmluZSBiQ0NLVHhDNSAgICAgICAgICAgICAgICAgIAkweDNmMDAwMDAwCisjZGVmaW5lIGJDQ0tUeEM2ICAgICAgICAgICAgICAgICAgCTB4M2YKKyNkZWZpbmUgYkNDS1R4QzcgICAgICAgICAgICAgICAgICAJMHgzZjAwCisjZGVmaW5lIGJDQ0tEZWJ1Z1BvcnQgICAgICAgICAgICAgCTB4ZmYwMDAwCisjZGVmaW5lIGJDQ0tEQUNEZWJ1ZyAgICAgICAgICAgICAgCTB4MGYwMDAwMDAKKyNkZWZpbmUgYkNDS0ZhbHNlQWxhcm1FbmFibGUgICAgICAJMHg4MDAwCisjZGVmaW5lIGJDQ0tGYWxzZUFsYXJtUmVhZCAgICAgICAgCTB4NDAwMAorI2RlZmluZSBiQ0NLVFJTU0kgICAgICAgICAgICAgICAgIAkweDdmCisjZGVmaW5lIGJDQ0tSeEFHQ1JlcG9ydCAgICAgICAgICAgCTB4ZmUKKyNkZWZpbmUgYkNDS1J4UmVwb3J0X0FudFNlbCAgICAgICAJMHg4MDAwMDAwMAorI2RlZmluZSBiQ0NLUnhSZXBvcnRfTUZPZmYgICAgICAgIAkweDQwMDAwMDAwCiAjZGVmaW5lIGJDQ0tSeFJ4UmVwb3J0X1NRTG9zcyAgICAgCTB4MjAwMDAwMDAKLSNkZWZpbmUgYkNDS1J4UmVwb3J0X1BrdGxvc3MgICAgICAJCTB4MTAwMDAwMDAKKyNkZWZpbmUgYkNDS1J4UmVwb3J0X1BrdGxvc3MgICAgICAJMHgxMDAwMDAwMAogI2RlZmluZSBiQ0NLUnhSZXBvcnRfTG9ja2VkYml0ICAgIAkweDA4MDAwMDAwCiAjZGVmaW5lIGJDQ0tSeFJlcG9ydF9SYXRlRXJyb3IgICAgCTB4MDQwMDAwMDAKLSNkZWZpbmUgYkNDS1J4UmVwb3J0X1J4UmF0ZSAgICAgICAJCTB4MDMwMDAwMDAKKyNkZWZpbmUgYkNDS1J4UmVwb3J0X1J4UmF0ZSAgICAgICAJMHgwMzAwMDAwMAogI2RlZmluZSBiQ0NLUnhGQUNvdW50ZXJMb3dlciAgICAgIAkweGZmCiAjZGVmaW5lIGJDQ0tSeEZBQ291bnRlclVwcGVyICAgICAgCTB4ZmYwMDAwMDAKLSNkZWZpbmUgYkNDS1J4SFBBR0NTdGFydCAgICAgICAgICAJCTB4ZTAwMAotI2RlZmluZSBiQ0NLUnhIUEFHQ0ZpbmFsICAgICAgICAgIAkJMHgxYzAwCisjZGVmaW5lIGJDQ0tSeEhQQUdDU3RhcnQgICAgICAgICAgCTB4ZTAwMAorI2RlZmluZSBiQ0NLUnhIUEFHQ0ZpbmFsICAgICAgICAgIAkweDFjMDAKIAogI2RlZmluZSBiQ0NLUnhGYWxzZUFsYXJtRW5hYmxlICAgIAkweDgwMDAKLSNkZWZpbmUgYkNDS0ZBQ291bnRlckZyZWV6ZSAgICAgICAJCTB4NDAwMAorI2RlZmluZSBiQ0NLRkFDb3VudGVyRnJlZXplICAgICAgIAkweDQwMDAKIAotI2RlZmluZSBiQ0NLVHhQYXRoU2VsICAgICAgICAgICAgIAkJMHgxMDAwMDAwMAotI2RlZmluZSBiQ0NLRGVmYXVsdFJ4UGF0aCAgICAgICAgIAkJMHhjMDAwMDAwCi0jZGVmaW5lIGJDQ0tPcHRpb25SeFBhdGggICAgICAgICAgCQkweDMwMDAwMDAKKyNkZWZpbmUgYkNDS1R4UGF0aFNlbCAgICAgICAgICAgICAJMHgxMDAwMDAwMAorI2RlZmluZSBiQ0NLRGVmYXVsdFJ4UGF0aCAgICAgICAgIAkweGMwMDAwMDAKKyNkZWZpbmUgYkNDS09wdGlvblJ4UGF0aCAgICAgICAgICAJMHgzMDAwMDAwCiAKLS8vcGFnZSBjCi0jZGVmaW5lIGJOdW1PZlNURiAgICAgICAgICAgICAgICAJCQkweDMKLSNkZWZpbmUgYlNoaWZ0X0wgICAgICAgICAgICAgICAgIAkJCTB4YzAKLSNkZWZpbmUgYkdJX1RIICAgICAgICAgICAgICAgICAgIAkJCTB4YwotI2RlZmluZSBiUnhQYXRoQSAgICAgICAgICAgICAgICAgCQkJMHgxCi0jZGVmaW5lIGJSeFBhdGhCICAgICAgICAgICAgICAgICAJCQkweDIKLSNkZWZpbmUgYlJ4UGF0aEMgICAgICAgICAgICAgICAgIAkJCTB4NAotI2RlZmluZSBiUnhQYXRoRCAgICAgICAgICAgICAgICAgCQkJMHg4Ci0jZGVmaW5lIGJUeFBhdGhBICAgICAgICAgICAgICAgICAJCQkweDEKLSNkZWZpbmUgYlR4UGF0aEIgICAgICAgICAgICAgICAgIAkJCTB4MgotI2RlZmluZSBiVHhQYXRoQyAgICAgICAgICAgICAgICAgCQkJMHg0Ci0jZGVmaW5lIGJUeFBhdGhEICAgICAgICAgICAgICAgICAJCQkweDgKLSNkZWZpbmUgYlRSU1NJRnJlcSAgICAgICAgICAgICAgIAkJCTB4MjAwCi0jZGVmaW5lIGJBRENCYWNrb2ZmICAgICAgICAgICAgICAJCQkweDMwMDAKLSNkZWZpbmUgYkRGSVJCYWNrb2ZmICAgICAgICAgICAgIAkJCTB4YzAwMAotI2RlZmluZSBiVFJTU0lMYXRjaFBoYXNlICAgICAgICAgCQkweDEwMDAwCi0jZGVmaW5lIGJSeElEQ09mZnNldCAgICAgICAgICAgICAJCQkweGZmCi0jZGVmaW5lIGJSeFFEQ09mZnNldCAgICAgICAgICAgICAJCQkweGZmMDAKLSNkZWZpbmUgYlJ4REZJUk1vZGUgICAgICAgICAgICAgIAkJMHgxODAwMDAwCi0jZGVmaW5lIGJSeERDTkZUeXBlICAgICAgICAgICAgICAJCTB4ZTAwMDAwMAotI2RlZmluZSBiUlhJUUltYl9BICAgICAgICAgICAgICAgCQkJMHgzZmYKLSNkZWZpbmUgYlJYSVFJbWJfQiAgICAgICAgICAgICAgIAkJCTB4ZmMwMAotI2RlZmluZSBiUlhJUUltYl9DICAgICAgICAgICAgICAgCQkJMHgzZjAwMDAKLSNkZWZpbmUgYlJYSVFJbWJfRCAgICAgICAgICAgICAgIAkJCTB4ZmZjMDAwMDAKLSNkZWZpbmUgYkRDX2RjX05vdGNoICAgICAgICAgICAgIAkJMHg2MDAwMAotI2RlZmluZSBiUnhOQklOb3RjaCAgICAgICAgICAgICAgCQkJMHgxZjAwMDAwMAotI2RlZmluZSBiUERfVEggICAgICAgICAgICAgICAgICAgCQkJMHhmCi0jZGVmaW5lIGJQRF9USF9PcHQyICAgICAgICAgICAgICAJCTB4YzAwMAotI2RlZmluZSBiUFdFRF9USCAgICAgICAgICAgICAgICAgCQkJMHg3MDAKLSNkZWZpbmUgYklmTUZfV2luX0wgICAgICAgICAgICAgIAkJCTB4ODAwCi0jZGVmaW5lIGJQRF9PcHRpb24gICAgICAgICAgICAgICAJCQkweDEwMDAKLSNkZWZpbmUgYk1GX1dpbl9MICAgICAgICAgICAgICAgIAkJCTB4ZTAwMAotI2RlZmluZSBiQldfU2VhcmNoX0wgICAgICAgICAgICAgCQkweDMwMDAwCi0jZGVmaW5lIGJ3aW5fZW5oX0wgICAgICAgICAgICAgICAJCQkweGMwMDAwCi0jZGVmaW5lIGJCV19USCAgICAgICAgICAgICAgICAgICAJCQkweDcwMDAwMAotI2RlZmluZSBiRURfVEgyICAgICAgICAgICAgICAgICAgCQkJMHgzODAwMDAwCi0jZGVmaW5lIGJCV19vcHRpb24gICAgICAgICAgICAgICAJCQkweDQwMDAwMDAKLSNkZWZpbmUgYlJhdGlvX1RIICAgICAgICAgICAgICAgIAkJCTB4MTgwMDAwMDAKLSNkZWZpbmUgYldpbmRvd19MICAgICAgICAgICAgICAgIAkJCTB4ZTAwMDAwMDAKLSNkZWZpbmUgYlNCRF9PcHRpb24gICAgICAgICAgICAgIAkJCTB4MQotI2RlZmluZSBiRnJhbWVfVEggICAgICAgICAgICAgICAgCQkJMHgxYwotI2RlZmluZSBiRlNfT3B0aW9uICAgICAgICAgICAgICAgCQkJMHg2MAotI2RlZmluZSBiRENfU2xvcGVfY2hlY2sgICAgICAgICAgCQkweDgwCi0jZGVmaW5lIGJGR3VhcmRfQ291bnRlcl9EQ19MICAgICAJCTB4ZTAwCi0jZGVmaW5lIGJGcmFtZV9XZWlnaHRfU2hvcnQgICAgICAJCTB4NzAwMAotI2RlZmluZSBiU3ViX1R1bmUgICAgICAgICAgICAgICAgCQkJMHhlMDAwMDAKLSNkZWZpbmUgYkZyYW1lX0RDX0xlbmd0aCAgICAgICAgIAkJMHhlMDAwMDAwCi0jZGVmaW5lIGJTQkRfc3RhcnRfb2Zmc2V0ICAgICAgICAJCTB4MzAwMDAwMDAKLSNkZWZpbmUgYkZyYW1lX1RIXzIgICAgICAgICAgICAgIAkJMHg3Ci0jZGVmaW5lIGJGcmFtZV9HSTJfVEggICAgICAgICAgICAJCTB4MzgKLSNkZWZpbmUgYkdJMl9TeW5jX2VuICAgICAgICAgICAgIAkJMHg0MAotI2RlZmluZSBiU2FyY2hfU2hvcnRfRWFybHkgICAgICAgCQkweDMwMAotI2RlZmluZSBiU2FyY2hfU2hvcnRfTGF0ZSAgICAgICAgCQkweGMwMAotI2RlZmluZSBiU2FyY2hfR0kyX0xhdGUgICAgICAgICAgCQkweDcwMDAwCi0jZGVmaW5lIGJDRk9BbnRTdW0gICAgICAgICAgICAgICAJCTB4MQotI2RlZmluZSBiQ0ZPQWNjICAgICAgICAgICAgICAgICAgCQkJMHgyCi0jZGVmaW5lIGJDRk9TdGFydE9mZnNldCAgICAgICAgICAJCTB4YwotI2RlZmluZSBiQ0ZPTG9va0JhY2sgICAgICAgICAgICAgCQkweDcwCi0jZGVmaW5lIGJDRk9TdW1XZWlnaHQgICAgICAgICAgICAJCTB4ODAKLSNkZWZpbmUgYkRBR0NFbmFibGUgICAgICAgICAgICAgIAkJCTB4MTAwMDAKLSNkZWZpbmUgYlRYSVFJbWJfQSAgICAgICAgICAgICAgIAkJCTB4M2ZmCi0jZGVmaW5lIGJUWElRSW1iX0IgICAgICAgICAgICAgICAJCQkweGZjMDAKLSNkZWZpbmUgYlRYSVFJbWJfQyAgICAgICAgICAgICAgIAkJCTB4M2YwMDAwCi0jZGVmaW5lIGJUWElRSW1iX0QgICAgICAgICAgICAgICAJCQkweGZmYzAwMDAwCi0jZGVmaW5lIGJUeElEQ09mZnNldCAgICAgICAgICAgICAJCQkweGZmCi0jZGVmaW5lIGJUeFFEQ09mZnNldCAgICAgICAgICAgICAJCQkweGZmMDAKLSNkZWZpbmUgYlR4REZJUk1vZGUgICAgICAgICAgICAgIAkJMHgxMDAwMAotI2RlZmluZSBiVHhQZXN1ZG9Ob2lzZU9uICAgICAgICAgCQkweDQwMDAwMDAKLSNkZWZpbmUgYlR4UGVzdWRvTm9pc2VfQSAgICAgICAgIAkJMHhmZgotI2RlZmluZSBiVHhQZXN1ZG9Ob2lzZV9CICAgICAgICAgCQkweGZmMDAKLSNkZWZpbmUgYlR4UGVzdWRvTm9pc2VfQyAgICAgICAgIAkJMHhmZjAwMDAKLSNkZWZpbmUgYlR4UGVzdWRvTm9pc2VfRCAgICAgICAgIAkJMHhmZjAwMDAwMAotI2RlZmluZSBiQ0NBRHJvcE9wdGlvbiAgICAgICAgICAgCQkweDIwMDAwCi0jZGVmaW5lIGJDQ0FEcm9wVGhyZXMgICAgICAgICAgICAJCTB4ZmZmMDAwMDAKLSNkZWZpbmUgYkVEQ0NBX0ggICAgICAgICAgICAgICAgIAkJCTB4ZgotI2RlZmluZSBiRURDQ0FfTCAgICAgICAgICAgICAgICAgCQkJMHhmMAotI2RlZmluZSBiTGFtYmRhX0VEICAgICAgICAgICAgICAgMHgzMDAKLSNkZWZpbmUgYlJ4SW5pdGlhbEdhaW4gICAgICAgICAgIDB4N2YKLSNkZWZpbmUgYlJ4QW50RGl2RW4gICAgICAgICAgICAgIDB4ODAKLSNkZWZpbmUgYlJ4QUdDQWRkcmVzc0ZvckxOQSAgICAgIDB4N2YwMAotI2RlZmluZSBiUnhIaWdoUG93ZXJGbG93ICAgICAgICAgMHg4MDAwCi0jZGVmaW5lIGJSeEFHQ0ZyZWV6ZVRocmVzICAgICAgICAweGMwMDAwCi0jZGVmaW5lIGJSeEZyZWV6ZVN0ZXBfQUdDMSAgICAgICAweDMwMDAwMAotI2RlZmluZSBiUnhGcmVlemVTdGVwX0FHQzIgICAgICAgMHhjMDAwMDAKLSNkZWZpbmUgYlJ4RnJlZXplU3RlcF9BR0MzICAgICAgIDB4MzAwMDAwMAotI2RlZmluZSBiUnhGcmVlemVTdGVwX0FHQzAgICAgICAgMHhjMDAwMDAwCi0jZGVmaW5lIGJSeFJzc2lfQ21wX0VuICAgICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIGJSeFF1aWNrQUdDRW4gICAgICAgICAgICAweDIwMDAwMDAwCi0jZGVmaW5lIGJSeEFHQ0ZyZWV6ZVRocmVzTW9kZSAgICAweDQwMDAwMDAwCi0jZGVmaW5lIGJSeE92ZXJGbG93Q2hlY2tUeXBlICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIGJSeEFHQ1NoaWZ0ICAgICAgICAgICAgICAweDdmCi0jZGVmaW5lIGJUUlNXX1RyaV9Pbmx5ICAgICAgICAgICAweDgwCi0jZGVmaW5lIGJQb3dlclRocmVzICAgICAgICAgICAgICAweDMwMAotI2RlZmluZSBiUnhBR0NFbiAgICAgICAgICAgICAgICAgMHgxCi0jZGVmaW5lIGJSeEFHQ1RvZ2V0aGVyRW4gICAgICAgICAweDIKLSNkZWZpbmUgYlJ4QUdDTWluICAgICAgICAgICAgICAgIDB4NAotI2RlZmluZSBiUnhIUF9JbmkgICAgICAgICAgICAgICAgMHg3Ci0jZGVmaW5lIGJSeEhQX1RSTE5BICAgICAgICAgICAgICAweDcwCi0jZGVmaW5lIGJSeEhQX1JTU0kgICAgICAgICAgICAgICAweDcwMAotI2RlZmluZSBiUnhIUF9CQlAxICAgICAgICAgICAgICAgMHg3MDAwCi0jZGVmaW5lIGJSeEhQX0JCUDIgICAgICAgICAgICAgICAweDcwMDAwCi0jZGVmaW5lIGJSeEhQX0JCUDMgICAgICAgICAgICAgICAweDcwMDAwMAotI2RlZmluZSBiUlNTSV9IICAgICAgICAgICAgICAgICAgMHg3ZjAwMDAgICAgIC8vdGhlIHRocmVzaG9sZCBmb3IgaGlnaCBwb3dlcgotI2RlZmluZSBiUlNTSV9HZW4gICAgICAgICAgICAgICAgMHg3ZjAwMDAwMCAgIC8vdGhlIHRocmVzaG9sZCBmb3IgYW50IGRpdmVyc2l0eQotI2RlZmluZSBiUnhTZXR0bGVfVFJTVyAgICAgICAgICAgMHg3Ci0jZGVmaW5lIGJSeFNldHRsZV9MTkEgICAgICAgICAgICAweDM4Ci0jZGVmaW5lIGJSeFNldHRsZV9SU1NJICAgICAgICAgICAweDFjMAotI2RlZmluZSBiUnhTZXR0bGVfQkJQICAgICAgICAgICAgMHhlMDAKLSNkZWZpbmUgYlJ4U2V0dGxlX1J4SFAgICAgICAgICAgIDB4NzAwMAotI2RlZmluZSBiUnhTZXR0bGVfQW50U1dfUlNTSSAgICAgMHgzODAwMAotI2RlZmluZSBiUnhTZXR0bGVfQW50U1cgICAgICAgICAgMHhjMDAwMAotI2RlZmluZSBiUnhQcm9jZXNzVGltZV9EQUdDICAgICAgMHgzMDAwMDAKLSNkZWZpbmUgYlJ4U2V0dGxlX0hTU0kgICAgICAgICAgIDB4NDAwMDAwCi0jZGVmaW5lIGJSeFByb2Nlc3NUaW1lX0JCUFBXICAgICAweDgwMDAwMAotI2RlZmluZSBiUnhBbnRlbm5hUG93ZXJTaGlmdCAgICAgMHgzMDAwMDAwCi0jZGVmaW5lIGJSU1NJVGFibGVTZWxlY3QgICAgICAgICAweGMwMDAwMDAKLSNkZWZpbmUgYlJ4SFBfRmluYWwgICAgICAgICAgICAgIDB4NzAwMDAwMAotI2RlZmluZSBiUnhIVFNldHRsZV9CQlAgICAgICAgICAgMHg3Ci0jZGVmaW5lIGJSeEhUU2V0dGxlX0hTU0kgICAgICAgICAweDgKLSNkZWZpbmUgYlJ4SFRTZXR0bGVfUnhIUCAgICAgICAgIDB4NzAKLSNkZWZpbmUgYlJ4SFRTZXR0bGVfQkJQUFcgICAgICAgIDB4ODAKLSNkZWZpbmUgYlJ4SFRTZXR0bGVfSWRsZSAgICAgICAgIDB4MzAwCi0jZGVmaW5lIGJSeEhUU2V0dGxlX1Jlc2VydmVkICAgICAweDFjMDAKLSNkZWZpbmUgYlJ4SFRSeEhQRW4gICAgICAgICAgICAgIDB4ODAwMAotI2RlZmluZSBiUnhIVEFHQ0ZyZWV6ZVRocmVzICAgICAgMHgzMDAwMAotI2RlZmluZSBiUnhIVEFHQ1RvZ2V0aGVyRW4gICAgICAgMHg0MDAwMAotI2RlZmluZSBiUnhIVEFHQ01pbiAgICAgICAgICAgICAgMHg4MDAwMAotI2RlZmluZSBiUnhIVEFHQ0VuICAgICAgICAgICAgICAgMHgxMDAwMDAKLSNkZWZpbmUgYlJ4SFREQUdDRW4gICAgICAgICAgICAgIDB4MjAwMDAwCi0jZGVmaW5lIGJSeEhUUnhIUF9CQlAgICAgICAgICAgICAweDFjMDAwMDAKLSNkZWZpbmUgYlJ4SFRSeEhQX0ZpbmFsICAgICAgICAgIDB4ZTAwMDAwMDAKLSNkZWZpbmUgYlJ4UFdSYXRpb1RIICAgICAgICAgICAgIDB4MwotI2RlZmluZSBiUnhQV1JhdGlvRW4gICAgICAgICAgICAgMHg0Ci0jZGVmaW5lIGJSeE1GSG9sZCAgICAgICAgICAgICAgICAweDM4MDAKLSNkZWZpbmUgYlJ4UERfRGVsYXlfVEgxICAgICAgICAgIDB4MzgKLSNkZWZpbmUgYlJ4UERfRGVsYXlfVEgyICAgICAgICAgIDB4MWMwCi0jZGVmaW5lIGJSeFBEX0RDX0NPVU5UX01BWCAgICAgICAweDYwMAotLy8jZGVmaW5lIGJSeE1GX0hvbGQgICAgICAgICAgICAgICAweDM4MDAKKy8qIFBhZ2UgYyAqLworI2RlZmluZSBiTnVtT2ZTVEYgICAgICAgICAgICAgICAgCTB4MworI2RlZmluZSBiU2hpZnRfTCAgICAgICAgICAgICAgICAgCTB4YzAKKyNkZWZpbmUgYkdJX1RIICAgICAgICAgICAgICAgICAgIAkweGMKKyNkZWZpbmUgYlJ4UGF0aEEgICAgICAgICAgICAgICAgIAkweDEKKyNkZWZpbmUgYlJ4UGF0aEIgICAgICAgICAgICAgICAgIAkweDIKKyNkZWZpbmUgYlJ4UGF0aEMgICAgICAgICAgICAgICAgIAkweDQKKyNkZWZpbmUgYlJ4UGF0aEQgICAgICAgICAgICAgICAgIAkweDgKKyNkZWZpbmUgYlR4UGF0aEEgICAgICAgICAgICAgICAgIAkweDEKKyNkZWZpbmUgYlR4UGF0aEIgICAgICAgICAgICAgICAgIAkweDIKKyNkZWZpbmUgYlR4UGF0aEMgICAgICAgICAgICAgICAgIAkweDQKKyNkZWZpbmUgYlR4UGF0aEQgICAgICAgICAgICAgICAgIAkweDgKKyNkZWZpbmUgYlRSU1NJRnJlcSAgICAgICAgICAgICAgIAkweDIwMAorI2RlZmluZSBiQURDQmFja29mZiAgICAgICAgICAgICAgCTB4MzAwMAorI2RlZmluZSBiREZJUkJhY2tvZmYgICAgICAgICAgICAgCTB4YzAwMAorI2RlZmluZSBiVFJTU0lMYXRjaFBoYXNlICAgICAgICAgCTB4MTAwMDAKKyNkZWZpbmUgYlJ4SURDT2Zmc2V0ICAgICAgICAgICAgIAkweGZmCisjZGVmaW5lIGJSeFFEQ09mZnNldCAgICAgICAgICAgICAJMHhmZjAwCisjZGVmaW5lIGJSeERGSVJNb2RlICAgICAgICAgICAgICAJMHgxODAwMDAwCisjZGVmaW5lIGJSeERDTkZUeXBlICAgICAgICAgICAgICAJMHhlMDAwMDAwCisjZGVmaW5lIGJSWElRSW1iX0EgICAgICAgICAgICAgICAJMHgzZmYKKyNkZWZpbmUgYlJYSVFJbWJfQiAgICAgICAgICAgICAgIAkweGZjMDAKKyNkZWZpbmUgYlJYSVFJbWJfQyAgICAgICAgICAgICAgIAkweDNmMDAwMAorI2RlZmluZSBiUlhJUUltYl9EICAgICAgICAgICAgICAgCTB4ZmZjMDAwMDAKKyNkZWZpbmUgYkRDX2RjX05vdGNoICAgICAgICAgICAgIAkweDYwMDAwCisjZGVmaW5lIGJSeE5CSU5vdGNoICAgICAgICAgICAgICAJMHgxZjAwMDAwMAorI2RlZmluZSBiUERfVEggICAgICAgICAgICAgICAgICAgCTB4ZgorI2RlZmluZSBiUERfVEhfT3B0MiAgICAgICAgICAgICAgCTB4YzAwMAorI2RlZmluZSBiUFdFRF9USCAgICAgICAgICAgICAgICAgCTB4NzAwCisjZGVmaW5lIGJJZk1GX1dpbl9MICAgICAgICAgICAgICAJMHg4MDAKKyNkZWZpbmUgYlBEX09wdGlvbiAgICAgICAgICAgICAgIAkweDEwMDAKKyNkZWZpbmUgYk1GX1dpbl9MICAgICAgICAgICAgICAgIAkweGUwMDAKKyNkZWZpbmUgYkJXX1NlYXJjaF9MICAgICAgICAgICAgIAkweDMwMDAwCisjZGVmaW5lIGJ3aW5fZW5oX0wgICAgICAgICAgICAgICAJMHhjMDAwMAorI2RlZmluZSBiQldfVEggICAgICAgICAgICAgICAgICAgCTB4NzAwMDAwCisjZGVmaW5lIGJFRF9USDIgICAgICAgICAgICAgICAgICAJMHgzODAwMDAwCisjZGVmaW5lIGJCV19vcHRpb24gICAgICAgICAgICAgICAJMHg0MDAwMDAwCisjZGVmaW5lIGJSYXRpb19USCAgICAgICAgICAgICAgICAJMHgxODAwMDAwMAorI2RlZmluZSBiV2luZG93X0wgICAgICAgICAgICAgICAgCTB4ZTAwMDAwMDAKKyNkZWZpbmUgYlNCRF9PcHRpb24gICAgICAgICAgICAgIAkweDEKKyNkZWZpbmUgYkZyYW1lX1RIICAgICAgICAgICAgICAgIAkweDFjCisjZGVmaW5lIGJGU19PcHRpb24gICAgICAgICAgICAgICAJMHg2MAorI2RlZmluZSBiRENfU2xvcGVfY2hlY2sgICAgICAgICAgCTB4ODAKKyNkZWZpbmUgYkZHdWFyZF9Db3VudGVyX0RDX0wgICAgIAkweGUwMAorI2RlZmluZSBiRnJhbWVfV2VpZ2h0X1Nob3J0ICAgICAgCTB4NzAwMAorI2RlZmluZSBiU3ViX1R1bmUgICAgICAgICAgICAgICAgCTB4ZTAwMDAwCisjZGVmaW5lIGJGcmFtZV9EQ19MZW5ndGggICAgICAgICAJMHhlMDAwMDAwCisjZGVmaW5lIGJTQkRfc3RhcnRfb2Zmc2V0ICAgICAgICAJMHgzMDAwMDAwMAorI2RlZmluZSBiRnJhbWVfVEhfMiAgICAgICAgICAgICAgCTB4NworI2RlZmluZSBiRnJhbWVfR0kyX1RIICAgICAgICAgICAgCTB4MzgKKyNkZWZpbmUgYkdJMl9TeW5jX2VuICAgICAgICAgICAgIAkweDQwCisjZGVmaW5lIGJTYXJjaF9TaG9ydF9FYXJseSAgICAgICAJMHgzMDAKKyNkZWZpbmUgYlNhcmNoX1Nob3J0X0xhdGUgICAgICAgIAkweGMwMAorI2RlZmluZSBiU2FyY2hfR0kyX0xhdGUgICAgICAgICAgCTB4NzAwMDAKKyNkZWZpbmUgYkNGT0FudFN1bSAgICAgICAgICAgICAgIAkweDEKKyNkZWZpbmUgYkNGT0FjYyAgICAgICAgICAgICAgICAgIAkweDIKKyNkZWZpbmUgYkNGT1N0YXJ0T2Zmc2V0ICAgICAgICAgIAkweGMKKyNkZWZpbmUgYkNGT0xvb2tCYWNrICAgICAgICAgICAgIAkweDcwCisjZGVmaW5lIGJDRk9TdW1XZWlnaHQgICAgICAgICAgICAJMHg4MAorI2RlZmluZSBiREFHQ0VuYWJsZSAgICAgICAgICAgICAgCTB4MTAwMDAKKyNkZWZpbmUgYlRYSVFJbWJfQSAgICAgICAgICAgICAgIAkweDNmZgorI2RlZmluZSBiVFhJUUltYl9CICAgICAgICAgICAgICAgCTB4ZmMwMAorI2RlZmluZSBiVFhJUUltYl9DICAgICAgICAgICAgICAgCTB4M2YwMDAwCisjZGVmaW5lIGJUWElRSW1iX0QgICAgICAgICAgICAgICAJMHhmZmMwMDAwMAorI2RlZmluZSBiVHhJRENPZmZzZXQgICAgICAgICAgICAgCTB4ZmYKKyNkZWZpbmUgYlR4UURDT2Zmc2V0ICAgICAgICAgICAgIAkweGZmMDAKKyNkZWZpbmUgYlR4REZJUk1vZGUgICAgICAgICAgICAgIAkweDEwMDAwCisjZGVmaW5lIGJUeFBlc3Vkb05vaXNlT24gICAgICAgICAJMHg0MDAwMDAwCisjZGVmaW5lIGJUeFBlc3Vkb05vaXNlX0EgICAgICAgICAJMHhmZgorI2RlZmluZSBiVHhQZXN1ZG9Ob2lzZV9CICAgICAgICAgCTB4ZmYwMAorI2RlZmluZSBiVHhQZXN1ZG9Ob2lzZV9DICAgICAgICAgCTB4ZmYwMDAwCisjZGVmaW5lIGJUeFBlc3Vkb05vaXNlX0QgICAgICAgICAJMHhmZjAwMDAwMAorI2RlZmluZSBiQ0NBRHJvcE9wdGlvbiAgICAgICAgICAgCTB4MjAwMDAKKyNkZWZpbmUgYkNDQURyb3BUaHJlcyAgICAgICAgICAgIAkweGZmZjAwMDAwCisjZGVmaW5lIGJFRENDQV9IICAgICAgICAgICAgICAgICAJMHhmCisjZGVmaW5lIGJFRENDQV9MICAgICAgICAgICAgICAgICAJMHhmMAorI2RlZmluZSBiTGFtYmRhX0VEICAgICAgICAgICAgICAgCTB4MzAwCisjZGVmaW5lIGJSeEluaXRpYWxHYWluICAgICAgICAgICAJMHg3ZgorI2RlZmluZSBiUnhBbnREaXZFbiAgICAgICAgICAgICAgCTB4ODAKKyNkZWZpbmUgYlJ4QUdDQWRkcmVzc0ZvckxOQSAgICAgIAkweDdmMDAKKyNkZWZpbmUgYlJ4SGlnaFBvd2VyRmxvdyAgICAgICAgIAkweDgwMDAKKyNkZWZpbmUgYlJ4QUdDRnJlZXplVGhyZXMgICAgICAgIAkweGMwMDAwCisjZGVmaW5lIGJSeEZyZWV6ZVN0ZXBfQUdDMSAgICAgICAJMHgzMDAwMDAKKyNkZWZpbmUgYlJ4RnJlZXplU3RlcF9BR0MyICAgICAgIAkweGMwMDAwMAorI2RlZmluZSBiUnhGcmVlemVTdGVwX0FHQzMgICAgICAgCTB4MzAwMDAwMAorI2RlZmluZSBiUnhGcmVlemVTdGVwX0FHQzAgICAgICAgCTB4YzAwMDAwMAorI2RlZmluZSBiUnhSc3NpX0NtcF9FbiAgICAgICAgICAgCTB4MTAwMDAwMDAKKyNkZWZpbmUgYlJ4UXVpY2tBR0NFbiAgICAgICAgICAgIAkweDIwMDAwMDAwCisjZGVmaW5lIGJSeEFHQ0ZyZWV6ZVRocmVzTW9kZSAgICAJMHg0MDAwMDAwMAorI2RlZmluZSBiUnhPdmVyRmxvd0NoZWNrVHlwZSAgICAgCTB4ODAwMDAwMDAKKyNkZWZpbmUgYlJ4QUdDU2hpZnQgICAgICAgICAgICAgIAkweDdmCisjZGVmaW5lIGJUUlNXX1RyaV9Pbmx5ICAgICAgICAgICAJMHg4MAorI2RlZmluZSBiUG93ZXJUaHJlcyAgICAgICAgICAgICAgCTB4MzAwCisjZGVmaW5lIGJSeEFHQ0VuICAgICAgICAgICAgICAgIAkweDEKKyNkZWZpbmUgYlJ4QUdDVG9nZXRoZXJFbiAgICAgICAgIAkweDIKKyNkZWZpbmUgYlJ4QUdDTWluICAgICAgICAgICAgICAgIAkweDQKKyNkZWZpbmUgYlJ4SFBfSW5pICAgICAgICAgICAgICAgIAkweDcKKyNkZWZpbmUgYlJ4SFBfVFJMTkEgICAgICAgICAgICAgIAkweDcwCisjZGVmaW5lIGJSeEhQX1JTU0kgICAgICAgICAgICAgICAJMHg3MDAKKyNkZWZpbmUgYlJ4SFBfQkJQMSAgICAgICAgICAgICAgIAkweDcwMDAKKyNkZWZpbmUgYlJ4SFBfQkJQMiAgICAgICAgICAgICAgIAkweDcwMDAwCisjZGVmaW5lIGJSeEhQX0JCUDMgICAgICAgICAgICAgICAJMHg3MDAwMDAKKy8qIFRoZSB0aHJlc2hvbGQgZm9yIGhpZ2ggcG93ZXIgKi8KKyNkZWZpbmUgYlJTU0lfSCAgICAgICAgICAgICAgICAgIAkweDdmMDAwMAorLyogVGhlIHRocmVzaG9sZCBmb3IgYW50IGRpdmVyc2l0eSAqLworI2RlZmluZSBiUlNTSV9HZW4gICAgICAgICAgICAgICAgCTB4N2YwMDAwMDAKKyNkZWZpbmUgYlJ4U2V0dGxlX1RSU1cgICAgICAgICAgIAkweDcKKyNkZWZpbmUgYlJ4U2V0dGxlX0xOQSAgICAgICAgICAgIAkweDM4CisjZGVmaW5lIGJSeFNldHRsZV9SU1NJICAgICAgICAgICAJMHgxYzAKKyNkZWZpbmUgYlJ4U2V0dGxlX0JCUCAgICAgICAgICAgIAkweGUwMAorI2RlZmluZSBiUnhTZXR0bGVfUnhIUCAgICAgICAgICAgCTB4NzAwMAorI2RlZmluZSBiUnhTZXR0bGVfQW50U1dfUlNTSSAgICAgCTB4MzgwMDAKKyNkZWZpbmUgYlJ4U2V0dGxlX0FudFNXICAgICAgICAgIAkweGMwMDAwCisjZGVmaW5lIGJSeFByb2Nlc3NUaW1lX0RBR0MgICAgICAJMHgzMDAwMDAKKyNkZWZpbmUgYlJ4U2V0dGxlX0hTU0kgICAgICAgICAgIAkweDQwMDAwMAorI2RlZmluZSBiUnhQcm9jZXNzVGltZV9CQlBQVyAgICAgCTB4ODAwMDAwCisjZGVmaW5lIGJSeEFudGVubmFQb3dlclNoaWZ0ICAgICAJMHgzMDAwMDAwCisjZGVmaW5lIGJSU1NJVGFibGVTZWxlY3QgICAgICAgICAJMHhjMDAwMDAwCisjZGVmaW5lIGJSeEhQX0ZpbmFsICAgICAgICAgICAgICAJMHg3MDAwMDAwCisjZGVmaW5lIGJSeEhUU2V0dGxlX0JCUCAgICAgICAgICAJMHg3CisjZGVmaW5lIGJSeEhUU2V0dGxlX0hTU0kgICAgICAgICAJMHg4CisjZGVmaW5lIGJSeEhUU2V0dGxlX1J4SFAgICAgICAgICAJMHg3MAorI2RlZmluZSBiUnhIVFNldHRsZV9CQlBQVyAgICAgICAgCTB4ODAKKyNkZWZpbmUgYlJ4SFRTZXR0bGVfSWRsZSAgICAgICAgIAkweDMwMAorI2RlZmluZSBiUnhIVFNldHRsZV9SZXNlcnZlZCAgICAgCTB4MWMwMAorI2RlZmluZSBiUnhIVFJ4SFBFbiAgICAgICAgICAgICAgCTB4ODAwMAorI2RlZmluZSBiUnhIVEFHQ0ZyZWV6ZVRocmVzICAgICAgCTB4MzAwMDAKKyNkZWZpbmUgYlJ4SFRBR0NUb2dldGhlckVuICAgICAgIAkweDQwMDAwCisjZGVmaW5lIGJSeEhUQUdDTWluICAgICAgICAgICAgICAJMHg4MDAwMAorI2RlZmluZSBiUnhIVEFHQ0VuICAgICAgICAgICAgICAgCTB4MTAwMDAwCisjZGVmaW5lIGJSeEhUREFHQ0VuICAgICAgICAgICAgICAJMHgyMDAwMDAKKyNkZWZpbmUgYlJ4SFRSeEhQX0JCUCAgICAgICAgICAgIAkweDFjMDAwMDAKKyNkZWZpbmUgYlJ4SFRSeEhQX0ZpbmFsICAgICAgICAgIAkweGUwMDAwMDAwCisjZGVmaW5lIGJSeFBXUmF0aW9USCAgICAgICAgICAgICAJMHgzCisjZGVmaW5lIGJSeFBXUmF0aW9FbiAgICAgICAgICAgICAJMHg0CisjZGVmaW5lIGJSeE1GSG9sZCAgICAgICAgICAgICAgICAJMHgzODAwCisjZGVmaW5lIGJSeFBEX0RlbGF5X1RIMSAgICAgICAgICAJMHgzOAorI2RlZmluZSBiUnhQRF9EZWxheV9USDIgICAgICAgICAgCTB4MWMwCisjZGVmaW5lIGJSeFBEX0RDX0NPVU5UX01BWCAgICAgICAJMHg2MDAKKy8qI2RlZmluZSBiUnhNRl9Ib2xkICAgICAgICAgICAgICAgCTB4MzgwMCovCiAjZGVmaW5lIGJSeFBEX0RlbGF5X1RIICAgICAgICAgICAweDgwMDAKICNkZWZpbmUgYlJ4UHJvY2Vzc19EZWxheSAgICAgICAgIDB4ZjAwMDAKICNkZWZpbmUgYlJ4U2VhcmNocmFuZ2VfR0kyX0Vhcmx5IDB4NzAwMDAwCkBAIC02NTksNyArNjkyLDcgQEAKIAogI2RlZmluZSBiRXh0TE5BR2FpbiAgICAgICAgICAgICAgMHg3YzAwCiAKLS8vcGFnZSBkCisvKiBQYWdlIGQgKi8KICNkZWZpbmUgYlNUQkNFbiAgICAgICAgICAgICAgICAgIDB4NAogI2RlZmluZSBiQW50ZW5uYU1hcHBpbmcgICAgICAgICAgMHgxMAogI2RlZmluZSBiTnNzICAgICAgICAgICAgICAgICAgICAgMHgyMApAQCAtNjY5LDEyICs3MDIsMTIgQEAKICNkZWZpbmUgYk9GRE1Db250aW51ZVR4ICAgICAgICAgIDB4MTAwMDAwMDAKICNkZWZpbmUgYk9GRE1TaW5nbGVDYXJyaWVyICAgICAgIDB4MjAwMDAwMDAKICNkZWZpbmUgYk9GRE1TaW5nbGVUb25lICAgICAgICAgIDB4NDAwMDAwMDAKLS8vI2RlZmluZSBiUnhQYXRoMSAgICAgICAgICAgICAgICAgMHgwMQotLy8jZGVmaW5lIGJSeFBhdGgyICAgICAgICAgICAgICAgICAweDAyCi0vLyNkZWZpbmUgYlJ4UGF0aDMgICAgICAgICAgICAgICAgIDB4MDQKLS8vI2RlZmluZSBiUnhQYXRoNCAgICAgICAgICAgICAgICAgMHgwOAotLy8jZGVmaW5lIGJUeFBhdGgxICAgICAgICAgICAgICAgICAweDEwCi0vLyNkZWZpbmUgYlR4UGF0aDIgICAgICAgICAgICAgICAgIDB4MjAKKy8qI2RlZmluZSBiUnhQYXRoMSAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBiUnhQYXRoMiAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBiUnhQYXRoMyAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBiUnhQYXRoNCAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBiVHhQYXRoMSAgICAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBiVHhQYXRoMiAgICAgICAgICAgICAgICAgMHgyMCovCiAjZGVmaW5lIGJIVERldGVjdCAgICAgICAgICAgICAgICAweDEwMAogI2RlZmluZSBiQ0ZPRW4gICAgICAgICAgICAgICAgICAgMHgxMDAwMAogI2RlZmluZSBiQ0ZPVmFsdWUgICAgICAgICAgICAgICAgMHhmZmYwMDAwMApAQCAtNjg3LDggKzcyMCwxMCBAQAogI2RlZmluZSBiQ291bnRlcl9NQ1NOb1N1cHBvcnQgICAgMHhmZmZmCiAjZGVmaW5lIGJDb3VudGVyX0Zhc3RTeW5jICAgICAgICAweGZmZmYKICNkZWZpbmUgYlNob3J0Q0ZPICAgICAgICAgICAgICAgIDB4ZmZmCi0jZGVmaW5lIGJTaG9ydENGT1RMZW5ndGggICAgICAgICAxMiAgIC8vdG90YWwKLSNkZWZpbmUgYlNob3J0Q0ZPRkxlbmd0aCAgICAgICAgIDExICAgLy9mcmFjdGlvbgorLyogdG90YWwgKi8KKyNkZWZpbmUgYlNob3J0Q0ZPVExlbmd0aCAgICAgICAgIDEyCisvKiBmcmFjdGlvbiAqLworI2RlZmluZSBiU2hvcnRDRk9GTGVuZ3RoICAgICAgICAgMTEKICNkZWZpbmUgYkxvbmdDRk8gICAgICAgICAgICAgICAgIDB4N2ZmCiAjZGVmaW5lIGJMb25nQ0ZPVExlbmd0aCAgICAgICAgICAxMQogI2RlZmluZSBiTG9uZ0NGT0ZMZW5ndGggICAgICAgICAgMTEKQEAgLTc2NSwxOCArODAwLDE4IEBACiAjZGVmaW5lIGJVQ2hDZmcgICAgICAgICAgICAgICAgICAweDcwMDAwMDAKICNkZWZpbmUgYlVwZEVxeiAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMAogCi0vL3BhZ2UgZQotI2RlZmluZSBiVHhBR0NSYXRlMThfMDYJCQkweDdmN2Y3ZjdmCi0jZGVmaW5lIGJUeEFHQ1JhdGU1NF8yNAkJCTB4N2Y3ZjdmN2YKKy8qIFBhZ2UgZSAqLworI2RlZmluZSBiVHhBR0NSYXRlMThfMDYJCTB4N2Y3ZjdmN2YKKyNkZWZpbmUgYlR4QUdDUmF0ZTU0XzI0CQkweDdmN2Y3ZjdmCiAjZGVmaW5lIGJUeEFHQ1JhdGVNQ1MzMgkJMHg3ZgotI2RlZmluZSBiVHhBR0NSYXRlQ0NLCQkJMHg3ZjAwCisjZGVmaW5lIGJUeEFHQ1JhdGVDQ0sJCTB4N2YwMAogI2RlZmluZSBiVHhBR0NSYXRlTUNTM19NQ1MwCTB4N2Y3ZjdmN2YKICNkZWZpbmUgYlR4QUdDUmF0ZU1DUzdfTUNTNAkweDdmN2Y3ZjdmCiAjZGVmaW5lIGJUeEFHQ1JhdGVNQ1MxMV9NQ1M4CTB4N2Y3ZjdmN2YKICNkZWZpbmUgYlR4QUdDUmF0ZU1DUzE1X01DUzEyCTB4N2Y3ZjdmN2YKIAogCi0vL1J4IFBzZWR1byBub2lzZQorLyogUnggUHNlZHVvIG5vaXNlICovCiAjZGVmaW5lIGJSeFBlc3Vkb05vaXNlT24gICAgICAgICAweDIwMDAwMDAwCiAjZGVmaW5lIGJSeFBlc3Vkb05vaXNlX0EgICAgICAgICAweGZmCiAjZGVmaW5lIGJSeFBlc3Vkb05vaXNlX0IgICAgICAgICAweGZmMDAKQEAgLTc4Nyw4ICs4MjIsNyBAQAogI2RlZmluZSBiUGVzdWRvTm9pc2VTdGF0ZV9DICAgICAgMHhmZmZmCiAjZGVmaW5lIGJQZXN1ZG9Ob2lzZVN0YXRlX0QgICAgICAweGZmZmYwMDAwCiAKLS8vUkYKLS8vWmVicmExCisvKiBSRiBaZWJyYSAxICovCiAjZGVmaW5lIGJaZWJyYTFfSFNTSUVuYWJsZSAgICAgICAgMHg4CiAjZGVmaW5lIGJaZWJyYTFfVFJ4Q29udHJvbCAgICAgICAgMHhjMDAKICNkZWZpbmUgYlplYnJhMV9UUnhHYWluU2V0dGluZyAgICAweDA3ZgpAQCAtNzk5LDcgKzgzMyw3IEBACiAjZGVmaW5lIGJaZWJyYTFfVHhMUEZCVyAgICAgICAgICAgMHg0MDAKICNkZWZpbmUgYlplYnJhMV9SeExQRkJXICAgICAgICAgICAweDYwMAogCi0vL1plYnJhNAorLyogWmVicmE0ICovCiAjZGVmaW5lIGJSVEw4MjU2UmVnTW9kZUN0cmwxICAgICAgMHgxMDAKICNkZWZpbmUgYlJUTDgyNTZSZWdNb2RlQ3RybDAgICAgICAweDQwCiAjZGVmaW5lIGJSVEw4MjU2X1R4TFBGQlcgICAgICAgICAgMHgxOApAQCAtODEwLDcgKzg0NCw3IEBACiAjZGVmaW5lIGJSVEw4MjU4X1J4TFBGQlcgICAgICAgICAgMHhjMDAKICNkZWZpbmUgYlJUTDgyNThfUlNTSUxQRkJXICAgICAgICAweGMwCiAKLS8vYnl0ZSBlbmRhYmxlIGZvciBzYl93cml0ZQorLyogYnl0ZSBlbmRhYmxlIGZvciBzYl93cml0ZSAqLwogI2RlZmluZSBiQnl0ZTAgICAgICAgICAgICAgICAgICAgIDB4MQogI2RlZmluZSBiQnl0ZTEgICAgICAgICAgICAgICAgICAgIDB4MgogI2RlZmluZSBiQnl0ZTIgICAgICAgICAgICAgICAgICAgIDB4NApAQCAtODE5LDcgKzg1Myw3IEBACiAjZGVmaW5lIGJXb3JkMSAgICAgICAgICAgICAgICAgICAgMHhjCiAjZGVmaW5lIGJEV29yZCAgICAgICAgICAgICAgICAgICAgMHhmCiAKLS8vZm9yIFB1dFJlZ3NldHRpbmcgJiBHZXRSZWdTZXR0aW5nIEJpdE1hc2sKKy8qIGZvciBQdXRSZWdzZXR0aW5nICYgR2V0UmVnU2V0dGluZyBCaXRNYXNrICovCiAjZGVmaW5lIGJNYXNrQnl0ZTAgICAgICAgICAgICAgICAgMHhmZgogI2RlZmluZSBiTWFza0J5dGUxICAgICAgICAgICAgICAgIDB4ZmYwMAogI2RlZmluZSBiTWFza0J5dGUyICAgICAgICAgICAgICAgIDB4ZmYwMDAwCkBAIC04MjgsNyArODYyLDcgQEAKICNkZWZpbmUgYk1hc2tMV29yZCAgICAgICAgICAgICAgICAweDAwMDBmZmZmCiAjZGVmaW5lIGJNYXNrRFdvcmQgICAgICAgICAgICAgICAgMHhmZmZmZmZmZgogCi0vL2ZvciBQdXRSRlJlZ3NldHRpbmcgJiBHZXRSRlJlZ1NldHRpbmcgQml0TWFzaworLyogZm9yIFB1dFJGUmVnc2V0dGluZyAmIEdldFJGUmVnU2V0dGluZyBCaXRNYXNrICovCiAjZGVmaW5lIGJNYXNrMTJCaXRzICAgICAgICAgICAgICAgMHhmZmYKIAogI2RlZmluZSBiRW5hYmxlICAgICAgICAgICAgICAgICAgIDB4MQpAQCAtODM3LDE0ICs4NzEsMTYgQEAKICNkZWZpbmUgTGVmdEFudGVubmEgICAgICAgICAgICAgICAweDAKICNkZWZpbmUgUmlnaHRBbnRlbm5hICAgICAgICAgICAgICAweDEKIAotI2RlZmluZSB0Q2hlY2tUeFN0YXR1cyAgICAgICAgICAgIDUwMCAgIC8vNTAwbXMKLSNkZWZpbmUgdFVwZGF0ZVJ4Q291bnRlciAgICAgICAgICAxMDAgICAvLzEwMG1zCisvKiA1MDAgbXMgKi8KKyNkZWZpbmUgdENoZWNrVHhTdGF0dXMgICAgICAgICAgICA1MDAKKy8qIDEwMCBtcyAqLworI2RlZmluZSB0VXBkYXRlUnhDb3VudGVyICAgICAgICAgIDEwMAogCiAjZGVmaW5lIHJhdGVDQ0sgICAgIDAKICNkZWZpbmUgcmF0ZU9GRE0gICAgMQogI2RlZmluZSByYXRlSFQgICAgICAyCiAKLS8vZGVmaW5lIFJlZ2lzdGVyLUVuZAorLyogZGVmaW5lIFJlZ2lzdGVyLUVuZCAqLwogI2RlZmluZSBiUE1BQ19FbmQgICAgICAgICAgICAgICAgIDB4MWZmCiAjZGVmaW5lIGJGUEdBUEhZMF9FbmQgICAgICAgICAgICAgMHg4ZmYKICNkZWZpbmUgYkZQR0FQSFkxX0VuZCAgICAgICAgICAgICAweDlmZgpAQCAtODUyLDEyICs4ODgsMTIgQEAKICNkZWZpbmUgYk9GRE1QSFkwX0VuZCAgICAgICAgICAgICAweGNmZgogI2RlZmluZSBiT0ZETVBIWTFfRW5kICAgICAgICAgICAgIDB4ZGZmCiAKLS8vZGVmaW5lIG1heCBkZWJ1ZyBpdGVtIGluIGVhY2ggZGVidWcgcGFnZQotLy8jZGVmaW5lIGJNYXhJdGVtX0ZQR0FfUEhZMCAgICAgICAgMHg5Ci0vLyNkZWZpbmUgYk1heEl0ZW1fRlBHQV9QSFkxICAgICAgICAweDMKLS8vI2RlZmluZSBiTWF4SXRlbV9QSFlfMTFCICAgICAgICAgIDB4MTYKLS8vI2RlZmluZSBiTWF4SXRlbV9PRkRNX1BIWTAgICAgICAgIDB4MjkKLS8vI2RlZmluZSBiTWF4SXRlbV9PRkRNX1BIWTEgICAgICAgIDB4MAorLyojZGVmaW5lIG1heCBkZWJ1ZyBpdGVtIGluIGVhY2ggZGVidWcgcGFnZQorI2RlZmluZSBiTWF4SXRlbV9GUEdBX1BIWTAgICAgICAgIDB4OQorI2RlZmluZSBiTWF4SXRlbV9GUEdBX1BIWTEgICAgICAgIDB4MworI2RlZmluZSBiTWF4SXRlbV9QSFlfMTFCICAgICAgICAgIDB4MTYKKyNkZWZpbmUgYk1heEl0ZW1fT0ZETV9QSFkwICAgICAgICAweDI5CisjZGVmaW5lIGJNYXhJdGVtX09GRE1fUEhZMSAgICAgICAgMHgwICovCiAKICNkZWZpbmUgYlBNQUNDb250cm9sICAgICAgICAgICAgICAweDAKICNkZWZpbmUgYldNQUNDb250cm9sICAgICAgICAgICAgICAweDEKQEAgLTg2OCwxMSArOTA0LDEyIEBACiAjZGVmaW5lIFBhdGhDICAgICAgICAgICAgICAgICAgICAgMHgyCiAjZGVmaW5lIFBhdGhEICAgICAgICAgICAgICAgICAgICAgMHgzCiAKLSNkZWZpbmUJclJUTDgyNTZSeE1peGVyUG9sZQkJMHhiCi0jZGVmaW5lIAliWmVicmFSeE1peGVyUG9sZQkJMHg2Ci0jZGVmaW5lIAlyUlRMODI1NlR4QkJPUEJpYXMgICAgICAgIDB4OQotI2RlZmluZSAJYlJUTDgyNTZUeEJCT1BCaWFzICAgICAgIDB4NDAwCi0jZGVmaW5lIAlyUlRMODI1NlR4QkJCVyAgICAgICAgICAgICAxOQotI2RlZmluZSAJYlJUTDgyNTZUeEJCQlcgICAgICAgICAgICAJMHgxOAorI2RlZmluZSByUlRMODI1NlJ4TWl4ZXJQb2xlCTB4YgorI2RlZmluZSBiWmVicmFSeE1peGVyUG9sZQkweDYKKyNkZWZpbmUgclJUTDgyNTZUeEJCT1BCaWFzCTB4OQorI2RlZmluZSBiUlRMODI1NlR4QkJPUEJpYXMJMHg0MDAKKyNkZWZpbmUgclJUTDgyNTZUeEJCQlcJCTE5CisjZGVmaW5lIGJSVEw4MjU2VHhCQkJXCQkweDE4CiAKLSNlbmRpZgkvL19fSU5DX0hBTDgxOTBQQ0lQSFlSRUdfSAorCisjZW5kaWYJLyogX19JTkNfSEFMODE5MFBDSVBIWVJFR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L0tjb25maWcKaW5kZXggMTIzZmE2ZC4uYjcyYTk2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvS2NvbmZpZwpAQCAtMSw2ICsxLDcgQEAKIGNvbmZpZyBSVEw4MTkyU1UKIAl0cmlzdGF0ZSAiUmVhbFRlayBSVEw4MTkyU1UgV2lyZWxlc3MgTEFOIE5JQyBkcml2ZXIiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgV0xBTiAmJiBVU0IKLQlkZXBlbmRzIG9uIFdJUkVMRVNTX0VYVAorCXNlbGVjdCBXSVJFTEVTU19FWFQKKwlzZWxlY3QgV0VYVF9QUklWCiAJZGVmYXVsdCBOCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9UT0RPCmluZGV4IGYxMWVlYzcuLjNjOGRhMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvVE9ETworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L1RPRE8KQEAgLTQsNyArNCw2IEBACiAgIC0gY2xlYW51cCBpZWVlODAyMTEuaAogICAtIG1vdmUgcnRsODE5MnN1J3Mgc3BlY2lmaWMgY29kZSBvdXQgZnJvbSBpZWVlODAyMTEuaAogICAtIGFic3RyYWN0IHJ0bDgxOXN1J3Mgc3BlY2lmaWMgY29kZQotICAtIHVzZSBsaXN0X2Zvcl9lYWNoX3NhZmUoKSBpbiBpZWVlODAyMTFfY3J5cHRvX2RlaW5pdAogLSBzd2l0Y2ggdG8gdXNlIHNoYXJlZCAibGlicnRsIiBpbnN0ZWFkIG9mIHByaXZhdGUgaWVlZTgwMjExIHN0YWNrCiAtIHN3aXRjaCB0byB1c2UgTElCODAyMTEKIC0gc3dpdGNoIHRvIHVzZSBNQUM4MDIxMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTEuaAppbmRleCAyYjhjODU1Li4zMmIyNjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTEuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CkBAIC0xOTUsMTAgKzE5Niw2IEBACiAjZGVmaW5lIElFRUU4MDIxMV9ERUJVR19EQVRBKGxldmVsLCBkYXRhLCBkYXRhbGVuKSBkbyB7fSB3aGlsZSgwKQogI2VuZGlmCS8qIENPTkZJR19JRUVFODAyMTFfREVCVUcgKi8KIAotI2RlZmluZSBNQUNfRk1UICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCIKLSNkZWZpbmUgTUFDX0FSRyh4KSAoKHU4ICopKHgpKVswXSwgKCh1OCAqKSh4KSlbMV0sICgodTggKikoeCkpWzJdLCBcCi0JCSAgICgodTggKikoeCkpWzNdLCAoKHU4ICopKHgpKVs0XSwgKCh1OCAqKSh4KSlbNV0KLQogLyoKICAqIFRvIHVzZSB0aGUgZGVidWcgc3lzdGVtOwogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKaW5kZXggNTIxZTdiOS4uYzQ2NDBlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKQEAgLTIyNiwxOSArMjI2LDIwIEBACiB2b2lkIF9fZXhpdCBpZWVlODAyMTFfY3J5cHRvX2RlaW5pdCh2b2lkKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnB0ciwgKm47CisJc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fYWxnICphbGcgPSBOVUxMOwogCiAJaWYgKGhjcnlwdCA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQlmb3IgKHB0ciA9IGhjcnlwdC0+YWxncy5uZXh0LCBuID0gcHRyLT5uZXh0OyBwdHIgIT0gJmhjcnlwdC0+YWxnczsKLQkgICAgIHB0ciA9IG4sIG4gPSBwdHItPm5leHQpIHsKLQkJc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fYWxnICphbGcgPQotCQkJKHN0cnVjdCBpZWVlODAyMTFfY3J5cHRvX2FsZyAqKSBwdHI7Ci0JCWxpc3RfZGVsKHB0cik7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJpZWVlODAyMTFfY3J5cHQ6IHVucmVnaXN0ZXJlZCBhbGdvcml0aG0gIgotCQkgICAgICAgIiclcycgKGRlaW5pdClcbiIsIGFsZy0+b3BzLT5uYW1lKTsKLQkJa2ZyZWUoYWxnKTsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocHRyLCBuLCAmaGNyeXB0LT5hbGdzKSB7CisJCWFsZyA9IGxpc3RfZW50cnkocHRyLCBzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0b19hbGcsIGxpc3QpOworCQlpZiAoYWxnKSB7CisJCQlsaXN0X2RlbChwdHIpOworCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICAgICAiaWVlZTgwMjExX2NyeXB0OiB1bnJlZ2lzdGVyZWQgYWxnb3JpdGhtICclcycgKGRlaW5pdClcbiIsCisJCQkgICAgICAgYWxnLT5vcHMtPm5hbWUpOworCQkJa2ZyZWUoYWxnKTsKKwkJfQogCX0KLQogCWtmcmVlKGhjcnlwdCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfY2NtcC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYwppbmRleCA3YmM5NTZlLi44YTkzZjdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfY2NtcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF9jY21wLmMKQEAgLTI4OCw3ICsyODgsNyBAQAogCWlmICghKGtleWlkeCAmICgxIDw8IDUpKSkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiQ0NNUDogcmVjZWl2ZWQgcGFja2V0IHdpdGhvdXQgRXh0SVYiCi0JCQkgICAgICAgIiBmbGFnIGZyb20gIiBNQUNfRk1UICJcbiIsIE1BQ19BUkcoaGRyLT5hZGRyMikpOworCQkJICAgICAgICIgZmxhZyBmcm9tICVwTVxuIiwgaGRyLT5hZGRyMik7CiAJCX0KIAkJa2V5LT5kb3QxMVJTTkFTdGF0c0NDTVBGb3JtYXRFcnJvcnMrKzsKIAkJcmV0dXJuIC0yOwpAQCAtMzAxLDkgKzMwMSw5IEBACiAJfQogCWlmICgha2V5LT5rZXlfc2V0KSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJDQ01QOiByZWNlaXZlZCBwYWNrZXQgZnJvbSAiIE1BQ19GTVQKKwkJCXByaW50ayhLRVJOX0RFQlVHICJDQ01QOiByZWNlaXZlZCBwYWNrZXQgZnJvbSAlcE0iCiAJCQkgICAgICAgIiB3aXRoIGtleWlkPSVkIHRoYXQgZG9lcyBub3QgaGF2ZSBhIGNvbmZpZ3VyZWQiCi0JCQkgICAgICAgIiBrZXlcbiIsIE1BQ19BUkcoaGRyLT5hZGRyMiksIGtleWlkeCk7CisJCQkgICAgICAgIiBrZXlcbiIsIGhkci0+YWRkcjIsIGtleWlkeCk7CiAJCX0KIAkJcmV0dXJuIC0zOwogCX0KQEAgLTMxOCwxMSArMzE4LDkgQEAKIAogCWlmIChtZW1jbXAocG4sIGtleS0+cnhfcG4sIENDTVBfUE5fTEVOKSA8PSAwKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJDQ01QOiByZXBsYXkgZGV0ZWN0ZWQ6IFNUQT0iIE1BQ19GTVQKLQkJCSAgICAgICAiIHByZXZpb3VzIFBOICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCAiCi0JCQkgICAgICAgInJlY2VpdmVkIFBOICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKLQkJCSAgICAgICBNQUNfQVJHKGhkci0+YWRkcjIpLCBNQUNfQVJHKGtleS0+cnhfcG4pLAotCQkJICAgICAgIE1BQ19BUkcocG4pKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJDQ01QOiByZXBsYXkgZGV0ZWN0ZWQ6IFNUQT0lcE0iCisJCQkgICAgICAgIiBwcmV2aW91cyBQTiAlcG0gcmVjZWl2ZWQgUE4gJXBtXG4iLAorCQkJICAgICAgIGhkci0+YWRkcjIsIGtleS0+cnhfcG4sIHBuKTsKIAkJfQogCQlrZXktPmRvdDExUlNOQVN0YXRzQ0NNUFJlcGxheXMrKzsKIAkJcmV0dXJuIC00OwpAQCAtMzU5LDcgKzM1Nyw3IEBACiAJCWlmIChtZW1jbXAobWljLCBhLCBDQ01QX01JQ19MRU4pICE9IDApIHsKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiQ0NNUDogZGVjcnlwdCBmYWlsZWQ6IFNUQT0iCi0JCQkJTUFDX0ZNVCAiXG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCQkiJXBNXG4iLCBoZHItPmFkZHIyKTsKIAkJCX0KIAkJCWtleS0+ZG90MTFSU05BU3RhdHNDQ01QRGVjcnlwdEVycm9ycysrOwogCQkJcmV0dXJuIC01OwpAQCAtNDM1LDExICs0MzMsMTAgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NjbXBfZGF0YSAqY2NtcCA9IHByaXY7CiAJcCArPSBzcHJpbnRmKHAsICJrZXlbJWRdIGFsZz1DQ01QIGtleV9zZXQ9JWQgIgotCQkgICAgICJ0eF9wbj0lMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggIgotCQkgICAgICJyeF9wbj0lMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggIgorCQkgICAgICJ0eF9wbj0lcG0gcnhfcG49JXBtICIKIAkJICAgICAiZm9ybWF0X2Vycm9ycz0lZCByZXBsYXlzPSVkIGRlY3J5cHRfZXJyb3JzPSVkXG4iLAogCQkgICAgIGNjbXAtPmtleV9pZHgsIGNjbXAtPmtleV9zZXQsCi0JCSAgICAgTUFDX0FSRyhjY21wLT50eF9wbiksIE1BQ19BUkcoY2NtcC0+cnhfcG4pLAorCQkgICAgIGNjbXAtPnR4X3BuLCBjY21wLT5yeF9wbiwKIAkJICAgICBjY21wLT5kb3QxMVJTTkFTdGF0c0NDTVBGb3JtYXRFcnJvcnMsCiAJCSAgICAgY2NtcC0+ZG90MTFSU05BU3RhdHNDQ01QUmVwbGF5cywKIAkJICAgICBjY21wLT5kb3QxMVJTTkFTdGF0c0NDTVBEZWNyeXB0RXJyb3JzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jCmluZGV4IDliOTQzOGYuLjdlNDg3NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3RraXAuYwpAQCAtNDEwLDcgKzQxMCw3IEBACiAJaWYgKCEoa2V5aWR4ICYgKDEgPDwgNSkpKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJUS0lQOiByZWNlaXZlZCBwYWNrZXQgd2l0aG91dCBFeHRJViIKLQkJCSAgICAgICAiIGZsYWcgZnJvbSAiIE1BQ19GTVQgIlxuIiwgTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCQkgICAgICAgIiBmbGFnIGZyb20gJXBNXG4iLCBoZHItPmFkZHIyKTsKIAkJfQogCQlyZXR1cm4gLTI7CiAJfQpAQCAtNDIyLDkgKzQyMiw5IEBACiAJfQogCWlmICghdGtleS0+a2V5X3NldCkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiVEtJUDogcmVjZWl2ZWQgcGFja2V0IGZyb20gIiBNQUNfRk1UCisJCQlwcmludGsoS0VSTl9ERUJVRyAiVEtJUDogcmVjZWl2ZWQgcGFja2V0IGZyb20gJXBNIgogCQkJICAgICAgICIgd2l0aCBrZXlpZD0lZCB0aGF0IGRvZXMgbm90IGhhdmUgYSBjb25maWd1cmVkIgotCQkJICAgICAgICIga2V5XG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpLCBrZXlpZHgpOworCQkJICAgICAgICIga2V5XG4iLCBoZHItPmFkZHIyLCBrZXlpZHgpOwogCQl9CiAJCXJldHVybiAtMzsKIAl9CkBAIC00MzcsOSArNDM3LDkgQEAKIAkJaWYgKGl2MzIgPCB0a2V5LT5yeF9pdjMyIHx8CiAJCShpdjMyID09IHRrZXktPnJ4X2l2MzIgJiYgaXYxNiA8PSB0a2V5LT5yeF9pdjE2KSkgewogCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJCXByaW50ayhLRVJOX0RFQlVHICJUS0lQOiByZXBsYXkgZGV0ZWN0ZWQ6IFNUQT0iIE1BQ19GTVQKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiVEtJUDogcmVwbGF5IGRldGVjdGVkOiBTVEE9JXBNIgogCQkJCSIgcHJldmlvdXMgVFNDICUwOHglMDR4IHJlY2VpdmVkIFRTQyAiCi0JCQkJIiUwOHglMDR4XG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpLAorCQkJCSIlMDh4JTA0eFxuIiwgaGRyLT5hZGRyMiwKIAkJCQl0a2V5LT5yeF9pdjMyLCB0a2V5LT5yeF9pdjE2LCBpdjMyLCBpdjE2KTsKIAkJCX0KIAkJCXRrZXktPmRvdDExUlNOQVN0YXRzVEtJUFJlcGxheXMrKzsKQEAgLTQ2MCw4ICs0NjAsOCBAQAogCQlpZiAoY3J5cHRvX2Jsa2NpcGhlcl9kZWNyeXB0KCZkZXNjLCAmc2csICZzZywgcGxlbiArIDQpKSB7CiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIjogVEtJUDogZmFpbGVkIHRvIGRlY3J5cHQgIgotCQkJCQkJInJlY2VpdmVkIHBhY2tldCBmcm9tICIgTUFDX0ZNVCAiXG4iLAotCQkJCQkJTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCQkJCQkicmVjZWl2ZWQgcGFja2V0IGZyb20gJXBNXG4iLAorCQkJCQkJaGRyLT5hZGRyMik7CiAJCQl9CiAJCQlyZXR1cm4gLTc7CiAJCX0KQEAgLTQ4MCw3ICs0ODAsNyBAQAogCQkJfQogCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJCXByaW50ayhLRVJOX0RFQlVHICJUS0lQOiBJQ1YgZXJyb3IgZGV0ZWN0ZWQ6IFNUQT0iCi0JCQkJTUFDX0ZNVCAiXG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCQkiJXBNXG4iLCBoZHItPmFkZHIyKTsKIAkJCX0KIAkJCXRrZXktPmRvdDExUlNOQVN0YXRzVEtJUElDVkVycm9ycysrOwogCQkJcmV0dXJuIC01OwpAQCAtNjM1LDggKzYzNSw4IEBACiAJCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CiAJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogTWljaGFlbCBNSUMgdmVyaWZpY2F0aW9uIGZhaWxlZCBmb3IgIgotCQkgICAgICAgIk1TRFUgZnJvbSAiIE1BQ19GTVQgIiBrZXlpZHg9JWRcbiIsCi0JCSAgICAgICBza2ItPmRldiA/IHNrYi0+ZGV2LT5uYW1lIDogIk4vQSIsIE1BQ19BUkcoaGRyLT5hZGRyMiksCisJCSAgICAgICAiTVNEVSBmcm9tICVwTSBrZXlpZHg9JWRcbiIsCisJCSAgICAgICBza2ItPmRldiA/IHNrYi0+ZGV2LT5uYW1lIDogIk4vQSIsIGhkci0+YWRkcjIsCiAJCSAgICAgICBrZXlpZHgpOwogCQlpZiAoc2tiLT5kZXYpCiAJCQlpZWVlODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShza2ItPmRldiwgaGRyLCBrZXlpZHgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCmluZGV4IGU4YzY3ZDUuLmMwMjRmYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKQEAgLTI2Miw3ICsyNjIsNyBAQAogCQkJICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQogewogCWNoYXIgYnVmW10gPSAiMHgwMDAwMDAwMCI7Ci0JdW5zaWduZWQgbG9uZyBsZW4gPSBtaW4oc2l6ZW9mKGJ1ZikgLSAxLCBjb3VudCk7CisJdW5zaWduZWQgbG9uZyBsZW4gPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBzaXplb2YoYnVmKSAtIDEsIGNvdW50KTsKIAljaGFyICpwID0gKGNoYXIgKilidWY7CiAJdW5zaWduZWQgbG9uZyB2YWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKaW5kZXggMDk1YjhjNi4uY2M4MGZhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKQEAgLTMxNCw4ICszMTQsOCBAQAogCSAgICBzdHJjbXAoY3J5cHQtPm9wcy0+bmFtZSwgIlRLSVAiKSA9PSAwKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVEtJUCBjb3VudGVybWVhc3VyZXM6IGRyb3BwZWQgIgotCQkJICAgICAgICJyZWNlaXZlZCBwYWNrZXQgZnJvbSAiIE1BQ19GTVQgIlxuIiwKLQkJCSAgICAgICBpZWVlLT5kZXYtPm5hbWUsIE1BQ19BUkcoaGRyLT5hZGRyMikpOworCQkJICAgICAgICJyZWNlaXZlZCBwYWNrZXQgZnJvbSAlcE1cbiIsCisJCQkgICAgICAgaWVlZS0+ZGV2LT5uYW1lLCBoZHItPmFkZHIyKTsKIAkJfQogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMzI2LDggKzMyNiw4IEBACiAJYXRvbWljX2RlYygmY3J5cHQtPnJlZmNudCk7CiAJaWYgKHJlcyA8IDApIHsKIAkJSUVFRTgwMjExX0RFQlVHX0RST1AoCi0JCQkiZGVjcnlwdGlvbiBmYWlsZWQgKFNBPSIgTUFDX0ZNVAotCQkJIikgcmVzPSVkXG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpLCByZXMpOworCQkJImRlY3J5cHRpb24gZmFpbGVkIChTQT0lcE0iCisJCQkiKSByZXM9JWRcbiIsIGhkci0+YWRkcjIsIHJlcyk7CiAJCWlmIChyZXMgPT0gLTIpCiAJCQlJRUVFODAyMTFfREVCVUdfRFJPUCgiRGVjcnlwdGlvbiBmYWlsZWQgSUNWICIKIAkJCQkJICAgICAibWlzbWF0Y2ggKGtleSAlZClcbiIsCkBAIC0zNjQsOCArMzY0LDggQEAKIAlhdG9taWNfZGVjKCZjcnlwdC0+cmVmY250KTsKIAlpZiAocmVzIDwgMCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE1TRFUgZGVjcnlwdGlvbi9NSUMgdmVyaWZpY2F0aW9uIGZhaWxlZCIKLQkJICAgICAgICIgKFNBPSIgTUFDX0ZNVCAiIGtleWlkeD0lZClcbiIsCi0JCSAgICAgICBpZWVlLT5kZXYtPm5hbWUsIE1BQ19BUkcoaGRyLT5hZGRyMiksIGtleWlkeCk7CisJCSAgICAgICAiIChTQT0lcE0ga2V5aWR4PSVkKVxuIiwKKwkJICAgICAgIGllZWUtPmRldi0+bmFtZSwgaGRyLT5hZGRyMiwga2V5aWR4KTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtOTM5LDggKzkzOSw4IEBACiAJCQkgKiBmcmFtZXMgc2lsZW50bHkgaW5zdGVhZCBvZiBmaWxsaW5nIHN5c3RlbSBsb2cgd2l0aAogCQkJICogdGhlc2UgcmVwb3J0cy4gKi8KIAkJCUlFRUU4MDIxMV9ERUJVR19EUk9QKCJEZWNyeXB0aW9uIGZhaWxlZCAobm90IHNldCkiCi0JCQkJCSAgICAgIiAoU0E9IiBNQUNfRk1UICIpXG4iLAotCQkJCQkgICAgIE1BQ19BUkcoaGRyLT5hZGRyMikpOworCQkJCQkgICAgICIgKFNBPSVwTSlcbiIsCisJCQkJCSAgICAgaGRyLT5hZGRyMik7CiAJCQlpZWVlLT5pZWVlX3N0YXRzLnJ4X2Rpc2NhcmRzX3VuZGVjcnlwdGFibGUrKzsKIAkJCWdvdG8gcnhfZHJvcHBlZDsKIAkJfQpAQCAtMTE0Myw4ICsxMTQzLDggQEAKIAkJfSBlbHNlIHsKIAkJCUlFRUU4MDIxMV9ERUJVR19EUk9QKAogCQkJCSJlbmNyeXB0aW9uIGNvbmZpZ3VyZWQsIGJ1dCBSWCAiCi0JCQkJImZyYW1lIG5vdCBlbmNyeXB0ZWQgKFNBPSIgTUFDX0ZNVCAiKVxuIiwKLQkJCQlNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCQkiZnJhbWUgbm90IGVuY3J5cHRlZCAoU0E9JXBNKVxuIiwKKwkJCQloZHItPmFkZHIyKTsKIAkJCWdvdG8gcnhfZHJvcHBlZDsKIAkJfQogCX0KQEAgLTExNjMsOSArMTE2Myw5IEBACiAJICAgICFpZWVlODAyMTFfaXNfZWFwb2xfZnJhbWUoaWVlZSwgc2tiLCBoZHJsZW4pKSB7CiAJCUlFRUU4MDIxMV9ERUJVR19EUk9QKAogCQkJImRyb3BwZWQgdW5lbmNyeXB0ZWQgUlggZGF0YSAiCi0JCQkiZnJhbWUgZnJvbSAiIE1BQ19GTVQKKwkJCSJmcmFtZSBmcm9tICVwTSIKIAkJCSIgKGRyb3BfdW5lbmNyeXB0ZWQ9MSlcbiIsCi0JCQlNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCWhkci0+YWRkcjIpOwogCQlnb3RvIHJ4X2Ryb3BwZWQ7CiAJfQogLyoKQEAgLTIxNTksMTEgKzIxNTksMTEgQEAKIAl9CiAKIAlpZiAobmV0d29yay0+bW9kZSA9PSAwKSB7Ci0JCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJGaWx0ZXJlZCBvdXQgJyVzICgiIE1BQ19GTVQgIiknICIKKwkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkZpbHRlcmVkIG91dCAnJXMgKCVwTSknICIKIAkJCQkgICAgICJuZXR3b3JrLlxuIiwKIAkJCQkgICAgIGVzY2FwZV9lc3NpZChuZXR3b3JrLT5zc2lkLAogCQkJCQkJICBuZXR3b3JrLT5zc2lkX2xlbiksCi0JCQkJICAgICBNQUNfQVJHKG5ldHdvcmstPmJzc2lkKSk7CisJCQkJICAgICBuZXR3b3JrLT5ic3NpZCk7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMjM0NSw5ICsyMzQ1LDkgQEAKIAogCW1lbXNldCgmbmV0d29yaywgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbmV0d29yaykpOwogCUlFRUU4MDIxMV9ERUJVR19TQ0FOKAotCQkiJyVzJyAoIiBNQUNfRk1UICIpOiAlYyVjJWMlYyAlYyVjJWMlYy0lYyVjJWMlYyAlYyVjJWMlY1xuIiwKKwkJIiclcycgKCVwTSk6ICVjJWMlYyVjICVjJWMlYyVjLSVjJWMlYyVjICVjJWMlYyVjXG4iLAogCQllc2NhcGVfZXNzaWQoaW5mb19lbGVtZW50LT5kYXRhLCBpbmZvX2VsZW1lbnQtPmxlbiksCi0JCU1BQ19BUkcoYmVhY29uLT5oZWFkZXIuYWRkcjMpLAorCQliZWFjb24tPmhlYWRlci5hZGRyMywKIAkJKGJlYWNvbi0+Y2FwYWJpbGl0eSAmICgxPDwweGYpKSA/ICcxJyA6ICcwJywKIAkJKGJlYWNvbi0+Y2FwYWJpbGl0eSAmICgxPDwweGUpKSA/ICcxJyA6ICcwJywKIAkJKGJlYWNvbi0+Y2FwYWJpbGl0eSAmICgxPDwweGQpKSA/ICcxJyA6ICcwJywKQEAgLTIzNjYsMTAgKzIzNjYsMTAgQEAKIAkJKGJlYWNvbi0+Y2FwYWJpbGl0eSAmICgxPDwweDApKSA/ICcxJyA6ICcwJyk7CiAKIAlpZiAoaWVlZTgwMjExX25ldHdvcmtfaW5pdChpZWVlLCBiZWFjb24sICZuZXR3b3JrLCBzdGF0cykpIHsKLQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkRyb3BwZWQgJyVzJyAoIiBNQUNfRk1UICIpIHZpYSAlcy5cbiIsCisJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJEcm9wcGVkICclcycgKCVwTSkgdmlhICVzLlxuIiwKIAkJCQkgICAgIGVzY2FwZV9lc3NpZChpbmZvX2VsZW1lbnQtPmRhdGEsCiAJCQkJCQkgIGluZm9fZWxlbWVudC0+bGVuKSwKLQkJCQkgICAgIE1BQ19BUkcoYmVhY29uLT5oZWFkZXIuYWRkcjMpLAorCQkJCSAgICAgYmVhY29uLT5oZWFkZXIuYWRkcjMsCiAJCQkJICAgICBXTEFOX0ZDX0dFVF9TVFlQRShiZWFjb24tPmhlYWRlci5mcmFtZV9jb250cm9sKSA9PQogCQkJCSAgICAgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1AgPwogCQkJCSAgICAgIlBST0JFIFJFU1BPTlNFIiA6ICJCRUFDT04iKTsKQEAgLTI0NzgsMTEgKzI0NzgsMTEgQEAKIAkJCS8qIElmIHRoZXJlIGFyZSBubyBtb3JlIHNsb3RzLCBleHBpcmUgdGhlIG9sZGVzdCAqLwogCQkJbGlzdF9kZWwoJm9sZGVzdC0+bGlzdCk7CiAJCQl0YXJnZXQgPSBvbGRlc3Q7Ci0JCQlJRUVFODAyMTFfREVCVUdfU0NBTigiRXhwaXJlZCAnJXMnICgiIE1BQ19GTVQgIikgZnJvbSAiCisJCQlJRUVFODAyMTFfREVCVUdfU0NBTigiRXhwaXJlZCAnJXMnICglcE0pIGZyb20gIgogCQkJCQkgICAgICJuZXR3b3JrIGxpc3QuXG4iLAogCQkJCQkgICAgIGVzY2FwZV9lc3NpZCh0YXJnZXQtPnNzaWQsCiAJCQkJCQkJICB0YXJnZXQtPnNzaWRfbGVuKSwKLQkJCQkJICAgICBNQUNfQVJHKHRhcmdldC0+YnNzaWQpKTsKKwkJCQkJICAgICB0YXJnZXQtPmJzc2lkKTsKIAkJfSBlbHNlIHsKIAkJCS8qIE90aGVyd2lzZSBqdXN0IHB1bGwgZnJvbSB0aGUgZnJlZSBsaXN0ICovCiAJCQl0YXJnZXQgPSBsaXN0X2VudHJ5KGllZWUtPm5ldHdvcmtfZnJlZV9saXN0Lm5leHQsCkBAIC0yNDkyLDEwICsyNDkyLDEwIEBACiAKIAogI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKLQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkFkZGluZyAnJXMnICgiIE1BQ19GTVQgIikgdmlhICVzLlxuIiwKKwkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkFkZGluZyAnJXMnICglcE0pIHZpYSAlcy5cbiIsCiAJCQkJICAgICBlc2NhcGVfZXNzaWQobmV0d29yay5zc2lkLAogCQkJCQkJICBuZXR3b3JrLnNzaWRfbGVuKSwKLQkJCQkgICAgIE1BQ19BUkcobmV0d29yay5ic3NpZCksCisJCQkJICAgICBuZXR3b3JrLmJzc2lkLAogCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUoYmVhY29uLT5oZWFkZXIuZnJhbWVfY29udHJvbCkgPT0KIAkJCQkgICAgIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQID8KIAkJCQkgICAgICJQUk9CRSBSRVNQT05TRSIgOiAiQkVBQ09OIik7CkBAIC0yNTA1LDEwICsyNTA1LDEwIEBACiAJCWlmKGllZWUtPnNvZnRtYWNfZmVhdHVyZXMgJiBJRUVFX1NPRlRNQUNfQVNTT0NJQVRFKQogCQkJaWVlZTgwMjExX3NvZnRtYWNfbmV3X25ldChpZWVlLCZuZXR3b3JrKTsKIAl9IGVsc2UgewotCQlJRUVFODAyMTFfREVCVUdfU0NBTigiVXBkYXRpbmcgJyVzJyAoIiBNQUNfRk1UICIpIHZpYSAlcy5cbiIsCisJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJVcGRhdGluZyAnJXMnICglcE0pIHZpYSAlcy5cbiIsCiAJCQkJICAgICBlc2NhcGVfZXNzaWQodGFyZ2V0LT5zc2lkLAogCQkJCQkJICB0YXJnZXQtPnNzaWRfbGVuKSwKLQkJCQkgICAgIE1BQ19BUkcodGFyZ2V0LT5ic3NpZCksCisJCQkJICAgICB0YXJnZXQtPmJzc2lkLAogCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUoYmVhY29uLT5oZWFkZXIuZnJhbWVfY29udHJvbCkgPT0KIAkJCQkgICAgIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQID8KIAkJCQkgICAgICJQUk9CRSBSRVNQT05TRSIgOiAiQkVBQ09OIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwppbmRleCAwYmEyYTAxLi45ZDhjYjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKQEAgLTE3MDksNyArMTcwOSw3IEBACiAJCWllZWU4MDIxMV9yZXNwX3RvX2Fzc29jX3JxKGllZWUsIGRlc3QpOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8iTmV3IGNsaWVudCBhc3NvY2lhdGVkOiAiTUFDX0ZNVCJcbiIsIE1BQ19BUkcoZGVzdCkpOworCXByaW50ayhLRVJOX0lORk8iTmV3IGNsaWVudCBhc3NvY2lhdGVkOiAlcE1cbiIsIGRlc3QpOwogCS8vRklYTUUKIH0KIApAQCAtMjE0NSw4ICsyMTQ1LDggQEAKIAlpZWVlODAyMTFfc3RhX3dha2V1cChpZWVlLDApOwogCiAJLyogdXBkYXRlIHRoZSB0eCBzdGF0dXMgKi8KLS8vCWllZWUtPnN0YXRzLnR4X2J5dGVzICs9IHR4Yi0+cGF5bG9hZF9zaXplOwotLy8JaWVlZS0+c3RhdHMudHhfcGFja2V0cysrOworCWllZWUtPnN0YXRzLnR4X2J5dGVzICs9IHR4Yi0+cGF5bG9hZF9zaXplOworCWllZWUtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAl0Y2JfZGVzYyA9IChjYl9kZXNjICopKHR4Yi0+ZnJhZ21lbnRzWzBdLT5jYiArIE1BWF9ERVZfQUREUl9TSVpFKTsKIAlpZih0Y2JfZGVzYy0+Yk11bHRpY2FzdCkgewogCQlpZWVlLT5zdGF0cy5tdWx0aWNhc3QrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKaW5kZXggNGQ1NGUxZS4uNDg0YzNhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKQEAgLTE5OSw4ICsxOTksOCBAQAogCQloZWFkZXIgPSAoc3RydWN0IHJ0bF9pZWVlODAyMTFfaGRyICopZnJhZy0+ZGF0YTsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUS0lQIGNvdW50ZXJtZWFzdXJlczogZHJvcHBlZCAiCi0JCQkgICAgICAgIlRYIHBhY2tldCB0byAiIE1BQ19GTVQgIlxuIiwKLQkJCSAgICAgICBpZWVlLT5kZXYtPm5hbWUsIE1BQ19BUkcoaGVhZGVyLT5hZGRyMSkpOworCQkJICAgICAgICJUWCBwYWNrZXQgdG8gJXBNXG4iLAorCQkJICAgICAgIGllZWUtPmRldi0+bmFtZSwgaGVhZGVyLT5hZGRyMSk7CiAJCX0KIAkJcmV0dXJuIC0xOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKaW5kZXggODVjN2U5Ni4uMTIyZjgwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKQEAgLTI2MSwxMCArMjYxLDEwIEBACiAJCWVsc2UKIAkJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKAogCQkJCSJOb3Qgc2hvd2luZyBuZXR3b3JrICclcyAoIgotCQkJCU1BQ19GTVQgIiknIGR1ZSB0byBhZ2UgKCVsdW1zKS5cbiIsCisJCQkJIiVwTSknIGR1ZSB0byBhZ2UgKCVsdW1zKS5cbiIsCiAJCQkJZXNjYXBlX2Vzc2lkKG5ldHdvcmstPnNzaWQsCiAJCQkJCSAgICAgbmV0d29yay0+c3NpZF9sZW4pLAotCQkJCU1BQ19BUkcobmV0d29yay0+YnNzaWQpLAorCQkJCW5ldHdvcmstPmJzc2lkLAogCQkJCShqaWZmaWVzIC0gbmV0d29yay0+bGFzdF9zY2FubmVkKSAvIChIWiAvIDEwMCkpOwogCX0KIApAQCAtNzMxLDcgKzczMSw3IEBACiAjaWYgMQogCWNhc2UgSVdfQVVUSF9XUEFfRU5BQkxFRDoKIAkJaWVlZS0+d3BhX2VuYWJsZWQgPSAoZGF0YS0+dmFsdWUpPzE6MDsKLQkJLy9wcmludGsoImVuYWxiZSB3cGE6JWRcbiIsIGllZWUtPndwYV9lbmFibGVkKTsKKwkJLy9wcmludGsoImVuYWJsZSB3cGE6JWRcbiIsIGllZWUtPndwYV9lbmFibGVkKTsKIAkJYnJlYWs7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfQkFQcm9jLmMKaW5kZXggYzY5NjI0NS4uOGMzN2RkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIAl1MTYgdG1wID0gMDsKIAl1MTYgbGVuID0gaWVlZS0+dHhfaGVhZHJvb20gKyA5OwogCS8vY2F0ZWdvcnkoMSkgKyBhY3Rpb24gZmllbGQoMSkgKyBEaWFsb2cgVG9rZW4oMSkgKyBCQSBQYXJhbWV0ZXIgU2V0KDIpICsgIEJBIFRpbWVvdXQgVmFsdWUoMikgKyAgQkEgU3RhcnQgU2VxQ3RybCgyKShvciBTdGF0dXNDb2RlKDIpKQotCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFJBQ0UgfCBJRUVFODAyMTFfRExfQkEsICI9PT09PT09PT4lcygpLCBmcmFtZSglZCkgc2VudGQgdG86Ik1BQ19GTVQiLCBpZWVlLT5kZXY6JXBcbiIsIF9fRlVOQ1RJT05fXywgdHlwZSwgTUFDX0FSRyhEc3QpLCBpZWVlLT5kZXYpOworCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFJBQ0UgfCBJRUVFODAyMTFfRExfQkEsICI9PT09PT09PT4lcygpLCBmcmFtZSglZCkgc2VudGQgdG86JXBNLCBpZWVlLT5kZXY6JXBcbiIsIF9fRlVOQ1RJT05fXywgdHlwZSwgRHN0LCBpZWVlLT5kZXYpOwogCWlmIChwQkEgPT0gTlVMTHx8aWVlZSA9PSBOVUxMKQogCXsKIAkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICJwQkEoJXApIGlzIE5VTEwgb3IgaWVlZSglcCkgaXMgTlVMTFxuIiwgcEJBLCBpZWVlKTsKQEAgLTIwMCw3ICsyMDAsNyBAQAogCXUxNiBsZW4gPSA2ICsgaWVlZS0+dHhfaGVhZHJvb207CiAKIAlpZiAobmV0X3JhdGVsaW1pdCgpKQotCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFJBQ0UgfCBJRUVFODAyMTFfRExfQkEsICI9PT09PT09PT4lcygpLCBSZWFzb25Db2RlKCVkKSBzZW50ZCB0bzoiTUFDX0ZNVCJcbiIsIF9fRlVOQ1RJT05fXywgUmVhc29uQ29kZSwgTUFDX0FSRyhkc3QpKTsKKwlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RSQUNFIHwgSUVFRTgwMjExX0RMX0JBLCAiPT09PT09PT0+JXMoKSwgUmVhc29uQ29kZSglZCkgc2VudGQgdG86JXBNXG4iLCBfX0ZVTkNUSU9OX18sIFJlYXNvbkNvZGUsIGRzdCk7CiAKIAltZW1zZXQoJkRlbGJhUGFyYW1TZXQsIDAsIDIpOwogCkBAIC0zMzksNyArMzM5LDEwIEBACiAKIAlpZiAoc2tiLT5sZW4gPCBzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDkpCiAJewotCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIiBJbnZhbGlkIHNrYiBsZW4gaW4gQkFSRVEoJWQgLyAlbGQpXG4iLCBza2ItPmxlbiwgCShzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDkpKTsKKwkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsCisJCQkJIiBJbnZhbGlkIHNrYiBsZW4gaW4gQkFSRVEoJWQgLyAlemQpXG4iLAorCQkJCXNrYi0+bGVuLAorCQkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA5KTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMzU0LDcgKzM1Nyw3IEBACiAJcEJhVGltZW91dFZhbCA9ICh1MTYqKSh0YWcgKyA1KTsKIAlwQmFTdGFydFNlcUN0cmwgPSAoUFNFUVVFTkNFX0NPTlRST0wpKHJlcSArIDcpOwogCi0JcHJpbnRrKCI9PT09PT09PT09PT09PT09PT09PT5yeCBBRERCQVJFUSBmcm9tIDoiTUFDX0ZNVCJcbiIsIE1BQ19BUkcoZHN0KSk7CisJcHJpbnRrKCI9PT09PT09PT09PT09PT09PT09PT5yeCBBRERCQVJFUSBmcm9tIDolcE1cbiIsIGRzdCk7CiAvL3NvbWUgb3RoZXIgY2FwYWJpbGl0eSBpcyBub3QgcmVhZHkgbm93LgogCWlmKAkoaWVlZS0+Y3VycmVudF9uZXR3b3JrLnFvc19kYXRhLmFjdGl2ZSA9PSAwKSB8fAogCQkoaWVlZS0+cEhUSW5mby0+YkN1cnJlbnRIVFN1cHBvcnQgPT0gZmFsc2UpIHx8CkBAIC00NDAsNyArNDQzLDEwIEBACiAKIAlpZiAoc2tiLT5sZW4gPCBzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDkpCiAJewotCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIiBJbnZhbGlkIHNrYiBsZW4gaW4gQkFSU1AoJWQgLyAlbGQpXG4iLCBza2ItPmxlbiwgCShzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDkpKTsKKwkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsCisJCQkJIiBJbnZhbGlkIHNrYiBsZW4gaW4gQkFSU1AoJWQgLyAlemQpXG4iLAorCQkJCXNrYi0+bGVuLAorCQkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA5KTsKIAkJcmV0dXJuIC0xOwogCX0KIAlyc3AgPSAoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKilza2ItPmRhdGE7CkBAIC01NzAsNyArNTc2LDEwIEBACiAKIAlpZiAoc2tiLT5sZW4gPCBzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDYpCiAJewotCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgIiBJbnZhbGlkIHNrYiBsZW4gaW4gREVMQkEoJWQgLyAlbGQpXG4iLCBza2ItPmxlbiwgCShzaXplb2YoIHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSArIDYpKTsKKwkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsCisJCQkJIiBJbnZhbGlkIHNrYiBsZW4gaW4gREVMQkEoJWQgLyAlemQpXG4iLAorCQkJCXNrYi0+bGVuLAorCQkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA2KTsKIAkJcmV0dXJuIC0xOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfSFRQcm9jLmMKaW5kZXggMzNjN2ZhNy4uMDExMTRjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X0hUUHJvYy5jCkBAIC00Miw3ICs0Miw3IEBACiBzdGF0aWMgdTggRExJTktfQVRIRVJPU18yWzNdID0gezB4MDAsIDB4MjEsIDB4OTF9Owogc3RhdGljIHU4IENJU0NPX0JST0FEQ09NWzNdID0gezB4MDAsIDB4MTcsIDB4OTR9Owogc3RhdGljIHU4IExJTktTWVNfTUFSVkVMTF80NDAwTlszXSA9IHsweDAwLCAweDE0LCAweGE0fTsKLS8vIDIwMDgvMDQvMDEgTUggRm9yIENpc2NvIEcgbW9kZSBSWCBUUCBXZSBuZWVkIHRvIGNoYW5nZSBGVyBkdXJhdGlvbi4gU2hvdWQgd2UgcHV0IHRoZQorLy8gMjAwOC8wNC8wMSBNSCBGb3IgQ2lzY28gRyBtb2RlIFJYIFRQIFdlIG5lZWQgdG8gY2hhbmdlIEZXIGR1cmF0aW9uLiBTaG91bGQgd2UgcHV0IHRoZQogLy8gY29kZSBpbiBvdGhlciBwbGFjZT8/CiAvL3N0YXRpYyB1OCBXSUZJX0NJU0NPX0dfQVBbM10gPSB7MHgwMCwgMHg0MCwgMHg5Nn07CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfVFNQcm9jLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X1RTUHJvYy5jCmluZGV4IGFkM2JmMzUuLjYwY2YxZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfVFNQcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9UU1Byb2MuYwpAQCAtMjkxLDcgKzI5MSw3IEBACiAJCWlmKHNlYXJjaF9kaXJbZGlyXSA9PWZhbHNlICkKIAkJCWNvbnRpbnVlOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBSZXQsIHBzZWFyY2hfbGlzdCwgTGlzdCl7Ci0JLy8JCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFMsICJBREQ6Ik1BQ19GTVQiLCBUSUQ6JWQsIGRpcjolZFxuIiwgTUFDX0FSRyhwUmV0LT5BZGRyKSwgcFJldC0+VFNwZWMuZi5UU0luZm8uZmllbGQudWNUU0lELCBwUmV0LT5UU3BlYy5mLlRTSW5mby5maWVsZC51Y0RpcmVjdGlvbik7CisJLy8JCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFMsICJBREQ6JXBNLCBUSUQ6JWQsIGRpcjolZFxuIiwgcFJldC0+QWRkciwgcFJldC0+VFNwZWMuZi5UU0luZm8uZmllbGQudWNUU0lELCBwUmV0LT5UU3BlYy5mLlRTSW5mby5maWVsZC51Y0RpcmVjdGlvbik7CiAJCQlpZiAobWVtY21wKHBSZXQtPkFkZHIsIEFkZHIsIDYpID09IDApCiAJCQkJaWYgKHBSZXQtPlRTcGVjLmYuVFNJbmZvLmZpZWxkLnVjVFNJRCA9PSBUSUQpCiAJCQkJCWlmKHBSZXQtPlRTcGVjLmYuVFNJbmZvLmZpZWxkLnVjRGlyZWN0aW9uID09IGRpcikKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogCQkJCQlSZXNldFJ4VHNFbnRyeSh0bXApOwogCQkJCX0KIAotCQkJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFMsICJ0byBpbml0IGN1cnJlbnQgVFMsIFVQOiVkLCBEaXI6JWQsIGFkZHI6Ik1BQ19GTVQiXG4iLCBVUCwgRGlyLCBNQUNfQVJHKEFkZHIpKTsKKwkJCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RTLCAidG8gaW5pdCBjdXJyZW50IFRTLCBVUDolZCwgRGlyOiVkLCBhZGRyOiVwTVxuIiwgVVAsIERpciwgQWRkcik7CiAJCQkJLy8gUHJlcGFyZSBUUyBJbmZvIHJlbGVhdGVkIGZpZWxkCiAJCQkJcFRTSW5mby0+ZmllbGQudWNUcmFmZmljVHlwZSA9IDA7CQkJLy8gVHJhZmZpYyB0eXBlOiBXTU0gaXMgcmVzZXJ2ZWQgaW4gdGhpcyBmaWVsZAogCQkJCXBUU0luZm8tPmZpZWxkLnVjVFNJRCA9IFVQOwkJCS8vIFRTSUQKQEAgLTUzMyw3ICs1MzMsNyBAQAogdm9pZCBSZW1vdmVQZWVyVFMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UqIGllZWUsIHU4KiBBZGRyKQogewogCVBUU19DT01NT05fSU5GTwlwVFMsIHBUbXBUUzsKLQlwcmludGsoIj09PT09PT09PT09PlJlbW92ZVBlZXJUUywiTUFDX0ZNVCJcbiIsIE1BQ19BUkcoQWRkcikpOworCXByaW50aygiPT09PT09PT09PT0+UmVtb3ZlUGVlclRTLCVwTVxuIiwgQWRkcik7CiAjaWYgMQogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwVFMsIHBUbXBUUywgJmllZWUtPlR4X1RTX1BlbmRpbmdfTGlzdCwgTGlzdCkKIAl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU1VfSFdJbWcuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTVV9IV0ltZy5jCmluZGV4IGNiYjY1NzkuLmJhOGUxMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTVV9IV0ltZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTVV9IV0ltZy5jCkBAIC0yLDQyODIgKzIsNiBAQAogCiAjaW5jbHVkZSAicjgxOTJTVV9IV0ltZy5oIgogCi11OCBSdGw4MTkyU1VGd0ltZ0FycmF5W0ltZ0FycmF5TGVuZ3RoXSA9IHsKLTB4OTIsMHg4MSwweDJiLDB4OTAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4NzQsMHgwMCwweDAwLDB4ODgsMHg5NiwweDAwLDB4MDAsCi0weDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5NSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmIsMHgwMCwweDAzLDB4MDMsMHgyMywweDAwLAotMHg5MiwweDgxLDB4MDIsMHgwMSwweDAwLDB4MDAsMHgxMiwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA3LDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDEsMHgwMCwweDAxLDB4MDEsMHgwMSwweDAwLDB4MDAsCi0weDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg3ZiwweDAwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDFmLDB4MDAsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjUsMHhiMCwweDFhLDB4M2MsMHg4MCwweDAzLDB4NWEsMHgzNywweDAwLDB4ODAsMHgxYiwweDNjLDB4ODAsMHgwMCwweDdiLDB4MzcsCi0weDAwLDB4MDAsMHg1YiwweGFmLDB4MjUsMHhiMCwweDFhLDB4M2MsMHgxOCwweDAzLDB4NWEsMHgzNywweDAwLDB4ODAsMHgxYiwweDNjLAotMHg4MCwweDAwLDB4N2IsMHgzNywweDAwLDB4MDAsMHg1YiwweGFmLDB4MDAsMHg4MCwweDFhLDB4M2MsMHgxMCwweDZkLDB4NWEsMHgyNywKLTB4MDgsMHgwMCwweDQwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA0LDB4MDAsMHhhMSwweGFmLDB4MDgsMHgwMCwweGEyLDB4YWYsMHgwYywweDAwLDB4YTMsMHhhZiwweDEwLDB4MDAsMHhhNCwweGFmLAotMHgxNCwweDAwLDB4YTUsMHhhZiwweDE4LDB4MDAsMHhhNiwweGFmLDB4MWMsMHgwMCwweGE3LDB4YWYsMHgyMCwweDAwLDB4YTgsMHhhZiwKLTB4MjQsMHgwMCwweGE5LDB4YWYsMHgyOCwweDAwLDB4YWEsMHhhZiwweDJjLDB4MDAsMHhhYiwweGFmLDB4MzAsMHgwMCwweGFjLDB4YWYsCi0weDM0LDB4MDAsMHhhZCwweGFmLDB4MzgsMHgwMCwweGFlLDB4YWYsMHgzYywweDAwLDB4YWYsMHhhZiwweDEyLDB4NDAsMHgwMCwweDAwLAotMHgxMCwweDQ4LDB4MDAsMHgwMCwweDAwLDB4NzAsMHgwYSwweDQwLDB4NDAsMHgwMCwweGIwLDB4YWYsMHg0NCwweDAwLDB4YjEsMHhhZiwKLTB4NDgsMHgwMCwweGIyLDB4YWYsMHg0YywweDAwLDB4YjMsMHhhZiwweDUwLDB4MDAsMHhiNCwweGFmLDB4NTQsMHgwMCwweGI1LDB4YWYsCi0weDU4LDB4MDAsMHhiNiwweGFmLDB4NWMsMHgwMCwweGI3LDB4YWYsMHg2MCwweDAwLDB4YjgsMHhhZiwweDY0LDB4MDAsMHhiOSwweGFmLAotMHg2OCwweDAwLDB4YmMsMHhhZiwweDZjLDB4MDAsMHhiZCwweGFmLDB4NzAsMHgwMCwweGJlLDB4YWYsMHg3NCwweDAwLDB4YmYsMHhhZiwKLTB4NzgsMHgwMCwweGE4LDB4YWYsMHg3YywweDAwLDB4YTksMHhhZiwweDgwLDB4MDAsMHhhYSwweGFmLDB4ZGYsMHgxYSwweDAwLDB4MDgsCi0weDIxLDB4MjAsMHhhMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyNSwweGIwLDB4MDYsMHgzYywweDAwLDB4ODAsMHgwMiwweDNjLDB4ZTgsMHhmZiwweGJkLDB4MjcsMHgxOCwweDAzLDB4YzMsMHgzNCwKLTB4MDAsMHgwMywweDQyLDB4MjQsMHgxNCwweDAwLDB4YmYsMHhhZiwweDEwLDB4MDAsMHhiMCwweGFmLDB4MDAsMHgwMCwweDYyLDB4YWMsCi0weDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMCwweDYwLDB4ODEsMHg0MCwweDQyLDB4YjAsMHgwMywweDNjLAotMHgwMywweDAwLDB4NjMsMHgzNCwweDAwLDB4MDAsMHg2MiwweDkwLDB4MDIsMHg4MCwweDBhLDB4M2MsMHgwMiwweDgwLDB4MTAsMHgzYywKLTB4ZmYsMHgwMCwweDQyLDB4MzAsMHgwMCwweDQ2LDB4MDIsMHgwMCwweDEwLDB4MDAsMHg0MiwweDMwLDB4MTMsMHgwMCwweDQwLDB4MTAsCi0weDAzLDB4NDYsMHgwOCwweDAwLDB4YzQsMHg3ZCwweDQyLDB4OGQsMHg2OCwweDE1LDB4MDUsMHgyNiwweGQ0LDB4NjMsMHhhNCwweDk0LAotMHgwMSwweDAwLDB4NDcsMHgyNCwweDEwLDB4MDAsMHgwMiwweDI0LDB4YjAsMHgwMywweGM5LDB4MzQsMHgwMCwweDAwLDB4NjIsMHhhMCwKLTB4MDcsMHgwMCwweDgwLDB4MTAsMHgxYywweDAzLDB4YzYsMHgzNCwweGQ4LDB4NjMsMHhhMiwweDhjLDB4ZDQsMHg2MywweGEwLDB4YTQsCi0weGQ4LDB4NjMsMHhhMCwweGFjLDB4MDAsMHgwMCwweDA0LDB4MjQsMHgwMCwweDAwLDB4YzIsMHhhYywweDAwLDB4MDAsMHgyMCwweGFkLAotMHgwMSwweDAwLDB4ODIsMHgyNCwweGM0LDB4N2QsMHg0NywweGFkLDB4ZDQsMHg2MywweGEyLDB4YTQsMHgxMiwweDAwLDB4MDAsMHgwNSwKLTB4NDIsMHhiMCwweDAyLDB4M2MsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDEsMHgwMCwweDIxLDB4MzgsCi0weDAwLDB4NjAsMHg4MSwweDQwLDB4NjgsMHgxNSwweDA0LDB4MjYsMHgwYywweDRiLDB4ODMsMHg5NCwweDA4LDB4NGIsMHg4NSwweDk0LAotMHgxNCwweDAwLDB4YmYsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLDB4ODAsMHgwMCwweDYzLDB4MzAsMHg0MSwweGIwLDB4MDIsMHgzYywKLTB4MjUsMHgxOCwweDY1LDB4MDAsMHgwOCwweDAwLDB4NDIsMHgzNCwweDE4LDB4MDAsMHhiZCwweDI3LDB4MDAsMHgwMCwweDQzLDB4YTQsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MDgsMHg0YiwweDgzLDB4YTQsMHg4MCwweGZmLDB4MDMsMHgyNCwweDAzLDB4MDAsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4NDMsMHhhMCwweGM4LDB4MGUsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MDEsMHg0MCwKLTB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLDB4NjgsMHgxNSwweDA0LDB4MjYsCi0weDBjLDB4NGIsMHg4MywweDk0LDB4MDgsMHg0YiwweDg1LDB4OTQsMHgxNCwweDAwLDB4YmYsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLAotMHg4MCwweDAwLDB4NjMsMHgzMCwweDQxLDB4YjAsMHgwMiwweDNjLDB4MjUsMHgxOCwweDY1LDB4MDAsMHgwOCwweDAwLDB4NDIsMHgzNCwKLTB4MTgsMHgwMCwweGJkLDB4MjcsMHgwMCwweDAwLDB4NDMsMHhhNCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDgsMHg0YiwweDgzLDB4YTQsCi0weGZmLDB4MDAsMHg4NCwweDMwLDB4MGIsMHgwMCwweDgyLDB4MmMsMHhmZiwweGZmLDB4ZTcsMHgzMCwweDEwLDB4MDAsMHhhOCwweDkzLAotMHgxOSwweDAwLDB4NDAsMHgxMCwweDIxLDB4MTgsMHgwMCwweDAwLDB4MDIsMHg4MCwweDAzLDB4M2MsMHg4MCwweDEwLDB4MDQsMHgwMCwKLTB4YzAsMHg5MSwweDYzLDB4MjQsMHgyMSwweDEwLDB4NDMsMHgwMCwweDAwLDB4MDAsMHg0NCwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MywweGIwLDB4MDIsMHgzYywweDc4LDB4MDAsMHg0NCwweDM0LAotMHgwNywweDAwLDB4ZTIsMHgzMCwweDAwLDB4MDAsMHg4NSwweGFjLDB4MDQsMHgwMCwweDg2LDB4YWMsMHgwNCwweDAwLDB4NDAsMHgxOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhmOCwweGZmLDB4ZTIsMHgzMCwweDA4LDB4MDAsMHg0MiwweDI0LDB4ZmYsMHhmZiwweDQ3LDB4MzAsCi0weDIxLDB4MTAsMHhlOCwweDAwLDB4MDAsMHg4MCwweDAzLDB4M2MsMHgwOCwweDAwLDB4ODIsMHhhYywweDI1LDB4MTAsMHg0MywweDAwLAotMHgwOCwweDAwLDB4ODIsMHhhYywweDAxLDB4MDAsMHgwMywweDI0LDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4NjAsMHgwMCwKLTB4NDMsMHhiMCwweDAyLDB4M2MsMHgyMCwweDAxLDB4MDAsMHgwOCwweDZjLDB4MDAsMHg0NCwweDM0LDB4NDMsMHhiMCwweDAyLDB4M2MsCi0weDIwLDB4MDEsMHgwMCwweDA4LDB4NjAsMHgwMCwweDQ0LDB4MzQsMHg0MywweGIwLDB4MDIsMHgzYywweDIwLDB4MDEsMHgwMCwweDA4LAotMHg1NCwweDAwLDB4NDQsMHgzNCwweDQzLDB4YjAsMHgwMiwweDNjLDB4MjAsMHgwMSwweDAwLDB4MDgsMHg0OCwweDAwLDB4NDQsMHgzNCwKLTB4NDMsMHhiMCwweDAyLDB4M2MsMHgyMCwweDAxLDB4MDAsMHgwOCwweDNjLDB4MDAsMHg0NCwweDM0LDB4NDMsMHhiMCwweDAyLDB4M2MsCi0weDIwLDB4MDEsMHgwMCwweDA4LDB4MzAsMHgwMCwweDQ0LDB4MzQsMHg0MywweGIwLDB4MDIsMHgzYywweDIwLDB4MDEsMHgwMCwweDA4LAotMHgyNCwweDAwLDB4NDQsMHgzNCwweDQzLDB4YjAsMHgwMiwweDNjLDB4MjAsMHgwMSwweDAwLDB4MDgsMHgxOCwweDAwLDB4NDQsMHgzNCwKLTB4NDMsMHhiMCwweDAyLDB4M2MsMHgyMCwweDAxLDB4MDAsMHgwOCwweDBjLDB4MDAsMHg0NCwweDM0LDB4MjAsMHgwMSwweDAwLDB4MDgsCi0weDQzLDB4YjAsMHgwNCwweDNjLDB4MDEsMHgwMCwweDAyLDB4MjQsMHgyNSwweGIwLDB4MDMsMHgzYywweDA0LDB4MjAsMHg4MiwweDAwLAotMHgxOCwweDAzLDB4NjcsMHgzNCwweDAwLDB4ODAsMHgwMiwweDNjLDB4NDMsMHhiMCwweDAzLDB4M2MsMHgzNCwweDA1LDB4NDYsMHgyNCwKLTB4ODgsMHgwMCwweDY1LDB4MzQsMHgyMSwweDEwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg0MiwweDI0LDB4ZmYsMHhmZiwweDQyLDB4MzAsCi0weDA1LDB4MDAsMHg0MywweDJjLDB4ZmQsMHhmZiwweDYwLDB4MTQsMHgwMSwweDAwLDB4NDIsMHgyNCwweDAwLDB4MDAsMHhlNiwweGFjLAotMHgwMCwweDAwLDB4YTIsMHg5NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHhmZiwweDQyLDB4MzAsMHgyNCwweDEwLDB4NDQsMHgwMCwKLTB4ZjQsMHhmZiwweDQwLDB4MWMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDI1LDB4YjAsMHgwOCwweDNjLDB4MDAsMHg4MCwweDAyLDB4M2MsMHhjOCwweGZmLDB4YmQsMHgyNywweDE4LDB4MDMsMHgwMywweDM1LAotMHg5MCwweDA1LDB4NDIsMHgyNCwweDAwLDB4MDAsMHg2MiwweGFjLDB4MzAsMHgwMCwweGI2LDB4YWYsMHgyOCwweDAwLDB4YjQsMHhhZiwKLTB4MjQsMHgwMCwweGIzLDB4YWYsMHgxYywweDAwLDB4YjEsMHhhZiwweDM0LDB4MDAsMHhiZiwweGFmLDB4MmMsMHgwMCwweGI1LDB4YWYsCi0weDIwLDB4MDAsMHhiMiwweGFmLDB4MTgsMHgwMCwweGIwLDB4YWYsMHgwYywweDAwLDB4ZjIsMHg4NCwweDA4LDB4MDAsMHhmNSwweDhjLAotMHhmZiwweDAwLDB4YzYsMHgzMCwweDAwLDB4MDEsMHgwMiwweDI0LDB4MjMsMHgxMCwweDQ2LDB4MDAsMHhmZiwweGZmLDB4NTEsMHgzMCwKLTB4ZDAsMHgwMywweDA4LDB4MzUsMHhmZiwweDAwLDB4OTYsMHgzMCwweDAwLDB4MDAsMHgxMiwweGFkLDB4MjEsMHhhMCwweGEwLDB4MDAsCi0weDIxLDB4MzAsMHhjNSwweDAwLDB4MDAsMHgwMCwweDE1LDB4YWQsMHgyMSwweDIwLDB4YzAsMHgwMiwweDIxLDB4MjgsMHhhMCwweDAyLAotMHgyMSwweDM4LDB4MjAsMHgwMiwweDEwLDB4MDEsMHgwMCwweDBjLDB4MTAsMHgwMCwweGEwLDB4YWYsMHgyMywweDE4LDB4NTEsMHgwMiwKLTB4ZmYsMHhmZiwweDgyLDB4MzIsMHgwMCwweDk0LDB4MDMsMHgwMCwweDAzLDB4OTQsMHgxMiwweDAwLDB4YTYsMHgwMSwweDAwLDB4MDgsCi0weDAyLDB4OWEsMHgwMiwweDAwLDB4MjgsMHhiMCwweDAzLDB4M2MsMHhjMCwweDEwLDB4MTMsMHgwMCwweDIxLDB4MTAsMHg0MywweDAwLAotMHgwMCwweDAwLDB4NDQsMHg5MCwweDI1LDB4YjAsMHgxMCwweDNjLDB4MjAsMHgxMCwweDAyLDB4M2MsMHhmZiwweDAwLDB4OTMsMHgzMCwKLTB4MDAsMHgyMiwweDEzLDB4MDAsMHhmZiwweGZmLDB4NDMsMHgzMiwweDAxLDB4MDEsMHg0NSwweDJhLDB4MjEsMHhhMCwweDgyLDB4MDAsCi0weDIxLDB4YTgsMHhiMSwweDAyLDB4ZDAsMHgwMywweDAyLDB4MzYsMHgwMCwweDAxLDB4MTEsMHgyNCwweDBiLDB4ODgsMHg2NSwweDAwLAotMHgyMSwweDIwLDB4YzAsMHgwMiwweDAwLDB4MDAsMHg1MywweGFjLDB4NGQsMHgwMSwweDAwLDB4MGMsMHhiMCwweDAzLDB4MTAsMHgzNiwKLTB4MjEsMHgzMCwweDgwLDB4MDIsMHgyMSwweDIwLDB4YzAsMHgwMiwweDIxLDB4MjgsMHhhMCwweDAyLDB4MjEsMHgzOCwweDIwLDB4MDIsCi0weDEwLDB4MDEsMHgwMCwweDBjLDB4MTAsMHgwMCwweGEwLDB4YWYsMHgyMywweDE4LDB4NTEsMHgwMiwweDAwLDB4OTQsMHgwMywweDAwLAotMHgwMywweDk0LDB4MTIsMHgwMCwweDAwLDB4MDAsMHgxMiwweGFlLDB4ZTIsMHhmZiwweDQwLDB4MWUsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MzQsMHgwMCwweGJmLDB4OGYsMHgzMCwweDAwLDB4YjYsMHg4ZiwweDJjLDB4MDAsMHhiNSwweDhmLDB4MjgsMHgwMCwweGI0LDB4OGYsCi0weDI0LDB4MDAsMHhiMywweDhmLDB4MjAsMHgwMCwweGIyLDB4OGYsMHgxYywweDAwLDB4YjEsMHg4ZiwweDE4LDB4MDAsMHhiMCwweDhmLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDM4LDB4MDAsMHhiZCwweDI3LDB4YzgsMHhmZiwweGJkLDB4MjcsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4MjUsMHhiMCwweDA0LDB4M2MsMHgyMCwweDAwLDB4YjIsMHhhZiwweDY4LDB4MTUsMHg1MiwweDI0LDB4MDAsMHg4MCwweDAyLDB4M2MsCi0weDE4LDB4MDMsMHg4MywweDM0LDB4YzgsMHgwNiwweDQyLDB4MjQsMHgyOCwweDAwLDB4YjQsMHhhZiwweDI0LDB4MDAsMHhiMywweGFmLAotMHgzMCwweDAwLDB4YmYsMHhhZiwweDJjLDB4MDAsMHhiNSwweGFmLDB4MWMsMHgwMCwweGIxLDB4YWYsMHgxOCwweDAwLDB4YjAsMHhhZiwKLTB4MDAsMHgwMCwweDYyLDB4YWMsMHhiMCwweDAzLDB4OTMsMHgzNCwweDIxLDB4YTAsMHg0MCwweDAyLDB4NTQsMHg2NCwweDQyLDB4OGUsCi0weGMwLDB4NjQsMHg1MCwweDhlLDB4MjEsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjIsMHhhZSwweDU4LDB4NjQsMHg0MiwweGFlLAotMHgwMCwweDAwLDB4NzAsMHhhZSwweDRkLDB4MDEsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDY0LDB4NDQsMHg4ZSwKLTB4YzQsMHg2NCwweDQzLDB4OGUsMHgyMCwweDAwLDB4ODQsMHgyNCwweDNmLDB4MDAsMHg2MiwweDI0LDB4MmIsMHgxMCwweDQ0LDB4MDAsCi0weDBhLDB4MTgsMHg4MiwweDAwLDB4YzAsMHg2NCwweDQzLDB4YWUsMHhjMCwweDY0LDB4ODUsMHg4ZSwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4NjUsMHhhZSwweDAyLDB4ODAsMHgwMiwweDNjLDB4ZmYsMHhmZiwweDEwLDB4MzIsMHgyNSwweDgwLDB4MDIsMHgwMiwKLTB4MDAsMHgwMCwweDcwLDB4YWUsMHgwYywweDAwLDB4MDIsMHg5MiwweGZmLDB4MDAsMHgxNSwweDI0LDB4MjEsMHgyMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHg2MiwweGFlLDB4MGMsMHgwMCwweDExLDB4OTIsMHgyMCwweDEwLDB4MDIsMHgzYywweDIwLDB4MDAsMHgwNywweDI0LAotMHgwMCwweDFhLDB4MTEsMHgwMCwweDIxLDB4MTgsMHg2MiwweDAwLDB4MDUsMHgwMCwweDM1LDB4MTIsMHgyMSwweDMwLDB4NjAsMHgwMCwKLTB4MDgsMHg2NCwweDkxLDB4YTIsMHg1NCwweDY0LDB4ODMsMHhhZSwweDEwLDB4MDEsMHgwMCwweDBjLDB4MTAsMHgwMCwweGEwLDB4YWYsCi0weDA0LDB4MDAsMHgwNCwweDhlLDB4MDgsMHgwMCwweDAzLDB4OGUsMHhmZiwweGUwLDB4MDIsMHgzYywweGZmLDB4ZmYsMHg0MiwweDM0LAotMHgxZiwweDAwLDB4ODQsMHgzMCwweDI0LDB4MTgsMHg2MiwweDAwLDB4MDAsMHgyNiwweDA0LDB4MDAsMHhmZiwweGRmLDB4MDIsMHgzYywKLTB4MjUsMHgxOCwweDY0LDB4MDAsMHhmZiwweGZmLDB4NDIsMHgzNCwweDI0LDB4MTgsMHg2MiwweDAwLDB4MDAsMHg0MCwweDA0LDB4M2MsCi0weDI1LDB4MTgsMHg2NCwweDAwLDB4YzAsMHhmZiwweDAyLDB4MjQsMHgyNCwweDE4LDB4NjIsMHgwMCwweDA4LDB4MDAsMHgwMywweGFlLAotMHhjOSwweDY0LDB4ODQsMHg5MiwweDJhLDB4YjAsMHgwMiwweDNjLDB4MDEsMHgwMCwweDAzLDB4MjQsMHgwMSwweDAwLDB4ODQsMHgyNCwKLTB4MDEsMHgwMCwweDQyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHhhMCwweGM0LDB4ZmYsMHgzNSwweDE2LDB4YzksMHg2NCwweDg0LDB4YTIsCi0weGZjLDB4NGEsMHg4MiwweDhlLDB4NDEsMHhiMCwweDAzLDB4M2MsMHgzMCwweDAwLDB4YmYsMHg4ZiwweDAwLDB4MzgsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4NjIsMHhhYywweDJjLDB4MDAsMHhiNSwweDhmLDB4ZmMsMHg0YSwweDgyLDB4YWUsMHgyNCwweDAwLDB4YjMsMHg4ZiwKLTB4MjgsMHgwMCwweGI0LDB4OGYsMHgyMCwweDAwLDB4YjIsMHg4ZiwweDFjLDB4MDAsMHhiMSwweDhmLDB4MTgsMHgwMCwweGIwLDB4OGYsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MzgsMHgwMCwweGJkLDB4MjcsMHgyNSwweGIwLDB4MDQsMHgzYywweDAwLDB4ODAsMHgwMiwweDNjLAotMHhjOCwweGZmLDB4YmQsMHgyNywweDE4LDB4MDMsMHg4MywweDM0LDB4MzgsMHgwOCwweDQyLDB4MjQsMHgzNCwweDAwLDB4YmYsMHhhZiwKLTB4MzAsMHgwMCwweGI2LDB4YWYsMHgyYywweDAwLDB4YjUsMHhhZiwweDI4LDB4MDAsMHhiNCwweGFmLDB4MjQsMHgwMCwweGIzLDB4YWYsCi0weDIwLDB4MDAsMHhiMiwweGFmLDB4MWMsMHgwMCwweGIxLDB4YWYsMHgxOCwweDAwLDB4YjAsMHhhZiwweDAwLDB4MDAsMHg2MiwweGFjLAotMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDAsMHg2MCwweDgxLDB4NDAsMHgwMiwweDgwLDB4MTYsMHgzYywKLTB4NjgsMHgxNSwweGQyLDB4MjYsMHhiMCwweDAzLDB4OTMsMHgzNCwweDJkLDB4MDIsMHgwMCwweDA4LDB4MjEsMHhhOCwweDQwLDB4MDIsCi0weDJhLDB4YjAsMHgwMiwweDNjLDB4MDgsMHgwMCwweDA0LDB4YWUsMHgwOSwweDAwLDB4NDIsMHgzNCwweDAxLDB4MDAsMHgwMywweDI0LAotMHgwMiwweDAwLDB4MDQsMHgyNCwweDAwLDB4MDAsMHg0MywweGEwLDB4MDAsMHgwMCwweDQ0LDB4YTAsMHg0MiwweDAwLDB4MzQsMHgxMiwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg2YywweDY0LDB4NDIsMHg4ZSwweGQ4LDB4NjQsMHg1MCwweDhlLDB4MDEsMHgwMCwweDA0LDB4MjQsCi0weDAwLDB4MDAsMHg2MiwweGFlLDB4NzAsMHg2NCwweDQyLDB4YWUsMHgwMCwweDAwLDB4NzAsMHhhZSwweDRkLDB4MDEsMHgwMCwweDBjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGQ4LDB4NjQsMHg0NCwweDhlLDB4ZGMsMHg2NCwweDQzLDB4OGUsMHgyMCwweDAwLDB4ODQsMHgyNCwKLTB4M2YsMHgwMCwweDYyLDB4MjQsMHgyYiwweDEwLDB4NDQsMHgwMCwweDBhLDB4MTgsMHg4MiwweDAwLDB4ZDgsMHg2NCwweDQzLDB4YWUsCi0weGQ4LDB4NjQsMHhhNSwweDhlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjUsMHhhZSwweDAyLDB4ODAsMHgwMiwweDNjLAotMHhmZiwweGZmLDB4MTAsMHgzMiwweDI1LDB4ODAsMHgwMiwweDAyLDB4MDAsMHgwMCwweDcwLDB4YWUsMHgwYywweDAwLDB4MDIsMHg5MiwKLTB4ZmYsMHgwMCwweDE0LDB4MjQsMHgwMSwweDAwLDB4MDQsMHgyNCwweDAwLDB4MDAsMHg2MiwweGFlLDB4MGMsMHgwMCwweDExLDB4OTIsCi0weDIwLDB4MTAsMHgwMiwweDNjLDB4MjAsMHgwMCwweDA3LDB4MjQsMHgwMCwweDFhLDB4MTEsMHgwMCwweDIxLDB4MTgsMHg2MiwweDAwLAotMHgwNSwweDAwLDB4MzQsMHgxMiwweDIxLDB4MzAsMHg2MCwweDAwLDB4NmMsMHg2NCwweGEzLDB4YWUsMHgxMCwweDY0LDB4YjEsMHhhMiwKLTB4MTAsMHgwMSwweDAwLDB4MGMsMHgxMCwweDAwLDB4YTAsMHhhZiwweDA0LDB4MDAsMHgwNCwweDhlLDB4MDgsMHgwMCwweDAzLDB4OGUsCi0weGZmLDB4ZTAsMHgwMiwweDNjLDB4ZmYsMHhmZiwweDQyLDB4MzQsMHgxZiwweDAwLDB4ODQsMHgzMCwweDI0LDB4MTgsMHg2MiwweDAwLAotMHgwMCwweDI2LDB4MDQsMHgwMCwweGZmLDB4ZGYsMHgwMiwweDNjLDB4MjUsMHgxOCwweDY0LDB4MDAsMHhmZiwweGZmLDB4NDIsMHgzNCwKLTB4MjQsMHgxOCwweDYyLDB4MDAsMHgwMCwweDQwLDB4MDQsMHgzYywweDI1LDB4MTgsMHg2NCwweDAwLDB4YzAsMHhmZiwweDA1LDB4MjQsCi0weDgyLDB4MTEsMHgwMywweDAwLDB4MjQsMHgyMCwweDY1LDB4MDAsMHgwMSwweDAwLDB4NDIsMHgzMCwweGMwLDB4ZmYsMHg0MCwweDEwLAotMHgwNCwweDAwLDB4ODQsMHgzNCwweDJhLDB4YjAsMHgwMiwweDNjLDB4MDgsMHgwMCwweDAzLDB4YWUsMHgwOSwweDAwLDB4NDIsMHgzNCwKLTB4MDEsMHgwMCwweDAzLDB4MjQsMHgwMiwweDAwLDB4MDQsMHgyNCwweDAwLDB4MDAsMHg0MywweGEwLDB4MDAsMHgwMCwweDQ0LDB4YTAsCi0weGMwLDB4ZmYsMHgzNCwweDE2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LAotMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLDB4NjgsMHgxNSwweGMyLDB4MjYsMHhmYywweDRhLDB4NDMsMHg4YywKLTB4MzQsMHgwMCwweGJmLDB4OGYsMHgzMCwweDAwLDB4YjYsMHg4ZiwweDJjLDB4MDAsMHhiNSwweDhmLDB4MjgsMHgwMCwweGI0LDB4OGYsCi0weDI0LDB4MDAsMHhiMywweDhmLDB4MjAsMHgwMCwweGIyLDB4OGYsMHgxYywweDAwLDB4YjEsMHg4ZiwweDE4LDB4MDAsMHhiMCwweDhmLAotMHgwMCwweDM4LDB4NjMsMHgzNCwweDQxLDB4YjAsMHgwNCwweDNjLDB4MzgsMHgwMCwweGJkLDB4MjcsMHgwMCwweDAwLDB4ODMsMHhhYywKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHhmYywweDRhLDB4NDMsMHhhYywweDI1LDB4YjAsMHgwNCwweDNjLDB4MDAsMHg4MCwweDAyLDB4M2MsCi0weGMwLDB4ZmYsMHhiZCwweDI3LDB4MTgsMHgwMywweDgzLDB4MzQsMHgwOCwweDBhLDB4NDIsMHgyNCwweDM4LDB4MDAsMHhiZiwweGFmLAotMHgzNCwweDAwLDB4YjcsMHhhZiwweDMwLDB4MDAsMHhiNiwweGFmLDB4MmMsMHgwMCwweGI1LDB4YWYsMHgyOCwweDAwLDB4YjQsMHhhZiwKLTB4MjQsMHgwMCwweGIzLDB4YWYsMHgyMCwweDAwLDB4YjIsMHhhZiwweDFjLDB4MDAsMHhiMSwweGFmLDB4MTgsMHgwMCwweGIwLDB4YWYsCi0weDAwLDB4MDAsMHg2MiwweGFjLDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAwLDB4NjAsMHg4MSwweDQwLAotMHgwMiwweDgwLDB4MTcsMHgzYywweDY4LDB4MTUsMHhmMiwweDI2LDB4YjAsMHgwMywweDkzLDB4MzQsMHgwMiwweDgwLDB4MTQsMHgzYywKLTB4YWIsMHgwMiwweDAwLDB4MDgsMHgyMSwweGIwLDB4NDAsMHgwMiwweDJhLDB4YjAsMHgwMywweDNjLDB4MDgsMHgwMCwweDA0LDB4YWUsCi0weDA1LDB4MDAsMHg2MywweDM0LDB4MDEsMHgwMCwweDAyLDB4MjQsMHgwMiwweDAwLDB4MDQsMHgyNCwweDAwLDB4MDAsMHg2MiwweGEwLAotMHgwMCwweDAwLDB4NjQsMHhhMCwweGNhLDB4N2QsMHg4MiwweDk2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4NDIsMHgyNCwKLTB4Y2EsMHg3ZCwweDgyLDB4YTYsMHhjYSwweDdkLDB4ODMsMHg5NiwweDI1LDB4YjAsMHgwMiwweDNjLDB4NjYsMHgwMywweDQyLDB4MzQsCi0weDAwLDB4MDAsMHg0MywweGE0LDB4NGEsMHgwMCwweDM1LDB4MTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4NjQsMHg0MiwweDhlLAotMHhjYywweDY0LDB4NTAsMHg4ZSwweDAxLDB4MDAsMHgwNCwweDI0LDB4MDAsMHgwMCwweDYyLDB4YWUsMHg2NCwweDY0LDB4NDIsMHhhZSwKLTB4MDAsMHgwMCwweDcwLDB4YWUsMHg0ZCwweDAxLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4Y2MsMHg2NCwweDQ0LDB4OGUsCi0weGQwLDB4NjQsMHg0MywweDhlLDB4MjAsMHgwMCwweDg0LDB4MjQsMHgzZiwweDAwLDB4NjIsMHgyNCwweDJiLDB4MTAsMHg0NCwweDAwLAotMHgwYSwweDE4LDB4ODIsMHgwMCwweGNjLDB4NjQsMHg0MywweGFlLDB4Y2MsMHg2NCwweGM1LDB4OGUsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDY1LDB4YWUsMHgwMiwweDgwLDB4MDIsMHgzYywweGZmLDB4ZmYsMHgxMCwweDMyLDB4MjUsMHg4MCwweDAyLDB4MDIsCi0weDAwLDB4MDAsMHg3MCwweGFlLDB4MGMsMHgwMCwweDAyLDB4OTIsMHhmZiwweDAwLDB4MTUsMHgyNCwweDAxLDB4MDAsMHgwNCwweDI0LAotMHgwMCwweDAwLDB4NjIsMHhhZSwweDBjLDB4MDAsMHgxMSwweDkyLDB4MjAsMHgxMCwweDAyLDB4M2MsMHgyMCwweDAwLDB4MDcsMHgyNCwKLTB4MDAsMHgxYSwweDExLDB4MDAsMHgyMSwweDE4LDB4NjIsMHgwMCwweDA1LDB4MDAsMHgzNSwweDEyLDB4MjEsMHgzMCwweDYwLDB4MDAsCi0weDYwLDB4NjQsMHhjMywweGFlLDB4MGMsMHg2NCwweGQxLDB4YTIsMHgxMCwweDAxLDB4MDAsMHgwYywweDEwLDB4MDAsMHhhMCwweGFmLAotMHgwNCwweDAwLDB4MDQsMHg4ZSwweDA4LDB4MDAsMHgwMywweDhlLDB4ZmYsMHhlMCwweDAyLDB4M2MsMHhmZiwweGZmLDB4NDIsMHgzNCwKLTB4MWYsMHgwMCwweDg0LDB4MzAsMHgyNCwweDE4LDB4NjIsMHgwMCwweDAwLDB4MjYsMHgwNCwweDAwLDB4ZmYsMHhkZiwweDAyLDB4M2MsCi0weDI1LDB4MTgsMHg2NCwweDAwLDB4ZmYsMHhmZiwweDQyLDB4MzQsMHgyNCwweDE4LDB4NjIsMHgwMCwweDAwLDB4NDAsMHgwNCwweDNjLAotMHgyNSwweDE4LDB4NjQsMHgwMCwweGMwLDB4ZmYsMHgwNSwweDI0LDB4ODIsMHgxMSwweDAzLDB4MDAsMHgyNCwweDIwLDB4NjUsMHgwMCwKLTB4MDEsMHgwMCwweDQyLDB4MzAsMHhiOCwweGZmLDB4NDAsMHgxMCwweDA0LDB4MDAsMHg4NCwweDM0LDB4MDgsMHgwMCwweDAzLDB4YWUsCi0weDJhLDB4YjAsMHgwMywweDNjLDB4MDUsMHgwMCwweDYzLDB4MzQsMHgwMSwweDAwLDB4MDIsMHgyNCwweDAyLDB4MDAsMHgwNCwweDI0LAotMHgwMCwweDAwLDB4NjIsMHhhMCwweDAwLDB4MDAsMHg2NCwweGEwLDB4Y2EsMHg3ZCwweDgyLDB4OTYsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDQyLDB4MjQsMHhjYSwweDdkLDB4ODIsMHhhNiwweGNhLDB4N2QsMHg4MywweDk2LDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weDY2LDB4MDMsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4YTQsMHhiOCwweGZmLDB4MzUsMHgxNiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDEsMHgwMCwweDIxLDB4MzgsMHgwMCwweDYwLDB4ODEsMHg0MCwKLTB4NjgsMHgxNSwweGUyLDB4MjYsMHhmYywweDRhLDB4NDMsMHg4YywweDM4LDB4MDAsMHhiZiwweDhmLDB4MzQsMHgwMCwweGI3LDB4OGYsCi0weDMwLDB4MDAsMHhiNiwweDhmLDB4MmMsMHgwMCwweGI1LDB4OGYsMHgyOCwweDAwLDB4YjQsMHg4ZiwweDI0LDB4MDAsMHhiMywweDhmLAotMHgyMCwweDAwLDB4YjIsMHg4ZiwweDFjLDB4MDAsMHhiMSwweDhmLDB4MTgsMHgwMCwweGIwLDB4OGYsMHgwMCwweDM4LDB4NjMsMHgzNCwKLTB4NDEsMHhiMCwweDA0LDB4M2MsMHg0MCwweDAwLDB4YmQsMHgyNywweDAwLDB4MDAsMHg4MywweGFjLDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weGZjLDB4NGEsMHg0MywweGFjLDB4YzAsMHhmZiwweGJkLDB4MjcsMHgyYywweDAwLDB4YjUsMHhhZiwweDM4LDB4MDAsMHhiZiwweGFmLAotMHgzNCwweDAwLDB4YjcsMHhhZiwweDMwLDB4MDAsMHhiNiwweGFmLDB4MjgsMHgwMCwweGI0LDB4YWYsMHgyNCwweDAwLDB4YjMsMHhhZiwKLTB4MjAsMHgwMCwweGIyLDB4YWYsMHgxYywweDAwLDB4YjEsMHhhZiwweDE4LDB4MDAsMHhiMCwweGFmLDB4MDIsMHg4MCwweDA2LDB4M2MsCi0weDdjLDB4N2UsMHhjNSwweDkwLDB4MDAsMHg4MCwweDAzLDB4M2MsMHgyNSwweGIwLDB4MDIsMHgzYywweDE4LDB4MDMsMHg0MiwweDM0LAotMHgyNCwweDBjLDB4NjMsMHgyNCwweDQwLDB4MDAsMHhhNCwweDMwLDB4MDAsMHgwMCwweDQzLDB4YWMsMHgyMSwweGE4LDB4MDAsMHgwMCwKLTB4MDMsMHgwMCwweDgwLDB4MTAsMHg3ZiwweDAwLDB4YTIsMHgzMCwweGJmLDB4MDAsMHhhMiwweDMwLDB4MDEsMHgwMCwweDE1LDB4MjQsCi0weDdjLDB4N2UsMHhjMiwweGEwLDB4N2MsMHg3ZSwweGMyLDB4OTAsMHgyNSwweGIwLDB4MDQsMHgzYywweDg4LDB4MDIsMHg4MywweDM0LAotMHgwMCwweDAwLDB4NjIsMHhhYywweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMCwweDYwLDB4ODEsMHg0MCwKLTB4MDIsMHg4MCwweDE2LDB4M2MsMHg2OCwweDE1LDB4ZDIsMHgyNiwweGIwLDB4MDMsMHg5MywweDM0LDB4MDIsMHg4MCwweDE0LDB4M2MsCi0weDQzLDB4MDMsMHgwMCwweDA4LDB4MjEsMHhiOCwweDQwLDB4MDIsMHgyNCwweDEwLDB4YTIsMHgwMCwweDA0LDB4MDAsMHg0MiwweDM0LAotMHgyYSwweGIwLDB4MDcsMHgzYywweDA4LDB4MDAsMHgwMiwweGFlLDB4MGQsMHgwMCwweGUyLDB4MzQsMHgwNCwweDAwLDB4NDMsMHgyNCwKLTB4MGIsMHgxMCwweDc1LDB4MDAsMHgwMSwweDAwLDB4MDQsMHgyNCwweDAyLDB4MDAsMHgwMywweDI0LDB4MDAsMHgwMCwweDQ0LDB4YTAsCi0weDAwLDB4MDAsMHg0MywweGEwLDB4Y2EsMHg3ZCwweDg0LDB4OTYsMHgyNSwweGIwLDB4MDYsMHgzYywweDY2LDB4MDMsMHhjNSwweDM0LAotMHgwMSwweDAwLDB4ODQsMHgyNCwweGNhLDB4N2QsMHg4NCwweGE2LDB4Y2EsMHg3ZCwweDgyLDB4OTYsMHhmZiwweDAwLDB4MDMsMHgyNCwKLTB4MDAsMHgwMCwweGEyLDB4YTQsMHg1YSwweDAwLDB4MjMsMHgxMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHg2NCwweDQyLDB4OGUsCi0weDkwLDB4NjQsMHg1MCwweDhlLDB4MDMsMHgwMCwweDA0LDB4MjQsMHgwMCwweDAwLDB4NjIsMHhhZSwweDI4LDB4NjQsMHg0MiwweGFlLAotMHgwMCwweDAwLDB4NzAsMHhhZSwweDRkLDB4MDEsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5MCwweDY0LDB4NDQsMHg4ZSwKLTB4OTQsMHg2NCwweDQzLDB4OGUsMHgyMCwweDAwLDB4ODQsMHgyNCwweDNmLDB4MDAsMHg2MiwweDI0LDB4MmIsMHgxMCwweDQ0LDB4MDAsCi0weDBhLDB4MTgsMHg4MiwweDAwLDB4OTAsMHg2NCwweDQzLDB4YWUsMHg5MCwweDY0LDB4ZTIsMHg4ZSwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4NjIsMHhhZSwweDAyLDB4ODAsMHgwMiwweDNjLDB4ZmYsMHhmZiwweDEwLDB4MzIsMHgyNSwweDgwLDB4MDIsMHgwMiwKLTB4MDAsMHgwMCwweDcwLDB4YWUsMHgwYywweDAwLDB4MDIsMHg5MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYyLDB4YWUsCi0weDBjLDB4MDAsMHgxMSwweDkyLDB4ZmYsMHgwMCwweDAyLDB4MjQsMHgwZCwweDAwLDB4MjIsMHgxMiwweDAwLDB4MTIsMHgxMSwweDAwLAotMHgyMCwweDEwLDB4MDMsMHgzYywweDIxLDB4MTAsMHg0MywweDAwLDB4NWEsMHgwMCwweGEwLDB4MTIsMHgyNCwweDY0LDB4ZTIsMHhhZSwKLTB4ZWMsMHg2MywweGYxLDB4YTIsMHg2OCwweDE1LDB4YzIsMHgyNiwweDI0LDB4NjQsMHg0NiwweDhjLDB4OTAsMHg2NCwweDQ1LDB4OGMsCi0weDAzLDB4MDAsMHgwNCwweDI0LDB4MjAsMHgwMCwweDA3LDB4MjQsMHgxMCwweDAxLDB4MDAsMHgwYywweDEwLDB4MDAsMHhhMCwweGFmLAotMHgwNCwweDAwLDB4MDQsMHg4ZSwweDE0LDB4MDAsMHgwMywweDhlLDB4MDgsMHgwMCwweDA1LDB4OGUsMHhmZiwweGUwLDB4MDIsMHgzYywKLTB4MWYsMHgwMCwweDg0LDB4MzAsMHg0MiwweDFhLDB4MDMsMHgwMCwweGZmLDB4ZmYsMHg0MiwweDM0LDB4MDAsMHgyNiwweDA0LDB4MDAsCi0weDI0LDB4MjgsMHhhMiwweDAwLDB4M2YsMHgwMCwweDYzLDB4MzAsMHgyNSwweDI4LDB4YTQsMHgwMCwweDBjLDB4MDAsMHg2MywweDI4LAotMHgwNiwweDAwLDB4NjAsMHgxNCwweDIxLDB4MjAsMHhhMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4OTYsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4ZmQsMHgwZiwweDQyLDB4MjgsMHgwOCwweDAwLDB4NDAsMHgxNCwweDgyLDB4MTEsMHgwNSwweDAwLDB4ZmYsMHhkZiwweDAyLDB4M2MsCi0weGZmLDB4ZmYsMHg0MiwweDM0LDB4MjQsMHgyOCwweDgyLDB4MDAsMHgwMCwweDQwLDB4MDMsMHgzYywweDI1LDB4MjAsMHhhMywweDAwLAotMHgyMSwweDI4LDB4ODAsMHgwMCwweDgyLDB4MTEsMHgwNSwweDAwLDB4MDEsMHgwMCwweDQyLDB4MzAsMHhhNiwweGZmLDB4NDAsMHgxMCwKLTB4YzAsMHhmZiwweDAyLDB4MjQsMHgyYSwweGIwLDB4MDcsMHgzYywweDBkLDB4MDAsMHhlMiwweDM0LDB4MDQsMHgwMCwweDQzLDB4MjQsCi0weDA4LDB4MDAsMHgwNCwweGFlLDB4MGIsMHgxMCwweDc1LDB4MDAsMHgwMSwweDAwLDB4MDQsMHgyNCwweDAyLDB4MDAsMHgwMywweDI0LAotMHgwMCwweDAwLDB4NDQsMHhhMCwweDAwLDB4MDAsMHg0MywweGEwLDB4Y2EsMHg3ZCwweDg0LDB4OTYsMHgyNSwweGIwLDB4MDYsMHgzYywKLTB4NjYsMHgwMywweGM1LDB4MzQsMHgwMSwweDAwLDB4ODQsMHgyNCwweGNhLDB4N2QsMHg4NCwweGE2LDB4Y2EsMHg3ZCwweDgyLDB4OTYsCi0weGZmLDB4MDAsMHgwMywweDI0LDB4MDAsMHgwMCwweGEyLDB4YTQsMHhhOCwweGZmLDB4MjMsMHgxNiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyMiwweDAwLDB4YTAsMHgxMiwweDY4LDB4MTUsMHhjMiwweDI2LDB4ZWMsMHg2MywweDQzLDB4OTAsMHg0MSwweDAwLDB4ZTQsMHgzNCwKLTB4YjAsMHgwMywweGM1LDB4MzQsMHgwMCwweDAwLDB4ODMsMHhhMCwweDAwLDB4MDAsMHhhMywweGFjLDB4MDAsMHg2MCwweDAxLDB4NDAsCi0weDAxLDB4MDAsMHgyMSwweDM0LDB4MDAsMHg2MCwweDgxLDB4NDAsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LAotMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLDB4NjgsMHgxNSwweGM1LDB4MjYsMHhmYywweDRhLDB4YTQsMHg4YywKLTB4MDEsMHgwMCwweDAyLDB4M2MsMHgzOCwweDAwLDB4YmYsMHg4ZiwweDM0LDB4MDAsMHhiNywweDhmLDB4MzAsMHgwMCwweGI2LDB4OGYsCi0weDJjLDB4MDAsMHhiNSwweDhmLDB4MjgsMHgwMCwweGI0LDB4OGYsMHgyNCwweDAwLDB4YjMsMHg4ZiwweDIwLDB4MDAsMHhiMiwweDhmLAotMHgxYywweDAwLDB4YjEsMHg4ZiwweDE4LDB4MDAsMHhiMCwweDhmLDB4MDAsMHg4MCwweDQyLDB4MzQsMHgyNSwweDIwLDB4ODIsMHgwMCwKLTB4NDEsMHhiMCwweDAzLDB4M2MsMHg0MCwweDAwLDB4YmQsMHgyNywweDAwLDB4MDAsMHg2NCwweGFjLDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weGZjLDB4NGEsMHhhNCwweGFjLDB4NjUsMHgwMywweDAwLDB4MDgsMHhlOCwweDYzLDB4ZjEsMHhhMiwweGU4LDB4NjMsMHg0MywweDkwLAotMHg0MCwweDAwLDB4ZTQsMHgzNCwweGIwLDB4MDMsMHhjNSwweDM0LDB4MDAsMHgwMCwweDgzLDB4YTAsMHgwMCwweDAwLDB4YTMsMHhhYywKLTB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAwLDB4NjAsMHg4MSwweDQwLDB4MDAsMHg2MCwweDAxLDB4NDAsCi0weDAxLDB4MDAsMHgyMSwweDM0LDB4MDEsMHgwMCwweDIxLDB4MzgsMHgwMCwweDYwLDB4ODEsMHg0MCwweDY4LDB4MTUsMHhjNSwweDI2LAotMHhmYywweDRhLDB4YTQsMHg4YywweDAxLDB4MDAsMHgwMiwweDNjLDB4MzgsMHgwMCwweGJmLDB4OGYsMHgzNCwweDAwLDB4YjcsMHg4ZiwKLTB4MzAsMHgwMCwweGI2LDB4OGYsMHgyYywweDAwLDB4YjUsMHg4ZiwweDI4LDB4MDAsMHhiNCwweDhmLDB4MjQsMHgwMCwweGIzLDB4OGYsCi0weDIwLDB4MDAsMHhiMiwweDhmLDB4MWMsMHgwMCwweGIxLDB4OGYsMHgxOCwweDAwLDB4YjAsMHg4ZiwweDAwLDB4ODAsMHg0MiwweDM0LAotMHgyNSwweDIwLDB4ODIsMHgwMCwweDQxLDB4YjAsMHgwMywweDNjLDB4NDAsMHgwMCwweGJkLDB4MjcsMHgwMCwweDAwLDB4NjQsMHhhYywKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHhmYywweDRhLDB4YTQsMHhhYywweGMwLDB4ZmYsMHhiZCwweDI3LDB4MmMsMHgwMCwweGI1LDB4YWYsCi0weDM4LDB4MDAsMHhiZiwweGFmLDB4MzQsMHgwMCwweGI3LDB4YWYsMHgzMCwweDAwLDB4YjYsMHhhZiwweDI4LDB4MDAsMHhiNCwweGFmLAotMHgyNCwweDAwLDB4YjMsMHhhZiwweDIwLDB4MDAsMHhiMiwweGFmLDB4MWMsMHgwMCwweGIxLDB4YWYsMHgxOCwweDAwLDB4YjAsMHhhZiwKLTB4MDIsMHg4MCwweDA2LDB4M2MsMHg3YywweDdlLDB4YzUsMHg5MCwweDAwLDB4ODAsMHgwMywweDNjLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weDE4LDB4MDMsMHg0MiwweDM0LDB4NzgsMHgwZiwweDYzLDB4MjQsMHgxMCwweDAwLDB4YTQsMHgzMCwweDAwLDB4MDAsMHg0MywweGFjLAotMHgyMSwweGE4LDB4MDAsMHgwMCwweDAzLDB4MDAsMHg4MCwweDEwLDB4ZGYsMHgwMCwweGEyLDB4MzAsMHhlZiwweDAwLDB4YTIsMHgzMCwKLTB4MDEsMHgwMCwweDE1LDB4MjQsMHg3YywweDdlLDB4YzIsMHhhMCwweDdjLDB4N2UsMHhjMywweDkwLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weGIwLDB4MDMsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4YWMsMHgwMCwweDAwLDB4NDMsMHhhYywweDAwLDB4NjAsMHgwMSwweDQwLAotMHgwMSwweDAwLDB4MjEsMHgzNCwweDAwLDB4NjAsMHg4MSwweDQwLDB4MDIsMHg4MCwweDE2LDB4M2MsMHg2OCwweDE1LDB4ZDIsMHgyNiwKLTB4MjEsMHg5OCwweDQwLDB4MDAsMHgwMiwweDgwLDB4MTQsMHgzYywweDE5LDB4MDQsMHgwMCwweDA4LDB4MjEsMHhiOCwweDQwLDB4MDIsCi0weDI0LDB4MTAsMHhhMiwweDAwLDB4MDQsMHgwMCwweDQyLDB4MzQsMHgyYSwweGIwLDB4MDcsMHgzYywweDA4LDB4MDAsMHgwMiwweGFlLAotMHgxNSwweDAwLDB4ZTIsMHgzNCwweDA0LDB4MDAsMHg0MywweDI0LDB4MGIsMHgxMCwweDc1LDB4MDAsMHgwMSwweDAwLDB4MDQsMHgyNCwKLTB4MDIsMHgwMCwweDAzLDB4MjQsMHgwMCwweDAwLDB4NDQsMHhhMCwweDAwLDB4MDAsMHg0MywweGEwLDB4Y2EsMHg3ZCwweDg0LDB4OTYsCi0weDI1LDB4YjAsMHgwNiwweDNjLDB4NjYsMHgwMywweGM1LDB4MzQsMHgwMSwweDAwLDB4ODQsMHgyNCwweGNhLDB4N2QsMHg4NCwweGE2LAotMHhjYSwweDdkLDB4ODIsMHg5NiwweGZmLDB4MDAsMHgwMywweDI0LDB4MDAsMHgwMCwweGEyLDB4YTQsMHg1YSwweDAwLDB4MjMsMHgxMiwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDY0LDB4NDIsMHg4ZSwweDljLDB4NjQsMHg1MCwweDhlLDB4MDQsMHgwMCwweDA0LDB4MjQsCi0weDAwLDB4MDAsMHg2MiwweGFlLDB4MzQsMHg2NCwweDQyLDB4YWUsMHgwMCwweDAwLDB4NzAsMHhhZSwweDRkLDB4MDEsMHgwMCwweDBjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDljLDB4NjQsMHg0NCwweDhlLDB4YTAsMHg2NCwweDQzLDB4OGUsMHgyMCwweDAwLDB4ODQsMHgyNCwKLTB4M2YsMHgwMCwweDYyLDB4MjQsMHgyYiwweDEwLDB4NDQsMHgwMCwweDBhLDB4MTgsMHg4MiwweDAwLDB4OWMsMHg2NCwweDQzLDB4YWUsCi0weDljLDB4NjQsMHhlMiwweDhlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjIsMHhhZSwweDAyLDB4ODAsMHgwMiwweDNjLAotMHhmZiwweGZmLDB4MTAsMHgzMiwweDI1LDB4ODAsMHgwMiwweDAyLDB4MDAsMHgwMCwweDcwLDB4YWUsMHgwYywweDAwLDB4MDIsMHg5MiwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjIsMHhhZSwweDBjLDB4MDAsMHgxMSwweDkyLDB4ZmYsMHgwMCwweDAyLDB4MjQsCi0weDBkLDB4MDAsMHgyMiwweDEyLDB4MDAsMHgxMiwweDExLDB4MDAsMHgyMCwweDEwLDB4MDMsMHgzYywweDIxLDB4MTAsMHg0MywweDAwLAotMHg1OSwweDAwLDB4YTAsMHgxMiwweDMwLDB4NjQsMHhlMiwweGFlLDB4ZjQsMHg2MywweGYxLDB4YTIsMHg2OCwweDE1LDB4YzIsMHgyNiwKLTB4MzAsMHg2NCwweDQ2LDB4OGMsMHg5YywweDY0LDB4NDUsMHg4YywweDA0LDB4MDAsMHgwNCwweDI0LDB4MjAsMHgwMCwweDA3LDB4MjQsCi0weDEwLDB4MDEsMHgwMCwweDBjLDB4MTAsMHgwMCwweGEwLDB4YWYsMHgwNCwweDAwLDB4MDQsMHg4ZSwweDE0LDB4MDAsMHgwMywweDhlLAotMHgwOCwweDAwLDB4MDUsMHg4ZSwweGZmLDB4ZTAsMHgwMiwweDNjLDB4MWYsMHgwMCwweDg0LDB4MzAsMHg0MiwweDFhLDB4MDMsMHgwMCwKLTB4ZmYsMHhmZiwweDQyLDB4MzQsMHgwMCwweDI2LDB4MDQsMHgwMCwweDI0LDB4MjgsMHhhMiwweDAwLDB4M2YsMHgwMCwweDYzLDB4MzAsCi0weDI1LDB4MjgsMHhhNCwweDAwLDB4MGMsMHgwMCwweDYzLDB4MjgsMHgwNiwweDAwLDB4NjAsMHgxNCwweDIxLDB4MjAsMHhhMCwweDAwLAotMHgwMCwweDAwLDB4MDIsMHg5NiwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZmQsMHgwZiwweDQyLDB4MjgsMHgwOCwweDAwLDB4NDAsMHgxNCwKLTB4ODIsMHgxMSwweDA1LDB4MDAsMHhmZiwweGRmLDB4MDIsMHgzYywweGZmLDB4ZmYsMHg0MiwweDM0LDB4MjQsMHgyOCwweDgyLDB4MDAsCi0weDAwLDB4NDAsMHgwMywweDNjLDB4MjUsMHgyMCwweGEzLDB4MDAsMHgyMSwweDI4LDB4ODAsMHgwMCwweDgyLDB4MTEsMHgwNSwweDAwLAotMHgwMSwweDAwLDB4NDIsMHgzMCwweGE2LDB4ZmYsMHg0MCwweDEwLDB4YzAsMHhmZiwweDAyLDB4MjQsMHgyYSwweGIwLDB4MDcsMHgzYywKLTB4MTUsMHgwMCwweGUyLDB4MzQsMHgwNCwweDAwLDB4NDMsMHgyNCwweDA4LDB4MDAsMHgwNCwweGFlLDB4MGIsMHgxMCwweDc1LDB4MDAsCi0weDAxLDB4MDAsMHgwNCwweDI0LDB4MDIsMHgwMCwweDAzLDB4MjQsMHgwMCwweDAwLDB4NDQsMHhhMCwweDAwLDB4MDAsMHg0MywweGEwLAotMHhjYSwweDdkLDB4ODQsMHg5NiwweDI1LDB4YjAsMHgwNiwweDNjLDB4NjYsMHgwMywweGM1LDB4MzQsMHgwMSwweDAwLDB4ODQsMHgyNCwKLTB4Y2EsMHg3ZCwweDg0LDB4YTYsMHhjYSwweDdkLDB4ODIsMHg5NiwweGZmLDB4MDAsMHgwMywweDI0LDB4MDAsMHgwMCwweGEyLDB4YTQsCi0weGE4LDB4ZmYsMHgyMywweDE2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMSwweDAwLDB4YTAsMHgxMiwweDY4LDB4MTUsMHhjMiwweDI2LAotMHhmNCwweDYzLDB4NDMsMHg5MCwweDQzLDB4MDAsMHhlNCwweDM0LDB4YjAsMHgwMywweGM1LDB4MzQsMHgwMCwweDAwLDB4ODMsMHhhMCwKLTB4MDAsMHgwMCwweGEzLDB4YWMsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDAsMHg2MCwweDgxLDB4NDAsCi0weDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLAotMHg2OCwweDE1LDB4YzUsMHgyNiwweGZjLDB4NGEsMHhhMiwweDhjLDB4MzgsMHgwMCwweGJmLDB4OGYsMHgzNCwweDAwLDB4YjcsMHg4ZiwKLTB4MzAsMHgwMCwweGI2LDB4OGYsMHgyYywweDAwLDB4YjUsMHg4ZiwweDI4LDB4MDAsMHhiNCwweDhmLDB4MjQsMHgwMCwweGIzLDB4OGYsCi0weDIwLDB4MDAsMHhiMiwweDhmLDB4MWMsMHgwMCwweGIxLDB4OGYsMHgxOCwweDAwLDB4YjAsMHg4ZiwweDA2LDB4MDAsMHgwMywweDNjLAotMHgyNSwweDEwLDB4NDMsMHgwMCwweDQxLDB4YjAsMHgwNCwweDNjLDB4NDAsMHgwMCwweGJkLDB4MjcsMHgwMCwweDAwLDB4ODIsMHhhYywKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHhmYywweDRhLDB4YTIsMHhhYywweDNiLDB4MDQsMHgwMCwweDA4LDB4ZjAsMHg2MywweGYxLDB4YTIsCi0weGYwLDB4NjMsMHg0MywweDkwLDB4NDIsMHgwMCwweGU0LDB4MzQsMHhiMCwweDAzLDB4YzUsMHgzNCwweDAwLDB4MDAsMHg4MywweGEwLAotMHgwMCwweDAwLDB4YTMsMHhhYywweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMCwweDYwLDB4ODEsMHg0MCwKLTB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAxLDB4MDAsMHgyMSwweDM4LDB4MDAsMHg2MCwweDgxLDB4NDAsCi0weDY4LDB4MTUsMHhjNSwweDI2LDB4ZmMsMHg0YSwweGEyLDB4OGMsMHgzOCwweDAwLDB4YmYsMHg4ZiwweDM0LDB4MDAsMHhiNywweDhmLAotMHgzMCwweDAwLDB4YjYsMHg4ZiwweDJjLDB4MDAsMHhiNSwweDhmLDB4MjgsMHgwMCwweGI0LDB4OGYsMHgyNCwweDAwLDB4YjMsMHg4ZiwKLTB4MjAsMHgwMCwweGIyLDB4OGYsMHgxYywweDAwLDB4YjEsMHg4ZiwweDE4LDB4MDAsMHhiMCwweDhmLDB4MDYsMHgwMCwweDAzLDB4M2MsCi0weDI1LDB4MTAsMHg0MywweDAwLDB4NDEsMHhiMCwweDA0LDB4M2MsMHg0MCwweDAwLDB4YmQsMHgyNywweDAwLDB4MDAsMHg4MiwweGFjLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweGZjLDB4NGEsMHhhMiwweGFjLDB4YzAsMHhmZiwweGJkLDB4MjcsMHgyYywweDAwLDB4YjUsMHhhZiwKLTB4MzgsMHgwMCwweGJmLDB4YWYsMHgzNCwweDAwLDB4YjcsMHhhZiwweDMwLDB4MDAsMHhiNiwweGFmLDB4MjgsMHgwMCwweGI0LDB4YWYsCi0weDI0LDB4MDAsMHhiMywweGFmLDB4MjAsMHgwMCwweGIyLDB4YWYsMHgxYywweDAwLDB4YjEsMHhhZiwweDE4LDB4MDAsMHhiMCwweGFmLAotMHgwMiwweDgwLDB4MDYsMHgzYywweDdjLDB4N2UsMHhjNSwweDkwLDB4MDAsMHg4MCwweDAzLDB4M2MsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4MTgsMHgwMywweDQyLDB4MzQsMHhjOCwweDEyLDB4NjMsMHgyNCwweDAxLDB4MDAsMHhhNCwweDMwLDB4MDAsMHgwMCwweDQzLDB4YWMsCi0weDIxLDB4YTgsMHgwMCwweDAwLDB4MDMsMHgwMCwweDgwLDB4MTAsMHhmNywweDAwLDB4YTIsMHgzMCwweGZlLDB4MDAsMHhhMiwweDMwLAotMHgwMSwweDAwLDB4MTUsMHgyNCwweDdjLDB4N2UsMHhjMiwweGEwLDB4N2MsMHg3ZSwweGMzLDB4OTAsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4YjAsMHgwMywweDQyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHhhYywweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsCi0weDAwLDB4NjAsMHg4MSwweDQwLDB4MDIsMHg4MCwweDE2LDB4M2MsMHg2OCwweDE1LDB4ZDIsMHgyNiwweDIxLDB4OTgsMHg0MCwweDAwLAotMHgwMiwweDgwLDB4MTQsMHgzYywweGY4LDB4MDQsMHgwMCwweDA4LDB4MjEsMHhiOCwweDQwLDB4MDIsMHgwMCwweDAwLDB4MDIsMHg5NiwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZCwweDBmLDB4NDIsMHgyOCwweDU0LDB4MDAsMHg0MCwweDEwLDB4ZmYsMHhkZiwweDAyLDB4M2MsCi0weDAwLDB4MjAsMHgwMiwweDNjLDB4MjUsMHgyOCwweGEyLDB4MDAsMHg4MiwweDExLDB4MDUsMHgwMCwweDAxLDB4MDAsMHg0MiwweDMwLAotMHg1NywweDAwLDB4NDAsMHgxNCwweDJhLDB4YjAsMHgwNywweDNjLDB4YzAsMHhmZiwweDAyLDB4MjQsMHgyNCwweDEwLDB4YTIsMHgwMCwKLTB4MDQsMHgwMCwweDQyLDB4MzQsMHgyYSwweGIwLDB4MDcsMHgzYywweDA4LDB4MDAsMHgwMiwweGFlLDB4MWQsMHgwMCwweGUyLDB4MzQsCi0weDA0LDB4MDAsMHg0MywweDI0LDB4MGIsMHgxMCwweDc1LDB4MDAsMHgwMSwweDAwLDB4MDQsMHgyNCwweDAyLDB4MDAsMHgwMywweDI0LAotMHgwMCwweDAwLDB4NDQsMHhhMCwweDAwLDB4MDAsMHg0MywweGEwLDB4Y2EsMHg3ZCwweDg0LDB4OTYsMHgyNSwweGIwLDB4MDYsMHgzYywKLTB4NjYsMHgwMywweGM1LDB4MzQsMHgwMSwweDAwLDB4ODQsMHgyNCwweGNhLDB4N2QsMHg4NCwweGE2LDB4Y2EsMHg3ZCwweDgyLDB4OTYsCi0weGZmLDB4MDAsMHgwMywweDI0LDB4MDAsMHgwMCwweGEyLDB4YTQsMHg1MywweDAwLDB4MjMsMHgxMiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgzYywweDY0LDB4NDIsMHg4ZSwweGE4LDB4NjQsMHg1MCwweDhlLDB4MDUsMHgwMCwweDA0LDB4MjQsMHgwMCwweDAwLDB4NjIsMHhhZSwKLTB4NDAsMHg2NCwweDQyLDB4YWUsMHgwMCwweDAwLDB4NzAsMHhhZSwweDRkLDB4MDEsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGE4LDB4NjQsMHg0NCwweDhlLDB4YWMsMHg2NCwweDQzLDB4OGUsMHgyMCwweDAwLDB4ODQsMHgyNCwweDNmLDB4MDAsMHg2MiwweDI0LAotMHgyYiwweDEwLDB4NDQsMHgwMCwweDBhLDB4MTgsMHg4MiwweDAwLDB4YTgsMHg2NCwweDQzLDB4YWUsMHhhOCwweDY0LDB4ZTIsMHg4ZSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjIsMHhhZSwweDAyLDB4ODAsMHgwMiwweDNjLDB4ZmYsMHhmZiwweDEwLDB4MzIsCi0weDI1LDB4ODAsMHgwMiwweDAyLDB4MDAsMHgwMCwweDcwLDB4YWUsMHgwYywweDAwLDB4MDIsMHg5MiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4NjIsMHhhZSwweDBjLDB4MDAsMHgxMSwweDkyLDB4ZmYsMHgwMCwweDAyLDB4MjQsMHgwZCwweDAwLDB4MjIsMHgxMiwKLTB4MDAsMHgxMiwweDExLDB4MDAsMHgyMCwweDEwLDB4MDMsMHgzYywweDIxLDB4MTAsMHg0MywweDAwLDB4NTIsMHgwMCwweGEwLDB4MTIsCi0weDNjLDB4NjQsMHhlMiwweGFlLDB4MDQsMHg2NCwweGYxLDB4YTIsMHg2OCwweDE1LDB4YzIsMHgyNiwweDNjLDB4NjQsMHg0NiwweDhjLAotMHhhOCwweDY0LDB4NDUsMHg4YywweDA1LDB4MDAsMHgwNCwweDI0LDB4MjAsMHgwMCwweDA3LDB4MjQsMHgxMCwweDAxLDB4MDAsMHgwYywKLTB4MTAsMHgwMCwweGEwLDB4YWYsMHgxNCwweDAwLDB4MDMsMHg4ZSwweDA0LDB4MDAsMHgwNCwweDhlLDB4MDgsMHgwMCwweDA1LDB4OGUsCi0weDQyLDB4MWEsMHgwMywweDAwLDB4ZmYsMHhlMCwweDAyLDB4M2MsMHgxZiwweDAwLDB4ODQsMHgzMCwweDNmLDB4MDAsMHg2MywweDMwLAotMHhmZiwweGZmLDB4NDIsMHgzNCwweDI0LDB4MjgsMHhhMiwweDAwLDB4MDAsMHgyNiwweDA0LDB4MDAsMHgwYywweDAwLDB4NjMsMHgyOCwKLTB4YWEsMHhmZiwweDYwLDB4MTAsMHgyNSwweDI4LDB4YTQsMHgwMCwweGZmLDB4ZGYsMHgwMiwweDNjLDB4ZmYsMHhmZiwweDQyLDB4MzQsCi0weDI0LDB4MTAsMHhhMiwweDAwLDB4MDAsMHg0MCwweDAzLDB4M2MsMHgyNSwweDI4LDB4NDMsMHgwMCwweDgyLDB4MTEsMHgwNSwweDAwLAotMHgwMSwweDAwLDB4NDIsMHgzMCwweGFkLDB4ZmYsMHg0MCwweDEwLDB4YzAsMHhmZiwweDAyLDB4MjQsMHgyYSwweGIwLDB4MDcsMHgzYywKLTB4MWQsMHgwMCwweGUyLDB4MzQsMHgwNCwweDAwLDB4NDMsMHgyNCwweDBiLDB4MTAsMHg3NSwweDAwLDB4MDEsMHgwMCwweDA0LDB4MjQsCi0weDAyLDB4MDAsMHgwMywweDI0LDB4MDgsMHgwMCwweDA1LDB4YWUsMHgwMCwweDAwLDB4NDQsMHhhMCwweDAwLDB4MDAsMHg0MywweGEwLAotMHhjYSwweDdkLDB4ODQsMHg5NiwweDI1LDB4YjAsMHgwNiwweDNjLDB4NjYsMHgwMywweGM1LDB4MzQsMHgwMSwweDAwLDB4ODQsMHgyNCwKLTB4Y2EsMHg3ZCwweDg0LDB4YTYsMHhjYSwweDdkLDB4ODIsMHg5NiwweGZmLDB4MDAsMHgwMywweDI0LDB4MDAsMHgwMCwweGEyLDB4YTQsCi0weGFmLDB4ZmYsMHgyMywweDE2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMSwweDAwLDB4YTAsMHgxMiwweDY4LDB4MTUsMHhjMiwweDI2LAotMHgwNCwweDY0LDB4NDMsMHg5MCwweDQ1LDB4MDAsMHhlNCwweDM0LDB4YjAsMHgwMywweGM1LDB4MzQsMHgwMCwweDAwLDB4ODMsMHhhMCwKLTB4MDAsMHgwMCwweGEzLDB4YWMsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDAsMHg2MCwweDgxLDB4NDAsCi0weDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLAotMHg2OCwweDE1LDB4YzUsMHgyNiwweGZjLDB4NGEsMHhhMiwweDhjLDB4MzgsMHgwMCwweGJmLDB4OGYsMHgzNCwweDAwLDB4YjcsMHg4ZiwKLTB4MzAsMHgwMCwweGI2LDB4OGYsMHgyYywweDAwLDB4YjUsMHg4ZiwweDI4LDB4MDAsMHhiNCwweDhmLDB4MjQsMHgwMCwweGIzLDB4OGYsCi0weDIwLDB4MDAsMHhiMiwweDhmLDB4MWMsMHgwMCwweGIxLDB4OGYsMHgxOCwweDAwLDB4YjAsMHg4ZiwweDE4LDB4MDAsMHgwMywweDNjLAotMHgyNSwweDEwLDB4NDMsMHgwMCwweDQxLDB4YjAsMHgwNCwweDNjLDB4NDAsMHgwMCwweGJkLDB4MjcsMHgwMCwweDAwLDB4ODIsMHhhYywKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHhmYywweDRhLDB4YTIsMHhhYywweDFhLDB4MDUsMHgwMCwweDA4LDB4ZjgsMHg2MywweGYxLDB4YTIsCi0weGY4LDB4NjMsMHg0MywweDkwLDB4NDQsMHgwMCwweGU0LDB4MzQsMHhiMCwweDAzLDB4YzUsMHgzNCwweDAwLDB4MDAsMHg4MywweGEwLAotMHgwMCwweDAwLDB4YTMsMHhhYywweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMCwweDYwLDB4ODEsMHg0MCwKLTB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAxLDB4MDAsMHgyMSwweDM4LDB4MDAsMHg2MCwweDgxLDB4NDAsCi0weDY4LDB4MTUsMHhjNSwweDI2LDB4ZmMsMHg0YSwweGEyLDB4OGMsMHgzOCwweDAwLDB4YmYsMHg4ZiwweDM0LDB4MDAsMHhiNywweDhmLAotMHgzMCwweDAwLDB4YjYsMHg4ZiwweDJjLDB4MDAsMHhiNSwweDhmLDB4MjgsMHgwMCwweGI0LDB4OGYsMHgyNCwweDAwLDB4YjMsMHg4ZiwKLTB4MjAsMHgwMCwweGIyLDB4OGYsMHgxYywweDAwLDB4YjEsMHg4ZiwweDE4LDB4MDAsMHhiMCwweDhmLDB4MTgsMHgwMCwweDAzLDB4M2MsCi0weDI1LDB4MTAsMHg0MywweDAwLDB4NDEsMHhiMCwweDA0LDB4M2MsMHg0MCwweDAwLDB4YmQsMHgyNywweDAwLDB4MDAsMHg4MiwweGFjLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweGZjLDB4NGEsMHhhMiwweGFjLDB4YzAsMHhmZiwweGJkLDB4MjcsMHgyYywweDAwLDB4YjUsMHhhZiwKLTB4MzgsMHgwMCwweGJmLDB4YWYsMHgzNCwweDAwLDB4YjcsMHhhZiwweDMwLDB4MDAsMHhiNiwweGFmLDB4MjgsMHgwMCwweGI0LDB4YWYsCi0weDI0LDB4MDAsMHhiMywweGFmLDB4MjAsMHgwMCwweGIyLDB4YWYsMHgxYywweDAwLDB4YjEsMHhhZiwweDE4LDB4MDAsMHhiMCwweGFmLAotMHgwMiwweDgwLDB4MDYsMHgzYywweDdjLDB4N2UsMHhjNSwweDkwLDB4MDAsMHg4MCwweDAzLDB4M2MsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4MTgsMHgwMywweDQyLDB4MzQsMHgyOCwweDE2LDB4NjMsMHgyNCwweDAyLDB4MDAsMHhhNCwweDMwLDB4MDAsMHgwMCwweDQzLDB4YWMsCi0weDIxLDB4YTgsMHgwMCwweDAwLDB4MDMsMHgwMCwweDgwLDB4MTAsMHhmYiwweDAwLDB4YTIsMHgzMCwweGZkLDB4MDAsMHhhMiwweDMwLAotMHgwMSwweDAwLDB4MTUsMHgyNCwweDdjLDB4N2UsMHhjMiwweGEwLDB4N2MsMHg3ZSwweGMzLDB4OTAsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4YjAsMHgwMywweDQyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHhhYywweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsCi0weDAwLDB4NjAsMHg4MSwweDQwLDB4MDIsMHg4MCwweDE2LDB4M2MsMHg2OCwweDE1LDB4ZDIsMHgyNiwweDIxLDB4OTgsMHg0MCwweDAwLAotMHgwMiwweDgwLDB4MTQsMHgzYywweGQwLDB4MDUsMHgwMCwweDA4LDB4MjEsMHhiOCwweDQwLDB4MDIsMHgwMCwweDAwLDB4MDIsMHg5NiwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZCwweDBmLDB4NDIsMHgyOCwweDU0LDB4MDAsMHg0MCwweDEwLDB4ZmYsMHhkZiwweDAyLDB4M2MsCi0weDAwLDB4MjAsMHgwMiwweDNjLDB4MjUsMHgyOCwweGEyLDB4MDAsMHg4MiwweDExLDB4MDUsMHgwMCwweDAxLDB4MDAsMHg0MiwweDMwLAotMHg1NywweDAwLDB4NDAsMHgxNCwweDJhLDB4YjAsMHgwNywweDNjLDB4YzAsMHhmZiwweDAyLDB4MjQsMHgyNCwweDEwLDB4YTIsMHgwMCwKLTB4MDQsMHgwMCwweDQyLDB4MzQsMHgyYSwweGIwLDB4MDcsMHgzYywweDA4LDB4MDAsMHgwMiwweGFlLDB4MjUsMHgwMCwweGUyLDB4MzQsCi0weDA0LDB4MDAsMHg0MywweDI0LDB4MGIsMHgxMCwweDc1LDB4MDAsMHgwMSwweDAwLDB4MDQsMHgyNCwweDAyLDB4MDAsMHgwMywweDI0LAotMHgwMCwweDAwLDB4NDQsMHhhMCwweDAwLDB4MDAsMHg0MywweGEwLDB4Y2EsMHg3ZCwweDg0LDB4OTYsMHgyNSwweGIwLDB4MDYsMHgzYywKLTB4NjYsMHgwMywweGM1LDB4MzQsMHgwMSwweDAwLDB4ODQsMHgyNCwweGNhLDB4N2QsMHg4NCwweGE2LDB4Y2EsMHg3ZCwweDgyLDB4OTYsCi0weGZmLDB4MDAsMHgwMywweDI0LDB4MDAsMHgwMCwweGEyLDB4YTQsMHg1MywweDAwLDB4MjMsMHgxMiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg0OCwweDY0LDB4NDIsMHg4ZSwweGI0LDB4NjQsMHg1MCwweDhlLDB4MDYsMHgwMCwweDA0LDB4MjQsMHgwMCwweDAwLDB4NjIsMHhhZSwKLTB4NGMsMHg2NCwweDQyLDB4YWUsMHgwMCwweDAwLDB4NzAsMHhhZSwweDRkLDB4MDEsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGI0LDB4NjQsMHg0NCwweDhlLDB4YjgsMHg2NCwweDQzLDB4OGUsMHgyMCwweDAwLDB4ODQsMHgyNCwweDNmLDB4MDAsMHg2MiwweDI0LAotMHgyYiwweDEwLDB4NDQsMHgwMCwweDBhLDB4MTgsMHg4MiwweDAwLDB4YjQsMHg2NCwweDQzLDB4YWUsMHhiNCwweDY0LDB4ZTIsMHg4ZSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjIsMHhhZSwweDAyLDB4ODAsMHgwMiwweDNjLDB4ZmYsMHhmZiwweDEwLDB4MzIsCi0weDI1LDB4ODAsMHgwMiwweDAyLDB4MDAsMHgwMCwweDcwLDB4YWUsMHgwYywweDAwLDB4MDIsMHg5MiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4NjIsMHhhZSwweDBjLDB4MDAsMHgxMSwweDkyLDB4ZmYsMHgwMCwweDAyLDB4MjQsMHgwZCwweDAwLDB4MjIsMHgxMiwKLTB4MDAsMHgxMiwweDExLDB4MDAsMHgyMCwweDEwLDB4MDMsMHgzYywweDIxLDB4MTAsMHg0MywweDAwLDB4NTIsMHgwMCwweGEwLDB4MTIsCi0weDQ4LDB4NjQsMHhlMiwweGFlLDB4MDAsMHg2NCwweGYxLDB4YTIsMHg2OCwweDE1LDB4YzIsMHgyNiwweDQ4LDB4NjQsMHg0NiwweDhjLAotMHhiNCwweDY0LDB4NDUsMHg4YywweDA2LDB4MDAsMHgwNCwweDI0LDB4MjAsMHgwMCwweDA3LDB4MjQsMHgxMCwweDAxLDB4MDAsMHgwYywKLTB4MTAsMHgwMCwweGEwLDB4YWYsMHgxNCwweDAwLDB4MDMsMHg4ZSwweDA0LDB4MDAsMHgwNCwweDhlLDB4MDgsMHgwMCwweDA1LDB4OGUsCi0weDQyLDB4MWEsMHgwMywweDAwLDB4ZmYsMHhlMCwweDAyLDB4M2MsMHgxZiwweDAwLDB4ODQsMHgzMCwweDNmLDB4MDAsMHg2MywweDMwLAotMHhmZiwweGZmLDB4NDIsMHgzNCwweDI0LDB4MjgsMHhhMiwweDAwLDB4MDAsMHgyNiwweDA0LDB4MDAsMHgwYywweDAwLDB4NjMsMHgyOCwKLTB4YWEsMHhmZiwweDYwLDB4MTAsMHgyNSwweDI4LDB4YTQsMHgwMCwweGZmLDB4ZGYsMHgwMiwweDNjLDB4ZmYsMHhmZiwweDQyLDB4MzQsCi0weDI0LDB4MTAsMHhhMiwweDAwLDB4MDAsMHg0MCwweDAzLDB4M2MsMHgyNSwweDI4LDB4NDMsMHgwMCwweDgyLDB4MTEsMHgwNSwweDAwLAotMHgwMSwweDAwLDB4NDIsMHgzMCwweGFkLDB4ZmYsMHg0MCwweDEwLDB4YzAsMHhmZiwweDAyLDB4MjQsMHgyYSwweGIwLDB4MDcsMHgzYywKLTB4MjUsMHgwMCwweGUyLDB4MzQsMHgwNCwweDAwLDB4NDMsMHgyNCwweDBiLDB4MTAsMHg3NSwweDAwLDB4MDEsMHgwMCwweDA0LDB4MjQsCi0weDAyLDB4MDAsMHgwMywweDI0LDB4MDgsMHgwMCwweDA1LDB4YWUsMHgwMCwweDAwLDB4NDQsMHhhMCwweDAwLDB4MDAsMHg0MywweGEwLAotMHhjYSwweDdkLDB4ODQsMHg5NiwweDI1LDB4YjAsMHgwNiwweDNjLDB4NjYsMHgwMywweGM1LDB4MzQsMHgwMSwweDAwLDB4ODQsMHgyNCwKLTB4Y2EsMHg3ZCwweDg0LDB4YTYsMHhjYSwweDdkLDB4ODIsMHg5NiwweGZmLDB4MDAsMHgwMywweDI0LDB4MDAsMHgwMCwweGEyLDB4YTQsCi0weGFmLDB4ZmYsMHgyMywweDE2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMSwweDAwLDB4YTAsMHgxMiwweDY4LDB4MTUsMHhjMiwweDI2LAotMHgwMCwweDY0LDB4NDMsMHg5MCwweDQ3LDB4MDAsMHhlNCwweDM0LDB4YjAsMHgwMywweGM1LDB4MzQsMHgwMCwweDAwLDB4ODMsMHhhMCwKLTB4MDAsMHgwMCwweGEzLDB4YWMsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDAsMHg2MCwweDgxLDB4NDAsCi0weDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLAotMHg2OCwweDE1LDB4YzUsMHgyNiwweGZjLDB4NGEsMHhhMiwweDhjLDB4MzgsMHgwMCwweGJmLDB4OGYsMHgzNCwweDAwLDB4YjcsMHg4ZiwKLTB4MzAsMHgwMCwweGI2LDB4OGYsMHgyYywweDAwLDB4YjUsMHg4ZiwweDI4LDB4MDAsMHhiNCwweDhmLDB4MjQsMHgwMCwweGIzLDB4OGYsCi0weDIwLDB4MDAsMHhiMiwweDhmLDB4MWMsMHgwMCwweGIxLDB4OGYsMHgxOCwweDAwLDB4YjAsMHg4ZiwweDYwLDB4MDAsMHgwMywweDNjLAotMHgyNSwweDEwLDB4NDMsMHgwMCwweDQxLDB4YjAsMHgwNCwweDNjLDB4NDAsMHgwMCwweGJkLDB4MjcsMHgwMCwweDAwLDB4ODIsMHhhYywKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHhmYywweDRhLDB4YTIsMHhhYywweGYyLDB4MDUsMHgwMCwweDA4LDB4ZmMsMHg2MywweGYxLDB4YTIsCi0weGZjLDB4NjMsMHg0MywweDkwLDB4NDYsMHgwMCwweGU0LDB4MzQsMHhiMCwweDAzLDB4YzUsMHgzNCwweDAwLDB4MDAsMHg4MywweGEwLAotMHgwMCwweDAwLDB4YTMsMHhhYywweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMCwweDYwLDB4ODEsMHg0MCwKLTB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAxLDB4MDAsMHgyMSwweDM4LDB4MDAsMHg2MCwweDgxLDB4NDAsCi0weDY4LDB4MTUsMHhjNSwweDI2LDB4ZmMsMHg0YSwweGEyLDB4OGMsMHgzOCwweDAwLDB4YmYsMHg4ZiwweDM0LDB4MDAsMHhiNywweDhmLAotMHgzMCwweDAwLDB4YjYsMHg4ZiwweDJjLDB4MDAsMHhiNSwweDhmLDB4MjgsMHgwMCwweGI0LDB4OGYsMHgyNCwweDAwLDB4YjMsMHg4ZiwKLTB4MjAsMHgwMCwweGIyLDB4OGYsMHgxYywweDAwLDB4YjEsMHg4ZiwweDE4LDB4MDAsMHhiMCwweDhmLDB4NjAsMHgwMCwweDAzLDB4M2MsCi0weDI1LDB4MTAsMHg0MywweDAwLDB4NDEsMHhiMCwweDA0LDB4M2MsMHg0MCwweDAwLDB4YmQsMHgyNywweDAwLDB4MDAsMHg4MiwweGFjLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweGZjLDB4NGEsMHhhMiwweGFjLDB4MDAsMHg4MCwweDAzLDB4M2MsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4ODgsMHgxOSwweDYzLDB4MjQsMHgxOCwweDAzLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0MywweGFjLDB4MDAsMHg2MCwweDAxLDB4NDAsCi0weDAxLDB4MDAsMHgyMSwweDM0LDB4MDAsMHg2MCwweDgxLDB4NDAsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LAotMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLDB4MDIsMHg4MCwweDA1LDB4M2MsMHg2OCwweDE1LDB4YTUsMHgyNCwKLTB4MDQsMHg0YiwweGEyLDB4OGMsMHhmYywweDRhLDB4YTQsMHg4YywweDAwLDB4MDgsMHgwMywweDNjLDB4MjQsMHgxMCwweDQzLDB4MDAsCi0weDI1LDB4MjAsMHg4MiwweDAwLDB4NDEsMHhiMCwweDAzLDB4M2MsMHgwMCwweDAwLDB4NjQsMHhhYywweDA4LDB4MDAsMHhlMCwweDAzLAotMHhmYywweDRhLDB4YTQsMHhhYywweDI1LDB4YjAsMHgwNCwweDNjLDB4MDAsMHg4MCwweDAyLDB4M2MsMHhjMCwweGZmLDB4YmQsMHgyNywKLTB4MTgsMHgwMywweDgzLDB4MzQsMHhlNCwweDE5LDB4NDIsMHgyNCwweDNjLDB4MDAsMHhiZiwweGFmLDB4MzgsMHgwMCwweGJlLDB4YWYsCi0weDM0LDB4MDAsMHhiNywweGFmLDB4MzAsMHgwMCwweGI2LDB4YWYsMHgyYywweDAwLDB4YjUsMHhhZiwweDI4LDB4MDAsMHhiNCwweGFmLAotMHgyNCwweDAwLDB4YjMsMHhhZiwweDIwLDB4MDAsMHhiMiwweGFmLDB4MWMsMHgwMCwweGIxLDB4YWYsMHgxOCwweDAwLDB4YjAsMHhhZiwKLTB4MDAsMHgwMCwweDYyLDB4YWMsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDAsMHg2MCwweDgxLDB4NDAsCi0weDAyLDB4ODAsMHgwMiwweDNjLDB4MmEsMHhiMCwweDAzLDB4M2MsMHg2OCwweDE1LDB4NTEsMHgyNCwweGIwLDB4MDMsMHg5MywweDM0LAotMHgyYywweDAwLDB4NzcsMHgzNCwweDAyLDB4ODAsMHgxNSwweDNjLDB4MDIsMHg4MCwweDE2LDB4M2MsMHg5YywweDA2LDB4MDAsMHgwOCwKLTB4MDIsMHg4MCwweDFlLDB4M2MsMHgxNCwweDY0LDB4MjYsMHg5MiwweGU0LDB4NjQsMHgyNSwweDhlLDB4MDAsMHgzMiwweDA2LDB4MDAsCi0weDIxLDB4MzAsMHhjMiwweDAwLDB4NzgsMHg2NCwweDI2LDB4YWUsMHgxMCwweDAxLDB4MDAsMHgwYywweDEwLDB4MDAsMHhhMCwweGFmLAotMHhlNCwweDY0LDB4MzAsMHg4ZSwweDBhLDB4MDAsMHgwNCwweDI0LDB4MjEsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NzAsMHhhZSwKLTB4NGQsMHgwMSwweDAwLDB4MGMsMHhmZiwweGZmLDB4MTAsMHgzMiwweDAyLDB4ODAsMHgwMiwweDNjLDB4MjUsMHg4MCwweDAyLDB4MDIsCi0weDBjLDB4MDAsMHgwNSwweDkyLDB4MDIsMHgwMCwweDA0LDB4OTIsMHhmZiwweDAwLDB4MDIsMHgyNCwweGZmLDB4MDAsMHhhMywweDMwLAotMHgwNCwweDAwLDB4NjIsMHgxMCwweDIxLDB4ODAsMHgwNCwweDAyLDB4MDAsMHgwMCwweDYzLDB4YWUsMHgwMSwweDAwLDB4MTIsMHgyNCwKLTB4MTQsMHg2NCwweDI1LDB4YTIsMHg4OCwweDk2LDB4YjAsMHhhZSwweDIxLDB4MjgsMHgwMCwweDAyLDB4MDIsMHgwMCwweGEyLDB4OTAsCi0weDA4LDB4MDAsMHgxMCwweDI2LDB4MjEsMHgyMCwweDAwLDB4MDIsMHhmZiwweDAwLDB4NDIsMHgzMCwweDAwLDB4MDAsMHg2MiwweGFlLAotMHgwMywweDAwLDB4YTMsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4N2YsMHgwMCwweDYzLDB4MzAsMHgwMCwweDAwLDB4NjMsMHhhZSwKLTB4MDAsMHgwMCwweDcyLDB4YWUsMHgwMywweDAwLDB4YTIsMHg5MCwweDg0LDB4OTYsMHhjMywweDkyLDB4MDIsMHgwMCwweGEyLDB4OTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHgwMCwweDQyLDB4MzAsMHgyYywweDAwLDB4NDIsMHgyOCwweDExLDB4MDAsMHg0MCwweDEwLAotMHgwOCwweDAwLDB4MDIsMHgyNCwweDAzLDB4MDAsMHhhMiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg3ZiwweDAwLDB4NDIsMHgzMCwKLTB4ODQsMHg5NiwweGMyLDB4YTIsMHgwMiwweDAwLDB4YTMsMHg5MCwweDAyLDB4ODAsMHgwMiwweDNjLDB4NzQsMHg4NCwweDQyLDB4MjQsCi0weGZmLDB4MDAsMHg2MywweDMwLDB4YzAsMHgxOCwweDAzLDB4MDAsMHgyMSwweDE4LDB4NjIsMHgwMCwweDA0LDB4MDAsMHg2MiwweDhjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDA5LDB4ZjgsMHg0MCwweDAwLDB4ODAsMHg5NiwweGMyLDB4YWYsMHgyMSwweGEwLDB4NDAsMHgwMCwKLTB4MDgsMHgwMCwweDAyLDB4MjQsMHgwYSwweDAwLDB4MDQsMHgyNCwweDA1LDB4MDAsMHg4MiwweDEyLDB4MDAsMHgwMSwweDA3LDB4MjQsCi0weDAxLDB4MDAsMHgwMiwweDI0LDB4MDIsMHgwMCwweDAzLDB4MjQsMHgwMSwweDAwLDB4ZTIsMHhhMiwweDAxLDB4MDAsMHhlMywweGEyLAotMHhiYywweGZmLDB4NDAsMHgxNiwweDIwLDB4MTAsMHgwMiwweDNjLDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwKLTB4MDEsMHgwMCwweDIxLDB4MzgsMHgwMCwweDYwLDB4ODEsMHg0MCwweGZjLDB4NGEsMHgyMiwweDhlLDB4MDAsMHgwNCwweDAzLDB4M2MsCi0weDQxLDB4YjAsMHgwNCwweDNjLDB4MjUsMHgxMCwweDQzLDB4MDAsMHgwMCwweDAwLDB4ODIsMHhhYywweDNjLDB4MDAsMHhiZiwweDhmLAotMHhmYywweDRhLDB4MjIsMHhhZSwweDM4LDB4MDAsMHhiZSwweDhmLDB4MzQsMHgwMCwweGI3LDB4OGYsMHgzMCwweDAwLDB4YjYsMHg4ZiwKLTB4MmMsMHgwMCwweGI1LDB4OGYsMHgyOCwweDAwLDB4YjQsMHg4ZiwweDI0LDB4MDAsMHhiMywweDhmLDB4MjAsMHgwMCwweGIyLDB4OGYsCi0weDFjLDB4MDAsMHhiMSwweDhmLDB4MTgsMHgwMCwweGIwLDB4OGYsMHgwOCwweDAwLDB4ZTAsMHgwMywweDQwLDB4MDAsMHhiZCwweDI3LAotMHhjOCwweGZmLDB4YmQsMHgyNywweGZmLDB4ZmYsMHhhOCwweDMwLDB4MDIsMHg4MCwweDAyLDB4M2MsMHgyNSwweDQwLDB4MDIsMHgwMSwKLTB4MzAsMHgwMCwweGI2LDB4YWYsMHgyMCwweDAwLDB4YjIsMHhhZiwweDM0LDB4MDAsMHhiZiwweGFmLDB4MmMsMHgwMCwweGI1LDB4YWYsCi0weDI4LDB4MDAsMHhiNCwweGFmLDB4MjQsMHgwMCwweGIzLDB4YWYsMHgxYywweDAwLDB4YjEsMHhhZiwweDE4LDB4MDAsMHhiMCwweGFmLAotMHgwMCwweDAwLDB4MDMsMHg4ZCwweGZmLDB4ZmYsMHhkMiwweDMwLDB4MjEsMHhiMCwweGEwLDB4MDAsMHgwMCwweGMwLDB4MDIsMHgyNCwKLTB4MDgsMHgwMCwweDQ1LDB4MjYsMHgwNCwweDAwLDB4MDYsMHg4ZCwweDI0LDB4MTgsMHg2MiwweDAwLDB4ZmYsMHgzZiwweGE1LDB4MzAsCi0weGYwLDB4ZmYsMHgwMiwweDNjLDB4MjUsMHgxOCwweDY1LDB4MDAsMHhmZiwweGZmLDB4NDIsMHgzNCwweDI0LDB4MTgsMHg2MiwweDAwLAotMHgwMCwweDgwLDB4MDUsMHgzYywweDI1LDB4MTgsMHg2NSwweDAwLDB4ZmYsMHgwMSwweGM2LDB4MzQsMHgwMCwweDAwLDB4MDMsMHhhZCwKLTB4MDQsMHgwMCwweDA2LDB4YWQsMHgyMSwweDQ4LDB4ODAsMHgwMCwweGZmLDB4ZmYsMHhlNywweDMwLDB4MTgsMHgwMCwweDEyLDB4YTUsCi0weDFhLDB4MDAsMHgwNywweGExLDB4MTgsMHgwMCwweDAzLDB4OGQsMHhmZiwweDdmLDB4MDIsMHgzYywweGZmLDB4ZmYsMHg0MiwweDM0LAotMHgyNCwweDE4LDB4NjIsMHgwMCwweDAyLDB4ODAsMHgxNSwweDNjLDB4MTgsMHgwMCwweDAzLDB4YWQsMHg2OCwweDE1LDB4YTUsMHgyNiwKLTB4ZDYsMHg2MywweGEzLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg2MiwweDI0LDB4ZDYsMHg2MywweGEyLDB4YTAsCi0weDE4LDB4MDAsMHgwNCwweDhkLDB4ZmYsMHg4MCwweDAyLDB4M2MsMHgyMCwweDAwLDB4NDUsMHgyNiwweGZmLDB4ZmYsMHg0MiwweDM0LAotMHg3ZiwweDAwLDB4NjMsMHgzMCwweGZmLDB4ZmYsMHhiMiwweDMwLDB4MjQsMHgyMCwweDgyLDB4MDAsMHgwMCwweDFlLDB4MDMsMHgwMCwKLTB4MjUsMHhiMCwweDAyLDB4M2MsMHhjMCwweDAwLDB4NDIsMHgzNCwweDI1LDB4MjAsMHg4MywweDAwLDB4MDcsMHgwMCwweDQ1LDB4MzIsCi0weDE4LDB4MDAsMHgwNCwweGFkLDB4MDAsMHgwMCwweDUyLDB4YTQsMHgwMywweDAwLDB4YTAsMHgxMCwweGZmLDB4ZmYsMHg0MiwweDMyLAotMHgwOCwweDAwLDB4NDIsMHgyNiwweGZmLDB4ZmYsMHg0MiwweDMwLDB4NjgsMHgxNSwweGI0LDB4MjYsMHg1NCwweDY1LDB4ODYsMHg4ZSwKLTB4NTgsMHg2NSwweDkwLDB4OGUsMHhmOCwweGZmLDB4NTIsMHgzMCwweDIxLDB4MTAsMHhkMiwweDAwLDB4MmIsMHgxMCwweDAyLDB4MDIsCi0weDMxLDB4MDAsMHg0MCwweDEwLDB4ZmYsMHgwMCwweDMzLDB4MzEsMHgyMywweDgwLDB4MDYsMHgwMiwweDIxLDB4MjgsMHhjMCwweDAyLAotMHhmZiwweGZmLDB4MDcsMHgzMiwweDAxLDB4MDAsMHgxMSwweDI0LDB4MjEsMHgyMCwweDYwLDB4MDIsMHgxMCwweDAxLDB4MDAsMHgwYywKLTB4MTAsMHgwMCwweGIxLDB4YWYsMHgyMywweDE4LDB4NTAsMHgwMiwweGZmLDB4ZmYsMHg3MiwweDMwLDB4MjIsMHgxMCwweDAyLDB4M2MsCi0weDIxLDB4MTAsMHg0MiwweDAyLDB4MjEsMHgyMCwweDYwLDB4MDIsMHg0ZCwweDAxLDB4MDAsMHgwYywweDU0LDB4NjUsMHg4MiwweGFlLAotMHgyMSwweDI4LDB4ZDAsMHgwMiwweDIxLDB4MzgsMHg0MCwweDAyLDB4MjEsMHgyMCwweDYwLDB4MDIsMHgxMCwweDAwLDB4YjEsMHhhZiwKLTB4MjIsMHgxMCwweDA2LDB4M2MsMHgxMCwweDAxLDB4MDAsMHgwYywweDY4LDB4MTUsMHhiMSwweDI2LDB4NTQsMHg2NSwweDIzLDB4OGUsCi0weDI1LDB4YjAsMHgxMCwweDNjLDB4YjAsMHgwMywweDAyLDB4MzYsMHgyMSwweDIwLDB4NjAsMHgwMiwweDAwLDB4MDAsMHg0MywweGFjLAotMHg0ZCwweDAxLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4NTQsMHg2NSwweDI1LDB4OGUsMHhlYywweDAwLDB4MDIsMHgzNiwKLTB4YmQsMHgwMCwweDA0LDB4MzYsMHgwMCwweDAwLDB4NDUsMHhhYywweDAwLDB4MDAsMHg4MywweDkwLDB4YzIsMHgwMCwweDEwLDB4MzYsCi0weDM0LDB4MDAsMHhiZiwweDhmLDB4MTAsMHgwMCwweDYzLDB4MzQsMHgwMCwweDAwLDB4ODMsMHhhMCwweDMwLDB4MDAsMHhiNiwweDhmLAotMHgwMCwweDAwLDB4MDUsMHhhNiwweDJjLDB4MDAsMHhiNSwweDhmLDB4MjgsMHgwMCwweGI0LDB4OGYsMHgyNCwweDAwLDB4YjMsMHg4ZiwKLTB4MjAsMHgwMCwweGIyLDB4OGYsMHgxYywweDAwLDB4YjEsMHg4ZiwweDE4LDB4MDAsMHhiMCwweDhmLDB4MDEsMHgwMCwweDAyLDB4MjQsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MzgsMHgwMCwweGJkLDB4MjcsMHgyMSwweDI4LDB4YzAsMHgwMiwweDIxLDB4MjAsMHg2MCwweDAyLAotMHgyMSwweDM4LDB4NDAsMHgwMiwweDAxLDB4MDAsMHgwMiwweDI0LDB4MTAsMHgwMSwweDAwLDB4MGMsMHgxMCwweDAwLDB4YTIsMHhhZiwKLTB4NTQsMHg2NSwweDgzLDB4OGUsMHg2OCwweDE1LDB4YjEsMHgyNiwweDI1LDB4YjAsMHgxMCwweDNjLDB4MjEsMHgxOCwweDcyLDB4MDAsCi0weDU0LDB4NjUsMHg4MywweGFlLDB4NTQsMHg2NSwweDIzLDB4OGUsMHhiMCwweDAzLDB4MDIsMHgzNiwweDIxLDB4MjAsMHg2MCwweDAyLAotMHgwMCwweDAwLDB4NDMsMHhhYywweDRkLDB4MDEsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg1NCwweDY1LDB4MjUsMHg4ZSwKLTB4ZWMsMHgwMCwweDAyLDB4MzYsMHhiZCwweDAwLDB4MDQsMHgzNiwweDAwLDB4MDAsMHg0NSwweGFjLDB4MDAsMHgwMCwweDgzLDB4OTAsCi0weGMyLDB4MDAsMHgxMCwweDM2LDB4MzQsMHgwMCwweGJmLDB4OGYsMHgxMCwweDAwLDB4NjMsMHgzNCwweDAwLDB4MDAsMHg4MywweGEwLAotMHgzMCwweDAwLDB4YjYsMHg4ZiwweDAwLDB4MDAsMHgwNSwweGE2LDB4MmMsMHgwMCwweGI1LDB4OGYsMHgyOCwweDAwLDB4YjQsMHg4ZiwKLTB4MjQsMHgwMCwweGIzLDB4OGYsMHgyMCwweDAwLDB4YjIsMHg4ZiwweDFjLDB4MDAsMHhiMSwweDhmLDB4MTgsMHgwMCwweGIwLDB4OGYsCi0weDAxLDB4MDAsMHgwMiwweDI0LDB4MDgsMHgwMCwweGUwLDB4MDMsMHgzOCwweDAwLDB4YmQsMHgyNywweGUwLDB4ZmYsMHhiZCwweDI3LAotMHgyNSwweGIwLDB4MDIsMHgzYywweDE0LDB4MDAsMHhiMSwweGFmLDB4MTgsMHgwMCwweGJmLDB4YWYsMHgxMCwweDAwLDB4YjAsMHhhZiwKLTB4YmYsMHgwMCwweDQyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHg5MCwweDIxLDB4MjgsMHgwMCwweDAwLDB4MDgsMHgwMCwweDA2LDB4MjQsCi0weDA0LDB4MDAsMHg2MywweDJjLDB4MTIsMHgwMCwweDYwLDB4MTQsMHgyMSwweDg4LDB4ODAsMHgwMCwweDAwLDB4NjAsMHgwMiwweDQwLAotMHgwMSwweDAwLDB4NDEsMHgzNCwweDAxLDB4MDAsMHgyMSwweDM4LDB4MDAsMHg2MCwweDgxLDB4NDAsMHgwMiwweDgwLDB4MDMsMHgzYywKLTB4MDAsMHg3YiwweDYzLDB4MjQsMHgwNCwweDAwLDB4NjQsMHg4YywweDAwLDB4MDAsMHgyMywweGFlLDB4MDQsMHgwMCwweDcxLDB4YWMsCi0weDAwLDB4MDAsMHg5MSwweGFjLDB4MDQsMHgwMCwweDI0LDB4YWUsMHgwMCwweDYwLDB4ODIsMHg0MCwweDE4LDB4MDAsMHhiZiwweDhmLAotMHgxNCwweDAwLDB4YjEsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMCwweDAwLDB4YmQsMHgyNywKLTB4MDgsMHgwMCwweDgyLDB4OTQsMHgwMiwweDgwLDB4MDQsMHgzYywweDk3LDB4NDUsMHgwMCwweDBjLDB4MjUsMHgyMCwweDQ0LDB4MDAsCi0weDAwLDB4NjAsMHgxMCwweDQwLDB4MDEsMHgwMCwweDAxLDB4MzYsMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLAotMHgwOCwweDAwLDB4MjUsMHg4ZSwweDBjLDB4MDAsMHgyNiwweDk2LDB4MTQsMHgwMCwweDI3LDB4OTYsMHhmMCwweDA2LDB4MDAsMHgwYywKLTB4MDksMHgwMCwweDA0LDB4MjQsMHgwNCwweDAwLDB4MjMsMHg4ZSwweDAwLDB4MDAsMHgyMiwweDhlLDB4MjEsMHgyMCwweDIwLDB4MDIsCi0weDAwLDB4MDAsMHg2MiwweGFjLDB4MDQsMHgwMCwweDQzLDB4YWMsMHgwMCwweDAwLDB4MzEsMHhhZSwweGJkLDB4NGUsMHgwMCwweDBjLAotMHgwNCwweDAwLDB4MzEsMHhhZSwweDAwLDB4NjAsMHg5MCwweDQwLDB4MTgsMHgwMCwweGJmLDB4OGYsMHgxNCwweDAwLDB4YjEsMHg4ZiwKLTB4MTAsMHgwMCwweGIwLDB4OGYsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIwLDB4MDAsMHhiZCwweDI3LDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weDY4LDB4MTUsMHg0NywweDI0LDB4OGMsMHg2NCwweGUzLDB4OTAsMHhmZiwweGZmLDB4YTUsMHgzMCwweDA5LDB4MDAsMHhhMywweDEwLAotMHgyMSwweDIwLDB4YzAsMHgwMCwweGZjLDB4NjQsMHhlMiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4YzIsMHhhYywKLTB4MDYsMHg2NSwweGUzLDB4OTQsMHgwZSwweDAwLDB4MDIsMHgyNCwweDE0LDB4MDAsMHhjMiwweGFjLDB4OGIsMHgwNywweDAwLDB4MDgsCi0weDBjLDB4MDAsMHhjMywweGFjLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMywweDNjLAotMHgyNSwweGIwLDB4MDIsMHgzYywweGQwLDB4ZmYsMHhiZCwweDI3LDB4NGMsMHgxZiwweDYzLDB4MjQsMHgxOCwweDAzLDB4NDIsMHgzNCwKLTB4MjgsMHgwMCwweGJmLDB4YWYsMHgyNCwweDAwLDB4YjMsMHhhZiwweDIwLDB4MDAsMHhiMiwweGFmLDB4MWMsMHgwMCwweGIxLDB4YWYsCi0weDE4LDB4MDAsMHhiMCwweGFmLDB4MDAsMHgwMCwweDQzLDB4YWMsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LAotMHgwMCwweDYwLDB4ODEsMHg0MCwweDJhLDB4YjAsMHgwMiwweDNjLDB4MzYsMHgwMCwweDQyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHg5MCwKLTB4MDIsMHg4MCwweDEzLDB4M2MsMHg2OCwweDE1LDB4NjYsMHgyNiwweGMwLDB4MTgsMHgwMywweDAwLDB4NWMsMHg2NSwweGM1LDB4OGMsCi0weDIzLDB4YjAsMHgwNCwweDNjLDB4ZjAsMHgwNywweDYzLDB4MzAsMHhmZiwweDFmLDB4MDIsMHgzYywweDIxLDB4MTgsMHg2NCwweDAwLAotMHhmZiwweGZmLDB4NDIsMHgzNCwweDI0LDB4MjAsMHg2MiwweDAwLDB4MjMsMHg4OCwweDg1LDB4MDAsMHgyYiwweDM4LDB4ODUsMHgwMCwKLTB4MDAsMHgwNCwweDIyLDB4MjYsMHgwMCwweDY1LDB4YzMsMHg4YywweDBiLDB4ODgsMHg0NywweDAwLDB4MDEsMHgwNCwweDI1LDB4MmUsCi0weGZjLDB4NjQsMHhjMywweGFjLDB4NjAsMHg2NSwweGM0LDB4YWMsMHgwNiwweDY1LDB4YzAsMHhhNCwweDExLDB4MDAsMHhhMCwweDE0LAotMHgwNSwweDY1LDB4YzAsMHhhMCwweDAwLDB4ZmMsMHg4MywweDI0LDB4MjMsMHgxMCwweDAyLDB4M2MsMHgwYiwweDE4LDB4ODcsMHgwMCwKLTB4ZmYsMHgwMywweDQyLDB4MzQsMHgyYiwweDEwLDB4NDMsMHgwMCwweDMzLDB4MDAsMHg0MCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDIzLDB4ODgsMHg4MywweDAwLDB4MmIsMHgxMCwweDgzLDB4MDAsMHg1YywweDY1LDB4YzMsMHhhYywweDAzLDB4MDAsMHg0MCwweDEwLAotMHgwMSwweDA0LDB4MjUsMHgyZSwweDAwLDB4MDQsMHgzMSwweDI2LDB4MDEsMHgwNCwweDI1LDB4MmUsMHgwZSwweDAwLDB4YTAsMHgxMCwKLTB4NjgsMHgxNSwweDcwLDB4MjYsMHg2OCwweDE1LDB4NzAsMHgyNiwweDYwLDB4NjUsMHgwMywweDhlLDB4NWMsMHg2NSwweDA0LDB4OGUsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MmIsMHgxMCwweDgzLDB4MDAsMHgyNSwweDAwLDB4NDAsMHgxNCwweDJiLDB4MTAsMHg2NCwweDAwLAotMHg1MSwweDAwLDB4NDAsMHgxNCwweDI1LDB4YjAsMHgwMiwweDNjLDB4ODAsMHgwMCwweDAzLDB4MjQsMHhkMCwweDAzLDB4NDIsMHgzNCwKLTB4MDAsMHgwMCwweDQzLDB4YWMsMHg2OCwweDE1LDB4NzAsMHgyNiwweDVjLDB4NjUsMHgwMywweDk2LDB4MmEsMHhiMCwweDAyLDB4M2MsCi0weDM1LDB4MDAsMHg0MiwweDM0LDB4YzIsMHg4OCwweDAzLDB4MDAsMHgwMCwweDAwLDB4NTEsMHhhMCwweDhmLDB4MTAsMHgwMCwweDBjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDA2LDB4NjUsMHgwMywweDk2LDB4MjUsMHhiMCwweDAyLDB4M2MsMHhiMCwweDAzLDB4NDIsMHgzNCwKLTB4MDAsMHgwMCwweDQzLDB4YWMsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDEsMHgwMCwweDIxLDB4MzgsCi0weDAwLDB4NjAsMHg4MSwweDQwLDB4ZmMsMHg0YSwweDAyLDB4OGUsMHg4MCwweDAwLDB4MDMsMHgzYywweDQxLDB4YjAsMHgwNCwweDNjLAotMHgyNSwweDEwLDB4NDMsMHgwMCwweDAwLDB4MDAsMHg4MiwweGFjLDB4MjgsMHgwMCwweGJmLDB4OGYsMHhmYywweDRhLDB4MDIsMHhhZSwKLTB4MjQsMHgwMCwweGIzLDB4OGYsMHgyMCwweDAwLDB4YjIsMHg4ZiwweDFjLDB4MDAsMHhiMSwweDhmLDB4MTgsMHgwMCwweGIwLDB4OGYsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MzAsMHgwMCwweGJkLDB4MjcsMHgwMCwweDA4LDB4MDAsMHgwOCwweDAwLDB4ZmMsMHg2MywweDI0LAotMHhmYywweDY0LDB4MDUsMHg4ZSwweDIxLDB4MzAsMHg4MCwweDAwLDB4ZmYsMHhmZiwweDI3LDB4MzIsMHgwOSwweDAwLDB4MDQsMHgyNCwKLTB4MTAsMHgwMSwweDAwLDB4MGMsMHgxMCwweDAwLDB4YTAsMHhhZiwweGZjLDB4NjQsMHgwMywweDhlLDB4MDYsMHg2NSwweDA1LDB4OTYsCi0weDVjLDB4NjUsMHgwMiwweDhlLDB4MjEsMHgxOCwweDcxLDB4MDAsMHgyMSwweDI4LDB4MjUsMHgwMiwweDIxLDB4MTAsMHg1MSwweDAwLAotMHgwOSwweDAwLDB4MDQsMHgyNCwweDVjLDB4NjUsMHgwMiwweGFlLDB4ZmMsMHg2NCwweDAzLDB4YWUsMHg0ZCwweDAxLDB4MDAsMHgwYywKLTB4MDYsMHg2NSwweDA1LDB4YTYsMHg2OCwweDE1LDB4NzAsMHgyNiwweDVjLDB4NjUsMHgwMywweDk2LDB4MmEsMHhiMCwweDAyLDB4M2MsCi0weDM1LDB4MDAsMHg0MiwweDM0LDB4YzIsMHg4OCwweDAzLDB4MDAsMHgwMCwweDAwLDB4NTEsMHhhMCwweDhmLDB4MTAsMHgwMCwweDBjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDA2LDB4NjUsMHgwMywweDk2LDB4MjUsMHhiMCwweDAyLDB4M2MsMHhiMCwweDAzLDB4NDIsMHgzNCwKLTB4MDAsMHgwMCwweDQzLDB4YWMsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDEsMHgwMCwweDIxLDB4MzgsCi0weDAwLDB4NjAsMHg4MSwweDQwLDB4ZmMsMHg0YSwweDAyLDB4OGUsMHg4MCwweDAwLDB4MDMsMHgzYywweDQxLDB4YjAsMHgwNCwweDNjLAotMHgyNSwweDEwLDB4NDMsMHgwMCwweDAwLDB4MDAsMHg4MiwweGFjLDB4MjgsMHgwMCwweGJmLDB4OGYsMHhmYywweDRhLDB4MDIsMHhhZSwKLTB4MjQsMHgwMCwweGIzLDB4OGYsMHgyMCwweDAwLDB4YjIsMHg4ZiwweDFjLDB4MDAsMHhiMSwweDhmLDB4MTgsMHgwMCwweGIwLDB4OGYsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MzAsMHgwMCwweGJkLDB4MjcsMHg2NCwweDY1LDB4MDIsMHg4ZSwweGZjLDB4NjQsMHgwNSwweDhlLAotMHgyMSwweDMwLDB4ODAsMHgwMCwweDIzLDB4ODgsMHg0NCwweDAwLDB4ZmYsMHhmZiwweDI3LDB4MzIsMHgwOSwweDAwLDB4MDQsMHgyNCwKLTB4MTAsMHgwMSwweDAwLDB4MGMsMHgxMCwweDAwLDB4YTAsMHhhZiwweGZjLDB4NjQsMHgwMywweDhlLDB4MDYsMHg2NSwweDAyLDB4OTYsCi0weDYwLDB4NjUsMHgxMiwweDk2LDB4MjEsMHgxOCwweDcxLDB4MDAsMHgyMSwweDEwLDB4MjIsMHgwMiwweDIzLDB4MTAsMHgxMSwweDNjLAotMHhmYywweDY0LDB4MDMsMHhhZSwweDA2LDB4NjUsMHgwMiwweGE2LDB4MDYsMHgwMCwweDQwLDB4MTYsMHg1YywweDY1LDB4MTEsMHhhZSwKLTB4MDksMHgwMCwweDA0LDB4MjQsMHg0ZCwweDAxLDB4MDAsMHgwYywweDY4LDB4MTUsMHg3MCwweDI2LDB4NDYsMHgwOCwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4NGQsMHgwMSwweDAwLDB4MGMsMHgwOSwweDAwLDB4MDQsMHgyNCwweGZjLDB4NjQsMHgwNSwweDhlLAotMHgwOSwweDAwLDB4MDQsMHgyNCwweDIzLDB4MTAsMHgwNiwweDNjLDB4MjEsMHgzOCwweDQwLDB4MDIsMHgxMCwweDAxLDB4MDAsMHgwYywKLTB4MTAsMHgwMCwweGEwLDB4YWYsMHhmYywweDY0LDB4MDMsMHg4ZSwweDA2LDB4NjUsMHgwMiwweDk2LDB4MjEsMHgyMCwweDUxLDB4MDIsCi0weDIxLDB4MTgsMHg3MiwweDAwLDB4MjEsMHgxMCwweDQyLDB4MDIsMHg1YywweDY1LDB4MDQsMHhhZSwweDA5LDB4MDAsMHgwNCwweDI0LAotMHhmYywweDY0LDB4MDMsMHhhZSwweDc1LDB4MDgsMHgwMCwweDA4LDB4MDYsMHg2NSwweDAyLDB4YTYsMHgwMiwweDgwLDB4MDksMHgzYywKLTB4NjgsMHgxNSwweDI4LDB4MjUsMHhkYywweDYzLDB4MDYsMHg4ZCwweGZmLDB4ZmYsMHgwMiwweDM0LDB4M2YsMHgwMCwweGMyLDB4MTAsCi0weDIxLDB4MzgsMHg4MCwweDAwLDB4MmIsMHgxMCwweGM3LDB4MDAsMHgzMCwweDAwLDB4NDAsMHgxMCwweDAyLDB4MTksMHgwNiwweDAwLAotMHgyMSwweDEwLDB4YzcsMHgwMCwweDIzLDB4MTAsMHg0MywweDAwLDB4MTAsMHgwMCwweDQ2LDB4MjQsMHhkYywweDYzLDB4MDYsMHhhZCwKLTB4NjgsMHgxNSwweDI2LDB4MjUsMHgwNCwweDQwLDB4YzQsMHg4YywweGUwLDB4NjMsMHgwMiwweGFkLDB4ZmYsMHhmZiwweDAyLDB4MzQsCi0weDJmLDB4MDAsMHg4MiwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyYiwweDEwLDB4ODcsMHgwMCwweDFmLDB4MDAsMHg0MCwweDEwLAotMHgwMiwweDE5LDB4MDQsMHgwMCwweDIxLDB4MTAsMHg4NywweDAwLDB4MjMsMHgxMCwweDQzLDB4MDAsMHgxMCwweDAwLDB4NDQsMHgyNCwKLTB4MDQsMHg0MCwweGM0LDB4YWMsMHhlMCwweDYzLDB4YzIsMHhhYywweGMwLDB4MTAsMHgwNSwweDAwLDB4MjEsMHgxMCwweDQ1LDB4MDAsCi0weDgwLDB4MTAsMHgwMiwweDAwLDB4MjEsMHgxMCwweDQ1LDB4MDAsMHg2OCwweDE1LDB4MjMsMHgyNSwweDgwLDB4MTAsMHgwMiwweDAwLAotMHgyMSwweDI4LDB4NDMsMHgwMCwweDY4LDB4NTEsMHhhNiwweDhjLDB4MDAsMHgyMSwweDA3LDB4MDAsMHhmZiwweGZmLDB4YzIsMHgzOCwKLTB4MGEsMHgzMCwweDgyLDB4MDAsMHgyYiwweDE4LDB4YzcsMHgwMCwweDA3LDB4MDAsMHg2MCwweDEwLDB4MjEsMHgxMCwweGM3LDB4MDAsCi0weDAyLDB4MTksMHgwNiwweDAwLDB4MjMsMHgxMCwweDQzLDB4MDAsMHgxMCwweDAwLDB4NDYsMHgyNCwweDY4LDB4NTEsMHhhNiwweGFjLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDZjLDB4NTEsMHhhMiwweGFjLDB4MDIsMHgxOSwweDA2LDB4MDAsMHgyMywweDEwLDB4NDMsMHgwMCwKLTB4NjgsMHg1MSwweGEyLDB4YWMsMHgwOCwweDAwLDB4ZTAsMHgwMywweDZjLDB4NTEsMHhhMiwweGFjLDB4MjEsMHgxMCwweDg3LDB4MDAsCi0weDIzLDB4MTAsMHg0MywweDAwLDB4YTUsMHgwOCwweDAwLDB4MDgsMHgwNCwweDQwLDB4YzIsMHhhYywweDIxLDB4MTAsMHhjNywweDAwLAotMHg2OCwweDE1LDB4MjYsMHgyNSwweDA0LDB4NDAsMHhjNCwweDhjLDB4MjMsMHgxMCwweDQzLDB4MDAsMHhkYywweDYzLDB4MDIsMHhhZCwKLTB4ZTAsMHg2MywweDAyLDB4YWQsMHhmZiwweGZmLDB4MDIsMHgzNCwweGQ0LDB4ZmYsMHg4MiwweDE0LDB4MmIsMHgxMCwweDg3LDB4MDAsCi0weDAwLDB4MjEsMHgwNywweDAwLDB4OWUsMHgwOCwweDAwLDB4MDgsMHgwNCwweDQwLDB4YzQsMHhhYywweDAwLDB4MzEsMHgwNCwweDAwLAotMHg5MSwweDA4LDB4MDAsMHgwOCwweGRjLDB4NjMsMHgwNiwweGFkLDB4NjMsMHgwMCwweDgyLDB4MjQsMHg3NywweDAwLDB4NDIsMHgyYywKLTB4MDAsMHgwMCwweDg1LDB4MjgsMHgwNCwweDAwLDB4NDAsMHgxMCwweDIxLDB4MTgsMHgwMCwweDAwLDB4NjQsMHgwMCwweDgyLDB4MjQsCi0weDY0LDB4MDAsMHgwMywweDI0LDB4MGIsMHgxOCwweDQ1LDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHg2MCwweDAwLAotMHgwYywweDAwLDB4ODIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHgwMCwweDQyLDB4MzAsMHgwNCwweDAwLDB4NDIsMHgyOCwKLTB4MTcsMHgwMCwweDQwLDB4MTAsMHgyNSwweGIwLDB4MDIsMHgzYywweDI0LDB4MDgsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4OGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDYzLDB4MzAsMHgxNiwweDAwLDB4NjAsMHgxNCwweDAxLDB4MDAsMHgwMiwweDI0LAotMHgwNSwweDAwLDB4YTMsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODIsMHgyMSwweDAzLDB4MDAsMHgyOCwweDAwLDB4ODIsMHgxMCwKLTB4ZjUsMHhmZiwweDAyLDB4MjQsMHgwMiwweDAwLDB4ODIsMHgyOCwweDM5LDB4MDAsMHg0MCwweDE0LDB4MDIsMHgwMCwweDAyLDB4MjQsCi0weDJlLDB4MDAsMHg4MiwweDEwLDB4ZTksMHhmZiwweDAyLDB4MjQsMHgwMywweDAwLDB4MDIsMHgyNCwweDI0LDB4MDAsMHg4MiwweDEwLAotMHgzZSwweDAwLDB4NjMsMHgzMCwweDA1LDB4MDAsMHhjNCwweDI0LDB4ZDIsMHgwOCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDQsMHgwMCwweGE0LDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQyLDB4MjAsMHgwNCwweDAwLDB4ZDIsMHgwOCwweDAwLDB4MDgsCi0weDk2LDB4ZmYsMHg4NCwweDI0LDB4MDUsMHgwMCwweGEzLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MDAsMHg2NCwweDMwLAotMHg0MiwweDIxLDB4MDQsMHgwMCwweDBlLDB4MDAsMHg4MiwweDEwLDB4MWYsMHgwMCwweDYyLDB4MzAsMHgwMiwweDAwLDB4ODIsMHgyOCwKLTB4MWQsMHgwMCwweDQwLDB4MTQsMHgwMiwweDAwLDB4MDIsMHgyNCwweDE0LDB4MDAsMHg4MiwweDEwLDB4MWYsMHgwMCwweDYyLDB4MzAsCi0weDAzLDB4MDAsMHgwMiwweDI0LDB4ZWIsMHhmZiwweDgyLDB4MTQsMHgxZiwweDAwLDB4NjIsMHgzMCwweDQwLDB4MTAsMHgwMiwweDAwLAotMHhkZCwweGZmLDB4MDMsMHgyNCwweDIzLDB4MzAsMHg2MiwweDAwLDB4ZjYsMHgwOCwweDAwLDB4MDgsMHgwNSwweDAwLDB4YzQsMHgyNCwKLTB4NDAsMHgxMCwweDAyLDB4MDAsMHhmNSwweGZmLDB4MDMsMHgyNCwweDBlLDB4MDksMHgwMCwweDA4LDB4MjMsMHgzMCwweDYyLDB4MDAsCi0weDNlLDB4MDAsMHg2MywweDMwLDB4MjMsMHgzMCwweDQzLDB4MDAsMHhmNiwweDA4LDB4MDAsMHgwOCwweDA1LDB4MDAsMHhjNCwweDI0LAotMHhkZCwweGZmLDB4MDIsMHgyNCwweDE2LDB4MDksMHgwMCwweDA4LDB4MjMsMHgzMCwweDQzLDB4MDAsMHg0MCwweDEwLDB4MDIsMHgwMCwKLTB4ZTksMHhmZiwweDAzLDB4MjQsMHgwZSwweDA5LDB4MDAsMHgwOCwweDIzLDB4MzAsMHg2MiwweDAwLDB4M2UsMHgwMCwweDYzLDB4MzAsCi0weDE2LDB4MDksMHgwMCwweDA4LDB4MjMsMHgzMCwweDQzLDB4MDAsMHhkMiwweGZmLDB4ODAsMHgxNCwweDFmLDB4MDAsMHg2MiwweDMwLAotMHg0MCwweDEwLDB4MDIsMHgwMCwweGY4LDB4ZmYsMHgwMywweDI0LDB4MGUsMHgwOSwweDAwLDB4MDgsMHgyMywweDMwLDB4NjIsMHgwMCwKLTB4Y2MsMHhmZiwweDgwLDB4MTQsMHgzZSwweDAwLDB4NjMsMHgzMCwweGY4LDB4ZmYsMHgwMiwweDI0LDB4MTYsMHgwOSwweDAwLDB4MDgsCi0weDIzLDB4MzAsMHg0MywweDAwLDB4YTAsMHhmZiwweGJkLDB4MjcsMHgwMiwweDgwLDB4MDIsMHgzYywweDRjLDB4MDAsMHhiNSwweGFmLAotMHg1YywweDAwLDB4YmYsMHhhZiwweDU4LDB4MDAsMHhiZSwweGFmLDB4NTQsMHgwMCwweGI3LDB4YWYsMHg1MCwweDAwLDB4YjYsMHhhZiwKLTB4NDgsMHgwMCwweGI0LDB4YWYsMHg0NCwweDAwLDB4YjMsMHhhZiwweDQwLDB4MDAsMHhiMiwweGFmLDB4M2MsMHgwMCwweGIxLDB4YWYsCi0weDM4LDB4MDAsMHhiMCwweGFmLDB4NjgsMHgxNSwweDU1LDB4MjQsMHgyNSwweGIwLDB4MDMsMHgzYywweDA0LDB4MDEsMHg2MiwweDM0LAotMHgwMCwweDAwLDB4NDMsMHg4YywweDQ0LDB4NjUsMHhhNywweDhlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMywweDAwLDB4ZTMsMHgxMCwKLTB4NDgsMHg2NSwweGEzLDB4YWUsMHgyYiwweDEwLDB4NjcsMHgwMCwweGE4LDB4MDAsMHg0MCwweDE0LDB4MmIsMHgxMCwweGUzLDB4MDAsCi0weGQxLDB4MDAsMHg0MCwweDE0LDB4MDIsMHg4MCwweDAyLDB4M2MsMHg2OCwweDE1LDB4NDQsMHgyNCwweDE4LDB4NjUsMHg4MywweDk0LAotMHgwMiwweDgwLDB4MDIsMHgzYywweDIxLDB4ODgsMHgwMCwweDAwLDB4MTksMHgwMCwweDQwLDB4MWEsMHgyNSwweDk4LDB4NjIsMHgwMCwKLTB4MjEsMHhiOCwweDgwLDB4MDAsMHgyMSwweGIwLDB4ODAsMHgwMCwweDAxLDB4MDAsMHgxNCwweDI0LDB4MjEsMHgyMCwweDAwLDB4MDAsCi0weDIxLDB4ODAsMHg5MywweDAwLDB4MDAsMHgwMCwweDA1LDB4OGUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA3LDB4MDAsMHhhMCwweDEwLAotMHgwMSwweDAwLDB4MjIsMHgyNiwweDA0LDB4MDAsMHgwMiwweDhlLDB4MDAsMHhmMCwweDAzLDB4M2MsMHgwMCwweDIwLDB4MDQsMHgzYywKLTB4MjQsMHgxMCwweDQzLDB4MDAsMHgxZSwweDAwLDB4NDQsMHgxMCwweDA2LDB4MDAsMHgyMiwweDI2LDB4ZmYsMHhmZiwweDUxLDB4MzAsCi0weDgyLDB4MTYsMHgwNSwweDAwLDB4MDEsMHgwMCwweDQyLDB4MzAsMHgzNCwweDAwLDB4NTQsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg4MCwweDIwLDB4MTEsMHgwMCwweDJhLDB4MTAsMHg5MiwweDAwLDB4ZWQsMHhmZiwweDQwLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4YmQsMHg0ZSwweDAwLDB4MGMsMHgyMSwweDIwLDB4YzAsMHgwMywweDAyLDB4ODAsMHgwMiwweDNjLDB4MDgsMHgwNCwweDQ0LDB4MjQsCi0weDIxLDB4MjgsMHgwMCwweDAwLDB4MjEsMHgzMCwweDAwLDB4MDAsMHgzMSwweDFjLDB4MDAsMHgwYywweDIxLDB4MzgsMHgwMCwweDAwLAotMHgyNSwweGIwLDB4MDMsMHgzYywweDA0LDB4MDEsMHg2MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4OGMsMHg0NCwweDY1LDB4YTcsMHg4ZSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhjZiwweGZmLDB4ZTMsMHgxNCwweDQ4LDB4NjUsMHhhMywweGFlLDB4MjUsMHhiMCwweDAzLDB4M2MsCi0weDAwLDB4MDEsMHg2MiwweDM0LDB4MDAsMHgwMCwweDQ3LDB4YWMsMHg2NiwweDA5LDB4MDAsMHgwOCwweDQ0LDB4NjUsMHhhNywweGFlLAotMHhiMCwweDRjLDB4ZTIsMHg4ZSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDQyLDB4MjQsMHhiMCwweDRjLDB4ZTIsMHhhZSwKLTB4MGMsMHgwMCwweDA0LDB4OGUsMHgwYywweDAwLDB4MDIsMHgyNCwweDNmLDB4MDAsMHg4MywweDMwLDB4NjQsMHgwMCwweDYyLDB4MTAsCi0weDIxLDB4MjgsMHhlMCwweDAyLDB4M2YsMHgwMCwweDgzLDB4MzAsMHgwZCwweDAwLDB4MDIsMHgyNCwweDU5LDB4MDAsMHg2MiwweDEwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4MDAsMHg4MywweDMwLDB4MGUsMHgwMCwweDAyLDB4MjQsMHgwNCwweDAwLDB4NjIsMHgxMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHg4ZSwweDViLDB4MDksMHgwMCwweDA4LDB4MDYsMHgwMCwweDIyLDB4MjYsCi0weGJjLDB4NGMsMHhlMiwweDhlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4NDIsMHgyNCwweGJjLDB4NGMsMHhlMiwweGFlLAotMHgwMCwweDAwLDB4MDUsMHg4ZSwweDViLDB4MDksMHgwMCwweDA4LDB4MDYsMHgwMCwweDIyLDB4MjYsMHgwMCwweDQwLDB4YzIsMHg4ZSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDEyLDB4MDIsMHgwMCwweDBmLDB4MDAsMHg0MiwweDMwLDB4MDUsMHgwMCwweDU0LDB4MTAsCi0weGMyLDB4MTMsMHgwNSwweDAwLDB4MWUsMHgwMCwweDQyLDB4MzAsMHgyMSwweDEwLDB4NTEsMHgwMCwweDYwLDB4MDksMHgwMCwweDA4LAotMHhmZiwweGZmLDB4NTEsMHgzMCwweDAyLDB4NDAsMHhjMiwweDkyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxZSwweDAwLDB4NDAsMHgxNCwKLTB4MDIsMHg4MCwweDAzLDB4M2MsMHgwNCwweDAwLDB4MDMsMHg4ZSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgxNCwweDAzLDB4MDAsCi0weDBmLDB4MDAsMHg0MiwweDMwLDB4MTcsMHgwMCwweDQwLDB4MTQsMHgwMiwweDE3LDB4MDMsMHgwMCwweDAzLDB4MDAsMHg0NCwweDMwLAotMHgwOCwweDAwLDB4ODAsMHgxMCwweDAwLDB4YzAsMHgwMiwweDNjLDB4MjQsMHgxMCwweDYyLDB4MDAsMHgxMSwweDAwLDB4NDAsMHgxNCwKLTB4MDMsMHgwMCwweDAyLDB4MjQsMHgxMCwweDAwLDB4ODIsMHgxMCwweDAyLDB4ODAsMHgwMywweDNjLDB4MGYsMHgwMCwweDgwLDB4MTAsCi0weDY4LDB4MTUsMHg2MywweDI0LDB4ODAsMHgxMCwweDExLDB4MDAsMHgyMSwweDI4LDB4NTMsMHgwMCwweGVjLDB4ZmYsMHhhMywweDhjLAotMHgyNSwweGIwLDB4MDIsMHgzYywweGQ0LDB4MDIsMHg0MiwweDM0LDB4MjEsMHgyMCwweDAwLDB4MDIsMHgwMCwweDAwLDB4NDMsMHhhYywKLTB4ZGMsMHgwOCwweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIxLDB4MjAsMHg0MCwweDAwLDB4OGIsMHgwOCwweDAwLDB4MGMsCi0weDIxLDB4MjgsMHgwMCwweDAwLDB4MDIsMHg4MCwweDAzLDB4M2MsMHg2OCwweDE1LDB4NjMsMHgyNCwweDAyLDB4NDAsMHg2MiwweDkwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDg1LDB4MDAsMHg1NCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDgwLDB4MDQsMHgzYywKLTB4NjgsMHgxNSwweDg0LDB4MjQsMHgwMiwweDQwLDB4ODMsMHg5MCwweDAyLDB4MDAsMHgwMiwweDI0LDB4NjgsMHgwMCwweDYyLDB4MTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MjUsMHhiMCwweDAzLDB4M2MsMHg0YywweDAwLDB4NjMsMHgzNCwweDAwLDB4MDAsMHg2MiwweDkwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAzLDB4MDAsMHg0MiwweDMwLDB4MDgsMHgwMCwweDU0LDB4MTAsMHgwMiwweDgwLDB4MDQsMHgzYywKLTB4MDAsMHgwMCwweDA1LDB4OGUsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMyLDB4MTMsMHgwNSwweDAwLDB4MWUsMHgwMCwweDQyLDB4MzAsCi0weDIxLDB4MTAsMHg1MSwweDAwLDB4NjAsMHgwOSwweDAwLDB4MDgsMHhmZiwweGZmLDB4NTEsMHgzMCwweGQwLDB4MDIsMHgwMiwweDI0LAotMHg2OCwweDE1LDB4ODQsMHgyNCwweGRjLDB4NjMsMHg4MiwweGFjLDB4MDAsMHgwMCwweDA1LDB4OGUsMHhkMywweDA5LDB4MDAsMHgwOCwKLTB4YzIsMHgxMywweDA1LDB4MDAsMHhiOCwweDRjLDB4YTIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDQyLDB4MjQsCi0weGI4LDB4NGMsMHhhMiwweGFjLDB4MGMsMHgwMCwweDA0LDB4OGUsMHg4NiwweDA5LDB4MDAsMHgwOCwweDNmLDB4MDAsMHg4MywweDMwLAotMHhiNCwweDRjLDB4ZTIsMHg4ZSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDQyLDB4MjQsMHhiNCwweDRjLDB4ZTIsMHhhZSwKLTB4MGMsMHgwMCwweDA0LDB4OGUsMHg4MiwweDA5LDB4MDAsMHgwOCwweDNmLDB4MDAsMHg4MywweDMwLDB4NGMsMHg2NSwweGEyLDB4OGUsCi0weGZmLDB4ZmYsMHg3MSwweDMwLDB4MjMsMHgxMCwweDQ3LDB4MDAsMHhmZiwweGZmLDB4NTAsMHgzMCwweDIxLDB4MTgsMHgxMSwweDAyLAotMHhmZiwweGZmLDB4NzIsMHgzMCwweGExLDB4NGUsMHgwMCwweDBjLDB4MjEsMHgyMCwweDQwLDB4MDIsMHg3NiwweDAwLDB4NDAsMHgxMCwKLTB4MjEsMHhmMCwweDQwLDB4MDAsMHgwOCwweDAwLDB4NDIsMHg4YywweDQ0LDB4NjUsMHhhNiwweDhlLDB4MjEsMHgzOCwweDAwLDB4MDIsCi0weDIxLDB4MTgsMHg1MiwweDAwLDB4MjEsMHgyOCwweDQwLDB4MDAsMHgwOCwweDAwLDB4MDQsMHgyNCwweDE0LDB4NjUsMHhhMywweGFlLAotMHgxOCwweDY1LDB4YTIsMHhhZSwweDEwLDB4MDEsMHgwMCwweDBjLDB4MTAsMHgwMCwweGEwLDB4YWYsMHg0ZCwweDAxLDB4MDAsMHgwYywKLTB4MDgsMHgwMCwweDA0LDB4MjQsMHgxOCwweDY1LDB4YTUsMHg4ZSwweDI1LDB4YjAsMHgwMywweDNjLDB4MjQsMHgxMCwweDAyLDB4M2MsCi0weDIxLDB4MjgsMHhiMCwweDAwLDB4MDAsMHgwMSwweDcwLDB4MzQsMHgwMCwweDAwLDB4MDIsMHhhZSwweDIxLDB4MzgsMHgyMCwweDAyLAotMHgwOCwweDAwLDB4MDQsMHgyNCwweDI0LDB4MTAsMHgwNiwweDNjLDB4NDQsMHg2NSwweGEyLDB4YWUsMHgxMCwweDAxLDB4MDAsMHgwYywKLTB4MTAsMHgwMCwweGEwLDB4YWYsMHg0OCwweDY1LDB4YTMsMHg4ZSwweDA4LDB4MDAsMHgwNCwweDI0LDB4NGQsMHgwMSwweDAwLDB4MGMsCi0weDQ0LDB4NjUsMHhhMywweGFlLDB4NDQsMHg2NSwweGEyLDB4OGUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweGFlLAotMHg0NiwweDA5LDB4MDAsMHgwOCwweDAyLDB4ODAsMHgwMiwweDNjLDB4MjMsMHgxMCwweDY3LDB4MDAsMHhmZiwweGZmLDB4NTIsMHgzMCwKLTB4YTEsMHg0ZSwweDAwLDB4MGMsMHgyMSwweDIwLDB4NDAsMHgwMiwweDU2LDB4MDAsMHg0MCwweDEwLDB4MjEsMHhmMCwweDQwLDB4MDAsCi0weDA4LDB4MDAsMHg0MiwweDhjLDB4NDQsMHg2NSwweGE2LDB4OGUsMHgwOCwweDAwLDB4MDQsMHgyNCwweDIxLDB4MTgsMHg1MiwweDAwLAotMHgyMSwweDI4LDB4NDAsMHgwMCwweDIxLDB4MzgsMHg0MCwweDAyLDB4MTQsMHg2NSwweGEzLDB4YWUsMHgxOCwweDY1LDB4YTIsMHhhZSwKLTB4MTAsMHgwMSwweDAwLDB4MGMsMHgxMCwweDAwLDB4YTAsMHhhZiwweDQ4LDB4NjUsMHhhMywweDhlLDB4MDgsMHgwMCwweDA0LDB4MjQsCi0weDRkLDB4MDEsMHgwMCwweDBjLDB4NDQsMHg2NSwweGEzLDB4YWUsMHg0NCwweDY1LDB4YTMsMHg4ZSwweDI1LDB4YjAsMHgwNCwweDNjLAotMHgwMCwweDAxLDB4ODIsMHgzNCwweDAwLDB4MDAsMHg0MywweGFjLDB4NDYsMHgwOSwweDAwLDB4MDgsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4MDQsMHgwMCwweDAzLDB4OGUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MTQsMHgwMywweDAwLDB4MGYsMHgwMCwweDQyLDB4MzAsCi0weDA4LDB4MDAsMHg0MiwweDI4LDB4OTMsMHhmZiwweDQwLDB4MTAsMHgwMiwweDE3LDB4MDMsMHgwMCwweDAzLDB4MDAsMHg0MiwweDMwLAotMHg5MCwweGZmLDB4NDAsMHgxNCwweDgwLDB4MTAsMHgxMSwweDAwLDB4MjEsMHgyOCwweDUzLDB4MDAsMHhlYywweGZmLDB4YTMsMHg4YywKLTB4MjUsMHhiMCwweDAyLDB4M2MsMHhkNCwweDAyLDB4NDIsMHgzNCwweDIxLDB4MjAsMHgwMCwweDAyLDB4MDAsMHgwMCwweDQzLDB4YWMsCi0weGRjLDB4MDgsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMSwweDIwLDB4NDAsMHgwMCwweDhiLDB4MDgsMHgwMCwweDBjLAotMHgyMSwweDI4LDB4MDAsMHgwMCwweGNhLDB4MDksMHgwMCwweDA4LDB4MjUsMHhiMCwweDAzLDB4M2MsMHgwNCwweDAwLDB4MDMsMHg4ZSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDE0LDB4MDMsMHgwMCwweDBmLDB4MDAsMHg0MiwweDMwLDB4MDgsMHgwMCwweDQyLDB4MjgsCi0weDA2LDB4MDAsMHg0MCwweDEwLDB4MDAsMHhjMCwweDAyLDB4M2MsMHgwMiwweDE3LDB4MDMsMHgwMCwweDAzLDB4MDAsMHg0MiwweDMwLAotMHgwYywweDAwLDB4NDAsMHgxMCwweDgwLDB4MTAsMHgxMSwweDAwLDB4MDAsMHhjMCwweDAyLDB4M2MsMHgyNCwweDEwLDB4NjIsMHgwMCwKLTB4NmYsMHhmZiwweDQwLDB4MTQsMHgwMiwweDgwLDB4MDQsMHgzYywweDAyLDB4MTcsMHgwMywweDAwLDB4MDMsMHgwMCwweDQyLDB4MzAsCi0weDAzLDB4MDAsMHgwMywweDI0LDB4NmIsMHhmZiwweDQzLDB4MTAsMHg2OCwweDE1LDB4ODQsMHgyNCwweDY3LDB4ZmYsMHg0MCwweDEwLAotMHg4MCwweDEwLDB4MTEsMHgwMCwweDIxLDB4MjgsMHg1MywweDAwLDB4ZWMsMHhmZiwweGEzLDB4OGMsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4ZDQsMHgwMiwweDQyLDB4MzQsMHgyMSwweDIwLDB4MDAsMHgwMiwweDAwLDB4MDAsMHg0MywweGFjLDB4ZGMsMHgwOCwweDAwLDB4MGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MjEsMHgyMCwweDQwLDB4MDAsMHg4YiwweDA4LDB4MDAsMHgwYywweDIxLDB4MjgsMHgwMCwweDAwLAotMHhjNCwweDA5LDB4MDAsMHgwOCwweDAyLDB4ODAsMHgwNCwweDNjLDB4MjUsMHhiMCwweDA0LDB4M2MsMHg0NCwweDQ0LDB4MDIsMHgzYywKLTB4YmMsMHgwMiwweDgzLDB4MzQsMHg0NCwweDQ0LDB4NDIsMHgzNCwweDAwLDB4MDAsMHg2MiwweGFjLDB4NjcsMHgwOSwweDAwLDB4MDgsCi0weDAyLDB4ODAsMHgwMiwweDNjLDB4NDgsMHg2NSwweGE1LDB4OGUsMHgyNSwweGIwLDB4MDQsMHgzYywweDY2LDB4NjYsMHgwMiwweDNjLAotMHgwMCwweDAxLDB4ODMsMHgzNCwweDY2LDB4NjYsMHg0MiwweDM0LDB4YmMsMHgwMiwweDg0LDB4MzQsMHgwMCwweDAwLDB4NjUsMHhhYywKLTB4MDAsMHgwMCwweDgyLDB4YWMsMHg2NiwweDA5LDB4MDAsMHgwOCwweDQ0LDB4NjUsMHhhNSwweGFlLDB4MDAsMHg2MCwweDAyLDB4NDAsCi0weDAxLDB4MDAsMHg0MSwweDM0LDB4MDEsMHgwMCwweDIxLDB4MzgsMHgwMCwweDYwLDB4ODEsMHg0MCwweDAyLDB4ODAsMHgwMywweDNjLAotMHhkOCwweDhjLDB4NjQsMHhhYywweDAwLDB4NjAsMHg4MiwweDQwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDIsMHg4MCwweDAyLDB4M2MsMHhkOCwweDhjLDB4NDUsMHg4YywweDAwLDB4ODAsMHgwMywweDNjLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weDE4LDB4MDMsMHg0MiwweDM0LDB4MTAsMHgyYSwweDYzLDB4MjQsMHgwMCwweDAwLDB4NDMsMHhhYywweDA0LDB4MDAsMHgwMiwweDI0LAotMHgxZSwweDAwLDB4YTIsMHgxMCwweDA1LDB4MDAsMHhhMiwweDJjLDB4MTAsMHgwMCwweDQwLDB4MTAsMHgwNSwweDAwLDB4MDIsMHgyNCwKLTB4MDMsMHgwMCwweDAyLDB4MjQsMHgwOCwweDAwLDB4YTIsMHgxMCwweDAwLDB4MTksMHgwNCwweDAwLDB4ODAsMHgxMCwweDA0LDB4MDAsCi0weDIxLDB4MTAsMHg0NCwweDAwLDB4YzAsMHgxMCwweDAyLDB4MDAsMHgyMywweDEwLDB4NDQsMHgwMCwweDAwLDB4MTEsMHgwMiwweDAwLAotMHgyMSwweDEwLDB4NDQsMHgwMCwweDQwLDB4MTksMHgwMiwweDAwLDB4ZmYsMHhmZiwweDYzLDB4MjQsMHhmZSwweGZmLDB4NjAsMHgxNCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4ZjMsMHhmZiwweGEyLDB4MTAsCi0weDA2LDB4MDAsMHgwMiwweDI0LDB4ZjIsMHhmZiwweGEyLDB4MTQsMHg4MCwweDEwLDB4MDQsMHgwMCwweDQwLDB4MTEsMHgwNCwweDAwLAotMHgyMywweDEwLDB4NDQsMHgwMCwweDgwLDB4MTAsMHgwMiwweDAwLDB4MjEsMHgxMCwweDQ0LDB4MDAsMHgwMCwweDE5LDB4MDIsMHgwMCwKLTB4MjMsMHgxOCwweDYyLDB4MDAsMHg5YSwweDBhLDB4MDAsMHgwOCwweDAwLDB4MTksMHgwMywweDAwLDB4ODAsMHgxMCwweDA0LDB4MDAsCi0weDIxLDB4MTAsMHg0NCwweDAwLDB4YzAsMHgxMCwweDAyLDB4MDAsMHgyMywweDEwLDB4NDQsMHgwMCwweDAwLDB4MTEsMHgwMiwweDAwLAotMHgyMSwweDEwLDB4NDQsMHgwMCwweDlhLDB4MGEsMHgwMCwweDA4LDB4MDAsMHgxOSwweDAyLDB4MDAsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4ZDgsMHg4YywweDQ1LDB4OGMsMHgwMCwweDgwLDB4MDMsMHgzYywweDI1LDB4YjAsMHgwMiwweDNjLDB4MTgsMHgwMywweDQyLDB4MzQsCi0weGNjLDB4MmEsMHg2MywweDI0LDB4MDAsMHgwMCwweDQzLDB4YWMsMHgwNSwweDAwLDB4MDIsMHgyNCwweDEwLDB4MDAsMHhhMiwweDEwLAotMHgwNiwweDAwLDB4YTIsMHgyYywweDA5LDB4MDAsMHg0MCwweDE0LDB4MDQsMHgwMCwweDAyLDB4MjQsMHgwNiwweDAwLDB4MDIsMHgyNCwKLTB4MGYsMHgwMCwweGEyLDB4MTAsMHgwMCwweDExLDB4MDQsMHgwMCwweGZmLDB4ZmYsMHg4NCwweDI0LDB4ZmUsMHhmZiwweDgwLDB4MTQsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZhLDB4ZmYsMHhhMiwweDE0LAotMHg4MCwweDEwLDB4MDQsMHgwMCwweDIxLDB4MTAsMHg0NCwweDAwLDB4YzIsMHgwYSwweDAwLDB4MDgsMHg0MCwweDIwLDB4MDIsMHgwMCwKLTB4ODAsMHgxMCwweDA0LDB4MDAsMHgyMSwweDEwLDB4NDQsMHgwMCwweGMyLDB4MGEsMHgwMCwweDA4LDB4ODAsMHgyMCwweDAyLDB4MDAsCi0weDIzLDB4MTAsMHg0NCwweDAwLDB4YzIsMHgwYSwweDAwLDB4MDgsMHg0MCwweDIwLDB4MDIsMHgwMCwweGZmLDB4ZmYsMHg4NSwweDMwLAotMHgyMSwweDMwLDB4MDAsMHgwMCwweDI1LDB4YjAsMHgwMywweDNjLDB4MmEsMHhiMCwweDA0LDB4M2MsMHhiNCwweDAwLDB4NjMsMHgzNCwKLTB4MDEsMHgwMCwweGEyLDB4MjQsMHgzMSwweDAwLDB4ODQsMHgzNCwweDAwLDB4MDAsMHg2NSwweGEwLDB4MDAsMHgwMCwweDg1LDB4YTAsCi0weGZmLDB4ZmYsMHg0NSwweDMwLDB4MTIsMHgwMCwweGEwLDB4MTAsMHgwMSwweDAwLDB4MDMsMHgyNCwweDI4LDB4YjAsMHgwNywweDNjLAotMHhlOCwweDBhLDB4MDAsMHgwOCwweGZmLDB4ZmYsMHgwOCwweDI0LDB4MDAsMHgwMCwweDgzLDB4YTAsMHgwMSwweDAwLDB4NjMsMHgyNCwKLTB4ZmYsMHhmZiwweDYzLDB4MzAsMHgyYiwweDEwLDB4YTMsMHgwMCwweDA5LDB4MDAsMHg0MCwweDE0LDB4MDgsMHgwMCwweGM2LDB4MjQsCi0weGY5LDB4ZmYsMHg2NSwweDE0LDB4MjEsMHgyMCwweGM3LDB4MDAsMHgwMSwweDAwLDB4NjMsMHgyNCwweGZmLDB4ZmYsMHg2MywweDMwLAotMHgyYiwweDEwLDB4YTMsMHgwMCwweDAwLDB4MDAsMHg4OCwweGEwLDB4ZjksMHhmZiwweDQwLDB4MTAsMHgwOCwweDAwLDB4YzYsMHgyNCwKLTB4MDAsMHgwMSwweGEyLDB4MmMsMHgxMywweDAwLDB4NDAsMHgxMCwweDIxLDB4MTgsMHhhMCwweDAwLDB4ZmYsMHgwMCwweDA4LDB4MjQsCi0weDI4LDB4YjAsMHgwNywweDNjLDB4ZmMsMHgwYSwweDAwLDB4MDgsMHhmZiwweGZmLDB4MDksMHgyNCwweGZmLDB4ZmYsMHg0MywweDMwLAotMHgwMCwweDAwLDB4YTIsMHhhMCwweDAwLDB4MDEsMHg2MiwweDJjLDB4MGEsMHgwMCwweDQwLDB4MTAsMHgwOCwweDAwLDB4YzYsMHgyNCwKLTB4MDEsMHgwMCwweDYyLDB4MjQsMHhmOSwweGZmLDB4NjgsMHgxNCwweDIxLDB4MjgsMHhjNywweDAwLDB4MDAsMHgwMSwweDAyLDB4MjQsCi0weGZmLDB4ZmYsMHg0MywweDMwLDB4MDAsMHgwMSwweDYyLDB4MmMsMHgwMCwweDAwLDB4YTksMHhhMCwweGY4LDB4ZmYsMHg0MCwweDE0LAotMHgwOCwweDAwLDB4YzYsMHgyNCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhkOCwweGZmLDB4YmQsMHgyNywKLTB4MjQsMHgwMCwweGJmLDB4YWYsMHgyMCwweDAwLDB4YjQsMHhhZiwweDFjLDB4MDAsMHhiMywweGFmLDB4MTgsMHgwMCwweGIyLDB4YWYsCi0weDE0LDB4MDAsMHhiMSwweGFmLDB4MTAsMHgwMCwweGIwLDB4YWYsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LAotMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLDB4MjUsMHhiMCwweDEwLDB4M2MsMHg0MiwweDAwLDB4MTQsMHgzNiwKLTB4ZmYsMHhmZiwweDAyLDB4MjQsMHgwMCwweDAwLDB4ODIsMHhhMiwweGQ4LDB4MDAsMHgwNSwweDM2LDB4NDAsMHgwMCwweDExLDB4MzYsCi0weGE4LDB4MDAsMHgxMywweDM2LDB4YTAsMHgwMCwweDEyLDB4MzYsMHgwMCwweDEwLDB4MDMsMHgyNCwweGE0LDB4MDAsMHgxMCwweDM2LAotMHgwMCwweDgwLDB4MDIsMHgzYywweDAwLDB4MDAsMHgyMywweGE2LDB4MDAsMHgwMCwweGEwLDB4YTAsMHgwMCwweDAwLDB4NDAsMHhhZSwKLTB4MDAsMHgwMCwweDAwLDB4YWUsMHgwMCwweDAwLDB4NjIsMHhhZSwweDAwLDB4MDAsMHhhMywweDkwLDB4ODAsMHhmZiwweDAyLDB4MjQsCi0weGZkLDB4MDAsMHgwNCwweDI0LDB4MjUsMHgxOCwweDYyLDB4MDAsMHhmYywweDE3LDB4MDIsMHgyNCwweDAwLDB4MDAsMHhhMywweGEwLAotMHgwMCwweDAwLDB4MjIsMHhhNiwweGQzLDB4MGEsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4NjgsMHgxNSwweDQyLDB4MjQsMHg2OCwweDRiLDB4NDUsMHg4YywweDYwLDB4NGIsMHg0MywweDhjLDB4NjQsMHg0YiwweDQ0LDB4OGMsCi0weGZjLDB4MzcsMHgwMiwweDI0LDB4MDAsMHgwMCwweDQzLDB4YWUsMHgwMCwweDAwLDB4MDQsMHhhZSwweDAwLDB4MDAsMHg2NSwweGFlLAotMHgwMCwweDAwLDB4MjIsMHhhNiwweDAwLDB4MDAsMHg4MCwweGEyLDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwKLTB4MDAsMHg2MCwweDgxLDB4NDAsMHgyNCwweDAwLDB4YmYsMHg4ZiwweDIwLDB4MDAsMHhiNCwweDhmLDB4MWMsMHgwMCwweGIzLDB4OGYsCi0weDE4LDB4MDAsMHhiMiwweDhmLDB4MTQsMHgwMCwweGIxLDB4OGYsMHgxMCwweDAwLDB4YjAsMHg4ZiwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgyOCwweDAwLDB4YmQsMHgyNywweGQwLDB4ZmYsMHhiZCwweDI3LDB4MmMsMHgwMCwweGJmLDB4YWYsMHgyOCwweDAwLDB4YjYsMHhhZiwKLTB4MjQsMHgwMCwweGI1LDB4YWYsMHgyMCwweDAwLDB4YjQsMHhhZiwweDFjLDB4MDAsMHhiMywweGFmLDB4MTgsMHgwMCwweGIyLDB4YWYsCi0weDE0LDB4MDAsMHhiMSwweGFmLDB4MTAsMHgwMCwweGIwLDB4YWYsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LAotMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLDB4MjUsMHhiMCwweDEwLDB4M2MsMHg0MCwweDAwLDB4MDUsMHgzNiwKLTB4MDAsMHgwMCwweGEyLDB4OTQsMHgyNCwweGZhLDB4MDMsMHgyNCwweGE4LDB4MDAsMHgxMywweDM2LDB4MjQsMHgxMCwweDQzLDB4MDAsCi0weDAwLDB4MDAsMHhhMiwweGE0LDB4YTAsMHgwMCwweDEyLDB4MzYsMHhhNCwweDAwLDB4MTAsMHgzNiwweDAwLDB4MDAsMHg1NSwweDhlLAotMHgwMCwweDAwLDB4MTYsMHg4ZSwweDAwLDB4MDAsMHg3MSwweDhlLDB4MDAsMHg4MCwweDE0LDB4M2MsMHhmYywweDM3LDB4MDIsMHgyNCwKLTB4MDAsMHgwMCwweDQwLDB4YWUsMHhmZCwweDAwLDB4MDQsMHgyNCwweDAwLDB4MDAsMHgwMCwweGFlLDB4MjEsMHg4OCwweDM0LDB4MDIsCi0weDAwLDB4MDAsMHg3NCwweGFlLDB4MDAsMHgwMCwweGEyLDB4YTQsMHhkMywweDBhLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4NTUsMHhhZSwweDAwLDB4MDAsMHgxNiwweGFlLDB4MDAsMHgwMCwweDcxLDB4YWUsMHgwMCwweDYwLDB4MDEsMHg0MCwKLTB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMCwweDYwLDB4ODEsMHg0MCwweDJjLDB4MDAsMHhiZiwweDhmLDB4MjgsMHgwMCwweGI2LDB4OGYsCi0weDI0LDB4MDAsMHhiNSwweDhmLDB4MjAsMHgwMCwweGI0LDB4OGYsMHgxYywweDAwLDB4YjMsMHg4ZiwweDE4LDB4MDAsMHhiMiwweDhmLAotMHgxNCwweDAwLDB4YjEsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgzMCwweDAwLDB4YmQsMHgyNywKLTB4ZDAsMHhmZiwweGJkLDB4MjcsMHgyYywweDAwLDB4YmYsMHhhZiwweDI4LDB4MDAsMHhiNiwweGFmLDB4MjQsMHgwMCwweGI1LDB4YWYsCi0weDIwLDB4MDAsMHhiNCwweGFmLDB4MWMsMHgwMCwweGIzLDB4YWYsMHgxOCwweDAwLDB4YjIsMHhhZiwweDE0LDB4MDAsMHhiMSwweGFmLAotMHgxMCwweDAwLDB4YjAsMHhhZiwweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMSwweDAwLDB4MjEsMHgzOCwKLTB4MDAsMHg2MCwweDgxLDB4NDAsMHgyNSwweGIwLDB4MTAsMHgzYywweDQwLDB4MDAsMHgwNSwweDM2LDB4MDAsMHgwMCwweGEyLDB4OTQsCi0weGFmLDB4ZmYsMHgwMywweDI0LDB4YTgsMHgwMCwweDEzLDB4MzYsMHgyNCwweDEwLDB4NDMsMHgwMCwweDAwLDB4MDAsMHhhMiwweGE0LAotMHhhMCwweDAwLDB4MTIsMHgzNiwweGE0LDB4MDAsMHgxMCwweDM2LDB4MDAsMHgwMCwweDU1LDB4OGUsMHgwMCwweDAwLDB4MTYsMHg4ZSwKLTB4MDAsMHgwMCwweDcxLDB4OGUsMHgwMCwweDgwLDB4MTQsMHgzYywweGZjLDB4MzcsMHgwMiwweDI0LDB4MDAsMHgwMCwweDQwLDB4YWUsCi0weGZkLDB4MDAsMHgwNCwweDI0LDB4MDAsMHgwMCwweDAwLDB4YWUsMHgyMSwweDg4LDB4MzQsMHgwMiwweDAwLDB4MDAsMHg3NCwweGFlLAotMHgwMCwweDAwLDB4YTIsMHhhNCwweGQzLDB4MGEsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NTUsMHhhZSwKLTB4MDAsMHgwMCwweDE2LDB4YWUsMHgwMCwweDAwLDB4NzEsMHhhZSwweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsCi0weDAwLDB4NjAsMHg4MSwweDQwLDB4MmMsMHgwMCwweGJmLDB4OGYsMHgyOCwweDAwLDB4YjYsMHg4ZiwweDI0LDB4MDAsMHhiNSwweDhmLAotMHgyMCwweDAwLDB4YjQsMHg4ZiwweDFjLDB4MDAsMHhiMywweDhmLDB4MTgsMHgwMCwweGIyLDB4OGYsMHgxNCwweDAwLDB4YjEsMHg4ZiwKLTB4MTAsMHgwMCwweGIwLDB4OGYsMHgwOCwweDAwLDB4ZTAsMHgwMywweDMwLDB4MDAsMHhiZCwweDI3LDB4MDAsMHg2MCwweDAxLDB4NDAsCi0weDAxLDB4MDAsMHgyMSwweDM0LDB4MDEsMHgwMCwweDIxLDB4MzgsMHgwMCwweDYwLDB4ODEsMHg0MCwweDI1LDB4YjAsMHgwNCwweDNjLAotMHg0MCwweDAwLDB4ODQsMHgzNCwweDAwLDB4MDAsMHg4MiwweDk0LDB4ZDgsMHhmZCwweDAzLDB4MjQsMHgyNCwweDEwLDB4NDMsMHgwMCwKLTB4ZmMsMHgzNywweDAzLDB4MjQsMHgwMCwweDAwLDB4ODIsMHhhNCwweDAwLDB4MDAsMHg4MywweGE0LDB4MDAsMHg2MCwweDAxLDB4NDAsCi0weDAxLDB4MDAsMHgyMSwweDM0LDB4MDAsMHg2MCwweDgxLDB4NDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4ODIsMHg4YywweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweGZmLDB4YzYsMHgzMCwKLTB4MTAsMHgwMCwweDAyLDB4MjQsMHgwYywweDAwLDB4YzIsMHgxMCwweDExLDB4MDAsMHhjMywweDI4LDB4MDYsMHgwMCwweDYwLDB4MTAsCi0weDIwLDB4MDAsMHgwMiwweDI0LDB4MDgsMHgwMCwweDAyLDB4MjQsMHgwZCwweDAwLDB4YzIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDYsMHgwMCwweGMyLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4NSwweGE0LDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg1LDB4YWMsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4ODUsMHhhMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MjEsMHgxMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weDBhLDB4MDAsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4OTAsMHhmZiwweGZmLDB4YTUsMHgyNCwweDAwLDB4MmMsMHgwNSwweDAwLAotMHhmZCwweDAwLDB4NjMsMHgzMCwweDAzLDB4MmMsMHgwNSwweDAwLDB4ZmYsMHhmZiwweDg3LDB4MzAsMHgwMCwweDAwLDB4NDMsMHhhMCwKLTB4MWEsMHgwMCwweGEwLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIxLDB4MzAsMHg0MCwweDAwLDB4MDcsMHgxMCwweGE3LDB4MDAsCi0weDAxLDB4MDAsMHg0MiwweDMwLDB4ZmQsMHgwMCwweDY0LDB4MzAsMHgwMCwweDAwLDB4NDIsMHgzOCwweDAyLDB4MDAsMHg2MywweDM0LAotMHgwYSwweDE4LDB4ODIsMHgwMCwweDAwLDB4MDAsMHhjMywweGEwLDB4MDQsMHgwMCwweDYzLDB4MzQsMHgwMCwweDAwLDB4YzMsMHhhMCwKLTB4MDksMHgwMCwweDAyLDB4MjQsMHhmZiwweGZmLDB4NDIsMHgyNCwweGZmLDB4ZmYsMHg0MSwweDA0LDB4ZmYsMHhmZiwweDQyLDB4MjQsCi0weGZiLDB4MDAsMHg2MywweDMwLDB4MDAsMHgwMCwweGMzLDB4YTAsMHgwNCwweDAwLDB4MDIsMHgyNCwweGZmLDB4ZmYsMHg0MiwweDI0LAotMHhmZiwweGZmLDB4NDEsMHgwNCwweGZmLDB4ZmYsMHg0MiwweDI0LDB4ZmYsMHhmZiwweGEyLDB4MjQsMHgwMCwweDJjLDB4MDIsMHgwMCwKLTB4MDMsMHgyYywweDA1LDB4MDAsMHhlYSwweGZmLDB4YTEsMHgwNCwweDA3LDB4MTAsMHhhNywweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MjUsMHhiMCwweDAyLDB4M2MsMHgwYSwweDAwLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0MywweDkwLAotMHhmZiwweGZmLDB4ODQsMHgyNCwweDAwLDB4MjQsMHgwNCwweDAwLDB4MDMsMHgyNCwweDA0LDB4MDAsMHhmZiwweDAwLDB4NjUsMHgzMCwKLTB4MWQsMHgwMCwweDgwLDB4MDQsMHgyMSwweDM4LDB4MDAsMHgwMCwweDIxLDB4MzAsMHg0MCwweDAwLDB4MDEsMHgwMCwweDA4LDB4MjQsCi0weDA0LDB4MDAsMHhhNSwweDM0LDB4MDAsMHgwMCwweGM1LDB4YTAsMHgwMCwweDAwLDB4YzIsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHhmZiwweDAwLDB4NDUsMHgzMCwweDAxLDB4MDAsMHhhMywweDMwLDB4MDUsMHgwMCwweDYwLDB4MTAsMHgwNCwweDAwLDB4MDIsMHgyNCwKLTB4MDQsMHgxMCwweDg4LDB4MDAsMHgyNSwweDEwLDB4NDcsMHgwMCwweGZmLDB4ZmYsMHg0NywweDMwLDB4MDQsMHgwMCwweDAyLDB4MjQsCi0weGZmLDB4ZmYsMHg0MiwweDI0LDB4ZmYsMHhmZiwweDQxLDB4MDQsMHhmZiwweGZmLDB4NDIsMHgyNCwweGZiLDB4MDAsMHhhNSwweDMwLAotMHgwMCwweDAwLDB4YzUsMHhhMCwweDA5LDB4MDAsMHgwMiwweDI0LDB4ZmYsMHhmZiwweDQyLDB4MjQsMHhmZiwweGZmLDB4NDEsMHgwNCwKLTB4ZmYsMHhmZiwweDQyLDB4MjQsMHhmZiwweGZmLDB4ODIsMHgyNCwweDAwLDB4MjQsMHgwMiwweDAwLDB4MDMsMHgyNCwweDA0LDB4MDAsCi0weGU3LDB4ZmYsMHg4MSwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHhlMCwweDAwLAotMHhlMCwweGZmLDB4YmQsMHgyNywweDEwLDB4MDAsMHhiMCwweGFmLDB4MjUsMHhiMCwweDEwLDB4M2MsMHgwYSwweDAwLDB4MTAsMHgzNiwKLTB4MTgsMHgwMCwweGJmLDB4YWYsMHgxNCwweDAwLDB4YjEsMHhhZiwweDAwLDB4MDAsMHgwMiwweDkyLDB4ZmYsMHhmZiwweDkxLDB4MzAsCi0weDAzLDB4MDAsMHgwNSwweDI0LDB4YzAsMHgwMCwweDQyLDB4MzAsMHg4MCwweDAwLDB4NDMsMHgzNCwweDAwLDB4MDAsMHgwMywweGEyLAotMHgwNCwweDAwLDB4NjMsMHgzNCwweDAwLDB4MDAsMHgwMywweGEyLDB4ZmIsMHgwMCwweDYzLDB4MzAsMHgwMCwweDAwLDB4MDMsMHhhMiwKLTB4MDgsMHgwMCwweDYzLDB4MzQsMHgwMCwweDAwLDB4MDMsMHhhMiwweDA0LDB4MDAsMHg2MywweDM0LDB4MDAsMHgwMCwweDAzLDB4YTIsCi0weGZiLDB4MDAsMHg2MywweDMwLDB4MDAsMHgwMCwweDAzLDB4YTIsMHhkNywweDBiLDB4MDAsMHgwYywweDA2LDB4MDAsMHgwNCwweDI0LAotMHg0MiwweDIwLDB4MTEsMHgwMCwweGQ3LDB4MGIsMHgwMCwweDBjLDB4MDYsMHgwMCwweDA1LDB4MjQsMHhmZCwweDBiLDB4MDAsMHgwYywKLTB4MTAsMHgwMCwweDA0LDB4MjQsMHgwMCwweDAwLDB4MDMsMHg5MiwweDE4LDB4MDAsMHhiZiwweDhmLDB4MTQsMHgwMCwweGIxLDB4OGYsCi0weGMwLDB4MDAsMHg2MywweDMwLDB4MDAsMHgwMCwweDAzLDB4YTIsMHgxMCwweDAwLDB4YjAsMHg4ZiwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgyMCwweDAwLDB4YmQsMHgyNywweGUwLDB4ZmYsMHhiZCwweDI3LDB4MTQsMHgwMCwweGIxLDB4YWYsMHhmZiwweGZmLDB4YjEsMHgzMCwKLTB4MTgsMHgwMCwweGIyLDB4YWYsMHgxMCwweDAwLDB4YjAsMHhhZiwweDFjLDB4MDAsMHhiZiwweGFmLDB4MjEsMHg5MCwweGMwLDB4MDAsCi0weDBhLDB4MDAsMHgyMCwweDEyLDB4ZmYsMHhmZiwweDkwLDB4MzAsMHgyNCwweDBjLDB4MDAsMHgwYywweDIxLDB4MjAsMHgwMCwweDAyLAotMHhmZSwweGZmLDB4MjMsMHgyNiwweDAyLDB4MDAsMHgwNCwweDI2LDB4MDAsMHgwMCwweDQyLDB4YTYsMHhmZiwweGZmLDB4NzEsMHgzMCwKLTB4ZmYsMHhmZiwweDkwLDB4MzAsMHhmOCwweGZmLDB4MjAsMHgxNiwweDAyLDB4MDAsMHg1MiwweDI2LDB4MWMsMHgwMCwweGJmLDB4OGYsCi0weDE4LDB4MDAsMHhiMiwweDhmLDB4MTQsMHgwMCwweGIxLDB4OGYsMHgxMCwweDAwLDB4YjAsMHg4ZiwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgyMCwweDAwLDB4YmQsMHgyNywweDI1LDB4YjAsMHgwMywweDNjLDB4MGEsMHgwMCwweDY4LDB4MzQsMHgwMCwweDAwLDB4MDIsMHg5MSwKLTB4ZmYsMHhmZiwweGE1LDB4MzAsMHhmZiwweDAwLDB4ODQsMHgzMCwweDFmLDB4MDAsMHhhMCwweDEwLDB4ZmYsMHgwMCwweDQ3LDB4MzAsCi0weDIxLDB4NDgsMHgwMCwweDAxLDB4MGMsMHgwMCwweDZjLDB4MzQsMHgwYiwweDAwLDB4NmIsMHgzNCwweGMwLDB4ZmYsMHgwYSwweDI0LAotMHgyMSwweDY4LDB4MDAsMHgwMSwweDI1LDB4MTAsMHhlYSwweDAwLDB4ZmYsMHgwMCwweDQ3LDB4MzAsMHgwMCwweDAwLDB4NjQsMHhhMSwKLTB4MDAsMHgwMCwweDI3LDB4YTEsMHgwMCwweDAwLDB4MjIsMHg5MSwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHgwMCwweDQ3LDB4MzAsCi0weGMwLDB4MDAsMHhlMywweDMwLDB4MDgsMHgwMCwweDYwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIxLDB4NDAsMHhhMCwweDAxLAotMHgwMCwweDAwLDB4MDIsMHg5MSwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHgwMCwweDQ3LDB4MzAsMHhjMCwweDAwLDB4ZTMsMHgzMCwKLTB4ZmIsMHhmZiwweDYwLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MiwweDhkLDB4ZmMsMHhmZiwweGEzLDB4MjQsCi0weDA0LDB4MDAsMHg4NCwweDI0LDB4ZmYsMHhmZiwweDY1LDB4MzAsMHgwMCwweDAwLDB4YzIsMHhhYywweGZmLDB4MDAsMHg4NCwweDMwLAotMHhlOCwweGZmLDB4YTAsMHgxNCwweDA0LDB4MDAsMHhjNiwweDI0LDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4ZmYsMHgwMCwweDg0LDB4MzAsMHgyMSwweDY4LDB4ZTAsMHgwMCwweGZmLDB4ZmYsMHhhNSwweDMwLDB4YzAsMHg1MCwweDA0LDB4MDAsCi0weDAwLDB4NjAsMHgwYywweDQwLDB4MDEsMHgwMCwweDgxLDB4MzUsMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLAotMHgwMCwweDAwLDB4YzIsMHg5MCwweDAxLDB4MDAsMHhjMywweDkwLDB4MjUsMHhiMCwweDA3LDB4M2MsMHgwMCwweDE0LDB4MDIsMHgwMCwKLTB4MjUsMHgyOCwweGEyLDB4MDAsMHgwMCwweDFlLDB4MDMsMHgwMCwweDAxLDB4ODAsMHgwOCwweDNjLDB4MjUsMHgyMCwweGEzLDB4MDAsCi0weDQwLDB4MDIsMHhlOSwweDM0LDB4MjUsMHgxOCwweDQ4LDB4MDEsMHg0NCwweDAyLDB4ZTcsMHgzNCwweDAwLDB4MDAsMHhlNCwweGFjLAotMHgwMCwweDAwLDB4MjMsMHhhZCwweDAzLDB4MDAsMHhjMiwweDkwLDB4MDIsMHgwMCwweGM0LDB4OTAsMHgwNCwweDAwLDB4YzMsMHg5MCwKLTB4MDUsMHgwMCwweGM1LDB4OTAsMHgwMCwweDEyLDB4MDIsMHgwMCwweDI1LDB4MjAsMHg4MiwweDAwLDB4MDAsMHgxYywweDAzLDB4MDAsCi0weDAxLDB4MDAsMHg0YSwweDI1LDB4MjUsMHgyMCwweDgzLDB4MDAsMHgwMCwweDJlLDB4MDUsMHgwMCwweDI1LDB4NDAsMHg0OCwweDAxLAotMHgyNSwweDIwLDB4ODUsMHgwMCwweDAwLDB4MDAsMHhlNCwweGFjLDB4MDEsMHgwMCwweDRhLDB4MjUsMHgwMCwweDAwLDB4MjgsMHhhZCwKLTB4MDEsMHg4MCwweDBiLDB4M2MsMHgyMSwweDQwLDB4MDAsMHgwMCwweDIxLDB4MTAsMHhhOCwweDAxLDB4MDEsMHgwMCwweDQzLDB4OTAsCi0weDAwLDB4MDAsMHg0NSwweDkwLDB4MDIsMHgwMCwweDQ0LDB4OTAsMHgwMywweDAwLDB4NDYsMHg5MCwweDAwLDB4MWEsMHgwMywweDAwLAotMHgyNSwweDI4LDB4YTMsMHgwMCwweDAwLDB4MjQsMHgwNCwweDAwLDB4MjUsMHgyOCwweGE0LDB4MDAsMHgwMCwweDM2LDB4MDYsMHgwMCwKLTB4MDQsMHgwMCwweDA4LDB4MjUsMHgyNSwweDEwLDB4NGIsMHgwMSwweDI1LDB4MjAsMHhhNiwweDAwLDB4MTAsMHgwMCwweDAzLDB4MmQsCi0weDAwLDB4MDAsMHhlNCwweGFjLDB4MDEsMHgwMCwweDRhLDB4MjUsMHgwMCwweDAwLDB4MjIsMHhhZCwweGVlLDB4ZmYsMHg2MCwweDE0LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjAsMHg4YywweDQwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4ZmYsMHhmZiwweDg0LDB4MzAsMHg0MiwweGIwLDB4MDgsMHgzYywweDgwLDB4MTAsMHgwNCwweDAwLDB4MjEsMHgxMCwweDQ4LDB4MDAsCi0weDA0LDB4MDAsMHg0NiwweGFjLDB4MDAsMHgwMCwweDA3LDB4OTEsMHg0MCwweDE4LDB4MDQsMHgwMCwweDAzLDB4MDAsMHgwNiwweDI0LAotMHhmZiwweDAwLDB4ZTcsMHgzMCwweDA0LDB4MzAsMHg2NiwweDAwLDB4MDEsMHgwMCwweDAyLDB4MjQsMHgwNCwweDEwLDB4NjIsMHgwMCwKLTB4MjUsMHgzMCwweGM3LDB4MDAsMHhmZiwweGZmLDB4YTUsMHgzMCwweDI1LDB4MTAsMHg0NywweDAwLDB4MDIsMHgwMCwweGEwLDB4MTQsCi0weGZmLDB4MDAsMHhjNywweDMwLDB4ZmYsMHgwMCwweDQ3LDB4MzAsMHg0MiwweGIwLDB4MDIsMHgzYywweDAwLDB4MDAsMHg0NywweGEwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4NDIsMHhiMCwweDAyLDB4M2MsMHgwMywweDAwLDB4NDcsMHgzNCwKLTB4MDAsMHgwMCwweGUzLDB4OTAsMHhmZiwweDAwLDB4ODQsMHgzMCwweDA0LDB4MDAsMHg4NCwweDI0LDB4ZmYsMHgwMCwweDY1LDB4MzAsCi0weDAxLDB4MDAsMHgwMiwweDI0LDB4MDQsMHgzMCwweDgyLDB4MDAsMHgwNywweDE4LDB4ODUsMHgwMCwweDI1LDB4YjAsMHgwMiwweDNjLAotMHhlOCwweDAzLDB4NDIsMHgzNCwweDAxLDB4MDAsMHg2MywweDMwLDB4MjEsMHgyMCwweGMwLDB4MDAsMHgwMCwweDAwLDB4NDUsMHhhMCwKLTB4MDIsMHgwMCwweDYwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlNiwweGEwLDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDI0LDB4MTAsMHg4NSwweDAwLDB4MDAsMHg2MCwweDAzLDB4NDAsMHgwMSwweDAwLDB4NjEsMHgzNCwweDAxLDB4MDAsMHgyMSwweDM4LAotMHgwMCwweDYwLDB4ODEsMHg0MCwweDAyLDB4ODAsMHgwMiwweDNjLDB4ZGMsMHg4YywweDQyLDB4MjQsMHgwNCwweDAwLDB4NDUsMHg4YywKLTB4MDAsMHgwMCwweDgyLDB4YWMsMHgwNCwweDAwLDB4NDQsMHhhYywweDAwLDB4MDAsMHhhNCwweGFjLDB4MDQsMHgwMCwweDg1LDB4YWMsCi0weDAwLDB4NjAsMHg4MywweDQwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE0LDB4MDAsMHg4MywweDkwLAotMHgwMSwweDAwLDB4MDIsMHgyNCwweDA4LDB4MDAsMHg4NiwweGFjLDB4MTgsMHgwMCwweDg1LDB4YWMsMHgwMCwweDAwLDB4ODQsMHhhYywKLTB4MDMsMHgwMCwweDYyLDB4MTAsMHgwNCwweDAwLDB4ODQsMHhhYywweGVkLDB4MGMsMHgwMCwweDA4LDB4MGMsMHgwMCwweDgwLDB4YWMsCi0weDBjLDB4MDAsMHg4MiwweDhjLDB4ZWQsMHgwYywweDAwLDB4MDgsMHgxMCwweDAwLDB4ODIsMHhhYywweDAwLDB4NjAsMHgwMywweDQwLAotMHgwMSwweDAwLDB4NjEsMHgzNCwweDAxLDB4MDAsMHgyMSwweDM4LDB4MDAsMHg2MCwweDgxLDB4NDAsMHgwNCwweDAwLDB4ODUsMHg4YywKLTB4MDAsMHgwMCwweDgyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMiwweGFjLDB4MDQsMHgwMCwweDQ1LDB4YWMsCi0weDAwLDB4MDAsMHg4NCwweGFjLDB4MDQsMHgwMCwweDg0LDB4YWMsMHgwMCwweDYwLDB4ODMsMHg0MCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGQwLDB4ZmYsMHhiZCwweDI3LDB4MjgsMHgwMCwweGI2LDB4YWYsMHgyNCwweDAwLDB4YjUsMHhhZiwKLTB4MjAsMHgwMCwweGI0LDB4YWYsMHgxNCwweDAwLDB4YjEsMHhhZiwweDJjLDB4MDAsMHhiZiwweGFmLDB4MWMsMHgwMCwweGIzLDB4YWYsCi0weDE4LDB4MDAsMHhiMiwweGFmLDB4MTAsMHgwMCwweGIwLDB4YWYsMHgwMCwweDgwLDB4MTYsMHgzYywweDAyLDB4ODAsMHgxNCwweDNjLAotMHgwMiwweDgwLDB4MTEsMHgzYywweDAyLDB4ODAsMHgxNSwweDNjLDB4YzQsMHg3ZCwweDI0LDB4OGUsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4NTQsMHgzNCwweGMzLDB4MjYsMHgxOCwweDAzLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0MywweGFjLDB4ZGMsMHg4YywweDkwLDB4OGUsCi0weDE4LDB4MDAsMHg4MCwweDEwLDB4ZGMsMHg4YywweDgyLDB4MjYsMHgxNSwweDAwLDB4MDIsMHgxMiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyMSwweDk4LDB4NDAsMHgwMCwweDAxLDB4MDAsMHgxMiwweDI0LDB4MTQsMHgwMCwweDAyLDB4OTIsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MWQsMHgwMCwweDUyLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA5LDB4MDAsMHg0MCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDBjLDB4MDAsMHgwMywweDhlLDB4YzQsMHg3ZCwweDIyLDB4OGUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIzLDB4MjAsMHg2MiwweDAwLAotMHgyYiwweDEwLDB4NDMsMHgwMCwweDBlLDB4MDAsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYywweDAwLDB4MDQsMHhhZSwKLTB4MDAsMHgwMCwweDEwLDB4OGUsMHgwMCwweDAwLDB4MDAsMHgwMCwweGVmLDB4ZmYsMHgxMywweDE2LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGM0LDB4N2QsMHgyMCwweGFlLDB4MDgsMHgwYywweGE0LDB4MjYsMHgyMSwweDI4LDB4MDAsMHgwMCwweDIxLDB4MzAsMHgwMCwweDAwLAotMHgzMSwweDFjLDB4MDAsMHgwYywweDIxLDB4MzgsMHgwMCwweDAwLDB4MjIsMHgwZCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweDAyLDB4OGUsMHgxOCwweDAwLDB4MDQsMHg4ZSwweDA5LDB4ZjgsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDNjLDB4MGQsMHgwMCwweDA4LDB4MGMsMHgwMCwweDAyLDB4YWUsMHgwYywweDAwLDB4MDMsMHg4ZSwweGM0LDB4N2QsMHgyMiwweDhlLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDIzLDB4MjAsMHg2MiwweDAwLDB4MmIsMHgxMCwweDQzLDB4MDAsMHhlNywweGZmLDB4NDAsMHgxNCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDIsMHg4ZSwweDE4LDB4MDAsMHgwNCwweDhlLDB4MDksMHhmOCwweDQwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwMCwweDAzLDB4OGUsMHgzYywweDBkLDB4MDAsMHgwOCwweDBjLDB4MDAsMHgwMywweGFlLAotMHhmZiwweDAwLDB4YTUsMHgzMCwweDI1LDB4YjAsMHgwMiwweDNjLDB4MjEsMHgyOCwweGEyLDB4MDAsMHhmZiwweDAwLDB4ODQsMHgzMCwKLTB4NjAsMHgwMSwweGE0LDB4YTAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHgwMCwweDg0LDB4MzAsCi0weDAxLDB4MDAsMHgwMywweDI0LDB4MTAsMHgwMCwweDAyLDB4M2MsMHgwNCwweDE4LDB4ODMsMHgwMCwweGYwLDB4NzAsMHg0MiwweDM0LAotMHgxNSwweDAwLDB4ODQsMHgyYywweDA2LDB4MDAsMHg4MCwweDEwLDB4MjQsMHgyOCwweDYyLDB4MDAsMHgwZiwweDAwLDB4NjMsMHgzMCwKLTB4MDQsMHgwMCwweGEwLDB4MTQsMHgwMSwweDAwLDB4MDIsMHgyNCwweDAyLDB4MDAsMHg2MCwweDE0LDB4MDIsMHgwMCwweDAyLDB4MjQsCi0weDIxLDB4MTAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MDAsMHhhNSwweDMwLAotMHgwNCwweDAwLDB4YTIsMHgyYywweDE0LDB4MDAsMHg0MCwweDEwLDB4ZmYsMHgwMCwweDg0LDB4MzAsMHgwMiwweDgwLDB4MDMsMHgzYywKLTB4OGUsMHg3ZCwweDYyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGVmLDB4ZmYsMHg0MiwweDI0LDB4ZmYsMHgwMCwweDQyLDB4MzAsCi0weDAyLDB4MDAsMHg0MiwweDJjLDB4MGUsMHgwMCwweDQwLDB4MTAsMHgwMiwweDAwLDB4MDMsMHgyNCwweDI0LDB4MDAsMHg4MywweDEwLAotMHgwZiwweDEwLDB4MDIsMHgzYywweDAzLDB4MDAsMHg4MiwweDI4LDB4MTQsMHgwMCwweDQwLDB4MTAsMHgwMywweDAwLDB4MDIsMHgyNCwKLTB4MDEsMHgwMCwweDAyLDB4MjQsMHgyZiwweDAwLDB4ODIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHgxZiwweDAyLDB4M2MsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4ZmYsMHhmZiwweDQyLDB4MzQsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgzNSwweDAwLDB4ODMsMHgxMCwweDBmLDB4MWYsMHgwMiwweDNjLDB4MDMsMHgwMCwweDgyLDB4MjgsMHgxNiwweDAwLDB4NDAsMHgxMCwKLTB4MDMsMHgwMCwweDAyLDB4MjQsMHgwMSwweDAwLDB4MDIsMHgyNCwweGY0LDB4ZmYsMHg4MiwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDBmLDB4MWYsMHgwMiwweDNjLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDgwLDB4NDIsMHgzNCwweGYwLDB4ZmYsMHg4MiwweDE0LAotMHhmZiwweDFmLDB4MDIsMHgzYywweDAxLDB4MDAsMHgwMiwweDI0LDB4MjksMHgwMCwweGEyLDB4MTAsMHgwZiwweDEwLDB4MDIsMHgzYywKLTB4MDIsMHgwMCwweGEyLDB4MjgsMHgxZiwweDAwLDB4NDAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwMCwweGEzLDB4MTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZTUsMHhmZiwweGE0LDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBmLDB4MTAsMHgwMiwweDNjLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4ZjAsMHg0MiwweDM0LDB4ZTEsMHhmZiwweDgyLDB4MTQsMHhmZiwweDFmLDB4MDIsMHgzYywKLTB4MDEsMHgwMCwweDAyLDB4MjQsMHgxYywweDAwLDB4YTIsMHgxMCwweDBmLDB4MDAsMHgwMiwweDNjLDB4MDIsMHgwMCwweGEyLDB4MjgsCi0weDBiLDB4MDAsMHg0MCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxYywweDAwLDB4YTMsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHhkNiwweGZmLDB4YTQsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYsMHgwMCwweDAyLDB4M2MsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MDAsMHhmMCwweDQyLDB4MzQsMHgwZiwweDEwLDB4MDIsMHgzYywweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHg4MCwweDQyLDB4MzQsCi0weGNlLDB4ZmYsMHhhMCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZiwweDAwLDB4MDIsMHgzYywweDA4LDB4MDAsMHhlMCwweDAzLAotMHgxNSwweGYwLDB4NDIsMHgzNCwweGM5LDB4ZmYsMHhhMCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZiwweDEwLDB4MDIsMHgzYywKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgxNSwweGYwLDB4NDIsMHgzNCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHhmMCwweDQyLDB4MzQsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MTAsMHhmMCwweDQyLDB4MzQsMHgwOCwweDAwLDB4ZTAsMHgwMywweDEwLDB4ZjAsMHg0MiwweDM0LAotMHgwZiwweDEwLDB4MDIsMHgzYywweDA4LDB4MDAsMHhlMCwweDAzLDB4MDUsMHhmMCwweDQyLDB4MzQsMHgwZiwweDAwLDB4MDIsMHgzYywKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwNSwweGYwLDB4NDIsMHgzNCwweGMwLDB4NDAsMHgwNCwweDAwLDB4MjEsMHgxOCwweDA0LDB4MDEsCi0weDgwLDB4MTgsMHgwMywweDAwLDB4MjEsMHgxOCwweDY0LDB4MDAsMHgwMiwweDgwLDB4MDIsMHgzYywweDgwLDB4MTgsMHgwMywweDAwLAotMHg2OCwweDE1LDB4NDIsMHgyNCwweDIxLDB4MTgsMHg2MiwweDAwLDB4NzQsMHg1MSwweDY2LDB4OGMsMHgyMSwweDM4LDB4NjAsMHgwMCwKLTB4N2EsMHg1MSwweDYwLDB4YTAsMHg3YiwweDUxLDB4NjAsMHhhMCwweDFjLDB4MDAsMHgwNSwweDI0LDB4ZGYsMHgwZCwweDAwLDB4MDgsCi0weDAxLDB4MDAsMHgwMywweDI0LDB4MDgsMHgwMCwweGEwLDB4MDQsMHgyMSwweDEwLDB4MDQsMHgwMSwweDA0LDB4MTAsMHhhMywweDAwLAotMHgyNCwweDEwLDB4YzIsMHgwMCwweGZiLDB4ZmYsMHg0MCwweDEwLDB4ZmYsMHhmZiwweGE1LDB4MjQsMHgwMSwweDAwLDB4YTUsMHgyNCwKLTB4N2EsMHg1MSwweGU1LDB4YTAsMHgyMSwweDEwLDB4MDQsMHgwMSwweDgwLDB4MTAsMHgwMiwweDAwLDB4MjEsMHgxMCwweDQ0LDB4MDAsCi0weDAyLDB4ODAsMHgwMywweDNjLDB4ODAsMHgxMCwweDAyLDB4MDAsMHg2OCwweDE1LDB4NjMsMHgyNCwweDIxLDB4MTgsMHg0MywweDAwLAotMHg3NCwweDUxLDB4NjYsMHg4YywweDIxLDB4MjgsMHgwMCwweDAwLDB4ZjMsMHgwZCwweDAwLDB4MDgsMHgwMSwweDAwLDB4MDcsMHgyNCwKLTB4MWQsMHgwMCwweGEyLDB4MjgsMHgwOCwweDAwLDB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgxMCwweGE3LDB4MDAsCi0weDI0LDB4MTAsMHhjMiwweDAwLDB4ZmEsMHhmZiwweDQwLDB4MTAsMHgwMSwweDAwLDB4YTUsMHgyNCwweGZmLDB4ZmYsMHhhNSwweDI0LAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDdiLDB4NTEsMHg2NSwweGEwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4YzgsMHhmZiwweGJkLDB4MjcsMHgyOCwweDAwLDB4YjYsMHhhZiwweDAyLDB4ODAsMHgxNiwweDNjLDB4MzAsMHgwMCwweGJlLDB4YWYsCi0weDJjLDB4MDAsMHhiNywweGFmLDB4MjQsMHgwMCwweGI1LDB4YWYsMHgyMCwweDAwLDB4YjQsMHhhZiwweDE4LDB4MDAsMHhiMiwweGFmLAotMHgxNCwweDAwLDB4YjEsMHhhZiwweDAxLDB4MDAsMHgxNSwweDI0LDB4MjEsMHg4OCwweDAwLDB4MDAsMHg2OCwweDE1LDB4ZGUsMHgyNiwKLTB4MjEsMHhhMCwweDAwLDB4MDAsMHgyMSwweDkwLDB4MDAsMHgwMCwweDI1LDB4YjAsMHgxNywweDNjLDB4MzQsMHgwMCwweGJmLDB4YWYsCi0weDFjLDB4MDAsMHhiMywweGFmLDB4MTQsMHgwZSwweDAwLDB4MDgsMHgxMCwweDAwLDB4YjAsMHhhZiwweDAxLDB4MDAsMHgzMSwweDI2LAotMHgyMCwweDAwLDB4MjIsMHgyZSwweDk0LDB4MDAsMHg1MiwweDI2LDB4MmUsMHgwMCwweDQwLDB4MTAsMHg5NCwweDAwLDB4OTQsMHgyNiwKLTB4NjgsMHgxNSwweGMyLDB4MjYsMHgyMSwweDMwLDB4NDIsMHgwMiwweDc4LDB4NTEsMHhjNSwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAyLDB4MTMsMHgwNSwweDAwLDB4MDEsMHgwMCwweDQyLDB4MzAsMHhmNCwweGZmLDB4NTUsMHgxNCwweDQyLDB4MWEsMHgwNSwweDAwLAotMHg2OCwweDUxLDB4YzIsMHg4YywweDA3LDB4MDAsMHg2NCwweDMwLDB4MDIsMHgxMSwweDAyLDB4MDAsMHg3ZiwweDAwLDB4NDMsMHgzMCwKLTB4MmQsMHgwMCwweDk1LDB4MTAsMHgwNywweDAwLDB4YjMsMHgzMCwweDAyLDB4MDAsMHg4MiwweDI4LDB4M2EsMHgwMCwweDQwLDB4MTQsCi0weDAyLDB4MDAsMHgwMiwweDI0LDB4MzAsMHgwMCwweDgyLDB4MTAsMHgwMywweDAwLDB4MDIsMHgyNCwweDNjLDB4MDAsMHg4MiwweDEwLAotMHgxYSwweDAwLDB4NjIsMHgyYywweDIxLDB4ODAsMHg5ZSwweDAyLDB4NzgsMHg1MSwweDAyLDB4OGUsMHgwNCwweDAwLDB4NjMsMHgyZSwKLTB4NDIsMHgxMiwweDAyLDB4MDAsMHgwYSwweDAwLDB4NjAsMHgxMCwweDA3LDB4MDAsMHg0NCwweDMwLDB4NzMsMHgwZCwweDAwLDB4MGMsCi0weDIxLDB4MjgsMHg2MCwweDAyLDB4ODAsMHgyMCwweDEzLDB4MDAsMHg3MCwweDUxLDB4MDIsMHhhZSwweDIxLDB4MjAsMHg5NywweDAwLAotMHg4NCwweDAxLDB4ODMsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgxOCwweDYyLDB4MDAsMHg3NCwweDUxLDB4MDMsMHhhZSwKLTB4Y2UsMHgwZCwweDAwLDB4MGMsMHgyMSwweDIwLDB4MjAsMHgwMiwweDIxLDB4MTAsMHgzNywweDAyLDB4MDEsMHgwMCwweDMxLDB4MjYsCi0weDYwLDB4MDEsMHg0MywweDkwLDB4MjAsMHgwMCwweDIyLDB4MmUsMHg5NCwweDAwLDB4NTIsMHgyNiwweGQ0LDB4ZmYsMHg0MCwweDE0LAotMHg5NCwweDAwLDB4OTQsMHgyNiwweDM0LDB4MDAsMHhiZiwweDhmLDB4MzAsMHgwMCwweGJlLDB4OGYsMHgyYywweDAwLDB4YjcsMHg4ZiwKLTB4MjgsMHgwMCwweGI2LDB4OGYsMHgyNCwweDAwLDB4YjUsMHg4ZiwweDIwLDB4MDAsMHhiNCwweDhmLDB4MWMsMHgwMCwweGIzLDB4OGYsCi0weDE4LDB4MDAsMHhiMiwweDhmLDB4MTQsMHgwMCwweGIxLDB4OGYsMHgxMCwweDAwLDB4YjAsMHg4ZiwweDIxLDB4MTAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDM4LDB4MDAsMHhiZCwweDI3LDB4MzIsMHgwMCwweDYyLDB4MmMsMHhkYSwweGZmLDB4NDAsMHgxMCwKLTB4MjEsMHg4MCwweDllLDB4MDIsMHhmZiwweGYxLDB4MDMsMHgyNCwweDI0LDB4MTAsMHhhMywweDAwLDB4MDAsMHgwNCwweDQyLDB4MzQsCi0weDI5LDB4MGUsMHgwMCwweDA4LDB4NzgsMHg1MSwweGMyLDB4YWMsMHgzOCwweDAwLDB4NjIsMHgyYywweDEyLDB4MDAsMHg0MCwweDE0LAotMHgxNCwweDAwLDB4NjIsMHgyYywweGZmLDB4ZjEsMHgwMywweDI0LDB4MjQsMHgxMCwweGEzLDB4MDAsMHgwMCwweDAyLDB4NDIsMHgzNCwKLTB4MjksMHgwZSwweDAwLDB4MDgsMHg3OCwweDUxLDB4YzIsMHhhYywweGNiLDB4ZmYsMHg4MCwweDE0LDB4MjEsMHg4MCwweDllLDB4MDIsCi0weGZmLDB4ZjEsMHgwMywweDI0LDB4MjQsMHgxMCwweGEzLDB4MDAsMHgyYSwweDBlLDB4MDAsMHgwOCwweDc4LDB4NTEsMHhjMiwweGFjLAotMHhjNSwweGZmLDB4NDAsMHgxNCwweDIxLDB4ODAsMHg5ZSwweDAyLDB4ZmYsMHhmMSwweDAzLDB4MjQsMHgyNCwweDEwLDB4YTMsMHgwMCwKLTB4NTQsMHgwZSwweDAwLDB4MDgsMHgwMCwweDA0LDB4NDIsMHgzNCwweGJmLDB4ZmYsMHg0MCwweDEwLDB4MjEsMHg4MCwweDllLDB4MDIsCi0weGZmLDB4ZjEsMHgwMywweDI0LDB4MjQsMHgxMCwweGEzLDB4MDAsMHgwMCwweDA2LDB4NDIsMHgzNCwweDJhLDB4MGUsMHgwMCwweDA4LAotMHg3OCwweDUxLDB4YzIsMHhhYywweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhkOCwweGZmLDB4YmQsMHgyNywKLTB4MTAsMHgwMCwweGIwLDB4YWYsMHhjMCwweDgwLDB4MDQsMHgwMCwweDIxLDB4ODAsMHgwNCwweDAyLDB4ODAsMHg4MCwweDEwLDB4MDAsCi0weDIxLDB4ODAsMHgwNCwweDAyLDB4MDIsMHg4MCwweDAyLDB4M2MsMHg2OCwweDE1LDB4NDIsMHgyNCwweDgwLDB4ODAsMHgxMCwweDAwLAotMHgyMCwweDAwLDB4YmYsMHhhZiwweDFjLDB4MDAsMHhiMywweGFmLDB4MTgsMHgwMCwweGIyLDB4YWYsMHgyMSwweDgwLDB4MDIsMHgwMiwKLTB4MTQsMHgwMCwweGIxLDB4YWYsMHg3OCwweDUxLDB4MDMsMHg4ZSwweDI1LDB4YjAsMHgwMiwweDNjLDB4ODAsMHgwMSwweDUzLDB4MzQsCi0weDA3LDB4MDAsMHg2MywweDMwLDB4ODAsMHgxOCwweDAzLDB4MDAsMHgyMSwweDE4LDB4NjIsMHgwMCwweDAwLDB4MDAsMHg3MSwweDkyLAotMHg3MCwweDUxLDB4MDUsMHg4ZSwweDg0LDB4MDEsMHg2MiwweDhjLDB4MjEsMHg5MCwweDgwLDB4MDAsMHhmZiwweDAwLDB4MzEsMHgzMiwKLTB4MjQsMHgxMCwweDQ1LDB4MDAsMHhjZSwweDBkLDB4MDAsMHgwYywweDc0LDB4NTEsMHgwMiwweGFlLDB4N2EsMHg1MSwweDA0LDB4OTIsCi0weDVjLDB4MGQsMHgwMCwweDBjLDB4ZmYsMHgwMCwweDQ1LDB4MzIsMHg3YSwweDUxLDB4MDQsMHg5MiwweDYzLDB4MGQsMHgwMCwweDBjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg0MiwweDM4LDB4MDQsMHgwMCwweDAzLDB4MjQsMHgwYSwweDg4LDB4NjIsMHgwMCwKLTB4MDAsMHgwMCwweDcxLDB4YTIsMHgyMCwweDAwLDB4YmYsMHg4ZiwweDFjLDB4MDAsMHhiMywweDhmLDB4MTgsMHgwMCwweGIyLDB4OGYsCi0weDE0LDB4MDAsMHhiMSwweDhmLDB4MTAsMHgwMCwweGIwLDB4OGYsMHgwOCwweDAwLDB4ZTAsMHgwMywweDI4LDB4MDAsMHhiZCwweDI3LAotMHhmZiwweGZmLDB4ODQsMHgzMCwweDAwLDB4MDIsMHg4MiwweDMwLDB4MDcsMHgwMCwweDAzLDB4MjQsMHgwZCwweDAwLDB4NDAsMHgxNCwKLTB4MGIsMHgwMCwweDg0LDB4MzAsMHgwYywweDAwLDB4ODIsMHgyYywweDBhLDB4MDAsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAyLDB4ODAsMHgwMywweDNjLDB4ODAsMHgxMCwweDA0LDB4MDAsMHhmMCwweDkxLDB4NjMsMHgyNCwweDIxLDB4MTAsMHg0MywweDAwLAotMHgwMCwweDAwLDB4NDQsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDcsMHgwMCwweDAzLDB4MjQsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHg2MCwweDAwLDB4MDYsMHgwMCwweDAzLDB4MjQsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDYwLDB4MDAsMHgwNSwweDAwLDB4MDMsMHgyNCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgyMSwweDEwLDB4NjAsMHgwMCwweDA0LDB4MDAsMHgwMywweDI0LDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4NjAsMHgwMCwKLTB4MDMsMHgwMCwweDAzLDB4MjQsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHg2MCwweDAwLDB4MDIsMHgwMCwweDAzLDB4MjQsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDYwLDB4MDAsMHgwMSwweDAwLDB4MDMsMHgyNCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgyMSwweDEwLDB4NjAsMHgwMCwweDIxLDB4MTgsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4NjAsMHgwMCwKLTB4YTAsMHhmZiwweGJkLDB4MjcsMHgwMiwweDgwLDB4MDIsMHgzYywweDU4LDB4MDAsMHhiZSwweGFmLDB4NTQsMHgwMCwweGI3LDB4YWYsCi0weDUwLDB4MDAsMHhiNiwweGFmLDB4NGMsMHgwMCwweGI1LDB4YWYsMHg0OCwweDAwLDB4YjQsMHhhZiwweDQwLDB4MDAsMHhiMiwweGFmLAotMHgzYywweDAwLDB4YjEsMHhhZiwweDVjLDB4MDAsMHhiZiwweGFmLDB4NDQsMHgwMCwweGIzLDB4YWYsMHgzOCwweDAwLDB4YjAsMHhhZiwKLTB4MjAsMHg5MiwweDQyLDB4MjQsMHgwMCwweDAwLDB4NTMsMHg4YywweDA4LDB4MDAsMHgwMywweDI0LDB4MDIsMHg4MCwweDBiLDB4M2MsCi0weDIxLDB4OTAsMHgwMCwweDAwLDB4MjEsMHhhMCwweDAwLDB4MDAsMHgyMSwweGI4LDB4MDAsMHgwMCwweDIxLDB4ZjAsMHgwMCwweDAwLAotMHgyMSwweGE4LDB4MDAsMHgwMCwweDIxLDB4YjAsMHgwMCwweDAwLDB4MjEsMHg4OCwweDYwLDB4MDIsMHgxMCwweDAwLDB4YTMsMHhhZiwKLTB4MTQsMHgwMCwweGEwLDB4YWYsMHgxOCwweDAwLDB4YTAsMHhhZiwweDFjLDB4MDAsMHhhMCwweGFmLDB4MjAsMHgwMCwweGEwLDB4YWYsCi0weDI0LDB4MDAsMHhhMCwweGFmLDB4MjgsMHgwMCwweGEwLDB4YWYsMHg3YSwweDBmLDB4MDAsMHgwOCwweDJjLDB4MDAsMHhhMCwweGFmLAotMHg0NCwweDUxLDB4MjIsMHhhZSwweDYwLDB4NTEsMHgyNCwweDhlLDB4NWMsMHg1MSwweDI3LDB4OGUsMHg0OCwweDUxLDB4MjgsMHg4ZSwKLTB4NGMsMHg1MSwweDI1LDB4OGUsMHg1NCwweDUxLDB4MjYsMHg4ZSwweDU4LDB4NTEsMHgyMywweDhlLDB4MjEsMHgzOCwweGU0LDB4MDAsCi0weDAyLDB4ODAsMHgwNCwweDNjLDB4NjgsMHgxNSwweDg0LDB4MjQsMHgyMSwweDEwLDB4MDQsMHgwMiwweDIxLDB4NDAsMHgwNSwweDAxLAotMHgyMSwweDMwLDB4YzMsMHgwMCwweGNhLDB4NDQsMHg0MiwweDkwLDB4NDQsMHg1MSwweDJhLDB4OGUsMHgwYywweDAwLDB4ZTAsMHgxMCwKLTB4MjEsMHg0OCwweDAwLDB4MDAsMHgyYiwweDQ4LDB4NDcsMHgwMCwweDBiLDB4MDAsMHgyMCwweDE1LDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weDA3LDB4MDAsMHgwMiwweDJlLDB4NTksMHgwMSwweDQwLDB4MTQsMHhjMCwweDEwLDB4MDcsMHgwMCwweDBjLDB4MDAsMHgwMiwweDI0LAotMHg1NSwweDAxLDB4MDIsMHgxMiwweDBkLDB4MDAsMHgwMiwweDI0LDB4NTQsMHgwMSwweDAyLDB4MTIsMHhjMCwweDEwLDB4MDcsMHgwMCwKLTB4OTIsMHgwMCwweDIwLDB4MTEsMHgwMiwweDgwLDB4MDIsMHgzYywweDY4LDB4MTUsMHg0MiwweDI0LDB4ODAsMHgxOCwweDEwLDB4MDAsCi0weDIxLDB4MTgsMHg2MiwweDAwLDB4MjEsMHgyMCwweDMwLDB4MDIsMHhiNiwweDUxLDB4ODUsMHg5MCwweGVjLDB4NDQsMHg2MiwweDhjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MTAsMHhhMiwweDAwLDB4MmIsMHgxMCwweDRhLDB4MDAsMHg4NywweDAwLDB4NDAsMHgxMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhkNCwweDUxLDB4MjIsMHg4ZSwweDAxLDB4MDAsMHgwNywweDI0LDB4MDQsMHgxOCwweDA3LDB4MDIsCi0weDI0LDB4MTAsMHg0MywweDAwLDB4ZjAsMHgwMCwweDQwLDB4MTAsMHgxYywweDAwLDB4MDIsMHgyZSwweDIxLDB4MjgsMHgzMCwweDAyLAotMHg3YywweDUxLDB4YTYsMHg5MCwweGI2LDB4NTEsMHhhMiwweDkwLDB4MGEsMHgwMCwweDA0LDB4MjQsMHhmZiwweDAwLDB4YzMsMHgzMCwKLTB4MDQsMHgyMCwweDQ0LDB4MDAsMHgyYSwweDE4LDB4NjQsMHgwMCwweGU3LDB4MDAsMHg2MCwweDEwLDB4MWMsMHgwMCwweDAyLDB4MmUsCi0weDAxLDB4MDAsMHhjMiwweDI0LDB4ZmYsMHgwMCwweDQzLDB4MzAsMHg1NiwweDAxLDB4NjQsMHgxMCwweDdjLDB4NTEsMHhhMiwweGEwLAotMHg2OCwweDE1LDB4NjUsMHgyNSwweDgwLDB4MTAsMHgxMCwweDAwLDB4MjEsMHgxMCwweDQ1LDB4MDAsMHg2MCwweDQ1LDB4NDQsMHg4YywKLTB4ZWMsMHg0NCwweDQzLDB4OGMsMHgyMSwweDMwLDB4YzUsMHgwMiwweDQwLDB4MTAsMHgwNCwweDAwLDB4MjEsMHgxMCwweDQ0LDB4MDAsCi0weDIxLDB4MTgsMHg2MiwweDAwLDB4ODIsMHg1MCwweDAzLDB4MDAsMHg0NCwweDUxLDB4Y2EsMHhhYywweDhjLDB4NjUsMHhhMywweDhjLAotMHhmZiwweGZmLDB4MDIsMHgzNCwweDA3LDB4MDAsMHg2MiwweDEwLDB4MjEsMHgyMCwweDAwLDB4MDIsMHgyMSwweDIwLDB4MDAsMHgwMiwKLTB4ZmYsMHgwMCwweDQ1LDB4MzIsMHg1YywweDBkLDB4MDAsMHgwYywweDMwLDB4MDAsMHhhYiwweGFmLDB4MzAsMHgwMCwweGFiLDB4OGYsCi0weDIxLDB4MjAsMHgwMCwweDAyLDB4NjMsMHgwZCwweDAwLDB4MGMsMHgzMCwweDAwLDB4YWIsMHhhZiwweDEwLDB4MDAsMHhhNCwweDhmLAotMHgwMSwweDAwLDB4NDIsMHgzOCwweDA0LDB4MDAsMHgwMywweDI0LDB4MGEsMHgyMCwweDYyLDB4MDAsMHgxMCwweDAwLDB4YTQsMHhhZiwKLTB4MzAsMHgwMCwweGFiLDB4OGYsMHgxMSwweDAwLDB4NDAsMHgxNiwweDY4LDB4MTUsMHg2MiwweDI1LDB4NTgsMHg1MSwweDQ3LDB4OGMsCi0weDU0LDB4NTEsMHg0MywweDhjLDB4NGMsMHg1MSwweDQ0LDB4OTQsMHg0OCwweDUxLDB4NDUsMHg5NCwweDUwLDB4NTEsMHg0NiwweDk0LAotMHgyMSwweDE4LDB4NjcsMHgwMCwweDAwLDB4MjQsMHgwNCwweDAwLDB4MjUsMHhiMCwweDAyLDB4M2MsMHgwMCwweDFjLDB4MDMsMHgwMCwKLTB4MjEsMHgyOCwweGE0LDB4MDAsMHgyMSwweDMwLDB4YzMsMHgwMCwweDZjLDB4MGMsMHg0NCwweDM0LDB4NjgsMHgwYywweDQyLDB4MzQsCi0weDAwLDB4MDAsMHg0NSwweGFjLDB4MDAsMHgwMCwweDg2LDB4YWMsMHg2OCwweDE1LDB4NjIsMHgyNSwweDIxLDB4MTAsMHg4MiwweDAyLAotMHg1OCwweDUxLDB4NDAsMHhhYywweDVjLDB4NTEsMHg0MCwweGFjLDB4NjAsMHg1MSwweDQwLDB4YWMsMHg0OCwweDUxLDB4NDAsMHhhYywKLTB4NGMsMHg1MSwweDQwLDB4YWMsMHg1MCwweDUxLDB4NDAsMHhhYywweDU0LDB4NTEsMHg0MCwweGFjLDB4MmMsMHgwMCwweGEyLDB4OGYsCi0weDI4LDB4MDAsMHhhNCwweDhmLDB4MDEsMHgwMCwweDUyLDB4MjYsMHg5NCwweDAwLDB4NDIsMHgyNCwweDJjLDB4MDAsMHhhMiwweGFmLAotMHgyNCwweDAwLDB4YTIsMHg4ZiwweDk0LDB4MDAsMHg4NCwweDI0LDB4MjgsMHgwMCwweGE0LDB4YWYsMHg5NCwweDAwLDB4NDIsMHgyNCwKLTB4MjAsMHgwMCwweGE0LDB4OGYsMHgyNCwweDAwLDB4YTIsMHhhZiwweDFjLDB4MDAsMHhhMiwweDhmLDB4OTQsMHgwMCwweDg0LDB4MjQsCi0weDIwLDB4MDAsMHhhNCwweGFmLDB4OTQsMHgwMCwweDQyLDB4MjQsMHgxOCwweDAwLDB4YTQsMHg4ZiwweDFjLDB4MDAsMHhhMiwweGFmLAotMHgxNCwweDAwLDB4YTIsMHg4ZiwweDk0LDB4MDAsMHg4NCwweDI0LDB4MjAsMHgwMCwweDQzLDB4MmEsMHg5NCwweDAwLDB4NDIsMHgyNCwKLTB4OTQsMHgwMCwweDMxLDB4MjYsMHg5NCwweDAwLDB4ZDYsMHgyNiwweDk0LDB4MDAsMHhiNSwweDI2LDB4MTgsMHgwMCwweGE0LDB4YWYsCi0weDE0LDB4MDAsMHhhMiwweGFmLDB4OTQsMHgwMCwweGRlLDB4MjcsMHg5NCwweDAwLDB4NzMsMHgyNiwweDk0LDB4MDAsMHhmNywweDI2LAotMHhlNSwweDAwLDB4NjAsMHgxMCwweDk0LDB4MDAsMHg5NCwweDI2LDB4NzgsMHg1MSwweDIyLDB4OGUsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDIsMHgxMywweDAyLDB4MDAsMHgwMSwweDAwLDB4NDIsMHgzMCwweGQzLDB4ZmYsMHg0MCwweDEwLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weDIxLDB4MTAsMHg0MiwweDAyLDB4NjAsMHgwMSwweDQ0LDB4OTAsMHg2MCwweDUxLDB4MjMsMHg4ZSwweDVjLDB4NTEsMHgyNiwweDhlLAotMHhmZiwweDAwLDB4OTAsMHgzMCwweDAyLDB4ODAsMHgwNCwweDNjLDB4NjgsMHgxNSwweDg0LDB4MjQsMHgyMSwweDEwLDB4MDQsMHgwMiwKLTB4NzMsMHg0NCwweDQ0LDB4OTAsMHg1NiwweDQ0LDB4NDUsMHg5MCwweDQ0LDB4NTEsMHgyNywweDhlLDB4MTgsMHgwMCwweDY0LDB4MDAsCi0weDEyLDB4MTgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDAsMHhjNSwweDAwLAotMHgxMiwweDMwLDB4MDAsMHgwMCwweDIxLDB4MzAsMHhjMywweDAwLDB4MmIsMHgxMCwweGU2LDB4MDAsMHg1NCwweGZmLDB4NDAsMHgxMCwKLTB4MjMsMHgxMCwweGU2LDB4MDAsMHhlOSwweDBlLDB4MDAsMHgwOCwweDQ0LDB4NTEsMHgyMCwweGFlLDB4NjIsMHgwMCwweGUwLDB4MTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4NjMsMHgwMCwweDIwLDB4MTUsMHg2OCwweDE1LDB4NjIsMHgyNSwweDQwLDB4MTAsMHgwNywweDAwLAotMHgyMSwweDEwLDB4NDcsMHgwMCwweDgyLDB4MTAsMHgwMiwweDAwLDB4MmIsMHgxMCwweDQ2LDB4MDAsMHg5OSwweGZmLDB4NDAsMHgxMCwKLTB4MjEsMHgyMCwweDAwLDB4MDIsMHg2OCwweDE1LDB4NjgsMHgyNSwweDIxLDB4MjAsMHhhOCwweDAyLDB4MjEsMHgzMCwweDkwLDB4MDAsCi0weGQ0LDB4NTEsMHg4MywweDhjLDB4MDEsMHgwMCwweDA1LDB4MjQsMHgwNCwweDEwLDB4MDUsMHgwMiwweDk5LDB4NTEsMHhjNywweDkwLAotMHgyNywweDEwLDB4MDIsMHgwMCwweDI0LDB4MTgsMHg2MiwweDAwLDB4ZDQsMHg1MSwweDgzLDB4YWMsMHgwOSwweDAwLDB4ZTUsMHgxMCwKLTB4N2MsMHg1MSwweGMwLDB4YTAsMHgxOCwweDAwLDB4YTIsMHg4ZiwweDIxLDB4MzgsMHgwMCwweDAwLDB4MjEsMHgyMCwweDQ4LDB4MDAsCi0weDIxLDB4MTgsMHg4NywweDAwLDB4MDEsMHgwMCwweGU3LDB4MjQsMHgxZCwweDAwLDB4ZTIsMHgyOCwweGZjLDB4ZmYsMHg0MCwweDE0LAotMHhiNiwweDUxLDB4NjAsMHhhMCwweDE0LDB4MDAsMHhhNCwweDhmLDB4NjgsMHgxNSwweDYzLDB4MjUsMHgyMSwweDUwLDB4NjAsMHgwMCwKLTB4MjEsMHgxMCwweDgzLDB4MDAsMHgyMSwweDEwLDB4NTAsMHgwMCwweDk5LDB4NTEsMHg0MCwweGEwLDB4MDIsMHg4MCwweDAzLDB4M2MsCi0weDAyLDB4ODAsMHgwMiwweDNjLDB4NGMsMHg5MSwweDQ5LDB4MjQsMHhkOCwweDkwLDB4NjgsMHgyNCwweDIxLDB4MzgsMHgwMCwweDAwLAotMHg4MCwweDE4LDB4MDcsMHgwMCwweDIxLDB4MTAsMHg2OSwweDAwLDB4MjEsMHgyMCwweDY4LDB4MDAsMHgwMCwweDAwLDB4NDYsMHg4YywKLTB4MDAsMHgwMCwweDg1LDB4OGMsMHgwMSwweDAwLDB4ZTcsMHgyNCwweDIxLDB4MTgsMHg2YSwweDAwLDB4MWQsMHgwMCwweGUyLDB4MjgsCi0weGVjLDB4NDQsMHg2NSwweGFjLDB4ZjYsMHhmZiwweDQwLDB4MTQsMHg2MCwweDQ1LDB4NjYsMHhhYywweDE0LDB4MDAsMHgwMCwweDEyLAotMHg2OCwweDE1LDB4NjMsMHgyNSwweDdiLDB4NTEsMHg2MiwweDkyLDB4ZmYsMHhmZiwweDA3LDB4MjYsMHgyYSwweDEwLDB4ZTIsMHgwMCwKLTB4MGUsMHgwMCwweDQwLDB4MTQsMHgwMiwweDgwLDB4MGIsMHgzYywweDY4LDB4MTUsMHg2MiwweDI1LDB4MjEsMHgxMCwweGMyLDB4MDMsCi0weDdiLDB4NTEsMHg0NSwweDkwLDB4NzQsMHg1MSwweDQ0LDB4OGMsMHgwMSwweDAwLDB4MDYsMHgyNCwweDA0LDB4MTgsMHhlNiwweDAwLAotMHgyNCwweDEwLDB4ODMsMHgwMCwweGIzLDB4MDAsMHg0MywweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweGZmLDB4ZTcsMHgyNCwKLTB4MmEsMHgxMCwweGU1LDB4MDAsMHhmYSwweGZmLDB4NDAsMHgxMCwweDA0LDB4MTgsMHhlNiwweDAwLDB4NjgsMHgxNSwweDYzLDB4MjUsCi0weDgwLDB4MTAsMHgxMCwweDAwLDB4MjEsMHgxMCwweDQzLDB4MDAsMHg2MCwweDQ1LDB4NDUsMHg4YywweGVjLDB4NDQsMHg0NCwweDhjLAotMHgwMiwweDgwLDB4MDMsMHgzYywweDQwLDB4MTAsMHgwNSwweDAwLDB4OGUsMHg3ZCwweDY2LDB4OTAsMHgyMSwweDEwLDB4NDUsMHgwMCwKLTB4MjEsMHgyMCwweDgyLDB4MDAsMHgyMiwweDAwLDB4MDIsMHgyNCwweDk4LDB4MDAsMHhjMiwweDEwLDB4ODIsMHg1MCwweDA0LDB4MDAsCi0weGQ0LDB4NTEsMHg2MywweDhlLDB4MDEsMHgwMCwweDAyLDB4MjQsMHgwNCwweDEwLDB4MDIsMHgwMiwweDI1LDB4MTgsMHg2MiwweDAwLAotMHhkNCwweDUxLDB4NjMsMHhhZSwweDY4LDB4MTUsMHg2MywweDI1LDB4MjEsMHgxMCwweGUzLDB4MDIsMHg0NCwweDUxLDB4NGEsMHhhYywKLTB4OGMsMHg2NSwweDY0LDB4OGMsMHhmZiwweGZmLDB4MDIsMHgzNCwweDNjLDB4ZmYsMHg4MiwweDE0LDB4MjEsMHgyMCwweDAwLDB4MDIsCi0weDM5LDB4MGYsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZSwweGZmLDB4MjAsMHgxMSwweDIxLDB4MjAsMHgwMCwweDAyLAotMHg2OCwweDE1LDB4NjIsMHgyNSwweDgwLDB4MTgsMHgxMCwweDAwLDB4MjEsMHgxOCwweDYyLDB4MDAsMHg2MCwweDQ1LDB4NjQsMHg4YywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyYiwweDIwLDB4NDQsMHgwMSwweDM2LDB4ZmYsMHg4MCwweDEwLDB4MjEsMHgyMCwweDAwLDB4MDIsCi0weGEyLDB4MGYsMHgwMCwweDA4LDB4NjgsMHgxNSwweDY4LDB4MjUsMHgxZSwweGZmLDB4NDAsMHgxMCwweDY4LDB4MTUsMHg2NSwweDI1LAotMHgyMSwweDIwLDB4MzAsMHgwMiwweDk5LDB4NTEsMHg4MywweDkwLDB4MDEsMHgwMCwweDAyLDB4MjQsMHg2MywweDAwLDB4NjIsMHgxMCwKLTB4MDIsMHg4MCwweDAyLDB4M2MsMHgyYywweDAwLDB4YTMsMHg4ZiwweDY4LDB4MTUsMHg0MiwweDI0LDB4MjEsMHgzOCwweDAwLDB4MDAsCi0weDIxLDB4MjAsMHg2MiwweDAwLDB4MjEsMHgxOCwweDg3LDB4MDAsMHgwMSwweDAwLDB4ZTcsMHgyNCwweDFkLDB4MDAsMHhlMiwweDI4LAotMHhmYywweGZmLDB4NDAsMHgxNCwweGI2LDB4NTEsMHg2MCwweGEwLDB4MjgsMHgwMCwweGEzLDB4OGYsMHgwMiwweDgwLDB4MGIsMHgzYywKLTB4NjgsMHgxNSwweDY1LDB4MjUsMHgyMSwweDMwLDB4NjUsMHgwMCwweGQ0LDB4NTEsMHhjMiwweDhjLDB4MDEsMHgwMCwweDAzLDB4MjQsCi0weDA0LDB4MTgsMHgwMywweDAyLDB4MjcsMHgxOCwweDAzLDB4MDAsMHgyMSwweDIwLDB4ZDAsMHgwMCwweDI0LDB4MTAsMHg0MywweDAwLAotMHg5OSwweDUxLDB4ODAsMHhhMCwweGQ0LDB4NTEsMHhjMiwweGFjLDB4MTIsMHgwMCwweDAwLDB4MTYsMHg3YywweDUxLDB4ODAsMHhhMCwKLTB4N2EsMHg1MSwweGMyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBlLDB4MDAsMHg0MCwweDEwLDB4MDEsMHgwMCwweDA3LDB4MjQsCi0weDI0LDB4MDAsMHhhNCwweDhmLDB4MDEsMHgwMCwweDA2LDB4MjQsMHgyMSwweDEwLDB4ODUsMHgwMCwweDdhLDB4NTEsMHg0NCwweDkwLAotMHg3NCwweDUxLDB4NDUsMHg4YywweDA0LDB4MTgsMHhlNiwweDAwLDB4MjQsMHgxMCwweGEzLDB4MDAsMHg1YiwweDAwLDB4NDMsMHgxMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4ZTcsMHgyNCwweDJhLDB4MTAsMHg4NywweDAwLDB4ZmEsMHhmZiwweDQwLDB4MTAsCi0weDA0LDB4MTgsMHhlNiwweDAwLDB4MjAsMHgwMCwweGEyLDB4OGYsMHgwMiwweDgwLDB4MGIsMHgzYywweDY4LDB4MTUsMHg2NCwweDI1LAotMHgyMSwweDE4LDB4NDQsMHgwMCwweDdhLDB4NTEsMHg2MiwweDkwLDB4MDEsMHgwMCwweDA3LDB4MjYsMHgyYSwweDEwLDB4NDcsMHgwMCwKLTB4MGUsMHgwMCwweDQwLDB4MTQsMHgwMSwweDAwLDB4MDYsMHgyNCwweDFjLDB4MDAsMHhhMywweDhmLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDIxLDB4MTAsMHg2NCwweDAwLDB4N2EsMHg1MSwweDQ1LDB4OTAsMHg3NCwweDUxLDB4NDQsMHg4YywweDA0LDB4MTgsMHhlNiwweDAwLAotMHgyNCwweDEwLDB4ODMsMHgwMCwweDQyLDB4MDAsMHg0MywweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4ZTcsMHgyNCwKLTB4MmEsMHgxMCwweGE3LDB4MDAsMHhmYSwweGZmLDB4NDAsMHgxMCwweDA0LDB4MTgsMHhlNiwweDAwLDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weDhlLDB4N2QsMHg0NCwweDkwLDB4MjIsMHgwMCwweDAzLDB4MjQsMHhkNiwweGZlLDB4ODMsMHgxNCwweDY4LDB4MTUsMHg2NSwweDI1LAotMHhlZSwweGZmLDB4MDIsMHgyNiwweGZmLDB4MDAsMHg0MiwweDMwLDB4MDIsMHgwMCwweDQyLDB4MmMsMHgxOCwweDAwLDB4MDMsMHgyNCwKLTB4MjUsMHgwZiwweDAwLDB4MDgsMHgwYiwweDgwLDB4NjIsMHgwMCwweGMwLDB4MTAsMHgwNywweDAwLDB4MjMsMHgxMCwweDQ3LDB4MDAsCi0weGMyLDB4MTAsMHgwMiwweDAwLDB4MmIsMHgxMCwweDQ4LDB4MDAsMHhiNiwweGZlLDB4NDAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwNCwweDBmLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwMCwweGEzLDB4OGYsMHg1YywweDAwLDB4YmYsMHg4ZiwKLTB4NTgsMHgwMCwweGJlLDB4OGYsMHg1NCwweDAwLDB4YjcsMHg4ZiwweDUwLDB4MDAsMHhiNiwweDhmLDB4NGMsMHgwMCwweGI1LDB4OGYsCi0weDQ4LDB4MDAsMHhiNCwweDhmLDB4NDQsMHgwMCwweGIzLDB4OGYsMHg0MCwweDAwLDB4YjIsMHg4ZiwweDNjLDB4MDAsMHhiMSwweDhmLAotMHgzOCwweDAwLDB4YjAsMHg4ZiwweDI1LDB4YjAsMHgwMiwweDNjLDB4ODAsMHgwMSwweDQyLDB4MzQsMHg2MCwweDAwLDB4YmQsMHgyNywKLTB4MDAsMHgwMCwweDQzLDB4YTAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMCwweDAyLDB4MmUsCi0weDBhLDB4MDAsMHg0MCwweDE0LDB4MDUsMHgwMCwweDAyLDB4MmUsMHhiNiwweDUxLDB4ODMsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwNSwweDAwLDB4NjIsMHgyYywweGEwLDB4ZmYsMHg0MCwweDEwLDB4MDEsMHgwMCwweDYyLDB4MjQsMHgxNiwweDEwLDB4MDAsMHgwOCwKLTB4YjYsMHg1MSwweDgyLDB4YTAsMHgyNCwweDBmLDB4MDAsMHgwOCwweDk5LDB4NTEsMHhhNywweGEwLDB4MDQsMHgwMCwweDQwLDB4MTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4YjYsMHg1MSwweDgzLDB4OTAsMHg3NSwweDEwLDB4MDAsMHgwOCwweDAzLDB4MDAsMHg2MiwweDJjLAotMHhiNiwweDUxLDB4ODMsMHg5MCwweDc1LDB4MTAsMHgwMCwweDA4LDB4MDQsMHgwMCwweDYyLDB4MmMsMHgxMywweDAwLDB4MDIsMHgyNCwKLTB4NjcsMHhmZiwweDAyLDB4MTYsMHg2OCwweDE1LDB4NjMsMHgyNSwweGYzLDB4MGYsMHgwMCwweDA4LDB4MjEsMHgxMCwweGUzLDB4MDIsCi0weGZmLDB4MDAsMHhmMCwweDMwLDB4NGMsMHgxMCwweDAwLDB4MDgsMHgwMiwweDgwLDB4MDIsMHgzYywweDM1LDB4MTAsMHgwMCwweDA4LAotMHhmZiwweDAwLDB4ZjAsMHgzMCwweGRmLDB4MGYsMHgwMCwweDA4LDB4ZmYsMHgwMCwweGYwLDB4MzAsMHhkOCwweGZmLDB4YmQsMHgyNywKLTB4MDIsMHg4MCwweDAyLDB4M2MsMHgxNCwweDAwLDB4YjEsMHhhZiwweDI0LDB4MDAsMHhiZiwweGFmLDB4MjAsMHgwMCwweGI0LDB4YWYsCi0weDFjLDB4MDAsMHhiMywweGFmLDB4MTgsMHgwMCwweGIyLDB4YWYsMHgxMCwweDAwLDB4YjAsMHhhZiwweDY4LDB4MTUsMHg0NSwweDI0LAotMHgwNSwweDY1LDB4YTQsMHg5MCwweDAwLDB4NjUsMHhhMywweDhjLDB4ZmMsMHg2NCwweGEyLDB4OGMsMHgyMSwweDg4LDB4NjQsMHgwMCwKLTB4MmIsMHgxMCwweDIyLDB4MDIsMHg2MCwweDAwLDB4NDAsMHgxMCwweDIxLDB4ODAsMHhhMCwweDAwLDB4MDIsMHg4MCwweDE0LDB4M2MsCi0weDIxLDB4OTgsMHhhMCwweDAwLDB4YTgsMHgxMCwweDAwLDB4MDgsMHgyMSwweDkwLDB4YTAsMHgwMCwweGZjLDB4NjQsMHg0MiwweDhlLAotMHgxMCwweDAwLDB4MzEsMHgyNiwweDJiLDB4MTAsMHgyMiwweDAyLDB4NTcsMHgwMCwweDQwLDB4MTAsMHgyMSwweDgwLDB4NDAsMHgwMiwKLTB4MDUsMHg2NSwweDAyLDB4OTIsMHhmZiwweGZmLDB4MjMsMHgzMiwweDAyLDB4ODAsMHgwNSwweDNjLDB4MTAsMHgwMCwweDQyLDB4MjQsCi0weDI1LDB4MjgsMHg2NSwweDAwLDB4MmMsMHg3OSwweDg0LDB4MjYsMHgxMCwweDAwLDB4MDYsMHgyNCwweDlmLDB4NDUsMHgwMCwweDBjLAotMHgwNSwweDY1LDB4MDIsMHhhMiwweGM4LDB4NjMsMHgwNiwweDhlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MiwweDI0LDB4MDYsMHgwMCwKLTB4MWYsMHgwMCwweDg0LDB4MzAsMHhjMCwweDEwLDB4MDQsMHgwMCwweDIxLDB4MTAsMHg0NCwweDAwLDB4ODAsMHgxMCwweDAyLDB4MDAsCi0weDIxLDB4MTAsMHg0NCwweDAwLDB4ODAsMHgxMCwweDAyLDB4MDAsMHgyMSwweDM4LDB4NTAsMHgwMCwweDc4LDB4NTEsMHhlMywweDhjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MWIsMHgwMywweDAwLDB4MDEsMHgwMCwweDYzLDB4MzAsMHhlMywweGZmLDB4NjAsMHgxMCwKLTB4MjUsMHhiMCwweDAyLDB4M2MsMHhjNCwweDYzLDB4MDUsMHg4ZSwweDIxLDB4MTAsMHg4MiwweDAwLDB4NjAsMHgwMSwweDQ0LDB4OTAsCi0weDgyLDB4MWQsMHgwNSwweDAwLDB4M2YsMHgwMCwweDYzLDB4MzAsMHgwNCwweDAwLDB4MGEsMHgyNCwweDA1LDB4MDAsMHg2MiwweDI4LAotMHgyMSwweDQwLDB4NDAsMHgwMSwweDBiLDB4NDAsMHg2MiwweDAwLDB4MDcsMHgwMCwweGEwLDB4MDQsMHhmZiwweDAwLDB4ODksMHgzMCwKLTB4NjQsMHg1MSwweGUyLDB4OGMsMHgwNCwweDAwLDB4MDgsMHgyNCwweDAxLDB4MDAsMHg0MiwweDI0LDB4NjQsMHg1MSwweGUyLDB4YWMsCi0weGM4LDB4NjMsMHg2NiwweDhlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDEzLDB4MDYsMHgwMCwweDFmLDB4MDAsMHg0MiwweDMwLAotMHgwOCwweDAwLDB4NDIsMHgyOCwweGNkLDB4ZmYsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjNCwweDYzLDB4NjIsMHg4ZSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweDAwLDB4NDIsMHgzMCwweGM4LDB4ZmYsMHg0OSwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDI5LDB4MDAsMHgwMCwweDExLDB4MDEsMHgwMCwweDAyLDB4MjQsMHgyZSwweDAwLDB4MDIsMHgxMSwweDAyLDB4MDAsMHgwMiwweDI0LAotMHgzMywweDAwLDB4MDIsMHgxMSwweDAzLDB4MDAsMHgwMiwweDI0LDB4MzgsMHgwMCwweDAyLDB4MTEsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4M2IsMHgwMCwweDBhLDB4MTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4NTEsMHhlMiwweDhjLDB4MjEsMHgxOCwweDMzLDB4MDEsCi0weDkwLDB4NDQsMHg2NCwweDkwLDB4MDIsMHgxMSwweDAyLDB4MDAsMHgyYiwweDEwLDB4NDQsMHgwMCwweDNlLDB4MDAsMHg0MCwweDE0LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDVjLDB4NTEsMHhlMywweDhjLDB4ODAsMHgxMCwweDA5LDB4MDAsMHgyMSwweDEwLDB4NDksMHgwMCwKLTB4MDEsMHgwMCwweDYzLDB4MjQsMHgyMSwweDEwLDB4NTMsMHgwMCwweDVjLDB4NTEsMHhlMywweGFjLDB4MjEsMHgxMCwweDQ4LDB4MDAsCi0weDM0LDB4NDMsMHg0NCwweDkwLDB4NDQsMHg1MSwweGUzLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIxLDB4MTgsMHg2NCwweDAwLAotMHg0NCwweDUxLDB4ZTMsMHhhYywweGZjLDB4NjQsMHg0MiwweDhlLDB4MTAsMHgwMCwweDMxLDB4MjYsMHgyYiwweDEwLDB4MjIsMHgwMiwKLTB4YWIsMHhmZiwweDQwLDB4MTQsMHgyMSwweDgwLDB4NDAsMHgwMiwweDI0LDB4MDAsMHhiZiwweDhmLDB4MjAsMHgwMCwweGI0LDB4OGYsCi0weDFjLDB4MDAsMHhiMywweDhmLDB4MTgsMHgwMCwweGIyLDB4OGYsMHgxNCwweDAwLDB4YjEsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDI4LDB4MDAsMHhiZCwweDI3LDB4NDgsMHg1MSwweGUyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDQyLDB4MjQsMHg0OCwweDUxLDB4ZTIsMHhhYywweDAxLDB4MDAsMHgwMiwweDI0LDB4ZDQsMHhmZiwweDAyLDB4MTUsCi0weDAyLDB4MDAsMHgwMiwweDI0LDB4NGMsMHg1MSwweGUyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg0MiwweDI0LAotMHg0YywweDUxLDB4ZTIsMHhhYywweDAyLDB4MDAsMHgwMiwweDI0LDB4Y2YsMHhmZiwweDAyLDB4MTUsMHgwMywweDAwLDB4MDIsMHgyNCwKLTB4NTAsMHg1MSwweGUyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg0MiwweDI0LDB4NTAsMHg1MSwweGUyLDB4YWMsCi0weDAzLDB4MDAsMHgwMiwweDI0LDB4Y2EsMHhmZiwweDAyLDB4MTUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDU0LDB4NTEsMHhlMiwweDhjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg0MiwweDI0LDB4YzcsMHhmZiwweDBhLDB4MTUsMHg1NCwweDUxLDB4ZTIsMHhhYywKLTB4NTgsMHg1MSwweGUyLDB4OGMsMHgyMSwweDE4LDB4MzMsMHgwMSwweDAxLDB4MDAsMHg0MiwweDI0LDB4NTgsMHg1MSwweGUyLDB4YWMsCi0weDY4LDB4NTEsMHhlMiwweDhjLDB4OTAsMHg0NCwweDY0LDB4OTAsMHgwMiwweDExLDB4MDIsMHgwMCwweDJiLDB4MTAsMHg0NCwweDAwLAotMHhjNCwweGZmLDB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjAsMHg1MSwweGUzLDB4OGMsMHg4MCwweDEwLDB4MDksMHgwMCwKLTB4MjEsMHgxMCwweDQ5LDB4MDAsMHgwMSwweDAwLDB4NjMsMHgyNCwweDIxLDB4MTAsMHg1MywweDAwLDB4NjAsMHg1MSwweGUzLDB4YWMsCi0weDIxLDB4MTAsMHg0OCwweDAwLDB4YzUsMHg0MywweDQ0LDB4OTAsMHg0NCwweDUxLDB4ZTMsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyMSwweDE4LDB4NjQsMHgwMCwweGY5LDB4MTAsMHgwMCwweDA4LDB4NDQsMHg1MSwweGUzLDB4YWMsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4MjUsMHhiMCwweDA1LDB4M2MsMHgwMiwweDgwLDB4MDMsMHgzYywweDU4LDB4MDAsMHg0YSwweDM0LDB4NWMsMHgwMCwweDRiLDB4MzQsCi0weDRjLDB4MDAsMHhhMiwweDM0LDB4MDAsMHgwMCwweDQ0LDB4OTAsMHg2OCwweDE1LDB4NjYsMHgyNCwweGVkLDB4NGEsMHhjMiwweDkwLAotMHgyOSwweGIwLDB4MDcsMHgzYywweDAzLDB4MDAsMHg4NCwweDMwLDB4MjEsMHgxOCwweGMwLDB4MDAsMHgwZiwweDAwLDB4NDQsMHgxMCwKLTB4MDQsMHgwMCwweGU4LDB4MzQsMHgwNywweDAwLDB4ODAsMHgxNCwweDU4LDB4MGMsMHhhOSwweDM0LDB4ZTYsMHg0MiwweGMyLDB4OTAsCi0weDFjLDB4MDAsMHgwNiwweDI0LDB4MDMsMHgwMCwweDQwLDB4MTQsMHg1MCwweDBjLDB4YTUsMHgzNCwweDAwLDB4MDAsMHhhNiwweGEwLAotMHgwMCwweDAwLDB4MjYsMHhhMSwweDAwLDB4MDAsMHg0MiwweDhkLDB4ZWQsMHg0YSwweDY0LDB4YTAsMHgwMCwweDAwLDB4ZTIsMHhhYywKLTB4MDAsMHgwMCwweDYyLDB4OGQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweGFkLDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDIxLDB4MTAsMHgwMCwweDAwLDB4MjUsMHhiMCwweDBkLDB4M2MsMHhlOCwweGZmLDB4YmQsMHgyNywweDEwLDB4MDAsMHhiZiwweGFmLAotMHgyZCwweDBhLDB4YTcsMHgzNSwweGEyLDB4MGQsMHhhMiwweDM1LDB4YTQsMHgwZCwweGEzLDB4MzUsMHhhNiwweDBkLDB4YTQsMHgzNSwKLTB4YTgsMHgwZCwweGE1LDB4MzUsMHgwMCwweDAwLDB4NDgsMHg5NCwweDAwLDB4MDAsMHg2OSwweDk0LDB4MDAsMHgwMCwweDhhLDB4OTQsCi0weDAwLDB4MDAsMHhhYiwweDk0LDB4MDAsMHgwMCwweGUzLDB4OTAsMHg1YiwweDBhLDB4YTQsMHgzNSwweDVjLDB4MGEsMHhhNiwweDM1LAotMHgwMCwweDJlLDB4MDMsMHgwMCwweDAzLDB4MmUsMHgwNSwweDAwLDB4NDAsMHgwMCwweGEyLDB4MzQsMHgwMCwweDAwLDB4ZTIsMHhhMCwKLTB4MDAsMHgwMCwweDg1LDB4OTAsMHgwMCwweDAwLDB4YzMsMHg5MCwweDAyLDB4ODAsMHgwZSwweDNjLDB4NjgsMHgxNSwweGNjLDB4MjUsCi0weGZmLDB4ZmYsMHgyMiwweDMxLDB4ZmYsMHgwMCwweGE1LDB4MzAsMHhmZiwweGZmLDB4MDQsMHgzMSwweDIxLDB4MjAsMHg4MiwweDAwLAotMHhmZiwweDAwLDB4NjMsMHgzMCwweDAwLDB4NDAsMHg4NywweDhkLDB4MDAsMHgyYSwweDA1LDB4MDAsMHhmZiwweGZmLDB4NDYsMHgzMSwKLTB4MjEsMHgyOCwweGEzLDB4MDAsMHhmZiwweGZmLDB4NjIsMHgzMSwweDIxLDB4MjAsMHg4NiwweDAwLDB4MjEsMHgyMCwweDgyLDB4MDAsCi0weGZmLDB4ZmYsMHhhMywweDMwLDB4NjQsMHgwYywweGEyLDB4MzUsMHgwMCwweDAwLDB4NDUsMHhhNCwweDIxLDB4MjAsMHg4MywweDAwLAotMHgwZiwweDAwLDB4ZTcsMHgzMCwweDAxLDB4MDAsMHgwMiwweDI0LDB4ZTAsMHg0MiwweDg0LDB4YWQsMHhkOCwweDQyLDB4ODgsMHhhNSwKLTB4ZGEsMHg0MiwweDg5LDB4YTUsMHhkYywweDQyLDB4OGEsMHhhNSwweGRlLDB4NDIsMHg4YiwweGE1LDB4MDcsMHgwMCwweGUyLDB4MTAsCi0weGU0LDB4NDIsMHg4NSwweGE1LDB4YTgsMHg1NiwweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDAsMHhiZiwweDhmLAotMHgyMSwweDEwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MTgsMHgwMCwweGJkLDB4MjcsMHg0YywweDAwLDB4YTMsMHgzNSwKLTB4MDAsMHgwMCwweDYyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAzLDB4MDAsMHg0MiwweDMwLDB4NjcsMHgwMCwweDQ3LDB4MTAsCi0weDY4LDB4MTUsMHhjNCwweDI1LDB4ZTYsMHg0MiwweDgyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJkLDB4MDAsMHg0MCwweDEwLAotMHgwMSwweDAwLDB4MDMsMHgyNCwweDY4LDB4MTUsMHhjNSwweDI1LDB4ZTYsMHg0MiwweGEzLDB4OTAsMHhmZiwweDAwLDB4MDIsMHgyNCwKLTB4ZWMsMHhmZiwweDYyLDB4MTQsMHgyNSwweGIwLDB4MDMsMHgzYywweGM4LDB4NDIsMHhhMiwweDk0LDB4ZTAsMHg0MiwweGE2LDB4OGMsCi0weDUwLDB4MGMsMHg2MywweDM0LDB4MDAsMHgwMCwweDY0LDB4OTAsMHgyYiwweDEwLDB4YzIsMHgwMCwweDVlLDB4MDAsMHg0MCwweDE0LAotMHg3ZiwweDAwLDB4ODQsMHgzMCwweGNhLDB4NDIsMHhhMiwweDk0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyYiwweDEwLDB4YzIsMHgwMCwKLTB4MDksMHgwMCwweDQwLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweGNjLDB4NDIsMHhhMiwweDk0LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDJiLDB4MTAsMHhjMiwweDAwLDB4MDIsMHgwMCwweDQwLDB4MTAsMHgwMiwweDAwLDB4ODIsMHgyNCwweDAxLDB4MDAsMHg4MiwweDI0LAotMHhmZiwweDAwLDB4NDQsMHgzMCwweDY4LDB4MTUsMHhjNSwweDI1LDB4ZDAsMHg0MiwweGEzLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MmIsMHgxMCwweDY0LDB4MDAsMHg0ZSwweDAwLDB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjEsMHgyMCwweDYwLDB4MDAsCi0weDY4LDB4MTUsMHhjMywweDI1LDB4ZTAsMHg0MiwweDYyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU5LDB4MDMsMHg0MiwweDJjLAotMHgwMiwweDAwLDB4NDAsMHgxNCwweDI1LDB4YjAsMHgwMiwweDNjLDB4ZDAsMHg0MiwweDY0LDB4OTAsMHg1OCwweDBjLDB4NDMsMHgzNCwKLTB4NTAsMHgwYywweDQyLDB4MzQsMHgwMCwweDAwLDB4NDQsMHhhMCwweDAwLDB4MDAsMHg2NCwweGEwLDB4ODUsMHgxMSwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDgyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MTIsMHgwMiwweDAwLAotMHgwZiwweDAwLDB4NDIsMHgzMCwweGQwLDB4ZmYsMHg0MywweDE0LDB4NjgsMHgxNSwweGM1LDB4MjUsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4NGMsMHgwMCwweDQyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDMsMHgwMCwweDYzLDB4MzAsCi0weGI4LDB4ZmYsMHg2MCwweDEwLDB4ZmYsMHhmZiwweDAyLDB4MzQsMHhkYywweDYzLDB4ODMsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLAotMHhiNCwweGZmLDB4NjIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHg0MiwweDgzLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4NjUsMHgwMCwweDYyLDB4MmMsMHgzYiwweDAwLDB4NDAsMHgxNCwweDI4LDB4MDAsMHg2MiwweDJjLDB4ZDIsMHg0MiwweDgzLDB4OTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNiwweDAzLDB4MDAsMHgwMywweDE2LDB4MDIsMHgwMCwweGZlLDB4ZmYsMHg0MiwweDI0LAotMHhmYywweGZmLDB4NDIsMHgyOCwweDAyLDB4MDAsMHg0MCwweDEwLDB4ZmUsMHhmZiwweDYyLDB4MjQsMHhmYywweGZmLDB4MDIsMHgyNCwKLTB4ZDIsMHg0MiwweDgyLDB4YTAsMHg2OCwweDE1LDB4YzQsMHgyNSwweGRjLDB4NjMsMHg4MiwweDhjLDB4ZDIsMHg0MiwweDgzLDB4OTAsCi0weGNlLDB4NDIsMHg4NiwweDkwLDB4MDIsMHgxMSwweDAyLDB4MDAsMHg3ZiwweDAwLDB4NDIsMHgzMCwweDBhLDB4MDAsMHg0NSwweDI0LAotMHgyMywweDE4LDB4YTMsMHgwMCwweDAwLDB4MmUsMHgwMywweDAwLDB4MDMsMHgyZSwweDA1LDB4MDAsMHhmZiwweDAwLDB4YzIsMHgzMCwKLTB4MmEsMHgxMCwweDQ1LDB4MDAsMHgxNywweDAwLDB4NDAsMHgxMCwweDI1LDB4YjAsMHgwMiwweDNjLDB4MDAsMHgyZSwweDA2LDB4MDAsCi0weDAzLDB4MmUsMHgwNSwweDAwLDB4NTgsMHgwYywweDQzLDB4MzQsMHg1MCwweDBjLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0NSwweGEwLAotMHgwMCwweDAwLDB4NjUsMHhhMCwweDg1LDB4MTEsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlNiwweDQyLDB4ODIsMHg5MSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg5NywweGZmLDB4NDAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHhmZiwweDAyLDB4MjQsCi0weDkxLDB4MTEsMHgwMCwweDA4LDB4ZTYsMHg0MiwweDgyLDB4YTEsMHhhYywweDExLDB4MDAsMHgwOCwweGZmLDB4ZmYsMHg4MiwweDI0LAotMHhkMSwweDQyLDB4YTMsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmIsMHgxMCwweDgzLDB4MDAsMHhiNCwweDExLDB4MDAsMHgwOCwKLTB4MGIsMHgyMCwweDYyLDB4MDAsMHhjZiwweDQyLDB4ODMsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHgwMCwweDYyLDB4MzAsCi0weDJhLDB4MTAsMHhhMiwweDAwLDB4MGIsMHgyOCwweDYyLDB4MDAsMHgyNSwweGIwLDB4MDIsMHgzYywweDU4LDB4MGMsMHg0MywweDM0LAotMHg1MCwweDBjLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0NSwweGEwLDB4MDAsMHgwMCwweDY1LDB4YTAsMHg4NSwweDExLDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhjZiwweGZmLDB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZDIsMHg0MiwweDgzLDB4OTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNiwweDAzLDB4MDAsMHgwMywweDE2LDB4MDIsMHgwMCwweDAyLDB4MDAsMHg0MiwweDI0LAotMHgwZCwweDAwLDB4NDIsMHgyOCwweDAzLDB4MDAsMHg0MCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDExLDB4MDAsMHgwOCwKLTB4MGMsMHgwMCwweDAyLDB4MjQsMHhlMCwweDExLDB4MDAsMHgwOCwweDAyLDB4MDAsMHg2MiwweDI0LDB4YzAsMHhmZiwweGJkLDB4MjcsCi0weDE4LDB4MDAsMHhiMCwweGFmLDB4MjUsMHhiMCwweDEwLDB4M2MsMHgyOCwweDAwLDB4YjQsMHhhZiwweDI0LDB4MDAsMHhiMywweGFmLAotMHgxYywweDAwLDB4YjEsMHhhZiwweDNjLDB4MDAsMHhiZiwweGFmLDB4MzgsMHgwMCwweGJlLDB4YWYsMHgzNCwweDAwLDB4YjcsMHhhZiwKLTB4MzAsMHgwMCwweGI2LDB4YWYsMHgyYywweDAwLDB4YjUsMHhhZiwweDIwLDB4MDAsMHhiMiwweGFmLDB4ZDgsMHgwMCwweDA2LDB4MzYsCi0weDAwLDB4MDAsMHhjMywweDkwLDB4MDIsMHg4MCwweDAyLDB4M2MsMHg2OCwweDE1LDB4NTQsMHgyNCwweDJhLDB4YjAsMHgxMSwweDNjLAotMHhhMCwweGZmLDB4MDIsMHgyNCwweDI1LDB4MTgsMHg2MiwweDAwLDB4MzQsMHgwMCwweDI1LDB4MzYsMHhmZSwweGZmLDB4MDIsMHgyNCwKLTB4YmMsMHg0MiwweDkyLDB4OTIsMHg0MCwweDAwLDB4MDQsMHgyNCwweDAwLDB4MDAsMHhjMywweGEwLDB4MDAsMHgwMCwweGEyLDB4YTAsCi0weGExLDB4NGUsMHgwMCwweDBjLDB4MDAsMHg5NiwweDEyLDB4MDAsMHgyMSwweDk4LDB4NDAsMHgwMCwweDZiLDB4MDAsMHg2MCwweDEyLAotMHgwMCwweDQwLDB4MDIsMHgzYywweDA4LDB4MDAsMHg2MywweDhlLDB4YjAsMHgwMywweDAyLDB4MzYsMHgyMSwweDIwLDB4NjAsMHgwMiwKLTB4MDAsMHgwMCwweDQzLDB4YWMsMHgzYSwweDQ1LDB4MDAsMHgwYywweDIxLDB4YjgsMHg4MCwweDAyLDB4MDEsMHgwMCwweDFlLDB4MjQsCi0weDQyLDB4MDAsMHgxNiwweDM2LDB4MDMsMHgwYywweDExLDB4MzYsMHgxNywweDBlLDB4MTUsMHgzNiwweDA0LDB4MDAsMHgxNCwweDI0LAotMHgyYSwweGIwLDB4MDMsMHgzYywweDA2LDB4MDAsMHg2MywweDM0LDB4MDAsMHgwMCwweDYyLDB4OTQsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHhmZiwweDQyLDB4MzAsMHgwYSwweDAwLDB4NDAsMHgxOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg4MCwweDA0LDB4M2MsCi0weGM4LDB4OTQsMHg4NCwweDI0LDB4MDAsMHgwMCwweDgzLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MiwweDk0LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHg0MiwweDMwLDB4ZmMsMHhmZiwweDQwLDB4MWMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweDY1LDB4OGUsMHgyMCwweDEwLDB4MDYsMHgzYywweDAwLDB4ZmUsMHhjNiwweDM0LDB4NDAsMHgwMCwweDA3LDB4MjQsCi0weDAxLDB4MDAsMHgwNCwweDI0LDB4MTAsMHgwMSwweDAwLDB4MGMsMHgxMCwweDAwLDB4YmUsMHhhZiwweDRkLDB4MDEsMHgwMCwweDBjLAotMHgwMSwweDAwLDB4MDQsMHgyNCwweDJhLDB4YjAsMHgwMiwweDNjLDB4MDUsMHgwMCwweDQyLDB4MzQsMHhmZiwweGZmLDB4MDMsMHgyNCwKLTB4MDAsMHgwMCwweDVlLDB4YTAsMHgwMCwweDAwLDB4YzMsMHhhMiwweDAwLDB4MDAsMHgyMiwweDkyLDB4YzEsMHg0MiwweGU1LDB4OTIsCi0weDJhLDB4YjAsMHgwNCwweDNjLDB4MDIsMHgwMCwweDAzLDB4MjQsMHg0MCwweDAwLDB4NDIsMHgzNCwweDA1LDB4MDAsMHg4NCwweDM0LAotMHgwMCwweDAwLDB4MjIsMHhhMiwweDAwLDB4MDAsMHg4MywweGEwLDB4ZWYsMHhmZiwweDAyLDB4MjQsMHgwMCwweDAwLDB4YjAsMHg5MiwKLTB4NjQsMHgwMCwweDA0LDB4MjQsMHgwMCwweDAwLDB4YTUsMHhhMiwweDAwLDB4MDAsMHhjMiwweGEyLDB4YjMsMHgwYSwweDAwLDB4MGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIyLDB4OTIsMHhiZiwweGZmLDB4MDMsMHgyNCwweDg0LDB4MDMsMHgwNCwweDI0LAotMHgyNCwweDEwLDB4NDMsMHgwMCwweDAwLDB4MDAsMHgyMiwweGEyLDB4YjMsMHgwYSwweDAwLDB4MGMsMHhmZiwweDAwLDB4MTAsMHgzMiwKLTB4MjUsMHhiMCwweDAyLDB4M2MsMHhmNCwweDA4LDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0NCwweDhjLDB4MDAsMHgwMCwweGIwLDB4YTIsCi0weDAwLDB4MDAsMHhjMCwweGEyLDB4MDAsMHgwMCwweDIyLDB4OTIsMHhiZSwweDQyLDB4ZTMsMHg5MiwweDFmLDB4MDAsMHg4NSwweDMwLAotMHg0MCwweDAwLDB4NDIsMHgzNCwweDAwLDB4MDAsMHgyMiwweGEyLDB4MDAsMHg4MCwweDAyLDB4M2MsMHhkZiwweDA3LDB4NDIsMHgzNCwKLTB4MmIsMHgxOCwweGEzLDB4MDAsMHgwOSwweDAwLDB4NjAsMHgxMCwweDI0LDB4MjAsMHg4MiwweDAwLDB4YmYsMHg0MiwweGUyLDB4OTIsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MmIsMHgxMCwweDQ1LDB4MDAsMHgwNSwweDAwLDB4NDAsMHgxMCwweDAyLDB4ODAsMHgwMiwweDNjLAotMHgwMSwweDAwLDB4MDIsMHgzYywweDI1LDB4MTAsMHhhMiwweDAwLDB4MjEsMHg5MCwweDQyLDB4MDIsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4OGUsMHg3ZCwweDQzLDB4OTAsMHgyMiwweDAwLDB4MDIsMHgyNCwweDFjLDB4MDAsMHg2MiwweDEwLDB4OTIsMHgwMCwweDAyLDB4MjQsCi0weDFiLDB4MDAsMHg2MiwweDEwLDB4MDIsMHg4MCwweDAzLDB4M2MsMHhmZiwweGZmLDB4OTQsMHgyNiwweGIzLDB4MGEsMHgwMCwweDBjLAotMHhmNCwweDAxLDB4MDQsMHgyNCwweGFiLDB4ZmYsMHg4MSwweDA2LDB4MmEsMHhiMCwweDAzLDB4M2MsMHgwNCwweDAwLDB4NjAsMHgxMiwKLTB4MjUsMHhiMCwweDAyLDB4M2MsMHhiZCwweDRlLDB4MDAsMHgwYywweDIxLDB4MjAsMHg2MCwweDAyLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weGQ4LDB4MDIsMHg0MiwweDM0LDB4MDAsMHgwMCwweDUyLDB4YWMsMHgyMSwweDEwLDB4NDAsMHgwMiwweDNjLDB4MDAsMHhiZiwweDhmLAotMHgzOCwweDAwLDB4YmUsMHg4ZiwweDM0LDB4MDAsMHhiNywweDhmLDB4MzAsMHgwMCwweGI2LDB4OGYsMHgyYywweDAwLDB4YjUsMHg4ZiwKLTB4MjgsMHgwMCwweGI0LDB4OGYsMHgyNCwweDAwLDB4YjMsMHg4ZiwweDIwLDB4MDAsMHhiMiwweDhmLDB4MWMsMHgwMCwweGIxLDB4OGYsCi0weDE4LDB4MDAsMHhiMCwweDhmLDB4MDgsMHgwMCwweGUwLDB4MDMsMHg0MCwweDAwLDB4YmQsMHgyNywweDAyLDB4ODAsMHgwMywweDNjLAotMHg2OCwweDE1LDB4NjMsMHgyNCwweGJlLDB4NDIsMHg2MiwweDkwLDB4YzAsMHgwNywweDgzLDB4MzAsMHg4MiwweDE5LDB4MDMsMHgwMCwKLTB4MmIsMHgxMCwweDYyLDB4MDAsMHhlMCwweGZmLDB4NDAsMHgxMCwweDAyLDB4ODAsMHgwNCwweDNjLDB4NjgsMHgxNSwweDg0LDB4MjQsCi0weGJmLDB4NDIsMHg4MiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyYiwweDEwLDB4NDMsMHgwMCwweGRhLDB4ZmYsMHg0MCwweDEwLAotMHgwMCwweDEyLDB4MDMsMHgwMCwweDEwLDB4MDAsMHgwMywweDNjLDB4MjUsMHgxMCwweDQzLDB4MDAsMHg5YSwweDEyLDB4MDAsMHgwOCwKLTB4MjEsMHg5MCwweDQyLDB4MDIsMHhlOCwweGZmLDB4YmQsMHgyNywweDEwLDB4MDAsMHhiMCwweGFmLDB4MGYsMHgwMCwweDEwLDB4M2MsCi0weGZmLDB4ZmYsMHgwNSwweDM2LDB4ZjAsMHhmOCwweDA2LDB4MzQsMHgxNCwweDAwLDB4YmYsMHhhZiwweGJhLDB4NDQsMHgwMCwweDBjLAotMHgxNSwweDAwLDB4MDQsMHgyNCwweGIzLDB4MGEsMHgwMCwweDBjLDB4NjQsMHgwMCwweDA0LDB4MjQsMHhmZiwweGZmLDB4MDUsMHgzNiwKLTB4NTYsMHgzMCwweDA2LDB4MjQsMHhiYSwweDQ0LDB4MDAsMHgwYywweDFhLDB4MDAsMHgwNCwweDI0LDB4YjMsMHgwYSwweDAwLDB4MGMsCi0weDY0LDB4MDAsMHgwNCwweDI0LDB4MDIsMHg4MCwweDBiLDB4M2MsMHg2OCwweDE1LDB4NjQsMHgyNSwweDA0LDB4NDMsMHg4MywweDkwLAotMHgwNCwweDAwLDB4MDIsMHgyNCwweDE5LDB4MDAsMHg2MiwweDEwLDB4MjUsMHhiMCwweDAyLDB4M2MsMHgxNCwweDQzLDB4OGEsMHg4YywKLTB4MTgsMHg0MywweDg4LDB4OGMsMHgyNSwweGIwLDB4MDIsMHgzYywweDFjLDB4MGUsMHg0OSwweDM0LDB4MDAsMHgwZSwweDQzLDB4MzQsCi0weDA0LDB4MGUsMHg0NCwweDM0LDB4MDgsMHgwZSwweDQ1LDB4MzQsMHgxMCwweDBlLDB4NDYsMHgzNCwweDE0LDB4MGUsMHg0NywweDM0LAotMHgxOCwweDBlLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg2YSwweGFjLDB4MDAsMHgwMCwweDhhLDB4YWMsMHgwMCwweDAwLDB4YTgsMHhhYywKLTB4MDAsMHgwMCwweGNhLDB4YWMsMHgwMCwweDAwLDB4ZWEsMHhhYywweDAwLDB4MDAsMHg0YSwweGFjLDB4MDAsMHgwMCwweDJhLDB4YWQsCi0weDE0LDB4MDAsMHhiZiwweDhmLDB4MTAsMHgwMCwweGIwLDB4OGYsMHg2OCwweDE1LDB4NjMsMHgyNSwweDA0LDB4MDAsMHgwMiwweDI0LAotMHgxOCwweDAwLDB4YmQsMHgyNywweDA4LDB4MDAsMHhlMCwweDAzLDB4MDQsMHg0MywweDYyLDB4YTAsMHgwMCwweDBlLDB4NDIsMHgzNCwKLTB4MDAsMHgwMCwweDQzLDB4OGMsMHgxNCwweDQzLDB4OGEsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTQsMHhmZiwweDZhLDB4MTQsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZWMsMHgxMiwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4ZmYsMHhiZCwweDI3LAotMHgxMCwweDAwLDB4YjAsMHhhZiwweDBmLDB4MDAsMHgxMCwweDNjLDB4ZmYsMHhmZiwweDA1LDB4MzYsMHhmMCwweGY4LDB4MDYsMHgzNCwKLTB4MTQsMHgwMCwweGJmLDB4YWYsMHhiYSwweDQ0LDB4MDAsMHgwYywweDE1LDB4MDAsMHgwNCwweDI0LDB4YjMsMHgwYSwweDAwLDB4MGMsCi0weDY0LDB4MDAsMHgwNCwweDI0LDB4ZmYsMHhmZiwweDA1LDB4MzYsMHg1NiwweDMwLDB4MDYsMHgyNCwweGJhLDB4NDQsMHgwMCwweDBjLAotMHgxYSwweDAwLDB4MDQsMHgyNCwweGIzLDB4MGEsMHgwMCwweDBjLDB4NjQsMHgwMCwweDA0LDB4MjQsMHgwMiwweDgwLDB4MDQsMHgzYywKLTB4NjgsMHgxNSwweDgzLDB4MjQsMHgwNCwweDQzLDB4NjUsMHg5MCwweDIxLDB4NzAsMHg2MCwweDAwLDB4MTAsMHgxMCwweDAzLDB4M2MsCi0weDI1LDB4YjAsMHgwMiwweDNjLDB4MTAsMHgxMCwweDY2LDB4MzQsMHgwMSwweDAwLDB4MDMsMHgyNCwweDFjLDB4MGUsMHg0ZCwweDM0LAotMHgwMCwweDBlLDB4NGEsMHgzNCwweDA0LDB4MGUsMHg0YiwweDM0LDB4MDgsMHgwZSwweDRjLDB4MzQsMHgxMCwweDBlLDB4NDcsMHgzNCwKLTB4MTQsMHgwZSwweDQ4LDB4MzQsMHgwZiwweDAwLDB4YTMsMHgxMCwweDE4LDB4MGUsMHg0OSwweDM0LDB4MTAsMHgxMCwweDAyLDB4MjQsCi0weDAwLDB4MDAsMHg0NiwweGFkLDB4MDAsMHgwMCwweDY2LDB4YWQsMHgwMCwweDAwLDB4ODIsMHhhZCwweDAwLDB4MDAsMHhlNiwweGFjLAotMHgwMCwweDAwLDB4MDYsMHhhZCwweDAwLDB4MDAsMHgyNiwweGFkLDB4MDAsMHgwMCwweGE2LDB4YWQsMHgxNCwweDAwLDB4YmYsMHg4ZiwKLTB4MTAsMHgwMCwweGIwLDB4OGYsMHgwMSwweDAwLDB4MDIsMHgyNCwweDE4LDB4MDAsMHhiZCwweDI3LDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDA0LDB4NDMsMHhjMiwweGExLDB4MDAsMHgwMCwweDQ0LDB4OGQsMHgwMCwweDAwLDB4MDAsMHgwMCwweGYwLDB4ZmYsMHg4NiwweDE0LAotMHgxMCwweDEwLDB4MDIsMHgyNCwweDIzLDB4MTMsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweGZmLDB4YmQsMHgyNywKLTB4MTQsMHgwMCwweGIxLDB4YWYsMHgxMCwweDAwLDB4YjAsMHhhZiwweDAxLDB4MDAsMHgxMSwweDNjLDB4MGYsMHgwMCwweDEwLDB4M2MsCi0weGZmLDB4ZmYsMHgwNSwweDM2LDB4ZjQsMHg5OCwweDI2LDB4MzYsMHgxOCwweDAwLDB4YmYsMHhhZiwweGJhLDB4NDQsMHgwMCwweDBjLAotMHgxNSwweDAwLDB4MDQsMHgyNCwweGIzLDB4MGEsMHgwMCwweDBjLDB4NjQsMHgwMCwweDA0LDB4MjQsMHhmZiwweGZmLDB4MDUsMHgzNiwKLTB4NTYsMHgzMCwweDI2LDB4MzYsMHhiYSwweDQ0LDB4MDAsMHgwYywweDFhLDB4MDAsMHgwNCwweDI0LDB4MDIsMHg4MCwweDEwLDB4M2MsCi0weGIzLDB4MGEsMHgwMCwweDBjLDB4NjQsMHgwMCwweDA0LDB4MjQsMHg2OCwweDE1LDB4MDQsMHgyNiwweDA0LDB4NDMsMHg4MiwweDkwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDBkLDB4MDAsMHg0MCwweDE0LDB4MjUsMHhiMCwweDAyLDB4M2MsMHgwMCwweDBlLDB4NDIsMHgzNCwKLTB4MDAsMHgwMCwweDQzLDB4OGMsMHhlYywweDQyLDB4OGYsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDZmLDB4MTQsCi0weDY4LDB4MTUsMHgwMiwweDI2LDB4MTgsMHgwMCwweGJmLDB4OGYsMHgxNCwweDAwLDB4YjEsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLAotMHgyMCwweDAwLDB4YmQsMHgyNywweDA4LDB4MDAsMHhlMCwweDAzLDB4MDQsMHg0MywweDQwLDB4YTAsMHhlYywweDQyLDB4OGYsMHg4YywKLTB4ZTgsMHg0MiwweDg4LDB4OGMsMHhmMCwweDQyLDB4OGEsMHg4YywweGY0LDB4NDIsMHg4YiwweDhjLDB4ZjgsMHg0MiwweDhjLDB4OGMsCi0weGZjLDB4NDIsMHg4ZCwweDhjLDB4MjUsMHhiMCwweDAyLDB4M2MsMHgwMCwweDQzLDB4OGUsMHg4YywweDFjLDB4MGUsMHg0OSwweDM0LAotMHgwOCwweDBlLDB4NDMsMHgzNCwweDAwLDB4MGUsMHg0NCwweDM0LDB4MDQsMHgwZSwweDQ1LDB4MzQsMHgxMCwweDBlLDB4NDYsMHgzNCwKLTB4MTQsMHgwZSwweDQ3LDB4MzQsMHgxOCwweDBlLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg2OCwweGFjLDB4MTgsMHgwMCwweGJmLDB4OGYsCi0weDAwLDB4MDAsMHg4ZiwweGFjLDB4MTQsMHgwMCwweGIxLDB4OGYsMHgwMCwweDAwLDB4YWEsMHhhYywweDAwLDB4MDAsMHhjYiwweGFjLAotMHgwMCwweDAwLDB4ZWMsMHhhYywweDAwLDB4MDAsMHg0ZCwweGFjLDB4NjgsMHgxNSwweDAyLDB4MjYsMHgxMCwweDAwLDB4YjAsMHg4ZiwKLTB4MjAsMHgwMCwweGJkLDB4MjcsMHgwMCwweDAwLDB4MmUsMHhhZCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDQsMHg0MywweDQwLDB4YTAsCi0weGUwLDB4ZmYsMHhiZCwweDI3LDB4MTQsMHgwMCwweGIxLDB4YWYsMHgxMCwweDAwLDB4YjAsMHhhZiwweDAxLDB4MDAsMHgxMSwweDNjLAotMHgwZiwweDAwLDB4MTAsMHgzYywweGZmLDB4ZmYsMHgwNSwweDM2LDB4ZjQsMHg5OCwweDI2LDB4MzYsMHgxOCwweDAwLDB4YmYsMHhhZiwKLTB4YmEsMHg0NCwweDAwLDB4MGMsMHgxNSwweDAwLDB4MDQsMHgyNCwweGIzLDB4MGEsMHgwMCwweDBjLDB4NjQsMHgwMCwweDA0LDB4MjQsCi0weGZmLDB4ZmYsMHgwNSwweDM2LDB4NTYsMHgzMCwweDI2LDB4MzYsMHhiYSwweDQ0LDB4MDAsMHgwYywweDFhLDB4MDAsMHgwNCwweDI0LAotMHhiMywweDBhLDB4MDAsMHgwYywweDY0LDB4MDAsMHgwNCwweDI0LDB4MDIsMHg4MCwweDE4LDB4M2MsMHg2OCwweDE1LDB4MDUsMHgyNywKLTB4MDQsMHg0MywweGEzLDB4OTAsMHgwMywweDAwLDB4MDIsMHgyNCwweDJhLDB4MDAsMHg2MiwweDEwLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weGVjLDB4NDIsMHhhZiwweDhjLDB4MDgsMHg0MywweGEzLDB4OGMsMHhlOCwweDQyLDB4YTIsMHg4YywweGYwLDB4NDIsMHhhYywweDhjLAotMHhmNCwweDQyLDB4YWQsMHg4YywweGY4LDB4NDIsMHhhOSwweDhjLDB4ZmMsMHg0MiwweGFhLDB4OGMsMHgwMCwweDQzLDB4YWIsMHg4YywKLTB4MjEsMHg3MCwweDQzLDB4MDAsMHhmZiwweGZmLDB4MDIsMHgzYywweDI1LDB4YjAsMHgwMywweDNjLDB4ZmYsMHgwMCwweDQyLDB4MzQsCi0weDAwLDB4ZmYsMHhjNCwweDMxLDB4MDQsMHgwZSwweDY1LDB4MzQsMHgxMCwweDBlLDB4NjYsMHgzNCwweDE0LDB4MGUsMHg2NywweDM0LAotMHgxOCwweDBlLDB4NjgsMHgzNCwweDI0LDB4ODAsMHhjMiwweDAxLDB4MDgsMHgwZSwweDcxLDB4MzQsMHgwMCwweDBlLDB4NjIsMHgzNCwKLTB4MDEsMHgzZiwweDg0LDB4MmMsMHgxYywweDBlLDB4NjMsMHgzNCwweDAwLDB4MDAsMHg0ZiwweGFjLDB4MDAsMHgwMCwweGFjLDB4YWMsCi0weDAwLDB4MDAsMHhjZCwweGFjLDB4MDAsMHgwMCwweGU5LDB4YWMsMHgwMCwweDAwLDB4MGEsMHhhZCwweDAwLDB4MDAsMHg2YiwweGFjLAotMHgwYSwweDAwLDB4ODAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJlLDB4YWUsMHgxOCwweDAwLDB4YmYsMHg4ZiwKLTB4MTQsMHgwMCwweGIxLDB4OGYsMHgxMCwweDAwLDB4YjAsMHg4ZiwweDY4LDB4MTUsMHgwMywweDI3LDB4MDMsMHgwMCwweDAyLDB4MjQsCi0weDIwLDB4MDAsMHhiZCwweDI3LDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwNCwweDQzLDB4NjIsMHhhMCwweGE2LDB4MTMsMHgwMCwweDA4LAotMHgwMCwweDNmLDB4MGUsMHgzNiwweDAwLDB4MGUsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4OGMsMHhlYywweDQyLDB4YWYsMHg4YywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhkMywweGZmLDB4NmYsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTcsMHgxMywweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZDAsMHhmZiwweGJkLDB4MjcsMHgxOCwweDAwLDB4YjIsMHhhZiwweDAyLDB4ODAsMHgxMiwweDNjLAotMHgyNCwweDAwLDB4YjUsMHhhZiwweDIwLDB4MDAsMHhiNCwweGFmLDB4MjgsMHgwMCwweGJmLDB4YWYsMHgxYywweDAwLDB4YjMsMHhhZiwKLTB4MTQsMHgwMCwweGIxLDB4YWYsMHgxMCwweDAwLDB4YjAsMHhhZiwweDY4LDB4MTUsMHg0NCwweDI2LDB4MDIsMHg4MCwweDE0LDB4M2MsCi0weDAwLDB4NDAsMHg4NSwweDhjLDB4ZGMsMHg2MywweDgzLDB4OGMsMHg4ZSwweDdkLDB4ODYsMHg5MiwweDI1LDB4YjAsMHgwMiwweDNjLAotMHgwZiwweDBjLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0NiwweGEwLDB4MDIsMHgxOSwweDAzLDB4MDAsMHhmMCwweGYwLDB4YTUsMHgzMCwKLTB4MDAsMHgxMCwweDAyLDB4MjQsMHgwNCwweDQzLDB4OTMsMHg5MCwweDcxLDB4MDAsMHhhMiwweDEwLDB4N2YsMHgwMCwweDc1LDB4MzAsCi0weDI1LDB4YjAsMHgwOSwweDNjLDB4NGMsMHgwMCwweDIzLDB4MzUsMHgwMCwweDAwLDB4NjIsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMywweDAwLDB4NDIsMHgzMCwweDA5LDB4MDAsMHg0MCwweDEwLDB4NjgsMHgxNSwweDQ1LDB4MjYsMHg2OCwweDE1LDB4NGEsMHgyNiwKLTB4MDAsMHg0MCwweDQyLDB4OGQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MTMsMHgwMiwweDAwLDB4MGYsMHgwMCwweDQyLDB4MzAsCi0weDMzLDB4MDAsMHg0MCwweDEwLDB4MDAsMHgwZSwweDI1LDB4MzUsMHg2OCwweDE1LDB4NDUsMHgyNiwweDA0LDB4NDMsMHhhMiwweDhjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MTIsMHgwMiwweDAwLDB4MGYsMHgwMCwweDQwLDB4MTQsMHg2OCwweDE1LDB4NGEsMHgyNiwKLTB4MjUsMHhiMCwweDAyLDB4M2MsMHg4NCwweDAxLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0NCwweDhjLDB4MGQsMHgwMCwweDAzLDB4MjQsCi0weDdlLDB4MDAsMHg4MywweDEwLDB4M2UsMHgwMCwweDAyLDB4MjQsMHg0YSwweDAwLDB4MDMsMHgyNCwweDFmLDB4NDMsMHhhMiwweGEwLAotMHgxYywweDQzLDB4YTMsMHhhMCwweDQ1LDB4MDAsMHgwMiwweDI0LDB4NDMsMHgwMCwweDAzLDB4MjQsMHgxZCwweDQzLDB4YTIsMHhhMCwKLTB4MWUsMHg0MywweGEzLDB4YTAsMHg2OCwweDE1LDB4NGEsMHgyNiwweGRjLDB4NjMsMHg0YywweDhkLDB4MDQsMHg0MCwweDQyLDB4OGQsCi0weDAwLDB4NDAsMHg0YiwweDhkLDB4MWUsMHg0MywweDRkLDB4OTEsMHgxYywweDQzLDB4NGUsMHg5MSwweDI1LDB4YjAsMHgwOSwweDNjLAotMHgwMiwweDExLDB4MDIsMHgwMCwweDYwLDB4MGMsMHgyNywweDM1LDB4MDIsMHgxOSwweDBjLDB4MDAsMHg5OCwweDBjLDB4MjQsMHgzNSwKLTB4MDAsMHgwMCwweGUzLDB4YTAsMHg2NiwweDBjLDB4MjUsMHgzNSwweDAwLDB4MDAsMHg4MiwweGEwLDB4NjcsMHgwYywweDI2LDB4MzUsCi0weGYwLDB4ZjAsMHg2OCwweDMxLDB4MTAsMHgxMCwweDAyLDB4MjQsMHgwMCwweDAwLDB4YWQsMHhhMCwweDAwLDB4MDAsMHhjZSwweGEwLAotMHg0MywweDAwLDB4MDIsMHgxMSwweGZmLDB4ZmYsMHgwMiwweDM0LDB4MjgsMHgwMCwweGJmLDB4OGYsMHgyNCwweDAwLDB4YjUsMHg4ZiwKLTB4MjAsMHgwMCwweGI0LDB4OGYsMHgxYywweDAwLDB4YjMsMHg4ZiwweDE4LDB4MDAsMHhiMiwweDhmLDB4MTQsMHgwMCwweGIxLDB4OGYsCi0weDEwLDB4MDAsMHhiMCwweDhmLDB4MjEsMHgxMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDMwLDB4MDAsMHhiZCwweDI3LAotMHgwMCwweDAwLDB4YTIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4NWQsMHgwMCwweDQwLDB4MTAsMHgxMCwweDBlLDB4MjgsMHgzNSwKLTB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAxLDB4MDAsMHgyMSwweDM4LDB4MDAsMHg2MCwweDgxLDB4NDAsCi0weDA4LDB4MGUsMHgyMiwweDM1LDB4MDQsMHgwZSwweDI0LDB4MzUsMHgwMCwweDAwLDB4NDMsMHg4YywweDAwLDB4MDAsMHhhNSwweDhjLAotMHgwMCwweDAwLDB4ODIsMHg4YywweGU4LDB4NDIsMHg0MywweGFkLDB4ZWMsMHg0MiwweDQ1LDB4YWQsMHhmMCwweDQyLDB4NDIsMHhhZCwKLTB4MTQsMHgwZSwweDI0LDB4MzUsMHgxOCwweDBlLDB4MjIsMHgzNSwweDFjLDB4MGUsMHgyNSwweDM1LDB4MDAsMHgwMCwweDA4LDB4OGQsCi0weDhlLDB4N2QsMHg4YiwweDkyLDB4MDAsMHgwMCwweDg2LDB4OGMsMHgwMCwweGZmLDB4NjMsMHgzMCwweDAwLDB4MDAsMHg0NywweDhjLAotMHgwMCwweDAwLDB4YTQsMHg4YywweDlhLDB4MGMsMHgyMiwweDM1LDB4MDIsMHgxYSwweDAzLDB4MDAsMHgwMCwweDAwLDB4NDMsMHhhMCwKLTB4MjIsMHgwMCwweDAyLDB4MjQsMHhmNCwweDQyLDB4NDgsMHhhZCwweGY4LDB4NDIsMHg0NiwweGFkLDB4ZmMsMHg0MiwweDQ3LDB4YWQsCi0weDU4LDB4MDAsMHg2MiwweDExLDB4MDAsMHg0MywweDQ0LDB4YWQsMHg5MiwweDAwLDB4MDIsMHgyNCwweDU2LDB4MDAsMHg2MiwweDExLAotMHgwZCwweDA4LDB4MjIsMHgzNSwweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMCwweDYwLDB4ODEsMHg0MCwKLTB4NjgsMHgxNSwweDQ0LDB4MjYsMHgwMCwweDQwLDB4ODMsMHg4YywweGZmLDB4ZmYsMHgwMiwweDNjLDB4ZmYsMHgwZiwweDQyLDB4MzQsCi0weDI0LDB4MTgsMHg2MiwweDAwLDB4MDAsMHgxMCwweDYzLDB4MzQsMHhkZSwweDEzLDB4MDAsMHgwOCwweDAwLDB4NDAsMHg4MywweGFjLAotMHgwMSwweDAwLDB4MDIsMHgyNCwweDM1LDB4MDAsMHg2MiwweDEyLDB4MDQsMHgwMCwweDAyLDB4MjQsMHgzMywweDAwLDB4NjIsMHgxMiwKLTB4NjgsMHgxNSwweDQzLDB4MjYsMHhmZiwweGZmLDB4MDIsMHgyNCwweGQwLDB4MTMsMHgwMCwweDA4LDB4MDQsMHg0MywweDYyLDB4YTAsCi0weGJkLDB4ZmYsMHg4MiwweDExLDB4MDIsMHgxMiwweDBiLDB4MDAsMHgwZiwweDAwLDB4NDgsMHgzMCwweDAxLDB4MDAsMHgwMywweDI0LAotMHhiOSwweGZmLDB4MDMsMHgxNSwweDRjLDB4MDAsMHgyMywweDM1LDB4MDAsMHgwMCwweDYyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDMsMHgwMCwweDQyLDB4MzAsMHhiNCwweGZmLDB4NDAsMHgxMCwweDAzLDB4MDAsMHgwMiwweDI0LDB4NWYsMHgwMCwweDYyLDB4MTIsCi0weDA0LDB4MDAsMHg2MiwweDJhLDB4NDUsMHgwMCwweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY0LDB4MDAsMHg2MCwweDEyLAotMHhmZiwweDAwLDB4YTIsMHgzMSwweGFjLDB4ZmYsMHg2OCwweDE2LDB4ZmYsMHgwMCwweGMyLDB4MzEsMHgyYiwweDEwLDB4YTIsMHgwMiwKLTB4NTIsMHgwMCwweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDFmLDB4NDMsMHg0MiwweDkxLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDJiLDB4MTAsMHg1NSwweDAwLDB4NDQsMHgwMCwweDQwLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJmLDB4MTMsMHgwMCwweDBjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDA2LDB4MTQsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYiwweDAwLDB4MDIsMHgyNCwKLTB4NDYsMHgwMCwweDAzLDB4MjQsMHgxZiwweDQzLDB4YTIsMHhhMCwweDFjLDB4NDMsMHhhMywweGEwLDB4NDEsMHgwMCwweDAyLDB4MjQsCi0weDQwLDB4MDAsMHgwMywweDI0LDB4MWQsMHg0MywweGEyLDB4YTAsMHhmMSwweDEzLDB4MDAsMHgwOCwweDFlLDB4NDMsMHhhMywweGEwLAotMHgwMCwweDAwLDB4MDMsMHg4ZCwweDNmLDB4M2YsMHgwMiwweDNjLDB4M2YsMHgzZiwweDQyLDB4MzQsMHhhMCwweGZmLDB4NjIsMHgxNCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhkZiwweDEzLDB4MDAsMHgwOCwweDY4LDB4MTUsMHg0NSwweDI2LDB4MGYsMHgwMCwweDEwLDB4M2MsCi0weDAxLDB4MDAsMHgxMSwweDNjLDB4ZmYsMHhmZiwweDA1LDB4MzYsMHhmNCwweDk4LDB4MjYsMHgzNiwweGJhLDB4NDQsMHgwMCwweDBjLAotMHgxNSwweDAwLDB4MDQsMHgyNCwweGIzLDB4MGEsMHgwMCwweDBjLDB4NjQsMHgwMCwweDA0LDB4MjQsMHhmZiwweGZmLDB4MDUsMHgzNiwKLTB4NTYsMHgzMCwweDI2LDB4MzYsMHhiYSwweDQ0LDB4MDAsMHgwYywweDFhLDB4MDAsMHgwNCwweDI0LDB4YjMsMHgwYSwweDAwLDB4MGMsCi0weDY0LDB4MDAsMHgwNCwweDI0LDB4NjgsMHgxNSwweDQzLDB4MjYsMHhmZiwweGZmLDB4MDIsMHgyNCwweGQwLDB4MTMsMHgwMCwweDA4LAotMHgwNCwweDQzLDB4NjIsMHhhMCwweDBkLDB4MDgsMHgyMiwweDM1LDB4MDAsMHgwMCwweDQzLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MGYsMHgwMCwweDYzLDB4MzAsMHgwOCwweDAwLDB4NjIsMHgyYywweDBmLDB4MDAsMHg2MywweDM4LDB4YTUsMHhmZiwweDQwLDB4MTQsCi0weDAxLDB4MDAsMHg2NSwweDI0LDB4MDAsMHgxNiwweDA1LDB4MDAsMHgwMCwweDI0LDB4MDUsMHgwMCwweDAwLDB4MWEsMHgwNSwweDAwLAotMHgyNSwweDEwLDB4NDQsMHgwMCwweDI1LDB4MTAsMHg0MywweDAwLDB4MjUsMHgxMCwweDQ1LDB4MDAsMHgyNSwweDE4LDB4NjUsMHgwMCwKLTB4MTgsMHg0MywweDQzLDB4YWQsMHgzNSwweDE0LDB4MDAsMHgwOCwweDE0LDB4NDMsMHg0MiwweGFkLDB4MDQsMHgwMCwweDAyLDB4MjQsCi0weDBkLDB4MDAsMHg2MiwweDEyLDB4ZmYsMHgwMCwweDAyLDB4MjQsMHg2NywweGZmLDB4NjIsMHgxNiwweGZmLDB4MDAsMHhhMiwweDMxLAotMHgyYiwweDEwLDB4YTIsMHgwMiwweDFkLDB4MDAsMHg0MCwweDE0LDB4ZmYsMHgwMCwweGMyLDB4MzEsMHgyYiwweDEwLDB4YTIsMHgwMiwKLTB4MGEsMHgwMCwweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZiLDB4MTIsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA2LDB4MTQsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxZCwweDQzLDB4NDIsMHg5MSwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyYiwweDEwLDB4NTUsMHgwMCwweGY4LDB4ZmYsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjNSwweDEyLDB4MDAsMHgwYywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNiwweDE0LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjAsMHg0MywweDQyLDB4OTEsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MmIsMHgxMCwweGEyLDB4MDIsMHhhYywweGZmLDB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg3MCwweDEzLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDYsMHgxNCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MmIsMHgxMCwweGEyLDB4MDIsMHhlOCwweGZmLDB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjEsMHg0MywweDQyLDB4OTEsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MmIsMHgxMCwweDU1LDB4MDAsMHhhMCwweGZmLDB4NDAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg3MCwweDEzLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDYsMHgxNCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDIsMHg4MCwweDA4LDB4M2MsMHg2OCwweDE1LDB4MDUsMHgyNSwweGRjLDB4NjMsMHhhNCwweDhjLDB4ZTYsMHg0MiwweGEzLDB4OTAsCi0weDAyLDB4MTEsMHgwNCwweDAwLDB4MWYsMHgwMCwweDYwLDB4MTQsMHg3ZiwweDAwLDB4NDYsMHgzMCwweDI1LDB4YjAsMHgwNywweDNjLAotMHg0YywweDAwLDB4ZTIsMHgzNCwweDAwLDB4MDAsMHg0MywweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOSwweDAwLDB4NjAsMHgxMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweGZmLDB4MDIsMHgzNCwweDE2LDB4MDAsMHg4MiwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDgsMHhlMywweDM0LDB4MDAsMHgwMCwweDYyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg0MiwweDMwLAotMHgxMiwweDAwLDB4NDAsMHgxMCwweDRiLDB4MDAsMHhjMiwweDJjLDB4MjksMHgwMCwweDQwLDB4MTAsMHgwMSwweDAwLDB4MDQsMHgyNCwKLTB4ZDgsMHhmZiwweGMyLDB4MjQsMHgxZSwweDAwLDB4NDIsMHgyYywweDJmLDB4MDAsMHg0MCwweDEwLDB4MjMsMHgwMCwweGMyLDB4MmMsCi0weDY4LDB4MTUsMHgwNCwweDI1LDB4ZDMsMHg0MiwweDgyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI5LDB4MDAsMHg0MCwweDEwLAotMHgyNSwweGIwLDB4MDIsMHgzYywweDIwLDB4MDAsMHgwMywweDI0LDB4ODcsMHgwYywweDQyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHhhMCwKLTB4ZDMsMHg0MiwweDgwLDB4YTAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLDB4MGYsMHgwMCwweDQwLDB4MTAsCi0weDAxLDB4MDAsMHgwNCwweDI0LDB4ZDgsMHhmZiwweGMyLDB4MjQsMHgxZSwweDAwLDB4NDIsMHgyYywweDJjLDB4MDAsMHg0MCwweDEwLAotMHgyMywweDAwLDB4YzIsMHgyYywweDY4LDB4MTUsMHgwNCwweDI1LDB4ZDMsMHg0MiwweDgyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjYsMHgwMCwweDQwLDB4MTAsMHgyNSwweGIwLDB4MDIsMHgzYywweDQ0LDB4MDAsMHgwMywweDI0LDB4MzAsMHgwYywweDQyLDB4MzQsCi0weDAwLDB4MDAsMHg0MywweGEwLDB4ZWQsMHgxNCwweDAwLDB4MDgsMHhkMywweDQyLDB4ODAsMHhhMCwweGQzLDB4NDIsMHhhMiwweDkwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGVmLDB4ZmYsMHg0NCwweDEwLDB4MzAsMHgwYywweGUzLDB4MzQsMHg0MywweDAwLDB4MDIsMHgyNCwKLTB4ZDMsMHg0MiwweGE0LDB4YTAsMHgwMCwweDAwLDB4NjIsMHhhMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsCi0weGQzLDB4NDIsMHhhMiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhkNSwweGZmLDB4NDQsMHgxMCwweDg3LDB4MGMsMHhlMywweDM0LAotMHgxMCwweDAwLDB4MDIsMHgyNCwweGQzLDB4NDIsMHhhNCwweGEwLDB4MDAsMHgwMCwweDYyLDB4YTAsMHgwNiwweDE1LDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMywweDAwLDB4YzIsMHgyYywweGRhLDB4ZmYsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDY4LDB4MTUsMHgwNCwweDI1LDB4ZDMsMHg0MiwweDgyLDB4OTAsMHgwMiwweDAwLDB4MDMsMHgyNCwweGQ1LDB4ZmYsMHg0MywweDEwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI1LDB4YjAsMHgwMiwweDNjLDB4ODcsMHgwYywweDQyLDB4MzQsMHhkMywweDQyLDB4ODMsMHhhMCwKLTB4MDAsMHgwMCwweDQwLDB4YTAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLDB4MjMsMHgwMCwweGMyLDB4MmMsCi0weGNjLDB4ZmYsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2OCwweDE1LDB4MDQsMHgyNSwweGQzLDB4NDIsMHg4MiwweDkwLAotMHgwMiwweDAwLDB4MDMsMHgyNCwweGM3LDB4ZmYsMHg0MywweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4ZDMsMHg0MiwweDgzLDB4YTAsMHgzMCwweDBjLDB4NDIsMHgzNCwweDQyLDB4MDAsMHgwMywweDI0LDB4MDAsMHgwMCwweDQzLDB4YTAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsMHgwMiwweDgwLDB4MDIsMHgzYywweDY4LDB4MTUsMHg0NSwweDI0LAotMHhkNSwweDQyLDB4YTMsMHg5MCwweDAyLDB4MDAsMHgwMiwweDI0LDB4MDMsMHgwMCwweDYyLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwweGRjLDB4NjMsMHhhMiwweDhjLDB4MjUsMHhiMCwweDAzLDB4M2MsCi0weDBhLDB4MGEsMHg2OCwweDM0LDB4MDIsMHgxMSwweDAyLDB4MDAsMHg3ZiwweDAwLDB4NDIsMHgzMCwweDFhLDB4MDAsMHg0NCwweDJjLAotMHgxNCwweDAwLDB4NDIsMHgyYywweDAxLDB4MGEsMHg2NiwweDM0LDB4MGIsMHgwMCwweDQwLDB4MTQsMHgyZSwweDBhLDB4NjcsMHgzNCwKLTB4ZjMsMHhmZiwweDgwLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweGQ0LDB4NDIsMHhhNCwweDkwLDB4MDEsMHgwMCwweDAyLDB4MjQsCi0weDAxLDB4MGEsMHg2NywweDM0LDB4MGYsMHgwMCwweDgyLDB4MTAsMHgyZSwweDBhLDB4NjYsMHgzNCwweGQ0LDB4NDIsMHhhMCwweGEwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLDB4NDAsMHgwMCwweDAyLDB4MjQsMHgwMCwweDAwLDB4YzIsMHhhMCwKLTB4MDEsMHgwMCwweDAzLDB4MjQsMHhkZiwweGZmLDB4MDIsMHgyNCwweGQ0LDB4NDIsMHhhMywweGEwLDB4MDAsMHgwMCwweGUyLDB4YTAsCi0weDAzLDB4MDAsMHgwMywweDI0LDB4MjEsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDMsMHhhMSwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ3LDB4MDAsMHgwMiwweDI0LDB4MDAsMHgwMCwweGUyLDB4YTAsMHhkMywweGZmLDB4MDMsMHgyNCwKLTB4ODMsMHhmZiwweDAyLDB4MjQsMHgwMCwweDAwLDB4YzMsMHhhMCwweDAwLDB4MDAsMHgwMiwweGExLDB4NDgsMHgxNSwweDAwLDB4MDgsCi0weGQ0LDB4NDIsMHhhMCwweGEwLDB4ZDAsMHhmZiwweGJkLDB4MjcsMHgxYywweDAwLDB4YjEsMHhhZiwweDI4LDB4MDAsMHhiZiwweGFmLAotMHgyNCwweDAwLDB4YjMsMHhhZiwweDIwLDB4MDAsMHhiMiwweGFmLDB4MTgsMHgwMCwweGIwLDB4YWYsMHhmZiwweGZmLDB4MTEsMHgyNCwKLTB4MDIsMHg4MCwweDEzLDB4M2MsMHg0MSwweGIwLDB4MDIsMHgzYywweDY4LDB4MTUsMHg2NiwweDI2LDB4MDQsMHgwMCwweDQyLDB4MzQsCi0weDAwLDB4MDAsMHg0NywweDhjLDB4MDAsMHg0YiwweGM1LDB4OGMsMHgwMiwweDgwLDB4MDMsMHgzYywweDk2LDB4N2QsMHg2NCwweDkwLAotMHhmYywweDRhLDB4YzgsMHg4YywweDAyLDB4ODAsMHgwMiwweDNjLDB4YjgsMHg3ZCwweDQ5LDB4OTAsMHgyNSwweGIwLDB4MGEsMHgzYywKLTB4MjUsMHg5MCwweGE3LDB4MDAsMHhiMCwweDAzLDB4NDIsMHgzNSwweDAwLDB4MDAsMHg1MiwweGFjLDB4MDAsMHgyNCwweDA0LDB4MDAsCi0weDAwLDB4MDAsMHg0OCwweGFjLDB4ODQsMHgwMiwweDQzLDB4MzUsMHg4YywweDAyLDB4NDUsMHgzNSwweDAxLDB4MDAsMHgwMiwweDI0LAotMHgwMCwweDAwLDB4NzIsMHhhYywweDAwLDB4MDAsMHhhNCwweGFjLDB4YjksMHgwNCwweDIyLDB4MTEsMHgwMCwweDRiLDB4ZDIsMHhhYywKLTB4NjgsMHgxNSwweDY2LDB4MjYsMHhmYywweDRhLDB4YzIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgyOCwweDUyLDB4MDAsCi0weDAxLDB4MDAsMHhhMywweDMwLDB4MDksMHgwMCwweDYwLDB4MTAsMHgwNCwweDAwLDB4YTIsMHgzMCwweDAwLDB4NGIsMHhjMiwweDhjLAotMHgyNSwweGIwLDB4MDMsMHgzYywweDAxLDB4MDAsMHgwNCwweDI0LDB4MDEsMHgwMCwweDQyLDB4MzgsMHhiMCwweDAzLDB4NjMsMHgzNCwKLTB4MDAsMHgwMCwweDY0LDB4YWMsMHgwMCwweDRiLDB4YzIsMHhhYywweDA0LDB4MDAsMHhhMiwweDMwLDB4MDksMHgwMCwweDQwLDB4MTAsCi0weDA4LDB4MDAsMHhhMiwweDMwLDB4MDAsMHg0YiwweGMyLDB4OGMsMHgyNSwweGIwLDB4MDMsMHgzYywweDA0LDB4MDAsMHgwNCwweDI0LAotMHgwNCwweDAwLDB4NDIsMHgzOCwweGIwLDB4MDMsMHg2MywweDM0LDB4MDAsMHgwMCwweDY0LDB4YWMsMHgwMCwweDRiLDB4YzIsMHhhYywKLTB4MDgsMHgwMCwweGEyLDB4MzAsMHgwZSwweDAwLDB4NDAsMHgxMCwweDY4LDB4MTUsMHg2NCwweDI2LDB4YzksMHg2NCwweGMyLDB4OTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHgwMCwweDQwLDB4MTgsMHgyYSwweGIwLDB4MDIsMHgzYywweDAyLDB4MDAsMHgwMywweDI0LAotMHgwMSwweDAwLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0MywweGEwLDB4YzksMHg2NCwweGMwLDB4YTAsMHgwMCwweDRiLDB4YzIsMHg4YywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4NDIsMHgzOCwweDAwLDB4NGIsMHhjMiwweGFjLDB4NjgsMHgxNSwweDY0LDB4MjYsCi0weGZjLDB4NGEsMHg4MiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDEwLDB4NTIsMHgwMCwweDEwLDB4MDAsMHg0MiwweDMwLAotMHgwZCwweDAwLDB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzksMHg2NCwweDgyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDUsMHgwMCwweDQwLDB4MTgsMHgyYSwweGIwLDB4MDIsMHgzYywweDAyLDB4MDAsMHgwMywweDI0LDB4MDEsMHgwMCwweDQyLDB4MzQsCi0weDAwLDB4MDAsMHg0MywweGEwLDB4YzksMHg2NCwweDgwLDB4YTAsMHgwMCwweDRiLDB4ODIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgxMCwweDAwLDB4NDIsMHgzOCwweDAwLDB4NGIsMHg4MiwweGFjLDB4NjgsMHgxNSwweDY0LDB4MjYsMHhmYywweDRhLDB4ODIsMHg4YywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDEwLDB4NTIsMHgwMCwweDIwLDB4MDAsMHg0MiwweDMwLDB4MGUsMHgwMCwweDQwLDB4MTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4YzksMHg2NCwweDgyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4MDAsMHg0MCwweDE4LAotMHgyYSwweGIwLDB4MDIsMHgzYywweDAyLDB4MDAsMHgwMywweDI0LDB4MDEsMHgwMCwweDQyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHhhMCwKLTB4YzksMHg2NCwweDgwLDB4YTAsMHgwMCwweDRiLDB4ODIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MjAsMHgwMCwweDQyLDB4MzgsCi0weDAwLDB4NGIsMHg4MiwweGFjLDB4NjgsMHgxNSwweDY0LDB4MjYsMHhmYywweDRhLDB4ODIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyNCwweDEwLDB4NTIsMHgwMCwweDQwLDB4MDAsMHg0MiwweDMwLDB4MGQsMHgwMCwweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4YzksMHg2NCwweDgyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4MDAsMHg0MCwweDE4LDB4MmEsMHhiMCwweDAyLDB4M2MsCi0weDAyLDB4MDAsMHgwMywweDI0LDB4MDEsMHgwMCwweDQyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHhhMCwweGM5LDB4NjQsMHg4MCwweGEwLAotMHgwMCwweDRiLDB4ODIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMCwweDQyLDB4MzgsMHgwMCwweDRiLDB4ODIsMHhhYywKLTB4NjgsMHgxNSwweDY0LDB4MjYsMHhmYywweDRhLDB4ODIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgxMCwweDUyLDB4MDAsCi0weDgwLDB4MDAsMHg0MiwweDMwLDB4MGUsMHgwMCwweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM5LDB4NjQsMHg4MiwweDkwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4MDAsMHg0MCwweDE4LDB4MmEsMHhiMCwweDAyLDB4M2MsMHgwMiwweDAwLDB4MDMsMHgyNCwKLTB4MDEsMHgwMCwweDQyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHhhMCwweGM5LDB4NjQsMHg4MCwweGEwLDB4MDAsMHg0YiwweDgyLDB4OGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwweDQyLDB4MzgsMHgwMCwweDRiLDB4ODIsMHhhYywweDY4LDB4MTUsMHg2NCwweDI2LAotMHhmYywweDRhLDB4ODIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgxMCwweDUyLDB4MDAsMHgwMCwweDAxLDB4NDIsMHgzMCwKLTB4MGQsMHgwMCwweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM5LDB4NjQsMHg4MiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA1LDB4MDAsMHg0MCwweDE4LDB4MmEsMHhiMCwweDAyLDB4M2MsMHgwMiwweDAwLDB4MDMsMHgyNCwweDAxLDB4MDAsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4NDMsMHhhMCwweGM5LDB4NjQsMHg4MCwweGEwLDB4MDAsMHg0YiwweDgyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMSwweDQyLDB4MzgsMHgwMCwweDRiLDB4ODIsMHhhYywweDY4LDB4MTUsMHg2NCwweDI2LDB4ZmMsMHg0YSwweDgyLDB4OGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgxMCwweDUyLDB4MDAsMHgwMCwweDAyLDB4NDIsMHgzMCwweDBlLDB4MDAsMHg0MCwweDEwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGM5LDB4NjQsMHg4MiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweDAwLDB4NDAsMHgxOCwKLTB4MmEsMHhiMCwweDAyLDB4M2MsMHgwMiwweDAwLDB4MDMsMHgyNCwweDAxLDB4MDAsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4YTAsCi0weGM5LDB4NjQsMHg4MCwweGEwLDB4MDAsMHg0YiwweDgyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg0MiwweDM4LAotMHgwMCwweDRiLDB4ODIsMHhhYywweDY4LDB4MTUsMHg2NCwweDI2LDB4ZmMsMHg0YSwweDgyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjQsMHgxMCwweDUyLDB4MDAsMHgwMCwweDA0LDB4NDIsMHgzMCwweDBkLDB4MDAsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGM5LDB4NjQsMHg4MiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweDAwLDB4NDAsMHgxOCwweDJhLDB4YjAsMHgwMiwweDNjLAotMHgwMiwweDAwLDB4MDMsMHgyNCwweDAxLDB4MDAsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4YTAsMHhjOSwweDY0LDB4ODAsMHhhMCwKLTB4MDAsMHg0YiwweDgyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHg0MiwweDM4LDB4MDAsMHg0YiwweDgyLDB4YWMsCi0weDY4LDB4MTUsMHg2MywweDI2LDB4ZmMsMHg0YSwweDYyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MTAsMHg1MiwweDAwLAotMHgwMCwweDA4LDB4NDIsMHgzMCwweDNhLDB4MDAsMHg0MCwweDEwLDB4MmEsMHhiMCwweDA1LDB4M2MsMHgwMCwweDAwLDB4YTgsMHg4YywKLTB4ZmYsMHgwMCwweDAyLDB4MjQsMHhmZiwweDAwLDB4MDQsMHgzMSwweDMxLDB4MDAsMHg4MiwweDEwLDB4MDAsMHg4MCwweDAyLDB4MzEsCi0weDA4LDB4MDQsMHg0MCwweDE0LDB4MDAsMHg4MCwweDAyLDB4M2MsMHgwMCwweGZmLDB4MDIsMHgzYywweDI0LDB4MTAsMHgwMiwweDAxLAotMHgwNSwweDAwLDB4NDAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzksMHg2NCwweDYyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MGIsMHgwMCwweDQwLDB4MTgsMHhmZiwweDAwLDB4MDIsMHgyNCwweDA4LDB4NjQsMHg2MiwweDkwLDB4MjAsMHhiMCwweDAzLDB4M2MsCi0weDAwLDB4MTIsMHgwMiwweDAwLDB4MjEsMHgxMCwweDQzLDB4MDAsMHgwYywweDAwLDB4NDgsMHg4YywweDI1LDB4YjAsMHgwMywweDNjLAotMHhiMCwweDAzLDB4NjMsMHgzNCwweDAwLDB4MDAsMHg2OCwweGFjLDB4ZmYsMHgwMCwweDA0LDB4MzEsMHhmZiwweDAwLDB4MDIsMHgyNCwKLTB4MWEsMHgwMCwweDgyLDB4MTAsMHg2OCwweDE1LDB4NzAsMHgyNiwweGZmLDB4MDAsMHgwMywweDMxLDB4YzAsMHg2NCwweDA1LDB4OGUsCi0weDIwLDB4MTAsMHgwMiwweDNjLDB4MDAsMHgxYSwweDAzLDB4MDAsMHgyMSwweDE4LDB4NjIsMHgwMCwweDIxLDB4MzAsMHg2MCwweDAwLAotMHg1NCwweDY0LDB4MDMsMHhhZSwweDIxLDB4MjAsMHgwMCwweDAwLDB4MDgsMHg2NCwweDA4LDB4YTIsMHgyMCwweDAwLDB4MDcsMHgyNCwKLTB4MTAsMHgwMSwweDAwLDB4MGMsMHgxMCwweDAwLDB4YTAsMHhhZiwweGZjLDB4NGEsMHgwNSwweDhlLDB4MDIsMHg4MCwweDA2LDB4M2MsCi0weDZjLDB4N2UsMHhjNCwweDhjLDB4ZmYsMHhjNywweDAyLDB4MjQsMHgyNCwweDI4LDB4YTIsMHgwMCwweDI1LDB4YjAsMHgwMiwweDNjLAotMHgwNCwweDAwLDB4ODQsMHgzNCwweDgwLDB4MDMsMHg0MiwweDM0LDB4NDEsMHhiMCwweDAzLDB4M2MsMHgwMCwweDAwLDB4NDQsMHhhYywKLTB4MDAsMHgwMCwweDY1LDB4YWMsMHg2YywweDdlLDB4YzQsMHhhYywweGZjLDB4NGEsMHgwNSwweGFlLDB4NjgsMHgxNSwweDYzLDB4MjYsCi0weDAwLDB4NGIsMHg2MiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4NDIsMHgzOCwweDAwLDB4NGIsMHg2MiwweGFjLAotMHg2OCwweDE1LDB4NjUsMHgyNiwweGZjLDB4NGEsMHhhMiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDEwLDB4NTIsMHgwMCwKLTB4MDAsMHgxMCwweDQyLDB4MzAsMHgzOCwweDAwLDB4NDAsMHgxMCwweDJhLDB4YjAsMHgwMiwweDNjLDB4MDgsMHgwMCwweDQzLDB4MzQsCi0weDAwLDB4MDAsMHg2OCwweDhjLDB4ZmYsMHgwMCwweDAyLDB4MjQsMHhmZiwweDAwLDB4MDQsMHgzMSwweDJjLDB4MDAsMHg4MiwweDEwLAotMHgwMCwweDgwLDB4MDIsMHgzMSwweGNhLDB4MDMsMHg0MCwweDE0LDB4MDAsMHg4MCwweDAyLDB4M2MsMHgwMCwweGZmLDB4MDIsMHgzYywKLTB4MjQsMHgxMCwweDAyLDB4MDEsMHgwYiwweDAwLDB4NDAsMHgxMCwweGZmLDB4MDAsMHgwMiwweDI0LDB4MTAsMHg2NCwweGEyLDB4OTAsCi0weDIwLDB4YjAsMHgwMywweDNjLDB4MDAsMHgxMiwweDAyLDB4MDAsMHgyMSwweDEwLDB4NDMsMHgwMCwweDBjLDB4MDAsMHg0OCwweDhjLAotMHgyNSwweGIwLDB4MDMsMHgzYywweGIwLDB4MDMsMHg2MywweDM0LDB4MDAsMHgwMCwweDY4LDB4YWMsMHhmZiwweDAwLDB4MDQsMHgzMSwKLTB4ZmYsMHgwMCwweDAyLDB4MjQsMHgxYSwweDAwLDB4ODIsMHgxMCwweDY4LDB4MTUsMHg3MCwweDI2LDB4ZmYsMHgwMCwweDAzLDB4MzEsCi0weGQ4LDB4NjQsMHgwNSwweDhlLDB4MjAsMHgxMCwweDAyLDB4M2MsMHgwMCwweDFhLDB4MDMsMHgwMCwweDIxLDB4MTgsMHg2MiwweDAwLAotMHgyMSwweDMwLDB4NjAsMHgwMCwweDZjLDB4NjQsMHgwMywweGFlLDB4MDEsMHgwMCwweDA0LDB4MjQsMHgxMCwweDY0LDB4MDgsMHhhMiwKLTB4MjAsMHgwMCwweDA3LDB4MjQsMHgxMCwweDAxLDB4MDAsMHgwYywweDEwLDB4MDAsMHhhMCwweGFmLDB4ZmMsMHg0YSwweDA1LDB4OGUsCi0weDAyLDB4ODAsMHgwNiwweDNjLDB4NmMsMHg3ZSwweGM0LDB4OGMsMHhmZiwweGM3LDB4MDIsMHgyNCwweDI0LDB4MjgsMHhhMiwweDAwLAotMHgyNSwweGIwLDB4MDIsMHgzYywweDEwLDB4MDAsMHg4NCwweDM0LDB4ODAsMHgwMywweDQyLDB4MzQsMHg0MSwweGIwLDB4MDMsMHgzYywKLTB4MDAsMHgwMCwweDQ0LDB4YWMsMHgwMCwweDAwLDB4NjUsMHhhYywweDZjLDB4N2UsMHhjNCwweGFjLDB4ZmMsMHg0YSwweDA1LDB4YWUsCi0weDY4LDB4MTUsMHg2MywweDI2LDB4MDAsMHg0YiwweDYyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHg0MiwweDM4LAotMHgwMCwweDRiLDB4NjIsMHhhYywweDY4LDB4MTUsMHg2NSwweDI2LDB4ZmMsMHg0YSwweGEyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjQsMHgxMCwweDUyLDB4MDAsMHgwMCwweDIwLDB4NDIsMHgzMCwweDM3LDB4MDAsMHg0MCwweDEwLDB4MmEsMHhiMCwweDAyLDB4M2MsCi0weDA0LDB4MDAsMHg0MywweDM0LDB4MDAsMHgwMCwweDY4LDB4OGMsMHhmZiwweDAwLDB4MDIsMHgyNCwweGZmLDB4MDAsMHgwNCwweDMxLAotMHhhYiwweDAzLDB4ODIsMHgxMCwweDAwLDB4ODAsMHgwMiwweDMxLDB4OTAsMHgwMywweDQwLDB4MTQsMHgwMCwweDgwLDB4MDIsMHgzYywKLTB4MDAsMHhmZiwweDAyLDB4M2MsMHgyNCwweDEwLDB4MDIsMHgwMSwweDBiLDB4MDAsMHg0MCwweDEwLDB4ZmYsMHgwMCwweDAyLDB4MjQsCi0weDBjLDB4NjQsMHhhMiwweDkwLDB4MjAsMHhiMCwweDAzLDB4M2MsMHgwMCwweDEyLDB4MDIsMHgwMCwweDIxLDB4MTAsMHg0MywweDAwLAotMHgwYywweDAwLDB4NDgsMHg4YywweDI1LDB4YjAsMHgwMywweDNjLDB4YjAsMHgwMywweDYzLDB4MzQsMHgwMCwweDAwLDB4NjgsMHhhYywKLTB4ZmYsMHgwMCwweDA0LDB4MzEsMHhmZiwweDAwLDB4MDIsMHgyNCwweDFhLDB4MDAsMHg4MiwweDEwLDB4ZmYsMHgwMCwweDAzLDB4MzEsCi0weDY4LDB4MTUsMHg3MCwweDI2LDB4Y2MsMHg2NCwweDA1LDB4OGUsMHgyMCwweDEwLDB4MDIsMHgzYywweDAwLDB4MWEsMHgwMywweDAwLAotMHgyMSwweDE4LDB4NjIsMHgwMCwweDIxLDB4MzAsMHg2MCwweDAwLDB4NjAsMHg2NCwweDAzLDB4YWUsMHgwMSwweDAwLDB4MDQsMHgyNCwKLTB4MGMsMHg2NCwweDA4LDB4YTIsMHgyMCwweDAwLDB4MDcsMHgyNCwweDEwLDB4MDEsMHgwMCwweDBjLDB4MTAsMHgwMCwweGEwLDB4YWYsCi0weGZjLDB4NGEsMHgwNSwweDhlLDB4MDIsMHg4MCwweDA2LDB4M2MsMHg2YywweDdlLDB4YzQsMHg4YywweGZmLDB4YzcsMHgwMiwweDI0LAotMHgyNCwweDI4LDB4YTIsMHgwMCwweDI1LDB4YjAsMHgwMiwweDNjLDB4MjAsMHgwMCwweDg0LDB4MzQsMHg4MCwweDAzLDB4NDIsMHgzNCwKLTB4NDEsMHhiMCwweDAzLDB4M2MsMHgwMCwweDAwLDB4NDQsMHhhYywweDAwLDB4MDAsMHg2NSwweGFjLDB4NmMsMHg3ZSwweGM0LDB4YWMsCi0weGZjLDB4NGEsMHgwNSwweGFlLDB4NjgsMHgxNSwweDYzLDB4MjYsMHgwMCwweDRiLDB4NjIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDIwLDB4NDIsMHgzOCwweDAwLDB4NGIsMHg2MiwweGFjLDB4NjgsMHgxNSwweDY1LDB4MjYsMHhmYywweDRhLDB4YTIsMHg4YywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDEwLDB4NTIsMHgwMCwweDAwLDB4ODAsMHg0MiwweDMwLDB4NTksMHgwMCwweDQwLDB4MTAsCi0weDJhLDB4YjAsMHgwNiwweDNjLDB4MGMsMHgwMCwweGMzLDB4MzQsMHgwMCwweDAwLDB4NjgsMHg4YywweGZmLDB4MDAsMHgwNywweDI0LAotMHhmZiwweDAwLDB4MDQsMHgzMSwweDc4LDB4MDMsMHg4NywweDEwLDB4MDAsMHg4MCwweDAyLDB4MzEsMHgyNCwweDAwLDB4NDAsMHgxNCwKLTB4MDAsMHg4MCwweDAyLDB4M2MsMHgwMCwweGZmLDB4MDIsMHgzYywweDI0LDB4MTAsMHgwMiwweDAxLDB4MjIsMHgwMCwweDQwLDB4MTAsCi0weGZmLDB4MDAsMHgwMiwweDI0LDB4NDAsMHgwMCwweGM2LDB4MzQsMHgwMCwweDAwLDB4YzIsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHhmZiwweDAwLDB4NDQsMHgzMCwweDBmLDB4MDAsMHg4NywweDEwLDB4NjgsMHgxNSwweDYyLDB4MjYsMHhlOCwweDYzLDB4YTQsMHhhMCwKLTB4MDAsMHgwMCwweGMyLDB4OTAsMHhmZiwweDAwLDB4ODMsMHgzMCwweGZmLDB4MDAsMHg0NCwweDMwLDB4MDksMHgwMCwweDgzLDB4MTAsCi0weDY4LDB4MTUsMHg2MiwweDI2LDB4MjEsMHgzOCwweGEwLDB4MDAsMHgyMSwweDI4LDB4YzAsMHgwMCwweDAwLDB4MDAsMHhhMiwweDkwLAotMHgyMSwweDE4LDB4ODAsMHgwMCwweGZkLDB4ZmYsMHg2MiwweDE0LDB4ZmYsMHgwMCwweDQ0LDB4MzAsMHhlOCwweDYzLDB4ZTMsMHhhMCwKLTB4NjgsMHgxNSwweDYyLDB4MjYsMHhlOCwweDYzLDB4NDMsMHg5MCwweDIwLDB4YjAsMHgwMiwweDNjLDB4MDAsMHgxYSwweDAzLDB4MDAsCi0weDIxLDB4MTgsMHg2MiwweDAwLDB4MGMsMHgwMCwweDY4LDB4OGMsMHgyNSwweGIwLDB4MDIsMHgzYywweGIwLDB4MDMsMHg0MiwweDM0LAotMHhmZiwweDAwLDB4MDQsMHgzMSwweDAwLDB4MDAsMHg0OCwweGFjLDB4MTYsMHgxNywweDAwLDB4MDgsMHhmZiwweDAwLDB4MDIsMHgyNCwKLTB4MDAsMHgwMCwweDYyLDB4YWMsMHhmZiwweDAwLDB4MDIsMHgyNCwweDI0LDB4MDAsMHg4MiwweDEwLDB4NjgsMHgxNSwweDcwLDB4MjYsCi0weGZmLDB4MDAsMHgwMywweDMxLDB4OTAsMHg2NCwweDA1LDB4OGUsMHgyMCwweDEwLDB4MDIsMHgzYywweDAwLDB4MWEsMHgwMywweDAwLAotMHgyMSwweDE4LDB4NjIsMHgwMCwweDIxLDB4MzAsMHg2MCwweDAwLDB4ZTgsMHg2MywweDA4LDB4YTIsMHgyNCwweDY0LDB4MDMsMHhhZSwKLTB4MDMsMHgwMCwweDA0LDB4MjQsMHgyMCwweDAwLDB4MDcsMHgyNCwweDEwLDB4MDEsMHgwMCwweDBjLDB4MTAsMHgwMCwweGEwLDB4YWYsCi0weDAyLDB4ODAsMHgwYSwweDNjLDB4N2MsMHg3ZSwweDQ3LDB4OTEsMHgwMiwweDgwLDB4MDksMHgzYywweDZjLDB4N2UsMHgyNSwweDhkLAotMHhmYywweDRhLDB4MDYsMHg4ZSwweDAxLDB4MDAsMHgwOCwweDNjLDB4ODAsMHhmZiwweDAyLDB4MjQsMHgyNSwweDM4LDB4ZTIsMHgwMCwKLTB4MDAsMHg4MCwweDAzLDB4MzUsMHg4MCwweDAwLDB4YTUsMHgzNCwweDI3LDB4MTgsMHgwMywweDAwLDB4MDAsMHgyNiwweDA3LDB4MDAsCi0weDI1LDB4YjAsMHgwMiwweDNjLDB4MjQsMHgzMCwweGMzLDB4MDAsMHgyNSwweDIwLDB4ODUsMHgwMCwweDgwLDB4MDMsMHg0MiwweDM0LAotMHg0MSwweGIwLDB4MDMsMHgzYywweDAwLDB4MDAsMHg0NCwweGFjLDB4MjcsMHg4OCwweDA4LDB4MDAsMHgwMCwweDAwLDB4NjYsMHhhYywKLTB4NmMsMHg3ZSwweDI1LDB4YWQsMHg3YywweDdlLDB4NDcsMHhhMSwweGZjLDB4NGEsMHgwNiwweGFlLDB4NjgsMHgxNSwweDYzLDB4MjYsCi0weDAwLDB4NGIsMHg2MiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4NDIsMHgzOCwweDAwLDB4NGIsMHg2MiwweGFjLAotMHg2OCwweDE1LDB4NjUsMHgyNiwweGZjLDB4NGEsMHhhMiwweDhjLDB4MDEsMHgwMCwweDAzLDB4M2MsMHgyNCwweDEwLDB4NTIsMHgwMCwKLTB4MjQsMHgxMCwweDUxLDB4MDAsMHgyNCwweDEwLDB4NDMsMHgwMCwweDU2LDB4MDAsMHg0MCwweDEwLDB4MmEsMHhiMCwweDA2LDB4M2MsCi0weDEwLDB4MDAsMHhjMywweDM0LDB4MDAsMHgwMCwweDY4LDB4OGMsMHhmZiwweDAwLDB4MDcsMHgyNCwweGZmLDB4MDAsMHgwNCwweDMxLAotMHgyMywweDAzLDB4ODcsMHgxMCwweDI1LDB4YjAsMHgwMiwweDNjLDB4MDAsMHg4MCwweDAyLDB4MzEsMHgyMywweDAwLDB4NDAsMHgxNCwKLTB4MDAsMHg4MCwweDAyLDB4M2MsMHgwMCwweGZmLDB4MDIsMHgzYywweDI0LDB4MTAsMHgwMiwweDAxLDB4MjEsMHgwMCwweDQwLDB4MTAsCi0weGZmLDB4MDAsMHgwMiwweDI0LDB4NDEsMHgwMCwweGM2LDB4MzQsMHgwMCwweDAwLDB4YzIsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHhmZiwweDAwLDB4NDQsMHgzMCwweDBlLDB4MDAsMHg4NywweDEwLDB4NjgsMHgxNSwweDYyLDB4MjYsMHhlYywweDYzLDB4YTQsMHhhMCwKLTB4MDAsMHgwMCwweGMyLDB4OTAsMHhmZiwweDAwLDB4ODMsMHgzMCwweGZmLDB4MDAsMHg0NCwweDMwLDB4MDcsMHgwMCwweDgzLDB4MTAsCi0weDIxLDB4MzgsMHhhMCwweDAwLDB4MjEsMHgyOCwweGMwLDB4MDAsMHgwMCwweDAwLDB4YTIsMHg5MCwweDIxLDB4MTgsMHg4MCwweDAwLAotMHhmZCwweGZmLDB4NjIsMHgxNCwweGZmLDB4MDAsMHg0NCwweDMwLDB4ZWMsMHg2MywweGUzLDB4YTAsMHg2OCwweDE1LDB4NjIsMHgyNiwKLTB4ZWMsMHg2MywweDQzLDB4OTAsMHgyMCwweGIwLDB4MDIsMHgzYywweDAwLDB4MWEsMHgwMywweDAwLDB4MjEsMHgxOCwweDYyLDB4MDAsCi0weDBjLDB4MDAsMHg2OCwweDhjLDB4MjUsMHhiMCwweDAyLDB4M2MsMHhiMCwweDAzLDB4NDIsMHgzNCwweGZmLDB4MDAsMHgwNCwweDMxLAotMHgwMCwweDAwLDB4NDgsMHhhYywweDc1LDB4MTcsMHgwMCwweDA4LDB4ZmYsMHgwMCwweDAyLDB4MjQsMHgwMCwweDAwLDB4NjIsMHhhYywKLTB4ZmYsMHgwMCwweDAyLDB4MjQsMHgyMiwweDAwLDB4ODIsMHgxMCwweDY4LDB4MTUsMHg3MCwweDI2LDB4ZmYsMHgwMCwweDAzLDB4MzEsCi0weDkwLDB4NjQsMHgwNSwweDhlLDB4MjAsMHgxMCwweDAyLDB4M2MsMHgwMCwweDFhLDB4MDMsMHgwMCwweDIxLDB4MTgsMHg2MiwweDAwLAotMHgyMSwweDMwLDB4NjAsMHgwMCwweGVjLDB4NjMsMHgwOCwweGEyLDB4MjQsMHg2NCwweDAzLDB4YWUsMHgwMywweDAwLDB4MDQsMHgyNCwKLTB4MjAsMHgwMCwweDA3LDB4MjQsMHgxMCwweDAxLDB4MDAsMHgwYywweDEwLDB4MDAsMHhhMCwweGFmLDB4MDIsMHg4MCwweDA5LDB4M2MsCi0weDdjLDB4N2UsMHgyNywweDkxLDB4MDIsMHg4MCwweDA4LDB4M2MsMHg2YywweDdlLDB4MDUsMHg4ZCwweGZjLDB4NGEsMHgwNiwweDhlLAotMHgwMSwweDAwLDB4MDIsMHgzYywweDAwLDB4ODAsMHg0MiwweDM0LDB4NDAsMHgwMCwweGU3LDB4MzQsMHgyNywweDEwLDB4MDIsMHgwMCwKLTB4MjQsMHgzMCwweGMyLDB4MDAsMHg4MCwweDAwLDB4YTUsMHgzNCwweDAwLDB4MjYsMHgwNywweDAwLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weDI1LDB4MjAsMHg4NSwweDAwLDB4ODAsMHgwMywweDQyLDB4MzQsMHg0MSwweGIwLDB4MDMsMHgzYywweDAwLDB4MDAsMHg0NCwweGFjLAotMHgwMCwweDAwLDB4NjYsMHhhYywweDZjLDB4N2UsMHgwNSwweGFkLDB4N2MsMHg3ZSwweDI3LDB4YTEsMHhmYywweDRhLDB4MDYsMHhhZSwKLTB4NjgsMHgxNSwweDYyLDB4MjYsMHgwMCwweDRiLDB4NDMsMHg4YywweDAxLDB4MDAsMHgwNCwweDNjLDB4MjYsMHgxOCwweDY0LDB4MDAsCi0weDAwLDB4NGIsMHg0MywweGFjLDB4NjgsMHgxNSwweDY1LDB4MjYsMHhmYywweDRhLDB4YTIsMHg4YywweDAyLDB4MDAsMHgwMywweDNjLAotMHgyNCwweDEwLDB4NTIsMHgwMCwweDI0LDB4MTAsMHg0MywweDAwLDB4NWEsMHgwMCwweDQwLDB4MTAsMHgyYSwweGIwLDB4MDYsMHgzYywKLTB4MTQsMHgwMCwweGMzLDB4MzQsMHgwMCwweDAwLDB4NjgsMHg4YywweGZmLDB4MDAsMHgwNywweDI0LDB4ZmYsMHgwMCwweDA0LDB4MzEsCi0weGNjLDB4MDIsMHg4NywweDEwLDB4MjUsMHhiMCwweDAyLDB4M2MsMHgwMCwweDgwLDB4MDIsMHgzMSwweDIzLDB4MDAsMHg0MCwweDE0LAotMHgwMCwweDgwLDB4MDIsMHgzYywweDAwLDB4ZmYsMHgwMiwweDNjLDB4MjQsMHgxMCwweDAyLDB4MDEsMHgyMSwweDAwLDB4NDAsMHgxMCwKLTB4ZmYsMHgwMCwweDAyLDB4MjQsMHg0MiwweDAwLDB4YzYsMHgzNCwweDAwLDB4MDAsMHhjMiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGZmLDB4MDAsMHg0NCwweDMwLDB4MGUsMHgwMCwweDg3LDB4MTAsMHg2OCwweDE1LDB4NjIsMHgyNiwweGYwLDB4NjMsMHhhNCwweGEwLAotMHgwMCwweDAwLDB4YzIsMHg5MCwweGZmLDB4MDAsMHg4MywweDMwLDB4ZmYsMHgwMCwweDQ0LDB4MzAsMHgwNywweDAwLDB4ODMsMHgxMCwKLTB4MjEsMHgzOCwweGEwLDB4MDAsMHgyMSwweDI4LDB4YzAsMHgwMCwweDAwLDB4MDAsMHhhMiwweDkwLDB4MjEsMHgxOCwweDgwLDB4MDAsCi0weGZkLDB4ZmYsMHg2MiwweDE0LDB4ZmYsMHgwMCwweDQ0LDB4MzAsMHhmMCwweDYzLDB4ZTMsMHhhMCwweDY4LDB4MTUsMHg2MiwweDI2LAotMHhmMCwweDYzLDB4NDMsMHg5MCwweDIwLDB4YjAsMHgwMiwweDNjLDB4MDAsMHgxYSwweDAzLDB4MDAsMHgyMSwweDE4LDB4NjIsMHgwMCwKLTB4MGMsMHgwMCwweDY4LDB4OGMsMHgyNSwweGIwLDB4MDIsMHgzYywweGIwLDB4MDMsMHg0MiwweDM0LDB4ZmYsMHgwMCwweDA0LDB4MzEsCi0weDAwLDB4MDAsMHg0OCwweGFjLDB4ZDEsMHgxNywweDAwLDB4MDgsMHhmZiwweDAwLDB4MDIsMHgyNCwweDAwLDB4MDAsMHg2MiwweGFjLAotMHhmZiwweDAwLDB4MDIsMHgyNCwweDI1LDB4MDAsMHg4MiwweDEwLDB4NjgsMHgxNSwweDcwLDB4MjYsMHhmZiwweDAwLDB4MDMsMHgzMSwKLTB4OWMsMHg2NCwweDA1LDB4OGUsMHgyMCwweDEwLDB4MDIsMHgzYywweDAwLDB4MWEsMHgwMywweDAwLDB4MjEsMHgxOCwweDYyLDB4MDAsCi0weDIxLDB4MzAsMHg2MCwweDAwLDB4ZjAsMHg2MywweDA4LDB4YTIsMHgzMCwweDY0LDB4MDMsMHhhZSwweDA0LDB4MDAsMHgwNCwweDI0LAotMHgyMCwweDAwLDB4MDcsMHgyNCwweDEwLDB4MDEsMHgwMCwweDBjLDB4MTAsMHgwMCwweGEwLDB4YWYsMHgwMiwweDgwLDB4MGEsMHgzYywKLTB4N2MsMHg3ZSwweDQ3LDB4OTEsMHgwMiwweDgwLDB4MDksMHgzYywweDZjLDB4N2UsMHgyNSwweDhkLDB4ZmMsMHg0YSwweDA2LDB4OGUsCi0weDA2LDB4MDAsMHgwMiwweDNjLDB4MjAsMHgwMCwweGU3LDB4MzQsMHgyNywweDEwLDB4MDIsMHgwMCwweDI0LDB4MzAsMHhjMiwweDAwLAotMHgwMCwweDAxLDB4YTUsMHgzNCwweDI1LDB4YjAsMHgwMywweDNjLDB4MDQsMHgwMCwweDAyLDB4M2MsMHgwMCwweDI2LDB4MDcsMHgwMCwKLTB4MjYsMHg4OCwweDIyLDB4MDIsMHhiMCwweDAzLDB4NjgsMHgzNCwweDI1LDB4MjAsMHg4NSwweDAwLDB4ODAsMHgwMywweDYzLDB4MzQsCi0weDQxLDB4YjAsMHgwMiwweDNjLDB4MDAsMHgwMCwweDY0LDB4YWMsMHgwMCwweDAwLDB4NDYsMHhhYywweDZjLDB4N2UsMHgyNSwweGFkLAotMHg3YywweDdlLDB4NDcsMHhhMSwweGZjLDB4NGEsMHgwNiwweGFlLDB4MDAsMHgwMCwweDExLDB4YWQsMHg2OCwweDE1LDB4NjIsMHgyNiwKLTB4MDAsMHg0YiwweDQzLDB4OGMsMHgwMiwweDAwLDB4MDQsMHgzYywweDI2LDB4MTgsMHg2NCwweDAwLDB4MDAsMHg0YiwweDQzLDB4YWMsCi0weDY4LDB4MTUsMHg2NSwweDI2LDB4ZmMsMHg0YSwweGEyLDB4OGMsMHgwNCwweDAwLDB4MDMsMHgzYywweDI0LDB4MTAsMHg1MiwweDAwLAotMHgyNCwweDEwLDB4NTEsMHgwMCwweDI0LDB4MTAsMHg0MywweDAwLDB4NTgsMHgwMCwweDQwLDB4MTAsMHgyNSwweGIwLDB4MDMsMHgzYywKLTB4YjAsMHgwMywweDYyLDB4MzQsMHgyYSwweGIwLDB4MDksMHgzYywweDAwLDB4MDAsMHg1MSwweGFjLDB4MTgsMHgwMCwweDI2LDB4MzUsCi0weDAwLDB4MDAsMHhjOCwweDhjLDB4ZmYsMHgwMCwweDA3LDB4MjQsMHhmZiwweDAwLDB4MDQsMHgzMSwweDNhLDB4MDIsMHg4NywweDEwLAotMHgwNCwweDAwLDB4MDIsMHgyNCwweDAwLDB4ODAsMHgwMiwweDMxLDB4MjMsMHgwMCwweDQwLDB4MTQsMHgwMCwweDgwLDB4MDIsMHgzYywKLTB4MDAsMHhmZiwweDAyLDB4M2MsMHgyNCwweDEwLDB4MDIsMHgwMSwweDIxLDB4MDAsMHg0MCwweDEwLDB4ZmYsMHgwMCwweDAyLDB4MjQsCi0weDQzLDB4MDAsMHgyNiwweDM1LDB4MDAsMHgwMCwweGMyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MDAsMHg0NCwweDMwLAotMHgwZSwweDAwLDB4ODcsMHgxMCwweDY4LDB4MTUsMHg2MiwweDI2LDB4ZjQsMHg2MywweGE0LDB4YTAsMHgwMCwweDAwLDB4YzIsMHg5MCwKLTB4ZmYsMHgwMCwweDgzLDB4MzAsMHhmZiwweDAwLDB4NDQsMHgzMCwweDA3LDB4MDAsMHg4MywweDEwLDB4MjEsMHgzOCwweGEwLDB4MDAsCi0weDIxLDB4MjgsMHhjMCwweDAwLDB4MDAsMHgwMCwweGEyLDB4OTAsMHgyMSwweDE4LDB4ODAsMHgwMCwweGZkLDB4ZmYsMHg2MiwweDE0LAotMHhmZiwweDAwLDB4NDQsMHgzMCwweGY0LDB4NjMsMHhlMywweGEwLDB4NjgsMHgxNSwweDYyLDB4MjYsMHhmNCwweDYzLDB4NDMsMHg5MCwKLTB4MjAsMHhiMCwweDAyLDB4M2MsMHgwMCwweDFhLDB4MDMsMHgwMCwweDIxLDB4MTgsMHg2MiwweDAwLDB4MGMsMHgwMCwweDY4LDB4OGMsCi0weDI1LDB4YjAsMHgwMiwweDNjLDB4YjAsMHgwMywweDQyLDB4MzQsMHhmZiwweDAwLDB4MDQsMHgzMSwweDAwLDB4MDAsMHg0OCwweGFjLAotMHgzNCwweDE4LDB4MDAsMHgwOCwweGZmLDB4MDAsMHgwMiwweDI0LDB4MDAsMHgwMCwweGMyLDB4YWMsMHhmZiwweDAwLDB4MDIsMHgyNCwKLTB4MjEsMHgwMCwweDgyLDB4MTAsMHg2OCwweDE1LDB4NzAsMHgyNiwweGZmLDB4MDAsMHgwMywweDMxLDB4OWMsMHg2NCwweDA1LDB4OGUsCi0weDIwLDB4MTAsMHgwMiwweDNjLDB4MDAsMHgxYSwweDAzLDB4MDAsMHgyMSwweDE4LDB4NjIsMHgwMCwweDIxLDB4MzAsMHg2MCwweDAwLAotMHhmNCwweDYzLDB4MDgsMHhhMiwweDMwLDB4NjQsMHgwMywweGFlLDB4MDQsMHgwMCwweDA0LDB4MjQsMHgyMCwweDAwLDB4MDcsMHgyNCwKLTB4MTAsMHgwMSwweDAwLDB4MGMsMHgxMCwweDAwLDB4YTAsMHhhZiwweDAyLDB4ODAsMHgwOSwweDNjLDB4N2MsMHg3ZSwweDI3LDB4OTEsCi0weDAyLDB4ODAsMHgwOCwweDNjLDB4NmMsMHg3ZSwweDA1LDB4OGQsMHhmYywweDRhLDB4MDYsMHg4ZSwweDA2LDB4MDAsMHgwMiwweDNjLAotMHgxMCwweDAwLDB4ZTcsMHgzNCwweDI3LDB4MTAsMHgwMiwweDAwLDB4MjQsMHgzMCwweGMyLDB4MDAsMHgwMCwweDAxLDB4YTUsMHgzNCwKLTB4MDAsMHgyNiwweDA3LDB4MDAsMHgyNSwweGIwLDB4MDIsMHgzYywweDI1LDB4MjAsMHg4NSwweDAwLDB4ODAsMHgwMywweDQyLDB4MzQsCi0weDQxLDB4YjAsMHgwMywweDNjLDB4MDAsMHgwMCwweDQ0LDB4YWMsMHgwMCwweDAwLDB4NjYsMHhhYywweDZjLDB4N2UsMHgwNSwweGFkLAotMHg3YywweDdlLDB4MjcsMHhhMSwweGZjLDB4NGEsMHgwNiwweGFlLDB4NjgsMHgxNSwweDYyLDB4MjYsMHgwMCwweDRiLDB4NDMsMHg4YywKLTB4MDQsMHgwMCwweDA0LDB4M2MsMHgyNiwweDE4LDB4NjQsMHgwMCwweDAwLDB4NGIsMHg0MywweGFjLDB4NjgsMHgxNSwweDY1LDB4MjYsCi0weGZjLDB4NGEsMHhhMiwweDhjLDB4MDgsMHgwMCwweDAzLDB4M2MsMHgyNCwweDEwLDB4NTIsMHgwMCwweDI0LDB4MTAsMHg0MywweDAwLAotMHg1YSwweDAwLDB4NDAsMHgxMCwweDJhLDB4YjAsMHgwNiwweDNjLDB4MWMsMHgwMCwweGMzLDB4MzQsMHgwMCwweDAwLDB4NjgsMHg4YywKLTB4ZmYsMHgwMCwweDA3LDB4MjQsMHhmZiwweDAwLDB4MDQsMHgzMSwweDEzLDB4MDIsMHg4NywweDEwLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weDAwLDB4ODAsMHgwMiwweDMxLDB4MjMsMHgwMCwweDQwLDB4MTQsMHgwMCwweDgwLDB4MDIsMHgzYywweDAwLDB4ZmYsMHgwMiwweDNjLAotMHgyNCwweDEwLDB4MDIsMHgwMSwweDIxLDB4MDAsMHg0MCwweDEwLDB4ZmYsMHgwMCwweDAyLDB4MjQsMHg0NCwweDAwLDB4YzYsMHgzNCwKLTB4MDAsMHgwMCwweGMyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MDAsMHg0NCwweDMwLDB4MGUsMHgwMCwweDg3LDB4MTAsCi0weDY4LDB4MTUsMHg2MiwweDI2LDB4ZjgsMHg2MywweGE0LDB4YTAsMHgwMCwweDAwLDB4YzIsMHg5MCwweGZmLDB4MDAsMHg4MywweDMwLAotMHhmZiwweDAwLDB4NDQsMHgzMCwweDA3LDB4MDAsMHg4MywweDEwLDB4MjEsMHgzOCwweGEwLDB4MDAsMHgyMSwweDI4LDB4YzAsMHgwMCwKLTB4MDAsMHgwMCwweGEyLDB4OTAsMHgyMSwweDE4LDB4ODAsMHgwMCwweGZkLDB4ZmYsMHg2MiwweDE0LDB4ZmYsMHgwMCwweDQ0LDB4MzAsCi0weGY4LDB4NjMsMHhlMywweGEwLDB4NjgsMHgxNSwweDYyLDB4MjYsMHhmOCwweDYzLDB4NDMsMHg5MCwweDIwLDB4YjAsMHgwMiwweDNjLAotMHgwMCwweDFhLDB4MDMsMHgwMCwweDIxLDB4MTgsMHg2MiwweDAwLDB4MGMsMHgwMCwweDY4LDB4OGMsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4YjAsMHgwMywweDQyLDB4MzQsMHhmZiwweDAwLDB4MDQsMHgzMSwweDAwLDB4MDAsMHg0OCwweGFjLDB4OGYsMHgxOCwweDAwLDB4MDgsCi0weGZmLDB4MDAsMHgwMiwweDI0LDB4MDAsMHgwMCwweDYyLDB4YWMsMHhmZiwweDAwLDB4MDIsMHgyNCwweDI1LDB4MDAsMHg4MiwweDEwLAotMHg2OCwweDE1LDB4NzAsMHgyNiwweGZmLDB4MDAsMHgwMywweDMxLDB4YTgsMHg2NCwweDA1LDB4OGUsMHgyMCwweDEwLDB4MDIsMHgzYywKLTB4MDAsMHgxYSwweDAzLDB4MDAsMHgyMSwweDE4LDB4NjIsMHgwMCwweDIxLDB4MzAsMHg2MCwweDAwLDB4ZjgsMHg2MywweDA4LDB4YTIsCi0weDNjLDB4NjQsMHgwMywweGFlLDB4MDUsMHgwMCwweDA0LDB4MjQsMHgyMCwweDAwLDB4MDcsMHgyNCwweDEwLDB4MDEsMHgwMCwweDBjLAotMHgxMCwweDAwLDB4YTAsMHhhZiwweDAyLDB4ODAsMHgwYSwweDNjLDB4N2MsMHg3ZSwweDQ3LDB4OTEsMHgwMiwweDgwLDB4MDksMHgzYywKLTB4NmMsMHg3ZSwweDI1LDB4OGQsMHhmYywweDRhLDB4MDYsMHg4ZSwweDE4LDB4MDAsMHgwMiwweDNjLDB4MDgsMHgwMCwweGU3LDB4MzQsCi0weDI3LDB4MTAsMHgwMiwweDAwLDB4MjQsMHgzMCwweGMyLDB4MDAsMHgwMCwweDAyLDB4YTUsMHgzNCwweDI1LDB4YjAsMHgwMywweDNjLAotMHgxMCwweDAwLDB4MDIsMHgzYywweDAwLDB4MjYsMHgwNywweDAwLDB4MjYsMHg4OCwweDIyLDB4MDIsMHhiMCwweDAzLDB4NjgsMHgzNCwKLTB4MjUsMHgyMCwweDg1LDB4MDAsMHg4MCwweDAzLDB4NjMsMHgzNCwweDQxLDB4YjAsMHgwMiwweDNjLDB4MDAsMHgwMCwweDY0LDB4YWMsCi0weDAwLDB4MDAsMHg0NiwweGFjLDB4NmMsMHg3ZSwweDI1LDB4YWQsMHg3YywweDdlLDB4NDcsMHhhMSwweGZjLDB4NGEsMHgwNiwweGFlLAotMHgwMCwweDAwLDB4MTEsMHhhZCwweDY4LDB4MTUsMHg2MiwweDI2LDB4MDAsMHg0YiwweDQzLDB4OGMsMHgwOCwweDAwLDB4MDQsMHgzYywKLTB4MjYsMHgxOCwweDY0LDB4MDAsMHgwMCwweDRiLDB4NDMsMHhhYywweDY4LDB4MTUsMHg2NSwweDI2LDB4ZmMsMHg0YSwweGEyLDB4OGMsCi0weDEwLDB4MDAsMHgwMywweDNjLDB4MjQsMHgxMCwweDUyLDB4MDAsMHgyNCwweDEwLDB4NTEsMHgwMCwweDI0LDB4MTAsMHg0MywweDAwLAotMHg1OCwweDAwLDB4NDAsMHgxMCwweDI1LDB4YjAsMHgwNiwweDNjLDB4YjAsMHgwMywweGMyLDB4MzQsMHgyYSwweGIwLDB4MDksMHgzYywKLTB4MDAsMHgwMCwweDUxLDB4YWMsMHgyMCwweDAwLDB4MjMsMHgzNSwweDAwLDB4MDAsMHg2OCwweDhjLDB4ZmYsMHgwMCwweDA3LDB4MjQsCi0weGZmLDB4MDAsMHgwNCwweDMxLDB4ODAsMHgwMSwweDg3LDB4MTAsMHg5MCwweDAzLDB4YzIsMHgzNCwweDAwLDB4ODAsMHgwMiwweDMxLAotMHgyMywweDAwLDB4NDAsMHgxNCwweDAwLDB4ODAsMHgwMiwweDNjLDB4MDAsMHhmZiwweDAyLDB4M2MsMHgyNCwweDEwLDB4MDIsMHgwMSwKLTB4MjEsMHgwMCwweDQwLDB4MTAsMHhmZiwweDAwLDB4MDIsMHgyNCwweDQ1LDB4MDAsMHgyNiwweDM1LDB4MDAsMHgwMCwweGMyLDB4OTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHgwMCwweDQ0LDB4MzAsMHgwZSwweDAwLDB4ODcsMHgxMCwweDY4LDB4MTUsMHg2MiwweDI2LAotMHgwNCwweDY0LDB4YTQsMHhhMCwweDAwLDB4MDAsMHhjMiwweDkwLDB4ZmYsMHgwMCwweDgzLDB4MzAsMHhmZiwweDAwLDB4NDQsMHgzMCwKLTB4MDcsMHgwMCwweDgzLDB4MTAsMHgyMSwweDM4LDB4YTAsMHgwMCwweDIxLDB4MjgsMHhjMCwweDAwLDB4MDAsMHgwMCwweGEyLDB4OTAsCi0weDIxLDB4MTgsMHg4MCwweDAwLDB4ZmQsMHhmZiwweDYyLDB4MTQsMHhmZiwweDAwLDB4NDQsMHgzMCwweDA0LDB4NjQsMHhlMywweGEwLAotMHg2OCwweDE1LDB4NjIsMHgyNiwweDA0LDB4NjQsMHg0MywweDkwLDB4MjAsMHhiMCwweDAyLDB4M2MsMHgwMCwweDFhLDB4MDMsMHgwMCwKLTB4MjEsMHgxOCwweDYyLDB4MDAsMHgwYywweDAwLDB4NjgsMHg4YywweDI1LDB4YjAsMHgwMiwweDNjLDB4YjAsMHgwMywweDQyLDB4MzQsCi0weGZmLDB4MDAsMHgwNCwweDMxLDB4MDAsMHgwMCwweDQ4LDB4YWMsMHhmMiwweDE4LDB4MDAsMHgwOCwweGZmLDB4MDAsMHgwMiwweDI0LAotMHgwMCwweDAwLDB4NjIsMHhhYywweGZmLDB4MDAsMHgwMiwweDI0LDB4MjEsMHgwMCwweDgyLDB4MTAsMHg2OCwweDE1LDB4NzAsMHgyNiwKLTB4ZmYsMHgwMCwweDAzLDB4MzEsMHhhOCwweDY0LDB4MDUsMHg4ZSwweDIwLDB4MTAsMHgwMiwweDNjLDB4MDAsMHgxYSwweDAzLDB4MDAsCi0weDIxLDB4MTgsMHg2MiwweDAwLDB4MjEsMHgzMCwweDYwLDB4MDAsMHgwNCwweDY0LDB4MDgsMHhhMiwweDNjLDB4NjQsMHgwMywweGFlLAotMHgwNSwweDAwLDB4MDQsMHgyNCwweDIwLDB4MDAsMHgwNywweDI0LDB4MTAsMHgwMSwweDAwLDB4MGMsMHgxMCwweDAwLDB4YTAsMHhhZiwKLTB4MDIsMHg4MCwweDA5LDB4M2MsMHg3YywweDdlLDB4MjcsMHg5MSwweDAyLDB4ODAsMHgwOCwweDNjLDB4NmMsMHg3ZSwweDA1LDB4OGQsCi0weGZjLDB4NGEsMHgwNiwweDhlLDB4MTgsMHgwMCwweDAyLDB4M2MsMHgwMSwweDAwLDB4ZTcsMHgzNCwweDI3LDB4MTAsMHgwMiwweDAwLAotMHgyNCwweDMwLDB4YzIsMHgwMCwweDAwLDB4MDIsMHhhNSwweDM0LDB4MDAsMHgyNiwweDA3LDB4MDAsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4MjUsMHgyMCwweDg1LDB4MDAsMHg4MCwweDAzLDB4NDIsMHgzNCwweDQxLDB4YjAsMHgwMywweDNjLDB4MDAsMHgwMCwweDQ0LDB4YWMsCi0weDAwLDB4MDAsMHg2NiwweGFjLDB4NmMsMHg3ZSwweDA1LDB4YWQsMHg3YywweDdlLDB4MjcsMHhhMSwweGZjLDB4NGEsMHgwNiwweGFlLAotMHg2OCwweDE1LDB4NjIsMHgyNiwweDAwLDB4NGIsMHg0MywweDhjLDB4MTAsMHgwMCwweDA0LDB4M2MsMHgyNiwweDE4LDB4NjQsMHgwMCwKLTB4MDAsMHg0YiwweDQzLDB4YWMsMHg2OCwweDE1LDB4NjUsMHgyNiwweGZjLDB4NGEsMHhhMiwweDhjLDB4MjAsMHgwMCwweDAzLDB4M2MsCi0weDI0LDB4MTAsMHg1MiwweDAwLDB4MjQsMHgxMCwweDQzLDB4MDAsMHg1YSwweDAwLDB4NDAsMHgxMCwweDJhLDB4YjAsMHgwNiwweDNjLAotMHgyNCwweDAwLDB4YzMsMHgzNCwweDAwLDB4MDAsMHg2OCwweDhjLDB4ZmYsMHgwMCwweDA3LDB4MjQsMHhmZiwweDAwLDB4MDQsMHgzMSwKLTB4MjgsMHgwMSwweDg3LDB4MTAsMHgyNSwweGIwLDB4MDIsMHgzYywweDAwLDB4ODAsMHgwMiwweDMxLDB4MjMsMHgwMCwweDQwLDB4MTQsCi0weDAwLDB4ODAsMHgwMiwweDNjLDB4MDAsMHhmZiwweDAyLDB4M2MsMHgyNCwweDEwLDB4MDIsMHgwMSwweDIxLDB4MDAsMHg0MCwweDEwLAotMHhmZiwweDAwLDB4MDIsMHgyNCwweDQ2LDB4MDAsMHhjNiwweDM0LDB4MDAsMHgwMCwweGMyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4ZmYsMHgwMCwweDQ0LDB4MzAsMHgwZSwweDAwLDB4ODcsMHgxMCwweDY4LDB4MTUsMHg2MiwweDI2LDB4ZmMsMHg2MywweGE0LDB4YTAsCi0weDAwLDB4MDAsMHhjMiwweDkwLDB4ZmYsMHgwMCwweDgzLDB4MzAsMHhmZiwweDAwLDB4NDQsMHgzMCwweDA3LDB4MDAsMHg4MywweDEwLAotMHgyMSwweDM4LDB4YTAsMHgwMCwweDIxLDB4MjgsMHhjMCwweDAwLDB4MDAsMHgwMCwweGEyLDB4OTAsMHgyMSwweDE4LDB4ODAsMHgwMCwKLTB4ZmQsMHhmZiwweDYyLDB4MTQsMHhmZiwweDAwLDB4NDQsMHgzMCwweGZjLDB4NjMsMHhlMywweGEwLDB4NjgsMHgxNSwweDYyLDB4MjYsCi0weGZjLDB4NjMsMHg0MywweDkwLDB4MjAsMHhiMCwweDAyLDB4M2MsMHgwMCwweDFhLDB4MDMsMHgwMCwweDIxLDB4MTgsMHg2MiwweDAwLAotMHgwYywweDAwLDB4NjgsMHg4YywweDI1LDB4YjAsMHgwMiwweDNjLDB4YjAsMHgwMywweDQyLDB4MzQsMHhmZiwweDAwLDB4MDQsMHgzMSwKLTB4MDAsMHgwMCwweDQ4LDB4YWMsMHg0ZCwweDE5LDB4MDAsMHgwOCwweGZmLDB4MDAsMHgwMiwweDI0LDB4MDAsMHgwMCwweDYyLDB4YWMsCi0weGZmLDB4MDAsMHgwMiwweDI0LDB4MjUsMHgwMCwweDgyLDB4MTAsMHg2OCwweDE1LDB4NzAsMHgyNiwweGZmLDB4MDAsMHgwMywweDMxLAotMHhiNCwweDY0LDB4MDUsMHg4ZSwweDIwLDB4MTAsMHgwMiwweDNjLDB4MDAsMHgxYSwweDAzLDB4MDAsMHgyMSwweDE4LDB4NjIsMHgwMCwKLTB4MjEsMHgzMCwweDYwLDB4MDAsMHhmYywweDYzLDB4MDgsMHhhMiwweDQ4LDB4NjQsMHgwMywweGFlLDB4MDYsMHgwMCwweDA0LDB4MjQsCi0weDIwLDB4MDAsMHgwNywweDI0LDB4MTAsMHgwMSwweDAwLDB4MGMsMHgxMCwweDAwLDB4YTAsMHhhZiwweDAyLDB4ODAsMHgwYSwweDNjLAotMHg3YywweDdlLDB4NDcsMHg5MSwweDAyLDB4ODAsMHgwOSwweDNjLDB4NmMsMHg3ZSwweDI1LDB4OGQsMHhmYywweDRhLDB4MDYsMHg4ZSwKLTB4NjAsMHgwMCwweDAyLDB4M2MsMHgwNCwweDAwLDB4ZTcsMHgzNCwweDI3LDB4MTAsMHgwMiwweDAwLDB4MjQsMHgzMCwweGMyLDB4MDAsCi0weDAwLDB4MDQsMHhhNSwweDM0LDB4MjUsMHhiMCwweDAzLDB4M2MsMHg0MCwweDAwLDB4MDIsMHgzYywweDAwLDB4MjYsMHgwNywweDAwLAotMHgyNiwweDg4LDB4MjIsMHgwMiwweGIwLDB4MDMsMHg2OCwweDM0LDB4MjUsMHgyMCwweDg1LDB4MDAsMHg4MCwweDAzLDB4NjMsMHgzNCwKLTB4NDEsMHhiMCwweDAyLDB4M2MsMHgwMCwweDAwLDB4NjQsMHhhYywweDAwLDB4MDAsMHg0NiwweGFjLDB4NmMsMHg3ZSwweDI1LDB4YWQsCi0weDdjLDB4N2UsMHg0NywweGExLDB4ZmMsMHg0YSwweDA2LDB4YWUsMHgwMCwweDAwLDB4MTEsMHhhZCwweDY4LDB4MTUsMHg2MiwweDI2LAotMHgwMCwweDRiLDB4NDMsMHg4YywweDIwLDB4MDAsMHgwNCwweDNjLDB4MjYsMHgxOCwweDY0LDB4MDAsMHgwMCwweDRiLDB4NDMsMHhhYywKLTB4NjgsMHgxNSwweDY1LDB4MjYsMHhmYywweDRhLDB4YTIsMHg4YywweDQwLDB4MDAsMHgwMywweDNjLDB4MjQsMHgxMCwweDUyLDB4MDAsCi0weDI0LDB4MTAsMHg1MSwweDAwLDB4MjQsMHgxMCwweDQzLDB4MDAsMHg1YSwweDAwLDB4NDAsMHgxMCwweDY4LDB4MTUsMHg3MCwweDI2LAotMHgyNSwweGIwLDB4MDIsMHgzYywweDJhLDB4YjAsMHgwNywweDNjLDB4YjAsMHgwMywweDQyLDB4MzQsMHgwMCwweDAwLDB4NTEsMHhhYywKLTB4MjgsMHgwMCwweGUzLDB4MzQsMHgwMCwweDAwLDB4NjgsMHg4YywweGZmLDB4MDAsMHgwNiwweDI0LDB4ZmYsMHgwMCwweDA0LDB4MzEsCi0weGM5LDB4MDAsMHg4NiwweDEwLDB4MjUsMHhiZCwweDAyLDB4M2MsMHgwMCwweDgwLDB4MDIsMHgzMSwweDIzLDB4MDAsMHg0MCwweDE0LAotMHgwMCwweDgwLDB4MDIsMHgzYywweDAwLDB4ZmYsMHgwMiwweDNjLDB4MjQsMHgxMCwweDAyLDB4MDEsMHgyMSwweDAwLDB4NDAsMHgxMCwKLTB4ZmYsMHgwMCwweDAyLDB4MjQsMHg0NywweDAwLDB4ZTcsMHgzNCwweDAwLDB4MDAsMHhlMiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGZmLDB4MDAsMHg0NCwweDMwLDB4MGUsMHgwMCwweDg2LDB4MTAsMHg2OCwweDE1LDB4NjIsMHgyNiwweDAwLDB4NjQsMHhhNCwweGEwLAotMHgwMCwweDAwLDB4ZTIsMHg5MCwweGZmLDB4MDAsMHg4MywweDMwLDB4ZmYsMHgwMCwweDQ0LDB4MzAsMHgwNywweDAwLDB4ODMsMHgxMCwKLTB4MjEsMHgzMCwweGEwLDB4MDAsMHgyMSwweDI4LDB4ZTAsMHgwMCwweDAwLDB4MDAsMHhhMiwweDkwLDB4MjEsMHgxOCwweDgwLDB4MDAsCi0weGZkLDB4ZmYsMHg2MiwweDE0LDB4ZmYsMHgwMCwweDQ0LDB4MzAsMHgwMCwweDY0LDB4YzMsMHhhMCwweDY4LDB4MTUsMHg2MiwweDI2LAotMHgwMCwweDY0LDB4NDMsMHg5MCwweDIwLDB4YjAsMHgwMiwweDNjLDB4MDAsMHgxYSwweDAzLDB4MDAsMHgyMSwweDE4LDB4NjIsMHgwMCwKLTB4MGMsMHgwMCwweDY4LDB4OGMsMHgyNSwweGIwLDB4MDIsMHgzYywweGIwLDB4MDMsMHg0MiwweDM0LDB4ZmYsMHgwMCwweDA0LDB4MzEsCi0weDAwLDB4MDAsMHg0OCwweGFjLDB4YjEsMHgxOSwweDAwLDB4MDgsMHhmZiwweDAwLDB4MDIsMHgyNCwweDAwLDB4MDAsMHg2MiwweGFjLAotMHhmZiwweDAwLDB4MDIsMHgyNCwweDIxLDB4MDAsMHg4MiwweDEwLDB4NjgsMHgxNSwweDcwLDB4MjYsMHhmZiwweDAwLDB4MDMsMHgzMSwKLTB4YjQsMHg2NCwweDA1LDB4OGUsMHgyMCwweDEwLDB4MDIsMHgzYywweDAwLDB4MWEsMHgwMywweDAwLDB4MjEsMHgxOCwweDYyLDB4MDAsCi0weDIxLDB4MzAsMHg2MCwweDAwLDB4MDAsMHg2NCwweDA4LDB4YTIsMHg0OCwweDY0LDB4MDMsMHhhZSwweDA2LDB4MDAsMHgwNCwweDI0LAotMHgyMCwweDAwLDB4MDcsMHgyNCwweDEwLDB4MDEsMHgwMCwweDBjLDB4MTAsMHgwMCwweGEwLDB4YWYsMHgwMiwweDgwLDB4MDksMHgzYywKLTB4N2MsMHg3ZSwweDI3LDB4OTEsMHgwMiwweDgwLDB4MDgsMHgzYywweDZjLDB4N2UsMHgwNSwweDhkLDB4ZmMsMHg0YSwweDA2LDB4OGUsCi0weDYwLDB4MDAsMHgwMiwweDNjLDB4MDIsMHgwMCwweGU3LDB4MzQsMHgyNywweDEwLDB4MDIsMHgwMCwweDI0LDB4MzAsMHhjMiwweDAwLAotMHgwMCwweDA0LDB4YTUsMHgzNCwweDAwLDB4MjYsMHgwNywweDAwLDB4MjUsMHhiMCwweDAyLDB4M2MsMHgyNSwweDIwLDB4ODUsMHgwMCwKLTB4ODAsMHgwMywweDQyLDB4MzQsMHg0MSwweGIwLDB4MDMsMHgzYywweDAwLDB4MDAsMHg0NCwweGFjLDB4MDAsMHgwMCwweDY2LDB4YWMsCi0weDZjLDB4N2UsMHgwNSwweGFkLDB4N2MsMHg3ZSwweDI3LDB4YTEsMHhmYywweDRhLDB4MDYsMHhhZSwweDY4LDB4MTUsMHg2MiwweDI2LAotMHgwMCwweDRiLDB4NDMsMHg4YywweDQwLDB4MDAsMHgwNCwweDNjLDB4MjYsMHgxOCwweDY0LDB4MDAsMHgwMCwweDRiLDB4NDMsMHhhYywKLTB4NjgsMHgxNSwweDcwLDB4MjYsMHhmYywweDRhLDB4MDYsMHg4ZSwweDAwLDB4MDQsMHgxMSwweDNjLDB4MjQsMHgxMCwweGQyLDB4MDAsCi0weDI0LDB4MTAsMHg1MSwweDAwLDB4NGMsMHgwMCwweDQwLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MjgsMHhkMiwweDAwLAotMHgwMCwweDA4LDB4MDQsMHgzYywweDI0LDB4MTAsMHhhNCwweDAwLDB4MDgsMHgwMCwweDQwLDB4MTAsMHg4MCwweDAwLDB4MDcsMHgzYywKLTB4MDAsMHg0YiwweDAzLDB4OGUsMHgyNSwweGIwLDB4MDIsMHgzYywweGIwLDB4MDMsMHg0MiwweDM0LDB4MjYsMHgxOCwweDY0LDB4MDAsCi0weDAwLDB4MDAsMHg0NCwweGFjLDB4MDAsMHg0YiwweDAzLDB4YWUsMHg4MCwweDAwLDB4MDcsMHgzYywweDI0LDB4MTAsMHhhNywweDAwLAotMHgyMSwweDAwLDB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0YiwweDAzLDB4OGUsMHgyNSwweGIwLDB4MDgsMHgzYywKLTB4YjAsMHgwMywweDA5LDB4MzUsMHgyYSwweGIwLDB4MDIsMHgzYywweDAwLDB4MDAsMHgyMywweGFkLDB4MzYsMHgwMCwweDQyLDB4MzQsCi0weDAwLDB4MDAsMHg0MywweDkwLDB4MjMsMHhiMCwweDA0LDB4M2MsMHhmZiwweDFmLDB4MDIsMHgzYywweGMwLDB4MTgsMHgwMywweDAwLAotMHhmMCwweDA3LDB4NjMsMHgzMCwweDVjLDB4NjUsMHgwNSwweDhlLDB4MjEsMHgxOCwweDY0LDB4MDAsMHhmZiwweGZmLDB4NDIsMHgzNCwKLTB4MjQsMHgxOCwweDYyLDB4MDAsMHg1OSwweDAwLDB4NjUsMHgxMCwweDYwLDB4NjUsMHgwMywweGFlLDB4MDIsMHg4MCwweDA1LDB4M2MsCi0weDZjLDB4N2UsMHhhMywweDhjLDB4MjcsMHgyMCwweDA3LDB4MDAsMHgyNCwweDIwLDB4YzQsMHgwMCwweDAwLDB4MDgsMHg2MywweDM0LAotMHg0MSwweGIwLDB4MDIsMHgzYywweDAwLDB4MDAsMHgyMywweGFkLDB4MDAsMHgwMCwweDQ0LDB4YWMsMHg2YywweDdlLDB4YTMsMHhhYywKLTB4ZmMsMHg0YSwweDA0LDB4YWUsMHg2OCwweDE1LDB4NjIsMHgyNiwweDAwLDB4NGIsMHg0MywweDhjLDB4ODAsMHgwMCwweDA0LDB4M2MsCi0weDI2LDB4MTgsMHg2NCwweDAwLDB4MDAsMHg0YiwweDQzLDB4YWMsMHg2OCwweDE1LDB4NjYsMHgyNiwweGZjLDB4NGEsMHhjMywweDhjLAotMHgwMCwweDAxLDB4MDQsMHgzYywweDI0LDB4MjgsMHg3MiwweDAwLDB4MjQsMHgxMCwweGE0LDB4MDAsMHgwNiwweDAwLDB4NDAsMHgxMCwKLTB4MjUsMHhiMCwweDAyLDB4M2MsMHgwMCwweDRiLDB4YzMsMHg4YywweGIwLDB4MDMsMHg0MiwweDM0LDB4MjYsMHgxOCwweDY0LDB4MDAsCi0weDAwLDB4MDAsMHg0NCwweGFjLDB4MDAsMHg0YiwweGMzLDB4YWMsMHgwMCwweDAyLDB4MDQsMHgzYywweDI0LDB4MTAsMHhhNCwweDAwLAotMHgwNiwweDAwLDB4NDAsMHgxMCwweDI1LDB4YjAsMHgwMywweDNjLDB4MDAsMHg0YiwweGMyLDB4OGMsMHhiMCwweDAzLDB4NjMsMHgzNCwKLTB4MjYsMHgxMCwweDQ0LDB4MDAsMHgwMCwweDRiLDB4YzIsMHhhYywweDAwLDB4MDAsMHg2NCwweGFjLDB4MjgsMHgwMCwweGJmLDB4OGYsCi0weDI0LDB4MDAsMHhiMywweDhmLDB4MjAsMHgwMCwweGIyLDB4OGYsMHgxYywweDAwLDB4YjEsMHg4ZiwweDE4LDB4MDAsMHhiMCwweDhmLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDMwLDB4MDAsMHhiZCwweDI3LDB4NWIsMHg0ZSwweDAwLDB4MGMsMHgwNywweDAwLDB4MDQsMHgyNCwKLTB4MDAsMHg0YiwweDAzLDB4OGUsMHhmYywweDRhLDB4MDYsMHg4ZSwweDI1LDB4YjAsMHgwMiwweDNjLDB4MjYsMHgxOCwweDcxLDB4MDAsCi0weGIwLDB4MDMsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4YWMsMHhkZiwweDE5LDB4MDAsMHgwOCwweDAwLDB4NGIsMHgwMywweGFlLAotMHg1NiwweDAxLDB4NDIsMHgzNSwweDAwLDB4MDAsMHg0MywweDk0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0NCwweGZiLDB4NjAsMHgxMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg1YiwweDRlLDB4MDAsMHgwYywweDA3LDB4MDAsMHgwNCwweDI0LDB4N2QsMHgxNSwweDAwLDB4MDgsCi0weDY4LDB4MTUsMHg2NiwweDI2LDB4MDAsMHgwMCwweGEyLDB4YWMsMHg0OCwweDE2LDB4MDAsMHgwOCwweGZmLDB4MDAsMHgwMiwweDI0LAotMHgwMCwweDAwLDB4NjIsMHhhYywweDg1LDB4MTYsMHgwMCwweDA4LDB4ZmYsMHgwMCwweDAyLDB4MjQsMHgwMCwweDAwLDB4NjIsMHhhYywKLTB4YzIsMHgxNiwweDAwLDB4MDgsMHhmZiwweDAwLDB4MDIsMHgyNCwweDkwLDB4MDMsMHg2MywweDM0LDB4MDAsMHgwMCwweDYyLDB4YWMsCi0weDU3LDB4MTgsMHgwMCwweDA4LDB4NjgsMHgxNSwweDYyLDB4MjYsMHgwMCwweDAwLDB4NDAsMHhhYywweDE1LDB4MTksMHgwMCwweDA4LAotMHg2OCwweDE1LDB4NjIsMHgyNiwweDAyLDB4MDAsMHgwMywweDI0LDB4OTAsMHgwMywweDQyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHhhYywKLTB4NzQsMHgxOSwweDAwLDB4MDgsMHg2OCwweDE1LDB4NjIsMHgyNiwweDAxLDB4MDAsMHgwMywweDI0LDB4OTAsMHgwMywweDQyLDB4MzQsCi0weDAwLDB4MDAsMHg0MywweGFjLDB4ZDQsMHgxOSwweDAwLDB4MDgsMHg2OCwweDE1LDB4NjIsMHgyNiwweGQwLDB4MDMsMHgwMywweDM1LAotMHg4MCwweDAwLDB4MDIsMHgyNCwweDAwLDB4MDAsMHg2MiwweGFjLDB4MGEsMHgxYSwweDAwLDB4MDgsMHg2OCwweDE1LDB4NjIsMHgyNiwKLTB4MjUsMHhiMCwweDAyLDB4M2MsMHgwNywweDAwLDB4MDMsMHgyNCwweDkwLDB4MDMsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4YWMsCi0weDY4LDB4MTUsMHg2MywweDI2LDB4MDAsMHg0YiwweDYyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjAsMHg0MiwweDM4LAotMHhlMiwweDE2LDB4MDAsMHgwOCwweDAwLDB4NGIsMHg2MiwweGFjLDB4MjUsMHhiMCwweDAyLDB4M2MsMHgwNywweDAwLDB4MDMsMHgyNCwKLTB4OTAsMHgwMywweDQyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHhhYywweDY4LDB4MTUsMHg2MywweDI2LDB4MDAsMHg0YiwweDYyLDB4OGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDQyLDB4MzgsMHg0MCwweDE3LDB4MDAsMHgwOCwweDAwLDB4NGIsMHg2MiwweGFjLAotMHgwNiwweDAwLDB4MDMsMHgyNCwweDkwLDB4MDMsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4YWMsMHg5OSwweDE3LDB4MDAsMHgwOCwKLTB4NjgsMHgxNSwweDYyLDB4MjYsMHgwNSwweDAwLDB4MDMsMHgyNCwweDkwLDB4MDMsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4YWMsCi0weGY4LDB4MTcsMHgwMCwweDA4LDB4NjgsMHgxNSwweDYyLDB4MjYsMHgwMywweDAwLDB4MDMsMHgyNCwweDkwLDB4MDMsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4NDMsMHhhYywweGI2LDB4MTgsMHgwMCwweDA4LDB4NjgsMHgxNSwweDYyLDB4MjYsMHgyNSwweGIwLDB4MGQsMHgzYywKLTB4MDAsMHg4MCwweDAyLDB4M2MsMHgxOCwweDAzLDB4YTQsMHgzNSwweGZjLDB4NjksMHg0MiwweDI0LDB4MDIsMHg4MCwweDAzLDB4M2MsCi0weDQxLDB4YjAsMHgwOCwweDNjLDB4MDAsMHgwMCwweDgyLDB4YWMsMHg2OCwweDE1LDB4NmEsMHgyNCwweDBhLDB4MDAsMHgwMiwweDM1LAotMHgwMCwweDAwLDB4NDQsMHg5NCwweDBhLDB4NGIsMHg0MywweDk1LDB4MDgsMHg0YiwweDRiLDB4OTUsMHgyNSwweDE4LDB4NjQsMHgwMCwKLTB4ZmYsMHhmZiwweDZjLDB4MzAsMHgyNCwweDEwLDB4OGIsMHgwMSwweDAyLDB4MDAsMHg0MiwweDMwLDB4NGQsMHgwMCwweDQwLDB4MTAsCi0weDAyLDB4MDAsMHg2NCwweDM4LDB4MDIsMHgwMCwweDAyLDB4MjQsMHhjMCwweDAzLDB4YTMsMHgzNSwweDAwLDB4MDAsMHg2MiwweGFjLAotMHgwYSwweDRiLDB4NDQsMHhhNSwweDI0LDB4MzgsMHg4YiwweDAxLDB4MDQsMHgwMCwweGUyLDB4MzAsMHgwYSwweDAwLDB4NDAsMHgxMCwKLTB4MDgsMHgwMCwweGUyLDB4MzAsMHgwYSwweDRiLDB4NDMsMHg5NSwweDBjLDB4MDAsMHgwNCwweDM1LDB4YzAsMHgwMywweGE1LDB4MzUsCi0weDA0LDB4MDAsMHg2MywweDM4LDB4MDQsMHgwMCwweDAyLDB4MjQsMHgwMCwweDAwLDB4ODYsMHg4YywweDAwLDB4MDAsMHhhMiwweGFjLAotMHgwYSwweDRiLDB4NDMsMHhhNSwweDA4LDB4MDAsMHhlMiwweDMwLDB4MDgsMHgwMCwweDQwLDB4MTAsMHgxMCwweDAwLDB4ZTIsMHgzMCwKLTB4MGEsMHg0YiwweDQyLDB4OTUsMHhjMCwweDAzLDB4YTQsMHgzNSwweDA4LDB4MDAsMHgwMywweDI0LDB4MDgsMHgwMCwweDQyLDB4MzgsCi0weDAwLDB4MDAsMHg4MywweGFjLDB4MGEsMHg0YiwweDQyLDB4YTUsMHgxMCwweDAwLDB4ZTIsMHgzMCwweDA4LDB4MDAsMHg0MCwweDEwLAotMHgyMCwweDAwLDB4ZTIsMHgzMCwweDBhLDB4NGIsMHg0MiwweDk1LDB4YzAsMHgwMywweGE0LDB4MzUsMHgxMCwweDAwLDB4MDMsMHgyNCwKLTB4MTAsMHgwMCwweDQyLDB4MzgsMHgwMCwweDAwLDB4ODMsMHhhYywweDBhLDB4NGIsMHg0MiwweGE1LDB4MjAsMHgwMCwweGUyLDB4MzAsCi0weDA4LDB4MDAsMHg0MCwweDEwLDB4ODAsMHgwMCwweGUyLDB4MzAsMHgwYSwweDRiLDB4NDIsMHg5NSwweGMwLDB4MDMsMHhhNCwweDM1LAotMHgyMCwweDAwLDB4MDMsMHgyNCwweDIwLDB4MDAsMHg0MiwweDM4LDB4MDAsMHgwMCwweDgzLDB4YWMsMHgwYSwweDRiLDB4NDIsMHhhNSwKLTB4ODAsMHgwMCwweGUyLDB4MzAsMHgxNSwweDAwLDB4NDAsMHgxMCwweDI0LDB4MTAsMHg4YiwweDAxLDB4MDIsMHg4MCwweDA5LDB4M2MsCi0weDBhLDB4NGIsMHg0NiwweDk1LDB4NmMsMHg3ZSwweDI1LDB4OGQsMHgwOCwweDAwLDB4MDIsMHgzYywweDdmLDB4ZmYsMHgwNCwweDI0LAotMHgyNCwweDIwLDB4NjQsMHgwMSwweDI1LDB4MjgsMHhhMiwweDAwLDB4ODAsMHgwMCwweGM2LDB4MzgsMHhiMCwweDAzLDB4YTcsMHgzNSwKLTB4MDgsMHgwMCwweDA4LDB4MzUsMHhjMCwweDAzLDB4YTMsMHgzNSwweDgwLDB4MDAsMHgwMiwweDI0LDB4MDAsMHgwMCwweDYyLDB4YWMsCi0weDIxLDB4NTgsMHg4MCwweDAwLDB4MDAsMHgwMCwweGU1LDB4YWMsMHgwYSwweDRiLDB4NDYsMHhhNSwweDZjLDB4N2UsMHgyNSwweGFkLAotMHgwMCwweDAwLDB4MDQsMHhhNSwweDA4LDB4NGIsMHg0NCwweGE1LDB4MjQsMHgxMCwweDhiLDB4MDEsMHgwMCwweDMwLDB4NDIsMHgzMCwKLTB4MDYsMHgwMCwweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBhLDB4NGIsMHg0MiwweDk1LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MTAsMHg0MiwweDM4LDB4MDAsMHgyMCwweDQyLDB4MzQsMHgwYSwweDRiLDB4NDIsMHhhNSwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDk1LDB4MWEsMHgwMCwweDA4LDB4MGEsMHg0YiwweDQzLDB4YTUsMHhmOCwweGZmLDB4YmQsMHgyNywKLTB4MDQsMHgwMCwweGIxLDB4YWYsMHgwMCwweDAwLDB4YjAsMHhhZiwweDAwLDB4NDAsMHgwMiwweDQwLDB4MDAsMHg2OCwweDA4LDB4NDAsCi0weDAwLDB4NzAsMHgwMiwweDQwLDB4MDAsMHg2MCwweDA5LDB4NDAsMHgyNSwweGIwLDB4MDUsMHgzYywweDAwLDB4ODAsMHgwMiwweDNjLAotMHgxOCwweDAzLDB4YTMsMHgzNCwweDdjLDB4NmIsMHg0MiwweDI0LDB4MDAsMHgwMCwweDYyLDB4YWMsMHg4MCwweDAwLDB4ODcsMHg4YywKLTB4N2MsMHgwMiwweGEyLDB4MzQsMHg4NCwweDAyLDB4YTMsMHgzNCwweDg4LDB4MDIsMHhhNiwweDM0LDB4MDAsMHgwMCwweDQ3LDB4YWMsCi0weDAwLDB4MDAsMHg2OCwweGFjLDB4MDAsMHgwMCwweGM5LDB4YWMsMHg3NCwweDAwLDB4ODMsMHg4YywweDhjLDB4MDIsMHhhMiwweDM0LAotMHg5MCwweDAyLDB4YTcsMHgzNCwweDAwLDB4MDAsMHg0MywweGFjLDB4MDgsMHgwMCwweDg2LDB4OGMsMHg5NCwweDAyLDB4YTgsMHgzNCwKLTB4OTgsMHgwMiwweGE5LDB4MzQsMHgwMCwweDAwLDB4ZTYsMHhhYywweDBjLDB4MDAsMHg4MiwweDhjLDB4OWMsMHgwMiwweGE2LDB4MzQsCi0weGEwLDB4MDIsMHhhNywweDM0LDB4MDAsMHgwMCwweDAyLDB4YWQsMHgxMCwweDAwLDB4ODMsMHg4YywweGE0LDB4MDIsMHhhOCwweDM0LAotMHhhOCwweDAyLDB4YWEsMHgzNCwweDAwLDB4MDAsMHgyMywweGFkLDB4MTQsMHgwMCwweDgyLDB4OGMsMHhhYywweDAyLDB4YTksMHgzNCwKLTB4YjAsMHgwMiwweGFiLDB4MzQsMHgwMCwweDAwLDB4YzIsMHhhYywweDE4LDB4MDAsMHg4MywweDhjLDB4YjQsMHgwMiwweGE2LDB4MzQsCi0weGI4LDB4MDIsMHhhYywweDM0LDB4MDAsMHgwMCwweGUzLDB4YWMsMHgxYywweDAwLDB4ODIsMHg4YywweGJjLDB4MDIsMHhhNywweDM0LAotMHhjMCwweDAyLDB4YWQsMHgzNCwweDAwLDB4MDAsMHgwMiwweGFkLDB4MjAsMHgwMCwweDgzLDB4OGMsMHhjNCwweDAyLDB4YTgsMHgzNCwKLTB4YzgsMHgwMiwweGFlLDB4MzQsMHgwMCwweDAwLDB4NDMsMHhhZCwweDI0LDB4MDAsMHg4MiwweDhjLDB4Y2MsMHgwMiwweGFhLDB4MzQsCi0weGQwLDB4MDIsMHhhZiwweDM0LDB4MDAsMHgwMCwweDIyLDB4YWQsMHgyOCwweDAwLDB4ODMsMHg4YywweGQ0LDB4MDIsMHhhOSwweDM0LAotMHhkOCwweDAyLDB4YjAsMHgzNCwweDAwLDB4MDAsMHg2MywweGFkLDB4MmMsMHgwMCwweDgyLDB4OGMsMHg3MCwweDAyLDB4YWIsMHgzNCwKLTB4NzQsMHgwMiwweGIxLDB4MzQsMHgwMCwweDAwLDB4YzIsMHhhYywweDMwLDB4MDAsMHg4MywweDhjLDB4NzgsMHgwMiwweGE1LDB4MzQsCi0weDAwLDB4MDAsMHg4MywweGFkLDB4MzQsMHgwMCwweDgyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMiwweGFjLAotMHgzOCwweDAwLDB4ODMsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEzLDB4YWQsMHgzYywweDAwLDB4ODIsMHg4YywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHhhZCwweDQwLDB4MDAsMHg4MywweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHhjMywweGFkLDB4NDQsMHgwMCwweDgyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MiwweGFkLAotMHg0OCwweDAwLDB4ODMsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUzLDB4YWQsMHg0YywweDAwLDB4ODIsMHg4YywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjIsMHhhZCwweDUwLDB4MDAsMHg4MywweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMywweGFlLDB4NTQsMHgwMCwweDgyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MiwweGFkLAotMHg1OCwweDAwLDB4ODMsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIzLDB4YWUsMHg1YywweDAwLDB4ODIsMHg4YywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTIsMHhhYywweDQyLDB4MWIsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4ODAsMHgxYiwweDNjLDB4MTAsMHg2ZCwweDdiLDB4MjcsMHgyNSwweGIwLDB4MWEsMHgzYywweDE4LDB4MDMsMHg1YSwweDI3LAotMHgwMCwweDAwLDB4NWIsMHhhZiwweDIxLDB4ZDgsMHhhMCwweDAzLDB4ODIsMHhkYSwweDFiLDB4MDAsMHg4MCwweGRhLDB4MWIsMHgwMCwKLTB4MDgsMHgwMCwweDdiLDB4MjcsMHgwNCwweDAwLDB4NjEsMHhhZiwweDA4LDB4MDAsMHg2MiwweGFmLDB4MGMsMHgwMCwweDYzLDB4YWYsCi0weDEwLDB4MDAsMHg2NCwweGFmLDB4MTQsMHgwMCwweDY1LDB4YWYsMHgxOCwweDAwLDB4NjYsMHhhZiwweDFjLDB4MDAsMHg2NywweGFmLAotMHgyMCwweDAwLDB4NjgsMHhhZiwweDI0LDB4MDAsMHg2OSwweGFmLDB4MjgsMHgwMCwweDZhLDB4YWYsMHgyYywweDAwLDB4NmIsMHhhZiwKLTB4MzAsMHgwMCwweDZjLDB4YWYsMHgzNCwweDAwLDB4NmQsMHhhZiwweDM4LDB4MDAsMHg2ZSwweGFmLDB4M2MsMHgwMCwweDZmLDB4YWYsCi0weDEyLDB4NDAsMHgwMCwweDAwLDB4MTAsMHg0OCwweDAwLDB4MDAsMHgwMCwweDcwLDB4MGEsMHg0MCwweDQwLDB4MDAsMHg3MCwweGFmLAotMHg0NCwweDAwLDB4NzEsMHhhZiwweDQ4LDB4MDAsMHg3MiwweGFmLDB4NGMsMHgwMCwweDczLDB4YWYsMHg1MCwweDAwLDB4NzQsMHhhZiwKLTB4NTQsMHgwMCwweDc1LDB4YWYsMHg1OCwweDAwLDB4NzYsMHhhZiwweDVjLDB4MDAsMHg3NywweGFmLDB4NjAsMHgwMCwweDc4LDB4YWYsCi0weDY0LDB4MDAsMHg3OSwweGFmLDB4NjgsMHgwMCwweDdjLDB4YWYsMHg2YywweDAwLDB4N2QsMHhhZiwweDcwLDB4MDAsMHg3ZSwweGFmLAotMHg3NCwweDAwLDB4N2YsMHhhZiwweDc4LDB4MDAsMHg2OCwweGFmLDB4N2MsMHgwMCwweDY5LDB4YWYsMHg4MCwweDAwLDB4NmEsMHhhZiwKLTB4MDAsMHg2OCwweDFhLDB4NDAsMHgyNSwweGIwLDB4MWIsMHgzYywweDFjLDB4MDMsMHg3YiwweDM3LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHg3YSwweGFmLDB4N2YsMHgwMCwweDViLDB4MzMsMHgzMCwweDAwLDB4NjAsMHgxMywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyNSwweGIwLDB4MWIsMHgzYywweDMwLDB4MDMsMHg3YiwweDM3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4N2EsMHhhZiwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMSwweGQ4LDB4YTAsMHgwMywweDgyLDB4ZGEsMHgxYiwweDAwLDB4ODAsMHhkYSwweDFiLDB4MDAsCi0weDA4LDB4MDAsMHg3YiwweDI3LDB4MDQsMHgwMCwweDYxLDB4YWYsMHgwOCwweDAwLDB4NjIsMHhhZiwweDBjLDB4MDAsMHg2MywweGFmLAotMHgxMCwweDAwLDB4NjQsMHhhZiwweDE0LDB4MDAsMHg2NSwweGFmLDB4MTgsMHgwMCwweDY2LDB4YWYsMHgxYywweDAwLDB4NjcsMHhhZiwKLTB4MjAsMHgwMCwweDY4LDB4YWYsMHgyNCwweDAwLDB4NjksMHhhZiwweDI4LDB4MDAsMHg2YSwweGFmLDB4MmMsMHgwMCwweDZiLDB4YWYsCi0weDMwLDB4MDAsMHg2YywweGFmLDB4MzQsMHgwMCwweDZkLDB4YWYsMHgzOCwweDAwLDB4NmUsMHhhZiwweDNjLDB4MDAsMHg2ZiwweGFmLAotMHgxMiwweDQwLDB4MDAsMHgwMCwweDEwLDB4NDgsMHgwMCwweDAwLDB4MDAsMHg3MCwweDBhLDB4NDAsMHg0MCwweDAwLDB4NzAsMHhhZiwKLTB4NDQsMHgwMCwweDcxLDB4YWYsMHg0OCwweDAwLDB4NzIsMHhhZiwweDRjLDB4MDAsMHg3MywweGFmLDB4NTAsMHgwMCwweDc0LDB4YWYsCi0weDU0LDB4MDAsMHg3NSwweGFmLDB4NTgsMHgwMCwweDc2LDB4YWYsMHg1YywweDAwLDB4NzcsMHhhZiwweDYwLDB4MDAsMHg3OCwweGFmLAotMHg2NCwweDAwLDB4NzksMHhhZiwweDY4LDB4MDAsMHg3YywweGFmLDB4NmMsMHgwMCwweDdkLDB4YWYsMHg3MCwweDAwLDB4N2UsMHhhZiwKLTB4NzQsMHgwMCwweDdmLDB4YWYsMHg3OCwweDAwLDB4NjgsMHhhZiwweDdjLDB4MDAsMHg2OSwweGFmLDB4ODAsMHgwMCwweDZhLDB4YWYsCi0weGRmLDB4MWEsMHgwMCwweDA4LDB4MjEsMHgyMCwweDYwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI1LDB4YjAsMHgwOCwweDNjLAotMHgyMCwweDAzLDB4MDgsMHgzNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDFhLDB4YWQsMHgwMCwweDA0LDB4NWIsMHgzMywKLTB4MGEsMHgwMCwweDYwLDB4MTMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwOCwweDNjLDB4NzQsMHg1NSwweDA4LDB4MjUsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MjUsMHhiMCwweDFiLDB4M2MsMHgyNCwweDAzLDB4N2IsMHgzNywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4NjgsMHhhZiwweDA5LDB4ZjgsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4NWIsMHgzMywKLTB4MjUsMHhiMCwweDA4LDB4M2MsMHgyOCwweDAzLDB4MDgsMHgzNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDFiLDB4YWQsCi0weDA2LDB4MDAsMHg2MCwweDEzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDgsMHgzYywweGZjLDB4NjksMHgwOCwweDI1LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDA5LDB4ZjgsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDgwLDB4MWEsMHgzYywKLTB4NmMsMHg3ZSwweDVhLDB4MjcsMHgwNCwweDAwLDB4NWIsMHg5NywweDI1LDB4YjAsMHgwOCwweDNjLDB4MzAsMHgwMywweDA4LDB4MzUsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDFiLDB4YWQsMHgxOCwweDAwLDB4NjAsMHgxMywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwOCwweGVjLDB4OWIsMHgyNywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMCwweDYxLDB4OGYsMHhmYywweDAzLDB4NzAsMHg3YiwKLTB4N2MsMHgwMCwweDYyLDB4N2IsMHhiYywweDAwLDB4NjQsMHg3YiwweGZjLDB4MDAsMHg2NiwweDdiLDB4M2MsMHgwMSwweDY4LDB4N2IsCi0weDEzLDB4MDAsMHgwMCwweDAyLDB4MTEsMHgwMCwweDIwLDB4MDIsMHg3YywweDAxLDB4NmEsMHg3YiwweGJjLDB4MDEsMHg2YywweDdiLAotMHhmYywweDAxLDB4NmUsMHg3YiwweDNjLDB4MDIsMHg3MCwweDdiLDB4N2MsMHgwMiwweDcyLDB4N2IsMHhiYywweDAyLDB4NzQsMHg3YiwKLTB4ZmMsMHgwMiwweDc2LDB4N2IsMHgzYywweDAzLDB4NzgsMHg3YiwweDdjLDB4MDMsMHg3YywweDdiLDB4YmMsMHgwMywweDdlLDB4N2IsCi0weDgwLDB4MDAsMHg3YiwweDhmLDB4MmYsMHgxYywweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIxLDB4ZDgsMHhhMCwweDAzLAotMHg4MiwweGRhLDB4MWIsMHgwMCwweDgwLDB4ZGEsMHgxYiwweDAwLDB4MDgsMHgwMCwweDdiLDB4MjcsMHgwOCwweDAwLDB4NWIsMHhhZiwKLTB4ZmMsMHhlZiwweDlkLDB4MjcsMHgwMCwweDAwLDB4NGEsMHg4ZiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjEsMHgwMCwweDQwLDB4MTEsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg4MCwweDA4LDB4M2MsMHhjYywweDdkLDB4MDgsMHgyNSwweDIxLDB4NDgsMHgwMCwweDAwLAotMHgyMSwweDU4LDB4MDAsMHgwMCwweDAxLDB4MDAsMHg2YiwweDI1LDB4MWEsMHgwMCwweDQwLDB4MTEsMHgyNCwweDcwLDB4NGIsMHgwMSwKLTB4MTQsMHgwMCwweGMwLDB4MTEsMHgwMSwweDAwLDB4MDQsMHgyNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMCwweDQ0LDB4YTMsCi0weDI2LDB4NTAsMHg0YiwweDAxLDB4MDAsMHgwMCwweDRhLDB4YWYsMHg4MCwweDgwLDB4MDksMHgwMCwweDIxLDB4ODAsMHgwOCwweDAyLAotMHgwMCwweDAwLDB4MTAsMHg4ZSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDksMHhmOCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHg4MCwweDFiLDB4M2MsMHhlOCwweDZmLDB4N2IsMHgyNywweDI1LDB4YjAsMHgxYSwweDNjLDB4MTgsMHgwMywweDVhLDB4MjcsCi0weDAwLDB4MDAsMHg1YiwweGFmLDB4MDIsMHg4MCwweDFhLDB4M2MsMHg2YywweDdlLDB4NWEsMHgyNywweGUxLDB4ZmYsMHgwMCwweDEwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgyOSwweDI1LDB4NDAsMHg1OCwweDBiLDB4MDAsMHhmMiwweDFiLDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDgwLDB4MWIsMHgzYywweDZjLDB4N2UsMHg3YiwweDI3LDB4MjEsMHg2MCwweDAwLDB4MDAsCi0weDA0LDB4MDAsMHg2YywweGE3LDB4MDgsMHgwMCwweDdhLDB4OGYsMHgwMCwweDAwLDB4MDAsMHgwMCwweGY4LDB4ZmYsMHg1YSwweDI3LAotMHgwMCwweDAwLDB4NWEsMHg4ZiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDVhLDB4MjcsMHg4NCwweDAwLDB4NDQsMHg4ZiwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhmOSwweGZmLDB4ODAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMCwweDQxLDB4OGYsCi0weGZjLDB4MDMsMHg1MCwweDdiLDB4N2MsMHgwMCwweDQyLDB4N2IsMHhiYywweDAwLDB4NDQsMHg3YiwweGZjLDB4MDAsMHg0NiwweDdiLAotMHgzYywweDAxLDB4NDgsMHg3YiwweDEzLDB4MDAsMHgwMCwweDAyLDB4MTEsMHgwMCwweDIwLDB4MDIsMHg3YywweDAxLDB4NGEsMHg3YiwKLTB4YmMsMHgwMSwweDRjLDB4N2IsMHhmYywweDAxLDB4NGUsMHg3YiwweDNjLDB4MDIsMHg1MCwweDdiLDB4N2MsMHgwMiwweDUyLDB4N2IsCi0weGJjLDB4MDIsMHg1NCwweDdiLDB4ZmMsMHgwMiwweDU2LDB4N2IsMHgzYywweDAzLDB4NTgsMHg3YiwweDdjLDB4MDMsMHg1YywweDdiLAotMHhiYywweDAzLDB4NWUsMHg3YiwweDgwLDB4MDAsMHg1YiwweDhmLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4NjAsMHgwMywKLTB4MTAsMHgwMCwweDAwLDB4NDIsMHgwMCwweDYwLDB4MDUsMHg0MCwweDQyLDB4MjgsMHgwNSwweDAwLDB4NDAsMHgyOCwweDA1LDB4MDAsCi0weDAwLDB4NjAsMHg4NSwweDQwLDB4MDQsMHgwMCwweDgxLDB4YWMsMHgwOCwweDAwLDB4ODIsMHhhYywweDBjLDB4MDAsMHg4MywweGFjLAotMHgyMCwweDAwLDB4ODgsMHhhYywweDI0LDB4MDAsMHg4OSwweGFjLDB4MjgsMHgwMCwweDhhLDB4YWMsMHgyYywweDAwLDB4OGIsMHhhYywKLTB4MzAsMHgwMCwweDhjLDB4YWMsMHgzNCwweDAwLDB4OGQsMHhhYywweDM4LDB4MDAsMHg4ZSwweGFjLDB4M2MsMHgwMCwweDhmLDB4YWMsCi0weDEyLDB4NDAsMHgwMCwweDAwLDB4MTAsMHg0OCwweDAwLDB4MDAsMHg0MCwweDAwLDB4OTAsMHhhYywweDQ0LDB4MDAsMHg5MSwweGFjLAotMHg0OCwweDAwLDB4OTIsMHhhYywweDRjLDB4MDAsMHg5MywweGFjLDB4NTAsMHgwMCwweDk0LDB4YWMsMHg1NCwweDAwLDB4OTUsMHhhYywKLTB4NTgsMHgwMCwweDk2LDB4YWMsMHg1YywweDAwLDB4OTcsMHhhYywweDYwLDB4MDAsMHg5OCwweGFjLDB4NjQsMHgwMCwweDk5LDB4YWMsCi0weDY4LDB4MDAsMHg5YywweGFjLDB4NmMsMHgwMCwweDlkLDB4YWMsMHg3MCwweDAwLDB4OWUsMHhhYywweDc0LDB4MDAsMHg5ZiwweGFjLAotMHg3OCwweDAwLDB4ODgsMHhhYywweDdjLDB4MDAsMHg4OSwweGFjLDB4ODAsMHgwMCwweDlmLDB4YWMsMHhmOCwweGZmLDB4ODQsMHgyNCwKLTB4MDAsMHgwMCwweDg0LDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHg4NCwweDI0LDB4ODQsMHgwMCwweDg2LDB4OGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZjksMHhmZiwweGMwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIxLDB4ZDgsMHg4MCwweDAwLAotMHgwMSwweDAwLDB4YmEsMHgyNCwweDA0LDB4MDAsMHg2MSwweDhmLDB4ZmMsMHgwMywweDcwLDB4N2IsMHg3YywweDAwLDB4NjIsMHg3YiwKLTB4YmMsMHgwMCwweDY0LDB4N2IsMHhmYywweDAwLDB4NjYsMHg3YiwweDNjLDB4MDEsMHg2OCwweDdiLDB4MTMsMHgwMCwweDAwLDB4MDIsCi0weDExLDB4MDAsMHgyMCwweDAyLDB4N2MsMHgwMSwweDZhLDB4N2IsMHhiYywweDAxLDB4NmMsMHg3YiwweGZjLDB4MDEsMHg2ZSwweDdiLAotMHgzYywweDAyLDB4NzAsMHg3YiwweDdjLDB4MDIsMHg3MiwweDdiLDB4YmMsMHgwMiwweDc0LDB4N2IsMHhmYywweDAyLDB4NzYsMHg3YiwKLTB4M2MsMHgwMywweDc4LDB4N2IsMHg3YywweDAzLDB4N2MsMHg3YiwweGJjLDB4MDMsMHg3ZSwweDdiLDB4ODAsMHgwMCwweDdiLDB4OGYsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDYwLDB4MDMsMHgwMCwweDYwLDB4OWEsMHg0MCwweDAwLDB4NjAsMHgwNSwweDQwLAotMHg0MiwweDI4LDB4MDUsMHgwMCwweDQwLDB4MjgsMHgwNSwweDAwLDB4MDAsMHg2MCwweDg1LDB4NDAsMHgwNCwweDAwLDB4ODEsMHhhYywKLTB4MDgsMHgwMCwweDgyLDB4YWMsMHgwYywweDAwLDB4ODMsMHhhYywweDIwLDB4MDAsMHg4OCwweGFjLDB4MjQsMHgwMCwweDg5LDB4YWMsCi0weDI4LDB4MDAsMHg4YSwweGFjLDB4MmMsMHgwMCwweDhiLDB4YWMsMHgzMCwweDAwLDB4OGMsMHhhYywweDM0LDB4MDAsMHg4ZCwweGFjLAotMHgzOCwweDAwLDB4OGUsMHhhYywweDNjLDB4MDAsMHg4ZiwweGFjLDB4MTIsMHg0MCwweDAwLDB4MDAsMHgxMCwweDQ4LDB4MDAsMHgwMCwKLTB4NDAsMHgwMCwweDkwLDB4YWMsMHg0NCwweDAwLDB4OTEsMHhhYywweDQ4LDB4MDAsMHg5MiwweGFjLDB4NGMsMHgwMCwweDkzLDB4YWMsCi0weDUwLDB4MDAsMHg5NCwweGFjLDB4NTQsMHgwMCwweDk0LDB4YWMsMHg1OCwweDAwLDB4OTYsMHhhYywweDVjLDB4MDAsMHg5NiwweGFjLAotMHg2MCwweDAwLDB4OTgsMHhhYywweDY0LDB4MDAsMHg5OSwweGFjLDB4NjgsMHgwMCwweDljLDB4YWMsMHg2YywweDAwLDB4OWQsMHhhYywKLTB4NzAsMHgwMCwweDllLDB4YWMsMHg3OCwweDAwLDB4ODgsMHhhYywweDdjLDB4MDAsMHg4OSwweGFjLDB4ODAsMHgwMCwweDlmLDB4YWMsCi0weDg0LDB4MDAsMHg4MCwweGFjLDB4ZjgsMHhmZiwweDg0LDB4MjQsMHgwMCwweDAwLDB4ODQsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ODQsMHgyNCwweDg0LDB4MDAsMHg4NiwweDhjLDB4ZmEsMHhmZiwweGMwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjEsMHhkOCwweDgwLDB4MDAsMHgwMSwweDAwLDB4YmEsMHgyNCwweDA0LDB4MDAsMHg2MSwweDhmLDB4ZmMsMHgwMywweDcwLDB4N2IsCi0weDdjLDB4MDAsMHg2MiwweDdiLDB4YmMsMHgwMCwweDY0LDB4N2IsMHhmYywweDAwLDB4NjYsMHg3YiwweDNjLDB4MDEsMHg2OCwweDdiLAotMHgxMywweDAwLDB4MDAsMHgwMiwweDExLDB4MDAsMHgyMCwweDAyLDB4N2MsMHgwMSwweDZhLDB4N2IsMHhiYywweDAxLDB4NmMsMHg3YiwKLTB4ZmMsMHgwMSwweDZlLDB4N2IsMHgzYywweDAyLDB4NzAsMHg3YiwweDdjLDB4MDIsMHg3MiwweDdiLDB4YmMsMHgwMiwweDc0LDB4N2IsCi0weGZjLDB4MDIsMHg3NiwweDdiLDB4M2MsMHgwMywweDc4LDB4N2IsMHg3YywweDAzLDB4N2MsMHg3YiwweGJjLDB4MDMsMHg3ZSwweDdiLAotMHg4MCwweDAwLDB4N2IsMHg4ZiwweDA4LDB4MDAsMHg2MCwweDAzLDB4MDAsMHg2MCwweDlhLDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGM2LDB4N2YsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDgwLDB4MWIsMHgzYywweDAwLDB4MDAsMHg3YiwweDI3LAotMHgyNSwweGIwLDB4MWEsMHgzYywweDE4LDB4MDMsMHg1YSwweDI3LDB4MDAsMHgwMCwweDViLDB4YWYsMHgwMCwweDAwLDB4MDUsMHgyNCwKLTB4MDMsMHgwMCwweGE0LDB4MjQsMHgwMCwweGEwLDB4ODAsMHg0MCwweDAwLDB4YTAsMHg4NCwweDQwLDB4MDEsMHg4MCwweDA0LDB4M2MsCi0weDk4LDB4MDMsMHg4NCwweDI0LDB4MDgsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMSwweDgwLDB4MWIsMHgzYywweDk4LDB4MDMsMHg3YiwweDI3LDB4MjUsMHhiMCwweDFhLDB4M2MsMHgxOCwweDAzLDB4NWEsMHgyNywKLTB4MDAsMHgwMCwweDViLDB4YWYsMHgwMiwweDgwLDB4MWEsMHgzYywweDAwLDB4MDAsMHg1YSwweDI3LDB4ZmMsMHgwMywweDVkLDB4MjcsCi0weDAyLDB4ODAsMHgxYywweDNjLDB4MDAsMHgxNCwweDljLDB4MjcsMHgwMCwweGYwLDB4MDgsMHgzYywweDAwLDB4MGMsMHgwOCwweDM1LAotMHgwMCwweDYwLDB4ODgsMHg0MCwweDAyLDB4ODAsMHgwNCwweDNjLDB4MDAsMHgwMCwweDg0LDB4MjQsMHhmZiwweDdmLDB4MDUsMHgzYywKLTB4ZmYsMHhmZiwweGE1LDB4MzQsMHgyNCwweDIwLDB4ODUsMHgwMCwweDAwLDB4MjAsMHg4NCwweDRjLDB4ZmYsMHhmZiwweDA1LDB4MzQsCi0weDIxLDB4MjgsMHhhNCwweDAwLDB4MDAsMHgyOCwweDg1LDB4NGMsMHgwMCwweDgwLDB4MDQsMHgzYywweDAwLDB4MDAsMHg4NCwweDI0LAotMHhmZiwweDdmLDB4MDUsMHgzYywweGZmLDB4ZmYsMHhhNSwweDM0LDB4MjQsMHgyMCwweDg1LDB4MDAsMHgwMCwweDAwLDB4ODQsMHg0YywKLTB4ZmYsMHg3ZiwweDA2LDB4MjQsMHgyMSwweDMwLDB4YzQsMHgwMCwweDI0LDB4MzAsMHhjNSwweDAwLDB4MDAsMHgwOCwweDg2LDB4NGMsCi0weDAwLDB4YTAsMHgwNCwweDQwLDB4MTAsMHgwMCwweDg0LDB4MzQsMHgwMCwweGEwLDB4ODQsMHg0MCwweDAxLDB4ODAsMHgxYiwweDNjLAotMHgyNCwweDA0LDB4N2IsMHgyNywweDI1LDB4YjAsMHgxYSwweDNjLDB4MTgsMHgwMywweDVhLDB4MjcsMHgwMCwweDAwLDB4NWIsMHhhZiwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNSwweGIwLDB4MDQsMHgzYywweDQ0LDB4MDAsMHg4NCwweDM0LDB4MDAsMHgwMCwweDg1LDB4ODQsCi0weDIwLDB4MDAsMHgwNiwweDI0LDB4MjUsMHgyOCwweGE2LDB4MDAsMHgwMCwweDAwLDB4ODUsMHhhNCwweDAxLDB4ODAsMHgxYiwweDNjLAotMHg1NCwweDA0LDB4N2IsMHgyNywweDI1LDB4YjAsMHgxYSwweDNjLDB4MTgsMHgwMywweDVhLDB4MjcsMHgwMCwweDAwLDB4NWIsMHhhZiwKLTB4MjUsMHhiMCwweDA0LDB4M2MsMHg0NCwweDAwLDB4ODQsMHgzNCwweDAwLDB4MDAsMHg4NSwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDEwLDB4MDAsMHhhNSwweDMwLDB4ZmMsMHhmZiwweGEwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MWYsMHgwNywweDNjLAotMHhmZiwweGZmLDB4ZTcsMHgzNCwweDAyLDB4ODAsMHgwNSwweDNjLDB4ODgsMHg3ZCwweGE1LDB4MjQsMHhmZiwweGZmLDB4YTUsMHgzMCwKLTB4NDAsMHhiMCwweDA0LDB4M2MsMHgyNSwweDI4LDB4YTQsMHgwMCwweDI0LDB4MjgsMHhhNywweDAwLDB4MjEsMHgzMCwweDAwLDB4MDAsCi0weDQzLDB4YjAsMHgwMiwweDNjLDB4MDAsMHg4MCwweDA0LDB4M2MsMHg0MCwweDAwLDB4ODQsMHgzNCwweDAwLDB4MDAsMHg0NSwweGFjLAotMHgwNCwweDAwLDB4NDYsMHhhYywweDA4LDB4MDAsMHg0NCwweGFjLDB4NGUsMHg1OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA5LDB4MDAsMHgwMiwweDI0LDB4ZmYsMHhmZiwweDQyLDB4MjQsCi0weGZmLDB4ZmYsMHg0MSwweDA0LDB4ZmYsMHhmZiwweDQyLDB4MjQsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAxLDB4MDAsMHg0MiwweDI0LAotMHgwMCwweDYwLDB4MDIsMHg0MCwweDAxLDB4MDAsMHg0MSwweDM0LDB4MDEsMHgwMCwweDIxLDB4MzgsMHgwMCwweDYwLDB4ODEsMHg0MCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4ODIsMHhhYywweDAwLDB4MDAsMHg4MiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDIxLDB4MTgsMHg0MCwweDAwLDB4MDAsMHg2MCwweDgzLDB4NDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHg4MiwweGFjLAotMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDAsMHg2MCwweDgxLDB4NDAsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDEsMHgwMCwweDIxLDB4MzgsCi0weDAwLDB4NjAsMHg4MSwweDQwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4ODAsMHgwMywweDNjLAotMHgyNSwweGIwLDB4MDIsMHgzYywweDQ0LDB4MDUsMHg2MywweDI0LDB4MTgsMHgwMywweDQyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHhhYywKLTB4MDQsMHgwMCwweDg1LDB4OGMsMHgwMCwweDgwLDB4MDMsMHgzYywweDAxLDB4MDAsMHgwMiwweDI0LDB4MjUsMHgyOCwweGEzLDB4MDAsCi0weDAwLDB4MDAsMHhhNCwweDhjLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4ODAsMHgwMywweDNjLAotMHgyNSwweGIwLDB4MDIsMHgzYywweDc0LDB4MDUsMHg2MywweDI0LDB4MTgsMHgwMywweDQyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHhhYywKLTB4MDQsMHgwMCwweDgyLDB4OGMsMHgwMiwweDAwLDB4ODMsMHg5NCwweDAwLDB4ODAsMHgwNywweDNjLDB4MjUsMHgyOCwweDQ3LDB4MDAsCi0weDAwLDB4MDAsMHhhMiwweDhjLDB4MTAsMHgwMCwweDAyLDB4MjQsMHgxMywweDAwLDB4NjIsMHgxMCwweDExLDB4MDAsMHg2NiwweDI4LAotMHgwNiwweDAwLDB4YzAsMHgxMCwweDIwLDB4MDAsMHgwMiwweDI0LDB4MDgsMHgwMCwweDAyLDB4MjQsMHgxNywweDAwLDB4NjIsMHgxMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAxLDB4MDAsMHgwMiwweDI0LDB4ZmQsMHhmZiwweDYyLDB4MTQsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDgzLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMywweGFjLAotMHgwNCwweDAwLDB4ODIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MjUsMHgxMCwweDQ3LDB4MDAsMHgwMCwweDAwLDB4NDIsMHg4YywKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMSwweDAwLDB4MDIsMHgyNCwweDA4LDB4MDAsMHg4MiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHhhMiwweGE0LDB4MDQsMHgwMCwweDgzLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI1LDB4MTgsMHg2NywweDAwLAotMHgwMCwweDAwLDB4NjIsMHg5NCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDEsMHgwMCwweDAyLDB4MjQsMHgwOCwweDAwLDB4ODIsMHg4YywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTIsMHhhMCwweDA0LDB4MDAsMHg4MywweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDI1LDB4MTgsMHg2NywweDAwLDB4MDAsMHgwMCwweDYyLDB4OTAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAxLDB4MDAsMHgwMiwweDI0LAotMHhlMCwweGZmLDB4YmQsMHgyNywweDE0LDB4MDAsMHhiMSwweGFmLDB4MDIsMHg4MCwweDExLDB4M2MsMHgxYywweDAwLDB4YmYsMHhhZiwKLTB4MTgsMHgwMCwweGIyLDB4YWYsMHgxMCwweDAwLDB4YjAsMHhhZiwweDY4LDB4MTUsMHgzMSwweDI2LDB4ZTQsMHg2NCwweDMwLDB4OTYsCi0weDAyLDB4ODAsMHgwMiwweDNjLDB4MDEsMHg4MCwweDAzLDB4M2MsMHgyNSwweDgwLDB4MDIsMHgwMiwweDI1LDB4YjAsMHgwMiwweDNjLAotMHgzOCwweDA2LDB4NjMsMHgyNCwweDE4LDB4MDMsMHg0MiwweDM0LDB4NjAsMHgwMCwweDA0LDB4MjYsMHg4MCwweDAwLDB4MDUsMHgyNiwKLTB4MDAsMHgwMCwweDQzLDB4YWMsMHhhYiwweDQ1LDB4MDAsMHgwYywweDAzLDB4MDAsMHgwNiwweDI0LDB4MjEsMHgyMCwweDAwLDB4MDIsCi0weDIxLDB4MjgsMHgwMCwweDAwLDB4OTcsMHg0NSwweDAwLDB4MGMsMHgwOCwweDAwLDB4MDYsMHgyNCwweGU0LDB4NjQsMHgyMiwweDhlLAotMHgwYywweDAwLDB4MDMsMHgyNCwweDBjLDB4MDAsMHg0MywweGFlLDB4MDgsMHgwMCwweDQyLDB4YWUsMHgxMiwweDAwLDB4MDIsMHgyNCwKLTB4MTQsMHgwMCwweDQyLDB4YWUsMHgyMSwweDIwLDB4NDAsMHgwMiwweDFjLDB4MDAsMHhiZiwweDhmLDB4MTgsMHgwMCwweGIyLDB4OGYsCi0weDE0LDB4MDAsMHhiMSwweDhmLDB4MTAsMHgwMCwweGIwLDB4OGYsMHg4YiwweDA3LDB4MDAsMHgwOCwweDIwLDB4MDAsMHhiZCwweDI3LAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMSwweDAwLDB4MDIsMHgyNCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDEsMHgwMCwweDAyLDB4MjQsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDAxLDB4MDAsMHgwMiwweDI0LDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMSwweDAwLDB4MDIsMHgyNCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAxLDB4MDAsMHgwMiwweDI0LAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDAxLDB4MDAsMHgwMiwweDI0LDB4MDIsMHg4MCwweDAyLDB4M2MsMHgyMSwweDQ4LDB4ODAsMHgwMCwKLTB4NjgsMHgxNSwweDQ4LDB4MjQsMHgyMSwweDM4LDB4MDAsMHgwMCwweDIxLDB4MjgsMHgyNywweDAxLDB4MDAsMHgwMCwweGEyLDB4OTAsCi0weDIxLDB4MjAsMHhlOCwweDAwLDB4MDEsMHgwMCwweGU3LDB4MjQsMHgzOCwweDRjLDB4ODIsMHhhMCwweDFlLDB4MDAsMHhhMywweDkwLAotMHgxZSwweDAwLDB4ZTYsMHgyOCwweDU2LDB4NGMsMHg4MywweGEwLDB4M2MsMHgwMCwweGEyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4NzQsMHg0YywweDgyLDB4YTAsMHg1YSwweDAwLDB4YTMsMHg5MCwweGYzLDB4ZmYsMHhjMCwweDE0LDB4OTIsMHg0YywweDgzLDB4YTAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAxLDB4MDAsMHgwMiwweDI0LAotMHgyMCwweGJkLDB4MDMsMHgzYywweDU4LDB4MDAsMHg2MywweDM0LDB4MDAsMHgwMCwweDYyLDB4OTAsMHgwZiwweDI3LDB4MDcsMHgyNCwKLTB4MjAsMHgwMCwweDQyLDB4MzQsMHgwMCwweDAwLDB4NjIsMHhhMCwweGZmLDB4ZmYsMHhlNywweDI0LDB4ZmYsMHhmZiwweGUxLDB4MDQsCi0weGZmLDB4ZmYsMHhlNywweDI0LDB4NjIsMHhiZCwweDA0LDB4M2MsMHgyNCwweDEwLDB4ODIsMHgzNCwweDAwLDB4MDAsMHg0MCwweGEwLAotMHgyOCwweDEwLDB4ODMsMHgzNCwweDBjLDB4MTEsMHg4NiwweDM0LDB4MGUsMHgwMCwweDAyLDB4MjQsMHgwMCwweDAwLDB4NjAsMHhhMCwKLTB4MDAsMHgxMSwweDg1LDB4MzQsMHgwMCwweDAwLDB4YzIsMHhhMCwweDAwLDB4MDAsMHhhNywweDhjLDB4ZGYsMHhmZiwweDAyLDB4MjQsCi0weDEwLDB4MDAsMHg4NiwweDM0LDB4MjQsMHgzOCwweGUyLDB4MDAsMHg0OSwweDBjLDB4MDMsMHgyNCwweGNmLDB4ZmYsMHgwMiwweDI0LAotMHgwMCwweDAwLDB4YzMsMHhhYywweDA0LDB4MDAsMHg4NCwweDM0LDB4MDAsMHgwMCwweGE3LDB4YWMsMHgyNCwweDM4LDB4ZTIsMHgwMCwKLTB4NDEsMHgwYywweDAyLDB4MjQsMHgwMCwweDAwLDB4YTcsMHhhYywweDAwLDB4MDAsMHg4MCwweGFjLDB4MDAsMHgwMCwweGMyLDB4YWMsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsMHhkMCwweGZmLDB4YmQsMHgyNywweDI1LDB4YjAsMHgwMywweDNjLAotMHgwMSwweDgwLDB4MDIsMHgzYywweGIwLDB4MDMsMHg2OCwweDM0LDB4MWMsMHgwMCwweGIxLDB4YWYsMHgxOCwweDAzLDB4NjMsMHgzNCwKLTB4ZDgsMHhmZiwweDkxLDB4MjQsMHhhMCwweDA4LDB4NDIsMHgyNCwweDAwLDB4MDAsMHg2MiwweGFjLDB4MjgsMHgwMCwweGJmLDB4YWYsCi0weDAwLDB4MDAsMHgxMSwweGFkLDB4MjQsMHgwMCwweGIzLDB4YWYsMHgyMCwweDAwLDB4YjIsMHhhZiwweDE4LDB4MDAsMHhiMCwweGFmLAotMHgwMiwweDgwLDB4MTMsMHgzYywweDAwLDB4MDAsMHgyMywweDk2LDB4NjgsMHgxNSwweDczLDB4MjYsMHhmZiwweGZmLDB4MzIsMHgzMiwKLTB4NDAsMHgxMCwweDAyLDB4M2MsMHg3OCwweDY0LDB4NjUsMHg4ZSwweDI1LDB4OTAsMHg0MiwweDAyLDB4MDIsMHg4MCwweDEwLDB4M2MsCi0weDhjLDB4OTYsMHgxMCwweDI2LDB4MjAsMHgwMCwweDQyLDB4MjYsMHgwMCwweDAwLDB4MDMsMHhhZCwweDIwLDB4MDAsMHgwNiwweDI0LAotMHgwMCwweDAwLDB4MDIsMHhhZCwweDIxLDB4MzgsMHgwMCwweDAyLDB4MGMsMHgwMCwweDAzLDB4YWUsMHgwYSwweDAwLDB4MDQsMHgyNCwKLTB4NjQsMHgwMSwweDAwLDB4MGMsMHgwOCwweDAwLDB4MDIsMHhhZSwweDA0LDB4MDAsMHgyMywweDhlLDB4ZmYsMHhlMCwweDAyLDB4MjQsCi0weDI4LDB4MDAsMHgwNCwweDI0LDB4MjQsMHgxOCwweDYyLDB4MDAsMHgwMCwweDEwLDB4NjMsMHgzNCwweDAyLDB4MDAsMHgyNCwweGEyLAotMHgwNCwweDAwLDB4MjMsMHhhZSwweDBjLDB4MDAsMHgwMiwweDhlLDB4MGEsMHgwMCwweDA0LDB4MjQsMHhmOCwweGZmLDB4NDIsMHgyNCwKLTB4NGQsMHgwMSwweDAwLDB4MGMsMHgwMCwweDAwLDB4MjIsMHhhNiwweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsCi0weDAxLDB4MDAsMHgyMSwweDM4LDB4MDAsMHg2MCwweDgxLDB4NDAsMHgwYywweDAwLDB4MDcsMHg4ZSwweDIwLDB4MTAsMHgwNiwweDNjLAotMHgyMSwweDI4LDB4NDAsMHgwMiwweDIwLDB4MDAsMHhlNywweDI0LDB4MDAsMHhmZSwweGM2LDB4MzQsMHhmZiwweGZmLDB4ZTcsMHgzMCwKLTB4MDEsMHgwMCwweDExLDB4MjQsMHgwYSwweDAwLDB4MDQsMHgyNCwweDEwLDB4MDEsMHgwMCwweDBjLDB4MTAsMHgwMCwweGIxLDB4YWYsCi0weGQ1LDB4NGEsMHg2MywweDkyLDB4MmEsMHhiMCwweDEwLDB4M2MsMHgzMiwweDAwLDB4MDIsMHgzNiwweDAxLDB4MDAsMHg2MywweDI0LAotMHgwMCwweDAwLDB4NDMsMHhhMCwweDRkLDB4MDEsMHgwMCwweDBjLDB4MGEsMHgwMCwweDA0LDB4MjQsMHhjOSwweDY0LDB4NjIsMHg5MiwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4NDIsMHgyNCwweGM5LDB4NjQsMHg2MiwweGEyLDB4MDAsMHg2MCwweDAxLDB4NDAsCi0weDAxLDB4MDAsMHgyMSwweDM0LDB4MDAsMHg2MCwweDgxLDB4NDAsMHgwMSwweDAwLDB4MTAsMHgzNiwweDAwLDB4MDAsMHgxMSwweGEyLAotMHgyOCwweDAwLDB4YmYsMHg4ZiwweDI0LDB4MDAsMHhiMywweDhmLDB4MjAsMHgwMCwweGIyLDB4OGYsMHgxYywweDAwLDB4YjEsMHg4ZiwKLTB4MTgsMHgwMCwweGIwLDB4OGYsMHgyMSwweDEwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MzAsMHgwMCwweGJkLDB4MjcsCi0weDI1LDB4YjAsMHgwNSwweDNjLDB4MDEsMHg4MCwweDAzLDB4M2MsMHgyMSwweDM4LDB4ODAsMHgwMCwweDE4LDB4MDMsMHhhMiwweDM0LAotMHhlOCwweDA5LDB4NjMsMHgyNCwweDAxLDB4MDAsMHgwNCwweDI0LDB4MDAsMHgwMCwweDQzLDB4YWMsMHgzNSwweDAwLDB4ZTQsMHgxMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgxMCwweDIwLDB4MDgsMHhhMiwweDM0LDB4MDIsMHgwMCwweDAyLDB4MjQsCi0weDgzLDB4MDAsMHhlMiwweDEwLDB4MDMsMHgwMCwweDAyLDB4MjQsMHg1YSwweDAwLDB4ZTIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg4MCwweDAzLDB4M2MsMHgwMCwweDAwLDB4NDQsMHg4YywKLTB4NjgsMHgxNSwweDY2LDB4MjQsMHg3MCwweDA4LDB4MDIsMHgyNCwweGUwLDB4MDgsMHgwMywweDI0LDB4NzQsMHg0YiwweGMyLDB4YWMsCi0weDQwLDB4MDgsMHgwMiwweDI0LDB4NzgsMHg0YiwweGMzLDB4YWMsMHg4NCwweDRiLDB4YzIsMHhhYywweDc4LDB4MDgsMHgwMywweDI0LAotMHgwYywweDA4LDB4MDIsMHgyNCwweDg4LDB4NGIsMHhjMywweGFjLDB4OGMsMHg0YiwweGMyLDB4YWMsMHgxMCwweDA4LDB4MDMsMHgyNCwKLTB4MjAsMHgwOCwweDAyLDB4MjQsMHg5MCwweDRiLDB4YzMsMHhhYywweDk0LDB4NGIsMHhjMiwweGFjLDB4MjQsMHgwOCwweDAzLDB4MjQsCi0weDU4LDB4MDgsMHgwMiwweDI0LDB4OTgsMHg0YiwweGMzLDB4YWMsMHg5YywweDRiLDB4YzIsMHhhYywweDUwLDB4MGMsMHgwMywweDI0LAotMHg1NCwweDBjLDB4MDIsMHgyNCwweGEwLDB4NGIsMHhjMywweGFjLDB4YTQsMHg0YiwweGMyLDB4YWMsMHgxNCwweDBjLDB4MDMsMHgyNCwKLTB4MTAsMHgwYywweDAyLDB4MjQsMHg2MCwweDA4LDB4MDUsMHgyNCwweGE4LDB4NGIsMHhjMywweGFjLDB4YWMsMHg0YiwweGMyLDB4YWMsCi0weDgwLDB4MGMsMHgwMywweDI0LDB4ODQsMHgwYywweDAyLDB4MjQsMHgwMCwweDAxLDB4ODQsMHgzMCwweGI0LDB4NGIsMHhjMiwweGFjLAotMHg4MCwweDRiLDB4YzUsMHhhYywweGIwLDB4NGIsMHhjMywweGFjLDB4NzEsMHg0YiwweGMwLDB4YTAsMHg3YywweDRiLDB4YzUsMHhhYywKLTB4MDIsMHgwMCwweDgwLDB4MTAsMHhhMCwweDA4LDB4MDIsMHgyNCwweGI4LDB4MDgsMHgwMiwweDI0LDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weGI4LDB4NGIsMHhjMiwweGFjLDB4MjgsMHgwOCwweGEyLDB4MzQsMHgwMiwweDgwLDB4MDMsMHgzYywweDAwLDB4MDAsMHg0NCwweDhjLAotMHg2OCwweDE1LDB4NjYsMHgyNCwweDcwLDB4MDgsMHgwMiwweDI0LDB4ZTAsMHgwOCwweDAzLDB4MjQsMHg3NCwweDRiLDB4YzIsMHhhYywKLTB4NDQsMHgwOCwweDAyLDB4MjQsMHg3OCwweDRiLDB4YzMsMHhhYywweDg0LDB4NGIsMHhjMiwweGFjLDB4NzgsMHgwOCwweDAzLDB4MjQsCi0weDBjLDB4MDgsMHgwMiwweDI0LDB4ODgsMHg0YiwweGMzLDB4YWMsMHg4YywweDRiLDB4YzIsMHhhYywweDE0LDB4MDgsMHgwMywweDI0LAotMHgyOCwweDA4LDB4MDIsMHgyNCwweDkwLDB4NGIsMHhjMywweGFjLDB4OTQsMHg0YiwweGMyLDB4YWMsMHgyYywweDA4LDB4MDMsMHgyNCwKLTB4NTgsMHgwOCwweDAyLDB4MjQsMHg5OCwweDRiLDB4YzMsMHhhYywweDljLDB4NGIsMHhjMiwweGFjLDB4NTgsMHgwYywweDAzLDB4MjQsCi0weDVjLDB4MGMsMHgwMiwweDI0LDB4YTAsMHg0YiwweGMzLDB4YWMsMHhhNCwweDRiLDB4YzIsMHhhYywweDFjLDB4MGMsMHgwMywweDI0LAotMHgxOCwweDBjLDB4MDIsMHgyNCwweDY0LDB4MDgsMHgwNSwweDI0LDB4YTgsMHg0YiwweGMzLDB4YWMsMHhhYywweDRiLDB4YzIsMHhhYywKLTB4ODgsMHgwYywweDAzLDB4MjQsMHg4YywweDBjLDB4MDIsMHgyNCwweDAwLDB4MDEsMHg4NCwweDMwLDB4YjQsMHg0YiwweGMyLDB4YWMsCi0weDcxLDB4NGIsMHhjNywweGEwLDB4ODAsMHg0YiwweGM1LDB4YWMsMHhiMCwweDRiLDB4YzMsMHhhYywweDdjLDB4NGIsMHhjNSwweGFjLAotMHhkNiwweGZmLDB4ODAsMHgxMCwweGE0LDB4MDgsMHgwMiwweDI0LDB4YmMsMHgwOCwweDAyLDB4MjQsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4YjgsMHg0YiwweGMyLDB4YWMsMHgwMiwweDgwLDB4MDIsMHgzYywweDY4LDB4MTUsMHg0MiwweDI0LDB4YWMsMHgwOCwweDAzLDB4MjQsCi0weGI4LDB4NGIsMHg0MywweGFjLDB4NzQsMHgwOCwweDAzLDB4MjQsMHhlNCwweDA4LDB4MDQsMHgyNCwweDc0LDB4NGIsMHg0MywweGFjLAotMHg0YywweDA4LDB4MDMsMHgyNCwweDc4LDB4NGIsMHg0NCwweGFjLDB4ODQsMHg0YiwweDQzLDB4YWMsMHg3YywweDA4LDB4MDQsMHgyNCwKLTB4MGMsMHgwOCwweDAzLDB4MjQsMHg4OCwweDRiLDB4NDQsMHhhYywweDhjLDB4NGIsMHg0MywweGFjLDB4MWMsMHgwOCwweDA0LDB4MjQsCi0weDM4LDB4MDgsMHgwMywweDI0LDB4OTAsMHg0YiwweDQ0LDB4YWMsMHg5NCwweDRiLDB4NDMsMHhhYywweDNjLDB4MDgsMHgwNCwweDI0LAotMHg1YywweDA4LDB4MDMsMHgyNCwweDk4LDB4NGIsMHg0NCwweGFjLDB4OWMsMHg0YiwweDQzLDB4YWMsMHg2OCwweDBjLDB4MDQsMHgyNCwKLTB4NmMsMHgwYywweDAzLDB4MjQsMHhhMCwweDRiLDB4NDQsMHhhYywweGE0LDB4NGIsMHg0MywweGFjLDB4MmMsMHgwYywweDA0LDB4MjQsCi0weDI4LDB4MGMsMHgwMywweDI0LDB4NmMsMHgwOCwweDA1LDB4MjQsMHhhOCwweDRiLDB4NDQsMHhhYywweGFjLDB4NGIsMHg0MywweGFjLAotMHg5OCwweDBjLDB4MDQsMHgyNCwweDljLDB4MGMsMHgwMywweDI0LDB4NzEsMHg0YiwweDQ3LDB4YTAsMHg4MCwweDRiLDB4NDUsMHhhYywKLTB4YjAsMHg0YiwweDQ0LDB4YWMsMHhiNCwweDRiLDB4NDMsMHhhYywweDA4LDB4MDAsMHhlMCwweDAzLDB4N2MsMHg0YiwweDQ1LDB4YWMsCi0weDAyLDB4ODAsMHgwMiwweDNjLDB4NjgsMHgxNSwweDQyLDB4MjQsMHhhOCwweDA4LDB4MDMsMHgyNCwweGI4LDB4NGIsMHg0MywweGFjLAotMHg3NCwweDA4LDB4MDMsMHgyNCwweGU0LDB4MDgsMHgwNCwweDI0LDB4NzQsMHg0YiwweDQzLDB4YWMsMHg0OCwweDA4LDB4MDMsMHgyNCwKLTB4NzgsMHg0YiwweDQ0LDB4YWMsMHg4NCwweDRiLDB4NDMsMHhhYywweDdjLDB4MDgsMHgwNCwweDI0LDB4MGMsMHgwOCwweDAzLDB4MjQsCi0weDg4LDB4NGIsMHg0NCwweGFjLDB4OGMsMHg0YiwweDQzLDB4YWMsMHgxOCwweDA4LDB4MDQsMHgyNCwweDMwLDB4MDgsMHgwMywweDI0LAotMHg5MCwweDRiLDB4NDQsMHhhYywweDk0LDB4NGIsMHg0MywweGFjLDB4MzQsMHgwOCwweDA0LDB4MjQsMHg1YywweDA4LDB4MDMsMHgyNCwKLTB4OTgsMHg0YiwweDQ0LDB4YWMsMHg5YywweDRiLDB4NDMsMHhhYywweDYwLDB4MGMsMHgwNCwweDI0LDB4NjQsMHgwYywweDAzLDB4MjQsCi0weGEwLDB4NGIsMHg0NCwweGFjLDB4YTQsMHg0YiwweDQzLDB4YWMsMHgyNCwweDBjLDB4MDQsMHgyNCwweDIwLDB4MGMsMHgwMywweDI0LAotMHg2OCwweDA4LDB4MDUsMHgyNCwweGE4LDB4NGIsMHg0NCwweGFjLDB4YWMsMHg0YiwweDQzLDB4YWMsMHg5MCwweDBjLDB4MDQsMHgyNCwKLTB4OTQsMHgwYywweDAzLDB4MjQsMHg3MSwweDRiLDB4NDcsMHhhMCwweDgwLDB4NGIsMHg0NSwweGFjLDB4YjAsMHg0YiwweDQ0LDB4YWMsCi0weGI0LDB4NGIsMHg0MywweGFjLDB4MDgsMHgwMCwweGUwLDB4MDMsMHg3YywweDRiLDB4NDUsMHhhYywweDM2LDB4NDMsMHgwMCwweDA4LAotMHgyMSwweDE4LDB4MDAsMHgwMCwweDIwLDB4MDAsMHg2MiwweDJjLDB4MDYsMHgwMCwweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDYsMHgxMCwweDY0LDB4MDAsMHgwMSwweDAwLDB4NDIsMHgzMCwweGZhLDB4ZmYsMHg0MCwweDEwLDB4MDEsMHgwMCwweDYzLDB4MjQsCi0weGZmLDB4ZmYsMHg2MywweDI0LDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4NjAsMHgwMCwweGQ4LDB4ZmYsMHhiZCwweDI3LAotMHgyNSwweGIwLDB4MDIsMHgzYywweDE4LDB4MDAsMHhiMiwweGFmLDB4MjEsMHg5MCwweDgyLDB4MDAsMHhmZiwweGZmLDB4MDIsMHgyNCwKLTB4MWMsMHgwMCwweGIzLDB4YWYsMHgxNCwweDAwLDB4YjEsMHhhZiwweDIwLDB4MDAsMHhiZiwweGFmLDB4MTAsMHgwMCwweGIwLDB4YWYsCi0weDIxLDB4ODgsMHhhMCwweDAwLDB4MjEsMHgyMCwweGEwLDB4MDAsMHgyMSwweDE4LDB4NDAsMHgwMiwweDEwLDB4MDAsMHhhMiwweDEwLAotMHgyMSwweDk4LDB4YzAsMHgwMCwweDAwLDB4MDAsMHg1MCwweDhlLDB4MzEsMHg0MywweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDQsMHgxMCwweDUzLDB4MDAsMHgyNywweDE4LDB4MTEsMHgwMCwweDI1LDB4MTgsMHg2MiwweDAwLDB4MjQsMHgxOCwweDcwLDB4MDAsCi0weDAwLDB4MDAsMHg0MywweGFlLDB4MjAsMHgwMCwweGJmLDB4OGYsMHgxYywweDAwLDB4YjMsMHg4ZiwweDE4LDB4MDAsMHhiMiwweDhmLAotMHgxNCwweDAwLDB4YjEsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyOCwweDAwLDB4YmQsMHgyNywKLTB4MjAsMHgwMCwweGJmLDB4OGYsMHgxYywweDAwLDB4YjMsMHg4ZiwweDE4LDB4MDAsMHhiMiwweDhmLDB4MTQsMHgwMCwweGIxLDB4OGYsCi0weDEwLDB4MDAsMHhiMCwweDhmLDB4MjgsMHgwMCwweGJkLDB4MjcsMHgwMCwweDAwLDB4NjYsMHhhYywweDA4LDB4MDAsMHhlMCwweDAzLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4ODAsMHgwMiwweDNjLDB4MjEsMHgzMCwweDgwLDB4MDAsMHhlYywweDYwLDB4NDQsMHg4YywKLTB4M2QsMHg0MywweDAwLDB4MDgsMHhmZiwweGZmLDB4MDUsMHgyNCwweGUwLDB4ZmYsMHhiZCwweDI3LDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weDE4LDB4MDAsMHhiZiwweGFmLDB4MTQsMHgwMCwweGIxLDB4YWYsMHgxMCwweDAwLDB4YjAsMHhhZiwweDIxLDB4MjAsMHg4MiwweDAwLAotMHgwMCwweDAwLDB4OTAsMHg4YywweDIxLDB4ODgsMHhhMCwweDAwLDB4MzEsMHg0MywweDAwLDB4MGMsMHgyMSwweDIwLDB4YTAsMHgwMCwKLTB4MjQsMHg4MCwweDExLDB4MDIsMHgwNiwweDEwLDB4NTAsMHgwMCwweDE4LDB4MDAsMHhiZiwweDhmLDB4MTQsMHgwMCwweGIxLDB4OGYsCi0weDEwLDB4MDAsMHhiMCwweDhmLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMCwweDAwLDB4YmQsMHgyNywweGQwLDB4ZmYsMHhiZCwweDI3LAotMHgxNCwweDAwLDB4YjEsMHhhZiwweDAyLDB4ODAsMHgxMSwweDNjLDB4MjgsMHgwMCwweGJmLDB4YWYsMHgyMCwweDAwLDB4YjQsMHhhZiwKLTB4MWMsMHgwMCwweGIzLDB4YWYsMHgxOCwweDAwLDB4YjIsMHhhZiwweDI0LDB4MDAsMHhiNSwweGFmLDB4MTAsMHgwMCwweGIwLDB4YWYsCi0weDY4LDB4MTUsMHgzMSwweDI2LDB4OTgsMHg0YiwweDIyLDB4OGUsMHgyNSwweGIwLDB4MTIsMHgzYywweDI0LDB4MDgsMHg1MywweDM2LAotMHgyMSwweDEwLDB4NTIsMHgwMCwweDAwLDB4MDAsMHg3MCwweDhlLDB4MDAsMHgwMCwweDU1LDB4OGMsMHg3ZiwweDgwLDB4MDMsMHgzYywKLTB4ZmYsMHg3ZiwweDAyLDB4M2MsMHhmZiwweGZmLDB4NjMsMHgzNCwweGZmLDB4ZmYsMHg0MiwweDM0LDB4MjQsMHgxMCwweDAyLDB4MDIsCi0weDI0LDB4MTgsMHhhMywweDAyLDB4YzAsMHgyNSwweDA0LDB4MDAsMHgyNSwweDE4LDB4NjQsMHgwMCwweDAwLDB4ODAsMHgxNCwweDNjLAotMHgwMCwweDAwLDB4NjIsMHhhZSwweDAxLDB4MDAsMHgwNCwweDI0LDB4ODQsMHgwYSwweDAwLDB4MGMsMHgyNSwweGE4LDB4NzQsMHgwMCwKLTB4OTgsMHg0YiwweDIyLDB4OGUsMHgyNSwweDgwLDB4MTQsMHgwMiwweDAxLDB4MDAsMHgwNCwweDI0LDB4MjEsMHgxMCwweDUyLDB4MDAsCi0weDAwLDB4MDAsMHg1NSwweGFjLDB4ODQsMHgwYSwweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg3MCwweGFlLAotMHg4NCwweDBhLDB4MDAsMHgwYywweDAxLDB4MDAsMHgwNCwweDI0LDB4YjgsMHg0YiwweDI0LDB4OGUsMHgwZiwweDAwLDB4MDUsMHgzYywKLTB4MjgsMHgwMCwweGJmLDB4OGYsMHgyNCwweDAwLDB4YjUsMHg4ZiwweDIwLDB4MDAsMHhiNCwweDhmLDB4MWMsMHgwMCwweGIzLDB4OGYsCi0weDE4LDB4MDAsMHhiMiwweDhmLDB4MTQsMHgwMCwweGIxLDB4OGYsMHgxMCwweDAwLDB4YjAsMHg4ZiwweGZmLDB4ZmYsMHhhNSwweDM0LAotMHg2OCwweDQzLDB4MDAsMHgwOCwweDMwLDB4MDAsMHhiZCwweDI3LDB4ZTAsMHhmZiwweGJkLDB4MjcsMHgxNCwweDAwLDB4YjEsMHhhZiwKLTB4MDIsMHg4MCwweDExLDB4M2MsMHgxMCwweDAwLDB4YjAsMHhhZiwweDE4LDB4MDAsMHhiZiwweGFmLDB4NjgsMHgxNSwweDI3LDB4MjYsCi0weDczLDB4NGIsMHhlNSwweDkwLDB4MDEsMHg4MCwweDAzLDB4M2MsMHgyNSwweGIwLDB4MDIsMHgzYywweGIwLDB4MGUsMHg2MywweDI0LAotMHgxOCwweDAzLDB4NDIsMHgzNCwweDAyLDB4MDAsMHgwNiwweDI0LDB4MDAsMHgwMCwweDQzLDB4YWMsMHgzNCwweDAwLDB4YTYsMHgxMCwKLTB4MjEsMHg4MCwweDgwLDB4MDAsMHgwMywweDAwLDB4MDMsMHgyNCwweDNhLDB4MDAsMHhhMywweDEwLDB4MmUsMHgwMCwweDAyLDB4MmUsCi0weDEwLDB4MDAsMHgwMiwweDJlLDB4MDcsMHgwMCwweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MDAsMHgwNCwweDMyLAotMHgxOCwweDAwLDB4YmYsMHg4ZiwweDE0LDB4MDAsMHhiMSwweDhmLDB4MTAsMHgwMCwweGIwLDB4OGYsMHg3OSwweDQzLDB4MDAsMHgwOCwKLTB4MjAsMHgwMCwweGJkLDB4MjcsMHhmYSwweGZmLDB4YTYsMHgxNCwweGZmLDB4MDAsMHgwNCwweDMyLDB4NzEsMHg0YiwweGU0LDB4OTAsCi0weDAxLDB4MDAsMHgwMiwweDI0LDB4MzMsMHgwMCwweDgyLDB4MTAsMHgwMiwweDAwLDB4ODIsMHgyOCwweDM4LDB4MDAsMHg0MCwweDE0LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MDAsMHg4NSwweDEwLDB4NjgsMHgxNSwweDIyLDB4MjYsMHgyZSwweDAwLDB4ODMsMHgxMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgyNCwweDY4LDB4NDMsMHgwMCwweDBjLDB4ZmYsMHhmZiwweDA1LDB4MjQsCi0weGZmLDB4ZmMsMHgwNiwweDNjLDB4ZmYsMHhmZiwweGM2LDB4MzQsMHgyNCwweDMwLDB4NDYsMHgwMCwweDAwLDB4MDgsMHgwNCwweDI0LAotMHgzZCwweDQzLDB4MDAsMHgwYywweGZmLDB4ZmYsMHgwNSwweDI0LDB4NjgsMHgxNSwweDIyLDB4MjYsMHg3MSwweDRiLDB4NDQsMHg5MCwKLTB4MDEsMHgwMCwweDAzLDB4MjQsMHgwNywweDAwLDB4ODMsMHgxMCwweDAyLDB4MDAsMHg4MiwweDI4LDB4MmMsMHgwMCwweDQwLDB4MTQsCi0weDAyLDB4MDAsMHgwMiwweDI0LDB4MmMsMHgwMCwweDgyLDB4MTAsMHgwMywweDAwLDB4MDIsMHgyNCwweGRiLDB4ZmYsMHg4MiwweDE0LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MTUsMHgyMiwweDI2LDB4NzQsMHg0YiwweDQ0LDB4OGMsMHgwZiwweDAwLDB4MDUsMHgzYywKLTB4M2QsMHg0MywweDAwLDB4MGMsMHgyMSwweDMwLDB4MDAsMHgwMCwweGMyLDB4NDMsMHgwMCwweDA4LDB4ZmYsMHgwMCwweDA0LDB4MzIsCi0weDI1LDB4MDAsMHg4MiwweDJjLDB4Y2MsMHhmZiwweDQwLDB4MTQsMHgwMywweDAwLDB4MDMsMHgyNCwweDE4LDB4MDAsMHhiZiwweDhmLAotMHgxNCwweDAwLDB4YjEsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLDB4MjEsMHgxMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MjAsMHgwMCwweGJkLDB4MjcsMHhjNywweGZmLDB4NDAsMHgxNCwweDEwLDB4MDAsMHgwMiwweDJlLDB4MTgsMHgwMCwweGJmLDB4OGYsCi0weDE0LDB4MDAsMHhiMSwweDhmLDB4MTAsMHgwMCwweGIwLDB4OGYsMHgyMSwweDEwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgyMCwweDAwLDB4YmQsMHgyNywweDY4LDB4MTUsMHgyMiwweDI2LDB4NzQsMHg0YiwweDQ0LDB4OGMsMHgwZiwweDAwLDB4MDUsMHgzYywKLTB4M2QsMHg0MywweDAwLDB4MGMsMHgwZiwweDAwLDB4MDYsMHgyNCwweGQ0LDB4NDMsMHgwMCwweDA4LDB4MDAsMHgwOCwweDA0LDB4MjQsCi0weGNjLDB4ZmYsMHg4MCwweDE0LDB4NjgsMHgxNSwweDIyLDB4MjYsMHg3NCwweDRiLDB4NDQsMHg4YywweDBmLDB4MDAsMHgwNSwweDI0LAotMHgzZCwweDQzLDB4MDAsMHgwYywweDBmLDB4MDAsMHgwNiwweDI0LDB4ZDQsMHg0MywweDAwLDB4MDgsMHgwMCwweDA4LDB4MDQsMHgyNCwKLTB4YjIsMHhmZiwweDgwLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MTUsMHgyMiwweDI2LDB4NzQsMHg0YiwweDQ0LDB4OGMsCi0weDBmLDB4MDAsMHgwNSwweDI0LDB4M2QsMHg0MywweDAwLDB4MGMsMHgyMSwweDMwLDB4MDAsMHgwMCwweGMyLDB4NDMsMHgwMCwweDA4LAotMHhmZiwweDAwLDB4MDQsMHgzMiwweGUwLDB4ZmYsMHhiZCwweDI3LDB4MTQsMHgwMCwweGIxLDB4YWYsMHgwMiwweDgwLDB4MTEsMHgzYywKLTB4NjgsMHgxNSwweDI4LDB4MjYsMHg3MywweDRiLDB4MDYsMHg5MSwweDAxLDB4ODAsMHgwMywweDNjLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weDVjLDB4MTAsMHg2MywweDI0LDB4MTgsMHgwMywweDQyLDB4MzQsMHgwMiwweDAwLDB4MDcsMHgyNCwweDE4LDB4MDAsMHhiMiwweGFmLAotMHgxMCwweDAwLDB4YjAsMHhhZiwweDFjLDB4MDAsMHhiZiwweGFmLDB4MDAsMHgwMCwweDQzLDB4YWMsMHgyMSwweDkwLDB4YTAsMHgwMCwKLTB4MzksMHgwMCwweGM3LDB4MTAsMHhmZiwweDAwLDB4OTAsMHgzMCwweDAzLDB4MDAsMHgwMywweDI0LDB4M2YsMHgwMCwweGMzLDB4MTAsCi0weDJlLDB4MDAsMHgwMiwweDJlLDB4MTAsMHgwMCwweDAyLDB4MmUsMHgwYywweDAwLDB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwZiwweDAwLDB4MDQsMHgzYywweGZmLDB4ZmYsMHg4NCwweDM0LDB4MjQsMHgyMCwweDQ0LDB4MDIsMHgwMCwweDE1LDB4MTAsMHgwMCwKLTB4MWMsMHgwMCwweGJmLDB4OGYsMHgxOCwweDAwLDB4YjIsMHg4ZiwweDE0LDB4MDAsMHhiMSwweDhmLDB4MTAsMHgwMCwweGIwLDB4OGYsCi0weDI1LDB4MjAsMHg0NCwweDAwLDB4NjMsMHg0MywweDAwLDB4MDgsMHgyMCwweDAwLDB4YmQsMHgyNywweGY1LDB4ZmYsMHhjNywweDE0LAotMHgwZiwweDAwLDB4MDQsMHgzYywweDcxLDB4NGIsMHgwNCwweDkxLDB4MDEsMHgwMCwweDAyLDB4MjQsMHgzMywweDAwLDB4ODIsMHgxMCwKLTB4MDIsMHgwMCwweDgyLDB4MjgsMHgzOCwweDAwLDB4NDAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzgsMHgwMCwweDg2LDB4MTAsCi0weDY4LDB4MTUsMHgyMiwweDI2LDB4MmUsMHgwMCwweDgzLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwNCwweDI0LAotMHg2OCwweDQzLDB4MDAsMHgwYywweGZmLDB4ZmYsMHgwNSwweDI0LDB4ZmYsMHhmYywweDA2LDB4M2MsMHhmZiwweGZmLDB4YzYsMHgzNCwKLTB4MjQsMHgzMCwweDQ2LDB4MDAsMHgwMCwweDA4LDB4MDQsMHgyNCwweDNkLDB4NDMsMHgwMCwweDBjLDB4ZmYsMHhmZiwweDA1LDB4MjQsCi0weDY4LDB4MTUsMHgyMiwweDI2LDB4NzEsMHg0YiwweDQ0LDB4OTAsMHgwMSwweDAwLDB4MDMsMHgyNCwweDA3LDB4MDAsMHg4MywweDEwLAotMHgwMiwweDAwLDB4ODIsMHgyOCwweDJjLDB4MDAsMHg0MCwweDE0LDB4MDIsMHgwMCwweDAyLDB4MjQsMHgyYywweDAwLDB4ODIsMHgxMCwKLTB4MDMsMHgwMCwweDAyLDB4MjQsMHhkNiwweGZmLDB4ODIsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjgsMHgxNSwweDIyLDB4MjYsCi0weDc0LDB4NGIsMHg0NCwweDhjLDB4MGYsMHgwMCwweDA1LDB4M2MsMHgzZCwweDQzLDB4MDAsMHgwYywweDIxLDB4MzAsMHgwMCwweDAwLAotMHgyZiwweDQ0LDB4MDAsMHgwOCwweDBmLDB4MDAsMHgwNCwweDNjLDB4MjUsMHgwMCwweDAyLDB4MmUsMHhjNywweGZmLDB4NDAsMHgxNCwKLTB4MDMsMHgwMCwweDAzLDB4MjQsMHgxYywweDAwLDB4YmYsMHg4ZiwweDE4LDB4MDAsMHhiMiwweDhmLDB4MTQsMHgwMCwweGIxLDB4OGYsCi0weDEwLDB4MDAsMHhiMCwweDhmLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMCwweDAwLDB4YmQsMHgyNywweGMxLDB4ZmYsMHg0MCwweDE0LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDFjLDB4MDAsMHhiZiwweDhmLDB4MTgsMHgwMCwweGIyLDB4OGYsMHgxNCwweDAwLDB4YjEsMHg4ZiwKLTB4MTAsMHgwMCwweGIwLDB4OGYsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIwLDB4MDAsMHhiZCwweDI3LDB4NjgsMHgxNSwweDIyLDB4MjYsCi0weDc0LDB4NGIsMHg0NCwweDhjLDB4MGYsMHgwMCwweDA1LDB4M2MsMHgzZCwweDQzLDB4MDAsMHgwYywweDBmLDB4MDAsMHgwNiwweDI0LAotMHg0NiwweDQ0LDB4MDAsMHgwOCwweDAwLDB4MDgsMHgwNCwweDI0LDB4Y2MsMHhmZiwweDgwLDB4MTQsMHg2OCwweDE1LDB4MjIsMHgyNiwKLTB4NzQsMHg0YiwweDQ0LDB4OGMsMHgwZiwweDAwLDB4MDUsMHgyNCwweDNkLDB4NDMsMHgwMCwweDBjLDB4MGYsMHgwMCwweDA2LDB4MjQsCi0weDQ2LDB4NDQsMHgwMCwweDA4LDB4MDAsMHgwOCwweDA0LDB4MjQsMHhhZCwweGZmLDB4ODAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg2OCwweDE1LDB4MjIsMHgyNiwweDc0LDB4NGIsMHg0NCwweDhjLDB4MGYsMHgwMCwweDA1LDB4MjQsMHgzZCwweDQzLDB4MDAsMHgwYywKLTB4MjEsMHgzMCwweDAwLDB4MDAsMHgyZiwweDQ0LDB4MDAsMHgwOCwweDBmLDB4MDAsMHgwNCwweDNjLDB4ZTgsMHhmZiwweGJkLDB4MjcsCi0weDEwLDB4MDAsMHhiMCwweGFmLDB4MjEsMHg4MCwweDgwLDB4MDAsMHgxNCwweDAwLDB4YmYsMHhhZiwweDc5LDB4NDMsMHgwMCwweDBjLAotMHgyMSwweDIwLDB4MDAsMHgwMCwweDQwLDB4MDEsMHg0NCwweDM0LDB4MjEsMHgxOCwweDQwLDB4MDAsMHgxZiwweDAwLDB4MDIsMHgyZSwKLTB4MDAsMHgyMywweDA0LDB4MDAsMHgxMCwweDAwLDB4NDAsMHgxMCwweDEwLDB4MDAsMHgwNSwweDJlLDB4MDAsMHgwMSwweDY0LDB4MzQsCi0weDA2LDB4MDAsMHhhMCwweDEwLDB4MDAsMHgyMywweDA0LDB4MDAsMHgyMSwweDEwLDB4MDAsMHgwMiwweDE0LDB4MDAsMHhiZiwweDhmLAotMHgxMCwweDAwLDB4YjAsMHg4ZiwweDA4LDB4MDAsMHhlMCwweDAzLDB4MTgsMHgwMCwweGJkLDB4MjcsMHg2MywweDQzLDB4MDAsMHgwYywKLTB4ZjEsMHhmZiwweDEwLDB4MjYsMHgyMSwweDEwLDB4MDAsMHgwMiwweDE0LDB4MDAsMHhiZiwweDhmLDB4MTAsMHgwMCwweGIwLDB4OGYsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MTgsMHgwMCwweGJkLDB4MjcsMHg2MywweDQzLDB4MDAsMHgwYywweGUyLDB4ZmYsMHgxMCwweDI2LAotMHgyMSwweDEwLDB4MDAsMHgwMiwweDE0LDB4MDAsMHhiZiwweDhmLDB4MTAsMHgwMCwweGIwLDB4OGYsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MTgsMHgwMCwweGJkLDB4MjcsMHgyNSwweGIwLDB4MDIsMHgzYywweDI3LDB4MzgsMHgwNSwweDAwLDB4MjEsMHg0MCwweDgyLDB4MDAsCi0weGZmLDB4ZmYsMHgwMiwweDI0LDB4MDcsMHgwMCwweGEyLDB4MTAsMHgyNSwweDM4LDB4ZTYsMHgwMCwweDAwLDB4MDAsMHgwMiwweDhkLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MTAsMHhlMiwweDAwLDB4MDAsMHgwMCwweDAyLDB4YWQsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDYsMHhhZCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAxLDB4ODAsMHgwMiwweDNjLDB4MjUsMHhiMCwweDAzLDB4M2MsMHhlOCwweDEyLDB4NDIsMHgyNCwweDE4LDB4MDMsMHg2MywweDM0LAotMHhkOCwweGZmLDB4YmQsMHgyNywweDAwLDB4MDAsMHg2MiwweGFjLDB4MGYsMHgwMCwweDAyLDB4M2MsMHgxNCwweDAwLDB4YjEsMHhhZiwKLTB4ZmYsMHhmZiwweDQyLDB4MzQsMHgyMSwweDg4LDB4YTAsMHgwMCwweDFjLDB4MDAsMHhiMywweGFmLDB4MTgsMHgwMCwweGIyLDB4YWYsCi0weDIwLDB4MDAsMHhiZiwweGFmLDB4MTAsMHgwMCwweGIwLDB4YWYsMHgyMSwweDkwLDB4YzAsMHgwMCwweDIxLDB4MjgsMHhjMCwweDAwLAotMHgwYSwweDAwLDB4MjIsMHgxMiwweDIxLDB4OTgsMHg4MCwweDAwLDB4YWMsMHg0MywweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjEsMHgyMCwweDIwLDB4MDIsMHgzMSwweDQzLDB4MDAsMHgwYywweDIxLDB4ODAsMHg0MCwweDAwLDB4MDQsMHgxMCwweDUyLDB4MDAsCi0weDI3LDB4MjgsMHgxMSwweDAwLDB4MjUsMHgyOCwweGEyLDB4MDAsMHgyNCwweDI4LDB4YjAsMHgwMCwweGZmLDB4MDAsMHg2NCwweDMyLAotMHgyMCwweDAwLDB4YmYsMHg4ZiwweDFjLDB4MDAsMHhiMywweDhmLDB4MTgsMHgwMCwweGIyLDB4OGYsMHgxNCwweDAwLDB4YjEsMHg4ZiwKLTB4MTAsMHgwMCwweGIwLDB4OGYsMHgxNywweDQ0LDB4MDAsMHgwOCwweDI4LDB4MDAsMHhiZCwweDI3LDB4MDEsMHg4MCwweDAzLDB4M2MsCi0weDI1LDB4YjAsMHgwMiwweDNjLDB4NzQsMHgxMywweDYzLDB4MjQsMHgxOCwweDAzLDB4NDIsMHgzNCwweGUwLDB4ZmYsMHhiZCwweDI3LAotMHgwMCwweDAwLDB4NDMsMHhhYywweDE4LDB4MDAsMHhiZiwweGFmLDB4MTQsMHgwMCwweGIxLDB4YWYsMHgxMCwweDAwLDB4YjAsMHhhZiwKLTB4YWMsMHg0MywweDAwLDB4MGMsMHgyMSwweDg4LDB4YTAsMHgwMCwweDIxLDB4ODAsMHg0MCwweDAwLDB4MzEsMHg0MywweDAwLDB4MGMsCi0weDIxLDB4MjAsMHgyMCwweDAyLDB4MjQsMHg4MCwweDExLDB4MDIsMHgwNiwweDEwLDB4NTAsMHgwMCwweDE4LDB4MDAsMHhiZiwweDhmLAotMHgxNCwweDAwLDB4YjEsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMCwweDAwLDB4YmQsMHgyNywKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMSwweDAwLDB4MDIsMHgyNCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4YzgsMHhmZiwweGJkLDB4MjcsMHgyYywweDAwLDB4YjEsMHhhZiwweGZmLDB4ZmYsMHgwNSwweDI0LDB4MjEsMHg4OCwweDgwLDB4MDAsCi0weDAyLDB4MDAsMHgwNiwweDI0LDB4MTAsMHgwMCwweGE0LDB4MjcsMHgzNCwweDAwLDB4YmYsMHhhZiwweDMwLDB4MDAsMHhiMiwweGFmLAotMHg5NywweDQ1LDB4MDAsMHgwYywweDI4LDB4MDAsMHhiMCwweGFmLDB4MDgsMHgwMCwweDMwLDB4OTYsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4MjEsMHgyOCwweDAwLDB4MDAsMHgyNSwweDgwLDB4MDIsMHgwMiwweDIxLDB4MjAsMHgwMCwweDAyLDB4OTcsMHg0NSwweDAwLDB4MGMsCi0weDEwLDB4MDAsMHgwNiwweDI0LDB4MjAsMHgwMCwweDAyLDB4OTYsMHgyNCwweDAwLDB4MDQsMHgyNiwweDEwLDB4MDAsMHhhNSwweDI3LAotMHgwMywweGZmLDB4NDIsMHgzMCwweGM4LDB4MDAsMHg0MiwweDM0LDB4MjAsMHgwMCwweDAyLDB4YTYsMHg5ZiwweDQ1LDB4MDAsMHgwYywKLTB4MDYsMHgwMCwweDA2LDB4MjQsMHgyNSwweGIwLDB4MDMsMHgzYywweDUwLDB4MDAsMHg2MiwweDM0LDB4MDAsMHgwMCwweDQ0LDB4OGMsCi0weDU0LDB4MDAsMHg2NSwweDM0LDB4NTgsMHgwMCwweDY2LDB4MzQsMHgxOCwweDAwLDB4YTQsMHhhZiwweDAwLDB4MDAsMHhhMiwweDhjLAotMHg1YywweDAwLDB4NjMsMHgzNCwweDJhLDB4MDAsMHgwNCwweDI2LDB4MWMsMHgwMCwweGEyLDB4YWYsMHgwMCwweDAwLDB4YzcsMHg4YywKLTB4MTgsMHgwMCwweGE1LDB4MjcsMHgwNiwweDAwLDB4MDYsMHgyNCwweDIwLDB4MDAsMHhhNywweGFmLDB4MDAsMHgwMCwweDYyLDB4OGMsCi0weDFhLDB4MDAsMHgxMiwweDI0LDB4OWYsMHg0NSwweDAwLDB4MGMsMHgyNCwweDAwLDB4YTIsMHhhZiwweDMwLDB4MDAsMHgwNCwweDI2LAotMHgyMCwweDAwLDB4YTUsMHgyNywweDlmLDB4NDUsMHgwMCwweDBjLDB4MDYsMHgwMCwweDA2LDB4MjQsMHgxMywweDAwLDB4MDMsMHgyNCwKLTB4MTQsMHgwMCwweDIzLDB4YWUsMHgwYywweDAwLDB4MzIsMHhhZSwweDA4LDB4MDAsMHgwNSwweDhlLDB4MDQsMHgwMCwweDA0LDB4OGUsCi0weGZmLDB4ZGYsMHgwMiwweDNjLDB4MTQsMHgwMCwweDA2LDB4OGUsMHhmZiwweGZmLDB4NDIsMHgzNCwweDEwLDB4MDAsMHgwNywweDhlLAotMHhmZiwweGUwLDB4MDMsMHgyNCwweDI0LDB4MjgsMHhhMiwweDAwLDB4MDAsMHg0MCwweDAyLDB4M2MsMHgyNCwweDIwLDB4ODMsMHgwMCwKLTB4MjUsMHgyOCwweGEyLDB4MDAsMHhmZiwweDgxLDB4MDMsMHgyNCwweGZlLDB4ZmYsMHgwMiwweDNjLDB4MjQsMHgzMCwweGMzLDB4MDAsCi0weGZmLDB4ZmYsMHg0MiwweDM0LDB4MDAsMHgxMiwweDg0LDB4MzQsMHgwMCwweDgwLDB4MDMsMHgzYywweDI0LDB4MjAsMHg4MiwweDAwLAotMHgyNSwweDM4LDB4ZTMsMHgwMCwweDAwLDB4MjYsMHhjNiwweDM0LDB4ODAsMHgwMCwweGE1LDB4MzQsMHgyMCwweDAwLDB4MDIsMHgyNCwKLTB4MDAsMHgwMCwweDEyLDB4YTYsMHgxMCwweDAwLDB4MDcsMHhhZSwweDAyLDB4MDAsMHgwMiwweGEyLDB4MTQsMHgwMCwweDA2LDB4YWUsCi0weDA0LDB4MDAsMHgwNCwweGFlLDB4MDgsMHgwMCwweDA1LDB4YWUsMHgzNCwweDAwLDB4YmYsMHg4ZiwweDMwLDB4MDAsMHhiMiwweDhmLAotMHgyYywweDAwLDB4YjEsMHg4ZiwweDI4LDB4MDAsMHhiMCwweDhmLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgzOCwweDAwLDB4YmQsMHgyNywKLTB4OTMsMHg0NSwweDAwLDB4MDgsMHhmZiwweDAwLDB4YTUsMHgzMCwweDAwLDB4MDAsMHg4NSwweGEwLDB4ZmYsMHhmZiwweGM2LDB4MjQsCi0weDAxLDB4MDAsMHg4NCwweDI0LDB4ZmMsMHhmZiwweGMwLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4MDAsMHhjMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODUsMHhhYywKLTB4ZmYsMHhmZiwweGM2LDB4MjQsMHhmZCwweGZmLDB4YzAsMHgxNCwweDA0LDB4MDAsMHg4NCwweDI0LDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MjEsMHgzOCwweDgwLDB4MDAsMHgwOCwweDAwLDB4YzAsMHgxMCwweGZmLDB4ZmYsMHhjMywweDI0LAotMHhmZiwweGZmLDB4MDYsMHgyNCwweDAwLDB4MDAsMHhhMiwweDkwLDB4ZmYsMHhmZiwweDYzLDB4MjQsMHgwMSwweDAwLDB4YTUsMHgyNCwKLTB4MDAsMHgwMCwweGUyLDB4YTAsMHhmYiwweGZmLDB4NjYsMHgxNCwweDAxLDB4MDAsMHhlNywweDI0LDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDIxLDB4MTAsMHg4MCwweDAwLDB4MjEsMHgzOCwweDgwLDB4MDAsMHgwOCwweDAwLDB4YzAsMHgxMCwweGZmLDB4ZmYsMHhjMywweDI0LAotMHhmZiwweGZmLDB4MDYsMHgyNCwweDAwLDB4MDAsMHhhMiwweDhjLDB4ZmYsMHhmZiwweDYzLDB4MjQsMHgwNCwweDAwLDB4YTUsMHgyNCwKLTB4MDAsMHgwMCwweGUyLDB4YWMsMHhmYiwweGZmLDB4NjYsMHgxNCwweDA0LDB4MDAsMHhlNywweDI0LDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDIxLDB4MTAsMHg4MCwweDAwLDB4MmIsMHgxMCwweGE0LDB4MDAsMHgwZCwweDAwLDB4NDAsMHgxNCwweGZmLDB4ZmYsMHgwMiwweDI0LAotMHhmZiwweGZmLDB4YzYsMHgyNCwweDA4LDB4MDAsMHhjMiwweDEwLDB4MjEsMHgxOCwweDgwLDB4MDAsMHhmZiwweGZmLDB4MDcsMHgyNCwKLTB4MDAsMHgwMCwweGEyLDB4OTAsMHhmZiwweGZmLDB4YzYsMHgyNCwweDAxLDB4MDAsMHhhNSwweDI0LDB4MDAsMHgwMCwweDYyLDB4YTAsCi0weGZiLDB4ZmYsMHhjNywweDE0LDB4MDEsMHgwMCwweDYzLDB4MjQsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHg4MCwweDAwLAotMHgyMSwweDI4LDB4YTYsMHgwMCwweDIxLDB4MTgsMHg4NiwweDAwLDB4ZmYsMHhmZiwweGM2LDB4MjQsMHhmYSwweGZmLDB4YzIsMHgxMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweGZmLDB4MDcsMHgyNCwweGZmLDB4ZmYsMHhhNSwweDI0LDB4MDAsMHgwMCwweGEyLDB4OTAsCi0weGZmLDB4ZmYsMHg2MywweDI0LDB4ZmYsMHhmZiwweGM2LDB4MjQsMHhmYiwweGZmLDB4YzcsMHgxNCwweDAwLDB4MDAsMHg2MiwweGEwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHg4MCwweDAwLDB4MGMsMHgwMCwweGMwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDgyLDB4OTAsMHgwMCwweDAwLDB4YTMsMHg5MCwweDAxLDB4MDAsMHg4NCwweDI0LDB4MjMsMHgxMCwweDQzLDB4MDAsCi0weDAwLDB4MTYsMHgwMiwweDAwLDB4MDMsMHgxNiwweDAyLDB4MDAsMHgwNCwweDAwLDB4NDAsMHgxNCwweDAxLDB4MDAsMHhhNSwweDI0LAotMHhmZiwweGZmLDB4YzYsMHgyNCwweGY2LDB4ZmYsMHhjMCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MjEsMHgxMCwweGMwLDB4MDAsMHhlYSwweDQ1LDB4MDAsMHgwOCwweDIxLDB4MTgsMHg4NiwweDAwLDB4MDAsMHgwMCwweDgyLDB4OTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMCwweDQ1LDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg4NCwweDI0LAotMHhmYSwweGZmLDB4ODMsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4ODAsMHgwMCwKLTB4MDksMHgwMCwweGMwLDB4MTAsMHhmZiwweGZmLDB4YzMsMHgyNCwweGZmLDB4MDAsMHhhNSwweDMwLDB4ZmYsMHhmZiwweDA2LDB4MjQsCi0weDAwLDB4MDAsMHg4MiwweDkwLDB4ZmYsMHhmZiwweDYzLDB4MjQsMHgwNSwweDAwLDB4NDUsMHgxMCwweDAxLDB4MDAsMHg4NCwweDI0LAotMHhmYiwweGZmLDB4NjYsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHhmZiwweGZmLDB4ODIsMHgyNCwweDIxLDB4MzgsMHgwMCwweDAwLDB4MWYsMHgwMCwweGMwLDB4MTAsCi0weDIxLDB4MTgsMHgwMCwweDAwLDB4MDIsMHg4MCwweDAyLDB4M2MsMHg4MCwweDk1LDB4NGIsMHgyNCwweDAwLDB4MDAsMHg4NywweDkwLAotMHgwMCwweDAwLDB4YTMsMHg5MCwweGZmLDB4ZmYsMHhjNiwweDI0LDB4MDEsMHgwMCwweDg0LDB4MjQsMHgyMSwweDEwLDB4ZWIsMHgwMCwKLTB4MTYsMHgwMCwweGUwLDB4MTAsMHgwMSwweDAwLDB4YTUsMHgyNCwweDE0LDB4MDAsMHg2MCwweDEwLDB4MjEsMHg0OCwweDZiLDB4MDAsCi0weDEwLDB4MDAsMHhlMywweDEwLDB4MjAsMHgwMCwweGU4LDB4MjQsMHgwMCwweDAwLDB4NDIsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4NDIsMHgzMCwweDAyLDB4MDAsMHg0MCwweDEwLDB4MjAsMHgwMCwweDZhLDB4MjQsMHhmZiwweDAwLDB4MDcsMHgzMSwKLTB4MDAsMHgwMCwweDIyLDB4OTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg0MiwweDMwLDB4MDIsMHgwMCwweDQwLDB4MTAsCi0weGZmLDB4MDAsMHhlNywweDMwLDB4ZmYsMHgwMCwweDQzLDB4MzEsMHhmZiwweDAwLDB4NjMsMHgzMCwweDAzLDB4MDAsMHhlMywweDE0LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGU1LDB4ZmYsMHhjMCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MjMsMHgxMCwweGUzLDB4MDAsMHgyMSwweDE4LDB4ODAsMHgwMCwweDAwLDB4MDAsMHhhMiwweDkwLDB4MDEsMHgwMCwweGE1LDB4MjQsCi0weDAwLDB4MDAsMHg4MiwweGEwLDB4ZmMsMHhmZiwweDQwLDB4MTQsMHgwMSwweDAwLDB4ODQsMHgyNCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgyMSwweDEwLDB4NjAsMHgwMCwweDIxLDB4MzgsMHg4MCwweDAwLDB4ZmYsMHhmZiwweDAzLDB4MjQsMHhmZiwweGZmLDB4YzYsMHgyNCwKLTB4MDYsMHgwMCwweGMzLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMiwweDkwLDB4MDEsMHgwMCwweGE1LDB4MjQsCi0weDAwLDB4MDAsMHg4MiwweGEwLDB4ZjksMHhmZiwweDQwLDB4MTQsMHgwMSwweDAwLDB4ODQsMHgyNCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgyMSwweDEwLDB4ZTAsMHgwMCwweDAwLDB4MDAsMHg4MiwweDgwLDB4MzksMHg0NiwweDAwLDB4MDgsMHgyMSwweDE4LDB4ODAsMHgwMCwKLTB4MDEsMHgwMCwweDg0LDB4MjQsMHgwMCwweDAwLDB4ODIsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZmMsMHhmZiwweDQwLDB4MTQsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEyLDB4OTAsMHgwMSwweDAwLDB4YTUsMHgyNCwweDAwLDB4MDAsMHg4MiwweGEwLAotMHhmYywweGZmLDB4NDAsMHgxNCwweDAxLDB4MDAsMHg4NCwweDI0LDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4NjAsMHgwMCwKLTB4MTIsMHgwMCwweGMwLDB4MTAsMHgyMSwweDE4LDB4ODAsMHgwMCwweDAwLDB4MDAsMHg4MiwweDgwLDB4NGEsMHg0NiwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDg0LDB4MjQsMHgwMCwweDAwLDB4ODIsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHhmYywweGZmLDB4NDAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEyLDB4OTAsMHgwMSwweDAwLDB4YTUsMHgyNCwKLTB4MDAsMHgwMCwweDgyLDB4YTAsMHgwNSwweDAwLDB4NDAsMHgxMCwweDAxLDB4MDAsMHg4NCwweDI0LDB4ZmYsMHhmZiwweGM2LDB4MjQsCi0weGY5LDB4ZmYsMHhjMCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHhhMCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgyMSwweDEwLDB4NjAsMHgwMCwweDAwLDB4MDAsMHg4MywweDkwLDB4MDAsMHgwMCwweGEyLDB4OTAsMHgwMSwweDAwLDB4ODQsMHgyNCwKLTB4MjMsMHgxMCwweDYyLDB4MDAsMHgwMCwweDE2LDB4MDIsMHgwMCwweDAzLDB4MTYsMHgwMiwweDAwLDB4MDMsMHgwMCwweDQwLDB4MTQsCi0weDAxLDB4MDAsMHhhNSwweDI0LDB4ZjcsMHhmZiwweDYwLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDIxLDB4MTAsMHgwMCwweDAwLDB4MGIsMHgwMCwweGMwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweGEyLDB4OTAsMHgwMCwweDAwLDB4ODMsMHg5MCwweGZmLDB4ZmYsMHhjNiwweDI0LDB4MjMsMHgxMCwweDYyLDB4MDAsCi0weDAwLDB4MTYsMHgwMiwweDAwLDB4MDMsMHgxNiwweDAyLDB4MDAsMHgwMywweDAwLDB4NDAsMHgxNCwweDAxLDB4MDAsMHhhNSwweDI0LAotMHhmNSwweGZmLDB4NjAsMHgxNCwweDAxLDB4MDAsMHg4NCwweDI0LDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDgzLDB4ODAsMHgwMCwweDJlLDB4MDUsMHgwMCwweDIxLDB4MTAsMHg4MCwweDAwLDB4N2IsMHg0NiwweDAwLDB4MDgsCi0weDAzLDB4MmUsMHgwNSwweDAwLDB4MDcsMHgwMCwweDYwLDB4MTAsMHgwMSwweDAwLDB4NDIsMHgyNCwweDAwLDB4MDAsMHg0MywweDgwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGZiLDB4ZmYsMHg2NSwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgyLDB4ODAsCi0weDg3LDB4NDYsMHgwMCwweDA4LDB4MjEsMHgxOCwweDgwLDB4MDAsMHgwMSwweDAwLDB4NjMsMHgyNCwweDAwLDB4MDAsMHg2MiwweDgwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGZjLDB4ZmYsMHg0MCwweDE0LDB4MjMsMHgxMCwweDY0LDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweGZmLDB4YmQsMHgyNywweDEwLDB4MDAsMHhiMCwweGFmLDB4MjEsMHg4MCwweGEwLDB4MDAsCi0weDE0LDB4MDAsMHhiMSwweGFmLDB4MTgsMHgwMCwweGJmLDB4YWYsMHgyMSwweDg4LDB4ODAsMHgwMCwweDgxLDB4NDYsMHgwMCwweDBjLAotMHgwMCwweDg2LDB4MTAsMHgwMCwweDIxLDB4MTgsMHg1MSwweDAwLDB4MDMsMHg4NiwweDEwLDB4MDAsMHgwMCwweDAwLDB4NjIsMHg4MCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYSwweDAwLDB4NTAsMHgxMCwweDIxLDB4MTAsMHg2MCwweDAwLDB4ZmYsMHhmZiwweDYzLDB4MjQsCi0weDJiLDB4MTAsMHg3MSwweDAwLDB4ZjksMHhmZiwweDQwLDB4MTAsMHgyMSwweDEwLDB4MDAsMHgwMCwweDE4LDB4MDAsMHhiZiwweDhmLAotMHgxNCwweDAwLDB4YjEsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMCwweDAwLDB4YmQsMHgyNywKLTB4MTgsMHgwMCwweGJmLDB4OGYsMHgxNCwweDAwLDB4YjEsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDIwLDB4MDAsMHhiZCwweDI3LDB4MjEsMHgzMCwweDgwLDB4MDAsMHgwZCwweDAwLDB4YTAsMHgxMCwweGZmLDB4ZmYsMHhhMywweDI0LAotMHgwMCwweDAwLDB4ODIsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDksMHgwMCwweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4ZmYsMHhmZiwweDA1LDB4MjQsMHhmZiwweGZmLDB4NjMsMHgyNCwweDA1LDB4MDAsMHg2NSwweDEwLDB4MDEsMHgwMCwweGM2LDB4MjQsCi0weDAwLDB4MDAsMHhjMiwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmYSwweGZmLDB4NDAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDIzLDB4MTAsMHhjNCwweDAwLDB4MDAsMHgwMCwweDgyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MTksMHgwMCwweDQwLDB4MTAsMHgyMSwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhOSwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDE3LDB4MDAsMHgyMCwweDExLDB4MjEsMHgzMCwweGEwLDB4MDAsMHgwMCwweDNlLDB4MDIsMHgwMCwweDAzLDB4M2UsMHgwNywweDAwLAotMHgyMSwweDE4LDB4MjAsMHgwMSwweDE1LDB4MDAsMHhlMywweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4YzYsMHgyNCwKLTB4MDAsMHgwMCwweGMyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MWUsMHgwMiwweDAwLDB4MDMsMHgxZSwweDAzLDB4MDAsCi0weGY4LDB4ZmYsMHg2MCwweDE0LDB4MDAsMHgxNiwweDAyLDB4MDAsMHgwMywweDE2LDB4MDIsMHgwMCwweDA2LDB4MDAsMHg0MCwweDEwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg4NCwweDI0LDB4MDAsMHgwMCwweDgyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4ZWIsMHhmZiwweDQwLDB4MTQsMHgwMSwweDAwLDB4MDgsMHgyNSwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDEsCi0weDAwLDB4MDAsMHhhMiwweDkwLDB4Y2MsMHg0NiwweDAwLDB4MDgsMHgwMCwweDE2LDB4MDIsMHgwMCwweDAwLDB4MDAsMHhjMiwweDkwLAotMHhjYywweDQ2LDB4MDAsMHgwOCwweDAwLDB4MTYsMHgwMiwweDAwLDB4MDAsMHgwMCwweDg3LDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MTQsMHgwMCwweGUwLDB4MTAsMHgyMSwweDEwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHhhNCwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MWUsMHgwNCwweDAwLDB4MDMsMHgxZSwweDAzLDB4MDAsMHgwOSwweDAwLDB4NjAsMHgxMCwweDIxLDB4MzAsMHhhMCwweDAwLAotMHgwMCwweDNlLDB4MDcsMHgwMCwweDAzLDB4M2UsMHgwNywweDAwLDB4MGIsMHgwMCwweGUzLDB4MTAsMHgwMSwweDAwLDB4YzYsMHgyNCwKLTB4MDAsMHgwMCwweGMzLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZiLDB4ZmYsMHg2MCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAxLDB4MDAsMHg0MiwweDI0LDB4MDAsMHgwMCwweDQ3LDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGYwLDB4ZmYsMHhlMCwweDE0LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDIxLDB4MTAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4ZTAsMHhmZiwweGJkLDB4MjcsMHgxNCwweDAwLDB4YjEsMHhhZiwweDEwLDB4MDAsMHhiMCwweGFmLDB4MTgsMHgwMCwweGJmLDB4YWYsCi0weDIxLDB4ODAsMHg4MCwweDAwLDB4MWQsMHgwMCwweDgwLDB4MTAsMHgyMSwweDg4LDB4YTAsMHgwMCwweGI4LDB4NDYsMHgwMCwweDBjLAotMHgyMSwweDIwLDB4MDAsMHgwMiwweDIxLDB4ODAsMHgwMiwweDAyLDB4MDAsMHgwMCwweDAyLDB4ODIsMHgyMSwweDI4LDB4MjAsMHgwMiwKLTB4MjEsMHgyMCwweDAwLDB4MDIsMHgyMiwweDAwLDB4NDAsMHgxMCwweDIxLDB4MTgsMHgwMCwweDAwLDB4ZGMsMHg0NiwweDAwLDB4MGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHgwMCwweDQwLDB4MTAsMHgyMSwweDE4LDB4NDAsMHgwMCwweDAwLDB4MDAsMHg0MiwweDgwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDBhLDB4MDAsMHg0MCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4YTgsMHg5NiwweDQzLDB4YWMsMHgyMSwweDE4LDB4MDAsMHgwMiwweDE4LDB4MDAsMHhiZiwweDhmLDB4MTQsMHgwMCwweGIxLDB4OGYsCi0weDEwLDB4MDAsMHhiMCwweDhmLDB4MjEsMHgxMCwweDYwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIwLDB4MDAsMHhiZCwweDI3LAotMHgwMCwweDAwLDB4NjAsMHhhMCwweDBkLDB4NDcsMHgwMCwweDA4LDB4MDEsMHgwMCwweDYzLDB4MjQsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4YTgsMHg5NiwweDUwLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweGYzLDB4ZmYsMHgwMCwweDEyLDB4MjEsMHgxOCwweDAwLDB4MDAsCi0weGI4LDB4NDYsMHgwMCwweDBjLDB4MjEsMHgyMCwweDAwLDB4MDIsMHgyMSwweDgwLDB4MDIsMHgwMiwweDAwLDB4MDAsMHgwMiwweDgyLAotMHgyMSwweDI4LDB4MjAsMHgwMiwweDIxLDB4MjAsMHgwMCwweDAyLDB4ZTAsMHhmZiwweDQwLDB4MTQsMHgyMSwweDE4LDB4MDAsMHgwMCwKLTB4MTgsMHgwMCwweGJmLDB4OGYsMHgxNCwweDAwLDB4YjEsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weGE4LDB4OTYsMHg0MCwweGFjLDB4MjAsMHgwMCwweGJkLDB4MjcsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHg2MCwweDAwLAotMHhlMCwweGZmLDB4YmQsMHgyNywweDE4LDB4MDAsMHhiMiwweGFmLDB4MTQsMHgwMCwweGIxLDB4YWYsMHgxYywweDAwLDB4YmYsMHhhZiwKLTB4MTAsMHgwMCwweGIwLDB4YWYsMHgwMCwweDAwLDB4OTAsMHg4YywweDIxLDB4OTAsMHg4MCwweDAwLDB4MjEsMHg4OCwweGEwLDB4MDAsCi0weDIxLDB4MTgsMHgwMCwweDAwLDB4MGYsMHgwMCwweDAwLDB4MTIsMHgyMSwweDIwLDB4MDAsMHgwMiwweGI4LDB4NDYsMHgwMCwweDBjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDIxLDB4ODAsMHgwMiwweDAyLDB4MDAsMHgwMCwweDAyLDB4ODIsMHgyMSwweDI4LDB4MjAsMHgwMiwKLTB4MjEsMHgyMCwweDAwLDB4MDIsMHgwNywweDAwLDB4NDAsMHgxMCwweDIxLDB4MTgsMHgwMCwweDAwLDB4ZGMsMHg0NiwweDAwLDB4MGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MjEsMHgxOCwweDQwLDB4MDAsMHgwOSwweDAwLDB4NDAsMHgxNCwweDAwLDB4MDAsMHg0MiwweGFlLAotMHgyMSwweDE4LDB4MDAsMHgwMiwweDFjLDB4MDAsMHhiZiwweDhmLDB4MTgsMHgwMCwweGIyLDB4OGYsMHgxNCwweDAwLDB4YjEsMHg4ZiwKLTB4MTAsMHgwMCwweGIwLDB4OGYsMHgyMSwweDEwLDB4NjAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjAsMHgwMCwweGJkLDB4MjcsCi0weDAwLDB4MDAsMHg0MiwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmNSwweGZmLDB4NDAsMHgxMCwweDAxLDB4MDAsMHg2NCwweDI0LAotMHgwMCwweDAwLDB4NjAsMHhhMCwweDQ2LDB4NDcsMHgwMCwweDA4LDB4MDAsMHgwMCwweDQ0LDB4YWUsMHhkOCwweGZmLDB4YmQsMHgyNywKLTB4MTQsMHgwMCwweGIxLDB4YWYsMHgyMSwweDg4LDB4ODAsMHgwMCwweDIxLDB4MjAsMHhhMCwweDAwLDB4MWMsMHgwMCwweGIzLDB4YWYsCi0weDE4LDB4MDAsMHhiMiwweGFmLDB4MjAsMHgwMCwweGJmLDB4YWYsMHgxMCwweDAwLDB4YjAsMHhhZiwweDgxLDB4NDYsMHgwMCwweDBjLAotMHgyMSwweDk4LDB4YTAsMHgwMCwweDIxLDB4OTAsMHg0MCwweDAwLDB4MDgsMHgwMCwweDQwLDB4MTYsMHgyMSwweDEwLDB4MjAsMHgwMiwKLTB4MjAsMHgwMCwweGJmLDB4OGYsMHgxYywweDAwLDB4YjMsMHg4ZiwweDE4LDB4MDAsMHhiMiwweDhmLDB4MTQsMHgwMCwweGIxLDB4OGYsCi0weDEwLDB4MDAsMHhiMCwweDhmLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyOCwweDAwLDB4YmQsMHgyNywweDgxLDB4NDYsMHgwMCwweDBjLAotMHgyMSwweDIwLDB4MjAsMHgwMiwweDIxLDB4ODAsMHg0MCwweDAwLDB4MmEsMHgxMCwweDUyLDB4MDAsMHgwYSwweDAwLDB4NDAsMHgxNCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMSwweDIwLDB4MjAsMHgwMiwweDIxLDB4MjgsMHg2MCwweDAyLDB4MjEsMHgzMCwweDQwLDB4MDIsCi0weGQ0LDB4NDUsMHgwMCwweDBjLDB4ZmYsMHhmZiwweDEwLDB4MjYsMHgwYiwweDAwLDB4NDAsMHgxMCwweDJhLDB4MTgsMHgxMiwweDAyLAotMHhmOCwweGZmLDB4NjAsMHgxMCwweDAxLDB4MDAsMHgzMSwweDI2LDB4MjAsMHgwMCwweGJmLDB4OGYsMHgxYywweDAwLDB4YjMsMHg4ZiwKLTB4MTgsMHgwMCwweGIyLDB4OGYsMHgxNCwweDAwLDB4YjEsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLDB4MjEsMHgxMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MjgsMHgwMCwweGJkLDB4MjcsMHg2MiwweDQ3LDB4MDAsMHgwOCwweDIxLDB4MTAsMHgyMCwweDAyLAotMHgwMSwweDgwLDB4MDIsMHgzYywweGMwLDB4ZmYsMHhiZCwweDI3LDB4MDgsMHgxZSwweDQ0LDB4MjQsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4MjgsMHgwMCwweGI0LDB4YWYsMHgwMiwweDgwLDB4MDMsMHgzYywweDI1LDB4YjAsMHgxNCwweDNjLDB4MTgsMHgwMywweDQyLDB4MzQsCi0weDM4LDB4MDAsMHhiZSwweGFmLDB4MzQsMHgwMCwweGI3LDB4YWYsMHgzMCwweDAwLDB4YjYsMHhhZiwweDJjLDB4MDAsMHhiNSwweGFmLAotMHgyNCwweDAwLDB4YjMsMHhhZiwweDNjLDB4MDAsMHhiZiwweGFmLDB4MjAsMHgwMCwweGIyLDB4YWYsMHgxYywweDAwLDB4YjEsMHhhZiwKLTB4MTgsMHgwMCwweGIwLDB4YWYsMHg2OCwweDE1LDB4NzMsMHgyNCwweDAwLDB4MDAsMHg0NCwweGFjLDB4MDIsMHg4MCwweDE2LDB4M2MsCi0weDAyLDB4ODAsMHgxNSwweDNjLDB4YzQsMHgwMiwweDllLDB4MzYsMHg2NCwweDAzLDB4OTcsMHgzNiwweDAxLDB4ODAsMHgwNCwweDNjLAotMHgwOCwweDFlLDB4ODIsMHgyNCwweDE4LDB4MDMsMHg4MywweDM2LDB4MDAsMHgwMCwweDYyLDB4YWMsMHhhMCwweDAyLDB4ODcsMHgzNiwKLTB4MDAsMHgwMCwweGU0LDB4OGMsMHhkOCwweDYzLDB4NjMsMHg4ZSwweGZmLDB4MGYsMHgwMiwweDNjLDB4ZmYsMHhmZiwweDQ2LDB4MzQsCi0weDI0LDB4ODAsMHg4NiwweDAwLDB4MDEsMHgwMCwweDA1LDB4M2MsMHgwMSwweDAwLDB4NjMsMHgyNCwweDJiLDB4MTAsMHhiMCwweDAwLAotMHgwNywweDAwLDB4NDAsMHgxMCwweGQ4LDB4NjMsMHg2MywweGFlLDB4YTQsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NTEsMHg4YywKLTB4MDAsMHhiMCwweDAzLDB4M2MsMHgyNSwweDgwLDB4MDMsMHgwMiwweDAwLDB4MDAsMHgxMSwweGFlLDB4MDAsMHgwMCwweGUwLDB4YWMsCi0weGIwLDB4MDIsMHg4NCwweDM2LDB4MDAsMHgwMCwweDgyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4ODAsMHg0NiwweDAwLAotMHgyYiwweDE4LDB4YjAsMHgwMCwweDA4LDB4MDAsMHg2MCwweDEwLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweGIwLDB4MDIsMHgzYywKLTB4MjUsMHg4MCwweDAyLDB4MDIsMHgwMCwweDAwLDB4MTEsMHg4ZSwweGI0LDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDUxLDB4YWMsCi0weDAwLDB4MDAsMHg4MCwweGFjLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NTAsMHg4YywweGZmLDB4MDAsMHgwOCwweDNjLAotMHhmZiwweGZmLDB4MDIsMHgzNSwweDJiLDB4MTAsMHg1MCwweDAwLDB4NDcsMHgwMCwweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDgyLDB4OGUsMHgwMCwweGZmLDB4MDYsMHgzYywweGFjLDB4MDIsMHg4NCwweDM2LDB4MDEsMHgwMCwweDQ1LDB4MjQsCi0weGJjLDB4MDIsMHg4MywweDM2LDB4ZmYsMHgwMCwweGMyLDB4MzQsMHgwMCwweGZkLDB4MDcsMHgzYywweDAwLDB4MDAsMHg4NSwweGFjLAotMHgwMCwweDAwLDB4NzAsMHhhYywweDI0LDB4MTgsMHgwMiwweDAyLDB4MDcsMHgwMCwweGUyLDB4MzQsMHgwMCwweDAwLDB4ODUsMHg4YywKLTB4NTIsMHgwMywweDYyLDB4MTAsMHgyNSwweGIwLDB4MTIsMHgzYywweDJiLDB4MTAsMHg0MywweDAwLDB4YTIsMHgwMCwweDQwLDB4MTQsCi0weGE0LDB4MDAsMHhlMiwweDM0LDB4MDAsMHhmOCwweDA0LDB4M2MsMHgxNSwweDAwLDB4ODIsMHgzNCwweDU3LDB4MDMsMHg2MiwweDEwLAotMHgyYiwweDEwLDB4NDMsMHgwMCwweGM4LDB4MDAsMHg0MCwweDE0LDB4MDAsMHhmOSwweDA1LDB4M2MsMHgwMCwweGYwLDB4MDUsMHgzYywKLTB4MjAsMHgwMCwweGEyLDB4MzQsMHg2NywweDAzLDB4NjIsMHgxMCwweDJiLDB4MTAsMHg0MywweDAwLDB4MjAsMHgwMSwweDQwLDB4MTQsCi0weDEwLDB4MDAsMHg4MiwweDM0LDB4NzAsMHgwMywweDY1LDB4MTAsMHgyYiwweDEwLDB4YTMsMHgwMCwweGM4LDB4MDEsMHg0MCwweDE0LAotMHgwMiwweDAwLDB4YTIsMHgzNCwweDAwLDB4ZDAsMHgwMiwweDNjLDB4MmEsMHgwMiwweDYyLDB4MTAsMHgyYiwweDEwLDB4NDMsMHgwMCwKLTB4YWYsMHgwMiwweDQwLDB4MTQsMHgwMCwweGUwLDB4MDIsMHgzYywweDAwLDB4YzAsMHgwMiwweDNjLDB4YmIsMHgwMywweDYyLDB4MTAsCi0weGZmLDB4MDAsMHgwMywweDNjLDB4MDAsMHhmMCwweDAyLDB4M2MsMHgyNCwweDMwLDB4MDIsMHgwMiwweDE4LDB4MDAsMHhjMiwweDEwLAotMHgwMiwweDFkLDB4MTAsMHgwMCwweDAwLDB4NzAsMHgwNSwweDNjLDB4MjQsMHgxMCwweDA1LDB4MDIsMHgwMiwweDRmLDB4MDIsMHgwMCwKLTB4MGYsMHgwMCwweDAyLDB4M2MsMHhmZiwweGZmLDB4NDIsMHgzNCwweDAwLDB4NTAsMHgwNywweDNjLDB4ZmYsMHgwMCwweDY4LDB4MzAsCi0weGZmLDB4MDAsMHgwNCwweDMyLDB4OTYsMHgwMSwweGM3LDB4MTAsMHgyNCwweDE4LDB4MDIsMHgwMiwweDJiLDB4MTAsMHhlNiwweDAwLAotMHg4YSwweDAxLDB4NDAsMHgxNCwweDAwLDB4ODAsMHgwMiwweDNjLDB4MDAsMHgyMCwweDAyLDB4M2MsMHgxYSwweDAzLDB4YzIsMHgxMCwKLTB4MmIsMHgxMCwweDQ2LDB4MDAsMHg4MiwweDAyLDB4NDAsMHgxNCwweDAwLDB4MzAsMHgwMiwweDNjLDB4MTcsMHgwMywweGMwLDB4MTAsCi0weDgwLDB4MTAsMHgwOCwweDAwLDB4MDAsMHgxMCwweDAyLDB4M2MsMHgxNCwweDAzLDB4YzIsMHgxMCwweDgwLDB4MTAsMHgwOCwweDAwLAotMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwKLTB4MDEsMHgwMCwweDIxLDB4MzgsMHgwMCwweDYwLDB4ODEsMHg0MCwweDAwLDB4MDAsMHhlMiwweDkyLDB4MjUsMHhiMCwweDA3LDB4M2MsCi0weGM4LDB4N2QsMHhjMiwweGEyLDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAwLDB4NjAsMHg4MSwweDQwLAotMHhjOCwweDdkLDB4YzIsMHg5MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDQyLDB4MzAsMHg0ZSwweDAwLDB4NDAsMHgxMCwKLTB4MDIsMHg4MCwweDAzLDB4M2MsMHgwMCwweDQwLDB4NjIsMHg4ZSwweGYwLDB4ZmYsMHgwMywweDI0LDB4ZDcsMHg0MiwweDYwLDB4YTIsCi0weDI0LDB4MTAsMHg0MywweDAwLDB4MDEsMHgwMCwweDQyLDB4MzQsMHgwMCwweDQwLDB4NjIsMHhhZSwweGM4LDB4N2QsMHhjMiwweDkyLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MDAsMHg0MiwweDMwLDB4M2QsMHgwMCwweDQwLDB4MTAsMHgwZiwweGZmLDB4MDMsMHgyNCwKLTB4MDAsMHg0MCwweDYyLDB4OGUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MTAsMHg0MywweDAwLDB4MTAsMHgwMCwweDQyLDB4MzQsCi0weDAwLDB4NDAsMHg2MiwweGFlLDB4YzgsMHg3ZCwweGMyLDB4OTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHg0MiwweDMwLAotMHgzMCwweDAwLDB4NDAsMHgxMCwweGZmLDB4ZjAsMHgwMywweDI0LDB4MDAsMHg0MCwweDYyLDB4OGUsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjQsMHgxMCwweDQzLDB4MDAsMHgwMCwweDAxLDB4NDIsMHgzNCwweDI1LDB4YjAsMHgwNSwweDNjLDB4MDAsMHg0MCwweDYyLDB4YWUsCi0weDRjLDB4MDAsMHhhMywweDM0LDB4MDAsMHgwMCwweDYyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAzLDB4MDAsMHg0MiwweDMwLAotMHgwNSwweDAwLDB4NDAsMHgxNCwweGZmLDB4ZmYsMHgwMiwweDNjLDB4MDAsMHg0MCwweDYzLDB4OGUsMHhmZiwweDBmLDB4NDIsMHgzNCwKLTB4MjQsMHgxOCwweDYyLDB4MDAsMHgwMCwweDQwLDB4NjMsMHhhZSwweDAwLDB4N2IsMHhhNCwweDhlLDB4MDEsMHg4MCwweDA2LDB4M2MsCi0weDA4LDB4MWYsMHhjMiwweDI0LDB4MTgsMHgwMywweGEzLDB4MzQsMHgwMCwweDdiLDB4YTYsMHgyNiwweDAwLDB4MDAsMHg2MiwweGFjLAotMHgxMCwweDAwLDB4ODYsMHgxMCwweDAyLDB4ODAsMHgwMiwweDNjLDB4YmYsMHgwMCwweGIyLDB4MzQsMHg2OCwweDE1LDB4NTEsMHgyNCwKLTB4MjEsMHg4MCwweGMwLDB4MDAsMHgwMCwweDAwLDB4NDIsMHg5MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMCwweDQyLDB4MmMsCi0weDA5LDB4MDAsMHg0MCwweDEwLDB4MDIsMHg4MCwweDA3LDB4M2MsMHg5OCwweDY1LDB4MjQsMHg4ZSwweDhiLDB4MDcsMHgwMCwweDBjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4N2IsMHhhMiwweDhlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmNSwweGZmLDB4NTAsMHgxNCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDgwLDB4MDcsMHgzYywweDA4LDB4MDgsMHhlNCwweDI0LDB4MjEsMHgyOCwweDAwLDB4MDAsCi0weDIxLDB4MzAsMHgwMCwweDAwLDB4MzEsMHgxYywweDAwLDB4MGMsMHgyMSwweDM4LDB4MDAsMHgwMCwweDlhLDB4NDcsMHgwMCwweDA4LAotMHgwMSwweDgwLDB4MDQsMHgzYywweDAwLDB4NDAsMHg2MiwweDhlLDB4MzAsMHg0OCwweDAwLDB4MDgsMHgyNCwweDEwLDB4NDMsMHgwMCwKLTB4MDAsMHg0MCwweDYyLDB4OGUsMHgwNCwweDQzLDB4NjQsMHg5MiwweDI0LDB4MTAsMHg0MywweDAwLDB4MDAsMHg0MCwweDYyLDB4YWUsCi0weDI3LDB4NDgsMHgwMCwweDA4LDB4MDQsMHg0MywweDY0LDB4YWUsMHg2OCwweDE1LDB4NjYsMHgyNCwweDAwLDB4NDAsMHhjMiwweDhjLAotMHhkNywweDQyLDB4YzQsMHg5MCwweGYwLDB4ZmYsMHgwMywweDI0LDB4MjQsMHgxMCwweDQzLDB4MDAsMHhiMywweGZmLDB4ODAsMHgxNCwKLTB4MDAsMHg0MCwweGMyLDB4YWMsMHgxYywweDAwLDB4MDQsMHgyNCwweDU4LDB4MGMsMHhlNSwweDM0LDB4NTAsMHgwYywweGUzLDB4MzQsCi0weDAxLDB4MDAsMHgwMiwweDI0LDB4ZDcsMHg0MiwweGMyLDB4YTAsMHgwMCwweDAwLDB4NjQsMHhhMCwweDAwLDB4MDAsMHhhNCwweGEwLAotMHgxZCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjIsMHgwMiwweDYyLDB4MTAsMHgyYiwweDEwLDB4NDMsMHgwMCwKLTB4M2YsMHgwMCwweDQwLDB4MTQsMHhhZiwweDAwLDB4ZTIsMHgzNCwweDIwLDB4MDAsMHhlMiwweDM0LDB4YzAsMHgwMiwweDYyLDB4MTAsCi0weDJiLDB4MTAsMHg0MywweDAwLDB4ZTMsMHgwMCwweDQwLDB4MTQsMHgyOSwweDAwLDB4ZTIsMHgzNCwweDE1LDB4MDAsMHhlMiwweDM0LAotMHgwYywweDAzLDB4NjIsMHgxMCwweDJiLDB4MTAsMHg0MywweDAwLDB4OWQsMHgwMSwweDQwLDB4MTQsMHgxNywweDAwLDB4ZTIsMHgzNCwKLTB4MDksMHgwMCwweGUyLDB4MzQsMHhkOCwweDAzLDB4NjIsMHgxMCwweDJiLDB4MTAsMHg2MiwweDAwLDB4ODEsMHgwMiwweDQwLDB4MTQsCi0weDE0LDB4MDAsMHhlMiwweDM0LDB4NjQsMHhmZiwweDYyLDB4MTQsMHgwMCwweGYwLDB4MDIsMHgzYywweGZmLDB4MDAsMHgwNywweDNjLAotMHgwMCwweGZmLDB4ZTcsMHgzNCwweDI0LDB4MTAsMHgwNywweDAyLDB4N2EsMHhmZiwweDQwLDB4MTAsMHhjMCwweDAyLDB4ODIsMHgzNiwKLTB4MDQsMHg0MywweDY0LDB4OTIsMHhmZiwweDAwLDB4MDIsMHgzYywweDI0LDB4MTAsMHgwMiwweDAyLDB4MDAsMHhmZiwweDAzLDB4MzIsCi0weDAyLDB4MTQsMHgwMiwweDAwLDB4MDIsMHgxYSwweDAzLDB4MDAsMHhmYiwweGZmLDB4NDUsMHgyNCwweDFjLDB4NDMsMHg2MiwweGEyLAotMHgwMCwweDAxLDB4ODQsMHgzNCwweGZiLDB4ZmYsMHg2NiwweDI0LDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwNCwweDQzLDB4NjQsMHhhZSwKLTB4MWQsMHg0MywweDY1LDB4YTIsMHgxZiwweDQzLDB4NjYsMHhhMiwweDFlLDB4NDMsMHg2MywweGEyLDB4MDAsMHgwMCwweDQwLDB4YWMsCi0weDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweDAwLDB4YTIsMHgzNCwweDkxLDB4MDIsMHg2MiwweDEwLAotMHgyYiwweDEwLDB4NDMsMHgwMCwweDhlLDB4MDAsMHg0MCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhkZSwweDAyLDB4NjUsMHgxMCwKLTB4MmIsMHgxMCwweGEzLDB4MDAsMHgzMiwweDAxLDB4NDAsMHgxNCwweDAyLDB4MDAsMHhhMiwweDM0LDB4MTcsMHgwMCwweDgyLDB4MzQsCi0weDYxLDB4MDQsMHg2MiwweDEwLDB4MmIsMHgxMCwweDYyLDB4MDAsMHhhOSwweDAzLDB4NDAsMHgxNCwweDE4LDB4MDAsMHg4MiwweDM0LAotMHgzZCwweGZmLDB4NjIsMHgxNCwweDAwLDB4ZjAsMHgwMiwweDNjLDB4NzQsMHgwYiwweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGE4LDB4MDIsMHg2MiwweDEwLDB4MmIsMHgxMCwweDQzLDB4MDAsMHg5NSwweDAwLDB4NDAsMHgxNCwweDBjLDB4MDAsMHhjMiwweDM0LAotMHhhYSwweDAwLDB4ZTIsMHgzNCwweGRjLDB4MDIsMHg2MiwweDEwLDB4MmIsMHgxMCwweDQzLDB4MDAsMHhkOSwweDAwLDB4NDAsMHgxNCwKLTB4YWMsMHgwMCwweGUyLDB4MzQsMHhhNiwweDAwLDB4ZTIsMHgzNCwweDFjLDB4MDQsMHg2MiwweDEwLDB4MmIsMHgxMCwweDYyLDB4MDAsCi0weDY5LDB4MDMsMHg0MCwweDE0LDB4YTcsMHgwMCwweGUyLDB4MzQsMHgyNywweGZmLDB4NjIsMHgxNCwweDAwLDB4ZjAsMHgwMiwweDNjLAotMHgwMCwweGZmLDB4MDIsMHgzMiwweGZmLDB4MDAsMHgwNCwweDNjLDB4MDIsMHg4YSwweDAyLDB4MDAsMHgyNCwweDE4LDB4MDQsMHgwMiwKLTB4MDEsMHgwMCwweDAyLDB4MjQsMHhhNiwweDA0LDB4MjIsMHgxMiwweDAyLDB4MWMsMHgwMywweDAwLDB4MDIsMHgwMCwweDAyLDB4MjQsCi0weGM5LDB4MDQsMHgyMiwweDEyLDB4MDMsMHgwMCwweDAyLDB4MjQsMHhkZiwweDA0LDB4MjIsMHgxMiwweDA0LDB4MDAsMHgwMiwweDI0LAotMHhkMSwweDA0LDB4MjIsMHgxMiwweDA4LDB4MDAsMHgwMiwweDI0LDB4MmUsMHgwNSwweDIyLDB4MTIsMHgwOSwweDAwLDB4MDIsMHgyNCwKLTB4MWUsMHgwNSwweDIyLDB4MTIsMHgwYSwweDAwLDB4MDIsMHgyNCwweDBlLDB4MDUsMHgyMiwweDEyLDB4MGIsMHgwMCwweDAyLDB4MjQsCi0weGZlLDB4MDQsMHgyMiwweDEyLDB4MGMsMHgwMCwweDAyLDB4MjQsMHg1ZSwweDA1LDB4MjIsMHgxMiwweDBkLDB4MDAsMHgwMiwweDI0LAotMHg0ZSwweDA1LDB4MjIsMHgxMiwweDBlLDB4MDAsMHgwMiwweDI0LDB4M2UsMHgwNSwweDIyLDB4MTIsMHgwZiwweDAwLDB4MDIsMHgyNCwKLTB4MmUsMHgwNSwweDIyLDB4MTIsMHgxMCwweDAwLDB4MDIsMHgyNCwweDIyLDB4ZmYsMHgyMiwweDE2LDB4YzAsMHgwMiwweDgyLDB4MzYsCi0weGMwLDB4MTAsMHgwMywweDAwLDB4MjEsMHgxMCwweDQzLDB4MDAsMHg4MCwweDEwLDB4MDIsMHgwMCwweDIxLDB4MTAsMHg0MywweDAwLAotMHg4MCwweDEwLDB4MDIsMHgwMCwweDIxLDB4MTAsMHg1MywweDAwLDB4NGMsMHg1MSwweDQzLDB4OTQsMHg0OCwweDUxLDB4NDQsMHg5NCwKLTB4MjUsMHhiMCwweDA2LDB4M2MsMHgwMCwweDFjLDB4MDMsMHgwMCwweDIxLDB4MjAsMHg4MywweDAwLDB4MDAsMHgwMCwweGM0LDB4YWYsCi0weDU4LDB4NTEsMHg0NSwweDhjLDB4NTQsMHg1MSwweDQzLDB4OGMsMHg1MCwweDUxLDB4NDQsMHg5NCwweGM4LDB4MDIsMHhjNiwweDM0LAotMHgyMSwweDE4LDB4NjUsMHgwMCwweDAwLDB4MWMsMHgwMywweDAwLDB4MjEsMHgyMCwweDgzLDB4MDAsMHhjMCwweDAyLDB4ODIsMHgzNiwKLTB4MDAsMHgwMCwweGM0LDB4YWMsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDY2LDB4MDIsMHg2MiwweDEwLDB4MmIsMHgxMCwweDQzLDB4MDAsMHhiZiwweDAwLDB4NDAsMHgxNCwweDEyLDB4MDAsMHg4MiwweDM0LAotMHgwMCwweGYxLDB4MDQsMHgzYywweDAxLDB4MDAsMHg4MiwweDM0LDB4YzEsMHgwMiwweDYyLDB4MTAsMHgyYiwweDEwLDB4NDMsMHgwMCwKLTB4YjcsMHgwMSwweDQwLDB4MTQsMHgwMiwweDAwLDB4ODIsMHgzNCwweGUzLDB4ZmUsMHg2NCwweDE0LDB4MDAsMHhmMCwweDAyLDB4M2MsCi0weGZmLDB4MDAsMHgwNCwweDNjLDB4MDAsMHhmZiwweDg0LDB4MzQsMHgyNCwweDEwLDB4MDQsMHgwMiwweDAyLDB4OGEsMHgwMiwweDAwLAotMHg4MCwweDFhLDB4MTEsMHgwMCwweDAwLDB4ZjQsMHg2MywweDI0LDB4OTQsMHgwMCwweDgyLDB4MzYsMHgwMCwweDAwLDB4NTEsMHhhNCwKLTB4MjYsMHhiMCwweDA0LDB4M2MsMHg0MiwweDg5LDB4MDMsMHgwMCwweDk4LDB4MDAsMHg4NiwweDM2LDB4ZmYsMHgwMSwweDAyLDB4MjQsCi0weDEwLDB4MDAsMHgwMywweDI0LDB4OWEsMHgwMCwweDg1LDB4MzYsMHgwMCwweDAwLDB4YTIsMHhhNCwweDdjLDB4MDAsMHg4OSwweDM0LAotMHgwMCwweDAwLDB4YzMsMHhhNCwweDAxLDB4MDAsMHgwMiwweDI0LDB4MDQsMHgwMCwweDAzLDB4MjQsMHg5NiwweDAwLDB4ODcsMHgzNiwKLTB4N2EsMHgwMCwweDg0LDB4MzQsMHhiMCwweDAzLDB4ODgsMHgzNiwweDI1LDB4YjAsMHgwNiwweDNjLDB4MDAsMHgwMCwweGUyLDB4YTQsCi0weDQ0LDB4MDAsMHhjNiwweDM0LDB4MDAsMHgwMCwweDgzLDB4YTAsMHgwMCwweDAwLDB4MTEsMHhhZCwweDAwLDB4MDAsMHgzMSwweGE1LAotMHgwMCwweDAwLDB4YzMsMHg5NCwweGZmLDB4ZmQsMHgwMiwweDI0LDB4MjQsMHgxOCwweDYyLDB4MDAsMHgwMCwweDAwLDB4YzMsMHhhNCwKLTB4MDAsMHgwMCwweGMyLDB4OTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg0MiwweDM0LDB4MDAsMHgwMCwweGMyLDB4YTQsCi0weGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg2NSwweDAxLDB4NjcsMHgxMCwweDJiLDB4MTAsMHhlMywweDAwLDB4YzUsMHgwMCwweDQwLDB4MTQsMHgwMiwweDAwLDB4ZTIsMHgzNCwKLTB4MDcsMHgwMCwweGEyLDB4MzQsMHhmYywweDAyLDB4NjIsMHgxMCwweDJiLDB4MTAsMHg2MiwweDAwLDB4YTksMHgwMSwweDQwLDB4MTQsCi0weDIwLDB4MDAsMHhhMiwweDM0LDB4YjAsMHhmZSwweDYyLDB4MTQsMHgwMCwweGYwLDB4MDIsMHgzYywweGZmLDB4MDAsMHgwMywweDNjLAotMHgwMCwweGZmLDB4NjMsMHgzNCwweDI0LDB4MTAsMHgwMywweDAyLDB4MDIsMHgzYSwweDAyLDB4MDAsMHg4MCwweDA0LDB4ZTAsMHgxMCwKLTB4MDIsMHg4MCwweDA0LDB4M2MsMHgwNSwweDAwLDB4MDIsMHgyNCwweGMyLDB4ZmUsMHhlMiwweDE0LDB4YzAsMHgwMiwweDgyLDB4MzYsCi0weDAyLDB4ODAsMHgwNiwweDNjLDB4OGYsMHg3ZCwweGMyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMiwweGFmLAotMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MmUsMHgwMiwweDYyLDB4MTAsMHgyYiwweDEwLDB4NDMsMHgwMCwweDk4LDB4MDAsMHg0MCwweDE0LDB4MGUsMHgwMCwweGMyLDB4MzQsCi0weDAxLDB4MDAsMHhjMiwweDM0LDB4YWIsMHgwMywweDYyLDB4MTAsMHgyYiwweDEwLDB4NDMsMHgwMCwweDQ4LDB4MDEsMHg0MCwweDE0LAotMHgwMCwweGZmLDB4MDIsMHgzYywweDk0LDB4ZmUsMHg2NiwweDE0LDB4MDAsMHhmMCwweDAyLDB4M2MsMHg1YiwweDRlLDB4MDAsMHgwYywKLTB4MjEsMHgyMCwweDAwLDB4MDAsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4NGMsMHgwMiwweDYyLDB4MTAsMHgyYiwweDEwLDB4NDMsMHgwMCwweGE2LDB4MDAsMHg0MCwweDE0LAotMHhhMSwweDAwLDB4ZTIsMHgzNCwweDIyLDB4MDAsMHhlMiwweDM0LDB4YmQsMHgwMiwweDYyLDB4MTAsMHgyYiwweDEwLDB4NjIsMHgwMCwKLTB4ODgsMHgwMSwweDQwLDB4MTQsMHgwMCwweDIwLDB4MDIsMHgzYywweDI4LDB4MDAsMHhlMiwweDM0LDB4ODIsMHhmZSwweDYyLDB4MTQsCi0weDAwLDB4ZjAsMHgwMiwweDNjLDB4MGYsMHgwMCwweDA0LDB4M2MsMHhmZiwweGZmLDB4ODUsMHgzNCwweDYwLDB4MDAsMHgwNiwweDI0LAotMHhiYSwweDQ0LDB4MDAsMHgwYywweDI0LDB4MDAsMHgwNCwweDI0LDB4ODQsMHgwYSwweDAwLDB4MGMsMHhlOCwweDAzLDB4MDQsMHgyNCwKLTB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAxLDB4MDAsMHgyMSwweDM4LDB4MDAsMHg2MCwweDgxLDB4NDAsCi0weDBmLDB4MDAsMHgwNiwweDNjLDB4MjQsMHgwMCwweDA0LDB4MjQsMHhkZCwweDQ0LDB4MDAsMHgwYywweGZmLDB4ZmYsMHhjNSwweDM0LAotMHgxZiwweDAwLDB4NTEsMHgzMCwweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMCwweDYwLDB4ODEsMHg0MCwKLTB4YjMsMHgwYSwweDAwLDB4MGMsMHg2NCwweDAwLDB4MDQsMHgyNCwweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweGQxLDB4YTMsCi0weDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDIsMHhjMiwweDEwLAotMHgyYiwweDEwLDB4NDYsMHgwMCwweDAxLDB4MDEsMHg0MCwweDE0LDB4MDAsMHhhMCwweDAyLDB4M2MsMHgwMCwweDYwLDB4MDIsMHgzYywKLTB4MDQsMHgwMCwweGMyLDB4MTAsMHg4MCwweDEwLDB4MDgsMHgwMCwweDdhLDB4ZmUsMHhjNSwweDE0LDB4YzAsMHgwMiwweDgyLDB4MzYsCi0weDgwLDB4MTAsMHgwOCwweDAwLDB4MjEsMHgxMCwweDQ4LDB4MDAsMHgyMSwweDEwLDB4NTMsMHgwMCwweDIxLDB4MTAsMHg0OSwweDAwLAotMHhjMSwweDQzLDB4NDQsMHhhMCwweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweDAzLDB4NjIsMHgxMCwweDJiLDB4MTAsMHg2MiwweDAwLDB4YjYsMHgwMiwweDQwLDB4MTQsCi0weGFkLDB4MDAsMHhlMiwweDM0LDB4YzcsMHgwMywweDYyLDB4MTAsMHhhZSwweDAwLDB4ZTIsMHgzNCwweDRlLDB4ZmUsMHg2MiwweDE0LAotMHgwMCwweGYwLDB4MDIsMHgzYywweGZmLDB4MDAsMHgwMiwweDNjLDB4MjQsMHgyMCwweDAyLDB4MDIsMHgwMCwweGZmLDB4MDUsMHgzMiwKLTB4MDIsMHgyNCwweDA0LDB4MDAsMHg2OSwweDRmLDB4MDAsMHgwYywweDAyLDB4MmEsMHgwNSwweDAwLDB4MDAsMHgwMCwweGMyLDB4YTMsCi0weGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg0YiwweDAyLDB4NjIsMHgxMCwweDJiLDB4MTAsMHg2MiwweDAwLDB4MTcsMHgwMSwweDQwLDB4MTQsMHgwMywweDAwLDB4YTIsMHgzNCwKLTB4ODIsMHgwMywweDYyLDB4MTAsMHgwOCwweDAwLDB4YTIsMHgzNCwweDNiLDB4ZmUsMHg2MiwweDE0LDB4MDAsMHhmMCwweDAyLDB4M2MsCi0weDAwLDB4ZmYsMHgwMiwweDMyLDB4MDIsMHg4MiwweDAyLDB4MDAsMHhjYywweDAyLDB4ODMsMHgzNiwweDAwLDB4MDAsMHg3MCwweGFjLAotMHgxMiwweDA0LDB4MDAsMHgxMiwweDAxLDB4MDAsMHgwMiwweDI0LDB4OWMsMHgwNCwweDAyLDB4MTIsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4N2EsMHg0MiwweDAwLDB4MGMsMHgyMSwweDIwLDB4MDAsMHgwMCwweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsCi0weDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0ZSwweDAyLDB4NjIsMHgxMCwweDJiLDB4MTAsMHg2MiwweDAwLAotMHhlNCwweDAwLDB4NDAsMHgxNCwweDAwLDB4ZmYsMHgwMiwweDMyLDB4MTMsMHgwMCwweDgyLDB4MzQsMHg0YywweDAzLDB4NjIsMHgxMCwKLTB4MTQsMHgwMCwweDgyLDB4MzQsMHgyNCwweGZlLDB4NjIsMHgxNCwweDAwLDB4ZjAsMHgwMiwweDNjLDB4ZDMsMHgwYSwweDAwLDB4MGMsCi0weGZkLDB4MDAsMHgwNCwweDI0LDB4MTAsMHgxMCwweDAzLDB4M2MsMHhhMCwweDAwLDB4ODIsMHgzNiwweDEwLDB4MTAsMHg2MywweDM0LAotMHgwMCwweGMwLDB4MDcsMHgzYywweDI1LDB4YjAsMHgwNiwweDNjLDB4MDAsMHgwMCwweDQzLDB4YWMsMHhhNCwweDAwLDB4ODQsMHgzNiwKLTB4MDAsMHhhMSwweGU3LDB4MzQsMHhhOCwweDAwLDB4YzYsMHgzNCwweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDgwLDB4YWMsCi0weDAwLDB4MDAsMHhjNywweGFjLDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg2MCwweDAyLDB4NjIsMHgxMCwweDJiLDB4MTAsMHg2MiwweDAwLDB4ZjYsMHgwMCwweDQwLDB4MTQsMHgwMywweDAwLDB4YTIsMHgzNCwKLTB4NGIsMHgwMywweDYyLDB4MTAsMHgwNCwweDAwLDB4YTIsMHgzNCwweDBiLDB4ZmUsMHg2MiwweDE0LDB4MDAsMHhmMCwweDAyLDB4M2MsCi0weGY0LDB4NjMsMHg2MiwweDkyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzIsMHhhZiwweGMwLDB4MDIsMHg4MiwweDM2LAotMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MSwweDAyLDB4NjIsMHgxMCwKLTB4MmIsMHgxMCwweDYyLDB4MDAsMHhmZSwweDAwLDB4NDAsMHgxNCwweDAxLDB4MDAsMHgwMiwweDI0LDB4MGYsMHgwMCwweGMyLDB4MzQsCi0weDYzLDB4MDMsMHg2MiwweDEwLDB4MTAsMHgwMCwweGMyLDB4MzQsMHhmYiwweGZkLDB4NjIsMHgxNCwweDAwLDB4ZjAsMHgwMiwweDNjLAotMHgwMCwweGZmLDB4MDMsMHgzMiwweDAwLDB4ZmYsMHgwMiwweDM0LDB4OWQsMHgwMywweDYyLDB4MTAsMHhjMCwweDAyLDB4ODIsMHgzNiwKLTB4OGMsMHg2NSwweDYwLDB4YWUsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDQ3LDB4MDIsMHg2MiwweDEwLDB4MmIsMHgxMCwweDYyLDB4MDAsMHgwMiwweDAxLDB4NDAsMHgxNCwweDAzLDB4MDAsMHhlMiwweDM0LAotMHg4ZCwweDAzLDB4NjIsMHgxMCwweDA0LDB4MDAsMHhlMiwweDM0LDB4ZWIsMHhmZCwweDYyLDB4MTQsMHgwMCwweGYwLDB4MDIsMHgzYywKLTB4MWUsMHg1NywweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsCi0weDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YiwweDAxLDB4NjIsMHgxMCwweDJiLDB4MTAsMHg0MywweDAwLAotMHhjZiwweDAwLDB4NDAsMHgxNCwweGEyLDB4MDAsMHhlMiwweDM0LDB4YTAsMHgwMCwweGUyLDB4MzQsMHhkZSwweGZkLDB4NjIsMHgxNCwKLTB4MDAsMHhmMCwweDAyLDB4M2MsMHgwMCwweDBmLDB4MDIsMHgzMiwweDAyLDB4MjIsMHgwMiwweDAwLDB4MDEsMHgwMCwweDAzLDB4MjQsCi0weDNjLDB4MDQsMHg4MywweDEwLDB4MDIsMHgwMCwweDAyLDB4MjQsMHgzNCwweDA0LDB4ODIsMHgxMCwweDAzLDB4MDAsMHgwMiwweDI0LAotMHg0NiwweDAzLDB4ODIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZGUsMHg0ZiwweDAwLDB4MGMsMHgyMSwweDIwLDB4MDAsMHgwMCwKLTB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDQ2LDB4MDIsMHg2MiwweDEwLDB4MmIsMHgxMCwweDYyLDB4MDAsMHhlNiwweGZkLDB4NDAsMHgxNCwweGMwLDB4MDIsMHg4MiwweDM2LAotMHgxOCwweDAwLDB4ZTIsMHgzNCwweDQ1LDB4MDMsMHg2MiwweDEwLDB4MTksMHgwMCwweGUyLDB4MzQsMHhjNiwweGZkLDB4NjIsMHgxNCwKLTB4MDAsMHhmMCwweDAyLDB4M2MsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4OTQsMHgwZSwweDgzLDB4MzYsCi0weDljLDB4MGUsMHg4MiwweDM2LDB4YTQsMHgwZSwweDg0LDB4MzYsMHhhYywweDBlLDB4ODcsMHgzNiwweDAwLDB4MDAsMHg2NSwweDhjLAotMHgwMCwweDAwLDB4NDgsMHg4YywweDAwLDB4MDAsMHg4YSwweDhjLDB4MDAsMHgwMCwweGU2LDB4OGMsMHgwMiwweDgwLDB4MDcsMHgzYywKLTB4NjgsMHgxNSwweGVkLDB4MjQsMHhiNCwweDBlLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0NywweDhjLDB4MGMsMHg0MCwweGEzLDB4OGQsCi0weGZmLDB4MDMsMHgwMiwweDNjLDB4MTAsMHg0MCwweGE0LDB4OGQsMHgyNCwweDI4LDB4YTIsMHgwMCwweDI0LDB4MzAsMHhjMiwweDAwLAotMHhiYywweDBlLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0YiwweDhjLDB4MDAsMHhmYywweDAyLDB4MjQsMHgwMiwweDJjLDB4MDUsMHgwMCwKLTB4MjQsMHgxOCwweDYyLDB4MDAsMHgwMiwweDM0LDB4MDYsMHgwMCwweDI0LDB4MjAsMHg4MiwweDAwLDB4YzQsMHgwZSwweDgyLDB4MzYsCi0weDI1LDB4MTgsMHg2NSwweDAwLDB4MjUsMHgyMCwweDg2LDB4MDAsMHgwMCwweDAwLDB4NDUsMHg4YywweGZmLDB4MDMsMHgwNiwweDNjLAotMHhmMCwweGZmLDB4MDIsMHgzYywweGZmLDB4MDMsMHg0MiwweDM0LDB4MjQsMHgzOCwweGU2LDB4MDAsMHg4MiwweDM5LDB4MDcsMHgwMCwKLTB4MjQsMHgyMCwweDgyLDB4MDAsMHgyNCwweDQwLDB4MDYsMHgwMSwweDA4LDB4NDAsMHhhOSwweDhkLDB4MjUsMHgyMCwweDg3LDB4MDAsCi0weGNjLDB4MGUsMHg4YywweDM2LDB4ZmYsMHgwMywweDA3LDB4M2MsMHgwMCwweDAwLDB4ODYsMHg4ZCwweDI0LDB4MTgsMHg2MiwweDAwLAotMHgyNCwweDUwLDB4NDcsMHgwMSwweDI0LDB4NTgsMHg2NywweDAxLDB4ODIsMHg0MSwweDA4LDB4MDAsMHhmZiwweDlmLDB4MDIsMHgzYywKLTB4MGYsMHhjMCwweDA3LDB4M2MsMHhmZiwweGZmLDB4ZTcsMHgzNCwweGZmLDB4ZmYsMHg0MiwweDM0LDB4MjUsMHgxOCwweDY4LDB4MDAsCi0weDI0LDB4NDgsMHgyMiwweDAxLDB4MjQsMHgxOCwweDY3LDB4MDAsMHhmZiwweDAzLDB4MDIsMHgzYywweDI0LDB4MjAsMHg4NywweDAwLAotMHhmZiwweDAwLDB4MDcsMHgzYywweDI0LDB4MjgsMHhhMiwweDAwLDB4MjQsMHgzMCwweGMyLDB4MDAsMHgwMCwweDUxLDB4MGEsMHgwMCwKLTB4MDAsMHgyMCwweDAyLDB4M2MsMHgwMCwweDU5LDB4MGIsMHgwMCwweDAwLDB4ZmYsMHhlNywweDM0LDB4MjUsMHg0OCwweDIyLDB4MDEsCi0weDI1LDB4MTgsMHg2YSwweDAwLDB4MjUsMHgyMCwweDhiLDB4MDAsMHgwMiwweDJjLDB4MDUsMHgwMCwweDAyLDB4MzQsMHgwNiwweDAwLAotMHgyNCwweDEwLDB4MDcsMHgwMiwweDA4LDB4NDAsMHhhOSwweGFkLDB4MGMsMHg0MCwweGEzLDB4YWQsMHgxMCwweDQwLDB4YTQsMHhhZCwKLTB4MTQsMHg0MCwweGE1LDB4YTUsMHg0ZSwweDAzLDB4NDAsMHgxMCwweDE2LDB4NDAsMHhhNiwweGE1LDB4ZmYsMHgwMCwweDAyLDB4M2MsCi0weDI0LDB4MTAsMHgwMiwweDAyLDB4MDIsMHgxNCwweDAyLDB4MDAsMHgwMiwweDFhLDB4MTAsMHgwMCwweGM3LDB4NDIsMHhhMiwweGExLAotMHhjMywweDQyLDB4YTMsMHhhMSwweGMzLDB4NDIsMHg2MiwweDkyLDB4MjUsMHhiMCwweDAzLDB4M2MsMHg2MSwweDBjLDB4NjMsMHgzNCwKLTB4MTAsMHgwMCwweGE0LDB4MjcsMHgwMCwweDAwLDB4NjIsMHhhMCwweDdhLDB4NTQsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg5NSwweDAwLDB4YzIsMHgxMCwweDAwLDB4NDAsMHgwMiwweDNjLDB4MDksMHhmZiwweGMyLDB4MTAsMHhjMCwweDAyLDB4ODIsMHgzNiwKLTB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4N2IsMHgwMiwweGMyLDB4MTAsCi0weDJiLDB4MTAsMHg0NiwweDAwLDB4ODMsMHgwMCwweDQwLDB4MTQsMHgwMCwweGIwLDB4MDIsMHgzYywweDAwLDB4OTAsMHgwMiwweDNjLAotMHg3OCwweGZkLDB4YzIsMHgxNCwweGMwLDB4MDIsMHg4MiwweDM2LDB4MjEsMHgxMCwweDEzLDB4MDEsMHg3MywweDQ0LDB4NDQsMHhhMCwKLTB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDU1LDB4ZmQsMHg2MiwweDE0LDB4MDAsMHhmMCwweDAyLDB4M2MsMHg2YSwweDU2LDB4MDAsMHgwYywweDIxLDB4MjAsMHgwMCwweDAyLAotMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDcsMHgwMCwweDQyLDB4MzQsMHg0YywweGZkLDB4NjIsMHgxNCwweDAwLDB4ZjAsMHgwMiwweDNjLDB4NWIsMHg0ZSwweDAwLDB4MGMsCi0weDA3LDB4MDAsMHgwNCwweDI0LDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MWEsMHgwMiwweDAwLDB4MjEsMHg4OCwweDAwLDB4MDAsMHhhZiwweDRhLDB4MDAsMHgwOCwKLTB4MjcsMHhiMCwweDA2LDB4M2MsMHgwMSwweDAwLDB4MzEsMHgyNiwweDAwLDB4MDEsMHgyMiwweDJlLDB4MDgsMHgwMCwweDQwLDB4MTAsCi0weGZmLDB4MDAsMHgyMiwweDJlLDB4MDAsMHgwMCwweGMyLDB4OTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MDAsMHg0MiwweDMwLAotMHhmOCwweGZmLDB4NDMsMHgxNCwweDA4LDB4MDAsMHhjNiwweDI0LDB4MDAsMHgwMCwweGQxLDB4YTcsMHhmZiwweDAwLDB4MjIsMHgyZSwKLTB4NTAsMHhmZCwweDQwLDB4MTQsMHhjMCwweDAyLDB4ODIsMHgzNiwweDEyLDB4ODcsMHgwMiwweDNjLDB4MDAsMHgwMCwweGMyLDB4YWYsCi0weGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyZCwweGZkLDB4NjIsMHgxNCwweDAwLDB4ZjAsMHgwMiwweDNjLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywKLTB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MDAsMHgwMywweDNjLDB4MDAsMHhmZiwweDYzLDB4MzQsCi0weDI0LDB4MTAsMHgwMywweDAyLDB4MDIsMHg4MiwweDAyLDB4MDAsMHhjYywweDAyLDB4ODMsMHgzNiwweDAwLDB4MDAsMHg3MCwweGFjLAotMHgwMCwweDAwLDB4ZDEsMHg4ZiwweDIxLDB4MTAsMHgxNCwweDAyLDB4MDAsMHgwMCwweDUxLDB4YWMsMHgwMCwweDAwLDB4NTEsMHg4YywKLTB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4ZDEsMHhhZiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2NCwweDYyLDB4OTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMiwweGFmLAotMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4ZjQsMHgwMiwweDYyLDB4MTAsMHhhMywweDAwLDB4ZTIsMHgzNCwweDBmLDB4ZmQsMHg2MiwweDE0LDB4MDAsMHhmMCwweDAyLDB4M2MsCi0weGMwLDB4MDIsMHg4MiwweDM2LDB4OGMsMHg2NSwweDYwLDB4YWUsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGVjLDB4NjMsMHg2MiwweDkyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzIsMHhhZiwKLTB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGU2LDB4NjMsMHg2MiwweGE2LDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4NDAsMHg2MywweDhlLDB4ZmYsMHg5ZiwweDA3LDB4M2MsMHhmZiwweGZmLDB4ZTcsMHgzNCwKLTB4MDIsMHgyYywweDEwLDB4MDAsMHgwMCwweDFmLDB4MDQsMHgzMiwweDI0LDB4MTgsMHg2NywweDAwLDB4MjUsMHgxOCwweDYyLDB4MDAsCi0weDAyLDB4OGEsMHgwNCwweDAwLDB4M2YsMHgwMCwweGE1LDB4MzAsMHhjMCwweDAyLDB4ODIsMHgzNiwweDA4LDB4NDAsMHg2MywweGFlLAotMHhiYywweDQyLDB4NzEsMHhhMiwweGMxLDB4NDIsMHg2NSwweGEyLDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTIsMHg5MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZmEsMHgwMCwweDQyLDB4MzAsCi0weDAwLDB4MDAsMHhlMiwweGEyLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMiwweDkyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZCwweDAwLDB4NDIsMHgzMCwKLTB4MDAsMHgwMCwweGUyLDB4YTIsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZjcsMHhmYywweGMyLDB4MTQsMHhjMCwweDAyLDB4ODIsMHgzNiwweDgwLDB4MTAsMHgwOCwweDAwLAotMHgyMSwweDEwLDB4NTMsMHgwMCwweDYwLDB4NDUsMHg0MywweGFjLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywKLTB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHgwOCwweDAwLDB4MjEsMHgxMCwweDQ4LDB4MDAsCi0weDIxLDB4MTAsMHg1MywweDAwLDB4MjEsMHgxMCwweDQ5LDB4MDAsMHgzNCwweDQzLDB4NDQsMHhhMCwweGMwLDB4MDIsMHg4MiwweDM2LAotMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg3NywweDU2LDB4MDAsMHgwYywKLTB4MjEsMHgyMCwweDAwLDB4MDIsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHhmZiwweDAyLDB4MzQsMHg4YywweDY1LDB4NjIsMHhhZSwweGMwLDB4MDIsMHg4MiwweDM2LAotMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNywweDBiLDB4MDAsMHgwYywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZjAsMHg2MywweDYyLDB4OTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMiwweGFmLAotMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDgsMHg0MCwweDYyLDB4OGUsMHhmZiwweDlmLDB4MDMsMHgzYywweGZmLDB4ZmYsMHg2MywweDM0LDB4MjQsMHgxMCwweDQzLDB4MDAsCi0weDA4LDB4NDAsMHg2MiwweGFlLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMSwweDAwLDB4MjEsMHgzOCwKLTB4MDAsMHg2MCwweDgxLDB4NDAsMHgyMiwweDUxLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MCwweDAxLDB4NDAsCi0weDAxLDB4MDAsMHgyMSwweDM0LDB4MDAsMHg2MCwweDgxLDB4NDAsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLAotMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHgwMCwweDA3LDB4M2MsMHgwMCwweGZmLDB4ZTcsMHgzNCwKLTB4MjQsMHgxMCwweDA3LDB4MDIsMHgwMiwweDgyLDB4MDIsMHgwMCwweGNjLDB4MDIsMHg0MywweDM2LDB4MDAsMHgwMCwweDcwLDB4YWMsCi0weDIxLDB4MTAsMHgxMiwweDAyLDB4MDAsMHgwMCwweDUxLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhkMSwweGFmLAotMHgwMCwweDAwLDB4NTEsMHg4YywweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhiNywweDRmLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMiwweDgyLDB4MzYsCi0weDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIxLDB4ODgsMHgwMCwweDAwLAotMHg2YywweDRiLDB4MDAsMHgwOCwweDI3LDB4YjAsMHgwNCwweDNjLDB4MDEsMHgwMCwweDMxLDB4MjYsMHgwMCwweDAxLDB4MjIsMHgyZSwKLTB4MGEsMHgwMCwweDQwLDB4MTAsMHhmZiwweDAwLDB4MjIsMHgyZSwweDAwLDB4MDAsMHg4MywweDk0LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGZmLDB4ZmYsMHg2NywweDMwLDB4ZmYsMHgwMCwweGUyLDB4MzAsMHhmMCwweDAwLDB4NDIsMHgyOCwweGY2LDB4ZmYsMHg0MCwweDE0LAotMHgwOCwweDAwLDB4ODQsMHgyNCwweDAwLDB4MDAsMHhjNywweGE3LDB4ZmYsMHgwMCwweDIyLDB4MmUsMHg5MSwweGZjLDB4NDAsMHgxNCwKLTB4YzAsMHgwMiwweDgyLDB4MzYsMHgxMiwweDg3LDB4MDIsMHgzYywweDAwLDB4MDAsMHhjMiwweGFmLDB4YzAsMHgwMiwweDgyLDB4MzYsCi0weDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU0LDB4NjMsMHg2MiwweDk2LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMiwweGE3LDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywKLTB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4NjQsMHg2MiwweDkyLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHhjMiwweGFmLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHgwMiwweDMyLDB4MDIsMHgxMiwweDAyLDB4MDAsMHgwMywweDAwLDB4NDMsMHgyYywKLTB4MDIsMHgwMCwweDYwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4NDAsMHg2MiwweGEyLDB4MDIsMHg0MCwweDYzLDB4OTIsCi0weDkwLDB4MGMsMHg0MiwweDM2LDB4MDAsMHgwMCwweDQzLDB4YTAsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLAotMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZDcsMHg1NiwweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDIxLDB4MTAsMHgxMywweDAxLDB4NTYsMHg0NCwweDQ0LDB4YTAsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLAotMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHgwMCwweDAzLDB4M2MsMHgyNCwweDIwLDB4MDMsMHgwMiwKLTB4NzMsMHgwZSwweDAwLDB4MGMsMHgwMiwweDI0LDB4MDQsMHgwMCwweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsCi0weDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDFjLDB4MTAsMHgwMCwweDAwLDB4MWYsMHgwMiwweDMyLAotMHgwMiwweDhhLDB4MDIsMHgwMCwweDNmLDB4MDAsMHg2NSwweDMwLDB4YzEsMHg0MiwweDY1LDB4YTIsMHhiYywweDQyLDB4NzEsMHhhMiwKLTB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAxLDB4MDAsMHgyMSwweDM4LDB4MDAsMHg2MCwweDgxLDB4NDAsCi0weDFmLDB4MTIsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzIsMHhhZiwweDAwLDB4NjAsMHgwMSwweDQwLAotMHgwMSwweDAwLDB4MjEsMHgzNCwweDAwLDB4NjAsMHg4MSwweDQwLDB4MDMsMHg0MCwweDYyLDB4OTIsMHgwZSwweDBjLDB4NDQsMHgzNiwKLTB4MDEsMHgwMCwweDQyLDB4MjQsMHhmZiwweDAwLDB4NDMsMHgzMCwweDAwLDB4MDAsMHg4MywweGEwLDB4MDMsMHg0MCwweDYyLDB4YTIsCi0weGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweGZmLDB4MDIsMHgzMiwweDAyLDB4M2EsMHgwMiwweDAwLDB4MWEsMHgwMSwweGUwLDB4MTAsMHg0ZiwweDAwLDB4ODIsMHgzNiwKLTB4OTQsMHgwMCwweDQyLDB4MzYsMHgwMCwweDAwLDB4NDMsMHg5NCwweGZmLDB4ZmYsMHhlMiwweDI0LDB4YjAsMHgwMywweDQ1LDB4MzYsCi0weGZmLDB4ZmYsMHg3MSwweDMwLDB4MWIsMHgwMCwweDI3LDB4MDIsMHgwMiwweDAwLDB4ZTAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwZCwweDAwLDB4MDcsMHgwMCwweGZmLDB4ZmYsMHg0NywweDMwLDB4MDAsMHgwMCwweGIxLDB4YWMsMHg4MCwweGZmLDB4MDIsMHgyNCwKLTB4MDAsMHgxOSwweDA3LDB4MDAsMHgyNSwweDE4LDB4NjIsMHgwMCwweDRmLDB4MDAsMHg0NCwweDM2LDB4OWUsMHgwMCwweDQ2LDB4MzYsCi0weDAwLDB4MDAsMHhhNywweGFjLDB4MDAsMHgwMCwweDgzLDB4YTAsMHgyNSwweGIwLDB4MDQsMHgzYywweDQ0LDB4MDAsMHg4NCwweDM0LAotMHgxMiwweDg4LDB4MDAsMHgwMCwweDgwLDB4MTIsMHgxMSwweDAwLDB4MDAsMHhmYywweDQyLDB4MjQsMHgwMCwweDAwLDB4YjEsMHhhYywKLTB4MDAsMHgwMCwweGQxLDB4YTQsMHg0MiwweDg5LDB4MDIsMHgwMCwweDI2LDB4YjAsMHgwMiwweDNjLDB4N2MsMHgwMCwweDQyLDB4MzQsCi0weDAwLDB4MDAsMHhiMSwweGFjLDB4MDAsMHgwMCwweDUxLDB4YTQsMHgyNSwweGIwLDB4MDIsMHgzYywweDQ0LDB4MDAsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4NDMsMHg5NCwweGZmLDB4ZmQsMHgwMiwweDI0LDB4MjQsMHgxOCwweDYyLDB4MDAsMHgwMCwweDAwLDB4ODMsMHhhNCwKLTB4MDAsMHgwMCwweDgyLDB4OTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg0MiwweDM0LDB4MDAsMHgwMCwweDgyLDB4YTQsCi0weGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyNCwweDEwLDB4MDgsMHgwMiwweGNjLDB4MDIsMHg0MywweDM2LDB4MDAsMHhmZiwweDA0LDB4MzIsMHgwMiwweDNjLDB4MDIsMHgwMCwKLTB4MDAsMHgwMCwweDcwLDB4YWMsMHgwNCwweDAwLDB4ZTAsMHgxMCwweDAyLDB4ODIsMHgwNCwweDAwLDB4MDEsMHgwMCwweDAyLDB4MjQsCi0weDAyLDB4MDAsMHhlMiwweDEwLDB4MDEsMHgwMCwweDA0LDB4MjQsMHgyMSwweDIwLDB4MDAsMHgwMCwweDdhLDB4NDIsMHgwMCwweDBjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDBmLDB4MDAsMHgwNiwweDNjLDB4MjEsMHgyMCwweDAwLDB4MDIsMHhkZCwweDQ0LDB4MDAsMHgwYywKLTB4ZmYsMHhmZiwweGM1LDB4MzQsMHgwZiwweDAwLDB4MDcsMHgzYywweGZmLDB4ZmYsMHhlNywweDM0LDB4MjQsMHg4OCwweDQ3LDB4MDAsCi0weGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweGQxLDB4YWYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4YjAsMHgwMiwweDNjLDB4MDAsMHgwMCwweDQzLDB4OTAsMHhmZiwweDAwLDB4MDIsMHgyNCwKLTB4ZmYsMHgwMCwweDcwLDB4MzAsMHhmMywweGZiLDB4MDIsMHgxMiwweGMwLDB4MDIsMHg4MiwweDM2LDB4MjgsMHhiMCwweDA1LDB4M2MsCi0weGZmLDB4MDAsMHgwNCwweDI0LDB4YzAsMHgxMCwweDEwLDB4MDAsMHgyMSwweDEwLDB4NDUsMHgwMCwweDAwLDB4MDAsMHg0MywweDkwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MDAsMHg3MCwweDMwLDB4ZmIsMHhmZiwweDA0LDB4MTYsMHhjMCwweDEwLDB4MTAsMHgwMCwKLTB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MWYsMHgwMiwweDMyLDB4MDIsMHgxYywweDEwLDB4MDAsMHgwMiwweDhhLDB4MDIsMHgwMCwweDNmLDB4MDAsMHg2NSwweDMwLAotMHhjMCwweDAyLDB4ODIsMHgzNiwweGJjLDB4NDIsMHg3MSwweGEyLDB4YzEsMHg0MiwweDY1LDB4YTIsMHgwMCwweDAwLDB4NDAsMHhhYywKLTB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MDAsMHgwNywweDNjLDB4MjQsMHgyMCwweDA3LDB4MDIsCi0weDE1LDB4NTEsMHgwMCwweDBjLDB4MDIsMHgyNCwweDA0LDB4MDAsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLAotMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHg2MywweDYyLDB4OTIsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweGMyLDB4YWYsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZmMsMHg2MywweDYyLDB4OTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMiwweGFmLAotMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweGUyLDB4OTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MDAsMHg1MSwweDMwLDB4MDUsMHgwMCwweDIzLDB4MzYsCi0weGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweGUzLDB4YTIsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDIsMHg4MiwweDM2LDB4ZTYsMHg2MywweDYwLDB4YTYsMHgwMCwweDAwLDB4NDAsMHhhYywKLTB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweGJkLDB4NTYsMHgwMCwweDBjLDB4MjEsMHgyMCwweDAwLDB4MDIsCi0weGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg0MSwweDBiLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywKLTB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMiwweDkyLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGZmLDB4MDAsMHg1MSwweDMwLDB4MDIsMHgwMCwweDIzLDB4MzYsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHhlMywweGEyLAotMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4ZWMsMHg5MSwweDQyLDB4MjQsMHgwMCwweDAwLDB4NDcsMHg4YywweGMwLDB4MDIsMHg0MywweDM2LDB4MjUsMHhiMCwweDBjLDB4M2MsCi0weDA4LDB4NDAsMHhlNCwweDhjLDB4MDAsMHgwMCwweDYwLDB4YWMsMHg0MiwweDE3LDB4MDQsMHgwMCwweDAzLDB4MDAsMHg0MiwweDMwLAotMHg2MCwweDAwLDB4NDAsMHgxNCwweDAzLDB4MGQsMHg0MiwweDM2LDB4MDAsMHgwMCwweDQ1LDB4OTAsMHgxMCwweDQwLDB4ZTYsMHg4YywKLTB4ZmYsMHg5ZiwweDAzLDB4M2MsMHhmZiwweGZmLDB4NjMsMHgzNCwweGZmLDB4M2YsMHgwMiwweDNjLDB4MjQsMHgyMCwweDgzLDB4MDAsCi0weGZmLDB4ZmYsMHg0MiwweDM0LDB4MDAsMHgyMCwweDAzLDB4M2MsMHgyNCwweDU4LDB4YzIsMHgwMCwweDI1LDB4MjAsMHg4MywweDAwLAotMHgwMCwweDQwLDB4MDIsMHgzYywweDcwLDB4MDAsMHhhNSwweDMwLDB4MjUsMHg1OCwweDYyLDB4MDEsMHgwOCwweDAxLDB4YTAsMHgxMCwKLTB4MDgsMHg0MCwweGU0LDB4YWMsMHg5NCwweDBlLDB4ODIsMHgzNSwweDljLDB4MGUsMHg4MywweDM1LDB4YTQsMHgwZSwweDg2LDB4MzUsCi0weDAwLDB4MDAsMHg0NSwweDhjLDB4YWMsMHgwZSwweDg3LDB4MzUsMHgwMCwweDAwLDB4NjgsMHg4YywweDAwLDB4MDAsMHhjYSwweDhjLAotMHgwMiwweDgwLDB4MDYsMHgzYywweDAwLDB4MDAsMHhlNCwweDhjLDB4NjgsMHgxNSwweGM2LDB4MjQsMHgwYywweDQwLDB4YzMsMHg4YywKLTB4YjQsMHgwZSwweDgyLDB4MzUsMHgwMCwweDAwLDB4NDcsMHg4YywweGZmLDB4MDMsMHgwMiwweDNjLDB4MDAsMHhmYywweDA2LDB4MjQsCi0weDI0LDB4MjgsMHhhMiwweDAwLDB4MjQsMHgyMCwweDgyLDB4MDAsMHhiYywweDBlLDB4ODIsMHgzNSwweDAwLDB4MDAsMHg0OSwweDhjLAotMHgwMiwweDJjLDB4MDUsMHgwMCwweDI0LDB4MTAsMHg2NiwweDAxLDB4MjQsMHgxOCwweDY2LDB4MDAsMHgwMiwweDI0LDB4MDQsMHgwMCwKLTB4YzQsMHgwZSwweDg2LDB4MzUsMHgyNSwweDE4LDB4NjUsMHgwMCwweDI1LDB4MTAsMHg0NCwweDAwLDB4MDAsMHgwMCwweGM1LDB4OGMsCi0weGZmLDB4MDMsMHgwNCwweDNjLDB4ZjAsMHhmZiwweDA2LDB4M2MsMHhmZiwweDAzLDB4YzYsMHgzNCwweDI0LDB4MzgsMHhlNCwweDAwLAotMHhjYywweDBlLDB4OGIsMHgzNSwweDI0LDB4NDAsMHgwNCwweDAxLDB4ODIsMHgzOSwweDA3LDB4MDAsMHgwMCwweDAwLDB4NjQsMHg4ZCwKLTB4MjQsMHgxMCwweDQ2LDB4MDAsMHgyNCwweDE4LDB4NjYsMHgwMCwweDI1LDB4MTAsMHg0NywweDAwLDB4ODIsMHg0MSwweDA4LDB4MDAsCi0weGZmLDB4MDMsMHgwNywweDNjLDB4MGYsMHhjMCwweDA2LDB4M2MsMHgyNCwweDUwLDB4NDcsMHgwMSwweDI0LDB4NDgsMHgyNywweDAxLAotMHhmZiwweGZmLDB4YzYsMHgzNCwweDI1LDB4MTgsMHg2OCwweDAwLDB4MjQsMHgyOCwweGE3LDB4MDAsMHgyNCwweDIwLDB4ODcsMHgwMCwKLTB4MDAsMHg1MSwweDBhLDB4MDAsMHgyNCwweDE4LDB4NjYsMHgwMCwweDAwLDB4NDksMHgwOSwweDAwLDB4MjQsMHgxMCwweDQ2LDB4MDAsCi0weDAyLDB4ODAsMHgwNywweDNjLDB4NjgsMHgxNSwweGU3LDB4MjQsMHgyNSwweDE4LDB4NmEsMHgwMCwweDI1LDB4MTAsMHg0OSwweDAwLAotMHgwMiwweDJjLDB4MDUsMHgwMCwweDAyLDB4MjQsMHgwNCwweDAwLDB4MGMsMHg0MCwweGUzLDB4YWMsMHgxMCwweDQwLDB4ZTIsMHhhYywKLTB4MTQsMHg0MCwweGU1LDB4YTQsMHgxNiwweDQwLDB4ZTQsMHhhNCwweDAyLDB4ODAsMHgwMiwweDNjLDB4NjgsMHgxNSwweDQzLDB4MjQsCi0weDBjLDB4NDAsMHg2MiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiZCwweDAwLDB4NDAsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweGZmLDB4MDIsMHgzMiwweGM2LDB4MDAsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDEyLDB4MDIsMHgwMCwKLTB4YzMsMHg0MiwweDYyLDB4YTAsMHg3YSwweDU0LDB4MDAsMHgwYywweDEwLDB4MDAsMHhhNCwweDI3LDB4YzIsMHg1MywweDAwLDB4MGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MGMsMHg0MCwweDYyLDB4OGUsMHgwMCwweDgwLDB4MDMsMHgzYywweDI1LDB4MTAsMHg0MywweDAwLAotMHgwYywweDQwLDB4NjIsMHhhZSwweGMzLDB4NDIsMHg2MiwweDkyLDB4MjUsMHhiMCwweDAzLDB4M2MsMHg2MSwweDBjLDB4NjMsMHgzNCwKLTB4MDAsMHgwMCwweDYyLDB4YTAsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4Y2YsMHg0ZSwweDAwLDB4MGMsMHgyMSwweDIwLDB4MDAsMHgwMiwweGMwLDB4MDIsMHg4MiwweDM2LAotMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNywweDUxLDB4MDAsMHgwYywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4OWUsMHgwMCwweDgzLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhMCwweDAwLDB4MDAsMHg2MCwweGE0LAotMHg5NCwweDAwLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MywweDk0LDB4MjUsMHhiMCwweDA2LDB4M2MsMHg0NCwweDAwLDB4YzYsMHgzNCwKLTB4ZmYsMHhmZiwweDcxLDB4MzAsMHg4MCwweDEyLDB4MTEsMHgwMCwweDAwLDB4ZjgsMHg0MiwweDI0LDB4NDIsMHg4OSwweDAyLDB4MDAsCi0weDI2LDB4YjAsMHgwMiwweDNjLDB4YjAsMHgwMywweDgzLDB4MzYsMHg3YywweDAwLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg3MSwweGFjLAotMHgwMCwweDAwLDB4NTEsMHhhNCwweDAwLDB4MDAsMHhjMywweDk0LDB4ZmYsMHhmZCwweDAyLDB4MjQsMHgyNCwweDE4LDB4NjIsMHgwMCwKLTB4MDAsMHgwMCwweGMzLDB4YTQsMHgwMCwweDAwLDB4YzIsMHg5NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDQyLDB4MzQsCi0weDAwLDB4MDAsMHhjMiwweGE0LDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDViLDB4NGUsMHgwMCwweDBjLDB4MDEsMHgwMCwweDA0LDB4MjQsMHhjMCwweDAyLDB4ODIsMHgzNiwKLTB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgxMCwweDA4LDB4MDAsCi0weDIxLDB4MTAsMHg1MywweDAwLDB4ZWMsMHg0NCwweDQzLDB4YWMsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLAotMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTcsMHgwYiwweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDI4LDB4YjAsMHgxMSwweDNjLDB4MDAsMHgwMCwweDIyLDB4OTYsMHhmZiwweDAwLDB4MDQsMHgzYywweDI0LDB4MTgsMHgwNCwweDAyLAotMHgwMiwweDI0LDB4MDMsMHgwMCwweGZmLDB4MDAsMHg0MiwweDMwLDB4MGEsMHgwMCwweDgyLDB4MTAsMHhmZiwweDdmLDB4MDIsMHgzYywKLTB4MDgsMHgwMCwweDMxLDB4MjYsMHgwMCwweDAwLDB4MjIsMHg5NiwweGZmLDB4ZmYsMHgyMywweDMyLDB4ZmYsMHgwMCwweDQyLDB4MzAsCi0weDAzLDB4MDAsMHg4MiwweDEwLDB4MDAsMHgwOCwweDYzLDB4MmMsMHhmOSwweGZmLDB4NjAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHhmZiwweDdmLDB4MDIsMHgzYywweGZmLDB4ZmYsMHg0MiwweDM0LDB4MjQsMHgxMCwweDIyLDB4MDIsMHgwMCwweDAwLDB4YzIsMHhhZiwKLTB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGY4LDB4NjMsMHg2MiwweDkyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzIsMHhhZiwweGMwLDB4MDIsMHg4MiwweDM2LAotMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweDAwLDB4MDMsMHgzYywKLTB4MjQsMHgxMCwweDAzLDB4MDIsMHgwMCwweGZmLDB4MDQsMHgzMiwweGNjLDB4MDIsMHg4MywweDM2LDB4MDIsMHgzYywweDAyLDB4MDAsCi0weDAwLDB4MDAsMHg3MCwweGFjLDB4MDQsMHgwMCwweGUwLDB4MTAsMHgwMiwweDgyLDB4MDQsMHgwMCwweDAxLDB4MDAsMHgwMiwweDI0LAotMHgwMiwweDAwLDB4ZTIsMHgxMCwweDAxLDB4MDAsMHgwNCwweDI0LDB4MjEsMHgyMCwweDAwLDB4MDAsMHg3YSwweDQyLDB4MDAsMHgwYywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZDEsMHg4ZiwweDBmLDB4MDAsMHgwNiwweDNjLDB4ZmYsMHhmZiwweGM1LDB4MzQsCi0weDIxLDB4MjAsMHgwMCwweDAyLDB4YmEsMHg0NCwweDAwLDB4MGMsMHgyMSwweDMwLDB4MjAsMHgwMiwweDBmLDB4MDAsMHgwNywweDNjLAotMHgyMSwweDIwLDB4MDAsMHgwMiwweGRkLDB4NDQsMHgwMCwweDBjLDB4ZmYsMHhmZiwweGU1LDB4MzQsMHgwMCwweDAwLDB4YzIsMHhhZiwKLTB4MjEsMHg4OCwweDQwLDB4MDAsMHgyNSwweGIwLDB4MDIsMHgzYywweGM4LDB4MDIsMHg0MiwweDM0LDB4MDAsMHgwMCwweDUxLDB4YWMsCi0weGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyNSwweGIwLDB4MDYsMHgzYywweGZmLDB4MDAsMHgwMiwweDI0LDB4NTYsMHgwMSwweGM2LDB4MzQsMHgwMCwweDAwLDB4YzIsMHhhNCwKLTB4MDEsMHgwMCwweDAzLDB4MjQsMHgwMiwweDgwLDB4MDcsMHgzYywweGMwLDB4MDIsMHg4MiwweDM2LDB4YjgsMHg3ZCwweGUzLDB4YTAsCi0weDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweGRlLDB4NGYsMHgwMCwweDBjLAotMHgwMywweDAwLDB4MDQsMHgyNCwweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhkZSwweDRlLDB4MDAsMHgwYywweDIxLDB4MjAsMHgwMCwweDAyLDB4YzAsMHgwMiwweDgyLDB4MzYsCi0weDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4NDAsMHg2MiwweDhlLAotMHhmZiwweDlmLDB4MDQsMHgzYywweGZmLDB4ZmYsMHg4NCwweDM0LDB4MjQsMHgxMCwweDQ0LDB4MDAsMHgwOCwweDQwLDB4NjIsMHhhZSwKLTB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGMwLDB4MTAsMHgwMywweDAwLDB4MjEsMHgxMCwweDQzLDB4MDAsMHg4MCwweDEwLDB4MDIsMHgwMCwweDIxLDB4MTAsMHg0MywweDAwLAotMHg4MCwweDEwLDB4MDIsMHgwMCwweDIxLDB4MTAsMHg1MywweDAwLDB4NzAsMHg1MSwweDQzLDB4OGMsMHhjMCwweDAyLDB4ODIsMHgzNiwKLTB4MDAsMHgwMCwweGMzLDB4YWYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDdhLDB4NTQsMHgwMCwweDBjLDB4MTAsMHgwMCwweGE0LDB4MjcsMHhjMywweDQyLDB4NjIsMHg5MiwweDI1LDB4YjAsMHgwMywweDNjLAotMHg2MSwweDBjLDB4NjMsMHgzNCwweDAwLDB4MDAsMHg2MiwweGEwLDB4ZDQsMHg0YywweDAwLDB4MDgsMHhjMCwweDAyLDB4ODIsMHgzNiwKLTB4MjIsMHg1MSwweDAwLDB4MGMsMHgxMCwweDQwLDB4ZWIsMHhhYywweGJkLDB4NGMsMHgwMCwweDA4LDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weGM2LDB4NGMsMHgwMCwweDA4LDB4MTIsMHgwMCwweDAyLDB4MjQsMHgxYSwweDU3LDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLAotMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4ZmYsMHhmZiwweDAyLDB4MzQsMHg4YywweDY1LDB4NjIsMHhhZSwweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsCi0weDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDEwLDB4MDMsMHgwMCwweDIxLDB4MTAsMHg0MywweDAwLAotMHg4MCwweDEwLDB4MDIsMHgwMCwweDIxLDB4MTAsMHg0MywweDAwLDB4ODAsMHgxMCwweDAyLDB4MDAsMHgyMSwweDEwLDB4NTMsMHgwMCwKLTB4NzQsMHg1MSwweDQzLDB4OGMsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHhjMywweGFmLDB4MDAsMHgwMCwweDQwLDB4YWMsCi0weDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDEwLDB4MDMsMHgwMCwweDIxLDB4MTAsMHg0MywweDAwLAotMHg4MCwweDEwLDB4MDIsMHgwMCwweDIxLDB4MTAsMHg0MywweDAwLDB4ODAsMHgxMCwweDAyLDB4MDAsMHgyMSwweDEwLDB4NTMsMHgwMCwKLTB4ZDQsMHg1MSwweDQzLDB4OGMsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHhjMywweGFmLDB4MDAsMHgwMCwweDQwLDB4YWMsCi0weDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDEwLDB4MDMsMHgwMCwweDIxLDB4MTAsMHg0MywweDAwLAotMHg4MCwweDEwLDB4MDIsMHgwMCwweDIxLDB4MTAsMHg0MywweDAwLDB4MDIsMHg4MCwweDA2LDB4M2MsMHg4MCwweDEwLDB4MDIsMHgwMCwKLTB4ZTAsMHg2NiwweGMzLDB4MjQsMHgyMSwweDEwLDB4NDMsMHgwMCwweDAwLDB4MDAsMHg0NCwweDhjLDB4YzAsMHgwMiwweDgyLDB4MzYsCi0weDAwLDB4MDAsMHhjNCwweGFmLDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgxMiwweDAwLDB4MDIsMHgyNCwweGM3LDB4NDIsMHhhMiwweGExLDB4NzcsMHg0YSwweDAwLDB4MDgsMHhjMywweDQyLDB4YTIsMHhhMSwKLTB4ODgsMHg3ZCwweDgyLDB4OTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMiwweGFmLDB4YzAsMHgwMiwweDgyLDB4MzYsCi0weDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDdhLDB4NDIsMHgwMCwweDBjLAotMHgyMSwweDIwLDB4MDAsMHgwMCwweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweDAwLDB4MDYsMHgzYywweDAwLDB4ZmYsMHhjNiwweDM0LDB4MDAsMHgwMCwweGM1LDB4OGYsCi0weDI0LDB4MjAsMHgwNiwweDAyLDB4ZTEsMHg1MCwweDAwLDB4MGMsMHgwMiwweDIyLDB4MDQsMHgwMCwweGMwLDB4MDIsMHg4MiwweDM2LAotMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDEwLDB4MDMsMHgwMCwKLTB4MjEsMHgxMCwweDQzLDB4MDAsMHg4MCwweDEwLDB4MDIsMHgwMCwweDIxLDB4MTAsMHg0MywweDAwLDB4MDIsMHg4MCwweDA3LDB4M2MsCi0weDgwLDB4MTAsMHgwMiwweDAwLDB4ZjAsMHg2NiwweGUzLDB4MjQsMHgyMSwweDEwLDB4NDMsMHgwMCwweDAwLDB4MDAsMHg0NCwweDhjLAotMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHhjNCwweGFmLDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDEwLDB4MDMsMHgwMCwweDIxLDB4MTAsMHg0MywweDAwLDB4ODAsMHgxMCwweDAyLDB4MDAsCi0weDIxLDB4MTAsMHg0MywweDAwLDB4MDIsMHg4MCwweDA2LDB4M2MsMHg4MCwweDEwLDB4MDIsMHgwMCwweGVjLDB4NjYsMHhjMywweDI0LAotMHgyMSwweDEwLDB4NDMsMHgwMCwweDAwLDB4MDAsMHg0NCwweDhjLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4YzQsMHhhZiwKLTB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgxMCwweDAzLDB4MDAsCi0weDIxLDB4MTAsMHg0MywweDAwLDB4ODAsMHgxMCwweDAyLDB4MDAsMHgyMSwweDEwLDB4NDMsMHgwMCwweDAyLDB4ODAsMHgwNCwweDNjLAotMHhlOCwweDY2LDB4ODMsMHgyNCwweDgwLDB4MTAsMHgwMiwweDAwLDB4MjEsMHgxMCwweDQzLDB4MDAsMHgwMCwweDAwLDB4NDQsMHg4YywKLTB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4YzQsMHhhZiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgxMCwweDAzLDB4MDAsMHgyMSwweDEwLDB4NDMsMHgwMCwweDgwLDB4MTAsMHgwMiwweDAwLAotMHgyMSwweDEwLDB4NDMsMHgwMCwweDAyLDB4ODAsMHgwNywweDNjLDB4ODAsMHgxMCwweDAyLDB4MDAsMHhlNCwweDY2LDB4ZTMsMHgyNCwKLTB4MjEsMHgxMCwweDQzLDB4MDAsMHgwMCwweDAwLDB4NDQsMHg4YywweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweGM0LDB4YWYsCi0weDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTAsMHgwMywweDAwLAotMHgyMSwweDEwLDB4NDMsMHgwMCwweDgwLDB4MTAsMHgwMiwweDAwLDB4MjEsMHgxMCwweDQzLDB4MDAsMHgwMiwweDgwLDB4MDQsMHgzYywKLTB4MDAsMHg2NywweDgzLDB4MjQsMHg4MCwweDEwLDB4MDIsMHgwMCwweDIxLDB4MTAsMHg0MywweDAwLDB4MDAsMHgwMCwweDQ0LDB4OGMsCi0weGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweGM0LDB4YWYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTAsMHgwMywweDAwLDB4MjEsMHgxMCwweDQzLDB4MDAsMHg4MCwweDEwLDB4MDIsMHgwMCwKLTB4MjEsMHgxMCwweDQzLDB4MDAsMHgwMiwweDgwLDB4MDcsMHgzYywweDgwLDB4MTAsMHgwMiwweDAwLDB4ZmMsMHg2NiwweGUzLDB4MjQsCi0weDIxLDB4MTAsMHg0MywweDAwLDB4MDAsMHgwMCwweDQ0LDB4OGMsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHhjNCwweGFmLAotMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDEwLDB4MDMsMHgwMCwKLTB4MjEsMHgxMCwweDQzLDB4MDAsMHg4MCwweDEwLDB4MDIsMHgwMCwweDIxLDB4MTAsMHg0MywweDAwLDB4MDIsMHg4MCwweDA2LDB4M2MsCi0weDgwLDB4MTAsMHgwMiwweDAwLDB4ZjgsMHg2NiwweGMzLDB4MjQsMHgyMSwweDEwLDB4NDMsMHgwMCwweDAwLDB4MDAsMHg0NCwweDhjLAotMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHhjNCwweGFmLDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDEwLDB4MDMsMHgwMCwweDIxLDB4MTAsMHg0MywweDAwLDB4ODAsMHgxMCwweDAyLDB4MDAsCi0weDIxLDB4MTAsMHg0MywweDAwLDB4MDIsMHg4MCwweDA0LDB4M2MsMHhmNCwweDY2LDB4ODMsMHgyNCwweDgwLDB4MTAsMHgwMiwweDAwLAotMHgyMSwweDEwLDB4NDMsMHgwMCwweDAwLDB4MDAsMHg0NCwweDhjLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4YzQsMHhhZiwKLTB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZGUsMHg0ZiwweDAwLDB4MGMsCi0weDAyLDB4MDAsMHgwNCwweDI0LDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGRlLDB4NGYsMHgwMCwweDBjLDB4MDEsMHgwMCwweDA0LDB4MjQsMHhjMCwweDAyLDB4ODIsMHgzNiwKLTB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4N2EsMHg0MiwweDAwLDB4MGMsCi0weDAxLDB4MDAsMHgwNCwweDI0LDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI1LDB4YjAsMHgwNSwweDNjLDB4MDEsMHgwMCwweDA2LDB4MjQsMHgwMSwweDgwLDB4MDIsMHgzYywKLTB4MDQsMHgzMCwweDg2LDB4MDAsMHhmMSwweDAyLDB4YTcsMHgzNCwweGVkLDB4MDIsMHhhNCwweDM0LDB4NmMsMHgzOSwweDQyLDB4MjQsCi0weDE4LDB4MDMsMHhhNSwweDM0LDB4MDgsMHgwMCwweDAzLDB4MjQsMHgwMCwweDAwLDB4YTIsMHhhYywweDAwLDB4MDAsMHhlMywweGEwLAotMHgwMCwweDAwLDB4ODAsMHhhMCwweDAwLDB4MDAsMHg4NiwweGEwLDB4MDAsMHgwMCwweDgwLDB4YTAsMHgwMCwweDAwLDB4ODYsMHhhMCwKLTB4MDAsMHgwMCwweDgwLDB4YTAsMHgwMCwweDAwLDB4ODYsMHhhMCwweDAwLDB4MDAsMHg4MCwweGEwLDB4MDAsMHgwMCwweDg2LDB4YTAsCi0weDAwLDB4MDAsMHg4MCwweGEwLDB4MDAsMHgwMCwweGUwLDB4YTAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMSwweDgwLDB4MDIsMHgzYywweDI1LDB4YjAsMHgwMywweDNjLDB4YzgsMHgzOSwweDQyLDB4MjQsMHgxOCwweDAzLDB4NjMsMHgzNCwKLTB4MDAsMHgwMCwweDYyLDB4YWMsMHgwMCwweDAwLDB4ODMsMHg5MCwweDMwLDB4MDAsMHgwMiwweDI0LDB4MDUsMHgwMCwweDYyLDB4MTAsCi0weDIxLDB4MjAsMHgwMCwweDAwLDB4MzEsMHgwMCwweDAyLDB4MjQsMHgwMiwweDAwLDB4NjIsMHgxMCwweDAxLDB4MDAsMHgwNCwweDI0LAotMHgwNywweDAwLDB4MDQsMHgyNCwweDViLDB4NGUsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDgwLDB4MDIsMHgzYywKLTB4MjUsMHhiMCwweDAzLDB4M2MsMHgwNCwweDNhLDB4NDIsMHgyNCwweDE4LDB4MDMsMHg2MywweDM0LDB4MDIsMHg4MCwweDA0LDB4M2MsCi0weDAwLDB4MDAsMHg2MiwweGFjLDB4MDgsMHgwMCwweGUwLDB4MDMsMHhjNCwweDdkLDB4ODAsMHhhYywweDAyLDB4ODAsMHgwMiwweDNjLAotMHgwOCwweDdiLDB4NDIsMHgyNCwweGMwLDB4MjAsMHgwNCwweDAwLDB4MjEsMHgyMCwweDgyLDB4MDAsMHgyMSwweDI4LDB4MDAsMHgwMCwKLTB4MDAsMHg2MCwweDA2LDB4NDAsMHgwMSwweDAwLDB4YzEsMHgzNCwweDAxLDB4MDAsMHgyMSwweDM4LDB4MDAsMHg2MCwweDgxLDB4NDAsCi0weDAwLDB4MDAsMHg4MiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOSwweDAwLDB4NDQsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwNCwweDAwLDB4NDMsMHg4YywweDIxLDB4MjgsMHg0MCwweDAwLDB4MDAsMHgwMCwweDQyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDYyLDB4YWMsMHgwNCwweDAwLDB4NDMsMHhhYywweDAwLDB4MDAsMHhhNSwweGFjLDB4MDQsMHgwMCwweGE1LDB4YWMsCi0weDAwLDB4NjAsMHg4NiwweDQwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4YTAsMHgwMCwweDIxLDB4MTgsMHg4MCwweDAwLAotMHhlOCwweGZmLDB4YmQsMHgyNywweDAxLDB4MDEsMHg2MiwweDJjLDB4MTAsMHgwMCwweGJmLDB4YWYsMHgwMSwweDAwLDB4MDQsMHgyNCwKLTB4MDEsMHgwMiwweDY1LDB4MmMsMHgwYSwweDAwLDB4NDAsMHgxNCwweDIxLDB4MzAsMHgwMCwweDAwLDB4MDIsMHgwMCwweDA0LDB4MjQsCi0weDA3LDB4MDAsMHhhMCwweDE0LDB4MDEsMHgwOCwweDYyLDB4MmMsMHgwNSwweDAwLDB4NDAsMHgxNCwweDAzLDB4MDAsMHgwNCwweDI0LAotMHgxMCwweDAwLDB4YmYsMHg4ZiwweDIxLDB4MTAsMHhjMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgxOCwweDAwLDB4YmQsMHgyNywKLTB4ODksMHg0ZSwweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDAsMHhiZiwweDhmLDB4MjEsMHgzMCwweDQwLDB4MDAsCi0weDIxLDB4MTAsMHhjMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgxOCwweDAwLDB4YmQsMHgyNywweDAyLDB4ODAsMHgwMywweDNjLAotMHgyMCwweDdiLDB4NjIsMHg4YywweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MDYsMHg0MCwKLTB4MDEsMHgwMCwweGMxLDB4MzQsMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLDB4MTAsMHgwMCwweDgzLDB4OGMsCi0weDAyLDB4ODAsMHgwMiwweDNjLDB4MDgsMHg3YiwweDQyLDB4MjQsMHhjMCwweDE4LDB4MDMsMHgwMCwweDIxLDB4MTgsMHg2MiwweDAwLAotMHgwMCwweDAwLDB4NjUsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg1LDB4YWMsMHgwNCwweDAwLDB4YTQsMHhhYywKLTB4MDAsMHgwMCwweDY0LDB4YWMsMHgwNCwweDAwLDB4ODMsMHhhYywweDAwLDB4NjAsMHg4NiwweDQwLDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgyNCwweDA0LDB4MDAsMHhmZiwweDAwLDB4ODQsMHgzMCwweGMwLDB4MTgsMHgwNCwweDAwLAotMHgyMSwweDE4LDB4NjQsMHgwMCwweDgwLDB4MTgsMHgwMywweDAwLDB4MjEsMHgxOCwweDY0LDB4MDAsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4NjgsMHgxNSwweDQyLDB4MjQsMHg4MCwweDE4LDB4MDMsMHgwMCwweDIxLDB4MTgsMHg2MiwweDAwLDB4NzgsMHg1MSwweDY0LDB4OGMsCi0weGZmLDB4ZjEsMHgwMiwweDI0LDB4MjQsMHgyMCwweDgyLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDc4LDB4NTEsMHg2NCwweGFjLAotMHgwMiwweDI0LDB4MDQsMHgwMCwweGZmLDB4MDAsMHg4NCwweDMwLDB4YzAsMHgxOCwweDA0LDB4MDAsMHgyMSwweDE4LDB4NjQsMHgwMCwKLTB4ODAsMHgxOCwweDAzLDB4MDAsMHgyMSwweDE4LDB4NjQsMHgwMCwweDAyLDB4ODAsMHgwMiwweDNjLDB4NjgsMHgxNSwweDQyLDB4MjQsCi0weDgwLDB4MTgsMHgwMywweDAwLDB4MjEsMHgxOCwweDYyLDB4MDAsMHg3OCwweDUxLDB4NjQsMHg4YywweGZmLDB4ZjEsMHgwMiwweDI0LAotMHgyNCwweDIwLDB4ODIsMHgwMCwweDAwLDB4MDIsMHg4NCwweDM0LDB4MDgsMHgwMCwweGUwLDB4MDMsMHg3OCwweDUxLDB4NjQsMHhhYywKLTB4ZTAsMHhmZiwweGJkLDB4MjcsMHgxMCwweDAwLDB4YjAsMHhhZiwweGMwLDB4ODAsMHgwNCwweDAwLDB4MjEsMHg4MCwweDA0LDB4MDIsCi0weDgwLDB4ODAsMHgxMCwweDAwLDB4MjEsMHg4MCwweDA0LDB4MDIsMHgwMiwweDgwLDB4MDIsMHgzYywweDY4LDB4MTUsMHg0MiwweDI0LAotMHg4MCwweDgwLDB4MTAsMHgwMCwweDIxLDB4ODAsMHgwMiwweDAyLDB4MWMsMHgwMCwweGJmLDB4YWYsMHgxOCwweDAwLDB4YjIsMHhhZiwKLTB4MTQsMHgwMCwweGIxLDB4YWYsMHg3OCwweDUxLDB4MDUsMHg4ZSwweGZmLDB4MWYsMHgwMiwweDNjLDB4MjUsMHhiMCwweDEyLDB4M2MsCi0weGZmLDB4ZmYsMHg0MiwweDM0LDB4NzAsMHg1MSwweDAyLDB4YWUsMHg4NCwweDAxLDB4NDMsMHgzNiwweGY4LDB4ZmYsMHgwMiwweDI0LAotMHgwMCwweDAwLDB4NjYsMHg4YywweDI0LDB4MjgsMHhhMiwweDAwLDB4ZmYsMHhmZSwweDAyLDB4MjQsMHgyNCwweDI4LDB4YTIsMHgwMCwKLTB4ZmYsMHhlZiwweDAzLDB4MjQsMHgyNCwweDI4LDB4YTMsMHgwMCwweDc0LDB4NTEsMHgwNiwweGFlLDB4NzgsMHg1MSwweDA1LDB4YWUsCi0weGNlLDB4MGQsMHgwMCwweDBjLDB4MjEsMHg4OCwweDgwLDB4MDAsMHg3YSwweDUxLDB4MDIsMHg5MiwweDIxLDB4ODgsMHgzMiwweDAyLAotMHgxYywweDAwLDB4YmYsMHg4ZiwweDYwLDB4MDEsMHgyMiwweGEyLDB4MTgsMHgwMCwweGIyLDB4OGYsMHg2NCwweDUxLDB4MDAsMHhhZSwKLTB4NDgsMHg1MSwweDAwLDB4YWUsMHg0YywweDUxLDB4MDAsMHhhZSwweDUwLDB4NTEsMHgwMCwweGFlLDB4NTQsMHg1MSwweDAwLDB4YWUsCi0weDU4LDB4NTEsMHgwMCwweGFlLDB4NWMsMHg1MSwweDAwLDB4YWUsMHg2MCwweDUxLDB4MDAsMHhhZSwweDE0LDB4MDAsMHhiMSwweDhmLAotMHgxMCwweDAwLDB4YjAsMHg4ZiwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjAsMHgwMCwweGJkLDB4MjcsMHhmZiwweDAwLDB4YTUsMHgzMCwKLTB4YzAsMHgxMCwweDA1LDB4MDAsMHgyMSwweDEwLDB4NDUsMHgwMCwweDgwLDB4MTAsMHgwMiwweDAwLDB4MjEsMHgxMCwweDQ1LDB4MDAsCi0weDAyLDB4ODAsMHgwMywweDNjLDB4NjgsMHgxNSwweDYzLDB4MjQsMHg4MCwweDEwLDB4MDIsMHgwMCwweDIxLDB4MTAsMHg0MywweDAwLAotMHg3OCwweDUxLDB4NDMsMHg4YywweDI1LDB4YjAsMHgwNSwweDNjLDB4ZmYsMHgwMCwweGM2LDB4MzAsMHgyMSwweDMwLDB4YzUsMHgwMCwKLTB4YWYsMHgwMSwweGMyLDB4OTAsMHgwNywweDAwLDB4NjMsMHgzMCwweDgwLDB4MTgsMHgwMywweDAwLDB4MjEsMHgxOCwweDY1LDB4MDAsCi0weGZmLDB4MDAsMHg4OCwweDMwLDB4ZmYsMHgwMCwweDQ5LDB4MzAsMHg4NCwweDAxLDB4NjYsMHg4YywweDIxLDB4NTAsMHgwMCwweDAwLAotMHgyMSwweDU4LDB4MDAsMHgwMCwweDJiLDB4MDAsMHgyMCwweDExLDB4MjEsMHgyMCwweDAwLDB4MDEsMHgyYiwweDAwLDB4YzAsMHgxMCwKLTB4MmIsMHgxMCwweDA5LDB4MDEsMHgyMSwweDI4LDB4MDAsMHgwMCwweDNlLDB4NGYsMHgwMCwweDA4LDB4MDEsMHgwMCwweDA3LDB4MjQsCi0weGZmLDB4MDAsMHg2NSwweDMwLDB4MWQsMHgwMCwweGEyLDB4MmMsMHgwNywweDAwLDB4NDAsMHgxMCwweGZmLDB4ZmYsMHgwMiwweDI1LAotMHgwNCwweDEwLDB4YTcsMHgwMCwweDI0LDB4MTAsMHg0NiwweDAwLDB4ZjksMHhmZiwweDQwLDB4MTAsMHgwMSwweDAwLDB4YTMsMHgyNCwKLTB4MjEsMHg1OCwweGEwLDB4MDAsMHhmZiwweGZmLDB4MDIsMHgyNSwweGZmLDB4MDAsMHg0NSwweDMwLDB4MmIsMHgxOCwweGFiLDB4MDAsCi0weDBmLDB4MDAsMHg2MCwweDE0LDB4MmIsMHgxMCwweDQ5LDB4MDEsMHgwMSwweDAwLDB4MDQsMHgyNCwweDA0LDB4MTAsMHhhNCwweDAwLAotMHgyNCwweDEwLDB4NDYsMHgwMCwweGZmLDB4ZmYsMHhhNywweDI0LDB4MDQsMHgwMCwweDQwLDB4MTAsMHgwMSwweDAwLDB4NDMsMHgyNSwKLTB4MTcsMHgwMCwweDQ5LDB4MTEsMHhmZiwweDAwLDB4NmEsMHgzMCwweDIxLDB4NDAsMHhhMCwweDAwLDB4ZmYsMHgwMCwweGU1LDB4MzAsCi0weDJiLDB4MTAsMHhhYiwweDAwLDB4ZjYsMHhmZiwweDQwLDB4MTAsMHgwNCwweDEwLDB4YTQsMHgwMCwweDJiLDB4MTAsMHg0OSwweDAxLAotMHgwOCwweDAwLDB4NDAsMHgxMCwweDIxLDB4MjAsMHgwMCwweDAxLDB4MjMsMHgxMCwweDJhLDB4MDEsMHgyYSwweDEwLDB4NjIsMHgwMSwKLTB4MDQsMHgwMCwweDQwLDB4MTQsMHgyMSwweDIwLDB4MDAsMHgwMCwweDIzLDB4MTAsMHg2OSwweDAxLDB4MjEsMHgxMCwweDRhLDB4MDAsCi0weGZmLDB4MDAsMHg0NCwweDMwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4ODAsMHgwMCwweGZkLDB4ZmYsMHg0MCwweDE0LAotMHgyMSwweDIwLDB4MDAsMHgwMCwweDIzLDB4MTAsMHgwOSwweDAxLDB4NWYsMHg0ZiwweDAwLDB4MDgsMHhmZiwweDAwLDB4NDQsMHgzMCwKLTB4MjEsMHgyMCwweDAwLDB4MDEsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHg4MCwweDAwLDB4ZmYsMHgwMCwweDg0LDB4MzAsCi0weGMwLDB4MTAsMHgwNCwweDAwLDB4MjEsMHgxMCwweDQ0LDB4MDAsMHg4MCwweDEwLDB4MDIsMHgwMCwweDIxLDB4MTAsMHg0NCwweDAwLAotMHgwMiwweDgwLDB4MDMsMHgzYywweDY4LDB4MTUsMHg2MywweDI0LDB4ODAsMHgxMCwweDAyLDB4MDAsMHgyMSwweDEwLDB4NDMsMHgwMCwKLTB4MjUsMHhiMCwweDA2LDB4M2MsMHg3OCwweDUxLDB4NDMsMHg4YywweGZmLDB4MDAsMHhhNSwweDMwLDB4MjEsMHgyMCwweDg2LDB4MDAsCi0weDIxLDB4MjgsMHhhNiwweDAwLDB4NjAsMHgwMSwweDgyLDB4OTAsMHhhZiwweDAxLDB4YTQsMHg5MCwweDA3LDB4MDAsMHg2MywweDMwLAotMHg4MCwweDE4LDB4MDMsMHgwMCwweDIxLDB4MTgsMHg2NiwweDAwLDB4ZmYsMHgwMCwweDQ4LDB4MzAsMHhmZiwweDAwLDB4ODksMHgzMCwKLTB4ODQsMHgwMSwweDY2LDB4OGMsMHgyMSwweDUwLDB4MDAsMHgwMCwweDIxLDB4NTgsMHgwMCwweDAwLDB4MmIsMHgwMCwweDIwLDB4MTEsCi0weDIxLDB4MjAsMHgwMCwweDAxLDB4MmIsMHgwMCwweGMwLDB4MTAsMHgyYiwweDEwLDB4MDksMHgwMSwweDIxLDB4MjgsMHgwMCwweDAwLAotMHg4YywweDRmLDB4MDAsMHgwOCwweDAxLDB4MDAsMHgwNywweDI0LDB4ZmYsMHgwMCwweDY1LDB4MzAsMHgxZCwweDAwLDB4YTIsMHgyYywKLTB4MDcsMHgwMCwweDQwLDB4MTAsMHhmZiwweGZmLDB4MDIsMHgyNSwweDA0LDB4MTAsMHhhNywweDAwLDB4MjQsMHgxMCwweDQ2LDB4MDAsCi0weGY5LDB4ZmYsMHg0MCwweDEwLDB4MDEsMHgwMCwweGEzLDB4MjQsMHgyMSwweDU4LDB4YTAsMHgwMCwweGZmLDB4ZmYsMHgwMiwweDI1LAotMHhmZiwweDAwLDB4NDUsMHgzMCwweDJiLDB4MTgsMHhhYiwweDAwLDB4MGYsMHgwMCwweDYwLDB4MTQsMHgyYiwweDEwLDB4NDksMHgwMSwKLTB4MDEsMHgwMCwweDA0LDB4MjQsMHgwNCwweDEwLDB4YTQsMHgwMCwweDI0LDB4MTAsMHg0NiwweDAwLDB4ZmYsMHhmZiwweGE3LDB4MjQsCi0weDA0LDB4MDAsMHg0MCwweDEwLDB4MDEsMHgwMCwweDQzLDB4MjUsMHgxNywweDAwLDB4NDksMHgxMSwweGZmLDB4MDAsMHg2YSwweDMwLAotMHgyMSwweDQwLDB4YTAsMHgwMCwweGZmLDB4MDAsMHhlNSwweDMwLDB4MmIsMHgxMCwweGFiLDB4MDAsMHhmNiwweGZmLDB4NDAsMHgxMCwKLTB4MDQsMHgxMCwweGE0LDB4MDAsMHgyYiwweDEwLDB4NDksMHgwMSwweDA4LDB4MDAsMHg0MCwweDEwLDB4MjEsMHgyMCwweDAwLDB4MDEsCi0weDIzLDB4MTAsMHgyYSwweDAxLDB4MmEsMHgxMCwweDYyLDB4MDEsMHgwNCwweDAwLDB4NDAsMHgxNCwweDIxLDB4MjAsMHgwMCwweDAwLAotMHgyMywweDEwLDB4NjksMHgwMSwweDIxLDB4MTAsMHg0YSwweDAwLDB4ZmYsMHgwMCwweDQ0LDB4MzAsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MjEsMHgxMCwweDgwLDB4MDAsMHhmZCwweGZmLDB4NDAsMHgxNCwweDIxLDB4MjAsMHgwMCwweDAwLDB4MjMsMHgxMCwweDA5LDB4MDEsCi0weGFkLDB4NGYsMHgwMCwweDA4LDB4ZmYsMHgwMCwweDQ0LDB4MzAsMHgyMSwweDIwLDB4MDAsMHgwMSwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgyMSwweDEwLDB4ODAsMHgwMCwweGUwLDB4ZmYsMHhiZCwweDI3LDB4MDIsMHg4MCwweDAyLDB4M2MsMHgxMCwweDAwLDB4YjAsMHhhZiwKLTB4NjgsMHgxNSwweDUwLDB4MjQsMHgxOCwweDAwLDB4YjIsMHhhZiwweDE0LDB4MDAsMHhiMSwweGFmLDB4MWMsMHgwMCwweGJmLDB4YWYsCi0weDIxLDB4ODgsMHgwMCwweDAwLDB4MjEsMHg5MCwweDAwLDB4MDIsMHhlZSwweDRlLDB4MDAsMHgwYywweDIxLDB4MjAsMHgyMCwweDAyLAotMHg3YSwweDUxLDB4MDIsMHg5MiwweDIxLDB4MjgsMHgwMCwweDAwLDB4ODAsMHgxMCwweDAyLDB4MDAsMHgyMSwweDEwLDB4NTIsMHgwMCwKLTB4ZWMsMHg0NCwweDQ0LDB4OGMsMHg2MCwweDQ1LDB4NDMsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MjEsMHgxOCwweDY0LDB4MDAsCi0weDQyLDB4MTgsMHgwMywweDAwLDB4NDQsMHg1MSwweDAzLDB4YWUsMHgyMSwweDEwLDB4MDUsMHgwMiwweDAxLDB4MDAsMHhhNSwweDI0LAotMHgxZCwweDAwLDB4YTMsMHgyOCwweGI2LDB4NTEsMHg0MCwweGEwLDB4N2MsMHg1MSwweDQwLDB4YTAsMHhmYSwweGZmLDB4NjAsMHgxNCwKLTB4OTksMHg1MSwweDQwLDB4YTAsMHgwMSwweDAwLDB4MzEsMHgyNiwweDIwLDB4MDAsMHgyMiwweDJhLDB4ZDQsMHg1MSwweDAwLDB4YWUsCi0weGU5LDB4ZmYsMHg0MCwweDE0LDB4OTQsMHgwMCwweDEwLDB4MjYsMHgxYywweDAwLDB4YmYsMHg4ZiwweDE4LDB4MDAsMHhiMiwweDhmLAotMHgxNCwweDAwLDB4YjEsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMCwweDAwLDB4YmQsMHgyNywKLTB4YzgsMHhmZiwweGJkLDB4MjcsMHgwMiwweDgwLDB4MDIsMHgzYywweDMwLDB4MDAsMHhiZSwweGFmLDB4MjgsMHgwMCwweGI2LDB4YWYsCi0weDY4LDB4MTUsMHg0NiwweDI0LDB4MzQsMHgwMCwweGJmLDB4YWYsMHgyYywweDAwLDB4YjcsMHhhZiwweDI0LDB4MDAsMHhiNSwweGFmLAotMHgyMCwweDAwLDB4YjQsMHhhZiwweDFjLDB4MDAsMHhiMywweGFmLDB4MTgsMHgwMCwweGIyLDB4YWYsMHgxNCwweDAwLDB4YjEsMHhhZiwKLTB4MTAsMHgwMCwweGIwLDB4YWYsMHg4YywweDY1LDB4YzIsMHg4YywweGZmLDB4MDAsMHg4ZCwweDMwLDB4ZmYsMHgwMCwweDAzLDB4MjQsCi0weGZmLDB4ZmYsMHg0MiwweDM4LDB4MjEsMHhmMCwweDAwLDB4MDAsMHhmZiwweGZmLDB4MDQsMHgzNCwweDBhLDB4ZjAsMHg2MiwweDAwLAotMHg4YywweDY1LDB4YzQsMHhhYywweGIwLDB4MDAsMHhhMCwweDExLDB4MDgsMHgwMCwweDE2LDB4MjQsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4YjgsMHg5MCwweDQ1LDB4MjQsMHg5MCwweDQ0LDB4YzQsMHgyNCwweGZmLDB4NGYsMHgwMCwweDA4LDB4MjEsMHg4OCwweDAwLDB4MDAsCi0weDAxLDB4MDAsMHgzMSwweDI2LDB4MDAsMHgwMCwweDgyLDB4YTAsMHgxZCwweDAwLDB4MjIsMHgyYSwweDBiLDB4MDAsMHg0MCwweDEwLAotMHgwMSwweDAwLDB4ODQsMHgyNCwweDIxLDB4MTAsMHgyNSwweDAyLDB4MDAsMHgwMCwweDQyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4ZjcsMHhmZiwweDQwLDB4MTAsMHhmZCwweGZmLDB4NDMsMHgyNCwweDAxLDB4MDAsMHgzMSwweDI2LDB4MWQsMHgwMCwweDIyLDB4MmEsCi0weDAwLDB4MDAsMHg4MywweGEwLDB4ZjcsMHhmZiwweDQwLDB4MTQsMHgwMSwweDAwLDB4ODQsMHgyNCwweDAyLDB4ODAsMHgwMiwweDNjLAotMHg2OCwweDE1LDB4NGEsMHgyNCwweDAyLDB4ODAsMHgwMywweDNjLDB4MDIsMHg4MCwweDAyLDB4M2MsMHg1MCwweDhlLDB4NmMsMHgyNCwKLTB4ZDgsMHg4ZCwweDRiLDB4MjQsMHgyMSwweDg4LDB4MDAsMHgwMCwweDIxLDB4NDgsMHgwMCwweDAwLDB4MjEsMHgzMCwweDAwLDB4MDAsCi0weDIxLDB4NDAsMHgyYSwweDAxLDB4MjEsMHgzOCwweDJjLDB4MDEsMHgyMSwweDEwLDB4ZTYsMHgwMCwweDkxLDB4MDAsMHg0NCwweDkwLAotMHgwMCwweDAwLDB4NDUsMHg5MCwweDIxLDB4MTgsMHgwNiwweDAxLDB4MDEsMHgwMCwweGM2LDB4MjQsMHgwNSwweDAwLDB4YzIsMHgyOCwKLTB4YzUsMHg0MywweDY0LDB4YTAsMHhmOCwweGZmLDB4NDAsMHgxNCwweDM0LDB4NDMsMHg2NSwweGEwLDB4MjEsMHgxMCwweDJiLDB4MDIsCi0weDFkLDB4MDAsMHg0NCwweDkwLDB4MDAsMHgwMCwweDQ1LDB4OTAsMHgyMSwweDE4LDB4MmEsMHgwMiwweDAxLDB4MDAsMHgzMSwweDI2LAotMHgxZCwweDAwLDB4MjIsMHgyYSwweDczLDB4NDQsMHg2NCwweGEwLDB4NTYsMHg0NCwweDY1LDB4YTAsMHhlYiwweGZmLDB4NDAsMHgxNCwKLTB4MDUsMHgwMCwweDI5LDB4MjUsMHhhNiwweDAwLDB4YTAsMHgxMSwweDAyLDB4ODAsMHgwMiwweDNjLDB4NjgsMHgxNSwweDQ4LDB4MjQsCi0weDAyLDB4ODAsMHgwMywweDNjLDB4MDIsMHg4MCwweDAyLDB4M2MsMHg0YywweDkxLDB4NjksMHgyNCwweGQ4LDB4OTAsMHg0NywweDI0LAotMHgyMSwweDg4LDB4MDAsMHgwMCwweDgwLDB4MTgsMHgxMSwweDAwLDB4MjEsMHgxMCwweDY5LDB4MDAsMHgyMSwweDIwLDB4NjcsMHgwMCwKLTB4MDAsMHgwMCwweDQ2LDB4OGMsMHgwMCwweDAwLDB4ODUsMHg4YywweDAxLDB4MDAsMHgzMSwweDI2LDB4MjEsMHgxOCwweDY4LDB4MDAsCi0weDA0LDB4MDAsMHgyMiwweDJhLDB4ZWMsMHg0NCwweDY1LDB4YWMsMHhmNiwweGZmLDB4NDAsMHgxNCwweDYwLDB4NDUsMHg2NiwweGFjLAotMHgwMiwweDgwLDB4MDIsMHgzYywweDY4LDB4MTUsMHg0OSwweDI0LDB4MDIsMHg4MCwweDAzLDB4M2MsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4NGMsMHg5MSwweDY4LDB4MjQsMHhkOCwweDkwLDB4NDcsMHgyNCwweDA0LDB4MDAsMHgxMSwweDI0LDB4ODAsMHgyMCwweDExLDB4MDAsCi0weDIxLDB4MTAsMHg4OCwweDAwLDB4MjEsMHgzMCwweDg3LDB4MDAsMHgwMCwweDAwLDB4NDUsMHg4YywweDAwLDB4MDAsMHhjMywweDhjLAotMHgwMSwweDAwLDB4MzEsMHgyNiwweDIxLDB4MjAsMHg4OSwweDAwLDB4ODIsMHgyOCwweDA1LDB4MDAsMHg4MiwweDE4LDB4MDMsMHgwMCwKLTB4MWQsMHgwMCwweDIyLDB4MmEsMHhlYywweDQ0LDB4ODMsMHhhYywweGY0LDB4ZmYsMHg0MCwweDE0LDB4NjAsMHg0NSwweDg1LDB4YWMsCi0weDAyLDB4ODAsMHgwMiwweDNjLDB4NjgsMHgxNSwweDU1LDB4MjQsMHgyMSwweDg4LDB4MDAsMHgwMCwweDIxLDB4YjgsMHhhMCwweDAyLAotMHgyMSwweGEwLDB4MDAsMHgwMCwweDVhLDB4NTAsMHgwMCwweDA4LDB4MjEsMHg5MCwweGEwLDB4MDIsMHgwMSwweDAwLDB4MzEsMHgyNiwKLTB4MjAsMHgwMCwweDIyLDB4MmEsMHg5NCwweDAwLDB4NTIsMHgyNiwweDM4LDB4MDAsMHg0MCwweDEwLDB4OTQsMHgwMCwweDk0LDB4MjYsCi0weDc4LDB4NTEsMHg0NCwweDhlLDB4MDEsMHgwMCwweDAzLDB4MjQsMHgwMiwweDEzLDB4MDQsMHgwMCwweDAxLDB4MDAsMHg1MywweDMwLAotMHhmNiwweGZmLDB4NjMsMHgxNiwweDA3LDB4MDAsMHg4MiwweDMwLDB4MjUsMHhiMCwweDAzLDB4M2MsMHg4MCwweDEwLDB4MDIsMHgwMCwKLTB4MjEsMHgxMCwweDQzLDB4MDAsMHg4NCwweDAxLDB4NDUsMHg4YywweDcwLDB4NTEsMHg0MywweDhlLDB4MjEsMHgyMCwweDIwLDB4MDIsCi0weDI0LDB4MjgsMHhhMywweDAwLDB4Y2UsMHgwZCwweDAwLDB4MGMsMHg3NCwweDUxLDB4NDUsMHhhZSwweDdhLDB4NTEsMHg0NCwweDkyLAotMHg1YywweDBkLDB4MDAsMHgwYywweGZmLDB4MDAsMHgyNSwweDMyLDB4N2EsMHg1MSwweDUwLDB4OTIsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjEsMHgyMCwweDAwLDB4MDIsMHg2MywweDBkLDB4MDAsMHgwYywweDgwLDB4ODAsMHgxMCwweDAwLDB4MjEsMHg4MCwweDE3LDB4MDIsCi0weDQ4LDB4NTEsMHg0MCwweGFlLDB4NGMsMHg1MSwweDQwLDB4YWUsMHg1MCwweDUxLDB4NDAsMHhhZSwweDU0LDB4NTEsMHg0MCwweGFlLAotMHg1OCwweDUxLDB4NDAsMHhhZSwweDVjLDB4NTEsMHg0MCwweGFlLDB4NjAsMHg1MSwweDQwLDB4YWUsMHg2NCwweDUxLDB4NDAsMHhhZSwKLTB4ZWMsMHg0NCwweDA0LDB4OGUsMHg2MCwweDQ1LDB4MDMsMHg4ZSwweDI2LDB4MTAsMHg1MywweDAwLDB4MjEsMHgzMCwweDAwLDB4MDAsCi0weDIxLDB4MTgsMHg2NCwweDAwLDB4NDIsMHgxOCwweDAzLDB4MDAsMHgwNCwweDAwLDB4MDQsMHgyNCwweDBhLDB4YjAsMHg4MiwweDAwLAotMHg0NCwweDUxLDB4NDMsMHhhZSwweDIxLDB4MjAsMHg5NSwweDAyLDB4MjEsMHgxMCwweDg2LDB4MDAsMHgwMSwweDAwLDB4YzYsMHgyNCwKLTB4MWQsMHgwMCwweGMzLDB4MjgsMHhiNiwweDUxLDB4NDAsMHhhMCwweDdjLDB4NTEsMHg0MCwweGEwLDB4ZmEsMHhmZiwweDYwLDB4MTQsCi0weDk5LDB4NTEsMHg0MCwweGEwLDB4MDEsMHgwMCwweDMxLDB4MjYsMHgyMCwweDAwLDB4MjIsMHgyYSwweGQ0LDB4NTEsMHg4MCwweGFjLAotMHg5NCwweDAwLDB4NTIsMHgyNiwweGNhLDB4ZmYsMHg0MCwweDE0LDB4OTQsMHgwMCwweDk0LDB4MjYsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4ODAsMHgwMSwweDQyLDB4MzQsMHgwMCwweDAwLDB4NTYsMHhhMCwweDAzLDB4MDAsMHhjMCwweDE3LDB4MDIsMHg4MCwweDAzLDB4M2MsCi0weDY4LDB4MTUsMHg2MiwweDI0LDB4OGMsMHg2NSwweDQwLDB4YWMsMHgzNCwweDAwLDB4YmYsMHg4ZiwweDMwLDB4MDAsMHhiZSwweDhmLAotMHgyYywweDAwLDB4YjcsMHg4ZiwweDI4LDB4MDAsMHhiNiwweDhmLDB4MjQsMHgwMCwweGI1LDB4OGYsMHgyMCwweDAwLDB4YjQsMHg4ZiwKLTB4MWMsMHgwMCwweGIzLDB4OGYsMHgxOCwweDAwLDB4YjIsMHg4ZiwweDE0LDB4MDAsMHhiMSwweDhmLDB4MTAsMHgwMCwweGIwLDB4OGYsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MzgsMHgwMCwweGJkLDB4MjcsMHgwMiwweDgwLDB4MDIsMHgzYywweGI4LDB4OTAsMHg0NSwweDI0LAotMHg5MCwweDQ0LDB4YzQsMHgyNCwweDIxLDB4ODgsMHgwMCwweDAwLDB4MjEsMHgxMCwweDI1LDB4MDIsMHgwMCwweDAwLDB4NDMsMHg5MCwKLTB4MDEsMHgwMCwweDMxLDB4MjYsMHgxZCwweDAwLDB4MjIsMHgyYSwweDAwLDB4MDAsMHg4MywweGEwLDB4ZmEsMHhmZiwweDQwLDB4MTQsCi0weDAxLDB4MDAsMHg4NCwweDI0LDB4MDIsMHg4MCwweDAyLDB4M2MsMHg2OCwweDE1LDB4NGEsMHgyNCwweDAyLDB4ODAsMHgwMywweDNjLAotMHgwMiwweDgwLDB4MDIsMHgzYywweDc0LDB4OGYsMHg2YywweDI0LDB4MTQsMHg4ZSwweDRiLDB4MjQsMHgyMSwweDg4LDB4MDAsMHgwMCwKLTB4MjEsMHg0OCwweDAwLDB4MDAsMHgyMSwweDMwLDB4MDAsMHgwMCwweDIxLDB4NDAsMHgyYSwweDAxLDB4MjEsMHgzOCwweDJjLDB4MDEsCi0weDIxLDB4MTAsMHhlNiwweDAwLDB4OTEsMHgwMCwweDQ0LDB4OTAsMHgwMCwweDAwLDB4NDUsMHg5MCwweDIxLDB4MTgsMHgwNiwweDAxLAotMHgwMSwweDAwLDB4YzYsMHgyNCwweDA1LDB4MDAsMHhjMiwweDI4LDB4YzUsMHg0MywweDY0LDB4YTAsMHhmOCwweGZmLDB4NDAsMHgxNCwKLTB4MzQsMHg0MywweDY1LDB4YTAsMHgyMSwweDEwLDB4MmIsMHgwMiwweDFkLDB4MDAsMHg0NCwweDkwLDB4MDAsMHgwMCwweDQ1LDB4OTAsCi0weDIxLDB4MTgsMHgyYSwweDAyLDB4MDEsMHgwMCwweDMxLDB4MjYsMHgxZCwweDAwLDB4MjIsMHgyYSwweDczLDB4NDQsMHg2NCwweGEwLAotMHg1NiwweDQ0LDB4NjUsMHhhMCwweGViLDB4ZmYsMHg0MCwweDE0LDB4MDUsMHgwMCwweDI5LDB4MjUsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4NjgsMHgxNSwweDQ5LDB4MjQsMHgwMiwweDgwLDB4MDMsMHgzYywweDAyLDB4ODAsMHgwMiwweDNjLDB4NGMsMHg5MSwweDY4LDB4MjQsCi0weGQ4LDB4OTAsMHg0NywweDI0LDB4MjEsMHg4OCwweDAwLDB4MDAsMHg4MCwweDE4LDB4MTEsMHgwMCwweDIxLDB4MTAsMHg2OCwweDAwLAotMHgyMSwweDIwLDB4NjcsMHgwMCwweDAwLDB4MDAsMHg0NiwweDhjLDB4MDAsMHgwMCwweDg1LDB4OGMsMHgwMSwweDAwLDB4MzEsMHgyNiwKLTB4MjEsMHgxOCwweDY5LDB4MDAsMHgxZCwweDAwLDB4MjIsMHgyYSwweGVjLDB4NDQsMHg2NSwweGFjLDB4ZjYsMHhmZiwweDQwLDB4MTQsCi0weDYwLDB4NDUsMHg2NiwweGFjLDB4NGYsMHg1MCwweDAwLDB4MDgsMHgwMiwweDgwLDB4MDIsMHgzYywweGQ4LDB4ZmYsMHhiZCwweDI3LAotMHhmZiwweGZmLDB4ODQsMHgzMCwweDE4LDB4MDAsMHhiMiwweGFmLDB4ZjAsMHgwMSwweDkyLDB4MzAsMHgwMiwweDkxLDB4MTIsMHgwMCwKLTB4MTQsMHgwMCwweGIxLDB4YWYsMHhjMCwweDg4LDB4MTIsMHgwMCwweDIxLDB4ODgsMHgzMiwweDAyLDB4ODAsMHg4OCwweDExLDB4MDAsCi0weDIxLDB4ODgsMHgzMiwweDAyLDB4MDIsMHg4MCwweDAyLDB4M2MsMHg2OCwweDE1LDB4NDIsMHgyNCwweDgwLDB4ODgsMHgxMSwweDAwLAotMHgyMSwweDg4LDB4MjIsMHgwMiwweDIwLDB4MDAsMHhiZiwweGFmLDB4MWMsMHgwMCwweGIzLDB4YWYsMHgxMCwweDAwLDB4YjAsMHhhZiwKLTB4NzgsMHg1MSwweDMwLDB4OGUsMHgwMCwweDAyLDB4ODIsMHgzMCwweGZmLDB4ZmUsMHgwMywweDI0LDB4MmIsMHgxMCwweDAyLDB4MDAsCi0weDAwLDB4MTAsMHgxMCwweDM2LDB4MjQsMHg4MCwweDAzLDB4MDIsMHgwMCwweDEyLDB4MDIsMHgwMCwweDI1LDB4ODAsMHgwMiwweDAyLAotMHg3MCwweDUxLDB4MjUsMHhhZSwweDc4LDB4NTEsMHgzMCwweGFlLDB4YTAsMHgwZSwweDAwLDB4MGMsMHgyMSwweDk4LDB4YTAsMHgwMCwKLTB4ZjgsMHhmZiwweDAzLDB4MjQsMHgyNCwweDgwLDB4MDMsMHgwMiwweDA3LDB4MDAsMHg0MiwweDMwLDB4MjUsMHg4MCwweDAyLDB4MDIsCi0weDA3LDB4MDAsMHgwMywweDMyLDB4MjUsMHhiMCwweDAyLDB4M2MsMHg4MCwweDE4LDB4MDMsMHgwMCwweDc4LDB4NTEsMHgzMCwweGFlLAotMHgyMSwweDE4LDB4NjIsMHgwMCwweDg0LDB4MDEsMHg2MiwweDhjLDB4MjEsMHgyMCwweDQwLDB4MDIsMHgyNCwweDEwLDB4NTMsMHgwMCwKLTB4Y2UsMHgwZCwweDAwLDB4MGMsMHg3NCwweDUxLDB4MjIsMHhhZSwweDdhLDB4NTEsMHgyNCwweDkyLDB4MjEsMHgyOCwweDQwLDB4MDIsCi0weDIwLDB4MDAsMHhiZiwweDhmLDB4MWMsMHgwMCwweGIzLDB4OGYsMHgxOCwweDAwLDB4YjIsMHg4ZiwweDE0LDB4MDAsMHhiMSwweDhmLAotMHgxMCwweDAwLDB4YjAsMHg4ZiwweDVjLDB4MGQsMHgwMCwweDA4LDB4MjgsMHgwMCwweGJkLDB4MjcsMHhlZSwweDRlLDB4MDAsMHgwOCwKLTB4ZmYsMHgwMCwweDg0LDB4MzAsMHgwMiwweDgwLDB4MDIsMHgzYywweDY4LDB4MTUsMHg0MywweDI0LDB4MWYsMHgwMCwweDA0LDB4MjQsCi0weDc4LDB4NTEsMHg2MiwweDhjLDB4ZmYsMHhmZiwweDg0LDB4MjQsMHgwMCwweDEwLDB4NDIsMHgzNCwweDc4LDB4NTEsMHg2MiwweGFjLAotMHhmYiwweGZmLDB4ODEsMHgwNCwweDk0LDB4MDAsMHg2MywweDI0LDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4NzgsMHhmZiwweGJkLDB4MjcsMHg2MCwweDAwLDB4YjAsMHhhZiwweDI1LDB4YjAsMHgxMCwweDNjLDB4NzAsMHgwMCwweGI0LDB4YWYsCi0weGM0LDB4MDIsMHgxNCwweDM2LDB4MDAsMHgwMCwweDgwLDB4YWUsMHg3NCwweDAwLDB4YjUsMHhhZiwweDZjLDB4MDAsMHhiMywweGFmLAotMHg2OCwweDAwLDB4YjIsMHhhZiwweDY0LDB4MDAsMHhiMSwweGFmLDB4ODQsMHgwMCwweGJmLDB4YWYsMHg4MCwweDAwLDB4YmUsMHhhZiwKLTB4N2MsMHgwMCwweGI3LDB4YWYsMHg3OCwweDAwLDB4YjYsMHhhZiwweDA0LDB4MDAsMHgwMiwweDM2LDB4MDQsMHgwYywweDEzLDB4MzYsCi0weDAwLDB4MDAsMHg0MywweDhjLDB4MDAsMHgwMCwweDYyLDB4OGUsMHgwZiwweDAwLDB4MTEsMHgzYywweDI0LDB4MTgsMHg3MSwweDAwLAotMHgwOCwweDBjLDB4MTIsMHgzNiwweDRjLDB4MDAsMHhhMiwweGFmLDB4MDIsMHhhYywweDAzLDB4MDAsMHgwMCwweDAwLDB4NDMsMHg4ZSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg1MCwweDAwLDB4YTMsMHhhZiwweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsCi0weDAxLDB4MDAsMHgyMSwweDM4LDB4MDAsMHg2MCwweDgxLDB4NDAsMHgyMSwweDIwLDB4MDAsMHgwMCwweGRkLDB4NDQsMHgwMCwweDBjLAotMHhmZiwweGZmLDB4MjUsMHgzNiwweDEwLDB4MDAsMHhhMiwweGFmLDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwKLTB4MDAsMHg2MCwweDgxLDB4NDAsMHhiMywweDBhLDB4MDAsMHgwYywweDY0LDB4MDAsMHgwNCwweDI0LDB4N2EsMHg0MiwweDAwLDB4MGMsCi0weDAxLDB4MDAsMHgwNCwweDI0LDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAxLDB4MDAsMHgyMSwweDM4LAotMHgwMCwweDYwLDB4ODEsMHg0MCwweDIxLDB4MjAsMHgwMCwweDAwLDB4ZGQsMHg0NCwweDAwLDB4MGMsMHhmZiwweGZmLDB4MjUsMHgzNiwKLTB4MTQsMHgwMCwweGEyLDB4YWYsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDAsMHg2MCwweDgxLDB4NDAsCi0weGIzLDB4MGEsMHgwMCwweDBjLDB4NjQsMHgwMCwweDA0LDB4MjQsMHg3YSwweDQyLDB4MDAsMHgwYywweDIxLDB4MjAsMHgwMCwweDAwLAotMHhlMCwweDBlLDB4MDUsMHgzNiwweDAwLDB4MDAsMHhhZCwweDhjLDB4ZGMsMHgwZSwweDA2LDB4MzYsMHg3MCwweDBlLDB4MDcsMHgzNiwKLTB4MTgsMHgwMCwweGFkLDB4YWYsMHgwMCwweDAwLDB4YzIsMHg4YywweDc0LDB4MGUsMHgwOCwweDM2LDB4NzgsMHgwZSwweDA5LDB4MzYsCi0weDFjLDB4MDAsMHhhMiwweGFmLDB4MDAsMHgwMCwweGUzLDB4OGMsMHg3YywweDBlLDB4MGEsMHgzNiwweDgwLDB4MGUsMHgwYiwweDM2LAotMHgyMCwweDAwLDB4YTMsMHhhZiwweDAwLDB4MDAsMHgwZCwweDhkLDB4ODQsMHgwZSwweDBjLDB4MzYsMHg4OCwweDBlLDB4MTcsMHgzNiwKLTB4MjQsMHgwMCwweGFkLDB4YWYsMHgwMCwweDAwLDB4MjIsMHg4ZCwweDhjLDB4MGUsMHgwZSwweDM2LDB4ZDAsMHgwZSwweDE4LDB4MzYsCi0weDI4LDB4MDAsMHhhMiwweGFmLDB4MDAsMHgwMCwweDQzLDB4OGQsMHhkOCwweDBlLDB4MTEsMHgzNiwweGQ0LDB4MGUsMHgxMCwweDM2LAotMHgyYywweDAwLDB4YTMsMHhhZiwweDAwLDB4MDAsMHg2ZCwweDhkLDB4ZWQsMHgzZiwweDA0LDB4M2MsMHhmYiwweDkyLDB4ODQsMHgzNCwKLTB4MzAsMHgwMCwweGFkLDB4YWYsMHgwMCwweDAwLDB4ODIsMHg4ZCwweDI1LDB4YjAsMHgxZSwweDNjLDB4MjEsMHhiMCwweDAwLDB4MDAsCi0weDM0LDB4MDAsMHhhMiwweGFmLDB4MDAsMHgwMCwweGUzLDB4OGUsMHhmZiwweDAzLDB4MGYsMHgzYywweDM4LDB4MDAsMHhhMywweGFmLAotMHgwMCwweDAwLDB4Y2QsMHg4ZCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2MsMHgwMCwweGFkLDB4YWYsMHgwMCwweDAwLDB4MDIsMHg4ZiwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4YTIsMHhhZiwweDAwLDB4MDAsMHgwMywweDhlLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDQ0LDB4MDAsMHhhMywweGFmLDB4MDAsMHgwMCwweDJkLDB4OGUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHhhZCwweGFmLAotMHgwMCwweDAwLDB4YTQsMHhhYywweDAwLDB4MDAsMHhjNCwweGFjLDB4MDAsMHgwMCwweGU0LDB4YWMsMHgwMCwweDAwLDB4MDQsMHhhZCwKLTB4MDAsMHgwMCwweDI0LDB4YWQsMHgwMCwweDAwLDB4NDQsMHhhZCwweDAwLDB4MDAsMHg2NCwweGFkLDB4MDAsMHgwMCwweDg0LDB4YWQsCi0weDAwLDB4MDAsMHhlNCwweGFlLDB4MDAsMHgwMCwweGM0LDB4YWQsMHgwMCwweDAwLDB4MDQsMHhhZiwweDAwLDB4MDAsMHgwNCwweGFlLAotMHgwMCwweDAwLDB4MjQsMHhhZSwweGQwLDB4NTEsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg3YSwweDAwLDB4YTIsMHgxMiwKLTB4MDAsMHgxMCwweDAzLDB4M2MsMHhhYywweDBlLDB4YzIsMHgzNywweDk0LDB4MGUsMHhjMywweDM3LDB4MjUsMHhiMCwweDA5LDB4M2MsCi0weDAwLDB4MDAsMHg0YSwweDhjLDB4YmMsMHgwZSwweDI5LDB4MzUsMHgwMCwweDAwLDB4NjQsMHg4YywweGI0LDB4MGUsMHhjMiwweDM3LAotMHg5YywweDBlLDB4YzMsMHgzNywweDAwLDB4MDAsMHg0NSwweDhjLDB4MDAsMHgwMCwweDY2LDB4OGMsMHgwMCwweDAwLDB4MjcsMHg4ZCwKLTB4MjQsMHgyMCwweDhmLDB4MDAsMHgwMCwweGQ4LDB4MDIsMHgzYywweDI0LDB4MTAsMHg0MiwweDAxLDB4MjQsMHgyOCwweGFmLDB4MDAsCi0weDI0LDB4MzAsMHhjZiwweDAwLDB4MjQsMHgzOCwweGVmLDB4MDAsMHgwMiwweDI0LDB4MDQsMHgwMCwweDIwLDB4MDEsMHgwMywweDI0LAotMHgwMSwweDAwLDB4NDIsMHgyYywweDAyLDB4MmMsMHgwNSwweDAwLDB4MDIsMHgzNCwweDA2LDB4MDAsMHhmMiwweDAwLDB4ODMsMHgxMCwKLTB4MDIsMHgzYywweDA3LDB4MDAsMHhmMCwweDAwLDB4YTMsMHgxMCwweDIwLDB4MDAsMHgwMywweDI0LDB4ZWUsMHgwMCwweGMzLDB4MTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZWMsMHgwMCwweGUzLDB4MTAsMHgwMSwweDAwLDB4MDgsMHgyNCwweDgwLDB4MDAsMHgwMywweDI0LAotMHgwOCwweDAwLDB4ODMsMHgxMCwweDIxLDB4MjAsMHgwMCwweDAwLDB4MDYsMHgwMCwweGEzLDB4MTAsMHgyMSwweDIwLDB4MDAsMHgwMCwKLTB4ZTAsMHgwMywweDAzLDB4MjQsMHgwMywweDAwLDB4YzMsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTUsMHgwMCwweGUzLDB4MTAsCi0weDAxLDB4MDAsMHgwNCwweDI0LDB4MDYsMHgwMCwweDQwLDB4MTAsMHgwOSwweDAwLDB4MDIsMHgyNCwweDA0LDB4MDAsMHgwMCwweDExLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDZkLDB4MDEsMHg4MCwweDE0LDB4MjUsMHhiMCwweDEyLDB4M2MsMHgwOSwweDAwLDB4MDIsMHgyNCwKLTB4ZGUsMHgwMCwweGMyLDB4MTIsMHgyNSwweGIwLDB4MDQsMHgzYywweDAxLDB4MDAsMHhkNiwweDI2LDB4MGEsMHgwMCwweGMyLDB4MmUsCi0weDFkLDB4MDEsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweGZmLDB4YTAsMHgxNiwweDAxLDB4MDAsMHgwMiwweDI0LAotMHhhMCwweDAwLDB4MDMsMHgzYywweDI1LDB4YjAsMHgwOSwweDNjLDB4MzAsMHg1NCwweDYyLDB4MzQsMHgwNCwweDBjLDB4MjksMHgzNSwKLTB4MDAsMHgwMCwweDIyLDB4YWQsMHgyNSwweGIwLDB4MGQsMHgzYywweDA4LDB4MDAsMHgwMiwweDNjLDB4ZTQsMHgwMCwweDQyLDB4MzQsCi0weDA4LDB4MGMsMHhhZCwweDM1LDB4MjUsMHhiMCwweDA5LDB4M2MsMHgwMCwweDAwLDB4YTIsMHhhZCwweDI4LDB4MGUsMHgyOSwweDM1LAotMHg4MCwweDgwLDB4MDIsMHgzYywweDAwLDB4MDAsMHgyMiwweGFkLDB4MTQsMHgwMiwweDA0LDB4M2MsMHgxNiwweDY4LDB4MDIsMHgzYywKLTB4NDgsMHgwMSwweDgzLDB4MzQsMHg0MCwweDBlLDB4YzUsMHgzNywweDQ0LDB4MGUsMHhjNiwweDM3LDB4YTIsMHgwNCwweDQyLDB4MzQsCi0weDI1LDB4YjAsMHgwZCwweDNjLDB4MDAsMHgwMCwweGEzLDB4YWMsMHg0YywweDBlLDB4YWQsMHgzNSwweDAwLDB4MDAsMHhjMiwweGFjLAotMHhkMSwweDI4LDB4MDIsMHgyNCwweDAwLDB4MDAsMHhhMiwweGFkLDB4MTQsMHgwMiwweDAzLDB4M2MsMHgxNiwweDI4LDB4MDIsMHgzYywKLTB4NGQsMHgwMSwweDYzLDB4MzQsMHg2MCwweDBlLDB4YzcsMHgzNywweDY0LDB4MGUsMHhjOCwweDM3LDB4YmEsMHgwOCwweDQyLDB4MzQsCi0weDAwLDB4MDAsMHhlMywweGFjLDB4MjUsMHhiMCwweDA2LDB4M2MsMHgwMCwweDAwLDB4MDIsMHhhZCwweDAwLDB4ZmIsMHgwZCwweDNjLAotMHgyNSwweGIwLDB4MDksMHgzYywweDAwLDB4ZjgsMHgwMiwweDNjLDB4ZDEsMHgyOCwweDA3LDB4MjQsMHg2YywweDBlLDB4YzYsMHgzNCwKLTB4NDgsMHgwZSwweDI5LDB4MzUsMHgwMSwweDAwLDB4NDIsMHgzNCwweDAxLDB4MDAsMHhhZCwweDM1LDB4MDAsMHgwMCwweGM3LDB4YWMsCi0weDAzLDB4MDAsMHgwNCwweDI0LDB4MDAsMHgwMCwweDJkLDB4YWQsMHgwMCwweDAwLDB4MjIsMHhhZCwweDg0LDB4MGEsMHgwMCwweDBjLAotMHg1OCwweDAwLDB4YWYsMHhhZiwweGEwLDB4MDAsMHgwNCwweDNjLDB4MjUsMHhiMCwweDAzLDB4M2MsMHgyNSwweGIwLDB4MDYsMHgzYywKLTB4MjUsMHhiMCwweDA3LDB4M2MsMHhlNCwweDAwLDB4MDIsMHgyNCwweDMzLDB4NTQsMHg4NCwweDM0LDB4MDQsMHgwYywweDYzLDB4MzQsCi0weDA4LDB4MGMsMHhjNiwweDM0LDB4MjgsMHgwZSwweGU3LDB4MzQsMHgwMCwweDAwLDB4NjQsMHhhYywweDAwLDB4MDAsMHhjMiwweGFjLAotMHgwMCwweDAwLDB4ZTAsMHhhYywweDAxLDB4MDAsMHgwMiwweDI0LDB4NTgsMHgwMCwweGFmLDB4OGYsMHg4YSwweGZmLDB4YTIsMHgxNiwKLTB4YWMsMHgwZSwweGMyLDB4MzcsMHgwMCwweDEwLDB4MDMsMHgzYywweDFmLDB4ZGMsMHg3OSwweDM0LDB4MWYsMHg4YywweDdmLDB4MzQsCi0weDIzLDB4OGMsMHg2ZCwweDM0LDB4YTAsMHgwMCwweDAzLDB4M2MsMHgzMCwweDU0LDB4NjUsMHgzNCwweDAwLDB4MDEsMHgxNywweDNjLAotMHgyNSwweGIwLDB4MDksMHgzYywweDI1LDB4YjAsMHgwMywweDNjLDB4MDAsMHgwMSwweGUyLDB4MzYsMHgyMCwweDA4LDB4MjksMHgzNSwKLTB4MjAsMHgwOCwweDYzLDB4MzQsMHgwMCwweDAwLDB4MzAsMHg4ZCwweDAwLDB4MDAsMHg2MiwweGFjLDB4MjUsMHhiMCwweDAzLDB4M2MsCi0weDI4LDB4MDgsMHg2MywweDM0LDB4MDAsMHgwMCwweDYyLDB4YWMsMHgyNSwweGIwLDB4MDIsMHgzYywweDA0LDB4MGMsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4NDUsMHhhYywweDI1LDB4YjAsMHgwMywweDNjLDB4MDgsMHgwMCwweDAyLDB4M2MsMHhlNCwweDAwLDB4NDIsMHgzNCwKLTB4MDgsMHgwYywweDYzLDB4MzQsMHgwMCwweDAwLDB4NjIsMHhhYywweDI1LDB4YjAsMHgwMywweDNjLDB4MDAsMHg3YywweGYzLDB4MzYsCi0weDAwLDB4NDgsMHhmNCwweDM2LDB4MzAsMHgwZSwweGM2LDB4MzcsMHgzNCwweDBlLDB4YzcsMHgzNywweDgwLDB4ODAsMHgwMiwweDNjLAotMHgyOCwweDBlLDB4NjMsMHgzNCwweDAwLDB4MDAsMHg2MiwweGFjLDB4MDAsMHgwMCwweGQzLDB4YWMsMHgwMCwweDAwLDB4ZjQsMHhhYywKLTB4MTQsMHgwMiwweDA2LDB4M2MsMHgxNiwweDY4LDB4MDcsMHgzYywweDM4LDB4MGUsMHhjOCwweDM3LDB4NDAsMHgwZSwweGNhLDB4MzcsCi0weDQ0LDB4MGUsMHhjYiwweDM3LDB4M2MsMHgwZSwweGM5LDB4MzcsMHgwMiwweDAxLDB4YzYsMHgzNCwweGM3LDB4MDQsMHhlNywweDM0LAotMHgwMCwweDAwLDB4MTksMHhhZCwweDI1LDB4YjAsMHgwMywweDNjLDB4MDAsMHgwMCwweDNmLDB4YWQsMHgwMCwweDAwLDB4NDYsMHhhZCwKLTB4MjUsMHhiMCwweDA5LDB4M2MsMHgwMCwweDAwLDB4NjcsMHhhZCwweDI1LDB4YjAsMHgwNiwweDNjLDB4MDAsMHgxMCwweDA3LDB4M2MsCi0weDUwLDB4MGUsMHhjYywweDM3LDB4NTgsMHgwZSwweGNlLDB4MzcsMHg1YywweDBlLDB4ZDgsMHgzNywweGQxLDB4MjgsMHgwMiwweDI0LAotMHgyMywweGRjLDB4ZTcsMHgzNCwweDRjLDB4MGUsMHgyOSwweDM1LDB4NmMsMHgwZSwweDYzLDB4MzQsMHg1NCwweDBlLDB4YzYsMHgzNCwKLTB4MDAsMHgwMCwweDIyLDB4YWQsMHgwMCwweDAwLDB4NjIsMHhhYywweDE0LDB4MDIsMHgwOSwweDNjLDB4MDAsMHgwMCwweDkzLDB4YWQsCi0weDI1LDB4YjAsMHgwMiwweDNjLDB4MDAsMHgwMCwweGQ0LDB4YWMsMHgwMCwweDAwLDB4YzcsMHhhZCwweDAwLDB4MDAsMHgwZCwweGFmLAotMHgxNiwweDI4LDB4MGQsMHgzYywweDQ4LDB4MGUsMHg0MiwweDM0LDB4MDAsMHhmOCwweDA2LDB4M2MsMHgwMiwweDAxLDB4MjksMHgzNSwKLTB4MDcsMHgwZCwweGFkLDB4MzUsMHgwMCwweGZiLDB4MDMsMHgzYywweDYwLDB4MGUsMHhkMSwweDM3LDB4NjQsMHgwZSwweGQyLDB4MzcsCi0weDAwLDB4MDAsMHgyOSwweGFlLDB4MDMsMHgwMCwweDA0LDB4MjQsMHgwMCwweDAwLDB4NGQsMHhhZSwweDAwLDB4MDAsMHg0MywweGFjLAotMHgwMCwweDAwLDB4NDYsMHhhYywweDg0LDB4MGEsMHgwMCwweDBjLDB4NTgsMHgwMCwweGFmLDB4YWYsMHgwMCwweDAyLDB4MDIsMHgzYywKLTB4MjUsMHhiMCwweDA3LDB4M2MsMHgyNSwweGIwLDB4MDksMHgzYywweGQxLDB4MjgsMHg0MiwweDM0LDB4NGMsMHgwZSwweGU3LDB4MzQsCi0weDZjLDB4MGUsMHgyOSwweDM1LDB4MjUsMHhiMCwweDBkLDB4M2MsMHgwMCwweDAwLDB4ZTIsMHhhYywweDQ4LDB4MGUsMHhhZCwweDM1LAotMHgwMCwweDAwLDB4MjIsMHhhZCwweDAwLDB4ZjgsMHgwMywweDNjLDB4MDAsMHhmYiwweDAyLDB4M2MsMHgwMCwweDAwLDB4YTIsMHhhZCwKLTB4MDMsMHgwMCwweDA0LDB4MjQsMHgwMCwweDAwLDB4YTMsMHhhZCwweDg0LDB4MGEsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDRjLDB4MDAsMHhhNiwweDhmLDB4MjUsMHhiMCwweDA0LDB4M2MsMHgwNCwweDBjLDB4ODQsMHgzNCwweDAwLDB4MDAsMHg4NiwweGFjLAotMHg1MCwweDAwLDB4YTksMHg4ZiwweDI1LDB4YjAsMHgwNywweDNjLDB4MjUsMHhiMCwweDBkLDB4M2MsMHgwMCwweDAxLDB4MTAsMHgzMiwKLTB4MDgsMHgwYywweGU3LDB4MzQsMHgyOCwweDBlLDB4YWQsMHgzNSwweDAwLDB4MDAsMHhlOSwweGFjLDB4MmIsMHg4MCwweDEwLDB4MDAsCi0weDAwLDB4MDAsMHhhMCwweGFkLDB4NTgsMHgwMCwweGFmLDB4OGYsMHgxNywweGZmLDB4MDAsMHgxNiwweGFjLDB4MGUsMHhjMiwweDM3LAotMHgyNSwweGIwLDB4MDIsMHgzYywweDI1LDB4YjAsMHgwMywweDNjLDB4MjAsMHgwOCwweDQyLDB4MzQsMHgyOCwweDA4LDB4NjMsMHgzNCwKLTB4MDAsMHgwMCwweDU3LDB4YWMsMHgyNSwweGIwLDB4MDksMHgzYywweDAwLDB4MDAsMHg3NywweGFjLDB4YWMsMHgwZSwweGMyLDB4MzcsCi0weDk0LDB4MGUsMHhjMywweDM3LDB4MDAsMHgwMCwweDRhLDB4OGMsMHhiYywweDBlLDB4MjksMHgzNSwweDAwLDB4MDAsMHg2NCwweDhjLAotMHhiNCwweDBlLDB4YzIsMHgzNywweDljLDB4MGUsMHhjMywweDM3LDB4MDAsMHgwMCwweDQ1LDB4OGMsMHgwMCwweDAwLDB4NjYsMHg4YywKLTB4MDAsMHgwMCwweDI3LDB4OGQsMHgyNCwweDIwLDB4OGYsMHgwMCwweDAwLDB4ZDgsMHgwMiwweDNjLDB4MjQsMHgxMCwweDQyLDB4MDEsCi0weDI0LDB4MjgsMHhhZiwweDAwLDB4MjQsMHgzMCwweGNmLDB4MDAsMHgyNCwweDM4LDB4ZWYsMHgwMCwweDAyLDB4MjQsMHgwNCwweDAwLAotMHgyMCwweDAxLDB4MDMsMHgyNCwweDAxLDB4MDAsMHg0MiwweDJjLDB4MDIsMHgyYywweDA1LDB4MDAsMHgwMiwweDM0LDB4MDYsMHgwMCwKLTB4MTAsMHhmZiwweDgzLDB4MTQsMHgwMiwweDNjLDB4MDcsMHgwMCwweDgwLDB4MDAsMHgwMywweDI0LDB4MTYsMHhmZiwweDgzLDB4MTQsCi0weDIxLDB4NDAsMHgwMCwweDAwLDB4YzMsMHg1MSwweDAwLDB4MDgsMHgyMSwweDIwLDB4MDAsMHgwMCwweGZmLDB4ZmYsMHgwMiwweDM0LAotMHhjNCwweDAyLDB4ODQsMHgzNCwweDAwLDB4MDAsMHg4MiwweGFjLDB4OTQsMHgwZSwweGMzLDB4MzcsMHg5YywweDBlLDB4YzIsMHgzNywKLTB4YTQsMHgwZSwweGM0LDB4MzcsMHhhYywweDBlLDB4YzcsMHgzNywweDAwLDB4MDAsMHg2NiwweDhjLDB4MDAsMHgwMCwweDQ5LDB4OGMsCi0weDAwLDB4MDAsMHg4YiwweDhjLDB4MDAsMHgwMCwweGU1LDB4OGMsMHgwMiwweDgwLDB4MDcsMHgzYywweDY4LDB4MTUsMHhlNywweDI0LAotMHgwYywweDQwLDB4ZTMsMHg4YywweDEwLDB4NDAsMHhlNCwweDhjLDB4YjQsMHgwZSwweGMyLDB4MzcsMHgwMCwweDAwLDB4NDcsMHg4YywKLTB4MjUsMHhiMCwweDBkLDB4M2MsMHgwMCwweGZjLDB4MDIsMHgyNCwweDI0LDB4MzAsMHhjZiwweDAwLDB4MjQsMHgyOCwweGFmLDB4MDAsCi0weGJjLDB4MGUsMHhhZCwweDM1LDB4MDAsMHgwMCwweGE4LDB4OGQsMHgyNCwweDIwLDB4ODIsMHgwMCwweDAyLDB4MzQsMHgwNiwweDAwLAotMHgyNCwweDE4LDB4NjIsMHgwMCwweDAyLDB4MmMsMHgwNSwweDAwLDB4YzQsMHgwZSwweGNhLDB4MzcsMHhjYywweDBlLDB4Y2MsMHgzNywKLTB4ZjAsMHhmZiwweDAyLDB4M2MsMHhmZiwweDAzLDB4NDIsMHgzNCwweDI1LDB4MTgsMHg2NiwweDAwLDB4MjUsMHgyMCwweDg1LDB4MDAsCi0weDAwLDB4MDAsMHg0NiwweDhkLDB4MjQsMHg0OCwweDJmLDB4MDEsMHgwMCwweDAwLDB4ODUsMHg4ZCwweDI0LDB4MzgsMHhlZiwweDAwLAotMHgyNCwweDIwLDB4ODIsMHgwMCwweDI0LDB4MTgsMHg2MiwweDAwLDB4ODIsMHg0OSwweDA5LDB4MDAsMHg4MiwweDM5LDB4MDcsMHgwMCwKLTB4MGYsMHhjMCwweDAyLDB4M2MsMHhmZiwweGZmLDB4NDIsMHgzNCwweDI1LDB4MTgsMHg2OSwweDAwLDB4MjUsMHgyMCwweDg3LDB4MDAsCi0weDI0LDB4NTgsMHg2ZiwweDAxLDB4MjQsMHg0MCwweDBmLDB4MDEsMHgyNCwweDIwLDB4ODIsMHgwMCwweDI0LDB4MTgsMHg2MiwweDAwLAotMHgwMCwweDU5LDB4MGIsMHgwMCwweDAwLDB4NDEsMHgwOCwweDAwLDB4MjQsMHgzMCwweGNmLDB4MDAsMHgyNCwweDI4LDB4YWYsMHgwMCwKLTB4MDIsMHg4MCwweDAyLDB4M2MsMHg2OCwweDE1LDB4NDIsMHgyNCwweDI1LDB4MTgsMHg2YiwweDAwLDB4MjUsMHgyMCwweDg4LDB4MDAsCi0weDAyLDB4MzQsMHgwNiwweDAwLDB4MDIsMHgyYywweDA1LDB4MDAsMHgwMSwweDAwLDB4ZDYsMHgyNiwweDBjLDB4NDAsMHg0MywweGFjLAotMHgxMCwweDQwLDB4NDQsMHhhYywweDE0LDB4NDAsMHg0NiwweGE0LDB4MTYsMHg0MCwweDQ1LDB4YTQsMHgwYSwweDAwLDB4YzIsMHgyZSwKLTB4ZTUsMHhmZSwweDQwLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDAsMHhhZCwweDhmLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weGUwLDB4MGUsMHg0MywweDM0LDB4MTAsMHgwMCwweGE2LDB4OGYsMHgwMCwweDAwLDB4NmQsMHhhYywweDFjLDB4MDAsMHhhMywweDhmLAotMHhkYywweDBlLDB4NDcsMHgzNCwweDcwLDB4MGUsMHg0OCwweDM0LDB4MDAsMHgwMCwweGUzLDB4YWMsMHgyMCwweDAwLDB4YTcsMHg4ZiwKLTB4NzQsMHgwZSwweDQ5LDB4MzQsMHg3OCwweDBlLDB4NGEsMHgzNCwweDAwLDB4MDAsMHgwNywweGFkLDB4MjQsMHgwMCwweGFkLDB4OGYsCi0weDdjLDB4MGUsMHg0YiwweDM0LDB4ODAsMHgwZSwweDRjLDB4MzQsMHgwMCwweDAwLDB4MmQsMHhhZCwweDI4LDB4MDAsMHhhMywweDhmLAotMHgyNSwweGIwLDB4MGQsMHgzYywweDg0LDB4MGUsMHhhZCwweDM1LDB4MDAsMHgwMCwweDQzLDB4YWQsMHgyYywweDAwLDB4YTcsMHg4ZiwKLTB4ODgsMHgwZSwweDUyLDB4MzQsMHg4YywweDBlLDB4NGUsMHgzNCwweDAwLDB4MDAsMHg2NywweGFkLDB4MzAsMHgwMCwweGE5LDB4OGYsCi0weGQ0LDB4MGUsMHg1MSwweDM0LDB4ZDAsMHgwZSwweDQyLDB4MzQsMHgwMCwweDAwLDB4ODksMHhhZCwweDM0LDB4MDAsMHhhMywweDhmLAotMHgwZiwweDAwLDB4MTAsMHgzYywweGZmLDB4ZmYsMHgwNSwweDM2LDB4MDAsMHgwMCwweGEzLDB4YWQsMHgzOCwweDAwLDB4YTcsMHg4ZiwKLTB4MjEsMHgyMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDcsMHhhZSwweDNjLDB4MDAsMHhhOSwweDhmLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHhjOSwweGFkLDB4NDAsMHgwMCwweGFkLDB4OGYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0ZCwweGFjLAotMHg0NCwweDAwLDB4YTIsMHg4ZiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIyLDB4YWUsMHg0OCwweDAwLDB4YTMsMHg4ZiwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDMsMHhhZSwweGJhLDB4NDQsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGIzLDB4MGEsMHgwMCwweDBjLDB4NjQsMHgwMCwweDA0LDB4MjQsMHg3YSwweDQyLDB4MDAsMHgwYywweDAxLDB4MDAsMHgwNCwweDI0LAotMHgxNCwweDAwLDB4YTYsMHg4ZiwweGZmLDB4ZmYsMHgwNSwweDM2LDB4YmEsMHg0NCwweDAwLDB4MGMsMHgyMSwweDIwLDB4MDAsMHgwMCwKLTB4YjMsMHgwYSwweDAwLDB4MGMsMHg2NCwweDAwLDB4MDQsMHgyNCwweDg0LDB4MDAsMHhiZiwweDhmLDB4ODAsMHgwMCwweGJlLDB4OGYsCi0weDdjLDB4MDAsMHhiNywweDhmLDB4NzgsMHgwMCwweGI2LDB4OGYsMHg3NCwweDAwLDB4YjUsMHg4ZiwweDcwLDB4MDAsMHhiNCwweDhmLAotMHg2YywweDAwLDB4YjMsMHg4ZiwweDY4LDB4MDAsMHhiMiwweDhmLDB4NjQsMHgwMCwweGIxLDB4OGYsMHg2MCwweDAwLDB4YjAsMHg4ZiwKLTB4MjEsMHgyMCwweDAwLDB4MDAsMHg3YSwweDQyLDB4MDAsMHgwOCwweDg4LDB4MDAsMHhiZCwweDI3LDB4OTQsMHgwZSwweDQyLDB4MzYsCi0weDljLDB4MGUsMHg0MywweDM2LDB4YTQsMHgwZSwweDQ0LDB4MzYsMHhhYywweDBlLDB4NDUsMHgzNiwweDAyLDB4ODAsMHgwZCwweDNjLAotMHgwMCwweDAwLDB4NDcsMHg4YywweDY4LDB4MTUsMHhhZCwweDI1LDB4MDAsMHgwMCwweDZhLDB4OGMsMHgwMCwweDAwLDB4OGMsMHg4YywKLTB4MDAsMHgwMCwweGEzLDB4OGMsMHgxMCwweDQwLDB4YTQsMHg4ZCwweGI0LDB4MGUsMHg0MiwweDM2LDB4MDAsMHgwMCwweDQ4LDB4OGMsCi0weDBjLDB4NDAsMHhhNSwweDhkLDB4MjUsMHhiMCwweDAyLDB4M2MsMHgwMCwweGZjLDB4MTMsMHgyNCwweGJjLDB4MGUsMHg0MiwweDM0LAotMHgyNCwweDE4LDB4NmYsMHgwMCwweDAwLDB4MDAsMHg0OSwweDhjLDB4MDIsMHgxYywweDAzLDB4MDAsMHgyNCwweDM4LDB4ZWYsMHgwMCwKLTB4MjQsMHgyMCwweDkzLDB4MDAsMHhmMCwweGZmLDB4MDYsMHgzYywweDI1LDB4MjAsMHg4MywweDAwLDB4ZmYsMHgwMywweGM2LDB4MzQsCi0weDAyLDB4M2MsMHgwNywweDAwLDB4YzQsMHgwZSwweDQyLDB4MzYsMHgyNCwweDI4LDB4YjMsMHgwMCwweDI0LDB4NDAsMHgwZiwweDAxLAotMHhjYywweDBlLDB4NGIsMHgzNiwweDI1LDB4MjgsMHhhNywweDAwLDB4MjQsMHgyMCwweDg2LDB4MDAsMHgwMCwweDAwLDB4NDcsMHg4YywKLTB4MjQsMHg1MCwweDRmLDB4MDEsMHgwMCwweDAwLDB4NjMsMHg4ZCwweDgyLDB4NDEsMHgwOCwweDAwLDB4MGYsMHhjMCwweDAyLDB4M2MsCi0weGZmLDB4ZmYsMHg0MiwweDM0LDB4MjUsMHgyMCwweDg4LDB4MDAsMHg4MiwweDUxLDB4MGEsMHgwMCwweDI0LDB4MjgsMHhhNiwweDAwLAotMHgyNCwweDQ4LDB4MmYsMHgwMSwweDI0LDB4ODgsMHg4MiwweDAwLDB4MjUsMHgyOCwweGFhLDB4MDAsMHgyNCwweDYwLDB4OGYsMHgwMSwKLTB4MDAsMHg0OSwweDA5LDB4MDAsMHgyNSwweDg4LDB4MjksMHgwMiwweDI0LDB4MjgsMHhhMiwweDAwLDB4MjQsMHgxOCwweDZmLDB4MDAsCi0weDAwLDB4NjEsMHgwYywweDAwLDB4MjQsMHgzOCwweGVmLDB4MDAsMHgyNSwweDI4LDB4YWMsMHgwMCwweDAyLDB4M2MsMHgwNywweDAwLAotMHgwMiwweDFjLDB4MDMsMHgwMCwweDgyLDB4MjcsMHgxMSwweDAwLDB4MDEsMHgwMCwweDAyLDB4MjQsMHgxNiwweDQwLDB4YTMsMHhhNSwKLTB4MTQsMHg0MCwweGE3LDB4YTUsMHgwYywweDQwLDB4YTUsMHhhZCwweDRhLDB4MDAsMHg4MiwweDEwLDB4MTAsMHg0MCwweGIxLDB4YWQsCi0weDgwLDB4MGMsMHg0YywweDM2LDB4MDAsMHgwMCwweDhhLDB4OGQsMHg4MiwweDcyLDB4MDUsMHgwMCwweGZmLDB4MDMsMHhjZSwweDMxLAotMHgwMCwweDAyLDB4YzMsMHgzMSwweDI1LDB4MTAsMHhkMywweDAxLDB4MGIsMHg3MCwweDQzLDB4MDAsMHg4MiwweDg1LDB4MGEsMHgwMCwKLTB4MTgsMHgwMCwweGQwLDB4MDEsMHhmZiwweDAzLDB4YWYsMHgzMCwweDAwLDB4MDIsMHhhMywweDMwLDB4MjUsMHgxMCwweGYzLDB4MDEsCi0weDBiLDB4NzgsMHg0MywweDAwLDB4MDIsMHg3NSwweDExLDB4MDAsMHhmZiwweDAzLDB4Y2UsMHgzMSwweGMwLDB4ZmYsMHgwOCwweDNjLAotMHgyNSwweDE4LDB4ZDMsMHgwMSwweDAwLDB4MDIsMHhjMiwweDMxLDB4MDAsMHhmYywweDA2LDB4MzUsMHgwYiwweDcwLDB4NjIsMHgwMCwKLTB4MjQsMHgzOCwweDQ2LDB4MDEsMHg5NCwweDBjLDB4NGEsMHgzNiwweGZmLDB4MGYsMHgwOSwweDNjLDB4ZmYsMHhmZiwweDI5LDB4MzUsCi0weDg4LDB4MGMsMHg1NCwweDM2LDB4MTIsMHgyMCwweDAwLDB4MDAsMHgwMiwweDIyLDB4MDQsMHgwMCwweDNmLDB4MDAsMHg4MiwweDMwLAotMHgxOCwweDAwLDB4ZjAsMHgwMSwweDgyLDB4N2EsMHgxMSwweDAwLDB4ZmYsMHgwMywweGVmLDB4MzEsMHgwMCwweDE0LDB4MDIsMHgwMCwKLTB4MjUsMHgzOCwweGUyLDB4MDAsMHgwMCwweDAyLDB4ZTMsMHgzMSwweDI1LDB4MTAsMHhmMywweDAxLDB4MGIsMHg3OCwweDQzLDB4MDAsCi0weGMwLDB4MDMsMHg4NCwweDMwLDB4ODAsMHgyNSwweDA0LDB4MDAsMHg5YywweDBjLDB4NGIsMHgzNiwweDEyLDB4MjgsMHgwMCwweDAwLAotMHgwMiwweDJhLDB4MDUsMHgwMCwweGZmLDB4MDMsMHhhMiwweDMwLDB4MjUsMHgxMCwweGUyLDB4MDAsMHgwMCwweDAwLDB4ODIsMHhhZCwKLTB4MDAsMHgwMCwweDQyLDB4OGQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MTAsMHg0OSwweDAwLDB4MjUsMHgxMCwweDQ0LDB4MDAsCi0weDAwLDB4MDAsMHg0MiwweGFkLDB4MDAsMHgwMCwweDhhLDB4OGUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4NDAsMHg0OCwweDAxLAotMHg4MiwweDg1LDB4MDgsMHgwMCwweDE4LDB4MDAsMHhkMCwweDAxLDB4MjQsMHgzMCwweDQ2LDB4MDEsMHgxMiwweDE4LDB4MDAsMHgwMCwKLTB4MDIsMHgxYSwweDAzLDB4MDAsMHgzZiwweDAwLDB4NjIsMHgzMCwweDE4LDB4MDAsMHhmMCwweDAxLDB4MDAsMHgxNCwweDAyLDB4MDAsCi0weDI1LDB4MzAsMHhjMiwweDAwLDB4YzAsMHgwMywweDYzLDB4MzAsMHg4MCwweDFkLDB4MDMsMHgwMCwweDEyLDB4MjAsMHgwMCwweDAwLAotMHgwMiwweDIyLDB4MDQsMHgwMCwweGZmLDB4MDMsMHg4MiwweDMwLDB4MjUsMHgxMCwweGMyLDB4MDAsMHgwMCwweDAwLDB4ODIsMHhhZSwKLTB4MDAsMHgwMCwweDYyLDB4OGQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MTAsMHg0OSwweDAwLDB4MjUsMHgxMCwweDQzLDB4MDAsCi0weDAwLDB4MDAsMHg2MiwweGFkLDB4MDAsMHgxNywweDE2LDB4MDAsMHgyNSwweGIwLDB4MDMsMHgzYywweGRkLDB4ZGQsMHg0MiwweDM0LAotMHhjNCwweDAyLDB4NjMsMHgzNCwweDAwLDB4MDAsMHg2MiwweGFjLDB4ZWMsMHg1MiwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4ZTAsMHhmZiwweGJkLDB4MjcsMHg0NCwweDAwLDB4MDIsMHgyNCwweDEwLDB4MDAsMHhhMiwweGEzLDB4NDksMHgwMCwweDAzLDB4MjQsCi0weDQ3LDB4MDAsMHgwMiwweDI0LDB4MDIsMHg4MCwweDA3LDB4M2MsMHg4YywweDk3LDB4ZTcsMHgyNCwweDExLDB4MDAsMHhhMywweGEzLAotMHgxMiwweDAwLDB4YTIsMHhhMywweDEwLDB4MjcsMHgwMywweDI0LDB4MDEsMHgwMCwweDAyLDB4MjQsMHgwMSwweDgwLDB4MDYsMHgzYywKLTB4MTAsMHgwMCwweGE1LDB4MjcsMHgyMSwweDIwLDB4ZTAsMHgwMCwweGU4LDB4NTEsMHhjNiwweDI0LDB4MGMsMHgwMCwweGUzLDB4YWMsCi0weDE0LDB4MDAsMHhlMiwweGEwLDB4MTgsMHgwMCwweGJmLDB4YWYsMHhmYiwweDBjLDB4MDAsMHgwYywweDEzLDB4MDAsMHhhMCwweGEzLAotMHgxOCwweDAwLDB4YmYsMHg4ZiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMCwweDAwLDB4YmQsMHgyNywKLTB4ZDAsMHhmZiwweGJkLDB4MjcsMHgyNSwweGIwLDB4MDIsMHgzYywweDIwLDB4MDAsMHhiNCwweGFmLDB4MWMsMHgwMCwweGIzLDB4YWYsCi0weDAzLDB4MGQsMHg0NCwweDM0LDB4MmMsMHgwMCwweGJmLDB4YWYsMHgyOCwweDAwLDB4YjYsMHhhZiwweDI0LDB4MDAsMHhiNSwweGFmLAotMHgxOCwweDAwLDB4YjIsMHhhZiwweDE0LDB4MDAsMHhiMSwweGFmLDB4MTAsMHgwMCwweGIwLDB4YWYsMHgwMCwweDAwLDB4ODMsMHg5MCwKLTB4NDIsMHgwMCwweDQ1LDB4MzQsMHhmZiwweDAwLDB4NzMsMHgzMCwweDcwLDB4MDAsMHg3NCwweDMyLDB4MjksMHgwMCwweDgwLDB4MTYsCi0weDhmLDB4MDAsMHg2MiwweDMyLDB4ZmYsMHhmZiwweDAyLDB4MjQsMHgwMCwweDAwLDB4YTIsMHhhMCwweDAwLDB4NjAsMHgwMSwweDQwLAotMHgwMSwweDAwLDB4MjEsMHgzNCwweDAxLDB4MDAsMHgyMSwweDM4LDB4MDAsMHg2MCwweDgxLDB4NDAsMHgwZiwweDAwLDB4MTEsMHgzYywKLTB4MTgsMHgwMCwweDA0LDB4MjQsMHhkZCwweDQ0LDB4MDAsMHgwYywweGZmLDB4ZmYsMHgyNSwweDM2LDB4MjEsMHg4MCwweDQwLDB4MDAsCi0weDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMCwweDYwLDB4ODEsMHg0MCwweGIzLDB4MGEsMHgwMCwweDBjLAotMHg2NCwweDAwLDB4MDQsMHgyNCwweDAwLDB4ODAsMHgwNiwweDM2LDB4ZmYsMHhmZiwweDI1LDB4MzYsMHhiYSwweDQ0LDB4MDAsMHgwYywKLTB4MTgsMHgwMCwweDA0LDB4MjQsMHg4NCwweDBhLDB4MDAsMHgwYywweDAzLDB4MDAsMHgwNCwweDI0LDB4MjEsMHgzMCwweGEwLDB4MDIsCi0weGZmLDB4ZmYsMHgyNSwweDM2LDB4NWMsMHgwMCwweDgwLDB4MTYsMHgyMSwweDIwLDB4MDAsMHgwMCwweDJjLDB4MDAsMHhiZiwweDhmLAotMHgyOCwweDAwLDB4YjYsMHg4ZiwweDI0LDB4MDAsMHhiNSwweDhmLDB4MjAsMHgwMCwweGI0LDB4OGYsMHgxYywweDAwLDB4YjMsMHg4ZiwKLTB4MTgsMHgwMCwweGIyLDB4OGYsMHgxNCwweDAwLDB4YjEsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weDQyLDB4MDAsMHg0MiwweDM0LDB4MzAsMHgwMCwweGJkLDB4MjcsMHgwMCwweDAwLDB4NDAsMHhhMCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MiwweGEwLDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwKLTB4MDEsMHgwMCwweDIxLDB4MzgsMHgwMCwweDYwLDB4ODEsMHg0MCwweDBmLDB4MDAsMHgxMSwweDNjLDB4MjEsMHgyMCwweDAwLDB4MDAsCi0weGRkLDB4NDQsMHgwMCwweDBjLDB4ZmYsMHhmZiwweDI1LDB4MzYsMHgyMSwweGE4LDB4NDAsMHgwMCwweDAwLDB4NjAsMHgwMSwweDQwLAotMHgwMSwweDAwLDB4MjEsMHgzNCwweDAwLDB4NjAsMHg4MSwweDQwLDB4YjMsMHgwYSwweDAwLDB4MGMsMHg2NCwweDAwLDB4MDQsMHgyNCwKLTB4N2EsMHg0MiwweDAwLDB4MGMsMHgwMSwweDAwLDB4MDQsMHgyNCwweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsCi0weDAxLDB4MDAsMHgyMSwweDM4LDB4MDAsMHg2MCwweDgxLDB4NDAsMHgyMSwweDIwLDB4MDAsMHgwMCwweGRkLDB4NDQsMHgwMCwweDBjLAotMHhmZiwweGZmLDB4MjUsMHgzNiwweDIxLDB4YjAsMHg0MCwweDAwLDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwKLTB4MDAsMHg2MCwweDgxLDB4NDAsMHg2NCwweDAwLDB4MDQsMHgyNCwweGIzLDB4MGEsMHgwMCwweDBjLDB4MDgsMHgwMCwweDEwLDB4M2MsCi0weGZmLDB4ZmYsMHgxMCwweDM2LDB4N2EsMHg0MiwweDAwLDB4MGMsMHgyMSwweDIwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgxMiwweDNjLAotMHgyNCwweDMwLDB4YjAsMHgwMiwweDI1LDB4MzAsMHhkMiwweDAwLDB4ZmYsMHhmZiwweDI1LDB4MzYsMHhiYSwweDQ0LDB4MDAsMHgwYywKLTB4MjEsMHgyMCwweDAwLDB4MDAsMHhiMywweDBhLDB4MDAsMHgwYywweDY0LDB4MDAsMHgwNCwweDI0LDB4MjQsMHg4MCwweGQwLDB4MDIsCi0weDdhLDB4NDIsMHgwMCwweDBjLDB4MDEsMHgwMCwweDA0LDB4MjQsMHgyNSwweDMwLDB4MTIsMHgwMiwweGZmLDB4ZmYsMHgyNSwweDM2LAotMHhiYSwweDQ0LDB4MDAsMHgwYywweDIxLDB4MjAsMHgwMCwweDAwLDB4YjMsMHgwYSwweDAwLDB4MGMsMHg2NCwweDAwLDB4MDQsMHgyNCwKLTB4N2EsMHg0MiwweDAwLDB4MGMsMHgyMSwweDIwLDB4MDAsMHgwMCwweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsCi0weDAxLDB4MDAsMHgyMSwweDM4LDB4MDAsMHg2MCwweDgxLDB4NDAsMHgwZiwweDAwLDB4MTEsMHgzYywweDE4LDB4MDAsMHgwNCwweDI0LAotMHhkZCwweDQ0LDB4MDAsMHgwYywweGZmLDB4ZmYsMHgyNSwweDM2LDB4MjEsMHg4MCwweDQwLDB4MDAsMHgwMCwweDYwLDB4MDEsMHg0MCwKLTB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMCwweDYwLDB4ODEsMHg0MCwweGIzLDB4MGEsMHgwMCwweDBjLDB4NjQsMHgwMCwweDA0LDB4MjQsCi0weDAwLDB4ODAsMHgwNiwweDM2LDB4ZmYsMHhmZiwweDI1LDB4MzYsMHhiYSwweDQ0LDB4MDAsMHgwYywweDE4LDB4MDAsMHgwNCwweDI0LAotMHg4NCwweDBhLDB4MDAsMHgwYywweDAzLDB4MDAsMHgwNCwweDI0LDB4MjEsMHgzMCwweGEwLDB4MDIsMHhmZiwweGZmLDB4MjUsMHgzNiwKLTB4YTYsMHhmZiwweDgwLDB4MTIsMHgyMSwweDIwLDB4MDAsMHgwMCwweDI1LDB4YjAsMHgwMiwweDNjLDB4MDMsMHgwZCwweDQyLDB4MzQsCi0weDAwLDB4MDAsMHg1MywweGEwLDB4YmEsMHg0NCwweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweGIzLDB4MGEsMHgwMCwweDBjLAotMHg2NCwweDAwLDB4MDQsMHgyNCwweDdhLDB4NDIsMHgwMCwweDBjLDB4MDEsMHgwMCwweDA0LDB4MjQsMHhmZiwweGZmLDB4MjUsMHgzNiwKLTB4MjEsMHgzMCwweGMwLDB4MDIsMHhiYSwweDQ0LDB4MDAsMHgwYywweDIxLDB4MjAsMHgwMCwweDAwLDB4YjMsMHgwYSwweDAwLDB4MGMsCi0weDY0LDB4MDAsMHgwNCwweDI0LDB4MmMsMHgwMCwweGJmLDB4OGYsMHgyOCwweDAwLDB4YjYsMHg4ZiwweDI0LDB4MDAsMHhiNSwweDhmLAotMHgyMCwweDAwLDB4YjQsMHg4ZiwweDFjLDB4MDAsMHhiMywweDhmLDB4MTgsMHgwMCwweGIyLDB4OGYsMHgxNCwweDAwLDB4YjEsMHg4ZiwKLTB4MTAsMHgwMCwweGIwLDB4OGYsMHgyMSwweDIwLDB4MDAsMHgwMCwweDdhLDB4NDIsMHgwMCwweDA4LDB4MzAsMHgwMCwweGJkLDB4MjcsCi0weGQwLDB4ZmYsMHhiZCwweDI3LDB4MjgsMHgwMCwweGI0LDB4YWYsMHgwMiwweDgwLDB4MTQsMHgzYywweDJjLDB4MDAsMHhiZiwweGFmLAotMHgyNCwweDAwLDB4YjMsMHhhZiwweDIwLDB4MDAsMHhiMiwweGFmLDB4MWMsMHgwMCwweGIxLDB4YWYsMHgxOCwweDAwLDB4YjAsMHhhZiwKLTB4NjgsMHgxNSwweDg2LDB4MjYsMHgwYywweDQwLDB4YzIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4ODIsMHgxNywweDAyLDB4MDAsCi0weDAxLDB4MDAsMHg0MiwweDMwLDB4MDcsMHgwMCwweDQwLDB4MTQsMHg2OCwweDE1LDB4ODUsMHgyNiwweDA4LDB4NDAsMHhjMiwweDhjLAotMHgwMSwweDAwLDB4MDMsMHgyNCwweDQyLDB4MTcsMHgwMiwweDAwLDB4MDMsMHgwMCwweDQyLDB4MzAsMHhmMCwweDAwLDB4NDMsMHgxMCwKLTB4MjUsMHhiMCwweDAyLDB4M2MsMHgwYywweDQwLDB4YTIsMHg4YywweDAxLDB4MDAsMHgwMywweDI0LDB4ODIsMHgxNywweDAyLDB4MDAsCi0weDAxLDB4MDAsMHg0NCwweDMwLDB4MGEsMHgwMCwweDgzLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJjLDB4MDAsMHhiZiwweDhmLAotMHgyOCwweDAwLDB4YjQsMHg4ZiwweDI0LDB4MDAsMHhiMywweDhmLDB4MjAsMHgwMCwweGIyLDB4OGYsMHgxYywweDAwLDB4YjEsMHg4ZiwKLTB4MTgsMHgwMCwweGIwLDB4OGYsMHgyMSwweDEwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MzAsMHgwMCwweGJkLDB4MjcsCi0weDA4LDB4NDAsMHhhMiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MiwweDE3LDB4MDIsMHgwMCwweDAzLDB4MDAsMHg0MiwweDMwLAotMHhmMiwweGZmLDB4NDQsMHgxNCwweDI1LDB4YjAsMHgwMiwweDNjLDB4MGUsMHgwYywweDQ0LDB4MzQsMHgwMCwweDAwLDB4ODMsMHg5MCwKLTB4MDAsMHgwMSwweDAyLDB4MjQsMHhmZiwweDAwLDB4NjMsMHgzMCwweDAxLDB4MDAsMHg2MywweDI0LDB4OGIsMHgwMSwweDYyLDB4MTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgzLDB4YTAsMHg2OCwweDE1LDB4ODQsMHgyNiwweDEwLDB4NDAsMHg4MiwweDhjLAotMHgwMSwweDAwLDB4MDMsMHgyNCwweDgyLDB4MTcsMHgwMiwweDAwLDB4YTQsMHgwMSwweDQzLDB4MTAsMHgwZiwweDAwLDB4MTAsMHgzYywKLTB4YzcsMHg0MiwweDkyLDB4OTAsMHg2OCwweDE1LDB4OTAsMHgyNiwweGM2LDB4NDIsMHgwMywweDkyLDB4MjUsMHhiMCwweDExLDB4M2MsCi0weDYyLDB4MGMsMHgyMiwweDM2LDB4MDAsMHgwMCwweDUyLDB4YTAsMHgxNywweDAxLDB4NjAsMHgxMCwweDAxLDB4MDAsMHgwMiwweDI0LAotMHgwMywweDBkLDB4MjMsMHgzNiwweDAwLDB4MDAsMHg2MiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg3MCwweDAwLDB4NDIsMHgzMCwKLTB4M2UsMHgwMSwweDQwLDB4MTQsMHg2MywweDBjLDB4MjMsMHgzNiwweGM0LDB4NDIsMHgwMiwweDk2LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDIzLDB4MjAsMHg1MiwweDAwLDB4MmIsMHgxOCwweDUyLDB4MDAsMHgyMywweDEwLDB4NDIsMHgwMiwweDBhLDB4MTAsMHg4MywweDAwLAotMHgwMywweDAwLDB4NDIsMHgyYywweDBiLDB4MDEsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjNCwweDQyLDB4MDMsMHg5NiwKLTB4NjMsMHgwYywweDIyLDB4MzYsMHgwMCwweDAwLDB4NDMsMHhhMCwweDY4LDB4MTUsMHg4MywweDI2LDB4YzMsMHg0MiwweDYyLDB4OTAsCi0weDA4LDB4NDAsMHg2NiwweDhjLDB4YzIsMHg0MiwweDcyLDB4YTAsMHgyMywweDIwLDB4NTIsMHgwMCwweDJiLDB4MzgsMHg0MiwweDAyLAotMHgyMywweDUwLDB4NDIsMHgwMiwweDAyLDB4MmMsMHgwNiwweDAwLDB4MGIsMHg1MCwweDg3LDB4MDAsMHgzZiwweDAwLDB4YTUsMHgzMCwKLTB4M2YsMHgwMCwweGM0LDB4MzAsMHgyNCwweDAwLDB4MDIsMHgyNCwweDIwLDB4MDAsMHgwMywweDI0LDB4MjMsMHgxMCwweDQ0LDB4MDAsCi0weDJkLDB4MDEsMHg0MCwweDE1LDB4MjMsMHgxOCwweDY1LDB4MDAsMHgyMSwweDMwLDB4ODAsMHgwMCwweDIxLDB4NDgsMHhhMCwweDAwLAotMHgwMiwweDgwLDB4MGIsMHgzYywweDY4LDB4MTUsMHg4MywweDI2LDB4ODAsMHgxMCwweDA2LDB4MDAsMHgyMSwweDEwLDB4NDMsMHgwMCwKLTB4MGMsMHg0MCwweDYzLDB4OGMsMHgxOCwweDQwLDB4NDQsMHg4YywweGZmLDB4MDMsMHg2NywweDMwLDB4MWIsMHgwMSwweGUwLDB4MTAsCi0weDgyLDB4MmQsMHgwNCwweDAwLDB4MDAsMHgwMiwweDYyLDB4MzAsMHgwNCwweDAwLDB4NDAsMHgxMCwweDE4LDB4MDAsMHhlNSwweDAwLAotMHgwMCwweGZjLDB4MDIsMHgyNCwweDI1LDB4MzgsMHhlMiwweDAwLDB4MTgsMHgwMCwweGU1LDB4MDAsMHg4MiwweDIyLDB4MDMsMHgwMCwKLTB4ZmYsMHgwMywweDg0LDB4MzAsMHgwMCwweDAyLDB4ODMsMHgzMCwweDEyLDB4MTAsMHgwMCwweDAwLDB4MDIsMHgxMiwweDAyLDB4MDAsCi0weDAzLDB4MDAsMHg2MCwweDEwLDB4ZmYsMHgwMywweDQ4LDB4MzAsMHgwMCwweGZjLDB4MDIsMHgyNCwweDI1LDB4MjAsMHg4MiwweDAwLAotMHgxOCwweDAwLDB4ODUsMHgwMCwweDgwLDB4MmQsMHgwNSwweDAwLDB4MjUsMHhiMCwweDA2LDB4M2MsMHg4MCwweDBjLDB4YzcsMHgzNCwKLTB4OTQsMHgwYywweGM2LDB4MzQsMHgxMiwweDIwLDB4MDAsMHgwMCwweDAyLDB4MjIsMHgwNCwweDAwLDB4M2YsMHgwMCwweDgyLDB4MzAsCi0weDAwLDB4MTQsMHgwMiwweDAwLDB4MjUsMHgyOCwweGEyLDB4MDAsMHgyNSwweDI4LDB4YTgsMHgwMCwweDEwLDB4MDAsMHhhNSwweGFmLAotMHgwMCwweDAwLDB4ZTUsMHhhYywweDAwLDB4MDAsMHhjMywweDhjLDB4ZmYsMHgwZiwweDAyLDB4M2MsMHhjMCwweDAzLDB4ODQsMHgzMCwKLTB4ZmYsMHhmZiwweDQyLDB4MzQsMHg4MCwweDI1LDB4MDQsMHgwMCwweDI0LDB4MTgsMHg2MiwweDAwLDB4MjUsMHgxOCwweDY0LDB4MDAsCi0weDEwLDB4MDAsMHhhMywweGFmLDB4MDAsMHgwMCwweGMzLDB4YWMsMHg2OCwweDE1LDB4ODMsMHgyNiwweDA4LDB4NDAsMHg2MiwweDhjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDEsMHg0MCwweDA0LDB4YzAsMHgyOCwweDA5LDB4MDAsMHgyMSwweDI4LDB4YTMsMHgwMCwKLTB4YWMsMHg0MCwweGEzLDB4OTAsMHgyNSwweGIwLDB4MDQsMHgzYywweDIyLDB4MGEsMHg4MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4YTAsCi0weGFkLDB4NDAsMHhhNiwweDkwLDB4MjMsMHgwYSwweDgyLDB4MzQsMHgyNCwweDBhLDB4ODcsMHgzNCwweDAwLDB4MDAsMHg0NiwweGEwLAotMHhhZSwweDQwLDB4YTMsMHg5MCwweDI1LDB4MGEsMHg4NiwweDM0LDB4MjYsMHgwYSwweDg4LDB4MzQsMHgwMCwweDAwLDB4ZTMsMHhhMCwKLTB4YWYsMHg0MCwweGEyLDB4OTAsMHgyNywweDBhLDB4ODcsMHgzNCwweDI4LDB4MGEsMHg4OSwweDM0LDB4MDAsMHgwMCwweGMyLDB4YTAsCi0weGIwLDB4NDAsMHhhMywweDkwLDB4MjksMHgwYSwweDg0LDB4MzQsMHgwMCwweDAwLDB4MDMsMHhhMSwweGIxLDB4NDAsMHhhMiwweDkwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMiwweGEwLDB4YjIsMHg0MCwweGEzLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDIzLDB4YTEsMHhiMywweDQwLDB4YTIsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgyLDB4YTAsCi0weDhlLDB4N2QsMHg2MywweDkxLDB4MjIsMHgwMCwweDAyLDB4MjQsMHgwMywweDAwLDB4NjIsMHgxMCwweDkyLDB4MDAsMHgwMiwweDI0LAotMHg2MiwweGZmLDB4NjIsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjgsMHgxNSwweDgyLDB4MjYsMHgwOCwweDQwLDB4NDMsMHg4YywKLTB4MDEsMHgwMCwweDQ0LDB4MzksMHgyNCwweDAwLDB4MDIsMHgyNCwweDAyLDB4MWEsMHgwMywweDAwLDB4M2YsMHgwMCwweDYzLDB4MzAsCi0weDAxLDB4MDAsMHg4NCwweDMwLDB4MDQsMHgwMSwweDgwLDB4MTAsMHgyMywweDI4LDB4NDMsMHgwMCwweDQyLDB4MTgsMHgwYSwweDAwLAotMHg0MCwweDEwLDB4MDMsMHgwMCwweDIxLDB4NTAsMHg0MywweDAwLDB4NjgsMHgxNSwweDgzLDB4MjYsMHhjMywweDQyLDB4NjIsMHg5MCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyYiwweDEwLDB4NDIsMHgwMiwweDA4LDB4MDEsMHg0MCwweDEwLDB4MjEsMHgyMCwweDAwLDB4MDAsCi0weDJiLDB4MTAsMHg0NSwweDAxLDB4MDcsMHgwMCwweDQwLDB4MTAsMHgyNCwweDAwLDB4MDQsMHgyNCwweDA4LDB4NDAsMHg2MiwweDhjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MTIsMHgwMiwweDAwLDB4M2YsMHgwMCwweDQyLDB4MzAsMHgyMSwweDIwLDB4NGEsMHgwMCwKLTB4NjgsMHgxNSwweDgzLDB4MjYsMHg4MCwweDEwLDB4MDQsMHgwMCwweDEwLDB4NDAsMHg2NiwweDhjLDB4MjEsMHgxMCwweDQzLDB4MDAsCi0weDE4LDB4NDAsMHg0NCwweDhjLDB4ODIsMHgzYSwweDA2LDB4MDAsMHhmZiwweDAzLDB4ZTcsMHgzMCwweGYwLDB4MDAsMHhlMCwweDEwLAotMHg4MiwweDJkLDB4MDQsMHgwMCwweDAwLDB4MDIsMHhlMiwweDMwLDB4MDQsMHgwMCwweDQwLDB4MTAsMHgxOCwweDAwLDB4ZTUsMHgwMCwKLTB4MDAsMHhmYywweDAyLDB4MjQsMHgyNSwweDM4LDB4ZTIsMHgwMCwweDE4LDB4MDAsMHhlNSwweDAwLDB4MDIsMHgyNSwweDA2LDB4MDAsCi0weGZmLDB4MDMsMHg4NCwweDMwLDB4MDAsMHgwMiwweDgzLDB4MzAsMHgxMiwweDEwLDB4MDAsMHgwMCwweDAyLDB4MTIsMHgwMiwweDAwLAotMHgwMywweDAwLDB4NjAsMHgxMCwweGZmLDB4MDMsMHg0OCwweDMwLDB4MDAsMHhmYywweDAyLDB4MjQsMHgyNSwweDIwLDB4ODIsMHgwMCwKLTB4MTgsMHgwMCwweDg1LDB4MDAsMHg4MCwweDJkLDB4MDUsMHgwMCwweDI1LDB4YjAsMHgwNiwweDNjLDB4ODgsMHgwYywweGM3LDB4MzQsCi0weDljLDB4MGMsMHhjNiwweDM0LDB4MTIsMHgyMCwweDAwLDB4MDAsMHgwMiwweDIyLDB4MDQsMHgwMCwweDNmLDB4MDAsMHg4MiwweDMwLAotMHgwMCwweDE0LDB4MDIsMHgwMCwweDI1LDB4MjgsMHhhMiwweDAwLDB4MjUsMHgyOCwweGE4LDB4MDAsMHgxMCwweDAwLDB4YTUsMHhhZiwKLTB4MDAsMHgwMCwweGU1LDB4YWMsMHgwMCwweDAwLDB4YzMsMHg4YywweGZmLDB4MGYsMHgwMiwweDNjLDB4YzAsMHgwMywweDg0LDB4MzAsCi0weGZmLDB4ZmYsMHg0MiwweDM0LDB4ODAsMHgyNSwweDA0LDB4MDAsMHgyNCwweDE4LDB4NjIsMHgwMCwweDI1LDB4MTgsMHg2NCwweDAwLAotMHgxMCwweDAwLDB4YTMsMHhhZiwweDAwLDB4MDAsMHhjMywweGFjLDB4OTUsMHg1NCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4ODAsMHgwYywweDQyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHg4YywweGMwLDB4ZmYsMHgwMiwweDNjLDB4MjEsMHg4OCwweDAwLDB4MDAsCi0weDI0LDB4MjgsMHg2MiwweDAwLDB4YzAsMHhmZiwweDA0LDB4M2MsMHg4YSwweDU1LDB4MDAsMHgwOCwweDE4LDB4NDAsMHhjMywweDI0LAotMHgwMSwweDAwLDB4MzEsMHgyNiwweDI1LDB4MDAsMHgyMiwweDJlLDB4MGQsMHgwMCwweDQwLDB4MTAsMHgwMiwweDgwLDB4MGIsMHgzYywKLTB4MDAsMHgwMCwweDYyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MTAsMHg0NCwweDAwLDB4ZjgsMHhmZiwweDQ1LDB4MTQsCi0weDA0LDB4MDAsMHg2MywweDI0LDB4MDgsMHg0MCwweGMyLDB4OGMsMHhjMCwweGZmLDB4MDMsMHgyNCwweDNmLDB4MDAsMHgyNCwweDMyLAotMHgyNCwweDEwLDB4NDMsMHgwMCwweDI1LDB4MTAsMHg0NCwweDAwLDB4MDgsMHg0MCwweGMyLDB4YWMsMHgwMiwweDgwLDB4MGIsMHgzYywKLTB4OGUsMHg3ZCwweDYzLDB4OTEsMHgyMiwweDAwLDB4MDIsMHgyNCwweDNlLDB4MDAsMHg2MiwweDEwLDB4OTIsMHgwMCwweDAyLDB4MjQsCi0weDNkLDB4MDAsMHg2MiwweDEwLDB4MjUsMHhiMCwweDAyLDB4M2MsMHgyNSwweGIwLDB4MDIsMHgzYywweDI0LDB4MGEsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4NDQsMHg4YywweDNmLDB4M2YsMHgwMywweDNjLDB4M2YsMHgzZiwweDYzLDB4MzQsMHgyNCwweDIwLDB4ODMsMHgwMCwKLTB4MDIsMHg4MCwweDAyLDB4M2MsMHgwMiwweDgwLDB4MDMsMHgzYywweDE2LDB4NTYsMHg1MywweDI0LDB4MWUsMHg1NywweDcyLDB4MjQsCi0weDIxLDB4ODgsMHgwMCwweDAwLDB4YjEsMHg1NSwweDAwLDB4MDgsMHgxMCwweDAwLDB4YTQsMHhhZiwweGQ0LDB4NDUsMHgwMCwweDBjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ3LDB4MDAsMHg0MCwweDEwLDB4NjgsMHgxNSwweDg1LDB4MjYsMHgwMSwweDAwLDB4MzEsMHgyNiwKLTB4MjEsMHgwMCwweDIyLDB4MmUsMHgxNywweDAwLDB4NDAsMHgxMCwweDY4LDB4MTUsMHg4NCwweDI2LDB4YzAsMHg4MCwweDExLDB4MDAsCi0weDEwLDB4MDAsMHhhNCwweDI3LDB4MjEsMHgyOCwweDEzLDB4MDIsMHhkNCwweDQ1LDB4MDAsMHgwYywweDA0LDB4MDAsMHgwNiwweDI0LAotMHgyMSwweDI4LDB4MTIsMHgwMiwweDEwLDB4MDAsMHhhNCwweDI3LDB4ZjAsMHhmZiwweDQwLDB4MTQsMHgwNCwweDAwLDB4MDYsMHgyNCwKLTB4NjgsMHgxNSwweDg1LDB4MjYsMHgwOCwweDQwLDB4YTMsMHg4YywweGMwLDB4ZmYsMHgwMiwweDNjLDB4ZmYsMHhmZiwweDQyLDB4MzQsCi0weDNmLDB4MDAsMHgyNCwweDMyLDB4MjQsMHgxOCwweDYyLDB4MDAsMHgwMCwweDI0LDB4MDQsMHgwMCwweGZmLDB4N2YsMHgwMiwweDNjLAotMHgyNSwweDE4LDB4NjQsMHgwMCwweGZmLDB4ZmYsMHg0MiwweDM0LDB4MjQsMHgxOCwweDYyLDB4MDAsMHgwOCwweDQwLDB4YTMsMHhhYywKLTB4NjgsMHgxNSwweDg0LDB4MjYsMHgwYywweDQwLDB4ODMsMHg4YywweDAwLDB4NDAsMHgwMiwweDNjLDB4MjUsMHgxOCwweDYyLDB4MDAsCi0weDI1LDB4YjAsMHgwMiwweDNjLDB4MGUsMHgwYywweDQyLDB4MzQsMHgwYywweDQwLDB4ODMsMHhhYywweDAwLDB4MDAsMHg0MCwweGEwLAotMHg4ZiwweDU0LDB4MDAsMHgwOCwweDY4LDB4MTUsMHg4NSwweDI2LDB4YzYsMHg0MiwweDAyLDB4YTIsMHhiYSwweDU0LDB4MDAsMHgwOCwKLTB4YzQsMHg0MiwweDEyLDB4YTYsMHhkYSwweDUzLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4YzksMHg1NCwweDAwLDB4MDgsCi0weGM0LDB4NDIsMHgxMiwweGE2LDB4MjUsMHhiMCwweDAyLDB4M2MsMHg4OCwweDBjLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0NCwweDhjLAotMHgwMiwweDgwLDB4MDMsMHgzYywweDY4LDB4MTUsMHg2NiwweDI0LDB4YzAsMHhmZiwweDAyLDB4M2MsMHgyNCwweDI4LDB4ODIsMHgwMCwKLTB4MjEsMHg4OCwweDAwLDB4MDAsMHhjMCwweGZmLDB4MDQsMHgzYywweGU2LDB4NTUsMHgwMCwweDA4LDB4MTgsMHg0MCwweGMzLDB4MjQsCi0weDAxLDB4MDAsMHgzMSwweDI2LDB4MjUsMHgwMCwweDIyLDB4MmUsMHhiOCwweGZmLDB4NDAsMHgxMCwweDI1LDB4YjAsMHgwMiwweDNjLAotMHgwMCwweDAwLDB4NjIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgxMCwweDQ0LDB4MDAsMHhmOCwweGZmLDB4NDUsMHgxNCwKLTB4MDQsMHgwMCwweDYzLDB4MjQsMHgwOCwweDQwLDB4YzIsMHg4YywweDNmLDB4MDAsMHgyMywweDMyLDB4ZmYsMHhjMCwweDA0LDB4MjQsCi0weDI0LDB4MTAsMHg0NCwweDAwLDB4MDAsMHgxYSwweDAzLDB4MDAsMHgyNSwweDEwLDB4NDMsMHgwMCwweDljLDB4NTUsMHgwMCwweDA4LAotMHgwOCwweDQwLDB4YzIsMHhhYywweDA4LDB4NDAsMHhhMywweDhjLDB4YzAsMHhmZiwweDAyLDB4M2MsMHhmZiwweGZmLDB4NDIsMHgzNCwKLTB4M2YsMHgwMCwweDI0LDB4MzIsMHgyNCwweDE4LDB4NjIsMHgwMCwweDAwLDB4MjQsMHgwNCwweDAwLDB4MjUsMHgxOCwweDY0LDB4MDAsCi0weDAwLDB4ODAsMHgwMiwweDNjLDB4YzUsMHg1NSwweDAwLDB4MDgsMHgyNSwweDE4LDB4NjIsMHgwMCwweGNjLDB4ZmYsMHgwMiwweDI0LAotMHgwMCwweDAwLDB4NjIsMHhhMCwweGNkLDB4NTQsMHgwMCwweDA4LDB4NjgsMHgxNSwweDgzLDB4MjYsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4OTQsMHgwYywweDQzLDB4MzQsMHg4MCwweDBjLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0NCwweGFjLDB4MDAsMHgwMCwweDYwLDB4YWMsCi0weDBkLDB4NTUsMHgwMCwweDA4LDB4NjgsMHgxNSwweDgzLDB4MjYsMHgyZiwweDAwLDB4ZTAsMHgxMCwweDIxLDB4MzAsMHgwMCwweDAwLAotMHgyYiwweDEwLDB4NDIsMHgwMSwweDIxLDB4MjAsMHg4YSwweDAwLDB4MDAsMHgwMCwweDQyLDB4MzgsMHgyNCwweDAwLDB4MDYsMHgyNCwKLTB4MmIsMHgxOCwweDQzLDB4MDEsMHgwYiwweDMwLDB4ODIsMHgwMCwweGNkLDB4ZmUsMHg2MCwweDEwLDB4MjAsMHgwMCwweDA5LDB4MjQsCi0weDY4LDB4MTUsMHg4MywweDI2LDB4MGEsMHg0MCwweDYyLDB4OTQsMHgwMiwweDgwLDB4MGIsMHgzYywweDNmLDB4MDAsMHg0MiwweDMwLAotMHhlMCwweDU0LDB4MDAsMHgwOCwweDIxLDB4NDgsMHg0YSwweDAwLDB4MjEsMHgyOCwweGEzLDB4MDAsMHhiNCwweDQxLDB4YTMsMHg5MCwKLTB4MjUsMHhiMCwweDA0LDB4M2MsMHgyMiwweDBhLDB4ODIsMHgzNCwweDAwLDB4MDAsMHg0MywweGEwLDB4YjUsMHg0MSwweGE2LDB4OTAsCi0weDIzLDB4MGEsMHg4MiwweDM0LDB4MjQsMHgwYSwweDg3LDB4MzQsMHgwMCwweDAwLDB4NDYsMHhhMCwweGI2LDB4NDEsMHhhMywweDkwLAotMHgyNSwweDBhLDB4ODYsMHgzNCwweDI2LDB4MGEsMHg4OCwweDM0LDB4MDAsMHgwMCwweGUzLDB4YTAsMHhiNywweDQxLDB4YTIsMHg5MCwKLTB4MjcsMHgwYSwweDg3LDB4MzQsMHgyOCwweDBhLDB4ODksMHgzNCwweDAwLDB4MDAsMHhjMiwweGEwLDB4YjgsMHg0MSwweGEzLDB4OTAsCi0weDI5LDB4MGEsMHg4NCwweDM0LDB4MDAsMHgwMCwweDAzLDB4YTEsMHhiOSwweDQxLDB4YTIsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4ZTIsMHhhMCwweGJhLDB4NDEsMHhhMywweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjMsMHhhMSwKLTB4YmIsMHg0MSwweGEyLDB4OTAsMHgyZCwweDU1LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4YTAsCi0weGFkLDB4NTQsMHgwMCwweDA4LDB4NjgsMHgxNSwweDg0LDB4MjYsMHgyMywweDEwLDB4OGEsMHgwMCwweDJiLDB4MTgsMHg0NCwweDAxLAotMHgyYiwweDIwLDB4NDUsMHgwMSwweDBiLDB4MzAsMHg0MywweDAwLDB4YTEsMHhmZSwweDgwLDB4MTQsMHgyMywweDQ4LDB4YWEsMHgwMCwKLTB4ZGUsMHg1NCwweDAwLDB4MDgsMHgyMSwweDQ4LDB4MDAsMHgwMCwweGZmLDB4ZmYsMHg0MywweDI1LDB4NDIsMHgxOCwweDAzLDB4MDAsCi0weDQwLDB4MTAsMHgwMywweDAwLDB4MjEsMHgxMCwweDQzLDB4MDAsMHg0MCwweDU1LDB4MDAsMHgwOCwweDAxLDB4MDAsMHg0YSwweDI0LAotMHgyNSwweGIwLDB4MDIsMHgzYywweDljLDB4MGMsMHg0MywweDM0LDB4ODgsMHgwYywweDQyLDB4MzQsMHgwMCwweDAwLDB4NDQsMHhhYywKLTB4MDAsMHgwMCwweDYwLDB4YWMsMHg5NSwweDU0LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHg0MCwweDYyLDB4OGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgxMiwweDAyLDB4MDAsMHgzZiwweDAwLDB4NDIsMHgzMCwweDIzLDB4MTgsMHg0YSwweDAwLAotMHgyYiwweDEwLDB4NDIsMHgwMSwweDRlLDB4NTUsMHgwMCwweDA4LDB4MGIsMHgyMCwweDYyLDB4MDAsMHhmZiwweGZmLDB4MDUsMHgzNiwKLTB4NjAsMHgwMCwweDA2LDB4MjQsMHhiYSwweDQ0LDB4MDAsMHgwYywweDI0LDB4MDAsMHgwNCwweDI0LDB4ODQsMHgwYSwweDAwLDB4MGMsCi0weGU4LDB4MDMsMHgwNCwweDI0LDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAxLDB4MDAsMHgyMSwweDM4LAotMHgwMCwweDYwLDB4ODEsMHg0MCwweDI0LDB4MDAsMHgwNCwweDI0LDB4ZGQsMHg0NCwweDAwLDB4MGMsMHhmZiwweGZmLDB4MDUsMHgzNiwKLTB4MWYsMHgwMCwweDUyLDB4MzAsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDAsMHg2MCwweDgxLDB4NDAsCi0weGIzLDB4MGEsMHgwMCwweDBjLDB4NjQsMHgwMCwweDA0LDB4MjQsMHhiNCwweDU0LDB4MDAsMHgwOCwweDY4LDB4MTUsMHg5MCwweDI2LAotMHgwMCwweGZmLDB4ODQsMHgzMCwweDAyLDB4MjIsMHgwNCwweDAwLDB4MDgsMHgwMCwweDgwLDB4MTAsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4ZmYsMHgwMCwweDAyLDB4MjQsMHgwNCwweDAwLDB4ODIsMHgxMCwweGNjLDB4ZmYsMHgwMywweDI0LDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4NGUsMHg1OCwweDQzLDB4YTAsMHgwMiwweDgwLDB4MDIsMHgzYywweDA4LDB4MDAsMHhlMCwweDAzLAotMHg0ZSwweDU4LDB4NDQsMHhhMCwweDAyLDB4MjQsMHgwNCwweDAwLDB4ZmYsMHgwMCwweDg0LDB4MzAsMHhjMCwweDEwLDB4MDQsMHgwMCwKLTB4MjEsMHgxMCwweDQ0LDB4MDAsMHg4MCwweDEwLDB4MDIsMHgwMCwweDIxLDB4MTAsMHg0NCwweDAwLDB4MDIsMHg4MCwweDAzLDB4M2MsCi0weDgwLDB4MTAsMHgwMiwweDAwLDB4NjgsMHgxNSwweDYzLDB4MjQsMHgyMCwweDAwLDB4ODQsMHgyYywweDA5LDB4MDAsMHg4MCwweDEwLAotMHgyMSwweDEwLDB4NDMsMHgwMCwweDY4LDB4NTEsMHg0MywweDhjLDB4MjUsMHhiMCwweDAyLDB4M2MsMHhjNCwweDAyLDB4NDIsMHgzNCwKLTB4MDIsMHgxOSwweDAzLDB4MDAsMHg3ZiwweDAwLDB4NjMsMHgzMCwweDAwLDB4MDAsMHg0MywweGFjLDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg4MCwweDAyLDB4M2MsMHg0NCwweDc5LDB4NDMsMHg4YywweDI1LDB4YjAsMHgwMiwweDNjLAotMHhjNCwweDAyLDB4NDIsMHgzNCwweDAyLDB4MTksMHgwMywweDAwLDB4N2YsMHgwMCwweDYzLDB4MzAsMHgwMCwweDAwLDB4NDMsMHhhYywKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MDAsMHg4NSwweDMwLDB4ZDIsMHhmZiwweGEzLDB4MjQsCi0weGZlLDB4ZmYsMHhhMiwweDI0LDB4ZGEsMHhmZiwweGE0LDB4MjQsMHgwNCwweDAwLDB4NjMsMHgyYywweDA4LDB4MDAsMHg4NCwweDJjLAotMHgwNiwweDAwLDB4NjAsMHgxNCwweGZmLDB4MDAsMHg0MiwweDMwLDB4ZjAsMHhmZiwweGEyLDB4MjQsMHhmYywweGZmLDB4YTMsMHgyNCwKLTB4MTYsMHgwMCwweDQ2LDB4MmMsMHgwMywweDAwLDB4ODAsMHgxMCwweGZmLDB4MDAsMHg2MiwweDMwLDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZmEsMHhmZiwweGEzLDB4MjQsMHhmYywweGZmLDB4YzAsMHgxMCwweDIxLDB4MTAsMHhhMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweGZmLDB4MDAsMHg2MiwweDMwLDB4MjUsMHhiMCwweDA0LDB4M2MsMHgwMywweDBkLDB4ODUsMHgzNCwKLTB4MDAsMHgwMCwweGEzLDB4OTAsMHgyZCwweDBhLDB4ODQsMHgzNCwweGZmLDB4MDAsMHg2MywweDMwLDB4MDgsMHgwMCwweDYzLDB4MzQsCi0weDAwLDB4MDAsMHhhMywweGEwLDB4MDAsMHgwMCwweGEyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGY3LDB4MDAsMHg0MiwweDMwLAotMHgwMCwweDAwLDB4YTIsMHhhMCwweDAwLDB4MDAsMHg4MywweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweDAwLDB4NjMsMHgzMCwKLTB4MDAsMHgwMCwweDgzLDB4YTAsMHgwMCwweDAwLDB4ODIsMHg5MCwweDgwLDB4ZmYsMHgwMywweDI0LDB4MjUsMHgxMCwweDQzLDB4MDAsCi0weDAwLDB4MDAsMHg4MiwweGEwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI1LDB4YjAsMHgwMiwweDNjLAotMHhmZiwweDAwLDB4MDMsMHgzYywweDgyLDB4MDEsMHg0OSwweDM0LDB4ODEsMHgwMSwweDQ4LDB4MzQsMHgyNCwweDEwLDB4ODMsMHgwMCwKLTB4MDIsMHgzYywweDAyLDB4MDAsMHgwMCwweGZmLDB4NjMsMHgzNCwweDAyLDB4ODAsMHgwMiwweDNjLDB4NjgsMHgxNSwweDQ1LDB4MjQsCi0weDAyLDB4MzIsMHgwNCwweDAwLDB4MDEsMHgwMCwweDAyLDB4MjQsMHgyNCwweDIwLDB4ODMsMHgwMCwweGMyLDB4NGMsMHhhMiwweGEwLAotMHhiMCwweDRjLDB4YTAsMHhhYywweGI0LDB4NGMsMHhhMCwweGFjLDB4YjgsMHg0YywweGEwLDB4YWMsMHgwNiwweDAwLDB4ODAsMHgxNCwKLTB4YmMsMHg0YywweGEwLDB4YWMsMHgwMCwweDAwLDB4MDIsMHg5MSwweDAwLDB4MDAsMHgyMywweDkxLDB4YzAsMHg0YywweGEyLDB4YTAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4YzEsMHg0YywweGEzLDB4YTAsMHhjMSwweDRjLDB4YTcsMHhhMCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHhjMCwweDRjLDB4YTYsMHhhMCwweDAyLDB4ODAsMHgwMywweDNjLDB4NjgsMHgxNSwweDYzLDB4MjQsMHhjMSwweDRjLDB4NjYsMHg5MCwKLTB4YzAsMHg0YywweDY1LDB4OTAsMHgyNSwweGIwLDB4MDIsMHgzYywweDgyLDB4MDEsMHg0NCwweDM0LDB4ODEsMHgwMSwweDQyLDB4MzQsCi0weDAwLDB4MDAsMHg0NSwweGEwLDB4MDAsMHgwMCwweDg2LDB4YTAsMHgwOCwweDAwLDB4ZTAsMHgwMywweGMyLDB4NGMsMHg2MCwweGEwLAotMHgwMiwweDgwLDB4MDgsMHgzYywweDY4LDB4MTUsMHgwNCwweDI1LDB4YzIsMHg0YywweDgyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MTUsMHgwMCwweDQwLDB4MTAsMHgyMSwweDE4LDB4MDAsMHgwMCwweGI0LDB4NGMsMHg4MiwweDhjLDB4YjAsMHg0YywweDg1LDB4OGMsCi0weDI1LDB4YjAsMHgwMywweDNjLDB4NDAsMHgxMSwweDAyLDB4MDAsMHgyYiwweDEwLDB4YTIsMHgwMCwweDgyLDB4MDEsMHg2NywweDM0LAotMHgwZiwweDAwLDB4NDAsMHgxMCwweDgxLDB4MDEsMHg2NiwweDM0LDB4YzEsMHg0YywweDgzLDB4OTAsMHhjMCwweDRjLDB4ODIsMHg5MCwKLTB4ZjAsMHgwMCwweDYzLDB4MzAsMHgxZiwweDAwLDB4NDIsMHgzMCwweDAwLDB4MDAsMHhjMiwweGEwLDB4MDAsMHgwMCwweGUzLDB4YTAsCi0weDY4LDB4MTUsMHgwMiwweDI1LDB4MDEsMHgwMCwweDAzLDB4MjQsMHhiYywweDRjLDB4NDAsMHhhYywweGIwLDB4NGMsMHg0MCwweGFjLAotMHhiNCwweDRjLDB4NDAsMHhhYywweGI4LDB4NGMsMHg0MCwweGFjLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4NjAsMHgwMCwKLTB4YjgsMHg0YywweDgyLDB4OGMsMHgyNSwweGIwLDB4MDMsMHgzYywweDgyLDB4MDEsMHg2OSwweDM0LDB4NDAsMHgxMSwweDAyLDB4MDAsCi0weDJiLDB4MTAsMHhhMiwweDAwLDB4MGUsMHgwMCwweDQwLDB4MTQsMHg4MSwweDAxLDB4NjYsMHgzNCwweGJjLDB4NGMsMHg4MiwweDhjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MTEsMHgwMiwweDAwLDB4MmIsMHgxMCwweGEyLDB4MDAsMHgwOCwweDAwLDB4NDAsMHgxNCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMSwweDRjLDB4ODMsMHg5MCwweGMwLDB4NGMsMHg4MiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHhjMiwweGEwLDB4MDAsMHgwMCwweDIzLDB4YTEsMHhmNywweDU2LDB4MDAsMHgwOCwweDY4LDB4MTUsMHgwMiwweDI1LAotMHhjMSwweDRjLDB4ODMsMHg5MCwweGMwLDB4NGMsMHg4MiwweDkwLDB4ZjAsMHgwMCwweDYzLDB4MzAsMHg3ZiwweDAwLDB4NDIsMHgzMCwKLTB4MDAsMHgwMCwweGMyLDB4YTAsMHgwMCwweDAwLDB4MjMsMHhhMSwweGY3LDB4NTYsMHgwMCwweDA4LDB4NjgsMHgxNSwweDAyLDB4MjUsCi0weDAyLDB4MDAsMHgwMywweDI0LDB4MDIsMHg4MCwweDAyLDB4M2MsMHgwOCwweDAwLDB4ZTAsMHgwMywweDNkLDB4NTgsMHg0MywweGEwLAotMHhjYywweGZmLDB4MDMsMHgyNCwweDAyLDB4ODAsMHgwMiwweDNjLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgzZCwweDU4LDB4NDMsMHhhMCwKLTB4MjUsMHhiMCwweDAzLDB4M2MsMHgzMywweDAyLDB4NjUsMHgzNCwweDAwLDB4MTEsMHgwNCwweDAwLDB4MDAsMHgwMCwweGEyLDB4YTAsCi0weDMwLDB4MDIsMHg2MywweDM0LDB4MDAsMHgwMCwweDY1LDB4OGMsMHgwZiwweDAwLDB4MDIsMHgzYywweGZmLDB4ZmYsMHg0MiwweDM0LAotMHgyNCwweDI4LDB4YTIsMHgwMCwweDAxLDB4MDAsMHgwMywweDI0LDB4MDQsMHgxOCwweDgzLDB4MDAsMHgwMiwweDAwLDB4YTAsMHgxMCwKLTB4MjEsMHgxMCwweDAwLDB4MDAsMHhmZiwweGZmLDB4NjIsMHgzMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGUwLDB4ZmYsMHhiZCwweDI3LDB4MTQsMHgwMCwweGIxLDB4YWYsMHgyNSwweGIwLDB4MTEsMHgzYywweDE4LDB4MDAsMHhiMiwweGFmLAotMHg0YywweDAwLDB4MjIsMHgzNiwweDFjLDB4MDAsMHhiZiwweGFmLDB4MTAsMHgwMCwweGIwLDB4YWYsMHgwMCwweDAwLDB4NDQsMHg5MCwKLTB4MDIsMHg4MCwweDAzLDB4M2MsMHgwMiwweDAwLDB4MDIsMHgyNCwweGZmLDB4MDAsMHg4NCwweDMwLDB4MDcsMHgwMCwweDgyLDB4MTAsCi0weDY4LDB4MTUsMHg3MiwweDI0LDB4MWMsMHgwMCwweGJmLDB4OGYsMHgxOCwweDAwLDB4YjIsMHg4ZiwweDE0LDB4MDAsMHhiMSwweDhmLAotMHgxMCwweDAwLDB4YjAsMHg4ZiwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjAsMHgwMCwweGJkLDB4MjcsMHhlNiwweDYzLDB4NDMsMHg5NiwKLTB4MDEsMHgwMCwweDAyLDB4MjQsMHhmNywweGZmLDB4NjIsMHgxNCwweDIxLDB4MjAsMHgwMCwweDAwLDB4MjIsMHg1NywweDAwLDB4MGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMCwweDA0LDB4MjQsMHgyMiwweDU3LDB4MDAsMHgwYywweDIxLDB4ODAsMHg0MCwweDAwLAotMHgyNSwweDgwLDB4MDIsMHgwMiwweDMzLDB4MDIsMHgyMywweDM2LDB4MDgsMHgwMCwweDAyLDB4MjQsMHhmZiwweGZmLDB4MTAsMHgzMiwKLTB4NDAsMHgwMCwweDI1LDB4MzYsMHgwMCwweDAwLDB4NjIsMHhhMCwweGVhLDB4ZmYsMHgwMCwweDE2LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHhhMiwweDk0LDB4ZTQsMHg2MywweDQzLDB4OTYsMHhmZiwweGRmLDB4NDIsMHgzMCwweDAwLDB4MjAsMHg0NCwweDM0LAotMHgwMSwweDAwLDB4NjMsMHgyNCwweGU0LDB4NjMsMHg0MywweGE2LDB4MDAsMHgwMCwweGEyLDB4YTQsMHgwMCwweDAwLDB4YTQsMHhhNCwKLTB4M2YsMHg1NywweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4ODAsMHgwMywweDNjLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weDE4LDB4MDMsMHg0MiwweDM0LDB4ODAsMHg1ZCwweDYzLDB4MjQsMHgwMCwweDAwLDB4NDMsMHhhYywweDYzLDB4MDAsMHgwMiwweDI0LAotMHhmZiwweGZmLDB4NDIsMHgyNCwweGZmLDB4ZmYsMHg0MSwweDA0LDB4ZmYsMHhmZiwweDQyLDB4MjQsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4ODgsMHg3ZCwweDQ1LDB4OTQsMHgwMiwweDgwLDB4MDMsMHgzYywweDAyLDB4ODAsMHgwMiwweDNjLDB4OGIsMHg3ZCwweDY2LDB4OTAsCi0weDk4LDB4N2QsMHg0NywweDkwLDB4MDIsMHg4MCwweDAzLDB4M2MsMHgwMiwweDgwLDB4MDIsMHgzYywweGEzLDB4N2QsMHg2OSwweDkwLAotMHhhNSwweDdkLDB4NGEsMHg5MCwweDAyLDB4ODAsMHgwMywweDNjLDB4MDIsMHg4MCwweDAyLDB4M2MsMHhhOCwweDdkLDB4NmIsMHg5MCwKLTB4YWEsMHg3ZCwweDRjLDB4OTAsMHgwNywweDAwLDB4MDMsMHgyNCwweDAyLDB4ODAsMHgwMiwweDNjLDB4MjUsMHhiMCwweDA0LDB4M2MsCi0weDk1LDB4N2QsMHg0MywweGEwLDB4YjAsMHgwMywweDg0LDB4MzQsMHgwMiwweDgwLDB4MDIsMHgzYywweDAyLDB4ODAsMHgxOCwweDNjLAotMHg4YSwweDdkLDB4MDgsMHg5MywweDAwLDB4MDAsMHg4NSwweGFjLDB4OTYsMHg3ZCwweDQwLDB4YTAsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4MDAsMHgwMCwweDg2LDB4YWMsMHgwMiwweDgwLDB4MGYsMHgzYywweDk3LDB4N2QsMHg0MCwweGEwLDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weDAwLDB4MDAsMHg4NywweGFjLDB4NjgsMHgxNSwweGVlLDB4MjUsMHhiOCwweDdkLDB4NDAsMHhhMCwweGZkLDB4ZmYsMHgwMiwweDI0LAotMHhkNSwweDRhLDB4YzIsMHhhMSwweDAxLDB4MDAsMHgwMywweDI0LDB4MDAsMHg3OCwweDAyLDB4MjQsMHhkNCwweDRhLDB4YzMsMHhhMSwKLTB4ZDgsMHg0YSwweGMyLDB4YTUsMHhmZiwweDA3LDB4MDMsMHgyNCwweDBmLDB4MDAsMHgwZCwweDMxLDB4MDIsMHgwMCwweDAyLDB4MjQsCi0weGRhLDB4NGEsMHhjMywweGE1LDB4MDAsMHgwMCwweDg4LDB4YWMsMHgwMCwweDAwLDB4ODksMHhhYywweDAwLDB4MDAsMHg4YSwweGFjLAotMHgwMCwweDAwLDB4OGIsMHhhYywweDAwLDB4MDAsMHg4YywweGFjLDB4MTcsMHgwMCwweGEyLDB4MTEsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4OGEsMHg3ZCwweDAyLDB4OTMsMHgwMSwweDAwLDB4MDMsMHgyNCwweDBmLDB4MDAsMHg0MiwweDMwLDB4MDUsMHgwMCwweDQzLDB4MTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg4MCwweDAyLDB4M2MsMHhjYSwweDdkLDB4NDAsMHhhNCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMiwweDNjLDB4NjgsMHgxNSwweGU0LDB4MjUsMHgwMiwweGJjLDB4NDIsMHgzNCwKLTB4NjgsMHg0YiwweDgyLDB4YWMsMHgxNSwweDE1LDB4MDMsMHgzYywweDAyLDB4MDIsMHgwMiwweDNjLDB4MDcsMHgwNywweDYzLDB4MzQsCi0weDY0LDB4NGIsMHg4MiwweGFjLDB4MDIsMHg4MCwweDAyLDB4M2MsMHg2MCwweDRiLDB4ODMsMHhhYywweGNhLDB4N2QsMHg0MCwweGE0LAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4OGYsMHg3ZCwweDQ0LDB4OTAsMHgwNiwweDAwLDB4MDMsMHgyNCwKLTB4MTUsMHgwMCwweDgzLDB4MTAsMHgwYiwweDAwLDB4MDIsMHgyNCwweDBhLDB4MDAsMHg4MiwweDEwLDB4MDAsMHhlMCwweDAyLDB4M2MsCi0weDY4LDB4MTUsMHhlNCwweDI1LDB4MDAsMHhiMiwweDQyLDB4MzQsMHgwMCwweDFjLDB4MDMsMHgzYywweDY4LDB4NGIsMHg4MiwweGFjLAotMHgwMCwweDFjLDB4NjMsMHgzNCwweDAwLDB4MDQsMHgwMiwweDI0LDB4NjAsMHg0YiwweDgzLDB4YWMsMHg5YSwweDU3LDB4MDAsMHgwOCwKLTB4NjQsMHg0YiwweDgyLDB4YWMsMHgwMCwweDgwLDB4MDIsMHgzYywweDAwLDB4YmMsMHg0MiwweDM0LDB4MTUsMHgxNSwweDAzLDB4M2MsCi0weDY4LDB4NGIsMHhjMiwweGFkLDB4MDcsMHgwNywweDYzLDB4MzQsMHgwMywweDAzLDB4MDIsMHgzYywweDYwLDB4NGIsMHhjMywweGFkLAotMHg5YSwweDU3LDB4MDAsMHgwOCwweDY0LDB4NGIsMHhjMiwweGFkLDB4MDAsMHhjMCwweDAyLDB4M2MsMHgwMCwweGIyLDB4NDIsMHgzNCwKLTB4MWMsMHgxYywweDAzLDB4M2MsMHg2OCwweDRiLDB4YzIsMHhhZCwweDA3LDB4MDcsMHg2MywweDM0LDB4MDAsMHgwNCwweDAyLDB4MjQsCi0weDYwLDB4NGIsMHhjMywweGFkLDB4OWEsMHg1NywweDAwLDB4MDgsMHg2NCwweDRiLDB4YzIsMHhhZCwweDI1LDB4YjAsMHgwMiwweDNjLAotMHg0ZCwweDAwLDB4NDQsMHgzNCwweGZmLDB4MDAsMHgwMywweDNjLDB4ZWMsMHgwMiwweDQyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHhhYywKLTB4MDAsMHgwMCwweDgwLDB4YTAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHg4MCwweDAzLDB4M2MsCi0weDI1LDB4YjAsMHgwMiwweDNjLDB4NjQsMHg1ZiwweDYzLDB4MjQsMHgxOCwweDAzLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0MywweGFjLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4N2YsMHgwMCwweDAyLDB4M2MsMHhmZCwweGJmLDB4NDUsMHgzNCwKLTB4ODAsMHgwNCwweDAzLDB4M2MsMHgyNSwweDI4LDB4YTMsMHgwMCwweDAwLDB4MDgsMHgwNCwweDNjLDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weDY4LDB4MTUsMHg0MiwweDI0LDB4MjUsMHgyOCwweGE0LDB4MDAsMHg0MSwweGIwLDB4MDMsMHgzYywweDAwLDB4MDAsMHg2NSwweGFjLAotMHgwNCwweDRiLDB4NDUsMHhhYywweGZjLDB4NGEsMHg0NSwweGFjLDB4MDgsMHgwMCwweDYzLDB4MzQsMHg4NiwweDAwLDB4MDUsMHgyNCwKLTB4MDAsMHgwMCwweDY1LDB4YTQsMHgwOCwweDRiLDB4NDUsMHhhNCwweDAwLDB4NGIsMHg0MCwweGFjLDB4MGEsMHg0YiwweDQwLDB4YTQsCi0weDBjLDB4NGIsMHg0NSwweGE0LDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAwLDB4NjAsMHg4MSwweDQwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4ZjgsMHg1NywweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4NDIsMHhiMCwweDAyLDB4M2MsMHhhMCwweGZmLDB4MDMsMHgyNCwweDAxLDB4MDAsMHg0MiwweDM0LDB4ZTgsMHhmZiwweGJkLDB4MjcsCi0weDIxLDB4MjAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDA1LDB4MjQsMHgwMCwweDAxLDB4MDYsMHgyNCwweDAwLDB4MDAsMHg0MywweGEwLAotMHgxMCwweDAwLDB4YmYsMHhhZiwweGM0LDB4MGMsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDAwLDB4YmYsMHg4ZiwKLTB4MDMsMHgwMCwweDA0LDB4MjQsMHgwMSwweDAwLDB4MDUsMHgyNCwweDQwLDB4MWYsMHgwNiwweDI0LDB4YzQsMHgwYywweDAwLDB4MDgsCi0weDE4LDB4MDAsMHhiZCwweDI3LDB4ZTgsMHhmZiwweGJkLDB4MjcsMHgxMCwweDAwLDB4YjAsMHhhZiwweDE0LDB4MDAsMHhiZiwweGFmLAotMHgyMSwweDViLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg4MCwweDAyLDB4M2MsMHg2OCwweDE1LDB4NDIsMHgyNCwKLTB4NDgsMHgwMSwweDAzLDB4MjQsMHhlMCwweDYzLDB4NDMsMHhhYywweGRjLDB4NjMsMHg0MywweGFjLDB4MjEsMHg4MCwweDQwLDB4MDAsCi0weDFmLDB4MDAsMHgwMywweDI0LDB4ZmYsMHhmZiwweDYzLDB4MjQsMHhjNCwweDRjLDB4NDAsMHhhNCwweGM2LDB4NGMsMHg0MCwweGE0LAotMHhjOCwweDRjLDB4NDAsMHhhNCwweGNhLDB4NGMsMHg0MCwweGE0LDB4Y2MsMHg0YywweDQwLDB4YTQsMHhjZSwweDRjLDB4NDAsMHhhNCwKLTB4ZDAsMHg0YywweDQwLDB4YTQsMHhkMiwweDRjLDB4NDAsMHhhNCwweGQ0LDB4NGMsMHg0MCwweGE0LDB4ZjUsMHhmZiwweDYxLDB4MDQsCi0weDI0LDB4MDAsMHg0MiwweDI0LDB4MjUsMHhiMCwweDAyLDB4M2MsMHgxMCwweDAwLDB4MDMsMHgyNCwweGIwLDB4MDMsMHg0MiwweDM0LAotMHgwMiwweDgwLDB4MDQsMHgzYywweDhjLDB4NTgsMHg4NCwweDI0LDB4MDAsMHgwMCwweDQzLDB4YWMsMHgyMSwweDI4LDB4MDAsMHgwMCwKLTB4OTcsMHg0NSwweDAwLDB4MGMsMHgwNCwweDAwLDB4MDYsMHgyNCwweGVmLDB4NWIsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDcxLDB4NWMsMHgwMCwweDBjLDB4OGMsMHg2NSwweDAwLDB4YWUsMHhhNywweDVkLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLAotMHg0YiwweDVlLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg4MCwweDAzLDB4M2MsMHg4ZSwweDdkLDB4NjQsMHg5MCwKLTB4OTIsMHgwMCwweDAyLDB4MjQsMHgwMywweDAwLDB4ODIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZjcsMHg1ZCwweDAwLDB4MGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZGQsMHg1ZCwweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDhiLDB4NWMsMHgwMCwweDBjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGU0LDB4NjMsMHgwMCwweGE2LDB4NjcsMHg1ZSwweDAwLDB4MGMsMHhlNiwweDYzLDB4MDAsMHhhNiwKLTB4MTQsMHgwMCwweGJmLDB4OGYsMHgxMCwweDAwLDB4YjAsMHg4ZiwweDAyLDB4ODAsMHgwNCwweDNjLDB4MDIsMHg4MCwweDA1LDB4M2MsCi0weGY4LDB4N2EsMHg4MiwweDI0LDB4MDAsMHg3YiwweGEzLDB4MjQsMHgxOCwweDAwLDB4YmQsMHgyNywweDA0LDB4MDAsMHg0MiwweGFjLAotMHhmOCwweDdhLDB4ODIsMHhhYywweDAwLDB4N2IsMHhhMywweGFjLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwNCwweDAwLDB4NjMsMHhhYywKLTB4ZTgsMHhmZiwweGJkLDB4MjcsMHgxMCwweDAwLDB4YjAsMHhhZiwweDAxLDB4ODAsMHgwMiwweDNjLDB4MjUsMHhiMCwweDEwLDB4M2MsCi0weDE4LDB4MDMsMHgwMywweDM2LDB4MzgsMHg2MSwweDQyLDB4MjQsMHgwMCwweDAwLDB4NjIsMHhhYywweDE0LDB4MDAsMHhiZiwweGFmLAotMHg2MCwweDU3LDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4ZDUsMHg1OCwweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDAzLDB4MjQsMHgwMiwweDgwLDB4MDIsMHgzYywweGZkLDB4NWEsMHgwMCwweDBjLDB4ZGIsMHg2MCwweDQzLDB4YTAsCi0weGQxLDB4NTcsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMiwweDQxLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwYiwweDU4LDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4NDQsMHgwMCwweDAzLDB4MzYsMHgwMCwweDAwLDB4NjIsMHg5NCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg2MiwweGE0LDB4ZDksMHg1NywweDAwLDB4MGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZmEsMHg1NywweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM5LDB4NWEsMHgwMCwweDBjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDhlLDB4NWEsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHgzYywKLTB4YjQsMHgyNCwweDg0LDB4MjQsMHhlNiwweDVhLDB4MDAsMHgwYywweDAxLDB4MDAsMHgwNSwweDI0LDB4MDEsMHg4MCwweDA0LDB4M2MsCi0weDA4LDB4MWUsMHg4NCwweDI0LDB4ZTYsMHg1YSwweDAwLDB4MGMsMHgwMiwweDAwLDB4MDUsMHgyNCwweDgxLDB4NGUsMHgwMCwweDBjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwNCwweDNjLDB4NTQsMHgzNCwweDg0LDB4MjQsMHhlNiwweDVhLDB4MDAsMHgwYywKLTB4MDMsMHgwMCwweDA1LDB4MjQsMHgwMiwweDgwLDB4MDIsMHgzYywweDk4LDB4N2QsMHg0MywweDkwLDB4NDMsMHgwMCwweDA0LDB4MzYsCi0weDI5LDB4MDAsMHg2MCwweDEwLDB4ZDgsMHgwMCwweDEwLDB4MzYsMHgwNywweDAwLDB4MDIsMHgyNCwweDJiLDB4MDAsMHg2MiwweDEwLAotMHgyNSwweGIwLDB4MDQsMHgzYywweDEwLDB4MDIsMHg4NiwweDM0LDB4NDMsMHgwMCwweDg1LDB4MzQsMHgwMywweDAwLDB4MDIsMHgyNCwKLTB4MTAsMHgwMCwweDAzLDB4MjQsMHgwMCwweDAwLDB4YTIsMHhhMCwweGQ4LDB4MDAsMHg4NCwweDM0LDB4MDAsMHgwMCwweGMzLDB4YTAsCi0weDAwLDB4MDAsMHg4MiwweDkwLDB4ODAsMHhmZiwweDAzLDB4MjQsMHg0MiwweGIwLDB4MDUsMHgzYywweDI1LDB4MTAsMHg0MywweDAwLAotMHgwMCwweDAwLDB4ODIsMHhhMCwweDI1LDB4YjAsMHgwNCwweDNjLDB4NDQsMHgwMCwweDg0LDB4MzQsMHgwMCwweDAwLDB4ODIsMHg5NCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAwLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg4MiwweGE0LDB4MDAsMHgwMCwweGEzLDB4OTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDYzLDB4MzQsMHgwMCwweDAwLDB4YTMsMHhhMCwweGUwLDB4NTcsMHgwMCwweDBjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4ODAsMHgwNCwweDNjLDB4MDgsMHgwMCwweDg0LDB4MjQsMHgyMSwweDI4LDB4MDAsMHgwMCwKLTB4MjEsMHgzMCwweDAwLDB4MDAsMHgzMSwweDFjLDB4MDAsMHgwYywweDIxLDB4MzgsMHgwMCwweDAwLDB4ZjgsMHg1NywweDAwLDB4MGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MTQsMHgwMCwweGJmLDB4OGYsMHgxMCwweDAwLDB4YjAsMHg4ZiwweDAxLDB4MDAsMHgwMiwweDI0LAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDE4LDB4MDAsMHhiZCwweDI3LDB4MDAsMHgwMCwweDgwLDB4YTAsMHgwMCwweDAwLDB4MDMsMHg5MiwKLTB4ODAsMHhmZiwweDAyLDB4MjQsMHgyNSwweDE4LDB4NjIsMHgwMCwweDAwLDB4MDAsMHgwMywweGEyLDB4MjUsMHhiMCwweDA0LDB4M2MsCi0weDQ0LDB4MDAsMHg4NCwweDM0LDB4MDAsMHgwMCwweDgyLDB4OTQsMHg0MiwweGIwLDB4MDUsMHgzYywweGMwLDB4MDAsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4ODIsMHhhNCwweDAwLDB4MDAsMHhhMywweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4NjMsMHgzNCwKLTB4MDAsMHgwMCwweGEzLDB4YTAsMHhlMCwweDU3LDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg4MCwweDA0LDB4M2MsCi0weDA4LDB4MDAsMHg4NCwweDI0LDB4MjEsMHgyOCwweDAwLDB4MDAsMHgyMSwweDMwLDB4MDAsMHgwMCwweDMxLDB4MWMsMHgwMCwweDBjLAotMHgyMSwweDM4LDB4MDAsMHgwMCwweGY4LDB4NTcsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNCwweDAwLDB4YmYsMHg4ZiwKLTB4MTAsMHgwMCwweGIwLDB4OGYsMHgwMSwweDAwLDB4MDIsMHgyNCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MTgsMHgwMCwweGJkLDB4MjcsCi0weDIxLDB4MjAsMHgwMCwweDAwLDB4MjAsMHhiMCwweDA2LDB4M2MsMHhmZiwweGZmLDB4MDUsMHgzNCwweDIxLDB4MTgsMHg4NiwweDAwLAotMHgwNCwweDAwLDB4ODQsMHgyNCwweDJhLDB4MTAsMHhhNCwweDAwLDB4MDAsMHgwMCwweDYwLDB4YWMsMHhmYiwweGZmLDB4NDAsMHgxMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHhmZiwweGJkLDB4MjcsCi0weDI1LDB4YjAsMHgwNCwweDNjLDB4NDQsMHgwMCwweGJmLDB4YWYsMHg0MCwweDAwLDB4YmUsMHhhZiwweDNjLDB4MDAsMHhiNywweGFmLAotMHgzOCwweDAwLDB4YjYsMHhhZiwweDM0LDB4MDAsMHhiNSwweGFmLDB4MzAsMHgwMCwweGI0LDB4YWYsMHgyYywweDAwLDB4YjMsMHhhZiwKLTB4MjgsMHgwMCwweGIyLDB4YWYsMHgyNCwweDAwLDB4YjEsMHhhZiwweDIwLDB4MDAsMHhiMCwweGFmLDB4MGEsMHgwMCwweDgzLDB4MzQsCi0weDAwLDB4MDAsMHg2MiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDAwLDB4NDIsMHgzMCwweDBjLDB4MDAsMHg0MCwweDEwLAotMHg0YywweDg3LDB4MDIsMHgzYywweDAwLDB4MDAsMHg2MiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDAwLDB4NDIsMHgzMCwKLTB4NjYsMHgwMSwweDQwLDB4MTAsMHg0YywweDg3LDB4MDIsMHgzYywweDU0LDB4MDAsMHg4MywweDM0LDB4NTAsMHgwMCwweDgyLDB4MzQsCi0weDAwLDB4MDAsMHg0NSwweGFjLDB4MDAsMHgwMCwweDY1LDB4YTQsMHhmOSwweDU4LDB4MDAsMHgwOCwweDAyLDB4ODAsMHgwMywweDNjLAotMHg1NCwweDAwLDB4ODUsMHgzNCwweDAwLDB4ZTAsMHg0MiwweDM0LDB4NTAsMHgwMCwweDg0LDB4MzQsMHgxMiwweDAxLDB4MDMsMHgyNCwKLTB4MDAsMHgwMCwweDgyLDB4YWMsMHgwMCwweDAwLDB4YTMsMHhhYywweDAyLDB4ODAsMHgwMywweDNjLDB4NjgsMHgxNSwweDYyLDB4MjQsCi0weGQ1LDB4NGEsMHg0MywweDkwLDB4ZGEsMHg0YSwweDQ1LDB4OTQsMHgyNSwweGIwLDB4MWUsMHgzYywweDFjLDB4MDAsMHhhMywweGEzLAotMHg2MCwweDRiLDB4NDMsMHg4YywweDU4LDB4MDAsMHhjNiwweDM3LDB4ZmYsMHhmZiwweDA0LDB4MjQsMHgxMCwweDAwLDB4YTMsMHhhZiwKLTB4NjQsMHg0YiwweDQzLDB4OGMsMHg1YywweDAwLDB4YzcsMHgzNywweDYwLDB4MDAsMHhjOCwweDM3LDB4MTQsMHgwMCwweGEzLDB4YWYsCi0weDY4LDB4NGIsMHg0MiwweDhjLDB4NjQsMHgwMCwweGM5LDB4MzcsMHg4YSwweDAwLDB4Y2EsMHgzNywweDE4LDB4MDAsMHhhMiwweGFmLAotMHgyNCwweDEwLDB4MDIsMHgzYywweDIxLDB4MjgsMHhhMiwweDAwLDB4NGMsMHg4MSwweDAyLDB4M2MsMHgwMCwweGUwLDB4NDIsMHgzNCwKLTB4MDAsMHgwMCwweGMyLDB4YWMsMHg5NiwweDAxLDB4MDMsMHgyNCwweDI4LDB4MjgsMHgwMiwweDI0LDB4MDAsMHgwMCwweGUzLDB4YWMsCi0weDg5LDB4MDAsMHhjYiwweDM3LDB4MDAsMHgwMCwweDA0LDB4YWQsMHg4YywweDAwLDB4Y2MsMHgzNywweDAwLDB4MDAsMHgyNCwweGFkLAotMHgwOSwweDAwLDB4MDMsMHgyNCwweDAwLDB4MDAsMHg0MiwweGE1LDB4MTAsMHgxMCwweDAyLDB4MjQsMHgwMCwweDAwLDB4NjMsMHhhMSwKLTB4OGUsMHgwMCwweGNkLDB4MzcsMHgwMCwweDAwLDB4ODIsMHhhNSwweDBhLDB4MGEsMHgwMywweDI0LDB4MTMsMHgwMCwweDAyLDB4MjQsCi0weDkwLDB4MDAsMHhjZSwweDM3LDB4MDAsMHgwMCwweGEzLDB4YTUsMHgwMCwweDAwLDB4YzIsMHhhMSwweDI1LDB4YjAsMHgwMiwweDNjLAotMHg0MCwweDAwLDB4MDMsMHgyNCwweDkxLDB4MDAsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4YTAsMHgyNSwweGIwLDB4MDMsMHgzYywKLTB4M2EsMHgwMSwweDAyLDB4MjQsMHg5MiwweDAwLDB4NjMsMHgzNCwweDAwLDB4MDAsMHg2MiwweGE0LDB4YjUsMHgwMCwweGQxLDB4MzcsCi0weDIxLDB4MDAsMHgwMywweDI0LDB4MDAsMHgwMCwweDIzLDB4YTIsMHgxMCwweDAwLDB4YTIsMHg4ZiwweGEwLDB4MDAsMHhkMiwweDM3LAotMHhhNCwweDAwLDB4ZDMsMHgzNywweDAwLDB4MDAsMHg0MiwweGFlLDB4MTQsMHgwMCwweGEzLDB4OGYsMHhhOCwweDAwLDB4ZDQsMHgzNywKLTB4YWMsMHgwMCwweGQ1LDB4MzcsMHgwMCwweDAwLDB4NjMsMHhhZSwweDE4LDB4MDAsMHhhMiwweDhmLDB4MjUsMHhiMCwweDAzLDB4M2MsCi0weGIwLDB4MDAsMHg2MywweDM0LDB4MDAsMHgwMCwweDgyLDB4YWUsMHgyMSwweDEwLDB4MDIsMHgzYywweGZmLDB4NzcsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4YTIsMHhhZSwweDI1LDB4YjAsMHgwMiwweDNjLDB4ZDgsMHgwMCwweDQyLDB4MzQsMHgwMCwweDAwLDB4NjUsMHhhYywKLTB4MDAsMHgwMCwweDQwLDB4YTAsMHgxYywweDAwLDB4YTIsMHg5MywweDI1LDB4YjAsMHgwMywweDNjLDB4YjQsMHgwMCwweDYzLDB4MzQsCi0weDAwLDB4MDAsMHg2MiwweGEwLDB4MjUsMHhiMCwweDAzLDB4M2MsMHgwNCwweDAwLDB4MDIsMHgyNCwweGI2LDB4MDAsMHg2MywweDM0LAotMHgwMCwweDAwLDB4NjIsMHhhMCwweDI1LDB4YjAsMHgwMywweDNjLDB4MGYsMHgwMCwweDAyLDB4MjQsMHhiYSwweDAwLDB4NjMsMHgzNCwKLTB4YjksMHgwMCwweGRmLDB4MzcsMHgwMCwweDAwLDB4ZTQsMHhhMywweDAwLDB4MDAsMHg2MiwweGE0LDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weDFhLDB4MDEsMHg0MiwweDM0LDB4MTYsMHgwMSwweGQwLDB4MzcsMHgxOCwweDAxLDB4Y2YsMHgzNywweDAwLDB4MDAsMHgwMCwweGE2LAotMHgyNSwweGIwLDB4MDMsMHgzYywweDAwLDB4MDAsMHhlMCwweGE1LDB4MDAsMHgwMCwweDQwLDB4YTQsMHhmZiwweGZmLDB4MDIsMHgzYywKLTB4ZmYsMHgwZiwweDQyLDB4MzQsMHhkYywweDAwLDB4NjMsMHgzNCwweDAwLDB4MDAsMHg2MiwweGFjLDB4MmYsMHgwMCwweDAzLDB4M2MsCi0weDI1LDB4YjAsMHgwMiwweDNjLDB4MzIsMHgzMiwweDYzLDB4MzQsMHhkMCwweDAxLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0MywweGFjLAotMHg1ZSwweDAwLDB4MDIsMHgzYywweDI1LDB4YjAsMHgwMywweDNjLDB4MzIsMHg0MywweDQyLDB4MzQsMHhkNCwweDAxLDB4NjMsMHgzNCwKLTB4MDAsMHgwMCwweDYyLDB4YWMsMHgwOCwweDAwLDB4MDMsMHgzYywweDI1LDB4YjAsMHgwMiwweDNjLDB4MzAsMHhhNSwweDYzLDB4MzQsCi0weGQ4LDB4MDEsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4YWMsMHhkYywweDAxLDB4YzQsMHgzNywweDAyLDB4ODAsMHgwMywweDNjLAotMHg0OSwweGE1LDB4MDIsMHgzNCwweDhlLDB4N2QsMHg2ZCwweDkwLDB4MDAsMHgwMCwweDgyLDB4YWMsMHhjMiwweDAwLDB4MDIsMHgzYywKLTB4MWEsMHgwNiwweDAzLDB4MjQsMHg1MSwweDEwLDB4NDIsMHgzNCwweGUwLDB4MDEsMHhjNSwweDM3LDB4ZjQsMHgwMSwweGM2LDB4MzcsCi0weGY4LDB4MDEsMHhjNywweDM3LDB4MDcsMHgwNywweDA0LDB4MjQsMHgwMCwweDAwLDB4YTMsMHhhNCwweDAwLDB4MDIsMHhjOCwweDM3LAotMHgwMCwweDAwLDB4YzQsMHhhNCwweDI2LDB4MDAsMHgwMywweDI0LDB4MDAsMHgwMCwweGUyLDB4YWMsMHgwMywweDAyLDB4YzksMHgzNywKLTB4MDQsMHgwMCwweDAyLDB4MjQsMHgwMCwweDAwLDB4MDMsMHhhNSwweDM2LDB4MDIsMHhjYSwweDM3LDB4MDAsMHgwMCwweDIyLDB4YTEsCi0weGMwLDB4MDEsMHgwMywweDI0LDB4MGMsMHgwMCwweDAyLDB4MjQsMHgzNCwweDAyLDB4Y2IsMHgzNywweDAwLDB4MDAsMHg0MiwweGExLAotMHgzNywweDAyLDB4Y2MsMHgzNywweDAwLDB4MDAsMHg2MywweGE1LDB4MDMsMHgwMCwweDAyLDB4MjQsMHgyMiwweDAwLDB4MDMsMHgyNCwKLTB4MDAsMHgwMCwweDgyLDB4YTEsMHhkNiwweDAwLDB4YTMsMHgxMSwweDFiLDB4MWIsMHgwMiwweDNjLDB4MTMsMHgxMywweDAyLDB4M2MsCi0weDEzLDB4MTMsMHg0MiwweDM0LDB4NjAsMHgwMSwweGMzLDB4MzcsMHg2NCwweDAxLDB4YzQsMHgzNywweDY4LDB4MDEsMHhjNSwweDM3LAotMHg3YywweDAxLDB4Y2EsMHgzNywweDZjLDB4MDEsMHhjNiwweDM3LDB4NzAsMHgwMSwweGM3LDB4MzcsMHg3NCwweDAxLDB4YzgsMHgzNywKLTB4NzgsMHgwMSwweGM5LDB4MzcsMHgwMCwweDAwLDB4NjIsMHhhYywweDAwLDB4MDAsMHg4MiwweGFjLDB4MDIsMHg4MCwweDAzLDB4M2MsCi0weDAwLDB4MDAsMHhhMiwweGFjLDB4MDAsMHgwMCwweGMyLDB4YWMsMHgwMCwweDAwLDB4ZTIsMHhhYywweDAwLDB4MDAsMHgwMiwweGFkLAotMHgwMCwweDAwLDB4MjIsMHhhZCwweDAwLDB4MDAsMHg0MiwweGFkLDB4OGUsMHg3ZCwweDY1LDB4OTAsMHgyNSwweGIwLDB4MGMsMHgzYywKLTB4MDEsMHg3MCwweDAzLDB4M2MsMHg4MCwweDAxLDB4ODIsMHgzNSwweDA4LDB4NWYsMHg2MywweDM0LDB4MjIsMHgwMCwweDA0LDB4MjQsCi0weDAwLDB4MDAsMHg0MywweGFjLDB4YjUsMHgwMCwweGE0LDB4MTAsMHgwZiwweDFmLDB4MDIsMHgzYywweDkyLDB4MDAsMHgwMiwweDI0LAotMHhiMiwweDAwLDB4YTIsMHgxMCwweDBmLDB4MWYsMHgwMiwweDNjLDB4MGYsMHgxMCwweDAyLDB4M2MsMHgwMCwweGYwLDB4NTEsMHgzNCwKLTB4ZjcsMHgwMSwweDkyLDB4MzUsMHgxNSwweGYwLDB4NGQsMHgzNCwweDc3LDB4MDAsMHgwZSwweDI0LDB4ODQsMHgwMSwweDg3LDB4MzUsCi0weDg4LDB4MDEsMHg4OCwweDM1LDB4MTAsMHhmMCwweDQ0LDB4MzQsMHg4YywweDAxLDB4ODUsMHgzNSwweDA1LDB4ZjAsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4ZWQsMHhhYywweDkwLDB4MDEsMHg4MywweDM1LDB4MDAsMHgwMCwweDA0LDB4YWQsMHg5NCwweDAxLDB4ODYsMHgzNSwKLTB4MDAsMHgwMCwweGEyLDB4YWMsMHhmNSwweDBmLDB4MDIsMHgyNCwweDAwLDB4MDAsMHg3MSwweGFjLDB4MjUsMHhiMCwweDA1LDB4M2MsCi0weDAwLDB4MDAsMHhjMiwweGFjLDB4OTgsMHgwMSwweDg5LDB4MzUsMHg5YywweDAxLDB4OGEsMHgzNSwweGYwLDB4MGYsMHgwMywweDI0LAotMHgwZCwweDAwLDB4MDIsMHgyNCwweDAwLDB4MDAsMHgyMywweGFkLDB4YTAsMHgwMSwweDhiLDB4MzUsMHgwMCwweDAwLDB4NDIsMHhhZCwKLTB4YTcsMHgwMSwweGI3LDB4MzQsMHhmNiwweDAxLDB4OGMsMHgzNSwweGZmLDB4ZmYsMHgwMiwweDI0LDB4MDAsMHgwMCwweDZkLDB4YWQsCi0weDAwLDB4MDAsMHg4ZSwweGExLDB4MDAsMHgwMCwweDRlLDB4YTIsMHgwMCwweDAwLDB4ZTIsMHhhMiwweDI1LDB4YjAsMHgwMiwweDNjLAotMHhhOCwweDAxLDB4YjYsMHgzNCwweGZmLDB4ZmYsMHgwOSwweDI0LDB4YWMsMHgwMSwweDQyLDB4MzQsMHgwMCwweDAwLDB4YzksMHhhZSwKLTB4MDMsMHgwNCwweDA0LDB4M2MsMHgwMCwweDAwLDB4NDksMHhhYywweDA3LDB4MDgsMHgwMywweDNjLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weDAxLDB4MDIsMHg4NCwweDM0LDB4MDUsMHgwNiwweDYzLDB4MzQsMHhiNCwweDAxLDB4YjEsMHgzNCwweGI4LDB4MDEsMHhiMiwweDM0LAotMHhiYywweDAxLDB4YjMsMHgzNCwweGIwLDB4MDEsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQ0LDB4YWMsMHgwMCwweDAwLDB4MjMsMHhhZSwKLTB4MjUsMHhiMCwweDAyLDB4M2MsMHgwMCwweDAwLDB4NDQsMHhhZSwweDAwLDB4MDAsMHg2MywweGFlLDB4MjUsMHhiMCwweDAzLDB4M2MsCi0weDBjLDB4MDAsMHgwNiwweDI0LDB4YzAsMHgwMSwweGI0LDB4MzQsMHhjMSwweDAxLDB4YjUsMHgzNCwweDBkLDB4MDAsMHgwOCwweDI0LAotMHhjMiwweDAxLDB4NjMsMHgzNCwweGMzLDB4MDEsMHg0MiwweDM0LDB4MDAsMHgwMCwweDg2LDB4YTIsMHhjNCwweDAxLDB4YWIsMHgzNCwKLTB4MDAsMHgwMCwweGE2LDB4YTIsMHhjNSwweDAxLDB4YWMsMHgzNCwweDAwLDB4MDAsMHg2NiwweGEwLDB4MGUsMHgwMCwweDA3LDB4MjQsCi0weDAwLDB4MDAsMHg0OCwweGEwLDB4YzYsMHgwMSwweGFhLDB4MzQsMHhjNywweDAxLDB4YWQsMHgzNCwweDBmLDB4MDAsMHgwMiwweDI0LAotMHgwMCwweDAwLDB4NjgsMHhhMSwweDAwLDB4MDAsMHg4NywweGExLDB4MDAsMHgwMCwweDQ3LDB4YTEsMHgwMCwweDAwLDB4YTIsMHhhMSwKLTB4NTcsMHgwMSwweDAyLDB4M2MsMHg0OCwweDAwLDB4YmYsMHgzNCwweDQ2LDB4MDAsMHhhZSwweDM0LDB4MGUsMHhlMiwweDQyLDB4MzQsCi0weDAwLDB4MDAsMHhjMCwweGE1LDB4NGMsMHgwMCwweGJlLDB4MzQsMHgwMCwweDAwLDB4ZTIsMHhhZiwweDRkLDB4MDAsMHhiOSwweDM0LAotMHg4MCwweGZmLDB4MDIsMHgyNCwweDAwLDB4MDAsMHhjMCwweGEzLDB4MDAsMHgwMCwweDIyLDB4YTMsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4YmMsMHgwMCwweDAzLDB4MjQsMHg0MCwweDAwLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0MywweGE0LDB4MjUsMHhiMCwweDAzLDB4M2MsCi0weDY0LDB4MDMsMHhiOCwweDM0LDB4ZmMsMHgzNywweDAyLDB4MjQsMHg0MCwweDAwLDB4NjMsMHgzNCwweDAwLDB4MDAsMHgwMCwweGEzLAotMHhkOCwweDAwLDB4YTcsMHgzNCwweDAwLDB4MDAsMHg2MiwweGE0LDB4MDAsMHgwMCwweGUzLDB4OTAsMHgyYSwweGIwLDB4MDQsMHgzYywKLTB4ODAsMHhmZiwweDAyLDB4MjQsMHgyNiwweGIwLDB4MDYsMHgzYywweDI1LDB4MTgsMHg2MiwweDAwLDB4MzAsMHgwMCwweDg5LDB4MzQsCi0weDIwLDB4MjAsMHgwMiwweDI0LDB4MzgsMHgwMCwweDg0LDB4MzQsMHgwMCwweDAwLDB4ZTMsMHhhMCwweDc5LDB4MDAsMHhjOCwweDM0LAotMHgwMCwweDAwLDB4ODIsMHhhNCwweDQwLDB4MDAsMHgwMywweDI0LDB4MTYsMHgwMCwweDAyLDB4MjQsMHgwMCwweDAwLDB4MjMsMHhhMSwKLTB4OTQsMHgwMCwweGFhLDB4MzQsMHgwMCwweDAwLDB4MDIsMHhhMSwweDk4LDB4MDAsMHhhYiwweDM0LDB4NjQsMHgwMCwweDAzLDB4MjQsCi0weDIyLDB4MDAsMHgwMiwweDI0LDB4MDAsMHgwMCwweDQzLDB4YTUsMHg3YywweDAwLDB4ZDEsMHgzNCwweDAwLDB4MDAsMHg2MiwweGE1LAotMHgwNCwweDAwLDB4MTIsMHgyNCwweDljLDB4MDAsMHhhYywweDM0LDB4N2EsMHgwMCwweGM2LDB4MzQsMHgyMCwweDBjLDB4MDIsMHgyNCwKLTB4MGEsMHgwMCwweDAzLDB4MjQsMHgwMCwweDAwLDB4ZDIsMHhhMCwweDlhLDB4MDAsMHhhZCwweDM0LDB4MDAsMHgwMCwweDIyLDB4YTYsCi0weDk2LDB4MDAsMHhhZSwweDM0LDB4MDAsMHgwMCwweDgzLDB4YTEsMHhmZiwweDAzLDB4MDIsMHgyNCwweDAyLDB4MDAsMHgwMywweDI0LAotMHgwMCwweDAwLDB4YTIsMHhhNSwweDAwLDB4MDAsMHhjMywweGE1LDB4MjUsMHhiMCwweDAzLDB4M2MsMHgyMCwweDAwLDB4MDIsMHgyNCwKLTB4YjcsMHgwMCwweDYzLDB4MzQsMHgwMCwweDAwLDB4NjIsMHhhMCwweDI1LDB4YjAsMHgwMiwweDNjLDB4MDksMHgwMCwweDAzLDB4MjQsCi0weDg5LDB4MDAsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4YTAsMHg0NCwweDAwLDB4YTUsMHgzNCwweDAwLDB4MDAsMHhhMiwweDk0LAotMHgwMiwweDgwLDB4MDMsMHgzYywweDY4LDB4MTUsMHg2NiwweDI0LDB4ZmYsMHhmZCwweDAzLDB4MjQsMHgyNCwweDEwLDB4NDMsMHgwMCwKLTB4MDAsMHgwMCwweGEyLDB4YTQsMHgwMCwweDAwLDB4YTMsMHg5NCwweGQ1LDB4NGEsMHhjNCwweDkwLDB4MjksMHhiMCwweDAyLDB4M2MsCi0weDQwLDB4MDAsMHg0MiwweDM0LDB4MDAsMHgwMiwweDYzLDB4MzQsMHgwMCwweDAwLDB4YTMsMHhhNCwweDAwLDB4MDAsMHg1MiwweGEwLAotMHhkMywweDBhLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4NDQsMHgwMCwweGJmLDB4OGYsMHg0MCwweDAwLDB4YmUsMHg4ZiwKLTB4M2MsMHgwMCwweGI3LDB4OGYsMHgzOCwweDAwLDB4YjYsMHg4ZiwweDM0LDB4MDAsMHhiNSwweDhmLDB4MzAsMHgwMCwweGI0LDB4OGYsCi0weDJjLDB4MDAsMHhiMywweDhmLDB4MjgsMHgwMCwweGIyLDB4OGYsMHgyNCwweDAwLDB4YjEsMHg4ZiwweDIwLDB4MDAsMHhiMCwweDhmLAotMHgwMSwweDAwLDB4MDIsMHgyNCwweDA4LDB4MDAsMHhlMCwweDAzLDB4NDgsMHgwMCwweGJkLDB4MjcsMHg1NCwweDAwLDB4ODUsMHgzNCwKLTB4MDAsMHhlMCwweDQyLDB4MzQsMHg1MCwweDAwLDB4ODQsMHgzNCwweDEyLDB4MDEsMHgwMywweDI0LDB4MDAsMHgwMCwweDgyLDB4YWMsCi0weDAwLDB4MDAsMHhhMywweGE0LDB4ZjksMHg1OCwweDAwLDB4MDgsMHgwMiwweDgwLDB4MDMsMHgzYywweDAwLDB4ZjAsMHg1MSwweDM0LAotMHhmNywweDAxLDB4OTIsMHgzNSwweDE1LDB4ZjAsMHg0ZCwweDM0LDB4YWQsMHg1OSwweDAwLDB4MDgsMHhmZiwweGZmLDB4MGUsMHgyNCwKLTB4OGIsMHg1OSwweDAwLDB4MDgsMHgxYiwweDFiLDB4NDIsMHgzNCwweDI1LDB4YjAsMHgwMywweDNjLDB4MjUsMHhiMCwweDA4LDB4M2MsCi0weGZjLDB4MzcsMHgwMiwweDI0LDB4NDAsMHgwMCwweDYzLDB4MzQsMHgwMiwweDgwLDB4MDQsMHgzYywweDAwLDB4MDAsMHg2MiwweGE0LAotMHgxNCwweDgwLDB4ODQsMHgyNCwweGZmLDB4MDAsMHgwNywweDI0LDB4YjAsMHgwMywweDA2LDB4MzUsMHgwMCwweDAwLDB4ODMsMHg5NCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweDAwLDB4NjIsMHgzMCwweDIxLDB4MTgsMHg2OCwweDAwLDB4MGEsMHgwMCwweDQ3LDB4MTAsCi0weGZmLDB4MDAsMHg2NSwweDMwLDB4MDQsMHgwMCwweDgyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MiwweGFjLAotMHgwMCwweDAwLDB4YzMsMHhhYywweDA0LDB4MDAsMHg4MiwweDhjLDB4MDgsMHgwMCwweDg0LDB4MjQsMHgwMCwweDAwLDB4YzIsMHhhYywKLTB4ZjIsMHhmZiwweGE3LDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI1LDB4YjAsMHgwOCwweDNjLDB4MDEsMHg4MCwweDAyLDB4M2MsCi0weDBjLDB4N2EsMHg0NCwweDI0LDB4ZmYsMHgwMCwweDA3LDB4MjQsMHhiMCwweDAzLDB4MDYsMHgzNSwweDAwLDB4MDAsMHg4MywweDk0LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MDAsMHg2MiwweDMwLDB4MjEsMHgxOCwweDY4LDB4MDAsMHgwYSwweDAwLDB4NDcsMHgxMCwKLTB4ZmYsMHgwMCwweDY1LDB4MzAsMHgwNCwweDAwLDB4ODIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYyLDB4YWMsCi0weDAwLDB4MDAsMHhjMywweGFjLDB4MDQsMHgwMCwweDgyLDB4OGMsMHgwOCwweDAwLDB4ODQsMHgyNCwweDAwLDB4MDAsMHhjMiwweGFjLAotMHhmMiwweGZmLDB4YTcsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDEsMHg4MCwweDAyLDB4M2MsMHgwMiwweDgwLDB4MDUsMHgzYywweDEwLDB4NmIsMHg0MiwweDI0LDB4MDIsMHg4MCwweDAzLDB4M2MsCi0weGNjLDB4N2QsMHhhMiwweGFjLDB4MDAsMHg4MCwweDAyLDB4M2MsMHg2YywweDdlLDB4NjAsMHhhYywweGNjLDB4N2QsMHhhNCwweDI0LAotMHgwMiwweDgwLDB4MDMsMHgzYywweGM4LDB4MDYsMHg0MiwweDI0LDB4NzAsMHg3ZSwweDYwLDB4YTQsMHgwOCwweDAwLDB4ODIsMHhhYywKLTB4MDIsMHg4MCwweDAzLDB4M2MsMHgwMCwweDgwLDB4MDIsMHgzYywweDcyLDB4N2UsMHg2MCwweGE0LDB4MDIsMHg4MCwweDA2LDB4M2MsCi0weDA4LDB4MGEsMHg0MiwweDI0LDB4MDAsMHg4MCwweDAzLDB4M2MsMHg3NCwweDdlLDB4YzcsMHgyNCwweDE0LDB4MDAsMHg4MiwweGFjLAotMHgzOCwweDA4LDB4NjMsMHgyNCwweDAyLDB4ODAsMHgwMiwweDNjLDB4NzQsMHg3ZSwweGMwLDB4YWMsMHgxMCwweDAwLDB4ODMsMHhhYywKLTB4MDQsMHgwMCwweGUwLDB4YWMsMHg3YywweDdlLDB4NDAsMHhhMCwweDAwLDB4ODAsMHgwMiwweDNjLDB4ODgsMHgxOSwweDQyLDB4MjQsCi0weDNjLDB4MDAsMHg4MiwweGFjLDB4MDAsMHg4MCwweDAzLDB4M2MsMHgwMCwweDgwLDB4MDIsMHgzYywweDI0LDB4MGMsMHg2MywweDI0LAotMHg3OCwweDBmLDB4NDIsMHgyNCwweDFjLDB4MDAsMHg4MywweGFjLDB4MjAsMHgwMCwweDgyLDB4YWMsMHgwMCwweDgwLDB4MDMsMHgzYywKLTB4MDAsMHg4MCwweDAyLDB4M2MsMHhjOCwweDEyLDB4NjMsMHgyNCwweDI4LDB4MTYsMHg0MiwweDI0LDB4MjQsMHgwMCwweDgzLDB4YWMsCi0weDI4LDB4MDAsMHg4MiwweGFjLDB4MDAsMHg4MCwweDAzLDB4M2MsMHgwMSwweDgwLDB4MDIsMHgzYywweDRjLDB4MWYsMHg2MywweDI0LAotMHhkMCwweDA0LDB4NDIsMHgyNCwweDJjLDB4MDAsMHg4MywweGFjLDB4MzAsMHgwMCwweDgyLDB4YWMsMHgwMCwweDgwLDB4MDMsMHgzYywKLTB4MDAsMHg4MCwweDAyLDB4M2MsMHhlNCwweDE5LDB4NjMsMHgyNCwweDAwLDB4MDMsMHg0MiwweDI0LDB4MzgsMHgwMCwweDgzLDB4YWMsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4NGMsMHgwMCwweDgyLDB4YWMsMHgyNSwweGIwLDB4MDIsMHgzYywweDA4LDB4MDAsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4NDMsMHg4YywweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDgwLDB4MGUsMHgzYywKLTB4MDIsMHg4MCwweDA4LDB4M2MsMHgwMiwweDgwLDB4MDIsMHgzYywweDAyLDB4ODAsMHgwMywweDNjLDB4ZjgsMHgwMywweDRkLDB4MjQsCi0weDAwLDB4MTQsMHg2YywweDI0LDB4MDEsMHgwMCwweDA3LDB4MjQsMHgwMCwweDAwLDB4Y2IsMHgyNSwweGZmLDB4ZmYsMHgwYSwweDI0LAotMHgwMCwweDA0LDB4MDksMHgyNSwweDgwLDB4MWEsMHgwNywweDAwLDB4MjEsMHgxMCwweDZiLDB4MDAsMHgwMCwweDAwLDB4NDIsMHhhYywKLTB4OTAsMHgwMCwweDRhLDB4YWMsMHgwMCwweDA0LDB4MDQsMHg4ZCwweDAxLDB4MDAsMHhlNywweDI0LDB4MDgsMHgwMCwweDQ1LDB4MjQsCi0weDIxLDB4MTgsMHg2ZCwweDAwLDB4MDUsMHgwMCwweGU2LDB4MjgsMHgwNCwweDAwLDB4ODIsMHhhYywweDAwLDB4MDAsMHg0NCwweGFjLAotMHgwNCwweDAwLDB4NDksMHhhYywweDAwLDB4MDQsMHgwMiwweGFkLDB4OGMsMHgwMCwweDQwLDB4YWMsMHg2YywweDAwLDB4YTMsMHhhYywKLTB4ZjAsMHhmZiwweGMwLDB4MTQsMHg2OCwweDAwLDB4YWMsMHhhYywweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweGM5LDB4YWQsCi0weDA1LDB4MDAsMHhhMiwweDJjLDB4MTMsMHgwMCwweDQwLDB4MTAsMHhmZiwweGZmLDB4MDcsMHgyNCwweDAyLDB4ODAsMHgwMiwweDNjLAotMHg4MCwweDFhLDB4MDUsMHgwMCwweDAwLDB4MDAsMHg0MiwweDI0LDB4MGUsMHgwMCwweGEwLDB4MTAsMHgyMSwweDMwLDB4NjIsMHgwMCwKLTB4OTAsMHgwMCwweGMzLDB4OGMsMHhmZiwweGZmLDB4MDIsMHgyNCwweDBhLDB4MDAsMHg2MiwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDhjLDB4MDAsMHhjMiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNiwweDAwLDB4NDAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4MDIsMHgyNCwweDg4LDB4MDAsMHhjNCwweGFjLDB4OGMsMHgwMCwweGMyLDB4YWMsMHg5MCwweDAwLDB4YzUsMHhhYywKLTB4MjEsMHgzOCwweGEwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHhlMCwweDAwLDB4MjUsMHhiMCwweDA0LDB4M2MsCi0weDAxLDB4ODAsMHgwMiwweDNjLDB4MTgsMHgwMywweDg1LDB4MzQsMHhmNCwweDZiLDB4NDIsMHgyNCwweGUwLDB4ZmYsMHhiZCwweDI3LAotMHgwMCwweDAwLDB4YTIsMHhhYywweDFiLDB4MDAsMHg4NiwweDM0LDB4ZGIsMHhmZiwweDAzLDB4MjQsMHgyNywweDAwLDB4ODQsMHgzNCwKLTB4MDcsMHgwMCwweDAyLDB4MjQsMHgxNCwweDAwLDB4YjEsMHhhZiwweDEwLDB4MDAsMHhiMCwweGFmLDB4MDAsMHgwMCwweDgzLDB4YTAsCi0weDE4LDB4MDAsMHhiZiwweGFmLDB4MDAsMHgwMCwweGMyLDB4YTAsMHgwMSwweDAwLDB4MTEsMHgyNCwweDIxLDB4ODAsMHgwMCwweDAwLAotMHg3YSwweDQyLDB4MDAsMHgwYywweDIxLDB4MjAsMHgwMCwweDAyLDB4MDEsMHgwMCwweDAyLDB4MjYsMHhmZiwweDAwLDB4NTAsMHgzMCwKLTB4MmIsMHgxOCwweDMwLDB4MDIsMHhmYSwweGZmLDB4NjAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4N2EsMHg0MiwweDAwLDB4MGMsCi0weDIxLDB4MjAsMHgwMCwweDAwLDB4MTgsMHgwMCwweGJmLDB4OGYsMHgxNCwweDAwLDB4YjEsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLAotMHgwMSwweDAwLDB4MDIsMHgyNCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjAsMHgwMCwweGJkLDB4MjcsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weDY4LDB4MTUsMHg0MiwweDI0LDB4NDAsMHgxMCwweDAzLDB4M2MsMHhmZiwweGZmLDB4NDQsMHgzMCwweDI1LDB4YzAsMHg4MywweDAwLAotMHg5NCwweDY0LDB4NTgsMHhhYywweDQwLDB4MDAsMHgxOCwweDI3LDB4YTAsMHg2NCwweDU4LDB4YWMsMHg0MCwweDAwLDB4MTgsMHgyNywKLTB4YWMsMHg2NCwweDU4LDB4YWMsMHg0MCwweDAwLDB4MTgsMHgyNywweGI4LDB4NjQsMHg1OCwweGFjLDB4NDAsMHgwMCwweDE4LDB4MjcsCi0weGUwLDB4ZmYsMHhiZCwweDI3LDB4YzQsMHg2NCwweDU4LDB4YWMsMHg0MCwweDAwLDB4MTgsMHgyNywweDFjLDB4MDAsMHhiNywweGFmLAotMHgxOCwweDAwLDB4YjYsMHhhZiwweDE0LDB4MDAsMHhiNSwweGFmLDB4MTAsMHgwMCwweGI0LDB4YWYsMHgwYywweDAwLDB4YjMsMHhhZiwKLTB4MDgsMHgwMCwweGIyLDB4YWYsMHgwNCwweDAwLDB4YjEsMHhhZiwweDAwLDB4MDAsMHhiMCwweGFmLDB4ZDAsMHg2NCwweDU4LDB4YWMsCi0weGEwLDB4NjQsMHg0NSwweDhjLDB4YWMsMHg2NCwweDQ2LDB4OGMsMHhiOCwweDY0LDB4NDcsMHg4YywweGM0LDB4NjQsMHg0OCwweDhjLAotMHhkMCwweDY0LDB4NDksMHg4YywweDQwLDB4MDAsMHgxOCwweDI3LDB4ZGMsMHg2NCwweDU4LDB4YWMsMHgyMSwweDUwLDB4MDAsMHgwMywKLTB4MjUsMHgyMCwweDgzLDB4MDAsMHg0MCwweDAwLDB4MTgsMHgyNywweDIwLDB4MTAsMHgwMywweDNjLDB4OTAsMHg2NCwweDQ0LDB4YWMsCi0weDljLDB4NjQsMHg0NSwweGFjLDB4YTgsMHg2NCwweDQ2LDB4YWMsMHhiNCwweDY0LDB4NDcsMHhhYywweGMwLDB4NjQsMHg0OCwweGFjLAotMHhjYywweDY0LDB4NDksMHhhYywweDI1LDB4YjAsMHgwNiwweDNjLDB4MjgsMHg2NCwweDQzLDB4YWMsMHgyNCwweDY0LDB4NDMsMHhhYywKLTB4MzQsMHg2NCwweDQzLDB4YWMsMHgzMCwweDY0LDB4NDMsMHhhYywweDQwLDB4NjQsMHg0MywweGFjLDB4M2MsMHg2NCwweDQzLDB4YWMsCi0weDRjLDB4NjQsMHg0MywweGFjLDB4NDgsMHg2NCwweDQzLDB4YWMsMHhlOCwweDY0LDB4NTgsMHhhYywweDAwLDB4MDIsMHgxOCwweDI3LAotMHhkOCwweDY0LDB4NGEsMHhhYywweDAwLDB4NjUsMHg1OCwweGFjLDB4NTgsMHg2NCwweDQzLDB4YWMsMHg1NCwweDY0LDB4NDMsMHhhYywKLTB4NjQsMHg2NCwweDQzLDB4YWMsMHg2MCwweDY0LDB4NDMsMHhhYywweDcwLDB4NjQsMHg0MywweGFjLDB4NmMsMHg2NCwweDQzLDB4YWMsCi0weGFjLDB4MDAsMHhjNCwweDM0LDB4YjAsMHgwMCwweGM1LDB4MzQsMHgwMCwweDAwLDB4OTIsMHg4YywweGU4LDB4NjQsMHg1MCwweDhjLAotMHgwMCwweDAwLDB4YjMsMHg4YywweDIxLDB4MTAsMHgwNCwweDNjLDB4MjMsMHgxMCwweDA5LDB4M2MsMHgyMiwweDEwLDB4MGMsMHgzYywKLTB4MDIsMHg4MCwweDE0LDB4M2MsMHgwMiwweDgwLDB4MTUsMHgzYywweDAyLDB4ODAsMHgxNiwweDNjLDB4MDIsMHg4MCwweDE3LDB4M2MsCi0weDI0LDB4MTAsMHgwNSwweDNjLDB4MjEsMHg4OCwweDAwLDB4MDMsMHgwOCwweDdiLDB4ODcsMHgyNiwweDAwLDB4MDQsMHgxOCwweDI3LAotMHgxMCwweDdiLDB4YTgsMHgyNiwweDE4LDB4N2IsMHhjYSwweDI2LDB4MjAsMHg3YiwweGViLDB4MjYsMHgwMCwweDA0LDB4MmQsMHgzNSwKLTB4MDAsMHg0MCwweDhlLDB4MzQsMHgwMCwweDgwLDB4OGYsMHgzNSwweDAwLDB4MDEsMHhjNiwweDM0LDB4ZTQsMHg2NCwweDUwLDB4YWMsCi0weGZjLDB4NjQsMHg1MSwweGFjLDB4NjQsMHg2NSwweDRkLDB4YWMsMHgyOCwweDY1LDB4NTIsMHhhYywweDM0LDB4NjUsMHg0ZSwweGFjLAotMHg1OCwweDY1LDB4NGYsMHhhYywweDRjLDB4NjUsMHg1MywweGFjLDB4MDAsMHgwMCwweGM1LDB4YWMsMHg0OCwweDY1LDB4NDUsMHhhYywKLTB4NjgsMHg2NSwweDQzLDB4YWMsMHg3NCwweDY1LDB4NTgsMHhhYywweDdjLDB4NjQsMHg0MywweGFjLDB4NzgsMHg2NCwweDQzLDB4YWMsCi0weDA2LDB4NjUsMHg0MCwweGE0LDB4MDUsMHg2NSwweDQwLDB4YTAsMHgwNCwweDY1LDB4NDAsMHhhMCwweDVjLDB4NjUsMHg0OSwweGFjLAotMHg2MCwweDY1LDB4NDksMHhhYywweDIwLDB4NjUsMHg0NCwweGFjLDB4MjQsMHg2NSwweDQ0LDB4YWMsMHgyYywweDY1LDB4NDQsMHhhYywKLTB4MzAsMHg2NSwweDQ0LDB4YWMsMHg1MCwweDY1LDB4NGMsMHhhYywweDU0LDB4NjUsMHg0YywweGFjLDB4NDQsMHg2NSwweDQ1LDB4YWMsCi0weDZjLDB4NjUsMHg0MywweGFjLDB4NzgsMHg2NSwweDU4LDB4YWMsMHgwNCwweDAwLDB4MDgsMHhhZCwweDA4LDB4N2IsMHg4NywweGFlLAotMHgwNCwweDAwLDB4NGEsMHhhZCwweDEwLDB4N2IsMHhhOCwweGFlLDB4MDQsMHgwMCwweDZiLDB4YWQsMHgxOCwweDdiLDB4Y2EsMHhhZSwKLTB4MjAsMHg3YiwweGViLDB4YWUsMHgwNCwweDAwLDB4ZTcsMHhhYywweDAyLDB4ODAsMHgwMiwweDNjLDB4MDAsMHgxNCwweDQzLDB4MjQsCi0weDIxLDB4MjAsMHhlMCwweDAwLDB4MDMsMHgwMCwweDA2LDB4MjQsMHgyMSwweDEwLDB4ODAsMHgwMCwweGZmLDB4ZmYsMHhjNiwweDI0LAotMHgwOCwweDAwLDB4NzgsMHhhYywweDAwLDB4MDAsMHg2MywweGFjLDB4MTAsMHgwMCwweDYwLDB4YWMsMHgwMCwweDAwLDB4NjcsMHhhYywKLTB4MjEsMHgyMCwweDYwLDB4MDAsMHgwNCwweDAwLDB4NjIsMHhhYywweDAwLDB4MDAsMHg0MywweGFjLDB4MDAsMHgwMSwweDE4LDB4MjcsCi0weGY1LDB4ZmYsMHhjMSwweDA0LDB4MTgsMHgwMCwweDYzLDB4MjQsMHgwMiwweDgwLDB4MDIsMHgzYywweDEwLDB4N2IsMHg0OSwweDI0LAotMHgwMiwweDgwLDB4MDMsMHgzYywweDAyLDB4ODAsMHgwMiwweDNjLDB4MDQsMHgwMCwweDI4LDB4OGQsMHg2MCwweDE0LDB4NGIsMHgyNCwKLTB4MDQsMHgwMCwweGU0LDB4YWMsMHgwMCwweDE0LDB4NmEsMHgyNCwweDAxLDB4MDAsMHgwNywweDI0LDB4MjEsMHgyOCwweDAwLDB4MDAsCi0weDA3LDB4MDAsMHgwNiwweDI0LDB4MjEsMHgyMCwweGFiLDB4MDAsMHgyMSwweDEwLDB4YWEsMHgwMCwweGZmLDB4ZmYsMHhjNiwweDI0LAotMHg2OCwweDAwLDB4NTgsMHhhYywweDcwLDB4MDAsMHg0NywweGFjLDB4MTgsMHgwMCwweGE1LDB4MjQsMHgwMCwweDAwLDB4ODksMHhhYywKLTB4MDQsMHgwMCwweDg4LDB4YWMsMHgwMCwweDAwLDB4MDQsMHhhZCwweDAwLDB4MDEsMHgxOCwweDI3LDB4ZjUsMHhmZiwweGMxLDB4MDQsCi0weDIxLDB4NDAsMHg4MCwweDAwLDB4MDIsMHg4MCwweDAyLDB4M2MsMHgxOCwweDdiLDB4NGEsMHgyNCwweDAyLDB4ODAsMHgwMywweDNjLAotMHgwMiwweDgwLDB4MDIsMHgzYywweDA0LDB4MDAsMHg0NSwweDhkLDB4MjAsMHgxNSwweDRiLDB4MjQsMHgwNCwweDAwLDB4MjQsMHhhZCwKLTB4MDIsMHgwMCwweDA3LDB4MjQsMHgwMCwweDE0LDB4NjksMHgyNCwweDIxLDB4MjAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDA2LDB4MjQsCi0weDIxLDB4NDAsMHg4YiwweDAwLDB4MjEsMHgxMCwweDg5LDB4MDAsMHhmZiwweGZmLDB4YzYsMHgyNCwweDI4LDB4MDEsMHg1OCwweGFjLAotMHgzMCwweDAxLDB4NDcsMHhhYywweDE4LDB4MDAsMHg4NCwweDI0LDB4MDAsMHgwMCwweDBhLDB4YWQsMHgwNCwweDAwLDB4MDUsMHhhZCwKLTB4MDAsMHgwMCwweGE4LDB4YWMsMHgwMCwweDAyLDB4MTgsMHgyNywweGY1LDB4ZmYsMHhjMSwweDA0LDB4MjEsMHgyOCwweDAwLDB4MDEsCi0weDAyLDB4ODAsMHgwNSwweDNjLDB4MjAsMHg3YiwweGE1LDB4MjQsMHgwNCwweDAwLDB4YTYsMHg4YywweDFjLDB4MDAsMHhiNywweDhmLAotMHgxOCwweDAwLDB4YjYsMHg4ZiwweDE0LDB4MDAsMHhiNSwweDhmLDB4MTAsMHgwMCwweGI0LDB4OGYsMHgwYywweDAwLDB4YjMsMHg4ZiwKLTB4MDgsMHgwMCwweGIyLDB4OGYsMHgwNCwweDAwLDB4YjEsMHg4ZiwweDAwLDB4MDAsMHhiMCwweDhmLDB4MDIsMHg4MCwweDA3LDB4M2MsCi0weDAyLDB4ODAsMHgwMywweDNjLDB4NTAsMHgxNSwweGU0LDB4MjQsMHgwMCwweDE0LDB4NjMsMHgyNCwweDAzLDB4MDAsMHgwMiwweDI0LAotMHgyMCwweDAwLDB4YmQsMHgyNywweDU4LDB4MDEsMHg3OCwweGFjLDB4MDQsMHgwMCwweDQ4LDB4YWQsMHgwNCwweDAwLDB4YTQsMHhhYywKLTB4NjAsMHgwMSwweDYyLDB4YWMsMHg1MCwweDE1LDB4ZTUsMHhhYywweDA0LDB4MDAsMHg4NiwweGFjLDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDAwLDB4MDAsMHhjNCwweGFjLDB4ZDAsMHhmZiwweGJkLDB4MjcsMHgwMiwweDgwLDB4MDIsMHgzYywweDIwLDB4MDAsMHhiMiwweGFmLAotMHgwMiwweDgwLDB4MDMsMHgzYywweDRjLDB4OTEsMHg1MiwweDI0LDB4MDIsMHg4MCwweDAyLDB4M2MsMHgyOCwweDAwLDB4YjQsMHhhZiwKLTB4MjQsMHgwMCwweGIzLDB4YWYsMHgxYywweDAwLDB4YjEsMHhhZiwweDE4LDB4MDAsMHhiMCwweGFmLDB4MmMsMHgwMCwweGJmLDB4YWYsCi0weGQ4LDB4OTAsMHg3MywweDI0LDB4NjgsMHgxNSwweDUwLDB4MjQsMHgyMSwweDg4LDB4MDAsMHgwMCwweDAyLDB4ODAsMHgxNCwweDNjLAotMHhlZSwweDRlLDB4MDAsMHgwYywweDIxLDB4MjAsMHgyMCwweDAyLDB4NzgsMHg1MSwweDA1LDB4OGUsMHg2YywweDAwLDB4NjYsMHg4ZSwKLTB4YjgsMHg5MCwweDgyLDB4MjYsMHg2YywweDAwLDB4NDMsMHg4ZSwweDFiLDB4MDAsMHg0NCwweDkwLDB4ZmYsMHhmMSwweDAyLDB4MjQsCi0weDIxLDB4MTgsMHg2NiwweDAwLDB4MjQsMHgyOCwweGEyLDB4MDAsMHgwMCwweDIxLDB4MDQsMHgwMCwweDQyLDB4MTgsMHgwMywweDAwLAotMHgwMCwweDAyLDB4YTUsMHgzNCwweDQ0LDB4NTEsMHgwMywweGFlLDB4NjgsMHg1MSwweDA0LDB4YWUsMHg3OCwweDUxLDB4MDUsMHhhZSwKLTB4NmMsMHg1MSwweDA0LDB4YWUsMHgyMSwweDMwLDB4MDAsMHgwMCwweDIxLDB4MTAsMHgwNiwweDAyLDB4MDEsMHgwMCwweGM2LDB4MjQsCi0weDFkLDB4MDAsMHhjMywweDI4LDB4OTksMHg1MSwweDQwLDB4YTAsMHg3YywweDUxLDB4NDAsMHhhMCwweGZhLDB4ZmYsMHg2MCwweDE0LAotMHhiNiwweDUxLDB4NDAsMHhhMCwweDAxLDB4MDAsMHgzMSwweDI2LDB4MjAsMHgwMCwweDIyLDB4MmEsMHhkNCwweDUxLDB4MDAsMHhhZSwKLTB4ZTMsMHhmZiwweDQwLDB4MTQsMHg5NCwweDAwLDB4MTAsMHgyNiwweDAyLDB4ODAsMHgwMiwweDNjLDB4MDIsMHg4MCwweDAzLDB4M2MsCi0weDY4LDB4MTUsMHg0YiwweDI0LDB4MDIsMHg4MCwweDAyLDB4M2MsMHg0YywweDkxLDB4NmYsMHgyNCwweGQ4LDB4OTAsMHg0ZCwweDI0LAotMHgwMiwweDgwLDB4MDMsMHgzYywweDAyLDB4ODAsMHgwMiwweDNjLDB4YjgsMHg5MCwweDZlLDB4MjQsMHg5OCwweDkwLDB4NGMsMHgyNCwKLTB4MjEsMHg4OCwweDAwLDB4MDAsMHg4MCwweDE4LDB4MTEsMHgwMCwweDIxLDB4MjAsMHg2ZCwweDAwLDB4MjEsMHgxMCwweDZmLDB4MDAsCi0weDIxLDB4MjgsMHgyZSwweDAyLDB4MjEsMHgzMCwweDJjLDB4MDIsMHgwMCwweDAwLDB4ODgsMHg4YywweDAwLDB4MDAsMHhhOSwweDkwLAotMHgwMCwweDAwLDB4YzcsMHg5MCwweDAwLDB4MDAsMHg0YSwweDhjLDB4MjEsMHgxMCwweDJiLDB4MDIsMHgwMSwweDAwLDB4MzEsMHgyNiwKLTB4MjEsMHgxOCwweDZiLDB4MDAsMHgxZCwweDAwLDB4MjQsMHgyYSwweGVjLDB4NDQsMHg2OCwweGFjLDB4Y2EsMHg0NCwweDQ3LDB4YTAsCi0weDYwLDB4NDUsMHg2YSwweGFjLDB4ZWYsMHhmZiwweDgwLDB4MTQsMHg5MCwweDQ0LDB4NDksMHhhMCwweDAyLDB4ODAsMHgwMiwweDNjLAotMHg2OCwweDE1LDB4NGEsMHgyNCwweDAyLDB4ODAsMHgwMywweDNjLDB4MDIsMHg4MCwweDAyLDB4M2MsMHg3NCwweDhmLDB4NmIsMHgyNCwKLTB4MTQsMHg4ZSwweDRjLDB4MjQsMHgyMSwweDg4LDB4MDAsMHgwMCwweDIxLDB4NDgsMHgwMCwweDAwLDB4MjEsMHgzMCwweDAwLDB4MDAsCi0weDIxLDB4NDAsMHgyYSwweDAxLDB4MjEsMHgzOCwweDJiLDB4MDEsMHgyMSwweDEwLDB4ZTYsMHgwMCwweDkxLDB4MDAsMHg0NCwweDkwLAotMHgwMCwweDAwLDB4NDUsMHg5MCwweDIxLDB4MTgsMHgwNiwweDAxLDB4MDEsMHgwMCwweGM2LDB4MjQsMHgwNSwweDAwLDB4YzIsMHgyOCwKLTB4YzUsMHg0MywweDY0LDB4YTAsMHhmOCwweGZmLDB4NDAsMHgxNCwweDM0LDB4NDMsMHg2NSwweGEwLDB4MjEsMHgxMCwweDJjLDB4MDIsCi0weDFkLDB4MDAsMHg0NCwweDkwLDB4MDAsMHgwMCwweDQ1LDB4OTAsMHgyMSwweDE4LDB4MmEsMHgwMiwweDAxLDB4MDAsMHgzMSwweDI2LAotMHgxZCwweDAwLDB4MjIsMHgyYSwweDczLDB4NDQsMHg2NCwweGEwLDB4NTYsMHg0NCwweDY1LDB4YTAsMHhlYiwweGZmLDB4NDAsMHgxNCwKLTB4MDUsMHgwMCwweDI5LDB4MjUsMHg1MiwweDAwLDB4MDIsMHgyNCwweDEwLDB4MDAsMHhhMiwweGEzLDB4NDEsMHgwMCwweDAzLDB4MjQsCi0weDRkLDB4MDAsMHgwMiwweDI0LDB4MDIsMHg4MCwweDA3LDB4M2MsMHgxYywweDk3LDB4ZTcsMHgyNCwweDExLDB4MDAsMHhhMywweGEzLAotMHgxMiwweDAwLDB4YTIsMHhhMywweGU4LDB4MDMsMHgwMywweDI0LDB4MDEsMHgwMCwweDAyLDB4MjQsMHgwMCwweDgwLDB4MDYsMHgzYywKLTB4MTAsMHgwMCwweGE1LDB4MjcsMHgyMSwweDIwLDB4ZTAsMHgwMCwweGYwLDB4MzcsMHhjNiwweDI0LDB4MGMsMHgwMCwweGUzLDB4YWMsCi0weDE0LDB4MDAsMHhlMiwweGEwLDB4ZmIsMHgwYywweDAwLDB4MGMsMHgxMywweDAwLDB4YTAsMHhhMywweDJjLDB4MDAsMHhiZiwweDhmLAotMHgyOCwweDAwLDB4YjQsMHg4ZiwweDI0LDB4MDAsMHhiMywweDhmLDB4MjAsMHgwMCwweGIyLDB4OGYsMHgxYywweDAwLDB4YjEsMHg4ZiwKLTB4MTgsMHgwMCwweGIwLDB4OGYsMHgwOCwweDAwLDB4ZTAsMHgwMywweDMwLDB4MDAsMHhiZCwweDI3LDB4ZTAsMHhmZiwweGJkLDB4MjcsCi0weDAyLDB4ODAsMHgwMiwweDNjLDB4NDIsMHgwMCwweDAzLDB4MjQsMHgxMCwweDAwLDB4YTMsMHhhMywweDU1LDB4NjAsMHg0MCwweGEwLAotMHg0ZSwweDAwLDB4MDMsMHgyNCwweDQzLDB4MDAsMHgwMiwweDI0LDB4MDIsMHg4MCwweDA3LDB4M2MsMHg1NCwweDk3LDB4ZTcsMHgyNCwKLTB4MTEsMHgwMCwweGEyLDB4YTMsMHgxMiwweDAwLDB4YTMsMHhhMywweGQwLDB4MDcsMHgwMiwweDI0LDB4MDEsMHgwMCwweDAzLDB4MjQsCi0weDAwLDB4ODAsMHgwNiwweDNjLDB4MTAsMHgwMCwweGE1LDB4MjcsMHgyMSwweDIwLDB4ZTAsMHgwMCwweGRjLDB4NDQsMHhjNiwweDI0LAotMHgwYywweDAwLDB4ZTIsMHhhYywweDE0LDB4MDAsMHhlMywweGEwLDB4MTgsMHgwMCwweGJmLDB4YWYsMHhmYiwweDBjLDB4MDAsMHgwYywKLTB4MTMsMHgwMCwweGEwLDB4YTMsMHgxOCwweDAwLDB4YmYsMHg4ZiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDIwLDB4MDAsMHhiZCwweDI3LDB4NDgsMHhmZCwweGJkLDB4MjcsMHhiNCwweDAyLDB4YjMsMHhhZiwweDAyLDB4ODAsMHgwMiwweDNjLAotMHgwMiwweDgwLDB4MTMsMHgzYywweDI0LDB4OTIsMHg0NiwweDI0LDB4NjgsMHgxNSwweDYzLDB4MjYsMHhiMCwweDAyLDB4YjIsMHhhZiwKLTB4YWMsMHgwMiwweGIxLDB4YWYsMHhhOCwweDAyLDB4YjAsMHhhZiwweDAzLDB4NDAsMHg2MCwweGEwLDB4MjEsMHgzOCwweGEwLDB4MDMsCi0weDkwLDB4MDAsMHhjOCwweDI0LDB4MDAsMHgwMCwweGMyLDB4OGMsMHgwNCwweDAwLDB4YzMsMHg4YywweDA4LDB4MDAsMHhjNCwweDhjLAotMHgwYywweDAwLDB4YzUsMHg4YywweDEwLDB4MDAsMHhjNiwweDI0LDB4MDAsMHgwMCwweGUyLDB4YWMsMHgwNCwweDAwLDB4ZTMsMHhhYywKLTB4MDgsMHgwMCwweGU0LDB4YWMsMHgwYywweDAwLDB4ZTUsMHhhYywweGY2LDB4ZmYsMHhjOCwweDE0LDB4MTAsMHgwMCwweGU3LDB4MjQsCi0weDAwLDB4MDAsMHhjMywweDhjLDB4MDIsMHg4MCwweDAyLDB4M2MsMHhiOCwweDkyLDB4NTgsMHgyNCwweDAwLDB4MDAsMHhlMywweGFjLAotMHg5OCwweDAwLDB4YjksMHgyNywweDAwLDB4MDEsMHgxMiwweDI3LDB4MDEsMHgwMCwweDAyLDB4OTMsMHgwNSwweDAwLDB4MDMsMHg5MywKLTB4MDksMHgwMCwweDA0LDB4OTMsMHgwZCwweDAwLDB4MDUsMHg5MywweDAwLDB4MDAsMHgxMSwweDkzLDB4MDIsMHgwMCwweDBkLDB4OTMsCi0weDA0LDB4MDAsMHgxMCwweDkzLDB4MDYsMHgwMCwweDBjLDB4OTMsMHgwOCwweDAwLDB4MGYsMHg5MywweDBhLDB4MDAsMHgwNywweDkzLAotMHgwYywweDAwLDB4MGUsMHg5MywweDBlLDB4MDAsMHgwNiwweDkzLDB4MDMsMHgwMCwweDA4LDB4OTMsMHgwNywweDAwLDB4MDksMHg5MywKLTB4MGIsMHgwMCwweDBhLDB4OTMsMHgwZiwweDAwLDB4MGIsMHg5MywweDAwLDB4MTIsMHgwMiwweDAwLDB4MDAsMHgxYSwweDAzLDB4MDAsCi0weDAwLDB4MjIsMHgwNCwweDAwLDB4MDAsMHgyYSwweDA1LDB4MDAsMHgyNSwweDEwLDB4NTEsMHgwMCwweDI1LDB4MTgsMHg3MCwweDAwLAotMHgyNSwweDIwLDB4OGYsMHgwMCwweDI1LDB4MjgsMHhhZSwweDAwLDB4MDAsMHg2YywweDBkLDB4MDAsMHgwMCwweDY0LDB4MGMsMHgwMCwKLTB4MDAsMHgzYywweDA3LDB4MDAsMHgwMCwweDM0LDB4MDYsMHgwMCwweDI1LDB4NjgsMHhhMiwweDAxLDB4MjUsMHg2MCwweDgzLDB4MDEsCi0weDI1LDB4MzgsMHhlNCwweDAwLDB4MjUsMHgzMCwweGM1LDB4MDAsMHgwMCwweDQ2LDB4MDgsMHgwMCwweDAwLDB4NGUsMHgwOSwweDAwLAotMHgwMCwweDU2LDB4MGEsMHgwMCwweDAwLDB4NWUsMHgwYiwweDAwLDB4MjUsMHg0MCwweDBkLDB4MDEsMHgyNSwweDQ4LDB4MmMsMHgwMSwKLTB4MjUsMHg1MCwweDQ3LDB4MDEsMHgyNSwweDU4LDB4NjYsMHgwMSwweDEwLDB4MDAsMHgxOCwweDI3LDB4MDAsMHgwMCwweDI4LDB4YWYsCi0weDA0LDB4MDAsMHgyOSwweGFmLDB4MDgsMHgwMCwweDJhLDB4YWYsMHgwYywweDAwLDB4MmIsMHhhZiwweGQyLDB4ZmYsMHgxMiwweDE3LAotMHgxMCwweDAwLDB4MzksMHgyNywweDAxLDB4MDAsMHgwMiwweDkzLDB4MDUsMHgwMCwweDAzLDB4OTMsMHgwMCwweDAwLDB4MDksMHg5MywKLTB4MDIsMHgwMCwweDA0LDB4OTMsMHgwNCwweDAwLDB4MDgsMHg5MywweDA2LDB4MDAsMHgwNSwweDkzLDB4MDcsMHgwMCwweDA2LDB4OTMsCi0weDAzLDB4MDAsMHgwNywweDkzLDB4MDAsMHgxMiwweDAyLDB4MDAsMHgwMCwweDFhLDB4MDMsMHgwMCwweDI1LDB4MTAsMHg0OSwweDAwLAotMHgyNSwweDE4LDB4NjgsMHgwMCwweDAwLDB4MjQsMHgwNCwweDAwLDB4MDAsMHgyYywweDA1LDB4MDAsMHgyNSwweDIwLDB4ODIsMHgwMCwKLTB4MjUsMHgyOCwweGEzLDB4MDAsMHgwMCwweDNlLDB4MDcsMHgwMCwweDAwLDB4MzYsMHgwNiwweDAwLDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weDI1LDB4MzgsMHhlNCwweDAwLDB4MjUsMHgzMCwweGM1LDB4MDAsMHhjMCwweDkzLDB4NTgsMHgyNCwweDA0LDB4MDAsMHgyNiwweGFmLAotMHgwMCwweDAwLDB4MjcsMHhhZiwweDAwLDB4MDEsMHgxMiwweDI3LDB4YTAsMHgwMSwweGI5LDB4MjcsMHgwMSwweDAwLDB4MDIsMHg5MywKLTB4MDUsMHgwMCwweDAzLDB4OTMsMHgwOSwweDAwLDB4MDQsMHg5MywweDBkLDB4MDAsMHgwNSwweDkzLDB4MDAsMHgwMCwweDExLDB4OTMsCi0weDAyLDB4MDAsMHgwZCwweDkzLDB4MDQsMHgwMCwweDEwLDB4OTMsMHgwNiwweDAwLDB4MGMsMHg5MywweDA4LDB4MDAsMHgwZiwweDkzLAotMHgwYSwweDAwLDB4MDcsMHg5MywweDBjLDB4MDAsMHgwZSwweDkzLDB4MGUsMHgwMCwweDA2LDB4OTMsMHgwMywweDAwLDB4MDgsMHg5MywKLTB4MDcsMHgwMCwweDA5LDB4OTMsMHgwYiwweDAwLDB4MGEsMHg5MywweDBmLDB4MDAsMHgwYiwweDkzLDB4MDAsMHgxMiwweDAyLDB4MDAsCi0weDAwLDB4MWEsMHgwMywweDAwLDB4MDAsMHgyMiwweDA0LDB4MDAsMHgwMCwweDJhLDB4MDUsMHgwMCwweDI1LDB4MTAsMHg1MSwweDAwLAotMHgyNSwweDE4LDB4NzAsMHgwMCwweDI1LDB4MjAsMHg4ZiwweDAwLDB4MjUsMHgyOCwweGFlLDB4MDAsMHgwMCwweDZjLDB4MGQsMHgwMCwKLTB4MDAsMHg2NCwweDBjLDB4MDAsMHgwMCwweDNjLDB4MDcsMHgwMCwweDAwLDB4MzQsMHgwNiwweDAwLDB4MjUsMHg2OCwweGEyLDB4MDEsCi0weDI1LDB4NjAsMHg4MywweDAxLDB4MjUsMHgzOCwweGU0LDB4MDAsMHgyNSwweDMwLDB4YzUsMHgwMCwweDAwLDB4NDYsMHgwOCwweDAwLAotMHgwMCwweDRlLDB4MDksMHgwMCwweDAwLDB4NTYsMHgwYSwweDAwLDB4MDAsMHg1ZSwweDBiLDB4MDAsMHgyNSwweDQwLDB4MGQsMHgwMSwKLTB4MjUsMHg0OCwweDJjLDB4MDEsMHgyNSwweDUwLDB4NDcsMHgwMSwweDI1LDB4NTgsMHg2NiwweDAxLDB4MTAsMHgwMCwweDE4LDB4MjcsCi0weDAwLDB4MDAsMHgyOCwweGFmLDB4MDQsMHgwMCwweDI5LDB4YWYsMHgwOCwweDAwLDB4MmEsMHhhZiwweDBjLDB4MDAsMHgyYiwweGFmLAotMHhkMiwweGZmLDB4MTIsMHgxNywweDEwLDB4MDAsMHgzOSwweDI3LDB4MDEsMHgwMCwweDAyLDB4OTMsMHgwNSwweDAwLDB4MDMsMHg5MywKLTB4MDAsMHgwMCwweDA5LDB4OTMsMHgwMiwweDAwLDB4MDQsMHg5MywweDA0LDB4MDAsMHgwOCwweDkzLDB4MDYsMHgwMCwweDA1LDB4OTMsCi0weDA3LDB4MDAsMHgwNiwweDkzLDB4MDMsMHgwMCwweDA3LDB4OTMsMHgwMCwweDEyLDB4MDIsMHgwMCwweDAwLDB4MWEsMHgwMywweDAwLAotMHgyNSwweDEwLDB4NDksMHgwMCwweDI1LDB4MTgsMHg2OCwweDAwLDB4MDAsMHgyNCwweDA0LDB4MDAsMHgwMCwweDJjLDB4MDUsMHgwMCwKLTB4MjUsMHgyMCwweDgyLDB4MDAsMHgyNSwweDI4LDB4YTMsMHgwMCwweDAwLDB4M2UsMHgwNywweDAwLDB4MDAsMHgzNiwweDA2LDB4MDAsCi0weDI1LDB4MzAsMHhjNSwweDAwLDB4MjUsMHgzOCwweGU0LDB4MDAsMHgwMiwweDgwLDB4MDIsMHgzYywweDA0LDB4MDAsMHgyNiwweGFmLAotMHgwMCwweDAwLDB4MjcsMHhhZiwweDY4LDB4MTUsMHg0NiwweDI0LDB4MjEsMHg1MCwweDAwLDB4MDAsMHg4MCwweDIwLDB4MGEsMHgwMCwKLTB4MjEsMHgxMCwweDlkLDB4MDAsMHgwMCwweDAwLDB4NDUsMHg4YywweDAxLDB4MDAsMHg0MywweDI1LDB4ZmYsMHgwMCwweDZhLDB4MzAsCi0weDIxLDB4MjAsMHg4NiwweDAwLDB4MjUsMHgwMCwweDQyLDB4MmQsMHhmOCwweGZmLDB4NDAsMHgxNCwweDE4LDB4NDAsMHg4NSwweGFjLAotMHgwMiwweDgwLDB4MDIsMHgzYywweDY4LDB4MTUsMHg0YiwweDI0LDB4MjEsMHg1MCwweDAwLDB4MDAsMHhjMCwweDEwLDB4MGEsMHgwMCwKLTB4MjEsMHg0OCwweDVkLDB4MDAsMHgyMSwweDM4LDB4MDAsMHgwMCwweDIxLDB4NDAsMHg0YiwweDAwLDB4MjEsMHgxMCwweDI3LDB4MDEsCi0weGEwLDB4MDEsMHg0NiwweDkwLDB4OTgsMHgwMCwweDQ1LDB4OTAsMHgwMSwweDAwLDB4ZTQsMHgyNCwweDIxLDB4MTgsMHgwNywweDAxLAotMHhmZiwweDAwLDB4ODcsMHgzMCwweDA4LDB4MDAsMHhlMiwweDJjLDB4YjQsMHg0MSwweDY2LDB4YTAsMHhmNywweGZmLDB4NDAsMHgxNCwKLTB4YWMsMHg0MCwweDY1LDB4YTAsMHgwMSwweDAwLDB4NDIsMHgyNSwweGZmLDB4MDAsMHg0YSwweDMwLDB4MjEsMHgwMCwweDQzLDB4MmQsCi0weGVmLDB4ZmYsMHg2MCwweDE0LDB4YzAsMHgxMCwweDBhLDB4MDAsMHgyNSwweGIwLDB4MDIsMHgzYywweDBhLDB4MDAsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4NDMsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjAsMHgwMCwweDYzLDB4MzAsMHg0MiwweDAwLDB4NjAsMHgxMCwKLTB4NjgsMHgxNSwweDY0LDB4MjYsMHgzMywweDAwLDB4MDIsMHgyNCwweGMxLDB4NDIsMHg2MiwweGExLDB4MWMsMHgwMCwweDAzLDB4MjQsCi0weDBmLDB4MDAsMHgwMiwweDI0LDB4YmMsMHg0MiwweDYzLDB4YTEsMHhiZCwweDQyLDB4NjIsMHhhMSwweDY4LDB4MTUsMHg2NSwweDI2LAotMHgwOCwweDQwLDB4YTQsMHg4YywweGZmLDB4N2YsMHgwOCwweDNjLDB4ZmYsMHhmZiwweDA4LDB4MzUsMHhjMCwweGZmLDB4MDIsMHgyNCwKLTB4MjQsMHgyMCwweDg4LDB4MDAsMHgyNCwweDIwLDB4ODIsMHgwMCwweDBjLDB4MDAsMHg4NCwweDM0LDB4ZmYsMHhjMCwweDAyLDB4MjQsCi0weDI0LDB4MjAsMHg4MiwweDAwLDB4YzAsMHhmZiwweDAyLDB4M2MsMHhmZiwweGZmLDB4NDIsMHgzNCwweDAwLDB4MTgsMHg4NCwweDM0LAotMHhiZiwweGZmLDB4MDMsMHgzYywweDI0LDB4MjAsMHg4MiwweDAwLDB4ZmYsMHhmZiwweDYzLDB4MzQsMHg3ZiwweGZmLDB4MDIsMHgzYywKLTB4MjQsMHgyMCwweDgzLDB4MDAsMHhmZiwweGZmLDB4NDIsMHgzNCwweDI0LDB4MjAsMHg4MiwweDAwLDB4MGMsMHg0MCwweGE2LDB4OGMsCi0weDdmLDB4ZmYsMHgwMywweDI0LDB4NDAsMHg0MCwweDg0LDB4MzQsMHhmZiwweGZmLDB4MDIsMHgzYywweDI0LDB4MjAsMHg4MywweDAwLAotMHhmZiwweDdmLDB4NDIsMHgzNCwweGZmLDB4YmYsMHgwMywweDNjLDB4MTAsMHg0MCwweGE3LDB4OGMsMHgyNCwweDIwLDB4ODIsMHgwMCwKLTB4ZmYsMHhmZiwweDYzLDB4MzQsMHhmZiwweDlmLDB4MDIsMHgzYywweDI0LDB4MzAsMHhjMywweDAwLDB4ZmYsMHhmZiwweDQyLDB4MzQsCi0weGZmLDB4M2YsMHgwMywweDNjLDB4MjQsMHgyMCwweDgyLDB4MDAsMHhmZiwweGZmLDB4NjMsMHgzNCwweDEyLDB4MDAsMHgwMiwweDI0LAotMHhiNCwweDAyLDB4YjMsMHg4ZiwweGIwLDB4MDIsMHhiMiwweDhmLDB4YWMsMHgwMiwweGIxLDB4OGYsMHhhOCwweDAyLDB4YjAsMHg4ZiwKLTB4MjQsMHgzOCwweGUzLDB4MDAsMHhjNywweDQyLDB4YTIsMHhhMCwweDFmLDB4MDAsMHgwMywweDI0LDB4MDEsMHgwMCwweDAyLDB4MjQsCi0weDI0LDB4MzAsMHhjOCwweDAwLDB4YmUsMHg0MiwweGEzLDB4YTAsMHhjMCwweDQyLDB4YTIsMHhhMCwweGZmLDB4MDAsMHgwMywweDI0LAotMHhmZiwweGZmLDB4MDIsMHgyNCwweGI4LDB4MDIsMHhiZCwweDI3LDB4MDgsMHg0MCwweGE0LDB4YWMsMHgxMCwweDQwLDB4YTcsMHhhYywKLTB4MGMsMHg0MCwweGE2LDB4YWMsMHhjMiwweDQyLDB4YTIsMHhhMCwweGM0LDB4NDIsMHhhMywweGE0LDB4YmYsMHg0MiwweGEwLDB4YTAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4YzYsMHg0MiwweGEwLDB4YTAsMHgzMywweDAwLDB4MDIsMHgyNCwweGMxLDB4NDIsMHg4MiwweGEwLAotMHgwZCwweDAwLDB4MDMsMHgyNCwweDAzLDB4MDAsMHgwMiwweDI0LDB4YmMsMHg0MiwweDgzLDB4YTAsMHg2NSwweDVkLDB4MDAsMHgwOCwKLTB4YmQsMHg0MiwweDgyLDB4YTAsMHhlMCwweGZmLDB4YmQsMHgyNywweDAyLDB4ODAsMHgwNywweDNjLDB4NjgsMHgxNSwweGU3LDB4MjQsCi0weDE4LDB4MDAsMHhiZiwweGFmLDB4MDAsMHg0MCwweGUzLDB4OGMsMHhmMCwweGZmLDB4MDIsMHgyNCwweDAyLDB4ODAsMHgwOCwweDNjLAotMHgyNCwweDE4LDB4NjIsMHgwMCwweGZmLDB4ZjAsMHgwMiwweDI0LDB4MjQsMHgxOCwweDYyLDB4MDAsMHgwMCwweDQwLDB4ZTMsMHhhYywKLTB4MWMsMHgwMCwweDAzLDB4MjQsMHgzNiwweDAwLDB4MDIsMHgyNCwweGNmLDB4NDIsMHhlMywweGEwLDB4MjAsMHgwMCwweDAzLDB4MjQsCi0weGNlLDB4NDIsMHhlMiwweGEwLDB4ZDEsMHg0MiwweGUzLDB4YTAsMHgzMiwweDAwLDB4MDIsMHgyNCwweDIwLDB4MDAsMHgwMywweDI0LAotMHhkMCwweDQyLDB4ZTIsMHhhMCwweGM4LDB4NDIsMHhlMywweGE0LDB4MGEsMHgwMCwweDAyLDB4MjQsMHgwMCwweDAyLDB4MDMsMHgyNCwKLTB4ZDIsMHg0MiwweGUyLDB4YTAsMHhjYywweDQyLDB4ZTMsMHhhNCwweDAwLDB4MDEsMHgwMiwweDI0LDB4NDksMHgwMCwweDAzLDB4MjQsCi0weDM4LDB4OTcsMHgwOCwweDI1LDB4ZmYsMHhmZiwweDBhLDB4MzQsMHgwMSwweDAwLDB4MDksMHgyNCwweDExLDB4MDAsMHhhMywweGEzLAotMHhjYSwweDQyLDB4ZTIsMHhhNCwweGQwLDB4MDcsMHgwMywweDI0LDB4NDQsMHgwMCwweDAyLDB4MjQsMHgwMCwweDgwLDB4MDYsMHgzYywKLTB4MTAsMHgwMCwweGEyLDB4YTMsMHgxMCwweDAwLDB4YTUsMHgyNywweDQ3LDB4MDAsMHgwMiwweDI0LDB4MjEsMHgyMCwweDAwLDB4MDEsCi0weDU0LDB4NDUsMHhjNiwweDI0LDB4MDQsMHg0MCwweGVhLDB4YWMsMHgwMiwweDQwLDB4ZTksMHhhMCwweDBjLDB4MDAsMHgwMywweGFkLAotMHgxNCwweDAwLDB4MDksMHhhMSwweGU2LDB4NDIsMHhlMCwweGEwLDB4ZGMsMHg2MywweGVhLDB4YWMsMHhkNywweDQyLDB4ZTAsMHhhMCwKLTB4MTIsMHgwMCwweGEyLDB4YTMsMHhmYiwweDBjLDB4MDAsMHgwYywweDEzLDB4MDAsMHhhMCwweGEzLDB4MTgsMHgwMCwweGJmLDB4OGYsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMCwweDAwLDB4YmQsMHgyNywweGUwLDB4ZmYsMHhiZCwweDI3LAotMHgwMiwweDgwLDB4MDIsMHgzYywweDUwLDB4MDAsMHgwMywweDI0LDB4MTAsMHgwMCwweGEzLDB4YTMsMHgyYSwweDYyLDB4NDAsMHhhMCwKLTB4NDEsMHgwMCwweDAzLDB4MjQsMHg1MiwweDAwLDB4MDIsMHgyNCwweDAyLDB4ODAsMHgwNywweDNjLDB4YzQsMHg5NywweGU3LDB4MjQsCi0weDExLDB4MDAsMHhhMiwweGEzLDB4MTIsMHgwMCwweGEzLDB4YTMsMHhkMCwweDA3LDB4MDIsMHgyNCwweDAxLDB4MDAsMHgwMywweDI0LAotMHgwMSwweDgwLDB4MDYsMHgzYywweDEwLDB4MDAsMHhhNSwweDI3LDB4MjEsMHgyMCwweGUwLDB4MDAsMHg4OCwweDViLDB4YzYsMHgyNCwKLTB4MGMsMHgwMCwweGUyLDB4YWMsMHgxNCwweDAwLDB4ZTMsMHhhMCwweDE4LDB4MDAsMHhiZiwweGFmLDB4ZmIsMHgwYywweDAwLDB4MGMsCi0weDEzLDB4MDAsMHhhMCwweGEzLDB4MTgsMHgwMCwweGJmLDB4OGYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgyMCwweDAwLDB4YmQsMHgyNywweGQ4LDB4ZmYsMHhiZCwweDI3LDB4MTgsMHgwMCwweGIwLDB4YWYsMHgwMiwweDgwLDB4MTAsMHgzYywKLTB4NjgsMHgxNSwweDEwLDB4MjYsMHgyMCwweDAwLDB4YmYsMHhhZiwweDFjLDB4MDAsMHhiMSwweGFmLDB4MDAsMHg0MCwweDA5LDB4OGUsCi0weGZmLDB4ZmYsMHgwMiwweDI0LDB4ZmYsMHgwMCwweDRiLDB4MzAsMHgwZiwweGZmLDB4MDIsMHgyNCwweDI0LDB4NDgsMHgyMiwweDAxLAotMHhmZiwweGZmLDB4MDIsMHgzYywweGZmLDB4MGYsMHg0MiwweDM0LDB4MjQsMHg0OCwweDIyLDB4MDEsMHgwMSwweDAwLDB4MDcsMHgzYywKLTB4NDcsMHgwMCwweDAyLDB4MjQsMHgzYiwweDAwLDB4MDMsMHgyNCwweDAyLDB4ODAsMHgwOCwweDNjLDB4MTAsMHgwMCwweGEyLDB4YTMsCi0weDExLDB4MDAsMHhhMywweGEzLDB4ZTAsMHg5NywweDA4LDB4MjUsMHg1NiwweDMwLDB4ZWEsMHgzNCwweGQwLDB4MDcsMHgwMiwweDI0LAotMHgwMSwweDAwLDB4MDMsMHgyNCwweGY0LDB4OTgsMHhlNywweDM0LDB4MDAsMHg4MCwweDA2LDB4M2MsMHgwNCwweDQzLDB4MGIsMHhhZSwKLTB4MDAsMHg0MCwweDA5LDB4YWUsMHg0MywweDAwLDB4MTEsMHgyNCwweDEwLDB4MDAsMHhhNSwweDI3LDB4MGMsMHg0MywweDA3LDB4YWUsCi0weDEwLDB4NDMsMHgwYSwweGFlLDB4MGMsMHgwMCwweDAyLDB4YWQsMHgxNCwweDAwLDB4MDMsMHhhMSwweDA4LDB4NDMsMHgwMCwweGFlLAotMHgxNCwweDQzLDB4MDAsMHhhZSwweDE4LDB4NDMsMHgwMCwweGFlLDB4MjEsMHgyMCwweDAwLDB4MDEsMHhlNCwweDRlLDB4YzYsMHgyNCwKLTB4MTIsMHgwMCwweGIxLDB4YTMsMHhmYiwweDBjLDB4MDAsMHgwYywweDEzLDB4MDAsMHhhMCwweGEzLDB4MWUsMHgwMCwweDAyLDB4MjQsCi0weDIxLDB4NDMsMHgwMiwweGEyLDB4NGEsMHgwMCwweDAzLDB4MjQsMHg0NSwweDAwLDB4MDIsMHgyNCwweDFjLDB4NDMsMHgwMywweGEyLAotMHgxZCwweDQzLDB4MDIsMHhhMiwweDIzLDB4MDAsMHgwMywweDI0LDB4M2UsMHgwMCwweDAyLDB4MjQsMHgxZSwweDQzLDB4MTEsMHhhMiwKLTB4MWYsMHg0MywweDAyLDB4YTIsMHgyMCwweDQzLDB4MDMsMHhhMiwweDIwLDB4MDAsMHhiZiwweDhmLDB4MWMsMHgwMCwweGIxLDB4OGYsCi0weDE4LDB4MDAsMHhiMCwweDhmLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyOCwweDAwLDB4YmQsMHgyNywweGUwLDB4ZmYsMHhiZCwweDI3LAotMHgzYiwweDAwLDB4MDIsMHgyNCwweDQzLDB4MDAsMHgwMywweDI0LDB4MTAsMHgwMCwweGEyLDB4YTMsMHgxMSwweDAwLDB4YTMsMHhhMywKLTB4MzYsMHgwMCwweDAyLDB4MjQsMHgwMiwweDgwLDB4MDMsMHgzYywweDAyLDB4ODAsMHgwNywweDNjLDB4ZmMsMHg5NywweGU3LDB4MjQsCi0weDEyLDB4MDAsMHhhMiwweGEzLDB4M2IsMHg1OCwweDYwLDB4YTAsMHhkMCwweDA3LDB4MDIsMHgyNCwweDAxLDB4MDAsMHgwMywweDI0LAotMHgwMCwweDgwLDB4MDYsMHgzYywweDEwLDB4MDAsMHhhNSwweDI3LDB4MjEsMHgyMCwweGUwLDB4MDAsMHgyMCwweDUzLDB4YzYsMHgyNCwKLTB4MGMsMHgwMCwweGUyLDB4YWMsMHgxNCwweDAwLDB4ZTMsMHhhMCwweDE4LDB4MDAsMHhiZiwweGFmLDB4ZmIsMHgwYywweDAwLDB4MGMsCi0weDEzLDB4MDAsMHhhMCwweGEzLDB4MTgsMHgwMCwweGJmLDB4OGYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgyMCwweDAwLDB4YmQsMHgyNywweGZmLDB4ZmYsMHgwNywweDI0LDB4MDIsMHg4MCwweDAyLDB4M2MsMHhlMCwweGZmLDB4YmQsMHgyNywKLTB4M2QsMHg1OCwweDQ3LDB4YTAsMHgzYiwweDAwLDB4MDMsMHgyNCwweDQzLDB4MDAsMHgwMiwweDI0LDB4MTAsMHgwMCwweGEzLDB4YTMsCi0weDExLDB4MDAsMHhhMiwweGEzLDB4MzYsMHgwMCwweDAzLDB4MjQsMHgxNiwweDAwLDB4MDIsMHgyNCwweDAyLDB4ODAsMHgwOCwweDNjLAotMHgxOCwweDk4LDB4MDgsMHgyNSwweDEyLDB4MDAsMHhhMywweGEzLDB4MTMsMHgwMCwweGEyLDB4YTMsMHhkMCwweDA3LDB4MDMsMHgyNCwKLTB4MDEsMHgwMCwweDAyLDB4MjQsMHgwMCwweDgwLDB4MDYsMHgzYywweDEwLDB4MDAsMHhhNSwweDI3LDB4MjEsMHgyMCwweDAwLDB4MDEsCi0weDBjLDB4MDAsMHgwMywweGFkLDB4MTQsMHgwMCwweDAyLDB4YTEsMHgxOCwweDAwLDB4YmYsMHhhZiwweGZiLDB4MGMsMHgwMCwweDBjLAotMHhiOCwweDU0LDB4YzYsMHgyNCwweDE4LDB4MDAsMHhiZiwweDhmLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MjAsMHgwMCwweGJkLDB4MjcsMHhlMCwweGZmLDB4YmQsMHgyNywweDAyLDB4ODAsMHgwMiwweDNjLDB4NTIsMHgwMCwweDAzLDB4MjQsCi0weDEwLDB4MDAsMHhhMywweGEzLDB4NGMsMHg3OSwweDQwLDB4YTQsMHg1NCwweDAwLDB4MDMsMHgyNCwweDUzLDB4MDAsMHgwMiwweDI0LAotMHgwMiwweDgwLDB4MDcsMHgzYywweDM0LDB4OTgsMHhlNywweDI0LDB4MTEsMHgwMCwweGEyLDB4YTMsMHgxMiwweDAwLDB4YTMsMHhhMywKLTB4ZjQsMHgwMSwweDAyLDB4MjQsMHgwMSwweDAwLDB4MDMsMHgyNCwweDAxLDB4ODAsMHgwNiwweDNjLDB4MTAsMHgwMCwweGE1LDB4MjcsCi0weDIxLDB4MjAsMHhlMCwweDAwLDB4YzgsMHg1YywweGM2LDB4MjQsMHgwYywweDAwLDB4ZTIsMHhhYywweDE0LDB4MDAsMHhlMywweGEwLAotMHgxOCwweDAwLDB4YmYsMHhhZiwweGZiLDB4MGMsMHgwMCwweDBjLDB4MTMsMHgwMCwweGEwLDB4YTMsMHgxOCwweDAwLDB4YmYsMHg4ZiwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIwLDB4MDAsMHhiZCwweDI3LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHg1ZSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4MDEsMHg1ZSwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAyLDB4NWUsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDAzLDB4NWUsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwNCwweDVkLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHgwNSwweDViLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4MDYsMHg1OSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4MDcsMHg1NywweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDA4LDB4NTUsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDA5LDB4NTMsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwYSwweDUxLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHgwYiwweDRmLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4MGMsMHg0ZCwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4MGQsMHg0YiwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDBlLDB4NDksMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDBmLDB4NDcsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgxMCwweDQ1LDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHgxMSwweDQzLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4MTIsMHg0MSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4MTMsMHgzZiwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDE0LDB4M2QsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDE1LDB4M2IsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgxNiwweDM5LDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHgxNywweDM3LDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4MTgsMHgzNSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4MTksMHgzMywweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDFhLDB4MzEsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDFiLDB4MmYsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgxYywweDJkLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHgxZCwweDJiLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4MWUsMHgyOSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4MWYsMHgyNywweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDIwLDB4MjUsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDIxLDB4MjMsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgyMiwweDIxLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHgyMywweDFmLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4MjQsMHgxZCwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4MjUsMHgxYiwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDI2LDB4MTksMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDI3LDB4MTcsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgyOCwweDE1LDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHgyOSwweDEzLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4MmEsMHgxMSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4MmIsMHgwZiwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDJjLDB4MGQsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDJkLDB4MGIsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgyZSwweDA5LDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHgyZiwweDA3LDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4MzAsMHgwNSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4MzEsMHgwMywweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDMyLDB4MDEsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDMzLDB4MDEsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgzNCwweDAxLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHgzNSwweDAxLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4MzYsMHgwMSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4MzcsMHgwMSwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDM4LDB4MDEsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDM5LDB4MDEsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgzYSwweDAxLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHgzYiwweDAxLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4M2MsMHgwMSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4M2QsMHgwMSwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDNlLDB4MDEsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDNmLDB4MDEsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg0MCwweDVlLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHg0MSwweDVlLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4NDIsMHg1ZSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4NDMsMHg1ZSwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDQ0LDB4NWQsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDQ1LDB4NWIsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg0NiwweDU5LDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHg0NywweDU3LDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4NDgsMHg1NSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4NDksMHg1MywweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDRhLDB4NTEsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDRiLDB4NGYsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg0YywweDRkLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHg0ZCwweDRiLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4NGUsMHg0OSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4NGYsMHg0NywweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDUwLDB4NDUsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDUxLDB4NDMsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg1MiwweDQxLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHg1MywweDNmLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4NTQsMHgzZCwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4NTUsMHgzYiwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDU2LDB4MzksMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDU3LDB4MzcsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg1OCwweDM1LDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHg1OSwweDMzLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4NWEsMHgzMSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4NWIsMHgyZiwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDVjLDB4MmQsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDVkLDB4MmIsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg1ZSwweDI5LDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHg1ZiwweDI3LDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4NjAsMHgyNSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4NjEsMHgyMywweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDYyLDB4MjEsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDYzLDB4MWYsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg2NCwweDFkLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHg2NSwweDFiLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4NjYsMHgxOSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4NjcsMHgxNywweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDY4LDB4MTUsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDY5LDB4MTMsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg2YSwweDExLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHg2YiwweDBmLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4NmMsMHgwZCwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4NmQsMHgwYiwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDZlLDB4MDksMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDZmLDB4MDcsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg3MCwweDA1LDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHg3MSwweDAzLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4NzIsMHgwMSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4NzMsMHgwMSwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDc0LDB4MDEsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDc1LDB4MDEsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg3NiwweDAxLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHg3NywweDAxLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4NzgsMHgwMSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4NzksMHgwMSwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDdhLDB4MDEsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDdiLDB4MDEsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg3YywweDAxLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHg3ZCwweDAxLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4N2UsMHgwMSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4N2YsMHgwMSwweDc4LDB4MGMsMHgwMCwweDAwLDB4MWUsMHgwMCwweDAwLDB4MzAsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MWUsMHgwMCwweDAxLDB4MzAsMHg3OCwweDBjLDB4MDAsMHgwMCwweDFlLDB4MDAsMHgwMiwweDMwLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDFlLDB4MDAsMHgwMywweDMwLDB4NzgsMHgwYywweDAwLDB4MDAsMHgxZSwweDAwLDB4MDQsMHgzMCwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgxZSwweDAwLDB4MDUsMHgzMCwweDc4LDB4MGMsMHgwMCwweDAwLDB4MWUsMHgwMCwweDA2LDB4MzAsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MWUsMHgwMCwweDA3LDB4MzAsMHg3OCwweDBjLDB4MDAsMHgwMCwweDFlLDB4MDAsMHgwOCwweDNlLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDFlLDB4MDAsMHgwOSwweDQwLDB4NzgsMHgwYywweDAwLDB4MDAsMHgxZSwweDAwLDB4MGEsMHg0MiwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgxZSwweDAwLDB4MGIsMHg0NCwweDc4LDB4MGMsMHgwMCwweDAwLDB4MWUsMHgwMCwweDBjLDB4NDYsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MWUsMHgwMCwweDBkLDB4NDgsMHg3OCwweDBjLDB4MDAsMHgwMCwweDFlLDB4MDAsMHgwZSwweDQ4LDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDFlLDB4MDAsMHgwZiwweDRhLDB4NzgsMHgwYywweDAwLDB4MDAsMHgxZSwweDAwLDB4MTAsMHg0YSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgxZSwweDAwLDB4MTEsMHg0YywweDc4LDB4MGMsMHgwMCwweDAwLDB4MWUsMHgwMCwweDEyLDB4NGMsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MWUsMHgwMCwweDEzLDB4NGUsMHg3OCwweDBjLDB4MDAsMHgwMCwweDFlLDB4MDAsMHgxNCwweDUwLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDFlLDB4MDAsMHgxNSwweDUwLDB4NzgsMHgwYywweDAwLDB4MDAsMHgxZSwweDAwLDB4MTYsMHg1MCwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgxZSwweDAwLDB4MTcsMHg1MiwweDc4LDB4MGMsMHgwMCwweDAwLDB4MWUsMHgwMCwweDE4LDB4NTIsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MWUsMHgwMCwweDE5LDB4NTIsMHg3OCwweDBjLDB4MDAsMHgwMCwweDFlLDB4MDAsMHgxYSwweDU0LDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDFlLDB4MDAsMHgxYiwweDU0LDB4NzgsMHgwYywweDAwLDB4MDAsMHgxZSwweDAwLDB4MWMsMHg1NCwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgxZSwweDAwLDB4MWQsMHg1NiwweDc4LDB4MGMsMHgwMCwweDAwLDB4MWUsMHgwMCwweDFlLDB4NTYsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MWUsMHgwMCwweDFmLDB4NTYsMHg3OCwweDBjLDB4MDAsMHgwMCwweDFlLDB4MDAsMHgyMCwweDU2LDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDFlLDB4MDAsMHgyMSwweDU4LDB4NzgsMHgwYywweDAwLDB4MDAsMHgxZSwweDAwLDB4MjIsMHg1OCwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgxZSwweDAwLDB4MjMsMHg1OCwweDc4LDB4MGMsMHgwMCwweDAwLDB4MWUsMHgwMCwweDI0LDB4NTgsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MWUsMHgwMCwweDI1LDB4NWEsMHg3OCwweDBjLDB4MDAsMHgwMCwweDFlLDB4MDAsMHgyNiwweDVhLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDFlLDB4MDAsMHgyNywweDVhLDB4NzgsMHgwYywweDAwLDB4MDAsMHgxZSwweDAwLDB4MjgsMHg1YywweDc4LDB4MGMsMHgwMCwweDAwLAotMHgxZSwweDAwLDB4MjksMHg1YywweDc4LDB4MGMsMHgwMCwweDAwLDB4MWUsMHgwMCwweDJhLDB4NWUsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MWUsMHgwMCwweDJiLDB4NWUsMHg3OCwweDBjLDB4MDAsMHgwMCwweDFlLDB4MDAsMHgyYywweDVlLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDFlLDB4MDAsMHgyZCwweDVlLDB4NzgsMHgwYywweDAwLDB4MDAsMHgxZSwweDAwLDB4MmUsMHg1ZSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgxZSwweDAwLDB4MmYsMHg1ZSwweDc4LDB4MGMsMHgwMCwweDAwLDB4MWUsMHgwMCwweDMwLDB4NWUsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MWUsMHgwMCwweDMxLDB4NWUsMHg3OCwweDBjLDB4MDAsMHgwMCwweDFlLDB4MDAsMHgzMiwweDVlLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDFlLDB4MDAsMHgzMywweDVlLDB4NzgsMHgwYywweDAwLDB4MDAsMHgxZSwweDAwLDB4MzQsMHg1ZSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgxZSwweDAwLDB4MzUsMHg1ZSwweDc4LDB4MGMsMHgwMCwweDAwLDB4MWUsMHgwMCwweDM2LDB4NWUsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MWUsMHgwMCwweDM3LDB4NWUsMHg3OCwweDBjLDB4MDAsMHgwMCwweDFlLDB4MDAsMHgzOCwweDVlLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDFlLDB4MDAsMHgzOSwweDVlLDB4NzgsMHgwYywweDAwLDB4MDAsMHgxZSwweDAwLDB4M2EsMHg1ZSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgxZSwweDAwLDB4M2IsMHg1ZSwweDc4LDB4MGMsMHgwMCwweDAwLDB4MWUsMHgwMCwweDNjLDB4NWUsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MWUsMHgwMCwweDNkLDB4NWUsMHg3OCwweDBjLDB4MDAsMHgwMCwweDFlLDB4MDAsMHgzZSwweDVlLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDFlLDB4MDAsMHgzZiwweDVlLDB4ZmYsMHgwMCwweDAwLDB4MDAsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDAwLDB4MDgsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDQsMHgwMywweDA0LDB4MDgsMHgwMCwweDAwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA4LDB4MDAsMHgwMCwKLTB4MDAsMHhmYywweDAwLDB4MDAsMHgwYywweDA4LDB4MDAsMHgwMCwweDBhLDB4MDAsMHgwMCwweDA0LDB4MTAsMHgwOCwweDAwLDB4MDAsCi0weGZmLDB4MTAsMHgxMCwweDgwLDB4MTQsMHgwOCwweDAwLDB4MDAsMHgxMCwweDNkLDB4MGMsMHgwMiwweDE4LDB4MDgsMHgwMCwweDAwLAotMHhjNSwweDAzLDB4MDAsMHgwMCwweDFjLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDA4LDB4MDAsMHgwMCwKLTB4MDQsMHgwMCwweDAwLDB4MDAsMHgyNCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDIsMHg2OSwweDAwLDB4MjgsMHgwOCwweDAwLDB4MDAsCi0weDA0LDB4MDAsMHgwMCwweDAwLDB4MmMsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAyLDB4NjksMHgwMCwweDMwLDB4MDgsMHgwMCwweDAwLAotMHgwNCwweDAwLDB4MDAsMHgwMCwweDM0LDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMiwweDY5LDB4MDAsMHgzOCwweDA4LDB4MDAsMHgwMCwKLTB4MDQsMHgwMCwweDAwLDB4MDAsMHgzYywweDA4LDB4MDAsMHgwMCwweDAwLDB4MDIsMHg2OSwweDAwLDB4NDAsMHgwOCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4NDQsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDgsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDRjLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg1MCwweDA4LDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg1NCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NTgsMHgwOCwweDAwLDB4MDAsCi0weDY1LDB4YTksMHg2NSwweGE5LDB4NWMsMHgwOCwweDAwLDB4MDAsMHg2NSwweGE5LDB4NjUsMHhhOSwweDYwLDB4MDgsMHgwMCwweDAwLAotMHgzMCwweDAxLDB4N2YsMHgwZiwweDY0LDB4MDgsMHgwMCwweDAwLDB4MzAsMHgwMSwweDdmLDB4MGYsMHg2OCwweDA4LDB4MDAsMHgwMCwKLTB4MzAsMHgwMSwweDdmLDB4MGYsMHg2YywweDA4LDB4MDAsMHgwMCwweDMwLDB4MDEsMHg3ZiwweDBmLDB4NzAsMHgwOCwweDAwLDB4MDAsCi0weDAwLDB4MDMsMHgwMCwweDAzLDB4NzQsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAzLDB4MDAsMHgwMywweDc4LDB4MDgsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDdjLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg5MCwweDA4LDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg5NCwweDA4LDB4MDAsMHgwMCwweGZlLDB4ZmYsMHhmZiwweGZmLDB4OTgsMHgwOCwweDAwLDB4MDAsCi0weDEwLDB4MjAsMHgzMCwweDQwLDB4OWMsMHgwOCwweDAwLDB4MDAsMHg1MCwweDYwLDB4NzAsMHgwMCwweGIwLDB4MDgsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlNCwweDA4LDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBlLDB4MDAsMHgwMCwweDAzLDB4MDMsMHgwMywweDAzLDB4MDQsMHgwZSwweDAwLDB4MDAsCi0weDAzLDB4MDMsMHgwMywweDAzLDB4MDgsMHgwZSwweDAwLDB4MDAsMHgwMywweDAzLDB4MDAsMHgwMCwweDBjLDB4MGUsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MGUsMHgwMCwweDAwLDB4MDMsMHgwMywweDAzLDB4MDMsMHgxNCwweDBlLDB4MDAsMHgwMCwKLTB4MDMsMHgwMywweDAzLDB4MDMsMHgxOCwweDBlLDB4MDAsMHgwMCwweDAzLDB4MDMsMHgwMywweDAzLDB4MWMsMHgwZSwweDAwLDB4MDAsCi0weDAzLDB4MDMsMHgwMywweDAzLDB4MDAsMHgwOSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDksMHgwMCwweDAwLAotMHgyMywweDAwLDB4MDAsMHgwMCwweDA4LDB4MDksMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYywweDA5LDB4MDAsMHgwMCwKLTB4MzMsMHgxMywweDMyLDB4MDMsMHgwOCwweDBhLDB4MDAsMHgwMCwweDAwLDB4ODYsMHg4OCwweDhmLDB4MmMsMHgwYSwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHg5MiwweDAwLDB4MDAsMHgwYywweDAwLDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MGMsMHgwMCwweDAwLAotMHgzMywweDU0LDB4MDAsMHgwMCwweDA4LDB4MGMsMHgwMCwweDAwLDB4ZTQsMHgwMCwweDAwLDB4MDAsMHgwYywweDBjLDB4MDAsMHgwMCwKLTB4NmMsMHg2YywweDZjLDB4NmMsMHgxMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MTQsMHgwYywweDAwLDB4MDAsCi0weDAwLDB4MDEsMHgwMCwweDQwLDB4MTgsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDFjLDB4MGMsMHgwMCwweDAwLAotMHgwMCwweDAxLDB4MDAsMHg0MCwweDIwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgyNCwweDBjLDB4MDAsMHgwMCwKLTB4MDAsMHgwMSwweDAwLDB4NDAsMHgyOCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MmMsMHgwYywweDAwLDB4MDAsCi0weDAwLDB4MDEsMHgwMCwweDQwLDB4MzAsMHgwYywweDAwLDB4MDAsMHg0NCwweDZhLDB4ZTksMHg4ZCwweDM0LDB4MGMsMHgwMCwweDAwLAotMHhjZCwweDUyLDB4OTYsMHg0NiwweDM4LDB4MGMsMHgwMCwweDAwLDB4OTAsMHg1YSwweDAxLDB4NDgsMHgzYywweDBjLDB4MDAsMHgwMCwKLTB4NjQsMHg5NywweDk3LDB4MWEsMHg0MCwweDBjLDB4MDAsMHgwMCwweDNmLDB4NDIsMHg3YywweDFmLDB4NDQsMHgwYywweDAwLDB4MDAsCi0weGI3LDB4MDAsMHgwMSwweDAwLDB4NDgsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHhlYywweDRjLDB4MGMsMHgwMCwweDAwLAotMHgwMywweDAzLDB4ZmMsMHgwMCwweDUwLDB4MGMsMHgwMCwweDAwLDB4MWMsMHgzNCwweDU0LDB4NjksMHg1NCwweDBjLDB4MDAsMHgwMCwKLTB4OTQsMHgwMCwweDNjLDB4NDMsMHg1OCwweDBjLDB4MDAsMHgwMCwweDFjLDB4MzQsMHg1NCwweDY5LDB4NWMsMHgwYywweDAwLDB4MDAsCi0weDk0LDB4MDAsMHgzYywweDQzLDB4NjAsMHgwYywweDAwLDB4MDAsMHgxYywweDM0LDB4NTQsMHg2OSwweDY0LDB4MGMsMHgwMCwweDAwLAotMHg5NCwweDAwLDB4M2MsMHg0MywweDY4LDB4MGMsMHgwMCwweDAwLDB4MWMsMHgzNCwweDU0LDB4NjksMHg2YywweDBjLDB4MDAsMHgwMCwKLTB4OTQsMHgwMCwweDNjLDB4NDMsMHg3MCwweDBjLDB4MDAsMHgwMCwweDBkLDB4MDAsMHg1YSwweDJjLDB4NzQsMHgwYywweDAwLDB4MDAsCi0weDFiLDB4MTUsMHg4NiwweDAxLDB4NzgsMHgwYywweDAwLDB4MDAsMHgxZiwweDAwLDB4MDAsMHgwMCwweDdjLDB4MGMsMHgwMCwweDAwLAotMHgxMiwweDE2LDB4YjksMHgwMCwweDgwLDB4MGMsMHgwMCwweDAwLDB4ODAsMHgwMCwweDAwLDB4MjAsMHg4NCwweDBjLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg4OCwweDBjLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgwMCwweDIwLDB4OGMsMHgwYywweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgyMCwweDA4LDB4OTAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg0MCwweDk0LDB4MGMsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDk4LDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4NDAsMHg5YywweDBjLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDBjLDB4MDAsMHgwMCwweDkyLDB4MjQsMHg0OSwweDAwLDB4YTQsMHgwYywweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGFjLDB4MGMsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGIwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiNCwweDBjLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhiOCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YmMsMHgwYywweDAwLDB4MDAsCi0weDkyLDB4MjQsMHg0OSwweDAwLDB4YzAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM0LDB4MGMsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjYywweDBjLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhkMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZDQsMHgwYywweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZDgsMHgwYywweDAwLDB4MDAsMHgyNywweDI0LDB4YjIsMHg2NCwweGRjLDB4MGMsMHgwMCwweDAwLAotMHgzMiwweDY5LDB4NzYsMHgwMCwweGUwLDB4MGMsMHgwMCwweDAwLDB4MjIsMHgyMiwweDIyLDB4MDAsMHhlNCwweDBjLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweDBjLDB4MDAsMHgwMCwweDAyLDB4NDMsMHg2NCwweDA3LDB4MDAsMHgwZCwweDAwLDB4MDAsCi0weDgwLDB4MDcsMHgwMCwweDAwLDB4MDQsMHgwZCwweDAwLDB4MDAsMHgwMywweDA0LDB4MDAsMHgwMCwweDA4LDB4MGQsMHgwMCwweDAwLAotMHg3ZiwweDkwLDB4MDAsMHgwMCwweDBjLDB4MGQsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgxMCwweDBkLDB4MDAsMHgwMCwKLTB4OTksMHg5OSwweDY5LDB4YTAsMHgxNCwweDBkLDB4MDAsMHgwMCwweDY3LDB4M2MsMHg5OSwweDk5LDB4MTgsMHgwZCwweDAwLDB4MDAsCi0weDZiLDB4NWIsMHg4ZiwweDZhLDB4MWMsMHgwZCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MGQsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MGQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweDBkLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyYywweDBkLDB4MDAsMHgwMCwweDc1LDB4MTksMHg5NywweGNjLDB4MzAsMHgwZCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MzQsMHgwZCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MGQsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDNjLDB4MGQsMHgwMCwweDAwLDB4OTMsMHg3MiwweDAyLDB4MDAsMHg0MCwweDBkLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg0NCwweDBkLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDgsMHgwZCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4NTAsMHgwZCwweDAwLDB4MDAsMHgwYSwweDE0LDB4MzcsMHg2NCwweDU0LDB4MGQsMHgwMCwweDAwLAotMHgwMiwweGJkLDB4NGQsMHgwMiwweDU4LDB4MGQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg1YywweDBkLDB4MDAsMHgwMCwKLTB4NjQsMHgyMCwweDAzLDB4MzAsMHg2MCwweDBkLDB4MDAsMHgwMCwweDY4LDB4ZGUsMHg1MywweDQ2LDB4NjQsMHgwZCwweDAwLDB4MDAsCi0weDNjLDB4OGEsMHg1MSwweDAwLDB4NjgsMHgwZCwweDAwLDB4MDAsMHgwNiwweDAxLDB4MDAsMHgwMCwweGZmLDB4MDAsMHgwMCwweDAwLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwKLTB4NDQsMHgwNSwweDAxLDB4ODAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDc0LDB4MDUsMHgwMSwweDgwLDB4MTAsMHgwMCwweDAwLDB4MDAsCi0weGUwLDB4MmUsMHgwMCwweDgwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHhlYywweDJlLDB4MDAsMHg4MCwweDEwLDB4MDAsMHgwMCwweDAwLAotMHhhMCwweDA4LDB4MDEsMHg4MCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MzgsMHgwNiwweDAxLDB4ODAsMHgwMCwweGI3LDB4MDAsMHgwMCwKLTB4MDEsMHhlMCwweDBlLDB4MDAsMHgwMiwweDRkLDB4MDQsMHgwMCwweDAzLDB4NDEsMHgwNCwweDAwLDB4MDQsMHhjMywweDA4LDB4MDAsCi0weDA1LDB4NzIsMHgwYywweDAwLDB4MDYsMHhlNiwweDAwLDB4MDAsMHgwNywweDJhLDB4MDgsMHgwMCwweDA4LDB4M2YsMHgwMCwweDAwLAotMHgwOSwweDM1LDB4MDMsMHgwMCwweDBhLDB4ZDQsMHgwOSwweDAwLDB4MGIsMHhiYiwweDA3LDB4MDAsMHgwYywweDUwLDB4MDgsMHgwMCwKLTB4MGQsMHhkZiwweDBjLDB4MDAsMHgwZSwweDJiLDB4MDAsMHgwMCwweDBmLDB4MTQsMHgwMSwweDAwLDB4MDAsMHhiNywweDAxLDB4MDAsCi0weDAxLDB4MDEsMHgwMCwweDAwLDB4MDIsMHgwMCwweDA0LDB4MDAsMHgwMSwweDAyLDB4MDAsMHgwMCwweDAyLDB4MDEsMHgwNCwweDAwLAotMHgwMSwweDAzLDB4MDAsMHgwMCwweDAyLDB4MDIsMHgwNCwweDAwLDB4MDEsMHgwNCwweDAwLDB4MDAsMHgwMiwweDAzLDB4MDQsMHgwMCwKLTB4MDEsMHgwNSwweDAwLDB4MDAsMHgwMiwweDA0LDB4MDQsMHgwMCwweDAxLDB4MDYsMHgwMCwweDAwLDB4MDIsMHgwNSwweDA0LDB4MDAsCi0weDAxLDB4MDcsMHgwMCwweDAwLDB4MDIsMHgwOCwweDA0LDB4MDAsMHgwMSwweDA4LDB4MDAsMHgwMCwweDAyLDB4MDksMHgwNCwweDAwLAotMHgwMSwweDA5LDB4MDAsMHgwMCwweDAyLDB4MGEsMHgwNCwweDAwLDB4MDEsMHgwYSwweDAwLDB4MDAsMHgwMiwweDBiLDB4MDQsMHgwMCwKLTB4MDEsMHgwYiwweDAwLDB4MDAsMHgwMiwweDAyLDB4MDUsMHgwMCwweDAxLDB4MGMsMHgwMCwweDAwLDB4MDIsMHgwMywweDA1LDB4MDAsCi0weDAxLDB4MGQsMHgwMCwweDAwLDB4MDIsMHgwNCwweDA1LDB4MDAsMHgwMSwweDBlLDB4MDAsMHgwMCwweDAyLDB4MDUsMHgwNSwweDAwLAotMHgwMSwweDBmLDB4MDAsMHgwMCwweDAyLDB4NDAsMHgwNSwweDAwLDB4MDEsMHgxMCwweDAwLDB4MDAsMHgwMiwweDQxLDB4MDUsMHgwMCwKLTB4MDEsMHgxMSwweDAwLDB4MDAsMHgwMiwweDQyLDB4MDUsMHgwMCwweDAxLDB4MTIsMHgwMCwweDAwLDB4MDIsMHg0MywweDA1LDB4MDAsCi0weDAxLDB4MTMsMHgwMCwweDAwLDB4MDIsMHg0NCwweDA1LDB4MDAsMHgwMSwweDE0LDB4MDAsMHgwMCwweDAyLDB4NDUsMHgwNSwweDAwLAotMHgwMSwweDE1LDB4MDAsMHgwMCwweDAyLDB4ODAsMHgwNSwweDAwLDB4MDEsMHgxNiwweDAwLDB4MDAsMHgwMiwweDgxLDB4MDUsMHgwMCwKLTB4MDEsMHgxNywweDAwLDB4MDAsMHgwMiwweDgyLDB4MDUsMHgwMCwweDAxLDB4MTgsMHgwMCwweDAwLDB4MDIsMHg4MywweDA1LDB4MDAsCi0weDAxLDB4MTksMHgwMCwweDAwLDB4MDIsMHg4NCwweDA1LDB4MDAsMHgwMSwweDFhLDB4MDAsMHgwMCwweDAyLDB4ODUsMHgwNSwweDAwLAotMHgwMSwweDFiLDB4MDAsMHgwMCwweDAyLDB4ODgsMHgwNSwweDAwLDB4MDEsMHgxYywweDAwLDB4MDAsMHgwMiwweDg5LDB4MDUsMHgwMCwKLTB4MDEsMHgxZCwweDAwLDB4MDAsMHgwMiwweDhhLDB4MDUsMHgwMCwweDAxLDB4MWUsMHgwMCwweDAwLDB4MDIsMHg4YiwweDA1LDB4MDAsCi0weDAxLDB4MWYsMHgwMCwweDAwLDB4MDIsMHg0MywweDA2LDB4MDAsMHgwMSwweDIwLDB4MDAsMHgwMCwweDAyLDB4NDQsMHgwNiwweDAwLAotMHgwMSwweDIxLDB4MDAsMHgwMCwweDAyLDB4NDUsMHgwNiwweDAwLDB4MDEsMHgyMiwweDAwLDB4MDAsMHgwMiwweDgwLDB4MDYsMHgwMCwKLTB4MDEsMHgyMywweDAwLDB4MDAsMHgwMiwweDgxLDB4MDYsMHgwMCwweDAxLDB4MjQsMHgwMCwweDAwLDB4MDIsMHg4MiwweDA2LDB4MDAsCi0weDAxLDB4MjUsMHgwMCwweDAwLDB4MDIsMHg4MywweDA2LDB4MDAsMHgwMSwweDI2LDB4MDAsMHgwMCwweDAyLDB4ODQsMHgwNiwweDAwLAotMHgwMSwweDI3LDB4MDAsMHgwMCwweDAyLDB4ODUsMHgwNiwweDAwLDB4MDEsMHgyOCwweDAwLDB4MDAsMHgwMiwweDg4LDB4MDYsMHgwMCwKLTB4MDEsMHgyOSwweDAwLDB4MDAsMHgwMiwweDg5LDB4MDYsMHgwMCwweDAxLDB4MmEsMHgwMCwweDAwLDB4MDIsMHg4YSwweDA2LDB4MDAsCi0weDAxLDB4MmIsMHgwMCwweDAwLDB4MDIsMHg4YiwweDA2LDB4MDAsMHgwMSwweDJjLDB4MDAsMHgwMCwweDAyLDB4OGMsMHgwNiwweDAwLAotMHgwMSwweDJkLDB4MDAsMHgwMCwweDAyLDB4NDIsMHgwNywweDAwLDB4MDEsMHgyZSwweDAwLDB4MDAsMHgwMiwweDQzLDB4MDcsMHgwMCwKLTB4MDEsMHgyZiwweDAwLDB4MDAsMHgwMiwweDQ0LDB4MDcsMHgwMCwweDAxLDB4MzAsMHgwMCwweDAwLDB4MDIsMHg0NSwweDA3LDB4MDAsCi0weDAxLDB4MzEsMHgwMCwweDAwLDB4MDIsMHg4MCwweDA3LDB4MDAsMHgwMSwweDMyLDB4MDAsMHgwMCwweDAyLDB4ODEsMHgwNywweDAwLAotMHgwMSwweDMzLDB4MDAsMHgwMCwweDAyLDB4ODIsMHgwNywweDAwLDB4MDEsMHgzNCwweDAwLDB4MDAsMHgwMiwweDgzLDB4MDcsMHgwMCwKLTB4MDEsMHgzNSwweDAwLDB4MDAsMHgwMiwweDg0LDB4MDcsMHgwMCwweDAxLDB4MzYsMHgwMCwweDAwLDB4MDIsMHg4NSwweDA3LDB4MDAsCi0weDAxLDB4MzcsMHgwMCwweDAwLDB4MDIsMHg4OCwweDA3LDB4MDAsMHgwMSwweDM4LDB4MDAsMHgwMCwweDAyLDB4ODksMHgwNywweDAwLAotMHgwMSwweDM5LDB4MDAsMHgwMCwweDAyLDB4OGEsMHgwNywweDAwLDB4MDEsMHgzYSwweDAwLDB4MDAsMHgwMiwweDhiLDB4MDcsMHgwMCwKLTB4MDEsMHgzYiwweDAwLDB4MDAsMHgwMiwweDhjLDB4MDcsMHgwMCwweDAxLDB4M2MsMHgwMCwweDAwLDB4MDIsMHg4ZCwweDA3LDB4MDAsCi0weDAxLDB4M2QsMHgwMCwweDAwLDB4MDIsMHg5MCwweDA3LDB4MDAsMHgwMSwweDNlLDB4MDAsMHgwMCwweDAyLDB4OTEsMHgwNywweDAwLAotMHgwMSwweDNmLDB4MDAsMHgwMCwweDAyLDB4OTIsMHgwNywweDAwLDB4MDEsMHg0MCwweDAwLDB4MDAsMHgwMiwweDkzLDB4MDcsMHgwMCwKLTB4MDEsMHg0MSwweDAwLDB4MDAsMHgwMiwweDk0LDB4MDcsMHgwMCwweDAxLDB4NDIsMHgwMCwweDAwLDB4MDIsMHg5NSwweDA3LDB4MDAsCi0weDAxLDB4NDMsMHgwMCwweDAwLDB4MDIsMHg5OCwweDA3LDB4MDAsMHgwMSwweDQ0LDB4MDAsMHgwMCwweDAyLDB4OTksMHgwNywweDAwLAotMHgwMSwweDQ1LDB4MDAsMHgwMCwweDAyLDB4OWEsMHgwNywweDAwLDB4MDEsMHg0NiwweDAwLDB4MDAsMHgwMiwweDliLDB4MDcsMHgwMCwKLTB4MDEsMHg0NywweDAwLDB4MDAsMHgwMiwweDljLDB4MDcsMHgwMCwweDAxLDB4NDgsMHgwMCwweDAwLDB4MDIsMHg5ZCwweDA3LDB4MDAsCi0weDAxLDB4NDksMHgwMCwweDAwLDB4MDIsMHhhMCwweDA3LDB4MDAsMHgwMSwweDRhLDB4MDAsMHgwMCwweDAyLDB4YTEsMHgwNywweDAwLAotMHgwMSwweDRiLDB4MDAsMHgwMCwweDAyLDB4YTIsMHgwNywweDAwLDB4MDEsMHg0YywweDAwLDB4MDAsMHgwMiwweGEzLDB4MDcsMHgwMCwKLTB4MDEsMHg0ZCwweDAwLDB4MDAsMHgwMiwweGE0LDB4MDcsMHgwMCwweDAxLDB4NGUsMHgwMCwweDAwLDB4MDIsMHhhNSwweDA3LDB4MDAsCi0weDAxLDB4NGYsMHgwMCwweDAwLDB4MDIsMHhhOCwweDA3LDB4MDAsMHgwMSwweDUwLDB4MDAsMHgwMCwweDAyLDB4YTksMHgwNywweDAwLAotMHgwMSwweDUxLDB4MDAsMHgwMCwweDAyLDB4YWEsMHgwMywweDAwLDB4MDEsMHg1MiwweDAwLDB4MDAsMHgwMiwweGFiLDB4MDMsMHgwMCwKLTB4MDEsMHg1MywweDAwLDB4MDAsMHgwMiwweGFjLDB4MDMsMHgwMCwweDAxLDB4NTQsMHgwMCwweDAwLDB4MDIsMHhhZCwweDAzLDB4MDAsCi0weDAxLDB4NTUsMHgwMCwweDAwLDB4MDIsMHhiMCwweDAzLDB4MDAsMHgwMSwweDU2LDB4MDAsMHgwMCwweDAyLDB4YjEsMHgwMywweDAwLAotMHgwMSwweDU3LDB4MDAsMHgwMCwweDAyLDB4YjIsMHgwMywweDAwLDB4MDEsMHg1OCwweDAwLDB4MDAsMHgwMiwweGIzLDB4MDMsMHgwMCwKLTB4MDEsMHg1OSwweDAwLDB4MDAsMHgwMiwweGI0LDB4MDMsMHgwMCwweDAxLDB4NWEsMHgwMCwweDAwLDB4MDIsMHhiNSwweDAzLDB4MDAsCi0weDAxLDB4NWIsMHgwMCwweDAwLDB4MDIsMHhiOCwweDAzLDB4MDAsMHgwMSwweDVjLDB4MDAsMHgwMCwweDAyLDB4YjksMHgwMywweDAwLAotMHgwMSwweDVkLDB4MDAsMHgwMCwweDAyLDB4YmEsMHgwMywweDAwLDB4MDEsMHg1ZSwweDAwLDB4MDAsMHgwMiwweGJiLDB4MDMsMHgwMCwKLTB4MDEsMHg1ZiwweDAwLDB4MDAsMHgwMiwweGJiLDB4MDMsMHgwMCwweDAzLDB4ODAsMHgwMCwweDAwLDB4MDUsMHgwNCwweDAwLDB4MDAsCi0weDAwLDB4YjcsMHgwMCwweDAwLDB4ZmUsMHgwMCwweDAwLDB4MDAsMHhmZSwweDAwLDB4MDAsMHgwMCwweGZlLDB4MDAsMHgwMCwweDAwLAotMHgwMiwweDRkLDB4MGMsMHgwMCwweGZlLDB4MDAsMHgwMCwweDAwLDB4ZmUsMHgwMCwweDAwLDB4MDAsMHgwMiwweDRkLDB4MDQsMHgwMCwKLTB4MDAsMHhiZiwweDAyLDB4MDAsMHhmZiwweGZmLDB4ZmYsMHgwMCwweGZmLDB4ZmYsMHhmZiwweDAwLDB4MDAsMHhiNywweDAwLDB4MDAsCi0weDAxLDB4ZTAsMHgwZSwweDAwLDB4MDIsMHg0ZCwweDA0LDB4MDAsMHgwMywweDQxLDB4MDQsMHgwMCwweDA0LDB4YzMsMHgwOCwweDAwLAotMHgwNSwweDcyLDB4MGMsMHgwMCwweDA2LDB4ZTYsMHgwMCwweDAwLDB4MDcsMHgyYSwweDA4LDB4MDAsMHgwOCwweDNmLDB4MDAsMHgwMCwKLTB4MDksMHgzNSwweDAzLDB4MDAsMHgwYSwweGQ0LDB4MDksMHgwMCwweDBiLDB4YmIsMHgwNywweDAwLDB4MGMsMHg1MCwweDA4LDB4MDAsCi0weDBkLDB4ZGYsMHgwYywweDAwLDB4MGUsMHgyYiwweDAwLDB4MDAsMHgwZiwweDE0LDB4MDEsMHgwMCwweDAwLDB4YjcsMHgwMSwweDAwLAotMHgwMSwweDAxLDB4MDAsMHgwMCwweDAyLDB4MDAsMHgwNCwweDAwLDB4MDEsMHgwMiwweDAwLDB4MDAsMHgwMiwweDAxLDB4MDQsMHgwMCwKLTB4MDEsMHgwMywweDAwLDB4MDAsMHgwMiwweDAyLDB4MDQsMHgwMCwweDAxLDB4MDQsMHgwMCwweDAwLDB4MDIsMHgwMywweDA0LDB4MDAsCi0weDAxLDB4MDUsMHgwMCwweDAwLDB4MDIsMHgwNCwweDA0LDB4MDAsMHgwMSwweDA2LDB4MDAsMHgwMCwweDAyLDB4MDUsMHgwNCwweDAwLAotMHgwMSwweDA3LDB4MDAsMHgwMCwweDAyLDB4MDgsMHgwNCwweDAwLDB4MDEsMHgwOCwweDAwLDB4MDAsMHgwMiwweDA5LDB4MDQsMHgwMCwKLTB4MDEsMHgwOSwweDAwLDB4MDAsMHgwMiwweDBhLDB4MDQsMHgwMCwweDAxLDB4MGEsMHgwMCwweDAwLDB4MDIsMHgwYiwweDA0LDB4MDAsCi0weDAxLDB4MGIsMHgwMCwweDAwLDB4MDIsMHgwMiwweDA1LDB4MDAsMHgwMSwweDBjLDB4MDAsMHgwMCwweDAyLDB4MDMsMHgwNSwweDAwLAotMHgwMSwweDBkLDB4MDAsMHgwMCwweDAyLDB4MDQsMHgwNSwweDAwLDB4MDEsMHgwZSwweDAwLDB4MDAsMHgwMiwweDA1LDB4MDUsMHgwMCwKLTB4MDEsMHgwZiwweDAwLDB4MDAsMHgwMiwweDQwLDB4MDUsMHgwMCwweDAxLDB4MTAsMHgwMCwweDAwLDB4MDIsMHg0MSwweDA1LDB4MDAsCi0weDAxLDB4MTEsMHgwMCwweDAwLDB4MDIsMHg0MiwweDA1LDB4MDAsMHgwMSwweDEyLDB4MDAsMHgwMCwweDAyLDB4NDMsMHgwNSwweDAwLAotMHgwMSwweDEzLDB4MDAsMHgwMCwweDAyLDB4NDQsMHgwNSwweDAwLDB4MDEsMHgxNCwweDAwLDB4MDAsMHgwMiwweDQ1LDB4MDUsMHgwMCwKLTB4MDEsMHgxNSwweDAwLDB4MDAsMHgwMiwweDgwLDB4MDUsMHgwMCwweDAxLDB4MTYsMHgwMCwweDAwLDB4MDIsMHg4MSwweDA1LDB4MDAsCi0weDAxLDB4MTcsMHgwMCwweDAwLDB4MDIsMHg4MiwweDA1LDB4MDAsMHgwMSwweDE4LDB4MDAsMHgwMCwweDAyLDB4ODMsMHgwNSwweDAwLAotMHgwMSwweDE5LDB4MDAsMHgwMCwweDAyLDB4ODQsMHgwNSwweDAwLDB4MDEsMHgxYSwweDAwLDB4MDAsMHgwMiwweDg1LDB4MDUsMHgwMCwKLTB4MDEsMHgxYiwweDAwLDB4MDAsMHgwMiwweDg4LDB4MDUsMHgwMCwweDAxLDB4MWMsMHgwMCwweDAwLDB4MDIsMHg4OSwweDA1LDB4MDAsCi0weDAxLDB4MWQsMHgwMCwweDAwLDB4MDIsMHg4YSwweDA1LDB4MDAsMHgwMSwweDFlLDB4MDAsMHgwMCwweDAyLDB4OGIsMHgwNSwweDAwLAotMHgwMSwweDFmLDB4MDAsMHgwMCwweDAyLDB4NDMsMHgwNiwweDAwLDB4MDEsMHgyMCwweDAwLDB4MDAsMHgwMiwweDQ0LDB4MDYsMHgwMCwKLTB4MDEsMHgyMSwweDAwLDB4MDAsMHgwMiwweDQ1LDB4MDYsMHgwMCwweDAxLDB4MjIsMHgwMCwweDAwLDB4MDIsMHg4MCwweDA2LDB4MDAsCi0weDAxLDB4MjMsMHgwMCwweDAwLDB4MDIsMHg4MSwweDA2LDB4MDAsMHgwMSwweDI0LDB4MDAsMHgwMCwweDAyLDB4ODIsMHgwNiwweDAwLAotMHgwMSwweDI1LDB4MDAsMHgwMCwweDAyLDB4ODMsMHgwNiwweDAwLDB4MDEsMHgyNiwweDAwLDB4MDAsMHgwMiwweDg0LDB4MDYsMHgwMCwKLTB4MDEsMHgyNywweDAwLDB4MDAsMHgwMiwweDg1LDB4MDYsMHgwMCwweDAxLDB4MjgsMHgwMCwweDAwLDB4MDIsMHg4OCwweDA2LDB4MDAsCi0weDAxLDB4MjksMHgwMCwweDAwLDB4MDIsMHg4OSwweDA2LDB4MDAsMHgwMSwweDJhLDB4MDAsMHgwMCwweDAyLDB4OGEsMHgwNiwweDAwLAotMHgwMSwweDJiLDB4MDAsMHgwMCwweDAyLDB4OGIsMHgwNiwweDAwLDB4MDEsMHgyYywweDAwLDB4MDAsMHgwMiwweDhjLDB4MDYsMHgwMCwKLTB4MDEsMHgyZCwweDAwLDB4MDAsMHgwMiwweDQyLDB4MDcsMHgwMCwweDAxLDB4MmUsMHgwMCwweDAwLDB4MDIsMHg0MywweDA3LDB4MDAsCi0weDAxLDB4MmYsMHgwMCwweDAwLDB4MDIsMHg0NCwweDA3LDB4MDAsMHgwMSwweDMwLDB4MDAsMHgwMCwweDAyLDB4NDUsMHgwNywweDAwLAotMHgwMSwweDMxLDB4MDAsMHgwMCwweDAyLDB4ODAsMHgwNywweDAwLDB4MDEsMHgzMiwweDAwLDB4MDAsMHgwMiwweDgxLDB4MDcsMHgwMCwKLTB4MDEsMHgzMywweDAwLDB4MDAsMHgwMiwweDgyLDB4MDcsMHgwMCwweDAxLDB4MzQsMHgwMCwweDAwLDB4MDIsMHg4MywweDA3LDB4MDAsCi0weDAxLDB4MzUsMHgwMCwweDAwLDB4MDIsMHg4NCwweDA3LDB4MDAsMHgwMSwweDM2LDB4MDAsMHgwMCwweDAyLDB4ODUsMHgwNywweDAwLAotMHgwMSwweDM3LDB4MDAsMHgwMCwweDAyLDB4ODgsMHgwNywweDAwLDB4MDEsMHgzOCwweDAwLDB4MDAsMHgwMiwweDg5LDB4MDcsMHgwMCwKLTB4MDEsMHgzOSwweDAwLDB4MDAsMHgwMiwweDhhLDB4MDcsMHgwMCwweDAxLDB4M2EsMHgwMCwweDAwLDB4MDIsMHg4YiwweDA3LDB4MDAsCi0weDAxLDB4M2IsMHgwMCwweDAwLDB4MDIsMHg4YywweDA3LDB4MDAsMHgwMSwweDNjLDB4MDAsMHgwMCwweDAyLDB4OGQsMHgwNywweDAwLAotMHgwMSwweDNkLDB4MDAsMHgwMCwweDAyLDB4OTAsMHgwNywweDAwLDB4MDEsMHgzZSwweDAwLDB4MDAsMHgwMiwweDkxLDB4MDcsMHgwMCwKLTB4MDEsMHgzZiwweDAwLDB4MDAsMHgwMiwweDkyLDB4MDcsMHgwMCwweDAxLDB4NDAsMHgwMCwweDAwLDB4MDIsMHg5MywweDA3LDB4MDAsCi0weDAxLDB4NDEsMHgwMCwweDAwLDB4MDIsMHg5NCwweDA3LDB4MDAsMHgwMSwweDQyLDB4MDAsMHgwMCwweDAyLDB4OTUsMHgwNywweDAwLAotMHgwMSwweDQzLDB4MDAsMHgwMCwweDAyLDB4OTgsMHgwNywweDAwLDB4MDEsMHg0NCwweDAwLDB4MDAsMHgwMiwweDk5LDB4MDcsMHgwMCwKLTB4MDEsMHg0NSwweDAwLDB4MDAsMHgwMiwweDlhLDB4MDcsMHgwMCwweDAxLDB4NDYsMHgwMCwweDAwLDB4MDIsMHg5YiwweDA3LDB4MDAsCi0weDAxLDB4NDcsMHgwMCwweDAwLDB4MDIsMHg5YywweDA3LDB4MDAsMHgwMSwweDQ4LDB4MDAsMHgwMCwweDAyLDB4OWQsMHgwNywweDAwLAotMHgwMSwweDQ5LDB4MDAsMHgwMCwweDAyLDB4YTAsMHgwNywweDAwLDB4MDEsMHg0YSwweDAwLDB4MDAsMHgwMiwweGExLDB4MDcsMHgwMCwKLTB4MDEsMHg0YiwweDAwLDB4MDAsMHgwMiwweGEyLDB4MDcsMHgwMCwweDAxLDB4NGMsMHgwMCwweDAwLDB4MDIsMHhhMywweDA3LDB4MDAsCi0weDAxLDB4NGQsMHgwMCwweDAwLDB4MDIsMHhhNCwweDA3LDB4MDAsMHgwMSwweDRlLDB4MDAsMHgwMCwweDAyLDB4YTUsMHgwNywweDAwLAotMHgwMSwweDRmLDB4MDAsMHgwMCwweDAyLDB4YTgsMHgwNywweDAwLDB4MDEsMHg1MCwweDAwLDB4MDAsMHgwMiwweGE5LDB4MDcsMHgwMCwKLTB4MDEsMHg1MSwweDAwLDB4MDAsMHgwMiwweGFhLDB4MDMsMHgwMCwweDAxLDB4NTIsMHgwMCwweDAwLDB4MDIsMHhhYiwweDAzLDB4MDAsCi0weDAxLDB4NTMsMHgwMCwweDAwLDB4MDIsMHhhYywweDAzLDB4MDAsMHgwMSwweDU0LDB4MDAsMHgwMCwweDAyLDB4YWQsMHgwMywweDAwLAotMHgwMSwweDU1LDB4MDAsMHgwMCwweDAyLDB4YjAsMHgwMywweDAwLDB4MDEsMHg1NiwweDAwLDB4MDAsMHgwMiwweGIxLDB4MDMsMHgwMCwKLTB4MDEsMHg1NywweDAwLDB4MDAsMHgwMiwweGIyLDB4MDMsMHgwMCwweDAxLDB4NTgsMHgwMCwweDAwLDB4MDIsMHhiMywweDAzLDB4MDAsCi0weDAxLDB4NTksMHgwMCwweDAwLDB4MDIsMHhiNCwweDAzLDB4MDAsMHgwMSwweDVhLDB4MDAsMHgwMCwweDAyLDB4YjUsMHgwMywweDAwLAotMHgwMSwweDViLDB4MDAsMHgwMCwweDAyLDB4YjgsMHgwMywweDAwLDB4MDEsMHg1YywweDAwLDB4MDAsMHgwMiwweGI5LDB4MDMsMHgwMCwKLTB4MDEsMHg1ZCwweDAwLDB4MDAsMHgwMiwweGJhLDB4MDMsMHgwMCwweDAxLDB4NWUsMHgwMCwweDAwLDB4MDIsMHhiYiwweDAzLDB4MDAsCi0weDAxLDB4NWYsMHgwMCwweDAwLDB4MDIsMHhiYiwweDAzLDB4MDAsMHgwMywweDgwLDB4MDAsMHgwMCwweDA1LDB4MDQsMHgwMCwweDAwLAotMHgwMCwweGI3LDB4MDAsMHgwMCwweGZlLDB4MDAsMHgwMCwweDAwLDB4ZmUsMHgwMCwweDAwLDB4MDAsMHhmZSwweDAwLDB4MDAsMHgwMCwKLTB4MDIsMHg0ZCwweDBjLDB4MDAsMHhmZSwweDAwLDB4MDAsMHgwMCwweGZlLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg0ZCwweDA0LDB4MDAsCi0weDAwLDB4YmYsMHgwMiwweDAwLDB4ZmYsMHhmZiwweGZmLDB4MDAsMHhmZiwweGZmLDB4ZmYsMHgwMCwweDBhLDB4MDAsMHgwMCwweDAwLAotMHg0ZiwweDZlLDB4NDEsMHg3MywweDczLDB4NmYsMHg2MywweDUyLDB4NjUsMHg3MSwweDAwLDB4MDAsMHg0ZiwweDZlLDB4NDEsMHg3MywKLTB4NzMsMHg2ZiwweDYzLDB4NTIsMHg3MywweDcwLDB4MDAsMHgwMCwweDRmLDB4NmUsMHg1MiwweDY1LDB4NDEsMHg3MywweDczLDB4NmYsCi0weDYzLDB4NTIsMHg2NSwweDcxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0ZiwweDZlLDB4NTIsMHg2NSwweDQxLDB4NzMsMHg3MywweDZmLAotMHg2MywweDUyLDB4NzMsMHg3MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NGYsMHg2ZSwweDUwLDB4NzIsMHg2ZiwweDYyLDB4NjUsMHg1MiwKLTB4NjUsMHg3MSwweDAwLDB4MDAsMHg0ZiwweDZlLDB4NTAsMHg3MiwweDZmLDB4NjIsMHg2NSwweDUyLDB4NzMsMHg3MCwweDAwLDB4MDAsCi0weDQ0LDB4NmYsMHg1MiwweDY1LDB4NzMsMHg2NSwweDcyLDB4NzYsMHg2NSwweDY0LDB4MDAsMHgwMCwweDQ0LDB4NmYsMHg1MiwweDY1LAotMHg3MywweDY1LDB4NzIsMHg3NiwweDY1LDB4NjQsMHgwMCwweDAwLDB4NGYsMHg2ZSwweDQyLDB4NjUsMHg2MSwweDYzLDB4NmYsMHg2ZSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg0ZiwweDZlLDB4NDEsMHg1NCwweDQ5LDB4NGQsMHgwMCwweDAwLDB4NGYsMHg2ZSwweDQ0LDB4NjksCi0weDczLDB4NjEsMHg3MywweDczLDB4NmYsMHg2MywweDAwLDB4MDAsMHg0ZiwweDZlLDB4NDEsMHg3NSwweDc0LDB4NjgsMHgwMCwweDAwLAotMHg0ZiwweDZlLDB4NDQsMHg2NSwweDQxLDB4NzUsMHg3NCwweDY4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0ZiwweDZlLDB4NDEsMHg2MywKLTB4NzQsMHg2OSwweDZmLDB4NmUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHg4YiwweDAxLDB4ODAsCi0weDI4LDB4MTQsMHgwMSwweDgwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHg5NCwweDhiLDB4MDEsMHg4MCwweDMwLDB4MTQsMHgwMSwweDgwLAotMHgyMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4OGIsMHgwMSwweDgwLDB4MjgsMHgxNCwweDAxLDB4ODAsMHgzMCwweDAwLDB4MDAsMHgwMCwKLTB4YjAsMHg4YiwweDAxLDB4ODAsMHgzMCwweDE0LDB4MDEsMHg4MCwweDQwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHg4YiwweDAxLDB4ODAsCi0weDM4LDB4MTQsMHgwMSwweDgwLDB4NTAsMHgwMCwweDAwLDB4MDAsMHhjYywweDhiLDB4MDEsMHg4MCwweDQwLDB4MTQsMHgwMSwweDgwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGQ4LDB4OGIsMHgwMSwweDgwLDB4YTgsMHgxNCwweDAxLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4ZTQsMHg4YiwweDAxLDB4ODAsMHhhOCwweDE0LDB4MDEsMHg4MCwweDgwLDB4MDAsMHgwMCwweDAwLDB4ZjAsMHg4YiwweDAxLDB4ODAsCi0weDQ4LDB4MTQsMHgwMSwweDgwLDB4OTAsMHgwMCwweDAwLDB4MDAsMHhmYywweDhiLDB4MDEsMHg4MCwweDUwLDB4MTQsMHgwMSwweDgwLAotMHhhMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4OGMsMHgwMSwweDgwLDB4NTgsMHgxNCwweDAxLDB4ODAsMHhiMCwweDAwLDB4MDAsMHgwMCwKLTB4MTAsMHg4YywweDAxLDB4ODAsMHg5MCwweDE0LDB4MDEsMHg4MCwweGMwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHg4YywweDAxLDB4ODAsCi0weDk4LDB4MTQsMHgwMSwweDgwLDB4ZDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDhjLDB4MDEsMHg4MCwweGEwLDB4MTQsMHgwMSwweDgwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGRjLDB4OGMsMHgwMSwweDgwLDB4ZGMsMHg4YywweDAxLDB4ODAsMHgzMSwweDEwLDB4MTAsMHgwMCwKLTB4MDAsMHgzMCwweDAwLDB4MDAsMHgzMSwweDIwLDB4MTAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDAwLDB4MzEsMHgyOCwweDEwLDB4MDAsCi0weDAwLDB4MzAsMHgwMCwweDAwLDB4MzEsMHgyYywweDEwLDB4MTAsMHgwMCwweDMwLDB4MDAsMHgwMCwweDMxLDB4MmYsMHgxMCwweDEwLAotMHgwMCwweDMwLDB4MDAsMHgwMCwweDMxLDB4MzAsMHgxOCwweDAwLDB4MDAsMHgzMCwweDAwLDB4MDAsMHgzMSwweDMwLDB4MjAsMHgxMCwKLTB4MDAsMHgzMCwweDAwLDB4MDAsMHgyMiwweDIwLDB4MTgsMHgwOCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MjIsMHgyMSwweDE0LDB4MDgsCi0weDAwLDB4MjAsMHgwMCwweDAwLDB4MjIsMHgyMSwweDFjLDB4MDgsMHgwMCwweDIwLDB4MDAsMHgwMCwweDIyLDB4MjEsMHgyMCwweDA4LAotMHgwMCwweDIwLDB4MDAsMHgwMCwweDIyLDB4MjEsMHgyMCwweDEwLDB4MDAsMHgyMCwweDAwLDB4MDAsMHgyMiwweDIxLDB4MjAsMHgxOCwKLTB4MDAsMHgyMCwweDAwLDB4MDAsMHgxYSwweDE5LDB4MTgsMHgxMCwweDAwLDB4MTgsMHgwMCwweDAwLDB4MTIsMHgxMSwweDEwLDB4MDgsCi0weDAwLDB4MTAsMHgwMCwweDAwLDB4MGEsMHgwOSwweDA4LDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMCwweDBhLDB4MDksMHgwOCwweDAyLAotMHgwMCwweDA4LDB4MDAsMHgwMCwweDBhLDB4MDksMHgwOCwweDA0LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwYSwweDA5LDB4MDgsMHgwNiwKLTB4MDAsMHgwOCwweDAwLDB4MDAsMHgwOCwweDA3LDB4MDYsMHgwNCwweDAwLDB4MDYsMHgwMCwweDAwLDB4MDYsMHgwNSwweDA0LDB4MDIsCi0weDAwLDB4MDQsMHgwMCwweDAwLDB4MDYsMHgwNSwweDA0LDB4MDMsMHgwMCwweDA0LDB4MDAsMHgwMCwweDA1LDB4MDQsMHgwMywweDAyLAotMHgwMCwweDAzLDB4MDAsMHgwMCwweDA5LDB4MDgsMHgwNywweDA2LDB4MDcsMHgwNiwweDA2LDB4MDUsMHgwNSwweDA0LDB4MDQsMHgwMywKLTB4MDYsMHgwNSwweDA1LDB4MDQsMHgwNCwweDAzLDB4MDMsMHgwMywweDA1LDB4MDQsMHgwNCwweDAzLDB4MDMsMHgwMiwweDAyLDB4MDIsCi0weDAwLDB4MDksMHgwOCwweDA3LDB4MDYsMHgwNywweDA2LDB4MDYsMHgwNSwweDA1LDB4MDQsMHgwNCwweDAzLDB4MDUsMHgwNCwweDA0LAotMHgwMywweDAzLDB4MDIsMHgwMiwweDAyLDB4MDQsMHgwMywweDAzLDB4MDIsMHgwMiwweDAxLDB4MDEsMHgwMSwweDAwLDB4MDAsMHgwMCwKLTB4MDgsMHgwOCwweDA4LDB4MDgsMHgwOCwweDA4LDB4MDgsMHgwOCwweDA4LDB4MTAsMHgxMCwweDIwLDB4MDgsMHgwOCwweDA4LDB4MDgsCi0weDIwLDB4MjAsMHgyMCwweDIwLDB4MDgsMHgwOCwweDA4LDB4MDgsMHgwOCwweDIwLDB4MjAsMHgyMCwweDMwLDB4MDgsMHgwOCwweDA4LAotMHgwOCwweDE4LDB4MTgsMHgxOCwweDE4LDB4MTgsMHgyMCwweDMwLDB4MzAsMHgxMCwweDIwLDB4MjAsMHgyMCwweDIwLDB4MjAsMHgzMCwKLTB4MzAsMHgwOCwweDEwLDB4MjAsMHgzMCwweDMwLDB4MzAsMHgzMCwweDMwLDB4MzAsMHgwMCwweDAwLDB4MDgsMHgwOCwweDA4LDB4MDgsCi0weDA4LDB4MDgsMHgwOCwweDA4LDB4MDgsMHgxMCwweDEwLDB4MjAsMHgwOCwweDA4LDB4MDgsMHgwOCwweDA4LDB4MjAsMHgyMCwweDIwLAotMHgwOCwweDA4LDB4MDgsMHgwOCwweDA4LDB4MjAsMHgyMCwweDIwLDB4MjAsMHgwOCwweDA4LDB4MDgsMHgwOCwweDE4LDB4MTgsMHgxOCwKLTB4MTgsMHgxOCwweDIwLDB4MzAsMHgzMCwweDEwLDB4MjAsMHgyMCwweDIwLDB4MjAsMHgyMCwweDMwLDB4MzAsMHgwOCwweDEwLDB4MjAsCi0weDMwLDB4MzAsMHgzMCwweDMwLDB4MzAsMHgzMCwweDAwLDB4MDAsMHgwYSwweDA5LDB4MDgsMHgwNCwweDAwLDB4MGEsMHgwOSwweDA4LAotMHgwNCwweDAwLDB4MGEsMHgwOSwweDA4LDB4MDQsMHgwMCwweDBhLDB4MDksMHgwOCwweDA0LDB4MDAsMHgwYSwweDA5LDB4MDgsMHgwMCwKLTB4MDAsMHgwYSwweDA5LDB4MDgsMHgwMCwweDAwLDB4MGEsMHgwOSwweDA4LDB4MDAsMHgwMCwweDBhLDB4MDksMHgwOCwweDAwLDB4MDAsCi0weDBhLDB4MDksMHgwOCwweDAwLDB4MDAsMHgxMiwweDExLDB4MTAsMHgwOCwweDAwLDB4MTIsMHgxMSwweDEwLDB4MDgsMHgwMCwweDIyLAotMHgyMSwweDIwLDB4MTgsMHgwMCwweDBhLDB4MDksMHgwOCwweDAwLDB4MDAsMHgwYSwweDA5LDB4MDgsMHgwMCwweDAwLDB4MGEsMHgwOSwKLTB4MDgsMHgwMCwweDAwLDB4MGEsMHgwOSwweDA4LDB4MDAsMHgwMCwweDIyLDB4MjEsMHgyMCwweDE4LDB4MDAsMHgyMiwweDIxLDB4MjAsCi0weDE4LDB4MDAsMHgyMiwweDIxLDB4MWMsMHgwOCwweDAwLDB4MjIsMHgyMCwweDE4LDB4MDgsMHgwMCwweDBhLDB4MDksMHgwOCwweDAyLAotMHgwMCwweDBhLDB4MDksMHgwOCwweDAyLDB4MDAsMHgwYSwweDA5LDB4MDgsMHgwMiwweDAwLDB4MGEsMHgwOSwweDA4LDB4MDIsMHgwMCwKLTB4MGEsMHgwOSwweDA4LDB4MDAsMHgwMCwweDIyLDB4MjEsMHgyMCwweDEwLDB4MDAsMHgyMiwweDIxLDB4MjAsMHgwOCwweDAwLDB4MjIsCi0weDIxLDB4MWMsMHgwOCwweDAwLDB4MzEsMHgzMCwweDE4LDB4MDAsMHgwMCwweDBhLDB4MDksMHgwOCwweDA0LDB4MDAsMHgwYSwweDA5LAotMHgwOCwweDA0LDB4MDAsMHgwYSwweDA5LDB4MDgsMHgwNCwweDAwLDB4MGEsMHgwOSwweDA4LDB4MDQsMHgwMCwweDFhLDB4MTksMHgxOCwKLTB4MTAsMHgwMCwweDFhLDB4MTksMHgxOCwweDEwLDB4MDAsMHgxYSwweDE5LDB4MTgsMHgxMCwweDAwLDB4MWEsMHgxOSwweDE4LDB4MTAsCi0weDAwLDB4MWEsMHgxOSwweDE4LDB4MTAsMHgwMCwweDIyLDB4MjEsMHgyMCwweDA4LDB4MDAsMHgzMSwweDJjLDB4MTAsMHgxMCwweDAwLAotMHgzMSwweDI4LDB4MTAsMHgwMCwweDAwLDB4MTIsMHgxMSwweDEwLDB4MDgsMHgwMCwweDIyLDB4MjEsMHgyMCwweDE4LDB4MDAsMHgyMiwKLTB4MjEsMHgyMCwweDE4LDB4MDAsMHgyMiwweDIxLDB4MjAsMHgwOCwweDAwLDB4MjIsMHgyMSwweDE0LDB4MDgsMHgwMCwweDIyLDB4MjAsCi0weDE4LDB4MDgsMHgwMCwweDMxLDB4MzAsMHgyMCwweDEwLDB4MDAsMHgzMSwweDJjLDB4MTAsMHgxMCwweDAwLDB4MGEsMHgwOSwweDA4LAotMHgwMCwweDAwLDB4MTIsMHgxMSwweDEwLDB4MDgsMHgwMCwweDIyLDB4MjEsMHgyMCwweDE4LDB4MDAsMHgyMiwweDIxLDB4MjAsMHgxOCwKLTB4MDAsMHgzMSwweDMwLDB4MjAsMHgxMCwweDAwLDB4MzEsMHgyZiwweDEwLDB4MTAsMHgwMCwweDMxLDB4MmYsMHgxMCwweDEwLDB4MDAsCi0weDMxLDB4MTAsMHgxMCwweDAwLDB4MDAsMHgzMSwweDJjLDB4MTAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDBhLDB4MDksMHgwOCwweDA0LAotMHgwMCwweDBhLDB4MDksMHgwOCwweDA0LDB4MDAsMHgwYSwweDA5LDB4MDgsMHgwNCwweDAwLDB4MGEsMHgwOSwweDA4LDB4MDQsMHgwMCwKLTB4MGEsMHgwOSwweDA4LDB4MDAsMHgwMCwweDBhLDB4MDksMHgwOCwweDAwLDB4MDAsMHgwYSwweDA5LDB4MDgsMHgwMCwweDAwLDB4MGEsCi0weDA5LDB4MDgsMHgwMCwweDAwLDB4MGEsMHgwOSwweDA4LDB4MDAsMHgwMCwweDEyLDB4MTEsMHgxMCwweDA4LDB4MDAsMHgxMiwweDExLAotMHgxMCwweDA4LDB4MDAsMHgyMiwweDIxLDB4MjAsMHgxOCwweDAwLDB4MGEsMHgwOSwweDA4LDB4MDQsMHgwMCwweDBhLDB4MDksMHgwOCwKLTB4MDQsMHgwMCwweDBhLDB4MDksMHgwOCwweDAyLDB4MDAsMHgwYSwweDA5LDB4MDgsMHgwMCwweDAwLDB4MGEsMHgwOSwweDA4LDB4MDAsCi0weDAwLDB4MjIsMHgyMSwweDIwLDB4MTgsMHgwMCwweDIyLDB4MjEsMHgxYywweDA4LDB4MDAsMHgyMiwweDIxLDB4MTQsMHgwOCwweDAwLAotMHgwYSwweDA5LDB4MDgsMHgwMiwweDAwLDB4MGEsMHgwOSwweDA4LDB4MDIsMHgwMCwweDBhLDB4MDksMHgwOCwweDAyLDB4MDAsMHgwYSwKLTB4MDksMHgwOCwweDAyLDB4MDAsMHgwYSwweDA5LDB4MDgsMHgwMCwweDAwLDB4MjIsMHgyMSwweDIwLDB4MTAsMHgwMCwweDIyLDB4MjEsCi0weDIwLDB4MDgsMHgwMCwweDIyLDB4MjEsMHgxNCwweDA4LDB4MDAsMHgyMiwweDIxLDB4MTQsMHgwOCwweDAwLDB4MGEsMHgwOSwweDA4LAotMHgwNCwweDAwLDB4MGEsMHgwOSwweDA4LDB4MDQsMHgwMCwweDBhLDB4MDksMHgwOCwweDA0LDB4MDAsMHgwYSwweDA5LDB4MDgsMHgwNCwKLTB4MDAsMHgxYSwweDE5LDB4MTgsMHgxMCwweDAwLDB4MWEsMHgxOSwweDE4LDB4MTAsMHgwMCwweDFhLDB4MTksMHgxOCwweDEwLDB4MDAsCi0weDFhLDB4MTksMHgxOCwweDEwLDB4MDAsMHgxYSwweDE5LDB4MTgsMHgxMCwweDAwLDB4MjIsMHgyMSwweDIwLDB4MDgsMHgwMCwweDMxLAotMHgyYywweDEwLDB4MTAsMHgwMCwweDMxLDB4MjgsMHgxMCwweDAwLDB4MDAsMHgxMiwweDExLDB4MTAsMHgwOCwweDAwLDB4MjIsMHgyMSwKLTB4MjAsMHgxOCwweDAwLDB4MjIsMHgyMSwweDIwLDB4MTgsMHgwMCwweDIyLDB4MjEsMHgyMCwweDA4LDB4MDAsMHgyMiwweDIxLDB4MTQsCi0weDA4LDB4MDAsMHgyMiwweDIwLDB4MTgsMHgwOCwweDAwLDB4MzEsMHgzMCwweDIwLDB4MTAsMHgwMCwweDMxLDB4MmMsMHgxMCwweDEwLAotMHgwMCwweDBhLDB4MDksMHgwOCwweDAwLDB4MDAsMHgxMiwweDExLDB4MTAsMHgwOCwweDAwLDB4MjIsMHgyMSwweDIwLDB4MTgsMHgwMCwKLTB4MjIsMHgyMSwweDIwLDB4MTgsMHgwMCwweDMxLDB4MzAsMHgyMCwweDEwLDB4MDAsMHgzMSwweDJmLDB4MTAsMHgxMCwweDAwLDB4MzEsCi0weDJmLDB4MTAsMHgxMCwweDAwLDB4MzEsMHgxMCwweDEwLDB4MDAsMHgwMCwweDMxLDB4MmMsMHgxMCwweDEwLDB4MDAsMHgwMCwweDAwLAotMHgwMSwweDAyLDB4MDQsMHgwOCwweDAyLDB4MDQsMHgwOCwweDBjLDB4MTAsMHgxOCwweDIwLDB4MzAsMHgwMiwweDA0LDB4MDgsMHgwYywKLTB4MTAsMHgxOCwweDIwLDB4MzAsMHgwNiwweDBjLDB4MTAsMHgxOCwweDI0LDB4MzAsMHgzYywweDQ4LDB4NDgsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI1LDB4MjcsMHgyYywweDE5LDB4MWIsMHgxZSwweDIwLAotMHgyMywweDI5LDB4MmEsMHgyYiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjUsMHgyOSwweDJiLDB4MmUsMHgyZSwweDAwLDB4MDAsMHgwMCwKLTB4MDQsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsCi0weDE4LDB4MDAsMHgwMCwweDAwLDB4MjQsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHgwMCwweDAwLAotMHg2MCwweDAwLDB4MDAsMHgwMCwweDkwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDAwLDB4MDAsMHhkOCwweDAwLDB4MDAsMHgwMCwKLTB4NTAsMHgwMCwweDAwLDB4MDAsMHg3OCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDAsMHgwMCwweDAwLDB4YzgsMHgwMCwweDAwLDB4MDAsCi0weDQwLDB4MDEsMHgwMCwweDAwLDB4OTAsMHgwMSwweDAwLDB4MDAsMHhlMCwweDAxLDB4MDAsMHgwMCwweDMwLDB4MDIsMHgwMCwweDAwLAotMHgyYywweDAxLDB4MDAsMHgwMCwweDQwLDB4MDEsMHgwMCwweDAwLDB4ZTAsMHgwMSwweDAwLDB4MDAsMHhkMCwweDAyLDB4MDAsMHgwMCwKLTB4ODAsMHgwYywweDAwLDB4MDAsMHg4MCwweDBjLDB4MDAsMHgwMCwweDgwLDB4MGMsMHgwMCwweDAwLDB4YTAsMHgwZiwweDAwLDB4MDAsCi0weGEwLDB4MGYsMHgwMCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4MDAsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MTIsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAwLDB4MDAsMHgwMCwKLTB4MjQsMHgwMCwweDAwLDB4MDAsMHgzMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MDAsMHgwMCwweDAwLDB4NjAsMHgwMCwweDAwLDB4MDAsCi0weDZjLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwMCwweDAwLDB4MDAsMHgzYywweDAwLDB4MDAsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLAotMHg2NCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDAsMHgwMCwweDAwLDB4YzgsMHgwMCwweDAwLDB4MDAsMHhmMCwweDAwLDB4MDAsMHgwMCwKLTB4MTgsMHgwMSwweDAwLDB4MDAsMHg2NCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MDAsMHgwMCwweDAwLDB4ZjAsMHgwMCwweDAwLDB4MDAsCi0weDY4LDB4MDEsMHgwMCwweDAwLDB4NDAsMHgwNiwweDAwLDB4MDAsMHg0MCwweDA2LDB4MDAsMHgwMCwweDQwLDB4MDYsMHgwMCwweDAwLAotMHhkMCwweDA3LDB4MDAsMHgwMCwweGQwLDB4MDcsMHgwMCwweDAwLDB4MmMsMHgwNSwweDAwLDB4ODAsMHgyMCwweDA1LDB4MDAsMHg4MCwKLTB4MTQsMHgwNSwweDAwLDB4ODAsMHgwOCwweDA1LDB4MDAsMHg4MCwweGZjLDB4MDQsMHgwMCwweDgwLDB4ZjAsMHgwNCwweDAwLDB4ODAsCi0weGU0LDB4MDQsMHgwMCwweDgwLDB4ZDgsMHgwNCwweDAwLDB4ODAsMHhjYywweDA0LDB4MDAsMHg4MCwweGMwLDB4MDQsMHgwMCwweDgwLAotMHg3OCwweDA0LDB4MDAsMHg4MCwweDY4LDB4MTUsMHgwMiwweDgwLDB4YzAsMHgzYSwweDAwLDB4ODAsMHhjYywweDNhLDB4MDAsMHg4MCwKLTB4ZDgsMHgzYSwweDAwLDB4ODAsMHhlNCwweDNhLDB4MDAsMHg4MCwweGMwLDB4M2EsMHgwMCwweDgwLDB4YzAsMHgzYSwweDAwLDB4ODAsCi0weGMwLDB4M2EsMHgwMCwweDgwLDB4YzAsMHgzYSwweDAwLDB4ODAsMHhmMCwweDNhLDB4MDAsMHg4MCwweGZjLDB4M2EsMHgwMCwweDgwLAotMHgwOCwweDNiLDB4MDAsMHg4MCwweDE0LDB4M2IsMHgwMCwweDgwLDB4NjgsMHgxNSwweDAyLDB4ODAsMHhmZSwweDAxLDB4ODAsMHg3ZiwKLTB4ZTIsMHgwMSwweDgwLDB4NzgsMHhjNywweDAxLDB4YzAsMHg3MSwweGFlLDB4MDEsMHg4MCwweDZiLDB4OTUsMHgwMSwweDQwLDB4NjUsCi0weDdmLDB4MDEsMHhjMCwweDVmLDB4NjksMHgwMSwweDQwLDB4NWEsMHg1NSwweDAxLDB4NDAsMHg1NSwweDQyLDB4MDEsMHg4MCwweDUwLAotMHgzMCwweDAxLDB4MDAsMHg0YywweDFmLDB4MDEsMHhjMCwweDQ3LDB4MGYsMHgwMSwweGMwLDB4NDMsMHgwMCwweDAxLDB4MDAsMHg0MCwKLTB4ZjIsMHgwMCwweDgwLDB4M2MsMHhlNCwweDAwLDB4MDAsMHgzOSwweGQ3LDB4MDAsMHhjMCwweDM1LDB4Y2IsMHgwMCwweGMwLDB4MzIsCi0weGMwLDB4MDAsMHgwMCwweDMwLDB4YjUsMHgwMCwweDQwLDB4MmQsMHhhYiwweDAwLDB4YzAsMHgyYSwweGEyLDB4MDAsMHg4MCwweDI4LAotMHg5OCwweDAwLDB4MDAsMHgyNiwweDkwLDB4MDAsMHgwMCwweDI0LDB4ODgsMHgwMCwweDAwLDB4MjIsMHg4MCwweDAwLDB4MDAsMHgyMCwKLTB4NzksMHgwMCwweDQwLDB4MWUsMHg3MiwweDAwLDB4ODAsMHgxYywweDZjLDB4MDAsMHgwMCwweDFiLDB4NjYsMHgwMCwweDgwLDB4MTksCi0weDYwLDB4MDAsMHgwMCwweDE4LDB4NWIsMHgwMCwweGMwLDB4MTYsMHg1NiwweDAwLDB4ODAsMHgxNSwweDUxLDB4MDAsMHg0MCwweDE0LAotMHg0YywweDAwLDB4MDAsMHgxMywweDQ4LDB4MDAsMHgwMCwweDEyLDB4NDQsMHgwMCwweDAwLDB4MTEsMHg0MCwweDAwLDB4MDAsMHgxMCwKLTB4MzYsMHgzNSwweDJlLDB4MjUsMHgxYywweDEyLDB4MDksMHgwNCwweDMzLDB4MzIsMHgyYiwweDIzLDB4MWEsMHgxMSwweDA4LDB4MDQsCi0weDMwLDB4MmYsMHgyOSwweDIxLDB4MTksMHgxMCwweDA4LDB4MDMsMHgyZCwweDJkLDB4MjcsMHgxZiwweDE4LDB4MGYsMHgwOCwweDAzLAotMHgyYiwweDJhLDB4MjUsMHgxZSwweDE2LDB4MGUsMHgwNywweDAzLDB4MjgsMHgyOCwweDIyLDB4MWMsMHgxNSwweDBkLDB4MDcsMHgwMywKLTB4MjYsMHgyNSwweDIxLDB4MWIsMHgxNCwweDBkLDB4MDYsMHgwMywweDI0LDB4MjMsMHgxZiwweDE5LDB4MTMsMHgwYywweDA2LDB4MDMsCi0weDIyLDB4MjEsMHgxZCwweDE4LDB4MTEsMHgwYiwweDA2LDB4MDIsMHgyMCwweDIwLDB4MWIsMHgxNiwweDExLDB4MDgsMHgwNSwweDAyLAotMHgxZiwweDFlLDB4MWEsMHgxNSwweDEwLDB4MGEsMHgwNSwweDAyLDB4MWQsMHgxYywweDE4LDB4MTQsMHgwZiwweDBhLDB4MDUsMHgwMiwKLTB4MWIsMHgxYSwweDE3LDB4MTMsMHgwZSwweDA5LDB4MDQsMHgwMiwweDFhLDB4MTksMHgxNiwweDEyLDB4MGQsMHgwOSwweDA0LDB4MDIsCi0weDE4LDB4MTcsMHgxNSwweDExLDB4MGMsMHgwOCwweDA0LDB4MDIsMHgxNywweDE2LDB4MTMsMHgxMCwweDBjLDB4MDgsMHgwNCwweDAyLAotMHgxNiwweDE1LDB4MTIsMHgwZiwweDBiLDB4MDcsMHgwNCwweDAxLDB4MTQsMHgxNCwweDExLDB4MGUsMHgwYiwweDA3LDB4MDMsMHgwMiwKLTB4MTMsMHgxMywweDEwLDB4MGQsMHgwYSwweDA2LDB4MDMsMHgwMSwweDEyLDB4MTIsMHgwZiwweDBjLDB4MDksMHgwNiwweDAzLDB4MDEsCi0weDExLDB4MTEsMHgwZiwweDBjLDB4MDksMHgwNiwweDAzLDB4MDEsMHgxMCwweDEwLDB4MGUsMHgwYiwweDA4LDB4MDUsMHgwMywweDAxLAotMHgwZiwweDBmLDB4MGQsMHgwYiwweDA4LDB4MDUsMHgwMywweDAxLDB4MGUsMHgwZSwweDBjLDB4MGEsMHgwOCwweDA1LDB4MDIsMHgwMSwKLTB4MGQsMHgwZCwweDBjLDB4MGEsMHgwNywweDA1LDB4MDIsMHgwMSwweDBkLDB4MGMsMHgwYiwweDA5LDB4MDcsMHgwNCwweDAyLDB4MDEsCi0weDBjLDB4MGMsMHgwYSwweDA5LDB4MDYsMHgwNCwweDAyLDB4MDEsMHgwYiwweDBiLDB4MGEsMHgwOCwweDA2LDB4MDQsMHgwMiwweDAxLAotMHgwYiwweDBhLDB4MDksMHgwOCwweDA2LDB4MDQsMHgwMiwweDAxLDB4MGEsMHgwYSwweDA5LDB4MDcsMHgwNSwweDAzLDB4MDIsMHgwMSwKLTB4MGEsMHgwOSwweDA4LDB4MDcsMHgwNSwweDAzLDB4MDIsMHgwMSwweDA5LDB4MDksMHgwOCwweDA2LDB4MDUsMHgwMywweDAxLDB4MDEsCi0weDA5LDB4MDgsMHgwNywweDA2LDB4MDQsMHgwMywweDAxLDB4MDEsMHgzNiwweDM1LDB4MmUsMHgxYiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgzMywweDMyLDB4MmIsMHgxOSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHgyZiwweDI5LDB4MTgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MmQsMHgyZCwweDE3LDB4MTcsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJiLDB4MmEsMHgyNSwweDE1LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDI4LDB4MjgsMHgyNCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNiwweDI1LDB4MjEsMHgxMywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyNCwweDIzLDB4MWYsMHgxMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjIsMHgyMSwweDFkLDB4MTEsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjAsMHgyMCwweDFiLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDFmLDB4MWUsMHgxYSwweDBmLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDFkLDB4MWMsMHgxOCwweDBlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxYiwweDFhLDB4MTcsMHgwZSwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgxYSwweDE5LDB4MTYsMHgwZCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgxNywweDE1LDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MTcsMHgxNiwweDEzLDB4MGIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE2LDB4MTUsMHgxMiwweDBiLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDE0LDB4MTQsMHgxMSwweDBhLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMywweDEzLDB4MTAsMHgwYSwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgxMiwweDEyLDB4MGYsMHgwOSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTEsMHgxMSwweDBmLDB4MDksMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MTAsMHgxMCwweDBlLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBmLDB4MGYsMHgwZCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDBlLDB4MGUsMHgwYywweDA3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDBkLDB4MGMsMHgwNywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwZCwweDBjLDB4MGIsMHgwNiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGMsMHgwYywweDBhLDB4MDYsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MGIsMHgwYiwweDBhLDB4MDYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBiLDB4MGEsMHgwOSwweDA1LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDBhLDB4MGEsMHgwOSwweDA1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYSwweDA5LDB4MDgsMHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwOSwweDA5LDB4MDgsMHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDksMHgwOCwweDA3LDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDYsMHgwMCwweDJhLDB4YjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwOCwweDA4LDB4MDgsMHgwOCwweDA4LDB4MDgsMHgwOCwKLTB4MDgsMHgyOCwweDI4LDB4MjgsMHgyOCwweDI4LDB4MDgsMHgwOCwweDA4LDB4MDgsMHgwOCwweDA4LDB4MDgsMHgwOCwweDA4LDB4MDgsCi0weDA4LDB4MDgsMHgwOCwweDA4LDB4MDgsMHgwOCwweDA4LDB4MDgsMHhhMCwweDEwLDB4MTAsMHgxMCwweDEwLDB4MTAsMHgxMCwweDEwLAotMHgxMCwweDEwLDB4MTAsMHgxMCwweDEwLDB4MTAsMHgxMCwweDEwLDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwKLTB4MDQsMHgwNCwweDEwLDB4MTAsMHgxMCwweDEwLDB4MTAsMHgxMCwweDEwLDB4NDEsMHg0MSwweDQxLDB4NDEsMHg0MSwweDQxLDB4MDEsCi0weDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLAotMHgwMSwweDAxLDB4MDEsMHgxMCwweDEwLDB4MTAsMHgxMCwweDEwLDB4MTAsMHg0MiwweDQyLDB4NDIsMHg0MiwweDQyLDB4NDIsMHgwMiwKLTB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsCi0weDAyLDB4MDIsMHgwMiwweDEwLDB4MTAsMHgxMCwweDEwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEwLDB4MTAsMHgxMCwweDEwLDB4MTAsMHgxMCwweDEwLDB4MTAsCi0weDEwLDB4MTAsMHgxMCwweDEwLDB4MTAsMHgxMCwweDEwLDB4MTAsMHgxMCwweDEwLDB4MTAsMHgxMCwweDEwLDB4MTAsMHgxMCwweDEwLAotMHgxMCwweDEwLDB4MTAsMHgxMCwweDEwLDB4MTAsMHgxMCwweDEwLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwKLTB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MTAsCi0weDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLAotMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgxMCwKLTB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMCwweDE5LDB4NzcsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MjYsMHg3MiwweGIwLDB4MDAsMHgyNiwweDcyLDB4YjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjYsMHg2NSwweDYwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHgwMCwweDAwLDB4MDAsMHgwMiwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4ZjIsMHgzMCwweGI4LDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi19OwotCiB1OCBSdGw4MTkyU1VGd01haW5BcnJheVtNYWluQXJyYXlMZW5ndGhdID0gewogMHgwLCB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU1VfSFdJbWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTVV9IV0ltZy5oCmluZGV4IDk2YjE1MjUuLjM2ZTg0YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTVV9IV0ltZy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTVV9IV0ltZy5oCkBAIC01LDggKzUsNiBAQAogCiAvKkNyZWF0ZWQgb24gIDIwMDkvIDMvIDYsICA1OjI5Ki8KIAotI2RlZmluZSBJbWdBcnJheUxlbmd0aCA2ODM2OAotZXh0ZXJuIHU4IFJ0bDgxOTJTVUZ3SW1nQXJyYXlbSW1nQXJyYXlMZW5ndGhdOwogI2RlZmluZSBNYWluQXJyYXlMZW5ndGggMQogZXh0ZXJuIHU4IFJ0bDgxOTJTVUZ3TWFpbkFycmF5W01haW5BcnJheUxlbmd0aF07CiAjZGVmaW5lIERhdGFBcnJheUxlbmd0aCAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19maXJtd2FyZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNfZmlybXdhcmUuYwppbmRleCAzNTYxYWRmMC4uNzUyYTNmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNfZmlybXdhcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19maXJtd2FyZS5jCkBAIC0zNjAsMTE3ICszNjAsNTggQEAKIAogCVJUX1RSQUNFKENPTVBfRklSTVdBUkUsICIgLS0tPkZpcm13YXJlRG93bmxvYWQ5MlMoKVxuIik7CiAKLQkvLzMvLwotCS8vMyAvLzwxPiBPcGVuIEltYWdlIGZpbGUsIGFuZCBtYXAgZmlsZSB0byBjb250aW5lb3VzIG1lbW9yeSBpZiBvcGVuIGZpbGUgc3VjY2Vzcy4KLQkvLzMgIC8vICAgICAgICBvciByZWFkIGltYWdlIGZpbGUgZnJvbSBhcnJheS4gRGVmYXVsdCBsb2FkIGZyb20gQklOIGZpbGUKLQkvLzMvLwotCXByaXYtPmZpcm13YXJlX3NvdXJjZSA9IEZXX1NPVVJDRV9JTUdfRklMRTsvLyBXZSBzaG91bGQgZGVjaWRlZCBieSBSZWcuCi0KLQlzd2l0Y2goIHByaXYtPmZpcm13YXJlX3NvdXJjZSApCisvKgorKiBMb2FkIHRoZSBmaXJtd2FyZSBmcm9tIFJUTDgxOTJTVS9ydGw4MTkyc2Z3LmJpbgorKi8KKwlpZihwRmlybXdhcmUtPnN6RndUbXBCdWZmZXJMZW4gPT0gMCkKIAl7Ci0JCWNhc2UgRldfU09VUkNFX0lNR19GSUxFOgotCQkJaWYocEZpcm13YXJlLT5zekZ3VG1wQnVmZmVyTGVuID09IDApCi0JCQl7Ci0KLQkJCQlyYyA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBwRndJbWFnZUZpbGVOYW1lW3VsSW5pdFN0ZXBdLCZwcml2LT51ZGV2LT5kZXYpOy8vPT09PjEKLQkJCQlpZihyYyA8IDAgKSB7Ci0JCQkJCVJUX1RSQUNFKENPTVBfRVJSLCAicmVxdWVzdCBmaXJtd2FyZSBmYWlsIVxuIik7Ci0JCQkJCWdvdG8gRG93bmxvYWRGaXJtd2FyZV9GYWlsOwotCQkJCX0KLQotCQkJCWlmKGZ3X2VudHJ5LT5zaXplID4gc2l6ZW9mKHBGaXJtd2FyZS0+c3pGd1RtcEJ1ZmZlcikpCi0JCQkJewotCQkJCQlSVF9UUkFDRShDT01QX0VSUiwgImltZyBmaWxlIHNpemUgZXhjZWVkIHRoZSBjb250YWluZXIgYnVmZmVyIGZhaWwhXG4iKTsKLQkJCQkJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7Ci0JCQkJCWdvdG8gRG93bmxvYWRGaXJtd2FyZV9GYWlsOwotCQkJCX0KLQotCQkJCW1lbWNweShwRmlybXdhcmUtPnN6RndUbXBCdWZmZXIsZndfZW50cnktPmRhdGEsZndfZW50cnktPnNpemUpOwotCQkJCXBGaXJtd2FyZS0+c3pGd1RtcEJ1ZmZlckxlbiA9IGZ3X2VudHJ5LT5zaXplOwotCQkJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwotCi0JCQkJcHVjTWFwcGVkRmlsZSA9IHBGaXJtd2FyZS0+c3pGd1RtcEJ1ZmZlcjsKLQkJCQlmaWxlX2xlbmd0aCA9IHBGaXJtd2FyZS0+c3pGd1RtcEJ1ZmZlckxlbjsKLQotCQkJCS8vUmV0cmlldmUgRlcgaGVhZGVyLgotCQkJCXBGaXJtd2FyZS0+cEZ3SGVhZGVyID0gKFBSVF84MTkyU19GSVJNV0FSRV9IRFIpIHB1Y01hcHBlZEZpbGU7Ci0JCQkJcEZ3SGRyID0gcEZpcm13YXJlLT5wRndIZWFkZXI7Ci0JCQkJUlRfVFJBQ0UoQ09NUF9GSVJNV0FSRSwic2lnbmF0dXJlOiV4LCB2ZXJzaW9uOiV4LCBzaXplOiV4LCBpbWVtc2l6ZToleCwgc3JhbSBzaXplOiV4XG4iLCBcCi0JCQkJCQlwRndIZHItPlNpZ25hdHVyZSwgcEZ3SGRyLT5WZXJzaW9uLCBwRndIZHItPkRNRU1TaXplLCBcCi0JCQkJCQlwRndIZHItPklNR19JTUVNX1NJWkUsIHBGd0hkci0+SU1HX1NSQU1fU0laRSk7Ci0JCQkJcEZpcm13YXJlLT5GaXJtd2FyZVZlcnNpb24gPSAgYnl0ZShwRndIZHItPlZlcnNpb24gLDApOwotCQkJCWlmICgocEZ3SGRyLT5JTUdfSU1FTV9TSVpFPT0wKSB8fCAocEZ3SGRyLT5JTUdfSU1FTV9TSVpFID4gc2l6ZW9mKHBGaXJtd2FyZS0+RndJTUVNKSkpCi0JCQkJewotCQkJCQlSVF9UUkFDRShDT01QX0VSUiwgIiVzOiBtZW1vcnkgZm9yIGRhdGEgaW1hZ2UgaXMgbGVzcyB0aGFuIElNRU0gcmVxdWlyZWRcbiIsXAotCQkJCQkJCV9fRlVOQ1RJT05fXyk7Ci0JCQkJCWdvdG8gRG93bmxvYWRGaXJtd2FyZV9GYWlsOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXB1Y01hcHBlZEZpbGUrPUZ3SGRyU2l6ZTsKLQotCQkJCQkvL1JldHJpZXZlIElNRU0gaW1hZ2UuCi0JCQkJCW1lbWNweShwRmlybXdhcmUtPkZ3SU1FTSwgcHVjTWFwcGVkRmlsZSwgcEZ3SGRyLT5JTUdfSU1FTV9TSVpFKTsKLQkJCQkJcEZpcm13YXJlLT5Gd0lNRU1MZW4gPSBwRndIZHItPklNR19JTUVNX1NJWkU7Ci0JCQkJfQotCi0JCQkJaWYgKHBGd0hkci0+SU1HX1NSQU1fU0laRSA+IHNpemVvZihwRmlybXdhcmUtPkZ3RU1FTSkpCi0JCQkJewotCQkJCQlSVF9UUkFDRShDT01QX0VSUiwgIiVzOiBtZW1vcnkgZm9yIGRhdGEgaW1hZ2UgaXMgbGVzcyB0aGFuIEVNRU0gcmVxdWlyZWRcbiIsXAotCQkJCQkJCV9fRlVOQ1RJT05fXyk7Ci0JCQkJCWdvdG8gRG93bmxvYWRGaXJtd2FyZV9GYWlsOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXB1Y01hcHBlZEZpbGUgKz0gcEZpcm13YXJlLT5Gd0lNRU1MZW47Ci0KLQkJCQkJLyogUmV0cmllY3ZlIEVNRU0gaW1hZ2UgKi8KLQkJCQkJbWVtY3B5KHBGaXJtd2FyZS0+RndFTUVNLCBwdWNNYXBwZWRGaWxlLCBwRndIZHItPklNR19TUkFNX1NJWkUpOy8vPT09PjYKLQkJCQkJcEZpcm13YXJlLT5Gd0VNRU1MZW4gPSBwRndIZHItPklNR19TUkFNX1NJWkU7Ci0JCQkJfQotCi0KKwkJcmMgPSByZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgcEZ3SW1hZ2VGaWxlTmFtZVt1bEluaXRTdGVwXSwmcHJpdi0+dWRldi0+ZGV2KTsKKwkJCWlmKHJjIDwgMCApIHsKKwkJCQlSVF9UUkFDRShDT01QX0VSUiwgInJlcXVlc3QgZmlybXdhcmUgZmFpbCFcbiIpOworCQkJCWdvdG8gRG93bmxvYWRGaXJtd2FyZV9GYWlsOwogCQkJfQotCQkJYnJlYWs7CiAKLQkJY2FzZSBGV19TT1VSQ0VfSEVBREVSX0ZJTEU6Ci0jaWYgMQotI2RlZmluZSBSdGw4MTlYRndJbWFnZUFycmF5IFJ0bDgxOTJTVUZ3SW1nQXJyYXkKLQkJCS8vMjAwOC4xMS4xMCBBZGQgYnkgdHlubGkuCi0JCQlwdWNNYXBwZWRGaWxlID0gUnRsODE5WEZ3SW1hZ2VBcnJheTsKLQkJCXVsRmlsZUxlbmd0aCA9IEltZ0FycmF5TGVuZ3RoOworCQkJaWYoZndfZW50cnktPnNpemUgPiBzaXplb2YocEZpcm13YXJlLT5zekZ3VG1wQnVmZmVyKSkgeworCQkJCVJUX1RSQUNFKENPTVBfRVJSLCAiaW1nIGZpbGUgc2l6ZSBleGNlZWQgdGhlIGNvbnRhaW5lciBidWZmZXIgZmFpbCFcbiIpOworCQkJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCQkJCWdvdG8gRG93bmxvYWRGaXJtd2FyZV9GYWlsOworCQkJfQogCi0JCQlSVF9UUkFDRShDT01QX0lOSVQsIkZ3IGRvd25sb2FkIGZyb20gaGVhZGVyLlxuIik7Ci0JCQkvKiBSZXRyaWV2ZSBGVyBoZWFkZXIqLworCQkJbWVtY3B5KHBGaXJtd2FyZS0+c3pGd1RtcEJ1ZmZlcixmd19lbnRyeS0+ZGF0YSxmd19lbnRyeS0+c2l6ZSk7CisJCQlwRmlybXdhcmUtPnN6RndUbXBCdWZmZXJMZW4gPSBmd19lbnRyeS0+c2l6ZTsKKwkJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCisJCQlwdWNNYXBwZWRGaWxlID0gcEZpcm13YXJlLT5zekZ3VG1wQnVmZmVyOworCQkJZmlsZV9sZW5ndGggPSBwRmlybXdhcmUtPnN6RndUbXBCdWZmZXJMZW47CisKKwkJCS8qIFJldHJpZXZlIEZXIGhlYWRlci4gKi8KIAkJCXBGaXJtd2FyZS0+cEZ3SGVhZGVyID0gKFBSVF84MTkyU19GSVJNV0FSRV9IRFIpIHB1Y01hcHBlZEZpbGU7CiAJCQlwRndIZHIgPSBwRmlybXdhcmUtPnBGd0hlYWRlcjsKIAkJCVJUX1RSQUNFKENPTVBfRklSTVdBUkUsInNpZ25hdHVyZToleCwgdmVyc2lvbjoleCwgc2l6ZToleCwgaW1lbXNpemU6JXgsIHNyYW0gc2l6ZToleFxuIiwgXAogCQkJCQlwRndIZHItPlNpZ25hdHVyZSwgcEZ3SGRyLT5WZXJzaW9uLCBwRndIZHItPkRNRU1TaXplLCBcCiAJCQkJCXBGd0hkci0+SU1HX0lNRU1fU0laRSwgcEZ3SGRyLT5JTUdfU1JBTV9TSVpFKTsKIAkJCXBGaXJtd2FyZS0+RmlybXdhcmVWZXJzaW9uID0gIGJ5dGUocEZ3SGRyLT5WZXJzaW9uICwwKTsKLQotCQkJaWYgKChwRndIZHItPklNR19JTUVNX1NJWkU9PTApIHx8IChwRndIZHItPklNR19JTUVNX1NJWkUgPiBzaXplb2YocEZpcm13YXJlLT5Gd0lNRU0pKSkKLQkJCXsKLQkJCQlwcmludGsoIkZpcm13YXJlRG93bmxvYWQ5MlMoKTogbWVtb3J5IGZvciBkYXRhIGltYWdlIGlzIGxlc3MgdGhhbiBJTUVNIHJlcXVpcmVkXG4iKTsKKwkJCWlmICgocEZ3SGRyLT5JTUdfSU1FTV9TSVpFPT0wKSB8fCAocEZ3SGRyLT5JTUdfSU1FTV9TSVpFID4gc2l6ZW9mKHBGaXJtd2FyZS0+RndJTUVNKSkpIHsKKwkJCQlSVF9UUkFDRShDT01QX0VSUiwgIiVzOiBtZW1vcnkgZm9yIGRhdGEgaW1hZ2UgaXMgbGVzcyB0aGFuIElNRU0gcmVxdWlyZWRcbiIsXAorCQkJCQlfX0ZVTkNUSU9OX18pOwogCQkJCWdvdG8gRG93bmxvYWRGaXJtd2FyZV9GYWlsOwogCQkJfSBlbHNlIHsKIAkJCQlwdWNNYXBwZWRGaWxlKz1Gd0hkclNpemU7Ci0JCQkJLy9SZXRyaWV2ZSBJTUVNIGltYWdlLgorCQkJCS8qIFJldHJpZXZlIElNRU0gaW1hZ2UuICovCiAJCQkJbWVtY3B5KHBGaXJtd2FyZS0+RndJTUVNLCBwdWNNYXBwZWRGaWxlLCBwRndIZHItPklNR19JTUVNX1NJWkUpOwogCQkJCXBGaXJtd2FyZS0+RndJTUVNTGVuID0gcEZ3SGRyLT5JTUdfSU1FTV9TSVpFOwogCQkJfQogCi0JCQlpZiAocEZ3SGRyLT5JTUdfU1JBTV9TSVpFID4gc2l6ZW9mKHBGaXJtd2FyZS0+RndFTUVNKSkKLQkJCXsKLQkJCQlwcmludGsoIiBGaXJtd2FyZURvd25sb2FkOTJTKCk6IG1lbW9yeSBmb3IgZGF0YSBpbWFnZSBpcyBsZXNzIHRoYW4gRU1FTSByZXF1aXJlZFxuIik7Ci0JCQkJZ290byBEb3dubG9hZEZpcm13YXJlX0ZhaWw7Ci0JCQl9IGVsc2UgewotCQkJCXB1Y01hcHBlZEZpbGUrPSBwRmlybXdhcmUtPkZ3SU1FTUxlbjsKLQotCQkJCS8vUmV0cmllY3ZlIEVNRU0gaW1hZ2UuCi0JCQkJbWVtY3B5KHBGaXJtd2FyZS0+RndFTUVNLCBwdWNNYXBwZWRGaWxlLCBwRndIZHItPklNR19TUkFNX1NJWkUpOwotCQkJCXBGaXJtd2FyZS0+RndFTUVNTGVuID0gcEZ3SGRyLT5JTUdfU1JBTV9TSVpFOwotCQkJfQotI2VuZGlmCi0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOworCQkJaWYgKHBGd0hkci0+SU1HX1NSQU1fU0laRSA+IHNpemVvZihwRmlybXdhcmUtPkZ3RU1FTSkpIHsKKwkJCQlSVF9UUkFDRShDT01QX0VSUiwgIiVzOiBtZW1vcnkgZm9yIGRhdGEgaW1hZ2UgaXMgbGVzcyB0aGFuIEVNRU0gcmVxdWlyZWRcbiIsXAorCQkJCQlfX0ZVTkNUSU9OX18pOworCQkJCQlnb3RvIERvd25sb2FkRmlybXdhcmVfRmFpbDsKKwkJCQl9IGVsc2UgeworCQkJCQlwdWNNYXBwZWRGaWxlICs9IHBGaXJtd2FyZS0+RndJTUVNTGVuOworCQkJCQkvKiBSZXRyaWVjdmUgRU1FTSBpbWFnZSAqLworCQkJCQltZW1jcHkocEZpcm13YXJlLT5Gd0VNRU0sIHB1Y01hcHBlZEZpbGUsIHBGd0hkci0+SU1HX1NSQU1fU0laRSk7Ly89PT0+NgorCQkJCQlwRmlybXdhcmUtPkZ3RU1FTUxlbiA9IHBGd0hkci0+SU1HX1NSQU1fU0laRTsKKwkJCQl9CiAJfQogCiAJRndTdGF0dXMgPSBGaXJtd2FyZUdldE5leHRTdGF0dXMocEZpcm13YXJlLT5GV1N0YXR1cyk7CkBAIC01MzgsMyArNDc5LDQgQEAKIAlyZXR1cm4gcnRTdGF0dXM7CiB9CiAKK01PRFVMRV9GSVJNV0FSRSgiUlRMODE5MlNVL3J0bDgxOTJzZncuYmluIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19maXJtd2FyZS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNfZmlybXdhcmUuaAppbmRleCBjNTI1MzgwLi4yYzJjZjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19maXJtd2FyZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTX2Zpcm13YXJlLmgKQEAgLTU5LDEyICs1OSw2IEBACiAJREVTQ19QQUNLRVRfVFlQRV9OT1JNQUwgPSAxLAogfWRlc2NfcGFja2V0X3R5cGVfZTsKIAotdHlwZWRlZiBlbnVtIF9maXJtd2FyZV9zb3VyY2V7Ci0JRldfU09VUkNFX0lNR19GSUxFID0gMCwKLQlGV19TT1VSQ0VfSEVBREVSX0ZJTEUgPSAxLAotfWZpcm13YXJlX3NvdXJjZV9lLCAqcGZpcm13YXJlX3NvdXJjZV9lOwotCi0KIHR5cGVkZWYgZW51bSBfb3B0X3JzdF90eXBlewogCU9QVF9TWVNURU1fUkVTRVQgPSAwLAogCU9QVF9GSVJNV0FSRV9SRVNFVCA9IDEsCkBAIC0xODUsNyArMTc5LDYgQEAKICNkZWZpbmUgUlRMODE5MF9NQVhfRklSTVdBUkVfQ09ERV9TSVpFICA2NDAwMCAgIC8vNjRrCiAKIHR5cGVkZWYgc3RydWN0IF9ydF9maXJtd2FyZXsKLQlmaXJtd2FyZV9zb3VyY2VfZQllRldTb3VyY2U7CiAJUFJUXzgxOTJTX0ZJUk1XQVJFX0hEUglwRndIZWFkZXI7CiAJRklSTVdBUkVfODE5MlNfU1RBVFVTCUZXU3RhdHVzOwogCXUxNiAgICAgICAgICAgICBGaXJtd2FyZVZlcnNpb247CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19waHkuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTX3BoeS5jCmluZGV4IDc3YWIwMjYuLjYzZDRlNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTX3BoeS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTX3BoeS5jCkBAIC0yNDA3LDggKzI0MDcsOCBAQAogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCVJUX1RSQUNFKENPTVBfREJHLCAiU2V0QldNb2RlQ2FsbGJhY2s4MTkwUGNpKCk6XAotCQkJCQkJdW5rbm93biBCYW5kd2lkdGg6ICUjWFxuIixwcml2LT5DdXJyZW50Q2hhbm5lbEJXKTsKKwkJCVJUX1RSQUNFKENPTVBfREJHLCAiU2V0QldNb2RlQ2FsbGJhY2s4MTkwUGNpKCk6IHVua25vd24gQmFuZHdpZHRoOiAlI1hcbiIsCisJCQkJIHByaXYtPkN1cnJlbnRDaGFubmVsQlcpOwogCQkJYnJlYWs7CiAJfQogCkBAIC0zMzk4LDggKzMzOTgsOCBAQAogCXUzMgkJCWRlbGF5OwogLy8JYm9vbAkJCXJldDsKIAotCVJUX1RSQUNFKENPTVBfU0NBTiwgIj09PlN3Q2hubENhbGxiYWNrODE5MFBjaSgpLCBzd2l0Y2ggdG8gY2hhbm5lbFwKLQkJCQklZFxuIiwgcHJpdi0+Y2hhbik7CisJUlRfVFJBQ0UoQ09NUF9TQ0FOLCAiPT0+U3dDaG5sQ2FsbGJhY2s4MTkwUGNpKCksIHN3aXRjaCB0byBjaGFubmVsICVkXG4iLAorCQkgcHJpdi0+Y2hhbik7CiAKIAogCWlmKCFwcml2LT51cCkKQEAgLTM1MjUsOCArMzUyNSw4IEBACiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJUlRfVFJBQ0UoQ09NUF9EQkcsICJTZXRDaGFubmVsQmFuZHdpZHRoODE5MFBjaSgpOlwKLQkJCQkJCXVua25vd24gQmFuZHdpZHRoOiAlI1hcbiIscHJpdi0+Q3VycmVudENoYW5uZWxCVyk7CisJCQlSVF9UUkFDRShDT01QX0RCRywgIlNldENoYW5uZWxCYW5kd2lkdGg4MTkwUGNpKCk6IHVua25vd24gQmFuZHdpZHRoOiAlI1hcbiIsCisJCQkJIHByaXYtPkN1cnJlbnRDaGFubmVsQlcpOwogCQkJYnJlYWs7CiAJfQogCkBAIC0zNjYwLDggKzM2NjAsOCBAQAogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCVJUX1RSQUNFKENPTVBfREJHLCAiU2V0QldNb2RlQ2FsbGJhY2s4MTkyU1VzYldvcmtJdGVtKCk6XAotCQkJCQkJdW5rbm93biBCYW5kd2lkdGg6ICUjWFxuIixwcml2LT5DdXJyZW50Q2hhbm5lbEJXKTsKKwkJCVJUX1RSQUNFKENPTVBfREJHLCAiU2V0QldNb2RlQ2FsbGJhY2s4MTkyU1VzYldvcmtJdGVtKCk6IHVua25vd24gQmFuZHdpZHRoOiAlI1hcbiIsCisJCQkJIHByaXYtPkN1cnJlbnRDaGFubmVsQlcpOwogCQkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlUuaAppbmRleCAyYTExZTAxLi5iYTg3NjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVLmgKQEAgLTEyNTgsNyArMTI1OCw2IEBACiAJdTggUmZfTW9kZTsgLy9hZGQgZm9yIEZpcm13YXJlIFJGIC1SL1cgc3dpdGNoCiAJcHJ0X2Zpcm13YXJlCQlwRmlybXdhcmU7CiAJcnRsODE5eFVzYl9sb29wYmFja19lCUxvb3BiYWNrTW9kZTsKLQlmaXJtd2FyZV9zb3VyY2VfZQlmaXJtd2FyZV9zb3VyY2U7CiAJYm9vbCB1c2JfZXJyb3I7CiAKIAl1MTYgRUVQUk9NVHhQb3dlckRpZmY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVV9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVV9jb3JlLmMKaW5kZXggNmY0MjRmZS4uN2QwMzA1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlVfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVX2NvcmUuYwpAQCAtMTEwLDcgKzExMCw3IEBACiAjZGVmaW5lIFRPVEFMX0NBTV9FTlRSWSAzMgogI2RlZmluZSBDQU1fQ09OVEVOVF9DT1VOVCA4CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBydGw4MTkyX3VzYl9pZF90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBydGw4MTkyX3VzYl9pZF90YmxbXSA9IHsKIAkvKiBSZWFsdGVrICovCiAJe1VTQl9ERVZJQ0UoMHgwYmRhLCAweDgxOTIpfSwKIAl7VVNCX0RFVklDRSgweDBiZGEsIDB4ODcwOSl9LApAQCAtMjM0MCwyNSArMjM0MCwyNCBAQAogCQkJCSAgICBza2ItPmxlbiwgcnRsODE5Ml90eF9pc3IsIHNrYik7CiAKIAlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih0eF91cmIsIEdGUF9BVE9NSUMpOwotCWlmICghc3RhdHVzKXsKLS8vd2UgbmVlZCB0byBzZW5kIDAgYnl0ZSBwYWNrZXQgd2hlbmV2ZXIgNTEyTiBieXRlcy82NE4oSElHTiBTUEVFRC9OT1JNQUwgU1BFRUQpIGJ5dGVzIHBhY2tldCBoYXMgYmVlbiB0cmFuc21pdHRlZC4gT3RoZXJ3aXNlLCBpdCB3aWxsIGJlIGhhbHQgdG8gd2FpdCBmb3IgYW5vdGhlciBwYWNrZXQuIFdCLiAyMDA4LjA4LjI3CisJaWYgKCFzdGF0dXMpIHsKKwkJLyoKKwkJICogd2UgbmVlZCB0byBzZW5kIDAgYnl0ZSBwYWNrZXQgd2hlbmV2ZXIgNTEyTiBieXRlcy82NE4oSElHTiBTUEVFRC9OT1JNQUwgU1BFRUQpIGJ5dGVzIHBhY2tldCBoYXMgYmVlbiB0cmFuc21pdHRlZC4KKwkJICogT3RoZXJ3aXNlLCBpdCB3aWxsIGJlIGhhbHQgdG8gd2FpdCBmb3IgYW5vdGhlciBwYWNrZXQuIFdCLiAyMDA4LjA4LjI3CisJCSAqLwogCQlib29sIGJTZW5kMEJ5dGUgPSBmYWxzZTsKIAkJdTggemVybyA9IDA7Ci0JCWlmKHVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQotCQl7CisJCWlmKHVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSB7CiAJCQlpZiAoc2tiLT5sZW4gPiAwICYmIHNrYi0+bGVuICUgNTEyID09IDApCiAJCQkJYlNlbmQwQnl0ZSA9IHRydWU7CiAJCX0KLQkJZWxzZQotCQl7CisJCWVsc2UgewogCQkJaWYgKHNrYi0+bGVuID4gMCAmJiBza2ItPmxlbiAlIDY0ID09IDApCiAJCQkJYlNlbmQwQnl0ZSA9IHRydWU7CiAJCX0KLQkJaWYgKGJTZW5kMEJ5dGUpCi0JCXsKLSNpZiAxCisJCWlmIChiU2VuZDBCeXRlKSB7CiAJCQl0eF91cmJfemVybyA9IHVzYl9hbGxvY191cmIoMCxHRlBfQVRPTUlDKTsKLQkJCWlmKCF0eF91cmJfemVybyl7CisJCQlpZighdHhfdXJiX3plcm8pIHsKIAkJCQlSVF9UUkFDRShDT01QX0VSUiwgImNhbid0IGFsbG9jIHVyYiBmb3IgemVybyBieXRlXG4iKTsKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCX0KQEAgLTIzNjYsMTYgKzIzNjUsMjMgQEAKIAkJCQkJdXNiX3NuZGJ1bGtwaXBlKHVkZXYsaWR4X3BpcGUpLCAmemVybywKIAkJCQkJMCwgdHhfemVyb19pc3IsIGRldik7CiAJCQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih0eF91cmJfemVybywgR0ZQX0FUT01JQyk7Ci0JCQlpZiAoc3RhdHVzKXsKLQkJCVJUX1RSQUNFKENPTVBfRVJSLCAiRXJyb3IgVFggVVJCIGZvciB6ZXJvIGJ5dGUgJWQsIGVycm9yICVkIiwgYXRvbWljX3JlYWQoJnByaXYtPnR4X3BlbmRpbmdbdGNiX2Rlc2MtPnF1ZXVlX2luZGV4XSksIHN0YXR1cyk7Ci0JCQlyZXR1cm4gLTE7CisJCQlzd2l0Y2ggKHN0YXR1cykgeworCQkJCWNhc2UgMDoKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAtRUNPTk5SRVNFVDoKKwkJCQljYXNlIC1FTk9FTlQ6CisJCQkJY2FzZSAtRVNIVVRET1dOOgorCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlSVF9UUkFDRShDT01QX0VSUiwgIkVycm9yIFRYIFVSQiBmb3IgemVybyBieXRlICVkLCBlcnJvciAlZCIsCisJCQkJCQlhdG9taWNfcmVhZCgmcHJpdi0+dHhfcGVuZGluZ1t0Y2JfZGVzYy0+cXVldWVfaW5kZXhdKSwgc3RhdHVzKTsKKwkJCQkJcmV0dXJuIC0xOwogCQkJfQotI2VuZGlmCiAJCX0KIAkJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJCWF0b21pY19pbmMoJnByaXYtPnR4X3BlbmRpbmdbdGNiX2Rlc2MtPnF1ZXVlX2luZGV4XSk7CiAJCXJldHVybiAwOwotCX1lbHNleworCX0gZWxzZSB7CiAJCVJUX1RSQUNFKENPTVBfRVJSLCAiRXJyb3IgVFggVVJCICVkLCBlcnJvciAlZCIsIGF0b21pY19yZWFkKCZwcml2LT50eF9wZW5kaW5nW3RjYl9kZXNjLT5xdWV1ZV9pbmRleF0pLAogCQkJCXN0YXR1cyk7CiAJCXJldHVybiAtMTsKQEAgLTI5NTIsNyArMjk1OCw3IEBACiAJCQl3aXJlbGVzc19tb2RlID0gV0lSRUxFU1NfTU9ERV9COwogCQl9CiAJfQotI2lmZGVmIFRPX0RPX0xJU1QgLy8vLyBUT0RPOiB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3Qgd29yayB3ZWxsIGF0IHRoaXMgdGltZSwgd2Ugc2hvdWQgd2FpdCBmb3IgRlBHQQorI2lmZGVmIFRPX0RPX0xJU1QgLy8vLyBUT0RPOiB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3Qgd29yayB3ZWxsIGF0IHRoaXMgdGltZSwgd2Ugc2hvdWxkIHdhaXQgZm9yIEZQR0EKIAlBY3RVcGRhdGVDaGFubmVsQWNjZXNzU2V0dGluZyggcEFkYXB0ZXIsIHBIYWxEYXRhLT5DdXJyZW50V2lyZWxlc3NNb2RlLCAmcEFkYXB0ZXItPk1nbnRJbmZvLkluZm84MTg1LkNoYW5uZWxBY2Nlc3NTZXR0aW5nICk7CiAjZW5kaWYKIAkvL0xaTSAwOTAzMDYgdXNiIGNyYXNoIGhlcmUsIG1hcmsgaXQgdGVtcApAQCAtMzM1OSw2ICszMzY1LDQ2IEBACiAJcmV0dXJuIFJGdHlwZTsKIH0KIAordm9pZCB1cGRhdGVfaGFsX3ZhcmlhYmxlcyhzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmZfcGF0aDsKKwlpbnQgaTsKKwl1OCBpbmRleDsKKworCWZvciAocmZfcGF0aCA9IDA7IHJmX3BhdGggPCAyOyByZl9wYXRoKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykJeworCQkJUlRfVFJBQ0UoKENPTVBfSU5JVCksICJDQ0sgUkYtJWQgQ0hhbl9BcmVhLSVkID0gMHgleFxuIiwgcmZfcGF0aCwgaSwgcHJpdi0+UmZDY2tDaG5sQXJlYVR4UHdyW3JmX3BhdGhdW2ldKTsKKwkJCVJUX1RSQUNFKChDT01QX0lOSVQpLCAiT0ZETS0xVCBSRi0lZCBDSGFuX0FyZWEtJWQgPSAweCV4XG4iLCByZl9wYXRoLCBpLCBwcml2LT5SZk9mZG1DaG5sQXJlYVR4UHdyMVRbcmZfcGF0aF1baV0pOworCQkJUlRfVFJBQ0UoKENPTVBfSU5JVCksICJPRkRNLTJUIFJGLSVkIENIYW5fQXJlYS0lZCA9IDB4JXhcbiIsIHJmX3BhdGgsIGksIHByaXYtPlJmT2ZkbUNobmxBcmVhVHhQd3IyVFtyZl9wYXRoXVtpXSk7CisJCX0KKwkJLyogQXNzaWduIGRlZGljYXRlZCBjaGFubmVsIHR4IHBvd2VyICovCisJCWZvcihpID0gMDsgaSA8IDE0OyBpKyspIHsKKwkJCS8qIGNoYW5uZWwgMS0zIHVzZSB0aGUgc2FtZSBUeCBQb3dlciBMZXZlbC4gKi8KKwkJCWlmIChpIDwgMykJCQkvKiBDaGFubmVsIDEtMyAqLworCQkJCWluZGV4ID0gMDsKKwkJCWVsc2UgaWYgKGkgPCA5KQkJCS8qIENoYW5uZWwgNC05ICovCisJCQkJaW5kZXggPSAxOworCQkJZWxzZQkJCQkvKiBDaGFubmVsIDEwLTE0ICovCisJCQkJaW5kZXggPSAyOworCQkJLyogUmVjb3JkIEEgJiBCIENDSyAvT0ZETSAtIDFULzJUIENoYW5uZWwgYXJlYSB0eCBwb3dlciAqLworCQkJcHJpdi0+UmZUeFB3ckxldmVsQ2NrW3JmX3BhdGhdW2ldID0gcHJpdi0+UmZDY2tDaG5sQXJlYVR4UHdyW3JmX3BhdGhdW2luZGV4XTsKKwkJCXByaXYtPlJmVHhQd3JMZXZlbE9mZG0xVFtyZl9wYXRoXVtpXSAgPSBwcml2LT5SZk9mZG1DaG5sQXJlYVR4UHdyMVRbcmZfcGF0aF1baW5kZXhdOworCQkJcHJpdi0+UmZUeFB3ckxldmVsT2ZkbTJUW3JmX3BhdGhdW2ldICA9IHByaXYtPlJmT2ZkbUNobmxBcmVhVHhQd3IyVFtyZl9wYXRoXVtpbmRleF07CisJCQlpZiAocmZfcGF0aCA9PSAwKSB7CisJCQkJcHJpdi0+VHhQb3dlckxldmVsT0ZETTI0R1tpXSA9IHByaXYtPlJmVHhQd3JMZXZlbE9mZG0xVFtyZl9wYXRoXVtpXSA7CisJCQkJcHJpdi0+VHhQb3dlckxldmVsQ0NLW2ldID0gcHJpdi0+UmZUeFB3ckxldmVsQ2NrW3JmX3BhdGhdW2ldOworCQkJfQorCQl9CisJCWZvcihpID0gMDsgaSA8IDE0OyBpKyspIHsKKwkJCVJUX1RSQUNFKChDT01QX0lOSVQpLAorCQkJIlJmLSVkIFR4UHdyIENILSVkIENDSyBPRkRNXzFUIE9GRE1fMlQ9IDB4JXgvMHgleC8weCV4XG4iLAorCQkJCXJmX3BhdGgsIGksIHByaXYtPlJmVHhQd3JMZXZlbENja1tyZl9wYXRoXVtpXSwKKwkJCQlwcml2LT5SZlR4UHdyTGV2ZWxPZmRtMVRbcmZfcGF0aF1baV0gLAorCQkJCXByaXYtPlJmVHhQd3JMZXZlbE9mZG0yVFtyZl9wYXRoXVtpXSApOworCQl9CisJfQorfQorCiAvLwogLy8JRGVzY3JpcHRpb246CiAvLwkJQ29uZmlnIEhXIGFkYXB0ZXIgaW5mb3JtYXRpb24gaW50byBpbml0aWFsIHZhbHVlLgpAQCAtMzM3NCw3ICszNDIwLDcgQEAKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAJKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCS8vdTE2CQkJaSx1c1ZhbHVlOwogCS8vdTggc01hY0FkZHJbNl0gPSB7MHgwMCwgMHhFMCwgMHg0QywgMHg4MSwgMHg5MiwgMHgwMH07Ci0JdTgJCXJmX3BhdGgsIGluZGV4OwkvLyBGb3IgRUVQUk9NL0VGVVNFIEFmdGVyIFYwLjZfMTExNworCXU4CQlyZl9wYXRoOwkvLyBGb3IgRUVQUk9NL0VGVVNFIEFmdGVyIFYwLjZfMTExNwogCWludAlpOwogCiAJUlRfVFJBQ0UoQ09NUF9JTklULCAiPT09PT4gQ29uZmlnQWRhcHRlckluZm84MTkyU0ZvckF1dG9Mb2FkRmFpbFxuIik7CkBAIC0zNDI2LDEwICszNDcyLDkgQEAKIAl3cml0ZV9uaWNfZHdvcmQoZGV2LCBJRFIwLCAoKHUzMiopZGV2LT5kZXZfYWRkcilbMF0pOwogCXdyaXRlX25pY193b3JkKGRldiwgSURSNCwgKCh1MTYqKShkZXYtPmRldl9hZGRyICsgNCkpWzBdKTsKIAotCVJUX1RSQUNFKENPTVBfSU5JVCwgIlJlYWRBZGFwdGVySW5mbzgxOTJTRUZ1c2UoKSwgUGVybWFuZW50IEFkZHJlc3MgPSAlMDJ4LSUwMngtJTAyeC0lMDJ4LSUwMngtJTAyeFxuIiwKLQkJCWRldi0+ZGV2X2FkZHJbMF0sIGRldi0+ZGV2X2FkZHJbMV0sCi0JCQlkZXYtPmRldl9hZGRyWzJdLCBkZXYtPmRldl9hZGRyWzNdLAotCQkJZGV2LT5kZXZfYWRkcls0XSwgZGV2LT5kZXZfYWRkcls1XSk7CisJUlRfVFJBQ0UoQ09NUF9JTklULAorCQkiUmVhZEFkYXB0ZXJJbmZvODE5MlNFRnVzZSgpLCBQZXJtYW5lbnQgQWRkcmVzcyA9ICVwTVxuIiwKKwkJZGV2LT5kZXZfYWRkcik7CiAKIAlwcml2LT5FRVBST01Cb2FyZFR5cGUgPSBFRVBST01fRGVmYXVsdF9Cb2FyZFR5cGU7CiAJcHJpdi0+cmZfdHlwZSA9IFJGXzFUMlI7IC8vUkZfMlQyUgpAQCAtMzQ1NSw0MiArMzUwMCw3IEBACiAJCX0KIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQotCXsKLQkJLy9SVF9UUkFDRSgoQ09NUF9FRlVTRSksICJDQ0sgUkYtJWQgQ0hhbl9BcmVhLSVkID0gMHgleFxuIiwgIHJmX3BhdGgsIGksCi0JCS8vcHJpdi0+UmZDY2tDaG5sQXJlYVR4UHdyW3JmX3BhdGhdW2ldKTsKLQkJLy9SVF9UUkFDRSgoQ09NUF9FRlVTRSksICJPRkRNLTFUIFJGLSVkIENIYW5fQXJlYS0lZCA9IDB4JXhcbiIsICByZl9wYXRoLCBpLAotCQkvL3ByaXYtPlJmT2ZkbUNobmxBcmVhVHhQd3IxVFtyZl9wYXRoXVtpXSk7Ci0JCS8vUlRfVFJBQ0UoKENPTVBfRUZVU0UpLCAiT0ZETS0yVCBSRi0lZCBDSGFuX0FyZWEtJWQgPSAweCV4XG4iLCAgcmZfcGF0aCwgaSwKLQkJLy9wcml2LT5SZk9mZG1DaG5sQXJlYVR4UHdyMlRbcmZfcGF0aF1baV0pOwotCX0KLQotCS8vIEFzc2lnbiBkZWRpY2F0ZWQgY2hhbm5lbCB0eCBwb3dlcgotCWZvcihpPTA7IGk8MTQ7IGkrKykJLy8gY2hhbm5lbCAxfjMgdXNlIHRoZSBzYW1lIFR4IFBvd2VyIExldmVsLgotCQl7Ci0JCWlmIChpIDwgMykJCQkvLyBDamFuZWwgMS0zCi0JCQlpbmRleCA9IDA7Ci0JCWVsc2UgaWYgKGkgPCA5KQkJLy8gQ2hhbm5lbCA0LTkKLQkJCWluZGV4ID0gMTsKLQkJZWxzZQkJCQkvLyBDaGFubmVsIDEwLTE0Ci0JCQlpbmRleCA9IDI7Ci0KLQkJLy8gUmVjb3JkIEEgJiBCIENDSyAvT0ZETSAtIDFULzJUIENoYW5uZWwgYXJlYSB0eCBwb3dlcgotCQlwcml2LT5SZlR4UHdyTGV2ZWxDY2tbcmZfcGF0aF1baV0gID0KLQkJcHJpdi0+UmZDY2tDaG5sQXJlYVR4UHdyW3JmX3BhdGhdW2luZGV4XTsKLQkJcHJpdi0+UmZUeFB3ckxldmVsT2ZkbTFUW3JmX3BhdGhdW2ldICA9Ci0JCXByaXYtPlJmT2ZkbUNobmxBcmVhVHhQd3IxVFtyZl9wYXRoXVtpbmRleF07Ci0JCXByaXYtPlJmVHhQd3JMZXZlbE9mZG0yVFtyZl9wYXRoXVtpXSAgPQotCQlwcml2LT5SZk9mZG1DaG5sQXJlYVR4UHdyMlRbcmZfcGF0aF1baW5kZXhdOwotCQl9Ci0KLQkJZm9yKGk9MDsgaTwxNDsgaSsrKQotCQl7Ci0JCS8vUlRfVFJBQ0UoKENPTVBfRUZVU0UpLCAiUmYtJWQgVHhQd3IgQ0gtJWQgQ0NLIE9GRE1fMVQgT0ZETV8yVD0gMHgleC8weCV4LzB4JXhcbiIsCi0JCS8vcmZfcGF0aCwgaSwgcHJpdi0+UmZUeFB3ckxldmVsQ2NrWzBdW2ldLAotCQkvL3ByaXYtPlJmVHhQd3JMZXZlbE9mZG0xVFswXVtpXSAsCi0JCS8vcHJpdi0+UmZUeFB3ckxldmVsT2ZkbTJUWzBdW2ldICk7Ci0JCX0KKwl1cGRhdGVfaGFsX3ZhcmlhYmxlcyhwcml2KTsKIAogCS8vCiAJLy8gVXBkYXRlIHJlbWFpbmVkIEhBTCB2YXJpYWJsZXMuCkBAIC0zNzY3LDEwICszNzc3LDkgQEAKIAl3cml0ZV9uaWNfZHdvcmQoZGV2LCBJRFIwLCAoKHUzMiopZGV2LT5kZXZfYWRkcilbMF0pOwogCXdyaXRlX25pY193b3JkKGRldiwgSURSNCwgKCh1MTYqKShkZXYtPmRldl9hZGRyICsgNCkpWzBdKTsKIAotCVJUX1RSQUNFKENPTVBfSU5JVCwgIlJlYWRBZGFwdGVySW5mbzgxOTJTRUZ1c2UoKSwgUGVybWFuZW50IEFkZHJlc3MgPSAlMDJ4LSUwMngtJTAyeC0lMDJ4LSUwMngtJTAyeFxuIiwKLQkJCWRldi0+ZGV2X2FkZHJbMF0sIGRldi0+ZGV2X2FkZHJbMV0sCi0JCQlkZXYtPmRldl9hZGRyWzJdLCBkZXYtPmRldl9hZGRyWzNdLAotCQkJZGV2LT5kZXZfYWRkcls0XSwgZGV2LT5kZXZfYWRkcls1XSk7CisJUlRfVFJBQ0UoQ09NUF9JTklULAorCQkiUmVhZEFkYXB0ZXJJbmZvODE5MlNFRnVzZSgpLCBQZXJtYW5lbnQgQWRkcmVzcyA9ICVwTVxuIiwKKwkJZGV2LT5kZXZfYWRkcik7CiAKIAkvLwogCS8vIEdldCBDdXN0b21lcklEKEJvYWQgVHlwZSkKQEAgLTM5MDEsNTMgKzM5MTAsNyBAQAogCQkJfQogCiAJCX0KLS8vCi0JCS8vIFVwZGF0ZSBUeCBQb3dlciBIQUwgdmFyaWFibGVzLgotLy8KLQkJZm9yIChyZl9wYXRoID0gMDsgcmZfcGF0aCA8IDI7IHJmX3BhdGgrKykKLQkJewotCQkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLQkJCXsKLQkJCQlSVF9UUkFDRSgoQ09NUF9JTklUKSwgICJDQ0sgUkYtJWQgQ0hhbl9BcmVhLSVkID0gMHgleFxuIiwgIHJmX3BhdGgsIGksCi0JCQkJcHJpdi0+UmZDY2tDaG5sQXJlYVR4UHdyW3JmX3BhdGhdW2ldKTsKLQkJCQlSVF9UUkFDRSgoQ09NUF9JTklUKSwgIk9GRE0tMVQgUkYtJWQgQ0hhbl9BcmVhLSVkID0gMHgleFxuIiwgIHJmX3BhdGgsIGksCi0JCQkJcHJpdi0+UmZPZmRtQ2hubEFyZWFUeFB3cjFUW3JmX3BhdGhdW2ldKTsKLQkJCQlSVF9UUkFDRSgoQ09NUF9JTklUKSwgIk9GRE0tMlQgUkYtJWQgQ0hhbl9BcmVhLSVkID0gMHgleFxuIiwgIHJmX3BhdGgsIGksIHByaXYtPlJmT2ZkbUNobmxBcmVhVHhQd3IyVFtyZl9wYXRoXVtpXSk7Ci0JCQl9Ci0KLQkJCS8vIEFzc2lnbiBkZWRpY2F0ZWQgY2hhbm5lbCB0eCBwb3dlcgotCQkJZm9yKGk9MDsgaTwxNDsgaSsrKQkvLyBjaGFubmVsIDF+MyB1c2UgdGhlIHNhbWUgVHggUG93ZXIgTGV2ZWwuCi0JCQl7Ci0JCQkJaWYgKGkgPCAzKQkJCS8vIENqYW5lbCAxLTMKLQkJCQkJaW5kZXggPSAwOwotCQkJCWVsc2UgaWYgKGkgPCA5KQkJLy8gQ2hhbm5lbCA0LTkKLQkJCQkJaW5kZXggPSAxOwotCQkJCWVsc2UJCQkJLy8gQ2hhbm5lbCAxMC0xNAotCQkJCQlpbmRleCA9IDI7Ci0KLQkJCQkvLyBSZWNvcmQgQSAmIEIgQ0NLIC9PRkRNIC0gMVQvMlQgQ2hhbm5lbCBhcmVhIHR4IHBvd2VyCi0JCQkJcHJpdi0+UmZUeFB3ckxldmVsQ2NrW3JmX3BhdGhdW2ldICA9Ci0JCQkJcHJpdi0+UmZDY2tDaG5sQXJlYVR4UHdyW3JmX3BhdGhdW2luZGV4XTsKLQkJCQlwcml2LT5SZlR4UHdyTGV2ZWxPZmRtMVRbcmZfcGF0aF1baV0gID0KLQkJCQlwcml2LT5SZk9mZG1DaG5sQXJlYVR4UHdyMVRbcmZfcGF0aF1baW5kZXhdOwotCQkJCXByaXYtPlJmVHhQd3JMZXZlbE9mZG0yVFtyZl9wYXRoXVtpXSAgPQotCQkJCXByaXYtPlJmT2ZkbUNobmxBcmVhVHhQd3IyVFtyZl9wYXRoXVtpbmRleF07Ci0JCQkJaWYgKHJmX3BhdGggPT0gMCkKLQkJCQl7Ci0JCQkJCXByaXYtPlR4UG93ZXJMZXZlbE9GRE0yNEdbaV0gPSBwcml2LT5SZlR4UHdyTGV2ZWxPZmRtMVRbcmZfcGF0aF1baV0gOwotCQkJCQlwcml2LT5UeFBvd2VyTGV2ZWxDQ0tbaV0gPSBwcml2LT5SZlR4UHdyTGV2ZWxDY2tbcmZfcGF0aF1baV07Ci0JCQkJfQotCQkJfQotCi0JCQlmb3IoaT0wOyBpPDE0OyBpKyspCi0JCQl7Ci0JCQkJUlRfVFJBQ0UoKENPTVBfSU5JVCksCi0JCQkJIlJmLSVkIFR4UHdyIENILSVkIENDSyBPRkRNXzFUIE9GRE1fMlQ9IDB4JXgvMHgleC8weCV4XG4iLAotCQkJCXJmX3BhdGgsIGksIHByaXYtPlJmVHhQd3JMZXZlbENja1tyZl9wYXRoXVtpXSwKLQkJCQlwcml2LT5SZlR4UHdyTGV2ZWxPZmRtMVRbcmZfcGF0aF1baV0gLAotCQkJCXByaXYtPlJmVHhQd3JMZXZlbE9mZG0yVFtyZl9wYXRoXVtpXSApOwotCQkJfQotCQl9CisJCXVwZGF0ZV9oYWxfdmFyaWFibGVzKHByaXYpOwogCX0KIAogCS8vCkBAIC03Njc3LDcgKzc2NDAsNyBAQAogCWlmIChFbnRyeU5vID49IFRPVEFMX0NBTV9FTlRSWSkKIAkJUlRfVFJBQ0UoQ09NUF9FUlIsICJjYW0gZW50cnkgZXhjZWVkcyBpbiBzZXRLZXkoKVxuIik7CiAKLQlSVF9UUkFDRShDT01QX1NFQywgIj09PT0+dG8gc2V0S2V5KCksIGRldjolcCwgRW50cnlObzolZCwgS2V5SW5kZXg6JWQsIEtleVR5cGU6JWQsIE1hY0FkZHIiTUFDX0ZNVCJcbiIsIGRldixFbnRyeU5vLCBLZXlJbmRleCwgS2V5VHlwZSwgTUFDX0FSRyhNYWNBZGRyKSk7CisJUlRfVFJBQ0UoQ09NUF9TRUMsICI9PT09PnRvIHNldEtleSgpLCBkZXY6JXAsIEVudHJ5Tm86JWQsIEtleUluZGV4OiVkLCBLZXlUeXBlOiVkLCBNYWNBZGRyJXBNXG4iLCBkZXYsRW50cnlObywgS2V5SW5kZXgsIEtleVR5cGUsIE1hY0FkZHIpOwogCiAJaWYgKERlZmF1bHRLZXkpCiAJCXVzQ29uZmlnIHw9IEJJVDE1IHwgKEtleVR5cGU8PDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlVfZG0uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVX2RtLmMKaW5kZXggNzg5MWU5Ni4uZmE1ZTI0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlVfZG0uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVV9kbS5jCkBAIC0yNjk3LDcgKzI2OTcsNyBAQAogCQl1OCogcGVlcm5hbWVbMTFdID0geyJ1bmtub3duIiwgInJlYWx0ZWsiLCAicmVhbHRla185MnNlIiwgImJyb2FkY29tIiwgInJhbGluayIsICJhdGhlcm9zIiwgImNpc2NvIiwgIm1hcnZlbGwiLCAiOTJ1X3NvZnRhcCIsICJzZWxmX3NvZnRhcCJ9OwogCQlzdGF0aWMgaW50IHdiX3RtcCA9IDA7CiAJCWlmICh3Yl90bXAgPT0gMCl7Ci0JCQlwcmludGsoIiVzKCk6aW90IHBlZXIgaXMgJSN4OiVzLCBic3NpZDoiTUFDX0ZNVCJcbiIsX19GVU5DVElPTl9fLHBIVEluZm8tPklPVFBlZXIscGVlcm5hbWVbcEhUSW5mby0+SU9UUGVlcl0sIE1BQ19BUkcocHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuYnNzaWQpKTsKKwkJCXByaW50aygiJXMoKTppb3QgcGVlciBpcyAlI3g6JXMsIGJzc2lkOiVwTVxuIixfX0ZVTkNUSU9OX18scEhUSW5mby0+SU9UUGVlcixwZWVybmFtZVtwSFRJbmZvLT5JT1RQZWVyXSwgcHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuYnNzaWQpOwogCQkJd2JfdG1wID0gMTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L0tjb25maWcKaW5kZXggOTkxM2FiOC4uMDQzOWM5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L0tjb25maWcKQEAgLTEsNiArMSw3IEBACiBjb25maWcgUlRMODE5MlUKIAl0cmlzdGF0ZSAiUmVhbFRlayBSVEw4MTkyVSBXaXJlbGVzcyBMQU4gTklDIGRyaXZlciIKIAlkZXBlbmRzIG9uIFBDSSAmJiBXTEFOICYmIFVTQgotCWRlcGVuZHMgb24gV0lSRUxFU1NfRVhUCisJc2VsZWN0IFdJUkVMRVNTX0VYVAorCXNlbGVjdCBXRVhUX1BSSVYKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvTWFrZWZpbGUKaW5kZXggMmQ1OWM0ZS4uNzM4ZjRhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAKIEVYVFJBX0NGTEFHUyArPSAtc3RkPWdudTg5CiBFWFRSQV9DRkxBR1MgKz0gLU8yCiAKLUVYVFJBX0NGTEFHUyArPSAtbWhhcmQtZmxvYXQgLURDT05GSUdfRk9SQ0VfSEFSRF9GTE9BVD15CitFWFRSQV9DRkxBR1MgKz0gLURDT05GSUdfRk9SQ0VfSEFSRF9GTE9BVD15CiBFWFRSQV9DRkxBR1MgKz0gLURKQUNLU09OX05FV184MTg3IC1ESkFDS1NPTl9ORVdfUlgKIEVYVFJBX0NGTEFHUyArPSAtRFRIT01BU19CRUFDT04gLURUSE9NQVNfVEFTS0xFVCAtRFRIT01BU19TS0IgLURUSE9NQVNfVFVSQk8KICNFWFRSQV9DRkxBR1MgKz0gLURVU0JfVFhfRFJJVkVSX0FHR1JFR0FUSU9OX0VOQUJMRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS5oCmluZGV4IDNhNDdmMTIuLjlkMDVlZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExLmgKQEAgLTU1MSw5ICs1NTEsNiBAQAogCiAvKiBkZWJ1ZyBtYWNyb3Mgbm90IGRlcGVuZGVudCBvbiBDT05GSUdfSUVFRTgwMjExX0RFQlVHICovCiAKLSNkZWZpbmUgTUFDX0ZNVCAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiCi0jZGVmaW5lIE1BQ19BUkcoeCkgKCh1OCopKHgpKVswXSwoKHU4KikoeCkpWzFdLCgodTgqKSh4KSlbMl0sKCh1OCopKHgpKVszXSwoKHU4KikoeCkpWzRdLCgodTgqKSh4KSlbNV0KLQogLyoKICAqIFRvIHVzZSB0aGUgZGVidWcgc3lzdGVtOwogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMS5oCmluZGV4IDEwOTA4ZTEyMy4uMzk4NDdjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMS5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KQEAgLTU1MSw5ICs1NTIsNiBAQAogCiAvKiBkZWJ1ZyBtYWNyb3Mgbm90IGRlcGVuZGVudCBvbiBDT05GSUdfSUVFRTgwMjExX0RFQlVHICovCiAKLSNkZWZpbmUgTUFDX0ZNVCAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiCi0jZGVmaW5lIE1BQ19BUkcoeCkgKCh1OCopKHgpKVswXSwoKHU4KikoeCkpWzFdLCgodTgqKSh4KSlbMl0sKCh1OCopKHgpKVszXSwoKHU4KikoeCkpWzRdLCgodTgqKSh4KSlbNV0KLQogLyoKICAqIFRvIHVzZSB0aGUgZGVidWcgc3lzdGVtOwogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYwppbmRleCAwYjMzYmY0Li4wYjU3NjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF9jY21wLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfY2NtcC5jCkBAIC0yODgsNyArMjg4LDcgQEAKIAlpZiAoIShrZXlpZHggJiAoMSA8PCA1KSkpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIkNDTVA6IHJlY2VpdmVkIHBhY2tldCB3aXRob3V0IEV4dElWIgotCQkJICAgICAgICIgZmxhZyBmcm9tICIgTUFDX0ZNVCAiXG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCSAgICAgICAiIGZsYWcgZnJvbSAlcE1cbiIsIGhkci0+YWRkcjIpOwogCQl9CiAJCWtleS0+ZG90MTFSU05BU3RhdHNDQ01QRm9ybWF0RXJyb3JzKys7CiAJCXJldHVybiAtMjsKQEAgLTMwMSw5ICszMDEsOSBAQAogCX0KIAlpZiAoIWtleS0+a2V5X3NldCkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiQ0NNUDogcmVjZWl2ZWQgcGFja2V0IGZyb20gIiBNQUNfRk1UCisJCQlwcmludGsoS0VSTl9ERUJVRyAiQ0NNUDogcmVjZWl2ZWQgcGFja2V0IGZyb20gJXBNIgogCQkJICAgICAgICIgd2l0aCBrZXlpZD0lZCB0aGF0IGRvZXMgbm90IGhhdmUgYSBjb25maWd1cmVkIgotCQkJICAgICAgICIga2V5XG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpLCBrZXlpZHgpOworCQkJICAgICAgICIga2V5XG4iLCBoZHItPmFkZHIyLCBrZXlpZHgpOwogCQl9CiAJCXJldHVybiAtMzsKIAl9CkBAIC0zMTgsMTEgKzMxOCw5IEBACiAKIAlpZiAobWVtY21wKHBuLCBrZXktPnJ4X3BuLCBDQ01QX1BOX0xFTikgPD0gMCkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiQ0NNUDogcmVwbGF5IGRldGVjdGVkOiBTVEE9IiBNQUNfRk1UCi0JCQkgICAgICAgIiBwcmV2aW91cyBQTiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggIgotCQkJICAgICAgICJyZWNlaXZlZCBQTiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCi0JCQkgICAgICAgTUFDX0FSRyhoZHItPmFkZHIyKSwgTUFDX0FSRyhrZXktPnJ4X3BuKSwKLQkJCSAgICAgICBNQUNfQVJHKHBuKSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiQ0NNUDogcmVwbGF5IGRldGVjdGVkOiBTVEE9JXBNIgorCQkJICAgICAgICIgcHJldmlvdXMgUE4gJXBtIHJlY2VpdmVkIFBOICVwbVxuIiwKKwkJCSAgICAgICBoZHItPmFkZHIyLCBrZXktPnJ4X3BuLCBwbik7CiAJCX0KIAkJa2V5LT5kb3QxMVJTTkFTdGF0c0NDTVBSZXBsYXlzKys7CiAJCXJldHVybiAtNDsKQEAgLTM1OSw3ICszNTcsNyBAQAogCQlpZiAobWVtY21wKG1pYywgYSwgQ0NNUF9NSUNfTEVOKSAhPSAwKSB7CiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIkNDTVA6IGRlY3J5cHQgZmFpbGVkOiBTVEE9IgotCQkJCU1BQ19GTVQgIlxuIiwgTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCQkJIiVwTVxuIiwgaGRyLT5hZGRyMik7CiAJCQl9CiAJCQlrZXktPmRvdDExUlNOQVN0YXRzQ0NNUERlY3J5cHRFcnJvcnMrKzsKIAkJCXJldHVybiAtNTsKQEAgLTQzNSwxMSArNDMzLDEwIEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9jY21wX2RhdGEgKmNjbXAgPSBwcml2OwogCXAgKz0gc3ByaW50ZihwLCAia2V5WyVkXSBhbGc9Q0NNUCBrZXlfc2V0PSVkICIKLQkJICAgICAidHhfcG49JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4ICIKLQkJICAgICAicnhfcG49JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4ICIKKwkJICAgICAidHhfcG49JXBtIHJ4X3BuPSVwbSAiCiAJCSAgICAgImZvcm1hdF9lcnJvcnM9JWQgcmVwbGF5cz0lZCBkZWNyeXB0X2Vycm9ycz0lZFxuIiwKIAkJICAgICBjY21wLT5rZXlfaWR4LCBjY21wLT5rZXlfc2V0LAotCQkgICAgIE1BQ19BUkcoY2NtcC0+dHhfcG4pLCBNQUNfQVJHKGNjbXAtPnJ4X3BuKSwKKwkJICAgICBjY21wLT50eF9wbiwgY2NtcC0+cnhfcG4sCiAJCSAgICAgY2NtcC0+ZG90MTFSU05BU3RhdHNDQ01QRm9ybWF0RXJyb3JzLAogCQkgICAgIGNjbXAtPmRvdDExUlNOQVN0YXRzQ0NNUFJlcGxheXMsCiAJCSAgICAgY2NtcC0+ZG90MTFSU05BU3RhdHNDQ01QRGVjcnlwdEVycm9ycyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMKaW5kZXggODQxYjk5OS4uOTUxMDUwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3RraXAuYwpAQCAtNDEwLDcgKzQxMCw3IEBACiAJaWYgKCEoa2V5aWR4ICYgKDEgPDwgNSkpKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJUS0lQOiByZWNlaXZlZCBwYWNrZXQgd2l0aG91dCBFeHRJViIKLQkJCSAgICAgICAiIGZsYWcgZnJvbSAiIE1BQ19GTVQgIlxuIiwgTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCQkgICAgICAgIiBmbGFnIGZyb20gJXBNXG4iLCBoZHItPmFkZHIyKTsKIAkJfQogCQlyZXR1cm4gLTI7CiAJfQpAQCAtNDIyLDkgKzQyMiw5IEBACiAJfQogCWlmICghdGtleS0+a2V5X3NldCkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiVEtJUDogcmVjZWl2ZWQgcGFja2V0IGZyb20gIiBNQUNfRk1UCisJCQlwcmludGsoS0VSTl9ERUJVRyAiVEtJUDogcmVjZWl2ZWQgcGFja2V0IGZyb20gJXBNIgogCQkJICAgICAgICIgd2l0aCBrZXlpZD0lZCB0aGF0IGRvZXMgbm90IGhhdmUgYSBjb25maWd1cmVkIgotCQkJICAgICAgICIga2V5XG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpLCBrZXlpZHgpOworCQkJICAgICAgICIga2V5XG4iLCBoZHItPmFkZHIyLCBrZXlpZHgpOwogCQl9CiAJCXJldHVybiAtMzsKIAl9CkBAIC00MzcsOSArNDM3LDkgQEAKIAkJaWYgKGl2MzIgPCB0a2V5LT5yeF9pdjMyIHx8CiAJCShpdjMyID09IHRrZXktPnJ4X2l2MzIgJiYgaXYxNiA8PSB0a2V5LT5yeF9pdjE2KSkgewogCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJCXByaW50ayhLRVJOX0RFQlVHICJUS0lQOiByZXBsYXkgZGV0ZWN0ZWQ6IFNUQT0iIE1BQ19GTVQKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiVEtJUDogcmVwbGF5IGRldGVjdGVkOiBTVEE9JXBNIgogCQkJCSIgcHJldmlvdXMgVFNDICUwOHglMDR4IHJlY2VpdmVkIFRTQyAiCi0JCQkJIiUwOHglMDR4XG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpLAorCQkJCSIlMDh4JTA0eFxuIiwgaGRyLT5hZGRyMiwKIAkJCQl0a2V5LT5yeF9pdjMyLCB0a2V5LT5yeF9pdjE2LCBpdjMyLCBpdjE2KTsKIAkJCX0KIAkJCXRrZXktPmRvdDExUlNOQVN0YXRzVEtJUFJlcGxheXMrKzsKQEAgLTQ2MCw4ICs0NjAsOCBAQAogCQlpZiAoY3J5cHRvX2Jsa2NpcGhlcl9kZWNyeXB0KCZkZXNjLCAmc2csICZzZywgcGxlbiArIDQpKSB7CiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIjogVEtJUDogZmFpbGVkIHRvIGRlY3J5cHQgIgotCQkJCQkJInJlY2VpdmVkIHBhY2tldCBmcm9tICIgTUFDX0ZNVCAiXG4iLAotCQkJCQkJTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCQkJCQkicmVjZWl2ZWQgcGFja2V0IGZyb20gJXBNXG4iLAorCQkJCQkJaGRyLT5hZGRyMik7CiAJCQl9CiAJCQlyZXR1cm4gLTc7CiAJCX0KQEAgLTQ4MCw3ICs0ODAsNyBAQAogCQkJfQogCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJCXByaW50ayhLRVJOX0RFQlVHICJUS0lQOiBJQ1YgZXJyb3IgZGV0ZWN0ZWQ6IFNUQT0iCi0JCQkJTUFDX0ZNVCAiXG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCQkiJXBNXG4iLCBoZHItPmFkZHIyKTsKIAkJCX0KIAkJCXRrZXktPmRvdDExUlNOQVN0YXRzVEtJUElDVkVycm9ycysrOwogCQkJcmV0dXJuIC01OwpAQCAtNjM1LDggKzYzNSw4IEBACiAJCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CiAJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogTWljaGFlbCBNSUMgdmVyaWZpY2F0aW9uIGZhaWxlZCBmb3IgIgotCQkgICAgICAgIk1TRFUgZnJvbSAiIE1BQ19GTVQgIiBrZXlpZHg9JWRcbiIsCi0JCSAgICAgICBza2ItPmRldiA/IHNrYi0+ZGV2LT5uYW1lIDogIk4vQSIsIE1BQ19BUkcoaGRyLT5hZGRyMiksCisJCSAgICAgICAiTVNEVSBmcm9tICVwTSBrZXlpZHg9JWRcbiIsCisJCSAgICAgICBza2ItPmRldiA/IHNrYi0+ZGV2LT5uYW1lIDogIk4vQSIsIGhkci0+YWRkcjIsCiAJCSAgICAgICBrZXlpZHgpOwogCQlpZiAoc2tiLT5kZXYpCiAJCQlpZWVlODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShza2ItPmRldiwgaGRyLCBrZXlpZHgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYwppbmRleCA3YTg2OTBmLi5iNzUyMDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYwpAQCAtMjYwLDcgKzI2MCw3IEBACiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCiB7CiAJY2hhciBidWZbXSA9ICIweDAwMDAwMDAwIjsKLQl1bnNpZ25lZCBsb25nIGxlbiA9IG1pbihzaXplb2YoYnVmKSAtIDEsIGNvdW50KTsKKwl1bnNpZ25lZCBsb25nIGxlbiA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIHNpemVvZihidWYpIC0gMSwgY291bnQpOwogCWNoYXIgKnAgPSAoY2hhciAqKWJ1ZjsKIAl1bnNpZ25lZCBsb25nIHZhbDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKaW5kZXggMGUwMDNjNS4uN2U5YjM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCkBAIC0zNjAsOCArMzYwLDggQEAKIAkgICAgc3RyY21wKGNyeXB0LT5vcHMtPm5hbWUsICJUS0lQIikgPT0gMCkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRLSVAgY291bnRlcm1lYXN1cmVzOiBkcm9wcGVkICIKLQkJCSAgICAgICAicmVjZWl2ZWQgcGFja2V0IGZyb20gIiBNQUNfRk1UICJcbiIsCi0JCQkgICAgICAgaWVlZS0+ZGV2LT5uYW1lLCBNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCSAgICAgICAicmVjZWl2ZWQgcGFja2V0IGZyb20gJXBNXG4iLAorCQkJICAgICAgIGllZWUtPmRldi0+bmFtZSwgaGRyLT5hZGRyMik7CiAJCX0KIAkJcmV0dXJuIC0xOwogCX0KQEAgLTM3Miw4ICszNzIsOCBAQAogCWF0b21pY19kZWMoJmNyeXB0LT5yZWZjbnQpOwogCWlmIChyZXMgPCAwKSB7CiAJCUlFRUU4MDIxMV9ERUJVR19EUk9QKAotCQkJImRlY3J5cHRpb24gZmFpbGVkIChTQT0iIE1BQ19GTVQKLQkJCSIpIHJlcz0lZFxuIiwgTUFDX0FSRyhoZHItPmFkZHIyKSwgcmVzKTsKKwkJCSJkZWNyeXB0aW9uIGZhaWxlZCAoU0E9JXBNIgorCQkJIikgcmVzPSVkXG4iLCBoZHItPmFkZHIyLCByZXMpOwogCQlpZiAocmVzID09IC0yKQogCQkJSUVFRTgwMjExX0RFQlVHX0RST1AoIkRlY3J5cHRpb24gZmFpbGVkIElDViAiCiAJCQkJCSAgICAgIm1pc21hdGNoIChrZXkgJWQpXG4iLApAQCAtNDEwLDggKzQxMCw4IEBACiAJYXRvbWljX2RlYygmY3J5cHQtPnJlZmNudCk7CiAJaWYgKHJlcyA8IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBNU0RVIGRlY3J5cHRpb24vTUlDIHZlcmlmaWNhdGlvbiBmYWlsZWQiCi0JCSAgICAgICAiIChTQT0iIE1BQ19GTVQgIiBrZXlpZHg9JWQpXG4iLAotCQkgICAgICAgaWVlZS0+ZGV2LT5uYW1lLCBNQUNfQVJHKGhkci0+YWRkcjIpLCBrZXlpZHgpOworCQkgICAgICAgIiAoU0E9JXBNIGtleWlkeD0lZClcbiIsCisJCSAgICAgICBpZWVlLT5kZXYtPm5hbWUsIGhkci0+YWRkcjIsIGtleWlkeCk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTEwMTYsOCArMTAxNiw4IEBACiAJCQkgKiBmcmFtZXMgc2lsZW50bHkgaW5zdGVhZCBvZiBmaWxsaW5nIHN5c3RlbSBsb2cgd2l0aAogCQkJICogdGhlc2UgcmVwb3J0cy4gKi8KIAkJCUlFRUU4MDIxMV9ERUJVR19EUk9QKCJEZWNyeXB0aW9uIGZhaWxlZCAobm90IHNldCkiCi0JCQkJCSAgICAgIiAoU0E9IiBNQUNfRk1UICIpXG4iLAotCQkJCQkgICAgIE1BQ19BUkcoaGRyLT5hZGRyMikpOworCQkJCQkgICAgICIgKFNBPSVwTSlcbiIsCisJCQkJCSAgICAgaGRyLT5hZGRyMik7CiAJCQlpZWVlLT5pZWVlX3N0YXRzLnJ4X2Rpc2NhcmRzX3VuZGVjcnlwdGFibGUrKzsKIAkJCWdvdG8gcnhfZHJvcHBlZDsKIAkJfQpAQCAtMTI1Niw4ICsxMjU2LDggQEAKIAkJfSBlbHNlIHsKIAkJCUlFRUU4MDIxMV9ERUJVR19EUk9QKAogCQkJCSJlbmNyeXB0aW9uIGNvbmZpZ3VyZWQsIGJ1dCBSWCAiCi0JCQkJImZyYW1lIG5vdCBlbmNyeXB0ZWQgKFNBPSIgTUFDX0ZNVCAiKVxuIiwKLQkJCQlNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCQkiZnJhbWUgbm90IGVuY3J5cHRlZCAoU0E9JXBNKVxuIiwKKwkJCQloZHItPmFkZHIyKTsKIAkJCWdvdG8gcnhfZHJvcHBlZDsKIAkJfQogCX0KQEAgLTEyNzYsOSArMTI3Niw5IEBACiAJICAgICFpZWVlODAyMTFfaXNfZWFwb2xfZnJhbWUoaWVlZSwgc2tiLCBoZHJsZW4pKSB7CiAJCUlFRUU4MDIxMV9ERUJVR19EUk9QKAogCQkJImRyb3BwZWQgdW5lbmNyeXB0ZWQgUlggZGF0YSAiCi0JCQkiZnJhbWUgZnJvbSAiIE1BQ19GTVQKKwkJCSJmcmFtZSBmcm9tICVwTSIKIAkJCSIgKGRyb3BfdW5lbmNyeXB0ZWQ9MSlcbiIsCi0JCQlNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCWhkci0+YWRkcjIpOwogCQlnb3RvIHJ4X2Ryb3BwZWQ7CiAJfQogLyoKQEAgLTIyNjAsMTEgKzIyNjAsMTEgQEAKIAl9CiAKIAlpZiAobmV0d29yay0+bW9kZSA9PSAwKSB7Ci0JCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJGaWx0ZXJlZCBvdXQgJyVzICgiIE1BQ19GTVQgIiknICIKKwkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkZpbHRlcmVkIG91dCAnJXMgKCVwTSknICIKIAkJCQkgICAgICJuZXR3b3JrLlxuIiwKIAkJCQkgICAgIGVzY2FwZV9lc3NpZChuZXR3b3JrLT5zc2lkLAogCQkJCQkJICBuZXR3b3JrLT5zc2lkX2xlbiksCi0JCQkJICAgICBNQUNfQVJHKG5ldHdvcmstPmJzc2lkKSk7CisJCQkJICAgICBuZXR3b3JrLT5ic3NpZCk7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMjQzOSw5ICsyNDM5LDkgQEAKIAogCW1lbXNldCgmbmV0d29yaywgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbmV0d29yaykpOwogCUlFRUU4MDIxMV9ERUJVR19TQ0FOKAotCQkiJyVzJyAoIiBNQUNfRk1UICIpOiAlYyVjJWMlYyAlYyVjJWMlYy0lYyVjJWMlYyAlYyVjJWMlY1xuIiwKKwkJIiclcycgKCVwTSk6ICVjJWMlYyVjICVjJWMlYyVjLSVjJWMlYyVjICVjJWMlYyVjXG4iLAogCQllc2NhcGVfZXNzaWQoaW5mb19lbGVtZW50LT5kYXRhLCBpbmZvX2VsZW1lbnQtPmxlbiksCi0JCU1BQ19BUkcoYmVhY29uLT5oZWFkZXIuYWRkcjMpLAorCQliZWFjb24tPmhlYWRlci5hZGRyMywKIAkJKGJlYWNvbi0+Y2FwYWJpbGl0eSAmICgxPDwweGYpKSA/ICcxJyA6ICcwJywKIAkJKGJlYWNvbi0+Y2FwYWJpbGl0eSAmICgxPDwweGUpKSA/ICcxJyA6ICcwJywKIAkJKGJlYWNvbi0+Y2FwYWJpbGl0eSAmICgxPDwweGQpKSA/ICcxJyA6ICcwJywKQEAgLTI0NjAsMTAgKzI0NjAsMTAgQEAKIAkJKGJlYWNvbi0+Y2FwYWJpbGl0eSAmICgxPDwweDApKSA/ICcxJyA6ICcwJyk7CiAKIAlpZiAoaWVlZTgwMjExX25ldHdvcmtfaW5pdChpZWVlLCBiZWFjb24sICZuZXR3b3JrLCBzdGF0cykpIHsKLQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkRyb3BwZWQgJyVzJyAoIiBNQUNfRk1UICIpIHZpYSAlcy5cbiIsCisJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJEcm9wcGVkICclcycgKCVwTSkgdmlhICVzLlxuIiwKIAkJCQkgICAgIGVzY2FwZV9lc3NpZChpbmZvX2VsZW1lbnQtPmRhdGEsCiAJCQkJCQkgIGluZm9fZWxlbWVudC0+bGVuKSwKLQkJCQkgICAgIE1BQ19BUkcoYmVhY29uLT5oZWFkZXIuYWRkcjMpLAorCQkJCSAgICAgYmVhY29uLT5oZWFkZXIuYWRkcjMsCiAJCQkJICAgICBXTEFOX0ZDX0dFVF9TVFlQRShiZWFjb24tPmhlYWRlci5mcmFtZV9jdGwpID09CiAJCQkJICAgICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCA/CiAJCQkJICAgICAiUFJPQkUgUkVTUE9OU0UiIDogIkJFQUNPTiIpOwpAQCAtMjU3NCwxMSArMjU3NCwxMSBAQAogCQkJLyogSWYgdGhlcmUgYXJlIG5vIG1vcmUgc2xvdHMsIGV4cGlyZSB0aGUgb2xkZXN0ICovCiAJCQlsaXN0X2RlbCgmb2xkZXN0LT5saXN0KTsKIAkJCXRhcmdldCA9IG9sZGVzdDsKLQkJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJFeHBpcmVkICclcycgKCIgTUFDX0ZNVCAiKSBmcm9tICIKKwkJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJFeHBpcmVkICclcycgKCVwTSkgZnJvbSAiCiAJCQkJCSAgICAgIm5ldHdvcmsgbGlzdC5cbiIsCiAJCQkJCSAgICAgZXNjYXBlX2Vzc2lkKHRhcmdldC0+c3NpZCwKIAkJCQkJCQkgIHRhcmdldC0+c3NpZF9sZW4pLAotCQkJCQkgICAgIE1BQ19BUkcodGFyZ2V0LT5ic3NpZCkpOworCQkJCQkgICAgIHRhcmdldC0+YnNzaWQpOwogCQl9IGVsc2UgewogCQkJLyogT3RoZXJ3aXNlIGp1c3QgcHVsbCBmcm9tIHRoZSBmcmVlIGxpc3QgKi8KIAkJCXRhcmdldCA9IGxpc3RfZW50cnkoaWVlZS0+bmV0d29ya19mcmVlX2xpc3QubmV4dCwKQEAgLTI1ODgsMTAgKzI1ODgsMTAgQEAKIAogCiAjaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRwotCQlJRUVFODAyMTFfREVCVUdfU0NBTigiQWRkaW5nICclcycgKCIgTUFDX0ZNVCAiKSB2aWEgJXMuXG4iLAorCQlJRUVFODAyMTFfREVCVUdfU0NBTigiQWRkaW5nICclcycgKCVwTSkgdmlhICVzLlxuIiwKIAkJCQkgICAgIGVzY2FwZV9lc3NpZChuZXR3b3JrLnNzaWQsCiAJCQkJCQkgIG5ldHdvcmsuc3NpZF9sZW4pLAotCQkJCSAgICAgTUFDX0FSRyhuZXR3b3JrLmJzc2lkKSwKKwkJCQkgICAgIG5ldHdvcmsuYnNzaWQsCiAJCQkJICAgICBXTEFOX0ZDX0dFVF9TVFlQRShiZWFjb24tPmhlYWRlci5mcmFtZV9jdGwpID09CiAJCQkJICAgICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCA/CiAJCQkJICAgICAiUFJPQkUgUkVTUE9OU0UiIDogIkJFQUNPTiIpOwpAQCAtMjYwMSwxMCArMjYwMSwxMCBAQAogCQlpZihpZWVlLT5zb2Z0bWFjX2ZlYXR1cmVzICYgSUVFRV9TT0ZUTUFDX0FTU09DSUFURSkKIAkJCWllZWU4MDIxMV9zb2Z0bWFjX25ld19uZXQoaWVlZSwmbmV0d29yayk7CiAJfSBlbHNlIHsKLQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIlVwZGF0aW5nICclcycgKCIgTUFDX0ZNVCAiKSB2aWEgJXMuXG4iLAorCQlJRUVFODAyMTFfREVCVUdfU0NBTigiVXBkYXRpbmcgJyVzJyAoJXBNKSB2aWEgJXMuXG4iLAogCQkJCSAgICAgZXNjYXBlX2Vzc2lkKHRhcmdldC0+c3NpZCwKIAkJCQkJCSAgdGFyZ2V0LT5zc2lkX2xlbiksCi0JCQkJICAgICBNQUNfQVJHKHRhcmdldC0+YnNzaWQpLAorCQkJCSAgICAgdGFyZ2V0LT5ic3NpZCwKIAkJCQkgICAgIFdMQU5fRkNfR0VUX1NUWVBFKGJlYWNvbi0+aGVhZGVyLmZyYW1lX2N0bCkgPT0KIAkJCQkgICAgIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQID8KIAkJCQkgICAgICJQUk9CRSBSRVNQT05TRSIgOiAiQkVBQ09OIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKaW5kZXggOGE4NmU5My4uMjdkOTI1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwpAQCAtMTczMSw3ICsxNzMxLDcgQEAKIAkJaWVlZTgwMjExX3Jlc3BfdG9fYXNzb2NfcnEoaWVlZSwgZGVzdCk7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyJOZXcgY2xpZW50IGFzc29jaWF0ZWQ6ICJNQUNfRk1UIlxuIiwgTUFDX0FSRyhkZXN0KSk7CisJcHJpbnRrKEtFUk5fSU5GTyJOZXcgY2xpZW50IGFzc29jaWF0ZWQ6ICVwTVxuIiwgZGVzdCk7CiAJLy9GSVhNRQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwppbmRleCBiMjljMzZiLi40ODUzN2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKQEAgLTIwMCw4ICsyMDAsOCBAQAogCQloZWFkZXIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgZnJhZy0+ZGF0YTsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUS0lQIGNvdW50ZXJtZWFzdXJlczogZHJvcHBlZCAiCi0JCQkgICAgICAgIlRYIHBhY2tldCB0byAiIE1BQ19GTVQgIlxuIiwKLQkJCSAgICAgICBpZWVlLT5kZXYtPm5hbWUsIE1BQ19BUkcoaGVhZGVyLT5hZGRyMSkpOworCQkJICAgICAgICJUWCBwYWNrZXQgdG8gJXBNXG4iLAorCQkJICAgICAgIGllZWUtPmRldi0+bmFtZSwgaGVhZGVyLT5hZGRyMSk7CiAJCX0KIAkJcmV0dXJuIC0xOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCmluZGV4IDVmMTJkNjIuLmMwYjJjMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwpAQCAtMjg5LDEwICsyODksMTAgQEAKIAkJZWxzZQogCQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oCiAJCQkJIk5vdCBzaG93aW5nIG5ldHdvcmsgJyVzICgiCi0JCQkJTUFDX0ZNVCAiKScgZHVlIHRvIGFnZSAoJWx1bXMpLlxuIiwKKwkJCQkiJXBNKScgZHVlIHRvIGFnZSAoJWx1bXMpLlxuIiwKIAkJCQllc2NhcGVfZXNzaWQobmV0d29yay0+c3NpZCwKIAkJCQkJICAgICBuZXR3b3JrLT5zc2lkX2xlbiksCi0JCQkJTUFDX0FSRyhuZXR3b3JrLT5ic3NpZCksCisJCQkJbmV0d29yay0+YnNzaWQsCiAJCQkJKGppZmZpZXMgLSBuZXR3b3JrLT5sYXN0X3NjYW5uZWQpIC8gKEhaIC8gMTAwKSk7CiAJfQogCkBAIC03MTgsNyArNzE4LDcgQEAKIAl9IGVsc2UKIAkJaWR4ID0gaWVlZS0+dHhfa2V5aWR4OwogCi0JaWYgKCFleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfR1JPVVBfS0VZICYmCisJaWYgKCEoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX0dST1VQX0tFWSkgJiYKIAkgICAgZXh0LT5hbGcgIT0gSVdfRU5DT0RFX0FMR19XRVApCiAJCWlmIChpZHggIT0gMCB8fCBpZWVlLT5pd19tb2RlICE9IElXX01PREVfSU5GUkEpCiAJCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYwppbmRleCA1MTJhNTdhLi4yN2QwODNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfQkFQcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIAl1MTYgdG1wID0gMDsKIAl1MTYgbGVuID0gaWVlZS0+dHhfaGVhZHJvb20gKyA5OwogCS8vY2F0ZWdvcnkoMSkgKyBhY3Rpb24gZmllbGQoMSkgKyBEaWFsb2cgVG9rZW4oMSkgKyBCQSBQYXJhbWV0ZXIgU2V0KDIpICsgIEJBIFRpbWVvdXQgVmFsdWUoMikgKyAgQkEgU3RhcnQgU2VxQ3RybCgyKShvciBTdGF0dXNDb2RlKDIpKQotCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFJBQ0UgfCBJRUVFODAyMTFfRExfQkEsICI9PT09PT09PT4lcygpLCBmcmFtZSglZCkgc2VudGQgdG86Ik1BQ19GTVQiLCBpZWVlLT5kZXY6JXBcbiIsIF9fRlVOQ1RJT05fXywgdHlwZSwgTUFDX0FSRyhEc3QpLCBpZWVlLT5kZXYpOworCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFJBQ0UgfCBJRUVFODAyMTFfRExfQkEsICI9PT09PT09PT4lcygpLCBmcmFtZSglZCkgc2VudGQgdG86JXBNLCBpZWVlLT5kZXY6JXBcbiIsIF9fRlVOQ1RJT05fXywgdHlwZSwgRHN0LCBpZWVlLT5kZXYpOwogCWlmIChwQkEgPT0gTlVMTHx8aWVlZSA9PSBOVUxMKQogCXsKIAkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICJwQkEoJXApIGlzIE5VTEwgb3IgaWVlZSglcCkgaXMgTlVMTFxuIiwgcEJBLCBpZWVlKTsKQEAgLTIwMSw3ICsyMDEsNyBAQAogCXUxNiBsZW4gPSA2ICsgaWVlZS0+dHhfaGVhZHJvb207CiAKIAlpZiAobmV0X3JhdGVsaW1pdCgpKQotCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFJBQ0UgfCBJRUVFODAyMTFfRExfQkEsICI9PT09PT09PT4lcygpLCBSZWFzb25Db2RlKCVkKSBzZW50ZCB0bzoiTUFDX0ZNVCJcbiIsIF9fRlVOQ1RJT05fXywgUmVhc29uQ29kZSwgTUFDX0FSRyhkc3QpKTsKKwlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RSQUNFIHwgSUVFRTgwMjExX0RMX0JBLCAiPT09PT09PT0+JXMoKSwgUmVhc29uQ29kZSglZCkgc2VudGQgdG86JXBNXG4iLCBfX0ZVTkNUSU9OX18sIFJlYXNvbkNvZGUsIGRzdCk7CiAKIAltZW1zZXQoJkRlbGJhUGFyYW1TZXQsIDAsIDIpOwogCkBAIC0zNTUsNyArMzU1LDcgQEAKIAlwQmFUaW1lb3V0VmFsID0gKHUxNiopKHRhZyArIDUpOwogCXBCYVN0YXJ0U2VxQ3RybCA9IChQU0VRVUVOQ0VfQ09OVFJPTCkocmVxICsgNyk7CiAKLQlwcmludGsoIj09PT09PT09PT09PT09PT09PT09PnJ4IEFEREJBUkVRIGZyb20gOiJNQUNfRk1UIlxuIiwgTUFDX0FSRyhkc3QpKTsKKwlwcmludGsoIj09PT09PT09PT09PT09PT09PT09PnJ4IEFEREJBUkVRIGZyb20gOiVwTVxuIiwgZHN0KTsKIC8vc29tZSBvdGhlciBjYXBhYmlsaXR5IGlzIG5vdCByZWFkeSBub3cuCiAJaWYoCShpZWVlLT5jdXJyZW50X25ldHdvcmsucW9zX2RhdGEuYWN0aXZlID09IDApIHx8CiAJCShpZWVlLT5wSFRJbmZvLT5iQ3VycmVudEhUU3VwcG9ydCA9PSBmYWxzZSkpIC8vfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYwppbmRleCAyYzRlYjM4Li41MGY0ZjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfSFRQcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X0hUUHJvYy5jCkBAIC00MSw3ICs0MSw3IEBACiAvL3N0YXRpYyB1OCBETElOS19BVEhFUk9TWzNdID0gezB4MDAsIDB4MWMsIDB4ZjB9Owogc3RhdGljIHU4IENJU0NPX0JST0FEQ09NWzNdID0gezB4MDAsIDB4MTcsIDB4OTR9OwogCi0vLyAyMDA4LzA0LzAxIE1IIEZvciBDaXNjbyBHIG1vZGUgUlggVFAgV2UgbmVlZCB0byBjaGFuZ2UgRlcgZHVyYXRpb24uIFNob3VkIHdlIHB1dCB0aGUKKy8vIDIwMDgvMDQvMDEgTUggRm9yIENpc2NvIEcgbW9kZSBSWCBUUCBXZSBuZWVkIHRvIGNoYW5nZSBGVyBkdXJhdGlvbi4gU2hvdWxkIHdlIHB1dCB0aGUKIC8vIGNvZGUgaW4gb3RoZXIgcGxhY2U/PwogLy9zdGF0aWMgdTggV0lGSV9DSVNDT19HX0FQWzNdID0gezB4MDAsIDB4NDAsIDB4OTZ9OwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMzQyLDcgKzEzNDIsNyBAQAogCiAJCXBIVEluZm8tPkN1cnJlbnRBTVBEVUZhY3RvciA9IHBIVEluZm8tPkFNUERVX0ZhY3RvcjsKIAotCQlwSFRJbmZvLT5DdXJyZW50TVBEVURlbnNpdHkgPSBwSFRJbmZvLT5DdXJyZW50TVBEVURlbnNpdHk7CisJCXBIVEluZm8tPkN1cnJlbnRNUERVRGVuc2l0eSA9IHBIVEluZm8tPk1QRFVfRGVuc2l0eTsKIAogCQkvLyBTZXQgQldPcE1vZGUgcmVnaXN0ZXIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X1RTUHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X1RTUHJvYy5jCmluZGV4IDUzNzNkNTYuLmQxMjc1ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9UU1Byb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfVFNQcm9jLmMKQEAgLTI5MCw3ICsyOTAsNyBAQAogCQlpZihzZWFyY2hfZGlyW2Rpcl0gPT1mYWxzZSApCiAJCQljb250aW51ZTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShwUmV0LCBwc2VhcmNoX2xpc3QsIExpc3QpewotCS8vCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RTLCAiQUREOiJNQUNfRk1UIiwgVElEOiVkLCBkaXI6JWRcbiIsIE1BQ19BUkcocFJldC0+QWRkciksIHBSZXQtPlRTcGVjLmYuVFNJbmZvLmZpZWxkLnVjVFNJRCwgcFJldC0+VFNwZWMuZi5UU0luZm8uZmllbGQudWNEaXJlY3Rpb24pOworCS8vCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RTLCAiQUREOiVwTSwgVElEOiVkLCBkaXI6JWRcbiIsIHBSZXQtPkFkZHIsIHBSZXQtPlRTcGVjLmYuVFNJbmZvLmZpZWxkLnVjVFNJRCwgcFJldC0+VFNwZWMuZi5UU0luZm8uZmllbGQudWNEaXJlY3Rpb24pOwogCQkJaWYgKG1lbWNtcChwUmV0LT5BZGRyLCBBZGRyLCA2KSA9PSAwKQogCQkJCWlmIChwUmV0LT5UU3BlYy5mLlRTSW5mby5maWVsZC51Y1RTSUQgPT0gVElEKQogCQkJCQlpZihwUmV0LT5UU3BlYy5mLlRTSW5mby5maWVsZC51Y0RpcmVjdGlvbiA9PSBkaXIpCkBAIC00NDUsNyArNDQ1LDcgQEAKIAkJCQkJUmVzZXRSeFRzRW50cnkodG1wKTsKIAkJCQl9CiAKLQkJCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RTLCAidG8gaW5pdCBjdXJyZW50IFRTLCBVUDolZCwgRGlyOiVkLCBhZGRyOiJNQUNfRk1UIlxuIiwgVVAsIERpciwgTUFDX0FSRyhBZGRyKSk7CisJCQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9UUywgInRvIGluaXQgY3VycmVudCBUUywgVVA6JWQsIERpcjolZCwgYWRkcjolcE1cbiIsIFVQLCBEaXIsIEFkZHIpOwogCQkJCS8vIFByZXBhcmUgVFMgSW5mbyByZWxlYXRlZCBmaWVsZAogCQkJCXBUU0luZm8tPmZpZWxkLnVjVHJhZmZpY1R5cGUgPSAwOwkJCS8vIFRyYWZmaWMgdHlwZTogV01NIGlzIHJlc2VydmVkIGluIHRoaXMgZmllbGQKIAkJCQlwVFNJbmZvLT5maWVsZC51Y1RTSUQgPSBVUDsJCQkvLyBUU0lECkBAIC01MzEsNyArNTMxLDcgQEAKIHZvaWQgUmVtb3ZlUGVlclRTKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKiBpZWVlLCB1OCogQWRkcikKIHsKIAlQVFNfQ09NTU9OX0lORk8JcFRTLCBwVG1wVFM7Ci0JcHJpbnRrKCI9PT09PT09PT09PT5SZW1vdmVQZWVyVFMsIk1BQ19GTVQiXG4iLCBNQUNfQVJHKEFkZHIpKTsKKwlwcmludGsoIj09PT09PT09PT09PlJlbW92ZVBlZXJUUywlcE1cbiIsIEFkZHIpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwVFMsIHBUbXBUUywgJmllZWUtPlR4X1RTX1BlbmRpbmdfTGlzdCwgTGlzdCkKIAl7CiAJCWlmIChtZW1jbXAocFRTLT5BZGRyLCBBZGRyLCA2KSA9PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTkyVV9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOTJVX2NvcmUuYwppbmRleCBhZGFkZTEzLi5mMWUwODViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOTJVX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOTJVX2NvcmUuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAjZGVmaW5lIFRPVEFMX0NBTV9FTlRSWSAzMgogI2RlZmluZSBDQU1fQ09OVEVOVF9DT1VOVCA4CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBydGw4MTkyX3VzYl9pZF90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBydGw4MTkyX3VzYl9pZF90YmxbXSA9IHsKIAkvKiBSZWFsdGVrICovCiAJe1VTQl9ERVZJQ0UoMHgwYmRhLCAweDgxOTIpfSwKIAl7VVNCX0RFVklDRSgweDBiZGEsIDB4ODcwOSl9LApAQCAtMjcxOSw3ICsyNzE5LDcgQEAKIAkJCXdpcmVsZXNzX21vZGUgPSBXSVJFTEVTU19NT0RFX0I7CiAJCX0KIAl9Ci0jaWZkZWYgVE9fRE9fTElTVCAvLy8vIFRPRE86IHRoaXMgZnVuY3Rpb24gZG9lc24ndCB3b3JrIHdlbGwgYXQgdGhpcyB0aW1lLCB3ZSBzaG91ZCB3YWl0IGZvciBGUEdBCisjaWZkZWYgVE9fRE9fTElTVCAvLy8vIFRPRE86IHRoaXMgZnVuY3Rpb24gZG9lc24ndCB3b3JrIHdlbGwgYXQgdGhpcyB0aW1lLCB3ZSBzaG91bGQgd2FpdCBmb3IgRlBHQQogCUFjdFVwZGF0ZUNoYW5uZWxBY2Nlc3NTZXR0aW5nKCBwQWRhcHRlciwgcEhhbERhdGEtPkN1cnJlbnRXaXJlbGVzc01vZGUsICZwQWRhcHRlci0+TWdudEluZm8uSW5mbzgxODUuQ2hhbm5lbEFjY2Vzc1NldHRpbmcgKTsKICNlbmRpZgogCXByaXYtPmllZWU4MDIxMS0+bW9kZSA9IHdpcmVsZXNzX21vZGU7CkBAIC0yOTc2LDcgKzI5NzYsNyBAQAogCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgYk1hY19UbXBfQWRkciwgNik7CiAJCS8vc2hvdWxkIEkgc2V0IElEUjAgaGVyZT8KIAl9Ci0JUlRfVFJBQ0UoQ09NUF9FUFJPTSwgIk1BQyBhZGRyOiJNQUNfRk1UIlxuIiwgTUFDX0FSRyhkZXYtPmRldl9hZGRyKSk7CisJUlRfVFJBQ0UoQ09NUF9FUFJPTSwgIk1BQyBhZGRyOiVwTVxuIiwgZGV2LT5kZXZfYWRkcik7CiAJcHJpdi0+cmZfdHlwZSA9IFJUTDgxOVhfREVGQVVMVF9SRl9UWVBFOyAvL2RlZmF1bHQgMVQyUgogCXByaXYtPnJmX2NoaXAgPSBSRl84MjU2OwogCkBAIC02MDM3LDcgKzYwMzcsNyBAQAogCWlmIChFbnRyeU5vID49IFRPVEFMX0NBTV9FTlRSWSkKIAkJUlRfVFJBQ0UoQ09NUF9FUlIsICJjYW0gZW50cnkgZXhjZWVkcyBpbiBzZXRLZXkoKVxuIik7CiAKLQlSVF9UUkFDRShDT01QX1NFQywgIj09PT0+dG8gc2V0S2V5KCksIGRldjolcCwgRW50cnlObzolZCwgS2V5SW5kZXg6JWQsIEtleVR5cGU6JWQsIE1hY0FkZHIiTUFDX0ZNVCJcbiIsIGRldixFbnRyeU5vLCBLZXlJbmRleCwgS2V5VHlwZSwgTUFDX0FSRyhNYWNBZGRyKSk7CisJUlRfVFJBQ0UoQ09NUF9TRUMsICI9PT09PnRvIHNldEtleSgpLCBkZXY6JXAsIEVudHJ5Tm86JWQsIEtleUluZGV4OiVkLCBLZXlUeXBlOiVkLCBNYWNBZGRyJXBNXG4iLCBkZXYsRW50cnlObywgS2V5SW5kZXgsIEtleVR5cGUsIE1hY0FkZHIpOwogCiAJaWYgKERlZmF1bHRLZXkpCiAJCXVzQ29uZmlnIHw9IEJJVDE1IHwgKEtleVR5cGU8PDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NhbXN1bmctbGFwdG9wL3NhbXN1bmctbGFwdG9wLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2Ftc3VuZy1sYXB0b3Avc2Ftc3VuZy1sYXB0b3AuYwppbmRleCA0ODc3MTM4Li5kZDdlYTRjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NhbXN1bmctbGFwdG9wL3NhbXN1bmctbGFwdG9wLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NhbXN1bmctbGFwdG9wL3NhbXN1bmctbGFwdG9wLmMKQEAgLTk5LDcgKzk5LDggQEAKIAogc3RhdGljIGludCBmb3JjZTsKIG1vZHVsZV9wYXJhbShmb3JjZSwgYm9vbCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGZvcmNlLCAiRGlzYWJsZSB0aGUgRE1JIGNoZWNrIGFuZCBmb3JjZXMgdGhlIGRyaXZlciB0byBiZSBsb2FkZWQiKTsKK01PRFVMRV9QQVJNX0RFU0MoZm9yY2UsCisJCSJEaXNhYmxlIHRoZSBETUkgY2hlY2sgYW5kIGZvcmNlcyB0aGUgZHJpdmVyIHRvIGJlIGxvYWRlZCIpOwogCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CkBAIC0zNzAsNyArMzcxLDggQEAKIAl7CiAJCS5pZGVudCA9ICJOMTI4IiwKIAkJLm1hdGNoZXMgPSB7Ci0JCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJTQU1TVU5HIEVMRUNUUk9OSUNTIENPLiwgTFRELiIpLAorCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLAorCQkJCQkiU0FNU1VORyBFTEVDVFJPTklDUyBDTy4sIExURC4iKSwKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTjEyOCIpLAogCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiTjEyOCIpLAogCQl9LApAQCAtMzc5LDcgKzM4MSw4IEBACiAJewogCQkuaWRlbnQgPSAiTjEzMCIsCiAJCS5tYXRjaGVzID0gewotCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiU0FNU1VORyBFTEVDVFJPTklDUyBDTy4sIExURC4iKSwKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwKKwkJCQkJIlNBTVNVTkcgRUxFQ1RST05JQ1MgQ08uLCBMVEQuIiksCiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk4xMzAiKSwKIAkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIk4xMzAiKSwKIAkJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zZXAvc2VwX2RyaXZlci5jIGIvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfZHJpdmVyLmMKaW5kZXggZTdiYzllYy4uMjY1ZGU3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfZHJpdmVyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfZHJpdmVyLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KQEAgLTE4Miw4ICsxODMsOCBAQAogc3RhdGljIGludCBzZXBfbG9hZF9maXJtd2FyZShzdHJ1Y3Qgc2VwX2RldmljZSAqc2VwKQogewogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7Ci0JY2hhciAqY2FjaGVfbmFtZSA9ICJjYWNoZS5pbWFnZS5iaW4iOwotCWNoYXIgKnJlc19uYW1lID0gInJlc2lkZW50LmltYWdlLmJpbiI7CisJY2hhciAqY2FjaGVfbmFtZSA9ICJzZXAvY2FjaGUuaW1hZ2UuYmluIjsKKwljaGFyICpyZXNfbmFtZSA9ICJzZXAvcmVzaWRlbnQuaW1hZ2UuYmluIjsKIAlpbnQgZXJyb3I7CiAKIAllZGJnKCJTRVAgRHJpdmVyOnJhcl92aXJ0dWFsIGlzICVwXG4iLCBzZXAtPnJhcl9hZGRyKTsKQEAgLTIyMiw2ICsyMjMsOSBAQAogCXJldHVybiAwOwogfQogCitNT0RVTEVfRklSTVdBUkUoInNlcC9jYWNoZS5pbWFnZS5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgic2VwL3Jlc2lkZW50LmltYWdlLmJpbiIpOworCiAvKioKICAqCXNlcF9tYXBfYW5kX2FsbG9jX3NoYXJlZF9hcmVhCS0JYWxsb2NhdGUgc2hhcmVkIGJsb2NrCiAgKglAc2VwOiBzZWN1cml0eSBwcm9jZXNzb3IKQEAgLTI3Myw4ICsyNzcsOCBAQAogCQkJCQkJdm9pZCAqdmlydF9hZGRyZXNzKQogewogCWRtYV9hZGRyX3QgcGEgPSBzZXAtPnNoYXJlZF9idXMgKyAodmlydF9hZGRyZXNzIC0gc2VwLT5zaGFyZWRfYWRkcik7Ci0JZWRiZygic2VwOiB2aXJ0IHRvIGJ1cyBiICUwOGxseCB2ICVwXG4iLAotCQkodW5zaWduZWQgbG9uZyBsb25nKXBhLCB2aXJ0X2FkZHJlc3MpOworCWVkYmcoInNlcDogdmlydCB0byBidXMgYiAlMDhsbHggdiAlcFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgcGEsCisJCQkJCQkJCXZpcnRfYWRkcmVzcyk7CiAJcmV0dXJuIHBhOwogfQogCkBAIC0zODAsOCArMzg0LDcgQEAKIAkgICBzaGFyZWQgYXJlYSAqLwogCWlmICgodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSA+IFNFUF9EUklWRVJfTU1NQVBfQVJFQV9TSVpFKSB7CiAJCWVkYmcoIlNFUCBEcml2ZXIgbW1hcCByZXF1ZXN0ZWQgc2l6ZSBpcyBtb3JlIHRoYW4gYWxsb3dlZFxuIik7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlNFUCBEcml2ZXIgbW1hcCByZXF1ZXN0ZWQgc2l6ZSBpcyBtb3JlIFwKLQkJCXRoYW4gYWxsb3dlZFxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNFUCBEcml2ZXIgbW1hcCByZXF1ZXN0ZWQgc2l6ZSBpcyBtb3JlIHRoYW4gYWxsb3dlZFxuIik7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNFUCBEcml2ZXIgdm1hLT52bV9lbmQgaXMgJTA4bHhcbiIsIHZtYS0+dm1fZW5kKTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiU0VQIERyaXZlciB2bWEtPnZtX2VuZCBpcyAlMDhseFxuIiwgdm1hLT52bV9zdGFydCk7CiAJCXJldHVybiAtRUFHQUlOOwpAQCAtOTQxLDggKzk0NCw5IEBACiAJCQlkYmcoImRhdGFfc2l6ZSBpcyAlbHVcbiIsIGRhdGFfc2l6ZSk7CiAJCQl3aGlsZSAoMSk7CiAJCX0KLQkJZWRiZygibGxpX2FycmF5WyVsdV0ucGh5c2ljYWxfYWRkcmVzcyBpcyAlMDhseCwgXAotCQlsbGlfYXJyYXlbJWx1XS5ibG9ja19zaXplIGlzICVsdVxuIiwgY291bnQsIGxsaV9hcnJheVtjb3VudF0ucGh5c2ljYWxfYWRkcmVzcywgY291bnQsIGxsaV9hcnJheVtjb3VudF0uYmxvY2tfc2l6ZSk7CisJCWVkYmcoImxsaV9hcnJheVslbHVdLnBoeXNpY2FsX2FkZHJlc3MgaXMgJTA4bHgsIGxsaV9hcnJheVslbHVdLmJsb2NrX3NpemUgaXMgJWx1XG4iLAorCQkgICAgIGNvdW50LCBsbGlfYXJyYXlbY291bnRdLnBoeXNpY2FsX2FkZHJlc3MsCisJCSAgICAgY291bnQsIGxsaV9hcnJheVtjb3VudF0uYmxvY2tfc2l6ZSk7CiAJfQogCiAJLyogc2V0IG91dHB1dCBwYXJhbXMgKi8KQEAgLTE3NzEsNyArMTc3NSw3IEBACiBzdGF0aWMgaW50IHNlcF9jcmVhdGVfZmxvd19kbWFfdGFibGVzX2hhbmRsZXIoc3RydWN0IHNlcF9kZXZpY2UgKnNlcCwKIAkJCQkJCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlpbnQgZXJyb3I7CisJaW50IGVycm9yID0gLUVOT0VOVDsKIAlzdHJ1Y3Qgc2VwX2RyaXZlcl9idWlsZF9mbG93X3RhYmxlX3QgY29tbWFuZF9hcmdzOwogCS8qIGZpcnN0IHRhYmxlIC0gb3V0cHV0ICovCiAJc3RydWN0IHNlcF9sbGlfZW50cnlfdCBmaXJzdF90YWJsZV9kYXRhOwpAQCAtMjIzMiw3ICsyMjM2LDcgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQgc2VwX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIHNlcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJaW50IGVycm9yID0gMDsKIAlzdHJ1Y3Qgc2VwX2RldmljZSAqc2VwID0gZmlscC0+cHJpdmF0ZV9kYXRhOwpAQCAtMjU4Niw3ICsyNTkwLDcgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzZXBfcGNpX2lkX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNlcF9wY2lfaWRfdGJsW10gPSB7CiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgwODBjKX0sCiAJezB9CiB9OwpAQCAtMjYwNyw3ICsyNjExLDcgQEAKIC8qIHRoZSBmaWxlcyBvcGVyYXRpb25zIHN0cnVjdHVyZSBvZiB0aGUgZHJpdmVyICovCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZXBfZmlsZV9vcGVyYXRpb25zID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5pb2N0bCA9IHNlcF9pb2N0bCwKKwkudW5sb2NrZWRfaW9jdGwgPSBzZXBfaW9jdGwsCiAJLnBvbGwgPSBzZXBfcG9sbCwKIAkub3BlbiA9IHNlcF9vcGVuLAogCS5yZWxlYXNlID0gc2VwX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2VycXRfdXNiMi9zZXJxdF91c2IyLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2VycXRfdXNiMi9zZXJxdF91c2IyLmMKaW5kZXggMDYwZTlkZS4uNDRmMmQ0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NlcnF0X3VzYjIvc2VycXRfdXNiMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zZXJxdF91c2IyL3NlcnF0X3VzYjIuYwpAQCAtMTI2LDcgKzEyNiw3IEBACiAjZGVmaW5lIE1PREVNX0NUUkwgICAgICAgICAgMHg0MAogI2RlZmluZSBSUzIzMl9NT0RFICAgICAgICAgIDB4MDAKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHNlcnF0X2lkX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgc2VycXRfaWRfdGFibGVbXSA9IHsKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQVRFQ0gsIFFVQVRFQ0hfU1NVMTAwKX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBRVUFURUNIX1NTVTIwMCl9LAogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUVVBVEVDSCwgUVVBVEVDSF9EU1UxMDApfSwKQEAgLTEyNzcsNyArMTI3Nyw3IEBACiAJaWYgKGNmbGFnICYgQ1NUT1BCKQogCQluZXdfTENSIHw9IFNFUklBTF9UV09fU1RPUEI7CiAJZWxzZQotCQluZXdfTENSIHw9IFNFUklBTF9UV09fU1RPUEI7CisJCW5ld19MQ1IgfD0gU0VSSUFMX09ORV9TVE9QQjsKIAogCWRiZygiJXMgLSA0XG4iLCBfX2Z1bmNfXyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWMuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWMuaAppbmRleCBjY2Y3NjI1Li5lYjNhNjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpYy5oCkBAIC01MjcsMTUgKzUyNyw2IEBACiAgICAgKGxhcmdlc3RhdCkgKz0gKChuZXdzdGF0KSAtIChvbGRzdGF0KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfQogCi0jZGVmaW5lIEVUSEVSX0VRX0FERFIoX0FkZHJBLCBfQWRkckIsIF9SZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBfUmVzdWx0ID0gdHJ1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCoodTMyICopKF9BZGRyQSkgIT0gKih1MzIgKikoX0FkZHJCKSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlfUmVzdWx0ID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKih1MTYgKikoJigoX0FkZHJBKVs0XSkpICE9ICoodTE2ICopKCYoKF9BZGRyQilbNF0pKSkgICAgICAgIFwKLQlfUmVzdWx0ID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KLQogI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgfHwgZGVmaW5lZChDT05GSUdfSUE2NCkKICNkZWZpbmUgICBTTElDX0dFVF9BRERSX0xPVyhfYWRkcikgICh1MzIpKCh1NjQpKF9hZGRyKSAmIFwKIAkweDAwMDAwMDAwRkZGRkZGRkYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljb3NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljb3NzLmMKaW5kZXggZjVjYzAxYi4uN2RhZWNlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY29zcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNvc3MuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiBzdGF0aWMgaW50IHNsaWNfZW50cnlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgc2xpY19lbnRyeV9oYWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBzbGljX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwotc3RhdGljIGludCBzbGljX3htaXRfc3RhcnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3Qgc2xpY194bWl0X3N0YXJ0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc2xpY194bWl0X2ZhaWwoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICB2b2lkICpjbWQsIHUzMiBza2J0eXBlLCB1MzIgc3RhdHVzKTsKIHN0YXRpYyB2b2lkIHNsaWNfY29uZmlnX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KTsKQEAgLTE5NCwxNCArMTk0LDEwIEBACiBtb2R1bGVfcGFyYW0oaW50YWdnX2RlbGF5LCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhpbnRhZ2dfZGVsYXksICJ1U2VjIEludGVycnVwdCBBZ2dyZWdhdGlvbiBEZWxheSIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2xpY19wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKLQl7UENJX1ZFTkRPUl9JRF9BTEFDUklURUNILAotCSBTTElDXzFHQl9ERVZJQ0VfSUQsCi0JIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKLQl7UENJX1ZFTkRPUl9JRF9BTEFDUklURUNILAotCSBTTElDXzJHQl9ERVZJQ0VfSUQsCi0JIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKLQl7MCx9CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc2xpY19wY2lfdGJsKSA9IHsKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTEFDUklURUNILCBTTElDXzFHQl9ERVZJQ0VfSUQpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQUxBQ1JJVEVDSCwgU0xJQ18yR0JfREVWSUNFX0lEKSB9LAorCXsgMCB9CiB9OwogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc2xpY19wY2lfdGJsKTsKQEAgLTI5Miw3ICsyODgsNyBAQAogewogCXVzaG9ydCBpbmRleDsKIAlzdHJ1Y3Qgc2xpY19oYW5kbGUgKnBzbGljX2hhbmRsZTsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKW5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiAvKglhZGFwdGVyLT5wY2lkZXYgPSBwY2lkZXY7Ki8KIAlhZGFwdGVyLT52ZW5kaWQgPSBwY2lfdGJsX2VudHJ5LT52ZW5kb3I7CkBAIC0zNzAsNiArMzY2LDcgQEAKIAl1bG9uZyBtbWlvX3N0YXJ0ID0gMDsKIAl1bG9uZyBtbWlvX2xlbiA9IDA7CiAJc3RydWN0IHNsaWNjYXJkICpjYXJkID0gTlVMTDsKKwlpbnQgcGNpX3VzaW5nX2RhYyA9IDA7CiAKIAlzbGljX2dsb2JhbC5keW5hbWljX2ludGFnZyA9IGR5bmFtaWNfaW50YWdnOwogCkBAIC0zODMsMTYgKzM4MCwyNiBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiJXNcbiIsIHNsaWNfcHJvY192ZXJzaW9uKTsKIAl9CiAKLQllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBjaWRldiwgRE1BX0JJVF9NQVNLKDY0KSk7Ci0JaWYgKGVycikgewotCQllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBjaWRldiwgRE1BX0JJVF9NQVNLKDMyKSk7Ci0JCWlmIChlcnIpCisJaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBjaWRldiwgRE1BX0JJVF9NQVNLKDY0KSkpIHsKKwkJcGNpX3VzaW5nX2RhYyA9IDE7CisJCWlmIChwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpZGV2LCBETUFfQklUX01BU0soNjQpKSkgeworCQkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJ1bmFibGUgdG8gb2J0YWluIDY0LWJpdCBETUEgZm9yICIKKwkJCQkJImNvbnNpc3RlbnQgYWxsb2NhdGlvbnNcbiIpOwogCQkJZ290byBlcnJfb3V0X2Rpc2FibGVfcGNpOworCQl9CisJfSBlbHNlIGlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaWRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKKwkJcGNpX3VzaW5nX2RhYyA9IDA7CisJCXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2lkZXYsIERNQV9CSVRfTUFTSygzMikpOworCX0gZWxzZSB7CisJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAibm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uXG4iKTsKKwkJZ290byBlcnJfb3V0X2Rpc2FibGVfcGNpOwogCX0KIAogCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpZGV2LCBEUlZfTkFNRSk7Ci0JaWYgKGVycikKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAiY2FuJ3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIpOwogCQlnb3RvIGVycl9vdXRfZGlzYWJsZV9wY2k7CisJfQogCiAJcGNpX3NldF9tYXN0ZXIocGNpZGV2KTsKIApAQCAtNDA4LDYgKzQxNSw4IEBACiAJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OwogCWFkYXB0ZXItPnBjaWRldiA9IHBjaWRldjsKKwlpZiAocGNpX3VzaW5nX2RhYykKKwkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKIAltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMCk7CiAJbW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMCk7CkBAIC00ODQsNyArNDkzLDcgQEAKIAogc3RhdGljIGludCBzbGljX2VudHJ5X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOwogCXUzMiBsb2NrZWQgPSAwOwogCWludCBzdGF0dXM7CkBAIC01MzQsNyArNTQzLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaWRldik7CiAJdTMyIG1taW9fc3RhcnQgPSAwOwogCXVpbnQgbW1pb19sZW4gPSAwOwotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBzbGljY2FyZCAqY2FyZDsKIAlzdHJ1Y3QgbWNhc3RfYWRkcmVzcyAqbWNhZGRyLCAqbWxpc3Q7CiAKQEAgLTU4MSw3ICs1OTAsNyBAQAogCiBzdGF0aWMgaW50IHNsaWNfZW50cnlfaGFsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNsaWNjYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKIAlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKIApAQCAtNjI0LDcgKzYzMyw3IEBACiAKIHN0YXRpYyBpbnQgc2xpY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQogewotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGV0aHRvb2xfY21kIGVkYXRhOwogCXN0cnVjdCBldGh0b29sX2NtZCBlY21kOwogCXUzMiBkYXRhWzddOwpAQCAtNjQ5LDggKzY1OCw3IEBACiAKIAkJCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCBycS0+aWZyX2RhdGEsIDI4KSkgewogCQkJCVBSSU5UX0VSUk9SCi0JCQkJICAgICgic2xpYzogY29weV9mcm9tX3VzZXIgRkFJTEVEIGdldHRpbmcgXAotCQkJCSAgICAgaW5pdGlhbCBzaW1iYSBwYXJhbVxuIik7CisJCQkJICAgICgic2xpYzogY29weV9mcm9tX3VzZXIgRkFJTEVEIGdldHRpbmcgaW5pdGlhbCBzaW1iYSBwYXJhbVxuIik7CiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQl9CiAKQEAgLTY2NSw4ICs2NzMsNyBAQAogCQkJCSAgICh0cmFjZW1vbl9yZXF1ZXN0ID09CiAJCQkJICAgIFNMSUNfRFVNUF9JTl9QUk9HUkVTUykpIHsKIAkJCQlQUklOVF9FUlJPUgotCQkJCSAgICAoIkFUSyBEaWFnbm9zdGljIFRyYWNlIER1bXAgUmVxdWVzdGVkIGJ1dCBcCi0JCQkJICAgICBhbHJlYWR5IGluIHByb2dyZXNzLi4uIGlnbm9yZVxuIik7CisJCQkJICAgICgiQVRLIERpYWdub3N0aWMgVHJhY2UgRHVtcCBSZXF1ZXN0ZWQgYnV0IGFscmVhZHkgaW4gcHJvZ3Jlc3MuLi4gaWdub3JlXG4iKTsKIAkJCX0gZWxzZSB7CiAJCQkJUFJJTlRfRVJST1IKIAkJCQkgICAgKCJBVEsgRGlhZ25vc3RpYyBUcmFjZSBEdW1wIFJlcXVlc3RlZFxuIik7CkBAIC03ODQsMTAgKzc5MSwxMCBAQAogCiAjZGVmaW5lIE5PUk1BTF9FVEhGUkFNRSAgICAgMAogCi1zdGF0aWMgaW50IHNsaWNfeG1pdF9zdGFydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHNsaWNfeG1pdF9zdGFydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzbGljY2FyZCAqY2FyZDsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKW5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBzbGljX2hvc3RjbWQgKmhjbWQgPSBOVUxMOwogCXUzMiBzdGF0dXMgPSAwOwogCXUzMiBza2J0eXBlID0gTk9STUFMX0VUSEZSQU1FOwpAQCAtMTA3MSw3ICsxMDc4LDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzbGljX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldl9pZDsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKW5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiBpc3I7CiAKIAlpZiAoKGFkYXB0ZXItPnBzaG1lbSkgJiYgKGFkYXB0ZXItPnBzaG1lbS0+aXNyKSkgewpAQCAtMTIyOSwyMiArMTIzNiwyMSBAQAogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnNsaWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKiluZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CiAKIAlBU1NFUlQoYWRhcHRlcik7Ci0Jc3RhdHMgPSAmYWRhcHRlci0+c3RhdHM7Ci0Jc3RhdHMtPmNvbGxpc2lvbnMgPSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnhtaXRfY29sbGlzaW9uczsKLQlzdGF0cy0+cnhfZXJyb3JzID0gYWRhcHRlci0+c2xpY19zdGF0cy5pZmFjZS5yY3ZfZXJyb3JzOwotCXN0YXRzLT50eF9lcnJvcnMgPSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnhtdF9lcnJvcnM7Ci0Jc3RhdHMtPnJ4X21pc3NlZF9lcnJvcnMgPSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnJjdl9kaXNjYXJkczsKLQlzdGF0cy0+dHhfaGVhcnRiZWF0X2Vycm9ycyA9IDA7Ci0Jc3RhdHMtPnR4X2Fib3J0ZWRfZXJyb3JzID0gMDsKLQlzdGF0cy0+dHhfd2luZG93X2Vycm9ycyA9IDA7Ci0Jc3RhdHMtPnR4X2ZpZm9fZXJyb3JzID0gMDsKLQlzdGF0cy0+cnhfZnJhbWVfZXJyb3JzID0gMDsKLQlzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycyA9IDA7Ci0JcmV0dXJuICZhZGFwdGVyLT5zdGF0czsKKwlkZXYtPnN0YXRzLmNvbGxpc2lvbnMgPSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnhtaXRfY29sbGlzaW9uczsKKwlkZXYtPnN0YXRzLnJ4X2Vycm9ycyA9IGFkYXB0ZXItPnNsaWNfc3RhdHMuaWZhY2UucmN2X2Vycm9yczsKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycyA9IGFkYXB0ZXItPnNsaWNfc3RhdHMuaWZhY2UueG10X2Vycm9yczsKKwlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnJjdl9kaXNjYXJkczsKKwlkZXYtPnN0YXRzLnR4X2hlYXJ0YmVhdF9lcnJvcnMgPSAwOworCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgPSAwOworCWRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycyA9IDA7CisJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycyA9IDA7CisJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgPSAwOworCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyA9IDA7CisKKwlyZXR1cm4gJmRldi0+c3RhdHM7CiB9CiAKIC8qCkBAIC0xMjU0LDEzICsxMjYwLDExIEBACiBzdGF0aWMgaW50IHNsaWNfbWNhc3RfYWRkX2xpc3Qoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGNoYXIgKmFkZHJlc3MpCiB7CiAJc3RydWN0IG1jYXN0X2FkZHJlc3MgKm1jYWRkciwgKm1saXN0OwotCWJvb2wgZXF1YWxhZGRyOwogCiAJLyogQ2hlY2sgdG8gc2VlIGlmIGl0IGFscmVhZHkgZXhpc3RzICovCiAJbWxpc3QgPSBhZGFwdGVyLT5tY2FzdGFkZHJzOwogCXdoaWxlIChtbGlzdCkgewotCQlFVEhFUl9FUV9BRERSKG1saXN0LT5hZGRyZXNzLCBhZGRyZXNzLCBlcXVhbGFkZHIpOwotCQlpZiAoZXF1YWxhZGRyKQorCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihtbGlzdC0+YWRkcmVzcywgYWRkcmVzcykpCiAJCQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CiAJCW1saXN0ID0gbWxpc3QtPm5leHQ7CiAJfQpAQCAtMTM2MCw3ICsxMzY0LDcgQEAKIAogc3RhdGljIHZvaWQgc2xpY19tY2FzdF9zZXRfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOwogCWNoYXIgKmFkZHJlc3NlczsKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX2xpc3Q7CkBAIC0xODUyLDYgKzE4NTYsOSBAQAogCXJldHVybiAwOwogfQogCitNT0RVTEVfRklSTVdBUkUoInNsaWNvc3Mvb2FzaXNyY3Z1Y29kZS5zeXMiKTsKK01PRFVMRV9GSVJNV0FSRSgic2xpY29zcy9nYnJjdnVjb2RlLnN5cyIpOworCiBzdGF0aWMgaW50IHNsaWNfY2FyZF9kb3dubG9hZChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKIHsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwpAQCAtMTk2Myw2ICsxOTcwLDkgQEAKIAlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CiB9CiAKK01PRFVMRV9GSVJNV0FSRSgic2xpY29zcy9vYXNpc2Rvd25sb2FkLnN5cyIpOworTU9EVUxFX0ZJUk1XQVJFKCJzbGljb3NzL2diZG93bmxvYWQuc3lzIik7CisKIHN0YXRpYyB2b2lkIHNsaWNfYWRhcHRlcl9zZXRfaHdhZGRyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IGFkYXB0ZXItPmNhcmQ7CkBAIC0yNDY2LDcgKzI0NzYsNiBAQAogCXUzMiBvcHRzID0gYWRhcHRlci0+bWFjb3B0czsKIAl1MzIgKmRob3N0NCA9ICh1MzIgKikmZXRoZXJfZnJhbWUtPmV0aGVyX2Rob3N0WzBdOwogCXUxNiAqZGhvc3QyID0gKHUxNiAqKSZldGhlcl9mcmFtZS0+ZXRoZXJfZGhvc3RbNF07Ci0JYm9vbCBlcXVhbGFkZHI7CiAKIAlpZiAob3B0cyAmIE1BQ19QUk9NSVNDKQogCQlyZXR1cm4gdHJ1ZTsKQEAgLTI0OTAsMTAgKzI0OTksOCBAQAogCQkJc3RydWN0IG1jYXN0X2FkZHJlc3MgKm1jYWRkciA9IGFkYXB0ZXItPm1jYXN0YWRkcnM7CiAKIAkJCXdoaWxlIChtY2FkZHIpIHsKLQkJCQlFVEhFUl9FUV9BRERSKG1jYWRkci0+YWRkcmVzcywKLQkJCQkJICAgICAgZXRoZXJfZnJhbWUtPmV0aGVyX2Rob3N0LAotCQkJCQkgICAgICBlcXVhbGFkZHIpOwotCQkJCWlmIChlcXVhbGFkZHIpIHsKKwkJCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihtY2FkZHItPmFkZHJlc3MsCisJCQkJCQkJZXRoZXJfZnJhbWUtPmV0aGVyX2Rob3N0KSkgewogCQkJCQlhZGFwdGVyLT5yY3ZfbXVsdGljYXN0cysrOwogCQkJCQlhZGFwdGVyLT5zdGF0cy5tdWx0aWNhc3QrKzsKIAkJCQkJcmV0dXJuIHRydWU7CkBAIC0yNTE1LDcgKzI1MjIsNyBAQAogCiBzdGF0aWMgaW50IHNsaWNfbWFjX3NldF9hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnB0cikKIHsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKW5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHB0cjsKIAogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCkBAIC0yNTIzLDYgKzI1MzAsOSBAQAogCWlmICghYWRhcHRlcikKIAkJcmV0dXJuIC1FQlVTWTsKIAorCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLT5zYV9kYXRhKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CiAJbWVtY3B5KGFkYXB0ZXItPmN1cnJtYWNhZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKIApAQCAtMzk2MCwxMCArMzk3MCw4IEBACiAKIHN0YXRpYyB2b2lkIHNsaWNfZGVidWdfYWRhcHRlcl9kZXN0cm95KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewotCWlmIChhZGFwdGVyLT5kZWJ1Z2ZzX2VudHJ5KSB7Ci0JCWRlYnVnZnNfcmVtb3ZlKGFkYXB0ZXItPmRlYnVnZnNfZW50cnkpOwotCQlhZGFwdGVyLT5kZWJ1Z2ZzX2VudHJ5ID0gTlVMTDsKLQl9CisJZGVidWdmc19yZW1vdmUoYWRhcHRlci0+ZGVidWdmc19lbnRyeSk7CisJYWRhcHRlci0+ZGVidWdmc19lbnRyeSA9IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIHNsaWNfZGVidWdfY2FyZF9jcmVhdGUoc3RydWN0IHNsaWNjYXJkICpjYXJkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvS2NvbmZpZwppbmRleCAyMDRkYmZjLi4zMTUxMDJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvS2NvbmZpZwpAQCAtNiwxMCArNiwzIEBACiAJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKIAloZWxwCiAJICBGcmFtZSBCdWZmZXIgZHJpdmVyIGZvciB0aGUgU2lsaWNvbiBNb3Rpb24gU003WFggc2VyaWFsIGdyYXBoaWMgY2FyZC4KLQotY29uZmlnIEZCX1NNN1hYX0FDQ0VMCi0JYm9vbCAiU2lsaWNvbm1vdGlvbiBBY2NlbGVyYXRpb24gZnVuY3Rpb25zIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRkJfU003WFggJiYgRVhQRVJJTUVOVEFMCi0JaGVscAotCSAgVGhpcyB3aWxsIGNvbXBpbGUgdGhlIFRyaWRlbnQgZnJhbWUgYnVmZmVyIGRldmljZSB3aXRoCi0JICBhY2NlbGVyYXRpb24gZnVuY3Rpb25zLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvVE9ETwppbmRleCAxZjYxZjVlLi5hNjZkOWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvVE9ETworKysgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvVE9ETwpAQCAtMSw1ICsxLDYgQEAKIFRPRE86CiAtIER1YWwgaGVhZCBzdXBwb3J0CistIDJEIGFjY2VsZXJhdGlvbiBzdXBwb3J0CiAtIHVzZSBrZXJuZWwgY29kaW5nIHN0eWxlCiAtIGNoZWNrcGF0Y2gucGwgY2xlYW4KIC0gcmVmaW5lIHRoZSBjb2RlIGFuZCByZW1vdmUgdW51c2VkIGNvZGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuYyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZmZjBhMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210YzJkLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NzkgKzAsMCBAQAotLyoKLSAqIFNpbGljb24gTW90aW9uIFNNN1hYIDJEIGRyYXdpbmcgZW5naW5lIGZ1bmN0aW9ucy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2lsaWNvbiBNb3Rpb24gVGVjaG5vbG9neSBDb3JwLgotICogQXV0aG9yOiBCb3lvZCBib3lvZC55YW5nQHNpbGljb25tb3Rpb24uY29tLmNuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5IExlbW90ZSwgSW5jLgotICogQXV0aG9yOiBXdSBaaGFuZ2ppbiwgd3V6aGFuZ2ppbkBnbWFpbC5jb20KLSAqCi0gKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgotICogIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBWZXJzaW9uIDAuMTAuMjYxOTIuMjEuMDEKLSAqIAktIEFkZCBQb3dlclBDIHN1cHBvcnQKLSAqIAktIEFkZCAyRCBzdXBwb3J0IGZvciBMeW54IC0KLSAqIFZlcmlmaWVkIG9uIDIuNi4xOS4yCi0gKiAJQm95b2QueWFuZyAgPGJveW9kLnlhbmdAc2lsaWNvbm1vdGlvbi5jb20uY24+Ci0gKi8KLQotdW5zaWduZWQgY2hhciBzbXRjX2RlX2J1c3k7Ci0KLXZvaWQgU01UQ193cml0ZTJEcmVnKHVuc2lnbmVkIGxvbmcgbk9mZnNldCwgdW5zaWduZWQgbG9uZyBuRGF0YSkKLXsKLQl3cml0ZWwobkRhdGEsIHNtdGNfMkRCYXNlQWRkcmVzcyArIG5PZmZzZXQpOwotfQotCi11bnNpZ25lZCBsb25nIFNNVENfcmVhZDJEcmVnKHVuc2lnbmVkIGxvbmcgbk9mZnNldCkKLXsKLQlyZXR1cm4gcmVhZGwoc210Y18yREJhc2VBZGRyZXNzICsgbk9mZnNldCk7Ci19Ci0KLXZvaWQgU01UQ193cml0ZTJEZGF0YXBvcnQodW5zaWduZWQgbG9uZyBuT2Zmc2V0LCB1bnNpZ25lZCBsb25nIG5EYXRhKQotewotCXdyaXRlbChuRGF0YSwgc210Y18yRGRhdGFwb3J0ICsgbk9mZnNldCk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogZGVJbml0Ci0gKgotICogUHVycG9zZQotICogICAgRHJhd2luZyBlbmdpbmUgaW5pdGlhbGl6YXRpb24uCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXZvaWQgZGVJbml0KHVuc2lnbmVkIGludCBuTW9kZVdpZHRoLCB1bnNpZ25lZCBpbnQgbk1vZGVIZWlnaHQsCi0JCXVuc2lnbmVkIGludCBicHApCi17Ci0JLyogR2V0IGN1cnJlbnQgcG93ZXIgY29uZmlndXJhdGlvbi4gKi8KLQl1bnNpZ25lZCBjaGFyIGNsb2NrOwotCWNsb2NrID0gc210Y19zZXFyKDB4MjEpOwotCi0JLyogaW5pdGlhbGl6ZSBnbG9iYWwgJ211dGV4IGxvY2snIHZhcmlhYmxlICovCi0Jc210Y19kZV9idXN5ID0gMDsKLQotCS8qIEVuYWJsZSAyRCBEcmF3aW5nIEVuZ2luZSAqLwotCXNtdGNfc2VxdygweDIxLCBjbG9jayAmIDB4RjgpOwotCi0JU01UQ193cml0ZTJEcmVnKERFX0NMSVBfVEwsCi0JCQlGSUVMRF9WQUxVRSgwLCBERV9DTElQX1RMLCBUT1AsIDApIHwKLQkJCUZJRUxEX1NFVCgwLCBERV9DTElQX1RMLCBTVEFUVVMsIERJU0FCTEUpIHwKLQkJCUZJRUxEX1NFVCgwLCBERV9DTElQX1RMLCBJTkhJQklULCBPVVRTSURFKSB8Ci0JCQlGSUVMRF9WQUxVRSgwLCBERV9DTElQX1RMLCBMRUZULCAwKSk7Ci0KLQlpZiAoYnBwID49IDI0KSB7Ci0JCVNNVENfd3JpdGUyRHJlZyhERV9QSVRDSCwKLQkJCQlGSUVMRF9WQUxVRSgwLCBERV9QSVRDSCwgREVTVElOQVRJT04sCi0JCQkJCSAgICBuTW9kZVdpZHRoICogMykgfCBGSUVMRF9WQUxVRSgwLAotCQkJCQkJCQkgIERFX1BJVENILAotCQkJCQkJCQkgIFNPVVJDRSwKLQkJCQkJCQkJICBuTW9kZVdpZHRoCi0JCQkJCQkJCSAgKiAzKSk7Ci0JfSBlbHNlIHsKLQkJU01UQ193cml0ZTJEcmVnKERFX1BJVENILAotCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1BJVENILCBERVNUSU5BVElPTiwKLQkJCQkJICAgIG5Nb2RlV2lkdGgpIHwgRklFTERfVkFMVUUoMCwKLQkJCQkJCQkgICAgICBERV9QSVRDSCwKLQkJCQkJCQkgICAgICBTT1VSQ0UsCi0JCQkJCQkJICAgICAgbk1vZGVXaWR0aCkpOwotCX0KLQotCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfV0lEVEgsCi0JCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfV0lEVEgsIERFU1RJTkFUSU9OLAotCQkJCSAgICBuTW9kZVdpZHRoKSB8IEZJRUxEX1ZBTFVFKDAsCi0JCQkJCQkJICAgICAgREVfV0lORE9XX1dJRFRILAotCQkJCQkJCSAgICAgIFNPVVJDRSwKLQkJCQkJCQkgICAgICBuTW9kZVdpZHRoKSk7Ci0KLQlzd2l0Y2ggKGJwcCkgewotCWNhc2UgODoKLQkJU01UQ193cml0ZTJEcmVnKERFX1NUUkVUQ0hfRk9STUFULAotCQkJCUZJRUxEX1NFVCgwLCBERV9TVFJFVENIX0ZPUk1BVCwgUEFUVEVSTl9YWSwKLQkJCQkJICBOT1JNQUwpIHwgRklFTERfVkFMVUUoMCwKLQkJCQkJCQlERV9TVFJFVENIX0ZPUk1BVCwKLQkJCQkJCQlQQVRURVJOX1ksCi0JCQkJCQkJMCkgfAotCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1NUUkVUQ0hfRk9STUFULCBQQVRURVJOX1gsCi0JCQkJICAgIDApIHwgRklFTERfU0VUKDAsIERFX1NUUkVUQ0hfRk9STUFULAotCQkJCQkJICAgUElYRUxfRk9STUFULAotCQkJCQkJICAgOCkgfCBGSUVMRF9TRVQoMCwKLQkJCQkJCQkgIERFX1NUUkVUQ0hfRk9STUFULAotCQkJCQkJCSAgQUREUkVTU0lORywKLQkJCQkJCQkgIFhZKSB8Ci0JCQkJRklFTERfVkFMVUUoMCwgREVfU1RSRVRDSF9GT1JNQVQsCi0JCQkJCVNPVVJDRV9IRUlHSFQsIDMpKTsKLQkJYnJlYWs7Ci0JY2FzZSAyNDoKLQkJU01UQ193cml0ZTJEcmVnKERFX1NUUkVUQ0hfRk9STUFULAotCQkJCUZJRUxEX1NFVCgwLCBERV9TVFJFVENIX0ZPUk1BVCwgUEFUVEVSTl9YWSwKLQkJCQkJICBOT1JNQUwpIHwgRklFTERfVkFMVUUoMCwKLQkJCQkJCQlERV9TVFJFVENIX0ZPUk1BVCwKLQkJCQkJCQlQQVRURVJOX1ksCi0JCQkJCQkJMCkgfAotCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1NUUkVUQ0hfRk9STUFULCBQQVRURVJOX1gsCi0JCQkJICAgIDApIHwgRklFTERfU0VUKDAsIERFX1NUUkVUQ0hfRk9STUFULAotCQkJCQkJCSAgIFBJWEVMX0ZPUk1BVCwKLQkJCQkJCQkgICAyNCkgfCBGSUVMRF9TRVQoMCwKLQkJCQkJCQkgICBERV9TVFJFVENIX0ZPUk1BVCwKLQkJCQkJCQkgICBBRERSRVNTSU5HLAotCQkJCQkJCSAgIFhZKSB8Ci0JCQkJRklFTERfVkFMVUUoMCwgREVfU1RSRVRDSF9GT1JNQVQsCi0JCQkJCVNPVVJDRV9IRUlHSFQsIDMpKTsKLQkJYnJlYWs7Ci0JY2FzZSAxNjoKLQlkZWZhdWx0OgotCQlTTVRDX3dyaXRlMkRyZWcoREVfU1RSRVRDSF9GT1JNQVQsCi0JCQkJRklFTERfU0VUKDAsIERFX1NUUkVUQ0hfRk9STUFULCBQQVRURVJOX1hZLAotCQkJCQkgIE5PUk1BTCkgfCBGSUVMRF9WQUxVRSgwLAotCQkJCQkJCURFX1NUUkVUQ0hfRk9STUFULAotCQkJCQkJCVBBVFRFUk5fWSwKLQkJCQkJCQkwKSB8Ci0JCQkJRklFTERfVkFMVUUoMCwgREVfU1RSRVRDSF9GT1JNQVQsIFBBVFRFUk5fWCwKLQkJCQkgICAgMCkgfCBGSUVMRF9TRVQoMCwgREVfU1RSRVRDSF9GT1JNQVQsCi0JCQkJCQkJICAgUElYRUxfRk9STUFULAotCQkJCQkJCSAgIDE2KSB8IEZJRUxEX1NFVCgwLAotCQkJCQkJCSAgIERFX1NUUkVUQ0hfRk9STUFULAotCQkJCQkJCSAgIEFERFJFU1NJTkcsCi0JCQkJCQkJICAgWFkpIHwKLQkJCQlGSUVMRF9WQUxVRSgwLCBERV9TVFJFVENIX0ZPUk1BVCwKLQkJCQkJU09VUkNFX0hFSUdIVCwgMykpOwotCQlicmVhazsKLQl9Ci0KLQlTTVRDX3dyaXRlMkRyZWcoREVfTUFTS1MsCi0JCQlGSUVMRF9WQUxVRSgwLCBERV9NQVNLUywgQllURV9NQVNLLCAweEZGRkYpIHwKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX01BU0tTLCBCSVRfTUFTSywgMHhGRkZGKSk7Ci0JU01UQ193cml0ZTJEcmVnKERFX0NPTE9SX0NPTVBBUkVfTUFTSywKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX0NPTE9SX0NPTVBBUkVfTUFTSywgTUFTS1MsIFwKLQkJCQkweEZGRkZGRikpOwotCVNNVENfd3JpdGUyRHJlZyhERV9DT0xPUl9DT01QQVJFLAotCQkJRklFTERfVkFMVUUoMCwgREVfQ09MT1JfQ09NUEFSRSwgQ09MT1IsIDB4RkZGRkZGKSk7Ci19Ci0KLXZvaWQgZGVWZXJ0aWNhbExpbmUodW5zaWduZWQgbG9uZyBkc3RfYmFzZSwKLQkJICAgIHVuc2lnbmVkIGxvbmcgZHN0X3BpdGNoLAotCQkgICAgdW5zaWduZWQgbG9uZyBuWCwKLQkJICAgIHVuc2lnbmVkIGxvbmcgblksCi0JCSAgICB1bnNpZ25lZCBsb25nIGRzdF9oZWlnaHQsIHVuc2lnbmVkIGxvbmcgbkNvbG9yKQotewotCWRlV2FpdEZvck5vdEJ1c3koKTsKLQotCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLCBBRERSRVNTLAotCQkJCSAgICBkc3RfYmFzZSkpOwotCi0JU01UQ193cml0ZTJEcmVnKERFX1BJVENILAotCQkJRklFTERfVkFMVUUoMCwgREVfUElUQ0gsIERFU1RJTkFUSU9OLCBkc3RfcGl0Y2gpIHwKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX1BJVENILCBTT1VSQ0UsIGRzdF9waXRjaCkpOwotCi0JU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19XSURUSCwKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19XSURUSCwgREVTVElOQVRJT04sCi0JCQkgICAgZHN0X3BpdGNoKSB8IEZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19XSURUSCwKLQkJCQkJCSAgICAgU09VUkNFLAotCQkJCQkJICAgICBkc3RfcGl0Y2gpKTsKLQotCVNNVENfd3JpdGUyRHJlZyhERV9GT1JFR1JPVU5ELAotCQkJRklFTERfVkFMVUUoMCwgREVfRk9SRUdST1VORCwgQ09MT1IsIG5Db2xvcikpOwotCi0JU01UQ193cml0ZTJEcmVnKERFX0RFU1RJTkFUSU9OLAotCQkJRklFTERfU0VUKDAsIERFX0RFU1RJTkFUSU9OLCBXUkFQLCBESVNBQkxFKSB8Ci0JCQlGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWCwgblgpIHwKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBZLCBuWSkpOwotCi0JU01UQ193cml0ZTJEcmVnKERFX0RJTUVOU0lPTiwKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWCwgMSkgfAotCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBZX0VULCBkc3RfaGVpZ2h0KSk7Ci0KLQlTTVRDX3dyaXRlMkRyZWcoREVfQ09OVFJPTCwKLQkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBTVEFUVVMsIFNUQVJUKSB8Ci0JCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgRElSRUNUSU9OLCBMRUZUX1RPX1JJR0hUKSB8Ci0JCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgTUFKT1IsIFkpIHwKLQkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBTVEVQX1gsIE5FR0FUSVZFKSB8Ci0JCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgU1RFUF9ZLCBQT1NJVElWRSkgfAotCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIExBU1RfUElYRUwsIE9GRikgfAotCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIENPTU1BTkQsIFNIT1JUX1NUUk9LRSkgfAotCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFJPUF9TRUxFQ1QsIFJPUDIpIHwKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX0NPTlRST0wsIFJPUCwgMHgwQykpOwotCi0Jc210Y19kZV9idXN5ID0gMTsKLX0KLQotdm9pZCBkZUhvcml6b250YWxMaW5lKHVuc2lnbmVkIGxvbmcgZHN0X2Jhc2UsCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgZHN0X3BpdGNoLAotCQkgICAgICB1bnNpZ25lZCBsb25nIG5YLAotCQkgICAgICB1bnNpZ25lZCBsb25nIG5ZLAotCQkgICAgICB1bnNpZ25lZCBsb25nIGRzdF93aWR0aCwgdW5zaWduZWQgbG9uZyBuQ29sb3IpCi17Ci0JZGVXYWl0Rm9yTm90QnVzeSgpOwotCi0JU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLAotCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsIEFERFJFU1MsCi0JCQkJICAgIGRzdF9iYXNlKSk7Ci0KLQlTTVRDX3dyaXRlMkRyZWcoREVfUElUQ0gsCi0JCQlGSUVMRF9WQUxVRSgwLCBERV9QSVRDSCwgREVTVElOQVRJT04sIGRzdF9waXRjaCkgfAotCQkJRklFTERfVkFMVUUoMCwgREVfUElUQ0gsIFNPVVJDRSwgZHN0X3BpdGNoKSk7Ci0KLQlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX1dJRFRILAotCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX1dJRFRILCBERVNUSU5BVElPTiwKLQkJCSAgICBkc3RfcGl0Y2gpIHwgRklFTERfVkFMVUUoMCwgREVfV0lORE9XX1dJRFRILAotCQkJCQkJICAgICBTT1VSQ0UsCi0JCQkJCQkgICAgIGRzdF9waXRjaCkpOwotCVNNVENfd3JpdGUyRHJlZyhERV9GT1JFR1JPVU5ELAotCQkJRklFTERfVkFMVUUoMCwgREVfRk9SRUdST1VORCwgQ09MT1IsIG5Db2xvcikpOwotCVNNVENfd3JpdGUyRHJlZyhERV9ERVNUSU5BVElPTiwKLQkJCUZJRUxEX1NFVCgwLCBERV9ERVNUSU5BVElPTiwgV1JBUCwKLQkJCSAgRElTQUJMRSkgfCBGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWCwKLQkJCQkJCSBuWCkgfCBGSUVMRF9WQUxVRSgwLAotCQkJCQkJCSAgIERFX0RFU1RJTkFUSU9OLAotCQkJCQkJCSAgIFksCi0JCQkJCQkJICAgblkpKTsKLQlTTVRDX3dyaXRlMkRyZWcoREVfRElNRU5TSU9OLAotCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBYLAotCQkJICAgIGRzdF93aWR0aCkgfCBGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sCi0JCQkJCQkgICAgIFlfRVQsIDEpKTsKLQlTTVRDX3dyaXRlMkRyZWcoREVfQ09OVFJPTCwKLQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFNUQVRVUywgU1RBUlQpIHwgRklFTERfU0VUKDAsCi0JCQkJCQkJICAgIERFX0NPTlRST0wsCi0JCQkJCQkJICAgIERJUkVDVElPTiwKLQkJCQkJCQkgICAgUklHSFRfVE9fTEVGVCkKLQkJfCBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgTUFKT1IsIFgpIHwgRklFTERfU0VUKDAsCi0JCQkJCQkJIERFX0NPTlRST0wsCi0JCQkJCQkJIFNURVBfWCwKLQkJCQkJCQkgUE9TSVRJVkUpCi0JCXwgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFNURVBfWSwKLQkJCSAgICBORUdBVElWRSkgfCBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwKLQkJCQkJCSAgTEFTVF9QSVhFTCwKLQkJCQkJCSAgT0ZGKSB8IEZJRUxEX1NFVCgwLAotCQkJCQkJCSAgIERFX0NPTlRST0wsCi0JCQkJCQkJICAgQ09NTUFORCwKLQkJCQkJCQkgICBTSE9SVF9TVFJPS0UpCi0JCXwgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFJPUF9TRUxFQ1QsCi0JCQkgICAgUk9QMikgfCBGSUVMRF9WQUxVRSgwLCBERV9DT05UUk9MLCBST1AsCi0JCQkJCQkweDBDKSk7Ci0KLQlzbXRjX2RlX2J1c3kgPSAxOwotfQotCi12b2lkIGRlTGluZSh1bnNpZ25lZCBsb25nIGRzdF9iYXNlLAotCSAgICB1bnNpZ25lZCBsb25nIGRzdF9waXRjaCwKLQkgICAgdW5zaWduZWQgbG9uZyBuWDEsCi0JICAgIHVuc2lnbmVkIGxvbmcgblkxLAotCSAgICB1bnNpZ25lZCBsb25nIG5YMiwgdW5zaWduZWQgbG9uZyBuWTIsIHVuc2lnbmVkIGxvbmcgbkNvbG9yKQotewotCXVuc2lnbmVkIGxvbmcgbkNvbW1hbmQgPQotCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgU1RBVFVTLCBTVEFSVCkgfAotCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgRElSRUNUSU9OLCBMRUZUX1RPX1JJR0hUKSB8Ci0JICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBNQUpPUiwgWCkgfAotCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgU1RFUF9YLCBQT1NJVElWRSkgfAotCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgU1RFUF9ZLCBQT1NJVElWRSkgfAotCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgTEFTVF9QSVhFTCwgT0ZGKSB8Ci0JICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBST1BfU0VMRUNULCBST1AyKSB8Ci0JICAgIEZJRUxEX1ZBTFVFKDAsIERFX0NPTlRST0wsIFJPUCwgMHgwQyk7Ci0JdW5zaWduZWQgbG9uZyBEZWx0YVg7Ci0JdW5zaWduZWQgbG9uZyBEZWx0YVk7Ci0KLQkvKiBDYWxjdWxhdGUgZGVsdGEgWCAqLwotCWlmIChuWDEgPD0gblgyKQotCQlEZWx0YVggPSBuWDIgLSBuWDE7Ci0JZWxzZSB7Ci0JCURlbHRhWCA9IG5YMSAtIG5YMjsKLQkJbkNvbW1hbmQgPSBGSUVMRF9TRVQobkNvbW1hbmQsIERFX0NPTlRST0wsIFNURVBfWCwgTkVHQVRJVkUpOwotCX0KLQotCS8qIENhbGN1bGF0ZSBkZWx0YSBZICovCi0JaWYgKG5ZMSA8PSBuWTIpCi0JCURlbHRhWSA9IG5ZMiAtIG5ZMTsKLQllbHNlIHsKLQkJRGVsdGFZID0gblkxIC0gblkyOwotCQluQ29tbWFuZCA9IEZJRUxEX1NFVChuQ29tbWFuZCwgREVfQ09OVFJPTCwgU1RFUF9ZLCBORUdBVElWRSk7Ci0JfQotCi0JLyogRGV0ZXJtaW5lIHRoZSBtYWpvciBheGlzICovCi0JaWYgKERlbHRhWCA8IERlbHRhWSkKLQkJbkNvbW1hbmQgPSBGSUVMRF9TRVQobkNvbW1hbmQsIERFX0NPTlRST0wsIE1BSk9SLCBZKTsKLQotCS8qIFZlcnRpY2FsIGxpbmU/ICovCi0JaWYgKG5YMSA9PSBuWDIpCi0JCWRlVmVydGljYWxMaW5lKGRzdF9iYXNlLCBkc3RfcGl0Y2gsIG5YMSwgblkxLCBEZWx0YVksIG5Db2xvcik7Ci0KLQkvKiBIb3Jpem9udGFsIGxpbmU/ICovCi0JZWxzZSBpZiAoblkxID09IG5ZMikKLQkJZGVIb3Jpem9udGFsTGluZShkc3RfYmFzZSwgZHN0X3BpdGNoLCBuWDEsIG5ZMSwgXAotCQkJCURlbHRhWCwgbkNvbG9yKTsKLQotCS8qIERpYWdvbmFsIGxpbmU/ICovCi0JZWxzZSBpZiAoRGVsdGFYID09IERlbHRhWSkgewotCQlkZVdhaXRGb3JOb3RCdXN5KCk7Ci0KLQkJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLAotCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLAotCQkJCQkgICAgQUREUkVTUywgZHN0X2Jhc2UpKTsKLQotCQlTTVRDX3dyaXRlMkRyZWcoREVfUElUQ0gsCi0JCQkJRklFTERfVkFMVUUoMCwgREVfUElUQ0gsIERFU1RJTkFUSU9OLAotCQkJCQkgICAgZHN0X3BpdGNoKSB8IEZJRUxEX1ZBTFVFKDAsCi0JCQkJCQkJICAgICBERV9QSVRDSCwKLQkJCQkJCQkgICAgIFNPVVJDRSwKLQkJCQkJCQkgICAgIGRzdF9waXRjaCkpOwotCi0JCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfV0lEVEgsCi0JCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX1dJRFRILCBERVNUSU5BVElPTiwKLQkJCQkJICAgIGRzdF9waXRjaCkgfCBGSUVMRF9WQUxVRSgwLAotCQkJCQkJCSAgICAgREVfV0lORE9XX1dJRFRILAotCQkJCQkJCSAgICAgU09VUkNFLAotCQkJCQkJCSAgICAgZHN0X3BpdGNoKSk7Ci0KLQkJU01UQ193cml0ZTJEcmVnKERFX0ZPUkVHUk9VTkQsCi0JCQkJRklFTERfVkFMVUUoMCwgREVfRk9SRUdST1VORCwgQ09MT1IsIG5Db2xvcikpOwotCi0JCVNNVENfd3JpdGUyRHJlZyhERV9ERVNUSU5BVElPTiwKLQkJCQlGSUVMRF9TRVQoMCwgREVfREVTVElOQVRJT04sIFdSQVAsIERJU0FCTEUpIHwKLQkJCQlGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWCwgMSkgfAotCQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBZLCBuWTEpKTsKLQotCQlTTVRDX3dyaXRlMkRyZWcoREVfRElNRU5TSU9OLAotCQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWCwgMSkgfAotCQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWV9FVCwgRGVsdGFYKSk7Ci0KLQkJU01UQ193cml0ZTJEcmVnKERFX0NPTlRST0wsCi0JCQkJRklFTERfU0VUKG5Db21tYW5kLCBERV9DT05UUk9MLCBDT01NQU5ELAotCQkJCQkgIFNIT1JUX1NUUk9LRSkpOwotCX0KLQotCS8qIEdlbmVyaWMgbGluZSAqLwotCWVsc2UgewotCQl1bnNpZ25lZCBpbnQgazEsIGsyLCBldCwgdzsKLQkJaWYgKERlbHRhWCA8IERlbHRhWSkgewotCQkJazEgPSAyICogRGVsdGFYOwotCQkJZXQgPSBrMSAtIERlbHRhWTsKLQkJCWsyID0gZXQgLSBEZWx0YVk7Ci0JCQl3ID0gRGVsdGFZICsgMTsKLQkJfSBlbHNlIHsKLQkJCWsxID0gMiAqIERlbHRhWTsKLQkJCWV0ID0gazEgLSBEZWx0YVg7Ci0JCQlrMiA9IGV0IC0gRGVsdGFYOwotCQkJdyA9IERlbHRhWCArIDE7Ci0JCX0KLQotCQlkZVdhaXRGb3JOb3RCdXN5KCk7Ci0KLQkJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLAotCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLAotCQkJCQkgICAgQUREUkVTUywgZHN0X2Jhc2UpKTsKLQotCQlTTVRDX3dyaXRlMkRyZWcoREVfUElUQ0gsCi0JCQkJRklFTERfVkFMVUUoMCwgREVfUElUQ0gsIERFU1RJTkFUSU9OLAotCQkJCQkgICAgZHN0X3BpdGNoKSB8IEZJRUxEX1ZBTFVFKDAsCi0JCQkJCQkJICAgICBERV9QSVRDSCwKLQkJCQkJCQkgICAgIFNPVVJDRSwKLQkJCQkJCQkgICAgIGRzdF9waXRjaCkpOwotCi0JCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfV0lEVEgsCi0JCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX1dJRFRILCBERVNUSU5BVElPTiwKLQkJCQkJICAgIGRzdF9waXRjaCkgfCBGSUVMRF9WQUxVRSgwLAotCQkJCQkJCSAgICAgREVfV0lORE9XX1dJRFRILAotCQkJCQkJCSAgICAgU09VUkNFLAotCQkJCQkJCSAgICAgZHN0X3BpdGNoKSk7Ci0KLQkJU01UQ193cml0ZTJEcmVnKERFX0ZPUkVHUk9VTkQsCi0JCQkJRklFTERfVkFMVUUoMCwgREVfRk9SRUdST1VORCwgQ09MT1IsIG5Db2xvcikpOwotCi0JCVNNVENfd3JpdGUyRHJlZyhERV9TT1VSQ0UsCi0JCQkJRklFTERfU0VUKDAsIERFX1NPVVJDRSwgV1JBUCwgRElTQUJMRSkgfAotCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1NPVVJDRSwgWF9LMSwgazEpIHwKLQkJCQlGSUVMRF9WQUxVRSgwLCBERV9TT1VSQ0UsIFlfSzIsIGsyKSk7Ci0KLQkJU01UQ193cml0ZTJEcmVnKERFX0RFU1RJTkFUSU9OLAotCQkJCUZJRUxEX1NFVCgwLCBERV9ERVNUSU5BVElPTiwgV1JBUCwgRElTQUJMRSkgfAotCQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBYLCBuWDEpIHwKLQkJCQlGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWSwgblkxKSk7Ci0KLQkJU01UQ193cml0ZTJEcmVnKERFX0RJTUVOU0lPTiwKLQkJCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFgsIHcpIHwKLQkJCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFlfRVQsIGV0KSk7Ci0KLQkJU01UQ193cml0ZTJEcmVnKERFX0NPTlRST0wsCi0JCQkJRklFTERfU0VUKG5Db21tYW5kLCBERV9DT05UUk9MLCBDT01NQU5ELAotCQkJCQkgIExJTkVfRFJBVykpOwotCX0KLQotCXNtdGNfZGVfYnVzeSA9IDE7Ci19Ci0KLXZvaWQgZGVGaWxsUmVjdCh1bnNpZ25lZCBsb25nIGRzdF9iYXNlLAotCQl1bnNpZ25lZCBsb25nIGRzdF9waXRjaCwKLQkJdW5zaWduZWQgbG9uZyBkc3RfWCwKLQkJdW5zaWduZWQgbG9uZyBkc3RfWSwKLQkJdW5zaWduZWQgbG9uZyBkc3Rfd2lkdGgsCi0JCXVuc2lnbmVkIGxvbmcgZHN0X2hlaWdodCwgdW5zaWduZWQgbG9uZyBuQ29sb3IpCi17Ci0JZGVXYWl0Rm9yTm90QnVzeSgpOwotCi0JU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLAotCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsIEFERFJFU1MsCi0JCQkJICAgIGRzdF9iYXNlKSk7Ci0KLQlpZiAoZHN0X3BpdGNoKSB7Ci0JCVNNVENfd3JpdGUyRHJlZyhERV9QSVRDSCwKLQkJCQlGSUVMRF9WQUxVRSgwLCBERV9QSVRDSCwgREVTVElOQVRJT04sCi0JCQkJCSAgICBkc3RfcGl0Y2gpIHwgRklFTERfVkFMVUUoMCwKLQkJCQkJCQkgICAgIERFX1BJVENILAotCQkJCQkJCSAgICAgU09VUkNFLAotCQkJCQkJCSAgICAgZHN0X3BpdGNoKSk7Ci0KLQkJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19XSURUSCwKLQkJCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfV0lEVEgsIERFU1RJTkFUSU9OLAotCQkJCQkgICAgZHN0X3BpdGNoKSB8IEZJRUxEX1ZBTFVFKDAsCi0JCQkJCQkJICAgICBERV9XSU5ET1dfV0lEVEgsCi0JCQkJCQkJICAgICBTT1VSQ0UsCi0JCQkJCQkJICAgICBkc3RfcGl0Y2gpKTsKLQl9Ci0KLQlTTVRDX3dyaXRlMkRyZWcoREVfRk9SRUdST1VORCwKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX0ZPUkVHUk9VTkQsIENPTE9SLCBuQ29sb3IpKTsKLQotCVNNVENfd3JpdGUyRHJlZyhERV9ERVNUSU5BVElPTiwKLQkJCUZJRUxEX1NFVCgwLCBERV9ERVNUSU5BVElPTiwgV1JBUCwgRElTQUJMRSkgfAotCQkJRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFgsIGRzdF9YKSB8Ci0JCQlGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWSwgZHN0X1kpKTsKLQotCVNNVENfd3JpdGUyRHJlZyhERV9ESU1FTlNJT04sCi0JCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFgsIGRzdF93aWR0aCkgfAotCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBZX0VULCBkc3RfaGVpZ2h0KSk7Ci0KLQlTTVRDX3dyaXRlMkRyZWcoREVfQ09OVFJPTCwKLQkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBTVEFUVVMsIFNUQVJUKSB8Ci0JCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgRElSRUNUSU9OLCBMRUZUX1RPX1JJR0hUKSB8Ci0JCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgTEFTVF9QSVhFTCwgT0ZGKSB8Ci0JCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgQ09NTUFORCwgUkVDVEFOR0xFX0ZJTEwpIHwKLQkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBST1BfU0VMRUNULCBST1AyKSB8Ci0JCQlGSUVMRF9WQUxVRSgwLCBERV9DT05UUk9MLCBST1AsIDB4MEMpKTsKLQotCXNtdGNfZGVfYnVzeSA9IDE7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogZGVSb3RhdGVQYXR0ZXJuCi0gKgotICogUHVycG9zZQotICogICAgUm90YXRlIHRoZSBnaXZlbiBwYXR0ZXJuIGlmIG5lY2Vzc2FyeQotICoKLSAqIFBhcmFtZXRlcnMKLSAqICAgIFtpbl0KLSAqCSAgIHBQYXR0ZXJuICAtIFBvaW50ZXIgdG8gREVfU1VSRkFDRSBzdHJ1Y3R1cmUgY29udGFpbmluZwotICoJCSAgICAgICBwYXR0ZXJuIGF0dHJpYnV0ZXMKLSAqCSAgIHBhdHRlcm5YICAtIFggcG9zaXRpb24gKDAtNykgb2YgcGF0dGVybiBvcmlnaW4KLSAqCSAgIHBhdHRlcm5ZICAtIFkgcG9zaXRpb24gKDAtNykgb2YgcGF0dGVybiBvcmlnaW4KLSAqCi0gKiAgICBbb3V0XQotICoJICAgcGF0dGVybl9kc3RhZGRyIC0gUG9pbnRlciB0byBwcmUtYWxsb2NhdGVkIGJ1ZmZlciBjb250YWluaW5nCi0gKgkgICByb3RhdGVkIHBhdHRlcm4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgZGVSb3RhdGVQYXR0ZXJuKHVuc2lnbmVkIGNoYXIgKnBhdHRlcm5fZHN0YWRkciwKLQkJICAgICB1bnNpZ25lZCBsb25nIHBhdHRlcm5fc3JjX2FkZHIsCi0JCSAgICAgdW5zaWduZWQgbG9uZyBwYXR0ZXJuX0JQUCwKLQkJICAgICB1bnNpZ25lZCBsb25nIHBhdHRlcm5fc3RyaWRlLCBpbnQgcGF0dGVyblgsIGludCBwYXR0ZXJuWSkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQl1bnNpZ25lZCBsb25nIHBhdHRlcm5bUEFUVEVSTl9XSURUSCAqIFBBVFRFUk5fSEVJR0hUXTsKLQl1bnNpZ25lZCBpbnQgeCwgeTsKLQl1bnNpZ25lZCBjaGFyICpwalBhdEJ5dGU7Ci0KLQlpZiAocGF0dGVybl9kc3RhZGRyICE9IE5VTEwpIHsKLQkJZGVXYWl0Rm9yTm90QnVzeSgpOwotCi0JCWlmIChwYXR0ZXJuWCB8fCBwYXR0ZXJuWSkgewotCQkJLyogUm90YXRlIHBhdHRlcm4gKi8KLQkJCXBqUGF0Qnl0ZSA9ICh1bnNpZ25lZCBjaGFyICopcGF0dGVybjsKLQotCQkJc3dpdGNoIChwYXR0ZXJuX0JQUCkgewotCQkJY2FzZSA4OgotCQkJCXsKLQkJCQkJZm9yICh5ID0gMDsgeSA8IDg7IHkrKykgewotCQkJCQkJdW5zaWduZWQgY2hhciAqcGpCdWZmZXIgPQotCQkJCQkJICAgIHBhdHRlcm5fZHN0YWRkciArCi0JCQkJCQkgICAgKChwYXR0ZXJuWSArIHkpICYgNykgKiA4OwotCQkJCQkJZm9yICh4ID0gMDsgeCA8IDg7IHgrKykgewotCQkJCQkJCXBqQnVmZmVyWyhwYXR0ZXJuWCArCi0JCQkJCQkJCSAgeCkgJiA3XSA9Ci0JCQkJCQkJICAgIHBqUGF0Qnl0ZVt4XTsKLQkJCQkJCX0KLQkJCQkJCXBqUGF0Qnl0ZSArPSBwYXR0ZXJuX3N0cmlkZTsKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCWNhc2UgMTY6Ci0JCQkJewotCQkJCQlmb3IgKHkgPSAwOyB5IDwgODsgeSsrKSB7Ci0JCQkJCQl1bnNpZ25lZCBzaG9ydCAqcGpCdWZmZXIgPQotCQkJCQkJICAgICh1bnNpZ25lZCBzaG9ydCAqKQotCQkJCQkJICAgIHBhdHRlcm5fZHN0YWRkciArCi0JCQkJCQkgICAgKChwYXR0ZXJuWSArIHkpICYgNykgKiA4OwotCQkJCQkJZm9yICh4ID0gMDsgeCA8IDg7IHgrKykgewotCQkJCQkJCXBqQnVmZmVyWyhwYXR0ZXJuWCArCi0JCQkJCQkJCSAgeCkgJiA3XSA9Ci0JCQkJCQkJICAgICgodW5zaWduZWQgc2hvcnQgKikKLQkJCQkJCQkgICAgIHBqUGF0Qnl0ZSlbeF07Ci0JCQkJCQl9Ci0JCQkJCQlwalBhdEJ5dGUgKz0gcGF0dGVybl9zdHJpZGU7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQljYXNlIDMyOgotCQkJCXsKLQkJCQkJZm9yICh5ID0gMDsgeSA8IDg7IHkrKykgewotCQkJCQkJdW5zaWduZWQgbG9uZyAqcGpCdWZmZXIgPQotCQkJCQkJICAgICh1bnNpZ25lZCBsb25nICopCi0JCQkJCQkgICAgcGF0dGVybl9kc3RhZGRyICsKLQkJCQkJCSAgICAoKHBhdHRlcm5ZICsgeSkgJiA3KSAqIDg7Ci0JCQkJCQlmb3IgKHggPSAwOyB4IDwgODsgeCsrKSB7Ci0JCQkJCQkJcGpCdWZmZXJbKHBhdHRlcm5YICsKLQkJCQkJCQkJICB4KSAmIDddID0KLQkJCQkJCQkgICAgKCh1bnNpZ25lZCBsb25nICopCi0JCQkJCQkJICAgICBwalBhdEJ5dGUpW3hdOwotCQkJCQkJfQotCQkJCQkJcGpQYXRCeXRlICs9IHBhdHRlcm5fc3RyaWRlOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qRG9uJ3Qgcm90YXRlLGp1c3QgY29weSBwYXR0ZXJuIGludG8gcGF0dGVybl9kc3RhZGRyKi8KLQkJCWZvciAoaSA9IDA7IGkgPCAocGF0dGVybl9CUFAgKiAyKTsgaSsrKSB7Ci0JCQkJKCh1bnNpZ25lZCBsb25nICopcGF0dGVybl9kc3RhZGRyKVtpXSA9Ci0JCQkJICAgIHBhdHRlcm5baV07Ci0JCQl9Ci0JCX0KLQotCX0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBkZUNvcHkKLSAqCi0gKiBQdXJwb3NlCi0gKiAgICBDb3B5IGEgcmVjdGFuZ3VsYXIgYXJlYSBvZiB0aGUgc291cmNlIHN1cmZhY2UgdG8gYSBkZXN0aW5hdGlvbiBzdXJmYWNlCi0gKgotICogUmVtYXJrcwotICogICAgU291cmNlIGJpdG1hcCBtdXN0IGhhdmUgdGhlIHNhbWUgY29sb3IgZGVwdGggKEJQUCkgYXMgdGhlIGRlc3RpbmF0aW9uCi0gKiAgICBiaXRtYXAuCi0gKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQgZGVDb3B5KHVuc2lnbmVkIGxvbmcgZHN0X2Jhc2UsCi0JICAgIHVuc2lnbmVkIGxvbmcgZHN0X3BpdGNoLAotCSAgICB1bnNpZ25lZCBsb25nIGRzdF9CUFAsCi0JICAgIHVuc2lnbmVkIGxvbmcgZHN0X1gsCi0JICAgIHVuc2lnbmVkIGxvbmcgZHN0X1ksCi0JICAgIHVuc2lnbmVkIGxvbmcgZHN0X3dpZHRoLAotCSAgICB1bnNpZ25lZCBsb25nIGRzdF9oZWlnaHQsCi0JICAgIHVuc2lnbmVkIGxvbmcgc3JjX2Jhc2UsCi0JICAgIHVuc2lnbmVkIGxvbmcgc3JjX3BpdGNoLAotCSAgICB1bnNpZ25lZCBsb25nIHNyY19YLAotCSAgICB1bnNpZ25lZCBsb25nIHNyY19ZLCBwVHJhbnNwYXJlbnQgcFRyYW5zcCwgdW5zaWduZWQgY2hhciBuUk9QMikKLXsKLQl1bnNpZ25lZCBsb25nIG5EaXJlY3Rpb24gPSAwOwotCXVuc2lnbmVkIGxvbmcgblRyYW5zcGFyZW50ID0gMDsKLQkvKiBEaXJlY3Rpb24gb2YgUk9QMiBvcGVyYXRpb246Ci0JICogMSA9IExlZnQgdG8gUmlnaHQsCi0JICogKC0xKSA9IFJpZ2h0IHRvIExlZnQKLQkgKi8KLQl1bnNpZ25lZCBsb25nIG9wU2lnbiA9IDE7Ci0JLyogeFdpZHRoIGlzIGluIHBpeGVscyAqLwotCXVuc2lnbmVkIGxvbmcgeFdpZHRoID0gMTkyIC8gKGRzdF9CUFAgLyA4KTsKLQl1bnNpZ25lZCBsb25nIGRlX2N0cmwgPSAwOwotCi0JZGVXYWl0Rm9yTm90QnVzeSgpOwotCi0JU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLAotCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsIEFERFJFU1MsCi0JCQkJICAgIGRzdF9iYXNlKSk7Ci0KLQlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX1NPVVJDRV9CQVNFLAotCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX1NPVVJDRV9CQVNFLCBBRERSRVNTLAotCQkJCSAgICBzcmNfYmFzZSkpOwotCi0JaWYgKGRzdF9waXRjaCAmJiBzcmNfcGl0Y2gpIHsKLQkJU01UQ193cml0ZTJEcmVnKERFX1BJVENILAotCQkJRklFTERfVkFMVUUoMCwgREVfUElUQ0gsIERFU1RJTkFUSU9OLAotCQkJCSAgICBkc3RfcGl0Y2gpIHwgRklFTERfVkFMVUUoMCwKLQkJCQkJCSAgICAgREVfUElUQ0gsCi0JCQkJCQkgICAgIFNPVVJDRSwKLQkJCQkJCSAgICAgc3JjX3BpdGNoKSk7Ci0KLQkJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19XSURUSCwKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19XSURUSCwgREVTVElOQVRJT04sCi0JCQkJICAgIGRzdF9waXRjaCkgfCBGSUVMRF9WQUxVRSgwLAotCQkJCQkJICAgICBERV9XSU5ET1dfV0lEVEgsCi0JCQkJCQkgICAgIFNPVVJDRSwKLQkJCQkJCSAgICAgc3JjX3BpdGNoKSk7Ci0JfQotCi0JLyogU2V0IHRyYW5zcGFyZW50IGJpdHMgaWYgbmVjZXNzYXJ5ICovCi0JaWYgKHBUcmFuc3AgIT0gTlVMTCkgewotCQluVHJhbnNwYXJlbnQgPQotCQkgICAgcFRyYW5zcC0+bWF0Y2ggfCBwVHJhbnNwLT5zZWxlY3QgfCBwVHJhbnNwLT5jb250cm9sOwotCi0JCS8qIFNldCBjb2xvciBjb21wYXJlIHJlZ2lzdGVyICovCi0JCVNNVENfd3JpdGUyRHJlZyhERV9DT0xPUl9DT01QQVJFLAotCQkJCUZJRUxEX1ZBTFVFKDAsIERFX0NPTE9SX0NPTVBBUkUsIENPTE9SLAotCQkJCQkgICAgcFRyYW5zcC0+Y29sb3IpKTsKLQl9Ci0KLQkvKiBEZXRlcm1pbmUgZGlyZWN0aW9uIG9mIG9wZXJhdGlvbiAqLwotCWlmIChzcmNfWSA8IGRzdF9ZKSB7Ci0JCS8qICstLS0tLS0tLS0tKwotCQkgICB8UyAgICAgICAgIHwKLQkJICAgfCAgICAgICAgICArLS0tLS0tLS0tLSsKLQkJICAgfCAgICAgICAgICB8ICAgICAgfCAgIHwKLQkJICAgfCAgICAgICAgICB8ICAgICAgfCAgIHwKLQkJICAgKy0tLXwtLS0tLS0rICAgICAgfAotCQkgICB8ICAgICAgICAgICAgICAgRCB8Ci0JCSAgICstLS0tLS0tLS0tKyAqLwotCi0JCW5EaXJlY3Rpb24gPSBCT1RUT01fVE9fVE9QOwotCX0gZWxzZSBpZiAoc3JjX1kgPiBkc3RfWSkgewotCQkvKiArLS0tLS0tLS0tLSsKLQkJICAgfEQgICAgICAgICB8Ci0JCSAgIHwgICAgICAgICAgKy0tLS0tLS0tLS0rCi0JCSAgIHwgICAgICAgICAgfCAgICAgIHwgICB8Ci0JCSAgIHwgICAgICAgICAgfCAgICAgIHwgICB8Ci0JCSAgICstLS18LS0tLS0tKyAgICAgIHwKLQkJICAgfCAgICAgICAgICAgICAgIFMgfAotCQkgICArLS0tLS0tLS0tLSsgKi8KLQotCQluRGlyZWN0aW9uID0gVE9QX1RPX0JPVFRPTTsKLQl9IGVsc2UgewotCQkvKiBzcmNfWSA9PSBkc3RfWSAqLwotCi0JCWlmIChzcmNfWCA8PSBkc3RfWCkgewotCQkJLyogKy0tLS0tLSstLS0rLS0tLS0tKwotCQkJICAgfFMgICAgIHwgICB8ICAgICBEfAotCQkJICAgfCAgICAgIHwgICB8ICAgICAgfAotCQkJICAgfCAgICAgIHwgICB8ICAgICAgfAotCQkJICAgfCAgICAgIHwgICB8ICAgICAgfAotCQkJICAgKy0tLS0tLSstLS0rLS0tLS0tKyAqLwotCi0JCQluRGlyZWN0aW9uID0gUklHSFRfVE9fTEVGVDsKLQkJfSBlbHNlIHsKLQkJCS8qIHNyY19YID4gZHN0X1ggKi8KLQotCQkJLyogKy0tLS0tLSstLS0rLS0tLS0tKwotCQkJICAgfEQgICAgIHwgICB8ICAgICBTfAotCQkJICAgfCAgICAgIHwgICB8ICAgICAgfAotCQkJICAgfCAgICAgIHwgICB8ICAgICAgfAotCQkJICAgfCAgICAgIHwgICB8ICAgICAgfAotCQkJICAgKy0tLS0tLSstLS0rLS0tLS0tKyAqLwotCi0JCQluRGlyZWN0aW9uID0gTEVGVF9UT19SSUdIVDsKLQkJfQotCX0KLQotCWlmICgobkRpcmVjdGlvbiA9PSBCT1RUT01fVE9fVE9QKSB8fCAobkRpcmVjdGlvbiA9PSBSSUdIVF9UT19MRUZUKSkgewotCQlzcmNfWCArPSBkc3Rfd2lkdGggLSAxOwotCQlzcmNfWSArPSBkc3RfaGVpZ2h0IC0gMTsKLQkJZHN0X1ggKz0gZHN0X3dpZHRoIC0gMTsKLQkJZHN0X1kgKz0gZHN0X2hlaWdodCAtIDE7Ci0JCW9wU2lnbiA9ICgtMSk7Ci0JfQotCi0JaWYgKGRzdF9CUFAgPj0gMjQpIHsKLQkJc3JjX1ggKj0gMzsKLQkJc3JjX1kgKj0gMzsKLQkJZHN0X1ggKj0gMzsKLQkJZHN0X1kgKj0gMzsKLQkJZHN0X3dpZHRoICo9IDM7Ci0JCWlmICgobkRpcmVjdGlvbiA9PSBCT1RUT01fVE9fVE9QKQotCQkgICAgfHwgKG5EaXJlY3Rpb24gPT0gUklHSFRfVE9fTEVGVCkpIHsKLQkJCXNyY19YICs9IDI7Ci0JCQlkc3RfWCArPSAyOwotCQl9Ci0JfQotCi0JLyogV29ya2Fyb3VuZCBmb3IgMTkyIGJ5dGUgaHcgYnVnICovCi0JaWYgKChuUk9QMiAhPSAweDBDKSAmJiAoKGRzdF93aWR0aCAqIChkc3RfQlBQIC8gOCkpID49IDE5MikpIHsKLQkJLyoKLQkJICogUGVyZm9ybSB0aGUgUk9QMiBvcGVyYXRpb24gaW4gY2h1bmtzIG9mICh4V2lkdGggKgotCQkgKiBkc3RfaGVpZ2h0KQotCQkgKi8KLQkJd2hpbGUgKDEpIHsKLQkJCWRlV2FpdEZvck5vdEJ1c3koKTsKLQotCQkJU01UQ193cml0ZTJEcmVnKERFX1NPVVJDRSwKLQkJCQlGSUVMRF9TRVQoMCwgREVfU09VUkNFLCBXUkFQLCBESVNBQkxFKSB8Ci0JCQkJRklFTERfVkFMVUUoMCwgREVfU09VUkNFLCBYX0sxLCBzcmNfWCkgfAotCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1NPVVJDRSwgWV9LMiwgc3JjX1kpKTsKLQotCQkJU01UQ193cml0ZTJEcmVnKERFX0RFU1RJTkFUSU9OLAotCQkJCUZJRUxEX1NFVCgwLCBERV9ERVNUSU5BVElPTiwgV1JBUCwKLQkJCQkgIERJU0FCTEUpIHwgRklFTERfVkFMVUUoMCwKLQkJCQkJCQkgREVfREVTVElOQVRJT04sCi0JCQkJCQkJIFgsCi0JCQkJCQkJIGRzdF9YKQotCQkJfCBGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWSwKLQkJCQkJCSAgICAgIGRzdF9ZKSk7Ci0KLQkJCVNNVENfd3JpdGUyRHJlZyhERV9ESU1FTlNJT04sCi0JCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBYLAotCQkJCSAgICB4V2lkdGgpIHwgRklFTERfVkFMVUUoMCwKLQkJCQkJCQkgIERFX0RJTUVOU0lPTiwKLQkJCQkJCQkgIFlfRVQsCi0JCQkJCQkJICBkc3RfaGVpZ2h0KSk7Ci0KLQkJCWRlX2N0cmwgPQotCQkJICAgIEZJRUxEX1ZBTFVFKDAsIERFX0NPTlRST0wsIFJPUCwKLQkJCQluUk9QMikgfCBuVHJhbnNwYXJlbnQgfCBGSUVMRF9TRVQoMCwKLQkJCQkJCQkgIERFX0NPTlRST0wsCi0JCQkJCQkJICBST1BfU0VMRUNULAotCQkJCQkJCSAgUk9QMikKLQkJCSAgICB8IEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBDT01NQU5ELAotCQkJCUJJVEJMVCkgfCAoKG5EaXJlY3Rpb24gPT0KLQkJCQkJICAgIDEpID8gRklFTERfU0VUKDAsCi0JCQkJCQkgICBERV9DT05UUk9MLAotCQkJCQkJICAgRElSRUNUSU9OLAotCQkJCQkJICAgUklHSFRfVE9fTEVGVCkKLQkJCQkJICAgOiBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwKLQkJCQkJICAgICAgIERJUkVDVElPTiwKLQkJCQkJICAgICAgIExFRlRfVE9fUklHSFQpKSB8Ci0JCQkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFNUQVRVUywgU1RBUlQpOwotCi0JCQlTTVRDX3dyaXRlMkRyZWcoREVfQ09OVFJPTCwgZGVfY3RybCk7Ci0KLQkJCXNyY19YICs9IChvcFNpZ24gKiB4V2lkdGgpOwotCQkJZHN0X1ggKz0gKG9wU2lnbiAqIHhXaWR0aCk7Ci0JCQlkc3Rfd2lkdGggLT0geFdpZHRoOwotCi0JCQlpZiAoZHN0X3dpZHRoIDw9IDApIHsKLQkJCQkvKiBST1AyIG9wZXJhdGlvbiBpcyBjb21wbGV0ZSAqLwotCQkJCWJyZWFrOwotCQkJfQotCi0JCQlpZiAoeFdpZHRoID4gZHN0X3dpZHRoKQotCQkJCXhXaWR0aCA9IGRzdF93aWR0aDsKLQkJfQotCX0gZWxzZSB7Ci0JCWRlV2FpdEZvck5vdEJ1c3koKTsKLQkJU01UQ193cml0ZTJEcmVnKERFX1NPVVJDRSwKLQkJCUZJRUxEX1NFVCgwLCBERV9TT1VSQ0UsIFdSQVAsIERJU0FCTEUpIHwKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX1NPVVJDRSwgWF9LMSwgc3JjX1gpIHwKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX1NPVVJDRSwgWV9LMiwgc3JjX1kpKTsKLQotCQlTTVRDX3dyaXRlMkRyZWcoREVfREVTVElOQVRJT04sCi0JCQlGSUVMRF9TRVQoMCwgREVfREVTVElOQVRJT04sIFdSQVAsIERJU0FCTEUpIHwKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBYLCBkc3RfWCkgfAotCQkJRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFksIGRzdF9ZKSk7Ci0KLQkJU01UQ193cml0ZTJEcmVnKERFX0RJTUVOU0lPTiwKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWCwgZHN0X3dpZHRoKSB8Ci0JCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFlfRVQsIGRzdF9oZWlnaHQpKTsKLQotCQlkZV9jdHJsID0gRklFTERfVkFMVUUoMCwgREVfQ09OVFJPTCwgUk9QLCBuUk9QMikgfAotCQkgICAgblRyYW5zcGFyZW50IHwKLQkJICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBST1BfU0VMRUNULCBST1AyKSB8Ci0JCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgQ09NTUFORCwgQklUQkxUKSB8Ci0JCSAgICAoKG5EaXJlY3Rpb24gPT0gMSkgPyBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgRElSRUNUSU9OLAotCQkJCQkJICAgUklHSFRfVE9fTEVGVCkKLQkJICAgICA6IEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBESVJFQ1RJT04sCi0JCQkJIExFRlRfVE9fUklHSFQpKSB8IEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLAotCQkJCQkJCSAgICAgU1RBVFVTLCBTVEFSVCk7Ci0JCVNNVENfd3JpdGUyRHJlZyhERV9DT05UUk9MLCBkZV9jdHJsKTsKLQl9Ci0KLQlzbXRjX2RlX2J1c3kgPSAxOwotfQotCi0vKgotICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBwaXhlbCBmb3JtYXQgdGhhdCB3aWxsIGFwcGx5IHRvIHRoZSAyRCBFbmdpbmUuCi0gKi8KLXZvaWQgZGVTZXRQaXhlbEZvcm1hdCh1bnNpZ25lZCBsb25nIGJwcCkKLXsKLQl1bnNpZ25lZCBsb25nIGRlX2Zvcm1hdDsKLQotCWRlX2Zvcm1hdCA9IFNNVENfcmVhZDJEcmVnKERFX1NUUkVUQ0hfRk9STUFUKTsKLQotCXN3aXRjaCAoYnBwKSB7Ci0JY2FzZSA4OgotCQlkZV9mb3JtYXQgPQotCQkgICAgRklFTERfU0VUKGRlX2Zvcm1hdCwgREVfU1RSRVRDSF9GT1JNQVQsIFBJWEVMX0ZPUk1BVCwgOCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JY2FzZSAxNjoKLQkJZGVfZm9ybWF0ID0KLQkJICAgIEZJRUxEX1NFVChkZV9mb3JtYXQsIERFX1NUUkVUQ0hfRk9STUFULCBQSVhFTF9GT1JNQVQsIDE2KTsKLQkJYnJlYWs7Ci0JY2FzZSAzMjoKLQkJZGVfZm9ybWF0ID0KLQkJICAgIEZJRUxEX1NFVChkZV9mb3JtYXQsIERFX1NUUkVUQ0hfRk9STUFULCBQSVhFTF9GT1JNQVQsIDMyKTsKLQkJYnJlYWs7Ci0JfQotCi0JU01UQ193cml0ZTJEcmVnKERFX1NUUkVUQ0hfRk9STUFULCBkZV9mb3JtYXQpOwotfQotCi0vKgotICogU3lzdGVtIG1lbW9yeSB0byBWaWRlbyBtZW1vcnkgbW9ub2Nocm9tZSBleHBhbnNpb24uCi0gKgotICogU291cmNlIGlzIG1vbm9jaHJvbWUgaW1hZ2UgaW4gc3lzdGVtIG1lbW9yeS4gIFRoaXMgZnVuY3Rpb24gZXhwYW5kcyB0aGUKLSAqIG1vbm9jaHJvbWUgZGF0YSB0byBjb2xvciBpbWFnZSBpbiB2aWRlbyBtZW1vcnkuCi0gKi8KLQotbG9uZyBkZVN5c3RlbU1lbTJWaWRlb01lbU1vbm9CbHQoY29uc3QgY2hhciAqcFNyY2J1ZiwKLQkJCQkgbG9uZyBzcmNEZWx0YSwKLQkJCQkgdW5zaWduZWQgbG9uZyBzdGFydEJpdCwKLQkJCQkgdW5zaWduZWQgbG9uZyBkQmFzZSwKLQkJCQkgdW5zaWduZWQgbG9uZyBkUGl0Y2gsCi0JCQkJIHVuc2lnbmVkIGxvbmcgYnBwLAotCQkJCSB1bnNpZ25lZCBsb25nIGR4LCB1bnNpZ25lZCBsb25nIGR5LAotCQkJCSB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwKLQkJCQkgdW5zaWduZWQgbG9uZyBmQ29sb3IsCi0JCQkJIHVuc2lnbmVkIGxvbmcgYkNvbG9yLAotCQkJCSB1bnNpZ25lZCBsb25nIHJvcDIpIHsKLQl1bnNpZ25lZCBsb25nIGJ5dGVQZXJQaXhlbDsKLQl1bnNpZ25lZCBsb25nIHVsQnl0ZXNQZXJTY2FuOwotCXVuc2lnbmVkIGxvbmcgdWw0Qnl0ZXNQZXJTY2FuOwotCXVuc2lnbmVkIGxvbmcgdWxCeXRlc1JlbWFpbjsKLQl1bnNpZ25lZCBsb25nIGRlX2N0cmwgPSAwOwotCXVuc2lnbmVkIGNoYXIgYWpSZW1haW5bNF07Ci0JbG9uZyBpLCBqOwotCi0JYnl0ZVBlclBpeGVsID0gYnBwIC8gODsKLQotCS8qIEp1c3QgbWFrZSBzdXJlIHRoZSBzdGFydCBiaXQgaXMgd2l0aGluIGxlZ2FsIHJhbmdlICovCi0Jc3RhcnRCaXQgJj0gNzsKLQotCXVsQnl0ZXNQZXJTY2FuID0gKHdpZHRoICsgc3RhcnRCaXQgKyA3KSAvIDg7Ci0JdWw0Qnl0ZXNQZXJTY2FuID0gdWxCeXRlc1BlclNjYW4gJiB+MzsKLQl1bEJ5dGVzUmVtYWluID0gdWxCeXRlc1BlclNjYW4gJiAzOwotCi0JaWYgKHNtdGNfZGVfYnVzeSkKLQkJZGVXYWl0Rm9yTm90QnVzeSgpOwotCi0JLyoKLQkgKiAyRCBTb3VyY2UgQmFzZS4gIFVzZSAwIGZvciBIT1NUIEJsdC4KLQkgKi8KLQotCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfU09VUkNFX0JBU0UsIDApOwotCi0JLyoKLQkgKiAyRCBEZXN0aW5hdGlvbiBCYXNlLgotCSAqCi0JICogSXQgaXMgYW4gYWRkcmVzcyBvZmZzZXQgKDEyOCBiaXQgYWxpZ25lZCkgZnJvbSB0aGUgYmVnaW5uaW5nIG9mCi0JICogZnJhbWUgYnVmZmVyLgotCSAqLwotCi0JU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLCBkQmFzZSk7Ci0KLQlpZiAoZFBpdGNoKSB7Ci0KLQkJLyoKLQkJICogUHJvZ3JhbSBwaXRjaCAoZGlzdGFuY2UgYmV0d2VlbiB0aGUgMXN0IHBvaW50cyBvZiB0d28KLQkJICogYWRqYWNlbnQgbGluZXMpLgotCQkgKgotCQkgKiBOb3RlIHRoYXQgaW5wdXQgcGl0Y2ggaXMgQllURSB2YWx1ZSwgYnV0IHRoZSAyRCBQaXRjaAotCQkgKiByZWdpc3RlciB1c2VzIHBpeGVsIHZhbHVlcy4gTmVlZCBCeXRlIHRvIHBpeGVsIGNvbnZlcnRpb24uCi0JCSAqLwotCi0JCVNNVENfd3JpdGUyRHJlZyhERV9QSVRDSCwKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX1BJVENILCBERVNUSU5BVElPTiwKLQkJCSAgICBkUGl0Y2ggLwotCQkJICAgIGJ5dGVQZXJQaXhlbCkgfCBGSUVMRF9WQUxVRSgwLAotCQkJCQkJCURFX1BJVENILAotCQkJCQkJCVNPVVJDRSwKLQkJCQkJCQlkUGl0Y2ggLwotCQkJCQkJCWJ5dGVQZXJQaXhlbCkpOwotCi0JCS8qIFNjcmVlbiBXaW5kb3cgd2lkdGggaW4gUGl4ZWxzLgotCQkgKgotCQkgKiAyRCBlbmdpbmUgdXNlcyB0aGlzIHZhbHVlIHRvIGNhbGN1bGF0ZSB0aGUgbGluZWFyIGFkZHJlc3MgaW4KLQkJICogZnJhbWUgYnVmZmVyIGZvciBhIGdpdmVuIHBvaW50LgotCQkgKi8KLQotCQlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX1dJRFRILAotCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX1dJRFRILCBERVNUSU5BVElPTiwKLQkJCSAgICAoZFBpdGNoIC8KLQkJCSAgICAgYnl0ZVBlclBpeGVsKSkgfCBGSUVMRF9WQUxVRSgwLAotCQkJCQkJCSAgREVfV0lORE9XX1dJRFRILAotCQkJCQkJCSAgU09VUkNFLAotCQkJCQkJCSAgKGRQaXRjaAotCQkJCQkJCSAgIC8KLQkJCQkJCQkgICBieXRlUGVyUGl4ZWwpKSk7Ci0JfQotCS8qIE5vdGU6IEZvciAyRCBTb3VyY2UgaW4gSG9zdCBXcml0ZSwgb25seSBYX0sxIGZpZWxkIGlzIG5lZWRlZCwgYW5kCi0JICogWV9LMiBmaWVsZCBpcyBub3QgdXNlZC4gRm9yIG1vbm8gYml0bWFwLCB1c2Ugc3RhcnRCaXQgZm9yIFhfSzEuCi0JICovCi0KLQlTTVRDX3dyaXRlMkRyZWcoREVfU09VUkNFLAotCQkJRklFTERfU0VUKDAsIERFX1NPVVJDRSwgV1JBUCwgRElTQUJMRSkgfAotCQkJRklFTERfVkFMVUUoMCwgREVfU09VUkNFLCBYX0sxLCBzdGFydEJpdCkgfAotCQkJRklFTERfVkFMVUUoMCwgREVfU09VUkNFLCBZX0syLCAwKSk7Ci0KLQlTTVRDX3dyaXRlMkRyZWcoREVfREVTVElOQVRJT04sCi0JCQlGSUVMRF9TRVQoMCwgREVfREVTVElOQVRJT04sIFdSQVAsIERJU0FCTEUpIHwKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBYLCBkeCkgfAotCQkJRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFksIGR5KSk7Ci0KLQlTTVRDX3dyaXRlMkRyZWcoREVfRElNRU5TSU9OLAotCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBYLCB3aWR0aCkgfAotCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBZX0VULCBoZWlnaHQpKTsKLQotCVNNVENfd3JpdGUyRHJlZyhERV9GT1JFR1JPVU5ELCBmQ29sb3IpOwotCVNNVENfd3JpdGUyRHJlZyhERV9CQUNLR1JPVU5ELCBiQ29sb3IpOwotCi0JaWYgKGJwcCkKLQkJZGVTZXRQaXhlbEZvcm1hdChicHApOwotCS8qIFNldCB0aGUgcGl4ZWwgZm9ybWF0IG9mIHRoZSBkZXN0aW5hdGlvbiAqLwotCi0JZGVfY3RybCA9IEZJRUxEX1ZBTFVFKDAsIERFX0NPTlRST0wsIFJPUCwgcm9wMikgfAotCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgUk9QX1NFTEVDVCwgUk9QMikgfAotCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgQ09NTUFORCwgSE9TVF9XUklURSkgfAotCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgSE9TVCwgTU9OTykgfAotCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgU1RBVFVTLCBTVEFSVCk7Ci0KLQlTTVRDX3dyaXRlMkRyZWcoREVfQ09OVFJPTCwgZGVfY3RybCB8IGRlR2V0VHJhbnNwYXJlbmN5KCkpOwotCi0JLyogV3JpdGUgTU9OTyBkYXRhIChsaW5lIGJ5IGxpbmUpIHRvIDJEIEVuZ2luZSBkYXRhIHBvcnQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKLQkJLyogRm9yIGVhY2ggbGluZSwgc2VuZCB0aGUgZGF0YSBpbiBjaHVua3Mgb2YgNCBieXRlcyAqLwotCQlmb3IgKGogPSAwOyBqIDwgKHVsNEJ5dGVzUGVyU2NhbiAvIDQpOyBqKyspCi0JCQlTTVRDX3dyaXRlMkRkYXRhcG9ydCgwLAotCQkJCQkgICAgICoodW5zaWduZWQgbG9uZyAqKShwU3JjYnVmICsKLQkJCQkJCQkJKGogKiA0KSkpOwotCi0JCWlmICh1bEJ5dGVzUmVtYWluKSB7Ci0JCQltZW1jcHkoYWpSZW1haW4sIHBTcmNidWYgKyB1bDRCeXRlc1BlclNjYW4sCi0JCQkgICAgICAgdWxCeXRlc1JlbWFpbik7Ci0JCQlTTVRDX3dyaXRlMkRkYXRhcG9ydCgwLCAqKHVuc2lnbmVkIGxvbmcgKilhalJlbWFpbik7Ci0JCX0KLQotCQlwU3JjYnVmICs9IHNyY0RlbHRhOwotCX0KLQlzbXRjX2RlX2J1c3kgPSAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIHRyYW5zcGFyZW5jeSBzdGF0dXMgZnJvbSBERV9DT05UUk9MIHJlZ2lzdGVyLgotICogSXQgcmV0dXJucyBhIGRvdWJsZSB3b3JkIHdpdGggdGhlIHRyYW5zcGFyZW50IGZpZWxkcyBwcm9wZXJseSBzZXQsCi0gKiB3aGlsZSBvdGhlciBmaWVsZHMgYXJlIDAuCi0gKi8KLXVuc2lnbmVkIGxvbmcgZGVHZXRUcmFuc3BhcmVuY3kodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGRlX2N0cmw7Ci0KLQlkZV9jdHJsID0gU01UQ19yZWFkMkRyZWcoREVfQ09OVFJPTCk7Ci0KLQlkZV9jdHJsICY9Ci0JICAgIEZJRUxEX01BU0soREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1lfTUFUQ0gpIHwKLQkgICAgRklFTERfTUFTSyhERV9DT05UUk9MX1RSQU5TUEFSRU5DWV9TRUxFQ1QpIHwKLQkgICAgRklFTERfTUFTSyhERV9DT05UUk9MX1RSQU5TUEFSRU5DWSk7Ci0KLQlyZXR1cm4gZGVfY3RybDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJiNGZhMi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210YzJkLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MzAgKzAsMCBAQAotLyoKLSAqIFNpbGljb24gTW90aW9uIFNNNzEyIDJEIGRyYXdpbmcgZW5naW5lIGZ1bmN0aW9ucy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2lsaWNvbiBNb3Rpb24gVGVjaG5vbG9neSBDb3JwLgotICogQXV0aG9yOiBHZSBXYW5nLCBnZXdhbmdAc2lsaWNvbm1vdGlvbi5jb20KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQotICoKLSAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCi0gKiAgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpZm5kZWYgTlVMTAotI2RlZmluZSBOVUxMCSAwCi0jZW5kaWYKLQotLyogSW50ZXJuYWwgbWFjcm9zICovCi0KLSNkZWZpbmUgX0ZfU1RBUlQoZikJCSgwID8gZikKLSNkZWZpbmUgX0ZfRU5EKGYpCQkoMSA/IGYpCi0jZGVmaW5lIF9GX1NJWkUoZikJCSgxICsgX0ZfRU5EKGYpIC0gX0ZfU1RBUlQoZikpCi0jZGVmaW5lIF9GX01BU0soZikJCSgoKDFVTEwgPDwgX0ZfU0laRShmKSkgLSAxKSA8PCBfRl9TVEFSVChmKSkKLSNkZWZpbmUgX0ZfTk9STUFMSVpFKHYsIGYpCSgoKHYpICYgX0ZfTUFTSyhmKSkgPj4gX0ZfU1RBUlQoZikpCi0jZGVmaW5lIF9GX0RFTk9STUFMSVpFKHYsIGYpCSgoKHYpIDw8IF9GX1NUQVJUKGYpKSAmIF9GX01BU0soZikpCi0KLS8qIEdsb2JhbCBtYWNyb3MgKi8KLQotI2RlZmluZSBGSUVMRF9HRVQoeCwgcmVnLCBmaWVsZCkgXAotKCBcCi0gICAgX0ZfTk9STUFMSVpFKCh4KSwgcmVnICMjIF8gIyMgZmllbGQpIFwKLSkKLQotI2RlZmluZSBGSUVMRF9TRVQoeCwgcmVnLCBmaWVsZCwgdmFsdWUpIFwKLSggXAotICAgICh4ICYgfl9GX01BU0socmVnICMjIF8gIyMgZmllbGQpKSBcCi0gICAgfCBfRl9ERU5PUk1BTElaRShyZWcgIyMgXyAjIyBmaWVsZCAjIyBfICMjIHZhbHVlLCByZWcgIyMgXyAjIyBmaWVsZCkgXAotKQotCi0jZGVmaW5lIEZJRUxEX1ZBTFVFKHgsIHJlZywgZmllbGQsIHZhbHVlKSBcCi0oIFwKLSAgICAoeCAmIH5fRl9NQVNLKHJlZyAjIyBfICMjIGZpZWxkKSkgXAotICAgIHwgX0ZfREVOT1JNQUxJWkUodmFsdWUsIHJlZyAjIyBfICMjIGZpZWxkKSBcCi0pCi0KLSNkZWZpbmUgRklFTERfQ0xFQVIocmVnLCBmaWVsZCkgXAotKCBcCi0gICAgfl9GX01BU0socmVnICMjIF8gIyMgZmllbGQpIFwKLSkKLQotLyogRmllbGQgTWFjcm9zICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotI2RlZmluZSBGSUVMRF9TVEFSVChmaWVsZCkJKDAgPyBmaWVsZCkKLSNkZWZpbmUgRklFTERfRU5EKGZpZWxkKQkoMSA/IGZpZWxkKQotI2RlZmluZSBGSUVMRF9TSVpFKGZpZWxkKSBcCi0JKDEgKyBGSUVMRF9FTkQoZmllbGQpIC0gRklFTERfU1RBUlQoZmllbGQpKQotCi0jZGVmaW5lIEZJRUxEX01BU0soZmllbGQpIFwKLQkoKCgxIDw8IChGSUVMRF9TSVpFKGZpZWxkKS0xKSkgXAotCXwgKCgxIDw8IChGSUVMRF9TSVpFKGZpZWxkKS0xKSkgLSAxKSkgXAotCTw8IEZJRUxEX1NUQVJUKGZpZWxkKSkKLQotI2RlZmluZSBGSUVMRF9OT1JNQUxJWkUocmVnLCBmaWVsZCkgXAotCSgoKHJlZykgJiBGSUVMRF9NQVNLKGZpZWxkKSkgPj4gRklFTERfU1RBUlQoZmllbGQpKQotCi0jZGVmaW5lIEZJRUxEX0RFTk9STUFMSVpFKGZpZWxkLCB2YWx1ZSkgXAotCSgoKHZhbHVlKSA8PCBGSUVMRF9TVEFSVChmaWVsZCkpICYgRklFTERfTUFTSyhmaWVsZCkpCi0KLSNkZWZpbmUgRklFTERfSU5JVChyZWcsIGZpZWxkLCB2YWx1ZSkgXAotCUZJRUxEX0RFTk9STUFMSVpFKHJlZyAjIyBfICMjIGZpZWxkLCBcCi0JCXJlZyAjIyBfICMjIGZpZWxkICMjIF8gIyMgdmFsdWUpCi0KLSNkZWZpbmUgRklFTERfSU5JVF9WQUwocmVnLCBmaWVsZCwgdmFsdWUpIFwKLQkoRklFTERfREVOT1JNQUxJWkUocmVnICMjIF8gIyMgZmllbGQsIHZhbHVlKSkKLQotI2RlZmluZSBGSUVMRF9WQUxfU0VUKHgsIHIsIGYsIHYpICh7IFwKLQl4ID0gKHggJiB+RklFTERfTUFTSyhyICMjIF8gIyMgZikpIFwKLQl8IEZJRUxEX0RFTk9STUFMSVpFKHIgIyMgXyAjIyBmLCByICMjIF8gIyMgZiAjIyBfICMjIHYpIFwKLX0pCi0KLSNkZWZpbmUgUkdCKHIsIGcsIGIpCSgodW5zaWduZWQgbG9uZykoKChyKSA8PCAxNikgfCAoKGcpIDw8IDgpIHwgKGIpKSkKLQotLyogVHJhbnNwYXJlbnQgaW5mbyBkZWZpbml0aW9uICovCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBtYXRjaDsJLyogTWF0Y2hpbmcgcGl4ZWwgaXMgT1BBUVVFL1RSQU5TUEFSRU5UICovCi0JdW5zaWduZWQgbG9uZyBzZWxlY3Q7CS8qIFRyYW5zcGFyZW5jeSBjb250cm9sbGVkIGJ5IFNSQy9EU1QgKi8KLQl1bnNpZ25lZCBsb25nIGNvbnRyb2w7CS8qIEVOQUJMRS9ESVNBQkxFIHRyYW5zcGFyZW5jeSAqLwotCXVuc2lnbmVkIGxvbmcgY29sb3I7CS8qIFRyYW5zcGFyZW50IGNvbG9yICovCi19IFRyYW5zcGFyZW50LCAqcFRyYW5zcGFyZW50OwotCi0jZGVmaW5lIFBJWEVMX0RFUFRIXzFfQlAJMAkvKiAxIGJpdCBwZXIgcGl4ZWwgKi8KLSNkZWZpbmUgUElYRUxfREVQVEhfOF9CUFAJMQkvKiA4IGJpdHMgcGVyIHBpeGVsICovCi0jZGVmaW5lIFBJWEVMX0RFUFRIXzE2X0JQUAkyCS8qIDE2IGJpdHMgcGVyIHBpeGVsICovCi0jZGVmaW5lIFBJWEVMX0RFUFRIXzMyX0JQUAkzCS8qIDMyIGJpdHMgcGVyIHBpeGVsICovCi0jZGVmaW5lIFBJWEVMX0RFUFRIX1lVVjQyMgk4CS8qIDE2IGJpdHMgcGVyIHBpeGVsIFlVVjQyMiAqLwotI2RlZmluZSBQSVhFTF9ERVBUSF9ZVVY0MjAJOQkvKiAxNiBiaXRzIHBlciBwaXhlbCBZVVY0MjAgKi8KLQotI2RlZmluZSBQQVRURVJOX1dJRFRICQk4Ci0jZGVmaW5lIFBBVFRFUk5fSEVJR0hUCQk4Ci0KLSNkZWZpbmUJVE9QX1RPX0JPVFRPTQkJMAotI2RlZmluZQlCT1RUT01fVE9fVE9QCQkxCi0jZGVmaW5lIFJJR0hUX1RPX0xFRlQJCUJPVFRPTV9UT19UT1AKLSNkZWZpbmUgTEVGVF9UT19SSUdIVAkJVE9QX1RPX0JPVFRPTQotCi0vKiBDb25zdGFudHMgdXNlZCBpbiBUcmFuc3BhcmVudCBzdHJ1Y3R1cmUgKi8KLSNkZWZpbmUgTUFUQ0hfT1BBUVVFCQkweDAwMDAwMDAwCi0jZGVmaW5lIE1BVENIX1RSQU5TUEFSRU5UCTB4MDAwMDA0MDAKLSNkZWZpbmUgU09VUkNFCQkJMHgwMDAwMDAwMAotI2RlZmluZSBERVNUSU5BVElPTgkJMHgwMDAwMDIwMAotCi0vKiAyRCByZWdpc3RlcnMuICovCi0KLSNkZWZpbmUJREVfU09VUkNFCQkJMHgwMDAwMDAKLSNkZWZpbmUJREVfU09VUkNFX1dSQVAJCQkzMSA6IDMxCi0jZGVmaW5lCURFX1NPVVJDRV9XUkFQX0RJU0FCTEUJCTAKLSNkZWZpbmUJREVfU09VUkNFX1dSQVBfRU5BQkxFCQkxCi0jZGVmaW5lCURFX1NPVVJDRV9YX0sxCQkJMjkgOiAxNgotI2RlZmluZQlERV9TT1VSQ0VfWV9LMgkJCTE1IDogMAotCi0jZGVmaW5lCURFX0RFU1RJTkFUSU9OCQkJMHgwMDAwMDQKLSNkZWZpbmUJREVfREVTVElOQVRJT05fV1JBUAkJMzEgOiAzMQotI2RlZmluZQlERV9ERVNUSU5BVElPTl9XUkFQX0RJU0FCTEUJMAotI2RlZmluZQlERV9ERVNUSU5BVElPTl9XUkFQX0VOQUJMRQkxCi0jZGVmaW5lCURFX0RFU1RJTkFUSU9OX1gJCTI4IDogMTYKLSNkZWZpbmUJREVfREVTVElOQVRJT05fWQkJMTUgOiAwCi0KLSNkZWZpbmUJREVfRElNRU5TSU9OCQkJMHgwMDAwMDgKLSNkZWZpbmUJREVfRElNRU5TSU9OX1gJCQkyOCA6IDE2Ci0jZGVmaW5lCURFX0RJTUVOU0lPTl9ZX0VUCQkxNSA6IDAKLQotI2RlZmluZQlERV9DT05UUk9MCQkJMHgwMDAwMEMKLSNkZWZpbmUJREVfQ09OVFJPTF9TVEFUVVMJCTMxIDogMzEKLSNkZWZpbmUJREVfQ09OVFJPTF9TVEFUVVNfU1RPUAkJMAotI2RlZmluZQlERV9DT05UUk9MX1NUQVRVU19TVEFSVAkJMQotI2RlZmluZQlERV9DT05UUk9MX1BBVFRFUk4JCTMwIDogMzAKLSNkZWZpbmUJREVfQ09OVFJPTF9QQVRURVJOX01PTk8JCTAKLSNkZWZpbmUJREVfQ09OVFJPTF9QQVRURVJOX0NPTE9SCTEKLSNkZWZpbmUJREVfQ09OVFJPTF9VUERBVEVfREVTVElOQVRJT05fWAkJMjkgOiAyOQotI2RlZmluZQlERV9DT05UUk9MX1VQREFURV9ERVNUSU5BVElPTl9YX0RJU0FCTEUJMAotI2RlZmluZQlERV9DT05UUk9MX1VQREFURV9ERVNUSU5BVElPTl9YX0VOQUJMRQkxCi0jZGVmaW5lCURFX0NPTlRST0xfUVVJQ0tfU1RBUlQJCQkyOCA6IDI4Ci0jZGVmaW5lCURFX0NPTlRST0xfUVVJQ0tfU1RBUlRfRElTQUJMRQkJMAotI2RlZmluZQlERV9DT05UUk9MX1FVSUNLX1NUQVJUX0VOQUJMRQkJMQotI2RlZmluZQlERV9DT05UUk9MX0RJUkVDVElPTgkJCTI3IDogMjcKLSNkZWZpbmUJREVfQ09OVFJPTF9ESVJFQ1RJT05fTEVGVF9UT19SSUdIVAkwCi0jZGVmaW5lCURFX0NPTlRST0xfRElSRUNUSU9OX1JJR0hUX1RPX0xFRlQJMQotI2RlZmluZQlERV9DT05UUk9MX01BSk9SCQkJMjYgOiAyNgotI2RlZmluZQlERV9DT05UUk9MX01BSk9SX1gJCQkwCi0jZGVmaW5lCURFX0NPTlRST0xfTUFKT1JfWQkJCTEKLSNkZWZpbmUJREVfQ09OVFJPTF9TVEVQX1gJCQkyNSA6IDI1Ci0jZGVmaW5lCURFX0NPTlRST0xfU1RFUF9YX1BPU0lUSVZFCQkxCi0jZGVmaW5lCURFX0NPTlRST0xfU1RFUF9YX05FR0FUSVZFCQkwCi0jZGVmaW5lCURFX0NPTlRST0xfU1RFUF9ZCQkJMjQgOiAyNAotI2RlZmluZQlERV9DT05UUk9MX1NURVBfWV9QT1NJVElWRQkJMQotI2RlZmluZQlERV9DT05UUk9MX1NURVBfWV9ORUdBVElWRQkJMAotI2RlZmluZQlERV9DT05UUk9MX1NUUkVUQ0gJCQkyMyA6IDIzCi0jZGVmaW5lCURFX0NPTlRST0xfU1RSRVRDSF9ESVNBQkxFCQkwCi0jZGVmaW5lCURFX0NPTlRST0xfU1RSRVRDSF9FTkFCTEUJCTEKLSNkZWZpbmUJREVfQ09OVFJPTF9IT1NUCQkJCTIyIDogMjIKLSNkZWZpbmUJREVfQ09OVFJPTF9IT1NUX0NPTE9SCQkJMAotI2RlZmluZQlERV9DT05UUk9MX0hPU1RfTU9OTwkJCTEKLSNkZWZpbmUJREVfQ09OVFJPTF9MQVNUX1BJWEVMCQkJMjEgOiAyMQotI2RlZmluZQlERV9DT05UUk9MX0xBU1RfUElYRUxfT0ZGCQkwCi0jZGVmaW5lCURFX0NPTlRST0xfTEFTVF9QSVhFTF9PTgkJMQotI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkQJCQkyMCA6IDE2Ci0jZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9CSVRCTFQJCTAKLSNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX1JFQ1RBTkdMRV9GSUxMCTEKLSNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX0RFX1RJTEUJCTIKLSNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX1RSQVBFWk9JRF9GSUxMCTMKLSNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX0FMUEhBX0JMRU5ECQk0Ci0jZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9STEVfU1RSSVAJCTUKLSNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX1NIT1JUX1NUUk9LRQkJNgotI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfTElORV9EUkFXCQk3Ci0jZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9IT1NUX1dSSVRFCQk4Ci0jZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9IT1NUX1JFQUQJCTkKLSNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX0hPU1RfV1JJVEVfQk9UVE9NX1VQCTEwCi0jZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9ST1RBVEUJCTExCi0jZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9GT05UCQkJMTIKLSNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX1RFWFRVUkVfTE9BRAkJMTUKLSNkZWZpbmUJREVfQ09OVFJPTF9ST1BfU0VMRUNUCQkJMTUgOiAxNQotI2RlZmluZQlERV9DT05UUk9MX1JPUF9TRUxFQ1RfUk9QMwkJMAotI2RlZmluZQlERV9DT05UUk9MX1JPUF9TRUxFQ1RfUk9QMgkJMQotI2RlZmluZQlERV9DT05UUk9MX1JPUDJfU09VUkNFCQkJMTQgOiAxNAotI2RlZmluZQlERV9DT05UUk9MX1JPUDJfU09VUkNFX0JJVE1BUAkJMAotI2RlZmluZQlERV9DT05UUk9MX1JPUDJfU09VUkNFX1BBVFRFUk4JCTEKLSNkZWZpbmUJREVfQ09OVFJPTF9NT05PX0RBVEEJCQkxMyA6IDEyCi0jZGVmaW5lCURFX0NPTlRST0xfTU9OT19EQVRBX05PVF9QQUNLRUQJCTAKLSNkZWZpbmUJREVfQ09OVFJPTF9NT05PX0RBVEFfOF9QQUNLRUQJCTEKLSNkZWZpbmUJREVfQ09OVFJPTF9NT05PX0RBVEFfMTZfUEFDS0VECQkyCi0jZGVmaW5lCURFX0NPTlRST0xfTU9OT19EQVRBXzMyX1BBQ0tFRAkJMwotI2RlZmluZQlERV9DT05UUk9MX1JFUEVBVF9ST1RBVEUJCTExIDogMTEKLSNkZWZpbmUJREVfQ09OVFJPTF9SRVBFQVRfUk9UQVRFX0RJU0FCTEUJMAotI2RlZmluZQlERV9DT05UUk9MX1JFUEVBVF9ST1RBVEVfRU5BQkxFCQkxCi0jZGVmaW5lCURFX0NPTlRST0xfVFJBTlNQQVJFTkNZX01BVENICQkxMCA6IDEwCi0jZGVmaW5lCURFX0NPTlRST0xfVFJBTlNQQVJFTkNZX01BVENIX09QQVFVRQkJMAotI2RlZmluZQlERV9DT05UUk9MX1RSQU5TUEFSRU5DWV9NQVRDSF9UUkFOU1BBUkVOVAkxCi0jZGVmaW5lCURFX0NPTlRST0xfVFJBTlNQQVJFTkNZX1NFTEVDVAkJCTkgOiA5Ci0jZGVmaW5lCURFX0NPTlRST0xfVFJBTlNQQVJFTkNZX1NFTEVDVF9TT1VSQ0UJCTAKLSNkZWZpbmUJREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1lfU0VMRUNUX0RFU1RJTkFUSU9OCTEKLSNkZWZpbmUJREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1kJCQkJOCA6IDgKLSNkZWZpbmUJREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1lfRElTQUJMRQkJCTAKLSNkZWZpbmUJREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1lfRU5BQkxFCQkJMQotI2RlZmluZQlERV9DT05UUk9MX1JPUAkJCQkJNyA6IDAKLQotLyogUHNldWRvIGZpZWxkcy4gKi8KLQotI2RlZmluZQlERV9DT05UUk9MX1NIT1JUX1NUUk9LRV9ESVIJCQkyNyA6IDI0Ci0jZGVmaW5lCURFX0NPTlRST0xfU0hPUlRfU1RST0tFX0RJUl8yMjUJCQkwCi0jZGVmaW5lCURFX0NPTlRST0xfU0hPUlRfU1RST0tFX0RJUl8xMzUJCQkxCi0jZGVmaW5lCURFX0NPTlRST0xfU0hPUlRfU1RST0tFX0RJUl8zMTUJCQkyCi0jZGVmaW5lCURFX0NPTlRST0xfU0hPUlRfU1RST0tFX0RJUl80NQkJCTMKLSNkZWZpbmUJREVfQ09OVFJPTF9TSE9SVF9TVFJPS0VfRElSXzI3MAkJCTQKLSNkZWZpbmUJREVfQ09OVFJPTF9TSE9SVF9TVFJPS0VfRElSXzkwCQkJNQotI2RlZmluZQlERV9DT05UUk9MX1NIT1JUX1NUUk9LRV9ESVJfMTgwCQkJOAotI2RlZmluZQlERV9DT05UUk9MX1NIT1JUX1NUUk9LRV9ESVJfMAkJCTEwCi0jZGVmaW5lCURFX0NPTlRST0xfUk9UQVRJT04JCQkJMjUgOiAyNAotI2RlZmluZQlERV9DT05UUk9MX1JPVEFUSU9OXzAJCQkJMAotI2RlZmluZQlERV9DT05UUk9MX1JPVEFUSU9OXzI3MAkJCQkxCi0jZGVmaW5lCURFX0NPTlRST0xfUk9UQVRJT05fOTAJCQkJMgotI2RlZmluZQlERV9DT05UUk9MX1JPVEFUSU9OXzE4MAkJCQkzCi0KLSNkZWZpbmUJREVfUElUQ0gJCQkJCTB4MDAwMDEwCi0jZGVmaW5lCURFX1BJVENIX0RFU1RJTkFUSU9OCQkJCTI4IDogMTYKLSNkZWZpbmUJREVfUElUQ0hfU09VUkNFCQkJCQkxMiA6IDAKLQotI2RlZmluZQlERV9GT1JFR1JPVU5ECQkJCQkweDAwMDAxNAotI2RlZmluZQlERV9GT1JFR1JPVU5EX0NPTE9SCQkJCTMxIDogMAotCi0jZGVmaW5lCURFX0JBQ0tHUk9VTkQJCQkJCTB4MDAwMDE4Ci0jZGVmaW5lCURFX0JBQ0tHUk9VTkRfQ09MT1IJCQkJMzEgOiAwCi0KLSNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVQJCQkJMHgwMDAwMUMKLSNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfUEFUVEVSTl9YWQkJCTMwIDogMzAKLSNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfUEFUVEVSTl9YWV9OT1JNQUwJCTAKLSNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfUEFUVEVSTl9YWV9PVkVSV1JJVEUJCTEKLSNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfUEFUVEVSTl9ZCQkJMjkgOiAyNwotI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9QQVRURVJOX1gJCQkyNSA6IDIzCi0jZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX1BJWEVMX0ZPUk1BVAkJCTIxIDogMjAKLSNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfUElYRUxfRk9STUFUXzgJCTAKLSNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfUElYRUxfRk9STUFUXzE2CQkxCi0jZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX1BJWEVMX0ZPUk1BVF8yNAkJMwotI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9QSVhFTF9GT1JNQVRfMzIJCTIKLSNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfQUREUkVTU0lORwkJCTE5IDogMTYKLSNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfQUREUkVTU0lOR19YWQkJCTAKLSNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfQUREUkVTU0lOR19MSU5FQVIJCTE1Ci0jZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX1NPVVJDRV9IRUlHSFQJCQkxMSA6IDAKLQotI2RlZmluZQlERV9DT0xPUl9DT01QQVJFCQkJCTB4MDAwMDIwCi0jZGVmaW5lCURFX0NPTE9SX0NPTVBBUkVfQ09MT1IJCQkJMjMgOiAwCi0KLSNkZWZpbmUJREVfQ09MT1JfQ09NUEFSRV9NQVNLCQkJCTB4MDAwMDI0Ci0jZGVmaW5lCURFX0NPTE9SX0NPTVBBUkVfTUFTS19NQVNLUwkJCTIzIDogMAotCi0jZGVmaW5lCURFX01BU0tTCQkJCQkweDAwMDAyOAotI2RlZmluZQlERV9NQVNLU19CWVRFX01BU0sJCQkJMzEgOiAxNgotI2RlZmluZQlERV9NQVNLU19CSVRfTUFTSwkJCQkxNSA6IDAKLQotI2RlZmluZQlERV9DTElQX1RMCQkJCQkweDAwMDAyQwotI2RlZmluZQlERV9DTElQX1RMX1RPUAkJCQkJMzEgOiAxNgotI2RlZmluZQlERV9DTElQX1RMX1NUQVRVUwkJCQkxMyA6IDEzCi0jZGVmaW5lCURFX0NMSVBfVExfU1RBVFVTX0RJU0FCTEUJCQkwCi0jZGVmaW5lCURFX0NMSVBfVExfU1RBVFVTX0VOQUJMRQkJCTEKLSNkZWZpbmUJREVfQ0xJUF9UTF9JTkhJQklUCQkJCTEyIDogMTIKLSNkZWZpbmUJREVfQ0xJUF9UTF9JTkhJQklUX09VVFNJREUJCQkwCi0jZGVmaW5lCURFX0NMSVBfVExfSU5ISUJJVF9JTlNJREUJCQkxCi0jZGVmaW5lCURFX0NMSVBfVExfTEVGVAkJCQkJMTEgOiAwCi0KLSNkZWZpbmUJREVfQ0xJUF9CUgkJCQkJMHgwMDAwMzAKLSNkZWZpbmUJREVfQ0xJUF9CUl9CT1RUT00JCQkJMzEgOiAxNgotI2RlZmluZQlERV9DTElQX0JSX1JJR0hUCQkJCTEyIDogMAotCi0jZGVmaW5lCURFX01PTk9fUEFUVEVSTl9MT1cJCQkJMHgwMDAwMzQKLSNkZWZpbmUJREVfTU9OT19QQVRURVJOX0xPV19QQVRURVJOCQkJMzEgOiAwCi0KLSNkZWZpbmUJREVfTU9OT19QQVRURVJOX0hJR0gJCQkJMHgwMDAwMzgKLSNkZWZpbmUJREVfTU9OT19QQVRURVJOX0hJR0hfUEFUVEVSTgkJCTMxIDogMAotCi0jZGVmaW5lCURFX1dJTkRPV19XSURUSAkJCQkJMHgwMDAwM0MKLSNkZWZpbmUJREVfV0lORE9XX1dJRFRIX0RFU1RJTkFUSU9OCQkJMjggOiAxNgotI2RlZmluZQlERV9XSU5ET1dfV0lEVEhfU09VUkNFCQkJCTEyIDogMAotCi0jZGVmaW5lCURFX1dJTkRPV19TT1VSQ0VfQkFTRQkJCQkweDAwMDA0MAotI2RlZmluZQlERV9XSU5ET1dfU09VUkNFX0JBU0VfRVhUCQkJMjcgOiAyNwotI2RlZmluZQlERV9XSU5ET1dfU09VUkNFX0JBU0VfRVhUX0xPQ0FMCQkJMAotI2RlZmluZQlERV9XSU5ET1dfU09VUkNFX0JBU0VfRVhUX0VYVEVSTkFMCQkxCi0jZGVmaW5lCURFX1dJTkRPV19TT1VSQ0VfQkFTRV9DUwkJCTI2IDogMjYKLSNkZWZpbmUJREVfV0lORE9XX1NPVVJDRV9CQVNFX0NTXzAJCQkwCi0jZGVmaW5lCURFX1dJTkRPV19TT1VSQ0VfQkFTRV9DU18xCQkJMQotI2RlZmluZQlERV9XSU5ET1dfU09VUkNFX0JBU0VfQUREUkVTUwkJCTI1IDogMAotCi0jZGVmaW5lCURFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFCQkJMHgwMDAwNDQKLSNkZWZpbmUJREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0VfRVhUCQkJMjcgOiAyNwotI2RlZmluZQlERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRV9FWFRfTE9DQUwJCTAKLSNkZWZpbmUJREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0VfRVhUX0VYVEVSTkFMCQkxCi0jZGVmaW5lCURFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFX0NTCQkJMjYgOiAyNgotI2RlZmluZQlERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRV9DU18wCQkJMAotI2RlZmluZQlERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRV9DU18xCQkJMQotI2RlZmluZQlERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRV9BRERSRVNTCQkyNSA6IDAKLQotI2RlZmluZQlERV9BTFBIQQkJCQkJMHgwMDAwNDgKLSNkZWZpbmUJREVfQUxQSEFfVkFMVUUJCQkJCTcgOiAwCi0KLSNkZWZpbmUJREVfV1JBUAkJCQkJCTB4MDAwMDRDCi0jZGVmaW5lCURFX1dSQVBfWAkJCQkJMzEgOiAxNgotI2RlZmluZQlERV9XUkFQX1kJCQkJCTE1IDogMAotCi0jZGVmaW5lCURFX1NUQVRVUwkJCQkJMHgwMDAwNTAKLSNkZWZpbmUJREVfU1RBVFVTX0NTQwkJCQkJMSA6IDEKLSNkZWZpbmUJREVfU1RBVFVTX0NTQ19DTEVBUgkJCQkwCi0jZGVmaW5lCURFX1NUQVRVU19DU0NfTk9UX0FDVElWRQkJCTAKLSNkZWZpbmUJREVfU1RBVFVTX0NTQ19BQ1RJVkUJCQkJMQotI2RlZmluZQlERV9TVEFUVVNfMkQJCQkJCTAgOiAwCi0jZGVmaW5lCURFX1NUQVRVU18yRF9DTEVBUgkJCQkwCi0jZGVmaW5lCURFX1NUQVRVU18yRF9OT1RfQUNUSVZFCQkJCTAKLSNkZWZpbmUJREVfU1RBVFVTXzJEX0FDVElWRQkJCQkxCi0KLS8qIENvbG9yIFNwYWNlIENvbnZlcnNpb24gcmVnaXN0ZXJzLiAqLwotCi0jZGVmaW5lCUNTQ19ZX1NPVVJDRV9CQVNFCQkJCTB4MDAwMEM4Ci0jZGVmaW5lCUNTQ19ZX1NPVVJDRV9CQVNFX0VYVAkJCQkyNyA6IDI3Ci0jZGVmaW5lCUNTQ19ZX1NPVVJDRV9CQVNFX0VYVF9MT0NBTAkJCTAKLSNkZWZpbmUJQ1NDX1lfU09VUkNFX0JBU0VfRVhUX0VYVEVSTkFMCQkJMQotI2RlZmluZQlDU0NfWV9TT1VSQ0VfQkFTRV9DUwkJCQkyNiA6IDI2Ci0jZGVmaW5lCUNTQ19ZX1NPVVJDRV9CQVNFX0NTXzAJCQkJMAotI2RlZmluZQlDU0NfWV9TT1VSQ0VfQkFTRV9DU18xCQkJCTEKLSNkZWZpbmUJQ1NDX1lfU09VUkNFX0JBU0VfQUREUkVTUwkJCTI1IDogMAotCi0jZGVmaW5lCUNTQ19DT05TVEFOVFMJCQkJCTB4MDAwMENDCi0jZGVmaW5lCUNTQ19DT05TVEFOVFNfWQkJCQkJMzEgOiAyNAotI2RlZmluZQlDU0NfQ09OU1RBTlRTX1IJCQkJCTIzIDogMTYKLSNkZWZpbmUJQ1NDX0NPTlNUQU5UU19HCQkJCQkxNSA6IDgKLSNkZWZpbmUJQ1NDX0NPTlNUQU5UU19CCQkJCQk3IDogMAotCi0jZGVmaW5lCUNTQ19ZX1NPVVJDRV9YCQkJCQkweDAwMDBEMAotI2RlZmluZQlDU0NfWV9TT1VSQ0VfWF9JTlRFR0VSCQkJCTI2IDogMTYKLSNkZWZpbmUJQ1NDX1lfU09VUkNFX1hfRlJBQ1RJT04JCQkJMTUgOiAzCi0KLSNkZWZpbmUJQ1NDX1lfU09VUkNFX1kJCQkJCTB4MDAwMEQ0Ci0jZGVmaW5lCUNTQ19ZX1NPVVJDRV9ZX0lOVEVHRVIJCQkJMjcgOiAxNgotI2RlZmluZQlDU0NfWV9TT1VSQ0VfWV9GUkFDVElPTgkJCQkxNSA6IDMKLQotI2RlZmluZQlDU0NfVV9TT1VSQ0VfQkFTRQkJCQkweDAwMDBEOAotI2RlZmluZQlDU0NfVV9TT1VSQ0VfQkFTRV9FWFQJCQkJMjcgOiAyNwotI2RlZmluZQlDU0NfVV9TT1VSQ0VfQkFTRV9FWFRfTE9DQUwJCQkwCi0jZGVmaW5lCUNTQ19VX1NPVVJDRV9CQVNFX0VYVF9FWFRFUk5BTAkJCTEKLSNkZWZpbmUJQ1NDX1VfU09VUkNFX0JBU0VfQ1MJCQkJMjYgOiAyNgotI2RlZmluZQlDU0NfVV9TT1VSQ0VfQkFTRV9DU18wCQkJCTAKLSNkZWZpbmUJQ1NDX1VfU09VUkNFX0JBU0VfQ1NfMQkJCQkxCi0jZGVmaW5lCUNTQ19VX1NPVVJDRV9CQVNFX0FERFJFU1MJCQkyNSA6IDAKLQotI2RlZmluZQlDU0NfVl9TT1VSQ0VfQkFTRQkJCQkweDAwMDBEQwotI2RlZmluZQlDU0NfVl9TT1VSQ0VfQkFTRV9FWFQJCQkJMjcgOiAyNwotI2RlZmluZQlDU0NfVl9TT1VSQ0VfQkFTRV9FWFRfTE9DQUwJCQkwCi0jZGVmaW5lCUNTQ19WX1NPVVJDRV9CQVNFX0VYVF9FWFRFUk5BTAkJCTEKLSNkZWZpbmUJQ1NDX1ZfU09VUkNFX0JBU0VfQ1MJCQkJMjYgOiAyNgotI2RlZmluZQlDU0NfVl9TT1VSQ0VfQkFTRV9DU18wCQkJCTAKLSNkZWZpbmUJQ1NDX1ZfU09VUkNFX0JBU0VfQ1NfMQkJCQkxCi0jZGVmaW5lCUNTQ19WX1NPVVJDRV9CQVNFX0FERFJFU1MJCQkyNSA6IDAKLQotI2RlZmluZQlDU0NfU09VUkNFX0RJTUVOU0lPTgkJCQkweDAwMDBFMAotI2RlZmluZQlDU0NfU09VUkNFX0RJTUVOU0lPTl9YCQkJCTMxIDogMTYKLSNkZWZpbmUJQ1NDX1NPVVJDRV9ESU1FTlNJT05fWQkJCQkxNSA6IDAKLQotI2RlZmluZQlDU0NfU09VUkNFX1BJVENICQkJCTB4MDAwMEU0Ci0jZGVmaW5lCUNTQ19TT1VSQ0VfUElUQ0hfWQkJCQkzMSA6IDE2Ci0jZGVmaW5lCUNTQ19TT1VSQ0VfUElUQ0hfVVYJCQkJMTUgOiAwCi0KLSNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OCQkJCQkweDAwMDBFOAotI2RlZmluZQlDU0NfREVTVElOQVRJT05fV1JBUAkJCQkzMSA6IDMxCi0jZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9XUkFQX0RJU0FCTEUJCQkwCi0jZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9XUkFQX0VOQUJMRQkJCTEKLSNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX1gJCQkJMjcgOiAxNgotI2RlZmluZQlDU0NfREVTVElOQVRJT05fWQkJCQkxMSA6IDAKLQotI2RlZmluZQlDU0NfREVTVElOQVRJT05fRElNRU5TSU9OCQkJMHgwMDAwRUMKLSNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX0RJTUVOU0lPTl9YCQkJMzEgOiAxNgotI2RlZmluZQlDU0NfREVTVElOQVRJT05fRElNRU5TSU9OX1kJCQkxNSA6IDAKLQotI2RlZmluZQlDU0NfREVTVElOQVRJT05fUElUQ0gJCQkJMHgwMDAwRjAKLSNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX1BJVENIX1gJCQkJMzEgOiAxNgotI2RlZmluZQlDU0NfREVTVElOQVRJT05fUElUQ0hfWQkJCQkxNSA6IDAKLQotI2RlZmluZQlDU0NfU0NBTEVfRkFDVE9SCQkJCTB4MDAwMEY0Ci0jZGVmaW5lCUNTQ19TQ0FMRV9GQUNUT1JfSE9SSVpPTlRBTAkJCTMxIDogMTYKLSNkZWZpbmUJQ1NDX1NDQUxFX0ZBQ1RPUl9WRVJUSUNBTAkJCTE1IDogMAotCi0jZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9CQVNFCQkJCTB4MDAwMEY4Ci0jZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9CQVNFX0VYVAkJCTI3IDogMjcKLSNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX0JBU0VfRVhUX0xPQ0FMCQkJMAotI2RlZmluZQlDU0NfREVTVElOQVRJT05fQkFTRV9FWFRfRVhURVJOQUwJCTEKLSNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX0JBU0VfQ1MJCQkJMjYgOiAyNgotI2RlZmluZQlDU0NfREVTVElOQVRJT05fQkFTRV9DU18wCQkJMAotI2RlZmluZQlDU0NfREVTVElOQVRJT05fQkFTRV9DU18xCQkJMQotI2RlZmluZQlDU0NfREVTVElOQVRJT05fQkFTRV9BRERSRVNTCQkJMjUgOiAwCi0KLSNkZWZpbmUJQ1NDX0NPTlRST0wJCQkJCTB4MDAwMEZDCi0jZGVmaW5lCUNTQ19DT05UUk9MX1NUQVRVUwkJCQkzMSA6IDMxCi0jZGVmaW5lCUNTQ19DT05UUk9MX1NUQVRVU19TVE9QCQkJCTAKLSNkZWZpbmUJQ1NDX0NPTlRST0xfU1RBVFVTX1NUQVJUCQkJMQotI2RlZmluZQlDU0NfQ09OVFJPTF9TT1VSQ0VfRk9STUFUCQkJMzAgOiAyOAotI2RlZmluZQlDU0NfQ09OVFJPTF9TT1VSQ0VfRk9STUFUX1lVVjQyMgkJMAotI2RlZmluZQlDU0NfQ09OVFJPTF9TT1VSQ0VfRk9STUFUX1lVVjQyMEkJCTEKLSNkZWZpbmUJQ1NDX0NPTlRST0xfU09VUkNFX0ZPUk1BVF9ZVVY0MjAJCTIKLSNkZWZpbmUJQ1NDX0NPTlRST0xfU09VUkNFX0ZPUk1BVF9ZVlU5CQkJMwotI2RlZmluZQlDU0NfQ09OVFJPTF9TT1VSQ0VfRk9STUFUX0lZVTEJCQk0Ci0jZGVmaW5lCUNTQ19DT05UUk9MX1NPVVJDRV9GT1JNQVRfSVlVMgkJCTUKLSNkZWZpbmUJQ1NDX0NPTlRST0xfU09VUkNFX0ZPUk1BVF9SR0I1NjUJCTYKLSNkZWZpbmUJQ1NDX0NPTlRST0xfU09VUkNFX0ZPUk1BVF9SR0I4ODg4CQk3Ci0jZGVmaW5lCUNTQ19DT05UUk9MX0RFU1RJTkFUSU9OX0ZPUk1BVAkJCTI3IDogMjYKLSNkZWZpbmUJQ1NDX0NPTlRST0xfREVTVElOQVRJT05fRk9STUFUX1JHQjU2NQkJMAotI2RlZmluZQlDU0NfQ09OVFJPTF9ERVNUSU5BVElPTl9GT1JNQVRfUkdCODg4OAkJMQotI2RlZmluZQlDU0NfQ09OVFJPTF9IT1JJWk9OVEFMX0ZJTFRFUgkJCTI1IDogMjUKLSNkZWZpbmUJQ1NDX0NPTlRST0xfSE9SSVpPTlRBTF9GSUxURVJfRElTQUJMRQkJMAotI2RlZmluZQlDU0NfQ09OVFJPTF9IT1JJWk9OVEFMX0ZJTFRFUl9FTkFCTEUJCTEKLSNkZWZpbmUJQ1NDX0NPTlRST0xfVkVSVElDQUxfRklMVEVSCQkJMjQgOiAyNAotI2RlZmluZQlDU0NfQ09OVFJPTF9WRVJUSUNBTF9GSUxURVJfRElTQUJMRQkJMAotI2RlZmluZQlDU0NfQ09OVFJPTF9WRVJUSUNBTF9GSUxURVJfRU5BQkxFCQkxCi0jZGVmaW5lCUNTQ19DT05UUk9MX0JZVEVfT1JERVIJCQkJMjMgOiAyMwotI2RlZmluZQlDU0NfQ09OVFJPTF9CWVRFX09SREVSX1lVWVYJCQkwCi0jZGVmaW5lCUNTQ19DT05UUk9MX0JZVEVfT1JERVJfVVlWWQkJCTEKLQotI2RlZmluZQlERV9EQVRBX1BPUlRfNTAxCQkJCTB4MTEwMDAwCi0jZGVmaW5lCURFX0RBVEFfUE9SVF83MTIJCQkJMHg0MDAwMDAKLSNkZWZpbmUJREVfREFUQV9QT1JUXzcyMgkJCQkweDYwMDAKLQotLyogcG9pbnQgdG8gdmlydHVhbCBNZW1vcnkgTWFwIElPIHN0YXJ0aW5nIGFkZHJlc3MgKi8KLWV4dGVybiBjaGFyICpzbXRjX1JlZ0Jhc2VBZGRyZXNzOwotLyogcG9pbnQgdG8gdmlydHVhbCB2aWRlbyBtZW1vcnkgc3RhcnRpbmcgYWRkcmVzcyAqLwotZXh0ZXJuIGNoYXIgKnNtdGNfVlJBTUJhc2VBZGRyZXNzOwotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgc210Y19kZV9idXN5OwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBtZW1SZWFkMzIodW5zaWduZWQgbG9uZyBuT2Zmc2V0KTsKLWV4dGVybiB2b2lkIG1lbVdyaXRlMzIodW5zaWduZWQgbG9uZyBuT2Zmc2V0LCB1bnNpZ25lZCBsb25nIG5EYXRhKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIFNNVENfcmVhZDJEcmVnKHVuc2lnbmVkIGxvbmcgbk9mZnNldCk7Ci0KLS8qIDJEIGZ1bmN0aW9ucyAqLwotZXh0ZXJuIHZvaWQgZGVJbml0KHVuc2lnbmVkIGludCBuTW9kZVdpZHRoLCB1bnNpZ25lZCBpbnQgbk1vZGVIZWlnaHQsCi0JCSAgIHVuc2lnbmVkIGludCBicHApOwotCi1leHRlcm4gdm9pZCBkZVdhaXRGb3JOb3RCdXN5KHZvaWQpOwotCi1leHRlcm4gdm9pZCBkZVZlcnRpY2FsTGluZSh1bnNpZ25lZCBsb25nIGRzdF9iYXNlLAotCXVuc2lnbmVkIGxvbmcgZHN0X3BpdGNoLAotCXVuc2lnbmVkIGxvbmcgblgsCi0JdW5zaWduZWQgbG9uZyBuWSwKLQl1bnNpZ25lZCBsb25nIGRzdF9oZWlnaHQsCi0JdW5zaWduZWQgbG9uZyBuQ29sb3IpOwotCi1leHRlcm4gdm9pZCBkZUhvcml6b250YWxMaW5lKHVuc2lnbmVkIGxvbmcgZHN0X2Jhc2UsCi0JdW5zaWduZWQgbG9uZyBkc3RfcGl0Y2gsCi0JdW5zaWduZWQgbG9uZyBuWCwKLQl1bnNpZ25lZCBsb25nIG5ZLAotCXVuc2lnbmVkIGxvbmcgZHN0X3dpZHRoLAotCXVuc2lnbmVkIGxvbmcgbkNvbG9yKTsKLQotZXh0ZXJuIHZvaWQgZGVMaW5lKHVuc2lnbmVkIGxvbmcgZHN0X2Jhc2UsCi0JdW5zaWduZWQgbG9uZyBkc3RfcGl0Y2gsCi0JdW5zaWduZWQgbG9uZyBuWDEsCi0JdW5zaWduZWQgbG9uZyBuWTEsCi0JdW5zaWduZWQgbG9uZyBuWDIsCi0JdW5zaWduZWQgbG9uZyBuWTIsCi0JdW5zaWduZWQgbG9uZyBuQ29sb3IpOwotCi1leHRlcm4gdm9pZCBkZUZpbGxSZWN0KHVuc2lnbmVkIGxvbmcgZHN0X2Jhc2UsCi0JdW5zaWduZWQgbG9uZyBkc3RfcGl0Y2gsCi0JdW5zaWduZWQgbG9uZyBkc3RfWCwKLQl1bnNpZ25lZCBsb25nIGRzdF9ZLAotCXVuc2lnbmVkIGxvbmcgZHN0X3dpZHRoLAotCXVuc2lnbmVkIGxvbmcgZHN0X2hlaWdodCwKLQl1bnNpZ25lZCBsb25nIG5Db2xvcik7Ci0KLWV4dGVybiB2b2lkIGRlUm90YXRlUGF0dGVybih1bnNpZ25lZCBjaGFyICpwYXR0ZXJuX2RzdGFkZHIsCi0JdW5zaWduZWQgbG9uZyBwYXR0ZXJuX3NyY19hZGRyLAotCXVuc2lnbmVkIGxvbmcgcGF0dGVybl9CUFAsCi0JdW5zaWduZWQgbG9uZyBwYXR0ZXJuX3N0cmlkZSwKLQlpbnQJcGF0dGVyblgsCi0JaW50CXBhdHRlcm5ZKTsKLQotZXh0ZXJuIHZvaWQgZGVDb3B5KHVuc2lnbmVkIGxvbmcgZHN0X2Jhc2UsCi0JdW5zaWduZWQgbG9uZyBkc3RfcGl0Y2gsCi0JdW5zaWduZWQgbG9uZyBkc3RfQlBQLAotCXVuc2lnbmVkIGxvbmcgZHN0X1gsCi0JdW5zaWduZWQgbG9uZyBkc3RfWSwKLQl1bnNpZ25lZCBsb25nIGRzdF93aWR0aCwKLQl1bnNpZ25lZCBsb25nIGRzdF9oZWlnaHQsCi0JdW5zaWduZWQgbG9uZyBzcmNfYmFzZSwKLQl1bnNpZ25lZCBsb25nIHNyY19waXRjaCwKLQl1bnNpZ25lZCBsb25nIHNyY19YLAotCXVuc2lnbmVkIGxvbmcgc3JjX1ksCi0JcFRyYW5zcGFyZW50CXBUcmFuc3AsCi0JdW5zaWduZWQgY2hhciBuUk9QMik7Ci0KLS8qCi0gKiBTeXN0ZW0gbWVtb3J5IHRvIFZpZGVvIG1lbW9yeSBtb25vY2hyb21lIGV4cGFuc2lvbi4KLSAqCi0gKiBTb3VyY2UgaXMgbW9ub2Nocm9tZSBpbWFnZSBpbiBzeXN0ZW0gbWVtb3J5LiAgVGhpcyBmdW5jdGlvbiBleHBhbmRzIHRoZQotICogbW9ub2Nocm9tZSBkYXRhIHRvIGNvbG9yIGltYWdlIGluIHZpZGVvIG1lbW9yeS4KLSAqCi0gKiBAcFNyY2J1ZjogcG9pbnRlciB0byBzdGFydCBvZiBzb3VyY2UgYnVmZmVyIGluIHN5c3RlbSBtZW1vcnkKLSAqIEBzcmNEZWx0YTogUGl0Y2ggdmFsdWUgKGluIGJ5dGVzKSBvZiB0aGUgc291cmNlIGJ1ZmZlciwgK2l2ZSBtZWFucyB0b3AKLSAqIAkJZG93biBhbmQgLWl2ZSBtZWFuIGJ1dHRvbiB1cAotICogQHN0YXJ0Qml0OiBNb25vIGRhdGEgY2FuIHN0YXJ0IGF0IGFueSBiaXQgaW4gYSBieXRlLCB0aGlzIHZhbHVlIHNob3VsZAotICogCQliZSAwIHRvIDcKLSAqIEBkQmFzZTogQWRkcmVzcyBvZiBkZXN0aW5hdGlvbiA6ICBvZmZzZXQgaW4gZnJhbWUgYnVmZmVyCi0gKiBAZFBpdGNoOiBQaXRjaCB2YWx1ZSBvZiBkZXN0aW5hdGlvbiBzdXJmYWNlIGluIEJZVEUKLSAqIEBicHA6IENvbG9yIGRlcHRoIG9mIGRlc3RpbmF0aW9uIHN1cmZhY2UKLSAqIEBkeCwgZHk6IFN0YXJ0aW5nIGNvb3JkaW5hdGUgb2YgZGVzdGluYXRpb24gc3VyZmFjZQotICogQHdpZHRoLCBoZWlnaHQ6IHdpZHRoIGFuZCBoZWlnaHQgb2YgcmVjdGFuZ2UgaW4gcGl4ZWwgdmFsdWUKLSAqIEBmQ29sb3IsYkNvbG9yOiBGb3JlZ3JvdW5kLCBCYWNrZ3JvdW5kIGNvbG9yIChjb3JyZXNwb25kaW5nIHRvIGEgMSwgMCBpbgotICogCXRoZSBtb25vY2hyb21lIGRhdGEpCi0gKiBAcm9wMjogUk9QIHZhbHVlCi0gKi8KLQotZXh0ZXJuIGxvbmcgZGVTeXN0ZW1NZW0yVmlkZW9NZW1Nb25vQmx0KAotCWNvbnN0IGNoYXIgKnBTcmNidWYsCi0JbG9uZyBzcmNEZWx0YSwKLQl1bnNpZ25lZCBsb25nIHN0YXJ0Qml0LAotCXVuc2lnbmVkIGxvbmcgZEJhc2UsCi0JdW5zaWduZWQgbG9uZyBkUGl0Y2gsCi0JdW5zaWduZWQgbG9uZyBicHAsCi0JdW5zaWduZWQgbG9uZyBkeCwgdW5zaWduZWQgbG9uZyBkeSwKLQl1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwKLQl1bnNpZ25lZCBsb25nIGZDb2xvciwKLQl1bnNpZ25lZCBsb25nIGJDb2xvciwKLQl1bnNpZ25lZCBsb25nIHJvcDIpOwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBkZUdldFRyYW5zcGFyZW5jeSh2b2lkKTsKLWV4dGVybiB2b2lkIGRlU2V0UGl4ZWxGb3JtYXQodW5zaWduZWQgbG9uZyBicHApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5jIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5jCmluZGV4IGE0ZjZmNDkuLjljODJhMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmMKQEAgLTQ1LDcgKzQ1LDYgQEAKIHN0cnVjdCBzY3JlZW5faW5mbyBzbXRjX3NjcmVlbl9pbmZvOwogCiAjaW5jbHVkZSAic210Y2ZiLmgiCi0jaW5jbHVkZSAic210YzJkLmgiCiAKICNpZmRlZiBERUJVRwogI2RlZmluZSBzbWRiZyhmb3JtYXQsIGFyZy4uLikJcHJpbnRrKEtFUk5fREVCVUcgZm9ybWF0ICwgIyMgYXJnKQpAQCAtMTIwLDEwICsxMTksNiBAQAogY2hhciBfX2lvbWVtICpzbXRjX1JlZ0Jhc2VBZGRyZXNzOwkvKiBNZW1vcnkgTWFwIElPIHN0YXJ0aW5nIGFkZHJlc3MgKi8KIGNoYXIgX19pb21lbSAqc210Y19WUkFNQmFzZUFkZHJlc3M7CS8qIHZpZGVvIG1lbW9yeSBzdGFydGluZyBhZGRyZXNzICovCiAKLWNoYXIgKnNtdGNfMkRCYXNlQWRkcmVzczsJLyogMkQgZW5naW5lIHN0YXJ0aW5nIGFkZHJlc3MgKi8KLWNoYXIgKnNtdGNfMkRkYXRhcG9ydDsJCS8qIDJEIGRhdGEgcG9ydCBvZmZzZXQgKi8KLXNob3J0IHNtdGNfMkRhY2NlbGVyYXRpb247Ci0KIHN0YXRpYyB1MzIgY29scmVnWzE3XTsKIHN0YXRpYyBzdHJ1Y3QgcGFyX2luZm8gaHc7CS8qIGhhcmR3YXJlIGluZm9ybWF0aW9uICovCiAKQEAgLTEzNSwxNiArMTMwLDYgQEAKIAogI2RlZmluZSBudW1TTVRDY2hpcElEcyAoc2l6ZW9mKHNtdGNfQ2hpcElEcykgLyBzaXplb2YodTE2KSkKIAotdm9pZCBkZVdhaXRGb3JOb3RCdXN5KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBpID0gMHgxMDAwMDAwOwotCXdoaWxlIChpLS0pIHsKLQkJaWYgKChzbXRjX3NlcXIoMHgxNikgJiAweDE4KSA9PSAweDEwKQotCQkJYnJlYWs7Ci0JfQotCXNtdGNfZGVfYnVzeSA9IDA7Ci19Ci0KIHN0YXRpYyB2b2lkIHNtNzEyX3NldF90aW1pbmcoc3RydWN0IHNtdGNmYl9pbmZvICpzZmIsCiAJCQkgICAgIHN0cnVjdCBwYXJfaW5mbyAqcHBhcl9pbmZvKQogewpAQCAtMzI0LDcgKzMwOSw3IEBACiAJcmV0dXJuIGNoYW4gPDwgYmYtPm9mZnNldDsKIH0KIAotc3RhdGljIGludCBzbXRjZmJfYmxhbmsoaW50IGJsYW5rX21vZGUsIHN0cnVjdCBmYl9pbmZvICppbmZvKQorc3RhdGljIGludCBjZmJfYmxhbmsoaW50IGJsYW5rX21vZGUsIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCS8qIGNsZWFyIERQTVMgc2V0dGluZyAqLwogCXN3aXRjaCAoYmxhbmtfbW9kZSkgewpAQCAtNjIyLDkzICs2MDcsMTMgQEAKIH0KICNlbmRpZgkvKiAhIF9fQklHX0VORElBTiAqLwogCi0jaW5jbHVkZSAic210YzJkLmMiCi0KLXZvaWQgc210Y2ZiX2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKmFyZWEpCi17Ci0Jc3RydWN0IHBhcl9pbmZvICpwID0gKHN0cnVjdCBwYXJfaW5mbyAqKWluZm8tPnBhcjsKLQotCWlmIChzbXRjXzJEYWNjZWxlcmF0aW9uKSB7Ci0JCWlmICghYXJlYS0+d2lkdGggfHwgIWFyZWEtPmhlaWdodCkKLQkJCXJldHVybjsKLQotCQlkZUNvcHkocC0+QmFzZUFkZHJlc3NJblZSQU0sIDAsIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCwKLQkJICAgICAgIGFyZWEtPmR4LCBhcmVhLT5keSwgYXJlYS0+d2lkdGgsIGFyZWEtPmhlaWdodCwKLQkJICAgICAgIHAtPkJhc2VBZGRyZXNzSW5WUkFNLCAwLCBhcmVhLT5zeCwgYXJlYS0+c3ksIDAsIDB4Qyk7Ci0KLQl9IGVsc2UKLQkJY2ZiX2NvcHlhcmVhKGluZm8sIGFyZWEpOwotfQotCi12b2lkIHNtdGNmYl9maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWN0KQotewotCXN0cnVjdCBwYXJfaW5mbyAqcCA9IChzdHJ1Y3QgcGFyX2luZm8gKilpbmZvLT5wYXI7Ci0KLQlpZiAoc210Y18yRGFjY2VsZXJhdGlvbikgewotCQlpZiAoIXJlY3QtPndpZHRoIHx8ICFyZWN0LT5oZWlnaHQpCi0JCQlyZXR1cm47Ci0JCWlmIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPj0gMjQpCi0JCQlkZUZpbGxSZWN0KHAtPkJhc2VBZGRyZXNzSW5WUkFNLCAwLCByZWN0LT5keCAqIDMsCi0JCQkJICAgcmVjdC0+ZHkgKiAzLCByZWN0LT53aWR0aCAqIDMsIHJlY3QtPmhlaWdodCwKLQkJCQkgICByZWN0LT5jb2xvcik7Ci0JCWVsc2UKLQkJCWRlRmlsbFJlY3QocC0+QmFzZUFkZHJlc3NJblZSQU0sIDAsIHJlY3QtPmR4LCByZWN0LT5keSwKLQkJCQkgICByZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0LCByZWN0LT5jb2xvcik7Ci0JfSBlbHNlCi0JCWNmYl9maWxscmVjdChpbmZvLCByZWN0KTsKLX0KLQotdm9pZCBzbXRjZmJfaW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKQotewotCXN0cnVjdCBwYXJfaW5mbyAqcCA9IChzdHJ1Y3QgcGFyX2luZm8gKilpbmZvLT5wYXI7Ci0JdTMyIGJnX2NvbCA9IDAsIGZnX2NvbCA9IDA7Ci0KLQlpZiAoKHNtdGNfMkRhY2NlbGVyYXRpb24pICYmIChpbWFnZS0+ZGVwdGggPT0gMSkpIHsKLQkJaWYgKHNtdGNfZGVfYnVzeSkKLQkJCWRlV2FpdEZvck5vdEJ1c3koKTsKLQotCQlzd2l0Y2ggKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkgewotCQljYXNlIDg6Ci0JCQliZ19jb2wgPSBpbWFnZS0+YmdfY29sb3I7Ci0JCQlmZ19jb2wgPSBpbWFnZS0+ZmdfY29sb3I7Ci0JCQlicmVhazsKLQkJY2FzZSAxNjoKLQkJCWJnX2NvbCA9Ci0JCQkgICAgKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbaW1hZ2UtPmJnX2NvbG9yXTsKLQkJCWZnX2NvbCA9Ci0JCQkgICAgKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbaW1hZ2UtPmZnX2NvbG9yXTsKLQkJCWJyZWFrOwotCQljYXNlIDMyOgotCQkJYmdfY29sID0KLQkJCSAgICAoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+YmdfY29sb3JdOwotCQkJZmdfY29sID0KLQkJCSAgICAoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+ZmdfY29sb3JdOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlkZVN5c3RlbU1lbTJWaWRlb01lbU1vbm9CbHQoCi0JCQlpbWFnZS0+ZGF0YSwKLQkJCWltYWdlLT53aWR0aCAvIDgsCi0JCQkwLAotCQkJcC0+QmFzZUFkZHJlc3NJblZSQU0sCi0JCQkwLAotCQkJMCwKLQkJCWltYWdlLT5keCwgaW1hZ2UtPmR5LAotCQkJaW1hZ2UtPndpZHRoLCBpbWFnZS0+aGVpZ2h0LAotCQkJZmdfY29sLCBiZ19jb2wsCi0JCQkweDBDKTsKLQotCX0gZWxzZQotCQljZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKLX0KLQogc3RhdGljIHN0cnVjdCBmYl9vcHMgc210Y2ZiX29wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuZmJfc2V0Y29scmVnID0gc210Y19zZXRjb2xyZWcsCi0JLmZiX2JsYW5rID0gc210Y2ZiX2JsYW5rLAotCS5mYl9maWxscmVjdCA9IHNtdGNmYl9maWxscmVjdCwKLQkuZmJfaW1hZ2VibGl0ID0gc210Y2ZiX2ltYWdlYmxpdCwKLQkuZmJfY29weWFyZWEgPSBzbXRjZmJfY29weWFyZWEsCisJLmZiX2JsYW5rID0gY2ZiX2JsYW5rLAorCS5mYl9maWxscmVjdCA9IGNmYl9maWxscmVjdCwKKwkuZmJfaW1hZ2VibGl0ID0gY2ZiX2ltYWdlYmxpdCwKKwkuZmJfY29weWFyZWEgPSBjZmJfY29weWFyZWEsCiAjaWZkZWYgX19CSUdfRU5ESUFOCiAJLmZiX3JlYWQgPSBzbXRjZmJfcmVhZCwKIAkuZmJfd3JpdGUgPSBzbXRjZmJfd3JpdGUsCkBAIC03NzIsMTIgKzY3Nyw2IEBACiAJaHcuaGVpZ2h0ID0gc2ZiLT5mYi52YXIueXJlczsKIAlody5oeiA9IDYwOwogCXNtdGNfc2V0X3RpbWluZyhzZmIsICZodyk7Ci0JaWYgKHNtdGNfMkRhY2NlbGVyYXRpb24pIHsKLQkJcHJpbnRrKCIyRCBhY2NlbGVyYXRpb24gZW5hYmxlZCFcbiIpOwotCQkvKiBJbml0IHNtdGMgZHJhd2luZyBlbmdpbmUgKi8KLQkJZGVJbml0KHNmYi0+ZmIudmFyLnhyZXMsIHNmYi0+ZmIudmFyLnlyZXMsCi0JCQkJc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwpOwotCX0KIH0KIAogLyoKQEAgLTEwMDQsOSArOTAzLDcgQEAKICNlbmRpZgogCQlody5tX3BNTUlPID0gKHNtdGNfUmVnQmFzZUFkZHJlc3MgPQogCQkgICAgc210Y19WUkFNQmFzZUFkZHJlc3MgKyAweDAwNzAwMDAwKTsKLQkJc210Y18yREJhc2VBZGRyZXNzID0gKGh3Lm1fcERQUiA9Ci0JCSAgICBzbXRjX1ZSQU1CYXNlQWRkcmVzcyArIDB4MDA0MDgwMDApOwotCQlzbXRjXzJEZGF0YXBvcnQgPSBzbXRjX1ZSQU1CYXNlQWRkcmVzcyArIERFX0RBVEFfUE9SVF83MTI7CisJCWh3Lm1fcERQUiA9IHNtdGNfVlJBTUJhc2VBZGRyZXNzICsgMHgwMDQwODAwMDsKIAkJaHcubV9wVlBSID0gaHcubV9wTEZCICsgMHgwMDQwYzAwMDsKICNpZmRlZiBfX0JJR19FTkRJQU4KIAkJaWYgKHNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsID09IDMyKSB7CkBAIC0xMDM1LDI3ICs5MzIsMjEgQEAKIAkJaWYgKHNmYi0+ZmIudmFyLmJpdHNfcGVyX3BpeGVsID09IDMyKQogCQkJc210Y19zZXF3KDB4MTcsIDB4MzApOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0ZCX1NNN1hYX0FDQ0VMCi0JCXNtdGNfMkRhY2NlbGVyYXRpb24gPSAxOwotI2VuZGlmCiAJCWJyZWFrOwogCWNhc2UgMHg3MjA6CiAJCXNmYi0+ZmIuZml4Lm1taW9fc3RhcnQgPSBwRnJhbWVidWZmZXJQaHlzaWNhbDsKIAkJc2ZiLT5mYi5maXgubW1pb19sZW4gPSAweDAwMjAwMDAwOwogCQlzbWVtX3NpemUgPSBTTTcyMl9WSURFT01FTU9SWVNJWkU7Ci0JCXNtdGNfMkRCYXNlQWRkcmVzcyA9IChody5tX3BEUFIgPQotCQkgICAgaW9yZW1hcChwRnJhbWVidWZmZXJQaHlzaWNhbCwgMHgwMGEwMDAwMCkpOworCQlody5tX3BEUFIgPSBpb3JlbWFwKHBGcmFtZWJ1ZmZlclBoeXNpY2FsLCAweDAwYTAwMDAwKTsKIAkJaHcubV9wTEZCID0gKHNtdGNfVlJBTUJhc2VBZGRyZXNzID0KLQkJICAgIHNtdGNfMkRCYXNlQWRkcmVzcyArIDB4MDAyMDAwMDApOworCQkgICAgaHcubV9wRFBSICsgMHgwMDIwMDAwMCk7CiAJCWh3Lm1fcE1NSU8gPSAoc210Y19SZWdCYXNlQWRkcmVzcyA9Ci0JCSAgICBzbXRjXzJEQmFzZUFkZHJlc3MgKyAweDAwMGMwMDAwKTsKLQkJc210Y18yRGRhdGFwb3J0ID0gc210Y18yREJhc2VBZGRyZXNzICsgREVfREFUQV9QT1JUXzcyMjsKLQkJaHcubV9wVlBSID0gc210Y18yREJhc2VBZGRyZXNzICsgMHg4MDA7CisJCSAgICBody5tX3BEUFIgKyAweDAwMGMwMDAwKTsKKwkJaHcubV9wVlBSID0gaHcubV9wRFBSICsgMHg4MDA7CiAKIAkJc210Y19zZXF3KDB4NjIsIDB4ZmYpOwogCQlzbXRjX3NlcXcoMHg2YSwgMHgwZCk7CiAJCXNtdGNfc2VxdygweDZiLCAweDAyKTsKLQkJc210Y18yRGFjY2VsZXJhdGlvbiA9IDA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0lORk8KQEAgLTExMDMsNyArOTk0LDcgQEAKIAogCiAvKiBKYXNvbiAoMDgvMTEvMjAwOSkgUENJX0RSViB3cmFwcGVyIGVzc2VudGlhbCBzdHJ1Y3RzICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc210Y2ZiX3BjaV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNtdGNmYl9wY2lfdGFibGVbXSA9IHsKIAl7MHgxMjZmLCAweDcxMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJezB4MTI2ZiwgMHg3MTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAogCXsweDEyNmYsIDB4NzIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91ZGxmYi9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3VkbGZiL0tjb25maWcKaW5kZXggNjQxNjkyZC4uNjViZDVkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VkbGZiL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VkbGZiL0tjb25maWcKQEAgLTEsOCArMSwxNCBAQAogY29uZmlnIEZCX1VETAogCXRyaXN0YXRlICJEaXNwbGF5bGluayBVU0IgRnJhbWVidWZmZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEZCICYmIFVTQgorCXNlbGVjdCBGQl9NT0RFX0hFTFBFUlMKKwlzZWxlY3QgRkJfU1lTX0ZJTExSRUNUCisJc2VsZWN0IEZCX1NZU19DT1BZQVJFQQorCXNlbGVjdCBGQl9TWVNfSU1BR0VCTElUCisJc2VsZWN0IEZCX1NZU19GT1BTCisJc2VsZWN0IEZCX0RFRkVSUkVEX0lPCiAJLS0taGVscC0tLQotCSAgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZHJpdmVyIGZvciBEaXNwbGF5TGluayBVU0IgZGV2aWNlcwotCSAgdGhhdCBwcm92aWRlcyBhIGZyYW1lYnVmZmVyIGRldmljZS4gIEEgbm9ybWFsIGZyYW1lYnVmZmVyIGNhbgotCSAgYmUgdXNlZCB3aXRoIHRoaXMgZHJpdmVyLCBvciB4b3JnIGNhbiBiZSBydW4gb24gdGhlIGRldmljZQotCSAgdXNpbmcgaXQuCisJICBUaGlzIGlzIGEga2VybmVsIGZyYW1lYnVmZmVyIGRyaXZlciBmb3IgRGlzcGxheUxpbmsgVVNCIGRldmljZXMuCisJICBTdXBwb3J0cyBmYmRldiBjbGllbnRzIGxpa2UgeGY4Ni12aWRlby1mYmRldiwga2RyaXZlLCBmYmksIGFuZAorCSAgbXBsYXllciAtdm8gZmJkZXYuIFN1cHBvcnRzIGFsbCBVU0IgMi4wIGVyYSBEaXNwbGF5TGluayBkZXZpY2VzLgorCSAgVG8gY29tcGlsZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSBuYW1lIGlzIHVkbGZiLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VkbGZiL3VkbGZiLmMgYi9kcml2ZXJzL3N0YWdpbmcvdWRsZmIvdWRsZmIuYwppbmRleCBmNTQxNmFmLi44ZjYyMjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdWRsZmIvdWRsZmIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdWRsZmIvdWRsZmIuYwpAQCAtMSwxNyArMSwyMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgRExGQiBLZXJuZWwgRHJpdmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMC4yICh1ZGxmYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgKEMpIDIwMDkgUm9iZXJ0byBEZSBJb3JpcyA8cm9iZXJ0b0B1bmJpdC5pdD4gICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTHYyLiBTZWUgQ09QWUlORyBpbiB0aGUgcGFja2FnZS4gICAgKgotICogQmFzZWQgb24gdGhlIGFtYXppbmcgd29yayBvZiBGbG9yaWFuIEVjaHRsZXIgYW5kIGxpYmRsbyAwLjEgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogMTAuMDYuMDkgcmVsZWFzZSAwLjIuMyAoZWRpZCBpb2N0bCwgZmFsbGJhY2sgZm9yIHVuc3VwcG9ydGVkIG1vZGVzKSAgICAgICAqCi0gKiAwNS4wNi4wOSByZWxlYXNlIDAuMi4yIChyZWFsIHNjcmVlbiBibGFua2luZywgcmxlIGNvbXByZXNzaW9uLCBkb3VibGUgYnVmZmVyKSAqCi0gKiAzMS4wNS4wOSByZWxlYXNlIDAuMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqIDIyLjA1LjA5IEZpcnN0IHB1YmxpYyAodWdseSkgcmVsZWFzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIHVkbGZiLmMgLS0gRnJhbWVidWZmZXIgZHJpdmVyIGZvciBEaXNwbGF5TGluayBVU0IgY29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSb2JlcnRvIERlIElvcmlzIDxyb2JlcnRvQHVuYml0Lml0PgorICogQ29weXJpZ2h0IChDKSAyMDA5IEpheWEgS3VtYXIgPGpheWFrdW1hci5sa21sQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBCZXJuaWUgVGhvbXBzb24gPGJlcm5pZUBwbHVnYWJsZS5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdjIuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogTGF5b3V0IGlzIGJhc2VkIG9uIHNrZWxldG9uZmIgYnkgSmFtZXMgU2ltbW9ucyBhbmQgR2VlcnQgVXl0dGVyaG9ldmVuLAorICogdXNiLXNrZWxldG9uIGJ5IEdyZWdLSC4KKyAqCisgKiBEZXZpY2Utc3BlY2lmaWMgcG9ydGlvbnMgYmFzZWQgb24gaW5mb3JtYXRpb24gZnJvbSBEaXNwbGF5bGluaywgd2l0aCB3b3JrCisgKiBmcm9tIEZsb3JpYW4gRWNodGxlciwgSGVucmlrIEJqZXJyZWdhYXJkIFBlZGVyc2VuLCBhbmQgb3RoZXJzLgorICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTIwLDYwICsyMywyODIgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAjaW5jbHVkZSAidWRsZmIuaCIKIAotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiRExGQiAwLjIiCitzdGF0aWMgc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvIGRsZmJfZml4ID0geworCS5pZCA9ICAgICAgICAgICAidWRsZmIiLAorCS50eXBlID0gICAgICAgICBGQl9UWVBFX1BBQ0tFRF9QSVhFTFMsCisJLnZpc3VhbCA9ICAgICAgIEZCX1ZJU1VBTF9UUlVFQ09MT1IsCisJLnhwYW5zdGVwID0gICAgIDAsCisJLnlwYW5zdGVwID0gICAgIDAsCisJLnl3cmFwc3RlcCA9ICAgIDAsCisJLmFjY2VsID0gICAgICAgIEZCX0FDQ0VMX05PTkUsCit9OwogCi0vKiBtZW1vcnkgZnVuY3Rpb25zIHRha2VuIGZyb20gdmZiICovCitzdGF0aWMgY29uc3QgdTMyIHVkbGZiX2luZm9fZmxhZ3MgPSBGQklORk9fREVGQVVMVCB8IEZCSU5GT19SRUFEU19GQVNUIHwKKyNpZmRlZiBGQklORk9fVklSVEZCCisJCUZCSU5GT19WSVJURkIgfAorI2VuZGlmCisJCUZCSU5GT19IV0FDQ0VMX0lNQUdFQkxJVCB8IEZCSU5GT19IV0FDQ0VMX0ZJTExSRUNUIHwKKwkJRkJJTkZPX0hXQUNDRUxfQ09QWUFSRUEgfCBGQklORk9fTUlTQ19BTFdBWVNfU0VUUEFSOwogCi1zdGF0aWMgdm9pZCAqcnZtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQorLyoKKyAqIFRoZXJlIGFyZSBtYW55IERpc3BsYXlMaW5rLWJhc2VkIHByb2R1Y3RzLCBhbGwgd2l0aCB1bmlxdWUgUElEcy4gV2UgYXJlIGFibGUKKyAqIHRvIHN1cHBvcnQgYWxsIHZvbHVtZSBvbmVzIChjaXJjYSAyMDA5KSB3aXRoIGEgc2luZ2xlIGRyaXZlciwgc28gd2UgbWF0Y2gKKyAqIGdsb2JhbGx5IG9uIFZJRC4gVE9ETzogUHJvYmUoKSBuZWVkcyB0byBkZXRlY3Qgd2hlbiB3ZSBtaWdodCBiZSBydW5uaW5nCisgKiAiZnV0dXJlIiBjaGlwcywgYW5kIGJhaWwgb24gdGhvc2UsIHNvIGEgY29tcGF0aWJsZSBkcml2ZXIgY2FuIG1hdGNoLgorICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKKwl7LmlkVmVuZG9yID0gMHgxN2U5LCAubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX1ZFTkRPUix9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CisKKyNpZm5kZWYgQ09ORklHX0ZCX0RFRkVSUkVEX0lPCisjd2FybmluZyBtZXNzYWdlICJrZXJuZWwgRkJfREVGRkVSUkVEX0lPIG9wdGlvbiB0byBzdXBwb3J0IGdlbmVyaWMgZmJkZXYgYXBwcyIKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19GQl9TWVNfSU1BR0VCTElUCisjaWZuZGVmIENPTkZJR19GQl9TWVNfSU1BR0VCTElUX01PRFVMRQorI3dhcm5pbmcgbWVzc2FnZSAiRkJfU1lTXyogaW4ga2VybmVsIG9yIG1vZHVsZSBvcHRpb24gdG8gc3VwcG9ydCBmYiBjb25zb2xlIgorI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfRkJfTU9ERV9IRUxQRVJTCisjd2FybmluZyBtZXNzYWdlICJrZXJuZWwgRkJfTU9ERV9IRUxQRVJTIHJlcXVpcmVkLiBFeHBlY3QgYnVpbGQgYnJlYWsiCisjZW5kaWYKKworLyogZGxmYiBrZWVwcyBhIGxpc3Qgb2YgdXJicyBmb3IgZWZmaWNpZW50IGJ1bGsgdHJhbnNmZXJzICovCitzdGF0aWMgdm9pZCBkbGZiX3VyYl9jb21wbGV0aW9uKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgc3RydWN0IHVyYiAqZGxmYl9nZXRfdXJiKHN0cnVjdCBkbGZiX2RhdGEgKmRldik7CitzdGF0aWMgaW50IGRsZmJfc3VibWl0X3VyYihzdHJ1Y3QgZGxmYl9kYXRhICpkZXYsIHN0cnVjdCB1cmIgKiB1cmIsIHNpemVfdCBsZW4pOworc3RhdGljIGludCBkbGZiX2FsbG9jX3VyYl9saXN0KHN0cnVjdCBkbGZiX2RhdGEgKmRldiwgaW50IGNvdW50LCBzaXplX3Qgc2l6ZSk7CitzdGF0aWMgdm9pZCBkbGZiX2ZyZWVfdXJiX2xpc3Qoc3RydWN0IGRsZmJfZGF0YSAqZGV2KTsKKworLyogb3RoZXIgc3ltYm9scyB3aXRoIGRlcGVuZGVudHMgKi8KKyNpZmRlZiBDT05GSUdfRkJfREVGRVJSRURfSU8KK3N0YXRpYyBzdHJ1Y3QgZmJfZGVmZXJyZWRfaW8gZGxmYl9kZWZpbzsKKyNlbmRpZgorCisvKgorICogQWxsIERpc3BsYXlMaW5rIGJ1bGsgb3BlcmF0aW9ucyBzdGFydCB3aXRoIDB4QUYsIGZvbGxvd2VkIGJ5IHNwZWNpZmljIGNvZGUKKyAqIEFsbCBvcGVyYXRpb25zIGFyZSB3cml0dGVuIHRvIGJ1ZmZlcnMgd2hpY2ggdGhlbiBsYXRlciBnZXQgc2VudCB0byBkZXZpY2UKKyAqLworc3RhdGljIGNoYXIgKmRsZmJfc2V0X3JlZ2lzdGVyKGNoYXIgKmJ1ZiwgdTggcmVnLCB1OCB2YWwpCiB7Ci0Jdm9pZCAqbWVtOwotCXVuc2lnbmVkIGxvbmcgYWRyOwotCi0Jc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7Ci0JbWVtID0gdm1hbGxvY18zMihzaXplKTsKLQlpZiAoIW1lbSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQltZW1zZXQobWVtLCAwLCBzaXplKTsJLyogQ2xlYXIgdGhlIHJhbSBvdXQsIG5vIGp1bmsgdG8gdGhlIHVzZXIgKi8KLQlhZHIgPSAodW5zaWduZWQgbG9uZyltZW07Ci0Jd2hpbGUgKHNpemUgPiAwKSB7Ci0JCVNldFBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKLQkJYWRyICs9IFBBR0VfU0laRTsKLQkJc2l6ZSAtPSBQQUdFX1NJWkU7Ci0JfQotCi0JcmV0dXJuIG1lbTsKKwkqYnVmKysgPSAweEFGOworCSpidWYrKyA9IDB4MjA7CisJKmJ1ZisrID0gcmVnOworCSpidWYrKyA9IHZhbDsKKwlyZXR1cm4gYnVmOwogfQogCi1zdGF0aWMgdm9pZCBydmZyZWUodm9pZCAqbWVtLCB1bnNpZ25lZCBsb25nIHNpemUpCitzdGF0aWMgY2hhciAqZGxmYl92aWRyZWdfbG9jayhjaGFyICpidWYpCiB7Ci0JdW5zaWduZWQgbG9uZyBhZHI7Ci0KLQlpZiAoIW1lbSkKLQkJcmV0dXJuOwotCi0JYWRyID0gKHVuc2lnbmVkIGxvbmcpbWVtOwotCXdoaWxlICgobG9uZylzaXplID4gMCkgewotCQlDbGVhclBhZ2VSZXNlcnZlZCh2bWFsbG9jX3RvX3BhZ2UoKHZvaWQgKilhZHIpKTsKLQkJYWRyICs9IFBBR0VfU0laRTsKLQkJc2l6ZSAtPSBQQUdFX1NJWkU7Ci0JfQotCXZmcmVlKG1lbSk7CisJcmV0dXJuIGRsZmJfc2V0X3JlZ2lzdGVyKGJ1ZiwgMHhGRiwgMHgwMCk7CiB9CiAKLXN0YXRpYyBpbnQgZGxmYl9tbWFwKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3N0YXRpYyBjaGFyICpkbGZiX3ZpZHJlZ191bmxvY2soY2hhciAqYnVmKQoreworCXJldHVybiBkbGZiX3NldF9yZWdpc3RlcihidWYsIDB4RkYsIDB4RkYpOworfQorCisvKgorICogT24vT2ZmIGZvciBkcml2aW5nIHRoZSBEaXNwbGF5TGluayBmcmFtZWJ1ZmZlciB0byB0aGUgZGlzcGxheQorICovCitzdGF0aWMgY2hhciAqZGxmYl9lbmFibGVfaHZzeW5jKGNoYXIgKmJ1ZiwgYm9vbCBlbmFibGUpCit7CisJaWYgKGVuYWJsZSkKKwkJcmV0dXJuIGRsZmJfc2V0X3JlZ2lzdGVyKGJ1ZiwgMHgxRiwgMHgwMCk7CisJZWxzZQorCQlyZXR1cm4gZGxmYl9zZXRfcmVnaXN0ZXIoYnVmLCAweDFGLCAweDAxKTsKK30KKworc3RhdGljIGNoYXIgKmRsZmJfc2V0X2NvbG9yX2RlcHRoKGNoYXIgKmJ1ZiwgdTggc2VsZWN0aW9uKQoreworCXJldHVybiBkbGZiX3NldF9yZWdpc3RlcihidWYsIDB4MDAsIHNlbGVjdGlvbik7Cit9CisKK3N0YXRpYyBjaGFyICpkbGZiX3NldF9iYXNlMTZicHAoY2hhciAqd3JwdHIsIHUzMiBiYXNlKQoreworCS8qIHRoZSBiYXNlIHBvaW50ZXIgaXMgMTYgYml0cyB3aWRlLCAweDIwIGlzIGhpIGJ5dGUuICovCisJd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcih3cnB0ciwgMHgyMCwgYmFzZSA+PiAxNik7CisJd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcih3cnB0ciwgMHgyMSwgYmFzZSA+PiA4KTsKKwlyZXR1cm4gZGxmYl9zZXRfcmVnaXN0ZXIod3JwdHIsIDB4MjIsIGJhc2UpOworfQorCisvKgorICogRGlzcGxheUxpbmsgSFcgaGFzIHNlcGFyYXRlIDE2YnBwIGFuZCA4YnBwIGZyYW1lYnVmZmVycy4KKyAqIEluIDI0YnBwIG1vZGVzLCB0aGUgbG93IDMyMyBSR0IgYml0cyBnbyBpbiB0aGUgOGJwcCBmcmFtZWJ1ZmZlcgorICovCitzdGF0aWMgY2hhciAqZGxmYl9zZXRfYmFzZThicHAoY2hhciAqd3JwdHIsIHUzMiBiYXNlKQoreworCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXIod3JwdHIsIDB4MjYsIGJhc2UgPj4gMTYpOworCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXIod3JwdHIsIDB4MjcsIGJhc2UgPj4gOCk7CisJcmV0dXJuIGRsZmJfc2V0X3JlZ2lzdGVyKHdycHRyLCAweDI4LCBiYXNlKTsKK30KKworc3RhdGljIGNoYXIgKmRsZmJfc2V0X3JlZ2lzdGVyXzE2KGNoYXIgKndycHRyLCB1OCByZWcsIHUxNiB2YWx1ZSkKK3sKKwl3cnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyKHdycHRyLCByZWcsIHZhbHVlID4+IDgpOworCXJldHVybiBkbGZiX3NldF9yZWdpc3Rlcih3cnB0ciwgcmVnKzEsIHZhbHVlKTsKK30KKworLyoKKyAqIFRoaXMgaXMga2luZCBvZiB3ZWlyZCBiZWNhdXNlIHRoZSBjb250cm9sbGVyIHRha2VzIHNvbWUKKyAqIHJlZ2lzdGVyIHZhbHVlcyBpbiBhIGRpZmZlcmVudCBieXRlIG9yZGVyIHRoYW4gb3RoZXIgcmVnaXN0ZXJzLgorICovCitzdGF0aWMgY2hhciAqZGxmYl9zZXRfcmVnaXN0ZXJfMTZiZShjaGFyICp3cnB0ciwgdTggcmVnLCB1MTYgdmFsdWUpCit7CisJd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcih3cnB0ciwgcmVnLCB2YWx1ZSk7CisJcmV0dXJuIGRsZmJfc2V0X3JlZ2lzdGVyKHdycHRyLCByZWcrMSwgdmFsdWUgPj4gOCk7Cit9CisKKy8qCisgKiBMRlNSIGlzIGxpbmVhciBmZWVkYmFjayBzaGlmdCByZWdpc3Rlci4gVGhlIHJlYXNvbiB3ZSBoYXZlIHRoaXMgaXMKKyAqIGJlY2F1c2UgdGhlIGRpc3BsYXkgY29udHJvbGxlciBuZWVkcyB0byBtaW5pbWl6ZSB0aGUgY2xvY2sgZGVwdGggb2YKKyAqIHZhcmlvdXMgY291bnRlcnMgdXNlZCBpbiB0aGUgZGlzcGxheSBwYXRoLiBTbyB0aGlzIGNvZGUgcmV2ZXJzZXMgdGhlCisgKiBwcm92aWRlZCB2YWx1ZSBpbnRvIHRoZSBsZnNyMTYgdmFsdWUgYnkgY291bnRpbmcgYmFja3dhcmRzIHRvIGdldAorICogdGhlIHZhbHVlIHRoYXQgbmVlZHMgdG8gYmUgc2V0IGluIHRoZSBoYXJkd2FyZSBjb21wYXJhdG9yIHRvIGdldCB0aGUKKyAqIHNhbWUgYWN0dWFsIGNvdW50LiBUaGlzIG1ha2VzIHNlbnNlIG9uY2UgeW91IHJlYWQgYWJvdmUgYSBjb3VwbGUgb2YKKyAqIHRpbWVzIGFuZCB0aGluayBhYm91dCBpdCBmcm9tIGEgaGFyZHdhcmUgcGVyc3BlY3RpdmUuCisgKi8KK3N0YXRpYyB1MTYgZGxmYl9sZnNyMTYodTE2IGFjdHVhbF9jb3VudCkKK3sKKwl1MzIgbHYgPSAweEZGRkY7IC8qIFRoaXMgaXMgdGhlIGxmc3IgdmFsdWUgdGhhdCB0aGUgaHcgc3RhcnRzIHdpdGggKi8KKworCXdoaWxlIChhY3R1YWxfY291bnQtLSkgeworCQlsdiA9CSAoKGx2IDw8IDEpIHwKKwkJCSgoKGx2ID4+IDE1KSBeIChsdiA+PiA0KSBeIChsdiA+PiAyKSBeIChsdiA+PiAxKSkgJiAxKSkKKwkJCSYgMHhGRkZGOworCX0KKworCXJldHVybiAodTE2KSBsdjsKK30KKworLyoKKyAqIFRoaXMgZG9lcyBMRlNSIGNvbnZlcnNpb24gb24gdGhlIHZhbHVlIHRoYXQgaXMgdG8gYmUgd3JpdHRlbi4KKyAqIFNlZSBMRlNSIGV4cGxhbmF0aW9uIGFib3ZlIGZvciBtb3JlIGRldGFpbC4KKyAqLworc3RhdGljIGNoYXIgKmRsZmJfc2V0X3JlZ2lzdGVyX2xmc3IxNihjaGFyICp3cnB0ciwgdTggcmVnLCB1MTYgdmFsdWUpCit7CisJcmV0dXJuIGRsZmJfc2V0X3JlZ2lzdGVyXzE2KHdycHRyLCByZWcsIGRsZmJfbGZzcjE2KHZhbHVlKSk7Cit9CisKKy8qCisgKiBUaGlzIHRha2VzIGEgc3RhbmRhcmQgZmJkZXYgc2NyZWVuaW5mbyBzdHJ1Y3QgYW5kIGFsbCBvZiBpdHMgbW9uaXRvciBtb2RlCisgKiBkZXRhaWxzIGFuZCBjb252ZXJ0cyB0aGVtIGludG8gdGhlIERpc3BsYXlMaW5rIGVxdWl2YWxlbnQgcmVnaXN0ZXIgY29tbWFuZHMuCisgKi8KK3N0YXRpYyBjaGFyICpkbGZiX3NldF92aWRfY21kcyhjaGFyICp3cnB0ciwgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpCit7CisJdTE2IHhkcywgeWRzOworCXUxNiB4ZGUsIHlkZTsKKwl1MTYgeWVjOworCisJLyogeCBkaXNwbGF5IHN0YXJ0ICovCisJeGRzID0gdmFyLT5sZWZ0X21hcmdpbiArIHZhci0+aHN5bmNfbGVuOworCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXJfbGZzcjE2KHdycHRyLCAweDAxLCB4ZHMpOworCS8qIHggZGlzcGxheSBlbmQgKi8KKwl4ZGUgPSB4ZHMgKyB2YXItPnhyZXM7CisJd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcl9sZnNyMTYod3JwdHIsIDB4MDMsIHhkZSk7CisKKwkvKiB5IGRpc3BsYXkgc3RhcnQgKi8KKwl5ZHMgPSB2YXItPnVwcGVyX21hcmdpbiArIHZhci0+dnN5bmNfbGVuOworCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXJfbGZzcjE2KHdycHRyLCAweDA1LCB5ZHMpOworCS8qIHkgZGlzcGxheSBlbmQgKi8KKwl5ZGUgPSB5ZHMgKyB2YXItPnlyZXM7CisJd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcl9sZnNyMTYod3JwdHIsIDB4MDcsIHlkZSk7CisKKwkvKiB4IGVuZCBjb3VudCBpcyBhY3RpdmUgKyBibGFua2luZyAtIDEgKi8KKwl3cnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyX2xmc3IxNih3cnB0ciwgMHgwOSwKKwkJCXhkZSArIHZhci0+cmlnaHRfbWFyZ2luIC0gMSk7CisKKwkvKiBsaWJkbG8gaGFyZGNvZGVzIGhzeW5jIHN0YXJ0IHRvIDEgKi8KKwl3cnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyX2xmc3IxNih3cnB0ciwgMHgwQiwgMSk7CisKKwkvKiBoc3luYyBlbmQgaXMgd2lkdGggb2Ygc3luYyBwdWxzZSArIDEgKi8KKwl3cnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyX2xmc3IxNih3cnB0ciwgMHgwRCwgdmFyLT5oc3luY19sZW4gKyAxKTsKKworCS8qIGhwaXhlbHMgaXMgYWN0aXZlIHBpeGVscyAqLworCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXJfMTYod3JwdHIsIDB4MEYsIHZhci0+eHJlcyk7CisKKwkvKiB5ZW5kY291bnQgaXMgdmVydGljYWwgYWN0aXZlICsgdmVydGljYWwgYmxhbmtpbmcgKi8KKwl5ZWMgPSB2YXItPnlyZXMgKyB2YXItPnVwcGVyX21hcmdpbiArIHZhci0+bG93ZXJfbWFyZ2luICsKKwkJCXZhci0+dnN5bmNfbGVuOworCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXJfbGZzcjE2KHdycHRyLCAweDExLCB5ZWMpOworCisJLyogbGliZGxvIGhhcmRjb2RlcyB2c3luYyBzdGFydCB0byAwICovCisJd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcl9sZnNyMTYod3JwdHIsIDB4MTMsIDApOworCisJLyogdnN5bmMgZW5kIGlzIHdpZHRoIG9mIHZzeW5jIHB1bHNlICovCisJd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcl9sZnNyMTYod3JwdHIsIDB4MTUsIHZhci0+dnN5bmNfbGVuKTsKKworCS8qIHZwaXhlbHMgaXMgYWN0aXZlIHBpeGVscyAqLworCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXJfMTYod3JwdHIsIDB4MTcsIHZhci0+eXJlcyk7CisKKwkvKiBjb252ZXJ0IHBpY29zZWNvbmRzIHRvIDVrSHogbXVsdGlwbGUgZm9yIHBjbGs1ayA9IHggKiAxRTEyLzVrICovCisJd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcl8xNmJlKHdycHRyLCAweDFCLAorCQkJMjAwKjEwMDAqMTAwMC92YXItPnBpeGNsb2NrKTsKKworCXJldHVybiB3cnB0cjsKK30KKworLyoKKyAqIFRoaXMgdGFrZXMgYSBzdGFuZGFyZCBmYmRldiBzY3JlZW5pbmZvIHN0cnVjdCB0aGF0IHdhcyBmZXRjaGVkIG9yIHByZXBhcmVkCisgKiBhbmQgdGhlbiBnZW5lcmF0ZXMgdGhlIGFwcHJvcHJpYXRlIGNvbW1hbmQgc2VxdWVuY2UgdGhhdCB0aGVuIGRyaXZlcyB0aGUKKyAqIGRpc3BsYXkgY29udHJvbGxlci4KKyAqLworc3RhdGljIGludCBkbGZiX3NldF92aWRlb19tb2RlKHN0cnVjdCBkbGZiX2RhdGEgKmRldiwKKwkJCQlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcikKK3sKKwljaGFyICpidWY7CisJY2hhciAqd3JwdHI7CisJaW50IHJldHZhbCA9IDA7CisJaW50IHdyaXRlc2l6ZTsKKwlzdHJ1Y3QgdXJiICp1cmI7CisKKwlpZiAoIWF0b21pY19yZWFkKCZkZXYtPnVzYl9hY3RpdmUpKQorCQlyZXR1cm4gLUVQRVJNOworCisJdXJiID0gZGxmYl9nZXRfdXJiKGRldik7CisJaWYgKCF1cmIpCisJCXJldHVybiAtRU5PTUVNOworCWJ1ZiA9IChjaGFyICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCisJLyoKKwkqIFRoaXMgZmlyc3Qgc2VjdGlvbiBoYXMgdG8gZG8gd2l0aCBzZXR0aW5nIHRoZSBiYXNlIGFkZHJlc3Mgb24gdGhlCisJKiBjb250cm9sbGVyICogYXNzb2NpYXRlZCB3aXRoIHRoZSBkaXNwbGF5LiBUaGVyZSBhcmUgMiBiYXNlCisJKiBwb2ludGVycywgY3VycmVudGx5LCB3ZSBvbmx5ICogdXNlIHRoZSAxNiBicHAgc2VnbWVudC4KKwkqLworCXdycHRyID0gZGxmYl92aWRyZWdfbG9jayhidWYpOworCXdycHRyID0gZGxmYl9zZXRfY29sb3JfZGVwdGgod3JwdHIsIDB4MDApOworCS8qIHNldCBiYXNlIGZvciAxNmJwcCBzZWdtZW50IHRvIDAgKi8KKwl3cnB0ciA9IGRsZmJfc2V0X2Jhc2UxNmJwcCh3cnB0ciwgMCk7CisJLyogc2V0IGJhc2UgZm9yIDhicHAgc2VnbWVudCB0byBlbmQgb2YgZmIgKi8KKwl3cnB0ciA9IGRsZmJfc2V0X2Jhc2U4YnBwKHdycHRyLCBkZXYtPmluZm8tPmZpeC5zbWVtX2xlbik7CisKKwl3cnB0ciA9IGRsZmJfc2V0X3ZpZF9jbWRzKHdycHRyLCB2YXIpOworCXdycHRyID0gZGxmYl9lbmFibGVfaHZzeW5jKHdycHRyLCB0cnVlKTsKKwl3cnB0ciA9IGRsZmJfdmlkcmVnX3VubG9jayh3cnB0cik7CisKKwl3cml0ZXNpemUgPSB3cnB0ciAtIGJ1ZjsKKworCXJldHZhbCA9IGRsZmJfc3VibWl0X3VyYihkZXYsIHVyYiwgd3JpdGVzaXplKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgZGxmYl9vcHNfbW1hcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IHZtYS0+dm1fc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBzaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOwogCXVuc2lnbmVkIGxvbmcgcGFnZSwgcG9zOworCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IGluZm8tPnBhcjsKIAotCXByaW50aygiTU1BUDogJWx1ICV1XG4iLCBvZmZzZXQgKyBzaXplLCBpbmZvLT5maXguc21lbV9sZW4pOworCWRsX25vdGljZSgiTU1BUDogJWx1ICV1XG4iLCBvZmZzZXQgKyBzaXplLCBpbmZvLT5maXguc21lbV9sZW4pOwogCiAJaWYgKG9mZnNldCArIHNpemUgPiBpbmZvLT5maXguc21lbV9sZW4pCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtOTgsNTI4ICszMjMsMzcyIEBACiAKIH0KIAotLyogaW9jdGwgc3RydWN0dXJlICovCi1zdHJ1Y3QgZGxvYXJlYSB7Ci0JaW50IHgsIHk7Ci0JaW50IHcsIGg7Ci0JaW50IHgyLCB5MjsKLX07Ci0KIC8qCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7Ci0JeyBVU0JfREVWSUNFKDB4MTdlOSwgMHgwMjNkKSB9LAotCXsgfQotfTsKLSovCi0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewotCXsuaWRWZW5kb3IgPSAweDE3ZTksIC5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfVkVORE9SLH0sCi0Je30sCi19OwotTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKLQotc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGRsZmJfZHJpdmVyOwotCi0vLyB0aGFua3MgdG8gSGVucmlrIEJqZXJyZWdhYXJkIFBlZGVyc2VuIGZvciB0aGlzIGZ1bmN0aW9uCi1zdGF0aWMgY2hhciAqcmxlX2NvbXByZXNzMTYodWludDE2X3QgKiBzcmMsIGNoYXIgKmRzdCwgaW50IHJlbSkKKyAqIFRyaW1zIGlkZW50aWNhbCBkYXRhIGZyb20gZnJvbnQgYW5kIGJhY2sgb2YgbGluZQorICogU2V0cyBuZXcgZnJvbnQgYnVmZmVyIGFkZHJlc3MgYW5kIHdpZHRoCisgKiBBbmQgcmV0dXJucyBieXRlIGNvdW50IG9mIGlkZW50aWNhbCBwaXhlbHMKKyAqIEFzc3VtZXMgQ1BVIG5hdHVyYWwgYWxpZ25tZW50ICh1bnNpZ25lZCBsb25nKQorICogZm9yIGJhY2sgYW5kIGZyb250IGJ1ZmZlciBwdHJzIGFuZCB3aWR0aAorICovCitzdGF0aWMgaW50IGRsZmJfdHJpbV9obGluZShjb25zdCB1OCAqYmJhY2ssIGNvbnN0IHU4ICoqYmZyb250LCBpbnQgKndpZHRoX2J5dGVzKQogeworCWludCBqLCBrOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmJhY2sgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKSBiYmFjazsKKwljb25zdCB1bnNpZ25lZCBsb25nICpmcm9udCA9IChjb25zdCB1bnNpZ25lZCBsb25nICopICpiZnJvbnQ7CisJY29uc3QgaW50IHdpZHRoID0gKndpZHRoX2J5dGVzIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworCWludCBpZGVudGljYWwgPSB3aWR0aDsKKwlpbnQgc3RhcnQgPSB3aWR0aDsKKwlpbnQgZW5kID0gd2lkdGg7CiAKLQlpbnQgcmw7Ci0JdWludDE2X3QgcGl4MDsKLQljaGFyICplbmRfaWZfcmF3ID0gZHN0ICsgNiArIDIgKiByZW07CisJcHJlZmV0Y2goKHZvaWQgKikgZnJvbnQpOworCXByZWZldGNoKCh2b2lkICopIGJhY2spOwogCi0JZHN0ICs9IDY7CQkvLyBoZWFkZXIgd2lsbCBiZSBmaWxsZWQgaW4gaWYgUkxFIGlzIHdvcnRoIGl0Ci0KLQl3aGlsZSAocmVtICYmIGRzdCA8IGVuZF9pZl9yYXcpIHsKLQkJY2hhciAqc3RhcnQgPSAoY2hhciAqKXNyYzsKLQotCQlwaXgwID0gKnNyYysrOwotCQlybCA9IDE7Ci0JCXJlbS0tOwotCQl3aGlsZSAocmVtICYmICpzcmMgPT0gcGl4MCkKLQkJCXJlbS0tLCBybCsrLCBzcmMrKzsKLQkJKmRzdCsrID0gcmw7Ci0JCSpkc3QrKyA9IHN0YXJ0WzFdOwotCQkqZHN0KysgPSBzdGFydFswXTsKKwlmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykgeworCQlpZiAoYmFja1tqXSAhPSBmcm9udFtqXSkgeworCQkJc3RhcnQgPSBqOworCQkJYnJlYWs7CisJCX0KIAl9CiAKLQlyZXR1cm4gZHN0OworCWZvciAoayA9IHdpZHRoIC0gMTsgayA+IGo7IGstLSkgeworCQlpZiAoYmFja1trXSAhPSBmcm9udFtrXSkgeworCQkJZW5kID0gaysxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZGVudGljYWwgPSBzdGFydCArICh3aWR0aCAtIGVuZCk7CisJKmJmcm9udCA9ICh1OCAqKSAmZnJvbnRbc3RhcnRdOworCSp3aWR0aF9ieXRlcyA9IChlbmQgLSBzdGFydCkgKiBzaXplb2YodW5zaWduZWQgbG9uZyk7CisKKwlyZXR1cm4gaWRlbnRpY2FsICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwogfQogCiAvKgotVGhhbmtzIHRvIEhlbnJpayBCamVycmVnYWFyZCBQZWRlcnNlbiBmb3IgcmxlIGltcGxlbWVudGF0aW9uIGFuZCBjb2RlIHJlZmFjdG9yaW5nLgotTmV4dCBzdGVwIGlzIGh1ZmZtYW4gY29tcHJlc3Npb24uCitSZW5kZXIgYSBjb21tYW5kIHN0cmVhbSBmb3IgYW4gZW5jb2RlZCBob3Jpem9udGFsIGxpbmUgc2VnbWVudCBvZiBwaXhlbHMuCisKK0EgY29tbWFuZCBidWZmZXIgaG9sZHMgc2V2ZXJhbCBjb21tYW5kcy4KK0l0IGFsd2F5cyBiZWdpbnMgd2l0aCBhIGZyZXNoIGNvbW1hbmQgaGVhZGVyCisodGhlIHByb3RvY29sIGRvZXNuJ3QgcmVxdWlyZSB0aGlzLCBidXQgd2UgZW5mb3JjZSBpdCB0byBhbGxvdworbXVsdGlwbGUgYnVmZmVycyB0byBiZSBwb3RlbnRpYWxseSBlbmNvZGVkIGFuZCBzZW50IGluIHBhcmFsbGVsKS4KK0Egc2luZ2xlIGNvbW1hbmQgZW5jb2RlcyBvbmUgY29udGlndW91cyBob3Jpem9udGFsIGxpbmUgb2YgcGl4ZWxzCisKK1RoZSBmdW5jdGlvbiByZWxpZXMgb24gdGhlIGNsaWVudCB0byBkbyBhbGwgYWxsb2NhdGlvbiwgc28gdGhhdAorcmVuZGVyaW5nIGNhbiBiZSBkb25lIGRpcmVjdGx5IHRvIG91dHB1dCBidWZmZXJzIChlLmcuIFVTQiBVUkJzKS4KK1RoZSBmdW5jdGlvbiBmaWxscyB0aGUgc3VwcGxpZWQgY29tbWFuZCBidWZmZXIsIHByb3ZpZGluZyBpbmZvcm1hdGlvbgorb24gd2hlcmUgaXQgbGVmdCBvZmYsIHNvIHRoZSBjbGllbnQgbWF5IGNhbGwgaW4gYWdhaW4gd2l0aCBhZGRpdGlvbmFsCitidWZmZXJzIGlmIHRoZSBsaW5lIHdpbGwgdGFrZSBzZXZlcmFsIGJ1ZmZlcnMgdG8gY29tcGxldGUuCisKK0Egc2luZ2xlIGNvbW1hbmQgY2FuIHRyYW5zbWl0IGEgbWF4aW11bSBvZiAyNTYgcGl4ZWxzLAorcmVnYXJkbGVzcyBvZiB0aGUgY29tcHJlc3Npb24gcmF0aW8gKHByb3RvY29sIGRlc2lnbiBsaW1pdCkuCitUbyB0aGUgaGFyZHdhcmUsIDAgZm9yIGEgc2l6ZSBieXRlIG1lYW5zIDI1NgorCitSYXRoZXIgdGhhbiAyNTYgcGl4ZWwgY29tbWFuZHMgd2hpY2ggYXJlIGVpdGhlciBybCBvciByYXcgZW5jb2RlZCwKK3RoZSBybHggY29tbWFuZCBzaW1wbHkgYXNzdW1lcyBhbHRlcm5hdGluZyByYXcgYW5kIHJsIHNwYW5zIHdpdGhpbiBvbmUgY21kLgorVGhpcyBoYXMgYSBzbGlnaHRseSBsYXJnZXIgaGVhZGVyIG92ZXJoZWFkLCBidXQgcHJvZHVjZXMgbW9yZSBldmVuIHJlc3VsdHMuCitJdCBhbHNvIHByb2Nlc3NlcyBhbGwgZGF0YSAocmVhZCBhbmQgd3JpdGUpIGluIGEgc2luZ2xlIHBhc3MuCitQZXJmb3JtYW5jZSBiZW5jaG1hcmtzIG9mIGNvbW1vbiBjYXNlcyBzaG93IGl0IGhhdmluZyBqdXN0IHNsaWdodGx5IGJldHRlcgorY29tcHJlc3Npb24gdGhhbiAyNTYgcGl4ZWwgcmF3IC1vci0gcmxlIGNvbW1hbmRzLCB3aXRoIHNpbWlsYXIgQ1BVIGNvbnN1bXBpb24uCitCdXQgZm9yIHZlcnkgcmwgZnJpZW5kbHkgZGF0YSwgd2lsbCBjb21wcmVzcyBub3QgcXVpdGUgYXMgd2VsbC4KICovCi0KLXN0YXRpYyBpbnQKLWltYWdlX2JsaXQoc3RydWN0IGRsZmJfZGF0YSAqZGV2X2luZm8sIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotCSAgIGNoYXIgKmRhdGEpCitzdGF0aWMgdm9pZCBkbGZiX2NvbXByZXNzX2hsaW5lKAorCWNvbnN0IHVpbnQxNl90ICoqcGl4ZWxfc3RhcnRfcHRyLAorCWNvbnN0IHVpbnQxNl90ICpjb25zdCBwaXhlbF9lbmQsCisJdWludDMyX3QgKmRldmljZV9hZGRyZXNzX3B0ciwKKwl1aW50OF90ICoqY29tbWFuZF9idWZmZXJfcHRyLAorCWNvbnN0IHVpbnQ4X3QgKmNvbnN0IGNtZF9idWZmZXJfZW5kKQogeworCWNvbnN0IHVpbnQxNl90ICpwaXhlbCA9ICpwaXhlbF9zdGFydF9wdHI7CisJdWludDMyX3QgZGV2X2FkZHIgID0gKmRldmljZV9hZGRyZXNzX3B0cjsKKwl1aW50OF90ICpjbWQgPSAqY29tbWFuZF9idWZmZXJfcHRyOworCWNvbnN0IGludCBicHAgPSAyOwogCi0JaW50IGksIGosIGJhc2U7Ci0JaW50IHJlbSA9IHdpZHRoOwotCWludCByZXQ7CisJd2hpbGUgKChwaXhlbF9lbmQgPiBwaXhlbCkgJiYKKwkgICAgICAgKGNtZF9idWZmZXJfZW5kIC0gTUlOX1JMWF9DTURfQllURVMgPiBjbWQpKSB7CisJCXVpbnQ4X3QgKnJhd19waXhlbHNfY291bnRfYnl0ZSA9IDA7CisJCXVpbnQ4X3QgKmNtZF9waXhlbHNfY291bnRfYnl0ZSA9IDA7CisJCWNvbnN0IHVpbnQxNl90ICpyYXdfcGl4ZWxfc3RhcnQgPSAwOworCQljb25zdCB1aW50MTZfdCAqY21kX3BpeGVsX3N0YXJ0LCAqY21kX3BpeGVsX2VuZCA9IDA7CisJCWNvbnN0IHVpbnQzMl90IGJlX2Rldl9hZGRyID0gY3B1X3RvX2JlMzIoZGV2X2FkZHIpOwogCi0JaW50IGZpcnN0ZGlmZiwgdGhpc3RpbWU7CisJCXByZWZldGNodygodm9pZCAqKSBjbWQpOyAvKiBwdWxsIGluIG9uZSBjYWNoZSBsaW5lIGF0IGxlYXN0ICovCiAKLQljaGFyICpidWZwdHI7CisJCSpjbWQrKyA9IDB4QUY7CisJCSpjbWQrKyA9IDB4NkI7CisJCSpjbWQrKyA9ICh1aW50OF90KSAoKGJlX2Rldl9hZGRyID4+IDgpICYgMHhGRik7CisJCSpjbWQrKyA9ICh1aW50OF90KSAoKGJlX2Rldl9hZGRyID4+IDE2KSAmIDB4RkYpOworCQkqY21kKysgPSAodWludDhfdCkgKChiZV9kZXZfYWRkciA+PiAyNCkgJiAweEZGKTsKIAotCWlmICh4ICsgd2lkdGggPiBkZXZfaW5mby0+aW5mby0+dmFyLnhyZXMpCi0JCXJldHVybiAtRUlOVkFMOworCQljbWRfcGl4ZWxzX2NvdW50X2J5dGUgPSBjbWQrKzsgLyogIHdlJ2xsIGtub3cgdGhpcyBsYXRlciAqLworCQljbWRfcGl4ZWxfc3RhcnQgPSBwaXhlbDsKIAotCWlmICh5ICsgaGVpZ2h0ID4gZGV2X2luZm8tPmluZm8tPnZhci55cmVzKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmF3X3BpeGVsc19jb3VudF9ieXRlID0gY21kKys7IC8qICB3ZSdsbCBrbm93IHRoaXMgbGF0ZXIgKi8KKwkJcmF3X3BpeGVsX3N0YXJ0ID0gcGl4ZWw7CiAKLQltdXRleF9sb2NrKCZkZXZfaW5mby0+YnVsa19tdXRleCk7CisJCWNtZF9waXhlbF9lbmQgPSBwaXhlbCArIG1pbihNQVhfQ01EX1BJWEVMUyArIDEsCisJCQltaW4oKGludCkocGl4ZWxfZW5kIC0gcGl4ZWwpLAorCQkJICAgIChpbnQpKGNtZF9idWZmZXJfZW5kIC0gY21kKSAvIGJwcCkpOwogCi0JYmFzZSA9Ci0JICAgIGRldl9pbmZvLT5iYXNlMTYgKyAoKGRldl9pbmZvLT5pbmZvLT52YXIueHJlcyAqIDIgKiB5KSArICh4ICogMikpOworCQlwcmVmZXRjaF9yYW5nZSgodm9pZCAqKSBwaXhlbCwgKGNtZF9waXhlbF9lbmQgLSBwaXhlbCkgKiBicHApOwogCi0JZGF0YSArPSAoZGV2X2luZm8tPmluZm8tPnZhci54cmVzICogMiAqIHkpICsgKHggKiAyKTsKKwkJd2hpbGUgKHBpeGVsIDwgY21kX3BpeGVsX2VuZCkgeworCQkJY29uc3QgdWludDE2X3QgKiBjb25zdCByZXBlYXRpbmdfcGl4ZWwgPSBwaXhlbDsKIAotCS8qIHByaW50aygiSU1BR0VfQkxJVFxuIik7ICovCisJCQkqKHVpbnQxNl90ICopY21kID0gY3B1X3RvX2JlMTZwKHBpeGVsKTsKKwkJCWNtZCArPSAyOworCQkJcGl4ZWwrKzsKIAotCWJ1ZnB0ciA9IGRldl9pbmZvLT5idWY7CisJCQlpZiAodW5saWtlbHkoKHBpeGVsIDwgY21kX3BpeGVsX2VuZCkgJiYKKwkJCQkgICAgICgqcGl4ZWwgPT0gKnJlcGVhdGluZ19waXhlbCkpKSB7CisJCQkJLyogZ28gYmFjayBhbmQgZmlsbCBpbiByYXcgcGl4ZWwgY291bnQgKi8KKwkJCQkqcmF3X3BpeGVsc19jb3VudF9ieXRlID0gKChyZXBlYXRpbmdfcGl4ZWwgLQorCQkJCQkJcmF3X3BpeGVsX3N0YXJ0KSArIDEpICYgMHhGRjsKIAotCWZvciAoaSA9IHk7IGkgPCB5ICsgaGVpZ2h0OyBpKyspIHsKLQotCQlpZiAoZGV2X2luZm8tPmJ1ZmVuZCAtIGJ1ZnB0ciA8IEJVRl9ISUdIX1dBVEVSX01BUkspIHsKLQkJCXJldCA9IGRsZmJfYnVsa19tc2coZGV2X2luZm8sIGJ1ZnB0ciAtIGRldl9pbmZvLT5idWYpOwotCQkJYnVmcHRyID0gZGV2X2luZm8tPmJ1ZjsKLQkJfQotCi0JCXJlbSA9IHdpZHRoOwotCi0JCS8qIHByaW50aygiV1JJVElORyBMSU5FICVkXG4iLCBpKTsgKi8KLQotCQl3aGlsZSAocmVtKSB7Ci0KLQkJCWlmIChkZXZfaW5mby0+YnVmZW5kIC0gYnVmcHRyIDwgQlVGX0hJR0hfV0FURVJfTUFSSykgewotCQkJCXJldCA9Ci0JCQkJICAgIGRsZmJfYnVsa19tc2coZGV2X2luZm8sCi0JCQkJCQkgIGJ1ZnB0ciAtIGRldl9pbmZvLT5idWYpOwotCQkJCWJ1ZnB0ciA9IGRldl9pbmZvLT5idWY7Ci0JCQl9Ci0JCQkvLyBudW1iZXIgb2YgcGl4ZWxzIHRvIGNvbnNpZGVyIHRoaXMgdGltZQotCQkJdGhpc3RpbWUgPSByZW07Ci0JCQlpZiAodGhpc3RpbWUgPiAyNTUpCi0JCQkJdGhpc3RpbWUgPSAyNTU7Ci0KLQkJCS8vIGZpbmQgcG9zaXRpb24gb2YgZmlyc3QgcGl4ZWwgdGhhdCBoYXMgY2hhbmdlZAotCQkJZmlyc3RkaWZmID0gLTE7Ci0JCQlmb3IgKGogPSAwOyBqIDwgdGhpc3RpbWUgKiAyOyBqKyspIHsKLQkJCQlpZiAoZGV2X2luZm8tPmJhY2tpbmdfYnVmZmVyCi0JCQkJICAgIFtiYXNlIC0gZGV2X2luZm8tPmJhc2UxNiArIGpdICE9IGRhdGFbal0pIHsKLQkJCQkJZmlyc3RkaWZmID0gaiAvIDI7Ci0JCQkJCWJyZWFrOworCQkJCXdoaWxlICgocGl4ZWwgPCBjbWRfcGl4ZWxfZW5kKQorCQkJCSAgICAgICAmJiAoKnBpeGVsID09ICpyZXBlYXRpbmdfcGl4ZWwpKSB7CisJCQkJCXBpeGVsKys7CiAJCQkJfQorCisJCQkJLyogaW1tZWRpYXRlbHkgYWZ0ZXIgcmF3IGRhdGEgaXMgcmVwZWF0IGJ5dGUgKi8KKwkJCQkqY21kKysgPSAoKHBpeGVsIC0gcmVwZWF0aW5nX3BpeGVsKSAtIDEpICYgMHhGRjsKKworCQkJCS8qIFRoZW4gc3RhcnQgYW5vdGhlciByYXcgcGl4ZWwgc3BhbiAqLworCQkJCXJhd19waXhlbF9zdGFydCA9IHBpeGVsOworCQkJCXJhd19waXhlbHNfY291bnRfYnl0ZSA9IGNtZCsrOwogCQkJfQotCi0JCQlpZiAoZmlyc3RkaWZmID49IDApIHsKLQkJCQljaGFyICplbmRfb2ZfcmxlOwotCi0JCQkJZW5kX29mX3JsZSA9Ci0JCQkJICAgIHJsZV9jb21wcmVzczE2KCh1aW50MTZfdCAqKSAoZGF0YSArCi0JCQkJCQkJCSBmaXJzdGRpZmYgKiAyKSwKLQkJCQkJCSAgIGJ1ZnB0ciwKLQkJCQkJCSAgIHRoaXN0aW1lIC0gZmlyc3RkaWZmKTsKLQotCQkJCWlmIChlbmRfb2ZfcmxlIDwKLQkJCQkgICAgYnVmcHRyICsgNiArIDIgKiAodGhpc3RpbWUgLSBmaXJzdGRpZmYpKSB7Ci0JCQkJCWJ1ZnB0clswXSA9IDB4QUY7Ci0JCQkJCWJ1ZnB0clsxXSA9IDB4Njk7Ci0KLQkJCQkJYnVmcHRyWzJdID0KLQkJCQkJICAgIChjaGFyKSgoYmFzZSArCi0JCQkJCQkgICAgZmlyc3RkaWZmICogMikgPj4gMTYpOwotCQkJCQlidWZwdHJbM10gPQotCQkJCQkgICAgKGNoYXIpKChiYXNlICsgZmlyc3RkaWZmICogMikgPj4gOCk7Ci0JCQkJCWJ1ZnB0cls0XSA9Ci0JCQkJCSAgICAoY2hhcikoYmFzZSArIGZpcnN0ZGlmZiAqIDIpOwotCQkJCQlidWZwdHJbNV0gPSB0aGlzdGltZSAtIGZpcnN0ZGlmZjsKLQotCQkJCQlidWZwdHIgPSBlbmRfb2ZfcmxlOwotCi0JCQkJfSBlbHNlIHsKLQkJCQkJLy8gZmFsbGJhY2sgdG8gcmF3IChvciBzb21lIG90aGVyIGVuY29kaW5nPykKLQkJCQkJKmJ1ZnB0cisrID0gMHhBRjsKLQkJCQkJKmJ1ZnB0cisrID0gMHg2ODsKLQotCQkJCQkqYnVmcHRyKysgPQotCQkJCQkgICAgKGNoYXIpKChiYXNlICsKLQkJCQkJCSAgICBmaXJzdGRpZmYgKiAyKSA+PiAxNik7Ci0JCQkJCSpidWZwdHIrKyA9Ci0JCQkJCSAgICAoY2hhcikoKGJhc2UgKyBmaXJzdGRpZmYgKiAyKSA+PiA4KTsKLQkJCQkJKmJ1ZnB0cisrID0KLQkJCQkJICAgIChjaGFyKShiYXNlICsgZmlyc3RkaWZmICogMik7Ci0JCQkJCSpidWZwdHIrKyA9IHRoaXN0aW1lIC0gZmlyc3RkaWZmOwotCQkJCQkvLyBQVVQgQ09NUFJFU1NJT04gSEVSRQotCQkJCQlmb3IgKGogPSBmaXJzdGRpZmYgKiAyOwotCQkJCQkgICAgIGogPCB0aGlzdGltZSAqIDI7IGogKz0gMikgewotCQkJCQkJKmJ1ZnB0cisrID0gZGF0YVtqICsgMV07Ci0JCQkJCQkqYnVmcHRyKysgPSBkYXRhW2pdOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCQliYXNlICs9IHRoaXN0aW1lICogMjsKLQkJCWRhdGEgKz0gdGhpc3RpbWUgKiAyOwotCQkJcmVtIC09IHRoaXN0aW1lOwogCQl9CiAKLQkJbWVtY3B5KGRldl9pbmZvLT5iYWNraW5nX2J1ZmZlciArIChiYXNlIC0gZGV2X2luZm8tPmJhc2UxNikgLQotCQkgICAgICAgKHdpZHRoICogMiksIGRhdGEgLSAod2lkdGggKiAyKSwgd2lkdGggKiAyKTsKKwkJaWYgKHBpeGVsID4gcmF3X3BpeGVsX3N0YXJ0KSB7CisJCQkvKiBmaW5hbGl6ZSBsYXN0IFJBVyBzcGFuICovCisJCQkqcmF3X3BpeGVsc19jb3VudF9ieXRlID0gKHBpeGVsLXJhd19waXhlbF9zdGFydCkgJiAweEZGOworCQl9CiAKLQkJYmFzZSArPSAoZGV2X2luZm8tPmluZm8tPnZhci54cmVzICogMikgLSAod2lkdGggKiAyKTsKLQkJZGF0YSArPSAoZGV2X2luZm8tPmluZm8tPnZhci54cmVzICogMikgLSAod2lkdGggKiAyKTsKLQorCQkqY21kX3BpeGVsc19jb3VudF9ieXRlID0gKHBpeGVsIC0gY21kX3BpeGVsX3N0YXJ0KSAmIDB4RkY7CisJCWRldl9hZGRyICs9IChwaXhlbCAtIGNtZF9waXhlbF9zdGFydCkgKiBicHA7CiAJfQogCi0JaWYgKGJ1ZnB0ciA+IGRldl9pbmZvLT5idWYpIHsKLQkJcmV0ID0gZGxmYl9idWxrX21zZyhkZXZfaW5mbywgYnVmcHRyIC0gZGV2X2luZm8tPmJ1Zik7CisJaWYgKGNtZF9idWZmZXJfZW5kIDw9IE1JTl9STFhfQ01EX0JZVEVTICsgY21kKSB7CisJCS8qIEZpbGwgbGVmdG92ZXIgYnl0ZXMgd2l0aCBuby1vcHMgKi8KKwkJaWYgKGNtZF9idWZmZXJfZW5kID4gY21kKQorCQkJbWVtc2V0KGNtZCwgMHhBRiwgY21kX2J1ZmZlcl9lbmQgLSBjbWQpOworCQljbWQgPSAodWludDhfdCAqKSBjbWRfYnVmZmVyX2VuZDsKIAl9CiAKLQltdXRleF91bmxvY2soJmRldl9pbmZvLT5idWxrX211dGV4KTsKKwkqY29tbWFuZF9idWZmZXJfcHRyID0gY21kOworCSpwaXhlbF9zdGFydF9wdHIgPSBwaXhlbDsKKwkqZGV2aWNlX2FkZHJlc3NfcHRyID0gZGV2X2FkZHI7CiAKLQlyZXR1cm4gYmFzZTsKLQorCXJldHVybjsKIH0KIAotc3RhdGljIGludAotZHJhd19yZWN0KHN0cnVjdCBkbGZiX2RhdGEgKmRldl9pbmZvLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKLQkgIHVuc2lnbmVkIGNoYXIgcmVkLCB1bnNpZ25lZCBjaGFyIGdyZWVuLCB1bnNpZ25lZCBjaGFyIGJsdWUpCisvKgorICogVGhlcmUgYXJlIDMgY29waWVzIG9mIGV2ZXJ5IHBpeGVsOiBUaGUgZnJvbnQgYnVmZmVyIHRoYXQgdGhlIGZiZGV2CisgKiBjbGllbnQgcmVuZGVycyB0bywgdGhlIGFjdHVhbCBmcmFtZWJ1ZmZlciBhY3Jvc3MgdGhlIFVTQiBidXMgaW4gaGFyZHdhcmUKKyAqICh0aGF0IHdlIGNhbiBvbmx5IHdyaXRlIHRvLCBzbG93bHksIGFuZCBjYW4gbmV2ZXIgcmVhZCksIGFuZCAob3B0aW9uYWxseSkKKyAqIG91ciBzaGFkb3cgY29weSB0aGF0IHRyYWNrcyB3aGF0J3MgYmVlbiBzZW50IHRvIHRoYXQgaGFyZHdhcmUgYnVmZmVyLgorICovCitzdGF0aWMgdm9pZCBkbGZiX3JlbmRlcl9obGluZShzdHJ1Y3QgZGxmYl9kYXRhICpkZXYsIHN0cnVjdCB1cmIgKip1cmJfcHRyLAorCQkJICAgICAgY29uc3QgY2hhciAqZnJvbnQsIGNoYXIgKip1cmJfYnVmX3B0ciwKKwkJCSAgICAgIHUzMiBieXRlX29mZnNldCwgdTMyIGJ5dGVfd2lkdGgsCisJCQkgICAgICBpbnQgKmlkZW50X3B0ciwgaW50ICpzZW50X3B0cikKIHsKKwljb25zdCB1OCAqbGluZV9zdGFydCwgKmxpbmVfZW5kLCAqbmV4dF9waXhlbDsKKwl1MzIgZGV2X2FkZHIgPSBkZXYtPmJhc2UxNiArIGJ5dGVfb2Zmc2V0OworCXN0cnVjdCB1cmIgKnVyYiA9ICp1cmJfcHRyOworCXU4ICpjbWQgPSAqdXJiX2J1Zl9wdHI7CisJdTggKmNtZF9lbmQgPSAodTggKikgdXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CiAKLQlpbnQgaSwgaiwgYmFzZTsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIHNob3J0IGNvbCA9Ci0JICAgICgoKCgocmVkKSAmIDB4RjgpIHwgKChncmVlbikgPj4gNSkpICYgMHhGRikgPDwgOCkgKwotCSAgICAoKCgoKGdyZWVuKSAmIDB4MUMpIDw8IDMpIHwgKChibHVlKSA+PiAzKSkgJiAweEZGKTsKLQlpbnQgcmVtID0gd2lkdGg7CisJbGluZV9zdGFydCA9ICh1OCAqKSAoZnJvbnQgKyBieXRlX29mZnNldCk7CisJbmV4dF9waXhlbCA9IGxpbmVfc3RhcnQ7CisJbGluZV9lbmQgPSBuZXh0X3BpeGVsICsgYnl0ZV93aWR0aDsKIAotCWNoYXIgKmJ1ZnB0cjsKKwlpZiAoZGV2LT5iYWNraW5nX2J1ZmZlcikgeworCQlpbnQgb2Zmc2V0OworCQljb25zdCB1OCAqYmFja19zdGFydCA9ICh1OCAqKSAoZGV2LT5iYWNraW5nX2J1ZmZlcgorCQkJCQkJKyBieXRlX29mZnNldCk7CiAKLQlpZiAoeCArIHdpZHRoID4gZGV2X2luZm8tPmluZm8tPnZhci54cmVzKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJKmlkZW50X3B0ciArPSBkbGZiX3RyaW1faGxpbmUoYmFja19zdGFydCwgJm5leHRfcGl4ZWwsCisJCQkmYnl0ZV93aWR0aCk7CiAKLQlpZiAoeSArIGhlaWdodCA+IGRldl9pbmZvLT5pbmZvLT52YXIueXJlcykKLQkJcmV0dXJuIC1FSU5WQUw7CisJCW9mZnNldCA9IG5leHRfcGl4ZWwgLSBsaW5lX3N0YXJ0OworCQlsaW5lX2VuZCA9IG5leHRfcGl4ZWwgKyBieXRlX3dpZHRoOworCQlkZXZfYWRkciArPSBvZmZzZXQ7CisJCWJhY2tfc3RhcnQgKz0gb2Zmc2V0OworCQlsaW5lX3N0YXJ0ICs9IG9mZnNldDsKIAotCW11dGV4X2xvY2soJmRldl9pbmZvLT5idWxrX211dGV4KTsKLQotCWJhc2UgPSBkZXZfaW5mby0+YmFzZTE2ICsgKGRldl9pbmZvLT5pbmZvLT52YXIueHJlcyAqIDIgKiB5KSArICh4ICogMik7Ci0KLQlidWZwdHIgPSBkZXZfaW5mby0+YnVmOwotCi0JZm9yIChpID0geTsgaSA8IHkgKyBoZWlnaHQ7IGkrKykgewotCi0JCWZvciAoaiA9IDA7IGogPCB3aWR0aCAqIDI7IGogKz0gMikgewotCQkJZGV2X2luZm8tPmJhY2tpbmdfYnVmZmVyW2Jhc2UgLSBkZXZfaW5mby0+YmFzZTE2ICsgal0gPQotCQkJICAgIChjaGFyKShjb2wgPj4gOCk7Ci0JCQlkZXZfaW5mby0+YmFja2luZ19idWZmZXJbYmFzZSAtIGRldl9pbmZvLT5iYXNlMTYgKyBqICsKLQkJCQkJCSAxXSA9IChjaGFyKShjb2wpOwotCQl9Ci0JCWlmIChkZXZfaW5mby0+YnVmZW5kIC0gYnVmcHRyIDwgQlVGX0hJR0hfV0FURVJfTUFSSykgewotCQkJcmV0ID0gZGxmYl9idWxrX21zZyhkZXZfaW5mbywgYnVmcHRyIC0gZGV2X2luZm8tPmJ1Zik7Ci0JCQlidWZwdHIgPSBkZXZfaW5mby0+YnVmOwotCQl9Ci0KLQkJcmVtID0gd2lkdGg7Ci0KLQkJd2hpbGUgKHJlbSkgewotCi0JCQlpZiAoZGV2X2luZm8tPmJ1ZmVuZCAtIGJ1ZnB0ciA8IEJVRl9ISUdIX1dBVEVSX01BUkspIHsKLQkJCQlyZXQgPQotCQkJCSAgICBkbGZiX2J1bGtfbXNnKGRldl9pbmZvLAotCQkJCQkJICBidWZwdHIgLSBkZXZfaW5mby0+YnVmKTsKLQkJCQlidWZwdHIgPSBkZXZfaW5mby0+YnVmOwotCQkJfQotCi0JCQkqYnVmcHRyKysgPSAweEFGOwotCQkJKmJ1ZnB0cisrID0gMHg2OTsKLQotCQkJKmJ1ZnB0cisrID0gKGNoYXIpKGJhc2UgPj4gMTYpOwotCQkJKmJ1ZnB0cisrID0gKGNoYXIpKGJhc2UgPj4gOCk7Ci0JCQkqYnVmcHRyKysgPSAoY2hhcikoYmFzZSk7Ci0KLQkJCWlmIChyZW0gPiAyNTUpIHsKLQkJCQkqYnVmcHRyKysgPSAyNTU7Ci0JCQkJKmJ1ZnB0cisrID0gMjU1OwotCQkJCXJlbSAtPSAyNTU7Ci0JCQkJYmFzZSArPSAyNTUgKiAyOwotCQkJfSBlbHNlIHsKLQkJCQkqYnVmcHRyKysgPSByZW07Ci0JCQkJKmJ1ZnB0cisrID0gcmVtOwotCQkJCWJhc2UgKz0gcmVtICogMjsKLQkJCQlyZW0gPSAwOwotCQkJfQotCi0JCQkqYnVmcHRyKysgPSAoY2hhcikoY29sID4+IDgpOwotCQkJKmJ1ZnB0cisrID0gKGNoYXIpKGNvbCk7Ci0KLQkJfQotCi0JCWJhc2UgKz0gKGRldl9pbmZvLT5pbmZvLT52YXIueHJlcyAqIDIpIC0gKHdpZHRoICogMik7Ci0KKwkJbWVtY3B5KChjaGFyICopYmFja19zdGFydCwgKGNoYXIgKikgbGluZV9zdGFydCwKKwkJICAgICAgIGJ5dGVfd2lkdGgpOwogCX0KIAotCWlmIChidWZwdHIgPiBkZXZfaW5mby0+YnVmKQotCQlyZXQgPSBkbGZiX2J1bGtfbXNnKGRldl9pbmZvLCBidWZwdHIgLSBkZXZfaW5mby0+YnVmKTsKKwl3aGlsZSAobmV4dF9waXhlbCA8IGxpbmVfZW5kKSB7CiAKLQltdXRleF91bmxvY2soJmRldl9pbmZvLT5idWxrX211dGV4KTsKKwkJZGxmYl9jb21wcmVzc19obGluZSgoY29uc3QgdWludDE2X3QgKiopICZuZXh0X3BpeGVsLAorCQkJICAgICAoY29uc3QgdWludDE2X3QgKikgbGluZV9lbmQsICZkZXZfYWRkciwKKwkJCSh1OCAqKikgJmNtZCwgKHU4ICopIGNtZF9lbmQpOwogCi0JcmV0dXJuIDE7CisJCWlmIChjbWQgPj0gY21kX2VuZCkgeworCQkJaW50IGxlbiA9IGNtZCAtICh1OCAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwkJCWlmIChkbGZiX3N1Ym1pdF91cmIoZGV2LCB1cmIsIGxlbikpCisJCQkJcmV0dXJuOyAvKiBsb3N0IHBpeGVscyBpcyBzZXQgKi8KKwkJCSpzZW50X3B0ciArPSBsZW47CisJCQl1cmIgPSBkbGZiX2dldF91cmIoZGV2KTsKKwkJCWlmICghdXJiKQorCQkJCXJldHVybjsgLyogbG9zdF9waXhlbHMgaXMgc2V0ICovCisJCQkqdXJiX3B0ciA9IHVyYjsKKwkJCWNtZCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCQkJY21kX2VuZCA9ICZjbWRbdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoXTsKKwkJfQorCX0KKworCSp1cmJfYnVmX3B0ciA9IGNtZDsKIH0KIAotc3RhdGljIHZvaWQgc3dhcGZiKHN0cnVjdCBkbGZiX2RhdGEgKmRldl9pbmZvKQoraW50IGRsZmJfaGFuZGxlX2RhbWFnZShzdHJ1Y3QgZGxmYl9kYXRhICpkZXYsIGludCB4LCBpbnQgeSwKKwkgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjaGFyICpkYXRhKQogewotCi0JaW50IHRtcGJhc2U7Ci0JY2hhciAqYnVmcHRyOwotCi0JbXV0ZXhfbG9jaygmZGV2X2luZm8tPmJ1bGtfbXV0ZXgpOwotCi0JdG1wYmFzZSA9IGRldl9pbmZvLT5iYXNlMTY7Ci0KLQlkZXZfaW5mby0+YmFzZTE2ID0gZGV2X2luZm8tPmJhc2UxNmQ7Ci0JZGV2X2luZm8tPmJhc2UxNmQgPSB0bXBiYXNlOwotCi0JYnVmcHRyID0gZGV2X2luZm8tPmJ1ZjsKLQotCWJ1ZnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyKGJ1ZnB0ciwgMHhGRiwgMHgwMCk7Ci0KLQkvLyBzZXQgYWRkcmVzc2VzCi0JYnVmcHRyID0KLQkgICAgZGxmYl9zZXRfcmVnaXN0ZXIoYnVmcHRyLCAweDIwLCAoY2hhcikoZGV2X2luZm8tPmJhc2UxNiA+PiAxNikpOwotCWJ1ZnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyKGJ1ZnB0ciwgMHgyMSwgKGNoYXIpKGRldl9pbmZvLT5iYXNlMTYgPj4gOCkpOwotCWJ1ZnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyKGJ1ZnB0ciwgMHgyMiwgKGNoYXIpKGRldl9pbmZvLT5iYXNlMTYpKTsKLQotCWJ1ZnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyKGJ1ZnB0ciwgMHhGRiwgMHgwMCk7Ci0KLQlkbGZiX2J1bGtfbXNnKGRldl9pbmZvLCBidWZwdHIgLSBkZXZfaW5mby0+YnVmKTsKLQotCW11dGV4X3VubG9jaygmZGV2X2luZm8tPmJ1bGtfbXV0ZXgpOwotfQotCi1zdGF0aWMgaW50IGNvcHlmYihzdHJ1Y3QgZGxmYl9kYXRhICpkZXZfaW5mbykKLXsKLQlpbnQgYmFzZTsKLQlpbnQgc291cmNlOwotCWludCByZW07CiAJaW50IGksIHJldDsKKwljaGFyICpjbWQ7CisJY3ljbGVzX3Qgc3RhcnRfY3ljbGVzLCBlbmRfY3ljbGVzOworCWludCBieXRlc19zZW50ID0gMDsKKwlpbnQgYnl0ZXNfaWRlbnRpY2FsID0gMDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IGFsaWduZWRfeDsKIAotCWNoYXIgKmJ1ZnB0cjsKKwlzdGFydF9jeWNsZXMgPSBnZXRfY3ljbGVzKCk7CiAKLQliYXNlID0gZGV2X2luZm8tPmJhc2UxNmQ7CisJYWxpZ25lZF94ID0gRExfQUxJR05fRE9XTih4LCBzaXplb2YodW5zaWduZWQgbG9uZykpOworCXdpZHRoID0gRExfQUxJR05fVVAod2lkdGggKyAoeC1hbGlnbmVkX3gpLCBzaXplb2YodW5zaWduZWQgbG9uZykpOworCXggPSBhbGlnbmVkX3g7CiAKLQltdXRleF9sb2NrKCZkZXZfaW5mby0+YnVsa19tdXRleCk7Ci0KLQlzb3VyY2UgPSBkZXZfaW5mby0+YmFzZTE2OwotCi0JYnVmcHRyID0gZGV2X2luZm8tPmJ1ZjsKLQotCWZvciAoaSA9IDA7IGkgPCBkZXZfaW5mby0+aW5mby0+dmFyLnlyZXM7IGkrKykgewotCi0JCWlmIChkZXZfaW5mby0+YnVmZW5kIC0gYnVmcHRyIDwgQlVGX0hJR0hfV0FURVJfTUFSSykgewotCQkJcmV0ID0gZGxmYl9idWxrX21zZyhkZXZfaW5mbywgYnVmcHRyIC0gZGV2X2luZm8tPmJ1Zik7Ci0JCQlidWZwdHIgPSBkZXZfaW5mby0+YnVmOwotCQl9Ci0KLQkJcmVtID0gZGV2X2luZm8tPmluZm8tPnZhci54cmVzOwotCi0JCXdoaWxlIChyZW0pIHsKLQotCQkJaWYgKGRldl9pbmZvLT5idWZlbmQgLSBidWZwdHIgPCBCVUZfSElHSF9XQVRFUl9NQVJLKSB7Ci0JCQkJcmV0ID0KLQkJCQkgICAgZGxmYl9idWxrX21zZyhkZXZfaW5mbywKLQkJCQkJCSAgYnVmcHRyIC0gZGV2X2luZm8tPmJ1Zik7Ci0JCQkJYnVmcHRyID0gZGV2X2luZm8tPmJ1ZjsKLQotCQkJfQotCi0JCQkqYnVmcHRyKysgPSAweEFGOwotCQkJKmJ1ZnB0cisrID0gMHg2QTsKLQotCQkJKmJ1ZnB0cisrID0gKGNoYXIpKGJhc2UgPj4gMTYpOwotCQkJKmJ1ZnB0cisrID0gKGNoYXIpKGJhc2UgPj4gOCk7Ci0JCQkqYnVmcHRyKysgPSAoY2hhcikoYmFzZSk7Ci0KLQkJCWlmIChyZW0gPiAyNTUpIHsKLQkJCQkqYnVmcHRyKysgPSAyNTU7Ci0JCQkJKmJ1ZnB0cisrID0gKGNoYXIpKHNvdXJjZSA+PiAxNik7Ci0JCQkJKmJ1ZnB0cisrID0gKGNoYXIpKHNvdXJjZSA+PiA4KTsKLQkJCQkqYnVmcHRyKysgPSAoY2hhcikoc291cmNlKTsKLQotCQkJCXJlbSAtPSAyNTU7Ci0JCQkJYmFzZSArPSAyNTUgKiAyOwotCQkJCXNvdXJjZSArPSAyNTUgKiAyOwotCi0JCQl9IGVsc2UgewotCQkJCSpidWZwdHIrKyA9IHJlbTsKLQkJCQkqYnVmcHRyKysgPSAoY2hhcikoc291cmNlID4+IDE2KTsKLQkJCQkqYnVmcHRyKysgPSAoY2hhcikoc291cmNlID4+IDgpOwotCQkJCSpidWZwdHIrKyA9IChjaGFyKShzb3VyY2UpOwotCi0JCQkJYmFzZSArPSByZW0gKiAyOwotCQkJCXNvdXJjZSArPSByZW0gKiAyOwotCQkJCXJlbSA9IDA7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoYnVmcHRyID4gZGV2X2luZm8tPmJ1ZikKLQkJcmV0ID0gZGxmYl9idWxrX21zZyhkZXZfaW5mbywgYnVmcHRyIC0gZGV2X2luZm8tPmJ1Zik7Ci0KLQltdXRleF91bmxvY2soJmRldl9pbmZvLT5idWxrX211dGV4KTsKLQotCXJldHVybiAxOwotCi19Ci0KLXN0YXRpYyBpbnQKLWNvcHlhcmVhKHN0cnVjdCBkbGZiX2RhdGEgKmRldl9pbmZvLCBpbnQgZHgsIGludCBkeSwgaW50IHN4LCBpbnQgc3ksCi0JIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLQlpbnQgYmFzZTsKLQlpbnQgc291cmNlOwotCWludCByZW07Ci0JaW50IGksIHJldDsKLQotCWNoYXIgKmJ1ZnB0cjsKLQotCWlmIChkeCArIHdpZHRoID4gZGV2X2luZm8tPmluZm8tPnZhci54cmVzKQorCWlmICgod2lkdGggPD0gMCkgfHwKKwkgICAgKHggKyB3aWR0aCA+IGRldi0+aW5mby0+dmFyLnhyZXMpIHx8CisJICAgICh5ICsgaGVpZ2h0ID4gZGV2LT5pbmZvLT52YXIueXJlcykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGR5ICsgaGVpZ2h0ID4gZGV2X2luZm8tPmluZm8tPnZhci55cmVzKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWF0b21pY19yZWFkKCZkZXYtPnVzYl9hY3RpdmUpKQorCQlyZXR1cm4gMDsKIAotCW11dGV4X2xvY2soJmRldl9pbmZvLT5idWxrX211dGV4KTsKKwl1cmIgPSBkbGZiX2dldF91cmIoZGV2KTsKKwlpZiAoIXVyYikKKwkJcmV0dXJuIDA7CisJY21kID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CiAKLQliYXNlID0KLQkgICAgZGV2X2luZm8tPmJhc2UxNiArIChkZXZfaW5mby0+aW5mby0+dmFyLnhyZXMgKiAyICogZHkpICsgKGR4ICogMik7Ci0Jc291cmNlID0gKGRldl9pbmZvLT5pbmZvLT52YXIueHJlcyAqIDIgKiBzeSkgKyAoc3ggKiAyKTsKKwlmb3IgKGkgPSB5OyBpIDwgeSArIGhlaWdodCA7IGkrKykgeworCQljb25zdCBpbnQgbGluZV9vZmZzZXQgPSBkZXYtPmluZm8tPmZpeC5saW5lX2xlbmd0aCAqIGk7CisJCWNvbnN0IGludCBieXRlX29mZnNldCA9IGxpbmVfb2Zmc2V0ICsgKHggKiBCUFApOwogCi0JYnVmcHRyID0gZGV2X2luZm8tPmJ1ZjsKLQotCWZvciAoaSA9IHN5OyBpIDwgc3kgKyBoZWlnaHQ7IGkrKykgewotCi0JCW1lbWNweShkZXZfaW5mby0+YmFja2luZ19idWZmZXIgKyBiYXNlIC0gZGV2X2luZm8tPmJhc2UxNiwKLQkJICAgICAgIGRldl9pbmZvLT5iYWNraW5nX2J1ZmZlciArIHNvdXJjZSwgd2lkdGggKiAyKTsKLQotCQlpZiAoZGV2X2luZm8tPmJ1ZmVuZCAtIGJ1ZnB0ciA8IEJVRl9ISUdIX1dBVEVSX01BUkspIHsKLQkJCXJldCA9IGRsZmJfYnVsa19tc2coZGV2X2luZm8sIGJ1ZnB0ciAtIGRldl9pbmZvLT5idWYpOwotCQkJYnVmcHRyID0gZGV2X2luZm8tPmJ1ZjsKLQkJfQotCi0JCXJlbSA9IHdpZHRoOwotCi0JCXdoaWxlIChyZW0pIHsKLQotCQkJaWYgKGRldl9pbmZvLT5idWZlbmQgLSBidWZwdHIgPCBCVUZfSElHSF9XQVRFUl9NQVJLKSB7Ci0JCQkJcmV0ID0KLQkJCQkgICAgZGxmYl9idWxrX21zZyhkZXZfaW5mbywKLQkJCQkJCSAgYnVmcHRyIC0gZGV2X2luZm8tPmJ1Zik7Ci0JCQkJYnVmcHRyID0gZGV2X2luZm8tPmJ1ZjsKLQkJCX0KLQotCQkJKmJ1ZnB0cisrID0gMHhBRjsKLQkJCSpidWZwdHIrKyA9IDB4NkE7Ci0KLQkJCSpidWZwdHIrKyA9IChjaGFyKShiYXNlID4+IDE2KTsKLQkJCSpidWZwdHIrKyA9IChjaGFyKShiYXNlID4+IDgpOwotCQkJKmJ1ZnB0cisrID0gKGNoYXIpKGJhc2UpOwotCi0JCQlpZiAocmVtID4gMjU1KSB7Ci0JCQkJKmJ1ZnB0cisrID0gMjU1OwotCQkJCSpidWZwdHIrKyA9IChjaGFyKShzb3VyY2UgPj4gMTYpOwotCQkJCSpidWZwdHIrKyA9IChjaGFyKShzb3VyY2UgPj4gOCk7Ci0JCQkJKmJ1ZnB0cisrID0gKGNoYXIpKHNvdXJjZSk7Ci0KLQkJCQlyZW0gLT0gMjU1OwotCQkJCWJhc2UgKz0gMjU1ICogMjsKLQkJCQlzb3VyY2UgKz0gMjU1ICogMjsKLQotCQkJfSBlbHNlIHsKLQkJCQkqYnVmcHRyKysgPSByZW07Ci0JCQkJKmJ1ZnB0cisrID0gKGNoYXIpKHNvdXJjZSA+PiAxNik7Ci0JCQkJKmJ1ZnB0cisrID0gKGNoYXIpKHNvdXJjZSA+PiA4KTsKLQkJCQkqYnVmcHRyKysgPSAoY2hhcikoc291cmNlKTsKLQotCQkJCWJhc2UgKz0gcmVtICogMjsKLQkJCQlzb3VyY2UgKz0gcmVtICogMjsKLQkJCQlyZW0gPSAwOwotCQkJfQotCQl9Ci0KLQkJYmFzZSArPSAoZGV2X2luZm8tPmluZm8tPnZhci54cmVzICogMikgLSAod2lkdGggKiAyKTsKLQkJc291cmNlICs9IChkZXZfaW5mby0+aW5mby0+dmFyLnhyZXMgKiAyKSAtICh3aWR0aCAqIDIpOworCQlkbGZiX3JlbmRlcl9obGluZShkZXYsICZ1cmIsIChjaGFyICopIGRldi0+aW5mby0+Zml4LnNtZW1fc3RhcnQsCisJCQkJICAmY21kLCBieXRlX29mZnNldCwgd2lkdGggKiBCUFAsCisJCQkJICAmYnl0ZXNfaWRlbnRpY2FsLCAmYnl0ZXNfc2VudCk7CiAJfQogCi0JaWYgKGJ1ZnB0ciA+IGRldl9pbmZvLT5idWYpCi0JCXJldCA9IGRsZmJfYnVsa19tc2coZGV2X2luZm8sIGJ1ZnB0ciAtIGRldl9pbmZvLT5idWYpOworCWlmIChjbWQgPiAoY2hhciAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcikgeworCQkvKiBTZW5kIHBhcnRpYWwgYnVmZmVyIHJlbWFpbmluZyBiZWZvcmUgZXhpdGluZyAqLworCQlpbnQgbGVuID0gY21kIC0gKGNoYXIgKikgdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJCXJldCA9IGRsZmJfc3VibWl0X3VyYihkZXYsIHVyYiwgbGVuKTsKKwkJYnl0ZXNfc2VudCArPSBsZW47CisJfSBlbHNlCisJCWRsZmJfdXJiX2NvbXBsZXRpb24odXJiKTsKIAotCW11dGV4X3VubG9jaygmZGV2X2luZm8tPmJ1bGtfbXV0ZXgpOworCWF0b21pY19hZGQoYnl0ZXNfc2VudCwgJmRldi0+Ynl0ZXNfc2VudCk7CisJYXRvbWljX2FkZChieXRlc19pZGVudGljYWwsICZkZXYtPmJ5dGVzX2lkZW50aWNhbCk7CisJYXRvbWljX2FkZCh3aWR0aCpoZWlnaHQqMiwgJmRldi0+Ynl0ZXNfcmVuZGVyZWQpOworCWVuZF9jeWNsZXMgPSBnZXRfY3ljbGVzKCk7CisJYXRvbWljX2FkZCgoKHVuc2lnbmVkIGludCkgKChlbmRfY3ljbGVzIC0gc3RhcnRfY3ljbGVzKQorCQkgICAgPj4gMTApKSwgLyogS2N5Y2xlcyAqLworCQkgICAmZGV2LT5jcHVfa2N5Y2xlc191c2VkKTsKIAotCXJldHVybiAxOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkbGZiX2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKmFyZWEpCisvKiBoYXJkd2FyZSBoYXMgbmF0aXZlIENPUFkgY29tbWFuZCAoc2VlIGxpYmRsbyksIGJ1dCBub3Qgd29ydGggaXQgZm9yIGZiY29uICovCitzdGF0aWMgdm9pZCBkbGZiX29wc19jb3B5YXJlYShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCQljb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKmFyZWEpCiB7CiAKIAlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBpbmZvLT5wYXI7CiAKLQljb3B5YXJlYShkZXYsIGFyZWEtPmR4LCBhcmVhLT5keSwgYXJlYS0+c3gsIGFyZWEtPnN5LCBhcmVhLT53aWR0aCwKLQkJIGFyZWEtPmhlaWdodCk7CisjaWYgZGVmaW5lZCBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIHx8IGRlZmluZWQgQ09ORklHX0ZCX1NZU19DT1BZQVJFQV9NT0RVTEUKIAotCS8qIHByaW50aygiQ09QWSBBUkVBICVkICVkICVkICVkICVkICVkICEhIVxuIiwgYXJlYS0+ZHgsIGFyZWEtPmR5LCBhcmVhLT5zeCwgYXJlYS0+c3ksIGFyZWEtPndpZHRoLCBhcmVhLT5oZWlnaHQpOyAqLworCXN5c19jb3B5YXJlYShpbmZvLCBhcmVhKTsKKworCWRsZmJfaGFuZGxlX2RhbWFnZShkZXYsIGFyZWEtPmR4LCBhcmVhLT5keSwKKwkJCWFyZWEtPndpZHRoLCBhcmVhLT5oZWlnaHQsIGluZm8tPnNjcmVlbl9iYXNlKTsKKyNlbmRpZgorCWF0b21pY19pbmMoJmRldi0+Y29weV9jb3VudCk7CiAKIH0KIAotc3RhdGljIHZvaWQgZGxmYl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCitzdGF0aWMgdm9pZCBkbGZiX29wc19pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSkKIHsKKwlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBpbmZvLT5wYXI7CiAKKyNpZiBkZWZpbmVkIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIHx8IGRlZmluZWQgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVRfTU9EVUxFCisKKwlzeXNfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKKworCWRsZmJfaGFuZGxlX2RhbWFnZShkZXYsIGltYWdlLT5keCwgaW1hZ2UtPmR5LAorCQkJaW1hZ2UtPndpZHRoLCBpbWFnZS0+aGVpZ2h0LCBpbmZvLT5zY3JlZW5fYmFzZSk7CisKKyNlbmRpZgorCisJYXRvbWljX2luYygmZGV2LT5ibGl0X2NvdW50KTsKK30KKworc3RhdGljIHZvaWQgZGxmYl9vcHNfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkgIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkKK3sKKwlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBpbmZvLT5wYXI7CisKKyNpZiBkZWZpbmVkIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgfHwgZGVmaW5lZCBDT05GSUdfRkJfU1lTX0ZJTExSRUNUX01PRFVMRQorCisJc3lzX2ZpbGxyZWN0KGluZm8sIHJlY3QpOworCisJZGxmYl9oYW5kbGVfZGFtYWdlKGRldiwgcmVjdC0+ZHgsIHJlY3QtPmR5LCByZWN0LT53aWR0aCwKKwkJCSAgICAgIHJlY3QtPmhlaWdodCwgaW5mby0+c2NyZWVuX2Jhc2UpOworI2VuZGlmCisKKwlhdG9taWNfaW5jKCZkZXYtPmZpbGxfY291bnQpOworCit9CisKK3N0YXRpYyB2b2lkIGRsZmJfZ2V0X2VkaWQoc3RydWN0IGRsZmJfZGF0YSAqZGV2KQoreworCWludCBpOwogCWludCByZXQ7Ci0Jc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gaW5mby0+cGFyOwotCS8qIHByaW50aygiSU1BR0UgQkxJVCAoMSkgJWQgJWQgJWQgJWQgREVQVEggJWQgeyVwfSEhIVxuIiwgaW1hZ2UtPmR4LCBpbWFnZS0+ZHksIGltYWdlLT53aWR0aCwgaW1hZ2UtPmhlaWdodCwgaW1hZ2UtPmRlcHRoLCBkZXYtPnVkZXYpOyAqLwotCWNmYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOwotCXJldCA9Ci0JICAgIGltYWdlX2JsaXQoZGV2LCBpbWFnZS0+ZHgsIGltYWdlLT5keSwgaW1hZ2UtPndpZHRoLCBpbWFnZS0+aGVpZ2h0LAotCQkgICAgICAgaW5mby0+c2NyZWVuX2Jhc2UpOwotCS8qIHByaW50aygiSU1BR0UgQkxJVCAoMikgJWQgJWQgJWQgJWQgREVQVEggJWQgeyVwfSAlZCEhIVxuIiwgaW1hZ2UtPmR4LCBpbWFnZS0+ZHksIGltYWdlLT53aWR0aCwgaW1hZ2UtPmhlaWdodCwgaW1hZ2UtPmRlcHRoLCBkZXYtPnVkZXYsIHJldCk7ICovCisJY2hhciByYnVmWzJdOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihkZXYtPmVkaWQpOyBpKyspIHsKKwkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKKwkJCQkgICAgdXNiX3JjdmN0cmxwaXBlKGRldi0+dWRldiwgMCksICgweDAyKSwKKwkJCQkgICAgKDB4ODAgfCAoMHgwMiA8PCA1KSksIGkgPDwgOCwgMHhBMSwgcmJ1ZiwgMiwKKwkJCQkgICAgMCk7CisJCWRldi0+ZWRpZFtpXSA9IHJidWZbMV07CisJfQogfQogCi1zdGF0aWMgdm9pZCBkbGZiX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLAotCQkJICBjb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKnJlZ2lvbikKK3N0YXRpYyBpbnQgZGxmYl9vcHNfaW9jdGwoc3RydWN0IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBjbWQsCisJCQkJdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAKLQl1bnNpZ25lZCBjaGFyIHJlZCwgZ3JlZW4sIGJsdWU7CiAJc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gaW5mby0+cGFyOwotCi0JbWVtY3B5KCZyZWQsICZyZWdpb24tPmNvbG9yLCAxKTsKLQltZW1jcHkoJmdyZWVuLCAmcmVnaW9uLT5jb2xvciArIDEsIDEpOwotCW1lbWNweSgmYmx1ZSwgJnJlZ2lvbi0+Y29sb3IgKyAyLCAxKTsKLQlkcmF3X3JlY3QoZGV2LCByZWdpb24tPmR4LCByZWdpb24tPmR5LCByZWdpb24tPndpZHRoLCByZWdpb24tPmhlaWdodCwKLQkJICByZWQsIGdyZWVuLCBibHVlKTsKLQkvKiBwcmludGsoIkZJTEwgUkVDVCAlZCAlZCAhISFcbiIsIHJlZ2lvbi0+ZHgsIHJlZ2lvbi0+ZHkpOyAqLwotCi19Ci0KLXN0YXRpYyBpbnQgZGxmYl9pb2N0bChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0KLQlzdHJ1Y3QgZGxmYl9kYXRhICpkZXZfaW5mbyA9IGluZm8tPnBhcjsKIAlzdHJ1Y3QgZGxvYXJlYSAqYXJlYSA9IE5VTEw7CiAKLQlpZiAoY21kID09IDB4QUQpIHsKKwlpZiAoIWF0b21pY19yZWFkKCZkZXYtPnVzYl9hY3RpdmUpKQorCQlyZXR1cm4gMDsKKworCS8qIFRPRE86IFVwZGF0ZSBYIHNlcnZlciB0byBnZXQgdGhpcyBmcm9tIHN5c2ZzIGluc3RlYWQgKi8KKwlpZiAoY21kID09IERMRkJfSU9DVExfUkVUVVJOX0VESUQpIHsKIAkJY2hhciAqZWRpZCA9IChjaGFyICopYXJnOwotCQlkbGZiX2VkaWQoZGV2X2luZm8pOwotCQlpZiAoY29weV90b191c2VyKGVkaWQsIGRldl9pbmZvLT5lZGlkLCAxMjgpKSB7CisJCWRsZmJfZ2V0X2VkaWQoZGV2KTsKKwkJaWYgKGNvcHlfdG9fdXNlcihlZGlkLCBkZXYtPmVkaWQsIHNpemVvZihkZXYtPmVkaWQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQl9CiAJCXJldHVybiAwOwogCX0KIAotCWlmIChjbWQgPT0gMHhBQSB8fCBjbWQgPT0gMHhBQiB8fCBjbWQgPT0gMHhBQykgeworCS8qIFRPRE86IEhlbHAgcHJvcG9zZSBhIHN0YW5kYXJkIGZiLmggaW9jdGwgdG8gcmVwb3J0IG1tYXAgZGFtYWdlICovCisJaWYgKGNtZCA9PSBETEZCX0lPQ1RMX1JFUE9SVF9EQU1BR0UpIHsKIAogCQlhcmVhID0gKHN0cnVjdCBkbG9hcmVhICopYXJnOwogCkBAIC02MzQsMzYgKzcwMywyMCBAQAogCiAJCWlmIChhcmVhLT55ID4gaW5mby0+dmFyLnlyZXMpCiAJCQlhcmVhLT55ID0gaW5mby0+dmFyLnlyZXM7Ci0JfQogCi0JaWYgKGNtZCA9PSAweEFBKSB7Ci0JCWltYWdlX2JsaXQoZGV2X2luZm8sIGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgsCisJCWF0b21pY19zZXQoJmRldi0+dXNlX2RlZmlvLCAwKTsKKworCQlkbGZiX2hhbmRsZV9kYW1hZ2UoZGV2LCBhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oLAogCQkJICAgaW5mby0+c2NyZWVuX2Jhc2UpOworCQlhdG9taWNfaW5jKCZkZXYtPmRhbWFnZV9jb3VudCk7CiAJfQotCWlmIChjbWQgPT0gMHhBQykgewotCQljb3B5ZmIoZGV2X2luZm8pOwotCQlpbWFnZV9ibGl0KGRldl9pbmZvLCBhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oLAotCQkJICAgaW5mby0+c2NyZWVuX2Jhc2UpOwotCQlzd2FwZmIoZGV2X2luZm8pOwotCX0gZWxzZSBpZiAoY21kID09IDB4QUIpIHsKIAotCQlpZiAoYXJlYS0+eDIgPCAwKQotCQkJYXJlYS0+eDIgPSAwOwotCi0JCWlmIChhcmVhLT55MiA8IDApCi0JCQlhcmVhLT55MiA9IDA7Ci0KLQkJY29weWFyZWEoZGV2X2luZm8sCi0JCQkgYXJlYS0+eDIsIGFyZWEtPnkyLCBhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LAotCQkJIGFyZWEtPmgpOwotCX0KIAlyZXR1cm4gMDsKIH0KIAogLyogdGFrZW4gZnJvbSB2ZXNhZmIgKi8KLQogc3RhdGljIGludAotZGxmYl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCitkbGZiX29wc19zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCiAJICAgICAgIHVuc2lnbmVkIGJsdWUsIHVuc2lnbmVkIHRyYW5zcCwgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJaW50IGVyciA9IDA7CkBAIC02ODgsMjM0ICs3NDEsNjk4IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBkbGZiX3JlbGVhc2Uoc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQorLyoKKyAqIEl0J3MgY29tbW9uIGZvciBzZXZlcmFsIGNsaWVudHMgdG8gaGF2ZSBmcmFtZWJ1ZmZlciBvcGVuIHNpbXVsdGFuZW91c2x5LgorICogZS5nLiBib3RoIGZiY29uIGFuZCBYLiBNYWtlcyB0aGluZ3MgaW50ZXJlc3RpbmcuCisgKi8KK3N0YXRpYyBpbnQgZGxmYl9vcHNfb3BlbihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCiB7Ci0Jc3RydWN0IGRsZmJfZGF0YSAqZGV2X2luZm8gPSBpbmZvLT5wYXI7Ci0JaW1hZ2VfYmxpdChkZXZfaW5mbywgMCwgMCwgaW5mby0+dmFyLnhyZXMsIGluZm8tPnZhci55cmVzLAotCQkgICBpbmZvLT5zY3JlZW5fYmFzZSk7CisJc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gaW5mby0+cGFyOworCisvKglpZiAodXNlciA9PSAwKQorICoJCVdlIGNvdWxkIHNwZWNpYWwgY2FzZSBrZXJuZWwgbW9kZSBjbGllbnRzIChmYmNvbikgaGVyZQorICovCisKKwltdXRleF9sb2NrKCZkZXYtPmZiX29wZW5fbG9jayk7CisKKwlkZXYtPmZiX2NvdW50Kys7CisKKyNpZmRlZiBDT05GSUdfRkJfREVGRVJSRURfSU8KKwlpZiAoKGF0b21pY19yZWFkKCZkZXYtPnVzZV9kZWZpbykpICYmIChpbmZvLT5mYmRlZmlvID09IE5VTEwpKSB7CisJCS8qIGVuYWJsZSBkZWZpbyAqLworCQlpbmZvLT5mYmRlZmlvID0gJmRsZmJfZGVmaW87CisJCWZiX2RlZmVycmVkX2lvX2luaXQoaW5mbyk7CisJfQorI2VuZGlmCisKKwlkbF9ub3RpY2UoIm9wZW4gL2Rldi9mYiVkIHVzZXI9JWQgZmJfaW5mbz0lcCBjb3VudD0lZFxuIiwKKwkgICAgaW5mby0+bm9kZSwgdXNlciwgaW5mbywgZGV2LT5mYl9jb3VudCk7CisKKwltdXRleF91bmxvY2soJmRldi0+ZmJfb3Blbl9sb2NrKTsKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRsZmJfYmxhbmsoaW50IGJsYW5rX21vZGUsIHN0cnVjdCBmYl9pbmZvICppbmZvKQorc3RhdGljIGludCBkbGZiX29wc19yZWxlYXNlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcikKIHsKLQlzdHJ1Y3QgZGxmYl9kYXRhICpkZXZfaW5mbyA9IGluZm8tPnBhcjsKLQljaGFyICpidWZwdHIgPSBkZXZfaW5mby0+YnVmOworCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IGluZm8tPnBhcjsKIAotCWJ1ZnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyKGJ1ZnB0ciwgMHhGRiwgMHgwMCk7Ci0JaWYgKGJsYW5rX21vZGUgIT0gRkJfQkxBTktfVU5CTEFOSykgewotCQlidWZwdHIgPSBkbGZiX3NldF9yZWdpc3RlcihidWZwdHIsIDB4MUYsIDB4MDEpOwotCX0gZWxzZSB7Ci0JCWJ1ZnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyKGJ1ZnB0ciwgMHgxRiwgMHgwMCk7CisJbXV0ZXhfbG9jaygmZGV2LT5mYl9vcGVuX2xvY2spOworCisJZGV2LT5mYl9jb3VudC0tOworCisjaWZkZWYgQ09ORklHX0ZCX0RFRkVSUkVEX0lPCisJaWYgKChkZXYtPmZiX2NvdW50ID09IDApICYmIChpbmZvLT5mYmRlZmlvKSkgeworCQlmYl9kZWZlcnJlZF9pb19jbGVhbnVwKGluZm8pOworCQlpbmZvLT5mYmRlZmlvID0gTlVMTDsKKwkJaW5mby0+ZmJvcHMtPmZiX21tYXAgPSBkbGZiX29wc19tbWFwOwogCX0KLQlidWZwdHIgPSBkbGZiX3NldF9yZWdpc3RlcihidWZwdHIsIDB4RkYsIDB4RkYpOworI2VuZGlmCiAKLQlkbGZiX2J1bGtfbXNnKGRldl9pbmZvLCBidWZwdHIgLSBkZXZfaW5mby0+YnVmKTsKKwlkbF9ub3RpY2UoInJlbGVhc2UgL2Rldi9mYiVkIHVzZXI9JWQgY291bnQ9JWRcbiIsCisJCSAgaW5mby0+bm9kZSwgdXNlciwgZGV2LT5mYl9jb3VudCk7CisKKwltdXRleF91bmxvY2soJmRldi0+ZmJfb3Blbl9sb2NrKTsKKworCXJldHVybiAwOworfQorCisvKgorICogQ2FsbGVkIHdoZW4gYWxsIGNsaWVudCBpbnRlcmZhY2VzIHRvIHN0YXJ0IHRyYW5zYWN0aW9ucyBoYXZlIGJlZW4gZGlzYWJsZWQsCisgKiBhbmQgYWxsIHJlZmVyZW5jZXMgdG8gb3VyIGRldmljZSBpbnN0YW5jZSAoZGxmYl9kYXRhKSBhcmUgcmVsZWFzZWQuCisgKiBFdmVyeSB0cmFuc2FjdGlvbiBtdXN0IGhhdmUgYSByZWZlcmVuY2UsIHNvIHdlIGtub3cgYXJlIGZ1bGx5IHNwdW4gZG93bgorICovCitzdGF0aWMgdm9pZCBkbGZiX2RlbGV0ZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IGRsZmJfZGF0YSwga3JlZik7CisKKwlpZiAoZGV2LT5iYWNraW5nX2J1ZmZlcikKKwkJdmZyZWUoZGV2LT5iYWNraW5nX2J1ZmZlcik7CisKKwltdXRleF9kZXN0cm95KCZkZXYtPmZiX29wZW5fbG9jayk7CisKKwlrZnJlZShkZXYpOworfQorCisvKgorICogQ2FsbGVkIGJ5IGZiZGV2IGFzIGxhc3QgcGFydCBvZiB1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCkgcHJvY2VzcworICogTm8gbmV3IGNsaWVudHMgY2FuIG9wZW4gY29ubmVjdGlvbnMuIERlYWxsb2NhdGUgZXZlcnl0aGluZyBmYl9pbmZvLgorICovCitzdGF0aWMgdm9pZCBkbGZiX29wc19kZXN0cm95KHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IGluZm8tPnBhcjsKKworCWlmIChpbmZvLT5jbWFwLmxlbiAhPSAwKQorCQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOworCWlmIChpbmZvLT5tb25zcGVjcy5tb2RlZGIpCisJCWZiX2Rlc3Ryb3lfbW9kZWRiKGluZm8tPm1vbnNwZWNzLm1vZGVkYik7CisJaWYgKGluZm8tPnNjcmVlbl9iYXNlKQorCQl2ZnJlZShpbmZvLT5zY3JlZW5fYmFzZSk7CisKKwlmYl9kZXN0cm95X21vZGVsaXN0KCZpbmZvLT5tb2RlbGlzdCk7CisKKwlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOworCisJLyogcmVmIHRha2VuIGJlZm9yZSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcigpIGZvciBkbGZiX2RhdGEgY2xpZW50cyAqLworCWtyZWZfcHV0KCZkZXYtPmtyZWYsIGRsZmJfZGVsZXRlKTsKK30KKworLyoKKyAqIENoZWNrIHdoZXRoZXIgYSB2aWRlbyBtb2RlIGlzIHN1cHBvcnRlZCBieSB0aGUgRGlzcGxheUxpbmsgY2hpcAorICogV2Ugc3RhcnQgZnJvbSBtb25pdG9yJ3MgbW9kZXMsIHNvIGRvbid0IG5lZWQgdG8gZmlsdGVyIHRoYXQgaGVyZQorICovCitzdGF0aWMgaW50IGRsZmJfaXNfdmFsaWRfbW9kZShzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlLAorCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBpbmZvLT5wYXI7CisKKwlpZiAobW9kZS0+eHJlcyAqIG1vZGUtPnlyZXMgPiBkZXYtPnNrdV9waXhlbF9saW1pdCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgZGxmYl92YXJfY29sb3JfZm9ybWF0KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQoreworCWNvbnN0IHN0cnVjdCBmYl9iaXRmaWVsZCByZWQgPSB7IDExLCA1LCAwIH07CisJY29uc3Qgc3RydWN0IGZiX2JpdGZpZWxkIGdyZWVuID0geyA1LCA2LCAwIH07CisJY29uc3Qgc3RydWN0IGZiX2JpdGZpZWxkIGJsdWUgPSB7IDAsIDUsIDAgfTsKKworCXZhci0+Yml0c19wZXJfcGl4ZWwgPSAxNjsKKwl2YXItPnJlZCA9IHJlZDsKKwl2YXItPmdyZWVuID0gZ3JlZW47CisJdmFyLT5ibHVlID0gYmx1ZTsKK30KKworc3RhdGljIGludCBkbGZiX29wc19jaGVja192YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCisJCQkJc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGZiX3ZpZGVvbW9kZSBtb2RlOworCisJLyogVE9ETzogc3VwcG9ydCBkeW5hbWljYWxseSBjaGFuZ2luZyBmcmFtZWJ1ZmZlciBzaXplICovCisJaWYgKCh2YXItPnhyZXMgKiB2YXItPnlyZXMgKiAyKSA+IGluZm8tPmZpeC5zbWVtX2xlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBzZXQgZGV2aWNlLXNwZWNpZmljIGVsZW1lbnRzIG9mIHZhciB1bnJlbGF0ZWQgdG8gbW9kZSAqLworCWRsZmJfdmFyX2NvbG9yX2Zvcm1hdCh2YXIpOworCisJZmJfdmFyX3RvX3ZpZGVvbW9kZSgmbW9kZSwgdmFyKTsKKworCWlmICghZGxmYl9pc192YWxpZF9tb2RlKCZtb2RlLCBpbmZvKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbGZiX29wc19zZXRfcGFyKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IGluZm8tPnBhcjsKKworCWRsX25vdGljZSgic2V0X3BhciBtb2RlICVkeCVkXG4iLCBpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMpOworCisJcmV0dXJuIGRsZmJfc2V0X3ZpZGVvX21vZGUoZGV2LCAmaW5mby0+dmFyKTsKK30KKworc3RhdGljIGludCBkbGZiX29wc19ibGFuayhpbnQgYmxhbmtfbW9kZSwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gaW5mby0+cGFyOworCWNoYXIgKmJ1ZnB0cjsKKwlzdHJ1Y3QgdXJiICp1cmI7CisKKwl1cmIgPSBkbGZiX2dldF91cmIoZGV2KTsKKwlpZiAoIXVyYikKKwkJcmV0dXJuIDA7CisJYnVmcHRyID0gKGNoYXIgKikgdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwkvKiBvdmVybG9hZGluZyB1c2JfYWN0aXZlLiAgVU5CTEFOSyBjYW4gY29uZmxpY3Qgd2l0aCB0ZWFyZG93biAqLworCisJYnVmcHRyID0gZGxmYl92aWRyZWdfbG9jayhidWZwdHIpOworCWlmIChibGFua19tb2RlICE9IEZCX0JMQU5LX1VOQkxBTkspIHsKKwkJYXRvbWljX3NldCgmZGV2LT51c2JfYWN0aXZlLCAwKTsKKwkJYnVmcHRyID0gZGxmYl9lbmFibGVfaHZzeW5jKGJ1ZnB0ciwgZmFsc2UpOworCX0gZWxzZSB7CisJCWF0b21pY19zZXQoJmRldi0+dXNiX2FjdGl2ZSwgMSk7CisJCWJ1ZnB0ciA9IGRsZmJfZW5hYmxlX2h2c3luYyhidWZwdHIsIHRydWUpOworCX0KKwlidWZwdHIgPSBkbGZiX3ZpZHJlZ191bmxvY2soYnVmcHRyKTsKKworCWRsZmJfc3VibWl0X3VyYihkZXYsIHVyYiwgYnVmcHRyIC0gKGNoYXIgKikgdXJiLT50cmFuc2Zlcl9idWZmZXIpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZmJfb3BzIGRsZmJfb3BzID0gewotCS5mYl9zZXRjb2xyZWcgPSBkbGZiX3NldGNvbHJlZywKLQkuZmJfZmlsbHJlY3QgPSBkbGZiX2ZpbGxyZWN0LAotCS5mYl9jb3B5YXJlYSA9IGRsZmJfY29weWFyZWEsCi0JLmZiX2ltYWdlYmxpdCA9IGRsZmJfaW1hZ2VibGl0LAotCS5mYl9tbWFwID0gZGxmYl9tbWFwLAotCS5mYl9pb2N0bCA9IGRsZmJfaW9jdGwsCi0JLmZiX3JlbGVhc2UgPSBkbGZiX3JlbGVhc2UsCi0JLmZiX2JsYW5rID0gZGxmYl9ibGFuaywKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZmJfc2V0Y29scmVnID0gZGxmYl9vcHNfc2V0Y29scmVnLAorCS5mYl9maWxscmVjdCA9IGRsZmJfb3BzX2ZpbGxyZWN0LAorCS5mYl9jb3B5YXJlYSA9IGRsZmJfb3BzX2NvcHlhcmVhLAorCS5mYl9pbWFnZWJsaXQgPSBkbGZiX29wc19pbWFnZWJsaXQsCisJLmZiX21tYXAgPSBkbGZiX29wc19tbWFwLAorCS5mYl9pb2N0bCA9IGRsZmJfb3BzX2lvY3RsLAorCS5mYl9vcGVuID0gZGxmYl9vcHNfb3BlbiwKKwkuZmJfcmVsZWFzZSA9IGRsZmJfb3BzX3JlbGVhc2UsCisJLmZiX2JsYW5rID0gZGxmYl9vcHNfYmxhbmssCisJLmZiX2NoZWNrX3ZhciA9IGRsZmJfb3BzX2NoZWNrX3ZhciwKKwkuZmJfc2V0X3BhciA9IGRsZmJfb3BzX3NldF9wYXIsCiB9OwogCi1zdGF0aWMgaW50Ci1kbGZiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKKy8qCisgKiBDYWxscyBkbGZiX2dldF9lZGlkKCkgdG8gcXVlcnkgdGhlIEVESUQgb2YgYXR0YWNoZWQgbW9uaXRvciB2aWEgdXNiIGNtZHMKKyAqIFRoZW4gcGFyc2VzIEVESUQgaW50byB0aHJlZSBwbGFjZXMgdXNlZCBieSB2YXJpb3VzIHBhcnRzIG9mIGZiZGV2OgorICogZmJfdmFyX3NjcmVlbmluZm8gY29udGFpbnMgdGhlIHRpbWluZyBvZiB0aGUgbW9uaXRvcidzIHByZWZlcnJlZCBtb2RlCisgKiBmYl9pbmZvLm1vbnNwZWNzIGlzIGZ1bGwgcGFyc2VkIEVESUQgaW5mbywgaW5jbHVkaW5nIG1vbnNwZWNzLm1vZGVkYgorICogZmJfaW5mby5tb2RlbGlzdCBpcyBhIGxpbmtlZCBsaXN0IG9mIGFsbCBtb25pdG9yICYgVkVTQSBtb2RlcyB3aGljaCB3b3JrCisgKgorICogSWYgRURJRCBpcyBub3QgcmVhZGFibGUvdmFsaWQsIHRoZW4gbW9kZWxpc3QgaXMgYWxsIFZFU0EgbW9kZXMsCisgKiBtb25zcGVjcyBpcyBOVUxMLCBhbmQgZmJfdmFyX3NjcmVlbmluZm8gaXMgc2V0IHRvIHNhZmUgVkVTQSBtb2RlCisgKiBSZXR1cm5zIDAgaWYgRURJRCBwYXJzZXMgc3VjY2Vzc2Z1bGx5CisgKi8KK3N0YXRpYyBpbnQgZGxmYl9wYXJzZV9lZGlkKHN0cnVjdCBkbGZiX2RhdGEgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCSAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQlzdHJ1Y3QgZGxmYl9kYXRhICpkZXZfaW5mbzsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlpbnQgaTsKKwljb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlICpkZWZhdWx0X3Ztb2RlID0gTlVMTDsKKwlpbnQgcmVzdWx0ID0gMDsKIAotCWludCByZXQ7Ci0JY2hhciByYnVmWzRdOworCWZiX2Rlc3Ryb3lfbW9kZWxpc3QoJmluZm8tPm1vZGVsaXN0KTsKKwltZW1zZXQoJmluZm8tPm1vbnNwZWNzLCAwLCBzaXplb2YoaW5mby0+bW9uc3BlY3MpKTsKIAotCWRldl9pbmZvID0ga3phbGxvYyhzaXplb2YoKmRldl9pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRldl9pbmZvID09IE5VTEwpIHsKLQkJcHJpbnRrKCJjYW5ub3QgYWxsb2NhdGUgZGV2X2luZm8gc3RydWN0dXJlLlxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KKwlkbGZiX2dldF9lZGlkKGRldik7CisJZmJfZWRpZF90b19tb25zcGVjcyhkZXYtPmVkaWQsICZpbmZvLT5tb25zcGVjcyk7CiAKLQltdXRleF9pbml0KCZkZXZfaW5mby0+YnVsa19tdXRleCk7CisJaWYgKGluZm8tPm1vbnNwZWNzLm1vZGVkYl9sZW4gPiAwKSB7CiAKLQlkZXZfaW5mby0+dWRldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7Ci0JZGV2X2luZm8tPmludGVyZmFjZSA9IGludGVyZmFjZTsKLQotCXByaW50aygiRGlzcGxheUxpbmsgZGV2aWNlIGF0dGFjaGVkXG4iKTsKLQotCS8qIGFkZCBmcmFtZWJ1ZmZlciBpbmZvIHRvIHVzYiBpbnRlcmZhY2UgKi8KLQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgZGV2X2luZm8pOwotCi0JZGV2X2luZm8tPmJ1ZiA9IGttYWxsb2MoQlVGX1NJWkUsIEdGUF9LRVJORUwpOwotCS8qIHVzYl9idWZmZXJfYWxsb2MoZGV2X2luZm8tPnVkZXYsIEJVRl9TSVpFICwgR0ZQX0tFUk5FTCwgJmRldl9pbmZvLT50eF91cmItPnRyYW5zZmVyX2RtYSk7ICovCi0KLQlpZiAoZGV2X2luZm8tPmJ1ZiA9PSBOVUxMKSB7Ci0JCXByaW50aygidW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZGxmYiBjb21tYW5kc1xuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQlkZXZfaW5mby0+YnVmZW5kID0gZGV2X2luZm8tPmJ1ZiArIEJVRl9TSVpFOwotCi0JZGV2X2luZm8tPnR4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JdXNiX2ZpbGxfYnVsa191cmIoZGV2X2luZm8tPnR4X3VyYiwgZGV2X2luZm8tPnVkZXYsCi0JCQkgIHVzYl9zbmRidWxrcGlwZShkZXZfaW5mby0+dWRldiwgMSksIGRldl9pbmZvLT5idWYsIDAsCi0JCQkgIGRsZmJfYnVsa19jYWxsYmFjaywgZGV2X2luZm8pOwotCi0JcmV0ID0KLQkgICAgdXNiX2NvbnRyb2xfbXNnKGRldl9pbmZvLT51ZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2X2luZm8tPnVkZXYsIDApLAotCQkJICAgICgweDA2KSwgKDB4ODAgfCAoMHgwMiA8PCA1KSksIDAsIDAsIHJidWYsIDQsIDApOwotCXByaW50aygicmV0IGNvbnRyb2wgbXNnIDA6ICVkICV4JXgleCV4XG4iLCByZXQsIHJidWZbMF0sIHJidWZbMV0sCi0JICAgICAgIHJidWZbMl0sIHJidWZbM10pOwotCi0JZGxmYl9lZGlkKGRldl9pbmZvKTsKLQotCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2YodTMyKSAqIDI1NiwgJmRldl9pbmZvLT51ZGV2LT5kZXYpOwotCi0JaWYgKCFpbmZvKSB7Ci0JCXByaW50aygibm9uIHBvc3NvIGFsbG9jYXJlIGlsIGZyYW1lYnVmZmVyIGRpc3BsYXlsaW5rIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWZiX3BhcnNlX2VkaWQoZGV2X2luZm8tPmVkaWQsICZpbmZvLT52YXIpOwotCi0JcHJpbnRrKCJFRElEIFhSRVMgJWQgWVJFUyAlZFxuIiwgaW5mby0+dmFyLnhyZXMsIGluZm8tPnZhci55cmVzKTsKLQotCWlmIChkbGZiX3NldF92aWRlb19tb2RlKGRldl9pbmZvLCBpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMpICE9IDApIHsKLQkJaW5mby0+dmFyLnhyZXMgPSAxMjgwOwotCQlpbmZvLT52YXIueXJlcyA9IDEwMjQ7Ci0JCWlmIChkbGZiX3NldF92aWRlb19tb2RlCi0JCSAgICAoZGV2X2luZm8sIGluZm8tPnZhci54cmVzLCBpbmZvLT52YXIueXJlcykgIT0gMCkgewotCQkJZ290byBvdXQ7CisJCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5tb25zcGVjcy5tb2RlZGJfbGVuOyBpKyspIHsKKwkJCWlmIChkbGZiX2lzX3ZhbGlkX21vZGUoJmluZm8tPm1vbnNwZWNzLm1vZGVkYltpXSwgaW5mbykpCisJCQkJZmJfYWRkX3ZpZGVvbW9kZSgmaW5mby0+bW9uc3BlY3MubW9kZWRiW2ldLAorCQkJCQkmaW5mby0+bW9kZWxpc3QpOwogCQl9Ci0JfQogCi0JcHJpbnRrKCJmb3VuZCB2YWxpZCBtb2RlLi4uJWRcbiIsIGluZm8tPnZhci5waXhjbG9jayk7Ci0KLQlpbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IGluZm8tPnBhcjsKLQlpbmZvLT5wYXIgPSBkZXZfaW5mbzsKLQotCWRldl9pbmZvLT5pbmZvID0gaW5mbzsKLQotCWluZm8tPmZsYWdzID0KLQkgICAgRkJJTkZPX0RFRkFVTFQgfCBGQklORk9fUkVBRFNfRkFTVCB8IEZCSU5GT19IV0FDQ0VMX0lNQUdFQkxJVCB8Ci0JICAgIEZCSU5GT19IV0FDQ0VMX0NPUFlBUkVBIHwgRkJJTkZPX0hXQUNDRUxfRklMTFJFQ1Q7Ci0JaW5mby0+ZmJvcHMgPSAmZGxmYl9vcHM7Ci0JaW5mby0+c2NyZWVuX2Jhc2UgPSBydm1hbGxvYyhkZXZfaW5mby0+c2NyZWVuX3NpemUpOwotCi0JaWYgKGluZm8tPnNjcmVlbl9iYXNlID09IE5VTEwpIHsKLQkJcHJpbnRrCi0JCSAgICAoImNhbm5vdCBhbGxvY2F0ZSBmcmFtZWJ1ZmZlciB2aXJ0dWFsIG1lbW9yeSBvZiAlZCBieXRlc1xuIiwKLQkJICAgICBkZXZfaW5mby0+c2NyZWVuX3NpemUpOwotCQlnb3RvIG91dDA7Ci0JfQotCi0JcHJpbnRrKCJzY3JlZW4gYmFzZSBhbGxvY2F0ZWQgISEhXG4iKTsKLQotCWRldl9pbmZvLT5iYWNraW5nX2J1ZmZlciA9IGt6YWxsb2MoZGV2X2luZm8tPnNjcmVlbl9zaXplLCBHRlBfS0VSTkVMKTsKLQotCWlmICghZGV2X2luZm8tPmJhY2tpbmdfYnVmZmVyKQotCQlwcmludGsoIm5vbiBwb3NzbyBhbGxvY2FyZSBpbCBiYWNraW5nIGJ1ZmZlclxuIik7Ci0KLQkvKiBpbmZvLT52YXIgPSBkZXZfaW5mby0+c2k7ICovCi0KLQlpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPSAxNjsKLQlpbmZvLT52YXIuYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9URVNUOwotCWluZm8tPnZhci52bW9kZSA9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQ7Ci0KLQlpbmZvLT52YXIucmVkLm9mZnNldCA9IDExOwotCWluZm8tPnZhci5yZWQubGVuZ3RoID0gNTsKLQlpbmZvLT52YXIucmVkLm1zYl9yaWdodCA9IDA7Ci0KLQlpbmZvLT52YXIuZ3JlZW4ub2Zmc2V0ID0gNTsKLQlpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoID0gNjsKLQlpbmZvLT52YXIuZ3JlZW4ubXNiX3JpZ2h0ID0gMDsKLQotCWluZm8tPnZhci5ibHVlLm9mZnNldCA9IDA7Ci0JaW5mby0+dmFyLmJsdWUubGVuZ3RoID0gNTsKLQlpbmZvLT52YXIuYmx1ZS5tc2JfcmlnaHQgPSAwOwotCi0JLyogaW5mby0+dmFyLnBpeGNsb2NrID0gICgxMDAwMDAwMCAvIEZCX1cgKiAxMDAwIC8gRkJfSCkvMiA7ICovCi0KLQlpbmZvLT5maXguc21lbV9zdGFydCA9ICh1bnNpZ25lZCBsb25nKWluZm8tPnNjcmVlbl9iYXNlOwotCWluZm8tPmZpeC5zbWVtX2xlbiA9IFBBR0VfQUxJR04oZGV2X2luZm8tPnNjcmVlbl9zaXplKTsKLQlpZiAoc3RybGVuKGRldl9pbmZvLT51ZGV2LT5wcm9kdWN0KSA+IDE1KSB7Ci0JCW1lbWNweShpbmZvLT5maXguaWQsIGRldl9pbmZvLT51ZGV2LT5wcm9kdWN0LCAxNSk7CisJCWRlZmF1bHRfdm1vZGUgPSBmYl9maW5kX2Jlc3RfZGlzcGxheSgmaW5mby0+bW9uc3BlY3MsCisJCQkJCQkgICAgICZpbmZvLT5tb2RlbGlzdCk7CiAJfSBlbHNlIHsKLQkJbWVtY3B5KGluZm8tPmZpeC5pZCwgZGV2X2luZm8tPnVkZXYtPnByb2R1Y3QsCi0JCSAgICAgICBzdHJsZW4oZGV2X2luZm8tPnVkZXYtPnByb2R1Y3QpKTsKKwkJc3RydWN0IGZiX3ZpZGVvbW9kZSBmYl92bW9kZSA9IHswfTsKKworCQlkbF9lcnIoIlVuYWJsZSB0byBnZXQgdmFsaWQgRURJRCBmcm9tIGRldmljZS9kaXNwbGF5XG4iKTsKKwkJcmVzdWx0ID0gMTsKKworCQkvKgorCQkgKiBBZGQgdGhlIHN0YW5kYXJkIFZFU0EgbW9kZXMgdG8gb3VyIG1vZGVsaXN0CisJCSAqIFNpbmNlIHdlIGRvbid0IGhhdmUgRURJRCwgdGhlcmUgbWF5IGJlIG1vZGVzIHRoYXQKKwkJICogb3ZlcnNwZWMgbW9uaXRvciBhbmQvb3IgYXJlIGluY29ycmVjdCBhc3BlY3QgcmF0aW8sIGV0Yy4KKwkJICogQnV0IGF0IGxlYXN0IHRoZSB1c2VyIGhhcyBhIGNoYW5jZSB0byBjaG9vc2UKKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBWRVNBX01PREVEQl9TSVpFOyBpKyspIHsKKwkJCWlmIChkbGZiX2lzX3ZhbGlkX21vZGUoKHN0cnVjdCBmYl92aWRlb21vZGUgKikKKwkJCQkJCSZ2ZXNhX21vZGVzW2ldLCBpbmZvKSkKKwkJCQlmYl9hZGRfdmlkZW9tb2RlKCZ2ZXNhX21vZGVzW2ldLAorCQkJCQkJICZpbmZvLT5tb2RlbGlzdCk7CisJCX0KKworCQkvKgorCQkgKiBkZWZhdWx0IHRvIHJlc29sdXRpb24gc2FmZSBmb3IgcHJvamVjdG9ycworCQkgKiAoc2luY2UgdGhleSBhcmUgbW9zdCBjb21tb24gY2FzZSB3aXRob3V0IEVESUQpCisJCSAqLworCQlmYl92bW9kZS54cmVzID0gODAwOworCQlmYl92bW9kZS55cmVzID0gNjAwOworCQlmYl92bW9kZS5yZWZyZXNoID0gNjA7CisJCWRlZmF1bHRfdm1vZGUgPSBmYl9maW5kX25lYXJlc3RfbW9kZSgmZmJfdm1vZGUsCisJCQkJCQkgICAgICZpbmZvLT5tb2RlbGlzdCk7CiAJfQotCWluZm8tPmZpeC50eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxTOwotCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOwotCWluZm8tPmZpeC5hY2NlbCA9IGluZm8tPmZsYWdzOwotCWluZm8tPmZpeC5saW5lX2xlbmd0aCA9IGRldl9pbmZvLT5saW5lX2xlbmd0aDsKIAotCWlmIChmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDApIDwgMCkKLQkJZ290byBvdXQxOworCWZiX3ZpZGVvbW9kZV90b192YXIodmFyLCBkZWZhdWx0X3Ztb2RlKTsKKwlkbGZiX3Zhcl9jb2xvcl9mb3JtYXQodmFyKTsKIAotCXByaW50aygiY29sb3JtYXAgYWxsb2NhdGVkXG4iKTsKLQlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbykgPCAwKQotCQlnb3RvIG91dDI7Ci0KLQlkcmF3X3JlY3QoZGV2X2luZm8sIDAsIDAsIGRldl9pbmZvLT5pbmZvLT52YXIueHJlcywKLQkJICBkZXZfaW5mby0+aW5mby0+dmFyLnlyZXMsIDB4MzAsIDB4ZmYsIDB4MzApOwotCi0JcmV0dXJuIDA7Ci0KLW91dDI6Ci0JZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKLW91dDE6Ci0JcnZmcmVlKGluZm8tPnNjcmVlbl9iYXNlLCBkZXZfaW5mby0+c2NyZWVuX3NpemUpOwotb3V0MDoKLQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwotb3V0OgotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKLQl1c2JfcHV0X2RldihkZXZfaW5mby0+dWRldik7Ci0Ja2ZyZWUoZGV2X2luZm8pOwotCXJldHVybiAtRU5PTUVNOwotCisJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIHZvaWQgZGxmYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCitzdGF0aWMgc3NpemVfdCBtZXRyaWNzX2J5dGVzX3JlbmRlcmVkX3Nob3coc3RydWN0IGRldmljZSAqZmJkZXYsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmEsIGNoYXIgKmJ1ZikgeworCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGZiZGV2KTsKKwlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBmYl9pbmZvLT5wYXI7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVcbiIsCisJCQlhdG9taWNfcmVhZCgmZGV2LT5ieXRlc19yZW5kZXJlZCkpOworfQorCitzdGF0aWMgc3NpemVfdCBtZXRyaWNzX2J5dGVzX2lkZW50aWNhbF9zaG93KHN0cnVjdCBkZXZpY2UgKmZiZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphLCBjaGFyICpidWYpIHsKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShmYmRldik7CisJc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gZmJfaW5mby0+cGFyOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLAorCQkJYXRvbWljX3JlYWQoJmRldi0+Ynl0ZXNfaWRlbnRpY2FsKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1ldHJpY3NfYnl0ZXNfc2VudF9zaG93KHN0cnVjdCBkZXZpY2UgKmZiZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphLCBjaGFyICpidWYpIHsKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShmYmRldik7CisJc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gZmJfaW5mby0+cGFyOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLAorCQkJYXRvbWljX3JlYWQoJmRldi0+Ynl0ZXNfc2VudCkpOworfQorCitzdGF0aWMgc3NpemVfdCBtZXRyaWNzX2NwdV9rY3ljbGVzX3VzZWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpmYmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYSwgY2hhciAqYnVmKSB7CisJc3RydWN0IGZiX2luZm8gKmZiX2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZmJkZXYpOworCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IGZiX2luZm8tPnBhcjsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwKKwkJCWF0b21pY19yZWFkKCZkZXYtPmNwdV9rY3ljbGVzX3VzZWQpKTsKK30KKworc3RhdGljIHNzaXplX3QgbWV0cmljc19taXNjX3Nob3coc3RydWN0IGRldmljZSAqZmJkZXYsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmEsIGNoYXIgKmJ1ZikgeworCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGZiZGV2KTsKKwlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBmYl9pbmZvLT5wYXI7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLAorCQkJIkNhbGxzIHRvXG5kYW1hZ2U6ICV1XG5ibGl0OiAldVxuIgorCQkJImRlZmlvIGZhdWx0czogJXVcbmNvcHk6ICV1XG4iCisJCQkiZmlsbDogJXVcblxuIgorCQkJImFjdGl2ZSBmcmFtZWJ1ZmZlciBjbGllbnRzOiAlZFxuIgorCQkJInVyYnMgYXZhaWxhYmxlICVkKCVkKVxuIgorCQkJIlNoYWRvdyBmcmFtZWJ1ZmZlciBpbiB1c2U/ICVzXG4iCisJCQkiQW55IGxvc3QgcGl4ZWxzPyAlc1xuIiwKKwkJCWF0b21pY19yZWFkKCZkZXYtPmRhbWFnZV9jb3VudCksCisJCQlhdG9taWNfcmVhZCgmZGV2LT5ibGl0X2NvdW50KSwKKwkJCWF0b21pY19yZWFkKCZkZXYtPmRlZmlvX2ZhdWx0X2NvdW50KSwKKwkJCWF0b21pY19yZWFkKCZkZXYtPmNvcHlfY291bnQpLAorCQkJYXRvbWljX3JlYWQoJmRldi0+ZmlsbF9jb3VudCksCisJCQlkZXYtPmZiX2NvdW50LAorCQkJZGV2LT51cmJzLmF2YWlsYWJsZSwgZGV2LT51cmJzLmxpbWl0X3NlbS5jb3VudCwKKwkJCShkZXYtPmJhY2tpbmdfYnVmZmVyKSA/ICJ5ZXMiIDogIm5vIiwKKwkJCWF0b21pY19yZWFkKCZkZXYtPmxvc3RfcGl4ZWxzKSA/ICJ5ZXMiIDogIm5vIik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGVkaWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmEsCisJCQkgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpIHsKKwlzdHJ1Y3QgZGV2aWNlICpmYmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShmYmRldik7CisJc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gZmJfaW5mby0+cGFyOworCWNoYXIgKmVkaWQgPSAmZGV2LT5lZGlkWzBdOworCWNvbnN0IHNpemVfdCBzaXplID0gc2l6ZW9mKGRldi0+ZWRpZCk7CisKKwlpZiAoZGxmYl9wYXJzZV9lZGlkKGRldiwgJmZiX2luZm8tPnZhciwgZmJfaW5mbykpCisJCXJldHVybiAwOworCisJaWYgKG9mZiA+PSBzaXplKQorCQlyZXR1cm4gMDsKKworCWlmIChvZmYgKyBjb3VudCA+IHNpemUpCisJCWNvdW50ID0gc2l6ZSAtIG9mZjsKKwltZW1jcHkoYnVmLCBlZGlkICsgb2ZmLCBjb3VudCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKworc3RhdGljIHNzaXplX3QgbWV0cmljc19yZXNldF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpmYmRldiwKKwkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGRsZmJfZGF0YSAqZGV2X2luZm8gPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJc3RydWN0IGZiX2luZm8gKmZiX2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZmJkZXYpOworCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IGZiX2luZm8tPnBhcjsKIAotCW11dGV4X3VubG9jaygmZGV2X2luZm8tPmJ1bGtfbXV0ZXgpOworCWF0b21pY19zZXQoJmRldi0+Ynl0ZXNfcmVuZGVyZWQsIDApOworCWF0b21pY19zZXQoJmRldi0+Ynl0ZXNfaWRlbnRpY2FsLCAwKTsKKwlhdG9taWNfc2V0KCZkZXYtPmJ5dGVzX3NlbnQsIDApOworCWF0b21pY19zZXQoJmRldi0+Y3B1X2tjeWNsZXNfdXNlZCwgMCk7CisJYXRvbWljX3NldCgmZGV2LT5ibGl0X2NvdW50LCAwKTsKKwlhdG9taWNfc2V0KCZkZXYtPmNvcHlfY291bnQsIDApOworCWF0b21pY19zZXQoJmRldi0+ZmlsbF9jb3VudCwgMCk7CisJYXRvbWljX3NldCgmZGV2LT5kZWZpb19mYXVsdF9jb3VudCwgMCk7CisJYXRvbWljX3NldCgmZGV2LT5kYW1hZ2VfY291bnQsIDApOwogCi0JdXNiX2tpbGxfdXJiKGRldl9pbmZvLT50eF91cmIpOwotCXVzYl9mcmVlX3VyYihkZXZfaW5mby0+dHhfdXJiKTsKLQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7Ci0JdXNiX3B1dF9kZXYoZGV2X2luZm8tPnVkZXYpOworCXJldHVybiBjb3VudDsKK30KIAotCWlmIChkZXZfaW5mby0+aW5mbykgewotCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGRldl9pbmZvLT5pbmZvKTsKLQkJZmJfZGVhbGxvY19jbWFwKCZkZXZfaW5mby0+aW5mby0+Y21hcCk7Ci0JCXJ2ZnJlZShkZXZfaW5mby0+aW5mby0+c2NyZWVuX2Jhc2UsIGRldl9pbmZvLT5zY3JlZW5fc2l6ZSk7Ci0JCWtmcmVlKGRldl9pbmZvLT5iYWNraW5nX2J1ZmZlcik7Ci0JCWZyYW1lYnVmZmVyX3JlbGVhc2UoZGV2X2luZm8tPmluZm8pOworc3RhdGljIHNzaXplX3QgdXNlX2RlZmlvX3Nob3coc3RydWN0IGRldmljZSAqZmJkZXYsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmEsIGNoYXIgKmJ1ZikgeworCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGZiZGV2KTsKKwlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBmYl9pbmZvLT5wYXI7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsCisJCQlhdG9taWNfcmVhZCgmZGV2LT51c2VfZGVmaW8pKTsKK30KIAorc3RhdGljIHNzaXplX3QgdXNlX2RlZmlvX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmZiZGV2LAorCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShmYmRldik7CisJc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gZmJfaW5mby0+cGFyOworCisJaWYgKGNvdW50ID4gMCkgeworCQlpZiAoYnVmWzBdID09ICcwJykKKwkJCWF0b21pY19zZXQoJmRldi0+dXNlX2RlZmlvLCAwKTsKKwkJaWYgKGJ1ZlswXSA9PSAnMScpCisJCQlhdG9taWNfc2V0KCZkZXYtPnVzZV9kZWZpbywgMSk7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIGVkaWRfYXR0ciA9IHsKKwkuYXR0ci5uYW1lID0gImVkaWQiLAorCS5hdHRyLm1vZGUgPSAwNDQ0LAorCS5zaXplID0gMTI4LAorCS5yZWFkID0gZWRpZF9zaG93LAorfTsKKworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGZiX2RldmljZV9hdHRyc1tdID0geworCV9fQVRUUl9STyhtZXRyaWNzX2J5dGVzX3JlbmRlcmVkKSwKKwlfX0FUVFJfUk8obWV0cmljc19ieXRlc19pZGVudGljYWwpLAorCV9fQVRUUl9STyhtZXRyaWNzX2J5dGVzX3NlbnQpLAorCV9fQVRUUl9STyhtZXRyaWNzX2NwdV9rY3ljbGVzX3VzZWQpLAorCV9fQVRUUl9STyhtZXRyaWNzX21pc2MpLAorCV9fQVRUUihtZXRyaWNzX3Jlc2V0LCBTX0lXVUdPLCBOVUxMLCBtZXRyaWNzX3Jlc2V0X3N0b3JlKSwKKwlfX0FUVFJfUlcodXNlX2RlZmlvKSwKK307CisKKyNpZmRlZiBDT05GSUdfRkJfREVGRVJSRURfSU8KK3N0YXRpYyB2b2lkIGRsZmJfZHB5X2RlZmVycmVkX2lvKHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VsaXN0KQoreworCXN0cnVjdCBwYWdlICpjdXI7CisJc3RydWN0IGZiX2RlZmVycmVkX2lvICpmYmRlZmlvID0gaW5mby0+ZmJkZWZpbzsKKwlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBpbmZvLT5wYXI7CisJc3RydWN0IHVyYiAqdXJiOworCWNoYXIgKmNtZDsKKwljeWNsZXNfdCBzdGFydF9jeWNsZXMsIGVuZF9jeWNsZXM7CisJaW50IGJ5dGVzX3NlbnQgPSAwOworCWludCBieXRlc19pZGVudGljYWwgPSAwOworCWludCBieXRlc19yZW5kZXJlZCA9IDA7CisJaW50IGZhdWx0X2NvdW50ID0gMDsKKworCWlmICghYXRvbWljX3JlYWQoJmRldi0+dXNlX2RlZmlvKSkKKwkJcmV0dXJuOworCisJaWYgKCFhdG9taWNfcmVhZCgmZGV2LT51c2JfYWN0aXZlKSkKKwkJcmV0dXJuOworCisJc3RhcnRfY3ljbGVzID0gZ2V0X2N5Y2xlcygpOworCisJdXJiID0gZGxmYl9nZXRfdXJiKGRldik7CisJaWYgKCF1cmIpCisJCXJldHVybjsKKwljbWQgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKworCS8qIHdhbGsgdGhlIHdyaXR0ZW4gcGFnZSBsaXN0IGFuZCByZW5kZXIgZWFjaCB0byBkZXZpY2UgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1ciwgJmZiZGVmaW8tPnBhZ2VsaXN0LCBscnUpIHsKKwkJZGxmYl9yZW5kZXJfaGxpbmUoZGV2LCAmdXJiLCAoY2hhciAqKSBpbmZvLT5maXguc21lbV9zdGFydCwKKwkJCQkgICZjbWQsIGN1ci0+aW5kZXggPDwgUEFHRV9TSElGVCwKKwkJCQkgIFBBR0VfU0laRSwgJmJ5dGVzX2lkZW50aWNhbCwgJmJ5dGVzX3NlbnQpOworCQlieXRlc19yZW5kZXJlZCArPSBQQUdFX1NJWkU7CisJCWZhdWx0X2NvdW50Kys7CiAJfQogCi0Ja2ZyZWUoZGV2X2luZm8pOworCWlmIChjbWQgPiAoY2hhciAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcikgeworCQkvKiBTZW5kIHBhcnRpYWwgYnVmZmVyIHJlbWFpbmluZyBiZWZvcmUgZXhpdGluZyAqLworCQlpbnQgbGVuID0gY21kIC0gKGNoYXIgKikgdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJCWRsZmJfc3VibWl0X3VyYihkZXYsIHVyYiwgbGVuKTsKKwkJYnl0ZXNfc2VudCArPSBsZW47CisJfSBlbHNlCisJCWRsZmJfdXJiX2NvbXBsZXRpb24odXJiKTsKIAotCXByaW50aygiRGlzcGxheUxpbmsgZGV2aWNlIGRpc2Nvbm5lY3RlZFxuIik7CisJYXRvbWljX2FkZChmYXVsdF9jb3VudCwgJmRldi0+ZGVmaW9fZmF1bHRfY291bnQpOworCWF0b21pY19hZGQoYnl0ZXNfc2VudCwgJmRldi0+Ynl0ZXNfc2VudCk7CisJYXRvbWljX2FkZChieXRlc19pZGVudGljYWwsICZkZXYtPmJ5dGVzX2lkZW50aWNhbCk7CisJYXRvbWljX2FkZChieXRlc19yZW5kZXJlZCwgJmRldi0+Ynl0ZXNfcmVuZGVyZWQpOworCWVuZF9jeWNsZXMgPSBnZXRfY3ljbGVzKCk7CisJYXRvbWljX2FkZCgoKHVuc2lnbmVkIGludCkgKChlbmRfY3ljbGVzIC0gc3RhcnRfY3ljbGVzKQorCQkgICAgPj4gMTApKSwgLyogS2N5Y2xlcyAqLworCQkgICAmZGV2LT5jcHVfa2N5Y2xlc191c2VkKTsKK30KKworc3RhdGljIHN0cnVjdCBmYl9kZWZlcnJlZF9pbyBkbGZiX2RlZmlvID0geworCS5kZWxheSAgICAgICAgICA9IDUsCisJLmRlZmVycmVkX2lvICAgID0gZGxmYl9kcHlfZGVmZXJyZWRfaW8sCit9OworCisjZW5kaWYKKworLyoKKyAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlZm9yZSB3ZSBjYW4gY29tbXVuaWNhdGUgd2l0aCB0aGUgZGlzcGxheSBjb250cm9sbGVyLgorICovCitzdGF0aWMgaW50IGRsZmJfc2VsZWN0X3N0ZF9jaGFubmVsKHN0cnVjdCBkbGZiX2RhdGEgKmRldikKK3sKKwlpbnQgcmV0OworCXU4IHNldF9kZWZfY2huW10gPSB7CSAgIDB4NTcsIDB4Q0QsIDB4REMsIDB4QTcsCisJCQkJMHgxQywgMHg4OCwgMHg1RSwgMHgxNSwKKwkJCQkweDYwLCAweEZFLCAweEM2LCAweDk3LAorCQkJCTB4MTYsIDB4M0QsIDB4NDcsIDB4RjIgIH07CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKKwkJCU5SX1VTQl9SRVFVRVNUX0NIQU5ORUwsCisJCQkoVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IpLCAwLCAwLAorCQkJc2V0X2RlZl9jaG4sIHNpemVvZihzZXRfZGVmX2NobiksIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpbnQgZGxmYl91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OworCXN0cnVjdCBkbGZiX2RhdGEgKmRldjsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlpbnQgdmlkZW9tZW1vcnlzaXplOworCWludCBpOworCXVuc2lnbmVkIGNoYXIgKnZpZGVvbWVtb3J5OworCWludCByZXR2YWwgPSAtRU5PTUVNOworCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyOworCWludCByZWdpc3RlcmVkID0gMDsKKwl1MTYgKnBpeF9mcmFtZWJ1ZmZlcjsKKworCS8qIHVzYiBpbml0aWFsaXphdGlvbiAqLworCisJdXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCisJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWlmIChkZXYgPT0gTlVMTCkgeworCQllcnIoImRsZmJfdXNiX3Byb2JlOiBmYWlsZWQgYWxsb2Mgb2YgZGV2IHN0cnVjdFxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogd2UgbmVlZCB0byB3YWl0IGZvciBib3RoIHVzYiBhbmQgZmJkZXYgdG8gc3BpbiBkb3duIG9uIGRpc2Nvbm5lY3QgKi8KKwlrcmVmX2luaXQoJmRldi0+a3JlZik7IC8qIG1hdGNoaW5nIGtyZWZfcHV0IGluIHVzYiAuZGlzY29ubmVjdCBmbiAqLworCWtyZWZfZ2V0KCZkZXYtPmtyZWYpOyAvKiBtYXRjaGluZyBrcmVmX3B1dCBpbiAuZmJfZGVzdHJveSBmdW5jdGlvbiovCisKKwlkZXYtPnVkZXYgPSB1c2JkZXY7CisJZGV2LT5nZGV2ID0gJnVzYmRldi0+ZGV2OyAvKiBvdXIgZ2VuZXJpYyBzdHJ1Y3QgZGV2aWNlICogKi8KKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgZGV2KTsKKworCWlmICghZGxmYl9hbGxvY191cmJfbGlzdChkZXYsIFdSSVRFU19JTl9GTElHSFQsIE1BWF9UUkFOU0ZFUikpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZGxfZXJyKCJkbGZiX2FsbG9jX3VyYl9saXN0IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJbXV0ZXhfaW5pdCgmZGV2LT5mYl9vcGVuX2xvY2spOworCisJLyogV2UgZG9uJ3QgcmVnaXN0ZXIgYSBuZXcgVVNCIGNsYXNzLiBPdXIgY2xpZW50IGludGVyZmFjZSBpcyBmYmRldiAqLworCisJLyogYWxsb2NhdGVzIGZyYW1lYnVmZmVyIGRyaXZlciBzdHJ1Y3R1cmUsIG5vdCBmcmFtZWJ1ZmZlciBtZW1vcnkgKi8KKwlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2MoMCwgJnVzYmRldi0+ZGV2KTsKKwlpZiAoIWluZm8pIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZGxfZXJyKCJmcmFtZWJ1ZmZlcl9hbGxvYyBmYWlsZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKwlkZXYtPmluZm8gPSBpbmZvOworCWluZm8tPnBhciA9IGRldjsKKwlpbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IGRldi0+cHNldWRvX3BhbGV0dGU7CisJaW5mby0+ZmJvcHMgPSAmZGxmYl9vcHM7CisKKwl2YXIgPSAmaW5mby0+dmFyOworCisJLyogVE9ETyBzZXQgbGltaXQgYmFzZWQgb24gYWN0dWFsIFNLVSBkZXRlY3Rpb24gKi8KKwlkZXYtPnNrdV9waXhlbF9saW1pdCA9IDIwNDggKiAxMTUyOworCisJSU5JVF9MSVNUX0hFQUQoJmluZm8tPm1vZGVsaXN0KTsKKwlkbGZiX3BhcnNlX2VkaWQoZGV2LCB2YXIsIGluZm8pOworCisJLyoKKwkgKiBvaywgbm93IHRoYXQgd2UndmUgZ290IHRoZSBzaXplIGluZm8sIHdlIGNhbiBhbGxvYyBvdXIgZnJhbWVidWZmZXIuCisJICovCisJaW5mby0+Zml4ID0gZGxmYl9maXg7CisJaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gdmFyLT54cmVzICogKHZhci0+Yml0c19wZXJfcGl4ZWwgLyA4KTsKKwl2aWRlb21lbW9yeXNpemUgPSBpbmZvLT5maXgubGluZV9sZW5ndGggKiB2YXItPnlyZXM7CisKKwkvKgorCSAqIFRoZSBiaWcgY2h1bmsgb2Ygc3lzdGVtIG1lbW9yeSB3ZSB1c2UgYXMgYSB2aXJ0dWFsIGZyYW1lYnVmZmVyLgorCSAqIFRPRE86IEhhbmRsZSBmYmNvbiBjdXJzb3IgY29kZSBjYWxsaW5nIGJsaXQgaW4gaW50ZXJydXB0IGNvbnRleHQKKwkgKi8KKwl2aWRlb21lbW9yeSA9IHZtYWxsb2ModmlkZW9tZW1vcnlzaXplKTsKKwlpZiAoIXZpZGVvbWVtb3J5KSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWRsX2VycigiVmlydHVhbCBmcmFtZWJ1ZmZlciBhbGxvYyBmYWlsZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCWluZm8tPnNjcmVlbl9iYXNlID0gdmlkZW9tZW1vcnk7CisJaW5mby0+Zml4LnNtZW1fbGVuID0gUEFHRV9BTElHTih2aWRlb21lbW9yeXNpemUpOworCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpIHZpZGVvbWVtb3J5OworCWluZm8tPmZsYWdzID0gdWRsZmJfaW5mb19mbGFnczsKKworCisJLyoKKwkgKiBTZWNvbmQgZnJhbWVidWZmZXIgY29weSwgbWlycm9yaW5nIHRoZSBzdGF0ZSBvZiB0aGUgZnJhbWVidWZmZXIKKwkgKiBvbiB0aGUgcGh5c2ljYWwgVVNCIGRldmljZS4gV2UgY2FuIGZ1bmN0aW9uIHdpdGhvdXQgdGhpcy4KKwkgKiBCdXQgd2l0aCBpbXBlcmZlY3QgZGFtYWdlIGluZm8gd2UgbWF5IGVuZCB1cCBzZW5kaW5nIHBpeGVscyBvdmVyIFVTQgorCSAqIHRoYXQgd2VyZSwgaW4gZmFjdCwgdW5jaGFuZ2VkIC0tIHdhc3RpbmcgbGltaXRlZCBVU0IgYmFuZHdpZHRoCisJICovCisJZGV2LT5iYWNraW5nX2J1ZmZlciA9IHZtYWxsb2ModmlkZW9tZW1vcnlzaXplKTsKKwlpZiAoIWRldi0+YmFja2luZ19idWZmZXIpCisJCWRsX3dhcm4oIk5vIHNoYWRvdy9iYWNraW5nIGJ1ZmZlciBhbGxjb2F0ZWRcbiIpOworCWVsc2UKKwkJbWVtc2V0KGRldi0+YmFja2luZ19idWZmZXIsIDAsIHZpZGVvbWVtb3J5c2l6ZSk7CisKKwlyZXR2YWwgPSBmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDApOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRsX2VycigiZmJfYWxsb2NfY21hcCBmYWlsZWQgJXhcbiIsIHJldHZhbCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogcmVhZHkgdG8gYmVnaW4gdXNpbmcgZGV2aWNlICovCisKKyNpZmRlZiBDT05GSUdfRkJfREVGRVJSRURfSU8KKwlhdG9taWNfc2V0KCZkZXYtPnVzZV9kZWZpbywgMSk7CisjZW5kaWYKKwlhdG9taWNfc2V0KCZkZXYtPnVzYl9hY3RpdmUsIDEpOworCWRsZmJfc2VsZWN0X3N0ZF9jaGFubmVsKGRldik7CisKKwlkbGZiX29wc19jaGVja192YXIodmFyLCBpbmZvKTsKKwlkbGZiX29wc19zZXRfcGFyKGluZm8pOworCisJLyogcGFpbnQgZ3JlZW5zY3JlZW4gKi8KKwlwaXhfZnJhbWVidWZmZXIgPSAodTE2ICopIHZpZGVvbWVtb3J5OworCWZvciAoaSA9IDA7IGkgPCB2aWRlb21lbW9yeXNpemUgLyAyOyBpKyspCisJCXBpeF9mcmFtZWJ1ZmZlcltpXSA9IDB4MzdlNjsKKworCWRsZmJfaGFuZGxlX2RhbWFnZShkZXYsIDAsIDAsIGluZm8tPnZhci54cmVzLCBpbmZvLT52YXIueXJlcywKKwkJCQl2aWRlb21lbW9yeSk7CisKKwlyZXR2YWwgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkbF9lcnIoInJlZ2lzdGVyX2ZyYW1lYnVmZmVyIGZhaWxlZCAlZFxuIiwgcmV0dmFsKTsKKwkJZ290byBlcnJvcjsKKwl9CisJcmVnaXN0ZXJlZCA9IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmYl9kZXZpY2VfYXR0cnMpOyBpKyspCisJCWRldmljZV9jcmVhdGVfZmlsZShpbmZvLT5kZXYsICZmYl9kZXZpY2VfYXR0cnNbaV0pOworCisJZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZShpbmZvLT5kZXYsICZlZGlkX2F0dHIpOworCisJZGxfZXJyKCJEaXNwbGF5TGluayBVU0IgZGV2aWNlIC9kZXYvZmIlZCBhdHRhY2hlZC4gJWR4JWQgcmVzb2x1dGlvbi4iCisJCQkiIFVzaW5nICVkSyBmcmFtZWJ1ZmZlciBtZW1vcnlcbiIsIGluZm8tPm5vZGUsCisJCQl2YXItPnhyZXMsIHZhci0+eXJlcywKKwkJCSgoZGV2LT5iYWNraW5nX2J1ZmZlcikgPworCQkJdmlkZW9tZW1vcnlzaXplICogMiA6IHZpZGVvbWVtb3J5c2l6ZSkgPj4gMTApOworCXJldHVybiAwOworCitlcnJvcjoKKwlpZiAoZGV2KSB7CisJCWlmIChyZWdpc3RlcmVkKSB7CisJCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOworCQkJZGxmYl9vcHNfZGVzdHJveShpbmZvKTsKKwkJfSBlbHNlCisJCQlrcmVmX3B1dCgmZGV2LT5rcmVmLCBkbGZiX2RlbGV0ZSk7CisKKwkJaWYgKGRldi0+dXJicy5jb3VudCA+IDApCisJCQlkbGZiX2ZyZWVfdXJiX2xpc3QoZGV2KTsKKwkJa3JlZl9wdXQoJmRldi0+a3JlZiwgZGxmYl9kZWxldGUpOyAvKiBsYXN0IHJlZiBmcm9tIGtyZWZfaW5pdCAqLworCisJCS8qIGRldiBoYXMgYmVlbiBkZWFsbG9jYXRlZC4gRG8gbm90IGRlcmVmZXJlbmNlICovCisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgZGxmYl91c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBkbGZiX2RhdGEgKmRldjsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlpbnQgaTsKKworCWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlpbmZvID0gZGV2LT5pbmZvOworCisJLyogd2hlbiBub24tYWN0aXZlIHdlJ2xsIHVwZGF0ZSB2aXJ0dWFsIGZyYW1lYnVmZmVyLCBidXQgbm8gbmV3IHVyYnMgKi8KKwlhdG9taWNfc2V0KCZkZXYtPnVzYl9hY3RpdmUsIDApOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZmJfZGV2aWNlX2F0dHJzKTsgaSsrKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoaW5mby0+ZGV2LCAmZmJfZGV2aWNlX2F0dHJzW2ldKTsKKworCWRldmljZV9yZW1vdmVfYmluX2ZpbGUoaW5mby0+ZGV2LCAmZWRpZF9hdHRyKTsKKworCS8qIHRoaXMgZnVuY3Rpb24gd2lsbCB3YWl0IGZvciBhbGwgaW4tZmxpZ2h0IHVyYnMgdG8gY29tcGxldGUgKi8KKwlkbGZiX2ZyZWVfdXJiX2xpc3QoZGV2KTsKKworCWlmIChpbmZvKSB7CisJCWRsX25vdGljZSgiRGV0YWNoaW5nIC9kZXYvZmIlZFxuIiwgaW5mby0+bm9kZSk7CisJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CisJCWRsZmJfb3BzX2Rlc3Ryb3koaW5mbyk7CisJfQorCisJLyogcmVsZWFzZSByZWZlcmVuY2UgdGFrZW4gYnkga3JlZl9pbml0IGluIHByb2JlKCkgKi8KKwlrcmVmX3B1dCgmZGV2LT5rcmVmLCBkbGZiX2RlbGV0ZSk7CisKKwkvKiBjb25zaWRlciBkbGZiX2RhdGEgZnJlZWQgKi8KKworCXJldHVybjsKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGRsZmJfZHJpdmVyID0gewogCS5uYW1lID0gInVkbGZiIiwKLQkucHJvYmUgPSBkbGZiX3Byb2JlLAotCS5kaXNjb25uZWN0ID0gZGxmYl9kaXNjb25uZWN0LAorCS5wcm9iZSA9IGRsZmJfdXNiX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gZGxmYl91c2JfZGlzY29ubmVjdCwKIAkuaWRfdGFibGUgPSBpZF90YWJsZSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGRsZmJfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgZGxmYl9tb2R1bGVfaW5pdCh2b2lkKQogewogCWludCByZXM7CiAKLQlkbGZiX2luaXRfbW9kZXMoKTsKLQogCXJlcyA9IHVzYl9yZWdpc3RlcigmZGxmYl9kcml2ZXIpOwogCWlmIChyZXMpCiAJCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkIiwgcmVzKTsKQEAgLTkyNSwxNCArMTQ0MiwxODYgQEAKIAlyZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgZGxmYl9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgZGxmYl9tb2R1bGVfZXhpdCh2b2lkKQogewogCXVzYl9kZXJlZ2lzdGVyKCZkbGZiX2RyaXZlcik7CiB9CiAKLW1vZHVsZV9pbml0KGRsZmJfaW5pdCk7Ci1tb2R1bGVfZXhpdChkbGZiX2V4aXQpOworbW9kdWxlX2luaXQoZGxmYl9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChkbGZiX21vZHVsZV9leGl0KTsKIAotTU9EVUxFX0FVVEhPUigiUm9iZXJ0byBEZSBJb3JpcyA8cm9iZXJ0b0B1bmJpdC5pdD4iKTsKLU1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfVkVSU0lPTik7CitzdGF0aWMgdm9pZCBkbGZiX3VyYl9jb21wbGV0aW9uKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXJiX25vZGUgKnVub2RlID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IHVub2RlLT5kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIHN5bmMvYXN5bmMgdW5saW5rIGZhdWx0cyBhcmVuJ3QgZXJyb3JzICovCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWlmICghKHVyYi0+c3RhdHVzID09IC1FTk9FTlQgfHwKKwkJICAgIHVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUIHx8CisJCSAgICB1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKSkgeworCQkJZGxfZXJyKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkXG4iLAorCQkJCV9fZnVuY19fLCB1cmItPnN0YXR1cyk7CisJCQlhdG9taWNfc2V0KCZkZXYtPmxvc3RfcGl4ZWxzLCAxKTsKKwkJfQorCX0KKworCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGRldi0+dXJicy5zaXplOyAvKiByZXNldCB0byBhY3R1YWwgKi8KKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnVyYnMubG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJnVub2RlLT5lbnRyeSwgJmRldi0+dXJicy5saXN0KTsKKwlkZXYtPnVyYnMuYXZhaWxhYmxlKys7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT51cmJzLmxvY2ssIGZsYWdzKTsKKworCXVwKCZkZXYtPnVyYnMubGltaXRfc2VtKTsKK30KKworc3RhdGljIHZvaWQgZGxmYl9mcmVlX3VyYl9saXN0KHN0cnVjdCBkbGZiX2RhdGEgKmRldikKK3sKKwlpbnQgY291bnQgPSBkZXYtPnVyYnMuY291bnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqbm9kZTsKKwlzdHJ1Y3QgdXJiX25vZGUgKnVub2RlOworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkbF9ub3RpY2UoIldhaXRpbmcgZm9yIGNvbXBsZXRlcyBhbmQgZnJlZWluZyBhbGwgcmVuZGVyIHVyYnNcbiIpOworCisJLyoga2VlcCB3YWl0aW5nIGFuZCBmcmVlaW5nLCB1bnRpbCB3ZSd2ZSBnb3QgJ2VtIGFsbCAqLworCXdoaWxlIChjb3VudC0tKSB7CisJCS8qIFRpbWVvdXQgbWVhbnMgYSBtZW1vcnkgbGVhayBhbmQvb3IgZmF1bHQgKi8KKwkJcmV0ID0gZG93bl90aW1lb3V0KCZkZXYtPnVyYnMubGltaXRfc2VtLCBGUkVFX1VSQl9USU1FT1VUKTsKKwkJaWYgKHJldCkgeworCQkJQlVHX09OKHJldCk7CisJCQlicmVhazsKKwkJfQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT51cmJzLmxvY2ssIGZsYWdzKTsKKworCQlub2RlID0gZGV2LT51cmJzLmxpc3QubmV4dDsgLyogaGF2ZSByZXNlcnZlZCBvbmUgd2l0aCBzZW0gKi8KKwkJbGlzdF9kZWxfaW5pdChub2RlKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnVyYnMubG9jaywgZmxhZ3MpOworCisJCXVub2RlID0gbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgdXJiX25vZGUsIGVudHJ5KTsKKwkJdXJiID0gdW5vZGUtPnVyYjsKKworCQkvKiBGcmVlIGVhY2ggc2VwYXJhdGVseSBhbGxvY2F0ZWQgcGllY2UgKi8KKwkJdXNiX2J1ZmZlcl9mcmVlKHVyYi0+ZGV2LCBkZXYtPnVyYnMuc2l6ZSwKKwkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPnRyYW5zZmVyX2RtYSk7CisJCXVzYl9mcmVlX3VyYih1cmIpOworCQlrZnJlZShub2RlKTsKKwl9CisKKwlrcmVmX3B1dCgmZGV2LT5rcmVmLCBkbGZiX2RlbGV0ZSk7CisKK30KKworc3RhdGljIGludCBkbGZiX2FsbG9jX3VyYl9saXN0KHN0cnVjdCBkbGZiX2RhdGEgKmRldiwgaW50IGNvdW50LCBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgaSA9IDA7CisJc3RydWN0IHVyYiAqdXJiOworCXN0cnVjdCB1cmJfbm9kZSAqdW5vZGU7CisJY2hhciAqYnVmOworCisJc3Bpbl9sb2NrX2luaXQoJmRldi0+dXJicy5sb2NrKTsKKworCWRldi0+dXJicy5zaXplID0gc2l6ZTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT51cmJzLmxpc3QpOworCisJd2hpbGUgKGkgPCBjb3VudCkgeworCQl1bm9kZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1cmJfbm9kZSksIEdGUF9LRVJORUwpOworCQlpZiAoIXVub2RlKQorCQkJYnJlYWs7CisJCXVub2RlLT5kZXYgPSBkZXY7CisKKwkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmIpIHsKKwkJCWtmcmVlKHVub2RlKTsKKwkJCWJyZWFrOworCQl9CisJCXVub2RlLT51cmIgPSB1cmI7CisKKwkJYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyhkZXYtPnVkZXYsIE1BWF9UUkFOU0ZFUiwgR0ZQX0tFUk5FTCwKKwkJCQkJJnVyYi0+dHJhbnNmZXJfZG1hKTsKKwkJaWYgKCFidWYpIHsKKwkJCWtmcmVlKHVub2RlKTsKKwkJCXVzYl9mcmVlX3VyYih1cmIpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggc2V0IHRvIGFjdHVhbCBiZWZvcmUgc3VibWl0ICovCisJCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgZGV2LT51ZGV2LCB1c2Jfc25kYnVsa3BpcGUoZGV2LT51ZGV2LCAxKSwKKwkJCWJ1Ziwgc2l6ZSwgZGxmYl91cmJfY29tcGxldGlvbiwgdW5vZGUpOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCisJCWxpc3RfYWRkX3RhaWwoJnVub2RlLT5lbnRyeSwgJmRldi0+dXJicy5saXN0KTsKKworCQlpKys7CisJfQorCisJc2VtYV9pbml0KCZkZXYtPnVyYnMubGltaXRfc2VtLCBpKTsKKwlkZXYtPnVyYnMuY291bnQgPSBpOworCWRldi0+dXJicy5hdmFpbGFibGUgPSBpOworCisJa3JlZl9nZXQoJmRldi0+a3JlZik7IC8qIHJlbGVhc2VkIGluIGZyZWVfcmVuZGVyX3VyYnMoKSAqLworCisJZGxfbm90aWNlKCJhbGxvY2F0ZWQgJWQgJWQgYnl0ZSB1cmJzIFxuIiwgaSwgKGludCkgc2l6ZSk7CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIHN0cnVjdCB1cmIgKmRsZmJfZ2V0X3VyYihzdHJ1Y3QgZGxmYl9kYXRhICpkZXYpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CisJc3RydWN0IHVyYl9ub2RlICp1bm9kZTsKKwlzdHJ1Y3QgdXJiICp1cmIgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBXYWl0IGZvciBhbiBpbi1mbGlnaHQgYnVmZmVyIHRvIGNvbXBsZXRlIGFuZCBnZXQgcmUtcXVldWVkICovCisJcmV0ID0gZG93bl90aW1lb3V0KCZkZXYtPnVyYnMubGltaXRfc2VtLCBHRVRfVVJCX1RJTUVPVVQpOworCWlmIChyZXQpIHsKKwkJYXRvbWljX3NldCgmZGV2LT5sb3N0X3BpeGVscywgMSk7CisJCWRsX2Vycigid2FpdCBmb3IgdXJiIGludGVycnVwdGVkOiAleFxuIiwgcmV0KTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT51cmJzLmxvY2ssIGZsYWdzKTsKKworCUJVR19PTihsaXN0X2VtcHR5KCZkZXYtPnVyYnMubGlzdCkpOyAvKiByZXNlcnZlZCBvbmUgd2l0aCBsaW1pdF9zZW0gKi8KKwllbnRyeSA9IGRldi0+dXJicy5saXN0Lm5leHQ7CisJbGlzdF9kZWxfaW5pdChlbnRyeSk7CisJZGV2LT51cmJzLmF2YWlsYWJsZS0tOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT51cmJzLmxvY2ssIGZsYWdzKTsKKworCXVub2RlID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IHVyYl9ub2RlLCBlbnRyeSk7CisJdXJiID0gdW5vZGUtPnVyYjsKKworZXJyb3I6CisJcmV0dXJuIHVyYjsKK30KKworc3RhdGljIGludCBkbGZiX3N1Ym1pdF91cmIoc3RydWN0IGRsZmJfZGF0YSAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIsIHNpemVfdCBsZW4pCit7CisJaW50IHJldDsKKworCUJVR19PTihsZW4gPiBkZXYtPnVyYnMuc2l6ZSk7CisKKwl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBsZW47IC8qIHNldCB0byBhY3R1YWwgcGF5bG9hZCBsZW4gKi8KKwlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXQpIHsKKwkJZGxmYl91cmJfY29tcGxldGlvbih1cmIpOyAvKiBiZWNhdXNlIG5vIG9uZSBlbHNlIHdpbGwgKi8KKwkJYXRvbWljX3NldCgmZGV2LT5sb3N0X3BpeGVscywgMSk7CisJCWRsX2VycigidXNiX3N1Ym1pdF91cmIgZXJyb3IgJXhcbiIsIHJldCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK01PRFVMRV9BVVRIT1IoIlJvYmVydG8gRGUgSW9yaXMgPHJvYmVydG9AdW5iaXQuaXQ+LCAiCisJICAgICAgIkpheWEgS3VtYXIgPGpheWFrdW1hci5sa21sQGdtYWlsLmNvbT4sICIKKwkgICAgICAiQmVybmllIFRob21wc29uIDxiZXJuaWVAcGx1Z2FibGUuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEaXNwbGF5TGluayBrZXJuZWwgZnJhbWVidWZmZXIgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91ZGxmYi91ZGxmYi5oIGIvZHJpdmVycy9zdGFnaW5nL3VkbGZiL3VkbGZiLmgKaW5kZXggNDBhZDg1ZS4uYjA3YTY5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VkbGZiL3VkbGZiLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VkbGZiL3VkbGZiLmgKQEAgLTEsMjI1ICsxLDEwNiBAQAogI2lmbmRlZiBVRExGQl9ICiAjZGVmaW5lIFVETEZCX0gKIAotI2RlZmluZSBNQVhfVk1PREVTCTQKLSNkZWZpbmUgRkJfQlBQCQkxNgorLyoKKyAqIFRPRE86IFByb3Bvc2Ugc3RhbmRhcmQgZmIuaCBpb2N0bCBmb3IgcmVwb3J0aW5nIGRhbWFnZSwKKyAqIHVzaW5nIF9JT1dSKCkgYW5kIG9uZSBvZiB0aGUgZXhpc3RpbmcgYXJlYSBzdHJ1Y3RzIGZyb20gZmIuaAorICogQ29uc2lkZXIgdGhlc2UgaW9jdGxzIGRlcHJlY2F0ZWQsIGJ1dCB0aGV5J3JlIHN0aWxsIHVzZWQgYnkgdGhlCisgKiBEaXNwbGF5TGluayBYIHNlcnZlciBhcyB5ZXQgLSBuZWVkIGJvdGggdG8gYmUgbW9kaWZpZWQgaW4gdGFuZGVtCisgKiB3aGVuIG5ldyBpb2N0bChzKSBhcmUgcmVhZHkuCisgKi8KKyNkZWZpbmUgRExGQl9JT0NUTF9SRVRVUk5fRURJRAkgMHhBRAorI2RlZmluZSBETEZCX0lPQ1RMX1JFUE9SVF9EQU1BR0UgMHhBQQorc3RydWN0IGRsb2FyZWEgeworCWludCB4LCB5OworCWludCB3LCBoOworCWludCB4MiwgeTI7Cit9OwogCi0jZGVmaW5lIFNURF9DSEFOTkVMCSJceDU3XHhDRFx4RENceEE3XHgxQ1x4ODhceDVFXHgxNSIJXAotCQkJIlx4NjBceEZFXHhDNlx4OTdceDE2XHgzRFx4NDdceEYyIgorc3RydWN0IHVyYl9ub2RlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OworCXN0cnVjdCBkbGZiX2RhdGEgKmRldjsKKwlzdHJ1Y3QgdXJiICp1cmI7Cit9OwogCi0vKiBhcyBsaWJkbG8gKi8KLSNkZWZpbmUgQlVGX0hJR0hfV0FURVJfTUFSSwkxMDI0Ci0jZGVmaW5lIEJVRl9TSVpFCQkoNjQqMTAyNCkKK3N0cnVjdCB1cmJfbGlzdCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3Qgc2VtYXBob3JlIGxpbWl0X3NlbTsKKwlpbnQgYXZhaWxhYmxlOworCWludCBjb3VudDsKKwlzaXplX3Qgc2l6ZTsKK307CiAKIHN0cnVjdCBkbGZiX2RhdGEgewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7Ci0Jc3RydWN0IHVyYiAqdHhfdXJiLCAqY3RybF91cmI7Ci0Jc3RydWN0IHVzYl9jdHJscmVxdWVzdCBkcjsKKwlzdHJ1Y3QgZGV2aWNlICpnZGV2OyAvKiAmdWRldi0+ZGV2ICovCiAJc3RydWN0IGZiX2luZm8gKmluZm87Ci0JY2hhciAqYnVmOwotCWNoYXIgKmJ1ZmVuZDsKKwlzdHJ1Y3QgdXJiX2xpc3QgdXJiczsKKwlzdHJ1Y3Qga3JlZiBrcmVmOwogCWNoYXIgKmJhY2tpbmdfYnVmZmVyOwotCXN0cnVjdCBtdXRleCBidWxrX211dGV4OworCXN0cnVjdCBkZWxheWVkX3dvcmsgZGVmZXJyZWRfd29yazsKKwlzdHJ1Y3QgbXV0ZXggZmJfb3Blbl9sb2NrOworCWludCBmYl9jb3VudDsKKwlhdG9taWNfdCB1c2JfYWN0aXZlOyAvKiAwID0gdXBkYXRlIHZpcnR1YWwgYnVmZmVyLCBidXQgbm8gdXNiIHRyYWZmaWMgKi8KKwlhdG9taWNfdCBsb3N0X3BpeGVsczsgLyogMSA9IGEgcmVuZGVyIG9wIGZhaWxlZC4gTmVlZCBzY3JlZW4gcmVmcmVzaCAqLworCWF0b21pY190IHVzZV9kZWZpbzsgLyogMCA9IHJlbHkgb24gaW9jdGxzIGFuZCBibGl0L2NvcHkvZmlsbCByZWN0cyAqLwogCWNoYXIgZWRpZFsxMjhdOwotCWludCBzY3JlZW5fc2l6ZTsKLQlpbnQgbGluZV9sZW5ndGg7Ci0Jc3RydWN0IGNvbXBsZXRpb24gZG9uZTsKKwlpbnQgc2t1X3BpeGVsX2xpbWl0OwogCWludCBiYXNlMTY7Ci0JaW50IGJhc2UxNmQ7CiAJaW50IGJhc2U4OwotCWludCBiYXNlOGQ7CisJdTMyIHBzZXVkb19wYWxldHRlWzI1Nl07CisJLyogYmxpdC1vbmx5IHJlbmRlcmluZyBwYXRoIG1ldHJpY3MsIGV4cG9zZWQgdGhyb3VnaCBzeXNmcyAqLworCWF0b21pY190IGJ5dGVzX3JlbmRlcmVkOyAvKiByYXcgcGl4ZWwtYnl0ZXMgZHJpdmVyIGFza2VkIHRvIHJlbmRlciAqLworCWF0b21pY190IGJ5dGVzX2lkZW50aWNhbDsgLyogc2F2ZWQgZWZmb3J0IHdpdGggYmFja2J1ZmZlciBjb21wYXJpc29uICovCisJYXRvbWljX3QgYnl0ZXNfc2VudDsgLyogdG8gdXNiLCBhZnRlciBjb21wcmVzc2lvbiBpbmNsdWRpbmcgb3ZlcmhlYWQgKi8KKwlhdG9taWNfdCBjcHVfa2N5Y2xlc191c2VkOyAvKiB0cmFuc3BpcmVkIGR1cmluZyBwaXhlbCBwcm9jZXNzaW5nICovCisJLyogaW50ZXJmYWNlIHVzYWdlIG1ldHJpY3MuIENsaWVudHMgY2FuIGNhbGwgZHJpdmVyIHZpYSBzZXZlcmFsICovCisJYXRvbWljX3QgYmxpdF9jb3VudDsKKwlhdG9taWNfdCBjb3B5X2NvdW50OworCWF0b21pY190IGZpbGxfY291bnQ7CisJYXRvbWljX3QgZGFtYWdlX2NvdW50OworCWF0b21pY190IGRlZmlvX2ZhdWx0X2NvdW50OwogfTsKIAotc3RydWN0IGRsZmJfdmlkZW9fbW9kZSB7Ci0JdWludDhfdCBjb2w7Ci0JdWludDMyX3QgaGNsb2NrOwotCXVpbnQzMl90IHZjbG9jazsKLQl1aW50OF90IHVua25vd24xWzZdOwotCXVpbnQxNl90IHhyZXM7Ci0JdWludDhfdCB1bmtub3duMls2XTsKLQl1aW50MTZfdCB5cmVzOwotCXVpbnQ4X3QgdW5rbm93bjNbNF07Ci19IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CisjZGVmaW5lIE5SX1VTQl9SRVFVRVNUX0kyQ19TVUJfSU8gMHgwMgorI2RlZmluZSBOUl9VU0JfUkVRVUVTVF9DSEFOTkVMIDB4MTIKIAotc3RhdGljIHN0cnVjdCBkbGZiX3ZpZGVvX21vZGUgZGxmYl92aWRlb19tb2Rlc1tNQVhfVk1PREVTXTsKKy8qIC1CVUxLX1NJWkUgYXMgcGVyIHVzYi1za2VsZXRvbi4gQ2FuIHdlIGdldCBmdWxsIHBhZ2UgYW5kIGF2b2lkIG92ZXJoZWFkPyAqLworI2RlZmluZSBCVUxLX1NJWkUgNTEyCisjZGVmaW5lIE1BWF9UUkFOU0ZFUiAoUEFHRV9TSVpFKjE2IC0gQlVMS19TSVpFKQorI2RlZmluZSBXUklURVNfSU5fRkxJR0hUICg0KQogCi1zdGF0aWMgdm9pZCBkbGZiX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQotewotCXN0cnVjdCBkbGZiX2RhdGEgKmRldl9pbmZvID0gdXJiLT5jb250ZXh0OwotCWNvbXBsZXRlKCZkZXZfaW5mby0+ZG9uZSk7Ci19CisjZGVmaW5lIEdFVF9VUkJfVElNRU9VVAlIWgorI2RlZmluZSBGUkVFX1VSQl9USU1FT1VUIChIWioyKQogCi1zdGF0aWMgdm9pZCBkbGZiX2VkaWQoc3RydWN0IGRsZmJfZGF0YSAqZGV2X2luZm8pCi17Ci0JaW50IGk7Ci0JaW50IHJldDsKLQljaGFyIHJidWZbMl07CisjZGVmaW5lIEJQUCAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgTUFYX0NNRF9QSVhFTFMJCTI1NQogCi0JZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKSB7Ci0JCXJldCA9Ci0JCSAgICB1c2JfY29udHJvbF9tc2coZGV2X2luZm8tPnVkZXYsCi0JCQkJICAgIHVzYl9yY3ZjdHJscGlwZShkZXZfaW5mby0+dWRldiwgMCksICgweDAyKSwKLQkJCQkgICAgKDB4ODAgfCAoMHgwMiA8PCA1KSksIGkgPDwgOCwgMHhBMSwgcmJ1ZiwgMiwKLQkJCQkgICAgMCk7Ci0JCS8qcHJpbnRrKCJyZXQgY29udHJvbCBtc2cgZWRpZCAlZDogJWQgWyVkXVxuIixpLCByZXQsIHJidWZbMV0pOyAqLwotCQlkZXZfaW5mby0+ZWRpZFtpXSA9IHJidWZbMV07Ci0JfQorI2RlZmluZSBSTFhfSEVBREVSX0JZVEVTCTcKKyNkZWZpbmUgTUlOX1JMWF9QSVhfQllURVMgICAgICAgNAorI2RlZmluZSBNSU5fUkxYX0NNRF9CWVRFUwkoUkxYX0hFQURFUl9CWVRFUyArIE1JTl9STFhfUElYX0JZVEVTKQogCi19CisjZGVmaW5lIFJMRV9IRUFERVJfQllURVMJNgorI2RlZmluZSBNSU5fUkxFX1BJWF9CWVRFUwkzCisjZGVmaW5lIE1JTl9STEVfQ01EX0JZVEVTCShSTEVfSEVBREVSX0JZVEVTICsgTUlOX1JMRV9QSVhfQllURVMpCiAKLXN0YXRpYyBpbnQgZGxmYl9idWxrX21zZyhzdHJ1Y3QgZGxmYl9kYXRhICpkZXZfaW5mbywgaW50IGxlbikKLXsKLQlpbnQgcmV0OworI2RlZmluZSBSQVdfSEVBREVSX0JZVEVTCTYKKyNkZWZpbmUgTUlOX1JBV19QSVhfQllURVMJMgorI2RlZmluZSBNSU5fUkFXX0NNRF9CWVRFUwkoUkFXX0hFQURFUl9CWVRFUyArIE1JTl9SQVdfUElYX0JZVEVTKQogCi0JaW5pdF9jb21wbGV0aW9uKCZkZXZfaW5mby0+ZG9uZSk7CisvKiByZW1vdmUgdGhlc2Ugb25jZSBhbGlnbi5oIHBhdGNoIGlzIHRha2VuIGludG8ga2VybmVsICovCisjZGVmaW5lIERMX0FMSUdOX1VQKHgsIGEpIEFMSUdOKHgsIGEpCisjZGVmaW5lIERMX0FMSUdOX0RPV04oeCwgYSkgQUxJR04oeC0oYS0xKSwgYSkKIAotCWRldl9pbmZvLT50eF91cmItPmFjdHVhbF9sZW5ndGggPSAwOwotCWRldl9pbmZvLT50eF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBsZW47CisvKiByZW1vdmUgb25jZSB0aGlzIGdldHMgYWRkZWQgdG8gc3lzZnMuaCAqLworI2RlZmluZSBfX0FUVFJfUlcoYXR0cikgX19BVFRSKGF0dHIsIDA2NDQsIGF0dHIjI19zaG93LCBhdHRyIyNfc3RvcmUpCiAKLQlyZXQgPSB1c2Jfc3VibWl0X3VyYihkZXZfaW5mby0+dHhfdXJiLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmZGV2X2luZm8tPmRvbmUsIDEwMDApKSB7Ci0JCXVzYl9raWxsX3VyYihkZXZfaW5mby0+dHhfdXJiKTsKLQkJcHJpbnRrKCJ1c2IgdGltZW91dCAhISFcbiIpOwotCX0KLQotCXJldHVybiBkZXZfaW5mby0+dHhfdXJiLT5hY3R1YWxfbGVuZ3RoOwotfQotCi1zdGF0aWMgdm9pZCBkbGZiX2luaXRfbW9kZXModm9pZCkKLXsKLQlkbGZiX3ZpZGVvX21vZGVzWzBdLmNvbCA9IDA7Ci0JbWVtY3B5KCZkbGZiX3ZpZGVvX21vZGVzWzBdLmhjbG9jaywgIlx4MjBceDNDXHg3QVx4QzkiLCA0KTsKLQltZW1jcHkoJmRsZmJfdmlkZW9fbW9kZXNbMF0udmNsb2NrLCAiXHhGMlx4NkNceDQ4XHhGOSIsIDQpOwotCW1lbWNweSgmZGxmYl92aWRlb19tb2Rlc1swXS51bmtub3duMSwgIlx4NzBceDUzXHhGRlx4RkZceDIxXHgyNyIsIDYpOwotCWRsZmJfdmlkZW9fbW9kZXNbMF0ueHJlcyA9IDgwMDsKLQltZW1jcHkoJmRsZmJfdmlkZW9fbW9kZXNbMF0udW5rbm93bjIsICJceDkxXHhGM1x4RkZceEZGXHhGRlx4RjkiLCA2KTsKLQlkbGZiX3ZpZGVvX21vZGVzWzBdLnlyZXMgPSA0ODA7Ci0JbWVtY3B5KCZkbGZiX3ZpZGVvX21vZGVzWzBdLnVua25vd24zLCAiXHgwMVx4MDJceEM4XHgxOSIsIDQpOwotCi0JZGxmYl92aWRlb19tb2Rlc1sxXS5jb2wgPSAwOwotCW1lbWNweSgmZGxmYl92aWRlb19tb2Rlc1sxXS5oY2xvY2ssICJceDM2XHgxOFx4RDVceDEwIiwgNCk7Ci0JbWVtY3B5KCZkbGZiX3ZpZGVvX21vZGVzWzFdLnZjbG9jaywgIlx4NjBceEE5XHg3Qlx4MzMiLCA0KTsKLQltZW1jcHkoJmRsZmJfdmlkZW9fbW9kZXNbMV0udW5rbm93bjEsICJceEExXHgyQlx4MjdceDMyXHhGRlx4RkYiLCA2KTsKLQlkbGZiX3ZpZGVvX21vZGVzWzFdLnhyZXMgPSAxMDI0OwotCW1lbWNweSgmZGxmYl92aWRlb19tb2Rlc1sxXS51bmtub3duMiwgIlx4RDlceDlBXHhGRlx4Q0FceEZGXHhGRiIsIDYpOwotCWRsZmJfdmlkZW9fbW9kZXNbMV0ueXJlcyA9IDc2ODsKLQltZW1jcHkoJmRsZmJfdmlkZW9fbW9kZXNbMV0udW5rbm93bjMsICJceDA0XHgwM1x4QzhceDMyIiwgNCk7Ci0KLQlkbGZiX3ZpZGVvX21vZGVzWzJdLmNvbCA9IDA7Ci0JbWVtY3B5KCZkbGZiX3ZpZGVvX21vZGVzWzJdLmhjbG9jaywgIlx4OThceEY4XHgwRFx4NTciLCA0KTsKLQltZW1jcHkoJmRsZmJfdmlkZW9fbW9kZXNbMl0udmNsb2NrLCAiXHgyQVx4NTVceDREXHg1NCIsIDQpOwotCW1lbWNweSgmZGxmYl92aWRlb19tb2Rlc1syXS51bmtub3duMSwgIlx4Q0FceDBEXHhGRlx4RkZceDk0XHg0MyIsIDYpOwotCWRsZmJfdmlkZW9fbW9kZXNbMl0ueHJlcyA9IDEyODA7Ci0JbWVtY3B5KCZkbGZiX3ZpZGVvX21vZGVzWzJdLnVua25vd24yLCAiXHg5QVx4QThceEZGXHhGRlx4RkZceEY5IiwgNik7Ci0JZGxmYl92aWRlb19tb2Rlc1syXS55cmVzID0gMTAyNDsKLQltZW1jcHkoJmRsZmJfdmlkZW9fbW9kZXNbMl0udW5rbm93bjMsICJceDA0XHgwMlx4NjBceDU0IiwgNCk7Ci0KLQlkbGZiX3ZpZGVvX21vZGVzWzNdLmNvbCA9IDA7Ci0JbWVtY3B5KCZkbGZiX3ZpZGVvX21vZGVzWzNdLmhjbG9jaywgIlx4NDJceDI0XHgzOFx4MzYiLCA0KTsKLQltZW1jcHkoJmRsZmJfdmlkZW9fbW9kZXNbM10udmNsb2NrLCAiXHhDMVx4NTJceEQ5XHgyOSIsIDQpOwotCW1lbWNweSgmZGxmYl92aWRlb19tb2Rlc1szXS51bmtub3duMSwgIlx4RUFceEI4XHgzMlx4NjBceEZGXHhGRiIsIDYpOwotCWRsZmJfdmlkZW9fbW9kZXNbM10ueHJlcyA9IDE0MDA7Ci0JbWVtY3B5KCZkbGZiX3ZpZGVvX21vZGVzWzNdLnVua25vd24yLCAiXHhDOVx4NEVceEZGXHhGRlx4RkZceEYyIiwgNik7Ci0JZGxmYl92aWRlb19tb2Rlc1szXS55cmVzID0gMTA1MDsKLQltZW1jcHkoJmRsZmJfdmlkZW9fbW9kZXNbM10udW5rbm93bjMsICJceDA0XHgwMlx4MUVceDVGIiwgNCk7Ci19Ci0KLXN0YXRpYyBjaGFyICpkbGZiX3NldF9yZWdpc3RlcihjaGFyICpidWZwdHIsIHVpbnQ4X3QgcmVnLCB1aW50OF90IHZhbCkKLXsKLQkqYnVmcHRyKysgPSAweEFGOwotCSpidWZwdHIrKyA9IDB4MjA7Ci0JKmJ1ZnB0cisrID0gcmVnOwotCSpidWZwdHIrKyA9IHZhbDsKLQotCXJldHVybiBidWZwdHI7Ci19Ci0KLXN0YXRpYyBpbnQgZGxmYl9zZXRfdmlkZW9fbW9kZShzdHJ1Y3QgZGxmYl9kYXRhICpkZXZfaW5mbywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotCWludCBpLCByZXQ7Ci0JdW5zaWduZWQgY2hhciBqOwotCWNoYXIgKmJ1ZnB0ciA9IGRldl9pbmZvLT5idWY7Ci0JdWludDhfdCAqdmRhdGE7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX1ZNT0RFUzsgaSsrKSB7Ci0JCXByaW50aygiSU5JVCBWSURFTyAlZCAlZCAlZFxuIiwgaSwgZGxmYl92aWRlb19tb2Rlc1tpXS54cmVzLAotCQkgICAgICAgZGxmYl92aWRlb19tb2Rlc1tpXS55cmVzKTsKLQkJaWYgKGRsZmJfdmlkZW9fbW9kZXNbaV0ueHJlcyA9PSB3aWR0aAotCQkgICAgJiYgZGxmYl92aWRlb19tb2Rlc1tpXS55cmVzID09IGhlaWdodCkgewotCi0JCQlkZXZfaW5mby0+YmFzZTE2ID0gMDsKLQkJCWRldl9pbmZvLT5iYXNlMTZkID0gd2lkdGggKiBoZWlnaHQgKiAoRkJfQlBQIC8gOCk7Ci0KLQkJCS8vZGV2X2luZm8tPmJhc2U4ID0gd2lkdGggKiBoZWlnaHQgKiAoRkJfQlBQIC8gOCk7Ci0KLQkJCWRldl9pbmZvLT5iYXNlOCA9IGRldl9pbmZvLT5iYXNlMTY7Ci0JCQlkZXZfaW5mby0+YmFzZThkID0gZGV2X2luZm8tPmJhc2UxNmQ7Ci0KLQkJCS8qIHNldCBlbmNyeXB0aW9uIGtleSAobnVsbCkgKi8KLQkJCW1lbWNweShkZXZfaW5mby0+YnVmLCBTVERfQ0hBTk5FTCwgMTYpOwotCQkJcmV0ID0KLQkJCSAgICB1c2JfY29udHJvbF9tc2coZGV2X2luZm8tPnVkZXYsCi0JCQkJCSAgICB1c2Jfc25kY3RybHBpcGUoZGV2X2luZm8tPnVkZXYsIDApLAotCQkJCQkgICAgMHgxMiwgKDB4MDIgPDwgNSksIDAsIDAsCi0JCQkJCSAgICBkZXZfaW5mby0+YnVmLCAxNiwgMCk7Ci0JCQlwcmludGsoInJldCBjb250cm9sIG1zZyAxIChTVERfQ0hBTk5FTCk6ICVkXG4iLCByZXQpOwotCi0JCQkvKiBzZXQgcmVnaXN0ZXJzICovCi0JCQlidWZwdHIgPSBkbGZiX3NldF9yZWdpc3RlcihidWZwdHIsIDB4RkYsIDB4MDApOwotCi0JCQkvKiBzZXQgY29sb3IgZGVwdGggKi8KLQkJCWJ1ZnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyKGJ1ZnB0ciwgMHgwMCwgMHgwMCk7Ci0KLQkJCS8qIHNldCBhZGRyZXNzZXMgKi8KLQkJCWJ1ZnB0ciA9Ci0JCQkgICAgZGxmYl9zZXRfcmVnaXN0ZXIoYnVmcHRyLCAweDIwLAotCQkJCQkgICAgICAoY2hhcikoZGV2X2luZm8tPmJhc2UxNiA+PiAxNikpOwotCQkJYnVmcHRyID0KLQkJCSAgICBkbGZiX3NldF9yZWdpc3RlcihidWZwdHIsIDB4MjEsCi0JCQkJCSAgICAgIChjaGFyKShkZXZfaW5mby0+YmFzZTE2ID4+IDgpKTsKLQkJCWJ1ZnB0ciA9Ci0JCQkgICAgZGxmYl9zZXRfcmVnaXN0ZXIoYnVmcHRyLCAweDIyLAotCQkJCQkgICAgICAoY2hhcikoZGV2X2luZm8tPmJhc2UxNikpOwotCi0JCQlidWZwdHIgPQotCQkJICAgIGRsZmJfc2V0X3JlZ2lzdGVyKGJ1ZnB0ciwgMHgyNiwKLQkJCQkJICAgICAgKGNoYXIpKGRldl9pbmZvLT5iYXNlOCA+PiAxNikpOwotCQkJYnVmcHRyID0KLQkJCSAgICBkbGZiX3NldF9yZWdpc3RlcihidWZwdHIsIDB4MjcsCi0JCQkJCSAgICAgIChjaGFyKShkZXZfaW5mby0+YmFzZTggPj4gOCkpOwotCQkJYnVmcHRyID0KLQkJCSAgICBkbGZiX3NldF9yZWdpc3RlcihidWZwdHIsIDB4MjgsCi0JCQkJCSAgICAgIChjaGFyKShkZXZfaW5mby0+YmFzZTgpKTsKLQotCQkJLyogc2V0IHZpZGVvIG1vZGUgKi8KLQkJCXZkYXRhID0gKHVpbnQ4X3QgKikmZGxmYl92aWRlb19tb2Rlc1tpXTsKLQkJCWZvciAoaiA9IDA7IGogPCAyOTsgaisrKQotCQkJCWJ1ZnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyKGJ1ZnB0ciwgaiwgdmRhdGFbal0pOwotCi0JCQkvKiBibGFuayAqLwotCQkJYnVmcHRyID0gZGxmYl9zZXRfcmVnaXN0ZXIoYnVmcHRyLCAweDFGLCAweDAwKTsKLQotCQkJLyogZW5kIHJlZ2lzdGVycyAqLwotCQkJYnVmcHRyID0gZGxmYl9zZXRfcmVnaXN0ZXIoYnVmcHRyLCAweEZGLCAweEZGKTsKLQotCQkJLyogc2VuZCAqLwotCQkJcmV0ID0gZGxmYl9idWxrX21zZyhkZXZfaW5mbywgYnVmcHRyIC0gZGV2X2luZm8tPmJ1Zik7Ci0JCQlwcmludGsoInJldCBidWxrIDI6ICVkICV0ZFxuIiwgcmV0LAotCQkJICAgICAgIGJ1ZnB0ciAtIGRldl9pbmZvLT5idWYpOwotCi0JCQkvKiBmbHVzaCAqLwotCQkJcmV0ID0gZGxmYl9idWxrX21zZyhkZXZfaW5mbywgMCk7Ci0JCQlwcmludGsoInJldCBidWxrIDM6ICVkXG4iLCByZXQpOwotCi0JCQlkZXZfaW5mby0+c2NyZWVuX3NpemUgPSB3aWR0aCAqIGhlaWdodCAqIChGQl9CUFAgLyA4KTsKLQkJCWRldl9pbmZvLT5saW5lX2xlbmd0aCA9IHdpZHRoICogKEZCX0JQUCAvIDgpOwotCi0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQotCXJldHVybiAtMTsKLX0KLQorI2RlZmluZSBkbF9lcnIoZm9ybWF0LCBhcmcuLi4pIFwKKwlkZXZfZXJyKGRldi0+Z2RldiwgImRsZmI6ICIgZm9ybWF0LCAjIyBhcmcpCisjZGVmaW5lIGRsX3dhcm4oZm9ybWF0LCBhcmcuLi4pIFwKKwlkZXZfd2FybihkZXYtPmdkZXYsICJkbGZiOiAiIGZvcm1hdCwgIyMgYXJnKQorI2RlZmluZSBkbF9ub3RpY2UoZm9ybWF0LCBhcmcuLi4pIFwKKwlkZXZfbm90aWNlKGRldi0+Z2RldiwgImRsZmI6ICIgZm9ybWF0LCAjIyBhcmcpCisjZGVmaW5lIGRsX2luZm8oZm9ybWF0LCBhcmcuLi4pIFwKKwlkZXZfaW5mbyhkZXYtPmdkZXYsICJkbGZiOiAiIGZvcm1hdCwgIyMgYXJnKQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9LY29uZmlnCmluZGV4IDM1MGQ1ZDYuLjJjMWQxMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9LY29uZmlnCkBAIC0zNCwzICszNCwxMCBAQAogCiAJIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXNiaXAuCisKK2NvbmZpZyBVU0JfSVBfREVCVUdfRU5BQkxFCisJYm9vbCAiVVNCLUlQIERlYnVnIEVuYWJsZSIKKwlkZXBlbmRzIG9uIFVTQl9JUF9DT01NT04KKwlkZWZhdWx0IE4KKwktLS1oZWxwLS0tCisJICBUaGlzIGVuYWJsZXMgdGhlIGRlYnVnIG1lc3NhZ2VzIGZyb20gdGhlIFVTQi1JUCBkcml2ZXJzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL01ha2VmaWxlCmluZGV4IDE3OWY0MjEuLjZmMjkxNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvTWFrZWZpbGUKQEAgLTcsNiArNyw2IEBACiBvYmotJChDT05GSUdfVVNCX0lQX0hPU1QpICs9IHVzYmlwLm8KIHVzYmlwLW9ianMgOj0gc3R1Yl9kZXYubyBzdHViX21haW4ubyBzdHViX3J4Lm8gc3R1Yl90eC5vCiAKLWlmZXEgKCQoQ09ORklHX1VTQl9ERUJVRykseSkKK2lmZXEgKCQoQ09ORklHX1VTQl9JUF9ERUJVR19FTkFCTEUpLHkpCiAJRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcKIGVuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfY29tbW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfY29tbW9uLmMKaW5kZXggZGRiNmY1Zi4uN2E0NWRhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uYwpAQCAtMzMsNyArMzMsNyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIGRlYnVnIHJvdXRpbmVzICovCiAKLSNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCisjaWZkZWYgQ09ORklHX1VTQl9JUF9ERUJVR19FTkFCTEUKIHVuc2lnbmVkIGxvbmcgdXNiaXBfZGVidWdfZmxhZyA9IDB4ZmZmZmZmZmY7CiAjZWxzZQogdW5zaWduZWQgbG9uZyB1c2JpcF9kZWJ1Z19mbGFnOwpAQCAtNTUsMTAgKzU1LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2ZsYWcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnOwotCi0Jc3NjYW5mKGJ1ZiwgIiVseCIsICZmbGFnKTsKLQl1c2JpcF9kZWJ1Z19mbGFnID0gZmxhZzsKKwlzc2NhbmYoYnVmLCAiJWx4IiwgJnVzYmlwX2RlYnVnX2ZsYWcpOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtNjYsMzMgKzYzLDggQEAKIAogc3RhdGljIHZvaWQgdXNiaXBfZHVtcF9idWZmZXIoY2hhciAqYnVmZiwgaW50IGJ1ZmZsZW4pCiB7Ci0JaW50IGk7Ci0KLQlpZiAoYnVmZmxlbiA+IDEyOCkgewotCQlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspIHsKLQkJCWlmIChpJTI0ID09IDApCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgICIpOwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiUwMnggIiwgKHVuc2lnbmVkIGNoYXIpIGJ1ZmZbaV0pOwotCQkJaWYgKGklNCA9PSAzKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICJ8ICIpOwotCQkJaWYgKGklMjQgPT0gMjMpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIlxuIik7Ci0JCX0KLQkJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiAoJWQgYnl0ZSlcbiIsIGJ1ZmZsZW4pOwotCQlyZXR1cm47Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGJ1ZmZsZW47IGkrKykgewotCQlpZiAoaSUyNCA9PSAwKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgICIpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiJTAyeCAiLCAodW5zaWduZWQgY2hhcikgYnVmZltpXSk7Ci0JCWlmIChpJTQgPT0gMykKLQkJCXByaW50ayhLRVJOX0RFQlVHICJ8ICIpOwotCQlpZiAoaSUyNCA9PSAyMykKLQkJCXByaW50ayhLRVJOX0RFQlVHICJcbiIpOwotCX0KLQlwcmludGsoS0VSTl9ERUJVRyAiXG4iKTsKLQorCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICJ1c2ItaXAiLCBEVU1QX1BSRUZJWF9PRkZTRVQsIDE2LCA0LAorCQkgICAgICAgYnVmZiwgYnVmZmxlbiwgZmFsc2UpOwogfQogCiBzdGF0aWMgdm9pZCB1c2JpcF9kdW1wX3BpcGUodW5zaWduZWQgaW50IHApCkBAIC01NTgsNjAgKzUzMCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JpcF94bWl0KTsKIAotCi0vKiBub3cgYSB1c3JsYW5kIHV0aWxpdHkgc2hvdWxkIHNldCBvcHRpb25zLiAqLwotI2lmIDAKLWludCBzZXRxdWlja2FjayhzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpCi17Ci0JbW1fc2VnbWVudF90IG9sZGZzOwotCWludCB2YWwgPSAxOwotCWludCByZXQ7Ci0KLQlvbGRmcyA9IGdldF9mcygpOwotCXNldF9mcyhnZXRfZHMoKSk7Ci0JcmV0ID0gc29ja2V0LT5vcHMtPnNldHNvY2tvcHQoc29ja2V0LCBTT0xfVENQLCBUQ1BfUVVJQ0tBQ0ssCi0JCQkoY2hhciBfX3VzZXIgKikgJnZhbCwgc2l6ZW9mKHJldCkpOwotCXNldF9mcyhvbGRmcyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgc2V0bm9kZWxheShzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpCi17Ci0JbW1fc2VnbWVudF90IG9sZGZzOwotCWludCB2YWwgPSAxOwotCWludCByZXQ7Ci0KLQlvbGRmcyA9IGdldF9mcygpOwotCXNldF9mcyhnZXRfZHMoKSk7Ci0JcmV0ID0gc29ja2V0LT5vcHMtPnNldHNvY2tvcHQoc29ja2V0LCBTT0xfVENQLCBUQ1BfTk9ERUxBWSwKLQkJCShjaGFyIF9fdXNlciAqKSAmdmFsLCBzaXplb2YocmV0KSk7Ci0Jc2V0X2ZzKG9sZGZzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWludCBzZXRrZWVwYWxpdmUoc3RydWN0IHNvY2tldCAqc29ja2V0KQotewotCW1tX3NlZ21lbnRfdCBvbGRmczsKLQlpbnQgdmFsID0gMTsKLQlpbnQgcmV0OwotCi0Jb2xkZnMgPSBnZXRfZnMoKTsKLQlzZXRfZnMoZ2V0X2RzKCkpOwotCXJldCA9IHNvY2tldC0+b3BzLT5zZXRzb2Nrb3B0KHNvY2tldCwgU09MX1NPQ0tFVCwgU09fS0VFUEFMSVZFLAotCQkJKGNoYXIgX191c2VyICopICZ2YWwsIHNpemVvZihyZXQpKTsKLQlzZXRfZnMob2xkZnMpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCBzZXRyZXVzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpCi17Ci0Jc29ja2V0LT5zay0+c2tfcmV1c2UgPSAxOwotfQotI2VuZGlmCi0KIHN0cnVjdCBzb2NrZXQgKnNvY2tmZF90b19zb2NrZXQodW5zaWduZWQgaW50IHNvY2tmZCkKIHsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfY29tbW9uLmggYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfY29tbW9uLmgKaW5kZXggMWNhM2VhYi4uNmYxZGNiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uaApAQCAtMzMsMTIgKzMzLDEyIEBACiAgKi8KIAogLyoqCi0gKiB1c2JpcF91ZGJnIC0gcHJpbnQgZGVidWcgbWVzc2FnZXMgaWYgQ09ORklHX1VTQl9ERUJVRyBpcyBkZWZpbmVkCisgKiB1c2JpcF91ZGJnIC0gcHJpbnQgZGVidWcgbWVzc2FnZXMgaWYgQ09ORklHX1VTQl9JUF9ERUJVR19FTkFCTEUgaXMgZGVmaW5lZAogICogQGZtdDoKICAqIEBhcmdzOgogICovCiAKLSNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCisjaWZkZWYgQ09ORklHX1VTQl9JUF9ERUJVR19FTkFCTEUKIAogI2RlZmluZSB1c2JpcF91ZGJnKGZtdCwgYXJncy4uLikJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCkBAIC00NywxMSArNDcsMTEgQEAKIAkJCV9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18sICMjYXJncyk7CQlcCiAJfSB3aGlsZSAoMCkKIAotI2Vsc2UgIC8qIENPTkZJR19VU0JfREVCVUcgKi8KKyNlbHNlICAvKiBDT05GSUdfVVNCX0lQX0RFQlVHX0VOQUJMRSAqLwogCiAjZGVmaW5lIHVzYmlwX3VkYmcoZm10LCBhcmdzLi4uKQkJZG8geyB9IHdoaWxlICgwKQogCi0jZW5kaWYgLyogQ09ORklHX1VTQl9ERUJVRyAqLworI2VuZGlmIC8qIENPTkZJR19VU0JfSVBfREVCVUdfRU5BQkxFICovCiAKIAogZW51bSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdm1lL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL0tjb25maWcKaW5kZXggYWU2MjhhNS4uNjQxMWFlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvS2NvbmZpZwpAQCAtMTQsNCArMTQsNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy92bWUvZGV2aWNlcy9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy92bWUvYm9hcmRzL0tjb25maWciCisKIGVuZGlmICMgVk1FCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdm1lL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9NYWtlZmlsZQppbmRleCA4YzNiOTBlLi5iNGVhM2Y4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdm1lL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvTWFrZWZpbGUKQEAgLTUsMyArNSw0IEBACiAKIG9iai15CQkJCSs9IGJyaWRnZXMvCiBvYmoteQkJCQkrPSBkZXZpY2VzLworb2JqLXkJCQkJKz0gYm9hcmRzLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9UT0RPCmluZGV4IDIyMDFmZjYuLjgyYzIyMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92bWUvVE9ETworKysgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL1RPRE8KQEAgLTQsMjggKzQsNiBAQAogQVBJCiA9PT0KIAotRE1BIFJlc291cmNlIEFsbG9jYXRpb24gaW5jb21wbGV0ZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgY3VycmVudCBETUEgcmVzb3VyY2UgQWxsb2NhdGlvbiBwcm92aWRlcyBubyBtZWFucyBvZiBzZWxlY3RpbmcgdGhlCi1zdWl0YWJpbGl0eSBvZiBhIERNQSBjb250cm9sbGVyIGJhc2VkIG9uIGl0J3Mgc3VwcG9ydGVkIG1vZGVzIG9mIG9wZXJhdGlvbiwgYXMKLW9wcG9zZWQgdG8gdGhlIHJlc291cmNlIGFsbG9jYXRpb24gbWVjaGFuaXNtcyBmb3IgbWFzdGVyIGFuZCBzbGF2ZSB3aW5kb3dzOgotCi0Jc3RydWN0IHZtZV9yZXNvdXJjZSAqdm1lX2RtYV9yZXF1ZXN0KHN0cnVjdCBkZXZpY2UgKmRldik7Ci0KLUFzIG9wcG9zZWQgdG86Ci0KLQlzdHJ1Y3Qgdm1lX3Jlc291cmNlICogdm1lX21hc3Rlcl9yZXF1ZXN0KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJdm1lX2FkZHJlc3NfdCBhc3BhY2UsIHZtZV9jeWNsZV90IGN5Y2xlLCB2bWVfd2lkdGhfdCB3aWR0aCk7Ci0KLVRoZSBUU0kxNDggY2FuIHBlcmZvcm0sIFZNRS10by1QQ0ksIFBDSS10by1WTUUsIFBBVFRFUk4tdG8tVk1FLCBQQVRURVJOLXRvLVBDSSwKLVZNRS10by1WTUUgYW5kIFBDSS10by1QQ0kgdHJhbnNmZXJzLiBUaGUgQ0E5MUMxNDIgY2FuIG9ubHkgcHJvdmlkZSBWTUUtdG8tUENJCi1hbmQgUENJLXRvLVZNRS4KLQotQWRkIGEgbWVjaGFuaXNtIHRvIHNlbGVjdCBhIFZNRSBjb250cm9sbGVyIGJhc2VkIG9uIHNvdXJjZS90YXJnZXQgdHlwZSwKLXJlcXVpcmVkIGFzcGFjZSwgY3ljbGUgYW5kIHdpZHRoIHJlcXVpcmVtZW50cy4KLQotCiBNYXN0ZXIgd2luZG93IGJyb2FkY2FzdCBzZWxlY3QgbWFzawogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNTksNyArMzcsNiBAQAogQ29yZQogPT09PQogCi0tIFJlbmFtZSB2bWVfbWFzdGVyX3Jlc291cmNlJ3MgInBjaV9yZXNvdXJjZSIgdG8gYmUgYnVzIGFnbm9zdGljLgogLSBJbXByb3ZlIGdlbmVyaWMgc2FuaXR5IGNoZWNrcyAoU3VjaCBhcyBkb2VzIGFuIG9mZnNldCBhbmQgc2l6ZSBmaXQgd2l0aGluIGEKICAgd2luZG93IGFuZCBwYXJhbWV0ZXIgY2hlY2tpbmcpLgogCkBAIC02OSw3ICs0Niw2IEBACiBUZW1wZSAodHNpMTQ4KQogLS0tLS0tLS0tLS0tLS0KIAotLSBEcml2ZXIgY2FuIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgYSBzaW5nbGUgYnJpZGdlLgogLSAyZVNTVCBCcm9hZGNhc3QgbW9kZS4KIC0gTWFpbGJveGVzIHVuc3VwcG9ydGVkLgogLSBJbXByb3ZlIGVycm9yIGRldGVjdGlvbi4KQEAgLTgwLDEwICs1Niw2IEBACiBVbml2ZXJzZSBJSSAoY2E5MWMxNDIpCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS0gRHJpdmVyIGNhbiBjdXJyZW50bHkgb25seSBzdXBwb3J0IGEgc2luZ2xlIGJyaWRnZS4KLS0gRE1BIHVuc3VwcG9ydGVkLgotLSBSTVcgdHJhbnNhY3Rpb25zIHVuc3VwcG9ydGVkLgotLSBMb2NhdGlvbiBNb25pdG9ycyB1bnN1cHBvcnRlZC4KIC0gTWFpbGJveGVzIHVuc3VwcG9ydGVkLgogLSBFcnJvciBEZXRlY3Rpb24uCiAtIENvbnRyb2wgb2YgcHJlZmV0Y2ggc2l6ZSwgdGhyZXNob2xkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9ib2FyZHMvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYm9hcmRzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYxNjMxMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYm9hcmRzL0tjb25maWcKQEAgLTAsMCArMSw5IEBACitjb21tZW50ICJWTUUgQm9hcmQgRHJpdmVycyIKKworY29uZmlnIFZNSVZNRV83ODA1CisJdHJpc3RhdGUgIlZNSVZNRS03ODA1IgorCWhlbHAKKwkgIElmIHlvdSBzYXkgWSBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIFZNSVZNRS03ODA1IGJvYXJkLgorCSAgVGhpcyBib2FyZCBoYXMgYW4gYWRkaXRpb25hbCBjb250cm9sIGludGVyZmFjZSB0byB0aGUgVW5pdmVyc2UgSUkKKwkgIGNoaXAuIFRoaXMgZHJpdmVyIGhhcyB0byBiZSBpbmNsdWRlZCBpZiB5b3Ugd2FudCB0byBhY2Nlc3MgVk1FIGJ1cworCSAgd2l0aCBWTUlWTUUtNzgwNSBib2FyZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92bWUvYm9hcmRzL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9ib2FyZHMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM2NTgzNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYm9hcmRzL01ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIFZNRSBib2FyZCBkcml2ZXJzLgorIworCitvYmotJChDT05GSUdfVk1JVk1FXzc4MDUpCSs9IHZtZV92bWl2bWU3ODA1Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92bWUvYm9hcmRzL3ZtZV92bWl2bWU3ODA1LmMgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JvYXJkcy92bWVfdm1pdm1lNzgwNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0M2M5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JvYXJkcy92bWVfdm1pdm1lNzgwNS5jCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogU3VwcG9ydCBmb3IgdGhlIFZNSVZNRS03ODA1IGJvYXJkIGFjY2VzcyB0byB0aGUgVW5pdmVyc2UgSUkgYnJpZGdlLgorICoKKyAqIEF1dGhvcjogQXJ0aHVyIEJlbmlsb3YgPGFydGh1ci5iZW5pbG92QGliYS1ncm91cC5jb20+CisgKiBDb3B5cmlnaHQgMjAxMCBJb24gQmVhbSBBcHBsaWNhdGlvbiwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlICJ2bWVfdm1pdm1lNzgwNS5oIgorCitzdGF0aWMgaW50IF9faW5pdCB2bWljX2luaXQodm9pZCk7CitzdGF0aWMgaW50IHZtaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKik7CitzdGF0aWMgdm9pZCB2bWljX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqKTsKK3N0YXRpYyB2b2lkIF9fZXhpdCB2bWljX2V4aXQodm9pZCk7CisKKy8qKiBCYXNlIGFkZHJlc3MgdG8gYWNjZXNzIEZQR0EgcmVnaXN0ZXIgKi8KK3N0YXRpYyB2b2lkICp2bWljX2Jhc2U7CisKK3N0YXRpYyBjaGFyIGRyaXZlcl9uYW1lW10gPSAidm1pdm1lXzc4MDUiOworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdm1pY19pZHNbXSA9IHsKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9WTUlDLCBQQ0lfREVWSUNFX0lEX1ZUSU1SKSB9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB2bWljX2RyaXZlciA9IHsKKwkubmFtZSA9IGRyaXZlcl9uYW1lLAorCS5pZF90YWJsZSA9IHZtaWNfaWRzLAorCS5wcm9iZSA9IHZtaWNfcHJvYmUsCisJLnJlbW92ZSA9IHZtaWNfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdm1pY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnZtaWNfZHJpdmVyKTsKK30KKworc3RhdGljIGludCB2bWljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldHZhbDsKKwl1MzIgZGF0YTsKKworCS8qIEVuYWJsZSB0aGUgZGV2aWNlICovCisJcmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gZW5hYmxlIGRldmljZVxuIik7CisJCWdvdG8gZXJyOworCX0KKworCS8qIE1hcCBSZWdpc3RlcnMgKi8KKwlyZXR2YWwgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIGRyaXZlcl9uYW1lKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byByZXNlcnZlIHJlc291cmNlc1xuIik7CisJCWdvdG8gZXJyX3Jlc291cmNlOworCX0KKworCS8qIE1hcCByZWdpc3RlcnMgaW4gQkFSIDAgKi8KKwl2bWljX2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLCAxNik7CisJaWYgKCF2bWljX2Jhc2UpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHJlbWFwIENSRyByZWdpb25cbiIpOworCQlyZXR2YWwgPSAtRUlPOworCQlnb3RvIGVycl9yZW1hcDsKKwl9CisKKwkvKiBDbGVhciB0aGUgRlBHQSBWTUUgSUYgY29udGVudHMgKi8KKwlpb3dyaXRlMzIoMCwgdm1pY19iYXNlICsgVk1FX0NPTlRST0wpOworCisJLyogQ2xlYXIgYW55IGluaXRpYWwgQkVSUiAgKi8KKwlkYXRhID0gaW9yZWFkMzIodm1pY19iYXNlICsgVk1FX0NPTlRST0wpICYgMHgwMDAwMEZGRjsKKwlkYXRhIHw9IEJNX1ZNRV9DT05UUk9MX0JFUlJTVDsKKwlpb3dyaXRlMzIoZGF0YSwgdm1pY19iYXNlICsgVk1FX0NPTlRST0wpOworCisJLyogRW5hYmxlIHRoZSB2bWUgaW50ZXJmYWNlIGFuZCBieXRlIHN3YXBwaW5nICovCisJZGF0YSA9IGlvcmVhZDMyKHZtaWNfYmFzZSArIFZNRV9DT05UUk9MKSAmIDB4MDAwMDBGRkY7CisJZGF0YSA9IGRhdGEgfCBCTV9WTUVfQ09OVFJPTF9NQVNURVJfRU5ESUFOIHwKKwkJCUJNX1ZNRV9DT05UUk9MX1NMQVZFX0VORElBTiB8CisJCQlCTV9WTUVfQ09OVFJPTF9BQkxFIHwKKwkJCUJNX1ZNRV9DT05UUk9MX0JFUlJJIHwKKwkJCUJNX1ZNRV9DT05UUk9MX0JQRU5BIHwKKwkJCUJNX1ZNRV9DT05UUk9MX1ZCRU5BOworCWlvd3JpdGUzMihkYXRhLCB2bWljX2Jhc2UgKyBWTUVfQ09OVFJPTCk7CisKKwlyZXR1cm4gMDsKKworZXJyX3JlbWFwOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CitlcnJfcmVzb3VyY2U6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworZXJyOgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHZtaWNfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWlvdW5tYXAodm1pY19iYXNlKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdm1pY19leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ2bWljX2RyaXZlcik7Cit9CisKK01PRFVMRV9ERVNDUklQVElPTigiVk1JVk1FLTc4MDUgYm9hcmQgc3VwcG9ydCBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkFydGh1ciBCZW5pbG92IDxhcnRodXIuYmVuaWxvdkBpYmEtZ3JvdXAuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfaW5pdCh2bWljX2luaXQpOworbW9kdWxlX2V4aXQodm1pY19leGl0KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9ib2FyZHMvdm1lX3ZtaXZtZTc4MDUuaCBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYm9hcmRzL3ZtZV92bWl2bWU3ODA1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjMmM0NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYm9hcmRzL3ZtZV92bWl2bWU3ODA1LmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIHZtaXZtZV83ODA1LmgKKyAqCisgKiBTdXBwb3J0IGZvciB0aGUgVk1JVk1FLTc4MDUgYm9hcmQgYWNjZXNzIHRvIHRoZSBVbml2ZXJzZSBJSSBicmlkZ2UuCisgKgorICogQXV0aG9yOiBBcnRodXIgQmVuaWxvdiA8YXJ0aHVyLmJlbmlsb3ZAaWJhLWdyb3VwLmNvbT4KKyAqIENvcHlyaWdodCAyMDEwIElvbiBCZWFtIEFwcGxpY2F0aW9uLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisKKyNpZm5kZWYgX1ZNSVZNRV83ODA1X0gKKyNkZWZpbmUgX1ZNSVZNRV83ODA1X0gKKworI2lmbmRlZiBQQ0lfVkVORE9SX0lEX1ZNSUMKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9WTUlDCQkweDExNEEKKyNlbmRpZgorCisjaWZuZGVmIFBDSV9ERVZJQ0VfSURfVlRJTVIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WVElNUgkJMHgwMDA0CisjZW5kaWYKKworI2RlZmluZSBWTUVfQ09OVFJPTAkJCTB4MDAwMAorI2RlZmluZSBCTV9WTUVfQ09OVFJPTF9NQVNURVJfRU5ESUFOCTB4MDAwMQorI2RlZmluZSBCTV9WTUVfQ09OVFJPTF9TTEFWRV9FTkRJQU4JMHgwMDAyCisjZGVmaW5lIEJNX1ZNRV9DT05UUk9MX0FCTEUJCTB4MDAwNAorI2RlZmluZSBCTV9WTUVfQ09OVFJPTF9CRVJSSQkJMHgwMDQwCisjZGVmaW5lIEJNX1ZNRV9DT05UUk9MX0JFUlJTVAkJMHgwMDgwCisjZGVmaW5lIEJNX1ZNRV9DT05UUk9MX0JQRU5BCQkweDA0MDAKKyNkZWZpbmUgQk1fVk1FX0NPTlRST0xfVkJFTkEJCTB4MDgwMAorCisjZW5kaWYgLyogX1ZNSVZNRV83ODA1X0ggKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvS2NvbmZpZwppbmRleCAwMjNjY2ViLi45MzMxMDY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvS2NvbmZpZwpAQCAtMiwxMiArMiwxNCBAQAogCiBjb25maWcgVk1FX0NBOTFDWDQyCiAJdHJpc3RhdGUgIlVuaXZlcnNlIElJIgorCWRlcGVuZHMgb24gVklSVF9UT19CVVMKIAloZWxwCiAJIElmIHlvdSBzYXkgWSBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIFR1bmRyYSBDQTkxQzE0MgogCSAoVW5pdmVyc2UgSUkpIFZNRSBicmlkZ2UgY2hpcC4KIAogY29uZmlnIFZNRV9UU0kxNDgKIAl0cmlzdGF0ZSAiVGVtcGUiCisJZGVwZW5kcyBvbiBWSVJUX1RPX0JVUwogCWhlbHAKIAkgSWYgeW91IHNheSBZIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgVHVuZHJhIFRTSTE0OCBWTUUgYnJpZGdlCiAJIGNoaXAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX2NhOTFjeDQyLmMgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX2NhOTFjeDQyLmMKaW5kZXggMWNmM2U5MS4uMjc5NWZmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV9jYTkxY3g0Mi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfY2E5MWN4NDIuYwpAQCAtMSw4ICsxLDggQEAKIC8qCiAgKiBTdXBwb3J0IGZvciB0aGUgVHVuZHJhIFVuaXZlcnNlIEkvSUkgVk1FLVBDSSBCcmlkZ2UgQ2hpcHMKICAqCi0gKiBBdXRob3I6IE1hcnR5biBXZWxjaCA8bWFydHluLndlbGNoQGdlZmFudWMuY29tPgotICogQ29weXJpZ2h0IDIwMDggR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIEVtYmVkZGVkIFN5c3RlbXMsIEluYy4KKyAqIEF1dGhvcjogTWFydHluIFdlbGNoIDxtYXJ0eW4ud2VsY2hAZ2UuY29tPgorICogQ29weXJpZ2h0IDIwMDggR0UgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIEVtYmVkZGVkIFN5c3RlbXMsIEluYy4KICAqCiAgKiBCYXNlZCBvbiB3b3JrIGJ5IFRvbSBBcm1pc3RlYWQgYW5kIEFqaXQgUHJlbQogICogQ29weXJpZ2h0IDIwMDQgTW90b3JvbGEgSW5jLgpAQCAtMzgsMjUgKzM4LDEyIEBACiBzdGF0aWMgdm9pZCBjYTkxY3g0Ml9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKik7CiBzdGF0aWMgdm9pZCBfX2V4aXQgY2E5MWN4NDJfZXhpdCh2b2lkKTsKIAotc3RydWN0IHZtZV9icmlkZ2UgKmNhOTFjeDQyX2JyaWRnZTsKLXdhaXRfcXVldWVfaGVhZF90IGRtYV9xdWV1ZTsKLXdhaXRfcXVldWVfaGVhZF90IGlhY2tfcXVldWU7Ci13YWl0X3F1ZXVlX2hlYWRfdCBsbV9xdWV1ZTsKLXdhaXRfcXVldWVfaGVhZF90IG1ib3hfcXVldWU7Ci0KLXZvaWQgKCpsbV9jYWxsYmFja1s0XSkoaW50KTsgICAgLyogQ2FsbGVkIGluIGludGVycnVwdCBoYW5kbGVyLCBiZSBjYXJlZnVsISAqLwotdm9pZCAqY3Jjc3Jfa2VybmVsOwotZG1hX2FkZHJfdCBjcmNzcl9idXM7Ci0KLXN0cnVjdCBtdXRleCB2bWVfcm13OyAgIC8qIE9ubHkgb25lIFJNVyBjeWNsZSBhdCBhIHRpbWUgKi8KLXN0cnVjdCBtdXRleCB2bWVfaW50OyAgIC8qCi0JCQkgKiBPbmx5IG9uZSBWTUUgaW50ZXJydXB0IGNhbiBiZQotCQkJICogZ2VuZXJhdGVkIGF0IGEgdGltZSwgcHJvdmlkZSBsb2NraW5nCi0JCQkgKi8KKy8qIE1vZHVsZSBwYXJhbWV0ZXJzICovCitzdGF0aWMgaW50IGdlb2lkOwogCiBzdGF0aWMgY2hhciBkcml2ZXJfbmFtZVtdID0gInZtZV9jYTkxY3g0MiI7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjYTkxY3g0Ml9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjYTkxY3g0Ml9pZHNbXSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9UVU5EUkEsIFBDSV9ERVZJQ0VfSURfVFVORFJBX0NBOTFDMTQyKSB9LAogCXsgfSwKIH07CkBAIC02OCwxNCArNTUsMTQgQEAKIAkucmVtb3ZlID0gY2E5MWN4NDJfcmVtb3ZlLAogfTsKIAotc3RhdGljIHUzMiBjYTkxY3g0Ml9ETUFfaXJxaGFuZGxlcih2b2lkKQorc3RhdGljIHUzMiBjYTkxY3g0Ml9ETUFfaXJxaGFuZGxlcihzdHJ1Y3QgY2E5MWN4NDJfZHJpdmVyICpicmlkZ2UpCiB7Ci0Jd2FrZV91cCgmZG1hX3F1ZXVlKTsKKwl3YWtlX3VwKCYoYnJpZGdlLT5kbWFfcXVldWUpKTsKIAogCXJldHVybiBDQTkxQ1g0Ml9MSU5UX0RNQTsKIH0KIAotc3RhdGljIHUzMiBjYTkxY3g0Ml9MTV9pcnFoYW5kbGVyKHUzMiBzdGF0KQorc3RhdGljIHUzMiBjYTkxY3g0Ml9MTV9pcnFoYW5kbGVyKHN0cnVjdCBjYTkxY3g0Ml9kcml2ZXIgKmJyaWRnZSwgdTMyIHN0YXQpCiB7CiAJaW50IGk7CiAJdTMyIHNlcnZpY2VkID0gMDsKQEAgLTgzLDcgKzcwLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCWlmIChzdGF0ICYgQ0E5MUNYNDJfTElOVF9MTVtpXSkgewogCQkJLyogV2Ugb25seSBlbmFibGUgaW50ZXJydXB0cyBpZiB0aGUgY2FsbGJhY2sgaXMgc2V0ICovCi0JCQlsbV9jYWxsYmFja1tpXShpKTsKKwkJCWJyaWRnZS0+bG1fY2FsbGJhY2tbaV0oaSk7CiAJCQlzZXJ2aWNlZCB8PSBDQTkxQ1g0Ml9MSU5UX0xNW2ldOwogCQl9CiAJfQpAQCAtOTIsNDAgKzc5LDI1IEBACiB9CiAKIC8qIFhYWCBUaGlzIG5lZWRzIHRvIGJlIHNwbGl0IGludG8gNCBxdWV1ZXMgKi8KLXN0YXRpYyB1MzIgY2E5MWN4NDJfTUJfaXJxaGFuZGxlcihpbnQgbWJveF9tYXNrKQorc3RhdGljIHUzMiBjYTkxY3g0Ml9NQl9pcnFoYW5kbGVyKHN0cnVjdCBjYTkxY3g0Ml9kcml2ZXIgKmJyaWRnZSwgaW50IG1ib3hfbWFzaykKIHsKLQl3YWtlX3VwKCZtYm94X3F1ZXVlKTsKKwl3YWtlX3VwKCYoYnJpZGdlLT5tYm94X3F1ZXVlKSk7CiAKIAlyZXR1cm4gQ0E5MUNYNDJfTElOVF9NQk9YOwogfQogCi1zdGF0aWMgdTMyIGNhOTFjeDQyX0lBQ0tfaXJxaGFuZGxlcih2b2lkKQorc3RhdGljIHUzMiBjYTkxY3g0Ml9JQUNLX2lycWhhbmRsZXIoc3RydWN0IGNhOTFjeDQyX2RyaXZlciAqYnJpZGdlKQogewotCXdha2VfdXAoJmlhY2tfcXVldWUpOworCXdha2VfdXAoJihicmlkZ2UtPmlhY2tfcXVldWUpKTsKIAogCXJldHVybiBDQTkxQ1g0Ml9MSU5UX1NXX0lBQ0s7CiB9CiAKLSNpZiAwCi1pbnQgY2E5MWN4NDJfYnVzX2Vycm9yX2NoayhpbnQgY2xyZmxhZykKLXsKLQlpbnQgdG1wOwotCXRtcCA9IGlvcmVhZDMyKGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIFBDSV9DT01NQU5EKTsKLQlpZiAodG1wICYgMHgwODAwMDAwMCkgewkvKiBTX1RBIGlzIFNldCAqLwotCQlpZiAoY2xyZmxhZykKLQkJCWlvd3JpdGUzMih0bXAgfCAweDA4MDAwMDAwLAotCQkJICAgICAgIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIFBDSV9DT01NQU5EKTsKLQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLXN0YXRpYyB1MzIgY2E5MWN4NDJfVkVSUl9pcnFoYW5kbGVyKHZvaWQpCitzdGF0aWMgdTMyIGNhOTFjeDQyX1ZFUlJfaXJxaGFuZGxlcihzdHJ1Y3QgY2E5MWN4NDJfZHJpdmVyICpicmlkZ2UpCiB7CiAJaW50IHZhbDsKIAotCXZhbCA9IGlvcmVhZDMyKGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIERHQ1MpOworCXZhbCA9IGlvcmVhZDMyKGJyaWRnZS0+YmFzZSArIERHQ1MpOwogCiAJaWYgKCEodmFsICYgMHgwMDAwMDgwMCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjYTkxYzA0MjogY2E5MWN4NDJfVkVSUl9pcnFoYW5kbGVyIERNQSBSZWFkICIKQEAgLTEzNSwxMSArMTA3LDExIEBACiAJcmV0dXJuIENBOTFDWDQyX0xJTlRfVkVSUjsKIH0KIAotc3RhdGljIHUzMiBjYTkxY3g0Ml9MRVJSX2lycWhhbmRsZXIodm9pZCkKK3N0YXRpYyB1MzIgY2E5MWN4NDJfTEVSUl9pcnFoYW5kbGVyKHN0cnVjdCBjYTkxY3g0Ml9kcml2ZXIgKmJyaWRnZSkKIHsKIAlpbnQgdmFsOwogCi0JdmFsID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgREdDUyk7CisJdmFsID0gaW9yZWFkMzIoYnJpZGdlLT5iYXNlICsgREdDUyk7CiAKIAlpZiAoISh2YWwgJiAweDAwMDAwODAwKSkgewogCQlwcmludGsoS0VSTl9FUlIgImNhOTFjMDQyOiBjYTkxY3g0Ml9MRVJSX2lycWhhbmRsZXIgRE1BIFJlYWQgIgpAQCAtMTUxLDEzICsxMjMsMTggQEAKIH0KIAogCi1zdGF0aWMgdTMyIGNhOTFjeDQyX1ZJUlFfaXJxaGFuZGxlcihpbnQgc3RhdCkKK3N0YXRpYyB1MzIgY2E5MWN4NDJfVklSUV9pcnFoYW5kbGVyKHN0cnVjdCB2bWVfYnJpZGdlICpjYTkxY3g0Ml9icmlkZ2UsCisJaW50IHN0YXQpCiB7CiAJaW50IHZlYywgaSwgc2VydmljZWQgPSAwOworCXN0cnVjdCBjYTkxY3g0Ml9kcml2ZXIgKmJyaWRnZTsKKworCWJyaWRnZSA9IGNhOTFjeDQyX2JyaWRnZS0+ZHJpdmVyX3ByaXY7CisKIAogCWZvciAoaSA9IDc7IGkgPiAwOyBpLS0pIHsKIAkJaWYgKHN0YXQgJiAoMSA8PCBpKSkgewotCQkJdmVjID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsKKwkJCXZlYyA9IGlvcmVhZDMyKGJyaWRnZS0+YmFzZSArCiAJCQkJQ0E5MUNYNDJfVl9TVEFUSURbaV0pICYgMHhmZjsKIAogCQkJdm1lX2lycV9oYW5kbGVyKGNhOTFjeDQyX2JyaWRnZSwgaSwgdmVjKTsKQEAgLTE2OSwxNSArMTQ2LDE4IEBACiAJcmV0dXJuIHNlcnZpY2VkOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgY2E5MWN4NDJfaXJxaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgY2E5MWN4NDJfaXJxaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwdHIpCiB7CiAJdTMyIHN0YXQsIGVuYWJsZSwgc2VydmljZWQgPSAwOworCXN0cnVjdCB2bWVfYnJpZGdlICpjYTkxY3g0Ml9icmlkZ2U7CisJc3RydWN0IGNhOTFjeDQyX2RyaXZlciAqYnJpZGdlOwogCi0JaWYgKGRldl9pZCAhPSBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UpCi0JCXJldHVybiBJUlFfTk9ORTsKKwljYTkxY3g0Ml9icmlkZ2UgPSBwdHI7CiAKLQllbmFibGUgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBMSU5UX0VOKTsKLQlzdGF0ID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgTElOVF9TVEFUKTsKKwlicmlkZ2UgPSBjYTkxY3g0Ml9icmlkZ2UtPmRyaXZlcl9wcml2OworCisJZW5hYmxlID0gaW9yZWFkMzIoYnJpZGdlLT5iYXNlICsgTElOVF9FTik7CisJc3RhdCA9IGlvcmVhZDMyKGJyaWRnZS0+YmFzZSArIExJTlRfU1RBVCk7CiAKIAkvKiBPbmx5IGxvb2sgYXQgdW5tYXNrZWQgaW50ZXJydXB0cyAqLwogCXN0YXQgJj0gZW5hYmxlOwpAQCAtMTg2LDQyICsxNjYsNDUgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCiAJaWYgKHN0YXQgJiBDQTkxQ1g0Ml9MSU5UX0RNQSkKLQkJc2VydmljZWQgfD0gY2E5MWN4NDJfRE1BX2lycWhhbmRsZXIoKTsKKwkJc2VydmljZWQgfD0gY2E5MWN4NDJfRE1BX2lycWhhbmRsZXIoYnJpZGdlKTsKIAlpZiAoc3RhdCAmIChDQTkxQ1g0Ml9MSU5UX0xNMCB8IENBOTFDWDQyX0xJTlRfTE0xIHwgQ0E5MUNYNDJfTElOVF9MTTIgfAogCQkJQ0E5MUNYNDJfTElOVF9MTTMpKQotCQlzZXJ2aWNlZCB8PSBjYTkxY3g0Ml9MTV9pcnFoYW5kbGVyKHN0YXQpOworCQlzZXJ2aWNlZCB8PSBjYTkxY3g0Ml9MTV9pcnFoYW5kbGVyKGJyaWRnZSwgc3RhdCk7CiAJaWYgKHN0YXQgJiBDQTkxQ1g0Ml9MSU5UX01CT1gpCi0JCXNlcnZpY2VkIHw9IGNhOTFjeDQyX01CX2lycWhhbmRsZXIoc3RhdCk7CisJCXNlcnZpY2VkIHw9IGNhOTFjeDQyX01CX2lycWhhbmRsZXIoYnJpZGdlLCBzdGF0KTsKIAlpZiAoc3RhdCAmIENBOTFDWDQyX0xJTlRfU1dfSUFDSykKLQkJc2VydmljZWQgfD0gY2E5MWN4NDJfSUFDS19pcnFoYW5kbGVyKCk7CisJCXNlcnZpY2VkIHw9IGNhOTFjeDQyX0lBQ0tfaXJxaGFuZGxlcihicmlkZ2UpOwogCWlmIChzdGF0ICYgQ0E5MUNYNDJfTElOVF9WRVJSKQotCQlzZXJ2aWNlZCB8PSBjYTkxY3g0Ml9WRVJSX2lycWhhbmRsZXIoKTsKKwkJc2VydmljZWQgfD0gY2E5MWN4NDJfVkVSUl9pcnFoYW5kbGVyKGJyaWRnZSk7CiAJaWYgKHN0YXQgJiBDQTkxQ1g0Ml9MSU5UX0xFUlIpCi0JCXNlcnZpY2VkIHw9IGNhOTFjeDQyX0xFUlJfaXJxaGFuZGxlcigpOworCQlzZXJ2aWNlZCB8PSBjYTkxY3g0Ml9MRVJSX2lycWhhbmRsZXIoYnJpZGdlKTsKIAlpZiAoc3RhdCAmIChDQTkxQ1g0Ml9MSU5UX1ZJUlExIHwgQ0E5MUNYNDJfTElOVF9WSVJRMiB8CiAJCQlDQTkxQ1g0Ml9MSU5UX1ZJUlEzIHwgQ0E5MUNYNDJfTElOVF9WSVJRNCB8CiAJCQlDQTkxQ1g0Ml9MSU5UX1ZJUlE1IHwgQ0E5MUNYNDJfTElOVF9WSVJRNiB8CiAJCQlDQTkxQ1g0Ml9MSU5UX1ZJUlE3KSkKLQkJc2VydmljZWQgfD0gY2E5MWN4NDJfVklSUV9pcnFoYW5kbGVyKHN0YXQpOworCQlzZXJ2aWNlZCB8PSBjYTkxY3g0Ml9WSVJRX2lycWhhbmRsZXIoY2E5MWN4NDJfYnJpZGdlLCBzdGF0KTsKIAogCS8qIENsZWFyIHNlcnZpY2VkIGludGVycnVwdHMgKi8KLQlpb3dyaXRlMzIoc3RhdCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgTElOVF9TVEFUKTsKKwlpb3dyaXRlMzIoc3RhdCwgYnJpZGdlLT5iYXNlICsgTElOVF9TVEFUKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBjYTkxY3g0Ml9pcnFfaW5pdChzdHJ1Y3Qgdm1lX2JyaWRnZSAqYnJpZGdlKQorc3RhdGljIGludCBjYTkxY3g0Ml9pcnFfaW5pdChzdHJ1Y3Qgdm1lX2JyaWRnZSAqY2E5MWN4NDJfYnJpZGdlKQogewogCWludCByZXN1bHQsIHRtcDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwlzdHJ1Y3QgY2E5MWN4NDJfZHJpdmVyICpicmlkZ2U7CisKKwlicmlkZ2UgPSBjYTkxY3g0Ml9icmlkZ2UtPmRyaXZlcl9wcml2OwogCiAJLyogTmVlZCBwZGV2ICovCi0JcGRldiA9IGNvbnRhaW5lcl9vZihicmlkZ2UtPnBhcmVudCwgc3RydWN0IHBjaV9kZXYsIGRldik7CisJcGRldiA9IGNvbnRhaW5lcl9vZihjYTkxY3g0Ml9icmlkZ2UtPnBhcmVudCwgc3RydWN0IHBjaV9kZXYsIGRldik7CiAKIAkvKiBJbml0aWFsaXNlIGxpc3QgZm9yIFZNRSBidXMgZXJyb3JzICovCi0JSU5JVF9MSVNUX0hFQUQoJihicmlkZ2UtPnZtZV9lcnJvcnMpKTsKKwlJTklUX0xJU1RfSEVBRCgmKGNhOTFjeDQyX2JyaWRnZS0+dm1lX2Vycm9ycykpOwogCi0JbXV0ZXhfaW5pdCgmKGJyaWRnZS0+aXJxX210eCkpOworCW11dGV4X2luaXQoJihjYTkxY3g0Ml9icmlkZ2UtPmlycV9tdHgpKTsKIAogCS8qIERpc2FibGUgaW50ZXJydXB0cyBmcm9tIFBDSSB0byBWTUUgKi8KIAlpb3dyaXRlMzIoMCwgYnJpZGdlLT5iYXNlICsgVklOVF9FTik7CkBAIC0yMzIsNyArMjE1LDcgQEAKIAlpb3dyaXRlMzIoMHgwMEZGRkZGRiwgYnJpZGdlLT5iYXNlICsgTElOVF9TVEFUKTsKIAogCXJlc3VsdCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgY2E5MWN4NDJfaXJxaGFuZGxlciwgSVJRRl9TSEFSRUQsCi0JCQlkcml2ZXJfbmFtZSwgcGRldik7CisJCQlkcml2ZXJfbmFtZSwgY2E5MWN4NDJfYnJpZGdlKTsKIAlpZiAocmVzdWx0KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbid0IGdldCBhc3NpZ25lZCBwY2kgaXJxIHZlY3RvciAlMDJYXG4iLAogCQkgICAgICAgcGRldi0+aXJxKTsKQEAgLTI1NCwxNSArMjM3LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGNhOTFjeDQyX2lycV9leGl0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQorc3RhdGljIHZvaWQgY2E5MWN4NDJfaXJxX2V4aXQoc3RydWN0IGNhOTFjeDQyX2RyaXZlciAqYnJpZGdlLAorCXN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCS8qIERpc2FibGUgaW50ZXJydXB0cyBmcm9tIFBDSSB0byBWTUUgKi8KLQlpb3dyaXRlMzIoMCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgVklOVF9FTik7CisJaW93cml0ZTMyKDAsIGJyaWRnZS0+YmFzZSArIFZJTlRfRU4pOwogCiAJLyogRGlzYWJsZSBQQ0kgaW50ZXJydXB0cyAqLwotCWlvd3JpdGUzMigwLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBMSU5UX0VOKTsKKwlpb3dyaXRlMzIoMCwgYnJpZGdlLT5iYXNlICsgTElOVF9FTik7CiAJLyogQ2xlYXIgQW55IFBlbmRpbmcgUENJIEludGVycnVwdHMgKi8KLQlpb3dyaXRlMzIoMHgwMEZGRkZGRiwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgTElOVF9TVEFUKTsKKwlpb3dyaXRlMzIoMHgwMEZGRkZGRiwgYnJpZGdlLT5iYXNlICsgTElOVF9TVEFUKTsKIAogCWZyZWVfaXJxKHBkZXYtPmlycSwgcGRldik7CiB9CkBAIC0yNzAsMjEgKzI1NCwyNSBAQAogLyoKICAqIFNldCB1cCBhbiBWTUUgaW50ZXJydXB0CiAgKi8KLXZvaWQgY2E5MWN4NDJfaXJxX3NldChpbnQgbGV2ZWwsIGludCBzdGF0ZSwgaW50IHN5bmMpCit2b2lkIGNhOTFjeDQyX2lycV9zZXQoc3RydWN0IHZtZV9icmlkZ2UgKmNhOTFjeDQyX2JyaWRnZSwgaW50IGxldmVsLCBpbnQgc3RhdGUsCisJaW50IHN5bmMpCiAKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAl1MzIgdG1wOworCXN0cnVjdCBjYTkxY3g0Ml9kcml2ZXIgKmJyaWRnZTsKKworCWJyaWRnZSA9IGNhOTFjeDQyX2JyaWRnZS0+ZHJpdmVyX3ByaXY7CiAKIAkvKiBFbmFibGUgSVJRIGxldmVsICovCi0JdG1wID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgTElOVF9FTik7CisJdG1wID0gaW9yZWFkMzIoYnJpZGdlLT5iYXNlICsgTElOVF9FTik7CiAKIAlpZiAoc3RhdGUgPT0gMCkKIAkJdG1wICY9IH5DQTkxQ1g0Ml9MSU5UX1ZJUlFbbGV2ZWxdOwogCWVsc2UKIAkJdG1wIHw9IENBOTFDWDQyX0xJTlRfVklSUVtsZXZlbF07CiAKLQlpb3dyaXRlMzIodG1wLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBMSU5UX0VOKTsKKwlpb3dyaXRlMzIodG1wLCBicmlkZ2UtPmJhc2UgKyBMSU5UX0VOKTsKIAogCWlmICgoc3RhdGUgPT0gMCkgJiYgKHN5bmMgIT0gMCkpIHsKIAkJcGRldiA9IGNvbnRhaW5lcl9vZihjYTkxY3g0Ml9icmlkZ2UtPnBhcmVudCwgc3RydWN0IHBjaV9kZXYsCkBAIC0yOTQsMzQgKzI4MiwzOCBAQAogCX0KIH0KIAotaW50IGNhOTFjeDQyX2lycV9nZW5lcmF0ZShpbnQgbGV2ZWwsIGludCBzdGF0aWQpCitpbnQgY2E5MWN4NDJfaXJxX2dlbmVyYXRlKHN0cnVjdCB2bWVfYnJpZGdlICpjYTkxY3g0Ml9icmlkZ2UsIGludCBsZXZlbCwKKwlpbnQgc3RhdGlkKQogewogCXUzMiB0bXA7CisJc3RydWN0IGNhOTFjeDQyX2RyaXZlciAqYnJpZGdlOworCisJYnJpZGdlID0gY2E5MWN4NDJfYnJpZGdlLT5kcml2ZXJfcHJpdjsKIAogCS8qIFVuaXZlcnNlIGNhbiBvbmx5IGdlbmVyYXRlIGV2ZW4gdmVjdG9ycyAqLwogCWlmIChzdGF0aWQgJiAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJih2bWVfaW50KSk7CisJbXV0ZXhfbG9jaygmKGJyaWRnZS0+dm1lX2ludCkpOwogCi0JdG1wID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgVklOVF9FTik7CisJdG1wID0gaW9yZWFkMzIoYnJpZGdlLT5iYXNlICsgVklOVF9FTik7CiAKIAkvKiBTZXQgU3RhdHVzL0lEICovCi0JaW93cml0ZTMyKHN0YXRpZCA8PCAyNCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgU1RBVElEKTsKKwlpb3dyaXRlMzIoc3RhdGlkIDw8IDI0LCBicmlkZ2UtPmJhc2UgKyBTVEFUSUQpOwogCiAJLyogQXNzZXJ0IFZNRWJ1cyBJUlEgKi8KIAl0bXAgPSB0bXAgfCAoMSA8PCAobGV2ZWwgKyAyNCkpOwotCWlvd3JpdGUzMih0bXAsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIFZJTlRfRU4pOworCWlvd3JpdGUzMih0bXAsIGJyaWRnZS0+YmFzZSArIFZJTlRfRU4pOwogCiAJLyogV2FpdCBmb3IgSUFDSyAqLwotCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShpYWNrX3F1ZXVlLCAwKTsKKwl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoYnJpZGdlLT5pYWNrX3F1ZXVlLCAwKTsKIAogCS8qIFJldHVybiBpbnRlcnJ1cHQgdG8gbG93IHN0YXRlICovCi0JdG1wID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgVklOVF9FTik7CisJdG1wID0gaW9yZWFkMzIoYnJpZGdlLT5iYXNlICsgVklOVF9FTik7CiAJdG1wID0gdG1wICYgfigxIDw8IChsZXZlbCArIDI0KSk7Ci0JaW93cml0ZTMyKHRtcCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgVklOVF9FTik7CisJaW93cml0ZTMyKHRtcCwgYnJpZGdlLT5iYXNlICsgVklOVF9FTik7CiAKLQltdXRleF91bmxvY2soJih2bWVfaW50KSk7CisJbXV0ZXhfdW5sb2NrKCYoYnJpZGdlLT52bWVfaW50KSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMzMCw5ICszMjIsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgdm1lX2Jhc2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplLAogCWRtYV9hZGRyX3QgcGNpX2Jhc2UsIHZtZV9hZGRyZXNzX3QgYXNwYWNlLCB2bWVfY3ljbGVfdCBjeWNsZSkKIHsKLQl1bnNpZ25lZCBpbnQgaSwgYWRkciA9IDAsIGdyYW51bGFyaXR5ID0gMDsKKwl1bnNpZ25lZCBpbnQgaSwgYWRkciA9IDAsIGdyYW51bGFyaXR5OwogCXVuc2lnbmVkIGludCB0ZW1wX2N0bCA9IDA7CiAJdW5zaWduZWQgaW50IHZtZV9ib3VuZCwgcGNpX29mZnNldDsKKwlzdHJ1Y3QgY2E5MWN4NDJfZHJpdmVyICpicmlkZ2U7CisKKwlicmlkZ2UgPSBpbWFnZS0+cGFyZW50LT5kcml2ZXJfcHJpdjsKIAogCWkgPSBpbWFnZS0+bnVtYmVyOwogCkBAIC0zNjYsMTMgKzM2MSw5IEBACiAJICogQm91bmQgYWRkcmVzcyBpcyBhIHZhbGlkIGFkZHJlc3MgZm9yIHRoZSB3aW5kb3csIGFkanVzdAogCSAqIGFjY29yZGluZ2x5CiAJICovCi0Jdm1lX2JvdW5kID0gdm1lX2Jhc2UgKyBzaXplIC0gZ3JhbnVsYXJpdHk7CisJdm1lX2JvdW5kID0gdm1lX2Jhc2UgKyBzaXplOwogCXBjaV9vZmZzZXQgPSBwY2lfYmFzZSAtIHZtZV9iYXNlOwogCi0JLyogWFhYIE5lZWQgdG8gY2hlY2sgdGhhdCB2bWVfYmFzZSwgdm1lX2JvdW5kIGFuZCBwY2lfb2Zmc2V0IGFyZW4ndAotCSAqIHRvbyBiaWcgZm9yIHJlZ2lzdGVycwotCSAqLwotCiAJaWYgKChpID09IDApIHx8IChpID09IDQpKQogCQlncmFudWxhcml0eSA9IDB4MTAwMDsKIAllbHNlCkBAIC0zOTIsMjYgKzM4MywxNCBAQAogCX0KIAogCS8qIERpc2FibGUgd2hpbGUgd2UgYXJlIG11Y2tpbmcgYXJvdW5kICovCi0JdGVtcF9jdGwgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9WU0lfQ1RMW2ldKTsKKwl0ZW1wX2N0bCA9IGlvcmVhZDMyKGJyaWRnZS0+YmFzZSArIENBOTFDWDQyX1ZTSV9DVExbaV0pOwogCXRlbXBfY3RsICY9IH5DQTkxQ1g0Ml9WU0lfQ1RMX0VOOwotCWlvd3JpdGUzMih0ZW1wX2N0bCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfVlNJX0NUTFtpXSk7CisJaW93cml0ZTMyKHRlbXBfY3RsLCBicmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9WU0lfQ1RMW2ldKTsKIAogCS8qIFNldHVwIG1hcHBpbmcgKi8KLQlpb3dyaXRlMzIodm1lX2Jhc2UsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIENBOTFDWDQyX1ZTSV9CU1tpXSk7Ci0JaW93cml0ZTMyKHZtZV9ib3VuZCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfVlNJX0JEW2ldKTsKLQlpb3dyaXRlMzIocGNpX29mZnNldCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfVlNJX1RPW2ldKTsKLQotLyogWFhYIFByZWZldGNoIHN0dWZmIGN1cnJlbnRseSB1bnN1cHBvcnRlZCAqLwotI2lmIDAKLQlpZiAodm1lSW4tPndyUG9zdEVuYWJsZSkKLQkJdGVtcF9jdGwgfD0gQ0E5MUNYNDJfVlNJX0NUTF9QV0VOOwotCWlmICh2bWVJbi0+cHJlZmV0Y2hFbmFibGUpCi0JCXRlbXBfY3RsIHw9IENBOTFDWDQyX1ZTSV9DVExfUFJFTjsKLQlpZiAodm1lSW4tPnJtd0xvY2spCi0JCXRlbXBfY3RsIHw9IENBOTFDWDQyX1ZTSV9DVExfTExSTVc7Ci0JaWYgKHZtZUluLT5kYXRhNjRCaXRDYXBhYmxlKQotCQl0ZW1wX2N0bCB8PSBDQTkxQ1g0Ml9WU0lfQ1RMX0xENjRFTjsKLSNlbmRpZgorCWlvd3JpdGUzMih2bWVfYmFzZSwgYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfVlNJX0JTW2ldKTsKKwlpb3dyaXRlMzIodm1lX2JvdW5kLCBicmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9WU0lfQkRbaV0pOworCWlvd3JpdGUzMihwY2lfb2Zmc2V0LCBicmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9WU0lfVE9baV0pOwogCiAJLyogU2V0dXAgYWRkcmVzcyBzcGFjZSAqLwogCXRlbXBfY3RsICY9IH5DQTkxQ1g0Ml9WU0lfQ1RMX1ZBU19NOwpAQCAtNDI5LDEyICs0MDgsMTIgQEAKIAkJdGVtcF9jdGwgfD0gQ0E5MUNYNDJfVlNJX0NUTF9QR01fREFUQTsKIAogCS8qIFdyaXRlIGN0bCByZWcgd2l0aG91dCBlbmFibGUgKi8KLQlpb3dyaXRlMzIodGVtcF9jdGwsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIENBOTFDWDQyX1ZTSV9DVExbaV0pOworCWlvd3JpdGUzMih0ZW1wX2N0bCwgYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfVlNJX0NUTFtpXSk7CiAKIAlpZiAoZW5hYmxlZCkKIAkJdGVtcF9jdGwgfD0gQ0E5MUNYNDJfVlNJX0NUTF9FTjsKIAotCWlvd3JpdGUzMih0ZW1wX2N0bCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfVlNJX0NUTFtpXSk7CisJaW93cml0ZTMyKHRlbXBfY3RsLCBicmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9WU0lfQ1RMW2ldKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDQ1LDYgKzQyNCw5IEBACiB7CiAJdW5zaWduZWQgaW50IGksIGdyYW51bGFyaXR5ID0gMCwgY3RsID0gMDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgdm1lX2JvdW5kLCBwY2lfb2Zmc2V0OworCXN0cnVjdCBjYTkxY3g0Ml9kcml2ZXIgKmJyaWRnZTsKKworCWJyaWRnZSA9IGltYWdlLT5wYXJlbnQtPmRyaXZlcl9wcml2OwogCiAJaSA9IGltYWdlLT5udW1iZXI7CiAKQEAgLTQ1NCwxMSArNDM2LDExIEBACiAJCWdyYW51bGFyaXR5ID0gMHgxMDAwMDsKIAogCS8qIFJlYWQgUmVnaXN0ZXJzICovCi0JY3RsID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfVlNJX0NUTFtpXSk7CisJY3RsID0gaW9yZWFkMzIoYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfVlNJX0NUTFtpXSk7CiAKLQkqdm1lX2Jhc2UgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9WU0lfQlNbaV0pOwotCXZtZV9ib3VuZCA9IGlvcmVhZDMyKGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIENBOTFDWDQyX1ZTSV9CRFtpXSk7Ci0JcGNpX29mZnNldCA9IGlvcmVhZDMyKGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIENBOTFDWDQyX1ZTSV9UT1tpXSk7CisJKnZtZV9iYXNlID0gaW9yZWFkMzIoYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfVlNJX0JTW2ldKTsKKwl2bWVfYm91bmQgPSBpb3JlYWQzMihicmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9WU0lfQkRbaV0pOworCXBjaV9vZmZzZXQgPSBpb3JlYWQzMihicmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9WU0lfVE9baV0pOwogCiAJKnBjaV9iYXNlID0gKGRtYV9hZGRyX3Qpdm1lX2Jhc2UgKyBwY2lfb2Zmc2V0OwogCSpzaXplID0gKHVuc2lnbmVkIGxvbmcgbG9uZykoKHZtZV9ib3VuZCAtICp2bWVfYmFzZSkgKyBncmFudWxhcml0eSk7CkBAIC01MDIsNiArNDg0LDkgQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgZXhpc3Rpbmdfc2l6ZTsKIAlpbnQgcmV0dmFsID0gMDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwlzdHJ1Y3Qgdm1lX2JyaWRnZSAqY2E5MWN4NDJfYnJpZGdlOworCisJY2E5MWN4NDJfYnJpZGdlID0gaW1hZ2UtPnBhcmVudDsKIAogCS8qIEZpbmQgcGNpX2RldiBjb250YWluZXIgb2YgZGV2ICovCiAJaWYgKGNhOTFjeDQyX2JyaWRnZS0+cGFyZW50ID09IE5VTEwpIHsKQEAgLTUxMCw4ICs0OTUsOCBAQAogCX0KIAlwZGV2ID0gY29udGFpbmVyX29mKGNhOTFjeDQyX2JyaWRnZS0+cGFyZW50LCBzdHJ1Y3QgcGNpX2RldiwgZGV2KTsKIAotCWV4aXN0aW5nX3NpemUgPSAodW5zaWduZWQgbG9uZyBsb25nKShpbWFnZS0+cGNpX3Jlc291cmNlLmVuZCAtCi0JCWltYWdlLT5wY2lfcmVzb3VyY2Uuc3RhcnQpOworCWV4aXN0aW5nX3NpemUgPSAodW5zaWduZWQgbG9uZyBsb25nKShpbWFnZS0+YnVzX3Jlc291cmNlLmVuZCAtCisJCWltYWdlLT5idXNfcmVzb3VyY2Uuc3RhcnQpOwogCiAJLyogSWYgdGhlIGV4aXN0aW5nIHNpemUgaXMgT0ssIHJldHVybiAqLwogCWlmIChleGlzdGluZ19zaXplID09IChzaXplIC0gMSkpCkBAIC01MjAsMTUgKzUwNSwxNSBAQAogCWlmIChleGlzdGluZ19zaXplICE9IDApIHsKIAkJaW91bm1hcChpbWFnZS0+a2Vybl9iYXNlKTsKIAkJaW1hZ2UtPmtlcm5fYmFzZSA9IE5VTEw7Ci0JCWlmIChpbWFnZS0+cGNpX3Jlc291cmNlLm5hbWUgIT0gTlVMTCkKLQkJCWtmcmVlKGltYWdlLT5wY2lfcmVzb3VyY2UubmFtZSk7Ci0JCXJlbGVhc2VfcmVzb3VyY2UoJihpbWFnZS0+cGNpX3Jlc291cmNlKSk7Ci0JCW1lbXNldCgmKGltYWdlLT5wY2lfcmVzb3VyY2UpLCAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSk7CisJCWlmIChpbWFnZS0+YnVzX3Jlc291cmNlLm5hbWUgIT0gTlVMTCkKKwkJCWtmcmVlKGltYWdlLT5idXNfcmVzb3VyY2UubmFtZSk7CisJCXJlbGVhc2VfcmVzb3VyY2UoJihpbWFnZS0+YnVzX3Jlc291cmNlKSk7CisJCW1lbXNldCgmKGltYWdlLT5idXNfcmVzb3VyY2UpLCAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSk7CiAJfQogCi0JaWYgKGltYWdlLT5wY2lfcmVzb3VyY2UubmFtZSA9PSBOVUxMKSB7Ci0JCWltYWdlLT5wY2lfcmVzb3VyY2UubmFtZSA9IGttYWxsb2MoVk1FTkFNU0laKzMsIEdGUF9LRVJORUwpOwotCQlpZiAoaW1hZ2UtPnBjaV9yZXNvdXJjZS5uYW1lID09IE5VTEwpIHsKKwlpZiAoaW1hZ2UtPmJ1c19yZXNvdXJjZS5uYW1lID09IE5VTEwpIHsKKwkJaW1hZ2UtPmJ1c19yZXNvdXJjZS5uYW1lID0ga21hbGxvYyhWTUVOQU1TSVorMywgR0ZQX0tFUk5FTCk7CisJCWlmIChpbWFnZS0+YnVzX3Jlc291cmNlLm5hbWUgPT0gTlVMTCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciByZXNvdXJjZSIKIAkJCQkiIG5hbWVcbiIpOwogCQkJcmV0dmFsID0gLUVOT01FTTsKQEAgLTUzNiwyNiArNTIxLDI2IEBACiAJCX0KIAl9CiAKLQlzcHJpbnRmKChjaGFyICopaW1hZ2UtPnBjaV9yZXNvdXJjZS5uYW1lLCAiJXMuJWQiLAorCXNwcmludGYoKGNoYXIgKilpbWFnZS0+YnVzX3Jlc291cmNlLm5hbWUsICIlcy4lZCIsCiAJCWNhOTFjeDQyX2JyaWRnZS0+bmFtZSwgaW1hZ2UtPm51bWJlcik7CiAKLQlpbWFnZS0+cGNpX3Jlc291cmNlLnN0YXJ0ID0gMDsKLQlpbWFnZS0+cGNpX3Jlc291cmNlLmVuZCA9ICh1bnNpZ25lZCBsb25nKXNpemU7Ci0JaW1hZ2UtPnBjaV9yZXNvdXJjZS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOworCWltYWdlLT5idXNfcmVzb3VyY2Uuc3RhcnQgPSAwOworCWltYWdlLT5idXNfcmVzb3VyY2UuZW5kID0gKHVuc2lnbmVkIGxvbmcpc2l6ZTsKKwlpbWFnZS0+YnVzX3Jlc291cmNlLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CiAKIAlyZXR2YWwgPSBwY2lfYnVzX2FsbG9jX3Jlc291cmNlKHBkZXYtPmJ1cywKLQkJJihpbWFnZS0+cGNpX3Jlc291cmNlKSwgc2l6ZSwgc2l6ZSwgUENJQklPU19NSU5fTUVNLAorCQkmKGltYWdlLT5idXNfcmVzb3VyY2UpLCBzaXplLCBzaXplLCBQQ0lCSU9TX01JTl9NRU0sCiAJCTAsIE5VTEwsIE5VTEwpOwogCWlmIChyZXR2YWwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtIHJlc291cmNlIGZvciAiCiAJCQkid2luZG93ICVkIHNpemUgMHglbHggc3RhcnQgMHglbHhcbiIsCiAJCQlpbWFnZS0+bnVtYmVyLCAodW5zaWduZWQgbG9uZylzaXplLAotCQkJKHVuc2lnbmVkIGxvbmcpaW1hZ2UtPnBjaV9yZXNvdXJjZS5zdGFydCk7CisJCQkodW5zaWduZWQgbG9uZylpbWFnZS0+YnVzX3Jlc291cmNlLnN0YXJ0KTsKIAkJZ290byBlcnJfcmVzb3VyY2U7CiAJfQogCiAJaW1hZ2UtPmtlcm5fYmFzZSA9IGlvcmVtYXBfbm9jYWNoZSgKLQkJaW1hZ2UtPnBjaV9yZXNvdXJjZS5zdGFydCwgc2l6ZSk7CisJCWltYWdlLT5idXNfcmVzb3VyY2Uuc3RhcnQsIHNpemUpOwogCWlmIChpbWFnZS0+a2Vybl9iYXNlID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVtYXAgcmVzb3VyY2VcbiIpOwogCQlyZXR2YWwgPSAtRU5PTUVNOwpAQCAtNTY3LDI0ICs1NTIsMjQgQEAKIAlpb3VubWFwKGltYWdlLT5rZXJuX2Jhc2UpOwogCWltYWdlLT5rZXJuX2Jhc2UgPSBOVUxMOwogZXJyX3JlbWFwOgotCXJlbGVhc2VfcmVzb3VyY2UoJihpbWFnZS0+cGNpX3Jlc291cmNlKSk7CisJcmVsZWFzZV9yZXNvdXJjZSgmKGltYWdlLT5idXNfcmVzb3VyY2UpKTsKIGVycl9yZXNvdXJjZToKLQlrZnJlZShpbWFnZS0+cGNpX3Jlc291cmNlLm5hbWUpOwotCW1lbXNldCgmKGltYWdlLT5wY2lfcmVzb3VyY2UpLCAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSk7CisJa2ZyZWUoaW1hZ2UtPmJ1c19yZXNvdXJjZS5uYW1lKTsKKwltZW1zZXQoJihpbWFnZS0+YnVzX3Jlc291cmNlKSwgMCwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkpOwogZXJyX25hbWU6CiAJcmV0dXJuIHJldHZhbDsKIH0KIAogLyoKLSAqICAqIEZyZWUgYW5kIHVubWFwIFBDSSBSZXNvdXJjZQotICogICAqLworICogRnJlZSBhbmQgdW5tYXAgUENJIFJlc291cmNlCisgKi8KIHN0YXRpYyB2b2lkIGNhOTFjeDQyX2ZyZWVfcmVzb3VyY2Uoc3RydWN0IHZtZV9tYXN0ZXJfcmVzb3VyY2UgKmltYWdlKQogewogCWlvdW5tYXAoaW1hZ2UtPmtlcm5fYmFzZSk7CiAJaW1hZ2UtPmtlcm5fYmFzZSA9IE5VTEw7Ci0JcmVsZWFzZV9yZXNvdXJjZSgmKGltYWdlLT5wY2lfcmVzb3VyY2UpKTsKLQlrZnJlZShpbWFnZS0+cGNpX3Jlc291cmNlLm5hbWUpOwotCW1lbXNldCgmKGltYWdlLT5wY2lfcmVzb3VyY2UpLCAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSk7CisJcmVsZWFzZV9yZXNvdXJjZSgmKGltYWdlLT5idXNfcmVzb3VyY2UpKTsKKwlrZnJlZShpbWFnZS0+YnVzX3Jlc291cmNlLm5hbWUpOworCW1lbXNldCgmKGltYWdlLT5idXNfcmVzb3VyY2UpLCAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSk7CiB9CiAKIApAQCAtNTkzLDE3ICs1NzgsMjcgQEAKIAl2bWVfYWRkcmVzc190IGFzcGFjZSwgdm1lX2N5Y2xlX3QgY3ljbGUsIHZtZV93aWR0aF90IGR3aWR0aCkKIHsKIAlpbnQgcmV0dmFsID0gMDsKLQl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgaSwgZ3JhbnVsYXJpdHkgPSAwOwogCXVuc2lnbmVkIGludCB0ZW1wX2N0bCA9IDA7CiAJdW5zaWduZWQgbG9uZyBsb25nIHBjaV9ib3VuZCwgdm1lX29mZnNldCwgcGNpX2Jhc2U7CisJc3RydWN0IGNhOTFjeDQyX2RyaXZlciAqYnJpZGdlOworCisJYnJpZGdlID0gaW1hZ2UtPnBhcmVudC0+ZHJpdmVyX3ByaXY7CisKKwlpID0gaW1hZ2UtPm51bWJlcjsKKworCWlmICgoaSA9PSAwKSB8fCAoaSA9PSA0KSkKKwkJZ3JhbnVsYXJpdHkgPSAweDEwMDA7CisJZWxzZQorCQlncmFudWxhcml0eSA9IDB4MTAwMDA7CiAKIAkvKiBWZXJpZnkgaW5wdXQgZGF0YSAqLwotCWlmICh2bWVfYmFzZSAmIDB4RkZGKSB7CisJaWYgKHZtZV9iYXNlICYgKGdyYW51bGFyaXR5IC0gMSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIFZNRSBXaW5kb3cgYWxpZ25tZW50XG4iKTsKIAkJcmV0dmFsID0gLUVJTlZBTDsKIAkJZ290byBlcnJfd2luZG93OwogCX0KLQlpZiAoc2l6ZSAmIDB4RkZGKSB7CisJaWYgKHNpemUgJiAoZ3JhbnVsYXJpdHkgLSAxKSkgewogCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgVk1FIFdpbmRvdyBhbGlnbm1lbnRcbiIpOwogCQlyZXR2YWwgPSAtRUlOVkFMOwogCQlnb3RvIGVycl93aW5kb3c7CkBAIC02MTEsOSArNjA2LDYgQEAKIAogCXNwaW5fbG9jaygmKGltYWdlLT5sb2NrKSk7CiAKLQkvKiBYWFggV2Ugc2hvdWxkIGRvIHRoaXMgbXVjaCBsYXRlciwgc28gdGhhdCB3ZSBjYW4gZXhpdCB3aXRob3V0Ci0JICogICAgIG5lZWRpbmcgdG8gcmVkbyB0aGUgbWFwcGluZy4uLgotCSAqLwogCS8qCiAJICogTGV0J3MgYWxsb2NhdGUgdGhlIHJlc291cmNlIGhlcmUgcmF0aGVyIHRoYW4gZnVydGhlciB1cCB0aGUgc3RhY2sgYXMKIAkgKiBpdCBhdm9pZHMgcHVzaGluZyBsb2FkcyBvZiBidXMgZGVwZW5kYW50IHN0dWZmIHVwIHRoZSBzdGFjawpAQCAtNjI3LDI3ICs2MTksMTkgQEAKIAkJZ290byBlcnJfcmVzOwogCX0KIAotCXBjaV9iYXNlID0gKHVuc2lnbmVkIGxvbmcgbG9uZylpbWFnZS0+cGNpX3Jlc291cmNlLnN0YXJ0OworCXBjaV9iYXNlID0gKHVuc2lnbmVkIGxvbmcgbG9uZylpbWFnZS0+YnVzX3Jlc291cmNlLnN0YXJ0OwogCiAJLyoKIAkgKiBCb3VuZCBhZGRyZXNzIGlzIGEgdmFsaWQgYWRkcmVzcyBmb3IgdGhlIHdpbmRvdywgYWRqdXN0CiAJICogYWNjb3JkaW5nIHRvIHdpbmRvdyBncmFudWxhcml0eS4KIAkgKi8KLQlwY2lfYm91bmQgPSBwY2lfYmFzZSArIChzaXplIC0gMHgxMDAwKTsKKwlwY2lfYm91bmQgPSBwY2lfYmFzZSArIHNpemU7CiAJdm1lX29mZnNldCA9IHZtZV9iYXNlIC0gcGNpX2Jhc2U7CiAKLQlpID0gaW1hZ2UtPm51bWJlcjsKLQogCS8qIERpc2FibGUgd2hpbGUgd2UgYXJlIG11Y2tpbmcgYXJvdW5kICovCi0JdGVtcF9jdGwgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9MU0lfQ1RMW2ldKTsKKwl0ZW1wX2N0bCA9IGlvcmVhZDMyKGJyaWRnZS0+YmFzZSArIENBOTFDWDQyX0xTSV9DVExbaV0pOwogCXRlbXBfY3RsICY9IH5DQTkxQ1g0Ml9MU0lfQ1RMX0VOOwotCWlvd3JpdGUzMih0ZW1wX2N0bCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfTFNJX0NUTFtpXSk7Ci0KLS8qIFhYWCBQcmVmZXRjaCBzdHVmZiBjdXJyZW50bHkgdW5zdXBwb3J0ZWQgKi8KLSNpZiAwCi0JaWYgKHZtZU91dC0+d3JQb3N0RW5hYmxlKQotCQl0ZW1wX2N0bCB8PSAweDQwMDAwMDAwOwotI2VuZGlmCisJaW93cml0ZTMyKHRlbXBfY3RsLCBicmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9MU0lfQ1RMW2ldKTsKIAogCS8qIFNldHVwIGN5Y2xlIHR5cGVzICovCiAJdGVtcF9jdGwgJj0gfkNBOTFDWDQyX0xTSV9DVExfVkNUX007CkBAIC03MTgsMTcgKzcwMiwxNyBAQAogCQl0ZW1wX2N0bCB8PSBDQTkxQ1g0Ml9MU0lfQ1RMX1BHTV9QR007CiAKIAkvKiBTZXR1cCBtYXBwaW5nICovCi0JaW93cml0ZTMyKHBjaV9iYXNlLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9MU0lfQlNbaV0pOwotCWlvd3JpdGUzMihwY2lfYm91bmQsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIENBOTFDWDQyX0xTSV9CRFtpXSk7Ci0JaW93cml0ZTMyKHZtZV9vZmZzZXQsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIENBOTFDWDQyX0xTSV9UT1tpXSk7CisJaW93cml0ZTMyKHBjaV9iYXNlLCBicmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9MU0lfQlNbaV0pOworCWlvd3JpdGUzMihwY2lfYm91bmQsIGJyaWRnZS0+YmFzZSArIENBOTFDWDQyX0xTSV9CRFtpXSk7CisJaW93cml0ZTMyKHZtZV9vZmZzZXQsIGJyaWRnZS0+YmFzZSArIENBOTFDWDQyX0xTSV9UT1tpXSk7CiAKIAkvKiBXcml0ZSBjdGwgcmVnIHdpdGhvdXQgZW5hYmxlICovCi0JaW93cml0ZTMyKHRlbXBfY3RsLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9MU0lfQ1RMW2ldKTsKKwlpb3dyaXRlMzIodGVtcF9jdGwsIGJyaWRnZS0+YmFzZSArIENBOTFDWDQyX0xTSV9DVExbaV0pOwogCiAJaWYgKGVuYWJsZWQpCiAJCXRlbXBfY3RsIHw9IENBOTFDWDQyX0xTSV9DVExfRU47CiAKLQlpb3dyaXRlMzIodGVtcF9jdGwsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIENBOTFDWDQyX0xTSV9DVExbaV0pOworCWlvd3JpdGUzMih0ZW1wX2N0bCwgYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfTFNJX0NUTFtpXSk7CiAKIAlzcGluX3VubG9jaygmKGltYWdlLT5sb2NrKSk7CiAJcmV0dXJuIDA7CkBAIC03NDcsMTcgKzczMSwyMCBAQAogewogCXVuc2lnbmVkIGludCBpLCBjdGw7CiAJdW5zaWduZWQgbG9uZyBsb25nIHBjaV9iYXNlLCBwY2lfYm91bmQsIHZtZV9vZmZzZXQ7CisJc3RydWN0IGNhOTFjeDQyX2RyaXZlciAqYnJpZGdlOworCisJYnJpZGdlID0gaW1hZ2UtPnBhcmVudC0+ZHJpdmVyX3ByaXY7CiAKIAlpID0gaW1hZ2UtPm51bWJlcjsKIAotCWN0bCA9IGlvcmVhZDMyKGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIENBOTFDWDQyX0xTSV9DVExbaV0pOworCWN0bCA9IGlvcmVhZDMyKGJyaWRnZS0+YmFzZSArIENBOTFDWDQyX0xTSV9DVExbaV0pOwogCi0JcGNpX2Jhc2UgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9MU0lfQlNbaV0pOwotCXZtZV9vZmZzZXQgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9MU0lfVE9baV0pOwotCXBjaV9ib3VuZCA9IGlvcmVhZDMyKGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIENBOTFDWDQyX0xTSV9CRFtpXSk7CisJcGNpX2Jhc2UgPSBpb3JlYWQzMihicmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9MU0lfQlNbaV0pOworCXZtZV9vZmZzZXQgPSBpb3JlYWQzMihicmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9MU0lfVE9baV0pOworCXBjaV9ib3VuZCA9IGlvcmVhZDMyKGJyaWRnZS0+YmFzZSArIENBOTFDWDQyX0xTSV9CRFtpXSk7CiAKIAkqdm1lX2Jhc2UgPSBwY2lfYmFzZSArIHZtZV9vZmZzZXQ7Ci0JKnNpemUgPSAocGNpX2JvdW5kIC0gcGNpX2Jhc2UpICsgMHgxMDAwOworCSpzaXplID0gKHVuc2lnbmVkIGxvbmcgbG9uZykocGNpX2JvdW5kIC0gcGNpX2Jhc2UpOwogCiAJKmVuYWJsZWQgPSAwOwogCSphc3BhY2UgPSAwOwpAQCAtODIyLDEyICs4MDksNiBAQAogCQlicmVhazsKIAl9CiAKLS8qIFhYWCBQcmVmZXRjaCBzdHVmZiBjdXJyZW50bHkgdW5zdXBwb3J0ZWQgKi8KLSNpZiAwCi0JaWYgKGN0bCAmIDB4NDAwMDAwMDApCi0JCXZtZU91dC0+d3JQb3N0RW5hYmxlID0gMTsKLSNlbmRpZgotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg1MCw3ICs4MzEsNyBAQAogc3NpemVfdCBjYTkxY3g0Ml9tYXN0ZXJfcmVhZChzdHJ1Y3Qgdm1lX21hc3Rlcl9yZXNvdXJjZSAqaW1hZ2UsIHZvaWQgKmJ1ZiwKIAlzaXplX3QgY291bnQsIGxvZmZfdCBvZmZzZXQpCiB7Ci0JaW50IHJldHZhbDsKKwlzc2l6ZV90IHJldHZhbDsKIAogCXNwaW5fbG9jaygmKGltYWdlLT5sb2NrKSk7CiAKQEAgLTg3NywxMiArODU4LDUyOCBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLWludCBjYTkxY3g0Ml9zbG90X2dldCh2b2lkKQordW5zaWduZWQgaW50IGNhOTFjeDQyX21hc3Rlcl9ybXcoc3RydWN0IHZtZV9tYXN0ZXJfcmVzb3VyY2UgKmltYWdlLAorCXVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgY29tcGFyZSwgdW5zaWduZWQgaW50IHN3YXAsCisJbG9mZl90IG9mZnNldCkKK3sKKwl1MzIgcGNpX2FkZHIsIHJlc3VsdDsKKwlpbnQgaTsKKwlzdHJ1Y3QgY2E5MWN4NDJfZHJpdmVyICpicmlkZ2U7CisJc3RydWN0IGRldmljZSAqZGV2OworCisJYnJpZGdlID0gaW1hZ2UtPnBhcmVudC0+ZHJpdmVyX3ByaXY7CisJZGV2ID0gaW1hZ2UtPnBhcmVudC0+cGFyZW50OworCisJLyogRmluZCB0aGUgUENJIGFkZHJlc3MgdGhhdCBtYXBzIHRvIHRoZSBkZXNpcmVkIFZNRSBhZGRyZXNzICovCisJaSA9IGltYWdlLT5udW1iZXI7CisKKwkvKiBMb2NraW5nIGFzIHdlIGNhbiBvbmx5IGRvIG9uZSBvZiB0aGVzZSBhdCBhIHRpbWUgKi8KKwltdXRleF9sb2NrKCYoYnJpZGdlLT52bWVfcm13KSk7CisKKwkvKiBMb2NrIGltYWdlICovCisJc3Bpbl9sb2NrKCYoaW1hZ2UtPmxvY2spKTsKKworCXBjaV9hZGRyID0gKHUzMilpbWFnZS0+a2Vybl9iYXNlICsgb2Zmc2V0OworCisJLyogQWRkcmVzcyBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkICovCisJaWYgKHBjaV9hZGRyICYgMHgzKSB7CisJCWRldl9lcnIoZGV2LCAiUk1XIEFkZHJlc3Mgbm90IDQtYnl0ZSBhbGlnbmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRW5zdXJlIFJNVyBEaXNhYmxlZCB3aGlsc3QgY29uZmlndXJpbmcgKi8KKwlpb3dyaXRlMzIoMCwgYnJpZGdlLT5iYXNlICsgU0NZQ19DVEwpOworCisJLyogQ29uZmlndXJlIHJlZ2lzdGVycyAqLworCWlvd3JpdGUzMihtYXNrLCBicmlkZ2UtPmJhc2UgKyBTQ1lDX0VOKTsKKwlpb3dyaXRlMzIoY29tcGFyZSwgYnJpZGdlLT5iYXNlICsgU0NZQ19DTVApOworCWlvd3JpdGUzMihzd2FwLCBicmlkZ2UtPmJhc2UgKyBTQ1lDX1NXUCk7CisJaW93cml0ZTMyKHBjaV9hZGRyLCBicmlkZ2UtPmJhc2UgKyBTQ1lDX0FERFIpOworCisJLyogRW5hYmxlIFJNVyAqLworCWlvd3JpdGUzMihDQTkxQ1g0Ml9TQ1lDX0NUTF9DWUNfUk1XLCBicmlkZ2UtPmJhc2UgKyBTQ1lDX0NUTCk7CisKKwkvKiBLaWNrIHByb2Nlc3Mgb2ZmIHdpdGggYSByZWFkIHRvIHRoZSByZXF1aXJlZCBhZGRyZXNzLiAqLworCXJlc3VsdCA9IGlvcmVhZDMyKGltYWdlLT5rZXJuX2Jhc2UgKyBvZmZzZXQpOworCisJLyogRGlzYWJsZSBSTVcgKi8KKwlpb3dyaXRlMzIoMCwgYnJpZGdlLT5iYXNlICsgU0NZQ19DVEwpOworCisJc3Bpbl91bmxvY2soJihpbWFnZS0+bG9jaykpOworCisJbXV0ZXhfdW5sb2NrKCYoYnJpZGdlLT52bWVfcm13KSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitpbnQgY2E5MWN4NDJfZG1hX2xpc3RfYWRkKHN0cnVjdCB2bWVfZG1hX2xpc3QgKmxpc3QsIHN0cnVjdCB2bWVfZG1hX2F0dHIgKnNyYywKKwlzdHJ1Y3Qgdm1lX2RtYV9hdHRyICpkZXN0LCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGNhOTFjeDQyX2RtYV9lbnRyeSAqZW50cnksICpwcmV2OworCXN0cnVjdCB2bWVfZG1hX3BjaSAqcGNpX2F0dHI7CisJc3RydWN0IHZtZV9kbWFfdm1lICp2bWVfYXR0cjsKKwlkbWFfYWRkcl90IGRlc2NfcHRyOworCWludCByZXR2YWwgPSAwOworCisJLyogWFhYIGRlc2NyaXB0b3IgbXVzdCBiZSBhbGlnbmVkIG9uIDY0LWJpdCBib3VuZGFyaWVzICovCisJZW50cnkgPSAoc3RydWN0IGNhOTFjeDQyX2RtYV9lbnRyeSAqKQorCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2E5MWN4NDJfZG1hX2VudHJ5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGVudHJ5ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBkbWEgcmVzb3VyY2UgIgorCQkJInN0cnVjdHVyZVxuIik7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX21lbTsKKwl9CisKKwkvKiBUZXN0IGRlc2NyaXB0b3IgYWxpZ25tZW50ICovCisJaWYgKCh1bnNpZ25lZCBsb25nKSYoZW50cnktPmRlc2NyaXB0b3IpICYgQ0E5MUNYNDJfRENQUF9NKSB7CisJCXByaW50aygiRGVzY3JpcHRvciBub3QgYWxpZ25lZCB0byAxNiBieXRlIGJvdW5kYXJ5IGFzICIKKwkJCSJyZXF1aXJlZDogJXBcbiIsICYoZW50cnktPmRlc2NyaXB0b3IpKTsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJZ290byBlcnJfYWxpZ247CisJfQorCisJbWVtc2V0KCYoZW50cnktPmRlc2NyaXB0b3IpLCAwLCBzaXplb2Yoc3RydWN0IGNhOTFjeDQyX2RtYV9kZXNjcmlwdG9yKSk7CisKKwlpZiAoZGVzdC0+dHlwZSA9PSBWTUVfRE1BX1ZNRSkgeworCQllbnRyeS0+ZGVzY3JpcHRvci5kY3RsIHw9IENBOTFDWDQyX0RDVExfTDJWOworCQl2bWVfYXR0ciA9IChzdHJ1Y3Qgdm1lX2RtYV92bWUgKilkZXN0LT5wcml2YXRlOworCQlwY2lfYXR0ciA9IChzdHJ1Y3Qgdm1lX2RtYV9wY2kgKilzcmMtPnByaXZhdGU7CisJfSBlbHNlIHsKKwkJdm1lX2F0dHIgPSAoc3RydWN0IHZtZV9kbWFfdm1lICopc3JjLT5wcml2YXRlOworCQlwY2lfYXR0ciA9IChzdHJ1Y3Qgdm1lX2RtYV9wY2kgKilkZXN0LT5wcml2YXRlOworCX0KKworCS8qIENoZWNrIHdlIGNhbiBkbyBmdWxsZmlsbCByZXF1aXJlZCBhdHRyaWJ1dGVzICovCisJaWYgKCh2bWVfYXR0ci0+YXNwYWNlICYgfihWTUVfQTE2IHwgVk1FX0EyNCB8IFZNRV9BMzIgfCBWTUVfVVNFUjEgfAorCQlWTUVfVVNFUjIpKSAhPSAwKSB7CisKKwkJcHJpbnRrKEtFUk5fRVJSICJVbnN1cHBvcnRlZCBjeWNsZSB0eXBlXG4iKTsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJZ290byBlcnJfYXNwYWNlOworCX0KKworCWlmICgodm1lX2F0dHItPmN5Y2xlICYgfihWTUVfU0NUIHwgVk1FX0JMVCB8IFZNRV9TVVBFUiB8IFZNRV9VU0VSIHwKKwkJVk1FX1BST0cgfCBWTUVfREFUQSkpICE9IDApIHsKKworCQlwcmludGsoS0VSTl9FUlIgIlVuc3VwcG9ydGVkIGN5Y2xlIHR5cGVcbiIpOworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIGVycl9jeWNsZTsKKwl9CisKKwkvKiBDaGVjayB0byBzZWUgaWYgd2UgY2FuIGZ1bGxmaWxsIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gKi8KKwlpZiAoISgoKHNyYy0+dHlwZSA9PSBWTUVfRE1BX1BDSSkgJiYgKGRlc3QtPnR5cGUgPT0gVk1FX0RNQV9WTUUpKSB8fAorCQkoKHNyYy0+dHlwZSA9PSBWTUVfRE1BX1ZNRSkgJiYgKGRlc3QtPnR5cGUgPT0gVk1FX0RNQV9QQ0kpKSkpIHsKKworCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBwZXJmb3JtIHRyYW5zZmVyIHdpdGggdGhpcyAiCisJCQkic291cmNlLWRlc3RpbmF0aW9uIGNvbWJpbmF0aW9uXG4iKTsKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJZ290byBlcnJfZGlyZWN0OworCX0KKworCS8qIFNldHVwIGN5Y2xlIHR5cGVzICovCisJaWYgKHZtZV9hdHRyLT5jeWNsZSAmIFZNRV9CTFQpCisJCWVudHJ5LT5kZXNjcmlwdG9yLmRjdGwgfD0gQ0E5MUNYNDJfRENUTF9WQ1RfQkxUOworCisJLyogU2V0dXAgZGF0YSB3aWR0aCAqLworCXN3aXRjaCAodm1lX2F0dHItPmR3aWR0aCkgeworCWNhc2UgVk1FX0Q4OgorCQllbnRyeS0+ZGVzY3JpcHRvci5kY3RsIHw9IENBOTFDWDQyX0RDVExfVkRXX0Q4OworCQlicmVhazsKKwljYXNlIFZNRV9EMTY6CisJCWVudHJ5LT5kZXNjcmlwdG9yLmRjdGwgfD0gQ0E5MUNYNDJfRENUTF9WRFdfRDE2OworCQlicmVhazsKKwljYXNlIFZNRV9EMzI6CisJCWVudHJ5LT5kZXNjcmlwdG9yLmRjdGwgfD0gQ0E5MUNYNDJfRENUTF9WRFdfRDMyOworCQlicmVhazsKKwljYXNlIFZNRV9ENjQ6CisJCWVudHJ5LT5kZXNjcmlwdG9yLmRjdGwgfD0gQ0E5MUNYNDJfRENUTF9WRFdfRDY0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgZGF0YSB3aWR0aFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFNldHVwIGFkZHJlc3Mgc3BhY2UgKi8KKwlzd2l0Y2ggKHZtZV9hdHRyLT5hc3BhY2UpIHsKKwljYXNlIFZNRV9BMTY6CisJCWVudHJ5LT5kZXNjcmlwdG9yLmRjdGwgfD0gQ0E5MUNYNDJfRENUTF9WQVNfQTE2OworCQlicmVhazsKKwljYXNlIFZNRV9BMjQ6CisJCWVudHJ5LT5kZXNjcmlwdG9yLmRjdGwgfD0gQ0E5MUNYNDJfRENUTF9WQVNfQTI0OworCQlicmVhazsKKwljYXNlIFZNRV9BMzI6CisJCWVudHJ5LT5kZXNjcmlwdG9yLmRjdGwgfD0gQ0E5MUNYNDJfRENUTF9WQVNfQTMyOworCQlicmVhazsKKwljYXNlIFZNRV9VU0VSMToKKwkJZW50cnktPmRlc2NyaXB0b3IuZGN0bCB8PSBDQTkxQ1g0Ml9EQ1RMX1ZBU19VU0VSMTsKKwkJYnJlYWs7CisJY2FzZSBWTUVfVVNFUjI6CisJCWVudHJ5LT5kZXNjcmlwdG9yLmRjdGwgfD0gQ0E5MUNYNDJfRENUTF9WQVNfVVNFUjI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBhZGRyZXNzIHNwYWNlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCWlmICh2bWVfYXR0ci0+Y3ljbGUgJiBWTUVfU1VQRVIpCisJCWVudHJ5LT5kZXNjcmlwdG9yLmRjdGwgfD0gQ0E5MUNYNDJfRENUTF9TVVBFUl9TVVBSOworCWlmICh2bWVfYXR0ci0+Y3ljbGUgJiBWTUVfUFJPRykKKwkJZW50cnktPmRlc2NyaXB0b3IuZGN0bCB8PSBDQTkxQ1g0Ml9EQ1RMX1BHTV9QR007CisKKwllbnRyeS0+ZGVzY3JpcHRvci5kdGJjID0gY291bnQ7CisJZW50cnktPmRlc2NyaXB0b3IuZGxhID0gcGNpX2F0dHItPmFkZHJlc3M7CisJZW50cnktPmRlc2NyaXB0b3IuZHZhID0gdm1lX2F0dHItPmFkZHJlc3M7CisJZW50cnktPmRlc2NyaXB0b3IuZGNwcCA9IENBOTFDWDQyX0RDUFBfTlVMTDsKKworCS8qIEFkZCB0byBsaXN0ICovCisJbGlzdF9hZGRfdGFpbCgmKGVudHJ5LT5saXN0KSwgJihsaXN0LT5lbnRyaWVzKSk7CisKKwkvKiBGaWxsIG91dCBwcmV2aW91cyBkZXNjcmlwdG9ycyAiTmV4dCBBZGRyZXNzIiAqLworCWlmIChlbnRyeS0+bGlzdC5wcmV2ICE9ICYobGlzdC0+ZW50cmllcykpIHsKKwkJcHJldiA9IGxpc3RfZW50cnkoZW50cnktPmxpc3QucHJldiwgc3RydWN0IGNhOTFjeDQyX2RtYV9lbnRyeSwKKwkJCWxpc3QpOworCQkvKiBXZSBuZWVkIHRoZSBidXMgYWRkcmVzcyBmb3IgdGhlIHBvaW50ZXIgKi8KKwkJZGVzY19wdHIgPSB2aXJ0X3RvX2J1cygmKGVudHJ5LT5kZXNjcmlwdG9yKSk7CisJCXByZXYtPmRlc2NyaXB0b3IuZGNwcCA9IGRlc2NfcHRyICYgfkNBOTFDWDQyX0RDUFBfTTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2N5Y2xlOgorZXJyX2FzcGFjZToKK2Vycl9kaXJlY3Q6CitlcnJfYWxpZ246CisJa2ZyZWUoZW50cnkpOworZXJyX21lbToKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGNhOTFjeDQyX2RtYV9idXN5KHN0cnVjdCB2bWVfYnJpZGdlICpjYTkxY3g0Ml9icmlkZ2UpCit7CisJdTMyIHRtcDsKKwlzdHJ1Y3QgY2E5MWN4NDJfZHJpdmVyICpicmlkZ2U7CisKKwlicmlkZ2UgPSBjYTkxY3g0Ml9icmlkZ2UtPmRyaXZlcl9wcml2OworCisJdG1wID0gaW9yZWFkMzIoYnJpZGdlLT5iYXNlICsgREdDUyk7CisKKwlpZiAodG1wICYgQ0E5MUNYNDJfREdDU19BQ1QpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK2ludCBjYTkxY3g0Ml9kbWFfbGlzdF9leGVjKHN0cnVjdCB2bWVfZG1hX2xpc3QgKmxpc3QpCit7CisJc3RydWN0IHZtZV9kbWFfcmVzb3VyY2UgKmN0cmxyOworCXN0cnVjdCBjYTkxY3g0Ml9kbWFfZW50cnkgKmVudHJ5OworCWludCByZXR2YWwgPSAwOworCWRtYV9hZGRyX3QgYnVzX2FkZHI7CisJdTMyIHZhbDsKKworCXN0cnVjdCBjYTkxY3g0Ml9kcml2ZXIgKmJyaWRnZTsKKworCWN0cmxyID0gbGlzdC0+cGFyZW50OworCisJYnJpZGdlID0gY3RybHItPnBhcmVudC0+ZHJpdmVyX3ByaXY7CisKKwltdXRleF9sb2NrKCYoY3RybHItPm10eCkpOworCisJaWYgKCEobGlzdF9lbXB0eSgmKGN0cmxyLT5ydW5uaW5nKSkpKSB7CisJCS8qCisJCSAqIFhYWCBXZSBoYXZlIGFuIGFjdGl2ZSBETUEgdHJhbnNmZXIgYW5kIGN1cnJlbnRseSBoYXZlbid0CisJCSAqICAgICBzb3J0ZWQgb3V0IHRoZSBtZWNoYW5pc20gZm9yICJwZW5kaW5nIiBETUEgdHJhbnNmZXJzLgorCQkgKiAgICAgUmV0dXJuIGJ1c3kuCisJCSAqLworCQkvKiBOZWVkIHRvIGFkZCB0byBwZW5kaW5nIGhlcmUgKi8KKwkJbXV0ZXhfdW5sb2NrKCYoY3RybHItPm10eCkpOworCQlyZXR1cm4gLUVCVVNZOworCX0gZWxzZSB7CisJCWxpc3RfYWRkKCYobGlzdC0+bGlzdCksICYoY3RybHItPnJ1bm5pbmcpKTsKKwl9CisKKwkvKiBHZXQgZmlyc3QgYnVzIGFkZHJlc3MgYW5kIHdyaXRlIGludG8gcmVnaXN0ZXJzICovCisJZW50cnkgPSBsaXN0X2ZpcnN0X2VudHJ5KCYobGlzdC0+ZW50cmllcyksIHN0cnVjdCBjYTkxY3g0Ml9kbWFfZW50cnksCisJCWxpc3QpOworCisJYnVzX2FkZHIgPSB2aXJ0X3RvX2J1cygmKGVudHJ5LT5kZXNjcmlwdG9yKSk7CisKKwltdXRleF91bmxvY2soJihjdHJsci0+bXR4KSk7CisKKwlpb3dyaXRlMzIoMCwgYnJpZGdlLT5iYXNlICsgRFRCQyk7CisJaW93cml0ZTMyKGJ1c19hZGRyICYgfkNBOTFDWDQyX0RDUFBfTSwgYnJpZGdlLT5iYXNlICsgRENQUCk7CisKKwkvKiBTdGFydCB0aGUgb3BlcmF0aW9uICovCisJdmFsID0gaW9yZWFkMzIoYnJpZGdlLT5iYXNlICsgREdDUyk7CisKKwkvKiBYWFggQ291bGQgc2V0IFZNRWJ1cyBPbiBhbmQgT2ZmIENvdW50ZXJzIGhlcmUgKi8KKwl2YWwgJj0gKENBOTFDWDQyX0RHQ1NfVk9OX00gfCBDQTkxQ1g0Ml9ER0NTX1ZPRkZfTSk7CisKKwl2YWwgfD0gKENBOTFDWDQyX0RHQ1NfQ0hBSU4gfCBDQTkxQ1g0Ml9ER0NTX1NUT1AgfCBDQTkxQ1g0Ml9ER0NTX0hBTFQgfAorCQlDQTkxQ1g0Ml9ER0NTX0RPTkUgfCBDQTkxQ1g0Ml9ER0NTX0xFUlIgfCBDQTkxQ1g0Ml9ER0NTX1ZFUlIgfAorCQlDQTkxQ1g0Ml9ER0NTX1BFUlIpOworCisJaW93cml0ZTMyKHZhbCwgYnJpZGdlLT5iYXNlICsgREdDUyk7CisKKwl2YWwgfD0gQ0E5MUNYNDJfREdDU19HTzsKKworCWlvd3JpdGUzMih2YWwsIGJyaWRnZS0+YmFzZSArIERHQ1MpOworCisJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGJyaWRnZS0+ZG1hX3F1ZXVlLAorCQljYTkxY3g0Ml9kbWFfYnVzeShjdHJsci0+cGFyZW50KSk7CisKKwkvKgorCSAqIFJlYWQgc3RhdHVzIHJlZ2lzdGVyLCB0aGlzIHJlZ2lzdGVyIGlzIHZhbGlkIHVudGlsIHdlIGtpY2sgb2ZmIGEKKwkgKiBuZXcgdHJhbnNmZXIuCisJICovCisJdmFsID0gaW9yZWFkMzIoYnJpZGdlLT5iYXNlICsgREdDUyk7CisKKwlpZiAodmFsICYgKENBOTFDWDQyX0RHQ1NfTEVSUiB8IENBOTFDWDQyX0RHQ1NfVkVSUiB8CisJCUNBOTFDWDQyX0RHQ1NfUEVSUikpIHsKKworCQlwcmludGsoS0VSTl9FUlIgImNhOTFjMDQyOiBETUEgRXJyb3IuIERHQ1M9JTA4WFxuIiwgdmFsKTsKKwkJdmFsID0gaW9yZWFkMzIoYnJpZGdlLT5iYXNlICsgRENUTCk7CisJfQorCisJLyogUmVtb3ZlIGxpc3QgZnJvbSBydW5uaW5nIGxpc3QgKi8KKwltdXRleF9sb2NrKCYoY3RybHItPm10eCkpOworCWxpc3RfZGVsKCYobGlzdC0+bGlzdCkpOworCW11dGV4X3VubG9jaygmKGN0cmxyLT5tdHgpKTsKKworCXJldHVybiByZXR2YWw7CisKK30KKworaW50IGNhOTFjeDQyX2RtYV9saXN0X2VtcHR5KHN0cnVjdCB2bWVfZG1hX2xpc3QgKmxpc3QpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqdGVtcDsKKwlzdHJ1Y3QgY2E5MWN4NDJfZG1hX2VudHJ5ICplbnRyeTsKKworCS8qIGRldGFjaCBhbmQgZnJlZSBlYWNoIGVudHJ5ICovCisJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdGVtcCwgJihsaXN0LT5lbnRyaWVzKSkgeworCQlsaXN0X2RlbChwb3MpOworCQllbnRyeSA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgY2E5MWN4NDJfZG1hX2VudHJ5LCBsaXN0KTsKKwkJa2ZyZWUoZW50cnkpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogQWxsIDQgbG9jYXRpb24gbW9uaXRvcnMgcmVzaWRlIGF0IHRoZSBzYW1lIGJhc2UgLSB0aGlzIGlzIHRoZXJlZm9yZSBhCisgKiBzeXN0ZW0gd2lkZSBjb25maWd1cmF0aW9uLgorICoKKyAqIFRoaXMgZG9lcyBub3QgZW5hYmxlIHRoZSBMTSBtb25pdG9yIC0gdGhhdCBzaG91bGQgYmUgZG9uZSB3aGVuIHRoZSBmaXJzdAorICogY2FsbGJhY2sgaXMgYXR0YWNoZWQgYW5kIGRpc2FibGVkIHdoZW4gdGhlIGxhc3QgY2FsbGJhY2sgaXMgcmVtb3ZlZC4KKyAqLworaW50IGNhOTFjeDQyX2xtX3NldChzdHJ1Y3Qgdm1lX2xtX3Jlc291cmNlICpsbSwgdW5zaWduZWQgbG9uZyBsb25nIGxtX2Jhc2UsCisJdm1lX2FkZHJlc3NfdCBhc3BhY2UsIHZtZV9jeWNsZV90IGN5Y2xlKQoreworCXUzMiB0ZW1wX2Jhc2UsIGxtX2N0bCA9IDA7CisJaW50IGk7CisJc3RydWN0IGNhOTFjeDQyX2RyaXZlciAqYnJpZGdlOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCWJyaWRnZSA9IGxtLT5wYXJlbnQtPmRyaXZlcl9wcml2OworCWRldiA9IGxtLT5wYXJlbnQtPnBhcmVudDsKKworCS8qIENoZWNrIHRoZSBhbGlnbm1lbnQgb2YgdGhlIGxvY2F0aW9uIG1vbml0b3IgKi8KKwl0ZW1wX2Jhc2UgPSAodTMyKWxtX2Jhc2U7CisJaWYgKHRlbXBfYmFzZSAmIDB4ZmZmZikgeworCQlkZXZfZXJyKGRldiwgIkxvY2F0aW9uIG1vbml0b3IgbXVzdCBiZSBhbGlnbmVkIHRvIDY0S0IgIgorCQkJImJvdW5kYXJ5Iik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2xvY2soJihsbS0+bXR4KSk7CisKKwkvKiBJZiB3ZSBhbHJlYWR5IGhhdmUgYSBjYWxsYmFjayBhdHRhY2hlZCwgd2UgY2FuJ3QgbW92ZSBpdCEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbG0tPm1vbml0b3JzOyBpKyspIHsKKwkJaWYgKGJyaWRnZS0+bG1fY2FsbGJhY2tbaV0gIT0gTlVMTCkgeworCQkJbXV0ZXhfdW5sb2NrKCYobG0tPm10eCkpOworCQkJZGV2X2VycihkZXYsICJMb2NhdGlvbiBtb25pdG9yIGNhbGxiYWNrIGF0dGFjaGVkLCAiCisJCQkJImNhbid0IHJlc2V0XG4iKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisKKwlzd2l0Y2ggKGFzcGFjZSkgeworCWNhc2UgVk1FX0ExNjoKKwkJbG1fY3RsIHw9IENBOTFDWDQyX0xNX0NUTF9BU19BMTY7CisJCWJyZWFrOworCWNhc2UgVk1FX0EyNDoKKwkJbG1fY3RsIHw9IENBOTFDWDQyX0xNX0NUTF9BU19BMjQ7CisJCWJyZWFrOworCWNhc2UgVk1FX0EzMjoKKwkJbG1fY3RsIHw9IENBOTFDWDQyX0xNX0NUTF9BU19BMzI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW11dGV4X3VubG9jaygmKGxtLT5tdHgpKTsKKwkJZGV2X2VycihkZXYsICJJbnZhbGlkIGFkZHJlc3Mgc3BhY2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJaWYgKGN5Y2xlICYgVk1FX1NVUEVSKQorCQlsbV9jdGwgfD0gQ0E5MUNYNDJfTE1fQ1RMX1NVUFI7CisJaWYgKGN5Y2xlICYgVk1FX1VTRVIpCisJCWxtX2N0bCB8PSBDQTkxQ1g0Ml9MTV9DVExfTlBSSVY7CisJaWYgKGN5Y2xlICYgVk1FX1BST0cpCisJCWxtX2N0bCB8PSBDQTkxQ1g0Ml9MTV9DVExfUEdNOworCWlmIChjeWNsZSAmIFZNRV9EQVRBKQorCQlsbV9jdGwgfD0gQ0E5MUNYNDJfTE1fQ1RMX0RBVEE7CisKKwlpb3dyaXRlMzIobG1fYmFzZSwgYnJpZGdlLT5iYXNlICsgTE1fQlMpOworCWlvd3JpdGUzMihsbV9jdGwsIGJyaWRnZS0+YmFzZSArIExNX0NUTCk7CisKKwltdXRleF91bmxvY2soJihsbS0+bXR4KSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogR2V0IGNvbmZpZ3VyYXRpb24gb2YgdGhlIGNhbGxiYWNrIG1vbml0b3IgYW5kIHJldHVybiB3aGV0aGVyIGl0IGlzIGVuYWJsZWQKKyAqIG9yIGRpc2FibGVkLgorICovCitpbnQgY2E5MWN4NDJfbG1fZ2V0KHN0cnVjdCB2bWVfbG1fcmVzb3VyY2UgKmxtLCB1bnNpZ25lZCBsb25nIGxvbmcgKmxtX2Jhc2UsCisJdm1lX2FkZHJlc3NfdCAqYXNwYWNlLCB2bWVfY3ljbGVfdCAqY3ljbGUpCit7CisJdTMyIGxtX2N0bCwgZW5hYmxlZCA9IDA7CisJc3RydWN0IGNhOTFjeDQyX2RyaXZlciAqYnJpZGdlOworCisJYnJpZGdlID0gbG0tPnBhcmVudC0+ZHJpdmVyX3ByaXY7CisKKwltdXRleF9sb2NrKCYobG0tPm10eCkpOworCisJKmxtX2Jhc2UgPSAodW5zaWduZWQgbG9uZyBsb25nKWlvcmVhZDMyKGJyaWRnZS0+YmFzZSArIExNX0JTKTsKKwlsbV9jdGwgPSBpb3JlYWQzMihicmlkZ2UtPmJhc2UgKyBMTV9DVEwpOworCisJaWYgKGxtX2N0bCAmIENBOTFDWDQyX0xNX0NUTF9FTikKKwkJZW5hYmxlZCA9IDE7CisKKwlpZiAoKGxtX2N0bCAmIENBOTFDWDQyX0xNX0NUTF9BU19NKSA9PSBDQTkxQ1g0Ml9MTV9DVExfQVNfQTE2KQorCQkqYXNwYWNlID0gVk1FX0ExNjsKKwlpZiAoKGxtX2N0bCAmIENBOTFDWDQyX0xNX0NUTF9BU19NKSA9PSBDQTkxQ1g0Ml9MTV9DVExfQVNfQTI0KQorCQkqYXNwYWNlID0gVk1FX0EyNDsKKwlpZiAoKGxtX2N0bCAmIENBOTFDWDQyX0xNX0NUTF9BU19NKSA9PSBDQTkxQ1g0Ml9MTV9DVExfQVNfQTMyKQorCQkqYXNwYWNlID0gVk1FX0EzMjsKKworCSpjeWNsZSA9IDA7CisJaWYgKGxtX2N0bCAmIENBOTFDWDQyX0xNX0NUTF9TVVBSKQorCQkqY3ljbGUgfD0gVk1FX1NVUEVSOworCWlmIChsbV9jdGwgJiBDQTkxQ1g0Ml9MTV9DVExfTlBSSVYpCisJCSpjeWNsZSB8PSBWTUVfVVNFUjsKKwlpZiAobG1fY3RsICYgQ0E5MUNYNDJfTE1fQ1RMX1BHTSkKKwkJKmN5Y2xlIHw9IFZNRV9QUk9HOworCWlmIChsbV9jdGwgJiBDQTkxQ1g0Ml9MTV9DVExfREFUQSkKKwkJKmN5Y2xlIHw9IFZNRV9EQVRBOworCisJbXV0ZXhfdW5sb2NrKCYobG0tPm10eCkpOworCisJcmV0dXJuIGVuYWJsZWQ7Cit9CisKKy8qCisgKiBBdHRhY2ggYSBjYWxsYmFjayB0byBhIHNwZWNpZmljIGxvY2F0aW9uIG1vbml0b3IuCisgKgorICogQ2FsbGJhY2sgd2lsbCBiZSBwYXNzZWQgdGhlIG1vbml0b3IgdHJpZ2dlcmVkLgorICovCitpbnQgY2E5MWN4NDJfbG1fYXR0YWNoKHN0cnVjdCB2bWVfbG1fcmVzb3VyY2UgKmxtLCBpbnQgbW9uaXRvciwKKwl2b2lkICgqY2FsbGJhY2spKGludCkpCit7CisJdTMyIGxtX2N0bCwgdG1wOworCXN0cnVjdCBjYTkxY3g0Ml9kcml2ZXIgKmJyaWRnZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwlicmlkZ2UgPSBsbS0+cGFyZW50LT5kcml2ZXJfcHJpdjsKKwlkZXYgPSBsbS0+cGFyZW50LT5wYXJlbnQ7CisKKwltdXRleF9sb2NrKCYobG0tPm10eCkpOworCisJLyogRW5zdXJlIHRoYXQgdGhlIGxvY2F0aW9uIG1vbml0b3IgaXMgY29uZmlndXJlZCAtIG5lZWQgUEdNIG9yIERBVEEgKi8KKwlsbV9jdGwgPSBpb3JlYWQzMihicmlkZ2UtPmJhc2UgKyBMTV9DVEwpOworCWlmICgobG1fY3RsICYgKENBOTFDWDQyX0xNX0NUTF9QR00gfCBDQTkxQ1g0Ml9MTV9DVExfREFUQSkpID09IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCYobG0tPm10eCkpOworCQlkZXZfZXJyKGRldiwgIkxvY2F0aW9uIG1vbml0b3Igbm90IHByb3Blcmx5IGNvbmZpZ3VyZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBDaGVjayB0aGF0IGEgY2FsbGJhY2sgaXNuJ3QgYWxyZWFkeSBhdHRhY2hlZCAqLworCWlmIChicmlkZ2UtPmxtX2NhbGxiYWNrW21vbml0b3JdICE9IE5VTEwpIHsKKwkJbXV0ZXhfdW5sb2NrKCYobG0tPm10eCkpOworCQlkZXZfZXJyKGRldiwgIkV4aXN0aW5nIGNhbGxiYWNrIGF0dGFjaGVkXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBBdHRhY2ggY2FsbGJhY2sgKi8KKwlicmlkZ2UtPmxtX2NhbGxiYWNrW21vbml0b3JdID0gY2FsbGJhY2s7CisKKwkvKiBFbmFibGUgTG9jYXRpb24gTW9uaXRvciBpbnRlcnJ1cHQgKi8KKwl0bXAgPSBpb3JlYWQzMihicmlkZ2UtPmJhc2UgKyBMSU5UX0VOKTsKKwl0bXAgfD0gQ0E5MUNYNDJfTElOVF9MTVttb25pdG9yXTsKKwlpb3dyaXRlMzIodG1wLCBicmlkZ2UtPmJhc2UgKyBMSU5UX0VOKTsKKworCS8qIEVuc3VyZSB0aGF0IGdsb2JhbCBMb2NhdGlvbiBNb25pdG9yIEVuYWJsZSBzZXQgKi8KKwlpZiAoKGxtX2N0bCAmIENBOTFDWDQyX0xNX0NUTF9FTikgPT0gMCkgeworCQlsbV9jdGwgfD0gQ0E5MUNYNDJfTE1fQ1RMX0VOOworCQlpb3dyaXRlMzIobG1fY3RsLCBicmlkZ2UtPmJhc2UgKyBMTV9DVEwpOworCX0KKworCW11dGV4X3VubG9jaygmKGxtLT5tdHgpKTsKKworCXJldHVybiAwOworfQorCisvKgorICogRGV0YWNoIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9ybiBhIHNwZWNpZmljIGxvY2F0aW9uIG1vbml0b3IuCisgKi8KK2ludCBjYTkxY3g0Ml9sbV9kZXRhY2goc3RydWN0IHZtZV9sbV9yZXNvdXJjZSAqbG0sIGludCBtb25pdG9yKQoreworCXUzMiB0bXA7CisJc3RydWN0IGNhOTFjeDQyX2RyaXZlciAqYnJpZGdlOworCisJYnJpZGdlID0gbG0tPnBhcmVudC0+ZHJpdmVyX3ByaXY7CisKKwltdXRleF9sb2NrKCYobG0tPm10eCkpOworCisJLyogRGlzYWJsZSBMb2NhdGlvbiBNb25pdG9yIGFuZCBlbnN1cmUgcHJldmlvdXMgaW50ZXJydXB0cyBhcmUgY2xlYXIgKi8KKwl0bXAgPSBpb3JlYWQzMihicmlkZ2UtPmJhc2UgKyBMSU5UX0VOKTsKKwl0bXAgJj0gfkNBOTFDWDQyX0xJTlRfTE1bbW9uaXRvcl07CisJaW93cml0ZTMyKHRtcCwgYnJpZGdlLT5iYXNlICsgTElOVF9FTik7CisKKwlpb3dyaXRlMzIoQ0E5MUNYNDJfTElOVF9MTVttb25pdG9yXSwKKwkJIGJyaWRnZS0+YmFzZSArIExJTlRfU1RBVCk7CisKKwkvKiBEZXRhY2ggY2FsbGJhY2sgKi8KKwlicmlkZ2UtPmxtX2NhbGxiYWNrW21vbml0b3JdID0gTlVMTDsKKworCS8qIElmIGFsbCBsb2NhdGlvbiBtb25pdG9ycyBkaXNhYmxlZCwgZGlzYWJsZSBnbG9iYWwgTG9jYXRpb24gTW9uaXRvciAqLworCWlmICgodG1wICYgKENBOTFDWDQyX0xJTlRfTE0wIHwgQ0E5MUNYNDJfTElOVF9MTTEgfCBDQTkxQ1g0Ml9MSU5UX0xNMiB8CisJCQlDQTkxQ1g0Ml9MSU5UX0xNMykpID09IDApIHsKKwkJdG1wID0gaW9yZWFkMzIoYnJpZGdlLT5iYXNlICsgTE1fQ1RMKTsKKwkJdG1wICY9IH5DQTkxQ1g0Ml9MTV9DVExfRU47CisJCWlvd3JpdGUzMih0bXAsIGJyaWRnZS0+YmFzZSArIExNX0NUTCk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCYobG0tPm10eCkpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjYTkxY3g0Ml9zbG90X2dldChzdHJ1Y3Qgdm1lX2JyaWRnZSAqY2E5MWN4NDJfYnJpZGdlKQogewogCXUzMiBzbG90ID0gMDsKKwlzdHJ1Y3QgY2E5MWN4NDJfZHJpdmVyICpicmlkZ2U7CiAKLQlzbG90ID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgVkNTUl9CUyk7Ci0Jc2xvdCA9ICgoc2xvdCAmIENBOTFDWDQyX1ZDU1JfQlNfU0xPVF9NKSA+PiAyNyk7CisJYnJpZGdlID0gY2E5MWN4NDJfYnJpZGdlLT5kcml2ZXJfcHJpdjsKKworCWlmICghZ2VvaWQpIHsKKwkJc2xvdCA9IGlvcmVhZDMyKGJyaWRnZS0+YmFzZSArIFZDU1JfQlMpOworCQlzbG90ID0gKChzbG90ICYgQ0E5MUNYNDJfVkNTUl9CU19TTE9UX00pID4+IDI3KTsKKwl9IGVsc2UKKwkJc2xvdCA9IGdlb2lkOworCiAJcmV0dXJuIChpbnQpc2xvdDsKIAogfQpAQCAtOTAwLDE5ICsxMzk3LDIxIEBACiAgKiBBdXRvLUlEIG9yIEdlb2dyYXBoaWMgYWRkcmVzcy4gVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgdGhlIHdpbmRvdyBpcwogICogZW5hYmxlZCBhdCBhbiBvZmZzZXQgY29uc2lzdGVudCB3aXRoIHRoZSBib2FyZHMgZ2VvcGdyYXBoaWMgYWRkcmVzcy4KICAqLwotc3RhdGljIGludCBjYTkxY3g0Ml9jcmNzcl9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQorc3RhdGljIGludCBjYTkxY3g0Ml9jcmNzcl9pbml0KHN0cnVjdCB2bWVfYnJpZGdlICpjYTkxY3g0Ml9icmlkZ2UsCisJc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJdW5zaWduZWQgaW50IGNyY3NyX2FkZHI7CiAJaW50IHRtcCwgc2xvdDsKKwlzdHJ1Y3QgY2E5MWN4NDJfZHJpdmVyICpicmlkZ2U7CiAKLS8qIFhYWCBXZSBtYXkgbmVlZCB0byBzZXQgdGhpcyBzb21laG93IGFzIHRoZSBVbml2ZXJzZSBJSSBkb2VzIG5vdCBzdXBwb3J0Ci0gKiAgICAgZ2VvZ3JhcGhpY2FsIGFkZHJlc3NpbmcuCi0gKi8KLSNpZiAwCi0JaWYgKHZtZV9zbG90bnVtICE9IC0xKQotCQlpb3dyaXRlMzIodm1lX3Nsb3RudW0gPDwgMjcsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIFZDU1JfQlMpOwotI2VuZGlmCi0Jc2xvdCA9IGNhOTFjeDQyX3Nsb3RfZ2V0KCk7CisJYnJpZGdlID0gY2E5MWN4NDJfYnJpZGdlLT5kcml2ZXJfcHJpdjsKKworCXNsb3QgPSBjYTkxY3g0Ml9zbG90X2dldChjYTkxY3g0Ml9icmlkZ2UpOworCisJLyogV3JpdGUgQ1NSIEJhc2UgQWRkcmVzcyBpZiBzbG90IElEIGlzIHN1cHBsaWVkIGFzIGEgbW9kdWxlIHBhcmFtICovCisJaWYgKGdlb2lkKQorCQlpb3dyaXRlMzIoZ2VvaWQgPDwgMjcsIGJyaWRnZS0+YmFzZSArIFZDU1JfQlMpOworCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIkNSL0NTUiBPZmZzZXQ6ICVkXG4iLCBzbG90KTsKIAlpZiAoc2xvdCA9PSAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIlNsb3QgbnVtYmVyIGlzIHVuc2V0LCBub3QgY29uZmlndXJpbmcgIgpAQCAtOTIxLDM5ICsxNDIwLDQ0IEBACiAJfQogCiAJLyogQWxsb2NhdGUgbWVtIGZvciBDUi9DU1IgaW1hZ2UgKi8KLQljcmNzcl9rZXJuZWwgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCBWTUVfQ1JDU1JfQlVGX1NJWkUsCi0JCSZjcmNzcl9idXMpOwotCWlmIChjcmNzcl9rZXJuZWwgPT0gTlVMTCkgeworCWJyaWRnZS0+Y3Jjc3Jfa2VybmVsID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgVk1FX0NSQ1NSX0JVRl9TSVpFLAorCQkmKGJyaWRnZS0+Y3Jjc3JfYnVzKSk7CisJaWYgKGJyaWRnZS0+Y3Jjc3Jfa2VybmVsID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgQ1IvQ1NSICIKIAkJCSJpbWFnZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCW1lbXNldChjcmNzcl9rZXJuZWwsIDAsIFZNRV9DUkNTUl9CVUZfU0laRSk7CisJbWVtc2V0KGJyaWRnZS0+Y3Jjc3Jfa2VybmVsLCAwLCBWTUVfQ1JDU1JfQlVGX1NJWkUpOwogCiAJY3Jjc3JfYWRkciA9IHNsb3QgKiAoNTEyICogMTAyNCk7Ci0JaW93cml0ZTMyKGNyY3NyX2J1cyAtIGNyY3NyX2FkZHIsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIFZDU1JfVE8pOworCWlvd3JpdGUzMihicmlkZ2UtPmNyY3NyX2J1cyAtIGNyY3NyX2FkZHIsIGJyaWRnZS0+YmFzZSArIFZDU1JfVE8pOwogCi0JdG1wID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgVkNTUl9DVEwpOworCXRtcCA9IGlvcmVhZDMyKGJyaWRnZS0+YmFzZSArIFZDU1JfQ1RMKTsKIAl0bXAgfD0gQ0E5MUNYNDJfVkNTUl9DVExfRU47Ci0JaW93cml0ZTMyKHRtcCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgVkNTUl9DVEwpOworCWlvd3JpdGUzMih0bXAsIGJyaWRnZS0+YmFzZSArIFZDU1JfQ1RMKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBjYTkxY3g0Ml9jcmNzcl9leGl0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQorc3RhdGljIHZvaWQgY2E5MWN4NDJfY3Jjc3JfZXhpdChzdHJ1Y3Qgdm1lX2JyaWRnZSAqY2E5MWN4NDJfYnJpZGdlLAorCXN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXUzMiB0bXA7CisJc3RydWN0IGNhOTFjeDQyX2RyaXZlciAqYnJpZGdlOworCisJYnJpZGdlID0gY2E5MWN4NDJfYnJpZGdlLT5kcml2ZXJfcHJpdjsKIAogCS8qIFR1cm4gb2ZmIENSL0NTUiBzcGFjZSAqLwotCXRtcCA9IGlvcmVhZDMyKGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIFZDU1JfQ1RMKTsKKwl0bXAgPSBpb3JlYWQzMihicmlkZ2UtPmJhc2UgKyBWQ1NSX0NUTCk7CiAJdG1wICY9IH5DQTkxQ1g0Ml9WQ1NSX0NUTF9FTjsKLQlpb3dyaXRlMzIodG1wLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBWQ1NSX0NUTCk7CisJaW93cml0ZTMyKHRtcCwgYnJpZGdlLT5iYXNlICsgVkNTUl9DVEwpOwogCiAJLyogRnJlZSBpbWFnZSAqLwotCWlvd3JpdGUzMigwLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBWQ1NSX1RPKTsKKwlpb3dyaXRlMzIoMCwgYnJpZGdlLT5iYXNlICsgVkNTUl9UTyk7CiAKLQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIFZNRV9DUkNTUl9CVUZfU0laRSwgY3Jjc3Jfa2VybmVsLCBjcmNzcl9idXMpOworCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgVk1FX0NSQ1NSX0JVRl9TSVpFLCBicmlkZ2UtPmNyY3NyX2tlcm5lbCwKKwkJYnJpZGdlLT5jcmNzcl9idXMpOwogfQogCiBzdGF0aWMgaW50IGNhOTFjeDQyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCkBAIC05NjEsMTEgKzE0NjUsMTEgQEAKIAlpbnQgcmV0dmFsLCBpOwogCXUzMiBkYXRhOwogCXN0cnVjdCBsaXN0X2hlYWQgKnBvcyA9IE5VTEw7CisJc3RydWN0IHZtZV9icmlkZ2UgKmNhOTFjeDQyX2JyaWRnZTsKKwlzdHJ1Y3QgY2E5MWN4NDJfZHJpdmVyICpjYTkxY3g0Ml9kZXZpY2U7CiAJc3RydWN0IHZtZV9tYXN0ZXJfcmVzb3VyY2UgKm1hc3Rlcl9pbWFnZTsKIAlzdHJ1Y3Qgdm1lX3NsYXZlX3Jlc291cmNlICpzbGF2ZV9pbWFnZTsKLSNpZiAwCiAJc3RydWN0IHZtZV9kbWFfcmVzb3VyY2UgKmRtYV9jdHJscjsKLSNlbmRpZgogCXN0cnVjdCB2bWVfbG1fcmVzb3VyY2UgKmxtOwogCiAJLyogV2Ugd2FudCB0byBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgb2YgZWFjaCBicmlkZ2Ugc28gd2UgbmVlZCB0bwpAQCAtOTgyLDYgKzE0ODYsMTkgQEAKIAogCW1lbXNldChjYTkxY3g0Ml9icmlkZ2UsIDAsIHNpemVvZihzdHJ1Y3Qgdm1lX2JyaWRnZSkpOwogCisJY2E5MWN4NDJfZGV2aWNlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNhOTFjeDQyX2RyaXZlciksIEdGUF9LRVJORUwpOworCisJaWYgKGNhOTFjeDQyX2RldmljZSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRldmljZSAiCisJCQkic3RydWN0dXJlXG4iKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnJfZHJpdmVyOworCX0KKworCW1lbXNldChjYTkxY3g0Ml9kZXZpY2UsIDAsIHNpemVvZihzdHJ1Y3QgY2E5MWN4NDJfZHJpdmVyKSk7CisKKwljYTkxY3g0Ml9icmlkZ2UtPmRyaXZlcl9wcml2ID0gY2E5MWN4NDJfZGV2aWNlOworCiAJLyogRW5hYmxlIHRoZSBkZXZpY2UgKi8KIAlyZXR2YWwgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAocmV0dmFsKSB7CkBAIC05OTcsMTYgKzE1MTQsMTYgQEAKIAl9CiAKIAkvKiBtYXAgcmVnaXN0ZXJzIGluIEJBUiAwICovCi0JY2E5MWN4NDJfYnJpZGdlLT5iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSwKKwljYTkxY3g0Ml9kZXZpY2UtPmJhc2UgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLAogCQk0MDk2KTsKLQlpZiAoIWNhOTFjeDQyX2JyaWRnZS0+YmFzZSkgeworCWlmICghY2E5MWN4NDJfZGV2aWNlLT5iYXNlKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byByZW1hcCBDUkcgcmVnaW9uXG4iKTsKIAkJcmV0dmFsID0gLUVJTzsKIAkJZ290byBlcnJfcmVtYXA7CiAJfQogCiAJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBtYXBwaW5nIHdvcmtlZCBvdXQgKi8KLQlkYXRhID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfUENJX0lEKSAmIDB4MDAwMEZGRkY7CisJZGF0YSA9IGlvcmVhZDMyKGNhOTFjeDQyX2RldmljZS0+YmFzZSArIENBOTFDWDQyX1BDSV9JRCkgJiAweDAwMDBGRkZGOwogCWlmIChkYXRhICE9IFBDSV9WRU5ET1JfSURfVFVORFJBKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIlBDSV9JRCBjaGVjayBmYWlsZWRcbiIpOwogCQlyZXR2YWwgPSAtRUlPOwpAQCAtMTAxNCwxMSArMTUzMSwxMCBAQAogCX0KIAogCS8qIEluaXRpYWxpemUgd2FpdCBxdWV1ZXMgJiBtdXR1YWwgZXhjbHVzaW9uIGZsYWdzICovCi0JLyogWFhYIFRoZXNlIG5lZWQgdG8gYmUgbW92ZWQgdG8gdGhlIHZtZV9icmlkZ2Ugc3RydWN0dXJlICovCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmZG1hX3F1ZXVlKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpYWNrX3F1ZXVlKTsKLQltdXRleF9pbml0KCYodm1lX2ludCkpOwotCW11dGV4X2luaXQoJih2bWVfcm13KSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmKGNhOTFjeDQyX2RldmljZS0+ZG1hX3F1ZXVlKSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmKGNhOTFjeDQyX2RldmljZS0+aWFja19xdWV1ZSkpOworCW11dGV4X2luaXQoJihjYTkxY3g0Ml9kZXZpY2UtPnZtZV9pbnQpKTsKKwltdXRleF9pbml0KCYoY2E5MWN4NDJfZGV2aWNlLT52bWVfcm13KSk7CiAKIAljYTkxY3g0Ml9icmlkZ2UtPnBhcmVudCA9ICYocGRldi0+ZGV2KTsKIAlzdHJjcHkoY2E5MWN4NDJfYnJpZGdlLT5uYW1lLCBkcml2ZXJfbmFtZSk7CkBAIC0xMDUwLDcgKzE1NjYsNyBAQAogCQltYXN0ZXJfaW1hZ2UtPmN5Y2xlX2F0dHIgPSBWTUVfU0NUIHwgVk1FX0JMVCB8IFZNRV9NQkxUIHwKIAkJCVZNRV9TVVBFUiB8IFZNRV9VU0VSIHwgVk1FX1BST0cgfCBWTUVfREFUQTsKIAkJbWFzdGVyX2ltYWdlLT53aWR0aF9hdHRyID0gVk1FX0Q4IHwgVk1FX0QxNiB8IFZNRV9EMzIgfCBWTUVfRDY0OwotCQltZW1zZXQoJihtYXN0ZXJfaW1hZ2UtPnBjaV9yZXNvdXJjZSksIDAsCisJCW1lbXNldCgmKG1hc3Rlcl9pbWFnZS0+YnVzX3Jlc291cmNlKSwgMCwKIAkJCXNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpKTsKIAkJbWFzdGVyX2ltYWdlLT5rZXJuX2Jhc2UgID0gTlVMTDsKIAkJbGlzdF9hZGRfdGFpbCgmKG1hc3Rlcl9pbWFnZS0+bGlzdCksCkBAIC0xMDg0LDcgKzE2MDAsNyBAQAogCQlsaXN0X2FkZF90YWlsKCYoc2xhdmVfaW1hZ2UtPmxpc3QpLAogCQkJJihjYTkxY3g0Ml9icmlkZ2UtPnNsYXZlX3Jlc291cmNlcykpOwogCX0KLSNpZiAwCisKIAkvKiBBZGQgZG1hIGVuZ2luZXMgdG8gbGlzdCAqLwogCUlOSVRfTElTVF9IRUFEKCYoY2E5MWN4NDJfYnJpZGdlLT5kbWFfcmVzb3VyY2VzKSk7CiAJZm9yIChpID0gMDsgaSA8IENBOTFDMTQyX01BWF9ETUE7IGkrKykgewpAQCAtMTEwMCwxMiArMTYxNiwxNCBAQAogCQltdXRleF9pbml0KCYoZG1hX2N0cmxyLT5tdHgpKTsKIAkJZG1hX2N0cmxyLT5sb2NrZWQgPSAwOwogCQlkbWFfY3RybHItPm51bWJlciA9IGk7CisJCWRtYV9jdHJsci0+cm91dGVfYXR0ciA9IFZNRV9ETUFfVk1FX1RPX01FTSB8CisJCQlWTUVfRE1BX01FTV9UT19WTUU7CiAJCUlOSVRfTElTVF9IRUFEKCYoZG1hX2N0cmxyLT5wZW5kaW5nKSk7CiAJCUlOSVRfTElTVF9IRUFEKCYoZG1hX2N0cmxyLT5ydW5uaW5nKSk7CiAJCWxpc3RfYWRkX3RhaWwoJihkbWFfY3RybHItPmxpc3QpLAogCQkJJihjYTkxY3g0Ml9icmlkZ2UtPmRtYV9yZXNvdXJjZXMpKTsKIAl9Ci0jZW5kaWYKKwogCS8qIEFkZCBsb2NhdGlvbiBtb25pdG9yIHRvIGxpc3QgKi8KIAlJTklUX0xJU1RfSEVBRCgmKGNhOTFjeDQyX2JyaWRnZS0+bG1fcmVzb3VyY2VzKSk7CiAJbG0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgdm1lX2xtX3Jlc291cmNlKSwgR0ZQX0tFUk5FTCk7CkBAIC0xMTI4LDMzICsxNjQ2LDI2IEBACiAJY2E5MWN4NDJfYnJpZGdlLT5tYXN0ZXJfc2V0ID0gY2E5MWN4NDJfbWFzdGVyX3NldDsKIAljYTkxY3g0Ml9icmlkZ2UtPm1hc3Rlcl9yZWFkID0gY2E5MWN4NDJfbWFzdGVyX3JlYWQ7CiAJY2E5MWN4NDJfYnJpZGdlLT5tYXN0ZXJfd3JpdGUgPSBjYTkxY3g0Ml9tYXN0ZXJfd3JpdGU7Ci0jaWYgMAogCWNhOTFjeDQyX2JyaWRnZS0+bWFzdGVyX3JtdyA9IGNhOTFjeDQyX21hc3Rlcl9ybXc7CiAJY2E5MWN4NDJfYnJpZGdlLT5kbWFfbGlzdF9hZGQgPSBjYTkxY3g0Ml9kbWFfbGlzdF9hZGQ7CiAJY2E5MWN4NDJfYnJpZGdlLT5kbWFfbGlzdF9leGVjID0gY2E5MWN4NDJfZG1hX2xpc3RfZXhlYzsKIAljYTkxY3g0Ml9icmlkZ2UtPmRtYV9saXN0X2VtcHR5ID0gY2E5MWN4NDJfZG1hX2xpc3RfZW1wdHk7Ci0jZW5kaWYKIAljYTkxY3g0Ml9icmlkZ2UtPmlycV9zZXQgPSBjYTkxY3g0Ml9pcnFfc2V0OwogCWNhOTFjeDQyX2JyaWRnZS0+aXJxX2dlbmVyYXRlID0gY2E5MWN4NDJfaXJxX2dlbmVyYXRlOwotI2lmIDAKIAljYTkxY3g0Ml9icmlkZ2UtPmxtX3NldCA9IGNhOTFjeDQyX2xtX3NldDsKIAljYTkxY3g0Ml9icmlkZ2UtPmxtX2dldCA9IGNhOTFjeDQyX2xtX2dldDsKIAljYTkxY3g0Ml9icmlkZ2UtPmxtX2F0dGFjaCA9IGNhOTFjeDQyX2xtX2F0dGFjaDsKIAljYTkxY3g0Ml9icmlkZ2UtPmxtX2RldGFjaCA9IGNhOTFjeDQyX2xtX2RldGFjaDsKLSNlbmRpZgogCWNhOTFjeDQyX2JyaWRnZS0+c2xvdF9nZXQgPSBjYTkxY3g0Ml9zbG90X2dldDsKIAotCWRhdGEgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBNSVNDX0NUTCk7CisJZGF0YSA9IGlvcmVhZDMyKGNhOTFjeDQyX2RldmljZS0+YmFzZSArIE1JU0NfQ1RMKTsKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiQm9hcmQgaXMlcyB0aGUgVk1FIHN5c3RlbSBjb250cm9sbGVyXG4iLAogCQkoZGF0YSAmIENBOTFDWDQyX01JU0NfQ1RMX1NZU0NPTikgPyAiIiA6ICIgbm90Iik7Ci0JZGV2X2luZm8oJnBkZXYtPmRldiwgIlNsb3QgSUQgaXMgJWRcbiIsIGNhOTFjeDQyX3Nsb3RfZ2V0KCkpOworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJTbG90IElEIGlzICVkXG4iLAorCQljYTkxY3g0Ml9zbG90X2dldChjYTkxY3g0Ml9icmlkZ2UpKTsKIAotCWlmIChjYTkxY3g0Ml9jcmNzcl9pbml0KHBkZXYpKSB7CisJaWYgKGNhOTFjeDQyX2NyY3NyX2luaXQoY2E5MWN4NDJfYnJpZGdlLCBwZGV2KSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDUi9DU1IgY29uZmlndXJhdGlvbiBmYWlsZWQuXG4iKTsKLQkJcmV0dmFsID0gLUVJTlZBTDsKLSNpZiAwCi0JCWdvdG8gZXJyX2NyY3NyOwotI2VuZGlmCiAJfQogCiAJLyogTmVlZCB0byBzYXZlIGNhOTFjeDQyX2JyaWRnZSBwb2ludGVyIGxvY2FsbHkgaW4gbGluayBsaXN0IGZvciB1c2UgaW4KQEAgLTExNjYsMTQgKzE2NzcsMTMgQEAKIAkJZ290byBlcnJfcmVnOwogCX0KIAorCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBjYTkxY3g0Ml9icmlkZ2UpOworCiAJcmV0dXJuIDA7CiAKIAl2bWVfdW5yZWdpc3Rlcl9icmlkZ2UoY2E5MWN4NDJfYnJpZGdlKTsKIGVycl9yZWc6Ci0JY2E5MWN4NDJfY3Jjc3JfZXhpdChwZGV2KTsKLSNpZiAwCi1lcnJfY3Jjc3I6Ci0jZW5kaWYKKwljYTkxY3g0Ml9jcmNzcl9leGl0KGNhOTFjeDQyX2JyaWRnZSwgcGRldik7CiBlcnJfbG06CiAJLyogcmVzb3VyY2VzIGFyZSBzdG9yZWQgaW4gbGluayBsaXN0ICovCiAJbGlzdF9mb3JfZWFjaChwb3MsICYoY2E5MWN4NDJfYnJpZGdlLT5sbV9yZXNvdXJjZXMpKSB7CkBAIC0xMTgxLDcgKzE2OTEsNiBAQAogCQlsaXN0X2RlbChwb3MpOwogCQlrZnJlZShsbSk7CiAJfQotI2lmIDAKIGVycl9kbWE6CiAJLyogcmVzb3VyY2VzIGFyZSBzdG9yZWQgaW4gbGluayBsaXN0ICovCiAJbGlzdF9mb3JfZWFjaChwb3MsICYoY2E5MWN4NDJfYnJpZGdlLT5kbWFfcmVzb3VyY2VzKSkgewpAQCAtMTE4OSw3ICsxNjk4LDYgQEAKIAkJbGlzdF9kZWwocG9zKTsKIAkJa2ZyZWUoZG1hX2N0cmxyKTsKIAl9Ci0jZW5kaWYKIGVycl9zbGF2ZToKIAkvKiByZXNvdXJjZXMgYXJlIHN0b3JlZCBpbiBsaW5rIGxpc3QgKi8KIAlsaXN0X2Zvcl9lYWNoKHBvcywgJihjYTkxY3g0Ml9icmlkZ2UtPnNsYXZlX3Jlc291cmNlcykpIHsKQEAgLTEyMDYsMTUgKzE3MTQsMTcgQEAKIAkJa2ZyZWUobWFzdGVyX2ltYWdlKTsKIAl9CiAKLQljYTkxY3g0Ml9pcnFfZXhpdChwZGV2KTsKKwljYTkxY3g0Ml9pcnFfZXhpdChjYTkxY3g0Ml9kZXZpY2UsIHBkZXYpOwogZXJyX2lycToKIGVycl90ZXN0OgotCWlvdW5tYXAoY2E5MWN4NDJfYnJpZGdlLT5iYXNlKTsKKwlpb3VubWFwKGNhOTFjeDQyX2RldmljZS0+YmFzZSk7CiBlcnJfcmVtYXA6CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIGVycl9yZXNvdXJjZToKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiBlcnJfZW5hYmxlOgorCWtmcmVlKGNhOTFjeDQyX2RldmljZSk7CitlcnJfZHJpdmVyOgogCWtmcmVlKGNhOTFjeDQyX2JyaWRnZSk7CiBlcnJfc3RydWN0OgogCXJldHVybiByZXR2YWw7CkBAIC0xMjI4LDMyICsxNzM4LDM3IEBACiAJc3RydWN0IHZtZV9zbGF2ZV9yZXNvdXJjZSAqc2xhdmVfaW1hZ2U7CiAJc3RydWN0IHZtZV9kbWFfcmVzb3VyY2UgKmRtYV9jdHJscjsKIAlzdHJ1Y3Qgdm1lX2xtX3Jlc291cmNlICpsbTsKKwlzdHJ1Y3QgY2E5MWN4NDJfZHJpdmVyICpicmlkZ2U7CisJc3RydWN0IHZtZV9icmlkZ2UgKmNhOTFjeDQyX2JyaWRnZSA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWJyaWRnZSA9IGNhOTFjeDQyX2JyaWRnZS0+ZHJpdmVyX3ByaXY7CisKIAogCS8qIFR1cm4gb2ZmIEludHMgKi8KLQlpb3dyaXRlMzIoMCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgTElOVF9FTik7CisJaW93cml0ZTMyKDAsIGJyaWRnZS0+YmFzZSArIExJTlRfRU4pOwogCiAJLyogVHVybiBvZmYgdGhlIHdpbmRvd3MgKi8KLQlpb3dyaXRlMzIoMHgwMDgwMDAwMCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgTFNJMF9DVEwpOwotCWlvd3JpdGUzMigweDAwODAwMDAwLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBMU0kxX0NUTCk7Ci0JaW93cml0ZTMyKDB4MDA4MDAwMDAsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIExTSTJfQ1RMKTsKLQlpb3dyaXRlMzIoMHgwMDgwMDAwMCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgTFNJM19DVEwpOwotCWlvd3JpdGUzMigweDAwODAwMDAwLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBMU0k0X0NUTCk7Ci0JaW93cml0ZTMyKDB4MDA4MDAwMDAsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIExTSTVfQ1RMKTsKLQlpb3dyaXRlMzIoMHgwMDgwMDAwMCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgTFNJNl9DVEwpOwotCWlvd3JpdGUzMigweDAwODAwMDAwLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBMU0k3X0NUTCk7Ci0JaW93cml0ZTMyKDB4MDBGMDAwMDAsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIFZTSTBfQ1RMKTsKLQlpb3dyaXRlMzIoMHgwMEYwMDAwMCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgVlNJMV9DVEwpOwotCWlvd3JpdGUzMigweDAwRjAwMDAwLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBWU0kyX0NUTCk7Ci0JaW93cml0ZTMyKDB4MDBGMDAwMDAsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIFZTSTNfQ1RMKTsKLQlpb3dyaXRlMzIoMHgwMEYwMDAwMCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgVlNJNF9DVEwpOwotCWlvd3JpdGUzMigweDAwRjAwMDAwLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBWU0k1X0NUTCk7Ci0JaW93cml0ZTMyKDB4MDBGMDAwMDAsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIFZTSTZfQ1RMKTsKLQlpb3dyaXRlMzIoMHgwMEYwMDAwMCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgVlNJN19DVEwpOworCWlvd3JpdGUzMigweDAwODAwMDAwLCBicmlkZ2UtPmJhc2UgKyBMU0kwX0NUTCk7CisJaW93cml0ZTMyKDB4MDA4MDAwMDAsIGJyaWRnZS0+YmFzZSArIExTSTFfQ1RMKTsKKwlpb3dyaXRlMzIoMHgwMDgwMDAwMCwgYnJpZGdlLT5iYXNlICsgTFNJMl9DVEwpOworCWlvd3JpdGUzMigweDAwODAwMDAwLCBicmlkZ2UtPmJhc2UgKyBMU0kzX0NUTCk7CisJaW93cml0ZTMyKDB4MDA4MDAwMDAsIGJyaWRnZS0+YmFzZSArIExTSTRfQ1RMKTsKKwlpb3dyaXRlMzIoMHgwMDgwMDAwMCwgYnJpZGdlLT5iYXNlICsgTFNJNV9DVEwpOworCWlvd3JpdGUzMigweDAwODAwMDAwLCBicmlkZ2UtPmJhc2UgKyBMU0k2X0NUTCk7CisJaW93cml0ZTMyKDB4MDA4MDAwMDAsIGJyaWRnZS0+YmFzZSArIExTSTdfQ1RMKTsKKwlpb3dyaXRlMzIoMHgwMEYwMDAwMCwgYnJpZGdlLT5iYXNlICsgVlNJMF9DVEwpOworCWlvd3JpdGUzMigweDAwRjAwMDAwLCBicmlkZ2UtPmJhc2UgKyBWU0kxX0NUTCk7CisJaW93cml0ZTMyKDB4MDBGMDAwMDAsIGJyaWRnZS0+YmFzZSArIFZTSTJfQ1RMKTsKKwlpb3dyaXRlMzIoMHgwMEYwMDAwMCwgYnJpZGdlLT5iYXNlICsgVlNJM19DVEwpOworCWlvd3JpdGUzMigweDAwRjAwMDAwLCBicmlkZ2UtPmJhc2UgKyBWU0k0X0NUTCk7CisJaW93cml0ZTMyKDB4MDBGMDAwMDAsIGJyaWRnZS0+YmFzZSArIFZTSTVfQ1RMKTsKKwlpb3dyaXRlMzIoMHgwMEYwMDAwMCwgYnJpZGdlLT5iYXNlICsgVlNJNl9DVEwpOworCWlvd3JpdGUzMigweDAwRjAwMDAwLCBicmlkZ2UtPmJhc2UgKyBWU0k3X0NUTCk7CiAKIAl2bWVfdW5yZWdpc3Rlcl9icmlkZ2UoY2E5MWN4NDJfYnJpZGdlKTsKLSNpZiAwCi0JY2E5MWN4NDJfY3Jjc3JfZXhpdChwZGV2KTsKLSNlbmRpZgorCisJY2E5MWN4NDJfY3Jjc3JfZXhpdChjYTkxY3g0Ml9icmlkZ2UsIHBkZXYpOworCiAJLyogcmVzb3VyY2VzIGFyZSBzdG9yZWQgaW4gbGluayBsaXN0ICovCiAJbGlzdF9mb3JfZWFjaChwb3MsICYoY2E5MWN4NDJfYnJpZGdlLT5sbV9yZXNvdXJjZXMpKSB7CiAJCWxtID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCB2bWVfbG1fcmVzb3VyY2UsIGxpc3QpOwpAQCAtMTI4Myw5ICsxNzk4LDkgQEAKIAkJa2ZyZWUobWFzdGVyX2ltYWdlKTsKIAl9CiAKLQljYTkxY3g0Ml9pcnFfZXhpdChwZGV2KTsKKwljYTkxY3g0Ml9pcnFfZXhpdChicmlkZ2UsIHBkZXYpOwogCi0JaW91bm1hcChjYTkxY3g0Ml9icmlkZ2UtPmJhc2UpOworCWlvdW5tYXAoYnJpZGdlLT5iYXNlKTsKIAogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAKQEAgLTEyOTksNTg4ICsxODE0LDExIEBACiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZjYTkxY3g0Ml9kcml2ZXIpOwogfQogCitNT0RVTEVfUEFSTV9ERVNDKGdlb2lkLCAiT3ZlcnJpZGUgZ2VvZ3JhcGhpY2FsIGFkZHJlc3NpbmciKTsKK21vZHVsZV9wYXJhbShnZW9pZCwgaW50LCAwKTsKKwogTU9EVUxFX0RFU0NSSVBUSU9OKCJWTUUgZHJpdmVyIGZvciB0aGUgVHVuZHJhIFVuaXZlcnNlIElJIFZNRSBicmlkZ2UiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbW9kdWxlX2luaXQoY2E5MWN4NDJfaW5pdCk7CiBtb2R1bGVfZXhpdChjYTkxY3g0Ml9leGl0KTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTVEFHSU5HCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIDAKLSNkZWZpbmUJU1dJWlpMRShYKSAoICgoWCAmIDB4RkYwMDAwMDApID4+IDI0KSB8ICgoWCAmIDB4MDBGRjAwMDApID4+ICA4KSB8ICgoWCAmIDB4MDAwMEZGMDApIDw8ICA4KSB8ICgoWCAmIDB4MDAwMDAwRkYpIDw8IDI0KSkKLQotaW50IGNhOTFjeDQyX21hc3Rlcl9ybXcodm1lUm13Q2ZnX3QgKnZtZVJtdykKLXsKLQlpbnQgdGVtcF9jdGwgPSAwOwotCWludCB0ZW1wQlMgPSAwOwotCWludCB0ZW1wQkQgPSAwOwotCWludCB0ZW1wVE8gPSAwOwotCWludCB2bWVCUyA9IDA7Ci0JaW50IHZtZUJEID0gMDsKLQlpbnQgKnJtd19wY2lfZGF0YV9wdHIgPSBOVUxMOwotCWludCAqdmFEYXRhUHRyID0gTlVMTDsKLQlpbnQgaTsKLQl2bWVPdXRXaW5kb3dDZmdfdCB2bWVPdXQ7Ci0JaWYgKHZtZVJtdy0+bWF4QXR0ZW1wdHMgPCAxKSB7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAodm1lUm13LT50YXJnZXRBZGRyVSkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JLyogRmluZCB0aGUgUENJIGFkZHJlc3MgdGhhdCBtYXBzIHRvIHRoZSBkZXNpcmVkIFZNRSBhZGRyZXNzICovCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQl0ZW1wX2N0bCA9IGlvcmVhZDMyKGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArCi0JCQlDQTkxQ1g0Ml9MU0lfQ1RMW2ldKTsKLQkJaWYgKCh0ZW1wX2N0bCAmIDB4ODAwMDAwMDApID09IDApIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCW1lbXNldCgmdm1lT3V0LCAwLCBzaXplb2Yodm1lT3V0KSk7Ci0JCXZtZU91dC53aW5kb3dOYnIgPSBpOwotCQljYTkxY3g0Ml9nZXRfb3V0X2JvdW5kKCZ2bWVPdXQpOwotCQlpZiAodm1lT3V0LmFkZHJTcGFjZSAhPSB2bWVSbXctPmFkZHJTcGFjZSkgewotCQkJY29udGludWU7Ci0JCX0KLQkJdGVtcEJTID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfTFNJX0JTW2ldKTsKLQkJdGVtcEJEID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfTFNJX0JEW2ldKTsKLQkJdGVtcFRPID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfTFNJX1RPW2ldKTsKLQkJdm1lQlMgPSB0ZW1wQlMgKyB0ZW1wVE87Ci0JCXZtZUJEID0gdGVtcEJEICsgdGVtcFRPOwotCQlpZiAoKHZtZVJtdy0+dGFyZ2V0QWRkciA+PSB2bWVCUykgJiYKLQkJICAgICh2bWVSbXctPnRhcmdldEFkZHIgPCB2bWVCRCkpIHsKLQkJCXJtd19wY2lfZGF0YV9wdHIgPQotCQkJICAgIChpbnQgKikodGVtcEJTICsgKHZtZVJtdy0+dGFyZ2V0QWRkciAtIHZtZUJTKSk7Ci0JCQl2YURhdGFQdHIgPQotCQkJICAgIChpbnQgKikob3V0X2ltYWdlX3ZhW2ldICsKLQkJCQkgICAgKHZtZVJtdy0+dGFyZ2V0QWRkciAtIHZtZUJTKSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qIElmIG5vIHdpbmRvdyAtIGZhaWwuICovCi0JaWYgKHJtd19wY2lfZGF0YV9wdHIgPT0gTlVMTCkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JLyogU2V0dXAgdGhlIFJNVyByZWdpc3RlcnMuICovCi0JaW93cml0ZTMyKDAsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIFNDWUNfQ1RMKTsKLQlpb3dyaXRlMzIoU1dJWlpMRSh2bWVSbXctPmVuYWJsZU1hc2spLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBTQ1lDX0VOKTsKLQlpb3dyaXRlMzIoU1dJWlpMRSh2bWVSbXctPmNvbXBhcmVEYXRhKSwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsKLQkJU0NZQ19DTVApOwotCWlvd3JpdGUzMihTV0laWkxFKHZtZVJtdy0+c3dhcERhdGEpLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBTQ1lDX1NXUCk7Ci0JaW93cml0ZTMyKChpbnQpcm13X3BjaV9kYXRhX3B0ciwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgU0NZQ19BRERSKTsKLQlpb3dyaXRlMzIoMSwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgU0NZQ19DVEwpOwotCi0JLyogUnVuIHRoZSBSTVcgY3ljbGUgdW50aWwgZWl0aGVyIHN1Y2Nlc3Mgb3IgbWF4IGF0dGVtcHRzLiAqLwotCXZtZVJtdy0+bnVtQXR0ZW1wdHMgPSAxOwotCXdoaWxlICh2bWVSbXctPm51bUF0dGVtcHRzIDw9IHZtZVJtdy0+bWF4QXR0ZW1wdHMpIHsKLQotCQlpZiAoKGlvcmVhZDMyKHZhRGF0YVB0cikgJiB2bWVSbXctPmVuYWJsZU1hc2spID09Ci0JCSAgICAodm1lUm13LT5zd2FwRGF0YSAmIHZtZVJtdy0+ZW5hYmxlTWFzaykpIHsKLQotCQkJaW93cml0ZTMyKDAsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIFNDWUNfQ1RMKTsKLQkJCWJyZWFrOwotCi0JCX0KLQkJdm1lUm13LT5udW1BdHRlbXB0cysrOwotCX0KLQotCS8qIElmIG5vIHN1Y2Nlc3MsIHNldCBudW0gQXR0ZW1wdHMgdG8gYmUgZ3JlYXRlciB0aGFuIG1heCBhdHRlbXB0cyAqLwotCWlmICh2bWVSbXctPm51bUF0dGVtcHRzID4gdm1lUm13LT5tYXhBdHRlbXB0cykgewotCQl2bWVSbXctPm51bUF0dGVtcHRzID0gdm1lUm13LT5tYXhBdHRlbXB0cyArIDE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB1bmlTZXR1cERjdGxSZWcodm1lRG1hUGFja2V0X3QgKiB2bWVEbWEsIGludCAqZGN0bHJlZ3JldHVybikKLXsKLQl1bnNpZ25lZCBpbnQgZGN0bHJlZyA9IDB4ODA7Ci0Jc3RydWN0IHZtZUF0dHIgKnZtZUF0dHI7Ci0KLQlpZiAodm1lRG1hLT5zcmNCdXMgPT0gVk1FX0RNQV9WTUUpIHsKLQkJZGN0bHJlZyA9IDA7Ci0JCXZtZUF0dHIgPSAmdm1lRG1hLT5zcmNWbWVBdHRyOwotCX0gZWxzZSB7Ci0JCWRjdGxyZWcgPSAweDgwMDAwMDAwOwotCQl2bWVBdHRyID0gJnZtZURtYS0+ZHN0Vm1lQXR0cjsKLQl9Ci0KLQlzd2l0Y2ggKHZtZUF0dHItPm1heERhdGFXaWR0aCkgewotCWNhc2UgVk1FX0Q4OgotCQlicmVhazsKLQljYXNlIFZNRV9EMTY6Ci0JCWRjdGxyZWcgfD0gMHgwMDQwMDAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBWTUVfRDMyOgotCQlkY3RscmVnIHw9IDB4MDA4MDAwMDA7Ci0JCWJyZWFrOwotCWNhc2UgVk1FX0Q2NDoKLQkJZGN0bHJlZyB8PSAweDAwQzAwMDAwOwotCQlicmVhazsKLQl9Ci0KLQlzd2l0Y2ggKHZtZUF0dHItPmFkZHJTcGFjZSkgewotCWNhc2UgVk1FX0ExNjoKLQkJYnJlYWs7Ci0JY2FzZSBWTUVfQTI0OgotCQlkY3RscmVnIHw9IDB4MDAwMTAwMDA7Ci0JCWJyZWFrOwotCWNhc2UgVk1FX0EzMjoKLQkJZGN0bHJlZyB8PSAweDAwMDIwMDAwOwotCQlicmVhazsKLQljYXNlIFZNRV9VU0VSMToKLQkJZGN0bHJlZyB8PSAweDAwMDYwMDAwOwotCQlicmVhazsKLQljYXNlIFZNRV9VU0VSMjoKLQkJZGN0bHJlZyB8PSAweDAwMDcwMDAwOwotCQlicmVhazsKLQotCWNhc2UgVk1FX0E2NDoJCS8qIG5vdCBzdXBwb3J0ZWQgaW4gVW5pdmVyc2UgRE1BICovCi0JY2FzZSBWTUVfQ1JDU1I6Ci0JY2FzZSBWTUVfVVNFUjM6Ci0JY2FzZSBWTUVfVVNFUjQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0JaWYgKHZtZUF0dHItPnVzZXJBY2Nlc3NUeXBlID09IFZNRV9QUk9HKSB7Ci0JCWRjdGxyZWcgfD0gMHgwMDAwNDAwMDsKLQl9Ci0JaWYgKHZtZUF0dHItPmRhdGFBY2Nlc3NUeXBlID09IFZNRV9TVVBFUikgewotCQlkY3RscmVnIHw9IDB4MDAwMDEwMDA7Ci0JfQotCWlmICh2bWVBdHRyLT54ZmVyUHJvdG9jb2wgIT0gVk1FX1NDVCkgewotCQlkY3RscmVnIHw9IDB4MDAwMDAxMDA7Ci0JfQotCSpkY3RscmVncmV0dXJuID0gZGN0bHJlZzsKLQlyZXR1cm4gMDsKLX0KLQotdW5zaWduZWQgaW50Ci1jYTkxY3g0Ml9zdGFydF9kbWEoaW50IGNoYW5uZWwsIHVuc2lnbmVkIGludCBkZ2NzcmVnLCBURE1BX0NtZF9QYWNrZXQgKnZtZUxMKQotewotCXVuc2lnbmVkIGludCB2YWw7Ci0KLQkvKiBTZXR1cCByZWdpc3RlcnMgYXMgbmVlZGVkIGZvciBkaXJlY3Qgb3IgY2hhaW5lZC4gKi8KLQlpZiAoZGdjc3JlZyAmIDB4ODAwMDAwMCkgewotCQlpb3dyaXRlMzIoMCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgRFRCQyk7Ci0JCWlvd3JpdGUzMigodW5zaWduZWQgaW50KXZtZUxMLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBEQ1BQKTsKLQl9IGVsc2UgewotI2lmCTAKLQkJcHJpbnRrKEtFUk5fRVJSICJTdGFydGluZzogREdDUyA9ICUwOHhcbiIsIGRnY3NyZWcpOwotCQlwcmludGsoS0VSTl9FUlIgIlN0YXJ0aW5nOiBEVkEgID0gJTA4eFxuIiwKLQkJCWlvcmVhZDMyKCZ2bWVMTC0+ZHZhKSk7Ci0JCXByaW50ayhLRVJOX0VSUiAiU3RhcnRpbmc6IERMViAgPSAlMDh4XG4iLAotCQkJaW9yZWFkMzIoJnZtZUxMLT5kbHYpKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJTdGFydGluZzogRFRCQyA9ICUwOHhcbiIsCi0JCQlpb3JlYWQzMigmdm1lTEwtPmR0YmMpKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJTdGFydGluZzogRENUTCA9ICUwOHhcbiIsCi0JCQlpb3JlYWQzMigmdm1lTEwtPmRjdGwpKTsKLSNlbmRpZgotCQkvKiBXcml0ZSByZWdpc3RlcnMgKi8KLQkJaW93cml0ZTMyKGlvcmVhZDMyKCZ2bWVMTC0+ZHZhKSwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgRFZBKTsKLQkJaW93cml0ZTMyKGlvcmVhZDMyKCZ2bWVMTC0+ZGx2KSwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgRExBKTsKLQkJaW93cml0ZTMyKGlvcmVhZDMyKCZ2bWVMTC0+ZHRiYyksIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIERUQkMpOwotCQlpb3dyaXRlMzIoaW9yZWFkMzIoJnZtZUxMLT5kY3RsKSwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgRENUTCk7Ci0JCWlvd3JpdGUzMigwLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBEQ1BQKTsKLQl9Ci0KLQkvKiBTdGFydCB0aGUgb3BlcmF0aW9uICovCi0JaW93cml0ZTMyKGRnY3NyZWcsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIERHQ1MpOwotCXZhbCA9IGdldF90YmwoKTsKLQlpb3dyaXRlMzIoZGdjc3JlZyB8IDB4ODAwMDAwMEYsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIERHQ1MpOwotCXJldHVybiB2YWw7Ci19Ci0KLVRETUFfQ21kX1BhY2tldCAqY2E5MWN4NDJfc2V0dXBfZG1hKHZtZURtYVBhY2tldF90ICogdm1lRG1hKQotewotCXZtZURtYVBhY2tldF90ICp2bWVDdXI7Ci0JaW50IG1heFBlclBhZ2U7Ci0JaW50IGN1cnJlbnRMTGNvdW50OwotCVRETUFfQ21kX1BhY2tldCAqc3RhcnRMTDsKLQlURE1BX0NtZF9QYWNrZXQgKmN1cnJlbnRMTDsKLQlURE1BX0NtZF9QYWNrZXQgKm5leHRMTDsKLQl1bnNpZ25lZCBpbnQgZGN0bHJlZyA9IDA7Ci0KLQltYXhQZXJQYWdlID0gUEFHRVNJWkUgLyBzaXplb2YoVERNQV9DbWRfUGFja2V0KSAtIDE7Ci0Jc3RhcnRMTCA9IChURE1BX0NtZF9QYWNrZXQgKikgX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCAwKTsKLQlpZiAoc3RhcnRMTCA9PSAwKSB7Ci0JCXJldHVybiBzdGFydExMOwotCX0KLQkvKiBGaXJzdCBhbGxvY2F0ZSBwYWdlcyBmb3IgZGVzY3JpcHRvcnMgYW5kIGNyZWF0ZSBsaW5rZWQgbGlzdCAqLwotCXZtZUN1ciA9IHZtZURtYTsKLQljdXJyZW50TEwgPSBzdGFydExMOwotCWN1cnJlbnRMTGNvdW50ID0gMDsKLQl3aGlsZSAodm1lQ3VyICE9IDApIHsKLQkJaWYgKHZtZUN1ci0+cE5leHRQYWNrZXQgIT0gMCkgewotCQkJY3VycmVudExMLT5kY3BwID0gKHVuc2lnbmVkIGludCkoY3VycmVudExMICsgMSk7Ci0JCQljdXJyZW50TExjb3VudCsrOwotCQkJaWYgKGN1cnJlbnRMTGNvdW50ID49IG1heFBlclBhZ2UpIHsKLQkJCQljdXJyZW50TEwtPmRjcHAgPQotCQkJCSAgICBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIDApOwotCQkJCWN1cnJlbnRMTGNvdW50ID0gMDsKLQkJCX0KLQkJCWN1cnJlbnRMTCA9IChURE1BX0NtZF9QYWNrZXQgKikgY3VycmVudExMLT5kY3BwOwotCQl9IGVsc2UgewotCQkJY3VycmVudExMLT5kY3BwID0gKHVuc2lnbmVkIGludCkwOwotCQl9Ci0JCXZtZUN1ciA9IHZtZUN1ci0+cE5leHRQYWNrZXQ7Ci0JfQotCi0JLyogTmV4dCBmaWxsIGluIGluZm9ybWF0aW9uIGZvciBlYWNoIGRlc2NyaXB0b3IgKi8KLQl2bWVDdXIgPSB2bWVEbWE7Ci0JY3VycmVudExMID0gc3RhcnRMTDsKLQl3aGlsZSAodm1lQ3VyICE9IDApIHsKLQkJaWYgKHZtZUN1ci0+c3JjQnVzID09IFZNRV9ETUFfVk1FKSB7Ci0JCQlpb3dyaXRlMzIodm1lQ3VyLT5zcmNBZGRyLCAmY3VycmVudExMLT5kdmEpOwotCQkJaW93cml0ZTMyKHZtZUN1ci0+ZHN0QWRkciwgJmN1cnJlbnRMTC0+ZGx2KTsKLQkJfSBlbHNlIHsKLQkJCWlvd3JpdGUzMih2bWVDdXItPnNyY0FkZHIsICZjdXJyZW50TEwtPmRsdik7Ci0JCQlpb3dyaXRlMzIodm1lQ3VyLT5kc3RBZGRyLCAmY3VycmVudExMLT5kdmEpOwotCQl9Ci0JCXVuaVNldHVwRGN0bFJlZyh2bWVDdXIsICZkY3RscmVnKTsKLQkJaW93cml0ZTMyKGRjdGxyZWcsICZjdXJyZW50TEwtPmRjdGwpOwotCQlpb3dyaXRlMzIodm1lQ3VyLT5ieXRlQ291bnQsICZjdXJyZW50TEwtPmR0YmMpOwotCi0JCWN1cnJlbnRMTCA9IChURE1BX0NtZF9QYWNrZXQgKikgY3VycmVudExMLT5kY3BwOwotCQl2bWVDdXIgPSB2bWVDdXItPnBOZXh0UGFja2V0OwotCX0KLQotCS8qIENvbnZlcnQgTGlua3MgdG8gUENJIGFkZHJlc3Nlcy4gKi8KLQljdXJyZW50TEwgPSBzdGFydExMOwotCXdoaWxlIChjdXJyZW50TEwgIT0gMCkgewotCQluZXh0TEwgPSAoVERNQV9DbWRfUGFja2V0ICopIGN1cnJlbnRMTC0+ZGNwcDsKLQkJaWYgKG5leHRMTCA9PSAwKSB7Ci0JCQlpb3dyaXRlMzIoMSwgJmN1cnJlbnRMTC0+ZGNwcCk7Ci0JCX0gZWxzZSB7Ci0JCQlpb3dyaXRlMzIoKHVuc2lnbmVkIGludCl2aXJ0X3RvX2J1cyhuZXh0TEwpLAotCQkJICAgICAgICZjdXJyZW50TEwtPmRjcHApOwotCQl9Ci0JCWN1cnJlbnRMTCA9IG5leHRMTDsKLQl9Ci0KLQkvKiBSZXR1cm4gcG9pbnRlciB0byBkZXNjcmlwdG9ycyBsaXN0ICovCi0JcmV0dXJuIHN0YXJ0TEw7Ci19Ci0KLWludCBjYTkxY3g0Ml9mcmVlX2RtYShURE1BX0NtZF9QYWNrZXQgKnN0YXJ0TEwpCi17Ci0JVERNQV9DbWRfUGFja2V0ICpjdXJyZW50TEw7Ci0JVERNQV9DbWRfUGFja2V0ICpwcmV2TEw7Ci0JVERNQV9DbWRfUGFja2V0ICpuZXh0TEw7Ci0JdW5zaWduZWQgaW50IGRjcHByZWc7Ci0KLQkvKiBDb252ZXJ0IExpbmtzIHRvIHZpcnR1YWwgYWRkcmVzc2VzLiAqLwotCWN1cnJlbnRMTCA9IHN0YXJ0TEw7Ci0Jd2hpbGUgKGN1cnJlbnRMTCAhPSAwKSB7Ci0JCWRjcHByZWcgPSBpb3JlYWQzMigmY3VycmVudExMLT5kY3BwKTsKLQkJZGNwcHJlZyAmPSB+NjsKLQkJaWYgKGRjcHByZWcgJiAxKSB7Ci0JCQljdXJyZW50TEwtPmRjcHAgPSAwOwotCQl9IGVsc2UgewotCQkJY3VycmVudExMLT5kY3BwID0gKHVuc2lnbmVkIGludClidXNfdG9fdmlydChkY3BwcmVnKTsKLQkJfQotCQljdXJyZW50TEwgPSAoVERNQV9DbWRfUGFja2V0ICopIGN1cnJlbnRMTC0+ZGNwcDsKLQl9Ci0KLQkvKiBGcmVlIGFsbCBwYWdlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGRlc2NyaXB0b3JzLiAqLwotCWN1cnJlbnRMTCA9IHN0YXJ0TEw7Ci0JcHJldkxMID0gY3VycmVudExMOwotCXdoaWxlIChjdXJyZW50TEwgIT0gMCkgewotCQluZXh0TEwgPSAoVERNQV9DbWRfUGFja2V0ICopIGN1cnJlbnRMTC0+ZGNwcDsKLQkJaWYgKGN1cnJlbnRMTCArIDEgIT0gbmV4dExMKSB7Ci0JCQlmcmVlX3BhZ2VzKChpbnQpcHJldkxMLCAwKTsKLQkJCXByZXZMTCA9IG5leHRMTDsKLQkJfQotCQljdXJyZW50TEwgPSBuZXh0TEw7Ci0JfQotCi0JLyogUmV0dXJuIHBvaW50ZXIgdG8gZGVzY3JpcHRvcnMgbGlzdCAqLwotCXJldHVybiAwOwotfQotCi1pbnQgY2E5MWN4NDJfZG9fZG1hKHZtZURtYVBhY2tldF90ICp2bWVEbWEpCi17Ci0JdW5zaWduZWQgaW50IGRnY3NyZWcgPSAwOwotCXVuc2lnbmVkIGludCBkY3RscmVnID0gMDsKLQlpbnQgdmFsOwotCWludCBjaGFubmVsLCB4OwotCXZtZURtYVBhY2tldF90ICpjdXJEbWE7Ci0JVERNQV9DbWRfUGFja2V0ICpkbWFMTDsKLQotCS8qIFNhbml0eSBjaGVjayB0aGUgVk1FIGNoYWluLiAqLwotCWNoYW5uZWwgPSB2bWVEbWEtPmNoYW5uZWxfbnVtYmVyOwotCWlmIChjaGFubmVsID4gMCkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JY3VyRG1hID0gdm1lRG1hOwotCXdoaWxlIChjdXJEbWEgIT0gMCkgewotCQlpZiAoY3VyRG1hLT5ieXRlQ291bnQgPT0gMCkgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJaWYgKGN1ckRtYS0+Ynl0ZUNvdW50ID49IDB4MTAwMDAwMCkgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJaWYgKChjdXJEbWEtPnNyY0FkZHIgJiA3KSAhPSAoY3VyRG1hLT5kc3RBZGRyICYgNykpIHsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXN3aXRjaCAoY3VyRG1hLT5zcmNCdXMpIHsKLQkJY2FzZSBWTUVfRE1BX1BDSToKLQkJCWlmIChjdXJEbWEtPmRzdEJ1cyAhPSBWTUVfRE1BX1ZNRSkgewotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgVk1FX0RNQV9WTUU6Ci0JCQlpZiAoY3VyRG1hLT5kc3RCdXMgIT0gVk1FX0RNQV9QQ0kpIHsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAodW5pU2V0dXBEY3RsUmVnKGN1ckRtYSwgJmRjdGxyZWcpIDwgMCkgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQljdXJEbWEgPSBjdXJEbWEtPnBOZXh0UGFja2V0OwotCQlpZiAoY3VyRG1hID09IHZtZURtYSkgewkvKiBFbmRsZXNzIExvb3AhICovCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0KLQotCS8qIGNhbGN1bGF0ZSBjb250cm9sIHJlZ2lzdGVyICovCi0JaWYgKHZtZURtYS0+cE5leHRQYWNrZXQgIT0gMCkgewotCQlkZ2NzcmVnID0gMHg4MDAwMDAwOwotCX0gZWxzZSB7Ci0JCWRnY3NyZWcgPSAwOwotCX0KLQotCWZvciAoeCA9IDA7IHggPCA4OyB4KyspIHsJLyogdm1lIGJsb2NrIHNpemUgKi8KLQkJaWYgKCgyNTYgPDwgeCkgPj0gdm1lRG1hLT5tYXhWbWVCbG9ja1NpemUpIHsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmICh4ID09IDgpCi0JCXggPSA3OwotCWRnY3NyZWcgfD0gKHggPDwgMjApOwotCi0JaWYgKHZtZURtYS0+dm1lQmFja09mZlRpbWVyKSB7Ci0JCWZvciAoeCA9IDE7IHggPCA4OyB4KyspIHsJLyogdm1lIHRpbWVyICovCi0JCQlpZiAoKDE2IDw8ICh4IC0gMSkpID49IHZtZURtYS0+dm1lQmFja09mZlRpbWVyKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKHggPT0gOCkKLQkJCXggPSA3OwotCQlkZ2NzcmVnIHw9ICh4IDw8IDE2KTsKLQl9Ci0JLypgIFNldHVwIHRoZSBkbWEgY2hhaW4gKi8KLQlkbWFMTCA9IGNhOTFjeDQyX3NldHVwX2RtYSh2bWVEbWEpOwotCi0JLyogU3RhcnQgdGhlIERNQSAqLwotCWlmIChkZ2NzcmVnICYgMHg4MDAwMDAwKSB7Ci0JCXZtZURtYS0+dm1lRG1hU3RhcnRUaWNrID0KLQkJICAgIGNhOTFjeDQyX3N0YXJ0X2RtYShjaGFubmVsLCBkZ2NzcmVnLAotCQkJCSAgKFRETUFfQ21kX1BhY2tldCAqKSB2aXJ0X3RvX3BoeXMoZG1hTEwpKTsKLQl9IGVsc2UgewotCQl2bWVEbWEtPnZtZURtYVN0YXJ0VGljayA9Ci0JCSAgICBjYTkxY3g0Ml9zdGFydF9kbWEoY2hhbm5lbCwgZGdjc3JlZywgZG1hTEwpOwotCX0KLQotCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkbWFfcXVldWUsCi0JCWlvcmVhZDMyKGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIERHQ1MpICYgMHg4MDApOwotCi0JdmFsID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgREdDUyk7Ci0JaW93cml0ZTMyKHZhbCB8IDB4RjAwLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBER0NTKTsKLQotCXZtZURtYS0+dm1lRG1hU3RhdHVzID0gMDsKLQotCWlmICghKHZhbCAmIDB4MDAwMDA4MDApKSB7Ci0JCXZtZURtYS0+dm1lRG1hU3RhdHVzID0gdmFsICYgMHg3MDA7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2E5MWMwNDI6IERNQSBFcnJvciBpbiBjYTkxY3g0Ml9ETUFfaXJxaGFuZGxlciIKLQkJCSIgREdDUz0lMDhYXG4iLCB2YWwpOwotCQl2YWwgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBEQ1BQKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJjYTkxYzA0MjogRENQUD0lMDhYXG4iLCB2YWwpOwotCQl2YWwgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBEQ1RMKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJjYTkxYzA0MjogRENUTD0lMDhYXG4iLCB2YWwpOwotCQl2YWwgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBEVEJDKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJjYTkxYzA0MjogRFRCQz0lMDhYXG4iLCB2YWwpOwotCQl2YWwgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBETEEpOwotCQlwcmludGsoS0VSTl9FUlIgImNhOTFjMDQyOiBETEE9JTA4WFxuIiwgdmFsKTsKLQkJdmFsID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgRFZBKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJjYTkxYzA0MjogRFZBPSUwOFhcbiIsIHZhbCk7Ci0KLQl9Ci0JLyogRnJlZSB0aGUgZG1hIGNoYWluICovCi0JY2E5MWN4NDJfZnJlZV9kbWEoZG1hTEwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBjYTkxY3g0Ml9sbV9zZXQodm1lTG1DZmdfdCAqdm1lTG0pCi17Ci0JaW50IHRlbXBfY3RsID0gMDsKLQotCWlmICh2bWVMbS0+YWRkclUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3dpdGNoICh2bWVMbS0+YWRkclNwYWNlKSB7Ci0JY2FzZSBWTUVfQTY0OgotCWNhc2UgVk1FX1VTRVIzOgotCWNhc2UgVk1FX1VTRVI0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQljYXNlIFZNRV9BMTY6Ci0JCXRlbXBfY3RsIHw9IDB4MDAwMDA7Ci0JCWJyZWFrOwotCWNhc2UgVk1FX0EyNDoKLQkJdGVtcF9jdGwgfD0gMHgxMDAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBWTUVfQTMyOgotCQl0ZW1wX2N0bCB8PSAweDIwMDAwOwotCQlicmVhazsKLQljYXNlIFZNRV9DUkNTUjoKLQkJdGVtcF9jdGwgfD0gMHg1MDAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBWTUVfVVNFUjE6Ci0JCXRlbXBfY3RsIHw9IDB4NjAwMDA7Ci0JCWJyZWFrOwotCWNhc2UgVk1FX1VTRVIyOgotCQl0ZW1wX2N0bCB8PSAweDcwMDAwOwotCQlicmVhazsKLQl9Ci0KLQkvKiBEaXNhYmxlIHdoaWxlIHdlIGFyZSBtdWNraW5nIGFyb3VuZCAqLwotCWlvd3JpdGUzMigweDAwMDAwMDAwLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBMTV9DVEwpOwotCi0JaW93cml0ZTMyKHZtZUxtLT5hZGRyLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBMTV9CUyk7Ci0KLQkvKiBTZXR1cCBDVEwgcmVnaXN0ZXIuICovCi0JaWYgKHZtZUxtLT51c2VyQWNjZXNzVHlwZSAmIFZNRV9TVVBFUikKLQkJdGVtcF9jdGwgfD0gMHgwMDIwMDAwMDsKLQlpZiAodm1lTG0tPnVzZXJBY2Nlc3NUeXBlICYgVk1FX1VTRVIpCi0JCXRlbXBfY3RsIHw9IDB4MDAxMDAwMDA7Ci0JaWYgKHZtZUxtLT5kYXRhQWNjZXNzVHlwZSAmIFZNRV9QUk9HKQotCQl0ZW1wX2N0bCB8PSAweDAwODAwMDAwOwotCWlmICh2bWVMbS0+ZGF0YUFjY2Vzc1R5cGUgJiBWTUVfREFUQSkKLQkJdGVtcF9jdGwgfD0gMHgwMDQwMDAwMDsKLQotCi0JLyogV3JpdGUgY3RsIHJlZyBhbmQgZW5hYmxlICovCi0JaW93cml0ZTMyKDB4ODAwMDAwMDAgfCB0ZW1wX2N0bCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgTE1fQ1RMKTsKLQl0ZW1wX2N0bCA9IGlvcmVhZDMyKGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIExNX0NUTCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGNhOTFjeDQyX3dhaXRfbG0odm1lTG1DZmdfdCAqdm1lTG0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgdG1wOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmxtX2xvY2ssIGZsYWdzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsbV9sb2NrLCBmbGFncyk7Ci0JaWYgKHRtcCA9PSAwKSB7Ci0JCWlmICh2bWVMbS0+bG1XYWl0IDwgMTApCi0JCQl2bWVMbS0+bG1XYWl0ID0gMTA7Ci0JCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmbG1fcXVldWUsIHZtZUxtLT5sbVdhaXQpOwotCX0KLQlpb3dyaXRlMzIoMHgwMDAwMDAwMCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgTE1fQ1RMKTsKLQotCXJldHVybiAwOwotfQotCi0KLQotaW50IGNhOTFjeDQyX3NldF9hcmJpdGVyKHZtZUFyYml0ZXJDZmdfdCAqdm1lQXJiKQotewotCWludCB0ZW1wX2N0bCA9IDA7Ci0JaW50IHZidG8gPSAwOwotCi0JdGVtcF9jdGwgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBNSVNDX0NUTCk7Ci0JdGVtcF9jdGwgJj0gMHgwMEZGRkZGRjsKLQotCWlmICh2bWVBcmItPmdsb2JhbFRpbWVvdXRUaW1lciA9PSAweEZGRkZGRkZGKSB7Ci0JCXZidG8gPSA3OwotCX0gZWxzZSBpZiAodm1lQXJiLT5nbG9iYWxUaW1lb3V0VGltZXIgPiAxMDI0KSB7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0gZWxzZSBpZiAodm1lQXJiLT5nbG9iYWxUaW1lb3V0VGltZXIgPT0gMCkgewotCQl2YnRvID0gMDsKLQl9IGVsc2UgewotCQl2YnRvID0gMTsKLQkJd2hpbGUgKCgxNiAqICgxIDw8ICh2YnRvIC0gMSkpKSA8IHZtZUFyYi0+Z2xvYmFsVGltZW91dFRpbWVyKQotCQkJdmJ0byArPSAxOwotCX0KLQl0ZW1wX2N0bCB8PSAodmJ0byA8PCAyOCk7Ci0KLQlpZiAodm1lQXJiLT5hcmJpdGVyTW9kZSA9PSBWTUVfUFJJT1JJVFlfTU9ERSkKLQkJdGVtcF9jdGwgfD0gMSA8PCAyNjsKLQotCWlmICh2bWVBcmItPmFyYml0ZXJUaW1lb3V0RmxhZykKLQkJdGVtcF9jdGwgfD0gMiA8PCAyNDsKLQotCWlvd3JpdGUzMih0ZW1wX2N0bCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgTUlTQ19DVEwpOwotCXJldHVybiAwOwotfQotCi1pbnQgY2E5MWN4NDJfZ2V0X2FyYml0ZXIodm1lQXJiaXRlckNmZ190ICp2bWVBcmIpCi17Ci0JaW50IHRlbXBfY3RsID0gMDsKLQlpbnQgdmJ0byA9IDA7Ci0KLQl0ZW1wX2N0bCA9IGlvcmVhZDMyKGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIE1JU0NfQ1RMKTsKLQotCXZidG8gPSAodGVtcF9jdGwgPj4gMjgpICYgMHhGOwotCWlmICh2YnRvICE9IDApCi0JCXZtZUFyYi0+Z2xvYmFsVGltZW91dFRpbWVyID0gKDE2ICogKDEgPDwgKHZidG8gLSAxKSkpOwotCi0JaWYgKHRlbXBfY3RsICYgKDEgPDwgMjYpKQotCQl2bWVBcmItPmFyYml0ZXJNb2RlID0gVk1FX1BSSU9SSVRZX01PREU7Ci0JZWxzZQotCQl2bWVBcmItPmFyYml0ZXJNb2RlID0gVk1FX1JfUk9CSU5fTU9ERTsKLQotCWlmICh0ZW1wX2N0bCAmICgzIDw8IDI0KSkKLQkJdm1lQXJiLT5hcmJpdGVyVGltZW91dEZsYWcgPSAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBjYTkxY3g0Ml9zZXRfcmVxdWVzdG9yKHZtZVJlcXVlc3RlckNmZ190ICp2bWVSZXEpCi17Ci0JaW50IHRlbXBfY3RsID0gMDsKLQotCXRlbXBfY3RsID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgTUFTVF9DVEwpOwotCXRlbXBfY3RsICY9IDB4RkYwRkZGRkY7Ci0KLQlpZiAodm1lUmVxLT5yZWxlYXNlTW9kZSA9PSAxKQotCQl0ZW1wX2N0bCB8PSAoMSA8PCAyMCk7Ci0KLQlpZiAodm1lUmVxLT5mYWlyTW9kZSA9PSAxKQotCQl0ZW1wX2N0bCB8PSAoMSA8PCAyMSk7Ci0KLQl0ZW1wX2N0bCB8PSAodm1lUmVxLT5yZXF1ZXN0TGV2ZWwgPDwgMjIpOwotCi0JaW93cml0ZTMyKHRlbXBfY3RsLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBNQVNUX0NUTCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBjYTkxY3g0Ml9nZXRfcmVxdWVzdG9yKHZtZVJlcXVlc3RlckNmZ190ICp2bWVSZXEpCi17Ci0JaW50IHRlbXBfY3RsID0gMDsKLQotCXRlbXBfY3RsID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgTUFTVF9DVEwpOwotCi0JaWYgKHRlbXBfY3RsICYgKDEgPDwgMjApKQotCQl2bWVSZXEtPnJlbGVhc2VNb2RlID0gMTsKLQotCWlmICh0ZW1wX2N0bCAmICgxIDw8IDIxKSkKLQkJdm1lUmVxLT5mYWlyTW9kZSA9IDE7Ci0KLQl2bWVSZXEtPnJlcXVlc3RMZXZlbCA9ICh0ZW1wX2N0bCAmIDB4QzAwMDAwKSA+PiAyMjsKLQotCXJldHVybiAwOwotfQotCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV9jYTkxY3g0Mi5oIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV9jYTkxY3g0Mi5oCmluZGV4IDk1YTQyYzIuLmU3MmM2NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfY2E5MWN4NDIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX2NhOTFjeDQyLmgKQEAgLTcsOCArNyw4IEBACiAgKiBVcGRhdGVkIGJ5IEFqaXQgUHJlbQogICogQ29weXJpZ2h0IDIwMDQgTW90b3JvbGEgSW5jLgogICoKLSAqIEZ1cnRoZXIgdXBkYXRlZCBieSBNYXJ0eW4gV2VsY2ggPG1hcnR5bi53ZWxjaEBnZWZhbnVjLmNvbT4KLSAqIENvcHlyaWdodCAyMDA5IEdFIEZhbnVjIEludGVsbGlnZW50IFBsYXRmb3JtcyBFbWJlZGRlZCBTeXN0ZW1zLCBJbmMuCisgKiBGdXJ0aGVyIHVwZGF0ZWQgYnkgTWFydHluIFdlbGNoIDxtYXJ0eW4ud2VsY2hAZ2UuY29tPgorICogQ29weXJpZ2h0IDIwMDkgR0UgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIEVtYmVkZGVkIFN5c3RlbXMsIEluYy4KICAqCiAgKiBEZXJpdmVkIGZyb20gY2E5MWMwNDIuaCBieSBNaWNoYWVsIFd5cmljawogICoKQEAgLTM3LDExICszNywyNyBAQAogI2RlZmluZSBDQTkxQzE0Ml9NQVhfRE1BCQkxCS8qIE1heCBETUEgQ29udHJvbGxlcnMgKi8KICNkZWZpbmUgQ0E5MUMxNDJfTUFYX01BSUxCT1gJCTQJLyogTWF4IE1haWwgQm94IHJlZ2lzdGVycyAqLwogCisvKiBTdHJ1Y3R1cmUgdXNlZCB0byBob2xkIGRyaXZlciBzcGVjaWZpYyBpbmZvcm1hdGlvbiAqLworc3RydWN0IGNhOTFjeDQyX2RyaXZlciB7CisJdm9pZCAqYmFzZTsJLyogQmFzZSBBZGRyZXNzIG9mIGRldmljZSByZWdpc3RlcnMgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBkbWFfcXVldWU7CisJd2FpdF9xdWV1ZV9oZWFkX3QgaWFja19xdWV1ZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBtYm94X3F1ZXVlOworCXZvaWQgKCpsbV9jYWxsYmFja1s0XSkoaW50KTsJLyogQ2FsbGVkIGluIGludGVycnVwdCBoYW5kbGVyICovCisJdm9pZCAqY3Jjc3Jfa2VybmVsOworCWRtYV9hZGRyX3QgY3Jjc3JfYnVzOworCXN0cnVjdCBtdXRleCB2bWVfcm13OwkJLyogT25seSBvbmUgUk1XIGN5Y2xlIGF0IGEgdGltZSAqLworCXN0cnVjdCBtdXRleCB2bWVfaW50OwkJLyoKKwkJCQkJICogT25seSBvbmUgVk1FIGludGVycnVwdCBjYW4gYmUKKwkJCQkJICogZ2VuZXJhdGVkIGF0IGEgdGltZSwgcHJvdmlkZSBsb2NraW5nCisJCQkJCSAqLworfTsKKwogLyogU2VlIFBhZ2UgMi03NyBpbiB0aGUgVW5pdmVyc2UgVXNlciBNYW51YWwgKi8KIHN0cnVjdCBjYTkxY3g0Ml9kbWFfZGVzY3JpcHRvciB7CiAJdW5zaWduZWQgaW50IGRjdGw7ICAgICAgLyogRE1BIENvbnRyb2wgKi8KIAl1bnNpZ25lZCBpbnQgZHRiYzsgICAgICAvKiBUcmFuc2ZlciBCeXRlIENvdW50ICovCi0JdW5zaWduZWQgaW50IGRsdjsgICAgICAgLyogUENJIEFkZHJlc3MgKi8KKwl1bnNpZ25lZCBpbnQgZGxhOyAgICAgICAvKiBQQ0kgQWRkcmVzcyAqLwogCXVuc2lnbmVkIGludCByZXMxOyAgICAgIC8qIFJlc2VydmVkICovCiAJdW5zaWduZWQgaW50IGR2YTsgICAgICAgLyogVm1lIEFkZHJlc3MgKi8KIAl1bnNpZ25lZCBpbnQgcmVzMjsgICAgICAvKiBSZXNlcnZlZCAqLwpAQCAtMjM3LDMyICsyNTMsNiBAQAogI2RlZmluZSBWQ1NSX1NFVAkJMHgwRkY4CiAjZGVmaW5lIFZDU1JfQlMJCQkweDBGRkMKIAotLy8gRE1BIEdlbmVyYWwgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgREdDUyAoMHgyMjApCi0vLyAzMi0yNCB8fCAgR08gICB8IFNUT1BSIHwgSEFMVFIgfCAgIDAgICB8fCBDSEFJTiB8ICAgMCAgIHwgICAwICAgfCAgIDAgICB8fAotLy8gMjMtMTYgfHwgICAgICAgICAgICAgIFZPTiAgICAgICAgICAgICAgfHwgICAgICAgICAgICAgVk9GRiAgICAgICAgICAgICAgfHwKLS8vIDE1LTA4IHx8ICBBQ1QgIHwgU1RPUCAgfCBIQUxUICB8ICAgMCAgIHx8IERPTkUgIHwgTEVSUiAgfCBWRVJSICB8IFBfRVJSIHx8Ci0vLyAwNy0wMCB8fCAgIDAgICB8IElOVF9TIHwgSU5UX0ggfCAgIDAgICB8fCBJX0RORSB8IElfTEVSIHwgSV9WRVIgfCBJX1BFUiB8fAotCi0vLyBWT04gLSBMZW5ndGggUGVyIERNQSBWTUVCdXMgVHJhbnNmZXIKLS8vICAwMDAwID0gTm9uZQotLy8gIDAwMDEgPSAyNTYgQnl0ZXMKLS8vICAwMDEwID0gNTEyCi0vLyAgMDAxMSA9IDEwMjQKLS8vICAwMTAwID0gMjA0OAotLy8gIDAxMDEgPSA0MDk2Ci0vLyAgMDExMCA9IDgxOTIKLS8vICAwMTExID0gMTYzODQKLQotLy8gVk9GRiAtIHdhaXQgYmV0d2VlbiBETUEgdGVudXJlcwotLy8gIDAwMDAgPSAwICAgIHVzCi0vLyAgMDAwMSA9IDE2Ci0vLyAgMDAxMCA9IDMyCi0vLyAgMDAxMSA9IDY0Ci0vLyAgMDEwMCA9IDEyOAotLy8gIDAxMDEgPSAyNTYKLS8vICAwMTEwID0gNTEyCi0vLyAgMDExMSA9IDEwMjQKLQogLyoKICAqIFBDSSBDbGFzcyBSZWdpc3RlcgogICogb2Zmc2V0IDAwOApAQCAtMzI2LDYgKzMxNiwxNiBAQAogI2RlZmluZSBDQTkxQ1g0Ml9MU0lfQ1RMX1ZDVF9NQkxUCSgxPDw4KQogI2RlZmluZSBDQTkxQ1g0Ml9MU0lfQ1RMX0xBUwkJKDE8PDApCiAKKy8qCisgKiBTQ1lDX0NUTCBSZWdpc3RlcgorICogb2Zmc2V0IDE3OAorICovCisjZGVmaW5lIENBOTFDWDQyX1NDWUNfQ1RMX0xBU19QQ0lNRU0JMAorI2RlZmluZSBDQTkxQ1g0Ml9TQ1lDX0NUTF9MQVNfUENJSU8JKDE8PDIpCisKKyNkZWZpbmUgQ0E5MUNYNDJfU0NZQ19DVExfQ1lDX00JCSgzPDwwKQorI2RlZmluZSBDQTkxQ1g0Ml9TQ1lDX0NUTF9DWUNfUk1XCSgxPDwwKQorI2RlZmluZSBDQTkxQ1g0Ml9TQ1lDX0NUTF9DWUNfQURPSAkoMTw8MSkKIAogLyoKICAqIExNSVNDIFJlZ2lzdGVyCkBAIC0zNTUsNiArMzU1LDcxIEBACiAjZGVmaW5lIENBOTFDWDQyX0JNX1NMU0lfUkVTRVJWRUQgICAgICAgICAgIDB4M0YwRjAwMDAKIAogLyoKKyAqIERDVEwgUmVnaXN0ZXIKKyAqIG9mZnNldCAyMDAKKyAqLworI2RlZmluZSBDQTkxQ1g0Ml9EQ1RMX0wyVgkJKDE8PDMxKQorI2RlZmluZSBDQTkxQ1g0Ml9EQ1RMX1ZEV19NCQkoMzw8MjIpCisjZGVmaW5lIENBOTFDWDQyX0RDVExfVkRXX00JCSgzPDwyMikKKyNkZWZpbmUgQ0E5MUNYNDJfRENUTF9WRFdfRDgJCTAKKyNkZWZpbmUgQ0E5MUNYNDJfRENUTF9WRFdfRDE2CQkoMTw8MjIpCisjZGVmaW5lIENBOTFDWDQyX0RDVExfVkRXX0QzMgkJKDE8PDIzKQorI2RlZmluZSBDQTkxQ1g0Ml9EQ1RMX1ZEV19ENjQJCSgzPDwyMikKKworI2RlZmluZSBDQTkxQ1g0Ml9EQ1RMX1ZBU19NCQkoNzw8MTYpCisjZGVmaW5lIENBOTFDWDQyX0RDVExfVkFTX0ExNgkJMAorI2RlZmluZSBDQTkxQ1g0Ml9EQ1RMX1ZBU19BMjQJCSgxPDwxNikKKyNkZWZpbmUgQ0E5MUNYNDJfRENUTF9WQVNfQTMyCQkoMTw8MTcpCisjZGVmaW5lIENBOTFDWDQyX0RDVExfVkFTX1VTRVIxCQkoMzw8MTcpCisjZGVmaW5lIENBOTFDWDQyX0RDVExfVkFTX1VTRVIyCQkoNzw8MTYpCisKKyNkZWZpbmUgQ0E5MUNYNDJfRENUTF9QR01fTQkJKDE8PDE0KQorI2RlZmluZSBDQTkxQ1g0Ml9EQ1RMX1BHTV9EQVRBCQkwCisjZGVmaW5lIENBOTFDWDQyX0RDVExfUEdNX1BHTQkJKDE8PDE0KQorCisjZGVmaW5lIENBOTFDWDQyX0RDVExfU1VQRVJfTQkJKDE8PDEyKQorI2RlZmluZSBDQTkxQ1g0Ml9EQ1RMX1NVUEVSX05QUklWCTAKKyNkZWZpbmUgQ0E5MUNYNDJfRENUTF9TVVBFUl9TVVBSCSgxPDwxMikKKworI2RlZmluZSBDQTkxQ1g0Ml9EQ1RMX1ZDVF9NCQkoMTw8OCkKKyNkZWZpbmUgQ0E5MUNYNDJfRENUTF9WQ1RfQkxUCQkoMTw8OCkKKyNkZWZpbmUgQ0E5MUNYNDJfRENUTF9MRDY0RU4JCSgxPDw3KQorCisvKgorICogRENQUCBSZWdpc3RlcgorICogb2Zmc2V0IDIxOAorICovCisjZGVmaW5lIENBOTFDWDQyX0RDUFBfTQkJCTB4ZgorI2RlZmluZSBDQTkxQ1g0Ml9EQ1BQX05VTEwJCSgxPDwwKQorCisvKgorICogRE1BIEdlbmVyYWwgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKERHQ1MpCisgKiBvZmZzZXQgMjIwCisgKi8KKyNkZWZpbmUgQ0E5MUNYNDJfREdDU19HTwkJKDE8PDMxKQorI2RlZmluZSBDQTkxQ1g0Ml9ER0NTX1NUT1BfUkVRCQkoMTw8MzApCisjZGVmaW5lIENBOTFDWDQyX0RHQ1NfSEFMVF9SRVEJCSgxPDwyOSkKKyNkZWZpbmUgQ0E5MUNYNDJfREdDU19DSEFJTgkJKDE8PDI3KQorCisjZGVmaW5lIENBOTFDWDQyX0RHQ1NfVk9OX00JCSg3PDwyMCkKKworI2RlZmluZSBDQTkxQ1g0Ml9ER0NTX1ZPRkZfTQkJKDB4Zjw8MTYpCisKKyNkZWZpbmUgQ0E5MUNYNDJfREdDU19BQ1QJCSgxPDwxNSkKKyNkZWZpbmUgQ0E5MUNYNDJfREdDU19TVE9QCQkoMTw8MTQpCisjZGVmaW5lIENBOTFDWDQyX0RHQ1NfSEFMVAkJKDE8PDEzKQorI2RlZmluZSBDQTkxQ1g0Ml9ER0NTX0RPTkUJCSgxPDwxMSkKKyNkZWZpbmUgQ0E5MUNYNDJfREdDU19MRVJSCQkoMTw8MTApCisjZGVmaW5lIENBOTFDWDQyX0RHQ1NfVkVSUgkJKDE8PDkpCisjZGVmaW5lIENBOTFDWDQyX0RHQ1NfUEVSUgkJKDE8PDgpCisjZGVmaW5lIENBOTFDWDQyX0RHQ1NfSU5UX1NUT1AJCSgxPDw2KQorI2RlZmluZSBDQTkxQ1g0Ml9ER0NTX0lOVF9IQUxUCQkoMTw8NSkKKyNkZWZpbmUgQ0E5MUNYNDJfREdDU19JTlRfRE9ORQkJKDE8PDMpCisjZGVmaW5lIENBOTFDWDQyX0RHQ1NfSU5UX0xFUlIJCSgxPDwyKQorI2RlZmluZSBDQTkxQ1g0Ml9ER0NTX0lOVF9WRVJSCQkoMTw8MSkKKyNkZWZpbmUgQ0E5MUNYNDJfREdDU19JTlRfUEVSUgkJKDE8PDApCisKKy8qCiAgKiBQQ0kgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcgogICogb2Zmc2V0ICAzMDAKICAqLwpAQCAtNDc1LDYgKzU0MCwxOSBAQAogI2RlZmluZSBDQTkxQ1g0Ml9WU0lfQ1RMX0xBU19QQ0lfSU8JKDE8PDApCiAjZGVmaW5lIENBOTFDWDQyX1ZTSV9DVExfTEFTX1BDSV9DT05GCSgxPDwxKQogCisvKiBMTV9DVEwgUmVnaXN0ZXIKKyAqIG9mZnNldCAgRjY0CisgKi8KKyNkZWZpbmUgQ0E5MUNYNDJfTE1fQ1RMX0VOCQkoMTw8MzEpCisjZGVmaW5lIENBOTFDWDQyX0xNX0NUTF9QR00JCSgxPDwyMykKKyNkZWZpbmUgQ0E5MUNYNDJfTE1fQ1RMX0RBVEEJCSgxPDwyMikKKyNkZWZpbmUgQ0E5MUNYNDJfTE1fQ1RMX1NVUFIJCSgxPDwyMSkKKyNkZWZpbmUgQ0E5MUNYNDJfTE1fQ1RMX05QUklWCQkoMTw8MjApCisjZGVmaW5lIENBOTFDWDQyX0xNX0NUTF9BU19NCQkoNTw8MTYpCisjZGVmaW5lIENBOTFDWDQyX0xNX0NUTF9BU19BMTYJCTAKKyNkZWZpbmUgQ0E5MUNYNDJfTE1fQ1RMX0FTX0EyNAkJKDE8PDE2KQorI2RlZmluZSBDQTkxQ1g0Ml9MTV9DVExfQVNfQTMyCQkoMTw8MTcpCisKIC8qCiAgKiBWUkFJX0NUTCBSZWdpc3RlcgogICogb2Zmc2V0ICBGNzAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfdHNpMTQ4LmMgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX3RzaTE0OC5jCmluZGV4IDg5YTdkY2MuLmZhZjY1MmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX3RzaTE0OC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfdHNpMTQ4LmMKQEAgLTEsOCArMSw4IEBACiAvKgogICogU3VwcG9ydCBmb3IgdGhlIFR1bmRyYSBUU0kxNDggVk1FLVBDSSBCcmlkZ2UgQ2hpcAogICoKLSAqIEF1dGhvcjogTWFydHluIFdlbGNoIDxtYXJ0eW4ud2VsY2hAZ2VmYW51Yy5jb20+Ci0gKiBDb3B5cmlnaHQgMjAwOCBHRSBGYW51YyBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgRW1iZWRkZWQgU3lzdGVtcywgSW5jLgorICogQXV0aG9yOiBNYXJ0eW4gV2VsY2ggPG1hcnR5bi53ZWxjaEBnZS5jb20+CisgKiBDb3B5cmlnaHQgMjAwOCBHRSBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgRW1iZWRkZWQgU3lzdGVtcywgSW5jLgogICoKICAqIEJhc2VkIG9uIHdvcmsgYnkgVG9tIEFybWlzdGVhZCBhbmQgQWppdCBQcmVtCiAgKiBDb3B5cmlnaHQgMjAwNCBNb3Rvcm9sYSBJbmMuCkBAIC01OSwyOCArNTksMTQgQEAKIGludCB0c2kxNDhfZG1hX2xpc3RfZXhlYyhzdHJ1Y3Qgdm1lX2RtYV9saXN0ICopOwogaW50IHRzaTE0OF9kbWFfbGlzdF9lbXB0eShzdHJ1Y3Qgdm1lX2RtYV9saXN0ICopOwogaW50IHRzaTE0OF9nZW5lcmF0ZV9pcnEoaW50LCBpbnQpOwotaW50IHRzaTE0OF9zbG90X2dldCh2b2lkKTsKIAotLyogTW9kdWUgcGFyYW1ldGVyICovCi1pbnQgZXJyX2NoayA9IDA7Ci0KLS8qIFhYWCBUaGVzZSBzaG91bGQgYWxsIGJlIGluIGEgcGVyIGRldmljZSBzdHJ1Y3R1cmUgKi8KLXN0cnVjdCB2bWVfYnJpZGdlICp0c2kxNDhfYnJpZGdlOwotd2FpdF9xdWV1ZV9oZWFkX3QgZG1hX3F1ZXVlWzJdOwotd2FpdF9xdWV1ZV9oZWFkX3QgaWFja19xdWV1ZTsKLXZvaWQgKCpsbV9jYWxsYmFja1s0XSkoaW50KTsJLyogQ2FsbGVkIGluIGludGVycnVwdCBoYW5kbGVyLCBiZSBjYXJlZnVsISAqLwotdm9pZCAqY3Jjc3Jfa2VybmVsOwotZG1hX2FkZHJfdCBjcmNzcl9idXM7Ci1zdHJ1Y3Qgdm1lX21hc3Rlcl9yZXNvdXJjZSAqZmx1c2hfaW1hZ2U7Ci1zdHJ1Y3QgbXV0ZXggdm1lX3JtdzsJLyogT25seSBvbmUgUk1XIGN5Y2xlIGF0IGEgdGltZSAqLwotc3RydWN0IG11dGV4IHZtZV9pbnQ7CS8qCi0JCQkJICogT25seSBvbmUgVk1FIGludGVycnVwdCBjYW4gYmUKLQkJCQkgKiBnZW5lcmF0ZWQgYXQgYSB0aW1lLCBwcm92aWRlIGxvY2tpbmcKLQkJCQkgKi8KKy8qIE1vZHVsZSBwYXJhbWV0ZXIgKi8KK3N0YXRpYyBpbnQgZXJyX2NoazsKK3N0YXRpYyBpbnQgZ2VvaWQ7CiAKIHN0YXRpYyBjaGFyIGRyaXZlcl9uYW1lW10gPSAidm1lX3RzaTE0OCI7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB0c2kxNDhfaWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgdHNpMTQ4X2lkc1tdID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1RVTkRSQSwgUENJX0RFVklDRV9JRF9UVU5EUkFfVFNJMTQ4KSB9LAogCXsgfSwKIH07CkBAIC0xMDksMTYgKzk1LDE3IEBACiAvKgogICogV2FrZXMgdXAgRE1BIHF1ZXVlLgogICovCi1zdGF0aWMgdTMyIHRzaTE0OF9ETUFfaXJxaGFuZGxlcihpbnQgY2hhbm5lbF9tYXNrKQorc3RhdGljIHUzMiB0c2kxNDhfRE1BX2lycWhhbmRsZXIoc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZSwKKwlpbnQgY2hhbm5lbF9tYXNrKQogewogCXUzMiBzZXJ2aWNlZCA9IDA7CiAKIAlpZiAoY2hhbm5lbF9tYXNrICYgVFNJMTQ4X0xDU1JfSU5UU19ETUEwUykgewotCQl3YWtlX3VwKCZkbWFfcXVldWVbMF0pOworCQl3YWtlX3VwKCYoYnJpZGdlLT5kbWFfcXVldWVbMF0pKTsKIAkJc2VydmljZWQgfD0gVFNJMTQ4X0xDU1JfSU5UQ19ETUEwQzsKIAl9CiAJaWYgKGNoYW5uZWxfbWFzayAmIFRTSTE0OF9MQ1NSX0lOVFNfRE1BMVMpIHsKLQkJd2FrZV91cCgmZG1hX3F1ZXVlWzFdKTsKKwkJd2FrZV91cCgmKGJyaWRnZS0+ZG1hX3F1ZXVlWzFdKSk7CiAJCXNlcnZpY2VkIHw9IFRTSTE0OF9MQ1NSX0lOVENfRE1BMUM7CiAJfQogCkBAIC0xMjgsNyArMTE1LDcgQEAKIC8qCiAgKiBXYWtlIHVwIGxvY2F0aW9uIG1vbml0b3IgcXVldWUKICAqLwotc3RhdGljIHUzMiB0c2kxNDhfTE1faXJxaGFuZGxlcih1MzIgc3RhdCkKK3N0YXRpYyB1MzIgdHNpMTQ4X0xNX2lycWhhbmRsZXIoc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZSwgdTMyIHN0YXQpCiB7CiAJaW50IGk7CiAJdTMyIHNlcnZpY2VkID0gMDsKQEAgLTEzNiw3ICsxMjMsNyBAQAogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJaWYoc3RhdCAmIFRTSTE0OF9MQ1NSX0lOVFNfTE1TW2ldKSB7CiAJCQkvKiBXZSBvbmx5IGVuYWJsZSBpbnRlcnJ1cHRzIGlmIHRoZSBjYWxsYmFjayBpcyBzZXQgKi8KLQkJCWxtX2NhbGxiYWNrW2ldKGkpOworCQkJYnJpZGdlLT5sbV9jYWxsYmFja1tpXShpKTsKIAkJCXNlcnZpY2VkIHw9IFRTSTE0OF9MQ1NSX0lOVENfTE1DW2ldOwogCQl9CiAJfQpAQCAtMTQ5LDcgKzEzNiw3IEBACiAgKgogICogWFhYIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBub3QgZXhwb3NlZCB1cCB0aG91Z2ggQVBJLgogICovCi1zdGF0aWMgdTMyIHRzaTE0OF9NQl9pcnFoYW5kbGVyKHUzMiBzdGF0KQorc3RhdGljIHUzMiB0c2kxNDhfTUJfaXJxaGFuZGxlcihzdHJ1Y3QgdHNpMTQ4X2RyaXZlciAqYnJpZGdlLCB1MzIgc3RhdCkKIHsKIAlpbnQgaTsKIAl1MzIgdmFsOwpAQCAtMTU3LDggKzE0NCw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCWlmKHN0YXQgJiBUU0kxNDhfTENTUl9JTlRTX01CU1tpXSkgewotCQkJdmFsID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsKLQkJCQlUU0kxNDhfR0NTUl9NQk9YW2ldKTsKKwkJCXZhbCA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsJVFNJMTQ4X0dDU1JfTUJPWFtpXSk7CiAJCQlwcmludGsoIlZNRSBNYWlsYm94ICVkIHJlY2VpdmVkOiAweCV4XG4iLCBpLCB2YWwpOwogCQkJc2VydmljZWQgfD0gVFNJMTQ4X0xDU1JfSU5UQ19NQkNbaV07CiAJCX0KQEAgLTE3MCwyMiArMTU2LDIxIEBACiAvKgogICogRGlzcGxheSBlcnJvciAmIHN0YXR1cyBtZXNzYWdlIHdoZW4gUEVSUiAoUENJKSBleGNlcHRpb24gaW50ZXJydXB0IG9jY3Vycy4KICAqLwotc3RhdGljIHUzMiB0c2kxNDhfUEVSUl9pcnFoYW5kbGVyKHZvaWQpCitzdGF0aWMgdTMyIHRzaTE0OF9QRVJSX2lycWhhbmRsZXIoc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZSkKIHsKIAlwcmludGsoS0VSTl9FUlIKIAkJIlBDSSBFeGNlcHRpb24gYXQgYWRkcmVzczogMHglMDh4OiUwOHgsIGF0dHJpYnV0ZXM6ICUwOHhcbiIsCi0JCWlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0VEUEFVKSwKLQkJaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfRURQQUwpLAotCQlpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9FRFBBVCkKKwkJaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9FRFBBVSksCisJCWlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfRURQQUwpLAorCQlpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0VEUEFUKQogCQkpOwogCXByaW50ayhLRVJOX0VSUgogCQkiUENJLVggYXR0cmlidXRlIHJlZzogJTA4eCwgUENJLVggc3BsaXQgY29tcGxldGlvbiByZWc6ICUwOHhcbiIsCi0JCWlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0VEUFhBKSwKLQkJaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfRURQWFMpCisJCWlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfRURQWEEpLAorCQlpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0VEUFhTKQogCQkpOwogCi0JaW93cml0ZTMyYmUoVFNJMTQ4X0xDU1JfRURQQVRfRURQQ0wsCi0JCXRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9FRFBBVCk7CisJaW93cml0ZTMyYmUoVFNJMTQ4X0xDU1JfRURQQVRfRURQQ0wsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0VEUEFUKTsKIAogCXJldHVybiBUU0kxNDhfTENTUl9JTlRDX1BFUlJDOwogfQpAQCAtMTkzLDE2ICsxNzgsMTkgQEAKIC8qCiAgKiBTYXZlIGFkZHJlc3MgYW5kIHN0YXR1cyB3aGVuIFZNRSBlcnJvciBpbnRlcnJ1cHQgb2NjdXJzLgogICovCi1zdGF0aWMgdTMyIHRzaTE0OF9WRVJSX2lycWhhbmRsZXIodm9pZCkKK3N0YXRpYyB1MzIgdHNpMTQ4X1ZFUlJfaXJxaGFuZGxlcihzdHJ1Y3Qgdm1lX2JyaWRnZSAqdHNpMTQ4X2JyaWRnZSkKIHsKIAl1bnNpZ25lZCBpbnQgZXJyb3JfYWRkcl9oaWdoLCBlcnJvcl9hZGRyX2xvdzsKIAl1bnNpZ25lZCBsb25nIGxvbmcgZXJyb3JfYWRkcjsKIAl1MzIgZXJyb3JfYXR0cmliOwogCXN0cnVjdCB2bWVfYnVzX2Vycm9yICplcnJvcjsKKwlzdHJ1Y3QgdHNpMTQ4X2RyaXZlciAqYnJpZGdlOwogCi0JZXJyb3JfYWRkcl9oaWdoID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVkVBVSk7Ci0JZXJyb3JfYWRkcl9sb3cgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WRUFMKTsKLQllcnJvcl9hdHRyaWIgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WRUFUKTsKKwlicmlkZ2UgPSB0c2kxNDhfYnJpZGdlLT5kcml2ZXJfcHJpdjsKKworCWVycm9yX2FkZHJfaGlnaCA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVkVBVSk7CisJZXJyb3JfYWRkcl9sb3cgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZFQUwpOworCWVycm9yX2F0dHJpYiA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVkVBVCk7CiAKIAlyZWdfam9pbihlcnJvcl9hZGRyX2hpZ2gsIGVycm9yX2FkZHJfbG93LCAmZXJyb3JfYWRkcik7CiAKQEAgLTIyNiw4ICsyMTQsNyBAQAogCX0KIAogCS8qIENsZWFyIFN0YXR1cyAqLwotCWlvd3JpdGUzMmJlKFRTSTE0OF9MQ1NSX1ZFQVRfVkVTQ0wsCi0JCXRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WRUFUKTsKKwlpb3dyaXRlMzJiZShUU0kxNDhfTENTUl9WRUFUX1ZFU0NMLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WRUFUKTsKIAogCXJldHVybiBUU0kxNDhfTENTUl9JTlRDX1ZFUlJDOwogfQpAQCAtMjM1LDkgKzIyMiw5IEBACiAvKgogICogV2FrZSB1cCBJQUNLIHF1ZXVlLgogICovCi1zdGF0aWMgdTMyIHRzaTE0OF9JQUNLX2lycWhhbmRsZXIodm9pZCkKK3N0YXRpYyB1MzIgdHNpMTQ4X0lBQ0tfaXJxaGFuZGxlcihzdHJ1Y3QgdHNpMTQ4X2RyaXZlciAqYnJpZGdlKQogewotCXdha2VfdXAoJmlhY2tfcXVldWUpOworCXdha2VfdXAoJihicmlkZ2UtPmlhY2tfcXVldWUpKTsKIAogCXJldHVybiBUU0kxNDhfTENTUl9JTlRDX0lBQ0tDOwogfQpAQCAtMjQ1LDkgKzIzMiwxMyBAQAogLyoKICAqIENhbGxpbmcgVk1FIGJ1cyBpbnRlcnJ1cHQgY2FsbGJhY2sgaWYgcHJvdmlkZWQuCiAgKi8KLXN0YXRpYyB1MzIgdHNpMTQ4X1ZJUlFfaXJxaGFuZGxlcih1MzIgc3RhdCkKK3N0YXRpYyB1MzIgdHNpMTQ4X1ZJUlFfaXJxaGFuZGxlcihzdHJ1Y3Qgdm1lX2JyaWRnZSAqdHNpMTQ4X2JyaWRnZSwKKwl1MzIgc3RhdCkKIHsKIAlpbnQgdmVjLCBpLCBzZXJ2aWNlZCA9IDA7CisJc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZTsKKworCWJyaWRnZSA9IHRzaTE0OF9icmlkZ2UtPmRyaXZlcl9wcml2OwogCiAJZm9yIChpID0gNzsgaSA+IDA7IGktLSkgewogCQlpZiAoc3RhdCAmICgxIDw8IGkpKSB7CkBAIC0yNTcsOCArMjQ4LDcgQEAKIAkJCSAqIAk4LWJpdCBJQUNLIGN5Y2xlcyBvbiB0aGUgYnVzLCByZWFkIGZyb20gb2Zmc2V0CiAJCQkgKiAJMy4KIAkJCSAqLwotCQkJdmVjID0gaW9yZWFkOCh0c2kxNDhfYnJpZGdlLT5iYXNlICsKLQkJCQlUU0kxNDhfTENTUl9WSUFDS1tpXSArIDMpOworCQkJdmVjID0gaW9yZWFkOChicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WSUFDS1tpXSArIDMpOwogCiAJCQl2bWVfaXJxX2hhbmRsZXIodHNpMTQ4X2JyaWRnZSwgaSwgdmVjKTsKIApAQCAtMjczLDEzICsyNjMsMTkgQEAKICAqIFRvcCBsZXZlbCBpbnRlcnJ1cHQgaGFuZGxlci4gIENsZWFycyBhcHByb3ByaWF0ZSBpbnRlcnJ1cHQgc3RhdHVzIGJpdHMgYW5kCiAgKiB0aGVuIGNhbGxzIGFwcHJvcHJpYXRlIHN1YiBoYW5kbGVyKHMpLgogICovCi1zdGF0aWMgaXJxcmV0dXJuX3QgdHNpMTQ4X2lycWhhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorc3RhdGljIGlycXJldHVybl90IHRzaTE0OF9pcnFoYW5kbGVyKGludCBpcnEsIHZvaWQgKnB0cikKIHsKIAl1MzIgc3RhdCwgZW5hYmxlLCBzZXJ2aWNlZCA9IDA7CisJc3RydWN0IHZtZV9icmlkZ2UgKnRzaTE0OF9icmlkZ2U7CisJc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZTsKKworCXRzaTE0OF9icmlkZ2UgPSBwdHI7CisKKwlicmlkZ2UgPSB0c2kxNDhfYnJpZGdlLT5kcml2ZXJfcHJpdjsKIAogCS8qIERldGVybWluZSB3aGljaCBpbnRlcnJ1cHRzIGFyZSB1bm1hc2tlZCBhbmQgc2V0ICovCi0JZW5hYmxlID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU8pOwotCXN0YXQgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRTKTsKKwllbmFibGUgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEVPKTsKKwlzdGF0ID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRTKTsKIAogCS8qIE9ubHkgbG9vayBhdCB1bm1hc2tlZCBpbnRlcnJ1cHRzICovCiAJc3RhdCAmPSBlbmFibGU7CkBAIC0yOTEsNjEgKzI4Nyw2MyBAQAogCS8qIENhbGwgc3ViaGFuZGxlcnMgYXMgYXBwcm9wcmlhdGUgKi8KIAkvKiBETUEgaXJxcyAqLwogCWlmIChzdGF0ICYgKFRTSTE0OF9MQ1NSX0lOVFNfRE1BMVMgfCBUU0kxNDhfTENTUl9JTlRTX0RNQTBTKSkKLQkJc2VydmljZWQgfD0gdHNpMTQ4X0RNQV9pcnFoYW5kbGVyKHN0YXQpOworCQlzZXJ2aWNlZCB8PSB0c2kxNDhfRE1BX2lycWhhbmRsZXIoYnJpZGdlLCBzdGF0KTsKIAogCS8qIExvY2F0aW9uIG1vbml0b3IgaXJxcyAqLwogCWlmIChzdGF0ICYgKFRTSTE0OF9MQ1NSX0lOVFNfTE0zUyB8IFRTSTE0OF9MQ1NSX0lOVFNfTE0yUyB8CiAJCQlUU0kxNDhfTENTUl9JTlRTX0xNMVMgfCBUU0kxNDhfTENTUl9JTlRTX0xNMFMpKQotCQlzZXJ2aWNlZCB8PSB0c2kxNDhfTE1faXJxaGFuZGxlcihzdGF0KTsKKwkJc2VydmljZWQgfD0gdHNpMTQ4X0xNX2lycWhhbmRsZXIoYnJpZGdlLCBzdGF0KTsKIAogCS8qIE1haWwgYm94IGlycXMgKi8KIAlpZiAoc3RhdCAmIChUU0kxNDhfTENTUl9JTlRTX01CM1MgfCBUU0kxNDhfTENTUl9JTlRTX01CMlMgfAogCQkJVFNJMTQ4X0xDU1JfSU5UU19NQjFTIHwgVFNJMTQ4X0xDU1JfSU5UU19NQjBTKSkKLQkJc2VydmljZWQgfD0gdHNpMTQ4X01CX2lycWhhbmRsZXIoc3RhdCk7CisJCXNlcnZpY2VkIHw9IHRzaTE0OF9NQl9pcnFoYW5kbGVyKGJyaWRnZSwgc3RhdCk7CiAKIAkvKiBQQ0kgYnVzIGVycm9yICovCiAJaWYgKHN0YXQgJiBUU0kxNDhfTENTUl9JTlRTX1BFUlJTKQotCQlzZXJ2aWNlZCB8PSB0c2kxNDhfUEVSUl9pcnFoYW5kbGVyKCk7CisJCXNlcnZpY2VkIHw9IHRzaTE0OF9QRVJSX2lycWhhbmRsZXIoYnJpZGdlKTsKIAogCS8qIFZNRSBidXMgZXJyb3IgKi8KIAlpZiAoc3RhdCAmIFRTSTE0OF9MQ1NSX0lOVFNfVkVSUlMpCi0JCXNlcnZpY2VkIHw9IHRzaTE0OF9WRVJSX2lycWhhbmRsZXIoKTsKKwkJc2VydmljZWQgfD0gdHNpMTQ4X1ZFUlJfaXJxaGFuZGxlcih0c2kxNDhfYnJpZGdlKTsKIAogCS8qIElBQ0sgaXJxICovCiAJaWYgKHN0YXQgJiBUU0kxNDhfTENTUl9JTlRTX0lBQ0tTKQotCQlzZXJ2aWNlZCB8PSB0c2kxNDhfSUFDS19pcnFoYW5kbGVyKCk7CisJCXNlcnZpY2VkIHw9IHRzaTE0OF9JQUNLX2lycWhhbmRsZXIoYnJpZGdlKTsKIAogCS8qIFZNRSBidXMgaXJxcyAqLwogCWlmIChzdGF0ICYgKFRTSTE0OF9MQ1NSX0lOVFNfSVJRN1MgfCBUU0kxNDhfTENTUl9JTlRTX0lSUTZTIHwKIAkJCVRTSTE0OF9MQ1NSX0lOVFNfSVJRNVMgfCBUU0kxNDhfTENTUl9JTlRTX0lSUTRTIHwKIAkJCVRTSTE0OF9MQ1NSX0lOVFNfSVJRM1MgfCBUU0kxNDhfTENTUl9JTlRTX0lSUTJTIHwKIAkJCVRTSTE0OF9MQ1NSX0lOVFNfSVJRMVMpKQotCQlzZXJ2aWNlZCB8PSB0c2kxNDhfVklSUV9pcnFoYW5kbGVyKHN0YXQpOworCQlzZXJ2aWNlZCB8PSB0c2kxNDhfVklSUV9pcnFoYW5kbGVyKHRzaTE0OF9icmlkZ2UsIHN0YXQpOwogCiAJLyogQ2xlYXIgc2VydmljZWQgaW50ZXJydXB0cyAqLwotCWlvd3JpdGUzMmJlKHNlcnZpY2VkLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5UQyk7CisJaW93cml0ZTMyYmUoc2VydmljZWQsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEMpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IHRzaTE0OF9pcnFfaW5pdChzdHJ1Y3Qgdm1lX2JyaWRnZSAqYnJpZGdlKQorc3RhdGljIGludCB0c2kxNDhfaXJxX2luaXQoc3RydWN0IHZtZV9icmlkZ2UgKnRzaTE0OF9icmlkZ2UpCiB7CiAJaW50IHJlc3VsdDsKIAl1bnNpZ25lZCBpbnQgdG1wOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCB0c2kxNDhfZHJpdmVyICpicmlkZ2U7CiAKLQkvKiBOZWVkIHBkZXYgKi8KLSAgICAgICAgcGRldiA9IGNvbnRhaW5lcl9vZihicmlkZ2UtPnBhcmVudCwgc3RydWN0IHBjaV9kZXYsIGRldik7CisJcGRldiA9IGNvbnRhaW5lcl9vZih0c2kxNDhfYnJpZGdlLT5wYXJlbnQsIHN0cnVjdCBwY2lfZGV2LCBkZXYpOworCisJYnJpZGdlID0gdHNpMTQ4X2JyaWRnZS0+ZHJpdmVyX3ByaXY7CiAKIAkvKiBJbml0aWFsaXNlIGxpc3QgZm9yIFZNRSBidXMgZXJyb3JzICovCi0JSU5JVF9MSVNUX0hFQUQoJihicmlkZ2UtPnZtZV9lcnJvcnMpKTsKKwlJTklUX0xJU1RfSEVBRCgmKHRzaTE0OF9icmlkZ2UtPnZtZV9lcnJvcnMpKTsKIAotCW11dGV4X2luaXQoJihicmlkZ2UtPmlycV9tdHgpKTsKKwltdXRleF9pbml0KCYodHNpMTQ4X2JyaWRnZS0+aXJxX210eCkpOwogCiAJcmVzdWx0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLAogCQkJICAgICB0c2kxNDhfaXJxaGFuZGxlciwKIAkJCSAgICAgSVJRRl9TSEFSRUQsCi0JCQkgICAgIGRyaXZlcl9uYW1lLCBwZGV2KTsKKwkJCSAgICAgZHJpdmVyX25hbWUsIHRzaTE0OF9icmlkZ2UpOwogCWlmIChyZXN1bHQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2FuJ3QgZ2V0IGFzc2lnbmVkIHBjaSBpcnEgdmVjdG9yICUwMlhcbiIsCiAJCQlwZGV2LT5pcnEpOwpAQCAtMzU5LDcgKzM1Nyw3IEBACiAJCVRTSTE0OF9MQ1NSX0lOVEVPX1BFUlJFTyB8IFRTSTE0OF9MQ1NSX0lOVEVPX1ZFUlJFTyB8CiAJCVRTSTE0OF9MQ1NSX0lOVEVPX0lBQ0tFTzsKIAotCS8qIFhYWCBUaGlzIGxlYXZlcyB0aGUgZm9sbG93aW5nIGludGVycnVwdHMgbWFza2VkLgorCS8qIFRoaXMgbGVhdmVzIHRoZSBmb2xsb3dpbmcgaW50ZXJydXB0cyBtYXNrZWQuCiAJICogVFNJMTQ4X0xDU1JfSU5URU9fVklFRU8KIAkgKiBUU0kxNDhfTENTUl9JTlRFT19TWVNGTEVPCiAJICogVFNJMTQ4X0xDU1JfSU5URU9fQUNGTEVPCkBAIC0zOTIsMTQgKzM5MCwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB0c2kxNDhfaXJxX2V4aXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgdm9pZCB0c2kxNDhfaXJxX2V4aXQoc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZSwgc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJLyogVHVybiBvZmYgaW50ZXJydXB0cyAqLwotCWlvd3JpdGUzMmJlKDB4MCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEVPKTsKLQlpb3dyaXRlMzJiZSgweDAsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTik7CisJaW93cml0ZTMyYmUoMHgwLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTyk7CisJaW93cml0ZTMyYmUoMHgwLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTik7CiAKIAkvKiBDbGVhciBhbGwgaW50ZXJydXB0cyAqLwotCWlvd3JpdGUzMmJlKDB4RkZGRkZGRkYsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRDKTsKKwlpb3dyaXRlMzJiZSgweEZGRkZGRkZGLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRDKTsKIAogCS8qIERldGFjaCBpbnRlcnJ1cHQgaGFuZGxlciAqLwogCWZyZWVfaXJxKHBkZXYtPmlycSwgcGRldik7CkBAIC00MDgsMTEgKzQwNiwxMSBAQAogLyoKICAqIENoZWNrIHRvIHNlZSBpZiBhbiBJQUNrIGhhcyBiZWVuIHJlY2VpdmVkLCByZXR1cm4gdHJ1ZSAoMSkgb3IgZmFsc2UgKDApLgogICovCi1pbnQgdHNpMTQ4X2lhY2tfcmVjZWl2ZWQodm9pZCkKK2ludCB0c2kxNDhfaWFja19yZWNlaXZlZChzdHJ1Y3QgdHNpMTQ4X2RyaXZlciAqYnJpZGdlKQogewogCXUzMiB0bXA7CiAKLQl0bXAgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WSUNSKTsKKwl0bXAgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZJQ1IpOwogCiAJaWYgKHRtcCAmIFRTSTE0OF9MQ1NSX1ZJQ1JfSVJRUykKIAkJcmV0dXJuIDA7CkBAIC00MjMsMjAgKzQyMSwyNCBAQAogLyoKICAqIENvbmZpZ3VyZSBWTUUgaW50ZXJydXB0CiAgKi8KLXZvaWQgdHNpMTQ4X2lycV9zZXQoaW50IGxldmVsLCBpbnQgc3RhdGUsIGludCBzeW5jKQordm9pZCB0c2kxNDhfaXJxX3NldChzdHJ1Y3Qgdm1lX2JyaWRnZSAqdHNpMTQ4X2JyaWRnZSwgaW50IGxldmVsLAorCWludCBzdGF0ZSwgaW50IHN5bmMpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJdTMyIHRtcDsKKwlzdHJ1Y3QgdHNpMTQ4X2RyaXZlciAqYnJpZGdlOworCisJYnJpZGdlID0gdHNpMTQ4X2JyaWRnZS0+ZHJpdmVyX3ByaXY7CiAKIAkvKiBXZSBuZWVkIHRvIGRvIHRoZSBvcmRlcmluZyBkaWZmZXJlbnRseSBmb3IgZW5hYmxpbmcgYW5kIGRpc2FibGluZyAqLwogCWlmIChzdGF0ZSA9PSAwKSB7Ci0JCXRtcCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEVOKTsKKwkJdG1wID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTik7CiAJCXRtcCAmPSB+VFNJMTQ4X0xDU1JfSU5URU5fSVJRRU5bbGV2ZWwgLSAxXTsKLQkJaW93cml0ZTMyYmUodG1wLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU4pOworCQlpb3dyaXRlMzJiZSh0bXAsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEVOKTsKIAotCQl0bXAgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTyk7CisJCXRtcCA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU8pOwogCQl0bXAgJj0gflRTSTE0OF9MQ1NSX0lOVEVPX0lSUUVPW2xldmVsIC0gMV07Ci0JCWlvd3JpdGUzMmJlKHRtcCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEVPKTsKKwkJaW93cml0ZTMyYmUodG1wLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTyk7CiAKIAkJaWYgKHN5bmMgIT0gMCkgewogCQkJcGRldiA9IGNvbnRhaW5lcl9vZih0c2kxNDhfYnJpZGdlLT5wYXJlbnQsCkBAIC00NDUsMTMgKzQ0NywxMyBAQAogCQkJc3luY2hyb25pemVfaXJxKHBkZXYtPmlycSk7CiAJCX0KIAl9IGVsc2UgewotCQl0bXAgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTyk7CisJCXRtcCA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU8pOwogCQl0bXAgfD0gVFNJMTQ4X0xDU1JfSU5URU9fSVJRRU9bbGV2ZWwgLSAxXTsKLQkJaW93cml0ZTMyYmUodG1wLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU8pOworCQlpb3dyaXRlMzJiZSh0bXAsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEVPKTsKIAotCQl0bXAgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTik7CisJCXRtcCA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU4pOwogCQl0bXAgfD0gVFNJMTQ4X0xDU1JfSU5URU5fSVJRRU5bbGV2ZWwgLSAxXTsKLQkJaW93cml0ZTMyYmUodG1wLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU4pOworCQlpb3dyaXRlMzJiZSh0bXAsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEVOKTsKIAl9CiB9CiAKQEAgLTQ1OSwyOCArNDYxLDMyIEBACiAgKiBHZW5lcmF0ZSBhIFZNRSBidXMgaW50ZXJydXB0IGF0IHRoZSByZXF1ZXN0ZWQgbGV2ZWwgJiB2ZWN0b3IuIFdhaXQgZm9yCiAgKiBpbnRlcnJ1cHQgdG8gYmUgYWNrZWQuCiAgKi8KLWludCB0c2kxNDhfaXJxX2dlbmVyYXRlKGludCBsZXZlbCwgaW50IHN0YXRpZCkKK2ludCB0c2kxNDhfaXJxX2dlbmVyYXRlKHN0cnVjdCB2bWVfYnJpZGdlICp0c2kxNDhfYnJpZGdlLCBpbnQgbGV2ZWwsIGludCBzdGF0aWQpCiB7CiAJdTMyIHRtcDsKKwlzdHJ1Y3QgdHNpMTQ4X2RyaXZlciAqYnJpZGdlOwogCi0JbXV0ZXhfbG9jaygmKHZtZV9pbnQpKTsKKwlicmlkZ2UgPSB0c2kxNDhfYnJpZGdlLT5kcml2ZXJfcHJpdjsKKworCW11dGV4X2xvY2soJihicmlkZ2UtPnZtZV9pbnQpKTsKIAogCS8qIFJlYWQgVklDUiByZWdpc3RlciAqLwotCXRtcCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZJQ1IpOworCXRtcCA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVklDUik7CiAKIAkvKiBTZXQgU3RhdHVzL0lEICovCiAJdG1wID0gKHRtcCAmIH5UU0kxNDhfTENTUl9WSUNSX1NUSURfTSkgfAogCQkoc3RhdGlkICYgVFNJMTQ4X0xDU1JfVklDUl9TVElEX00pOwotCWlvd3JpdGUzMmJlKHRtcCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZJQ1IpOworCWlvd3JpdGUzMmJlKHRtcCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVklDUik7CiAKIAkvKiBBc3NlcnQgVk1FYnVzIElSUSAqLwogCXRtcCA9IHRtcCB8IFRTSTE0OF9MQ1NSX1ZJQ1JfSVJRTFtsZXZlbF07Ci0JaW93cml0ZTMyYmUodG1wLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVklDUik7CisJaW93cml0ZTMyYmUodG1wLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WSUNSKTsKIAogCS8qIFhYWCBDb25zaWRlciBpbXBsZW1lbnRpbmcgYSB0aW1lb3V0PyAqLwotCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShpYWNrX3F1ZXVlLCB0c2kxNDhfaWFja19yZWNlaXZlZCgpKTsKKwl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoYnJpZGdlLT5pYWNrX3F1ZXVlLAorCQl0c2kxNDhfaWFja19yZWNlaXZlZChicmlkZ2UpKTsKIAotCW11dGV4X3VubG9jaygmKHZtZV9pbnQpKTsKKwltdXRleF91bmxvY2soJihicmlkZ2UtPnZtZV9pbnQpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDg4LDggKzQ5NCw4IEBACiAvKgogICogRmluZCB0aGUgZmlyc3QgZXJyb3IgaW4gdGhpcyBhZGRyZXNzIHJhbmdlCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgdm1lX2J1c19lcnJvciAqdHNpMTQ4X2ZpbmRfZXJyb3Iodm1lX2FkZHJlc3NfdCBhc3BhY2UsCi0JdW5zaWduZWQgbG9uZyBsb25nIGFkZHJlc3MsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBzdHJ1Y3Qgdm1lX2J1c19lcnJvciAqdHNpMTQ4X2ZpbmRfZXJyb3Ioc3RydWN0IHZtZV9icmlkZ2UgKnRzaTE0OF9icmlkZ2UsCisJdm1lX2FkZHJlc3NfdCBhc3BhY2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyZXNzLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqZXJyX3BvczsKIAlzdHJ1Y3Qgdm1lX2J1c19lcnJvciAqdm1lX2VyciwgKnZhbGlkID0gTlVMTDsKQEAgLTUyMCw4ICs1MjYsOCBAQAogLyoKICAqIENsZWFyIGVycm9ycyBpbiB0aGUgcHJvdmlkZWQgYWRkcmVzcyByYW5nZS4KICAqLwotc3RhdGljIHZvaWQgdHNpMTQ4X2NsZWFyX2Vycm9ycyh2bWVfYWRkcmVzc190IGFzcGFjZSwKLQl1bnNpZ25lZCBsb25nIGxvbmcgYWRkcmVzcywgc2l6ZV90IGNvdW50KQorc3RhdGljIHZvaWQgdHNpMTQ4X2NsZWFyX2Vycm9ycyhzdHJ1Y3Qgdm1lX2JyaWRnZSAqdHNpMTQ4X2JyaWRnZSwKKwl2bWVfYWRkcmVzc190IGFzcGFjZSwgdW5zaWduZWQgbG9uZyBsb25nIGFkZHJlc3MsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplcnJfcG9zLCAqdGVtcDsKIAlzdHJ1Y3Qgdm1lX2J1c19lcnJvciAqdm1lX2VycjsKQEAgLTU2MSwxNiArNTY3LDkgQEAKIAl1bnNpZ25lZCBpbnQgdm1lX2JvdW5kX2xvdywgdm1lX2JvdW5kX2hpZ2g7CiAJdW5zaWduZWQgaW50IHBjaV9vZmZzZXRfbG93LCBwY2lfb2Zmc2V0X2hpZ2g7CiAJdW5zaWduZWQgbG9uZyBsb25nIHZtZV9ib3VuZCwgcGNpX29mZnNldDsKKwlzdHJ1Y3QgdHNpMTQ4X2RyaXZlciAqYnJpZGdlOwogCi0jaWYgMAotICAgICAgICBwcmludGsoIlNldCBzbGF2ZSBpbWFnZSAlZCB0bzpcbiIsIGltYWdlLT5udW1iZXIpOwotIAlwcmludGsoIlx0RW5hYmxlZDogJXNcbiIsIChlbmFibGVkID09IDEpPyAieWVzIiA6ICJubyIpOwotCXByaW50aygiXHRWTUUgQmFzZToweCVsbHhcbiIsIHZtZV9iYXNlKTsKLQlwcmludGsoIlx0V2luZG93IFNpemU6MHglbGx4XG4iLCBzaXplKTsKLQlwcmludGsoIlx0UENJIEJhc2U6MHglbHhcbiIsICh1bnNpZ25lZCBsb25nKXBjaV9iYXNlKTsKLQlwcmludGsoIlx0QWRkcmVzcyBTcGFjZToweCV4XG4iLCBhc3BhY2UpOwotCXByaW50aygiXHRUcmFuc2ZlciBDeWNsZSBQcm9wZXJ0aWVzOjB4JXhcbiIsIGN5Y2xlKTsKLSNlbmRpZgorCWJyaWRnZSA9IGltYWdlLT5wYXJlbnQtPmRyaXZlcl9wcml2OwogCiAJaSA9IGltYWdlLT5udW1iZXI7CiAKQEAgLTYyNyw0OSArNjI2LDI3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotI2lmIDAKLQlwcmludGsoIlx0Vk1FIEJvdW5kOjB4JWxseFxuIiwgdm1lX2JvdW5kKTsKLQlwcmludGsoIlx0UENJIE9mZnNldDoweCVsbHhcbiIsIHBjaV9vZmZzZXQpOwotI2VuZGlmCi0KIAkvKiAgRGlzYWJsZSB3aGlsZSB3ZSBhcmUgbXVja2luZyBhcm91bmQgKi8KLQl0ZW1wX2N0bCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKKwl0ZW1wX2N0bCA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSVRbaV0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfSVRBVCk7CiAJdGVtcF9jdGwgJj0gflRTSTE0OF9MQ1NSX0lUQVRfRU47Ci0JaW93cml0ZTMyYmUodGVtcF9jdGwsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCisJaW93cml0ZTMyYmUodGVtcF9jdGwsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX0lUQVQpOwogCiAJLyogU2V0dXAgbWFwcGluZyAqLwotCWlvd3JpdGUzMmJlKHZtZV9iYXNlX2hpZ2gsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCisJaW93cml0ZTMyYmUodm1lX2Jhc2VfaGlnaCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSVRbaV0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfSVRTQVUpOwotCWlvd3JpdGUzMmJlKHZtZV9iYXNlX2xvdywgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKKwlpb3dyaXRlMzJiZSh2bWVfYmFzZV9sb3csIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX0lUU0FMKTsKLQlpb3dyaXRlMzJiZSh2bWVfYm91bmRfaGlnaCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKKwlpb3dyaXRlMzJiZSh2bWVfYm91bmRfaGlnaCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSVRbaV0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfSVRFQVUpOwotCWlvd3JpdGUzMmJlKHZtZV9ib3VuZF9sb3csIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCisJaW93cml0ZTMyYmUodm1lX2JvdW5kX2xvdywgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSVRbaV0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfSVRFQUwpOwotCWlvd3JpdGUzMmJlKHBjaV9vZmZzZXRfaGlnaCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKKwlpb3dyaXRlMzJiZShwY2lfb2Zmc2V0X2hpZ2gsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX0lUT0ZVKTsKLQlpb3dyaXRlMzJiZShwY2lfb2Zmc2V0X2xvdywgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKKwlpb3dyaXRlMzJiZShwY2lfb2Zmc2V0X2xvdywgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSVRbaV0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfSVRPRkwpOwogCi0vKiBYWFggUHJlZmV0Y2ggc3R1ZmYgY3VycmVudGx5IHVuc3VwcG9ydGVkICovCi0jaWYgMAotCi0JZm9yICh4ID0gMDsgeCA8IDQ7IHgrKykgewotCQlpZiAoKDY0IDw8IHgpID49IHZtZUluLT5wcmVmZXRjaFNpemUpIHsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmICh4ID09IDQpCi0JCXgtLTsKLQl0ZW1wX2N0bCB8PSAoeCA8PCAxNik7Ci0KLQlpZiAodm1lSW4tPnByZWZldGNoVGhyZXNob2xkKQotCQlpZiAodm1lSW4tPnByZWZldGNoVGhyZXNob2xkKQotCQkJdGVtcF9jdGwgfD0gMHg0MDAwMDsKLSNlbmRpZgotCiAJLyogU2V0dXAgMmVTU1Qgc3BlZWRzICovCiAJdGVtcF9jdGwgJj0gflRTSTE0OF9MQ1NSX0lUQVRfMmVTU1RNX007CiAJc3dpdGNoIChjeWNsZSAmIChWTUVfMmVTU1QxNjAgfCBWTUVfMmVTU1QyNjcgfCBWTUVfMmVTU1QzMjApKSB7CkBAIC03MTIsMTMgKzY4OSwxMyBAQAogCQl0ZW1wX2N0bCB8PSBUU0kxNDhfTENTUl9JVEFUX0RBVEE7CiAKIAkvKiBXcml0ZSBjdGwgcmVnIHdpdGhvdXQgZW5hYmxlICovCi0JaW93cml0ZTMyYmUodGVtcF9jdGwsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCisJaW93cml0ZTMyYmUodGVtcF9jdGwsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX0lUQVQpOwogCiAJaWYgKGVuYWJsZWQpCiAJCXRlbXBfY3RsIHw9IFRTSTE0OF9MQ1NSX0lUQVRfRU47CiAKLQlpb3dyaXRlMzJiZSh0ZW1wX2N0bCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKKwlpb3dyaXRlMzJiZSh0ZW1wX2N0bCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSVRbaV0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfSVRBVCk7CiAKIAlyZXR1cm4gMDsKQEAgLTcyNiw4ICs3MDMsNiBAQAogCiAvKgogICogR2V0IHNsYXZlIHdpbmRvdyBjb25maWd1cmF0aW9uLgotICoKLSAqIFhYWCBQcmVmZXRjaCBjdXJyZW50bHkgdW5zdXBwb3J0ZWQuCiAgKi8KIGludCB0c2kxNDhfc2xhdmVfZ2V0KHN0cnVjdCB2bWVfc2xhdmVfcmVzb3VyY2UgKmltYWdlLCBpbnQgKmVuYWJsZWQsCiAJdW5zaWduZWQgbG9uZyBsb25nICp2bWVfYmFzZSwgdW5zaWduZWQgbG9uZyBsb25nICpzaXplLApAQCAtNzM4LDI1ICs3MTMsMjcgQEAKIAl1bnNpZ25lZCBpbnQgdm1lX2JvdW5kX2xvdywgdm1lX2JvdW5kX2hpZ2g7CiAJdW5zaWduZWQgaW50IHBjaV9vZmZzZXRfbG93LCBwY2lfb2Zmc2V0X2hpZ2g7CiAJdW5zaWduZWQgbG9uZyBsb25nIHZtZV9ib3VuZCwgcGNpX29mZnNldDsKKwlzdHJ1Y3QgdHNpMTQ4X2RyaXZlciAqYnJpZGdlOwogCisJYnJpZGdlID0gaW1hZ2UtPnBhcmVudC0+ZHJpdmVyX3ByaXY7CiAKIAlpID0gaW1hZ2UtPm51bWJlcjsKIAogCS8qIFJlYWQgcmVnaXN0ZXJzICovCi0JY3RsID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSVRbaV0gKworCWN0bCA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSVRbaV0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfSVRBVCk7CiAKLQl2bWVfYmFzZV9oaWdoID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSVRbaV0gKworCXZtZV9iYXNlX2hpZ2ggPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX0lUU0FVKTsKLQl2bWVfYmFzZV9sb3cgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCisJdm1lX2Jhc2VfbG93ID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9JVFNBTCk7Ci0Jdm1lX2JvdW5kX2hpZ2ggPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCisJdm1lX2JvdW5kX2hpZ2ggPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX0lURUFVKTsKLQl2bWVfYm91bmRfbG93ID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSVRbaV0gKworCXZtZV9ib3VuZF9sb3cgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX0lURUFMKTsKLQlwY2lfb2Zmc2V0X2hpZ2ggPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCisJcGNpX29mZnNldF9oaWdoID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9JVE9GVSk7Ci0JcGNpX29mZnNldF9sb3cgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCisJcGNpX29mZnNldF9sb3cgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX0lUT0ZMKTsKIAogCS8qIENvbnZlcnQgNjQtYml0IHZhcmlhYmxlcyB0byAyeCAzMi1iaXQgdmFyaWFibGVzICovCkBAIC04MzMsNiArODEwLDkgQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgZXhpc3Rpbmdfc2l6ZTsKIAlpbnQgcmV0dmFsID0gMDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwlzdHJ1Y3Qgdm1lX2JyaWRnZSAqdHNpMTQ4X2JyaWRnZTsKKworCXRzaTE0OF9icmlkZ2UgPSBpbWFnZS0+cGFyZW50OwogCiAJLyogRmluZCBwY2lfZGV2IGNvbnRhaW5lciBvZiBkZXYgKi8KICAgICAgICAgaWYgKHRzaTE0OF9icmlkZ2UtPnBhcmVudCA9PSBOVUxMKSB7CkBAIC04NDEsOCArODIxLDggQEAKICAgICAgICAgfQogICAgICAgICBwZGV2ID0gY29udGFpbmVyX29mKHRzaTE0OF9icmlkZ2UtPnBhcmVudCwgc3RydWN0IHBjaV9kZXYsIGRldik7CiAKLQlleGlzdGluZ19zaXplID0gKHVuc2lnbmVkIGxvbmcgbG9uZykoaW1hZ2UtPnBjaV9yZXNvdXJjZS5lbmQgLQotCQlpbWFnZS0+cGNpX3Jlc291cmNlLnN0YXJ0KTsKKwlleGlzdGluZ19zaXplID0gKHVuc2lnbmVkIGxvbmcgbG9uZykoaW1hZ2UtPmJ1c19yZXNvdXJjZS5lbmQgLQorCQlpbWFnZS0+YnVzX3Jlc291cmNlLnN0YXJ0KTsKIAogCS8qIElmIHRoZSBleGlzdGluZyBzaXplIGlzIE9LLCByZXR1cm4gKi8KIAlpZiAoKHNpemUgIT0gMCkgJiYgKGV4aXN0aW5nX3NpemUgPT0gKHNpemUgLSAxKSkpCkBAIC04NTEsMTAgKzgzMSwxMCBAQAogCWlmIChleGlzdGluZ19zaXplICE9IDApIHsKIAkJaW91bm1hcChpbWFnZS0+a2Vybl9iYXNlKTsKIAkJaW1hZ2UtPmtlcm5fYmFzZSA9IE5VTEw7Ci0JCWlmIChpbWFnZS0+cGNpX3Jlc291cmNlLm5hbWUgIT0gTlVMTCkKLQkJCWtmcmVlKGltYWdlLT5wY2lfcmVzb3VyY2UubmFtZSk7Ci0JCXJlbGVhc2VfcmVzb3VyY2UoJihpbWFnZS0+cGNpX3Jlc291cmNlKSk7Ci0JCW1lbXNldCgmKGltYWdlLT5wY2lfcmVzb3VyY2UpLCAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSk7CisJCWlmIChpbWFnZS0+YnVzX3Jlc291cmNlLm5hbWUgIT0gTlVMTCkKKwkJCWtmcmVlKGltYWdlLT5idXNfcmVzb3VyY2UubmFtZSk7CisJCXJlbGVhc2VfcmVzb3VyY2UoJihpbWFnZS0+YnVzX3Jlc291cmNlKSk7CisJCW1lbXNldCgmKGltYWdlLT5idXNfcmVzb3VyY2UpLCAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSk7CiAJfQogCiAJLyogRXhpdCBoZXJlIGlmIHNpemUgaXMgemVybyAqLwpAQCAtODYyLDkgKzg0Miw5IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmIChpbWFnZS0+cGNpX3Jlc291cmNlLm5hbWUgPT0gTlVMTCkgewotCQlpbWFnZS0+cGNpX3Jlc291cmNlLm5hbWUgPSBrbWFsbG9jKFZNRU5BTVNJWiszLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGltYWdlLT5wY2lfcmVzb3VyY2UubmFtZSA9PSBOVUxMKSB7CisJaWYgKGltYWdlLT5idXNfcmVzb3VyY2UubmFtZSA9PSBOVUxMKSB7CisJCWltYWdlLT5idXNfcmVzb3VyY2UubmFtZSA9IGttYWxsb2MoVk1FTkFNU0laKzMsIEdGUF9LRVJORUwpOworCQlpZiAoaW1hZ2UtPmJ1c19yZXNvdXJjZS5uYW1lID09IE5VTEwpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcmVzb3VyY2UiCiAJCQkJIiBuYW1lXG4iKTsKIAkJCXJldHZhbCA9IC1FTk9NRU07CkBAIC04NzIsMjYgKzg1MiwyNiBAQAogCQl9CiAJfQogCi0Jc3ByaW50ZigoY2hhciAqKWltYWdlLT5wY2lfcmVzb3VyY2UubmFtZSwgIiVzLiVkIiwgdHNpMTQ4X2JyaWRnZS0+bmFtZSwKKwlzcHJpbnRmKChjaGFyICopaW1hZ2UtPmJ1c19yZXNvdXJjZS5uYW1lLCAiJXMuJWQiLCB0c2kxNDhfYnJpZGdlLT5uYW1lLAogCQlpbWFnZS0+bnVtYmVyKTsKIAotCWltYWdlLT5wY2lfcmVzb3VyY2Uuc3RhcnQgPSAwOwotCWltYWdlLT5wY2lfcmVzb3VyY2UuZW5kID0gKHVuc2lnbmVkIGxvbmcpc2l6ZTsKLQlpbWFnZS0+cGNpX3Jlc291cmNlLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisJaW1hZ2UtPmJ1c19yZXNvdXJjZS5zdGFydCA9IDA7CisJaW1hZ2UtPmJ1c19yZXNvdXJjZS5lbmQgPSAodW5zaWduZWQgbG9uZylzaXplOworCWltYWdlLT5idXNfcmVzb3VyY2UuZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKIAogCXJldHZhbCA9IHBjaV9idXNfYWxsb2NfcmVzb3VyY2UocGRldi0+YnVzLAotCQkmKGltYWdlLT5wY2lfcmVzb3VyY2UpLCBzaXplLCBzaXplLCBQQ0lCSU9TX01JTl9NRU0sCisJCSYoaW1hZ2UtPmJ1c19yZXNvdXJjZSksIHNpemUsIHNpemUsIFBDSUJJT1NfTUlOX01FTSwKIAkJMCwgTlVMTCwgTlVMTCk7CiAJaWYgKHJldHZhbCkgewogCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW0gcmVzb3VyY2UgZm9yICIKIAkJCSJ3aW5kb3cgJWQgc2l6ZSAweCVseCBzdGFydCAweCVseFxuIiwKIAkJCWltYWdlLT5udW1iZXIsICh1bnNpZ25lZCBsb25nKXNpemUsCi0JCQkodW5zaWduZWQgbG9uZylpbWFnZS0+cGNpX3Jlc291cmNlLnN0YXJ0KTsKKwkJCSh1bnNpZ25lZCBsb25nKWltYWdlLT5idXNfcmVzb3VyY2Uuc3RhcnQpOwogCQlnb3RvIGVycl9yZXNvdXJjZTsKIAl9CiAKIAlpbWFnZS0+a2Vybl9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKAotCQlpbWFnZS0+cGNpX3Jlc291cmNlLnN0YXJ0LCBzaXplKTsKKwkJaW1hZ2UtPmJ1c19yZXNvdXJjZS5zdGFydCwgc2l6ZSk7CiAJaWYgKGltYWdlLT5rZXJuX2Jhc2UgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZW1hcCByZXNvdXJjZVxuIik7CiAJCXJldHZhbCA9IC1FTk9NRU07CkBAIC05MDMsMTAgKzg4MywxMCBAQAogCWlvdW5tYXAoaW1hZ2UtPmtlcm5fYmFzZSk7CiAJaW1hZ2UtPmtlcm5fYmFzZSA9IE5VTEw7CiBlcnJfcmVtYXA6Ci0JcmVsZWFzZV9yZXNvdXJjZSgmKGltYWdlLT5wY2lfcmVzb3VyY2UpKTsKKwlyZWxlYXNlX3Jlc291cmNlKCYoaW1hZ2UtPmJ1c19yZXNvdXJjZSkpOwogZXJyX3Jlc291cmNlOgotCWtmcmVlKGltYWdlLT5wY2lfcmVzb3VyY2UubmFtZSk7Ci0JbWVtc2V0KCYoaW1hZ2UtPnBjaV9yZXNvdXJjZSksIDAsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpKTsKKwlrZnJlZShpbWFnZS0+YnVzX3Jlc291cmNlLm5hbWUpOworCW1lbXNldCgmKGltYWdlLT5idXNfcmVzb3VyY2UpLCAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSk7CiBlcnJfbmFtZToKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtOTE4LDkgKzg5OCw5IEBACiB7CiAJaW91bm1hcChpbWFnZS0+a2Vybl9iYXNlKTsKIAlpbWFnZS0+a2Vybl9iYXNlID0gTlVMTDsKLQlyZWxlYXNlX3Jlc291cmNlKCYoaW1hZ2UtPnBjaV9yZXNvdXJjZSkpOwotCWtmcmVlKGltYWdlLT5wY2lfcmVzb3VyY2UubmFtZSk7Ci0JbWVtc2V0KCYoaW1hZ2UtPnBjaV9yZXNvdXJjZSksIDAsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpKTsKKwlyZWxlYXNlX3Jlc291cmNlKCYoaW1hZ2UtPmJ1c19yZXNvdXJjZSkpOworCWtmcmVlKGltYWdlLT5idXNfcmVzb3VyY2UubmFtZSk7CisJbWVtc2V0KCYoaW1hZ2UtPmJ1c19yZXNvdXJjZSksIDAsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpKTsKIH0KIAogLyoKQEAgLTkzNyw2ICs5MTcsOSBAQAogCXVuc2lnbmVkIGludCBwY2lfYm91bmRfbG93LCBwY2lfYm91bmRfaGlnaDsKIAl1bnNpZ25lZCBpbnQgdm1lX29mZnNldF9sb3csIHZtZV9vZmZzZXRfaGlnaDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgcGNpX2JvdW5kLCB2bWVfb2Zmc2V0LCBwY2lfYmFzZTsKKwlzdHJ1Y3QgdHNpMTQ4X2RyaXZlciAqYnJpZGdlOworCisJYnJpZGdlID0gaW1hZ2UtPnBhcmVudC0+ZHJpdmVyX3ByaXY7CiAKIAkvKiBWZXJpZnkgaW5wdXQgZGF0YSAqLwogCWlmICh2bWVfYmFzZSAmIDB4RkZGRikgewpAQCAtOTcwLDcgKzk1Myw3IEBACiAJCXBjaV9ib3VuZCA9IDA7CiAJCXZtZV9vZmZzZXQgPSAwOwogCX0gZWxzZSB7Ci0JCXBjaV9iYXNlID0gKHVuc2lnbmVkIGxvbmcgbG9uZylpbWFnZS0+cGNpX3Jlc291cmNlLnN0YXJ0OworCQlwY2lfYmFzZSA9ICh1bnNpZ25lZCBsb25nIGxvbmcpaW1hZ2UtPmJ1c19yZXNvdXJjZS5zdGFydDsKIAogCQkvKgogCQkgKiBCb3VuZCBhZGRyZXNzIGlzIGEgdmFsaWQgYWRkcmVzcyBmb3IgdGhlIHdpbmRvdywgYWRqdXN0CkBAIC0xMDA3LDI2ICs5OTAsMTIgQEAKIAlpID0gaW1hZ2UtPm51bWJlcjsKIAogCS8qIERpc2FibGUgd2hpbGUgd2UgYXJlIG11Y2tpbmcgYXJvdW5kICovCi0JdGVtcF9jdGwgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9PVFtpXSArCisJdGVtcF9jdGwgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX09UQVQpOwogCXRlbXBfY3RsICY9IH5UU0kxNDhfTENTUl9PVEFUX0VOOwotCWlvd3JpdGUzMmJlKHRlbXBfY3RsLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKworCWlvd3JpdGUzMmJlKHRlbXBfY3RsLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9PVFtpXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9PVEFUKTsKIAotLyogWFhYIFByZWZldGNoIHN0dWZmIGN1cnJlbnRseSB1bnN1cHBvcnRlZCAqLwotI2lmIDAKLQlpZiAodm1lT3V0LT5wcmVmZXRjaEVuYWJsZSkgewotCQl0ZW1wX2N0bCB8PSAweDQwMDAwOwotCQlmb3IgKHggPSAwOyB4IDwgNDsgeCsrKSB7Ci0JCQlpZiAoKDIgPDwgeCkgPj0gdm1lT3V0LT5wcmVmZXRjaFNpemUpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHggPT0gNCkKLQkJCXggPSAzOwotCQl0ZW1wX2N0bCB8PSAoeCA8PCAxNik7Ci0JfQotI2VuZGlmCi0KIAkvKiBTZXR1cCAyZVNTVCBzcGVlZHMgKi8KIAl0ZW1wX2N0bCAmPSB+VFNJMTQ4X0xDU1JfT1RBVF8yZVNTVE1fTTsKIAlzd2l0Y2ggKGN5Y2xlICYgKFZNRV8yZVNTVDE2MCB8IFZNRV8yZVNTVDI2NyB8IFZNRV8yZVNTVDMyMCkpIHsKQEAgLTExMjYsMzMgKzEwOTUsMjcgQEAKIAkJdGVtcF9jdGwgfD0gVFNJMTQ4X0xDU1JfT1RBVF9QR007CiAKIAkvKiBTZXR1cCBtYXBwaW5nICovCi0JaW93cml0ZTMyYmUocGNpX2Jhc2VfaGlnaCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKKwlpb3dyaXRlMzJiZShwY2lfYmFzZV9oaWdoLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9PVFtpXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9PVFNBVSk7Ci0JaW93cml0ZTMyYmUocGNpX2Jhc2VfbG93LCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKworCWlvd3JpdGUzMmJlKHBjaV9iYXNlX2xvdywgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfT1RTQUwpOwotCWlvd3JpdGUzMmJlKHBjaV9ib3VuZF9oaWdoLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKworCWlvd3JpdGUzMmJlKHBjaV9ib3VuZF9oaWdoLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9PVFtpXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9PVEVBVSk7Ci0JaW93cml0ZTMyYmUocGNpX2JvdW5kX2xvdywgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKKwlpb3dyaXRlMzJiZShwY2lfYm91bmRfbG93LCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9PVFtpXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9PVEVBTCk7Ci0JaW93cml0ZTMyYmUodm1lX29mZnNldF9oaWdoLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKworCWlvd3JpdGUzMmJlKHZtZV9vZmZzZXRfaGlnaCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfT1RPRlUpOwotCWlvd3JpdGUzMmJlKHZtZV9vZmZzZXRfbG93LCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKworCWlvd3JpdGUzMmJlKHZtZV9vZmZzZXRfbG93LCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9PVFtpXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9PVE9GTCk7CiAKLS8qIFhYWCBXZSBuZWVkIHRvIGRlYWwgd2l0aCBPVEJTICovCi0jaWYgMAotCWlvd3JpdGUzMmJlKHZtZU91dC0+YmNhc3RTZWxlY3QyZXNzdCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArCi0JCVRTSTE0OF9MQ1NSX09UW2ldICsgVFNJMTQ4X0xDU1JfT0ZGU0VUX09UQlMpOwotI2VuZGlmCi0KIAkvKiBXcml0ZSBjdGwgcmVnIHdpdGhvdXQgZW5hYmxlICovCi0JaW93cml0ZTMyYmUodGVtcF9jdGwsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9PVFtpXSArCisJaW93cml0ZTMyYmUodGVtcF9jdGwsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX09UQVQpOwogCiAJaWYgKGVuYWJsZWQpCiAJCXRlbXBfY3RsIHw9IFRTSTE0OF9MQ1NSX09UQVRfRU47CiAKLQlpb3dyaXRlMzJiZSh0ZW1wX2N0bCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKKwlpb3dyaXRlMzJiZSh0ZW1wX2N0bCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfT1RBVCk7CiAKIAlzcGluX3VubG9jaygmKGltYWdlLT5sb2NrKSk7CkBAIC0xMTgzLDIzICsxMTQ2LDI2IEBACiAJdW5zaWduZWQgaW50IHZtZV9vZmZzZXRfbG93LCB2bWVfb2Zmc2V0X2hpZ2g7CiAKIAl1bnNpZ25lZCBsb25nIGxvbmcgcGNpX2Jhc2UsIHBjaV9ib3VuZCwgdm1lX29mZnNldDsKKwlzdHJ1Y3QgdHNpMTQ4X2RyaXZlciAqYnJpZGdlOworCisJYnJpZGdlID0gaW1hZ2UtPnBhcmVudC0+ZHJpdmVyX3ByaXY7CiAKIAlpID0gaW1hZ2UtPm51bWJlcjsKIAotCWN0bCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKKwljdGwgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX09UQVQpOwogCi0JcGNpX2Jhc2VfaGlnaCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKKwlwY2lfYmFzZV9oaWdoID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9PVFtpXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9PVFNBVSk7Ci0JcGNpX2Jhc2VfbG93ID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKworCXBjaV9iYXNlX2xvdyA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfT1RTQUwpOwotCXBjaV9ib3VuZF9oaWdoID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKworCXBjaV9ib3VuZF9oaWdoID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9PVFtpXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9PVEVBVSk7Ci0JcGNpX2JvdW5kX2xvdyA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKKwlwY2lfYm91bmRfbG93ID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9PVFtpXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9PVEVBTCk7Ci0Jdm1lX29mZnNldF9oaWdoID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKworCXZtZV9vZmZzZXRfaGlnaCA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfT1RPRlUpOwotCXZtZV9vZmZzZXRfbG93ID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKworCXZtZV9vZmZzZXRfbG93ID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9PVFtpXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9PVE9GTCk7CiAKIAkvKiBDb252ZXJ0IDY0LWJpdCB2YXJpYWJsZXMgdG8gMnggMzItYml0IHZhcmlhYmxlcyAqLwpAQCAtMTMwNSw2ICsxMjcxLDkgQEAKIAl2bWVfY3ljbGVfdCBjeWNsZTsKIAl2bWVfd2lkdGhfdCBkd2lkdGg7CiAJc3RydWN0IHZtZV9idXNfZXJyb3IgKnZtZV9lcnIgPSBOVUxMOworCXN0cnVjdCB2bWVfYnJpZGdlICp0c2kxNDhfYnJpZGdlOworCisJdHNpMTQ4X2JyaWRnZSA9IGltYWdlLT5wYXJlbnQ7CiAKIAlzcGluX2xvY2soJihpbWFnZS0+bG9jaykpOwogCkBAIC0xMzE3LDEzICsxMjg2LDE1IEBACiAJX190c2kxNDhfbWFzdGVyX2dldChpbWFnZSwgJmVuYWJsZWQsICZ2bWVfYmFzZSwgJnNpemUsICZhc3BhY2UsICZjeWNsZSwKIAkJJmR3aWR0aCk7CiAKLQl2bWVfZXJyID0gdHNpMTQ4X2ZpbmRfZXJyb3IoYXNwYWNlLCB2bWVfYmFzZSArIG9mZnNldCwgY291bnQpOworCXZtZV9lcnIgPSB0c2kxNDhfZmluZF9lcnJvcih0c2kxNDhfYnJpZGdlLCBhc3BhY2UsIHZtZV9iYXNlICsgb2Zmc2V0LAorCQljb3VudCk7CiAJaWYodm1lX2VyciAhPSBOVUxMKSB7CiAJCWRldl9lcnIoaW1hZ2UtPnBhcmVudC0+cGFyZW50LCAiRmlyc3QgVk1FIHJlYWQgZXJyb3IgZGV0ZWN0ZWQgIgogCQkJImFuIGF0IGFkZHJlc3MgMHglbGx4XG4iLCB2bWVfZXJyLT5hZGRyZXNzKTsKIAkJcmV0dmFsID0gdm1lX2Vyci0+YWRkcmVzcyAtICh2bWVfYmFzZSArIG9mZnNldCk7CiAJCS8qIENsZWFyIGRvd24gc2F2ZSBlcnJvcnMgaW4gdGhpcyBhZGRyZXNzIHJhbmdlICovCi0JCXRzaTE0OF9jbGVhcl9lcnJvcnMoYXNwYWNlLCB2bWVfYmFzZSArIG9mZnNldCwgY291bnQpOworCQl0c2kxNDhfY2xlYXJfZXJyb3JzKHRzaTE0OF9icmlkZ2UsIGFzcGFjZSwgdm1lX2Jhc2UgKyBvZmZzZXQsCisJCQljb3VudCk7CiAJfQogCiBza2lwX2NoazoKQEAgLTEzMzMsOSArMTMwNCw2IEBACiB9CiAKIAotLyogWFhYIFdlIG5lZWQgdG8gY2hhbmdlIHZtZV9tYXN0ZXJfcmVzb3VyY2UtPm10eCB0byBhIHNwaW5sb2NrIHNvIHRoYXQgcmVhZAotICogICAgIGFuZCB3cml0ZSBmdW5jdGlvbnMgY2FuIGJlIHVzZWQgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQKLSAqLwogc3NpemVfdCB0c2kxNDhfbWFzdGVyX3dyaXRlKHN0cnVjdCB2bWVfbWFzdGVyX3Jlc291cmNlICppbWFnZSwgdm9pZCAqYnVmLAogCXNpemVfdCBjb3VudCwgbG9mZl90IG9mZnNldCkKIHsKQEAgLTEzNDYsNiArMTMxNCwxMiBAQAogCXZtZV93aWR0aF90IGR3aWR0aDsKIAogCXN0cnVjdCB2bWVfYnVzX2Vycm9yICp2bWVfZXJyID0gTlVMTDsKKwlzdHJ1Y3Qgdm1lX2JyaWRnZSAqdHNpMTQ4X2JyaWRnZTsKKwlzdHJ1Y3QgdHNpMTQ4X2RyaXZlciAqYnJpZGdlOworCisJdHNpMTQ4X2JyaWRnZSA9IGltYWdlLT5wYXJlbnQ7CisKKwlicmlkZ2UgPSB0c2kxNDhfYnJpZGdlLT5kcml2ZXJfcHJpdjsKIAogCXNwaW5fbG9jaygmKGltYWdlLT5sb2NrKSk7CiAKQEAgLTEzNzMsMTUgKzEzNDcsMTcgQEAKIAlfX3RzaTE0OF9tYXN0ZXJfZ2V0KGltYWdlLCAmZW5hYmxlZCwgJnZtZV9iYXNlLCAmc2l6ZSwgJmFzcGFjZSwgJmN5Y2xlLAogCQkmZHdpZHRoKTsKIAotCWlvcmVhZDE2KGZsdXNoX2ltYWdlLT5rZXJuX2Jhc2UgKyAweDdGMDAwKTsKKwlpb3JlYWQxNihicmlkZ2UtPmZsdXNoX2ltYWdlLT5rZXJuX2Jhc2UgKyAweDdGMDAwKTsKIAotCXZtZV9lcnIgPSB0c2kxNDhfZmluZF9lcnJvcihhc3BhY2UsIHZtZV9iYXNlICsgb2Zmc2V0LCBjb3VudCk7CisJdm1lX2VyciA9IHRzaTE0OF9maW5kX2Vycm9yKHRzaTE0OF9icmlkZ2UsIGFzcGFjZSwgdm1lX2Jhc2UgKyBvZmZzZXQsCisJCWNvdW50KTsKIAlpZih2bWVfZXJyICE9IE5VTEwpIHsKIAkJcHJpbnRrKCJGaXJzdCBWTUUgd3JpdGUgZXJyb3IgZGV0ZWN0ZWQgYW4gYXQgYWRkcmVzcyAweCVsbHhcbiIsCiAJCQl2bWVfZXJyLT5hZGRyZXNzKTsKIAkJcmV0dmFsID0gdm1lX2Vyci0+YWRkcmVzcyAtICh2bWVfYmFzZSArIG9mZnNldCk7CiAJCS8qIENsZWFyIGRvd24gc2F2ZSBlcnJvcnMgaW4gdGhpcyBhZGRyZXNzIHJhbmdlICovCi0JCXRzaTE0OF9jbGVhcl9lcnJvcnMoYXNwYWNlLCB2bWVfYmFzZSArIG9mZnNldCwgY291bnQpOworCQl0c2kxNDhfY2xlYXJfZXJyb3JzKHRzaTE0OF9icmlkZ2UsIGFzcGFjZSwgdm1lX2Jhc2UgKyBvZmZzZXQsCisJCQljb3VudCk7CiAJfQogCiBza2lwX2NoazoKQEAgLTE0MDMsNDggKzEzNzksNTAgQEAKIAl1bnNpZ25lZCBpbnQgcGNpX2FkZHJfaGlnaCwgcGNpX2FkZHJfbG93OwogCXUzMiB0bXAsIHJlc3VsdDsKIAlpbnQgaTsKKwlzdHJ1Y3QgdHNpMTQ4X2RyaXZlciAqYnJpZGdlOwogCisJYnJpZGdlID0gaW1hZ2UtPnBhcmVudC0+ZHJpdmVyX3ByaXY7CiAKIAkvKiBGaW5kIHRoZSBQQ0kgYWRkcmVzcyB0aGF0IG1hcHMgdG8gdGhlIGRlc2lyZWQgVk1FIGFkZHJlc3MgKi8KIAlpID0gaW1hZ2UtPm51bWJlcjsKIAogCS8qIExvY2tpbmcgYXMgd2UgY2FuIG9ubHkgZG8gb25lIG9mIHRoZXNlIGF0IGEgdGltZSAqLwotCW11dGV4X2xvY2soJih2bWVfcm13KSk7CisJbXV0ZXhfbG9jaygmKGJyaWRnZS0+dm1lX3JtdykpOwogCiAJLyogTG9jayBpbWFnZSAqLwogCXNwaW5fbG9jaygmKGltYWdlLT5sb2NrKSk7CiAKLQlwY2lfYWRkcl9oaWdoID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKworCXBjaV9hZGRyX2hpZ2ggPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX09UU0FVKTsKLQlwY2lfYWRkcl9sb3cgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9PVFtpXSArCisJcGNpX2FkZHJfbG93ID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9PVFtpXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9PVFNBTCk7CiAKIAlyZWdfam9pbihwY2lfYWRkcl9oaWdoLCBwY2lfYWRkcl9sb3csICZwY2lfYWRkcik7CiAJcmVnX3NwbGl0KHBjaV9hZGRyICsgb2Zmc2V0LCAmcGNpX2FkZHJfaGlnaCwgJnBjaV9hZGRyX2xvdyk7CiAKIAkvKiBDb25maWd1cmUgcmVnaXN0ZXJzICovCi0JaW93cml0ZTMyYmUobWFzaywgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1JNV0VOKTsKLQlpb3dyaXRlMzJiZShjb21wYXJlLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfUk1XQyk7Ci0JaW93cml0ZTMyYmUoc3dhcCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1JNV1MpOwotCWlvd3JpdGUzMmJlKHBjaV9hZGRyX2hpZ2gsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9STVdBVSk7Ci0JaW93cml0ZTMyYmUocGNpX2FkZHJfbG93LCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfUk1XQUwpOworCWlvd3JpdGUzMmJlKG1hc2ssIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1JNV0VOKTsKKwlpb3dyaXRlMzJiZShjb21wYXJlLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9STVdDKTsKKwlpb3dyaXRlMzJiZShzd2FwLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9STVdTKTsKKwlpb3dyaXRlMzJiZShwY2lfYWRkcl9oaWdoLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9STVdBVSk7CisJaW93cml0ZTMyYmUocGNpX2FkZHJfbG93LCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9STVdBTCk7CiAKIAkvKiBFbmFibGUgUk1XICovCi0JdG1wID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVk1DVFJMKTsKKwl0bXAgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZNQ1RSTCk7CiAJdG1wIHw9IFRTSTE0OF9MQ1NSX1ZNQ1RSTF9STVdFTjsKLQlpb3dyaXRlMzJiZSh0bXAsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WTUNUUkwpOworCWlvd3JpdGUzMmJlKHRtcCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVk1DVFJMKTsKIAogCS8qIEtpY2sgcHJvY2VzcyBvZmYgd2l0aCBhIHJlYWQgdG8gdGhlIHJlcXVpcmVkIGFkZHJlc3MuICovCiAJcmVzdWx0ID0gaW9yZWFkMzJiZShpbWFnZS0+a2Vybl9iYXNlICsgb2Zmc2V0KTsKIAogCS8qIERpc2FibGUgUk1XICovCi0JdG1wID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVk1DVFJMKTsKKwl0bXAgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZNQ1RSTCk7CiAJdG1wICY9IH5UU0kxNDhfTENTUl9WTUNUUkxfUk1XRU47Ci0JaW93cml0ZTMyYmUodG1wLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVk1DVFJMKTsKKwlpb3dyaXRlMzJiZSh0bXAsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZNQ1RSTCk7CiAKIAlzcGluX3VubG9jaygmKGltYWdlLT5sb2NrKSk7CiAKLQltdXRleF91bmxvY2soJih2bWVfcm13KSk7CisJbXV0ZXhfdW5sb2NrKCYoYnJpZGdlLT52bWVfcm13KSk7CiAKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtMTYzNyw4ICsxNjE1LDYgQEAKIAogLyoKICAqIEFkZCBhIGxpbmsgbGlzdCBkZXNjcmlwdG9yIHRvIHRoZSBsaXN0Ci0gKgotICogWFhYIE5lZWQgdG8gaGFuZGxlIDJlU1NUIEJyb2FkY2FzdCBzZWxlY3QgYml0cwogICovCiBpbnQgdHNpMTQ4X2RtYV9saXN0X2FkZCAoc3RydWN0IHZtZV9kbWFfbGlzdCAqbGlzdCwgc3RydWN0IHZtZV9kbWFfYXR0ciAqc3JjLAogCXN0cnVjdCB2bWVfZG1hX2F0dHIgKmRlc3QsIHNpemVfdCBjb3VudCkKQEAgLTE2NTEsNyArMTYyNyw3IEBACiAJZG1hX2FkZHJfdCBkZXNjX3B0cjsKIAlpbnQgcmV0dmFsID0gMDsKIAotCS8qIFhYWCBkZXNjcmlwdG9yIG11c3QgYmUgYWxpZ25lZCBvbiA2NC1iaXQgYm91bmRhcmllcyAqLworCS8qIERlc2NyaXB0b3IgbXVzdCBiZSBhbGlnbmVkIG9uIDY0LWJpdCBib3VuZGFyaWVzICovCiAJZW50cnkgPSAoc3RydWN0IHRzaTE0OF9kbWFfZW50cnkgKilrbWFsbG9jKAogCQlzaXplb2Yoc3RydWN0IHRzaTE0OF9kbWFfZW50cnkpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZW50cnkgPT0gTlVMTCkgewpAQCAtMTc4OCwxMSArMTc2NCwxNCBAQAogLyoKICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvdmlkZWQgRE1BIGNoYW5uZWwgaXMgYnVzeS4KICAqLwotc3RhdGljIGludCB0c2kxNDhfZG1hX2J1c3koaW50IGNoYW5uZWwpCitzdGF0aWMgaW50IHRzaTE0OF9kbWFfYnVzeShzdHJ1Y3Qgdm1lX2JyaWRnZSAqdHNpMTQ4X2JyaWRnZSwgaW50IGNoYW5uZWwpCiB7CiAJdTMyIHRtcDsKKwlzdHJ1Y3QgdHNpMTQ4X2RyaXZlciAqYnJpZGdlOwogCi0JdG1wID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfRE1BW2NoYW5uZWxdICsKKwlicmlkZ2UgPSB0c2kxNDhfYnJpZGdlLT5kcml2ZXJfcHJpdjsKKworCXRtcCA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfRE1BW2NoYW5uZWxdICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX0RTVEEpOwogCiAJaWYgKHRtcCAmIFRTSTE0OF9MQ1NSX0RTVEFfQlNZKQpAQCAtMTgxNSwxMiArMTc5NCwxMiBAQAogCWRtYV9hZGRyX3QgYnVzX2FkZHI7CiAJdTMyIGJ1c19hZGRyX2hpZ2gsIGJ1c19hZGRyX2xvdzsKIAl1MzIgdmFsLCBkY3RscmVnID0gMDsKLSNpZiAwCi0JaW50IHg7Ci0jZW5kaWYKKwlzdHJ1Y3QgdHNpMTQ4X2RyaXZlciAqYnJpZGdlOwogCiAJY3RybHIgPSBsaXN0LT5wYXJlbnQ7CiAKKwlicmlkZ2UgPSBjdHJsci0+cGFyZW50LT5kcml2ZXJfcHJpdjsKKwogCW11dGV4X2xvY2soJihjdHJsci0+bXR4KSk7CiAKIAljaGFubmVsID0gY3RybHItPm51bWJlcjsKQEAgLTE4MzcsNDggKzE4MTYsNiBAQAogCX0gZWxzZSB7CiAJCWxpc3RfYWRkKCYobGlzdC0+bGlzdCksICYoY3RybHItPnJ1bm5pbmcpKTsKIAl9Ci0jaWYgMAotCS8qIFhYWCBTdGlsbCB0b2RvICovCi0JZm9yICh4ID0gMDsgeCA8IDg7IHgrKykgewkvKiB2bWUgYmxvY2sgc2l6ZSAqLwotCQlpZiAoKDMyIDw8IHgpID49IHZtZURtYS0+bWF4Vm1lQmxvY2tTaXplKSB7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAoeCA9PSA4KQotCQl4ID0gNzsKLQlkY3RscmVnIHw9ICh4IDw8IDEyKTsKLQotCWZvciAoeCA9IDA7IHggPCA4OyB4KyspIHsJLyogcGNpIGJsb2NrIHNpemUgKi8KLQkJaWYgKCgzMiA8PCB4KSA+PSB2bWVEbWEtPm1heFBjaUJsb2NrU2l6ZSkgewotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKHggPT0gOCkKLQkJeCA9IDc7Ci0JZGN0bHJlZyB8PSAoeCA8PCA0KTsKLQotCWlmICh2bWVEbWEtPnZtZUJhY2tPZmZUaW1lcikgewotCQlmb3IgKHggPSAxOyB4IDwgODsgeCsrKSB7CS8qIHZtZSB0aW1lciAqLwotCQkJaWYgKCgxIDw8ICh4IC0gMSkpID49IHZtZURtYS0+dm1lQmFja09mZlRpbWVyKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKHggPT0gOCkKLQkJCXggPSA3OwotCQlkY3RscmVnIHw9ICh4IDw8IDgpOwotCX0KLQotCWlmICh2bWVEbWEtPnBjaUJhY2tPZmZUaW1lcikgewotCQlmb3IgKHggPSAxOyB4IDwgODsgeCsrKSB7CS8qIHBjaSB0aW1lciAqLwotCQkJaWYgKCgxIDw8ICh4IC0gMSkpID49IHZtZURtYS0+cGNpQmFja09mZlRpbWVyKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKHggPT0gOCkKLQkJCXggPSA3OwotCQlkY3RscmVnIHw9ICh4IDw8IDApOwotCX0KLSNlbmRpZgogCiAJLyogR2V0IGZpcnN0IGJ1cyBhZGRyZXNzIGFuZCB3cml0ZSBpbnRvIHJlZ2lzdGVycyAqLwogCWVudHJ5ID0gbGlzdF9maXJzdF9lbnRyeSgmKGxpc3QtPmVudHJpZXMpLCBzdHJ1Y3QgdHNpMTQ4X2RtYV9lbnRyeSwKQEAgLTE4OTAsMjEgKzE4MjcsMjIgQEAKIAogCXJlZ19zcGxpdChidXNfYWRkciwgJmJ1c19hZGRyX2hpZ2gsICZidXNfYWRkcl9sb3cpOwogCi0JaW93cml0ZTMyYmUoYnVzX2FkZHJfaGlnaCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArCisJaW93cml0ZTMyYmUoYnVzX2FkZHJfaGlnaCwgYnJpZGdlLT5iYXNlICsKIAkJVFNJMTQ4X0xDU1JfRE1BW2NoYW5uZWxdICsgVFNJMTQ4X0xDU1JfT0ZGU0VUX0ROTEFVKTsKLQlpb3dyaXRlMzJiZShidXNfYWRkcl9sb3csIHRzaTE0OF9icmlkZ2UtPmJhc2UgKworCWlvd3JpdGUzMmJlKGJ1c19hZGRyX2xvdywgYnJpZGdlLT5iYXNlICsKIAkJVFNJMTQ4X0xDU1JfRE1BW2NoYW5uZWxdICsgVFNJMTQ4X0xDU1JfT0ZGU0VUX0ROTEFMKTsKIAogCS8qIFN0YXJ0IHRoZSBvcGVyYXRpb24gKi8KLQlpb3dyaXRlMzJiZShkY3RscmVnIHwgVFNJMTQ4X0xDU1JfRENUTF9ER08sIHRzaTE0OF9icmlkZ2UtPmJhc2UgKworCWlvd3JpdGUzMmJlKGRjdGxyZWcgfCBUU0kxNDhfTENTUl9EQ1RMX0RHTywgYnJpZGdlLT5iYXNlICsKIAkJVFNJMTQ4X0xDU1JfRE1BW2NoYW5uZWxdICsgVFNJMTQ4X0xDU1JfT0ZGU0VUX0RDVEwpOwogCi0Jd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRtYV9xdWV1ZVtjaGFubmVsXSwgdHNpMTQ4X2RtYV9idXN5KGNoYW5uZWwpKTsKKwl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoYnJpZGdlLT5kbWFfcXVldWVbY2hhbm5lbF0sCisJCXRzaTE0OF9kbWFfYnVzeShjdHJsci0+cGFyZW50LCBjaGFubmVsKSk7CiAJLyoKIAkgKiBSZWFkIHN0YXR1cyByZWdpc3RlciwgdGhpcyByZWdpc3RlciBpcyB2YWxpZCB1bnRpbCB3ZSBraWNrIG9mZiBhCiAJICogbmV3IHRyYW5zZmVyLgogCSAqLwotCXZhbCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0RNQVtjaGFubmVsXSArCisJdmFsID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9ETUFbY2hhbm5lbF0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfRFNUQSk7CiAKIAlpZiAodmFsICYgVFNJMTQ4X0xDU1JfRFNUQV9WQkUpIHsKQEAgLTE5NTIsMTIgKzE4OTAsMTUgQEAKIHsKIAl1MzIgbG1fYmFzZV9oaWdoLCBsbV9iYXNlX2xvdywgbG1fY3RsID0gMDsKIAlpbnQgaTsKKwlzdHJ1Y3QgdHNpMTQ4X2RyaXZlciAqYnJpZGdlOworCisJYnJpZGdlID0gbG0tPnBhcmVudC0+ZHJpdmVyX3ByaXY7CiAKIAltdXRleF9sb2NrKCYobG0tPm10eCkpOwogCiAJLyogSWYgd2UgYWxyZWFkeSBoYXZlIGEgY2FsbGJhY2sgYXR0YWNoZWQsIHdlIGNhbid0IG1vdmUgaXQhICovCiAJZm9yIChpID0gMDsgaSA8IGxtLT5tb25pdG9yczsgaSsrKSB7Ci0JCWlmKGxtX2NhbGxiYWNrW2ldICE9IE5VTEwpIHsKKwkJaWYgKGJyaWRnZS0+bG1fY2FsbGJhY2tbaV0gIT0gTlVMTCkgewogCQkJbXV0ZXhfdW5sb2NrKCYobG0tPm10eCkpOwogCQkJcHJpbnRrKCJMb2NhdGlvbiBtb25pdG9yIGNhbGxiYWNrIGF0dGFjaGVkLCBjYW4ndCAiCiAJCQkJInJlc2V0XG4iKTsKQEAgLTE5OTYsOSArMTkzNyw5IEBACiAKIAlyZWdfc3BsaXQobG1fYmFzZSwgJmxtX2Jhc2VfaGlnaCwgJmxtX2Jhc2VfbG93KTsKIAotCWlvd3JpdGUzMmJlKGxtX2Jhc2VfaGlnaCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0xNQkFVKTsKLQlpb3dyaXRlMzJiZShsbV9iYXNlX2xvdywgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0xNQkFMKTsKLQlpb3dyaXRlMzJiZShsbV9jdGwsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9MTUFUKTsKKwlpb3dyaXRlMzJiZShsbV9iYXNlX2hpZ2gsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0xNQkFVKTsKKwlpb3dyaXRlMzJiZShsbV9iYXNlX2xvdywgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfTE1CQUwpOworCWlvd3JpdGUzMmJlKGxtX2N0bCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfTE1BVCk7CiAKIAltdXRleF91bmxvY2soJihsbS0+bXR4KSk7CiAKQEAgLTIwMTIsMTIgKzE5NTMsMTUgQEAKIAl2bWVfYWRkcmVzc190ICphc3BhY2UsIHZtZV9jeWNsZV90ICpjeWNsZSkKIHsKIAl1MzIgbG1fYmFzZV9oaWdoLCBsbV9iYXNlX2xvdywgbG1fY3RsLCBlbmFibGVkID0gMDsKKwlzdHJ1Y3QgdHNpMTQ4X2RyaXZlciAqYnJpZGdlOworCisJYnJpZGdlID0gbG0tPnBhcmVudC0+ZHJpdmVyX3ByaXY7CiAKIAltdXRleF9sb2NrKCYobG0tPm10eCkpOwogCi0JbG1fYmFzZV9oaWdoID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfTE1CQVUpOwotCWxtX2Jhc2VfbG93ID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfTE1CQUwpOwotCWxtX2N0bCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0xNQVQpOworCWxtX2Jhc2VfaGlnaCA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfTE1CQVUpOworCWxtX2Jhc2VfbG93ID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9MTUJBTCk7CisJbG1fY3RsID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9MTUFUKTsKIAogCXJlZ19qb2luKGxtX2Jhc2VfaGlnaCwgbG1fYmFzZV9sb3csIGxtX2Jhc2UpOwogCkBAIC0yMDYwLDExICsyMDA0LDE0IEBACiAJdm9pZCAoKmNhbGxiYWNrKShpbnQpKQogewogCXUzMiBsbV9jdGwsIHRtcDsKKwlzdHJ1Y3QgdHNpMTQ4X2RyaXZlciAqYnJpZGdlOworCisJYnJpZGdlID0gbG0tPnBhcmVudC0+ZHJpdmVyX3ByaXY7CiAKIAltdXRleF9sb2NrKCYobG0tPm10eCkpOwogCiAJLyogRW5zdXJlIHRoYXQgdGhlIGxvY2F0aW9uIG1vbml0b3IgaXMgY29uZmlndXJlZCAtIG5lZWQgUEdNIG9yIERBVEEgKi8KLQlsbV9jdGwgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9MTUFUKTsKKwlsbV9jdGwgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0xNQVQpOwogCWlmICgobG1fY3RsICYgKFRTSTE0OF9MQ1NSX0xNQVRfUEdNIHwgVFNJMTQ4X0xDU1JfTE1BVF9EQVRBKSkgPT0gMCkgewogCQltdXRleF91bmxvY2soJihsbS0+bXR4KSk7CiAJCXByaW50aygiTG9jYXRpb24gbW9uaXRvciBub3QgcHJvcGVybHkgY29uZmlndXJlZFxuIik7CkBAIC0yMDcyLDI4ICsyMDE5LDI4IEBACiAJfQogCiAJLyogQ2hlY2sgdGhhdCBhIGNhbGxiYWNrIGlzbid0IGFscmVhZHkgYXR0YWNoZWQgKi8KLQlpZiAobG1fY2FsbGJhY2tbbW9uaXRvcl0gIT0gTlVMTCkgeworCWlmIChicmlkZ2UtPmxtX2NhbGxiYWNrW21vbml0b3JdICE9IE5VTEwpIHsKIAkJbXV0ZXhfdW5sb2NrKCYobG0tPm10eCkpOwogCQlwcmludGsoIkV4aXN0aW5nIGNhbGxiYWNrIGF0dGFjaGVkXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKIAkvKiBBdHRhY2ggY2FsbGJhY2sgKi8KLQlsbV9jYWxsYmFja1ttb25pdG9yXSA9IGNhbGxiYWNrOworCWJyaWRnZS0+bG1fY2FsbGJhY2tbbW9uaXRvcl0gPSBjYWxsYmFjazsKIAogCS8qIEVuYWJsZSBMb2NhdGlvbiBNb25pdG9yIGludGVycnVwdCAqLwotCXRtcCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEVOKTsKKwl0bXAgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEVOKTsKIAl0bXAgfD0gVFNJMTQ4X0xDU1JfSU5URU5fTE1FTlttb25pdG9yXTsKLQlpb3dyaXRlMzJiZSh0bXAsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTik7CisJaW93cml0ZTMyYmUodG1wLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTik7CiAKLQl0bXAgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTyk7CisJdG1wID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTyk7CiAJdG1wIHw9IFRTSTE0OF9MQ1NSX0lOVEVPX0xNRU9bbW9uaXRvcl07Ci0JaW93cml0ZTMyYmUodG1wLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU8pOworCWlvd3JpdGUzMmJlKHRtcCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU8pOwogCiAJLyogRW5zdXJlIHRoYXQgZ2xvYmFsIExvY2F0aW9uIE1vbml0b3IgRW5hYmxlIHNldCAqLwogCWlmICgobG1fY3RsICYgVFNJMTQ4X0xDU1JfTE1BVF9FTikgPT0gMCkgewogCQlsbV9jdGwgfD0gVFNJMTQ4X0xDU1JfTE1BVF9FTjsKLQkJaW93cml0ZTMyYmUobG1fY3RsLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfTE1BVCk7CisJCWlvd3JpdGUzMmJlKGxtX2N0bCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfTE1BVCk7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCYobG0tPm10eCkpOwpAQCAtMjEwNywzMCArMjA1NCwzMyBAQAogaW50IHRzaTE0OF9sbV9kZXRhY2goc3RydWN0IHZtZV9sbV9yZXNvdXJjZSAqbG0sIGludCBtb25pdG9yKQogewogCXUzMiBsbV9lbiwgdG1wOworCXN0cnVjdCB0c2kxNDhfZHJpdmVyICpicmlkZ2U7CisKKwlicmlkZ2UgPSBsbS0+cGFyZW50LT5kcml2ZXJfcHJpdjsKIAogCW11dGV4X2xvY2soJihsbS0+bXR4KSk7CiAKIAkvKiBEaXNhYmxlIExvY2F0aW9uIE1vbml0b3IgYW5kIGVuc3VyZSBwcmV2aW91cyBpbnRlcnJ1cHRzIGFyZSBjbGVhciAqLwotCWxtX2VuID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU4pOworCWxtX2VuID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTik7CiAJbG1fZW4gJj0gflRTSTE0OF9MQ1NSX0lOVEVOX0xNRU5bbW9uaXRvcl07Ci0JaW93cml0ZTMyYmUobG1fZW4sIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTik7CisJaW93cml0ZTMyYmUobG1fZW4sIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEVOKTsKIAotCXRtcCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEVPKTsKKwl0bXAgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEVPKTsKIAl0bXAgJj0gflRTSTE0OF9MQ1NSX0lOVEVPX0xNRU9bbW9uaXRvcl07Ci0JaW93cml0ZTMyYmUodG1wLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU8pOworCWlvd3JpdGUzMmJlKHRtcCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU8pOwogCiAJaW93cml0ZTMyYmUoVFNJMTQ4X0xDU1JfSU5UQ19MTUNbbW9uaXRvcl0sCi0JCSB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5UQyk7CisJCSBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRDKTsKIAogCS8qIERldGFjaCBjYWxsYmFjayAqLwotCWxtX2NhbGxiYWNrW21vbml0b3JdID0gTlVMTDsKKwlicmlkZ2UtPmxtX2NhbGxiYWNrW21vbml0b3JdID0gTlVMTDsKIAogCS8qIElmIGFsbCBsb2NhdGlvbiBtb25pdG9ycyBkaXNhYmxlZCwgZGlzYWJsZSBnbG9iYWwgTG9jYXRpb24gTW9uaXRvciAqLwogCWlmICgobG1fZW4gJiAoVFNJMTQ4X0xDU1JfSU5UU19MTTBTIHwgVFNJMTQ4X0xDU1JfSU5UU19MTTFTIHwKIAkJCVRTSTE0OF9MQ1NSX0lOVFNfTE0yUyB8IFRTSTE0OF9MQ1NSX0lOVFNfTE0zUykpID09IDApIHsKLQkJdG1wID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfTE1BVCk7CisJCXRtcCA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfTE1BVCk7CiAJCXRtcCAmPSB+VFNJMTQ4X0xDU1JfTE1BVF9FTjsKLQkJaW93cml0ZTMyYmUodG1wLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfTE1BVCk7CisJCWlvd3JpdGUzMmJlKHRtcCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfTE1BVCk7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCYobG0tPm10eCkpOwpAQCAtMjE0MSwxMiArMjA5MSwxOSBAQAogLyoKICAqIERldGVybWluZSBHZW9ncmFwaGljYWwgQWRkcmVzc2luZwogICovCi1pbnQgdHNpMTQ4X3Nsb3RfZ2V0KHZvaWQpCitpbnQgdHNpMTQ4X3Nsb3RfZ2V0KHN0cnVjdCB2bWVfYnJpZGdlICp0c2kxNDhfYnJpZGdlKQogewogICAgICAgICB1MzIgc2xvdCA9IDA7CisJc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZTsKIAotCXNsb3QgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WU1RBVCk7Ci0Jc2xvdCA9IHNsb3QgJiBUU0kxNDhfTENTUl9WU1RBVF9HQV9NOworCWJyaWRnZSA9IHRzaTE0OF9icmlkZ2UtPmRyaXZlcl9wcml2OworCisJaWYgKCFnZW9pZCkgeworCQlzbG90ID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WU1RBVCk7CisJCXNsb3QgPSBzbG90ICYgVFNJMTQ4X0xDU1JfVlNUQVRfR0FfTTsKKwl9IGVsc2UKKwkJc2xvdCA9IGdlb2lkOworCiAJcmV0dXJuIChpbnQpc2xvdDsKIH0KIApAQCAtMjE2Nyw0NSArMjEyNCw1MCBAQAogICogYm9hcmRzIHJlZ2lzdGVycywgdGhpcyBtZWFucyB0aGVyZSBpcyBhIGZpeCBsZW5ndGggNTA4a0Igd2luZG93IHdoaWNoIG11c3QKICAqIGJlIG1hcHBlZCBvbnRvIFBDSSBtZW1vcnkuCiAgKi8KLXN0YXRpYyBpbnQgdHNpMTQ4X2NyY3NyX2luaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgaW50IHRzaTE0OF9jcmNzcl9pbml0KHN0cnVjdCB2bWVfYnJpZGdlICp0c2kxNDhfYnJpZGdlLAorCXN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXUzMiBjYmFyLCBjcmF0LCB2c3RhdDsKIAl1MzIgY3Jjc3JfYnVzX2hpZ2gsIGNyY3NyX2J1c19sb3c7CiAJaW50IHJldHZhbDsKKwlzdHJ1Y3QgdHNpMTQ4X2RyaXZlciAqYnJpZGdlOworCisJYnJpZGdlID0gdHNpMTQ4X2JyaWRnZS0+ZHJpdmVyX3ByaXY7CiAKIAkvKiBBbGxvY2F0ZSBtZW0gZm9yIENSL0NTUiBpbWFnZSAqLwotCWNyY3NyX2tlcm5lbCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIFZNRV9DUkNTUl9CVUZfU0laRSwKLQkJJmNyY3NyX2J1cyk7Ci0JaWYgKGNyY3NyX2tlcm5lbCA9PSBOVUxMKSB7CisJYnJpZGdlLT5jcmNzcl9rZXJuZWwgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCBWTUVfQ1JDU1JfQlVGX1NJWkUsCisJCSYoYnJpZGdlLT5jcmNzcl9idXMpKTsKKwlpZiAoYnJpZGdlLT5jcmNzcl9rZXJuZWwgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBDUi9DU1IgIgogCQkJImltYWdlXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JbWVtc2V0KGNyY3NyX2tlcm5lbCwgMCwgVk1FX0NSQ1NSX0JVRl9TSVpFKTsKKwltZW1zZXQoYnJpZGdlLT5jcmNzcl9rZXJuZWwsIDAsIFZNRV9DUkNTUl9CVUZfU0laRSk7CiAKLQlyZWdfc3BsaXQoY3Jjc3JfYnVzLCAmY3Jjc3JfYnVzX2hpZ2gsICZjcmNzcl9idXNfbG93KTsKKwlyZWdfc3BsaXQoYnJpZGdlLT5jcmNzcl9idXMsICZjcmNzcl9idXNfaGlnaCwgJmNyY3NyX2J1c19sb3cpOwogCi0JaW93cml0ZTMyYmUoY3Jjc3JfYnVzX2hpZ2gsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9DUk9VKTsKLQlpb3dyaXRlMzJiZShjcmNzcl9idXNfbG93LCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfQ1JPTCk7CisJaW93cml0ZTMyYmUoY3Jjc3JfYnVzX2hpZ2gsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0NST1UpOworCWlvd3JpdGUzMmJlKGNyY3NyX2J1c19sb3csIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0NST0wpOwogCiAJLyogRW5zdXJlIHRoYXQgdGhlIENSL0NTUiBpcyBjb25maWd1cmVkIGF0IHRoZSBjb3JyZWN0IG9mZnNldCAqLwotCWNiYXIgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfQ0JBUik7CisJY2JhciA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0NCQVIpOwogCWNiYXIgPSAoY2JhciAmIFRTSTE0OF9DUkNTUl9DQkFSX00pPj4zOwogCi0JdnN0YXQgPSB0c2kxNDhfc2xvdF9nZXQoKTsKKwl2c3RhdCA9IHRzaTE0OF9zbG90X2dldCh0c2kxNDhfYnJpZGdlKTsKIAogCWlmIChjYmFyICE9IHZzdGF0KSB7CisJCWNiYXIgPSB2c3RhdDsKIAkJZGV2X2luZm8oJnBkZXYtPmRldiwgIlNldHRpbmcgQ1IvQ1NSIG9mZnNldFxuIik7Ci0JCWlvd3JpdGUzMmJlKGNiYXI8PDMsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfQ0JBUik7CisJCWlvd3JpdGUzMmJlKGNiYXI8PDMsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9DQkFSKTsKIAl9CiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIkNSL0NTUiBPZmZzZXQ6ICVkXG4iLCBjYmFyKTsKIAotCWNyYXQgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9DUkFUKTsKKwljcmF0ID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9DUkFUKTsKIAlpZiAoY3JhdCAmIFRTSTE0OF9MQ1NSX0NSQVRfRU4pIHsKIAkJZGV2X2luZm8oJnBkZXYtPmRldiwgIkVuYWJsaW5nIENSL0NTUiBzcGFjZVxuIik7CiAJCWlvd3JpdGUzMmJlKGNyYXQgfCBUU0kxNDhfTENTUl9DUkFUX0VOLAotCQkJdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0NSQVQpOworCQkJYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfQ1JBVCk7CiAJfSBlbHNlCiAJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJDUi9DU1IgYWxyZWFkeSBlbmFibGVkXG4iKTsKIApAQCAtMjIxNCw4ICsyMTc2LDkgQEAKIAkgKiB0aHJvdWdoIFZNRSB3cml0ZXMuCiAJICovCiAJaWYoZXJyX2NoaykgewotCQlyZXR2YWwgPSB0c2kxNDhfbWFzdGVyX3NldChmbHVzaF9pbWFnZSwgMSwgKHZzdGF0ICogMHg4MDAwMCksCi0JCQkweDgwMDAwLCBWTUVfQ1JDU1IsIFZNRV9TQ1QsIFZNRV9EMTYpOworCQlyZXR2YWwgPSB0c2kxNDhfbWFzdGVyX3NldChicmlkZ2UtPmZsdXNoX2ltYWdlLCAxLAorCQkJKHZzdGF0ICogMHg4MDAwMCksIDB4ODAwMDAsIFZNRV9DUkNTUiwgVk1FX1NDVCwKKwkJCVZNRV9EMTYpOwogCQlpZiAocmV0dmFsKQogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ29uZmlndXJpbmcgZmx1c2ggaW1hZ2UgZmFpbGVkXG4iKTsKIAl9CkBAIC0yMjI0LDIwICsyMTg3LDI1IEBACiAKIH0KIAotc3RhdGljIHZvaWQgdHNpMTQ4X2NyY3NyX2V4aXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgdm9pZCB0c2kxNDhfY3Jjc3JfZXhpdChzdHJ1Y3Qgdm1lX2JyaWRnZSAqdHNpMTQ4X2JyaWRnZSwKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAl1MzIgY3JhdDsKKwlzdHJ1Y3QgdHNpMTQ4X2RyaXZlciAqYnJpZGdlOworCisJYnJpZGdlID0gdHNpMTQ4X2JyaWRnZS0+ZHJpdmVyX3ByaXY7CiAKIAkvKiBUdXJuIG9mZiBDUi9DU1Igc3BhY2UgKi8KLQljcmF0ID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfQ1JBVCk7CisJY3JhdCA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfQ1JBVCk7CiAJaW93cml0ZTMyYmUoY3JhdCAmIH5UU0kxNDhfTENTUl9DUkFUX0VOLAotCQl0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfQ1JBVCk7CisJCWJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0NSQVQpOwogCiAJLyogRnJlZSBpbWFnZSAqLwotCWlvd3JpdGUzMmJlKDAsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9DUk9VKTsKLQlpb3dyaXRlMzJiZSgwLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfQ1JPTCk7CisJaW93cml0ZTMyYmUoMCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfQ1JPVSk7CisJaW93cml0ZTMyYmUoMCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfQ1JPTCk7CiAKLQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIFZNRV9DUkNTUl9CVUZfU0laRSwgY3Jjc3Jfa2VybmVsLCBjcmNzcl9idXMpOworCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgVk1FX0NSQ1NSX0JVRl9TSVpFLCBicmlkZ2UtPmNyY3NyX2tlcm5lbCwKKwkJYnJpZGdlLT5jcmNzcl9idXMpOwogfQogCiBzdGF0aWMgaW50IHRzaTE0OF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQpAQCAtMjI0NSw2ICsyMjEzLDggQEAKIAlpbnQgcmV0dmFsLCBpLCBtYXN0ZXJfbnVtOwogCXUzMiBkYXRhOwogCXN0cnVjdCBsaXN0X2hlYWQgKnBvcyA9IE5VTEw7CisJc3RydWN0IHZtZV9icmlkZ2UgKnRzaTE0OF9icmlkZ2U7CisJc3RydWN0IHRzaTE0OF9kcml2ZXIgKnRzaTE0OF9kZXZpY2U7CiAJc3RydWN0IHZtZV9tYXN0ZXJfcmVzb3VyY2UgKm1hc3Rlcl9pbWFnZTsKIAlzdHJ1Y3Qgdm1lX3NsYXZlX3Jlc291cmNlICpzbGF2ZV9pbWFnZTsKIAlzdHJ1Y3Qgdm1lX2RtYV9yZXNvdXJjZSAqZG1hX2N0cmxyOwpAQCAtMjI2NCw2ICsyMjM0LDE4IEBACiAKIAltZW1zZXQodHNpMTQ4X2JyaWRnZSwgMCwgc2l6ZW9mKHN0cnVjdCB2bWVfYnJpZGdlKSk7CiAKKwl0c2kxNDhfZGV2aWNlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHRzaTE0OF9kcml2ZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAodHNpMTQ4X2RldmljZSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRldmljZSAiCisJCQkic3RydWN0dXJlXG4iKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnJfZHJpdmVyOworCX0KKworCW1lbXNldCh0c2kxNDhfZGV2aWNlLCAwLCBzaXplb2Yoc3RydWN0IHRzaTE0OF9kcml2ZXIpKTsKKworCXRzaTE0OF9icmlkZ2UtPmRyaXZlcl9wcml2ID0gdHNpMTQ4X2RldmljZTsKKwogCS8qIEVuYWJsZSB0aGUgZGV2aWNlICovCiAJcmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKHJldHZhbCkgewpAQCAtMjI3OSwxNSArMjI2MSwxNiBAQAogCX0KIAogCS8qIG1hcCByZWdpc3RlcnMgaW4gQkFSIDAgKi8KLQl0c2kxNDhfYnJpZGdlLT5iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSwgNDA5Nik7Ci0JaWYgKCF0c2kxNDhfYnJpZGdlLT5iYXNlKSB7CisJdHNpMTQ4X2RldmljZS0+YmFzZSA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksCisJCTQwOTYpOworCWlmICghdHNpMTQ4X2RldmljZS0+YmFzZSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gcmVtYXAgQ1JHIHJlZ2lvblxuIik7CiAJCXJldHZhbCA9IC1FSU87CiAJCWdvdG8gZXJyX3JlbWFwOwogCX0KIAogCS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgbWFwcGluZyB3b3JrZWQgb3V0ICovCi0JZGF0YSA9IGlvcmVhZDMyKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfUENGU19JRCkgJiAweDAwMDBGRkZGOworCWRhdGEgPSBpb3JlYWQzMih0c2kxNDhfZGV2aWNlLT5iYXNlICsgVFNJMTQ4X1BDRlNfSUQpICYgMHgwMDAwRkZGRjsKIAlpZiAoZGF0YSAhPSBQQ0lfVkVORE9SX0lEX1RVTkRSQSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDUkcgcmVnaW9uIGNoZWNrIGZhaWxlZFxuIik7CiAJCXJldHZhbCA9IC1FSU87CkBAIC0yMjk1LDEyICsyMjc4LDExIEBACiAJfQogCiAJLyogSW5pdGlhbGl6ZSB3YWl0IHF1ZXVlcyAmIG11dHVhbCBleGNsdXNpb24gZmxhZ3MgKi8KLQkvKiBYWFggVGhlc2UgbmVlZCB0byBiZSBtb3ZlZCB0byB0aGUgdm1lX2JyaWRnZSBzdHJ1Y3R1cmUgKi8KLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkbWFfcXVldWVbMF0pOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRtYV9xdWV1ZVsxXSk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmaWFja19xdWV1ZSk7Ci0JbXV0ZXhfaW5pdCgmKHZtZV9pbnQpKTsKLQltdXRleF9pbml0KCYodm1lX3JtdykpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJih0c2kxNDhfZGV2aWNlLT5kbWFfcXVldWVbMF0pKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCYodHNpMTQ4X2RldmljZS0+ZG1hX3F1ZXVlWzFdKSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmKHRzaTE0OF9kZXZpY2UtPmlhY2tfcXVldWUpKTsKKwltdXRleF9pbml0KCYodHNpMTQ4X2RldmljZS0+dm1lX2ludCkpOworCW11dGV4X2luaXQoJih0c2kxNDhfZGV2aWNlLT52bWVfcm13KSk7CiAKIAl0c2kxNDhfYnJpZGdlLT5wYXJlbnQgPSAmKHBkZXYtPmRldik7CiAJc3RyY3B5KHRzaTE0OF9icmlkZ2UtPm5hbWUsIGRyaXZlcl9uYW1lKTsKQEAgLTIzMjAsMjkgKzIzMDIsMjkgQEAKIAltYXN0ZXJfbnVtID0gVFNJMTQ4X01BWF9NQVNURVI7CiAJaWYoZXJyX2Noayl7CiAJCW1hc3Rlcl9udW0tLTsKLQkJLyogWFhYICovCi0JCWZsdXNoX2ltYWdlID0gKHN0cnVjdCB2bWVfbWFzdGVyX3Jlc291cmNlICopa21hbGxvYygKLQkJCXNpemVvZihzdHJ1Y3Qgdm1lX21hc3Rlcl9yZXNvdXJjZSksIEdGUF9LRVJORUwpOwotCQlpZiAoZmx1c2hfaW1hZ2UgPT0gTlVMTCkgeworCisJCXRzaTE0OF9kZXZpY2UtPmZsdXNoX2ltYWdlID0gKHN0cnVjdCB2bWVfbWFzdGVyX3Jlc291cmNlICopCisJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgdm1lX21hc3Rlcl9yZXNvdXJjZSksIEdGUF9LRVJORUwpOworCQlpZiAodHNpMTQ4X2RldmljZS0+Zmx1c2hfaW1hZ2UgPT0gTlVMTCkgewogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgIgogCQkJImZsdXNoIHJlc291cmNlIHN0cnVjdHVyZVxuIik7CiAJCQlyZXR2YWwgPSAtRU5PTUVNOwogCQkJZ290byBlcnJfbWFzdGVyOwogCQl9Ci0JCWZsdXNoX2ltYWdlLT5wYXJlbnQgPSB0c2kxNDhfYnJpZGdlOwotCQlzcGluX2xvY2tfaW5pdCgmKGZsdXNoX2ltYWdlLT5sb2NrKSk7Ci0JCWZsdXNoX2ltYWdlLT5sb2NrZWQgPSAxOwotCQlmbHVzaF9pbWFnZS0+bnVtYmVyID0gbWFzdGVyX251bTsKLQkJZmx1c2hfaW1hZ2UtPmFkZHJlc3NfYXR0ciA9IFZNRV9BMTYgfCBWTUVfQTI0IHwgVk1FX0EzMiB8Ci0JCQlWTUVfQTY0OwotCQlmbHVzaF9pbWFnZS0+Y3ljbGVfYXR0ciA9IFZNRV9TQ1QgfCBWTUVfQkxUIHwgVk1FX01CTFQgfAotCQkJVk1FXzJlVk1FIHwgVk1FXzJlU1NUIHwgVk1FXzJlU1NUQiB8IFZNRV8yZVNTVDE2MCB8Ci0JCQlWTUVfMmVTU1QyNjcgfCBWTUVfMmVTU1QzMjAgfCBWTUVfU1VQRVIgfCBWTUVfVVNFUiB8Ci0JCQlWTUVfUFJPRyB8IFZNRV9EQVRBOwotCQlmbHVzaF9pbWFnZS0+d2lkdGhfYXR0ciA9IFZNRV9EMTYgfCBWTUVfRDMyOwotCQltZW1zZXQoJihmbHVzaF9pbWFnZS0+cGNpX3Jlc291cmNlKSwgMCwKKwkJdHNpMTQ4X2RldmljZS0+Zmx1c2hfaW1hZ2UtPnBhcmVudCA9IHRzaTE0OF9icmlkZ2U7CisJCXNwaW5fbG9ja19pbml0KCYodHNpMTQ4X2RldmljZS0+Zmx1c2hfaW1hZ2UtPmxvY2spKTsKKwkJdHNpMTQ4X2RldmljZS0+Zmx1c2hfaW1hZ2UtPmxvY2tlZCA9IDE7CisJCXRzaTE0OF9kZXZpY2UtPmZsdXNoX2ltYWdlLT5udW1iZXIgPSBtYXN0ZXJfbnVtOworCQl0c2kxNDhfZGV2aWNlLT5mbHVzaF9pbWFnZS0+YWRkcmVzc19hdHRyID0gVk1FX0ExNiB8IFZNRV9BMjQgfAorCQkJVk1FX0EzMiB8IFZNRV9BNjQ7CisJCXRzaTE0OF9kZXZpY2UtPmZsdXNoX2ltYWdlLT5jeWNsZV9hdHRyID0gVk1FX1NDVCB8IFZNRV9CTFQgfAorCQkJVk1FX01CTFQgfCBWTUVfMmVWTUUgfCBWTUVfMmVTU1QgfCBWTUVfMmVTU1RCIHwKKwkJCVZNRV8yZVNTVDE2MCB8IFZNRV8yZVNTVDI2NyB8IFZNRV8yZVNTVDMyMCB8IFZNRV9TVVBFUiB8CisJCQlWTUVfVVNFUiB8IFZNRV9QUk9HIHwgVk1FX0RBVEE7CisJCXRzaTE0OF9kZXZpY2UtPmZsdXNoX2ltYWdlLT53aWR0aF9hdHRyID0gVk1FX0QxNiB8IFZNRV9EMzI7CisJCW1lbXNldCgmKHRzaTE0OF9kZXZpY2UtPmZsdXNoX2ltYWdlLT5idXNfcmVzb3VyY2UpLCAwLAogCQkJc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkpOwotCQlmbHVzaF9pbWFnZS0+a2Vybl9iYXNlICA9IE5VTEw7CisJCXRzaTE0OF9kZXZpY2UtPmZsdXNoX2ltYWdlLT5rZXJuX2Jhc2UgID0gTlVMTDsKIAl9CiAKIAkvKiBBZGQgbWFzdGVyIHdpbmRvd3MgdG8gbGlzdCAqLwpAQCAtMjM2Nyw3ICsyMzQ5LDcgQEAKIAkJCVZNRV8yZVNTVDI2NyB8IFZNRV8yZVNTVDMyMCB8IFZNRV9TVVBFUiB8IFZNRV9VU0VSIHwKIAkJCVZNRV9QUk9HIHwgVk1FX0RBVEE7CiAJCW1hc3Rlcl9pbWFnZS0+d2lkdGhfYXR0ciA9IFZNRV9EMTYgfCBWTUVfRDMyOwotCQltZW1zZXQoJihtYXN0ZXJfaW1hZ2UtPnBjaV9yZXNvdXJjZSksIDAsCisJCW1lbXNldCgmKG1hc3Rlcl9pbWFnZS0+YnVzX3Jlc291cmNlKSwgMCwKIAkJCXNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpKTsKIAkJbWFzdGVyX2ltYWdlLT5rZXJuX2Jhc2UgID0gTlVMTDsKIAkJbGlzdF9hZGRfdGFpbCgmKG1hc3Rlcl9pbWFnZS0+bGlzdCksCkBAIC0yNDE1LDYgKzIzOTcsMTAgQEAKIAkJbXV0ZXhfaW5pdCgmKGRtYV9jdHJsci0+bXR4KSk7CiAJCWRtYV9jdHJsci0+bG9ja2VkID0gMDsKIAkJZG1hX2N0cmxyLT5udW1iZXIgPSBpOworCQlkbWFfY3RybHItPnJvdXRlX2F0dHIgPSBWTUVfRE1BX1ZNRV9UT19NRU0gfAorCQkJVk1FX0RNQV9NRU1fVE9fVk1FIHwgVk1FX0RNQV9WTUVfVE9fVk1FIHwKKwkJCVZNRV9ETUFfTUVNX1RPX01FTSB8IFZNRV9ETUFfUEFUVEVSTl9UT19WTUUgfAorCQkJVk1FX0RNQV9QQVRURVJOX1RPX01FTTsKIAkJSU5JVF9MSVNUX0hFQUQoJihkbWFfY3RybHItPnBlbmRpbmcpKTsKIAkJSU5JVF9MSVNUX0hFQUQoJihkbWFfY3RybHItPnJ1bm5pbmcpKTsKIAkJbGlzdF9hZGRfdGFpbCgmKGRtYV9jdHJsci0+bGlzdCksCkBAIC0yNDU1LDQwICsyNDQxLDQyIEBACiAJdHNpMTQ4X2JyaWRnZS0+bG1fZGV0YWNoID0gdHNpMTQ4X2xtX2RldGFjaDsKIAl0c2kxNDhfYnJpZGdlLT5zbG90X2dldCA9IHRzaTE0OF9zbG90X2dldDsKIAotCWRhdGEgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WU1RBVCk7CisJZGF0YSA9IGlvcmVhZDMyYmUodHNpMTQ4X2RldmljZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZTVEFUKTsKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiQm9hcmQgaXMlcyB0aGUgVk1FIHN5c3RlbSBjb250cm9sbGVyXG4iLAogCQkoZGF0YSAmIFRTSTE0OF9MQ1NSX1ZTVEFUX1NDT05TKT8gIiIgOiAiIG5vdCIpOwotCWRldl9pbmZvKCZwZGV2LT5kZXYsICJWTUUgZ2VvZ3JhcGhpY2FsIGFkZHJlc3MgaXMgJWRcbiIsCi0JCWRhdGEgJiBUU0kxNDhfTENTUl9WU1RBVF9HQV9NKTsKKwlpZiAoIWdlb2lkKQorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiVk1FIGdlb2dyYXBoaWNhbCBhZGRyZXNzIGlzICVkXG4iLAorCQkJZGF0YSAmIFRTSTE0OF9MQ1NSX1ZTVEFUX0dBX00pOworCWVsc2UKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIlZNRSBnZW9ncmFwaGljYWwgYWRkcmVzcyBpcyBzZXQgdG8gJWRcbiIsCisJCQlnZW9pZCk7CisKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiVk1FIFdyaXRlIGFuZCBmbHVzaCBhbmQgZXJyb3IgY2hlY2sgaXMgJXNcbiIsCiAJCWVycl9jaGsgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKIAotCWlmKHRzaTE0OF9jcmNzcl9pbml0KHBkZXYpKSB7CisJaWYgKHRzaTE0OF9jcmNzcl9pbml0KHRzaTE0OF9icmlkZ2UsIHBkZXYpKQogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDUi9DU1IgY29uZmlndXJhdGlvbiBmYWlsZWQuXG4iKTsKIAkJZ290byBlcnJfY3Jjc3I7CiAKLQl9Ci0KLQkvKiBOZWVkIHRvIHNhdmUgdHNpMTQ4X2JyaWRnZSBwb2ludGVyIGxvY2FsbHkgaW4gbGluayBsaXN0IGZvciB1c2UgaW4KLQkgKiB0c2kxNDhfcmVtb3ZlKCkKLQkgKi8KIAlyZXR2YWwgPSB2bWVfcmVnaXN0ZXJfYnJpZGdlKHRzaTE0OF9icmlkZ2UpOwogCWlmIChyZXR2YWwgIT0gMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDaGlwIFJlZ2lzdHJhdGlvbiBmYWlsZWQuXG4iKTsKIAkJZ290byBlcnJfcmVnOwogCX0KIAorCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB0c2kxNDhfYnJpZGdlKTsKKwogCS8qIENsZWFyIFZNRSBidXMgImJvYXJkIGZhaWwiLCBhbmQgInBvd2VyLXVwIHJlc2V0IiBsaW5lcyAqLwotCWRhdGEgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WU1RBVCk7CisJZGF0YSA9IGlvcmVhZDMyYmUodHNpMTQ4X2RldmljZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZTVEFUKTsKIAlkYXRhICY9IH5UU0kxNDhfTENTUl9WU1RBVF9CUkRGTDsKIAlkYXRhIHw9IFRTSTE0OF9MQ1NSX1ZTVEFUX0NQVVJTVDsKLQlpb3dyaXRlMzJiZShkYXRhLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVlNUQVQpOworCWlvd3JpdGUzMmJlKGRhdGEsIHRzaTE0OF9kZXZpY2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WU1RBVCk7CiAKIAlyZXR1cm4gMDsKIAogCXZtZV91bnJlZ2lzdGVyX2JyaWRnZSh0c2kxNDhfYnJpZGdlKTsKIGVycl9yZWc6Ci0JdHNpMTQ4X2NyY3NyX2V4aXQocGRldik7CisJdHNpMTQ4X2NyY3NyX2V4aXQodHNpMTQ4X2JyaWRnZSwgcGRldik7CiBlcnJfY3Jjc3I6CiBlcnJfbG06CiAJLyogcmVzb3VyY2VzIGFyZSBzdG9yZWQgaW4gbGluayBsaXN0ICovCkBAIC0yNTE5LDE1ICsyNTA3LDE3IEBACiAJCWtmcmVlKG1hc3Rlcl9pbWFnZSk7CiAJfQogCi0JdHNpMTQ4X2lycV9leGl0KHBkZXYpOworCXRzaTE0OF9pcnFfZXhpdCh0c2kxNDhfZGV2aWNlLCBwZGV2KTsKIGVycl9pcnE6CiBlcnJfdGVzdDoKLQlpb3VubWFwKHRzaTE0OF9icmlkZ2UtPmJhc2UpOworCWlvdW5tYXAodHNpMTQ4X2RldmljZS0+YmFzZSk7CiBlcnJfcmVtYXA6CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIGVycl9yZXNvdXJjZToKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiBlcnJfZW5hYmxlOgorCWtmcmVlKHRzaTE0OF9kZXZpY2UpOworZXJyX2RyaXZlcjoKIAlrZnJlZSh0c2kxNDhfYnJpZGdlKTsKIGVycl9zdHJ1Y3Q6CiAJcmV0dXJuIHJldHZhbDsKQEAgLTI1NDEsNTYgKzI1MzEsNTggQEAKIAlzdHJ1Y3Qgdm1lX3NsYXZlX3Jlc291cmNlICpzbGF2ZV9pbWFnZTsKIAlzdHJ1Y3Qgdm1lX2RtYV9yZXNvdXJjZSAqZG1hX2N0cmxyOwogCWludCBpOworCXN0cnVjdCB0c2kxNDhfZHJpdmVyICpicmlkZ2U7CisJc3RydWN0IHZtZV9icmlkZ2UgKnRzaTE0OF9icmlkZ2UgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlicmlkZ2UgPSB0c2kxNDhfYnJpZGdlLT5kcml2ZXJfcHJpdjsKKwogCiAJZGV2X2RiZygmcGRldi0+ZGV2LCAiRHJpdmVyIGlzIGJlaW5nIHVubG9hZGVkLlxuIik7CiAKLQkvKiBYWFggV2UgbmVlZCB0byBmaW5kIHRoZSBwZGV2LT5kZXYgaW4gdGhlIGxpc3Qgb2Ygdm1lX2JyaWRnZS0+ZGV2J3MgKi8KLQogCS8qCiAJICogIFNodXRkb3duIGFsbCBpbmJvdW5kIGFuZCBvdXRib3VuZCB3aW5kb3dzLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJaW93cml0ZTMyYmUoMCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKKwkJaW93cml0ZTMyYmUoMCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSVRbaV0gKwogCQkJVFNJMTQ4X0xDU1JfT0ZGU0VUX0lUQVQpOwotCQlpb3dyaXRlMzJiZSgwLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKworCQlpb3dyaXRlMzJiZSgwLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9PVFtpXSArCiAJCQlUU0kxNDhfTENTUl9PRkZTRVRfT1RBVCk7CiAJfQogCiAJLyoKIAkgKiAgU2h1dGRvd24gTG9jYXRpb24gbW9uaXRvci4KIAkgKi8KLQlpb3dyaXRlMzJiZSgwLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfTE1BVCk7CisJaW93cml0ZTMyYmUoMCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfTE1BVCk7CiAKIAkvKgogCSAqICBTaHV0ZG93biBDUkcgbWFwLgogCSAqLwotCWlvd3JpdGUzMmJlKDAsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9DU1JBVCk7CisJaW93cml0ZTMyYmUoMCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfQ1NSQVQpOwogCiAJLyoKIAkgKiAgQ2xlYXIgZXJyb3Igc3RhdHVzLgogCSAqLwotCWlvd3JpdGUzMmJlKDB4RkZGRkZGRkYsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9FRFBBVCk7Ci0JaW93cml0ZTMyYmUoMHhGRkZGRkZGRiwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZFQVQpOwotCWlvd3JpdGUzMmJlKDB4MDcwMDA3MDAsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9QU1RBVCk7CisJaW93cml0ZTMyYmUoMHhGRkZGRkZGRiwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfRURQQVQpOworCWlvd3JpdGUzMmJlKDB4RkZGRkZGRkYsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZFQVQpOworCWlvd3JpdGUzMmJlKDB4MDcwMDA3MDAsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1BTVEFUKTsKIAogCS8qCiAJICogIFJlbW92ZSBWSVJRIGludGVycnVwdCAoaWYgYW55KQogCSAqLwotCWlmIChpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WSUNSKSAmIDB4ODAwKSB7Ci0JCWlvd3JpdGUzMmJlKDB4ODAwMCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZJQ1IpOwotCX0KKwlpZiAoaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WSUNSKSAmIDB4ODAwKQorCQlpb3dyaXRlMzJiZSgweDgwMDAsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZJQ1IpOwogCiAJLyoKIAkgKiAgTWFwIGFsbCBJbnRlcnJ1cHRzIHRvIFBDSSBJTlRBCiAJICovCi0JaW93cml0ZTMyYmUoMHgwLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5UTTEpOwotCWlvd3JpdGUzMmJlKDB4MCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVE0yKTsKKwlpb3dyaXRlMzJiZSgweDAsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVE0xKTsKKwlpb3dyaXRlMzJiZSgweDAsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVE0yKTsKIAotCXRzaTE0OF9pcnFfZXhpdChwZGV2KTsKKwl0c2kxNDhfaXJxX2V4aXQoYnJpZGdlLCBwZGV2KTsKIAogCXZtZV91bnJlZ2lzdGVyX2JyaWRnZSh0c2kxNDhfYnJpZGdlKTsKIAotCXRzaTE0OF9jcmNzcl9leGl0KHBkZXYpOworCXRzaTE0OF9jcmNzcl9leGl0KHRzaTE0OF9icmlkZ2UsIHBkZXYpOwogCiAJLyogcmVzb3VyY2VzIGFyZSBzdG9yZWQgaW4gbGluayBsaXN0ICovCiAJbGlzdF9mb3JfZWFjaChwb3MsICYodHNpMTQ4X2JyaWRnZS0+ZG1hX3Jlc291cmNlcykpIHsKQEAgLTI2MDgsMTkgKzI2MDAsMjIgQEAKIAogCS8qIHJlc291cmNlcyBhcmUgc3RvcmVkIGluIGxpbmsgbGlzdCAqLwogCWxpc3RfZm9yX2VhY2gocG9zLCAmKHRzaTE0OF9icmlkZ2UtPm1hc3Rlcl9yZXNvdXJjZXMpKSB7Ci0JCW1hc3Rlcl9pbWFnZSA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgdm1lX21hc3Rlcl9yZXNvdXJjZSwJCQkJbGlzdCk7CisJCW1hc3Rlcl9pbWFnZSA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgdm1lX21hc3Rlcl9yZXNvdXJjZSwKKwkJCWxpc3QpOwogCQlsaXN0X2RlbChwb3MpOwogCQlrZnJlZShtYXN0ZXJfaW1hZ2UpOwogCX0KIAotCXRzaTE0OF9pcnFfZXhpdChwZGV2KTsKKwl0c2kxNDhfaXJxX2V4aXQoYnJpZGdlLCBwZGV2KTsKIAotCWlvdW5tYXAodHNpMTQ4X2JyaWRnZS0+YmFzZSk7CisJaW91bm1hcChicmlkZ2UtPmJhc2UpOwogCiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAorCWtmcmVlKHRzaTE0OF9icmlkZ2UtPmRyaXZlcl9wcml2KTsKKwogCWtmcmVlKHRzaTE0OF9icmlkZ2UpOwogfQogCkBAIC0yNjM0LDI1MCArMjYyOSwxMSBAQAogTU9EVUxFX1BBUk1fREVTQyhlcnJfY2hrLCAiQ2hlY2sgZm9yIFZNRSBlcnJvcnMgb24gcmVhZHMgYW5kIHdyaXRlcyIpOwogbW9kdWxlX3BhcmFtKGVycl9jaGssIGJvb2wsIDApOwogCitNT0RVTEVfUEFSTV9ERVNDKGdlb2lkLCAiT3ZlcnJpZGUgZ2VvZ3JhcGhpY2FsIGFkZHJlc3NpbmciKTsKK21vZHVsZV9wYXJhbShnZW9pZCwgaW50LCAwKTsKKwogTU9EVUxFX0RFU0NSSVBUSU9OKCJWTUUgZHJpdmVyIGZvciB0aGUgVHVuZHJhIFRlbXBlIFZNRSBicmlkZ2UiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbW9kdWxlX2luaXQodHNpMTQ4X2luaXQpOwogbW9kdWxlX2V4aXQodHNpMTQ4X2V4aXQpOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNUQUdJTkcKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgMAotLyoKLSAqIERpcmVjdCBNb2RlIERNQSB0cmFuc2ZlcgotICoKLSAqIFhYWCBOb3QgbG9va2luZyBhdCBkaXJlY3QgbW9kZSBmb3Igbm93LCB3ZSBjYW4gYWx3YXlzIHVzZSBsaW5rIGxpc3QgbW9kZQotICogICAgIHdpdGggYSBzaW5nbGUgZW50cnkuCi0gKi8KLWludCB0c2kxNDhfZG1hX3J1bihzdHJ1Y3Qgdm1lX2RtYV9yZXNvdXJjZSAqcmVzb3VyY2UsIHN0cnVjdCB2bWVfZG1hX2F0dHIgc3JjLAotCXN0cnVjdCB2bWVfZG1hX2F0dHIgZGVzdCwgc2l6ZV90IGNvdW50KQotewotCXUzMiBkY3RscmVnID0gMDsKLQl1bnNpZ25lZCBpbnQgdG1wOwotCWludCB2YWw7Ci0JaW50IGNoYW5uZWwsIHg7Ci0Jc3RydWN0IHZtZURtYVBhY2tldCAqY3VyX2RtYTsKLQlzdHJ1Y3QgdHNpMTQ4X2RtYV9kZXNjcmlwdG9yICpkbWFMTDsKLQotCS8qIGRpcmVjdCBtb2RlICovCi0JZGN0bHJlZyA9IDB4ODAwMDAwOwotCi0JZm9yICh4ID0gMDsgeCA8IDg7IHgrKykgewkvKiB2bWUgYmxvY2sgc2l6ZSAqLwotCQlpZiAoKDMyIDw8IHgpID49IHZtZURtYS0+bWF4Vm1lQmxvY2tTaXplKSB7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAoeCA9PSA4KQotCQl4ID0gNzsKLQlkY3RscmVnIHw9ICh4IDw8IDEyKTsKLQotCWZvciAoeCA9IDA7IHggPCA4OyB4KyspIHsJLyogcGNpIGJsb2NrIHNpemUgKi8KLQkJaWYgKCgzMiA8PCB4KSA+PSB2bWVEbWEtPm1heFBjaUJsb2NrU2l6ZSkgewotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKHggPT0gOCkKLQkJeCA9IDc7Ci0JZGN0bHJlZyB8PSAoeCA8PCA0KTsKLQotCWlmICh2bWVEbWEtPnZtZUJhY2tPZmZUaW1lcikgewotCQlmb3IgKHggPSAxOyB4IDwgODsgeCsrKSB7CS8qIHZtZSB0aW1lciAqLwotCQkJaWYgKCgxIDw8ICh4IC0gMSkpID49IHZtZURtYS0+dm1lQmFja09mZlRpbWVyKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKHggPT0gOCkKLQkJCXggPSA3OwotCQlkY3RscmVnIHw9ICh4IDw8IDgpOwotCX0KLQotCWlmICh2bWVEbWEtPnBjaUJhY2tPZmZUaW1lcikgewotCQlmb3IgKHggPSAxOyB4IDwgODsgeCsrKSB7CS8qIHBjaSB0aW1lciAqLwotCQkJaWYgKCgxIDw8ICh4IC0gMSkpID49IHZtZURtYS0+cGNpQmFja09mZlRpbWVyKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKHggPT0gOCkKLQkJCXggPSA3OwotCQlkY3RscmVnIHw9ICh4IDw8IDApOwotCX0KLQotCS8qIFByb2dyYW0gcmVnaXN0ZXJzIGZvciBETUEgdHJhbnNmZXIgKi8KLQlpb3dyaXRlMzJiZShkbWFMTC0+ZHNhdSwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArCi0JCVRTSTE0OF9MQ1NSX0RNQVtjaGFubmVsXSArIFRTSTE0OF9MQ1NSX09GRlNFVF9EU0FVKTsKLQlpb3dyaXRlMzJiZShkbWFMTC0+ZHNhbCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArCi0JCVRTSTE0OF9MQ1NSX0RNQVtjaGFubmVsXSArIFRTSTE0OF9MQ1NSX09GRlNFVF9EU0FMKTsKLQlpb3dyaXRlMzJiZShkbWFMTC0+ZGRhdSwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArCi0JCVRTSTE0OF9MQ1NSX0RNQVtjaGFubmVsXSArIFRTSTE0OF9MQ1NSX09GRlNFVF9EREFVKTsKLQlpb3dyaXRlMzJiZShkbWFMTC0+ZGRhbCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArCi0JCVRTSTE0OF9MQ1NSX0RNQVtjaGFubmVsXSArIFRTSTE0OF9MQ1NSX09GRlNFVF9EREFMKTsKLQlpb3dyaXRlMzJiZShkbWFMTC0+ZHNhdCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArCi0JCVRTSTE0OF9MQ1NSX0RNQVtjaGFubmVsXSArIFRTSTE0OF9MQ1NSX09GRlNFVF9EU0FUKTsKLQlpb3dyaXRlMzJiZShkbWFMTC0+ZGRhdCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArCi0JCVRTSTE0OF9MQ1NSX0RNQVtjaGFubmVsXSArIFRTSTE0OF9MQ1NSX09GRlNFVF9EREFUKTsKLQlpb3dyaXRlMzJiZShkbWFMTC0+ZGNudCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArCi0JCVRTSTE0OF9MQ1NSX0RNQVtjaGFubmVsXSArIFRTSTE0OF9MQ1NSX09GRlNFVF9EQ05UKTsKLQlpb3dyaXRlMzJiZShkbWFMTC0+ZGRicywgdHNpMTQ4X2JyaWRnZS0+YmFzZSArCi0JCVRTSTE0OF9MQ1NSX0RNQVtjaGFubmVsXSArIFRTSTE0OF9MQ1NSX09GRlNFVF9EREJTKTsKLQotCS8qIFN0YXJ0IHRoZSBvcGVyYXRpb24gKi8KLQlpb3dyaXRlMzJiZShkY3RscmVnIHwgMHgyMDAwMDAwLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsKLQkJVFNJMTQ4X0xDU1JfRE1BW2NoYW5uZWxdICsgVFNJMTQ4X0xDU1JfT0ZGU0VUX0RDVEwpOwotCi0JdG1wID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfRE1BW2NoYW5uZWxdICsKLQkJVFNJMTQ4X0xDU1JfT0ZGU0VUX0RTVEEpOwotCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkbWFfcXVldWVbY2hhbm5lbF0sICh0bXAgJiAweDEwMDAwMDApID09IDApOwotCi0JLyoKLQkgKiBSZWFkIHN0YXR1cyByZWdpc3Rlciwgd2Ugc2hvdWxkIHByb2JhYmx5IGRvIHRoaXMgaW4gc29tZSBlcnJvcgotCSAqIGhhbmRsZXIgcmF0aGVyIHRoYW4gaGVyZSBzbyB0aGF0IHdlIGNhbiBiZSBzdXJlIHdlIGhhdmVuJ3Qga2lja2VkIG9mZgotCSAqIGFub3RoZXIgRE1BIHRyYW5zZmVyLgotCSAqLwotCXZhbCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0RNQVtjaGFubmVsXSArCi0JCVRTSTE0OF9MQ1NSX09GRlNFVF9EU1RBKTsKLQotCXZtZURtYS0+dm1lRG1hU3RhdHVzID0gMDsKLQlpZiAodmFsICYgMHgxMDAwMDAwMCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJCSJETUEgRXJyb3IgaW4gRE1BX3RlbXBlX2lycWhhbmRsZXIgRFNUQT0lMDhYXG4iLAotCQkJdmFsKTsKLQkJdm1lRG1hLT52bWVEbWFTdGF0dXMgPSB2YWw7Ci0KLQl9Ci0JcmV0dXJuICgwKTsKLX0KLSNlbmRpZgotCi0jaWYgMAotCi0vKiBHbG9iYWwgVk1FIGNvbnRyb2xsZXIgaW5mb3JtYXRpb24gKi8KLXN0cnVjdCBwY2lfZGV2ICp2bWVfcGNpX2RldjsKLQotLyoKLSAqIFNldCB0aGUgVk1FIGJ1cyBhcmJpdGVyIHdpdGggdGhlIHJlcXVlc3RlZCBhdHRyaWJ1dGVzCi0gKi8KLWludCB0ZW1wZV9zZXRfYXJiaXRlcih2bWVBcmJpdGVyQ2ZnX3QgKiB2bWVBcmIpCi17Ci0JaW50IHRlbXBfY3RsID0gMDsKLQlpbnQgZ3RvID0gMDsKLQotCXRlbXBfY3RsID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVkNUUkwpOwotCXRlbXBfY3RsICY9IDB4RkZFRkZGMDA7Ci0KLQlpZiAodm1lQXJiLT5nbG9iYWxUaW1lb3V0VGltZXIgPT0gMHhGRkZGRkZGRikgewotCQlndG8gPSA4OwotCX0gZWxzZSBpZiAodm1lQXJiLT5nbG9iYWxUaW1lb3V0VGltZXIgPiAyMDQ4KSB7Ci0JCXJldHVybiAoLUVJTlZBTCk7Ci0JfSBlbHNlIGlmICh2bWVBcmItPmdsb2JhbFRpbWVvdXRUaW1lciA9PSAwKSB7Ci0JCWd0byA9IDA7Ci0JfSBlbHNlIHsKLQkJZ3RvID0gMTsKLQkJd2hpbGUgKCgxNiAqICgxIDw8IChndG8gLSAxKSkpIDwgdm1lQXJiLT5nbG9iYWxUaW1lb3V0VGltZXIpIHsKLQkJCWd0byArPSAxOwotCQl9Ci0JfQotCXRlbXBfY3RsIHw9IGd0bzsKLQotCWlmICh2bWVBcmItPmFyYml0ZXJNb2RlICE9IFZNRV9QUklPUklUWV9NT0RFKSB7Ci0JCXRlbXBfY3RsIHw9IDEgPDwgNjsKLQl9Ci0KLQlpZiAodm1lQXJiLT5hcmJpdGVyVGltZW91dEZsYWcpIHsKLQkJdGVtcF9jdGwgfD0gMSA8PCA3OwotCX0KLQotCWlmICh2bWVBcmItPm5vRWFybHlSZWxlYXNlRmxhZykgewotCQl0ZW1wX2N0bCB8PSAxIDw8IDIwOwotCX0KLQlpb3dyaXRlMzJiZSh0ZW1wX2N0bCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZDVFJMKTsKLQotCXJldHVybiAoMCk7Ci19Ci0KLS8qCi0gKiBSZXR1cm4gdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIFZNRSBidXMgYXJiaXRlci4KLSAqLwotaW50IHRlbXBlX2dldF9hcmJpdGVyKHZtZUFyYml0ZXJDZmdfdCAqIHZtZUFyYikKLXsKLQlpbnQgdGVtcF9jdGwgPSAwOwotCWludCBndG8gPSAwOwotCi0KLQl0ZW1wX2N0bCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZDVFJMKTsKLQotCWd0byA9IHRlbXBfY3RsICYgMHhGOwotCWlmIChndG8gIT0gMCkgewotCQl2bWVBcmItPmdsb2JhbFRpbWVvdXRUaW1lciA9ICgxNiAqICgxIDw8IChndG8gLSAxKSkpOwotCX0KLQotCWlmICh0ZW1wX2N0bCAmICgxIDw8IDYpKSB7Ci0JCXZtZUFyYi0+YXJiaXRlck1vZGUgPSBWTUVfUl9ST0JJTl9NT0RFOwotCX0gZWxzZSB7Ci0JCXZtZUFyYi0+YXJiaXRlck1vZGUgPSBWTUVfUFJJT1JJVFlfTU9ERTsKLQl9Ci0KLQlpZiAodGVtcF9jdGwgJiAoMSA8PCA3KSkgewotCQl2bWVBcmItPmFyYml0ZXJUaW1lb3V0RmxhZyA9IDE7Ci0JfQotCi0JaWYgKHRlbXBfY3RsICYgKDEgPDwgMjApKSB7Ci0JCXZtZUFyYi0+bm9FYXJseVJlbGVhc2VGbGFnID0gMTsKLQl9Ci0KLQlyZXR1cm4gKDApOwotfQotCi0vKgotICogU2V0IHRoZSBWTUUgYnVzIHJlcXVlc3RvciB3aXRoIHRoZSByZXF1ZXN0ZWQgYXR0cmlidXRlcwotICovCi1pbnQgdGVtcGVfc2V0X3JlcXVlc3Rvcih2bWVSZXF1ZXN0ZXJDZmdfdCAqIHZtZVJlcSkKLXsKLQlpbnQgdGVtcF9jdGwgPSAwOwotCi0JdGVtcF9jdGwgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WTUNUUkwpOwotCXRlbXBfY3RsICY9IDB4RkZGRjAwMDA7Ci0KLQlpZiAodm1lUmVxLT5yZWxlYXNlTW9kZSA9PSAxKSB7Ci0JCXRlbXBfY3RsIHw9ICgxIDw8IDMpOwotCX0KLQotCWlmICh2bWVSZXEtPmZhaXJNb2RlID09IDEpIHsKLQkJdGVtcF9jdGwgfD0gKDEgPDwgMik7Ci0JfQotCi0JdGVtcF9jdGwgfD0gKHZtZVJlcS0+dGltZW9uVGltZW91dFRpbWVyICYgNykgPDwgODsKLQl0ZW1wX2N0bCB8PSAodm1lUmVxLT50aW1lb2ZmVGltZW91dFRpbWVyICYgNykgPDwgMTI7Ci0JdGVtcF9jdGwgfD0gdm1lUmVxLT5yZXF1ZXN0TGV2ZWw7Ci0KLQlpb3dyaXRlMzJiZSh0ZW1wX2N0bCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZNQ1RSTCk7Ci0JcmV0dXJuICgwKTsKLX0KLQotLyoKLSAqIFJldHVybiB0aGUgYXR0cmlidXRlcyBvZiB0aGUgVk1FIGJ1cyByZXF1ZXN0b3IKLSAqLwotaW50IHRlbXBlX2dldF9yZXF1ZXN0b3Iodm1lUmVxdWVzdGVyQ2ZnX3QgKiB2bWVSZXEpCi17Ci0JaW50IHRlbXBfY3RsID0gMDsKLQotCXRlbXBfY3RsID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVk1DVFJMKTsKLQotCWlmICh0ZW1wX2N0bCAmIDB4MTgpIHsKLQkJdm1lUmVxLT5yZWxlYXNlTW9kZSA9IDE7Ci0JfQotCi0JaWYgKHRlbXBfY3RsICYgKDEgPDwgMikpIHsKLQkJdm1lUmVxLT5mYWlyTW9kZSA9IDE7Ci0JfQotCi0Jdm1lUmVxLT5yZXF1ZXN0TGV2ZWwgPSB0ZW1wX2N0bCAmIDM7Ci0Jdm1lUmVxLT50aW1lb25UaW1lb3V0VGltZXIgPSAodGVtcF9jdGwgPj4gOCkgJiA3OwotCXZtZVJlcS0+dGltZW9mZlRpbWVvdXRUaW1lciA9ICh0ZW1wX2N0bCA+PiAxMikgJiA3OwotCi0JcmV0dXJuICgwKTsKLX0KLQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfdHNpMTQ4LmggYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX3RzaTE0OC5oCmluZGV4IDZmMGY3MDUuLjllNWY3ZmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX3RzaTE0OC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfdHNpMTQ4LmgKQEAgLTMzLDYgKzMzLDIyIEBACiAjZGVmaW5lIFRTSTE0OF9NQVhfTUFJTEJPWAkJNAkvKiBNYXggTWFpbCBCb3ggcmVnaXN0ZXJzICovCiAjZGVmaW5lIFRTSTE0OF9NQVhfU0VNQVBIT1JFCQk4CS8qIE1heCBTZW1hcGhvcmVzICovCiAKKy8qIFN0cnVjdHVyZSB1c2VkIHRvIGhvbGQgZHJpdmVyIHNwZWNpZmljIGluZm9ybWF0aW9uICovCitzdHJ1Y3QgdHNpMTQ4X2RyaXZlciB7CisJdm9pZCAqYmFzZTsJLyogQmFzZSBBZGRyZXNzIG9mIGRldmljZSByZWdpc3RlcnMgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBkbWFfcXVldWVbMl07CisJd2FpdF9xdWV1ZV9oZWFkX3QgaWFja19xdWV1ZTsKKwl2b2lkICgqbG1fY2FsbGJhY2tbNF0pKGludCk7CS8qIENhbGxlZCBpbiBpbnRlcnJ1cHQgaGFuZGxlciAqLworCXZvaWQgKmNyY3NyX2tlcm5lbDsKKwlkbWFfYWRkcl90IGNyY3NyX2J1czsKKwlzdHJ1Y3Qgdm1lX21hc3Rlcl9yZXNvdXJjZSAqZmx1c2hfaW1hZ2U7CisJc3RydWN0IG11dGV4IHZtZV9ybXc7CQkvKiBPbmx5IG9uZSBSTVcgY3ljbGUgYXQgYSB0aW1lICovCisJc3RydWN0IG11dGV4IHZtZV9pbnQ7CQkvKgorCQkJCQkgKiBPbmx5IG9uZSBWTUUgaW50ZXJydXB0IGNhbiBiZQorCQkJCQkgKiBnZW5lcmF0ZWQgYXQgYSB0aW1lLCBwcm92aWRlIGxvY2tpbmcKKwkJCQkJICovCit9OworCiAvKgogICogTGF5b3V0IG9mIGEgRE1BQyBMaW5rZWQtTGlzdCBEZXNjcmlwdG9yCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9kZXZpY2VzL3ZtZV91c2VyLmMgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2RldmljZXMvdm1lX3VzZXIuYwppbmRleCBlMjI4OTQyLi5jNjBjODBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2RldmljZXMvdm1lX3VzZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2RldmljZXMvdm1lX3VzZXIuYwpAQCAtMSw4ICsxLDggQEAKIC8qCiAgKiBWTUVidXMgVXNlciBhY2Nlc3MgZHJpdmVyCiAgKgotICogQXV0aG9yOiBNYXJ0eW4gV2VsY2ggPG1hcnR5bi53ZWxjaEBnZWZhbnVjLmNvbT4KLSAqIENvcHlyaWdodCAyMDA4IEdFIEZhbnVjIEludGVsbGlnZW50IFBsYXRmb3JtcyBFbWJlZGRlZCBTeXN0ZW1zLCBJbmMuCisgKiBBdXRob3I6IE1hcnR5biBXZWxjaCA8bWFydHluLndlbGNoQGdlLmNvbT4KKyAqIENvcHlyaWdodCAyMDA4IEdFIEludGVsbGlnZW50IFBsYXRmb3JtcyBFbWJlZGRlZCBTeXN0ZW1zLCBJbmMuCiAgKgogICogQmFzZWQgb24gd29yayBieToKICAqICAgVG9tIEFybWlzdGVhZCBhbmQgQWppdCBQcmVtCkBAIC00MDAsOCArNDAwLDM5IEBACiAKIHN0YXRpYyBsb2ZmX3Qgdm1lX3VzZXJfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2ZmLCBpbnQgd2hlbmNlKQogewotCXByaW50ayhLRVJOX0VSUiAiTGxzZWVrIGN1cnJlbnRseSBpbmNvbXBsZXRlXG4iKTsKLQlyZXR1cm4gLUVJTlZBTDsKKwlsb2ZmX3QgYWJzb2x1dGUgPSAtMTsKKwl1bnNpZ25lZCBpbnQgbWlub3IgPSBNSU5PUihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9yZGV2KTsKKwlzaXplX3QgaW1hZ2Vfc2l6ZTsKKworCWRvd24oJmltYWdlW21pbm9yXS5zZW0pOworCWltYWdlX3NpemUgPSB2bWVfZ2V0X3NpemUoaW1hZ2VbbWlub3JdLnJlc291cmNlKTsKKworCXN3aXRjaCAod2hlbmNlKSB7CisJY2FzZSBTRUVLX1NFVDoKKwkJYWJzb2x1dGUgPSBvZmY7CisJCWJyZWFrOworCWNhc2UgU0VFS19DVVI6CisJCWFic29sdXRlID0gZmlsZS0+Zl9wb3MgKyBvZmY7CisJCWJyZWFrOworCWNhc2UgU0VFS19FTkQ6CisJCWFic29sdXRlID0gaW1hZ2Vfc2l6ZSArIG9mZjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdXAoJmltYWdlW21pbm9yXS5zZW0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJaWYgKChhYnNvbHV0ZSA8IDApIHx8IChhYnNvbHV0ZSA+PSBpbWFnZV9zaXplKSkgeworCQl1cCgmaW1hZ2VbbWlub3JdLnNlbSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZpbGUtPmZfcG9zID0gYWJzb2x1dGU7CisKKwl1cCgmaW1hZ2VbbWlub3JdLnNlbSk7CisKKwlyZXR1cm4gYWJzb2x1dGU7CiB9CiAKIC8qCkBAIC01NzQsOCArNjA1LDggQEAKIAkgKiBpbiBmdXR1cmUgcmV2aXNpb25zIGlmIHRoYXQgZXZlciBiZWNvbWVzIG5lY2Vzc2FyeS4KIAkgKi8KIAlpZiAoYnVzX251bSA+IFVTRVJfQlVTX01BWCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBEcml2ZXIgb25seSBhYmxlIHRvIGhhbmRsZSAlZCBQSU8yICIKLQkJCSJDYXJkc1xuIiwgZHJpdmVyX25hbWUsIFVTRVJfQlVTX01BWCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IERyaXZlciBvbmx5IGFibGUgdG8gaGFuZGxlICVkIGJ1c2VzXG4iLAorCQkJZHJpdmVyX25hbWUsIFVTRVJfQlVTX01BWCk7CiAJCWJ1c19udW0gPSBVU0VSX0JVU19NQVg7CiAJfQogCkBAIC02NzAsOCArNzAxLDEyIEBACiAJLyogUmVxdWVzdCBzbGF2ZSByZXNvdXJjZXMgYW5kIGFsbG9jYXRlIGJ1ZmZlcnMgKDEyOGtCIHdpZGUpICovCiAJZm9yIChpID0gU0xBVkVfTUlOT1I7IGkgPCAoU0xBVkVfTUFYICsgMSk7IGkrKykgewogCQkvKiBYWFggTmVlZCB0byBwcm9wZXJseSByZXF1ZXN0IGF0dHJpYnV0ZXMgKi8KKwkJLyogRm9yIGNhOTFjeDQyIGJyaWRnZSB0aGVyZSBhcmUgb25seSB0d28gc2xhdmUgd2luZG93cworCQkgKiBzdXBwb3J0aW5nIEExNiBhZGRyZXNzaW5nLCBzbyB3ZSByZXF1ZXN0IEEyNCBzdXBwb3J0ZWQKKwkJICogYnkgYWxsIHdpbmRvd3MuCisJCSAqLwogCQlpbWFnZVtpXS5yZXNvdXJjZSA9IHZtZV9zbGF2ZV9yZXF1ZXN0KHZtZV91c2VyX2JyaWRnZSwKLQkJCVZNRV9BMTYsIFZNRV9TQ1QpOworCQkJVk1FX0EyNCwgVk1FX1NDVCk7CiAJCWlmIChpbWFnZVtpXS5yZXNvdXJjZSA9PSBOVUxMKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmFibGUgdG8gYWxsb2NhdGUgc2xhdmUgIgogCQkJCSJyZXNvdXJjZVxuIik7CkBAIC03MDMsNiArNzM4LDE0IEBACiAJCQkJInJlc291cmNlXG4iKTsKIAkJCWdvdG8gZXJyX21hc3RlcjsKIAkJfQorCQlpbWFnZVtpXS5zaXplX2J1ZiA9IFBDSV9CVUZfU0laRTsKKwkJaW1hZ2VbaV0ua2Vybl9idWYgPSBrbWFsbG9jKGltYWdlW2ldLnNpemVfYnVmLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGltYWdlW2ldLmtlcm5fYnVmID09IE5VTEwpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yICIKKwkJCQkibWFzdGVyIHdpbmRvdyBidWZmZXJzXG4iKTsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9tYXN0ZXJfYnVmOworCQl9CiAJfQogCiAJLyogQ3JlYXRlIHN5c2ZzIGVudHJpZXMgLSBvbiB1ZGV2IHN5c3RlbXMgdGhpcyBjcmVhdGVzIHRoZSBkZXYgZmlsZXMgKi8KQEAgLTc1Niw2ICs3OTksOSBAQAogCiAJLyogRW5zdXJlIGNvdW50ZXIgc2V0IGNvcnJlY3R5IHRvIHVuYWxsb2MgYWxsIG1hc3RlciB3aW5kb3dzICovCiAJaSA9IE1BU1RFUl9NQVggKyAxOworZXJyX21hc3Rlcl9idWY6CisJZm9yIChpID0gTUFTVEVSX01JTk9SOyBpIDwgKE1BU1RFUl9NQVggKyAxKTsgaSsrKQorCQlrZnJlZShpbWFnZVtpXS5rZXJuX2J1Zik7CiBlcnJfbWFzdGVyOgogCXdoaWxlIChpID4gTUFTVEVSX01JTk9SKSB7CiAJCWktLTsKQEAgLTc5MSw2ICs4MzcsOSBAQAogCX0KIAljbGFzc19kZXN0cm95KHZtZV91c2VyX3N5c2ZzX2NsYXNzKTsKIAorCWZvciAoaSA9IE1BU1RFUl9NSU5PUjsgaSA8IChNQVNURVJfTUFYICsgMSk7IGkrKykKKwkJa2ZyZWUoaW1hZ2VbaV0ua2Vybl9idWYpOworCiAJZm9yIChpID0gU0xBVkVfTUlOT1I7IGkgPCAoU0xBVkVfTUFYICsgMSk7IGkrKykgewogCQl2bWVfc2xhdmVfc2V0KGltYWdlW2ldLnJlc291cmNlLCAwLCAwLCAwLCAwLCBWTUVfQTMyLCAwKTsKIAkJdm1lX3NsYXZlX2ZyZWUoaW1hZ2VbaV0ucmVzb3VyY2UpOwpAQCAtODE4LDcgKzg2Nyw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkoYnVzLCBpbnQsICZidXNfbnVtLCAwKTsKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJWTUUgVXNlciBTcGFjZSBBY2Nlc3MgRHJpdmVyIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXJ0eW4gV2VsY2ggPG1hcnR5bi53ZWxjaEBnZWZhbnVjLmNvbSIpOworTU9EVUxFX0FVVEhPUigiTWFydHluIFdlbGNoIDxtYXJ0eW4ud2VsY2hAZ2UuY29tIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9pbml0KHZtZV91c2VyX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3ZtZS92bWUuYyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvdm1lLmMKaW5kZXggOTk0ZmRiOS4uZDZkODRlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3ZtZS92bWUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL3ZtZS5jCkBAIC0xLDggKzEsOCBAQAogLyoKICAqIFZNRSBCcmlkZ2UgRnJhbWV3b3JrCiAgKgotICogQXV0aG9yOiBNYXJ0eW4gV2VsY2ggPG1hcnR5bi53ZWxjaEBnZWZhbnVjLmNvbT4KLSAqIENvcHlyaWdodCAyMDA4IEdFIEZhbnVjIEludGVsbGlnZW50IFBsYXRmb3JtcyBFbWJlZGRlZCBTeXN0ZW1zLCBJbmMuCisgKiBBdXRob3I6IE1hcnR5biBXZWxjaCA8bWFydHluLndlbGNoQGdlLmNvbT4KKyAqIENvcHlyaWdodCAyMDA4IEdFIEludGVsbGlnZW50IFBsYXRmb3JtcyBFbWJlZGRlZCBTeXN0ZW1zLCBJbmMuCiAgKgogICogQmFzZWQgb24gd29yayBieSBUb20gQXJtaXN0ZWFkIGFuZCBBaml0IFByZW0KICAqIENvcHlyaWdodCAyMDA0IE1vdG9yb2xhIEluYy4KQEAgLTM3LDggKzM3LDggQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdm1lX2J1c19udW1iZXJzOwogREVGSU5FX01VVEVYKHZtZV9idXNfbnVtX210eCk7CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCB2bWVfZXhpdCAodm9pZCk7Ci1zdGF0aWMgaW50IF9faW5pdCB2bWVfaW5pdCAodm9pZCk7CitzdGF0aWMgdm9pZCBfX2V4aXQgdm1lX2V4aXQodm9pZCk7CitzdGF0aWMgaW50IF9faW5pdCB2bWVfaW5pdCh2b2lkKTsKIAogCiAvKgpAQCAtODYsMjYgKzg2LDI2IEBACiAgKiBYWFggVk1FIGJyaWRnZXMgY291bGQgYmUgYXZhaWxhYmxlIG9uIGJ1c2VzIG90aGVyIHRoYW4gUENJLiBBdCB0aGUgbW9tbWVudAogICogICAgIHRoaXMgZnJhbWV3b3JrIG9ubHkgc3VwcG9ydHMgUENJIGRldmljZXMuCiAgKi8KLXZvaWQgKiB2bWVfYWxsb2NfY29uc2lzdGVudChzdHJ1Y3Qgdm1lX3Jlc291cmNlICpyZXNvdXJjZSwgc2l6ZV90IHNpemUsCit2b2lkICp2bWVfYWxsb2NfY29uc2lzdGVudChzdHJ1Y3Qgdm1lX3Jlc291cmNlICpyZXNvdXJjZSwgc2l6ZV90IHNpemUsCiAJZG1hX2FkZHJfdCAqZG1hKQogewogCXN0cnVjdCB2bWVfYnJpZGdlICpicmlkZ2U7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAKLQlpZihyZXNvdXJjZSA9PSBOVUxMKSB7Ci0JCXByaW50aygiTm8gcmVzb3VyY2VcbiIpOworCWlmIChyZXNvdXJjZSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTm8gcmVzb3VyY2VcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlicmlkZ2UgPSBmaW5kX2JyaWRnZShyZXNvdXJjZSk7Ci0JaWYoYnJpZGdlID09IE5VTEwpIHsKLQkJcHJpbnRrKCJDYW4ndCBmaW5kIGJyaWRnZVxuIik7CisJaWYgKGJyaWRnZSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgZmluZCBicmlkZ2VcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAkvKiBGaW5kIHBjaV9kZXYgY29udGFpbmVyIG9mIGRldiAqLwogCWlmIChicmlkZ2UtPnBhcmVudCA9PSBOVUxMKSB7Ci0JCXByaW50aygiRGV2IGVudHJ5IE5VTExcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkRldiBlbnRyeSBOVUxMXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCXBkZXYgPSBjb250YWluZXJfb2YoYnJpZGdlLT5wYXJlbnQsIHN0cnVjdCBwY2lfZGV2LCBkZXYpOwpAQCAtMTI2LDE0ICsxMjYsMTQgQEAKIAlzdHJ1Y3Qgdm1lX2JyaWRnZSAqYnJpZGdlOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCi0JaWYocmVzb3VyY2UgPT0gTlVMTCkgewotCQlwcmludGsoIk5vIHJlc291cmNlXG4iKTsKKwlpZiAocmVzb3VyY2UgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIk5vIHJlc291cmNlXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCWJyaWRnZSA9IGZpbmRfYnJpZGdlKHJlc291cmNlKTsKLQlpZihicmlkZ2UgPT0gTlVMTCkgewotCQlwcmludGsoIkNhbid0IGZpbmQgYnJpZGdlXG4iKTsKKwlpZiAoYnJpZGdlID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBmaW5kIGJyaWRnZVxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIxNiw3ICsyMTYsNyBAQAogCQkvKiBVc2VyIERlZmluZWQgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKCJJbnZhbGlkIGFkZHJlc3Mgc3BhY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgYWRkcmVzcyBzcGFjZVxuIik7CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWJyZWFrOwogCX0KQEAgLTIyOCw3ICsyMjgsNyBAQAogICogUmVxdWVzdCBhIHNsYXZlIGltYWdlIHdpdGggc3BlY2lmaWMgYXR0cmlidXRlcywgcmV0dXJuIHNvbWUgdW5pcXVlCiAgKiBpZGVudGlmaWVyLgogICovCi1zdHJ1Y3Qgdm1lX3Jlc291cmNlICogdm1lX3NsYXZlX3JlcXVlc3Qoc3RydWN0IGRldmljZSAqZGV2LAorc3RydWN0IHZtZV9yZXNvdXJjZSAqdm1lX3NsYXZlX3JlcXVlc3Qoc3RydWN0IGRldmljZSAqZGV2LAogCXZtZV9hZGRyZXNzX3QgYWRkcmVzcywgdm1lX2N5Y2xlX3QgY3ljbGUpCiB7CiAJc3RydWN0IHZtZV9icmlkZ2UgKmJyaWRnZTsKQEAgLTI0OSwxMyArMjQ5LDEzIEBACiAJCQlzdHJ1Y3Qgdm1lX3NsYXZlX3Jlc291cmNlLCBsaXN0KTsKIAogCQlpZiAoc2xhdmVfaW1hZ2UgPT0gTlVMTCkgewotCQkJcHJpbnRrKCJSZWdpc3RlcmVkIE5VTEwgU2xhdmUgcmVzb3VyY2VcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJSZWdpc3RlcmVkIE5VTEwgU2xhdmUgcmVzb3VyY2VcbiIpOwogCQkJY29udGludWU7CiAJCX0KIAogCQkvKiBGaW5kIGFuIHVubG9ja2VkIGFuZCBjb21wYXRpYmxlIGltYWdlICovCiAJCW11dGV4X2xvY2soJihzbGF2ZV9pbWFnZS0+bXR4KSk7Ci0JCWlmKCgoc2xhdmVfaW1hZ2UtPmFkZHJlc3NfYXR0ciAmIGFkZHJlc3MpID09IGFkZHJlc3MpICYmCisJCWlmICgoKHNsYXZlX2ltYWdlLT5hZGRyZXNzX2F0dHIgJiBhZGRyZXNzKSA9PSBhZGRyZXNzKSAmJgogCQkJKChzbGF2ZV9pbWFnZS0+Y3ljbGVfYXR0ciAmIGN5Y2xlKSA9PSBjeWNsZSkgJiYKIAkJCShzbGF2ZV9pbWFnZS0+bG9ja2VkID09IDApKSB7CiAKQEAgLTI5Miw3ICsyOTIsNyBAQAogfQogRVhQT1JUX1NZTUJPTCh2bWVfc2xhdmVfcmVxdWVzdCk7CiAKLWludCB2bWVfc2xhdmVfc2V0IChzdHJ1Y3Qgdm1lX3Jlc291cmNlICpyZXNvdXJjZSwgaW50IGVuYWJsZWQsCitpbnQgdm1lX3NsYXZlX3NldChzdHJ1Y3Qgdm1lX3Jlc291cmNlICpyZXNvdXJjZSwgaW50IGVuYWJsZWQsCiAJdW5zaWduZWQgbG9uZyBsb25nIHZtZV9iYXNlLCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSwKIAlkbWFfYWRkcl90IGJ1Zl9iYXNlLCB2bWVfYWRkcmVzc190IGFzcGFjZSwgdm1lX2N5Y2xlX3QgY3ljbGUpCiB7CkBAIC0zMDEsMjUgKzMwMSwyNSBAQAogCWludCByZXR2YWw7CiAKIAlpZiAocmVzb3VyY2UtPnR5cGUgIT0gVk1FX1NMQVZFKSB7Ci0JCXByaW50aygiTm90IGEgc2xhdmUgcmVzb3VyY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIk5vdCBhIHNsYXZlIHJlc291cmNlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaW1hZ2UgPSBsaXN0X2VudHJ5KHJlc291cmNlLT5lbnRyeSwgc3RydWN0IHZtZV9zbGF2ZV9yZXNvdXJjZSwgbGlzdCk7CiAKIAlpZiAoYnJpZGdlLT5zbGF2ZV9zZXQgPT0gTlVMTCkgewotCQlwcmludGsoIkZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlyZXR1cm4gLUVOT1NZUzsKIAl9CiAKLQlpZighKCgoaW1hZ2UtPmFkZHJlc3NfYXR0ciAmIGFzcGFjZSkgPT0gYXNwYWNlKSAmJgorCWlmICghKCgoaW1hZ2UtPmFkZHJlc3NfYXR0ciAmIGFzcGFjZSkgPT0gYXNwYWNlKSAmJgogCQkoKGltYWdlLT5jeWNsZV9hdHRyICYgY3ljbGUpID09IGN5Y2xlKSkpIHsKLQkJcHJpbnRrKCJJbnZhbGlkIGF0dHJpYnV0ZXNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgYXR0cmlidXRlc1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXJldHZhbCA9IHZtZV9jaGVja193aW5kb3coYXNwYWNlLCB2bWVfYmFzZSwgc2l6ZSk7Ci0JaWYocmV0dmFsKQorCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKIAlyZXR1cm4gYnJpZGdlLT5zbGF2ZV9zZXQoaW1hZ2UsIGVuYWJsZWQsIHZtZV9iYXNlLCBzaXplLCBidWZfYmFzZSwKQEAgLTMyNyw3ICszMjcsNyBAQAogfQogRVhQT1JUX1NZTUJPTCh2bWVfc2xhdmVfc2V0KTsKIAotaW50IHZtZV9zbGF2ZV9nZXQgKHN0cnVjdCB2bWVfcmVzb3VyY2UgKnJlc291cmNlLCBpbnQgKmVuYWJsZWQsCitpbnQgdm1lX3NsYXZlX2dldChzdHJ1Y3Qgdm1lX3Jlc291cmNlICpyZXNvdXJjZSwgaW50ICplbmFibGVkLAogCXVuc2lnbmVkIGxvbmcgbG9uZyAqdm1lX2Jhc2UsIHVuc2lnbmVkIGxvbmcgbG9uZyAqc2l6ZSwKIAlkbWFfYWRkcl90ICpidWZfYmFzZSwgdm1lX2FkZHJlc3NfdCAqYXNwYWNlLCB2bWVfY3ljbGVfdCAqY3ljbGUpCiB7CkBAIC0zMzUsMTQgKzMzNSwxNCBAQAogCXN0cnVjdCB2bWVfc2xhdmVfcmVzb3VyY2UgKmltYWdlOwogCiAJaWYgKHJlc291cmNlLT50eXBlICE9IFZNRV9TTEFWRSkgewotCQlwcmludGsoIk5vdCBhIHNsYXZlIHJlc291cmNlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJOb3QgYSBzbGF2ZSByZXNvdXJjZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWltYWdlID0gbGlzdF9lbnRyeShyZXNvdXJjZS0+ZW50cnksIHN0cnVjdCB2bWVfc2xhdmVfcmVzb3VyY2UsIGxpc3QpOwogCiAJaWYgKGJyaWRnZS0+c2xhdmVfZ2V0ID09IE5VTEwpIHsKLQkJcHJpbnRrKCJ2bWVfc2xhdmVfZ2V0IG5vdCBzdXBwb3J0ZWRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgInZtZV9zbGF2ZV9nZXQgbm90IHN1cHBvcnRlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMzU2LDE0ICszNTYsMTQgQEAKIAlzdHJ1Y3Qgdm1lX3NsYXZlX3Jlc291cmNlICpzbGF2ZV9pbWFnZTsKIAogCWlmIChyZXNvdXJjZS0+dHlwZSAhPSBWTUVfU0xBVkUpIHsKLQkJcHJpbnRrKCJOb3QgYSBzbGF2ZSByZXNvdXJjZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiTm90IGEgc2xhdmUgcmVzb3VyY2VcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJc2xhdmVfaW1hZ2UgPSBsaXN0X2VudHJ5KHJlc291cmNlLT5lbnRyeSwgc3RydWN0IHZtZV9zbGF2ZV9yZXNvdXJjZSwKIAkJbGlzdCk7CiAJaWYgKHNsYXZlX2ltYWdlID09IE5VTEwpIHsKLQkJcHJpbnRrKCJDYW4ndCBmaW5kIHNsYXZlIHJlc291cmNlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBmaW5kIHNsYXZlIHJlc291cmNlXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzg0LDcgKzM4NCw3IEBACiAgKiBSZXF1ZXN0IGEgbWFzdGVyIGltYWdlIHdpdGggc3BlY2lmaWMgYXR0cmlidXRlcywgcmV0dXJuIHNvbWUgdW5pcXVlCiAgKiBpZGVudGlmaWVyLgogICovCi1zdHJ1Y3Qgdm1lX3Jlc291cmNlICogdm1lX21hc3Rlcl9yZXF1ZXN0KHN0cnVjdCBkZXZpY2UgKmRldiwKK3N0cnVjdCB2bWVfcmVzb3VyY2UgKnZtZV9tYXN0ZXJfcmVxdWVzdChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJdm1lX2FkZHJlc3NfdCBhZGRyZXNzLCB2bWVfY3ljbGVfdCBjeWNsZSwgdm1lX3dpZHRoX3QgZHdpZHRoKQogewogCXN0cnVjdCB2bWVfYnJpZGdlICpicmlkZ2U7CkBAIC00MTEsNyArNDExLDcgQEAKIAogCQkvKiBGaW5kIGFuIHVubG9ja2VkIGFuZCBjb21wYXRpYmxlIGltYWdlICovCiAJCXNwaW5fbG9jaygmKG1hc3Rlcl9pbWFnZS0+bG9jaykpOwotCQlpZigoKG1hc3Rlcl9pbWFnZS0+YWRkcmVzc19hdHRyICYgYWRkcmVzcykgPT0gYWRkcmVzcykgJiYKKwkJaWYgKCgobWFzdGVyX2ltYWdlLT5hZGRyZXNzX2F0dHIgJiBhZGRyZXNzKSA9PSBhZGRyZXNzKSAmJgogCQkJKChtYXN0ZXJfaW1hZ2UtPmN5Y2xlX2F0dHIgJiBjeWNsZSkgPT0gY3ljbGUpICYmCiAJCQkoKG1hc3Rlcl9pbWFnZS0+d2lkdGhfYXR0ciAmIGR3aWR0aCkgPT0gZHdpZHRoKSAmJgogCQkJKG1hc3Rlcl9pbWFnZS0+bG9ja2VkID09IDApKSB7CkBAIC00NTIsNyArNDUyLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0wodm1lX21hc3Rlcl9yZXF1ZXN0KTsKIAotaW50IHZtZV9tYXN0ZXJfc2V0IChzdHJ1Y3Qgdm1lX3Jlc291cmNlICpyZXNvdXJjZSwgaW50IGVuYWJsZWQsCitpbnQgdm1lX21hc3Rlcl9zZXQoc3RydWN0IHZtZV9yZXNvdXJjZSAqcmVzb3VyY2UsIGludCBlbmFibGVkLAogCXVuc2lnbmVkIGxvbmcgbG9uZyB2bWVfYmFzZSwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUsCiAJdm1lX2FkZHJlc3NfdCBhc3BhY2UsIHZtZV9jeWNsZV90IGN5Y2xlLCB2bWVfd2lkdGhfdCBkd2lkdGgpCiB7CkBAIC00NjEsMjYgKzQ2MSwyNiBAQAogCWludCByZXR2YWw7CiAKIAlpZiAocmVzb3VyY2UtPnR5cGUgIT0gVk1FX01BU1RFUikgewotCQlwcmludGsoIk5vdCBhIG1hc3RlciByZXNvdXJjZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiTm90IGEgbWFzdGVyIHJlc291cmNlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaW1hZ2UgPSBsaXN0X2VudHJ5KHJlc291cmNlLT5lbnRyeSwgc3RydWN0IHZtZV9tYXN0ZXJfcmVzb3VyY2UsIGxpc3QpOwogCiAJaWYgKGJyaWRnZS0+bWFzdGVyX3NldCA9PSBOVUxMKSB7Ci0JCXByaW50aygidm1lX21hc3Rlcl9zZXQgbm90IHN1cHBvcnRlZFxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInZtZV9tYXN0ZXJfc2V0IG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZighKCgoaW1hZ2UtPmFkZHJlc3NfYXR0ciAmIGFzcGFjZSkgPT0gYXNwYWNlKSAmJgorCWlmICghKCgoaW1hZ2UtPmFkZHJlc3NfYXR0ciAmIGFzcGFjZSkgPT0gYXNwYWNlKSAmJgogCQkoKGltYWdlLT5jeWNsZV9hdHRyICYgY3ljbGUpID09IGN5Y2xlKSAmJgogCQkoKGltYWdlLT53aWR0aF9hdHRyICYgZHdpZHRoKSA9PSBkd2lkdGgpKSkgewotCQlwcmludGsoIkludmFsaWQgYXR0cmlidXRlc1xuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkludmFsaWQgYXR0cmlidXRlc1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXJldHZhbCA9IHZtZV9jaGVja193aW5kb3coYXNwYWNlLCB2bWVfYmFzZSwgc2l6ZSk7Ci0JaWYocmV0dmFsKQorCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKIAlyZXR1cm4gYnJpZGdlLT5tYXN0ZXJfc2V0KGltYWdlLCBlbmFibGVkLCB2bWVfYmFzZSwgc2l6ZSwgYXNwYWNlLApAQCAtNDg4LDcgKzQ4OCw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKHZtZV9tYXN0ZXJfc2V0KTsKIAotaW50IHZtZV9tYXN0ZXJfZ2V0IChzdHJ1Y3Qgdm1lX3Jlc291cmNlICpyZXNvdXJjZSwgaW50ICplbmFibGVkLAoraW50IHZtZV9tYXN0ZXJfZ2V0KHN0cnVjdCB2bWVfcmVzb3VyY2UgKnJlc291cmNlLCBpbnQgKmVuYWJsZWQsCiAJdW5zaWduZWQgbG9uZyBsb25nICp2bWVfYmFzZSwgdW5zaWduZWQgbG9uZyBsb25nICpzaXplLAogCXZtZV9hZGRyZXNzX3QgKmFzcGFjZSwgdm1lX2N5Y2xlX3QgKmN5Y2xlLCB2bWVfd2lkdGhfdCAqZHdpZHRoKQogewpAQCAtNDk2LDE0ICs0OTYsMTQgQEAKIAlzdHJ1Y3Qgdm1lX21hc3Rlcl9yZXNvdXJjZSAqaW1hZ2U7CiAKIAlpZiAocmVzb3VyY2UtPnR5cGUgIT0gVk1FX01BU1RFUikgewotCQlwcmludGsoIk5vdCBhIG1hc3RlciByZXNvdXJjZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiTm90IGEgbWFzdGVyIHJlc291cmNlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaW1hZ2UgPSBsaXN0X2VudHJ5KHJlc291cmNlLT5lbnRyeSwgc3RydWN0IHZtZV9tYXN0ZXJfcmVzb3VyY2UsIGxpc3QpOwogCiAJaWYgKGJyaWRnZS0+bWFzdGVyX2dldCA9PSBOVUxMKSB7Ci0JCXByaW50aygidm1lX21hc3Rlcl9zZXQgbm90IHN1cHBvcnRlZFxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInZtZV9tYXN0ZXJfc2V0IG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTUxNSw3ICs1MTUsNyBAQAogLyoKICAqIFJlYWQgZGF0YSBvdXQgb2YgVk1FIHNwYWNlIGludG8gYSBidWZmZXIuCiAgKi8KLXNzaXplX3Qgdm1lX21hc3Rlcl9yZWFkIChzdHJ1Y3Qgdm1lX3Jlc291cmNlICpyZXNvdXJjZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsCitzc2l6ZV90IHZtZV9tYXN0ZXJfcmVhZChzdHJ1Y3Qgdm1lX3Jlc291cmNlICpyZXNvdXJjZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsCiAJbG9mZl90IG9mZnNldCkKIHsKIAlzdHJ1Y3Qgdm1lX2JyaWRnZSAqYnJpZGdlID0gZmluZF9icmlkZ2UocmVzb3VyY2UpOwpAQCAtNTIzLDEyICs1MjMsMTIgQEAKIAlzaXplX3QgbGVuZ3RoOwogCiAJaWYgKGJyaWRnZS0+bWFzdGVyX3JlYWQgPT0gTlVMTCkgewotCQlwcmludGsoIlJlYWRpbmcgZnJvbSByZXNvdXJjZSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUmVhZGluZyBmcm9tIHJlc291cmNlIG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAocmVzb3VyY2UtPnR5cGUgIT0gVk1FX01BU1RFUikgewotCQlwcmludGsoIk5vdCBhIG1hc3RlciByZXNvdXJjZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiTm90IGEgbWFzdGVyIHJlc291cmNlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC01MzcsNyArNTM3LDcgQEAKIAlsZW5ndGggPSB2bWVfZ2V0X3NpemUocmVzb3VyY2UpOwogCiAJaWYgKG9mZnNldCA+IGxlbmd0aCkgewotCQlwcmludGsoIkludmFsaWQgT2Zmc2V0XG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSW52YWxpZCBPZmZzZXRcbiIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKQEAgLTU1Miw3ICs1NTIsNyBAQAogLyoKICAqIFdyaXRlIGRhdGEgb3V0IHRvIFZNRSBzcGFjZSBmcm9tIGEgYnVmZmVyLgogICovCi1zc2l6ZV90IHZtZV9tYXN0ZXJfd3JpdGUgKHN0cnVjdCB2bWVfcmVzb3VyY2UgKnJlc291cmNlLCB2b2lkICpidWYsCitzc2l6ZV90IHZtZV9tYXN0ZXJfd3JpdGUoc3RydWN0IHZtZV9yZXNvdXJjZSAqcmVzb3VyY2UsIHZvaWQgKmJ1ZiwKIAlzaXplX3QgY291bnQsIGxvZmZfdCBvZmZzZXQpCiB7CiAJc3RydWN0IHZtZV9icmlkZ2UgKmJyaWRnZSA9IGZpbmRfYnJpZGdlKHJlc291cmNlKTsKQEAgLTU2MCwxMiArNTYwLDEyIEBACiAJc2l6ZV90IGxlbmd0aDsKIAogCWlmIChicmlkZ2UtPm1hc3Rlcl93cml0ZSA9PSBOVUxMKSB7Ci0JCXByaW50aygiV3JpdGluZyB0byByZXNvdXJjZSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV3JpdGluZyB0byByZXNvdXJjZSBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKHJlc291cmNlLT50eXBlICE9IFZNRV9NQVNURVIpIHsKLQkJcHJpbnRrKCJOb3QgYSBtYXN0ZXIgcmVzb3VyY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIk5vdCBhIG1hc3RlciByZXNvdXJjZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNTc0LDcgKzU3NCw3IEBACiAJbGVuZ3RoID0gdm1lX2dldF9zaXplKHJlc291cmNlKTsKIAogCWlmIChvZmZzZXQgPiBsZW5ndGgpIHsKLQkJcHJpbnRrKCJJbnZhbGlkIE9mZnNldFxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkludmFsaWQgT2Zmc2V0XG4iKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCkBAIC01ODgsMTkgKzU4OCwxOSBAQAogLyoKICAqIFBlcmZvcm0gUk1XIGN5Y2xlIHRvIHByb3ZpZGVkIGxvY2F0aW9uLgogICovCi11bnNpZ25lZCBpbnQgdm1lX21hc3Rlcl9ybXcgKHN0cnVjdCB2bWVfcmVzb3VyY2UgKnJlc291cmNlLCB1bnNpZ25lZCBpbnQgbWFzaywKK3Vuc2lnbmVkIGludCB2bWVfbWFzdGVyX3JtdyhzdHJ1Y3Qgdm1lX3Jlc291cmNlICpyZXNvdXJjZSwgdW5zaWduZWQgaW50IG1hc2ssCiAJdW5zaWduZWQgaW50IGNvbXBhcmUsIHVuc2lnbmVkIGludCBzd2FwLCBsb2ZmX3Qgb2Zmc2V0KQogewogCXN0cnVjdCB2bWVfYnJpZGdlICpicmlkZ2UgPSBmaW5kX2JyaWRnZShyZXNvdXJjZSk7CiAJc3RydWN0IHZtZV9tYXN0ZXJfcmVzb3VyY2UgKmltYWdlOwogCiAJaWYgKGJyaWRnZS0+bWFzdGVyX3JtdyA9PSBOVUxMKSB7Ci0JCXByaW50aygiV3JpdGluZyB0byByZXNvdXJjZSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV3JpdGluZyB0byByZXNvdXJjZSBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKHJlc291cmNlLT50eXBlICE9IFZNRV9NQVNURVIpIHsKLQkJcHJpbnRrKCJOb3QgYSBtYXN0ZXIgcmVzb3VyY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIk5vdCBhIG1hc3RlciByZXNvdXJjZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNjE1LDE0ICs2MTUsMTQgQEAKIAlzdHJ1Y3Qgdm1lX21hc3Rlcl9yZXNvdXJjZSAqbWFzdGVyX2ltYWdlOwogCiAJaWYgKHJlc291cmNlLT50eXBlICE9IFZNRV9NQVNURVIpIHsKLQkJcHJpbnRrKCJOb3QgYSBtYXN0ZXIgcmVzb3VyY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIk5vdCBhIG1hc3RlciByZXNvdXJjZVxuIik7CiAJCXJldHVybjsKIAl9CiAKIAltYXN0ZXJfaW1hZ2UgPSBsaXN0X2VudHJ5KHJlc291cmNlLT5lbnRyeSwgc3RydWN0IHZtZV9tYXN0ZXJfcmVzb3VyY2UsCiAJCWxpc3QpOwogCWlmIChtYXN0ZXJfaW1hZ2UgPT0gTlVMTCkgewotCQlwcmludGsoIkNhbid0IGZpbmQgbWFzdGVyIHJlc291cmNlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBmaW5kIG1hc3RlciByZXNvdXJjZVxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTY0Myw3ICs2NDMsNyBAQAogICogUmVxdWVzdCBhIERNQSBjb250cm9sbGVyIHdpdGggc3BlY2lmaWMgYXR0cmlidXRlcywgcmV0dXJuIHNvbWUgdW5pcXVlCiAgKiBpZGVudGlmaWVyLgogICovCi1zdHJ1Y3Qgdm1lX3Jlc291cmNlICp2bWVfZG1hX3JlcXVlc3Qoc3RydWN0IGRldmljZSAqZGV2KQorc3RydWN0IHZtZV9yZXNvdXJjZSAqdm1lX2RtYV9yZXF1ZXN0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm1lX2RtYV9yb3V0ZV90IHJvdXRlKQogewogCXN0cnVjdCB2bWVfYnJpZGdlICpicmlkZ2U7CiAJc3RydWN0IGxpc3RfaGVhZCAqZG1hX3BvcyA9IE5VTEw7CkBAIC02NjYsMTMgKzY2NiwxNSBAQAogCQkJc3RydWN0IHZtZV9kbWFfcmVzb3VyY2UsIGxpc3QpOwogCiAJCWlmIChkbWFfY3RybHIgPT0gTlVMTCkgewotCQkJcHJpbnRrKCJSZWdpc3RlcmVkIE5VTEwgRE1BIHJlc291cmNlXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiUmVnaXN0ZXJlZCBOVUxMIERNQSByZXNvdXJjZVxuIik7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCS8qIEZpbmQgYW4gdW5sb2NrZWQgY29udHJvbGxlciAqLworCQkvKiBGaW5kIGFuIHVubG9ja2VkIGFuZCBjb21wYXRpYmxlIGNvbnRyb2xsZXIgKi8KIAkJbXV0ZXhfbG9jaygmKGRtYV9jdHJsci0+bXR4KSk7Ci0JCWlmKGRtYV9jdHJsci0+bG9ja2VkID09IDApIHsKKwkJaWYgKCgoZG1hX2N0cmxyLT5yb3V0ZV9hdHRyICYgcm91dGUpID09IHJvdXRlKSAmJgorCQkJKGRtYV9jdHJsci0+bG9ja2VkID09IDApKSB7CisKIAkJCWRtYV9jdHJsci0+bG9ja2VkID0gMTsKIAkJCW11dGV4X3VubG9jaygmKGRtYV9jdHJsci0+bXR4KSk7CiAJCQlhbGxvY2F0ZWRfY3RybHIgPSBkbWFfY3RybHI7CkBAIC03MTUsMTYgKzcxNywxNSBAQAogCXN0cnVjdCB2bWVfZG1hX2xpc3QgKmRtYV9saXN0OwogCiAJaWYgKHJlc291cmNlLT50eXBlICE9IFZNRV9ETUEpIHsKLQkJcHJpbnRrKCJOb3QgYSBETUEgcmVzb3VyY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIk5vdCBhIERNQSByZXNvdXJjZVxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAogCWN0cmxyID0gbGlzdF9lbnRyeShyZXNvdXJjZS0+ZW50cnksIHN0cnVjdCB2bWVfZG1hX3Jlc291cmNlLCBsaXN0KTsKIAotCWRtYV9saXN0ID0gKHN0cnVjdCB2bWVfZG1hX2xpc3QgKilrbWFsbG9jKAotCQlzaXplb2Yoc3RydWN0IHZtZV9kbWFfbGlzdCksIEdGUF9LRVJORUwpOwotCWlmKGRtYV9saXN0ID09IE5VTEwpIHsKLQkJcHJpbnRrKCJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBuZXcgZG1hIGxpc3RcbiIpOworCWRtYV9saXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZtZV9kbWFfbGlzdCksIEdGUF9LRVJORUwpOworCWlmIChkbWFfbGlzdCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgbmV3IGRtYSBsaXN0XG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCUlOSVRfTElTVF9IRUFEKCYoZG1hX2xpc3QtPmVudHJpZXMpKTsKQEAgLTc0NCwxNyArNzQ1LDE3IEBACiAJc3RydWN0IHZtZV9kbWFfYXR0ciAqYXR0cmlidXRlczsKIAlzdHJ1Y3Qgdm1lX2RtYV9wYXR0ZXJuICpwYXR0ZXJuX2F0dHI7CiAKLQlhdHRyaWJ1dGVzID0gKHN0cnVjdCB2bWVfZG1hX2F0dHIgKilrbWFsbG9jKAotCQlzaXplb2Yoc3RydWN0IHZtZV9kbWFfYXR0ciksIEdGUF9LRVJORUwpOwotCWlmKGF0dHJpYnV0ZXMgPT0gTlVMTCkgewotCQlwcmludGsoIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGF0dHJpYnV0ZXMgc3RydWN0dXJlXG4iKTsKKwlhdHRyaWJ1dGVzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZtZV9kbWFfYXR0ciksIEdGUF9LRVJORUwpOworCWlmIChhdHRyaWJ1dGVzID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBhdHRyaWJ1dGVzICIKKwkJCSJzdHJ1Y3R1cmVcbiIpOwogCQlnb3RvIGVycl9hdHRyOwogCX0KIAotCXBhdHRlcm5fYXR0ciA9IChzdHJ1Y3Qgdm1lX2RtYV9wYXR0ZXJuICopa21hbGxvYygKLQkJc2l6ZW9mKHN0cnVjdCB2bWVfZG1hX3BhdHRlcm4pLCBHRlBfS0VSTkVMKTsKLQlpZihwYXR0ZXJuX2F0dHIgPT0gTlVMTCkgewotCQlwcmludGsoIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBhdHRlcm4gYXR0cmlidXRlc1xuIik7CisJcGF0dGVybl9hdHRyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZtZV9kbWFfcGF0dGVybiksIEdGUF9LRVJORUwpOworCWlmIChwYXR0ZXJuX2F0dHIgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBhdHRlcm4gIgorCQkJImF0dHJpYnV0ZXNcbiIpOwogCQlnb3RvIGVycl9wYXQ7CiAJfQogCkBAIC03ODQsMTcgKzc4NSwxNyBAQAogCiAJLyogWFhYIFJ1biBzb21lIHNhbml0eSBjaGVja3MgaGVyZSAqLwogCi0JYXR0cmlidXRlcyA9IChzdHJ1Y3Qgdm1lX2RtYV9hdHRyICopa21hbGxvYygKLQkJc2l6ZW9mKHN0cnVjdCB2bWVfZG1hX2F0dHIpLCBHRlBfS0VSTkVMKTsKLQlpZihhdHRyaWJ1dGVzID09IE5VTEwpIHsKLQkJcHJpbnRrKCJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBhdHRyaWJ1dGVzIHN0cnVjdHVyZVxuIik7CisJYXR0cmlidXRlcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2bWVfZG1hX2F0dHIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoYXR0cmlidXRlcyA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYXR0cmlidXRlcyAiCisJCQkic3RydWN0dXJlXG4iKTsKIAkJZ290byBlcnJfYXR0cjsKIAl9CiAKLQlwY2lfYXR0ciA9IChzdHJ1Y3Qgdm1lX2RtYV9wY2kgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgdm1lX2RtYV9wY2kpLAotCQlHRlBfS0VSTkVMKTsKLQlpZihwY2lfYXR0ciA9PSBOVUxMKSB7Ci0JCXByaW50aygiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcGNpIGF0dHJpYnV0ZXNcbiIpOworCXBjaV9hdHRyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZtZV9kbWFfcGNpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBjaV9hdHRyID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBwY2kgIgorCQkJImF0dHJpYnV0ZXNcbiIpOwogCQlnb3RvIGVycl9wY2k7CiAJfQogCkBAIC04MjQsMTkgKzgyNSwxOCBAQAogCXN0cnVjdCB2bWVfZG1hX2F0dHIgKmF0dHJpYnV0ZXM7CiAJc3RydWN0IHZtZV9kbWFfdm1lICp2bWVfYXR0cjsKIAotCS8qIFhYWCBSdW4gc29tZSBzYW5pdHkgY2hlY2tzIGhlcmUgKi8KLQotCWF0dHJpYnV0ZXMgPSAoc3RydWN0IHZtZV9kbWFfYXR0ciAqKWttYWxsb2MoCisJYXR0cmlidXRlcyA9IGttYWxsb2MoCiAJCXNpemVvZihzdHJ1Y3Qgdm1lX2RtYV9hdHRyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYoYXR0cmlidXRlcyA9PSBOVUxMKSB7Ci0JCXByaW50aygiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYXR0cmlidXRlcyBzdHJ1Y3R1cmVcbiIpOworCWlmIChhdHRyaWJ1dGVzID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBhdHRyaWJ1dGVzICIKKwkJCSJzdHJ1Y3R1cmVcbiIpOwogCQlnb3RvIGVycl9hdHRyOwogCX0KIAotCXZtZV9hdHRyID0gKHN0cnVjdCB2bWVfZG1hX3ZtZSAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2bWVfZG1hX3ZtZSksCi0JCUdGUF9LRVJORUwpOwotCWlmKHZtZV9hdHRyID09IE5VTEwpIHsKLQkJcHJpbnRrKCJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB2bWUgYXR0cmlidXRlc1xuIik7CisJdm1lX2F0dHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgdm1lX2RtYV92bWUpLCBHRlBfS0VSTkVMKTsKKwlpZiAodm1lX2F0dHIgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHZtZSAiCisJCQkiYXR0cmlidXRlc1xuIik7CiAJCWdvdG8gZXJyX3ZtZTsKIAl9CiAKQEAgLTg3NSwxMiArODc1LDEyIEBACiAJaW50IHJldHZhbDsKIAogCWlmIChicmlkZ2UtPmRtYV9saXN0X2FkZCA9PSBOVUxMKSB7Ci0JCXByaW50aygiTGluayBMaXN0IERNQSBnZW5lcmF0aW9uIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJMaW5rIExpc3QgRE1BIGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICghbXV0ZXhfdHJ5bG9jaygmKGxpc3QtPm10eCkpKSB7Ci0JCXByaW50aygiTGluayBMaXN0IGFscmVhZHkgc3VibWl0dGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJMaW5rIExpc3QgYWxyZWFkeSBzdWJtaXR0ZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTg5OCw3ICs4OTgsNyBAQAogCWludCByZXR2YWw7CiAKIAlpZiAoYnJpZGdlLT5kbWFfbGlzdF9leGVjID09IE5VTEwpIHsKLQkJcHJpbnRrKCJMaW5rIExpc3QgRE1BIGV4ZWN1dGlvbiBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJMaW5rIExpc3QgRE1BIGV4ZWN1dGlvbiBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC05MTgsMTIgKzkxOCwxMiBAQAogCWludCByZXR2YWw7CiAKIAlpZiAoYnJpZGdlLT5kbWFfbGlzdF9lbXB0eSA9PSBOVUxMKSB7Ci0JCXByaW50aygiRW1wdHlpbmcgb2YgTGluayBMaXN0cyBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRW1wdHlpbmcgb2YgTGluayBMaXN0cyBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKCFtdXRleF90cnlsb2NrKCYobGlzdC0+bXR4KSkpIHsKLQkJcHJpbnRrKCJMaW5rIExpc3QgaW4gdXNlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJMaW5rIExpc3QgaW4gdXNlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC05MzMsNyArOTMzLDcgQEAKIAkgKi8KIAlyZXR2YWwgPSBicmlkZ2UtPmRtYV9saXN0X2VtcHR5KGxpc3QpOwogCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKCJVbmFibGUgdG8gZW1wdHkgbGluay1saXN0IGVudHJpZXNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBlbXB0eSBsaW5rLWxpc3QgZW50cmllc1xuIik7CiAJCW11dGV4X3VubG9jaygmKGxpc3QtPm10eCkpOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KQEAgLTk0OSwxOSArOTQ5LDE5IEBACiAJc3RydWN0IHZtZV9kbWFfcmVzb3VyY2UgKmN0cmxyOwogCiAJaWYgKHJlc291cmNlLT50eXBlICE9IFZNRV9ETUEpIHsKLQkJcHJpbnRrKCJOb3QgYSBETUEgcmVzb3VyY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIk5vdCBhIERNQSByZXNvdXJjZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWN0cmxyID0gbGlzdF9lbnRyeShyZXNvdXJjZS0+ZW50cnksIHN0cnVjdCB2bWVfZG1hX3Jlc291cmNlLCBsaXN0KTsKIAogCWlmICghbXV0ZXhfdHJ5bG9jaygmKGN0cmxyLT5tdHgpKSkgewotCQlwcmludGsoIlJlc291cmNlIGJ1c3ksIGNhbid0IGZyZWVcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIlJlc291cmNlIGJ1c3ksIGNhbid0IGZyZWVcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCWlmICghKGxpc3RfZW1wdHkoJihjdHJsci0+cGVuZGluZykpICYmIGxpc3RfZW1wdHkoJihjdHJsci0+cnVubmluZykpKSkgewotCQlwcmludGsoIlJlc291cmNlIHN0aWxsIHByb2Nlc3NpbmcgdHJhbnNmZXJzXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUmVzb3VyY2Ugc3RpbGwgcHJvY2Vzc2luZyB0cmFuc2ZlcnNcbiIpOwogCQltdXRleF91bmxvY2soJihjdHJsci0+bXR4KSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQpAQCAtOTkxLDcgKzk5MSw3IEBACiBFWFBPUlRfU1lNQk9MKHZtZV9pcnFfaGFuZGxlcik7CiAKIGludCB2bWVfaXJxX3JlcXVlc3Qoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbGV2ZWwsIGludCBzdGF0aWQsCi0Jdm9pZCAoKmNhbGxiYWNrKShpbnQgbGV2ZWwsIGludCB2ZWN0b3IsIHZvaWQgKnByaXZfZGF0YSksCisJdm9pZCAoKmNhbGxiYWNrKShpbnQsIGludCwgdm9pZCAqKSwKIAl2b2lkICpwcml2X2RhdGEpCiB7CiAJc3RydWN0IHZtZV9icmlkZ2UgKmJyaWRnZTsKQEAgLTEwMDIsNyArMTAwMiw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmKChsZXZlbCA8IDEpIHx8IChsZXZlbCA+IDcpKSB7CisJaWYgKChsZXZlbCA8IDEpIHx8IChsZXZlbCA+IDcpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBpbnRlcnJ1cHQgbGV2ZWxcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xMDI1LDcgKzEwMjUsNyBAQAogCWJyaWRnZS0+aXJxW2xldmVsIC0gMV0uY2FsbGJhY2tbc3RhdGlkXS5mdW5jID0gY2FsbGJhY2s7CiAKIAkvKiBFbmFibGUgSVJRIGxldmVsICovCi0JYnJpZGdlLT5pcnFfc2V0KGxldmVsLCAxLCAxKTsKKwlicmlkZ2UtPmlycV9zZXQoYnJpZGdlLCBsZXZlbCwgMSwgMSk7CiAKIAltdXRleF91bmxvY2soJihicmlkZ2UtPmlycV9tdHgpKTsKIApAQCAtMTA0Myw3ICsxMDQzLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmKChsZXZlbCA8IDEpIHx8IChsZXZlbCA+IDcpKSB7CisJaWYgKChsZXZlbCA8IDEpIHx8IChsZXZlbCA+IDcpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBpbnRlcnJ1cHQgbGV2ZWxcbiIpOwogCQlyZXR1cm47CiAJfQpAQCAtMTA1OSw3ICsxMDU5LDcgQEAKIAogCS8qIERpc2FibGUgSVJRIGxldmVsIGlmIG5vIG1vcmUgaW50ZXJydXB0cyBhdHRhY2hlZCBhdCB0aGlzIGxldmVsKi8KIAlpZiAoYnJpZGdlLT5pcnFbbGV2ZWwgLSAxXS5jb3VudCA9PSAwKQotCQlicmlkZ2UtPmlycV9zZXQobGV2ZWwsIDAsIDEpOworCQlicmlkZ2UtPmlycV9zZXQoYnJpZGdlLCBsZXZlbCwgMCwgMSk7CiAKIAlicmlkZ2UtPmlycVtsZXZlbCAtIDFdLmNhbGxiYWNrW3N0YXRpZF0uZnVuYyA9IE5VTEw7CiAJYnJpZGdlLT5pcnFbbGV2ZWwgLSAxXS5jYWxsYmFja1tzdGF0aWRdLnByaXZfZGF0YSA9IE5VTEw7CkBAIC0xMDc4LDE3ICsxMDc4LDE3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmKChsZXZlbCA8IDEpIHx8IChsZXZlbCA+IDcpKSB7CisJaWYgKChsZXZlbCA8IDEpIHx8IChsZXZlbCA+IDcpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkludmFsaWQgaW50ZXJydXB0IGxldmVsXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKGJyaWRnZS0+aXJxX2dlbmVyYXRlID09IE5VTEwpIHsKLQkJcHJpbnRrKCJJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSW50ZXJydXB0IGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJldHVybiBicmlkZ2UtPmlycV9nZW5lcmF0ZShsZXZlbCwgc3RhdGlkKTsKKwlyZXR1cm4gYnJpZGdlLT5pcnFfZ2VuZXJhdGUoYnJpZGdlLCBsZXZlbCwgc3RhdGlkKTsKIH0KIEVYUE9SVF9TWU1CT0wodm1lX2lycV9nZW5lcmF0ZSk7CiAKQEAgLTExODksOCArMTE4OSw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIFhYWCBDaGVjayBwYXJhbWV0ZXJzICovCi0KIAlyZXR1cm4gYnJpZGdlLT5sbV9zZXQobG0sIGxtX2Jhc2UsIGFzcGFjZSwgY3ljbGUpOwogfQogRVhQT1JUX1NZTUJPTCh2bWVfbG1fc2V0KTsKQEAgLTEyOTcsMTEgKzEyOTUsMTEgQEAKIAl9CiAKIAlpZiAoYnJpZGdlLT5zbG90X2dldCA9PSBOVUxMKSB7Ci0JCXByaW50aygidm1lX3Nsb3RfZ2V0IG5vdCBzdXBwb3J0ZWRcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2bWVfc2xvdF9nZXQgbm90IHN1cHBvcnRlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJldHVybiBicmlkZ2UtPnNsb3RfZ2V0KCk7CisJcmV0dXJuIGJyaWRnZS0+c2xvdF9nZXQoYnJpZGdlKTsKIH0KIEVYUE9SVF9TWU1CT0wodm1lX3Nsb3RfZ2V0KTsKIApAQCAtMTMzMSw3ICsxMzI5LDcgQEAKIAltdXRleF91bmxvY2soJnZtZV9idXNfbnVtX210eCk7CiB9CiAKLWludCB2bWVfcmVnaXN0ZXJfYnJpZGdlIChzdHJ1Y3Qgdm1lX2JyaWRnZSAqYnJpZGdlKQoraW50IHZtZV9yZWdpc3Rlcl9icmlkZ2Uoc3RydWN0IHZtZV9icmlkZ2UgKmJyaWRnZSkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJaW50IHJldHZhbDsKQEAgLTEzNTgsNyArMTM1Niw3IEBACiAJCWRldl9zZXRfbmFtZShkZXYsICJ2bWUtJXguJXgiLCBicmlkZ2UtPm51bSwgaSArIDEpOwogCiAJCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcihkZXYpOwotCQlpZihyZXR2YWwpCisJCWlmIChyZXR2YWwpCiAJCQlnb3RvIGVycl9yZWc7CiAJfQogCkBAIC0xMzc1LDcgKzEzNzMsNyBAQAogfQogRVhQT1JUX1NZTUJPTCh2bWVfcmVnaXN0ZXJfYnJpZGdlKTsKIAotdm9pZCB2bWVfdW5yZWdpc3Rlcl9icmlkZ2UgKHN0cnVjdCB2bWVfYnJpZGdlICpicmlkZ2UpCit2b2lkIHZtZV91bnJlZ2lzdGVyX2JyaWRnZShzdHJ1Y3Qgdm1lX2JyaWRnZSAqYnJpZGdlKQogewogCWludCBpOwogCXN0cnVjdCBkZXZpY2UgKmRldjsKQEAgLTEzOTIsNyArMTM5MCw3IEBACiAKIC8qIC0gRHJpdmVyIFJlZ2lzdHJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotaW50IHZtZV9yZWdpc3Rlcl9kcml2ZXIgKHN0cnVjdCB2bWVfZHJpdmVyICpkcnYpCitpbnQgdm1lX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qgdm1lX2RyaXZlciAqZHJ2KQogewogCWRydi0+ZHJpdmVyLm5hbWUgPSBkcnYtPm5hbWU7CiAJZHJ2LT5kcml2ZXIuYnVzID0gJnZtZV9idXNfdHlwZTsKQEAgLTE0MDEsNyArMTM5OSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKHZtZV9yZWdpc3Rlcl9kcml2ZXIpOwogCi12b2lkIHZtZV91bnJlZ2lzdGVyX2RyaXZlciAoc3RydWN0IHZtZV9kcml2ZXIgKmRydikKK3ZvaWQgdm1lX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB2bWVfZHJpdmVyICpkcnYpCiB7CiAJZHJpdmVyX3VucmVnaXN0ZXIoJmRydi0+ZHJpdmVyKTsKIH0KQEAgLTE0MTgsMTAgKzE0MTYsMTAgQEAKIAogCS8qIERldGVybWluZSBzbG90IG51bWJlciAqLwogCW51bSA9IDA7Ci0Jd2hpbGUobnVtIDwgVk1FX1NMT1RTX01BWCkgewotCQlpZigmKGJyaWRnZS0+ZGV2W251bV0pID09IGRldikgeworCXdoaWxlIChudW0gPCBWTUVfU0xPVFNfTUFYKSB7CisJCWlmICgmKGJyaWRnZS0+ZGV2W251bV0pID09IGRldikKIAkJCWJyZWFrOwotCQl9CisKIAkJbnVtKys7CiAJfQogCWlmIChudW0gPT0gVk1FX1NMT1RTX01BWCkgewpAQCAtMTQzNyw4ICsxNDM1LDggQEAKIAogc3RhdGljIHN0cnVjdCB2bWVfZHJpdmVyICpkZXZfdG9fdm1lX2RyaXZlcihzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JaWYoZGV2LT5kcml2ZXIgPT0gTlVMTCkKLQkJcHJpbnRrKCJCdWdnZXIgZGV2LT5kcml2ZXIgaXMgTlVMTFxuIik7CisJaWYgKGRldi0+ZHJpdmVyID09IE5VTEwpCisJCXByaW50ayhLRVJOX0VSUiAiQnVnZ2VyIGRldi0+ZHJpdmVyIGlzIE5VTExcbiIpOwogCiAJcmV0dXJuIGNvbnRhaW5lcl9vZihkZXYtPmRyaXZlciwgc3RydWN0IHZtZV9kcml2ZXIsIGRyaXZlcik7CiB9CkBAIC0xNDYyLDcgKzE0NjAsNyBAQAogCX0KIAogCWkgPSAwOwotCXdoaWxlKChkcml2ZXItPmJpbmRfdGFibGVbaV0uYnVzICE9IDApIHx8CisJd2hpbGUgKChkcml2ZXItPmJpbmRfdGFibGVbaV0uYnVzICE9IDApIHx8CiAJCShkcml2ZXItPmJpbmRfdGFibGVbaV0uc2xvdCAhPSAwKSkgewogCiAJCWlmIChicmlkZ2UtPm51bSA9PSBkcml2ZXItPmJpbmRfdGFibGVbaV0uYnVzKSB7CkBAIC0xNDkzLDkgKzE0OTEsOCBAQAogCWRyaXZlciA9IGRldl90b192bWVfZHJpdmVyKGRldik7CiAJYnJpZGdlID0gZGV2X3RvX2JyaWRnZShkZXYpOwogCi0JaWYoZHJpdmVyLT5wcm9iZSAhPSBOVUxMKSB7CisJaWYgKGRyaXZlci0+cHJvYmUgIT0gTlVMTCkKIAkJcmV0dmFsID0gZHJpdmVyLT5wcm9iZShkZXYsIGJyaWRnZS0+bnVtLCB2bWVfY2FsY19zbG90KGRldikpOwotCX0KIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC0xNTA5LDkgKzE1MDYsOCBAQAogCWRyaXZlciA9IGRldl90b192bWVfZHJpdmVyKGRldik7CiAJYnJpZGdlID0gZGV2X3RvX2JyaWRnZShkZXYpOwogCi0JaWYoZHJpdmVyLT5yZW1vdmUgIT0gTlVMTCkgeworCWlmIChkcml2ZXItPnJlbW92ZSAhPSBOVUxMKQogCQlyZXR2YWwgPSBkcml2ZXItPnJlbW92ZShkZXYsIGJyaWRnZS0+bnVtLCB2bWVfY2FsY19zbG90KGRldikpOwotCX0KIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC0xNTI0LDE4ICsxNTIwLDE4IEBACiB9OwogRVhQT1JUX1NZTUJPTCh2bWVfYnVzX3R5cGUpOwogCi1zdGF0aWMgaW50IF9faW5pdCB2bWVfaW5pdCAodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHZtZV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGJ1c19yZWdpc3Rlcigmdm1lX2J1c190eXBlKTsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IHZtZV9leGl0ICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHZtZV9leGl0KHZvaWQpCiB7CiAJYnVzX3VucmVnaXN0ZXIoJnZtZV9idXNfdHlwZSk7CiB9CiAKIE1PRFVMRV9ERVNDUklQVElPTigiVk1FIGJyaWRnZSBkcml2ZXIgZnJhbWV3b3JrIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXJ0eW4gV2VsY2ggPG1hcnR5bi53ZWxjaEBnZWZhbnVjLmNvbSIpOworTU9EVUxFX0FVVEhPUigiTWFydHluIFdlbGNoIDxtYXJ0eW4ud2VsY2hAZ2UuY29tIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9pbml0KHZtZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92bWUvdm1lLmggYi9kcml2ZXJzL3N0YWdpbmcvdm1lL3ZtZS5oCmluZGV4IDk3ZGMyMmUuLjQ4NzY4Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92bWUvdm1lLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS92bWUuaApAQCAtNjgsNiArNjgsMTQgQEAKICNkZWZpbmUgVk1FX0RNQV9QQVRURVJOX1dPUkQJCSgxPDwxKQogI2RlZmluZSBWTUVfRE1BX1BBVFRFUk5fSU5DUkVNRU5UCSgxPDwyKQogCit0eXBlZGVmIHUzMiB2bWVfZG1hX3JvdXRlX3Q7CisjZGVmaW5lIFZNRV9ETUFfVk1FX1RPX01FTQkJKDE8PDApCisjZGVmaW5lIFZNRV9ETUFfTUVNX1RPX1ZNRQkJKDE8PDEpCisjZGVmaW5lIFZNRV9ETUFfVk1FX1RPX1ZNRQkJKDE8PDIpCisjZGVmaW5lIFZNRV9ETUFfTUVNX1RPX01FTQkJKDE8PDMpCisjZGVmaW5lIFZNRV9ETUFfUEFUVEVSTl9UT19WTUUJCSgxPDw0KQorI2RlZmluZSBWTUVfRE1BX1BBVFRFUk5fVE9fTUVNCQkoMTw8NSkKKwogc3RydWN0IHZtZV9kbWFfYXR0ciB7CiAJdm1lX2RtYV90IHR5cGU7CiAJdm9pZCAqcHJpdmF0ZTsKQEAgLTk4LDMyICsxMDYsMzMgQEAKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAgICBkcml2ZXI7CiB9OwogCi12b2lkICogdm1lX2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IHZtZV9yZXNvdXJjZSAqLCBzaXplX3QsIGRtYV9hZGRyX3QgKik7Cit2b2lkICp2bWVfYWxsb2NfY29uc2lzdGVudChzdHJ1Y3Qgdm1lX3Jlc291cmNlICosIHNpemVfdCwgZG1hX2FkZHJfdCAqKTsKIHZvaWQgdm1lX2ZyZWVfY29uc2lzdGVudChzdHJ1Y3Qgdm1lX3Jlc291cmNlICosIHNpemVfdCwgIHZvaWQgKiwKIAlkbWFfYWRkcl90KTsKIAogc2l6ZV90IHZtZV9nZXRfc2l6ZShzdHJ1Y3Qgdm1lX3Jlc291cmNlICopOwogCi1zdHJ1Y3Qgdm1lX3Jlc291cmNlICogdm1lX3NsYXZlX3JlcXVlc3Qoc3RydWN0IGRldmljZSAqLCB2bWVfYWRkcmVzc190LCB2bWVfY3ljbGVfdCk7Ci1pbnQgdm1lX3NsYXZlX3NldCAoc3RydWN0IHZtZV9yZXNvdXJjZSAqLCBpbnQsIHVuc2lnbmVkIGxvbmcgbG9uZywKK3N0cnVjdCB2bWVfcmVzb3VyY2UgKnZtZV9zbGF2ZV9yZXF1ZXN0KHN0cnVjdCBkZXZpY2UgKiwgdm1lX2FkZHJlc3NfdCwKKwl2bWVfY3ljbGVfdCk7CitpbnQgdm1lX3NsYXZlX3NldChzdHJ1Y3Qgdm1lX3Jlc291cmNlICosIGludCwgdW5zaWduZWQgbG9uZyBsb25nLAogCXVuc2lnbmVkIGxvbmcgbG9uZywgZG1hX2FkZHJfdCwgdm1lX2FkZHJlc3NfdCwgdm1lX2N5Y2xlX3QpOwotaW50IHZtZV9zbGF2ZV9nZXQgKHN0cnVjdCB2bWVfcmVzb3VyY2UgKiwgaW50ICosIHVuc2lnbmVkIGxvbmcgbG9uZyAqLAoraW50IHZtZV9zbGF2ZV9nZXQoc3RydWN0IHZtZV9yZXNvdXJjZSAqLCBpbnQgKiwgdW5zaWduZWQgbG9uZyBsb25nICosCiAJdW5zaWduZWQgbG9uZyBsb25nICosIGRtYV9hZGRyX3QgKiwgdm1lX2FkZHJlc3NfdCAqLCB2bWVfY3ljbGVfdCAqKTsKIHZvaWQgdm1lX3NsYXZlX2ZyZWUoc3RydWN0IHZtZV9yZXNvdXJjZSAqKTsKIAotc3RydWN0IHZtZV9yZXNvdXJjZSAqIHZtZV9tYXN0ZXJfcmVxdWVzdChzdHJ1Y3QgZGV2aWNlICosIHZtZV9hZGRyZXNzX3QsIHZtZV9jeWNsZV90LAotCXZtZV93aWR0aF90KTsKLWludCB2bWVfbWFzdGVyX3NldCAoc3RydWN0IHZtZV9yZXNvdXJjZSAqLCBpbnQsIHVuc2lnbmVkIGxvbmcgbG9uZywKK3N0cnVjdCB2bWVfcmVzb3VyY2UgKnZtZV9tYXN0ZXJfcmVxdWVzdChzdHJ1Y3QgZGV2aWNlICosIHZtZV9hZGRyZXNzX3QsCisJdm1lX2N5Y2xlX3QsIHZtZV93aWR0aF90KTsKK2ludCB2bWVfbWFzdGVyX3NldChzdHJ1Y3Qgdm1lX3Jlc291cmNlICosIGludCwgdW5zaWduZWQgbG9uZyBsb25nLAogCXVuc2lnbmVkIGxvbmcgbG9uZywgdm1lX2FkZHJlc3NfdCwgdm1lX2N5Y2xlX3QsIHZtZV93aWR0aF90KTsKLWludCB2bWVfbWFzdGVyX2dldCAoc3RydWN0IHZtZV9yZXNvdXJjZSAqLCBpbnQgKiwgdW5zaWduZWQgbG9uZyBsb25nICosCitpbnQgdm1lX21hc3Rlcl9nZXQoc3RydWN0IHZtZV9yZXNvdXJjZSAqLCBpbnQgKiwgdW5zaWduZWQgbG9uZyBsb25nICosCiAJdW5zaWduZWQgbG9uZyBsb25nICosIHZtZV9hZGRyZXNzX3QgKiwgdm1lX2N5Y2xlX3QgKiwgdm1lX3dpZHRoX3QgKik7CiBzc2l6ZV90IHZtZV9tYXN0ZXJfcmVhZChzdHJ1Y3Qgdm1lX3Jlc291cmNlICosIHZvaWQgKiwgc2l6ZV90LCBsb2ZmX3QpOwogc3NpemVfdCB2bWVfbWFzdGVyX3dyaXRlKHN0cnVjdCB2bWVfcmVzb3VyY2UgKiwgdm9pZCAqLCBzaXplX3QsIGxvZmZfdCk7Ci11bnNpZ25lZCBpbnQgdm1lX21hc3Rlcl9ybXcgKHN0cnVjdCB2bWVfcmVzb3VyY2UgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsCit1bnNpZ25lZCBpbnQgdm1lX21hc3Rlcl9ybXcoc3RydWN0IHZtZV9yZXNvdXJjZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwKIAl1bnNpZ25lZCBpbnQsIGxvZmZfdCk7CiB2b2lkIHZtZV9tYXN0ZXJfZnJlZShzdHJ1Y3Qgdm1lX3Jlc291cmNlICopOwogCi1zdHJ1Y3Qgdm1lX3Jlc291cmNlICp2bWVfZG1hX3JlcXVlc3Qoc3RydWN0IGRldmljZSAqKTsKK3N0cnVjdCB2bWVfcmVzb3VyY2UgKnZtZV9kbWFfcmVxdWVzdChzdHJ1Y3QgZGV2aWNlICosIHZtZV9kbWFfcm91dGVfdCk7CiBzdHJ1Y3Qgdm1lX2RtYV9saXN0ICp2bWVfbmV3X2RtYV9saXN0KHN0cnVjdCB2bWVfcmVzb3VyY2UgKik7CiBzdHJ1Y3Qgdm1lX2RtYV9hdHRyICp2bWVfZG1hX3BhdHRlcm5fYXR0cmlidXRlKHUzMiwgdm1lX3BhdHRlcm5fdCk7CiBzdHJ1Y3Qgdm1lX2RtYV9hdHRyICp2bWVfZG1hX3BjaV9hdHRyaWJ1dGUoZG1hX2FkZHJfdCk7CkBAIC0xNTMsOCArMTYyLDggQEAKIAogaW50IHZtZV9zbG90X2dldChzdHJ1Y3QgZGV2aWNlICopOwogCi1pbnQgdm1lX3JlZ2lzdGVyX2RyaXZlciAoc3RydWN0IHZtZV9kcml2ZXIgKik7Ci12b2lkIHZtZV91bnJlZ2lzdGVyX2RyaXZlciAoc3RydWN0IHZtZV9kcml2ZXIgKik7CitpbnQgdm1lX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qgdm1lX2RyaXZlciAqKTsKK3ZvaWQgdm1lX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB2bWVfZHJpdmVyICopOwogCiAKICNlbmRpZiAvKiBfVk1FX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdm1lL3ZtZV9hcGkudHh0IGIvZHJpdmVycy9zdGFnaW5nL3ZtZS92bWVfYXBpLnR4dAppbmRleCBhNWMxYjFjZDUuLmE5MTBhMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92bWUvdm1lX2FwaS50eHQKKysrIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS92bWVfYXBpLnR4dApAQCAtNzcsMTYgKzc3LDIxIEBACiAJc3RydWN0IHZtZV9yZXNvdXJjZSAqIHZtZV9zbGF2ZV9yZXF1ZXN0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJdm1lX2FkZHJlc3NfdCBhc3BhY2UsIHZtZV9jeWNsZV90IGN5Y2xlKTsKIAotCXN0cnVjdCB2bWVfcmVzb3VyY2UgKnZtZV9kbWFfcmVxdWVzdChzdHJ1Y3QgZGV2aWNlICpkZXYpOworCXN0cnVjdCB2bWVfcmVzb3VyY2UgKnZtZV9kbWFfcmVxdWVzdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXZtZV9kbWFfcm91dGVfdCByb3V0ZSk7CiAKIEZvciBzbGF2ZSB3aW5kb3dzIHRoZXNlIGF0dHJpYnV0ZXMgYXJlIHNwbGl0IGludG8gdGhvc2Ugb2YgdHlwZSAndm1lX2FkZHJlc3NfdCcKLWFuZCAndm1lX2N5Y2xlX3QnLiBNYXN0ZXIgd2luZG93cyBhZGQgYSBmdXJ0aGVyIHNldCBvZiBhdHRyaWJ1dGVzICd2bWVfY3ljbGVfdCcuCi1UaGVzZSBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkIGFzIGJpdG1hc2tzIGFuZCBhcyBzdWNoIGFueSBjb21iaW5hdGlvbiBvZiB0aGUKLWF0dHJpYnV0ZXMgY2FuIGJlIHJlcXVlc3RlZCBmb3IgYSBzaW5nbGUgd2luZG93LCB0aGUgY29yZSB3aWxsIGFzc2lnbiBhIHdpbmRvdwotdGhhdCBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzLCByZXR1cm5pbmcgYSBwb2ludGVyIG9mIHR5cGUgdm1lX3Jlc291cmNlIHRoYXQKLXNob3VsZCBiZSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBhbGxvY2F0ZWQgcmVzb3VyY2Ugd2hlbiBpdCBpcyB1c2VkLiBJZiBhbgotdW5hbGxvY2F0ZWQgd2luZG93IGZpdHRpbmcgdGhlIHJlcXVpcmVtZW50cyBjYW4gbm90IGJlIGZvdW5kIGEgTlVMTCBwb2ludGVyIHdpbGwKLWJlIHJldHVybmVkLgorYW5kICd2bWVfY3ljbGVfdCcuIE1hc3RlciB3aW5kb3dzIGFkZCBhIGZ1cnRoZXIgc2V0IG9mIGF0dHJpYnV0ZXMKKyd2bWVfY3ljbGVfdCcuICBUaGVzZSBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkIGFzIGJpdG1hc2tzIGFuZCBhcyBzdWNoIGFueQorY29tYmluYXRpb24gb2YgdGhlIGF0dHJpYnV0ZXMgY2FuIGJlIHJlcXVlc3RlZCBmb3IgYSBzaW5nbGUgd2luZG93LCB0aGUgY29yZQord2lsbCBhc3NpZ24gYSB3aW5kb3cgdGhhdCBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzLCByZXR1cm5pbmcgYSBwb2ludGVyIG9mIHR5cGUKK3ZtZV9yZXNvdXJjZSB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBhbGxvY2F0ZWQgcmVzb3VyY2Ugd2hlbiBpdCBpcwordXNlZC4gRm9yIERNQSBjb250cm9sbGVycywgdGhlIHJlcXVlc3QgZnVuY3Rpb24gcmVxdWlyZXMgdGhlIHBvdGVudGlhbAorZGlyZWN0aW9uIG9mIGFueSB0cmFuc2ZlcnMgdG8gYmUgcHJvdmlkZWQgaW4gdGhlIHJvdXRlIGF0dHJpYnV0ZXMuIFRoaXMgaXMKK3R5cGljYWxseSBWTUUtdG8tTUVNIGFuZC9vciBNRU0tdG8tVk1FLCB0aG91Z2ggc29tZSBoYXJkd2FyZSBjYW4gc3VwcG9ydAorVk1FLXRvLVZNRSBhbmQgTUVNLXRvLU1FTSB0cmFuc2ZlcnMgYXMgd2VsbCBhcyB0ZXN0IHBhdHRlcm4gZ2VuZXJhdGlvbi4gSWYgYW4KK3VuYWxsb2NhdGVkIHdpbmRvdyBmaXR0aW5nIHRoZSByZXF1aXJlbWVudHMgY2FuIG5vdCBiZSBmb3VuZCBhIE5VTEwgcG9pbnRlcgord2lsbCBiZSByZXR1cm5lZC4KIAogRnVuY3Rpb25zIGFyZSBhbHNvIHByb3ZpZGVkIHRvIGZyZWUgd2luZG93IGFsbG9jYXRpb25zIG9uY2UgdGhleSBhcmUgbm8gbG9uZ2VyCiByZXF1aXJlZC4gVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBiZSBwYXNzZWQgdGhlIHBvaW50ZXIgdG8gdGhlIHJlc291cmNlIHByb3ZpZGVkCkBAIC0yMzcsNiArMjQyLDEyIEBACiAJCXN0cnVjdCB2bWVfZG1hX2F0dHIgKnNyYywgc3RydWN0IHZtZV9kbWFfYXR0ciAqZGVzdCwKIAkJc2l6ZV90IGNvdW50KTsKIAorTk9URToJVGhlIGRldGFpbGVkIGF0dHJpYnV0ZXMgb2YgdGhlIHRyYW5zZmVycyBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uCisJYXJlIG5vdCBjaGVja2VkIHVudGlsIGFuIGVudHJ5IGlzIGFkZGVkIHRvIGEgRE1BIGxpc3QsIHRoZSByZXF1ZXN0CisJZm9yIGEgRE1BIGNoYW5uZWwgcHVyZWx5IGNoZWNrcyB0aGUgZGlyZWN0aW9ucyBpbiB3aGljaCB0aGUKKwljb250cm9sbGVyIGlzIGV4cGVjdGVkIHRvIHRyYW5zZmVyIGRhdGEuIEFzIGEgcmVzdWx0IGl0IGlzCisJcG9zc2libGUgZm9yIHRoaXMgY2FsbCB0byByZXR1cm4gYW4gZXJyb3IsIGZvciBleGFtcGxlIGlmIHRoZQorCXNvdXJjZSBvciBkZXN0aW5hdGlvbiBpcyBpbiBhbiB1bnN1cHBvcnRlZCBWTUUgYWRkcmVzcyBzcGFjZS4KIAogVHJhbnNmZXIgQXR0cmlidXRlcwogLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3ZtZS92bWVfYnJpZGdlLmggYi9kcml2ZXJzL3N0YWdpbmcvdm1lL3ZtZV9icmlkZ2UuaAppbmRleCA4NTFmYTkyLi5iNjUzZWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdm1lL3ZtZV9icmlkZ2UuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL3ZtZV9icmlkZ2UuaApAQCAtMTksNyArMTksNyBAQAogCXZtZV9hZGRyZXNzX3QgYWRkcmVzc19hdHRyOwogCXZtZV9jeWNsZV90IGN5Y2xlX2F0dHI7CiAJdm1lX3dpZHRoX3Qgd2lkdGhfYXR0cjsKLQlzdHJ1Y3QgcmVzb3VyY2UgcGNpX3Jlc291cmNlOwkvKiBYWFggUmVuYW1lIHRvIGJlIGJ1cyBhZ25vc3RpYyAqLworCXN0cnVjdCByZXNvdXJjZSBidXNfcmVzb3VyY2U7CiAJdm9pZCAqa2Vybl9iYXNlOwogfTsKIApAQCAtNjQsNiArNjQsNyBAQAogCWludCBudW1iZXI7CiAJc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nOwogCXN0cnVjdCBsaXN0X2hlYWQgcnVubmluZzsKKwl2bWVfZG1hX3JvdXRlX3Qgcm91dGVfYXR0cjsKIH07CiAKIHN0cnVjdCB2bWVfbG1fcmVzb3VyY2UgewpAQCAtMTAxLDcgKzEwMiw3IEBACiAgKiBDdXJyZW50bHkgd2UgYXNzdW1lIHRoYXQgYWxsIGNoaXBzIGFyZSBQQ0ktYmFzZWQKICAqLwogc3RydWN0IHZtZV9icmlkZ2UgewotICAgICAgICBjaGFyIG5hbWVbVk1FTkFNU0laXTsKKwljaGFyIG5hbWVbVk1FTkFNU0laXTsKIAlpbnQgbnVtOwogCXN0cnVjdCBsaXN0X2hlYWQgbWFzdGVyX3Jlc291cmNlczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNsYXZlX3Jlc291cmNlczsKQEAgLTExMiw3ICsxMTMsNyBAQAogCiAJLyogQnJpZGdlIEluZm8gLSBYWFggTW92ZSB0byBwcml2YXRlIHN0cnVjdHVyZT8gKi8KIAlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQ7CS8qIEdlbmVyaWMgZGV2aWNlIHN0cnVjdCAocGRldi0+ZGV2IGZvciBQQ0kpICovCi0Jdm9pZCAqIGJhc2U7CQkvKiBCYXNlIEFkZHJlc3Mgb2YgZGV2aWNlIHJlZ2lzdGVycyAqLworCXZvaWQgKmRyaXZlcl9wcml2OwkvKiBQcml2YXRlIHBvaW50ZXIgZm9yIHRoZSBicmlkZ2UgZHJpdmVyICovCiAKIAlzdHJ1Y3QgZGV2aWNlIGRldltWTUVfU0xPVFNfTUFYXTsJLyogRGV2aWNlIHJlZ2lzdGVyZWQgd2l0aAogCQkJCQkJICogZGV2aWNlIG1vZGVsIG9uIFZNRSBidXMKQEAgLTE1MSw4ICsxNTIsOCBAQAogCWludCAoKmRtYV9saXN0X2VtcHR5KSAoc3RydWN0IHZtZV9kbWFfbGlzdCAqKTsKIAogCS8qIEludGVycnVwdCBGdW5jdGlvbnMgKi8KLQl2b2lkICgqaXJxX3NldCkgKGludCwgaW50LCBpbnQpOwotCWludCAoKmlycV9nZW5lcmF0ZSkgKGludCwgaW50KTsKKwl2b2lkICgqaXJxX3NldCkgKHN0cnVjdCB2bWVfYnJpZGdlICosIGludCwgaW50LCBpbnQpOworCWludCAoKmlycV9nZW5lcmF0ZSkgKHN0cnVjdCB2bWVfYnJpZGdlICosIGludCwgaW50KTsKIAogCS8qIExvY2F0aW9uIG1vbml0b3IgZnVuY3Rpb25zICovCiAJaW50ICgqbG1fc2V0KSAoc3RydWN0IHZtZV9sbV9yZXNvdXJjZSAqLCB1bnNpZ25lZCBsb25nIGxvbmcsCkBAIC0xNjMsMTAyICsxNjQsMTIgQEAKIAlpbnQgKCpsbV9kZXRhY2gpIChzdHJ1Y3Qgdm1lX2xtX3Jlc291cmNlICosIGludCk7CiAKIAkvKiBDUi9DU1Igc3BhY2UgZnVuY3Rpb25zICovCi0JaW50ICgqc2xvdF9nZXQpICh2b2lkKTsKLQkvKiBVc2Ugc3RhbmRhcmQgbWFzdGVyIHJlYWQgYW5kIHdyaXRlIGZ1bmN0aW9ucyB0byBhY2Nlc3MgQ1IvQ1NSICovCi0KLSNpZiAwCi0JaW50ICgqc2V0X3ByZWZldGNoKSAodm9pZCk7Ci0JaW50ICgqZ2V0X3ByZWZldGNoKSAodm9pZCk7Ci0JaW50ICgqc2V0X2FyYml0ZXIpICh2b2lkKTsKLQlpbnQgKCpnZXRfYXJiaXRlcikgKHZvaWQpOwotCWludCAoKnNldF9yZXF1ZXN0b3IpICh2b2lkKTsKLQlpbnQgKCpnZXRfcmVxdWVzdG9yKSAodm9pZCk7Ci0jZW5kaWYKKwlpbnQgKCpzbG90X2dldCkgKHN0cnVjdCB2bWVfYnJpZGdlICopOwogfTsKIAogdm9pZCB2bWVfaXJxX2hhbmRsZXIoc3RydWN0IHZtZV9icmlkZ2UgKiwgaW50LCBpbnQpOwogCi1pbnQgdm1lX3JlZ2lzdGVyX2JyaWRnZSAoc3RydWN0IHZtZV9icmlkZ2UgKik7Ci12b2lkIHZtZV91bnJlZ2lzdGVyX2JyaWRnZSAoc3RydWN0IHZtZV9icmlkZ2UgKik7CitpbnQgdm1lX3JlZ2lzdGVyX2JyaWRnZShzdHJ1Y3Qgdm1lX2JyaWRnZSAqKTsKK3ZvaWQgdm1lX3VucmVnaXN0ZXJfYnJpZGdlKHN0cnVjdCB2bWVfYnJpZGdlICopOwogCiAjZW5kaWYgLyogX1ZNRV9CUklER0VfSF8gKi8KLQotI2lmIDAKLS8qCi0gKiAgVk1FYnVzIEdFVCBJTkZPIEFyZyBTdHJ1Y3R1cmUKLSAqLwotc3RydWN0IHZtZUluZm9DZmcgewotCWludCB2bWVTbG90TnVtOwkJLyogIFZNRSBzbG90IG51bWJlciBvZiBpbnRlcmVzdCAqLwotCWludCBib2FyZFJlc3BvbmRlZDsJLyogQm9hcmQgcmVzcG9uZGVkICovCi0JY2hhciBzeXNDb25GbGFnOwkvKiAgU3lzdGVtIGNvbnRyb2xsZXIgZmxhZyAqLwotCWludCB2bWVDb250cm9sbGVySUQ7CS8qICBWZW5kb3IvZGV2aWNlIElEIG9mIFZNRSBicmlkZ2UgKi8KLQlpbnQgdm1lQ29udHJvbGxlclJldjsJLyogIFJldmlzaW9uIG9mIFZNRSBicmlkZ2UgKi8KLQljaGFyIG9zTmFtZVs4XTsJCS8qICBOYW1lIG9mIE9TIGUuZy4gIkxpbnV4IiAqLwotCWludCB2bWVTaGFyZWREYXRhVmFsaWQ7CS8qICBWYWxpZGl0eSBvZiBkYXRhIHN0cnVjdCAqLwotCWludCB2bWVEcml2ZXJSZXY7CS8qICBSZXZpc2lvbiBvZiBWTUUgZHJpdmVyICovCi0JdW5zaWduZWQgaW50IHZtZUFkZHJIaVs4XTsJLyogQWRkcmVzcyBvbiBWTUUgYnVzICovCi0JdW5zaWduZWQgaW50IHZtZUFkZHJMb1s4XTsJLyogQWRkcmVzcyBvbiBWTUUgYnVzICovCi0JdW5zaWduZWQgaW50IHZtZVNpemVbOF07CS8qIFNpemUgb24gVk1FIGJ1cyAqLwotCXVuc2lnbmVkIGludCB2bWVBbVs4XTsJLyogQWRkcmVzcyBtb2RpZmllciBvbiBWTUUgYnVzICovCi0JaW50IHJlc2VydmVkOwkJLyogRm9yIGZ1dHVyZSB1c2UgKi8KLX07Ci10eXBlZGVmIHN0cnVjdCB2bWVJbmZvQ2ZnIHZtZUluZm9DZmdfdDsKLQotLyoKLSAqICBWTUVidXMgUmVxdWVzdGVyIEFyZyBTdHJ1Y3R1cmUKLSAqLwotc3RydWN0IHZtZVJlcXVlc3RlckNmZyB7Ci0JaW50IHJlcXVlc3RMZXZlbDsJLyogIFJlcXVlc3RlciBCdXMgUmVxdWVzdCBMZXZlbCAqLwotCWNoYXIgZmFpck1vZGU7CQkvKiAgUmVxdWVzdGVyIEZhaXJuZXNzIE1vZGUgSW5kaWNhdG9yICovCi0JaW50IHJlbGVhc2VNb2RlOwkvKiAgUmVxdWVzdGVyIEJ1cyBSZWxlYXNlIE1vZGUgKi8KLQlpbnQgdGltZW9uVGltZW91dFRpbWVyOwkvKiAgTWFzdGVyIFRpbWUtb24gVGltZS1vdXQgVGltZXIgKi8KLQlpbnQgdGltZW9mZlRpbWVvdXRUaW1lcjsJLyogIE1hc3RlciBUaW1lLW9mZiBUaW1lLW91dCBUaW1lciAqLwotCWludCByZXNlcnZlZDsJCS8qIEZvciBmdXR1cmUgdXNlICovCi19OwotdHlwZWRlZiBzdHJ1Y3Qgdm1lUmVxdWVzdGVyQ2ZnIHZtZVJlcXVlc3RlckNmZ190OwotCi0vKgotICogIFZNRWJ1cyBBcmJpdGVyIEFyZyBTdHJ1Y3R1cmUKLSAqLwotc3RydWN0IHZtZUFyYml0ZXJDZmcgewotCXZtZV9hcmJpdHJhdGlvbl90IGFyYml0ZXJNb2RlOwkvKiAgQXJiaXRyYXRpb24gU2NoZWR1bGluZyBBbGdvcml0aG0gKi8KLQljaGFyIGFyYml0ZXJUaW1lb3V0RmxhZzsJLyogIEFyYml0ZXIgVGltZS1vdXQgVGltZXIgSW5kaWNhdG9yICovCi0JaW50IGdsb2JhbFRpbWVvdXRUaW1lcjsJLyogIFZNRWJ1cyBHbG9iYWwgVGltZS1vdXQgVGltZXIgKi8KLQljaGFyIG5vRWFybHlSZWxlYXNlRmxhZzsJLyogIE5vIEVhcmx5IFJlbGVhc2Ugb24gQkJVU1kgKi8KLQlpbnQgcmVzZXJ2ZWQ7CQkvKiBGb3IgZnV0dXJlIHVzZSAqLwotfTsKLXR5cGVkZWYgc3RydWN0IHZtZUFyYml0ZXJDZmcgdm1lQXJiaXRlckNmZ190OwotCi0KLS8qCi0gKiAgVk1FYnVzIFJNVyBDb25maWd1cmF0aW9uIERhdGEKLSAqLwotc3RydWN0IHZtZVJtd0NmZyB7Ci0JdW5zaWduZWQgaW50IHRhcmdldEFkZHJVOwkvKiAgVk1FIEFkZHJlc3MgKFVwcGVyKSB0byB0cmlnZ2VyIFJNVyBjeWNsZSAqLwotCXVuc2lnbmVkIGludCB0YXJnZXRBZGRyOwkvKiAgVk1FIEFkZHJlc3MgKExvd2VyKSB0byB0cmlnZ2VyIFJNVyBjeWNsZSAqLwotCXZtZV9hZGRyZXNzX3QgYWRkclNwYWNlOwkvKiAgVk1FIEFkZHJlc3MgU3BhY2UgKi8KLQlpbnQgZW5hYmxlTWFzazsJCS8qICBCaXQgbWFzayBkZWZpbmluZyB0aGUgYml0cyBvZiBpbnRlcmVzdCAqLwotCWludCBjb21wYXJlRGF0YTsJLyogIERhdGEgdG8gYmUgY29tcGFyZWQgd2l0aCB0aGUgZGF0YSByZWFkICovCi0JaW50IHN3YXBEYXRhOwkJLyogIERhdGEgd3JpdHRlbiB0byB0aGUgVk1FYnVzIG9uIHN1Y2Nlc3MgKi8KLQlpbnQgbWF4QXR0ZW1wdHM7CS8qICBNYXhpbXVtIHRpbWVzIHRvIHRyeSAqLwotCWludCBudW1BdHRlbXB0czsJLyogIE51bWJlciBvZiBhdHRlbXB0cyBiZWZvcmUgc3VjY2VzcyAqLwotCWludCByZXNlcnZlZDsJCS8qIEZvciBmdXR1cmUgdXNlICovCi0KLX07Ci10eXBlZGVmIHN0cnVjdCB2bWVSbXdDZmcgdm1lUm13Q2ZnX3Q7Ci0KLS8qCi0gKiAgVk1FYnVzIExvY2F0aW9uIE1vbml0b3IgQXJnIFN0cnVjdHVyZQotICovCi1zdHJ1Y3Qgdm1lTG1DZmcgewotCXVuc2lnbmVkIGludCBhZGRyVTsJLyogIExvY2F0aW9uIE1vbml0b3IgQWRkcmVzcyB1cHBlciAqLwotCXVuc2lnbmVkIGludCBhZGRyOwkvKiAgTG9jYXRpb24gTW9uaXRvciBBZGRyZXNzIGxvd2VyICovCi0Jdm1lX2FkZHJlc3NfdCBhZGRyU3BhY2U7CS8qICBBZGRyZXNzIFNwYWNlICovCi0JaW50IHVzZXJBY2Nlc3NUeXBlOwkvKiAgVXNlci9TdXBlcnZpc29yIEFjY2VzcyBUeXBlICovCi0JaW50IGRhdGFBY2Nlc3NUeXBlOwkvKiAgRGF0YS9Qcm9ncmFtIEFjY2VzcyBUeXBlICovCi0JaW50IGxtV2FpdDsJCS8qIFRpbWUgdG8gd2FpdCBmb3IgYWNjZXNzICovCi0JaW50IGxtRXZlbnRzOwkJLyogTG0gZXZlbnQgbWFzayAqLwotCWludCByZXNlcnZlZDsJCS8qIEZvciBmdXR1cmUgdXNlICovCi19OwotdHlwZWRlZiBzdHJ1Y3Qgdm1lTG1DZmcgdm1lTG1DZmdfdDsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9jYXJkLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuYwppbmRleCBkYjc4NjE0Li5iZjRmZDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuYwpAQCAtMjc4OCwxNiArMjc4OCwxOCBAQAogCiAgICAgIC8vRGV0ZXJtaW5lcyB0aGUgaGlnaGVzdCBiYXNpYyByYXRlLgogICAgICBmb3IgKGlpID0gUkFURV81NE07IGlpID49IFJBVEVfNk07IGlpIC0tKSB7Ci0gICAgICAgICBpZiAoIChwRGV2aWNlLT53QmFzaWNSYXRlKSAmICgoV09SRCkoMTw8aWkpKSApCisgICAgICAgICBpZiAoIChwRGV2aWNlLT53QmFzaWNSYXRlKSAmICgoV09SRCkoMTw8aWkpKSApIHsKICAgICAgICAgICAgICBieVRvcE9GRE0gPSBpaTsKICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KICAgICAgfQogICAgICBwRGV2aWNlLT5ieVRvcE9GRE1CYXNpY1JhdGUgPSBieVRvcE9GRE07CiAKICAgICAgZm9yIChpaSA9IFJBVEVfMTFNOzsgaWkgLS0pIHsKLSAgICAgICAgIGlmICggKHBEZXZpY2UtPndCYXNpY1JhdGUpICYgKChXT1JEKSgxPDxpaSkpICkKKyAgICAgICAgIGlmICggKHBEZXZpY2UtPndCYXNpY1JhdGUpICYgKChXT1JEKSgxPDxpaSkpICkgewogICAgICAgICAgICAgIGJ5VG9wQ0NLID0gaWk7CiAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CiAgICAgICAgICBpZiAoaWkgPT0gUkFURV8xTSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZV9tYWluLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZV9tYWluLmMKaW5kZXggMGRhZGI3Ni4uMWQ2NDM2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2VfbWFpbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGV2aWNlX21haW4uYwpAQCAtMTEwNSwxMCArMTEwNSw3IEBACiAgICAgc3RydWN0IG5ldF9kZXZpY2UqIGRldj1wRGV2aWNlLT5kZXY7CiAKICAgICBEQkdfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX0lORk8gIiVzOiAlc1xuIixkZXYtPm5hbWUsIGdldF9jaGlwX25hbWUocERldmljZS0+Y2hpcF9pZCkpOwotICAgIERCR19QUlQoTVNHX0xFVkVMX0lORk8sIEtFUk5fSU5GTyAiJXM6IE1BQz0lMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWCIsCi0gICAgICAgIGRldi0+bmFtZSwKLSAgICAgICAgZGV2LT5kZXZfYWRkclswXSxkZXYtPmRldl9hZGRyWzFdLGRldi0+ZGV2X2FkZHJbMl0sCi0gICAgICAgIGRldi0+ZGV2X2FkZHJbM10sZGV2LT5kZXZfYWRkcls0XSxkZXYtPmRldl9hZGRyWzVdKTsKKyAgICBEQkdfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX0lORk8gIiVzOiBNQUM9JXBNIiwgZGV2LT5uYW1lLCBkZXYtPmRldl9hZGRyKTsKICNpZmRlZiBJT19NQVAKICAgICBEQkdfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX0lORk8iIElPPTB4JWx4ICAiLChVTE9ORykgcERldmljZS0+aW9hZGRyKTsKICAgICBEQkdfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX0lORk8iIElSUT0lZCBcbiIsIHBEZXZpY2UtPmRldi0+aXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaXdjdGwuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaXdjdGwuYwppbmRleCAxMDg4MzBmLi43OGI0OTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2l3Y3RsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9pd2N0bC5jCkBAIC0xNDcyLDcgKzE0NzIsNyBAQAogCQlpZiAoIGluZGV4IDwgNCApIHsKIAkJICAgIHBEZXZpY2UtPmJ5S2V5SW5kZXggPSBpbmRleDsKIAkJfQotCQllbHNlIGlmKCF3cnEtPmZsYWdzICYgSVdfRU5DT0RFX01PREUpIHsKKwkJZWxzZSBpZighKHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfTU9ERSkpIHsKIAkJCQlyYyA9IC1FSU5WQUw7CiAJCQkJcmV0dXJuIHJjOwogCSAgICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9jb3JlLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9jb3JlLmgKaW5kZXggN2Q0YmQ1ZS4uMGEyMDYwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvY29yZS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2NvcmUuaApAQCAtMTQsNyArMTQsNyBAQAogc3RydWN0IHdic29mdF9wcml2IHsKIAl1MzIgYWRhcHRlckluZGV4OwkvLyAyMDA2MDcwMy40IEFkZCBmb3IgdXNpbmcgcGFkYXB0ZXJDb250ZXh0IGdsb2JhbCBhZGFwdGVyIHBvaW50CiAKLQlXQl9MT0NBTERFU0NSSVBUIHNMb2NhbFBhcmE7CS8vIE15c2VsZiBjb25uZWN0ZWQgcGFyYW1ldGVycworCXN0cnVjdCB3Yl9sb2NhbF9wYXJhIHNMb2NhbFBhcmE7CS8vIE15c2VsZiBjb25uZWN0ZWQgcGFyYW1ldGVycwogCiAJTUxNRV9GUkFNRSBzTWxtZUZyYW1lOwkvLyBjb25uZWN0IHRvIHBlZXJTVEEgcGFyYW1ldGVycwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9sb2NhbHBhcmEuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2xvY2FscGFyYS5oCmluZGV4IDU2MjZhNzYuLmZjZjZhMDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9sb2NhbHBhcmEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9sb2NhbHBhcmEuaApAQCAtMTEwLDMzICsxMTAsMjAgQEAKIC8vIDIwMDYxMTA4IFdQUyBJRSBidWZmZXIKICNkZWZpbmUgTUFYX0lFX0FQUEVORF9TSVpFCQkJCQkyNTYgKyA0IC8vIER1ZSB0byBbRSBpZF1bTGVuZ3RoXVtPVUldW0RhdGFdIG1heSAyNTcgYnl0ZXMKIAotdHlwZWRlZiBzdHJ1Y3QgX0VWRU5UTE9HCi17Ci0JdTE2CQlDb3VudDsJCQkvL1RvdGFsIGNvdW50IGZyb20gc3RhcnQKLQl1MTYJCWluZGV4OwkJCS8vQnVmZmVyIGluZGV4LCAwIH4gNjMKLQl1MzIJCUV2ZW50VmFsdWVbNjRdOwkvL0JZVEUgM34yIDogY291bnQsIEJZVEUgMSA6IEV2ZW50LCBCWVRFIDAgOiByZWFzb24KLX0gRXZlbnRfTG9nLCAqcEV2ZW50X0xvZzsKLQotdHlwZWRlZiBzdHJ1Y3QgX0NoYW5JbmZvCitzdHJ1Y3QgY2hhbl9pbmZvCiB7CiAJdTgJCWJhbmQ7CiAJdTgJCUNoYW5ObzsKLX0gQ2hhbkluZm8sICpwQ2hhbkluZm87Cit9OwogCi10eXBlZGVmIHN0cnVjdCBfQ0hBTl9MSVNUCi17Ci0JdTE2CQkJCUNvdW50OwotCUNoYW5JbmZvCQlDaGFubmVsWzUwXTsgLy8gMTAwQgotfSBDSEFOX0xJU1QsICpwc0NIQU5fTElTVDsKLQotdHlwZWRlZiBzdHJ1Y3QgX1JhZGlvT2ZmCitzdHJ1Y3QgcmFkaW9fb2ZmCiB7CiAJdTgJCQlib0h3UmFkaW9PZmY7CiAJdTgJCQlib1N3UmFkaW9PZmY7Ci19IFJhZGlvT2ZmLCAqcHNSYWRpb09mZjsKK307CiAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci10eXBlZGVmIHN0cnVjdCBMT0NBTF9QQVJBCitzdHJ1Y3Qgd2JfbG9jYWxfcGFyYQogewogCXU4CQkJUGVybWFuZW50QWRkcmVzc1sgTUFDX0FERFJfTEVOR1RIICsgMiBdOyAJLy8gcmVhZCBmcm9tIEVQUk9NLCBtYW51ZmFjdHVyZSBzZXQgZm9yIGVhY2ggTmV0Q2FyZAogICAgIHU4ICAgIAkJVGhpc01hY0FkZHJlc3NbIE1BQ19BRERSX0xFTkdUSCArIDIgXTsJCQkvLyB0aGUgZHJpdmVyIHdpbGwgdXNlIGFjdHVhbGx5LgpAQCAtMTg2LDcgKzE3Myw3IEBACiAgICAgdTE2CQkJTGlzdGVuSW50ZXJ2YWw7ICAgICAJLy8gVGhlIGxpc3RlbiBpbnRlcnZhbCB3aGVuIFNNRSBpbnZva2luZyBNTE1FXwogICAgICAgICAgICAgCSAgICAgICAgICAgICAgICAgICAgCS8vIChSZSlBc3NvY2lhdGVfUmVxdWVzdCgpLgogCi0JUmFkaW9PZmYJCVJhZGlvT2ZmU3RhdHVzOworCXN0cnVjdCByYWRpb19vZmYJCVJhZGlvT2ZmU3RhdHVzOwogCXU4CQkJUmVzZXJ2ZWQwWzJdOwogCiAJdTgJCQlib01zUmFkaW9PZmY7CQkJLy8gTmRpcyBkZW1hbmRzIHRvIGJlIHRydWUgd2hlbiBzZXQgRGlzYXNzb2MuIE9JRCBhbmQgYmUgZmFsc2Ugd2hlbiBzZXQgU1NJRCBPSUQuCkBAIC0xOTYsNyArMTgzLDcgQEAKIAl1OAkJCVJvYW1TdGF0dXM7CiAJdTgJCQlyZXNlcnZlZDdbM107CiAKLQlDaGFuSW5mbwlDdXJyZW50Q2hhbjsJCQkvL0N1cnJlbnQgY2hhbm5lbCBuby4gYW5kIGNoYW5uZWwgYmFuZC4gSXQgbWF5IGJlIGNoYW5nZWQgYnkgc2Nhbm5pbmcuCisJc3RydWN0IGNoYW5faW5mbwlDdXJyZW50Q2hhbjsJCQkvL0N1cnJlbnQgY2hhbm5lbCBuby4gYW5kIGNoYW5uZWwgYmFuZC4gSXQgbWF5IGJlIGNoYW5nZWQgYnkgc2Nhbm5pbmcuCiAJdTgJCQlib0hhbmRvdmVyOwkJCQkvLyBSb2FtaW5nLCBIbmFkb3ZlciB0byBvdGhlciBBUC4KIAl1OAkJCWJvQ0NBYnVzeTsKIApAQCAtMjUzLDE5ICsyNDAsMTYgQEAKICAgICB1MzIJICAgCQlfZG90MTFXRVBVbmRlY3J5cHRhYmxlQ291bnQ7CiAgICAgdTMyCSAgIAkJX2RvdDExRnJhbWVEdXBsaWNhdGVDb3VudDsKIAotCUNoYW5JbmZvCUlic3NDaGFuU2V0dGluZzsJLy8gMkIuIFN0YXJ0IElCU1MgQ2hhbm5lbCBzZXR0aW5nIGJ5IHJlZ2lzdHJ5IG9yIFdXVS4KKwlzdHJ1Y3QgY2hhbl9pbmZvCUlic3NDaGFuU2V0dGluZzsJLy8gMkIuIFN0YXJ0IElCU1MgQ2hhbm5lbCBzZXR0aW5nIGJ5IHJlZ2lzdHJ5IG9yIFdXVS4KIAl1OAkJcmVzZXJ2ZWRfNVsyXTsJCS8vSXQgbWF5IG5vdCBiZSB1c2VkIGFmdGVyIGNvbnNpZGVyaW5nIFJGIHR5cGUsCiAJCQkJCQkJCQkvL3JlZ2lvbiBhbmQgbW9kdWxhdGlvbiB0eXBlLgogCi0JQ0hBTl9MSVNUCXNTdXBwb3J0Q2hhbkxpc3Q7CS8vIDg2Qi4gSXQgd2lsbCBiZSBvYnRhaW5lZCBhY2NvcmRpbmcgdG8gUkYgdHlwZSBhbmQgcmVnaW9uCiAJdTgJCXJlc2VydmVkXzZbMl07CQkvL3R3byB2YXJpYWJsZXMgYXJlIGZvciB3ZXAga2V5IGVycm9yIGRldGVjdGlvbiBhZGRlZCBieSB3cyAwMi8wMi8wNAogCiAgICAgdTMyCSAgICAgIGJXZXBLZXlFcnJvcjsKICAgICB1MzIgICAgICAgICBiVG9TZWxmUGFja2V0UmVjZWl2ZWQ7CiAgICAgdTMyICAgICAgICAgV2VwS2V5RGV0ZWN0VGltZXJDb3VudDsKIAotCUV2ZW50X0xvZwlFdmVudExvZzsKLQogCXUxNgkJU2lnbmFsTG9zdFRoOwogCXUxNgkJU2lnbmFsUm9hbVRoOwogCkBAIC0yNzQsNiArMjU4LDYgQEAKIAl1MTYJCUlFX0FwcGVuZF9zaXplOwogCXUxNgkJcmVzZXJ2ZWRfNzsKIAotfSBXQl9MT0NBTERFU0NSSVBULCAqUFdCX0xPQ0FMREVTQ1JJUFQ7Cit9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kc19mLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHNfZi5oCmluZGV4IGFiMWVhNTMuLmUwOWRkNGI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHNfZi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kc19mLmgKQEAgLTExLDkgKzExLDYgQEAKIHZvaWQgTWRzX01wZHVQcm9jZXNzKCAgc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyLCAgc3RydWN0IHdiMzVfZGVzY3JpcHRvciAqcFJ4RGVzICk7CiBleHRlcm4gdm9pZCBEYXRhRG1wKHU4ICpwZGF0YSwgdTMyIGxlbiwgdTMyIG9mZnNldCk7CiAKLS8vIEZvciBBc3luY2hyb25vdXMgaW5kaWNhdGluZy4gVGhlIHJvdXRpbmUgY29sbG9jYXRlcyB3aXRoIFVTQi4KLXZvaWQgTWRzX01zZHVQcm9jZXNzKCAgc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyLCAgUFJYTEFZRVIxIHBSeExheWVyMSwgIHU4IFNsb3RJbmRleCk7Ci0KIC8vIEZvciBkYXRhIGZyYW1lIHNlbmRpbmcgMjAwNjA4MDIKIHUxNiBNRFNfR2V0UGFja2V0U2l6ZSggIHN0cnVjdCB3YnNvZnRfcHJpdiAqYWRhcHRlciApOwogdm9pZCBNRFNfR2V0TmV4dFBhY2tldCggIHN0cnVjdCB3YnNvZnRfcHJpdiAqYWRhcHRlciwgIHN0cnVjdCB3YjM1X2Rlc2NyaXB0b3IgKnBEZXMgKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kc19zLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHNfcy5oCmluZGV4IGU4ZTEzYmQuLjIxN2ZmMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kc19zLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzX3MuaApAQCAtMTMzLDMyICsxMzMsNCBAQAogCiB9OwogCi0vLwotLy8gUmV2ZWl2ZSBMYXllciAxIEZvcm1hdC4KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdHlwZWRlZiBzdHJ1Y3QgX1JYTEFZRVIxCi17Ci0gICAgdTE2ICBTZXF1ZW5jZU51bWJlcjsgICAgIC8vIFRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIGxhc3QgcmVjZWl2ZWQgcGFja2V0LgotCXUxNglCdWZmZXJUb3RhbFNpemU7Ci0KLQl1MzIJSW5Vc2VkOwotICAgIHUzMiAgIERlY3J5cHRpb25NZXRob2Q7ICAgLy8gVGhlIGRlc2lyZWQgZGVmcmFnbWVudCBudW1iZXIgb2YgdGhlIG5leHQgaW5jb21pbmcgcGFja2V0LgotCi0JdTgJRGVGcmFnbWVudE51bWJlcjsKLQl1OAlGcmFtZVR5cGU7Ci0gICAgdTgJVHlwZUVuY2Fwc3VsYXRlZDsKLQl1OAlCdWZmZXJOdW1iZXI7Ci0KLQl1MzIJRmlyc3RGcmFtZUFycml2ZWRUaW1lOwotCi0JdTgJCUxhc3RGcmFtZVR5cGU7IC8vIDIwMDYxMDA0IGZvciBmaXggaW50ZWwgMzk0NSAncyBidWcKLQl1OAkJUkVTRVJWRURbM107ICAvL0BAIGFuc29uCi0KLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQkvLyBGb3IgYnJhbmQtbmV3IFJ4IHN5c3RlbQotCXU4CVJlc2VydmVkQnVmZmVyWyAyNDAwIF07Ly9JZiBCdWZmZXIgSUQgaXMgcmVzZXJ2ZWQgb25lLCBpdCBtdXN0IGNvcHkgdGhlIGRhdGEgaW50byB0aGlzIGFyZWEKLQl1OAkqUmVzZXJ2ZWRCdWZmZXJQb2ludDsvLyBQb2ludCB0byB0aGUgbmV4dCBhdmFpbGFiZSBhZGRyZXNzIG9mIHJlc2VydmVkIGJ1ZmZlcgotCi19UlhMQVlFUjEsICogUFJYTEFZRVIxOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWVfcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWxtZV9zLmgKaW5kZXggZWExMjY4NC4uMTIxN2ExYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWxtZV9zLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWxtZV9zLmgKQEAgLTE2NSwxNCArMTY1LDYgQEAKIAogfSBNTE1FX0FVVEhSRVFfUEFSQSwgKnBzTUxNRV9BVVRIUkVRX1BBUkE7CiAKLXN0cnVjdCBfUmVhc29uX0NvZGUgewotCi0JdTgJcGVlck1BQ2FkZHJbTUFDX0FERFJfTEVOR1RIXTsKLQl1MTYJd1JlYXNvbkNvZGU7Ci19OwotdHlwZWRlZiBzdHJ1Y3QgX1JlYXNvbl9Db2RlIE1MTUVfREVBVVRIUkVRX1BBUkEsICpwc01MTUVfREVBVVRIUkVRX1BBUkE7Ci10eXBlZGVmIHN0cnVjdCBfUmVhc29uX0NvZGUgTUxNRV9ESVNBU1NPQ1JFUV9QQVJBLCAqcHNNTE1FX0RJU0FTU09DUkVRX1BBUkE7Ci0KIHR5cGVkZWYgc3RydWN0IF9BU1NPQ1JFUSB7CiAgIHU4ICAgICAgIFBlZXJTVEFBZGRyW01BQ19BRERSX0xFTkdUSF07CiAgIHUxNiAgICAgICBDYXBhYmlsaXR5SW5mbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210by5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvLmgKaW5kZXggNGZlMjRiMC4uZmI0NzgxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvLmgKQEAgLTE0MSwxMSArMTQxLDYgQEAKICNkZWZpbmUgTVRPX0RBVEFfUkFURSgpICAgICAgICAgIE1UT19EYXRhX1JhdGVfVGJsW01UT19SQVRFX0xFVkVMKCldCiAjZGVmaW5lIE1UT19GUkFHX1RIKCkgICAgICAgICAgICBNVE9fRnJhZ19UaF9UYmxbTVRPX0ZSQUdfVEhfTEVWRUwoKV0KIAotdHlwZWRlZiBzdHJ1Y3QgewotCXU4IHR4X3JhdGU7Ci0JdTggdHhfcmV0cnlfcmF0ZTsKLX0gVFhSRVRSWV9SRUM7Ci0KIGV4dGVybiB2b2lkIE1UT19Jbml0KHN0cnVjdCB3YnNvZnRfcHJpdiAqKTsKIGV4dGVybiB2b2lkIE1UT19QZXJpb2RpY1RpbWVyRXhwaXJlZChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKik7CiBleHRlcm4gdm9pZCBNVE9fU2V0RFRPUmF0ZVJhbmdlKHN0cnVjdCB3YnNvZnRfcHJpdiAqLCB1OCAqLCB1OCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9yZWcuYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3JlZy5jCmluZGV4IGQ5MTVjYmQuLjVmNTA0OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3JlZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3JlZy5jCkBAIC0xODIzLDEyICsxODIzLDEyIEBACiAJCXJlZy0+U1EzX2ZpbHRlcltpXSA9IDB4MmY7IC8vIGhhbGYgb2YgQml0IDAgfiA2CiB9CiAKLXZvaWQgc2V0X3R4X3Bvd2VyX3Blcl9jaGFubmVsX21heDI4MjkoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsKQordm9pZCBzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfbWF4MjgyOSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHN0cnVjdCBjaGFuX2luZm8gQ2hhbm5lbCkKIHsKIAlSRlN5bnRoZXNpemVyX1NldFBvd2VySW5kZXgoIHBId0RhdGEsIDEwMCApOyAvLyAyMDA2MDYyMC4xIE1vZGlmeQogfQogCi12b2lkIHNldF90eF9wb3dlcl9wZXJfY2hhbm5lbF9hbDIyMzAoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsICkKK3ZvaWQgc2V0X3R4X3Bvd2VyX3Blcl9jaGFubmVsX2FsMjIzMCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHN0cnVjdCBjaGFuX2luZm8gQ2hhbm5lbCApCiB7CiAJdTgJaW5kZXggPSAxMDA7CiAKQEAgLTE4MzgsNyArMTgzOCw3IEBACiAJUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCBwSHdEYXRhLCBpbmRleCApOwogfQogCi12b2lkIHNldF90eF9wb3dlcl9wZXJfY2hhbm5lbF9hbDcyMzAoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsKQordm9pZCBzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfYWw3MjMwKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgc3RydWN0IGNoYW5faW5mbyBDaGFubmVsKQogewogCXU4CWksIGluZGV4ID0gMTAwOwogCkBAIC0xODY4LDcgKzE4NjgsNyBAQAogCVJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCggcEh3RGF0YSwgaW5kZXggKTsKIH0KIAotdm9pZCBzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfd2IyNDIoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsKQordm9pZCBzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfd2IyNDIoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICBzdHJ1Y3QgY2hhbl9pbmZvIENoYW5uZWwpCiB7CiAJdTgJaW5kZXggPSAxMDA7CiAKQEAgLTE5MDEsNyArMTkwMSw3IEBACiAvLyAgIE5vbmUuCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIHZvaWQKLVJGU3ludGhlc2l6ZXJfU3dpdGNoaW5nQ2hhbm5lbCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIENoYW5JbmZvIENoYW5uZWwgKQorUkZTeW50aGVzaXplcl9Td2l0Y2hpbmdDaGFubmVsKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgc3RydWN0IGNoYW5faW5mbyBDaGFubmVsICkKIHsKIAlzdHJ1Y3Qgd2IzNV9yZWcgKnJlZyA9ICZwSHdEYXRhLT5yZWc7CiAJdTMyCXBsdG1wWzE2XTsgLy8gVGhlIDE2IGlzIHRoZSBtYXhpbXVtIGNhcGFiaWxpdHkgb2YgaGFyZHdhcmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NjYW5fcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvc2Nhbl9zLmgKaW5kZXggNzc1YmI4MS4uMjA5NzE3ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NjYW5fcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NjYW5fcy5oCkBAIC0zNSw3ICszNSw2IEBACiB7CiAJdTMyCQkJCVNjYW5UeXBlOwkJCS8vcGFzc2l2ZS9hY3RpdmUgc2NhbgogCi0JQ0hBTl9MSVNUCQlzQ2hhbm5lbExpc3Q7CS8vIDg2QgogCXU4CQkJcmVzZXJ2ZWRfMVsyXTsKIAogCXN0cnVjdCBTU0lEX0VsZW1lbnQJc1NTSUQ7IC8vIDM0Qi4gc2NhbiBvbmx5IGZvciB0aGlzIFNTSUQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9hcGkuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9hcGkuaAppbmRleCA1NDk4NzgzLi5iNTg5ODI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zbWVfYXBpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvc21lX2FwaS5oCkBAIC0xOTMsOCArMTkzLDYgQEAKIHM4IHNtZV9nZXRfY3dtYXhfdmFsdWUodm9pZCAqcGNvcmVfZGF0YSwgdTE2ICpjd21heCk7CiBzOCBzbWVfZ2V0X21zX3JhZGlvX21vZGUodm9pZCAqcGNvcmVfZGF0YSwgdTggKiBwTXNSYWRpb09mZik7CiBzOCBzbWVfc2V0X21zX3JhZGlvX21vZGUodm9pZCAqcGNvcmVfZGF0YSwgdTggYm9Nc1JhZGlvT2ZmKTsKLXM4IHNtZV9nZXRfcmFkaW9fbW9kZSh2b2lkICpwY29yZV9kYXRhLCBwc1JhZGlvT2ZmIHBSYWRpb09mZkRhdGEpOwotczggc21lX3NldF9yYWRpb19tb2RlKHZvaWQgKnBjb3JlX2RhdGEsIFJhZGlvT2ZmIFJhZGlvT2ZmRGF0YSk7CiAKIHZvaWQgc21lX2dldF90eF9wb3dlcl9sZXZlbCh2b2lkICpwY29yZV9kYXRhLCB1MzIgKlR4UG93ZXIpOwogdTggc21lX3NldF90eF9wb3dlcl9sZXZlbCh2b2lkICpwY29yZV9kYXRhLCB1MzIgVHhQb3dlcik7CkBAIC0yMDMsNyArMjAxLDcgQEAKIHU4IHNtZV9zZXRfcnhfYW50ZW5uYSh2b2lkICpwY29yZV9kYXRhLCB1MzIgUnhBbnRlbm5hKTsKIHZvaWQgc21lX2dldF90eF9hbnRlbm5hKHZvaWQgKnBjb3JlX2RhdGEsIHUzMiAqVHhBbnRlbm5hKTsKIHM4IHNtZV9zZXRfdHhfYW50ZW5uYSh2b2lkICpwY29yZV9kYXRhLCB1MzIgVHhBbnRlbm5hKTsKLXM4IHNtZV9zZXRfSUJTU19jaGFuKHZvaWQgKnBjb3JlX2RhdGEsIENoYW5JbmZvIGNoYW4pOworczggc21lX3NldF9JQlNTX2NoYW4odm9pZCAqcGNvcmVfZGF0YSwgc3RydWN0IGNoYW5faW5mbyBjaGFuKTsKIAogLy8yMDA2MTEwOCBXUFMKIHM4IHNtZV9zZXRfSUVfYXBwZW5kKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICpidWZmZXIsIHUxNiBidWZfbGVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyZWdfZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJlZ19mLmgKaW5kZXggMzBmNWI1YS4uZDM1MmJjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJlZ19mLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJlZ19mLmgKQEAgLTE0LDcgKzE0LDcgQEAKIHZvaWQgTXh4X2luaXRpYWwoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKIHZvaWQgUkZTeW50aGVzaXplcl9pbml0aWFsKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7CiAvL3ZvaWQgUkZTeW50aGVzaXplcl9Td2l0Y2hpbmdDaGFubmVsKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgczggQ2hhbm5lbCApOwotdm9pZCBSRlN5bnRoZXNpemVyX1N3aXRjaGluZ0NoYW5uZWwoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsICk7Cit2b2lkIFJGU3ludGhlc2l6ZXJfU3dpdGNoaW5nQ2hhbm5lbCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHN0cnVjdCBjaGFuX2luZm8gQ2hhbm5lbCApOwogdm9pZCBCQlByb2Nlc3Nvcl9pbml0aWFsKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7CiB2b2lkIEJCUHJvY2Vzc29yX1JhdGVDaGFuZ2luZyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4IHJhdGUgKTsgLy8gMjAwNjA2MTMuMQogLy92b2lkIFJGX1JhdGVDaGFuZ2luZyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4IHJhdGUgKTsgLy8gMjAwNjA2MjYuNS5jIEFkZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2J1c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3didXNiLmMKaW5kZXggMDY3MDgyYS4uMzQ4MmVlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2J1c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYi5jCkBAIC0yMyw3ICsyMyw3IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfVkVSU0lPTigiMC4xIik7CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB3YjM1X3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCB3YjM1X3RhYmxlW10gX19kZXZpbml0Y29uc3QgPSB7CiAJeyBVU0JfREVWSUNFKDB4MDQxNiwgMHgwMDM1KSB9LAogCXsgVVNCX0RFVklDRSgweDE4RTgsIDB4NjIwMSkgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxOEU4LCAweDYyMDYpIH0sCkBAIC02NSwxNyArNjUsMTcgQEAKIH0KIAogc3RhdGljIGludCB3YnNvZnRfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CiAKLQloYWxfc2V0X2JlYWNvbl9wZXJpb2QoJnByaXYtPnNId0RhdGEsIGNvbmYtPnZpZi0+YnNzX2NvbmYuYmVhY29uX2ludCk7CisJaGFsX3NldF9iZWFjb25fcGVyaW9kKCZwcml2LT5zSHdEYXRhLCB2aWYtPmJzc19jb25mLmJlYWNvbl9pbnQpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHdic29mdF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJcHJpbnRrKCJ3YnNvZnRfcmVtb3ZlIGludGVyZmFjZSBjYWxsZWRcbiIpOwogfQpAQCAtOTIsMTMgKzkyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3YnNvZnRfZ2V0X3R4X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzKQotewotCXByaW50ayhLRVJOX0lORk8gIiVzIGNhbGxlZFxuIiwgX19mdW5jX18pOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdTY0IHdic29mdF9wcmVwYXJlX211bHRpY2FzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IG1jX2NvdW50LAogCQkJCSAgICBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCkKIHsKQEAgLTE2MSw3ICsxNTQsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotaGFsX3NldF9jdXJyZW50X2NoYW5uZWxfZXgoc3RydWN0IGh3X2RhdGEgKnBId0RhdGEsIENoYW5JbmZvIGNoYW5uZWwpCitoYWxfc2V0X2N1cnJlbnRfY2hhbm5lbF9leChzdHJ1Y3QgaHdfZGF0YSAqcEh3RGF0YSwgc3RydWN0IGNoYW5faW5mbyBjaGFubmVsKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIApAQCAtMTgwLDEwICsxNzMsMTAgQEAKIAlyZWctPk0yOF9NYWNDb250cm9sICY9IH4weGZmOwkvLyBDbGVhbiBjaGFubmVsIGluZm9ybWF0aW9uIGZpZWxkCiAJcmVnLT5NMjhfTWFjQ29udHJvbCB8PSBjaGFubmVsLkNoYW5ObzsKIAlXYjM1UmVnX1dyaXRlV2l0aENhbGxiYWNrVmFsdWUocEh3RGF0YSwgMHgwODI4LCByZWctPk0yOF9NYWNDb250cm9sLAotCQkJCSAgICAgICAoczggKikgJiBjaGFubmVsLCBzaXplb2YoQ2hhbkluZm8pKTsKKwkJCQkgICAgICAgKHM4ICopICYgY2hhbm5lbCwgc2l6ZW9mKHN0cnVjdCBjaGFuX2luZm8pKTsKIH0KIAotc3RhdGljIHZvaWQgaGFsX3NldF9jdXJyZW50X2NoYW5uZWwoc3RydWN0IGh3X2RhdGEgKnBId0RhdGEsIENoYW5JbmZvIGNoYW5uZWwpCitzdGF0aWMgdm9pZCBoYWxfc2V0X2N1cnJlbnRfY2hhbm5lbChzdHJ1Y3QgaHdfZGF0YSAqcEh3RGF0YSwgc3RydWN0IGNoYW5faW5mbyBjaGFubmVsKQogewogCWhhbF9zZXRfY3VycmVudF9jaGFubmVsX2V4KHBId0RhdGEsIGNoYW5uZWwpOwogfQpAQCAtMjUzLDcgKzI0Niw3IEBACiBzdGF0aWMgaW50IHdic29mdF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1MzIgY2hhbmdlZCkKIHsKIAlzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0JQ2hhbkluZm8gY2g7CisJc3RydWN0IGNoYW5faW5mbyBjaDsKIAogCXByaW50aygid2Jzb2Z0X2NvbmZpZyBjYWxsZWRcbiIpOwogCkBAIC0yODcsNyArMjgwLDYgQEAKIAkucHJlcGFyZV9tdWx0aWNhc3QJPSB3YnNvZnRfcHJlcGFyZV9tdWx0aWNhc3QsCiAJLmNvbmZpZ3VyZV9maWx0ZXIJPSB3YnNvZnRfY29uZmlndXJlX2ZpbHRlciwKIAkuZ2V0X3N0YXRzCQk9IHdic29mdF9nZXRfc3RhdHMsCi0JLmdldF90eF9zdGF0cwkJPSB3YnNvZnRfZ2V0X3R4X3N0YXRzLAogCS5nZXRfdHNmCQk9IHdic29mdF9nZXRfdHNmLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfbWFpbi5jCmluZGV4IDE2NzY0YTAuLmNmMGMzODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX21haW4uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9tYWluLmMKQEAgLTM3OTIsNyArMzc5Miw3IEBACiAJfQogCWlmICAoY291bnQgPiAwICkgewogCQlwcm9jX251bWJlcltjb3VudF0gPSAwOwotCQluciA9IHdsX2F0b2koIHByb2NfbnVtYmVyICk7CisJCW5yID0gc2ltcGxlX3N0cnRvdWwocHJvY19udW1iZXIgLCBOVUxMLCAwKTsKICAJCSoodW5zaWduZWQgaW50ICopZGF0YSA9IG5yOwogCQlpZiAoIG5yICYgMHg4MDAwICkgewkvLzs/a2x1ZGd5IGJ1dCBpdCBpcyB1bmNsZWFyIHRvIG1lIHdlcmUgZWxzZSB0byBwbGFjZSB0aGlzCiAjaWYgREJHCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9uZXRkZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX25ldGRldi5jCmluZGV4IGMzM2UyMjUuLmZhMDgyZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX25ldGRldi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX25ldGRldi5jCkBAIC0zNjAsNyArMzYwLDcgQEAKICAgICB3bF9sb2NrKCBscCwgJmZsYWdzICk7CiAKICAgICBpZiggc3RhdHVzICE9IEhDRl9TVUNDRVNTICkgewotCS8vIFVuc3VjY2VzZnVsbCwgdHJ5IHJlc2V0IG9mIHRoZSBjYXJkIHRvIHJlY292ZXIKKwkvLyBVbnN1Y2Nlc3NmdWwsIHRyeSByZXNldCBvZiB0aGUgY2FyZCB0byByZWNvdmVyCiAJc3RhdHVzID0gd2xfcmVzZXQoIGRldiApOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfcGNpLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9wY2kuYwppbmRleCBhM2RiMTExLi4wMWU0YmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9wY2kuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9wY2kuYwpAQCAtODEsNyArODEsNiBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9wcm9maWxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9wcm9maWxlLmMKaW5kZXggNzE1ZjAyNy4uMWUwYzc1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfcHJvZmlsZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3Byb2ZpbGUuYwpAQCAtMzgzLDE1ICszODMsMTUgQEAKIAkJCQlEYmdJbmZvLT5EZWJ1Z0ZsYWcgfD0gREJHX0RFRkFVTFRTOwogCQkJfQogCQl9IGVsc2UgewotCQkJRGJnSW5mby0+RGVidWdGbGFnID0gd2xfYXRvaSggdmFsdWUgKTsgLy87P0RlYnVnRmxhZzsKKwkJCURiZ0luZm8tPkRlYnVnRmxhZyA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsgLy87P0RlYnVnRmxhZzsKIAkJfQotCQlEYmdJbmZvLT5EZWJ1Z0ZsYWcgPSB3bF9hdG9pKCB2YWx1ZSApOyAvLzs/RGVsZXRlIEFTQVAKKwkJRGJnSW5mby0+RGVidWdGbGFnID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOyAvLzs/RGVsZXRlIEFTQVAKIAl9CiAjZW5kaWYgLyogREJHICovCiAJaWYgKCBzdHJjbXAoIGtleSwgUEFSTV9OQU1FX0FVVEhfS0VZX01HTVRfU1VJVEUgKSA9PSAwICkgewogCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfQVVUSF9LRVlfTUdNVF9TVUlURSwgdmFsdWUgKTsKIAotCQl2YWx1ZV9jb252ZXJ0ID0gd2xfYXRvaSggdmFsdWUgKTsKKwkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkJaWYgKCggdmFsdWVfY29udmVydCA+PSBQQVJNX01JTl9BVVRIX0tFWV9NR01UX1NVSVRFICkgfHwgKCB2YWx1ZV9jb252ZXJ0IDw9IFBBUk1fTUFYX0FVVEhfS0VZX01HTVRfU1VJVEUgKSkgewogCQkJbHAtPkF1dGhLZXlNZ210U3VpdGUgPSB2YWx1ZV9jb252ZXJ0OwogCQl9IGVsc2UgewpAQCAtNDAxLDcgKzQwMSw3IEBACiAJZWxzZSBpZiAoIHN0cmNtcCgga2V5LCBQQVJNX05BTUVfQlJTQ18yR0haICkgPT0gMCApIHsKIAkJREJHX1RSQUNFKCBEYmdJbmZvLCAiJXMsIHZhbHVlOiAlc1xuIiwgUEFSTV9OQU1FX0JSU0NfMkdIWiwgdmFsdWUgKTsKIAotCQl2YWx1ZV9jb252ZXJ0ID0gd2xfYXRvaSggdmFsdWUgKTsKKwkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkJaWYgKCggdmFsdWVfY29udmVydCA+PSBQQVJNX01JTl9CUlNDICkgfHwgKCB2YWx1ZV9jb252ZXJ0IDw9IFBBUk1fTUFYX0JSU0MgKSkgewogCQkJbHAtPmJyc2NbMF0gPSB2YWx1ZV9jb252ZXJ0OwogCQl9IGVsc2UgewpAQCAtNDExLDcgKzQxMSw3IEBACiAJZWxzZSBpZiAoIHN0cmNtcCgga2V5LCBQQVJNX05BTUVfQlJTQ181R0haICkgPT0gMCApIHsKIAkJREJHX1RSQUNFKCBEYmdJbmZvLCAiJXMsIHZhbHVlOiAlc1xuIiwgUEFSTV9OQU1FX0JSU0NfNUdIWiwgdmFsdWUgKTsKIAotCQl2YWx1ZV9jb252ZXJ0ID0gd2xfYXRvaSggdmFsdWUgKTsKKwkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkJaWYgKCggdmFsdWVfY29udmVydCA+PSBQQVJNX01JTl9CUlNDICkgfHwgKCB2YWx1ZV9jb252ZXJ0IDw9IFBBUk1fTUFYX0JSU0MgKSkgewogCQkJbHAtPmJyc2NbMV0gPSB2YWx1ZV9jb252ZXJ0OwogCQl9IGVsc2UgewpAQCAtNDQ4LDcgKzQ0OCw3IEBACiAJZWxzZSBpZiAoIHN0cmNtcCgga2V5LCBQQVJNX05BTUVfRU5BQkxFX0VOQ1JZUFRJT04gKSA9PSAwICkgewogCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfRU5BQkxFX0VOQ1JZUFRJT04sIHZhbHVlICk7CiAKLQkJdmFsdWVfY29udmVydCA9IHdsX2F0b2koIHZhbHVlICk7CisJCXZhbHVlX2NvbnZlcnQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CiAJCWlmICgoIHZhbHVlX2NvbnZlcnQgPj0gUEFSTV9NSU5fRU5BQkxFX0VOQ1JZUFRJT04gKSAmJiAoIHZhbHVlX2NvbnZlcnQgPD0gUEFSTV9NQVhfRU5BQkxFX0VOQ1JZUFRJT04gKSkgewogCQkJbHAtPkVuYWJsZUVuY3J5cHRpb24gPSB2YWx1ZV9jb252ZXJ0OwogCQl9IGVsc2UgewpAQCAtNTI5LDcgKzUyOSw3IEBACiAJZWxzZSBpZiAoIHN0cmNtcCgga2V5LCBQQVJNX05BTUVfTVVMVElDQVNUX1JBVEUgKSA9PSAwICkgewogCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfTVVMVElDQVNUX1JBVEUsIHZhbHVlICk7CiAKLQkJdmFsdWVfY29udmVydCA9IHdsX2F0b2koIHZhbHVlICk7CisJCXZhbHVlX2NvbnZlcnQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CiAKIAkJaWYgKCggdmFsdWVfY29udmVydCA+PSBQQVJNX01JTl9NVUxUSUNBU1RfUkFURSApICYmICggdmFsdWVfY29udmVydCA8PSBQQVJNX01BWF9NVUxUSUNBU1RfUkFURSApKSB7CiAJCQlscC0+TXVsdGljYXN0UmF0ZVswXSA9IHZhbHVlX2NvbnZlcnQ7CkBAIC01NDAsNyArNTQwLDcgQEAKIAllbHNlIGlmICggc3RyY21wKCBrZXksIFBBUk1fTkFNRV9PV05fQ0hBTk5FTCApID09IDAgKSB7CiAJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9PV05fQ0hBTk5FTCwgdmFsdWUgKTsKIAotCQl2YWx1ZV9jb252ZXJ0ID0gd2xfYXRvaSggdmFsdWUgKTsKKwkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkJaWYgKCB3bF9pc19hX3ZhbGlkX2NoYW4oIHZhbHVlX2NvbnZlcnQgKSkgewogCQkJaWYgKCB2YWx1ZV9jb252ZXJ0ID4gMTQgKSB7CiAJCQkJdmFsdWVfY29udmVydCA9IHZhbHVlX2NvbnZlcnQgfCAweDEwMDsKQEAgLTU2Nyw3ICs1NjcsNyBAQAogCWVsc2UgaWYgKCBzdHJjbXAoIGtleSwgUEFSTV9OQU1FX1JUU19USFJFU0hPTEQgKSA9PSAwICkgewogCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfUlRTX1RIUkVTSE9MRCwgdmFsdWUgKTsKIAotCQl2YWx1ZV9jb252ZXJ0ID0gd2xfYXRvaSggdmFsdWUgKTsKKwkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkJaWYgKCggdmFsdWVfY29udmVydCA+PSBQQVJNX01JTl9SVFNfVEhSRVNIT0xEICkgJiYgKCB2YWx1ZV9jb252ZXJ0IDw9IFBBUk1fTUFYX1JUU19USFJFU0hPTEQgKSkgewogCQkJbHAtPlJUU1RocmVzaG9sZCA9IHZhbHVlX2NvbnZlcnQ7CiAJCX0gZWxzZSB7CkBAIC01NzcsNyArNTc3LDcgQEAKIAllbHNlIGlmICggc3RyY21wKCBrZXksIFBBUk1fTkFNRV9TUlNDXzJHSFogKSA9PSAwICkgewogCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfU1JTQ18yR0haLCB2YWx1ZSApOwogCi0JCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQl2YWx1ZV9jb252ZXJ0ID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOwogCQlpZiAoKCB2YWx1ZV9jb252ZXJ0ID49IFBBUk1fTUlOX1NSU0MgKSB8fCAoIHZhbHVlX2NvbnZlcnQgPD0gUEFSTV9NQVhfU1JTQyApKSB7CiAJCQlscC0+c3JzY1swXSA9IHZhbHVlX2NvbnZlcnQ7CiAJCX0gZWxzZSB7CkBAIC01ODcsNyArNTg3LDcgQEAKIAllbHNlIGlmICggc3RyY21wKCBrZXksIFBBUk1fTkFNRV9TUlNDXzVHSFogKSA9PSAwICkgewogCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfU1JTQ181R0haLCB2YWx1ZSApOwogCi0JCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQl2YWx1ZV9jb252ZXJ0ID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOwogCQlpZiAoKCB2YWx1ZV9jb252ZXJ0ID49IFBBUk1fTUlOX1NSU0MgKSB8fCAoIHZhbHVlX2NvbnZlcnQgPD0gUEFSTV9NQVhfU1JTQyApKSB7CiAJCQlscC0+c3JzY1sxXSA9IHZhbHVlX2NvbnZlcnQ7CiAJCX0gZWxzZSB7CkBAIC01OTcsNyArNTk3LDcgQEAKIAllbHNlIGlmICggc3RyY21wKCBrZXksIFBBUk1fTkFNRV9TWVNURU1fU0NBTEUgKSA9PSAwICkgewogCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfU1lTVEVNX1NDQUxFLCB2YWx1ZSApOwogCi0JCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQl2YWx1ZV9jb252ZXJ0ID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOwogCQlpZiAoKCB2YWx1ZV9jb252ZXJ0ID49IFBBUk1fTUlOX1NZU1RFTV9TQ0FMRSApICYmICggdmFsdWVfY29udmVydCA8PSBQQVJNX01BWF9TWVNURU1fU0NBTEUgKSkgewogCQkJbHAtPkRpc3RhbmNlQmV0d2VlbkFQcyA9IHZhbHVlX2NvbnZlcnQ7CiAJCX0gZWxzZSB7CkBAIC02MDcsOSArNjA3LDkgQEAKIAllbHNlIGlmICggc3RyY21wKCBrZXksIFBBUk1fTkFNRV9UWF9LRVkgKSA9PSAwICkgewogCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfVFhfS0VZLCB2YWx1ZSApOwogCi0JCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQl2YWx1ZV9jb252ZXJ0ID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOwogCQlpZiAoKCB2YWx1ZV9jb252ZXJ0ID49IFBBUk1fTUlOX1RYX0tFWSApICYmICggdmFsdWVfY29udmVydCA8PSBQQVJNX01BWF9UWF9LRVkgKSkgewotCQkJbHAtPlRyYW5zbWl0S2V5SUQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQkJbHAtPlRyYW5zbWl0S2V5SUQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CiAJCX0gZWxzZSB7CiAJCQlEQkdfV0FSTklORyggRGJnSW5mbywgIiVzIGludmFsaWQ7IHdpbGwgYmUgaWdub3JlZFxuIiwgUEFSTV9OQU1FX1RYX0tFWSApOwogCQl9CkBAIC02MTcsNyArNjE3LDcgQEAKIAllbHNlIGlmICggc3RyY21wKCBrZXksIFBBUk1fTkFNRV9UWF9SQVRFICkgPT0gMCApIHsKIAkJREJHX1RSQUNFKCBEYmdJbmZvLCAiJXMsIHZhbHVlOiAlc1xuIiwgUEFSTV9OQU1FX1RYX1JBVEUsIHZhbHVlICk7CiAKLQkJdmFsdWVfY29udmVydCA9IHdsX2F0b2koIHZhbHVlICk7CisJCXZhbHVlX2NvbnZlcnQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CiAJCWlmICgoIHZhbHVlX2NvbnZlcnQgPj0gUEFSTV9NSU5fVFhfUkFURSApICYmICggdmFsdWVfY29udmVydCA8PSBQQVJNX01BWF9UWF9SQVRFICkpIHsKIAkJCWxwLT5UeFJhdGVDb250cm9sWzBdID0gdmFsdWVfY29udmVydDsKIAkJfSBlbHNlIHsKQEAgLTYyNyw3ICs2MjcsNyBAQAogCWVsc2UgaWYgKCBzdHJjbXAoIGtleSwgUEFSTV9OQU1FX1RYX1BPV19MRVZFTCApID09IDAgKSB7CiAJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9UWF9QT1dfTEVWRUwsIHZhbHVlICk7CiAKLQkJdmFsdWVfY29udmVydCA9IHdsX2F0b2koIHZhbHVlICk7CisJCXZhbHVlX2NvbnZlcnQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CiAJCWlmICgoIHZhbHVlX2NvbnZlcnQgPj0gUEFSTV9NSU5fVFhfUE9XX0xFVkVMICkgfHwgKCB2YWx1ZV9jb252ZXJ0IDw9IFBBUk1fTUFYX1RYX1BPV19MRVZFTCApKSB7CiAJCQlscC0+dHhQb3dMZXZlbCA9IHZhbHVlX2NvbnZlcnQ7CiAJCX0gZWxzZSB7CkBAIC02NDUsNyArNjQ1LDcgQEAKIAkJaWYgKCBzdHJjbXAoIGtleSwgUEFSTV9OQU1FX1BPUlRfVFlQRSApID09IDAgKSB7CiAJCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfUE9SVF9UWVBFLCB2YWx1ZSApOwogCi0JCQl2YWx1ZV9jb252ZXJ0ID0gd2xfYXRvaSggdmFsdWUgKTsKKwkJCXZhbHVlX2NvbnZlcnQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CiAJCQlpZiAoKCB2YWx1ZV9jb252ZXJ0ID09IFBBUk1fTUlOX1BPUlRfVFlQRSApIHx8ICggdmFsdWVfY29udmVydCA9PSBQQVJNX01BWF9QT1JUX1RZUEUgKSkgewogCQkJCWxwLT5Qb3J0VHlwZSA9IHZhbHVlX2NvbnZlcnQ7CiAJCQl9IGVsc2UgewpAQCAtNjU0LDcgKzY1NCw3IEBACiAJCX0KIAkJZWxzZSBpZiAoIHN0cmNtcCgga2V5LCBQQVJNX05BTUVfUE1fRU5BQkxFRCApID09IDAgKSB7CiAJCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfUE1fRU5BQkxFRCwgdmFsdWUgKTsKLQkJCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkvKiA7PyBob3cgYWJvdXQgd2xfbWFpbi5jIGNvbnRhaW5pbmcKIAkgKiBWQUxJRF9QQVJBTSggUEFSTV9QTV9FTkFCTEVEIDw9IFdWTEFOX1BNX1NUQVRFX1NUQU5EQVJEIHx8CiAJICoJCQkJCSAoIFBBUk1fUE1fRU5BQkxFRCAmIDB4N0ZGRiApIDw9IFdWTEFOX1BNX1NUQVRFX1NUQU5EQVJEICk7CkBAIC02NzcsNyArNjc3LDcgQEAKIAkJZWxzZSBpZiAoIHN0cmNtcCgga2V5LCBQQVJNX05BTUVfTUFYX1NMRUVQICkgPT0gMCApIHsKIAkJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9NQVhfU0xFRVAsIHZhbHVlICk7CiAKLQkJCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkJCWlmICgoIHZhbHVlX2NvbnZlcnQgPj0gMCApICYmICggdmFsdWVfY29udmVydCA8PSA2NTUzNSApKSB7CiAJCQkJbHAtPk1heFNsZWVwRHVyYXRpb24gPSB2YWx1ZV9jb252ZXJ0OwogCQkJfSBlbHNlIHsKQEAgLTY5Niw3ICs2OTYsNyBAQAogCQllbHNlIGlmICggc3RyY21wKCBrZXksIFBBUk1fTkFNRV9BVVRIRU5USUNBVElPTiApID09IDAgKSB7CiAJCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfQVVUSEVOVElDQVRJT04sIHZhbHVlICk7CiAKLQkJCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkJCWlmICgoIHZhbHVlX2NvbnZlcnQgPj0gUEFSTV9NSU5fQVVUSEVOVElDQVRJT04gKSAmJiAoIHZhbHVlX2NvbnZlcnQgPD0gUEFSTV9NQVhfQVVUSEVOVElDQVRJT04gKSkgewogCQkJCWxwLT5hdXRoZW50aWNhdGlvbiA9IHZhbHVlX2NvbnZlcnQ7CiAJCQl9IGVsc2UgewpAQCAtNzA2LDcgKzcwNiw3IEBACiAJCWVsc2UgaWYgKCBzdHJjbXAoIGtleSwgUEFSTV9OQU1FX09XTl9BVElNX1dJTkRPVyApID09IDAgKSB7CiAJCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfT1dOX0FUSU1fV0lORE9XLCB2YWx1ZSApOwogCi0JCQl2YWx1ZV9jb252ZXJ0ID0gd2xfYXRvaSggdmFsdWUgKTsKKwkJCXZhbHVlX2NvbnZlcnQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CiAJCQlpZiAoKCB2YWx1ZV9jb252ZXJ0ID49IFBBUk1fTUlOX09XTl9BVElNX1dJTkRPVyApICYmICggdmFsdWVfY29udmVydCA8PSBQQVJNX01BWF9PV05fQVRJTV9XSU5ET1cgKSkgewogCQkJCWxwLT5hdGltV2luZG93ID0gdmFsdWVfY29udmVydDsKIAkJCX0gZWxzZSB7CkBAIC03MTYsNyArNzE2LDcgQEAKIAkJZWxzZSBpZiAoIHN0cmNtcCgga2V5LCBQQVJNX05BTUVfUE1fSE9MRE9WRVJfRFVSQVRJT04gKSA9PSAwICkgewogCQkJREJHX1RSQUNFKCBEYmdJbmZvLCAiJXMsIHZhbHVlOiAlc1xuIiwgUEFSTV9OQU1FX1BNX0hPTERPVkVSX0RVUkFUSU9OLCB2YWx1ZSApOwogCi0JCQl2YWx1ZV9jb252ZXJ0ID0gd2xfYXRvaSggdmFsdWUgKTsKKwkJCXZhbHVlX2NvbnZlcnQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CiAJCQlpZiAoKCB2YWx1ZV9jb252ZXJ0ID49IFBBUk1fTUlOX1BNX0hPTERPVkVSX0RVUkFUSU9OICkgJiYgKCB2YWx1ZV9jb252ZXJ0IDw9IFBBUk1fTUFYX1BNX0hPTERPVkVSX0RVUkFUSU9OICkpIHsKIAkJCQlscC0+aG9sZG92ZXJEdXJhdGlvbiA9IHZhbHVlX2NvbnZlcnQ7CiAJCQl9IGVsc2UgewpAQCAtNzMwLDcgKzczMCw3IEBACiAJCWVsc2UgaWYgKCBzdHJjbXAoIGtleSwgUEFSTV9OQU1FX0NPTk5FQ1RJT05fQ09OVFJPTCApID09IDAgKSB7CiAJCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfQ09OTkVDVElPTl9DT05UUk9MLCB2YWx1ZSApOwogCi0JCQl2YWx1ZV9jb252ZXJ0ID0gd2xfYXRvaSggdmFsdWUgKTsKKwkJCXZhbHVlX2NvbnZlcnQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CiAJCQlpZiAoKCB2YWx1ZV9jb252ZXJ0ID49IFBBUk1fTUlOX0NPTk5FQ1RJT05fQ09OVFJPTCApICYmICggdmFsdWVfY29udmVydCA8PSBQQVJNX01BWF9DT05ORUNUSU9OX0NPTlRST0wgKSkgewogCQkJCWxwLT5jb25uZWN0aW9uQ29udHJvbCA9IHZhbHVlX2NvbnZlcnQ7CiAJCQl9IGVsc2UgewpAQCAtNzQ5LDcgKzc0OSw3IEBACiAJCWlmICggc3RyY21wKCBrZXksIFBBUk1fTkFNRV9PV05fRFRJTV9QRVJJT0QgKSA9PSAwICkgewogCQkJREJHX1RSQUNFKCBEYmdJbmZvLCAiJXMsIHZhbHVlOiAlc1xuIiwgUEFSTV9OQU1FX09XTl9EVElNX1BFUklPRCwgdmFsdWUgKTsKIAotCQkJdmFsdWVfY29udmVydCA9IHdsX2F0b2koIHZhbHVlICk7CisJCQl2YWx1ZV9jb252ZXJ0ID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOwogCQkJaWYgKCB2YWx1ZV9jb252ZXJ0ID49IFBBUk1fTUlOX09XTl9EVElNX1BFUklPRCApIHsKIAkJCQlscC0+RFRJTVBlcmlvZCA9IHZhbHVlX2NvbnZlcnQ7CiAJCQl9IGVsc2UgewpAQCAtNzc1LDcgKzc3NSw3IEBACiAJCWVsc2UgaWYgKCBzdHJjbXAoIGtleSwgUEFSTV9OQU1FX09XTl9CRUFDT05fSU5URVJWQUwgKSA9PSAwICkgewogCQkJREJHX1RSQUNFKCBEYmdJbmZvLCAiJXMsIHZhbHVlOiAlc1xuIiwgUEFSTV9OQU1FX09XTl9CRUFDT05fSU5URVJWQUwsIHZhbHVlICk7CiAKLQkJCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkJCWlmICggdmFsdWVfY29udmVydCA+PSBQQVJNX01JTl9PV05fQkVBQ09OX0lOVEVSVkFMICkgewogCQkJCWxwLT5vd25CZWFjb25JbnRlcnZhbCA9IHZhbHVlX2NvbnZlcnQ7CiAJCQl9IGVsc2UgewpAQCAtNzg1LDcgKzc4NSw3IEBACiAJCWVsc2UgaWYgKCBzdHJjbXAoIGtleSwgUEFSTV9OQU1FX0NPRVhJU1RFTkNFICkgPT0gMCApIHsKIAkJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9DT0VYSVNURU5DRSwgdmFsdWUgKTsKIAotCQkJdmFsdWVfY29udmVydCA9IHdsX2F0b2koIHZhbHVlICk7CisJCQl2YWx1ZV9jb252ZXJ0ID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOwogCQkJaWYgKCB2YWx1ZV9jb252ZXJ0ID49IFBBUk1fTUlOX0NPRVhJU1RFTkNFICkgewogCQkJCWxwLT5jb2V4aXN0ZW5jZSA9IHZhbHVlX2NvbnZlcnQ7CiAJCQl9IGVsc2UgewpAQCAtNzk3LDcgKzc5Nyw3IEBACiAJCWVsc2UgaWYgKCBzdHJjbXAoIGtleSwgUEFSTV9OQU1FX1JUU19USFJFU0hPTEQxICkgPT0gMCApIHsKIAkJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9SVFNfVEhSRVNIT0xEMSwgdmFsdWUgKTsKIAotCQkJdmFsdWVfY29udmVydCA9IHdsX2F0b2koIHZhbHVlICk7CisJCQl2YWx1ZV9jb252ZXJ0ID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOwogCQkJaWYgKCggdmFsdWVfY29udmVydCA+PSBQQVJNX01JTl9SVFNfVEhSRVNIT0xEICkgJiYgKCB2YWx1ZV9jb252ZXJ0IDw9IFBBUk1fTUFYX1JUU19USFJFU0hPTEQgKSkgewogCQkJCWxwLT53ZHNfcG9ydFswXS5ydHNUaHJlc2hvbGQgPSB2YWx1ZV9jb252ZXJ0OwogCQkJfSBlbHNlIHsKQEAgLTgwNyw3ICs4MDcsNyBAQAogCQllbHNlIGlmICggc3RyY21wKCBrZXksIFBBUk1fTkFNRV9SVFNfVEhSRVNIT0xEMiApID09IDAgKSB7CiAJCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfUlRTX1RIUkVTSE9MRDIsIHZhbHVlICk7CiAKLQkJCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkJCWlmICgoIHZhbHVlX2NvbnZlcnQgPj0gUEFSTV9NSU5fUlRTX1RIUkVTSE9MRCApICYmICggdmFsdWVfY29udmVydCA8PSBQQVJNX01BWF9SVFNfVEhSRVNIT0xEICkpIHsKIAkJCQlscC0+d2RzX3BvcnRbMV0ucnRzVGhyZXNob2xkID0gdmFsdWVfY29udmVydDsKIAkJCX0gZWxzZSB7CkBAIC04MTcsNyArODE3LDcgQEAKIAkJZWxzZSBpZiAoIHN0cmNtcCgga2V5LCBQQVJNX05BTUVfUlRTX1RIUkVTSE9MRDMgKSA9PSAwICkgewogCQkJREJHX1RSQUNFKCBEYmdJbmZvLCAiJXMsIHZhbHVlOiAlc1xuIiwgUEFSTV9OQU1FX1JUU19USFJFU0hPTEQzLCB2YWx1ZSApOwogCi0JCQl2YWx1ZV9jb252ZXJ0ID0gd2xfYXRvaSggdmFsdWUgKTsKKwkJCXZhbHVlX2NvbnZlcnQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CiAJCQlpZiAoKCB2YWx1ZV9jb252ZXJ0ID49IFBBUk1fTUlOX1JUU19USFJFU0hPTEQgKSAmJiAoIHZhbHVlX2NvbnZlcnQgPD0gUEFSTV9NQVhfUlRTX1RIUkVTSE9MRCApKSB7CiAJCQkJbHAtPndkc19wb3J0WzJdLnJ0c1RocmVzaG9sZCA9IHZhbHVlX2NvbnZlcnQ7CiAJCQl9IGVsc2UgewpAQCAtODI3LDcgKzgyNyw3IEBACiAJCWVsc2UgaWYgKCBzdHJjbXAoIGtleSwgUEFSTV9OQU1FX1JUU19USFJFU0hPTEQ0ICkgPT0gMCApIHsKIAkJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9SVFNfVEhSRVNIT0xENCwgdmFsdWUgKTsKIAotCQkJdmFsdWVfY29udmVydCA9IHdsX2F0b2koIHZhbHVlICk7CisJCQl2YWx1ZV9jb252ZXJ0ID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOwogCQkJaWYgKCggdmFsdWVfY29udmVydCA+PSBQQVJNX01JTl9SVFNfVEhSRVNIT0xEICkgJiYgKCB2YWx1ZV9jb252ZXJ0IDw9IFBBUk1fTUFYX1JUU19USFJFU0hPTEQgKSkgewogCQkJCWxwLT53ZHNfcG9ydFszXS5ydHNUaHJlc2hvbGQgPSB2YWx1ZV9jb252ZXJ0OwogCQkJfSBlbHNlIHsKQEAgLTgzNyw3ICs4MzcsNyBAQAogCQllbHNlIGlmICggc3RyY21wKCBrZXksIFBBUk1fTkFNRV9SVFNfVEhSRVNIT0xENSApID09IDAgKSB7CiAJCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfUlRTX1RIUkVTSE9MRDUsIHZhbHVlICk7CiAKLQkJCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkJCWlmICgoIHZhbHVlX2NvbnZlcnQgPj0gUEFSTV9NSU5fUlRTX1RIUkVTSE9MRCApICYmICggdmFsdWVfY29udmVydCA8PSBQQVJNX01BWF9SVFNfVEhSRVNIT0xEICkpIHsKIAkJCQlscC0+d2RzX3BvcnRbNF0ucnRzVGhyZXNob2xkID0gdmFsdWVfY29udmVydDsKIAkJCX0gZWxzZSB7CkBAIC04NDcsNyArODQ3LDcgQEAKIAkJZWxzZSBpZiAoIHN0cmNtcCgga2V5LCBQQVJNX05BTUVfUlRTX1RIUkVTSE9MRDYgKSA9PSAwICkgewogCQkJREJHX1RSQUNFKCBEYmdJbmZvLCAiJXMsIHZhbHVlOiAlc1xuIiwgUEFSTV9OQU1FX1JUU19USFJFU0hPTEQ2LCB2YWx1ZSApOwogCi0JCQl2YWx1ZV9jb252ZXJ0ID0gd2xfYXRvaSggdmFsdWUgKTsKKwkJCXZhbHVlX2NvbnZlcnQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CiAJCQlpZiAoKCB2YWx1ZV9jb252ZXJ0ID49IFBBUk1fTUlOX1JUU19USFJFU0hPTEQgKSAmJiAoIHZhbHVlX2NvbnZlcnQgPD0gUEFSTV9NQVhfUlRTX1RIUkVTSE9MRCApKSB7CiAJCQkJbHAtPndkc19wb3J0WzVdLnJ0c1RocmVzaG9sZCA9IHZhbHVlX2NvbnZlcnQ7CiAJCQl9IGVsc2UgewpAQCAtODU3LDcgKzg1Nyw3IEBACiAJCWVsc2UgaWYgKCBzdHJjbXAoIGtleSwgUEFSTV9OQU1FX1RYX1JBVEUxICkgPT0gMCApIHsKIAkJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9UWF9SQVRFMSwgdmFsdWUgKTsKIAotCQkJdmFsdWVfY29udmVydCA9IHdsX2F0b2koIHZhbHVlICk7CisJCQl2YWx1ZV9jb252ZXJ0ID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOwogCQkJaWYgKCggdmFsdWVfY29udmVydCA+PSBQQVJNX01JTl9UWF9SQVRFICkgJiYgKCB2YWx1ZV9jb252ZXJ0IDw9IFBBUk1fTUFYX1RYX1JBVEUgKSkgewogCQkJCWxwLT53ZHNfcG9ydFswXS50eFJhdGVDbnRsID0gdmFsdWVfY29udmVydDsKIAkJCX0gZWxzZSB7CkBAIC04NjcsNyArODY3LDcgQEAKIAkJZWxzZSBpZiAoIHN0cmNtcCgga2V5LCBQQVJNX05BTUVfVFhfUkFURTIgKSA9PSAwICkgewogCQkJREJHX1RSQUNFKCBEYmdJbmZvLCAiJXMsIHZhbHVlOiAlc1xuIiwgUEFSTV9OQU1FX1RYX1JBVEUyLCB2YWx1ZSApOwogCi0JCQl2YWx1ZV9jb252ZXJ0ID0gd2xfYXRvaSggdmFsdWUgKTsKKwkJCXZhbHVlX2NvbnZlcnQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CiAJCQlpZiAoKCB2YWx1ZV9jb252ZXJ0ID49IFBBUk1fTUlOX1RYX1JBVEUgKSAmJiAoIHZhbHVlX2NvbnZlcnQgPD0gUEFSTV9NQVhfVFhfUkFURSApKSB7CiAJCQkJbHAtPndkc19wb3J0WzFdLnR4UmF0ZUNudGwgPSB2YWx1ZV9jb252ZXJ0OwogCQkJfSBlbHNlIHsKQEAgLTg3Nyw3ICs4NzcsNyBAQAogCQllbHNlIGlmICggc3RyY21wKCBrZXksIFBBUk1fTkFNRV9UWF9SQVRFMyApID09IDAgKSB7CiAJCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfVFhfUkFURTMsIHZhbHVlICk7CiAKLQkJCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkJCWlmICgoIHZhbHVlX2NvbnZlcnQgPj0gUEFSTV9NSU5fVFhfUkFURSApICYmICggdmFsdWVfY29udmVydCA8PSBQQVJNX01BWF9UWF9SQVRFICkpIHsKIAkJCQlscC0+d2RzX3BvcnRbMl0udHhSYXRlQ250bCA9IHZhbHVlX2NvbnZlcnQ7CiAJCQl9IGVsc2UgewpAQCAtODg3LDcgKzg4Nyw3IEBACiAJCWVsc2UgaWYgKCBzdHJjbXAoIGtleSwgUEFSTV9OQU1FX1RYX1JBVEU0ICkgPT0gMCApIHsKIAkJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9UWF9SQVRFNCwgdmFsdWUgKTsKIAotCQkJdmFsdWVfY29udmVydCA9IHdsX2F0b2koIHZhbHVlICk7CisJCQl2YWx1ZV9jb252ZXJ0ID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOwogCQkJaWYgKCggdmFsdWVfY29udmVydCA+PSBQQVJNX01JTl9UWF9SQVRFICkgJiYgKCB2YWx1ZV9jb252ZXJ0IDw9IFBBUk1fTUFYX1RYX1JBVEUgKSkgewogCQkJCWxwLT53ZHNfcG9ydFszXS50eFJhdGVDbnRsID0gdmFsdWVfY29udmVydDsKIAkJCX0gZWxzZSB7CkBAIC04OTcsNyArODk3LDcgQEAKIAkJZWxzZSBpZiAoIHN0cmNtcCgga2V5LCBQQVJNX05BTUVfVFhfUkFURTUgKSA9PSAwICkgewogCQkJREJHX1RSQUNFKCBEYmdJbmZvLCAiJXMsIHZhbHVlOiAlc1xuIiwgUEFSTV9OQU1FX1RYX1JBVEU1LCB2YWx1ZSApOwogCi0JCQl2YWx1ZV9jb252ZXJ0ID0gd2xfYXRvaSggdmFsdWUgKTsKKwkJCXZhbHVlX2NvbnZlcnQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CiAJCQlpZiAoKCB2YWx1ZV9jb252ZXJ0ID49IFBBUk1fTUlOX1RYX1JBVEUgKSAmJiAoIHZhbHVlX2NvbnZlcnQgPD0gUEFSTV9NQVhfVFhfUkFURSApKSB7CiAJCQkJbHAtPndkc19wb3J0WzRdLnR4UmF0ZUNudGwgPSB2YWx1ZV9jb252ZXJ0OwogCQkJfSBlbHNlIHsKQEAgLTkwNyw3ICs5MDcsNyBAQAogCQllbHNlIGlmICggc3RyY21wKCBrZXksIFBBUk1fTkFNRV9UWF9SQVRFNiApID09IDAgKSB7CiAJCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfVFhfUkFURTYsIHZhbHVlICk7CiAKLQkJCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkJCWlmICgoIHZhbHVlX2NvbnZlcnQgPj0gUEFSTV9NSU5fVFhfUkFURSApICYmICggdmFsdWVfY29udmVydCA8PSBQQVJNX01BWF9UWF9SQVRFICkpIHsKIAkJCQlscC0+d2RzX3BvcnRbNV0udHhSYXRlQ250bCA9IHZhbHVlX2NvbnZlcnQ7CiAJCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfdXRpbC5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfdXRpbC5jCmluZGV4IGFjMWU3ZjMuLmJiZGI5OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3V0aWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF91dGlsLmMKQEAgLTE1MzYsNTIgKzE1MzYsMyBAQAogICAgIHJldHVybiByZXQ7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgl3bF9hdG9pKCkKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogIERFU0NSSVBUSU9OOgotICoKLSAqICAgICAgQmVsaWV2ZSBpdCBvciBub3QsIHdlIG5lZWQgb3VyIG93biBpbXBsZW1lbnRhdGlvbiBvZiBhdG9pIGluIHRoZSBrZXJuZWwuCi0gKgotICogIFBBUkFNRVRFUlM6Ci0gKgotICogICAgICBzdHJpbmcgIC0gdGhlIEFTQ0lJIHN0cmluZyB0byBjb252ZXJ0IHRvIGFuIGludGVnZXIKLSAqCi0gKiAgUkVUVVJOUzoKLSAqCi0gKiAgICAgIHVuc2lnbmVkIGludGVnZXIKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdW5zaWduZWQgaW50IHdsX2F0b2koIGNoYXIgKnN0cmluZyApCi17Ci11bnNpZ25lZCBpbnQgYmFzZSA9IDEwOwkJCQkvL2RlZmF1bHQgdG8gZGVjaW1hbAotdW5zaWduZWQgaW50IHZhbHVlID0gMDsKLXVuc2lnbmVkIGludCBjOwotaW50IGkgPSBzdHJsZW4oIHN0cmluZyApOwotCi0JaWYgKCBpID4gMiAmJiBzdHJpbmdbMF0gPT0gJzAnICYmICggc3RyaW5nWzFdIHwgKCdYJ14neCcpICkgPT0gJ3gnICkgewotCQliYXNlID0gMTY7Ci0JCXN0cmluZyArPTI7Ci0JfQotCXdoaWxlICggKCBjID0gKnN0cmluZysrICkgIT0gJ1wwJyApIHsKLQkJaWYgKCB2YWx1ZSA+IFVJTlRfTUFYIC8gYmFzZSApIHsJLy90ZXN0IGZvciBvdmVycnVuCi0JCQlEQkdfRlVOQyggIndsX2F0b2kiICk7CS8vZG9uJ3Qgb3ZlcmxvYWQgdGhlIGxvZyBmaWxlIHdpdGggZ29vZCBtZXNzYWdlcwotCQkJREJHX0VOVEVSKCBEYmdJbmZvICk7Ci0JCQlEQkdfRVJST1IoIERiZ0luZm8sICJzdHJpbmcgXCIlc1wiLCBsZW5naHQgZXhjZWVkcyBleHBlY3RhdGlvbnNcbiIsIHN0cmluZyApOwotCQkJcHJpbnRrKCAiPDE+c3RyaW5nIFwiJXNcIiwgbGVuZ2h0IGV4Y2VlZHMgZXhwZWN0YXRpb25zXG4iLCBzdHJpbmcgKTsKLQkJCURCR19MRUFWRSggRGJnSW5mbyApOwotCQkJYnJlYWs7Ci0JCX0KLQkJYyAtPSAnMCc7Ci0JCWlmICggMCA8PSBjICYmIGMgPD0gOSApIHZhbHVlID0gYmFzZSAqIHZhbHVlICsgYzsKLQkJZWxzZSBpZiAoIGJhc2UgPT0gMTYgKSB7Ci0JCQljICs9ICcwJzsKLQkJCWMgfD0gJ0EnXidhJzsKLQkJCWMgPSBjIC0gJ2EnKyAxMDsKLQkJCWlmICggMTAgPD0gYyAmJiBjIDw9IDE1ICkgdmFsdWUgPSBiYXNlICogdmFsdWUgKyBjOwotCQl9Ci0JfQotCXJldHVybiB2YWx1ZTsKLX0gLy8gd2xfYXRvaQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF91dGlsLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF91dGlsLmgKaW5kZXggMTZjZDZjNS4uNTYxZTg1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfdXRpbC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3V0aWwuaApAQCAtMTAwLDYgKzEwMCw0IEBACiB2b2lkIHdsX3Byb2Nlc3NfYXNzb2Nfc3RhdHVzKCBzdHJ1Y3Qgd2xfcHJpdmF0ZSAqbHAgKTsKIHZvaWQgd2xfcHJvY2Vzc19zZWN1cml0eV9zdGF0dXMoIHN0cnVjdCB3bF9wcml2YXRlICpscCApOwogCi11bnNpZ25lZCBpbnQgd2xfYXRvaSggY2hhciAqc3RyaW5nICk7Ci0KICNlbmRpZiAgLy8gX19XTF9VVElMX0hfXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL0tjb25maWcKaW5kZXggZjQ0Mjk0Yi4uODJmY2MxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9LY29uZmlnCkBAIC0xLDYgKzEsOCBAQAogY29uZmlnIFBSSVNNMl9VU0IKIAl0cmlzdGF0ZSAiUHJpc20yLjUvMyBVU0IgZHJpdmVyIgotCWRlcGVuZHMgb24gV0xBTiAmJiBVU0IgJiYgV0lSRUxFU1NfRVhUCisJZGVwZW5kcyBvbiBXTEFOICYmIFVTQgorCXNlbGVjdCBXSVJFTEVTU19FWFQKKwlzZWxlY3QgV0VYVF9QUklWCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyB0aGUgd2xhbi1uZyBwcmlzbSAyLjUvMyBVU0IgZHJpdmVyIGZvciBhIHdpZGUgcmFuZ2Ugb2YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHguaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHguaAppbmRleCA0NmNjZTgxLi4xZmE0MmUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eC5oCkBAIC02MSwxNyArNjEsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogCiAvKi0tLSBNaW5zICYgTWF4cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X1BPUlRJRF9NQVgJCSgodTE2KTcpCi0jZGVmaW5lCQlIRkEzODR4X05VTVBPUlRTX01BWAkJKCh1MTYpKEhGQTM4NHhfUE9SVElEX01BWCsxKSkKLSNkZWZpbmUJCUhGQTM4NHhfUERSX0xFTl9NQVgJCSgodTE2KTUxMikJLyogaW4gYnl0ZXMsIGZyb20gRUsgKi8KLSNkZWZpbmUJCUhGQTM4NHhfUERBX1JFQ1NfTUFYCQkoKHUxNikyMDApCS8qIGEgZ3Vlc3MgKi8KLSNkZWZpbmUJCUhGQTM4NHhfUERBX0xFTl9NQVgJCSgodTE2KTEwMjQpCS8qIGluIGJ5dGVzLCBmcm9tIEVLICovCi0jZGVmaW5lCQlIRkEzODR4X1NDQU5SRVNVTFRfTUFYCQkoKHUxNikzMSkKLSNkZWZpbmUJCUhGQTM4NHhfSFNDQU5SRVNVTFRfTUFYCQkoKHUxNikzMSkKLSNkZWZpbmUJCUhGQTM4NHhfQ0hJTkZPUkVTVUxUX01BWAkoKHUxNikxNikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0dVRVNTSU5HX01BWExFTgkyMDQ4CS8qIEknbSBub3QgcmVhbGx5IHN1cmUgKi8KLSNkZWZpbmUJCUhGQTM4NHhfUklEREFUQV9NQVhMRU4JCUhGQTM4NHhfUklEX0dVRVNTSU5HX01BWExFTgotI2RlZmluZQkJSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOCTIwNDgKKyNkZWZpbmUJSEZBMzg0eF9QT1JUSURfTUFYCQkoKHUxNik3KQorI2RlZmluZQlIRkEzODR4X05VTVBPUlRTX01BWAkJKCh1MTYpKEhGQTM4NHhfUE9SVElEX01BWCsxKSkKKyNkZWZpbmUJSEZBMzg0eF9QRFJfTEVOX01BWAkJKCh1MTYpNTEyKSAvKiBpbiBieXRlcywgZnJvbSBFSyAqLworI2RlZmluZQlIRkEzODR4X1BEQV9SRUNTX01BWAkJKCh1MTYpMjAwKSAvKiBhIGd1ZXNzICovCisjZGVmaW5lCUhGQTM4NHhfUERBX0xFTl9NQVgJCSgodTE2KTEwMjQpIC8qIGluIGJ5dGVzLCBmcm9tIEVLKi8KKyNkZWZpbmUJSEZBMzg0eF9TQ0FOUkVTVUxUX01BWAkJKCh1MTYpMzEpCisjZGVmaW5lCUhGQTM4NHhfSFNDQU5SRVNVTFRfTUFYCQkoKHUxNikzMSkKKyNkZWZpbmUJSEZBMzg0eF9DSElORk9SRVNVTFRfTUFYCSgodTE2KTE2KQorI2RlZmluZQlIRkEzODR4X1JJRF9HVUVTU0lOR19NQVhMRU4JMjA0OAkvKiBJJ20gbm90IHJlYWxseSBzdXJlICovCisjZGVmaW5lCUhGQTM4NHhfUklEREFUQV9NQVhMRU4JCUhGQTM4NHhfUklEX0dVRVNTSU5HX01BWExFTgorI2RlZmluZQlIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4JMjA0OAogCiAvKi0tLSBTdXBwb3J0IENvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjZGVmaW5lCQlIRkEzODR4X1BPUlRUWVBFX0lCU1MJCQkoKHUxNikwKQpAQCAtMTE1LDggKzExNSw4IEBACiAKIC8qIE1ha2UgYSAzMi1iaXQgZmxhdCBhZGRyZXNzIGZyb20gQVVYIGZvcm1hdCAxNi1iaXQgcGFnZSBhbmQgb2Zmc2V0ICovCiAjZGVmaW5lCQlIRkEzODR4X0FERFJfQVVYX01LRkxBVChwLCBvKQlcCi0JCSgoKHUzMikoKCh1MTYpKHApKSZIRkEzODR4X0FERFJfQVVYX1BBR0VfTUFTSykpIDw8IDcpIHwgXAotCQkoKHUzMikoKCh1MTYpKG8pKSZIRkEzODR4X0FERFJfQVVYX09GRl9NQVNLKSkKKwkJKCgoKHUzMikoKCh1MTYpKHApKSZIRkEzODR4X0FERFJfQVVYX1BBR0VfTUFTSykpIDw8IDcpIHwgXAorCQkoKHUzMikoKCh1MTYpKG8pKSZIRkEzODR4X0FERFJfQVVYX09GRl9NQVNLKSkpCiAKIC8qIE1ha2UgQ01EIGZvcm1hdCBvZmZzZXQgYW5kIHBhZ2UgZnJvbSBhIDMyLWJpdCBmbGF0IGFkZHJlc3MgKi8KICNkZWZpbmUJCUhGQTM4NHhfQUREUl9DTURfTUtQQUdFKGYpIFwKQEAgLTEzNSwxMiArMTM1LDIxIEBACiAjZGVmaW5lCQlIRkEzODR4X0RMU1RBVEVfRkxBU0hFTkFCTEVECQkyCiAKIC8qLS0tIFJlZ2lzdGVyIEZpZWxkIE1hc2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfQ01EX0FJTkZPCQkoKHUxNikoQklUKDE0KSB8IEJJVCgxMykgfCBCSVQoMTIpIHwgQklUKDExKSB8IEJJVCgxMCkgfCBCSVQoOSkgfCBCSVQoOCkpKQotI2RlZmluZQkJSEZBMzg0eF9DTURfTUFDUE9SVAkJKCh1MTYpKEJJVCgxMCkgfCBCSVQoOSkgfCBCSVQoOCkpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfQUlORk8JCSgodTE2KShCSVQoMTQpIHwgQklUKDEzKSBcCisJCQkJCQkJfCBCSVQoMTIpIHwgQklUKDExKSBcCisJCQkJCQkJfCBCSVQoMTApIHwgQklUKDkpIFwKKwkJCQkJCQl8IEJJVCg4KSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9NQUNQT1JUCQkoKHUxNikoQklUKDEwKSB8IEJJVCg5KSB8IFwKKwkJCQkJCQlCSVQoOCkpKQogI2RlZmluZQkJSEZBMzg0eF9DTURfUFJPR01PREUJCSgodTE2KShCSVQoOSkgfCBCSVQoOCkpKQotI2RlZmluZQkJSEZBMzg0eF9DTURfQ01EQ09ERQkJKCh1MTYpKEJJVCg1KSB8IEJJVCg0KSB8IEJJVCgzKSB8IEJJVCgyKSB8IEJJVCgxKSB8IEJJVCgwKSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9DTURDT0RFCQkoKHUxNikoQklUKDUpIHwgQklUKDQpIHwgXAorCQkJCQkJCUJJVCgzKSB8IEJJVCgyKSB8IFwKKwkJCQkJCQlCSVQoMSkgfCBCSVQoMCkpKQogCi0jZGVmaW5lCQlIRkEzODR4X1NUQVRVU19SRVNVTFQJCSgodTE2KShCSVQoMTQpIHwgQklUKDEzKSB8IEJJVCgxMikgfCBCSVQoMTEpIHwgQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSkpCisjZGVmaW5lCQlIRkEzODR4X1NUQVRVU19SRVNVTFQJCSgodTE2KShCSVQoMTQpIHwgQklUKDEzKSBcCisJCQkJCQkJfCBCSVQoMTIpIHwgQklUKDExKSBcCisJCQkJCQkJfCBCSVQoMTApIHwgQklUKDkpIFwKKwkJCQkJCQl8IEJJVCg4KSkpCiAKIC8qLS0tIENvbW1hbmQgQ29kZSBDb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyotLS0gQ29udHJvbGxlciBDb21tYW5kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0yNDQsOCArMjUzLDEwIEBACiAgIFRoaXMgaXMgdGhlIGxlbmd0aCBvZiBKVVNUIHRoZSBEQVRBIHBhcnQgb2YgdGhlIFJJRCAoZG9lcyBub3QKICAgaW5jbHVkZSB0aGUgbGVuIG9yIGNvZGUgZmllbGRzKQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZQkJSEZBMzg0eF9SSURfREJNQ09NTVNRVUFMSVRZX0xFTgkJKCh1MTYpc2l6ZW9mKGhmYTM4NHhfZGJtY29tbXNxdWFsaXR5X3QpKQotI2RlZmluZQkJSEZBMzg0eF9SSURfSk9JTlJFUVVFU1RfTEVOCQkoKHUxNilzaXplb2YoaGZhMzg0eF9Kb2luUmVxdWVzdF9kYXRhX3QpKQorI2RlZmluZQkJSEZBMzg0eF9SSURfREJNQ09NTVNRVUFMSVRZX0xFTgkgXAorCSgodTE2KSBzaXplb2YoaGZhMzg0eF9kYm1jb21tc3F1YWxpdHlfdCkpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9KT0lOUkVRVUVTVF9MRU4gXAorCSgodTE2KXNpemVvZihoZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGFfdCkpCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEluZm9ybWF0aW9uIFJJRHM6ICBNb2RlbSBJbmZvcm1hdGlvbgpAQCAtMzIyLDkgKzMzMywxMSBAQAogCiAvKi0tLSBSZWdpc3RlciBUZXN0L0dldC9TZXQgRmllbGQgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSNkZWZpbmUJCUhGQTM4NHhfQ01EX0FJTkZPX1NFVCh2YWx1ZSkJCSgodTE2KSgodTE2KSh2YWx1ZSkgPDwgOCkpCi0jZGVmaW5lCQlIRkEzODR4X0NNRF9NQUNQT1JUX1NFVCh2YWx1ZSkJCSgodTE2KUhGQTM4NHhfQ01EX0FJTkZPX1NFVCh2YWx1ZSkpCi0jZGVmaW5lCQlIRkEzODR4X0NNRF9QUk9HTU9ERV9TRVQodmFsdWUpCQkoKHUxNilIRkEzODR4X0NNRF9BSU5GT19TRVQoKHUxNil2YWx1ZSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9BSU5GT19TRVQodmFsdWUpCSgodTE2KSgodTE2KSh2YWx1ZSkgPDwgOCkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9NQUNQT1JUX1NFVCh2YWx1ZSkJXAorCQkJKCh1MTYpSEZBMzg0eF9DTURfQUlORk9fU0VUKHZhbHVlKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX1BST0dNT0RFX1NFVCh2YWx1ZSkJXAorCQkJKCh1MTYpSEZBMzg0eF9DTURfQUlORk9fU0VUKCh1MTYpdmFsdWUpKQogI2RlZmluZQkJSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQodmFsdWUpCQkoKHUxNikodmFsdWUpKQogCiAjZGVmaW5lCQlIRkEzODR4X1NUQVRVU19SRVNVTFRfU0VUKHZhbHVlKQkoKCh1MTYpKHZhbHVlKSkgPDwgOCkKQEAgLTQwMiw3ICs0MTUsNyBAQAogLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogV1BBRGF0YSAgICAgICAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KIHR5cGVkZWYgc3RydWN0IGhmYTM4NHhfV1BBRGF0YSB7CiAJdTE2IGRhdGFsZW47Ci0JdTggZGF0YVswXTsJCS8vIG1heCA4MAorCXU4IGRhdGFbMF07CQkvKiBtYXggODAgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfV1BBRGF0YV90OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00NzksNyArNDkyLDggQEAKICNkZWZpbmUJCUhGQTM4NHhfVFhTVEFUVVNfQUdFREVSUgkJKCh1MTYpQklUKDEpKQogI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19SRVRSWUVSUgkJKCh1MTYpQklUKDApKQogLyotLSBUcmFuc21pdCBDb250cm9sIEZpZWxkIC0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfVFhfTUFDUE9SVAkJCSgodTE2KShCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKSkKKyNkZWZpbmUJCUhGQTM4NHhfVFhfTUFDUE9SVAkJCSgodTE2KShCSVQoMTApIHwgXAorCQkJCQkJCSAgQklUKDkpIHwgQklUKDgpKSkKICNkZWZpbmUJCUhGQTM4NHhfVFhfU1RSVUNUWVBFCQkJKCh1MTYpKEJJVCg0KSB8IEJJVCgzKSkpCiAjZGVmaW5lCQlIRkEzODR4X1RYX1RYRVgJCQkJKCh1MTYpQklUKDIpKQogI2RlZmluZQkJSEZBMzg0eF9UWF9UWE9LCQkJCSgodTE2KUJJVCgxKSkKQEAgLTQ5Niw3ICs1MTAsOCBAQAogI2RlZmluZQlIRkEzODR4X1RYX1NFVCh2LCBtLCBzKQkJKCgoKHUxNikodikpPDwoKHUxNikocykpKSYoKHUxNikobSkpKQogCiAjZGVmaW5lCUhGQTM4NHhfVFhfTUFDUE9SVF9TRVQodikJSEZBMzg0eF9UWF9TRVQodiwgSEZBMzg0eF9UWF9NQUNQT1JULCA4KQotI2RlZmluZQlIRkEzODR4X1RYX1NUUlVDVFlQRV9TRVQodikJSEZBMzg0eF9UWF9TRVQodiwgSEZBMzg0eF9UWF9TVFJVQ1RZUEUsIDMpCisjZGVmaW5lCUhGQTM4NHhfVFhfU1RSVUNUWVBFX1NFVCh2KQlIRkEzODR4X1RYX1NFVCh2LCBcCisJCQkJCQlIRkEzODR4X1RYX1NUUlVDVFlQRSwgMykKICNkZWZpbmUJSEZBMzg0eF9UWF9UWEVYX1NFVCh2KQkJSEZBMzg0eF9UWF9TRVQodiwgSEZBMzg0eF9UWF9UWEVYLCAyKQogI2RlZmluZQlIRkEzODR4X1RYX1RYT0tfU0VUKHYpCQlIRkEzODR4X1RYX1NFVCh2LCBIRkEzODR4X1RYX1RYT0ssIDEpCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01MzQsMTMgKzU0OSwxNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKi0tIFN0YXR1cyBGaWVsZHMgLS0qLwotI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUCQkoKHUxNikoQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSkpCisjZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX01BQ1BPUlQJCSgodTE2KShCSVQoMTApIHwgXAorCQkJCQkJCQlCSVQoOSkgfCBcCisJCQkJCQkJCUJJVCg4KSkpCiAjZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX0ZDU0VSUgkJCSgodTE2KUJJVCgwKSkKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENvbW11bmljYXRpb24gRnJhbWVzOiBUZXN0L0dldC9TZXQgRmllbGQgVmFsdWVzIGZvciBSZWNlaXZlIEZyYW1lcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUX0dFVCh2YWx1ZSkJKCh1MTYpKCgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVCkgPj4gOCkpCi0jZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX0lTRkNTRVJSKHZhbHVlKQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X1JYU1RBVFVTX0ZDU0VSUikpCisjZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX01BQ1BPUlRfR0VUKHZhbHVlKQkoKHUxNikoKCgodTE2KSh2YWx1ZSkpIFwKKwkJCQkJICAgICYgSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUKSA+PiA4KSkKKyNkZWZpbmUJCUhGQTM4NHhfUlhTVEFUVVNfSVNGQ1NFUlIodmFsdWUpCSgodTE2KSgoKHUxNikodmFsdWUpKSBcCisJCQkJCQkgICYgSEZBMzg0eF9SWFNUQVRVU19GQ1NFUlIpKQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIEZSQU1FIFNUUlVDVFVSRVM6IEluZm9ybWF0aW9uIFR5cGVzIGFuZCBJbmZvcm1hdGlvbiBGcmFtZSBTdHJ1Y3R1cmVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTMzLDcgKzExNTIsNyBAQAogCiB0eXBlZGVmIHZvaWQgKCpjdGx4X2NtZGNiX3QpIChzdHJ1Y3QgaGZhMzg0eCAqLCBjb25zdCBzdHJ1Y3QgaGZhMzg0eF91c2JjdGx4ICopOwogCi10eXBlZGVmIHZvaWQgKCpjdGx4X3VzZXJjYl90KSAoc3RydWN0IGhmYTM4NHggKiBodywKK3R5cGVkZWYgdm9pZCAoKmN0bHhfdXNlcmNiX3QpIChzdHJ1Y3QgaGZhMzg0eCAqaHcsCiAJCQkgICAgICAgdm9pZCAqY3RseHJlc3VsdCwgdm9pZCAqdXNlcmNiX2RhdGEpOwogCiB0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYmN0bHggewpAQCAtMTE3NCwxNCArMTE5MywxNCBAQAogfSBoZmEzODR4X21ldGFjbWRfdDsKIAogI2RlZmluZQlNQVhfR1JQX0FERFIJCTMyCi0jZGVmaW5lIFdMQU5fQ09NTUVOVF9NQVgJODAJLyogTWF4LiBsZW5ndGggb2YgdXNlciBjb21tZW50IHN0cmluZy4gKi8KKyNkZWZpbmUgV0xBTl9DT01NRU5UX01BWAk4MCAgLyogTWF4LiBsZW5ndGggb2YgdXNlciBjb21tZW50IHN0cmluZy4gKi8KIAotI2RlZmluZSBXTEFOX0FVVEhfTUFYICAgICAgICAgICA2MAkvKiBNYXguICMgb2YgYXV0aGVudGljYXRlZCBzdGF0aW9ucy4gKi8KLSNkZWZpbmUgV0xBTl9BQ0NFU1NfTUFYCQk2MAkvKiBNYXguICMgb2Ygc3RhdGlvbnMgaW4gYW4gYWNjZXNzIGxpc3QuICovCi0jZGVmaW5lIFdMQU5fQUNDRVNTX05PTkUJMAkvKiBObyBzdGF0aW9ucyBtYXkgYmUgYXV0aGVudGljYXRlZC4gKi8KLSNkZWZpbmUgV0xBTl9BQ0NFU1NfQUxMCQkxCS8qIEFsbCBzdGF0aW9ucyBtYXkgYmUgYXV0aGVudGljYXRlZC4gKi8KLSNkZWZpbmUgV0xBTl9BQ0NFU1NfQUxMT1cJMgkvKiBBdXRoZW50aWNhdGUgb25seSAiYWxsb3dlZCIgc3RhdGlvbnMuICovCi0jZGVmaW5lIFdMQU5fQUNDRVNTX0RFTlkJMwkvKiBEbyBub3QgYXV0aGVudGljYXRlICJkZW5pZWQiIHN0YXRpb25zLiAqLworI2RlZmluZSBXTEFOX0FVVEhfTUFYICAgICAgICAgICA2MCAgLyogTWF4LiAjIG9mIGF1dGhlbnRpY2F0ZWQgc3RhdGlvbnMuICovCisjZGVmaW5lIFdMQU5fQUNDRVNTX01BWAkJNjAgIC8qIE1heC4gIyBvZiBzdGF0aW9ucyBpbiBhbiBhY2Nlc3MgbGlzdC4gKi8KKyNkZWZpbmUgV0xBTl9BQ0NFU1NfTk9ORQkwICAgLyogTm8gc3RhdGlvbnMgbWF5IGJlIGF1dGhlbnRpY2F0ZWQuICovCisjZGVmaW5lIFdMQU5fQUNDRVNTX0FMTAkJMSAgIC8qIEFsbCBzdGF0aW9ucyBtYXkgYmUgYXV0aGVudGljYXRlZC4gKi8KKyNkZWZpbmUgV0xBTl9BQ0NFU1NfQUxMT1cJMiAgIC8qIEF1dGhlbnRpY2F0ZSBvbmx5ICJhbGxvd2VkIiBzdGF0aW9ucy4gKi8KKyNkZWZpbmUgV0xBTl9BQ0NFU1NfREVOWQkzICAgLyogRG8gbm90IGF1dGhlbnRpY2F0ZSAiZGVuaWVkIiBzdGF0aW9ucy4gKi8KIAogLyogWFhYIFRoZXNlIGFyZSBnb2luZyBhd2F5IEFTQVAgKi8KIHR5cGVkZWYgc3RydWN0IHByaXNtMnN0YV9hdXRobGlzdCB7CkBAIC0xMjk0LDEwICsxMzEzLDIzIEBACiAJaGZhMzg0eF9jYXBsZXZlbF90IGNhcF9zdXBfYXA7CiAKIAkvKiBBY3RvciBjb21wYXRpYmlsaXR5IHJhbmdlcyAqLwotCWhmYTM4NHhfY2FwbGV2ZWxfdCBjYXBfYWN0X3ByaV9jZmk7CS8qIHByaSBmL3cgdG8gY29udHJvbGxlciBpbnRlcmZhY2UgKi8KLQloZmEzODR4X2NhcGxldmVsX3QgY2FwX2FjdF9zdGFfY2ZpOwkvKiBzdGEgZi93IHRvIGNvbnRyb2xsZXIgaW50ZXJmYWNlICovCisJaGZhMzg0eF9jYXBsZXZlbF90IGNhcF9hY3RfcHJpX2NmaTsJLyoKKwkJCQkJCSAqIHByaSBmL3cgdG8gY29udHJvbGxlcgorCQkJCQkJICogaW50ZXJmYWNlCisJCQkJCQkgKi8KKworCWhmYTM4NHhfY2FwbGV2ZWxfdCBjYXBfYWN0X3N0YV9jZmk7CS8qCisJCQkJCQkgKiBzdGEgZi93IHRvIGNvbnRyb2xsZXIKKwkJCQkJCSAqIGludGVyZmFjZQorCQkJCQkJICovCisKIAloZmEzODR4X2NhcGxldmVsX3QgY2FwX2FjdF9zdGFfbWZpOwkvKiBzdGEgZi93IHRvIG1vZGVtIGludGVyZmFjZSAqLwotCWhmYTM4NHhfY2FwbGV2ZWxfdCBjYXBfYWN0X2FwX2NmaTsJLyogYXAgZi93IHRvIGNvbnRyb2xsZXIgaW50ZXJmYWNlICovCisKKwloZmEzODR4X2NhcGxldmVsX3QgY2FwX2FjdF9hcF9jZmk7CS8qCisJCQkJCQkgKiBhcCBmL3cgdG8gY29udHJvbGxlcgorCQkJCQkJICogaW50ZXJmYWNlCisJCQkJCQkgKi8KKwogCWhmYTM4NHhfY2FwbGV2ZWxfdCBjYXBfYWN0X2FwX21maTsJLyogYXAgZi93IHRvIG1vZGVtIGludGVyZmFjZSAqLwogCiAJdTMyIHBzdXNlcmNvdW50OwkvKiBQb3dlciBzYXZlIHVzZXIgY291bnQuICovCkBAIC0xMzIwLDI1ICsxMzUyLDI1IEBACiAKIH0gaGZhMzg0eF90OwogCi12b2lkIGhmYTM4NHhfY3JlYXRlKGhmYTM4NHhfdCAqIGh3LCBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiKTsKLXZvaWQgaGZhMzg0eF9kZXN0cm95KGhmYTM4NHhfdCAqIGh3KTsKK3ZvaWQgaGZhMzg0eF9jcmVhdGUoaGZhMzg0eF90ICpodywgc3RydWN0IHVzYl9kZXZpY2UgKnVzYik7Cit2b2lkIGhmYTM4NHhfZGVzdHJveShoZmEzODR4X3QgKmh3KTsKIAogaW50Ci1oZmEzODR4X2NvcmVyZXNldChoZmEzODR4X3QgKiBodywgaW50IGhvbGR0aW1lLCBpbnQgc2V0dGxldGltZSwgaW50IGdlbmVzaXMpOwotaW50IGhmYTM4NHhfZHJ2cl9jb21tdGFsbGllcyhoZmEzODR4X3QgKiBodyk7Ci1pbnQgaGZhMzg0eF9kcnZyX2Rpc2FibGUoaGZhMzg0eF90ICogaHcsIHUxNiBtYWNwb3J0KTsKLWludCBoZmEzODR4X2RydnJfZW5hYmxlKGhmYTM4NHhfdCAqIGh3LCB1MTYgbWFjcG9ydCk7Ci1pbnQgaGZhMzg0eF9kcnZyX2ZsYXNoZGxfZW5hYmxlKGhmYTM4NHhfdCAqIGh3KTsKLWludCBoZmEzODR4X2RydnJfZmxhc2hkbF9kaXNhYmxlKGhmYTM4NHhfdCAqIGh3KTsKLWludCBoZmEzODR4X2RydnJfZmxhc2hkbF93cml0ZShoZmEzODR4X3QgKiBodywgdTMyIGRhZGRyLCB2b2lkICpidWYsIHUzMiBsZW4pOwotaW50IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaGZhMzg0eF90ICogaHcsIHUxNiByaWQsIHZvaWQgKmJ1ZiwgdTE2IGxlbik7Ci1pbnQgaGZhMzg0eF9kcnZyX3JhbWRsX2VuYWJsZShoZmEzODR4X3QgKiBodywgdTMyIGV4ZWFkZHIpOwotaW50IGhmYTM4NHhfZHJ2cl9yYW1kbF9kaXNhYmxlKGhmYTM4NHhfdCAqIGh3KTsKLWludCBoZmEzODR4X2RydnJfcmFtZGxfd3JpdGUoaGZhMzg0eF90ICogaHcsIHUzMiBkYWRkciwgdm9pZCAqYnVmLCB1MzIgbGVuKTsKLWludCBoZmEzODR4X2RydnJfcmVhZHBkYShoZmEzODR4X3QgKiBodywgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKTsKLWludCBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGhmYTM4NHhfdCAqIGh3LCB1MTYgcmlkLCB2b2lkICpidWYsIHUxNiBsZW4pOworaGZhMzg0eF9jb3JlcmVzZXQoaGZhMzg0eF90ICpodywgaW50IGhvbGR0aW1lLCBpbnQgc2V0dGxldGltZSwgaW50IGdlbmVzaXMpOworaW50IGhmYTM4NHhfZHJ2cl9jb21tdGFsbGllcyhoZmEzODR4X3QgKmh3KTsKK2ludCBoZmEzODR4X2RydnJfZGlzYWJsZShoZmEzODR4X3QgKmh3LCB1MTYgbWFjcG9ydCk7CitpbnQgaGZhMzg0eF9kcnZyX2VuYWJsZShoZmEzODR4X3QgKmh3LCB1MTYgbWFjcG9ydCk7CitpbnQgaGZhMzg0eF9kcnZyX2ZsYXNoZGxfZW5hYmxlKGhmYTM4NHhfdCAqaHcpOworaW50IGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2Rpc2FibGUoaGZhMzg0eF90ICpodyk7CitpbnQgaGZhMzg0eF9kcnZyX2ZsYXNoZGxfd3JpdGUoaGZhMzg0eF90ICpodywgdTMyIGRhZGRyLCB2b2lkICpidWYsIHUzMiBsZW4pOworaW50IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaGZhMzg0eF90ICpodywgdTE2IHJpZCwgdm9pZCAqYnVmLCB1MTYgbGVuKTsKK2ludCBoZmEzODR4X2RydnJfcmFtZGxfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIHUzMiBleGVhZGRyKTsKK2ludCBoZmEzODR4X2RydnJfcmFtZGxfZGlzYWJsZShoZmEzODR4X3QgKmh3KTsKK2ludCBoZmEzODR4X2RydnJfcmFtZGxfd3JpdGUoaGZhMzg0eF90ICpodywgdTMyIGRhZGRyLCB2b2lkICpidWYsIHUzMiBsZW4pOworaW50IGhmYTM4NHhfZHJ2cl9yZWFkcGRhKGhmYTM4NHhfdCAqaHcsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7CitpbnQgaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhoZmEzODR4X3QgKmh3LCB1MTYgcmlkLCB2b2lkICpidWYsIHUxNiBsZW4pOwogCi1zdGF0aWMgaW5saW5lIGludCBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaGZhMzg0eF90ICogaHcsIHUxNiByaWQsIHZvaWQgKnZhbCkKK3N0YXRpYyBpbmxpbmUgaW50IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihoZmEzODR4X3QgKmh3LCB1MTYgcmlkLCB2b2lkICp2YWwpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgcmlkLCB2YWwsIHNpemVvZih1MTYpKTsKQEAgLTEzNDcsNDYgKzEzNzksNDYgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW5saW5lIGludCBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaGZhMzg0eF90ICogaHcsIHUxNiByaWQsIHUxNiB2YWwpCitzdGF0aWMgaW5saW5lIGludCBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaGZhMzg0eF90ICpodywgdTE2IHJpZCwgdTE2IHZhbCkKIHsKIAl1MTYgdmFsdWUgPSBjcHVfdG9fbGUxNih2YWwpOwogCXJldHVybiBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCByaWQsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7CiB9CiAKIGludAotaGZhMzg0eF9kcnZyX2dldGNvbmZpZ19hc3luYyhoZmEzODR4X3QgKiBodywKK2hmYTM4NHhfZHJ2cl9nZXRjb25maWdfYXN5bmMoaGZhMzg0eF90ICpodywKIAkJCSAgICAgdTE2IHJpZCwgY3RseF91c2VyY2JfdCB1c2VyY2IsIHZvaWQgKnVzZXJjYl9kYXRhKTsKIAogaW50Ci1oZmEzODR4X2RydnJfc2V0Y29uZmlnX2FzeW5jKGhmYTM4NHhfdCAqIGh3LAoraGZhMzg0eF9kcnZyX3NldGNvbmZpZ19hc3luYyhoZmEzODR4X3QgKmh3LAogCQkJICAgICB1MTYgcmlkLAogCQkJICAgICB2b2lkICpidWYsCiAJCQkgICAgIHUxNiBsZW4sIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSk7CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1oZmEzODR4X2RydnJfc2V0Y29uZmlnMTZfYXN5bmMoaGZhMzg0eF90ICogaHcsIHUxNiByaWQsIHUxNiB2YWwpCitoZmEzODR4X2RydnJfc2V0Y29uZmlnMTZfYXN5bmMoaGZhMzg0eF90ICpodywgdTE2IHJpZCwgdTE2IHZhbCkKIHsKIAl1MTYgdmFsdWUgPSBjcHVfdG9fbGUxNih2YWwpOwogCXJldHVybiBoZmEzODR4X2RydnJfc2V0Y29uZmlnX2FzeW5jKGh3LCByaWQsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSwKIAkJCQkJICAgIE5VTEwsIE5VTEwpOwogfQogCi1pbnQgaGZhMzg0eF9kcnZyX3N0YXJ0KGhmYTM4NHhfdCAqIGh3KTsKLWludCBoZmEzODR4X2RydnJfc3RvcChoZmEzODR4X3QgKiBodyk7CitpbnQgaGZhMzg0eF9kcnZyX3N0YXJ0KGhmYTM4NHhfdCAqaHcpOworaW50IGhmYTM4NHhfZHJ2cl9zdG9wKGhmYTM4NHhfdCAqaHcpOwogaW50Ci1oZmEzODR4X2RydnJfdHhmcmFtZShoZmEzODR4X3QgKiBodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICBwODAyMTFfaGRyX3QgKiBwODAyMTFfaGRyLCBwODAyMTFfbWV0YXdlcF90ICogcDgwMjExX3dlcCk7Ci12b2lkIGhmYTM4NHhfdHhfdGltZW91dCh3bGFuZGV2aWNlX3QgKiB3bGFuZGV2KTsKK2hmYTM4NHhfZHJ2cl90eGZyYW1lKGhmYTM4NHhfdCAqaHcsIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLCBwODAyMTFfbWV0YXdlcF90ICpwODAyMTFfd2VwKTsKK3ZvaWQgaGZhMzg0eF90eF90aW1lb3V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CiAKLWludCBoZmEzODR4X2NtZF9pbml0aWFsaXplKGhmYTM4NHhfdCAqIGh3KTsKLWludCBoZmEzODR4X2NtZF9lbmFibGUoaGZhMzg0eF90ICogaHcsIHUxNiBtYWNwb3J0KTsKLWludCBoZmEzODR4X2NtZF9kaXNhYmxlKGhmYTM4NHhfdCAqIGh3LCB1MTYgbWFjcG9ydCk7Ci1pbnQgaGZhMzg0eF9jbWRfYWxsb2NhdGUoaGZhMzg0eF90ICogaHcsIHUxNiBsZW4pOwotaW50IGhmYTM4NHhfY21kX21vbml0b3IoaGZhMzg0eF90ICogaHcsIHUxNiBlbmFibGUpOworaW50IGhmYTM4NHhfY21kX2luaXRpYWxpemUoaGZhMzg0eF90ICpodyk7CitpbnQgaGZhMzg0eF9jbWRfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIHUxNiBtYWNwb3J0KTsKK2ludCBoZmEzODR4X2NtZF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcsIHUxNiBtYWNwb3J0KTsKK2ludCBoZmEzODR4X2NtZF9hbGxvY2F0ZShoZmEzODR4X3QgKmh3LCB1MTYgbGVuKTsKK2ludCBoZmEzODR4X2NtZF9tb25pdG9yKGhmYTM4NHhfdCAqaHcsIHUxNiBlbmFibGUpOwogaW50Ci1oZmEzODR4X2NtZF9kb3dubG9hZChoZmEzODR4X3QgKiBodywKK2hmYTM4NHhfY21kX2Rvd25sb2FkKGhmYTM4NHhfdCAqaHcsCiAJCSAgICAgdTE2IG1vZGUsIHUxNiBsb3dhZGRyLCB1MTYgaGlnaGFkZHIsIHUxNiBjb2RlbGVuKTsKIAotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKl9fS0VSTkVMX18gKi8KIAotI2VuZGlmIC8qIF9IRkEzODR4X0ggKi8KKyNlbmRpZiAvKl9IRkEzODR4X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHhfdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4X3VzYi5jCmluZGV4IDkyNTY3OGIuLjVkZjU2ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHhfdXNiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eF91c2IuYwpAQCAtNTIsNyArNTIsNyBAQAogKiBhcm91bmQgdGhlIHJlZ2lzdGVyIGFjY2Vzc2VzLiAgVGhlIG5leHQgaGlnaGVyIGxldmVsIHJlcHJlc2VudHMgQy1jYWxsYWJsZQogKiBwcmlzbTIgQVBJIGZ1bmN0aW9ucyB0aGF0IG1hdGNoIHRoZSBJbnRlcnNpbCBkb2N1bWVudGF0aW9uIGFzIGNsb3NlbHkKICogYXMgaXMgcmVhc29uYWJsZS4gIFRoZSBuZXh0IGhpZ2hlciBsYXllciBpbXBsZW1lbnRzIGNvbW1vbiBzZXF1ZW5jZXMKLSogb2YgaW52b2thdGlvbnMgb2YgdGhlIEFQSSBsYXllciAoZS5nLiB3cml0ZSB0byBiYXAsIGZvbGxvd2VkIGJ5IGNtZCkuCisqIG9mIGludm9jYXRpb25zIG9mIHRoZSBBUEkgbGF5ZXIgKGUuZy4gd3JpdGUgdG8gYmFwLCBmb2xsb3dlZCBieSBjbWQpLgogKgogKiBDb21tb24gc2VxdWVuY2VzOgogKiBoZmEzODR4X2RydnJfeHh4CUhpZ2hlc3QgbGV2ZWwgYWJzdHJhY3Rpb25zIHByb3ZpZGVkIGJ5IHRoZQpAQCAtMTE4LDE1ICsxMTgsMTUgQEAKICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9nZW5lcmljLmg+CiAKLSNkZWZpbmUgU1VCTUlUX1VSQih1LGYpICB1c2Jfc3VibWl0X3VyYih1LGYpCisjZGVmaW5lIFNVQk1JVF9VUkIodSwgZikgIHVzYl9zdWJtaXRfdXJiKHUsIGYpCiAKICNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgogI2luY2x1ZGUgInA4MDIxMWhkci5oIgpAQCAtNjI3LDcgKzYyNyw3IEBACiB7CiAJaGZhMzg0eF91c2JjdGx4X3QgKmN0bHg7CiAKLQljdGx4ID0ga21hbGxvYyhzaXplb2YoKmN0bHgpLCBpbl9pbnRlcnJ1cHQoKT8gR0ZQX0FUT01JQyA6IEdGUF9LRVJORUwpOworCWN0bHggPSBrbWFsbG9jKHNpemVvZigqY3RseCksIGluX2ludGVycnVwdCgpID8gR0ZQX0FUT01JQyA6IEdGUF9LRVJORUwpOwogCWlmIChjdGx4ICE9IE5VTEwpIHsKIAkJbWVtc2V0KGN0bHgsIDAsIHNpemVvZigqY3RseCkpOwogCQlpbml0X2NvbXBsZXRpb24oJmN0bHgtPmRvbmUpOwpAQCAtNjc1LDcgKzY3NSw3IEBACiB9OwogdHlwZWRlZiBzdHJ1Y3QgdXNiY3RseF9jbWRfY29tcGxldG9yIHVzYmN0bHhfY21kX2NvbXBsZXRvcl90OwogCi1zdGF0aWMgaW50IHVzYmN0bHhfY21kX2NvbXBsZXRvcl9mbih1c2JjdGx4X2NvbXBsZXRvcl90ICogaGVhZCkKK3N0YXRpYyBpbnQgdXNiY3RseF9jbWRfY29tcGxldG9yX2ZuKHVzYmN0bHhfY29tcGxldG9yX3QgKmhlYWQpCiB7CiAJdXNiY3RseF9jbWRfY29tcGxldG9yX3QgKmNvbXBsZXRlID0gKHVzYmN0bHhfY21kX2NvbXBsZXRvcl90ICopIGhlYWQ7CiAJcmV0dXJuIHVzYmN0bHhfZ2V0X3N0YXR1cyhjb21wbGV0ZS0+Y21kcmVzcCwgY29tcGxldGUtPnJlc3VsdCk7CkBAIC0xOTA5LDE4ICsxOTA5LDE5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogUmV0cmlldmUgdGhlIGJ1ZmZlciBsb2Mmc2l6ZSBhbmQgdGltZW91dCAqLwotCWlmICgocmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfRE9XTkxPQURCVUZGRVIsCi0JCQkJCSAgICAgJihody0+YnVmaW5mbyksCi0JCQkJCSAgICAgc2l6ZW9mKGh3LT5idWZpbmZvKSkpKSB7CisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfRE9XTkxPQURCVUZGRVIsCisJCQkJCSYoaHctPmJ1ZmluZm8pLCBzaXplb2YoaHctPmJ1ZmluZm8pKTsKKwlpZiAocmVzdWx0KQogCQlyZXR1cm4gcmVzdWx0OwotCX0KKwogCWh3LT5idWZpbmZvLnBhZ2UgPSBsZTE2X3RvX2NwdShody0+YnVmaW5mby5wYWdlKTsKIAlody0+YnVmaW5mby5vZmZzZXQgPSBsZTE2X3RvX2NwdShody0+YnVmaW5mby5vZmZzZXQpOwogCWh3LT5idWZpbmZvLmxlbiA9IGxlMTZfdG9fY3B1KGh3LT5idWZpbmZvLmxlbik7Ci0JaWYgKChyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX01BWExPQURUSU1FLAotCQkJCQkgICAgICAgJihody0+ZGx0aW1lb3V0KSkpKSB7CisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9NQVhMT0FEVElNRSwKKwkJCQkJICAmKGh3LT5kbHRpbWVvdXQpKTsKKwlpZiAocmVzdWx0KQogCQlyZXR1cm4gcmVzdWx0OwotCX0KKwogCWh3LT5kbHRpbWVvdXQgPSBsZTE2X3RvX2NwdShody0+ZGx0aW1lb3V0KTsKIAogCXByX2RlYnVnKCJmbGFzaGRsX2VuYWJsZVxuIik7CkBAIC0zMDcxLDkgKzMwNzIsOSBAQAogCQkJCSAgaGZhMzg0eF9jdGx4b3V0X2NhbGxiYWNrLCBodyk7CiAJCWh3LT5jdGx4X3VyYi50cmFuc2Zlcl9mbGFncyB8PSBVU0JfUVVFVUVfQlVMSzsKIAotCQkvKiBOb3cgc3VibWl0IHRoZSBVUkIgYW5kIHVwZGF0ZSB0aGUgQ1RMWCdzIHN0YXRlCi0JCSAqLwotCQlpZiAoKHJlc3VsdCA9IFNVQk1JVF9VUkIoJmh3LT5jdGx4X3VyYiwgR0ZQX0FUT01JQykpID09IDApIHsKKwkJLyogTm93IHN1Ym1pdCB0aGUgVVJCIGFuZCB1cGRhdGUgdGhlIENUTFgncyBzdGF0ZSAqLworCQlyZXN1bHQgPSBTVUJNSVRfVVJCKCZody0+Y3RseF91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAocmVzdWx0ID09IDApIHsKIAkJCS8qIFRoaXMgQ1RMWCBpcyBub3cgcnVubmluZyBvbiB0aGUgYWN0aXZlIHF1ZXVlICovCiAJCQloZWFkLT5zdGF0ZSA9IENUTFhfUkVRX1NVQk1JVFRFRDsKIApAQCAtMzU5OSw3ICszNjAwLDggQEAKIAkJCSBza2JsZW4gLSBzaXplb2YocDgwMjExX2NhcGhkcl90KSk7CiAJfQogCi0JaWYgKChza2IgPSBkZXZfYWxsb2Nfc2tiKHNrYmxlbikpID09IE5VTEwpIHsKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKHNrYmxlbik7CisJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgImFsbG9jX3NrYiBmYWlsZWQgdHJ5aW5nIHRvIGFsbG9jYXRlICVkIGJ5dGVzXG4iLAogCQkgICAgICAgc2tibGVuKTsKQEAgLTM2NDIsNyArMzY0NCw3IEBACiAJCS8qIGNoZWNrIGZvciB1bmVuY3J5cHRlZCBzdHVmZiBpZiBXRVAgYml0IHNldC4gKi8KIAkJaWYgKCooZGF0YXAgLSBoZHJsZW4gKyAxKSAmIDB4NDApCS8qIHdlcCBzZXQgKi8KIAkJCWlmICgoKihkYXRhcCkgPT0gMHhhYSkgJiYgKCooZGF0YXAgKyAxKSA9PSAweGFhKSkKLQkJCQkqKGRhdGFwIC0gaGRybGVuICsgMSkgJj0gMHhiZjsJLy8gY2xlYXIgd2VwOyBpdCdzIHRoZSA4MDIuMiBoZWFkZXIhCisJCQkJKihkYXRhcCAtIGhkcmxlbiArIDEpICY9IDB4YmY7CS8qIGNsZWFyIHdlcDsgaXQncyB0aGUgODAyLjIgaGVhZGVyISAqLwogCX0KIAogCWlmIChody0+c25pZmZfZmNzKSB7CkBAIC0zODcwLDkgKzM4NzIsOSBAQAogCiBkZWxyZXNwOgogCWlmIChkZWxldGVfcmVzcHRpbWVyKSB7Ci0JCWlmICgodGltZXJfb2sgPSBkZWxfdGltZXIoJmh3LT5yZXNwdGltZXIpKSAhPSAwKSB7CisJCXRpbWVyX29rID0gZGVsX3RpbWVyKCZody0+cmVzcHRpbWVyKTsKKwkJaWYgKHRpbWVyX29rICE9IDApCiAJCQlody0+cmVzcF90aW1lcl9kb25lID0gMTsKLQkJfQogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmMKaW5kZXggNTk1MmM2Ny4uYTE2MDVmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWNvbnYuYwpAQCAtMjA2LDEyICsyMDYsMTEgQEAKIAkJLyogWFhYWCBuZWVkIHRvIHBpY2sga2V5bnVtIG90aGVyIHRoYW4gZGVmYXVsdD8gKi8KIAogCQlwODAyMTFfd2VwLT5kYXRhID0ga21hbGxvYyhza2ItPmxlbiwgR0ZQX0FUT01JQyk7Ci0KLQkJaWYgKChmb28gPSB3ZXBfZW5jcnlwdCh3bGFuZGV2LCBza2ItPmRhdGEsIHA4MDIxMV93ZXAtPmRhdGEsCi0JCQkJICAgICAgIHNrYi0+bGVuLAotCQkJCSAgICAgICAod2xhbmRldi0+aG9zdHdlcCAmCi0JCQkJCUhPU1RXRVBfREVGQVVMVEtFWV9NQVNLKSwKLQkJCQkgICAgICAgcDgwMjExX3dlcC0+aXYsIHA4MDIxMV93ZXAtPmljdikpKSB7CisJCWZvbyA9IHdlcF9lbmNyeXB0KHdsYW5kZXYsIHNrYi0+ZGF0YSwgcDgwMjExX3dlcC0+ZGF0YSwKKwkJCQkgIHNrYi0+bGVuLAorCQkJCSAgKHdsYW5kZXYtPmhvc3R3ZXAgJkhPU1RXRVBfREVGQVVMVEtFWV9NQVNLKSwKKwkJCQkgIHA4MDIxMV93ZXAtPml2LCBwODAyMTFfd2VwLT5pY3YpOworCQlpZiAoZm9vKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkgICAgICAgIkhvc3QgZW4tV0VQIGZhaWxlZCwgZHJvcHBpbmcgZnJhbWUgKCVkKS5cbiIsCiAJCQkgICAgICAgZm9vKTsKQEAgLTMyMywxMSArMzIyLDEyIEBACiAJCQkgICAgICAgc2tiLT5sZW4pOwogCQkJcmV0dXJuIDE7CiAJCX0KLQkJaWYgKChmb28gPSB3ZXBfZGVjcnlwdCh3bGFuZGV2LCBza2ItPmRhdGEgKyBwYXlsb2FkX29mZnNldCArIDQsCisJCWZvbyA9IHdlcF9kZWNyeXB0KHdsYW5kZXYsIHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0ICsgNCwKIAkJCQkgICAgICAgcGF5bG9hZF9sZW5ndGggLSA4LCAtMSwKIAkJCQkgICAgICAgc2tiLT5kYXRhICsgcGF5bG9hZF9vZmZzZXQsCiAJCQkJICAgICAgIHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0ICsKLQkJCQkgICAgICAgcGF5bG9hZF9sZW5ndGggLSA0KSkpIHsKKwkJCQkgICAgICAgcGF5bG9hZF9sZW5ndGggLSA0KTsKKwkJaWYgKGZvbykgewogCQkJLyogZGUtd2VwIGZhaWxlZCwgZHJvcCBza2IuICovCiAJCQlwcl9kZWJ1ZygiSG9zdCBkZS1XRVAgZmFpbGVkLCBkcm9wcGluZyBmcmFtZSAoJWQpLlxuIiwKIAkJCQkgZm9vKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWNvbnYuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWNvbnYuaAppbmRleCAwYzYyZGYxLi42ZmUxNjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5oCkBAIC0xNTMsOCArMTUzLDggQEAKIGludCBza2JfcDgwMjExX3RvX2V0aGVyKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCB1MzIgZXRoY29udiwKIAkJCXN0cnVjdCBza19idWZmICpza2IpOwogaW50IHNrYl9ldGhlcl90b19wODAyMTEoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHUzMiBldGhjb252LAotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgcDgwMjExX2hkcl90ICogcDgwMjExX2hkciwKLQkJCXA4MDIxMV9tZXRhd2VwX3QgKiBwODAyMTFfd2VwKTsKKwkJCXN0cnVjdCBza19idWZmICpza2IsIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwKKwkJCXA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApOwogCiBpbnQgcDgwMjExX3N0dF9maW5kcHJvdG8odTE2IHByb3RvKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YWRlZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YWRlZi5oCmluZGV4IGRhOGI2ZjUuLjBjY2ZiYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFkZWYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhZGVmLmgKQEAgLTE5MCw5ICsxOTAsOSBAQAogCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCiAJCQlQODAyMTFESURfTUtHUk9VUCgxKSkKICNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNQUNBZGRyZXNzIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIChQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICBQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxODAwMDAwMCkKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgxODAwMDAwMCkKICNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFSVFNUaHJlc2hvbGQgXAogCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCiAJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKQEAgLTIxMCwxOCArMjEwLDE4IEBACiAJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKIAkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDE4MDAwMDAwKQogI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1heFRyYW5zbWl0TVNEVUxpZmV0aW1lIFwKLSAgICAgICAgICAgICAgICAgICAgICAgKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgIFA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAotICAgICAgICAgICAgICAgICAgICAgICBQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxMDAwMDAwMCkKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgxMDAwMDAwMCkKICNkZWZpbmUgRElEbWliX2NhdF9kb3QxMXBoeSBcCiAJCQlQODAyMTFESURfTUtTRUNUSU9OKDMpCiAjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeU9wZXJhdGlvblRhYmxlIFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoMSkpCiAjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMUN1cnJlbnRUeFBvd2VyTGV2ZWwgXAotICAgICAgICAgICAgICAgICAgICAgICAoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgUDgwMjExRElEX01LR1JPVVAoMykgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgIFA4MDIxMURJRF9NS0lURU0oMTApIHwgMHgxODAwMDAwMCkKKwkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAorCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCisJCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MTgwMDAwMDApCiAjZGVmaW5lIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZSBcCiAJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKIAkJCVA4MDIxMURJRF9NS0dST1VQKDUpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWdtdC5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWdtdC5oCmluZGV4IDE0Y2RjODYuLmRlYjUyZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1nbXQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZ210LmgKQEAgLTEwMCw3ICsxMDAsNyBAQAogI2lmbmRlZiBfUDgwMjExTUdNVF9ICiAjZGVmaW5lIF9QODAyMTFNR01UX0gKIAotI2lmbmRlZiAgX1A4MDIxMUhEUl9ICisjaWZuZGVmIF9QODAyMTFIRFJfSAogI2luY2x1ZGUgInA4MDIxMWhkci5oIgogI2VuZGlmCiAKQEAgLTQ5NiwyNSArNDk2LDI1IEBACiAKIH0gd2xhbl9mcl9kZWF1dGhlbl90OwogCi12b2lkIHdsYW5fbWdtdF9lbmNvZGVfYmVhY29uKHdsYW5fZnJfYmVhY29uX3QgKiBmKTsKLXZvaWQgd2xhbl9tZ210X2RlY29kZV9iZWFjb24od2xhbl9mcl9iZWFjb25fdCAqIGYpOwotdm9pZCB3bGFuX21nbXRfZW5jb2RlX2Rpc2Fzc29jKHdsYW5fZnJfZGlzYXNzb2NfdCAqIGYpOwotdm9pZCB3bGFuX21nbXRfZGVjb2RlX2Rpc2Fzc29jKHdsYW5fZnJfZGlzYXNzb2NfdCAqIGYpOwotdm9pZCB3bGFuX21nbXRfZW5jb2RlX2Fzc29jcmVxKHdsYW5fZnJfYXNzb2NyZXFfdCAqIGYpOwotdm9pZCB3bGFuX21nbXRfZGVjb2RlX2Fzc29jcmVxKHdsYW5fZnJfYXNzb2NyZXFfdCAqIGYpOwotdm9pZCB3bGFuX21nbXRfZW5jb2RlX2Fzc29jcmVzcCh3bGFuX2ZyX2Fzc29jcmVzcF90ICogZik7Ci12b2lkIHdsYW5fbWdtdF9kZWNvZGVfYXNzb2NyZXNwKHdsYW5fZnJfYXNzb2NyZXNwX3QgKiBmKTsKLXZvaWQgd2xhbl9tZ210X2VuY29kZV9yZWFzc29jcmVxKHdsYW5fZnJfcmVhc3NvY3JlcV90ICogZik7Ci12b2lkIHdsYW5fbWdtdF9kZWNvZGVfcmVhc3NvY3JlcSh3bGFuX2ZyX3JlYXNzb2NyZXFfdCAqIGYpOwotdm9pZCB3bGFuX21nbXRfZW5jb2RlX3JlYXNzb2NyZXNwKHdsYW5fZnJfcmVhc3NvY3Jlc3BfdCAqIGYpOwotdm9pZCB3bGFuX21nbXRfZGVjb2RlX3JlYXNzb2NyZXNwKHdsYW5fZnJfcmVhc3NvY3Jlc3BfdCAqIGYpOwotdm9pZCB3bGFuX21nbXRfZW5jb2RlX3Byb2JlcmVxKHdsYW5fZnJfcHJvYmVyZXFfdCAqIGYpOwotdm9pZCB3bGFuX21nbXRfZGVjb2RlX3Byb2JlcmVxKHdsYW5fZnJfcHJvYmVyZXFfdCAqIGYpOwotdm9pZCB3bGFuX21nbXRfZW5jb2RlX3Byb2JlcmVzcCh3bGFuX2ZyX3Byb2JlcmVzcF90ICogZik7Ci12b2lkIHdsYW5fbWdtdF9kZWNvZGVfcHJvYmVyZXNwKHdsYW5fZnJfcHJvYmVyZXNwX3QgKiBmKTsKLXZvaWQgd2xhbl9tZ210X2VuY29kZV9hdXRoZW4od2xhbl9mcl9hdXRoZW5fdCAqIGYpOwotdm9pZCB3bGFuX21nbXRfZGVjb2RlX2F1dGhlbih3bGFuX2ZyX2F1dGhlbl90ICogZik7Ci12b2lkIHdsYW5fbWdtdF9lbmNvZGVfZGVhdXRoZW4od2xhbl9mcl9kZWF1dGhlbl90ICogZik7Ci12b2lkIHdsYW5fbWdtdF9kZWNvZGVfZGVhdXRoZW4od2xhbl9mcl9kZWF1dGhlbl90ICogZik7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfYmVhY29uKHdsYW5fZnJfYmVhY29uX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2JlYWNvbih3bGFuX2ZyX2JlYWNvbl90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9kaXNhc3NvYyh3bGFuX2ZyX2Rpc2Fzc29jX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2Rpc2Fzc29jKHdsYW5fZnJfZGlzYXNzb2NfdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfYXNzb2NyZXEod2xhbl9mcl9hc3NvY3JlcV90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9hc3NvY3JlcSh3bGFuX2ZyX2Fzc29jcmVxX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZW5jb2RlX2Fzc29jcmVzcCh3bGFuX2ZyX2Fzc29jcmVzcF90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9hc3NvY3Jlc3Aod2xhbl9mcl9hc3NvY3Jlc3BfdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfcmVhc3NvY3JlcSh3bGFuX2ZyX3JlYXNzb2NyZXFfdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9kZWNvZGVfcmVhc3NvY3JlcSh3bGFuX2ZyX3JlYXNzb2NyZXFfdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfcmVhc3NvY3Jlc3Aod2xhbl9mcl9yZWFzc29jcmVzcF90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9yZWFzc29jcmVzcCh3bGFuX2ZyX3JlYXNzb2NyZXNwX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZW5jb2RlX3Byb2JlcmVxKHdsYW5fZnJfcHJvYmVyZXFfdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9kZWNvZGVfcHJvYmVyZXEod2xhbl9mcl9wcm9iZXJlcV90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9wcm9iZXJlc3Aod2xhbl9mcl9wcm9iZXJlc3BfdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9kZWNvZGVfcHJvYmVyZXNwKHdsYW5fZnJfcHJvYmVyZXNwX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZW5jb2RlX2F1dGhlbih3bGFuX2ZyX2F1dGhlbl90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9hdXRoZW4od2xhbl9mcl9hdXRoZW5fdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfZGVhdXRoZW4od2xhbl9mcl9kZWF1dGhlbl90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9kZWF1dGhlbih3bGFuX2ZyX2RlYXV0aGVuX3QgKmYpOwogCiAjZW5kaWYgLyogX1A4MDIxMU1HTVRfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuYwppbmRleCAyMjQyNGM4Li43NjNhYjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuYwpAQCAtNTg2LDcgKzU4Niw4IEBACiAJfQogCiAJLyogQWxsb2NhdGUgYSBidWYgb2Ygc2l6ZSByZXEtPmxlbiAqLwotCWlmICgobXNnYnVmID0ga21hbGxvYyhyZXEtPmxlbiwgR0ZQX0tFUk5FTCkpKSB7CisJbXNnYnVmID0ga21hbGxvYyhyZXEtPmxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKG1zZ2J1ZikgewogCQlpZiAoY29weV9mcm9tX3VzZXIobXNnYnVmLCAodm9pZCBfX3VzZXIgKilyZXEtPmRhdGEsIHJlcS0+bGVuKSkKIAkJCXJlc3VsdCA9IC1FRkFVTFQ7CiAJCWVsc2UKQEAgLTY0Niw3ICs2NDcsNyBAQAogCiAJLyogU2V0IHVwIHNvbWUgY29udmVuaWVuY2UgcG9pbnRlcnMuICovCiAJbWliYXR0ciA9ICZkb3QxMXJlcS5taWJhdHRyaWJ1dGU7Ci0JbWFjYWRkciA9IChwODAyMTFpdGVtX3BzdHI2X3QgKikgJiBtaWJhdHRyLT5kYXRhOworCW1hY2FkZHIgPSAocDgwMjExaXRlbV9wc3RyNl90ICopICZtaWJhdHRyLT5kYXRhOwogCXJlc3VsdGNvZGUgPSAmZG90MTFyZXEucmVzdWx0Y29kZTsKIAogCS8qIFNldCB1cCBhIGRvdDExcmVxX21pYnNldCAqLwpAQCAtNjc0LDcgKzY3NSw3IEBACiAJcmVzdWx0Y29kZS0+ZGF0YSA9IDA7CiAKIAkvKiBub3cgZmlyZSB0aGUgcmVxdWVzdCAqLwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3QoZGV2LT5tbF9wcml2LCAodTggKikgJiBkb3QxMXJlcSk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdChkZXYtPm1sX3ByaXYsICh1OCAqKSAmZG90MTFyZXEpOwogCiAJLyogSWYgdGhlIHJlcXVlc3Qgd2Fzbid0IHN1Y2Nlc3NmdWwsIHJlcG9ydCBhbiBlcnJvciBhbmQgZG9uJ3QKIAkgKiBjaGFuZ2UgdGhlIG5ldGRldiBhZGRyZXNzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5oCmluZGV4IDhiZDlkZmIuLjNjOGM2NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5oCkBAIC0xNzksMTYgKzE3OSwxNiBAQAogCXVuc2lnbmVkIGludCBldGhjb252OwogCiAJLyogZGV2aWNlIG1ldGhvZHMgKGluaXQgYnkgTVNELCB1c2VkIGJ5IHA4MDIxMSAqLwotCWludCAoKm9wZW4pIChzdHJ1Y3Qgd2xhbmRldmljZSAqIHdsYW5kZXYpOwotCWludCAoKmNsb3NlKSAoc3RydWN0IHdsYW5kZXZpY2UgKiB3bGFuZGV2KTsKLQl2b2lkICgqcmVzZXQpIChzdHJ1Y3Qgd2xhbmRldmljZSAqIHdsYW5kZXYpOwotCWludCAoKnR4ZnJhbWUpIChzdHJ1Y3Qgd2xhbmRldmljZSAqIHdsYW5kZXYsIHN0cnVjdCBza19idWZmICogc2tiLAotCQkJcDgwMjExX2hkcl90ICogcDgwMjExX2hkciwKLQkJCXA4MDIxMV9tZXRhd2VwX3QgKiBwODAyMTFfd2VwKTsKLQlpbnQgKCptbG1lcmVxdWVzdCkgKHN0cnVjdCB3bGFuZGV2aWNlICogd2xhbmRldiwgcDgwMjExbXNnX3QgKiBtc2cpOwotCWludCAoKnNldF9tdWx0aWNhc3RfbGlzdCkgKHN0cnVjdCB3bGFuZGV2aWNlICogd2xhbmRldiwKLQkJCQkgICBuZXRkZXZpY2VfdCAqIGRldik7Ci0Jdm9pZCAoKnR4X3RpbWVvdXQpIChzdHJ1Y3Qgd2xhbmRldmljZSAqIHdsYW5kZXYpOworCWludCAoKm9wZW4pIChzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldik7CisJaW50ICgqY2xvc2UpIChzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldik7CisJdm9pZCAoKnJlc2V0KSAoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYpOworCWludCAoKnR4ZnJhbWUpIChzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCXA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwKKwkJCXA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApOworCWludCAoKm1sbWVyZXF1ZXN0KSAoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHA4MDIxMW1zZ190ICptc2cpOworCWludCAoKnNldF9tdWx0aWNhc3RfbGlzdCkgKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LAorCQkJCSAgIG5ldGRldmljZV90ICpkZXYpOworCXZvaWQgKCp0eF90aW1lb3V0KSAoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYpOwogCiAJLyogODAyLjExIFN0YXRlICovCiAJdTggYnNzaWRbV0xBTl9CU1NJRF9MRU5dOwpAQCAtMjI3LDE2ICsyMjcsMTYgQEAKIH0gd2xhbmRldmljZV90OwogCiAvKiBXRVAgc3R1ZmYgKi8KLWludCB3ZXBfY2hhbmdlX2tleSh3bGFuZGV2aWNlX3QgKiB3bGFuZGV2LCBpbnQga2V5bnVtLCB1OCAqIGtleSwgaW50IGtleWxlbik7Ci1pbnQgd2VwX2RlY3J5cHQod2xhbmRldmljZV90ICogd2xhbmRldiwgdTggKiBidWYsIHUzMiBsZW4sIGludCBrZXlfb3ZlcnJpZGUsCi0JCXU4ICogaXYsIHU4ICogaWN2KTsKLWludCB3ZXBfZW5jcnlwdCh3bGFuZGV2aWNlX3QgKiB3bGFuZGV2LCB1OCAqIGJ1ZiwgdTggKiBkc3QsIHUzMiBsZW4sIGludCBrZXludW0sCi0JCXU4ICogaXYsIHU4ICogaWN2KTsKK2ludCB3ZXBfY2hhbmdlX2tleSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGludCBrZXludW0sIHU4ICprZXksIGludCBrZXlsZW4pOworaW50IHdlcF9kZWNyeXB0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTggKmJ1ZiwgdTMyIGxlbiwgaW50IGtleV9vdmVycmlkZSwKKwkJdTggKml2LCB1OCAqaWN2KTsKK2ludCB3ZXBfZW5jcnlwdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHU4ICpidWYsIHU4ICpkc3QsIHUzMiBsZW4sIGludCBrZXludW0sCisJCXU4ICppdiwgdTggKmljdik7CiAKLWludCB3bGFuX3NldHVwKHdsYW5kZXZpY2VfdCAqIHdsYW5kZXYpOwotaW50IHdsYW5fdW5zZXR1cCh3bGFuZGV2aWNlX3QgKiB3bGFuZGV2KTsKLWludCByZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXZpY2VfdCAqIHdsYW5kZXYpOwotaW50IHVucmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2aWNlX3QgKiB3bGFuZGV2KTsKLXZvaWQgcDgwMjExbmV0ZGV2X3J4KHdsYW5kZXZpY2VfdCAqIHdsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpOwotdm9pZCBwODAyMTFuZXRkZXZfaHdyZW1vdmVkKHdsYW5kZXZpY2VfdCAqIHdsYW5kZXYpOworaW50IHdsYW5fc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KTsKK2ludCB3bGFuX3Vuc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KTsKK2ludCByZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitpbnQgdW5yZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Cit2b2lkIHA4MDIxMW5ldGRldl9yeCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBwODAyMTFuZXRkZXZfaHdyZW1vdmVkKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXJlcS5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmMKaW5kZXggYzg4MTU2Yy4uYzJlOTVmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmMKQEAgLTk0LDcgKzk0LDcgQEAKICoJUG90ZW50aWFsbHkgYmxvY2tzIHRoZSBjYWxsZXIsIHNvIGl0J3MgYSBnb29kIGlkZWEgdG8KICoJbm90IGNhbGwgdGhpcyBmdW5jdGlvbiBmcm9tIGFuIGludGVycnVwdCBjb250ZXh0LgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1pbnQgcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2aWNlX3QgKiB3bGFuZGV2LCB1OCAqIG1zZ2J1ZikKK2ludCBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTggKm1zZ2J1ZikKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIAlwODAyMTFtc2dfdCAqbXNnID0gKHA4MDIxMW1zZ190ICopIG1zZ2J1ZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXJlcS5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmgKaW5kZXggNWQ5MTc2Ny4uYTk1YTQ1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmgKQEAgLTQ4LDYgKzQ4LDYgQEAKICNpZm5kZWYgX0xJTlVYX1A4MDIxMVJFUV9ICiAjZGVmaW5lIF9MSU5VWF9QODAyMTFSRVFfSAogCi1pbnQgcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2aWNlX3QgKiB3bGFuZGV2LCB1OCAqIG1zZ2J1Zik7CitpbnQgcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHU4ICptc2didWYpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXR5cGVzLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF0eXBlcy5oCmluZGV4IDJiODNhYjAuLjQxYTk5YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXR5cGVzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExdHlwZXMuaApAQCAtMTY4LDEyICsxNjgsMTIgQEAKIAkJCQkJUDgwMjExRElEX01BU0tfSVNUQUJMRSwgXAogCQkJCQlQODAyMTFESURfTFNCX0lTVEFCTEUpCiAKLSNkZWZpbmUgUDgwMjExRElEX01LSUQocyxnLGksbix0LGEpCShQODAyMTFESURfTUtTRUNUSU9OKHMpIHwgXAotCQkJCQkJUDgwMjExRElEX01LR1JPVVAoZykgfCBcCi0JCQkJIAkJUDgwMjExRElEX01LSVRFTShpKSB8IFwKLQkJCQkgCQlQODAyMTFESURfTUtJTkRFWChuKSB8IFwKLQkJCQkJCVA4MDIxMURJRF9NS0lTVEFCTEUodCkgfCBcCi0JCQkJCQkoYSkpCisjZGVmaW5lIFA4MDIxMURJRF9NS0lEKHMsIGcsIGksIG4sIHQsIGEpCShQODAyMTFESURfTUtTRUNUSU9OKHMpIHwgXAorCQkJCQlQODAyMTFESURfTUtHUk9VUChnKSB8IFwKKwkJCQkJUDgwMjExRElEX01LSVRFTShpKSB8IFwKKwkJCQkJUDgwMjExRElEX01LSU5ERVgobikgfCBcCisJCQkJCVA4MDIxMURJRF9NS0lTVEFCTEUodCkgfCBcCisJCQkJCShhKSkKIAogI2RlZmluZSBQODAyMTFESURfR0VUKGEsIG0sIGwpCSgoKCh1MzIpKGEpKSA+PiAobCkpICYgKG0pKQogCkBAIC0zNDAsMTEgKzM0MCwxMSBAQAogLyogIG1ldGFkYXRhIGl0ZW1zLiAgU29tZSBjb21wb25lbnRzIG1heSBjaG9vc2UgdG8gdXNlIG1vcmUsICovCiAvKiAgbGVzcyBvciBkaWZmZXJlbnQgbWV0YWRhdGEgaXRlbXMuICovCiAKLXR5cGVkZWYgdm9pZCAoKnA4MDIxMV90b3RleHRfdCkgKHN0cnVjdCBjYXRsaXN0aXRlbSAqLCB1MzIgZGlkLCB1OCAqIGl0ZW1idWYsCit0eXBlZGVmIHZvaWQgKCpwODAyMTFfdG90ZXh0X3QpIChzdHJ1Y3QgY2F0bGlzdGl0ZW0gKiwgdTMyIGRpZCwgdTggKml0ZW1idWYsCiAJCQkJIGNoYXIgKnRleHRidWYpOwotdHlwZWRlZiB2b2lkICgqcDgwMjExX2Zyb210ZXh0X3QpIChzdHJ1Y3QgY2F0bGlzdGl0ZW0gKiwgdTMyIGRpZCwgdTggKiBpdGVtYnVmLAordHlwZWRlZiB2b2lkICgqcDgwMjExX2Zyb210ZXh0X3QpIChzdHJ1Y3QgY2F0bGlzdGl0ZW0gKiwgdTMyIGRpZCwgdTggKml0ZW1idWYsCiAJCQkJICAgY2hhciAqdGV4dGJ1Zik7Ci10eXBlZGVmIHUzMigqcDgwMjExX3ZhbGlkX3QpIChzdHJ1Y3QgY2F0bGlzdGl0ZW0gKiwgdTMyIGRpZCwgdTggKiBpdGVtYnVmKTsKK3R5cGVkZWYgdTMyKCpwODAyMTFfdmFsaWRfdCkgKHN0cnVjdCBjYXRsaXN0aXRlbSAqLCB1MzIgZGlkLCB1OCAqaXRlbWJ1Zik7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBFbnVtZXJhdGlvbiBMaXN0cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExd2V4dC5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExd2V4dC5jCmluZGV4IDc0ZDgwMjIuLjJmYTFkZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXdleHQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF3ZXh0LmMKQEAgLTQ2LDggKzQ2LDggQEAKICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+Ci0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgpAQCAtMTM0LDEwICsxMzQsMTEgQEAKIAlpbnQgcmVzdWx0OwogCiAJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OworCW1lbXNldCgmbWliaXRlbSwgMCwgc2l6ZW9mKG1pYml0ZW0pKTsKIAltaWJpdGVtLmRpZCA9IGRpZDsKIAltaWJpdGVtLmRhdGEgPSBkYXRhOwogCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmIG1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZyk7CiAKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtMTc0LDcgKzE3NSw3IEBACiAJbWVtY3B5KG1zZy5zc2lkLmRhdGEuZGF0YSwgc3NpZCwgZGF0YS5sZW5ndGgpOwogCW1zZy5zc2lkLmRhdGEubGVuID0gZGF0YS5sZW5ndGg7CiAKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmIG1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZyk7CiAKIAlpZiAocmVzdWx0KSB7CiAJCWVyciA9IC1FRkFVTFQ7CkBAIC0yMTEsNyArMjEyLDcgQEAKIAlpZiAod2xhbmRldi0+bWxtZXJlcXVlc3QgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXR2YWwgPSB3bGFuZGV2LT5tbG1lcmVxdWVzdCh3bGFuZGV2LCAocDgwMjExbXNnX3QgKikgJiBxdWFsaXR5KTsKKwlyZXR2YWwgPSB3bGFuZGV2LT5tbG1lcmVxdWVzdCh3bGFuZGV2LCAocDgwMjExbXNnX3QgKikgJnF1YWxpdHkpOwogCiAJd3N0YXRzLT5xdWFsLnF1YWwgPSBxdWFsX2FzX3BlcmNlbnQocXVhbGl0eS5saW5rLmRhdGEpOwkvKiBvdmVyYWxsIGxpbmsgcXVhbGl0eSAqLwogCXdzdGF0cy0+cXVhbC5sZXZlbCA9IHF1YWxpdHkubGV2ZWwuZGF0YTsJLyogaW5zdGFudCBzaWduYWwgbGV2ZWwgKi8KQEAgLTI2OSw5ICsyNzAsMTAgQEAKIAlpbnQgZXJyID0gMDsKIAogCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYmdldDsKKwltZW1zZXQoJm1pYml0ZW0sIDAsIHNpemVvZihtaWJpdGVtKSk7CiAJbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFDdXJyZW50Q2hhbm5lbDsKIAltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJiBtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICZtc2cpOwogCiAJaWYgKHJlc3VsdCkgewogCQllcnIgPSAtRUZBVUxUOwpAQCAtMzA5LDYgKzMxMSw3IEBACiAJfQogCiAJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OworCW1lbXNldCgmbWliaXRlbSwgMCwgc2l6ZW9mKG1pYml0ZW0pKTsKIAltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUN1cnJlbnRDaGFubmVsOwogCW1pYml0ZW0uc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwogCkBAIC0zMTgsNyArMzIxLDcgQEAKIAkJbWliaXRlbS5kYXRhID0gcDgwMjExX21oel90b19jaGFubmVsKGZyZXEtPm0pOwogCiAJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICYgbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKIAogCWlmIChyZXN1bHQpIHsKIAkJZXJyID0gLUVGQVVMVDsKQEAgLTM5NiwxMCArMzk5LDExIEBACiAKIAkvKiBTZXQgT3BlcmF0aW9uIG1vZGUgdG8gdGhlIFBPUlQgVFlQRSBSSUQgKi8KIAltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXQ7CisJbWVtc2V0KCZtaWJpdGVtLCAwLCBzaXplb2YobWliaXRlbSkpOwogCW1pYml0ZW0uZGlkID0gRElEbWliX3AyX3AyU3RhdGljX3AyQ25mUG9ydFR5cGU7CiAJbWliaXRlbS5kYXRhID0gKCptb2RlID09IElXX01PREVfQURIT0MpID8gMCA6IDE7CiAJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICYgbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKIAogCWlmIChyZXN1bHQpCiAJCWVyciA9IC1FRkFVTFQ7CkBAIC01NDksMTQgKzU1MywxNCBAQAogCX0KIAogCS8qIENoZWNrIHRoZSBLZXkgaW5kZXggZmlyc3QuICovCi0JaWYgKChpID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpKSkgewotCisJaSA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKTsKKwlpZiAoaSkgewogCQlpZiAoKGkgPCAxKSB8fCAoaSA+IE5VTV9XRVBLRVlTKSkgewogCQkJZXJyID0gLUVJTlZBTDsKIAkJCWdvdG8gZXhpdDsKLQkJfSBlbHNlCisJCX0gZWxzZSB7CiAJCQlpLS07Ci0KKwkJfQogCQkvKiBTZXQgY3VycmVudCBrZXkgbnVtYmVyIG9ubHkgaWYgbm8ga2V5cyBhcmUgZ2l2ZW4gKi8KIAkJaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfTk9LRVkpIHsKIAkJCXJlc3VsdCA9CkBAIC02MjEsNyArNjI1LDcgQEAKIAogCQkJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OwogCQkJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZwc3RyLCBzaXplb2YocHN0cikpOwotCQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJiBtc2cpOworCQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZyk7CiAKIAkJCWlmIChyZXN1bHQpIHsKIAkJCQllcnIgPSAtRUZBVUxUOwpAQCAtNzI5LDcgKzczMyw3IEBACiAJbXNnLnNzaWQuZGF0YS5sZW4gPSBsZW5ndGg7CiAKIAlwcl9kZWJ1ZygiYXV0b2pvaW5fc3NpZCBmb3IgJXMgXG4iLCBlc3NpZCk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJiBtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICZtc2cpOwogCXByX2RlYnVnKCJhdXRvam9pbl9zc2lkICVkXG4iLCByZXN1bHQpOwogCiAJaWYgKHJlc3VsdCkgewpAQCAtNzcxLDkgKzc3NSwxMCBAQAogCWludCBlcnIgPSAwOwogCiAJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWliZ2V0OworCW1lbXNldCgmbWliaXRlbSwgMCwgc2l6ZW9mKG1pYml0ZW0pKTsKIAltaWJpdGVtLmRpZCA9IERJRG1pYl9wMl9wMk1BQ19wMkN1cnJlbnRUeFJhdGU7CiAJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICYgbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKIAogCWlmIChyZXN1bHQpIHsKIAkJZXJyID0gLUVGQVVMVDsKQEAgLTgyMiw5ICs4MjcsMTAgQEAKIAlpbnQgZXJyID0gMDsKIAogCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYmdldDsKKwltZW1zZXQoJm1pYml0ZW0sIDAsIHNpemVvZihtaWJpdGVtKSk7CiAJbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMVJUU1RocmVzaG9sZDsKIAltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJiBtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICZtc2cpOwogCiAJaWYgKHJlc3VsdCkgewogCQllcnIgPSAtRUZBVUxUOwpAQCAtODU3LDYgKzg2Myw3IEBACiAJfQogCiAJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWliZ2V0OworCW1lbXNldCgmbWliaXRlbSwgMCwgc2l6ZW9mKG1pYml0ZW0pKTsKIAltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExUlRTVGhyZXNob2xkOwogCWlmIChydHMtPmRpc2FibGVkKQogCQltaWJpdGVtLmRhdGEgPSAyMzQ3OwpAQCAtODY0LDcgKzg3MSw3IEBACiAJCW1pYml0ZW0uZGF0YSA9IHJ0cy0+dmFsdWU7CiAKIAltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJiBtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICZtc2cpOwogCiAJaWYgKHJlc3VsdCkgewogCQllcnIgPSAtRUZBVUxUOwpAQCAtODg2LDEwICs4OTMsMTEgQEAKIAlpbnQgZXJyID0gMDsKIAogCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYmdldDsKKwltZW1zZXQoJm1pYml0ZW0sIDAsIHNpemVvZihtaWJpdGVtKSk7CiAJbWliaXRlbS5kaWQgPQogCSAgICBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUZyYWdtZW50YXRpb25UaHJlc2hvbGQ7CiAJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICYgbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKIAogCWlmIChyZXN1bHQpIHsKIAkJZXJyID0gLUVGQVVMVDsKQEAgLTkyMiw2ICs5MzAsNyBAQAogCX0KIAogCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKKwltZW1zZXQoJm1pYml0ZW0sIDAsIHNpemVvZihtaWJpdGVtKSk7CiAJbWliaXRlbS5kaWQgPQogCSAgICBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUZyYWdtZW50YXRpb25UaHJlc2hvbGQ7CiAKQEAgLTkzMSw3ICs5NDAsNyBAQAogCQltaWJpdGVtLmRhdGEgPSBmcmFnLT52YWx1ZTsKIAogCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmIG1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZyk7CiAKIAlpZiAocmVzdWx0KSB7CiAJCWVyciA9IC1FRkFVTFQ7CkBAIC05NjIsMTAgKzk3MSwxMSBAQAogCXUxNiBzaG9ydHJldHJ5LCBsb25ncmV0cnksIGxpZmV0aW1lOwogCiAJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWliZ2V0OworCW1lbXNldCgmbWliaXRlbSwgMCwgc2l6ZW9mKG1pYml0ZW0pKTsKIAltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExU2hvcnRSZXRyeUxpbWl0OwogCiAJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICYgbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKIAogCWlmIChyZXN1bHQpIHsKIAkJZXJyID0gLUVGQVVMVDsKQEAgLTk3OSw3ICs5ODksNyBAQAogCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFMb25nUmV0cnlMaW1pdDsKIAogCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmIG1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZyk7CiAKIAlpZiAocmVzdWx0KSB7CiAJCWVyciA9IC1FRkFVTFQ7CkBAIC05OTQsNyArMTAwNCw3IEBACiAJICAgIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTWF4VHJhbnNtaXRNU0RVTGlmZXRpbWU7CiAKIAltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJiBtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICZtc2cpOwogCiAJaWYgKHJlc3VsdCkgewogCQllcnIgPSAtRUZBVUxUOwpAQCAtMTAzNyw2ICsxMDQ3LDggQEAKIAlpbnQgcmVzdWx0OwogCWludCBlcnIgPSAwOwogCisJbWVtc2V0KCZtaWJpdGVtLCAwLCBzaXplb2YobWliaXRlbSkpOworCiAJaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKIAkJZXJyID0gKC1FT1BOT1RTVVBQKTsKIAkJZ290byBleGl0OwpAQCAtMTA1NSw3ICsxMDY3LDcgQEAKIAkJbWliaXRlbS5kYXRhID0gcnJxLT52YWx1ZSAvPSAxMDI0OwogCiAJCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJiBtc2cpOworCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKIAogCQlpZiAocmVzdWx0KSB7CiAJCQllcnIgPSAtRUZBVUxUOwpAQCAtMTA2OSw3ICsxMDgxLDcgQEAKIAogCQkJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLAogCQkJICAgICAgIHNpemVvZihtaWJpdGVtKSk7Ci0JCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmIG1zZyk7CisJCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKIAogCQkJaWYgKHJlc3VsdCkgewogCQkJCWVyciA9IC1FRkFVTFQ7CkBAIC0xMDg0LDcgKzEwOTYsNyBAQAogCiAJCQltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sCiAJCQkgICAgICAgc2l6ZW9mKG1pYml0ZW0pKTsKLQkJCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICYgbXNnKTsKKwkJCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICZtc2cpOwogCiAJCQlpZiAocmVzdWx0KSB7CiAJCQkJZXJyID0gLUVGQVVMVDsKQEAgLTExMTQsNiArMTEyNiw3IEBACiAJfQogCiAJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OworCW1lbXNldCgmbWliaXRlbSwgMCwgc2l6ZW9mKG1pYml0ZW0pKTsKIAltaWJpdGVtLmRpZCA9CiAJICAgIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMUN1cnJlbnRUeFBvd2VyTGV2ZWw7CiAJaWYgKHJycS0+Zml4ZWQgPT0gMCkKQEAgLTExMjEsNyArMTEzNCw3IEBACiAJZWxzZQogCQltaWJpdGVtLmRhdGEgPSBycnEtPnZhbHVlOwogCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmIG1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZyk7CiAKIAlpZiAocmVzdWx0KSB7CiAJCWVyciA9IC1FRkFVTFQ7CkBAIC0xMTQzLDExICsxMTU2LDEzIEBACiAJaW50IGVyciA9IDA7CiAKIAltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQ7CisKKwltZW1zZXQoJm1pYml0ZW0sIDAsIHNpemVvZihtaWJpdGVtKSk7CiAJbWliaXRlbS5kaWQgPQogCSAgICBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFDdXJyZW50VHhQb3dlckxldmVsOwogCiAJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICYgbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKIAogCWlmIChyZXN1bHQpIHsKIAkJZXJyID0gLUVGQVVMVDsKQEAgLTEyOTUsNyArMTMxMCw3IEBACiAJbXNnLm1heGNoYW5uZWx0aW1lLmRhdGEgPSAyNTA7CiAJbXNnLm1pbmNoYW5uZWx0aW1lLmRhdGEgPSAyMDA7CiAKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmIG1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZyk7CiAJaWYgKHJlc3VsdCkKIAkJZXJyID0gcHJpc20yX3Jlc3VsdDJlcnIobXNnLnJlc3VsdGNvZGUuZGF0YSk7CiAKQEAgLTE0MTQsNyArMTQyOSw3IEBACiAJCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0czsKIAkJbXNnLmJzc2luZGV4LmRhdGEgPSBpOwogCi0JCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICYgbXNnKTsKKwkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZyk7CiAJCWlmICgocmVzdWx0ICE9IDApIHx8CiAJCSAgICAobXNnLnJlc3VsdGNvZGUuZGF0YSAhPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzcykpIHsKIAkJCWJyZWFrOwpAQCAtMTQ4OSw3ICsxNTA0LDcgQEAKIAkJbWVtY3B5KHdsYW5kZXYtPndlcF9rZXlzW2lkeF0sIGV4dC0+a2V5LCBleHQtPmtleV9sZW4pOwogCiAJCW1lbXNldCgmbXNnLCAwLCBzaXplb2YobXNnKSk7Ci0JCXBzdHIgPSAocDgwMjExaXRlbV9wc3RyMzJfdCAqKSAmIG1zZy5taWJhdHRyaWJ1dGUuZGF0YTsKKwkJcHN0ciA9IChwODAyMTFpdGVtX3BzdHIzMl90ICopICZtc2cubWliYXR0cmlidXRlLmRhdGE7CiAJCW1lbWNweShwc3RyLT5kYXRhLmRhdGEsIGV4dC0+a2V5LCBleHQtPmtleV9sZW4pOwogCQlwc3RyLT5kYXRhLmxlbiA9IGV4dC0+a2V5X2xlbjsKIAkJc3dpdGNoIChpZHgpIHsKQEAgLTE1MTMsNyArMTUyOCw3IEBACiAJCQlicmVhazsKIAkJfQogCQltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXQ7Ci0JCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICYgbXNnKTsKKwkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZyk7CiAJCXByX2RlYnVnKCJyZXN1bHQgKCVkKVxuIiwgcmVzdWx0KTsKIAl9CiAJcmV0dXJuIHJlc3VsdDsKQEAgLTE3MjksMTUgKzE3NDQsMTEgQEAKIAogc3RydWN0IGl3X2hhbmRsZXJfZGVmIHA4MDIxMXdleHRfaGFuZGxlcl9kZWYgPSB7CiAJLm51bV9zdGFuZGFyZCA9IEFSUkFZX1NJWkUocDgwMjExd2V4dF9oYW5kbGVycyksCi0JLm51bV9wcml2YXRlID0gMCwKLQkubnVtX3ByaXZhdGVfYXJncyA9IDAsCiAJLnN0YW5kYXJkID0gcDgwMjExd2V4dF9oYW5kbGVycywKLQkucHJpdmF0ZSA9IE5VTEwsCi0JLnByaXZhdGVfYXJncyA9IE5VTEwsCiAJLmdldF93aXJlbGVzc19zdGF0cyA9IHA4MDIxMXdleHRfZ2V0X3dpcmVsZXNzX3N0YXRzCiB9OwogCi1pbnQgcDgwMjExd2V4dF9ldmVudF9hc3NvY2lhdGVkKHdsYW5kZXZpY2VfdCAqIHdsYW5kZXYsIGludCBhc3NvYykKK2ludCBwODAyMTF3ZXh0X2V2ZW50X2Fzc29jaWF0ZWQod2xhbmRldmljZV90ICp3bGFuZGV2LCBpbnQgYXNzb2MpCiB7CiAJdW5pb24gaXdyZXFfZGF0YSBkYXRhOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJmdy5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yZncuYwppbmRleCBhYWE3MGVkLi40YmU1NGNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJmdy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMmZ3LmMKQEAgLTUzLDYgKzUzLDcgQEAKIC8qIExvY2FsIENvbnN0YW50cyAqLwogCiAjZGVmaW5lIFBSSVNNMl9VU0JfRldGSUxFCSJwcmlzbTJfcnUuZnciCitNT0RVTEVfRklSTVdBUkUoUFJJU00yX1VTQl9GV0ZJTEUpOwogCiAjZGVmaW5lIFMzREFUQV9NQVgJCTUwMDAKICNkZWZpbmUgUzNQTFVHX01BWAkJMjAwCkBAIC0xMDgsOSArMTA5LDkgQEAKIH0gcGRhX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGltZ2NodW5rIHsKLQl1MzIgYWRkcjsJCS8qIHN0YXJ0IGFkZHJlc3MgKi8KLQl1MzIgbGVuOwkJLyogaW4gYnl0ZXMgKi8KLQl1MTYgY3JjOwkJLyogQ1JDIHZhbHVlIChpZiBpdCBmYWxscyBhdCBhIGNodW5rIGJvdW5kYXJ5KSAqLworCXUzMiBhZGRyOwkvKiBzdGFydCBhZGRyZXNzICovCisJdTMyIGxlbjsJLyogaW4gYnl0ZXMgKi8KKwl1MTYgY3JjOwkvKiBDUkMgdmFsdWUgKGlmIGl0IGZhbGxzIGF0IGEgY2h1bmsgYm91bmRhcnkpICovCiAJdTggKmRhdGE7CiB9IGltZ2NodW5rX3Q7CiAKQEAgLTIwNCw3ICsyMDUsNyBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJwcmlzbTJfdXNiOiAlcyB3aWxsIGJlIHByb2Nlc3NlZCwgc2l6ZSAlZFxuIiwKKwlwcmludGsoS0VSTl9JTkZPICJwcmlzbTJfdXNiOiAlcyB3aWxsIGJlIHByb2Nlc3NlZCwgc2l6ZSAlenVcbiIsCiAJICAgICAgIFBSSVNNMl9VU0JfRldGSUxFLCBmd19lbnRyeS0+c2l6ZSk7CiAJcHJpc20yX2Z3YXBwbHkoKGNvbnN0IHN0cnVjdCBpaGV4X2JpbnJlYyAqKWZ3X2VudHJ5LT5kYXRhLCB3bGFuZGV2KTsKIApAQCAtMjY0LDcgKzI2NSw3IEBACiAJLyogQnVpbGQgdGhlIFBEQSB3ZSdyZSBnb2luZyB0byB1c2UuICovCiAJaWYgKHJlYWRfY2FyZHBkYSgmcGRhLCB3bGFuZGV2KSkgewogCQlwcmludGsoS0VSTl9FUlIgImxvYWRfY2FyZHBkYSBmYWlsZWQsIGV4aXRpbmcuXG4iKTsKLQkJcmV0dXJuICgxKTsKKwkJcmV0dXJuIDE7CiAJfQogCiAJLyogcmVhZCB0aGUgY2FyZCdzIFBSSS1TVVAgKi8KQEAgLTI4Niw5ICsyODcsOCBAQAogCiAJLyogRElEbXNnX2RvdDExcmVxX21pYmdldCAqLwogCXByaXNtMm1nbXRfbWlic2V0X21pYmdldCh3bGFuZGV2LCAmZ2V0bXNnKTsKLQlpZiAoZ2V0bXNnLnJlc3VsdGNvZGUuZGF0YSAhPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzcykgeworCWlmIChnZXRtc2cucmVzdWx0Y29kZS5kYXRhICE9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzKQogCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkbid0IGZldGNoIFBSSS1TVVAgaW5mb1xuIik7Ci0JfQogCiAJLyogQWxyZWFkeSBpbiBob3N0IG9yZGVyICovCiAJcHJpaWQucm9sZSA9ICpkYXRhKys7CkBAIC0zMDEsMTkgKzMwMSwxOSBAQAogCXJlc3VsdCA9IHJlYWRfZndmaWxlKHJmcHRyKTsKIAlpZiAocmVzdWx0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlYWQgdGhlIGRhdGEgZXhpdGluZy5cbiIpOwotCQlyZXR1cm4gKDEpOworCQlyZXR1cm4gMTsKIAl9CiAKIAlyZXN1bHQgPSB2YWxpZGF0ZV9pZGVudGl0eSgpOwogCiAJaWYgKHJlc3VsdCkgewogCQlwcmludGsoS0VSTl9FUlIgIkluY29tcGF0aWJsZSBmaXJtd2FyZSBpbWFnZS5cbiIpOwotCQlyZXR1cm4gKDEpOworCQlyZXR1cm4gMTsKIAl9CiAKIAlpZiAoc3RhcnRhZGRyID09IDB4MDAwMDAwMDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBSQU0gZG93bmxvYWQgYSBGbGFzaCBpbWFnZSFcbiIpOwotCQlyZXR1cm4gKDEpOworCQlyZXR1cm4gMTsKIAl9CiAKIAkvKiBNYWtlIHRoZSBpbWFnZSBjaHVua3MgKi8KQEAgLTMyMywyMCArMzIzLDIwIEBACiAJcmVzdWx0ID0gcGx1Z2ltYWdlKGZjaHVuaywgbmZjaHVua3MsIHMzcGx1ZywgbnMzcGx1ZywgJnBkYSk7CiAJaWYgKHJlc3VsdCkgewogCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBwbHVnIGRhdGEuXG4iKTsKLQkJcmV0dXJuICgxKTsKKwkJcmV0dXJuIDE7CiAJfQogCiAJLyogSW5zZXJ0IGFueSBDUkNzICovCiAJaWYgKGNyY2ltYWdlKGZjaHVuaywgbmZjaHVua3MsIHMzY3JjLCBuczNjcmMpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGluc2VydCBhbGwgQ1JDc1xuIik7Ci0JCXJldHVybiAoMSk7CisJCXJldHVybiAxOwogCX0KIAogCS8qIFdyaXRlIHRoZSBpbWFnZSAqLwogCXJlc3VsdCA9IHdyaXRlaW1hZ2Uod2xhbmRldiwgZmNodW5rLCBuZmNodW5rcyk7CiAJaWYgKHJlc3VsdCkgewogCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByYW13cml0ZSBpbWFnZSBkYXRhLlxuIik7Ci0JCXJldHVybiAoMSk7CisJCXJldHVybiAxOwogCX0KIAogCS8qIGNsZWFyIGFueSBhbGxvY2F0ZWQgbWVtb3J5ICovCkBAIC00MzQsOSArNDM0LDggQEAKIHsKIAlpbnQgaTsKIAlmb3IgKGkgPSAwOyBpIDwgKm5mY2h1bmtzOyBpKyspIHsKLQkJaWYgKGZjaHVua1tpXS5kYXRhICE9IE5VTEwpIHsKKwkJaWYgKGZjaHVua1tpXS5kYXRhICE9IE5VTEwpCiAJCQlrZnJlZShmY2h1bmtbaV0uZGF0YSk7Ci0JCX0KIAl9CiAJKm5mY2h1bmtzID0gMDsKIAltZW1zZXQoZmNodW5rLCAwLCBzaXplb2YoKmZjaHVuaykpOwpAQCAtNTMxLDcgKzUzMCw3IEBACiAJCWlmIChjbGlzdFtpXS5kYXRhID09IE5VTEwpIHsKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJICAgICAgICJmYWlsZWQgdG8gYWxsb2NhdGUgaW1hZ2Ugc3BhY2UsIGV4aXR0aW5nLlxuIik7Ci0JCQlyZXR1cm4gKDEpOworCQkJcmV0dXJuIDE7CiAJCX0KIAkJbWVtc2V0KGNsaXN0W2ldLmRhdGEsIDAsIGNsaXN0W2ldLmxlbik7CiAJCXByX2RlYnVnKCJjaHVua1slZF06IGFkZHI9MHglMDZ4IGxlbj0lZFxuIiwKQEAgLTU0NSwxNSArNTQ0LDE0IEBACiAJCWZvciAoaiA9IDA7IGogPCAqY2NudDsgaisrKSB7CiAJCQljc3RhcnQgPSBjbGlzdFtqXS5hZGRyOwogCQkJY2VuZCA9IGNzdGFydCArIGNsaXN0W2pdLmxlbiAtIDE7Ci0JCQlpZiAoczNzdGFydCA+PSBjc3RhcnQgJiYgczNlbmQgPD0gY2VuZCkgeworCQkJaWYgKHMzc3RhcnQgPj0gY3N0YXJ0ICYmIHMzZW5kIDw9IGNlbmQpCiAJCQkJYnJlYWs7Ci0JCQl9CiAJCX0KIAkJaWYgKCgodW5zaWduZWQgaW50KWopID49ICgqY2NudCkpIHsKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJICAgICAgICJzM3JlYyhhPTB4JTA2eCxsPSVkKSwgbm8gY2h1bmsgbWF0Y2gsIGV4aXRpbmcuXG4iLAogCQkJICAgICAgIHMzc3RhcnQsIHMzZGF0YVtpXS5sZW4pOwotCQkJcmV0dXJuICgxKTsKKwkJCXJldHVybiAxOwogCQl9CiAJCWNvZmZzZXQgPSBzM3N0YXJ0IC0gY3N0YXJ0OwogCQltZW1jcHkoY2xpc3Rbal0uZGF0YSArIGNvZmZzZXQsIHMzZGF0YVtpXS5kYXRhLCBzM2RhdGFbaV0ubGVuKTsKQEAgLTU4Niw3ICs1ODQsNyBAQAogCWN1cnJvZmYgPSAwOwogCXdoaWxlIChjdXJyb2ZmIDwgKEhGQTM4NHhfUERBX0xFTl9NQVggLyAyKSAmJgogCSAgICAgICBsZTE2X3RvX2NwdShwZGExNltjdXJyb2ZmICsgMV0pICE9IEhGQTM4NHhfUERSX0VORF9PRl9QREEpIHsKLQkJcGRhLT5yZWNbcGRhLT5ucmVjXSA9IChoZmEzODR4X3BkcmVjX3QgKikgJiAocGRhMTZbY3Vycm9mZl0pOworCQlwZGEtPnJlY1twZGEtPm5yZWNdID0gKGhmYTM4NHhfcGRyZWNfdCAqKSAmKHBkYTE2W2N1cnJvZmZdKTsKIAogCQlpZiAobGUxNl90b19jcHUocGRhLT5yZWNbcGRhLT5ucmVjXS0+Y29kZSkgPT0gSEZBMzg0eF9QRFJfTklDSUQpIHsKIAkJCW1lbWNweSgmbmljaWQsICZwZGEtPnJlY1twZGEtPm5yZWNdLT5kYXRhLm5pY2lkLApAQCAtNjIzLDEwICs2MjEsMTAgQEAKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAibm8gZW5kIHJlY29yZCBmb3VuZCBvciBpbnZhbGlkIGxlbmd0aHMgaW4gIgogCQkgICAgICAgIlBEUiBkYXRhLCBleGl0aW5nLiAleCAlZFxuIiwgY3Vycm9mZiwgcGRhLT5ucmVjKTsKLQkJcmV0dXJuICgxKTsKKwkJcmV0dXJuIDE7CiAJfQogCWlmIChsZTE2X3RvX2NwdShwZGExNltjdXJyb2ZmICsgMV0pID09IEhGQTM4NHhfUERSX0VORF9PRl9QREEpIHsKLQkJcGRhLT5yZWNbcGRhLT5ucmVjXSA9IChoZmEzODR4X3BkcmVjX3QgKikgJiAocGRhMTZbY3Vycm9mZl0pOworCQlwZGEtPnJlY1twZGEtPm5yZWNdID0gKGhmYTM4NHhfcGRyZWNfdCAqKSAmKHBkYTE2W2N1cnJvZmZdKTsKIAkJKHBkYS0+bnJlYykrKzsKIAl9CiAJcmV0dXJuIHJlc3VsdDsKQEAgLTg2OSw3ICs4NjcsNyBAQAogCQlwdHIxNiA9ICh1MTYgKikgcmVjb3JkLT5kYXRhOwogCiAJCS8qIHBhcnNlIHdoYXQgd2FzIGFuIFMzIHNyZWMgYW5kIHB1dCBpdCBpbiB0aGUgcmlnaHQgYXJyYXkgKi8KLQkJc3dpdGNoKGFkZHIpIHsKKwkJc3dpdGNoIChhZGRyKSB7CiAJCWNhc2UgUzNBRERSX1NUQVJUOgogCQkJc3RhcnRhZGRyID0gKnB0cjMyOwogCQkJcHJfZGVidWcoIiAgUzcgc3RhcnQgYWRkciwgcmVjb3JkPSVkICIKQEAgLTg5MCw3ICs4ODgsNyBAQAogCQkJCSAgICAgIHMzcGx1Z1tuczNwbHVnXS5sZW4pOwogCiAJCQluczNwbHVnKys7Ci0JCQlpZiAoIG5zM3BsdWcgPT0gUzNQTFVHX01BWCApIHsKKwkJCWlmIChuczNwbHVnID09IFMzUExVR19NQVgpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgIlMzIHBsdWdyZWMgbGltaXQgcmVhY2hlZCAtIGFib3J0aW5nXG4iKTsKIAkJCQlyZXR1cm4gMTsKIAkJCX0KQEAgLTkwNyw3ICs5MDUsNyBAQAogCQkJCSAgICAgIHMzY3JjW25zM2NyY10ubGVuLAogCQkJCSAgICAgIHMzY3JjW25zM2NyY10uZG93cml0ZSk7CiAJCQluczNjcmMrKzsKLQkJCWlmICggbnMzY3JjID09IFMzQ1JDX01BWCApIHsKKwkJCWlmIChuczNjcmMgPT0gUzNDUkNfTUFYKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJTMyBjcmNyZWMgbGltaXQgcmVhY2hlZCAtIGFib3J0aW5nXG4iKTsKIAkJCQlyZXR1cm4gMTsKIAkJCX0KQEAgLTkyMSwxMiArOTE5LDEyIEBACiAJCQkJICAgICAgcmNudCwKIAkJCQkgICAgICBzM2luZm9bbnMzaW5mb10ubGVuLAogCQkJCSAgICAgIHMzaW5mb1tuczNpbmZvXS50eXBlKTsKLQkJCWlmICggKChzM2luZm9bbnMzaW5mb10ubGVuIC0gMSkgKiBzaXplb2YodTE2KSkgPiBzaXplb2YoczNpbmZvW25zM2luZm9dLmluZm8pICkgeworCQkJaWYgKCgoczNpbmZvW25zM2luZm9dLmxlbiAtIDEpICogc2l6ZW9mKHUxNikpID4gc2l6ZW9mKHMzaW5mb1tuczNpbmZvXS5pbmZvKSkgewogCQkJCXByaW50ayhLRVJOX0VSUiAiIFMzIGluZm9yZWMgbGVuZ3RoIHRvbyBsb25nIC0gYWJvcnRpbmdcbiIpOwogCQkJCXJldHVybiAxOwogCQkJfQogCi0JCQl0bXBpbmZvID0gKHUxNiopJihzM2luZm9bbnMzaW5mb10uaW5mby52ZXJzaW9uKTsKKwkJCXRtcGluZm8gPSAodTE2ICopJihzM2luZm9bbnMzaW5mb10uaW5mby52ZXJzaW9uKTsKIAkJCXByX2RlYnVnKCIgICAgICAgICAgICBpbmZvPSIpOwogCQkJZm9yIChpID0gMDsgaSA8IHMzaW5mb1tuczNpbmZvXS5sZW4gLSAxOyBpKyspIHsKIAkJCQl0bXBpbmZvW2ldID0gKihwdHIxNiArIDIgKyBpKTsKQEAgLTkzNSw3ICs5MzMsNyBAQAogCQkJcHJfZGVidWcoIlxuIik7CiAKIAkJCW5zM2luZm8rKzsKLQkJCWlmICggbnMzaW5mbyA9PSBTM0lORk9fTUFYICkgeworCQkJaWYgKG5zM2luZm8gPT0gUzNJTkZPX01BWCkgewogCQkJCXByaW50ayhLRVJOX0VSUiAiUzMgaW5mb3JlYyBsaW1pdCByZWFjaGVkIC0gYWJvcnRpbmdcbiIpOwogCQkJCXJldHVybiAxOwogCQkJfQpAQCAtOTQ1LDcgKzk0Myw3IEBACiAJCQlzM2RhdGFbbnMzZGF0YV0ubGVuID0gbGVuOwogCQkJczNkYXRhW25zM2RhdGFdLmRhdGEgPSAodWludDhfdCAqKSByZWNvcmQtPmRhdGE7CiAJCQluczNkYXRhKys7Ci0JCQlpZiAoIG5zM2RhdGEgPT0gUzNEQVRBX01BWCApIHsKKwkJCWlmIChuczNkYXRhID09IFMzREFUQV9NQVgpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgIlMzIGRhdGFyZWMgbGltaXQgcmVhY2hlZCAtIGFib3J0aW5nXG4iKTsKIAkJCQlyZXR1cm4gMTsKIAkJCX0KQEAgLTEwMjMsNyArMTAyMSw3IEBACiAJcnN0YXRlbXNnLmVuYWJsZS5kYXRhID0gUDgwMjExRU5VTV90cnV0aF90cnVlOwogCXJzdGF0ZW1zZy5leGVhZGRyLmRhdGEgPSBzdGFydGFkZHI7CiAKLQltc2dwID0gKHA4MDIxMW1zZ190ICopICYgcnN0YXRlbXNnOworCW1zZ3AgPSAocDgwMjExbXNnX3QgKikgJnJzdGF0ZW1zZzsKIAlyZXN1bHQgPSBwcmlzbTJtZ210X3JhbWRsX3N0YXRlKHdsYW5kZXYsIG1zZ3ApOwogCWlmIChyZXN1bHQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCkBAIC0xMDYzLDcgKzEwNjEsNyBAQAogCQkJICAgICgiU2VuZGluZyB4eHhkbF93cml0ZSBtZXNzYWdlIGFkZHI9JTA2eCBsZW49JWQuXG4iLAogCQkJICAgICBjdXJyZGFkZHIsIGN1cnJsZW4pOwogCi0JCQltc2dwID0gKHA4MDIxMW1zZ190ICopICYgcndyaXRlbXNnOworCQkJbXNncCA9IChwODAyMTFtc2dfdCAqKSAmcndyaXRlbXNnOwogCQkJcmVzdWx0ID0gcHJpc20ybWdtdF9yYW1kbF93cml0ZSh3bGFuZGV2LCBtc2dwKTsKIAogCQkJLyogQ2hlY2sgdGhlIHJlc3VsdHMgKi8KQEAgLTEwOTAsNyArMTA4OCw3IEBACiAJcnN0YXRlbXNnLmVuYWJsZS5kYXRhID0gUDgwMjExRU5VTV90cnV0aF9mYWxzZTsKIAlyc3RhdGVtc2cuZXhlYWRkci5kYXRhID0gMDsKIAotCW1zZ3AgPSAocDgwMjExbXNnX3QgKikgJiByc3RhdGVtc2c7CisJbXNncCA9IChwODAyMTFtc2dfdCAqKSAmcnN0YXRlbXNnOwogCXJlc3VsdCA9IHByaXNtMm1nbXRfcmFtZGxfc3RhdGUod2xhbmRldiwgbXNncCk7CiAJaWYgKHJlc3VsdCkgewogCQlwcmludGsoS0VSTl9FUlIKQEAgLTExNjEsNyArMTE1OSw3IEBACiAJCQkvKiBTRUMgY29tcGF0IHJhbmdlICovCiAJCQlpZiAoKHMzaW5mb1tpXS5pbmZvLmNvbXBhdC5yb2xlID09IDEpICYmCiAJCQkgICAgKHMzaW5mb1tpXS5pbmZvLmNvbXBhdC5pZCA9PSA0KSkgewotCisJCQkJLyogRklYTUU6IGlzbid0IHNvbWV0aGluZyBtaXNzaW5nIGhlcmU/ICovCiAJCQl9CiAKIAkJCWJyZWFrOwpAQCAtMTE5Niw4ICsxMTk0LDkgQEAKIAkJCXByX2RlYnVnKCJVbmtub3duIGluZm9yZWMgdHlwZSAlZFxuIiwgczNpbmZvW2ldLnR5cGUpOwogCQl9CiAJfQotCS8vIHdhbGsgdGhyb3VnaAorCS8qIHdhbGsgdGhyb3VnaCAqLwogCi0JaWYgKHRydW1wICYmIChyZXN1bHQgIT0gMikpIHJlc3VsdCA9IDA7CisJaWYgKHRydW1wICYmIChyZXN1bHQgIT0gMikpCisJCXJlc3VsdCA9IDA7CiAJcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuYwppbmRleCA5ZjdkOTZjLi5hZDE2M2RhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtZ210LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5jCkBAIC02Nyw3ICs2Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgpAQCAtNTQxLDcgKzU0MSw3IEBACiAJLyoqKiBTVEFUSU9OICoqKi8KIAkvKiBTZXQgdGhlIFJFUVVJUkVEIGNvbmZpZyBpdGVtcyAqLwogCS8qIFNTSUQgKi8KLQlwc3RyID0gKHA4MDIxMXBzdHJkX3QgKikgJiAobXNnLT5zc2lkLmRhdGEpOworCXBzdHIgPSAocDgwMjExcHN0cmRfdCAqKSAmKG1zZy0+c3NpZC5kYXRhKTsKIAlwcmlzbTJtZ210X3BzdHIyYnl0ZXN0cihwMmJ5dGVzdHIsIHBzdHIpOwogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NORk9XTlNTSUQsCiAJCQkJCWJ5dGVidWYsIEhGQTM4NHhfUklEX0NORk9XTlNTSURfTEVOKTsKQEAgLTEwMzQsNyArMTAzNCw3IEBACiAKIAkvKiBTZXQgdGhlIHNzaWQgKi8KIAltZW1zZXQoYnl0ZWJ1ZiwgMCwgMjU2KTsKLQlwc3RyID0gKHA4MDIxMXBzdHJkX3QgKikgJiAobXNnLT5zc2lkLmRhdGEpOworCXBzdHIgPSAocDgwMjExcHN0cmRfdCAqKSAmKG1zZy0+c3NpZC5kYXRhKTsKIAlwcmlzbTJtZ210X3BzdHIyYnl0ZXN0cihwMmJ5dGVzdHIsIHBzdHIpOwogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lELAogCQkJCQlieXRlYnVmLApAQCAtMTEyMyw4ICsxMTIzLDggQEAKIAkJaWYgKGh3LT5wcmVzbmlmZl9wb3J0X3R5cGUgIT0gMCkgewogCQkJd29yZCA9IGh3LT5wcmVzbmlmZl9wb3J0X3R5cGU7CiAJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCi0JCQkJCQkJICBIRkEzODR4X1JJRF9DTkZQT1JUVFlQRSwKLQkJCQkJCQkgIHdvcmQpOworCQkJCQkJICBIRkEzODR4X1JJRF9DTkZQT1JUVFlQRSwKKwkJCQkJCSAgd29yZCk7CiAJCQlpZiAocmVzdWx0KSB7CiAJCQkJcHJfZGVidWcKIAkJCQkgICAgKCJmYWlsZWQgdG8gcmVzdG9yZSBwb3J0dHlwZSwgcmVzdWx0PSVkXG4iLApAQCAtMTE1NiwxMCArMTE1Niw4IEBACiAJCQlpZiAod2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUikgewogCQkJCS8qIFNhdmUgbWFjcG9ydCAwIHN0YXRlICovCiAJCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LAotCQkJCQkJCQkgIEhGQTM4NHhfUklEX0NORlBPUlRUWVBFLAotCQkJCQkJCQkgICYKLQkJCQkJCQkJICAoaHctPgotCQkJCQkJCQkgICBwcmVzbmlmZl9wb3J0X3R5cGUpKTsKKwkJCQkJCSAgSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsCisJCQkJCQkgICYoaHctPnByZXNuaWZmX3BvcnRfdHlwZSkpOwogCQkJCWlmIChyZXN1bHQpIHsKIAkJCQkJcHJfZGVidWcKIAkJCQkJICAgICgiZmFpbGVkIHRvIHJlYWQgcG9ydHR5cGUsIHJlc3VsdD0lZFxuIiwKQEAgLTExNjgsMTAgKzExNjYsOCBAQAogCQkJCX0KIAkJCQkvKiBTYXZlIHRoZSB3ZXBmbGFncyBzdGF0ZSAqLwogCQkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywKLQkJCQkJCQkJICBIRkEzODR4X1JJRF9DTkZXRVBGTEFHUywKLQkJCQkJCQkJICAmCi0JCQkJCQkJCSAgKGh3LT4KLQkJCQkJCQkJICAgcHJlc25pZmZfd2VwZmxhZ3MpKTsKKwkJCQkJCSAgSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MsCisJCQkJCQkgICYoaHctPnByZXNuaWZmX3dlcGZsYWdzKSk7CiAJCQkJaWYgKHJlc3VsdCkgewogCQkJCQlwcl9kZWJ1ZwogCQkJCQkgICAgKCJmYWlsZWQgdG8gcmVhZCB3ZXBmbGFncywgcmVzdWx0PSVkXG4iLApAQCAtMTIxOCw4ICsxMjE0LDggQEAKIAkJCS8qIFNldCB0aGUgcG9ydCB0eXBlIHRvIHBJYnNzICovCiAJCQl3b3JkID0gSEZBMzg0eF9QT1JUVFlQRV9QU1VFRE9JQlNTOwogCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LAotCQkJCQkJCSAgSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsCi0JCQkJCQkJICB3b3JkKTsKKwkJCQkJCSAgSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsCisJCQkJCQkgIHdvcmQpOwogCQkJaWYgKHJlc3VsdCkgewogCQkJCXByX2RlYnVnCiAJCQkJICAgICgiZmFpbGVkIHRvIHNldCBwb3J0dHlwZSAlZCwgcmVzdWx0PSVkXG4iLApAQCAtMTIzNSw4ICsxMjMxLDggQEAKIAkJCQkgICAgSEZBMzg0eF9XRVBGTEFHU19ESVNBQkxFX1JYQ1JZUFQ7CiAJCQkJcmVzdWx0ID0KIAkJCQkgICAgaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LAotCQkJCQkJCSAgICAgSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MsCi0JCQkJCQkJICAgICB3b3JkKTsKKwkJCQkJCSAgICAgSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MsCisJCQkJCQkgICAgIHdvcmQpOwogCQkJfQogCiAJCQlpZiAocmVzdWx0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtZ210LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtZ210LmgKaW5kZXggYmRmMmIzZS4uMDdlZWNlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuaApAQCAtNjMsNDMgKzYzLDQzIEBACiBleHRlcm4gaW50IHByaXNtMl9yZXNldF9ob2xkdGltZTsKIGV4dGVybiBpbnQgcHJpc20yX3Jlc2V0X3NldHRsZXRpbWU7CiAKLXUzMiBwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2aWNlX3QgKiB3bGFuZGV2LCB1MzIgaWZzdGF0ZSk7Cit1MzIgcHJpc20yc3RhX2lmc3RhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB1MzIgaWZzdGF0ZSk7CiAKLXZvaWQgcHJpc20yc3RhX2V2X2luZm8od2xhbmRldmljZV90ICogd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICogaW5mKTsKLXZvaWQgcHJpc20yc3RhX2V2X3R4ZXhjKHdsYW5kZXZpY2VfdCAqIHdsYW5kZXYsIHUxNiBzdGF0dXMpOwotdm9pZCBwcmlzbTJzdGFfZXZfdHgod2xhbmRldmljZV90ICogd2xhbmRldiwgdTE2IHN0YXR1cyk7Ci12b2lkIHByaXNtMnN0YV9ldl9yeCh3bGFuZGV2aWNlX3QgKiB3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXZvaWQgcHJpc20yc3RhX2V2X2FsbG9jKHdsYW5kZXZpY2VfdCAqIHdsYW5kZXYpOwordm9pZCBwcmlzbTJzdGFfZXZfaW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3ZvaWQgcHJpc20yc3RhX2V2X3R4ZXhjKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTE2IHN0YXR1cyk7Cit2b2lkIHByaXNtMnN0YV9ldl90eCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHUxNiBzdGF0dXMpOwordm9pZCBwcmlzbTJzdGFfZXZfcngod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgcHJpc20yc3RhX2V2X2FsbG9jKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CiAKLWludCBwcmlzbTJtZ210X21pYnNldF9taWJnZXQod2xhbmRldmljZV90ICogd2xhbmRldiwgdm9pZCAqbXNncCk7Ci1pbnQgcHJpc20ybWdtdF9zY2FuKHdsYW5kZXZpY2VfdCAqIHdsYW5kZXYsIHZvaWQgKm1zZ3ApOwotaW50IHByaXNtMm1nbXRfc2Nhbl9yZXN1bHRzKHdsYW5kZXZpY2VfdCAqIHdsYW5kZXYsIHZvaWQgKm1zZ3ApOwotaW50IHByaXNtMm1nbXRfc3RhcnQod2xhbmRldmljZV90ICogd2xhbmRldiwgdm9pZCAqbXNncCk7Ci1pbnQgcHJpc20ybWdtdF93bGFuc25pZmYod2xhbmRldmljZV90ICogd2xhbmRldiwgdm9pZCAqbXNncCk7Ci1pbnQgcHJpc20ybWdtdF9yZWFkcGRhKHdsYW5kZXZpY2VfdCAqIHdsYW5kZXYsIHZvaWQgKm1zZ3ApOwotaW50IHByaXNtMm1nbXRfcmFtZGxfc3RhdGUod2xhbmRldmljZV90ICogd2xhbmRldiwgdm9pZCAqbXNncCk7Ci1pbnQgcHJpc20ybWdtdF9yYW1kbF93cml0ZSh3bGFuZGV2aWNlX3QgKiB3bGFuZGV2LCB2b2lkICptc2dwKTsKLWludCBwcmlzbTJtZ210X2ZsYXNoZGxfc3RhdGUod2xhbmRldmljZV90ICogd2xhbmRldiwgdm9pZCAqbXNncCk7Ci1pbnQgcHJpc20ybWdtdF9mbGFzaGRsX3dyaXRlKHdsYW5kZXZpY2VfdCAqIHdsYW5kZXYsIHZvaWQgKm1zZ3ApOwotaW50IHByaXNtMm1nbXRfYXV0b2pvaW4od2xhbmRldmljZV90ICogd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9taWJzZXRfbWliZ2V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9zY2FuKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9zY2FuX3Jlc3VsdHMod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3N0YXJ0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF93bGFuc25pZmYod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3JlYWRwZGEod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3JhbWRsX3N0YXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9yYW1kbF93cml0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfZmxhc2hkbF9zdGF0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfZmxhc2hkbF93cml0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfYXV0b2pvaW4od2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogY29udmVyc2lvbiBmdW5jdGlvbnMgZ29pbmcgYmV0d2VlbiB3bGFuIG1lc3NhZ2UgZGF0YSB0eXBlcyBhbmQKICogUHJpc20yIGRhdGEgdHlwZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBieXRlIGFyZWEgY29udmVyc2lvbiBmdW5jdGlvbnMqLwotdm9pZCBwcmlzbTJtZ210X3BzdHIyYnl0ZWFyZWEodTggKiBieXRlYXJlYSwgcDgwMjExcHN0cmRfdCAqIHBzdHIpOwotdm9pZCBwcmlzbTJtZ210X2J5dGVhcmVhMnBzdHIodTggKiBieXRlYXJlYSwgcDgwMjExcHN0cmRfdCAqIHBzdHIsIGludCBsZW4pOwordm9pZCBwcmlzbTJtZ210X3BzdHIyYnl0ZWFyZWEodTggKmJ5dGVhcmVhLCBwODAyMTFwc3RyZF90ICpwc3RyKTsKK3ZvaWQgcHJpc20ybWdtdF9ieXRlYXJlYTJwc3RyKHU4ICpieXRlYXJlYSwgcDgwMjExcHN0cmRfdCAqcHN0ciwgaW50IGxlbik7CiAKIC8qIGJ5dGUgc3RyaW5nIGNvbnZlcnNpb24gZnVuY3Rpb25zKi8KLXZvaWQgcHJpc20ybWdtdF9wc3RyMmJ5dGVzdHIoaGZhMzg0eF9ieXRlc3RyX3QgKiBieXRlc3RyLCBwODAyMTFwc3RyZF90ICogcHN0cik7Ci12b2lkIHByaXNtMm1nbXRfYnl0ZXN0cjJwc3RyKGhmYTM4NHhfYnl0ZXN0cl90ICogYnl0ZXN0ciwgcDgwMjExcHN0cmRfdCAqIHBzdHIpOwordm9pZCBwcmlzbTJtZ210X3BzdHIyYnl0ZXN0cihoZmEzODR4X2J5dGVzdHJfdCAqYnl0ZXN0ciwgcDgwMjExcHN0cmRfdCAqcHN0cik7Cit2b2lkIHByaXNtMm1nbXRfYnl0ZXN0cjJwc3RyKGhmYTM4NHhfYnl0ZXN0cl90ICpieXRlc3RyLCBwODAyMTFwc3RyZF90ICpwc3RyKTsKIAogLyogZnVuY3Rpb25zIHRvIGNvbnZlcnQgR3JvdXAgQWRkcmVzc2VzICovCi12b2lkIHByaXNtMm1nbXRfZ2V0X2dycGFkZHIodTMyIGRpZCwgcDgwMjExcHN0cmRfdCAqIHBzdHIsIGhmYTM4NHhfdCAqIHByaXYpOwordm9pZCBwcmlzbTJtZ210X2dldF9ncnBhZGRyKHUzMiBkaWQsIHA4MDIxMXBzdHJkX3QgKnBzdHIsIGhmYTM4NHhfdCAqcHJpdik7CiBpbnQgcHJpc20ybWdtdF9zZXRfZ3JwYWRkcih1MzIgZGlkLAotCQkJICAgdTggKiBwcmlzbTJidWYsIHA4MDIxMXBzdHJkX3QgKiBwc3RyLAotCQkJICAgaGZhMzg0eF90ICogcHJpdik7CisJCQkgICB1OCAqcHJpc20yYnVmLCBwODAyMTFwc3RyZF90ICpwc3RyLAorCQkJICAgaGZhMzg0eF90ICpwcml2KTsKIGludCBwcmlzbTJtZ210X2dldF9ncnBhZGRyX2luZGV4KHUzMiBkaWQpOwogCiB2b2lkIHByaXNtMnN0YV9wcm9jZXNzaW5nX2RlZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtaWIuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1pYi5jCmluZGV4IDJmZmYwYTEuLjk4YTVkNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1pYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1pYi5jCkBAIC0xMTQsNyArMTE0LDcgQEAKIAogc3RhdGljIGludCBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleShtaWJyZWNfdCAqbWliLAogCQkJCSAgIGludCBpc2dldCwKLQkJCQkgICB3bGFuZGV2aWNlX3QgKiB3bGFuZGV2LAorCQkJCSAgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKIAkJCQkgICBoZmEzODR4X3QgKmh3LAogCQkJCSAgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLAogCQkJCSAgIHZvaWQgKmRhdGEpOwpAQCAtNzI2LDcgKzcyNiw3IEBACiAJCQlpZiAoaXNnZXQpIHsKIAkJCQloZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LAogCQkJCQkJICAgICAgIEhGQTM4NHhfUklEX0NORldQQURBVEEsCi0JCQkJCQkgICAgICAgKHU4ICopICYgd3BhLAorCQkJCQkJICAgICAgICh1OCAqKSAmd3BhLAogCQkJCQkJICAgICAgIHNpemVvZih3cGEpKTsKIAkJCQlwc3RyLT5sZW4gPSBsZTE2X3RvX2NwdSh3cGEuZGF0YWxlbik7CiAJCQkJbWVtY3B5KHBzdHItPmRhdGEsIHdwYS5kYXRhLCBwc3RyLT5sZW4pOwpAQCAtNzM2LDkgKzczNiw5IEBACiAKIAkJCQlyZXN1bHQgPQogCQkJCSAgICBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LAotCQkJCQkJCSAgIEhGQTM4NHhfUklEX0NORldQQURBVEEsCi0JCQkJCQkJICAgKHU4ICopICYgd3BhLAotCQkJCQkJCSAgIHNpemVvZih3cGEpKTsKKwkJCQkJCSAgIEhGQTM4NHhfUklEX0NORldQQURBVEEsCisJCQkJCQkgICAodTggKikgJndwYSwKKwkJCQkJCSAgIHNpemVvZih3cGEpKTsKIAkJCX0KIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJzdGEuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnN0YS5jCmluZGV4IDUwZjMwMWQuLjMxYWM4ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnN0YS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnN0YS5jCkBAIC02NCw3ICs2NCw3IEBACiAjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KQEAgLTEwMjMsMTMgKzEwMjMsMTMgQEAKIAogCWNudCA9IHNpemVvZihoZmEzODR4X0NvbW1UYWxsaWVzMzJfdCkgLyBzaXplb2YodTMyKTsKIAlpZiAoaW5mLT5mcmFtZWxlbiA+IDIyKSB7Ci0JCWRzdCA9ICh1MzIgKikgJiBody0+dGFsbGllczsKLQkJc3JjMzIgPSAodTMyICopICYgaW5mLT5pbmZvLmNvbW10YWxsaWVzMzI7CisJCWRzdCA9ICh1MzIgKikgJmh3LT50YWxsaWVzOworCQlzcmMzMiA9ICh1MzIgKikgJmluZi0+aW5mby5jb21tdGFsbGllczMyOwogCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyssIGRzdCsrLCBzcmMzMisrKQogCQkJKmRzdCArPSBsZTMyX3RvX2NwdSgqc3JjMzIpOwogCX0gZWxzZSB7Ci0JCWRzdCA9ICh1MzIgKikgJiBody0+dGFsbGllczsKLQkJc3JjMTYgPSAodTE2ICopICYgaW5mLT5pbmZvLmNvbW10YWxsaWVzMTY7CisJCWRzdCA9ICh1MzIgKikgJmh3LT50YWxsaWVzOworCQlzcmMxNiA9ICh1MTYgKikgJmluZi0+aW5mby5jb21tdGFsbGllczE2OwogCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyssIGRzdCsrLCBzcmMxNisrKQogCQkJKmRzdCArPSBsZTE2X3RvX2NwdSgqc3JjMTYpOwogCX0KQEAgLTEyODAsNyArMTI4MCw3IEBACiAJCQkJICAgICBIRkEzODR4X1JJRF9DVVJSRU5UU1NJRCwgcmVzdWx0KTsKIAkJCQlnb3RvIGZhaWxlZDsKIAkJCX0KLQkJCXByaXNtMm1nbXRfYnl0ZXN0cjJwc3RyKChoZmEzODR4X2J5dGVzdHJfdCAqKSAmIHNzaWQsCisJCQlwcmlzbTJtZ210X2J5dGVzdHIycHN0cigoaGZhMzg0eF9ieXRlc3RyX3QgKikgJnNzaWQsCiAJCQkJCQkocDgwMjExcHN0cmRfdCAqKSAmCiAJCQkJCQl3bGFuZGV2LT5zc2lkKTsKIApAQCAtMTM2OCw4ICsxMzY4LDggQEAKIAkJCQkgSEZBMzg0eF9SSURfQ1VSUkVOVFNTSUQsIHJlc3VsdCk7CiAJCQlnb3RvIGZhaWxlZDsKIAkJfQotCQlwcmlzbTJtZ210X2J5dGVzdHIycHN0cigoaGZhMzg0eF9ieXRlc3RyX3QgKikgJiBzc2lkLAotCQkJCQkocDgwMjExcHN0cmRfdCAqKSAmIHdsYW5kZXYtPnNzaWQpOworCQlwcmlzbTJtZ210X2J5dGVzdHIycHN0cigoaGZhMzg0eF9ieXRlc3RyX3QgKikgJnNzaWQsCisJCQkJCShwODAyMTFwc3RyZF90ICopICZ3bGFuZGV2LT5zc2lkKTsKIAogCQlody0+bGlua19zdGF0dXMgPSBIRkEzODR4X0xJTktfQ09OTkVDVEVEOwogCQluZXRpZl9jYXJyaWVyX29uKHdsYW5kZXYtPm5ldGRldik7CkBAIC0yMDI4LDggKzIwMjgsOCBAQAogCQkJIEhGQTM4NHhfUklEX0NVUlJFTlRTU0lELCByZXN1bHQpOwogCQlnb3RvIGRvbmU7CiAJfQotCXByaXNtMm1nbXRfYnl0ZXN0cjJwc3RyKChoZmEzODR4X2J5dGVzdHJfdCAqKSAmIHNzaWQsCi0JCQkJKHA4MDIxMXBzdHJkX3QgKikgJiB3bGFuZGV2LT5zc2lkKTsKKwlwcmlzbTJtZ210X2J5dGVzdHIycHN0cigoaGZhMzg0eF9ieXRlc3RyX3QgKikgJnNzaWQsCisJCQkJKHA4MDIxMXBzdHJkX3QgKikgJndsYW5kZXYtPnNzaWQpOwogCiAJLyogUmVzY2hlZHVsZSB0aW1lciAqLwogCW1vZF90aW1lcigmaHctPmNvbW1zcXVhbF90aW1lciwgamlmZmllcyArIEhaKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnVzYi5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ydXNiLmMKaW5kZXggOWRkZTY4Yi4uNTAxZDI3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ydXNiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ydXNiLmMKQEAgLTI0LDggKzI0LDkgQEAKIAkgKDB4MDY2YiwgMHgyMjEzLCAiTGlua3N5cyBXVVNCMTJ2MS4xIDExTWJwcyBXTEFOIFVTQiBBZGFwdGVyIil9LAogCXtQUklTTV9VU0JfREVWSUNFCiAJICgweDA2N2MsIDB4MTAyMiwgIlNpZW1lbnMgU3BlZWRTdHJlYW0gMTAyMiAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDA0OWYsIDB4MDAzMywKLQkJCSAgIkNvbXBhcS9JbnRlbCBXMTAwIFBSTy9XaXJlbGVzcyAxMU1icHMgbXVsdGlwb3J0IFdMQU4gQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRQorCSAoMHgwNDlmLCAweDAwMzMsCisJICJDb21wYXEvSW50ZWwgVzEwMCBQUk8vV2lyZWxlc3MgMTFNYnBzIG11bHRpcG9ydCBXTEFOIEFkYXB0ZXIiKX0sCiAJe1BSSVNNX1VTQl9ERVZJQ0UKIAkgKDB4MDQxMSwgMHgwMDE2LCAiTWVsY28gV0xJLVVTQi1TMTEgMTFNYnBzIFdMQU4gQWRhcHRlciIpfSwKIAl7UFJJU01fVVNCX0RFVklDRQpAQCAtNTUsNyArNTYsNiBAQAogCSAoMHgwNGYxLCAweDMwMDksICJKVkMgTVAtWFA3MjUwIEJ1aWx0aW4gVVNCIFdMQU4gQWRhcHRlciIpfSwKIAl7UFJJU01fVVNCX0RFVklDRSgweDA4NDYsIDB4NDExMCwgIk5ldEdlYXIgTUExMTEiKX0sCiAJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwM2YzLCAweDAwMjAsICJBZGFwdGVjIEFXTi04MDIwIFVTQiBXTEFOIEFkYXB0ZXIiKX0sCi0vKiAgICAgIHtQUklTTV9VU0JfREVWSUNFKDB4MGFjZSwgMHgxMjAxLCAiWnlEQVMgWkQxMjAxIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LCAqLwogCXtQUklTTV9VU0JfREVWSUNFKDB4MjgyMSwgMHgzMzAwLCAiQVNVUy1XTDE0MCBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKIAl7UFJJU01fVVNCX0RFVklDRSgweDIwMDEsIDB4MzcwMCwgIkRXTC0xMjIgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKX0sCiAJe1BSSVNNX1VTQl9ERVZJQ0UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jIGIvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMKaW5kZXggYzgzYzk3NS4uZDQxODExYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMKQEAgLTExNywxMyArMTE3LDIwIEBACiAgKiBIb3dldmVyLCB0aGVzZSB3aWxsIGNvbWUgZnJvbSBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcHRycyB0byBlYWNoIG9mIHRoZW0uCiAgKi8KIAotc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGRldmljZWNvbm5kaXNjd3EpOwotLyogZ3VhcmRlZCBieSB1c2Jmc19tdXRleCAqLwotc3RhdGljIHVuc2lnbmVkIGludCBjb25uZGlzY2V2Y250OwotCi0vKiB0aGlzIHN0cnVjdCBzdG9yZXMgdGhlIHBvbGwgc3RhdGUgZm9yIDxtb3VudHBvaW50Pi9kZXZpY2VzIHBvbGxlcnMgKi8KLXN0cnVjdCB1c2JfZGV2aWNlX3N0YXR1cyB7Ci0JdW5zaWduZWQgaW50IGxhc3RldjsKKy8qCisgKiBXYWl0IGZvciBhbiBjb25uZWN0L2Rpc2Nvbm5lY3QgZXZlbnQgdG8gaGFwcGVuLiBXZSBpbml0aWFsaXplCisgKiB0aGUgZXZlbnQgY291bnRlciB3aXRoIGFuIG9kZCBudW1iZXIsIGFuZCBlYWNoIGV2ZW50IHdpbGwgaW5jcmVtZW50CisgKiB0aGUgZXZlbnQgY291bnRlciBieSB0d28sIHNvIGl0IHdpbGwgYWx3YXlzIF9zdGF5XyBvZGQuIFRoYXQgbWVhbnMKKyAqIHRoYXQgaXQgd2lsbCBuZXZlciBiZSB6ZXJvLCBzbyAiZXZlbnQgMCIgd2lsbCBuZXZlciBtYXRjaCBhIGN1cnJlbnQKKyAqIGV2ZW50LCBhbmQgdGh1cyAncG9sbCcgd2lsbCBhbHdheXMgdHJpZ2dlciBhcyByZWFkYWJsZSBmb3IgdGhlIGZpcnN0CisgKiB0aW1lIGl0IGdldHMgY2FsbGVkLgorICovCitzdGF0aWMgc3RydWN0IGRldmljZV9jb25uZWN0X2V2ZW50IHsKKwlhdG9taWNfdCBjb3VudDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworfSBkZXZpY2VfZXZlbnQgPSB7CisJLmNvdW50ID0gQVRPTUlDX0lOSVQoMSksCisJLndhaXQgPSBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUihkZXZpY2VfZXZlbnQud2FpdCkKIH07CiAKIHN0cnVjdCBjbGFzc19pbmZvIHsKQEAgLTE1NywxMCArMTY0LDggQEAKIAogdm9pZCB1c2Jmc19jb25uX2Rpc2NfZXZlbnQodm9pZCkKIHsKLQltdXRleF9sb2NrKCZ1c2Jmc19tdXRleCk7Ci0JY29ubmRpc2NldmNudCsrOwotCW11dGV4X3VubG9jaygmdXNiZnNfbXV0ZXgpOwotCXdha2VfdXAoJmRldmljZWNvbm5kaXNjd3EpOworCWF0b21pY19hZGQoMiwgJmRldmljZV9ldmVudC5jb3VudCk7CisJd2FrZV91cCgmZGV2aWNlX2V2ZW50LndhaXQpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqY2xhc3NfZGVjb2RlKGNvbnN0IGludCBjbGFzcykKQEAgLTYzMiw0MiArNjM3LDE2IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHVzYl9kZXZpY2VfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQkgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQogewotCXN0cnVjdCB1c2JfZGV2aWNlX3N0YXR1cyAqc3Q7Ci0JdW5zaWduZWQgaW50IG1hc2sgPSAwOworCXVuc2lnbmVkIGludCBldmVudF9jb3VudDsKIAotCW11dGV4X2xvY2soJnVzYmZzX211dGV4KTsKLQlzdCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlpZiAoIXN0KSB7Ci0JCXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9kZXZpY2Vfc3RhdHVzKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghc3QpIHsKLQkJCW11dGV4X3VubG9jaygmdXNiZnNfbXV0ZXgpOwotCQkJcmV0dXJuIFBPTExJTjsKLQkJfQorCXBvbGxfd2FpdChmaWxlLCAmZGV2aWNlX2V2ZW50LndhaXQsIHdhaXQpOwogCi0JCXN0LT5sYXN0ZXYgPSBjb25uZGlzY2V2Y250OwotCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBzdDsKLQkJbWFzayA9IFBPTExJTjsKKwlldmVudF9jb3VudCA9IGF0b21pY19yZWFkKCZkZXZpY2VfZXZlbnQuY291bnQpOworCWlmIChmaWxlLT5mX3ZlcnNpb24gIT0gZXZlbnRfY291bnQpIHsKKwkJZmlsZS0+Zl92ZXJzaW9uID0gZXZlbnRfY291bnQ7CisJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOwogCX0KIAotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKQotCQlwb2xsX3dhaXQoZmlsZSwgJmRldmljZWNvbm5kaXNjd3EsIHdhaXQpOwotCWlmIChzdC0+bGFzdGV2ICE9IGNvbm5kaXNjZXZjbnQpCi0JCW1hc2sgfD0gUE9MTElOOwotCXN0LT5sYXN0ZXYgPSBjb25uZGlzY2V2Y250OwotCW11dGV4X3VubG9jaygmdXNiZnNfbXV0ZXgpOwotCXJldHVybiBtYXNrOwotfQotCi1zdGF0aWMgaW50IHVzYl9kZXZpY2Vfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHVzYl9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlrZnJlZShmaWxlLT5wcml2YXRlX2RhdGEpOwotCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY5OSw2ICs2NzgsNCBAQAogCS5sbHNlZWsgPQl1c2JfZGV2aWNlX2xzZWVrLAogCS5yZWFkID0JCXVzYl9kZXZpY2VfcmVhZCwKIAkucG9sbCA9CQl1c2JfZGV2aWNlX3BvbGwsCi0JLm9wZW4gPQkJdXNiX2RldmljZV9vcGVuLAotCS5yZWxlYXNlID0JdXNiX2RldmljZV9yZWxlYXNlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0Lzg4cG04NjB4X2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC84OHBtODYweF9ibC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZjcwNWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC84OHBtODYweF9ibC5jCkBAIC0wLDAgKzEsMzA0IEBACisvKgorICogQmFja2xpZ2h0IGRyaXZlciBmb3IgTWFydmVsbCBTZW1pY29uZHVjdG9yIDg4UE04NjA2CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKglIYW9qaWFuIFpodWFuZyA8aGFvamlhbi56aHVhbmdAbWFydmVsbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvbWZkLzg4cG04NjB4Lmg+CisKKyNkZWZpbmUgTUFYX0JSSUdIVE5FU1MJCSgweEZGKQorI2RlZmluZSBNSU5fQlJJR0hUTkVTUwkJKDApCisKKyNkZWZpbmUgQ1VSUkVOVF9NQVNLCQkoMHgxRiA8PCAxKQorCitzdHJ1Y3QgcG04NjB4X2JhY2tsaWdodF9kYXRhIHsKKwlzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXA7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYzsKKwlpbnQJY3VycmVudF9icmlnaHRuZXNzOworCWludAlwb3J0OworCWludAlwd207CisJaW50CWlzZXQ7Cit9OworCitzdGF0aWMgaW5saW5lIGludCB3bGVkX2EoaW50IHBvcnQpCit7CisJaW50IHJldDsKKworCXJldCA9ICgocG9ydCAtIFBNODYwNl9CQUNLTElHSFQxKSA8PCAxKSArIDI7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgd2xlZF9iKGludCBwb3J0KQoreworCWludCByZXQ7CisKKwlyZXQgPSAoKHBvcnQgLSBQTTg2MDZfQkFDS0xJR0hUMSkgPDwgMSkgKyAzOworCXJldHVybiByZXQ7Cit9CisKKy8qIFdMRUQyICYgV0xFRDMgc2hhcmUgdGhlIHNhbWUgSURDICovCitzdGF0aWMgaW5saW5lIGludCB3bGVkX2lkYyhpbnQgcG9ydCkKK3sKKwlpbnQgcmV0OworCisJc3dpdGNoIChwb3J0KSB7CisJY2FzZSBQTTg2MDZfQkFDS0xJR0hUMToKKwljYXNlIFBNODYwNl9CQUNLTElHSFQyOgorCQlyZXQgPSAoKHBvcnQgLSBQTTg2MDZfQkFDS0xJR0hUMSkgPDwgMSkgKyAzOworCQlicmVhazsKKwljYXNlIFBNODYwNl9CQUNLTElHSFQzOgorCWRlZmF1bHQ6CisJCXJldCA9ICgocG9ydCAtIFBNODYwNl9CQUNLTElHSFQyKSA8PCAxKSArIDM7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBtODYweF9iYWNrbGlnaHRfc2V0KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCwgaW50IGJyaWdodG5lc3MpCit7CisJc3RydWN0IHBtODYweF9iYWNrbGlnaHRfZGF0YSAqZGF0YSA9IGJsX2dldF9kYXRhKGJsKTsKKwlzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXAgPSBkYXRhLT5jaGlwOworCXVuc2lnbmVkIGNoYXIgdmFsdWU7CisJaW50IHJldDsKKworCWlmIChicmlnaHRuZXNzID4gTUFYX0JSSUdIVE5FU1MpCisJCXZhbHVlID0gTUFYX0JSSUdIVE5FU1M7CisJZWxzZQorCQl2YWx1ZSA9IGJyaWdodG5lc3M7CisKKwlyZXQgPSBwbTg2MHhfcmVnX3dyaXRlKGRhdGEtPmkyYywgd2xlZF9hKGRhdGEtPnBvcnQpLCB2YWx1ZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKChkYXRhLT5jdXJyZW50X2JyaWdodG5lc3MgPT0gMCkgJiYgYnJpZ2h0bmVzcykgeworCQlpZiAoZGF0YS0+aXNldCkgeworCQkJcmV0ID0gcG04NjB4X3NldF9iaXRzKGRhdGEtPmkyYywgd2xlZF9pZGMoZGF0YS0+cG9ydCksCisJCQkJCSAgICAgIENVUlJFTlRfTUFTSywgZGF0YS0+aXNldCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAoZGF0YS0+cHdtKSB7CisJCQlyZXQgPSBwbTg2MHhfc2V0X2JpdHMoZGF0YS0+aTJjLCBQTTg2MDZfUFdNLAorCQkJCQkgICAgICBQTTg2MDZfUFdNX0ZSRVFfTUFTSywgZGF0YS0+cHdtKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gb3V0OworCQl9CisJCWlmIChicmlnaHRuZXNzID09IE1BWF9CUklHSFRORVNTKSB7CisJCQkvKiBzZXQgV0xFRF9PTiBiaXQgYXMgMTAwJSAqLworCQkJcmV0ID0gcG04NjB4X3NldF9iaXRzKGRhdGEtPmkyYywgd2xlZF9iKGRhdGEtPnBvcnQpLAorCQkJCQkgICAgICBQTTg2MDZfV0xFRF9PTiwgUE04NjA2X1dMRURfT04pOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGJyaWdodG5lc3MgPT0gTUFYX0JSSUdIVE5FU1MpIHsKKwkJCS8qIHNldCBXTEVEX09OIGJpdCBhcyAxMDAlICovCisJCQlyZXQgPSBwbTg2MHhfc2V0X2JpdHMoZGF0YS0+aTJjLCB3bGVkX2IoZGF0YS0+cG9ydCksCisJCQkJCSAgICAgIFBNODYwNl9XTEVEX09OLCBQTTg2MDZfV0xFRF9PTik7CisJCX0gZWxzZSB7CisJCQkvKiBjbGVhciBXTEVEX09OIGJpdCBzaW5jZSBpdCdzIG5vdCAxMDAlICovCisJCQlyZXQgPSBwbTg2MHhfc2V0X2JpdHMoZGF0YS0+aTJjLCB3bGVkX2IoZGF0YS0+cG9ydCksCisJCQkJCSAgICAgIFBNODYwNl9XTEVEX09OLCAwKTsKKwkJfQorCX0KKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlkZXZfZGJnKGNoaXAtPmRldiwgInNldCBicmlnaHRuZXNzICVkXG4iLCB2YWx1ZSk7CisJZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID0gdmFsdWU7CisJcmV0dXJuIDA7CitvdXQ6CisJZGV2X2RiZyhjaGlwLT5kZXYsICJzZXQgYnJpZ2h0bmVzcyAlZCBmYWlsdXJlIHdpdGggcmV0dXJuICIKKwkJInZhbHVlOiVkXG4iLCB2YWx1ZSwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBtODYweF9iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpCit7CisJaW50IGJyaWdodG5lc3MgPSBibC0+cHJvcHMuYnJpZ2h0bmVzczsKKworCWlmIChibC0+cHJvcHMucG93ZXIgIT0gRkJfQkxBTktfVU5CTEFOSykKKwkJYnJpZ2h0bmVzcyA9IDA7CisKKwlpZiAoYmwtPnByb3BzLmZiX2JsYW5rICE9IEZCX0JMQU5LX1VOQkxBTkspCisJCWJyaWdodG5lc3MgPSAwOworCisJaWYgKGJsLT5wcm9wcy5zdGF0ZSAmIEJMX0NPUkVfU1VTUEVOREVEKQorCQlicmlnaHRuZXNzID0gMDsKKworCXJldHVybiBwbTg2MHhfYmFja2xpZ2h0X3NldChibCwgYnJpZ2h0bmVzcyk7Cit9CisKK3N0YXRpYyBpbnQgcG04NjB4X2JhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpCit7CisJc3RydWN0IHBtODYweF9iYWNrbGlnaHRfZGF0YSAqZGF0YSA9IGJsX2dldF9kYXRhKGJsKTsKKwlzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXAgPSBkYXRhLT5jaGlwOworCWludCByZXQ7CisKKwlyZXQgPSBwbTg2MHhfcmVnX3JlYWQoZGF0YS0+aTJjLCB3bGVkX2EoZGF0YS0+cG9ydCkpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKwlkYXRhLT5jdXJyZW50X2JyaWdodG5lc3MgPSByZXQ7CisJZGV2X2RiZyhjaGlwLT5kZXYsICJnZXQgYnJpZ2h0bmVzcyAlZFxuIiwgZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzKTsKKwlyZXR1cm4gZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzOworb3V0OgorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgcG04NjB4X2JhY2tsaWdodF9vcHMgPSB7CisJLm9wdGlvbnMJPSBCTF9DT1JFX1NVU1BFTkRSRVNVTUUsCisJLnVwZGF0ZV9zdGF0dXMJPSBwbTg2MHhfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMsCisJLmdldF9icmlnaHRuZXNzCT0gcG04NjB4X2JhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcywKK307CisKK3N0YXRpYyBpbnQgX19jaGVja19kZXZpY2Uoc3RydWN0IHBtODYweF9iYWNrbGlnaHRfcGRhdGEgKnBkYXRhLCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBwbTg2MHhfYmFja2xpZ2h0X3BkYXRhICpwID0gcGRhdGE7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwl3aGlsZSAocCAmJiBwLT5pZCkgeworCQlpZiAoKHAtPmlkICE9IFBNODYwNl9JRF9CQUNLTElHSFQpIHx8IChwLT5mbGFncyA8IDApKQorCQkJYnJlYWs7CisKKwkJaWYgKCFzdHJuY21wKG5hbWUsIHBtODYweF9iYWNrbGlnaHRfbmFtZVtwLT5mbGFnc10sCisJCQlNRkRfTkFNRV9TSVpFKSkgeworCQkJcmV0ID0gKGludClwLT5mbGFnczsKKwkJCWJyZWFrOworCQl9CisJCXArKzsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwbTg2MHhfYmFja2xpZ2h0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHBtODYweF9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCBwbTg2MHhfcGxhdGZvcm1fZGF0YSAqcG04NjB4X3BkYXRhOworCXN0cnVjdCBwbTg2MHhfYmFja2xpZ2h0X3BkYXRhICpwZGF0YSA9IE5VTEw7CisJc3RydWN0IHBtODYweF9iYWNrbGlnaHRfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmw7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJdW5zaWduZWQgY2hhciB2YWx1ZTsKKwljaGFyIG5hbWVbTUZEX05BTUVfU0laRV07CisJaW50IHJldDsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKKwlpZiAocmVzID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gSS9PIHJlc291cmNlIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChwZGV2LT5kZXYucGFyZW50LT5wbGF0Zm9ybV9kYXRhKSB7CisJCXBtODYweF9wZGF0YSA9IHBkZXYtPmRldi5wYXJlbnQtPnBsYXRmb3JtX2RhdGE7CisJCXBkYXRhID0gcG04NjB4X3BkYXRhLT5iYWNrbGlnaHQ7CisJfQorCWlmIChwZGF0YSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInBsYXRmb3JtIGRhdGEgaXNuJ3QgYXNzaWduZWQgdG8gIgorCQkJImJhY2tsaWdodFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG04NjB4X2JhY2tsaWdodF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJc3RybmNweShuYW1lLCByZXMtPm5hbWUsIE1GRF9OQU1FX1NJWkUpOworCWRhdGEtPmNoaXAgPSBjaGlwOworCWRhdGEtPmkyYyA9IChjaGlwLT5pZCA9PSBDSElQX1BNODYwNikgPyBjaGlwLT5jbGllbnQJXAorCQkJOiBjaGlwLT5jb21wYW5pb247CisJZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID0gTUFYX0JSSUdIVE5FU1M7CisJZGF0YS0+cHdtID0gcGRhdGEtPnB3bTsKKwlkYXRhLT5pc2V0ID0gcGRhdGEtPmlzZXQ7CisJZGF0YS0+cG9ydCA9IF9fY2hlY2tfZGV2aWNlKHBkYXRhLCBuYW1lKTsKKwlpZiAoZGF0YS0+cG9ydCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAid3JvbmcgcGxhdGZvcm0gZGF0YSBpcyBhc3NpZ25lZCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlibCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIobmFtZSwgJnBkZXYtPmRldiwgZGF0YSwKKwkJCQkJJnBtODYweF9iYWNrbGlnaHRfb3BzKTsKKwlpZiAoSVNfRVJSKGJsKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgYmFja2xpZ2h0XG4iKTsKKwkJa2ZyZWUoZGF0YSk7CisJCXJldHVybiBQVFJfRVJSKGJsKTsKKwl9CisJYmwtPnByb3BzLm1heF9icmlnaHRuZXNzID0gTUFYX0JSSUdIVE5FU1M7CisJYmwtPnByb3BzLmJyaWdodG5lc3MgPSBNQVhfQlJJR0hUTkVTUzsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGJsKTsKKworCS8qIEVuYWJsZSByZWZlcmVuY2UgVlNZUyAqLworCXJldCA9IHBtODYweF9yZWdfcmVhZChkYXRhLT5pMmMsIFBNODYwNl9WU1lTKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisJaWYgKChyZXQgJiBQTTg2MDZfVlNZU19FTikgPT0gMCkgeworCQl2YWx1ZSA9IHJldCB8IFBNODYwNl9WU1lTX0VOOworCQlyZXQgPSBwbTg2MHhfcmVnX3dyaXRlKGRhdGEtPmkyYywgUE04NjA2X1ZTWVMsIHZhbHVlKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwl9CisJLyogRW5hYmxlIHJlZmVyZW5jZSBPU0MgKi8KKwlyZXQgPSBwbTg2MHhfcmVnX3JlYWQoZGF0YS0+aTJjLCBQTTg2MDZfTUlTQyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCWlmICgocmV0ICYgUE04NjA2X01JU0NfT1NDX0VOKSA9PSAwKSB7CisJCXZhbHVlID0gcmV0IHwgUE04NjA2X01JU0NfT1NDX0VOOworCQlyZXQgPSBwbTg2MHhfcmVnX3dyaXRlKGRhdGEtPmkyYywgUE04NjA2X01JU0MsIHZhbHVlKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwl9CisJLyogcmVhZCBjdXJyZW50IGJhY2tsaWdodCAqLworCXJldCA9IHBtODYweF9iYWNrbGlnaHRfZ2V0X2JyaWdodG5lc3MoYmwpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGJsKTsKKwlyZXR1cm4gMDsKK291dDoKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBtODYweF9iYWNrbGlnaHRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHBtODYweF9iYWNrbGlnaHRfZGF0YSAqZGF0YSA9IGJsX2dldF9kYXRhKGJsKTsKKworCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihibCk7CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBtODYweF9iYWNrbGlnaHRfZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICI4OHBtODYweC1iYWNrbGlnaHQiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBwbTg2MHhfYmFja2xpZ2h0X3Byb2JlLAorCS5yZW1vdmUJCT0gcG04NjB4X2JhY2tsaWdodF9yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbTg2MHhfYmFja2xpZ2h0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwbTg2MHhfYmFja2xpZ2h0X2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChwbTg2MHhfYmFja2xpZ2h0X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgcG04NjB4X2JhY2tsaWdodF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBtODYweF9iYWNrbGlnaHRfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHBtODYweF9iYWNrbGlnaHRfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiQmFja2xpZ2h0IERyaXZlciBmb3IgTWFydmVsbCBTZW1pY29uZHVjdG9yIDg4UE04NjA2Iik7CitNT0RVTEVfQVVUSE9SKCJIYW9qaWFuIFpodWFuZyA8aGFvamlhbi56aHVhbmdAbWFydmVsbC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOjg4cG04NjB4LWJhY2tsaWdodCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcKaW5kZXggMDliZmE5Ni4uMGM3N2ZjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9LY29uZmlnCkBAIC0yMTIsNiArMjEyLDEzIEBACiAJICBJZiB5b3UgaGF2ZSBhIExDRCBiYWNrbGlnaHQgY29ubmVjdGVkIHRvIHRoZSBXTEVEIG91dHB1dCBvZiBEQTkwMzAKIAkgIG9yIERBOTAzNCBXTEVEIG91dHB1dCwgc2F5IFkgaGVyZSB0byBlbmFibGUgdGhpcyBkcml2ZXIuCiAKK2NvbmZpZyBCQUNLTElHSFRfTUFYODkyNQorCXRyaXN0YXRlICJCYWNrbGlnaHQgZHJpdmVyIGZvciBNQVg4OTI1IgorCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRSAmJiBNRkRfTUFYODkyNQorCWhlbHAKKwkgIElmIHlvdSBoYXZlIGEgTENEIGJhY2tsaWdodCBjb25uZWN0ZWQgdG8gdGhlIFdMRUQgb3V0cHV0IG9mIE1BWDg5MjUKKwkgIFdMRUQgb3V0cHV0LCBzYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGlzIGRyaXZlci4KKwogY29uZmlnIEJBQ0tMSUdIVF9NQlBfTlZJRElBCiAgICAgICAgdHJpc3RhdGUgIk1hY0Jvb2sgUHJvIE52aWRpYSBCYWNrbGlnaHQgRHJpdmVyIgogICAgICAgIGRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRSAmJiBYODYKQEAgLTI2MiwzICsyNjksOSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCiAJICBiZSBjYWxsZWQgYWRwNTUyMF9ibC4KIAorY29uZmlnIEJBQ0tMSUdIVF84OFBNODYwWAorCXRyaXN0YXRlICJCYWNrbGlnaHQgRHJpdmVyIGZvciA4OFBNODYwNiB1c2luZyBXTEVEIgorCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRSAmJiBNRkRfODhQTTg2MFgKKwloZWxwCisJICBTYXkgWSB0byBlbmFibGUgdGhlIGJhY2tsaWdodCBkcml2ZXIgZm9yIE1hcnZlbGwgODhQTTg2MDYuCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxlIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvTWFrZWZpbGUKaW5kZXggOWE0MDU1NC4uNmM3MDRkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvTWFrZWZpbGUKQEAgLTIyLDEwICsyMiwxMiBAQAogb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9DQVJJTExPX1JBTkNIKSArPSBjcl9ibGxjZC5vCiBvYmotJChDT05GSUdfQkFDS0xJR0hUX1BXTSkJKz0gcHdtX2JsLm8KIG9iai0kKENPTkZJR19CQUNLTElHSFRfREE5MDNYKQkrPSBkYTkwM3hfYmwubworb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9NQVg4OTI1KQkrPSBtYXg4OTI1X2JsLm8KIG9iai0kKENPTkZJR19CQUNLTElHSFRfTUJQX05WSURJQSkgKz0gbWJwX252aWRpYV9ibC5vCiBvYmotJChDT05GSUdfQkFDS0xJR0hUX1RPU0EpCSs9IHRvc2FfYmwubwogb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9TQUhBUkEpCSs9IGtiMzg4Nl9ibC5vCiBvYmotJChDT05GSUdfQkFDS0xJR0hUX1dNODMxWCkJKz0gd204MzF4X2JsLm8KIG9iai0kKENPTkZJR19CQUNLTElHSFRfQURYKSAgICArPSBhZHhfYmwubwogb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9BRFA1NTIwKQkrPSBhZHA1NTIwX2JsLm8KK29iai0kKENPTkZJR19CQUNLTElHSFRfODhQTTg2MFgpICs9IDg4cG04NjB4X2JsLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbWF4ODkyNV9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbWF4ODkyNV9ibC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNjcwNjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9tYXg4OTI1X2JsLmMKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKiBCYWNrbGlnaHQgZHJpdmVyIGZvciBNYXhpbSBNQVg4OTI1CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKiAgICAgIEhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0BtYXJ2ZWxsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvbWF4ODkyNS5oPgorCisjZGVmaW5lIE1BWF9CUklHSFRORVNTCQkoMHhmZikKKyNkZWZpbmUgTUlOX0JSSUdIVE5FU1MJCSgwKQorCisjZGVmaW5lIExXWF9GUkVRKHgpCQkoKCh4IC0gNjAxKSAvIDEwMCkgJiAweDcpCisKK3N0cnVjdCBtYXg4OTI1X2JhY2tsaWdodF9kYXRhIHsKKwlzdHJ1Y3QgbWF4ODkyNV9jaGlwCSpjaGlwOworCisJaW50CQljdXJyZW50X2JyaWdodG5lc3M7Cit9OworCitzdGF0aWMgaW50IG1heDg5MjVfYmFja2xpZ2h0X3NldChzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwsIGludCBicmlnaHRuZXNzKQoreworCXN0cnVjdCBtYXg4OTI1X2JhY2tsaWdodF9kYXRhICpkYXRhID0gYmxfZ2V0X2RhdGEoYmwpOworCXN0cnVjdCBtYXg4OTI1X2NoaXAgKmNoaXAgPSBkYXRhLT5jaGlwOworCXVuc2lnbmVkIGNoYXIgdmFsdWU7CisJaW50IHJldDsKKworCWlmIChicmlnaHRuZXNzID4gTUFYX0JSSUdIVE5FU1MpCisJCXZhbHVlID0gTUFYX0JSSUdIVE5FU1M7CisJZWxzZQorCQl2YWx1ZSA9IGJyaWdodG5lc3M7CisKKwlyZXQgPSBtYXg4OTI1X3JlZ193cml0ZShjaGlwLT5pMmMsIE1BWDg5MjVfV0xFRF9DTlRMLCB2YWx1ZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKCFkYXRhLT5jdXJyZW50X2JyaWdodG5lc3MgJiYgYnJpZ2h0bmVzcykKKwkJLyogZW5hYmxlIFdMRUQgb3V0cHV0ICovCisJCXJldCA9IG1heDg5MjVfc2V0X2JpdHMoY2hpcC0+aTJjLCBNQVg4OTI1X1dMRURfTU9ERV9DTlRMLCAxLCAxKTsKKwllbHNlIGlmICghYnJpZ2h0bmVzcykKKwkJLyogZGlzYWJsZSBXTEVEIG91dHB1dCAqLworCQlyZXQgPSBtYXg4OTI1X3NldF9iaXRzKGNoaXAtPmkyYywgTUFYODkyNV9XTEVEX01PREVfQ05UTCwgMSwgMCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCWRldl9kYmcoY2hpcC0+ZGV2LCAic2V0IGJyaWdodG5lc3MgJWRcbiIsIHZhbHVlKTsKKwlkYXRhLT5jdXJyZW50X2JyaWdodG5lc3MgPSB2YWx1ZTsKKwlyZXR1cm4gMDsKK291dDoKKwlkZXZfZGJnKGNoaXAtPmRldiwgInNldCBicmlnaHRuZXNzICVkIGZhaWx1cmUgd2l0aCByZXR1cm4gdmFsdWU6JWRcbiIsCisJCXZhbHVlLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWF4ODkyNV9iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpCit7CisJaW50IGJyaWdodG5lc3MgPSBibC0+cHJvcHMuYnJpZ2h0bmVzczsKKworCWlmIChibC0+cHJvcHMucG93ZXIgIT0gRkJfQkxBTktfVU5CTEFOSykKKwkJYnJpZ2h0bmVzcyA9IDA7CisKKwlpZiAoYmwtPnByb3BzLmZiX2JsYW5rICE9IEZCX0JMQU5LX1VOQkxBTkspCisJCWJyaWdodG5lc3MgPSAwOworCisJaWYgKGJsLT5wcm9wcy5zdGF0ZSAmIEJMX0NPUkVfU1VTUEVOREVEKQorCQlicmlnaHRuZXNzID0gMDsKKworCXJldHVybiBtYXg4OTI1X2JhY2tsaWdodF9zZXQoYmwsIGJyaWdodG5lc3MpOworfQorCitzdGF0aWMgaW50IG1heDg5MjVfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCkKK3sKKwlzdHJ1Y3QgbWF4ODkyNV9iYWNrbGlnaHRfZGF0YSAqZGF0YSA9IGJsX2dldF9kYXRhKGJsKTsKKwlzdHJ1Y3QgbWF4ODkyNV9jaGlwICpjaGlwID0gZGF0YS0+Y2hpcDsKKwlpbnQgcmV0OworCisJcmV0ID0gbWF4ODkyNV9yZWdfcmVhZChjaGlwLT5pMmMsIE1BWDg5MjVfV0xFRF9DTlRMKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID0gcmV0OworCWRldl9kYmcoY2hpcC0+ZGV2LCAiZ2V0IGJyaWdodG5lc3MgJWRcbiIsIGRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIG1heDg5MjVfYmFja2xpZ2h0X29wcyA9IHsKKwkub3B0aW9ucwk9IEJMX0NPUkVfU1VTUEVORFJFU1VNRSwKKwkudXBkYXRlX3N0YXR1cwk9IG1heDg5MjVfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMsCisJLmdldF9icmlnaHRuZXNzCT0gbWF4ODkyNV9iYWNrbGlnaHRfZ2V0X2JyaWdodG5lc3MsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtYXg4OTI1X2JhY2tsaWdodF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtYXg4OTI1X2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IG1heDg5MjVfcGxhdGZvcm1fZGF0YSAqbWF4ODkyNV9wZGF0YTsKKwlzdHJ1Y3QgbWF4ODkyNV9iYWNrbGlnaHRfcGRhdGEgKnBkYXRhID0gTlVMTDsKKwlzdHJ1Y3QgbWF4ODkyNV9iYWNrbGlnaHRfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmw7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJY2hhciBuYW1lW01BWDg5MjVfTkFNRV9TSVpFXTsKKwl1bnNpZ25lZCBjaGFyIHZhbHVlOworCWludCByZXQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIEkvTyByZXNvdXJjZSFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAocGRldi0+ZGV2LnBhcmVudC0+cGxhdGZvcm1fZGF0YSkgeworCQltYXg4OTI1X3BkYXRhID0gcGRldi0+ZGV2LnBhcmVudC0+cGxhdGZvcm1fZGF0YTsKKwkJcGRhdGEgPSBtYXg4OTI1X3BkYXRhLT5iYWNrbGlnaHQ7CisJfQorCisJaWYgKCFwZGF0YSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwbGF0Zm9ybSBkYXRhIGlzbid0IGFzc2lnbmVkIHRvICIKKwkJCSJiYWNrbGlnaHRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1heDg5MjVfYmFja2xpZ2h0X2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzdHJuY3B5KG5hbWUsIHJlcy0+bmFtZSwgTUFYODkyNV9OQU1FX1NJWkUpOworCWRhdGEtPmNoaXAgPSBjaGlwOworCWRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyA9IDA7CisKKwlibCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIobmFtZSwgJnBkZXYtPmRldiwgZGF0YSwKKwkJCQkJJm1heDg5MjVfYmFja2xpZ2h0X29wcyk7CisJaWYgKElTX0VSUihibCkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGJhY2tsaWdodFxuIik7CisJCWtmcmVlKGRhdGEpOworCQlyZXR1cm4gUFRSX0VSUihibCk7CisJfQorCWJsLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IE1BWF9CUklHSFRORVNTOworCWJsLT5wcm9wcy5icmlnaHRuZXNzID0gTUFYX0JSSUdIVE5FU1M7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBibCk7CisKKwl2YWx1ZSA9IDA7CisJaWYgKHBkYXRhLT5seHdfc2NsKQorCQl2YWx1ZSB8PSAoMSA8PCA3KTsKKwlpZiAocGRhdGEtPmx4d19mcmVxKQorCQl2YWx1ZSB8PSAoTFdYX0ZSRVEocGRhdGEtPmx4d19mcmVxKSA8PCA0KTsKKwlpZiAocGRhdGEtPmR1YWxfc3RyaW5nKQorCQl2YWx1ZSB8PSAoMSA8PCAxKTsKKwlyZXQgPSBtYXg4OTI1X3NldF9iaXRzKGNoaXAtPmkyYywgTUFYODkyNV9XTEVEX01PREVfQ05UTCwgMHhmZSwgdmFsdWUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGJsKTsKKwlyZXR1cm4gMDsKK291dDoKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtYXg4OTI1X2JhY2tsaWdodF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbWF4ODkyNV9iYWNrbGlnaHRfZGF0YSAqZGF0YSA9IGJsX2dldF9kYXRhKGJsKTsKKworCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihibCk7CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1heDg5MjVfYmFja2xpZ2h0X2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibWF4ODkyNS1iYWNrbGlnaHQiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBtYXg4OTI1X2JhY2tsaWdodF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1heDg5MjVfYmFja2xpZ2h0X3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtYXg4OTI1X2JhY2tsaWdodF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWF4ODkyNV9iYWNrbGlnaHRfZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KG1heDg5MjVfYmFja2xpZ2h0X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbWF4ODkyNV9iYWNrbGlnaHRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtYXg4OTI1X2JhY2tsaWdodF9kcml2ZXIpOworfTsKK21vZHVsZV9leGl0KG1heDg5MjVfYmFja2xpZ2h0X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkJhY2tsaWdodCBEcml2ZXIgZm9yIE1heGltIE1BWDg5MjUiKTsKK01PRFVMRV9BVVRIT1IoIkhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0BtYXJ2ZWxsLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06bWF4ODkyNS1iYWNrbGlnaHQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnIGIvZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWcKaW5kZXggZmM3ZDliYi4uOGU4ZjE4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWcKQEAgLTM3LDYgKzM3LDcgQEAKIGNvbmZpZyBWR0FDT05fU09GVF9TQ1JPTExCQUNLX1NJWkUKICAgICAgICBpbnQgIlNjcm9sbGJhY2sgQnVmZmVyIFNpemUgKGluIEtCKSIKICAgICAgICBkZXBlbmRzIG9uIFZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sKKyAgICAgICByYW5nZSAxIDEwMjQKICAgICAgICBkZWZhdWx0ICI2NCIKICAgICAgICBoZWxwCiAgICAgICAgICBFbnRlciB0aGUgYW1vdW50IG9mIFN5c3RlbSBSQU0gdG8gYWxsb2NhdGUgZm9yIHRoZSBzY3JvbGxiYWNrCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMKaW5kZXggY2M0YmJiZS4uMTgyZGQ2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYwpAQCAtMTEyLDcgKzExMiw3IEBACiBzdGF0aWMgaW50IAkJdmdhX3NjYW5fbGluZXMJCV9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgdW5zaWduZWQgaW50IAl2Z2Ffcm9sbGVkX292ZXI7CiAKLWludCB2Z2Fjb25fdGV4dF9tb2RlX2ZvcmNlID0gMDsKK3N0YXRpYyBpbnQgdmdhY29uX3RleHRfbW9kZV9mb3JjZTsKIAogYm9vbCB2Z2Fjb25fdGV4dF9mb3JjZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCmluZGV4IDFiNjU3MzIuLjYyNTQ0N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYworKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKQEAgLTY0OSw2ICs2NDksNyBAQAogCQlnb3RvIG91dF9yZXFfcmVnaW9uczsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwY2lfZGV2LCB2cF9kZXYpOworCXBjaV9zZXRfbWFzdGVyKHBjaV9kZXYpOwogCiAJLyogd2UgdXNlIHRoZSBzdWJzeXN0ZW0gdmVuZG9yL2RldmljZSBpZCBhcyB0aGUgdmlydGlvIHZlbmRvci9kZXZpY2UKIAkgKiBpZC4gIHRoaXMgYWxsb3dzIHVzIHRvIHVzZSB0aGUgc2FtZSBQQ0kgdmVuZG9yL2RldmljZSBpZCBmb3IgYWxsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9LY29uZmlnIGIvZHJpdmVycy94ZW4vS2NvbmZpZwppbmRleCBjYWIxMDBhLi5mYWQzZGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9LY29uZmlnCisrKyBiL2RyaXZlcnMveGVuL0tjb25maWcKQEAgLTEsNiArMSw4IEBACittZW51ICJYZW4gZHJpdmVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBYRU4KKwogY29uZmlnIFhFTl9CQUxMT09OCiAJYm9vbCAiWGVuIG1lbW9yeSBiYWxsb29uIGRyaXZlciIKLQlkZXBlbmRzIG9uIFhFTgogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFRoZSBiYWxsb29uIGRyaXZlciBhbGxvd3MgdGhlIFhlbiBkb21haW4gdG8gcmVxdWVzdCBtb3JlIG1lbW9yeSBmcm9tCkBAIC0yMCw3ICsyMiw2IEBACiAKIGNvbmZpZyBYRU5fREVWX0VWVENITgogCXRyaXN0YXRlICJYZW4gL2Rldi94ZW4vZXZ0Y2huIGRldmljZSIKLQlkZXBlbmRzIG9uIFhFTgogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFRoZSBldnRjaG4gZHJpdmVyIGFsbG93cyBhIHVzZXJzcGFjZSBwcm9jZXNzIHRvIHRyaWdlciBldmVudApAQCAtMzAsNyArMzEsNiBAQAogCiBjb25maWcgWEVORlMKIAl0cmlzdGF0ZSAiWGVuIGZpbGVzeXN0ZW0iCi0JZGVwZW5kcyBvbiBYRU4KIAlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGUgeGVuIGZpbGVzeXN0ZW0gcHJvdmlkZXMgYSB3YXkgZm9yIGRvbWFpbnMgdG8gc2hhcmUKQEAgLTUzLDExICs1MywxMyBAQAogCiBjb25maWcgWEVOX1NZU19IWVBFUlZJU09SCiAgICAgICAgYm9vbCAiQ3JlYXRlIHhlbiBlbnRyaWVzIHVuZGVyIC9zeXMvaHlwZXJ2aXNvciIKLSAgICAgICBkZXBlbmRzIG9uIFhFTiAmJiBTWVNGUworICAgICAgIGRlcGVuZHMgb24gU1lTRlMKICAgICAgICBzZWxlY3QgU1lTX0hZUEVSVklTT1IKICAgICAgICBkZWZhdWx0IHkKICAgICAgICBoZWxwCiAgICAgICAgICBDcmVhdGUgZW50cmllcyB1bmRlciAvc3lzL2h5cGVydmlzb3IgZGVzY3JpYmluZyB0aGUgWGVuCiAJIGh5cGVydmlzb3IgZW52aXJvbm1lbnQuICBXaGVuIHJ1bm5pbmcgbmF0aXZlIG9yIGluIGFub3RoZXIKIAkgdmlydHVhbCBlbnZpcm9ubWVudCwgL3N5cy9oeXBlcnZpc29yIHdpbGwgc3RpbGwgYmUgcHJlc2VudCwKLQkgYnV0IHdpbGwgaGF2ZSBubyB4ZW4gY29udGVudHMuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCSBidXQgd2lsbCBoYXZlIG5vIHhlbiBjb250ZW50cy4KKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggNjRkNDRlZi4uNzQwNWYwNyAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZworKysgYi9mcy9LY29uZmlnCkBAIC0xNzcsNiArMTc3LDcgQEAKIHNvdXJjZSAiZnMvamZmczIvS2NvbmZpZyIKICMgVUJJRlMgRmlsZSBzeXN0ZW0gY29uZmlndXJhdGlvbgogc291cmNlICJmcy91Ymlmcy9LY29uZmlnIgorc291cmNlICJmcy9sb2dmcy9LY29uZmlnIgogc291cmNlICJmcy9jcmFtZnMvS2NvbmZpZyIKIHNvdXJjZSAiZnMvc3F1YXNoZnMvS2NvbmZpZyIKIHNvdXJjZSAiZnMvZnJlZXZ4ZnMvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxlIGIvZnMvTWFrZWZpbGUKaW5kZXggYWY2ZDA0Ny4uYzM2MzNhYSAxMDA2NDQKLS0tIGEvZnMvTWFrZWZpbGUKKysrIGIvZnMvTWFrZWZpbGUKQEAgLTk5LDYgKzk5LDcgQEAKIG9iai0kKENPTkZJR19VRlNfRlMpCQkrPSB1ZnMvCiBvYmotJChDT05GSUdfRUZTX0ZTKQkJKz0gZWZzLwogb2JqLSQoQ09ORklHX0pGRlMyX0ZTKQkJKz0gamZmczIvCitvYmotJChDT05GSUdfTE9HRlMpCQkrPSBsb2dmcy8KIG9iai0kKENPTkZJR19VQklGU19GUykJCSs9IHViaWZzLwogb2JqLSQoQ09ORklHX0FGRlNfRlMpCQkrPSBhZmZzLwogb2JqLSQoQ09ORklHX1JPTUZTX0ZTKQkJKz0gcm9tZnMvCmRpZmYgLS1naXQgYS9mcy9hdHRyLmMgYi9mcy9hdHRyLmMKaW5kZXggMGE2ZWE1NGMuLjA4MTVlOTMgMTAwNjQ0Ci0tLSBhL2ZzL2F0dHIuYworKysgYi9mcy9hdHRyLmMKQEAgLTgxLDcgKzgxLDcgQEAKIAlpZiAoaW5vZGUtPmlfc2l6ZSA8IG9mZnNldCkgewogCQl1bnNpZ25lZCBsb25nIGxpbWl0OwogCi0JCWxpbWl0ID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9GU0laRV0ucmxpbV9jdXI7CisJCWxpbWl0ID0gcmxpbWl0KFJMSU1JVF9GU0laRSk7CiAJCWlmIChsaW1pdCAhPSBSTElNX0lORklOSVRZICYmIG9mZnNldCA+IGxpbWl0KQogCQkJZ290byBvdXRfc2lnOwogCQlpZiAob2Zmc2V0ID4gaW5vZGUtPmlfc2ItPnNfbWF4Ynl0ZXMpCmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfYW91dC5jIGIvZnMvYmluZm10X2FvdXQuYwppbmRleCBmZGQzOTcwLi4xNWQ4MGJiIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfYW91dC5jCisrKyBiL2ZzL2JpbmZtdF9hb3V0LmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY29yZWR1bXAuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtNjAsMjYgKzYxLDYgQEAKIH0KIAogLyoKLSAqIFRoZXNlIGFyZSB0aGUgb25seSB0aGluZ3MgeW91IHNob3VsZCBkbyBvbiBhIGNvcmUtZmlsZTogdXNlIG9ubHkgdGhlc2UKLSAqIG1hY3JvcyB0byB3cml0ZSBvdXQgYWxsIHRoZSBuZWNlc3NhcnkgaW5mby4KLSAqLwotCi1zdGF0aWMgaW50IGR1bXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmFkZHIsIGludCBucikKLXsKLQlyZXR1cm4gZmlsZS0+Zl9vcC0+d3JpdGUoZmlsZSwgYWRkciwgbnIsICZmaWxlLT5mX3BvcykgPT0gbnI7Ci19Ci0KLSNkZWZpbmUgRFVNUF9XUklURShhZGRyLCBucikJXAotCWlmICghZHVtcF93cml0ZShmaWxlLCAodm9pZCAqKShhZGRyKSwgKG5yKSkpIFwKLQkJZ290byBlbmRfY29yZWR1bXA7Ci0KLSNkZWZpbmUgRFVNUF9TRUVLKG9mZnNldCkgXAotaWYgKGZpbGUtPmZfb3AtPmxsc2VlaykgeyBcCi0JaWYgKGZpbGUtPmZfb3AtPmxsc2VlayhmaWxlLChvZmZzZXQpLDApICE9IChvZmZzZXQpKSBcCi0gCQlnb3RvIGVuZF9jb3JlZHVtcDsgXAotfSBlbHNlIGZpbGUtPmZfcG9zID0gKG9mZnNldCkKLQotLyoKICAqIFJvdXRpbmUgd3JpdGVzIGEgY29yZSBkdW1wIGltYWdlIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KICAqIEN1cnJlbnRseSBvbmx5IGEgc3R1Yi1mdW5jdGlvbi4KICAqCkBAIC0xMzAsMjYgKzExMSwzMSBAQAogCiAJc2V0X2ZzKEtFUk5FTF9EUyk7CiAvKiBzdHJ1Y3QgdXNlciAqLwotCURVTVBfV1JJVEUoJmR1bXAsc2l6ZW9mKGR1bXApKTsKKwlpZiAoIWR1bXBfd3JpdGUoZmlsZSwgJmR1bXAsIHNpemVvZihkdW1wKSkpCisJCWdvdG8gZW5kX2NvcmVkdW1wOwogLyogTm93IGR1bXAgYWxsIG9mIHRoZSB1c2VyIGRhdGEuICBJbmNsdWRlIG1hbGxvY2VkIHN0dWZmIGFzIHdlbGwgKi8KLQlEVU1QX1NFRUsoUEFHRV9TSVpFKTsKKwlpZiAoIWR1bXBfc2VlayhjcHJtLT5maWxlLCBQQUdFX1NJWkUgLSBzaXplb2YoZHVtcCkpKQorCQlnb3RvIGVuZF9jb3JlZHVtcDsKIC8qIG5vdyB3ZSBzdGFydCB3cml0aW5nIG91dCB0aGUgdXNlciBzcGFjZSBpbmZvICovCiAJc2V0X2ZzKFVTRVJfRFMpOwogLyogRHVtcCB0aGUgZGF0YSBhcmVhICovCiAJaWYgKGR1bXAudV9kc2l6ZSAhPSAwKSB7CiAJCWR1bXBfc3RhcnQgPSBTVEFSVF9EQVRBKGR1bXApOwogCQlkdW1wX3NpemUgPSBkdW1wLnVfZHNpemUgPDwgUEFHRV9TSElGVDsKLQkJRFVNUF9XUklURShkdW1wX3N0YXJ0LGR1bXBfc2l6ZSk7CisJCWlmICghZHVtcF93cml0ZShmaWxlLCBkdW1wX3N0YXJ0LCBkdW1wX3NpemUpKQorCQkJZ290byBlbmRfY29yZWR1bXA7CiAJfQogLyogTm93IHByZXBhcmUgdG8gZHVtcCB0aGUgc3RhY2sgYXJlYSAqLwogCWlmIChkdW1wLnVfc3NpemUgIT0gMCkgewogCQlkdW1wX3N0YXJ0ID0gU1RBUlRfU1RBQ0soZHVtcCk7CiAJCWR1bXBfc2l6ZSA9IGR1bXAudV9zc2l6ZSA8PCBQQUdFX1NISUZUOwotCQlEVU1QX1dSSVRFKGR1bXBfc3RhcnQsZHVtcF9zaXplKTsKKwkJaWYgKCFkdW1wX3dyaXRlKGZpbGUsIGR1bXBfc3RhcnQsIGR1bXBfc2l6ZSkpCisJCQlnb3RvIGVuZF9jb3JlZHVtcDsKIAl9CiAvKiBGaW5hbGx5IGR1bXAgdGhlIHRhc2sgc3RydWN0LiAgTm90IGJlIHVzZWQgYnkgZ2RiLCBidXQgY291bGQgYmUgdXNlZnVsICovCiAJc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JRFVNUF9XUklURShjdXJyZW50LHNpemVvZigqY3VycmVudCkpOworCWlmICghZHVtcF93cml0ZShmaWxlLCBjdXJyZW50LCBzaXplb2YoKmN1cnJlbnQpKSkKKwkJZ290byBlbmRfY29yZWR1bXA7CiBlbmRfY29yZWR1bXA6CiAJc2V0X2ZzKGZzKTsKIAlyZXR1cm4gaGFzX2R1bXBlZDsKQEAgLTI0Nyw3ICsyMzMsNyBAQAogCSAqIHNpemUgbGltaXRzIGltcG9zZWQgb24gdGhlbSBieSBjcmVhdGluZyBwcm9ncmFtcyB3aXRoIGxhcmdlCiAJICogYXJyYXlzIGluIHRoZSBkYXRhIG9yIGJzcy4KIAkgKi8KLQlybGltID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9EQVRBXS5ybGltX2N1cjsKKwlybGltID0gcmxpbWl0KFJMSU1JVF9EQVRBKTsKIAlpZiAocmxpbSA+PSBSTElNX0lORklOSVRZKQogCQlybGltID0gfjA7CiAJaWYgKGV4LmFfZGF0YSArIGV4LmFfYnNzID4gcmxpbSkKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9lbGYuYyBiL2ZzL2JpbmZtdF9lbGYuYwppbmRleCBmZDViMmVhLi41MzVlNzYzIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZWxmLmMKKysrIGIvZnMvYmluZm10X2VsZi5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmLmg+CiAjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvcmVkdW1wLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGFyYW0uaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtMTA4NSwzNiArMTA4Niw2IEBACiAgKiBNb2RlbGxlZCBvbiBmcy9leGVjLmM6YW91dF9jb3JlX2R1bXAoKQogICogSmVyZW15IEZpdHpoYXJkaW5nZSA8amVyZW15QHN3Lm96LmF1PgogICovCi0vKgotICogVGhlc2UgYXJlIHRoZSBvbmx5IHRoaW5ncyB5b3Ugc2hvdWxkIGRvIG9uIGEgY29yZS1maWxlOiB1c2Ugb25seSB0aGVzZQotICogZnVuY3Rpb25zIHRvIHdyaXRlIG91dCBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvLgotICovCi1zdGF0aWMgaW50IGR1bXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHZvaWQgKmFkZHIsIGludCBucikKLXsKLQlyZXR1cm4gZmlsZS0+Zl9vcC0+d3JpdGUoZmlsZSwgYWRkciwgbnIsICZmaWxlLT5mX3BvcykgPT0gbnI7Ci19Ci0KLXN0YXRpYyBpbnQgZHVtcF9zZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2ZmKQotewotCWlmIChmaWxlLT5mX29wLT5sbHNlZWsgJiYgZmlsZS0+Zl9vcC0+bGxzZWVrICE9IG5vX2xsc2VlaykgewotCQlpZiAoZmlsZS0+Zl9vcC0+bGxzZWVrKGZpbGUsIG9mZiwgU0VFS19DVVIpIDwgMCkKLQkJCXJldHVybiAwOwotCX0gZWxzZSB7Ci0JCWNoYXIgKmJ1ZiA9IChjaGFyICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwotCQlpZiAoIWJ1ZikKLQkJCXJldHVybiAwOwotCQl3aGlsZSAob2ZmID4gMCkgewotCQkJdW5zaWduZWQgbG9uZyBuID0gb2ZmOwotCQkJaWYgKG4gPiBQQUdFX1NJWkUpCi0JCQkJbiA9IFBBR0VfU0laRTsKLQkJCWlmICghZHVtcF93cml0ZShmaWxlLCBidWYsIG4pKQotCQkJCXJldHVybiAwOwotCQkJb2ZmIC09IG47Ci0JCX0KLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1Zik7Ci0JfQotCXJldHVybiAxOwotfQogCiAvKgogICogRGVjaWRlIHdoYXQgdG8gZHVtcCBvZiBhIHNlZ21lbnQsIHBhcnQsIGFsbCBvciBub25lLgpAQCAtMTI0OSwxMSArMTIyMCw2IEBACiB9CiAjdW5kZWYgRFVNUF9XUklURQogCi0jZGVmaW5lIERVTVBfV1JJVEUoYWRkciwgbnIpCQkJCVwKLQlpZiAoKHNpemUgKz0gKG5yKSkgPiBjcHJtLT5saW1pdCB8fAkJXAotCSAgICAhZHVtcF93cml0ZShjcHJtLT5maWxlLCAoYWRkciksIChucikpKQlcCi0JCWdvdG8gZW5kX2NvcmVkdW1wOwotCiBzdGF0aWMgdm9pZCBmaWxsX2VsZl9oZWFkZXIoc3RydWN0IGVsZmhkciAqZWxmLCBpbnQgc2VncywKIAkJCSAgICB1MTYgbWFjaGluZSwgdTMyIGZsYWdzLCB1OCBvc2FiaSkKIHsKQEAgLTE4NzIsNiArMTgzOCwzNCBAQAogCXJldHVybiBnYXRlX3ZtYTsKIH0KIAorc3RhdGljIHZvaWQgZmlsbF9leHRudW1faW5mbyhzdHJ1Y3QgZWxmaGRyICplbGYsIHN0cnVjdCBlbGZfc2hkciAqc2hkcjRleHRudW0sCisJCQkgICAgIGVsZl9hZGRyX3QgZV9zaG9mZiwgaW50IHNlZ3MpCit7CisJZWxmLT5lX3Nob2ZmID0gZV9zaG9mZjsKKwllbGYtPmVfc2hlbnRzaXplID0gc2l6ZW9mKCpzaGRyNGV4dG51bSk7CisJZWxmLT5lX3NobnVtID0gMTsKKwllbGYtPmVfc2hzdHJuZHggPSBTSE5fVU5ERUY7CisKKwltZW1zZXQoc2hkcjRleHRudW0sIDAsIHNpemVvZigqc2hkcjRleHRudW0pKTsKKworCXNoZHI0ZXh0bnVtLT5zaF90eXBlID0gU0hUX05VTEw7CisJc2hkcjRleHRudW0tPnNoX3NpemUgPSBlbGYtPmVfc2hudW07CisJc2hkcjRleHRudW0tPnNoX2xpbmsgPSBlbGYtPmVfc2hzdHJuZHg7CisJc2hkcjRleHRudW0tPnNoX2luZm8gPSBzZWdzOworfQorCitzdGF0aWMgc2l6ZV90IGVsZl9jb3JlX3ZtYV9kYXRhX3NpemUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnYXRlX3ZtYSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbW1fZmxhZ3MpCit7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJc2l6ZV90IHNpemUgPSAwOworCisJZm9yICh2bWEgPSBmaXJzdF92bWEoY3VycmVudCwgZ2F0ZV92bWEpOyB2bWEgIT0gTlVMTDsKKwkgICAgIHZtYSA9IG5leHRfdm1hKHZtYSwgZ2F0ZV92bWEpKQorCQlzaXplICs9IHZtYV9kdW1wX3NpemUodm1hLCBtbV9mbGFncyk7CisJcmV0dXJuIHNpemU7Cit9CisKIC8qCiAgKiBBY3R1YWwgZHVtcGVyCiAgKgpAQCAtMTg4OCw4ICsxODgyLDExIEBACiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsICpnYXRlX3ZtYTsKIAlzdHJ1Y3QgZWxmaGRyICplbGYgPSBOVUxMOwogCWxvZmZfdCBvZmZzZXQgPSAwLCBkYXRhb2ZmLCBmb2Zmc2V0OwotCXVuc2lnbmVkIGxvbmcgbW1fZmxhZ3M7CiAJc3RydWN0IGVsZl9ub3RlX2luZm8gaW5mbzsKKwlzdHJ1Y3QgZWxmX3BoZHIgKnBoZHI0bm90ZSA9IE5VTEw7CisJc3RydWN0IGVsZl9zaGRyICpzaGRyNGV4dG51bSA9IE5VTEw7CisJRWxmX0hhbGYgZV9waG51bTsKKwllbGZfYWRkcl90IGVfc2hvZmY7CiAKIAkvKgogCSAqIFdlIG5vIGxvbmdlciBzdG9wIGFsbCBWTSBvcGVyYXRpb25zLgpAQCAtMTkxMiwyMCArMTkwOSwyNSBAQAogCSAqIFBsZWFzZSBjaGVjayBERUZBVUxUX01BWF9NQVBfQ09VTlQgZGVmaW5pdGlvbiB3aGVuIHlvdSBtb2RpZnkgaGVyZS4KIAkgKi8KIAlzZWdzID0gY3VycmVudC0+bW0tPm1hcF9jb3VudDsKLSNpZmRlZiBFTEZfQ09SRV9FWFRSQV9QSERSUwotCXNlZ3MgKz0gRUxGX0NPUkVfRVhUUkFfUEhEUlM7Ci0jZW5kaWYKKwlzZWdzICs9IGVsZl9jb3JlX2V4dHJhX3BoZHJzKCk7CiAKIAlnYXRlX3ZtYSA9IGdldF9nYXRlX3ZtYShjdXJyZW50KTsKIAlpZiAoZ2F0ZV92bWEgIT0gTlVMTCkKIAkJc2VncysrOwogCisJLyogZm9yIG5vdGVzIHNlY3Rpb24gKi8KKwlzZWdzKys7CisKKwkvKiBJZiBzZWdzID4gUE5fWE5VTSgweGZmZmYpLCB0aGVuIGVfcGhudW0gb3ZlcmZsb3dzLiBUbyBhdm9pZAorCSAqIHRoaXMsIGtlcm5lbCBzdXBwb3J0cyBleHRlbmRlZCBudW1iZXJpbmcuIEhhdmUgYSBsb29rIGF0CisJICogaW5jbHVkZS9saW51eC9lbGYuaCBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4gKi8KKwllX3BobnVtID0gc2VncyA+IFBOX1hOVU0gPyBQTl9YTlVNIDogc2VnczsKKwogCS8qCiAJICogQ29sbGVjdCBhbGwgdGhlIG5vbi1tZW1vcnkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2Nlc3MgZm9yIHRoZQogCSAqIG5vdGVzLiAgVGhpcyBhbHNvIHNldHMgdXAgdGhlIGZpbGUgaGVhZGVyLgogCSAqLwotCWlmICghZmlsbF9ub3RlX2luZm8oZWxmLCBzZWdzICsgMSwgLyogaW5jbHVkaW5nIG5vdGVzIHNlY3Rpb24gKi8KLQkJCSAgICAmaW5mbywgY3BybS0+c2lnbnIsIGNwcm0tPnJlZ3MpKQorCWlmICghZmlsbF9ub3RlX2luZm8oZWxmLCBlX3BobnVtLCAmaW5mbywgY3BybS0+c2lnbnIsIGNwcm0tPnJlZ3MpKQogCQlnb3RvIGNsZWFudXA7CiAKIAloYXNfZHVtcGVkID0gMTsKQEAgLTE5MzQsMzEgKzE5MzYsNDcgQEAKIAlmcyA9IGdldF9mcygpOwogCXNldF9mcyhLRVJORUxfRFMpOwogCi0JRFVNUF9XUklURShlbGYsIHNpemVvZigqZWxmKSk7CiAJb2Zmc2V0ICs9IHNpemVvZigqZWxmKTsJCQkJLyogRWxmIGhlYWRlciAqLwotCW9mZnNldCArPSAoc2VncyArIDEpICogc2l6ZW9mKHN0cnVjdCBlbGZfcGhkcik7IC8qIFByb2dyYW0gaGVhZGVycyAqLworCW9mZnNldCArPSBzZWdzICogc2l6ZW9mKHN0cnVjdCBlbGZfcGhkcik7CS8qIFByb2dyYW0gaGVhZGVycyAqLwogCWZvZmZzZXQgPSBvZmZzZXQ7CiAKIAkvKiBXcml0ZSBub3RlcyBwaGRyIGVudHJ5ICovCiAJewotCQlzdHJ1Y3QgZWxmX3BoZHIgcGhkcjsKIAkJc2l6ZV90IHN6ID0gZ2V0X25vdGVfaW5mb19zaXplKCZpbmZvKTsKIAogCQlzeiArPSBlbGZfY29yZWR1bXBfZXh0cmFfbm90ZXNfc2l6ZSgpOwogCi0JCWZpbGxfZWxmX25vdGVfcGhkcigmcGhkciwgc3osIG9mZnNldCk7CisJCXBoZHI0bm90ZSA9IGttYWxsb2Moc2l6ZW9mKCpwaGRyNG5vdGUpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwaGRyNG5vdGUpCisJCQlnb3RvIGVuZF9jb3JlZHVtcDsKKworCQlmaWxsX2VsZl9ub3RlX3BoZHIocGhkcjRub3RlLCBzeiwgb2Zmc2V0KTsKIAkJb2Zmc2V0ICs9IHN6OwotCQlEVU1QX1dSSVRFKCZwaGRyLCBzaXplb2YocGhkcikpOwogCX0KIAogCWRhdGFvZmYgPSBvZmZzZXQgPSByb3VuZHVwKG9mZnNldCwgRUxGX0VYRUNfUEFHRVNJWkUpOwogCi0JLyoKLQkgKiBXZSBtdXN0IHVzZSB0aGUgc2FtZSBtbS0+ZmxhZ3Mgd2hpbGUgZHVtcGluZyBjb3JlIHRvIGF2b2lkCi0JICogaW5jb25zaXN0ZW5jeSBiZXR3ZWVuIHRoZSBwcm9ncmFtIGhlYWRlcnMgYW5kIGJvZGllcywgb3RoZXJ3aXNlIGFuCi0JICogdW51c2FibGUgY29yZSBmaWxlIGNhbiBiZSBnZW5lcmF0ZWQuCi0JICovCi0JbW1fZmxhZ3MgPSBjdXJyZW50LT5tbS0+ZmxhZ3M7CisJb2Zmc2V0ICs9IGVsZl9jb3JlX3ZtYV9kYXRhX3NpemUoZ2F0ZV92bWEsIGNwcm0tPm1tX2ZsYWdzKTsKKwlvZmZzZXQgKz0gZWxmX2NvcmVfZXh0cmFfZGF0YV9zaXplKCk7CisJZV9zaG9mZiA9IG9mZnNldDsKKworCWlmIChlX3BobnVtID09IFBOX1hOVU0pIHsKKwkJc2hkcjRleHRudW0gPSBrbWFsbG9jKHNpemVvZigqc2hkcjRleHRudW0pLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzaGRyNGV4dG51bSkKKwkJCWdvdG8gZW5kX2NvcmVkdW1wOworCQlmaWxsX2V4dG51bV9pbmZvKGVsZiwgc2hkcjRleHRudW0sIGVfc2hvZmYsIHNlZ3MpOworCX0KKworCW9mZnNldCA9IGRhdGFvZmY7CisKKwlzaXplICs9IHNpemVvZigqZWxmKTsKKwlpZiAoc2l6ZSA+IGNwcm0tPmxpbWl0IHx8ICFkdW1wX3dyaXRlKGNwcm0tPmZpbGUsIGVsZiwgc2l6ZW9mKCplbGYpKSkKKwkJZ290byBlbmRfY29yZWR1bXA7CisKKwlzaXplICs9IHNpemVvZigqcGhkcjRub3RlKTsKKwlpZiAoc2l6ZSA+IGNwcm0tPmxpbWl0CisJICAgIHx8ICFkdW1wX3dyaXRlKGNwcm0tPmZpbGUsIHBoZHI0bm90ZSwgc2l6ZW9mKCpwaGRyNG5vdGUpKSkKKwkJZ290byBlbmRfY29yZWR1bXA7CiAKIAkvKiBXcml0ZSBwcm9ncmFtIGhlYWRlcnMgZm9yIHNlZ21lbnRzIGR1bXAgKi8KIAlmb3IgKHZtYSA9IGZpcnN0X3ZtYShjdXJyZW50LCBnYXRlX3ZtYSk7IHZtYSAhPSBOVUxMOwpAQCAtMTk2OSw3ICsxOTg3LDcgQEAKIAkJcGhkci5wX29mZnNldCA9IG9mZnNldDsKIAkJcGhkci5wX3ZhZGRyID0gdm1hLT52bV9zdGFydDsKIAkJcGhkci5wX3BhZGRyID0gMDsKLQkJcGhkci5wX2ZpbGVzeiA9IHZtYV9kdW1wX3NpemUodm1hLCBtbV9mbGFncyk7CisJCXBoZHIucF9maWxlc3ogPSB2bWFfZHVtcF9zaXplKHZtYSwgY3BybS0+bW1fZmxhZ3MpOwogCQlwaGRyLnBfbWVtc3ogPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7CiAJCW9mZnNldCArPSBwaGRyLnBfZmlsZXN6OwogCQlwaGRyLnBfZmxhZ3MgPSB2bWEtPnZtX2ZsYWdzICYgVk1fUkVBRCA/IFBGX1IgOiAwOwpAQCAtMTk3OSwxMiArMTk5NywxNCBAQAogCQkJcGhkci5wX2ZsYWdzIHw9IFBGX1g7CiAJCXBoZHIucF9hbGlnbiA9IEVMRl9FWEVDX1BBR0VTSVpFOwogCi0JCURVTVBfV1JJVEUoJnBoZHIsIHNpemVvZihwaGRyKSk7CisJCXNpemUgKz0gc2l6ZW9mKHBoZHIpOworCQlpZiAoc2l6ZSA+IGNwcm0tPmxpbWl0CisJCSAgICB8fCAhZHVtcF93cml0ZShjcHJtLT5maWxlLCAmcGhkciwgc2l6ZW9mKHBoZHIpKSkKKwkJCWdvdG8gZW5kX2NvcmVkdW1wOwogCX0KIAotI2lmZGVmIEVMRl9DT1JFX1dSSVRFX0VYVFJBX1BIRFJTCi0JRUxGX0NPUkVfV1JJVEVfRVhUUkFfUEhEUlM7Ci0jZW5kaWYKKwlpZiAoIWVsZl9jb3JlX3dyaXRlX2V4dHJhX3BoZHJzKGNwcm0tPmZpbGUsIG9mZnNldCwgJnNpemUsIGNwcm0tPmxpbWl0KSkKKwkJZ290byBlbmRfY29yZWR1bXA7CiAKICAJLyogd3JpdGUgb3V0IHRoZSBub3RlcyBzZWN0aW9uICovCiAJaWYgKCF3cml0ZV9ub3RlX2luZm8oJmluZm8sIGNwcm0tPmZpbGUsICZmb2Zmc2V0KSkKQEAgLTIwMDIsNyArMjAyMiw3IEBACiAJCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAkJdW5zaWduZWQgbG9uZyBlbmQ7CiAKLQkJZW5kID0gdm1hLT52bV9zdGFydCArIHZtYV9kdW1wX3NpemUodm1hLCBtbV9mbGFncyk7CisJCWVuZCA9IHZtYS0+dm1fc3RhcnQgKyB2bWFfZHVtcF9zaXplKHZtYSwgY3BybS0+bW1fZmxhZ3MpOwogCiAJCWZvciAoYWRkciA9IHZtYS0+dm1fc3RhcnQ7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CiAJCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKQEAgLTIwMjMsMTUgKzIwNDMsMjQgQEAKIAkJfQogCX0KIAotI2lmZGVmIEVMRl9DT1JFX1dSSVRFX0VYVFJBX0RBVEEKLQlFTEZfQ09SRV9XUklURV9FWFRSQV9EQVRBOwotI2VuZGlmCisJaWYgKCFlbGZfY29yZV93cml0ZV9leHRyYV9kYXRhKGNwcm0tPmZpbGUsICZzaXplLCBjcHJtLT5saW1pdCkpCisJCWdvdG8gZW5kX2NvcmVkdW1wOworCisJaWYgKGVfcGhudW0gPT0gUE5fWE5VTSkgeworCQlzaXplICs9IHNpemVvZigqc2hkcjRleHRudW0pOworCQlpZiAoc2l6ZSA+IGNwcm0tPmxpbWl0CisJCSAgICB8fCAhZHVtcF93cml0ZShjcHJtLT5maWxlLCBzaGRyNGV4dG51bSwKKwkJCQkgICBzaXplb2YoKnNoZHI0ZXh0bnVtKSkpCisJCQlnb3RvIGVuZF9jb3JlZHVtcDsKKwl9CiAKIGVuZF9jb3JlZHVtcDoKIAlzZXRfZnMoZnMpOwogCiBjbGVhbnVwOgogCWZyZWVfbm90ZV9pbmZvKCZpbmZvKTsKKwlrZnJlZShzaGRyNGV4dG51bSk7CisJa2ZyZWUocGhkcjRub3RlKTsKIAlrZnJlZShlbGYpOwogb3V0OgogCXJldHVybiBoYXNfZHVtcGVkOwpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X2VsZl9mZHBpYy5jIGIvZnMvYmluZm10X2VsZl9mZHBpYy5jCmluZGV4IDE4ZDc3MjkuLjZkNmExNmMgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYworKysgYi9mcy9iaW5mbXRfZWxmX2ZkcGljLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lbGYuaD4KICNpbmNsdWRlIDxsaW51eC9lbGYtZmRwaWMuaD4KICNpbmNsdWRlIDxsaW51eC9lbGZjb3JlLmg+CisjaW5jbHVkZSA8bGludXgvY29yZWR1bXAuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CkBAIC0xMjE2LDI2ICsxMjE3LDYgQEAKICNpZmRlZiBDT05GSUdfRUxGX0NPUkUKIAogLyoKLSAqIFRoZXNlIGFyZSB0aGUgb25seSB0aGluZ3MgeW91IHNob3VsZCBkbyBvbiBhIGNvcmUtZmlsZTogdXNlIG9ubHkgdGhlc2UKLSAqIGZ1bmN0aW9ucyB0byB3cml0ZSBvdXQgYWxsIHRoZSBuZWNlc3NhcnkgaW5mby4KLSAqLwotc3RhdGljIGludCBkdW1wX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICphZGRyLCBpbnQgbnIpCi17Ci0JcmV0dXJuIGZpbGUtPmZfb3AtPndyaXRlKGZpbGUsIGFkZHIsIG5yLCAmZmlsZS0+Zl9wb3MpID09IG5yOwotfQotCi1zdGF0aWMgaW50IGR1bXBfc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZikKLXsKLQlpZiAoZmlsZS0+Zl9vcC0+bGxzZWVrKSB7Ci0JCWlmIChmaWxlLT5mX29wLT5sbHNlZWsoZmlsZSwgb2ZmLCBTRUVLX1NFVCkgIT0gb2ZmKQotCQkJcmV0dXJuIDA7Ci0JfSBlbHNlIHsKLQkJZmlsZS0+Zl9wb3MgPSBvZmY7Ci0JfQotCXJldHVybiAxOwotfQotCi0vKgogICogRGVjaWRlIHdoZXRoZXIgYSBzZWdtZW50IGlzIHdvcnRoIGR1bXBpbmc7IGRlZmF1bHQgaXMgeWVzIHRvIGJlCiAgKiBzdXJlIChtaXNzaW5nIGluZm8gaXMgd29yc2UgdGhhbiB0b28gbXVjaDsgZXRjKS4KICAqIFBlcnNvbmFsbHkgSSdkIGluY2x1ZGUgZXZlcnl0aGluZywgYW5kIHVzZSB0aGUgY29yZWR1bXAgbGltaXQuLi4KQEAgLTEzMTMsMzUgKzEyOTQsMzUgQEAKIAogLyogI2RlZmluZSBERUJVRyAqLwogCi0jZGVmaW5lIERVTVBfV1JJVEUoYWRkciwgbnIpCVwKLQlkbyB7IGlmICghZHVtcF93cml0ZShmaWxlLCAoYWRkciksIChucikpKSByZXR1cm4gMDsgfSB3aGlsZSgwKQotI2RlZmluZSBEVU1QX1NFRUsob2ZmKQlcCi0JZG8geyBpZiAoIWR1bXBfc2VlayhmaWxlLCAob2ZmKSkpIHJldHVybiAwOyB9IHdoaWxlKDApCisjZGVmaW5lIERVTVBfV1JJVEUoYWRkciwgbnIsIGZvZmZzZXQpCVwKKwlkbyB7IGlmICghZHVtcF93cml0ZShmaWxlLCAoYWRkciksIChucikpKSByZXR1cm4gMDsgKmZvZmZzZXQgKz0gKG5yKTsgfSB3aGlsZSgwKQogCi1zdGF0aWMgaW50IHdyaXRlbm90ZShzdHJ1Y3QgbWVtZWxmbm90ZSAqbWVuLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgYWxpZ25maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3QgKmZvZmZzZXQpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgYnVmWzRdID0geyAwLCB9OworCURVTVBfV1JJVEUoYnVmLCByb3VuZHVwKCpmb2Zmc2V0LCA0KSAtICpmb2Zmc2V0LCBmb2Zmc2V0KTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB3cml0ZW5vdGUoc3RydWN0IG1lbWVsZm5vdGUgKm1lbiwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQlsb2ZmX3QgKmZvZmZzZXQpCiB7CiAJc3RydWN0IGVsZl9ub3RlIGVuOwotCiAJZW4ubl9uYW1lc3ogPSBzdHJsZW4obWVuLT5uYW1lKSArIDE7CiAJZW4ubl9kZXNjc3ogPSBtZW4tPmRhdGFzejsKIAllbi5uX3R5cGUgPSBtZW4tPnR5cGU7CiAKLQlEVU1QX1dSSVRFKCZlbiwgc2l6ZW9mKGVuKSk7Ci0JRFVNUF9XUklURShtZW4tPm5hbWUsIGVuLm5fbmFtZXN6KTsKLQkvKiBYWFggLSBjYXN0IGZyb20gbG9uZyBsb25nIHRvIGxvbmcgdG8gYXZvaWQgbmVlZCBmb3IgbGliZ2NjLmEgKi8KLQlEVU1QX1NFRUsocm91bmR1cCgodW5zaWduZWQgbG9uZylmaWxlLT5mX3BvcywgNCkpOwkvKiBYWFggKi8KLQlEVU1QX1dSSVRFKG1lbi0+ZGF0YSwgbWVuLT5kYXRhc3opOwotCURVTVBfU0VFSyhyb3VuZHVwKCh1bnNpZ25lZCBsb25nKWZpbGUtPmZfcG9zLCA0KSk7CS8qIFhYWCAqLworCURVTVBfV1JJVEUoJmVuLCBzaXplb2YoZW4pLCBmb2Zmc2V0KTsKKwlEVU1QX1dSSVRFKG1lbi0+bmFtZSwgZW4ubl9uYW1lc3osIGZvZmZzZXQpOworCWlmICghYWxpZ25maWxlKGZpbGUsIGZvZmZzZXQpKQorCQlyZXR1cm4gMDsKKwlEVU1QX1dSSVRFKG1lbi0+ZGF0YSwgbWVuLT5kYXRhc3osIGZvZmZzZXQpOworCWlmICghYWxpZ25maWxlKGZpbGUsIGZvZmZzZXQpKQorCQlyZXR1cm4gMDsKIAogCXJldHVybiAxOwogfQogI3VuZGVmIERVTVBfV1JJVEUKLSN1bmRlZiBEVU1QX1NFRUsKLQotI2RlZmluZSBEVU1QX1dSSVRFKGFkZHIsIG5yKQkJCQlcCi0JaWYgKChzaXplICs9IChucikpID4gY3BybS0+bGltaXQgfHwJCVwKLQkgICAgIWR1bXBfd3JpdGUoY3BybS0+ZmlsZSwgKGFkZHIpLCAobnIpKSkJXAotCQlnb3RvIGVuZF9jb3JlZHVtcDsKIAogc3RhdGljIGlubGluZSB2b2lkIGZpbGxfZWxmX2ZkcGljX2hlYWRlcihzdHJ1Y3QgZWxmaGRyICplbGYsIGludCBzZWdzKQogewpAQCAtMTUyNCw2ICsxNTA1LDIyIEBACiAJcmV0dXJuIHN6OwogfQogCitzdGF0aWMgdm9pZCBmaWxsX2V4dG51bV9pbmZvKHN0cnVjdCBlbGZoZHIgKmVsZiwgc3RydWN0IGVsZl9zaGRyICpzaGRyNGV4dG51bSwKKwkJCSAgICAgZWxmX2FkZHJfdCBlX3Nob2ZmLCBpbnQgc2VncykKK3sKKwllbGYtPmVfc2hvZmYgPSBlX3Nob2ZmOworCWVsZi0+ZV9zaGVudHNpemUgPSBzaXplb2YoKnNoZHI0ZXh0bnVtKTsKKwllbGYtPmVfc2hudW0gPSAxOworCWVsZi0+ZV9zaHN0cm5keCA9IFNITl9VTkRFRjsKKworCW1lbXNldChzaGRyNGV4dG51bSwgMCwgc2l6ZW9mKCpzaGRyNGV4dG51bSkpOworCisJc2hkcjRleHRudW0tPnNoX3R5cGUgPSBTSFRfTlVMTDsKKwlzaGRyNGV4dG51bS0+c2hfc2l6ZSA9IGVsZi0+ZV9zaG51bTsKKwlzaGRyNGV4dG51bS0+c2hfbGluayA9IGVsZi0+ZV9zaHN0cm5keDsKKwlzaGRyNGV4dG51bS0+c2hfaW5mbyA9IHNlZ3M7Cit9CisKIC8qCiAgKiBkdW1wIHRoZSBzZWdtZW50cyBmb3IgYW4gTU1VIHByb2Nlc3MKICAqLwpAQCAtMTU1Miw3ICsxNTQ5LDcgQEAKIAkJCQkJZXJyID0gLUVJTzsKIAkJCQlrdW5tYXAocGFnZSk7CiAJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCQkJfSBlbHNlIGlmICghZHVtcF9zZWVrKGZpbGUsIGZpbGUtPmZfcG9zICsgUEFHRV9TSVpFKSkKKwkJCX0gZWxzZSBpZiAoIWR1bXBfc2VlayhmaWxlLCBQQUdFX1NJWkUpKQogCQkJCWVyciA9IC1FRkJJRzsKIAkJCWlmIChlcnIpCiAJCQkJZ290byBvdXQ7CkBAIC0xNTg4LDYgKzE1ODUsMTcgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgc2l6ZV90IGVsZl9jb3JlX3ZtYV9kYXRhX3NpemUodW5zaWduZWQgbG9uZyBtbV9mbGFncykKK3sKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwlzaXplX3Qgc2l6ZSA9IDA7CisKKwlmb3IgKHZtYSA9IGN1cnJlbnQtPm1tLT5tbWFwOyB2bWE7IHZtYS0+dm1fbmV4dCkKKwkJaWYgKG1heWR1bXAodm1hLCBtbV9mbGFncykpCisJCQlzaXplICs9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKKwlyZXR1cm4gc2l6ZTsKK30KKwogLyoKICAqIEFjdHVhbCBkdW1wZXIKICAqCkBAIC0xNjA1LDcgKzE2MTMsNyBAQAogCWludCBpOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCXN0cnVjdCBlbGZoZHIgKmVsZiA9IE5VTEw7Ci0JbG9mZl90IG9mZnNldCA9IDAsIGRhdGFvZmY7CisJbG9mZl90IG9mZnNldCA9IDAsIGRhdGFvZmYsIGZvZmZzZXQ7CiAJaW50IG51bW5vdGU7CiAJc3RydWN0IG1lbWVsZm5vdGUgKm5vdGVzID0gTlVMTDsKIAlzdHJ1Y3QgZWxmX3Byc3RhdHVzICpwcnN0YXR1cyA9IE5VTEw7CS8qIE5UX1BSU1RBVFVTICovCkBAIC0xNjE4LDcgKzE2MjYsMTAgQEAKICNlbmRpZgogCWludCB0aHJlYWRfc3RhdHVzX3NpemUgPSAwOwogCWVsZl9hZGRyX3QgKmF1eHY7Ci0JdW5zaWduZWQgbG9uZyBtbV9mbGFnczsKKwlzdHJ1Y3QgZWxmX3BoZHIgKnBoZHI0bm90ZSA9IE5VTEw7CisJc3RydWN0IGVsZl9zaGRyICpzaGRyNGV4dG51bSA9IE5VTEw7CisJRWxmX0hhbGYgZV9waG51bTsKKwllbGZfYWRkcl90IGVfc2hvZmY7CiAKIAkvKgogCSAqIFdlIG5vIGxvbmdlciBzdG9wIGFsbCBWTSBvcGVyYXRpb25zLgpAQCAtMTY4MywxMiArMTY5NCwxOCBAQAogCWVsZl9jb3JlX2NvcHlfcmVncygmcHJzdGF0dXMtPnByX3JlZywgY3BybS0+cmVncyk7CiAKIAlzZWdzID0gY3VycmVudC0+bW0tPm1hcF9jb3VudDsKLSNpZmRlZiBFTEZfQ09SRV9FWFRSQV9QSERSUwotCXNlZ3MgKz0gRUxGX0NPUkVfRVhUUkFfUEhEUlM7Ci0jZW5kaWYKKwlzZWdzICs9IGVsZl9jb3JlX2V4dHJhX3BoZHJzKCk7CisKKwkvKiBmb3Igbm90ZXMgc2VjdGlvbiAqLworCXNlZ3MrKzsKKworCS8qIElmIHNlZ3MgPiBQTl9YTlVNKDB4ZmZmZiksIHRoZW4gZV9waG51bSBvdmVyZmxvd3MuIFRvIGF2b2lkCisJICogdGhpcywga2VybmVsIHN1cHBvcnRzIGV4dGVuZGVkIG51bWJlcmluZy4gSGF2ZSBhIGxvb2sgYXQKKwkgKiBpbmNsdWRlL2xpbnV4L2VsZi5oIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLiAqLworCWVfcGhudW0gPSBzZWdzID4gUE5fWE5VTSA/IFBOX1hOVU0gOiBzZWdzOwogCiAJLyogU2V0IHVwIGhlYWRlciAqLwotCWZpbGxfZWxmX2ZkcGljX2hlYWRlcihlbGYsIHNlZ3MgKyAxKTsJLyogaW5jbHVkaW5nIG5vdGVzIHNlY3Rpb24gKi8KKwlmaWxsX2VsZl9mZHBpY19oZWFkZXIoZWxmLCBlX3BobnVtKTsKIAogCWhhc19kdW1wZWQgPSAxOwogCWN1cnJlbnQtPmZsYWdzIHw9IFBGX0RVTVBDT1JFOwpAQCAtMTcyNywxMyArMTc0NCwxMiBAQAogCWZzID0gZ2V0X2ZzKCk7CiAJc2V0X2ZzKEtFUk5FTF9EUyk7CiAKLQlEVU1QX1dSSVRFKGVsZiwgc2l6ZW9mKCplbGYpKTsKIAlvZmZzZXQgKz0gc2l6ZW9mKCplbGYpOwkJCQkvKiBFbGYgaGVhZGVyICovCi0Jb2Zmc2V0ICs9IChzZWdzKzEpICogc2l6ZW9mKHN0cnVjdCBlbGZfcGhkcik7CS8qIFByb2dyYW0gaGVhZGVycyAqLworCW9mZnNldCArPSBzZWdzICogc2l6ZW9mKHN0cnVjdCBlbGZfcGhkcik7CS8qIFByb2dyYW0gaGVhZGVycyAqLworCWZvZmZzZXQgPSBvZmZzZXQ7CiAKIAkvKiBXcml0ZSBub3RlcyBwaGRyIGVudHJ5ICovCiAJewotCQlzdHJ1Y3QgZWxmX3BoZHIgcGhkcjsKIAkJaW50IHN6ID0gMDsKIAogCQlmb3IgKGkgPSAwOyBpIDwgbnVtbm90ZTsgaSsrKQpAQCAtMTc0MSwyMCArMTc1NywzOCBAQAogCiAJCXN6ICs9IHRocmVhZF9zdGF0dXNfc2l6ZTsKIAotCQlmaWxsX2VsZl9ub3RlX3BoZHIoJnBoZHIsIHN6LCBvZmZzZXQpOworCQlwaGRyNG5vdGUgPSBrbWFsbG9jKHNpemVvZigqcGhkcjRub3RlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGhkcjRub3RlKQorCQkJZ290byBlbmRfY29yZWR1bXA7CisKKwkJZmlsbF9lbGZfbm90ZV9waGRyKHBoZHI0bm90ZSwgc3osIG9mZnNldCk7CiAJCW9mZnNldCArPSBzejsKLQkJRFVNUF9XUklURSgmcGhkciwgc2l6ZW9mKHBoZHIpKTsKIAl9CiAKIAkvKiBQYWdlLWFsaWduIGR1bXBlZCBkYXRhICovCiAJZGF0YW9mZiA9IG9mZnNldCA9IHJvdW5kdXAob2Zmc2V0LCBFTEZfRVhFQ19QQUdFU0laRSk7CiAKLQkvKgotCSAqIFdlIG11c3QgdXNlIHRoZSBzYW1lIG1tLT5mbGFncyB3aGlsZSBkdW1waW5nIGNvcmUgdG8gYXZvaWQKLQkgKiBpbmNvbnNpc3RlbmN5IGJldHdlZW4gdGhlIHByb2dyYW0gaGVhZGVycyBhbmQgYm9kaWVzLCBvdGhlcndpc2UgYW4KLQkgKiB1bnVzYWJsZSBjb3JlIGZpbGUgY2FuIGJlIGdlbmVyYXRlZC4KLQkgKi8KLQltbV9mbGFncyA9IGN1cnJlbnQtPm1tLT5mbGFnczsKKwlvZmZzZXQgKz0gZWxmX2NvcmVfdm1hX2RhdGFfc2l6ZShjcHJtLT5tbV9mbGFncyk7CisJb2Zmc2V0ICs9IGVsZl9jb3JlX2V4dHJhX2RhdGFfc2l6ZSgpOworCWVfc2hvZmYgPSBvZmZzZXQ7CisKKwlpZiAoZV9waG51bSA9PSBQTl9YTlVNKSB7CisJCXNoZHI0ZXh0bnVtID0ga21hbGxvYyhzaXplb2YoKnNoZHI0ZXh0bnVtKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghc2hkcjRleHRudW0pCisJCQlnb3RvIGVuZF9jb3JlZHVtcDsKKwkJZmlsbF9leHRudW1faW5mbyhlbGYsIHNoZHI0ZXh0bnVtLCBlX3Nob2ZmLCBzZWdzKTsKKwl9CisKKwlvZmZzZXQgPSBkYXRhb2ZmOworCisJc2l6ZSArPSBzaXplb2YoKmVsZik7CisJaWYgKHNpemUgPiBjcHJtLT5saW1pdCB8fCAhZHVtcF93cml0ZShjcHJtLT5maWxlLCBlbGYsIHNpemVvZigqZWxmKSkpCisJCWdvdG8gZW5kX2NvcmVkdW1wOworCisJc2l6ZSArPSBzaXplb2YoKnBoZHI0bm90ZSk7CisJaWYgKHNpemUgPiBjcHJtLT5saW1pdAorCSAgICB8fCAhZHVtcF93cml0ZShjcHJtLT5maWxlLCBwaGRyNG5vdGUsIHNpemVvZigqcGhkcjRub3RlKSkpCisJCWdvdG8gZW5kX2NvcmVkdW1wOwogCiAJLyogd3JpdGUgcHJvZ3JhbSBoZWFkZXJzIGZvciBzZWdtZW50cyBkdW1wICovCiAJZm9yICh2bWEgPSBjdXJyZW50LT5tbS0+bW1hcDsgdm1hOyB2bWEgPSB2bWEtPnZtX25leHQpIHsKQEAgLTE3NjcsNyArMTgwMSw3IEBACiAJCXBoZHIucF9vZmZzZXQgPSBvZmZzZXQ7CiAJCXBoZHIucF92YWRkciA9IHZtYS0+dm1fc3RhcnQ7CiAJCXBoZHIucF9wYWRkciA9IDA7Ci0JCXBoZHIucF9maWxlc3ogPSBtYXlkdW1wKHZtYSwgbW1fZmxhZ3MpID8gc3ogOiAwOworCQlwaGRyLnBfZmlsZXN6ID0gbWF5ZHVtcCh2bWEsIGNwcm0tPm1tX2ZsYWdzKSA/IHN6IDogMDsKIAkJcGhkci5wX21lbXN6ID0gc3o7CiAJCW9mZnNldCArPSBwaGRyLnBfZmlsZXN6OwogCQlwaGRyLnBfZmxhZ3MgPSB2bWEtPnZtX2ZsYWdzICYgVk1fUkVBRCA/IFBGX1IgOiAwOwpAQCAtMTc3NywxNiArMTgxMSwxOCBAQAogCQkJcGhkci5wX2ZsYWdzIHw9IFBGX1g7CiAJCXBoZHIucF9hbGlnbiA9IEVMRl9FWEVDX1BBR0VTSVpFOwogCi0JCURVTVBfV1JJVEUoJnBoZHIsIHNpemVvZihwaGRyKSk7CisJCXNpemUgKz0gc2l6ZW9mKHBoZHIpOworCQlpZiAoc2l6ZSA+IGNwcm0tPmxpbWl0CisJCSAgICB8fCAhZHVtcF93cml0ZShjcHJtLT5maWxlLCAmcGhkciwgc2l6ZW9mKHBoZHIpKSkKKwkJCWdvdG8gZW5kX2NvcmVkdW1wOwogCX0KIAotI2lmZGVmIEVMRl9DT1JFX1dSSVRFX0VYVFJBX1BIRFJTCi0JRUxGX0NPUkVfV1JJVEVfRVhUUkFfUEhEUlM7Ci0jZW5kaWYKKwlpZiAoIWVsZl9jb3JlX3dyaXRlX2V4dHJhX3BoZHJzKGNwcm0tPmZpbGUsIG9mZnNldCwgJnNpemUsIGNwcm0tPmxpbWl0KSkKKwkJZ290byBlbmRfY29yZWR1bXA7CiAKICAJLyogd3JpdGUgb3V0IHRoZSBub3RlcyBzZWN0aW9uICovCiAJZm9yIChpID0gMDsgaSA8IG51bW5vdGU7IGkrKykKLQkJaWYgKCF3cml0ZW5vdGUobm90ZXMgKyBpLCBjcHJtLT5maWxlKSkKKwkJaWYgKCF3cml0ZW5vdGUobm90ZXMgKyBpLCBjcHJtLT5maWxlLCAmZm9mZnNldCkpCiAJCQlnb3RvIGVuZF9jb3JlZHVtcDsKIAogCS8qIHdyaXRlIG91dCB0aGUgdGhyZWFkIHN0YXR1cyBub3RlcyBzZWN0aW9uICovCkBAIC0xNzk1LDIwICsxODMxLDI3IEBACiAJCQkJbGlzdF9lbnRyeSh0LCBzdHJ1Y3QgZWxmX3RocmVhZF9zdGF0dXMsIGxpc3QpOwogCiAJCWZvciAoaSA9IDA7IGkgPCB0bXAtPm51bV9ub3RlczsgaSsrKQotCQkJaWYgKCF3cml0ZW5vdGUoJnRtcC0+bm90ZXNbaV0sIGNwcm0tPmZpbGUpKQorCQkJaWYgKCF3cml0ZW5vdGUoJnRtcC0+bm90ZXNbaV0sIGNwcm0tPmZpbGUsICZmb2Zmc2V0KSkKIAkJCQlnb3RvIGVuZF9jb3JlZHVtcDsKIAl9CiAKLQlpZiAoIWR1bXBfc2VlayhjcHJtLT5maWxlLCBkYXRhb2ZmKSkKKwlpZiAoIWR1bXBfc2VlayhjcHJtLT5maWxlLCBkYXRhb2ZmIC0gZm9mZnNldCkpCiAJCWdvdG8gZW5kX2NvcmVkdW1wOwogCiAJaWYgKGVsZl9mZHBpY19kdW1wX3NlZ21lbnRzKGNwcm0tPmZpbGUsICZzaXplLCAmY3BybS0+bGltaXQsCi0JCQkJICAgIG1tX2ZsYWdzKSA8IDApCisJCQkJICAgIGNwcm0tPm1tX2ZsYWdzKSA8IDApCiAJCWdvdG8gZW5kX2NvcmVkdW1wOwogCi0jaWZkZWYgRUxGX0NPUkVfV1JJVEVfRVhUUkFfREFUQQotCUVMRl9DT1JFX1dSSVRFX0VYVFJBX0RBVEE7Ci0jZW5kaWYKKwlpZiAoIWVsZl9jb3JlX3dyaXRlX2V4dHJhX2RhdGEoY3BybS0+ZmlsZSwgJnNpemUsIGNwcm0tPmxpbWl0KSkKKwkJZ290byBlbmRfY29yZWR1bXA7CisKKwlpZiAoZV9waG51bSA9PSBQTl9YTlVNKSB7CisJCXNpemUgKz0gc2l6ZW9mKCpzaGRyNGV4dG51bSk7CisJCWlmIChzaXplID4gY3BybS0+bGltaXQKKwkJICAgIHx8ICFkdW1wX3dyaXRlKGNwcm0tPmZpbGUsIHNoZHI0ZXh0bnVtLAorCQkJCSAgIHNpemVvZigqc2hkcjRleHRudW0pKSkKKwkJCWdvdG8gZW5kX2NvcmVkdW1wOworCX0KIAogCWlmIChjcHJtLT5maWxlLT5mX3BvcyAhPSBvZmZzZXQpIHsKIAkJLyogU2FuaXR5IGNoZWNrICovCkBAIC0xODI2LDcgKzE4NjksNyBAQAogCQlsaXN0X2RlbCh0bXApOwogCQlrZnJlZShsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGVsZl90aHJlYWRfc3RhdHVzLCBsaXN0KSk7CiAJfQotCisJa2ZyZWUocGhkcjRub3RlKTsKIAlrZnJlZShlbGYpOwogCWtmcmVlKHByc3RhdHVzKTsKIAlrZnJlZShwc2luZm8pOwpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X2ZsYXQuYyBiL2ZzL2JpbmZtdF9mbGF0LmMKaW5kZXggNDJjNmI0YS4uZTBlNzY5YiAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2ZsYXQuYworKysgYi9mcy9iaW5mbXRfZmxhdC5jCkBAIC01MDEsNyArNTAxLDcgQEAKIAkgKiBzaXplIGxpbWl0cyBpbXBvc2VkIG9uIHRoZW0gYnkgY3JlYXRpbmcgcHJvZ3JhbXMgd2l0aCBsYXJnZQogCSAqIGFycmF5cyBpbiB0aGUgZGF0YSBvciBic3MuCiAJICovCi0JcmxpbSA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfREFUQV0ucmxpbV9jdXI7CisJcmxpbSA9IHJsaW1pdChSTElNSVRfREFUQSk7CiAJaWYgKHJsaW0gPj0gUkxJTV9JTkZJTklUWSkKIAkJcmxpbSA9IH4wOwogCWlmIChkYXRhX2xlbiArIGJzc19sZW4gPiBybGltKSB7CmRpZmYgLS1naXQgYS9mcy9jb21wYXRfYmluZm10X2VsZi5jIGIvZnMvY29tcGF0X2JpbmZtdF9lbGYuYwppbmRleCAwYWRjZWQyLi4xMTJlNDVhIDEwMDY0NAotLS0gYS9mcy9jb21wYXRfYmluZm10X2VsZi5jCisrKyBiL2ZzL2NvbXBhdF9iaW5mbXRfZWxmLmMKQEAgLTI4LDEwICsyOCwxMiBAQAogCiAjdW5kZWYJZWxmaGRyCiAjdW5kZWYJZWxmX3BoZHIKKyN1bmRlZgllbGZfc2hkcgogI3VuZGVmCWVsZl9ub3RlCiAjdW5kZWYJZWxmX2FkZHJfdAogI2RlZmluZSBlbGZoZHIJCWVsZjMyX2hkcgogI2RlZmluZSBlbGZfcGhkcgllbGYzMl9waGRyCisjZGVmaW5lIGVsZl9zaGRyCWVsZjMyX3NoZHIKICNkZWZpbmUgZWxmX25vdGUJZWxmMzJfbm90ZQogI2RlZmluZSBlbGZfYWRkcl90CUVsZjMyX0FkZHIKIApkaWZmIC0tZ2l0IGEvZnMvY29tcGF0X2lvY3RsLmMgYi9mcy9jb21wYXRfaW9jdGwuYwppbmRleCAwY2E5ZWM0Li42ZDU1YjYxIDEwMDY0NAotLS0gYS9mcy9jb21wYXRfaW9jdGwuYworKysgYi9mcy9jb21wYXRfaW9jdGwuYwpAQCAtNTQ1LDcgKzU0NSw3IEBACiAJCWtjbWQgPSBNVElPQ1BPUzsKIAkJa2FyZyA9ICZwb3M7CiAJCWJyZWFrOwotCWNhc2UgTVRJT0NHRVQzMjoKKwlkZWZhdWx0OgkvKiBNVElPQ0dFVDMyICovCiAJCWtjbWQgPSBNVElPQ0dFVDsKIAkJa2FyZyA9ICZnZXQ7CiAJCWJyZWFrOwpAQCAtNjYzLDcgKzY2Myw3IEBACiAKICAgICAgICAgc3dpdGNoIChjbWQpIHsKICAgICAgICAgY2FzZSBSQVdfU0VUQklORDoKLSAgICAgICAgY2FzZSBSQVdfR0VUQklORDogeworCWRlZmF1bHQ6IHsJLyogUkFXX0dFVEJJTkQgKi8KICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmF3X2NvbmZpZ19yZXF1ZXN0IHJlcTsKICAgICAgICAgICAgICAgICBtbV9zZWdtZW50X3Qgb2xkZnMgPSBnZXRfZnMoKTsKIApkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IGNjZTZiYmQuLjQ5Y2RhYTEgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTE5NSw3ICsxOTUsNyBAQAogCQkgKiAgICB0byB3b3JrIGZyb20uCiAJCSAqLwogCQlybGltID0gY3VycmVudC0+c2lnbmFsLT5ybGltOwotCQlpZiAoc2l6ZSA+IHJsaW1bUkxJTUlUX1NUQUNLXS5ybGltX2N1ciAvIDQpIHsKKwkJaWYgKHNpemUgPiBBQ0NFU1NfT05DRShybGltW1JMSU1JVF9TVEFDS10ucmxpbV9jdXIpIC8gNCkgewogCQkJcHV0X3BhZ2UocGFnZSk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQpAQCAtMjQ2LDYgKzI0Niw3IEBACiAJdm1hLT52bV9zdGFydCA9IHZtYS0+dm1fZW5kIC0gUEFHRV9TSVpFOwogCXZtYS0+dm1fZmxhZ3MgPSBWTV9TVEFDS19GTEFHUzsKIAl2bWEtPnZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLT52bV9mbGFncyk7CisJSU5JVF9MSVNUX0hFQUQoJnZtYS0+YW5vbl92bWFfY2hhaW4pOwogCWVyciA9IGluc2VydF92bV9zdHJ1Y3QobW0sIHZtYSk7CiAJaWYgKGVycikKIAkJZ290byBlcnI7CkBAIC01MTYsNyArNTE3LDggQEAKIAkvKgogCSAqIGNvdmVyIHRoZSB3aG9sZSByYW5nZTogW25ld19zdGFydCwgb2xkX2VuZCkKIAkgKi8KLQl2bWFfYWRqdXN0KHZtYSwgbmV3X3N0YXJ0LCBvbGRfZW5kLCB2bWEtPnZtX3Bnb2ZmLCBOVUxMKTsKKwlpZiAodm1hX2FkanVzdCh2bWEsIG5ld19zdGFydCwgb2xkX2VuZCwgdm1hLT52bV9wZ29mZiwgTlVMTCkpCisJCXJldHVybiAtRU5PTUVNOwogCiAJLyoKIAkgKiBtb3ZlIHRoZSBwYWdlIHRhYmxlcyBkb3dud2FyZHMsIG9uIGZhaWx1cmUgd2UgcmVseSBvbgpAQCAtNTQ3LDE1ICs1NDksMTMgQEAKIAl0bGJfZmluaXNoX21tdSh0bGIsIG5ld19lbmQsIG9sZF9lbmQpOwogCiAJLyoKLQkgKiBzaHJpbmsgdGhlIHZtYSB0byBqdXN0IHRoZSBuZXcgcmFuZ2UuCisJICogU2hyaW5rIHRoZSB2bWEgdG8ganVzdCB0aGUgbmV3IHJhbmdlLiAgQWx3YXlzIHN1Y2NlZWRzLgogCSAqLwogCXZtYV9hZGp1c3Qodm1hLCBuZXdfc3RhcnQsIG5ld19lbmQsIHZtYS0+dm1fcGdvZmYsIE5VTEwpOwogCiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgRVhUUkFfU1RBQ0tfVk1fUEFHRVMJMjAJLyogcmFuZG9tICovCi0KIC8qCiAgKiBGaW5hbGl6ZXMgdGhlIHN0YWNrIHZtX2FyZWFfc3RydWN0LiBUaGUgZmxhZ3MgYW5kIHBlcm1pc3Npb25zIGFyZSB1cGRhdGVkLAogICogdGhlIHN0YWNrIGlzIG9wdGlvbmFsbHkgcmVsb2NhdGVkLCBhbmQgc29tZSBleHRyYSBzcGFjZSBpcyBhZGRlZC4KQEAgLTU3Nyw3ICs1NzcsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NUQUNLX0dST1dTVVAKIAkvKiBMaW1pdCBzdGFjayBzaXplIHRvIDFHQiAqLwotCXN0YWNrX2Jhc2UgPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX1NUQUNLXS5ybGltX21heDsKKwlzdGFja19iYXNlID0gcmxpbWl0X21heChSTElNSVRfU1RBQ0spOwogCWlmIChzdGFja19iYXNlID4gKDEgPDwgMzApKQogCQlzdGFja19iYXNlID0gMSA8PCAzMDsKIApAQCAtNjMwLDcgKzYzMCw3IEBACiAJCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0Jc3RhY2tfZXhwYW5kID0gRVhUUkFfU1RBQ0tfVk1fUEFHRVMgKiBQQUdFX1NJWkU7CisJc3RhY2tfZXhwYW5kID0gMTMxMDcyVUw7IC8qIHJhbmRvbWx5IDMyKjRrIChvciAyKjY0aykgcGFnZXMgKi8KIAlzdGFja19zaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OwogCS8qCiAJICogQWxpZ24gdGhpcyBkb3duIHRvIGEgcGFnZSBib3VuZGFyeSBhcyBleHBhbmRfc3RhY2sKQEAgLTcxOCw2ICs3MTgsNyBAQAogCS8qIE5vdGlmeSBwYXJlbnQgdGhhdCB3ZSdyZSBubyBsb25nZXIgaW50ZXJlc3RlZCBpbiB0aGUgb2xkIFZNICovCiAJdHNrID0gY3VycmVudDsKIAlvbGRfbW0gPSBjdXJyZW50LT5tbTsKKwlzeW5jX21tX3Jzcyh0c2ssIG9sZF9tbSk7CiAJbW1fcmVsZWFzZSh0c2ssIG9sZF9tbSk7CiAKIAlpZiAob2xkX21tKSB7CkBAIC0xNTMyLDcgKzE1MzMsNyBAQAogCQkJLyogY29yZSBsaW1pdCBzaXplICovCiAJCQljYXNlICdjJzoKIAkJCQlyYyA9IHNucHJpbnRmKG91dF9wdHIsIG91dF9lbmQgLSBvdXRfcHRyLAotCQkJCQkgICAgICAiJWx1IiwgY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9DT1JFXS5ybGltX2N1cik7CisJCQkJCSAgICAgICIlbHUiLCBybGltaXQoUkxJTUlUX0NPUkUpKTsKIAkJCQlpZiAocmMgPiBvdXRfZW5kIC0gb3V0X3B0cikKIAkJCQkJZ290byBvdXQ7CiAJCQkJb3V0X3B0ciArPSByYzsKQEAgLTE1NjAsMTIgKzE1NjEsMTMgQEAKIAlyZXR1cm4gaXNwaXBlOwogfQogCi1zdGF0aWMgaW50IHphcF9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqc3RhcnQpCitzdGF0aWMgaW50IHphcF9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqc3RhcnQsIGludCBleGl0X2NvZGUpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0OwogCWludCBuciA9IDA7CiAKIAlzdGFydC0+c2lnbmFsLT5mbGFncyA9IFNJR05BTF9HUk9VUF9FWElUOworCXN0YXJ0LT5zaWduYWwtPmdyb3VwX2V4aXRfY29kZSA9IGV4aXRfY29kZTsKIAlzdGFydC0+c2lnbmFsLT5ncm91cF9zdG9wX2NvdW50ID0gMDsKIAogCXQgPSBzdGFydDsKQEAgLTE1OTAsOCArMTU5Miw3IEBACiAJc3Bpbl9sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAlpZiAoIXNpZ25hbF9ncm91cF9leGl0KHRzay0+c2lnbmFsKSkgewogCQltbS0+Y29yZV9zdGF0ZSA9IGNvcmVfc3RhdGU7Ci0JCXRzay0+c2lnbmFsLT5ncm91cF9leGl0X2NvZGUgPSBleGl0X2NvZGU7Ci0JCW5yID0gemFwX3Byb2Nlc3ModHNrKTsKKwkJbnIgPSB6YXBfcHJvY2Vzcyh0c2ssIGV4aXRfY29kZSk7CiAJfQogCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAlpZiAodW5saWtlbHkobnIgPCAwKSkKQEAgLTE2NDAsNyArMTY0MSw3IEBACiAJCQlpZiAocC0+bW0pIHsKIAkJCQlpZiAodW5saWtlbHkocC0+bW0gPT0gbW0pKSB7CiAJCQkJCWxvY2tfdGFza19zaWdoYW5kKHAsICZmbGFncyk7Ci0JCQkJCW5yICs9IHphcF9wcm9jZXNzKHApOworCQkJCQluciArPSB6YXBfcHJvY2VzcyhwLCBleGl0X2NvZGUpOwogCQkJCQl1bmxvY2tfdGFza19zaWdoYW5kKHAsICZmbGFncyk7CiAJCQkJfQogCQkJCWJyZWFrOwpAQCAtMTc0NywxNCArMTc0OCwxOSBAQAogCX0KIH0KIAotaW50IGdldF9kdW1wYWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3N0YXRpYyBpbnQgX19nZXRfZHVtcGFibGUodW5zaWduZWQgbG9uZyBtbV9mbGFncykKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gbW0tPmZsYWdzICYgMHgzOworCXJldCA9IG1tX2ZsYWdzICYgTU1GX0RVTVBBQkxFX01BU0s7CiAJcmV0dXJuIChyZXQgPj0gMikgPyAyIDogcmV0OwogfQogCitpbnQgZ2V0X2R1bXBhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXJldHVybiBfX2dldF9kdW1wYWJsZShtbS0+ZmxhZ3MpOworfQorCiBzdGF0aWMgdm9pZCB3YWl0X2Zvcl9kdW1wX2hlbHBlcnMoc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZTsKQEAgLTE3OTcsNyArMTgwMywxMyBAQAogCXN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgY3BybSA9IHsKIAkJLnNpZ25yID0gc2lnbnIsCiAJCS5yZWdzID0gcmVncywKLQkJLmxpbWl0ID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9DT1JFXS5ybGltX2N1ciwKKwkJLmxpbWl0ID0gcmxpbWl0KFJMSU1JVF9DT1JFKSwKKwkJLyoKKwkJICogV2UgbXVzdCB1c2UgdGhlIHNhbWUgbW0tPmZsYWdzIHdoaWxlIGR1bXBpbmcgY29yZSB0byBhdm9pZAorCQkgKiBpbmNvbnNpc3RlbmN5IG9mIGJpdCBmbGFncywgc2luY2UgdGhpcyBmbGFnIGlzIG5vdCBwcm90ZWN0ZWQKKwkJICogYnkgYW55IGxvY2tzLgorCQkgKi8KKwkJLm1tX2ZsYWdzID0gbW0tPmZsYWdzLAogCX07CiAKIAlhdWRpdF9jb3JlX2R1bXBzKHNpZ25yKTsKQEAgLTE4MTYsNyArMTgyOCw3IEBACiAJLyoKIAkgKiBJZiBhbm90aGVyIHRocmVhZCBnb3QgaGVyZSBmaXJzdCwgb3Igd2UgYXJlIG5vdCBkdW1wYWJsZSwgYmFpbCBvdXQuCiAJICovCi0JaWYgKG1tLT5jb3JlX3N0YXRlIHx8ICFnZXRfZHVtcGFibGUobW0pKSB7CisJaWYgKG1tLT5jb3JlX3N0YXRlIHx8ICFfX2dldF9kdW1wYWJsZShjcHJtLm1tX2ZsYWdzKSkgewogCQl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKIAkJcHV0X2NyZWQoY3JlZCk7CiAJCWdvdG8gZmFpbDsKQEAgLTE4MjcsNyArMTgzOSw4IEBACiAJICoJcHJvY2VzcyBub3IgZG8gd2Uga25vdyBpdHMgZW50aXJlIGhpc3RvcnkuIFdlIG9ubHkga25vdyBpdAogCSAqCXdhcyB0YWludGVkIHNvIHdlIGR1bXAgaXQgYXMgcm9vdCBpbiBtb2RlIDIuCiAJICovCi0JaWYgKGdldF9kdW1wYWJsZShtbSkgPT0gMikgewkvKiBTZXR1aWQgY29yZSBkdW1wIG1vZGUgKi8KKwlpZiAoX19nZXRfZHVtcGFibGUoY3BybS5tbV9mbGFncykgPT0gMikgeworCQkvKiBTZXR1aWQgY29yZSBkdW1wIG1vZGUgKi8KIAkJZmxhZyA9IE9fRVhDTDsJCS8qIFN0b3AgcmV3cml0ZSBhdHRhY2tzICovCiAJCWNyZWQtPmZzdWlkID0gMDsJLyogRHVtcCByb290IHByaXZhdGUgKi8KIAl9CkBAIC0xOTIzLDggKzE5MzYsOSBAQAogCS8qCiAJICogRG9udCBhbGxvdyBsb2NhbCB1c2VycyBnZXQgY3V0ZSBhbmQgdHJpY2sgb3RoZXJzIHRvIGNvcmVkdW1wCiAJICogaW50byB0aGVpciBwcmUtY3JlYXRlZCBmaWxlczoKKwkgKiBOb3RlLCB0aGlzIGlzIG5vdCByZWxldmFudCBmb3IgcGlwZXMKIAkgKi8KLQlpZiAoaW5vZGUtPmlfdWlkICE9IGN1cnJlbnRfZnN1aWQoKSkKKwlpZiAoIWlzcGlwZSAmJiAoaW5vZGUtPmlfdWlkICE9IGN1cnJlbnRfZnN1aWQoKSkpCiAJCWdvdG8gY2xvc2VfZmFpbDsKIAlpZiAoIWNwcm0uZmlsZS0+Zl9vcCkKIAkJZ290byBjbG9zZV9mYWlsOwpkaWZmIC0tZ2l0IGEvZnMvZmNudGwuYyBiL2ZzL2ZjbnRsLmMKaW5kZXggOTdlMDFkYy4uNDUyZDAyZiAxMDA2NDQKLS0tIGEvZnMvZmNudGwuYworKysgYi9mcy9mY250bC5jCkBAIC0zNDQsNyArMzQ0LDcgQEAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgRl9EVVBGRDoKIAljYXNlIEZfRFVQRkRfQ0xPRVhFQzoKLQkJaWYgKGFyZyA+PSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX05PRklMRV0ucmxpbV9jdXIpCisJCWlmIChhcmcgPj0gcmxpbWl0KFJMSU1JVF9OT0ZJTEUpKQogCQkJYnJlYWs7CiAJCWVyciA9IGFsbG9jX2ZkKGFyZywgY21kID09IEZfRFVQRkRfQ0xPRVhFQyA/IE9fQ0xPRVhFQyA6IDApOwogCQlpZiAoZXJyID49IDApIHsKZGlmZiAtLWdpdCBhL2ZzL2ZpbGUuYyBiL2ZzL2ZpbGUuYwppbmRleCAzODAzOWFmLi4zNGJiN2Y3IDEwMDY0NAotLS0gYS9mcy9maWxlLmMKKysrIGIvZnMvZmlsZS5jCkBAIC0yNTcsNyArMjU3LDcgQEAKIAkgKiBOLkIuIEZvciBjbG9uZSB0YXNrcyBzaGFyaW5nIGEgZmlsZXMgc3RydWN0dXJlLCB0aGlzIHRlc3QKIAkgKiB3aWxsIGxpbWl0IHRoZSB0b3RhbCBudW1iZXIgb2YgZmlsZXMgdGhhdCBjYW4gYmUgb3BlbmVkLgogCSAqLwotCWlmIChuciA+PSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX05PRklMRV0ucmxpbV9jdXIpCisJaWYgKG5yID49IHJsaW1pdChSTElNSVRfTk9GSUxFKSkKIAkJcmV0dXJuIC1FTUZJTEU7CiAKIAkvKiBEbyB3ZSBuZWVkIHRvIGV4cGFuZD8gKi8KZGlmZiAtLWdpdCBhL2ZzL2ZpbGVfdGFibGUuYyBiL2ZzL2ZpbGVfdGFibGUuYwppbmRleCBiOTg0MDRiLi4zMmQxMmI3IDEwMDY0NAotLS0gYS9mcy9maWxlX3RhYmxlLmMKKysrIGIvZnMvZmlsZV90YWJsZS5jCkBAIC0zOTMsNyArMzkzLDkgQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAoIShmLT5mX21vZGUgJiBGTU9ERV9XUklURSkpCiAJCQljb250aW51ZTsKKwkJc3Bpbl9sb2NrKCZmLT5mX2xvY2spOwogCQlmLT5mX21vZGUgJj0gfkZNT0RFX1dSSVRFOworCQlzcGluX3VubG9jaygmZi0+Zl9sb2NrKTsKIAkJaWYgKGZpbGVfY2hlY2tfd3JpdGVhYmxlKGYpICE9IDApCiAJCQljb250aW51ZTsKIAkJZmlsZV9yZWxlYXNlX3dyaXRlKGYpOwpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9LY29uZmlnIGIvZnMvZnNjYWNoZS9LY29uZmlnCmluZGV4IDg2NGRhYzIuLmNjOTRiYjkgMTAwNjQ0Ci0tLSBhL2ZzL2ZzY2FjaGUvS2NvbmZpZworKysgYi9mcy9mc2NhY2hlL0tjb25maWcKQEAgLTEsNyArMSw2IEBACiAKIGNvbmZpZyBGU0NBQ0hFCiAJdHJpc3RhdGUgIkdlbmVyYWwgZmlsZXN5c3RlbSBsb2NhbCBjYWNoaW5nIG1hbmFnZXIiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgU0xPV19XT1JLCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBhIGdlbmVyaWMgZmlsZXN5c3RlbSBjYWNoaW5nIG1hbmFnZXIgdGhhdCBjYW4gYmUKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL2hvc3QuYyBiL2ZzL2xvY2tkL2hvc3QuYwppbmRleCA0NjAwYzIwLi5iYjQ2NGQxMjEwIDEwMDY0NAotLS0gYS9mcy9sb2NrZC9ob3N0LmMKKysrIGIvZnMvbG9ja2QvaG9zdC5jCkBAIC00NzksOCArNDc5LDggQEAKIAkJCX0KIAkJfQogCX0KLQogCW11dGV4X3VubG9jaygmbmxtX2hvc3RfbXV0ZXgpOworCW5zbV9yZWxlYXNlKG5zbSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9sb2NrZC9tb24uYyBiL2ZzL2xvY2tkL21vbi5jCmluZGV4IGY5NTY2NTEuLmZlZmE0ZGYgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL21vbi5jCisrKyBiL2ZzL2xvY2tkL21vbi5jCkBAIC0zNDksOSArMzQ5LDkgQEAKICAqIG5zbV9yZWJvb3RfbG9va3VwIC0gbWF0Y2ggTkxNUFJPQ19TTV9OT1RJRlkgYXJndW1lbnRzIHRvIGFuIG5zbV9oYW5kbGUKICAqIEBpbmZvOiBwb2ludGVyIHRvIE5MTVBST0NfU01fTk9USUZZIGFyZ3VtZW50cwogICoKLSAqIFJldHVybnMgYSBtYXRjaGluZyBuc21faGFuZGxlIGlmIGZvdW5kIGluIHRoZSBuc20gY2FjaGU7IHRoZSByZXR1cm5lZAotICogbnNtX2hhbmRsZSdzIHJlZmVyZW5jZSBjb3VudCBpcyBidW1wZWQgYW5kIHNtX21vbml0b3JlZCBpcyBjbGVhcmVkLgotICogT3RoZXJ3aXNlIHJldHVybnMgTlVMTCBpZiBzb21lIGVycm9yIG9jY3VycmVkLgorICogUmV0dXJucyBhIG1hdGNoaW5nIG5zbV9oYW5kbGUgaWYgZm91bmQgaW4gdGhlIG5zbSBjYWNoZS4gVGhlIHJldHVybmVkCisgKiBuc21faGFuZGxlJ3MgcmVmZXJlbmNlIGNvdW50IGlzIGJ1bXBlZC4gT3RoZXJ3aXNlIHJldHVybnMgTlVMTCBpZiBzb21lCisgKiBlcnJvciBvY2N1cnJlZC4KICAqLwogc3RydWN0IG5zbV9oYW5kbGUgKm5zbV9yZWJvb3RfbG9va3VwKGNvbnN0IHN0cnVjdCBubG1fcmVib290ICppbmZvKQogewpAQCAtMzcwLDEyICszNzAsNiBAQAogCWF0b21pY19pbmMoJmNhY2hlZC0+c21fY291bnQpOwogCXNwaW5fdW5sb2NrKCZuc21fbG9jayk7CiAKLQkvKgotCSAqIER1cmluZyBzdWJzZXF1ZW50IGxvY2sgYWN0aXZpdHksIGZvcmNlIGEgZnJlc2gKLQkgKiBub3RpZmljYXRpb24gdG8gYmUgc2V0IHVwIGZvciB0aGlzIGhvc3QuCi0JICovCi0JY2FjaGVkLT5zbV9tb25pdG9yZWQgPSAwOwotCiAJZHByaW50aygibG9ja2Q6IGhvc3QgJXMgKCVzKSByZWJvb3RlZCwgY250ICVkXG4iLAogCQkJY2FjaGVkLT5zbV9uYW1lLCBjYWNoZWQtPnNtX2FkZHJidWYsCiAJCQlhdG9taWNfcmVhZCgmY2FjaGVkLT5zbV9jb3VudCkpOwpkaWZmIC0tZ2l0IGEvZnMvbG9ja2Qvc3ZjLmMgYi9mcy9sb2NrZC9zdmMuYwppbmRleCBlNTBjZmEzLi43ZDE1MDUxIDEwMDY0NAotLS0gYS9mcy9sb2NrZC9zdmMuYworKysgYi9mcy9sb2NrZC9zdmMuYwpAQCAtMjQzLDExICsyNDMsOSBAQAogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dF9lcnI7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKIAllcnIgPSBjcmVhdGVfbG9ja2RfZmFtaWx5KHNlcnYsIFBGX0lORVQ2KTsKIAlpZiAoZXJyIDwgMCAmJiBlcnIgIT0gLUVBRk5PU1VQUE9SVCkKIAkJZ290byBvdXRfZXJyOwotI2VuZGlmCS8qIENPTkZJR19JUFY2IHx8IENPTkZJR19JUFY2X01PRFVMRSAqLwogCiAJd2FybmVkID0gMDsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2ZzL2xvZ2ZzL0tjb25maWcgYi9mcy9sb2dmcy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZjlhOWIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9sb2dmcy9LY29uZmlnCkBAIC0wLDAgKzEsMTcgQEAKK2NvbmZpZyBMT0dGUworCXRyaXN0YXRlICJMb2dGUyBmaWxlIHN5c3RlbSAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIChNVEQgfHwgQkxPQ0spICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBaTElCX0lORkxBVEUKKwlzZWxlY3QgWkxJQl9ERUZMQVRFCisJc2VsZWN0IENSQzMyCisJc2VsZWN0IEJUUkVFCisJaGVscAorCSAgRmxhc2ggZmlsZXN5c3RlbSBhaW1lZCB0byBzY2FsZSBlZmZpY2llbnRseSB0byBsYXJnZSBkZXZpY2VzLgorCSAgSW4gY29tcGFyaXNvbiB0byBKRkZTMiBpdCBvZmZlcnMgc2lnbmlmaWNhbnRseSBmYXN0ZXIgbW91bnQKKwkgIHRpbWVzIGFuZCBwb3RlbnRpYWxseSBsZXNzIFJBTSB1c2FnZSwgYWx0aG91Z2ggdGhlIGxhdHRlciBoYXMKKwkgIG5vdCBiZWVuIG1lYXN1cmVkIHlldC4KKworCSAgSW4gaXRzIGN1cnJlbnQgc3RhdGUgaXQgaXMgc3RpbGwgdmVyeSBleHBlcmltZW50YWwgYW5kIHNob3VsZAorCSAgbm90IGJlIHVzZWQgZm9yIG90aGVyIHRoYW4gdGVzdGluZyBwdXJwb3Nlcy4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KZGlmZiAtLWdpdCBhL2ZzL2xvZ2ZzL01ha2VmaWxlIGIvZnMvbG9nZnMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgyMDAyNwotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2xvZ2ZzL01ha2VmaWxlCkBAIC0wLDAgKzEsMTMgQEAKK29iai0kKENPTkZJR19MT0dGUykJKz0gbG9nZnMubworCitsb2dmcy15CSs9IGNvbXByLm8KK2xvZ2ZzLXkJKz0gZGlyLm8KK2xvZ2ZzLXkJKz0gZmlsZS5vCitsb2dmcy15CSs9IGdjLm8KK2xvZ2ZzLXkJKz0gaW5vZGUubworbG9nZnMteQkrPSBqb3VybmFsLm8KK2xvZ2ZzLXkJKz0gcmVhZHdyaXRlLm8KK2xvZ2ZzLXkJKz0gc2VnbWVudC5vCitsb2dmcy15CSs9IHN1cGVyLm8KK2xvZ2ZzLSQoQ09ORklHX0JMT0NLKQkrPSBkZXZfYmRldi5vCitsb2dmcy0kKENPTkZJR19NVEQpCSs9IGRldl9tdGQubwpkaWZmIC0tZ2l0IGEvZnMvbG9nZnMvY29tcHIuYyBiL2ZzL2xvZ2ZzL2NvbXByLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRiYmZkMgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2xvZ2ZzL2NvbXByLmMKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIGZzL2xvZ2ZzL2NvbXByLmMJLSBjb21wcmVzc2lvbiByb3V0aW5lcworICoKKyAqIEFzIHNob3VsZCBiZSBvYnZpb3VzIGZvciBMaW51eCBrZXJuZWwgY29kZSwgbGljZW5zZSBpcyBHUEx2MgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA4IEpvZXJuIEVuZ2VsIDxqb2VybkBsb2dmcy5vcmc+CisgKi8KKyNpbmNsdWRlICJsb2dmcy5oIgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC96bGliLmg+CisKKyNkZWZpbmUgQ09NUFJfTEVWRUwgMworCitzdGF0aWMgREVGSU5FX01VVEVYKGNvbXByX211dGV4KTsKK3N0YXRpYyBzdHJ1Y3Qgel9zdHJlYW1fcyBzdHJlYW07CisKK2ludCBsb2dmc19jb21wcmVzcyh2b2lkICppbiwgdm9pZCAqb3V0LCBzaXplX3QgaW5sZW4sIHNpemVfdCBvdXRsZW4pCit7CisJaW50IGVyciwgcmV0OworCisJcmV0ID0gLUVJTzsKKwltdXRleF9sb2NrKCZjb21wcl9tdXRleCk7CisJZXJyID0gemxpYl9kZWZsYXRlSW5pdCgmc3RyZWFtLCBDT01QUl9MRVZFTCk7CisJaWYgKGVyciAhPSBaX09LKQorCQlnb3RvIGVycm9yOworCisJc3RyZWFtLm5leHRfaW4gPSBpbjsKKwlzdHJlYW0uYXZhaWxfaW4gPSBpbmxlbjsKKwlzdHJlYW0udG90YWxfaW4gPSAwOworCXN0cmVhbS5uZXh0X291dCA9IG91dDsKKwlzdHJlYW0uYXZhaWxfb3V0ID0gb3V0bGVuOworCXN0cmVhbS50b3RhbF9vdXQgPSAwOworCisJZXJyID0gemxpYl9kZWZsYXRlKCZzdHJlYW0sIFpfRklOSVNIKTsKKwlpZiAoZXJyICE9IFpfU1RSRUFNX0VORCkKKwkJZ290byBlcnJvcjsKKworCWVyciA9IHpsaWJfZGVmbGF0ZUVuZCgmc3RyZWFtKTsKKwlpZiAoZXJyICE9IFpfT0spCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoc3RyZWFtLnRvdGFsX291dCA+PSBzdHJlYW0udG90YWxfaW4pCisJCWdvdG8gZXJyb3I7CisKKwlyZXQgPSBzdHJlYW0udG90YWxfb3V0OworZXJyb3I6CisJbXV0ZXhfdW5sb2NrKCZjb21wcl9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGxvZ2ZzX3VuY29tcHJlc3Modm9pZCAqaW4sIHZvaWQgKm91dCwgc2l6ZV90IGlubGVuLCBzaXplX3Qgb3V0bGVuKQoreworCWludCBlcnIsIHJldDsKKworCXJldCA9IC1FSU87CisJbXV0ZXhfbG9jaygmY29tcHJfbXV0ZXgpOworCWVyciA9IHpsaWJfaW5mbGF0ZUluaXQoJnN0cmVhbSk7CisJaWYgKGVyciAhPSBaX09LKQorCQlnb3RvIGVycm9yOworCisJc3RyZWFtLm5leHRfaW4gPSBpbjsKKwlzdHJlYW0uYXZhaWxfaW4gPSBpbmxlbjsKKwlzdHJlYW0udG90YWxfaW4gPSAwOworCXN0cmVhbS5uZXh0X291dCA9IG91dDsKKwlzdHJlYW0uYXZhaWxfb3V0ID0gb3V0bGVuOworCXN0cmVhbS50b3RhbF9vdXQgPSAwOworCisJZXJyID0gemxpYl9pbmZsYXRlKCZzdHJlYW0sIFpfRklOSVNIKTsKKwlpZiAoZXJyICE9IFpfU1RSRUFNX0VORCkKKwkJZ290byBlcnJvcjsKKworCWVyciA9IHpsaWJfaW5mbGF0ZUVuZCgmc3RyZWFtKTsKKwlpZiAoZXJyICE9IFpfT0spCisJCWdvdG8gZXJyb3I7CisKKwlyZXQgPSAwOworZXJyb3I6CisJbXV0ZXhfdW5sb2NrKCZjb21wcl9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IF9faW5pdCBsb2dmc19jb21wcl9pbml0KHZvaWQpCit7CisJc2l6ZV90IHNpemUgPSBtYXgoemxpYl9kZWZsYXRlX3dvcmtzcGFjZXNpemUoKSwKKwkJCXpsaWJfaW5mbGF0ZV93b3Jrc3BhY2VzaXplKCkpOworCXN0cmVhbS53b3Jrc3BhY2UgPSB2bWFsbG9jKHNpemUpOworCWlmICghc3RyZWFtLndvcmtzcGFjZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbG9nZnNfY29tcHJfZXhpdCh2b2lkKQoreworCXZmcmVlKHN0cmVhbS53b3Jrc3BhY2UpOworfQpkaWZmIC0tZ2l0IGEvZnMvbG9nZnMvZGV2X2JkZXYuYyBiL2ZzL2xvZ2ZzL2Rldl9iZGV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcxOGMyMgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2xvZ2ZzL2Rldl9iZGV2LmMKQEAgLTAsMCArMSwzMjcgQEAKKy8qCisgKiBmcy9sb2dmcy9kZXZfYmRldi5jCS0gRGV2aWNlIGFjY2VzcyBtZXRob2RzIGZvciBibG9jayBkZXZpY2VzCisgKgorICogQXMgc2hvdWxkIGJlIG9idmlvdXMgZm9yIExpbnV4IGtlcm5lbCBjb2RlLCBsaWNlbnNlIGlzIEdQTHYyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDggSm9lcm4gRW5nZWwgPGpvZXJuQGxvZ2ZzLm9yZz4KKyAqLworI2luY2x1ZGUgImxvZ2ZzLmgiCisjaW5jbHVkZSA8bGludXgvYmlvLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKworI2RlZmluZSBQQUdFX09GUyhvZnMpICgob2ZzKSAmIChQQUdFX1NJWkUtMSkpCisKK3N0YXRpYyB2b2lkIHJlcXVlc3RfY29tcGxldGUoc3RydWN0IGJpbyAqYmlvLCBpbnQgZXJyKQoreworCWNvbXBsZXRlKChzdHJ1Y3QgY29tcGxldGlvbiAqKWJpby0+YmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgc3luY19yZXF1ZXN0KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBpbnQgcncpCit7CisJc3RydWN0IGJpbyBiaW87CisJc3RydWN0IGJpb192ZWMgYmlvX3ZlYzsKKwlzdHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0ZTsKKworCWJpb19pbml0KCZiaW8pOworCWJpby5iaV9pb192ZWMgPSAmYmlvX3ZlYzsKKwliaW9fdmVjLmJ2X3BhZ2UgPSBwYWdlOworCWJpb192ZWMuYnZfbGVuID0gUEFHRV9TSVpFOworCWJpb192ZWMuYnZfb2Zmc2V0ID0gMDsKKwliaW8uYmlfdmNudCA9IDE7CisJYmlvLmJpX2lkeCA9IDA7CisJYmlvLmJpX3NpemUgPSBQQUdFX1NJWkU7CisJYmlvLmJpX2JkZXYgPSBiZGV2OworCWJpby5iaV9zZWN0b3IgPSBwYWdlLT5pbmRleCAqIChQQUdFX1NJWkUgPj4gOSk7CisJaW5pdF9jb21wbGV0aW9uKCZjb21wbGV0ZSk7CisJYmlvLmJpX3ByaXZhdGUgPSAmY29tcGxldGU7CisJYmlvLmJpX2VuZF9pbyA9IHJlcXVlc3RfY29tcGxldGU7CisKKwlzdWJtaXRfYmlvKHJ3LCAmYmlvKTsKKwlnZW5lcmljX3VucGx1Z19kZXZpY2UoYmRldl9nZXRfcXVldWUoYmRldikpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNvbXBsZXRlKTsKKwlyZXR1cm4gdGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLmJpX2ZsYWdzKSA/IDAgOiAtRUlPOworfQorCitzdGF0aWMgaW50IGJkZXZfcmVhZHBhZ2Uodm9pZCAqX3NiLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gX3NiOworCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBsb2dmc19zdXBlcihzYiktPnNfYmRldjsKKwlpbnQgZXJyOworCisJZXJyID0gc3luY19yZXF1ZXN0KHBhZ2UsIGJkZXYsIFJFQUQpOworCWlmIChlcnIpIHsKKwkJQ2xlYXJQYWdlVXB0b2RhdGUocGFnZSk7CisJCVNldFBhZ2VFcnJvcihwYWdlKTsKKwl9IGVsc2UgeworCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisJCUNsZWFyUGFnZUVycm9yKHBhZ2UpOworCX0KKwl1bmxvY2tfcGFnZShwYWdlKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQod3EpOworCitzdGF0aWMgdm9pZCB3cml0ZXNlZ19lbmRfaW8oc3RydWN0IGJpbyAqYmlvLCBpbnQgZXJyKQoreworCWNvbnN0IGludCB1cHRvZGF0ZSA9IHRlc3RfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpOworCXN0cnVjdCBiaW9fdmVjICpidmVjID0gYmlvLT5iaV9pb192ZWMgKyBiaW8tPmJpX3ZjbnQgLSAxOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBiaW8tPmJpX3ByaXZhdGU7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCUJVR19PTighdXB0b2RhdGUpOyAvKiBGSVhNRTogUmV0cnkgaW8gb3Igd3JpdGUgZWxzZXdoZXJlICovCisJQlVHX09OKGVycik7CisJQlVHX09OKGJpby0+YmlfdmNudCA9PSAwKTsKKwlkbyB7CisJCXBhZ2UgPSBidmVjLT5idl9wYWdlOworCQlpZiAoLS1idmVjID49IGJpby0+YmlfaW9fdmVjKQorCQkJcHJlZmV0Y2h3KCZidmVjLT5idl9wYWdlLT5mbGFncyk7CisKKwkJZW5kX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOworCX0gd2hpbGUgKGJ2ZWMgPj0gYmlvLT5iaV9pb192ZWMpOworCWJpb19wdXQoYmlvKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc3VwZXItPnNfcGVuZGluZ193cml0ZXMpKQorCQl3YWtlX3VwKCZ3cSk7Cit9CisKK3N0YXRpYyBpbnQgX19iZGV2X3dyaXRlc2VnKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBvZnMsIHBnb2ZmX3QgaW5kZXgsCisJCXNpemVfdCBucl9wYWdlcykKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gc3VwZXItPnNfbWFwcGluZ19pbm9kZS0+aV9tYXBwaW5nOworCXN0cnVjdCBiaW8gKmJpbzsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGJkZXZfZ2V0X3F1ZXVlKHNiLT5zX2JkZXYpOworCXVuc2lnbmVkIGludCBtYXhfcGFnZXMgPSBxdWV1ZV9tYXhfaHdfc2VjdG9ycyhxKSA+PiAoUEFHRV9TSElGVCAtIDkpOworCWludCBpOworCisJYmlvID0gYmlvX2FsbG9jKEdGUF9OT0ZTLCBtYXhfcGFnZXMpOworCUJVR19PTighYmlvKTsgLyogRklYTUU6IGhhbmRsZSB0aGlzICovCisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgeworCQlpZiAoaSA+PSBtYXhfcGFnZXMpIHsKKwkJCS8qIEJsb2NrIGxheWVyIGNhbm5vdCBzcGxpdCBiaW9zIDooICovCisJCQliaW8tPmJpX3ZjbnQgPSBpOworCQkJYmlvLT5iaV9pZHggPSAwOworCQkJYmlvLT5iaV9zaXplID0gaSAqIFBBR0VfU0laRTsKKwkJCWJpby0+YmlfYmRldiA9IHN1cGVyLT5zX2JkZXY7CisJCQliaW8tPmJpX3NlY3RvciA9IG9mcyA+PiA5OworCQkJYmlvLT5iaV9wcml2YXRlID0gc2I7CisJCQliaW8tPmJpX2VuZF9pbyA9IHdyaXRlc2VnX2VuZF9pbzsKKwkJCWF0b21pY19pbmMoJnN1cGVyLT5zX3BlbmRpbmdfd3JpdGVzKTsKKwkJCXN1Ym1pdF9iaW8oV1JJVEUsIGJpbyk7CisKKwkJCW9mcyArPSBpICogUEFHRV9TSVpFOworCQkJaW5kZXggKz0gaTsKKwkJCW5yX3BhZ2VzIC09IGk7CisJCQlpID0gMDsKKworCQkJYmlvID0gYmlvX2FsbG9jKEdGUF9OT0ZTLCBtYXhfcGFnZXMpOworCQkJQlVHX09OKCFiaW8pOworCQl9CisJCXBhZ2UgPSBmaW5kX2xvY2tfcGFnZShtYXBwaW5nLCBpbmRleCArIGkpOworCQlCVUdfT04oIXBhZ2UpOworCQliaW8tPmJpX2lvX3ZlY1tpXS5idl9wYWdlID0gcGFnZTsKKwkJYmlvLT5iaV9pb192ZWNbaV0uYnZfbGVuID0gUEFHRV9TSVpFOworCQliaW8tPmJpX2lvX3ZlY1tpXS5idl9vZmZzZXQgPSAwOworCisJCUJVR19PTihQYWdlV3JpdGViYWNrKHBhZ2UpKTsKKwkJc2V0X3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwl9CisJYmlvLT5iaV92Y250ID0gbnJfcGFnZXM7CisJYmlvLT5iaV9pZHggPSAwOworCWJpby0+Ymlfc2l6ZSA9IG5yX3BhZ2VzICogUEFHRV9TSVpFOworCWJpby0+YmlfYmRldiA9IHN1cGVyLT5zX2JkZXY7CisJYmlvLT5iaV9zZWN0b3IgPSBvZnMgPj4gOTsKKwliaW8tPmJpX3ByaXZhdGUgPSBzYjsKKwliaW8tPmJpX2VuZF9pbyA9IHdyaXRlc2VnX2VuZF9pbzsKKwlhdG9taWNfaW5jKCZzdXBlci0+c19wZW5kaW5nX3dyaXRlcyk7CisJc3VibWl0X2JpbyhXUklURSwgYmlvKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYmRldl93cml0ZXNlZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgb2ZzLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJaW50IGhlYWQ7CisKKwlCVUdfT04oc3VwZXItPnNfZmxhZ3MgJiBMT0dGU19TQl9GTEFHX1JPKTsKKworCWlmIChsZW4gPT0gMCkgeworCQkvKiBUaGlzIGNhbiBoYXBwZW4gd2hlbiB0aGUgb2JqZWN0IGZpdCBwZXJmZWN0bHkgaW50byBhCisJCSAqIHNlZ21lbnQsIHRoZSBzZWdtZW50IGdldHMgd3JpdHRlbiBwZXIgc3luYyBhbmQgc3Vic2VxdWVudGx5CisJCSAqIGNsb3NlZC4KKwkJICovCisJCXJldHVybjsKKwl9CisJaGVhZCA9IG9mcyAmIChQQUdFX1NJWkUgLSAxKTsKKwlpZiAoaGVhZCkgeworCQlvZnMgLT0gaGVhZDsKKwkJbGVuICs9IGhlYWQ7CisJfQorCWxlbiA9IFBBR0VfQUxJR04obGVuKTsKKwlfX2JkZXZfd3JpdGVzZWcoc2IsIG9mcywgb2ZzID4+IFBBR0VfU0hJRlQsIGxlbiA+PiBQQUdFX1NISUZUKTsKKwlnZW5lcmljX3VucGx1Z19kZXZpY2UoYmRldl9nZXRfcXVldWUobG9nZnNfc3VwZXIoc2IpLT5zX2JkZXYpKTsKK30KKworCitzdGF0aWMgdm9pZCBlcmFzZV9lbmRfaW8oc3RydWN0IGJpbyAqYmlvLCBpbnQgZXJyKSAKK3sgCisJY29uc3QgaW50IHVwdG9kYXRlID0gdGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLT5iaV9mbGFncyk7IAorCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBiaW8tPmJpX3ByaXZhdGU7IAorCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7IAorCisJQlVHX09OKCF1cHRvZGF0ZSk7IC8qIEZJWE1FOiBSZXRyeSBpbyBvciB3cml0ZSBlbHNld2hlcmUgKi8gCisJQlVHX09OKGVycik7IAorCUJVR19PTihiaW8tPmJpX3ZjbnQgPT0gMCk7IAorCWJpb19wdXQoYmlvKTsgCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnN1cGVyLT5zX3BlbmRpbmdfd3JpdGVzKSkKKwkJd2FrZV91cCgmd3EpOyAKK30gCisKK3N0YXRpYyBpbnQgZG9fZXJhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IG9mcywgcGdvZmZfdCBpbmRleCwKKwkJc2l6ZV90IG5yX3BhZ2VzKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGJpbyAqYmlvOworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gYmRldl9nZXRfcXVldWUoc2ItPnNfYmRldik7CisJdW5zaWduZWQgaW50IG1heF9wYWdlcyA9IHF1ZXVlX21heF9od19zZWN0b3JzKHEpID4+IChQQUdFX1NISUZUIC0gOSk7CisJaW50IGk7CisKKwliaW8gPSBiaW9fYWxsb2MoR0ZQX05PRlMsIG1heF9wYWdlcyk7CisJQlVHX09OKCFiaW8pOyAvKiBGSVhNRTogaGFuZGxlIHRoaXMgKi8KKworCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKSB7CisJCWlmIChpID49IG1heF9wYWdlcykgeworCQkJLyogQmxvY2sgbGF5ZXIgY2Fubm90IHNwbGl0IGJpb3MgOiggKi8KKwkJCWJpby0+YmlfdmNudCA9IGk7CisJCQliaW8tPmJpX2lkeCA9IDA7CisJCQliaW8tPmJpX3NpemUgPSBpICogUEFHRV9TSVpFOworCQkJYmlvLT5iaV9iZGV2ID0gc3VwZXItPnNfYmRldjsKKwkJCWJpby0+Ymlfc2VjdG9yID0gb2ZzID4+IDk7CisJCQliaW8tPmJpX3ByaXZhdGUgPSBzYjsKKwkJCWJpby0+YmlfZW5kX2lvID0gZXJhc2VfZW5kX2lvOworCQkJYXRvbWljX2luYygmc3VwZXItPnNfcGVuZGluZ193cml0ZXMpOworCQkJc3VibWl0X2JpbyhXUklURSwgYmlvKTsKKworCQkJb2ZzICs9IGkgKiBQQUdFX1NJWkU7CisJCQlpbmRleCArPSBpOworCQkJbnJfcGFnZXMgLT0gaTsKKwkJCWkgPSAwOworCisJCQliaW8gPSBiaW9fYWxsb2MoR0ZQX05PRlMsIG1heF9wYWdlcyk7CisJCQlCVUdfT04oIWJpbyk7CisJCX0KKwkJYmlvLT5iaV9pb192ZWNbaV0uYnZfcGFnZSA9IHN1cGVyLT5zX2VyYXNlX3BhZ2U7CisJCWJpby0+YmlfaW9fdmVjW2ldLmJ2X2xlbiA9IFBBR0VfU0laRTsKKwkJYmlvLT5iaV9pb192ZWNbaV0uYnZfb2Zmc2V0ID0gMDsKKwl9CisJYmlvLT5iaV92Y250ID0gbnJfcGFnZXM7CisJYmlvLT5iaV9pZHggPSAwOworCWJpby0+Ymlfc2l6ZSA9IG5yX3BhZ2VzICogUEFHRV9TSVpFOworCWJpby0+YmlfYmRldiA9IHN1cGVyLT5zX2JkZXY7CisJYmlvLT5iaV9zZWN0b3IgPSBvZnMgPj4gOTsKKwliaW8tPmJpX3ByaXZhdGUgPSBzYjsKKwliaW8tPmJpX2VuZF9pbyA9IGVyYXNlX2VuZF9pbzsKKwlhdG9taWNfaW5jKCZzdXBlci0+c19wZW5kaW5nX3dyaXRlcyk7CisJc3VibWl0X2JpbyhXUklURSwgYmlvKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZGV2X2VyYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKKwkJaW50IGVuc3VyZV93cml0ZSkKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCisJQlVHX09OKHRvICYgKFBBR0VfU0laRSAtIDEpKTsKKwlCVUdfT04obGVuICYgKFBBR0VfU0laRSAtIDEpKTsKKworCWlmIChzdXBlci0+c19mbGFncyAmIExPR0ZTX1NCX0ZMQUdfUk8pCisJCXJldHVybiAtRVJPRlM7CisKKwlpZiAoZW5zdXJlX3dyaXRlKSB7CisJCS8qCisJCSAqIE9iamVjdCBzdG9yZSBkb2Vzbid0IGNhcmUgd2hldGhlciBlcmFzZXMgaGFwcGVuIG9yIG5vdC4KKwkJICogQnV0IGZvciB0aGUgam91cm5hbCB0aGV5IGFyZSByZXF1aXJlZC4gIE90aGVyd2lzZSBhIHNjYW4KKwkJICogY2FuIGZpbmQgYW4gb2xkIGNvbW1pdCBlbnRyeSBhbmQgYXNzdW1lIGl0IGlzIHRoZSBjdXJyZW50CisJCSAqIG9uZSwgdHJhdmVsbGluZyBiYWNrIGluIHRpbWUuCisJCSAqLworCQlkb19lcmFzZShzYiwgdG8sIHRvID4+IFBBR0VfU0hJRlQsIGxlbiA+PiBQQUdFX1NISUZUKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYmRldl9zeW5jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKworCXdhaXRfZXZlbnQod3EsIGF0b21pY19yZWFkKCZzdXBlci0+c19wZW5kaW5nX3dyaXRlcykgPT0gMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqYmRldl9maW5kX2ZpcnN0X3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCAqb2ZzKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBzdXBlci0+c19tYXBwaW5nX2lub2RlLT5pX21hcHBpbmc7CisJZmlsbGVyX3QgKmZpbGxlciA9IGJkZXZfcmVhZHBhZ2U7CisKKwkqb2ZzID0gMDsKKwlyZXR1cm4gcmVhZF9jYWNoZV9wYWdlKG1hcHBpbmcsIDAsIGZpbGxlciwgc2IpOworfQorCitzdGF0aWMgc3RydWN0IHBhZ2UgKmJkZXZfZmluZF9sYXN0X3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCAqb2ZzKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBzdXBlci0+c19tYXBwaW5nX2lub2RlLT5pX21hcHBpbmc7CisJZmlsbGVyX3QgKmZpbGxlciA9IGJkZXZfcmVhZHBhZ2U7CisJdTY0IHBvcyA9IChzdXBlci0+c19iZGV2LT5iZF9pbm9kZS0+aV9zaXplICYgfjB4ZmZmVUxMKSAtIDB4MTAwMDsKKwlwZ29mZl90IGluZGV4ID0gcG9zID4+IFBBR0VfU0hJRlQ7CisKKwkqb2ZzID0gcG9zOworCXJldHVybiByZWFkX2NhY2hlX3BhZ2UobWFwcGluZywgaW5kZXgsIGZpbGxlciwgc2IpOworfQorCitzdGF0aWMgaW50IGJkZXZfd3JpdGVfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IGxvZ2ZzX3N1cGVyKHNiKS0+c19iZGV2OworCisJLyogTm90aGluZyBzcGVjaWFsIHRvIGRvIGZvciBibG9jayBkZXZpY2VzLiAqLworCXJldHVybiBzeW5jX3JlcXVlc3QocGFnZSwgYmRldiwgV1JJVEUpOworfQorCitzdGF0aWMgdm9pZCBiZGV2X3B1dF9kZXZpY2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwljbG9zZV9iZGV2X2V4Y2x1c2l2ZShsb2dmc19zdXBlcihzYiktPnNfYmRldiwgRk1PREVfUkVBRHxGTU9ERV9XUklURSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbG9nZnNfZGV2aWNlX29wcyBiZF9kZXZvcHMgPSB7CisJLmZpbmRfZmlyc3Rfc2IJPSBiZGV2X2ZpbmRfZmlyc3Rfc2IsCisJLmZpbmRfbGFzdF9zYgk9IGJkZXZfZmluZF9sYXN0X3NiLAorCS53cml0ZV9zYgk9IGJkZXZfd3JpdGVfc2IsCisJLnJlYWRwYWdlCT0gYmRldl9yZWFkcGFnZSwKKwkud3JpdGVzZWcJPSBiZGV2X3dyaXRlc2VnLAorCS5lcmFzZQkJPSBiZGV2X2VyYXNlLAorCS5zeW5jCQk9IGJkZXZfc3luYywKKwkucHV0X2RldmljZQk9IGJkZXZfcHV0X2RldmljZSwKK307CisKK2ludCBsb2dmc19nZXRfc2JfYmRldihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgaW50IGZsYWdzLAorCQljb25zdCBjaGFyICpkZXZuYW1lLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKK3sKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OworCisJYmRldiA9IG9wZW5fYmRldl9leGNsdXNpdmUoZGV2bmFtZSwgRk1PREVfUkVBRHxGTU9ERV9XUklURSwgdHlwZSk7CisJaWYgKElTX0VSUihiZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIoYmRldik7CisKKwlpZiAoTUFKT1IoYmRldi0+YmRfZGV2KSA9PSBNVERfQkxPQ0tfTUFKT1IpIHsKKwkJaW50IG10ZG5yID0gTUlOT1IoYmRldi0+YmRfZGV2KTsKKwkJY2xvc2VfYmRldl9leGNsdXNpdmUoYmRldiwgRk1PREVfUkVBRHxGTU9ERV9XUklURSk7CisJCXJldHVybiBsb2dmc19nZXRfc2JfbXRkKHR5cGUsIGZsYWdzLCBtdGRuciwgbW50KTsKKwl9CisKKwlyZXR1cm4gbG9nZnNfZ2V0X3NiX2RldmljZSh0eXBlLCBmbGFncywgTlVMTCwgYmRldiwgJmJkX2Rldm9wcywgbW50KTsKK30KZGlmZiAtLWdpdCBhL2ZzL2xvZ2ZzL2Rldl9tdGQuYyBiL2ZzL2xvZ2ZzL2Rldl9tdGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWZiNmVmCi0tLSAvZGV2L251bGwKKysrIGIvZnMvbG9nZnMvZGV2X210ZC5jCkBAIC0wLDAgKzEsMjU0IEBACisvKgorICogZnMvbG9nZnMvZGV2X210ZC5jCS0gRGV2aWNlIGFjY2VzcyBtZXRob2RzIGZvciBNVEQKKyAqCisgKiBBcyBzaG91bGQgYmUgb2J2aW91cyBmb3IgTGludXgga2VybmVsIGNvZGUsIGxpY2Vuc2UgaXMgR1BMdjIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCBKb2VybiBFbmdlbCA8am9lcm5AbG9nZnMub3JnPgorICovCisjaW5jbHVkZSAibG9nZnMuaCIKKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjZGVmaW5lIFBBR0VfT0ZTKG9mcykgKChvZnMpICYgKFBBR0VfU0laRS0xKSkKKworc3RhdGljIGludCBtdGRfcmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuLCB2b2lkICpidWYpCit7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBsb2dmc19zdXBlcihzYiktPnNfbXRkOworCXNpemVfdCByZXRsZW47CisJaW50IHJldDsKKworCXJldCA9IG10ZC0+cmVhZChtdGQsIG9mcywgbGVuLCAmcmV0bGVuLCBidWYpOworCUJVR19PTihyZXQgPT0gLUVJTlZBTCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBsb29wIGluc3RlYWQuICovCisJaWYgKHJldGxlbiAhPSBsZW4pCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRkX3dyaXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4sIHZvaWQgKmJ1ZikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gc3VwZXItPnNfbXRkOworCXNpemVfdCByZXRsZW47CisJbG9mZl90IHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kOworCWludCByZXQ7CisKKwlpZiAoc3VwZXItPnNfZmxhZ3MgJiBMT0dGU19TQl9GTEFHX1JPKQorCQlyZXR1cm4gLUVST0ZTOworCisJQlVHX09OKChvZnMgPj0gbXRkLT5zaXplKSB8fCAobGVuID4gbXRkLT5zaXplIC0gb2ZzKSk7CisJQlVHX09OKG9mcyAhPSAob2ZzID4+IHN1cGVyLT5zX3dyaXRlc2hpZnQpIDw8IHN1cGVyLT5zX3dyaXRlc2hpZnQpOworCUJVR19PTihsZW4gPiBQQUdFX0NBQ0hFX1NJWkUpOworCXBhZ2Vfc3RhcnQgPSBvZnMgJiBQQUdFX0NBQ0hFX01BU0s7CisJcGFnZV9lbmQgPSBQQUdFX0NBQ0hFX0FMSUdOKG9mcyArIGxlbikgLSAxOworCXJldCA9IG10ZC0+d3JpdGUobXRkLCBvZnMsIGxlbiwgJnJldGxlbiwgYnVmKTsKKwlpZiAocmV0IHx8IChyZXRsZW4gIT0gbGVuKSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZvciBhcyBsb25nIGFzIEkgY2FuIHJlbWVtYmVyIChzaW5jZSBhYm91dCAyMDAxKSBtdGQtPmVyYXNlIGhhcyBiZWVuIGFuCisgKiBhc3luY2hyb25vdXMgaW50ZXJmYWNlIGxhY2tpbmcgdGhlIGZpcnN0IGRyaXZlciB0byBhY3R1YWxseSB1c2UgdGhlCisgKiBhc3luY2hyb25vdXMgcHJvcGVydGllcy4gIFNvIGp1c3QgdG8gcHJldmVudCB0aGUgZmlyc3QgaW1wbGVtZW50b3Igb2Ygc3VjaAorICogYSB0aGluZyBmcm9tIGJyZWFraW5nIGxvZ2ZzIGluIDIzNTAsIHdlIGRvIHRoZSB1c3VhbCBwb2ludGxlc3MgZGFuY2UgdG8KKyAqIGRlY2xhcmUgYSBjb21wbGV0aW9uIHZhcmlhYmxlIGFuZCB3YWl0IGZvciBjb21wbGV0aW9uIGJlZm9yZSByZXR1cm5pbmcKKyAqIGZyb20gbXRkX2VyYXNlKCkuICBXaGF0IGFuIGV4Y2VyY2lzZSBpbiBmdXRpbGl0eSEKKyAqLworc3RhdGljIHZvaWQgbG9nZnNfZXJhc2VfY2FsbGJhY2soc3RydWN0IGVyYXNlX2luZm8gKmVpKQoreworCWNvbXBsZXRlKChzdHJ1Y3QgY29tcGxldGlvbiAqKWVpLT5wcml2KTsKK30KKworc3RhdGljIGludCBtdGRfZXJhc2VfbWFwcGluZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBzdXBlci0+c19tYXBwaW5nX2lub2RlLT5pX21hcHBpbmc7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJcGdvZmZfdCBpbmRleCA9IG9mcyA+PiBQQUdFX1NISUZUOworCisJZm9yIChpbmRleCA9IG9mcyA+PiBQQUdFX1NISUZUOyBpbmRleCA8IChvZnMgKyBsZW4pID4+IFBBR0VfU0hJRlQ7IGluZGV4KyspIHsKKwkJcGFnZSA9IGZpbmRfZ2V0X3BhZ2UobWFwcGluZywgaW5kZXgpOworCQlpZiAoIXBhZ2UpCisJCQljb250aW51ZTsKKwkJbWVtc2V0KHBhZ2VfYWRkcmVzcyhwYWdlKSwgMHhGRiwgUEFHRV9TSVpFKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGRfZXJhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgbG9mZl90IG9mcywgc2l6ZV90IGxlbiwKKwkJaW50IGVuc3VyZV93cml0ZSkKK3sKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IGxvZ2ZzX3N1cGVyKHNiKS0+c19tdGQ7CisJc3RydWN0IGVyYXNlX2luZm8gZWk7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soY29tcGxldGUpOworCWludCByZXQ7CisKKwlCVUdfT04obGVuICUgbXRkLT5lcmFzZXNpemUpOworCWlmIChsb2dmc19zdXBlcihzYiktPnNfZmxhZ3MgJiBMT0dGU19TQl9GTEFHX1JPKQorCQlyZXR1cm4gLUVST0ZTOworCisJbWVtc2V0KCZlaSwgMCwgc2l6ZW9mKGVpKSk7CisJZWkubXRkID0gbXRkOworCWVpLmFkZHIgPSBvZnM7CisJZWkubGVuID0gbGVuOworCWVpLmNhbGxiYWNrID0gbG9nZnNfZXJhc2VfY2FsbGJhY2s7CisJZWkucHJpdiA9IChsb25nKSZjb21wbGV0ZTsKKwlyZXQgPSBtdGQtPmVyYXNlKG10ZCwgJmVpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVJTzsKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNvbXBsZXRlKTsKKwlpZiAoZWkuc3RhdGUgIT0gTVREX0VSQVNFX0RPTkUpCisJCXJldHVybiAtRUlPOworCXJldHVybiBtdGRfZXJhc2VfbWFwcGluZyhzYiwgb2ZzLCBsZW4pOworfQorCitzdGF0aWMgdm9pZCBtdGRfc3luYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbG9nZnNfc3VwZXIoc2IpLT5zX210ZDsKKworCWlmIChtdGQtPnN5bmMpCisJCW10ZC0+c3luYyhtdGQpOworfQorCitzdGF0aWMgaW50IG10ZF9yZWFkcGFnZSh2b2lkICpfc2IsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBfc2I7CisJaW50IGVycjsKKworCWVyciA9IG10ZF9yZWFkKHNiLCBwYWdlLT5pbmRleCA8PCBQQUdFX1NISUZULCBQQUdFX1NJWkUsCisJCQlwYWdlX2FkZHJlc3MocGFnZSkpOworCWlmIChlcnIgPT0gLUVVQ0xFQU4pIHsKKwkJZXJyID0gMDsKKwkJLyogRklYTUU6IGZvcmNlIEdDIHRoaXMgc2VnbWVudCAqLworCX0KKwlpZiAoZXJyKSB7CisJCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOworCQlTZXRQYWdlRXJyb3IocGFnZSk7CisJfSBlbHNlIHsKKwkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCQlDbGVhclBhZ2VFcnJvcihwYWdlKTsKKwl9CisJdW5sb2NrX3BhZ2UocGFnZSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBwYWdlICptdGRfZmluZF9maXJzdF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgKm9mcykKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gc3VwZXItPnNfbWFwcGluZ19pbm9kZS0+aV9tYXBwaW5nOworCWZpbGxlcl90ICpmaWxsZXIgPSBtdGRfcmVhZHBhZ2U7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBzdXBlci0+c19tdGQ7CisKKwlpZiAoIW10ZC0+YmxvY2tfaXNiYWQpCisJCXJldHVybiBOVUxMOworCisJKm9mcyA9IDA7CisJd2hpbGUgKG10ZC0+YmxvY2tfaXNiYWQobXRkLCAqb2ZzKSkgeworCQkqb2ZzICs9IG10ZC0+ZXJhc2VzaXplOworCQlpZiAoKm9mcyA+PSBtdGQtPnNpemUpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisJQlVHX09OKCpvZnMgJiB+UEFHRV9NQVNLKTsKKwlyZXR1cm4gcmVhZF9jYWNoZV9wYWdlKG1hcHBpbmcsICpvZnMgPj4gUEFHRV9TSElGVCwgZmlsbGVyLCBzYik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqbXRkX2ZpbmRfbGFzdF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgKm9mcykKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gc3VwZXItPnNfbWFwcGluZ19pbm9kZS0+aV9tYXBwaW5nOworCWZpbGxlcl90ICpmaWxsZXIgPSBtdGRfcmVhZHBhZ2U7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBzdXBlci0+c19tdGQ7CisKKwlpZiAoIW10ZC0+YmxvY2tfaXNiYWQpCisJCXJldHVybiBOVUxMOworCisJKm9mcyA9IG10ZC0+c2l6ZSAtIG10ZC0+ZXJhc2VzaXplOworCXdoaWxlIChtdGQtPmJsb2NrX2lzYmFkKG10ZCwgKm9mcykpIHsKKwkJKm9mcyAtPSBtdGQtPmVyYXNlc2l6ZTsKKwkJaWYgKCpvZnMgPD0gMCkKKwkJCXJldHVybiBOVUxMOworCX0KKwkqb2ZzID0gKm9mcyArIG10ZC0+ZXJhc2VzaXplIC0gMHgxMDAwOworCUJVR19PTigqb2ZzICYgflBBR0VfTUFTSyk7CisJcmV0dXJuIHJlYWRfY2FjaGVfcGFnZShtYXBwaW5nLCAqb2ZzID4+IFBBR0VfU0hJRlQsIGZpbGxlciwgc2IpOworfQorCitzdGF0aWMgaW50IF9fbXRkX3dyaXRlc2VnKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBvZnMsIHBnb2ZmX3QgaW5kZXgsCisJCXNpemVfdCBucl9wYWdlcykKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gc3VwZXItPnNfbWFwcGluZ19pbm9kZS0+aV9tYXBwaW5nOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCBpLCBlcnI7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgeworCQlwYWdlID0gZmluZF9sb2NrX3BhZ2UobWFwcGluZywgaW5kZXggKyBpKTsKKwkJQlVHX09OKCFwYWdlKTsKKworCQllcnIgPSBtdGRfd3JpdGUoc2IsIHBhZ2UtPmluZGV4IDw8IFBBR0VfU0hJRlQsIFBBR0VfU0laRSwKKwkJCQlwYWdlX2FkZHJlc3MocGFnZSkpOworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10ZF93cml0ZXNlZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgb2ZzLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJaW50IGhlYWQ7CisKKwlpZiAoc3VwZXItPnNfZmxhZ3MgJiBMT0dGU19TQl9GTEFHX1JPKQorCQlyZXR1cm47CisKKwlpZiAobGVuID09IDApIHsKKwkJLyogVGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlIG9iamVjdCBmaXQgcGVyZmVjdGx5IGludG8gYQorCQkgKiBzZWdtZW50LCB0aGUgc2VnbWVudCBnZXRzIHdyaXR0ZW4gcGVyIHN5bmMgYW5kIHN1YnNlcXVlbnRseQorCQkgKiBjbG9zZWQuCisJCSAqLworCQlyZXR1cm47CisJfQorCWhlYWQgPSBvZnMgJiAoUEFHRV9TSVpFIC0gMSk7CisJaWYgKGhlYWQpIHsKKwkJb2ZzIC09IGhlYWQ7CisJCWxlbiArPSBoZWFkOworCX0KKwlsZW4gPSBQQUdFX0FMSUdOKGxlbik7CisJX19tdGRfd3JpdGVzZWcoc2IsIG9mcywgb2ZzID4+IFBBR0VfU0hJRlQsIGxlbiA+PiBQQUdFX1NISUZUKTsKK30KKworc3RhdGljIHZvaWQgbXRkX3B1dF9kZXZpY2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlwdXRfbXRkX2RldmljZShsb2dmc19zdXBlcihzYiktPnNfbXRkKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBsb2dmc19kZXZpY2Vfb3BzIG10ZF9kZXZvcHMgPSB7CisJLmZpbmRfZmlyc3Rfc2IJPSBtdGRfZmluZF9maXJzdF9zYiwKKwkuZmluZF9sYXN0X3NiCT0gbXRkX2ZpbmRfbGFzdF9zYiwKKwkucmVhZHBhZ2UJPSBtdGRfcmVhZHBhZ2UsCisJLndyaXRlc2VnCT0gbXRkX3dyaXRlc2VnLAorCS5lcmFzZQkJPSBtdGRfZXJhc2UsCisJLnN5bmMJCT0gbXRkX3N5bmMsCisJLnB1dF9kZXZpY2UJPSBtdGRfcHV0X2RldmljZSwKK307CisKK2ludCBsb2dmc19nZXRfc2JfbXRkKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCBpbnQgZmxhZ3MsCisJCWludCBtdGRuciwgc3RydWN0IHZmc21vdW50ICptbnQpCit7CisJc3RydWN0IG10ZF9pbmZvICptdGQ7CisJY29uc3Qgc3RydWN0IGxvZ2ZzX2RldmljZV9vcHMgKmRldm9wcyA9ICZtdGRfZGV2b3BzOworCisJbXRkID0gZ2V0X210ZF9kZXZpY2UoTlVMTCwgbXRkbnIpOworCXJldHVybiBsb2dmc19nZXRfc2JfZGV2aWNlKHR5cGUsIGZsYWdzLCBtdGQsIE5VTEwsIGRldm9wcywgbW50KTsKK30KZGlmZiAtLWdpdCBhL2ZzL2xvZ2ZzL2Rpci5jIGIvZnMvbG9nZnMvZGlyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZhOGJmYgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2xvZ2ZzL2Rpci5jCkBAIC0wLDAgKzEsODI3IEBACisvKgorICogZnMvbG9nZnMvZGlyLmMJLSBkaXJlY3RvcnktcmVsYXRlZCBjb2RlCisgKgorICogQXMgc2hvdWxkIGJlIG9idmlvdXMgZm9yIExpbnV4IGtlcm5lbCBjb2RlLCBsaWNlbnNlIGlzIEdQTHYyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDggSm9lcm4gRW5nZWwgPGpvZXJuQGxvZ2ZzLm9yZz4KKyAqLworI2luY2x1ZGUgImxvZ2ZzLmgiCisKKworLyoKKyAqIEF0b21pYyBkaXIgb3BlcmF0aW9ucworICoKKyAqIERpcmVjdG9yeSBvcGVyYXRpb25zIGFyZSBieSBkZWZhdWx0IG5vdCBhdG9taWMuICBEZW50cmllcyBhbmQgSW5vZGVzIGFyZQorICogY3JlYXRlZC9yZW1vdmVkL2FsdGVyZWQgaW4gc2VwZXJhdGUgb3BlcmF0aW9ucy4gIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIGRvCisgKiBhIHNtYWxsIGFtb3VudCBvZiBqb3VybmFsaW5nLgorICoKKyAqIENyZWF0ZSwgbGluaywgbWtkaXIsIG1rbm9kIGFuZCBzeW1saW5rIGFsbCBzaGFyZSB0aGUgc2FtZSBmdW5jdGlvbiB0byBkbworICogdGhlIHdvcms6IF9fbG9nZnNfY3JlYXRlLiAgVGhpcyBmdW5jdGlvbiB3b3JrcyBpbiB0d28gYXRvbWljIHN0ZXBzOgorICogMS4gYWxsb2NhdGUgaW5vZGUgKHJlbWVtYmVyIGluIGpvdXJuYWwpCisgKiAyLiBhbGxvY2F0ZSBkZW50cnkgKGNsZWFyIGpvdXJuYWwpCisgKgorICogQXMgd2UgY2FuIG9ubHkgZ2V0IGludGVycnVwdGVkIGJldHdlZW4gdGhlIHR3bywgd2hlbiB0aGUgaW5vZGUgd2UganVzdAorICogY3JlYXRlZCBpcyBzaW1wbHkgc3RvcmVkIGluIHRoZSBhbmNob3IuICBPbiBuZXh0IG1vdW50LCBpZiB3ZSB3ZXJlCisgKiBpbnRlcnJ1cHRlZCwgd2UgZGVsZXRlIHRoZSBpbm9kZS4gIEZyb20gYSB1c2VycyBwb2ludCBvZiB2aWV3IHRoZQorICogb3BlcmF0aW9uIG5ldmVyIGhhcHBlbmVkLgorICoKKyAqIFVubGluayBhbmQgcm1kaXIgYWxzbyBzaGFyZSB0aGUgc2FtZSBmdW5jdGlvbjogdW5saW5rLiAgQWdhaW4sIHRoaXMKKyAqIGZ1bmN0aW9uIHdvcmtzIGluIHR3byBhdG9taWMgc3RlcHMKKyAqIDEuIHJlbW92ZSBkZW50cnkgKHJlbWVtYmVyIGlub2RlIGluIGpvdXJuYWwpCisgKiAyLiB1bmxpbmsgaW5vZGUgKGNsZWFyIGpvdXJuYWwpCisgKgorICogQW5kIGFnYWluLCBvbiB0aGUgbmV4dCBtb3VudCwgaWYgd2Ugd2VyZSBpbnRlcnJ1cHRlZCwgd2UgZGVsZXRlIHRoZSBpbm9kZS4KKyAqIEZyb20gYSB1c2VycyBwb2ludCBvZiB2aWV3IHRoZSBvcGVyYXRpb24gc3VjY2VlZGVkLgorICoKKyAqIFJlbmFtZSBpcyB0aGUgcmVhbCBwYWluIHRvIGRlYWwgd2l0aCwgaGFyZGVyIHRoYW4gYWxsIHRoZSBvdGhlciBtZXRob2RzCisgKiBjb21iaW5lZC4gIERlcGVuZGluZyBvbiB0aGUgY2lyY3Vtc3RhbmNlcyB3ZSBjYW4gcnVuIGludG8gdGhyZWUgY2FzZXMuCisgKiBBICJ0YXJnZXQgcmVuYW1lIiB3aGVyZSB0aGUgdGFyZ2V0IGRlbnRyeSBhbHJlYWR5IGV4aXN0ZWQsIGEgImxvY2FsCisgKiByZW5hbWUiIHdoZXJlIGJvdGggcGFyZW50IGRpcmVjdG9yaWVzIGFyZSBpZGVudGljYWwgb3IgYSAiY3Jvc3MtZGlyZWN0b3J5CisgKiByZW5hbWUiIGluIHRoZSByZW1haW5pbmcgY2FzZS4KKyAqCisgKiBMb2NhbCByZW5hbWUgaXMgYXRvbWljLCBhcyB0aGUgb2xkIGRlbnRyeSBpcyBzaW1wbHkgcmV3cml0dGVuIHdpdGggYSBuZXcKKyAqIG5hbWUuCisgKgorICogQ3Jvc3MtZGlyZWN0b3J5IHJlbmFtZSB3b3JrcyBpbiB0d28gc3RlcHMsIHNpbWlsYXIgdG8gX19sb2dmc19jcmVhdGUgYW5kCisgKiBsb2dmc191bmxpbms6CisgKiAxLiBXcml0ZSBuZXcgZGVudHJ5IChyZW1lbWJlciBvbGQgZGVudHJ5IGluIGpvdXJuYWwpCisgKiAyLiBSZW1vdmUgb2xkIGRlbnRyeSAoY2xlYXIgam91cm5hbCkKKyAqCisgKiBIZXJlIHdlIHJlbWVtYmVyIGEgZGVudHJ5IGluc3RlYWQgb2YgYW4gaW5vZGUuICBPbiBuZXh0IG1vdW50LCBpZiB3ZSB3ZXJlCisgKiBpbnRlcnJ1cHRlZCwgd2UgZGVsZXRlIHRoZSBkZW50cnkuICBGcm9tIGEgdXNlcnMgcG9pbnQgb2YgdmlldywgdGhlCisgKiBvcGVyYXRpb24gc3VjY2VlZGVkLgorICoKKyAqIFRhcmdldCByZW5hbWUgd29ya3MgaW4gdGhyZWUgYXRvbWljIHN0ZXBzOgorICogMS4gQXR0YWNoIG9sZCBpbm9kZSB0byBuZXcgZGVudHJ5IChyZW1lbWJlciBvbGQgZGVudHJ5IGFuZCBuZXcgaW5vZGUpCisgKiAyLiBSZW1vdmUgb2xkIGRlbnRyeSAoc3RpbGwgcmVtZW1iZXIgdGhlIG5ldyBpbm9kZSkKKyAqIDMuIFJlbW92ZSB2aWN0aW0gaW5vZGUKKyAqCisgKiBIZXJlIHdlIHJlbWVtYmVyIGJvdGggYW4gaW5vZGUgYW4gYSBkZW50cnkuICBJZiB3ZSBnZXQgaW50ZXJydXB0ZWQKKyAqIGJldHdlZW4gc3RlcHMgMSBhbmQgMiwgd2UgZGVsZXRlIGJvdGggdGhlIGRlbnRyeSBhbmQgdGhlIGlub2RlLiAgSWYKKyAqIHdlIGdldCBpbnRlcnJ1cHRlZCBiZXR3ZWVuIHN0ZXBzIDIgYW5kIDMsIHdlIGRlbGV0ZSBqdXN0IHRoZSBpbm9kZS4KKyAqIEluIGVpdGhlciBjYXNlLCB0aGUgcmVtYWluaW5nIG9iamVjdHMgYXJlIGRlbGV0ZWQgb24gbmV4dCBtb3VudC4gIEZyb20KKyAqIGEgdXNlcnMgcG9pbnQgb2YgdmlldywgdGhlIG9wZXJhdGlvbiBzdWNjZWVkZWQuCisgKi8KKworc3RhdGljIGludCB3cml0ZV9kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBsb2dmc19kaXNrX2RlbnRyeSAqZGQsCisJCWxvZmZfdCBwb3MpCit7CisJcmV0dXJuIGxvZ2ZzX2lub2RlX3dyaXRlKGRpciwgZGQsIHNpemVvZigqZGQpLCBwb3MsIFdGX0xPQ0ssIE5VTEwpOworfQorCitzdGF0aWMgaW50IHdyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIF9fbG9nZnNfd3JpdGVfaW5vZGUoaW5vZGUsIFdGX0xPQ0spOworfQorCitzdGF0aWMgczY0IGRpcl9zZWVrX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgczY0IHBvcykKK3sKKwlzNjQgbmV3X3BvcyA9IGxvZ2ZzX3NlZWtfZGF0YShpbm9kZSwgcG9zKTsKKworCXJldHVybiBtYXgocG9zLCBuZXdfcG9zIC0gMSk7Cit9CisKK3N0YXRpYyBpbnQgYmV5b25kX2VvZihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgYml4KQoreworCWxvZmZfdCBwb3MgPSBiaXggPDwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7CisJcmV0dXJuIHBvcyA+PSBpX3NpemVfcmVhZChpbm9kZSk7Cit9CisKKy8qCisgKiBQcmltZSB2YWx1ZSB3YXMgY2hvc2VuIHRvIGJlIHJvdWdobHkgMjU2ICsgMjYuICByNSBoYXNoIHVzZXMgMTEsCisgKiBzbyBzaG9ydCBuYW1lcyAobGVuIDw9IDkpIGRvbid0IGV2ZW4gb2NjdXB5IHRoZSBjb21wbGV0ZSAzMmJpdCBuYW1lCisgKiBzcGFjZS4gIEEgcHJpbWUgPjI1NiBlbnN1cmVzIHNob3J0IG5hbWVzIHF1aWNrbHkgc3ByZWFkIHRoZSAzMmJpdAorICogbmFtZSBzcGFjZS4gIEFkZCBhYm91dCAyNiBmb3IgdGhlIGVzdGltYXRlZCBhbW91bnQgb2YgaW5mb3JtYXRpb24KKyAqIG9mIGVhY2ggY2hhcmFjdGVyIGFuZCBwaWNrIGEgcHJpbWUgbmVhcmJ5LCBwcmVmZXJyYWJseSBhIGJpdC1zcGFyc2UKKyAqIG9uZS4KKyAqLworc3RhdGljIHUzMiBoYXNoXzMyKGNvbnN0IGNoYXIgKnMsIGludCBsZW4sIHUzMiBzZWVkKQoreworCXUzMiBoYXNoID0gc2VlZDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJaGFzaCA9IGhhc2ggKiAyOTMgKyBzW2ldOworCXJldHVybiBoYXNoOworfQorCisvKgorICogV2UgaGF2ZSB0byBzYXRpc2Z5IHNldmVyYWwgY29uZmxpY3RpbmcgcmVxdWlyZW1lbnRzIGhlcmUuICBTbWFsbAorICogZGlyZWN0b3JpZXMgc2hvdWxkIHN0YXkgZmFpcmx5IGNvbXBhY3QgYW5kIG5vdCByZXF1aXJlIHRvbyBtYW55CisgKiBpbmRpcmVjdCBibG9ja3MuICBUaGUgbnVtYmVyIG9mIHBvc3NpYmxlIGxvY2F0aW9ucyBmb3IgYSBnaXZlbiBoYXNoCisgKiBzaG91bGQgYmUgc21hbGwgdG8gbWFrZSBsb29rdXAoKSBmYXN0LiAgQW5kIHdlIHNob3VsZCB0cnkgaGFyZCBub3QKKyAqIHRvIG92ZXJmbG93IHRoZSAzMmJpdCBuYW1lIHNwYWNlIG9yIG5mcyBhbmQgMzJiaXQgaG9zdCBzeXN0ZW1zIHdpbGwKKyAqIGJlIHVuaGFwcHkuCisgKgorICogU28gd2UgdXNlIHRoZSBmb2xsb3dpbmcgc2NoZW1lLiAgRmlyc3Qgd2UgcmVkdWNlIHRoZSBoYXNoIHRvIDAuLjE1CisgKiBhbmQgdHJ5IGEgZGlyZWN0IGJsb2NrLiAgSWYgdGhhdCBpcyBvY2N1cGllZCB3ZSByZWR1Y2UgdGhlIGhhc2ggdG8KKyAqIDE2Li4yNTUgYW5kIHRyeSBhbiBpbmRpcmVjdCBibG9jay4gIFNhbWUgZm9yIDJ4IGFuZCAzeCBpbmRpcmVjdAorICogYmxvY2tzLiAgTGFzdGx5IHdlIHJlZHVjZSB0aGUgaGFzaCB0byAweDgwMF8wMDAwIC4uIDB4ZmZmZl9mZmZmLAorICogYnV0IHVzZSBidWNrZXRzIGNvbnRhaW5pbmcgZWlnaHQgZW50cmllcyBpbnN0ZWFkIG9mIGEgc2luZ2xlIG9uZS4KKyAqCisgKiBVc2luZyAxNiBlbnRyaWVzIHNob3VsZCBhbGxvdyBmb3IgYSByZWFzb25hYmxlIGFtb3VudCBvZiBoYXNoCisgKiBjb2xsaXNpb25zLCBzbyB0aGUgMzJiaXQgbmFtZSBzcGFjZSBjYW4gYmUgcGFja2VkIGZhaXJseSB0aWdodAorICogYmVmb3JlIG92ZXJmbG93aW5nLiAgT2ggYW5kIGN1cnJlbnRseSB3ZSBkb24ndCBvdmVyZmxvdyBidXQgcmV0dXJuCisgKiBhbmQgZXJyb3IuCisgKgorICogSG93IGxpa2VseSBhcmUgY29sbGlzaW9ucz8gIERvaW5nIHRoZSBhcHByb3ByaWF0ZSBtYXRoIGlzIGJleW9uZCBtZQorICogYW5kIHRoZSBCcm9uc3RlaW4gdGV4dGJvb2suICBCdXQgcnVubmluZyBhIHRlc3QgcHJvZ3JhbSB0byBicnV0ZQorICogZm9yY2UgY29sbGlzaW9ucyBmb3IgYSBjb3VwbGUgb2YgZGF5cyBzaG93ZWQgdGhhdCBvbiBhdmVyYWdlIHRoZQorICogZmlyc3QgY29sbGlzaW9uIG9jY3VycyBhZnRlciA1OThNIGVudHJpZXMsIHdpdGggMjkwTSBiZWluZyB0aGUKKyAqIHNtYWxsZXN0IHJlc3VsdC4gIE9idmlvdXNseSAyMSBlbnRyaWVzIGNvdWxkIGFscmVhZHkgY2F1c2UgYQorICogY29sbGlzaW9uIGlmIGFsbCBlbnRyaWVzIGFyZSBjYXJlZnVsbHkgY2hvc2VuLgorICovCitzdGF0aWMgcGdvZmZfdCBoYXNoX2luZGV4KHUzMiBoYXNoLCBpbnQgcm91bmQpCit7CisJdTMyIGkwX2Jsb2NrcyA9IEkwX0JMT0NLUzsKKwl1MzIgaTFfYmxvY2tzID0gSTFfQkxPQ0tTOworCXUzMiBpMl9ibG9ja3MgPSBJMl9CTE9DS1M7CisJdTMyIGkzX2Jsb2NrcyA9IEkzX0JMT0NLUzsKKworCXN3aXRjaCAocm91bmQpIHsKKwljYXNlIDA6CisJCXJldHVybiBoYXNoICUgaTBfYmxvY2tzOworCWNhc2UgMToKKwkJcmV0dXJuIGkwX2Jsb2NrcyArIGhhc2ggJSAoaTFfYmxvY2tzIC0gaTBfYmxvY2tzKTsKKwljYXNlIDI6CisJCXJldHVybiBpMV9ibG9ja3MgKyBoYXNoICUgKGkyX2Jsb2NrcyAtIGkxX2Jsb2Nrcyk7CisJY2FzZSAzOgorCQlyZXR1cm4gaTJfYmxvY2tzICsgaGFzaCAlIChpM19ibG9ja3MgLSBpMl9ibG9ja3MpOworCWNhc2UgNCAuLi4gMTk6CisJCXJldHVybiBpM19ibG9ja3MgKyAxNiAqIChoYXNoICUgKCgoMTw8MzEpIC0gaTNfYmxvY2tzKSAvIDE2KSkKKwkJCSsgcm91bmQgLSA0OworCX0KKwlCVUcoKTsKK30KKworc3RhdGljIHN0cnVjdCBwYWdlICpsb2dmc19nZXRfZGRfcGFnZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBxc3RyICpuYW1lID0gJmRlbnRyeS0+ZF9uYW1lOworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBsb2dmc19kaXNrX2RlbnRyeSAqZGQ7CisJdTMyIGhhc2ggPSBoYXNoXzMyKG5hbWUtPm5hbWUsIG5hbWUtPmxlbiwgMCk7CisJcGdvZmZfdCBpbmRleDsKKwlpbnQgcm91bmQ7CisKKwlpZiAobmFtZS0+bGVuID4gTE9HRlNfTUFYX05BTUVMRU4pCisJCXJldHVybiBFUlJfUFRSKC1FTkFNRVRPT0xPTkcpOworCisJZm9yIChyb3VuZCA9IDA7IHJvdW5kIDwgMjA7IHJvdW5kKyspIHsKKwkJaW5kZXggPSBoYXNoX2luZGV4KGhhc2gsIHJvdW5kKTsKKworCQlpZiAoYmV5b25kX2VvZihkaXIsIGluZGV4KSkKKwkJCXJldHVybiBOVUxMOworCQlpZiAoIWxvZ2ZzX2V4aXN0X2Jsb2NrKGRpciwgaW5kZXgpKQorCQkJY29udGludWU7CisJCXBhZ2UgPSByZWFkX2NhY2hlX3BhZ2UoZGlyLT5pX21hcHBpbmcsIGluZGV4LAorCQkJCShmaWxsZXJfdCAqKWxvZ2ZzX3JlYWRwYWdlLCBOVUxMKTsKKwkJaWYgKElTX0VSUihwYWdlKSkKKwkJCXJldHVybiBwYWdlOworCQlkZCA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwkJQlVHX09OKGRkLT5uYW1lbGVuID09IDApOworCisJCWlmIChuYW1lLT5sZW4gIT0gYmUxNl90b19jcHUoZGQtPm5hbWVsZW4pIHx8CisJCQkJbWVtY21wKG5hbWUtPm5hbWUsIGRkLT5uYW1lLCBuYW1lLT5sZW4pKSB7CisJCQlrdW5tYXBfYXRvbWljKGRkLCBLTV9VU0VSMCk7CisJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWt1bm1hcF9hdG9taWMoZGQsIEtNX1VTRVIwKTsKKwkJcmV0dXJuIHBhZ2U7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX3JlbW92ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWludCByZXQ7CisKKwlpbm9kZS0+aV9ubGluay0tOworCXJldCA9IHdyaXRlX2lub2RlKGlub2RlKTsKKwlMT0dGU19CVUdfT04ocmV0LCBpbm9kZS0+aV9zYik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYWJvcnRfdHJhbnNhY3Rpb24oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGxvZ2ZzX3RyYW5zYWN0aW9uICp0YSkKK3sKKwlpZiAobG9nZnNfaW5vZGUoaW5vZGUpLT5saV9ibG9jaykKKwkJbG9nZnNfaW5vZGUoaW5vZGUpLT5saV9ibG9jay0+dGEgPSBOVUxMOworCWtmcmVlKHRhKTsKK30KKworc3RhdGljIGludCBsb2dmc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoZGlyLT5pX3NiKTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBsb2dmc190cmFuc2FjdGlvbiAqdGE7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJcGdvZmZfdCBpbmRleDsKKwlpbnQgcmV0OworCisJdGEgPSBremFsbG9jKHNpemVvZigqdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRhLT5zdGF0ZSA9IFVOTElOS18xOworCXRhLT5pbm8gPSBpbm9kZS0+aV9pbm87CisKKwlpbm9kZS0+aV9jdGltZSA9IGRpci0+aV9jdGltZSA9IGRpci0+aV9tdGltZSA9IENVUlJFTlRfVElNRTsKKworCXBhZ2UgPSBsb2dmc19nZXRfZGRfcGFnZShkaXIsIGRlbnRyeSk7CisJaWYgKCFwYWdlKSB7CisJCWtmcmVlKHRhKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCWlmIChJU19FUlIocGFnZSkpIHsKKwkJa2ZyZWUodGEpOworCQlyZXR1cm4gUFRSX0VSUihwYWdlKTsKKwl9CisJaW5kZXggPSBwYWdlLT5pbmRleDsKKwlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisKKwltdXRleF9sb2NrKCZzdXBlci0+c19kaXJvcF9tdXRleCk7CisJbG9nZnNfYWRkX3RyYW5zYWN0aW9uKGRpciwgdGEpOworCisJcmV0ID0gbG9nZnNfZGVsZXRlKGRpciwgaW5kZXgsIE5VTEwpOworCWlmICghcmV0KQorCQlyZXQgPSB3cml0ZV9pbm9kZShkaXIpOworCisJaWYgKHJldCkgeworCQlhYm9ydF90cmFuc2FjdGlvbihkaXIsIHRhKTsKKwkJcHJpbnRrKEtFUk5fRVJSIkxPR0ZTOiB1bmFibGUgdG8gZGVsZXRlIGlub2RlXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJdGEtPnN0YXRlID0gVU5MSU5LXzI7CisJbG9nZnNfYWRkX3RyYW5zYWN0aW9uKGlub2RlLCB0YSk7CisJcmV0ID0gbG9nZnNfcmVtb3ZlX2lub2RlKGlub2RlKTsKK291dDoKKwltdXRleF91bmxvY2soJnN1cGVyLT5zX2Rpcm9wX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCBsb2dmc19lbXB0eV9kaXIoc3RydWN0IGlub2RlICpkaXIpCit7CisJdTY0IGRhdGE7CisKKwlkYXRhID0gbG9nZnNfc2Vla19kYXRhKGRpciwgMCkgPDwgZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCXJldHVybiBkYXRhID49IGlfc2l6ZV9yZWFkKGRpcik7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCisJaWYgKCFsb2dmc19lbXB0eV9kaXIoaW5vZGUpKQorCQlyZXR1cm4gLUVOT1RFTVBUWTsKKworCXJldHVybiBsb2dmc191bmxpbmsoZGlyLCBkZW50cnkpOworfQorCisvKiBGSVhNRTogcmVhZGRpciBjdXJyZW50bHkgaGFzIGl0J3Mgb3duIGRpcl93YWxrIGNvZGUuICBJIGRvbid0IHNlZSBhIGdvb2QKKyAqIHdheSB0byBjb21iaW5lIHRoZSB0d28gY29waWVzICovCisjZGVmaW5lIElNUExJQ0lUX05PREVTIDIKK3N0YXRpYyBpbnQgX19sb2dmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpidWYsIGZpbGxkaXJfdCBmaWxsZGlyKQoreworCXN0cnVjdCBpbm9kZSAqZGlyID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJbG9mZl90IHBvcyA9IGZpbGUtPmZfcG9zIC0gSU1QTElDSVRfTk9ERVM7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJc3RydWN0IGxvZ2ZzX2Rpc2tfZGVudHJ5ICpkZDsKKwlpbnQgZnVsbDsKKworCUJVR19PTihwb3MgPCAwKTsKKwlmb3IgKDs7IHBvcysrKSB7CisJCWlmIChiZXlvbmRfZW9mKGRpciwgcG9zKSkKKwkJCWJyZWFrOworCQlpZiAoIWxvZ2ZzX2V4aXN0X2Jsb2NrKGRpciwgcG9zKSkgeworCQkJLyogZGVsZXRlZCBkZW50cnkgKi8KKwkJCXBvcyA9IGRpcl9zZWVrX2RhdGEoZGlyLCBwb3MpOworCQkJY29udGludWU7CisJCX0KKwkJcGFnZSA9IHJlYWRfY2FjaGVfcGFnZShkaXItPmlfbWFwcGluZywgcG9zLAorCQkJCShmaWxsZXJfdCAqKWxvZ2ZzX3JlYWRwYWdlLCBOVUxMKTsKKwkJaWYgKElTX0VSUihwYWdlKSkKKwkJCXJldHVybiBQVFJfRVJSKHBhZ2UpOworCQlkZCA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwkJQlVHX09OKGRkLT5uYW1lbGVuID09IDApOworCisJCWZ1bGwgPSBmaWxsZGlyKGJ1ZiwgKGNoYXIgKilkZC0+bmFtZSwgYmUxNl90b19jcHUoZGQtPm5hbWVsZW4pLAorCQkJCXBvcywgYmU2NF90b19jcHUoZGQtPmlubyksIGRkLT50eXBlKTsKKwkJa3VubWFwX2F0b21pYyhkZCwgS01fVVNFUjApOworCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCWlmIChmdWxsKQorCQkJYnJlYWs7CisJfQorCisJZmlsZS0+Zl9wb3MgPSBwb3MgKyBJTVBMSUNJVF9OT0RFUzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2dmc19yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpidWYsIGZpbGxkaXJfdCBmaWxsZGlyKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlpbm9fdCBwaW5vID0gcGFyZW50X2lubyhmaWxlLT5mX2RlbnRyeSk7CisJaW50IGVycjsKKworCWlmIChmaWxlLT5mX3BvcyA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGZpbGUtPmZfcG9zID09IDApIHsKKwkJaWYgKGZpbGxkaXIoYnVmLCAiLiIsIDEsIDEsIGlub2RlLT5pX2lubywgRFRfRElSKSA8IDApCisJCQlyZXR1cm4gMDsKKwkJZmlsZS0+Zl9wb3MrKzsKKwl9CisJaWYgKGZpbGUtPmZfcG9zID09IDEpIHsKKwkJaWYgKGZpbGxkaXIoYnVmLCAiLi4iLCAyLCAyLCBwaW5vLCBEVF9ESVIpIDwgMCkKKwkJCXJldHVybiAwOworCQlmaWxlLT5mX3BvcysrOworCX0KKworCWVyciA9IF9fbG9nZnNfcmVhZGRpcihmaWxlLCBidWYsIGZpbGxkaXIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGxvZ2ZzX3NldF9uYW1lKHN0cnVjdCBsb2dmc19kaXNrX2RlbnRyeSAqZGQsIHN0cnVjdCBxc3RyICpuYW1lKQoreworCWRkLT5uYW1lbGVuID0gY3B1X3RvX2JlMTYobmFtZS0+bGVuKTsKKwltZW1jcHkoZGQtPm5hbWUsIG5hbWUtPm5hbWUsIG5hbWUtPmxlbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb2dmc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJc3RydWN0IG5hbWVpZGF0YSAqbmQpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJc3RydWN0IGxvZ2ZzX2Rpc2tfZGVudHJ5ICpkZDsKKwlwZ29mZl90IGluZGV4OworCXU2NCBpbm8gPSAwOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlwYWdlID0gbG9nZnNfZ2V0X2RkX3BhZ2UoZGlyLCBkZW50cnkpOworCWlmIChJU19FUlIocGFnZSkpCisJCXJldHVybiBFUlJfQ0FTVChwYWdlKTsKKwlpZiAoIXBhZ2UpIHsKKwkJZF9hZGQoZGVudHJ5LCBOVUxMKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWluZGV4ID0gcGFnZS0+aW5kZXg7CisJZGQgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJaW5vID0gYmU2NF90b19jcHUoZGQtPmlubyk7CisJa3VubWFwX2F0b21pYyhkZCwgS01fVVNFUjApOworCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKworCWlub2RlID0gbG9nZnNfaWdldChkaXItPmlfc2IsIGlubyk7CisJaWYgKElTX0VSUihpbm9kZSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIkxvZ0ZTOiBDYW5ub3QgcmVhZCBpbm9kZSAjJWxseCBmb3IgZGVudHJ5ICglbHgsICVseCluIiwKKwkJCQlpbm8sIGRpci0+aV9pbm8sIGluZGV4KTsKKwkJcmV0dXJuIEVSUl9DQVNUKGlub2RlKTsKKwl9CisJcmV0dXJuIGRfc3BsaWNlX2FsaWFzKGlub2RlLCBkZW50cnkpOworfQorCitzdGF0aWMgdm9pZCBncm93X2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgbG9mZl90IGluZGV4KQoreworCWluZGV4ID0gKGluZGV4ICsgMSkgPDwgZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCWlmIChpX3NpemVfcmVhZChkaXIpIDwgaW5kZXgpCisJCWlfc2l6ZV93cml0ZShkaXIsIGluZGV4KTsKK30KKworc3RhdGljIGludCBsb2dmc193cml0ZV9kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgbG9nZnNfZGlza19kZW50cnkgKmRkOworCXUzMiBoYXNoID0gaGFzaF8zMihkZW50cnktPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfbmFtZS5sZW4sIDApOworCXBnb2ZmX3QgaW5kZXg7CisJaW50IHJvdW5kLCBlcnI7CisKKwlmb3IgKHJvdW5kID0gMDsgcm91bmQgPCAyMDsgcm91bmQrKykgeworCQlpbmRleCA9IGhhc2hfaW5kZXgoaGFzaCwgcm91bmQpOworCisJCWlmIChsb2dmc19leGlzdF9ibG9jayhkaXIsIGluZGV4KSkKKwkJCWNvbnRpbnVlOworCQlwYWdlID0gZmluZF9vcl9jcmVhdGVfcGFnZShkaXItPmlfbWFwcGluZywgaW5kZXgsIEdGUF9LRVJORUwpOworCQlpZiAoIXBhZ2UpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlkZCA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwkJbWVtc2V0KGRkLCAwLCBzaXplb2YoKmRkKSk7CisJCWRkLT5pbm8gPSBjcHVfdG9fYmU2NChpbm9kZS0+aV9pbm8pOworCQlkZC0+dHlwZSA9IGxvZ2ZzX3R5cGUoaW5vZGUpOworCQlsb2dmc19zZXRfbmFtZShkZCwgJmRlbnRyeS0+ZF9uYW1lKTsKKwkJa3VubWFwX2F0b21pYyhkZCwgS01fVVNFUjApOworCisJCWVyciA9IGxvZ2ZzX3dyaXRlX2J1ZihkaXIsIHBhZ2UsIFdGX0xPQ0spOworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQlpZiAoIWVycikKKwkJCWdyb3dfZGlyKGRpciwgaW5kZXgpOworCQlyZXR1cm4gZXJyOworCX0KKwkvKiBGSVhNRTogSXMgdGhlcmUgYSBiZXR0ZXIgcmV0dXJuIHZhbHVlPyAgSW4gbW9zdCBjYXNlcyBuZWl0aGVyCisJICogdGhlIGZpbGVzeXN0ZW0gbm9yIHRoZSBkaXJlY3RvcnkgYXJlIGZ1bGwuICBCdXQgd2UgaGF2ZSBoYWQKKwkgKiB0b28gbWFueSBjb2xsaXNpb25zIGZvciB0aGlzIHBhcnRpY3VsYXIgaGFzaCBhbmQgbm8gZmFsbGJhY2suCisJICovCisJcmV0dXJuIC1FTk9TUEM7Cit9CisKK3N0YXRpYyBpbnQgX19sb2dmc19jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqZGVzdCwgbG9uZyBkZXN0bGVuKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihkaXItPmlfc2IpOworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGkgPSBsb2dmc19pbm9kZShpbm9kZSk7CisJc3RydWN0IGxvZ2ZzX3RyYW5zYWN0aW9uICp0YTsKKwlpbnQgcmV0OworCisJdGEgPSBremFsbG9jKHNpemVvZigqdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRhLT5zdGF0ZSA9IENSRUFURV8xOworCXRhLT5pbm8gPSBpbm9kZS0+aV9pbm87CisJbXV0ZXhfbG9jaygmc3VwZXItPnNfZGlyb3BfbXV0ZXgpOworCWxvZ2ZzX2FkZF90cmFuc2FjdGlvbihpbm9kZSwgdGEpOworCisJaWYgKGRlc3QpIHsKKwkJLyogc3ltbGluayAqLworCQlyZXQgPSBsb2dmc19pbm9kZV93cml0ZShpbm9kZSwgZGVzdCwgZGVzdGxlbiwgMCwgV0ZfTE9DSywgTlVMTCk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gd3JpdGVfaW5vZGUoaW5vZGUpOworCX0gZWxzZSB7CisJCS8qIGNyZWF0L21rZGlyL21rbm9kICovCisJCXJldCA9IHdyaXRlX2lub2RlKGlub2RlKTsKKwl9CisJaWYgKHJldCkgeworCQlhYm9ydF90cmFuc2FjdGlvbihpbm9kZSwgdGEpOworCQlsaS0+bGlfZmxhZ3MgfD0gTE9HRlNfSUZfU1RJTExCT1JOOworCQkvKiBGSVhNRTogdHJ1bmNhdGUgc3ltbGluayAqLworCQlpbm9kZS0+aV9ubGluay0tOworCQlpcHV0KGlub2RlKTsKKwkJZ290byBvdXQ7CisJfQorCisJdGEtPnN0YXRlID0gQ1JFQVRFXzI7CisJbG9nZnNfYWRkX3RyYW5zYWN0aW9uKGRpciwgdGEpOworCXJldCA9IGxvZ2ZzX3dyaXRlX2RpcihkaXIsIGRlbnRyeSwgaW5vZGUpOworCS8qIHN5bmMgZGlyZWN0b3J5ICovCisJaWYgKCFyZXQpCisJCXJldCA9IHdyaXRlX2lub2RlKGRpcik7CisKKwlpZiAocmV0KSB7CisJCWxvZ2ZzX2RlbF90cmFuc2FjdGlvbihkaXIsIHRhKTsKKwkJdGEtPnN0YXRlID0gQ1JFQVRFXzI7CisJCWxvZ2ZzX2FkZF90cmFuc2FjdGlvbihpbm9kZSwgdGEpOworCQlsb2dmc19yZW1vdmVfaW5vZGUoaW5vZGUpOworCQlpcHV0KGlub2RlKTsKKwkJZ290byBvdXQ7CisJfQorCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZzdXBlci0+c19kaXJvcF9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBsb2dmc19ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCisJLyoKKwkgKiBGSVhNRTogd2h5IGRvIHdlIGhhdmUgdG8gZmlsbCBpbiBTX0lGRElSLCB3aGlsZSB0aGUgbW9kZSBpcworCSAqIGNvcnJlY3QgZm9yIG1rbm9kLCBjcmVhdCwgZXRjLj8gIFNtZWxscyBsaWtlIHRoZSB2ZnMgKnNob3VsZCoKKwkgKiBkbyBpdCBmb3IgdXMgYnV0IGZvciBzb21lIHJlYXNvbiBmYWlscyB0byBkbyBzby4KKwkgKi8KKwlpbm9kZSA9IGxvZ2ZzX25ld19pbm9kZShkaXIsIFNfSUZESVIgfCBtb2RlKTsKKwlpZiAoSVNfRVJSKGlub2RlKSkKKwkJcmV0dXJuIFBUUl9FUlIoaW5vZGUpOworCisJaW5vZGUtPmlfb3AgPSAmbG9nZnNfZGlyX2lvcHM7CisJaW5vZGUtPmlfZm9wID0gJmxvZ2ZzX2Rpcl9mb3BzOworCisJcmV0dXJuIF9fbG9nZnNfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZSwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLAorCQlzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCisJaW5vZGUgPSBsb2dmc19uZXdfaW5vZGUoZGlyLCBtb2RlKTsKKwlpZiAoSVNfRVJSKGlub2RlKSkKKwkJcmV0dXJuIFBUUl9FUlIoaW5vZGUpOworCisJaW5vZGUtPmlfb3AgPSAmbG9nZnNfcmVnX2lvcHM7CisJaW5vZGUtPmlfZm9wID0gJmxvZ2ZzX3JlZ19mb3BzOworCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJmxvZ2ZzX3JlZ19hb3BzOworCisJcmV0dXJuIF9fbG9nZnNfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZSwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsCisJCWRldl90IHJkZXYpCit7CisJc3RydWN0IGlub2RlICppbm9kZTsKKworCWlmIChkZW50cnktPmRfbmFtZS5sZW4gPiBMT0dGU19NQVhfTkFNRUxFTikKKwkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CisKKwlpbm9kZSA9IGxvZ2ZzX25ld19pbm9kZShkaXIsIG1vZGUpOworCWlmIChJU19FUlIoaW5vZGUpKQorCQlyZXR1cm4gUFRSX0VSUihpbm9kZSk7CisKKwlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIG1vZGUsIHJkZXYpOworCisJcmV0dXJuIF9fbG9nZnNfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZSwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQljb25zdCBjaGFyICp0YXJnZXQpCit7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzaXplX3QgZGVzdGxlbiA9IHN0cmxlbih0YXJnZXQpICsgMTsKKworCWlmIChkZXN0bGVuID4gZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZSkKKwkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CisKKwlpbm9kZSA9IGxvZ2ZzX25ld19pbm9kZShkaXIsIFNfSUZMTksgfCAwNzc3KTsKKwlpZiAoSVNfRVJSKGlub2RlKSkKKwkJcmV0dXJuIFBUUl9FUlIoaW5vZGUpOworCisJaW5vZGUtPmlfb3AgPSAmbG9nZnNfc3ltbGlua19pb3BzOworCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJmxvZ2ZzX3JlZ19hb3BzOworCisJcmV0dXJuIF9fbG9nZnNfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZSwgdGFyZ2V0LCBkZXN0bGVuKTsKK30KKworc3RhdGljIGludCBsb2dmc19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQoreworCXJldHVybiBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIE5VTEwpOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCisJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gb2xkX2RlbnRyeS0+ZF9pbm9kZTsKKworCWlmIChpbm9kZS0+aV9ubGluayA+PSBMT0dGU19MSU5LX01BWCkKKwkJcmV0dXJuIC1FTUxJTks7CisKKwlpbm9kZS0+aV9jdGltZSA9IGRpci0+aV9jdGltZSA9IGRpci0+aV9tdGltZSA9IENVUlJFTlRfVElNRTsKKwlhdG9taWNfaW5jKCZpbm9kZS0+aV9jb3VudCk7CisJaW5vZGUtPmlfbmxpbmsrKzsKKwltYXJrX2lub2RlX2RpcnR5X3N5bmMoaW5vZGUpOworCisJcmV0dXJuIF9fbG9nZnNfY3JlYXRlKGRpciwgZGVudHJ5LCBpbm9kZSwgTlVMTCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfZ2V0X2RkKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCXN0cnVjdCBsb2dmc19kaXNrX2RlbnRyeSAqZGQsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCXZvaWQgKm1hcDsKKworCXBhZ2UgPSBsb2dmc19nZXRfZGRfcGFnZShkaXIsIGRlbnRyeSk7CisJaWYgKElTX0VSUihwYWdlKSkKKwkJcmV0dXJuIFBUUl9FUlIocGFnZSk7CisJKnBvcyA9IHBhZ2UtPmluZGV4OworCW1hcCA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwltZW1jcHkoZGQsIG1hcCwgc2l6ZW9mKCpkZCkpOworCWt1bm1hcF9hdG9taWMobWFwLCBLTV9VU0VSMCk7CisJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX2RlbGV0ZV9kZChzdHJ1Y3QgaW5vZGUgKmRpciwgbG9mZl90IHBvcykKK3sKKwkvKgorCSAqIEdldHRpbmcgY2FsbGVkIHdpdGggcG9zIHNvbWV3aGVyZSBiZXlvbmQgZW9mIGlzIGVpdGhlciBhIGdvb2Z1cAorCSAqIHdpdGhpbiB0aGlzIGZpbGUgb3IgbWVhbnMgc29tZW9uZSBtYWxpY2lvdXNseSBlZGl0ZWQgdGhlCisJICogKGNyYy1wcm90ZWN0ZWQpIGpvdXJuYWwuCisJICovCisJQlVHX09OKGJleW9uZF9lb2YoZGlyLCBwb3MpKTsKKwlkaXItPmlfY3RpbWUgPSBkaXItPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUU7CisJbG9nX2RpcigiIERlbGV0ZSBkZW50cnkgKCVseCwgJWxseClcbiIsIGRpci0+aV9pbm8sIHBvcyk7CisJcmV0dXJuIGxvZ2ZzX2RlbGV0ZShkaXIsIHBvcywgTlVMTCk7Cit9CisKKy8qCisgKiBDcm9zcy1kaXJlY3RvcnkgcmVuYW1lLCB0YXJnZXQgZG9lcyBub3QgZXhpc3QuICBKdXN0IGEgbGl0dGxlIG5hc3R5LgorICogQ3JlYXRlIGEgbmV3IGRlbnRyeSBpbiB0aGUgdGFyZ2V0IGRpciwgdGhlbiByZW1vdmUgdGhlIG9sZCBkZW50cnksCisgKiBhbGwgdGhlIHdoaWxlIHRha2luZyBjYXJlIHRvIHJlbWVtYmVyIG91ciBvcGVyYXRpb24gaW4gdGhlIGpvdXJuYWwuCisgKi8KK3N0YXRpYyBpbnQgbG9nZnNfcmVuYW1lX2Nyb3NzKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKKwkJCSAgICAgIHN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIob2xkX2Rpci0+aV9zYik7CisJc3RydWN0IGxvZ2ZzX2Rpc2tfZGVudHJ5IGRkOworCXN0cnVjdCBsb2dmc190cmFuc2FjdGlvbiAqdGE7CisJbG9mZl90IHBvczsKKwlpbnQgZXJyOworCisJLyogMS4gbG9jYXRlIHNvdXJjZSBkZCAqLworCWVyciA9IGxvZ2ZzX2dldF9kZChvbGRfZGlyLCBvbGRfZGVudHJ5LCAmZGQsICZwb3MpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwl0YSA9IGt6YWxsb2Moc2l6ZW9mKCp0YSksIEdGUF9LRVJORUwpOworCWlmICghdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJdGEtPnN0YXRlID0gQ1JPU1NfUkVOQU1FXzE7CisJdGEtPmRpciA9IG9sZF9kaXItPmlfaW5vOworCXRhLT5wb3MgPSBwb3M7CisKKwkvKiAyLiB3cml0ZSB0YXJnZXQgZGQgKi8KKwltdXRleF9sb2NrKCZzdXBlci0+c19kaXJvcF9tdXRleCk7CisJbG9nZnNfYWRkX3RyYW5zYWN0aW9uKG5ld19kaXIsIHRhKTsKKwllcnIgPSBsb2dmc193cml0ZV9kaXIobmV3X2RpciwgbmV3X2RlbnRyeSwgb2xkX2RlbnRyeS0+ZF9pbm9kZSk7CisJaWYgKCFlcnIpCisJCWVyciA9IHdyaXRlX2lub2RlKG5ld19kaXIpOworCisJaWYgKGVycikgeworCQlzdXBlci0+c19yZW5hbWVfZGlyID0gMDsKKwkJc3VwZXItPnNfcmVuYW1lX3BvcyA9IDA7CisJCWFib3J0X3RyYW5zYWN0aW9uKG5ld19kaXIsIHRhKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogMy4gcmVtb3ZlIHNvdXJjZSBkZCAqLworCXRhLT5zdGF0ZSA9IENST1NTX1JFTkFNRV8yOworCWxvZ2ZzX2FkZF90cmFuc2FjdGlvbihvbGRfZGlyLCB0YSk7CisJZXJyID0gbG9nZnNfZGVsZXRlX2RkKG9sZF9kaXIsIHBvcyk7CisJaWYgKCFlcnIpCisJCWVyciA9IHdyaXRlX2lub2RlKG9sZF9kaXIpOworCUxPR0ZTX0JVR19PTihlcnIsIG9sZF9kaXItPmlfc2IpOworb3V0OgorCW11dGV4X3VubG9jaygmc3VwZXItPnNfZGlyb3BfbXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfcmVwbGFjZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQlzdHJ1Y3QgbG9nZnNfZGlza19kZW50cnkgKmRkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWxvZmZfdCBwb3M7CisJaW50IGVycjsKKworCWVyciA9IGxvZ2ZzX2dldF9kZChkaXIsIGRlbnRyeSwgZGQsICZwb3MpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZGQtPmlubyA9IGNwdV90b19iZTY0KGlub2RlLT5pX2lubyk7CisJZGQtPnR5cGUgPSBsb2dmc190eXBlKGlub2RlKTsKKworCWVyciA9IHdyaXRlX2RpcihkaXIsIGRkLCBwb3MpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJbG9nX2RpcigiUmVwbGFjZSBkZW50cnkgKCVseCwgJWxseCkgJXMgLT4gJWxseFxuIiwgZGlyLT5pX2lubywgcG9zLAorCQkJZGQtPm5hbWUsIGJlNjRfdG9fY3B1KGRkLT5pbm8pKTsKKwlyZXR1cm4gd3JpdGVfaW5vZGUoZGlyKTsKK30KKworLyogVGFyZ2V0IGRlbnRyeSBleGlzdHMgLSB0aGUgd29yc3QgY2FzZS4gIFdlIG5lZWQgdG8gYXR0YWNoIHRoZSBzb3VyY2UKKyAqIGlub2RlIHRvIHRoZSB0YXJnZXQgZGVudHJ5LCB0aGVuIHJlbW92ZSB0aGUgb3JwaGFuZWQgdGFyZ2V0IGlub2RlIGFuZAorICogc291cmNlIGRlbnRyeS4KKyAqLworc3RhdGljIGludCBsb2dmc19yZW5hbWVfdGFyZ2V0KHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKKwkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKG9sZF9kaXItPmlfc2IpOworCXN0cnVjdCBpbm9kZSAqb2xkX2lub2RlID0gb2xkX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKm5ld19pbm9kZSA9IG5ld19kZW50cnktPmRfaW5vZGU7CisJaW50IGlzZGlyID0gU19JU0RJUihvbGRfaW5vZGUtPmlfbW9kZSk7CisJc3RydWN0IGxvZ2ZzX2Rpc2tfZGVudHJ5IGRkOworCXN0cnVjdCBsb2dmc190cmFuc2FjdGlvbiAqdGE7CisJbG9mZl90IHBvczsKKwlpbnQgZXJyOworCisJQlVHX09OKGlzZGlyICE9IFNfSVNESVIobmV3X2lub2RlLT5pX21vZGUpKTsKKwlpZiAoaXNkaXIpIHsKKwkJaWYgKCFsb2dmc19lbXB0eV9kaXIobmV3X2lub2RlKSkKKwkJCXJldHVybiAtRU5PVEVNUFRZOworCX0KKworCS8qIDEuIGxvY2F0ZSBzb3VyY2UgZGQgKi8KKwllcnIgPSBsb2dmc19nZXRfZGQob2xkX2Rpciwgb2xkX2RlbnRyeSwgJmRkLCAmcG9zKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJdGEgPSBremFsbG9jKHNpemVvZigqdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRhLT5zdGF0ZSA9IFRBUkdFVF9SRU5BTUVfMTsKKwl0YS0+ZGlyID0gb2xkX2Rpci0+aV9pbm87CisJdGEtPnBvcyA9IHBvczsKKwl0YS0+aW5vID0gbmV3X2lub2RlLT5pX2lubzsKKworCS8qIDIuIGF0dGFjaCBzb3VyY2UgaW5vZGUgdG8gdGFyZ2V0IGRkICovCisJbXV0ZXhfbG9jaygmc3VwZXItPnNfZGlyb3BfbXV0ZXgpOworCWxvZ2ZzX2FkZF90cmFuc2FjdGlvbihuZXdfZGlyLCB0YSk7CisJZXJyID0gbG9nZnNfcmVwbGFjZV9pbm9kZShuZXdfZGlyLCBuZXdfZGVudHJ5LCAmZGQsIG9sZF9pbm9kZSk7CisJaWYgKGVycikgeworCQlzdXBlci0+c19yZW5hbWVfZGlyID0gMDsKKwkJc3VwZXItPnNfcmVuYW1lX3BvcyA9IDA7CisJCXN1cGVyLT5zX3ZpY3RpbV9pbm8gPSAwOworCQlhYm9ydF90cmFuc2FjdGlvbihuZXdfZGlyLCB0YSk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIDMuIHJlbW92ZSBzb3VyY2UgZGQgKi8KKwl0YS0+c3RhdGUgPSBUQVJHRVRfUkVOQU1FXzI7CisJbG9nZnNfYWRkX3RyYW5zYWN0aW9uKG9sZF9kaXIsIHRhKTsKKwllcnIgPSBsb2dmc19kZWxldGVfZGQob2xkX2RpciwgcG9zKTsKKwlpZiAoIWVycikKKwkJZXJyID0gd3JpdGVfaW5vZGUob2xkX2Rpcik7CisJTE9HRlNfQlVHX09OKGVyciwgb2xkX2Rpci0+aV9zYik7CisKKwkvKiA0LiByZW1vdmUgdGFyZ2V0IGlub2RlICovCisJdGEtPnN0YXRlID0gVEFSR0VUX1JFTkFNRV8zOworCWxvZ2ZzX2FkZF90cmFuc2FjdGlvbihuZXdfaW5vZGUsIHRhKTsKKwllcnIgPSBsb2dmc19yZW1vdmVfaW5vZGUobmV3X2lub2RlKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmc3VwZXItPnNfZGlyb3BfbXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKKwkJCXN0cnVjdCBpbm9kZSAqbmV3X2Rpciwgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSkKK3sKKwlpZiAobmV3X2RlbnRyeS0+ZF9pbm9kZSkKKwkJcmV0dXJuIGxvZ2ZzX3JlbmFtZV90YXJnZXQob2xkX2Rpciwgb2xkX2RlbnRyeSwKKwkJCQkJICAgbmV3X2RpciwgbmV3X2RlbnRyeSk7CisJcmV0dXJuIGxvZ2ZzX3JlbmFtZV9jcm9zcyhvbGRfZGlyLCBvbGRfZGVudHJ5LCBuZXdfZGlyLCBuZXdfZGVudHJ5KTsKK30KKworLyogTm8gbG9ja2luZyBkb25lIGhlcmUsIGFzIHRoaXMgaXMgY2FsbGVkIGJlZm9yZSAuZ2V0X3NiKCkgcmV0dXJucy4gKi8KK2ludCBsb2dmc19yZXBsYXlfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwl1NjQgaW5vLCBwb3M7CisJaW50IGVycjsKKworCWlmIChzdXBlci0+c192aWN0aW1faW5vKSB7CisJCS8qIGRlbGV0ZSB2aWN0aW0gaW5vZGUgKi8KKwkJaW5vID0gc3VwZXItPnNfdmljdGltX2lubzsKKwkJcHJpbnRrKEtFUk5fSU5GTyJMb2dGUzogZGVsZXRlIHVubWFwcGVkIGlub2RlICMlbGx4XG4iLCBpbm8pOworCQlpbm9kZSA9IGxvZ2ZzX2lnZXQoc2IsIGlubyk7CisJCWlmIChJU19FUlIoaW5vZGUpKQorCQkJZ290byBmYWlsOworCisJCUxPR0ZTX0JVR19PTihpX3NpemVfcmVhZChpbm9kZSkgPiAwLCBzYik7CisJCXN1cGVyLT5zX3ZpY3RpbV9pbm8gPSAwOworCQllcnIgPSBsb2dmc19yZW1vdmVfaW5vZGUoaW5vZGUpOworCQlpcHV0KGlub2RlKTsKKwkJaWYgKGVycikgeworCQkJc3VwZXItPnNfdmljdGltX2lubyA9IGlubzsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCX0KKwlpZiAoc3VwZXItPnNfcmVuYW1lX2RpcikgeworCQkvKiBkZWxldGUgb2xkIGRkIGZyb20gcmVuYW1lICovCisJCWlubyA9IHN1cGVyLT5zX3JlbmFtZV9kaXI7CisJCXBvcyA9IHN1cGVyLT5zX3JlbmFtZV9wb3M7CisJCXByaW50ayhLRVJOX0lORk8iTG9nRlM6IGRlbGV0ZSB1bmJhY2tlZCBkZW50cnkgKCVsbHgsICVsbHgpXG4iLAorCQkJCWlubywgcG9zKTsKKwkJaW5vZGUgPSBsb2dmc19pZ2V0KHNiLCBpbm8pOworCQlpZiAoSVNfRVJSKGlub2RlKSkKKwkJCWdvdG8gZmFpbDsKKworCQlzdXBlci0+c19yZW5hbWVfZGlyID0gMDsKKwkJc3VwZXItPnNfcmVuYW1lX3BvcyA9IDA7CisJCWVyciA9IGxvZ2ZzX2RlbGV0ZV9kZChpbm9kZSwgcG9zKTsKKwkJaXB1dChpbm9kZSk7CisJCWlmIChlcnIpIHsKKwkJCXN1cGVyLT5zX3JlbmFtZV9kaXIgPSBpbm87CisJCQlzdXBlci0+c19yZW5hbWVfcG9zID0gcG9zOworCQkJZ290byBmYWlsOworCQl9CisJfQorCXJldHVybiAwOworZmFpbDoKKwlMT0dGU19CVUcoc2IpOworCXJldHVybiAtRUlPOworfQorCitjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBsb2dmc19zeW1saW5rX2lvcHMgPSB7CisJLnJlYWRsaW5rCT0gZ2VuZXJpY19yZWFkbGluaywKKwkuZm9sbG93X2xpbmsJPSBwYWdlX2ZvbGxvd19saW5rX2xpZ2h0LAorfTsKKworY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbG9nZnNfZGlyX2lvcHMgPSB7CisJLmNyZWF0ZQkJPSBsb2dmc19jcmVhdGUsCisJLmxpbmsJCT0gbG9nZnNfbGluaywKKwkubG9va3VwCQk9IGxvZ2ZzX2xvb2t1cCwKKwkubWtkaXIJCT0gbG9nZnNfbWtkaXIsCisJLm1rbm9kCQk9IGxvZ2ZzX21rbm9kLAorCS5yZW5hbWUJCT0gbG9nZnNfcmVuYW1lLAorCS5ybWRpcgkJPSBsb2dmc19ybWRpciwKKwkucGVybWlzc2lvbgk9IGxvZ2ZzX3Blcm1pc3Npb24sCisJLnN5bWxpbmsJPSBsb2dmc19zeW1saW5rLAorCS51bmxpbmsJCT0gbG9nZnNfdW5saW5rLAorfTsKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbG9nZnNfZGlyX2ZvcHMgPSB7CisJLmZzeW5jCQk9IGxvZ2ZzX2ZzeW5jLAorCS5pb2N0bAkJPSBsb2dmc19pb2N0bCwKKwkucmVhZGRpcgk9IGxvZ2ZzX3JlYWRkaXIsCisJLnJlYWQJCT0gZ2VuZXJpY19yZWFkX2RpciwKK307CmRpZmYgLS1naXQgYS9mcy9sb2dmcy9maWxlLmMgYi9mcy9sb2dmcy9maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcwZjM2NwotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2xvZ2ZzL2ZpbGUuYwpAQCAtMCwwICsxLDI2MyBAQAorLyoKKyAqIGZzL2xvZ2ZzL2ZpbGUuYwktIHByZXBhcmVfd3JpdGUsIGNvbW1pdF93cml0ZSBhbmQgZnJpZW5kcworICoKKyAqIEFzIHNob3VsZCBiZSBvYnZpb3VzIGZvciBMaW51eCBrZXJuZWwgY29kZSwgbGljZW5zZSBpcyBHUEx2MgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA4IEpvZXJuIEVuZ2VsIDxqb2VybkBsb2dmcy5vcmc+CisgKi8KKyNpbmNsdWRlICJsb2dmcy5oIgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CisKK3N0YXRpYyBpbnQgbG9nZnNfd3JpdGVfYmVnaW4oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQlsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIGZsYWdzLAorCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwLCB2b2lkICoqZnNkYXRhKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OworCXN0cnVjdCBwYWdlICpwYWdlOworCXBnb2ZmX3QgaW5kZXggPSBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKKworCXBhZ2UgPSBncmFiX2NhY2hlX3BhZ2Vfd3JpdGVfYmVnaW4obWFwcGluZywgaW5kZXgsIGZsYWdzKTsKKwlpZiAoIXBhZ2UpCisJCXJldHVybiAtRU5PTUVNOworCSpwYWdlcCA9IHBhZ2U7CisKKwlpZiAoKGxlbiA9PSBQQUdFX0NBQ0hFX1NJWkUpIHx8IFBhZ2VVcHRvZGF0ZShwYWdlKSkKKwkJcmV0dXJuIDA7CisJaWYgKChwb3MgJiBQQUdFX0NBQ0hFX01BU0spID49IGlfc2l6ZV9yZWFkKGlub2RlKSkgeworCQl1bnNpZ25lZCBzdGFydCA9IHBvcyAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKTsKKwkJdW5zaWduZWQgZW5kID0gc3RhcnQgKyBsZW47CisKKwkJLyogUmVhZGluZyBiZXlvbmQgaV9zaXplIGlzIHNpbXBsZTogbWVtc2V0IHRvIHplcm8gKi8KKwkJemVyb191c2VyX3NlZ21lbnRzKHBhZ2UsIDAsIHN0YXJ0LCBlbmQsIFBBR0VfQ0FDSEVfU0laRSk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gbG9nZnNfcmVhZHBhZ2Vfbm9sb2NrKHBhZ2UpOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX3dyaXRlX2VuZChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgY29waWVkLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJdm9pZCAqZnNkYXRhKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OworCXBnb2ZmX3QgaW5kZXggPSBwYWdlLT5pbmRleDsKKwl1bnNpZ25lZCBzdGFydCA9IHBvcyAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKTsKKwl1bnNpZ25lZCBlbmQgPSBzdGFydCArIGNvcGllZDsKKwlpbnQgcmV0ID0gMDsKKworCUJVR19PTihQQUdFX0NBQ0hFX1NJWkUgIT0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKTsKKwlCVUdfT04ocGFnZS0+aW5kZXggPiBJM19CTE9DS1MpOworCisJaWYgKGNvcGllZCA8IGxlbikgeworCQkvKgorCQkgKiBTaG9ydCB3cml0ZSBvZiBhIG5vbi1pbml0aWFsaXplZCBwYWdlZC4gIEp1c3QgdGVsbCB1c2Vyc3BhY2UKKwkJICogdG8gcmV0cnkgdGhlIGVudGlyZSBwYWdlLgorCQkgKi8KKwkJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkpIHsKKwkJCWNvcGllZCA9IDA7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwlpZiAoY29waWVkID09IDApCisJCWdvdG8gb3V0OyAvKiBGSVhNRTogZG8gd2UgbmVlZCB0byB1cGRhdGUgaW5vZGU/ICovCisKKwlpZiAoaV9zaXplX3JlYWQoaW5vZGUpIDwgKGluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQpICsgZW5kKSB7CisJCWlfc2l6ZV93cml0ZShpbm9kZSwgKGluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQpICsgZW5kKTsKKwkJbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlub2RlKTsKKwl9CisKKwlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisJaWYgKCFQYWdlRGlydHkocGFnZSkpIHsKKwkJaWYgKCFnZXRfcGFnZV9yZXNlcnZlKGlub2RlLCBwYWdlKSkKKwkJCV9fc2V0X3BhZ2VfZGlydHlfbm9idWZmZXJzKHBhZ2UpOworCQllbHNlCisJCQlyZXQgPSBsb2dmc193cml0ZV9idWYoaW5vZGUsIHBhZ2UsIFdGX0xPQ0spOworCX0KK291dDoKKwl1bmxvY2tfcGFnZShwYWdlKTsKKwlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJcmV0dXJuIHJldCA/IHJldCA6IGNvcGllZDsKK30KKworaW50IGxvZ2ZzX3JlYWRwYWdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbG9nZnNfcmVhZHBhZ2Vfbm9sb2NrKHBhZ2UpOworCXVubG9ja19wYWdlKHBhZ2UpOworCXJldHVybiByZXQ7Cit9CisKKy8qIENsZWFyIHRoZSBwYWdlJ3MgZGlydHkgZmxhZyBpbiB0aGUgcmFkaXggdHJlZS4gKi8KKy8qIFRPRE86IG11Y2tpbmcgd2l0aCBQYWdlV3JpdGViYWNrIGlzIHNpbGx5LiAgQWRkIGEgZ2VuZXJpYyBmdW5jdGlvbiB0byBjbGVhcgorICogdGhlIGRpcnR5IGJpdCBmcm9tIHRoZSByYWRpeCB0cmVlIGZvciBmaWxlc3lzdGVtcyB0aGF0IGRvbid0IGhhdmUgdG8gd2FpdAorICogZm9yIHBhZ2Ugd3JpdGViYWNrIHRvIGZpbmlzaCAoaS5lLiBhbnkgY29tcHJlc3NpbmcgZmlsZXN5c3RlbSkuCisgKi8KK3N0YXRpYyB2b2lkIGNsZWFyX3JhZGl4X3RyZWVfZGlydHkoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJQlVHX09OKFBhZ2VQcml2YXRlKHBhZ2UpIHx8IHBhZ2UtPnByaXZhdGUpOworCXNldF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKKwllbmRfcGFnZV93cml0ZWJhY2socGFnZSk7Cit9CisKK3N0YXRpYyBpbnQgX19sb2dmc193cml0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CisJaW50IGVycjsKKworCWVyciA9IGxvZ2ZzX3dyaXRlX2J1Zihpbm9kZSwgcGFnZSwgV0ZfTE9DSyk7CisJaWYgKGVycikKKwkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CisJZWxzZQorCQljbGVhcl9yYWRpeF90cmVlX2RpcnR5KHBhZ2UpOworCXVubG9ja19wYWdlKHBhZ2UpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfd3JpdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKKwlsb2ZmX3QgaV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCXBnb2ZmX3QgZW5kX2luZGV4ID0gaV9zaXplID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJdW5zaWduZWQgb2Zmc2V0OworCXU2NCBiaXg7CisJbGV2ZWxfdCBsZXZlbDsKKworCWxvZ19maWxlKCJsb2dmc193cml0ZXBhZ2UoJWx4LCAlbHgsICVwKVxuIiwgaW5vZGUtPmlfaW5vLCBwYWdlLT5pbmRleCwKKwkJCXBhZ2UpOworCisJbG9nZnNfdW5wYWNrX2luZGV4KHBhZ2UtPmluZGV4LCAmYml4LCAmbGV2ZWwpOworCisJLyogSW5kaXJlY3QgYmxvY2tzIGFyZSBuZXZlciB0cnVuY2F0ZWQgKi8KKwlpZiAobGV2ZWwgIT0gMCkKKwkJcmV0dXJuIF9fbG9nZnNfd3JpdGVwYWdlKHBhZ2UpOworCisJLyoKKwkgKiBUT0RPOiBldmVyeXRoaW5nIGJlbG93IGlzIGEgbmVhci12ZXJiYXRpbSBjb3B5IG9mIG5vYmhfd3JpdGVwYWdlKCkuCisJICogVGhlIHJlbGV2YW50IGJpdHMgc2hvdWxkIGJlIGZhY3RvcmVkIG91dCBhZnRlciBsb2dmcyBpcyBtZXJnZWQuCisJICovCisKKwkvKiBJcyB0aGUgcGFnZSBmdWxseSBpbnNpZGUgaV9zaXplPyAqLworCWlmIChiaXggPCBlbmRfaW5kZXgpCisJCXJldHVybiBfX2xvZ2ZzX3dyaXRlcGFnZShwYWdlKTsKKworCSAvKiBJcyB0aGUgcGFnZSBmdWxseSBvdXRzaWRlIGlfc2l6ZT8gKHRydW5jYXRlIGluIHByb2dyZXNzKSAqLworCW9mZnNldCA9IGlfc2l6ZSAmIChQQUdFX0NBQ0hFX1NJWkUtMSk7CisJaWYgKGJpeCA+IGVuZF9pbmRleCB8fCBvZmZzZXQgPT0gMCkgeworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJcmV0dXJuIDA7IC8qIGRvbid0IGNhcmUgKi8KKwl9CisKKwkvKgorCSAqIFRoZSBwYWdlIHN0cmFkZGxlcyBpX3NpemUuICBJdCBtdXN0IGJlIHplcm9lZCBvdXQgb24gZWFjaCBhbmQgZXZlcnkKKwkgKiB3cml0ZXBhZ2UgaW52b2thdGlvbiBiZWNhdXNlIGl0IG1heSBiZSBtbWFwcGVkLiAgIkEgZmlsZSBpcyBtYXBwZWQKKwkgKiBpbiBtdWx0aXBsZXMgb2YgdGhlIHBhZ2Ugc2l6ZS4gIEZvciBhIGZpbGUgdGhhdCBpcyBub3QgYSBtdWx0aXBsZSBvZgorCSAqIHRoZSAgcGFnZSBzaXplLCB0aGUgcmVtYWluaW5nIG1lbW9yeSBpcyB6ZXJvZWQgd2hlbiBtYXBwZWQsIGFuZAorCSAqIHdyaXRlcyB0byB0aGF0IHJlZ2lvbiBhcmUgbm90IHdyaXR0ZW4gb3V0IHRvIHRoZSBmaWxlLiIKKwkgKi8KKwl6ZXJvX3VzZXJfc2VnbWVudChwYWdlLCBvZmZzZXQsIFBBR0VfQ0FDSEVfU0laRSk7CisJcmV0dXJuIF9fbG9nZnNfd3JpdGVwYWdlKHBhZ2UpOworfQorCitzdGF0aWMgdm9pZCBsb2dmc19pbnZhbGlkYXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJbW92ZV9wYWdlX3RvX2J0cmVlKHBhZ2UpOworCUJVR19PTihQYWdlUHJpdmF0ZShwYWdlKSB8fCBwYWdlLT5wcml2YXRlKTsKK30KKworc3RhdGljIGludCBsb2dmc19yZWxlYXNlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3Qgb25seV94ZnNfdXNlc190aGlzKQoreworCXJldHVybiAwOyAvKiBOb25lIG9mIHRoZXNlIGFyZSBlYXN5IHRvIHJlbGVhc2UgKi8KK30KKworCitpbnQgbG9nZnNfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCXVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGkgPSBsb2dmc19pbm9kZShpbm9kZSk7CisJdW5zaWduZWQgaW50IG9sZGZsYWdzLCBmbGFnczsKKwlpbnQgZXJyOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEZTX0lPQ19HRVRGTEFHUzoKKwkJZmxhZ3MgPSBsaS0+bGlfZmxhZ3MgJiBMT0dGU19GTF9VU0VSX1ZJU0lCTEU7CisJCXJldHVybiBwdXRfdXNlcihmbGFncywgKGludCBfX3VzZXIgKilhcmcpOworCWNhc2UgRlNfSU9DX1NFVEZMQUdTOgorCQlpZiAoSVNfUkRPTkxZKGlub2RlKSkKKwkJCXJldHVybiAtRVJPRlM7CisKKwkJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKQorCQkJcmV0dXJuIC1FQUNDRVM7CisKKwkJZXJyID0gZ2V0X3VzZXIoZmxhZ3MsIChpbnQgX191c2VyICopYXJnKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCQlvbGRmbGFncyA9IGxpLT5saV9mbGFnczsKKwkJZmxhZ3MgJj0gTE9HRlNfRkxfVVNFUl9NT0RJRklBQkxFOworCQlmbGFncyB8PSBvbGRmbGFncyAmIH5MT0dGU19GTF9VU0VSX01PRElGSUFCTEU7CisJCWxpLT5saV9mbGFncyA9IGZsYWdzOworCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKworCQlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKKwkJbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlub2RlKTsKKwkJcmV0dXJuIDA7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT1RUWTsKKwl9Cit9CisKK2ludCBsb2dmc19mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgZGF0YXN5bmMpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0+ZF9pbm9kZS0+aV9zYjsKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCisJLyogRklYTUU6IHdyaXRlIGFuY2hvciAqLworCXN1cGVyLT5zX2Rldm9wcy0+c3luYyhzYik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cikKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCWludCBlcnIgPSAwOworCisJaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKQorCQllcnIgPSBsb2dmc190cnVuY2F0ZShpbm9kZSwgYXR0ci0+aWFfc2l6ZSk7CisJYXR0ci0+aWFfdmFsaWQgJj0gfkFUVFJfU0laRTsKKworCWlmICghZXJyKQorCQllcnIgPSBpbm9kZV9jaGFuZ2Vfb2soaW5vZGUsIGF0dHIpOworCWlmICghZXJyKQorCQllcnIgPSBpbm9kZV9zZXRhdHRyKGlub2RlLCBhdHRyKTsKKwlyZXR1cm4gZXJyOworfQorCitjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBsb2dmc19yZWdfaW9wcyA9IHsKKwkuc2V0YXR0cgk9IGxvZ2ZzX3NldGF0dHIsCit9OworCitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxvZ2ZzX3JlZ19mb3BzID0geworCS5haW9fcmVhZAk9IGdlbmVyaWNfZmlsZV9haW9fcmVhZCwKKwkuYWlvX3dyaXRlCT0gZ2VuZXJpY19maWxlX2Fpb193cml0ZSwKKwkuZnN5bmMJCT0gbG9nZnNfZnN5bmMsCisJLmlvY3RsCQk9IGxvZ2ZzX2lvY3RsLAorCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKKwkubW1hcAkJPSBnZW5lcmljX2ZpbGVfcmVhZG9ubHlfbW1hcCwKKwkub3BlbgkJPSBnZW5lcmljX2ZpbGVfb3BlbiwKKwkucmVhZAkJPSBkb19zeW5jX3JlYWQsCisJLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCit9OworCitjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGxvZ2ZzX3JlZ19hb3BzID0geworCS5pbnZhbGlkYXRlcGFnZQk9IGxvZ2ZzX2ludmFsaWRhdGVwYWdlLAorCS5yZWFkcGFnZQk9IGxvZ2ZzX3JlYWRwYWdlLAorCS5yZWxlYXNlcGFnZQk9IGxvZ2ZzX3JlbGVhc2VwYWdlLAorCS5zZXRfcGFnZV9kaXJ0eQk9IF9fc2V0X3BhZ2VfZGlydHlfbm9idWZmZXJzLAorCS53cml0ZXBhZ2UJPSBsb2dmc193cml0ZXBhZ2UsCisJLndyaXRlcGFnZXMJPSBnZW5lcmljX3dyaXRlcGFnZXMsCisJLndyaXRlX2JlZ2luCT0gbG9nZnNfd3JpdGVfYmVnaW4sCisJLndyaXRlX2VuZAk9IGxvZ2ZzX3dyaXRlX2VuZCwKK307CmRpZmYgLS1naXQgYS9mcy9sb2dmcy9nYy5jIGIvZnMvbG9nZnMvZ2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mjk0OWY5Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvbG9nZnMvZ2MuYwpAQCAtMCwwICsxLDczMCBAQAorLyoKKyAqIGZzL2xvZ2ZzL2djLmMJLSBnYXJiYWdlIGNvbGxlY3Rpb24gY29kZQorICoKKyAqIEFzIHNob3VsZCBiZSBvYnZpb3VzIGZvciBMaW51eCBrZXJuZWwgY29kZSwgbGljZW5zZSBpcyBHUEx2MgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA4IEpvZXJuIEVuZ2VsIDxqb2VybkBsb2dmcy5vcmc+CisgKi8KKyNpbmNsdWRlICJsb2dmcy5oIgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKy8qCisgKiBXZWFyIGxldmVsaW5nIG5lZWRzIHRvIGtpY2sgaW4gd2hlbiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGxvdyBlcmFzZQorICogY291bnRzIGFuZCBoaWdoIGVyYXNlIGNvdW50cyBnZXRzIHRvbyBiaWcuICBBIGdvb2QgdmFsdWUgZm9yICJ0b28gYmlnIgorICogbWF5IGJlIHNvbWV3aGF0IGJlbG93IDEwJSBvZiBtYXhpbXVtIGVyYXNlIGNvdW50IGZvciB0aGUgZGV2aWNlLgorICogV2h5IG5vdCAzOTcsIHRvIHBpY2sgYSBuaWNlIHJvdW5kIG51bWJlciB3aXRoIG5vIHNwZWNpZmljIG1lYW5pbmc/IDopCisgKgorICogV0xfUkFURUxJTUlUIGlzIHRoZSBtaW5pbXVtIHRpbWUgYmV0d2VlbiB0d28gd2VhciBsZXZlbCBldmVudHMuICBBIGh1Z2UKKyAqIG51bWJlciBvZiBzZWdtZW50cyBtYXkgZnVsZmlsIHRoZSByZXF1aXJlbWVudHMgZm9yIHdlYXIgbGV2ZWxpbmcgYXQgdGhlCisgKiBzYW1lIHRpbWUuICBJZiB0aGF0IGhhcHBlbnMgd2UgZG9uJ3Qgd2FudCB0byBjYXVzZSBhIGxhdGVuY3kgZnJvbSBoZWxsLAorICogYnV0IGp1c3QgZ2VudGx5IHBpY2sgb25lIHNlZ21lbnQgZXZlcnkgc28gb2Z0ZW4gYW5kIG1pbmltaXplIG92ZXJoZWFkLgorICovCisjZGVmaW5lIFdMX0RFTFRBIDM5NworI2RlZmluZSBXTF9SQVRFTElNSVQgMTAwCisjZGVmaW5lIE1BWF9PQkpfQUxJQVNFUwkyNjAwCisjZGVmaW5lIFNDQU5fUkFUSU8gNTEyCS8qIG51bWJlciBvZiBzY2FubmVkIHNlZ21lbnRzIHBlciBnYydkIHNlZ21lbnQgKi8KKyNkZWZpbmUgTElTVF9TSVpFIDY0CS8qIGJhc2Ugc2l6ZSBvZiBjYW5kaWRhdGUgbGlzdHMgKi8KKyNkZWZpbmUgU0NBTl9ST1VORFMgMTI4CS8qIG1heGltdW0gbnVtYmVyIG9mIGNvbXBsZXRlIG1lZGl1bSBzY2FucyAqLworI2RlZmluZSBTQ0FOX1JPVU5EU19ISUdIIDQgLyogbWF4aW11bSBudW1iZXIgb2YgaGlnaGVyLWxldmVsIHNjYW5zICovCisKK3N0YXRpYyBpbnQgbm9fZnJlZV9zZWdtZW50cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisKKwlyZXR1cm4gc3VwZXItPnNfZnJlZV9saXN0LmNvdW50OworfQorCisvKiBqb3VybmFsIGhhcyBkaXN0YW5jZSAtMSwgdG9wLW1vc3QgaWZpbGUgbGF5ZXIgZGlzdGFuY2UgMCAqLworc3RhdGljIHU4IHJvb3RfZGlzdGFuY2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZ2NfbGV2ZWxfdCBfX2djX2xldmVsKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJdTggZ2NfbGV2ZWwgPSAoX19mb3JjZSB1OClfX2djX2xldmVsOworCisJc3dpdGNoIChnY19sZXZlbCkgeworCWNhc2UgMDogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSAxOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIDI6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgMzoKKwkJLyogZmlsZSBkYXRhIG9yIGluZGlyZWN0IGJsb2NrcyAqLworCQlyZXR1cm4gc3VwZXItPnNfaWZpbGVfbGV2ZWxzICsgc3VwZXItPnNfaWJsb2NrX2xldmVscyAtIGdjX2xldmVsOworCWNhc2UgNjogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSA3OiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIDg6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgOToKKwkJLyogaW5vZGUgZmlsZSBkYXRhIG9yIGluZGlyZWN0IGJsb2NrcyAqLworCQlyZXR1cm4gc3VwZXItPnNfaWZpbGVfbGV2ZWxzIC0gKGdjX2xldmVsIC0gNik7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSIkxPR0ZTOiBzZWdtZW50IG9mIHVua25vd24gbGV2ZWwgJXggZm91bmRcbiIsCisJCQkJZ2NfbGV2ZWwpOworCQlXQVJOX09OKDEpOworCQlyZXR1cm4gc3VwZXItPnNfaWZpbGVfbGV2ZWxzICsgc3VwZXItPnNfaWJsb2NrX2xldmVsczsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2VnbWVudF9pc19yZXNlcnZlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2Vnbm8pCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgbG9nZnNfYXJlYSAqYXJlYTsKKwl2b2lkICpyZXNlcnZlZDsKKwlpbnQgaTsKKworCS8qIFNvbWUgc2VnbWVudHMgYXJlIHJlc2VydmVkLiAgSnVzdCBwcmV0ZW5kIHRoZXkgd2VyZSBhbGwgdmFsaWQgKi8KKwlyZXNlcnZlZCA9IGJ0cmVlX2xvb2t1cDMyKCZzdXBlci0+c19yZXNlcnZlZF9zZWdtZW50cywgc2Vnbm8pOworCWlmIChyZXNlcnZlZCkKKwkJcmV0dXJuIDE7CisKKwkvKiBDdXJyZW50bHkgb3BlbiBzZWdtZW50cyAqLworCWZvcl9lYWNoX2FyZWEoaSkgeworCQlhcmVhID0gc3VwZXItPnNfYXJlYVtpXTsKKwkJaWYgKGFyZWEtPmFfaXNfb3BlbiAmJiBhcmVhLT5hX3NlZ25vID09IHNlZ25vKQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxvZ2ZzX21hcmtfc2VnbWVudF9iYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlZ25vKQoreworCUJVRygpOworfQorCisvKgorICogUmV0dXJucyB0aGUgYnl0ZXMgY29uc3VtZWQgYnkgdmFsaWQgb2JqZWN0cyBpbiB0aGlzIHNlZ21lbnQuICBPYmplY3QgaGVhZGVycworICogYXJlIGNvdW50ZWQsIHRoZSBzZWdtZW50IGhlYWRlciBpcyBub3QuCisgKi8KK3N0YXRpYyB1MzIgbG9nZnNfdmFsaWRfYnl0ZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlZ25vLCB1MzIgKmVjLAorCQlnY19sZXZlbF90ICpnY19sZXZlbCkKK3sKKwlzdHJ1Y3QgbG9nZnNfc2VnbWVudF9lbnRyeSBzZTsKKwl1MzIgZWNfbGV2ZWw7CisKKwlsb2dmc19nZXRfc2VnbWVudF9lbnRyeShzYiwgc2Vnbm8sICZzZSk7CisJaWYgKHNlLmVjX2xldmVsID09IGNwdV90b19iZTMyKEJBRFNFRykgfHwKKwkJCXNlLnZhbGlkID09IGNwdV90b19iZTMyKFJFU0VSVkVEKSkKKwkJcmV0dXJuIFJFU0VSVkVEOworCisJZWNfbGV2ZWwgPSBiZTMyX3RvX2NwdShzZS5lY19sZXZlbCk7CisJKmVjID0gZWNfbGV2ZWwgPj4gNDsKKwkqZ2NfbGV2ZWwgPSBHQ19MRVZFTChlY19sZXZlbCAmIDB4Zik7CisJcmV0dXJuIGJlMzJfdG9fY3B1KHNlLnZhbGlkKTsKK30KKworc3RhdGljIHZvaWQgbG9nZnNfY2xlYW5zZV9ibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgb2ZzLCB1NjQgaW5vLAorCQl1NjQgYml4LCBnY19sZXZlbF90IGdjX2xldmVsKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJaW50IGVyciwgY29va2llOworCisJaW5vZGUgPSBsb2dmc19zYWZlX2lnZXQoc2IsIGlubywgJmNvb2tpZSk7CisJZXJyID0gbG9nZnNfcmV3cml0ZV9ibG9jayhpbm9kZSwgYml4LCBvZnMsIGdjX2xldmVsLCAwKTsKKwlCVUdfT04oZXJyKTsKKwlsb2dmc19zYWZlX2lwdXQoaW5vZGUsIGNvb2tpZSk7Cit9CisKK3N0YXRpYyB1MzIgbG9nZnNfZ2Nfc2VnbWVudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2Vnbm8sIHU4IGRpc3QpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgbG9nZnNfc2VnbWVudF9oZWFkZXIgc2g7CisJc3RydWN0IGxvZ2ZzX29iamVjdF9oZWFkZXIgb2g7CisJdTY0IG9mcywgaW5vLCBiaXg7CisJdTMyIHNlZ19vZnMsIGxvZ2ljYWxfc2Vnbm8sIGNsZWFuZWQgPSAwOworCWludCBlcnIsIGxlbiwgdmFsaWQ7CisJZ2NfbGV2ZWxfdCBnY19sZXZlbDsKKworCUxPR0ZTX0JVR19PTihzZWdtZW50X2lzX3Jlc2VydmVkKHNiLCBzZWdubyksIHNiKTsKKworCWJ0cmVlX2luc2VydDMyKCZzdXBlci0+c19yZXNlcnZlZF9zZWdtZW50cywgc2Vnbm8sICh2b2lkICopMSwgR0ZQX05PRlMpOworCWVyciA9IHdidWZfcmVhZChzYiwgZGV2X29mcyhzYiwgc2Vnbm8sIDApLCBzaXplb2Yoc2gpLCAmc2gpOworCUJVR19PTihlcnIpOworCWdjX2xldmVsID0gR0NfTEVWRUwoc2gubGV2ZWwpOworCWxvZ2ljYWxfc2Vnbm8gPSBiZTMyX3RvX2NwdShzaC5zZWdubyk7CisJaWYgKHNoLmNyYyAhPSBsb2dmc19jcmMzMigmc2gsIHNpemVvZihzaCksIDQpKSB7CisJCWxvZ2ZzX21hcmtfc2VnbWVudF9iYWQoc2IsIHNlZ25vKTsKKwkJY2xlYW5lZCA9IC0xOworCQlnb3RvIG91dDsKKwl9CisKKwlmb3IgKHNlZ19vZnMgPSBMT0dGU19TRUdNRU5UX0hFQURFUlNJWkU7CisJCQlzZWdfb2ZzICsgc2l6ZW9mKG9oKSA8IHN1cGVyLT5zX3NlZ3NpemU7ICkgeworCQlvZnMgPSBkZXZfb2ZzKHNiLCBsb2dpY2FsX3NlZ25vLCBzZWdfb2ZzKTsKKwkJZXJyID0gd2J1Zl9yZWFkKHNiLCBkZXZfb2ZzKHNiLCBzZWdubywgc2VnX29mcyksIHNpemVvZihvaCksCisJCQkJJm9oKTsKKwkJQlVHX09OKGVycik7CisKKwkJaWYgKCFtZW1jaHJfaW52KCZvaCwgMHhmZiwgc2l6ZW9mKG9oKSkpCisJCQlicmVhazsKKworCQlpZiAob2guY3JjICE9IGxvZ2ZzX2NyYzMyKCZvaCwgc2l6ZW9mKG9oKSAtIDQsIDQpKSB7CisJCQlsb2dmc19tYXJrX3NlZ21lbnRfYmFkKHNiLCBzZWdubyk7CisJCQljbGVhbmVkID0gc3VwZXItPnNfc2Vnc2l6ZSAtIDE7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWlubyA9IGJlNjRfdG9fY3B1KG9oLmlubyk7CisJCWJpeCA9IGJlNjRfdG9fY3B1KG9oLmJpeCk7CisJCWxlbiA9IHNpemVvZihvaCkgKyBiZTE2X3RvX2NwdShvaC5sZW4pOworCQl2YWxpZCA9IGxvZ2ZzX2lzX3ZhbGlkX2Jsb2NrKHNiLCBvZnMsIGlubywgYml4LCBnY19sZXZlbCk7CisJCWlmICh2YWxpZCA9PSAxKSB7CisJCQlsb2dmc19jbGVhbnNlX2Jsb2NrKHNiLCBvZnMsIGlubywgYml4LCBnY19sZXZlbCk7CisJCQljbGVhbmVkICs9IGxlbjsKKwkJfSBlbHNlIGlmICh2YWxpZCA9PSAyKSB7CisJCQkvKiBXaWxsIGJlIGludmFsaWQgdXBvbiBqb3VybmFsIGNvbW1pdCAqLworCQkJY2xlYW5lZCArPSBsZW47CisJCX0KKwkJc2VnX29mcyArPSBsZW47CisJfQorb3V0OgorCWJ0cmVlX3JlbW92ZTMyKCZzdXBlci0+c19yZXNlcnZlZF9zZWdtZW50cywgc2Vnbm8pOworCXJldHVybiBjbGVhbmVkOworfQorCitzdGF0aWMgc3RydWN0IGdjX2NhbmRpZGF0ZSAqYWRkX2xpc3Qoc3RydWN0IGdjX2NhbmRpZGF0ZSAqY2FuZCwKKwkJc3RydWN0IGNhbmRpZGF0ZV9saXN0ICpsaXN0KQoreworCXN0cnVjdCByYl9ub2RlICoqcCA9ICZsaXN0LT5yYl90cmVlLnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IGdjX2NhbmRpZGF0ZSAqY3VyOworCWludCBjb21wOworCisJY2FuZC0+bGlzdCA9IGxpc3Q7CisJd2hpbGUgKCpwKSB7CisJCXBhcmVudCA9ICpwOworCQljdXIgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBnY19jYW5kaWRhdGUsIHJiX25vZGUpOworCisJCWlmIChsaXN0LT5zb3J0X2J5X2VjKQorCQkJY29tcCA9IGNhbmQtPmVyYXNlX2NvdW50IDwgY3VyLT5lcmFzZV9jb3VudDsKKwkJZWxzZQorCQkJY29tcCA9IGNhbmQtPnZhbGlkIDwgY3VyLT52YWxpZDsKKworCQlpZiAoY29tcCkKKwkJCXAgPSAmcGFyZW50LT5yYl9sZWZ0OworCQllbHNlCisJCQlwID0gJnBhcmVudC0+cmJfcmlnaHQ7CisJfQorCXJiX2xpbmtfbm9kZSgmY2FuZC0+cmJfbm9kZSwgcGFyZW50LCBwKTsKKwlyYl9pbnNlcnRfY29sb3IoJmNhbmQtPnJiX25vZGUsICZsaXN0LT5yYl90cmVlKTsKKworCWlmIChsaXN0LT5jb3VudCA8PSBsaXN0LT5tYXhjb3VudCkgeworCQlsaXN0LT5jb3VudCsrOworCQlyZXR1cm4gTlVMTDsKKwl9CisJY2FuZCA9IHJiX2VudHJ5KHJiX2xhc3QoJmxpc3QtPnJiX3RyZWUpLCBzdHJ1Y3QgZ2NfY2FuZGlkYXRlLCByYl9ub2RlKTsKKwlyYl9lcmFzZSgmY2FuZC0+cmJfbm9kZSwgJmxpc3QtPnJiX3RyZWUpOworCWNhbmQtPmxpc3QgPSBOVUxMOworCXJldHVybiBjYW5kOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfZnJvbV9saXN0KHN0cnVjdCBnY19jYW5kaWRhdGUgKmNhbmQpCit7CisJc3RydWN0IGNhbmRpZGF0ZV9saXN0ICpsaXN0ID0gY2FuZC0+bGlzdDsKKworCXJiX2VyYXNlKCZjYW5kLT5yYl9ub2RlLCAmbGlzdC0+cmJfdHJlZSk7CisJbGlzdC0+Y291bnQtLTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9jYW5kaWRhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGdjX2NhbmRpZGF0ZSAqY2FuZCkKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCisJYnRyZWVfcmVtb3ZlMzIoJnN1cGVyLT5zX2NhbmRfdHJlZSwgY2FuZC0+c2Vnbm8pOworCWtmcmVlKGNhbmQpOworfQorCit1MzIgZ2V0X2Jlc3RfY2FuZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgY2FuZGlkYXRlX2xpc3QgKmxpc3QsIHUzMiAqZWMpCit7CisJc3RydWN0IGdjX2NhbmRpZGF0ZSAqY2FuZDsKKwl1MzIgc2Vnbm87CisKKwlCVUdfT04obGlzdC0+Y291bnQgPT0gMCk7CisKKwljYW5kID0gcmJfZW50cnkocmJfZmlyc3QoJmxpc3QtPnJiX3RyZWUpLCBzdHJ1Y3QgZ2NfY2FuZGlkYXRlLCByYl9ub2RlKTsKKwlyZW1vdmVfZnJvbV9saXN0KGNhbmQpOworCXNlZ25vID0gY2FuZC0+c2Vnbm87CisJaWYgKGVjKQorCQkqZWMgPSBjYW5kLT5lcmFzZV9jb3VudDsKKwlmcmVlX2NhbmRpZGF0ZShzYiwgY2FuZCk7CisJcmV0dXJuIHNlZ25vOworfQorCisvKgorICogV2UgaGF2ZSBzZXZlcmFsIGxpc3RzIHRvIG1hbmFnZSBzZWdtZW50cyB3aXRoLiAgVGhlIHJlc2VydmVfbGlzdCBpcyB1c2VkIHRvCisgKiBkZWFsIHdpdGggYmFkIGJsb2Nrcy4gIFdlIHRyeSB0byBrZWVwIHRoZSBiZXN0IChsb3dlc3QgZWMpIHNlZ21lbnRzIG9uIHRoaXMKKyAqIGxpc3QuCisgKiBUaGUgZnJlZV9saXN0IGNvbnRhaW5zIGZyZWUgc2VnbWVudHMgZm9yIG5vcm1hbCB1c2FnZS4gIEl0IHVzdWFsbHkgZ2V0cyB0aGUKKyAqIHNlY29uZCBwaWNrIGFmdGVyIHRoZSByZXNlcnZlX2xpc3QuICBCdXQgd2hlbiB0aGUgZnJlZV9saXN0IGlzIHJ1bm5pbmcgc2hvcnQKKyAqIGl0IGlzIG1vcmUgaW1wb3J0YW50IHRvIGtlZXAgdGhlIGZyZWVfbGlzdCBmdWxsIHRoYW4gdG8ga2VlcCBhIHJlc2VydmUuCisgKgorICogU2VnbWVudHMgdGhhdCBhcmUgbm90IGZyZWUgYXJlIHB1dCBvbnRvIGEgcGVyLWxldmVsIGxvd19saXN0LiAgSWYgd2UgaGF2ZQorICogdG8gcnVuIGdhcmJhZ2UgY29sbGVjdGlvbiwgd2UgcGljayBhIGNhbmRpZGF0ZSBmcm9tIHRoZXJlLiAgQWxsIHNlZ21lbnRzIG9uCisgKiB0aG9zZSBsaXN0cyBzaG91bGQgaGF2ZSBhdCBsZWFzdCBzb21lIGZyZWUgc3BhY2Ugc28gR0Mgd2lsbCBtYWtlIHByb2dyZXNzLgorICoKKyAqIEFuZCBsYXN0IHdlIGhhdmUgdGhlIGVjX2xpc3QsIHdoaWNoIGlzIHVzZWQgdG8gcGljayBzZWdtZW50cyBmb3Igd2VhcgorICogbGV2ZWxpbmcuCisgKgorICogSWYgYWxsIGFwcHJvcHJpYXRlIGxpc3RzIGFyZSBmdWxsLCB3ZSBzaW1wbHkgZnJlZSB0aGUgY2FuZGlkYXRlIGFuZCBmb3JnZXQKKyAqIGFib3V0IHRoYXQgc2VnbWVudCBmb3IgYSB3aGlsZS4gIFdlIGhhdmUgYmV0dGVyIGNhbmRpZGF0ZXMgZm9yIGVhY2ggcHVycG9zZS4KKyAqLworc3RhdGljIHZvaWQgX19hZGRfY2FuZGlkYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBnY19jYW5kaWRhdGUgKmNhbmQpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwl1MzIgZnVsbCA9IHN1cGVyLT5zX3NlZ3NpemUgLSBMT0dGU19TRUdNRU5UX1JFU0VSVkU7CisKKwlpZiAoY2FuZC0+dmFsaWQgPT0gMCkgeworCQkvKiAxMDAlIGZyZWUgc2VnbWVudHMgKi8KKwkJbG9nX2djX25vaXN5KCJhZGQgcmVzZXJ2ZSBzZWdtZW50ICV4IChlYyAleCkgYXQgJWxseFxuIiwKKwkJCQljYW5kLT5zZWdubywgY2FuZC0+ZXJhc2VfY291bnQsCisJCQkJZGV2X29mcyhzYiwgY2FuZC0+c2Vnbm8sIDApKTsKKwkJY2FuZCA9IGFkZF9saXN0KGNhbmQsICZzdXBlci0+c19yZXNlcnZlX2xpc3QpOworCQlpZiAoY2FuZCkgeworCQkJbG9nX2djX25vaXN5KCJhZGQgZnJlZSBzZWdtZW50ICV4IChlYyAleCkgYXQgJWxseFxuIiwKKwkJCQkJY2FuZC0+c2Vnbm8sIGNhbmQtPmVyYXNlX2NvdW50LAorCQkJCQlkZXZfb2ZzKHNiLCBjYW5kLT5zZWdubywgMCkpOworCQkJY2FuZCA9IGFkZF9saXN0KGNhbmQsICZzdXBlci0+c19mcmVlX2xpc3QpOworCQl9CisJfSBlbHNlIHsKKwkJLyogZ29vZCBjYW5kaWRhdGVzIGZvciBHYXJiYWdlIENvbGxlY3Rpb24gKi8KKwkJaWYgKGNhbmQtPnZhbGlkIDwgZnVsbCkKKwkJCWNhbmQgPSBhZGRfbGlzdChjYW5kLCAmc3VwZXItPnNfbG93X2xpc3RbY2FuZC0+ZGlzdF0pOworCQkvKiBnb29kIGNhbmRpZGF0ZXMgZm9yIHdlYXIgbGV2ZWxpbmcsCisJCSAqIHNlZ21lbnRzIHRoYXQgd2VyZSByZWNlbnRseSB3cml0dGVuIGdldCBpZ25vcmVkICovCisJCWlmIChjYW5kKQorCQkJY2FuZCA9IGFkZF9saXN0KGNhbmQsICZzdXBlci0+c19lY19saXN0KTsKKwl9CisJaWYgKGNhbmQpCisJCWZyZWVfY2FuZGlkYXRlKHNiLCBjYW5kKTsKK30KKworc3RhdGljIGludCBhZGRfY2FuZGlkYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzZWdubywgdTMyIHZhbGlkLCB1MzIgZWMsCisJCXU4IGRpc3QpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgZ2NfY2FuZGlkYXRlICpjYW5kOworCisJY2FuZCA9IGttYWxsb2Moc2l6ZW9mKCpjYW5kKSwgR0ZQX05PRlMpOworCWlmICghY2FuZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljYW5kLT5zZWdubyA9IHNlZ25vOworCWNhbmQtPnZhbGlkID0gdmFsaWQ7CisJY2FuZC0+ZXJhc2VfY291bnQgPSBlYzsKKwljYW5kLT5kaXN0ID0gZGlzdDsKKworCWJ0cmVlX2luc2VydDMyKCZzdXBlci0+c19jYW5kX3RyZWUsIHNlZ25vLCBjYW5kLCBHRlBfTk9GUyk7CisJX19hZGRfY2FuZGlkYXRlKHNiLCBjYW5kKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX3NlZ21lbnRfZnJvbV9saXN0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2Vnbm8pCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgZ2NfY2FuZGlkYXRlICpjYW5kOworCisJY2FuZCA9IGJ0cmVlX2xvb2t1cDMyKCZzdXBlci0+c19jYW5kX3RyZWUsIHNlZ25vKTsKKwlpZiAoY2FuZCkgeworCQlyZW1vdmVfZnJvbV9saXN0KGNhbmQpOworCQlmcmVlX2NhbmRpZGF0ZShzYiwgY2FuZCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzY2FuX3NlZ21lbnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlZ25vKQoreworCXUzMiB2YWxpZCwgZWMgPSAwOworCWdjX2xldmVsX3QgZ2NfbGV2ZWwgPSAwOworCXU4IGRpc3Q7CisKKwlpZiAoc2VnbWVudF9pc19yZXNlcnZlZChzYiwgc2Vnbm8pKQorCQlyZXR1cm47CisKKwlyZW1vdmVfc2VnbWVudF9mcm9tX2xpc3RzKHNiLCBzZWdubyk7CisJdmFsaWQgPSBsb2dmc192YWxpZF9ieXRlcyhzYiwgc2Vnbm8sICZlYywgJmdjX2xldmVsKTsKKwlpZiAodmFsaWQgPT0gUkVTRVJWRUQpCisJCXJldHVybjsKKworCWRpc3QgPSByb290X2Rpc3RhbmNlKHNiLCBnY19sZXZlbCk7CisJYWRkX2NhbmRpZGF0ZShzYiwgc2Vnbm8sIHZhbGlkLCBlYywgZGlzdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ2NfY2FuZGlkYXRlICpmaXJzdF9pbl9saXN0KHN0cnVjdCBjYW5kaWRhdGVfbGlzdCAqbGlzdCkKK3sKKwlpZiAobGlzdC0+Y291bnQgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIHJiX2VudHJ5KHJiX2ZpcnN0KCZsaXN0LT5yYl90cmVlKSwgc3RydWN0IGdjX2NhbmRpZGF0ZSwgcmJfbm9kZSk7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBiZXN0IHNlZ21lbnQgZm9yIGdhcmJhZ2UgY29sbGVjdGlvbi4gIE1haW4gY3JpdGVyaW9uIGlzCisgKiB0aGUgc2VnbWVudCByZXF1aXJpbmcgdGhlIGxlYXN0IGVmZm9ydCB0byBjbGVhbi4gIFNlY29uZGFyeQorICogY3JpdGVyaW9uIGlzIHRvIEdDIG9uIHRoZSBsb3dlc3QgbGV2ZWwgYXZhaWxhYmxlLgorICoKKyAqIFNvIHdlIHNlYXJjaCB0aGUgbGVhc3QgZWZmb3J0IHNlZ21lbnQgb24gdGhlIGxvd2VzdCBsZXZlbCBmaXJzdCwKKyAqIHRoZW4gbW92ZSB1cCBhbmQgcGljayBhbm90aGVyIHNlZ21lbnQgaWZmIGlzIHJlcXVpcmVzIHNpZ25pZmljYW50bHkKKyAqIGxlc3MgZWZmb3J0LiAgSGVuY2UgdGhlIExPR0ZTX01BWF9PQkpFQ1RTSVpFIGluIHRoZSBjb21wYXJpc29uLgorICovCitzdGF0aWMgc3RydWN0IGdjX2NhbmRpZGF0ZSAqZ2V0X2NhbmRpZGF0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJaW50IGksIG1heF9kaXN0OworCXN0cnVjdCBnY19jYW5kaWRhdGUgKmNhbmQgPSBOVUxMLCAqdGhpczsKKworCW1heF9kaXN0ID0gbWluKG5vX2ZyZWVfc2VnbWVudHMoc2IpLCBMT0dGU19OT19BUkVBUyk7CisKKwlmb3IgKGkgPSBtYXhfZGlzdDsgaSA+PSAwOyBpLS0pIHsKKwkJdGhpcyA9IGZpcnN0X2luX2xpc3QoJnN1cGVyLT5zX2xvd19saXN0W2ldKTsKKwkJaWYgKCF0aGlzKQorCQkJY29udGludWU7CisJCWlmICghY2FuZCkKKwkJCWNhbmQgPSB0aGlzOworCQlpZiAodGhpcy0+dmFsaWQgKyBMT0dGU19NQVhfT0JKRUNUU0laRSA8PSBjYW5kLT52YWxpZCkKKwkJCWNhbmQgPSB0aGlzOworCX0KKwlyZXR1cm4gY2FuZDsKK30KKworc3RhdGljIGludCBfX2xvZ2ZzX2djX29uY2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGdjX2NhbmRpZGF0ZSAqY2FuZCkKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCWdjX2xldmVsX3QgZ2NfbGV2ZWw7CisJdTMyIGNsZWFuZWQsIHZhbGlkLCBzZWdubywgZWM7CisJdTggZGlzdDsKKworCWlmICghY2FuZCkgeworCQlsb2dfZ2MoIkdDIGF0dGVtcHRlZCwgYnV0IG5vIGNhbmRpZGF0ZSBmb3VuZFxuIik7CisJCXJldHVybiAwOworCX0KKworCXNlZ25vID0gY2FuZC0+c2Vnbm87CisJZGlzdCA9IGNhbmQtPmRpc3Q7CisJdmFsaWQgPSBsb2dmc192YWxpZF9ieXRlcyhzYiwgc2Vnbm8sICZlYywgJmdjX2xldmVsKTsKKwlmcmVlX2NhbmRpZGF0ZShzYiwgY2FuZCk7CisJbG9nX2djKCJHQyBzZWdtZW50ICMlMDJ4IGF0ICVsbHgsICV4IHJlcXVpcmVkLCAleCBmcmVlLCAleCB2YWxpZCwgJWxseCBmcmVlXG4iLAorCQkJc2Vnbm8sICh1NjQpc2Vnbm8gPDwgc3VwZXItPnNfc2Vnc2hpZnQsCisJCQlkaXN0LCBub19mcmVlX3NlZ21lbnRzKHNiKSwgdmFsaWQsCisJCQlzdXBlci0+c19mcmVlX2J5dGVzKTsKKwljbGVhbmVkID0gbG9nZnNfZ2Nfc2VnbWVudChzYiwgc2Vnbm8sIGRpc3QpOworCWxvZ19nYygiR0Mgc2VnbWVudCAjJTAyeCBjb21wbGV0ZSAtIG5vdyAleCB2YWxpZFxuIiwgc2Vnbm8sCisJCQl2YWxpZCAtIGNsZWFuZWQpOworCUJVR19PTihjbGVhbmVkICE9IHZhbGlkKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBsb2dmc19nY19vbmNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGdjX2NhbmRpZGF0ZSAqY2FuZDsKKworCWNhbmQgPSBnZXRfY2FuZGlkYXRlKHNiKTsKKwlpZiAoY2FuZCkKKwkJcmVtb3ZlX2Zyb21fbGlzdChjYW5kKTsKKwlyZXR1cm4gX19sb2dmc19nY19vbmNlKHNiLCBjYW5kKTsKK30KKworLyogcmV0dXJucyAxIGlmIGEgd3JhcCBvY2N1cnMsIDAgb3RoZXJ3aXNlICovCitzdGF0aWMgaW50IGxvZ2ZzX3NjYW5fc29tZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJdTMyIHNlZ25vOworCWludCBpLCByZXQgPSAwOworCisJc2Vnbm8gPSBzdXBlci0+c19zd2VlcGVyOworCWZvciAoaSA9IFNDQU5fUkFUSU87IGkgPiAwOyBpLS0pIHsKKwkJc2Vnbm8rKzsKKwkJaWYgKHNlZ25vID49IHN1cGVyLT5zX25vX3NlZ3MpIHsKKwkJCXNlZ25vID0gMDsKKwkJCXJldCA9IDE7CisJCQkvKiBCcmVhayBvdXQgb2YgdGhlIGxvb3AuICBXZSB3YW50IHRvIHJlYWQgYSBzaW5nbGUKKwkJCSAqIGJsb2NrIGZyb20gdGhlIHNlZ21lbnQgc2l6ZSBvbiBuZXh0IGludm9jYXRpb24gaWYKKwkJCSAqIFNDQU5fUkFUSU8gaXMgc2V0IHRvIG1hdGNoIGJsb2NrIHNpemUKKwkJCSAqLworCQkJYnJlYWs7CisJCX0KKworCQlzY2FuX3NlZ21lbnQoc2IsIHNlZ25vKTsKKwl9CisJc3VwZXItPnNfc3dlZXBlciA9IHNlZ25vOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBJbiBwcmluY2lwbGUsIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGxvb3AgZm9yZXZlciwgbG9va2luZyBmb3IgR0MgY2FuZGlkYXRlcworICogYW5kIG1vdmluZyBkYXRhLiAgTG9nRlMgaXMgZGVzaWduZWQgaW4gc3VjaCBhIHdheSB0aGF0IHRoaXMgbG9vcCBpcworICogZ3VhcmFudGVlZCB0byB0ZXJtaW5hdGUuCisgKgorICogTGltaXRpbmcgdGhlIGxvb3AgdG8gc29tZSBpdGVyYXRpb25zIHNlcnZlcyBwdXJlbHkgdG8gY2F0Y2ggY2FzZXMgd2hlbgorICogdGhlc2UgZ3VhcmFudGVlcyBoYXZlIGZhaWxlZC4gIEFuIGFjdHVhbCBlbmRsZXNzIGxvb3AgaXMgYW4gb2J2aW91cyBidWcKKyAqIGFuZCBzaG91bGQgYmUgcmVwb3J0ZWQgYXMgc3VjaC4KKyAqLworc3RhdGljIHZvaWQgX19sb2dmc19nY19wYXNzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0YXJnZXQpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrOworCWludCByb3VuZCwgcHJvZ3Jlc3MsIGxhc3RfcHJvZ3Jlc3MgPSAwOworCisJaWYgKG5vX2ZyZWVfc2VnbWVudHMoc2IpID49IHRhcmdldCAmJgorCQkJc3VwZXItPnNfbm9fb2JqZWN0X2FsaWFzZXMgPCBNQVhfT0JKX0FMSUFTRVMpCisJCXJldHVybjsKKworCWxvZ19nYygiX19sb2dmc19nY19wYXNzKCV4KVxuIiwgdGFyZ2V0KTsKKwlmb3IgKHJvdW5kID0gMDsgcm91bmQgPCBTQ0FOX1JPVU5EUzsgKSB7CisJCWlmIChub19mcmVlX3NlZ21lbnRzKHNiKSA+PSB0YXJnZXQpCisJCQlnb3RvIHdyaXRlX2FsaWFzOworCisJCS8qIFN5bmMgaW4tbWVtb3J5IHN0YXRlIHdpdGggb24tbWVkaXVtIHN0YXRlIGluIGNhc2UgdGhleQorCQkgKiBkaXZlcmdlZCAqLworCQlsb2dmc193cml0ZV9hbmNob3Ioc2IpOworCQlyb3VuZCArPSBsb2dmc19zY2FuX3NvbWUoc2IpOworCQlpZiAobm9fZnJlZV9zZWdtZW50cyhzYikgPj0gdGFyZ2V0KQorCQkJZ290byB3cml0ZV9hbGlhczsKKwkJcHJvZ3Jlc3MgPSBsb2dmc19nY19vbmNlKHNiKTsKKwkJaWYgKHByb2dyZXNzKQorCQkJbGFzdF9wcm9ncmVzcyA9IHJvdW5kOworCQllbHNlIGlmIChyb3VuZCAtIGxhc3RfcHJvZ3Jlc3MgPiAyKQorCQkJYnJlYWs7CisJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFRoZSBnb3RvIGxvZ2ljIGlzIG5hc3R5LCBJIGp1c3QgZG9uJ3Qga25vdyBhIGJldHRlciB3YXkgdG8KKwkJICogY29kZSBpdC4gIEdDIGlzIHN1cHBvc2VkIHRvIGVuc3VyZSB0d28gdGhpbmdzOgorCQkgKiAxLiBFbm91Z2ggZnJlZSBzZWdtZW50cyBhcmUgYXZhaWxhYmxlLgorCQkgKiAyLiBUaGUgbnVtYmVyIG9mIGFsaWFzZXMgaXMgYm91bmRlZC4KKwkJICogV2hlbiAxLiBpcyBhY2hpZXZlZCwgd2UgdGFrZSBhIGxvb2sgYXQgMi4gYW5kIHdyaXRlIGJhY2sKKwkJICogc29tZSBhbGlhcy1jb250YWluaW5nIGJsb2NrcywgaWYgbmVjZXNzYXJ5LiAgSG93ZXZlciwgYWZ0ZXIKKwkJICogZWFjaCBzdWNoIHdyaXRlIHdlIG5lZWQgdG8gZ28gYmFjayB0byAxLiwgYXMgd3JpdGVzIGNhbgorCQkgKiBjb25zdW1lIGZyZWUgc2VnbWVudHMuCisJCSAqLword3JpdGVfYWxpYXM6CisJCWlmIChzdXBlci0+c19ub19vYmplY3RfYWxpYXNlcyA8IE1BWF9PQkpfQUxJQVNFUykKKwkJCXJldHVybjsKKwkJaWYgKGxpc3RfZW1wdHkoJnN1cGVyLT5zX29iamVjdF9hbGlhcykpIHsKKwkJCS8qIEFsbCBhbGlhc2VzIGFyZSBzdGlsbCBpbiBidHJlZSAqLworCQkJcmV0dXJuOworCQl9CisJCWxvZ19nYygiV3JpdGUgYmFjayBvbmUgYWxpYXNcbiIpOworCQlibG9jayA9IGxpc3RfZW50cnkoc3VwZXItPnNfb2JqZWN0X2FsaWFzLm5leHQsCisJCQkJc3RydWN0IGxvZ2ZzX2Jsb2NrLCBhbGlhc19saXN0KTsKKwkJYmxvY2stPm9wcy0+d3JpdGVfYmxvY2soYmxvY2spOworCQkvKgorCQkgKiBUbyByb3VuZCBvZmYgdGhlIG5hc3R5IGdvdG8gbG9naWMsIHdlIHJlc2V0IHJvdW5kIGhlcmUuICBJdAorCQkgKiBpcyBhIHNhZmV0eS1uZXQgZm9yIEdDIG5vdCBtYWtpbmcgYW55IHByb2dyZXNzIGFuZCBsaW1pdGVkCisJCSAqIHRvIHNvbWV0aGluZyByZWFzb25hYmx5IHNtYWxsLiAgSWYgaW5jcmVtZW50ZWQgaXQgZm9yIGV2ZXJ5CisJCSAqIHNpbmdsZSBhbGlhcywgdGhlIGxvb3AgY291bGQgdGVybWluYXRlIHJhdGhlciBxdWlja2x5LgorCQkgKi8KKwkJcm91bmQgPSAwOworCX0KKwlMT0dGU19CVUcoc2IpOworfQorCitzdGF0aWMgaW50IHdsX3JhdGVsaW1pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgKm5leHRfZXZlbnQpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKworCWlmICgqbmV4dF9ldmVudCA8IHN1cGVyLT5zX2dlYykgeworCQkqbmV4dF9ldmVudCA9IHN1cGVyLT5zX2dlYyArIFdMX1JBVEVMSU1JVDsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBsb2dmc193bF9wYXNzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgZ2NfY2FuZGlkYXRlICp3bF9jYW5kLCAqZnJlZV9jYW5kOworCisJaWYgKHdsX3JhdGVsaW1pdChzYiwgJnN1cGVyLT5zX3dsX2dlY19vc3RvcmUpKQorCQlyZXR1cm47CisKKwl3bF9jYW5kID0gZmlyc3RfaW5fbGlzdCgmc3VwZXItPnNfZWNfbGlzdCk7CisJaWYgKCF3bF9jYW5kKQorCQlyZXR1cm47CisJZnJlZV9jYW5kID0gZmlyc3RfaW5fbGlzdCgmc3VwZXItPnNfZnJlZV9saXN0KTsKKwlpZiAoIWZyZWVfY2FuZCkKKwkJcmV0dXJuOworCisJaWYgKHdsX2NhbmQtPmVyYXNlX2NvdW50IDwgZnJlZV9jYW5kLT5lcmFzZV9jb3VudCArIFdMX0RFTFRBKSB7CisJCXJlbW92ZV9mcm9tX2xpc3Qod2xfY2FuZCk7CisJCV9fbG9nZnNfZ2Nfb25jZShzYiwgd2xfY2FuZCk7CisJfQorfQorCisvKgorICogVGhlIGpvdXJuYWwgbmVlZHMgd2VhciBsZXZlbGluZyBhcyB3ZWxsLiAgQnV0IG1vdmluZyB0aGUgam91cm5hbCBpcyBhbgorICogZXhwZW5zaXZlIG9wZXJhdGlvbiBzbyB3ZSB0cnkgdG8gYXZvaWQgaXQgYXMgbXVjaCBhcyBwb3NzaWJsZS4gIEFuZCBpZiB3ZQorICogaGF2ZSB0byBkbyBpdCwgd2UgbW92ZSB0aGUgd2hvbGUgam91cm5hbCwgbm90IGluZGl2aWR1YWwgc2VnbWVudHMuCisgKgorICogUmF0ZWxpbWl0aW5nIGlzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgaGVyZSwgaXQgbWFpbmx5IHNlcnZlcyB0byBhdm9pZCB0aGUKKyAqIGNhbGN1bGF0aW9ucy4gIEZpcnN0IHdlIGNoZWNrIHdoZXRoZXIgbW92aW5nIHRoZSBqb3VybmFsIHdvdWxkIGJlIGEKKyAqIHNpZ25pZmljYW50IGltcHJvdmVtZW50LiAgVGhhdCBtZWFucyB0aGF0IGEpIHRoZSBjdXJyZW50IGpvdXJuYWwgc2VnbWVudHMKKyAqIGhhdmUgbW9yZSB3ZWFyIHRoYW4gdGhlIGZ1dHVyZSBqb3VybmFsIHNlZ21lbnRzIGFuZCBiKSB0aGUgY3VycmVudCBqb3VybmFsCisgKiBzZWdtZW50cyBoYXZlIG1vcmUgd2VhciB0aGFuIG5vcm1hbCBvc3RvcmUgc2VnbWVudHMuCisgKiBSYXRpb25hbGUgZm9yIGIpIGlzIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBtb3ZlIHRoZSBqb3VybmFsIGlmIGl0IGlzIGFnaW5nCisgKiBsZXNzIHRoYW4gdGhlIG9zdG9yZSwgZXZlbiBpZiB0aGUgcmVzZXJ2ZSBzZWdtZW50cyBhZ2UgZXZlbiBsZXNzICh0aGV5IGFyZQorICogZXhjbHVkZWQgZnJvbSB3ZWFyIGxldmVsaW5nLCBhZnRlciBhbGwpLgorICogTmV4dCB3ZSBjaGVjayB0aGF0IHRoZSBzdXBlcmJsb2NrcyBoYXZlIGxlc3Mgd2VhciB0aGFuIHRoZSBqb3VybmFsLiAgU2luY2UKKyAqIG1vdmluZyB0aGUgam91cm5hbCByZXF1aXJlcyB3cml0aW5nIHRoZSBzdXBlcmJsb2Nrcywgd2UgaGF2ZSB0byBwcm90ZWN0IHRoZQorICogc3VwZXJibG9ja3MgZXZlbiBtb3JlIHRoYW4gdGhlIGpvdXJuYWwuCisgKgorICogQWxzbyB3ZSBkb3VibGUgdGhlIGFjY2VwdGFibGUgd2VhciBkaWZmZXJlbmNlLCBjb21wYXJlZCB0byBvc3RvcmUgd2VhcgorICogbGV2ZWxpbmcuICBKb3VybmFsIGRhdGEgaXMgcmVhZCBhbmQgcmV3cml0dGVuIHJhcGlkbHksIGNvbXBhcmF0aXZlbHkuICBTbworICogc29mdCBlcnJvcnMgaGF2ZSBtdWNoIGxlc3MgdGltZSB0byBhY2N1bXVsYXRlIGFuZCB3ZSBhbGxvdyB0aGUgam91cm5hbCB0bworICogYmUgYSBiaXQgd29yc2UgdGhhbiB0aGUgb3N0b3JlLgorICovCitzdGF0aWMgdm9pZCBsb2dmc19qb3VybmFsX3dsX3Bhc3Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBnY19jYW5kaWRhdGUgKmNhbmQ7CisJdTMyIG1pbl9qb3VybmFsX2VjID0gLTEsIG1heF9yZXNlcnZlX2VjID0gMDsKKwlpbnQgaTsKKworCWlmICh3bF9yYXRlbGltaXQoc2IsICZzdXBlci0+c193bF9nZWNfam91cm5hbCkpCisJCXJldHVybjsKKworCWlmIChzdXBlci0+c19yZXNlcnZlX2xpc3QuY291bnQgPCBzdXBlci0+c19ub19qb3VybmFsX3NlZ3MpIHsKKwkJLyogUmVzZXJ2ZSBpcyBub3QgZnVsbCBlbm91Z2ggdG8gbW92ZSBjb21wbGV0ZSBqb3VybmFsICovCisJCXJldHVybjsKKwl9CisKKwlqb3VybmFsX2Zvcl9lYWNoKGkpCisJCWlmIChzdXBlci0+c19qb3VybmFsX3NlZ1tpXSkKKwkJCW1pbl9qb3VybmFsX2VjID0gbWluKG1pbl9qb3VybmFsX2VjLAorCQkJCQlzdXBlci0+c19qb3VybmFsX2VjW2ldKTsKKwljYW5kID0gcmJfZW50cnkocmJfZmlyc3QoJnN1cGVyLT5zX2ZyZWVfbGlzdC5yYl90cmVlKSwKKwkJCXN0cnVjdCBnY19jYW5kaWRhdGUsIHJiX25vZGUpOworCW1heF9yZXNlcnZlX2VjID0gY2FuZC0+ZXJhc2VfY291bnQ7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlzdHJ1Y3QgbG9nZnNfc2VnbWVudF9lbnRyeSBzZTsKKwkJdTMyIHNlZ25vID0gc2VnX25vKHNiLCBzdXBlci0+c19zYl9vZnNbaV0pOworCQl1MzIgZWM7CisKKwkJbG9nZnNfZ2V0X3NlZ21lbnRfZW50cnkoc2IsIHNlZ25vLCAmc2UpOworCQllYyA9IGJlMzJfdG9fY3B1KHNlLmVjX2xldmVsKSA+PiA0OworCQltYXhfcmVzZXJ2ZV9lYyA9IG1heChtYXhfcmVzZXJ2ZV9lYywgZWMpOworCX0KKworCWlmIChtaW5fam91cm5hbF9lYyA+IG1heF9yZXNlcnZlX2VjICsgMiAqIFdMX0RFTFRBKSB7CisJCWRvX2xvZ2ZzX2pvdXJuYWxfd2xfcGFzcyhzYik7CisJfQorfQorCit2b2lkIGxvZ2ZzX2djX3Bhc3Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCisJLy9CVUdfT04obXV0ZXhfdHJ5bG9jaygmbG9nZnNfc3VwZXIoc2IpLT5zX3dfbXV0ZXgpKTsKKwkvKiBXcml0ZSBqb3VybmFsIGJlZm9yZSBmcmVlIHNwYWNlIGlzIGdldHRpbmcgc2F0dXJhdGVkIHdpdGggZGlydHkKKwkgKiBvYmplY3RzLgorCSAqLworCWlmIChzdXBlci0+c19kaXJ0eV91c2VkX2J5dGVzICsgc3VwZXItPnNfZGlydHlfZnJlZV9ieXRlcworCQkJKyBMT0dGU19NQVhfT0JKRUNUU0laRSA+PSBzdXBlci0+c19mcmVlX2J5dGVzKQorCQlsb2dmc193cml0ZV9hbmNob3Ioc2IpOworCV9fbG9nZnNfZ2NfcGFzcyhzYiwgc3VwZXItPnNfdG90YWxfbGV2ZWxzKTsKKwlsb2dmc193bF9wYXNzKHNiKTsKKwlsb2dmc19qb3VybmFsX3dsX3Bhc3Moc2IpOworfQorCitzdGF0aWMgaW50IGNoZWNrX2FyZWEoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGkpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgbG9nZnNfYXJlYSAqYXJlYSA9IHN1cGVyLT5zX2FyZWFbaV07CisJc3RydWN0IGxvZ2ZzX29iamVjdF9oZWFkZXIgb2g7CisJdTMyIHNlZ25vID0gYXJlYS0+YV9zZWdubzsKKwl1MzIgb2ZzID0gYXJlYS0+YV91c2VkX2J5dGVzOworCV9fYmUzMiBjcmM7CisJaW50IGVycjsKKworCWlmICghYXJlYS0+YV9pc19vcGVuKQorCQlyZXR1cm4gMDsKKworCWZvciAob2ZzID0gYXJlYS0+YV91c2VkX2J5dGVzOworCSAgICAgb2ZzIDw9IHN1cGVyLT5zX3NlZ3NpemUgLSBzaXplb2Yob2gpOworCSAgICAgb2ZzICs9ICh1MzIpYmUxNl90b19jcHUob2gubGVuKSArIHNpemVvZihvaCkpIHsKKwkJZXJyID0gd2J1Zl9yZWFkKHNiLCBkZXZfb2ZzKHNiLCBzZWdubywgb2ZzKSwgc2l6ZW9mKG9oKSwgJm9oKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJaWYgKCFtZW1jaHJfaW52KCZvaCwgMHhmZiwgc2l6ZW9mKG9oKSkpCisJCQlicmVhazsKKworCQljcmMgPSBsb2dmc19jcmMzMigmb2gsIHNpemVvZihvaCkgLSA0LCA0KTsKKwkJaWYgKGNyYyAhPSBvaC5jcmMpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gImludGVycnVwdGVkIGhlYWRlciBhdCAlbGx4XG4iLAorCQkJCQlkZXZfb2ZzKHNiLCBzZWdubywgb2ZzKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlpZiAob2ZzICE9IGFyZWEtPmFfdXNlZF9ieXRlcykgeworCQlwcmludGsoS0VSTl9JTkZPICIleCBieXRlcyB1bmFjY291bnRlZCBkYXRhIGZvdW5kIGF0ICVsbHhcbiIsCisJCQkJb2ZzIC0gYXJlYS0+YV91c2VkX2J5dGVzLAorCQkJCWRldl9vZnMoc2IsIHNlZ25vLCBhcmVhLT5hX3VzZWRfYnl0ZXMpKTsKKwkJYXJlYS0+YV91c2VkX2J5dGVzID0gb2ZzOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGxvZ2ZzX2NoZWNrX2FyZWFzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJaW50IGksIGVycjsKKworCWZvcl9lYWNoX2FyZWEoaSkgeworCQllcnIgPSBjaGVja19hcmVhKHNiLCBpKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBsb2dmc19pbml0X2NhbmRsaXN0KHN0cnVjdCBjYW5kaWRhdGVfbGlzdCAqbGlzdCwgaW50IG1heGNvdW50LAorCQlpbnQgc29ydF9ieV9lYykKK3sKKwlsaXN0LT5jb3VudCA9IDA7CisJbGlzdC0+bWF4Y291bnQgPSBtYXhjb3VudDsKKwlsaXN0LT5zb3J0X2J5X2VjID0gc29ydF9ieV9lYzsKKwlsaXN0LT5yYl90cmVlID0gUkJfUk9PVDsKK30KKworaW50IGxvZ2ZzX2luaXRfZ2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCWludCBpOworCisJYnRyZWVfaW5pdF9tZW1wb29sMzIoJnN1cGVyLT5zX2NhbmRfdHJlZSwgc3VwZXItPnNfYnRyZWVfcG9vbCk7CisJbG9nZnNfaW5pdF9jYW5kbGlzdCgmc3VwZXItPnNfZnJlZV9saXN0LCBMSVNUX1NJWkUgKyBTQ0FOX1JBVElPLCAxKTsKKwlsb2dmc19pbml0X2NhbmRsaXN0KCZzdXBlci0+c19yZXNlcnZlX2xpc3QsCisJCQlzdXBlci0+c19iYWRfc2VnX3Jlc2VydmUsIDEpOworCWZvcl9lYWNoX2FyZWEoaSkKKwkJbG9nZnNfaW5pdF9jYW5kbGlzdCgmc3VwZXItPnNfbG93X2xpc3RbaV0sIExJU1RfU0laRSwgMCk7CisJbG9nZnNfaW5pdF9jYW5kbGlzdCgmc3VwZXItPnNfZWNfbGlzdCwgTElTVF9TSVpFLCAxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbG9nZnNfY2xlYW51cF9saXN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCXN0cnVjdCBjYW5kaWRhdGVfbGlzdCAqbGlzdCkKK3sKKwlzdHJ1Y3QgZ2NfY2FuZGlkYXRlICpjYW5kOworCisJd2hpbGUgKGxpc3QtPmNvdW50KSB7CisJCWNhbmQgPSByYl9lbnRyeShsaXN0LT5yYl90cmVlLnJiX25vZGUsIHN0cnVjdCBnY19jYW5kaWRhdGUsCisJCQkJcmJfbm9kZSk7CisJCXJlbW92ZV9mcm9tX2xpc3QoY2FuZCk7CisJCWZyZWVfY2FuZGlkYXRlKHNiLCBjYW5kKTsKKwl9CisJQlVHX09OKGxpc3QtPnJiX3RyZWUucmJfbm9kZSk7Cit9CisKK3ZvaWQgbG9nZnNfY2xlYW51cF9nYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJaW50IGk7CisKKwlpZiAoIXN1cGVyLT5zX2ZyZWVfbGlzdC5jb3VudCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBGSVhNRTogVGhlIGJ0cmVlIG1heSBzdGlsbCBjb250YWluIGEgc2luZ2xlIGVtcHR5IG5vZGUuICBTbyB3ZQorCSAqIGNhbGwgdGhlIGdyaW0gdmlzaXRvciB0byBjbGVhbiB1cCB0aGF0IG1lc3MuICBCdHJlZSBjb2RlIHNob3VsZAorCSAqIGRvIGl0IGZvciB1cywgcmVhbGx5LgorCSAqLworCWJ0cmVlX2dyaW1fdmlzaXRvcjMyKCZzdXBlci0+c19jYW5kX3RyZWUsIDAsIE5VTEwpOworCWxvZ2ZzX2NsZWFudXBfbGlzdChzYiwgJnN1cGVyLT5zX2ZyZWVfbGlzdCk7CisJbG9nZnNfY2xlYW51cF9saXN0KHNiLCAmc3VwZXItPnNfcmVzZXJ2ZV9saXN0KTsKKwlmb3JfZWFjaF9hcmVhKGkpCisJCWxvZ2ZzX2NsZWFudXBfbGlzdChzYiwgJnN1cGVyLT5zX2xvd19saXN0W2ldKTsKKwlsb2dmc19jbGVhbnVwX2xpc3Qoc2IsICZzdXBlci0+c19lY19saXN0KTsKK30KZGlmZiAtLWdpdCBhL2ZzL2xvZ2ZzL2lub2RlLmMgYi9mcy9sb2dmcy9pbm9kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZWMxYWUKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9sb2dmcy9pbm9kZS5jCkBAIC0wLDAgKzEsNDE3IEBACisvKgorICogZnMvbG9nZnMvaW5vZGUuYwktIGlub2RlIGhhbmRsaW5nIGNvZGUKKyAqCisgKiBBcyBzaG91bGQgYmUgb2J2aW91cyBmb3IgTGludXgga2VybmVsIGNvZGUsIGxpY2Vuc2UgaXMgR1BMdjIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCBKb2VybiBFbmdlbCA8am9lcm5AbG9nZnMub3JnPgorICovCisjaW5jbHVkZSAibG9nZnMuaCIKKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KKyNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgorCisvKgorICogSG93IHNvb24gdG8gcmV1c2Ugb2xkIGlub2RlIG51bWJlcnM/ICBMb2dGUyBkb2Vzbid0IHN0b3JlIGRlbGV0ZWQgaW5vZGVzCisgKiBvbiB0aGUgbWVkaXVtLiAgSXQgdGhlcmVmb3JlIGFsc28gbGFja3MgYSBtZXRob2QgdG8gc3RvcmUgdGhlIHByZXZpb3VzCisgKiBnZW5lcmF0aW9uIG51bWJlciBmb3IgZGVsZXRlZCBpbm9kZXMuICBJbnN0ZWFkIGEgc2luZ2xlIGdlbmVyYXRpb24gbnVtYmVyCisgKiBpcyBzdG9yZWQgd2hpY2ggd2lsbCBiZSB1c2VkIGZvciBuZXcgaW5vZGVzLiAgQmVpbmcganVzdCBhIDMyYml0IGNvdW50ZXIsCisgKiB0aGlzIGNhbiBvYnZpb3VzIHdyYXAgcmVsYXRpdmVseSBxdWlja2x5LiAgU28gd2Ugb25seSByZXVzZSBpbm9kZXMgaWYgd2UKKyAqIGtub3cgdGhhdCBhIGZhaXIgbnVtYmVyIG9mIGlub2RlcyBjYW4gYmUgY3JlYXRlZCBiZWZvcmUgd2UgaGF2ZSB0byBpbmNyZW1lbnQKKyAqIHRoZSBnZW5lcmF0aW9uIGFnYWluIC0gZWZmZWN0aXZlbHkgYWRkaW5nIHNvbWUgYml0cyB0byB0aGUgY291bnRlci4KKyAqIEJ1dCBiZWluZyB0b28gYWdncmVzc2l2ZSBoZXJlIG1lYW5zIHdlIGtlZXAgYSB2ZXJ5IGxhcmdlIGFuZCB2ZXJ5IHNwYXJzZQorICogaW5vZGUgZmlsZSwgd2FzdGluZyBzcGFjZSBvbiBpbmRpcmVjdCBibG9ja3MuCisgKiBTbyB3aGF0IGlzIGEgZ29vZCB2YWx1ZT8gIEJlYXRzIG1lLiAgNjRrIHNlZW1zIG1vZGVyYXRlbHkgYmFkIG9uIGJvdGgKKyAqIGZyb250cywgc28gbGV0J3MgdXNlIHRoYXQgZm9yIG5vdy4uLgorICoKKyAqIE5GUyBzdWNrcywgYXMgZXZlcnlvbmUgYWxyZWFkeSBrbm93cy4KKyAqLworI2RlZmluZSBJTk9TX1BFUl9XUkFQICgweDEwMDAwKQorCisvKgorICogTG9nZnMnIHJlcXVpcmVtZW50IHRvIHJlYWQgaW5vZGVzIGZvciBnYXJiYWdlIGNvbGxlY3Rpb24gbWFrZXMgbGlmZSBhIGJpdAorICogaGFyZGVyLiAgR0MgbWF5IGhhdmUgdG8gcmVhZCBpbm9kZXMgdGhhdCBhcmUgaW4gSV9GUkVFSU5HIHN0YXRlLCB3aGVuIHRoZXkKKyAqIGFyZSBiZWluZyB3cml0dGVuIG91dCAtIGFuZCB3YWl0aW5nIGZvciBHQyB0byBtYWtlIHByb2dyZXNzLCBuYXR1cmFsbHkuCisgKgorICogU28gd2UgY2Fubm90IGp1c3QgY2FsbCBpZ2V0KCkgb3Igc29tZSB2YXJpYW50IG9mIGl0LCBidXQgZmlyc3QgaGF2ZSB0byBjaGVjaworICogd2V0aGVyIHRoZSBpbm9kZSBpbiBxdWVzdGlvbiBtaWdodCBiZSBpbiBJX0ZSRUVJTkcgc3RhdGUuICBUaGVyZWZvcmUgd2UKKyAqIG1haW50YWluIG91ciBvd24gcGVyLXNiIGxpc3Qgb2YgImFsbW9zdCBkZWxldGVkIiBpbm9kZXMgYW5kIGNoZWNrIGFnYWluc3QKKyAqIHRoYXQgbGlzdCBmaXJzdC4gIE5vcm1hbGx5IHRoaXMgc2hvdWxkIGJlIGF0IG1vc3QgMS0yIGVudHJpZXMgbG9uZy4KKyAqCisgKiBBbHNvLCBpbm9kZXMgaGF2ZSBsb2dmcy1zcGVjaWZpYyByZWZlcmVuY2UgY291bnRpbmcgb24gdG9wIG9mIHdoYXQgdGhlIHZmcworICogZG9lcy4gIFdoZW4gLmRlc3Ryb3lfaW5vZGUgaXMgY2FsbGVkLCBub3JtYWxseSB0aGUgcmVmZXJlbmNlIGNvdW50IHdpbGwgZHJvcAorICogdG8gemVybyBhbmQgdGhlIGlub2RlIGdldHMgZGVsZXRlZC4gIEJ1dCBpZiBHQyBhY2Nlc3NlZCB0aGUgaW5vZGUsIGl0cworICogcmVmY291bnQgd2lsbCByZW1haW4gbm9uemVybyBhbmQgZmluYWwgZGVsZXRpb24gd2lsbCBoYXZlIHRvIHdhaXQuCisgKgorICogQXMgYSByZXN1bHQgd2UgaGF2ZSB0d28gc2V0cyBvZiBmdW5jdGlvbnMgdG8gZ2V0L3B1dCBpbm9kZXM6CisgKiBsb2dmc19zYWZlX2lnZXQvbG9nZnNfc2FmZV9pcHV0CS0gc2FmZSB0byBjYWxsIGZyb20gR0MgY29udGV4dAorICogbG9nZnNfaWdldC9pcHV0CQkJLSBub3JtYWwgdmVyc2lvbgorICovCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmxvZ2ZzX2lub2RlX2NhY2hlOworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGxvZ2ZzX2lub2RlX2xvY2spOworCitzdGF0aWMgdm9pZCBsb2dmc19pbm9kZV9zZXRvcHMoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzd2l0Y2ggKGlub2RlLT5pX21vZGUgJiBTX0lGTVQpIHsKKwljYXNlIFNfSUZESVI6CisJCWlub2RlLT5pX29wID0gJmxvZ2ZzX2Rpcl9pb3BzOworCQlpbm9kZS0+aV9mb3AgPSAmbG9nZnNfZGlyX2ZvcHM7CisJCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJmxvZ2ZzX3JlZ19hb3BzOworCQlicmVhazsKKwljYXNlIFNfSUZSRUc6CisJCWlub2RlLT5pX29wID0gJmxvZ2ZzX3JlZ19pb3BzOworCQlpbm9kZS0+aV9mb3AgPSAmbG9nZnNfcmVnX2ZvcHM7CisJCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJmxvZ2ZzX3JlZ19hb3BzOworCQlicmVhazsKKwljYXNlIFNfSUZMTks6CisJCWlub2RlLT5pX29wID0gJmxvZ2ZzX3N5bWxpbmtfaW9wczsKKwkJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmbG9nZnNfcmVnX2FvcHM7CisJCWJyZWFrOworCWNhc2UgU19JRlNPQ0s6CS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU19JRkJMSzoJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTX0lGQ0hSOgkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNfSUZJRk86CisJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtPmlfbW9kZSwgaW5vZGUtPmlfcmRldik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBpbm9kZSAqX19sb2dmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGlub190IGlubykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaWdldF9sb2NrZWQoc2IsIGlubyk7CisJaW50IGVycjsKKworCWlmICghaW5vZGUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCWlmICghKGlub2RlLT5pX3N0YXRlICYgSV9ORVcpKQorCQlyZXR1cm4gaW5vZGU7CisKKwllcnIgPSBsb2dmc19yZWFkX2lub2RlKGlub2RlKTsKKwlpZiAoZXJyIHx8IGlub2RlLT5pX25saW5rID09IDApIHsKKwkJLyogaW5vZGUtPmlfbmxpbmsgPT0gMCBjYW4gYmUgdHJ1ZSB3aGVuIGNhbGxlZCBmcm9tCisJCSAqIGJsb2NrIHZhbGlkYXRvciAqLworCQkvKiBzZXQgaV9ubGluayB0byAwIHRvIHByZXZlbnQgY2FjaGluZyAqLworCQlpbm9kZS0+aV9ubGluayA9IDA7CisJCWxvZ2ZzX2lub2RlKGlub2RlKS0+bGlfZmxhZ3MgfD0gTE9HRlNfSUZfWk9NQklFOworCQlpZ2V0X2ZhaWxlZChpbm9kZSk7CisJCWlmICghZXJyKQorCQkJZXJyID0gLUVOT0VOVDsKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwl9CisKKwlsb2dmc19pbm9kZV9zZXRvcHMoaW5vZGUpOworCXVubG9ja19uZXdfaW5vZGUoaW5vZGUpOworCXJldHVybiBpbm9kZTsKK30KKworc3RydWN0IGlub2RlICpsb2dmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGlub190IGlubykKK3sKKwlCVUdfT04oaW5vID09IExPR0ZTX0lOT19NQVNURVIpOworCUJVR19PTihpbm8gPT0gTE9HRlNfSU5PX1NFR0ZJTEUpOworCXJldHVybiBfX2xvZ2ZzX2lnZXQoc2IsIGlubyk7Cit9CisKKy8qCisgKiBpc19jYWNoZWQgaXMgc2V0IHRvIDEgaWYgd2UgaGFuZCBvdXQgYSBjYWNoZWQgaW5vZGUsIDAgb3RoZXJ3aXNlLgorICogdGhpcyBhbGxvd3MgbG9nZnNfaXB1dCB0byBkbyB0aGUgcmlnaHQgdGhpbmcgbGF0ZXIKKyAqLworc3RydWN0IGlub2RlICpsb2dmc19zYWZlX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW5vX3QgaW5vLCBpbnQgKmlzX2NhY2hlZCkKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGk7CisKKwlpZiAoaW5vID09IExPR0ZTX0lOT19NQVNURVIpCisJCXJldHVybiBzdXBlci0+c19tYXN0ZXJfaW5vZGU7CisJaWYgKGlubyA9PSBMT0dGU19JTk9fU0VHRklMRSkKKwkJcmV0dXJuIHN1cGVyLT5zX3NlZ2ZpbGVfaW5vZGU7CisKKwlzcGluX2xvY2soJmxvZ2ZzX2lub2RlX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkobGksICZzdXBlci0+c19mcmVlaW5nX2xpc3QsIGxpX2ZyZWVpbmdfbGlzdCkKKwkJaWYgKGxpLT52ZnNfaW5vZGUuaV9pbm8gPT0gaW5vKSB7CisJCQlsaS0+bGlfcmVmY291bnQrKzsKKwkJCXNwaW5fdW5sb2NrKCZsb2dmc19pbm9kZV9sb2NrKTsKKwkJCSppc19jYWNoZWQgPSAxOworCQkJcmV0dXJuICZsaS0+dmZzX2lub2RlOworCQl9CisJc3Bpbl91bmxvY2soJmxvZ2ZzX2lub2RlX2xvY2spOworCisJKmlzX2NhY2hlZCA9IDA7CisJcmV0dXJuIF9fbG9nZnNfaWdldChzYiwgaW5vKTsKK30KKworc3RhdGljIHZvaWQgX19sb2dmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKworCUJVR19PTihsaS0+bGlfYmxvY2spOworCWxpc3RfZGVsKCZsaS0+bGlfZnJlZWluZ19saXN0KTsKKwlrbWVtX2NhY2hlX2ZyZWUobG9nZnNfaW5vZGVfY2FjaGUsIGxpKTsKK30KKworc3RhdGljIHZvaWQgbG9nZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGkgPSBsb2dmc19pbm9kZShpbm9kZSk7CisKKwlCVUdfT04obGlzdF9lbXB0eSgmbGktPmxpX2ZyZWVpbmdfbGlzdCkpOworCXNwaW5fbG9jaygmbG9nZnNfaW5vZGVfbG9jayk7CisJbGktPmxpX3JlZmNvdW50LS07CisJaWYgKGxpLT5saV9yZWZjb3VudCA9PSAwKQorCQlfX2xvZ2ZzX2Rlc3Ryb3lfaW5vZGUoaW5vZGUpOworCXNwaW5fdW5sb2NrKCZsb2dmc19pbm9kZV9sb2NrKTsKK30KKwordm9pZCBsb2dmc19zYWZlX2lwdXQoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGlzX2NhY2hlZCkKK3sKKwlpZiAoaW5vZGUtPmlfaW5vID09IExPR0ZTX0lOT19NQVNURVIpCisJCXJldHVybjsKKwlpZiAoaW5vZGUtPmlfaW5vID09IExPR0ZTX0lOT19TRUdGSUxFKQorCQlyZXR1cm47CisKKwlpZiAoaXNfY2FjaGVkKSB7CisJCWxvZ2ZzX2Rlc3Ryb3lfaW5vZGUoaW5vZGUpOworCQlyZXR1cm47CisJfQorCisJaXB1dChpbm9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIGxvZ2ZzX2luaXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCWludCBpOworCisJbGktPmxpX2ZsYWdzCT0gMDsKKwlsaS0+bGlfaGVpZ2h0CT0gMDsKKwlsaS0+bGlfdXNlZF9ieXRlcyA9IDA7CisJbGktPmxpX2Jsb2NrCT0gTlVMTDsKKwlpbm9kZS0+aV91aWQJPSAwOworCWlub2RlLT5pX2dpZAk9IDA7CisJaW5vZGUtPmlfc2l6ZQk9IDA7CisJaW5vZGUtPmlfYmxvY2tzCT0gMDsKKwlpbm9kZS0+aV9jdGltZQk9IENVUlJFTlRfVElNRTsKKwlpbm9kZS0+aV9tdGltZQk9IENVUlJFTlRfVElNRTsKKwlpbm9kZS0+aV9ubGluawk9IDE7CisJSU5JVF9MSVNUX0hFQUQoJmxpLT5saV9mcmVlaW5nX2xpc3QpOworCisJZm9yIChpID0gMDsgaSA8IExPR0ZTX0VNQkVEREVEX0ZJRUxEUzsgaSsrKQorCQlsaS0+bGlfZGF0YVtpXSA9IDA7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKmxvZ2ZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaTsKKworCWxpID0ga21lbV9jYWNoZV9hbGxvYyhsb2dmc19pbm9kZV9jYWNoZSwgR0ZQX05PRlMpOworCWlmICghbGkpCisJCXJldHVybiBOVUxMOworCWxvZ2ZzX2luaXRfaW5vZGUoc2IsICZsaS0+dmZzX2lub2RlKTsKKwlyZXR1cm4gJmxpLT52ZnNfaW5vZGU7Cit9CisKKy8qCisgKiBJbiBsb2dmcyBpbm9kZXMgYXJlIHdyaXR0ZW4gdG8gYW4gaW5vZGUgZmlsZS4gIFRoZSBpbm9kZSBmaWxlLCBsaWtlIGFueQorICogb3RoZXIgZmlsZSwgaXMgbWFuYWdlZCB3aXRoIGEgaW5vZGUuICBUaGUgaW5vZGUgZmlsZSdzIGlub2RlLCBha2EgbWFzdGVyCisgKiBpbm9kZSwgcmVxdWlyZXMgc3BlY2lhbCBoYW5kbGluZyBpbiBzZXZlcmFsIHJlc3BlY3RzLiAgRmlyc3QsIGl0IGNhbm5vdCBiZQorICogd3JpdHRlbiB0byB0aGUgaW5vZGUgZmlsZSwgc28gaXQgaXMgc3RvcmVkIGluIHRoZSBqb3VybmFsIGluc3RlYWQuCisgKgorICogU2Vjb25kbHksIHRoaXMgaW5vZGUgY2Fubm90IGJlIHdyaXR0ZW4gYmFjayBhbmQgZGVzdHJveWVkIGJlZm9yZSBhbGwgb3RoZXIKKyAqIGlub2RlcyBoYXZlIGJlZW4gd3JpdHRlbi4gIFRoZSBvcmRlcmluZyBpcyBpbXBvcnRhbnQuICBMaW51eCcgVkZTIGlzIGhhcHBpbHkKKyAqIHVuYXdhcmUgb2YgdGhlIG9yZGVyaW5nIGNvbnN0cmFpbnQgYW5kIHdvdWxkIG9yZGluYXJpbHkgZGVzdHJveSB0aGUgbWFzdGVyCisgKiBpbm9kZSBhdCB1bW91bnQgdGltZSB3aGlsZSBvdGhlciBpbm9kZXMgYXJlIHN0aWxsIGluIHVzZSBhbmQgZGlydHkuICBOb3QKKyAqIGdvb2QuCisgKgorICogU28gbG9nZnMgbWFrZXMgc3VyZSB0aGUgbWFzdGVyIGlub2RlIGlzIG5vdCB3cml0dGVuIHVudGlsIGFsbCBvdGhlciBpbm9kZXMKKyAqIGhhdmUgYmVlbiBkZXN0cm95ZWQuICBTYWRseSwgdGhpcyBtZXRob2QgaGFzIGFub3RoZXIgc2lkZS1lZmZlY3QuICBUaGUgVkZTCisgKiB3aWxsIG5vdGljZSBvbmUgcmVtYWluaW5nIGlub2RlIGFuZCBwcmludCBhIGZyaWdodGVuaW5nIHdhcm5pbmcgbWVzc2FnZS4KKyAqIFdvcnNlLCBpdCBpcyBpbXBvc3NpYmxlIHRvIGp1ZGdlIHdoZXRoZXIgc3VjaCBhIHdhcm5pbmcgd2FzIGNhdXNlZCBieSB0aGUKKyAqIG1hc3RlciBpbm9kZSBvciBhbnkgb3RoZXIgaW5vZGVzIGhhdmUgbGVha2VkIGFzIHdlbGwuCisgKgorICogT3VyIGF0dGVtcHQgb2Ygc29sdmluZyB0aGlzIGlzIHdpdGggbG9nZnNfbmV3X21ldGFfaW5vZGUoKSBiZWxvdy4gIEl0cworICogcHVycG9zZSBpcyB0byBjcmVhdGUgYSBuZXcgaW5vZGUgdGhhdCB3aWxsIG5vdCB0cmlnZ2VyIHRoZSB3YXJuaW5nIGlmIHN1Y2gKKyAqIGFuIGlub2RlIGlzIHN0aWxsIGluIHVzZS4gIEFuIHVnbHkgaGFjaywgbm8gZG91YnQuICBTdWdnZWN0aW9ucyBmb3IKKyAqIGltcHJvdmVtZW50IGFyZSB3ZWxjb21lLgorICovCitzdHJ1Y3QgaW5vZGUgKmxvZ2ZzX25ld19tZXRhX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBpbm8pCit7CisJc3RydWN0IGlub2RlICppbm9kZTsKKworCWlub2RlID0gbG9nZnNfYWxsb2NfaW5vZGUoc2IpOworCWlmICghaW5vZGUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJaW5vZGUtPmlfbW9kZSA9IFNfSUZSRUc7CisJaW5vZGUtPmlfaW5vID0gaW5vOworCWlub2RlLT5pX3NiID0gc2I7CisKKwkvKiBUaGlzIGlzIGEgYmxhdGFudCBjb3B5IG9mIGFsbG9jX2lub2RlIGNvZGUuICBXZSdkIG5lZWQgYWxsb2NfaW5vZGUKKwkgKiB0byBiZSBub25zdGF0aWMsIGFsYXMuICovCisJeworCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqIGNvbnN0IG1hcHBpbmcgPSAmaW5vZGUtPmlfZGF0YTsKKworCQltYXBwaW5nLT5hX29wcyA9ICZsb2dmc19yZWdfYW9wczsKKwkJbWFwcGluZy0+aG9zdCA9IGlub2RlOworCQltYXBwaW5nLT5mbGFncyA9IDA7CisJCW1hcHBpbmdfc2V0X2dmcF9tYXNrKG1hcHBpbmcsIEdGUF9OT0ZTKTsKKwkJbWFwcGluZy0+YXNzb2NfbWFwcGluZyA9IE5VTEw7CisJCW1hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8gPSAmZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvOworCQlpbm9kZS0+aV9tYXBwaW5nID0gbWFwcGluZzsKKwkJaW5vZGUtPmlfbmxpbmsgPSAxOworCX0KKworCXJldHVybiBpbm9kZTsKK30KKworc3RydWN0IGlub2RlICpsb2dmc19yZWFkX21ldGFfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IGlubykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWludCBlcnI7CisKKwlpbm9kZSA9IGxvZ2ZzX25ld19tZXRhX2lub2RlKHNiLCBpbm8pOworCWlmIChJU19FUlIoaW5vZGUpKQorCQlyZXR1cm4gaW5vZGU7CisKKwllcnIgPSBsb2dmc19yZWFkX2lub2RlKGlub2RlKTsKKwlpZiAoZXJyKSB7CisJCWRlc3Ryb3lfbWV0YV9pbm9kZShpbm9kZSk7CisJCXJldHVybiBFUlJfUFRSKGVycik7CisJfQorCWxvZ2ZzX2lub2RlX3NldG9wcyhpbm9kZSk7CisJcmV0dXJuIGlub2RlOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQoreworCWludCByZXQ7CisJbG9uZyBmbGFncyA9IFdGX0xPQ0s7CisKKwkvKiBDYW4gb25seSBoYXBwZW4gaWYgY3JlYXQoKSBmYWlsZWQuICBTYWZlIHRvIHNraXAuICovCisJaWYgKGxvZ2ZzX2lub2RlKGlub2RlKS0+bGlfZmxhZ3MgJiBMT0dGU19JRl9TVElMTEJPUk4pCisJCXJldHVybiAwOworCisJcmV0ID0gX19sb2dmc193cml0ZV9pbm9kZShpbm9kZSwgZmxhZ3MpOworCUxPR0ZTX0JVR19PTihyZXQsIGlub2RlLT5pX3NiKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGRlc3Ryb3lfbWV0YV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWlmIChpbm9kZSkgeworCQlpZiAoaW5vZGUtPmlfZGF0YS5ucnBhZ2VzKQorCQkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOworCQlsb2dmc19jbGVhcl9pbm9kZShpbm9kZSk7CisJCWttZW1fY2FjaGVfZnJlZShsb2dmc19pbm9kZV9jYWNoZSwgbG9nZnNfaW5vZGUoaW5vZGUpKTsKKwl9Cit9CisKKy8qIGNhbGxlZCB3aXRoIGlub2RlX2xvY2sgaGVsZCAqLworc3RhdGljIHZvaWQgbG9nZnNfZHJvcF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihpbm9kZS0+aV9zYik7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKworCXNwaW5fbG9jaygmbG9nZnNfaW5vZGVfbG9jayk7CisJbGlzdF9tb3ZlKCZsaS0+bGlfZnJlZWluZ19saXN0LCAmc3VwZXItPnNfZnJlZWluZ19saXN0KTsKKwlzcGluX3VubG9jaygmbG9nZnNfaW5vZGVfbG9jayk7CisJZ2VuZXJpY19kcm9wX2lub2RlKGlub2RlKTsKK30KKworc3RhdGljIHZvaWQgbG9nZnNfc2V0X2lub19nZW5lcmF0aW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCXN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwl1NjQgaW5vOworCisJbXV0ZXhfbG9jaygmc3VwZXItPnNfam91cm5hbF9tdXRleCk7CisJaW5vID0gbG9nZnNfc2Vla19ob2xlKHN1cGVyLT5zX21hc3Rlcl9pbm9kZSwgc3VwZXItPnNfbGFzdF9pbm8pOworCXN1cGVyLT5zX2xhc3RfaW5vID0gaW5vOworCXN1cGVyLT5zX2lub3NfdGlsbF93cmFwLS07CisJaWYgKHN1cGVyLT5zX2lub3NfdGlsbF93cmFwIDwgMCkgeworCQlzdXBlci0+c19sYXN0X2lubyA9IExPR0ZTX1JFU0VSVkVEX0lOT1M7CisJCXN1cGVyLT5zX2dlbmVyYXRpb24rKzsKKwkJc3VwZXItPnNfaW5vc190aWxsX3dyYXAgPSBJTk9TX1BFUl9XUkFQOworCX0KKwlpbm9kZS0+aV9pbm8gPSBpbm87CisJaW5vZGUtPmlfZ2VuZXJhdGlvbiA9IHN1cGVyLT5zX2dlbmVyYXRpb247CisJbXV0ZXhfdW5sb2NrKCZzdXBlci0+c19qb3VybmFsX211dGV4KTsKK30KKworc3RydWN0IGlub2RlICpsb2dmc19uZXdfaW5vZGUoc3RydWN0IGlub2RlICpkaXIsIGludCBtb2RlKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItPmlfc2I7CisJc3RydWN0IGlub2RlICppbm9kZTsKKworCWlub2RlID0gbmV3X2lub2RlKHNiKTsKKwlpZiAoIWlub2RlKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWxvZ2ZzX2luaXRfaW5vZGUoc2IsIGlub2RlKTsKKworCS8qIGluaGVyaXQgcGFyZW50IGZsYWdzICovCisJbG9nZnNfaW5vZGUoaW5vZGUpLT5saV9mbGFncyB8PQorCQlsb2dmc19pbm9kZShkaXIpLT5saV9mbGFncyAmIExPR0ZTX0ZMX0lOSEVSSVRFRDsKKworCWlub2RlLT5pX21vZGUgPSBtb2RlOworCWxvZ2ZzX3NldF9pbm9fZ2VuZXJhdGlvbihzYiwgaW5vZGUpOworCisJaW5vZGUtPmlfdWlkID0gY3VycmVudF9mc3VpZCgpOworCWlub2RlLT5pX2dpZCA9IGN1cnJlbnRfZnNnaWQoKTsKKwlpZiAoZGlyLT5pX21vZGUgJiBTX0lTR0lEKSB7CisJCWlub2RlLT5pX2dpZCA9IGRpci0+aV9naWQ7CisJCWlmIChTX0lTRElSKG1vZGUpKQorCQkJaW5vZGUtPmlfbW9kZSB8PSBTX0lTR0lEOworCX0KKworCWxvZ2ZzX2lub2RlX3NldG9wcyhpbm9kZSk7CisJaW5zZXJ0X2lub2RlX2hhc2goaW5vZGUpOworCisJcmV0dXJuIGlub2RlOworfQorCitzdGF0aWMgdm9pZCBsb2dmc19pbml0X29uY2Uodm9pZCAqX2xpKQoreworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGkgPSBfbGk7CisJaW50IGk7CisKKwlsaS0+bGlfZmxhZ3MgPSAwOworCWxpLT5saV91c2VkX2J5dGVzID0gMDsKKwlsaS0+bGlfcmVmY291bnQgPSAxOworCWZvciAoaSA9IDA7IGkgPCBMT0dGU19FTUJFRERFRF9GSUVMRFM7IGkrKykKKwkJbGktPmxpX2RhdGFbaV0gPSAwOworCWlub2RlX2luaXRfb25jZSgmbGktPnZmc19pbm9kZSk7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfc3luY19mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdCkKK3sKKwkvKiBGSVhNRTogd3JpdGUgYW5jaG9yICovCisJbG9nZnNfc3VwZXIoc2IpLT5zX2Rldm9wcy0+c3luYyhzYik7CisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGxvZ2ZzX3N1cGVyX29wZXJhdGlvbnMgPSB7CisJLmFsbG9jX2lub2RlCT0gbG9nZnNfYWxsb2NfaW5vZGUsCisJLmNsZWFyX2lub2RlCT0gbG9nZnNfY2xlYXJfaW5vZGUsCisJLmRlbGV0ZV9pbm9kZQk9IGxvZ2ZzX2RlbGV0ZV9pbm9kZSwKKwkuZGVzdHJveV9pbm9kZQk9IGxvZ2ZzX2Rlc3Ryb3lfaW5vZGUsCisJLmRyb3BfaW5vZGUJPSBsb2dmc19kcm9wX2lub2RlLAorCS53cml0ZV9pbm9kZQk9IGxvZ2ZzX3dyaXRlX2lub2RlLAorCS5zdGF0ZnMJCT0gbG9nZnNfc3RhdGZzLAorCS5zeW5jX2ZzCT0gbG9nZnNfc3luY19mcywKK307CisKK2ludCBsb2dmc19pbml0X2lub2RlX2NhY2hlKHZvaWQpCit7CisJbG9nZnNfaW5vZGVfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgibG9nZnNfaW5vZGVfY2FjaGUiLAorCQkJc2l6ZW9mKHN0cnVjdCBsb2dmc19pbm9kZSksIDAsIFNMQUJfUkVDTEFJTV9BQ0NPVU5ULAorCQkJbG9nZnNfaW5pdF9vbmNlKTsKKwlpZiAoIWxvZ2ZzX2lub2RlX2NhY2hlKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBsb2dmc19kZXN0cm95X2lub2RlX2NhY2hlKHZvaWQpCit7CisJa21lbV9jYWNoZV9kZXN0cm95KGxvZ2ZzX2lub2RlX2NhY2hlKTsKK30KZGlmZiAtLWdpdCBhL2ZzL2xvZ2ZzL2pvdXJuYWwuYyBiL2ZzL2xvZ2ZzL2pvdXJuYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWQzMGE0Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvbG9nZnMvam91cm5hbC5jCkBAIC0wLDAgKzEsODgzIEBACisvKgorICogZnMvbG9nZnMvam91cm5hbC5jCS0gam91cm5hbCBoYW5kbGluZyBjb2RlCisgKgorICogQXMgc2hvdWxkIGJlIG9idmlvdXMgZm9yIExpbnV4IGtlcm5lbCBjb2RlLCBsaWNlbnNlIGlzIEdQTHYyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDggSm9lcm4gRW5nZWwgPGpvZXJuQGxvZ2ZzLm9yZz4KKyAqLworI2luY2x1ZGUgImxvZ2ZzLmgiCisKK3N0YXRpYyB2b2lkIGxvZ2ZzX2NhbGNfZnJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJdTY0IHJlc2VydmUsIG5vX3NlZ3MgPSBzdXBlci0+c19ub19zZWdzOworCXM2NCBmcmVlOworCWludCBpOworCisJLyogc3VwZXJibG9jayBzZWdtZW50cyAqLworCW5vX3NlZ3MgLT0gMjsKKwlzdXBlci0+c19ub19qb3VybmFsX3NlZ3MgPSAwOworCS8qIGpvdXJuYWwgKi8KKwlqb3VybmFsX2Zvcl9lYWNoKGkpCisJCWlmIChzdXBlci0+c19qb3VybmFsX3NlZ1tpXSkgeworCQkJbm9fc2Vncy0tOworCQkJc3VwZXItPnNfbm9fam91cm5hbF9zZWdzKys7CisJCX0KKworCS8qIG9wZW4gc2VnbWVudHMgcGx1cyBvbmUgZXh0cmEgcGVyIGxldmVsIGZvciBHQyAqLworCW5vX3NlZ3MgLT0gMiAqIHN1cGVyLT5zX3RvdGFsX2xldmVsczsKKworCWZyZWUgPSBub19zZWdzICogKHN1cGVyLT5zX3NlZ3NpemUgLSBMT0dGU19TRUdNRU5UX1JFU0VSVkUpOworCWZyZWUgLT0gc3VwZXItPnNfdXNlZF9ieXRlczsKKwkvKiBqdXN0IGEgYml0IGV4dHJhICovCisJZnJlZSAtPSBzdXBlci0+c190b3RhbF9sZXZlbHMgKiA0MDk2OworCisJLyogQmFkIGJsb2NrcyBhcmUgJ3BhaWQnIGZvciB3aXRoIHNwZWVkIHJlc2VydmUgLSB0aGUgZmlsZXN5c3RlbQorCSAqIHNpbXBseSBnZXRzIHNsb3dlciBhcyBiYWQgYmxvY2tzIGFjY3VtdWxhdGUuICBVbnRpbCB0aGUgYmFkIGJsb2NrcworCSAqIGV4Y2VlZCB0aGUgc3BlZWQgcmVzZXJ2ZSAtIHRoZW4gdGhlIGZpbGVzeXN0ZW0gZ2V0cyBzbWFsbGVyLgorCSAqLworCXJlc2VydmUgPSBzdXBlci0+c19iYWRfc2VnbWVudHMgKyBzdXBlci0+c19iYWRfc2VnX3Jlc2VydmU7CisJcmVzZXJ2ZSAqPSBzdXBlci0+c19zZWdzaXplIC0gTE9HRlNfU0VHTUVOVF9SRVNFUlZFOworCXJlc2VydmUgPSBtYXgocmVzZXJ2ZSwgc3VwZXItPnNfc3BlZWRfcmVzZXJ2ZSk7CisJZnJlZSAtPSByZXNlcnZlOworCWlmIChmcmVlIDwgMCkKKwkJZnJlZSA9IDA7CisKKwlzdXBlci0+c19mcmVlX2J5dGVzID0gZnJlZTsKK30KKworc3RhdGljIHZvaWQgcmVzZXJ2ZV9zYl9hbmRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGJ0cmVlX2hlYWQzMiAqaGVhZCA9ICZzdXBlci0+c19yZXNlcnZlZF9zZWdtZW50czsKKwlpbnQgaSwgZXJyOworCisJZXJyID0gYnRyZWVfaW5zZXJ0MzIoaGVhZCwgc2VnX25vKHNiLCBzdXBlci0+c19zYl9vZnNbMF0pLCAodm9pZCAqKTEsCisJCQlHRlBfS0VSTkVMKTsKKwlCVUdfT04oZXJyKTsKKworCWVyciA9IGJ0cmVlX2luc2VydDMyKGhlYWQsIHNlZ19ubyhzYiwgc3VwZXItPnNfc2Jfb2ZzWzFdKSwgKHZvaWQgKikxLAorCQkJR0ZQX0tFUk5FTCk7CisJQlVHX09OKGVycik7CisKKwlqb3VybmFsX2Zvcl9lYWNoKGkpIHsKKwkJaWYgKCFzdXBlci0+c19qb3VybmFsX3NlZ1tpXSkKKwkJCWNvbnRpbnVlOworCQllcnIgPSBidHJlZV9pbnNlcnQzMihoZWFkLCBzdXBlci0+c19qb3VybmFsX3NlZ1tpXSwgKHZvaWQgKikxLAorCQkJCUdGUF9LRVJORUwpOworCQlCVUdfT04oZXJyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfZHluc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJc3RydWN0IGxvZ2ZzX2plX2R5bnNiICpkeW5zYikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCisJc3VwZXItPnNfZ2VjCQk9IGJlNjRfdG9fY3B1KGR5bnNiLT5kc19nZWMpOworCXN1cGVyLT5zX3N3ZWVwZXIJPSBiZTY0X3RvX2NwdShkeW5zYi0+ZHNfc3dlZXBlcik7CisJc3VwZXItPnNfdmljdGltX2lubwk9IGJlNjRfdG9fY3B1KGR5bnNiLT5kc192aWN0aW1faW5vKTsKKwlzdXBlci0+c19yZW5hbWVfZGlyCT0gYmU2NF90b19jcHUoZHluc2ItPmRzX3JlbmFtZV9kaXIpOworCXN1cGVyLT5zX3JlbmFtZV9wb3MJPSBiZTY0X3RvX2NwdShkeW5zYi0+ZHNfcmVuYW1lX3Bvcyk7CisJc3VwZXItPnNfdXNlZF9ieXRlcwk9IGJlNjRfdG9fY3B1KGR5bnNiLT5kc191c2VkX2J5dGVzKTsKKwlzdXBlci0+c19nZW5lcmF0aW9uCT0gYmUzMl90b19jcHUoZHluc2ItPmRzX2dlbmVyYXRpb24pOworfQorCitzdGF0aWMgdm9pZCByZWFkX2FuY2hvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQlzdHJ1Y3QgbG9nZnNfamVfYW5jaG9yICpkYSkKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBzdXBlci0+c19tYXN0ZXJfaW5vZGU7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKwlpbnQgaTsKKworCXN1cGVyLT5zX2xhc3RfaW5vID0gYmU2NF90b19jcHUoZGEtPmRhX2xhc3RfaW5vKTsKKwlsaS0+bGlfZmxhZ3MJPSAwOworCWxpLT5saV9oZWlnaHQJPSBkYS0+ZGFfaGVpZ2h0OworCWlfc2l6ZV93cml0ZShpbm9kZSwgYmU2NF90b19jcHUoZGEtPmRhX3NpemUpKTsKKwlsaS0+bGlfdXNlZF9ieXRlcyA9IGJlNjRfdG9fY3B1KGRhLT5kYV91c2VkX2J5dGVzKTsKKworCWZvciAoaSA9IDA7IGkgPCBMT0dGU19FTUJFRERFRF9GSUVMRFM7IGkrKykKKwkJbGktPmxpX2RhdGFbaV0gPSBiZTY0X3RvX2NwdShkYS0+ZGFfZGF0YVtpXSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfZXJhc2Vjb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQlzdHJ1Y3QgbG9nZnNfamVfam91cm5hbF9lYyAqZWMpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlpbnQgaTsKKworCWpvdXJuYWxfZm9yX2VhY2goaSkKKwkJc3VwZXItPnNfam91cm5hbF9lY1tpXSA9IGJlMzJfdG9fY3B1KGVjLT5lY1tpXSk7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9hcmVhKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBsb2dmc19qZV9hcmVhICphKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGxvZ2ZzX2FyZWEgKmFyZWEgPSBzdXBlci0+c19hcmVhW2EtPmdjX2xldmVsXTsKKwl1NjQgb2ZzOworCXUzMiB3cml0ZW1hc2sgPSB+KHN1cGVyLT5zX3dyaXRlc2l6ZSAtIDEpOworCisJaWYgKGEtPmdjX2xldmVsID49IExPR0ZTX05PX0FSRUFTKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoYS0+dmltICE9IFZJTV9ERUZBVUxUKQorCQlyZXR1cm4gLUVJTzsgLyogVE9ETzogY2xvc2UgYXJlYSBhbmQgY29udGludWUgKi8KKworCWFyZWEtPmFfdXNlZF9ieXRlcyA9IGJlMzJfdG9fY3B1KGEtPnVzZWRfYnl0ZXMpOworCWFyZWEtPmFfd3JpdHRlbl9ieXRlcyA9IGFyZWEtPmFfdXNlZF9ieXRlcyAmIHdyaXRlbWFzazsKKwlhcmVhLT5hX3NlZ25vID0gYmUzMl90b19jcHUoYS0+c2Vnbm8pOworCWlmIChhcmVhLT5hX3NlZ25vKQorCQlhcmVhLT5hX2lzX29wZW4gPSAxOworCisJb2ZzID0gZGV2X29mcyhzYiwgYXJlYS0+YV9zZWdubywgYXJlYS0+YV93cml0dGVuX2J5dGVzKTsKKwlpZiAoc3VwZXItPnNfd3JpdGVzaXplID4gMSkKKwkJbG9nZnNfYnVmX3JlY292ZXIoYXJlYSwgb2ZzLCBhICsgMSwgc3VwZXItPnNfd3JpdGVzaXplKTsKKwllbHNlCisJCWxvZ2ZzX2J1Zl9yZWNvdmVyKGFyZWEsIG9mcywgTlVMTCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICp1bnBhY2sodm9pZCAqZnJvbSwgdm9pZCAqdG8pCit7CisJc3RydWN0IGxvZ2ZzX2pvdXJuYWxfaGVhZGVyICpqaCA9IGZyb207CisJdm9pZCAqZGF0YSA9IGZyb20gKyBzaXplb2Yoc3RydWN0IGxvZ2ZzX2pvdXJuYWxfaGVhZGVyKTsKKwlpbnQgZXJyOworCXNpemVfdCBpbmxlbiwgb3V0bGVuOworCisJaW5sZW4gPSBiZTE2X3RvX2NwdShqaC0+aF9sZW4pOworCW91dGxlbiA9IGJlMTZfdG9fY3B1KGpoLT5oX2RhdGFsZW4pOworCisJaWYgKGpoLT5oX2NvbXByID09IENPTVBSX05PTkUpCisJCW1lbWNweSh0bywgZGF0YSwgaW5sZW4pOworCWVsc2UgeworCQllcnIgPSBsb2dmc191bmNvbXByZXNzKGRhdGEsIHRvLCBpbmxlbiwgb3V0bGVuKTsKKwkJQlVHX09OKGVycik7CisJfQorCXJldHVybiB0bzsKK30KKworc3RhdGljIGludCBfX3JlYWRfamVfaGVhZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBvZnMsCisJCXN0cnVjdCBsb2dmc19qb3VybmFsX2hlYWRlciAqamgpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzaXplX3QgYnVmc2l6ZSA9IG1heF90KHNpemVfdCwgc2ItPnNfYmxvY2tzaXplLCBzdXBlci0+c193cml0ZXNpemUpCisJCSsgTUFYX0pPVVJOQUxfSEVBREVSOworCXUxNiB0eXBlLCBsZW4sIGRhdGFsZW47CisJaW50IGVycjsKKworCS8qIHJlYWQgaGVhZGVyIG9ubHkgKi8KKwllcnIgPSB3YnVmX3JlYWQoc2IsIG9mcywgc2l6ZW9mKCpqaCksIGpoKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXR5cGUgPSBiZTE2X3RvX2NwdShqaC0+aF90eXBlKTsKKwlsZW4gPSBiZTE2X3RvX2NwdShqaC0+aF9sZW4pOworCWRhdGFsZW4gPSBiZTE2X3RvX2NwdShqaC0+aF9kYXRhbGVuKTsKKwlpZiAobGVuID4gc2ItPnNfYmxvY2tzaXplKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoKHR5cGUgPCBKRV9GSVJTVCkgfHwgKHR5cGUgPiBKRV9MQVNUKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKGRhdGFsZW4gPiBidWZzaXplKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX3JlYWRfamVfcGF5bG9hZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgb2ZzLAorCQlzdHJ1Y3QgbG9nZnNfam91cm5hbF9oZWFkZXIgKmpoKQoreworCXUxNiBsZW47CisJaW50IGVycjsKKworCWxlbiA9IGJlMTZfdG9fY3B1KGpoLT5oX2xlbik7CisJZXJyID0gd2J1Zl9yZWFkKHNiLCBvZnMgKyBzaXplb2YoKmpoKSwgbGVuLCBqaCArIDEpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJaWYgKGpoLT5oX2NyYyAhPSBsb2dmc19jcmMzMihqaCwgbGVuICsgc2l6ZW9mKCpqaCksIDQpKSB7CisJCS8qIE9sZCBjb2RlIHdhcyBjb25mdXNlZC4gIEl0IGZvcmdvdCBhYm91dCB0aGUgaGVhZGVyIGxlbmd0aAorCQkgKiBhbmQgc3RvcHBlZCBjYWxjdWxhdGluZyB0aGUgY3JjIDE2IGJ5dGVzIGJlZm9yZSB0aGUgZW5kCisJCSAqIG9mIGRhdGEgLSBpY2shCisJCSAqIEZJWE1FOiBSZW1vdmUgdGhpcyBoYWNrIG9uY2UgdGhlIG9sZCBjb2RlIGlzIGZpeGVkLgorCQkgKi8KKwkJaWYgKGpoLT5oX2NyYyA9PSBsb2dmc19jcmMzMihqaCwgbGVuLCA0KSkKKwkJCVdBUk5fT05fT05DRSgxKTsKKwkJZWxzZQorCQkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCisvKgorICogamggbmVlZHMgdG8gYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIGNvbXBsZXRlIGVudHJ5LCBub3QganVzdCB0aGUgaGVhZGVyCisgKi8KK3N0YXRpYyBpbnQgX19yZWFkX2plKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBvZnMsCisJCXN0cnVjdCBsb2dmc19qb3VybmFsX2hlYWRlciAqamgpCit7CisJaW50IGVycjsKKworCWVyciA9IF9fcmVhZF9qZV9oZWFkZXIoc2IsIG9mcywgamgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJcmV0dXJuIF9fcmVhZF9qZV9wYXlsb2FkKHNiLCBvZnMsIGpoKTsKK30KKworc3RhdGljIGludCByZWFkX2plKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBvZnMpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgbG9nZnNfam91cm5hbF9oZWFkZXIgKmpoID0gc3VwZXItPnNfY29tcHJlc3NlZF9qZTsKKwl2b2lkICpzY3JhdGNoID0gc3VwZXItPnNfamU7CisJdTE2IHR5cGUsIGRhdGFsZW47CisJaW50IGVycjsKKworCWVyciA9IF9fcmVhZF9qZShzYiwgb2ZzLCBqaCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwl0eXBlID0gYmUxNl90b19jcHUoamgtPmhfdHlwZSk7CisJZGF0YWxlbiA9IGJlMTZfdG9fY3B1KGpoLT5oX2RhdGFsZW4pOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBKRV9EWU5TQjoKKwkJcmVhZF9keW5zYihzYiwgdW5wYWNrKGpoLCBzY3JhdGNoKSk7CisJCWJyZWFrOworCWNhc2UgSkVfQU5DSE9SOgorCQlyZWFkX2FuY2hvcihzYiwgdW5wYWNrKGpoLCBzY3JhdGNoKSk7CisJCWJyZWFrOworCWNhc2UgSkVfRVJBU0VDT1VOVDoKKwkJcmVhZF9lcmFzZWNvdW50KHNiLCB1bnBhY2soamgsIHNjcmF0Y2gpKTsKKwkJYnJlYWs7CisJY2FzZSBKRV9BUkVBOgorCQlyZWFkX2FyZWEoc2IsIHVucGFjayhqaCwgc2NyYXRjaCkpOworCQlicmVhazsKKwljYXNlIEpFX09CSl9BTElBUzoKKwkJZXJyID0gbG9nZnNfbG9hZF9vYmplY3RfYWxpYXNlcyhzYiwgdW5wYWNrKGpoLCBzY3JhdGNoKSwKKwkJCQlkYXRhbGVuKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTl9PTkNFKDEpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBsb2dmc19yZWFkX3NlZ21lbnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlZ25vKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGxvZ2ZzX2pvdXJuYWxfaGVhZGVyICpqaCA9IHN1cGVyLT5zX2NvbXByZXNzZWRfamU7CisJdTY0IG9mcywgc2VnX29mcyA9IGRldl9vZnMoc2IsIHNlZ25vLCAwKTsKKwl1MzIgaF9vZnMsIGxhc3Rfb2ZzID0gMDsKKwl1MTYgbGVuLCBkYXRhbGVuLCBsYXN0X2xlbiA9IDA7CisJaW50IGksIGVycjsKKworCS8qIHNlYXJjaCBmb3IgbW9zdCByZWNlbnQgY29tbWl0ICovCisJZm9yIChoX29mcyA9IDA7IGhfb2ZzIDwgc3VwZXItPnNfc2Vnc2l6ZTsgaF9vZnMgKz0gc2l6ZW9mKCpqaCkpIHsKKwkJb2ZzID0gc2VnX29mcyArIGhfb2ZzOworCQllcnIgPSBfX3JlYWRfamVfaGVhZGVyKHNiLCBvZnMsIGpoKTsKKwkJaWYgKGVycikKKwkJCWNvbnRpbnVlOworCQlpZiAoamgtPmhfdHlwZSAhPSBjcHVfdG9fYmUxNihKRV9DT01NSVQpKQorCQkJY29udGludWU7CisJCWVyciA9IF9fcmVhZF9qZV9wYXlsb2FkKHNiLCBvZnMsIGpoKTsKKwkJaWYgKGVycikKKwkJCWNvbnRpbnVlOworCQlsZW4gPSBiZTE2X3RvX2NwdShqaC0+aF9sZW4pOworCQlkYXRhbGVuID0gYmUxNl90b19jcHUoamgtPmhfZGF0YWxlbik7CisJCWlmICgoZGF0YWxlbiA+IHNpemVvZihzdXBlci0+c19qZV9hcnJheSkpIHx8CisJCQkJKGRhdGFsZW4gJSBzaXplb2YoX19iZTY0KSkpCisJCQljb250aW51ZTsKKwkJbGFzdF9vZnMgPSBoX29mczsKKwkJbGFzdF9sZW4gPSBkYXRhbGVuOworCQloX29mcyArPSBBTElHTihsZW4sIHNpemVvZigqamgpKSAtIHNpemVvZigqamgpOworCX0KKwkvKiByZWFkIGNvbW1pdCAqLworCWlmIChsYXN0X29mcyA9PSAwKQorCQlyZXR1cm4gLUVOT0VOVDsKKwlvZnMgPSBzZWdfb2ZzICsgbGFzdF9vZnM7CisJbG9nX2pvdXJuYWwoIlJlYWQgY29tbWl0IGZyb20gJWxseFxuIiwgb2ZzKTsKKwllcnIgPSBfX3JlYWRfamUoc2IsIG9mcywgamgpOworCUJVR19PTihlcnIpOyAvKiBXZSBzaG91bGQgaGF2ZSBjYXVnaHQgaXQgaW4gdGhlIHNjYW4gbG9vcCBhbHJlYWR5ICovCisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwkvKiB1bmNvbXByZXNzICovCisJdW5wYWNrKGpoLCBzdXBlci0+c19qZV9hcnJheSk7CisJc3VwZXItPnNfbm9famUgPSBsYXN0X2xlbiAvIHNpemVvZihfX2JlNjQpOworCS8qIGl0ZXJhdGUgb3ZlciBhcnJheSAqLworCWZvciAoaSA9IDA7IGkgPCBzdXBlci0+c19ub19qZTsgaSsrKSB7CisJCWVyciA9IHJlYWRfamUoc2IsIGJlNjRfdG9fY3B1KHN1cGVyLT5zX2plX2FycmF5W2ldKSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwlzdXBlci0+c19qb3VybmFsX2FyZWEtPmFfc2Vnbm8gPSBzZWdubzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHU2NCByZWFkX2dlYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2Vnbm8pCit7CisJc3RydWN0IGxvZ2ZzX3NlZ21lbnRfaGVhZGVyIHNoOworCV9fYmUzMiBjcmM7CisJaW50IGVycjsKKworCWlmICghc2Vnbm8pCisJCXJldHVybiAwOworCWVyciA9IHdidWZfcmVhZChzYiwgZGV2X29mcyhzYiwgc2Vnbm8sIDApLCBzaXplb2Yoc2gpLCAmc2gpOworCWlmIChlcnIpCisJCXJldHVybiAwOworCWNyYyA9IGxvZ2ZzX2NyYzMyKCZzaCwgc2l6ZW9mKHNoKSwgNCk7CisJaWYgKGNyYyAhPSBzaC5jcmMpIHsKKwkJV0FSTl9PTihzaC5nZWMgIT0gY3B1X3RvX2JlNjQoMHhmZmZmZmZmZmZmZmZmZmZmdWxsKSk7CisJCS8qIE1vc3QgbGlrZWx5IGl0IHdhcyBqdXN0IGVyYXNlZCAqLworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGJlNjRfdG9fY3B1KHNoLmdlYyk7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfcmVhZF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwl1NjQgZ2VjW0xPR0ZTX0pPVVJOQUxfU0VHU10sIG1heDsKKwl1MzIgc2Vnbm87CisJaW50IGksIG1heF9pOworCisJbWF4ID0gMDsKKwltYXhfaSA9IC0xOworCWpvdXJuYWxfZm9yX2VhY2goaSkgeworCQlzZWdubyA9IHN1cGVyLT5zX2pvdXJuYWxfc2VnW2ldOworCQlnZWNbaV0gPSByZWFkX2dlYyhzYiwgc3VwZXItPnNfam91cm5hbF9zZWdbaV0pOworCQlpZiAoZ2VjW2ldID4gbWF4KSB7CisJCQltYXggPSBnZWNbaV07CisJCQltYXhfaSA9IGk7CisJCX0KKwl9CisJaWYgKG1heF9pID09IC0xKQorCQlyZXR1cm4gLUVJTzsKKwkvKiBGSVhNRTogVHJ5IG9sZGVyIHNlZ21lbnRzIGluIGNhc2Ugb2YgZXJyb3IgKi8KKwlyZXR1cm4gbG9nZnNfcmVhZF9zZWdtZW50KHNiLCBzdXBlci0+c19qb3VybmFsX3NlZ1ttYXhfaV0pOworfQorCisvKgorICogRmlyc3Qgc2VhcmNoIHRoZSBjdXJyZW50IHNlZ21lbnQgKG91dGVyIGxvb3ApLCB0aGVuIHBpY2sgdGhlIG5leHQgc2VnbWVudAorICogaW4gdGhlIGFycmF5LCBza2lwcGluZyBhbnkgemVybyBlbnRyaWVzIChpbm5lciBsb29wKS4KKyAqLworc3RhdGljIHZvaWQgam91cm5hbF9nZXRfZnJlZV9zZWdtZW50KHN0cnVjdCBsb2dmc19hcmVhICphcmVhKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihhcmVhLT5hX3NiKTsKKwlpbnQgaTsKKworCWpvdXJuYWxfZm9yX2VhY2goaSkgeworCQlpZiAoYXJlYS0+YV9zZWdubyAhPSBzdXBlci0+c19qb3VybmFsX3NlZ1tpXSkKKwkJCWNvbnRpbnVlOworCisJCWRvIHsKKwkJCWkrKzsKKwkJCWlmIChpID09IExPR0ZTX0pPVVJOQUxfU0VHUykKKwkJCQlpID0gMDsKKwkJfSB3aGlsZSAoIXN1cGVyLT5zX2pvdXJuYWxfc2VnW2ldKTsKKworCQlhcmVhLT5hX3NlZ25vID0gc3VwZXItPnNfam91cm5hbF9zZWdbaV07CisJCWFyZWEtPmFfZXJhc2VfY291bnQgPSArKyhzdXBlci0+c19qb3VybmFsX2VjW2ldKTsKKwkJbG9nX2pvdXJuYWwoIkpvdXJuYWwgbm93IGF0ICV4IChlYyAleClcbiIsIGFyZWEtPmFfc2Vnbm8sCisJCQkJYXJlYS0+YV9lcmFzZV9jb3VudCk7CisJCXJldHVybjsKKwl9CisJQlVHKCk7Cit9CisKK3N0YXRpYyB2b2lkIGpvdXJuYWxfZ2V0X2VyYXNlX2NvdW50KHN0cnVjdCBsb2dmc19hcmVhICphcmVhKQoreworCS8qIGVyYXNlIGNvdW50IGlzIHN0b3JlZCBnbG9iYWxseSBhbmQgaW5jcmVtZW50ZWQgaW4KKwkgKiBqb3VybmFsX2dldF9mcmVlX3NlZ21lbnQoKSAtIG5vdGhpbmcgdG8gZG8gaGVyZSAqLworfQorCitzdGF0aWMgaW50IGpvdXJuYWxfZXJhc2Vfc2VnbWVudChzdHJ1Y3QgbG9nZnNfYXJlYSAqYXJlYSkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gYXJlYS0+YV9zYjsKKwlzdHJ1Y3QgbG9nZnNfc2VnbWVudF9oZWFkZXIgc2g7CisJdTY0IG9mczsKKwlpbnQgZXJyOworCisJZXJyID0gbG9nZnNfZXJhc2Vfc2VnbWVudChzYiwgYXJlYS0+YV9zZWdubywgMSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXNoLnBhZCA9IDA7CisJc2gudHlwZSA9IFNFR19KT1VSTkFMOworCXNoLmxldmVsID0gMDsKKwlzaC5zZWdubyA9IGNwdV90b19iZTMyKGFyZWEtPmFfc2Vnbm8pOworCXNoLmVjID0gY3B1X3RvX2JlMzIoYXJlYS0+YV9lcmFzZV9jb3VudCk7CisJc2guZ2VjID0gY3B1X3RvX2JlNjQobG9nZnNfc3VwZXIoc2IpLT5zX2dlYyk7CisJc2guY3JjID0gbG9nZnNfY3JjMzIoJnNoLCBzaXplb2Yoc2gpLCA0KTsKKworCS8qIFRoaXMgY2F1c2VzIGEgYnVnIGluIHNlZ21lbnQuYy4gIE5vdCB5ZXQuICovCisJLy9sb2dmc19zZXRfc2VnbWVudF9lcmFzZWQoc2IsIGFyZWEtPmFfc2Vnbm8sIGFyZWEtPmFfZXJhc2VfY291bnQsIDApOworCisJb2ZzID0gZGV2X29mcyhzYiwgYXJlYS0+YV9zZWdubywgMCk7CisJYXJlYS0+YV91c2VkX2J5dGVzID0gQUxJR04oc2l6ZW9mKHNoKSwgMTYpOworCWxvZ2ZzX2J1Zl93cml0ZShhcmVhLCBvZnMsICZzaCwgc2l6ZW9mKHNoKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzaXplX3QgX19sb2dmc193cml0ZV9oZWFkZXIoc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciwKKwkJc3RydWN0IGxvZ2ZzX2pvdXJuYWxfaGVhZGVyICpqaCwgc2l6ZV90IGxlbiwgc2l6ZV90IGRhdGFsZW4sCisJCXUxNiB0eXBlLCB1OCBjb21wcikKK3sKKwlqaC0+aF9sZW4JPSBjcHVfdG9fYmUxNihsZW4pOworCWpoLT5oX3R5cGUJPSBjcHVfdG9fYmUxNih0eXBlKTsKKwlqaC0+aF9kYXRhbGVuCT0gY3B1X3RvX2JlMTYoZGF0YWxlbik7CisJamgtPmhfY29tcHIJPSBjb21wcjsKKwlqaC0+aF9wYWRbMF0JPSAnSCc7CisJamgtPmhfcGFkWzFdCT0gJ0UnOworCWpoLT5oX3BhZFsyXQk9ICdBJzsKKwlqaC0+aF9wYWRbM10JPSAnRCc7CisJamgtPmhfcGFkWzRdCT0gJ1InOworCWpoLT5oX2NyYwk9IGxvZ2ZzX2NyYzMyKGpoLCBsZW4gKyBzaXplb2YoKmpoKSwgNCk7CisJcmV0dXJuIEFMSUdOKGxlbiwgMTYpICsgc2l6ZW9mKCpqaCk7Cit9CisKK3N0YXRpYyBzaXplX3QgbG9nZnNfd3JpdGVfaGVhZGVyKHN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIsCisJCXN0cnVjdCBsb2dmc19qb3VybmFsX2hlYWRlciAqamgsIHNpemVfdCBkYXRhbGVuLCB1MTYgdHlwZSkKK3sKKwlzaXplX3QgbGVuID0gZGF0YWxlbjsKKworCXJldHVybiBfX2xvZ2ZzX3dyaXRlX2hlYWRlcihzdXBlciwgamgsIGxlbiwgZGF0YWxlbiwgdHlwZSwgQ09NUFJfTk9ORSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IGxvZ2ZzX2pvdXJuYWxfZXJhc2Vjb3VudF9zaXplKHN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIpCit7CisJcmV0dXJuIExPR0ZTX0pPVVJOQUxfU0VHUyAqIHNpemVvZihfX2JlMzIpOworfQorCitzdGF0aWMgdm9pZCAqbG9nZnNfd3JpdGVfZXJhc2Vjb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpfZWMsCisJCXUxNiAqdHlwZSwgc2l6ZV90ICpsZW4pCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgbG9nZnNfamVfam91cm5hbF9lYyAqZWMgPSBfZWM7CisJaW50IGk7CisKKwlqb3VybmFsX2Zvcl9lYWNoKGkpCisJCWVjLT5lY1tpXSA9IGNwdV90b19iZTMyKHN1cGVyLT5zX2pvdXJuYWxfZWNbaV0pOworCSp0eXBlID0gSkVfRVJBU0VDT1VOVDsKKwkqbGVuID0gbG9nZnNfam91cm5hbF9lcmFzZWNvdW50X3NpemUoc3VwZXIpOworCXJldHVybiBlYzsKK30KKworc3RhdGljIHZvaWQgYWNjb3VudF9zaGFkb3codm9pZCAqX3NoYWRvdywgdW5zaWduZWQgbG9uZyBfc2IsIHU2NCBpZ25vcmUsCisJCXNpemVfdCBpZ25vcmUyKQoreworCXN0cnVjdCBsb2dmc19zaGFkb3cgKnNoYWRvdyA9IF9zaGFkb3c7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9ICh2b2lkICopX3NiOworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisKKwkvKiBjb25zdW1lIG5ldyBzcGFjZSAqLworCXN1cGVyLT5zX2ZyZWVfYnl0ZXMJICAtPSBzaGFkb3ctPm5ld19sZW47CisJc3VwZXItPnNfdXNlZF9ieXRlcwkgICs9IHNoYWRvdy0+bmV3X2xlbjsKKwlzdXBlci0+c19kaXJ0eV91c2VkX2J5dGVzIC09IHNoYWRvdy0+bmV3X2xlbjsKKworCS8qIGZyZWUgdXAgb2xkIHNwYWNlICovCisJc3VwZXItPnNfZnJlZV9ieXRlcwkgICs9IHNoYWRvdy0+b2xkX2xlbjsKKwlzdXBlci0+c191c2VkX2J5dGVzCSAgLT0gc2hhZG93LT5vbGRfbGVuOworCXN1cGVyLT5zX2RpcnR5X2ZyZWVfYnl0ZXMgLT0gc2hhZG93LT5vbGRfbGVuOworCisJbG9nZnNfc2V0X3NlZ21lbnRfdXNlZChzYiwgc2hhZG93LT5vbGRfb2ZzLCAtc2hhZG93LT5vbGRfbGVuKTsKKwlsb2dmc19zZXRfc2VnbWVudF91c2VkKHNiLCBzaGFkb3ctPm5ld19vZnMsIHNoYWRvdy0+bmV3X2xlbik7CisKKwlsb2dfam91cm5hbCgiYWNjb3VudF9zaGFkb3coJWxseCwgJWxseCwgJXgpICVsbHgtPiVsbHggJXgtPiV4XG4iLAorCQkJc2hhZG93LT5pbm8sIHNoYWRvdy0+Yml4LCBzaGFkb3ctPmdjX2xldmVsLAorCQkJc2hhZG93LT5vbGRfb2ZzLCBzaGFkb3ctPm5ld19vZnMsCisJCQlzaGFkb3ctPm9sZF9sZW4sIHNoYWRvdy0+bmV3X2xlbik7CisJbWVtcG9vbF9mcmVlKHNoYWRvdywgc3VwZXItPnNfc2hhZG93X3Bvb2wpOworfQorCitzdGF0aWMgdm9pZCBhY2NvdW50X3NoYWRvd3Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBzdXBlci0+c19tYXN0ZXJfaW5vZGU7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKwlzdHJ1Y3Qgc2hhZG93X3RyZWUgKnRyZWUgPSAmc3VwZXItPnNfc2hhZG93X3RyZWU7CisKKwlidHJlZV9ncmltX3Zpc2l0b3I2NCgmdHJlZS0+bmV3LCAodW5zaWduZWQgbG9uZylzYiwgYWNjb3VudF9zaGFkb3cpOworCWJ0cmVlX2dyaW1fdmlzaXRvcjY0KCZ0cmVlLT5vbGQsICh1bnNpZ25lZCBsb25nKXNiLCBhY2NvdW50X3NoYWRvdyk7CisKKwlpZiAobGktPmxpX2Jsb2NrKSB7CisJCS8qCisJCSAqIFdlIG5ldmVyIGFjdHVhbGx5IHVzZSB0aGUgc3RydWN0dXJlLCB3aGVuIGF0dGFjaGVkIHRvIHRoZQorCQkgKiBtYXN0ZXIgaW5vZGUuICBCdXQgaXQgaXMgZWFzaWVyIHRvIGFsd2F5cyBmcmVlIGl0IGhlcmUgdGhhbgorCQkgKiB0byBoYXZlIGNoZWNrcyBpbiBzZXZlcmFsIHBsYWNlcyBlbHNld2hlcmUgd2hlbiBhbGxvY2F0aW5nCisJCSAqIGl0LgorCQkgKi8KKwkJbGktPmxpX2Jsb2NrLT5vcHMtPmZyZWVfYmxvY2soc2IsIGxpLT5saV9ibG9jayk7CisJfQorCUJVR19PTigoczY0KWxpLT5saV91c2VkX2J5dGVzIDwgMCk7Cit9CisKK3N0YXRpYyB2b2lkICpfX2xvZ2ZzX3dyaXRlX2FuY2hvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpfZGEsCisJCXUxNiAqdHlwZSwgc2l6ZV90ICpsZW4pCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgbG9nZnNfamVfYW5jaG9yICpkYSA9IF9kYTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gc3VwZXItPnNfbWFzdGVyX2lub2RlOworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGkgPSBsb2dmc19pbm9kZShpbm9kZSk7CisJaW50IGk7CisKKwlkYS0+ZGFfaGVpZ2h0CT0gbGktPmxpX2hlaWdodDsKKwlkYS0+ZGFfbGFzdF9pbm8gPSBjcHVfdG9fYmU2NChzdXBlci0+c19sYXN0X2lubyk7CisJZGEtPmRhX3NpemUJPSBjcHVfdG9fYmU2NChpX3NpemVfcmVhZChpbm9kZSkpOworCWRhLT5kYV91c2VkX2J5dGVzID0gY3B1X3RvX2JlNjQobGktPmxpX3VzZWRfYnl0ZXMpOworCWZvciAoaSA9IDA7IGkgPCBMT0dGU19FTUJFRERFRF9GSUVMRFM7IGkrKykKKwkJZGEtPmRhX2RhdGFbaV0gPSBjcHVfdG9fYmU2NChsaS0+bGlfZGF0YVtpXSk7CisJKnR5cGUgPSBKRV9BTkNIT1I7CisJKmxlbiA9IHNpemVvZigqZGEpOworCXJldHVybiBkYTsKK30KKworc3RhdGljIHZvaWQgKmxvZ2ZzX3dyaXRlX2R5bnNiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKl9keW5zYiwKKwkJdTE2ICp0eXBlLCBzaXplX3QgKmxlbikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBsb2dmc19qZV9keW5zYiAqZHluc2IgPSBfZHluc2I7CisKKwlkeW5zYi0+ZHNfZ2VjCQk9IGNwdV90b19iZTY0KHN1cGVyLT5zX2dlYyk7CisJZHluc2ItPmRzX3N3ZWVwZXIJPSBjcHVfdG9fYmU2NChzdXBlci0+c19zd2VlcGVyKTsKKwlkeW5zYi0+ZHNfdmljdGltX2lubwk9IGNwdV90b19iZTY0KHN1cGVyLT5zX3ZpY3RpbV9pbm8pOworCWR5bnNiLT5kc19yZW5hbWVfZGlyCT0gY3B1X3RvX2JlNjQoc3VwZXItPnNfcmVuYW1lX2Rpcik7CisJZHluc2ItPmRzX3JlbmFtZV9wb3MJPSBjcHVfdG9fYmU2NChzdXBlci0+c19yZW5hbWVfcG9zKTsKKwlkeW5zYi0+ZHNfdXNlZF9ieXRlcwk9IGNwdV90b19iZTY0KHN1cGVyLT5zX3VzZWRfYnl0ZXMpOworCWR5bnNiLT5kc19nZW5lcmF0aW9uCT0gY3B1X3RvX2JlMzIoc3VwZXItPnNfZ2VuZXJhdGlvbik7CisJKnR5cGUgPSBKRV9EWU5TQjsKKwkqbGVuID0gc2l6ZW9mKCpkeW5zYik7CisJcmV0dXJuIGR5bnNiOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV93YnVmKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBsb2dmc19hcmVhICphcmVhLAorCQl2b2lkICp3YnVmKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBzdXBlci0+c19tYXBwaW5nX2lub2RlLT5pX21hcHBpbmc7CisJdTY0IG9mczsKKwlwZ29mZl90IGluZGV4OworCWludCBwYWdlX29mczsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCW9mcyA9IGRldl9vZnMoc2IsIGFyZWEtPmFfc2Vnbm8sCisJCQlhcmVhLT5hX3VzZWRfYnl0ZXMgJiB+KHN1cGVyLT5zX3dyaXRlc2l6ZSAtIDEpKTsKKwlpbmRleCA9IG9mcyA+PiBQQUdFX1NISUZUOworCXBhZ2Vfb2ZzID0gb2ZzICYgKFBBR0VfU0laRSAtIDEpOworCisJcGFnZSA9IGZpbmRfbG9ja19wYWdlKG1hcHBpbmcsIGluZGV4KTsKKwlCVUdfT04oIXBhZ2UpOworCW1lbWNweSh3YnVmLCBwYWdlX2FkZHJlc3MocGFnZSkgKyBwYWdlX29mcywgc3VwZXItPnNfd3JpdGVzaXplKTsKKwl1bmxvY2tfcGFnZShwYWdlKTsKK30KKworc3RhdGljIHZvaWQgKmxvZ2ZzX3dyaXRlX2FyZWEoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqX2EsCisJCXUxNiAqdHlwZSwgc2l6ZV90ICpsZW4pCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgbG9nZnNfYXJlYSAqYXJlYSA9IHN1cGVyLT5zX2FyZWFbc3VwZXItPnNfc3VtX2luZGV4XTsKKwlzdHJ1Y3QgbG9nZnNfamVfYXJlYSAqYSA9IF9hOworCisJYS0+dmltID0gVklNX0RFRkFVTFQ7CisJYS0+Z2NfbGV2ZWwgPSBzdXBlci0+c19zdW1faW5kZXg7CisJYS0+dXNlZF9ieXRlcyA9IGNwdV90b19iZTMyKGFyZWEtPmFfdXNlZF9ieXRlcyk7CisJYS0+c2Vnbm8gPSBjcHVfdG9fYmUzMihhcmVhLT5hX3NlZ25vKTsKKwlpZiAoc3VwZXItPnNfd3JpdGVzaXplID4gMSkKKwkJd3JpdGVfd2J1ZihzYiwgYXJlYSwgYSArIDEpOworCisJKnR5cGUgPSBKRV9BUkVBOworCSpsZW4gPSBzaXplb2YoKmEpICsgc3VwZXItPnNfd3JpdGVzaXplOworCXJldHVybiBhOworfQorCitzdGF0aWMgdm9pZCAqbG9nZnNfd3JpdGVfY29tbWl0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmgsCisJCXUxNiAqdHlwZSwgc2l6ZV90ICpsZW4pCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKworCSp0eXBlID0gSkVfQ09NTUlUOworCSpsZW4gPSBzdXBlci0+c19ub19qZSAqIHNpemVvZihfX2JlNjQpOworCXJldHVybiBzdXBlci0+c19qZV9hcnJheTsKK30KKworc3RhdGljIHNpemVfdCBfX2xvZ2ZzX3dyaXRlX2plKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmJ1ZiwgdTE2IHR5cGUsCisJCXNpemVfdCBsZW4pCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwl2b2lkICpoZWFkZXIgPSBzdXBlci0+c19jb21wcmVzc2VkX2plOworCXZvaWQgKmRhdGEgPSBoZWFkZXIgKyBzaXplb2Yoc3RydWN0IGxvZ2ZzX2pvdXJuYWxfaGVhZGVyKTsKKwlzc2l6ZV90IGNvbXByX2xlbiwgcGFkX2xlbjsKKwl1OCBjb21wciA9IENPTVBSX1pMSUI7CisKKwlpZiAobGVuID09IDApCisJCXJldHVybiBsb2dmc193cml0ZV9oZWFkZXIoc3VwZXIsIGhlYWRlciwgMCwgdHlwZSk7CisKKwljb21wcl9sZW4gPSBsb2dmc19jb21wcmVzcyhidWYsIGRhdGEsIGxlbiwgc2ItPnNfYmxvY2tzaXplKTsKKwlpZiAoY29tcHJfbGVuIDwgMCB8fCB0eXBlID09IEpFX0FOQ0hPUikgeworCQlCVUdfT04obGVuID4gc2ItPnNfYmxvY2tzaXplKTsKKwkJbWVtY3B5KGRhdGEsIGJ1ZiwgbGVuKTsKKwkJY29tcHJfbGVuID0gbGVuOworCQljb21wciA9IENPTVBSX05PTkU7CisJfQorCisJcGFkX2xlbiA9IEFMSUdOKGNvbXByX2xlbiwgMTYpOworCW1lbXNldChkYXRhICsgY29tcHJfbGVuLCAwLCBwYWRfbGVuIC0gY29tcHJfbGVuKTsKKworCXJldHVybiBfX2xvZ2ZzX3dyaXRlX2hlYWRlcihzdXBlciwgaGVhZGVyLCBjb21wcl9sZW4sIGxlbiwgdHlwZSwgY29tcHIpOworfQorCitzdGF0aWMgczY0IGxvZ2ZzX2dldF9mcmVlX2J5dGVzKHN0cnVjdCBsb2dmc19hcmVhICphcmVhLCBzaXplX3QgKmJ5dGVzLAorCQlpbnQgbXVzdF9wYWQpCit7CisJdTMyIHdyaXRlc2l6ZSA9IGxvZ2ZzX3N1cGVyKGFyZWEtPmFfc2IpLT5zX3dyaXRlc2l6ZTsKKwlzMzIgb2ZzOworCWludCByZXQ7CisKKwlyZXQgPSBsb2dmc19vcGVuX2FyZWEoYXJlYSwgKmJ5dGVzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVBR0FJTjsKKworCW9mcyA9IGFyZWEtPmFfdXNlZF9ieXRlczsKKwlhcmVhLT5hX3VzZWRfYnl0ZXMgKz0gKmJ5dGVzOworCisJaWYgKG11c3RfcGFkKSB7CisJCWFyZWEtPmFfdXNlZF9ieXRlcyA9IEFMSUdOKGFyZWEtPmFfdXNlZF9ieXRlcywgd3JpdGVzaXplKTsKKwkJKmJ5dGVzID0gYXJlYS0+YV91c2VkX2J5dGVzIC0gb2ZzOworCX0KKworCXJldHVybiBkZXZfb2ZzKGFyZWEtPmFfc2IsIGFyZWEtPmFfc2Vnbm8sIG9mcyk7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfd3JpdGVfamVfYnVmKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmJ1ZiwgdTE2IHR5cGUsCisJCXNpemVfdCBidWZfbGVuKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGxvZ2ZzX2FyZWEgKmFyZWEgPSBzdXBlci0+c19qb3VybmFsX2FyZWE7CisJc3RydWN0IGxvZ2ZzX2pvdXJuYWxfaGVhZGVyICpqaCA9IHN1cGVyLT5zX2NvbXByZXNzZWRfamU7CisJc2l6ZV90IGxlbjsKKwlpbnQgbXVzdF9wYWQgPSAwOworCXM2NCBvZnM7CisKKwlsZW4gPSBfX2xvZ2ZzX3dyaXRlX2plKHNiLCBidWYsIHR5cGUsIGJ1Zl9sZW4pOworCWlmIChqaC0+aF90eXBlID09IGNwdV90b19iZTE2KEpFX0NPTU1JVCkpCisJCW11c3RfcGFkID0gMTsKKworCW9mcyA9IGxvZ2ZzX2dldF9mcmVlX2J5dGVzKGFyZWEsICZsZW4sIG11c3RfcGFkKTsKKwlpZiAob2ZzIDwgMCkKKwkJcmV0dXJuIG9mczsKKwlsb2dmc19idWZfd3JpdGUoYXJlYSwgb2ZzLCBzdXBlci0+c19jb21wcmVzc2VkX2plLCBsZW4pOworCXN1cGVyLT5zX2plX2FycmF5W3N1cGVyLT5zX25vX2plKytdID0gY3B1X3RvX2JlNjQob2ZzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2dmc193cml0ZV9qZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQl2b2lkKiAoKndyaXRlKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpzY3JhdGNoLAorCQkJdTE2ICp0eXBlLCBzaXplX3QgKmxlbikpCit7CisJdm9pZCAqYnVmOworCXNpemVfdCBsZW47CisJdTE2IHR5cGU7CisKKwlidWYgPSB3cml0ZShzYiwgbG9nZnNfc3VwZXIoc2IpLT5zX2plLCAmdHlwZSwgJmxlbik7CisJcmV0dXJuIGxvZ2ZzX3dyaXRlX2plX2J1ZihzYiwgYnVmLCB0eXBlLCBsZW4pOworfQorCitpbnQgd3JpdGVfYWxpYXNfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgaW5vLCB1NjQgYml4LAorCQlsZXZlbF90IGxldmVsLCBpbnQgY2hpbGRfbm8sIF9fYmU2NCB2YWwpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgbG9nZnNfb2JqX2FsaWFzICpvYSA9IHN1cGVyLT5zX2plOworCWludCBlcnIgPSAwLCBmaWxsID0gc3VwZXItPnNfamVfZmlsbDsKKworCWxvZ19hbGlhc2VzKCJsb2dmc193cml0ZV9vYmpfYWxpYXNlcyAjJXgoJWxseCwgJWxseCwgJXgsICV4KSAlbGx4XG4iLAorCQkJZmlsbCwgaW5vLCBiaXgsIGxldmVsLCBjaGlsZF9ubywgYmU2NF90b19jcHUodmFsKSk7CisJb2FbZmlsbF0uaW5vID0gY3B1X3RvX2JlNjQoaW5vKTsKKwlvYVtmaWxsXS5iaXggPSBjcHVfdG9fYmU2NChiaXgpOworCW9hW2ZpbGxdLnZhbCA9IHZhbDsKKwlvYVtmaWxsXS5sZXZlbCA9IChfX2ZvcmNlIHU4KWxldmVsOworCW9hW2ZpbGxdLmNoaWxkX25vID0gY3B1X3RvX2JlMTYoY2hpbGRfbm8pOworCWZpbGwrKzsKKwlpZiAoZmlsbCA+PSBzYi0+c19ibG9ja3NpemUgLyBzaXplb2YoKm9hKSkgeworCQllcnIgPSBsb2dmc193cml0ZV9qZV9idWYoc2IsIG9hLCBKRV9PQkpfQUxJQVMsIHNiLT5zX2Jsb2Nrc2l6ZSk7CisJCWZpbGwgPSAwOworCX0KKworCXN1cGVyLT5zX2plX2ZpbGwgPSBmaWxsOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfd3JpdGVfb2JqX2FsaWFzZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCWludCBlcnI7CisKKwlsb2dfam91cm5hbCgibG9nZnNfd3JpdGVfb2JqX2FsaWFzZXM6ICVkIGFsaWFzZXMgdG8gd3JpdGVcbiIsCisJCQlzdXBlci0+c19ub19vYmplY3RfYWxpYXNlcyk7CisJc3VwZXItPnNfamVfZmlsbCA9IDA7CisJZXJyID0gbG9nZnNfd3JpdGVfb2JqX2FsaWFzZXNfcGFnZWNhY2hlKHNiKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKHN1cGVyLT5zX2plX2ZpbGwpCisJCWVyciA9IGxvZ2ZzX3dyaXRlX2plX2J1ZihzYiwgc3VwZXItPnNfamUsIEpFX09CSl9BTElBUywKKwkJCQlzdXBlci0+c19qZV9maWxsCisJCQkJKiBzaXplb2Yoc3RydWN0IGxvZ2ZzX29ial9hbGlhcykpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBXcml0ZSBhbGwgam91cm5hbCBlbnRyaWVzLiAgVGhlIGdvdG8gbG9naWMgZW5zdXJlcyB0aGF0IGFsbCBqb3VybmFsIGVudHJpZXMKKyAqIGFyZSB3cml0dGVuIHdoZW5ldmVyIGEgbmV3IHNlZ21lbnQgaXMgdXNlZC4gIEl0IGlzIHVnbHkgYW5kIHBvdGVudGlhbGx5IGEKKyAqIGJpdCB3YXN0ZWZ1bCwgYnV0IHJvYnVzdG5lc3MgaXMgbW9yZSBpbXBvcnRhbnQuICBXaXRoIHRoaXMgd2UgY2FuICphbHdheXMqCisgKiBlcmFzZSBhbGwgam91cm5hbCBzZWdtZW50cyBleGNlcHQgdGhlIG9uZSBjb250YWluaW5nIHRoZSBtb3N0IHJlY2VudCBjb21taXQuCisgKi8KK3ZvaWQgbG9nZnNfd3JpdGVfYW5jaG9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgbG9nZnNfYXJlYSAqYXJlYSA9IHN1cGVyLT5zX2pvdXJuYWxfYXJlYTsKKwlpbnQgaSwgZXJyOworCisJaWYgKCEoc3VwZXItPnNfZmxhZ3MgJiBMT0dGU19TQl9GTEFHX0RJUlRZKSkKKwkJcmV0dXJuOworCXN1cGVyLT5zX2ZsYWdzICY9IH5MT0dGU19TQl9GTEFHX0RJUlRZOworCisJQlVHX09OKHN1cGVyLT5zX2ZsYWdzICYgTE9HRlNfU0JfRkxBR19TSFVURE9XTik7CisJbXV0ZXhfbG9jaygmc3VwZXItPnNfam91cm5hbF9tdXRleCk7CisKKwkvKiBEbyB0aGlzIGZpcnN0IG9yIHN1ZmZlciBjb3JydXB0aW9uICovCisJbG9nZnNfc3luY19zZWdtZW50cyhzYik7CisJYWNjb3VudF9zaGFkb3dzKHNiKTsKKworYWdhaW46CisJc3VwZXItPnNfbm9famUgPSAwOworCWZvcl9lYWNoX2FyZWEoaSkgeworCQlpZiAoIXN1cGVyLT5zX2FyZWFbaV0tPmFfaXNfb3BlbikKKwkJCWNvbnRpbnVlOworCQlzdXBlci0+c19zdW1faW5kZXggPSBpOworCQllcnIgPSBsb2dmc193cml0ZV9qZShzYiwgbG9nZnNfd3JpdGVfYXJlYSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGFnYWluOworCX0KKwllcnIgPSBsb2dmc193cml0ZV9vYmpfYWxpYXNlcyhzYik7CisJaWYgKGVycikKKwkJZ290byBhZ2FpbjsKKwllcnIgPSBsb2dmc193cml0ZV9qZShzYiwgbG9nZnNfd3JpdGVfZXJhc2Vjb3VudCk7CisJaWYgKGVycikKKwkJZ290byBhZ2FpbjsKKwllcnIgPSBsb2dmc193cml0ZV9qZShzYiwgX19sb2dmc193cml0ZV9hbmNob3IpOworCWlmIChlcnIpCisJCWdvdG8gYWdhaW47CisJZXJyID0gbG9nZnNfd3JpdGVfamUoc2IsIGxvZ2ZzX3dyaXRlX2R5bnNiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGFnYWluOworCS8qCisJICogT3JkZXIgaXMgaW1wZXJhdGl2ZS4gIEZpcnN0IHdlIHN5bmMgYWxsIHdyaXRlcywgaW5jbHVkaW5nIHRoZQorCSAqIG5vbi1jb21taXR0ZWQgam91cm5hbCB3cml0ZXMuICBUaGVuIHdlIHdyaXRlIHRoZSBmaW5hbCBjb21taXQgYW5kCisJICogc3luYyB0aGUgY3VycmVudCBqb3VybmFsIHNlZ21lbnQuCisJICogVGhlcmUgaXMgYSB0aGVvcmV0aWNhbCBidWcgaGVyZS4gIFN5bmNpbmcgdGhlIGpvdXJuYWwgc2VnbWVudCB3aWxsCisJICogd3JpdGUgYSBudW1iZXIgb2Ygam91cm5hbCBlbnRyaWVzIGFuZCB0aGUgZmluYWwgY29tbWl0LiAgQWxsIHRoZXNlCisJICogYXJlIHdyaXR0ZW4gaW4gYSBzaW5nbGUgb3BlcmF0aW9uLiAgSWYgdGhlIGRldmljZSBsYXllciB3cml0ZXMgdGhlCisJICogZGF0YSBiYWNrLXRvLWZyb250LCB0aGUgY29tbWl0IHdpbGwgcHJlY2VkZSB0aGUgb3RoZXIgam91cm5hbAorCSAqIGVudHJpZXMsIGxlYXZpbmcgYSByYWNlIHdpbmRvdy4KKwkgKiBUd28gZml4ZXMgYXJlIHBvc3NpYmxlLiAgUHJlZmVycmVkIGlzIHRvIGZpeCB0aGUgZGV2aWNlIGxheWVyIHRvCisJICogZW5zdXJlIHdyaXRlcyBoYXBwZW4gZnJvbnQtdG8tYmFjay4gIEFsdGVybmF0aXZlbHkgd2UgY2FuIGluc2VydAorCSAqIGFub3RoZXIgbG9nZnNfc3luY19hcmVhKCkgc3VwZXItPnNfZGV2b3BzLT5zeW5jKCkgY29tYm8gYmVmb3JlCisJICogd3JpdGluZyB0aGUgY29tbWl0LgorCSAqLworCS8qCisJICogT24gYW5vdGhlciBzdWJqZWN0LCBzdXBlci0+c19kZXZvcHMtPnN5bmMgaXMgdXN1YWxseSBub3QgbmVjZXNzYXJ5LgorCSAqIFVubGVzcyBjYWxsZWQgZnJvbSBzeXNfc3luYyBvciBmcmllbmRzLCBhIGJhcnJpZXIgd291bGQgc3VmZmljZS4KKwkgKi8KKwlzdXBlci0+c19kZXZvcHMtPnN5bmMoc2IpOworCWVyciA9IGxvZ2ZzX3dyaXRlX2plKHNiLCBsb2dmc193cml0ZV9jb21taXQpOworCWlmIChlcnIpCisJCWdvdG8gYWdhaW47CisJbG9nX2pvdXJuYWwoIldyaXRlIGNvbW1pdCB0byAlbGx4XG4iLAorCQkJYmU2NF90b19jcHUoc3VwZXItPnNfamVfYXJyYXlbc3VwZXItPnNfbm9famUgLSAxXSkpOworCWxvZ2ZzX3N5bmNfYXJlYShhcmVhKTsKKwlCVUdfT04oYXJlYS0+YV91c2VkX2J5dGVzICE9IGFyZWEtPmFfd3JpdHRlbl9ieXRlcyk7CisJc3VwZXItPnNfZGV2b3BzLT5zeW5jKHNiKTsKKworCW11dGV4X3VubG9jaygmc3VwZXItPnNfam91cm5hbF9tdXRleCk7CisJcmV0dXJuOworfQorCit2b2lkIGRvX2xvZ2ZzX2pvdXJuYWxfd2xfcGFzcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGxvZ2ZzX2FyZWEgKmFyZWEgPSBzdXBlci0+c19qb3VybmFsX2FyZWE7CisJdTMyIHNlZ25vLCBlYzsKKwlpbnQgaSwgZXJyOworCisJbG9nX2pvdXJuYWwoIkpvdXJuYWwgcmVxdWlyZXMgd2Vhci1sZXZlbGluZy5cbiIpOworCS8qIERyb3Agb2xkIHNlZ21lbnRzICovCisJam91cm5hbF9mb3JfZWFjaChpKQorCQlpZiAoc3VwZXItPnNfam91cm5hbF9zZWdbaV0pIHsKKwkJCWxvZ2ZzX3NldF9zZWdtZW50X3VucmVzZXJ2ZWQoc2IsCisJCQkJCXN1cGVyLT5zX2pvdXJuYWxfc2VnW2ldLAorCQkJCQlzdXBlci0+c19qb3VybmFsX2VjW2ldKTsKKwkJCXN1cGVyLT5zX2pvdXJuYWxfc2VnW2ldID0gMDsKKwkJCXN1cGVyLT5zX2pvdXJuYWxfZWNbaV0gPSAwOworCQl9CisJLyogR2V0IG5ldyBzZWdtZW50cyAqLworCWZvciAoaSA9IDA7IGkgPCBzdXBlci0+c19ub19qb3VybmFsX3NlZ3M7IGkrKykgeworCQlzZWdubyA9IGdldF9iZXN0X2NhbmQoc2IsICZzdXBlci0+c19yZXNlcnZlX2xpc3QsICZlYyk7CisJCXN1cGVyLT5zX2pvdXJuYWxfc2VnW2ldID0gc2Vnbm87CisJCXN1cGVyLT5zX2pvdXJuYWxfZWNbaV0gPSBlYzsKKwkJbG9nZnNfc2V0X3NlZ21lbnRfcmVzZXJ2ZWQoc2IsIHNlZ25vKTsKKwl9CisJLyogTWFudWFsbHkgbW92ZSBqb3VybmFsX2FyZWEgKi8KKwlhcmVhLT5hX3NlZ25vID0gc3VwZXItPnNfam91cm5hbF9zZWdbMF07CisJYXJlYS0+YV9pc19vcGVuID0gMDsKKwlhcmVhLT5hX3VzZWRfYnl0ZXMgPSAwOworCS8qIFdyaXRlIGpvdXJuYWwgKi8KKwlsb2dmc193cml0ZV9hbmNob3Ioc2IpOworCS8qIFdyaXRlIHN1cGVyYmxvY2tzICovCisJZXJyID0gbG9nZnNfd3JpdGVfc2Ioc2IpOworCUJVR19PTihlcnIpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGxvZ2ZzX2FyZWFfb3BzIGpvdXJuYWxfYXJlYV9vcHMgPSB7CisJLmdldF9mcmVlX3NlZ21lbnQJPSBqb3VybmFsX2dldF9mcmVlX3NlZ21lbnQsCisJLmdldF9lcmFzZV9jb3VudAk9IGpvdXJuYWxfZ2V0X2VyYXNlX2NvdW50LAorCS5lcmFzZV9zZWdtZW50CQk9IGpvdXJuYWxfZXJhc2Vfc2VnbWVudCwKK307CisKK2ludCBsb2dmc19pbml0X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXNpemVfdCBidWZzaXplID0gbWF4X3Qoc2l6ZV90LCBzYi0+c19ibG9ja3NpemUsIHN1cGVyLT5zX3dyaXRlc2l6ZSkKKwkJKyBNQVhfSk9VUk5BTF9IRUFERVI7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwltdXRleF9pbml0KCZzdXBlci0+c19qb3VybmFsX211dGV4KTsKKwlidHJlZV9pbml0X21lbXBvb2wzMigmc3VwZXItPnNfcmVzZXJ2ZWRfc2VnbWVudHMsIHN1cGVyLT5zX2J0cmVlX3Bvb2wpOworCisJc3VwZXItPnNfamUgPSBremFsbG9jKGJ1ZnNpemUsIEdGUF9LRVJORUwpOworCWlmICghc3VwZXItPnNfamUpCisJCXJldHVybiByZXQ7CisKKwlzdXBlci0+c19jb21wcmVzc2VkX2plID0ga3phbGxvYyhidWZzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN1cGVyLT5zX2NvbXByZXNzZWRfamUpCisJCXJldHVybiByZXQ7CisKKwlzdXBlci0+c19tYXN0ZXJfaW5vZGUgPSBsb2dmc19uZXdfbWV0YV9pbm9kZShzYiwgTE9HRlNfSU5PX01BU1RFUik7CisJaWYgKElTX0VSUihzdXBlci0+c19tYXN0ZXJfaW5vZGUpKQorCQlyZXR1cm4gUFRSX0VSUihzdXBlci0+c19tYXN0ZXJfaW5vZGUpOworCisJcmV0ID0gbG9nZnNfcmVhZF9qb3VybmFsKHNiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVJTzsKKworCXJlc2VydmVfc2JfYW5kX2pvdXJuYWwoc2IpOworCWxvZ2ZzX2NhbGNfZnJlZShzYik7CisKKwlzdXBlci0+c19qb3VybmFsX2FyZWEtPmFfb3BzID0gJmpvdXJuYWxfYXJlYV9vcHM7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbG9nZnNfY2xlYW51cF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKworCWJ0cmVlX2dyaW1fdmlzaXRvcjMyKCZzdXBlci0+c19yZXNlcnZlZF9zZWdtZW50cywgMCwgTlVMTCk7CisJZGVzdHJveV9tZXRhX2lub2RlKHN1cGVyLT5zX21hc3Rlcl9pbm9kZSk7CisJc3VwZXItPnNfbWFzdGVyX2lub2RlID0gTlVMTDsKKworCWtmcmVlKHN1cGVyLT5zX2NvbXByZXNzZWRfamUpOworCWtmcmVlKHN1cGVyLT5zX2plKTsKK30KZGlmZiAtLWdpdCBhL2ZzL2xvZ2ZzL2xvZ2ZzLmggYi9mcy9sb2dmcy9sb2dmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyOTc3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9sb2dmcy9sb2dmcy5oCkBAIC0wLDAgKzEsNzI0IEBACisvKgorICogZnMvbG9nZnMvbG9nZnMuaAorICoKKyAqIEFzIHNob3VsZCBiZSBvYnZpb3VzIGZvciBMaW51eCBrZXJuZWwgY29kZSwgbGljZW5zZSBpcyBHUEx2MgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA4IEpvZXJuIEVuZ2VsIDxqb2VybkBsb2dmcy5vcmc+CisgKgorICogUHJpdmF0ZSBoZWFkZXIgZm9yIGxvZ2ZzLgorICovCisjaWZuZGVmIEZTX0xPR0ZTX0xPR0ZTX0gKKyNkZWZpbmUgRlNfTE9HRlNfTE9HRlNfSAorCisjdW5kZWYgX19DSEVDS19FTkRJQU5fXworI2RlZmluZSBfX0NIRUNLX0VORElBTl9fCisKKyNpbmNsdWRlIDxsaW51eC9idHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlICJsb2dmc19hYmkuaCIKKworI2RlZmluZSBMT0dGU19ERUJVR19TVVBFUgkoMHgwMDAxKQorI2RlZmluZSBMT0dGU19ERUJVR19TRUdNRU5UCSgweDAwMDIpCisjZGVmaW5lIExPR0ZTX0RFQlVHX0pPVVJOQUwJKDB4MDAwNCkKKyNkZWZpbmUgTE9HRlNfREVCVUdfRElSCQkoMHgwMDA4KQorI2RlZmluZSBMT0dGU19ERUJVR19GSUxFCSgweDAwMTApCisjZGVmaW5lIExPR0ZTX0RFQlVHX0lOT0RFCSgweDAwMjApCisjZGVmaW5lIExPR0ZTX0RFQlVHX1JFQURXUklURQkoMHgwMDQwKQorI2RlZmluZSBMT0dGU19ERUJVR19HQwkJKDB4MDA4MCkKKyNkZWZpbmUgTE9HRlNfREVCVUdfR0NfTk9JU1kJKDB4MDEwMCkKKyNkZWZpbmUgTE9HRlNfREVCVUdfQUxJQVNFUwkoMHgwMjAwKQorI2RlZmluZSBMT0dGU19ERUJVR19CTE9DS01PVkUJKDB4MDQwMCkKKyNkZWZpbmUgTE9HRlNfREVCVUdfQUxMCQkoMHhmZmZmZmZmZikKKworI2RlZmluZSBMT0dGU19ERUJVRwkJKDB4MDEpCisvKgorICogVG8gZW5hYmxlIHNwZWNpZmljIGxvZyBtZXNzYWdlcywgc2ltcGx5IGRlZmluZSBMT0dGU19ERUJVRyB0byBtYXRjaCBhbnkKKyAqIG9yIGFsbCBvZiB0aGUgYWJvdmUuCisgKi8KKyNpZm5kZWYgTE9HRlNfREVCVUcKKyNkZWZpbmUgTE9HRlNfREVCVUcJCSgwKQorI2VuZGlmCisKKyNkZWZpbmUgbG9nX2NvbmQoY29uZCwgZm10LCBhcmcuLi4pIGRvIHsJXAorCWlmIChjb25kKQkJCQlcCisJCXByaW50ayhLRVJOX0RFQlVHIGZtdCwgIyNhcmcpOwlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGxvZ19zdXBlcihmbXQsIGFyZy4uLikgXAorCWxvZ19jb25kKExPR0ZTX0RFQlVHICYgTE9HRlNfREVCVUdfU1VQRVIsIGZtdCwgIyNhcmcpCisjZGVmaW5lIGxvZ19zZWdtZW50KGZtdCwgYXJnLi4uKSBcCisJbG9nX2NvbmQoTE9HRlNfREVCVUcgJiBMT0dGU19ERUJVR19TRUdNRU5ULCBmbXQsICMjYXJnKQorI2RlZmluZSBsb2dfam91cm5hbChmbXQsIGFyZy4uLikgXAorCWxvZ19jb25kKExPR0ZTX0RFQlVHICYgTE9HRlNfREVCVUdfSk9VUk5BTCwgZm10LCAjI2FyZykKKyNkZWZpbmUgbG9nX2RpcihmbXQsIGFyZy4uLikgXAorCWxvZ19jb25kKExPR0ZTX0RFQlVHICYgTE9HRlNfREVCVUdfRElSLCBmbXQsICMjYXJnKQorI2RlZmluZSBsb2dfZmlsZShmbXQsIGFyZy4uLikgXAorCWxvZ19jb25kKExPR0ZTX0RFQlVHICYgTE9HRlNfREVCVUdfRklMRSwgZm10LCAjI2FyZykKKyNkZWZpbmUgbG9nX2lub2RlKGZtdCwgYXJnLi4uKSBcCisJbG9nX2NvbmQoTE9HRlNfREVCVUcgJiBMT0dGU19ERUJVR19JTk9ERSwgZm10LCAjI2FyZykKKyNkZWZpbmUgbG9nX3JlYWR3cml0ZShmbXQsIGFyZy4uLikgXAorCWxvZ19jb25kKExPR0ZTX0RFQlVHICYgTE9HRlNfREVCVUdfUkVBRFdSSVRFLCBmbXQsICMjYXJnKQorI2RlZmluZSBsb2dfZ2MoZm10LCBhcmcuLi4pIFwKKwlsb2dfY29uZChMT0dGU19ERUJVRyAmIExPR0ZTX0RFQlVHX0dDLCBmbXQsICMjYXJnKQorI2RlZmluZSBsb2dfZ2Nfbm9pc3koZm10LCBhcmcuLi4pIFwKKwlsb2dfY29uZChMT0dGU19ERUJVRyAmIExPR0ZTX0RFQlVHX0dDX05PSVNZLCBmbXQsICMjYXJnKQorI2RlZmluZSBsb2dfYWxpYXNlcyhmbXQsIGFyZy4uLikgXAorCWxvZ19jb25kKExPR0ZTX0RFQlVHICYgTE9HRlNfREVCVUdfQUxJQVNFUywgZm10LCAjI2FyZykKKyNkZWZpbmUgbG9nX2Jsb2NrbW92ZShmbXQsIGFyZy4uLikgXAorCWxvZ19jb25kKExPR0ZTX0RFQlVHICYgTE9HRlNfREVCVUdfQkxPQ0tNT1ZFLCBmbXQsICMjYXJnKQorCisjZGVmaW5lIFBHX3ByZV9sb2NrZWQJCVBHX293bmVyX3ByaXZfMQorI2RlZmluZSBQYWdlUHJlTG9ja2VkKHBhZ2UpCXRlc3RfYml0KFBHX3ByZV9sb2NrZWQsICYocGFnZSktPmZsYWdzKQorI2RlZmluZSBTZXRQYWdlUHJlTG9ja2VkKHBhZ2UpCXNldF9iaXQoUEdfcHJlX2xvY2tlZCwgJihwYWdlKS0+ZmxhZ3MpCisjZGVmaW5lIENsZWFyUGFnZVByZUxvY2tlZChwYWdlKSBjbGVhcl9iaXQoUEdfcHJlX2xvY2tlZCwgJihwYWdlKS0+ZmxhZ3MpCisKKy8qIEZJWE1FOiBUaGlzIHNob3VsZCByZWFsbHkgYmUgc29tZXdoZXJlIGluIHRoZSA2NGJpdCBhcmVhLiAqLworI2RlZmluZSBMT0dGU19MSU5LX01BWAkJKDE8PDMwKQorCisvKiBSZWFkLW9ubHkgZmlsZXN5c3RlbSAqLworI2RlZmluZSBMT0dGU19TQl9GTEFHX1JPCTB4MDAwMQorI2RlZmluZSBMT0dGU19TQl9GTEFHX0RJUlRZCTB4MDAwMgorI2RlZmluZSBMT0dGU19TQl9GTEFHX09CSl9BTElBUwkweDAwMDQKKyNkZWZpbmUgTE9HRlNfU0JfRkxBR19TSFVURE9XTgkweDAwMDgKKworLyogV3JpdGUgQ29udHJvbCBGbGFncyAqLworI2RlZmluZSBXRl9MT0NLCQkJMHgwMSAvKiB0YWtlIHdyaXRlIGxvY2sgKi8KKyNkZWZpbmUgV0ZfV1JJVEUJCTB4MDIgLyogd3JpdGUgYmxvY2sgKi8KKyNkZWZpbmUgV0ZfREVMRVRFCQkweDA0IC8qIGRlbGV0ZSBvbGQgYmxvY2sgKi8KKwordHlwZWRlZiB1OCBfX2JpdHdpc2UgbGV2ZWxfdDsKK3R5cGVkZWYgdTggX19iaXR3aXNlIGdjX2xldmVsX3Q7CisKKyNkZWZpbmUgTEVWRUwobGV2ZWwpICgoX19mb3JjZSBsZXZlbF90KShsZXZlbCkpCisjZGVmaW5lIEdDX0xFVkVMKGdjX2xldmVsKSAoKF9fZm9yY2UgZ2NfbGV2ZWxfdCkoZ2NfbGV2ZWwpKQorCisjZGVmaW5lIFNVQkxFVkVMKGxldmVsKSAoICh2b2lkKSgobGV2ZWwpID09IExFVkVMKDEpKSwJXAorCQkoX19mb3JjZSBsZXZlbF90KSgoX19mb3JjZSB1OCkobGV2ZWwpIC0gMSkgKQorCisvKioKKyAqIHN0cnVjdCBsb2dmc19hcmVhIC0gYXJlYSBtYW5hZ2VtZW50IGluZm9ybWF0aW9uCisgKgorICogQGFfc2I6CQkJdGhlIHN1cGVyYmxvY2sgdGhpcyBhcmVhIGJlbG9uZ3MgdG8KKyAqIEBhX2lzX29wZW46CQkJMSBpZiB0aGUgYXJlYSBpcyBjdXJyZW50bHkgb3BlbiwgZWxzZSAwCisgKiBAYV9zZWdubzoJCQlzZWdtZW50IG51bWJlciBvZiBhcmVhCisgKiBAYV93cml0dGVuX2J5dGVzOgkJbnVtYmVyIG9mIGJ5dGVzIGFscmVhZHkgd3JpdHRlbiBiYWNrCisgKiBAYV91c2VkX2J5dGVzOgkJbnVtYmVyIG9mIHVzZWQgYnl0ZXMKKyAqIEBhX29wczoJCQlhcmVhIG9wZXJhdGlvbnMgKGVpdGhlciBqb3VybmFsIG9yIG9zdG9yZSkKKyAqIEBhX2VyYXNlX2NvdW50OgkJZXJhc2UgY291bnQKKyAqIEBhX2xldmVsOgkJCUdDIGxldmVsCisgKi8KK3N0cnVjdCBsb2dmc19hcmVhIHsgLyogYSBzZWdtZW50IG9wZW4gZm9yIHdyaXRpbmcgKi8KKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmFfc2I7CisJaW50CWFfaXNfb3BlbjsKKwl1MzIJYV9zZWdubzsKKwl1MzIJYV93cml0dGVuX2J5dGVzOworCXUzMglhX3VzZWRfYnl0ZXM7CisJY29uc3Qgc3RydWN0IGxvZ2ZzX2FyZWFfb3BzICphX29wczsKKwl1MzIJYV9lcmFzZV9jb3VudDsKKwlnY19sZXZlbF90IGFfbGV2ZWw7Cit9OworCisvKioKKyAqIHN0cnVjdCBsb2dmc19hcmVhX29wcyAtIGFyZWEgb3BlcmF0aW9ucworICoKKyAqIEBnZXRfZnJlZV9zZWdtZW50OgkJZmlsbCBhcmVhLT5vZnMgd2l0aCB0aGUgb2Zmc2V0IG9mIGEgZnJlZSBzZWdtZW50CisgKiBAZ2V0X2VyYXNlX2NvdW50OgkJZmlsbCBhcmVhLT5lcmFzZV9jb3VudCAobmVlZHMgYXJlYS0+b2ZzKQorICogQGVyYXNlX3NlZ21lbnQ6CQllcmFzZSBhbmQgc2V0dXAgc2VnbWVudAorICovCitzdHJ1Y3QgbG9nZnNfYXJlYV9vcHMgeworCXZvaWQJKCpnZXRfZnJlZV9zZWdtZW50KShzdHJ1Y3QgbG9nZnNfYXJlYSAqYXJlYSk7CisJdm9pZAkoKmdldF9lcmFzZV9jb3VudCkoc3RydWN0IGxvZ2ZzX2FyZWEgKmFyZWEpOworCWludAkoKmVyYXNlX3NlZ21lbnQpKHN0cnVjdCBsb2dmc19hcmVhICphcmVhKTsKK307CisKKy8qKgorICogc3RydWN0IGxvZ2ZzX2RldmljZV9vcHMgLSBkZXZpY2UgYWNjZXNzIG9wZXJhdGlvbnMKKyAqCisgKiBAcmVhZHBhZ2U6CQkJcmVhZCBvbmUgcGFnZSAobW0gcGFnZSkKKyAqIEB3cml0ZXNlZzoJCQl3cml0ZSBvbmUgc2VnbWVudC4gIG1heSBiZSBhIHBhcnRpYWwgc2VnbWVudAorICogQGVyYXNlOgkJCWVyYXNlIG9uZSBzZWdtZW50CisgKiBAcmVhZDoJCQlyZWFkIGZyb20gdGhlIGRldmljZQorICogQGVyYXNlOgkJCWVyYXNlIHBhcnQgb2YgdGhlIGRldmljZQorICovCitzdHJ1Y3QgbG9nZnNfZGV2aWNlX29wcyB7CisJc3RydWN0IHBhZ2UgKigqZmluZF9maXJzdF9zYikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0ICpvZnMpOworCXN0cnVjdCBwYWdlICooKmZpbmRfbGFzdF9zYikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0ICpvZnMpOworCWludCAoKndyaXRlX3NiKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CisJaW50ICgqcmVhZHBhZ2UpKHZvaWQgKl9zYiwgc3RydWN0IHBhZ2UgKnBhZ2UpOworCXZvaWQgKCp3cml0ZXNlZykoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IG9mcywgc2l6ZV90IGxlbik7CisJaW50ICgqZXJhc2UpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4sCisJCQlpbnQgZW5zdXJlX3dyaXRlKTsKKwl2b2lkICgqc3luYykoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CisJdm9pZCAoKnB1dF9kZXZpY2UpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworfTsKKworLyoqCisgKiBzdHJ1Y3QgY2FuZGlkYXRlX2xpc3QgLSBsaXN0IG9mIHNpbWlsYXIgY2FuZGlkYXRlcworICovCitzdHJ1Y3QgY2FuZGlkYXRlX2xpc3QgeworCXN0cnVjdCByYl9yb290IHJiX3RyZWU7CisJaW50IGNvdW50OworCWludCBtYXhjb3VudDsKKwlpbnQgc29ydF9ieV9lYzsKK307CisKKy8qKgorICogc3RydWN0IGdjX2NhbmRpZGF0ZSAtICJjYW5kaWRhdGUiIHNlZ21lbnQgdG8gYmUgZ2FyYmFnZSBjb2xsZWN0ZWQgbmV4dAorICoKKyAqIEBsaXN0OgkJCWxpc3QgKGVpdGhlciBmcmVlIG9mIGxvdykKKyAqIEBzZWdubzoJCQlzZWdtZW50IG51bWJlcgorICogQHZhbGlkOgkJCW51bWJlciBvZiB2YWxpZCBieXRlcworICogQGVyYXNlX2NvdW50OgkJZXJhc2UgY291bnQgb2Ygc2VnbWVudAorICogQGRpc3Q6CQkJZGlzdGFuY2UgZnJvbSB0cmVlIHJvb3QKKyAqCisgKiBDYW5kaWRhdGVzIGNhbiBiZSBvbiB0d28gbGlzdHMuICBUaGUgZnJlZSBsaXN0IGNvbnRhaW5zIGVsZWN0ZWVzIHJhdGhlcgorICogdGhhbiBjYW5kaWRhdGVzIC0gc2VnbWVudHMgdGhhdCBubyBsb25nZXIgY29udGFpbiBhbnkgdmFsaWQgZGF0YS4gIFRoZQorICogbG93IGxpc3QgY29udGFpbnMgY2FuZGlkYXRlcyB0byBiZSBwaWNrZWQgZm9yIEdDLiAgSXQgc2hvdWxkIGJlIGtlcHQKKyAqIHNob3J0LiAgSXQgaXMgbm90IHJlcXVpcmVkIHRvIGFsd2F5cyBwaWNrIGEgcGVyZmVjdCBjYW5kaWRhdGUuICBJbiB0aGUKKyAqIHdvcnN0IGNhc2UgR0Mgd2lsbCBoYXZlIHRvIG1vdmUgbW9yZSBkYXRhIHRoYW4gYWJzb2x1dGVseSBuZWNlc3NhcnkuCisgKi8KK3N0cnVjdCBnY19jYW5kaWRhdGUgeworCXN0cnVjdCByYl9ub2RlIHJiX25vZGU7CisJc3RydWN0IGNhbmRpZGF0ZV9saXN0ICpsaXN0OworCXUzMglzZWdubzsKKwl1MzIJdmFsaWQ7CisJdTMyCWVyYXNlX2NvdW50OworCXU4CWRpc3Q7Cit9OworCisvKioKKyAqIHN0cnVjdCBsb2dmc19qb3VybmFsX2VudHJ5IC0gdGVtcG9yYXJ5IHN0cnVjdHVyZSB1c2VkIGR1cmluZyBqb3VybmFsIHNjYW4KKyAqCisgKiBAdXNlZDoKKyAqIEB2ZXJzaW9uOgkJCW5vcm1hbGl6ZWQgdmVyc2lvbgorICogQGxlbjoJCQlsZW5ndGgKKyAqIEBvZmZzZXQ6CQkJb2Zmc2V0CisgKi8KK3N0cnVjdCBsb2dmc19qb3VybmFsX2VudHJ5IHsKKwlpbnQgdXNlZDsKKwlzMTYgdmVyc2lvbjsKKwl1MTYgbGVuOworCXUxNiBkYXRhbGVuOworCXU2NCBvZmZzZXQ7Cit9OworCitlbnVtIHRyYW5zYWN0aW9uX3N0YXRlIHsKKwlDUkVBVEVfMSA9IDEsCisJQ1JFQVRFXzIsCisJVU5MSU5LXzEsCisJVU5MSU5LXzIsCisJQ1JPU1NfUkVOQU1FXzEsCisJQ1JPU1NfUkVOQU1FXzIsCisJVEFSR0VUX1JFTkFNRV8xLAorCVRBUkdFVF9SRU5BTUVfMiwKKwlUQVJHRVRfUkVOQU1FXzMKK307CisKKy8qKgorICogc3RydWN0IGxvZ2ZzX3RyYW5zYWN0aW9uIC0gZXNzZW50aWFsIGZpZWxkcyB0byBzdXBwb3J0IGF0b21pYyBkaXJvcHMKKyAqCisgKiBAaW5vOgkJCXRhcmdldCBpbm9kZQorICogQGRpcjoJCQlpbm9kZSBvZiBkaXJlY3RvcnkgY29udGFpbmluZyBkZW50cnkKKyAqIEBwb3M6CQkJcG9zIG9mIGRlbnRyeSBpbiBkaXJlY3RvcnkKKyAqLworc3RydWN0IGxvZ2ZzX3RyYW5zYWN0aW9uIHsKKwllbnVtIHRyYW5zYWN0aW9uX3N0YXRlIHN0YXRlOworCXU2NAkgaW5vOworCXU2NAkgZGlyOworCXU2NAkgcG9zOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbG9nZnNfc2hhZG93IC0gb2xkIGJsb2NrIGluIHRoZSBzaGFkb3cgb2YgYSBub3QteWV0LWNvbW1pdHRlZCBuZXcgb25lCisgKiBAb2xkX29mczoJCQlvZmZzZXQgb2Ygb2xkIGJsb2NrIG9uIG1lZGl1bQorICogQG5ld19vZnM6CQkJb2Zmc2V0IG9mIG5ldyBibG9jayBvbiBtZWRpdW0KKyAqIEBpbm86CQkJaW5vZGUgbnVtYmVyCisgKiBAYml4OgkJCWJsb2NrIGluZGV4CisgKiBAb2xkX2xlbjoJCQlzaXplIG9mIG9sZCBibG9jaywgaW5jbHVkaW5nIGhlYWRlcgorICogQG5ld19sZW46CQkJc2l6ZSBvZiBuZXcgYmxvY2ssIGluY2x1ZGluZyBoZWFkZXIKKyAqIEBsZXZlbDoJCQlibG9jayBsZXZlbAorICovCitzdHJ1Y3QgbG9nZnNfc2hhZG93IHsKKwl1NjQgb2xkX29mczsKKwl1NjQgbmV3X29mczsKKwl1NjQgaW5vOworCXU2NCBiaXg7CisJaW50IG9sZF9sZW47CisJaW50IG5ld19sZW47CisJZ2NfbGV2ZWxfdCBnY19sZXZlbDsKK307CisKKy8qKgorICogc3RydWN0IHNoYWRvd190cmVlCisgKiBAbmV3OgkJCXNoYWRvd3Mgd2hlcmUgb2xkX29mcz09MCwgaW5kZXhlZCBieSBuZXdfb2ZzCisgKiBAb2xkOgkJCXNoYWRvd3Mgd2hlcmUgb2xkX29mcyE9MCwgaW5kZXhlZCBieSBvbGRfb2ZzCisgKi8KK3N0cnVjdCBzaGFkb3dfdHJlZSB7CisJc3RydWN0IGJ0cmVlX2hlYWQ2NCBuZXc7CisJc3RydWN0IGJ0cmVlX2hlYWQ2NCBvbGQ7Cit9OworCitzdHJ1Y3Qgb2JqZWN0X2FsaWFzX2l0ZW0geworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlfX2JlNjQgdmFsOworCWludCBjaGlsZF9ubzsKK307CisKKy8qKgorICogc3RydWN0IGxvZ2ZzX2Jsb2NrIC0gY29udGFpbnMgYW55IGJsb2NrIHN0YXRlCisgKiBAdHlwZToJCQlpbmRpcmVjdCBibG9jayBvciBpbm9kZQorICogQGZ1bGw6CQkJbnVtYmVyIG9mIGZ1bGx5IHBvcHVsYXRlZCBjaGlsZHJlbgorICogQHBhcnRpYWw6CQkJbnVtYmVyIG9mIHBhcnRpYWxseSBwb3B1bGF0ZWQgY2hpbGRyZW4KKyAqCisgKiBNb3N0IGJsb2NrcyBhcmUgZGlyZWN0bHkgcmVwcmVzZW50ZWQgYnkgcGFnZSBjYWNoZSBwYWdlcy4gIEJ1dCB3aGVuIGEgYmxvY2sKKyAqIGJlY29tZXMgZGlydHksIGlzIHBhcnQgb2YgYSB0cmFuc2FjdGlvbiwgY29udGFpbnMgYWxpYXNlcyBvciBpcyBvdGhlcndpc2UKKyAqIHNwZWNpYWwsIGEgc3RydWN0IGxvZ2ZzX2Jsb2NrIGlzIGFsbG9jYXRlZCB0byB0cmFjayB0aGUgYWRkaXRpb25hbCBzdGF0ZS4KKyAqIElub2RlcyBhcmUgdmVyeSBzaW1pbGFyIHRvIGluZGlyZWN0IGJsb2Nrcywgc28gdGhleSBjYW4gYWxzbyBnZXQgb25lIG9mCisgKiB0aGVzZSBzdHJ1Y3R1cmVzIGFkZGVkIHdoZW4gYXBwcm9wcmlhdGUuCisgKi8KKyNkZWZpbmUgQkxPQ0tfSU5ESVJFQ1QJMQkvKiBJbmRpcmVjdCBibG9jayAqLworI2RlZmluZSBCTE9DS19JTk9ERQkyCS8qIElub2RlICovCitzdHJ1Y3QgbG9nZnNfYmxvY2tfb3BzOworc3RydWN0IGxvZ2ZzX2Jsb2NrIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGFsaWFzX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBpdGVtX2xpc3Q7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKKwl1NjQgaW5vOworCXU2NCBiaXg7CisJbGV2ZWxfdCBsZXZlbDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBsb2dmc190cmFuc2FjdGlvbiAqdGE7CisJdW5zaWduZWQgbG9uZyBhbGlhc19tYXBbTE9HRlNfQkxPQ0tfRkFDVE9SIC8gQklUU19QRVJfTE9OR107CisJc3RydWN0IGxvZ2ZzX2Jsb2NrX29wcyAqb3BzOworCWludCBmdWxsOworCWludCBwYXJ0aWFsOworCWludCByZXNlcnZlZF9ieXRlczsKK307CisKK3R5cGVkZWYgaW50IHdyaXRlX2FsaWFzX3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IGlubywgdTY0IGJpeCwKKwkJbGV2ZWxfdCBsZXZlbCwgaW50IGNoaWxkX25vLCBfX2JlNjQgdmFsKTsKK3N0cnVjdCBsb2dmc19ibG9ja19vcHMgeworCXZvaWQJKCp3cml0ZV9ibG9jaykoc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jayk7CisJZ2NfbGV2ZWxfdAkoKmJsb2NrX2xldmVsKShzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrKTsKKwl2b2lkCSgqZnJlZV9ibG9jaykoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGxvZ2ZzX2Jsb2NrKmJsb2NrKTsKKwlpbnQJKCp3cml0ZV9hbGlhcykoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCXN0cnVjdCBsb2dmc19ibG9jayAqYmxvY2ssCisJCQl3cml0ZV9hbGlhc190ICp3cml0ZV9vbmVfYWxpYXMpOworfTsKKworc3RydWN0IGxvZ2ZzX3N1cGVyIHsKKwlzdHJ1Y3QgbXRkX2luZm8gKnNfbXRkOwkJCS8qIHVuZGVybHlpbmcgZGV2aWNlICovCisJc3RydWN0IGJsb2NrX2RldmljZSAqc19iZGV2OwkJLyogdW5kZXJseWluZyBkZXZpY2UgKi8KKwljb25zdCBzdHJ1Y3QgbG9nZnNfZGV2aWNlX29wcyAqc19kZXZvcHM7LyogZGV2aWNlIGFjY2VzcyAqLworCXN0cnVjdCBpbm9kZQkqc19tYXN0ZXJfaW5vZGU7CS8qIGlub2RlIGZpbGUgKi8KKwlzdHJ1Y3QgaW5vZGUJKnNfc2VnZmlsZV9pbm9kZTsJLyogc2VnbWVudCBmaWxlICovCisJc3RydWN0IGlub2RlICpzX21hcHBpbmdfaW5vZGU7CQkvKiBkZXZpY2UgbWFwcGluZyAqLworCWF0b21pY190IHNfcGVuZGluZ193cml0ZXM7CQkvKiBvdXRzdGFudGluZyBiaW9zICovCisJbG9uZwkgc19mbGFnczsKKwltZW1wb29sX3QgKnNfYnRyZWVfcG9vbDsJCS8qIGZvciBidHJlZSBub2RlcyAqLworCW1lbXBvb2xfdCAqc19hbGlhc19wb29sOwkJLyogYWxpYXNlcyBpbiBzZWdtZW50LmMgKi8KKwl1NjQJIHNfZmVhdHVyZV9pbmNvbXBhdDsKKwl1NjQJIHNfZmVhdHVyZV9yb19jb21wYXQ7CisJdTY0CSBzX2ZlYXR1cmVfY29tcGF0OworCXU2NAkgc19mZWF0dXJlX2ZsYWdzOworCXU2NAkgc19zYl9vZnNbMl07CisJc3RydWN0IHBhZ2UgKnNfZXJhc2VfcGFnZTsJCS8qIGZvciBkZXZfYmRldi5jICovCisJLyogYWxpYXMuYyBmaWVsZHMgKi8KKwlzdHJ1Y3QgYnRyZWVfaGVhZDMyIHNfc2VnbWVudF9hbGlhczsJLyogcmVtYXBwZWQgc2VnbWVudHMgKi8KKwlpbnQJIHNfbm9fb2JqZWN0X2FsaWFzZXM7CisJc3RydWN0IGxpc3RfaGVhZCBzX29iamVjdF9hbGlhczsJLyogcmVtYXBwZWQgb2JqZWN0cyAqLworCXN0cnVjdCBidHJlZV9oZWFkMTI4IHNfb2JqZWN0X2FsaWFzX3RyZWU7IC8qIHJlbWFwcGVkIG9iamVjdHMgKi8KKwlzdHJ1Y3QgbXV0ZXggc19vYmplY3RfYWxpYXNfbXV0ZXg7CisJLyogZGlyLmMgZmllbGRzICovCisJc3RydWN0IG11dGV4IHNfZGlyb3BfbXV0ZXg7CQkvKiBmb3IgY3JlYXQvdW5saW5rL3JlbmFtZSAqLworCXU2NAkgc192aWN0aW1faW5vOwkJCS8qIHVzZWQgZm9yIGF0b21pYyBkaXItb3BzICovCisJdTY0CSBzX3JlbmFtZV9kaXI7CQkJLyogc291cmNlIGRpcmVjdG9yeSBpbm8gKi8KKwl1NjQJIHNfcmVuYW1lX3BvczsJCQkvKiBwb3NpdGlvbiBvZiBzb3VyY2UgZGQgKi8KKwkvKiBnYy5jIGZpZWxkcyAqLworCWxvbmcJIHNfc2Vnc2l6ZTsJCQkvKiBzaXplIG9mIGEgc2VnbWVudCAqLworCWludAkgc19zZWdzaGlmdDsJCQkvKiBsb2cyIG9mIHNlZ21lbnQgc2l6ZSAqLworCWxvbmcJIHNfc2VnbWFzazsJCQkvKiAxIDw8IHNfc2Vnc2hpZnQgLSAxICovCisJbG9uZwkgc19ub19zZWdzOwkJCS8qIHNlZ21lbnRzIG9uIGRldmljZSAqLworCWxvbmcJIHNfbm9fam91cm5hbF9zZWdzOwkJLyogc2VnbWVudHMgdXNlZCBmb3Igam91cm5hbCAqLworCWxvbmcJIHNfbm9fYmxvY2tzOwkJCS8qIGJsb2NrcyBwZXIgc2VnbWVudCAqLworCWxvbmcJIHNfd3JpdGVzaXplOwkJCS8qIG1pbmltdW0gd3JpdGUgc2l6ZSAqLworCWludAkgc193cml0ZXNoaWZ0OwkJCS8qIGxvZzIgb2Ygd3JpdGUgc2l6ZSAqLworCXU2NAkgc19zaXplOwkJCS8qIGZpbGVzeXN0ZW0gc2l6ZSAqLworCXN0cnVjdCBsb2dmc19hcmVhICpzX2FyZWFbTE9HRlNfTk9fQVJFQVNdOwkvKiBvcGVuIHNlZ21lbnQgYXJyYXkgKi8KKwl1NjQJIHNfZ2VjOwkJCQkvKiBnbG9iYWwgZXJhc2UgY291bnQgKi8KKwl1NjQJIHNfd2xfZ2VjX29zdG9yZTsJCS8qIHRpbWUgb2YgbGFzdCB3bCBldmVudCAqLworCXU2NAkgc193bF9nZWNfam91cm5hbDsJCS8qIHRpbWUgb2YgbGFzdCB3bCBldmVudCAqLworCXU2NAkgc19zd2VlcGVyOwkJCS8qIGN1cnJlbnQgc3dlZXBlciBwb3MgKi8KKwl1OAkgc19pZmlsZV9sZXZlbHM7CQkvKiBtYXggbGV2ZWwgb2YgaWZpbGUgKi8KKwl1OAkgc19pYmxvY2tfbGV2ZWxzOwkJLyogbWF4IGxldmVsIG9mIHJlZ3VsYXIgZmlsZXMgKi8KKwl1OAkgc19kYXRhX2xldmVsczsJCQkvKiAjIG9mIHNlZ21lbnRzIHRvIGxlYWYgYmxvY2sqLworCXU4CSBzX3RvdGFsX2xldmVsczsJCS8qIHN1bSBvZiBhYm92ZSB0aHJlZSAqLworCXN0cnVjdCBidHJlZV9oZWFkMzIgc19jYW5kX3RyZWU7CS8qIGFsbCBjYW5kaWRhdGVzICovCisJc3RydWN0IGNhbmRpZGF0ZV9saXN0IHNfZnJlZV9saXN0OwkvKiAxMDAlIGZyZWUgc2VnbWVudHMgKi8KKwlzdHJ1Y3QgY2FuZGlkYXRlX2xpc3Qgc19yZXNlcnZlX2xpc3Q7CS8qIEJhZCBzZWdtZW50IHJlc2VydmUgKi8KKwlzdHJ1Y3QgY2FuZGlkYXRlX2xpc3Qgc19sb3dfbGlzdFtMT0dGU19OT19BUkVBU107LyogZ29vZCBjYW5kaWRhdGVzICovCisJc3RydWN0IGNhbmRpZGF0ZV9saXN0IHNfZWNfbGlzdDsJLyogd2VhciBsZXZlbCBjYW5kaWRhdGVzICovCisJc3RydWN0IGJ0cmVlX2hlYWQzMiBzX3Jlc2VydmVkX3NlZ21lbnRzOy8qIHNiLCBqb3VybmFsLCBiYWQsIGV0Yy4gKi8KKwkvKiBpbm9kZS5jIGZpZWxkcyAqLworCXU2NAkgc19sYXN0X2lubzsJCQkvKiBoaWdoZXN0IGlubyB1c2VkICovCisJbG9uZwkgc19pbm9zX3RpbGxfd3JhcDsKKwl1MzIJIHNfZ2VuZXJhdGlvbjsJCQkvKiBpX2dlbmVyYXRpb24gZm9yIG5ldyBmaWxlcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgc19mcmVlaW5nX2xpc3Q7CS8qIGlub2RlcyBiZWluZyBmcmVlZCAqLworCS8qIGpvdXJuYWwuYyBmaWVsZHMgKi8KKwlzdHJ1Y3QgbXV0ZXggc19qb3VybmFsX211dGV4OworCXZvaWQJKnNfamU7CQkJCS8qIGpvdXJuYWwgZW50cnkgdG8gY29tcHJlc3MgKi8KKwl2b2lkCSpzX2NvbXByZXNzZWRfamU7CQkvKiBibG9jayB0byB3cml0ZSB0byBqb3VybmFsICovCisJdTMyCSBzX2pvdXJuYWxfc2VnW0xPR0ZTX0pPVVJOQUxfU0VHU107IC8qIGpvdXJuYWwgc2VnbWVudHMgKi8KKwl1MzIJIHNfam91cm5hbF9lY1tMT0dGU19KT1VSTkFMX1NFR1NdOyAvKiBqb3VybmFsIGVyYXNlY291bnRzICovCisJdTY0CSBzX2xhc3RfdmVyc2lvbjsKKwlzdHJ1Y3QgbG9nZnNfYXJlYSAqc19qb3VybmFsX2FyZWE7CS8qIG9wZW4gam91cm5hbCBzZWdtZW50ICovCisJX19iZTY0CXNfamVfYXJyYXlbNjRdOworCWludAlzX25vX2plOworCisJaW50CSBzX3N1bV9pbmRleDsJCQkvKiBmb3IgdGhlIDEyIHN1bW1hcmllcyAqLworCXN0cnVjdCBzaGFkb3dfdHJlZSBzX3NoYWRvd190cmVlOworCWludAkgc19qZV9maWxsOwkJCS8qIGluZGV4IG9mIGN1cnJlbnQgamUgKi8KKwkvKiByZWFkd3JpdGUuYyBmaWVsZHMgKi8KKwlzdHJ1Y3QgbXV0ZXggc193cml0ZV9tdXRleDsKKwlpbnQJIHNfbG9ja19jb3VudDsKKwltZW1wb29sX3QgKnNfYmxvY2tfcG9vbDsJCS8qIHN0cnVjdCBsb2dmc19ibG9jayBwb29sICovCisJbWVtcG9vbF90ICpzX3NoYWRvd19wb29sOwkJLyogc3RydWN0IGxvZ2ZzX3NoYWRvdyBwb29sICovCisJLyoKKwkgKiBTcGFjZSBhY2NvdW50aW5nOgorCSAqIC0gc191c2VkX2J5dGVzIHNwZWNpZmllcyBzcGFjZSB1c2VkIHRvIHN0b3JlIHZhbGlkIGRhdGEgb2JqZWN0cy4KKwkgKiAtIHNfZGlydHlfdXNlZF9ieXRlcyBpcyBzcGFjZSB1c2VkIHRvIHN0b3JlIG5vbi1jb21taXR0ZWQgZGF0YQorCSAqICAgb2JqZWN0cy4gIFRob3NlIG9iamVjdHMgaGF2ZSBhbHJlYWR5IGJlZW4gd3JpdHRlbiB0aGVtc2VsdmVzLAorCSAqICAgYnV0IHRoZXkgZG9uJ3QgYmVjb21lIHZhbGlkIHVudGlsIGFsbCBpbmRpcmVjdCBibG9ja3MgdXAgdG8gdGhlCisJICogICBqb3VybmFsIGhhdmUgYmVlbiB3cml0dGVuIGFzIHdlbGwuCisJICogLSBzX2RpcnR5X2ZyZWVfYnl0ZXMgaXMgc3BhY2UgdXNlZCB0byBzdG9yZSB0aGUgb2xkIGNvcHkgb2YgYQorCSAqICAgcmVwbGFjZWQgb2JqZWN0LCBhcyBsb25nIGFzIHRoZSByZXBsYWNlbWVudCBpcyBub24tY29tbWl0dGVkLgorCSAqICAgSW4gb3RoZXIgd29yZHMsIGl0IGlzIHRoZSBhbW91bnQgb2Ygc3BhY2UgZnJlZWQgd2hlbiBhbGwgZGlydHkKKwkgKiAgIGJsb2NrcyBhcmUgd3JpdHRlbiBiYWNrLgorCSAqIC0gc19mcmVlX2J5dGVzIGlzIHRoZSBhbW91bnQgb2YgZnJlZSBzcGFjZSBhdmFpbGFibGUgZm9yIGFueQorCSAqICAgcHVycG9zZS4KKwkgKiAtIHNfcm9vdF9yZXNlcnZlIGlzIHRoZSBhbW91bnQgb2YgZnJlZSBzcGFjZSBhdmFpbGFibGUgb25seSB0bworCSAqICAgdGhlIHJvb3QgdXNlci4gIE5vbi1wcml2aWxlZ2VkIHVzZXJzIGNhbiBubyBsb25nZXIgd3JpdGUgb25jZQorCSAqICAgdGhpcyB3YXRlcm1hcmsgaGFzIGJlZW4gcmVhY2hlZC4KKwkgKiAtIHNfc3BlZWRfcmVzZXJ2ZSBpcyBzcGFjZSB3aGljaCByZW1haW5zIHVudXNlZCB0byBzcGVlZCB1cAorCSAqICAgZ2FyYmFnZSBjb2xsZWN0aW9uIHBlcmZvcm1hbmNlLgorCSAqIC0gc19kaXJ0eV9wYWdlcyBpcyB0aGUgc3BhY2UgcmVzZXJ2ZWQgZm9yIGN1cnJlbnRseSBkaXJ0eSBwYWdlcy4KKwkgKiAgIEl0IGlzIGEgcGVzc2ltaXN0aWMgZXN0aW1hdGUsIHNvIHNvbWUvbW9zdCB3aWxsIGdldCBmcmVlZCBvbgorCSAqICAgcGFnZSB3cml0ZWJhY2suCisJICoKKwkgKiBzX3VzZWRfYnl0ZXMgKyBzX2ZyZWVfYnl0ZXMgKyBzX3NwZWVkX3Jlc2VydmUgPSB0b3RhbCB1c2FibGUgc2l6ZQorCSAqLworCXU2NAkgc19mcmVlX2J5dGVzOworCXU2NAkgc191c2VkX2J5dGVzOworCXU2NAkgc19kaXJ0eV9mcmVlX2J5dGVzOworCXU2NAkgc19kaXJ0eV91c2VkX2J5dGVzOworCXU2NAkgc19yb290X3Jlc2VydmU7CisJdTY0CSBzX3NwZWVkX3Jlc2VydmU7CisJdTY0CSBzX2RpcnR5X3BhZ2VzOworCS8qIEJhZCBibG9jayBoYW5kbGluZzoKKwkgKiAtIHNfYmFkX3NlZ19yZXNlcnZlIGlzIGEgbnVtYmVyIG9mIHNlZ21lbnRzIHVzdWFsbHkga2VwdAorCSAqICAgZnJlZS4gIFdoZW4gZW5jb3VudGVyaW5nIGJhZCBibG9ja3MsIHRoZSBhZmZlY3RlZCBzZWdtZW50J3MgZGF0YQorCSAqICAgaXMgX3RlbXBvcmFyaWx5XyBtb3ZlZCB0byBhIHJlc2VydmVkIHNlZ21lbnQuCisJICogLSBzX2JhZF9zZWdtZW50cyBpcyB0aGUgbnVtYmVyIG9mIGtub3duIGJhZCBzZWdtZW50cy4KKwkgKi8KKwl1MzIJIHNfYmFkX3NlZ19yZXNlcnZlOworCXUzMgkgc19iYWRfc2VnbWVudHM7Cit9OworCisvKioKKyAqIHN0cnVjdCBsb2dmc19pbm9kZSAtIGluLW1lbW9yeSBpbm9kZQorICoKKyAqIEB2ZnNfaW5vZGU6CQkJc3RydWN0IGlub2RlCisgKiBAbGlfZGF0YToJCQlkYXRhIHBvaW50ZXJzCisgKiBAbGlfdXNlZF9ieXRlczoJCW51bWJlciBvZiB1c2VkIGJ5dGVzCisgKiBAbGlfZnJlZWluZ19saXN0OgkJdXNlZCB0byB0cmFjayBpbm9kZXMgY3VycmVudGx5IGJlaW5nIGZyZWVkCisgKiBAbGlfZmxhZ3M6CQkJaW5vZGUgZmxhZ3MKKyAqIEBsaV9yZWZjb3VudDoJCW51bWJlciBvZiBpbnRlcm5hbCAoR0MtaW5kdWNlZCkgcmVmZXJlbmNlcworICovCitzdHJ1Y3QgbG9nZnNfaW5vZGUgeworCXN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7CisJdTY0CWxpX2RhdGFbTE9HRlNfRU1CRURERURfRklFTERTXTsKKwl1NjQJbGlfdXNlZF9ieXRlczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpX2ZyZWVpbmdfbGlzdDsKKwlzdHJ1Y3QgbG9nZnNfYmxvY2sgKmxpX2Jsb2NrOworCXUzMglsaV9mbGFnczsKKwl1OAlsaV9oZWlnaHQ7CisJaW50CWxpX3JlZmNvdW50OworfTsKKworI2RlZmluZSBqb3VybmFsX2Zvcl9lYWNoKF9faSkgZm9yIChfX2kgPSAwOyBfX2kgPCBMT0dGU19KT1VSTkFMX1NFR1M7IF9faSsrKQorI2RlZmluZSBmb3JfZWFjaF9hcmVhKF9faSkgZm9yIChfX2kgPSAwOyBfX2kgPCBMT0dGU19OT19BUkVBUzsgX19pKyspCisjZGVmaW5lIGZvcl9lYWNoX2FyZWFfZG93bihfX2kpIGZvciAoX19pID0gTE9HRlNfTk9fQVJFQVMgLSAxOyBfX2kgPj0gMDsgX19pLS0pCisKKy8qIGNvbXByLmMgKi8KK2ludCBsb2dmc19jb21wcmVzcyh2b2lkICppbiwgdm9pZCAqb3V0LCBzaXplX3QgaW5sZW4sIHNpemVfdCBvdXRsZW4pOworaW50IGxvZ2ZzX3VuY29tcHJlc3Modm9pZCAqaW4sIHZvaWQgKm91dCwgc2l6ZV90IGlubGVuLCBzaXplX3Qgb3V0bGVuKTsKK2ludCBfX2luaXQgbG9nZnNfY29tcHJfaW5pdCh2b2lkKTsKK3ZvaWQgbG9nZnNfY29tcHJfZXhpdCh2b2lkKTsKKworLyogZGV2X2JkZXYuYyAqLworI2lmZGVmIENPTkZJR19CTE9DSworaW50IGxvZ2ZzX2dldF9zYl9iZGV2KHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCBpbnQgZmxhZ3MsCisJCWNvbnN0IGNoYXIgKmRldm5hbWUsIHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBsb2dmc19nZXRfc2JfYmRldihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgaW50IGZsYWdzLAorCQljb25zdCBjaGFyICpkZXZuYW1lLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KKyNlbmRpZgorCisvKiBkZXZfbXRkLmMgKi8KKyNpZmRlZiBDT05GSUdfTVRECitpbnQgbG9nZnNfZ2V0X3NiX210ZChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgaW50IGZsYWdzLAorCQlpbnQgbXRkbnIsIHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBsb2dmc19nZXRfc2JfbXRkKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCBpbnQgZmxhZ3MsCisJCWludCBtdGRuciwgc3RydWN0IHZmc21vdW50ICptbnQpCit7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisjZW5kaWYKKworLyogZGlyLmMgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBsb2dmc19zeW1saW5rX2lvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbG9nZnNfZGlyX2lvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsb2dmc19kaXJfZm9wczsKK2ludCBsb2dmc19yZXBsYXlfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKKworLyogZmlsZS5jICovCitleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbG9nZnNfcmVnX2lvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsb2dmc19yZWdfZm9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGxvZ2ZzX3JlZ19hb3BzOworaW50IGxvZ2ZzX3JlYWRwYWdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CitpbnQgbG9nZnNfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCXVuc2lnbmVkIGxvbmcgYXJnKTsKK2ludCBsb2dmc19mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgZGF0YXN5bmMpOworCisvKiBnYy5jICovCit1MzIgZ2V0X2Jlc3RfY2FuZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgY2FuZGlkYXRlX2xpc3QgKmxpc3QsIHUzMiAqZWMpOwordm9pZCBsb2dmc19nY19wYXNzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworaW50IGxvZ2ZzX2NoZWNrX2FyZWFzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworaW50IGxvZ2ZzX2luaXRfZ2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7Cit2b2lkIGxvZ2ZzX2NsZWFudXBfZ2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CisKKy8qIGlub2RlLmMgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBsb2dmc19zdXBlcl9vcGVyYXRpb25zOworc3RydWN0IGlub2RlICpsb2dmc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGlub190IGlubyk7CitzdHJ1Y3QgaW5vZGUgKmxvZ2ZzX3NhZmVfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbm9fdCBpbm8sIGludCAqY29va2llKTsKK3ZvaWQgbG9nZnNfc2FmZV9pcHV0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBjb29raWUpOworc3RydWN0IGlub2RlICpsb2dmc19uZXdfaW5vZGUoc3RydWN0IGlub2RlICpkaXIsIGludCBtb2RlKTsKK3N0cnVjdCBpbm9kZSAqbG9nZnNfbmV3X21ldGFfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IGlubyk7CitzdHJ1Y3QgaW5vZGUgKmxvZ2ZzX3JlYWRfbWV0YV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgaW5vKTsKK2ludCBsb2dmc19pbml0X2lub2RlX2NhY2hlKHZvaWQpOwordm9pZCBsb2dmc19kZXN0cm95X2lub2RlX2NhY2hlKHZvaWQpOwordm9pZCBkZXN0cm95X21ldGFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7Cit2b2lkIGxvZ2ZzX3NldF9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgdTY0IG5vKTsKKy8qIHRoZXNlIGxvZ2ljYWxseSBiZWxvbmcgaW50byBpbm9kZS5jIGJ1dCBhY3R1YWxseSByZXNpZGUgaW4gcmVhZHdyaXRlLmMgKi8KK2ludCBsb2dmc19yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworaW50IF9fbG9nZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBmbGFncyk7Cit2b2lkIGxvZ2ZzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK3ZvaWQgbG9nZnNfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CisKKy8qIGpvdXJuYWwuYyAqLwordm9pZCBsb2dmc193cml0ZV9hbmNob3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CitpbnQgbG9nZnNfaW5pdF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwordm9pZCBsb2dmc19jbGVhbnVwX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CitpbnQgd3JpdGVfYWxpYXNfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgaW5vLCB1NjQgYml4LAorCQlsZXZlbF90IGxldmVsLCBpbnQgY2hpbGRfbm8sIF9fYmU2NCB2YWwpOwordm9pZCBkb19sb2dmc19qb3VybmFsX3dsX3Bhc3Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CisKKy8qIHJlYWR3cml0ZS5jICovCitwZ29mZl90IGxvZ2ZzX3BhY2tfaW5kZXgodTY0IGJpeCwgbGV2ZWxfdCBsZXZlbCk7Cit2b2lkIGxvZ2ZzX3VucGFja19pbmRleChwZ29mZl90IGluZGV4LCB1NjQgKmJpeCwgbGV2ZWxfdCAqbGV2ZWwpOworaW50IGxvZ2ZzX2lub2RlX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LAorCQlsb2ZmX3QgYml4LCBsb25nIGZsYWdzLCBzdHJ1Y3Qgc2hhZG93X3RyZWUgKnNoYWRvd190cmVlKTsKK2ludCBsb2dmc19yZWFkcGFnZV9ub2xvY2soc3RydWN0IHBhZ2UgKnBhZ2UpOworaW50IGxvZ2ZzX3dyaXRlX2J1ZihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgbG9uZyBmbGFncyk7CitpbnQgbG9nZnNfZGVsZXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsCisJCXN0cnVjdCBzaGFkb3dfdHJlZSAqc2hhZG93X3RyZWUpOworaW50IGxvZ2ZzX3Jld3JpdGVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGJpeCwgdTY0IG9mcywKKwkJZ2NfbGV2ZWxfdCBnY19sZXZlbCwgbG9uZyBmbGFncyk7CitpbnQgbG9nZnNfaXNfdmFsaWRfYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IG9mcywgdTY0IGlubywgdTY0IGJpeCwKKwkJZ2NfbGV2ZWxfdCBnY19sZXZlbCk7CitpbnQgbG9nZnNfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHNpemUpOwordTY0IGxvZ2ZzX3NlZWtfaG9sZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgYml4KTsKK3U2NCBsb2dmc19zZWVrX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGJpeCk7CitpbnQgbG9nZnNfb3Blbl9zZWdmaWxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworaW50IGxvZ2ZzX2luaXRfcncoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7Cit2b2lkIGxvZ2ZzX2NsZWFudXBfcncoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7Cit2b2lkIGxvZ2ZzX2FkZF90cmFuc2FjdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbG9nZnNfdHJhbnNhY3Rpb24gKnRhKTsKK3ZvaWQgbG9nZnNfZGVsX3RyYW5zYWN0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBsb2dmc190cmFuc2FjdGlvbiAqdGEpOwordm9pZCBsb2dmc193cml0ZV9ibG9jayhzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrLCBsb25nIGZsYWdzKTsKK2ludCBsb2dmc193cml0ZV9vYmpfYWxpYXNlc19wYWdlY2FjaGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7Cit2b2lkIGxvZ2ZzX2dldF9zZWdtZW50X2VudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzZWdubywKKwkJc3RydWN0IGxvZ2ZzX3NlZ21lbnRfZW50cnkgKnNlKTsKK3ZvaWQgbG9nZnNfc2V0X3NlZ21lbnRfdXNlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgb2ZzLCBpbnQgaW5jcmVtZW50KTsKK3ZvaWQgbG9nZnNfc2V0X3NlZ21lbnRfZXJhc2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzZWdubywgdTMyIGVjLAorCQlnY19sZXZlbF90IGdjX2xldmVsKTsKK3ZvaWQgbG9nZnNfc2V0X3NlZ21lbnRfcmVzZXJ2ZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlZ25vKTsKK3ZvaWQgbG9nZnNfc2V0X3NlZ21lbnRfdW5yZXNlcnZlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2Vnbm8sIHUzMiBlYyk7CitzdHJ1Y3QgbG9nZnNfYmxvY2sgKl9fYWxsb2NfYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJdTY0IGlubywgdTY0IGJpeCwgbGV2ZWxfdCBsZXZlbCk7Cit2b2lkIF9fZnJlZV9ibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrKTsKK3ZvaWQgYnRyZWVfd3JpdGVfYmxvY2soc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jayk7Cit2b2lkIGluaXRpYWxpemVfYmxvY2tfY291bnRlcnMoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsb2dmc19ibG9jayAqYmxvY2ssCisJCV9fYmU2NCAqYXJyYXksIGludCBwYWdlX2lzX2VtcHR5KTsKK2ludCBsb2dmc19leGlzdF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgYml4KTsKK2ludCBnZXRfcGFnZV9yZXNlcnZlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiBzdHJ1Y3QgbG9nZnNfYmxvY2tfb3BzIGluZGlyZWN0X2Jsb2NrX29wczsKKworLyogc2VnbWVudC5jICovCitpbnQgbG9nZnNfZXJhc2Vfc2VnbWVudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgb2ZzLCBpbnQgZW5zdXJlX2VyYXNlKTsKK2ludCB3YnVmX3JlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IG9mcywgc2l6ZV90IGxlbiwgdm9pZCAqYnVmKTsKK2ludCBsb2dmc19zZWdtZW50X3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UsIHU2NCBvZnMsIHU2NCBiaXgsCisJCWxldmVsX3QgbGV2ZWwpOworaW50IGxvZ2ZzX3NlZ21lbnRfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCXN0cnVjdCBsb2dmc19zaGFkb3cgKnNoYWRvdyk7CitpbnQgbG9nZnNfc2VnbWVudF9kZWxldGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGxvZ2ZzX3NoYWRvdyAqc2hhZG93KTsKK2ludCBsb2dmc19sb2FkX29iamVjdF9hbGlhc2VzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCXN0cnVjdCBsb2dmc19vYmpfYWxpYXMgKm9hLCBpbnQgY291bnQpOwordm9pZCBtb3ZlX3BhZ2VfdG9fYnRyZWUoc3RydWN0IHBhZ2UgKnBhZ2UpOworaW50IGxvZ2ZzX2luaXRfbWFwcGluZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKK3ZvaWQgbG9nZnNfc3luY19hcmVhKHN0cnVjdCBsb2dmc19hcmVhICphcmVhKTsKK3ZvaWQgbG9nZnNfc3luY19zZWdtZW50cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKKworLyogYXJlYSBoYW5kbGluZyAqLworaW50IGxvZ2ZzX2luaXRfYXJlYXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7Cit2b2lkIGxvZ2ZzX2NsZWFudXBfYXJlYXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CitpbnQgbG9nZnNfb3Blbl9hcmVhKHN0cnVjdCBsb2dmc19hcmVhICphcmVhLCBzaXplX3QgYnl0ZXMpOwordm9pZCBfX2xvZ2ZzX2J1Zl93cml0ZShzdHJ1Y3QgbG9nZnNfYXJlYSAqYXJlYSwgdTY0IG9mcywgdm9pZCAqYnVmLCBzaXplX3QgbGVuLAorCQlpbnQgdXNlX2ZpbGxlcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2dmc19idWZfd3JpdGUoc3RydWN0IGxvZ2ZzX2FyZWEgKmFyZWEsIHU2NCBvZnMsCisJCXZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlfX2xvZ2ZzX2J1Zl93cml0ZShhcmVhLCBvZnMsIGJ1ZiwgbGVuLCAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxvZ2ZzX2J1Zl9yZWNvdmVyKHN0cnVjdCBsb2dmc19hcmVhICphcmVhLCB1NjQgb2ZzLAorCQl2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJX19sb2dmc19idWZfd3JpdGUoYXJlYSwgb2ZzLCBidWYsIGxlbiwgMSk7Cit9CisKKy8qIHN1cGVyLmMgKi8KK3N0cnVjdCBwYWdlICplbWVyZ2VuY3lfcmVhZF9iZWdpbihzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleCk7Cit2b2lkIGVtZXJnZW5jeV9yZWFkX2VuZChzdHJ1Y3QgcGFnZSAqcGFnZSk7Cit2b2lkIGxvZ2ZzX2NyYXNoX2R1bXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7Cit2b2lkICptZW1jaHJfaW52KGNvbnN0IHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7CitpbnQgbG9nZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKnN0YXRzKTsKK2ludCBsb2dmc19nZXRfc2JfZGV2aWNlKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCBpbnQgZmxhZ3MsCisJCXN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAorCQljb25zdCBzdHJ1Y3QgbG9nZnNfZGV2aWNlX29wcyAqZGV2b3BzLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCk7CitpbnQgbG9nZnNfY2hlY2tfZHMoc3RydWN0IGxvZ2ZzX2Rpc2tfc3VwZXIgKmRzKTsKK2ludCBsb2dmc193cml0ZV9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbG9nZnNfc3VwZXIgKmxvZ2ZzX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJcmV0dXJuIHNiLT5zX2ZzX2luZm87Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxvZ2ZzX2lub2RlICpsb2dmc19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiBjb250YWluZXJfb2YoaW5vZGUsIHN0cnVjdCBsb2dmc19pbm9kZSwgdmZzX2lub2RlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxvZ2ZzX3NldF9ybyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCWxvZ2ZzX3N1cGVyKHNiKS0+c19mbGFncyB8PSBMT0dGU19TQl9GTEFHX1JPOworfQorCisjZGVmaW5lIExPR0ZTX0JVRyhzYikgZG8gewkJCQkJXAorCXN0cnVjdCBzdXBlcl9ibG9jayAqX19zYiA9IHNiOwkJCQlcCisJbG9nZnNfY3Jhc2hfZHVtcChfX3NiKTsJCQkJCVwKKwlsb2dmc19zdXBlcihfX3NiKS0+c19mbGFncyB8PSBMT0dGU19TQl9GTEFHX1JPOwkJXAorCUJVRygpOwkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIExPR0ZTX0JVR19PTihjb25kaXRpb24sIHNiKSBcCisJZG8geyBpZiAodW5saWtlbHkoY29uZGl0aW9uKSkgTE9HRlNfQlVHKChzYikpOyB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIF9fYmUzMiBsb2dmc19jcmMzMih2b2lkICpkYXRhLCBzaXplX3QgbGVuLCBzaXplX3Qgc2tpcCkKK3sKKwlyZXR1cm4gY3B1X3RvX2JlMzIoY3JjMzIofjAsIGRhdGErc2tpcCwgbGVuLXNraXApKTsKK30KKworc3RhdGljIGlubGluZSB1OCBsb2dmc190eXBlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIChpbm9kZS0+aV9tb2RlID4+IDEyKSAmIDE1OworfQorCitzdGF0aWMgaW5saW5lIHBnb2ZmX3QgbG9nZnNfaW5kZXgoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IHBvcykKK3sKKwlyZXR1cm4gcG9zID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBkZXZfb2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzZWdubywgdTMyIG9mcykKK3sKKwlyZXR1cm4gKCh1NjQpc2Vnbm8gPDwgbG9nZnNfc3VwZXIoc2IpLT5zX3NlZ3NoaWZ0KSArIG9mczsKK30KKworc3RhdGljIGlubGluZSB1MzIgc2VnX25vKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBvZnMpCit7CisJcmV0dXJuIG9mcyA+PiBsb2dmc19zdXBlcihzYiktPnNfc2Vnc2hpZnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHNlZ19vZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IG9mcykKK3sKKwlyZXR1cm4gb2ZzICYgbG9nZnNfc3VwZXIoc2IpLT5zX3NlZ21hc2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IHNlZ19hbGlnbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgb2ZzKQoreworCXJldHVybiBvZnMgJiB+bG9nZnNfc3VwZXIoc2IpLT5zX3NlZ21hc2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxvZ2ZzX2Jsb2NrICpsb2dmc19ibG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gKHZvaWQgKilwYWdlLT5wcml2YXRlOworfQorCitzdGF0aWMgaW5saW5lIGxldmVsX3Qgc2hyaW5rX2xldmVsKGdjX2xldmVsX3QgX19sZXZlbCkKK3sKKwl1OCBsZXZlbCA9IChfX2ZvcmNlIHU4KV9fbGV2ZWw7CisKKwlpZiAobGV2ZWwgPj0gTE9HRlNfTUFYX0xFVkVMUykKKwkJbGV2ZWwgLT0gTE9HRlNfTUFYX0xFVkVMUzsKKwlyZXR1cm4gKF9fZm9yY2UgbGV2ZWxfdClsZXZlbDsKK30KKworc3RhdGljIGlubGluZSBnY19sZXZlbF90IGV4cGFuZF9sZXZlbCh1NjQgaW5vLCBsZXZlbF90IF9fbGV2ZWwpCit7CisJdTggbGV2ZWwgPSAoX19mb3JjZSB1OClfX2xldmVsOworCisJaWYgKGlubyA9PSBMT0dGU19JTk9fTUFTVEVSKSB7CisJCS8qIGlmaWxlIGhhcyBzZXBlcmF0ZSBhcmVhcyAqLworCQlsZXZlbCArPSBMT0dGU19NQVhfTEVWRUxTOworCX0KKwlyZXR1cm4gKF9fZm9yY2UgZ2NfbGV2ZWxfdClsZXZlbDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbG9nZnNfYmxvY2tfc2hpZnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgbGV2ZWxfdCBsZXZlbCkKK3sKKwlsZXZlbCA9IHNocmlua19sZXZlbCgoX19mb3JjZSBnY19sZXZlbF90KWxldmVsKTsKKwlyZXR1cm4gKF9fZm9yY2UgaW50KWxldmVsICogKHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzIC0gMyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IGxvZ2ZzX2Jsb2NrX21hc2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgbGV2ZWxfdCBsZXZlbCkKK3sKKwlyZXR1cm4gfjB1bGwgPDwgbG9nZnNfYmxvY2tfc2hpZnQoc2IsIGxldmVsKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbG9nZnNfYXJlYSAqZ2V0X2FyZWEoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJZ2NfbGV2ZWxfdCBnY19sZXZlbCkKK3sKKwlyZXR1cm4gbG9nZnNfc3VwZXIoc2IpLT5zX2FyZWFbKF9fZm9yY2UgdTgpZ2NfbGV2ZWxdOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2xvZ2ZzL2xvZ2ZzX2FiaS5oIGIvZnMvbG9nZnMvbG9nZnNfYWJpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY3NDcyNQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2xvZ2ZzL2xvZ2ZzX2FiaS5oCkBAIC0wLDAgKzEsNjI5IEBACisvKgorICogZnMvbG9nZnMvbG9nZnNfYWJpLmgKKyAqCisgKiBBcyBzaG91bGQgYmUgb2J2aW91cyBmb3IgTGludXgga2VybmVsIGNvZGUsIGxpY2Vuc2UgaXMgR1BMdjIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCBKb2VybiBFbmdlbCA8am9lcm5AbG9nZnMub3JnPgorICoKKyAqIFB1YmxpYyBoZWFkZXIgZm9yIGxvZ2ZzLgorICovCisjaWZuZGVmIEZTX0xPR0ZTX0xPR0ZTX0FCSV9ICisjZGVmaW5lIEZTX0xPR0ZTX0xPR0ZTX0FCSV9ICisKKy8qIEZvciBvdXQtb2Yta2VybmVsIGNvbXBpbGVzICovCisjaWZuZGVmIEJVSUxEX0JVR19PTgorI2RlZmluZSBCVUlMRF9CVUdfT04oY29uZGl0aW9uKSAvKiovCisjZW5kaWYKKworI2RlZmluZSBTSVpFX0NIRUNLKHR5cGUsIHNpemUpCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfIyN0eXBlKHZvaWQpCQkJCVwKK3sJCQkJCQkJCVwKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCB0eXBlKSAhPSAoc2l6ZSkpOwkJXAorfQorCisvKgorICogVGhyb3VnaG91dCB0aGUgbG9nZnMgY29kZSwgd2UncmUgY29uc3RhbnRseSBkZWFsaW5nIHdpdGggYmxvY2tzIGF0CisgKiB2YXJpb3VzIHBvc2l0aW9ucyBvciBvZmZzZXRzLiAgVG8gcmVtb3ZlIGNvbmZ1c2lvbiwgd2Ugc3RyaWNseQorICogZGlzdGluZ3Vpc2ggYmV0d2VlbiBhICJwb3NpdGlvbiIgLSB0aGUgbG9naWNhbCBwb3NpdGlvbiB3aXRoaW4gYQorICogZmlsZSBhbmQgYW4gIm9mZnNldCIgLSB0aGUgcGh5c2ljYWwgbG9jYXRpb24gd2l0aGluIHRoZSBkZXZpY2UuCisgKgorICogQW55IHVzYWdlIG9mIHRoZSB0ZXJtIG9mZnNldCBmb3IgYSBsb2dpY2FsIGxvY2F0aW9uIG9yIHBvc2l0aW9uIGZvcgorICogYSBwaHlzaWNhbCBvbmUgaXMgYSBidWcgYW5kIHNob3VsZCBnZXQgZml4ZWQuCisgKi8KKworLyoKKyAqIEJsb2NrIGFyZSBhbGxvY2F0ZWQgaW4gb25lIG9mIHNldmVyYWwgc2VnbWVudHMgZGVwZW5kaW5nIG9uIHRoZWlyCisgKiBsZXZlbC4gIFRoZSBmb2xsb3dpbmcgbGV2ZWxzIGFyZSB1c2VkOgorICogIDAJLSByZWd1bGFyIGRhdGEgYmxvY2sKKyAqICAxCS0gaTEgaW5kaXJlY3QgYmxvY2tzCisgKiAgMgktIGkyIGluZGlyZWN0IGJsb2NrcworICogIDMJLSBpMyBpbmRpcmVjdCBibG9ja3MKKyAqICA0CS0gaTQgaW5kaXJlY3QgYmxvY2tzCisgKiAgNQktIGk1IGluZGlyZWN0IGJsb2NrcworICogIDYJLSBpZmlsZSBkYXRhIGJsb2NrcworICogIDcJLSBpZmlsZSBpMSBpbmRpcmVjdCBibG9ja3MKKyAqICA4CS0gaWZpbGUgaTIgaW5kaXJlY3QgYmxvY2tzCisgKiAgOQktIGlmaWxlIGkzIGluZGlyZWN0IGJsb2NrcworICogMTAJLSBpZmlsZSBpNCBpbmRpcmVjdCBibG9ja3MKKyAqIDExCS0gaWZpbGUgaTUgaW5kaXJlY3QgYmxvY2tzCisgKiBQb3RlbnRpYWwgbGV2ZWxzIHRvIGJlIHVzZWQgaW4gdGhlIGZ1dHVyZToKKyAqIDEyCS0gZ2MgcmVjeWNsZWQgYmxvY2tzLCBsb25nLWxpdmVkIGRhdGEKKyAqIDEzCS0gcmVwbGFjZW1lbnQgYmxvY2tzLCBzaG9ydC1saXZlZCBkYXRhCisgKgorICogTGV2ZWxzIDEtMTEgYXJlIG5lY2Vzc2FyeSBmb3Igcm9idXN0IGdjIG9wZXJhdGlvbnMgYW5kIGhlbHAgc2VwZXJhdGUKKyAqIHNob3J0LWxpdmVkIG1ldGFkYXRhIGZyb20gbG9uZ2VyLWxpdmVkIGZpbGUgZGF0YS4gIEluIHRoZSBmdXR1cmUsCisgKiBmaWxlIGRhdGEgc2hvdWxkIGdldCBzZXBlcmF0ZWQgaW50byBzZXZlcmFsIHNlZ21lbnRzIGJhc2VkIG9uIHNpbXBsZQorICogaGV1cmlzdGljcy4gIE9sZCBkYXRhIHJlY3ljbGVkIGR1cmluZyBnYyBvcGVyYXRpb24gaXMgZXhwZWN0ZWQgdG8gYmUKKyAqIGxvbmctbGl2ZWQuICBOZXcgZGF0YSBpcyBvZiB1bmNlcnRhaW4gbGlmZSBleHBlY3RhbmN5LiAgTmV3IGRhdGEKKyAqIHVzZWQgdG8gcmVwbGFjZSBvbGRlciBibG9ja3MgaW4gZXhpc3RpbmcgZmlsZXMgaXMgZXhwZWN0ZWQgdG8gYmUKKyAqIHNob3J0LWxpdmVkLgorICovCisKKworLyogTWFnaWMgbnVtYmVycy4gIDY0Yml0IGZvciBzdXBlcmJsb2NrLCAzMmJpdCBmb3Igc3RhdGZzIGZfdHlwZSAqLworI2RlZmluZSBMT0dGU19NQUdJQwkJMHg3YTNhOGU1Y2I5ZDViZjY3dWxsCisjZGVmaW5lIExPR0ZTX01BR0lDX1UzMgkJMHhjOTdlODE2OHUKKworLyoKKyAqIFZhcmlvdXMgYmxvY2tzaXplIHJlbGF0ZWQgbWFjcm9zLiAgQmxvY2tzaXplIGlzIGN1cnJlbnRseSBmaXhlZCBhdCA0S2lCLgorICogU29vbmVyIG9yIGxhdGVyIHRoYXQgc2hvdWxkIGJlY29tZSBjb25maWd1cmFibGUgYW5kIHRoZSBtYWNyb3MgcmVwbGFjZWQKKyAqIGJ5IHNvbWV0aGluZyBzdXBlcmJsb2NrLWRlcGVuZGVudC4gIFBvaW50ZXJzIGluIGluZGlyZWN0IGJsb2NrcyBhcmUgYW5kCisgKiB3aWxsIHJlbWFpbiA2NGJpdC4KKyAqCisgKiBMT0dGU19CTE9DS1NJWkUJLSBzZWxmLWV4cGxhaW5pbmcKKyAqIExPR0ZTX0JMT0NLX0ZBQ1RPUgktIG51bWJlciBvZiBwb2ludGVycyBwZXIgaW5kaXJlY3QgYmxvY2sKKyAqIExPR0ZTX0JMT0NLX0JJVFMJLSBsb2cyIG9mIExPR0ZTX0JMT0NLX0ZBQ1RPUiwgdXNlZCBmb3Igc2hpZnRzCisgKi8KKyNkZWZpbmUgTE9HRlNfQkxPQ0tTSVpFCQkoNDA5NnVsbCkKKyNkZWZpbmUgTE9HRlNfQkxPQ0tfRkFDVE9SCShMT0dGU19CTE9DS1NJWkUgLyBzaXplb2YodTY0KSkKKyNkZWZpbmUgTE9HRlNfQkxPQ0tfQklUUwkoOSkKKworLyoKKyAqIE51bWJlciBvZiBibG9ja3MgYXQgdmFyaW91cyBsZXZlbHMgb2YgaW5kaXJlY3Rpb24uICBUaGVyZSBhcmUgMTYgZGlyZWN0CisgKiBibG9jayBwb2ludGVycyBwbHVzIGEgc2luZ2xlIGluZGlyZWN0IHBvaW50ZXIuCisgKi8KKyNkZWZpbmUgSTBfQkxPQ0tTCQkoMTYpCisjZGVmaW5lIEkxX0JMT0NLUwkJTE9HRlNfQkxPQ0tfRkFDVE9SCisjZGVmaW5lIEkyX0JMT0NLUwkJKExPR0ZTX0JMT0NLX0ZBQ1RPUiAqIEkxX0JMT0NLUykKKyNkZWZpbmUgSTNfQkxPQ0tTCQkoTE9HRlNfQkxPQ0tfRkFDVE9SICogSTJfQkxPQ0tTKQorI2RlZmluZSBJNF9CTE9DS1MJCShMT0dGU19CTE9DS19GQUNUT1IgKiBJM19CTE9DS1MpCisjZGVmaW5lIEk1X0JMT0NLUwkJKExPR0ZTX0JMT0NLX0ZBQ1RPUiAqIEk0X0JMT0NLUykKKworI2RlZmluZSBJTkRJUkVDVF9JTkRFWAkJSTBfQkxPQ0tTCisjZGVmaW5lIExPR0ZTX0VNQkVEREVEX0ZJRUxEUwkoSTBfQkxPQ0tTICsgMSkKKworLyoKKyAqIFNpemVzIGF0IHdoaWNoIGZpbGVzIHJlcXVpcmUgYW5vdGhlciBsZXZlbCBvZiBpbmRpcmVjdGlvbi4gIEZpbGVzIHNtYWxsZXIKKyAqIHRoYW4gTE9HRlNfRU1CRURERURfU0laRSBjYW4gYmUgY29tcGxldGVseSBzdG9yZWQgaW4gdGhlIGlub2RlIGl0c2VsZiwKKyAqIHNpbWlsYXIgbGlrZSBleHQyIGZhc3Qgc3ltbGlua3MuCisgKgorICogRGF0YSBhdCBhIHBvc2l0aW9uIHNtYWxsZXIgdGhhbiBMT0dGU19JMF9TSVpFIGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlCisgKiBkaXJlY3QgcG9pbnRlcnMsIGVsc2UgdGhyb3VnaCB0aGUgMXggaW5kaXJlY3QgcG9pbnRlciBhbmQgc28gZm9ydGguCisgKi8KKyNkZWZpbmUgTE9HRlNfRU1CRURERURfU0laRQkoTE9HRlNfRU1CRURERURfRklFTERTICogc2l6ZW9mKHU2NCkpCisjZGVmaW5lIExPR0ZTX0kwX1NJWkUJCShJMF9CTE9DS1MgKiBMT0dGU19CTE9DS1NJWkUpCisjZGVmaW5lIExPR0ZTX0kxX1NJWkUJCShJMV9CTE9DS1MgKiBMT0dGU19CTE9DS1NJWkUpCisjZGVmaW5lIExPR0ZTX0kyX1NJWkUJCShJMl9CTE9DS1MgKiBMT0dGU19CTE9DS1NJWkUpCisjZGVmaW5lIExPR0ZTX0kzX1NJWkUJCShJM19CTE9DS1MgKiBMT0dGU19CTE9DS1NJWkUpCisjZGVmaW5lIExPR0ZTX0k0X1NJWkUJCShJNF9CTE9DS1MgKiBMT0dGU19CTE9DS1NJWkUpCisjZGVmaW5lIExPR0ZTX0k1X1NJWkUJCShJNV9CTE9DS1MgKiBMT0dGU19CTE9DS1NJWkUpCisKKy8qCisgKiBFYWNoIGluZGlyZWN0IGJsb2NrIHBvaW50ZXIgbXVzdCBoYXZlIHRoaXMgZmxhZyBzZXQsIGlmIGFsbCBibG9jayBwb2ludGVycworICogYmVoaW5kIGl0IGFyZSBzZXQsIGkuZS4gdGhlcmUgaXMgbm8gaG9sZSBoaWRkZW4gaW4gdGhlIHNoYWRvdyBvZiB0aGlzCisgKiBpbmRpcmVjdCBibG9jayBwb2ludGVyLgorICovCisjZGVmaW5lIExPR0ZTX0ZVTExZX1BPUFVMQVRFRCAoMVVMTCA8PCA2MykKKyNkZWZpbmUgcHVyZV9vZnMob2ZzKSAob2ZzICYgfkxPR0ZTX0ZVTExZX1BPUFVMQVRFRCkKKworLyoKKyAqIExvZ0ZTIG5lZWRzIHRvIHNlcGVyYXRlIGRhdGEgaW50byBsZXZlbHMuICBFYWNoIGxldmVsIGlzIGRlZmluZWQgYXMgdGhlCisgKiBtYXhpbWFsIHBvc3NpYmxlIGRpc3RhbmNlIGZyb20gdGhlIG1hc3RlciBpbm9kZSAoaW5vZGUgb2YgdGhlIGlub2RlIGZpbGUpLgorICogRGF0YSBibG9ja3MgcmVzaWRlIG9uIGxldmVsIDAsIDF4IGluZGlyZWN0IGJsb2NrIG9uIGxldmVsIDEsIGV0Yy4KKyAqIElub2RlcyByZXNpZGUgb24gbGV2ZWwgNiwgaW5kaXJlY3QgYmxvY2tzIGZvciB0aGUgaW5vZGUgZmlsZSBvbiBsZXZlbHMgNy0xMS4KKyAqIFRoaXMgZWZmb3J0IGlzIG5lY2Vzc2FyeSB0byBndWFyYW50ZWUgZ2FyYmFnZSBjb2xsZWN0aW9uIHRvIGFsd2F5cyBtYWtlCisgKiBwcm9ncmVzcy4KKyAqCisgKiBMT0dGU19NQVhfSU5ESVJFQ1QgaXMgdGhlIG1heGltYWwgaW5kaXJlY3Rpb24gdGhyb3VnaCBpbmRpcmVjdCBibG9ja3MsCisgKiBMT0dGU19NQVhfTEVWRUxTIGlzIG9uZSBtb3JlIGZvciB0aGUgYWN0dWFsIGRhdGEgbGV2ZWwgb2YgYSBmaWxlLiAgSXQgaXMKKyAqIHRoZSBtYXhpbWFsIG51bWJlciBvZiBsZXZlbHMgZm9yIG9uZSBmaWxlLgorICogTE9HRlNfTk9fQVJFQVMgaXMgdHdpY2UgdGhhdCwgYXMgdGhlIGlub2RlIGZpbGUgYW5kIHJlZ3VsYXIgZmlsZXMgYXJlCisgKiBlZmZlY3RpdmVseSBzdGFja2VkIG9uIHRvcCBvZiBlYWNoIG90aGVyLgorICovCisjZGVmaW5lIExPR0ZTX01BWF9JTkRJUkVDVAkoNSkKKyNkZWZpbmUgTE9HRlNfTUFYX0xFVkVMUwkoTE9HRlNfTUFYX0lORElSRUNUICsgMSkKKyNkZWZpbmUgTE9HRlNfTk9fQVJFQVMJCSgyICogTE9HRlNfTUFYX0xFVkVMUykKKworLyogTWF4aW11bSBzaXplIG9mIGZpbGVuYW1lcyAqLworI2RlZmluZSBMT0dGU19NQVhfTkFNRUxFTgkoMjU1KQorCisvKiBOdW1iZXIgb2Ygc2VnbWVudHMgaW4gdGhlIHByaW1hcnkgam91cm5hbC4gKi8KKyNkZWZpbmUgTE9HRlNfSk9VUk5BTF9TRUdTCSgxNikKKworLyogTWF4aW11bSBudW1iZXIgb2YgZnJlZS9lcmFzZWQvZXRjLiBzZWdtZW50cyBpbiBqb3VybmFsIGVudHJpZXMgKi8KKyNkZWZpbmUgTUFYX0NBQ0hFRF9TRUdTCQkoNjQpCisKKworLyoKKyAqIExPR0ZTX09CSkVDVF9IRUFERVJTSVpFIGlzIHRoZSBzaXplIG9mIGEgc2luZ2xlIGhlYWRlciBpbiB0aGUgb2JqZWN0IHN0b3JlLAorICogTE9HRlNfTUFYX09CSkVDVFNJWkUgdGhlIHNpemUgb2YgdGhlIGxhcmdlc3QgcG9zc2libGUgb2JqZWN0LCBpbmNsdWRpbmcKKyAqIGl0cyBoZWFkZXIsCisgKiBMT0dGU19TRUdNRU5UX1JFU0VSVkUgaXMgdGhlIGFtb3VudCBvZiBzcGFjZSByZXNlcnZlZCBmb3IgZWFjaCBzZWdtZW50IGZvcgorICogaXRzIHNlZ21lbnQgaGVhZGVyIGFuZCB0aGUgcGFkZGVkIHNwYWNlIGF0IHRoZSBlbmQgd2hlbiBubyBmdXJ0aGVyIG9iamVjdHMKKyAqIGZpdC4KKyAqLworI2RlZmluZSBMT0dGU19PQkpFQ1RfSEVBREVSU0laRQkoMHgxYykKKyNkZWZpbmUgTE9HRlNfU0VHTUVOVF9IRUFERVJTSVpFICgweDE4KQorI2RlZmluZSBMT0dGU19NQVhfT0JKRUNUU0laRQkoTE9HRlNfT0JKRUNUX0hFQURFUlNJWkUgKyBMT0dGU19CTE9DS1NJWkUpCisjZGVmaW5lIExPR0ZTX1NFR01FTlRfUkVTRVJWRQlcCisJKExPR0ZTX1NFR01FTlRfSEVBREVSU0laRSArIExPR0ZTX01BWF9PQkpFQ1RTSVpFIC0gMSkKKworLyoKKyAqIFNlZ21lbnQgdHlwZXM6CisgKiBTRUdfU1VQRVIJLSBEYXRhIG9yIGluZGlyZWN0IGJsb2NrCisgKiBTRUdfSk9VUk5BTAktIElub2RlCisgKiBTRUdfT1NUT1JFCS0gRGVudHJ5CisgKi8KK2VudW0geworCVNFR19TVVBFUgk9IDB4MDEsCisJU0VHX0pPVVJOQUwJPSAweDAyLAorCVNFR19PU1RPUkUJPSAweDAzLAorfTsKKworLyoqCisgKiBzdHJ1Y3QgbG9nZnNfc2VnbWVudF9oZWFkZXIgLSBwZXItc2VnbWVudCBoZWFkZXIgaW4gdGhlIG9zdG9yZQorICoKKyAqIEBjcmM6CQkJY3JjMzIgb2YgaGVhZGVyICh0aGVyZSBpcyBubyBkYXRhKQorICogQHBhZDoJCQl1bnVzZWQsIG11c3QgYmUgMAorICogQHR5cGU6CQkJc2VnbWVudCB0eXBlLCBzZWUgYWJvdmUKKyAqIEBsZXZlbDoJCQlHQyBsZXZlbCBmb3IgYWxsIG9iamVjdHMgaW4gdGhpcyBzZWdtZW50CisgKiBAc2Vnbm86CQkJc2VnbWVudCBudW1iZXIKKyAqIEBlYzoJCQkJZXJhc2UgY291bnQgZm9yIHRoaXMgc2VnbWVudAorICogQGdlYzoJCQlnbG9iYWwgZXJhc2UgY291bnQgYXQgdGltZSBvZiB3cml0aW5nCisgKi8KK3N0cnVjdCBsb2dmc19zZWdtZW50X2hlYWRlciB7CisJX19iZTMyCWNyYzsKKwlfX2JlMTYJcGFkOworCV9fdTgJdHlwZTsKKwlfX3U4CWxldmVsOworCV9fYmUzMglzZWdubzsKKwlfX2JlMzIJZWM7CisJX19iZTY0CWdlYzsKK307CisKK1NJWkVfQ0hFQ0sobG9nZnNfc2VnbWVudF9oZWFkZXIsIExPR0ZTX1NFR01FTlRfSEVBREVSU0laRSk7CisKKyNkZWZpbmUgTE9HRlNfRkVBVFVSRVNfSU5DT01QQVQJCSgwdWxsKQorI2RlZmluZSBMT0dGU19GRUFUVVJFU19ST19DT01QQVQJKDB1bGwpCisjZGVmaW5lIExPR0ZTX0ZFQVRVUkVTX0NPTVBBVAkJKDB1bGwpCisKKy8qKgorICogc3RydWN0IGxvZ2ZzX2Rpc2tfc3VwZXIgLSBvbi1tZWRpdW0gc3VwZXJibG9jaworICoKKyAqIEBkc19tYWdpYzoJCQltYWdpYyBudW1iZXIsIG11c3QgZXF1YWwgTE9HRlNfTUFHSUMKKyAqIEBkc19jcmM6CQkJY3JjMzIgb2Ygc3RydWN0dXJlIHN0YXJ0aW5nIHdpdGggdGhlIG5leHQgZmllbGQKKyAqIEBkc19pZmlsZV9sZXZlbHM6CQltYXhpbXVtIG51bWJlciBvZiBsZXZlbHMgZm9yIGlmaWxlCisgKiBAZHNfaWJsb2NrX2xldmVsczoJCW1heGltdW0gbnVtYmVyIG9mIGxldmVscyBmb3IgcmVndWxhciBmaWxlcworICogQGRzX2RhdGFfbGV2ZWxzOgkJbnVtYmVyIG9mIHNlcGVyYXRlIGxldmVscyBmb3IgZGF0YQorICogQHBhZDA6CQkJcmVzZXJ2ZWQsIG11c3QgYmUgMAorICogQGRzX2ZlYXR1cmVfaW5jb21wYXQ6CWluY29tcGF0aWJsZSBmaWxlc3lzdGVtIGZlYXR1cmVzCisgKiBAZHNfZmVhdHVyZV9yb19jb21wYXQ6CXJlYWQtb25seSBjb21wYXRpYmxlIGZpbGVzeXN0ZW0gZmVhdHVyZXMKKyAqIEBkc19mZWF0dXJlX2NvbXBhdDoJCWNvbXBhdGlibGUgZmlsZXN5c3RlbSBmZWF0dXJlcworICogQGRzX2ZsYWdzOgkJCWZsYWdzCisgKiBAZHNfc2VnbWVudF9zaGlmdDoJCWxvZzIgb2Ygc2VnbWVudCBzaXplCisgKiBAZHNfYmxvY2tfc2hpZnQ6CQlsb2cyIG9mIGJsb2NrIHNpemUKKyAqIEBkc193cml0ZV9zaGlmdDoJCWxvZzIgb2Ygd3JpdGUgc2l6ZQorICogQHBhZDE6CQkJcmVzZXJ2ZWQsIG11c3QgYmUgMAorICogQGRzX2pvdXJuYWxfc2VnOgkJc2VnbWVudHMgdXNlZCBieSBwcmltYXJ5IGpvdXJuYWwKKyAqIEBkc19yb290X3Jlc2VydmU6CQlieXRlcyByZXNlcnZlZCBmb3IgdGhlIHN1cGVydXNlcgorICogQGRzX3NwZWVkX3Jlc2VydmU6CQlieXRlcyByZXNlcnZlZCB0byBzcGVlZCB1cCBHQworICogQGRzX2JhZF9zZWdfcmVzZXJ2ZToJCW51bWJlciBvZiBzZWdtZW50cyByZXNlcnZlZCB0byBoYW5kbGUgYmFkIGJsb2NrcworICogQHBhZDI6CQkJcmVzZXJ2ZWQsIG11c3QgYmUgMAorICogQHBhZDM6CQkJcmVzZXJ2ZWQsIG11c3QgYmUgMAorICoKKyAqIENvbnRhaW5zIG9ubHkgcmVhZC1vbmx5IGZpZWxkcy4gIFJlYWQtd3JpdGUgZmllbGRzIGxpa2UgdGhlIGFtb3VudCBvZiB1c2VkCisgKiBzcGFjZSBpcyB0cmFja2VkIGluIHRoZSBkeW5hbWljIHN1cGVyYmxvY2ssIHdoaWNoIGlzIHN0b3JlZCBpbiB0aGUgam91cm5hbC4KKyAqLworc3RydWN0IGxvZ2ZzX2Rpc2tfc3VwZXIgeworCXN0cnVjdCBsb2dmc19zZWdtZW50X2hlYWRlciBkc19zaDsKKwlfX2JlNjQJZHNfbWFnaWM7CisKKwlfX2JlMzIJZHNfY3JjOworCV9fdTgJZHNfaWZpbGVfbGV2ZWxzOworCV9fdTgJZHNfaWJsb2NrX2xldmVsczsKKwlfX3U4CWRzX2RhdGFfbGV2ZWxzOworCV9fdTgJZHNfc2VnbWVudF9zaGlmdDsKKwlfX3U4CWRzX2Jsb2NrX3NoaWZ0OworCV9fdTgJZHNfd3JpdGVfc2hpZnQ7CisJX191OAlwYWQwWzZdOworCisJX19iZTY0CWRzX2ZpbGVzeXN0ZW1fc2l6ZTsKKwlfX2JlMzIJZHNfc2VnbWVudF9zaXplOworCV9fYmUzMiAgZHNfYmFkX3NlZ19yZXNlcnZlOworCisJX19iZTY0CWRzX2ZlYXR1cmVfaW5jb21wYXQ7CisJX19iZTY0CWRzX2ZlYXR1cmVfcm9fY29tcGF0OworCisJX19iZTY0CWRzX2ZlYXR1cmVfY29tcGF0OworCV9fYmU2NAlkc19mZWF0dXJlX2ZsYWdzOworCisJX19iZTY0CWRzX3Jvb3RfcmVzZXJ2ZTsKKwlfX2JlNjQgIGRzX3NwZWVkX3Jlc2VydmU7CisKKwlfX2JlMzIJZHNfam91cm5hbF9zZWdbTE9HRlNfSk9VUk5BTF9TRUdTXTsKKworCV9fYmU2NAlkc19zdXBlcl9vZnNbMl07CisJX19iZTY0CXBhZDNbOF07Cit9OworCitTSVpFX0NIRUNLKGxvZ2ZzX2Rpc2tfc3VwZXIsIDI1Nik7CisKKy8qCisgKiBPYmplY3QgdHlwZXM6CisgKiBPQkpfQkxPQ0sJLSBEYXRhIG9yIGluZGlyZWN0IGJsb2NrCisgKiBPQkpfSU5PREUJLSBJbm9kZQorICogT0JKX0RFTlRSWQktIERlbnRyeQorICovCitlbnVtIHsKKwlPQkpfQkxPQ0sJPSAweDA0LAorCU9CSl9JTk9ERQk9IDB4MDUsCisJT0JKX0RFTlRSWQk9IDB4MDYsCit9OworCisvKioKKyAqIHN0cnVjdCBsb2dmc19vYmplY3RfaGVhZGVyIC0gcGVyLW9iamVjdCBoZWFkZXIgaW4gdGhlIG9zdG9yZQorICoKKyAqIEBjcmM6CQkJY3JjMzIgb2YgaGVhZGVyLCBleGNsdWRpbmcgZGF0YV9jcmMKKyAqIEBsZW46CQkJbGVuZ3RoIG9mIGRhdGEKKyAqIEB0eXBlOgkJCW9iamVjdCB0eXBlLCBzZWUgYWJvdmUKKyAqIEBjb21wcjoJCQljb21wcmVzc2lvbiB0eXBlCisgKiBAaW5vOgkJCWlub2RlIG51bWJlcgorICogQGJpeDoJCQlibG9jayBpbmRleAorICogQGRhdGFfY3JjOgkJCWNyYzMyIG9mIHBheWxvYWQKKyAqLworc3RydWN0IGxvZ2ZzX29iamVjdF9oZWFkZXIgeworCV9fYmUzMgljcmM7CisJX19iZTE2CWxlbjsKKwlfX3U4CXR5cGU7CisJX191OAljb21wcjsKKwlfX2JlNjQJaW5vOworCV9fYmU2NAliaXg7CisJX19iZTMyCWRhdGFfY3JjOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworU0laRV9DSEVDSyhsb2dmc19vYmplY3RfaGVhZGVyLCBMT0dGU19PQkpFQ1RfSEVBREVSU0laRSk7CisKKy8qCisgKiBSZXNlcnZlZCBpbm9kZSBudW1iZXJzOgorICogTE9HRlNfSU5PX01BU1RFUgktIG1hc3RlciBpbm9kZSAoZm9yIGlub2RlIGZpbGUpCisgKiBMT0dGU19JTk9fUk9PVAktIHJvb3QgZGlyZWN0b3J5CisgKiBMT0dGU19JTk9fU0VHRklMRQktIHBlci1zZWdtZW50IHVzZWQgYnl0ZXMgYW5kIGVyYXNlIGNvdW50CisgKi8KK2VudW0geworCUxPR0ZTX0lOT19NQVBQSU5HCT0gMHgwMCwKKwlMT0dGU19JTk9fTUFTVEVSCT0gMHgwMSwKKwlMT0dGU19JTk9fUk9PVAkJPSAweDAyLAorCUxPR0ZTX0lOT19TRUdGSUxFCT0gMHgwMywKKwlMT0dGU19SRVNFUlZFRF9JTk9TCT0gMHgxMCwKK307CisKKy8qCisgKiBJbm9kZSBmbGFncy4gIEhpZ2ggYml0cyBzaG91bGQgbmV2ZXIgYmUgd3JpdHRlbiB0byB0aGUgbWVkaXVtLiAgVGhleSBhcmUKKyAqIHJlc2VydmVkIGZvciBpbi1tZW1vcnkgdXNhZ2UuCisgKiBMb3cgYml0cyBzaG91bGQgZWl0aGVyIHJlbWFpbiBpbiBzeW5jIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgRlNfKl9GTCBvcgorICogcmV1c2Ugc2xvdHMgdGhhdCBvYnZpb3VzbHkgZG9uJ3QgbWFrZSBzZW5zZSBmb3IgbG9nZnMuCisgKgorICogTE9HRlNfSUZfRElSVFkJSW5vZGUgbXVzdCBiZSB3cml0dGVuIGJhY2sKKyAqIExPR0ZTX0lGX1pPTUJJRQlJbm9kZSBoYXMgYmVlbiBkZWxldGVkCisgKiBMT0dGU19JRl9TVElMTEJPUk4JLUVOT1NQQyBoYXBwZW5lZCB3aGVuIGNyZWF0aW5nIGlub2RlCisgKi8KKyNkZWZpbmUgTE9HRlNfSUZfQ09NUFJFU1NFRAkweDAwMDAwMDA0IC8qID09IEZTX0NPTVBSX0ZMICovCisjZGVmaW5lIExPR0ZTX0lGX0RJUlRZCQkweDIwMDAwMDAwCisjZGVmaW5lIExPR0ZTX0lGX1pPTUJJRQkJMHg0MDAwMDAwMAorI2RlZmluZSBMT0dGU19JRl9TVElMTEJPUk4JMHg4MDAwMDAwMAorCisvKiBGbGFncyBhdmFpbGFibGUgdG8gY2hhdHRyICovCisjZGVmaW5lIExPR0ZTX0ZMX1VTRVJfVklTSUJMRQkoTE9HRlNfSUZfQ09NUFJFU1NFRCkKKyNkZWZpbmUgTE9HRlNfRkxfVVNFUl9NT0RJRklBQkxFIChMT0dGU19JRl9DT01QUkVTU0VEKQorLyogRmxhZ3MgaW5oZXJpdGVkIGZyb20gcGFyZW50IGRpcmVjdG9yeSBvbiBmaWxlL2RpcmVjdG9yeSBjcmVhdGlvbiAqLworI2RlZmluZSBMT0dGU19GTF9JTkhFUklURUQJKExPR0ZTX0lGX0NPTVBSRVNTRUQpCisKKy8qKgorICogc3RydWN0IGxvZ2ZzX2Rpc2tfaW5vZGUgLSBvbi1tZWRpdW0gaW5vZGUKKyAqCisgKiBAZGlfbW9kZToJCQlmaWxlIG1vZGUKKyAqIEBkaV9wYWQ6CQkJcmVzZXJ2ZWQsIG11c3QgYmUgMAorICogQGRpX2ZsYWdzOgkJCWlub2RlIGZsYWdzLCBzZWUgYWJvdmUKKyAqIEBkaV91aWQ6CQkJdXNlciBpZAorICogQGRpX2dpZDoJCQlncm91cCBpZAorICogQGRpX2N0aW1lOgkJCWNoYW5nZSB0aW1lCisgKiBAZGlfbXRpbWU6CQkJbW9kaWZ5IHRpbWUKKyAqIEBkaV9yZWZjb3VudDoJCXJlZmVyZW5jZSBjb3VudCAoYWthIG5saW5rIG9yIGxpbmsgY291bnQpCisgKiBAZGlfZ2VuZXJhdGlvbjoJCWlub2RlIGdlbmVyYXRpb24sIGZvciBuZnMKKyAqIEBkaV91c2VkX2J5dGVzOgkJbnVtYmVyIG9mIGJ5dGVzIHVzZWQKKyAqIEBkaV9zaXplOgkJCWZpbGUgc2l6ZQorICogQGRpX2RhdGE6CQkJZGF0YSBwb2ludGVycworICovCitzdHJ1Y3QgbG9nZnNfZGlza19pbm9kZSB7CisJX19iZTE2CWRpX21vZGU7CisJX191OAlkaV9oZWlnaHQ7CisJX191OAlkaV9wYWQ7CisJX19iZTMyCWRpX2ZsYWdzOworCV9fYmUzMglkaV91aWQ7CisJX19iZTMyCWRpX2dpZDsKKworCV9fYmU2NAlkaV9jdGltZTsKKwlfX2JlNjQJZGlfbXRpbWU7CisKKwlfX2JlNjQJZGlfYXRpbWU7CisJX19iZTMyCWRpX3JlZmNvdW50OworCV9fYmUzMglkaV9nZW5lcmF0aW9uOworCisJX19iZTY0CWRpX3VzZWRfYnl0ZXM7CisJX19iZTY0CWRpX3NpemU7CisKKwlfX2JlNjQJZGlfZGF0YVtMT0dGU19FTUJFRERFRF9GSUVMRFNdOworfTsKKworU0laRV9DSEVDSyhsb2dmc19kaXNrX2lub2RlLCAyMDApOworCisjZGVmaW5lIElOT0RFX1BPSU5URVJfT0ZTIFwKKwkob2Zmc2V0b2Yoc3RydWN0IGxvZ2ZzX2Rpc2tfaW5vZGUsIGRpX2RhdGEpIC8gc2l6ZW9mKF9fYmU2NCkpCisjZGVmaW5lIElOT0RFX1VTRURfT0ZTIFwKKwkob2Zmc2V0b2Yoc3RydWN0IGxvZ2ZzX2Rpc2tfaW5vZGUsIGRpX3VzZWRfYnl0ZXMpIC8gc2l6ZW9mKF9fYmU2NCkpCisjZGVmaW5lIElOT0RFX1NJWkVfT0ZTIFwKKwkob2Zmc2V0b2Yoc3RydWN0IGxvZ2ZzX2Rpc2tfaW5vZGUsIGRpX3NpemUpIC8gc2l6ZW9mKF9fYmU2NCkpCisjZGVmaW5lIElOT0RFX0hFSUdIVF9PRlMJKDApCisKKy8qKgorICogc3RydWN0IGxvZ2ZzX2Rpc2tfZGVudHJ5IC0gb24tbWVkaXVtIGRlbnRyeSBzdHJ1Y3R1cmUKKyAqCisgKiBAaW5vOgkJCWlub2RlIG51bWJlcgorICogQG5hbWVsZW46CQkJbGVuZ3RoIG9mIGZpbGUgbmFtZQorICogQHR5cGU6CQkJZmlsZSB0eXBlLCBpZGVudGljYWwgdG8gYml0cyAxMi4uMTUgb2YgbW9kZQorICogQG5hbWU6CQkJZmlsZSBuYW1lCisgKi8KKy8qIEZJWE1FOiBhZGQgNiBieXRlcyBvZiBwYWRkaW5nIHRvIHJlbW92ZSB0aGUgX19wYWNrZWQgKi8KK3N0cnVjdCBsb2dmc19kaXNrX2RlbnRyeSB7CisJX19iZTY0CWlubzsKKwlfX2JlMTYJbmFtZWxlbjsKKwlfX3U4CXR5cGU7CisJX191OAluYW1lW0xPR0ZTX01BWF9OQU1FTEVOXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK1NJWkVfQ0hFQ0sobG9nZnNfZGlza19kZW50cnksIDI2Nik7CisKKyNkZWZpbmUgUkVTRVJWRUQJCTB4ZmZmZmZmZmYKKyNkZWZpbmUgQkFEU0VHCQkJMHhmZmZmZmZmZgorLyoqCisgKiBzdHJ1Y3QgbG9nZnNfc2VnbWVudF9lbnRyeSAtIHNlZ21lbnQgZmlsZSBlbnRyeQorICoKKyAqIEBlY19sZXZlbDoJCQllcmFzZSBjb3VudCBhbmQgbGV2ZWwKKyAqIEB2YWxpZDoJCQludW1iZXIgb2YgdmFsaWQgYnl0ZXMKKyAqCisgKiBTZWdtZW50IGZpbGUgY29udGFpbnMgb25lIGVudHJ5IGZvciBldmVyeSBzZWdtZW50LiAgZWNfbGV2ZWwgY29udGFpbnMgdGhlCisgKiBlcmFzZWNvdW50IGluIHRoZSB1cHBlciAyOCBiaXRzIGFuZCB0aGUgbGV2ZWwgaW4gdGhlIGxvd2VyIDQgYml0cy4gIEFuCisgKiBlY19sZXZlbCBvZiBCQURTRUcgKC0xKSBpZGVudGlmaWVzIGJhZCBzZWdtZW50cy4gIHZhbGlkIGNvbnRhaW5zIHRoZSBudW1iZXIKKyAqIG9mIHZhbGlkIGJ5dGVzIG9yIFJFU0VSVkVEICgtMSBhZ2FpbikgaWYgdGhlIHNlZ21lbnQgaXMgdXNlZCBmb3IgZWl0aGVyIHRoZQorICogc3VwZXJibG9jayBvciB0aGUgam91cm5hbCwgb3Igd2hlbiB0aGUgc2VnbWVudCBpcyBiYWQuCisgKi8KK3N0cnVjdCBsb2dmc19zZWdtZW50X2VudHJ5IHsKKwlfX2JlMzIJZWNfbGV2ZWw7CisJX19iZTMyCXZhbGlkOworfTsKKworU0laRV9DSEVDSyhsb2dmc19zZWdtZW50X2VudHJ5LCA4KTsKKworLyoqCisgKiBzdHJ1Y3QgbG9nZnNfam91cm5hbF9oZWFkZXIgLSBoZWFkZXIgZm9yIGpvdXJuYWwgZW50cmllcyAoSkVzKQorICoKKyAqIEBoX2NyYzoJCQljcmMzMiBvZiBqb3VybmFsIGVudHJ5CisgKiBAaF9sZW46CQkJbGVuZ3RoIG9mIGNvbXByZXNzZWQgam91cm5hbCBlbnRyeSwKKyAqCQkJCW5vdCBpbmNsdWRpbmcgaGVhZGVyCisgKiBAaF9kYXRhbGVuOgkJCWxlbmd0aCBvZiB1bmNvbXByZXNzZWQgZGF0YQorICogQGhfdHlwZToJCQlKRSB0eXBlCisgKiBAaF9jb21wcjoJCQljb21wcmVzc2lvbiB0eXBlCisgKiBAaF9wYWQ6CQkJcmVzZXJ2ZWQKKyAqLworc3RydWN0IGxvZ2ZzX2pvdXJuYWxfaGVhZGVyIHsKKwlfX2JlMzIJaF9jcmM7CisJX19iZTE2CWhfbGVuOworCV9fYmUxNgloX2RhdGFsZW47CisJX19iZTE2CWhfdHlwZTsKKwlfX3U4CWhfY29tcHI7CisJX191OAloX3BhZFs1XTsKK307CisKK1NJWkVfQ0hFQ0sobG9nZnNfam91cm5hbF9oZWFkZXIsIDE2KTsKKworLyoKKyAqIExpZmUgZXhwZWN0ZW5jeSBvZiBkYXRhLgorICogVklNX0RFRkFVTFQJCS0gZGVmYXVsdCB2aW0KKyAqIFZJTV9TRUdGSUxFCQktIGZvciBzZWdtZW50IGZpbGUgb25seSAtIHZlcnkgc2hvcnQtbGl2aW5nCisgKiBWSU1fR0MJCS0gR0MnZCBkYXRhIC0gbGlrZWx5IGxvbmctbGl2aW5nCisgKi8KK2VudW0gbG9nZnNfdmltIHsKKwlWSU1fREVGQVVMVAk9IDAsCisJVklNX1NFR0ZJTEUJPSAxLAorfTsKKworLyoqCisgKiBzdHJ1Y3QgbG9nZnNfamVfYXJlYSAtIHdidWYgaGVhZGVyCisgKgorICogQHNlZ25vOgkJCXNlZ21lbnQgbnVtYmVyIG9mIGFyZWEKKyAqIEB1c2VkX2J5dGVzOgkJCW51bWJlciBvZiBieXRlcyBhbHJlYWR5IHVzZWQKKyAqIEBnY19sZXZlbDoJCQlHQyBsZXZlbAorICogQHZpbToJCQlsaWZlIGV4cGVjdGFuY3kgb2YgZGF0YQorICoKKyAqICJBcmVhcyIgYXJlIHNlZ21lbnRzIGN1cnJlbnRseSBiZWluZyB1c2VkIGZvciB3cml0aW5nLiAgVGhlcmUgaXMgYXQgbGVhc3QKKyAqIG9uZSBhcmVhIHBlciBHQyBsZXZlbC4gIFNldmVyYWwgbWF5IGJlIHVzZWQgdG8gc2VwZXJhdGUgbG9uZy1saXZpbmcgZnJvbQorICogc2hvcnQtbGl2aW5nIGRhdGEuICBJZiBhbiBhcmVhIHdpdGggdW5rbm93biB2aW0gaXMgZW5jb3VudGVyZWQsIGl0IGNhbgorICogc2ltcGx5IGJlIGNsb3NlZC4KKyAqIFRoZSB3cml0ZSBidWZmZXIgaW1tZWRpYXRlbHkgZm9sbG93IHRoaXMgaGVhZGVyLgorICovCitzdHJ1Y3QgbG9nZnNfamVfYXJlYSB7CisJX19iZTMyCXNlZ25vOworCV9fYmUzMgl1c2VkX2J5dGVzOworCV9fdTgJZ2NfbGV2ZWw7CisJX191OAl2aW07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitTSVpFX0NIRUNLKGxvZ2ZzX2plX2FyZWEsIDEwKTsKKworI2RlZmluZSBNQVhfSk9VUk5BTF9IRUFERVIgXAorCShzaXplb2Yoc3RydWN0IGxvZ2ZzX2pvdXJuYWxfaGVhZGVyKSArIHNpemVvZihzdHJ1Y3QgbG9nZnNfamVfYXJlYSkpCisKKy8qKgorICogc3RydWN0IGxvZ2ZzX2plX2R5bnNiIC0gZHluYW1pYyBzdXBlcmJsb2NrCisgKgorICogQGRzX2dlYzoJCQlnbG9iYWwgZXJhc2UgY291bnQKKyAqIEBkc19zd2VlcGVyOgkJCWN1cnJlbnQgcG9zaXRpb24gb2YgR0MgInN3ZWVwZXIiCisgKiBAZHNfcmVuYW1lX2RpcjoJCXNvdXJjZSBkaXJlY3RvcnkgaW5vIChzZWUgZGlyLmMgZG9jdW1lbnRhdGlvbikKKyAqIEBkc19yZW5hbWVfcG9zOgkJcG9zaXRpb24gb2Ygc291cmNlIGRkIChzZWUgZGlyLmMgZG9jdW1lbnRhdGlvbikKKyAqIEBkc192aWN0aW1faW5vOgkJdmljdGltcyBvZiBpbmNvbXBsZXRlIGRpciBvcGVyYXRpb24gKHNlZSBkaXIuYykKKyAqIEBkc192aWN0aW1faW5vOgkJcGFyZW50IGlub2RlIG9mIHZpY3RpbSAoc2VlIGRpci5jKQorICogQGRzX3VzZWRfYnl0ZXM6CQludW1iZXIgb2YgdXNlZCBieXRlcworICovCitzdHJ1Y3QgbG9nZnNfamVfZHluc2IgeworCV9fYmU2NAlkc19nZWM7CisJX19iZTY0CWRzX3N3ZWVwZXI7CisKKwlfX2JlNjQJZHNfcmVuYW1lX2RpcjsKKwlfX2JlNjQJZHNfcmVuYW1lX3BvczsKKworCV9fYmU2NAlkc192aWN0aW1faW5vOworCV9fYmU2NAlkc192aWN0aW1fcGFyZW50OyAvKiBYWFggKi8KKworCV9fYmU2NAlkc191c2VkX2J5dGVzOworCV9fYmUzMglkc19nZW5lcmF0aW9uOworCV9fYmUzMglwYWQ7Cit9OworCitTSVpFX0NIRUNLKGxvZ2ZzX2plX2R5bnNiLCA2NCk7CisKKy8qKgorICogc3RydWN0IGxvZ2ZzX2plX2FuY2hvciAtIGFuY2hvciBvZiBmaWxlc3lzdGVtIHRyZWUsIGFrYSBtYXN0ZXIgaW5vZGUKKyAqCisgKiBAZGFfc2l6ZToJCQlzaXplIG9mIGlub2RlIGZpbGUKKyAqIEBkYV9sYXN0X2lubzoJCWxhc3QgY3JlYXRlZCBpbm9kZQorICogQGRhX3VzZWRfYnl0ZXM6CQludW1iZXIgb2YgYnl0ZXMgdXNlZAorICogQGRhX2RhdGE6CQkJZGF0YSBwb2ludGVycworICovCitzdHJ1Y3QgbG9nZnNfamVfYW5jaG9yIHsKKwlfX2JlNjQJZGFfc2l6ZTsKKwlfX2JlNjQJZGFfbGFzdF9pbm87CisKKwlfX2JlNjQJZGFfdXNlZF9ieXRlczsKKwl1OAlkYV9oZWlnaHQ7CisJdTgJcGFkWzddOworCisJX19iZTY0CWRhX2RhdGFbTE9HRlNfRU1CRURERURfRklFTERTXTsKK307CisKK1NJWkVfQ0hFQ0sobG9nZnNfamVfYW5jaG9yLCAxNjgpOworCisvKioKKyAqIHN0cnVjdCBsb2dmc19qZV9zcGlsbG91dCAtIHNwaWxsb3V0IGVudHJ5IChmcm9tIDFzdCB0byAybmQgam91cm5hbCkKKyAqCisgKiBAc29fc2VnbWVudDoJCQlzZWdtZW50cyB1c2VkIGZvciAybmQgam91cm5hbAorICoKKyAqIExlbmd0aCBvZiB0aGUgYXJyYXkgaXMgZ2l2ZW4gYnkgaF9sZW4gZmllbGQgaW4gdGhlIGhlYWRlci4KKyAqLworc3RydWN0IGxvZ2ZzX2plX3NwaWxsb3V0IHsKKwlfX2JlNjQJc29fc2VnbWVudFswXTsKK307CisKK1NJWkVfQ0hFQ0sobG9nZnNfamVfc3BpbGxvdXQsIDApOworCisvKioKKyAqIHN0cnVjdCBsb2dmc19qZV9qb3VybmFsX2VjIC0gZXJhc2UgY291bnRzIGZvciBhbGwgam91cm5hbCBzZWdtZW50cworICoKKyAqIEBlYzoJCQkJZXJhc2UgY291bnQKKyAqCisgKiBMZW5ndGggb2YgdGhlIGFycmF5IGlzIGdpdmVuIGJ5IGhfbGVuIGZpZWxkIGluIHRoZSBoZWFkZXIuCisgKi8KK3N0cnVjdCBsb2dmc19qZV9qb3VybmFsX2VjIHsKKwlfX2JlMzIJZWNbMF07Cit9OworCitTSVpFX0NIRUNLKGxvZ2ZzX2plX2pvdXJuYWxfZWMsIDApOworCisvKioKKyAqIHN0cnVjdCBsb2dmc19qZV9mcmVlX3NlZ21lbnRzIC0gbGlzdCBvZiBmcmVlIHNlZ21ldG5zIHdpdGggZXJhc2UgY291bnQKKyAqLworc3RydWN0IGxvZ2ZzX2plX2ZyZWVfc2VnbWVudHMgeworCV9fYmUzMglzZWdubzsKKwlfX2JlMzIJZWM7Cit9OworCitTSVpFX0NIRUNLKGxvZ2ZzX2plX2ZyZWVfc2VnbWVudHMsIDgpOworCisvKioKKyAqIHN0cnVjdCBsb2dmc19zZWdfYWxpYXMgLSBsaXN0IG9mIHNlZ21lbnQgYWxpYXNlcworICovCitzdHJ1Y3QgbG9nZnNfc2VnX2FsaWFzIHsKKwlfX2JlMzIJb2xkX3NlZ25vOworCV9fYmUzMgluZXdfc2Vnbm87Cit9OworCitTSVpFX0NIRUNLKGxvZ2ZzX3NlZ19hbGlhcywgOCk7CisKKy8qKgorICogc3RydWN0IGxvZ2ZzX29ial9hbGlhcyAtIGxpc3Qgb2Ygb2JqZWN0IGFsaWFzZXMKKyAqLworc3RydWN0IGxvZ2ZzX29ial9hbGlhcyB7CisJX19iZTY0CWlubzsKKwlfX2JlNjQJYml4OworCV9fYmU2NAl2YWw7CisJdTgJbGV2ZWw7CisJdTgJcGFkWzVdOworCV9fYmUxNgljaGlsZF9ubzsKK307CisKK1NJWkVfQ0hFQ0sobG9nZnNfb2JqX2FsaWFzLCAzMik7CisKKy8qKgorICogQ29tcHJlc3Npb24gdHlwZXMuCisgKgorICogQ09NUFJfTk9ORQktIHVuY29tcHJlc3NlZAorICogQ09NUFJfWkxJQgktIGNvbXByZXNzZWQgd2l0aCB6bGliCisgKi8KK2VudW0geworCUNPTVBSX05PTkUJPSAwLAorCUNPTVBSX1pMSUIJPSAxLAorfTsKKworLyoKKyAqIEpvdXJuYWwgZW50cmllcyBjb21lIGluIGdyb3VwcyBvZiAxNi4gIEZpcnN0IGdyb3VwIGNvbnRhaW5zIHVuaXF1ZQorICogZW50cmllcywgbmV4dCBncm91cHMgY29udGFpbiBvbmUgZW50cnkgcGVyIGxldmVsCisgKgorICogSkVfRklSU1QJLSBzbWFsbGVzdCBwb3NzaWJsZSBqb3VybmFsIGVudHJ5IG51bWJlcgorICoKKyAqIEpFR19CQVNFCS0gYmFzZSBncm91cCwgY29udGFpbmluZyB1bmlxdWUgZW50cmllcworICogSkVfQ09NTUlUCS0gY29tbWl0IGVudHJ5LCB2YWxpZGF0ZXMgYWxsIHByZXZpb3VzIGVudHJpZXMKKyAqIEpFX0RZTlNCCS0gZHluYW1pYyBzdXBlcmJsb2NrLCBhbnl0aGluZyB0aGF0IG91Z2h0IHRvIGJlIGluIHRoZQorICoJCSAgc3VwZXJibG9jayBidXQgY2Fubm90IGJlY2F1c2UgaXQgaXMgcmVhZC13cml0ZSBkYXRhCisgKiBKRV9BTkNIT1IJLSBhbmNob3IgYWthIG1hc3RlciBpbm9kZSBha2EgaW5vZGUgZmlsZSdzIGlub2RlCisgKiBKRV9FUkFTRUNPVU5UICBlcmFzZWNvdW50cyBmb3IgYWxsIGpvdXJuYWwgc2VnbWVudHMKKyAqIEpFX1NQSUxMT1VUCS0gdW51c2VkCisgKiBKRV9TRUdfQUxJQVMJLSBhbGlhc2VzIHNlZ21lbnRzCisgKiBKRV9BUkVBCS0gYXJlYSBkZXNjcmlwdGlvbgorICoKKyAqIEpFX0xBU1QJLSBsYXJnZXN0IHBvc3NpYmxlIGpvdXJuYWwgZW50cnkgbnVtYmVyCisgKi8KK2VudW0geworCUpFX0ZJUlNUCT0gMHgwMSwKKworCUpFR19CQVNFCT0gMHgwMCwKKwlKRV9DT01NSVQJPSAweDAyLAorCUpFX0RZTlNCCT0gMHgwMywKKwlKRV9BTkNIT1IJPSAweDA0LAorCUpFX0VSQVNFQ09VTlQJPSAweDA1LAorCUpFX1NQSUxMT1VUCT0gMHgwNiwKKwlKRV9PQkpfQUxJQVMJPSAweDBkLAorCUpFX0FSRUEJCT0gMHgwZSwKKworCUpFX0xBU1QJCT0gMHgwZSwKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvbG9nZnMvcmVhZHdyaXRlLmMgYi9mcy9sb2dmcy9yZWFkd3JpdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTIzYjNlCi0tLSAvZGV2L251bGwKKysrIGIvZnMvbG9nZnMvcmVhZHdyaXRlLmMKQEAgLTAsMCArMSwyMjQ2IEBACisvKgorICogZnMvbG9nZnMvcmVhZHdyaXRlLmMKKyAqCisgKiBBcyBzaG91bGQgYmUgb2J2aW91cyBmb3IgTGludXgga2VybmVsIGNvZGUsIGxpY2Vuc2UgaXMgR1BMdjIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCBKb2VybiBFbmdlbCA8am9lcm5AbG9nZnMub3JnPgorICoKKyAqCisgKiBBY3R1YWxseSBjb250YWlucyBmaXZlIHNldHMgb2YgdmVyeSBzaW1pbGFyIGZ1bmN0aW9uczoKKyAqIHJlYWQJCXJlYWQgYmxvY2tzIGZyb20gYSBmaWxlCisgKiBzZWVrX2hvbGUJZmluZCBuZXh0IGhvbGUKKyAqIHNlZWtfZGF0YQlmaW5kIG5leHQgZGF0YSBibG9jaworICogdmFsaWQJY2hlY2sgd2hldGhlciBhIGJsb2NrIHN0aWxsIGJlbG9uZ3MgdG8gYSBmaWxlCisgKiB3cml0ZQl3cml0ZSBibG9ja3MgdG8gYSBmaWxlCisgKiBkZWxldGUJZGVsZXRlIGEgYmxvY2sgKGZvciBkaXJlY3RvcmllcyBhbmQgaWZpbGUpCisgKiByZXdyaXRlCW1vdmUgZXhpc3RpbmcgYmxvY2tzIG9mIGEgZmlsZSB0byBhIG5ldyBsb2NhdGlvbiAoZ2MgaGVscGVyKQorICogdHJ1bmNhdGUJdHJ1bmNhdGUgYSBmaWxlCisgKi8KKyNpbmNsdWRlICJsb2dmcy5oIgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKK3N0YXRpYyB1NjQgYWRqdXN0X2JpeCh1NjQgYml4LCBsZXZlbF90IGxldmVsKQoreworCXN3aXRjaCAobGV2ZWwpIHsKKwljYXNlIDA6CisJCXJldHVybiBiaXg7CisJY2FzZSBMRVZFTCgxKToKKwkJcmV0dXJuIG1heF90KHU2NCwgYml4LCBJMF9CTE9DS1MpOworCWNhc2UgTEVWRUwoMik6CisJCXJldHVybiBtYXhfdCh1NjQsIGJpeCwgSTFfQkxPQ0tTKTsKKwljYXNlIExFVkVMKDMpOgorCQlyZXR1cm4gbWF4X3QodTY0LCBiaXgsIEkyX0JMT0NLUyk7CisJY2FzZSBMRVZFTCg0KToKKwkJcmV0dXJuIG1heF90KHU2NCwgYml4LCBJM19CTE9DS1MpOworCWNhc2UgTEVWRUwoNSk6CisJCXJldHVybiBtYXhfdCh1NjQsIGJpeCwgSTRfQkxPQ0tTKTsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQlyZXR1cm4gYml4OworCX0KK30KKworc3RhdGljIGlubGluZSB1NjQgbWF4Yml4KHU4IGhlaWdodCkKK3sKKwlyZXR1cm4gMVVMTCA8PCAoTE9HRlNfQkxPQ0tfQklUUyAqIGhlaWdodCk7Cit9CisKKy8qKgorICogVGhlIGlub2RlIGFkZHJlc3Mgc3BhY2UgaXMgY3V0IGluIHR3byBoYWx2ZXMuICBMb3dlciBoYWxmIGJlbG9uZ3MgdG8gZGF0YQorICogcGFnZXMsIHVwcGVyIGhhbGYgdG8gaW5kaXJlY3QgYmxvY2tzLiAgSWYgdGhlIGhpZ2ggYml0IChJTkRJUkVDVF9CSVQpIGlzCisgKiBzZXQsIHRoZSBhY3R1YWwgYmxvY2sgaW5kZXggKGJpeCkgYW5kIGxldmVsIGNhbiBiZSBkZXJpdmVkIGZyb20gdGhlIHBhZ2UKKyAqIGluZGV4LgorICoKKyAqIFRoZSBsb3dlc3QgdGhyZWUgYml0cyBvZiB0aGUgYmxvY2sgaW5kZXggYXJlIHNldCB0byAwIGFmdGVyIHBhY2tpbmcgYW5kCisgKiB1bnBhY2tpbmcuICBTaW5jZSB0aGUgbG93ZXN0IG4gYml0cyAoOSBmb3IgNEtpQiBibG9ja3NpemUpIGFyZSBpZ25vcmVkCisgKiBhbnl3YXkgdGhpcyBpcyBoYXJtbGVzcy4KKyAqLworI2RlZmluZSBBUkNIX1NISUZUCShCSVRTX1BFUl9MT05HIC0gMzIpCisjZGVmaW5lIElORElSRUNUX0JJVAkoMHg4MDAwMDAwMFVMIDw8IEFSQ0hfU0hJRlQpCisjZGVmaW5lIExFVkVMX1NISUZUCSgyOCArIEFSQ0hfU0hJRlQpCitzdGF0aWMgaW5saW5lIHBnb2ZmX3QgZmlyc3RfaW5kaXJlY3RfYmxvY2sodm9pZCkKK3sKKwlyZXR1cm4gSU5ESVJFQ1RfQklUIHwgKDFVTEwgPDwgTEVWRUxfU0hJRlQpOworfQorCitwZ29mZl90IGxvZ2ZzX3BhY2tfaW5kZXgodTY0IGJpeCwgbGV2ZWxfdCBsZXZlbCkKK3sKKwlwZ29mZl90IGluZGV4OworCisJQlVHX09OKGJpeCA+PSBJTkRJUkVDVF9CSVQpOworCWlmIChsZXZlbCA9PSAwKQorCQlyZXR1cm4gYml4OworCisJaW5kZXggID0gSU5ESVJFQ1RfQklUOworCWluZGV4IHw9IChfX2ZvcmNlIGxvbmcpbGV2ZWwgPDwgTEVWRUxfU0hJRlQ7CisJaW5kZXggfD0gYml4ID4+ICgoX19mb3JjZSB1OClsZXZlbCAqIExPR0ZTX0JMT0NLX0JJVFMpOworCXJldHVybiBpbmRleDsKK30KKwordm9pZCBsb2dmc191bnBhY2tfaW5kZXgocGdvZmZfdCBpbmRleCwgdTY0ICpiaXgsIGxldmVsX3QgKmxldmVsKQoreworCXU4IF9fbGV2ZWw7CisKKwlpZiAoIShpbmRleCAmIElORElSRUNUX0JJVCkpIHsKKwkJKmJpeCA9IGluZGV4OworCQkqbGV2ZWwgPSAwOworCQlyZXR1cm47CisJfQorCisJX19sZXZlbCA9IChpbmRleCAmIH5JTkRJUkVDVF9CSVQpID4+IExFVkVMX1NISUZUOworCSpsZXZlbCA9IExFVkVMKF9fbGV2ZWwpOworCSpiaXggPSAoaW5kZXggPDwgKF9fbGV2ZWwgKiBMT0dGU19CTE9DS19CSVRTKSkgJiB+SU5ESVJFQ1RfQklUOworCSpiaXggPSBhZGp1c3RfYml4KCpiaXgsICpsZXZlbCk7CisJcmV0dXJuOworfQorI3VuZGVmIEFSQ0hfU0hJRlQKKyN1bmRlZiBJTkRJUkVDVF9CSVQKKyN1bmRlZiBMRVZFTF9TSElGVAorCisvKgorICogVGltZSBpcyBzdG9yZWQgYXMgbmFub3NlY29uZHMgc2luY2UgdGhlIGVwb2NoLgorICovCitzdGF0aWMgc3RydWN0IHRpbWVzcGVjIGJlNjRfdG9fdGltZXNwZWMoX19iZTY0IGJldGltZSkKK3sKKwlyZXR1cm4gbnNfdG9fdGltZXNwZWMoYmU2NF90b19jcHUoYmV0aW1lKSk7Cit9CisKK3N0YXRpYyBfX2JlNjQgdGltZXNwZWNfdG9fYmU2NChzdHJ1Y3QgdGltZXNwZWMgdHNwKQoreworCXJldHVybiBjcHVfdG9fYmU2NCgodTY0KXRzcC50dl9zZWMgKiBOU0VDX1BFUl9TRUMgKyB0c3AudHZfbnNlYyk7Cit9CisKK3N0YXRpYyB2b2lkIGxvZ2ZzX2Rpc2tfdG9faW5vZGUoc3RydWN0IGxvZ2ZzX2Rpc2tfaW5vZGUgKmRpLCBzdHJ1Y3QgaW5vZGUqaW5vZGUpCit7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKwlpbnQgaTsKKworCWlub2RlLT5pX21vZGUJPSBiZTE2X3RvX2NwdShkaS0+ZGlfbW9kZSk7CisJbGktPmxpX2hlaWdodAk9IGRpLT5kaV9oZWlnaHQ7CisJbGktPmxpX2ZsYWdzCT0gYmUzMl90b19jcHUoZGktPmRpX2ZsYWdzKTsKKwlpbm9kZS0+aV91aWQJPSBiZTMyX3RvX2NwdShkaS0+ZGlfdWlkKTsKKwlpbm9kZS0+aV9naWQJPSBiZTMyX3RvX2NwdShkaS0+ZGlfZ2lkKTsKKwlpbm9kZS0+aV9zaXplCT0gYmU2NF90b19jcHUoZGktPmRpX3NpemUpOworCWxvZ2ZzX3NldF9ibG9ja3MoaW5vZGUsIGJlNjRfdG9fY3B1KGRpLT5kaV91c2VkX2J5dGVzKSk7CisJaW5vZGUtPmlfYXRpbWUJPSBiZTY0X3RvX3RpbWVzcGVjKGRpLT5kaV9hdGltZSk7CisJaW5vZGUtPmlfY3RpbWUJPSBiZTY0X3RvX3RpbWVzcGVjKGRpLT5kaV9jdGltZSk7CisJaW5vZGUtPmlfbXRpbWUJPSBiZTY0X3RvX3RpbWVzcGVjKGRpLT5kaV9tdGltZSk7CisJaW5vZGUtPmlfbmxpbmsJPSBiZTMyX3RvX2NwdShkaS0+ZGlfcmVmY291bnQpOworCWlub2RlLT5pX2dlbmVyYXRpb24gPSBiZTMyX3RvX2NwdShkaS0+ZGlfZ2VuZXJhdGlvbik7CisKKwlzd2l0Y2ggKGlub2RlLT5pX21vZGUgJiBTX0lGTVQpIHsKKwljYXNlIFNfSUZTT0NLOgkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNfSUZCTEs6CS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU19JRkNIUjoJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTX0lGSUZPOgorCQlpbm9kZS0+aV9yZGV2ID0gYmU2NF90b19jcHUoZGktPmRpX2RhdGFbMF0pOworCQlicmVhazsKKwljYXNlIFNfSUZESVI6CS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU19JRlJFRzoJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTX0lGTE5LOgorCQlmb3IgKGkgPSAwOyBpIDwgTE9HRlNfRU1CRURERURfRklFTERTOyBpKyspCisJCQlsaS0+bGlfZGF0YVtpXSA9IGJlNjRfdG9fY3B1KGRpLT5kaV9kYXRhW2ldKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBsb2dmc19pbm9kZV90b19kaXNrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBsb2dmc19kaXNrX2lub2RlKmRpKQoreworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGkgPSBsb2dmc19pbm9kZShpbm9kZSk7CisJaW50IGk7CisKKwlkaS0+ZGlfbW9kZQk9IGNwdV90b19iZTE2KGlub2RlLT5pX21vZGUpOworCWRpLT5kaV9oZWlnaHQJPSBsaS0+bGlfaGVpZ2h0OworCWRpLT5kaV9wYWQJPSAwOworCWRpLT5kaV9mbGFncwk9IGNwdV90b19iZTMyKGxpLT5saV9mbGFncyk7CisJZGktPmRpX3VpZAk9IGNwdV90b19iZTMyKGlub2RlLT5pX3VpZCk7CisJZGktPmRpX2dpZAk9IGNwdV90b19iZTMyKGlub2RlLT5pX2dpZCk7CisJZGktPmRpX3NpemUJPSBjcHVfdG9fYmU2NChpX3NpemVfcmVhZChpbm9kZSkpOworCWRpLT5kaV91c2VkX2J5dGVzID0gY3B1X3RvX2JlNjQobGktPmxpX3VzZWRfYnl0ZXMpOworCWRpLT5kaV9hdGltZQk9IHRpbWVzcGVjX3RvX2JlNjQoaW5vZGUtPmlfYXRpbWUpOworCWRpLT5kaV9jdGltZQk9IHRpbWVzcGVjX3RvX2JlNjQoaW5vZGUtPmlfY3RpbWUpOworCWRpLT5kaV9tdGltZQk9IHRpbWVzcGVjX3RvX2JlNjQoaW5vZGUtPmlfbXRpbWUpOworCWRpLT5kaV9yZWZjb3VudAk9IGNwdV90b19iZTMyKGlub2RlLT5pX25saW5rKTsKKwlkaS0+ZGlfZ2VuZXJhdGlvbiA9IGNwdV90b19iZTMyKGlub2RlLT5pX2dlbmVyYXRpb24pOworCisJc3dpdGNoIChpbm9kZS0+aV9tb2RlICYgU19JRk1UKSB7CisJY2FzZSBTX0lGU09DSzoJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTX0lGQkxLOgkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNfSUZDSFI6CS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU19JRklGTzoKKwkJZGktPmRpX2RhdGFbMF0gPSBjcHVfdG9fYmU2NChpbm9kZS0+aV9yZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBTX0lGRElSOgkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNfSUZSRUc6CS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU19JRkxOSzoKKwkJZm9yIChpID0gMDsgaSA8IExPR0ZTX0VNQkVEREVEX0ZJRUxEUzsgaSsrKQorCQkJZGktPmRpX2RhdGFbaV0gPSBjcHVfdG9fYmU2NChsaS0+bGlfZGF0YVtpXSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKworc3RhdGljIHZvaWQgX19sb2dmc19zZXRfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGkgPSBsb2dmc19pbm9kZShpbm9kZSk7CisKKwlpbm9kZS0+aV9ibG9ja3MgPSBVTE9OR19NQVg7CisJaWYgKGxpLT5saV91c2VkX2J5dGVzID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzIDwgVUxPTkdfTUFYKQorCQlpbm9kZS0+aV9ibG9ja3MgPSBBTElHTihsaS0+bGlfdXNlZF9ieXRlcywgNTEyKSA+PiA5OworfQorCit2b2lkIGxvZ2ZzX3NldF9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGJ5dGVzKQoreworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGkgPSBsb2dmc19pbm9kZShpbm9kZSk7CisKKwlsaS0+bGlfdXNlZF9ieXRlcyA9IGJ5dGVzOworCV9fbG9nZnNfc2V0X2Jsb2Nrcyhpbm9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIHByZWxvY2tfcGFnZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IGxvY2spCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKworCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CisJaWYgKGxvY2spIHsKKwkJQlVHX09OKFBhZ2VQcmVMb2NrZWQocGFnZSkpOworCQlTZXRQYWdlUHJlTG9ja2VkKHBhZ2UpOworCX0gZWxzZSB7CisJCS8qIFdlIGFyZSBpbiBHQyBwYXRoLiAqLworCQlpZiAoUGFnZVByZUxvY2tlZChwYWdlKSkKKwkJCXN1cGVyLT5zX2xvY2tfY291bnQrKzsKKwkJZWxzZQorCQkJU2V0UGFnZVByZUxvY2tlZChwYWdlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHByZXVubG9ja19wYWdlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbG9jaykKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCisJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKKwlpZiAobG9jaykKKwkJQ2xlYXJQYWdlUHJlTG9ja2VkKHBhZ2UpOworCWVsc2UgeworCQkvKiBXZSBhcmUgaW4gR0MgcGF0aC4gKi8KKwkJQlVHX09OKCFQYWdlUHJlTG9ja2VkKHBhZ2UpKTsKKwkJaWYgKHN1cGVyLT5zX2xvY2tfY291bnQpCisJCQlzdXBlci0+c19sb2NrX2NvdW50LS07CisJCWVsc2UKKwkJCUNsZWFyUGFnZVByZUxvY2tlZChwYWdlKTsKKwl9Cit9CisKKy8qCisgKiBMb2dmcyBpcyBwcm9uZSB0byBhbiBBQi1CQSBkZWFkbG9jayB3aGVyZSBvbmUgdGFzayB0cmllcyB0byBhY3F1aXJlCisgKiBzX3dyaXRlX211dGV4IHdpdGggYSBsb2NrZWQgcGFnZSBhbmQgR0MgdHJpZXMgdG8gZ2V0IHRoYXQgcGFnZSB3aGlsZSBob2xkaW5nCisgKiBzX3dyaXRlX211dGV4LgorICogVG8gc29sdmUgdGhpcyBpc3N1ZSBsb2dmcyB3aWxsIGlnbm9yZSB0aGUgcGFnZSBsb2NrIGlmZiB0aGUgcGFnZSBpbiBxdWVzdGlvbgorICogaXMgd2FpdGluZyBmb3Igc193cml0ZV9tdXRleC4gIFdlIGFubm90YXRlIHRoaXMgZmFjdCBieSBzZXR0aW5nIFBHX3ByZV9sb2NrZWQKKyAqIGluIGFkZGl0aW9uIHRvIFBHX2xvY2tlZC4KKyAqLworc3RhdGljIHZvaWQgbG9nZnNfZ2V0X3dibG9ja3Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCWludCBsb2NrKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisKKwlpZiAocGFnZSkKKwkJcHJlbG9ja19wYWdlKHNiLCBwYWdlLCBsb2NrKTsKKworCWlmIChsb2NrKSB7CisJCW11dGV4X2xvY2soJnN1cGVyLT5zX3dyaXRlX211dGV4KTsKKwkJbG9nZnNfZ2NfcGFzcyhzYik7CisJCS8qIEZJWE1FOiBXZSBhbHNvIGhhdmUgdG8gY2hlY2sgZm9yIHNoYWRvd2VkIHNwYWNlCisJCSAqIGFuZCBtZW1wb29sIGZpbGwgZ3JhZGUgKi8KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxvZ2ZzX3B1dF93YmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBwYWdlICpwYWdlLAorCQlpbnQgbG9jaykKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCisJaWYgKHBhZ2UpCisJCXByZXVubG9ja19wYWdlKHNiLCBwYWdlLCBsb2NrKTsKKwkvKiBPcmRlciBtYXR0ZXJzIC0gd2UgbXVzdCBjbGVhciBQR19wcmVfbG9ja2VkIGJlZm9yZSByZWxlYXNpbmcKKwkgKiBzX3dyaXRlX211dGV4IG9yIHdlIGNvdWxkIHJhY2UgYWdhaW5zdCBhbm90aGVyIHRhc2suICovCisJaWYgKGxvY2spCisJCW11dGV4X3VubG9jaygmc3VwZXItPnNfd3JpdGVfbXV0ZXgpOworfQorCitzdGF0aWMgc3RydWN0IHBhZ2UgKmxvZ2ZzX2dldF9yZWFkX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGJpeCwKKwkJbGV2ZWxfdCBsZXZlbCkKK3sKKwlyZXR1cm4gZmluZF9vcl9jcmVhdGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLAorCQkJbG9nZnNfcGFja19pbmRleChiaXgsIGxldmVsKSwgR0ZQX05PRlMpOworfQorCitzdGF0aWMgdm9pZCBsb2dmc19wdXRfcmVhZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXVubG9ja19wYWdlKHBhZ2UpOworCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKK30KKworc3RhdGljIHZvaWQgbG9nZnNfbG9ja193cml0ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWludCBsb29wID0gMDsKKworCXdoaWxlICh1bmxpa2VseSghdHJ5bG9ja19wYWdlKHBhZ2UpKSkgeworCQlpZiAobG9vcCsrID4gMHgxMDAwKSB7CisJCQkvKiBIYXMgYmVlbiBvYnNlcnZlZCBvbmNlIHNvIGZhci4uLiAqLworCQkJcHJpbnRrKEtFUk5fRVJSICJzdGFjayBhdCAlcFxuIiwgJmxvb3ApOworCQkJQlVHKCk7CisJCX0KKwkJaWYgKFBhZ2VQcmVMb2NrZWQocGFnZSkpIHsKKwkJCS8qIEhvbGRlciBvZiBwYWdlIGxvY2sgaXMgd2FpdGluZyBmb3IgdXMsIGl0CisJCQkgKiBpcyBzYWZlIHRvIHVzZSB0aGlzIHBhZ2UuICovCisJCQlicmVhazsKKwkJfQorCQkvKiBTb21lIG90aGVyIHByb2Nlc3MgaGFzIHRoaXMgcGFnZSBsb2NrZWQgYW5kIGhhcworCQkgKiBub3RoaW5nIHRvIGRvIHdpdGggdXMuICBXYWl0IGZvciBpdCB0byBmaW5pc2guCisJCSAqLworCQlzY2hlZHVsZSgpOworCX0KKwlCVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOworfQorCitzdGF0aWMgc3RydWN0IHBhZ2UgKmxvZ2ZzX2dldF93cml0ZV9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBiaXgsCisJCWxldmVsX3QgbGV2ZWwpCit7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOworCXBnb2ZmX3QgaW5kZXggPSBsb2dmc19wYWNrX2luZGV4KGJpeCwgbGV2ZWwpOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCBlcnI7CisKK3JlcGVhdDoKKwlwYWdlID0gZmluZF9nZXRfcGFnZShtYXBwaW5nLCBpbmRleCk7CisJaWYgKCFwYWdlKSB7CisJCXBhZ2UgPSBfX3BhZ2VfY2FjaGVfYWxsb2MoR0ZQX05PRlMpOworCQlpZiAoIXBhZ2UpCisJCQlyZXR1cm4gTlVMTDsKKwkJZXJyID0gYWRkX3RvX3BhZ2VfY2FjaGVfbHJ1KHBhZ2UsIG1hcHBpbmcsIGluZGV4LCBHRlBfTk9GUyk7CisJCWlmICh1bmxpa2VseShlcnIpKSB7CisJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCQlpZiAoZXJyID09IC1FRVhJU1QpCisJCQkJZ290byByZXBlYXQ7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0gZWxzZSBsb2dmc19sb2NrX3dyaXRlX3BhZ2UocGFnZSk7CisJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKKwlyZXR1cm4gcGFnZTsKK30KKworc3RhdGljIHZvaWQgbG9nZnNfdW5sb2NrX3dyaXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaWYgKCFQYWdlUHJlTG9ja2VkKHBhZ2UpKQorCQl1bmxvY2tfcGFnZShwYWdlKTsKK30KKworc3RhdGljIHZvaWQgbG9nZnNfcHV0X3dyaXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJbG9nZnNfdW5sb2NrX3dyaXRlX3BhZ2UocGFnZSk7CisJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworfQorCitzdGF0aWMgc3RydWN0IHBhZ2UgKmxvZ2ZzX2dldF9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBiaXgsIGxldmVsX3QgbGV2ZWwsCisJCWludCBydykKK3sKKwlpZiAocncgPT0gUkVBRCkKKwkJcmV0dXJuIGxvZ2ZzX2dldF9yZWFkX3BhZ2UoaW5vZGUsIGJpeCwgbGV2ZWwpOworCWVsc2UKKwkJcmV0dXJuIGxvZ2ZzX2dldF93cml0ZV9wYWdlKGlub2RlLCBiaXgsIGxldmVsKTsKK30KKworc3RhdGljIHZvaWQgbG9nZnNfcHV0X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBydykKK3sKKwlpZiAocncgPT0gUkVBRCkKKwkJbG9nZnNfcHV0X3JlYWRfcGFnZShwYWdlKTsKKwllbHNlCisJCWxvZ2ZzX3B1dF93cml0ZV9wYWdlKHBhZ2UpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2dldF9iaXRzKHU2NCB2YWwsIGludCBza2lwLCBpbnQgbm8pCit7CisJdTY0IHJldCA9IHZhbDsKKworCXJldCA+Pj0gc2tpcCAqIG5vOworCXJldCA8PD0gNjQgLSBubzsKKwlyZXQgPj49IDY0IC0gbm87CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2JpdHModTY0IHZhbCwgbGV2ZWxfdCBza2lwKQoreworCXJldHVybiBfX2dldF9iaXRzKHZhbCwgKF9fZm9yY2UgaW50KXNraXAsIExPR0ZTX0JMT0NLX0JJVFMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zaGFkb3dfdHJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQlzdHJ1Y3Qgc2hhZG93X3RyZWUgKnRyZWUpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKworCWJ0cmVlX2luaXRfbWVtcG9vbDY0KCZ0cmVlLT5uZXcsIHN1cGVyLT5zX2J0cmVlX3Bvb2wpOworCWJ0cmVlX2luaXRfbWVtcG9vbDY0KCZ0cmVlLT5vbGQsIHN1cGVyLT5zX2J0cmVlX3Bvb2wpOworfQorCitzdGF0aWMgdm9pZCBpbmRpcmVjdF93cml0ZV9ibG9jayhzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrKQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJaW50IHJldDsKKworCXBhZ2UgPSBibG9jay0+cGFnZTsKKwlpbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CisJbG9nZnNfbG9ja193cml0ZV9wYWdlKHBhZ2UpOworCXJldCA9IGxvZ2ZzX3dyaXRlX2J1Zihpbm9kZSwgcGFnZSwgMCk7CisJbG9nZnNfdW5sb2NrX3dyaXRlX3BhZ2UocGFnZSk7CisJLyoKKwkgKiBUaGlzIG5lZWRzIHNvbWUgcmV3b3JrLiAgVW5sZXNzIHlvdSB3YW50IHlvdXIgZmlsZXN5c3RlbSB0byBydW4KKwkgKiBjb21wbGV0ZWx5IHN5bmNocm9ub3VzbHkgKHlvdSBkb24ndCksIHRoZSBmaWxlc3lzdGVtIHdpbGwgYWx3YXlzCisJICogcmVwb3J0IHdyaXRlcyBhcyAnc3VjY2Vzc2Z1bCcgYmVmb3JlIHRoZSBhY3R1YWwgd29yayBoYXMgYmVlbgorCSAqIGRvbmUuICBUaGUgYWN0dWFsIHdvcmsgZ2V0cyBkb25lIGhlcmUgYW5kIHRoaXMgaXMgd2hlcmUgYW55IGVycm9ycworCSAqIHdpbGwgc2hvdyB1cC4gIEFuZCB0aGVyZSBpc24ndCBtdWNoIHdlIGNhbiBkbyBhYm91dCBpdCwgcmVhbGx5LgorCSAqCisJICogU29tZSBhdHRlbXB0cyB0byBmaXggdGhlIGVycm9ycyAobW92ZSBmcm9tIGJhZCBibG9ja3MsIHJldHJ5IGlvLC4uLikKKwkgKiBoYXZlIGFscmVhZHkgYmVlbiBkb25lLCBzbyBhbnl0aGluZyBsZWZ0IHNob3VsZCBiZSBlaXRoZXIgYSBicm9rZW4KKwkgKiBkZXZpY2Ugb3IgYSBidWcgc29tZXdoZXJlIGluIGxvZ2ZzIGl0c2VsZi4gIEJlaW5nIHJlbGF0aXZlbHkgbmV3LAorCSAqIHRoZSBvZGRzIGN1cnJlbnRseSBmYXZvciBhIGJ1Zywgc28gZm9yIG5vdyB0aGUgbGluZSBiZWxvdyBpc24ndAorCSAqIGVudGlyZWx5IHRhc3RlbGVzLgorCSAqLworCUJVR19PTihyZXQpOworfQorCitzdGF0aWMgdm9pZCBpbm9kZV93cml0ZV9ibG9jayhzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJaW50IHJldDsKKworCWlub2RlID0gYmxvY2stPmlub2RlOworCWlmIChpbm9kZS0+aV9pbm8gPT0gTE9HRlNfSU5PX01BU1RFUikKKwkJbG9nZnNfd3JpdGVfYW5jaG9yKGlub2RlLT5pX3NiKTsKKwllbHNlIHsKKwkJcmV0ID0gX19sb2dmc193cml0ZV9pbm9kZShpbm9kZSwgMCk7CisJCS8qIHNlZSBpbmRpcmVjdF93cml0ZV9ibG9jayBjb21tZW50ICovCisJCUJVR19PTihyZXQpOworCX0KK30KKworc3RhdGljIGdjX2xldmVsX3QgaW5vZGVfYmxvY2tfbGV2ZWwoc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jaykKK3sKKwlCVUdfT04oYmxvY2stPmlub2RlLT5pX2lubyA9PSBMT0dGU19JTk9fTUFTVEVSKTsKKwlyZXR1cm4gR0NfTEVWRUwoTE9HRlNfTUFYX0xFVkVMUyk7Cit9CisKK3N0YXRpYyBnY19sZXZlbF90IGluZGlyZWN0X2Jsb2NrX2xldmVsKHN0cnVjdCBsb2dmc19ibG9jayAqYmxvY2spCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwl1NjQgYml4OworCWxldmVsX3QgbGV2ZWw7CisKKwlwYWdlID0gYmxvY2stPnBhZ2U7CisJaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OworCWxvZ2ZzX3VucGFja19pbmRleChwYWdlLT5pbmRleCwgJmJpeCwgJmxldmVsKTsKKwlyZXR1cm4gZXhwYW5kX2xldmVsKGlub2RlLT5pX2lubywgbGV2ZWwpOworfQorCisvKgorICogVGhpcyBzaWxlbmNlcyBhIGZhbHNlLCB5ZXQgYW5ub3lpbmcgZ2NjIHdhcm5pbmcuICBJIGhhdGUgaXQgd2hlbiBteSBlZGl0b3IKKyAqIGp1bXBzIGludG8gYml0b3BzLmggZWFjaCB0aW1lIEkgcmVjb21waWxlIHRoaXMgZmlsZS4KKyAqIFRPRE86IENvbXBsYWluIHRvIGdjYyBmb2xrcyBhYm91dCB0aGlzIGFuZCB1cGdyYWRlIGNvbXBpbGVyLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBmbmIoY29uc3QgdW5zaWduZWQgbG9uZyAqYWRkciwKKwkJdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlyZXR1cm4gZmluZF9uZXh0X2JpdChhZGRyLCBzaXplLCBvZmZzZXQpOworfQorCitzdGF0aWMgX19iZTY0IGlub2RlX3ZhbDAoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCXU2NCB2YWw7CisKKwkvKgorCSAqIEV4cGxpY2l0IHNoaWZ0aW5nIGdlbmVyYXRlcyBnb29kIGNvZGUsIGJ1dCBtdXN0IG1hdGNoIHRoZSBmb3JtYXQKKwkgKiBvZiB0aGUgc3RydWN0dXJlLiAgQWRkIHNvbWUgcGFyYW5vaWEganVzdCBpbiBjYXNlLgorCSAqLworCUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgbG9nZnNfZGlza19pbm9kZSwgZGlfbW9kZSkgIT0gMCk7CisJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBsb2dmc19kaXNrX2lub2RlLCBkaV9oZWlnaHQpICE9IDIpOworCUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgbG9nZnNfZGlza19pbm9kZSwgZGlfZmxhZ3MpICE9IDQpOworCisJdmFsID0JKHU2NClpbm9kZS0+aV9tb2RlIDw8IDQ4IHwKKwkJKHU2NClsaS0+bGlfaGVpZ2h0IDw8IDQwIHwKKwkJKHU2NClsaS0+bGlfZmxhZ3M7CisJcmV0dXJuIGNwdV90b19iZTY0KHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgaW5vZGVfd3JpdGVfYWxpYXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jaywgd3JpdGVfYWxpYXNfdCAqd3JpdGVfb25lX2FsaWFzKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBibG9jay0+aW5vZGU7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKwl1bnNpZ25lZCBsb25nIHBvczsKKwl1NjQgaW5vICwgYml4OworCV9fYmU2NCB2YWw7CisJbGV2ZWxfdCBsZXZlbDsKKwlpbnQgZXJyOworCisJZm9yIChwb3MgPSAwOyA7IHBvcysrKSB7CisJCXBvcyA9IGZuYihibG9jay0+YWxpYXNfbWFwLCBMT0dGU19CTE9DS19GQUNUT1IsIHBvcyk7CisJCWlmIChwb3MgPj0gTE9HRlNfRU1CRURERURfRklFTERTICsgSU5PREVfUE9JTlRFUl9PRlMpCisJCQlyZXR1cm4gMDsKKworCQlzd2l0Y2ggKHBvcykgeworCQljYXNlIElOT0RFX0hFSUdIVF9PRlM6CisJCQl2YWwgPSBpbm9kZV92YWwwKGlub2RlKTsKKwkJCWJyZWFrOworCQljYXNlIElOT0RFX1VTRURfT0ZTOgorCQkJdmFsID0gY3B1X3RvX2JlNjQobGktPmxpX3VzZWRfYnl0ZXMpOzsKKwkJCWJyZWFrOworCQljYXNlIElOT0RFX1NJWkVfT0ZTOgorCQkJdmFsID0gY3B1X3RvX2JlNjQoaV9zaXplX3JlYWQoaW5vZGUpKTsKKwkJCWJyZWFrOworCQljYXNlIElOT0RFX1BPSU5URVJfT0ZTIC4uLiBJTk9ERV9QT0lOVEVSX09GUyArIExPR0ZTX0VNQkVEREVEX0ZJRUxEUyAtIDE6CisJCQl2YWwgPSBjcHVfdG9fYmU2NChsaS0+bGlfZGF0YVtwb3MgLSBJTk9ERV9QT0lOVEVSX09GU10pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwkJfQorCisJCWlubyA9IExPR0ZTX0lOT19NQVNURVI7CisJCWJpeCA9IGlub2RlLT5pX2lubzsKKwkJbGV2ZWwgPSBMRVZFTCgwKTsKKwkJZXJyID0gd3JpdGVfb25lX2FsaWFzKHNiLCBpbm8sIGJpeCwgbGV2ZWwsIHBvcywgdmFsKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorfQorCitzdGF0aWMgaW50IGluZGlyZWN0X3dyaXRlX2FsaWFzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCXN0cnVjdCBsb2dmc19ibG9jayAqYmxvY2ssIHdyaXRlX2FsaWFzX3QgKndyaXRlX29uZV9hbGlhcykKK3sKKwl1bnNpZ25lZCBsb25nIHBvczsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGJsb2NrLT5wYWdlOworCXU2NCBpbm8gLCBiaXg7CisJX19iZTY0ICpjaGlsZCwgdmFsOworCWxldmVsX3QgbGV2ZWw7CisJaW50IGVycjsKKworCWZvciAocG9zID0gMDsgOyBwb3MrKykgeworCQlwb3MgPSBmbmIoYmxvY2stPmFsaWFzX21hcCwgTE9HRlNfQkxPQ0tfRkFDVE9SLCBwb3MpOworCQlpZiAocG9zID49IExPR0ZTX0JMT0NLX0ZBQ1RPUikKKwkJCXJldHVybiAwOworCisJCWlubyA9IHBhZ2UtPm1hcHBpbmctPmhvc3QtPmlfaW5vOworCQlsb2dmc191bnBhY2tfaW5kZXgocGFnZS0+aW5kZXgsICZiaXgsICZsZXZlbCk7CisJCWNoaWxkID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCQl2YWwgPSBjaGlsZFtwb3NdOworCQlrdW5tYXBfYXRvbWljKGNoaWxkLCBLTV9VU0VSMCk7CisJCWVyciA9IHdyaXRlX29uZV9hbGlhcyhzYiwgaW5vLCBiaXgsIGxldmVsLCBwb3MsIHZhbCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KK30KKworaW50IGxvZ2ZzX3dyaXRlX29ial9hbGlhc2VzX3BhZ2VjYWNoZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jazsKKwlpbnQgZXJyOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShibG9jaywgJnN1cGVyLT5zX29iamVjdF9hbGlhcywgYWxpYXNfbGlzdCkgeworCQllcnIgPSBibG9jay0+b3BzLT53cml0ZV9hbGlhcyhzYiwgYmxvY2ssIHdyaXRlX2FsaWFzX2pvdXJuYWwpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19mcmVlX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBsb2dmc19ibG9jayAqYmxvY2spCit7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZibG9jay0+aXRlbV9saXN0KSk7CisJbGlzdF9kZWwoJmJsb2NrLT5hbGlhc19saXN0KTsKKwltZW1wb29sX2ZyZWUoYmxvY2ssIGxvZ2ZzX3N1cGVyKHNiKS0+c19ibG9ja19wb29sKTsKK30KKworc3RhdGljIHZvaWQgaW5vZGVfZnJlZV9ibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBibG9jay0+aW5vZGU7CisKKwlsb2dmc19pbm9kZShpbm9kZSktPmxpX2Jsb2NrID0gTlVMTDsKKwlfX2ZyZWVfYmxvY2soc2IsIGJsb2NrKTsKK30KKworc3RhdGljIHZvaWQgaW5kaXJlY3RfZnJlZV9ibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQlzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrKQoreworCUNsZWFyUGFnZVByaXZhdGUoYmxvY2stPnBhZ2UpOworCWJsb2NrLT5wYWdlLT5wcml2YXRlID0gMDsKKwlfX2ZyZWVfYmxvY2soc2IsIGJsb2NrKTsKK30KKworCitzdGF0aWMgc3RydWN0IGxvZ2ZzX2Jsb2NrX29wcyBpbm9kZV9ibG9ja19vcHMgPSB7CisJLndyaXRlX2Jsb2NrID0gaW5vZGVfd3JpdGVfYmxvY2ssCisJLmJsb2NrX2xldmVsID0gaW5vZGVfYmxvY2tfbGV2ZWwsCisJLmZyZWVfYmxvY2sgPSBpbm9kZV9mcmVlX2Jsb2NrLAorCS53cml0ZV9hbGlhcyA9IGlub2RlX3dyaXRlX2FsaWFzLAorfTsKKworc3RydWN0IGxvZ2ZzX2Jsb2NrX29wcyBpbmRpcmVjdF9ibG9ja19vcHMgPSB7CisJLndyaXRlX2Jsb2NrID0gaW5kaXJlY3Rfd3JpdGVfYmxvY2ssCisJLmJsb2NrX2xldmVsID0gaW5kaXJlY3RfYmxvY2tfbGV2ZWwsCisJLmZyZWVfYmxvY2sgPSBpbmRpcmVjdF9mcmVlX2Jsb2NrLAorCS53cml0ZV9hbGlhcyA9IGluZGlyZWN0X3dyaXRlX2FsaWFzLAorfTsKKworc3RydWN0IGxvZ2ZzX2Jsb2NrICpfX2FsbG9jX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCXU2NCBpbm8sIHU2NCBiaXgsIGxldmVsX3QgbGV2ZWwpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrOworCisJYmxvY2sgPSBtZW1wb29sX2FsbG9jKHN1cGVyLT5zX2Jsb2NrX3Bvb2wsIEdGUF9OT0ZTKTsKKwltZW1zZXQoYmxvY2ssIDAsIHNpemVvZigqYmxvY2spKTsKKwlJTklUX0xJU1RfSEVBRCgmYmxvY2stPmFsaWFzX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZibG9jay0+aXRlbV9saXN0KTsKKwlibG9jay0+c2IgPSBzYjsKKwlibG9jay0+aW5vID0gaW5vOworCWJsb2NrLT5iaXggPSBiaXg7CisJYmxvY2stPmxldmVsID0gbGV2ZWw7CisJcmV0dXJuIGJsb2NrOworfQorCitzdGF0aWMgdm9pZCBhbGxvY19pbm9kZV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGkgPSBsb2dmc19pbm9kZShpbm9kZSk7CisJc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jazsKKworCWlmIChsaS0+bGlfYmxvY2spCisJCXJldHVybjsKKworCWJsb2NrID0gX19hbGxvY19ibG9jayhpbm9kZS0+aV9zYiwgTE9HRlNfSU5PX01BU1RFUiwgaW5vZGUtPmlfaW5vLCAwKTsKKwlibG9jay0+aW5vZGUgPSBpbm9kZTsKKwlsaS0+bGlfYmxvY2sgPSBibG9jazsKKwlibG9jay0+b3BzID0gJmlub2RlX2Jsb2NrX29wczsKK30KKwordm9pZCBpbml0aWFsaXplX2Jsb2NrX2NvdW50ZXJzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrLAorCQlfX2JlNjQgKmFycmF5LCBpbnQgcGFnZV9pc19lbXB0eSkKK3sKKwl1NjQgcHRyOworCWludCBpLCBzdGFydDsKKworCWJsb2NrLT5wYXJ0aWFsID0gMDsKKwlibG9jay0+ZnVsbCA9IDA7CisJc3RhcnQgPSAwOworCWlmIChwYWdlLT5pbmRleCA8IGZpcnN0X2luZGlyZWN0X2Jsb2NrKCkpIHsKKwkJLyogQ291bnRlcnMgYXJlIHBvaW50bGVzcyBvbiBsZXZlbCAwICovCisJCXJldHVybjsKKwl9CisJaWYgKHBhZ2UtPmluZGV4ID09IGZpcnN0X2luZGlyZWN0X2Jsb2NrKCkpIHsKKwkJLyogU2tpcCB1bnVzZWQgcG9pbnRlcnMgKi8KKwkJc3RhcnQgPSBJMF9CTE9DS1M7CisJCWJsb2NrLT5mdWxsID0gSTBfQkxPQ0tTOworCX0KKwlpZiAoIXBhZ2VfaXNfZW1wdHkpIHsKKwkJZm9yIChpID0gc3RhcnQ7IGkgPCBMT0dGU19CTE9DS19GQUNUT1I7IGkrKykgeworCQkJcHRyID0gYmU2NF90b19jcHUoYXJyYXlbaV0pOworCQkJaWYgKHB0cikKKwkJCQlibG9jay0+cGFydGlhbCsrOworCQkJaWYgKHB0ciAmIExPR0ZTX0ZVTExZX1BPUFVMQVRFRCkKKwkJCQlibG9jay0+ZnVsbCsrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBhbGxvY19kYXRhX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBsb2dmc19ibG9jayAqYmxvY2s7CisJdTY0IGJpeDsKKwlsZXZlbF90IGxldmVsOworCisJaWYgKFBhZ2VQcml2YXRlKHBhZ2UpKQorCQlyZXR1cm47CisKKwlsb2dmc191bnBhY2tfaW5kZXgocGFnZS0+aW5kZXgsICZiaXgsICZsZXZlbCk7CisJYmxvY2sgPSBfX2FsbG9jX2Jsb2NrKGlub2RlLT5pX3NiLCBpbm9kZS0+aV9pbm8sIGJpeCwgbGV2ZWwpOworCWJsb2NrLT5wYWdlID0gcGFnZTsKKwlTZXRQYWdlUHJpdmF0ZShwYWdlKTsKKwlwYWdlLT5wcml2YXRlID0gKHVuc2lnbmVkIGxvbmcpYmxvY2s7CisJYmxvY2stPm9wcyA9ICZpbmRpcmVjdF9ibG9ja19vcHM7Cit9CisKK3N0YXRpYyB2b2lkIGFsbG9jX2luZGlyZWN0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlLAorCQlpbnQgcGFnZV9pc19lbXB0eSkKK3sKKwlzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrOworCV9fYmU2NCAqYXJyYXk7CisKKwlpZiAoUGFnZVByaXZhdGUocGFnZSkpCisJCXJldHVybjsKKworCWFsbG9jX2RhdGFfYmxvY2soaW5vZGUsIHBhZ2UpOworCisJYmxvY2sgPSBsb2dmc19ibG9jayhwYWdlKTsKKwlhcnJheSA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwlpbml0aWFsaXplX2Jsb2NrX2NvdW50ZXJzKHBhZ2UsIGJsb2NrLCBhcnJheSwgcGFnZV9pc19lbXB0eSk7CisJa3VubWFwX2F0b21pYyhhcnJheSwgS01fVVNFUjApOworfQorCitzdGF0aWMgdm9pZCBibG9ja19zZXRfcG9pbnRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IGluZGV4LCB1NjQgcHRyKQoreworCXN0cnVjdCBsb2dmc19ibG9jayAqYmxvY2sgPSBsb2dmc19ibG9jayhwYWdlKTsKKwlfX2JlNjQgKmFycmF5OworCXU2NCBvbGRwdHI7CisKKwlCVUdfT04oIWJsb2NrKTsKKwlhcnJheSA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwlvbGRwdHIgPSBiZTY0X3RvX2NwdShhcnJheVtpbmRleF0pOworCWFycmF5W2luZGV4XSA9IGNwdV90b19iZTY0KHB0cik7CisJa3VubWFwX2F0b21pYyhhcnJheSwgS01fVVNFUjApOworCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKworCWJsb2NrLT5mdWxsICs9ICEhKHB0ciAmIExPR0ZTX0ZVTExZX1BPUFVMQVRFRCkKKwkJLSAhIShvbGRwdHIgJiBMT0dGU19GVUxMWV9QT1BVTEFURUQpOworCWJsb2NrLT5wYXJ0aWFsICs9ICEhcHRyIC0gISFvbGRwdHI7Cit9CisKK3N0YXRpYyB1NjQgYmxvY2tfZ2V0X3BvaW50ZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBpbmRleCkKK3sKKwlfX2JlNjQgKmJsb2NrOworCXU2NCBwdHI7CisKKwlibG9jayA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwlwdHIgPSBiZTY0X3RvX2NwdShibG9ja1tpbmRleF0pOworCWt1bm1hcF9hdG9taWMoYmxvY2ssIEtNX1VTRVIwKTsKKwlyZXR1cm4gcHRyOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX3JlYWRfZW1wdHkoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJemVyb191c2VyX3NlZ21lbnQocGFnZSwgMCwgUEFHRV9DQUNIRV9TSVpFKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2dmc19yZWFkX2RpcmVjdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCXBnb2ZmX3QgaW5kZXggPSBwYWdlLT5pbmRleDsKKwl1NjQgYmxvY2s7CisKKwlibG9jayA9IGxpLT5saV9kYXRhW2luZGV4XTsKKwlpZiAoIWJsb2NrKQorCQlyZXR1cm4gbG9nZnNfcmVhZF9lbXB0eShwYWdlKTsKKworCXJldHVybiBsb2dmc19zZWdtZW50X3JlYWQoaW5vZGUsIHBhZ2UsIGJsb2NrLCBpbmRleCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfcmVhZF9sb29wKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlLAorCQlpbnQgcndfY29udGV4dCkKK3sKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCXU2NCBiaXgsIGJvZnMgPSBsaS0+bGlfZGF0YVtJTkRJUkVDVF9JTkRFWF07CisJbGV2ZWxfdCBsZXZlbCwgdGFyZ2V0X2xldmVsOworCWludCByZXQ7CisJc3RydWN0IHBhZ2UgKmlwYWdlOworCisJbG9nZnNfdW5wYWNrX2luZGV4KHBhZ2UtPmluZGV4LCAmYml4LCAmdGFyZ2V0X2xldmVsKTsKKwlpZiAoIWJvZnMpCisJCXJldHVybiBsb2dmc19yZWFkX2VtcHR5KHBhZ2UpOworCisJaWYgKGJpeCA+PSBtYXhiaXgobGktPmxpX2hlaWdodCkpCisJCXJldHVybiBsb2dmc19yZWFkX2VtcHR5KHBhZ2UpOworCisJZm9yIChsZXZlbCA9IExFVkVMKGxpLT5saV9oZWlnaHQpOworCQkJKF9fZm9yY2UgdTgpbGV2ZWwgPiAoX19mb3JjZSB1OCl0YXJnZXRfbGV2ZWw7CisJCQlsZXZlbCA9IFNVQkxFVkVMKGxldmVsKSl7CisJCWlwYWdlID0gbG9nZnNfZ2V0X3BhZ2UoaW5vZGUsIGJpeCwgbGV2ZWwsIHJ3X2NvbnRleHQpOworCQlpZiAoIWlwYWdlKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJcmV0ID0gbG9nZnNfc2VnbWVudF9yZWFkKGlub2RlLCBpcGFnZSwgYm9mcywgYml4LCBsZXZlbCk7CisJCWlmIChyZXQpIHsKKwkJCWxvZ2ZzX3B1dF9yZWFkX3BhZ2UoaXBhZ2UpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWJvZnMgPSBibG9ja19nZXRfcG9pbnRlcihpcGFnZSwgZ2V0X2JpdHMoYml4LCBTVUJMRVZFTChsZXZlbCkpKTsKKwkJbG9nZnNfcHV0X3BhZ2UoaXBhZ2UsIHJ3X2NvbnRleHQpOworCQlpZiAoIWJvZnMpCisJCQlyZXR1cm4gbG9nZnNfcmVhZF9lbXB0eShwYWdlKTsKKwl9CisKKwlyZXR1cm4gbG9nZnNfc2VnbWVudF9yZWFkKGlub2RlLCBwYWdlLCBib2ZzLCBiaXgsIDApOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX3JlYWRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCWludCByd19jb250ZXh0KQoreworCXBnb2ZmX3QgaW5kZXggPSBwYWdlLT5pbmRleDsKKworCWlmIChpbmRleCA8IEkwX0JMT0NLUykKKwkJcmV0dXJuIGxvZ2ZzX3JlYWRfZGlyZWN0KGlub2RlLCBwYWdlKTsKKwlyZXR1cm4gbG9nZnNfcmVhZF9sb29wKGlub2RlLCBwYWdlLCByd19jb250ZXh0KTsKK30KKworc3RhdGljIGludCBsb2dmc19leGlzdF9sb29wKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBiaXgpCit7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKwl1NjQgYm9mcyA9IGxpLT5saV9kYXRhW0lORElSRUNUX0lOREVYXTsKKwlsZXZlbF90IGxldmVsOworCWludCByZXQ7CisJc3RydWN0IHBhZ2UgKmlwYWdlOworCisJaWYgKCFib2ZzKQorCQlyZXR1cm4gMDsKKwlpZiAoYml4ID49IG1heGJpeChsaS0+bGlfaGVpZ2h0KSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGxldmVsID0gTEVWRUwobGktPmxpX2hlaWdodCk7IGxldmVsICE9IDA7IGxldmVsID0gU1VCTEVWRUwobGV2ZWwpKSB7CisJCWlwYWdlID0gbG9nZnNfZ2V0X3JlYWRfcGFnZShpbm9kZSwgYml4LCBsZXZlbCk7CisJCWlmICghaXBhZ2UpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlyZXQgPSBsb2dmc19zZWdtZW50X3JlYWQoaW5vZGUsIGlwYWdlLCBib2ZzLCBiaXgsIGxldmVsKTsKKwkJaWYgKHJldCkgeworCQkJbG9nZnNfcHV0X3JlYWRfcGFnZShpcGFnZSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJYm9mcyA9IGJsb2NrX2dldF9wb2ludGVyKGlwYWdlLCBnZXRfYml0cyhiaXgsIFNVQkxFVkVMKGxldmVsKSkpOworCQlsb2dmc19wdXRfcmVhZF9wYWdlKGlwYWdlKTsKKwkJaWYgKCFib2ZzKQorCQkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK2ludCBsb2dmc19leGlzdF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgYml4KQoreworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGkgPSBsb2dmc19pbm9kZShpbm9kZSk7CisKKwlpZiAoYml4IDwgSTBfQkxPQ0tTKQorCQlyZXR1cm4gISFsaS0+bGlfZGF0YVtiaXhdOworCXJldHVybiBsb2dmc19leGlzdF9sb29wKGlub2RlLCBiaXgpOworfQorCitzdGF0aWMgdTY0IHNlZWtfaG9sZWRhdGFfZGlyZWN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBiaXgsIGludCBkYXRhKQoreworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGkgPSBsb2dmc19pbm9kZShpbm9kZSk7CisKKwlmb3IgKDsgYml4IDwgSTBfQkxPQ0tTOyBiaXgrKykKKwkJaWYgKGRhdGEgXiAobGktPmxpX2RhdGFbYml4XSA9PSAwKSkKKwkJCXJldHVybiBiaXg7CisJcmV0dXJuIEkwX0JMT0NLUzsKK30KKworc3RhdGljIHU2NCBzZWVrX2hvbGVkYXRhX2xvb3Aoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGJpeCwgaW50IGRhdGEpCit7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKwlfX2JlNjQgKnJibG9jazsKKwl1NjQgaW5jcmVtZW50LCBib2ZzID0gbGktPmxpX2RhdGFbSU5ESVJFQ1RfSU5ERVhdOworCWxldmVsX3QgbGV2ZWw7CisJaW50IHJldCwgc2xvdDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCUJVR19PTighYm9mcyk7CisKKwlmb3IgKGxldmVsID0gTEVWRUwobGktPmxpX2hlaWdodCk7IGxldmVsICE9IDA7IGxldmVsID0gU1VCTEVWRUwobGV2ZWwpKSB7CisJCWluY3JlbWVudCA9IDEgPDwgKExPR0ZTX0JMT0NLX0JJVFMgKiAoKF9fZm9yY2UgdTgpbGV2ZWwtMSkpOworCQlwYWdlID0gbG9nZnNfZ2V0X3JlYWRfcGFnZShpbm9kZSwgYml4LCBsZXZlbCk7CisJCWlmICghcGFnZSkKKwkJCXJldHVybiBiaXg7CisKKwkJcmV0ID0gbG9nZnNfc2VnbWVudF9yZWFkKGlub2RlLCBwYWdlLCBib2ZzLCBiaXgsIGxldmVsKTsKKwkJaWYgKHJldCkgeworCQkJbG9nZnNfcHV0X3JlYWRfcGFnZShwYWdlKTsKKwkJCXJldHVybiBiaXg7CisJCX0KKworCQlzbG90ID0gZ2V0X2JpdHMoYml4LCBTVUJMRVZFTChsZXZlbCkpOworCQlyYmxvY2sgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJCXdoaWxlIChzbG90IDwgTE9HRlNfQkxPQ0tfRkFDVE9SKSB7CisJCQlpZiAoZGF0YSAmJiAocmJsb2NrW3Nsb3RdICE9IDApKQorCQkJCWJyZWFrOworCQkJaWYgKCFkYXRhICYmICEoYmU2NF90b19jcHUocmJsb2NrW3Nsb3RdKSAmIExPR0ZTX0ZVTExZX1BPUFVMQVRFRCkpCisJCQkJYnJlYWs7CisJCQlzbG90Kys7CisJCQliaXggKz0gaW5jcmVtZW50OworCQkJYml4ICY9IH4oaW5jcmVtZW50IC0gMSk7CisJCX0KKwkJaWYgKHNsb3QgPj0gTE9HRlNfQkxPQ0tfRkFDVE9SKSB7CisJCQlrdW5tYXBfYXRvbWljKHJibG9jaywgS01fVVNFUjApOworCQkJbG9nZnNfcHV0X3JlYWRfcGFnZShwYWdlKTsKKwkJCXJldHVybiBiaXg7CisJCX0KKwkJYm9mcyA9IGJlNjRfdG9fY3B1KHJibG9ja1tzbG90XSk7CisJCWt1bm1hcF9hdG9taWMocmJsb2NrLCBLTV9VU0VSMCk7CisJCWxvZ2ZzX3B1dF9yZWFkX3BhZ2UocGFnZSk7CisJCWlmICghYm9mcykgeworCQkJQlVHX09OKGRhdGEpOworCQkJcmV0dXJuIGJpeDsKKwkJfQorCX0KKwlyZXR1cm4gYml4OworfQorCisvKioKKyAqIGxvZ2ZzX3NlZWtfaG9sZSAtIGZpbmQgbmV4dCBob2xlIHN0YXJ0aW5nIGF0IGEgZ2l2ZW4gYmxvY2sgaW5kZXgKKyAqIEBpbm9kZToJCWlub2RlIHRvIHNlYXJjaCBpbgorICogQGJpeDoJCWJsb2NrIGluZGV4IHRvIHN0YXJ0IHNlYXJjaGluZworICoKKyAqIFJldHVybnMgbmV4dCBob2xlLiAgSWYgdGhlIGZpbGUgZG9lc24ndCBjb250YWluIGFueSBmdXJ0aGVyIGhvbGVzLCB0aGUKKyAqIGJsb2NrIGFkZHJlc3MgbmV4dCB0byBlb2YgaXMgcmV0dXJuZWQgaW5zdGVhZC4KKyAqLwordTY0IGxvZ2ZzX3NlZWtfaG9sZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgYml4KQoreworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGkgPSBsb2dmc19pbm9kZShpbm9kZSk7CisKKwlpZiAoYml4IDwgSTBfQkxPQ0tTKSB7CisJCWJpeCA9IHNlZWtfaG9sZWRhdGFfZGlyZWN0KGlub2RlLCBiaXgsIDApOworCQlpZiAoYml4IDwgSTBfQkxPQ0tTKQorCQkJcmV0dXJuIGJpeDsKKwl9CisKKwlpZiAoIWxpLT5saV9kYXRhW0lORElSRUNUX0lOREVYXSkKKwkJcmV0dXJuIGJpeDsKKwllbHNlIGlmIChsaS0+bGlfZGF0YVtJTkRJUkVDVF9JTkRFWF0gJiBMT0dGU19GVUxMWV9QT1BVTEFURUQpCisJCWJpeCA9IG1heGJpeChsaS0+bGlfaGVpZ2h0KTsKKwllbHNlIHsKKwkJYml4ID0gc2Vla19ob2xlZGF0YV9sb29wKGlub2RlLCBiaXgsIDApOworCQlpZiAoYml4IDwgbWF4Yml4KGxpLT5saV9oZWlnaHQpKQorCQkJcmV0dXJuIGJpeDsKKwkJLyogU2hvdWxkIG5vdCBoYXBwZW4gYW55bW9yZS4gIEJ1dCBpZiBzb21lIHBvcnQgd3JpdGVzIHNlbWktCisJCSAqIGNvcnJ1cHQgaW1hZ2VzIChhcyB0aGlzIG9uZSB1c2VkIHRvKSB3ZSBtaWdodCBydW4gaW50byBpdC4KKwkJICovCisJCVdBUk5fT05fT05DRShiaXggPT0gbWF4Yml4KGxpLT5saV9oZWlnaHQpKTsKKwl9CisKKwlyZXR1cm4gYml4OworfQorCitzdGF0aWMgdTY0IF9fbG9nZnNfc2Vla19kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBiaXgpCit7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKworCWlmIChiaXggPCBJMF9CTE9DS1MpIHsKKwkJYml4ID0gc2Vla19ob2xlZGF0YV9kaXJlY3QoaW5vZGUsIGJpeCwgMSk7CisJCWlmIChiaXggPCBJMF9CTE9DS1MpCisJCQlyZXR1cm4gYml4OworCX0KKworCWlmIChiaXggPCBtYXhiaXgobGktPmxpX2hlaWdodCkpIHsKKwkJaWYgKCFsaS0+bGlfZGF0YVtJTkRJUkVDVF9JTkRFWF0pCisJCQliaXggPSBtYXhiaXgobGktPmxpX2hlaWdodCk7CisJCWVsc2UKKwkJCXJldHVybiBzZWVrX2hvbGVkYXRhX2xvb3AoaW5vZGUsIGJpeCwgMSk7CisJfQorCisJcmV0dXJuIGJpeDsKK30KKworLyoqCisgKiBsb2dmc19zZWVrX2RhdGEgLSBmaW5kIG5leHQgZGF0YSBibG9jayBhZnRlciBhIGdpdmVuIGJsb2NrIGluZGV4CisgKiBAaW5vZGU6CQlpbm9kZSB0byBzZWFyY2ggaW4KKyAqIEBiaXg6CQlibG9jayBpbmRleCB0byBzdGFydCBzZWFyY2hpbmcKKyAqCisgKiBSZXR1cm5zIG5leHQgZGF0YSBibG9jay4gIElmIHRoZSBmaWxlIGRvZXNuJ3QgY29udGFpbiBhbnkgZnVydGhlciBkYXRhCisgKiBibG9ja3MsIHRoZSBsYXN0IGJsb2NrIGluIHRoZSBmaWxlIGlzIHJldHVybmVkIGluc3RlYWQuCisgKi8KK3U2NCBsb2dmc19zZWVrX2RhdGEoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGJpeCkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJdTY0IHJldCwgZW5kOworCisJcmV0ID0gX19sb2dmc19zZWVrX2RhdGEoaW5vZGUsIGJpeCk7CisJZW5kID0gaV9zaXplX3JlYWQoaW5vZGUpID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCWlmIChyZXQgPj0gZW5kKQorCQlyZXQgPSBtYXgoYml4LCBlbmQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfaXNfdmFsaWRfZGlyZWN0KHN0cnVjdCBsb2dmc19pbm9kZSAqbGksIHU2NCBiaXgsIHU2NCBvZnMpCit7CisJcmV0dXJuIHB1cmVfb2ZzKGxpLT5saV9kYXRhW2JpeF0pID09IG9mczsKK30KKworc3RhdGljIGludCBfX2xvZ2ZzX2lzX3ZhbGlkX2xvb3Aoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGJpeCwKKwkJdTY0IG9mcywgdTY0IGJvZnMpCit7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKwlsZXZlbF90IGxldmVsOworCWludCByZXQ7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlmb3IgKGxldmVsID0gTEVWRUwobGktPmxpX2hlaWdodCk7IGxldmVsICE9IDA7IGxldmVsID0gU1VCTEVWRUwobGV2ZWwpKXsKKwkJcGFnZSA9IGxvZ2ZzX2dldF93cml0ZV9wYWdlKGlub2RlLCBiaXgsIGxldmVsKTsKKwkJQlVHX09OKCFwYWdlKTsKKworCQlyZXQgPSBsb2dmc19zZWdtZW50X3JlYWQoaW5vZGUsIHBhZ2UsIGJvZnMsIGJpeCwgbGV2ZWwpOworCQlpZiAocmV0KSB7CisJCQlsb2dmc19wdXRfd3JpdGVfcGFnZShwYWdlKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJYm9mcyA9IGJsb2NrX2dldF9wb2ludGVyKHBhZ2UsIGdldF9iaXRzKGJpeCwgU1VCTEVWRUwobGV2ZWwpKSk7CisJCWxvZ2ZzX3B1dF93cml0ZV9wYWdlKHBhZ2UpOworCQlpZiAoIWJvZnMpCisJCQlyZXR1cm4gMDsKKworCQlpZiAocHVyZV9vZnMoYm9mcykgPT0gb2ZzKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX2lzX3ZhbGlkX2xvb3Aoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGJpeCwgdTY0IG9mcykKK3sKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCXU2NCBib2ZzID0gbGktPmxpX2RhdGFbSU5ESVJFQ1RfSU5ERVhdOworCisJaWYgKCFib2ZzKQorCQlyZXR1cm4gMDsKKworCWlmIChiaXggPj0gbWF4Yml4KGxpLT5saV9oZWlnaHQpKQorCQlyZXR1cm4gMDsKKworCWlmIChwdXJlX29mcyhib2ZzKSA9PSBvZnMpCisJCXJldHVybiAxOworCisJcmV0dXJuIF9fbG9nZnNfaXNfdmFsaWRfbG9vcChpbm9kZSwgYml4LCBvZnMsIGJvZnMpOworfQorCitzdGF0aWMgaW50IF9fbG9nZnNfaXNfdmFsaWRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGJpeCwgdTY0IG9mcykKK3sKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCisJaWYgKChpbm9kZS0+aV9ubGluayA9PSAwKSAmJiBhdG9taWNfcmVhZCgmaW5vZGUtPmlfY291bnQpID09IDEpCisJCXJldHVybiAwOworCisJaWYgKGJpeCA8IEkwX0JMT0NLUykKKwkJcmV0dXJuIGxvZ2ZzX2lzX3ZhbGlkX2RpcmVjdChsaSwgYml4LCBvZnMpOworCXJldHVybiBsb2dmc19pc192YWxpZF9sb29wKGlub2RlLCBiaXgsIG9mcyk7Cit9CisKKy8qKgorICogbG9nZnNfaXNfdmFsaWRfYmxvY2sgLSBjaGVjayB3aGV0aGVyIHRoaXMgYmxvY2sgaXMgc3RpbGwgdmFsaWQKKyAqCisgKiBAc2IJLSBzdXBlcmJsb2NrCisgKiBAb2ZzCS0gYmxvY2sgcGh5c2ljYWwgb2Zmc2V0CisgKiBAaW5vCS0gYmxvY2sgaW5vZGUgbnVtYmVyCisgKiBAYml4CS0gYmxvY2sgaW5kZXgKKyAqIEBsZXZlbCAtIGJsb2NrIGxldmVsCisgKgorICogUmV0dXJucyAwIGlmIHRoZSBibG9jayBpcyBpbnZhbGlkLCAxIGlmIGl0IGlzIHZhbGlkIGFuZCAyIGlmIGl0IHdpbGwKKyAqIGJlY29tZSBpbnZhbGlkIG9uY2UgdGhlIGpvdXJuYWwgaXMgd3JpdHRlbi4KKyAqLworaW50IGxvZ2ZzX2lzX3ZhbGlkX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBvZnMsIHU2NCBpbm8sIHU2NCBiaXgsCisJCWdjX2xldmVsX3QgZ2NfbGV2ZWwpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWludCByZXQsIGNvb2tpZTsKKworCS8qIFVtb3VudCBjbG9zZXMgYSBzZWdtZW50IHdpdGggZnJlZSBibG9ja3MgcmVtYWluaW5nLiAgVGhvc2UKKwkgKiBibG9ja3MgYXJlIGJ5IGRlZmluaXRpb24gaW52YWxpZC4gKi8KKwlpZiAoaW5vID09IC0xKQorCQlyZXR1cm4gMDsKKworCUxPR0ZTX0JVR19PTigodTY0KSh1X2xvbmcpaW5vICE9IGlubywgc2IpOworCisJaW5vZGUgPSBsb2dmc19zYWZlX2lnZXQoc2IsIGlubywgJmNvb2tpZSk7CisJaWYgKElTX0VSUihpbm9kZSkpCisJCWdvdG8gaW52YWxpZDsKKworCXJldCA9IF9fbG9nZnNfaXNfdmFsaWRfYmxvY2soaW5vZGUsIGJpeCwgb2ZzKTsKKwlsb2dmc19zYWZlX2lwdXQoaW5vZGUsIGNvb2tpZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworaW52YWxpZDoKKwkvKiBCbG9jayBpcyBub21pbmFsbHkgaW52YWxpZCwgYnV0IG1heSBzdGlsbCBzaXQgaW4gdGhlIHNoYWRvdyB0cmVlLAorCSAqIHdhaXRpbmcgZm9yIGEgam91cm5hbCBjb21taXQuCisJICovCisJaWYgKGJ0cmVlX2xvb2t1cDY0KCZzdXBlci0+c19zaGFkb3dfdHJlZS5vbGQsIG9mcykpCisJCXJldHVybiAyOworCXJldHVybiAwOworfQorCitpbnQgbG9nZnNfcmVhZHBhZ2Vfbm9sb2NrKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OworCWludCByZXQgPSAtRUlPOworCisJcmV0ID0gbG9nZnNfcmVhZF9ibG9jayhpbm9kZSwgcGFnZSwgUkVBRCk7CisKKwlpZiAocmV0KSB7CisJCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOworCQlTZXRQYWdlRXJyb3IocGFnZSk7CisJfSBlbHNlIHsKKwkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCQlDbGVhclBhZ2VFcnJvcihwYWdlKTsKKwl9CisJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGxvZ2ZzX3Jlc2VydmVfYnl0ZXMoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGJ5dGVzKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihpbm9kZS0+aV9zYik7CisJdTY0IGF2YWlsYWJsZSA9IHN1cGVyLT5zX2ZyZWVfYnl0ZXMgKyBzdXBlci0+c19kaXJ0eV9mcmVlX2J5dGVzCisJCQktIHN1cGVyLT5zX2RpcnR5X3VzZWRfYnl0ZXMgLSBzdXBlci0+c19kaXJ0eV9wYWdlczsKKworCWlmICghYnl0ZXMpCisJCXJldHVybiAwOworCisJaWYgKGF2YWlsYWJsZSA8IGJ5dGVzKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWlmIChhdmFpbGFibGUgPCBieXRlcyArIHN1cGVyLT5zX3Jvb3RfcmVzZXJ2ZSAmJgorCQkJIWNhcGFibGUoQ0FQX1NZU19SRVNPVVJDRSkpCisJCXJldHVybiAtRU5PU1BDOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBnZXRfcGFnZV9yZXNlcnZlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihpbm9kZS0+aV9zYik7CisJaW50IHJldDsKKworCWlmIChsb2dmc19ibG9jayhwYWdlKSAmJiBsb2dmc19ibG9jayhwYWdlKS0+cmVzZXJ2ZWRfYnl0ZXMpCisJCXJldHVybiAwOworCisJbG9nZnNfZ2V0X3dibG9ja3MoaW5vZGUtPmlfc2IsIHBhZ2UsIFdGX0xPQ0spOworCXJldCA9IGxvZ2ZzX3Jlc2VydmVfYnl0ZXMoaW5vZGUsIDYgKiBMT0dGU19NQVhfT0JKRUNUU0laRSk7CisJaWYgKCFyZXQpIHsKKwkJYWxsb2NfZGF0YV9ibG9jayhpbm9kZSwgcGFnZSk7CisJCWxvZ2ZzX2Jsb2NrKHBhZ2UpLT5yZXNlcnZlZF9ieXRlcyArPSA2ICogTE9HRlNfTUFYX09CSkVDVFNJWkU7CisJCXN1cGVyLT5zX2RpcnR5X3BhZ2VzICs9IDYgKiBMT0dGU19NQVhfT0JKRUNUU0laRTsKKwl9CisJbG9nZnNfcHV0X3dibG9ja3MoaW5vZGUtPmlfc2IsIHBhZ2UsIFdGX0xPQ0spOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBXZSBhcmUgcHJvdGVjdGVkIGJ5IHdyaXRlIGxvY2suICBQdXNoIHZpY3RpbXMgdXAgdG8gc3VwZXJibG9jayBsZXZlbAorICogYW5kIHJlbGVhc2UgdHJhbnNhY3Rpb24gd2hlbiBhcHByb3ByaWF0ZS4KKyAqLworLyogRklYTUU6IFRoaXMgaXMgY3VycmVudGx5IGNhbGxlZCBmcm9tIHRoZSB3cm9uZyBzcG90cy4gKi8KK3N0YXRpYyB2b2lkIGxvZ2ZzX2hhbmRsZV90cmFuc2FjdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQlzdHJ1Y3QgbG9nZnNfdHJhbnNhY3Rpb24gKnRhKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihpbm9kZS0+aV9zYik7CisKKwlpZiAoIXRhKQorCQlyZXR1cm47CisJbG9nZnNfaW5vZGUoaW5vZGUpLT5saV9ibG9jay0+dGEgPSBOVUxMOworCisJaWYgKGlub2RlLT5pX2lubyAhPSBMT0dGU19JTk9fTUFTVEVSKSB7CisJCUJVRygpOyAvKiBGSVhNRTogWWVzLCB0aGlzIG5lZWRzIG1vcmUgdGhvdWdodCAqLworCQkvKiBqdXN0IHJlbWVtYmVyIHRoZSB0cmFuc2FjdGlvbiB1bnRpbCBpbm9kZSBpcyB3cml0dGVuICovCisJCS8vQlVHX09OKGxvZ2ZzX2lub2RlKGlub2RlKS0+bGlfdHJhbnNhY3Rpb24pOworCQkvL2xvZ2ZzX2lub2RlKGlub2RlKS0+bGlfdHJhbnNhY3Rpb24gPSB0YTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAodGEtPnN0YXRlKSB7CisJY2FzZSBDUkVBVEVfMTogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBVTkxJTktfMToKKwkJQlVHX09OKHN1cGVyLT5zX3ZpY3RpbV9pbm8pOworCQlzdXBlci0+c192aWN0aW1faW5vID0gdGEtPmlubzsKKwkJYnJlYWs7CisJY2FzZSBDUkVBVEVfMjogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBVTkxJTktfMjoKKwkJQlVHX09OKHN1cGVyLT5zX3ZpY3RpbV9pbm8gIT0gdGEtPmlubyk7CisJCXN1cGVyLT5zX3ZpY3RpbV9pbm8gPSAwOworCQkvKiB0cmFuc2FjdGlvbiBlbmRzIGhlcmUgLSBmcmVlIGl0ICovCisJCWtmcmVlKHRhKTsKKwkJYnJlYWs7CisJY2FzZSBDUk9TU19SRU5BTUVfMToKKwkJQlVHX09OKHN1cGVyLT5zX3JlbmFtZV9kaXIpOworCQlCVUdfT04oc3VwZXItPnNfcmVuYW1lX3Bvcyk7CisJCXN1cGVyLT5zX3JlbmFtZV9kaXIgPSB0YS0+ZGlyOworCQlzdXBlci0+c19yZW5hbWVfcG9zID0gdGEtPnBvczsKKwkJYnJlYWs7CisJY2FzZSBDUk9TU19SRU5BTUVfMjoKKwkJQlVHX09OKHN1cGVyLT5zX3JlbmFtZV9kaXIgIT0gdGEtPmRpcik7CisJCUJVR19PTihzdXBlci0+c19yZW5hbWVfcG9zICE9IHRhLT5wb3MpOworCQlzdXBlci0+c19yZW5hbWVfZGlyID0gMDsKKwkJc3VwZXItPnNfcmVuYW1lX3BvcyA9IDA7CisJCWtmcmVlKHRhKTsKKwkJYnJlYWs7CisJY2FzZSBUQVJHRVRfUkVOQU1FXzE6CisJCUJVR19PTihzdXBlci0+c19yZW5hbWVfZGlyKTsKKwkJQlVHX09OKHN1cGVyLT5zX3JlbmFtZV9wb3MpOworCQlCVUdfT04oc3VwZXItPnNfdmljdGltX2lubyk7CisJCXN1cGVyLT5zX3JlbmFtZV9kaXIgPSB0YS0+ZGlyOworCQlzdXBlci0+c19yZW5hbWVfcG9zID0gdGEtPnBvczsKKwkJc3VwZXItPnNfdmljdGltX2lubyA9IHRhLT5pbm87CisJCWJyZWFrOworCWNhc2UgVEFSR0VUX1JFTkFNRV8yOgorCQlCVUdfT04oc3VwZXItPnNfcmVuYW1lX2RpciAhPSB0YS0+ZGlyKTsKKwkJQlVHX09OKHN1cGVyLT5zX3JlbmFtZV9wb3MgIT0gdGEtPnBvcyk7CisJCUJVR19PTihzdXBlci0+c192aWN0aW1faW5vICE9IHRhLT5pbm8pOworCQlzdXBlci0+c19yZW5hbWVfZGlyID0gMDsKKwkJc3VwZXItPnNfcmVuYW1lX3BvcyA9IDA7CisJCWJyZWFrOworCWNhc2UgVEFSR0VUX1JFTkFNRV8zOgorCQlCVUdfT04oc3VwZXItPnNfcmVuYW1lX2Rpcik7CisJCUJVR19PTihzdXBlci0+c19yZW5hbWVfcG9zKTsKKwkJQlVHX09OKHN1cGVyLT5zX3ZpY3RpbV9pbm8gIT0gdGEtPmlubyk7CisJCXN1cGVyLT5zX3ZpY3RpbV9pbm8gPSAwOworCQlrZnJlZSh0YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKworLyoKKyAqIE5vdCBzdHJpY3RseSBhIHJlc2VydmF0aW9uLCBidXQgcmF0aGVyIGEgY2hlY2sgdGhhdCB3ZSBzdGlsbCBoYXZlIGVub3VnaAorICogc3BhY2UgdG8gc2F0aXNmeSB0aGUgd3JpdGUuCisgKi8KK3N0YXRpYyBpbnQgbG9nZnNfcmVzZXJ2ZV9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgaW50IGJsb2NrcykKK3sKKwlyZXR1cm4gbG9nZnNfcmVzZXJ2ZV9ieXRlcyhpbm9kZSwgYmxvY2tzICogTE9HRlNfTUFYX09CSkVDVFNJWkUpOworfQorCitzdHJ1Y3Qgd3JpdGVfY29udHJvbCB7CisJdTY0IG9mczsKKwlsb25nIGZsYWdzOworfTsKKworc3RhdGljIHN0cnVjdCBsb2dmc19zaGFkb3cgKmFsbG9jX3NoYWRvdyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgYml4LAorCQlsZXZlbF90IGxldmVsLCB1NjQgb2xkX29mcykKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBsb2dmc19zaGFkb3cgKnNoYWRvdzsKKworCXNoYWRvdyA9IG1lbXBvb2xfYWxsb2Moc3VwZXItPnNfc2hhZG93X3Bvb2wsIEdGUF9OT0ZTKTsKKwltZW1zZXQoc2hhZG93LCAwLCBzaXplb2YoKnNoYWRvdykpOworCXNoYWRvdy0+aW5vID0gaW5vZGUtPmlfaW5vOworCXNoYWRvdy0+Yml4ID0gYml4OworCXNoYWRvdy0+Z2NfbGV2ZWwgPSBleHBhbmRfbGV2ZWwoaW5vZGUtPmlfaW5vLCBsZXZlbCk7CisJc2hhZG93LT5vbGRfb2ZzID0gb2xkX29mcyAmIH5MT0dGU19GVUxMWV9QT1BVTEFURUQ7CisJcmV0dXJuIHNoYWRvdzsKK30KKworc3RhdGljIHZvaWQgZnJlZV9zaGFkb3coc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGxvZ2ZzX3NoYWRvdyAqc2hhZG93KQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihpbm9kZS0+aV9zYik7CisKKwltZW1wb29sX2ZyZWUoc2hhZG93LCBzdXBlci0+c19zaGFkb3dfcG9vbCk7Cit9CisKKy8qKgorICogZmlsbF9zaGFkb3dfdHJlZSAtIFByb3BhZ2F0ZSBzaGFkb3cgdHJlZSBjaGFuZ2VzIGR1ZSB0byBhIHdyaXRlCisgKiBAaW5vZGU6CUlub2RlIG93bmluZyB0aGUgcGFnZQorICogQHBhZ2U6CVN0cnVjdCBwYWdlIHRoYXQgd2FzIHdyaXR0ZW4KKyAqIEBzaGFkb3c6CVNoYWRvdyBmb3IgdGhlIGN1cnJlbnQgd3JpdGUKKyAqCisgKiBXcml0ZXMgaW4gbG9nZnMgY2FuIHJlc3VsdCBpbiB0d28gc2VtaS12YWxpZCBvYmplY3RzLiAgVGhlIG9sZCBvYmplY3QKKyAqIGlzIHN0aWxsIHZhbGlkIGFzIGxvbmcgYXMgaXQgY2FuIGJlIHJlYWNoZWQgYnkgZm9sbG93aW5nIHBvaW50ZXJzIG9uCisgKiB0aGUgbWVkaXVtLiAgT25seSB3aGVuIHdyaXRlcyBwcm9wYWdhdGUgYWxsIHRoZSB3YXkgdXAgdG8gdGhlIGpvdXJuYWwKKyAqIGhhcyB0aGUgbmV3IG9iamVjdCBzYWZlbHkgcmVwbGFjZWQgdGhlIG9sZCBvbmUuCisgKgorICogVG8gaGFuZGxlIHRoaXMgcHJvYmxlbSwgYSBzdHJ1Y3QgbG9nZnNfc2hhZG93IGlzIHVzZWQgdG8gcmVwcmVzZW50CisgKiBldmVyeSBzaW5nbGUgd3JpdGUuICBJdCBpcyBhdHRhY2hlZCB0byB0aGUgaW5kaXJlY3QgYmxvY2ssIHdoaWNoIGlzCisgKiBtYXJrZWQgZGlydHkuICBXaGVuIHRoZSBpbmRpcmVjdCBibG9jayBpcyB3cml0dGVuLCBpdHMgc2hhZG93cyBhcmUKKyAqIGhhbmRlZCB1cCB0byB0aGUgbmV4dCBpbmRpcmVjdCBibG9jayAob3IgaW5vZGUpLiAgVW50aW1hdGVseSB0aGV5CisgKiB3aWxsIHJlYWNoIHRoZSBtYXN0ZXIgaW5vZGUgYW5kIGJlIGZyZWVkIHVwb24gam91cm5hbCBjb21taXQuCisgKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGEgc2luZ2xlIHN0ZXAgaW4gdGhlIHByb3BhZ2F0aW9uLiAgSXQgYWRkcyB0aGUKKyAqIHNoYWRvdyBmb3IgdGhlIGN1cnJlbnQgd3JpdGUgdG8gdGhlIHRyZWUsIGFsb25nIHdpdGggYW55IHNoYWRvd3MgaW4KKyAqIHRoZSBwYWdlJ3MgdHJlZSwgaW4gY2FzZSBpdCB3YXMgYW4gaW5kaXJlY3QgYmxvY2suICBJZiBhIHBhZ2UgaXMKKyAqIHdyaXR0ZW4sIHRoZSBpbm9kZSBwYXJhbWV0ZXIgaXMgbGVmdCBOVUxMLCBpZiBhbiBpbm9kZSBpcyB3cml0dGVuLAorICogdGhlIHBhZ2UgcGFyYW1ldGVyIGlzIGxlZnQgTlVMTC4KKyAqLworc3RhdGljIHZvaWQgZmlsbF9zaGFkb3dfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJc3RydWN0IGxvZ2ZzX3NoYWRvdyAqc2hhZG93KQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihpbm9kZS0+aV9zYik7CisJc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jayA9IGxvZ2ZzX2Jsb2NrKHBhZ2UpOworCXN0cnVjdCBzaGFkb3dfdHJlZSAqdHJlZSA9ICZzdXBlci0+c19zaGFkb3dfdHJlZTsKKworCWlmIChQYWdlUHJpdmF0ZShwYWdlKSkgeworCQlpZiAoYmxvY2stPmFsaWFzX21hcCkKKwkJCXN1cGVyLT5zX25vX29iamVjdF9hbGlhc2VzIC09IGJpdG1hcF93ZWlnaHQoCisJCQkJCWJsb2NrLT5hbGlhc19tYXAsIExPR0ZTX0JMT0NLX0ZBQ1RPUik7CisJCWxvZ2ZzX2hhbmRsZV90cmFuc2FjdGlvbihpbm9kZSwgYmxvY2stPnRhKTsKKwkJYmxvY2stPm9wcy0+ZnJlZV9ibG9jayhpbm9kZS0+aV9zYiwgYmxvY2spOworCX0KKwlpZiAoc2hhZG93KSB7CisJCWlmIChzaGFkb3ctPm9sZF9vZnMpCisJCQlidHJlZV9pbnNlcnQ2NCgmdHJlZS0+b2xkLCBzaGFkb3ctPm9sZF9vZnMsIHNoYWRvdywKKwkJCQkJR0ZQX05PRlMpOworCQllbHNlCisJCQlidHJlZV9pbnNlcnQ2NCgmdHJlZS0+bmV3LCBzaGFkb3ctPm5ld19vZnMsIHNoYWRvdywKKwkJCQkJR0ZQX05PRlMpOworCisJCXN1cGVyLT5zX2RpcnR5X3VzZWRfYnl0ZXMgKz0gc2hhZG93LT5uZXdfbGVuOworCQlzdXBlci0+c19kaXJ0eV9mcmVlX2J5dGVzICs9IHNoYWRvdy0+b2xkX2xlbjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxvZ2ZzX3NldF9hbGlhcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrLAorCQlsb25nIGNoaWxkX25vKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisKKwlpZiAoYmxvY2stPmlub2RlICYmIGJsb2NrLT5pbm9kZS0+aV9pbm8gPT0gTE9HRlNfSU5PX01BU1RFUikgeworCQkvKiBBbGlhc2VzIGluIHRoZSBtYXN0ZXIgaW5vZGUgYXJlIHBvaW50bGVzcy4gKi8KKwkJcmV0dXJuOworCX0KKworCWlmICghdGVzdF9iaXQoY2hpbGRfbm8sIGJsb2NrLT5hbGlhc19tYXApKSB7CisJCXNldF9iaXQoY2hpbGRfbm8sIGJsb2NrLT5hbGlhc19tYXApOworCQlzdXBlci0+c19ub19vYmplY3RfYWxpYXNlcysrOworCX0KKwlsaXN0X21vdmVfdGFpbCgmYmxvY2stPmFsaWFzX2xpc3QsICZzdXBlci0+c19vYmplY3RfYWxpYXMpOworfQorCisvKgorICogT2JqZWN0IGFsaWFzZXMgY2FuIGFuZCBvZnRlbiBkbyBjaGFuZ2UgdGhlIHNpemUgYW5kIG9jY3VwaWVkIHNwYWNlIG9mIGEKKyAqIGZpbGUuICBTbyBub3Qgb25seSBkbyB3ZSBoYXZlIHRvIGNoYW5nZSB0aGUgcG9pbnRlcnMsIHdlIGFsc28gaGF2ZSB0bworICogY2hhbmdlIGlub2RlLT5pX3NpemUgYW5kIGxpLT5saV91c2VkX2J5dGVzLiAgV2hpY2ggaXMgZG9uZSBieSBzZXR0aW5nCisgKiBhbm90aGVyIHR3byBvYmplY3QgYWxpYXNlcyBmb3IgdGhlIGlub2RlIGl0c2VsZi4KKyAqLworc3RhdGljIHZvaWQgc2V0X2l1c2VkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBsb2dmc19zaGFkb3cgKnNoYWRvdykKK3sKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCisJaWYgKHNoYWRvdy0+bmV3X2xlbiA9PSBzaGFkb3ctPm9sZF9sZW4pCisJCXJldHVybjsKKworCWFsbG9jX2lub2RlX2Jsb2NrKGlub2RlKTsKKwlsaS0+bGlfdXNlZF9ieXRlcyArPSBzaGFkb3ctPm5ld19sZW4gLSBzaGFkb3ctPm9sZF9sZW47CisJX19sb2dmc19zZXRfYmxvY2tzKGlub2RlKTsKKwlsb2dmc19zZXRfYWxpYXMoaW5vZGUtPmlfc2IsIGxpLT5saV9ibG9jaywgSU5PREVfVVNFRF9PRlMpOworCWxvZ2ZzX3NldF9hbGlhcyhpbm9kZS0+aV9zYiwgbGktPmxpX2Jsb2NrLCBJTk9ERV9TSVpFX09GUyk7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfd3JpdGVfaTAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCXN0cnVjdCB3cml0ZV9jb250cm9sICp3YykKK3sKKwlzdHJ1Y3QgbG9nZnNfc2hhZG93ICpzaGFkb3c7CisJdTY0IGJpeDsKKwlsZXZlbF90IGxldmVsOworCWludCBmdWxsLCBlcnIgPSAwOworCisJbG9nZnNfdW5wYWNrX2luZGV4KHBhZ2UtPmluZGV4LCAmYml4LCAmbGV2ZWwpOworCWlmICh3Yy0+b2ZzID09IDApCisJCWlmIChsb2dmc19yZXNlcnZlX2Jsb2Nrcyhpbm9kZSwgMSkpCisJCQlyZXR1cm4gLUVOT1NQQzsKKworCXNoYWRvdyA9IGFsbG9jX3NoYWRvdyhpbm9kZSwgYml4LCBsZXZlbCwgd2MtPm9mcyk7CisJaWYgKHdjLT5mbGFncyAmIFdGX1dSSVRFKQorCQllcnIgPSBsb2dmc19zZWdtZW50X3dyaXRlKGlub2RlLCBwYWdlLCBzaGFkb3cpOworCWlmICh3Yy0+ZmxhZ3MgJiBXRl9ERUxFVEUpCisJCWxvZ2ZzX3NlZ21lbnRfZGVsZXRlKGlub2RlLCBzaGFkb3cpOworCWlmIChlcnIpIHsKKwkJZnJlZV9zaGFkb3coaW5vZGUsIHNoYWRvdyk7CisJCXJldHVybiBlcnI7CisJfQorCisJc2V0X2l1c2VkKGlub2RlLCBzaGFkb3cpOworCWZ1bGwgPSAxOworCWlmIChsZXZlbCAhPSAwKSB7CisJCWFsbG9jX2luZGlyZWN0X2Jsb2NrKGlub2RlLCBwYWdlLCAwKTsKKwkJZnVsbCA9IGxvZ2ZzX2Jsb2NrKHBhZ2UpLT5mdWxsID09IExPR0ZTX0JMT0NLX0ZBQ1RPUjsKKwl9CisJZmlsbF9zaGFkb3dfdHJlZShpbm9kZSwgcGFnZSwgc2hhZG93KTsKKwl3Yy0+b2ZzID0gc2hhZG93LT5uZXdfb2ZzOworCWlmICh3Yy0+b2ZzICYmIGZ1bGwpCisJCXdjLT5vZnMgfD0gTE9HRlNfRlVMTFlfUE9QVUxBVEVEOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX3dyaXRlX2RpcmVjdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCXN0cnVjdCB3cml0ZV9jb250cm9sIHdjID0geworCQkub2ZzID0gbGktPmxpX2RhdGFbcGFnZS0+aW5kZXhdLAorCQkuZmxhZ3MgPSBmbGFncywKKwl9OworCWludCBlcnI7CisKKwlhbGxvY19pbm9kZV9ibG9jayhpbm9kZSk7CisKKwllcnIgPSBsb2dmc193cml0ZV9pMChpbm9kZSwgcGFnZSwgJndjKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJbGktPmxpX2RhdGFbcGFnZS0+aW5kZXhdID0gd2Mub2ZzOworCWxvZ2ZzX3NldF9hbGlhcyhpbm9kZS0+aV9zYiwgbGktPmxpX2Jsb2NrLAorCQkJcGFnZS0+aW5kZXggKyBJTk9ERV9QT0lOVEVSX09GUyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHRyX2NoYW5nZSh1NjQgb2ZzLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrID0gbG9nZnNfYmxvY2socGFnZSk7CisJaW50IGVtcHR5MCwgZW1wdHkxLCBmdWxsMCwgZnVsbDE7CisKKwllbXB0eTAgPSBvZnMgPT0gMDsKKwllbXB0eTEgPSBibG9jay0+cGFydGlhbCA9PSAwOworCWlmIChlbXB0eTAgIT0gZW1wdHkxKQorCQlyZXR1cm4gMTsKKworCS8qIFRoZSAhISBpcyBuZWNlc3NhcnkgdG8gc2hyaW5rIHJlc3VsdCB0byBpbnQgKi8KKwlmdWxsMCA9ICEhKG9mcyAmIExPR0ZTX0ZVTExZX1BPUFVMQVRFRCk7CisJZnVsbDEgPSBibG9jay0+ZnVsbCA9PSBMT0dGU19CTE9DS19GQUNUT1I7CisJaWYgKGZ1bGwwICE9IGZ1bGwxKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2xvZ2ZzX3dyaXRlX3JlYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJc3RydWN0IHdyaXRlX2NvbnRyb2wgKnRoaXNfd2MsCisJCXBnb2ZmX3QgYml4LCBsZXZlbF90IHRhcmdldF9sZXZlbCwgbGV2ZWxfdCBsZXZlbCkKK3sKKwlpbnQgcmV0LCBwYWdlX2VtcHR5ID0gMDsKKwlpbnQgY2hpbGRfbm8gPSBnZXRfYml0cyhiaXgsIFNVQkxFVkVMKGxldmVsKSk7CisJc3RydWN0IHBhZ2UgKmlwYWdlOworCXN0cnVjdCB3cml0ZV9jb250cm9sIGNoaWxkX3djID0geworCQkuZmxhZ3MgPSB0aGlzX3djLT5mbGFncywKKwl9OworCisJaXBhZ2UgPSBsb2dmc19nZXRfd3JpdGVfcGFnZShpbm9kZSwgYml4LCBsZXZlbCk7CisJaWYgKCFpcGFnZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAodGhpc193Yy0+b2ZzKSB7CisJCXJldCA9IGxvZ2ZzX3NlZ21lbnRfcmVhZChpbm9kZSwgaXBhZ2UsIHRoaXNfd2MtPm9mcywgYml4LCBsZXZlbCk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKCFQYWdlVXB0b2RhdGUoaXBhZ2UpKSB7CisJCXBhZ2VfZW1wdHkgPSAxOworCQlsb2dmc19yZWFkX2VtcHR5KGlwYWdlKTsKKwl9CisKKwljaGlsZF93Yy5vZnMgPSBibG9ja19nZXRfcG9pbnRlcihpcGFnZSwgY2hpbGRfbm8pOworCisJaWYgKChfX2ZvcmNlIHU4KWxldmVsLTEgPiAoX19mb3JjZSB1OCl0YXJnZXRfbGV2ZWwpCisJCXJldCA9IF9fbG9nZnNfd3JpdGVfcmVjKGlub2RlLCBwYWdlLCAmY2hpbGRfd2MsIGJpeCwKKwkJCQl0YXJnZXRfbGV2ZWwsIFNVQkxFVkVMKGxldmVsKSk7CisJZWxzZQorCQlyZXQgPSBsb2dmc193cml0ZV9pMChpbm9kZSwgcGFnZSwgJmNoaWxkX3djKTsKKworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJYWxsb2NfaW5kaXJlY3RfYmxvY2soaW5vZGUsIGlwYWdlLCBwYWdlX2VtcHR5KTsKKwlibG9ja19zZXRfcG9pbnRlcihpcGFnZSwgY2hpbGRfbm8sIGNoaWxkX3djLm9mcyk7CisJLyogRklYTUU6IGZpcnN0IGNvbmRpdGlvbiBzZWVtcyBzdXBlcmZsdW91cyAqLworCWlmIChjaGlsZF93Yy5vZnMgfHwgbG9nZnNfYmxvY2soaXBhZ2UpLT5wYXJ0aWFsKQorCQl0aGlzX3djLT5mbGFncyB8PSBXRl9XUklURTsKKwkvKiB0aGUgY29uZGl0aW9uIG9uIHRoaXNfd2MtPm9mcyBlbnN1cmVzIHRoYXQgd2Ugd29uJ3QgY29uc3VtZSBleHRyYQorCSAqIHNwYWNlIGZvciBpbmRpcmVjdCBibG9ja3MgaW4gdGhlIGZ1dHVyZSwgd2hpY2ggd2UgY2Fubm90IHJlc2VydmUgKi8KKwlpZiAoIXRoaXNfd2MtPm9mcyB8fCBwdHJfY2hhbmdlKHRoaXNfd2MtPm9mcywgaXBhZ2UpKQorCQlyZXQgPSBsb2dmc193cml0ZV9pMChpbm9kZSwgaXBhZ2UsIHRoaXNfd2MpOworCWVsc2UKKwkJbG9nZnNfc2V0X2FsaWFzKGlub2RlLT5pX3NiLCBsb2dmc19ibG9jayhpcGFnZSksIGNoaWxkX25vKTsKK291dDoKKwlsb2dmc19wdXRfd3JpdGVfcGFnZShpcGFnZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBsb2dmc193cml0ZV9yZWMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCXBnb2ZmX3QgYml4LCBsZXZlbF90IHRhcmdldF9sZXZlbCwgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCXN0cnVjdCB3cml0ZV9jb250cm9sIHdjID0geworCQkub2ZzID0gbGktPmxpX2RhdGFbSU5ESVJFQ1RfSU5ERVhdLAorCQkuZmxhZ3MgPSBmbGFncywKKwl9OworCWludCByZXQ7CisKKwlhbGxvY19pbm9kZV9ibG9jayhpbm9kZSk7CisKKwlpZiAobGktPmxpX2hlaWdodCA+IChfX2ZvcmNlIHU4KXRhcmdldF9sZXZlbCkKKwkJcmV0ID0gX19sb2dmc193cml0ZV9yZWMoaW5vZGUsIHBhZ2UsICZ3YywgYml4LCB0YXJnZXRfbGV2ZWwsCisJCQkJTEVWRUwobGktPmxpX2hlaWdodCkpOworCWVsc2UKKwkJcmV0ID0gbG9nZnNfd3JpdGVfaTAoaW5vZGUsIHBhZ2UsICZ3Yyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChsaS0+bGlfZGF0YVtJTkRJUkVDVF9JTkRFWF0gIT0gd2Mub2ZzKSB7CisJCWxpLT5saV9kYXRhW0lORElSRUNUX0lOREVYXSA9IHdjLm9mczsKKwkJbG9nZnNfc2V0X2FsaWFzKGlub2RlLT5pX3NiLCBsaS0+bGlfYmxvY2ssCisJCQkJSU5ESVJFQ1RfSU5ERVggKyBJTk9ERV9QT0lOVEVSX09GUyk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgbG9nZnNfYWRkX3RyYW5zYWN0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBsb2dmc190cmFuc2FjdGlvbiAqdGEpCit7CisJYWxsb2NfaW5vZGVfYmxvY2soaW5vZGUpOworCWxvZ2ZzX2lub2RlKGlub2RlKS0+bGlfYmxvY2stPnRhID0gdGE7Cit9CisKK3ZvaWQgbG9nZnNfZGVsX3RyYW5zYWN0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBsb2dmc190cmFuc2FjdGlvbiAqdGEpCit7CisJc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jayA9IGxvZ2ZzX2lub2RlKGlub2RlKS0+bGlfYmxvY2s7CisKKwlpZiAoYmxvY2sgJiYgYmxvY2stPnRhKQorCQlibG9jay0+dGEgPSBOVUxMOworfQorCitzdGF0aWMgaW50IGdyb3dfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGJpeCwgbGV2ZWxfdCBsZXZlbCkKK3sKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCXU4IGhlaWdodCA9IChfX2ZvcmNlIHU4KWxldmVsOworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCB3cml0ZV9jb250cm9sIHdjID0geworCQkuZmxhZ3MgPSBXRl9XUklURSwKKwl9OworCWludCBlcnI7CisKKwlCVUdfT04oaGVpZ2h0ID4gNSB8fCBsaS0+bGlfaGVpZ2h0ID4gNSk7CisJd2hpbGUgKGhlaWdodCA+IGxpLT5saV9oZWlnaHQgfHwgYml4ID49IG1heGJpeChsaS0+bGlfaGVpZ2h0KSkgeworCQlwYWdlID0gbG9nZnNfZ2V0X3dyaXRlX3BhZ2UoaW5vZGUsIEkwX0JMT0NLUyArIDEsCisJCQkJTEVWRUwobGktPmxpX2hlaWdodCArIDEpKTsKKwkJaWYgKCFwYWdlKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCWxvZ2ZzX3JlYWRfZW1wdHkocGFnZSk7CisJCWFsbG9jX2luZGlyZWN0X2Jsb2NrKGlub2RlLCBwYWdlLCAxKTsKKwkJYmxvY2tfc2V0X3BvaW50ZXIocGFnZSwgMCwgbGktPmxpX2RhdGFbSU5ESVJFQ1RfSU5ERVhdKTsKKwkJZXJyID0gbG9nZnNfd3JpdGVfaTAoaW5vZGUsIHBhZ2UsICZ3Yyk7CisJCWxvZ2ZzX3B1dF93cml0ZV9wYWdlKHBhZ2UpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJbGktPmxpX2RhdGFbSU5ESVJFQ1RfSU5ERVhdID0gd2Mub2ZzOworCQl3Yy5vZnMgPSAwOworCQlsaS0+bGlfaGVpZ2h0Kys7CisJCWxvZ2ZzX3NldF9hbGlhcyhpbm9kZS0+aV9zYiwgbGktPmxpX2Jsb2NrLCBJTk9ERV9IRUlHSFRfT0ZTKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19sb2dmc193cml0ZV9idWYoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UsIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKGlub2RlLT5pX3NiKTsKKwlwZ29mZl90IGluZGV4ID0gcGFnZS0+aW5kZXg7CisJdTY0IGJpeDsKKwlsZXZlbF90IGxldmVsOworCWludCBlcnI7CisKKwlmbGFncyB8PSBXRl9XUklURSB8IFdGX0RFTEVURTsKKwlpbm9kZS0+aV9jdGltZSA9IGlub2RlLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOworCisJbG9nZnNfdW5wYWNrX2luZGV4KGluZGV4LCAmYml4LCAmbGV2ZWwpOworCWlmIChsb2dmc19ibG9jayhwYWdlKSAmJiBsb2dmc19ibG9jayhwYWdlKS0+cmVzZXJ2ZWRfYnl0ZXMpCisJCXN1cGVyLT5zX2RpcnR5X3BhZ2VzIC09IGxvZ2ZzX2Jsb2NrKHBhZ2UpLT5yZXNlcnZlZF9ieXRlczsKKworCWlmIChpbmRleCA8IEkwX0JMT0NLUykKKwkJcmV0dXJuIGxvZ2ZzX3dyaXRlX2RpcmVjdChpbm9kZSwgcGFnZSwgZmxhZ3MpOworCisJYml4ID0gYWRqdXN0X2JpeChiaXgsIGxldmVsKTsKKwllcnIgPSBncm93X2lub2RlKGlub2RlLCBiaXgsIGxldmVsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXJldHVybiBsb2dmc193cml0ZV9yZWMoaW5vZGUsIHBhZ2UsIGJpeCwgbGV2ZWwsIGZsYWdzKTsKK30KKworaW50IGxvZ2ZzX3dyaXRlX2J1ZihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJaW50IHJldDsKKworCWxvZ2ZzX2dldF93YmxvY2tzKHNiLCBwYWdlLCBmbGFncyAmIFdGX0xPQ0spOworCXJldCA9IF9fbG9nZnNfd3JpdGVfYnVmKGlub2RlLCBwYWdlLCBmbGFncyk7CisJbG9nZnNfcHV0X3dibG9ja3Moc2IsIHBhZ2UsIGZsYWdzICYgV0ZfTE9DSyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2xvZ2ZzX2RlbGV0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlsb25nIGZsYWdzID0gV0ZfREVMRVRFOworCisJaW5vZGUtPmlfY3RpbWUgPSBpbm9kZS0+aV9tdGltZSA9IENVUlJFTlRfVElNRTsKKworCWlmIChwYWdlLT5pbmRleCA8IEkwX0JMT0NLUykKKwkJcmV0dXJuIGxvZ2ZzX3dyaXRlX2RpcmVjdChpbm9kZSwgcGFnZSwgZmxhZ3MpOworCXJldHVybiBsb2dmc193cml0ZV9yZWMoaW5vZGUsIHBhZ2UsIHBhZ2UtPmluZGV4LCAwLCBmbGFncyk7Cit9CisKK2ludCBsb2dmc19kZWxldGUoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCwKKwkJc3RydWN0IHNoYWRvd190cmVlICpzaGFkb3dfdHJlZSkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IHJldDsKKworCXBhZ2UgPSBsb2dmc19nZXRfcmVhZF9wYWdlKGlub2RlLCBpbmRleCwgMCk7CisJaWYgKCFwYWdlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWxvZ2ZzX2dldF93YmxvY2tzKHNiLCBwYWdlLCAxKTsKKwlyZXQgPSBfX2xvZ2ZzX2RlbGV0ZShpbm9kZSwgcGFnZSk7CisJbG9nZnNfcHV0X3dibG9ja3Moc2IsIHBhZ2UsIDEpOworCisJbG9nZnNfcHV0X3JlYWRfcGFnZShwYWdlKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIFJld3JpdGUgY2Fubm90IG1hcmsgdGhlIGlub2RlIGRpcnR5IGJ1dCBoYXMgdG8gd3JpdGUgaXQgaW1tZWRpYXRseS4gKi8KK2ludCBsb2dmc19yZXdyaXRlX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBiaXgsIHU2NCBvZnMsCisJCWdjX2xldmVsX3QgZ2NfbGV2ZWwsIGxvbmcgZmxhZ3MpCit7CisJbGV2ZWxfdCBsZXZlbCA9IHNocmlua19sZXZlbChnY19sZXZlbCk7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IGVycjsKKworCXBhZ2UgPSBsb2dmc19nZXRfd3JpdGVfcGFnZShpbm9kZSwgYml4LCBsZXZlbCk7CisJaWYgKCFwYWdlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVyciA9IGxvZ2ZzX3NlZ21lbnRfcmVhZChpbm9kZSwgcGFnZSwgb2ZzLCBiaXgsIGxldmVsKTsKKwlpZiAoIWVycikgeworCQlpZiAobGV2ZWwgIT0gMCkKKwkJCWFsbG9jX2luZGlyZWN0X2Jsb2NrKGlub2RlLCBwYWdlLCAwKTsKKwkJZXJyID0gbG9nZnNfd3JpdGVfYnVmKGlub2RlLCBwYWdlLCBmbGFncyk7CisJfQorCWxvZ2ZzX3B1dF93cml0ZV9wYWdlKHBhZ2UpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdHJ1bmNhdGVfZGF0YV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJdTY0IG9mcywgc3RydWN0IGxvZ2ZzX3NoYWRvdyAqc2hhZG93LCB1NjQgc2l6ZSkKK3sKKwlsb2ZmX3QgcGFnZW9mcyA9IHBhZ2UtPmluZGV4IDw8IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCXU2NCBiaXg7CisJbGV2ZWxfdCBsZXZlbDsKKwlpbnQgZXJyOworCisJLyogRG9lcyB0cnVuY2F0aW9uIGhhcHBlbiB3aXRoaW4gdGhpcyBwYWdlPyAqLworCWlmIChzaXplIDw9IHBhZ2VvZnMgfHwgc2l6ZSAtIHBhZ2VvZnMgPj0gUEFHRV9TSVpFKQorCQlyZXR1cm4gMDsKKworCWxvZ2ZzX3VucGFja19pbmRleChwYWdlLT5pbmRleCwgJmJpeCwgJmxldmVsKTsKKwlCVUdfT04obGV2ZWwgIT0gMCk7CisKKwllcnIgPSBsb2dmc19zZWdtZW50X3JlYWQoaW5vZGUsIHBhZ2UsIG9mcywgYml4LCBsZXZlbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXplcm9fdXNlcl9zZWdtZW50KHBhZ2UsIHNpemUgLSBwYWdlb2ZzLCBQQUdFX0NBQ0hFX1NJWkUpOworCXJldHVybiBsb2dmc19zZWdtZW50X3dyaXRlKGlub2RlLCBwYWdlLCBzaGFkb3cpOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX3RydW5jYXRlX2kwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlLAorCQlzdHJ1Y3Qgd3JpdGVfY29udHJvbCAqd2MsIHU2NCBzaXplKQoreworCXN0cnVjdCBsb2dmc19zaGFkb3cgKnNoYWRvdzsKKwl1NjQgYml4OworCWxldmVsX3QgbGV2ZWw7CisJaW50IGVyciA9IDA7CisKKwlsb2dmc191bnBhY2tfaW5kZXgocGFnZS0+aW5kZXgsICZiaXgsICZsZXZlbCk7CisJQlVHX09OKGxldmVsICE9IDApOworCXNoYWRvdyA9IGFsbG9jX3NoYWRvdyhpbm9kZSwgYml4LCBsZXZlbCwgd2MtPm9mcyk7CisKKwllcnIgPSB0cnVuY2F0ZV9kYXRhX2Jsb2NrKGlub2RlLCBwYWdlLCB3Yy0+b2ZzLCBzaGFkb3csIHNpemUpOworCWlmIChlcnIpIHsKKwkJZnJlZV9zaGFkb3coaW5vZGUsIHNoYWRvdyk7CisJCXJldHVybiBlcnI7CisJfQorCisJbG9nZnNfc2VnbWVudF9kZWxldGUoaW5vZGUsIHNoYWRvdyk7CisJc2V0X2l1c2VkKGlub2RlLCBzaGFkb3cpOworCWZpbGxfc2hhZG93X3RyZWUoaW5vZGUsIHBhZ2UsIHNoYWRvdyk7CisJd2MtPm9mcyA9IHNoYWRvdy0+bmV3X29mczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2dmc190cnVuY2F0ZV9kaXJlY3Qoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHNpemUpCit7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKwlzdHJ1Y3Qgd3JpdGVfY29udHJvbCB3YzsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlpbnQgZTsKKwlpbnQgZXJyOworCisJYWxsb2NfaW5vZGVfYmxvY2soaW5vZGUpOworCisJZm9yIChlID0gSTBfQkxPQ0tTIC0gMTsgZSA+PSAwOyBlLS0pIHsKKwkJaWYgKHNpemUgPiAoZSsxKSAqIExPR0ZTX0JMT0NLU0laRSkKKwkJCWJyZWFrOworCisJCXdjLm9mcyA9IGxpLT5saV9kYXRhW2VdOworCQlpZiAoIXdjLm9mcykKKwkJCWNvbnRpbnVlOworCisJCXBhZ2UgPSBsb2dmc19nZXRfd3JpdGVfcGFnZShpbm9kZSwgZSwgMCk7CisJCWlmICghcGFnZSkKKwkJCXJldHVybiAtRU5PTUVNOworCQllcnIgPSBsb2dmc19zZWdtZW50X3JlYWQoaW5vZGUsIHBhZ2UsIHdjLm9mcywgZSwgMCk7CisJCWlmIChlcnIpIHsKKwkJCWxvZ2ZzX3B1dF93cml0ZV9wYWdlKHBhZ2UpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQllcnIgPSBsb2dmc190cnVuY2F0ZV9pMChpbm9kZSwgcGFnZSwgJndjLCBzaXplKTsKKwkJbG9nZnNfcHV0X3dyaXRlX3BhZ2UocGFnZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWxpLT5saV9kYXRhW2VdID0gd2Mub2ZzOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogRklYTUU6IHRoZXNlIG5lZWQgdG8gYmVjb21lIHBlci1zYiBvbmNlIHdlIHN1cHBvcnQgZGlmZmVyZW50IGJsb2Nrc2l6ZXMgKi8KK3N0YXRpYyB1NjQgX19sb2dmc19zdGVwW10gPSB7CisJMSwKKwlJMV9CTE9DS1MsCisJSTJfQkxPQ0tTLAorCUkzX0JMT0NLUywKK307CisKK3N0YXRpYyB1NjQgX19sb2dmc19zdGFydF9pbmRleFtdID0geworCUkwX0JMT0NLUywKKwlJMV9CTE9DS1MsCisJSTJfQkxPQ0tTLAorCUkzX0JMT0NLUworfTsKKworc3RhdGljIGlubGluZSB1NjQgbG9nZnNfc3RlcChsZXZlbF90IGxldmVsKQoreworCXJldHVybiBfX2xvZ2ZzX3N0ZXBbKF9fZm9yY2UgdTgpbGV2ZWxdOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBsb2dmc19mYWN0b3IodTggbGV2ZWwpCit7CisJcmV0dXJuIF9fbG9nZnNfc3RlcFtsZXZlbF0gKiBMT0dGU19CTE9DS1NJWkU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IGxvZ2ZzX3N0YXJ0X2luZGV4KGxldmVsX3QgbGV2ZWwpCit7CisJcmV0dXJuIF9fbG9nZnNfc3RhcnRfaW5kZXhbKF9fZm9yY2UgdTgpbGV2ZWxdOworfQorCitzdGF0aWMgdm9pZCBsb2dmc191bnBhY2tfcmF3X2luZGV4KHBnb2ZmX3QgaW5kZXgsIHU2NCAqYml4LCBsZXZlbF90ICpsZXZlbCkKK3sKKwlsb2dmc191bnBhY2tfaW5kZXgoaW5kZXgsIGJpeCwgbGV2ZWwpOworCWlmICgqYml4IDw9IGxvZ2ZzX3N0YXJ0X2luZGV4KFNVQkxFVkVMKCpsZXZlbCkpKQorCQkqYml4ID0gMDsKK30KKworc3RhdGljIGludCBfX2xvZ2ZzX3RydW5jYXRlX3JlYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqaXBhZ2UsCisJCXN0cnVjdCB3cml0ZV9jb250cm9sICp0aGlzX3djLCB1NjQgc2l6ZSkKK3sKKwlpbnQgdHJ1bmNhdGVfaGFwcGVuZWQgPSAwOworCWludCBlLCBlcnIgPSAwOworCXU2NCBiaXgsIGNoaWxkX2JpeCwgbmV4dF9iaXg7CisJbGV2ZWxfdCBsZXZlbDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3Qgd3JpdGVfY29udHJvbCBjaGlsZF93YyA9IHsgLyogRklYTUU6IGZsYWdzICovIH07CisKKwlsb2dmc191bnBhY2tfcmF3X2luZGV4KGlwYWdlLT5pbmRleCwgJmJpeCwgJmxldmVsKTsKKwllcnIgPSBsb2dmc19zZWdtZW50X3JlYWQoaW5vZGUsIGlwYWdlLCB0aGlzX3djLT5vZnMsIGJpeCwgbGV2ZWwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlmb3IgKGUgPSBMT0dGU19CTE9DS19GQUNUT1IgLSAxOyBlID49IDA7IGUtLSkgeworCQljaGlsZF9iaXggPSBiaXggKyBlICogbG9nZnNfc3RlcChTVUJMRVZFTChsZXZlbCkpOworCQluZXh0X2JpeCA9IGNoaWxkX2JpeCArIGxvZ2ZzX3N0ZXAoU1VCTEVWRUwobGV2ZWwpKTsKKwkJaWYgKHNpemUgPiBuZXh0X2JpeCAqIExPR0ZTX0JMT0NLU0laRSkKKwkJCWJyZWFrOworCisJCWNoaWxkX3djLm9mcyA9IHB1cmVfb2ZzKGJsb2NrX2dldF9wb2ludGVyKGlwYWdlLCBlKSk7CisJCWlmICghY2hpbGRfd2Mub2ZzKQorCQkJY29udGludWU7CisKKwkJcGFnZSA9IGxvZ2ZzX2dldF93cml0ZV9wYWdlKGlub2RlLCBjaGlsZF9iaXgsIFNVQkxFVkVMKGxldmVsKSk7CisJCWlmICghcGFnZSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWlmICgoX19mb3JjZSB1OClsZXZlbCA+IDEpCisJCQllcnIgPSBfX2xvZ2ZzX3RydW5jYXRlX3JlYyhpbm9kZSwgcGFnZSwgJmNoaWxkX3djLCBzaXplKTsKKwkJZWxzZQorCQkJZXJyID0gbG9nZnNfdHJ1bmNhdGVfaTAoaW5vZGUsIHBhZ2UsICZjaGlsZF93Yywgc2l6ZSk7CisJCWxvZ2ZzX3B1dF93cml0ZV9wYWdlKHBhZ2UpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQl0cnVuY2F0ZV9oYXBwZW5lZCA9IDE7CisJCWFsbG9jX2luZGlyZWN0X2Jsb2NrKGlub2RlLCBpcGFnZSwgMCk7CisJCWJsb2NrX3NldF9wb2ludGVyKGlwYWdlLCBlLCBjaGlsZF93Yy5vZnMpOworCX0KKworCWlmICghdHJ1bmNhdGVfaGFwcGVuZWQpIHsKKwkJcHJpbnRrKCJpbmVmZmVjdHVhbCB0cnVuY2F0ZSAoJWx4LCAlbHgsICVsbHgpXG4iLCBpbm9kZS0+aV9pbm8sIGlwYWdlLT5pbmRleCwgc2l6ZSk7CisJCXJldHVybiAwOworCX0KKworCXRoaXNfd2MtPmZsYWdzID0gV0ZfREVMRVRFOworCWlmIChsb2dmc19ibG9jayhpcGFnZSktPnBhcnRpYWwpCisJCXRoaXNfd2MtPmZsYWdzIHw9IFdGX1dSSVRFOworCisJcmV0dXJuIGxvZ2ZzX3dyaXRlX2kwKGlub2RlLCBpcGFnZSwgdGhpc193Yyk7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfdHJ1bmNhdGVfcmVjKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBzaXplKQoreworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGkgPSBsb2dmc19pbm9kZShpbm9kZSk7CisJc3RydWN0IHdyaXRlX2NvbnRyb2wgd2MgPSB7CisJCS5vZnMgPSBsaS0+bGlfZGF0YVtJTkRJUkVDVF9JTkRFWF0sCisJfTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlpbnQgZXJyOworCisJYWxsb2NfaW5vZGVfYmxvY2soaW5vZGUpOworCisJaWYgKCF3Yy5vZnMpCisJCXJldHVybiAwOworCisJcGFnZSA9IGxvZ2ZzX2dldF93cml0ZV9wYWdlKGlub2RlLCAwLCBMRVZFTChsaS0+bGlfaGVpZ2h0KSk7CisJaWYgKCFwYWdlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVyciA9IF9fbG9nZnNfdHJ1bmNhdGVfcmVjKGlub2RlLCBwYWdlLCAmd2MsIHNpemUpOworCWxvZ2ZzX3B1dF93cml0ZV9wYWdlKHBhZ2UpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAobGktPmxpX2RhdGFbSU5ESVJFQ1RfSU5ERVhdICE9IHdjLm9mcykKKwkJbGktPmxpX2RhdGFbSU5ESVJFQ1RfSU5ERVhdID0gd2Mub2ZzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fbG9nZnNfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHNpemUpCit7CisJaW50IHJldDsKKworCWlmIChzaXplID49IGxvZ2ZzX2ZhY3Rvcihsb2dmc19pbm9kZShpbm9kZSktPmxpX2hlaWdodCkpCisJCXJldHVybiAwOworCisJcmV0ID0gbG9nZnNfdHJ1bmNhdGVfcmVjKGlub2RlLCBzaXplKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIGxvZ2ZzX3RydW5jYXRlX2RpcmVjdChpbm9kZSwgc2l6ZSk7Cit9CisKK2ludCBsb2dmc190cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJaW50IGVycjsKKworCWxvZ2ZzX2dldF93YmxvY2tzKHNiLCBOVUxMLCAxKTsKKwllcnIgPSBfX2xvZ2ZzX3RydW5jYXRlKGlub2RlLCBzaXplKTsKKwlpZiAoIWVycikKKwkJZXJyID0gX19sb2dmc193cml0ZV9pbm9kZShpbm9kZSwgMCk7CisJbG9nZnNfcHV0X3dibG9ja3Moc2IsIE5VTEwsIDEpOworCisJaWYgKCFlcnIpCisJCWVyciA9IHZtdHJ1bmNhdGUoaW5vZGUsIHNpemUpOworCisJLyogSSBkb24ndCB0cnVzdCBlcnJvciByZWNvdmVyeSB5ZXQuICovCisJV0FSTl9PTihlcnIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIG1vdmVfcGFnZV90b19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCXN0cnVjdCBsb2dmc19ibG9jayAqYmxvY2sgPSBsb2dmc19ibG9jayhwYWdlKTsKKworCWlmICghYmxvY2spCisJCXJldHVybjsKKworCWxvZ19ibG9ja21vdmUoIm1vdmVfcGFnZV90b19pbm9kZSglbGx4LCAlbGx4LCAleClcbiIsCisJCQlibG9jay0+aW5vLCBibG9jay0+Yml4LCBibG9jay0+bGV2ZWwpOworCUJVR19PTihsaS0+bGlfYmxvY2spOworCWJsb2NrLT5vcHMgPSAmaW5vZGVfYmxvY2tfb3BzOworCWJsb2NrLT5pbm9kZSA9IGlub2RlOworCWxpLT5saV9ibG9jayA9IGJsb2NrOworCisJYmxvY2stPnBhZ2UgPSBOVUxMOworCXBhZ2UtPnByaXZhdGUgPSAwOworCUNsZWFyUGFnZVByaXZhdGUocGFnZSk7Cit9CisKK3N0YXRpYyB2b2lkIG1vdmVfaW5vZGVfdG9fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCXN0cnVjdCBsb2dmc19ibG9jayAqYmxvY2sgPSBsaS0+bGlfYmxvY2s7CisKKwlpZiAoIWJsb2NrKQorCQlyZXR1cm47CisKKwlsb2dfYmxvY2ttb3ZlKCJtb3ZlX2lub2RlX3RvX3BhZ2UoJWxseCwgJWxseCwgJXgpXG4iLAorCQkJYmxvY2stPmlubywgYmxvY2stPmJpeCwgYmxvY2stPmxldmVsKTsKKwlCVUdfT04oUGFnZVByaXZhdGUocGFnZSkpOworCWJsb2NrLT5vcHMgPSAmaW5kaXJlY3RfYmxvY2tfb3BzOworCWJsb2NrLT5wYWdlID0gcGFnZTsKKwlwYWdlLT5wcml2YXRlID0gKHVuc2lnbmVkIGxvbmcpYmxvY2s7CisJU2V0UGFnZVByaXZhdGUocGFnZSk7CisKKwlibG9jay0+aW5vZGUgPSBOVUxMOworCWxpLT5saV9ibG9jayA9IE5VTEw7Cit9CisKK2ludCBsb2dmc19yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGlub2RlICptYXN0ZXJfaW5vZGUgPSBzdXBlci0+c19tYXN0ZXJfaW5vZGU7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJc3RydWN0IGxvZ2ZzX2Rpc2tfaW5vZGUgKmRpOworCXU2NCBpbm8gPSBpbm9kZS0+aV9pbm87CisKKwlpZiAoaW5vIDw8IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzID4gaV9zaXplX3JlYWQobWFzdGVyX2lub2RlKSkKKwkJcmV0dXJuIC1FTk9EQVRBOworCWlmICghbG9nZnNfZXhpc3RfYmxvY2sobWFzdGVyX2lub2RlLCBpbm8pKQorCQlyZXR1cm4gLUVOT0RBVEE7CisKKwlwYWdlID0gcmVhZF9jYWNoZV9wYWdlKG1hc3Rlcl9pbm9kZS0+aV9tYXBwaW5nLCBpbm8sCisJCQkoZmlsbGVyX3QgKilsb2dmc19yZWFkcGFnZSwgTlVMTCk7CisJaWYgKElTX0VSUihwYWdlKSkKKwkJcmV0dXJuIFBUUl9FUlIocGFnZSk7CisKKwlkaSA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwlsb2dmc19kaXNrX3RvX2lub2RlKGRpLCBpbm9kZSk7CisJa3VubWFwX2F0b21pYyhkaSwgS01fVVNFUjApOworCW1vdmVfcGFnZV90b19pbm9kZShpbm9kZSwgcGFnZSk7CisJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCXJldHVybiAwOworfQorCisvKiBDYWxsZXIgbXVzdCBsb2dmc19wdXRfd3JpdGVfcGFnZShwYWdlKTsgKi8KK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqaW5vZGVfdG9fcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBpbm9kZSAqbWFzdGVyX2lub2RlID0gbG9nZnNfc3VwZXIoaW5vZGUtPmlfc2IpLT5zX21hc3Rlcl9pbm9kZTsKKwlzdHJ1Y3QgbG9nZnNfZGlza19pbm9kZSAqZGk7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlCVUdfT04oaW5vZGUtPmlfaW5vID09IExPR0ZTX0lOT19NQVNURVIpOworCisJcGFnZSA9IGxvZ2ZzX2dldF93cml0ZV9wYWdlKG1hc3Rlcl9pbm9kZSwgaW5vZGUtPmlfaW5vLCAwKTsKKwlpZiAoIXBhZ2UpCisJCXJldHVybiBOVUxMOworCisJZGkgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJbG9nZnNfaW5vZGVfdG9fZGlzayhpbm9kZSwgZGkpOworCWt1bm1hcF9hdG9taWMoZGksIEtNX1VTRVIwKTsKKwltb3ZlX2lub2RlX3RvX3BhZ2UocGFnZSwgaW5vZGUpOworCXJldHVybiBwYWdlOworfQorCisvKiBDaGVhcGVyIHZlcnNpb24gb2Ygd3JpdGVfaW5vZGUuICBBbGwgY2hhbmdlcyBhcmUgY29uY2VhbGVkIGluCisgKiBhbGlhc2VzLCB3aGljaCBhcmUgbW92ZWQgYmFjay4gIE5vIHdyaXRlIHRvIHRoZSBtZWRpdW0gaGFwcGVucy4KKyAqLwordm9pZCBsb2dmc19jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCXN0cnVjdCBsb2dmc19ibG9jayAqYmxvY2sgPSBsaS0+bGlfYmxvY2s7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwkvKiBPbmx5IGRlbGV0ZWQgZmlsZXMgbWF5IGJlIGRpcnR5IGF0IHRoaXMgcG9pbnQgKi8KKwlCVUdfT04oaW5vZGUtPmlfc3RhdGUgJiBJX0RJUlRZICYmIGlub2RlLT5pX25saW5rKTsKKwlpZiAoIWJsb2NrKQorCQlyZXR1cm47CisJaWYgKChsb2dmc19zdXBlcihzYiktPnNfZmxhZ3MgJiBMT0dGU19TQl9GTEFHX1NIVVRET1dOKSkgeworCQlibG9jay0+b3BzLT5mcmVlX2Jsb2NrKGlub2RlLT5pX3NiLCBibG9jayk7CisJCXJldHVybjsKKwl9CisKKwlCVUdfT04oaW5vZGUtPmlfaW5vIDwgTE9HRlNfUkVTRVJWRURfSU5PUyk7CisJcGFnZSA9IGlub2RlX3RvX3BhZ2UoaW5vZGUpOworCUJVR19PTighcGFnZSk7IC8qIEZJWE1FOiBVc2UgZW1lcmdlbmN5IHBhZ2UgKi8KKwlsb2dmc19wdXRfd3JpdGVfcGFnZShwYWdlKTsKK30KKworc3RhdGljIGludCBkb193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKKwlzdHJ1Y3QgaW5vZGUgKm1hc3Rlcl9pbm9kZSA9IGxvZ2ZzX3N1cGVyKHNiKS0+c19tYXN0ZXJfaW5vZGU7CisJbG9mZl90IHNpemUgPSAoaW5vZGUtPmlfaW5vICsgMSkgPDwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IGVycjsKKworCUJVR19PTihpbm9kZS0+aV9pbm8gPT0gTE9HRlNfSU5PX01BU1RFUik7CisJLyogRklYTUU6IGxvY2sgaW5vZGUgKi8KKworCWlmIChpX3NpemVfcmVhZChtYXN0ZXJfaW5vZGUpIDwgc2l6ZSkKKwkJaV9zaXplX3dyaXRlKG1hc3Rlcl9pbm9kZSwgc2l6ZSk7CisKKwkvKiBUT0RPOiBUZWxsIHZmcyB0aGlzIGlub2RlIGlzIGNsZWFuIG5vdyAqLworCisJcGFnZSA9IGlub2RlX3RvX3BhZ2UoaW5vZGUpOworCWlmICghcGFnZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBGSVhNRTogdHJhbnNhY3Rpb24gaXMgcGFydCBvZiBsb2dmc19ibG9jayBub3cuICBJcyB0aGF0IGVub3VnaD8gKi8KKwllcnIgPSBsb2dmc193cml0ZV9idWYobWFzdGVyX2lub2RlLCBwYWdlLCAwKTsKKwlsb2dmc19wdXRfd3JpdGVfcGFnZShwYWdlKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBsb2dmc19tb2Rfc2VnbWVudF9lbnRyeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2Vnbm8sCisJCWludCB3cml0ZSwKKwkJdm9pZCAoKmNoYW5nZV9zZSkoc3RydWN0IGxvZ2ZzX3NlZ21lbnRfZW50cnkgKiwgbG9uZyksCisJCWxvbmcgYXJnKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgbG9nZnNfc2VnbWVudF9lbnRyeSAqc2U7CisJcGdvZmZfdCBwYWdlX25vOworCWludCBjaGlsZF9ubzsKKworCXBhZ2Vfbm8gPSBzZWdubyA+PiAoc2ItPnNfYmxvY2tzaXplX2JpdHMgLSAzKTsKKwljaGlsZF9ubyA9IHNlZ25vICYgKChzYi0+c19ibG9ja3NpemUgPj4gMykgLSAxKTsKKworCWlub2RlID0gc3VwZXItPnNfc2VnZmlsZV9pbm9kZTsKKwlwYWdlID0gbG9nZnNfZ2V0X3dyaXRlX3BhZ2UoaW5vZGUsIHBhZ2Vfbm8sIDApOworCUJVR19PTighcGFnZSk7IC8qIEZJWE1FOiBXZSBuZWVkIHNvbWUgcmVzZXJ2ZSBwYWdlIGZvciB0aGlzIGNhc2UgKi8KKwlpZiAoIVBhZ2VVcHRvZGF0ZShwYWdlKSkKKwkJbG9nZnNfcmVhZF9ibG9jayhpbm9kZSwgcGFnZSwgV1JJVEUpOworCisJaWYgKHdyaXRlKQorCQlhbGxvY19pbmRpcmVjdF9ibG9jayhpbm9kZSwgcGFnZSwgMCk7CisJc2UgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJY2hhbmdlX3NlKHNlICsgY2hpbGRfbm8sIGFyZyk7CisJaWYgKHdyaXRlKSB7CisJCWxvZ2ZzX3NldF9hbGlhcyhzYiwgbG9nZnNfYmxvY2socGFnZSksIGNoaWxkX25vKTsKKwkJQlVHX09OKChpbnQpYmUzMl90b19jcHUoc2VbY2hpbGRfbm9dLnZhbGlkKSA+IHN1cGVyLT5zX3NlZ3NpemUpOworCX0KKwlrdW5tYXBfYXRvbWljKHNlLCBLTV9VU0VSMCk7CisKKwlsb2dmc19wdXRfd3JpdGVfcGFnZShwYWdlKTsKK30KKworc3RhdGljIHZvaWQgX19nZXRfc2VnbWVudF9lbnRyeShzdHJ1Y3QgbG9nZnNfc2VnbWVudF9lbnRyeSAqc2UsIGxvbmcgX3RhcmdldCkKK3sKKwlzdHJ1Y3QgbG9nZnNfc2VnbWVudF9lbnRyeSAqdGFyZ2V0ID0gKHZvaWQgKilfdGFyZ2V0OworCisJKnRhcmdldCA9ICpzZTsKK30KKwordm9pZCBsb2dmc19nZXRfc2VnbWVudF9lbnRyeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2Vnbm8sCisJCXN0cnVjdCBsb2dmc19zZWdtZW50X2VudHJ5ICpzZSkKK3sKKwlsb2dmc19tb2Rfc2VnbWVudF9lbnRyeShzYiwgc2Vnbm8sIDAsIF9fZ2V0X3NlZ21lbnRfZW50cnksIChsb25nKXNlKTsKK30KKworc3RhdGljIHZvaWQgX19zZXRfc2VnbWVudF91c2VkKHN0cnVjdCBsb2dmc19zZWdtZW50X2VudHJ5ICpzZSwgbG9uZyBpbmNyZW1lbnQpCit7CisJdTMyIHZhbGlkOworCisJdmFsaWQgPSBiZTMyX3RvX2NwdShzZS0+dmFsaWQpOworCXZhbGlkICs9IGluY3JlbWVudDsKKwlzZS0+dmFsaWQgPSBjcHVfdG9fYmUzMih2YWxpZCk7Cit9CisKK3ZvaWQgbG9nZnNfc2V0X3NlZ21lbnRfdXNlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgb2ZzLCBpbnQgaW5jcmVtZW50KQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJdTMyIHNlZ25vID0gb2ZzID4+IHN1cGVyLT5zX3NlZ3NoaWZ0OworCisJaWYgKCFpbmNyZW1lbnQpCisJCXJldHVybjsKKworCWxvZ2ZzX21vZF9zZWdtZW50X2VudHJ5KHNiLCBzZWdubywgMSwgX19zZXRfc2VnbWVudF91c2VkLCBpbmNyZW1lbnQpOworfQorCitzdGF0aWMgdm9pZCBfX3NldF9zZWdtZW50X2VyYXNlZChzdHJ1Y3QgbG9nZnNfc2VnbWVudF9lbnRyeSAqc2UsIGxvbmcgZWNfbGV2ZWwpCit7CisJc2UtPmVjX2xldmVsID0gY3B1X3RvX2JlMzIoZWNfbGV2ZWwpOworfQorCit2b2lkIGxvZ2ZzX3NldF9zZWdtZW50X2VyYXNlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2Vnbm8sIHUzMiBlYywKKwkJZ2NfbGV2ZWxfdCBnY19sZXZlbCkKK3sKKwl1MzIgZWNfbGV2ZWwgPSBlYyA8PCA0IHwgKF9fZm9yY2UgdTgpZ2NfbGV2ZWw7CisKKwlsb2dmc19tb2Rfc2VnbWVudF9lbnRyeShzYiwgc2Vnbm8sIDEsIF9fc2V0X3NlZ21lbnRfZXJhc2VkLCBlY19sZXZlbCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fc2V0X3NlZ21lbnRfcmVzZXJ2ZWQoc3RydWN0IGxvZ2ZzX3NlZ21lbnRfZW50cnkgKnNlLCBsb25nIGlnbm9yZSkKK3sKKwlzZS0+dmFsaWQgPSBjcHVfdG9fYmUzMihSRVNFUlZFRCk7Cit9CisKK3ZvaWQgbG9nZnNfc2V0X3NlZ21lbnRfcmVzZXJ2ZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlZ25vKQoreworCWxvZ2ZzX21vZF9zZWdtZW50X2VudHJ5KHNiLCBzZWdubywgMSwgX19zZXRfc2VnbWVudF9yZXNlcnZlZCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fc2V0X3NlZ21lbnRfdW5yZXNlcnZlZChzdHJ1Y3QgbG9nZnNfc2VnbWVudF9lbnRyeSAqc2UsCisJCWxvbmcgZWNfbGV2ZWwpCit7CisJc2UtPnZhbGlkID0gMDsKKwlzZS0+ZWNfbGV2ZWwgPSBjcHVfdG9fYmUzMihlY19sZXZlbCk7Cit9CisKK3ZvaWQgbG9nZnNfc2V0X3NlZ21lbnRfdW5yZXNlcnZlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2Vnbm8sIHUzMiBlYykKK3sKKwl1MzIgZWNfbGV2ZWwgPSBlYyA8PCA0OworCisJbG9nZnNfbW9kX3NlZ21lbnRfZW50cnkoc2IsIHNlZ25vLCAxLCBfX3NldF9zZWdtZW50X3VucmVzZXJ2ZWQsCisJCQllY19sZXZlbCk7Cit9CisKK2ludCBfX2xvZ2ZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCWludCByZXQ7CisKKwlsb2dmc19nZXRfd2Jsb2NrcyhzYiwgTlVMTCwgZmxhZ3MgJiBXRl9MT0NLKTsKKwlyZXQgPSBkb193cml0ZV9pbm9kZShpbm9kZSk7CisJbG9nZnNfcHV0X3dibG9ja3Moc2IsIE5VTEwsIGZsYWdzICYgV0ZfTE9DSyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkb19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJc3RydWN0IGlub2RlICptYXN0ZXJfaW5vZGUgPSBsb2dmc19zdXBlcihzYiktPnNfbWFzdGVyX2lub2RlOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCByZXQ7CisKKwlwYWdlID0gbG9nZnNfZ2V0X3dyaXRlX3BhZ2UobWFzdGVyX2lub2RlLCBpbm9kZS0+aV9pbm8sIDApOworCWlmICghcGFnZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltb3ZlX2lub2RlX3RvX3BhZ2UocGFnZSwgaW5vZGUpOworCisJbG9nZnNfZ2V0X3dibG9ja3Moc2IsIHBhZ2UsIDEpOworCXJldCA9IF9fbG9nZnNfZGVsZXRlKG1hc3Rlcl9pbm9kZSwgcGFnZSk7CisJbG9nZnNfcHV0X3dibG9ja3Moc2IsIHBhZ2UsIDEpOworCisJbG9nZnNfcHV0X3dyaXRlX3BhZ2UocGFnZSk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFpPTUJJRSBpbm9kZXMgaGF2ZSBhbHJlYWR5IGJlZW4gZGVsZXRlZCBiZWZvcmUgYW5kIHNob3VsZCByZW1haW4gZGVhZCwKKyAqIGlmIGl0IHdlcmVuJ3QgZm9yIHZhbGlkIGNoZWNraW5nLiAgTm8gbmVlZCB0byBraWxsIHRoZW0gYWdhaW4gaGVyZS4KKyAqLwordm9pZCBsb2dmc19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCisJaWYgKCEobGktPmxpX2ZsYWdzICYgTE9HRlNfSUZfWk9NQklFKSkgeworCQlsaS0+bGlfZmxhZ3MgfD0gTE9HRlNfSUZfWk9NQklFOworCQlpZiAoaV9zaXplX3JlYWQoaW5vZGUpID4gMCkKKwkJCWxvZ2ZzX3RydW5jYXRlKGlub2RlLCAwKTsKKwkJZG9fZGVsZXRlX2lub2RlKGlub2RlKTsKKwl9CisJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOworCWNsZWFyX2lub2RlKGlub2RlKTsKK30KKwordm9pZCBidHJlZV93cml0ZV9ibG9jayhzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IGVyciwgY29va2llOworCisJaW5vZGUgPSBsb2dmc19zYWZlX2lnZXQoYmxvY2stPnNiLCBibG9jay0+aW5vLCAmY29va2llKTsKKwlwYWdlID0gbG9nZnNfZ2V0X3dyaXRlX3BhZ2UoaW5vZGUsIGJsb2NrLT5iaXgsIGJsb2NrLT5sZXZlbCk7CisKKwllcnIgPSBsb2dmc19yZWFkcGFnZV9ub2xvY2socGFnZSk7CisJQlVHX09OKGVycik7CisJQlVHX09OKCFQYWdlUHJpdmF0ZShwYWdlKSk7CisJQlVHX09OKGxvZ2ZzX2Jsb2NrKHBhZ2UpICE9IGJsb2NrKTsKKwllcnIgPSBfX2xvZ2ZzX3dyaXRlX2J1Zihpbm9kZSwgcGFnZSwgMCk7CisJQlVHX09OKGVycik7CisJQlVHX09OKFBhZ2VQcml2YXRlKHBhZ2UpIHx8IHBhZ2UtPnByaXZhdGUpOworCisJbG9nZnNfcHV0X3dyaXRlX3BhZ2UocGFnZSk7CisJbG9nZnNfc2FmZV9pcHV0KGlub2RlLCBjb29raWUpOworfQorCisvKioKKyAqIGxvZ2ZzX2lub2RlX3dyaXRlIC0gd3JpdGUgaW5vZGUgb3IgZGVudHJ5IG9iamVjdHMKKyAqCisgKiBAaW5vZGU6CQlwYXJlbnQgaW5vZGUgKGlmaWxlIG9yIGRpcmVjdG9yeSkKKyAqIEBidWY6CQlvYmplY3QgdG8gd3JpdGUgKGlub2RlIG9yIGRlbnRyeSkKKyAqIEBuOgkJCW9iamVjdCBzaXplCisgKiBAX3BvczoJCW9iamVjdCBudW1iZXIgKGZpbGUgcG9zaXRpb24gaW4gYmxvY2tzL29iamVjdHMpCisgKiBAZmxhZ3M6CQl3cml0ZSBmbGFncworICogQGxvY2s6CQkwIGlmIHdyaXRlIGxvY2sgaXMgYWxyZWFkeSB0YWtlbiwgMSBvdGhlcndpc2UKKyAqIEBzaGFkb3dfdHJlZToJc2hhZG93IGJlbG93IHRoaXMgaW5vZGUKKyAqCisgKiBGSVhNRTogQWxsIGNhbGxlciBvZiB0aGlzIHB1dCBhIDIwMC0zMDAgYnl0ZSB2YXJpYWJsZSBvbiB0aGUgc3RhY2ssCisgKiBvbmx5IHRvIGNhbGwgaGVyZSBhbmQgZG8gYSBtZW1jcHkgZnJvbSB0aGF0IHN0YWNrIHZhcmlhYmxlLiAgQSBnb29kCisgKiBleGFtcGxlIG9mIHdhc3RlZCBwZXJmb3JtYW5jZSBhbmQgc3RhY2sgc3BhY2UuCisgKi8KK2ludCBsb2dmc19pbm9kZV93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCwKKwkJbG9mZl90IGJpeCwgbG9uZyBmbGFncywgc3RydWN0IHNoYWRvd190cmVlICpzaGFkb3dfdHJlZSkKK3sKKwlsb2ZmX3QgcG9zID0gYml4IDw8IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCWludCBlcnI7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdm9pZCAqcGFnZWJ1ZjsKKworCUJVR19PTihwb3MgJiAoTE9HRlNfQkxPQ0tTSVpFLTEpKTsKKwlCVUdfT04oY291bnQgPiBMT0dGU19CTE9DS1NJWkUpOworCXBhZ2UgPSBsb2dmc19nZXRfd3JpdGVfcGFnZShpbm9kZSwgYml4LCAwKTsKKwlpZiAoIXBhZ2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcGFnZWJ1ZiA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwltZW1jcHkocGFnZWJ1ZiwgYnVmLCBjb3VudCk7CisJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CisJa3VubWFwX2F0b21pYyhwYWdlYnVmLCBLTV9VU0VSMCk7CisKKwlpZiAoaV9zaXplX3JlYWQoaW5vZGUpIDwgcG9zICsgTE9HRlNfQkxPQ0tTSVpFKQorCQlpX3NpemVfd3JpdGUoaW5vZGUsIHBvcyArIExPR0ZTX0JMT0NLU0laRSk7CisKKwllcnIgPSBsb2dmc193cml0ZV9idWYoaW5vZGUsIHBhZ2UsIGZsYWdzKTsKKwlsb2dmc19wdXRfd3JpdGVfcGFnZShwYWdlKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgbG9nZnNfb3Blbl9zZWdmaWxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCisJaW5vZGUgPSBsb2dmc19yZWFkX21ldGFfaW5vZGUoc2IsIExPR0ZTX0lOT19TRUdGSUxFKTsKKwlpZiAoSVNfRVJSKGlub2RlKSkKKwkJcmV0dXJuIFBUUl9FUlIoaW5vZGUpOworCXN1cGVyLT5zX3NlZ2ZpbGVfaW5vZGUgPSBpbm9kZTsKKwlyZXR1cm4gMDsKK30KKworaW50IGxvZ2ZzX2luaXRfcncoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCWludCBtaW5fZmlsbCA9IDMgKiBzdXBlci0+c19ub19ibG9ja3M7CisKKwlJTklUX0xJU1RfSEVBRCgmc3VwZXItPnNfb2JqZWN0X2FsaWFzKTsKKwltdXRleF9pbml0KCZzdXBlci0+c193cml0ZV9tdXRleCk7CisJc3VwZXItPnNfYmxvY2tfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcG9vbChtaW5fZmlsbCwKKwkJCXNpemVvZihzdHJ1Y3QgbG9nZnNfYmxvY2spKTsKKwlzdXBlci0+c19zaGFkb3dfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcG9vbChtaW5fZmlsbCwKKwkJCXNpemVvZihzdHJ1Y3QgbG9nZnNfc2hhZG93KSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbG9nZnNfY2xlYW51cF9ydyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisKKwlkZXN0cm95X21ldGFfaW5vZGUoc3VwZXItPnNfc2VnZmlsZV9pbm9kZSk7CisJaWYgKHN1cGVyLT5zX2Jsb2NrX3Bvb2wpCisJCW1lbXBvb2xfZGVzdHJveShzdXBlci0+c19ibG9ja19wb29sKTsKKwlpZiAoc3VwZXItPnNfc2hhZG93X3Bvb2wpCisJCW1lbXBvb2xfZGVzdHJveShzdXBlci0+c19zaGFkb3dfcG9vbCk7Cit9CmRpZmYgLS1naXQgYS9mcy9sb2dmcy9zZWdtZW50LmMgYi9mcy9sb2dmcy9zZWdtZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWExNGY5OQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2xvZ2ZzL3NlZ21lbnQuYwpAQCAtMCwwICsxLDkyNyBAQAorLyoKKyAqIGZzL2xvZ2ZzL3NlZ21lbnQuYwktIEhhbmRsaW5nIHRoZSBPYmplY3QgU3RvcmUKKyAqCisgKiBBcyBzaG91bGQgYmUgb2J2aW91cyBmb3IgTGludXgga2VybmVsIGNvZGUsIGxpY2Vuc2UgaXMgR1BMdjIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCBKb2VybiBFbmdlbCA8am9lcm5AbG9nZnMub3JnPgorICoKKyAqIE9iamVjdCBzdG9yZSBvciBvc3RvcmUgbWFrZXMgdXAgdGhlIGNvbXBsZXRlIGRldmljZSB3aXRoIGV4Y2VwdGlvbiBvZgorICogdGhlIHN1cGVyYmxvY2sgYW5kIGpvdXJuYWwgYXJlYXMuICBBcGFydCBmcm9tIGl0cyBvd24gbWV0YWRhdGEgaXQgc3RvcmVzCisgKiB0aHJlZSBraW5kcyBvZiBvYmplY3RzOiBpbm9kZXMsIGRlbnRyaWVzIGFuZCBibG9ja3MsIGJvdGggZGF0YSBhbmQgaW5kaXJlY3QuCisgKi8KKyNpbmNsdWRlICJsb2dmcy5oIgorCitzdGF0aWMgaW50IGxvZ2ZzX21hcmtfc2VnbWVudF9iYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlZ25vKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGJ0cmVlX2hlYWQzMiAqaGVhZCA9ICZzdXBlci0+c19yZXNlcnZlZF9zZWdtZW50czsKKwlpbnQgZXJyOworCisJZXJyID0gYnRyZWVfaW5zZXJ0MzIoaGVhZCwgc2Vnbm8sICh2b2lkICopMSwgR0ZQX05PRlMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJbG9nZnNfc3VwZXIoc2IpLT5zX2JhZF9zZWdtZW50cysrOworCS8qIEZJWE1FOiB3cml0ZSB0byBqb3VybmFsICovCisJcmV0dXJuIDA7Cit9CisKK2ludCBsb2dmc19lcmFzZV9zZWdtZW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzZWdubywgaW50IGVuc3VyZV9lcmFzZSkKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCisJc3VwZXItPnNfZ2VjKys7CisKKwlyZXR1cm4gc3VwZXItPnNfZGV2b3BzLT5lcmFzZShzYiwgKHU2NClzZWdubyA8PCBzdXBlci0+c19zZWdzaGlmdCwKKwkJCXN1cGVyLT5zX3NlZ3NpemUsIGVuc3VyZV9lcmFzZSk7Cit9CisKK3N0YXRpYyBzNjQgbG9nZnNfZ2V0X2ZyZWVfYnl0ZXMoc3RydWN0IGxvZ2ZzX2FyZWEgKmFyZWEsIHNpemVfdCBieXRlcykKK3sKKwlzMzIgb2ZzOworCisJbG9nZnNfb3Blbl9hcmVhKGFyZWEsIGJ5dGVzKTsKKworCW9mcyA9IGFyZWEtPmFfdXNlZF9ieXRlczsKKwlhcmVhLT5hX3VzZWRfYnl0ZXMgKz0gYnl0ZXM7CisJQlVHX09OKGFyZWEtPmFfdXNlZF9ieXRlcyA+PSBsb2dmc19zdXBlcihhcmVhLT5hX3NiKS0+c19zZWdzaXplKTsKKworCXJldHVybiBkZXZfb2ZzKGFyZWEtPmFfc2IsIGFyZWEtPmFfc2Vnbm8sIG9mcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqZ2V0X21hcHBpbmdfcGFnZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBwZ29mZl90IGluZGV4LAorCQlpbnQgdXNlX2ZpbGxlcikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gc3VwZXItPnNfbWFwcGluZ19pbm9kZS0+aV9tYXBwaW5nOworCWZpbGxlcl90ICpmaWxsZXIgPSBzdXBlci0+c19kZXZvcHMtPnJlYWRwYWdlOworCXN0cnVjdCBwYWdlICpwYWdlOworCisJQlVHX09OKG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZykgJiBfX0dGUF9GUyk7CisJaWYgKHVzZV9maWxsZXIpCisJCXBhZ2UgPSByZWFkX2NhY2hlX3BhZ2UobWFwcGluZywgaW5kZXgsIGZpbGxlciwgc2IpOworCWVsc2UgeworCQlwYWdlID0gZmluZF9vcl9jcmVhdGVfcGFnZShtYXBwaW5nLCBpbmRleCwgR0ZQX05PRlMpOworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwl9CisJcmV0dXJuIHBhZ2U7Cit9CisKK3ZvaWQgX19sb2dmc19idWZfd3JpdGUoc3RydWN0IGxvZ2ZzX2FyZWEgKmFyZWEsIHU2NCBvZnMsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwKKwkJaW50IHVzZV9maWxsZXIpCit7CisJcGdvZmZfdCBpbmRleCA9IG9mcyA+PiBQQUdFX1NISUZUOworCXN0cnVjdCBwYWdlICpwYWdlOworCWxvbmcgb2Zmc2V0ID0gb2ZzICYgKFBBR0VfU0laRS0xKTsKKwlsb25nIGNvcHlsZW47CisKKwkvKiBPbmx5IGxvZ2ZzX3didWZfcmVjb3ZlciBtYXkgdXNlIGxlbj09MCAqLworCUJVR19PTighbGVuICYmICF1c2VfZmlsbGVyKTsKKwlkbyB7CisJCWNvcHlsZW4gPSBtaW4oKHVsb25nKWxlbiwgUEFHRV9TSVpFIC0gb2Zmc2V0KTsKKworCQlwYWdlID0gZ2V0X21hcHBpbmdfcGFnZShhcmVhLT5hX3NiLCBpbmRleCwgdXNlX2ZpbGxlcik7CisJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKwkJQlVHX09OKCFwYWdlKTsgLyogRklYTUU6IHJlc2VydmUgYSBwb29sICovCisJCW1lbWNweShwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmZzZXQsIGJ1ZiwgY29weWxlbik7CisJCVNldFBhZ2VQcml2YXRlKHBhZ2UpOworCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisKKwkJYnVmICs9IGNvcHlsZW47CisJCWxlbiAtPSBjb3B5bGVuOworCQlvZmZzZXQgPSAwOworCQlpbmRleCsrOworCX0gd2hpbGUgKGxlbik7Cit9CisKKy8qCisgKiBiZGV2X3dyaXRlc2VnIHdpbGwgd3JpdGUgZnVsbCBwYWdlcy4gIE1lbXNldCB0aGUgdGFpbCB0byBwcmV2ZW50IGRhdGEgbGVha3MuCisgKi8KK3N0YXRpYyB2b2lkIHBhZF93YnVmKHN0cnVjdCBsb2dmc19hcmVhICphcmVhLCBpbnQgZmluYWwpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGFyZWEtPmFfc2I7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1NjQgb2ZzID0gZGV2X29mcyhzYiwgYXJlYS0+YV9zZWdubywgYXJlYS0+YV91c2VkX2J5dGVzKTsKKwlwZ29mZl90IGluZGV4ID0gb2ZzID4+IFBBR0VfU0hJRlQ7CisJbG9uZyBvZmZzZXQgPSBvZnMgJiAoUEFHRV9TSVpFLTEpOworCXUzMiBsZW4gPSBQQUdFX1NJWkUgLSBvZmZzZXQ7CisKKwlpZiAobGVuID09IFBBR0VfU0laRSkgeworCQkvKiBUaGUgbWF0aCBpbiB0aGlzIGZ1bmN0aW9uIGNhbiBzdXJlbHkgdXNlIHNvbWUgbG92ZSAqLworCQlsZW4gPSAwOworCX0KKwlpZiAobGVuKSB7CisJCUJVR19PTihhcmVhLT5hX3VzZWRfYnl0ZXMgPj0gc3VwZXItPnNfc2Vnc2l6ZSk7CisKKwkJcGFnZSA9IGdldF9tYXBwaW5nX3BhZ2UoYXJlYS0+YV9zYiwgaW5kZXgsIDApOworCQlCVUdfT04oIXBhZ2UpOyAvKiBGSVhNRTogcmVzZXJ2ZSBhIHBvb2wgKi8KKwkJbWVtc2V0KHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldCwgMHhmZiwgbGVuKTsKKwkJU2V0UGFnZVByaXZhdGUocGFnZSk7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwl9CisKKwlpZiAoIWZpbmFsKQorCQlyZXR1cm47CisKKwlhcmVhLT5hX3VzZWRfYnl0ZXMgKz0gbGVuOworCWZvciAoIDsgYXJlYS0+YV91c2VkX2J5dGVzIDwgc3VwZXItPnNfc2Vnc2l6ZTsKKwkJCWFyZWEtPmFfdXNlZF9ieXRlcyArPSBQQUdFX1NJWkUpIHsKKwkJLyogTWVtc2V0IGFub3RoZXIgcGFnZSAqLworCQlpbmRleCsrOworCQlwYWdlID0gZ2V0X21hcHBpbmdfcGFnZShhcmVhLT5hX3NiLCBpbmRleCwgMCk7CisJCUJVR19PTighcGFnZSk7IC8qIEZJWE1FOiByZXNlcnZlIGEgcG9vbCAqLworCQltZW1zZXQocGFnZV9hZGRyZXNzKHBhZ2UpLCAweGZmLCBQQUdFX1NJWkUpOworCQlTZXRQYWdlUHJpdmF0ZShwYWdlKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCX0KK30KKworLyoKKyAqIFdlIGhhdmUgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoZSBhbGlhcyB0cmVlLiAgU2luY2UgbG9va3VwIGlzIGRvbmUgYnkgYml4LAorICogaXQgbmVlZHMgdG8gYmUgbm9ybWFsaXplZCwgc28gMTQsIDE1LCAxNiwgZXRjLiBhbGwgbWF0Y2ggd2hlbiBkZWFsaW5nIHdpdGgKKyAqIGluZGlyZWN0IGJsb2Nrcy4gIFNvIGFsd2F5cyB1c2UgaXQgdGhyb3VnaCBhY2Nlc3NvciBmdW5jdGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkICphbGlhc190cmVlX2xvb2t1cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgaW5vLCB1NjQgYml4LAorCQlsZXZlbF90IGxldmVsKQoreworCXN0cnVjdCBidHJlZV9oZWFkMTI4ICpoZWFkID0gJmxvZ2ZzX3N1cGVyKHNiKS0+c19vYmplY3RfYWxpYXNfdHJlZTsKKwlwZ29mZl90IGluZGV4ID0gbG9nZnNfcGFja19pbmRleChiaXgsIGxldmVsKTsKKworCXJldHVybiBidHJlZV9sb29rdXAxMjgoaGVhZCwgaW5vLCBpbmRleCk7Cit9CisKK3N0YXRpYyBpbnQgYWxpYXNfdHJlZV9pbnNlcnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IGlubywgdTY0IGJpeCwKKwkJbGV2ZWxfdCBsZXZlbCwgdm9pZCAqdmFsKQoreworCXN0cnVjdCBidHJlZV9oZWFkMTI4ICpoZWFkID0gJmxvZ2ZzX3N1cGVyKHNiKS0+c19vYmplY3RfYWxpYXNfdHJlZTsKKwlwZ29mZl90IGluZGV4ID0gbG9nZnNfcGFja19pbmRleChiaXgsIGxldmVsKTsKKworCXJldHVybiBidHJlZV9pbnNlcnQxMjgoaGVhZCwgaW5vLCBpbmRleCwgdmFsLCBHRlBfTk9GUyk7Cit9CisKK3N0YXRpYyBpbnQgYnRyZWVfd3JpdGVfYWxpYXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jaywKKwkJd3JpdGVfYWxpYXNfdCAqd3JpdGVfb25lX2FsaWFzKQoreworCXN0cnVjdCBvYmplY3RfYWxpYXNfaXRlbSAqaXRlbTsKKwlpbnQgZXJyOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpdGVtLCAmYmxvY2stPml0ZW1fbGlzdCwgbGlzdCkgeworCQllcnIgPSB3cml0ZV9hbGlhc19qb3VybmFsKHNiLCBibG9jay0+aW5vLCBibG9jay0+Yml4LAorCQkJCWJsb2NrLT5sZXZlbCwgaXRlbS0+Y2hpbGRfbm8sIGl0ZW0tPnZhbCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGdjX2xldmVsX3QgYnRyZWVfYmxvY2tfbGV2ZWwoc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jaykKK3sKKwlyZXR1cm4gZXhwYW5kX2xldmVsKGJsb2NrLT5pbm8sIGJsb2NrLT5sZXZlbCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbG9nZnNfYmxvY2tfb3BzIGJ0cmVlX2Jsb2NrX29wcyA9IHsKKwkud3JpdGVfYmxvY2sJPSBidHJlZV93cml0ZV9ibG9jaywKKwkuYmxvY2tfbGV2ZWwJPSBidHJlZV9ibG9ja19sZXZlbCwKKwkuZnJlZV9ibG9jawk9IF9fZnJlZV9ibG9jaywKKwkud3JpdGVfYWxpYXMJPSBidHJlZV93cml0ZV9hbGlhcywKK307CisKK2ludCBsb2dmc19sb2FkX29iamVjdF9hbGlhc2VzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCXN0cnVjdCBsb2dmc19vYmpfYWxpYXMgKm9hLCBpbnQgY291bnQpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrOworCXN0cnVjdCBvYmplY3RfYWxpYXNfaXRlbSAqaXRlbTsKKwl1NjQgaW5vLCBiaXg7CisJbGV2ZWxfdCBsZXZlbDsKKwlpbnQgaSwgZXJyOworCisJc3VwZXItPnNfZmxhZ3MgfD0gTE9HRlNfU0JfRkxBR19PQkpfQUxJQVM7CisJY291bnQgLz0gc2l6ZW9mKCpvYSk7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJaXRlbSA9IG1lbXBvb2xfYWxsb2Moc3VwZXItPnNfYWxpYXNfcG9vbCwgR0ZQX05PRlMpOworCQlpZiAoIWl0ZW0pCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJbWVtc2V0KGl0ZW0sIDAsIHNpemVvZigqaXRlbSkpOworCisJCXN1cGVyLT5zX25vX29iamVjdF9hbGlhc2VzKys7CisJCWl0ZW0tPnZhbCA9IG9hW2ldLnZhbDsKKwkJaXRlbS0+Y2hpbGRfbm8gPSBiZTE2X3RvX2NwdShvYVtpXS5jaGlsZF9ubyk7CisKKwkJaW5vID0gYmU2NF90b19jcHUob2FbaV0uaW5vKTsKKwkJYml4ID0gYmU2NF90b19jcHUob2FbaV0uYml4KTsKKwkJbGV2ZWwgPSBMRVZFTChvYVtpXS5sZXZlbCk7CisKKwkJbG9nX2FsaWFzZXMoImxvZ2ZzX2xvYWRfb2JqZWN0X2FsaWFzZXMoJWxseCwgJWxseCwgJXgsICV4KSAlbGx4XG4iLAorCQkJCWlubywgYml4LCBsZXZlbCwgaXRlbS0+Y2hpbGRfbm8sCisJCQkJYmU2NF90b19jcHUoaXRlbS0+dmFsKSk7CisJCWJsb2NrID0gYWxpYXNfdHJlZV9sb29rdXAoc2IsIGlubywgYml4LCBsZXZlbCk7CisJCWlmICghYmxvY2spIHsKKwkJCWJsb2NrID0gX19hbGxvY19ibG9jayhzYiwgaW5vLCBiaXgsIGxldmVsKTsKKwkJCWJsb2NrLT5vcHMgPSAmYnRyZWVfYmxvY2tfb3BzOworCQkJZXJyID0gYWxpYXNfdHJlZV9pbnNlcnQoc2IsIGlubywgYml4LCBsZXZlbCwgYmxvY2spOworCQkJQlVHX09OKGVycik7IC8qIG1lbXBvb2wgZW1wdHkgKi8KKwkJfQorCQlpZiAodGVzdF9hbmRfc2V0X2JpdChpdGVtLT5jaGlsZF9ubywgYmxvY2stPmFsaWFzX21hcCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiJMb2dGUzogQWxpYXMgY29sbGlzaW9uIGRldGVjdGVkXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCWxpc3RfbW92ZV90YWlsKCZibG9jay0+YWxpYXNfbGlzdCwgJnN1cGVyLT5zX29iamVjdF9hbGlhcyk7CisJCWxpc3RfYWRkKCZpdGVtLT5saXN0LCAmYmxvY2stPml0ZW1fbGlzdCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBraWxsX2FsaWFzKHZvaWQgKl9ibG9jaywgdW5zaWduZWQgbG9uZyBpZ25vcmUwLAorCQl1NjQgaWdub3JlMSwgdTY0IGlnbm9yZTIsIHNpemVfdCBpZ25vcmUzKQoreworCXN0cnVjdCBsb2dmc19ibG9jayAqYmxvY2sgPSBfYmxvY2s7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGJsb2NrLT5zYjsKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBvYmplY3RfYWxpYXNfaXRlbSAqaXRlbTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmYmxvY2stPml0ZW1fbGlzdCkpIHsKKwkJaXRlbSA9IGxpc3RfZW50cnkoYmxvY2stPml0ZW1fbGlzdC5uZXh0LCB0eXBlb2YoKml0ZW0pLCBsaXN0KTsKKwkJbGlzdF9kZWwoJml0ZW0tPmxpc3QpOworCQltZW1wb29sX2ZyZWUoaXRlbSwgc3VwZXItPnNfYWxpYXNfcG9vbCk7CisJfQorCWJsb2NrLT5vcHMtPmZyZWVfYmxvY2soc2IsIGJsb2NrKTsKK30KKworc3RhdGljIGludCBvYmpfdHlwZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsZXZlbF90IGxldmVsKQoreworCWlmIChsZXZlbCA9PSAwKSB7CisJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQorCQkJcmV0dXJuIE9CSl9ERU5UUlk7CisJCWlmIChpbm9kZS0+aV9pbm8gPT0gTE9HRlNfSU5PX01BU1RFUikKKwkJCXJldHVybiBPQkpfSU5PREU7CisJfQorCXJldHVybiBPQkpfQkxPQ0s7Cit9CisKK3N0YXRpYyBpbnQgb2JqX2xlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgb2JqX3R5cGUpCit7CisJc3dpdGNoIChvYmpfdHlwZSkgeworCWNhc2UgT0JKX0RFTlRSWToKKwkJcmV0dXJuIHNpemVvZihzdHJ1Y3QgbG9nZnNfZGlza19kZW50cnkpOworCWNhc2UgT0JKX0lOT0RFOgorCQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBsb2dmc19kaXNrX2lub2RlKTsKKwljYXNlIE9CSl9CTE9DSzoKKwkJcmV0dXJuIHNiLT5zX2Jsb2Nrc2l6ZTsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19sb2dmc19zZWdtZW50X3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1ZiwKKwkJc3RydWN0IGxvZ2ZzX3NoYWRvdyAqc2hhZG93LCBpbnQgdHlwZSwgaW50IGxlbiwgaW50IGNvbXByKQoreworCXN0cnVjdCBsb2dmc19hcmVhICphcmVhOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKKwlzNjQgb2ZzOworCXN0cnVjdCBsb2dmc19vYmplY3RfaGVhZGVyIGg7CisJaW50IGFjY19sZW47CisKKwlpZiAoc2hhZG93LT5nY19sZXZlbCA9PSAwKQorCQlhY2NfbGVuID0gbGVuOworCWVsc2UKKwkJYWNjX2xlbiA9IG9ial9sZW4oc2IsIHR5cGUpOworCisJYXJlYSA9IGdldF9hcmVhKHNiLCBzaGFkb3ctPmdjX2xldmVsKTsKKwlvZnMgPSBsb2dmc19nZXRfZnJlZV9ieXRlcyhhcmVhLCBsZW4gKyBMT0dGU19PQkpFQ1RfSEVBREVSU0laRSk7CisJTE9HRlNfQlVHX09OKG9mcyA8PSAwLCBzYik7CisJLyoKKwkgKiBPcmRlciBpcyBpbXBvcnRhbnQuICBsb2dmc19nZXRfZnJlZV9ieXRlcygpLCBieSBtb2RpZnlpbmcgdGhlCisJICogc2VnbWVudCBmaWxlLCBtYXkgbW9kaWZ5IHRoZSBjb250ZW50IG9mIHRoZSB2ZXJ5IHBhZ2Ugd2UncmUgYWJvdXQKKwkgKiB0byB3cml0ZSBub3cuICBXaGljaCBpcyBmaW5lLCBhcyBsb25nIGFzIHRoZSBjYWxjdWxhdGVkIGNyYyBhbmQKKwkgKiB3cml0dGVuIGRhdGEgc3RpbGwgbWF0Y2guICBTbyBkbyB0aGUgbW9kaWZpY2F0aW9ucyBfYmVmb3JlXworCSAqIGNhbGN1bGF0aW5nIHRoZSBjcmMuCisJICovCisKKwloLmxlbgk9IGNwdV90b19iZTE2KGxlbik7CisJaC50eXBlCT0gdHlwZTsKKwloLmNvbXByCT0gY29tcHI7CisJaC5pbm8JPSBjcHVfdG9fYmU2NChpbm9kZS0+aV9pbm8pOworCWguYml4CT0gY3B1X3RvX2JlNjQoc2hhZG93LT5iaXgpOworCWguY3JjCT0gbG9nZnNfY3JjMzIoJmgsIHNpemVvZihoKSAtIDQsIDQpOworCWguZGF0YV9jcmMgPSBsb2dmc19jcmMzMihidWYsIGxlbiwgMCk7CisKKwlsb2dmc19idWZfd3JpdGUoYXJlYSwgb2ZzLCAmaCwgc2l6ZW9mKGgpKTsKKwlsb2dmc19idWZfd3JpdGUoYXJlYSwgb2ZzICsgTE9HRlNfT0JKRUNUX0hFQURFUlNJWkUsIGJ1ZiwgbGVuKTsKKworCXNoYWRvdy0+bmV3X29mcyA9IG9mczsKKwlzaGFkb3ctPm5ld19sZW4gPSBhY2NfbGVuICsgTE9HRlNfT0JKRUNUX0hFQURFUlNJWkU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHM2NCBsb2dmc19zZWdtZW50X3dyaXRlX2NvbXByZXNzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1ZiwKKwkJc3RydWN0IGxvZ2ZzX3NoYWRvdyAqc2hhZG93LCBpbnQgdHlwZSwgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJdm9pZCAqY29tcHJlc3Nvcl9idWYgPSBsb2dmc19zdXBlcihzYiktPnNfY29tcHJlc3NlZF9qZTsKKwlzc2l6ZV90IGNvbXByX2xlbjsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmbG9nZnNfc3VwZXIoc2IpLT5zX2pvdXJuYWxfbXV0ZXgpOworCWNvbXByX2xlbiA9IGxvZ2ZzX2NvbXByZXNzKGJ1ZiwgY29tcHJlc3Nvcl9idWYsIGxlbiwgbGVuKTsKKworCWlmIChjb21wcl9sZW4gPj0gMCkgeworCQlyZXQgPSBfX2xvZ2ZzX3NlZ21lbnRfd3JpdGUoaW5vZGUsIGNvbXByZXNzb3JfYnVmLCBzaGFkb3csCisJCQkJdHlwZSwgY29tcHJfbGVuLCBDT01QUl9aTElCKTsKKwl9IGVsc2UgeworCQlyZXQgPSBfX2xvZ2ZzX3NlZ21lbnRfd3JpdGUoaW5vZGUsIGJ1Ziwgc2hhZG93LCB0eXBlLCBsZW4sCisJCQkJQ09NUFJfTk9ORSk7CisJfQorCW11dGV4X3VubG9jaygmbG9nZnNfc3VwZXIoc2IpLT5zX2pvdXJuYWxfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogbG9nZnNfc2VnbWVudF93cml0ZSAtIHdyaXRlIGRhdGEgYmxvY2sgdG8gb2JqZWN0IHN0b3JlCisgKiBAaW5vZGU6CQlpbm9kZSBjb250YWluaW5nIGRhdGEKKyAqCisgKiBSZXR1cm5zIGFuIGVycm5vIG9yIHplcm8uCisgKi8KK2ludCBsb2dmc19zZWdtZW50X3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlLAorCQlzdHJ1Y3QgbG9nZnNfc2hhZG93ICpzaGFkb3cpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJaW50IGRvX2NvbXByZXNzLCB0eXBlLCBsZW47CisJaW50IHJldDsKKwl2b2lkICpidWY7CisKKwlzdXBlci0+c19mbGFncyB8PSBMT0dGU19TQl9GTEFHX0RJUlRZOworCUJVR19PTihzdXBlci0+c19mbGFncyAmIExPR0ZTX1NCX0ZMQUdfU0hVVERPV04pOworCWRvX2NvbXByZXNzID0gbG9nZnNfaW5vZGUoaW5vZGUpLT5saV9mbGFncyAmIExPR0ZTX0lGX0NPTVBSRVNTRUQ7CisJaWYgKHNoYWRvdy0+Z2NfbGV2ZWwgIT0gMCkgeworCQkvKiB0ZW1wb3JhcmlseSBkaXNhYmxlIGNvbXByZXNzaW9uIGZvciBpbmRpcmVjdCBibG9ja3MgKi8KKwkJZG9fY29tcHJlc3MgPSAwOworCX0KKworCXR5cGUgPSBvYmpfdHlwZShpbm9kZSwgc2hyaW5rX2xldmVsKHNoYWRvdy0+Z2NfbGV2ZWwpKTsKKwlsZW4gPSBvYmpfbGVuKHNiLCB0eXBlKTsKKwlidWYgPSBrbWFwKHBhZ2UpOworCWlmIChkb19jb21wcmVzcykKKwkJcmV0ID0gbG9nZnNfc2VnbWVudF93cml0ZV9jb21wcmVzcyhpbm9kZSwgYnVmLCBzaGFkb3csIHR5cGUsCisJCQkJbGVuKTsKKwllbHNlCisJCXJldCA9IF9fbG9nZnNfc2VnbWVudF93cml0ZShpbm9kZSwgYnVmLCBzaGFkb3csIHR5cGUsIGxlbiwKKwkJCQlDT01QUl9OT05FKTsKKwlrdW5tYXAocGFnZSk7CisKKwlsb2dfc2VnbWVudCgibG9nZnNfc2VnbWVudF93cml0ZSglbGx4LCAlbGx4LCAleCkgJWxseC0+JWxseCAleC0+JXhcbiIsCisJCQlzaGFkb3ctPmlubywgc2hhZG93LT5iaXgsIHNoYWRvdy0+Z2NfbGV2ZWwsCisJCQlzaGFkb3ctPm9sZF9vZnMsIHNoYWRvdy0+bmV3X29mcywKKwkJCXNoYWRvdy0+b2xkX2xlbiwgc2hhZG93LT5uZXdfbGVuKTsKKwkvKiB0aGlzIEJVR19PTiBkaWQgY2F0Y2ggYSBsb2NraW5nIGJ1Zy4gIHVzZWZ1bCAqLworCUJVR19PTighKHNoYWRvdy0+bmV3X29mcyAmIChzdXBlci0+c19zZWdzaXplIC0gMSkpKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2J1Zl9yZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBvZnMsIHNpemVfdCBsZW4sIHZvaWQgKmJ1ZikKK3sKKwlwZ29mZl90IGluZGV4ID0gb2ZzID4+IFBBR0VfU0hJRlQ7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJbG9uZyBvZmZzZXQgPSBvZnMgJiAoUEFHRV9TSVpFLTEpOworCWxvbmcgY29weWxlbjsKKworCXdoaWxlIChsZW4pIHsKKwkJY29weWxlbiA9IG1pbigodWxvbmcpbGVuLCBQQUdFX1NJWkUgLSBvZmZzZXQpOworCisJCXBhZ2UgPSBnZXRfbWFwcGluZ19wYWdlKHNiLCBpbmRleCwgMSk7CisJCWlmIChJU19FUlIocGFnZSkpCisJCQlyZXR1cm4gUFRSX0VSUihwYWdlKTsKKwkJbWVtY3B5KGJ1ZiwgcGFnZV9hZGRyZXNzKHBhZ2UpICsgb2Zmc2V0LCBjb3B5bGVuKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCisJCWJ1ZiArPSBjb3B5bGVuOworCQlsZW4gLT0gY29weWxlbjsKKwkJb2Zmc2V0ID0gMDsKKwkJaW5kZXgrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGUgInBvc2l0aW9uIiBvZiBpbmRpcmVjdCBibG9ja3MgaXMgYW1iaWd1b3VzLiAgSXQgY2FuIGJlIHRoZSBwb3NpdGlvbgorICogb2YgYW55IGRhdGEgYmxvY2sgc29tZXdoZXJlIGJlaGluZCB0aGlzIGluZGlyZWN0IGJsb2NrLiAgU28gd2UgbmVlZCB0bworICogbm9ybWFsaXplIHRoZSBwb3NpdGlvbnMgdGhyb3VnaCBsb2dmc19ibG9ja19tYXNrKCkgYmVmb3JlIGNvbXBhcmluZy4KKyAqLworc3RhdGljIGludCBjaGVja19wb3Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IHBvczEsIHU2NCBwb3MyLCBsZXZlbF90IGxldmVsKQoreworCXJldHVybgkocG9zMSAmIGxvZ2ZzX2Jsb2NrX21hc2soc2IsIGxldmVsKSkgIT0KKwkJKHBvczIgJiBsb2dmc19ibG9ja19tYXNrKHNiLCBsZXZlbCkpOworfQorCisjaWYgMAorc3RhdGljIGludCByZWFkX3NlZ19oZWFkZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IG9mcywKKwkJc3RydWN0IGxvZ2ZzX3NlZ21lbnRfaGVhZGVyICpzaCkKK3sKKwlfX2JlMzIgY3JjOworCWludCBlcnI7CisKKwllcnIgPSB3YnVmX3JlYWQoc2IsIG9mcywgc2l6ZW9mKCpzaCksIHNoKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWNyYyA9IGxvZ2ZzX2NyYzMyKHNoLCBzaXplb2YoKnNoKSwgNCk7CisJaWYgKGNyYyAhPSBzaC0+Y3JjKSB7CisJCXByaW50ayhLRVJOX0VSUiJMT0dGUzogaGVhZGVyIGNyYyBlcnJvciBhdCAlbGx4OiBleHBlY3RlZCAleCwgIgorCQkJCSJnb3QgJXhcbiIsIG9mcywgYmUzMl90b19jcHUoc2gtPmNyYyksCisJCQkJYmUzMl90b19jcHUoY3JjKSk7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHJlYWRfb2JqX2hlYWRlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgb2ZzLAorCQlzdHJ1Y3QgbG9nZnNfb2JqZWN0X2hlYWRlciAqb2gpCit7CisJX19iZTMyIGNyYzsKKwlpbnQgZXJyOworCisJZXJyID0gd2J1Zl9yZWFkKHNiLCBvZnMsIHNpemVvZigqb2gpLCBvaCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwljcmMgPSBsb2dmc19jcmMzMihvaCwgc2l6ZW9mKCpvaCkgLSA0LCA0KTsKKwlpZiAoY3JjICE9IG9oLT5jcmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIkxPR0ZTOiBoZWFkZXIgY3JjIGVycm9yIGF0ICVsbHg6IGV4cGVjdGVkICV4LCAiCisJCQkJImdvdCAleFxuIiwgb2ZzLCBiZTMyX3RvX2NwdShvaC0+Y3JjKSwKKwkJCQliZTMyX3RvX2NwdShjcmMpKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtb3ZlX2J0cmVlX3RvX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCV9fYmU2NCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgYnRyZWVfaGVhZDEyOCAqaGVhZCA9ICZzdXBlci0+c19vYmplY3RfYWxpYXNfdHJlZTsKKwlzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrOworCXN0cnVjdCBvYmplY3RfYWxpYXNfaXRlbSAqaXRlbSwgKm5leHQ7CisKKwlpZiAoIShzdXBlci0+c19mbGFncyAmIExPR0ZTX1NCX0ZMQUdfT0JKX0FMSUFTKSkKKwkJcmV0dXJuOworCisJYmxvY2sgPSBidHJlZV9yZW1vdmUxMjgoaGVhZCwgaW5vZGUtPmlfaW5vLCBwYWdlLT5pbmRleCk7CisJaWYgKCFibG9jaykKKwkJcmV0dXJuOworCisJbG9nX2Jsb2NrbW92ZSgibW92ZV9idHJlZV90b19wYWdlKCVsbHgsICVsbHgsICV4KVxuIiwKKwkJCWJsb2NrLT5pbm8sIGJsb2NrLT5iaXgsIGJsb2NrLT5sZXZlbCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGl0ZW0sIG5leHQsICZibG9jay0+aXRlbV9saXN0LCBsaXN0KSB7CisJCWRhdGFbaXRlbS0+Y2hpbGRfbm9dID0gaXRlbS0+dmFsOworCQlsaXN0X2RlbCgmaXRlbS0+bGlzdCk7CisJCW1lbXBvb2xfZnJlZShpdGVtLCBzdXBlci0+c19hbGlhc19wb29sKTsKKwl9CisJYmxvY2stPnBhZ2UgPSBwYWdlOworCVNldFBhZ2VQcml2YXRlKHBhZ2UpOworCXBhZ2UtPnByaXZhdGUgPSAodW5zaWduZWQgbG9uZylibG9jazsKKwlibG9jay0+b3BzID0gJmluZGlyZWN0X2Jsb2NrX29wczsKKwlpbml0aWFsaXplX2Jsb2NrX2NvdW50ZXJzKHBhZ2UsIGJsb2NrLCBkYXRhLCAwKTsKK30KKworLyoKKyAqIFRoaXMgc2lsZW5jZXMgYSBmYWxzZSwgeWV0IGFubm95aW5nIGdjYyB3YXJuaW5nLiAgSSBoYXRlIGl0IHdoZW4gbXkgZWRpdG9yCisgKiBqdW1wcyBpbnRvIGJpdG9wcy5oIGVhY2ggdGltZSBJIHJlY29tcGlsZSB0aGlzIGZpbGUuCisgKiBUT0RPOiBDb21wbGFpbiB0byBnY2MgZm9sa3MgYWJvdXQgdGhpcyBhbmQgdXBncmFkZSBjb21waWxlci4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgZm5iKGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkZHIsCisJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJcmV0dXJuIGZpbmRfbmV4dF9iaXQoYWRkciwgc2l6ZSwgb2Zmc2V0KTsKK30KKwordm9pZCBtb3ZlX3BhZ2VfdG9fYnRyZWUoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jayA9IGxvZ2ZzX2Jsb2NrKHBhZ2UpOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBibG9jay0+c2I7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3Qgb2JqZWN0X2FsaWFzX2l0ZW0gKml0ZW07CisJdW5zaWduZWQgbG9uZyBwb3M7CisJX19iZTY0ICpjaGlsZDsKKwlpbnQgZXJyOworCisJaWYgKHN1cGVyLT5zX2ZsYWdzICYgTE9HRlNfU0JfRkxBR19TSFVURE9XTikgeworCQlibG9jay0+b3BzLT5mcmVlX2Jsb2NrKHNiLCBibG9jayk7CisJCXJldHVybjsKKwl9CisJbG9nX2Jsb2NrbW92ZSgibW92ZV9wYWdlX3RvX2J0cmVlKCVsbHgsICVsbHgsICV4KVxuIiwKKwkJCWJsb2NrLT5pbm8sIGJsb2NrLT5iaXgsIGJsb2NrLT5sZXZlbCk7CisJc3VwZXItPnNfZmxhZ3MgfD0gTE9HRlNfU0JfRkxBR19PQkpfQUxJQVM7CisKKwlmb3IgKHBvcyA9IDA7IDsgcG9zKyspIHsKKwkJcG9zID0gZm5iKGJsb2NrLT5hbGlhc19tYXAsIExPR0ZTX0JMT0NLX0ZBQ1RPUiwgcG9zKTsKKwkJaWYgKHBvcyA+PSBMT0dGU19CTE9DS19GQUNUT1IpCisJCQlicmVhazsKKworCQlpdGVtID0gbWVtcG9vbF9hbGxvYyhzdXBlci0+c19hbGlhc19wb29sLCBHRlBfTk9GUyk7CisJCUJVR19PTighaXRlbSk7IC8qIG1lbXBvb2wgZW1wdHkgKi8KKwkJbWVtc2V0KGl0ZW0sIDAsIHNpemVvZigqaXRlbSkpOworCisJCWNoaWxkID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCQlpdGVtLT52YWwgPSBjaGlsZFtwb3NdOworCQlrdW5tYXBfYXRvbWljKGNoaWxkLCBLTV9VU0VSMCk7CisJCWl0ZW0tPmNoaWxkX25vID0gcG9zOworCQlsaXN0X2FkZCgmaXRlbS0+bGlzdCwgJmJsb2NrLT5pdGVtX2xpc3QpOworCX0KKwlibG9jay0+cGFnZSA9IE5VTEw7CisJQ2xlYXJQYWdlUHJpdmF0ZShwYWdlKTsKKwlwYWdlLT5wcml2YXRlID0gMDsKKwlibG9jay0+b3BzID0gJmJ0cmVlX2Jsb2NrX29wczsKKwllcnIgPSBhbGlhc190cmVlX2luc2VydChibG9jay0+c2IsIGJsb2NrLT5pbm8sIGJsb2NrLT5iaXgsIGJsb2NrLT5sZXZlbCwKKwkJCWJsb2NrKTsKKwlCVUdfT04oZXJyKTsgLyogbWVtcG9vbCBlbXB0eSAqLworCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOworfQorCitzdGF0aWMgaW50IF9fbG9nZnNfc2VnbWVudF9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1ZiwKKwkJdTY0IG9mcywgdTY0IGJpeCwgbGV2ZWxfdCBsZXZlbCkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJdm9pZCAqY29tcHJlc3Nvcl9idWYgPSBsb2dmc19zdXBlcihzYiktPnNfY29tcHJlc3NlZF9qZTsKKwlzdHJ1Y3QgbG9nZnNfb2JqZWN0X2hlYWRlciBvaDsKKwlfX2JlMzIgY3JjOworCXUxNiBsZW47CisJaW50IGVyciwgYmxvY2tfbGVuOworCisJYmxvY2tfbGVuID0gb2JqX2xlbihzYiwgb2JqX3R5cGUoaW5vZGUsIGxldmVsKSk7CisJZXJyID0gcmVhZF9vYmpfaGVhZGVyKHNiLCBvZnMsICZvaCk7CisJaWYgKGVycikKKwkJZ290byBvdXRfZXJyOworCisJZXJyID0gLUVJTzsKKwlpZiAoYmU2NF90b19jcHUob2guaW5vKSAhPSBpbm9kZS0+aV9pbm8KKwkJCXx8IGNoZWNrX3BvcyhzYiwgYmU2NF90b19jcHUob2guYml4KSwgYml4LCBsZXZlbCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIkxPR0ZTOiAoaW5vLCBiaXgpIGRvbid0IG1hdGNoIGF0ICVsbHg6ICIKKwkJCQkiZXhwZWN0ZWQgKCVseCwgJWxseCksIGdvdCAoJWxseCwgJWxseClcbiIsCisJCQkJb2ZzLCBpbm9kZS0+aV9pbm8sIGJpeCwKKwkJCQliZTY0X3RvX2NwdShvaC5pbm8pLCBiZTY0X3RvX2NwdShvaC5iaXgpKTsKKwkJZ290byBvdXRfZXJyOworCX0KKworCWxlbiA9IGJlMTZfdG9fY3B1KG9oLmxlbik7CisKKwlzd2l0Y2ggKG9oLmNvbXByKSB7CisJY2FzZSBDT01QUl9OT05FOgorCQllcnIgPSB3YnVmX3JlYWQoc2IsIG9mcyArIExPR0ZTX09CSkVDVF9IRUFERVJTSVpFLCBsZW4sIGJ1Zik7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dF9lcnI7CisJCWNyYyA9IGxvZ2ZzX2NyYzMyKGJ1ZiwgbGVuLCAwKTsKKwkJaWYgKGNyYyAhPSBvaC5kYXRhX2NyYykgeworCQkJcHJpbnRrKEtFUk5fRVJSIkxPR0ZTOiB1bmNvbXByZXNzZWQgZGF0YSBjcmMgZXJyb3IgYXQgIgorCQkJCQkiJWxseDogZXhwZWN0ZWQgJXgsIGdvdCAleFxuIiwgb2ZzLAorCQkJCQliZTMyX3RvX2NwdShvaC5kYXRhX2NyYyksCisJCQkJCWJlMzJfdG9fY3B1KGNyYykpOworCQkJZ290byBvdXRfZXJyOworCQl9CisJCWJyZWFrOworCWNhc2UgQ09NUFJfWkxJQjoKKwkJbXV0ZXhfbG9jaygmbG9nZnNfc3VwZXIoc2IpLT5zX2pvdXJuYWxfbXV0ZXgpOworCQllcnIgPSB3YnVmX3JlYWQoc2IsIG9mcyArIExPR0ZTX09CSkVDVF9IRUFERVJTSVpFLCBsZW4sCisJCQkJY29tcHJlc3Nvcl9idWYpOworCQlpZiAoZXJyKSB7CisJCQltdXRleF91bmxvY2soJmxvZ2ZzX3N1cGVyKHNiKS0+c19qb3VybmFsX211dGV4KTsKKwkJCWdvdG8gb3V0X2VycjsKKwkJfQorCQljcmMgPSBsb2dmc19jcmMzMihjb21wcmVzc29yX2J1ZiwgbGVuLCAwKTsKKwkJaWYgKGNyYyAhPSBvaC5kYXRhX2NyYykgeworCQkJcHJpbnRrKEtFUk5fRVJSIkxPR0ZTOiBjb21wcmVzc2VkIGRhdGEgY3JjIGVycm9yIGF0ICIKKwkJCQkJIiVsbHg6IGV4cGVjdGVkICV4LCBnb3QgJXhcbiIsIG9mcywKKwkJCQkJYmUzMl90b19jcHUob2guZGF0YV9jcmMpLAorCQkJCQliZTMyX3RvX2NwdShjcmMpKTsKKwkJCW11dGV4X3VubG9jaygmbG9nZnNfc3VwZXIoc2IpLT5zX2pvdXJuYWxfbXV0ZXgpOworCQkJZ290byBvdXRfZXJyOworCQl9CisJCWVyciA9IGxvZ2ZzX3VuY29tcHJlc3MoY29tcHJlc3Nvcl9idWYsIGJ1ZiwgbGVuLCBibG9ja19sZW4pOworCQltdXRleF91bmxvY2soJmxvZ2ZzX3N1cGVyKHNiKS0+c19qb3VybmFsX211dGV4KTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSIkxPR0ZTOiB1bmNvbXByZXNzIGVycm9yIGF0ICVsbHhcbiIsIG9mcyk7CisJCQlnb3RvIG91dF9lcnI7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJTE9HRlNfQlVHKHNiKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBvdXRfZXJyOworCX0KKwlyZXR1cm4gMDsKKworb3V0X2VycjoKKwlsb2dmc19zZXRfcm8oc2IpOworCXByaW50ayhLRVJOX0VSUiJMT0dGUzogZGV2aWNlIGlzIHJlYWQtb25seSBub3dcbiIpOworCUxPR0ZTX0JVRyhzYik7CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBsb2dmc19zZWdtZW50X3JlYWQgLSByZWFkIGRhdGEgYmxvY2sgZnJvbSBvYmplY3Qgc3RvcmUKKyAqIEBpbm9kZToJCWlub2RlIGNvbnRhaW5pbmcgZGF0YQorICogQGJ1ZjoJCWRhdGEgYnVmZmVyCisgKiBAb2ZzOgkJcGh5c2ljYWwgZGF0YSBvZmZzZXQKKyAqIEBiaXg6CQlibG9jayBpbmRleAorICogQGxldmVsOgkJYmxvY2sgbGV2ZWwKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm5vLgorICovCitpbnQgbG9nZnNfc2VnbWVudF9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlLAorCQl1NjQgb2ZzLCB1NjQgYml4LCBsZXZlbF90IGxldmVsKQoreworCWludCBlcnI7CisJdm9pZCAqYnVmOworCisJaWYgKFBhZ2VVcHRvZGF0ZShwYWdlKSkKKwkJcmV0dXJuIDA7CisKKwlvZnMgJj0gfkxPR0ZTX0ZVTExZX1BPUFVMQVRFRDsKKworCWJ1ZiA9IGttYXAocGFnZSk7CisJZXJyID0gX19sb2dmc19zZWdtZW50X3JlYWQoaW5vZGUsIGJ1Ziwgb2ZzLCBiaXgsIGxldmVsKTsKKwlpZiAoIWVycikgeworCQltb3ZlX2J0cmVlX3RvX3BhZ2UoaW5vZGUsIHBhZ2UsIGJ1Zik7CisJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKwl9CisJa3VubWFwKHBhZ2UpOworCWxvZ19zZWdtZW50KCJsb2dmc19zZWdtZW50X3JlYWQoJWx4LCAlbGx4LCAleCkgJWxseCAoJWQpXG4iLAorCQkJaW5vZGUtPmlfaW5vLCBiaXgsIGxldmVsLCBvZnMsIGVycik7CisJcmV0dXJuIGVycjsKK30KKworaW50IGxvZ2ZzX3NlZ21lbnRfZGVsZXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBsb2dmc19zaGFkb3cgKnNoYWRvdykKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgbG9nZnNfb2JqZWN0X2hlYWRlciBoOworCXUxNiBsZW47CisJaW50IGVycjsKKworCXN1cGVyLT5zX2ZsYWdzIHw9IExPR0ZTX1NCX0ZMQUdfRElSVFk7CisJQlVHX09OKHN1cGVyLT5zX2ZsYWdzICYgTE9HRlNfU0JfRkxBR19TSFVURE9XTik7CisJQlVHX09OKHNoYWRvdy0+b2xkX29mcyAmIExPR0ZTX0ZVTExZX1BPUFVMQVRFRCk7CisJaWYgKCFzaGFkb3ctPm9sZF9vZnMpCisJCXJldHVybiAwOworCisJbG9nX3NlZ21lbnQoImxvZ2ZzX3NlZ21lbnRfZGVsZXRlKCVsbHgsICVsbHgsICV4KSAlbGx4LT4lbGx4ICV4LT4leFxuIiwKKwkJCXNoYWRvdy0+aW5vLCBzaGFkb3ctPmJpeCwgc2hhZG93LT5nY19sZXZlbCwKKwkJCXNoYWRvdy0+b2xkX29mcywgc2hhZG93LT5uZXdfb2ZzLAorCQkJc2hhZG93LT5vbGRfbGVuLCBzaGFkb3ctPm5ld19sZW4pOworCWVyciA9IHJlYWRfb2JqX2hlYWRlcihzYiwgc2hhZG93LT5vbGRfb2ZzLCAmaCk7CisJTE9HRlNfQlVHX09OKGVyciwgc2IpOworCUxPR0ZTX0JVR19PTihiZTY0X3RvX2NwdShoLmlubykgIT0gaW5vZGUtPmlfaW5vLCBzYik7CisJTE9HRlNfQlVHX09OKGNoZWNrX3BvcyhzYiwgc2hhZG93LT5iaXgsIGJlNjRfdG9fY3B1KGguYml4KSwKKwkJCQlzaHJpbmtfbGV2ZWwoc2hhZG93LT5nY19sZXZlbCkpLCBzYik7CisKKwlpZiAoc2hhZG93LT5nY19sZXZlbCA9PSAwKQorCQlsZW4gPSBiZTE2X3RvX2NwdShoLmxlbik7CisJZWxzZQorCQlsZW4gPSBvYmpfbGVuKHNiLCBoLnR5cGUpOworCXNoYWRvdy0+b2xkX2xlbiA9IGxlbiArIHNpemVvZihoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZnJlZXNlZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2Vnbm8pCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHN1cGVyLT5zX21hcHBpbmdfaW5vZGUtPmlfbWFwcGluZzsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1NjQgb2ZzLCBzdGFydCwgZW5kOworCisJc3RhcnQgPSBkZXZfb2ZzKHNiLCBzZWdubywgMCk7CisJZW5kID0gZGV2X29mcyhzYiwgc2Vnbm8gKyAxLCAwKTsKKwlmb3IgKG9mcyA9IHN0YXJ0OyBvZnMgPCBlbmQ7IG9mcyArPSBQQUdFX1NJWkUpIHsKKwkJcGFnZSA9IGZpbmRfZ2V0X3BhZ2UobWFwcGluZywgb2ZzID4+IFBBR0VfU0hJRlQpOworCQlpZiAoIXBhZ2UpCisJCQljb250aW51ZTsKKwkJQ2xlYXJQYWdlUHJpdmF0ZShwYWdlKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCX0KK30KKworaW50IGxvZ2ZzX29wZW5fYXJlYShzdHJ1Y3QgbG9nZnNfYXJlYSAqYXJlYSwgc2l6ZV90IGJ5dGVzKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBhcmVhLT5hX3NiOworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJaW50IGVyciwgY2xvc2VkID0gMDsKKworCWlmIChhcmVhLT5hX2lzX29wZW4gJiYgYXJlYS0+YV91c2VkX2J5dGVzICsgYnl0ZXMgPD0gc3VwZXItPnNfc2Vnc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoYXJlYS0+YV9pc19vcGVuKSB7CisJCXU2NCBvZnMgPSBkZXZfb2ZzKHNiLCBhcmVhLT5hX3NlZ25vLCBhcmVhLT5hX3dyaXR0ZW5fYnl0ZXMpOworCQl1MzIgbGVuID0gc3VwZXItPnNfc2Vnc2l6ZSAtIGFyZWEtPmFfd3JpdHRlbl9ieXRlczsKKworCQlsb2dfZ2MoImxvZ2ZzX2Nsb3NlX2FyZWEoJXgpXG4iLCBhcmVhLT5hX3NlZ25vKTsKKwkJcGFkX3didWYoYXJlYSwgMSk7CisJCXN1cGVyLT5zX2Rldm9wcy0+d3JpdGVzZWcoYXJlYS0+YV9zYiwgb2ZzLCBsZW4pOworCQlmcmVlc2VnKHNiLCBhcmVhLT5hX3NlZ25vKTsKKwkJY2xvc2VkID0gMTsKKwl9CisKKwlhcmVhLT5hX3VzZWRfYnl0ZXMgPSAwOworCWFyZWEtPmFfd3JpdHRlbl9ieXRlcyA9IDA7CithZ2FpbjoKKwlhcmVhLT5hX29wcy0+Z2V0X2ZyZWVfc2VnbWVudChhcmVhKTsKKwlhcmVhLT5hX29wcy0+Z2V0X2VyYXNlX2NvdW50KGFyZWEpOworCisJbG9nX2djKCJsb2dmc19vcGVuX2FyZWEoJXgsICV4KVxuIiwgYXJlYS0+YV9zZWdubywgYXJlYS0+YV9sZXZlbCk7CisJZXJyID0gYXJlYS0+YV9vcHMtPmVyYXNlX3NlZ21lbnQoYXJlYSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJMb2dGUzogRXJyb3IgZXJhc2luZyBzZWdtZW50ICV4XG4iLAorCQkJCWFyZWEtPmFfc2Vnbm8pOworCQlsb2dmc19tYXJrX3NlZ21lbnRfYmFkKHNiLCBhcmVhLT5hX3NlZ25vKTsKKwkJZ290byBhZ2FpbjsKKwl9CisJYXJlYS0+YV9pc19vcGVuID0gMTsKKwlyZXR1cm4gY2xvc2VkOworfQorCit2b2lkIGxvZ2ZzX3N5bmNfYXJlYShzdHJ1Y3QgbG9nZnNfYXJlYSAqYXJlYSkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gYXJlYS0+YV9zYjsKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXU2NCBvZnMgPSBkZXZfb2ZzKHNiLCBhcmVhLT5hX3NlZ25vLCBhcmVhLT5hX3dyaXR0ZW5fYnl0ZXMpOworCXUzMiBsZW4gPSAoYXJlYS0+YV91c2VkX2J5dGVzIC0gYXJlYS0+YV93cml0dGVuX2J5dGVzKTsKKworCWlmIChzdXBlci0+c193cml0ZXNpemUpCisJCWxlbiAmPSB+KHN1cGVyLT5zX3dyaXRlc2l6ZSAtIDEpOworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuOworCXBhZF93YnVmKGFyZWEsIDApOworCXN1cGVyLT5zX2Rldm9wcy0+d3JpdGVzZWcoc2IsIG9mcywgbGVuKTsKKwlhcmVhLT5hX3dyaXR0ZW5fYnl0ZXMgKz0gbGVuOworfQorCit2b2lkIGxvZ2ZzX3N5bmNfc2VnbWVudHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCWludCBpOworCisJZm9yX2VhY2hfYXJlYShpKQorCQlsb2dmc19zeW5jX2FyZWEoc3VwZXItPnNfYXJlYVtpXSk7Cit9CisKKy8qCisgKiBQaWNrIGEgZnJlZSBzZWdtZW50IHRvIGJlIHVzZWQgZm9yIHRoaXMgYXJlYS4gIEVmZmVjdGl2ZWx5IHRha2VzIGEKKyAqIGNhbmRpZGF0ZSBmcm9tIHRoZSBmcmVlIGxpc3QgKG5vdCByZWFsbHkgYSBjYW5kaWRhdGUgYW55bW9yZSkuCisgKi8KK3N0YXRpYyB2b2lkIG9zdG9yZV9nZXRfZnJlZV9zZWdtZW50KHN0cnVjdCBsb2dmc19hcmVhICphcmVhKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBhcmVhLT5hX3NiOworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisKKwlpZiAoc3VwZXItPnNfZnJlZV9saXN0LmNvdW50ID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIkxPR0ZTOiByYW4gb3V0IG9mIGZyZWUgc2VnbWVudHNcbiIpOworCQlMT0dGU19CVUcoc2IpOworCX0KKworCWFyZWEtPmFfc2Vnbm8gPSBnZXRfYmVzdF9jYW5kKHNiLCAmc3VwZXItPnNfZnJlZV9saXN0LCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgb3N0b3JlX2dldF9lcmFzZV9jb3VudChzdHJ1Y3QgbG9nZnNfYXJlYSAqYXJlYSkKK3sKKwlzdHJ1Y3QgbG9nZnNfc2VnbWVudF9lbnRyeSBzZTsKKwl1MzIgZWNfbGV2ZWw7CisKKwlsb2dmc19nZXRfc2VnbWVudF9lbnRyeShhcmVhLT5hX3NiLCBhcmVhLT5hX3NlZ25vLCAmc2UpOworCUJVR19PTihzZS5lY19sZXZlbCA9PSBjcHVfdG9fYmUzMihCQURTRUcpIHx8CisJCQlzZS52YWxpZCA9PSBjcHVfdG9fYmUzMihSRVNFUlZFRCkpOworCisJZWNfbGV2ZWwgPSBiZTMyX3RvX2NwdShzZS5lY19sZXZlbCk7CisJYXJlYS0+YV9lcmFzZV9jb3VudCA9IChlY19sZXZlbCA+PiA0KSArIDE7Cit9CisKK3N0YXRpYyBpbnQgb3N0b3JlX2VyYXNlX3NlZ21lbnQoc3RydWN0IGxvZ2ZzX2FyZWEgKmFyZWEpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGFyZWEtPmFfc2I7CisJc3RydWN0IGxvZ2ZzX3NlZ21lbnRfaGVhZGVyIHNoOworCXU2NCBvZnM7CisJaW50IGVycjsKKworCWVyciA9IGxvZ2ZzX2VyYXNlX3NlZ21lbnQoc2IsIGFyZWEtPmFfc2Vnbm8sIDApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlzaC5wYWQgPSAwOworCXNoLnR5cGUgPSBTRUdfT1NUT1JFOworCXNoLmxldmVsID0gKF9fZm9yY2UgdTgpYXJlYS0+YV9sZXZlbDsKKwlzaC5zZWdubyA9IGNwdV90b19iZTMyKGFyZWEtPmFfc2Vnbm8pOworCXNoLmVjID0gY3B1X3RvX2JlMzIoYXJlYS0+YV9lcmFzZV9jb3VudCk7CisJc2guZ2VjID0gY3B1X3RvX2JlNjQobG9nZnNfc3VwZXIoc2IpLT5zX2dlYyk7CisJc2guY3JjID0gbG9nZnNfY3JjMzIoJnNoLCBzaXplb2Yoc2gpLCA0KTsKKworCWxvZ2ZzX3NldF9zZWdtZW50X2VyYXNlZChzYiwgYXJlYS0+YV9zZWdubywgYXJlYS0+YV9lcmFzZV9jb3VudCwKKwkJCWFyZWEtPmFfbGV2ZWwpOworCisJb2ZzID0gZGV2X29mcyhzYiwgYXJlYS0+YV9zZWdubywgMCk7CisJYXJlYS0+YV91c2VkX2J5dGVzID0gc2l6ZW9mKHNoKTsKKwlsb2dmc19idWZfd3JpdGUoYXJlYSwgb2ZzLCAmc2gsIHNpemVvZihzaCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGxvZ2ZzX2FyZWFfb3BzIG9zdG9yZV9hcmVhX29wcyA9IHsKKwkuZ2V0X2ZyZWVfc2VnbWVudAk9IG9zdG9yZV9nZXRfZnJlZV9zZWdtZW50LAorCS5nZXRfZXJhc2VfY291bnQJPSBvc3RvcmVfZ2V0X2VyYXNlX2NvdW50LAorCS5lcmFzZV9zZWdtZW50CQk9IG9zdG9yZV9lcmFzZV9zZWdtZW50LAorfTsKKworc3RhdGljIHZvaWQgZnJlZV9hcmVhKHN0cnVjdCBsb2dmc19hcmVhICphcmVhKQoreworCWlmIChhcmVhKQorCQlmcmVlc2VnKGFyZWEtPmFfc2IsIGFyZWEtPmFfc2Vnbm8pOworCWtmcmVlKGFyZWEpOworfQorCitzdGF0aWMgc3RydWN0IGxvZ2ZzX2FyZWEgKmFsbG9jX2FyZWEoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbG9nZnNfYXJlYSAqYXJlYTsKKworCWFyZWEgPSBremFsbG9jKHNpemVvZigqYXJlYSksIEdGUF9LRVJORUwpOworCWlmICghYXJlYSkKKwkJcmV0dXJuIE5VTEw7CisKKwlhcmVhLT5hX3NiID0gc2I7CisJcmV0dXJuIGFyZWE7Cit9CisKK3N0YXRpYyB2b2lkIG1hcF9pbnZhbGlkYXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBsKQoreworCUJVRygpOworfQorCitzdGF0aWMgaW50IG1hcF9yZWxlYXNlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZykKK3sKKwkvKiBEb24ndCByZWxlYXNlIHRoZXNlIHBhZ2VzICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG1hcHBpbmdfYW9wcyA9IHsKKwkuaW52YWxpZGF0ZXBhZ2UgPSBtYXBfaW52YWxpZGF0ZXBhZ2UsCisJLnJlbGVhc2VwYWdlCT0gbWFwX3JlbGVhc2VwYWdlLAorCS5zZXRfcGFnZV9kaXJ0eSA9IF9fc2V0X3BhZ2VfZGlydHlfbm9idWZmZXJzLAorfTsKKworaW50IGxvZ2ZzX2luaXRfbWFwcGluZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CisJc3RydWN0IGlub2RlICppbm9kZTsKKworCWlub2RlID0gbG9nZnNfbmV3X21ldGFfaW5vZGUoc2IsIExPR0ZTX0lOT19NQVBQSU5HKTsKKwlpZiAoSVNfRVJSKGlub2RlKSkKKwkJcmV0dXJuIFBUUl9FUlIoaW5vZGUpOworCXN1cGVyLT5zX21hcHBpbmdfaW5vZGUgPSBpbm9kZTsKKwltYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKKwltYXBwaW5nLT5hX29wcyA9ICZtYXBwaW5nX2FvcHM7CisJLyogV291bGQgaXQgYmUgcG9zc2libGUgdG8gdXNlIF9fR0ZQX0hJR0hNRU0gYXMgd2VsbD8gKi8KKwltYXBwaW5nX3NldF9nZnBfbWFzayhtYXBwaW5nLCBHRlBfTk9GUyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBsb2dmc19pbml0X2FyZWFzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlpbnQgaSA9IC0xOworCisJc3VwZXItPnNfYWxpYXNfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX2ttYWxsb2NfcG9vbCg2MDAsCisJCQlzaXplb2Yoc3RydWN0IG9iamVjdF9hbGlhc19pdGVtKSk7CisJaWYgKCFzdXBlci0+c19hbGlhc19wb29sKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXN1cGVyLT5zX2pvdXJuYWxfYXJlYSA9IGFsbG9jX2FyZWEoc2IpOworCWlmICghc3VwZXItPnNfam91cm5hbF9hcmVhKQorCQlnb3RvIGVycjsKKworCWZvcl9lYWNoX2FyZWEoaSkgeworCQlzdXBlci0+c19hcmVhW2ldID0gYWxsb2NfYXJlYShzYik7CisJCWlmICghc3VwZXItPnNfYXJlYVtpXSkKKwkJCWdvdG8gZXJyOworCQlzdXBlci0+c19hcmVhW2ldLT5hX2xldmVsID0gR0NfTEVWRUwoaSk7CisJCXN1cGVyLT5zX2FyZWFbaV0tPmFfb3BzID0gJm9zdG9yZV9hcmVhX29wczsKKwl9CisJYnRyZWVfaW5pdF9tZW1wb29sMTI4KCZzdXBlci0+c19vYmplY3RfYWxpYXNfdHJlZSwKKwkJCXN1cGVyLT5zX2J0cmVlX3Bvb2wpOworCXJldHVybiAwOworCitlcnI6CisJZm9yIChpLS07IGkgPj0gMDsgaS0tKQorCQlmcmVlX2FyZWEoc3VwZXItPnNfYXJlYVtpXSk7CisJZnJlZV9hcmVhKHN1cGVyLT5zX2pvdXJuYWxfYXJlYSk7CisJbWVtcG9vbF9kZXN0cm95KHN1cGVyLT5zX2FsaWFzX3Bvb2wpOworCXJldHVybiAtRU5PTUVNOworfQorCit2b2lkIGxvZ2ZzX2NsZWFudXBfYXJlYXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCWludCBpOworCisJYnRyZWVfZ3JpbV92aXNpdG9yMTI4KCZzdXBlci0+c19vYmplY3RfYWxpYXNfdHJlZSwgMCwga2lsbF9hbGlhcyk7CisJZm9yX2VhY2hfYXJlYShpKQorCQlmcmVlX2FyZWEoc3VwZXItPnNfYXJlYVtpXSk7CisJZnJlZV9hcmVhKHN1cGVyLT5zX2pvdXJuYWxfYXJlYSk7CisJZGVzdHJveV9tZXRhX2lub2RlKHN1cGVyLT5zX21hcHBpbmdfaW5vZGUpOworfQpkaWZmIC0tZ2l0IGEvZnMvbG9nZnMvc3VwZXIuYyBiL2ZzL2xvZ2ZzL3N1cGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY2YmVhYgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2xvZ2ZzL3N1cGVyLmMKQEAgLTAsMCArMSw2NTAgQEAKKy8qCisgKiBmcy9sb2dmcy9zdXBlci5jCisgKgorICogQXMgc2hvdWxkIGJlIG9idmlvdXMgZm9yIExpbnV4IGtlcm5lbCBjb2RlLCBsaWNlbnNlIGlzIEdQTHYyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDggSm9lcm4gRW5nZWwgPGpvZXJuQGxvZ2ZzLm9yZz4KKyAqCisgKiBHZW5lcmFsbHkgY29udGFpbnMgbW91bnQvdW1vdW50IGNvZGUgYW5kIGFsc28gc2VydmVzIGFzIGEgZHVtcCBhcmVhIGZvcgorICogYW55IGZ1bmN0aW9ucyB0aGF0IGRvbid0IGZpdCBlbHNld2hlcmUgYW5kIG5laXRoZXIganVzdGlmeSBhIGZpbGUgb2YgdGhlaXIKKyAqIG93bi4KKyAqLworI2luY2x1ZGUgImxvZ2ZzLmgiCisjaW5jbHVkZSA8bGludXgvYmlvLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YXRmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisKK3N0YXRpYyBERUZJTkVfTVVURVgoZW1lcmdlbmN5X211dGV4KTsKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqZW1lcmdlbmN5X3BhZ2U7CisKK3N0cnVjdCBwYWdlICplbWVyZ2VuY3lfcmVhZF9iZWdpbihzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBpbmRleCkKK3sKKwlmaWxsZXJfdCAqZmlsbGVyID0gKGZpbGxlcl90ICopbWFwcGluZy0+YV9vcHMtPnJlYWRwYWdlOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCBlcnI7CisKKwlwYWdlID0gcmVhZF9jYWNoZV9wYWdlKG1hcHBpbmcsIGluZGV4LCBmaWxsZXIsIE5VTEwpOworCWlmIChwYWdlKQorCQlyZXR1cm4gcGFnZTsKKworCS8qIE5vIG1vcmUgcGFnZXMgYXZhaWxhYmxlLCBzd2l0Y2ggdG8gZW1lcmdlbmN5IHBhZ2UgKi8KKwlwcmludGsoS0VSTl9JTkZPIkxvZ2ZzOiBVc2luZyBlbWVyZ2VuY3kgcGFnZVxuIik7CisJbXV0ZXhfbG9jaygmZW1lcmdlbmN5X211dGV4KTsKKwllcnIgPSBmaWxsZXIoTlVMTCwgZW1lcmdlbmN5X3BhZ2UpOworCWlmIChlcnIpIHsKKwkJbXV0ZXhfdW5sb2NrKCZlbWVyZ2VuY3lfbXV0ZXgpOworCQlwcmludGsoS0VSTl9FTUVSRyJMb2dmczogRXJyb3IgcmVhZGluZyBlbWVyZ2VuY3kgcGFnZVxuIik7CisJCXJldHVybiBFUlJfUFRSKGVycik7CisJfQorCXJldHVybiBlbWVyZ2VuY3lfcGFnZTsKK30KKwordm9pZCBlbWVyZ2VuY3lfcmVhZF9lbmQoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaWYgKHBhZ2UgPT0gZW1lcmdlbmN5X3BhZ2UpCisJCW11dGV4X3VubG9jaygmZW1lcmdlbmN5X211dGV4KTsKKwllbHNlCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKK30KKworc3RhdGljIHZvaWQgZHVtcF9zZWdmaWxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgbG9nZnNfc2VnbWVudF9lbnRyeSBzZTsKKwl1MzIgc2Vnbm87CisKKwlmb3IgKHNlZ25vID0gMDsgc2Vnbm8gPCBzdXBlci0+c19ub19zZWdzOyBzZWdubysrKSB7CisJCWxvZ2ZzX2dldF9zZWdtZW50X2VudHJ5KHNiLCBzZWdubywgJnNlKTsKKwkJcHJpbnRrKCIlM3g6ICU2eCAlOHgiLCBzZWdubywgYmUzMl90b19jcHUoc2UuZWNfbGV2ZWwpLAorCQkJCWJlMzJfdG9fY3B1KHNlLnZhbGlkKSk7CisJCWlmICgrK3NlZ25vIDwgc3VwZXItPnNfbm9fc2VncykgeworCQkJbG9nZnNfZ2V0X3NlZ21lbnRfZW50cnkoc2IsIHNlZ25vLCAmc2UpOworCQkJcHJpbnRrKCIgJTZ4ICU4eCIsIGJlMzJfdG9fY3B1KHNlLmVjX2xldmVsKSwKKwkJCQkJYmUzMl90b19jcHUoc2UudmFsaWQpKTsKKwkJfQorCQlpZiAoKytzZWdubyA8IHN1cGVyLT5zX25vX3NlZ3MpIHsKKwkJCWxvZ2ZzX2dldF9zZWdtZW50X2VudHJ5KHNiLCBzZWdubywgJnNlKTsKKwkJCXByaW50aygiICU2eCAlOHgiLCBiZTMyX3RvX2NwdShzZS5lY19sZXZlbCksCisJCQkJCWJlMzJfdG9fY3B1KHNlLnZhbGlkKSk7CisJCX0KKwkJaWYgKCsrc2Vnbm8gPCBzdXBlci0+c19ub19zZWdzKSB7CisJCQlsb2dmc19nZXRfc2VnbWVudF9lbnRyeShzYiwgc2Vnbm8sICZzZSk7CisJCQlwcmludGsoIiAlNnggJTh4IiwgYmUzMl90b19jcHUoc2UuZWNfbGV2ZWwpLAorCQkJCQliZTMyX3RvX2NwdShzZS52YWxpZCkpOworCQl9CisJCXByaW50aygiXG4iKTsKKwl9Cit9CisKKy8qCisgKiBsb2dmc19jcmFzaF9kdW1wIC0gZHVtcCBkZWJ1ZyBpbmZvcm1hdGlvbiB0byBkZXZpY2UKKyAqCisgKiBUaGUgTG9nRlMgc3VwZXJibG9jayBvbmx5IG9jY3VwaWVzIHBhcnQgb2YgYSBzZWdtZW50LiAgVGhpcyBmdW5jdGlvbiB3aWxsCisgKiB3cml0ZSBhcyBtdWNoIGRlYnVnIGluZm9ybWF0aW9uIGFzIGl0IGNhbiBnYXRoZXIgaW50byB0aGUgc3BhcmUgc3BhY2UuCisgKi8KK3ZvaWQgbG9nZnNfY3Jhc2hfZHVtcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCWR1bXBfc2VnZmlsZShzYik7Cit9CisKKy8qCisgKiBUT0RPOiBtb3ZlIHRvIGxpYi9zdHJpbmcuYworICovCisvKioKKyAqIG1lbWNocl9pbnYgLSBGaW5kIGEgY2hhcmFjdGVyIGluIGFuIGFyZWEgb2YgbWVtb3J5LgorICogQHM6IFRoZSBtZW1vcnkgYXJlYQorICogQGM6IFRoZSBieXRlIHRvIHNlYXJjaCBmb3IKKyAqIEBuOiBUaGUgc2l6ZSBvZiB0aGUgYXJlYS4KKyAqCisgKiByZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb3RoZXIgdGhhbiBAYywgb3IgJU5VTEwKKyAqIGlmIHRoZSB3aG9sZSBidWZmZXIgY29udGFpbnMganVzdCBAYy4KKyAqLwordm9pZCAqbWVtY2hyX2ludihjb25zdCB2b2lkICpzLCBpbnQgYywgc2l6ZV90IG4pCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHM7CisJd2hpbGUgKG4tLSAhPSAwKQorCQlpZiAoKHVuc2lnbmVkIGNoYXIpYyAhPSAqcCsrKQorCQkJcmV0dXJuICh2b2lkICopKHAgLSAxKTsKKworCXJldHVybiBOVUxMOworfQorCisvKgorICogRklYTUU6IFRoZXJlIHNob3VsZCBiZSBhIHJlc2VydmUgZm9yIHJvb3QsIHNpbWlsYXIgdG8gZXh0Mi4KKyAqLworaW50IGxvZ2ZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpzdGF0cykKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGVudHJ5LT5kX3NiOworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisKKwlzdGF0cy0+Zl90eXBlCQk9IExPR0ZTX01BR0lDX1UzMjsKKwlzdGF0cy0+Zl9ic2l6ZQkJPSBzYi0+c19ibG9ja3NpemU7CisJc3RhdHMtPmZfYmxvY2tzCQk9IHN1cGVyLT5zX3NpemUgPj4gTE9HRlNfQkxPQ0tfQklUUyA+PiAzOworCXN0YXRzLT5mX2JmcmVlCQk9IHN1cGVyLT5zX2ZyZWVfYnl0ZXMgPj4gc2ItPnNfYmxvY2tzaXplX2JpdHM7CisJc3RhdHMtPmZfYmF2YWlsCQk9IHN1cGVyLT5zX2ZyZWVfYnl0ZXMgPj4gc2ItPnNfYmxvY2tzaXplX2JpdHM7CisJc3RhdHMtPmZfZmlsZXMJCT0gMDsKKwlzdGF0cy0+Zl9mZnJlZQkJPSAwOworCXN0YXRzLT5mX25hbWVsZW4JPSBMT0dGU19NQVhfTkFNRUxFTjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2dmc19zYl9zZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqX3N1cGVyKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBfc3VwZXI7CisKKwlzYi0+c19mc19pbmZvID0gc3VwZXI7CisJc2ItPnNfbXRkID0gc3VwZXItPnNfbXRkOworCXNiLT5zX2JkZXYgPSBzdXBlci0+c19iZGV2OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX3NiX3Rlc3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqX3N1cGVyKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBfc3VwZXI7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBzdXBlci0+c19tdGQ7CisKKwlpZiAobXRkICYmIHNiLT5zX210ZCA9PSBtdGQpCisJCXJldHVybiAxOworCWlmIChzdXBlci0+c19iZGV2ICYmIHNiLT5zX2JkZXYgPT0gc3VwZXItPnNfYmRldikKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9zZWdtZW50X2hlYWRlcihzdHJ1Y3QgbG9nZnNfc2VnbWVudF9oZWFkZXIgKnNoLCB1OCB0eXBlLAorCQl1OCBsZXZlbCwgdTMyIHNlZ25vLCB1MzIgZWMpCit7CisJc2gtPnBhZCA9IDA7CisJc2gtPnR5cGUgPSB0eXBlOworCXNoLT5sZXZlbCA9IGxldmVsOworCXNoLT5zZWdubyA9IGNwdV90b19iZTMyKHNlZ25vKTsKKwlzaC0+ZWMgPSBjcHVfdG9fYmUzMihlYyk7CisJc2gtPmdlYyA9IGNwdV90b19iZTY0KHNlZ25vKTsKKwlzaC0+Y3JjID0gbG9nZnNfY3JjMzIoc2gsIExPR0ZTX1NFR01FTlRfSEVBREVSU0laRSwgNCk7Cit9CisKK3N0YXRpYyB2b2lkIGxvZ2ZzX3dyaXRlX2RzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBsb2dmc19kaXNrX3N1cGVyICpkcywKKwkJdTMyIHNlZ25vLCB1MzIgZWMpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgbG9nZnNfc2VnbWVudF9oZWFkZXIgKnNoID0gJmRzLT5kc19zaDsKKwlpbnQgaTsKKworCW1lbXNldChkcywgMCwgc2l6ZW9mKCpkcykpOworCXNldF9zZWdtZW50X2hlYWRlcihzaCwgU0VHX1NVUEVSLCAwLCBzZWdubywgZWMpOworCisJZHMtPmRzX2lmaWxlX2xldmVscwk9IHN1cGVyLT5zX2lmaWxlX2xldmVsczsKKwlkcy0+ZHNfaWJsb2NrX2xldmVscwk9IHN1cGVyLT5zX2libG9ja19sZXZlbHM7CisJZHMtPmRzX2RhdGFfbGV2ZWxzCT0gc3VwZXItPnNfZGF0YV9sZXZlbHM7IC8qIFhYWDogUmVtb3ZlICovCisJZHMtPmRzX3NlZ21lbnRfc2hpZnQJPSBzdXBlci0+c19zZWdzaGlmdDsKKwlkcy0+ZHNfYmxvY2tfc2hpZnQJPSBzYi0+c19ibG9ja3NpemVfYml0czsKKwlkcy0+ZHNfd3JpdGVfc2hpZnQJPSBzdXBlci0+c193cml0ZXNoaWZ0OworCWRzLT5kc19maWxlc3lzdGVtX3NpemUJPSBjcHVfdG9fYmU2NChzdXBlci0+c19zaXplKTsKKwlkcy0+ZHNfc2VnbWVudF9zaXplCT0gY3B1X3RvX2JlMzIoc3VwZXItPnNfc2Vnc2l6ZSk7CisJZHMtPmRzX2JhZF9zZWdfcmVzZXJ2ZQk9IGNwdV90b19iZTMyKHN1cGVyLT5zX2JhZF9zZWdfcmVzZXJ2ZSk7CisJZHMtPmRzX2ZlYXR1cmVfaW5jb21wYXQJPSBjcHVfdG9fYmU2NChzdXBlci0+c19mZWF0dXJlX2luY29tcGF0KTsKKwlkcy0+ZHNfZmVhdHVyZV9yb19jb21wYXQ9IGNwdV90b19iZTY0KHN1cGVyLT5zX2ZlYXR1cmVfcm9fY29tcGF0KTsKKwlkcy0+ZHNfZmVhdHVyZV9jb21wYXQJPSBjcHVfdG9fYmU2NChzdXBlci0+c19mZWF0dXJlX2NvbXBhdCk7CisJZHMtPmRzX2ZlYXR1cmVfZmxhZ3MJPSBjcHVfdG9fYmU2NChzdXBlci0+c19mZWF0dXJlX2ZsYWdzKTsKKwlkcy0+ZHNfcm9vdF9yZXNlcnZlCT0gY3B1X3RvX2JlNjQoc3VwZXItPnNfcm9vdF9yZXNlcnZlKTsKKwlkcy0+ZHNfc3BlZWRfcmVzZXJ2ZQk9IGNwdV90b19iZTY0KHN1cGVyLT5zX3NwZWVkX3Jlc2VydmUpOworCWpvdXJuYWxfZm9yX2VhY2goaSkKKwkJZHMtPmRzX2pvdXJuYWxfc2VnW2ldID0gY3B1X3RvX2JlMzIoc3VwZXItPnNfam91cm5hbF9zZWdbaV0pOworCWRzLT5kc19tYWdpYwkJPSBjcHVfdG9fYmU2NChMT0dGU19NQUdJQyk7CisJZHMtPmRzX2NyYyA9IGxvZ2ZzX2NyYzMyKGRzLCBzaXplb2YoKmRzKSwKKwkJCUxPR0ZTX1NFR01FTlRfSEVBREVSU0laRSArIDEyKTsKK30KKworc3RhdGljIGludCB3cml0ZV9vbmVfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJc3RydWN0IHBhZ2UgKigqZmluZF9zYikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0ICpvZnMpKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGxvZ2ZzX2Rpc2tfc3VwZXIgKmRzOworCXN0cnVjdCBsb2dmc19zZWdtZW50X2VudHJ5IHNlOworCXN0cnVjdCBwYWdlICpwYWdlOworCXU2NCBvZnM7CisJdTMyIGVjLCBzZWdubzsKKwlpbnQgZXJyOworCisJcGFnZSA9IGZpbmRfc2Ioc2IsICZvZnMpOworCWlmICghcGFnZSkKKwkJcmV0dXJuIC1FSU87CisJZHMgPSBwYWdlX2FkZHJlc3MocGFnZSk7CisJc2Vnbm8gPSBzZWdfbm8oc2IsIG9mcyk7CisJbG9nZnNfZ2V0X3NlZ21lbnRfZW50cnkoc2IsIHNlZ25vLCAmc2UpOworCWVjID0gYmUzMl90b19jcHUoc2UuZWNfbGV2ZWwpID4+IDQ7CisJZWMrKzsKKwlsb2dmc19zZXRfc2VnbWVudF9lcmFzZWQoc2IsIHNlZ25vLCBlYywgMCk7CisJbG9nZnNfd3JpdGVfZHMoc2IsIGRzLCBzZWdubywgZWMpOworCWVyciA9IHN1cGVyLT5zX2Rldm9wcy0+d3JpdGVfc2Ioc2IsIHBhZ2UpOworCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgbG9nZnNfd3JpdGVfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCWludCBlcnI7CisKKwkvKiBGaXJzdCBzdXBlcmJsb2NrICovCisJZXJyID0gd3JpdGVfb25lX3NiKHNiLCBzdXBlci0+c19kZXZvcHMtPmZpbmRfZmlyc3Rfc2IpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBMYXN0IHN1cGVyYmxvY2sgKi8KKwllcnIgPSB3cml0ZV9vbmVfc2Ioc2IsIHN1cGVyLT5zX2Rldm9wcy0+ZmluZF9sYXN0X3NiKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRzX2NtcChjb25zdCB2b2lkICpkczAsIGNvbnN0IHZvaWQgKmRzMSkKK3sKKwlzaXplX3QgbGVuID0gc2l6ZW9mKHN0cnVjdCBsb2dmc19kaXNrX3N1cGVyKTsKKworCS8qIFdlIGtub3cgdGhlIHNlZ21lbnQgaGVhZGVycyBkaWZmZXIsIHNvIGlnbm9yZSB0aGVtICovCisJbGVuIC09IExPR0ZTX1NFR01FTlRfSEVBREVSU0laRTsKKwlkczAgKz0gTE9HRlNfU0VHTUVOVF9IRUFERVJTSVpFOworCWRzMSArPSBMT0dGU19TRUdNRU5UX0hFQURFUlNJWkU7CisJcmV0dXJuIG1lbWNtcChkczAsIGRzMSwgbGVuKTsKK30KKworc3RhdGljIGludCBsb2dmc19yZWNvdmVyX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgbG9nZnNfZGlza19zdXBlciBfZHMwLCAqZHMwID0gJl9kczA7CisJc3RydWN0IGxvZ2ZzX2Rpc2tfc3VwZXIgX2RzMSwgKmRzMSA9ICZfZHMxOworCWludCBlcnIsIHZhbGlkMCwgdmFsaWQxOworCisJLyogcmVhZCBmaXJzdCBzdXBlcmJsb2NrICovCisJZXJyID0gd2J1Zl9yZWFkKHNiLCBzdXBlci0+c19zYl9vZnNbMF0sIHNpemVvZigqZHMwKSwgZHMwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCS8qIHJlYWQgbGFzdCBzdXBlcmJsb2NrICovCisJZXJyID0gd2J1Zl9yZWFkKHNiLCBzdXBlci0+c19zYl9vZnNbMV0sIHNpemVvZigqZHMxKSwgZHMxKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXZhbGlkMCA9IGxvZ2ZzX2NoZWNrX2RzKGRzMCkgPT0gMDsKKwl2YWxpZDEgPSBsb2dmc19jaGVja19kcyhkczEpID09IDA7CisKKwlpZiAoIXZhbGlkMCAmJiB2YWxpZDEpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyJGaXJzdCBzdXBlcmJsb2NrIGlzIGludmFsaWQgLSBmaXhpbmcuXG4iKTsKKwkJcmV0dXJuIHdyaXRlX29uZV9zYihzYiwgc3VwZXItPnNfZGV2b3BzLT5maW5kX2ZpcnN0X3NiKTsKKwl9CisJaWYgKHZhbGlkMCAmJiAhdmFsaWQxKSB7CisJCXByaW50ayhLRVJOX0lORk8iTGFzdCBzdXBlcmJsb2NrIGlzIGludmFsaWQgLSBmaXhpbmcuXG4iKTsKKwkJcmV0dXJuIHdyaXRlX29uZV9zYihzYiwgc3VwZXItPnNfZGV2b3BzLT5maW5kX2xhc3Rfc2IpOworCX0KKwlpZiAodmFsaWQwICYmIHZhbGlkMSAmJiBkc19jbXAoZHMwLCBkczEpKSB7CisJCXByaW50ayhLRVJOX0lORk8iU3VwZXJibG9ja3MgZG9uJ3QgbWF0Y2ggLSBmaXhpbmcuXG4iKTsKKwkJcmV0dXJuIHdyaXRlX29uZV9zYihzYiwgc3VwZXItPnNfZGV2b3BzLT5maW5kX2xhc3Rfc2IpOworCX0KKwkvKiBJZiBuZWl0aGVyIGlzIHZhbGlkIG5vdywgc29tZXRoaW5nJ3Mgd3JvbmcuICBEaWRuJ3Qgd2UgcHJvcGVybHkKKwkgKiBjaGVjayB0aGVtIGJlZm9yZT8hPyAqLworCUJVR19PTighdmFsaWQwICYmICF2YWxpZDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX21ha2Vfd3JpdGVhYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJaW50IGVycjsKKworCS8qIFJlcGFpciBhbnkgYnJva2VuIHN1cGVyYmxvY2sgY29waWVzICovCisJZXJyID0gbG9nZnNfcmVjb3Zlcl9zYihzYik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIENoZWNrIGFyZWFzIGZvciB0cmFpbGluZyB1bmFjY291bnRlZCBkYXRhICovCisJZXJyID0gbG9nZnNfY2hlY2tfYXJlYXMoc2IpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBsb2dmc19vcGVuX3NlZ2ZpbGUoc2IpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBEbyBvbmUgR0MgcGFzcyBiZWZvcmUgYW55IGRhdGEgZ2V0cyBkaXJ0aWVkICovCisJbG9nZnNfZ2NfcGFzcyhzYik7CisKKwkvKiBhZnRlciBhbGwgaW5pdGlhbGl6YXRpb25zIGFyZSBkb25lLCByZXBsYXkgdGhlIGpvdXJuYWwKKwkgKiBmb3IgcnctbW91bnRzLCBpZiBuZWNlc3NhcnkgKi8KKwllcnIgPSBsb2dmc19yZXBsYXlfam91cm5hbChzYik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX2dldF9zYl9maW5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBpbm9kZSAqcm9vdGRpcjsKKwlpbnQgZXJyOworCisJLyogcm9vdCBkaXIgKi8KKwlyb290ZGlyID0gbG9nZnNfaWdldChzYiwgTE9HRlNfSU5PX1JPT1QpOworCWlmIChJU19FUlIocm9vdGRpcikpCisJCWdvdG8gZmFpbDsKKworCXNiLT5zX3Jvb3QgPSBkX2FsbG9jX3Jvb3Qocm9vdGRpcik7CisJaWYgKCFzYi0+c19yb290KQorCQlnb3RvIGZhaWw7CisKKwlzdXBlci0+c19lcmFzZV9wYWdlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCwgMCk7CisJaWYgKCFzdXBlci0+c19lcmFzZV9wYWdlKQorCQlnb3RvIGZhaWwyOworCW1lbXNldChwYWdlX2FkZHJlc3Moc3VwZXItPnNfZXJhc2VfcGFnZSksIDB4RkYsIFBBR0VfU0laRSk7CisKKwkvKiBGSVhNRTogY2hlY2sgZm9yIHJlYWQtb25seSBtb3VudHMgKi8KKwllcnIgPSBsb2dmc19tYWtlX3dyaXRlYWJsZShzYik7CisJaWYgKGVycikKKwkJZ290byBmYWlsMzsKKworCWxvZ19zdXBlcigiTG9nRlM6IEZpbmlzaGVkIG1vdW50aW5nXG4iKTsKKwlzaW1wbGVfc2V0X21udChtbnQsIHNiKTsKKwlyZXR1cm4gMDsKKworZmFpbDM6CisJX19mcmVlX3BhZ2Uoc3VwZXItPnNfZXJhc2VfcGFnZSk7CitmYWlsMjoKKwlpcHV0KHJvb3RkaXIpOworZmFpbDoKKwlpcHV0KGxvZ2ZzX3N1cGVyKHNiKS0+c19tYXN0ZXJfaW5vZGUpOworCXJldHVybiAtRUlPOworfQorCitpbnQgbG9nZnNfY2hlY2tfZHMoc3RydWN0IGxvZ2ZzX2Rpc2tfc3VwZXIgKmRzKQoreworCXN0cnVjdCBsb2dmc19zZWdtZW50X2hlYWRlciAqc2ggPSAmZHMtPmRzX3NoOworCisJaWYgKGRzLT5kc19tYWdpYyAhPSBjcHVfdG9fYmU2NChMT0dGU19NQUdJQykpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChzaC0+Y3JjICE9IGxvZ2ZzX2NyYzMyKHNoLCBMT0dGU19TRUdNRU5UX0hFQURFUlNJWkUsIDQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZHMtPmRzX2NyYyAhPSBsb2dmc19jcmMzMihkcywgc2l6ZW9mKCpkcyksCisJCQkJTE9HRlNfU0VHTUVOVF9IRUFERVJTSVpFICsgMTIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwYWdlICpmaW5kX3N1cGVyX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgcGFnZSAqZmlyc3QsICpsYXN0OworCisJZmlyc3QgPSBzdXBlci0+c19kZXZvcHMtPmZpbmRfZmlyc3Rfc2Ioc2IsICZzdXBlci0+c19zYl9vZnNbMF0pOworCWlmICghZmlyc3QgfHwgSVNfRVJSKGZpcnN0KSkKKwkJcmV0dXJuIE5VTEw7CisJbGFzdCA9IHN1cGVyLT5zX2Rldm9wcy0+ZmluZF9sYXN0X3NiKHNiLCAmc3VwZXItPnNfc2Jfb2ZzWzFdKTsKKwlpZiAoIWxhc3QgfHwgSVNfRVJSKGZpcnN0KSkgeworCQlwYWdlX2NhY2hlX3JlbGVhc2UoZmlyc3QpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoIWxvZ2ZzX2NoZWNrX2RzKHBhZ2VfYWRkcmVzcyhmaXJzdCkpKSB7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShsYXN0KTsKKwkJcmV0dXJuIGZpcnN0OworCX0KKworCS8qIEZpcnN0IG9uZSBkaWRuJ3Qgd29yaywgdHJ5IHRoZSBzZWNvbmQgc3VwZXJibG9jayAqLworCWlmICghbG9nZnNfY2hlY2tfZHMocGFnZV9hZGRyZXNzKGxhc3QpKSkgeworCQlwYWdlX2NhY2hlX3JlbGVhc2UoZmlyc3QpOworCQlyZXR1cm4gbGFzdDsKKwl9CisKKwkvKiBOZWl0aGVyIHdvcmtlZCwgc29ycnkgZm9sa3MgKi8KKwlwYWdlX2NhY2hlX3JlbGVhc2UoZmlyc3QpOworCXBhZ2VfY2FjaGVfcmVsZWFzZShsYXN0KTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBfX2xvZ2ZzX3JlYWRfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBsb2dmc19kaXNrX3N1cGVyICpkczsKKwlpbnQgaTsKKworCXBhZ2UgPSBmaW5kX3N1cGVyX2Jsb2NrKHNiKTsKKwlpZiAoIXBhZ2UpCisJCXJldHVybiAtRUlPOworCisJZHMgPSBwYWdlX2FkZHJlc3MocGFnZSk7CisJc3VwZXItPnNfc2l6ZSA9IGJlNjRfdG9fY3B1KGRzLT5kc19maWxlc3lzdGVtX3NpemUpOworCXN1cGVyLT5zX3Jvb3RfcmVzZXJ2ZSA9IGJlNjRfdG9fY3B1KGRzLT5kc19yb290X3Jlc2VydmUpOworCXN1cGVyLT5zX3NwZWVkX3Jlc2VydmUgPSBiZTY0X3RvX2NwdShkcy0+ZHNfc3BlZWRfcmVzZXJ2ZSk7CisJc3VwZXItPnNfYmFkX3NlZ19yZXNlcnZlID0gYmUzMl90b19jcHUoZHMtPmRzX2JhZF9zZWdfcmVzZXJ2ZSk7CisJc3VwZXItPnNfc2Vnc2l6ZSA9IDEgPDwgZHMtPmRzX3NlZ21lbnRfc2hpZnQ7CisJc3VwZXItPnNfc2VnbWFzayA9ICgxIDw8IGRzLT5kc19zZWdtZW50X3NoaWZ0KSAtIDE7CisJc3VwZXItPnNfc2Vnc2hpZnQgPSBkcy0+ZHNfc2VnbWVudF9zaGlmdDsKKwlzYi0+c19ibG9ja3NpemUgPSAxIDw8IGRzLT5kc19ibG9ja19zaGlmdDsKKwlzYi0+c19ibG9ja3NpemVfYml0cyA9IGRzLT5kc19ibG9ja19zaGlmdDsKKwlzdXBlci0+c193cml0ZXNpemUgPSAxIDw8IGRzLT5kc193cml0ZV9zaGlmdDsKKwlzdXBlci0+c193cml0ZXNoaWZ0ID0gZHMtPmRzX3dyaXRlX3NoaWZ0OworCXN1cGVyLT5zX25vX3NlZ3MgPSBzdXBlci0+c19zaXplID4+IHN1cGVyLT5zX3NlZ3NoaWZ0OworCXN1cGVyLT5zX25vX2Jsb2NrcyA9IHN1cGVyLT5zX3NlZ3NpemUgPj4gc2ItPnNfYmxvY2tzaXplX2JpdHM7CisJc3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCA9IGJlNjRfdG9fY3B1KGRzLT5kc19mZWF0dXJlX2luY29tcGF0KTsKKwlzdXBlci0+c19mZWF0dXJlX3JvX2NvbXBhdCA9IGJlNjRfdG9fY3B1KGRzLT5kc19mZWF0dXJlX3JvX2NvbXBhdCk7CisJc3VwZXItPnNfZmVhdHVyZV9jb21wYXQgPSBiZTY0X3RvX2NwdShkcy0+ZHNfZmVhdHVyZV9jb21wYXQpOworCXN1cGVyLT5zX2ZlYXR1cmVfZmxhZ3MgPSBiZTY0X3RvX2NwdShkcy0+ZHNfZmVhdHVyZV9mbGFncyk7CisKKwlqb3VybmFsX2Zvcl9lYWNoKGkpCisJCXN1cGVyLT5zX2pvdXJuYWxfc2VnW2ldID0gYmUzMl90b19jcHUoZHMtPmRzX2pvdXJuYWxfc2VnW2ldKTsKKworCXN1cGVyLT5zX2lmaWxlX2xldmVscyA9IGRzLT5kc19pZmlsZV9sZXZlbHM7CisJc3VwZXItPnNfaWJsb2NrX2xldmVscyA9IGRzLT5kc19pYmxvY2tfbGV2ZWxzOworCXN1cGVyLT5zX2RhdGFfbGV2ZWxzID0gZHMtPmRzX2RhdGFfbGV2ZWxzOworCXN1cGVyLT5zX3RvdGFsX2xldmVscyA9IHN1cGVyLT5zX2lmaWxlX2xldmVscyArIHN1cGVyLT5zX2libG9ja19sZXZlbHMKKwkJKyBzdXBlci0+c19kYXRhX2xldmVsczsKKwlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfcmVhZF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgcmVhZF9vbmx5KQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJaW50IHJldDsKKworCXN1cGVyLT5zX2J0cmVlX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZSgzMiwgYnRyZWVfYWxsb2MsIGJ0cmVlX2ZyZWUsIE5VTEwpOworCWlmICghc3VwZXItPnNfYnRyZWVfcG9vbCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlidHJlZV9pbml0X21lbXBvb2w2NCgmc3VwZXItPnNfc2hhZG93X3RyZWUubmV3LCBzdXBlci0+c19idHJlZV9wb29sKTsKKwlidHJlZV9pbml0X21lbXBvb2w2NCgmc3VwZXItPnNfc2hhZG93X3RyZWUub2xkLCBzdXBlci0+c19idHJlZV9wb29sKTsKKworCXJldCA9IGxvZ2ZzX2luaXRfbWFwcGluZyhzYik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IF9fbG9nZnNfcmVhZF9zYihzYik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChzdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgfkxPR0ZTX0ZFQVRVUkVTX0lOQ09NUEFUKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoKHN1cGVyLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICYgfkxPR0ZTX0ZFQVRVUkVTX1JPX0NPTVBBVCkgJiYKKwkJCSFyZWFkX29ubHkpCisJCXJldHVybiAtRUlPOworCisJbXV0ZXhfaW5pdCgmc3VwZXItPnNfZGlyb3BfbXV0ZXgpOworCW11dGV4X2luaXQoJnN1cGVyLT5zX29iamVjdF9hbGlhc19tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJnN1cGVyLT5zX2ZyZWVpbmdfbGlzdCk7CisKKwlyZXQgPSBsb2dmc19pbml0X3J3KHNiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gbG9nZnNfaW5pdF9hcmVhcyhzYik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGxvZ2ZzX2luaXRfZ2Moc2IpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBsb2dmc19pbml0X2pvdXJuYWwoc2IpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbG9nZnNfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisKKwlsb2dfc3VwZXIoIkxvZ0ZTOiBTdGFydCB1bm1vdW50aW5nXG4iKTsKKwkvKiBBbGlhcyBlbnRyaWVzIHNsb3cgZG93biBtb3VudCwgc28gZXZpY3QgYXMgbWFueSBhcyBwb3NzaWJsZSAqLworCXN5bmNfZmlsZXN5c3RlbShzYik7CisJbG9nZnNfd3JpdGVfYW5jaG9yKHNiKTsKKworCS8qCisJICogRnJvbSB0aGlzIHBvaW50IG9uIGFsaWFzIGVudHJpZXMgYXJlIHNpbXBseSBkcm9wcGVkIC0gYW5kIGFueQorCSAqIHdyaXRlcyB0byB0aGUgb2JqZWN0IHN0b3JlIGFyZSBjb25zaWRlcmVkIGJ1Z3MuCisJICovCisJc3VwZXItPnNfZmxhZ3MgfD0gTE9HRlNfU0JfRkxBR19TSFVURE9XTjsKKwlsb2dfc3VwZXIoIkxvZ0ZTOiBOb3cgaW4gc2h1dGRvd25cbiIpOworCWdlbmVyaWNfc2h1dGRvd25fc3VwZXIoc2IpOworCisJQlVHX09OKHN1cGVyLT5zX2RpcnR5X3VzZWRfYnl0ZXMgfHwgc3VwZXItPnNfZGlydHlfZnJlZV9ieXRlcyk7CisKKwlsb2dmc19jbGVhbnVwX2djKHNiKTsKKwlsb2dmc19jbGVhbnVwX2pvdXJuYWwoc2IpOworCWxvZ2ZzX2NsZWFudXBfYXJlYXMoc2IpOworCWxvZ2ZzX2NsZWFudXBfcncoc2IpOworCWlmIChzdXBlci0+c19lcmFzZV9wYWdlKQorCQlfX2ZyZWVfcGFnZShzdXBlci0+c19lcmFzZV9wYWdlKTsKKwlzdXBlci0+c19kZXZvcHMtPnB1dF9kZXZpY2Uoc2IpOworCW1lbXBvb2xfZGVzdHJveShzdXBlci0+c19idHJlZV9wb29sKTsKKwltZW1wb29sX2Rlc3Ryb3koc3VwZXItPnNfYWxpYXNfcG9vbCk7CisJa2ZyZWUoc3VwZXIpOworCWxvZ19zdXBlcigiTG9nRlM6IEZpbmlzaGVkIHVubW91bnRpbmdcbiIpOworfQorCitpbnQgbG9nZnNfZ2V0X3NiX2RldmljZShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgaW50IGZsYWdzLAorCQlzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKKwkJY29uc3Qgc3RydWN0IGxvZ2ZzX2RldmljZV9vcHMgKmRldm9wcywgc3RydWN0IHZmc21vdW50ICptbnQpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlcjsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOworCWludCBlcnIgPSAtRU5PTUVNOworCXN0YXRpYyBpbnQgbW91bnRfY291bnQ7CisKKwlsb2dfc3VwZXIoIkxvZ0ZTOiBTdGFydCBtb3VudCAleFxuIiwgbW91bnRfY291bnQrKyk7CisJc3VwZXIgPSBremFsbG9jKHNpemVvZigqc3VwZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN1cGVyKQorCQlnb3RvIGVycjA7CisKKwlzdXBlci0+c19tdGQJPSBtdGQ7CisJc3VwZXItPnNfYmRldgk9IGJkZXY7CisJZXJyID0gLUVJTlZBTDsKKwlzYiA9IHNnZXQodHlwZSwgbG9nZnNfc2JfdGVzdCwgbG9nZnNfc2Jfc2V0LCBzdXBlcik7CisJaWYgKElTX0VSUihzYikpCisJCWdvdG8gZXJyMDsKKworCWlmIChzYi0+c19yb290KSB7CisJCS8qIERldmljZSBpcyBhbHJlYWR5IGluIHVzZSAqLworCQllcnIgPSAwOworCQlzaW1wbGVfc2V0X21udChtbnQsIHNiKTsKKwkJZ290byBlcnIwOworCX0KKworCXN1cGVyLT5zX2Rldm9wcyA9IGRldm9wczsKKworCS8qCisJICogc2ItPnNfbWF4Ynl0ZXMgaXMgbGltaXRlZCB0byA4VEIuICBPbiAzMmJpdCBzeXN0ZW1zLCB0aGUgcGFnZSBjYWNoZQorCSAqIG9ubHkgY292ZXJzIDE2VEIgYW5kIHRoZSB1cHBlciA4VEIgYXJlIHVzZWQgZm9yIGluZGlyZWN0IGJsb2Nrcy4KKwkgKiBPbiA2NGJpdCBzeXN0ZW0gd2UgY291bGQgYnVtcCB1cCB0aGUgbGltaXQsIGJ1dCB0aGF0IHdvdWxkIG1ha2UKKwkgKiB0aGUgZmlsZXN5c3RlbSBpbmNvbXBhdGlibGUgd2l0aCAzMmJpdCBzeXN0ZW1zLgorCSAqLworCXNiLT5zX21heGJ5dGVzCT0gKDF1bGwgPDwgNDMpIC0gMTsKKwlzYi0+c19vcAk9ICZsb2dmc19zdXBlcl9vcGVyYXRpb25zOworCXNiLT5zX2ZsYWdzCT0gZmxhZ3MgfCBNU19OT0FUSU1FOworCisJZXJyID0gbG9nZnNfcmVhZF9zYihzYiwgc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpOworCWlmIChlcnIpCisJCWdvdG8gZXJyMTsKKworCXNiLT5zX2ZsYWdzIHw9IE1TX0FDVElWRTsKKwllcnIgPSBsb2dmc19nZXRfc2JfZmluYWwoc2IsIG1udCk7CisJaWYgKGVycikKKwkJZ290byBlcnIxOworCXJldHVybiAwOworCitlcnIxOgorCXVwX3dyaXRlKCZzYi0+c191bW91bnQpOworCWRlYWN0aXZhdGVfc3VwZXIoc2IpOworCXJldHVybiBlcnI7CitlcnIwOgorCWtmcmVlKHN1cGVyKTsKKwkvL2Rldm9wcy0+cHV0X2RldmljZShzYik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBsb2dmc19nZXRfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncywKKwkJY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGF0YSwgc3RydWN0IHZmc21vdW50ICptbnQpCit7CisJdWxvbmcgbXRkbnI7CisKKwlpZiAoIWRldm5hbWUpCisJCXJldHVybiBsb2dmc19nZXRfc2JfYmRldih0eXBlLCBmbGFncywgZGV2bmFtZSwgbW50KTsKKwlpZiAoc3RybmNtcChkZXZuYW1lLCAibXRkIiwgMykpCisJCXJldHVybiBsb2dmc19nZXRfc2JfYmRldih0eXBlLCBmbGFncywgZGV2bmFtZSwgbW50KTsKKworCXsKKwkJY2hhciAqZ2FyYmFnZTsKKwkJbXRkbnIgPSBzaW1wbGVfc3RydG91bChkZXZuYW1lKzMsICZnYXJiYWdlLCAwKTsKKwkJaWYgKCpnYXJiYWdlKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGxvZ2ZzX2dldF9zYl9tdGQodHlwZSwgZmxhZ3MsIG10ZG5yLCBtbnQpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgbG9nZnNfZnNfdHlwZSA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCT0gImxvZ2ZzIiwKKwkuZ2V0X3NiCQk9IGxvZ2ZzX2dldF9zYiwKKwkua2lsbF9zYgk9IGxvZ2ZzX2tpbGxfc2IsCisJLmZzX2ZsYWdzCT0gRlNfUkVRVUlSRVNfREVWLAorCit9OworCitzdGF0aWMgaW50IF9faW5pdCBsb2dmc19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWVtZXJnZW5jeV9wYWdlID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCwgMCk7CisJaWYgKCFlbWVyZ2VuY3lfcGFnZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBsb2dmc19jb21wcl9pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQxOworCisJcmV0ID0gbG9nZnNfaW5pdF9pbm9kZV9jYWNoZSgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0MjsKKworCXJldHVybiByZWdpc3Rlcl9maWxlc3lzdGVtKCZsb2dmc19mc190eXBlKTsKK291dDI6CisJbG9nZnNfY29tcHJfZXhpdCgpOworb3V0MToKKwlfX2ZyZWVfcGFnZXMoZW1lcmdlbmN5X3BhZ2UsIDApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBsb2dmc19leGl0KHZvaWQpCit7CisJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZsb2dmc19mc190eXBlKTsKKwlsb2dmc19kZXN0cm95X2lub2RlX2NhY2hlKCk7CisJbG9nZnNfY29tcHJfZXhpdCgpOworCV9fZnJlZV9wYWdlcyhlbWVyZ2VuY3lfcGFnZSwgMCk7Cit9CisKK21vZHVsZV9pbml0KGxvZ2ZzX2luaXQpOworbW9kdWxlX2V4aXQobG9nZnNfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BVVRIT1IoIkpvZXJuIEVuZ2VsIDxqb2VybkBsb2dmcy5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oInNjYWxhYmxlIGZsYXNoIGZpbGVzeXN0ZW0iKTsKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IDNkOWQyZjkuLjQ4ZTYwYTEgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKKysrIGIvZnMvbmFtZWkuYwpAQCAtMTY1Niw3ICsxNjU2LDcgQEAKIAkJaWYgKHBhdGgtPmRlbnRyeS0+ZF9pbm9kZS0+aV9vcC0+Zm9sbG93X2xpbmspCiAJCQlyZXR1cm4gTlVMTDsKIAkJZXJyb3IgPSAtRU5PVERJUjsKLQkJaWYgKCp3YW50X2RpciAmICFwYXRoLT5kZW50cnktPmRfaW5vZGUtPmlfb3AtPmxvb2t1cCkKKwkJaWYgKCp3YW50X2RpciAmJiAhcGF0aC0+ZGVudHJ5LT5kX2lub2RlLT5pX29wLT5sb29rdXApCiAJCQlnb3RvIGV4aXRfZHB1dDsKIAkJcGF0aF90b19uYW1laWRhdGEocGF0aCwgbmQpOwogCQlhdWRpdF9pbm9kZShwYXRobmFtZSwgbmQtPnBhdGguZGVudHJ5KTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9jYWxsYmFjay5jIGIvZnMvbmZzL2NhbGxiYWNrLmMKaW5kZXggNzNhYjIyMC4uMzZkZmRhZSAxMDA2NDQKLS0tIGEvZnMvbmZzL2NhbGxiYWNrLmMKKysrIGIvZnMvbmZzL2NhbGxiYWNrLmMKQEAgLTExOCw3ICsxMTgsNiBAQAogCWRwcmludGsoIk5GUzogQ2FsbGJhY2sgbGlzdGVuZXIgcG9ydCA9ICV1IChhZiAldSlcbiIsCiAJCQluZnNfY2FsbGJhY2tfdGNwcG9ydCwgUEZfSU5FVCk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKIAlyZXQgPSBzdmNfY3JlYXRlX3hwcnQoc2VydiwgInRjcCIsIFBGX0lORVQ2LAogCQkJCW5mc19jYWxsYmFja19zZXRfdGNwcG9ydCwgU1ZDX1NPQ0tfQU5PTllNT1VTKTsKIAlpZiAocmV0ID4gMCkgewpAQCAtMTI5LDcgKzEyOCw2IEBACiAJCXJldCA9IDA7CiAJZWxzZQogCQlnb3RvIG91dF9lcnI7Ci0jZW5kaWYJLyogZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpICovCiAKIAlyZXR1cm4gc3ZjX3ByZXBhcmVfdGhyZWFkKHNlcnYsICZzZXJ2LT5zdl9wb29sc1swXSk7CiAKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMgYi9mcy9uZnNkL25mczRjYWxsYmFjay5jCmluZGV4IGM2ZWVkMmEuLjRiYzIyYzcgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMKKysrIGIvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYwpAQCAtNTI1LDYgKzUyNSw4IEBACiAKIGludCBzZXRfY2FsbGJhY2tfY3JlZCh2b2lkKQogeworCWlmIChjYWxsYmFja19jcmVkKQorCQlyZXR1cm4gMDsKIAljYWxsYmFja19jcmVkID0gcnBjX2xvb2t1cF9tYWNoaW5lX2NyZWQoKTsKIAlpZiAoIWNhbGxiYWNrX2NyZWQpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNTQyLDcgKzU0NCw4IEBACiAJfTsKIAlpbnQgc3RhdHVzOwogCi0Jc3RhdHVzID0gcnBjX2NhbGxfYXN5bmMoY2ItPmNiX2NsaWVudCwgJm1zZywgUlBDX1RBU0tfU09GVCwKKwlzdGF0dXMgPSBycGNfY2FsbF9hc3luYyhjYi0+Y2JfY2xpZW50LCAmbXNnLAorCQkJCVJQQ19UQVNLX1NPRlQgfCBSUENfVEFTS19TT0ZUQ09OTiwKIAkJCQkmbmZzZDRfY2JfcHJvYmVfb3BzLCAodm9pZCAqKWNscCk7CiAJaWYgKHN0YXR1cykgewogCQl3YXJuX25vX2NhbGxiYWNrX3BhdGgoY2xwLCBzdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0cmVjb3Zlci5jIGIvZnMvbmZzZC9uZnM0cmVjb3Zlci5jCmluZGV4IDVhNzU0ZjcuLjk4ZmI5OGUgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHJlY292ZXIuYworKysgYi9mcy9uZnNkL25mczRyZWNvdmVyLmMKQEAgLTExOSw5ICsxMTksNyBAQAogc3RhdGljIHZvaWQKIG5mc2Q0X3N5bmNfcmVjX2Rpcih2b2lkKQogewotCW11dGV4X2xvY2soJnJlY19kaXIuZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKLQluZnNkX3N5bmNfZGlyKHJlY19kaXIuZGVudHJ5KTsKLQltdXRleF91bmxvY2soJnJlY19kaXIuZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKKwl2ZnNfZnN5bmMoTlVMTCwgcmVjX2Rpci5kZW50cnksIDApOwogfQogCiBpbnQKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHN0YXRlLmMgYi9mcy9uZnNkL25mczRzdGF0ZS5jCmluZGV4IGYxOWVkODYuLmM5N2ZkZGIgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzZC9uZnM0c3RhdGUuYwpAQCAtMTk5OCw3ICsxOTk4LDkgQEAKIHsKIAlpZiAoc2hhcmVfYWNjZXNzICYgTkZTNF9TSEFSRV9BQ0NFU1NfV1JJVEUpIHsKIAkJZHJvcF9maWxlX3dyaXRlX2FjY2VzcyhmaWxwKTsKKwkJc3Bpbl9sb2NrKCZmaWxwLT5mX2xvY2spOwogCQlmaWxwLT5mX21vZGUgPSAoZmlscC0+Zl9tb2RlIHwgRk1PREVfUkVBRCkgJiB+Rk1PREVfV1JJVEU7CisJCXNwaW5fdW5sb2NrKCZmaWxwLT5mX2xvY2spOwogCX0KIH0KIApAQCAtMjQ4MCw4ICsyNDgyLDEwIEBACiAJfQogCW1lbWNweSgmb3Blbi0+b3Bfc3RhdGVpZCwgJnN0cC0+c3Rfc3RhdGVpZCwgc2l6ZW9mKHN0YXRlaWRfdCkpOwogCi0JaWYgKG5mc2Q0X2hhc19zZXNzaW9uKCZyZXNwLT5jc3RhdGUpKQorCWlmIChuZnNkNF9oYXNfc2Vzc2lvbigmcmVzcC0+Y3N0YXRlKSkgewogCQlvcGVuLT5vcF9zdGF0ZW93bmVyLT5zb19jb25maXJtZWQgPSAxOworCQluZnNkNF9jcmVhdGVfY2xpZF9kaXIob3Blbi0+b3Bfc3RhdGVvd25lci0+c29fY2xpZW50KTsKKwl9CiAKIAkvKgogCSogQXR0ZW1wdCB0byBoYW5kIG91dCBhIGRlbGVnYXRpb24uIE5vIGVycm9yIHJldHVybiwgYmVjYXVzZSB0aGUKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHhkci5jIGIvZnMvbmZzZC9uZnM0eGRyLmMKaW5kZXggYmJmNzJkOC4uNzhjN2UyNCAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0eGRyLmMKKysrIGIvZnMvbmZzZC9uZnM0eGRyLmMKQEAgLTE0MzQsNyArMTQzNCw3IEBACiAJCX0KIAkJb3AtPm9wbnVtID0gbnRvaGwoKmFyZ3AtPnArKyk7CiAKLQkJaWYgKG9wLT5vcG51bSA+PSBPUF9BQ0NFU1MgJiYgb3AtPm9wbnVtIDwgb3BzLT5ub3BzKQorCQlpZiAob3AtPm9wbnVtID49IEZJUlNUX05GUzRfT1AgJiYgb3AtPm9wbnVtIDw9IExBU1RfTkZTNF9PUCkKIAkJCW9wLT5zdGF0dXMgPSBvcHMtPmRlY29kZXJzW29wLT5vcG51bV0oYXJncCwgJm9wLT51KTsKIAkJZWxzZSB7CiAJCQlvcC0+b3BudW0gPSBPUF9JTExFR0FMOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnNjdGwuYyBiL2ZzL25mc2QvbmZzY3RsLmMKaW5kZXggMjYwNGMzZS4uMGYwZTc3ZiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnNjdGwuYworKysgYi9mcy9uZnNkL25mc2N0bC5jCkBAIC05ODgsNiArOTg4LDcgQEAKIHN0YXRpYyBzc2l6ZV90IF9fd3JpdGVfcG9ydHNfYWRkeHBydChjaGFyICpidWYpCiB7CiAJY2hhciB0cmFuc3BvcnRbMTZdOworCXN0cnVjdCBzdmNfeHBydCAqeHBydDsKIAlpbnQgcG9ydCwgZXJyOwogCiAJaWYgKHNzY2FuZihidWYsICIlMTVzICU0dSIsIHRyYW5zcG9ydCwgJnBvcnQpICE9IDIpCkBAIC0xMDAyLDEzICsxMDAzLDI0IEBACiAKIAllcnIgPSBzdmNfY3JlYXRlX3hwcnQobmZzZF9zZXJ2LCB0cmFuc3BvcnQsCiAJCQkJUEZfSU5FVCwgcG9ydCwgU1ZDX1NPQ0tfQU5PTllNT1VTKTsKLQlpZiAoZXJyIDwgMCkgewotCQkvKiBHaXZlIGEgcmVhc29uYWJsZSBwZXJyb3IgbXNnIGZvciBiYWQgdHJhbnNwb3J0IHN0cmluZyAqLwotCQlpZiAoZXJyID09IC1FTk9FTlQpCi0JCQllcnIgPSAtRVBST1RPTk9TVVBQT1JUOwotCQlyZXR1cm4gZXJyOwotCX0KKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXRfZXJyOworCisJZXJyID0gc3ZjX2NyZWF0ZV94cHJ0KG5mc2Rfc2VydiwgdHJhbnNwb3J0LAorCQkJCVBGX0lORVQ2LCBwb3J0LCBTVkNfU09DS19BTk9OWU1PVVMpOworCWlmIChlcnIgPCAwICYmIGVyciAhPSAtRUFGTk9TVVBQT1JUKQorCQlnb3RvIG91dF9jbG9zZTsKIAlyZXR1cm4gMDsKK291dF9jbG9zZToKKwl4cHJ0ID0gc3ZjX2ZpbmRfeHBydChuZnNkX3NlcnYsIHRyYW5zcG9ydCwgUEZfSU5FVCwgcG9ydCk7CisJaWYgKHhwcnQgIT0gTlVMTCkgeworCQlzdmNfY2xvc2VfeHBydCh4cHJ0KTsKKwkJc3ZjX3hwcnRfcHV0KHhwcnQpOworCX0KK291dF9lcnI6CisJLyogRGVjcmVhc2UgdGhlIGNvdW50LCBidXQgZG9uJ3Qgc2h1dCBkb3duIHRoZSBzZXJ2aWNlICovCisJbmZzZF9zZXJ2LT5zdl9ucnRocmVhZHMtLTsKKwlyZXR1cm4gZXJyOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvbmZzZC92ZnMuYyBiL2ZzL25mc2QvdmZzLmMKaW5kZXggOGVjYTE3ZC4uYTExYjBlODY3IDEwMDY0NAotLS0gYS9mcy9uZnNkL3Zmcy5jCisrKyBiL2ZzL25mc2QvdmZzLmMKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZXhwb3J0ZnMuaD4KKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KIAogI2lmZGVmIENPTkZJR19ORlNEX1YzCiAjaW5jbHVkZSAieGRyMy5oIgpAQCAtMjcwLDYgKzI3MiwzMiBAQAogCXJldHVybiBlcnI7CiB9CiAKKy8qCisgKiBDb21taXQgbWV0YWRhdGEgY2hhbmdlcyB0byBzdGFibGUgc3RvcmFnZS4KKyAqLworc3RhdGljIGludAorY29tbWl0X21ldGFkYXRhKHN0cnVjdCBzdmNfZmggKmZocCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmhwLT5maF9kZW50cnktPmRfaW5vZGU7CisJY29uc3Qgc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zICpleHBvcnRfb3BzID0gaW5vZGUtPmlfc2ItPnNfZXhwb3J0X29wOworCWludCBlcnJvciA9IDA7CisKKwlpZiAoIUVYX0lTU1lOQyhmaHAtPmZoX2V4cG9ydCkpCisJCXJldHVybiAwOworCisJaWYgKGV4cG9ydF9vcHMtPmNvbW1pdF9tZXRhZGF0YSkgeworCQllcnJvciA9IGV4cG9ydF9vcHMtPmNvbW1pdF9tZXRhZGF0YShpbm9kZSk7CisJfSBlbHNlIHsKKwkJc3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHsKKwkJCS5zeW5jX21vZGUgPSBXQl9TWU5DX0FMTCwKKwkJCS5ucl90b193cml0ZSA9IDAsIC8qIG1ldGFkYXRhIG9ubHkgKi8KKwkJfTsKKworCQllcnJvciA9IHN5bmNfaW5vZGUoaW5vZGUsICZ3YmMpOworCX0KKworCXJldHVybiBlcnJvcjsKK30KIAogLyoKICAqIFNldCB2YXJpb3VzIGZpbGUgYXR0cmlidXRlcy4KQEAgLTc2Nyw0MyArNzk1LDYgQEAKIH0KIAogLyoKLSAqIFN5bmMgYSBmaWxlCi0gKiBBcyB0aGlzIGNhbGxzIGZzeW5jIChub3QgZmRhdGFzeW5jKSB0aGVyZSBpcyBubyBuZWVkIGZvciBhIHdyaXRlX2lub2RlCi0gKiBhZnRlciBpdC4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgbmZzZF9kb3N5bmMoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBkZW50cnkgKmRwLAotCQkJICAgICAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wKQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkcC0+ZF9pbm9kZTsKLQlpbnQgKCpmc3luYykgKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkZW50cnkgKiwgaW50KTsKLQlpbnQgZXJyOwotCi0JZXJyID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChpbm9kZS0+aV9tYXBwaW5nKTsKLQlpZiAoZXJyID09IDAgJiYgZm9wICYmIChmc3luYyA9IGZvcC0+ZnN5bmMpKQotCQllcnIgPSBmc3luYyhmaWxwLCBkcCwgMCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludAotbmZzZF9zeW5jKHN0cnVjdCBmaWxlICpmaWxwKQotewotICAgICAgICBpbnQgZXJyOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCWRwcmludGsoIm5mc2Q6IHN5bmMgZmlsZSAlc1xuIiwgZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUpOwotCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQllcnI9bmZzZF9kb3N5bmMoZmlscCwgZmlscC0+Zl9wYXRoLmRlbnRyeSwgZmlscC0+Zl9vcCk7Ci0JbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1pbnQKLW5mc2Rfc3luY19kaXIoc3RydWN0IGRlbnRyeSAqZHApCi17Ci0JcmV0dXJuIG5mc2RfZG9zeW5jKE5VTEwsIGRwLCBkcC0+ZF9pbm9kZS0+aV9mb3ApOwotfQotCi0vKgogICogT2J0YWluIHRoZSByZWFkYWhlYWQgcGFyYW1ldGVycyBmb3IgdGhlIGZpbGUKICAqIHNwZWNpZmllZCBieSAoZGV2LCBpbm8pLgogICovCkBAIC0xMDA2LDcgKzk5Nyw3IEBACiAKIAlpZiAoaW5vZGUtPmlfc3RhdGUgJiBJX0RJUlRZKSB7CiAJCWRwcmludGsoIm5mc2Q6IHdyaXRlIHN5bmMgJWRcbiIsIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKLQkJZXJyID0gbmZzZF9zeW5jKGZpbGUpOworCQllcnIgPSB2ZnNfZnN5bmMoZmlsZSwgZmlsZS0+Zl9wYXRoLmRlbnRyeSwgMCk7CiAJfQogCWxhc3RfaW5vID0gaW5vZGUtPmlfaW5vOwogCWxhc3RfZGV2ID0gaW5vZGUtPmlfc2ItPnNfZGV2OwpAQCAtMTE1NCw4ICsxMTQ1LDkgQEAKICNpZmRlZiBDT05GSUdfTkZTRF9WMwogLyoKICAqIENvbW1pdCBhbGwgcGVuZGluZyB3cml0ZXMgdG8gc3RhYmxlIHN0b3JhZ2UuCi0gKiBTdHJpY3RseSBzcGVha2luZywgd2UgY291bGQgc3luYyBqdXN0IHRoZSBpbmRpY2F0ZWQgZmlsZSByZWdpb24gaGVyZSwKLSAqIGJ1dCB0aGVyZSdzIGN1cnJlbnRseSBubyB3YXkgd2UgY2FuIGFzayB0aGUgVkZTIHRvIGRvIHNvLgorICoKKyAqIE5vdGU6IHdlIG9ubHkgZ3VhcmFudGVlIHRoYXQgZGF0YSB0aGF0IGxpZXMgd2l0aGluIHRoZSByYW5nZSBzcGVjaWZpZWQKKyAqIGJ5IHRoZSAnb2Zmc2V0JyBhbmQgJ2NvdW50JyBwYXJhbWV0ZXJzIHdpbGwgYmUgc3luY2VkLgogICoKICAqIFVuZm9ydHVuYXRlbHkgd2UgY2Fubm90IGxvY2sgdGhlIGZpbGUgdG8gbWFrZSBzdXJlIHdlIHJldHVybiBmdWxsIFdDQwogICogZGF0YSB0byB0aGUgY2xpZW50LCBhcyBsb2NraW5nIGhhcHBlbnMgbG93ZXIgZG93biBpbiB0aGUgZmlsZXN5c3RlbS4KQEAgLTExNjUsMjMgKzExNTcsMzIgQEAKICAgICAgICAgICAgICAgIGxvZmZfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7CiAJc3RydWN0IGZpbGUJKmZpbGU7Ci0JX19iZTMyCQllcnI7CisJbG9mZl90CQllbmQgPSBMTE9OR19NQVg7CisJX19iZTMyCQllcnIgPSBuZnNlcnJfaW52YWw7CiAKLQlpZiAoKHU2NCljb3VudCA+IH4odTY0KW9mZnNldCkKLQkJcmV0dXJuIG5mc2Vycl9pbnZhbDsKKwlpZiAob2Zmc2V0IDwgMCkKKwkJZ290byBvdXQ7CisJaWYgKGNvdW50ICE9IDApIHsKKwkJZW5kID0gb2Zmc2V0ICsgKGxvZmZfdCljb3VudCAtIDE7CisJCWlmIChlbmQgPCBvZmZzZXQpCisJCQlnb3RvIG91dDsKKwl9CiAKIAllcnIgPSBuZnNkX29wZW4ocnFzdHAsIGZocCwgU19JRlJFRywgTkZTRF9NQVlfV1JJVEUsICZmaWxlKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIG91dDsKIAlpZiAoRVhfSVNTWU5DKGZocC0+ZmhfZXhwb3J0KSkgewotCQlpZiAoZmlsZS0+Zl9vcCAmJiBmaWxlLT5mX29wLT5mc3luYykgewotCQkJZXJyID0gbmZzZXJybm8obmZzZF9zeW5jKGZpbGUpKTsKLQkJfSBlbHNlIHsKKwkJaW50IGVycjIgPSB2ZnNfZnN5bmNfcmFuZ2UoZmlsZSwgZmlsZS0+Zl9wYXRoLmRlbnRyeSwKKwkJCQlvZmZzZXQsIGVuZCwgMCk7CisKKwkJaWYgKGVycjIgIT0gLUVJTlZBTCkKKwkJCWVyciA9IG5mc2Vycm5vKGVycjIpOworCQllbHNlCiAJCQllcnIgPSBuZnNlcnJfbm90c3VwcDsKLQkJfQogCX0KIAogCW5mc2RfY2xvc2UoZmlsZSk7CitvdXQ6CiAJcmV0dXJuIGVycjsKIH0KICNlbmRpZiAvKiBDT05GSUdfTkZTRF9WMyAqLwpAQCAtMTMzNCwxMiArMTMzNSwxNCBAQAogCQlnb3RvIG91dF9uZnNlcnI7CiAJfQogCi0JaWYgKEVYX0lTU1lOQyhmaHAtPmZoX2V4cG9ydCkpIHsKLQkJZXJyID0gbmZzZXJybm8obmZzZF9zeW5jX2RpcihkZW50cnkpKTsKLQkJd3JpdGVfaW5vZGVfbm93KGRjaGlsZC0+ZF9pbm9kZSwgMSk7Ci0JfQorCWVyciA9IG5mc2RfY3JlYXRlX3NldGF0dHIocnFzdHAsIHJlc2ZocCwgaWFwKTsKIAotCWVycjIgPSBuZnNkX2NyZWF0ZV9zZXRhdHRyKHJxc3RwLCByZXNmaHAsIGlhcCk7CisJLyoKKwkgKiBuZnNkX3NldGF0dHIgYWxyZWFkeSBjb21taXR0ZWQgdGhlIGNoaWxkLiAgVHJhbnNhY3Rpb25hbCBmaWxlc3lzdGVtcworCSAqIGhhZCBhIGNoYW5jZSB0byBjb21taXQgY2hhbmdlcyBmb3IgYm90aCBwYXJlbnQgYW5kIGNoaWxkCisJICogc2ltdWx0YW5lb3VzbHkgbWFraW5nIHRoZSBmb2xsb3dpbmcgY29tbWl0X21ldGFkYXRhIGEgbm9vcC4KKwkgKi8KKwllcnIyID0gbmZzZXJybm8oY29tbWl0X21ldGFkYXRhKGZocCkpOwogCWlmIChlcnIyKQogCQllcnIgPSBlcnIyOwogCW1udF9kcm9wX3dyaXRlKGZocC0+ZmhfZXhwb3J0LT5leF9wYXRoLm1udCk7CkBAIC0xMzcxLDcgKzEzNzQsNiBAQAogCXN0cnVjdCBkZW50cnkJKmRlbnRyeSwgKmRjaGlsZCA9IE5VTEw7CiAJc3RydWN0IGlub2RlCSpkaXJwOwogCV9fYmUzMgkJZXJyOwotCV9fYmUzMgkJZXJyMjsKIAlpbnQJCWhvc3RfZXJyOwogCV9fdTMyCQl2X210aW1lPTAsIHZfYXRpbWU9MDsKIApAQCAtMTQ2NiwxMSArMTQ2OCw2IEBACiAJaWYgKGNyZWF0ZWQpCiAJCSpjcmVhdGVkID0gMTsKIAotCWlmIChFWF9JU1NZTkMoZmhwLT5maF9leHBvcnQpKSB7Ci0JCWVyciA9IG5mc2Vycm5vKG5mc2Rfc3luY19kaXIoZGVudHJ5KSk7Ci0JCS8qIHNldGF0dHIgd2lsbCBzeW5jIHRoZSBjaGlsZCAob3Igbm90KSAqLwotCX0KLQogCW5mc2RfY2hlY2tfaWdub3JlX3Jlc2l6aW5nKGlhcCk7CiAKIAlpZiAoY3JlYXRlbW9kZSA9PSBORlMzX0NSRUFURV9FWENMVVNJVkUpIHsKQEAgLTE0ODUsOSArMTQ4MiwxMyBAQAogCX0KIAogIHNldF9hdHRyOgotCWVycjIgPSBuZnNkX2NyZWF0ZV9zZXRhdHRyKHJxc3RwLCByZXNmaHAsIGlhcCk7Ci0JaWYgKGVycjIpCi0JCWVyciA9IGVycjI7CisJZXJyID0gbmZzZF9jcmVhdGVfc2V0YXR0cihycXN0cCwgcmVzZmhwLCBpYXApOworCisJLyoKKwkgKiBuZnNkX3NldGF0dHIgYWxyZWFkeSBjb21taXR0ZWQgdGhlIGNoaWxkIChhbmQgcG9zc2libHkgYWxzbyB0aGUgcGFyZW50KS4KKwkgKi8KKwlpZiAoIWVycikKKwkJZXJyID0gbmZzZXJybm8oY29tbWl0X21ldGFkYXRhKGZocCkpOwogCiAJbW50X2Ryb3Bfd3JpdGUoZmhwLT5maF9leHBvcnQtPmV4X3BhdGgubW50KTsKIAkvKgpAQCAtMTYwMiwxMiArMTYwMyw5IEBACiAJCX0KIAl9IGVsc2UKIAkJaG9zdF9lcnIgPSB2ZnNfc3ltbGluayhkZW50cnktPmRfaW5vZGUsIGRuZXcsIHBhdGgpOwotCi0JaWYgKCFob3N0X2VycikgewotCQlpZiAoRVhfSVNTWU5DKGZocC0+ZmhfZXhwb3J0KSkKLQkJCWhvc3RfZXJyID0gbmZzZF9zeW5jX2RpcihkZW50cnkpOwotCX0KIAllcnIgPSBuZnNlcnJubyhob3N0X2Vycik7CisJaWYgKCFlcnIpCisJCWVyciA9IG5mc2Vycm5vKGNvbW1pdF9tZXRhZGF0YShmaHApKTsKIAlmaF91bmxvY2soZmhwKTsKIAogCW1udF9kcm9wX3dyaXRlKGZocC0+ZmhfZXhwb3J0LT5leF9wYXRoLm1udCk7CkBAIC0xNjY5LDExICsxNjY3LDkgQEAKIAl9CiAJaG9zdF9lcnIgPSB2ZnNfbGluayhkb2xkLCBkaXJwLCBkbmV3KTsKIAlpZiAoIWhvc3RfZXJyKSB7Ci0JCWlmIChFWF9JU1NZTkMoZmZocC0+ZmhfZXhwb3J0KSkgewotCQkJZXJyID0gbmZzZXJybm8obmZzZF9zeW5jX2RpcihkZGlyKSk7Ci0JCQl3cml0ZV9pbm9kZV9ub3coZGVzdCwgMSk7Ci0JCX0KLQkJZXJyID0gMDsKKwkJZXJyID0gbmZzZXJybm8oY29tbWl0X21ldGFkYXRhKGZmaHApKTsKKwkJaWYgKCFlcnIpCisJCQllcnIgPSBuZnNlcnJubyhjb21taXRfbWV0YWRhdGEodGZocCkpOwogCX0gZWxzZSB7CiAJCWlmIChob3N0X2VyciA9PSAtRVhERVYgJiYgcnFzdHAtPnJxX3ZlcnMgPT0gMikKIAkJCWVyciA9IG5mc2Vycl9hY2NlczsKQEAgLTE3NjksMTAgKzE3NjUsMTAgQEAKIAkJZ290byBvdXRfZHB1dF9uZXc7CiAKIAlob3N0X2VyciA9IHZmc19yZW5hbWUoZmRpciwgb2RlbnRyeSwgdGRpciwgbmRlbnRyeSk7Ci0JaWYgKCFob3N0X2VyciAmJiBFWF9JU1NZTkModGZocC0+ZmhfZXhwb3J0KSkgewotCQlob3N0X2VyciA9IG5mc2Rfc3luY19kaXIodGRlbnRyeSk7CisJaWYgKCFob3N0X2VycikgeworCQlob3N0X2VyciA9IGNvbW1pdF9tZXRhZGF0YSh0ZmhwKTsKIAkJaWYgKCFob3N0X2VycikKLQkJCWhvc3RfZXJyID0gbmZzZF9zeW5jX2RpcihmZGVudHJ5KTsKKwkJCWhvc3RfZXJyID0gY29tbWl0X21ldGFkYXRhKGZmaHApOwogCX0KIAogCW1udF9kcm9wX3dyaXRlKGZmaHAtPmZoX2V4cG9ydC0+ZXhfcGF0aC5tbnQpOwpAQCAtMTg1MywxMiArMTg0OSw5IEBACiAKIAlkcHV0KHJkZW50cnkpOwogCi0JaWYgKGhvc3RfZXJyKQotCQlnb3RvIG91dF9kcm9wOwotCWlmIChFWF9JU1NZTkMoZmhwLT5maF9leHBvcnQpKQotCQlob3N0X2VyciA9IG5mc2Rfc3luY19kaXIoZGVudHJ5KTsKKwlpZiAoIWhvc3RfZXJyKQorCQlob3N0X2VyciA9IGNvbW1pdF9tZXRhZGF0YShmaHApOwogCi1vdXRfZHJvcDoKIAltbnRfZHJvcF93cml0ZShmaHAtPmZoX2V4cG9ydC0+ZXhfcGF0aC5tbnQpOwogb3V0X25mc2VycjoKIAllcnIgPSBuZnNlcnJubyhob3N0X2Vycik7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9xdW90YV9sb2NhbC5jIGIvZnMvb2NmczIvcXVvdGFfbG9jYWwuYwppbmRleCAyMWY5ZTcxLi5hNjQ2N2YzIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9xdW90YV9sb2NhbC5jCisrKyBiL2ZzL29jZnMyL3F1b3RhX2xvY2FsLmMKQEAgLTQ1Nyw3ICs0NTcsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAkJZGNodW5rID0gKHN0cnVjdCBvY2ZzMl9sb2NhbF9kaXNrX2NodW5rICopaGJoLT5iX2RhdGE7Ci0JCWZvcl9lYWNoX2JpdChiaXQsIHJjaHVuay0+cmNfYml0bWFwLCBvbF9jaHVua19lbnRyaWVzKHNiKSkgeworCQlmb3JfZWFjaF9zZXRfYml0KGJpdCwgcmNodW5rLT5yY19iaXRtYXAsIG9sX2NodW5rX2VudHJpZXMoc2IpKSB7CiAJCQlxYmggPSBOVUxMOwogCQkJc3RhdHVzID0gb2NmczJfcmVhZF9xdW90YV9ibG9jayhscWlub2RlLAogCQkJCQkJb2xfZHFibGtfYmxvY2soc2IsIGNodW5rLCBiaXQpLApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9hcnJheS5jIGIvZnMvcHJvYy9hcnJheS5jCmluZGV4IDE4ZTIwZmUuLmFhODYzN2IgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYXJyYXkuYworKysgYi9mcy9wcm9jL2FycmF5LmMKQEAgLTI3Myw3ICsyNzMsNyBAQAogCQlyY3VfcmVhZF9sb2NrKCk7ICAvKiBGSVhNRTogaXMgdGhpcyBjb3JyZWN0PyAqLwogCQlxc2l6ZSA9IGF0b21pY19yZWFkKCZfX3Rhc2tfY3JlZChwKS0+dXNlci0+c2lncGVuZGluZyk7CiAJCXJjdV9yZWFkX3VubG9jaygpOwotCQlxbGltID0gcC0+c2lnbmFsLT5ybGltW1JMSU1JVF9TSUdQRU5ESU5HXS5ybGltX2N1cjsKKwkJcWxpbSA9IHRhc2tfcmxpbWl0KHAsIFJMSU1JVF9TSUdQRU5ESU5HKTsKIAkJdW5sb2NrX3Rhc2tfc2lnaGFuZChwLCAmZmxhZ3MpOwogCX0KIApAQCAtNDIwLDcgKzQyMCw3IEBACiAJCWN1dGltZSA9IHNpZy0+Y3V0aW1lOwogCQljc3RpbWUgPSBzaWctPmNzdGltZTsKIAkJY2d0aW1lID0gc2lnLT5jZ3RpbWU7Ci0JCXJzc2xpbSA9IHNpZy0+cmxpbVtSTElNSVRfUlNTXS5ybGltX2N1cjsKKwkJcnNzbGltID0gQUNDRVNTX09OQ0Uoc2lnLT5ybGltW1JMSU1JVF9SU1NdLnJsaW1fY3VyKTsKIAogCQkvKiBhZGQgdXAgbGl2ZSB0aHJlYWQgc3RhdHMgYXQgdGhlIGdyb3VwIGxldmVsICovCiAJCWlmICh3aG9sZSkgewpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9nZW5lcmljLmMgYi9mcy9wcm9jL2dlbmVyaWMuYwppbmRleCA5NTgwYWJlLi4wOGY0ZDcxIDEwMDY0NAotLS0gYS9mcy9wcm9jL2dlbmVyaWMuYworKysgYi9mcy9wcm9jL2dlbmVyaWMuYwpAQCAtMjkxLDE5ICsyOTEsMTcgQEAKICAqIHJldHVybnMgdGhlIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSBmb3IgIi9wcm9jL3R0eS9kcml2ZXIiLCBhbmQKICAqIHJldHVybnMgInNlcmlhbCIgaW4gcmVzaWR1YWwuCiAgKi8KLXN0YXRpYyBpbnQgeGxhdGVfcHJvY19uYW1lKGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgICBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKipyZXQsIGNvbnN0IGNoYXIgKipyZXNpZHVhbCkKK3N0YXRpYyBpbnQgX194bGF0ZV9wcm9jX25hbWUoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHByb2NfZGlyX2VudHJ5ICoqcmV0LAorCQkJICAgICBjb25zdCBjaGFyICoqcmVzaWR1YWwpCiB7CiAJY29uc3QgY2hhciAgICAgCQkqY3AgPSBuYW1lLCAqbmV4dDsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkJKmRlOwogCWludAkJCWxlbjsKLQlpbnQgCQkJcnRuID0gMDsKIAogCWRlID0gKnJldDsKIAlpZiAoIWRlKQogCQlkZSA9ICZwcm9jX3Jvb3Q7CiAKLQlzcGluX2xvY2soJnByb2Nfc3ViZGlyX2xvY2spOwogCXdoaWxlICgxKSB7CiAJCW5leHQgPSBzdHJjaHIoY3AsICcvJyk7CiAJCWlmICghbmV4dCkKQEAgLTMxNSwxNiArMzEzLDI1IEBACiAJCQkJYnJlYWs7CiAJCX0KIAkJaWYgKCFkZSkgewotCQkJcnRuID0gLUVOT0VOVDsKLQkJCWdvdG8gb3V0OworCQkJV0FSTigxLCAibmFtZSAnJXMnXG4iLCBuYW1lKTsKKwkJCXJldHVybiAtRU5PRU5UOwogCQl9CiAJCWNwICs9IGxlbiArIDE7CiAJfQogCSpyZXNpZHVhbCA9IGNwOwogCSpyZXQgPSBkZTsKLW91dDoKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4bGF0ZV9wcm9jX25hbWUoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHByb2NfZGlyX2VudHJ5ICoqcmV0LAorCQkJICAgY29uc3QgY2hhciAqKnJlc2lkdWFsKQoreworCWludCBydjsKKworCXNwaW5fbG9jaygmcHJvY19zdWJkaXJfbG9jayk7CisJcnYgPSBfX3hsYXRlX3Byb2NfbmFtZShuYW1lLCByZXQsIHJlc2lkdWFsKTsKIAlzcGluX3VubG9jaygmcHJvY19zdWJkaXJfbG9jayk7Ci0JcmV0dXJuIHJ0bjsKKwlyZXR1cm4gcnY7CiB9CiAKIHN0YXRpYyBERUZJTkVfSURBKHByb2NfaW51bV9pZGEpOwpAQCAtNzk3LDExICs4MDQsMTMgQEAKIAljb25zdCBjaGFyICpmbiA9IG5hbWU7CiAJaW50IGxlbjsKIAotCWlmICh4bGF0ZV9wcm9jX25hbWUobmFtZSwgJnBhcmVudCwgJmZuKSAhPSAwKQorCXNwaW5fbG9jaygmcHJvY19zdWJkaXJfbG9jayk7CisJaWYgKF9feGxhdGVfcHJvY19uYW1lKG5hbWUsICZwYXJlbnQsICZmbikgIT0gMCkgeworCQlzcGluX3VubG9jaygmcHJvY19zdWJkaXJfbG9jayk7CiAJCXJldHVybjsKKwl9CiAJbGVuID0gc3RybGVuKGZuKTsKIAotCXNwaW5fbG9jaygmcHJvY19zdWJkaXJfbG9jayk7CiAJZm9yIChwID0gJnBhcmVudC0+c3ViZGlyOyAqcDsgcD0mKCpwKS0+bmV4dCApIHsKIAkJaWYgKHByb2NfbWF0Y2gobGVuLCBmbiwgKnApKSB7CiAJCQlkZSA9ICpwOwpAQCAtODExLDggKzgyMCwxMCBAQAogCQl9CiAJfQogCXNwaW5fdW5sb2NrKCZwcm9jX3N1YmRpcl9sb2NrKTsKLQlpZiAoIWRlKQorCWlmICghZGUpIHsKKwkJV0FSTigxLCAibmFtZSAnJXMnXG4iLCBuYW1lKTsKIAkJcmV0dXJuOworCX0KIAogCXNwaW5fbG9jaygmZGUtPnBkZV91bmxvYWRfbG9jayk7CiAJLyoKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuYwppbmRleCBmMjc3YzRhLi4xODNmOGZmIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmMKKysrIGIvZnMvcHJvYy90YXNrX21tdS5jCkBAIC0xNiw3ICsxNiw3IEBACiAKIHZvaWQgdGFza19tZW0oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQl1bnNpZ25lZCBsb25nIGRhdGEsIHRleHQsIGxpYjsKKwl1bnNpZ25lZCBsb25nIGRhdGEsIHRleHQsIGxpYiwgc3dhcDsKIAl1bnNpZ25lZCBsb25nIGhpd2F0ZXJfdm0sIHRvdGFsX3ZtLCBoaXdhdGVyX3JzcywgdG90YWxfcnNzOwogCiAJLyoKQEAgLTM2LDYgKzM2LDcgQEAKIAlkYXRhID0gbW0tPnRvdGFsX3ZtIC0gbW0tPnNoYXJlZF92bSAtIG1tLT5zdGFja192bTsKIAl0ZXh0ID0gKFBBR0VfQUxJR04obW0tPmVuZF9jb2RlKSAtIChtbS0+c3RhcnRfY29kZSAmIFBBR0VfTUFTSykpID4+IDEwOwogCWxpYiA9IChtbS0+ZXhlY192bSA8PCAoUEFHRV9TSElGVC0xMCkpIC0gdGV4dDsKKwlzd2FwID0gZ2V0X21tX2NvdW50ZXIobW0sIE1NX1NXQVBFTlRTKTsKIAlzZXFfcHJpbnRmKG0sCiAJCSJWbVBlYWs6XHQlOGx1IGtCXG4iCiAJCSJWbVNpemU6XHQlOGx1IGtCXG4iCkBAIC00Niw3ICs0Nyw4IEBACiAJCSJWbVN0azpcdCU4bHUga0JcbiIKIAkJIlZtRXhlOlx0JThsdSBrQlxuIgogCQkiVm1MaWI6XHQlOGx1IGtCXG4iCi0JCSJWbVBURTpcdCU4bHUga0JcbiIsCisJCSJWbVBURTpcdCU4bHUga0JcbiIKKwkJIlZtU3dhcDpcdCU4bHUga0JcbiIsCiAJCWhpd2F0ZXJfdm0gPDwgKFBBR0VfU0hJRlQtMTApLAogCQkodG90YWxfdm0gLSBtbS0+cmVzZXJ2ZWRfdm0pIDw8IChQQUdFX1NISUZULTEwKSwKIAkJbW0tPmxvY2tlZF92bSA8PCAoUEFHRV9TSElGVC0xMCksCkBAIC01NCw3ICs1Niw4IEBACiAJCXRvdGFsX3JzcyA8PCAoUEFHRV9TSElGVC0xMCksCiAJCWRhdGEgPDwgKFBBR0VfU0hJRlQtMTApLAogCQltbS0+c3RhY2tfdm0gPDwgKFBBR0VfU0hJRlQtMTApLCB0ZXh0LCBsaWIsCi0JCShQVFJTX1BFUl9QVEUqc2l6ZW9mKHB0ZV90KSptbS0+bnJfcHRlcykgPj4gMTApOworCQkoUFRSU19QRVJfUFRFKnNpemVvZihwdGVfdCkqbW0tPm5yX3B0ZXMpID4+IDEwLAorCQlzd2FwIDw8IChQQUdFX1NISUZULTEwKSk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgdGFza192c2l6ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKQEAgLTY1LDExICs2OCwxMSBAQAogaW50IHRhc2tfc3RhdG0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCAqc2hhcmVkLCBpbnQgKnRleHQsCiAJICAgICAgIGludCAqZGF0YSwgaW50ICpyZXNpZGVudCkKIHsKLQkqc2hhcmVkID0gZ2V0X21tX2NvdW50ZXIobW0sIGZpbGVfcnNzKTsKKwkqc2hhcmVkID0gZ2V0X21tX2NvdW50ZXIobW0sIE1NX0ZJTEVQQUdFUyk7CiAJKnRleHQgPSAoUEFHRV9BTElHTihtbS0+ZW5kX2NvZGUpIC0gKG1tLT5zdGFydF9jb2RlICYgUEFHRV9NQVNLKSkKIAkJCQkJCQkJPj4gUEFHRV9TSElGVDsKIAkqZGF0YSA9IG1tLT50b3RhbF92bSAtIG1tLT5zaGFyZWRfdm07Ci0JKnJlc2lkZW50ID0gKnNoYXJlZCArIGdldF9tbV9jb3VudGVyKG1tLCBhbm9uX3Jzcyk7CisJKnJlc2lkZW50ID0gKnNoYXJlZCArIGdldF9tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMpOwogCXJldHVybiBtbS0+dG90YWxfdm07CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3NlbGVjdC5jIGIvZnMvc2VsZWN0LmMKaW5kZXggZmQzOGNlMi4uNzM3MTVlOSAxMDA2NDQKLS0tIGEvZnMvc2VsZWN0LmMKKysrIGIvZnMvc2VsZWN0LmMKQEAgLTgyMSw3ICs4MjEsNyBAQAogIAlzdHJ1Y3QgcG9sbF9saXN0ICp3YWxrID0gaGVhZDsKICAJdW5zaWduZWQgbG9uZyB0b2RvID0gbmZkczsKIAotCWlmIChuZmRzID4gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9OT0ZJTEVdLnJsaW1fY3VyKQorCWlmIChuZmRzID4gcmxpbWl0KFJMSU1JVF9OT0ZJTEUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbmZkcywgTl9TVEFDS19QUFMpOwpkaWZmIC0tZ2l0IGEvZnMvc2VxX2ZpbGUuYyBiL2ZzL3NlcV9maWxlLmMKaW5kZXggNWFmZDU1NC4uZTFmNDM3YiAxMDA2NDQKLS0tIGEvZnMvc2VxX2ZpbGUuYworKysgYi9mcy9zZXFfZmlsZS5jCkBAIC03MzQsNyArNzM0LDcgQEAKICAqIHNlcV9obGlzdF9uZXh0IC0gbW92ZSB0byB0aGUgbmV4dCBwb3NpdGlvbiBvZiB0aGUgaGxpc3QKICAqIEB2OiAgICB0aGUgY3VycmVudCBpdGVyYXRvcgogICogQGhlYWQ6IHRoZSBoZWFkIG9mIHRoZSBobGlzdAotICogQHBvczogIHRoZSBjdXJyZW50IHBvc2lzaW9uCisgKiBAcHBvczogdGhlIGN1cnJlbnQgcG9zaXRpb24KICAqCiAgKiBDYWxsZWQgYXQgc2VxX2ZpbGUtPm9wLT5uZXh0KCkuCiAgKi8KQEAgLTgwMCw3ICs4MDAsNyBAQAogICogc2VxX2hsaXN0X25leHRfcmN1IC0gbW92ZSB0byB0aGUgbmV4dCBwb3NpdGlvbiBvZiB0aGUgaGxpc3QgcHJvdGVjdGVkIGJ5IFJDVQogICogQHY6ICAgIHRoZSBjdXJyZW50IGl0ZXJhdG9yCiAgKiBAaGVhZDogdGhlIGhlYWQgb2YgdGhlIGhsaXN0Ci0gKiBAcG9zOiAgdGhlIGN1cnJlbnQgcG9zaXNpb24KKyAqIEBwcG9zOiB0aGUgY3VycmVudCBwb3NpdGlvbgogICoKICAqIENhbGxlZCBhdCBzZXFfZmlsZS0+b3AtPm5leHQoKS4KICAqCmRpZmYgLS1naXQgYS9mcy94ZnMvTWFrZWZpbGUgYi9mcy94ZnMvTWFrZWZpbGUKaW5kZXggNWM1YTM2Ni4uYjQ3NjllNCAxMDA2NDQKLS0tIGEvZnMveGZzL01ha2VmaWxlCisrKyBiL2ZzL3hmcy9NYWtlZmlsZQpAQCAtMTA1LDcgKzEwNSw2IEBACiAJCQkJICAgeGZzX2dsb2JhbHMubyBcCiAJCQkJICAgeGZzX2lvY3RsLm8gXAogCQkJCSAgIHhmc19pb3BzLm8gXAotCQkJCSAgIHhmc19scncubyBcCiAJCQkJICAgeGZzX3N1cGVyLm8gXAogCQkJCSAgIHhmc19zeW5jLm8gXAogCQkJCSAgIHhmc194YXR0ci5vKQpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCmluZGV4IDY2YWJlMzYuLjkwODMzNTcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJ4ZnNfaW9tYXAuaCIKICNpbmNsdWRlICJ4ZnNfdm5vZGVvcHMuaCIKICNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKKyNpbmNsdWRlICJ4ZnNfYm1hcC5oIgogI2luY2x1ZGUgPGxpbnV4L21wYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZXZlYy5oPgogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgpAQCAtMTYzLDE0ICsxNjQsMTcgQEAKIH0KIAogLyoKLSAqIFVwZGF0ZSBvbi1kaXNrIGZpbGUgc2l6ZSBub3cgdGhhdCBkYXRhIGhhcyBiZWVuIHdyaXR0ZW4gdG8gZGlzay4KLSAqIFRoZSBjdXJyZW50IGluLW1lbW9yeSBmaWxlIHNpemUgaXMgaV9zaXplLiAgSWYgYSB3cml0ZSBpcyBiZXlvbmQKLSAqIGVvZiBpX25ld19zaXplIHdpbGwgYmUgdGhlIGludGVuZGVkIGZpbGUgc2l6ZSB1bnRpbCBpX3NpemUgaXMKLSAqIHVwZGF0ZWQuICBJZiB0aGlzIHdyaXRlIGRvZXMgbm90IGV4dGVuZCBhbGwgdGhlIHdheSB0byB0aGUgdmFsaWQKLSAqIGZpbGUgc2l6ZSB0aGVuIHJlc3RyaWN0IHRoaXMgdXBkYXRlIHRvIHRoZSBlbmQgb2YgdGhlIHdyaXRlLgorICogVXBkYXRlIG9uLWRpc2sgZmlsZSBzaXplIG5vdyB0aGF0IGRhdGEgaGFzIGJlZW4gd3JpdHRlbiB0byBkaXNrLiAgVGhlCisgKiBjdXJyZW50IGluLW1lbW9yeSBmaWxlIHNpemUgaXMgaV9zaXplLiAgSWYgYSB3cml0ZSBpcyBiZXlvbmQgZW9mIGlfbmV3X3NpemUKKyAqIHdpbGwgYmUgdGhlIGludGVuZGVkIGZpbGUgc2l6ZSB1bnRpbCBpX3NpemUgaXMgdXBkYXRlZC4gIElmIHRoaXMgd3JpdGUgZG9lcworICogbm90IGV4dGVuZCBhbGwgdGhlIHdheSB0byB0aGUgdmFsaWQgZmlsZSBzaXplIHRoZW4gcmVzdHJpY3QgdGhpcyB1cGRhdGUgdG8KKyAqIHRoZSBlbmQgb2YgdGhlIHdyaXRlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYmxvY2sgYXMgYmxvY2tpbmcgb24gdGhlIGlub2RlIGxvY2sgaW4gSU8gY29tcGxldGlvbgorICogY2FuIGxlYWQgdG8gSU8gY29tcGxldGlvbiBvcmRlciBkZXBlbmRlbmN5IGRlYWRsb2Nrcy4uIElmIGl0IGNhbid0IGdldCB0aGUKKyAqIGlub2RlIGlsb2NrIGl0IHdpbGwgcmV0dXJuIEVBR0FJTi4gQ2FsbGVycyBtdXN0IGhhbmRsZSB0aGlzLgogICovCi0KLVNUQVRJQyB2b2lkCitTVEFUSUMgaW50CiB4ZnNfc2V0ZmlsZXNpemUoCiAJeGZzX2lvZW5kX3QJCSppb2VuZCkKIHsKQEAgLTE4MSw1MCArMTg1LDE5IEBACiAJQVNTRVJUKGlvZW5kLT5pb190eXBlICE9IElPTUFQX1JFQUQpOwogCiAJaWYgKHVubGlrZWx5KGlvZW5kLT5pb19lcnJvcikpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKLQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKKwlpZiAoIXhmc19pbG9ja19ub3dhaXQoaXAsIFhGU19JTE9DS19FWENMKSkKKwkJcmV0dXJuIEVBR0FJTjsKKwogCWlzaXplID0geGZzX2lvZW5kX25ld19lb2YoaW9lbmQpOwogCWlmIChpc2l6ZSkgewogCQlpcC0+aV9kLmRpX3NpemUgPSBpc2l6ZTsKLQkJeGZzX21hcmtfaW5vZGVfZGlydHlfc3luYyhpcCk7CisJCXhmc19tYXJrX2lub2RlX2RpcnR5KGlwKTsKIAl9CiAKIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotfQotCi0vKgotICogSU8gd3JpdGUgY29tcGxldGlvbi4KLSAqLwotU1RBVElDIHZvaWQKLXhmc19lbmRfaW8oCi0Jc3RydWN0IHdvcmtfc3RydWN0CSp3b3JrKQotewotCXhmc19pb2VuZF90CQkqaW9lbmQgPQotCQljb250YWluZXJfb2Yod29yaywgeGZzX2lvZW5kX3QsIGlvX3dvcmspOwotCXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gWEZTX0koaW9lbmQtPmlvX2lub2RlKTsKLQotCS8qCi0JICogRm9yIHVud3JpdHRlbiBleHRlbnRzIHdlIG5lZWQgdG8gaXNzdWUgdHJhbnNhY3Rpb25zIHRvIGNvbnZlcnQgYQotCSAqIHJhbmdlIHRvIG5vcm1hbCB3cml0dGVuIGV4dGVucyBhZnRlciB0aGUgZGF0YSBJL08gaGFzIGZpbmlzaGVkLgotCSAqLwotCWlmIChpb2VuZC0+aW9fdHlwZSA9PSBJT01BUF9VTldSSVRURU4gJiYKLQkgICAgbGlrZWx5KCFpb2VuZC0+aW9fZXJyb3IgJiYgIVhGU19GT1JDRURfU0hVVERPV04oaXAtPmlfbW91bnQpKSkgewotCQlpbnQgZXJyb3I7Ci0KLQkJZXJyb3IgPSB4ZnNfaW9tYXBfd3JpdGVfdW53cml0dGVuKGlwLCBpb2VuZC0+aW9fb2Zmc2V0LAotCQkJCQkJIGlvZW5kLT5pb19zaXplKTsKLQkJaWYgKGVycm9yKQotCQkJaW9lbmQtPmlvX2Vycm9yID0gZXJyb3I7Ci0JfQotCi0JLyoKLQkgKiBXZSBtaWdodCBoYXZlIHRvIHVwZGF0ZSB0aGUgb24tZGlzayBmaWxlIHNpemUgYWZ0ZXIgZXh0ZW5kaW5nCi0JICogd3JpdGVzLgotCSAqLwotCWlmIChpb2VuZC0+aW9fdHlwZSAhPSBJT01BUF9SRUFEKQotCQl4ZnNfc2V0ZmlsZXNpemUoaW9lbmQpOwotCXhmc19kZXN0cm95X2lvZW5kKGlvZW5kKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTI0OSw2ICsyMjIsNTMgQEAKIH0KIAogLyoKKyAqIElPIHdyaXRlIGNvbXBsZXRpb24uCisgKi8KK1NUQVRJQyB2b2lkCit4ZnNfZW5kX2lvKAorCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwl4ZnNfaW9lbmRfdAkqaW9lbmQgPSBjb250YWluZXJfb2Yod29yaywgeGZzX2lvZW5kX3QsIGlvX3dvcmspOworCXN0cnVjdCB4ZnNfaW5vZGUgKmlwID0gWEZTX0koaW9lbmQtPmlvX2lub2RlKTsKKwlpbnQJCWVycm9yID0gMDsKKworCS8qCisJICogRm9yIHVud3JpdHRlbiBleHRlbnRzIHdlIG5lZWQgdG8gaXNzdWUgdHJhbnNhY3Rpb25zIHRvIGNvbnZlcnQgYQorCSAqIHJhbmdlIHRvIG5vcm1hbCB3cml0dGVuIGV4dGVucyBhZnRlciB0aGUgZGF0YSBJL08gaGFzIGZpbmlzaGVkLgorCSAqLworCWlmIChpb2VuZC0+aW9fdHlwZSA9PSBJT01BUF9VTldSSVRURU4gJiYKKwkgICAgbGlrZWx5KCFpb2VuZC0+aW9fZXJyb3IgJiYgIVhGU19GT1JDRURfU0hVVERPV04oaXAtPmlfbW91bnQpKSkgeworCisJCWVycm9yID0geGZzX2lvbWFwX3dyaXRlX3Vud3JpdHRlbihpcCwgaW9lbmQtPmlvX29mZnNldCwKKwkJCQkJCSBpb2VuZC0+aW9fc2l6ZSk7CisJCWlmIChlcnJvcikKKwkJCWlvZW5kLT5pb19lcnJvciA9IGVycm9yOworCX0KKworCS8qCisJICogV2UgbWlnaHQgaGF2ZSB0byB1cGRhdGUgdGhlIG9uLWRpc2sgZmlsZSBzaXplIGFmdGVyIGV4dGVuZGluZworCSAqIHdyaXRlcy4KKwkgKi8KKwlpZiAoaW9lbmQtPmlvX3R5cGUgIT0gSU9NQVBfUkVBRCkgeworCQllcnJvciA9IHhmc19zZXRmaWxlc2l6ZShpb2VuZCk7CisJCUFTU0VSVCghZXJyb3IgfHwgZXJyb3IgPT0gRUFHQUlOKTsKKwl9CisKKwkvKgorCSAqIElmIHdlIGRpZG4ndCBjb21wbGV0ZSBwcm9jZXNzaW5nIG9mIHRoZSBpb2VuZCwgcmVxdWV1ZSBpdCB0byB0aGUKKwkgKiB0YWlsIG9mIHRoZSB3b3JrcXVldWUgZm9yIGFub3RoZXIgYXR0ZW1wdCBsYXRlci4gT3RoZXJ3aXNlIGRlc3Ryb3kKKwkgKiBpdC4KKwkgKi8KKwlpZiAoZXJyb3IgPT0gRUFHQUlOKSB7CisJCWF0b21pY19pbmMoJmlvZW5kLT5pb19yZW1haW5pbmcpOworCQl4ZnNfZmluaXNoX2lvZW5kKGlvZW5kLCAwKTsKKwkJLyogZW5zdXJlIHdlIGRvbid0IHNwaW4gb24gYmxvY2tlZCBpb2VuZHMgKi8KKwkJZGVsYXkoMSk7CisJfSBlbHNlCisJCXhmc19kZXN0cm95X2lvZW5kKGlvZW5kKTsKK30KKworLyoKICAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXNlIGFuIElPIGNvbXBsZXRpb24gc3RydWN0dXJlLgogICogV2UgbmVlZCB0byB0cmFjayB1bndyaXR0ZW4gZXh0ZW50IHdyaXRlIGNvbXBsZXRpb24gaGVyZSBpbml0aWFsbHkuCiAgKiBXZSdsbCBuZWVkIHRvIGV4dGVuZCB0aGlzIGZvciB1cGRhdGluZyB0aGUgb25kaXNrIGlub2RlIHNpemUgbGF0ZXIKQEAgLTM0MSw3ICszNjEsNyBAQAogCSAqIGJ1dCBkb24ndCB1cGRhdGUgdGhlIGlub2RlIHNpemUgdW50aWwgSS9PIGNvbXBsZXRpb24uCiAJICovCiAJaWYgKHhmc19pb2VuZF9uZXdfZW9mKGlvZW5kKSkKLQkJeGZzX21hcmtfaW5vZGVfZGlydHlfc3luYyhYRlNfSShpb2VuZC0+aW9faW5vZGUpKTsKKwkJeGZzX21hcmtfaW5vZGVfZGlydHkoWEZTX0koaW9lbmQtPmlvX2lub2RlKSk7CiAKIAlzdWJtaXRfYmlvKHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfQUxMID8KIAkJICAgV1JJVEVfU1lOQ19QTFVHIDogV1JJVEUsIGJpbyk7CkBAIC04NzQsNiArODk0LDExOCBAQAogCX0KIH0KIAorU1RBVElDIHZvaWQKK3hmc192bV9pbnZhbGlkYXRlcGFnZSgKKwlzdHJ1Y3QgcGFnZQkJKnBhZ2UsCisJdW5zaWduZWQgbG9uZwkJb2Zmc2V0KQoreworCXRyYWNlX3hmc19pbnZhbGlkYXRlcGFnZShwYWdlLT5tYXBwaW5nLT5ob3N0LCBwYWdlLCBvZmZzZXQpOworCWJsb2NrX2ludmFsaWRhdGVwYWdlKHBhZ2UsIG9mZnNldCk7Cit9CisKKy8qCisgKiBJZiB0aGUgcGFnZSBoYXMgZGVsYWxsb2MgYnVmZmVycyBvbiBpdCwgd2UgbmVlZCB0byBwdW5jaCB0aGVtIG91dCBiZWZvcmUgd2UKKyAqIGludmFsaWRhdGUgdGhlIHBhZ2UuIElmIHdlIGRvbid0LCB3ZSBsZWF2ZSBhIHN0YWxlIGRlbGFsbG9jIG1hcHBpbmcgb24gdGhlCisgKiBpbm9kZSB0aGF0IGNhbiB0cmlwIGEgQlVHKCkgaW4geGZzX2dldF9ibG9ja3MoKSBsYXRlciBvbiBpZiBhIGRpcmVjdCBJTyByZWFkCisgKiBpcyBkb25lIG9uIHRoYXQgc2FtZSByZWdpb24gLSB0aGUgZGVsYWxsb2MgZXh0ZW50IGlzIHJldHVybmVkIHdoZW4gbm9uZSBpcworICogc3VwcG9zZWQgdG8gYmUgdGhlcmUuCisgKgorICogV2UgcHJldmVudCB0aGlzIGJ5IHRydW5jYXRpbmcgYXdheSB0aGUgZGVsYWxsb2MgcmVnaW9ucyBvbiB0aGUgcGFnZSBiZWZvcmUKKyAqIGludmFsaWRhdGluZyBpdC4gQmVjYXVzZSB0aGV5IGFyZSBkZWxhbGxvYywgd2UgY2FuIGRvIHRoaXMgd2l0aG91dCBuZWVkaW5nIGEKKyAqIHRyYW5zYWN0aW9uLiBJbmRlZWQgLSBpZiB3ZSBnZXQgRU5PU1BDIGVycm9ycywgd2UgaGF2ZSB0byBiZSBhYmxlIHRvIGRvIHRoaXMKKyAqIHRydW5jYXRpb24gd2l0aG91dCBhIHRyYW5zYWN0aW9uIGFzIHRoZXJlIGlzIG5vIHNwYWNlIGxlZnQgZm9yIGJsb2NrCisgKiByZXNlcnZhdGlvbiAodHlwaWNhbGx5IHdoeSB3ZSBzZWUgYSBFTk9TUEMgaW4gd3JpdGViYWNrKS4KKyAqCisgKiBUaGlzIGlzIG5vdCBhIHBlcmZvcm1hbmNlIGNyaXRpY2FsIHBhdGgsIHNvIGZvciBub3cganVzdCBkbyB0aGUgcHVuY2hpbmcgYQorICogYnVmZmVyIGhlYWQgYXQgYSB0aW1lLgorICovCitTVEFUSUMgdm9pZAoreGZzX2FvcHNfZGlzY2FyZF9wYWdlKAorCXN0cnVjdCBwYWdlCQkqcGFnZSkKK3sKKwlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CisJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpbm9kZSk7CisJc3RydWN0IGJ1ZmZlcl9oZWFkCSpiaCwgKmhlYWQ7CisJbG9mZl90CQkJb2Zmc2V0ID0gcGFnZV9vZmZzZXQocGFnZSk7CisJc3NpemVfdAkJCWxlbiA9IDEgPDwgaW5vZGUtPmlfYmxrYml0czsKKworCWlmICgheGZzX2lzX2RlbGF5ZWRfcGFnZShwYWdlLCBJT01BUF9ERUxBWSkpCisJCWdvdG8gb3V0X2ludmFsaWRhdGU7CisKKwl4ZnNfZnNfY21uX2VycihDRV9BTEVSVCwgaXAtPmlfbW91bnQsCisJCSJwYWdlIGRpc2NhcmQgb24gcGFnZSAlcCwgaW5vZGUgMHglbGx4LCBvZmZzZXQgJWxsdS4iLAorCQkJcGFnZSwgaXAtPmlfaW5vLCBvZmZzZXQpOworCisJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJYmggPSBoZWFkID0gcGFnZV9idWZmZXJzKHBhZ2UpOworCWRvIHsKKwkJaW50CQlkb25lOworCQl4ZnNfZmlsZW9mZl90CW9mZnNldF9mc2I7CisJCXhmc19ibWJ0X2lyZWNfdAlpbWFwOworCQlpbnQJCW5pbWFwcyA9IDE7CisJCWludAkJZXJyb3I7CisJCXhmc19mc2Jsb2NrX3QJZmlyc3RibG9jazsKKwkJeGZzX2JtYXBfZnJlZV90IGZsaXN0OworCisJCWlmICghYnVmZmVyX2RlbGF5KGJoKSkKKwkJCWdvdG8gbmV4dF9idWZmZXI7CisKKwkJb2Zmc2V0X2ZzYiA9IFhGU19CX1RPX0ZTQlQoaXAtPmlfbW91bnQsIG9mZnNldCk7CisKKwkJLyoKKwkJICogTWFwIHRoZSByYW5nZSBmaXJzdCBhbmQgY2hlY2sgdGhhdCBpdCBpcyBhIGRlbGFsbG9jIGV4dGVudAorCQkgKiBiZWZvcmUgdHJ5aW5nIHRvIHVubWFwIHRoZSByYW5nZS4gT3RoZXJ3aXNlIHdlIHdpbGwgYmUKKwkJICogdHJ5aW5nIHRvIHJlbW92ZSBhIHJlYWwgZXh0ZW50ICh3aGljaCByZXF1aXJlcyBhCisJCSAqIHRyYW5zYWN0aW9uKSBvciBhIGhvbGUsIHdoaWNoIGlzIHByb2JhYmx5IGEgYmFkIGlkZWEuLi4KKwkJICovCisJCWVycm9yID0geGZzX2JtYXBpKE5VTEwsIGlwLCBvZmZzZXRfZnNiLCAxLAorCQkJCVhGU19CTUFQSV9FTlRJUkUsICBOVUxMLCAwLCAmaW1hcCwKKwkJCQkmbmltYXBzLCBOVUxMLCBOVUxMKTsKKworCQlpZiAoZXJyb3IpIHsKKwkJCS8qIHNvbWV0aGluZyBzY3Jld2VkLCBqdXN0IGJhaWwgKi8KKwkJCXhmc19mc19jbW5fZXJyKENFX0FMRVJULCBpcC0+aV9tb3VudCwKKwkJCSJwYWdlIGRpc2NhcmQgZmFpbGVkIGRlbGFsbG9jIG1hcHBpbmcgbG9va3VwLiIpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFuaW1hcHMpIHsKKwkJCS8qIG5vdGhpbmcgdGhlcmUgKi8KKwkJCWdvdG8gbmV4dF9idWZmZXI7CisJCX0KKwkJaWYgKGltYXAuYnJfc3RhcnRibG9jayAhPSBERUxBWVNUQVJUQkxPQ0spIHsKKwkJCS8qIGJlZW4gY29udmVydGVkLCBpZ25vcmUgKi8KKwkJCWdvdG8gbmV4dF9idWZmZXI7CisJCX0KKwkJV0FSTl9PTihpbWFwLmJyX2Jsb2NrY291bnQgPT0gMCk7CisKKwkJLyoKKwkJICogTm90ZTogd2hpbGUgd2UgaW5pdGlhbGlzZSB0aGUgZmlyc3RibG9jay9mbGlzdCBwYWlyLCB0aGV5CisJCSAqIHNob3VsZCBuZXZlciBiZSB1c2VkIGJlY2F1c2UgYmxvY2tzIHNob3VsZCBuZXZlciBiZQorCQkgKiBhbGxvY2F0ZWQgb3IgZnJlZWQgZm9yIGEgZGVsYWxsb2MgZXh0ZW50IGFuZCBoZW5jZSB3ZSBuZWVkCisJCSAqIGRvbid0IGNhbmNlbCBvciBmaW5pc2ggdGhlbSBhZnRlciB0aGUgeGZzX2J1bm1hcGkoKSBjYWxsLgorCQkgKi8KKwkJeGZzX2JtYXBfaW5pdCgmZmxpc3QsICZmaXJzdGJsb2NrKTsKKwkJZXJyb3IgPSB4ZnNfYnVubWFwaShOVUxMLCBpcCwgb2Zmc2V0X2ZzYiwgMSwgMCwgMSwgJmZpcnN0YmxvY2ssCisJCQkJCSZmbGlzdCwgTlVMTCwgJmRvbmUpOworCisJCUFTU0VSVCghZmxpc3QueGJmX2NvdW50ICYmICFmbGlzdC54YmZfZmlyc3QpOworCQlpZiAoZXJyb3IpIHsKKwkJCS8qIHNvbWV0aGluZyBzY3Jld2VkLCBqdXN0IGJhaWwgKi8KKwkJCXhmc19mc19jbW5fZXJyKENFX0FMRVJULCBpcC0+aV9tb3VudCwKKwkJCSJwYWdlIGRpc2NhcmQgdW5hYmxlIHRvIHJlbW92ZSBkZWxhbGxvYyBtYXBwaW5nLiIpOworCQkJYnJlYWs7CisJCX0KK25leHRfYnVmZmVyOgorCQlvZmZzZXQgKz0gbGVuOworCisJfSB3aGlsZSAoKGJoID0gYmgtPmJfdGhpc19wYWdlKSAhPSBoZWFkKTsKKworCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CitvdXRfaW52YWxpZGF0ZToKKwl4ZnNfdm1faW52YWxpZGF0ZXBhZ2UocGFnZSwgMCk7CisJcmV0dXJuOworfQorCiAvKgogICogQ2FsbGluZyB0aGlzIHdpdGhvdXQgc3RhcnRpbyBzZXQgbWVhbnMgd2UgYXJlIGJlaW5nIGFza2VkIHRvIG1ha2UgYSBkaXJ0eQogICogcGFnZSByZWFkeSBmb3IgZnJlZWluZyBpdCdzIGJ1ZmZlcnMuICBXaGVuIGNhbGxlZCB3aXRoIHN0YXJ0aW8gc2V0IHRoZW4KQEAgLTExMjUsNyArMTI1Nyw3IEBACiAJICovCiAJaWYgKGVyciAhPSAtRUFHQUlOKSB7CiAJCWlmICghdW5tYXBwZWQpCi0JCQlibG9ja19pbnZhbGlkYXRlcGFnZShwYWdlLCAwKTsKKwkJCXhmc19hb3BzX2Rpc2NhcmRfcGFnZShwYWdlKTsKIAkJQ2xlYXJQYWdlVXB0b2RhdGUocGFnZSk7CiAJfQogCXJldHVybiBlcnI7CkBAIC0xNTM1LDE1ICsxNjY3LDYgQEAKIAlyZXR1cm4gbXBhZ2VfcmVhZHBhZ2VzKG1hcHBpbmcsIHBhZ2VzLCBucl9wYWdlcywgeGZzX2dldF9ibG9ja3MpOwogfQogCi1TVEFUSUMgdm9pZAoteGZzX3ZtX2ludmFsaWRhdGVwYWdlKAotCXN0cnVjdCBwYWdlCQkqcGFnZSwKLQl1bnNpZ25lZCBsb25nCQlvZmZzZXQpCi17Ci0JdHJhY2VfeGZzX2ludmFsaWRhdGVwYWdlKHBhZ2UtPm1hcHBpbmctPmhvc3QsIHBhZ2UsIG9mZnNldCk7Ci0JYmxvY2tfaW52YWxpZGF0ZXBhZ2UocGFnZSwgb2Zmc2V0KTsKLX0KLQogY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB4ZnNfYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zID0gewogCS5yZWFkcGFnZQkJPSB4ZnNfdm1fcmVhZHBhZ2UsCiAJLnJlYWRwYWdlcwkJPSB4ZnNfdm1fcmVhZHBhZ2VzLApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZXhwb3J0LmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19leHBvcnQuYwppbmRleCA4N2I4Y2JkLi44NDZiNzVhIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19leHBvcnQuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19leHBvcnQuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgInhmc192bm9kZW9wcy5oIgogI2luY2x1ZGUgInhmc19ibWFwX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2lub2RlLmgiCisjaW5jbHVkZSAieGZzX2lub2RlX2l0ZW0uaCIKIAogLyoKICAqIE5vdGUgdGhhdCB3ZSBvbmx5IGFjY2VwdCBmaWxlaWRzIHdoaWNoIGFyZSBsb25nIGVub3VnaCByYXRoZXIgdGhhbiBhbGxvdwpAQCAtMjE1LDkgKzIxNiwyOCBAQAogCXJldHVybiBkX29idGFpbl9hbGlhcyhWRlNfSShjaXApKTsKIH0KIAorU1RBVElDIGludAoreGZzX2ZzX25mc19jb21taXRfbWV0YWRhdGEoCisJc3RydWN0IGlub2RlCQkqaW5vZGUpCit7CisJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpbm9kZSk7CisJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0+aV9tb3VudDsKKwlpbnQJCQllcnJvciA9IDA7CisKKwl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOworCWlmICh4ZnNfaXBpbmNvdW50KGlwKSkgeworCQllcnJvciA9IF94ZnNfbG9nX2ZvcmNlX2xzbihtcCwgaXAtPmlfaXRlbXAtPmlsaV9sYXN0X2xzbiwKKwkJCQlYRlNfTE9HX1NZTkMsIE5VTEwpOworCX0KKwl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKIGNvbnN0IHN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyB4ZnNfZXhwb3J0X29wZXJhdGlvbnMgPSB7CiAJLmVuY29kZV9maAkJPSB4ZnNfZnNfZW5jb2RlX2ZoLAogCS5maF90b19kZW50cnkJCT0geGZzX2ZzX2ZoX3RvX2RlbnRyeSwKIAkuZmhfdG9fcGFyZW50CQk9IHhmc19mc19maF90b19wYXJlbnQsCiAJLmdldF9wYXJlbnQJCT0geGZzX2ZzX2dldF9wYXJlbnQsCisJLmNvbW1pdF9tZXRhZGF0YQk9IHhmc19mc19uZnNfY29tbWl0X21ldGFkYXRhLAogfTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYwppbmRleCBlNGNhZWIyLi40MmRkM2JjIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCkBAIC0xNiw2ICsxNiw3IEBACiAgKiBJbmMuLCAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogI2luY2x1ZGUgInhmcy5oIgorI2luY2x1ZGUgInhmc19mcy5oIgogI2luY2x1ZGUgInhmc19iaXQuaCIKICNpbmNsdWRlICJ4ZnNfbG9nLmgiCiAjaW5jbHVkZSAieGZzX2ludW0uaCIKQEAgLTM0LDUyICszNSwyNzkgQEAKICNpbmNsdWRlICJ4ZnNfZGlyMl9zZi5oIgogI2luY2x1ZGUgInhmc19kaW5vZGUuaCIKICNpbmNsdWRlICJ4ZnNfaW5vZGUuaCIKKyNpbmNsdWRlICJ4ZnNfaW5vZGVfaXRlbS5oIgorI2luY2x1ZGUgInhmc19ibWFwLmgiCiAjaW5jbHVkZSAieGZzX2Vycm9yLmgiCiAjaW5jbHVkZSAieGZzX3J3LmgiCiAjaW5jbHVkZSAieGZzX3Zub2Rlb3BzLmgiCiAjaW5jbHVkZSAieGZzX2RhX2J0cmVlLmgiCiAjaW5jbHVkZSAieGZzX2lvY3RsLmgiCisjaW5jbHVkZSAieGZzX3RyYWNlLmgiCiAKICNpbmNsdWRlIDxsaW51eC9kY2FjaGUuaD4KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB4ZnNfZmlsZV92bV9vcHM7CiAKLVNUQVRJQyBzc2l6ZV90Ci14ZnNfZmlsZV9haW9fcmVhZCgKLQlzdHJ1Y3Qga2lvY2IJCSppb2NiLAotCWNvbnN0IHN0cnVjdCBpb3ZlYwkqaW92LAotCXVuc2lnbmVkIGxvbmcJCW5yX3NlZ3MsCi0JbG9mZl90CQkJcG9zKQorLyoKKyAqCXhmc19pb3plcm8KKyAqCisgKgl4ZnNfaW96ZXJvIGNsZWFycyB0aGUgc3BlY2lmaWVkIHJhbmdlIG9mIGJ1ZmZlciBzdXBwbGllZCwKKyAqCWFuZCBtYXJrcyBhbGwgdGhlIGFmZmVjdGVkIGJsb2NrcyBhcyB2YWxpZCBhbmQgbW9kaWZpZWQuICBJZgorICoJYW4gYWZmZWN0ZWQgYmxvY2sgaXMgbm90IGFsbG9jYXRlZCwgaXQgd2lsbCBiZSBhbGxvY2F0ZWQuICBJZgorICoJYW4gYWZmZWN0ZWQgYmxvY2sgaXMgbm90IGNvbXBsZXRlbHkgb3ZlcndyaXR0ZW4sIGFuZCBpcyBub3QKKyAqCXZhbGlkIGJlZm9yZSB0aGUgb3BlcmF0aW9uLCBpdCB3aWxsIGJlIHJlYWQgZnJvbSBkaXNrIGJlZm9yZQorICoJYmVpbmcgcGFydGlhbGx5IHplcm9lZC4KKyAqLworU1RBVElDIGludAoreGZzX2lvemVybygKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCwJLyogaW5vZGUJCQkqLworCWxvZmZfdAkJCXBvcywJLyogb2Zmc2V0IGluIGZpbGUJCSovCisJc2l6ZV90CQkJY291bnQpCS8qIHNpemUgb2YgZGF0YSB0byB6ZXJvCQkqLwogewotCXN0cnVjdCBmaWxlCQkqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7Ci0JaW50CQkJaW9mbGFncyA9IDA7CisJc3RydWN0IHBhZ2UJCSpwYWdlOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlCSptYXBwaW5nOworCWludAkJCXN0YXR1czsKIAotCUJVR19PTihpb2NiLT5raV9wb3MgIT0gcG9zKTsKLQlpZiAodW5saWtlbHkoZmlsZS0+Zl9mbGFncyAmIE9fRElSRUNUKSkKLQkJaW9mbGFncyB8PSBJT19JU0RJUkVDVDsKLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfTk9DTVRJTUUpCi0JCWlvZmxhZ3MgfD0gSU9fSU5WSVM7Ci0JcmV0dXJuIHhmc19yZWFkKFhGU19JKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLCBpb2NiLCBpb3YsCi0JCQkJbnJfc2VncywgJmlvY2ItPmtpX3BvcywgaW9mbGFncyk7CisJbWFwcGluZyA9IFZGU19JKGlwKS0+aV9tYXBwaW5nOworCWRvIHsKKwkJdW5zaWduZWQgb2Zmc2V0LCBieXRlczsKKwkJdm9pZCAqZnNkYXRhOworCisJCW9mZnNldCA9IChwb3MgJiAoUEFHRV9DQUNIRV9TSVpFIC0xKSk7IC8qIFdpdGhpbiBwYWdlICovCisJCWJ5dGVzID0gUEFHRV9DQUNIRV9TSVpFIC0gb2Zmc2V0OworCQlpZiAoYnl0ZXMgPiBjb3VudCkKKwkJCWJ5dGVzID0gY291bnQ7CisKKwkJc3RhdHVzID0gcGFnZWNhY2hlX3dyaXRlX2JlZ2luKE5VTEwsIG1hcHBpbmcsIHBvcywgYnl0ZXMsCisJCQkJCUFPUF9GTEFHX1VOSU5URVJSVVBUSUJMRSwKKwkJCQkJJnBhZ2UsICZmc2RhdGEpOworCQlpZiAoc3RhdHVzKQorCQkJYnJlYWs7CisKKwkJemVyb191c2VyKHBhZ2UsIG9mZnNldCwgYnl0ZXMpOworCisJCXN0YXR1cyA9IHBhZ2VjYWNoZV93cml0ZV9lbmQoTlVMTCwgbWFwcGluZywgcG9zLCBieXRlcywgYnl0ZXMsCisJCQkJCXBhZ2UsIGZzZGF0YSk7CisJCVdBUk5fT04oc3RhdHVzIDw9IDApOyAvKiBjYW4ndCByZXR1cm4gbGVzcyB0aGFuIHplcm8hICovCisJCXBvcyArPSBieXRlczsKKwkJY291bnQgLT0gYnl0ZXM7CisJCXN0YXR1cyA9IDA7CisJfSB3aGlsZSAoY291bnQpOworCisJcmV0dXJuICgtc3RhdHVzKTsKK30KKworU1RBVElDIGludAoreGZzX2ZpbGVfZnN5bmMoCisJc3RydWN0IGZpbGUJCSpmaWxlLAorCXN0cnVjdCBkZW50cnkJCSpkZW50cnksCisJaW50CQkJZGF0YXN5bmMpCit7CisJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShkZW50cnktPmRfaW5vZGUpOworCXN0cnVjdCB4ZnNfdHJhbnMJKnRwOworCWludAkJCWVycm9yID0gMDsKKwlpbnQJCQlsb2dfZmx1c2hlZCA9IDA7CisKKwl4ZnNfaXRyYWNlX2VudHJ5KGlwKTsKKworCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKGlwLT5pX21vdW50KSkKKwkJcmV0dXJuIC1YRlNfRVJST1IoRUlPKTsKKworCXhmc19pZmxhZ3NfY2xlYXIoaXAsIFhGU19JVFJVTkNBVEVEKTsKKworCS8qCisJICogV2UgYWx3YXlzIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHJlcXVpcmVkIGlub2RlIHN0YXRlIGlzIHNhZmUgb24KKwkgKiBkaXNrLiAgVGhlIGlub2RlIG1pZ2h0IGJlIGNsZWFuIGJ1dCB3ZSBzdGlsbCBtaWdodCBuZWVkIHRvIGZvcmNlIHRoZQorCSAqIGxvZyBiZWNhdXNlIG9mIGNvbW1pdHRlZCB0cmFuc2FjdGlvbnMgdGhhdCBoYXZlbid0IGhpdCB0aGUgZGlzayB5ZXQuCisJICogTGlrZXdpc2UsIHRoZXJlIGNvdWxkIGJlIHVuZmx1c2hlZCBub24tdHJhbnNhY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZQorCSAqIGlub2RlIGNvcmUgdGhhdCBoYXZlIHRvIGdvIHRvIGRpc2sgYW5kIHRoaXMgcmVxdWlyZXMgdXMgdG8gaXNzdWUKKwkgKiBhIHN5bmNocm9ub3VzIHRyYW5zYWN0aW9uIHRvIGNhcHR1cmUgdGhlc2UgY2hhbmdlcyBjb3JyZWN0bHkuCisJICoKKwkgKiBUaGlzIGNvZGUgcmVsaWVzIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgaWYgdGhlIGlfdXBkYXRlX2NvcmUgZmllbGQKKwkgKiBvZiB0aGUgaW5vZGUgaXMgY2xlYXIgYW5kIHRoZSBpbm9kZSBpcyB1bnBpbm5lZCB0aGVuIGl0IGlzIGNsZWFuCisJICogYW5kIG5vIGFjdGlvbiBpcyByZXF1aXJlZC4KKwkgKi8KKwl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOworCisJLyoKKwkgKiBGaXJzdCBjaGVjayBpZiB0aGUgVkZTIGlub2RlIGlzIG1hcmtlZCBkaXJ0eS4gIEFsbCB0aGUgZGlydHlpbmcKKwkgKiBvZiBub24tdHJhbnNhY3Rpb25hbCB1cGRhdGVzIG5vIGdvZXMgdGhyb3VnaCBtYXJrX2lub2RlX2RpcnR5KiwKKwkgKiB3aGljaCBhbGxvd3MgdXMgdG8gZGlzdGluZ3Vpc2ggYmV0ZWVlbiBwdXJlIHRpbWVzdGFtcCB1cGRhdGVzCisJICogYW5kIGlfc2l6ZSB1cGRhdGVzIHdoaWNoIG5lZWQgdG8gYmUgY2F1Z2h0IGZvciBmZGF0YXN5bmMuCisJICogQWZ0ZXIgdGhhdCBhbHNvIHRoZWNrIGZvciB0aGUgZGlydHkgc3RhdGUgaW4gdGhlIFhGUyBpbm9kZSwgd2hpY2gKKwkgKiBtaWdodCBnZXRzIGNsZWFyZWQgd2hlbiB0aGUgaW5vZGUgZ2V0cyB3cml0dGVuIG91dCB2aWEgdGhlIEFJTAorCSAqIG9yIHhmc19pZmx1c2hfY2x1c3Rlci4KKwkgKi8KKwlpZiAoKChkZW50cnktPmRfaW5vZGUtPmlfc3RhdGUgJiBJX0RJUlRZX0RBVEFTWU5DKSB8fAorCSAgICAoKGRlbnRyeS0+ZF9pbm9kZS0+aV9zdGF0ZSAmIElfRElSVFlfU1lOQykgJiYgIWRhdGFzeW5jKSkgJiYKKwkgICAgaXAtPmlfdXBkYXRlX2NvcmUpIHsKKwkJLyoKKwkJICogS2ljayBvZmYgYSB0cmFuc2FjdGlvbiB0byBsb2cgdGhlIGlub2RlIGNvcmUgdG8gZ2V0IHRoZQorCQkgKiB1cGRhdGVzLiAgVGhlIHN5bmMgdHJhbnNhY3Rpb24gd2lsbCBhbHNvIGZvcmNlIHRoZSBsb2cuCisJCSAqLworCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CisJCXRwID0geGZzX3RyYW5zX2FsbG9jKGlwLT5pX21vdW50LCBYRlNfVFJBTlNfRlNZTkNfVFMpOworCQllcnJvciA9IHhmc190cmFuc19yZXNlcnZlKHRwLCAwLAorCQkJCVhGU19GU1lOQ19UU19MT0dfUkVTKGlwLT5pX21vdW50KSwgMCwgMCwgMCk7CisJCWlmIChlcnJvcikgeworCQkJeGZzX3RyYW5zX2NhbmNlbCh0cCwgMCk7CisJCQlyZXR1cm4gLWVycm9yOworCQl9CisJCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCisJCS8qCisJCSAqIE5vdGUgLSBpdCdzIHBvc3NpYmxlIHRoYXQgd2UgbWlnaHQgaGF2ZSBwdXNoZWQgb3Vyc2VsdmVzIG91dAorCQkgKiBvZiB0aGUgd2F5IGR1cmluZyB0cmFuc19yZXNlcnZlIHdoaWNoIHdvdWxkIGZsdXNoIHRoZSBpbm9kZS4KKwkJICogQnV0IHRoZXJlJ3Mgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIGlub2RlIGJ1ZmZlciBoYXMgYWN0dWFsbHkKKwkJICogZ29uZSBvdXQgeWV0IChpdCdzIGRlbHdyaSkuCVBsdXMgdGhlIGJ1ZmZlciBjb3VsZCBiZSBwaW5uZWQKKwkJICogYW55d2F5IGlmIGl0J3MgcGFydCBvZiBhbiBpbm9kZSBpbiBhbm90aGVyIHJlY2VudAorCQkgKiB0cmFuc2FjdGlvbi4JIFNvIHdlIHBsYXkgaXQgc2FmZSBhbmQgZmlyZSBvZmYgdGhlCisJCSAqIHRyYW5zYWN0aW9uIGFueXdheS4KKwkJICovCisJCXhmc190cmFuc19pam9pbih0cCwgaXAsIFhGU19JTE9DS19FWENMKTsKKwkJeGZzX3RyYW5zX2lob2xkKHRwLCBpcCk7CisJCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBYRlNfSUxPR19DT1JFKTsKKwkJeGZzX3RyYW5zX3NldF9zeW5jKHRwKTsKKwkJZXJyb3IgPSBfeGZzX3RyYW5zX2NvbW1pdCh0cCwgMCwgJmxvZ19mbHVzaGVkKTsKKworCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFRpbWVzdGFtcHMvc2l6ZSBoYXZlbid0IGNoYW5nZWQgc2luY2UgbGFzdCBpbm9kZSBmbHVzaCBvcgorCQkgKiBpbm9kZSB0cmFuc2FjdGlvbiBjb21taXQuICBUaGF0IG1lYW5zIGVpdGhlciBub3RoaW5nIGdvdAorCQkgKiB3cml0dGVuIG9yIGEgdHJhbnNhY3Rpb24gY29tbWl0dGVkIHdoaWNoIGNhdWdodCB0aGUgdXBkYXRlcy4KKwkJICogSWYgdGhlIGxhdHRlciBoYXBwZW5lZCBhbmQgdGhlIHRyYW5zYWN0aW9uIGhhc24ndCBoaXQgdGhlCisJCSAqIGRpc2sgeWV0LCB0aGUgaW5vZGUgd2lsbCBiZSBzdGlsbCBiZSBwaW5uZWQuICBJZiBpdCBpcywKKwkJICogZm9yY2UgdGhlIGxvZy4KKwkJICovCisJCWlmICh4ZnNfaXBpbmNvdW50KGlwKSkgeworCQkJZXJyb3IgPSBfeGZzX2xvZ19mb3JjZV9sc24oaXAtPmlfbW91bnQsCisJCQkJCWlwLT5pX2l0ZW1wLT5pbGlfbGFzdF9sc24sCisJCQkJCVhGU19MT0dfU1lOQywgJmxvZ19mbHVzaGVkKTsKKwkJfQorCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CisJfQorCisJaWYgKGlwLT5pX21vdW50LT5tX2ZsYWdzICYgWEZTX01PVU5UX0JBUlJJRVIpIHsKKwkJLyoKKwkJICogSWYgdGhlIGxvZyB3cml0ZSBkaWRuJ3QgaXNzdWUgYW4gb3JkZXJlZCB0YWcgd2UgbmVlZAorCQkgKiB0byBmbHVzaCB0aGUgZGlzayBjYWNoZSBmb3IgdGhlIGRhdGEgZGV2aWNlIG5vdy4KKwkJICovCisJCWlmICghbG9nX2ZsdXNoZWQpCisJCQl4ZnNfYmxrZGV2X2lzc3VlX2ZsdXNoKGlwLT5pX21vdW50LT5tX2RkZXZfdGFyZ3ApOworCisJCS8qCisJCSAqIElmIHRoaXMgaW5vZGUgaXMgb24gdGhlIFJUIGRldiB3ZSBuZWVkIHRvIGZsdXNoIHRoYXQKKwkJICogY2FjaGUgYXMgd2VsbC4KKwkJICovCisJCWlmIChYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApKQorCQkJeGZzX2Jsa2Rldl9pc3N1ZV9mbHVzaChpcC0+aV9tb3VudC0+bV9ydGRldl90YXJncCk7CisJfQorCisJcmV0dXJuIC1lcnJvcjsKIH0KIAogU1RBVElDIHNzaXplX3QKLXhmc19maWxlX2Fpb193cml0ZSgKK3hmc19maWxlX2Fpb19yZWFkKAogCXN0cnVjdCBraW9jYgkJKmlvY2IsCi0JY29uc3Qgc3RydWN0IGlvdmVjCSppb3YsCisJY29uc3Qgc3RydWN0IGlvdmVjCSppb3ZwLAogCXVuc2lnbmVkIGxvbmcJCW5yX3NlZ3MsCiAJbG9mZl90CQkJcG9zKQogewogCXN0cnVjdCBmaWxlCQkqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7CisJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7CisJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpbm9kZSk7CisJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0+aV9tb3VudDsKKwlzaXplX3QJCQlzaXplID0gMDsKKwlzc2l6ZV90CQkJcmV0ID0gMDsKIAlpbnQJCQlpb2ZsYWdzID0gMDsKKwl4ZnNfZnNpemVfdAkJbjsKKwl1bnNpZ25lZCBsb25nCQlzZWc7CisKKwlYRlNfU1RBVFNfSU5DKHhzX3JlYWRfY2FsbHMpOwogCiAJQlVHX09OKGlvY2ItPmtpX3BvcyAhPSBwb3MpOworCiAJaWYgKHVubGlrZWx5KGZpbGUtPmZfZmxhZ3MgJiBPX0RJUkVDVCkpCiAJCWlvZmxhZ3MgfD0gSU9fSVNESVJFQ1Q7CiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX05PQ01USU1FKQogCQlpb2ZsYWdzIHw9IElPX0lOVklTOwotCXJldHVybiB4ZnNfd3JpdGUoWEZTX0koZmlsZS0+Zl9tYXBwaW5nLT5ob3N0KSwgaW9jYiwgaW92LCBucl9zZWdzLAotCQkJCSZpb2NiLT5raV9wb3MsIGlvZmxhZ3MpOworCisJLyogU1RBUlQgY29weSAmIHdhc3RlIGZyb20gZmlsZW1hcC5jICovCisJZm9yIChzZWcgPSAwOyBzZWcgPCBucl9zZWdzOyBzZWcrKykgeworCQljb25zdCBzdHJ1Y3QgaW92ZWMgKml2ID0gJmlvdnBbc2VnXTsKKworCQkvKgorCQkgKiBJZiBhbnkgc2VnbWVudCBoYXMgYSBuZWdhdGl2ZSBsZW5ndGgsIG9yIHRoZSBjdW11bGF0aXZlCisJCSAqIGxlbmd0aCBldmVyIHdyYXBzIG5lZ2F0aXZlIHRoZW4gcmV0dXJuIC1FSU5WQUwuCisJCSAqLworCQlzaXplICs9IGl2LT5pb3ZfbGVuOworCQlpZiAodW5saWtlbHkoKHNzaXplX3QpKHNpemV8aXYtPmlvdl9sZW4pIDwgMCkpCisJCQlyZXR1cm4gWEZTX0VSUk9SKC1FSU5WQUwpOworCX0KKwkvKiBFTkQgY29weSAmIHdhc3RlIGZyb20gZmlsZW1hcC5jICovCisKKwlpZiAodW5saWtlbHkoaW9mbGFncyAmIElPX0lTRElSRUNUKSkgeworCQl4ZnNfYnVmdGFyZ190CSp0YXJnZXQgPQorCQkJWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGlwKSA/CisJCQkJbXAtPm1fcnRkZXZfdGFyZ3AgOiBtcC0+bV9kZGV2X3RhcmdwOworCQlpZiAoKGlvY2ItPmtpX3BvcyAmIHRhcmdldC0+YnRfc21hc2spIHx8CisJCSAgICAoc2l6ZSAmIHRhcmdldC0+YnRfc21hc2spKSB7CisJCQlpZiAoaW9jYi0+a2lfcG9zID09IGlwLT5pX3NpemUpCisJCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gLVhGU19FUlJPUihFSU5WQUwpOworCQl9CisJfQorCisJbiA9IFhGU19NQVhJT0ZGU0VUKG1wKSAtIGlvY2ItPmtpX3BvczsKKwlpZiAobiA8PSAwIHx8IHNpemUgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAobiA8IHNpemUpCisJCXNpemUgPSBuOworCisJaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQorCQlyZXR1cm4gLUVJTzsKKworCWlmICh1bmxpa2VseShpb2ZsYWdzICYgSU9fSVNESVJFQ1QpKQorCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJeGZzX2lsb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7CisKKwlpZiAoRE1fRVZFTlRfRU5BQkxFRChpcCwgRE1fRVZFTlRfUkVBRCkgJiYgIShpb2ZsYWdzICYgSU9fSU5WSVMpKSB7CisJCWludCBkbWZsYWdzID0gRklMUF9ERUxBWV9GTEFHKGZpbGUpIHwgRE1fU0VNX0ZMQUdfUkQoaW9mbGFncyk7CisJCWludCBpb2xvY2sgPSBYRlNfSU9MT0NLX1NIQVJFRDsKKworCQlyZXQgPSAtWEZTX1NFTkRfREFUQShtcCwgRE1fRVZFTlRfUkVBRCwgaXAsIGlvY2ItPmtpX3Bvcywgc2l6ZSwKKwkJCQkJZG1mbGFncywgJmlvbG9jayk7CisJCWlmIChyZXQpIHsKKwkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7CisJCQlpZiAodW5saWtlbHkoaW9mbGFncyAmIElPX0lTRElSRUNUKSkKKwkJCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlpZiAodW5saWtlbHkoaW9mbGFncyAmIElPX0lTRElSRUNUKSkgeworCQlpZiAoaW5vZGUtPmlfbWFwcGluZy0+bnJwYWdlcykgeworCQkJcmV0ID0gLXhmc19mbHVzaGludmFsX3BhZ2VzKGlwLAorCQkJCQkoaW9jYi0+a2lfcG9zICYgUEFHRV9DQUNIRV9NQVNLKSwKKwkJCQkJLTEsIEZJX1JFTUFQRl9MT0NLRUQpOworCQl9CisJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCQlpZiAocmV0KSB7CisJCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXRyYWNlX3hmc19maWxlX3JlYWQoaXAsIHNpemUsIGlvY2ItPmtpX3BvcywgaW9mbGFncyk7CisKKwlyZXQgPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQoaW9jYiwgaW92cCwgbnJfc2VncywgaW9jYi0+a2lfcG9zKTsKKwlpZiAocmV0ID4gMCkKKwkJWEZTX1NUQVRTX0FERCh4c19yZWFkX2J5dGVzLCByZXQpOworCisJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKKwlyZXR1cm4gcmV0OwogfQogCiBTVEFUSUMgc3NpemVfdApAQCAtODcsMTYgKzMxNSw0NCBAQAogCXN0cnVjdCBmaWxlCQkqaW5maWxwLAogCWxvZmZfdAkJCSpwcG9zLAogCXN0cnVjdCBwaXBlX2lub2RlX2luZm8JKnBpcGUsCi0Jc2l6ZV90CQkJbGVuLAorCXNpemVfdAkJCWNvdW50LAogCXVuc2lnbmVkIGludAkJZmxhZ3MpCiB7CisJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpbmZpbHAtPmZfbWFwcGluZy0+aG9zdCk7CisJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0+aV9tb3VudDsKIAlpbnQJCQlpb2ZsYWdzID0gMDsKKwlzc2l6ZV90CQkJcmV0OworCisJWEZTX1NUQVRTX0lOQyh4c19yZWFkX2NhbGxzKTsKIAogCWlmIChpbmZpbHAtPmZfbW9kZSAmIEZNT0RFX05PQ01USU1FKQogCQlpb2ZsYWdzIHw9IElPX0lOVklTOwogCi0JcmV0dXJuIHhmc19zcGxpY2VfcmVhZChYRlNfSShpbmZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLAotCQkJCSAgIGluZmlscCwgcHBvcywgcGlwZSwgbGVuLCBmbGFncywgaW9mbGFncyk7CisJaWYgKFhGU19GT1JDRURfU0hVVERPV04oaXAtPmlfbW91bnQpKQorCQlyZXR1cm4gLUVJTzsKKworCXhmc19pbG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpOworCisJaWYgKERNX0VWRU5UX0VOQUJMRUQoaXAsIERNX0VWRU5UX1JFQUQpICYmICEoaW9mbGFncyAmIElPX0lOVklTKSkgeworCQlpbnQgaW9sb2NrID0gWEZTX0lPTE9DS19TSEFSRUQ7CisJCWludCBlcnJvcjsKKworCQllcnJvciA9IFhGU19TRU5EX0RBVEEobXAsIERNX0VWRU5UX1JFQUQsIGlwLCAqcHBvcywgY291bnQsCisJCQkJCUZJTFBfREVMQVlfRkxBRyhpbmZpbHApLCAmaW9sb2NrKTsKKwkJaWYgKGVycm9yKSB7CisJCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpOworCQkJcmV0dXJuIC1lcnJvcjsKKwkJfQorCX0KKworCXRyYWNlX3hmc19maWxlX3NwbGljZV9yZWFkKGlwLCBjb3VudCwgKnBwb3MsIGlvZmxhZ3MpOworCisJcmV0ID0gZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkKGluZmlscCwgcHBvcywgcGlwZSwgY291bnQsIGZsYWdzKTsKKwlpZiAocmV0ID4gMCkKKwkJWEZTX1NUQVRTX0FERCh4c19yZWFkX2J5dGVzLCByZXQpOworCisJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKKwlyZXR1cm4gcmV0OwogfQogCiBTVEFUSUMgc3NpemVfdApAQCAtMTA0LDE2ICszNjAsNTM4IEBACiAJc3RydWN0IHBpcGVfaW5vZGVfaW5mbwkqcGlwZSwKIAlzdHJ1Y3QgZmlsZQkJKm91dGZpbHAsCiAJbG9mZl90CQkJKnBwb3MsCi0Jc2l6ZV90CQkJbGVuLAorCXNpemVfdAkJCWNvdW50LAogCXVuc2lnbmVkIGludAkJZmxhZ3MpCiB7CisJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBvdXRmaWxwLT5mX21hcHBpbmctPmhvc3Q7CisJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpbm9kZSk7CisJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0+aV9tb3VudDsKKwl4ZnNfZnNpemVfdAkJaXNpemUsIG5ld19zaXplOwogCWludAkJCWlvZmxhZ3MgPSAwOworCXNzaXplX3QJCQlyZXQ7CisKKwlYRlNfU1RBVFNfSU5DKHhzX3dyaXRlX2NhbGxzKTsKIAogCWlmIChvdXRmaWxwLT5mX21vZGUgJiBGTU9ERV9OT0NNVElNRSkKIAkJaW9mbGFncyB8PSBJT19JTlZJUzsKIAotCXJldHVybiB4ZnNfc3BsaWNlX3dyaXRlKFhGU19JKG91dGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLAotCQkJCSAgICBwaXBlLCBvdXRmaWxwLCBwcG9zLCBsZW4sIGZsYWdzLCBpb2ZsYWdzKTsKKwlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihpcC0+aV9tb3VudCkpCisJCXJldHVybiAtRUlPOworCisJeGZzX2lsb2NrKGlwLCBYRlNfSU9MT0NLX0VYQ0wpOworCisJaWYgKERNX0VWRU5UX0VOQUJMRUQoaXAsIERNX0VWRU5UX1dSSVRFKSAmJiAhKGlvZmxhZ3MgJiBJT19JTlZJUykpIHsKKwkJaW50IGlvbG9jayA9IFhGU19JT0xPQ0tfRVhDTDsKKwkJaW50IGVycm9yOworCisJCWVycm9yID0gWEZTX1NFTkRfREFUQShtcCwgRE1fRVZFTlRfV1JJVEUsIGlwLCAqcHBvcywgY291bnQsCisJCQkJCUZJTFBfREVMQVlfRkxBRyhvdXRmaWxwKSwgJmlvbG9jayk7CisJCWlmIChlcnJvcikgeworCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfRVhDTCk7CisJCQlyZXR1cm4gLWVycm9yOworCQl9CisJfQorCisJbmV3X3NpemUgPSAqcHBvcyArIGNvdW50OworCisJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJaWYgKG5ld19zaXplID4gaXAtPmlfc2l6ZSkKKwkJaXAtPmlfbmV3X3NpemUgPSBuZXdfc2l6ZTsKKwl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCisJdHJhY2VfeGZzX2ZpbGVfc3BsaWNlX3dyaXRlKGlwLCBjb3VudCwgKnBwb3MsIGlvZmxhZ3MpOworCisJcmV0ID0gZ2VuZXJpY19maWxlX3NwbGljZV93cml0ZShwaXBlLCBvdXRmaWxwLCBwcG9zLCBjb3VudCwgZmxhZ3MpOworCWlmIChyZXQgPiAwKQorCQlYRlNfU1RBVFNfQUREKHhzX3dyaXRlX2J5dGVzLCByZXQpOworCisJaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CisJaWYgKHVubGlrZWx5KHJldCA8IDAgJiYgcmV0ICE9IC1FRkFVTFQgJiYgKnBwb3MgPiBpc2l6ZSkpCisJCSpwcG9zID0gaXNpemU7CisKKwlpZiAoKnBwb3MgPiBpcC0+aV9zaXplKSB7CisJCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCQlpZiAoKnBwb3MgPiBpcC0+aV9zaXplKQorCQkJaXAtPmlfc2l6ZSA9ICpwcG9zOworCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCX0KKworCWlmIChpcC0+aV9uZXdfc2l6ZSkgeworCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKKwkJaXAtPmlfbmV3X3NpemUgPSAwOworCQlpZiAoaXAtPmlfZC5kaV9zaXplID4gaXAtPmlfc2l6ZSkKKwkJCWlwLT5pX2QuZGlfc2l6ZSA9IGlwLT5pX3NpemU7CisJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJfQorCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX0VYQ0wpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIGhhbmRsZSB6ZXJvaW5nIGFueSBzcGFjZSBpbiB0aGUgbGFzdAorICogYmxvY2sgb2YgdGhlIGZpbGUgdGhhdCBpcyBiZXlvbmQgdGhlIEVPRi4gIFdlIGRvIHRoaXMgc2luY2UgdGhlCisgKiBzaXplIGlzIGJlaW5nIGluY3JlYXNlZCB3aXRob3V0IHdyaXRpbmcgYW55dGhpbmcgdG8gdGhhdCBibG9jaworICogYW5kIHdlIGRvbid0IHdhbnQgYW55b25lIHRvIHJlYWQgdGhlIGdhcmJhZ2Ugb24gdGhlIGRpc2suCisgKi8KK1NUQVRJQyBpbnQJCQkJLyogZXJyb3IgKHBvc2l0aXZlKSAqLworeGZzX3plcm9fbGFzdF9ibG9jaygKKwl4ZnNfaW5vZGVfdAkqaXAsCisJeGZzX2ZzaXplX3QJb2Zmc2V0LAorCXhmc19mc2l6ZV90CWlzaXplKQoreworCXhmc19maWxlb2ZmX3QJbGFzdF9mc2I7CisJeGZzX21vdW50X3QJKm1wID0gaXAtPmlfbW91bnQ7CisJaW50CQluaW1hcHM7CisJaW50CQl6ZXJvX29mZnNldDsKKwlpbnQJCXplcm9fbGVuOworCWludAkJZXJyb3IgPSAwOworCXhmc19ibWJ0X2lyZWNfdAlpbWFwOworCisJQVNTRVJUKHhmc19pc2lsb2NrZWQoaXAsIFhGU19JTE9DS19FWENMKSk7CisKKwl6ZXJvX29mZnNldCA9IFhGU19CX0ZTQl9PRkZTRVQobXAsIGlzaXplKTsKKwlpZiAoemVyb19vZmZzZXQgPT0gMCkgeworCQkvKgorCQkgKiBUaGVyZSBhcmUgbm8gZXh0cmEgYnl0ZXMgaW4gdGhlIGxhc3QgYmxvY2sgb24gZGlzayB0bworCQkgKiB6ZXJvLCBzbyByZXR1cm4uCisJCSAqLworCQlyZXR1cm4gMDsKKwl9CisKKwlsYXN0X2ZzYiA9IFhGU19CX1RPX0ZTQlQobXAsIGlzaXplKTsKKwluaW1hcHMgPSAxOworCWVycm9yID0geGZzX2JtYXBpKE5VTEwsIGlwLCBsYXN0X2ZzYiwgMSwgMCwgTlVMTCwgMCwgJmltYXAsCisJCQkgICZuaW1hcHMsIE5VTEwsIE5VTEwpOworCWlmIChlcnJvcikgeworCQlyZXR1cm4gZXJyb3I7CisJfQorCUFTU0VSVChuaW1hcHMgPiAwKTsKKwkvKgorCSAqIElmIHRoZSBibG9jayB1bmRlcmx5aW5nIGlzaXplIGlzIGp1c3QgYSBob2xlLCB0aGVuIHRoZXJlCisJICogaXMgbm90aGluZyB0byB6ZXJvLgorCSAqLworCWlmIChpbWFwLmJyX3N0YXJ0YmxvY2sgPT0gSE9MRVNUQVJUQkxPQ0spIHsKKwkJcmV0dXJuIDA7CisJfQorCS8qCisJICogWmVybyB0aGUgcGFydCBvZiB0aGUgbGFzdCBibG9jayBiZXlvbmQgdGhlIEVPRiwgYW5kIHdyaXRlIGl0CisJICogb3V0IHN5bmMuICBXZSBuZWVkIHRvIGRyb3AgdGhlIGlsb2NrIHdoaWxlIHdlIGRvIHRoaXMgc28gd2UKKwkgKiBkb24ndCBkZWFkbG9jayB3aGVuIHRoZSBidWZmZXIgY2FjaGUgY2FsbHMgYmFjayB0byB1cy4KKwkgKi8KKwl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCisJemVyb19sZW4gPSBtcC0+bV9zYi5zYl9ibG9ja3NpemUgLSB6ZXJvX29mZnNldDsKKwlpZiAoaXNpemUgKyB6ZXJvX2xlbiA+IG9mZnNldCkKKwkJemVyb19sZW4gPSBvZmZzZXQgLSBpc2l6ZTsKKwllcnJvciA9IHhmc19pb3plcm8oaXAsIGlzaXplLCB6ZXJvX2xlbik7CisKKwl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKKwlBU1NFUlQoZXJyb3IgPj0gMCk7CisJcmV0dXJuIGVycm9yOworfQorCisvKgorICogWmVybyBhbnkgb24gZGlzayBzcGFjZSBiZXR3ZWVuIHRoZSBjdXJyZW50IEVPRiBhbmQgdGhlIG5ldywKKyAqIGxhcmdlciBFT0YuICBUaGlzIGhhbmRsZXMgdGhlIG5vcm1hbCBjYXNlIG9mIHplcm9pbmcgdGhlIHJlbWFpbmRlcgorICogb2YgdGhlIGxhc3QgYmxvY2sgaW4gdGhlIGZpbGUgYW5kIHRoZSB1bnVzdWFsIGNhc2Ugb2YgemVyb2luZyBibG9ja3MKKyAqIG91dCBiZXlvbmQgdGhlIHNpemUgb2YgdGhlIGZpbGUuICBUaGlzIHNlY29uZCBjYXNlIG9ubHkgaGFwcGVucworICogd2l0aCBmaXhlZCBzaXplIGV4dGVudHMgYW5kIHdoZW4gdGhlIHN5c3RlbSBjcmFzaGVzIGJlZm9yZSB0aGUgaW5vZGUKKyAqIHNpemUgd2FzIHVwZGF0ZWQgYnV0IGFmdGVyIGJsb2NrcyB3ZXJlIGFsbG9jYXRlZC4gIElmIGZpbGwgaXMgc2V0LAorICogdGhlbiBhbnkgaG9sZXMgaW4gdGhlIHJhbmdlIGFyZSBmaWxsZWQgYW5kIHplcm9lZC4gIElmIG5vdCwgdGhlIGhvbGVzCisgKiBhcmUgbGVmdCBhbG9uZSBhcyBob2xlcy4KKyAqLworCitpbnQJCQkJCS8qIGVycm9yIChwb3NpdGl2ZSkgKi8KK3hmc196ZXJvX2VvZigKKwl4ZnNfaW5vZGVfdAkqaXAsCisJeGZzX29mZl90CW9mZnNldCwJCS8qIHN0YXJ0aW5nIEkvTyBvZmZzZXQgKi8KKwl4ZnNfZnNpemVfdAlpc2l6ZSkJCS8qIGN1cnJlbnQgaW5vZGUgc2l6ZSAqLworeworCXhmc19tb3VudF90CSptcCA9IGlwLT5pX21vdW50OworCXhmc19maWxlb2ZmX3QJc3RhcnRfemVyb19mc2I7CisJeGZzX2ZpbGVvZmZfdAllbmRfemVyb19mc2I7CisJeGZzX2ZpbGVvZmZfdAl6ZXJvX2NvdW50X2ZzYjsKKwl4ZnNfZmlsZW9mZl90CWxhc3RfZnNiOworCXhmc19maWxlb2ZmX3QJemVyb19vZmY7CisJeGZzX2ZzaXplX3QJemVyb19sZW47CisJaW50CQluaW1hcHM7CisJaW50CQllcnJvciA9IDA7CisJeGZzX2JtYnRfaXJlY190CWltYXA7CisKKwlBU1NFUlQoeGZzX2lzaWxvY2tlZChpcCwgWEZTX0lMT0NLX0VYQ0x8WEZTX0lPTE9DS19FWENMKSk7CisJQVNTRVJUKG9mZnNldCA+IGlzaXplKTsKKworCS8qCisJICogRmlyc3QgaGFuZGxlIHplcm9pbmcgdGhlIGJsb2NrIG9uIHdoaWNoIGlzaXplIHJlc2lkZXMuCisJICogV2Ugb25seSB6ZXJvIGEgcGFydCBvZiB0aGF0IGJsb2NrIHNvIGl0IGlzIGhhbmRsZWQgc3BlY2lhbGx5LgorCSAqLworCWVycm9yID0geGZzX3plcm9fbGFzdF9ibG9jayhpcCwgb2Zmc2V0LCBpc2l6ZSk7CisJaWYgKGVycm9yKSB7CisJCUFTU0VSVCh4ZnNfaXNpbG9ja2VkKGlwLCBYRlNfSUxPQ0tfRVhDTHxYRlNfSU9MT0NLX0VYQ0wpKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSByYW5nZSBiZXR3ZWVuIHRoZSBuZXcgc2l6ZSBhbmQgdGhlIG9sZAorCSAqIHdoZXJlIGJsb2NrcyBuZWVkaW5nIHRvIGJlIHplcm9lZCBtYXkgZXhpc3QuICBUbyBnZXQgdGhlCisJICogYmxvY2sgd2hlcmUgdGhlIGxhc3QgYnl0ZSBpbiB0aGUgZmlsZSBjdXJyZW50bHkgcmVzaWRlcywKKwkgKiB3ZSBuZWVkIHRvIHN1YnRyYWN0IG9uZSBmcm9tIHRoZSBzaXplIGFuZCB0cnVuY2F0ZSBiYWNrCisJICogdG8gYSBibG9jayBib3VuZGFyeS4gIFdlIHN1YnRyYWN0IDEgaW4gY2FzZSB0aGUgc2l6ZSBpcworCSAqIGV4YWN0bHkgb24gYSBibG9jayBib3VuZGFyeS4KKwkgKi8KKwlsYXN0X2ZzYiA9IGlzaXplID8gWEZTX0JfVE9fRlNCVChtcCwgaXNpemUgLSAxKSA6ICh4ZnNfZmlsZW9mZl90KS0xOworCXN0YXJ0X3plcm9fZnNiID0gWEZTX0JfVE9fRlNCKG1wLCAoeGZzX3Vmc2l6ZV90KWlzaXplKTsKKwllbmRfemVyb19mc2IgPSBYRlNfQl9UT19GU0JUKG1wLCBvZmZzZXQgLSAxKTsKKwlBU1NFUlQoKHhmc19zZmlsb2ZmX3QpbGFzdF9mc2IgPCAoeGZzX3NmaWxvZmZfdClzdGFydF96ZXJvX2ZzYik7CisJaWYgKGxhc3RfZnNiID09IGVuZF96ZXJvX2ZzYikgeworCQkvKgorCQkgKiBUaGUgc2l6ZSB3YXMgb25seSBpbmNyZW1lbnRlZCBvbiBpdHMgbGFzdCBibG9jay4KKwkJICogV2UgdG9vayBjYXJlIG9mIHRoYXQgYWJvdmUsIHNvIGp1c3QgcmV0dXJuLgorCQkgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJQVNTRVJUKHN0YXJ0X3plcm9fZnNiIDw9IGVuZF96ZXJvX2ZzYik7CisJd2hpbGUgKHN0YXJ0X3plcm9fZnNiIDw9IGVuZF96ZXJvX2ZzYikgeworCQluaW1hcHMgPSAxOworCQl6ZXJvX2NvdW50X2ZzYiA9IGVuZF96ZXJvX2ZzYiAtIHN0YXJ0X3plcm9fZnNiICsgMTsKKwkJZXJyb3IgPSB4ZnNfYm1hcGkoTlVMTCwgaXAsIHN0YXJ0X3plcm9fZnNiLCB6ZXJvX2NvdW50X2ZzYiwKKwkJCQkgIDAsIE5VTEwsIDAsICZpbWFwLCAmbmltYXBzLCBOVUxMLCBOVUxMKTsKKwkJaWYgKGVycm9yKSB7CisJCQlBU1NFUlQoeGZzX2lzaWxvY2tlZChpcCwgWEZTX0lMT0NLX0VYQ0x8WEZTX0lPTE9DS19FWENMKSk7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKwkJQVNTRVJUKG5pbWFwcyA+IDApOworCisJCWlmIChpbWFwLmJyX3N0YXRlID09IFhGU19FWFRfVU5XUklUVEVOIHx8CisJCSAgICBpbWFwLmJyX3N0YXJ0YmxvY2sgPT0gSE9MRVNUQVJUQkxPQ0spIHsKKwkJCS8qCisJCQkgKiBUaGlzIGxvb3AgaGFuZGxlcyBpbml0aWFsaXppbmcgcGFnZXMgdGhhdCB3ZXJlCisJCQkgKiBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgYnkgdGhlIGNvZGUgYmVsb3cgdGhpcworCQkJICogbG9vcC4gSXQgYmFzaWNhbGx5IHplcm9lcyB0aGUgcGFydCBvZiB0aGUgcGFnZQorCQkJICogdGhhdCBzaXRzIG9uIGEgaG9sZSBhbmQgc2V0cyB0aGUgcGFnZSBhcyBQX0hPTEUKKwkJCSAqIGFuZCBjYWxscyByZW1hcGYgaWYgaXQgaXMgYSBtYXBwZWQgZmlsZS4KKwkJCSAqLworCQkJc3RhcnRfemVyb19mc2IgPSBpbWFwLmJyX3N0YXJ0b2ZmICsgaW1hcC5icl9ibG9ja2NvdW50OworCQkJQVNTRVJUKHN0YXJ0X3plcm9fZnNiIDw9IChlbmRfemVyb19mc2IgKyAxKSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIFRoZXJlIGFyZSBibG9ja3Mgd2UgbmVlZCB0byB6ZXJvLgorCQkgKiBEcm9wIHRoZSBpbm9kZSBsb2NrIHdoaWxlIHdlJ3JlIGRvaW5nIHRoZSBJL08uCisJCSAqIFdlJ2xsIHN0aWxsIGhhdmUgdGhlIGlvbG9jayB0byBwcm90ZWN0IHVzLgorCQkgKi8KKwkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKKworCQl6ZXJvX29mZiA9IFhGU19GU0JfVE9fQihtcCwgc3RhcnRfemVyb19mc2IpOworCQl6ZXJvX2xlbiA9IFhGU19GU0JfVE9fQihtcCwgaW1hcC5icl9ibG9ja2NvdW50KTsKKworCQlpZiAoKHplcm9fb2ZmICsgemVyb19sZW4pID4gb2Zmc2V0KQorCQkJemVyb19sZW4gPSBvZmZzZXQgLSB6ZXJvX29mZjsKKworCQllcnJvciA9IHhmc19pb3plcm8oaXAsIHplcm9fb2ZmLCB6ZXJvX2xlbik7CisJCWlmIChlcnJvcikgeworCQkJZ290byBvdXRfbG9jazsKKwkJfQorCisJCXN0YXJ0X3plcm9fZnNiID0gaW1hcC5icl9zdGFydG9mZiArIGltYXAuYnJfYmxvY2tjb3VudDsKKwkJQVNTRVJUKHN0YXJ0X3plcm9fZnNiIDw9IChlbmRfemVyb19mc2IgKyAxKSk7CisKKwkJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9sb2NrOgorCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCUFTU0VSVChlcnJvciA+PSAwKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK1NUQVRJQyBzc2l6ZV90Cit4ZnNfZmlsZV9haW9fd3JpdGUoCisJc3RydWN0IGtpb2NiCQkqaW9jYiwKKwljb25zdCBzdHJ1Y3QgaW92ZWMJKmlvdnAsCisJdW5zaWduZWQgbG9uZwkJbnJfc2VncywKKwlsb2ZmX3QJCQlwb3MpCit7CisJc3RydWN0IGZpbGUJCSpmaWxlID0gaW9jYi0+a2lfZmlscDsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZQkqbWFwcGluZyA9IGZpbGUtPmZfbWFwcGluZzsKKwlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IG1hcHBpbmctPmhvc3Q7CisJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpbm9kZSk7CisJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0+aV9tb3VudDsKKwlzc2l6ZV90CQkJcmV0ID0gMCwgZXJyb3IgPSAwOworCWludAkJCWlvZmxhZ3MgPSAwOworCXhmc19mc2l6ZV90CQlpc2l6ZSwgbmV3X3NpemU7CisJaW50CQkJaW9sb2NrOworCWludAkJCWV2ZW50c2VudCA9IDA7CisJc2l6ZV90CQkJb2NvdW50ID0gMCwgY291bnQ7CisJaW50CQkJbmVlZF9pX211dGV4OworCisJWEZTX1NUQVRTX0lOQyh4c193cml0ZV9jYWxscyk7CisKKwlCVUdfT04oaW9jYi0+a2lfcG9zICE9IHBvcyk7CisKKwlpZiAodW5saWtlbHkoZmlsZS0+Zl9mbGFncyAmIE9fRElSRUNUKSkKKwkJaW9mbGFncyB8PSBJT19JU0RJUkVDVDsKKwlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfTk9DTVRJTUUpCisJCWlvZmxhZ3MgfD0gSU9fSU5WSVM7CisKKwllcnJvciA9IGdlbmVyaWNfc2VnbWVudF9jaGVja3MoaW92cCwgJm5yX3NlZ3MsICZvY291bnQsIFZFUklGWV9SRUFEKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWNvdW50ID0gb2NvdW50OworCWlmIChjb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKworCXhmc193YWl0X2Zvcl9mcmVlemUobXAsIFNCX0ZSRUVaRV9XUklURSk7CisKKwlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpCisJCXJldHVybiAtRUlPOworCityZWxvY2s6CisJaWYgKGlvZmxhZ3MgJiBJT19JU0RJUkVDVCkgeworCQlpb2xvY2sgPSBYRlNfSU9MT0NLX1NIQVJFRDsKKwkJbmVlZF9pX211dGV4ID0gMDsKKwl9IGVsc2UgeworCQlpb2xvY2sgPSBYRlNfSU9MT0NLX0VYQ0w7CisJCW5lZWRfaV9tdXRleCA9IDE7CisJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwl9CisKKwl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMfGlvbG9jayk7CisKK3N0YXJ0OgorCWVycm9yID0gLWdlbmVyaWNfd3JpdGVfY2hlY2tzKGZpbGUsICZwb3MsICZjb3VudCwKKwkJCQkJU19JU0JMSyhpbm9kZS0+aV9tb2RlKSk7CisJaWYgKGVycm9yKSB7CisJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTHxpb2xvY2spOworCQlnb3RvIG91dF91bmxvY2tfbXV0ZXg7CisJfQorCisJaWYgKChETV9FVkVOVF9FTkFCTEVEKGlwLCBETV9FVkVOVF9XUklURSkgJiYKKwkgICAgIShpb2ZsYWdzICYgSU9fSU5WSVMpICYmICFldmVudHNlbnQpKSB7CisJCWludAkJZG1mbGFncyA9IEZJTFBfREVMQVlfRkxBRyhmaWxlKTsKKworCQlpZiAobmVlZF9pX211dGV4KQorCQkJZG1mbGFncyB8PSBETV9GTEFHU19JTVVYOworCisJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJCWVycm9yID0gWEZTX1NFTkRfREFUQShpcC0+aV9tb3VudCwgRE1fRVZFTlRfV1JJVEUsIGlwLAorCQkJCSAgICAgIHBvcywgY291bnQsIGRtZmxhZ3MsICZpb2xvY2spOworCQlpZiAoZXJyb3IpIHsKKwkJCWdvdG8gb3V0X3VubG9ja19pbnRlcm5hbDsKKwkJfQorCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKKwkJZXZlbnRzZW50ID0gMTsKKworCQkvKgorCQkgKiBUaGUgaW9sb2NrIHdhcyBkcm9wcGVkIGFuZCByZWFjcXVpcmVkIGluIFhGU19TRU5EX0RBVEEKKwkJICogc28gd2UgaGF2ZSB0byByZWNoZWNrIHRoZSBzaXplIHdoZW4gYXBwZW5kaW5nLgorCQkgKiBXZSB3aWxsIG9ubHkgImdvdG8gc3RhcnQ7IiBvbmNlLCBzaW5jZSBoYXZpbmcgc2VudCB0aGUKKwkJICogZXZlbnQgcHJldmVudHMgYW5vdGhlciBjYWxsIHRvIFhGU19TRU5EX0RBVEEsIHdoaWNoIGlzCisJCSAqIHdoYXQgYWxsb3dzIHRoZSBzaXplIHRvIGNoYW5nZSBpbiB0aGUgZmlyc3QgcGxhY2UuCisJCSAqLworCQlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0FQUEVORCkgJiYgcG9zICE9IGlwLT5pX3NpemUpCisJCQlnb3RvIHN0YXJ0OworCX0KKworCWlmIChpb2ZsYWdzICYgSU9fSVNESVJFQ1QpIHsKKwkJeGZzX2J1ZnRhcmdfdAkqdGFyZ2V0ID0KKwkJCVhGU19JU19SRUFMVElNRV9JTk9ERShpcCkgPworCQkJCW1wLT5tX3J0ZGV2X3RhcmdwIDogbXAtPm1fZGRldl90YXJncDsKKworCQlpZiAoKHBvcyAmIHRhcmdldC0+YnRfc21hc2spIHx8IChjb3VudCAmIHRhcmdldC0+YnRfc21hc2spKSB7CisJCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0x8aW9sb2NrKTsKKwkJCXJldHVybiBYRlNfRVJST1IoLUVJTlZBTCk7CisJCX0KKworCQlpZiAoIW5lZWRfaV9tdXRleCAmJiAobWFwcGluZy0+bnJwYWdlcyB8fCBwb3MgPiBpcC0+aV9zaXplKSkgeworCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMfGlvbG9jayk7CisJCQlpb2xvY2sgPSBYRlNfSU9MT0NLX0VYQ0w7CisJCQluZWVkX2lfbXV0ZXggPSAxOworCQkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCQkJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTHxpb2xvY2spOworCQkJZ290byBzdGFydDsKKwkJfQorCX0KKworCW5ld19zaXplID0gcG9zICsgY291bnQ7CisJaWYgKG5ld19zaXplID4gaXAtPmlfc2l6ZSkKKwkJaXAtPmlfbmV3X3NpemUgPSBuZXdfc2l6ZTsKKworCWlmIChsaWtlbHkoIShpb2ZsYWdzICYgSU9fSU5WSVMpKSkKKwkJZmlsZV91cGRhdGVfdGltZShmaWxlKTsKKworCS8qCisJICogSWYgdGhlIG9mZnNldCBpcyBiZXlvbmQgdGhlIHNpemUgb2YgdGhlIGZpbGUsIHdlIGhhdmUgYSBjb3VwbGUKKwkgKiBvZiB0aGluZ3MgdG8gZG8uIEZpcnN0LCBpZiB0aGVyZSBpcyBhbHJlYWR5IHNwYWNlIGFsbG9jYXRlZAorCSAqIHdlIG5lZWQgdG8gZWl0aGVyIGNyZWF0ZSBob2xlcyBvciB6ZXJvIHRoZSBkaXNrIG9yIC4uLgorCSAqCisJICogSWYgdGhlcmUgaXMgYSBwYWdlIHdoZXJlIHRoZSBwcmV2aW91cyBzaXplIGxhbmRzLCB3ZSBuZWVkCisJICogdG8gemVybyBpdCBvdXQgdXAgdG8gdGhlIG5ldyBzaXplLgorCSAqLworCisJaWYgKHBvcyA+IGlwLT5pX3NpemUpIHsKKwkJZXJyb3IgPSB4ZnNfemVyb19lb2YoaXAsIHBvcywgaXAtPmlfc2l6ZSk7CisJCWlmIChlcnJvcikgeworCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKKwkJCWdvdG8gb3V0X3VubG9ja19pbnRlcm5hbDsKKwkJfQorCX0KKwl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCisJLyoKKwkgKiBJZiB3ZSdyZSB3cml0aW5nIHRoZSBmaWxlIHRoZW4gbWFrZSBzdXJlIHRvIGNsZWFyIHRoZQorCSAqIHNldHVpZCBhbmQgc2V0Z2lkIGJpdHMgaWYgdGhlIHByb2Nlc3MgaXMgbm90IGJlaW5nIHJ1bgorCSAqIGJ5IHJvb3QuICBUaGlzIGtlZXBzIHBlb3BsZSBmcm9tIG1vZGlmeWluZyBzZXR1aWQgYW5kCisJICogc2V0Z2lkIGJpbmFyaWVzLgorCSAqLworCWVycm9yID0gLWZpbGVfcmVtb3ZlX3N1aWQoZmlsZSk7CisJaWYgKHVubGlrZWx5KGVycm9yKSkKKwkJZ290byBvdXRfdW5sb2NrX2ludGVybmFsOworCisJLyogV2UgY2FuIHdyaXRlIGJhY2sgdGhpcyBxdWV1ZSBpbiBwYWdlIHJlY2xhaW0gKi8KKwljdXJyZW50LT5iYWNraW5nX2Rldl9pbmZvID0gbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbzsKKworCWlmICgoaW9mbGFncyAmIElPX0lTRElSRUNUKSkgeworCQlpZiAobWFwcGluZy0+bnJwYWdlcykgeworCQkJV0FSTl9PTihuZWVkX2lfbXV0ZXggPT0gMCk7CisJCQllcnJvciA9IHhmc19mbHVzaGludmFsX3BhZ2VzKGlwLAorCQkJCQkocG9zICYgUEFHRV9DQUNIRV9NQVNLKSwKKwkJCQkJLTEsIEZJX1JFTUFQRl9MT0NLRUQpOworCQkJaWYgKGVycm9yKQorCQkJCWdvdG8gb3V0X3VubG9ja19pbnRlcm5hbDsKKwkJfQorCisJCWlmIChuZWVkX2lfbXV0ZXgpIHsKKwkJCS8qIGRlbW90ZSB0aGUgbG9jayBub3cgdGhlIGNhY2hlZCBwYWdlcyBhcmUgZ29uZSAqLworCQkJeGZzX2lsb2NrX2RlbW90ZShpcCwgWEZTX0lPTE9DS19FWENMKTsKKwkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCisJCQlpb2xvY2sgPSBYRlNfSU9MT0NLX1NIQVJFRDsKKwkJCW5lZWRfaV9tdXRleCA9IDA7CisJCX0KKworCQl0cmFjZV94ZnNfZmlsZV9kaXJlY3Rfd3JpdGUoaXAsIGNvdW50LCBpb2NiLT5raV9wb3MsIGlvZmxhZ3MpOworCQlyZXQgPSBnZW5lcmljX2ZpbGVfZGlyZWN0X3dyaXRlKGlvY2IsIGlvdnAsCisJCQkJJm5yX3NlZ3MsIHBvcywgJmlvY2ItPmtpX3BvcywgY291bnQsIG9jb3VudCk7CisKKwkJLyoKKwkJICogZGlyZWN0LWlvIHdyaXRlIHRvIGEgaG9sZTogZmFsbCB0aHJvdWdoIHRvIGJ1ZmZlcmVkIEkvTworCQkgKiBmb3IgY29tcGxldGluZyB0aGUgcmVzdCBvZiB0aGUgcmVxdWVzdC4KKwkJICovCisJCWlmIChyZXQgPj0gMCAmJiByZXQgIT0gY291bnQpIHsKKwkJCVhGU19TVEFUU19BREQoeHNfd3JpdGVfYnl0ZXMsIHJldCk7CisKKwkJCXBvcyArPSByZXQ7CisJCQljb3VudCAtPSByZXQ7CisKKwkJCWlvZmxhZ3MgJj0gfklPX0lTRElSRUNUOworCQkJeGZzX2l1bmxvY2soaXAsIGlvbG9jayk7CisJCQlnb3RvIHJlbG9jazsKKwkJfQorCX0gZWxzZSB7CisJCWludCBlbm9zcGMgPSAwOworCQlzc2l6ZV90IHJldDIgPSAwOworCit3cml0ZV9yZXRyeToKKwkJdHJhY2VfeGZzX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaXAsIGNvdW50LCBpb2NiLT5raV9wb3MsIGlvZmxhZ3MpOworCQlyZXQyID0gZ2VuZXJpY19maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGlvdnAsIG5yX3NlZ3MsCisJCQkJcG9zLCAmaW9jYi0+a2lfcG9zLCBjb3VudCwgcmV0KTsKKwkJLyoKKwkJICogaWYgd2UganVzdCBnb3QgYW4gRU5PU1BDLCBmbHVzaCB0aGUgaW5vZGUgbm93IHdlCisJCSAqIGFyZW4ndCBob2xkaW5nIGFueSBwYWdlIGxvY2tzIGFuZCByZXRyeSAqb25jZSoKKwkJICovCisJCWlmIChyZXQyID09IC1FTk9TUEMgJiYgIWVub3NwYykgeworCQkJZXJyb3IgPSB4ZnNfZmx1c2hfcGFnZXMoaXAsIDAsIC0xLCAwLCBGSV9OT05FKTsKKwkJCWlmIChlcnJvcikKKwkJCQlnb3RvIG91dF91bmxvY2tfaW50ZXJuYWw7CisJCQllbm9zcGMgPSAxOworCQkJZ290byB3cml0ZV9yZXRyeTsKKwkJfQorCQlyZXQgPSByZXQyOworCX0KKworCWN1cnJlbnQtPmJhY2tpbmdfZGV2X2luZm8gPSBOVUxMOworCisJaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CisJaWYgKHVubGlrZWx5KHJldCA8IDAgJiYgcmV0ICE9IC1FRkFVTFQgJiYgaW9jYi0+a2lfcG9zID4gaXNpemUpKQorCQlpb2NiLT5raV9wb3MgPSBpc2l6ZTsKKworCWlmIChpb2NiLT5raV9wb3MgPiBpcC0+aV9zaXplKSB7CisJCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCQlpZiAoaW9jYi0+a2lfcG9zID4gaXAtPmlfc2l6ZSkKKwkJCWlwLT5pX3NpemUgPSBpb2NiLT5raV9wb3M7CisJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJfQorCisJaWYgKHJldCA9PSAtRU5PU1BDICYmCisJICAgIERNX0VWRU5UX0VOQUJMRUQoaXAsIERNX0VWRU5UX05PU1BBQ0UpICYmICEoaW9mbGFncyAmIElPX0lOVklTKSkgeworCQl4ZnNfaXVubG9jayhpcCwgaW9sb2NrKTsKKwkJaWYgKG5lZWRfaV9tdXRleCkKKwkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCQllcnJvciA9IFhGU19TRU5EX05BTUVTUChpcC0+aV9tb3VudCwgRE1fRVZFTlRfTk9TUEFDRSwgaXAsCisJCQkJRE1fUklHSFRfTlVMTCwgaXAsIERNX1JJR0hUX05VTEwsIE5VTEwsIE5VTEwsCisJCQkJMCwgMCwgMCk7IC8qIERlbGF5IGZsYWcgaW50ZW50aW9uYWxseSAgdW51c2VkICovCisJCWlmIChuZWVkX2lfbXV0ZXgpCisJCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJCXhmc19pbG9jayhpcCwgaW9sb2NrKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXRfdW5sb2NrX2ludGVybmFsOworCQlnb3RvIHN0YXJ0OworCX0KKworCWVycm9yID0gLXJldDsKKwlpZiAocmV0IDw9IDApCisJCWdvdG8gb3V0X3VubG9ja19pbnRlcm5hbDsKKworCVhGU19TVEFUU19BREQoeHNfd3JpdGVfYnl0ZXMsIHJldCk7CisKKwkvKiBIYW5kbGUgdmFyaW91cyBTWU5DLXR5cGUgd3JpdGVzICovCisJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19EU1lOQykgfHwgSVNfU1lOQyhpbm9kZSkpIHsKKwkJbG9mZl90IGVuZCA9IHBvcyArIHJldCAtIDE7CisJCWludCBlcnJvcjI7CisKKwkJeGZzX2l1bmxvY2soaXAsIGlvbG9jayk7CisJCWlmIChuZWVkX2lfbXV0ZXgpCisJCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKworCQllcnJvcjIgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKG1hcHBpbmcsIHBvcywgZW5kKTsKKwkJaWYgKCFlcnJvcikKKwkJCWVycm9yID0gZXJyb3IyOworCQlpZiAobmVlZF9pX211dGV4KQorCQkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCQl4ZnNfaWxvY2soaXAsIGlvbG9jayk7CisKKwkJZXJyb3IyID0gLXhmc19maWxlX2ZzeW5jKGZpbGUsIGZpbGUtPmZfcGF0aC5kZW50cnksCisJCQkJCSAoZmlsZS0+Zl9mbGFncyAmIF9fT19TWU5DKSA/IDAgOiAxKTsKKwkJaWYgKCFlcnJvcikKKwkJCWVycm9yID0gZXJyb3IyOworCX0KKworIG91dF91bmxvY2tfaW50ZXJuYWw6CisJaWYgKGlwLT5pX25ld19zaXplKSB7CisJCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCQlpcC0+aV9uZXdfc2l6ZSA9IDA7CisJCS8qCisJCSAqIElmIHRoaXMgd2FzIGEgZGlyZWN0IG9yIHN5bmNocm9ub3VzIEkvTyB0aGF0IGZhaWxlZCAoc3VjaAorCQkgKiBhcyBFTk9TUEMpIHRoZW4gcGFydCBvZiB0aGUgSS9PIG1heSBoYXZlIGJlZW4gd3JpdHRlbiB0bworCQkgKiBkaXNrIGJlZm9yZSB0aGUgZXJyb3Igb2NjdXJlZC4gIEluIHRoaXMgY2FzZSB0aGUgb24tZGlzaworCQkgKiBmaWxlIHNpemUgbWF5IGhhdmUgYmVlbiBhZGp1c3RlZCBiZXlvbmQgdGhlIGluLW1lbW9yeSBmaWxlCisJCSAqIHNpemUgYW5kIG5vdyBuZWVkcyB0byBiZSB0cnVuY2F0ZWQgYmFjay4KKwkJICovCisJCWlmIChpcC0+aV9kLmRpX3NpemUgPiBpcC0+aV9zaXplKQorCQkJaXAtPmlfZC5kaV9zaXplID0gaXAtPmlfc2l6ZTsKKwkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKKwl9CisJeGZzX2l1bmxvY2soaXAsIGlvbG9jayk7Cisgb3V0X3VubG9ja19tdXRleDoKKwlpZiAobmVlZF9pX211dGV4KQorCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKwlyZXR1cm4gLWVycm9yOwogfQogCiBTVEFUSUMgaW50CkBAIC0xNjAsMjggKzkzOCw2IEBACiAJcmV0dXJuIC14ZnNfcmVsZWFzZShYRlNfSShpbm9kZSkpOwogfQogCi0vKgotICogV2UgaWdub3JlIHRoZSBkYXRhc3luYyBmbGFnIGhlcmUgYmVjYXVzZSBhIGRhdGFzeW5jIGlzIGVmZmVjdGl2ZWx5Ci0gKiBpZGVudGljYWwgdG8gYW4gZnN5bmMuIFRoYXQgaXMsIGRhdGFzeW5jIGltcGxpZXMgdGhhdCB3ZSBuZWVkIHRvIHdyaXRlCi0gKiBvbmx5IHRoZSBtZXRhZGF0YSBuZWVkZWQgdG8gYmUgYWJsZSB0byBhY2Nlc3MgdGhlIGRhdGEgdGhhdCBpcyB3cml0dGVuCi0gKiBpZiB3ZSBjcmFzaCBhZnRlciB0aGUgY2FsbCBjb21wbGV0ZXMuIEhlbmNlIGlmIHdlIGFyZSB3cml0aW5nIGJleW9uZAotICogRU9GIHdlIGhhdmUgdG8gbG9nIHRoZSBpbm9kZSBzaXplIGNoYW5nZSBhcyB3ZWxsLCB3aGljaCBtYWtlcyBpdCBhCi0gKiBmdWxsIGZzeW5jLiBJZiB3ZSBkb24ndCB3cml0ZSBiZXlvbmQgRU9GLCB0aGUgaW5vZGUgY29yZSB3aWxsIGJlCi0gKiBjbGVhbiBpbiBtZW1vcnkgYW5kIHNvIHdlIGRvbid0IG5lZWQgdG8gbG9nIHRoZSBpbm9kZSwganVzdCBsaWtlCi0gKiBmc3luYy4KLSAqLwotU1RBVElDIGludAoteGZzX2ZpbGVfZnN5bmMoCi0Jc3RydWN0IGZpbGUJCSpmaWxlLAotCXN0cnVjdCBkZW50cnkJCSpkZW50cnksCi0JaW50CQkJZGF0YXN5bmMpCi17Ci0Jc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShkZW50cnktPmRfaW5vZGUpOwotCi0JeGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX0lUUlVOQ0FURUQpOwotCXJldHVybiAteGZzX2ZzeW5jKGlwKTsKLX0KLQogU1RBVElDIGludAogeGZzX2ZpbGVfcmVhZGRpcigKIAlzdHJ1Y3QgZmlsZQkqZmlscCwKQEAgLTIwMyw5ICs5NTksOSBAQAogCSAqCiAJICogVHJ5IHRvIGdpdmUgaXQgYW4gZXN0aW1hdGUgdGhhdCdzIGdvb2QgZW5vdWdoLCBtYXliZSBhdCBzb21lCiAJICogcG9pbnQgd2UgY2FuIGNoYW5nZSB0aGUgLT5yZWFkZGlyIHByb3RvdHlwZSB0byBpbmNsdWRlIHRoZQotCSAqIGJ1ZmZlciBzaXplLgorCSAqIGJ1ZmZlciBzaXplLiAgRm9yIG5vdyB3ZSB1c2UgdGhlIGN1cnJlbnQgZ2xpYmMgYnVmZmVyIHNpemUuCiAJICovCi0JYnVmc2l6ZSA9IChzaXplX3QpbWluX3QobG9mZl90LCBQQUdFX1NJWkUsIGlwLT5pX2QuZGlfc2l6ZSk7CisJYnVmc2l6ZSA9IChzaXplX3QpbWluX3QobG9mZl90LCAzMjc2OCwgaXAtPmlfZC5kaV9zaXplKTsKIAogCWVycm9yID0geGZzX3JlYWRkaXIoaXAsIGRpcmVudCwgYnVmc2l6ZSwKIAkJCQkoeGZzX29mZl90ICopJmZpbHAtPmZfcG9zLCBmaWxsZGlyKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwppbmRleCBlODU2NmJiLi42MWE5OTYwIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCkBAIC05MSw2ICs5MSwxNiBAQAogCQltYXJrX2lub2RlX2RpcnR5X3N5bmMoaW5vZGUpOwogfQogCit2b2lkCit4ZnNfbWFya19pbm9kZV9kaXJ0eSgKKwl4ZnNfaW5vZGVfdAkqaXApCit7CisJc3RydWN0IGlub2RlCSppbm9kZSA9IFZGU19JKGlwKTsKKworCWlmICghKGlub2RlLT5pX3N0YXRlICYgKElfV0lMTF9GUkVFfElfRlJFRUlOR3xJX0NMRUFSKSkpCisJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworfQorCiAvKgogICogQ2hhbmdlIHRoZSByZXF1ZXN0ZWQgdGltZXN0YW1wIGluIHRoZSBnaXZlbiBpbm9kZS4KICAqIFdlIGRvbid0IGxvY2sgYWNyb3NzIHRpbWVzdGFtcCB1cGRhdGVzLCBhbmQgd2UgZG9uJ3QgbG9nIHRoZW0gYnV0CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbGludXguaAppbmRleCA1YWYwYzgxYy4uZmFjZmIzMiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbGludXguaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oCkBAIC04OCw3ICs4OCw2IEBACiAjaW5jbHVkZSA8eGZzX3N1cGVyLmg+CiAjaW5jbHVkZSA8eGZzX2dsb2JhbHMuaD4KICNpbmNsdWRlIDx4ZnNfZnNfc3Vici5oPgotI2luY2x1ZGUgPHhmc19scncuaD4KICNpbmNsdWRlIDx4ZnNfYnVmLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYWM2ZjgwLi4wMDAwMDAwCi0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCisrKyAvZGV2L251bGwKQEAgLTEsNzk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMywyMDA1IFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogSW5jLiwgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLSNpbmNsdWRlICJ4ZnMuaCIKLSNpbmNsdWRlICJ4ZnNfZnMuaCIKLSNpbmNsdWRlICJ4ZnNfYml0LmgiCi0jaW5jbHVkZSAieGZzX2xvZy5oIgotI2luY2x1ZGUgInhmc19pbnVtLmgiCi0jaW5jbHVkZSAieGZzX3RyYW5zLmgiCi0jaW5jbHVkZSAieGZzX3NiLmgiCi0jaW5jbHVkZSAieGZzX2FnLmgiCi0jaW5jbHVkZSAieGZzX2RpcjIuaCIKLSNpbmNsdWRlICJ4ZnNfYWxsb2MuaCIKLSNpbmNsdWRlICJ4ZnNfZG1hcGkuaCIKLSNpbmNsdWRlICJ4ZnNfcXVvdGEuaCIKLSNpbmNsdWRlICJ4ZnNfbW91bnQuaCIKLSNpbmNsdWRlICJ4ZnNfYm1hcF9idHJlZS5oIgotI2luY2x1ZGUgInhmc19hbGxvY19idHJlZS5oIgotI2luY2x1ZGUgInhmc19pYWxsb2NfYnRyZWUuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMl9zZi5oIgotI2luY2x1ZGUgInhmc19hdHRyX3NmLmgiCi0jaW5jbHVkZSAieGZzX2Rpbm9kZS5oIgotI2luY2x1ZGUgInhmc19pbm9kZS5oIgotI2luY2x1ZGUgInhmc19ibWFwLmgiCi0jaW5jbHVkZSAieGZzX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2lhbGxvYy5oIgotI2luY2x1ZGUgInhmc19ydGFsbG9jLmgiCi0jaW5jbHVkZSAieGZzX2Vycm9yLmgiCi0jaW5jbHVkZSAieGZzX2l0YWJsZS5oIgotI2luY2x1ZGUgInhmc19ydy5oIgotI2luY2x1ZGUgInhmc19hdHRyLmgiCi0jaW5jbHVkZSAieGZzX2lub2RlX2l0ZW0uaCIKLSNpbmNsdWRlICJ4ZnNfYnVmX2l0ZW0uaCIKLSNpbmNsdWRlICJ4ZnNfdXRpbHMuaCIKLSNpbmNsdWRlICJ4ZnNfaW9tYXAuaCIKLSNpbmNsdWRlICJ4ZnNfdm5vZGVvcHMuaCIKLSNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKLQotI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KLQotCi0vKgotICoJeGZzX2lvemVybwotICoKLSAqCXhmc19pb3plcm8gY2xlYXJzIHRoZSBzcGVjaWZpZWQgcmFuZ2Ugb2YgYnVmZmVyIHN1cHBsaWVkLAotICoJYW5kIG1hcmtzIGFsbCB0aGUgYWZmZWN0ZWQgYmxvY2tzIGFzIHZhbGlkIGFuZCBtb2RpZmllZC4gIElmCi0gKglhbiBhZmZlY3RlZCBibG9jayBpcyBub3QgYWxsb2NhdGVkLCBpdCB3aWxsIGJlIGFsbG9jYXRlZC4gIElmCi0gKglhbiBhZmZlY3RlZCBibG9jayBpcyBub3QgY29tcGxldGVseSBvdmVyd3JpdHRlbiwgYW5kIGlzIG5vdAotICoJdmFsaWQgYmVmb3JlIHRoZSBvcGVyYXRpb24sIGl0IHdpbGwgYmUgcmVhZCBmcm9tIGRpc2sgYmVmb3JlCi0gKgliZWluZyBwYXJ0aWFsbHkgemVyb2VkLgotICovCi1TVEFUSUMgaW50Ci14ZnNfaW96ZXJvKAotCXN0cnVjdCB4ZnNfaW5vZGUJKmlwLAkvKiBpbm9kZQkJCSovCi0JbG9mZl90CQkJcG9zLAkvKiBvZmZzZXQgaW4gZmlsZQkJKi8KLQlzaXplX3QJCQljb3VudCkJLyogc2l6ZSBvZiBkYXRhIHRvIHplcm8JCSovCi17Ci0Jc3RydWN0IHBhZ2UJCSpwYWdlOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlCSptYXBwaW5nOwotCWludAkJCXN0YXR1czsKLQotCW1hcHBpbmcgPSBWRlNfSShpcCktPmlfbWFwcGluZzsKLQlkbyB7Ci0JCXVuc2lnbmVkIG9mZnNldCwgYnl0ZXM7Ci0JCXZvaWQgKmZzZGF0YTsKLQotCQlvZmZzZXQgPSAocG9zICYgKFBBR0VfQ0FDSEVfU0laRSAtMSkpOyAvKiBXaXRoaW4gcGFnZSAqLwotCQlieXRlcyA9IFBBR0VfQ0FDSEVfU0laRSAtIG9mZnNldDsKLQkJaWYgKGJ5dGVzID4gY291bnQpCi0JCQlieXRlcyA9IGNvdW50OwotCi0JCXN0YXR1cyA9IHBhZ2VjYWNoZV93cml0ZV9iZWdpbihOVUxMLCBtYXBwaW5nLCBwb3MsIGJ5dGVzLAotCQkJCQlBT1BfRkxBR19VTklOVEVSUlVQVElCTEUsCi0JCQkJCSZwYWdlLCAmZnNkYXRhKTsKLQkJaWYgKHN0YXR1cykKLQkJCWJyZWFrOwotCi0JCXplcm9fdXNlcihwYWdlLCBvZmZzZXQsIGJ5dGVzKTsKLQotCQlzdGF0dXMgPSBwYWdlY2FjaGVfd3JpdGVfZW5kKE5VTEwsIG1hcHBpbmcsIHBvcywgYnl0ZXMsIGJ5dGVzLAotCQkJCQlwYWdlLCBmc2RhdGEpOwotCQlXQVJOX09OKHN0YXR1cyA8PSAwKTsgLyogY2FuJ3QgcmV0dXJuIGxlc3MgdGhhbiB6ZXJvISAqLwotCQlwb3MgKz0gYnl0ZXM7Ci0JCWNvdW50IC09IGJ5dGVzOwotCQlzdGF0dXMgPSAwOwotCX0gd2hpbGUgKGNvdW50KTsKLQotCXJldHVybiAoLXN0YXR1cyk7Ci19Ci0KLXNzaXplX3QJCQkvKiBieXRlcyByZWFkLCBvciAoLSkgIGVycm9yICovCi14ZnNfcmVhZCgKLQl4ZnNfaW5vZGVfdAkJKmlwLAotCXN0cnVjdCBraW9jYgkJKmlvY2IsCi0JY29uc3Qgc3RydWN0IGlvdmVjCSppb3ZwLAotCXVuc2lnbmVkIGludAkJc2VncywKLQlsb2ZmX3QJCQkqb2Zmc2V0LAotCWludAkJCWlvZmxhZ3MpCi17Ci0Jc3RydWN0IGZpbGUJCSpmaWxlID0gaW9jYi0+a2lfZmlscDsKLQlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IGZpbGUtPmZfbWFwcGluZy0+aG9zdDsKLQl4ZnNfbW91bnRfdAkJKm1wID0gaXAtPmlfbW91bnQ7Ci0Jc2l6ZV90CQkJc2l6ZSA9IDA7Ci0Jc3NpemVfdAkJCXJldCA9IDA7Ci0JeGZzX2ZzaXplX3QJCW47Ci0JdW5zaWduZWQgbG9uZwkJc2VnOwotCi0KLQlYRlNfU1RBVFNfSU5DKHhzX3JlYWRfY2FsbHMpOwotCi0JLyogU1RBUlQgY29weSAmIHdhc3RlIGZyb20gZmlsZW1hcC5jICovCi0JZm9yIChzZWcgPSAwOyBzZWcgPCBzZWdzOyBzZWcrKykgewotCQljb25zdCBzdHJ1Y3QgaW92ZWMgKml2ID0gJmlvdnBbc2VnXTsKLQotCQkvKgotCQkgKiBJZiBhbnkgc2VnbWVudCBoYXMgYSBuZWdhdGl2ZSBsZW5ndGgsIG9yIHRoZSBjdW11bGF0aXZlCi0JCSAqIGxlbmd0aCBldmVyIHdyYXBzIG5lZ2F0aXZlIHRoZW4gcmV0dXJuIC1FSU5WQUwuCi0JCSAqLwotCQlzaXplICs9IGl2LT5pb3ZfbGVuOwotCQlpZiAodW5saWtlbHkoKHNzaXplX3QpKHNpemV8aXYtPmlvdl9sZW4pIDwgMCkpCi0JCQlyZXR1cm4gWEZTX0VSUk9SKC1FSU5WQUwpOwotCX0KLQkvKiBFTkQgY29weSAmIHdhc3RlIGZyb20gZmlsZW1hcC5jICovCi0KLQlpZiAodW5saWtlbHkoaW9mbGFncyAmIElPX0lTRElSRUNUKSkgewotCQl4ZnNfYnVmdGFyZ190CSp0YXJnZXQgPQotCQkJWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGlwKSA/Ci0JCQkJbXAtPm1fcnRkZXZfdGFyZ3AgOiBtcC0+bV9kZGV2X3RhcmdwOwotCQlpZiAoKCpvZmZzZXQgJiB0YXJnZXQtPmJ0X3NtYXNrKSB8fAotCQkgICAgKHNpemUgJiB0YXJnZXQtPmJ0X3NtYXNrKSkgewotCQkJaWYgKCpvZmZzZXQgPT0gaXAtPmlfc2l6ZSkgewotCQkJCXJldHVybiAoMCk7Ci0JCQl9Ci0JCQlyZXR1cm4gLVhGU19FUlJPUihFSU5WQUwpOwotCQl9Ci0JfQotCi0JbiA9IFhGU19NQVhJT0ZGU0VUKG1wKSAtICpvZmZzZXQ7Ci0JaWYgKChuIDw9IDApIHx8IChzaXplID09IDApKQotCQlyZXR1cm4gMDsKLQotCWlmIChuIDwgc2l6ZSkKLQkJc2l6ZSA9IG47Ci0KLQlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpCi0JCXJldHVybiAtRUlPOwotCi0JaWYgKHVubGlrZWx5KGlvZmxhZ3MgJiBJT19JU0RJUkVDVCkpCi0JCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQl4ZnNfaWxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKLQotCWlmIChETV9FVkVOVF9FTkFCTEVEKGlwLCBETV9FVkVOVF9SRUFEKSAmJiAhKGlvZmxhZ3MgJiBJT19JTlZJUykpIHsKLQkJaW50IGRtZmxhZ3MgPSBGSUxQX0RFTEFZX0ZMQUcoZmlsZSkgfCBETV9TRU1fRkxBR19SRChpb2ZsYWdzKTsKLQkJaW50IGlvbG9jayA9IFhGU19JT0xPQ0tfU0hBUkVEOwotCi0JCXJldCA9IC1YRlNfU0VORF9EQVRBKG1wLCBETV9FVkVOVF9SRUFELCBpcCwgKm9mZnNldCwgc2l6ZSwKLQkJCQkJZG1mbGFncywgJmlvbG9jayk7Ci0JCWlmIChyZXQpIHsKLQkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7Ci0JCQlpZiAodW5saWtlbHkoaW9mbGFncyAmIElPX0lTRElSRUNUKSkKLQkJCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQl9Ci0KLQlpZiAodW5saWtlbHkoaW9mbGFncyAmIElPX0lTRElSRUNUKSkgewotCQlpZiAoaW5vZGUtPmlfbWFwcGluZy0+bnJwYWdlcykKLQkJCXJldCA9IC14ZnNfZmx1c2hpbnZhbF9wYWdlcyhpcCwgKCpvZmZzZXQgJiBQQUdFX0NBQ0hFX01BU0spLAotCQkJCQkJICAgIC0xLCBGSV9SRU1BUEZfTE9DS0VEKTsKLQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JCWlmIChyZXQpIHsKLQkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0JdHJhY2VfeGZzX2ZpbGVfcmVhZChpcCwgc2l6ZSwgKm9mZnNldCwgaW9mbGFncyk7Ci0KLQlpb2NiLT5raV9wb3MgPSAqb2Zmc2V0OwotCXJldCA9IGdlbmVyaWNfZmlsZV9haW9fcmVhZChpb2NiLCBpb3ZwLCBzZWdzLCAqb2Zmc2V0KTsKLQlpZiAocmV0ID4gMCkKLQkJWEZTX1NUQVRTX0FERCh4c19yZWFkX2J5dGVzLCByZXQpOwotCi0JeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zc2l6ZV90Ci14ZnNfc3BsaWNlX3JlYWQoCi0JeGZzX2lub2RlX3QJCSppcCwKLQlzdHJ1Y3QgZmlsZQkJKmluZmlscCwKLQlsb2ZmX3QJCQkqcHBvcywKLQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvCSpwaXBlLAotCXNpemVfdAkJCWNvdW50LAotCWludAkJCWZsYWdzLAotCWludAkJCWlvZmxhZ3MpCi17Ci0JeGZzX21vdW50X3QJCSptcCA9IGlwLT5pX21vdW50OwotCXNzaXplX3QJCQlyZXQ7Ci0KLQlYRlNfU1RBVFNfSU5DKHhzX3JlYWRfY2FsbHMpOwotCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKGlwLT5pX21vdW50KSkKLQkJcmV0dXJuIC1FSU87Ci0KLQl4ZnNfaWxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKLQotCWlmIChETV9FVkVOVF9FTkFCTEVEKGlwLCBETV9FVkVOVF9SRUFEKSAmJiAhKGlvZmxhZ3MgJiBJT19JTlZJUykpIHsKLQkJaW50IGlvbG9jayA9IFhGU19JT0xPQ0tfU0hBUkVEOwotCQlpbnQgZXJyb3I7Ci0KLQkJZXJyb3IgPSBYRlNfU0VORF9EQVRBKG1wLCBETV9FVkVOVF9SRUFELCBpcCwgKnBwb3MsIGNvdW50LAotCQkJCQlGSUxQX0RFTEFZX0ZMQUcoaW5maWxwKSwgJmlvbG9jayk7Ci0JCWlmIChlcnJvcikgewotCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKLQkJCXJldHVybiAtZXJyb3I7Ci0JCX0KLQl9Ci0KLQl0cmFjZV94ZnNfZmlsZV9zcGxpY2VfcmVhZChpcCwgY291bnQsICpwcG9zLCBpb2ZsYWdzKTsKLQotCXJldCA9IGdlbmVyaWNfZmlsZV9zcGxpY2VfcmVhZChpbmZpbHAsIHBwb3MsIHBpcGUsIGNvdW50LCBmbGFncyk7Ci0JaWYgKHJldCA+IDApCi0JCVhGU19TVEFUU19BREQoeHNfcmVhZF9ieXRlcywgcmV0KTsKLQotCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3NpemVfdAoteGZzX3NwbGljZV93cml0ZSgKLQl4ZnNfaW5vZGVfdAkJKmlwLAotCXN0cnVjdCBwaXBlX2lub2RlX2luZm8JKnBpcGUsCi0Jc3RydWN0IGZpbGUJCSpvdXRmaWxwLAotCWxvZmZfdAkJCSpwcG9zLAotCXNpemVfdAkJCWNvdW50LAotCWludAkJCWZsYWdzLAotCWludAkJCWlvZmxhZ3MpCi17Ci0JeGZzX21vdW50X3QJCSptcCA9IGlwLT5pX21vdW50OwotCXNzaXplX3QJCQlyZXQ7Ci0Jc3RydWN0IGlub2RlCQkqaW5vZGUgPSBvdXRmaWxwLT5mX21hcHBpbmctPmhvc3Q7Ci0JeGZzX2ZzaXplX3QJCWlzaXplLCBuZXdfc2l6ZTsKLQotCVhGU19TVEFUU19JTkMoeHNfd3JpdGVfY2FsbHMpOwotCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKGlwLT5pX21vdW50KSkKLQkJcmV0dXJuIC1FSU87Ci0KLQl4ZnNfaWxvY2soaXAsIFhGU19JT0xPQ0tfRVhDTCk7Ci0KLQlpZiAoRE1fRVZFTlRfRU5BQkxFRChpcCwgRE1fRVZFTlRfV1JJVEUpICYmICEoaW9mbGFncyAmIElPX0lOVklTKSkgewotCQlpbnQgaW9sb2NrID0gWEZTX0lPTE9DS19FWENMOwotCQlpbnQgZXJyb3I7Ci0KLQkJZXJyb3IgPSBYRlNfU0VORF9EQVRBKG1wLCBETV9FVkVOVF9XUklURSwgaXAsICpwcG9zLCBjb3VudCwKLQkJCQkJRklMUF9ERUxBWV9GTEFHKG91dGZpbHApLCAmaW9sb2NrKTsKLQkJaWYgKGVycm9yKSB7Ci0JCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19FWENMKTsKLQkJCXJldHVybiAtZXJyb3I7Ci0JCX0KLQl9Ci0KLQluZXdfc2l6ZSA9ICpwcG9zICsgY291bnQ7Ci0KLQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQlpZiAobmV3X3NpemUgPiBpcC0+aV9zaXplKQotCQlpcC0+aV9uZXdfc2l6ZSA9IG5ld19zaXplOwotCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0KLQl0cmFjZV94ZnNfZmlsZV9zcGxpY2Vfd3JpdGUoaXAsIGNvdW50LCAqcHBvcywgaW9mbGFncyk7Ci0KLQlyZXQgPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3dyaXRlKHBpcGUsIG91dGZpbHAsIHBwb3MsIGNvdW50LCBmbGFncyk7Ci0JaWYgKHJldCA+IDApCi0JCVhGU19TVEFUU19BREQoeHNfd3JpdGVfYnl0ZXMsIHJldCk7Ci0KLQlpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKLQlpZiAodW5saWtlbHkocmV0IDwgMCAmJiByZXQgIT0gLUVGQVVMVCAmJiAqcHBvcyA+IGlzaXplKSkKLQkJKnBwb3MgPSBpc2l6ZTsKLQotCWlmICgqcHBvcyA+IGlwLT5pX3NpemUpIHsKLQkJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JCWlmICgqcHBvcyA+IGlwLT5pX3NpemUpCi0JCQlpcC0+aV9zaXplID0gKnBwb3M7Ci0JCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JfQotCi0JaWYgKGlwLT5pX25ld19zaXplKSB7Ci0JCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCQlpcC0+aV9uZXdfc2l6ZSA9IDA7Ci0JCWlmIChpcC0+aV9kLmRpX3NpemUgPiBpcC0+aV9zaXplKQotCQkJaXAtPmlfZC5kaV9zaXplID0gaXAtPmlfc2l6ZTsKLQkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQl9Ci0JeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfRVhDTCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gaGFuZGxlIHplcm9pbmcgYW55IHNwYWNlIGluIHRoZSBsYXN0Ci0gKiBibG9jayBvZiB0aGUgZmlsZSB0aGF0IGlzIGJleW9uZCB0aGUgRU9GLiAgV2UgZG8gdGhpcyBzaW5jZSB0aGUKLSAqIHNpemUgaXMgYmVpbmcgaW5jcmVhc2VkIHdpdGhvdXQgd3JpdGluZyBhbnl0aGluZyB0byB0aGF0IGJsb2NrCi0gKiBhbmQgd2UgZG9uJ3Qgd2FudCBhbnlvbmUgdG8gcmVhZCB0aGUgZ2FyYmFnZSBvbiB0aGUgZGlzay4KLSAqLwotU1RBVElDIGludAkJCQkvKiBlcnJvciAocG9zaXRpdmUpICovCi14ZnNfemVyb19sYXN0X2Jsb2NrKAotCXhmc19pbm9kZV90CSppcCwKLQl4ZnNfZnNpemVfdAlvZmZzZXQsCi0JeGZzX2ZzaXplX3QJaXNpemUpCi17Ci0JeGZzX2ZpbGVvZmZfdAlsYXN0X2ZzYjsKLQl4ZnNfbW91bnRfdAkqbXAgPSBpcC0+aV9tb3VudDsKLQlpbnQJCW5pbWFwczsKLQlpbnQJCXplcm9fb2Zmc2V0OwotCWludAkJemVyb19sZW47Ci0JaW50CQllcnJvciA9IDA7Ci0JeGZzX2JtYnRfaXJlY190CWltYXA7Ci0KLQlBU1NFUlQoeGZzX2lzaWxvY2tlZChpcCwgWEZTX0lMT0NLX0VYQ0wpKTsKLQotCXplcm9fb2Zmc2V0ID0gWEZTX0JfRlNCX09GRlNFVChtcCwgaXNpemUpOwotCWlmICh6ZXJvX29mZnNldCA9PSAwKSB7Ci0JCS8qCi0JCSAqIFRoZXJlIGFyZSBubyBleHRyYSBieXRlcyBpbiB0aGUgbGFzdCBibG9jayBvbiBkaXNrIHRvCi0JCSAqIHplcm8sIHNvIHJldHVybi4KLQkJICovCi0JCXJldHVybiAwOwotCX0KLQotCWxhc3RfZnNiID0gWEZTX0JfVE9fRlNCVChtcCwgaXNpemUpOwotCW5pbWFwcyA9IDE7Ci0JZXJyb3IgPSB4ZnNfYm1hcGkoTlVMTCwgaXAsIGxhc3RfZnNiLCAxLCAwLCBOVUxMLCAwLCAmaW1hcCwKLQkJCSAgJm5pbWFwcywgTlVMTCwgTlVMTCk7Ci0JaWYgKGVycm9yKSB7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0JQVNTRVJUKG5pbWFwcyA+IDApOwotCS8qCi0JICogSWYgdGhlIGJsb2NrIHVuZGVybHlpbmcgaXNpemUgaXMganVzdCBhIGhvbGUsIHRoZW4gdGhlcmUKLQkgKiBpcyBub3RoaW5nIHRvIHplcm8uCi0JICovCi0JaWYgKGltYXAuYnJfc3RhcnRibG9jayA9PSBIT0xFU1RBUlRCTE9DSykgewotCQlyZXR1cm4gMDsKLQl9Ci0JLyoKLQkgKiBaZXJvIHRoZSBwYXJ0IG9mIHRoZSBsYXN0IGJsb2NrIGJleW9uZCB0aGUgRU9GLCBhbmQgd3JpdGUgaXQKLQkgKiBvdXQgc3luYy4gIFdlIG5lZWQgdG8gZHJvcCB0aGUgaWxvY2sgd2hpbGUgd2UgZG8gdGhpcyBzbyB3ZQotCSAqIGRvbid0IGRlYWRsb2NrIHdoZW4gdGhlIGJ1ZmZlciBjYWNoZSBjYWxscyBiYWNrIHRvIHVzLgotCSAqLwotCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0KLQl6ZXJvX2xlbiA9IG1wLT5tX3NiLnNiX2Jsb2Nrc2l6ZSAtIHplcm9fb2Zmc2V0OwotCWlmIChpc2l6ZSArIHplcm9fbGVuID4gb2Zmc2V0KQotCQl6ZXJvX2xlbiA9IG9mZnNldCAtIGlzaXplOwotCWVycm9yID0geGZzX2lvemVybyhpcCwgaXNpemUsIHplcm9fbGVuKTsKLQotCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCUFTU0VSVChlcnJvciA+PSAwKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qCi0gKiBaZXJvIGFueSBvbiBkaXNrIHNwYWNlIGJldHdlZW4gdGhlIGN1cnJlbnQgRU9GIGFuZCB0aGUgbmV3LAotICogbGFyZ2VyIEVPRi4gIFRoaXMgaGFuZGxlcyB0aGUgbm9ybWFsIGNhc2Ugb2YgemVyb2luZyB0aGUgcmVtYWluZGVyCi0gKiBvZiB0aGUgbGFzdCBibG9jayBpbiB0aGUgZmlsZSBhbmQgdGhlIHVudXN1YWwgY2FzZSBvZiB6ZXJvaW5nIGJsb2NrcwotICogb3V0IGJleW9uZCB0aGUgc2l6ZSBvZiB0aGUgZmlsZS4gIFRoaXMgc2Vjb25kIGNhc2Ugb25seSBoYXBwZW5zCi0gKiB3aXRoIGZpeGVkIHNpemUgZXh0ZW50cyBhbmQgd2hlbiB0aGUgc3lzdGVtIGNyYXNoZXMgYmVmb3JlIHRoZSBpbm9kZQotICogc2l6ZSB3YXMgdXBkYXRlZCBidXQgYWZ0ZXIgYmxvY2tzIHdlcmUgYWxsb2NhdGVkLiAgSWYgZmlsbCBpcyBzZXQsCi0gKiB0aGVuIGFueSBob2xlcyBpbiB0aGUgcmFuZ2UgYXJlIGZpbGxlZCBhbmQgemVyb2VkLiAgSWYgbm90LCB0aGUgaG9sZXMKLSAqIGFyZSBsZWZ0IGFsb25lIGFzIGhvbGVzLgotICovCi0KLWludAkJCQkJLyogZXJyb3IgKHBvc2l0aXZlKSAqLwoteGZzX3plcm9fZW9mKAotCXhmc19pbm9kZV90CSppcCwKLQl4ZnNfb2ZmX3QJb2Zmc2V0LAkJLyogc3RhcnRpbmcgSS9PIG9mZnNldCAqLwotCXhmc19mc2l6ZV90CWlzaXplKQkJLyogY3VycmVudCBpbm9kZSBzaXplICovCi17Ci0JeGZzX21vdW50X3QJKm1wID0gaXAtPmlfbW91bnQ7Ci0JeGZzX2ZpbGVvZmZfdAlzdGFydF96ZXJvX2ZzYjsKLQl4ZnNfZmlsZW9mZl90CWVuZF96ZXJvX2ZzYjsKLQl4ZnNfZmlsZW9mZl90CXplcm9fY291bnRfZnNiOwotCXhmc19maWxlb2ZmX3QJbGFzdF9mc2I7Ci0JeGZzX2ZpbGVvZmZfdAl6ZXJvX29mZjsKLQl4ZnNfZnNpemVfdAl6ZXJvX2xlbjsKLQlpbnQJCW5pbWFwczsKLQlpbnQJCWVycm9yID0gMDsKLQl4ZnNfYm1idF9pcmVjX3QJaW1hcDsKLQotCUFTU0VSVCh4ZnNfaXNpbG9ja2VkKGlwLCBYRlNfSUxPQ0tfRVhDTHxYRlNfSU9MT0NLX0VYQ0wpKTsKLQlBU1NFUlQob2Zmc2V0ID4gaXNpemUpOwotCi0JLyoKLQkgKiBGaXJzdCBoYW5kbGUgemVyb2luZyB0aGUgYmxvY2sgb24gd2hpY2ggaXNpemUgcmVzaWRlcy4KLQkgKiBXZSBvbmx5IHplcm8gYSBwYXJ0IG9mIHRoYXQgYmxvY2sgc28gaXQgaXMgaGFuZGxlZCBzcGVjaWFsbHkuCi0JICovCi0JZXJyb3IgPSB4ZnNfemVyb19sYXN0X2Jsb2NrKGlwLCBvZmZzZXQsIGlzaXplKTsKLQlpZiAoZXJyb3IpIHsKLQkJQVNTRVJUKHhmc19pc2lsb2NrZWQoaXAsIFhGU19JTE9DS19FWENMfFhGU19JT0xPQ0tfRVhDTCkpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCi0JLyoKLQkgKiBDYWxjdWxhdGUgdGhlIHJhbmdlIGJldHdlZW4gdGhlIG5ldyBzaXplIGFuZCB0aGUgb2xkCi0JICogd2hlcmUgYmxvY2tzIG5lZWRpbmcgdG8gYmUgemVyb2VkIG1heSBleGlzdC4gIFRvIGdldCB0aGUKLQkgKiBibG9jayB3aGVyZSB0aGUgbGFzdCBieXRlIGluIHRoZSBmaWxlIGN1cnJlbnRseSByZXNpZGVzLAotCSAqIHdlIG5lZWQgdG8gc3VidHJhY3Qgb25lIGZyb20gdGhlIHNpemUgYW5kIHRydW5jYXRlIGJhY2sKLQkgKiB0byBhIGJsb2NrIGJvdW5kYXJ5LiAgV2Ugc3VidHJhY3QgMSBpbiBjYXNlIHRoZSBzaXplIGlzCi0JICogZXhhY3RseSBvbiBhIGJsb2NrIGJvdW5kYXJ5LgotCSAqLwotCWxhc3RfZnNiID0gaXNpemUgPyBYRlNfQl9UT19GU0JUKG1wLCBpc2l6ZSAtIDEpIDogKHhmc19maWxlb2ZmX3QpLTE7Ci0Jc3RhcnRfemVyb19mc2IgPSBYRlNfQl9UT19GU0IobXAsICh4ZnNfdWZzaXplX3QpaXNpemUpOwotCWVuZF96ZXJvX2ZzYiA9IFhGU19CX1RPX0ZTQlQobXAsIG9mZnNldCAtIDEpOwotCUFTU0VSVCgoeGZzX3NmaWxvZmZfdClsYXN0X2ZzYiA8ICh4ZnNfc2ZpbG9mZl90KXN0YXJ0X3plcm9fZnNiKTsKLQlpZiAobGFzdF9mc2IgPT0gZW5kX3plcm9fZnNiKSB7Ci0JCS8qCi0JCSAqIFRoZSBzaXplIHdhcyBvbmx5IGluY3JlbWVudGVkIG9uIGl0cyBsYXN0IGJsb2NrLgotCQkgKiBXZSB0b29rIGNhcmUgb2YgdGhhdCBhYm92ZSwgc28ganVzdCByZXR1cm4uCi0JCSAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlBU1NFUlQoc3RhcnRfemVyb19mc2IgPD0gZW5kX3plcm9fZnNiKTsKLQl3aGlsZSAoc3RhcnRfemVyb19mc2IgPD0gZW5kX3plcm9fZnNiKSB7Ci0JCW5pbWFwcyA9IDE7Ci0JCXplcm9fY291bnRfZnNiID0gZW5kX3plcm9fZnNiIC0gc3RhcnRfemVyb19mc2IgKyAxOwotCQllcnJvciA9IHhmc19ibWFwaShOVUxMLCBpcCwgc3RhcnRfemVyb19mc2IsIHplcm9fY291bnRfZnNiLAotCQkJCSAgMCwgTlVMTCwgMCwgJmltYXAsICZuaW1hcHMsIE5VTEwsIE5VTEwpOwotCQlpZiAoZXJyb3IpIHsKLQkJCUFTU0VSVCh4ZnNfaXNpbG9ja2VkKGlwLCBYRlNfSUxPQ0tfRVhDTHxYRlNfSU9MT0NLX0VYQ0wpKTsKLQkJCXJldHVybiBlcnJvcjsKLQkJfQotCQlBU1NFUlQobmltYXBzID4gMCk7Ci0KLQkJaWYgKGltYXAuYnJfc3RhdGUgPT0gWEZTX0VYVF9VTldSSVRURU4gfHwKLQkJICAgIGltYXAuYnJfc3RhcnRibG9jayA9PSBIT0xFU1RBUlRCTE9DSykgewotCQkJLyoKLQkJCSAqIFRoaXMgbG9vcCBoYW5kbGVzIGluaXRpYWxpemluZyBwYWdlcyB0aGF0IHdlcmUKLQkJCSAqIHBhcnRpYWxseSBpbml0aWFsaXplZCBieSB0aGUgY29kZSBiZWxvdyB0aGlzCi0JCQkgKiBsb29wLiBJdCBiYXNpY2FsbHkgemVyb2VzIHRoZSBwYXJ0IG9mIHRoZSBwYWdlCi0JCQkgKiB0aGF0IHNpdHMgb24gYSBob2xlIGFuZCBzZXRzIHRoZSBwYWdlIGFzIFBfSE9MRQotCQkJICogYW5kIGNhbGxzIHJlbWFwZiBpZiBpdCBpcyBhIG1hcHBlZCBmaWxlLgotCQkJICovCi0JCQlzdGFydF96ZXJvX2ZzYiA9IGltYXAuYnJfc3RhcnRvZmYgKyBpbWFwLmJyX2Jsb2NrY291bnQ7Ci0JCQlBU1NFUlQoc3RhcnRfemVyb19mc2IgPD0gKGVuZF96ZXJvX2ZzYiArIDEpKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyoKLQkJICogVGhlcmUgYXJlIGJsb2NrcyB3ZSBuZWVkIHRvIHplcm8uCi0JCSAqIERyb3AgdGhlIGlub2RlIGxvY2sgd2hpbGUgd2UncmUgZG9pbmcgdGhlIEkvTy4KLQkJICogV2UnbGwgc3RpbGwgaGF2ZSB0aGUgaW9sb2NrIHRvIHByb3RlY3QgdXMuCi0JCSAqLwotCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCi0JCXplcm9fb2ZmID0gWEZTX0ZTQl9UT19CKG1wLCBzdGFydF96ZXJvX2ZzYik7Ci0JCXplcm9fbGVuID0gWEZTX0ZTQl9UT19CKG1wLCBpbWFwLmJyX2Jsb2NrY291bnQpOwotCi0JCWlmICgoemVyb19vZmYgKyB6ZXJvX2xlbikgPiBvZmZzZXQpCi0JCQl6ZXJvX2xlbiA9IG9mZnNldCAtIHplcm9fb2ZmOwotCi0JCWVycm9yID0geGZzX2lvemVybyhpcCwgemVyb19vZmYsIHplcm9fbGVuKTsKLQkJaWYgKGVycm9yKSB7Ci0JCQlnb3RvIG91dF9sb2NrOwotCQl9Ci0KLQkJc3RhcnRfemVyb19mc2IgPSBpbWFwLmJyX3N0YXJ0b2ZmICsgaW1hcC5icl9ibG9ja2NvdW50OwotCQlBU1NFUlQoc3RhcnRfemVyb19mc2IgPD0gKGVuZF96ZXJvX2ZzYiArIDEpKTsKLQotCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotb3V0X2xvY2s6Ci0JeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JQVNTRVJUKGVycm9yID49IDApOwotCXJldHVybiBlcnJvcjsKLX0KLQotc3NpemVfdAkJCQkvKiBieXRlcyB3cml0dGVuLCBvciAoLSkgZXJyb3IgKi8KLXhmc193cml0ZSgKLQlzdHJ1Y3QgeGZzX2lub2RlCSp4aXAsCi0Jc3RydWN0IGtpb2NiCQkqaW9jYiwKLQljb25zdCBzdHJ1Y3QgaW92ZWMJKmlvdnAsCi0JdW5zaWduZWQgaW50CQluc2VncywKLQlsb2ZmX3QJCQkqb2Zmc2V0LAotCWludAkJCWlvZmxhZ3MpCi17Ci0Jc3RydWN0IGZpbGUJCSpmaWxlID0gaW9jYi0+a2lfZmlscDsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZQkqbWFwcGluZyA9IGZpbGUtPmZfbWFwcGluZzsKLQlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IG1hcHBpbmctPmhvc3Q7Ci0JdW5zaWduZWQgbG9uZwkJc2VncyA9IG5zZWdzOwotCXhmc19tb3VudF90CQkqbXA7Ci0Jc3NpemVfdAkJCXJldCA9IDAsIGVycm9yID0gMDsKLQl4ZnNfZnNpemVfdAkJaXNpemUsIG5ld19zaXplOwotCWludAkJCWlvbG9jazsKLQlpbnQJCQlldmVudHNlbnQgPSAwOwotCXNpemVfdAkJCW9jb3VudCA9IDAsIGNvdW50OwotCWxvZmZfdAkJCXBvczsKLQlpbnQJCQluZWVkX2lfbXV0ZXg7Ci0KLQlYRlNfU1RBVFNfSU5DKHhzX3dyaXRlX2NhbGxzKTsKLQotCWVycm9yID0gZ2VuZXJpY19zZWdtZW50X2NoZWNrcyhpb3ZwLCAmc2VncywgJm9jb3VudCwgVkVSSUZZX1JFQUQpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JY291bnQgPSBvY291bnQ7Ci0JcG9zID0gKm9mZnNldDsKLQotCWlmIChjb3VudCA9PSAwKQotCQlyZXR1cm4gMDsKLQotCW1wID0geGlwLT5pX21vdW50OwotCi0JeGZzX3dhaXRfZm9yX2ZyZWV6ZShtcCwgU0JfRlJFRVpFX1dSSVRFKTsKLQotCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKLQkJcmV0dXJuIC1FSU87Ci0KLXJlbG9jazoKLQlpZiAoaW9mbGFncyAmIElPX0lTRElSRUNUKSB7Ci0JCWlvbG9jayA9IFhGU19JT0xPQ0tfU0hBUkVEOwotCQluZWVkX2lfbXV0ZXggPSAwOwotCX0gZWxzZSB7Ci0JCWlvbG9jayA9IFhGU19JT0xPQ0tfRVhDTDsKLQkJbmVlZF9pX211dGV4ID0gMTsKLQkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCX0KLQotCXhmc19pbG9jayh4aXAsIFhGU19JTE9DS19FWENMfGlvbG9jayk7Ci0KLXN0YXJ0OgotCWVycm9yID0gLWdlbmVyaWNfd3JpdGVfY2hlY2tzKGZpbGUsICZwb3MsICZjb3VudCwKLQkJCQkJU19JU0JMSyhpbm9kZS0+aV9tb2RlKSk7Ci0JaWYgKGVycm9yKSB7Ci0JCXhmc19pdW5sb2NrKHhpcCwgWEZTX0lMT0NLX0VYQ0x8aW9sb2NrKTsKLQkJZ290byBvdXRfdW5sb2NrX211dGV4OwotCX0KLQotCWlmICgoRE1fRVZFTlRfRU5BQkxFRCh4aXAsIERNX0VWRU5UX1dSSVRFKSAmJgotCSAgICAhKGlvZmxhZ3MgJiBJT19JTlZJUykgJiYgIWV2ZW50c2VudCkpIHsKLQkJaW50CQlkbWZsYWdzID0gRklMUF9ERUxBWV9GTEFHKGZpbGUpOwotCi0JCWlmIChuZWVkX2lfbXV0ZXgpCi0JCQlkbWZsYWdzIHw9IERNX0ZMQUdTX0lNVVg7Ci0KLQkJeGZzX2l1bmxvY2soeGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JCWVycm9yID0gWEZTX1NFTkRfREFUQSh4aXAtPmlfbW91bnQsIERNX0VWRU5UX1dSSVRFLCB4aXAsCi0JCQkJICAgICAgcG9zLCBjb3VudCwgZG1mbGFncywgJmlvbG9jayk7Ci0JCWlmIChlcnJvcikgewotCQkJZ290byBvdXRfdW5sb2NrX2ludGVybmFsOwotCQl9Ci0JCXhmc19pbG9jayh4aXAsIFhGU19JTE9DS19FWENMKTsKLQkJZXZlbnRzZW50ID0gMTsKLQotCQkvKgotCQkgKiBUaGUgaW9sb2NrIHdhcyBkcm9wcGVkIGFuZCByZWFjcXVpcmVkIGluIFhGU19TRU5EX0RBVEEKLQkJICogc28gd2UgaGF2ZSB0byByZWNoZWNrIHRoZSBzaXplIHdoZW4gYXBwZW5kaW5nLgotCQkgKiBXZSB3aWxsIG9ubHkgImdvdG8gc3RhcnQ7IiBvbmNlLCBzaW5jZSBoYXZpbmcgc2VudCB0aGUKLQkJICogZXZlbnQgcHJldmVudHMgYW5vdGhlciBjYWxsIHRvIFhGU19TRU5EX0RBVEEsIHdoaWNoIGlzCi0JCSAqIHdoYXQgYWxsb3dzIHRoZSBzaXplIHRvIGNoYW5nZSBpbiB0aGUgZmlyc3QgcGxhY2UuCi0JCSAqLwotCQlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0FQUEVORCkgJiYgcG9zICE9IHhpcC0+aV9zaXplKQotCQkJZ290byBzdGFydDsKLQl9Ci0KLQlpZiAoaW9mbGFncyAmIElPX0lTRElSRUNUKSB7Ci0JCXhmc19idWZ0YXJnX3QJKnRhcmdldCA9Ci0JCQlYRlNfSVNfUkVBTFRJTUVfSU5PREUoeGlwKSA/Ci0JCQkJbXAtPm1fcnRkZXZfdGFyZ3AgOiBtcC0+bV9kZGV2X3RhcmdwOwotCi0JCWlmICgocG9zICYgdGFyZ2V0LT5idF9zbWFzaykgfHwgKGNvdW50ICYgdGFyZ2V0LT5idF9zbWFzaykpIHsKLQkJCXhmc19pdW5sb2NrKHhpcCwgWEZTX0lMT0NLX0VYQ0x8aW9sb2NrKTsKLQkJCXJldHVybiBYRlNfRVJST1IoLUVJTlZBTCk7Ci0JCX0KLQotCQlpZiAoIW5lZWRfaV9tdXRleCAmJiAobWFwcGluZy0+bnJwYWdlcyB8fCBwb3MgPiB4aXAtPmlfc2l6ZSkpIHsKLQkJCXhmc19pdW5sb2NrKHhpcCwgWEZTX0lMT0NLX0VYQ0x8aW9sb2NrKTsKLQkJCWlvbG9jayA9IFhGU19JT0xPQ0tfRVhDTDsKLQkJCW5lZWRfaV9tdXRleCA9IDE7Ci0JCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JCQl4ZnNfaWxvY2soeGlwLCBYRlNfSUxPQ0tfRVhDTHxpb2xvY2spOwotCQkJZ290byBzdGFydDsKLQkJfQotCX0KLQotCW5ld19zaXplID0gcG9zICsgY291bnQ7Ci0JaWYgKG5ld19zaXplID4geGlwLT5pX3NpemUpCi0JCXhpcC0+aV9uZXdfc2l6ZSA9IG5ld19zaXplOwotCi0JaWYgKGxpa2VseSghKGlvZmxhZ3MgJiBJT19JTlZJUykpKQotCQlmaWxlX3VwZGF0ZV90aW1lKGZpbGUpOwotCi0JLyoKLQkgKiBJZiB0aGUgb2Zmc2V0IGlzIGJleW9uZCB0aGUgc2l6ZSBvZiB0aGUgZmlsZSwgd2UgaGF2ZSBhIGNvdXBsZQotCSAqIG9mIHRoaW5ncyB0byBkby4gRmlyc3QsIGlmIHRoZXJlIGlzIGFscmVhZHkgc3BhY2UgYWxsb2NhdGVkCi0JICogd2UgbmVlZCB0byBlaXRoZXIgY3JlYXRlIGhvbGVzIG9yIHplcm8gdGhlIGRpc2sgb3IgLi4uCi0JICoKLQkgKiBJZiB0aGVyZSBpcyBhIHBhZ2Ugd2hlcmUgdGhlIHByZXZpb3VzIHNpemUgbGFuZHMsIHdlIG5lZWQKLQkgKiB0byB6ZXJvIGl0IG91dCB1cCB0byB0aGUgbmV3IHNpemUuCi0JICovCi0KLQlpZiAocG9zID4geGlwLT5pX3NpemUpIHsKLQkJZXJyb3IgPSB4ZnNfemVyb19lb2YoeGlwLCBwb3MsIHhpcC0+aV9zaXplKTsKLQkJaWYgKGVycm9yKSB7Ci0JCQl4ZnNfaXVubG9jayh4aXAsIFhGU19JTE9DS19FWENMKTsKLQkJCWdvdG8gb3V0X3VubG9ja19pbnRlcm5hbDsKLQkJfQotCX0KLQl4ZnNfaXVubG9jayh4aXAsIFhGU19JTE9DS19FWENMKTsKLQotCS8qCi0JICogSWYgd2UncmUgd3JpdGluZyB0aGUgZmlsZSB0aGVuIG1ha2Ugc3VyZSB0byBjbGVhciB0aGUKLQkgKiBzZXR1aWQgYW5kIHNldGdpZCBiaXRzIGlmIHRoZSBwcm9jZXNzIGlzIG5vdCBiZWluZyBydW4KLQkgKiBieSByb290LiAgVGhpcyBrZWVwcyBwZW9wbGUgZnJvbSBtb2RpZnlpbmcgc2V0dWlkIGFuZAotCSAqIHNldGdpZCBiaW5hcmllcy4KLQkgKi8KLQllcnJvciA9IC1maWxlX3JlbW92ZV9zdWlkKGZpbGUpOwotCWlmICh1bmxpa2VseShlcnJvcikpCi0JCWdvdG8gb3V0X3VubG9ja19pbnRlcm5hbDsKLQotCS8qIFdlIGNhbiB3cml0ZSBiYWNrIHRoaXMgcXVldWUgaW4gcGFnZSByZWNsYWltICovCi0JY3VycmVudC0+YmFja2luZ19kZXZfaW5mbyA9IG1hcHBpbmctPmJhY2tpbmdfZGV2X2luZm87Ci0KLQlpZiAoKGlvZmxhZ3MgJiBJT19JU0RJUkVDVCkpIHsKLQkJaWYgKG1hcHBpbmctPm5ycGFnZXMpIHsKLQkJCVdBUk5fT04obmVlZF9pX211dGV4ID09IDApOwotCQkJZXJyb3IgPSB4ZnNfZmx1c2hpbnZhbF9wYWdlcyh4aXAsCi0JCQkJCShwb3MgJiBQQUdFX0NBQ0hFX01BU0spLAotCQkJCQktMSwgRklfUkVNQVBGX0xPQ0tFRCk7Ci0JCQlpZiAoZXJyb3IpCi0JCQkJZ290byBvdXRfdW5sb2NrX2ludGVybmFsOwotCQl9Ci0KLQkJaWYgKG5lZWRfaV9tdXRleCkgewotCQkJLyogZGVtb3RlIHRoZSBsb2NrIG5vdyB0aGUgY2FjaGVkIHBhZ2VzIGFyZSBnb25lICovCi0JCQl4ZnNfaWxvY2tfZGVtb3RlKHhpcCwgWEZTX0lPTE9DS19FWENMKTsKLQkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCi0JCQlpb2xvY2sgPSBYRlNfSU9MT0NLX1NIQVJFRDsKLQkJCW5lZWRfaV9tdXRleCA9IDA7Ci0JCX0KLQotCQl0cmFjZV94ZnNfZmlsZV9kaXJlY3Rfd3JpdGUoeGlwLCBjb3VudCwgKm9mZnNldCwgaW9mbGFncyk7Ci0JCXJldCA9IGdlbmVyaWNfZmlsZV9kaXJlY3Rfd3JpdGUoaW9jYiwgaW92cCwKLQkJCQkmc2VncywgcG9zLCBvZmZzZXQsIGNvdW50LCBvY291bnQpOwotCi0JCS8qCi0JCSAqIGRpcmVjdC1pbyB3cml0ZSB0byBhIGhvbGU6IGZhbGwgdGhyb3VnaCB0byBidWZmZXJlZCBJL08KLQkJICogZm9yIGNvbXBsZXRpbmcgdGhlIHJlc3Qgb2YgdGhlIHJlcXVlc3QuCi0JCSAqLwotCQlpZiAocmV0ID49IDAgJiYgcmV0ICE9IGNvdW50KSB7Ci0JCQlYRlNfU1RBVFNfQUREKHhzX3dyaXRlX2J5dGVzLCByZXQpOwotCi0JCQlwb3MgKz0gcmV0OwotCQkJY291bnQgLT0gcmV0OwotCi0JCQlpb2ZsYWdzICY9IH5JT19JU0RJUkVDVDsKLQkJCXhmc19pdW5sb2NrKHhpcCwgaW9sb2NrKTsKLQkJCWdvdG8gcmVsb2NrOwotCQl9Ci0JfSBlbHNlIHsKLQkJaW50IGVub3NwYyA9IDA7Ci0JCXNzaXplX3QgcmV0MiA9IDA7Ci0KLXdyaXRlX3JldHJ5OgotCQl0cmFjZV94ZnNfZmlsZV9idWZmZXJlZF93cml0ZSh4aXAsIGNvdW50LCAqb2Zmc2V0LCBpb2ZsYWdzKTsKLQkJcmV0MiA9IGdlbmVyaWNfZmlsZV9idWZmZXJlZF93cml0ZShpb2NiLCBpb3ZwLCBzZWdzLAotCQkJCXBvcywgb2Zmc2V0LCBjb3VudCwgcmV0KTsKLQkJLyoKLQkJICogaWYgd2UganVzdCBnb3QgYW4gRU5PU1BDLCBmbHVzaCB0aGUgaW5vZGUgbm93IHdlCi0JCSAqIGFyZW4ndCBob2xkaW5nIGFueSBwYWdlIGxvY2tzIGFuZCByZXRyeSAqb25jZSoKLQkJICovCi0JCWlmIChyZXQyID09IC1FTk9TUEMgJiYgIWVub3NwYykgewotCQkJZXJyb3IgPSB4ZnNfZmx1c2hfcGFnZXMoeGlwLCAwLCAtMSwgMCwgRklfTk9ORSk7Ci0JCQlpZiAoZXJyb3IpCi0JCQkJZ290byBvdXRfdW5sb2NrX2ludGVybmFsOwotCQkJZW5vc3BjID0gMTsKLQkJCWdvdG8gd3JpdGVfcmV0cnk7Ci0JCX0KLQkJcmV0ID0gcmV0MjsKLQl9Ci0KLQljdXJyZW50LT5iYWNraW5nX2Rldl9pbmZvID0gTlVMTDsKLQotCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCWlmICh1bmxpa2VseShyZXQgPCAwICYmIHJldCAhPSAtRUZBVUxUICYmICpvZmZzZXQgPiBpc2l6ZSkpCi0JCSpvZmZzZXQgPSBpc2l6ZTsKLQotCWlmICgqb2Zmc2V0ID4geGlwLT5pX3NpemUpIHsKLQkJeGZzX2lsb2NrKHhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCQlpZiAoKm9mZnNldCA+IHhpcC0+aV9zaXplKQotCQkJeGlwLT5pX3NpemUgPSAqb2Zmc2V0OwotCQl4ZnNfaXVubG9jayh4aXAsIFhGU19JTE9DS19FWENMKTsKLQl9Ci0KLQlpZiAocmV0ID09IC1FTk9TUEMgJiYKLQkgICAgRE1fRVZFTlRfRU5BQkxFRCh4aXAsIERNX0VWRU5UX05PU1BBQ0UpICYmICEoaW9mbGFncyAmIElPX0lOVklTKSkgewotCQl4ZnNfaXVubG9jayh4aXAsIGlvbG9jayk7Ci0JCWlmIChuZWVkX2lfbXV0ZXgpCi0JCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQkJZXJyb3IgPSBYRlNfU0VORF9OQU1FU1AoeGlwLT5pX21vdW50LCBETV9FVkVOVF9OT1NQQUNFLCB4aXAsCi0JCQkJRE1fUklHSFRfTlVMTCwgeGlwLCBETV9SSUdIVF9OVUxMLCBOVUxMLCBOVUxMLAotCQkJCTAsIDAsIDApOyAvKiBEZWxheSBmbGFnIGludGVudGlvbmFsbHkgIHVudXNlZCAqLwotCQlpZiAobmVlZF9pX211dGV4KQotCQkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCQl4ZnNfaWxvY2soeGlwLCBpb2xvY2spOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dF91bmxvY2tfaW50ZXJuYWw7Ci0JCWdvdG8gc3RhcnQ7Ci0JfQotCi0JZXJyb3IgPSAtcmV0OwotCWlmIChyZXQgPD0gMCkKLQkJZ290byBvdXRfdW5sb2NrX2ludGVybmFsOwotCi0JWEZTX1NUQVRTX0FERCh4c193cml0ZV9ieXRlcywgcmV0KTsKLQotCS8qIEhhbmRsZSB2YXJpb3VzIFNZTkMtdHlwZSB3cml0ZXMgKi8KLQlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0RTWU5DKSB8fCBJU19TWU5DKGlub2RlKSkgewotCQlsb2ZmX3QgZW5kID0gcG9zICsgcmV0IC0gMTsKLQkJaW50IGVycm9yMjsKLQotCQl4ZnNfaXVubG9jayh4aXAsIGlvbG9jayk7Ci0JCWlmIChuZWVkX2lfbXV0ZXgpCi0JCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQotCQllcnJvcjIgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKG1hcHBpbmcsIHBvcywgZW5kKTsKLQkJaWYgKCFlcnJvcikKLQkJCWVycm9yID0gZXJyb3IyOwotCQlpZiAobmVlZF9pX211dGV4KQotCQkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCQl4ZnNfaWxvY2soeGlwLCBpb2xvY2spOwotCi0JCWVycm9yMiA9IHhmc19mc3luYyh4aXApOwotCQlpZiAoIWVycm9yKQotCQkJZXJyb3IgPSBlcnJvcjI7Ci0JfQotCi0gb3V0X3VubG9ja19pbnRlcm5hbDoKLQlpZiAoeGlwLT5pX25ld19zaXplKSB7Ci0JCXhmc19pbG9jayh4aXAsIFhGU19JTE9DS19FWENMKTsKLQkJeGlwLT5pX25ld19zaXplID0gMDsKLQkJLyoKLQkJICogSWYgdGhpcyB3YXMgYSBkaXJlY3Qgb3Igc3luY2hyb25vdXMgSS9PIHRoYXQgZmFpbGVkIChzdWNoCi0JCSAqIGFzIEVOT1NQQykgdGhlbiBwYXJ0IG9mIHRoZSBJL08gbWF5IGhhdmUgYmVlbiB3cml0dGVuIHRvCi0JCSAqIGRpc2sgYmVmb3JlIHRoZSBlcnJvciBvY2N1cmVkLiAgSW4gdGhpcyBjYXNlIHRoZSBvbi1kaXNrCi0JCSAqIGZpbGUgc2l6ZSBtYXkgaGF2ZSBiZWVuIGFkanVzdGVkIGJleW9uZCB0aGUgaW4tbWVtb3J5IGZpbGUKLQkJICogc2l6ZSBhbmQgbm93IG5lZWRzIHRvIGJlIHRydW5jYXRlZCBiYWNrLgotCQkgKi8KLQkJaWYgKHhpcC0+aV9kLmRpX3NpemUgPiB4aXAtPmlfc2l6ZSkKLQkJCXhpcC0+aV9kLmRpX3NpemUgPSB4aXAtPmlfc2l6ZTsKLQkJeGZzX2l1bmxvY2soeGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JfQotCXhmc19pdW5sb2NrKHhpcCwgaW9sb2NrKTsKLSBvdXRfdW5sb2NrX211dGV4OgotCWlmIChuZWVkX2lfbXV0ZXgpCi0JCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCXJldHVybiAtZXJyb3I7Ci19Ci0KLS8qCi0gKiBJZiB0aGUgdW5kZXJseWluZyAoZGF0YS9sb2cvcnQpIGRldmljZSBpcyByZWFkb25seSwgdGhlcmUgYXJlIHNvbWUKLSAqIG9wZXJhdGlvbnMgdGhhdCBjYW5ub3QgcHJvY2VlZC4KLSAqLwotaW50Ci14ZnNfZGV2X2lzX3JlYWRfb25seSgKLQl4ZnNfbW91bnRfdAkJKm1wLAotCWNoYXIJCQkqbWVzc2FnZSkKLXsKLQlpZiAoeGZzX3JlYWRvbmx5X2J1ZnRhcmcobXAtPm1fZGRldl90YXJncCkgfHwKLQkgICAgeGZzX3JlYWRvbmx5X2J1ZnRhcmcobXAtPm1fbG9nZGV2X3RhcmdwKSB8fAotCSAgICAobXAtPm1fcnRkZXZfdGFyZ3AgJiYgeGZzX3JlYWRvbmx5X2J1ZnRhcmcobXAtPm1fcnRkZXZfdGFyZ3ApKSkgewotCQljbW5fZXJyKENFX05PVEUsCi0JCQkiWEZTOiAlcyByZXF1aXJlZCBvbiByZWFkLW9ubHkgZGV2aWNlLiIsIG1lc3NhZ2UpOwotCQljbW5fZXJyKENFX05PVEUsCi0JCQkiWEZTOiB3cml0ZSBhY2Nlc3MgdW5hdmFpbGFibGUsIGNhbm5vdCBwcm9jZWVkLiIpOwotCQlyZXR1cm4gRVJPRlM7Ci0JfQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmggYi9mcy94ZnMvbGludXgtMi42L3hmc19scncuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQyYWU4Yy4uMDAwMDAwMAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuaAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMywyMDA1IFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogSW5jLiwgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLSNpZm5kZWYgX19YRlNfTFJXX0hfXwotI2RlZmluZSBfX1hGU19MUldfSF9fCi0KLXN0cnVjdCB4ZnNfbW91bnQ7Ci1zdHJ1Y3QgeGZzX2lub2RlOwotc3RydWN0IHhmc19idWY7Ci0KLWV4dGVybiBpbnQgeGZzX2Rldl9pc19yZWFkX29ubHkoc3RydWN0IHhmc19tb3VudCAqLCBjaGFyICopOwotCi1leHRlcm4gaW50IHhmc196ZXJvX2VvZihzdHJ1Y3QgeGZzX2lub2RlICosIHhmc19vZmZfdCwgeGZzX2ZzaXplX3QpOwotCi0jZW5kaWYJLyogX19YRlNfTFJXX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jCmluZGV4IGE5ZjZkMjAuLjA1Y2Q4NTMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMKQEAgLTYwNyw3ICs2MDcsOCBAQAogCXNldF9mcmVlemFibGUoKTsKIAl0aW1lbGVmdCA9IHhmc19zeW5jZF9jZW50aXNlY3MgKiBtc2Vjc190b19qaWZmaWVzKDEwKTsKIAlmb3IgKDs7KSB7Ci0JCXRpbWVsZWZ0ID0gc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKHRpbWVsZWZ0KTsKKwkJaWYgKGxpc3RfZW1wdHkoJm1wLT5tX3N5bmNfbGlzdCkpCisJCQl0aW1lbGVmdCA9IHNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSh0aW1lbGVmdCk7CiAJCS8qIHN3c3VzcCAqLwogCQl0cnlfdG9fZnJlZXplKCk7CiAJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgJiYgbGlzdF9lbXB0eSgmbXAtPm1fc3luY19saXN0KSkKQEAgLTYyNyw4ICs2MjgsNyBAQAogCQkJbGlzdF9hZGRfdGFpbCgmbXAtPm1fc3luY193b3JrLndfbGlzdCwKIAkJCQkJJm1wLT5tX3N5bmNfbGlzdCk7CiAJCX0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHdvcmssIG4sICZtcC0+bV9zeW5jX2xpc3QsIHdfbGlzdCkKLQkJCWxpc3RfbW92ZSgmd29yay0+d19saXN0LCAmdG1wKTsKKwkJbGlzdF9zcGxpY2VfaW5pdCgmbXAtPm1fc3luY19saXN0LCAmdG1wKTsKIAkJc3Bpbl91bmxvY2soJm1wLT5tX3N5bmNfbG9jayk7CiAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHdvcmssIG4sICZ0bXAsIHdfbGlzdCkgewpAQCAtNjg4LDEyICs2ODgsMTIgQEAKIAlzdHJ1Y3QgeGZzX3BlcmFnICpwYWc7CiAKIAlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBYRlNfSU5PX1RPX0FHTk8obXAsIGlwLT5pX2lubykpOwotCXJlYWRfbG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOworCXdyaXRlX2xvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKIAlzcGluX2xvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwogCV9feGZzX2lub2RlX3NldF9yZWNsYWltX3RhZyhwYWcsIGlwKTsKIAlfX3hmc19pZmxhZ3Nfc2V0KGlwLCBYRlNfSVJFQ0xBSU1BQkxFKTsKIAlzcGluX3VubG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7Ci0JcmVhZF91bmxvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKKwl3cml0ZV91bmxvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKIAl4ZnNfcGVyYWdfcHV0KHBhZyk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc190cmFjZS5jCmluZGV4IDg1NmViM2MuLjVhMTA3NjAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdHJhY2UuYwpAQCAtNTIsMjIgKzUyLDYgQEAKICNpbmNsdWRlICJxdW90YS94ZnNfZHF1b3QuaCIKIAogLyoKLSAqIEZvcm1hdCBmc2Jsb2NrIG51bWJlciBpbnRvIGEgc3RhdGljIGJ1ZmZlciAmIHJldHVybiBpdC4KLSAqLwotU1RBVElDIGNoYXIgKnhmc19mbXRmc2Jsb2NrKHhmc19mc2Jsb2NrX3QgYm5vKQotewotCXN0YXRpYyBjaGFyIHJ2YWxbNTBdOwotCi0JaWYgKGJubyA9PSBOVUxMRlNCTE9DSykKLQkJc3ByaW50ZihydmFsLCAiTlVMTEZTQkxPQ0siKTsKLQllbHNlIGlmIChpc251bGxzdGFydGJsb2NrKGJubykpCi0JCXNwcmludGYocnZhbCwgIk5VTExTVEFSVEJMT0NLKCVsbGQpIiwgc3RhcnRibG9ja3ZhbChibm8pKTsKLQllbHNlCi0JCXNwcmludGYocnZhbCwgIiVsbGQiLCAoeGZzX2Rmc2Jub190KWJubyk7Ci0JcmV0dXJuIHJ2YWw7Ci19Ci0KLS8qCiAgKiBXZSBpbmNsdWRlIHRoaXMgbGFzdCB0byBoYXZlIHRoZSBoZWxwZXJzIGFib3ZlIGF2YWlsYWJsZSBmb3IgdGhlIHRyYWNlCiAgKiBldmVudCBpbXBsZW1lbnRhdGlvbnMuCiAgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmggYi9mcy94ZnMvbGludXgtMi42L3hmc190cmFjZS5oCmluZGV4IGE0NTc0ZGMuLmZjYWE2MmYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdHJhY2UuaApAQCAtMTk3LDEzICsxOTcsMTMgQEAKIAkJX19lbnRyeS0+Y2FsbGVyX2lwID0gY2FsbGVyX2lwOwogCSksCiAJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgaW5vIDB4JWxseCBzdGF0ZSAlcyBpZHggJWxkICIKLQkJICAib2Zmc2V0ICVsbGQgYmxvY2sgJXMgY291bnQgJWxsZCBmbGFnICVkIGNhbGxlciAlcGYiLAorCQkgICJvZmZzZXQgJWxsZCBibG9jayAlbGxkIGNvdW50ICVsbGQgZmxhZyAlZCBjYWxsZXIgJXBmIiwKIAkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLAogCQkgIF9fZW50cnktPmlubywKIAkJICBfX3ByaW50X2ZsYWdzKF9fZW50cnktPmJtYXBfc3RhdGUsICJ8IiwgWEZTX0JNQVBfRVhUX0ZMQUdTKSwKIAkJICAobG9uZylfX2VudHJ5LT5pZHgsCiAJCSAgX19lbnRyeS0+c3RhcnRvZmYsCi0JCSAgeGZzX2ZtdGZzYmxvY2soX19lbnRyeS0+c3RhcnRibG9jayksCisJCSAgKF9faW50NjRfdClfX2VudHJ5LT5zdGFydGJsb2NrLAogCQkgIF9fZW50cnktPmJsb2NrY291bnQsCiAJCSAgX19lbnRyeS0+c3RhdGUsCiAJCSAgKGNoYXIgKilfX2VudHJ5LT5jYWxsZXJfaXApCkBAIC0yNDEsMTMgKzI0MSwxMyBAQAogCQlfX2VudHJ5LT5jYWxsZXJfaXAgPSBjYWxsZXJfaXA7CiAJKSwKIAlUUF9wcmludGsoImRldiAlZDolZCBpbm8gMHglbGx4IHN0YXRlICVzIGlkeCAlbGQgIgotCQkgICJvZmZzZXQgJWxsZCBibG9jayAlcyBjb3VudCAlbGxkIGZsYWcgJWQgY2FsbGVyICVwZiIsCisJCSAgIm9mZnNldCAlbGxkIGJsb2NrICVsbGQgY291bnQgJWxsZCBmbGFnICVkIGNhbGxlciAlcGYiLAogCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksCiAJCSAgX19lbnRyeS0+aW5vLAogCQkgIF9fcHJpbnRfZmxhZ3MoX19lbnRyeS0+Ym1hcF9zdGF0ZSwgInwiLCBYRlNfQk1BUF9FWFRfRkxBR1MpLAogCQkgIChsb25nKV9fZW50cnktPmlkeCwKIAkJICBfX2VudHJ5LT5zdGFydG9mZiwKLQkJICB4ZnNfZm10ZnNibG9jayhfX2VudHJ5LT5zdGFydGJsb2NrKSwKKwkJICAoX19pbnQ2NF90KV9fZW50cnktPnN0YXJ0YmxvY2ssCiAJCSAgX19lbnRyeS0+YmxvY2tjb3VudCwKIAkJICBfX2VudHJ5LT5zdGF0ZSwKIAkJICAoY2hhciAqKV9fZW50cnktPmNhbGxlcl9pcCkKQEAgLTU5Myw3ICs1OTMsNyBAQAogCVRQX0FSR1MoZHFwKSwKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlfX2ZpZWxkKGRldl90LCBkZXYpCi0JCV9fZmllbGQoX19iZTMyLCBpZCkKKwkJX19maWVsZCh1MzIsIGlkKQogCQlfX2ZpZWxkKHVuc2lnbmVkLCBmbGFncykKIAkJX19maWVsZCh1bnNpZ25lZCwgbnJlZnMpCiAJCV9fZmllbGQodW5zaWduZWQgbG9uZyBsb25nLCByZXNfYmNvdW50KQpAQCAtNjA2LDcgKzYwNiw3IEBACiAJKSwgXAogCVRQX2Zhc3RfYXNzaWduKAogCQlfX2VudHJ5LT5kZXYgPSBkcXAtPnFfbW91bnQtPm1fc3VwZXItPnNfZGV2OwotCQlfX2VudHJ5LT5pZCA9IGRxcC0+cV9jb3JlLmRfaWQ7CisJCV9fZW50cnktPmlkID0gYmUzMl90b19jcHUoZHFwLT5xX2NvcmUuZF9pZCk7CiAJCV9fZW50cnktPmZsYWdzID0gZHFwLT5kcV9mbGFnczsKIAkJX19lbnRyeS0+bnJlZnMgPSBkcXAtPnFfbnJlZnM7CiAJCV9fZW50cnktPnJlc19iY291bnQgPSBkcXAtPnFfcmVzX2Jjb3VudDsKQEAgLTYyMiwxMCArNjIyLDEwIEBACiAJCQliZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2lub19zb2Z0bGltaXQpOwogCSksCiAJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgaWQgMHgleCBmbGFncyAlcyBucmVmcyAldSByZXNfYmMgMHglbGx4ICIKLQkJICAiYmNudCAweCVsbHggW2hhcmQgMHglbGx4IHwgc29mdCAweCVsbHhdICIKLQkJICAiaWNudCAweCVsbHggW2hhcmQgMHglbGx4IHwgc29mdCAweCVsbHhdIiwKKwkJICAiYmNudCAweCVsbHggYmhhcmRsaW1pdCAweCVsbHggYnNvZnRsaW1pdCAweCVsbHggIgorCQkgICJpY250IDB4JWxseCBpaGFyZGxpbWl0IDB4JWxseCBpc29mdGxpbWl0IDB4JWxseF0iLAogCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksCi0JCSAgYmUzMl90b19jcHUoX19lbnRyeS0+aWQpLAorCQkgIF9fZW50cnktPmlkLAogCQkgIF9fcHJpbnRfZmxhZ3MoX19lbnRyeS0+ZmxhZ3MsICJ8IiwgWEZTX0RRX0ZMQUdTKSwKIAkJICBfX2VudHJ5LT5ucmVmcywKIAkJICBfX2VudHJ5LT5yZXNfYmNvdW50LApAQCAtODgxLDcgKzg4MSw3IEBACiAJKSwgXAogCVRQX3ByaW50aygiZGV2ICVkOiVkIGlubyAweCVsbHggc2l6ZSAweCVsbHggbmV3X3NpemUgMHglbGx4ICIgXAogCQkgICJvZmZzZXQgMHglbGx4IGNvdW50ICV6ZCBmbGFncyAlcyAiIFwKLQkJICAic3RhcnRvZmYgMHglbGx4IHN0YXJ0YmxvY2sgJXMgYmxvY2tjb3VudCAweCVsbHgiLCBcCisJCSAgInN0YXJ0b2ZmIDB4JWxseCBzdGFydGJsb2NrICVsbGQgYmxvY2tjb3VudCAweCVsbHgiLCBcCiAJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwgXAogCQkgIF9fZW50cnktPmlubywgXAogCQkgIF9fZW50cnktPnNpemUsIFwKQEAgLTg5MCw3ICs4OTAsNyBAQAogCQkgIF9fZW50cnktPmNvdW50LCBcCiAJCSAgX19wcmludF9mbGFncyhfX2VudHJ5LT5mbGFncywgInwiLCBCTUFQSV9GTEFHUyksIFwKIAkJICBfX2VudHJ5LT5zdGFydG9mZiwgXAotCQkgIHhmc19mbXRmc2Jsb2NrKF9fZW50cnktPnN0YXJ0YmxvY2spLCBcCisJCSAgKF9faW50NjRfdClfX2VudHJ5LT5zdGFydGJsb2NrLCBcCiAJCSAgX19lbnRyeS0+YmxvY2tjb3VudCkgXAogKQogREVGSU5FX0lPTUFQX0VWRU5UKHhmc19pb21hcF9lbnRlcik7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXAuYyBiL2ZzL3hmcy94ZnNfYm1hcC5jCmluZGV4IDE4NjlmYjkuLjVjMTFlNGQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYm1hcC5jCisrKyBiL2ZzL3hmcy94ZnNfYm1hcC5jCkBAIC0yNTUwLDIyICsyNTUwLDEzNCBAQAogfQogCiBTVEFUSUMgaW50Cit4ZnNfYm1hcF9idGFsbG9jX251bGxmYigKKwlzdHJ1Y3QgeGZzX2JtYWxsb2NhCSphcCwKKwlzdHJ1Y3QgeGZzX2FsbG9jX2FyZwkqYXJncywKKwl4ZnNfZXh0bGVuX3QJCSpibGVuKQoreworCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gYXAtPmlwLT5pX21vdW50OworCXN0cnVjdCB4ZnNfcGVyYWcJKnBhZzsKKwl4ZnNfYWdudW1iZXJfdAkJYWcsIHN0YXJ0YWc7CisJaW50CQkJbm90aW5pdCA9IDA7CisJaW50CQkJZXJyb3I7CisKKwlpZiAoYXAtPnVzZXJkYXRhICYmIHhmc19pbm9kZV9pc19maWxlc3RyZWFtKGFwLT5pcCkpCisJCWFyZ3MtPnR5cGUgPSBYRlNfQUxMT0NUWVBFX05FQVJfQk5POworCWVsc2UKKwkJYXJncy0+dHlwZSA9IFhGU19BTExPQ1RZUEVfU1RBUlRfQk5POworCWFyZ3MtPnRvdGFsID0gYXAtPnRvdGFsOworCisJLyoKKwkgKiBTZWFyY2ggZm9yIGFuIGFsbG9jYXRpb24gZ3JvdXAgd2l0aCBhIHNpbmdsZSBleHRlbnQgbGFyZ2UgZW5vdWdoCisJICogZm9yIHRoZSByZXF1ZXN0LiAgSWYgb25lIGlzbid0IGZvdW5kLCB0aGVuIGFkanVzdCB0aGUgbWluaW11bQorCSAqIGFsbG9jYXRpb24gc2l6ZSB0byB0aGUgbGFyZ2VzdCBzcGFjZSBmb3VuZC4KKwkgKi8KKwlzdGFydGFnID0gYWcgPSBYRlNfRlNCX1RPX0FHTk8obXAsIGFyZ3MtPmZzYm5vKTsKKwlpZiAoc3RhcnRhZyA9PSBOVUxMQUdOVU1CRVIpCisJCXN0YXJ0YWcgPSBhZyA9IDA7CisKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZyk7CisJd2hpbGUgKCpibGVuIDwgYXAtPmFsZW4pIHsKKwkJaWYgKCFwYWctPnBhZ2ZfaW5pdCkgeworCQkJZXJyb3IgPSB4ZnNfYWxsb2NfcGFnZl9pbml0KG1wLCBhcmdzLT50cCwgYWcsCisJCQkJCQkgICAgWEZTX0FMTE9DX0ZMQUdfVFJZTE9DSyk7CisJCQlpZiAoZXJyb3IpIHsKKwkJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CisJCQkJcmV0dXJuIGVycm9yOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogU2VlIHhmc19hbGxvY19maXhfZnJlZWxpc3QuLi4KKwkJICovCisJCWlmIChwYWctPnBhZ2ZfaW5pdCkgeworCQkJeGZzX2V4dGxlbl90CWxvbmdlc3Q7CisJCQlsb25nZXN0ID0geGZzX2FsbG9jX2xvbmdlc3RfZnJlZV9leHRlbnQobXAsIHBhZyk7CisJCQlpZiAoKmJsZW4gPCBsb25nZXN0KQorCQkJCSpibGVuID0gbG9uZ2VzdDsKKwkJfSBlbHNlCisJCQlub3Rpbml0ID0gMTsKKworCQlpZiAoeGZzX2lub2RlX2lzX2ZpbGVzdHJlYW0oYXAtPmlwKSkgeworCQkJaWYgKCpibGVuID49IGFwLT5hbGVuKQorCQkJCWJyZWFrOworCisJCQlpZiAoYXAtPnVzZXJkYXRhKSB7CisJCQkJLyoKKwkJCQkgKiBJZiBzdGFydGFnIGlzIGFuIGludmFsaWQgQUcsIHdlJ3ZlCisJCQkJICogY29tZSBoZXJlIG9uY2UgYmVmb3JlIGFuZAorCQkJCSAqIHhmc19maWxlc3RyZWFtX25ld19hZyBwaWNrZWQgdGhlCisJCQkJICogYmVzdCBjdXJyZW50bHkgYXZhaWxhYmxlLgorCQkJCSAqCisJCQkJICogRG9uJ3QgY29udGludWUgbG9vcGluZywgc2luY2Ugd2UKKwkJCQkgKiBjb3VsZCBsb29wIGZvcmV2ZXIuCisJCQkJICovCisJCQkJaWYgKHN0YXJ0YWcgPT0gTlVMTEFHTlVNQkVSKQorCQkJCQlicmVhazsKKworCQkJCWVycm9yID0geGZzX2ZpbGVzdHJlYW1fbmV3X2FnKGFwLCAmYWcpOworCQkJCXhmc19wZXJhZ19wdXQocGFnKTsKKwkJCQlpZiAoZXJyb3IpCisJCQkJCXJldHVybiBlcnJvcjsKKworCQkJCS8qIGxvb3AgYWdhaW4gdG8gc2V0ICdibGVuJyovCisJCQkJc3RhcnRhZyA9IE5VTExBR05VTUJFUjsKKwkJCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZyk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJaWYgKCsrYWcgPT0gbXAtPm1fc2Iuc2JfYWdjb3VudCkKKwkJCWFnID0gMDsKKwkJaWYgKGFnID09IHN0YXJ0YWcpCisJCQlicmVhazsKKwkJeGZzX3BlcmFnX3B1dChwYWcpOworCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZyk7CisJfQorCXhmc19wZXJhZ19wdXQocGFnKTsKKworCS8qCisJICogU2luY2UgdGhlIGFib3ZlIGxvb3AgZGlkIGEgQlVGX1RSWUxPQ0ssIGl0IGlzCisJICogcG9zc2libGUgdGhhdCB0aGVyZSBpcyBzcGFjZSBmb3IgdGhpcyByZXF1ZXN0LgorCSAqLworCWlmIChub3Rpbml0IHx8ICpibGVuIDwgYXAtPm1pbmxlbikKKwkJYXJncy0+bWlubGVuID0gYXAtPm1pbmxlbjsKKwkvKgorCSAqIElmIHRoZSBiZXN0IHNlZW4gbGVuZ3RoIGlzIGxlc3MgdGhhbiB0aGUgcmVxdWVzdAorCSAqIGxlbmd0aCwgdXNlIHRoZSBiZXN0IGFzIHRoZSBtaW5pbXVtLgorCSAqLworCWVsc2UgaWYgKCpibGVuIDwgYXAtPmFsZW4pCisJCWFyZ3MtPm1pbmxlbiA9ICpibGVuOworCS8qCisJICogT3RoZXJ3aXNlIHdlJ3ZlIHNlZW4gYW4gZXh0ZW50IGFzIGJpZyBhcyBhbGVuLAorCSAqIHVzZSB0aGF0IGFzIHRoZSBtaW5pbXVtLgorCSAqLworCWVsc2UKKwkJYXJncy0+bWlubGVuID0gYXAtPmFsZW47CisKKwkvKgorCSAqIHNldCB0aGUgZmFpbHVyZSBmYWxsYmFjayBjYXNlIHRvIGxvb2sgaW4gdGhlIHNlbGVjdGVkCisJICogQUcgYXMgdGhlIHN0cmVhbSBtYXkgaGF2ZSBtb3ZlZC4KKwkgKi8KKwlpZiAoeGZzX2lub2RlX2lzX2ZpbGVzdHJlYW0oYXAtPmlwKSkKKwkJYXAtPnJ2YWwgPSBhcmdzLT5mc2JubyA9IFhGU19BR0JfVE9fRlNCKG1wLCBhZywgMCk7CisKKwlyZXR1cm4gMDsKK30KKworU1RBVElDIGludAogeGZzX2JtYXBfYnRhbGxvYygKIAl4ZnNfYm1hbGxvY2FfdAkqYXApCQkvKiBibWFwIGFsbG9jIGFyZ3VtZW50IHN0cnVjdCAqLwogewogCXhmc19tb3VudF90CSptcDsJCS8qIG1vdW50IHBvaW50IHN0cnVjdHVyZSAqLwogCXhmc19hbGxvY3R5cGVfdAlhdHlwZSA9IDA7CS8qIHR5cGUgZm9yIGFsbG9jYXRpb24gcm91dGluZXMgKi8KIAl4ZnNfZXh0bGVuX3QJYWxpZ247CQkvKiBtaW5pbXVtIGFsbG9jYXRpb24gYWxpZ25tZW50ICovCi0JeGZzX2FnbnVtYmVyX3QJYWc7CiAJeGZzX2FnbnVtYmVyX3QJZmJfYWdubzsJLyogYWcgbnVtYmVyIG9mIGFwLT5maXJzdGJsb2NrICovCi0JeGZzX2FnbnVtYmVyX3QJc3RhcnRhZzsKKwl4ZnNfYWdudW1iZXJfdAlhZzsKIAl4ZnNfYWxsb2NfYXJnX3QJYXJnczsKIAl4ZnNfZXh0bGVuX3QJYmxlbjsKIAl4ZnNfZXh0bGVuX3QJbmV4dG1pbmxlbiA9IDA7Ci0JeGZzX3BlcmFnX3QJKnBhZzsKIAlpbnQJCW51bGxmYjsJCS8qIHRydWUgaWYgYXAtPmZpcnN0YmxvY2sgaXNuJ3Qgc2V0ICovCiAJaW50CQlpc2FsaWduZWQ7Ci0JaW50CQlub3Rpbml0OwogCWludAkJdHJ5YWdhaW47CiAJaW50CQllcnJvcjsKIApAQCAtMjYxMiwxMDMgKzI3MjQsOSBAQAogCWFyZ3MuZmlyc3RibG9jayA9IGFwLT5maXJzdGJsb2NrOwogCWJsZW4gPSAwOwogCWlmIChudWxsZmIpIHsKLQkJaWYgKGFwLT51c2VyZGF0YSAmJiB4ZnNfaW5vZGVfaXNfZmlsZXN0cmVhbShhcC0+aXApKQotCQkJYXJncy50eXBlID0gWEZTX0FMTE9DVFlQRV9ORUFSX0JOTzsKLQkJZWxzZQotCQkJYXJncy50eXBlID0gWEZTX0FMTE9DVFlQRV9TVEFSVF9CTk87Ci0JCWFyZ3MudG90YWwgPSBhcC0+dG90YWw7Ci0KLQkJLyoKLQkJICogU2VhcmNoIGZvciBhbiBhbGxvY2F0aW9uIGdyb3VwIHdpdGggYSBzaW5nbGUgZXh0ZW50Ci0JCSAqIGxhcmdlIGVub3VnaCBmb3IgdGhlIHJlcXVlc3QuCi0JCSAqCi0JCSAqIElmIG9uZSBpc24ndCBmb3VuZCwgdGhlbiBhZGp1c3QgdGhlIG1pbmltdW0gYWxsb2NhdGlvbgotCQkgKiBzaXplIHRvIHRoZSBsYXJnZXN0IHNwYWNlIGZvdW5kLgotCQkgKi8KLQkJc3RhcnRhZyA9IGFnID0gWEZTX0ZTQl9UT19BR05PKG1wLCBhcmdzLmZzYm5vKTsKLQkJaWYgKHN0YXJ0YWcgPT0gTlVMTEFHTlVNQkVSKQotCQkJc3RhcnRhZyA9IGFnID0gMDsKLQkJbm90aW5pdCA9IDA7Ci0JCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnKTsKLQkJd2hpbGUgKGJsZW4gPCBhcC0+YWxlbikgewotCQkJaWYgKCFwYWctPnBhZ2ZfaW5pdCAmJgotCQkJICAgIChlcnJvciA9IHhmc19hbGxvY19wYWdmX2luaXQobXAsIGFyZ3MudHAsCi0JCQkJICAgIGFnLCBYRlNfQUxMT0NfRkxBR19UUllMT0NLKSkpIHsKLQkJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7Ci0JCQkJcmV0dXJuIGVycm9yOwotCQkJfQotCQkJLyoKLQkJCSAqIFNlZSB4ZnNfYWxsb2NfZml4X2ZyZWVsaXN0Li4uCi0JCQkgKi8KLQkJCWlmIChwYWctPnBhZ2ZfaW5pdCkgewotCQkJCXhmc19leHRsZW5fdAlsb25nZXN0OwotCQkJCWxvbmdlc3QgPSB4ZnNfYWxsb2NfbG9uZ2VzdF9mcmVlX2V4dGVudChtcCwgcGFnKTsKLQkJCQlpZiAoYmxlbiA8IGxvbmdlc3QpCi0JCQkJCWJsZW4gPSBsb25nZXN0OwotCQkJfSBlbHNlCi0JCQkJbm90aW5pdCA9IDE7Ci0KLQkJCWlmICh4ZnNfaW5vZGVfaXNfZmlsZXN0cmVhbShhcC0+aXApKSB7Ci0JCQkJaWYgKGJsZW4gPj0gYXAtPmFsZW4pCi0JCQkJCWJyZWFrOwotCi0JCQkJaWYgKGFwLT51c2VyZGF0YSkgewotCQkJCQkvKgotCQkJCQkgKiBJZiBzdGFydGFnIGlzIGFuIGludmFsaWQgQUcsIHdlJ3ZlCi0JCQkJCSAqIGNvbWUgaGVyZSBvbmNlIGJlZm9yZSBhbmQKLQkJCQkJICogeGZzX2ZpbGVzdHJlYW1fbmV3X2FnIHBpY2tlZCB0aGUKLQkJCQkJICogYmVzdCBjdXJyZW50bHkgYXZhaWxhYmxlLgotCQkJCQkgKgotCQkJCQkgKiBEb24ndCBjb250aW51ZSBsb29waW5nLCBzaW5jZSB3ZQotCQkJCQkgKiBjb3VsZCBsb29wIGZvcmV2ZXIuCi0JCQkJCSAqLwotCQkJCQlpZiAoc3RhcnRhZyA9PSBOVUxMQUdOVU1CRVIpCi0JCQkJCQlicmVhazsKLQotCQkJCQllcnJvciA9IHhmc19maWxlc3RyZWFtX25ld19hZyhhcCwgJmFnKTsKLQkJCQkJeGZzX3BlcmFnX3B1dChwYWcpOwotCQkJCQlpZiAoZXJyb3IpCi0JCQkJCQlyZXR1cm4gZXJyb3I7Ci0KLQkJCQkJLyogbG9vcCBhZ2FpbiB0byBzZXQgJ2JsZW4nKi8KLQkJCQkJc3RhcnRhZyA9IE5VTExBR05VTUJFUjsKLQkJCQkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWcpOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoKythZyA9PSBtcC0+bV9zYi5zYl9hZ2NvdW50KQotCQkJCWFnID0gMDsKLQkJCWlmIChhZyA9PSBzdGFydGFnKQotCQkJCWJyZWFrOwotCQkJeGZzX3BlcmFnX3B1dChwYWcpOwotCQkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWcpOwotCQl9Ci0JCXhmc19wZXJhZ19wdXQocGFnKTsKLQkJLyoKLQkJICogU2luY2UgdGhlIGFib3ZlIGxvb3AgZGlkIGEgQlVGX1RSWUxPQ0ssIGl0IGlzCi0JCSAqIHBvc3NpYmxlIHRoYXQgdGhlcmUgaXMgc3BhY2UgZm9yIHRoaXMgcmVxdWVzdC4KLQkJICovCi0JCWlmIChub3Rpbml0IHx8IGJsZW4gPCBhcC0+bWlubGVuKQotCQkJYXJncy5taW5sZW4gPSBhcC0+bWlubGVuOwotCQkvKgotCQkgKiBJZiB0aGUgYmVzdCBzZWVuIGxlbmd0aCBpcyBsZXNzIHRoYW4gdGhlIHJlcXVlc3QKLQkJICogbGVuZ3RoLCB1c2UgdGhlIGJlc3QgYXMgdGhlIG1pbmltdW0uCi0JCSAqLwotCQllbHNlIGlmIChibGVuIDwgYXAtPmFsZW4pCi0JCQlhcmdzLm1pbmxlbiA9IGJsZW47Ci0JCS8qCi0JCSAqIE90aGVyd2lzZSB3ZSd2ZSBzZWVuIGFuIGV4dGVudCBhcyBiaWcgYXMgYWxlbiwKLQkJICogdXNlIHRoYXQgYXMgdGhlIG1pbmltdW0uCi0JCSAqLwotCQllbHNlCi0JCQlhcmdzLm1pbmxlbiA9IGFwLT5hbGVuOwotCi0JCS8qCi0JCSAqIHNldCB0aGUgZmFpbHVyZSBmYWxsYmFjayBjYXNlIHRvIGxvb2sgaW4gdGhlIHNlbGVjdGVkCi0JCSAqIEFHIGFzIHRoZSBzdHJlYW0gbWF5IGhhdmUgbW92ZWQuCi0JCSAqLwotCQlpZiAoeGZzX2lub2RlX2lzX2ZpbGVzdHJlYW0oYXAtPmlwKSkKLQkJCWFwLT5ydmFsID0gYXJncy5mc2JubyA9IFhGU19BR0JfVE9fRlNCKG1wLCBhZywgMCk7CisJCWVycm9yID0geGZzX2JtYXBfYnRhbGxvY19udWxsZmIoYXAsICZhcmdzLCAmYmxlbik7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKIAl9IGVsc2UgaWYgKGFwLT5sb3cpIHsKIAkJaWYgKHhmc19pbm9kZV9pc19maWxlc3RyZWFtKGFwLT5pcCkpCiAJCQlhcmdzLnR5cGUgPSBYRlNfQUxMT0NUWVBFX0ZJUlNUX0FHOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mcy5oIGIvZnMveGZzL3hmc19mcy5oCmluZGV4IGY1MmFjMjcuLjdjZjcyMjAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZnMuaAorKysgYi9mcy94ZnMveGZzX2ZzLmgKQEAgLTI5Miw3ICsyOTIsOCBAQAogCV9fczMyCQlic19leHRlbnRzOwkvKiBudW1iZXIgb2YgZXh0ZW50cwkJKi8KIAlfX3UzMgkJYnNfZ2VuOwkJLyogZ2VuZXJhdGlvbiBjb3VudAkJKi8KIAlfX3UxNgkJYnNfcHJvamlkOwkvKiBwcm9qZWN0IGlkCQkJKi8KLQl1bnNpZ25lZCBjaGFyCWJzX3BhZFsxNF07CS8qIHBhZCBzcGFjZSwgdW51c2VkCQkqLworCV9fdTE2CQlic19mb3Jrb2ZmOwkvKiBpbm9kZSBmb3JrIG9mZnNldCBpbiBieXRlcwkqLworCXVuc2lnbmVkIGNoYXIJYnNfcGFkWzEyXTsJLyogcGFkIHNwYWNlLCB1bnVzZWQJCSovCiAJX191MzIJCWJzX2RtZXZtYXNrOwkvKiBETUlHIGV2ZW50IG1hc2sJCSovCiAJX191MTYJCWJzX2Rtc3RhdGU7CS8qIERNSUcgc3RhdGUgaW5mbwkJKi8KIAlfX3UxNgkJYnNfYWV4dGVudHM7CS8qIGF0dHJpYnV0ZSBudW1iZXIgb2YgZXh0ZW50cwkqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pZ2V0LmMgYi9mcy94ZnMveGZzX2lnZXQuYwppbmRleCBlMjgxZWI0Li42ODQ1ZGI5IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lnZXQuYworKysgYi9mcy94ZnMveGZzX2lnZXQuYwpAQCAtMTkwLDEzICsxOTAsMTIgQEAKIAkJdHJhY2VfeGZzX2lnZXRfcmVjbGFpbShpcCk7CiAKIAkJLyoKLQkJICogV2UgbmVlZCB0byBzZXQgWEZTX0lORVcgYXRvbWljYWxseSB3aXRoIGNsZWFyaW5nIHRoZQotCQkgKiByZWNsYWltYWJsZSB0YWcgc28gdGhhdCB3ZSBkbyBoYXZlIGFuIGluZGljYXRvciBvZiB0aGUKLQkJICogaW5vZGUgc3RpbGwgYmVpbmcgaW5pdGlhbGl6ZWQuCisJCSAqIFdlIG5lZWQgdG8gc2V0IFhGU19JUkVDTEFJTSB0byBwcmV2ZW50IHhmc19yZWNsYWltX2lub2RlCisJCSAqIGZyb20gc3RvbXBpbmcgb3ZlciB1cyB3aGlsZSB3ZSByZWN5Y2xlIHRoZSBpbm9kZS4gIFdlIGNhbid0CisJCSAqIGNsZWFyIHRoZSByYWRpeCB0cmVlIHJlY2xhaW1hYmxlIHRhZyB5ZXQgYXMgaXQgcmVxdWlyZXMKKwkJICogcGFnX2ljaV9sb2NrIHRvIGJlIGhlbGQgZXhjbHVzaXZlLgogCQkgKi8KLQkJaXAtPmlfZmxhZ3MgfD0gWEZTX0lORVc7Ci0JCWlwLT5pX2ZsYWdzICY9IH5YRlNfSVJFQ0xBSU1BQkxFOwotCQlfX3hmc19pbm9kZV9jbGVhcl9yZWNsYWltX3RhZyhtcCwgcGFnLCBpcCk7CisJCWlwLT5pX2ZsYWdzIHw9IFhGU19JUkVDTEFJTTsKIAogCQlzcGluX3VubG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7CiAJCXJlYWRfdW5sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CkBAIC0yMTYsNyArMjE1LDE1IEBACiAJCQl0cmFjZV94ZnNfaWdldF9yZWNsYWltKGlwKTsKIAkJCWdvdG8gb3V0X2Vycm9yOwogCQl9CisKKwkJd3JpdGVfbG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOworCQlzcGluX2xvY2soJmlwLT5pX2ZsYWdzX2xvY2spOworCQlpcC0+aV9mbGFncyAmPSB+KFhGU19JUkVDTEFJTUFCTEUgfCBYRlNfSVJFQ0xBSU0pOworCQlpcC0+aV9mbGFncyB8PSBYRlNfSU5FVzsKKwkJX194ZnNfaW5vZGVfY2xlYXJfcmVjbGFpbV90YWcobXAsIHBhZywgaXApOwogCQlpbm9kZS0+aV9zdGF0ZSA9IElfTkVXOworCQlzcGluX3VubG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7CisJCXdyaXRlX3VubG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOwogCX0gZWxzZSB7CiAJCS8qIElmIHRoZSBWRlMgaW5vZGUgaXMgYmVpbmcgdG9ybiBkb3duLCBwYXVzZSBhbmQgdHJ5IGFnYWluLiAqLwogCQlpZiAoIWlncmFiKGlub2RlKSkgewpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZS5jIGIvZnMveGZzL3hmc19pbm9kZS5jCmluZGV4IGZhMzEzNjAuLjBmZmQ1NjQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuYworKysgYi9mcy94ZnMveGZzX2lub2RlLmMKQEAgLTI0MzksNzUgKzI0MzksMzEgQEAKIH0KIAogLyoKLSAqIEluY3JlbWVudCB0aGUgcGluIGNvdW50IG9mIHRoZSBnaXZlbiBidWZmZXIuCi0gKiBUaGlzIHZhbHVlIGlzIHByb3RlY3RlZCBieSBpcGlubG9jayBzcGlubG9jayBpbiB0aGUgbW91bnQgc3RydWN0dXJlLgorICogVGhpcyBpcyBjYWxsZWQgdG8gdW5waW4gYW4gaW5vZGUuICBUaGUgY2FsbGVyIG11c3QgaGF2ZSB0aGUgaW5vZGUgbG9ja2VkCisgKiBpbiBhdCBsZWFzdCBzaGFyZWQgbW9kZSBzbyB0aGF0IHRoZSBidWZmZXIgY2Fubm90IGJlIHN1YnNlcXVlbnRseSBwaW5uZWQKKyAqIG9uY2Ugc29tZW9uZSBpcyB3YWl0aW5nIGZvciBpdCB0byBiZSB1bnBpbm5lZC4KICAqLwotdm9pZAoteGZzX2lwaW4oCi0JeGZzX2lub2RlX3QJKmlwKQorc3RhdGljIHZvaWQKK3hmc19pdW5waW5fbm93YWl0KAorCXN0cnVjdCB4ZnNfaW5vZGUJKmlwKQogewotCUFTU0VSVCh4ZnNfaXNpbG9ja2VkKGlwLCBYRlNfSUxPQ0tfRVhDTCkpOwotCi0JYXRvbWljX2luYygmaXAtPmlfcGluY291bnQpOwotfQotCi0vKgotICogRGVjcmVtZW50IHRoZSBwaW4gY291bnQgb2YgdGhlIGdpdmVuIGlub2RlLCBhbmQgd2FrZSB1cAotICogYW55b25lIGluIHhmc19pd2FpdF91bnBpbigpIGlmIHRoZSBjb3VudCBnb2VzIHRvIDAuICBUaGUKLSAqIGlub2RlIG11c3QgaGF2ZSBiZWVuIHByZXZpb3VzbHkgcGlubmVkIHdpdGggYSBjYWxsIHRvIHhmc19pcGluKCkuCi0gKi8KLXZvaWQKLXhmc19pdW5waW4oCi0JeGZzX2lub2RlX3QJKmlwKQotewotCUFTU0VSVChhdG9taWNfcmVhZCgmaXAtPmlfcGluY291bnQpID4gMCk7Ci0KLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmaXAtPmlfcGluY291bnQpKQotCQl3YWtlX3VwKCZpcC0+aV9pcGluX3dhaXQpOwotfQotCi0vKgotICogVGhpcyBpcyBjYWxsZWQgdG8gdW5waW4gYW4gaW5vZGUuIEl0IGNhbiBiZSBkaXJlY3RlZCB0byB3YWl0IG9yIHRvIHJldHVybgotICogaW1tZWRpYXRlbHkgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgaW5vZGUgdG8gYmUgdW5waW5uZWQuICBUaGUgY2FsbGVyIG11c3QKLSAqIGhhdmUgdGhlIGlub2RlIGxvY2tlZCBpbiBhdCBsZWFzdCBzaGFyZWQgbW9kZSBzbyB0aGF0IHRoZSBidWZmZXIgY2Fubm90IGJlCi0gKiBzdWJzZXF1ZW50bHkgcGlubmVkIG9uY2Ugc29tZW9uZSBpcyB3YWl0aW5nIGZvciBpdCB0byBiZSB1bnBpbm5lZC4KLSAqLwotU1RBVElDIHZvaWQKLV9feGZzX2l1bnBpbl93YWl0KAotCXhmc19pbm9kZV90CSppcCwKLQlpbnQJCXdhaXQpCi17Ci0JeGZzX2lub2RlX2xvZ19pdGVtX3QJKmlpcCA9IGlwLT5pX2l0ZW1wOwotCiAJQVNTRVJUKHhmc19pc2lsb2NrZWQoaXAsIFhGU19JTE9DS19FWENMfFhGU19JTE9DS19TSEFSRUQpKTsKLQlpZiAoYXRvbWljX3JlYWQoJmlwLT5pX3BpbmNvdW50KSA9PSAwKQotCQlyZXR1cm47CiAKIAkvKiBHaXZlIHRoZSBsb2cgYSBwdXNoIHRvIHN0YXJ0IHRoZSB1bnBpbm5pbmcgSS9PICovCi0JaWYgKGlpcCAmJiBpaXAtPmlsaV9sYXN0X2xzbikKLQkJeGZzX2xvZ19mb3JjZV9sc24oaXAtPmlfbW91bnQsIGlpcC0+aWxpX2xhc3RfbHNuLCAwKTsKLQllbHNlCi0JCXhmc19sb2dfZm9yY2UoaXAtPmlfbW91bnQsIDApOworCXhmc19sb2dfZm9yY2VfbHNuKGlwLT5pX21vdW50LCBpcC0+aV9pdGVtcC0+aWxpX2xhc3RfbHNuLCAwKTsKIAotCWlmICh3YWl0KQotCQl3YWl0X2V2ZW50KGlwLT5pX2lwaW5fd2FpdCwgKGF0b21pY19yZWFkKCZpcC0+aV9waW5jb3VudCkgPT0gMCkpOwogfQogCiB2b2lkCiB4ZnNfaXVucGluX3dhaXQoCi0JeGZzX2lub2RlX3QJKmlwKQorCXN0cnVjdCB4ZnNfaW5vZGUJKmlwKQogewotCV9feGZzX2l1bnBpbl93YWl0KGlwLCAxKTsKKwlpZiAoeGZzX2lwaW5jb3VudChpcCkpIHsKKwkJeGZzX2l1bnBpbl9ub3dhaXQoaXApOworCQl3YWl0X2V2ZW50KGlwLT5pX2lwaW5fd2FpdCwgKHhmc19pcGluY291bnQoaXApID09IDApKTsKKwl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAoteGZzX2l1bnBpbl9ub3dhaXQoCi0JeGZzX2lub2RlX3QJKmlwKQotewotCV9feGZzX2l1bnBpbl93YWl0KGlwLCAwKTsKLX0KLQotCiAvKgogICogeGZzX2lleHRlbnRzX2NvcHkoKQogICoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuaCBiL2ZzL3hmcy94ZnNfaW5vZGUuaAppbmRleCA2YzkxMmIwLi45OTY1ZTQwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlLmgKKysrIGIvZnMveGZzL3hmc19pbm9kZS5oCkBAIC00NzEsOCArNDcxLDYgQEAKIGludAkJeGZzX2l1bmxpbmsoc3RydWN0IHhmc190cmFucyAqLCB4ZnNfaW5vZGVfdCAqKTsKIAogdm9pZAkJeGZzX2lleHRfcmVhbGxvYyh4ZnNfaW5vZGVfdCAqLCBpbnQsIGludCk7Ci12b2lkCQl4ZnNfaXBpbih4ZnNfaW5vZGVfdCAqKTsKLXZvaWQJCXhmc19pdW5waW4oeGZzX2lub2RlX3QgKik7CiB2b2lkCQl4ZnNfaXVucGluX3dhaXQoeGZzX2lub2RlX3QgKik7CiBpbnQJCXhmc19pZmx1c2goeGZzX2lub2RlX3QgKiwgdWludCk7CiB2b2lkCQl4ZnNfaWNoZ3RpbWUoeGZzX2lub2RlX3QgKiwgaW50KTsKQEAgLTQ4MCw2ICs0NzgsNyBAQAogdm9pZAkJeGZzX2xvY2tfdHdvX2lub2Rlcyh4ZnNfaW5vZGVfdCAqLCB4ZnNfaW5vZGVfdCAqLCB1aW50KTsKIAogdm9pZAkJeGZzX3N5bmNocm9uaXplX3RpbWVzKHhmc19pbm9kZV90ICopOwordm9pZAkJeGZzX21hcmtfaW5vZGVfZGlydHkoeGZzX2lub2RlX3QgKik7CiB2b2lkCQl4ZnNfbWFya19pbm9kZV9kaXJ0eV9zeW5jKHhmc19pbm9kZV90ICopOwogCiAjZGVmaW5lIElIT0xEKGlwKSBcCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCmluZGV4IGQ0ZGMwNjMuLjdiZmVhODUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCkBAIC01MzUsMjMgKzUzNSwyMyBAQAogCiAvKgogICogVGhpcyBpcyBjYWxsZWQgdG8gcGluIHRoZSBpbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhlIGlub2RlIGxvZwotICogaXRlbSBpbiBtZW1vcnkgc28gaXQgY2Fubm90IGJlIHdyaXR0ZW4gb3V0LiAgRG8gdGhpcyBieSBjYWxsaW5nCi0gKiB4ZnNfaXBpbigpIHRvIGJ1bXAgdGhlIHBpbiBjb3VudCBpbiB0aGUgaW5vZGUgd2hpbGUgaG9sZGluZyB0aGUKLSAqIGlub2RlIHBpbiBsb2NrLgorICogaXRlbSBpbiBtZW1vcnkgc28gaXQgY2Fubm90IGJlIHdyaXR0ZW4gb3V0LgogICovCiBTVEFUSUMgdm9pZAogeGZzX2lub2RlX2l0ZW1fcGluKAogCXhmc19pbm9kZV9sb2dfaXRlbV90CSppaXApCiB7CiAJQVNTRVJUKHhmc19pc2lsb2NrZWQoaWlwLT5pbGlfaW5vZGUsIFhGU19JTE9DS19FWENMKSk7Ci0JeGZzX2lwaW4oaWlwLT5pbGlfaW5vZGUpOworCisJYXRvbWljX2luYygmaWlwLT5pbGlfaW5vZGUtPmlfcGluY291bnQpOwogfQogCiAKIC8qCiAgKiBUaGlzIGlzIGNhbGxlZCB0byB1bnBpbiB0aGUgaW5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbm9kZSBsb2cKICAqIGl0ZW0gd2hpY2ggd2FzIHByZXZpb3VzbHkgcGlubmVkIHdpdGggYSBjYWxsIHRvIHhmc19pbm9kZV9pdGVtX3BpbigpLgotICogSnVzdCBjYWxsIHhmc19pdW5waW4oKSBvbiB0aGUgaW5vZGUgdG8gZG8gdGhpcy4KKyAqCisgKiBBbHNvIHdha2UgdXAgYW55b25lIGluIHhmc19pdW5waW5fd2FpdCgpIGlmIHRoZSBjb3VudCBnb2VzIHRvIDAuCiAgKi8KIC8qIEFSR1NVU0VEICovCiBTVEFUSUMgdm9pZApAQCAtNTU5LDcgKzU1OSwxMSBAQAogCXhmc19pbm9kZV9sb2dfaXRlbV90CSppaXAsCiAJaW50CQkJc3RhbGUpCiB7Ci0JeGZzX2l1bnBpbihpaXAtPmlsaV9pbm9kZSk7CisJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBpaXAtPmlsaV9pbm9kZTsKKworCUFTU0VSVChhdG9taWNfcmVhZCgmaXAtPmlfcGluY291bnQpID4gMCk7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmlwLT5pX3BpbmNvdW50KSkKKwkJd2FrZV91cCgmaXAtPmlfaXBpbl93YWl0KTsKIH0KIAogLyogQVJHU1VTRUQgKi8KQEAgLTU2OCw3ICs1NzIsNyBAQAogCXhmc19pbm9kZV9sb2dfaXRlbV90CSppaXAsCiAJeGZzX3RyYW5zX3QJCSp0cCkKIHsKLQl4ZnNfaXVucGluKGlpcC0+aWxpX2lub2RlKTsKKwl4ZnNfaW5vZGVfaXRlbV91bnBpbihpaXAsIDApOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pdGFibGUuYyBiL2ZzL3hmcy94ZnNfaXRhYmxlLmMKaW5kZXggM2FmMDIzMS4uYjFiODAxZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pdGFibGUuYworKysgYi9mcy94ZnMveGZzX2l0YWJsZS5jCkBAIC0xMDYsNiArMTA2LDcgQEAKIAlidWYtPmJzX2RtZXZtYXNrID0gZGljLT5kaV9kbWV2bWFzazsKIAlidWYtPmJzX2Rtc3RhdGUgPSBkaWMtPmRpX2Rtc3RhdGU7CiAJYnVmLT5ic19hZXh0ZW50cyA9IGRpYy0+ZGlfYW5leHRlbnRzOworCWJ1Zi0+YnNfZm9ya29mZiA9IFhGU19JRk9SS19CT0ZGKGlwKTsKIAogCXN3aXRjaCAoZGljLT5kaV9mb3JtYXQpIHsKIAljYXNlIFhGU19ESU5PREVfRk1UX0RFVjoKQEAgLTE3Niw2ICsxNzcsNyBAQAogCWJ1Zi0+YnNfZG1ldm1hc2sgPSBiZTMyX3RvX2NwdShkaWMtPmRpX2RtZXZtYXNrKTsKIAlidWYtPmJzX2Rtc3RhdGUgPSBiZTE2X3RvX2NwdShkaWMtPmRpX2Rtc3RhdGUpOwogCWJ1Zi0+YnNfYWV4dGVudHMgPSBiZTE2X3RvX2NwdShkaWMtPmRpX2FuZXh0ZW50cyk7CisJYnVmLT5ic19mb3Jrb2ZmID0gWEZTX0RGT1JLX0JPRkYoZGljKTsKIAogCXN3aXRjaCAoZGljLT5kaV9mb3JtYXQpIHsKIAljYXNlIFhGU19ESU5PREVfRk1UX0RFVjoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nLmMgYi9mcy94ZnMveGZzX2xvZy5jCmluZGV4IDRmMTZiZTQuLmU4ZmJhOTIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nLmMKKysrIGIvZnMveGZzL3hmc19sb2cuYwpAQCAtNjAsNyArNjAsNyBAQAogU1RBVElDIGludAkgeGxvZ19zeW5jKHhsb2dfdCAqbG9nLCB4bG9nX2luX2NvcmVfdCAqaWNsb2cpOwogU1RBVElDIHZvaWQJIHhsb2dfZGVhbGxvY19sb2coeGxvZ190ICpsb2cpOwogU1RBVElDIGludAkgeGxvZ193cml0ZSh4ZnNfbW91bnRfdCAqbXAsIHhmc19sb2dfaW92ZWNfdCByZWdpb25bXSwKLQkJCSAgICBpbnQgbmVudHJpZXMsIHhmc19sb2dfdGlja2V0X3QgdGljLAorCQkJICAgIGludCBuZW50cmllcywgc3RydWN0IHhsb2dfdGlja2V0ICp0aWMsCiAJCQkgICAgeGZzX2xzbl90ICpzdGFydF9sc24sCiAJCQkgICAgeGxvZ19pbl9jb3JlX3QgKipjb21taXRfaWNsb2csCiAJCQkgICAgdWludCBmbGFncyk7CkBAIC0yNDMsMTQgKzI0MywxNCBAQAogICogb3V0IHdoZW4gdGhlIG5leHQgd3JpdGUgb2NjdXJzLgogICovCiB4ZnNfbHNuX3QKLXhmc19sb2dfZG9uZSh4ZnNfbW91bnRfdAkqbXAsCi0JICAgICB4ZnNfbG9nX3RpY2tldF90CXh0aWMsCi0JICAgICB2b2lkCQkqKmljbG9nLAotCSAgICAgdWludAkJZmxhZ3MpCit4ZnNfbG9nX2RvbmUoCisJc3RydWN0IHhmc19tb3VudAkqbXAsCisJc3RydWN0IHhsb2dfdGlja2V0CSp0aWNrZXQsCisJc3RydWN0IHhsb2dfaW5fY29yZQkqKmljbG9nLAorCXVpbnQJCQlmbGFncykKIHsKLQl4bG9nX3QJCSpsb2cgICAgPSBtcC0+bV9sb2c7Ci0JeGxvZ190aWNrZXRfdAkqdGlja2V0ID0gKHhmc19sb2dfdGlja2V0X3QpIHh0aWM7Ci0JeGZzX2xzbl90CWxzbgk9IDA7CisJc3RydWN0IGxvZwkJKmxvZyA9IG1wLT5tX2xvZzsKKwl4ZnNfbHNuX3QJCWxzbiA9IDA7CiAKIAlpZiAoWExPR19GT1JDRURfU0hVVERPV04obG9nKSB8fAogCSAgICAvKgpAQCAtMjU4LDggKzI1OCw3IEBACiAJICAgICAqIElmIHdlIGdldCBhbiBlcnJvciwganVzdCBjb250aW51ZSBhbmQgZ2l2ZSBiYWNrIHRoZSBsb2cgdGlja2V0LgogCSAgICAgKi8KIAkgICAgKCgodGlja2V0LT50X2ZsYWdzICYgWExPR19USUNfSU5JVEVEKSA9PSAwKSAmJgotCSAgICAgKHhsb2dfY29tbWl0X3JlY29yZChtcCwgdGlja2V0LAotCQkJCSAoeGxvZ19pbl9jb3JlX3QgKiopaWNsb2csICZsc24pKSkpIHsKKwkgICAgICh4bG9nX2NvbW1pdF9yZWNvcmQobXAsIHRpY2tldCwgaWNsb2csICZsc24pKSkpIHsKIAkJbHNuID0gKHhmc19sc25fdCkgLTE7CiAJCWlmICh0aWNrZXQtPnRfZmxhZ3MgJiBYTE9HX1RJQ19QRVJNX1JFU0VSVikgewogCQkJZmxhZ3MgfD0gWEZTX0xPR19SRUxfUEVSTV9SRVNFUlY7CkBAIC0yODksNyArMjg4LDcgQEAKIAl9CiAKIAlyZXR1cm4gbHNuOwotfQkvKiB4ZnNfbG9nX2RvbmUgKi8KK30KIAogLyoKICAqIEF0dGFjaGVzIGEgbmV3IGljbG9nIEkvTyBjb21wbGV0aW9uIGNhbGxiYWNrIHJvdXRpbmUgZHVyaW5nCkBAIC0yOTgsMTEgKzI5NywxMSBAQAogICogZXhlY3V0aW5nIHRoZSBjYWxsYmFjayBhdCBhbiBhcHByb3ByaWF0ZSB0aW1lLgogICovCiBpbnQKLXhmc19sb2dfbm90aWZ5KHhmc19tb3VudF90CSAgKm1wLAkJLyogbW91bnQgb2YgcGFydGl0aW9uICovCi0JICAgICAgIHZvaWQJCSAgKmljbG9nX2huZGwsCS8qIGljbG9nIHRvIGhhbmcgY2FsbGJhY2sgb2ZmICovCi0JICAgICAgIHhmc19sb2dfY2FsbGJhY2tfdCAqY2IpCit4ZnNfbG9nX25vdGlmeSgKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCwKKwlzdHJ1Y3QgeGxvZ19pbl9jb3JlCSppY2xvZywKKwl4ZnNfbG9nX2NhbGxiYWNrX3QJKmNiKQogewotCXhsb2dfaW5fY29yZV90CSAgKmljbG9nID0gKHhsb2dfaW5fY29yZV90ICopaWNsb2dfaG5kbDsKIAlpbnQJYWJvcnRmbGc7CiAKIAlzcGluX2xvY2soJmljbG9nLT5pY19jYWxsYmFja19sb2NrKTsKQEAgLTMxNiwxNiArMzE1LDE0IEBACiAJfQogCXNwaW5fdW5sb2NrKCZpY2xvZy0+aWNfY2FsbGJhY2tfbG9jayk7CiAJcmV0dXJuIGFib3J0ZmxnOwotfQkvKiB4ZnNfbG9nX25vdGlmeSAqLworfQogCiBpbnQKLXhmc19sb2dfcmVsZWFzZV9pY2xvZyh4ZnNfbW91bnRfdCAqbXAsCi0JCSAgICAgIHZvaWQJICAqaWNsb2dfaG5kbCkKK3hmc19sb2dfcmVsZWFzZV9pY2xvZygKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCwKKwlzdHJ1Y3QgeGxvZ19pbl9jb3JlCSppY2xvZykKIHsKLQl4bG9nX3QgKmxvZyA9IG1wLT5tX2xvZzsKLQl4bG9nX2luX2NvcmVfdAkgICppY2xvZyA9ICh4bG9nX2luX2NvcmVfdCAqKWljbG9nX2huZGw7Ci0KLQlpZiAoeGxvZ19zdGF0ZV9yZWxlYXNlX2ljbG9nKGxvZywgaWNsb2cpKSB7CisJaWYgKHhsb2dfc3RhdGVfcmVsZWFzZV9pY2xvZyhtcC0+bV9sb2csIGljbG9nKSkgewogCQl4ZnNfZm9yY2Vfc2h1dGRvd24obXAsIFNIVVRET1dOX0xPR19JT19FUlJPUik7CiAJCXJldHVybiBFSU87CiAJfQpAQCAtMzQ0LDE3ICszNDEsMTggQEAKICAqIHJlc2VydmF0aW9uLCB3ZSBwcmV2ZW50IG92ZXIgYWxsb2NhdGlvbiBwcm9ibGVtcy4KICAqLwogaW50Ci14ZnNfbG9nX3Jlc2VydmUoeGZzX21vdW50X3QJICptcCwKLQkJaW50CQkgdW5pdF9ieXRlcywKLQkJaW50CQkgY250LAotCQl4ZnNfbG9nX3RpY2tldF90ICp0aWNrZXQsCi0JCV9fdWludDhfdAkgY2xpZW50LAotCQl1aW50CQkgZmxhZ3MsCi0JCXVpbnQJCSB0X3R5cGUpCit4ZnNfbG9nX3Jlc2VydmUoCisJc3RydWN0IHhmc19tb3VudAkqbXAsCisJaW50CQkgCXVuaXRfYnl0ZXMsCisJaW50CQkgCWNudCwKKwlzdHJ1Y3QgeGxvZ190aWNrZXQJKip0aWNrZXQsCisJX191aW50OF90CSAJY2xpZW50LAorCXVpbnQJCSAJZmxhZ3MsCisJdWludAkJIAl0X3R5cGUpCiB7Ci0JeGxvZ190CQkqbG9nID0gbXAtPm1fbG9nOwotCXhsb2dfdGlja2V0X3QJKmludGVybmFsX3RpY2tldDsKLQlpbnQJCXJldHZhbCA9IDA7CisJc3RydWN0IGxvZwkJKmxvZyA9IG1wLT5tX2xvZzsKKwlzdHJ1Y3QgeGxvZ190aWNrZXQJKmludGVybmFsX3RpY2tldDsKKwlpbnQJCQlyZXR2YWwgPSAwOwogCiAJQVNTRVJUKGNsaWVudCA9PSBYRlNfVFJBTlNBQ1RJT04gfHwgY2xpZW50ID09IFhGU19MT0cpOwogCUFTU0VSVCgoZmxhZ3MgJiBYRlNfTE9HX05PU0xFRVApID09IDApOwpAQCAtMzY3LDcgKzM2NSw3IEBACiAKIAlpZiAoKnRpY2tldCAhPSBOVUxMKSB7CiAJCUFTU0VSVChmbGFncyAmIFhGU19MT0dfUEVSTV9SRVNFUlYpOwotCQlpbnRlcm5hbF90aWNrZXQgPSAoeGxvZ190aWNrZXRfdCAqKSp0aWNrZXQ7CisJCWludGVybmFsX3RpY2tldCA9ICp0aWNrZXQ7CiAKIAkJdHJhY2VfeGZzX2xvZ19yZXNlcnZlKGxvZywgaW50ZXJuYWxfdGlja2V0KTsKIApAQCAtNTE5LDcgKzUxNyw3IEBACiAJeGxvZ19pbl9jb3JlX3QJICpmaXJzdF9pY2xvZzsKICNlbmRpZgogCXhmc19sb2dfaW92ZWNfdCAgcmVnWzFdOwotCXhmc19sb2dfdGlja2V0X3QgdGljID0gTlVMTDsKKwl4bG9nX3RpY2tldF90CSp0aWMgPSBOVUxMOwogCXhmc19sc25fdAkgbHNuOwogCWludAkJIGVycm9yOwogCkBAIC02NTYsMjQgKzY1NCwyNCBAQAogICogdHJhbnNhY3Rpb24gb2NjdXIgd2l0aCBvbmUgY2FsbCB0byB4ZnNfbG9nX3dyaXRlKCkuCiAgKi8KIGludAoteGZzX2xvZ193cml0ZSh4ZnNfbW91bnRfdCAqCW1wLAotCSAgICAgIHhmc19sb2dfaW92ZWNfdAlyZWdbXSwKLQkgICAgICBpbnQJCW5lbnRyaWVzLAotCSAgICAgIHhmc19sb2dfdGlja2V0X3QJdGljLAotCSAgICAgIHhmc19sc25fdAkJKnN0YXJ0X2xzbikKK3hmc19sb2dfd3JpdGUoCisJc3RydWN0IHhmc19tb3VudAkqbXAsCisJc3RydWN0IHhmc19sb2dfaW92ZWMJcmVnW10sCisJaW50CQkJbmVudHJpZXMsCisJc3RydWN0IHhsb2dfdGlja2V0CSp0aWMsCisJeGZzX2xzbl90CQkqc3RhcnRfbHNuKQogewotCWludAllcnJvcjsKLQl4bG9nX3QgKmxvZyA9IG1wLT5tX2xvZzsKKwlzdHJ1Y3QgbG9nCQkqbG9nID0gbXAtPm1fbG9nOworCWludAkJCWVycm9yOwogCiAJaWYgKFhMT0dfRk9SQ0VEX1NIVVRET1dOKGxvZykpCiAJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAotCWlmICgoZXJyb3IgPSB4bG9nX3dyaXRlKG1wLCByZWcsIG5lbnRyaWVzLCB0aWMsIHN0YXJ0X2xzbiwgTlVMTCwgMCkpKSB7CisJZXJyb3IgPSB4bG9nX3dyaXRlKG1wLCByZWcsIG5lbnRyaWVzLCB0aWMsIHN0YXJ0X2xzbiwgTlVMTCwgMCk7CisJaWYgKGVycm9yKQogCQl4ZnNfZm9yY2Vfc2h1dGRvd24obXAsIFNIVVRET1dOX0xPR19JT19FUlJPUik7Ci0JfQogCXJldHVybiBlcnJvcjsKLX0JLyogeGZzX2xvZ193cml0ZSAqLwotCit9CiAKIHZvaWQKIHhmc19sb2dfbW92ZV90YWlsKHhmc19tb3VudF90CSptcCwKQEAgLTE2NDIsMTYgKzE2NDAsMTYgQEAKICAqCWJ5dGVzIGhhdmUgYmVlbiB3cml0dGVuIG91dC4KICAqLwogU1RBVElDIGludAoteGxvZ193cml0ZSh4ZnNfbW91bnRfdCAqCW1wLAotCSAgIHhmc19sb2dfaW92ZWNfdAlyZWdbXSwKLQkgICBpbnQJCQluZW50cmllcywKLQkgICB4ZnNfbG9nX3RpY2tldF90CXRpYywKLQkgICB4ZnNfbHNuX3QJCSpzdGFydF9sc24sCi0JICAgeGxvZ19pbl9jb3JlX3QJKipjb21taXRfaWNsb2csCi0JICAgdWludAkJCWZsYWdzKQoreGxvZ193cml0ZSgKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCwKKwlzdHJ1Y3QgeGZzX2xvZ19pb3ZlYwlyZWdbXSwKKwlpbnQJCQluZW50cmllcywKKwlzdHJ1Y3QgeGxvZ190aWNrZXQJKnRpY2tldCwKKwl4ZnNfbHNuX3QJCSpzdGFydF9sc24sCisJc3RydWN0IHhsb2dfaW5fY29yZQkqKmNvbW1pdF9pY2xvZywKKwl1aW50CQkJZmxhZ3MpCiB7CiAgICAgeGxvZ190CSAgICAgKmxvZyA9IG1wLT5tX2xvZzsKLSAgICB4bG9nX3RpY2tldF90ICAgICp0aWNrZXQgPSAoeGxvZ190aWNrZXRfdCAqKXRpYzsKICAgICB4bG9nX2luX2NvcmVfdCAgICppY2xvZyA9IE5VTEw7ICAvKiBwdHIgdG8gY3VycmVudCBpbi1jb3JlIGxvZyAqLwogICAgIHhsb2dfb3BfaGVhZGVyX3QgKmxvZ29wX2hlYWQ7ICAgIC8qIHB0ciB0byBsb2cgb3BlcmF0aW9uIGhlYWRlciAqLwogICAgIF9fcHNpbnRfdAkgICAgIHB0cjsJICAgICAvKiBjb3B5IGFkZHJlc3MgaW50byBkYXRhIHJlZ2lvbiAqLwpAQCAtMTc2NSw3ICsxNzYzLDcgQEAKIAkgICAgZGVmYXVsdDoKIAkJeGZzX2ZzX2Ntbl9lcnIoQ0VfV0FSTiwgbXAsCiAJCSAgICAiQmFkIFhGUyB0cmFuc2FjdGlvbiBjbGllbnRpZCAweCV4IGluIHRpY2tldCAweCVwIiwKLQkJICAgIGxvZ29wX2hlYWQtPm9oX2NsaWVudGlkLCB0aWMpOworCQkgICAgbG9nb3BfaGVhZC0+b2hfY2xpZW50aWQsIHRpY2tldCk7CiAJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAkgICAgfQogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZy5oIGIvZnMveGZzL3hmc19sb2cuaAppbmRleCA3MDc0YmU5Li45N2EyNGM3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZy5oCisrKyBiL2ZzL3hmcy94ZnNfbG9nLmgKQEAgLTExMCw4ICsxMTAsNiBAQAogCXVpbnQJCWlfdHlwZTsJCS8qIHR5cGUgb2YgcmVnaW9uICovCiB9IHhmc19sb2dfaW92ZWNfdDsKIAotdHlwZWRlZiB2b2lkKiB4ZnNfbG9nX3RpY2tldF90OwotCiAvKgogICogU3RydWN0dXJlIHVzZWQgdG8gcGFzcyBjYWxsYmFjayBmdW5jdGlvbiBhbmQgdGhlIGZ1bmN0aW9uJ3MgYXJndW1lbnQKICAqIHRvIHRoZSBsb2cgbWFuYWdlci4KQEAgLTEyNiwxMCArMTI0LDEyIEBACiAjaWZkZWYgX19LRVJORUxfXwogLyogTG9nIG1hbmFnZXIgaW50ZXJmYWNlcyAqLwogc3RydWN0IHhmc19tb3VudDsKK3N0cnVjdCB4bG9nX2luX2NvcmU7CiBzdHJ1Y3QgeGxvZ190aWNrZXQ7CisKIHhmc19sc25fdCB4ZnNfbG9nX2RvbmUoc3RydWN0IHhmc19tb3VudCAqbXAsCi0JCSAgICAgICB4ZnNfbG9nX3RpY2tldF90IHRpY2tldCwKLQkJICAgICAgIHZvaWQJCSoqaWNsb2csCisJCSAgICAgICBzdHJ1Y3QgeGxvZ190aWNrZXQgKnRpY2tldCwKKwkJICAgICAgIHN0cnVjdCB4bG9nX2luX2NvcmUgKippY2xvZywKIAkJICAgICAgIHVpbnQJCWZsYWdzKTsKIGludAkgIF94ZnNfbG9nX2ZvcmNlKHN0cnVjdCB4ZnNfbW91bnQgKm1wLAogCQkJIHVpbnQJCWZsYWdzLApAQCAtMTUxLDIxICsxNTEsMjEgQEAKIHZvaWQJICB4ZnNfbG9nX21vdmVfdGFpbChzdHJ1Y3QgeGZzX21vdW50CSptcCwKIAkJCSAgICB4ZnNfbHNuX3QJCXRhaWxfbHNuKTsKIGludAkgIHhmc19sb2dfbm90aWZ5KHN0cnVjdCB4ZnNfbW91bnQJKm1wLAotCQkJIHZvaWQJCQkqaWNsb2csCisJCQkgc3RydWN0IHhsb2dfaW5fY29yZQkqaWNsb2csCiAJCQkgeGZzX2xvZ19jYWxsYmFja190CSpjYWxsYmFja19lbnRyeSk7CiBpbnQJICB4ZnNfbG9nX3JlbGVhc2VfaWNsb2coc3RydWN0IHhmc19tb3VudCAqbXAsCi0JCQkgdm9pZAkJCSAqaWNsb2dfaG5kbCk7CisJCQkgc3RydWN0IHhsb2dfaW5fY29yZQkgKmljbG9nKTsKIGludAkgIHhmc19sb2dfcmVzZXJ2ZShzdHJ1Y3QgeGZzX21vdW50ICptcCwKIAkJCSAgaW50CQkgICBsZW5ndGgsCiAJCQkgIGludAkJICAgY291bnQsCi0JCQkgIHhmc19sb2dfdGlja2V0X3QgKnRpY2tldCwKKwkJCSAgc3RydWN0IHhsb2dfdGlja2V0ICoqdGlja2V0LAogCQkJICBfX3VpbnQ4X3QJICAgY2xpZW50aWQsCiAJCQkgIHVpbnQJCSAgIGZsYWdzLAogCQkJICB1aW50CQkgICB0X3R5cGUpOwogaW50CSAgeGZzX2xvZ193cml0ZShzdHJ1Y3QgeGZzX21vdW50ICptcCwKIAkJCXhmc19sb2dfaW92ZWNfdCAgcmVnaW9uW10sCiAJCQlpbnQJCSBuZW50cmllcywKLQkJCXhmc19sb2dfdGlja2V0X3QgdGlja2V0LAorCQkJc3RydWN0IHhsb2dfdGlja2V0ICp0aWNrZXQsCiAJCQl4ZnNfbHNuX3QJICpzdGFydF9sc24pOwogaW50CSAgeGZzX2xvZ191bm1vdW50X3dyaXRlKHN0cnVjdCB4ZnNfbW91bnQgKm1wKTsKIHZvaWQgICAgICB4ZnNfbG9nX3VubW91bnQoc3RydWN0IHhmc19tb3VudCAqbXApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5jIGIvZnMveGZzL3hmc19tb3VudC5jCmluZGV4IDZhZmFhZWIuLmU3OWI1NmIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuYworKysgYi9mcy94ZnMveGZzX21vdW50LmMKQEAgLTEwOTcsMTMgKzEwOTcsMTUgQEAKIAlfX3VpbnQ2NF90IHJlc2Jsa3M7CiAKIAkvKgotCSAqIFdlIGRlZmF1bHQgdG8gNSUgb3IgMTAyNCBmc2JzIG9mIHNwYWNlIHJlc2VydmVkLCB3aGljaGV2ZXIgaXMgc21hbGxlci4KLQkgKiBUaGlzIG1heSBkcml2ZSB1cyBzdHJhaWdodCB0byBFTk9TUEMgb24gbW91bnQsIGJ1dCB0aGF0IGltcGxpZXMKLQkgKiB3ZSB3ZXJlIGFscmVhZHkgdGhlcmUgb24gdGhlIGxhc3QgdW5tb3VudC4gV2FybiBpZiB0aGlzIG9jY3Vycy4KKwkgKiBXZSBkZWZhdWx0IHRvIDUlIG9yIDgxOTIgZnNicyBvZiBzcGFjZSByZXNlcnZlZCwgd2hpY2hldmVyIGlzCisJICogc21hbGxlci4gIFRoaXMgaXMgaW50ZW5kZWQgdG8gY292ZXIgY29uY3VycmVudCBhbGxvY2F0aW9uCisJICogdHJhbnNhY3Rpb25zIHdoZW4gd2UgaW5pdGlhbGx5IGhpdCBlbm9zcGMuIFRoZXNlIGVhY2ggcmVxdWlyZSBhIDQKKwkgKiBibG9jayByZXNlcnZhdGlvbi4gSGVuY2UgYnkgZGVmYXVsdCB3ZSBjb3ZlciByb3VnaGx5IDIwMDAgY29uY3VycmVudAorCSAqIGFsbG9jYXRpb24gcmVzZXJ2YXRpb25zLgogCSAqLwogCXJlc2Jsa3MgPSBtcC0+bV9zYi5zYl9kYmxvY2tzOwogCWRvX2RpdihyZXNibGtzLCAyMCk7Ci0JcmVzYmxrcyA9IG1pbl90KF9fdWludDY0X3QsIHJlc2Jsa3MsIDEwMjQpOworCXJlc2Jsa3MgPSBtaW5fdChfX3VpbnQ2NF90LCByZXNibGtzLCA4MTkyKTsKIAlyZXR1cm4gcmVzYmxrczsKIH0KIApAQCAtMTQxNyw2ICsxNDE5LDkgQEAKIAkgKiB3aGVuIGF0IEVOT1NQQy4gVGhpcyBpcyBuZWVkZWQgZm9yIG9wZXJhdGlvbnMgbGlrZSBjcmVhdGUgd2l0aAogCSAqIGF0dHIsIHVud3JpdHRlbiBleHRlbnQgY29udmVyc2lvbiBhdCBFTk9TUEMsIGV0Yy4gRGF0YSBhbGxvY2F0aW9ucwogCSAqIGFyZSBub3QgYWxsb3dlZCB0byB1c2UgdGhpcyByZXNlcnZlZCBzcGFjZS4KKwkgKgorCSAqIFRoaXMgbWF5IGRyaXZlIHVzIHN0cmFpZ2h0IHRvIEVOT1NQQyBvbiBtb3VudCwgYnV0IHRoYXQgaW1wbGllcworCSAqIHdlIHdlcmUgYWxyZWFkeSB0aGVyZSBvbiB0aGUgbGFzdCB1bm1vdW50LiBXYXJuIGlmIHRoaXMgb2NjdXJzLgogCSAqLwogCWlmICghKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkpIHsKIAkJcmVzYmxrcyA9IHhmc19kZWZhdWx0X3Jlc2Jsa3MobXApOwpAQCAtMTcyNSwyNiArMTczMCwzMCBAQAogCQkJCWxjb3VudGVyICs9IHJlbTsKIAkJCX0KIAkJfSBlbHNlIHsJCQkJLyogVGFraW5nIGJsb2NrcyBhd2F5ICovCi0KIAkJCWxjb3VudGVyICs9IGRlbHRhOwotCi0JCS8qCi0JCSAqIElmIHdlcmUgb3V0IG9mIGJsb2NrcywgdXNlIGFueSBhdmFpbGFibGUgcmVzZXJ2ZWQgYmxvY2tzIGlmCi0JCSAqIHdlcmUgYWxsb3dlZCB0by4KLQkJICovCi0KLQkJCWlmIChsY291bnRlciA8IDApIHsKLQkJCQlpZiAocnN2ZCkgewotCQkJCQlsY291bnRlciA9IChsb25nIGxvbmcpbXAtPm1fcmVzYmxrc19hdmFpbCArIGRlbHRhOwotCQkJCQlpZiAobGNvdW50ZXIgPCAwKSB7Ci0JCQkJCQlyZXR1cm4gWEZTX0VSUk9SKEVOT1NQQyk7Ci0JCQkJCX0KLQkJCQkJbXAtPm1fcmVzYmxrc19hdmFpbCA9IGxjb3VudGVyOwotCQkJCQlyZXR1cm4gMDsKLQkJCQl9IGVsc2UgewkvKiBub3QgcmVzZXJ2ZWQgKi8KLQkJCQkJcmV0dXJuIFhGU19FUlJPUihFTk9TUEMpOwotCQkJCX0KKwkJCWlmIChsY291bnRlciA+PSAwKSB7CisJCQkJbXAtPm1fc2Iuc2JfZmRibG9ja3MgPSBsY291bnRlciArCisJCQkJCQkJWEZTX0FMTE9DX1NFVF9BU0lERShtcCk7CisJCQkJcmV0dXJuIDA7CiAJCQl9CisKKwkJCS8qCisJCQkgKiBXZSBhcmUgb3V0IG9mIGJsb2NrcywgdXNlIGFueSBhdmFpbGFibGUgcmVzZXJ2ZWQKKwkJCSAqIGJsb2NrcyBpZiB3ZXJlIGFsbG93ZWQgdG8uCisJCQkgKi8KKwkJCWlmICghcnN2ZCkKKwkJCQlyZXR1cm4gWEZTX0VSUk9SKEVOT1NQQyk7CisKKwkJCWxjb3VudGVyID0gKGxvbmcgbG9uZyltcC0+bV9yZXNibGtzX2F2YWlsICsgZGVsdGE7CisJCQlpZiAobGNvdW50ZXIgPj0gMCkgeworCQkJCW1wLT5tX3Jlc2Jsa3NfYXZhaWwgPSBsY291bnRlcjsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXByaW50a19vbmNlKEtFUk5fV0FSTklORworCQkJCSJGaWxlc3lzdGVtIFwiJXNcIjogcmVzZXJ2ZSBibG9ja3MgZGVwbGV0ZWQhICIKKwkJCQkiQ29uc2lkZXIgaW5jcmVhc2luZyByZXNlcnZlIHBvb2wgc2l6ZS4iLAorCQkJCW1wLT5tX2ZzbmFtZSk7CisJCQlyZXR1cm4gWEZTX0VSUk9SKEVOT1NQQyk7CiAJCX0KIAogCQltcC0+bV9zYi5zYl9mZGJsb2NrcyA9IGxjb3VudGVyICsgWEZTX0FMTE9DX1NFVF9BU0lERShtcCk7CkBAIC0yMDUyLDYgKzIwNjEsMjYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKKy8qCisgKiBJZiB0aGUgdW5kZXJseWluZyAoZGF0YS9sb2cvcnQpIGRldmljZSBpcyByZWFkb25seSwgdGhlcmUgYXJlIHNvbWUKKyAqIG9wZXJhdGlvbnMgdGhhdCBjYW5ub3QgcHJvY2VlZC4KKyAqLworaW50Cit4ZnNfZGV2X2lzX3JlYWRfb25seSgKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCwKKwljaGFyCQkJKm1lc3NhZ2UpCit7CisJaWYgKHhmc19yZWFkb25seV9idWZ0YXJnKG1wLT5tX2RkZXZfdGFyZ3ApIHx8CisJICAgIHhmc19yZWFkb25seV9idWZ0YXJnKG1wLT5tX2xvZ2Rldl90YXJncCkgfHwKKwkgICAgKG1wLT5tX3J0ZGV2X3RhcmdwICYmIHhmc19yZWFkb25seV9idWZ0YXJnKG1wLT5tX3J0ZGV2X3RhcmdwKSkpIHsKKwkJY21uX2VycihDRV9OT1RFLAorCQkJIlhGUzogJXMgcmVxdWlyZWQgb24gcmVhZC1vbmx5IGRldmljZS4iLCBtZXNzYWdlKTsKKwkJY21uX2VycihDRV9OT1RFLAorCQkJIlhGUzogd3JpdGUgYWNjZXNzIHVuYXZhaWxhYmxlLCBjYW5ub3QgcHJvY2VlZC4iKTsKKwkJcmV0dXJuIEVST0ZTOworCX0KKwlyZXR1cm4gMDsKK30KIAogI2lmZGVmIEhBVkVfUEVSQ1BVX1NCCiAvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5oIGIvZnMveGZzL3hmc19tb3VudC5oCmluZGV4IDE0ZGFmZDYuLjRmYTBiYzcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuaAorKysgYi9mcy94ZnMveGZzX21vdW50LmgKQEAgLTQzNiw2ICs0MzYsOCBAQAogZXh0ZXJuIGludAl4ZnNfZnNfd3JpdGFibGUoeGZzX21vdW50X3QgKik7CiBleHRlcm4gaW50CXhmc19zYl92YWxpZGF0ZV9mc2JfY291bnQoc3RydWN0IHhmc19zYiAqLCBfX3VpbnQ2NF90KTsKIAorZXh0ZXJuIGludAl4ZnNfZGV2X2lzX3JlYWRfb25seShzdHJ1Y3QgeGZzX21vdW50ICosIGNoYXIgKik7CisKIGV4dGVybiBpbnQJeGZzX2Rtb3BzX2dldChzdHJ1Y3QgeGZzX21vdW50ICopOwogZXh0ZXJuIHZvaWQJeGZzX2Rtb3BzX3B1dChzdHJ1Y3QgeGZzX21vdW50ICopOwogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zLmMgYi9mcy94ZnMveGZzX3RyYW5zLmMKaW5kZXggYmU5NDJkNC4uZjczZTM1OCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFucy5jCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnMuYwpAQCAtNzk2LDcgKzc5Niw3IEBACiAJaW50CQkJc3luYzsKICNkZWZpbmUJWEZTX1RSQU5TX0xPR1ZFQ19DT1VOVAkxNgogCXhmc19sb2dfaW92ZWNfdAkJbG9nX3ZlY3Rvcl9mYXN0W1hGU19UUkFOU19MT0dWRUNfQ09VTlRdOwotCXZvaWQJCQkqY29tbWl0X2ljbG9nOworCXN0cnVjdCB4bG9nX2luX2NvcmUJKmNvbW1pdF9pY2xvZzsKIAlpbnQJCQlzaHV0ZG93bjsKIAogCWNvbW1pdF9sc24gPSAtMTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnMuaCBiL2ZzL3hmcy94ZnNfdHJhbnMuaAppbmRleCBjOTNlM2ExLi43OWM4YmFiIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zLmgKKysrIGIvZnMveGZzL3hmc190cmFucy5oCkBAIC05MTAsNyArOTEwLDcgQEAKIAl1bnNpZ25lZCBpbnQJCXRfYmxrX3Jlc191c2VkOwkvKiAjIG9mIHJlc3ZkIGJsb2NrcyB1c2VkICovCiAJdW5zaWduZWQgaW50CQl0X3J0eF9yZXM7CS8qICMgb2YgcnQgZXh0ZW50cyByZXN2ZCAqLwogCXVuc2lnbmVkIGludAkJdF9ydHhfcmVzX3VzZWQ7CS8qICMgb2YgcmVzdmQgcnQgZXh0ZW50cyB1c2VkICovCi0JeGZzX2xvZ190aWNrZXRfdAl0X3RpY2tldDsJLyogbG9nIG1nciB0aWNrZXQgKi8KKwlzdHJ1Y3QgeGxvZ190aWNrZXQJKnRfdGlja2V0OwkvKiBsb2cgbWdyIHRpY2tldCAqLwogCXhmc19sc25fdAkJdF9sc247CQkvKiBsb2cgc2VxIG51bSBvZiBzdGFydCBvZgogCQkJCQkJICogdHJhbnNhY3Rpb24uICovCiAJeGZzX2xzbl90CQl0X2NvbW1pdF9sc247CS8qIGxvZyBzZXEgbnVtIG9mIGVuZCBvZgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFuc19idWYuYyBiL2ZzL3hmcy94ZnNfdHJhbnNfYnVmLmMKaW5kZXggNWZmZDU0NC4uZmI1ODYzNjAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnNfYnVmLmMKKysrIGIvZnMveGZzL3hmc190cmFuc19idWYuYwpAQCAtNDYsNiArNDYsNjUgQEAKIFNUQVRJQyB4ZnNfYnVmX3QgKnhmc190cmFuc19idWZfaXRlbV9tYXRjaF9hbGwoeGZzX3RyYW5zX3QgKiwgeGZzX2J1ZnRhcmdfdCAqLAogCQl4ZnNfZGFkZHJfdCwgaW50KTsKIAorLyoKKyAqIEFkZCB0aGUgbG9ja2VkIGJ1ZmZlciB0byB0aGUgdHJhbnNhY3Rpb24uCisgKgorICogVGhlIGJ1ZmZlciBtdXN0IGJlIGxvY2tlZCwgYW5kIGl0IGNhbm5vdCBiZSBhc3NvY2lhdGVkIHdpdGggYW55CisgKiB0cmFuc2FjdGlvbi4KKyAqCisgKiBJZiB0aGUgYnVmZmVyIGRvZXMgbm90IHlldCBoYXZlIGEgYnVmIGxvZyBpdGVtIGFzc29jaWF0ZWQgd2l0aCBpdCwKKyAqIHRoZW4gYWxsb2NhdGUgb25lIGZvciBpdC4gIFRoZW4gYWRkIHRoZSBidWYgaXRlbSB0byB0aGUgdHJhbnNhY3Rpb24uCisgKi8KK1NUQVRJQyB2b2lkCitfeGZzX3RyYW5zX2Jqb2luKAorCXN0cnVjdCB4ZnNfdHJhbnMJKnRwLAorCXN0cnVjdCB4ZnNfYnVmCQkqYnAsCisJaW50CQkJcmVzZXRfcmVjdXIpCit7CisJc3RydWN0IHhmc19idWZfbG9nX2l0ZW0JKmJpcDsKKworCUFTU0VSVChYRlNfQlVGX0lTQlVTWShicCkpOworCUFTU0VSVChYRlNfQlVGX0ZTUFJJVkFURTIoYnAsIHZvaWQgKikgPT0gTlVMTCk7CisKKwkvKgorCSAqIFRoZSB4ZnNfYnVmX2xvZ19pdGVtIHBvaW50ZXIgaXMgc3RvcmVkIGluIGJfZnNwcml2YXRlLiAgSWYKKwkgKiBpdCBkb2Vzbid0IGhhdmUgb25lIHlldCwgdGhlbiBhbGxvY2F0ZSBvbmUgYW5kIGluaXRpYWxpemUgaXQuCisJICogVGhlIGNoZWNrcyB0byBzZWUgaWYgb25lIGlzIHRoZXJlIGFyZSBpbiB4ZnNfYnVmX2l0ZW1faW5pdCgpLgorCSAqLworCXhmc19idWZfaXRlbV9pbml0KGJwLCB0cC0+dF9tb3VudHApOworCWJpcCA9IFhGU19CVUZfRlNQUklWQVRFKGJwLCB4ZnNfYnVmX2xvZ19pdGVtX3QgKik7CisJQVNTRVJUKCEoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX1NUQUxFKSk7CisJQVNTRVJUKCEoYmlwLT5ibGlfZm9ybWF0LmJsZl9mbGFncyAmIFhGU19CTElfQ0FOQ0VMKSk7CisJQVNTRVJUKCEoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX0xPR0dFRCkpOworCWlmIChyZXNldF9yZWN1cikKKwkJYmlwLT5ibGlfcmVjdXIgPSAwOworCisJLyoKKwkgKiBUYWtlIGEgcmVmZXJlbmNlIGZvciB0aGlzIHRyYW5zYWN0aW9uIG9uIHRoZSBidWYgaXRlbS4KKwkgKi8KKwlhdG9taWNfaW5jKCZiaXAtPmJsaV9yZWZjb3VudCk7CisKKwkvKgorCSAqIEdldCBhIGxvZ19pdGVtX2Rlc2MgdG8gcG9pbnQgYXQgdGhlIG5ldyBpdGVtLgorCSAqLworCSh2b2lkKSB4ZnNfdHJhbnNfYWRkX2l0ZW0odHAsICh4ZnNfbG9nX2l0ZW1fdCAqKWJpcCk7CisKKwkvKgorCSAqIEluaXRpYWxpemUgYl9mc3ByaXZhdGUyIHNvIHdlIGNhbiBmaW5kIGl0IHdpdGggaW5jb3JlX21hdGNoKCkKKwkgKiBpbiB4ZnNfdHJhbnNfZ2V0X2J1ZigpIGFuZCBmcmllbmRzIGFib3ZlLgorCSAqLworCVhGU19CVUZfU0VUX0ZTUFJJVkFURTIoYnAsIHRwKTsKKworfQorCit2b2lkCit4ZnNfdHJhbnNfYmpvaW4oCisJc3RydWN0IHhmc190cmFucwkqdHAsCisJc3RydWN0IHhmc19idWYJCSpicCkKK3sKKwlfeGZzX3RyYW5zX2Jqb2luKHRwLCBicCwgMCk7CisJdHJhY2VfeGZzX3RyYW5zX2Jqb2luKGJwLT5iX2ZzcHJpdik7Cit9CiAKIC8qCiAgKiBHZXQgYW5kIGxvY2sgdGhlIGJ1ZmZlciBmb3IgdGhlIGNhbGxlciBpZiBpdCBpcyBub3QgYWxyZWFkeQpAQCAtMTMyLDQwICsxOTEsOCBAQAogCiAJQVNTRVJUKCFYRlNfQlVGX0dFVEVSUk9SKGJwKSk7CiAKLQkvKgotCSAqIFRoZSB4ZnNfYnVmX2xvZ19pdGVtIHBvaW50ZXIgaXMgc3RvcmVkIGluIGJfZnNwcml2YXRlLiAgSWYKLQkgKiBpdCBkb2Vzbid0IGhhdmUgb25lIHlldCwgdGhlbiBhbGxvY2F0ZSBvbmUgYW5kIGluaXRpYWxpemUgaXQuCi0JICogVGhlIGNoZWNrcyB0byBzZWUgaWYgb25lIGlzIHRoZXJlIGFyZSBpbiB4ZnNfYnVmX2l0ZW1faW5pdCgpLgotCSAqLwotCXhmc19idWZfaXRlbV9pbml0KGJwLCB0cC0+dF9tb3VudHApOwotCi0JLyoKLQkgKiBTZXQgdGhlIHJlY3Vyc2lvbiBjb3VudCBmb3IgdGhlIGJ1ZmZlciB3aXRoaW4gdGhpcyB0cmFuc2FjdGlvbgotCSAqIHRvIDAuCi0JICovCi0JYmlwID0gWEZTX0JVRl9GU1BSSVZBVEUoYnAsIHhmc19idWZfbG9nX2l0ZW1fdCopOwotCUFTU0VSVCghKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9TVEFMRSkpOwotCUFTU0VSVCghKGJpcC0+YmxpX2Zvcm1hdC5ibGZfZmxhZ3MgJiBYRlNfQkxJX0NBTkNFTCkpOwotCUFTU0VSVCghKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9MT0dHRUQpKTsKLQliaXAtPmJsaV9yZWN1ciA9IDA7Ci0KLQkvKgotCSAqIFRha2UgYSByZWZlcmVuY2UgZm9yIHRoaXMgdHJhbnNhY3Rpb24gb24gdGhlIGJ1ZiBpdGVtLgotCSAqLwotCWF0b21pY19pbmMoJmJpcC0+YmxpX3JlZmNvdW50KTsKLQotCS8qCi0JICogR2V0IGEgbG9nX2l0ZW1fZGVzYyB0byBwb2ludCBhdCB0aGUgbmV3IGl0ZW0uCi0JICovCi0JKHZvaWQpIHhmc190cmFuc19hZGRfaXRlbSh0cCwgKHhmc19sb2dfaXRlbV90KiliaXApOwotCi0JLyoKLQkgKiBJbml0aWFsaXplIGJfZnNwcml2YXRlMiBzbyB3ZSBjYW4gZmluZCBpdCB3aXRoIGluY29yZV9tYXRjaCgpCi0JICogYWJvdmUuCi0JICovCi0JWEZTX0JVRl9TRVRfRlNQUklWQVRFMihicCwgdHApOwotCi0JdHJhY2VfeGZzX3RyYW5zX2dldF9idWYoYmlwKTsKKwlfeGZzX3RyYW5zX2Jqb2luKHRwLCBicCwgMSk7CisJdHJhY2VfeGZzX3RyYW5zX2dldF9idWYoYnAtPmJfZnNwcml2KTsKIAlyZXR1cm4gKGJwKTsKIH0KIApAQCAtMjEwLDQ0ICsyMzcsMTEgQEAKIAl9CiAKIAlicCA9IHhmc19nZXRzYihtcCwgZmxhZ3MpOwotCWlmIChicCA9PSBOVUxMKSB7CisJaWYgKGJwID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwotCX0KIAotCS8qCi0JICogVGhlIHhmc19idWZfbG9nX2l0ZW0gcG9pbnRlciBpcyBzdG9yZWQgaW4gYl9mc3ByaXZhdGUuICBJZgotCSAqIGl0IGRvZXNuJ3QgaGF2ZSBvbmUgeWV0LCB0aGVuIGFsbG9jYXRlIG9uZSBhbmQgaW5pdGlhbGl6ZSBpdC4KLQkgKiBUaGUgY2hlY2tzIHRvIHNlZSBpZiBvbmUgaXMgdGhlcmUgYXJlIGluIHhmc19idWZfaXRlbV9pbml0KCkuCi0JICovCi0JeGZzX2J1Zl9pdGVtX2luaXQoYnAsIG1wKTsKLQotCS8qCi0JICogU2V0IHRoZSByZWN1cnNpb24gY291bnQgZm9yIHRoZSBidWZmZXIgd2l0aGluIHRoaXMgdHJhbnNhY3Rpb24KLQkgKiB0byAwLgotCSAqLwotCWJpcCA9IFhGU19CVUZfRlNQUklWQVRFKGJwLCB4ZnNfYnVmX2xvZ19pdGVtX3QqKTsKLQlBU1NFUlQoIShiaXAtPmJsaV9mbGFncyAmIFhGU19CTElfU1RBTEUpKTsKLQlBU1NFUlQoIShiaXAtPmJsaV9mb3JtYXQuYmxmX2ZsYWdzICYgWEZTX0JMSV9DQU5DRUwpKTsKLQlBU1NFUlQoIShiaXAtPmJsaV9mbGFncyAmIFhGU19CTElfTE9HR0VEKSk7Ci0JYmlwLT5ibGlfcmVjdXIgPSAwOwotCi0JLyoKLQkgKiBUYWtlIGEgcmVmZXJlbmNlIGZvciB0aGlzIHRyYW5zYWN0aW9uIG9uIHRoZSBidWYgaXRlbS4KLQkgKi8KLQlhdG9taWNfaW5jKCZiaXAtPmJsaV9yZWZjb3VudCk7Ci0KLQkvKgotCSAqIEdldCBhIGxvZ19pdGVtX2Rlc2MgdG8gcG9pbnQgYXQgdGhlIG5ldyBpdGVtLgotCSAqLwotCSh2b2lkKSB4ZnNfdHJhbnNfYWRkX2l0ZW0odHAsICh4ZnNfbG9nX2l0ZW1fdCopYmlwKTsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSBiX2ZzcHJpdmF0ZTIgc28gd2UgY2FuIGZpbmQgaXQgd2l0aCBpbmNvcmVfbWF0Y2goKQotCSAqIGFib3ZlLgotCSAqLwotCVhGU19CVUZfU0VUX0ZTUFJJVkFURTIoYnAsIHRwKTsKLQotCXRyYWNlX3hmc190cmFuc19nZXRzYihiaXApOworCV94ZnNfdHJhbnNfYmpvaW4odHAsIGJwLCAxKTsKKwl0cmFjZV94ZnNfdHJhbnNfZ2V0c2IoYnAtPmJfZnNwcml2KTsKIAlyZXR1cm4gKGJwKTsKIH0KIApAQCAtNDI1LDQwICs0MTksOSBAQAogCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKIAkJZ290byBzaHV0ZG93bl9hYm9ydDsKIAotCS8qCi0JICogVGhlIHhmc19idWZfbG9nX2l0ZW0gcG9pbnRlciBpcyBzdG9yZWQgaW4gYl9mc3ByaXZhdGUuICBJZgotCSAqIGl0IGRvZXNuJ3QgaGF2ZSBvbmUgeWV0LCB0aGVuIGFsbG9jYXRlIG9uZSBhbmQgaW5pdGlhbGl6ZSBpdC4KLQkgKiBUaGUgY2hlY2tzIHRvIHNlZSBpZiBvbmUgaXMgdGhlcmUgYXJlIGluIHhmc19idWZfaXRlbV9pbml0KCkuCi0JICovCi0JeGZzX2J1Zl9pdGVtX2luaXQoYnAsIHRwLT50X21vdW50cCk7CisJX3hmc190cmFuc19iam9pbih0cCwgYnAsIDEpOworCXRyYWNlX3hmc190cmFuc19yZWFkX2J1ZihicC0+Yl9mc3ByaXYpOwogCi0JLyoKLQkgKiBTZXQgdGhlIHJlY3Vyc2lvbiBjb3VudCBmb3IgdGhlIGJ1ZmZlciB3aXRoaW4gdGhpcyB0cmFuc2FjdGlvbgotCSAqIHRvIDAuCi0JICovCi0JYmlwID0gWEZTX0JVRl9GU1BSSVZBVEUoYnAsIHhmc19idWZfbG9nX2l0ZW1fdCopOwotCUFTU0VSVCghKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9TVEFMRSkpOwotCUFTU0VSVCghKGJpcC0+YmxpX2Zvcm1hdC5ibGZfZmxhZ3MgJiBYRlNfQkxJX0NBTkNFTCkpOwotCUFTU0VSVCghKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9MT0dHRUQpKTsKLQliaXAtPmJsaV9yZWN1ciA9IDA7Ci0KLQkvKgotCSAqIFRha2UgYSByZWZlcmVuY2UgZm9yIHRoaXMgdHJhbnNhY3Rpb24gb24gdGhlIGJ1ZiBpdGVtLgotCSAqLwotCWF0b21pY19pbmMoJmJpcC0+YmxpX3JlZmNvdW50KTsKLQotCS8qCi0JICogR2V0IGEgbG9nX2l0ZW1fZGVzYyB0byBwb2ludCBhdCB0aGUgbmV3IGl0ZW0uCi0JICovCi0JKHZvaWQpIHhmc190cmFuc19hZGRfaXRlbSh0cCwgKHhmc19sb2dfaXRlbV90KiliaXApOwotCi0JLyoKLQkgKiBJbml0aWFsaXplIGJfZnNwcml2YXRlMiBzbyB3ZSBjYW4gZmluZCBpdCB3aXRoIGluY29yZV9tYXRjaCgpCi0JICogYWJvdmUuCi0JICovCi0JWEZTX0JVRl9TRVRfRlNQUklWQVRFMihicCwgdHApOwotCi0JdHJhY2VfeGZzX3RyYW5zX3JlYWRfYnVmKGJpcCk7CiAJKmJwcCA9IGJwOwogCXJldHVybiAwOwogCkBAIC02MjMsNTMgKzU4Niw2IEBACiB9CiAKIC8qCi0gKiBBZGQgdGhlIGxvY2tlZCBidWZmZXIgdG8gdGhlIHRyYW5zYWN0aW9uLgotICogVGhlIGJ1ZmZlciBtdXN0IGJlIGxvY2tlZCwgYW5kIGl0IGNhbm5vdCBiZSBhc3NvY2lhdGVkIHdpdGggYW55Ci0gKiB0cmFuc2FjdGlvbi4KLSAqCi0gKiBJZiB0aGUgYnVmZmVyIGRvZXMgbm90IHlldCBoYXZlIGEgYnVmIGxvZyBpdGVtIGFzc29jaWF0ZWQgd2l0aCBpdCwKLSAqIHRoZW4gYWxsb2NhdGUgb25lIGZvciBpdC4gIFRoZW4gYWRkIHRoZSBidWYgaXRlbSB0byB0aGUgdHJhbnNhY3Rpb24uCi0gKi8KLXZvaWQKLXhmc190cmFuc19iam9pbih4ZnNfdHJhbnNfdAkqdHAsCi0JCXhmc19idWZfdAkqYnApCi17Ci0JeGZzX2J1Zl9sb2dfaXRlbV90CSpiaXA7Ci0KLQlBU1NFUlQoWEZTX0JVRl9JU0JVU1koYnApKTsKLQlBU1NFUlQoWEZTX0JVRl9GU1BSSVZBVEUyKGJwLCB2b2lkICopID09IE5VTEwpOwotCi0JLyoKLQkgKiBUaGUgeGZzX2J1Zl9sb2dfaXRlbSBwb2ludGVyIGlzIHN0b3JlZCBpbiBiX2ZzcHJpdmF0ZS4gIElmCi0JICogaXQgZG9lc24ndCBoYXZlIG9uZSB5ZXQsIHRoZW4gYWxsb2NhdGUgb25lIGFuZCBpbml0aWFsaXplIGl0LgotCSAqIFRoZSBjaGVja3MgdG8gc2VlIGlmIG9uZSBpcyB0aGVyZSBhcmUgaW4geGZzX2J1Zl9pdGVtX2luaXQoKS4KLQkgKi8KLQl4ZnNfYnVmX2l0ZW1faW5pdChicCwgdHAtPnRfbW91bnRwKTsKLQliaXAgPSBYRlNfQlVGX0ZTUFJJVkFURShicCwgeGZzX2J1Zl9sb2dfaXRlbV90ICopOwotCUFTU0VSVCghKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9TVEFMRSkpOwotCUFTU0VSVCghKGJpcC0+YmxpX2Zvcm1hdC5ibGZfZmxhZ3MgJiBYRlNfQkxJX0NBTkNFTCkpOwotCUFTU0VSVCghKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9MT0dHRUQpKTsKLQotCS8qCi0JICogVGFrZSBhIHJlZmVyZW5jZSBmb3IgdGhpcyB0cmFuc2FjdGlvbiBvbiB0aGUgYnVmIGl0ZW0uCi0JICovCi0JYXRvbWljX2luYygmYmlwLT5ibGlfcmVmY291bnQpOwotCi0JLyoKLQkgKiBHZXQgYSBsb2dfaXRlbV9kZXNjIHRvIHBvaW50IGF0IHRoZSBuZXcgaXRlbS4KLQkgKi8KLQkodm9pZCkgeGZzX3RyYW5zX2FkZF9pdGVtKHRwLCAoeGZzX2xvZ19pdGVtX3QgKiliaXApOwotCi0JLyoKLQkgKiBJbml0aWFsaXplIGJfZnNwcml2YXRlMiBzbyB3ZSBjYW4gZmluZCBpdCB3aXRoIGluY29yZV9tYXRjaCgpCi0JICogaW4geGZzX3RyYW5zX2dldF9idWYoKSBhbmQgZnJpZW5kcyBhYm92ZS4KLQkgKi8KLQlYRlNfQlVGX1NFVF9GU1BSSVZBVEUyKGJwLCB0cCk7Ci0KLQl0cmFjZV94ZnNfdHJhbnNfYmpvaW4oYmlwKTsKLX0KLQotLyoKICAqIE1hcmsgdGhlIGJ1ZmZlciBhcyBub3QgbmVlZGluZyB0byBiZSB1bmxvY2tlZCB3aGVuIHRoZSBidWYgaXRlbSdzCiAgKiBJT1BfVU5MT0NLKCkgcm91dGluZSBpcyBjYWxsZWQuICBUaGUgYnVmZmVyIG11c3QgYWxyZWFkeSBiZSBsb2NrZWQKICAqIGFuZCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHRyYW5zYWN0aW9uLgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc192bm9kZW9wcy5jIGIvZnMveGZzL3hmc192bm9kZW9wcy5jCmluZGV4IGRkZDJjNWQuLjlkMzc2YmUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYworKysgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKQEAgLTU4NCwxMTMgKzU4NCw2IEBACiB9CiAKIC8qCi0gKiB4ZnNfZnN5bmMKLSAqCi0gKiBUaGlzIGlzIGNhbGxlZCB0byBzeW5jIHRoZSBpbm9kZSBhbmQgaXRzIGRhdGEgb3V0IHRvIGRpc2suICBXZSBuZWVkIHRvIGhvbGQKLSAqIHRoZSBJL08gbG9jayB3aGlsZSBmbHVzaGluZyB0aGUgZGF0YSwgYW5kIHRoZSBpbm9kZSBsb2NrIHdoaWxlIGZsdXNoaW5nIHRoZQotICogaW5vZGUuICBUaGUgaW5vZGUgbG9jayBDQU5OT1QgYmUgaGVsZCB3aGlsZSBmbHVzaGluZyB0aGUgZGF0YSwgc28gYWNxdWlyZQotICogYWZ0ZXIgd2UncmUgZG9uZSB3aXRoIHRoYXQuCi0gKi8KLWludAoteGZzX2ZzeW5jKAotCXhmc19pbm9kZV90CSppcCkKLXsKLQl4ZnNfdHJhbnNfdAkqdHA7Ci0JaW50CQllcnJvciA9IDA7Ci0JaW50CQlsb2dfZmx1c2hlZCA9IDA7Ci0KLQl4ZnNfaXRyYWNlX2VudHJ5KGlwKTsKLQotCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKGlwLT5pX21vdW50KSkKLQkJcmV0dXJuIFhGU19FUlJPUihFSU8pOwotCi0JLyoKLQkgKiBXZSBhbHdheXMgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcmVxdWlyZWQgaW5vZGUgc3RhdGUgaXMgc2FmZSBvbgotCSAqIGRpc2suICBUaGUgaW5vZGUgbWlnaHQgYmUgY2xlYW4gYnV0IHdlIHN0aWxsIG1pZ2h0IG5lZWQgdG8gZm9yY2UgdGhlCi0JICogbG9nIGJlY2F1c2Ugb2YgY29tbWl0dGVkIHRyYW5zYWN0aW9ucyB0aGF0IGhhdmVuJ3QgaGl0IHRoZSBkaXNrIHlldC4KLQkgKiBMaWtld2lzZSwgdGhlcmUgY291bGQgYmUgdW5mbHVzaGVkIG5vbi10cmFuc2FjdGlvbmFsIGNoYW5nZXMgdG8gdGhlCi0JICogaW5vZGUgY29yZSB0aGF0IGhhdmUgdG8gZ28gdG8gZGlzayBhbmQgdGhpcyByZXF1aXJlcyB1cyB0byBpc3N1ZQotCSAqIGEgc3luY2hyb25vdXMgdHJhbnNhY3Rpb24gdG8gY2FwdHVyZSB0aGVzZSBjaGFuZ2VzIGNvcnJlY3RseS4KLQkgKgotCSAqIFRoaXMgY29kZSByZWxpZXMgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBpZiB0aGUgdXBkYXRlXyogZmllbGRzCi0JICogb2YgdGhlIGlub2RlIGFyZSBjbGVhciBhbmQgdGhlIGlub2RlIGlzIHVucGlubmVkIHRoZW4gaXQgaXMgY2xlYW4KLQkgKiBhbmQgbm8gYWN0aW9uIGlzIHJlcXVpcmVkLgotCSAqLwotCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7Ci0KLQlpZiAoIWlwLT5pX3VwZGF0ZV9jb3JlKSB7Ci0JCS8qCi0JCSAqIFRpbWVzdGFtcHMvc2l6ZSBoYXZlbid0IGNoYW5nZWQgc2luY2UgbGFzdCBpbm9kZSBmbHVzaCBvcgotCQkgKiBpbm9kZSB0cmFuc2FjdGlvbiBjb21taXQuICBUaGF0IG1lYW5zIGVpdGhlciBub3RoaW5nIGdvdAotCQkgKiB3cml0dGVuIG9yIGEgdHJhbnNhY3Rpb24gY29tbWl0dGVkIHdoaWNoIGNhdWdodCB0aGUgdXBkYXRlcy4KLQkJICogSWYgdGhlIGxhdHRlciBoYXBwZW5lZCBhbmQgdGhlIHRyYW5zYWN0aW9uIGhhc24ndCBoaXQgdGhlCi0JCSAqIGRpc2sgeWV0LCB0aGUgaW5vZGUgd2lsbCBiZSBzdGlsbCBiZSBwaW5uZWQuICBJZiBpdCBpcywKLQkJICogZm9yY2UgdGhlIGxvZy4KLQkJICovCi0JCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKLQkJaWYgKHhmc19pcGluY291bnQoaXApKSB7Ci0JCQlpZiAoaXAtPmlfaXRlbXAtPmlsaV9sYXN0X2xzbikgewotCQkJCWVycm9yID0gX3hmc19sb2dfZm9yY2VfbHNuKGlwLT5pX21vdW50LAotCQkJCQkJaXAtPmlfaXRlbXAtPmlsaV9sYXN0X2xzbiwKLQkJCQkJCVhGU19MT0dfU1lOQywgJmxvZ19mbHVzaGVkKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZXJyb3IgPSBfeGZzX2xvZ19mb3JjZShpcC0+aV9tb3VudCwKLQkJCQkJCVhGU19MT0dfU1lOQywgJmxvZ19mbHVzaGVkKTsKLQkJCX0KLQkJfQotCX0gZWxzZQl7Ci0JCS8qCi0JCSAqIEtpY2sgb2ZmIGEgdHJhbnNhY3Rpb24gdG8gbG9nIHRoZSBpbm9kZSBjb3JlIHRvIGdldCB0aGUKLQkJICogdXBkYXRlcy4gIFRoZSBzeW5jIHRyYW5zYWN0aW9uIHdpbGwgYWxzbyBmb3JjZSB0aGUgbG9nLgotCQkgKi8KLQkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwotCQl0cCA9IHhmc190cmFuc19hbGxvYyhpcC0+aV9tb3VudCwgWEZTX1RSQU5TX0ZTWU5DX1RTKTsKLQkJZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZSh0cCwgMCwKLQkJCQlYRlNfRlNZTkNfVFNfTE9HX1JFUyhpcC0+aV9tb3VudCksIDAsIDAsIDApOwotCQlpZiAoZXJyb3IpIHsKLQkJCXhmc190cmFuc19jYW5jZWwodHAsIDApOwotCQkJcmV0dXJuIGVycm9yOwotCQl9Ci0JCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCi0JCS8qCi0JCSAqIE5vdGUgLSBpdCdzIHBvc3NpYmxlIHRoYXQgd2UgbWlnaHQgaGF2ZSBwdXNoZWQgb3Vyc2VsdmVzIG91dAotCQkgKiBvZiB0aGUgd2F5IGR1cmluZyB0cmFuc19yZXNlcnZlIHdoaWNoIHdvdWxkIGZsdXNoIHRoZSBpbm9kZS4KLQkJICogQnV0IHRoZXJlJ3Mgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIGlub2RlIGJ1ZmZlciBoYXMgYWN0dWFsbHkKLQkJICogZ29uZSBvdXQgeWV0IChpdCdzIGRlbHdyaSkuCVBsdXMgdGhlIGJ1ZmZlciBjb3VsZCBiZSBwaW5uZWQKLQkJICogYW55d2F5IGlmIGl0J3MgcGFydCBvZiBhbiBpbm9kZSBpbiBhbm90aGVyIHJlY2VudAotCQkgKiB0cmFuc2FjdGlvbi4JIFNvIHdlIHBsYXkgaXQgc2FmZSBhbmQgZmlyZSBvZmYgdGhlCi0JCSAqIHRyYW5zYWN0aW9uIGFueXdheS4KLQkJICovCi0JCXhmc190cmFuc19pam9pbih0cCwgaXAsIFhGU19JTE9DS19FWENMKTsKLQkJeGZzX3RyYW5zX2lob2xkKHRwLCBpcCk7Ci0JCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBYRlNfSUxPR19DT1JFKTsKLQkJeGZzX3RyYW5zX3NldF9zeW5jKHRwKTsKLQkJZXJyb3IgPSBfeGZzX3RyYW5zX2NvbW1pdCh0cCwgMCwgJmxvZ19mbHVzaGVkKTsKLQotCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCX0KLQotCWlmIChpcC0+aV9tb3VudC0+bV9mbGFncyAmIFhGU19NT1VOVF9CQVJSSUVSKSB7Ci0JCS8qCi0JCSAqIElmIHRoZSBsb2cgd3JpdGUgZGlkbid0IGlzc3VlIGFuIG9yZGVyZWQgdGFnIHdlIG5lZWQKLQkJICogdG8gZmx1c2ggdGhlIGRpc2sgY2FjaGUgZm9yIHRoZSBkYXRhIGRldmljZSBub3cuCi0JCSAqLwotCQlpZiAoIWxvZ19mbHVzaGVkKQotCQkJeGZzX2Jsa2Rldl9pc3N1ZV9mbHVzaChpcC0+aV9tb3VudC0+bV9kZGV2X3RhcmdwKTsKLQotCQkvKgotCQkgKiBJZiB0aGlzIGlub2RlIGlzIG9uIHRoZSBSVCBkZXYgd2UgbmVlZCB0byBmbHVzaCB0aGF0Ci0JCSAqIGNhY2hlIGFzIHdlbGwuCi0JCSAqLwotCQlpZiAoWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGlwKSkKLQkJCXhmc19ibGtkZXZfaXNzdWVfZmx1c2goaXAtPmlfbW91bnQtPm1fcnRkZXZfdGFyZ3ApOwotCX0KLQotCXJldHVybiBlcnJvcjsKLX0KLQotLyoKICAqIEZsYWdzIGZvciB4ZnNfZnJlZV9lb2ZibG9ja3MKICAqLwogI2RlZmluZSBYRlNfRlJFRV9FT0ZfVFJZTE9DSwkoMTw8MCkKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuaCBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuaAppbmRleCA3NzRmNDA3Li5kOGRmYThkIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmgKKysrIGIvZnMveGZzL3hmc192bm9kZW9wcy5oCkBAIC0yMSw3ICsyMSw2IEBACiAjZGVmaW5lIFhGU19BVFRSX05PQUNMCQkweDA4CS8qIERvbid0IGNhbGwgeGZzX2FjbF9jaG1vZCAqLwogCiBpbnQgeGZzX3JlYWRsaW5rKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBjaGFyICpsaW5rKTsKLWludCB4ZnNfZnN5bmMoc3RydWN0IHhmc19pbm9kZSAqaXApOwogaW50IHhmc19yZWxlYXNlKHN0cnVjdCB4ZnNfaW5vZGUgKmlwKTsKIGludCB4ZnNfaW5hY3RpdmUoc3RydWN0IHhmc19pbm9kZSAqaXApOwogaW50IHhmc19sb29rdXAoc3RydWN0IHhmc19pbm9kZSAqZHAsIHN0cnVjdCB4ZnNfbmFtZSAqbmFtZSwKQEAgLTUwLDE4ICs0OSw2IEBACiBpbnQgeGZzX2F0dHJfcmVtb3ZlKHN0cnVjdCB4ZnNfaW5vZGUgKmRwLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MpOwogaW50IHhmc19hdHRyX2xpc3Qoc3RydWN0IHhmc19pbm9kZSAqZHAsIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZnNpemUsCiAJCWludCBmbGFncywgc3RydWN0IGF0dHJsaXN0X2N1cnNvcl9rZXJuICpjdXJzb3IpOwotc3NpemVfdCB4ZnNfcmVhZChzdHJ1Y3QgeGZzX2lub2RlICppcCwgc3RydWN0IGtpb2NiICppb2NiLAotCQljb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdnAsIHVuc2lnbmVkIGludCBzZWdzLAotCQlsb2ZmX3QgKm9mZnNldCwgaW50IGlvZmxhZ3MpOwotc3NpemVfdCB4ZnNfc3BsaWNlX3JlYWQoc3RydWN0IHhmc19pbm9kZSAqaXAsIHN0cnVjdCBmaWxlICppbmZpbHAsCi0JCWxvZmZfdCAqcHBvcywgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IGNvdW50LAotCQlpbnQgZmxhZ3MsIGludCBpb2ZsYWdzKTsKLXNzaXplX3QgeGZzX3NwbGljZV93cml0ZShzdHJ1Y3QgeGZzX2lub2RlICppcCwKLQkJc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc3RydWN0IGZpbGUgKm91dGZpbHAsCi0JCWxvZmZfdCAqcHBvcywgc2l6ZV90IGNvdW50LCBpbnQgZmxhZ3MsIGludCBpb2ZsYWdzKTsKLXNzaXplX3QgeGZzX3dyaXRlKHN0cnVjdCB4ZnNfaW5vZGUgKnhpcCwgc3RydWN0IGtpb2NiICppb2NiLAotCQljb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdnAsIHVuc2lnbmVkIGludCBuc2VncywKLQkJbG9mZl90ICpvZmZzZXQsIGludCBpb2ZsYWdzKTsKIGludCB4ZnNfYm1hcChzdHJ1Y3QgeGZzX2lub2RlICppcCwgeGZzX29mZl90IG9mZnNldCwgc3NpemVfdCBjb3VudCwKIAkJaW50IGZsYWdzLCBzdHJ1Y3QgeGZzX2lvbWFwICppb21hcHAsIGludCAqbmlvbWFwcyk7CiB2b2lkIHhmc190b3NzcGFnZXMoc3RydWN0IHhmc19pbm9kZSAqaW5vZGUsIHhmc19vZmZfdCBmaXJzdCwKQEAgLTcyLDQgKzU5LDYgQEAKIAkJeGZzX29mZl90IGxhc3QsIHVpbnQ2NF90IGZsYWdzLCBpbnQgZmlvcHQpOwogaW50IHhmc193YWl0X29uX3BhZ2VzKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCB4ZnNfb2ZmX3QgZmlyc3QsIHhmc19vZmZfdCBsYXN0KTsKIAoraW50IHhmc196ZXJvX2VvZihzdHJ1Y3QgeGZzX2lub2RlICosIHhmc19vZmZfdCwgeGZzX2ZzaXplX3QpOworCiAjZW5kaWYgLyogX1hGU19WTk9ERU9QU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2dwaW8uaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCmluZGV4IDQ4NWVlYjYuLjk3OWM2YTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCkBAIC0xMzYsNiArMTM2LDMyIEBACiAKIGV4dGVybiBpbnQgX19ncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKTsKIAorI2RlZmluZSBHUElPRl9ESVJfT1VUCSgwIDw8IDApCisjZGVmaW5lIEdQSU9GX0RJUl9JTgkoMSA8PCAwKQorCisjZGVmaW5lIEdQSU9GX0lOSVRfTE9XCSgwIDw8IDEpCisjZGVmaW5lIEdQSU9GX0lOSVRfSElHSAkoMSA8PCAxKQorCisjZGVmaW5lIEdQSU9GX0lOCQkoR1BJT0ZfRElSX0lOKQorI2RlZmluZSBHUElPRl9PVVRfSU5JVF9MT1cJKEdQSU9GX0RJUl9PVVQgfCBHUElPRl9JTklUX0xPVykKKyNkZWZpbmUgR1BJT0ZfT1VUX0lOSVRfSElHSAkoR1BJT0ZfRElSX09VVCB8IEdQSU9GX0lOSVRfSElHSCkKKworLyoqCisgKiBzdHJ1Y3QgZ3BpbyAtIGEgc3RydWN0dXJlIGRlc2NyaWJpbmcgYSBHUElPIHdpdGggY29uZmlndXJhdGlvbgorICogQGdwaW86CXRoZSBHUElPIG51bWJlcgorICogQGZsYWdzOglHUElPIGNvbmZpZ3VyYXRpb24gYXMgc3BlY2lmaWVkIGJ5IEdQSU9GXyoKKyAqIEBsYWJlbDoJYSBsaXRlcmFsIGRlc2NyaXB0aW9uIHN0cmluZyBvZiB0aGlzIEdQSU8KKyAqLworc3RydWN0IGdwaW8geworCXVuc2lnbmVkCWdwaW87CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwljb25zdCBjaGFyCSpsYWJlbDsKK307CisKK2V4dGVybiBpbnQgZ3Bpb19yZXF1ZXN0X29uZSh1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpsYWJlbCk7CitleHRlcm4gaW50IGdwaW9fcmVxdWVzdF9hcnJheShzdHJ1Y3QgZ3BpbyAqYXJyYXksIHNpemVfdCBudW0pOworZXh0ZXJuIHZvaWQgZ3Bpb19mcmVlX2FycmF5KHN0cnVjdCBncGlvICphcnJheSwgc2l6ZV90IG51bSk7CisKICNpZmRlZiBDT05GSUdfR1BJT19TWVNGUwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW5mbXRzLmggYi9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaAppbmRleCA4OWM2MjQ5Li5jODA5ZTI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaApAQCAtNzQsNiArNzQsNyBAQAogCXN0cnVjdCBwdF9yZWdzICpyZWdzOwogCXN0cnVjdCBmaWxlICpmaWxlOwogCXVuc2lnbmVkIGxvbmcgbGltaXQ7CisJdW5zaWduZWQgbG9uZyBtbV9mbGFnczsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oIGIvaW5jbHVkZS9saW51eC9iaXRvcHMuaAppbmRleCAyNWI4YjJmLi5iNzkzODk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvbGludXgvYml0b3BzLmgKQEAgLTE2LDExICsxNiwxMyBAQAogICovCiAjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogCi0jZGVmaW5lIGZvcl9lYWNoX2JpdChiaXQsIGFkZHIsIHNpemUpIFwKKyNkZWZpbmUgZm9yX2VhY2hfc2V0X2JpdChiaXQsIGFkZHIsIHNpemUpIFwKIAlmb3IgKChiaXQpID0gZmluZF9maXJzdF9iaXQoKGFkZHIpLCAoc2l6ZSkpOyBcCiAJICAgICAoYml0KSA8IChzaXplKTsgXAogCSAgICAgKGJpdCkgPSBmaW5kX25leHRfYml0KChhZGRyKSwgKHNpemUpLCAoYml0KSArIDEpKQogCisvKiBUZW1wb3JhcnkgKi8KKyNkZWZpbmUgZm9yX2VhY2hfYml0KGJpdCwgYWRkciwgc2l6ZSkgZm9yX2VhY2hfc2V0X2JpdChiaXQsIGFkZHIsIHNpemUpCiAKIHN0YXRpYyBfX2lubGluZV9fIGludCBnZXRfYml0bWFza19vcmRlcih1bnNpZ25lZCBpbnQgY291bnQpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J0cmVlLTEyOC5oIGIvaW5jbHVkZS9saW51eC9idHJlZS0xMjguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjM0MTRjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9idHJlZS0xMjguaApAQCAtMCwwICsxLDEwOSBAQAorZXh0ZXJuIHN0cnVjdCBidHJlZV9nZW8gYnRyZWVfZ2VvMTI4OworCitzdHJ1Y3QgYnRyZWVfaGVhZDEyOCB7IHN0cnVjdCBidHJlZV9oZWFkIGg7IH07CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBidHJlZV9pbml0X21lbXBvb2wxMjgoc3RydWN0IGJ0cmVlX2hlYWQxMjggKmhlYWQsCisJCQkJCSBtZW1wb29sX3QgKm1lbXBvb2wpCit7CisJYnRyZWVfaW5pdF9tZW1wb29sKCZoZWFkLT5oLCBtZW1wb29sKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYnRyZWVfaW5pdDEyOChzdHJ1Y3QgYnRyZWVfaGVhZDEyOCAqaGVhZCkKK3sKKwlyZXR1cm4gYnRyZWVfaW5pdCgmaGVhZC0+aCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBidHJlZV9kZXN0cm95MTI4KHN0cnVjdCBidHJlZV9oZWFkMTI4ICpoZWFkKQoreworCWJ0cmVlX2Rlc3Ryb3koJmhlYWQtPmgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmJ0cmVlX2xvb2t1cDEyOChzdHJ1Y3QgYnRyZWVfaGVhZDEyOCAqaGVhZCwgdTY0IGsxLCB1NjQgazIpCit7CisJdTY0IGtleVsyXSA9IHtrMSwgazJ9OworCXJldHVybiBidHJlZV9sb29rdXAoJmhlYWQtPmgsICZidHJlZV9nZW8xMjgsICh1bnNpZ25lZCBsb25nICopJmtleSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqYnRyZWVfZ2V0X3ByZXYxMjgoc3RydWN0IGJ0cmVlX2hlYWQxMjggKmhlYWQsCisJCQkJICAgICAgdTY0ICprMSwgdTY0ICprMikKK3sKKwl1NjQga2V5WzJdID0geyprMSwgKmsyfTsKKwl2b2lkICp2YWw7CisKKwl2YWwgPSBidHJlZV9nZXRfcHJldigmaGVhZC0+aCwgJmJ0cmVlX2dlbzEyOCwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcgKikma2V5KTsKKwkqazEgPSBrZXlbMF07CisJKmsyID0ga2V5WzFdOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGJ0cmVlX2luc2VydDEyOChzdHJ1Y3QgYnRyZWVfaGVhZDEyOCAqaGVhZCwgdTY0IGsxLCB1NjQgazIsCisJCQkJICB2b2lkICp2YWwsIGdmcF90IGdmcCkKK3sKKwl1NjQga2V5WzJdID0ge2sxLCBrMn07CisJcmV0dXJuIGJ0cmVlX2luc2VydCgmaGVhZC0+aCwgJmJ0cmVlX2dlbzEyOCwKKwkJCSAgICAodW5zaWduZWQgbG9uZyAqKSZrZXksIHZhbCwgZ2ZwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYnRyZWVfdXBkYXRlMTI4KHN0cnVjdCBidHJlZV9oZWFkMTI4ICpoZWFkLCB1NjQgazEsIHU2NCBrMiwKKwkJCQkgIHZvaWQgKnZhbCkKK3sKKwl1NjQga2V5WzJdID0ge2sxLCBrMn07CisJcmV0dXJuIGJ0cmVlX3VwZGF0ZSgmaGVhZC0+aCwgJmJ0cmVlX2dlbzEyOCwKKwkJCSAgICAodW5zaWduZWQgbG9uZyAqKSZrZXksIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqYnRyZWVfcmVtb3ZlMTI4KHN0cnVjdCBidHJlZV9oZWFkMTI4ICpoZWFkLCB1NjQgazEsIHU2NCBrMikKK3sKKwl1NjQga2V5WzJdID0ge2sxLCBrMn07CisJcmV0dXJuIGJ0cmVlX3JlbW92ZSgmaGVhZC0+aCwgJmJ0cmVlX2dlbzEyOCwgKHVuc2lnbmVkIGxvbmcgKikma2V5KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpidHJlZV9sYXN0MTI4KHN0cnVjdCBidHJlZV9oZWFkMTI4ICpoZWFkLCB1NjQgKmsxLCB1NjQgKmsyKQoreworCXU2NCBrZXlbMl07CisJdm9pZCAqdmFsOworCisJdmFsID0gYnRyZWVfbGFzdCgmaGVhZC0+aCwgJmJ0cmVlX2dlbzEyOCwgKHVuc2lnbmVkIGxvbmcgKikma2V5WzBdKTsKKwlpZiAodmFsKSB7CisJCSprMSA9IGtleVswXTsKKwkJKmsyID0ga2V5WzFdOworCX0KKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGJ0cmVlX21lcmdlMTI4KHN0cnVjdCBidHJlZV9oZWFkMTI4ICp0YXJnZXQsCisJCQkJIHN0cnVjdCBidHJlZV9oZWFkMTI4ICp2aWN0aW0sCisJCQkJIGdmcF90IGdmcCkKK3sKKwlyZXR1cm4gYnRyZWVfbWVyZ2UoJnRhcmdldC0+aCwgJnZpY3RpbS0+aCwgJmJ0cmVlX2dlbzEyOCwgZ2ZwKTsKK30KKwordm9pZCB2aXNpdG9yMTI4KHZvaWQgKmVsZW0sIHVuc2lnbmVkIGxvbmcgb3BhcXVlLCB1bnNpZ25lZCBsb25nICpfX2tleSwKKwkJc2l6ZV90IGluZGV4LCB2b2lkICpfX2Z1bmMpOworCit0eXBlZGVmIHZvaWQgKCp2aXNpdG9yMTI4X3QpKHZvaWQgKmVsZW0sIHVuc2lnbmVkIGxvbmcgb3BhcXVlLAorCQkJICAgICB1NjQga2V5MSwgdTY0IGtleTIsIHNpemVfdCBpbmRleCk7CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IGJ0cmVlX3Zpc2l0b3IxMjgoc3RydWN0IGJ0cmVlX2hlYWQxMjggKmhlYWQsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBvcGFxdWUsCisJCQkJICAgICAgdmlzaXRvcjEyOF90IGZ1bmMyKQoreworCXJldHVybiBidHJlZV92aXNpdG9yKCZoZWFkLT5oLCAmYnRyZWVfZ2VvMTI4LCBvcGFxdWUsCisJCQkgICAgIHZpc2l0b3IxMjgsIGZ1bmMyKTsKK30KKworc3RhdGljIGlubGluZSBzaXplX3QgYnRyZWVfZ3JpbV92aXNpdG9yMTI4KHN0cnVjdCBidHJlZV9oZWFkMTI4ICpoZWFkLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIG9wYXF1ZSwKKwkJCQkJICAgdmlzaXRvcjEyOF90IGZ1bmMyKQoreworCXJldHVybiBidHJlZV9ncmltX3Zpc2l0b3IoJmhlYWQtPmgsICZidHJlZV9nZW8xMjgsIG9wYXF1ZSwKKwkJCQkgIHZpc2l0b3IxMjgsIGZ1bmMyKTsKK30KKworI2RlZmluZSBidHJlZV9mb3JfZWFjaF9zYWZlMTI4KGhlYWQsIGsxLCBrMiwgdmFsKQlcCisJZm9yICh2YWwgPSBidHJlZV9sYXN0MTI4KGhlYWQsICZrMSwgJmsyKTsJXAorCSAgICAgdmFsOwkJCQkJXAorCSAgICAgdmFsID0gYnRyZWVfZ2V0X3ByZXYxMjgoaGVhZCwgJmsxLCAmazIpKQorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J0cmVlLXR5cGUuaCBiL2luY2x1ZGUvbGludXgvYnRyZWUtdHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMTE0N2UKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2J0cmVlLXR5cGUuaApAQCAtMCwwICsxLDE0NyBAQAorI2RlZmluZSBfX0JUUkVFX1RQKHBmeCwgdHlwZSwgc2Z4KQlwZnggIyMgdHlwZSAjIyBzZngKKyNkZWZpbmUgX0JUUkVFX1RQKHBmeCwgdHlwZSwgc2Z4KQlfX0JUUkVFX1RQKHBmeCwgdHlwZSwgc2Z4KQorI2RlZmluZSBCVFJFRV9UUChwZngpCQkJX0JUUkVFX1RQKHBmeCwgQlRSRUVfVFlQRV9TVUZGSVgsKQorI2RlZmluZSBCVFJFRV9GTihuYW1lKQkJCUJUUkVFX1RQKGJ0cmVlXyAjIyBuYW1lKQorI2RlZmluZSBCVFJFRV9UWVBFX0hFQUQJCQlCVFJFRV9UUChzdHJ1Y3QgYnRyZWVfaGVhZCkKKyNkZWZpbmUgVklTSVRPUl9GTgkJCUJUUkVFX1RQKHZpc2l0b3IpCisjZGVmaW5lIFZJU0lUT1JfRk5fVAkJCV9CVFJFRV9UUCh2aXNpdG9yLCBCVFJFRV9UWVBFX1NVRkZJWCwgX3QpCisKK0JUUkVFX1RZUEVfSEVBRCB7CisJc3RydWN0IGJ0cmVlX2hlYWQgaDsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBCVFJFRV9GTihpbml0X21lbXBvb2wpKEJUUkVFX1RZUEVfSEVBRCAqaGVhZCwKKwkJCQkJICBtZW1wb29sX3QgKm1lbXBvb2wpCit7CisJYnRyZWVfaW5pdF9tZW1wb29sKCZoZWFkLT5oLCBtZW1wb29sKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgQlRSRUVfRk4oaW5pdCkoQlRSRUVfVFlQRV9IRUFEICpoZWFkKQoreworCXJldHVybiBidHJlZV9pbml0KCZoZWFkLT5oKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIEJUUkVFX0ZOKGRlc3Ryb3kpKEJUUkVFX1RZUEVfSEVBRCAqaGVhZCkKK3sKKwlidHJlZV9kZXN0cm95KCZoZWFkLT5oKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgQlRSRUVfRk4obWVyZ2UpKEJUUkVFX1RZUEVfSEVBRCAqdGFyZ2V0LAorCQkJCSAgQlRSRUVfVFlQRV9IRUFEICp2aWN0aW0sCisJCQkJICBnZnBfdCBnZnApCit7CisJcmV0dXJuIGJ0cmVlX21lcmdlKCZ0YXJnZXQtPmgsICZ2aWN0aW0tPmgsIEJUUkVFX1RZUEVfR0VPLCBnZnApOworfQorCisjaWYgKEJJVFNfUEVSX0xPTkcgPiBCVFJFRV9UWVBFX0JJVFMpCitzdGF0aWMgaW5saW5lIHZvaWQgKkJUUkVFX0ZOKGxvb2t1cCkoQlRSRUVfVFlQRV9IRUFEICpoZWFkLCBCVFJFRV9LRVlUWVBFIGtleSkKK3sKKwl1bnNpZ25lZCBsb25nIF9rZXkgPSBrZXk7CisJcmV0dXJuIGJ0cmVlX2xvb2t1cCgmaGVhZC0+aCwgQlRSRUVfVFlQRV9HRU8sICZfa2V5KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgQlRSRUVfRk4oaW5zZXJ0KShCVFJFRV9UWVBFX0hFQUQgKmhlYWQsIEJUUkVFX0tFWVRZUEUga2V5LAorCQkJCSAgIHZvaWQgKnZhbCwgZ2ZwX3QgZ2ZwKQoreworCXVuc2lnbmVkIGxvbmcgX2tleSA9IGtleTsKKwlyZXR1cm4gYnRyZWVfaW5zZXJ0KCZoZWFkLT5oLCBCVFJFRV9UWVBFX0dFTywgJl9rZXksIHZhbCwgZ2ZwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgQlRSRUVfRk4odXBkYXRlKShCVFJFRV9UWVBFX0hFQUQgKmhlYWQsIEJUUkVFX0tFWVRZUEUga2V5LAorCQl2b2lkICp2YWwpCit7CisJdW5zaWduZWQgbG9uZyBfa2V5ID0ga2V5OworCXJldHVybiBidHJlZV91cGRhdGUoJmhlYWQtPmgsIEJUUkVFX1RZUEVfR0VPLCAmX2tleSwgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpCVFJFRV9GTihyZW1vdmUpKEJUUkVFX1RZUEVfSEVBRCAqaGVhZCwgQlRSRUVfS0VZVFlQRSBrZXkpCit7CisJdW5zaWduZWQgbG9uZyBfa2V5ID0ga2V5OworCXJldHVybiBidHJlZV9yZW1vdmUoJmhlYWQtPmgsIEJUUkVFX1RZUEVfR0VPLCAmX2tleSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqQlRSRUVfRk4obGFzdCkoQlRSRUVfVFlQRV9IRUFEICpoZWFkLCBCVFJFRV9LRVlUWVBFICprZXkpCit7CisJdW5zaWduZWQgbG9uZyBfa2V5OworCXZvaWQgKnZhbCA9IGJ0cmVlX2xhc3QoJmhlYWQtPmgsIEJUUkVFX1RZUEVfR0VPLCAmX2tleSk7CisJaWYgKHZhbCkKKwkJKmtleSA9IF9rZXk7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpCVFJFRV9GTihnZXRfcHJldikoQlRSRUVfVFlQRV9IRUFEICpoZWFkLCBCVFJFRV9LRVlUWVBFICprZXkpCit7CisJdW5zaWduZWQgbG9uZyBfa2V5ID0gKmtleTsKKwl2b2lkICp2YWwgPSBidHJlZV9nZXRfcHJldigmaGVhZC0+aCwgQlRSRUVfVFlQRV9HRU8sICZfa2V5KTsKKwlpZiAodmFsKQorCQkqa2V5ID0gX2tleTsKKwlyZXR1cm4gdmFsOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCAqQlRSRUVfRk4obG9va3VwKShCVFJFRV9UWVBFX0hFQUQgKmhlYWQsIEJUUkVFX0tFWVRZUEUga2V5KQoreworCXJldHVybiBidHJlZV9sb29rdXAoJmhlYWQtPmgsIEJUUkVFX1RZUEVfR0VPLCAodW5zaWduZWQgbG9uZyAqKSZrZXkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBCVFJFRV9GTihpbnNlcnQpKEJUUkVFX1RZUEVfSEVBRCAqaGVhZCwgQlRSRUVfS0VZVFlQRSBrZXksCisJCQkgICB2b2lkICp2YWwsIGdmcF90IGdmcCkKK3sKKwlyZXR1cm4gYnRyZWVfaW5zZXJ0KCZoZWFkLT5oLCBCVFJFRV9UWVBFX0dFTywgKHVuc2lnbmVkIGxvbmcgKikma2V5LAorCQkJICAgIHZhbCwgZ2ZwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgQlRSRUVfRk4odXBkYXRlKShCVFJFRV9UWVBFX0hFQUQgKmhlYWQsIEJUUkVFX0tFWVRZUEUga2V5LAorCQl2b2lkICp2YWwpCit7CisJcmV0dXJuIGJ0cmVlX3VwZGF0ZSgmaGVhZC0+aCwgQlRSRUVfVFlQRV9HRU8sICh1bnNpZ25lZCBsb25nICopJmtleSwgdmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpCVFJFRV9GTihyZW1vdmUpKEJUUkVFX1RZUEVfSEVBRCAqaGVhZCwgQlRSRUVfS0VZVFlQRSBrZXkpCit7CisJcmV0dXJuIGJ0cmVlX3JlbW92ZSgmaGVhZC0+aCwgQlRSRUVfVFlQRV9HRU8sICh1bnNpZ25lZCBsb25nICopJmtleSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqQlRSRUVfRk4obGFzdCkoQlRSRUVfVFlQRV9IRUFEICpoZWFkLCBCVFJFRV9LRVlUWVBFICprZXkpCit7CisJcmV0dXJuIGJ0cmVlX2xhc3QoJmhlYWQtPmgsIEJUUkVFX1RZUEVfR0VPLCAodW5zaWduZWQgbG9uZyAqKWtleSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqQlRSRUVfRk4oZ2V0X3ByZXYpKEJUUkVFX1RZUEVfSEVBRCAqaGVhZCwgQlRSRUVfS0VZVFlQRSAqa2V5KQoreworCXJldHVybiBidHJlZV9nZXRfcHJldigmaGVhZC0+aCwgQlRSRUVfVFlQRV9HRU8sICh1bnNpZ25lZCBsb25nICopa2V5KTsKK30KKyNlbmRpZgorCit2b2lkIFZJU0lUT1JfRk4odm9pZCAqZWxlbSwgdW5zaWduZWQgbG9uZyBvcGFxdWUsIHVuc2lnbmVkIGxvbmcgKmtleSwKKwkJc2l6ZV90IGluZGV4LCB2b2lkICpfX2Z1bmMpOworCit0eXBlZGVmIHZvaWQgKCpWSVNJVE9SX0ZOX1QpKHZvaWQgKmVsZW0sIHVuc2lnbmVkIGxvbmcgb3BhcXVlLAorCQkJICAgICBCVFJFRV9LRVlUWVBFIGtleSwgc2l6ZV90IGluZGV4KTsKKworc3RhdGljIGlubGluZSBzaXplX3QgQlRSRUVfRk4odmlzaXRvcikoQlRSRUVfVFlQRV9IRUFEICpoZWFkLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9wYXF1ZSwKKwkJCQkgICAgICAgVklTSVRPUl9GTl9UIGZ1bmMyKQoreworCXJldHVybiBidHJlZV92aXNpdG9yKCZoZWFkLT5oLCBCVFJFRV9UWVBFX0dFTywgb3BhcXVlLAorCQkJICAgICB2aXNpdG9ybCwgZnVuYzIpOworfQorCitzdGF0aWMgaW5saW5lIHNpemVfdCBCVFJFRV9GTihncmltX3Zpc2l0b3IpKEJUUkVFX1RZUEVfSEVBRCAqaGVhZCwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgb3BhcXVlLAorCQkJCQkgICAgVklTSVRPUl9GTl9UIGZ1bmMyKQoreworCXJldHVybiBidHJlZV9ncmltX3Zpc2l0b3IoJmhlYWQtPmgsIEJUUkVFX1RZUEVfR0VPLCBvcGFxdWUsCisJCQkJICB2aXNpdG9ybCwgZnVuYzIpOworfQorCisjdW5kZWYgVklTSVRPUl9GTgorI3VuZGVmIFZJU0lUT1JfRk5fVAorI3VuZGVmIF9fQlRSRUVfVFAKKyN1bmRlZiBfQlRSRUVfVFAKKyN1bmRlZiBCVFJFRV9UUAorI3VuZGVmIEJUUkVFX0ZOCisjdW5kZWYgQlRSRUVfVFlQRV9IRUFECisjdW5kZWYgQlRSRUVfVFlQRV9TVUZGSVgKKyN1bmRlZiBCVFJFRV9UWVBFX0dFTworI3VuZGVmIEJUUkVFX0tFWVRZUEUKKyN1bmRlZiBCVFJFRV9UWVBFX0JJVFMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnRyZWUuaCBiL2luY2x1ZGUvbGludXgvYnRyZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWI1YmIwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9idHJlZS5oCkBAIC0wLDAgKzEsMjQzIEBACisjaWZuZGVmIEJUUkVFX0gKKyNkZWZpbmUgQlRSRUVfSAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgorCisvKioKKyAqIERPQzogQitUcmVlIGJhc2ljcworICoKKyAqIEEgQitUcmVlIGlzIGEgZGF0YSBzdHJ1Y3R1cmUgZm9yIGxvb2tpbmcgdXAgYXJiaXRyYXJ5IChjdXJyZW50bHkgYWxsb3dpbmcKKyAqIHVuc2lnbmVkIGxvbmcsIHUzMiwgdTY0IGFuZCAyICogdTY0KSBrZXlzIGludG8gcG9pbnRlcnMuIFRoZSBkYXRhIHN0cnVjdHVyZQorICogaXMgZGVzY3JpYmVkIGF0IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQi10cmVlLCB3ZSBjdXJyZW50bHkgZG8gbm90CisgKiB1c2UgYmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBrZXkgb24gbG9va3Vwcy4KKyAqCisgKiBFYWNoIEIrVHJlZSBjb25zaXN0cyBvZiBhIGhlYWQsIHRoYXQgY29udGFpbnMgYm9va2tlZXBpbmcgaW5mb3JtYXRpb24gYW5kCisgKiBhIHZhcmlhYmxlIG51bWJlciAoc3RhcnRpbmcgd2l0aCB6ZXJvKSBub2Rlcy4gRWFjaCBub2RlIGNvbnRhaW5zIHRoZSBrZXlzCisgKiBhbmQgcG9pbnRlcnMgdG8gc3ViLW5vZGVzLCBvciwgZm9yIGxlYWYgbm9kZXMsIHRoZSBrZXlzIGFuZCB2YWx1ZXMgZm9yIHRoZQorICogdHJlZSBlbnRyaWVzLgorICoKKyAqIEVhY2ggbm9kZSBpbiB0aGlzIGltcGxlbWVudGF0aW9uIGhhcyB0aGUgZm9sbG93aW5nIGxheW91dDoKKyAqIFtrZXkxLCBrZXkyLCAuLi4sIGtleU5dIFt2YWwxLCB2YWwyLCAuLi4sIHZhbE5dCisgKgorICogRWFjaCBrZXkgaGVyZSBpcyBhbiBhcnJheSBvZiB1bnNpZ25lZCBsb25ncywgZ2VvLT5ub19sb25ncyBpbiB0b3RhbC4gVGhlCisgKiBudW1iZXIgb2Yga2V5cyBhbmQgdmFsdWVzIChOKSBpcyBnZW8tPm5vX3BhaXJzLgorICovCisKKy8qKgorICogc3RydWN0IGJ0cmVlX2hlYWQgLSBidHJlZSBoZWFkCisgKgorICogQG5vZGU6IHRoZSBmaXJzdCBub2RlIGluIHRoZSB0cmVlCisgKiBAbWVtcG9vbDogbWVtcG9vbCB1c2VkIGZvciBub2RlIGFsbG9jYXRpb25zCisgKiBAaGVpZ2h0OiBjdXJyZW50IG9mIHRoZSB0cmVlCisgKi8KK3N0cnVjdCBidHJlZV9oZWFkIHsKKwl1bnNpZ25lZCBsb25nICpub2RlOworCW1lbXBvb2xfdCAqbWVtcG9vbDsKKwlpbnQgaGVpZ2h0OworfTsKKworLyogYnRyZWUgZ2VvbWV0cnkgKi8KK3N0cnVjdCBidHJlZV9nZW87CisKKy8qKgorICogYnRyZWVfYWxsb2MgLSBhbGxvY2F0ZSBmdW5jdGlvbiBmb3IgdGhlIG1lbXBvb2wKKyAqIEBnZnBfbWFzazogZ2ZwIG1hc2sgZm9yIHRoZSBhbGxvY2F0aW9uCisgKiBAcG9vbF9kYXRhOiB1bnVzZWQKKyAqLwordm9pZCAqYnRyZWVfYWxsb2MoZ2ZwX3QgZ2ZwX21hc2ssIHZvaWQgKnBvb2xfZGF0YSk7CisKKy8qKgorICogYnRyZWVfZnJlZSAtIGZyZWUgZnVuY3Rpb24gZm9yIHRoZSBtZW1wb29sCisgKiBAZWxlbWVudDogdGhlIGVsZW1lbnQgdG8gZnJlZQorICogQHBvb2xfZGF0YTogdW51c2VkCisgKi8KK3ZvaWQgYnRyZWVfZnJlZSh2b2lkICplbGVtZW50LCB2b2lkICpwb29sX2RhdGEpOworCisvKioKKyAqIGJ0cmVlX2luaXRfbWVtcG9vbCAtIGluaXRpYWxpc2UgYSBidHJlZSB3aXRoIGdpdmVuIG1lbXBvb2wKKyAqCisgKiBAaGVhZDogdGhlIGJ0cmVlIGhlYWQgdG8gaW5pdGlhbGlzZQorICogQG1lbXBvb2w6IHRoZSBtZW1wb29sIHRvIHVzZQorICoKKyAqIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyB1c2VkLCB0aGVyZSBpcyBubyBuZWVkIHRvIGRlc3Ryb3kKKyAqIHRoZSBtZW1wb29sLgorICovCit2b2lkIGJ0cmVlX2luaXRfbWVtcG9vbChzdHJ1Y3QgYnRyZWVfaGVhZCAqaGVhZCwgbWVtcG9vbF90ICptZW1wb29sKTsKKworLyoqCisgKiBidHJlZV9pbml0IC0gaW5pdGlhbGlzZSBhIGJ0cmVlCisgKgorICogQGhlYWQ6IHRoZSBidHJlZSBoZWFkIHRvIGluaXRpYWxpc2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyB0aGUgbWVtb3J5IHBvb2wgdGhhdCB0aGUKKyAqIGJ0cmVlIG5lZWRzLiBSZXR1cm5zIHplcm8gb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlCisgKiAoLSVFTk9NRU0pIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuCisgKgorICovCitpbnQgX19tdXN0X2NoZWNrIGJ0cmVlX2luaXQoc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQpOworCisvKioKKyAqIGJ0cmVlX2Rlc3Ryb3kgLSBkZXN0cm95IG1lbXBvb2wKKyAqCisgKiBAaGVhZDogdGhlIGJ0cmVlIGhlYWQgdG8gZGVzdHJveQorICoKKyAqIFRoaXMgZnVuY3Rpb24gZGVzdHJveXMgdGhlIGludGVybmFsIG1lbW9yeSBwb29sLCB1c2Ugb25seQorICogd2hlbiB1c2luZyBidHJlZV9pbml0KCksIG5vdCB3aXRoIGJ0cmVlX2luaXRfbWVtcG9vbCgpLgorICovCit2b2lkIGJ0cmVlX2Rlc3Ryb3koc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQpOworCisvKioKKyAqIGJ0cmVlX2xvb2t1cCAtIGxvb2sgdXAgYSBrZXkgaW4gdGhlIGJ0cmVlCisgKgorICogQGhlYWQ6IHRoZSBidHJlZSB0byBsb29rIGluCisgKiBAZ2VvOiB0aGUgYnRyZWUgZ2VvbWV0cnkKKyAqIEBrZXk6IHRoZSBrZXkgdG8gbG9vayB1cAorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdmFsdWUgZm9yIHRoZSBnaXZlbiBrZXksIG9yICVOVUxMLgorICovCit2b2lkICpidHJlZV9sb29rdXAoc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQsIHN0cnVjdCBidHJlZV9nZW8gKmdlbywKKwkJICAgdW5zaWduZWQgbG9uZyAqa2V5KTsKKworLyoqCisgKiBidHJlZV9pbnNlcnQgLSBpbnNlcnQgYW4gZW50cnkgaW50byB0aGUgYnRyZWUKKyAqCisgKiBAaGVhZDogdGhlIGJ0cmVlIHRvIGFkZCB0bworICogQGdlbzogdGhlIGJ0cmVlIGdlb21ldHJ5CisgKiBAa2V5OiB0aGUga2V5IHRvIGFkZCAobXVzdCBub3QgYWxyZWFkeSBiZSBwcmVzZW50KQorICogQHZhbDogdGhlIHZhbHVlIHRvIGFkZCAobXVzdCBub3QgYmUgJU5VTEwpCisgKiBAZ2ZwOiBhbGxvY2F0aW9uIGZsYWdzIGZvciBub2RlIGFsbG9jYXRpb25zCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgdGhlIGl0ZW0gY291bGQgYmUgYWRkZWQsIG9yIGFuCisgKiBlcnJvciBjb2RlIGlmIGl0IGZhaWxlZCAobWF5IGZhaWwgZHVlIHRvIG1lbW9yeSBwcmVzc3VyZSkuCisgKi8KK2ludCBfX211c3RfY2hlY2sgYnRyZWVfaW5zZXJ0KHN0cnVjdCBidHJlZV9oZWFkICpoZWFkLCBzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sCisJCQkgICAgICB1bnNpZ25lZCBsb25nICprZXksIHZvaWQgKnZhbCwgZ2ZwX3QgZ2ZwKTsKKy8qKgorICogYnRyZWVfdXBkYXRlIC0gdXBkYXRlIGFuIGVudHJ5IGluIHRoZSBidHJlZQorICoKKyAqIEBoZWFkOiB0aGUgYnRyZWUgdG8gdXBkYXRlCisgKiBAZ2VvOiB0aGUgYnRyZWUgZ2VvbWV0cnkKKyAqIEBrZXk6IHRoZSBrZXkgdG8gdXBkYXRlCisgKiBAdmFsOiB0aGUgdmFsdWUgdG8gY2hhbmdlIGl0IHRvIChtdXN0IG5vdCBiZSAlTlVMTCkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBpZiB0aGUgdXBkYXRlIHdhcyBzdWNjZXNzZnVsLCBvcgorICogLSVFTk9FTlQgaWYgdGhlIGtleSBjb3VsZCBub3QgYmUgZm91bmQuCisgKi8KK2ludCBidHJlZV91cGRhdGUoc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQsIHN0cnVjdCBidHJlZV9nZW8gKmdlbywKKwkJIHVuc2lnbmVkIGxvbmcgKmtleSwgdm9pZCAqdmFsKTsKKy8qKgorICogYnRyZWVfcmVtb3ZlIC0gcmVtb3ZlIGFuIGVudHJ5IGZyb20gdGhlIGJ0cmVlCisgKgorICogQGhlYWQ6IHRoZSBidHJlZSB0byB1cGRhdGUKKyAqIEBnZW86IHRoZSBidHJlZSBnZW9tZXRyeQorICogQGtleTogdGhlIGtleSB0byByZW1vdmUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlbW92ZWQgZW50cnksIG9yICVOVUxMIGlmIHRoZSBrZXkKKyAqIGNvdWxkIG5vdCBiZSBmb3VuZC4KKyAqLwordm9pZCAqYnRyZWVfcmVtb3ZlKHN0cnVjdCBidHJlZV9oZWFkICpoZWFkLCBzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sCisJCSAgIHVuc2lnbmVkIGxvbmcgKmtleSk7CisKKy8qKgorICogYnRyZWVfbWVyZ2UgLSBtZXJnZSB0d28gYnRyZWVzCisgKgorICogQHRhcmdldDogdGhlIHRyZWUgdGhhdCBnZXRzIGFsbCB0aGUgZW50cmllcworICogQHZpY3RpbTogdGhlIHRyZWUgdGhhdCBnZXRzIG1lcmdlZCBpbnRvIEB0YXJnZXQKKyAqIEBnZW86IHRoZSBidHJlZSBnZW9tZXRyeQorICogQGdmcDogYWxsb2NhdGlvbiBmbGFncworICoKKyAqIFRoZSB0d28gdHJlZXMgQHRhcmdldCBhbmQgQHZpY3RpbSBtYXkgbm90IGNvbnRhaW4gdGhlIHNhbWUga2V5cywKKyAqIHRoYXQgaXMgYSBidWcgYW5kIHRyaWdnZXJzIGEgQlVHKCkuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvCisgKiBpZiB0aGUgdHJlZXMgd2VyZSBtZXJnZWQgc3VjY2Vzc2Z1bGx5LCBhbmQgbWF5IHJldHVybiBhIGZhaWx1cmUKKyAqIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMsIGluIHdoaWNoIGNhc2UgYm90aCB0cmVlcyBtaWdodCBoYXZlCisgKiBiZWVuIHBhcnRpYWxseSBtZXJnZWQsIGkuZS4gc29tZSBlbnRyaWVzIGhhdmUgYmVlbiBtb3ZlZCBmcm9tCisgKiBAdmljdGltIHRvIEB0YXJnZXQuCisgKi8KK2ludCBidHJlZV9tZXJnZShzdHJ1Y3QgYnRyZWVfaGVhZCAqdGFyZ2V0LCBzdHJ1Y3QgYnRyZWVfaGVhZCAqdmljdGltLAorCQlzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sIGdmcF90IGdmcCk7CisKKy8qKgorICogYnRyZWVfbGFzdCAtIGdldCBsYXN0IGVudHJ5IGluIGJ0cmVlCisgKgorICogQGhlYWQ6IGJ0cmVlIGhlYWQKKyAqIEBnZW86IGJ0cmVlIGdlb21ldHJ5CisgKiBAa2V5OiBsYXN0IGtleQorICoKKyAqIFJldHVybnMgdGhlIGxhc3QgZW50cnkgaW4gdGhlIGJ0cmVlLCBhbmQgc2V0cyBAa2V5IHRvIHRoZSBrZXkKKyAqIG9mIHRoYXQgZW50cnk7IHJldHVybnMgTlVMTCBpZiB0aGUgdHJlZSBpcyBlbXB0eSwgaW4gdGhhdCBjYXNlCisgKiBrZXkgaXMgbm90IGNoYW5nZWQuCisgKi8KK3ZvaWQgKmJ0cmVlX2xhc3Qoc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQsIHN0cnVjdCBidHJlZV9nZW8gKmdlbywKKwkJIHVuc2lnbmVkIGxvbmcgKmtleSk7CisKKy8qKgorICogYnRyZWVfZ2V0X3ByZXYgLSBnZXQgcHJldmlvdXMgZW50cnkKKyAqCisgKiBAaGVhZDogYnRyZWUgaGVhZAorICogQGdlbzogYnRyZWUgZ2VvbWV0cnkKKyAqIEBrZXk6IHBvaW50ZXIgdG8ga2V5CisgKgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG5leHQgaXRlbSByaWdodCBiZWZvcmUgdGhlIHZhbHVlIHBvaW50ZWQgdG8gYnkKKyAqIEBrZXksIGFuZCB1cGRhdGVzIEBrZXkgd2l0aCBpdHMga2V5LCBvciByZXR1cm5zICVOVUxMIHdoZW4gdGhlcmUgaXMgbm8KKyAqIGVudHJ5IHdpdGggYSBrZXkgc21hbGxlciB0aGFuIHRoZSBnaXZlbiBrZXkuCisgKi8KK3ZvaWQgKmJ0cmVlX2dldF9wcmV2KHN0cnVjdCBidHJlZV9oZWFkICpoZWFkLCBzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sCisJCSAgICAgdW5zaWduZWQgbG9uZyAqa2V5KTsKKworCisvKiBpbnRlcm5hbCB1c2UsIHVzZSBidHJlZV92aXNpdG9ye2wsMzIsNjQsMTI4fSAqLworc2l6ZV90IGJ0cmVlX3Zpc2l0b3Ioc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQsIHN0cnVjdCBidHJlZV9nZW8gKmdlbywKKwkJICAgICB1bnNpZ25lZCBsb25nIG9wYXF1ZSwKKwkJICAgICB2b2lkICgqZnVuYykodm9pZCAqZWxlbSwgdW5zaWduZWQgbG9uZyBvcGFxdWUsCisJCQkJICB1bnNpZ25lZCBsb25nICprZXksIHNpemVfdCBpbmRleCwKKwkJCQkgIHZvaWQgKmZ1bmMyKSwKKwkJICAgICB2b2lkICpmdW5jMik7CisKKy8qIGludGVybmFsIHVzZSwgdXNlIGJ0cmVlX2dyaW1fdmlzaXRvcntsLDMyLDY0LDEyOH0gKi8KK3NpemVfdCBidHJlZV9ncmltX3Zpc2l0b3Ioc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQsIHN0cnVjdCBidHJlZV9nZW8gKmdlbywKKwkJCSAgdW5zaWduZWQgbG9uZyBvcGFxdWUsCisJCQkgIHZvaWQgKCpmdW5jKSh2b2lkICplbGVtLCB1bnNpZ25lZCBsb25nIG9wYXF1ZSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyAqa2V5LAorCQkJCSAgICAgICBzaXplX3QgaW5kZXgsIHZvaWQgKmZ1bmMyKSwKKwkJCSAgdm9pZCAqZnVuYzIpOworCisKKyNpbmNsdWRlIDxsaW51eC9idHJlZS0xMjguaD4KKworZXh0ZXJuIHN0cnVjdCBidHJlZV9nZW8gYnRyZWVfZ2VvMzI7CisjZGVmaW5lIEJUUkVFX1RZUEVfU1VGRklYIGwKKyNkZWZpbmUgQlRSRUVfVFlQRV9CSVRTIEJJVFNfUEVSX0xPTkcKKyNkZWZpbmUgQlRSRUVfVFlQRV9HRU8gJmJ0cmVlX2dlbzMyCisjZGVmaW5lIEJUUkVFX0tFWVRZUEUgdW5zaWduZWQgbG9uZworI2luY2x1ZGUgPGxpbnV4L2J0cmVlLXR5cGUuaD4KKworI2RlZmluZSBidHJlZV9mb3JfZWFjaF9zYWZlbChoZWFkLCBrZXksIHZhbCkJXAorCWZvciAodmFsID0gYnRyZWVfbGFzdGwoaGVhZCwgJmtleSk7CVwKKwkgICAgIHZhbDsJCQkJXAorCSAgICAgdmFsID0gYnRyZWVfZ2V0X3ByZXZsKGhlYWQsICZrZXkpKQorCisjZGVmaW5lIEJUUkVFX1RZUEVfU1VGRklYIDMyCisjZGVmaW5lIEJUUkVFX1RZUEVfQklUUyAzMgorI2RlZmluZSBCVFJFRV9UWVBFX0dFTyAmYnRyZWVfZ2VvMzIKKyNkZWZpbmUgQlRSRUVfS0VZVFlQRSB1MzIKKyNpbmNsdWRlIDxsaW51eC9idHJlZS10eXBlLmg+CisKKyNkZWZpbmUgYnRyZWVfZm9yX2VhY2hfc2FmZTMyKGhlYWQsIGtleSwgdmFsKQlcCisJZm9yICh2YWwgPSBidHJlZV9sYXN0MzIoaGVhZCwgJmtleSk7CVwKKwkgICAgIHZhbDsJCQkJXAorCSAgICAgdmFsID0gYnRyZWVfZ2V0X3ByZXYzMihoZWFkLCAma2V5KSkKKworZXh0ZXJuIHN0cnVjdCBidHJlZV9nZW8gYnRyZWVfZ2VvNjQ7CisjZGVmaW5lIEJUUkVFX1RZUEVfU1VGRklYIDY0CisjZGVmaW5lIEJUUkVFX1RZUEVfQklUUyA2NAorI2RlZmluZSBCVFJFRV9UWVBFX0dFTyAmYnRyZWVfZ2VvNjQKKyNkZWZpbmUgQlRSRUVfS0VZVFlQRSB1NjQKKyNpbmNsdWRlIDxsaW51eC9idHJlZS10eXBlLmg+CisKKyNkZWZpbmUgYnRyZWVfZm9yX2VhY2hfc2FmZTY0KGhlYWQsIGtleSwgdmFsKQlcCisJZm9yICh2YWwgPSBidHJlZV9sYXN0NjQoaGVhZCwgJmtleSk7CVwKKwkgICAgIHZhbDsJCQkJXAorCSAgICAgdmFsID0gYnRyZWVfZ2V0X3ByZXY2NChoZWFkLCAma2V5KSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvcmVkdW1wLmggYi9pbmNsdWRlL2xpbnV4L2NvcmVkdW1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNjOTFkNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY29yZWR1bXAuaApAQCAtMCwwICsxLDQxIEBACisjaWZuZGVmIF9MSU5VWF9DT1JFRFVNUF9ICisjZGVmaW5lIF9MSU5VWF9DT1JFRFVNUF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgb25seSB0aGluZ3MgeW91IHNob3VsZCBkbyBvbiBhIGNvcmUtZmlsZTogdXNlIG9ubHkgdGhlc2UKKyAqIGZ1bmN0aW9ucyB0byB3cml0ZSBvdXQgYWxsIHRoZSBuZWNlc3NhcnkgaW5mby4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZHVtcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgdm9pZCAqYWRkciwgaW50IG5yKQoreworCXJldHVybiBmaWxlLT5mX29wLT53cml0ZShmaWxlLCBhZGRyLCBuciwgJmZpbGUtPmZfcG9zKSA9PSBucjsKK30KKworc3RhdGljIGlubGluZSBpbnQgZHVtcF9zZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2ZmKQoreworCWlmIChmaWxlLT5mX29wLT5sbHNlZWsgJiYgZmlsZS0+Zl9vcC0+bGxzZWVrICE9IG5vX2xsc2VlaykgeworCQlpZiAoZmlsZS0+Zl9vcC0+bGxzZWVrKGZpbGUsIG9mZiwgU0VFS19DVVIpIDwgMCkKKwkJCXJldHVybiAwOworCX0gZWxzZSB7CisJCWNoYXIgKmJ1ZiA9IChjaGFyICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCisJCWlmICghYnVmKQorCQkJcmV0dXJuIDA7CisJCXdoaWxlIChvZmYgPiAwKSB7CisJCQl1bnNpZ25lZCBsb25nIG4gPSBvZmY7CisKKwkJCWlmIChuID4gUEFHRV9TSVpFKQorCQkJCW4gPSBQQUdFX1NJWkU7CisJCQlpZiAoIWR1bXBfd3JpdGUoZmlsZSwgYnVmLCBuKSkKKwkJCQlyZXR1cm4gMDsKKwkJCW9mZiAtPSBuOworCQl9CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWYpOworCX0KKwlyZXR1cm4gMTsKK30KKworI2VuZGlmIC8qIF9MSU5VWF9DT1JFRFVNUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdW1hc2suaCBiL2luY2x1ZGUvbGludXgvY3B1bWFzay5oCmluZGV4IGRiY2VlNzYuLmJhZTZmZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3B1bWFzay5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1bWFzay5oCkBAIC05MCwxMCArOTAsMTAgQEAKICNkZWZpbmUgY3B1X3ByZXNlbnQoY3B1KQljcHVtYXNrX3Rlc3RfY3B1KChjcHUpLCBjcHVfcHJlc2VudF9tYXNrKQogI2RlZmluZSBjcHVfYWN0aXZlKGNwdSkJCWNwdW1hc2tfdGVzdF9jcHUoKGNwdSksIGNwdV9hY3RpdmVfbWFzaykKICNlbHNlCi0jZGVmaW5lIG51bV9vbmxpbmVfY3B1cygpCTEKLSNkZWZpbmUgbnVtX3Bvc3NpYmxlX2NwdXMoKQkxCi0jZGVmaW5lIG51bV9wcmVzZW50X2NwdXMoKQkxCi0jZGVmaW5lIG51bV9hY3RpdmVfY3B1cygpCTEKKyNkZWZpbmUgbnVtX29ubGluZV9jcHVzKCkJMVUKKyNkZWZpbmUgbnVtX3Bvc3NpYmxlX2NwdXMoKQkxVQorI2RlZmluZSBudW1fcHJlc2VudF9jcHVzKCkJMVUKKyNkZWZpbmUgbnVtX2FjdGl2ZV9jcHVzKCkJMVUKICNkZWZpbmUgY3B1X29ubGluZShjcHUpCQkoKGNwdSkgPT0gMCkKICNkZWZpbmUgY3B1X3Bvc3NpYmxlKGNwdSkJKChjcHUpID09IDApCiAjZGVmaW5lIGNwdV9wcmVzZW50KGNwdSkJKChjcHUpID09IDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS1tYXBwZXIuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCmluZGV4IGQ0YzljMGIuLjEzODFjZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCkBAIC0xMTgsMTAgKzExOCw5IEBACiAvKgogICogQ29uc3RydWN0b3JzIHNob3VsZCBjYWxsIHRoZXNlIGZ1bmN0aW9ucyB0byBlbnN1cmUgZGVzdGluYXRpb24gZGV2aWNlcwogICogYXJlIG9wZW5lZC9jbG9zZWQgY29ycmVjdGx5LgotICogRklYTUU6IHRvbyBtYW55IGFyZ3VtZW50cy4KICAqLwotaW50IGRtX2dldF9kZXZpY2Uoc3RydWN0IGRtX3RhcmdldCAqdGksIGNvbnN0IGNoYXIgKnBhdGgsIHNlY3Rvcl90IHN0YXJ0LAotCQkgIHNlY3Rvcl90IGxlbiwgZm1vZGVfdCBtb2RlLCBzdHJ1Y3QgZG1fZGV2ICoqcmVzdWx0KTsKK2ludCBkbV9nZXRfZGV2aWNlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBjb25zdCBjaGFyICpwYXRoLCBmbW9kZV90IG1vZGUsCisJCQkJCQkgc3RydWN0IGRtX2RldiAqKnJlc3VsdCk7CiB2b2lkIGRtX3B1dF9kZXZpY2Uoc3RydWN0IGRtX3RhcmdldCAqdGksIHN0cnVjdCBkbV9kZXYgKmQpOwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbS1pby5oIGIvaW5jbHVkZS9saW51eC9kbS1pby5oCmluZGV4IGI2YmYxN2UuLjVjOTE4NmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG0taW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtLWlvLmgKQEAgLTM3LDE0ICszNywxNCBAQAogc3RydWN0IGRtX2lvX21lbW9yeSB7CiAJZW51bSBkbV9pb19tZW1fdHlwZSB0eXBlOwogCisJdW5zaWduZWQgb2Zmc2V0OworCiAJdW5pb24gewogCQlzdHJ1Y3QgcGFnZV9saXN0ICpwbDsKIAkJc3RydWN0IGJpb192ZWMgKmJ2ZWM7CiAJCXZvaWQgKnZtYTsKIAkJdm9pZCAqYWRkcjsKIAl9IHB0cjsKLQotCXVuc2lnbmVkIG9mZnNldDsKIH07CiAKIHN0cnVjdCBkbV9pb19ub3RpZnkgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbS1pb2N0bC5oIGIvaW5jbHVkZS9saW51eC9kbS1pb2N0bC5oCmluZGV4IGFhOTU1MDguLjJjNDQ1ZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG0taW9jdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtLWlvY3RsLmgKQEAgLTI2Niw5ICsyNjYsOSBAQAogI2RlZmluZSBETV9ERVZfU0VUX0dFT01FVFJZCV9JT1dSKERNX0lPQ1RMLCBETV9ERVZfU0VUX0dFT01FVFJZX0NNRCwgc3RydWN0IGRtX2lvY3RsKQogCiAjZGVmaW5lIERNX1ZFUlNJT05fTUFKT1IJNAotI2RlZmluZSBETV9WRVJTSU9OX01JTk9SCTE2CisjZGVmaW5lIERNX1ZFUlNJT05fTUlOT1IJMTcKICNkZWZpbmUgRE1fVkVSU0lPTl9QQVRDSExFVkVMCTAKLSNkZWZpbmUgRE1fVkVSU0lPTl9FWFRSQQkiLWlvY3RsICgyMDA5LTExLTA1KSIKKyNkZWZpbmUgRE1fVkVSU0lPTl9FWFRSQQkiLWlvY3RsICgyMDEwLTAzLTA1KSIKIAogLyogU3RhdHVzIGJpdHMgKi8KICNkZWZpbmUgRE1fUkVBRE9OTFlfRkxBRwkoMSA8PCAwKSAvKiBJbi9PdXQgKi8KQEAgLTMxNiw0ICszMTYsOSBAQAogICovCiAjZGVmaW5lIERNX1FVRVJZX0lOQUNUSVZFX1RBQkxFX0ZMQUcJKDEgPDwgMTIpIC8qIEluICovCiAKKy8qCisgKiBJZiBzZXQsIGEgdWV2ZW50IHdhcyBnZW5lcmF0ZWQgZm9yIHdoaWNoIHRoZSBjYWxsZXIgbWF5IG5lZWQgdG8gd2FpdC4KKyAqLworI2RlZmluZSBETV9VRVZFTlRfR0VORVJBVEVEX0ZMQUcJKDEgPDwgMTMpIC8qIE91dCAqLworCiAjZW5kaWYJCQkJLyogX0xJTlVYX0RNX0lPQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWxmLmggYi9pbmNsdWRlL2xpbnV4L2VsZi5oCmluZGV4IGFkOTkwYzUuLjU5Nzg1ODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWxmLmgKKysrIGIvaW5jbHVkZS9saW51eC9lbGYuaApAQCAtNTAsNiArNTAsMjggQEAKIAogI2RlZmluZSBQVF9HTlVfU1RBQ0sJKFBUX0xPT1MgKyAweDQ3NGU1NTEpCiAKKy8qCisgKiBFeHRlbmRlZCBOdW1iZXJpbmcKKyAqCisgKiBJZiB0aGUgcmVhbCBudW1iZXIgb2YgcHJvZ3JhbSBoZWFkZXIgdGFibGUgZW50cmllcyBpcyBsYXJnZXIgdGhhbgorICogb3IgZXF1YWwgdG8gUE5fWE5VTSgweGZmZmYpLCBpdCBpcyBzZXQgdG8gc2hfaW5mbyBmaWVsZCBvZiB0aGUKKyAqIHNlY3Rpb24gaGVhZGVyIGF0IGluZGV4IDAsIGFuZCBQTl9YTlVNIGlzIHNldCB0byBlX3BobnVtCisgKiBmaWVsZC4gT3RoZXJ3aXNlLCB0aGUgc2VjdGlvbiBoZWFkZXIgYXQgaW5kZXggMCBpcyB6ZXJvCisgKiBpbml0aWFsaXplZCwgaWYgaXQgZXhpc3RzLgorICoKKyAqIFNwZWNpZmljYXRpb25zIGFyZSBhdmFpbGFibGUgaW46CisgKgorICogLSBTdW4gbWljcm9zeXN0ZW1zOiBMaW5rZXIgYW5kIExpYnJhcmllcy4KKyAqICAgUGFydCBObzogODE3LTE5ODQtMTcsIFNlcHRlbWJlciAyMDA4LgorICogICBVUkw6IGh0dHA6Ly9kb2NzLnN1bi5jb20vYXBwL2RvY3MvZG9jLzgxNy0xOTg0CisgKgorICogLSBTeXN0ZW0gViBBQkkgQU1ENjQgQXJjaGl0ZWN0dXJlIFByb2Nlc3NvciBTdXBwbGVtZW50CisgKiAgIERyYWZ0IFZlcnNpb24gMC45OS4sCisgKiAgIE1heSAxMSwgMjAwOS4KKyAqICAgVVJMOiBodHRwOi8vd3d3Lng4Ni02NC5vcmcvCisgKi8KKyNkZWZpbmUgUE5fWE5VTSAweGZmZmYKKwogLyogVGhlc2UgY29uc3RhbnRzIGRlZmluZSB0aGUgZGlmZmVyZW50IGVsZiBmaWxlIHR5cGVzICovCiAjZGVmaW5lIEVUX05PTkUgICAwCiAjZGVmaW5lIEVUX1JFTCAgICAxCkBAIC0yODYsNyArMzA4LDcgQEAKICNkZWZpbmUgU0hOX0NPTU1PTgkweGZmZjIKICNkZWZpbmUgU0hOX0hJUkVTRVJWRQkweGZmZmYKICAKLXR5cGVkZWYgc3RydWN0IHsKK3R5cGVkZWYgc3RydWN0IGVsZjMyX3NoZHIgewogICBFbGYzMl9Xb3JkCXNoX25hbWU7CiAgIEVsZjMyX1dvcmQJc2hfdHlwZTsKICAgRWxmMzJfV29yZAlzaF9mbGFnczsKQEAgLTM5NCwxNiArNDE2LDIwIEBACiBleHRlcm4gRWxmMzJfRHluIF9EWU5BTUlDIFtdOwogI2RlZmluZSBlbGZoZHIJCWVsZjMyX2hkcgogI2RlZmluZSBlbGZfcGhkcgllbGYzMl9waGRyCisjZGVmaW5lIGVsZl9zaGRyCWVsZjMyX3NoZHIKICNkZWZpbmUgZWxmX25vdGUJZWxmMzJfbm90ZQogI2RlZmluZSBlbGZfYWRkcl90CUVsZjMyX09mZgorI2RlZmluZSBFbGZfSGFsZglFbGYzMl9IYWxmCiAKICNlbHNlCiAKIGV4dGVybiBFbGY2NF9EeW4gX0RZTkFNSUMgW107CiAjZGVmaW5lIGVsZmhkcgkJZWxmNjRfaGRyCiAjZGVmaW5lIGVsZl9waGRyCWVsZjY0X3BoZHIKKyNkZWZpbmUgZWxmX3NoZHIJZWxmNjRfc2hkcgogI2RlZmluZSBlbGZfbm90ZQllbGY2NF9ub3RlCiAjZGVmaW5lIGVsZl9hZGRyX3QJRWxmNjRfT2ZmCisjZGVmaW5lIEVsZl9IYWxmCUVsZjY0X0hhbGYKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWxmY29yZS5oIGIvaW5jbHVkZS9saW51eC9lbGZjb3JlLmgKaW5kZXggMDBkNmE2OC4uZTY4N2JjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lbGZjb3JlLmgKKysrIGIvaW5jbHVkZS9saW51eC9lbGZjb3JlLmgKQEAgLTgsNiArOCw4IEBACiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgogI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KIAogc3RydWN0IGVsZl9zaWdpbmZvCiB7CkBAIC0xNTAsNSArMTUyLDIwIEBACiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKKy8qCisgKiBUaGVzZSBmdW5jdGlvbnMgcGFyYW1ldGVyaXplIGVsZl9jb3JlX2R1bXAgaW4gZnMvYmluZm10X2VsZi5jIHRvIHdyaXRlIG91dAorICogZXh0cmEgc2VnbWVudHMgY29udGFpbmluZyB0aGUgZ2F0ZSBEU08gY29udGVudHMuICBEdW1waW5nIGl0cworICogY29udGVudHMgbWFrZXMgcG9zdC1tb3J0ZW0gZnVsbHkgaW50ZXJwcmV0YWJsZSBsYXRlciB3aXRob3V0IG1hdGNoaW5nIHVwCisgKiB0aGUgc2FtZSBrZXJuZWwgYW5kIGhhcmR3YXJlIGNvbmZpZyB0byBzZWUgd2hhdCBQQyB2YWx1ZXMgbWVhbnQuCisgKiBEdW1waW5nIGl0cyBleHRyYSBFTEYgcHJvZ3JhbSBoZWFkZXJzIGluY2x1ZGVzIGFsbCB0aGUgb3RoZXIgaW5mb3JtYXRpb24KKyAqIGEgZGVidWdnZXIgbmVlZHMgdG8gZWFzaWx5IGZpbmQgaG93IHRoZSBnYXRlIERTTyB3YXMgYmVpbmcgdXNlZC4KKyAqLworZXh0ZXJuIEVsZl9IYWxmIGVsZl9jb3JlX2V4dHJhX3BoZHJzKHZvaWQpOworZXh0ZXJuIGludAorZWxmX2NvcmVfd3JpdGVfZXh0cmFfcGhkcnMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIHNpemVfdCAqc2l6ZSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgbGltaXQpOworZXh0ZXJuIGludAorZWxmX2NvcmVfd3JpdGVfZXh0cmFfZGF0YShzdHJ1Y3QgZmlsZSAqZmlsZSwgc2l6ZV90ICpzaXplLCB1bnNpZ25lZCBsb25nIGxpbWl0KTsKK2V4dGVybiBzaXplX3QgZWxmX2NvcmVfZXh0cmFfZGF0YV9zaXplKHZvaWQpOwogCiAjZW5kaWYgLyogX0xJTlVYX0VMRkNPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9leHBvcnRmcy5oIGIvaW5jbHVkZS9saW51eC9leHBvcnRmcy5oCmluZGV4IGRjMTJmNDEuLmE5Y2Q1MDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXhwb3J0ZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V4cG9ydGZzLmgKQEAgLTk2LDYgKzk2LDcgQEAKICAqIEBmaF90b19wYXJlbnQ6ICAgZmluZCB0aGUgaW1wbGllZCBvYmplY3QncyBwYXJlbnQgYW5kIGdldCBhIGRlbnRyeSBmb3IgaXQKICAqIEBnZXRfbmFtZTogICAgICAgZmluZCB0aGUgbmFtZSBmb3IgYSBnaXZlbiBpbm9kZSBpbiBhIGdpdmVuIGRpcmVjdG9yeQogICogQGdldF9wYXJlbnQ6ICAgICBmaW5kIHRoZSBwYXJlbnQgb2YgYSBnaXZlbiBkaXJlY3RvcnkKKyAqIEBjb21taXRfbWV0YWRhdGE6IGNvbW1pdCBtZXRhZGF0YSBjaGFuZ2VzIHRvIHN0YWJsZSBzdG9yYWdlCiAgKgogICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL0V4cG9ydGluZyBmb3IgZGV0YWlscyBvbiBob3cgdG8gdXNlCiAgKiB0aGlzIGludGVyZmFjZSBjb3JyZWN0bHkuCkBAIC0xMzcsNiArMTM4LDkgQEAKICAqICAgIGlzIGFsc28gYSBkaXJlY3RvcnkuICBJbiB0aGUgZXZlbnQgdGhhdCBpdCBjYW5ub3QgYmUgZm91bmQsIG9yIHN0b3JhZ2UKICAqICAgIHNwYWNlIGNhbm5vdCBiZSBhbGxvY2F0ZWQsIGEgJUVSUl9QVFIgc2hvdWxkIGJlIHJldHVybmVkLgogICoKKyAqIGNvbW1pdF9tZXRhZGF0YToKKyAqICAgIEBjb21taXRfbWV0YWRhdGEgc2hvdWxkIGNvbW1pdCBtZXRhZGF0YSBjaGFuZ2VzIHRvIHN0YWJsZSBzdG9yYWdlLgorICoKICAqIExvY2tpbmcgcnVsZXM6CiAgKiAgICBnZXRfcGFyZW50IGlzIGNhbGxlZCB3aXRoIGNoaWxkLT5kX2lub2RlLT5pX211dGV4IGRvd24KICAqICAgIGdldF9uYW1lIGlzIG5vdCAod2hpY2ggaXMgcG9zc2libHkgaW5jb25zaXN0ZW50KQpAQCAtMTUyLDYgKzE1Niw3IEBACiAJaW50ICgqZ2V0X25hbWUpKHN0cnVjdCBkZW50cnkgKnBhcmVudCwgY2hhciAqbmFtZSwKIAkJCXN0cnVjdCBkZW50cnkgKmNoaWxkKTsKIAlzdHJ1Y3QgZGVudHJ5ICogKCpnZXRfcGFyZW50KShzdHJ1Y3QgZGVudHJ5ICpjaGlsZCk7CisJaW50ICgqY29tbWl0X21ldGFkYXRhKShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIH07CiAKIGV4dGVybiBpbnQgZXhwb3J0ZnNfZW5jb2RlX2ZoKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpZCAqZmlkLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maXJtd2FyZS1tYXAuaCBiL2luY2x1ZGUvbGludXgvZmlybXdhcmUtbWFwLmgKaW5kZXggODc1NDUxZi4uYzZkY2MxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9maXJtd2FyZS1tYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Zpcm13YXJlLW1hcC5oCkBAIC0yNCwxNyArMjQsMTcgQEAKICAqLwogI2lmZGVmIENPTkZJR19GSVJNV0FSRV9NRU1NQVAKIAotaW50IGZpcm13YXJlX21hcF9hZGQodTY0IHN0YXJ0LCB1NjQgZW5kLCBjb25zdCBjaGFyICp0eXBlKTsKIGludCBmaXJtd2FyZV9tYXBfYWRkX2Vhcmx5KHU2NCBzdGFydCwgdTY0IGVuZCwgY29uc3QgY2hhciAqdHlwZSk7CitpbnQgZmlybXdhcmVfbWFwX2FkZF9ob3RwbHVnKHU2NCBzdGFydCwgdTY0IGVuZCwgY29uc3QgY2hhciAqdHlwZSk7CiAKICNlbHNlIC8qIENPTkZJR19GSVJNV0FSRV9NRU1NQVAgKi8KIAotc3RhdGljIGlubGluZSBpbnQgZmlybXdhcmVfbWFwX2FkZCh1NjQgc3RhcnQsIHU2NCBlbmQsIGNvbnN0IGNoYXIgKnR5cGUpCitzdGF0aWMgaW5saW5lIGludCBmaXJtd2FyZV9tYXBfYWRkX2Vhcmx5KHU2NCBzdGFydCwgdTY0IGVuZCwgY29uc3QgY2hhciAqdHlwZSkKIHsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZmlybXdhcmVfbWFwX2FkZF9lYXJseSh1NjQgc3RhcnQsIHU2NCBlbmQsIGNvbnN0IGNoYXIgKnR5cGUpCitzdGF0aWMgaW5saW5lIGludCBmaXJtd2FyZV9tYXBfYWRkX2hvdHBsdWcodTY0IHN0YXJ0LCB1NjQgZW5kLCBjb25zdCBjaGFyICp0eXBlKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDQ1Njg5NjIuLjEwYjhkZWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTYwLDI0ICs2MCwyNCBAQAogICovCiAKIC8qIGZpbGUgaXMgb3BlbiBmb3IgcmVhZGluZyAqLwotI2RlZmluZSBGTU9ERV9SRUFECQkoKF9fZm9yY2UgZm1vZGVfdCkxKQorI2RlZmluZSBGTU9ERV9SRUFECQkoKF9fZm9yY2UgZm1vZGVfdCkweDEpCiAvKiBmaWxlIGlzIG9wZW4gZm9yIHdyaXRpbmcgKi8KLSNkZWZpbmUgRk1PREVfV1JJVEUJCSgoX19mb3JjZSBmbW9kZV90KTIpCisjZGVmaW5lIEZNT0RFX1dSSVRFCQkoKF9fZm9yY2UgZm1vZGVfdCkweDIpCiAvKiBmaWxlIGlzIHNlZWthYmxlICovCi0jZGVmaW5lIEZNT0RFX0xTRUVLCQkoKF9fZm9yY2UgZm1vZGVfdCk0KQorI2RlZmluZSBGTU9ERV9MU0VFSwkJKChfX2ZvcmNlIGZtb2RlX3QpMHg0KQogLyogZmlsZSBjYW4gYmUgYWNjZXNzZWQgdXNpbmcgcHJlYWQgKi8KLSNkZWZpbmUgRk1PREVfUFJFQUQJCSgoX19mb3JjZSBmbW9kZV90KTgpCisjZGVmaW5lIEZNT0RFX1BSRUFECQkoKF9fZm9yY2UgZm1vZGVfdCkweDgpCiAvKiBmaWxlIGNhbiBiZSBhY2Nlc3NlZCB1c2luZyBwd3JpdGUgKi8KLSNkZWZpbmUgRk1PREVfUFdSSVRFCQkoKF9fZm9yY2UgZm1vZGVfdCkxNikKKyNkZWZpbmUgRk1PREVfUFdSSVRFCQkoKF9fZm9yY2UgZm1vZGVfdCkweDEwKQogLyogRmlsZSBpcyBvcGVuZWQgZm9yIGV4ZWN1dGlvbiB3aXRoIHN5c19leGVjdmUgLyBzeXNfdXNlbGliICovCi0jZGVmaW5lIEZNT0RFX0VYRUMJCSgoX19mb3JjZSBmbW9kZV90KTMyKQorI2RlZmluZSBGTU9ERV9FWEVDCQkoKF9fZm9yY2UgZm1vZGVfdCkweDIwKQogLyogRmlsZSBpcyBvcGVuZWQgd2l0aCBPX05ERUxBWSAob25seSBzZXQgZm9yIGJsb2NrIGRldmljZXMpICovCi0jZGVmaW5lIEZNT0RFX05ERUxBWQkJKChfX2ZvcmNlIGZtb2RlX3QpNjQpCisjZGVmaW5lIEZNT0RFX05ERUxBWQkJKChfX2ZvcmNlIGZtb2RlX3QpMHg0MCkKIC8qIEZpbGUgaXMgb3BlbmVkIHdpdGggT19FWENMIChvbmx5IHNldCBmb3IgYmxvY2sgZGV2aWNlcykgKi8KLSNkZWZpbmUgRk1PREVfRVhDTAkJKChfX2ZvcmNlIGZtb2RlX3QpMTI4KQorI2RlZmluZSBGTU9ERV9FWENMCQkoKF9fZm9yY2UgZm1vZGVfdCkweDgwKQogLyogRmlsZSBpcyBvcGVuZWQgdXNpbmcgb3BlbiguLiwgMywgLi4pIGFuZCBpcyB3cml0ZWFibGUgb25seSBmb3IgaW9jdGxzCiAgICAoc3BlY2lhbHkgaGFjayBmb3IgZmxvcHB5LmMpICovCi0jZGVmaW5lIEZNT0RFX1dSSVRFX0lPQ1RMCSgoX19mb3JjZSBmbW9kZV90KTI1NikKKyNkZWZpbmUgRk1PREVfV1JJVEVfSU9DVEwJKChfX2ZvcmNlIGZtb2RlX3QpMHgxMDApCiAKIC8qCiAgKiBEb24ndCB1cGRhdGUgY3RpbWUgYW5kIG10aW1lLgpAQCAtODUsNyArODUsMTAgQEAKICAqIEN1cnJlbnRseSBhIHNwZWNpYWwgaGFjayBmb3IgdGhlIFhGUyBvcGVuX2J5X2hhbmRsZSBpb2N0bCwgYnV0IHdlJ2xsCiAgKiBob3BlZnVsbHkgZ3JhZHVhdGUgaXQgdG8gYSBwcm9wZXIgT19DTVRJTUUgZmxhZyBzdXBwb3J0ZWQgYnkgb3BlbigyKSBzb29uLgogICovCi0jZGVmaW5lIEZNT0RFX05PQ01USU1FCQkoKF9fZm9yY2UgZm1vZGVfdCkyMDQ4KQorI2RlZmluZSBGTU9ERV9OT0NNVElNRQkJKChfX2ZvcmNlIGZtb2RlX3QpMHg4MDApCisKKy8qIEV4cGVjdCByYW5kb20gYWNjZXNzIHBhdHRlcm4gKi8KKyNkZWZpbmUgRk1PREVfUkFORE9NCQkoKF9fZm9yY2UgZm1vZGVfdCkweDEwMDApCiAKIC8qCiAgKiBUaGUgYmVsb3cgYXJlIHRoZSB2YXJpb3VzIHJlYWQgYW5kIHdyaXRlIHR5cGVzIHRoYXQgd2Ugc3VwcG9ydC4gU29tZSBvZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnAuaCBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKaW5kZXggNTU3YmRhZC4uNGM2ZDQxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZnAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dmcC5oCkBAIC0zMCw3ICszMCw4IEBACiAgKiBfbWlnaHRfIGZhaWwuICBUaGlzIGRlcGVuZHMgdXBvbiB0aGUgcGFydGljdWxhciBWTSBpbXBsZW1lbnRhdGlvbi4KICAqCiAgKiBfX0dGUF9OT0ZBSUw6IFRoZSBWTSBpbXBsZW1lbnRhdGlvbiBfbXVzdF8gcmV0cnkgaW5maW5pdGVseTogdGhlIGNhbGxlcgotICogY2Fubm90IGhhbmRsZSBhbGxvY2F0aW9uIGZhaWx1cmVzLgorICogY2Fubm90IGhhbmRsZSBhbGxvY2F0aW9uIGZhaWx1cmVzLiAgVGhpcyBtb2RpZmllciBpcyBkZXByZWNhdGVkIGFuZCBubyBuZXcKKyAqIHVzZXJzIHNob3VsZCBiZSBhZGRlZC4KICAqCiAgKiBfX0dGUF9OT1JFVFJZOiBUaGUgVk0gaW1wbGVtZW50YXRpb24gbXVzdCBub3QgcmV0cnkgaW5kZWZpbml0ZWx5LgogICoKQEAgLTgzLDYgKzg0LDcgQEAKICNkZWZpbmUgR0ZQX0hJR0hVU0VSX01PVkFCTEUJKF9fR0ZQX1dBSVQgfCBfX0dGUF9JTyB8IF9fR0ZQX0ZTIHwgXAogCQkJCSBfX0dGUF9IQVJEV0FMTCB8IF9fR0ZQX0hJR0hNRU0gfCBcCiAJCQkJIF9fR0ZQX01PVkFCTEUpCisjZGVmaW5lIEdGUF9JT0ZTCShfX0dGUF9JTyB8IF9fR0ZQX0ZTKQogCiAjaWZkZWYgQ09ORklHX05VTUEKICNkZWZpbmUgR0ZQX1RISVNOT0RFCShfX0dGUF9USElTTk9ERSB8IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX05PUkVUUlkpCkBAIC0zMjUsNyArMzI3LDcgQEAKIAogZXh0ZXJuIHZvaWQgX19mcmVlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpOwogZXh0ZXJuIHZvaWQgZnJlZV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBvcmRlcik7Ci1leHRlcm4gdm9pZCBmcmVlX2hvdF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiB2b2lkIGZyZWVfaG90X2NvbGRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IGNvbGQpOwogCiAjZGVmaW5lIF9fZnJlZV9wYWdlKHBhZ2UpIF9fZnJlZV9wYWdlcygocGFnZSksIDApCiAjZGVmaW5lIGZyZWVfcGFnZShhZGRyKSBmcmVlX3BhZ2VzKChhZGRyKSwwKQpAQCAtMzM3LDkgKzMzOSw3IEBACiAKIGV4dGVybiBnZnBfdCBnZnBfYWxsb3dlZF9tYXNrOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2dmcF9hbGxvd2VkX21hc2soZ2ZwX3QgbWFzaykKLXsKLQlnZnBfYWxsb3dlZF9tYXNrID0gbWFzazsKLX0KK2V4dGVybiB2b2lkIHNldF9nZnBfYWxsb3dlZF9tYXNrKGdmcF90IG1hc2spOworZXh0ZXJuIGdmcF90IGNsZWFyX2dmcF9hbGxvd2VkX21hc2soZ2ZwX3QgbWFzayk7CiAKICNlbmRpZiAvKiBfX0xJTlVYX0dGUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h0Y3BsZC5oIGIvaW5jbHVkZS9saW51eC9odGNwbGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjNmNmNiNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaHRjcGxkLmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBfX0xJTlVYX0hUQ1BMRF9ICisjZGVmaW5lIF9fTElOVVhfSFRDUExEX0gKKworc3RydWN0IGh0Y3BsZF9jaGlwX3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIGludCBhZGRyOworCXVuc2lnbmVkIGludCByZXNldDsKKwl1bnNpZ25lZCBpbnQgbnVtX2dwaW9zOworCXVuc2lnbmVkIGludCBncGlvX291dF9iYXNlOworCXVuc2lnbmVkIGludCBncGlvX2luX2Jhc2U7CisJdW5zaWduZWQgaW50IGlycV9iYXNlOworCXVuc2lnbmVkIGludCBudW1faXJxczsKK307CisKK3N0cnVjdCBodGNwbGRfY29yZV9wbGF0Zm9ybV9kYXRhIHsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgICAgaW50X3Jlc2V0X2dwaW9faGk7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICAgIGludF9yZXNldF9ncGlvX2xvOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgICBpMmNfYWRhcHRlcl9pZDsKKworCXN0cnVjdCBodGNwbGRfY2hpcF9wbGF0Zm9ybV9kYXRhICAqY2hpcDsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgICAgbnVtX2NoaXA7Cit9OworCisjZW5kaWYgLyogX19MSU5VWF9IVENQTERfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy9wY2E5NTN4LmggYi9pbmNsdWRlL2xpbnV4L2kyYy9wY2E5NTN4LmgKaW5kZXggODE3MzZkNi4uZDVjNWE2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMvcGNhOTUzeC5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjL3BjYTk1M3guaApAQCAtMSwzICsxLDkgQEAKKyNpZm5kZWYgX0xJTlVYX1BDQTk1M1hfSAorI2RlZmluZSBfTElOVVhfUENBOTUzWF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCiAvKiBwbGF0Zm9ybSBkYXRhIGZvciB0aGUgUENBOTUzOSAxNi1iaXQgSS9PIGV4cGFuZGVyIGRyaXZlciAqLwogCiBzdHJ1Y3QgcGNhOTUzeF9wbGF0Zm9ybV9kYXRhIHsKQEAgLTcsNiArMTMsOSBAQAogCS8qIGluaXRpYWwgcG9sYXJpdHkgaW52ZXJzaW9uIHNldHRpbmcgKi8KIAl1aW50MTZfdAlpbnZlcnQ7CiAKKwkvKiBpbnRlcnJ1cHQgYmFzZSAqLworCWludAkJaXJxX2Jhc2U7CisKIAl2b2lkCQkqY29udGV4dDsJLyogcGFyYW0gdG8gc2V0dXAvdGVhcmRvd24gKi8KIAogCWludAkJKCpzZXR1cCkoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKQEAgLTE3LDMgKzI2LDUgQEAKIAkJCQl2b2lkICpjb250ZXh0KTsKIAljaGFyCQkqKm5hbWVzOwogfTsKKworI2VuZGlmIC8qIF9MSU5VWF9QQ0E5NTNYX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjL3R3bC5oIGIvaW5jbHVkZS9saW51eC9pMmMvdHdsLmgKaW5kZXggNzg5N2YzMC4uZmI2Nzg0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMvdHdsLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMvdHdsLmgKQEAgLTgwLDYgKzgwLDExIEBACiAjZGVmaW5lIFRXTF9NT0RVTEVfUE1fTUFTVEVSCVRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUgogI2RlZmluZSBUV0xfTU9EVUxFX1BNX1JFQ0VJVkVSCVRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSCiAjZGVmaW5lIFRXTF9NT0RVTEVfUlRDCQlUV0w0MDMwX01PRFVMRV9SVEMKKyNkZWZpbmUgVFdMX01PRFVMRV9QV00JCVRXTDQwMzBfTU9EVUxFX1BXTTAKKworI2RlZmluZSBUV0w2MDMwX01PRFVMRV9JRDAJMHgwRAorI2RlZmluZSBUV0w2MDMwX01PRFVMRV9JRDEJMHgwRQorI2RlZmluZSBUV0w2MDMwX01PRFVMRV9JRDIJMHgwRgogCiAjZGVmaW5lIEdQSU9fSU5UUl9PRkZTRVQJMAogI2RlZmluZSBLRVlQQURfSU5UUl9PRkZTRVQJMQpAQCAtMjM5LDYgKzI0NCwyMSBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisvKkludGVyZmFjZSBCaXQgUmVnaXN0ZXIgKElOVEJSKSBvZmZzZXRzCisgKihVc2UgVFdMXzQwMzBfTU9EVUxFX0lOVEJSKQorICovCisKKyNkZWZpbmUgUkVHX0dQUFVQRENUUjEJCQkweDBGCisKKy8qSTJDMSBhbmQgSTJDNChTUikgU0RBL1NDTCBwdWxsLXVwIGNvbnRyb2wgYml0cyAqLworCisjZGVmaW5lIEkyQ19TQ0xfQ1RSTF9QVQkJCUJJVCgwKQorI2RlZmluZSBJMkNfU0RBX0NUUkxfUFUJCQlCSVQoMikKKyNkZWZpbmUgU1JfSTJDX1NDTF9DVFJMX1BVCQlCSVQoNCkKKyNkZWZpbmUgU1JfSTJDX1NEQV9DVFJMX1BVCQlCSVQoNikKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogLyoKICAqIEtleXBhZCByZWdpc3RlciBvZmZzZXRzICh1c2UgVFdMNDAzMF9NT0RVTEVfS0VZUEFEKQogICogLi4uIFNJSC9pbnRlcnJ1cHQgb25seQpAQCAtNTMwLDYgKzU1MCw3IEBACiB9OwogCiBleHRlcm4gdm9pZCB0d2w0MDMwX3Bvd2VyX2luaXQoc3RydWN0IHR3bDQwMzBfcG93ZXJfZGF0YSAqdHJpdG9uMl9zY3JpcHRzKTsKK2V4dGVybiBpbnQgdHdsNDAzMF9yZW1vdmVfc2NyaXB0KHU4IGZsYWdzKTsKIAogc3RydWN0IHR3bDQwMzBfY29kZWNfYXVkaW9fZGF0YSB7CiAJdW5zaWduZWQgaW50CWF1ZGlvX21jbGs7CkBAIC02MDUsMTIgKzYyNiw3IEBACiAjZGVmaW5lIFRXTDQwMzBfVkFVWDNfREVWX0dSUAkJMHgxRgogI2RlZmluZSBUV0w0MDMwX1ZBVVgzX0RFRElDQVRFRAkJMHgyMgogCi0jaWYgZGVmaW5lZChDT05GSUdfVFdMNDAzMF9CQ0lfQkFUVEVSWSkgfHwgXAotCWRlZmluZWQoQ09ORklHX1RXTDQwMzBfQkNJX0JBVFRFUllfTU9EVUxFKQotCWV4dGVybiBpbnQgdHdsNDAzMGNoYXJnZXJfdXNiX2VuKGludCBlbmFibGUpOwotI2Vsc2UKLQlzdGF0aWMgaW5saW5lIGludCB0d2w0MDMwY2hhcmdlcl91c2JfZW4oaW50IGVuYWJsZSkgeyByZXR1cm4gMDsgfQotI2VuZGlmCitzdGF0aWMgaW5saW5lIGludCB0d2w0MDMwY2hhcmdlcl91c2JfZW4oaW50IGVuYWJsZSkgeyByZXR1cm4gMDsgfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpc3QuaCBiL2luY2x1ZGUvbGludXgvbGlzdC5oCmluZGV4IDVkOWM2NTUuLjgzOTI4ODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGlzdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbGlzdC5oCkBAIC00OTgsNyArNDk4LDcgQEAKIAkgICAgIHBvcyA9IG4sIG4gPSBsaXN0X2VudHJ5KG4tPm1lbWJlci5uZXh0LCB0eXBlb2YoKm4pLCBtZW1iZXIpKQogCiAvKioKLSAqIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9jb250aW51ZQorICogbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX2NvbnRpbnVlIC0gY29udGludWUgbGlzdCBpdGVyYXRpb24gc2FmZSBhZ2FpbnN0IHJlbW92YWwKICAqIEBwb3M6CXRoZSB0eXBlICogdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCiAgKiBAbjoJCWFub3RoZXIgdHlwZSAqIHRvIHVzZSBhcyB0ZW1wb3Jhcnkgc3RvcmFnZQogICogQGhlYWQ6CXRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCkBAIC01MTQsNyArNTE0LDcgQEAKIAkgICAgIHBvcyA9IG4sIG4gPSBsaXN0X2VudHJ5KG4tPm1lbWJlci5uZXh0LCB0eXBlb2YoKm4pLCBtZW1iZXIpKQogCiAvKioKLSAqIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9mcm9tCisgKiBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfZnJvbSAtIGl0ZXJhdGUgb3ZlciBsaXN0IGZyb20gY3VycmVudCBwb2ludCBzYWZlIGFnYWluc3QgcmVtb3ZhbAogICogQHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KICAqIEBuOgkJYW5vdGhlciB0eXBlICogdG8gdXNlIGFzIHRlbXBvcmFyeSBzdG9yYWdlCiAgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KQEAgLTUyOSw3ICs1MjksNyBAQAogCSAgICAgcG9zID0gbiwgbiA9IGxpc3RfZW50cnkobi0+bWVtYmVyLm5leHQsIHR5cGVvZigqbiksIG1lbWJlcikpCiAKIC8qKgotICogbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UKKyAqIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlIC0gaXRlcmF0ZSBiYWNrd2FyZHMgb3ZlciBsaXN0IHNhZmUgYWdhaW5zdCByZW1vdmFsCiAgKiBAcG9zOgl0aGUgdHlwZSAqIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgogICogQG46CQlhbm90aGVyIHR5cGUgKiB0byB1c2UgYXMgdGVtcG9yYXJ5IHN0b3JhZ2UKICAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvODhwbTg2MDcuaCBiL2luY2x1ZGUvbGludXgvbWZkLzg4cG04NjA3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MWI0MjguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvODhwbTg2MDcuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxNyArMCwwIEBACi0vKgotICogTWFydmVsbCA4OFBNODYwNyBJbnRlcmZhY2UKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KLSAqIAlIYW9qaWFuIFpodWFuZyA8aGFvamlhbi56aHVhbmdAbWFydmVsbC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIF9fTElOVVhfTUZEXzg4UE04NjA3X0gKLSNkZWZpbmUgX19MSU5VWF9NRkRfODhQTTg2MDdfSAotCi1lbnVtIHsKLQlQTTg2MDdfSURfQlVDSzEgPSAwLAotCVBNODYwN19JRF9CVUNLMiwKLQlQTTg2MDdfSURfQlVDSzMsCi0KLQlQTTg2MDdfSURfTERPMSwKLQlQTTg2MDdfSURfTERPMiwKLQlQTTg2MDdfSURfTERPMywKLQlQTTg2MDdfSURfTERPNCwKLQlQTTg2MDdfSURfTERPNSwKLQlQTTg2MDdfSURfTERPNiwKLQlQTTg2MDdfSURfTERPNywKLQlQTTg2MDdfSURfTERPOCwKLQlQTTg2MDdfSURfTERPOSwKLQlQTTg2MDdfSURfTERPMTAsCi0JUE04NjA3X0lEX0xETzEyLAotCVBNODYwN19JRF9MRE8xNCwKLQotCVBNODYwN19JRF9SR19NQVgsCi19OwotCi0jZGVmaW5lIENISVBfSUQJCQkJKDB4NDApCi0jZGVmaW5lIENISVBfSURfTUFTSwkJCSgweEY4KQotCi0vKiBJbnRlcnJ1cHQgUmVnaXN0ZXJzICovCi0jZGVmaW5lIFBNODYwN19TVEFUVVNfMQkJCSgweDAxKQotI2RlZmluZSBQTTg2MDdfU1RBVFVTXzIJCQkoMHgwMikKLSNkZWZpbmUgUE04NjA3X0lOVF9TVEFUVVMxCQkoMHgwMykKLSNkZWZpbmUgUE04NjA3X0lOVF9TVEFUVVMyCQkoMHgwNCkKLSNkZWZpbmUgUE04NjA3X0lOVF9TVEFUVVMzCQkoMHgwNSkKLSNkZWZpbmUgUE04NjA3X0lOVF9NQVNLXzEJCSgweDA2KQotI2RlZmluZSBQTTg2MDdfSU5UX01BU0tfMgkJKDB4MDcpCi0jZGVmaW5lIFBNODYwN19JTlRfTUFTS18zCQkoMHgwOCkKLQotLyogUmVndWxhdG9yIENvbnRyb2wgUmVnaXN0ZXJzICovCi0jZGVmaW5lIFBNODYwN19MRE8xCQkJKDB4MTApCi0jZGVmaW5lIFBNODYwN19MRE8yCQkJKDB4MTEpCi0jZGVmaW5lIFBNODYwN19MRE8zCQkJKDB4MTIpCi0jZGVmaW5lIFBNODYwN19MRE80CQkJKDB4MTMpCi0jZGVmaW5lIFBNODYwN19MRE81CQkJKDB4MTQpCi0jZGVmaW5lIFBNODYwN19MRE82CQkJKDB4MTUpCi0jZGVmaW5lIFBNODYwN19MRE83CQkJKDB4MTYpCi0jZGVmaW5lIFBNODYwN19MRE84CQkJKDB4MTcpCi0jZGVmaW5lIFBNODYwN19MRE85CQkJKDB4MTgpCi0jZGVmaW5lIFBNODYwN19MRE8xMAkJCSgweDE5KQotI2RlZmluZSBQTTg2MDdfTERPMTIJCQkoMHgxQSkKLSNkZWZpbmUgUE04NjA3X0xETzE0CQkJKDB4MUIpCi0jZGVmaW5lIFBNODYwN19TTEVFUF9NT0RFMQkJKDB4MUMpCi0jZGVmaW5lIFBNODYwN19TTEVFUF9NT0RFMgkJKDB4MUQpCi0jZGVmaW5lIFBNODYwN19TTEVFUF9NT0RFMwkJKDB4MUUpCi0jZGVmaW5lIFBNODYwN19TTEVFUF9NT0RFNAkJKDB4MUYpCi0jZGVmaW5lIFBNODYwN19HTwkJCSgweDIwKQotI2RlZmluZSBQTTg2MDdfU0xFRVBfQlVDSzEJCSgweDIxKQotI2RlZmluZSBQTTg2MDdfU0xFRVBfQlVDSzIJCSgweDIyKQotI2RlZmluZSBQTTg2MDdfU0xFRVBfQlVDSzMJCSgweDIzKQotI2RlZmluZSBQTTg2MDdfQlVDSzEJCQkoMHgyNCkKLSNkZWZpbmUgUE04NjA3X0JVQ0syCQkJKDB4MjUpCi0jZGVmaW5lIFBNODYwN19CVUNLMwkJCSgweDI2KQotI2RlZmluZSBQTTg2MDdfQlVDS19DT05UUk9MUwkJKDB4MjcpCi0jZGVmaW5lIFBNODYwN19TVVBQTElFU19FTjExCQkoMHgyQikKLSNkZWZpbmUgUE04NjA3X1NVUFBMSUVTX0VOMTIJCSgweDJDKQotI2RlZmluZSBQTTg2MDdfR1JPVVAxCQkJKDB4MkQpCi0jZGVmaW5lIFBNODYwN19HUk9VUDIJCQkoMHgyRSkKLSNkZWZpbmUgUE04NjA3X0dST1VQMwkJCSgweDJGKQotI2RlZmluZSBQTTg2MDdfR1JPVVA0CQkJKDB4MzApCi0jZGVmaW5lIFBNODYwN19HUk9VUDUJCQkoMHgzMSkKLSNkZWZpbmUgUE04NjA3X0dST1VQNgkJCSgweDMyKQotI2RlZmluZSBQTTg2MDdfU1VQUExJRVNfRU4yMQkJKDB4MzMpCi0jZGVmaW5lIFBNODYwN19TVVBQTElFU19FTjIyCQkoMHgzNCkKLQotLyogUlRDIENvbnRyb2wgUmVnaXN0ZXJzICovCi0jZGVmaW5lIFBNODYwN19SVEMxCQkJKDB4QTApCi0jZGVmaW5lIFBNODYwN19SVENfQ09VTlRFUjEJCSgweEExKQotI2RlZmluZSBQTTg2MDdfUlRDX0NPVU5URVIyCQkoMHhBMikKLSNkZWZpbmUgUE04NjA3X1JUQ19DT1VOVEVSMwkJKDB4QTMpCi0jZGVmaW5lIFBNODYwN19SVENfQ09VTlRFUjQJCSgweEE0KQotI2RlZmluZSBQTTg2MDdfUlRDX0VYUElSRTEJCSgweEE1KQotI2RlZmluZSBQTTg2MDdfUlRDX0VYUElSRTIJCSgweEE2KQotI2RlZmluZSBQTTg2MDdfUlRDX0VYUElSRTMJCSgweEE3KQotI2RlZmluZSBQTTg2MDdfUlRDX0VYUElSRTQJCSgweEE4KQotI2RlZmluZSBQTTg2MDdfUlRDX1RSSU0xCQkoMHhBOSkKLSNkZWZpbmUgUE04NjA3X1JUQ19UUklNMgkJKDB4QUEpCi0jZGVmaW5lIFBNODYwN19SVENfVFJJTTMJCSgweEFCKQotI2RlZmluZSBQTTg2MDdfUlRDX1RSSU00CQkoMHhBQykKLSNkZWZpbmUgUE04NjA3X1JUQ19NSVNDMQkJKDB4QUQpCi0jZGVmaW5lIFBNODYwN19SVENfTUlTQzIJCSgweEFFKQotI2RlZmluZSBQTTg2MDdfUlRDX01JU0MzCQkoMHhBRikKLQotLyogTWlzYyBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgUE04NjA3X0NISVBfSUQJCQkoMHgwMCkKLSNkZWZpbmUgUE04NjA3X0xETzEJCQkoMHgxMCkKLSNkZWZpbmUgUE04NjA3X0RWQzMJCQkoMHgyNikKLSNkZWZpbmUgUE04NjA3X01JU0MxCQkJKDB4NDApCi0KLS8qIGJpdCBkZWZpbml0aW9ucyBmb3IgUE04NjA3IGV2ZW50cyAqLwotI2RlZmluZSBQTTg2MDdfRVZFTlRfT05LRVkJCSgxIDw8IDApCi0jZGVmaW5lIFBNODYwN19FVkVOVF9FWFRPTgkJKDEgPDwgMSkKLSNkZWZpbmUgUE04NjA3X0VWRU5UX0NIRwkJKDEgPDwgMikKLSNkZWZpbmUgUE04NjA3X0VWRU5UX0JBVAkJKDEgPDwgMykKLSNkZWZpbmUgUE04NjA3X0VWRU5UX1JUQwkJKDEgPDwgNCkKLSNkZWZpbmUgUE04NjA3X0VWRU5UX0NDCQkJKDEgPDwgNSkKLSNkZWZpbmUgUE04NjA3X0VWRU5UX1ZCQVQJCSgxIDw8IDgpCi0jZGVmaW5lIFBNODYwN19FVkVOVF9WQ0hHCQkoMSA8PCA5KQotI2RlZmluZSBQTTg2MDdfRVZFTlRfVlNZUwkJKDEgPDwgMTApCi0jZGVmaW5lIFBNODYwN19FVkVOVF9USU5UCQkoMSA8PCAxMSkKLSNkZWZpbmUgUE04NjA3X0VWRU5UX0dQQURDMAkJKDEgPDwgMTIpCi0jZGVmaW5lIFBNODYwN19FVkVOVF9HUEFEQzEJCSgxIDw8IDEzKQotI2RlZmluZSBQTTg2MDdfRVZFTlRfR1BBREMyCQkoMSA8PCAxNCkKLSNkZWZpbmUgUE04NjA3X0VWRU5UX0dQQURDMwkJKDEgPDwgMTUpCi0jZGVmaW5lIFBNODYwN19FVkVOVF9BVURJT19TSE9SVAkoMSA8PCAxNikKLSNkZWZpbmUgUE04NjA3X0VWRU5UX1BFTgkJKDEgPDwgMTcpCi0jZGVmaW5lIFBNODYwN19FVkVOVF9IRUFEU0VUCQkoMSA8PCAxOCkKLSNkZWZpbmUgUE04NjA3X0VWRU5UX0hPT0sJCSgxIDw8IDE5KQotI2RlZmluZSBQTTg2MDdfRVZFTlRfTUlDSU4JCSgxIDw8IDIwKQotI2RlZmluZSBQTTg2MDdfRVZFTlRfQ0hHX1RJTUVPVVQJKDEgPDwgMjEpCi0jZGVmaW5lIFBNODYwN19FVkVOVF9DSEdfRE9ORQkJKDEgPDwgMjIpCi0jZGVmaW5lIFBNODYwN19FVkVOVF9DSEdfRkFVTFQJCSgxIDw8IDIzKQotCi0vKiBiaXQgZGVmaW5pdGlvbnMgb2YgU3RhdHVzIFF1ZXJ5IEludGVyZmFjZSAqLwotI2RlZmluZSBQTTg2MDdfU1RBVFVTX0NDCQkoMSA8PCAzKQotI2RlZmluZSBQTTg2MDdfU1RBVFVTX1BFTgkJKDEgPDwgNCkKLSNkZWZpbmUgUE04NjA3X1NUQVRVU19IRUFEU0VUCQkoMSA8PCA1KQotI2RlZmluZSBQTTg2MDdfU1RBVFVTX0hPT0sJCSgxIDw8IDYpCi0jZGVmaW5lIFBNODYwN19TVEFUVVNfTUlDSU4JCSgxIDw8IDcpCi0jZGVmaW5lIFBNODYwN19TVEFUVVNfT05LRVkJCSgxIDw8IDgpCi0jZGVmaW5lIFBNODYwN19TVEFUVVNfRVhUT04JCSgxIDw8IDkpCi0jZGVmaW5lIFBNODYwN19TVEFUVVNfQ0hHCQkoMSA8PCAxMCkKLSNkZWZpbmUgUE04NjA3X1NUQVRVU19CQVQJCSgxIDw8IDExKQotI2RlZmluZSBQTTg2MDdfU1RBVFVTX1ZCVVMJCSgxIDw8IDEyKQotI2RlZmluZSBQTTg2MDdfU1RBVFVTX09WCQkoMSA8PCAxMykKLQotLyogYml0IGRlZmluaXRpb25zIG9mIEJVQ0szICovCi0jZGVmaW5lIFBNODYwN19CVUNLM19ET1VCTEUJCSgxIDw8IDYpCi0KLS8qIGJpdCBkZWZpbml0aW9ucyBvZiBNaXNjMSAqLwotI2RlZmluZSBQTTg2MDdfTUlTQzFfUEkyQwkJKDEgPDwgMCkKLQotLyogSW50ZXJydXB0IE51bWJlciBpbiA4OFBNODYwNyAqLwotZW51bSB7Ci0JUE04NjA3X0lSUV9PTktFWSA9IDAsCi0JUE04NjA3X0lSUV9FWFRPTiwKLQlQTTg2MDdfSVJRX0NIRywKLQlQTTg2MDdfSVJRX0JBVCwKLQlQTTg2MDdfSVJRX1JUQywKLQlQTTg2MDdfSVJRX1ZCQVQgPSA4LAotCVBNODYwN19JUlFfVkNIRywKLQlQTTg2MDdfSVJRX1ZTWVMsCi0JUE04NjA3X0lSUV9USU5ULAotCVBNODYwN19JUlFfR1BBREMwLAotCVBNODYwN19JUlFfR1BBREMxLAotCVBNODYwN19JUlFfR1BBREMyLAotCVBNODYwN19JUlFfR1BBREMzLAotCVBNODYwN19JUlFfQVVESU9fU0hPUlQgPSAxNiwKLQlQTTg2MDdfSVJRX1BFTiwKLQlQTTg2MDdfSVJRX0hFQURTRVQsCi0JUE04NjA3X0lSUV9IT09LLAotCVBNODYwN19JUlFfTUlDSU4sCi0JUE04NjA3X0lSUV9DSEdfRkFJTCwKLQlQTTg2MDdfSVJRX0NIR19ET05FLAotCVBNODYwN19JUlFfQ0hHX0ZBVUxULAotfTsKLQotZW51bSB7Ci0JUE04NjA3X0NISVBfQTAgPSAweDQwLAotCVBNODYwN19DSElQX0ExID0gMHg0MSwKLQlQTTg2MDdfQ0hJUF9CMCA9IDB4NDgsCi19OwotCi0KLXN0cnVjdCBwbTg2MDdfY2hpcCB7Ci0Jc3RydWN0IGRldmljZQkJKmRldjsKLQlzdHJ1Y3QgbXV0ZXgJCWlvX2xvY2s7Ci0Jc3RydWN0IGkyY19jbGllbnQJKmNsaWVudDsKLQotCWludCAoKnJlYWQpKHN0cnVjdCBwbTg2MDdfY2hpcCAqY2hpcCwgaW50IHJlZywgaW50IGJ5dGVzLCB2b2lkICpkZXN0KTsKLQlpbnQgKCp3cml0ZSkoc3RydWN0IHBtODYwN19jaGlwICpjaGlwLCBpbnQgcmVnLCBpbnQgYnl0ZXMsIHZvaWQgKnNyYyk7Ci0KLQlpbnQJCQlidWNrM19kb3VibGU7CS8qIERWQyByYW1wIHNsb3BlIGRvdWJsZSAqLwotCXVuc2lnbmVkIGNoYXIJCWNoaXBfaWQ7Ci0KLX07Ci0KLSNkZWZpbmUgUE04NjA3X01BWF9SRUdVTEFUT1IJMTUJLyogMyBCdWNrcywgMTIgTERPcyAqLwotCi1lbnVtIHsKLQlHSTJDX1BPUlQgPSAwLAotCVBJMkNfUE9SVCwKLX07Ci0KLXN0cnVjdCBwbTg2MDdfcGxhdGZvcm1fZGF0YSB7Ci0JaW50CWkyY19wb3J0OwkvKiBDb250cm9sbGVkIGJ5IEdJMkMgb3IgUEkyQyAqLwotCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICpyZWd1bGF0b3JbUE04NjA3X01BWF9SRUdVTEFUT1JdOwotfTsKLQotZXh0ZXJuIGludCBwbTg2MDdfcmVnX3JlYWQoc3RydWN0IHBtODYwN19jaGlwICosIGludCk7Ci1leHRlcm4gaW50IHBtODYwN19yZWdfd3JpdGUoc3RydWN0IHBtODYwN19jaGlwICosIGludCwgdW5zaWduZWQgY2hhcik7Ci1leHRlcm4gaW50IHBtODYwN19idWxrX3JlYWQoc3RydWN0IHBtODYwN19jaGlwICosIGludCwgaW50LAotCQkJICAgIHVuc2lnbmVkIGNoYXIgKik7Ci1leHRlcm4gaW50IHBtODYwN19idWxrX3dyaXRlKHN0cnVjdCBwbTg2MDdfY2hpcCAqLCBpbnQsIGludCwKLQkJCSAgICAgdW5zaWduZWQgY2hhciAqKTsKLWV4dGVybiBpbnQgcG04NjA3X3NldF9iaXRzKHN0cnVjdCBwbTg2MDdfY2hpcCAqLCBpbnQsIHVuc2lnbmVkIGNoYXIsCi0JCQkgICB1bnNpZ25lZCBjaGFyKTsKLSNlbmRpZiAvKiBfX0xJTlVYX01GRF84OFBNODYwN19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC84OHBtODYweC5oIGIvaW5jbHVkZS9saW51eC9tZmQvODhwbTg2MHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2Y5MmM1ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkLzg4cG04NjB4LmgKQEAgLTAsMCArMSwzNzUgQEAKKy8qCisgKiBNYXJ2ZWxsIDg4UE04NjB4IEludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICogCUhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0BtYXJ2ZWxsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19MSU5VWF9NRkRfODhQTTg2MFhfSAorI2RlZmluZSBfX0xJTlVYX01GRF84OFBNODYwWF9ICisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2RlZmluZSBNRkRfTkFNRV9TSVpFCQkoNDApCisKK2VudW0geworCUNISVBfSU5WQUxJRCA9IDAsCisJQ0hJUF9QTTg2MDYsCisJQ0hJUF9QTTg2MDcsCisJQ0hJUF9NQVgsCit9OworCitlbnVtIHsKKwlQTTg2MDZfSURfSU5WQUxJRCwKKwlQTTg2MDZfSURfQkFDS0xJR0hULAorCVBNODYwNl9JRF9MRUQsCisJUE04NjA2X0lEX1ZJQlJBVE9SLAorCVBNODYwNl9JRF9UT1VDSCwKKwlQTTg2MDZfSURfU09VTkQsCisJUE04NjA2X0lEX0NIQVJHRVIsCisJUE04NjA2X0lEX01BWCwKK307CisKK2VudW0geworCVBNODYwNl9CQUNLTElHSFQxID0gMCwKKwlQTTg2MDZfQkFDS0xJR0hUMiwKKwlQTTg2MDZfQkFDS0xJR0hUMywKK307CisKK2VudW0geworCVBNODYwNl9MRUQxX1JFRCA9IDAsCisJUE04NjA2X0xFRDFfR1JFRU4sCisJUE04NjA2X0xFRDFfQkxVRSwKKwlQTTg2MDZfTEVEMl9SRUQsCisJUE04NjA2X0xFRDJfR1JFRU4sCisJUE04NjA2X0xFRDJfQkxVRSwKKwlQTTg2MDdfTEVEX1ZJQlJBVE9SLAorfTsKKworCisvKiA4NjA2IFJlZ2lzdGVycyAqLworI2RlZmluZSBQTTg2MDZfRENNX0JPT1NUCQkoMHgwMCkKKyNkZWZpbmUgUE04NjA2X1BXTQkJCSgweDAxKQorCisvKiBCYWNrbGlnaHQgUmVnaXN0ZXJzICovCisjZGVmaW5lIFBNODYwNl9XTEVEMUEJCQkoMHgwMikKKyNkZWZpbmUgUE04NjA2X1dMRUQxQgkJCSgweDAzKQorI2RlZmluZSBQTTg2MDZfV0xFRDJBCQkJKDB4MDQpCisjZGVmaW5lIFBNODYwNl9XTEVEMkIJCQkoMHgwNSkKKyNkZWZpbmUgUE04NjA2X1dMRUQzQQkJCSgweDA2KQorI2RlZmluZSBQTTg2MDZfV0xFRDNCCQkJKDB4MDcpCisKKy8qIExFRCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUE04NjA2X1JHQjJBCQkJKDB4MDgpCisjZGVmaW5lIFBNODYwNl9SR0IyQgkJCSgweDA5KQorI2RlZmluZSBQTTg2MDZfUkdCMkMJCQkoMHgwQSkKKyNkZWZpbmUgUE04NjA2X1JHQjJECQkJKDB4MEIpCisjZGVmaW5lIFBNODYwNl9SR0IxQQkJCSgweDBDKQorI2RlZmluZSBQTTg2MDZfUkdCMUIJCQkoMHgwRCkKKyNkZWZpbmUgUE04NjA2X1JHQjFDCQkJKDB4MEUpCisjZGVmaW5lIFBNODYwNl9SR0IxRAkJCSgweDBGKQorCisjZGVmaW5lIFBNODYwNl9QUkVSRUdVTEFUT1JBCQkoMHgxMCkKKyNkZWZpbmUgUE04NjA2X1BSRVJFR1VMQVRPUkIJCSgweDExKQorI2RlZmluZSBQTTg2MDZfVklCUkFUT1JBCQkoMHgxMikKKyNkZWZpbmUgUE04NjA2X1ZJQlJBVE9SQgkJKDB4MTMpCisjZGVmaW5lIFBNODYwNl9WQ0hHCQkJKDB4MTQpCisjZGVmaW5lIFBNODYwNl9WU1lTCQkJKDB4MTUpCisjZGVmaW5lIFBNODYwNl9NSVNDCQkJKDB4MTYpCisjZGVmaW5lIFBNODYwNl9DSElQX0lECQkJKDB4MTcpCisjZGVmaW5lIFBNODYwNl9TVEFUVVMJCQkoMHgxOCkKKyNkZWZpbmUgUE04NjA2X0ZMQUdTCQkJKDB4MTkpCisjZGVmaW5lIFBNODYwNl9QUk9URUNUQQkJCSgweDFBKQorI2RlZmluZSBQTTg2MDZfUFJPVEVDVEIJCQkoMHgxQikKKyNkZWZpbmUgUE04NjA2X1BST1RFQ1RDCQkJKDB4MUMpCisKKy8qIEJpdCBkZWZpbml0aW9ucyBvZiBQTTg2MDYgcmVnaXN0ZXJzICovCisjZGVmaW5lIFBNODYwNl9EQ01fNTAwTUEJCSgweDApCS8qIGN1cnJlbnQgbGltaXQgKi8KKyNkZWZpbmUgUE04NjA2X0RDTV83NTBNQQkJKDB4MSkKKyNkZWZpbmUgUE04NjA2X0RDTV8xMDAwTUEJCSgweDIpCisjZGVmaW5lIFBNODYwNl9EQ01fMTI1ME1BCQkoMHgzKQorI2RlZmluZSBQTTg2MDZfRENNXzI1ME1WCQkoMHgwIDw8IDIpCisjZGVmaW5lIFBNODYwNl9EQ01fMzAwTVYJCSgweDEgPDwgMikKKyNkZWZpbmUgUE04NjA2X0RDTV8zNTBNVgkJKDB4MiA8PCAyKQorI2RlZmluZSBQTTg2MDZfRENNXzQwME1WCQkoMHgzIDw8IDIpCisKKyNkZWZpbmUgUE04NjA2X1BXTV8zMTIwMEhaCQkoMHgwKQorI2RlZmluZSBQTTg2MDZfUFdNXzE1NjAwSFoJCSgweDEpCisjZGVmaW5lIFBNODYwNl9QV01fNzgwMEhaCQkoMHgyKQorI2RlZmluZSBQTTg2MDZfUFdNXzM5MDBIWgkJKDB4MykKKyNkZWZpbmUgUE04NjA2X1BXTV8xOTUwSFoJCSgweDQpCisjZGVmaW5lIFBNODYwNl9QV01fOTc2SFoJCSgweDUpCisjZGVmaW5lIFBNODYwNl9QV01fNDg4SFoJCSgweDYpCisjZGVmaW5lIFBNODYwNl9QV01fMjQ0SFoJCSgweDcpCisjZGVmaW5lIFBNODYwNl9QV01fRlJFUV9NQVNLCQkoMHg3KQorCisjZGVmaW5lIFBNODYwNl9XTEVEX09OCQkJKDEgPDwgMCkKKyNkZWZpbmUgUE04NjA2X1dMRURfQ1VSUkVOVCh4KQkJKCh4ICYgMHgxRikgPDwgMSkKKworI2RlZmluZSBQTTg2MDZfTEVEX0NVUlJFTlQoeCkJCSgoKHggPj4gMikgJiAweDA3KSA8PCA1KQorCisjZGVmaW5lIFBNODYwNl9WU1lTX0VOCQkJKDEgPDwgMSkKKworI2RlZmluZSBQTTg2MDZfTUlTQ19PU0NfRU4JCSgxIDw8IDQpCisKK2VudW0geworCVBNODYwN19JRF9CVUNLMSA9IDAsCisJUE04NjA3X0lEX0JVQ0syLAorCVBNODYwN19JRF9CVUNLMywKKworCVBNODYwN19JRF9MRE8xLAorCVBNODYwN19JRF9MRE8yLAorCVBNODYwN19JRF9MRE8zLAorCVBNODYwN19JRF9MRE80LAorCVBNODYwN19JRF9MRE81LAorCVBNODYwN19JRF9MRE82LAorCVBNODYwN19JRF9MRE83LAorCVBNODYwN19JRF9MRE84LAorCVBNODYwN19JRF9MRE85LAorCVBNODYwN19JRF9MRE8xMCwKKwlQTTg2MDdfSURfTERPMTIsCisJUE04NjA3X0lEX0xETzE0LAorCisJUE04NjA3X0lEX1JHX01BWCwKK307CisKKyNkZWZpbmUgUE04NjA3X1ZFUlNJT04JCQkoMHg0MCkJLyogODYwNyBjaGlwIElEICovCisjZGVmaW5lIFBNODYwN19WRVJTSU9OX01BU0sJCSgweEYwKQkvKiA4NjA3IGNoaXAgSUQgbWFzayAqLworCisvKiBJbnRlcnJ1cHQgUmVnaXN0ZXJzICovCisjZGVmaW5lIFBNODYwN19TVEFUVVNfMQkJCSgweDAxKQorI2RlZmluZSBQTTg2MDdfU1RBVFVTXzIJCQkoMHgwMikKKyNkZWZpbmUgUE04NjA3X0lOVF9TVEFUVVMxCQkoMHgwMykKKyNkZWZpbmUgUE04NjA3X0lOVF9TVEFUVVMyCQkoMHgwNCkKKyNkZWZpbmUgUE04NjA3X0lOVF9TVEFUVVMzCQkoMHgwNSkKKyNkZWZpbmUgUE04NjA3X0lOVF9NQVNLXzEJCSgweDA2KQorI2RlZmluZSBQTTg2MDdfSU5UX01BU0tfMgkJKDB4MDcpCisjZGVmaW5lIFBNODYwN19JTlRfTUFTS18zCQkoMHgwOCkKKworLyogUmVndWxhdG9yIENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lIFBNODYwN19MRE8xCQkJKDB4MTApCisjZGVmaW5lIFBNODYwN19MRE8yCQkJKDB4MTEpCisjZGVmaW5lIFBNODYwN19MRE8zCQkJKDB4MTIpCisjZGVmaW5lIFBNODYwN19MRE80CQkJKDB4MTMpCisjZGVmaW5lIFBNODYwN19MRE81CQkJKDB4MTQpCisjZGVmaW5lIFBNODYwN19MRE82CQkJKDB4MTUpCisjZGVmaW5lIFBNODYwN19MRE83CQkJKDB4MTYpCisjZGVmaW5lIFBNODYwN19MRE84CQkJKDB4MTcpCisjZGVmaW5lIFBNODYwN19MRE85CQkJKDB4MTgpCisjZGVmaW5lIFBNODYwN19MRE8xMAkJCSgweDE5KQorI2RlZmluZSBQTTg2MDdfTERPMTIJCQkoMHgxQSkKKyNkZWZpbmUgUE04NjA3X0xETzE0CQkJKDB4MUIpCisjZGVmaW5lIFBNODYwN19TTEVFUF9NT0RFMQkJKDB4MUMpCisjZGVmaW5lIFBNODYwN19TTEVFUF9NT0RFMgkJKDB4MUQpCisjZGVmaW5lIFBNODYwN19TTEVFUF9NT0RFMwkJKDB4MUUpCisjZGVmaW5lIFBNODYwN19TTEVFUF9NT0RFNAkJKDB4MUYpCisjZGVmaW5lIFBNODYwN19HTwkJCSgweDIwKQorI2RlZmluZSBQTTg2MDdfU0xFRVBfQlVDSzEJCSgweDIxKQorI2RlZmluZSBQTTg2MDdfU0xFRVBfQlVDSzIJCSgweDIyKQorI2RlZmluZSBQTTg2MDdfU0xFRVBfQlVDSzMJCSgweDIzKQorI2RlZmluZSBQTTg2MDdfQlVDSzEJCQkoMHgyNCkKKyNkZWZpbmUgUE04NjA3X0JVQ0syCQkJKDB4MjUpCisjZGVmaW5lIFBNODYwN19CVUNLMwkJCSgweDI2KQorI2RlZmluZSBQTTg2MDdfQlVDS19DT05UUk9MUwkJKDB4MjcpCisjZGVmaW5lIFBNODYwN19TVVBQTElFU19FTjExCQkoMHgyQikKKyNkZWZpbmUgUE04NjA3X1NVUFBMSUVTX0VOMTIJCSgweDJDKQorI2RlZmluZSBQTTg2MDdfR1JPVVAxCQkJKDB4MkQpCisjZGVmaW5lIFBNODYwN19HUk9VUDIJCQkoMHgyRSkKKyNkZWZpbmUgUE04NjA3X0dST1VQMwkJCSgweDJGKQorI2RlZmluZSBQTTg2MDdfR1JPVVA0CQkJKDB4MzApCisjZGVmaW5lIFBNODYwN19HUk9VUDUJCQkoMHgzMSkKKyNkZWZpbmUgUE04NjA3X0dST1VQNgkJCSgweDMyKQorI2RlZmluZSBQTTg2MDdfU1VQUExJRVNfRU4yMQkJKDB4MzMpCisjZGVmaW5lIFBNODYwN19TVVBQTElFU19FTjIyCQkoMHgzNCkKKworLyogVmlicmF0b3IgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUE04NjA3X1ZJQlJBVE9SX1NFVAkJKDB4MjgpCisjZGVmaW5lIFBNODYwN19WSUJSQVRPUl9QV00JCSgweDI5KQorCisvKiBHUEFEQyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUE04NjA3X0dQX0JJQVMxCQkJKDB4NEYpCisjZGVmaW5lIFBNODYwN19NRUFTX0VOMQkJCSgweDUwKQorI2RlZmluZSBQTTg2MDdfTUVBU19FTjIJCQkoMHg1MSkKKyNkZWZpbmUgUE04NjA3X01FQVNfRU4zCQkJKDB4NTIpCisjZGVmaW5lIFBNODYwN19NRUFTX09GRl9USU1FMQkJKDB4NTMpCisjZGVmaW5lIFBNODYwN19NRUFTX09GRl9USU1FMgkJKDB4NTQpCisjZGVmaW5lIFBNODYwN19UU0lfUFJFQklBUwkJKDB4NTUpCS8qIHByZWJpYXMgdGltZSAqLworI2RlZmluZSBQTTg2MDdfUERfUFJFQklBUwkJKDB4NTYpCS8qIHByZWJpYXMgdGltZSAqLworI2RlZmluZSBQTTg2MDdfR1BBRENfTUlTQzEJCSgweDU3KQorCisvKiBSVEMgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUE04NjA3X1JUQzEJCQkoMHhBMCkKKyNkZWZpbmUgUE04NjA3X1JUQ19DT1VOVEVSMQkJKDB4QTEpCisjZGVmaW5lIFBNODYwN19SVENfQ09VTlRFUjIJCSgweEEyKQorI2RlZmluZSBQTTg2MDdfUlRDX0NPVU5URVIzCQkoMHhBMykKKyNkZWZpbmUgUE04NjA3X1JUQ19DT1VOVEVSNAkJKDB4QTQpCisjZGVmaW5lIFBNODYwN19SVENfRVhQSVJFMQkJKDB4QTUpCisjZGVmaW5lIFBNODYwN19SVENfRVhQSVJFMgkJKDB4QTYpCisjZGVmaW5lIFBNODYwN19SVENfRVhQSVJFMwkJKDB4QTcpCisjZGVmaW5lIFBNODYwN19SVENfRVhQSVJFNAkJKDB4QTgpCisjZGVmaW5lIFBNODYwN19SVENfVFJJTTEJCSgweEE5KQorI2RlZmluZSBQTTg2MDdfUlRDX1RSSU0yCQkoMHhBQSkKKyNkZWZpbmUgUE04NjA3X1JUQ19UUklNMwkJKDB4QUIpCisjZGVmaW5lIFBNODYwN19SVENfVFJJTTQJCSgweEFDKQorI2RlZmluZSBQTTg2MDdfUlRDX01JU0MxCQkoMHhBRCkKKyNkZWZpbmUgUE04NjA3X1JUQ19NSVNDMgkJKDB4QUUpCisjZGVmaW5lIFBNODYwN19SVENfTUlTQzMJCSgweEFGKQorCisvKiBNaXNjIFJlZ2lzdGVycyAqLworI2RlZmluZSBQTTg2MDdfQ0hJUF9JRAkJCSgweDAwKQorI2RlZmluZSBQTTg2MDdfQjBfTUlTQzEJCQkoMHgwQykKKyNkZWZpbmUgUE04NjA3X0xETzEJCQkoMHgxMCkKKyNkZWZpbmUgUE04NjA3X0RWQzMJCQkoMHgyNikKKyNkZWZpbmUgUE04NjA3X0ExX01JU0MxCQkJKDB4NDApCisKKy8qIGJpdCBkZWZpbml0aW9ucyBvZiBTdGF0dXMgUXVlcnkgSW50ZXJmYWNlICovCisjZGVmaW5lIFBNODYwN19TVEFUVVNfQ0MJCSgxIDw8IDMpCisjZGVmaW5lIFBNODYwN19TVEFUVVNfUEVOCQkoMSA8PCA0KQorI2RlZmluZSBQTTg2MDdfU1RBVFVTX0hFQURTRVQJCSgxIDw8IDUpCisjZGVmaW5lIFBNODYwN19TVEFUVVNfSE9PSwkJKDEgPDwgNikKKyNkZWZpbmUgUE04NjA3X1NUQVRVU19NSUNJTgkJKDEgPDwgNykKKyNkZWZpbmUgUE04NjA3X1NUQVRVU19PTktFWQkJKDEgPDwgOCkKKyNkZWZpbmUgUE04NjA3X1NUQVRVU19FWFRPTgkJKDEgPDwgOSkKKyNkZWZpbmUgUE04NjA3X1NUQVRVU19DSEcJCSgxIDw8IDEwKQorI2RlZmluZSBQTTg2MDdfU1RBVFVTX0JBVAkJKDEgPDwgMTEpCisjZGVmaW5lIFBNODYwN19TVEFUVVNfVkJVUwkJKDEgPDwgMTIpCisjZGVmaW5lIFBNODYwN19TVEFUVVNfT1YJCSgxIDw8IDEzKQorCisvKiBiaXQgZGVmaW5pdGlvbnMgb2YgQlVDSzMgKi8KKyNkZWZpbmUgUE04NjA3X0JVQ0szX0RPVUJMRQkJKDEgPDwgNikKKworLyogYml0IGRlZmluaXRpb25zIG9mIE1pc2MxICovCisjZGVmaW5lIFBNODYwN19BMV9NSVNDMV9QSTJDCQkoMSA8PCAwKQorI2RlZmluZSBQTTg2MDdfQjBfTUlTQzFfSU5WX0lOVAkJKDEgPDwgMCkKKyNkZWZpbmUgUE04NjA3X0IwX01JU0MxX0lOVF9DTEVBUgkoMSA8PCAxKQorI2RlZmluZSBQTTg2MDdfQjBfTUlTQzFfSU5UX01BU0sJKDEgPDwgMikKKyNkZWZpbmUgUE04NjA3X0IwX01JU0MxX1BJMkMJCSgxIDw8IDMpCisjZGVmaW5lIFBNODYwN19CMF9NSVNDMV9SRVNFVAkJKDEgPDwgNikKKworLyogYml0cyBkZWZpbml0aW9ucyBvZiBHUEFEQyAqLworI2RlZmluZSBQTTg2MDdfR1BBRENfRU4JCQkoMSA8PCAwKQorI2RlZmluZSBQTTg2MDdfR1BBRENfUFJFQklBU19NQVNLCSgzIDw8IDEpCisjZGVmaW5lIFBNODYwN19HUEFEQ19TTE9UX0NZQ0xFX01BU0sJKDMgPDwgMykJLyogc2xvdyBtb2RlICovCisjZGVmaW5lIFBNODYwN19HUEFEQ19PRkZfU0NBTEVfTUFTSwkoMyA8PCA1KQkvKiBHUCBzbGVlcCBtb2RlICovCisjZGVmaW5lIFBNODYwN19HUEFEQ19TV19DQUxfTUFTSwkoMSA8PCA3KQorCisjZGVmaW5lIFBNODYwN19QRF9QUkVCSUFTX01BU0sJCSgweDFGIDw8IDApCisjZGVmaW5lIFBNODYwN19QRF9QUkVDSEdfTUFTSwkJKDcgPDwgNSkKKworLyogSW50ZXJydXB0IE51bWJlciBpbiA4OFBNODYwNyAqLworZW51bSB7CisJUE04NjA3X0lSUV9PTktFWSwKKwlQTTg2MDdfSVJRX0VYVE9OLAorCVBNODYwN19JUlFfQ0hHLAorCVBNODYwN19JUlFfQkFULAorCVBNODYwN19JUlFfUlRDLAorCVBNODYwN19JUlFfQ0MsCisJUE04NjA3X0lSUV9WQkFULAorCVBNODYwN19JUlFfVkNIRywKKwlQTTg2MDdfSVJRX1ZTWVMsCisJUE04NjA3X0lSUV9USU5ULAorCVBNODYwN19JUlFfR1BBREMwLAorCVBNODYwN19JUlFfR1BBREMxLAorCVBNODYwN19JUlFfR1BBREMyLAorCVBNODYwN19JUlFfR1BBREMzLAorCVBNODYwN19JUlFfQVVESU9fU0hPUlQsCisJUE04NjA3X0lSUV9QRU4sCisJUE04NjA3X0lSUV9IRUFEU0VULAorCVBNODYwN19JUlFfSE9PSywKKwlQTTg2MDdfSVJRX01JQ0lOLAorCVBNODYwN19JUlFfQ0hHX0ZBSUwsCisJUE04NjA3X0lSUV9DSEdfRE9ORSwKKwlQTTg2MDdfSVJRX0NIR19GQVVMVCwKK307CisKK2VudW0geworCVBNODYwN19DSElQX0EwID0gMHg0MCwKKwlQTTg2MDdfQ0hJUF9BMSA9IDB4NDEsCisJUE04NjA3X0NISVBfQjAgPSAweDQ4LAorfTsKKworc3RydWN0IHBtODYweF9jaGlwIHsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCXN0cnVjdCBtdXRleAkJaW9fbG9jazsKKwlzdHJ1Y3QgbXV0ZXgJCWlycV9sb2NrOworCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQ7CisJc3RydWN0IGkyY19jbGllbnQJKmNvbXBhbmlvbjsJLyogY29tcGFuaW9uIGNoaXAgY2xpZW50ICovCisKKwlpbnQJCQlidWNrM19kb3VibGU7CS8qIERWQyByYW1wIHNsb3BlIGRvdWJsZSAqLworCXVuc2lnbmVkIHNob3J0CQljb21wYW5pb25fYWRkcjsKKwlpbnQJCQlpZDsKKwlpbnQJCQlpcnFfbW9kZTsKKwlpbnQJCQlpcnFfYmFzZTsKKwlpbnQJCQljb3JlX2lycTsKKwl1bnNpZ25lZCBjaGFyCQljaGlwX3ZlcnNpb247CisKK307CisKKyNkZWZpbmUgUE04NjA3X01BWF9SRUdVTEFUT1IJMTUJLyogMyBCdWNrcywgMTIgTERPcyAqLworCitlbnVtIHsKKwlHSTJDX1BPUlQgPSAwLAorCVBJMkNfUE9SVCwKK307CisKK3N0cnVjdCBwbTg2MHhfYmFja2xpZ2h0X3BkYXRhIHsKKwlpbnQJCWlkOworCWludAkJcHdtOworCWludAkJaXNldDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworfTsKKworc3RydWN0IHBtODYweF9sZWRfcGRhdGEgeworCWludAkJaWQ7CisJaW50CQlpc2V0OworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Cit9OworCitzdHJ1Y3QgcG04NjB4X3RvdWNoX3BkYXRhIHsKKwlpbnQJCWdwYWRjX3ByZWJpYXM7CisJaW50CQlzbG90X2N5Y2xlOworCWludAkJb2ZmX3NjYWxlOworCWludAkJc3dfY2FsOworCWludAkJdHNpX3ByZWJpYXM7CS8qIHRpbWUsIHNsb3QgKi8KKwlpbnQJCXBlbl9wcmViaWFzOwkvKiB0aW1lLCBzbG90ICovCisJaW50CQlwZW5fcHJlY2hnOwkvKiB0aW1lLCBzbG90ICovCisJaW50CQlyZXNfeDsJCS8qIHJlc2lzdG9yIG9mIFhwbGF0ZSAqLworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Cit9OworCitzdHJ1Y3QgcG04NjB4X3Bvd2VyX3BkYXRhIHsKKwl1bnNpZ25lZAlmYXN0X2NoYXJnZTsJLyogY2hhcmdlIGN1cnJlbnQgKi8KK307CisKK3N0cnVjdCBwbTg2MHhfcGxhdGZvcm1fZGF0YSB7CisJc3RydWN0IHBtODYweF9iYWNrbGlnaHRfcGRhdGEJKmJhY2tsaWdodDsKKwlzdHJ1Y3QgcG04NjB4X2xlZF9wZGF0YQkJKmxlZDsKKwlzdHJ1Y3QgcG04NjB4X3RvdWNoX3BkYXRhCSp0b3VjaDsKKwlzdHJ1Y3QgcG04NjB4X3Bvd2VyX3BkYXRhCSpwb3dlcjsKKworCXVuc2lnbmVkIHNob3J0CWNvbXBhbmlvbl9hZGRyOwkvKiBJMkMgYWRkcmVzcyBvZiBjb21wYW5pb24gY2hpcCAqLworCWludAkJaTJjX3BvcnQ7CS8qIENvbnRyb2xsZWQgYnkgR0kyQyBvciBQSTJDICovCisJaW50CQlpcnFfbW9kZTsJLyogQ2xlYXIgaW50ZXJydXB0IGJ5IHJlYWQvd3JpdGUoMC8xKSAqLworCWludAkJaXJxX2Jhc2U7CS8qIElSUSBiYXNlIG51bWJlciBvZiA4OHBtODYweCAqLworCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICpyZWd1bGF0b3JbUE04NjA3X01BWF9SRUdVTEFUT1JdOworfTsKKworZXh0ZXJuIGNoYXIgcG04NjB4X2JhY2tsaWdodF9uYW1lW11bTUZEX05BTUVfU0laRV07CitleHRlcm4gY2hhciBwbTg2MHhfbGVkX25hbWVbXVtNRkRfTkFNRV9TSVpFXTsKKworZXh0ZXJuIGludCBwbTg2MHhfcmVnX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKiwgaW50KTsKK2V4dGVybiBpbnQgcG04NjB4X3JlZ193cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqLCBpbnQsIHVuc2lnbmVkIGNoYXIpOworZXh0ZXJuIGludCBwbTg2MHhfYnVsa19yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICosIGludCwgaW50LCB1bnNpZ25lZCBjaGFyICopOworZXh0ZXJuIGludCBwbTg2MHhfYnVsa193cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqLCBpbnQsIGludCwgdW5zaWduZWQgY2hhciAqKTsKK2V4dGVybiBpbnQgcG04NjB4X3NldF9iaXRzKHN0cnVjdCBpMmNfY2xpZW50ICosIGludCwgdW5zaWduZWQgY2hhciwKKwkJCSAgIHVuc2lnbmVkIGNoYXIpOworCitleHRlcm4gaW50IHBtODYweF9kZXZpY2VfaW5pdChzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXAsCisJCQkgICAgICBzdHJ1Y3QgcG04NjB4X3BsYXRmb3JtX2RhdGEgKnBkYXRhKTsKK2V4dGVybiB2b2lkIHBtODYweF9kZXZpY2VfZXhpdChzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXApOworCisjZW5kaWYgLyogX19MSU5VWF9NRkRfODhQTTg2MFhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvYWIzMTAwLmggYi9pbmNsdWRlL2xpbnV4L21mZC9hYjMxMDAuaAppbmRleCBlOWFhNGM5Li45YTg4MWMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9hYjMxMDAuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9hYjMxMDAuaApAQCAtNiw3ICs2LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KIAogI2lmbmRlZiBNRkRfQUIzMTAwX0gKQEAgLTc0LDcgKzczLDYgQEAKICAqIEB0ZXN0cmVnX2NsaWVudDogc2Vjb25kYXJ5IGNsaWVudCBmb3IgdGVzdCByZWdpc3RlcnMKICAqIEBjaGlwX25hbWU6IG5hbWUgb2YgdGhpcyBjaGlwIHZhcmlhbnQKICAqIEBjaGlwX2lkOiA4IGJpdCBjaGlwIElEIGZvciB0aGlzIGNoaXAgdmFyaWFudAotICogQHdvcms6IGFuIGV2ZW50IGhhbmRsaW5nIHdvcmtlcgogICogQGV2ZW50X3N1YnNjcmliZXJzOiBldmVudCBzdWJzY3JpYmVycyBhcmUgbGlzdGVkIGhlcmUKICAqIEBzdGFydHVwX2V2ZW50czogYSBjb3B5IG9mIHRoZSBmaXJzdCByZWFkaW5nIG9mIHRoZSBldmVudCByZWdpc3RlcnMKICAqIEBzdGFydHVwX2V2ZW50c19yZWFkOiB3aGV0aGVyIHRoZSBmaXJzdCBldmVudHMgaGF2ZSBiZWVuIHJlYWQKQEAgLTkwLDcgKzg4LDYgQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqdGVzdHJlZ19jbGllbnQ7CiAJY2hhciBjaGlwX25hbWVbMzJdOwogCXU4IGNoaXBfaWQ7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJc3RydWN0IGJsb2NraW5nX25vdGlmaWVyX2hlYWQgZXZlbnRfc3Vic2NyaWJlcnM7CiAJdTMyIHN0YXJ0dXBfZXZlbnRzOwogCWJvb2wgc3RhcnR1cF9ldmVudHNfcmVhZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL21heDg5MjUuaCBiL2luY2x1ZGUvbGludXgvbWZkL21heDg5MjUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjU5ZGZlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvbWF4ODkyNS5oCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogTWF4aW04OTI1IEludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoJSGFvamlhbiBaaHVhbmcgPGhhb2ppYW4uemh1YW5nQG1hcnZlbGwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX01GRF9NQVg4OTI1X0gKKyNkZWZpbmUgX19MSU5VWF9NRkRfTUFYODkyNV9ICisKKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisvKiBVbmlmaWVkIHN1YiBkZXZpY2UgSURzIGZvciBNQVg4OTI1ICovCitlbnVtIHsKKwlNQVg4OTI1X0lEX1NEMSwKKwlNQVg4OTI1X0lEX1NEMiwKKwlNQVg4OTI1X0lEX1NEMywKKwlNQVg4OTI1X0lEX0xETzEsCisJTUFYODkyNV9JRF9MRE8yLAorCU1BWDg5MjVfSURfTERPMywKKwlNQVg4OTI1X0lEX0xETzQsCisJTUFYODkyNV9JRF9MRE81LAorCU1BWDg5MjVfSURfTERPNiwKKwlNQVg4OTI1X0lEX0xETzcsCisJTUFYODkyNV9JRF9MRE84LAorCU1BWDg5MjVfSURfTERPOSwKKwlNQVg4OTI1X0lEX0xETzEwLAorCU1BWDg5MjVfSURfTERPMTEsCisJTUFYODkyNV9JRF9MRE8xMiwKKwlNQVg4OTI1X0lEX0xETzEzLAorCU1BWDg5MjVfSURfTERPMTQsCisJTUFYODkyNV9JRF9MRE8xNSwKKwlNQVg4OTI1X0lEX0xETzE2LAorCU1BWDg5MjVfSURfTERPMTcsCisJTUFYODkyNV9JRF9MRE8xOCwKKwlNQVg4OTI1X0lEX0xETzE5LAorCU1BWDg5MjVfSURfTERPMjAsCisJTUFYODkyNV9JRF9NQVgsCit9OworCitlbnVtIHsKKwkvKgorCSAqIENoYXJnaW5nIGN1cnJlbnQgdGhyZXNob2xkIHRyaWdnZXIgZ29pbmcgZnJvbSBmYXN0IGNoYXJnZQorCSAqIHRvIFRPUE9GRiBjaGFyZ2UuIEZyb20gNSUgdG8gMjAlIG9mIGZhc3RpbmcgY2hhcmdpbmcgY3VycmVudC4KKwkgKi8KKwlNQVg4OTI1X1RPUE9GRl9USFJfNVBFUiwKKwlNQVg4OTI1X1RPUE9GRl9USFJfMTBQRVIsCisJTUFYODkyNV9UT1BPRkZfVEhSXzE1UEVSLAorCU1BWDg5MjVfVE9QT0ZGX1RIUl8yMFBFUiwKK307CisKK2VudW0geworCS8qIEZhc3QgY2hhcmdpbmcgY3VycmVudCAqLworCU1BWDg5MjVfRkNIR184NU1BLAorCU1BWDg5MjVfRkNIR18zMDBNQSwKKwlNQVg4OTI1X0ZDSEdfNDYwTUEsCisJTUFYODkyNV9GQ0hHXzYwME1BLAorCU1BWDg5MjVfRkNIR183MDBNQSwKKwlNQVg4OTI1X0ZDSEdfODAwTUEsCisJTUFYODkyNV9GQ0hHXzkwME1BLAorCU1BWDg5MjVfRkNIR18xMDAwTUEsCit9OworCisvKiBDaGFyZ2VyIHJlZ2lzdGVycyAqLworI2RlZmluZSBNQVg4OTI1X0NIR19JUlExCQkoMHg3ZSkKKyNkZWZpbmUgTUFYODkyNV9DSEdfSVJRMgkJKDB4N2YpCisjZGVmaW5lIE1BWDg5MjVfQ0hHX0lSUTFfTUFTSwkJKDB4ODApCisjZGVmaW5lIE1BWDg5MjVfQ0hHX0lSUTJfTUFTSwkJKDB4ODEpCisjZGVmaW5lIE1BWDg5MjVfQ0hHX1NUQVRVUwkJKDB4ODIpCisKKy8qIEdQTSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTUFYODkyNV9TWVNFTlNFTAkJKDB4MDApCisjZGVmaW5lIE1BWDg5MjVfT05fT0ZGX0lSUTEJCSgweDAxKQorI2RlZmluZSBNQVg4OTI1X09OX09GRl9JUlExX01BU0sJKDB4MDIpCisjZGVmaW5lIE1BWDg5MjVfT05fT0ZGX1NUQVRVUwkJKDB4MDMpCisjZGVmaW5lIE1BWDg5MjVfT05fT0ZGX0lSUTIJCSgweDBkKQorI2RlZmluZSBNQVg4OTI1X09OX09GRl9JUlEyX01BU0sJKDB4MGUpCisjZGVmaW5lIE1BWDg5MjVfUkVTRVRfQ05GRwkJKDB4MGYpCisKKy8qIFRvdWNoIHJlZ2lzdGVycyAqLworI2RlZmluZSBNQVg4OTI1X1RTQ19JUlEJCQkoMHgwMCkKKyNkZWZpbmUgTUFYODkyNV9UU0NfSVJRX01BU0sJCSgweDAxKQorI2RlZmluZSBNQVg4OTI1X1RTQ19DTkZHMQkJKDB4MDIpCisjZGVmaW5lIE1BWDg5MjVfQURDX1NDSEVECQkoMHgxMCkKKyNkZWZpbmUgTUFYODkyNV9BRENfUkVTX0VORAkJKDB4NmYpCisKKyNkZWZpbmUgTUFYODkyNV9OUkVGX09LCQkJKDEgPDwgNCkKKworLyogUlRDIHJlZ2lzdGVycyAqLworI2RlZmluZSBNQVg4OTI1X0FMQVJNMF9DTlRMCQkoMHgxOCkKKyNkZWZpbmUgTUFYODkyNV9BTEFSTTFfQ05UTAkJKDB4MTkpCisjZGVmaW5lIE1BWDg5MjVfUlRDX0lSUQkJCSgweDFjKQorI2RlZmluZSBNQVg4OTI1X1JUQ19JUlFfTUFTSwkJKDB4MWQpCisjZGVmaW5lIE1BWDg5MjVfTVBMX0NOVEwJCSgweDFlKQorCisvKiBXTEVEIHJlZ2lzdGVycyAqLworI2RlZmluZSBNQVg4OTI1X1dMRURfTU9ERV9DTlRMCQkoMHg4NCkKKyNkZWZpbmUgTUFYODkyNV9XTEVEX0NOVEwJCSgweDg1KQorCisvKiBNQVg4OTI1IFJlZ2lzdGVycyAqLworI2RlZmluZSBNQVg4OTI1X1NEQ1RMMQkJCSgweDA0KQorI2RlZmluZSBNQVg4OTI1X1NEQ1RMMgkJCSgweDA3KQorI2RlZmluZSBNQVg4OTI1X1NEQ1RMMwkJCSgweDBBKQorI2RlZmluZSBNQVg4OTI1X1NEVjEJCQkoMHgwNikKKyNkZWZpbmUgTUFYODkyNV9TRFYyCQkJKDB4MDkpCisjZGVmaW5lIE1BWDg5MjVfU0RWMwkJCSgweDBDKQorI2RlZmluZSBNQVg4OTI1X0xET0NUTDEJCQkoMHgxOCkKKyNkZWZpbmUgTUFYODkyNV9MRE9DVEwyCQkJKDB4MUMpCisjZGVmaW5lIE1BWDg5MjVfTERPQ1RMMwkJCSgweDIwKQorI2RlZmluZSBNQVg4OTI1X0xET0NUTDQJCQkoMHgyNCkKKyNkZWZpbmUgTUFYODkyNV9MRE9DVEw1CQkJKDB4MjgpCisjZGVmaW5lIE1BWDg5MjVfTERPQ1RMNgkJCSgweDJDKQorI2RlZmluZSBNQVg4OTI1X0xET0NUTDcJCQkoMHgzMCkKKyNkZWZpbmUgTUFYODkyNV9MRE9DVEw4CQkJKDB4MzQpCisjZGVmaW5lIE1BWDg5MjVfTERPQ1RMOQkJCSgweDM4KQorI2RlZmluZSBNQVg4OTI1X0xET0NUTDEwCQkoMHgzQykKKyNkZWZpbmUgTUFYODkyNV9MRE9DVEwxMQkJKDB4NDApCisjZGVmaW5lIE1BWDg5MjVfTERPQ1RMMTIJCSgweDQ0KQorI2RlZmluZSBNQVg4OTI1X0xET0NUTDEzCQkoMHg0OCkKKyNkZWZpbmUgTUFYODkyNV9MRE9DVEwxNAkJKDB4NEMpCisjZGVmaW5lIE1BWDg5MjVfTERPQ1RMMTUJCSgweDUwKQorI2RlZmluZSBNQVg4OTI1X0xET0NUTDE2CQkoMHgxMCkKKyNkZWZpbmUgTUFYODkyNV9MRE9DVEwxNwkJKDB4MTQpCisjZGVmaW5lIE1BWDg5MjVfTERPQ1RMMTgJCSgweDcyKQorI2RlZmluZSBNQVg4OTI1X0xET0NUTDE5CQkoMHg1QykKKyNkZWZpbmUgTUFYODkyNV9MRE9DVEwyMAkJKDB4OUMpCisjZGVmaW5lIE1BWDg5MjVfTERPVk9VVDEJCSgweDFBKQorI2RlZmluZSBNQVg4OTI1X0xET1ZPVVQyCQkoMHgxRSkKKyNkZWZpbmUgTUFYODkyNV9MRE9WT1VUMwkJKDB4MjIpCisjZGVmaW5lIE1BWDg5MjVfTERPVk9VVDQJCSgweDI2KQorI2RlZmluZSBNQVg4OTI1X0xET1ZPVVQ1CQkoMHgyQSkKKyNkZWZpbmUgTUFYODkyNV9MRE9WT1VUNgkJKDB4MkUpCisjZGVmaW5lIE1BWDg5MjVfTERPVk9VVDcJCSgweDMyKQorI2RlZmluZSBNQVg4OTI1X0xET1ZPVVQ4CQkoMHgzNikKKyNkZWZpbmUgTUFYODkyNV9MRE9WT1VUOQkJKDB4M0EpCisjZGVmaW5lIE1BWDg5MjVfTERPVk9VVDEwCQkoMHgzRSkKKyNkZWZpbmUgTUFYODkyNV9MRE9WT1VUMTEJCSgweDQyKQorI2RlZmluZSBNQVg4OTI1X0xET1ZPVVQxMgkJKDB4NDYpCisjZGVmaW5lIE1BWDg5MjVfTERPVk9VVDEzCQkoMHg0QSkKKyNkZWZpbmUgTUFYODkyNV9MRE9WT1VUMTQJCSgweDRFKQorI2RlZmluZSBNQVg4OTI1X0xET1ZPVVQxNQkJKDB4NTIpCisjZGVmaW5lIE1BWDg5MjVfTERPVk9VVDE2CQkoMHgxMikKKyNkZWZpbmUgTUFYODkyNV9MRE9WT1VUMTcJCSgweDE2KQorI2RlZmluZSBNQVg4OTI1X0xET1ZPVVQxOAkJKDB4NzQpCisjZGVmaW5lIE1BWDg5MjVfTERPVk9VVDE5CQkoMHg1RSkKKyNkZWZpbmUgTUFYODkyNV9MRE9WT1VUMjAJCSgweDlFKQorCisvKiBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0hHX0lSUTFfTUFTSwkJCSgweDA3KQorI2RlZmluZSBDSEdfSVJRMl9NQVNLCQkJKDB4ZmYpCisjZGVmaW5lIE9OX09GRl9JUlExX01BU0sJCSgweGZmKQorI2RlZmluZSBPTl9PRkZfSVJRMl9NQVNLCQkoMHgwMykKKyNkZWZpbmUgVFNDX0lSUV9NQVNLCQkJKDB4MDMpCisjZGVmaW5lIFJUQ19JUlFfTUFTSwkJCSgweDBjKQorCisjZGVmaW5lIE1BWDg5MjVfTUFYX1JFR1VMQVRPUgkJKDIzKQorCisjZGVmaW5lIE1BWDg5MjVfTkFNRV9TSVpFCQkoMzIpCisKKy8qIElSUSBkZWZpbml0aW9ucyAqLworZW51bSB7CisJTUFYODkyNV9JUlFfVkNIR19EQ19PVlAsCisJTUFYODkyNV9JUlFfVkNIR19EQ19GLAorCU1BWDg5MjVfSVJRX1ZDSEdfRENfUiwKKwlNQVg4OTI1X0lSUV9WQ0hHX1VTQl9PVlAsCisJTUFYODkyNV9JUlFfVkNIR19VU0JfRiwKKwlNQVg4OTI1X0lSUV9WQ0hHX1VTQl9SLAorCU1BWDg5MjVfSVJRX1ZDSEdfVEhNX09LX1IsCisJTUFYODkyNV9JUlFfVkNIR19USE1fT0tfRiwKKwlNQVg4OTI1X0lSUV9WQ0hHX1NZU0xPV19GLAorCU1BWDg5MjVfSVJRX1ZDSEdfU1lTTE9XX1IsCisJTUFYODkyNV9JUlFfVkNIR19SU1QsCisJTUFYODkyNV9JUlFfVkNIR19ET05FLAorCU1BWDg5MjVfSVJRX1ZDSEdfVE9QT0ZGLAorCU1BWDg5MjVfSVJRX1ZDSEdfVE1SX0ZBVUxULAorCU1BWDg5MjVfSVJRX0dQTV9SU1RJTiwKKwlNQVg4OTI1X0lSUV9HUE1fTVBMLAorCU1BWDg5MjVfSVJRX0dQTV9TV18zU0VDLAorCU1BWDg5MjVfSVJRX0dQTV9FWFRPTl9GLAorCU1BWDg5MjVfSVJRX0dQTV9FWFRPTl9SLAorCU1BWDg5MjVfSVJRX0dQTV9TV18xU0VDLAorCU1BWDg5MjVfSVJRX0dQTV9TV19GLAorCU1BWDg5MjVfSVJRX0dQTV9TV19SLAorCU1BWDg5MjVfSVJRX0dQTV9TWVNDS0VOX0YsCisJTUFYODkyNV9JUlFfR1BNX1NZU0NLRU5fUiwKKwlNQVg4OTI1X0lSUV9SVENfQUxBUk0xLAorCU1BWDg5MjVfSVJRX1JUQ19BTEFSTTAsCisJTUFYODkyNV9JUlFfVFNDX1NUSUNLLAorCU1BWDg5MjVfSVJRX1RTQ19OU1RJQ0ssCisJTUFYODkyNV9OUl9JUlFTLAorfTsKKworc3RydWN0IG1heDg5MjVfY2hpcCB7CisJc3RydWN0IGRldmljZQkJKmRldjsKKwlzdHJ1Y3QgaTJjX2NsaWVudAkqaTJjOworCXN0cnVjdCBpMmNfY2xpZW50CSphZGM7CisJc3RydWN0IGkyY19jbGllbnQJKnJ0YzsKKwlzdHJ1Y3QgbXV0ZXgJCWlvX2xvY2s7CisJc3RydWN0IG11dGV4CQlpcnFfbG9jazsKKworCWludAkJCWlycV9iYXNlOworCWludAkJCWNvcmVfaXJxOworCWludAkJCXRzY19pcnE7Cit9OworCitzdHJ1Y3QgbWF4ODkyNV9iYWNrbGlnaHRfcGRhdGEgeworCWludAlseHdfc2NsOwkvKiAwLzEgLS0gMC44T2htLzAuNE9obSAqLworCWludAlseHdfZnJlcTsJLyogNzAwS0h6IH4gMTQwMEtIeiAqLworCWludAlkdWFsX3N0cmluZzsJLyogMC8xIC0tIHNpbmdsZS9kdWFsIHN0cmluZyAqLworfTsKKworc3RydWN0IG1heDg5MjVfdG91Y2hfcGRhdGEgeworCXVuc2lnbmVkIGludAkJZmxhZ3M7Cit9OworCitzdHJ1Y3QgbWF4ODkyNV9wb3dlcl9wZGF0YSB7CisJaW50CQkoKnNldF9jaGFyZ2VyKShpbnQpOworCXVuc2lnbmVkCWJhdHRfZGV0ZWN0OjE7CisJdW5zaWduZWQJdG9wb2ZmX3RocmVzaG9sZDoyOworCXVuc2lnbmVkCWZhc3RfY2hhcmdlOjM7CS8qIGNoYXJnZSBjdXJyZW50ICovCit9OworCisvKgorICogaXJxX2Jhc2U6IHN0b3JlcyBJUlEgYmFzZSBudW1iZXIgb2YgTUFYODkyNSBpbiBwbGF0Zm9ybQorICogdHNjX2lycTogc3RvcmVzIElSUSBudW1iZXIgb2YgTUFYODkyNSBUU0MKKyAqLworc3RydWN0IG1heDg5MjVfcGxhdGZvcm1fZGF0YSB7CisJc3RydWN0IG1heDg5MjVfYmFja2xpZ2h0X3BkYXRhCSpiYWNrbGlnaHQ7CisJc3RydWN0IG1heDg5MjVfdG91Y2hfcGRhdGEJKnRvdWNoOworCXN0cnVjdCBtYXg4OTI1X3Bvd2VyX3BkYXRhCSpwb3dlcjsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YQkqcmVndWxhdG9yW01BWDg5MjVfTUFYX1JFR1VMQVRPUl07CisKKwlpbnQJCWlycV9iYXNlOworCWludAkJdHNjX2lycTsKK307CisKK2V4dGVybiBpbnQgbWF4ODkyNV9yZWdfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqLCBpbnQpOworZXh0ZXJuIGludCBtYXg4OTI1X3JlZ193cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqLCBpbnQsIHVuc2lnbmVkIGNoYXIpOworZXh0ZXJuIGludCBtYXg4OTI1X2J1bGtfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqLCBpbnQsIGludCwgdW5zaWduZWQgY2hhciAqKTsKK2V4dGVybiBpbnQgbWF4ODkyNV9idWxrX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICosIGludCwgaW50LCB1bnNpZ25lZCBjaGFyICopOworZXh0ZXJuIGludCBtYXg4OTI1X3NldF9iaXRzKHN0cnVjdCBpMmNfY2xpZW50ICosIGludCwgdW5zaWduZWQgY2hhciwKKwkJCXVuc2lnbmVkIGNoYXIpOworCitleHRlcm4gaW50IG1heDg5MjVfZGV2aWNlX2luaXQoc3RydWN0IG1heDg5MjVfY2hpcCAqLAorCQkJCXN0cnVjdCBtYXg4OTI1X3BsYXRmb3JtX2RhdGEgKik7CitleHRlcm4gdm9pZCBtYXg4OTI1X2RldmljZV9leGl0KHN0cnVjdCBtYXg4OTI1X2NoaXAgKik7CisjZW5kaWYgLyogX19MSU5VWF9NRkRfTUFYODkyNV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL21jMTM3ODMuaCBiL2luY2x1ZGUvbGludXgvbWZkL21jMTM3ODMuaAppbmRleCA5NGNiNTFhLi44ODk1ZDlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9tYzEzNzgzLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvbWMxMzc4My5oCkBAIC0yNiwxMCArMjYsMzAgQEAKIGludCBtYzEzNzgzX2lycV9yZXF1ZXN0X25vdW5tYXNrKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxLAogCQlpcnFfaGFuZGxlcl90IGhhbmRsZXIsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRldik7CiBpbnQgbWMxMzc4M19pcnFfZnJlZShzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgaW50IGlycSwgdm9pZCAqZGV2KTsKLWludCBtYzEzNzgzX2Fja2lycShzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgaW50IGlycSk7CiAKLWludCBtYzEzNzgzX21hc2soc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMsIGludCBpcnEpOwotaW50IG1jMTM3ODNfdW5tYXNrKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxKTsKK2ludCBtYzEzNzgzX2lycV9tYXNrKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxKTsKK2ludCBtYzEzNzgzX2lycV91bm1hc2soc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMsIGludCBpcnEpOworaW50IG1jMTM3ODNfaXJxX3N0YXR1cyhzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgaW50IGlycSwKKwkJaW50ICplbmFibGVkLCBpbnQgKnBlbmRpbmcpOworaW50IG1jMTM3ODNfaXJxX2FjayhzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgaW50IGlycSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IG1jMTM3ODNfbWFzayhzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgaW50IGlycSkgX19kZXByZWNhdGVkOworc3RhdGljIGlubGluZSBpbnQgbWMxMzc4M19tYXNrKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxKQoreworCXJldHVybiBtYzEzNzgzX2lycV9tYXNrKG1jMTM3ODMsIGlycSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1jMTM3ODNfdW5tYXNrKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxKSBfX2RlcHJlY2F0ZWQ7CitzdGF0aWMgaW5saW5lIGludCBtYzEzNzgzX3VubWFzayhzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgaW50IGlycSkKK3sKKwlyZXR1cm4gbWMxMzc4M19pcnFfdW5tYXNrKG1jMTM3ODMsIGlycSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1jMTM3ODNfYWNraXJxKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxKSBfX2RlcHJlY2F0ZWQ7CitzdGF0aWMgaW5saW5lIGludCBtYzEzNzgzX2Fja2lycShzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgaW50IGlycSkKK3sKKwlyZXR1cm4gbWMxMzc4M19pcnFfYWNrKG1jMTM3ODMsIGlycSk7Cit9CiAKICNkZWZpbmUgTUMxMzc4M19BREMwCQk0MwogI2RlZmluZSBNQzEzNzgzX0FEQzBfQURSRUZFTgkJKDEgPDwgMTApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC90bWlvLmggYi9pbmNsdWRlL2xpbnV4L21mZC90bWlvLmgKaW5kZXggOWNiMTgzNC4uYzNmN2RmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvdG1pby5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3RtaW8uaApAQCAtNTksNyArNTksOCBAQAogICogZGF0YSBmb3IgdGhlIE1NQyBjb250cm9sbGVyCiAgKi8KIHN0cnVjdCB0bWlvX21tY19kYXRhIHsKLQljb25zdCB1bnNpZ25lZCBpbnQJCWhjbGs7CisJdW5zaWduZWQgaW50CQkJaGNsazsKKwl1bnNpZ25lZCBsb25nCQkJY2FwYWJpbGl0aWVzOwogCXZvaWQgKCpzZXRfcHdyKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpob3N0LCBpbnQgc3RhdGUpOwogCXZvaWQgKCpzZXRfY2xrX2Rpdikoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaG9zdCwgaW50IHN0YXRlKTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC91Y2IxeDAwLmggYi9pbmNsdWRlL2xpbnV4L21mZC91Y2IxeDAwLmgKaW5kZXggYWE5YzM3OC4uNDMyMWYwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvdWNiMXgwMC5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3VjYjF4MDAuaApAQCAtMTIsNiArMTIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbWZkL21jcC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KIAogI2RlZmluZSBVQ0JfSU9fREFUQQkweDAwCiAjZGVmaW5lIFVDQl9JT19ESVIJMHgwMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L2NvcmUuaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODMxeC9jb3JlLmgKaW5kZXggNTE4NGI3OS4uNTkxNWY2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzMXgvY29yZS5oCkBAIC0xNSw2ICsxNSw3IEBACiAjaWZuZGVmIF9fTUZEX1dNODMxWF9DT1JFX0hfXwogI2RlZmluZSBfX01GRF9XTTgzMVhfQ09SRV9IX18KIAorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogLyoKQEAgLTI1NCw5ICsyNTUsMTQgQEAKIAlpbnQgaXJxX21hc2tzX2N1cltXTTgzMVhfTlVNX0lSUV9SRUdTXTsgICAvKiBDdXJyZW50bHkgYWN0aXZlIHZhbHVlICovCiAJaW50IGlycV9tYXNrc19jYWNoZVtXTTgzMVhfTlVNX0lSUV9SRUdTXTsgLyogQ2FjaGVkIGhhcmR3YXJlIHZhbHVlICovCiAKKwkvKiBDaGlwIHJldmlzaW9uIGJhc2VkIGZsYWdzICovCisJdW5zaWduZWQgaGFzX2dwaW9fZW5hOjE7ICAvKiBIYXMgR1BJTyBlbmFibGUgYml0ICovCisJdW5zaWduZWQgaGFzX2NzX3N0czoxOyAgICAvKiBIYXMgY3VycmVudCBzaW5rIHN0YXR1cyBiaXQgKi8KKwogCWludCBudW1fZ3BpbzsKIAogCXN0cnVjdCBtdXRleCBhdXhhZGNfbG9jazsKKwlzdHJ1Y3QgY29tcGxldGlvbiBhdXhhZGNfZG9uZTsKIAogCS8qIFRoZSBXTTgzMXggaGFzIGEgc2VjdXJpdHkga2V5IGJsb2NraW5nIGFjY2VzcyB0byBjZXJ0YWluCiAJICogcmVnaXN0ZXJzLiAgVGhlIG11dGV4IGlzIHRha2VuIGJ5IHRoZSBhY2Nlc3NvcnMgZm9yIGxvY2tpbmcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODMxeC9ncGlvLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzMXgvZ3Bpby5oCmluZGV4IDI4MzU2MTQuLjliMTYzYzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3dtODMxeC9ncGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L2dwaW8uaApAQCAtNDEsNiArNDEsMTAgQEAKICNkZWZpbmUgV004MzFYX0dQTl9PRF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogR1BOX09EICovCiAjZGVmaW5lIFdNODMxWF9HUE5fT0RfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIEdQTl9PRCAqLwogI2RlZmluZSBXTTgzMVhfR1BOX09EX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUE5fT0QgKi8KKyNkZWZpbmUgV004MzFYX0dQTl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogR1BOX0VOQSAqLworI2RlZmluZSBXTTgzMVhfR1BOX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBHUE5fRU5BICovCisjZGVmaW5lIFdNODMxWF9HUE5fRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEdQTl9FTkEgKi8KKyNkZWZpbmUgV004MzFYX0dQTl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BOX0VOQSAqLwogI2RlZmluZSBXTTgzMVhfR1BOX1RSSSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBHUE5fVFJJICovCiAjZGVmaW5lIFdNODMxWF9HUE5fVFJJX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQTl9UUkkgKi8KICNkZWZpbmUgV004MzFYX0dQTl9UUklfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogR1BOX1RSSSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2NvcmUuaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9jb3JlLmgKaW5kZXggNDM4Njg4OS4uOThmY2M5NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvY29yZS5oCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL2F1ZGlvLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC9ncGlvLmg+CkBAIC01NzksNiArNTgwLDggQEAKIAogI2RlZmluZSBXTTgzNTBfTlVNX0lSUQkJCQk2MwogCisjZGVmaW5lIFdNODM1MF9OVU1fSVJRX1JFR1MgNworCiBzdHJ1Y3Qgd204MzUwX3JlZ19hY2Nlc3MgewogCXUxNiByZWFkYWJsZTsJCS8qIE1hc2sgb2YgcmVhZGFibGUgYml0cyAqLwogCXUxNiB3cml0YWJsZTsJCS8qIE1hc2sgb2Ygd3JpdGFibGUgYml0cyAqLwpAQCAtNjAwLDExICs2MDMsNiBAQAogCiBzdHJ1Y3Qgd204MzUwOwogCi1zdHJ1Y3Qgd204MzUwX2lycSB7Ci0JaXJxX2hhbmRsZXJfdCBoYW5kbGVyOwotCXZvaWQgKmRhdGE7Ci19OwotCiBzdHJ1Y3Qgd204MzUwX2h3bW9uIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCXN0cnVjdCBkZXZpY2UgKmNsYXNzZGV2OwpAQCAtNjI0LDExICs2MjIsMTMgQEAKIAl1MTYgKnJlZ19jYWNoZTsKIAogCXN0cnVjdCBtdXRleCBhdXhhZGNfbXV0ZXg7CisJc3RydWN0IGNvbXBsZXRpb24gYXV4YWRjX2RvbmU7CiAKIAkvKiBJbnRlcnJ1cHQgaGFuZGxpbmcgKi8KLQlzdHJ1Y3QgbXV0ZXggaXJxX211dGV4OyAvKiBJUlEgdGFibGUgbXV0ZXggKi8KLQlzdHJ1Y3Qgd204MzUwX2lycSBpcnFbV004MzUwX05VTV9JUlFdOworCXN0cnVjdCBtdXRleCBpcnFfbG9jazsKIAlpbnQgY2hpcF9pcnE7CisJaW50IGlycV9iYXNlOworCXUxNiBpcnFfbWFza3NbV004MzUwX05VTV9JUlFfUkVHU107CiAKIAkvKiBDbGllbnQgZGV2aWNlcyAqLwogCXN0cnVjdCB3bTgzNTBfY29kZWMgY29kZWM7CkBAIC02NDcsMTEgKzY0NywxMyBAQAogICogICAgICAgIHVzZWQgYnkgdGhlIHBsYXRmb3JtIHRvIGNvbmZpZ3VyZSBHUElPIGZ1bmN0aW9ucyBhbmQgc2ltaWxhci4KICAqIEBpcnFfaGlnaDogU2V0IGlmIFdNODM1MCBJUlEgaXMgYWN0aXZlIGhpZ2guCiAgKiBAaXJxX2Jhc2U6IEJhc2UgSVJRIGZvciBnZW5pcnEgKG5vdCBjdXJyZW50bHkgdXNlZCkuCisgKiBAZ3Bpb19iYXNlOiBCYXNlIGZvciBncGlvbGliLgogICovCiBzdHJ1Y3Qgd204MzUwX3BsYXRmb3JtX2RhdGEgewogCWludCAoKmluaXQpKHN0cnVjdCB3bTgzNTAgKndtODM1MCk7CiAJaW50IGlycV9oaWdoOwogCWludCBpcnFfYmFzZTsKKwlpbnQgZ3Bpb19iYXNlOwogfTsKIAogCkBAIC02NzcsMTIgKzY3OSwzMyBAQAogLyoKICAqIFdNODM1MCBpbnRlcm5hbCBpbnRlcnJ1cHRzCiAgKi8KLWludCB3bTgzNTBfcmVnaXN0ZXJfaXJxKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSwKLQkJCWlycV9oYW5kbGVyX3QgaGFuZGxlciwgdW5zaWduZWQgbG9uZyBmbGFncywKLQkJCWNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRhdGEpOwotaW50IHdtODM1MF9mcmVlX2lycShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpcnEpOwotaW50IHdtODM1MF9tYXNrX2lycShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpcnEpOwotaW50IHdtODM1MF91bm1hc2tfaXJxKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSk7CitzdGF0aWMgaW5saW5lIGludCB3bTgzNTBfcmVnaXN0ZXJfaXJxKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSwKKwkJCQkgICAgICBpcnFfaGFuZGxlcl90IGhhbmRsZXIsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpkYXRhKQoreworCWlmICghd204MzUwLT5pcnFfYmFzZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gcmVxdWVzdF90aHJlYWRlZF9pcnEoaXJxICsgd204MzUwLT5pcnFfYmFzZSwgTlVMTCwKKwkJCQkgICAgaGFuZGxlciwgZmxhZ3MsIG5hbWUsIGRhdGEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd204MzUwX2ZyZWVfaXJxKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlmcmVlX2lycShpcnEgKyB3bTgzNTAtPmlycV9iYXNlLCBkYXRhKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdtODM1MF9tYXNrX2lycShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpcnEpCit7CisJZGlzYWJsZV9pcnEoaXJxICsgd204MzUwLT5pcnFfYmFzZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3bTgzNTBfdW5tYXNrX2lycShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpcnEpCit7CisJZW5hYmxlX2lycShpcnEgKyB3bTgzNTAtPmlycV9iYXNlKTsKK30KKwogaW50IHdtODM1MF9pcnFfaW5pdChzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpcnEsCiAJCSAgICBzdHJ1Y3Qgd204MzUwX3BsYXRmb3JtX2RhdGEgKnBkYXRhKTsKIGludCB3bTgzNTBfaXJxX2V4aXQoc3RydWN0IHdtODM1MCAqd204MzUwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9ncGlvLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvZ3Bpby5oCmluZGV4IDcxYWYzZDYuLmQ2NTdiY2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9ncGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2dwaW8uaApAQCAtMjksNiArMjksNyBAQAogI2RlZmluZSBXTTgzNTBfR1BJT19GVU5DVElPTl9TRUxFQ1RfMiAgICAgICAgICAgMHg4RAogI2RlZmluZSBXTTgzNTBfR1BJT19GVU5DVElPTl9TRUxFQ1RfMyAgICAgICAgICAgMHg4RQogI2RlZmluZSBXTTgzNTBfR1BJT19GVU5DVElPTl9TRUxFQ1RfNCAgICAgICAgICAgMHg4RgorI2RlZmluZSBXTTgzNTBfR1BJT19MRVZFTAkJCTB4RTYKIAogLyoKICAqIEdQSU8gRnVuY3Rpb25zCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvcnRjLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvcnRjLmgKaW5kZXggMjRhZGQyYi4uZWJkNzJmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL3J0Yy5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9ydGMuaApAQCAtMjYzLDYgKzI2Myw3IEBACiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOwogCWludCBhbGFybV9lbmFibGVkOyAgICAgIC8qIHVzZWQgb3ZlciBzdXNwZW5kL3Jlc3VtZSAqLworCWludCB1cGRhdGVfZW5hYmxlZDsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204OTk0L2NvcmUuaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODk5NC9jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA2ZmYyOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODk5NC9jb3JlLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvbWZkL3dtODk5NC9jb3JlLmggLS0gQ29yZSBpbnRlcmZhY2UgZm9yIFdNODk5NAorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX01GRF9XTTg5OTRfQ09SRV9IX18KKyNkZWZpbmUgX19NRkRfV004OTk0X0NPUkVfSF9fCisKK3N0cnVjdCByZWd1bGF0b3JfZGV2Oworc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGE7CisKKyNkZWZpbmUgV004OTk0X05VTV9HUElPX1JFR1MgMTEKKyNkZWZpbmUgV004OTk0X05VTV9MRE9fUkVHUyAyCisKK3N0cnVjdCB3bTg5OTQgeworCXN0cnVjdCBtdXRleCBpb19sb2NrOworCisJc3RydWN0IGRldmljZSAqZGV2OworCWludCAoKnJlYWRfZGV2KShzdHJ1Y3Qgd204OTk0ICp3bTg5OTQsIHVuc2lnbmVkIHNob3J0IHJlZywKKwkJCWludCBieXRlcywgdm9pZCAqZGVzdCk7CisJaW50ICgqd3JpdGVfZGV2KShzdHJ1Y3Qgd204OTk0ICp3bTg5OTQsIHVuc2lnbmVkIHNob3J0IHJlZywKKwkJCSBpbnQgYnl0ZXMsIHZvaWQgKnNyYyk7CisKKwl2b2lkICpjb250cm9sX2RhdGE7CisKKwlpbnQgZ3Bpb19iYXNlOworCisJLyogVXNlZCBvdmVyIHN1c3BlbmQvcmVzdW1lICovCisJdTE2IGxkb19yZWdzW1dNODk5NF9OVU1fTERPX1JFR1NdOworCXUxNiBncGlvX3JlZ3NbV004OTk0X05VTV9HUElPX1JFR1NdOworCisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRidmRkOworCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhICpzdXBwbGllczsKK307CisKKy8qIERldmljZSBJL08gQVBJICovCitpbnQgd204OTk0X3JlZ19yZWFkKHN0cnVjdCB3bTg5OTQgKndtODk5NCwgdW5zaWduZWQgc2hvcnQgcmVnKTsKK2ludCB3bTg5OTRfcmVnX3dyaXRlKHN0cnVjdCB3bTg5OTQgKndtODk5NCwgdW5zaWduZWQgc2hvcnQgcmVnLAorCQkgdW5zaWduZWQgc2hvcnQgdmFsKTsKK2ludCB3bTg5OTRfc2V0X2JpdHMoc3RydWN0IHdtODk5NCAqd204OTk0LCB1bnNpZ25lZCBzaG9ydCByZWcsCisJCSAgICB1bnNpZ25lZCBzaG9ydCBtYXNrLCB1bnNpZ25lZCBzaG9ydCB2YWwpOworaW50IHdtODk5NF9idWxrX3JlYWQoc3RydWN0IHdtODk5NCAqd204OTk0LCB1bnNpZ25lZCBzaG9ydCByZWcsCisJCSAgICAgaW50IGNvdW50LCB1MTYgKmJ1Zik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204OTk0L2dwaW8uaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODk5NC9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRkNGMyMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODk5NC9ncGlvLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvbWZkL3dtODk5NC9ncGlvLmggLSBHUElPIGNvbmZpZ3VyYXRpb24gZm9yIFdNODk5NAorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX01GRF9XTTg5OTRfR1BJT19IX18KKyNkZWZpbmUgX19NRkRfV004OTk0X0dQSU9fSF9fCisKKyNkZWZpbmUgV004OTk0X0dQSU9fTUFYIDExCisKKyNkZWZpbmUgV004OTk0X0dQX0ZOX1BJTl9TUEVDSUZJQyAgICAwCisjZGVmaW5lIFdNODk5NF9HUF9GTl9HUElPICAgICAgICAgICAgMQorI2RlZmluZSBXTTg5OTRfR1BfRk5fU0RPVVQgICAgICAgICAgIDIKKyNkZWZpbmUgV004OTk0X0dQX0ZOX0lSUSAgICAgICAgICAgICAzCisjZGVmaW5lIFdNODk5NF9HUF9GTl9URU1QRVJBVFVSRSAgICAgNAorI2RlZmluZSBXTTg5OTRfR1BfRk5fTUlDQklBUzFfREVUICAgIDUKKyNkZWZpbmUgV004OTk0X0dQX0ZOX01JQ0JJQVMxX1NIT1JUICA2CisjZGVmaW5lIFdNODk5NF9HUF9GTl9NSUNCSUFTMl9ERVQgICAgNworI2RlZmluZSBXTTg5OTRfR1BfRk5fTUlDQklBUzJfU0hPUlQgIDgKKyNkZWZpbmUgV004OTk0X0dQX0ZOX0ZMTDFfTE9DSyAgICAgICA5CisjZGVmaW5lIFdNODk5NF9HUF9GTl9GTEwyX0xPQ0sgICAgICAxMAorI2RlZmluZSBXTTg5OTRfR1BfRk5fU1JDMV9MT0NLICAgICAgMTEKKyNkZWZpbmUgV004OTk0X0dQX0ZOX1NSQzJfTE9DSyAgICAgIDEyCisjZGVmaW5lIFdNODk5NF9HUF9GTl9EUkMxX0FDVCAgICAgICAxMworI2RlZmluZSBXTTg5OTRfR1BfRk5fRFJDMl9BQ1QgICAgICAgMTQKKyNkZWZpbmUgV004OTk0X0dQX0ZOX0RSQzNfQUNUICAgICAgIDE1CisjZGVmaW5lIFdNODk5NF9HUF9GTl9XU0VRX1NUQVRVUyAgICAxNgorI2RlZmluZSBXTTg5OTRfR1BfRk5fRklGT19FUlJPUiAgICAgMTcKKyNkZWZpbmUgV004OTk0X0dQX0ZOX09QQ0xLICAgICAgICAgIDE4CisKKyNkZWZpbmUgV004OTk0X0dQTl9ESVIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogR1BOX0RJUiAqLworI2RlZmluZSBXTTg5OTRfR1BOX0RJUl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBHUE5fRElSICovCisjZGVmaW5lIFdNODk5NF9HUE5fRElSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIEdQTl9ESVIgKi8KKyNkZWZpbmUgV004OTk0X0dQTl9ESVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BOX0RJUiAqLworI2RlZmluZSBXTTg5OTRfR1BOX1BVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBHUE5fUFUgKi8KKyNkZWZpbmUgV004OTk0X0dQTl9QVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogR1BOX1BVICovCisjZGVmaW5lIFdNODk5NF9HUE5fUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIEdQTl9QVSAqLworI2RlZmluZSBXTTg5OTRfR1BOX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUE5fUFUgKi8KKyNkZWZpbmUgV004OTk0X0dQTl9QRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogR1BOX1BEICovCisjZGVmaW5lIFdNODk5NF9HUE5fUERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEdQTl9QRCAqLworI2RlZmluZSBXTTg5OTRfR1BOX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEzICAvKiBHUE5fUEQgKi8KKyNkZWZpbmUgV004OTk0X0dQTl9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BOX1BEICovCisjZGVmaW5lIFdNODk5NF9HUE5fUE9MICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEdQTl9QT0wgKi8KKyNkZWZpbmUgV004OTk0X0dQTl9QT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogR1BOX1BPTCAqLworI2RlZmluZSBXTTg5OTRfR1BOX1BPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEwICAvKiBHUE5fUE9MICovCisjZGVmaW5lIFdNODk5NF9HUE5fUE9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQTl9QT0wgKi8KKyNkZWZpbmUgV004OTk0X0dQTl9PUF9DRkcgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogR1BOX09QX0NGRyAqLworI2RlZmluZSBXTTg5OTRfR1BOX09QX0NGR19NQVNLICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBHUE5fT1BfQ0ZHICovCisjZGVmaW5lIFdNODk5NF9HUE5fT1BfQ0ZHX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIEdQTl9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk0X0dQTl9PUF9DRkdfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BOX09QX0NGRyAqLworI2RlZmluZSBXTTg5OTRfR1BOX0RCICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBHUE5fREIgKi8KKyNkZWZpbmUgV004OTk0X0dQTl9EQl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogR1BOX0RCICovCisjZGVmaW5lIFdNODk5NF9HUE5fREJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEdQTl9EQiAqLworI2RlZmluZSBXTTg5OTRfR1BOX0RCX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUE5fREIgKi8KKyNkZWZpbmUgV004OTk0X0dQTl9MVkwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1BOX0xWTCAqLworI2RlZmluZSBXTTg5OTRfR1BOX0xWTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUE5fTFZMICovCisjZGVmaW5lIFdNODk5NF9HUE5fTFZMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEdQTl9MVkwgKi8KKyNkZWZpbmUgV004OTk0X0dQTl9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BOX0xWTCAqLworI2RlZmluZSBXTTg5OTRfR1BOX0ZOX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBHUE5fRk4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTRfR1BOX0ZOX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBHUE5fRk4gLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTRfR1BOX0ZOX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBHUE5fRk4gLSBbNDowXSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODk5NC9wZGF0YS5oIGIvaW5jbHVkZS9saW51eC9tZmQvd204OTk0L3BkYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBkNmE4NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODk5NC9wZGF0YS5oCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBpbmNsdWRlL2xpbnV4L21mZC93bTg5OTQvcGRhdGEuaCAtLSBQbGF0Zm9ybSBkYXRhIGZvciBXTTg5OTQKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19NRkRfV004OTk0X1BEQVRBX0hfXworI2RlZmluZSBfX01GRF9XTTg5OTRfUERBVEFfSF9fCisKKyNkZWZpbmUgV004OTk0X05VTV9MRE8gICAyCisjZGVmaW5lIFdNODk5NF9OVU1fR1BJTyAxMQorCitzdHJ1Y3Qgd204OTk0X2xkb19wZGF0YSB7CisJLyoqIEdQSU9zIHRvIGVuYWJsZSByZWd1bGF0b3IsIDAgb3IgbGVzcyBpZiBub3QgYXZhaWxhYmxlICovCisJaW50IGVuYWJsZTsKKworCWNvbnN0IGNoYXIgKnN1cHBseTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhOworfTsKKworI2RlZmluZSBXTTg5OTRfQ09ORklHVVJFX0dQSU8gMHg4MDAwCisKKyNkZWZpbmUgV004OTk0X0RSQ19SRUdTIDUKKyNkZWZpbmUgV004OTk0X0VRX1JFR1MgIDE5CisKKy8qKgorICogRFJDIGNvbmZpZ3VyYXRpb25zIGFyZSBzcGVjaWZpZWQgd2l0aCBhIGxhYmVsIGFuZCBhIHNldCBvZiByZWdpc3RlcgorICogdmFsdWVzIHRvIHdyaXRlICh0aGUgZW5hYmxlIGJpdHMgd2lsbCBiZSBpZ25vcmVkKS4gIEF0IHJ1bnRpbWUgYW4KKyAqIGVudW1lcmF0ZWQgY29udHJvbCB3aWxsIGJlIHByZXNlbnRlZCBmb3IgZWFjaCBEUkMgYmxvY2sgYWxsb3dpbmcKKyAqIHRoZSB1c2VyIHRvIGNob29zZSB0aGUgY29uZmlncmF0aW9uIHRvIHVzZS4KKyAqCisgKiBDb25maWd1cmF0aW9ucyBtYXkgYmUgZ2VuZXJhdGVkIGJ5IGhhbmQgb3IgYnkgdXNpbmcgdGhlIERSQyBjb250cm9sCisgKiBwYW5lbCBwcm92aWRlZCBieSB0aGUgV0lTQ0UgLSBzZWUgIGh0dHA6Ly93d3cud29sZnNvbm1pY3JvLmNvbS93aXNjZS8KKyAqIGZvciBkZXRhaWxzLgorICovCitzdHJ1Y3Qgd204OTk0X2RyY19jZmcgeworICAgICAgICBjb25zdCBjaGFyICpuYW1lOworICAgICAgICB1MTYgcmVnc1tXTTg5OTRfRFJDX1JFR1NdOworfTsKKworLyoqCisgKiBSZVR1bmUgTW9iaWxlIGNvbmZpZ3VyYXRpb25zIGFyZSBzcGVjaWZpZWQgd2l0aCBhIGxhYmVsLCBzYW1wbGUKKyAqIHJhdGUgYW5kIHNldCBvZiB2YWx1ZXMgdG8gd3JpdGUgKHRoZSBlbmFibGUgYml0cyB3aWxsIGJlIGlnbm9yZWQpLgorICoKKyAqIENvbmZpZ3VyYXRpb25zIGFyZSBleHBlY3RlZCB0byBiZSBnZW5lcmF0ZWQgdXNpbmcgdGhlIFJlVHVuZSBNb2JpbGUKKyAqIGNvbnRyb2wgcGFuZWwgaW4gV0lTQ0UgLSBzZWUgaHR0cDovL3d3dy53b2xmc29ubWljcm8uY29tL3dpc2NlLworICovCitzdHJ1Y3Qgd204OTk0X3JldHVuZV9tb2JpbGVfY2ZnIHsKKyAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICAgICAgdW5zaWduZWQgaW50IHJhdGU7CisgICAgICAgIHUxNiByZWdzW1dNODk5NF9FUV9SRUdTXTsKK307CisKK3N0cnVjdCB3bTg5OTRfcGRhdGEgeworCWludCBncGlvX2Jhc2U7CisKKwkvKioKKwkgKiBEZWZhdWx0IHZhbHVlcyBmb3IgR1BJT3MgaWYgbm9uLXplcm8sIFdNODk5NF9DT05GSUdVUkVfR1BJTworCSAqIGNhbiBiZSB1c2VkIGZvciBhbGwgemVybyB2YWx1ZXMuCisJICovCisJaW50IGdwaW9fZGVmYXVsdHNbV004OTk0X05VTV9HUElPXTsKKworCXN0cnVjdCB3bTg5OTRfbGRvX3BkYXRhIGxkb1tXTTg5OTRfTlVNX0xET107CisKKworICAgICAgICBpbnQgbnVtX2RyY19jZmdzOworICAgICAgICBzdHJ1Y3Qgd204OTk0X2RyY19jZmcgKmRyY19jZmdzOworCisgICAgICAgIGludCBudW1fcmV0dW5lX21vYmlsZV9jZmdzOworICAgICAgICBzdHJ1Y3Qgd204OTk0X3JldHVuZV9tb2JpbGVfY2ZnICpyZXR1bmVfbW9iaWxlX2NmZ3M7CisKKyAgICAgICAgLyogTElORU9VVCBjYW4gYmUgZGlmZmVyZW50aWFsIG9yIHNpbmdsZSBlbmRlZCAqLworICAgICAgICB1bnNpZ25lZCBpbnQgbGluZW91dDFfZGlmZjoxOworICAgICAgICB1bnNpZ25lZCBpbnQgbGluZW91dDJfZGlmZjoxOworCisgICAgICAgIC8qIENvbW1vbiBtb2RlIGZlZWRiYWNrICovCisgICAgICAgIHVuc2lnbmVkIGludCBsaW5lb3V0MWZiOjE7CisgICAgICAgIHVuc2lnbmVkIGludCBsaW5lb3V0MmZiOjE7CisKKyAgICAgICAgLyogTWljcm9waG9uZSBiaWFzZXM6IDA9MC45KkFWREQxIDE9MC42NSpBVlZEMSAqLworICAgICAgICB1bnNpZ25lZCBpbnQgbWljYmlhczFfbHZsOjE7CisgICAgICAgIHVuc2lnbmVkIGludCBtaWNiaWFzMl9sdmw6MTsKKworICAgICAgICAvKiBKYWNrIGRldGVjdCB0aHJlYXNob2xkIGxldmVscywgc2VlIGRhdGFzaGVldCBmb3IgdmFsdWVzICovCisgICAgICAgIHVuc2lnbmVkIGludCBqZF9zY3RocjoyOworICAgICAgICB1bnNpZ25lZCBpbnQgamRfdGhyOjI7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODk5NC9yZWdpc3RlcnMuaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODk5NC9yZWdpc3RlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjdmNjJmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204OTk0L3JlZ2lzdGVycy5oCkBAIC0wLDAgKzEsNDI5MiBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvbWZkL3dtODk5NC9yZWdpc3RlcnMuaCAtLSBSZWdpc3RlciBkZWZpbml0aW9ucyBmb3IgV004OTk0CisgKgorICogQ29weXJpZ2h0IDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fTUZEX1dNODk5NF9SRUdJU1RFUlNfSF9fCisjZGVmaW5lIF9fTUZEX1dNODk5NF9SRUdJU1RFUlNfSF9fCisKKy8qCisgKiBSZWdpc3RlciB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgV004OTk0X1NPRlRXQVJFX1JFU0VUICAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfMSAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfMiAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfMyAgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNiAgICAgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgV004OTk0X0lOUFVUX01JWEVSXzEgICAgICAgICAgICAgICAgICAgIDB4MTUKKyNkZWZpbmUgV004OTk0X0xFRlRfTElORV9JTlBVVF8xXzJfVk9MVU1FICAgICAgIDB4MTgKKyNkZWZpbmUgV004OTk0X0xFRlRfTElORV9JTlBVVF8zXzRfVk9MVU1FICAgICAgIDB4MTkKKyNkZWZpbmUgV004OTk0X1JJR0hUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSAgICAgIDB4MUEKKyNkZWZpbmUgV004OTk0X1JJR0hUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSAgICAgIDB4MUIKKyNkZWZpbmUgV004OTk0X0xFRlRfT1VUUFVUX1ZPTFVNRSAgICAgICAgICAgICAgIDB4MUMKKyNkZWZpbmUgV004OTk0X1JJR0hUX09VVFBVVF9WT0xVTUUgICAgICAgICAgICAgIDB4MUQKKyNkZWZpbmUgV004OTk0X0xJTkVfT1VUUFVUU19WT0xVTUUgICAgICAgICAgICAgIDB4MUUKKyNkZWZpbmUgV004OTk0X0hQT1VUMl9WT0xVTUUgICAgICAgICAgICAgICAgICAgIDB4MUYKKyNkZWZpbmUgV004OTk0X0xFRlRfT1BHQV9WT0xVTUUgICAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgV004OTk0X1JJR0hUX09QR0FfVk9MVU1FICAgICAgICAgICAgICAgIDB4MjEKKyNkZWZpbmUgV004OTk0X1NQS01JWExfQVRURU5VQVRJT04gICAgICAgICAgICAgIDB4MjIKKyNkZWZpbmUgV004OTk0X1NQS01JWFJfQVRURU5VQVRJT04gICAgICAgICAgICAgIDB4MjMKKyNkZWZpbmUgV004OTk0X1NQS09VVF9NSVhFUlMgICAgICAgICAgICAgICAgICAgIDB4MjQKKyNkZWZpbmUgV004OTk0X0NMQVNTRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjUKKyNkZWZpbmUgV004OTk0X1NQRUFLRVJfVk9MVU1FX0xFRlQgICAgICAgICAgICAgIDB4MjYKKyNkZWZpbmUgV004OTk0X1NQRUFLRVJfVk9MVU1FX1JJR0hUICAgICAgICAgICAgIDB4MjcKKyNkZWZpbmUgV004OTk0X0lOUFVUX01JWEVSXzIgICAgICAgICAgICAgICAgICAgIDB4MjgKKyNkZWZpbmUgV004OTk0X0lOUFVUX01JWEVSXzMgICAgICAgICAgICAgICAgICAgIDB4MjkKKyNkZWZpbmUgV004OTk0X0lOUFVUX01JWEVSXzQgICAgICAgICAgICAgICAgICAgIDB4MkEKKyNkZWZpbmUgV004OTk0X0lOUFVUX01JWEVSXzUgICAgICAgICAgICAgICAgICAgIDB4MkIKKyNkZWZpbmUgV004OTk0X0lOUFVUX01JWEVSXzYgICAgICAgICAgICAgICAgICAgIDB4MkMKKyNkZWZpbmUgV004OTk0X09VVFBVVF9NSVhFUl8xICAgICAgICAgICAgICAgICAgIDB4MkQKKyNkZWZpbmUgV004OTk0X09VVFBVVF9NSVhFUl8yICAgICAgICAgICAgICAgICAgIDB4MkUKKyNkZWZpbmUgV004OTk0X09VVFBVVF9NSVhFUl8zICAgICAgICAgICAgICAgICAgIDB4MkYKKyNkZWZpbmUgV004OTk0X09VVFBVVF9NSVhFUl80ICAgICAgICAgICAgICAgICAgIDB4MzAKKyNkZWZpbmUgV004OTk0X09VVFBVVF9NSVhFUl81ICAgICAgICAgICAgICAgICAgIDB4MzEKKyNkZWZpbmUgV004OTk0X09VVFBVVF9NSVhFUl82ICAgICAgICAgICAgICAgICAgIDB4MzIKKyNkZWZpbmUgV004OTk0X0hQT1VUMl9NSVhFUiAgICAgICAgICAgICAgICAgICAgIDB4MzMKKyNkZWZpbmUgV004OTk0X0xJTkVfTUlYRVJfMSAgICAgICAgICAgICAgICAgICAgIDB4MzQKKyNkZWZpbmUgV004OTk0X0xJTkVfTUlYRVJfMiAgICAgICAgICAgICAgICAgICAgIDB4MzUKKyNkZWZpbmUgV004OTk0X1NQRUFLRVJfTUlYRVIgICAgICAgICAgICAgICAgICAgIDB4MzYKKyNkZWZpbmUgV004OTk0X0FERElUSU9OQUxfQ09OVFJPTCAgICAgICAgICAgICAgIDB4MzcKKyNkZWZpbmUgV004OTk0X0FOVElQT1BfMSAgICAgICAgICAgICAgICAgICAgICAgIDB4MzgKKyNkZWZpbmUgV004OTk0X0FOVElQT1BfMiAgICAgICAgICAgICAgICAgICAgICAgIDB4MzkKKyNkZWZpbmUgV004OTk0X01JQ0JJQVMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M0EKKyNkZWZpbmUgV004OTk0X0xET18xICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M0IKKyNkZWZpbmUgV004OTk0X0xET18yICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4M0MKKyNkZWZpbmUgV004OTk0X0NIQVJHRV9QVU1QXzEgICAgICAgICAgICAgICAgICAgIDB4NEMKKyNkZWZpbmUgV004OTk0X0NMQVNTX1dfMSAgICAgICAgICAgICAgICAgICAgICAgIDB4NTEKKyNkZWZpbmUgV004OTk0X0RDX1NFUlZPXzEgICAgICAgICAgICAgICAgICAgICAgIDB4NTQKKyNkZWZpbmUgV004OTk0X0RDX1NFUlZPXzIgICAgICAgICAgICAgICAgICAgICAgIDB4NTUKKyNkZWZpbmUgV004OTk0X0RDX1NFUlZPXzQgICAgICAgICAgICAgICAgICAgICAgIDB4NTcKKyNkZWZpbmUgV004OTk0X0RDX1NFUlZPX1JFQURCQUNLICAgICAgICAgICAgICAgIDB4NTgKKyNkZWZpbmUgV004OTk0X0FOQUxPR1VFX0hQXzEgICAgICAgICAgICAgICAgICAgIDB4NjAKKyNkZWZpbmUgV004OTk0X0NISVBfUkVWSVNJT04gICAgICAgICAgICAgICAgICAgIDB4MTAwCisjZGVmaW5lIFdNODk5NF9DT05UUk9MX0lOVEVSRkFDRSAgICAgICAgICAgICAgICAweDEwMQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSX0NUUkxfMSAgICAgICAgICAgMHgxMTAKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl9DVFJMXzIgICAgICAgICAgIDB4MTExCisjZGVmaW5lIFdNODk5NF9BSUYxX0NMT0NLSU5HXzEgICAgICAgICAgICAgICAgICAweDIwMAorI2RlZmluZSBXTTg5OTRfQUlGMV9DTE9DS0lOR18yICAgICAgICAgICAgICAgICAgMHgyMDEKKyNkZWZpbmUgV004OTk0X0FJRjJfQ0xPQ0tJTkdfMSAgICAgICAgICAgICAgICAgIDB4MjA0CisjZGVmaW5lIFdNODk5NF9BSUYyX0NMT0NLSU5HXzIgICAgICAgICAgICAgICAgICAweDIwNQorI2RlZmluZSBXTTg5OTRfQ0xPQ0tJTkdfMSAgICAgICAgICAgICAgICAgICAgICAgMHgyMDgKKyNkZWZpbmUgV004OTk0X0NMT0NLSU5HXzIgICAgICAgICAgICAgICAgICAgICAgIDB4MjA5CisjZGVmaW5lIFdNODk5NF9BSUYxX1JBVEUgICAgICAgICAgICAgICAgICAgICAgICAweDIxMAorI2RlZmluZSBXTTg5OTRfQUlGMl9SQVRFICAgICAgICAgICAgICAgICAgICAgICAgMHgyMTEKKyNkZWZpbmUgV004OTk0X1JBVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgIDB4MjEyCisjZGVmaW5lIFdNODk5NF9GTEwxX0NPTlRST0xfMSAgICAgICAgICAgICAgICAgICAweDIyMAorI2RlZmluZSBXTTg5OTRfRkxMMV9DT05UUk9MXzIgICAgICAgICAgICAgICAgICAgMHgyMjEKKyNkZWZpbmUgV004OTk0X0ZMTDFfQ09OVFJPTF8zICAgICAgICAgICAgICAgICAgIDB4MjIyCisjZGVmaW5lIFdNODk5NF9GTEwxX0NPTlRST0xfNCAgICAgICAgICAgICAgICAgICAweDIyMworI2RlZmluZSBXTTg5OTRfRkxMMV9DT05UUk9MXzUgICAgICAgICAgICAgICAgICAgMHgyMjQKKyNkZWZpbmUgV004OTk0X0ZMTDJfQ09OVFJPTF8xICAgICAgICAgICAgICAgICAgIDB4MjQwCisjZGVmaW5lIFdNODk5NF9GTEwyX0NPTlRST0xfMiAgICAgICAgICAgICAgICAgICAweDI0MQorI2RlZmluZSBXTTg5OTRfRkxMMl9DT05UUk9MXzMgICAgICAgICAgICAgICAgICAgMHgyNDIKKyNkZWZpbmUgV004OTk0X0ZMTDJfQ09OVFJPTF80ICAgICAgICAgICAgICAgICAgIDB4MjQzCisjZGVmaW5lIFdNODk5NF9GTEwyX0NPTlRST0xfNSAgICAgICAgICAgICAgICAgICAweDI0NAorI2RlZmluZSBXTTg5OTRfQUlGMV9DT05UUk9MXzEgICAgICAgICAgICAgICAgICAgMHgzMDAKKyNkZWZpbmUgV004OTk0X0FJRjFfQ09OVFJPTF8yICAgICAgICAgICAgICAgICAgIDB4MzAxCisjZGVmaW5lIFdNODk5NF9BSUYxX01BU1RFUl9TTEFWRSAgICAgICAgICAgICAgICAweDMwMgorI2RlZmluZSBXTTg5OTRfQUlGMV9CQ0xLICAgICAgICAgICAgICAgICAgICAgICAgMHgzMDMKKyNkZWZpbmUgV004OTk0X0FJRjFBRENfTFJDTEsgICAgICAgICAgICAgICAgICAgIDB4MzA0CisjZGVmaW5lIFdNODk5NF9BSUYxREFDX0xSQ0xLICAgICAgICAgICAgICAgICAgICAweDMwNQorI2RlZmluZSBXTTg5OTRfQUlGMURBQ19EQVRBICAgICAgICAgICAgICAgICAgICAgMHgzMDYKKyNkZWZpbmUgV004OTk0X0FJRjFBRENfREFUQSAgICAgICAgICAgICAgICAgICAgIDB4MzA3CisjZGVmaW5lIFdNODk5NF9BSUYyX0NPTlRST0xfMSAgICAgICAgICAgICAgICAgICAweDMxMAorI2RlZmluZSBXTTg5OTRfQUlGMl9DT05UUk9MXzIgICAgICAgICAgICAgICAgICAgMHgzMTEKKyNkZWZpbmUgV004OTk0X0FJRjJfTUFTVEVSX1NMQVZFICAgICAgICAgICAgICAgIDB4MzEyCisjZGVmaW5lIFdNODk5NF9BSUYyX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAweDMxMworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19MUkNMSyAgICAgICAgICAgICAgICAgICAgMHgzMTQKKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfTFJDTEsgICAgICAgICAgICAgICAgICAgIDB4MzE1CisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0RBVEEgICAgICAgICAgICAgICAgICAgICAweDMxNgorI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19EQVRBICAgICAgICAgICAgICAgICAgICAgMHgzMTcKKyNkZWZpbmUgV004OTk0X0FJRjFfQURDMV9MRUZUX1ZPTFVNRSAgICAgICAgICAgIDB4NDAwCisjZGVmaW5lIFdNODk5NF9BSUYxX0FEQzFfUklHSFRfVk9MVU1FICAgICAgICAgICAweDQwMQorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMxX0xFRlRfVk9MVU1FICAgICAgICAgICAgMHg0MDIKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMV9SSUdIVF9WT0xVTUUgICAgICAgICAgIDB4NDAzCisjZGVmaW5lIFdNODk5NF9BSUYxX0FEQzJfTEVGVF9WT0xVTUUgICAgICAgICAgICAweDQwNAorI2RlZmluZSBXTTg5OTRfQUlGMV9BREMyX1JJR0hUX1ZPTFVNRSAgICAgICAgICAgMHg0MDUKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMl9MRUZUX1ZPTFVNRSAgICAgICAgICAgIDB4NDA2CisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzJfUklHSFRfVk9MVU1FICAgICAgICAgICAweDQwNworI2RlZmluZSBXTTg5OTRfQUlGMV9BREMxX0ZJTFRFUlMgICAgICAgICAgICAgICAgMHg0MTAKKyNkZWZpbmUgV004OTk0X0FJRjFfQURDMl9GSUxURVJTICAgICAgICAgICAgICAgIDB4NDExCisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzFfRklMVEVSU18xICAgICAgICAgICAgICAweDQyMAorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMxX0ZJTFRFUlNfMiAgICAgICAgICAgICAgMHg0MjEKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMl9GSUxURVJTXzEgICAgICAgICAgICAgIDB4NDIyCisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzJfRklMVEVSU18yICAgICAgICAgICAgICAweDQyMworI2RlZmluZSBXTTg5OTRfQUlGMV9EUkMxXzEgICAgICAgICAgICAgICAgICAgICAgMHg0NDAKKyNkZWZpbmUgV004OTk0X0FJRjFfRFJDMV8yICAgICAgICAgICAgICAgICAgICAgIDB4NDQxCisjZGVmaW5lIFdNODk5NF9BSUYxX0RSQzFfMyAgICAgICAgICAgICAgICAgICAgICAweDQ0MgorI2RlZmluZSBXTTg5OTRfQUlGMV9EUkMxXzQgICAgICAgICAgICAgICAgICAgICAgMHg0NDMKKyNkZWZpbmUgV004OTk0X0FJRjFfRFJDMV81ICAgICAgICAgICAgICAgICAgICAgIDB4NDQ0CisjZGVmaW5lIFdNODk5NF9BSUYxX0RSQzJfMSAgICAgICAgICAgICAgICAgICAgICAweDQ1MAorI2RlZmluZSBXTTg5OTRfQUlGMV9EUkMyXzIgICAgICAgICAgICAgICAgICAgICAgMHg0NTEKKyNkZWZpbmUgV004OTk0X0FJRjFfRFJDMl8zICAgICAgICAgICAgICAgICAgICAgIDB4NDUyCisjZGVmaW5lIFdNODk5NF9BSUYxX0RSQzJfNCAgICAgICAgICAgICAgICAgICAgICAweDQ1MworI2RlZmluZSBXTTg5OTRfQUlGMV9EUkMyXzUgICAgICAgICAgICAgICAgICAgICAgMHg0NTQKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMV9FUV9HQUlOU18xICAgICAgICAgICAgIDB4NDgwCisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzFfRVFfR0FJTlNfMiAgICAgICAgICAgICAweDQ4MQorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMxX0VRX0JBTkRfMV9BICAgICAgICAgICAgMHg0ODIKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMV9FUV9CQU5EXzFfQiAgICAgICAgICAgIDB4NDgzCisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzFfRVFfQkFORF8xX1BHICAgICAgICAgICAweDQ4NAorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMxX0VRX0JBTkRfMl9BICAgICAgICAgICAgMHg0ODUKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMV9FUV9CQU5EXzJfQiAgICAgICAgICAgIDB4NDg2CisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzFfRVFfQkFORF8yX0MgICAgICAgICAgICAweDQ4NworI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMxX0VRX0JBTkRfMl9QRyAgICAgICAgICAgMHg0ODgKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMV9FUV9CQU5EXzNfQSAgICAgICAgICAgIDB4NDg5CisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzFfRVFfQkFORF8zX0IgICAgICAgICAgICAweDQ4QQorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMxX0VRX0JBTkRfM19DICAgICAgICAgICAgMHg0OEIKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMV9FUV9CQU5EXzNfUEcgICAgICAgICAgIDB4NDhDCisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzFfRVFfQkFORF80X0EgICAgICAgICAgICAweDQ4RAorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMxX0VRX0JBTkRfNF9CICAgICAgICAgICAgMHg0OEUKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMV9FUV9CQU5EXzRfQyAgICAgICAgICAgIDB4NDhGCisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzFfRVFfQkFORF80X1BHICAgICAgICAgICAweDQ5MAorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMxX0VRX0JBTkRfNV9BICAgICAgICAgICAgMHg0OTEKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMV9FUV9CQU5EXzVfQiAgICAgICAgICAgIDB4NDkyCisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzFfRVFfQkFORF81X1BHICAgICAgICAgICAweDQ5MworI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMyX0VRX0dBSU5TXzEgICAgICAgICAgICAgMHg0QTAKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMl9FUV9HQUlOU18yICAgICAgICAgICAgIDB4NEExCisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzJfRVFfQkFORF8xX0EgICAgICAgICAgICAweDRBMgorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMyX0VRX0JBTkRfMV9CICAgICAgICAgICAgMHg0QTMKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMl9FUV9CQU5EXzFfUEcgICAgICAgICAgIDB4NEE0CisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzJfRVFfQkFORF8yX0EgICAgICAgICAgICAweDRBNQorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMyX0VRX0JBTkRfMl9CICAgICAgICAgICAgMHg0QTYKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMl9FUV9CQU5EXzJfQyAgICAgICAgICAgIDB4NEE3CisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzJfRVFfQkFORF8yX1BHICAgICAgICAgICAweDRBOAorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMyX0VRX0JBTkRfM19BICAgICAgICAgICAgMHg0QTkKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMl9FUV9CQU5EXzNfQiAgICAgICAgICAgIDB4NEFBCisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzJfRVFfQkFORF8zX0MgICAgICAgICAgICAweDRBQgorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMyX0VRX0JBTkRfM19QRyAgICAgICAgICAgMHg0QUMKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMl9FUV9CQU5EXzRfQSAgICAgICAgICAgIDB4NEFECisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzJfRVFfQkFORF80X0IgICAgICAgICAgICAweDRBRQorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMyX0VRX0JBTkRfNF9DICAgICAgICAgICAgMHg0QUYKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMl9FUV9CQU5EXzRfUEcgICAgICAgICAgIDB4NEIwCisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzJfRVFfQkFORF81X0EgICAgICAgICAgICAweDRCMQorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMyX0VRX0JBTkRfNV9CICAgICAgICAgICAgMHg0QjIKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMl9FUV9CQU5EXzVfUEcgICAgICAgICAgIDB4NEIzCisjZGVmaW5lIFdNODk5NF9BSUYyX0FEQ19MRUZUX1ZPTFVNRSAgICAgICAgICAgICAweDUwMAorI2RlZmluZSBXTTg5OTRfQUlGMl9BRENfUklHSFRfVk9MVU1FICAgICAgICAgICAgMHg1MDEKKyNkZWZpbmUgV004OTk0X0FJRjJfREFDX0xFRlRfVk9MVU1FICAgICAgICAgICAgIDB4NTAyCisjZGVmaW5lIFdNODk5NF9BSUYyX0RBQ19SSUdIVF9WT0xVTUUgICAgICAgICAgICAweDUwMworI2RlZmluZSBXTTg5OTRfQUlGMl9BRENfRklMVEVSUyAgICAgICAgICAgICAgICAgMHg1MTAKKyNkZWZpbmUgV004OTk0X0FJRjJfREFDX0ZJTFRFUlNfMSAgICAgICAgICAgICAgIDB4NTIwCisjZGVmaW5lIFdNODk5NF9BSUYyX0RBQ19GSUxURVJTXzIgICAgICAgICAgICAgICAweDUyMQorI2RlZmluZSBXTTg5OTRfQUlGMl9EUkNfMSAgICAgICAgICAgICAgICAgICAgICAgMHg1NDAKKyNkZWZpbmUgV004OTk0X0FJRjJfRFJDXzIgICAgICAgICAgICAgICAgICAgICAgIDB4NTQxCisjZGVmaW5lIFdNODk5NF9BSUYyX0RSQ18zICAgICAgICAgICAgICAgICAgICAgICAweDU0MgorI2RlZmluZSBXTTg5OTRfQUlGMl9EUkNfNCAgICAgICAgICAgICAgICAgICAgICAgMHg1NDMKKyNkZWZpbmUgV004OTk0X0FJRjJfRFJDXzUgICAgICAgICAgICAgICAgICAgICAgIDB4NTQ0CisjZGVmaW5lIFdNODk5NF9BSUYyX0VRX0dBSU5TXzEgICAgICAgICAgICAgICAgICAweDU4MAorI2RlZmluZSBXTTg5OTRfQUlGMl9FUV9HQUlOU18yICAgICAgICAgICAgICAgICAgMHg1ODEKKyNkZWZpbmUgV004OTk0X0FJRjJfRVFfQkFORF8xX0EgICAgICAgICAgICAgICAgIDB4NTgyCisjZGVmaW5lIFdNODk5NF9BSUYyX0VRX0JBTkRfMV9CICAgICAgICAgICAgICAgICAweDU4MworI2RlZmluZSBXTTg5OTRfQUlGMl9FUV9CQU5EXzFfUEcgICAgICAgICAgICAgICAgMHg1ODQKKyNkZWZpbmUgV004OTk0X0FJRjJfRVFfQkFORF8yX0EgICAgICAgICAgICAgICAgIDB4NTg1CisjZGVmaW5lIFdNODk5NF9BSUYyX0VRX0JBTkRfMl9CICAgICAgICAgICAgICAgICAweDU4NgorI2RlZmluZSBXTTg5OTRfQUlGMl9FUV9CQU5EXzJfQyAgICAgICAgICAgICAgICAgMHg1ODcKKyNkZWZpbmUgV004OTk0X0FJRjJfRVFfQkFORF8yX1BHICAgICAgICAgICAgICAgIDB4NTg4CisjZGVmaW5lIFdNODk5NF9BSUYyX0VRX0JBTkRfM19BICAgICAgICAgICAgICAgICAweDU4OQorI2RlZmluZSBXTTg5OTRfQUlGMl9FUV9CQU5EXzNfQiAgICAgICAgICAgICAgICAgMHg1OEEKKyNkZWZpbmUgV004OTk0X0FJRjJfRVFfQkFORF8zX0MgICAgICAgICAgICAgICAgIDB4NThCCisjZGVmaW5lIFdNODk5NF9BSUYyX0VRX0JBTkRfM19QRyAgICAgICAgICAgICAgICAweDU4QworI2RlZmluZSBXTTg5OTRfQUlGMl9FUV9CQU5EXzRfQSAgICAgICAgICAgICAgICAgMHg1OEQKKyNkZWZpbmUgV004OTk0X0FJRjJfRVFfQkFORF80X0IgICAgICAgICAgICAgICAgIDB4NThFCisjZGVmaW5lIFdNODk5NF9BSUYyX0VRX0JBTkRfNF9DICAgICAgICAgICAgICAgICAweDU4RgorI2RlZmluZSBXTTg5OTRfQUlGMl9FUV9CQU5EXzRfUEcgICAgICAgICAgICAgICAgMHg1OTAKKyNkZWZpbmUgV004OTk0X0FJRjJfRVFfQkFORF81X0EgICAgICAgICAgICAgICAgIDB4NTkxCisjZGVmaW5lIFdNODk5NF9BSUYyX0VRX0JBTkRfNV9CICAgICAgICAgICAgICAgICAweDU5MgorI2RlZmluZSBXTTg5OTRfQUlGMl9FUV9CQU5EXzVfUEcgICAgICAgICAgICAgICAgMHg1OTMKKyNkZWZpbmUgV004OTk0X0RBQzFfTUlYRVJfVk9MVU1FUyAgICAgICAgICAgICAgIDB4NjAwCisjZGVmaW5lIFdNODk5NF9EQUMxX0xFRlRfTUlYRVJfUk9VVElORyAgICAgICAgICAweDYwMQorI2RlZmluZSBXTTg5OTRfREFDMV9SSUdIVF9NSVhFUl9ST1VUSU5HICAgICAgICAgMHg2MDIKKyNkZWZpbmUgV004OTk0X0RBQzJfTUlYRVJfVk9MVU1FUyAgICAgICAgICAgICAgIDB4NjAzCisjZGVmaW5lIFdNODk5NF9EQUMyX0xFRlRfTUlYRVJfUk9VVElORyAgICAgICAgICAweDYwNAorI2RlZmluZSBXTTg5OTRfREFDMl9SSUdIVF9NSVhFUl9ST1VUSU5HICAgICAgICAgMHg2MDUKKyNkZWZpbmUgV004OTk0X0FJRjFfQURDMV9MRUZUX01JWEVSX1JPVVRJTkcgICAgIDB4NjA2CisjZGVmaW5lIFdNODk5NF9BSUYxX0FEQzFfUklHSFRfTUlYRVJfUk9VVElORyAgICAweDYwNworI2RlZmluZSBXTTg5OTRfQUlGMV9BREMyX0xFRlRfTUlYRVJfUk9VVElORyAgICAgMHg2MDgKKyNkZWZpbmUgV004OTk0X0FJRjFfQURDMl9SSUdIVF9NSVhFUl9ST1VUSU5HICAgIDB4NjA5CisjZGVmaW5lIFdNODk5NF9EQUMxX0xFRlRfVk9MVU1FICAgICAgICAgICAgICAgICAweDYxMAorI2RlZmluZSBXTTg5OTRfREFDMV9SSUdIVF9WT0xVTUUgICAgICAgICAgICAgICAgMHg2MTEKKyNkZWZpbmUgV004OTk0X0RBQzJfTEVGVF9WT0xVTUUgICAgICAgICAgICAgICAgIDB4NjEyCisjZGVmaW5lIFdNODk5NF9EQUMyX1JJR0hUX1ZPTFVNRSAgICAgICAgICAgICAgICAweDYxMworI2RlZmluZSBXTTg5OTRfREFDX1NPRlRNVVRFICAgICAgICAgICAgICAgICAgICAgMHg2MTQKKyNkZWZpbmUgV004OTk0X09WRVJTQU1QTElORyAgICAgICAgICAgICAgICAgICAgIDB4NjIwCisjZGVmaW5lIFdNODk5NF9TSURFVE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAweDYyMQorI2RlZmluZSBXTTg5OTRfR1BJT18xICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MDAKKyNkZWZpbmUgV004OTk0X0dQSU9fMiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzAxCisjZGVmaW5lIFdNODk5NF9HUElPXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwMgorI2RlZmluZSBXTTg5OTRfR1BJT180ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MDMKKyNkZWZpbmUgV004OTk0X0dQSU9fNSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzA0CisjZGVmaW5lIFdNODk5NF9HUElPXzYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwNQorI2RlZmluZSBXTTg5OTRfR1BJT183ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MDYKKyNkZWZpbmUgV004OTk0X0dQSU9fOCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzA3CisjZGVmaW5lIFdNODk5NF9HUElPXzkgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwOAorI2RlZmluZSBXTTg5OTRfR1BJT18xMCAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MDkKKyNkZWZpbmUgV004OTk0X0dQSU9fMTEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzBBCisjZGVmaW5lIFdNODk5NF9QVUxMX0NPTlRST0xfMSAgICAgICAgICAgICAgICAgICAweDcyMAorI2RlZmluZSBXTTg5OTRfUFVMTF9DT05UUk9MXzIgICAgICAgICAgICAgICAgICAgMHg3MjEKKyNkZWZpbmUgV004OTk0X0lOVEVSUlVQVF9TVEFUVVNfMSAgICAgICAgICAgICAgIDB4NzMwCisjZGVmaW5lIFdNODk5NF9JTlRFUlJVUFRfU1RBVFVTXzIgICAgICAgICAgICAgICAweDczMQorI2RlZmluZSBXTTg5OTRfSU5URVJSVVBUX1JBV19TVEFUVVNfMiAgICAgICAgICAgMHg3MzIKKyNkZWZpbmUgV004OTk0X0lOVEVSUlVQVF9TVEFUVVNfMV9NQVNLICAgICAgICAgIDB4NzM4CisjZGVmaW5lIFdNODk5NF9JTlRFUlJVUFRfU1RBVFVTXzJfTUFTSyAgICAgICAgICAweDczOQorI2RlZmluZSBXTTg5OTRfSU5URVJSVVBUX0NPTlRST0wgICAgICAgICAgICAgICAgMHg3NDAKKyNkZWZpbmUgV004OTk0X0lSUV9ERUJPVU5DRSAgICAgICAgICAgICAgICAgICAgIDB4NzQ4CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMCAgICAgICAgICAgICAgICAweDMwMDAKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xICAgICAgICAgICAgICAgIDB4MzAwMQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIgICAgICAgICAgICAgICAgMHgzMDAyCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMyAgICAgICAgICAgICAgICAweDMwMDMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80ICAgICAgICAgICAgICAgIDB4MzAwNAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzUgICAgICAgICAgICAgICAgMHgzMDA1CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNiAgICAgICAgICAgICAgICAweDMwMDYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl83ICAgICAgICAgICAgICAgIDB4MzAwNworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzggICAgICAgICAgICAgICAgMHgzMDA4CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfOSAgICAgICAgICAgICAgICAweDMwMDkKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMCAgICAgICAgICAgICAgIDB4MzAwQQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzExICAgICAgICAgICAgICAgMHgzMDBCCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTIgICAgICAgICAgICAgICAweDMwMEMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMyAgICAgICAgICAgICAgIDB4MzAwRAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE0ICAgICAgICAgICAgICAgMHgzMDBFCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTUgICAgICAgICAgICAgICAweDMwMEYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNiAgICAgICAgICAgICAgIDB4MzAxMAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE3ICAgICAgICAgICAgICAgMHgzMDExCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTggICAgICAgICAgICAgICAweDMwMTIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xOSAgICAgICAgICAgICAgIDB4MzAxMworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIwICAgICAgICAgICAgICAgMHgzMDE0CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjEgICAgICAgICAgICAgICAweDMwMTUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMiAgICAgICAgICAgICAgIDB4MzAxNgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIzICAgICAgICAgICAgICAgMHgzMDE3CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjQgICAgICAgICAgICAgICAweDMwMTgKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNSAgICAgICAgICAgICAgIDB4MzAxOQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI2ICAgICAgICAgICAgICAgMHgzMDFBCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjcgICAgICAgICAgICAgICAweDMwMUIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yOCAgICAgICAgICAgICAgIDB4MzAxQworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI5ICAgICAgICAgICAgICAgMHgzMDFECisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzAgICAgICAgICAgICAgICAweDMwMUUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMSAgICAgICAgICAgICAgIDB4MzAxRgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMyICAgICAgICAgICAgICAgMHgzMDIwCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzMgICAgICAgICAgICAgICAweDMwMjEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNCAgICAgICAgICAgICAgIDB4MzAyMgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM1ICAgICAgICAgICAgICAgMHgzMDIzCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzYgICAgICAgICAgICAgICAweDMwMjQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNyAgICAgICAgICAgICAgIDB4MzAyNQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM4ICAgICAgICAgICAgICAgMHgzMDI2CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzkgICAgICAgICAgICAgICAweDMwMjcKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MCAgICAgICAgICAgICAgIDB4MzAyOAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQxICAgICAgICAgICAgICAgMHgzMDI5CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDIgICAgICAgICAgICAgICAweDMwMkEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MyAgICAgICAgICAgICAgIDB4MzAyQgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ0ICAgICAgICAgICAgICAgMHgzMDJDCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDUgICAgICAgICAgICAgICAweDMwMkQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NiAgICAgICAgICAgICAgIDB4MzAyRQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ3ICAgICAgICAgICAgICAgMHgzMDJGCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDggICAgICAgICAgICAgICAweDMwMzAKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80OSAgICAgICAgICAgICAgIDB4MzAzMQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzUwICAgICAgICAgICAgICAgMHgzMDMyCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNTEgICAgICAgICAgICAgICAweDMwMzMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl81MiAgICAgICAgICAgICAgIDB4MzAzNAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzUzICAgICAgICAgICAgICAgMHgzMDM1CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNTQgICAgICAgICAgICAgICAweDMwMzYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl81NSAgICAgICAgICAgICAgIDB4MzAzNworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzU2ICAgICAgICAgICAgICAgMHgzMDM4CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNTcgICAgICAgICAgICAgICAweDMwMzkKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl81OCAgICAgICAgICAgICAgIDB4MzAzQQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzU5ICAgICAgICAgICAgICAgMHgzMDNCCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNjAgICAgICAgICAgICAgICAweDMwM0MKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl82MSAgICAgICAgICAgICAgIDB4MzAzRAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzYyICAgICAgICAgICAgICAgMHgzMDNFCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNjMgICAgICAgICAgICAgICAweDMwM0YKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl82NCAgICAgICAgICAgICAgIDB4MzA0MAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzY1ICAgICAgICAgICAgICAgMHgzMDQxCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNjYgICAgICAgICAgICAgICAweDMwNDIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl82NyAgICAgICAgICAgICAgIDB4MzA0MworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzY4ICAgICAgICAgICAgICAgMHgzMDQ0CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNjkgICAgICAgICAgICAgICAweDMwNDUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl83MCAgICAgICAgICAgICAgIDB4MzA0NgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzcxICAgICAgICAgICAgICAgMHgzMDQ3CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNzIgICAgICAgICAgICAgICAweDMwNDgKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl83MyAgICAgICAgICAgICAgIDB4MzA0OQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzc0ICAgICAgICAgICAgICAgMHgzMDRBCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNzUgICAgICAgICAgICAgICAweDMwNEIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl83NiAgICAgICAgICAgICAgIDB4MzA0QworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzc3ICAgICAgICAgICAgICAgMHgzMDRECisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNzggICAgICAgICAgICAgICAweDMwNEUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl83OSAgICAgICAgICAgICAgIDB4MzA0RgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzgwICAgICAgICAgICAgICAgMHgzMDUwCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfODEgICAgICAgICAgICAgICAweDMwNTEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl84MiAgICAgICAgICAgICAgIDB4MzA1MgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzgzICAgICAgICAgICAgICAgMHgzMDUzCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfODQgICAgICAgICAgICAgICAweDMwNTQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl84NSAgICAgICAgICAgICAgIDB4MzA1NQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzg2ICAgICAgICAgICAgICAgMHgzMDU2CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfODcgICAgICAgICAgICAgICAweDMwNTcKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl84OCAgICAgICAgICAgICAgIDB4MzA1OAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzg5ICAgICAgICAgICAgICAgMHgzMDU5CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfOTAgICAgICAgICAgICAgICAweDMwNUEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl85MSAgICAgICAgICAgICAgIDB4MzA1QgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzkyICAgICAgICAgICAgICAgMHgzMDVDCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfOTMgICAgICAgICAgICAgICAweDMwNUQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl85NCAgICAgICAgICAgICAgIDB4MzA1RQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzk1ICAgICAgICAgICAgICAgMHgzMDVGCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfOTYgICAgICAgICAgICAgICAweDMwNjAKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl85NyAgICAgICAgICAgICAgIDB4MzA2MQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzk4ICAgICAgICAgICAgICAgMHgzMDYyCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfOTkgICAgICAgICAgICAgICAweDMwNjMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMDAgICAgICAgICAgICAgIDB4MzA2NAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzEwMSAgICAgICAgICAgICAgMHgzMDY1CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTAyICAgICAgICAgICAgICAweDMwNjYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMDMgICAgICAgICAgICAgIDB4MzA2NworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzEwNCAgICAgICAgICAgICAgMHgzMDY4CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTA1ICAgICAgICAgICAgICAweDMwNjkKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMDYgICAgICAgICAgICAgIDB4MzA2QQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzEwNyAgICAgICAgICAgICAgMHgzMDZCCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTA4ICAgICAgICAgICAgICAweDMwNkMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMDkgICAgICAgICAgICAgIDB4MzA2RAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzExMCAgICAgICAgICAgICAgMHgzMDZFCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTExICAgICAgICAgICAgICAweDMwNkYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMTIgICAgICAgICAgICAgIDB4MzA3MAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzExMyAgICAgICAgICAgICAgMHgzMDcxCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTE0ICAgICAgICAgICAgICAweDMwNzIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMTUgICAgICAgICAgICAgIDB4MzA3MworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzExNiAgICAgICAgICAgICAgMHgzMDc0CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTE3ICAgICAgICAgICAgICAweDMwNzUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMTggICAgICAgICAgICAgIDB4MzA3NgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzExOSAgICAgICAgICAgICAgMHgzMDc3CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTIwICAgICAgICAgICAgICAweDMwNzgKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMjEgICAgICAgICAgICAgIDB4MzA3OQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzEyMiAgICAgICAgICAgICAgMHgzMDdBCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTIzICAgICAgICAgICAgICAweDMwN0IKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMjQgICAgICAgICAgICAgIDB4MzA3QworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzEyNSAgICAgICAgICAgICAgMHgzMDdECisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTI2ICAgICAgICAgICAgICAweDMwN0UKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMjcgICAgICAgICAgICAgIDB4MzA3RgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzEyOCAgICAgICAgICAgICAgMHgzMDgwCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTI5ICAgICAgICAgICAgICAweDMwODEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMzAgICAgICAgICAgICAgIDB4MzA4MgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzEzMSAgICAgICAgICAgICAgMHgzMDgzCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTMyICAgICAgICAgICAgICAweDMwODQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMzMgICAgICAgICAgICAgIDB4MzA4NQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzEzNCAgICAgICAgICAgICAgMHgzMDg2CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTM1ICAgICAgICAgICAgICAweDMwODcKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMzYgICAgICAgICAgICAgIDB4MzA4OAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzEzNyAgICAgICAgICAgICAgMHgzMDg5CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTM4ICAgICAgICAgICAgICAweDMwOEEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMzkgICAgICAgICAgICAgIDB4MzA4QgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE0MCAgICAgICAgICAgICAgMHgzMDhDCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTQxICAgICAgICAgICAgICAweDMwOEQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNDIgICAgICAgICAgICAgIDB4MzA4RQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE0MyAgICAgICAgICAgICAgMHgzMDhGCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTQ0ICAgICAgICAgICAgICAweDMwOTAKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNDUgICAgICAgICAgICAgIDB4MzA5MQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE0NiAgICAgICAgICAgICAgMHgzMDkyCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTQ3ICAgICAgICAgICAgICAweDMwOTMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNDggICAgICAgICAgICAgIDB4MzA5NAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE0OSAgICAgICAgICAgICAgMHgzMDk1CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTUwICAgICAgICAgICAgICAweDMwOTYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNTEgICAgICAgICAgICAgIDB4MzA5NworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE1MiAgICAgICAgICAgICAgMHgzMDk4CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTUzICAgICAgICAgICAgICAweDMwOTkKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNTQgICAgICAgICAgICAgIDB4MzA5QQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE1NSAgICAgICAgICAgICAgMHgzMDlCCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTU2ICAgICAgICAgICAgICAweDMwOUMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNTcgICAgICAgICAgICAgIDB4MzA5RAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE1OCAgICAgICAgICAgICAgMHgzMDlFCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTU5ICAgICAgICAgICAgICAweDMwOUYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNjAgICAgICAgICAgICAgIDB4MzBBMAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE2MSAgICAgICAgICAgICAgMHgzMEExCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTYyICAgICAgICAgICAgICAweDMwQTIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNjMgICAgICAgICAgICAgIDB4MzBBMworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE2NCAgICAgICAgICAgICAgMHgzMEE0CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTY1ICAgICAgICAgICAgICAweDMwQTUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNjYgICAgICAgICAgICAgIDB4MzBBNgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE2NyAgICAgICAgICAgICAgMHgzMEE3CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTY4ICAgICAgICAgICAgICAweDMwQTgKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNjkgICAgICAgICAgICAgIDB4MzBBOQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE3MCAgICAgICAgICAgICAgMHgzMEFBCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTcxICAgICAgICAgICAgICAweDMwQUIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNzIgICAgICAgICAgICAgIDB4MzBBQworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE3MyAgICAgICAgICAgICAgMHgzMEFECisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTc0ICAgICAgICAgICAgICAweDMwQUUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNzUgICAgICAgICAgICAgIDB4MzBBRgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE3NiAgICAgICAgICAgICAgMHgzMEIwCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTc3ICAgICAgICAgICAgICAweDMwQjEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNzggICAgICAgICAgICAgIDB4MzBCMgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE3OSAgICAgICAgICAgICAgMHgzMEIzCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTgwICAgICAgICAgICAgICAweDMwQjQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xODEgICAgICAgICAgICAgIDB4MzBCNQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE4MiAgICAgICAgICAgICAgMHgzMEI2CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTgzICAgICAgICAgICAgICAweDMwQjcKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xODQgICAgICAgICAgICAgIDB4MzBCOAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE4NSAgICAgICAgICAgICAgMHgzMEI5CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTg2ICAgICAgICAgICAgICAweDMwQkEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xODcgICAgICAgICAgICAgIDB4MzBCQgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE4OCAgICAgICAgICAgICAgMHgzMEJDCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTg5ICAgICAgICAgICAgICAweDMwQkQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xOTAgICAgICAgICAgICAgIDB4MzBCRQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE5MSAgICAgICAgICAgICAgMHgzMEJGCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTkyICAgICAgICAgICAgICAweDMwQzAKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xOTMgICAgICAgICAgICAgIDB4MzBDMQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE5NCAgICAgICAgICAgICAgMHgzMEMyCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTk1ICAgICAgICAgICAgICAweDMwQzMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xOTYgICAgICAgICAgICAgIDB4MzBDNAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE5NyAgICAgICAgICAgICAgMHgzMEM1CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTk4ICAgICAgICAgICAgICAweDMwQzYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xOTkgICAgICAgICAgICAgIDB4MzBDNworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIwMCAgICAgICAgICAgICAgMHgzMEM4CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjAxICAgICAgICAgICAgICAweDMwQzkKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMDIgICAgICAgICAgICAgIDB4MzBDQQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIwMyAgICAgICAgICAgICAgMHgzMENCCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjA0ICAgICAgICAgICAgICAweDMwQ0MKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMDUgICAgICAgICAgICAgIDB4MzBDRAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIwNiAgICAgICAgICAgICAgMHgzMENFCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjA3ICAgICAgICAgICAgICAweDMwQ0YKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMDggICAgICAgICAgICAgIDB4MzBEMAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIwOSAgICAgICAgICAgICAgMHgzMEQxCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjEwICAgICAgICAgICAgICAweDMwRDIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMTEgICAgICAgICAgICAgIDB4MzBEMworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIxMiAgICAgICAgICAgICAgMHgzMEQ0CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjEzICAgICAgICAgICAgICAweDMwRDUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMTQgICAgICAgICAgICAgIDB4MzBENgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIxNSAgICAgICAgICAgICAgMHgzMEQ3CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjE2ICAgICAgICAgICAgICAweDMwRDgKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMTcgICAgICAgICAgICAgIDB4MzBEOQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIxOCAgICAgICAgICAgICAgMHgzMERBCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjE5ICAgICAgICAgICAgICAweDMwREIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMjAgICAgICAgICAgICAgIDB4MzBEQworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIyMSAgICAgICAgICAgICAgMHgzMERECisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjIyICAgICAgICAgICAgICAweDMwREUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMjMgICAgICAgICAgICAgIDB4MzBERgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIyNCAgICAgICAgICAgICAgMHgzMEUwCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjI1ICAgICAgICAgICAgICAweDMwRTEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMjYgICAgICAgICAgICAgIDB4MzBFMgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIyNyAgICAgICAgICAgICAgMHgzMEUzCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjI4ICAgICAgICAgICAgICAweDMwRTQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMjkgICAgICAgICAgICAgIDB4MzBFNQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIzMCAgICAgICAgICAgICAgMHgzMEU2CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjMxICAgICAgICAgICAgICAweDMwRTcKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMzIgICAgICAgICAgICAgIDB4MzBFOAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIzMyAgICAgICAgICAgICAgMHgzMEU5CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjM0ICAgICAgICAgICAgICAweDMwRUEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMzUgICAgICAgICAgICAgIDB4MzBFQgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIzNiAgICAgICAgICAgICAgMHgzMEVDCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjM3ICAgICAgICAgICAgICAweDMwRUQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMzggICAgICAgICAgICAgIDB4MzBFRQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIzOSAgICAgICAgICAgICAgMHgzMEVGCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjQwICAgICAgICAgICAgICAweDMwRjAKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNDEgICAgICAgICAgICAgIDB4MzBGMQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI0MiAgICAgICAgICAgICAgMHgzMEYyCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjQzICAgICAgICAgICAgICAweDMwRjMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNDQgICAgICAgICAgICAgIDB4MzBGNAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI0NSAgICAgICAgICAgICAgMHgzMEY1CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjQ2ICAgICAgICAgICAgICAweDMwRjYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNDcgICAgICAgICAgICAgIDB4MzBGNworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI0OCAgICAgICAgICAgICAgMHgzMEY4CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjQ5ICAgICAgICAgICAgICAweDMwRjkKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNTAgICAgICAgICAgICAgIDB4MzBGQQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI1MSAgICAgICAgICAgICAgMHgzMEZCCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjUyICAgICAgICAgICAgICAweDMwRkMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNTMgICAgICAgICAgICAgIDB4MzBGRAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI1NCAgICAgICAgICAgICAgMHgzMEZFCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjU1ICAgICAgICAgICAgICAweDMwRkYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNTYgICAgICAgICAgICAgIDB4MzEwMAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI1NyAgICAgICAgICAgICAgMHgzMTAxCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjU4ICAgICAgICAgICAgICAweDMxMDIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNTkgICAgICAgICAgICAgIDB4MzEwMworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI2MCAgICAgICAgICAgICAgMHgzMTA0CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjYxICAgICAgICAgICAgICAweDMxMDUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNjIgICAgICAgICAgICAgIDB4MzEwNgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI2MyAgICAgICAgICAgICAgMHgzMTA3CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjY0ICAgICAgICAgICAgICAweDMxMDgKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNjUgICAgICAgICAgICAgIDB4MzEwOQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI2NiAgICAgICAgICAgICAgMHgzMTBBCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjY3ICAgICAgICAgICAgICAweDMxMEIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNjggICAgICAgICAgICAgIDB4MzEwQworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI2OSAgICAgICAgICAgICAgMHgzMTBECisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjcwICAgICAgICAgICAgICAweDMxMEUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNzEgICAgICAgICAgICAgIDB4MzEwRgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI3MiAgICAgICAgICAgICAgMHgzMTEwCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjczICAgICAgICAgICAgICAweDMxMTEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNzQgICAgICAgICAgICAgIDB4MzExMgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI3NSAgICAgICAgICAgICAgMHgzMTEzCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjc2ICAgICAgICAgICAgICAweDMxMTQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNzcgICAgICAgICAgICAgIDB4MzExNQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI3OCAgICAgICAgICAgICAgMHgzMTE2CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjc5ICAgICAgICAgICAgICAweDMxMTcKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yODAgICAgICAgICAgICAgIDB4MzExOAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI4MSAgICAgICAgICAgICAgMHgzMTE5CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjgyICAgICAgICAgICAgICAweDMxMUEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yODMgICAgICAgICAgICAgIDB4MzExQgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI4NCAgICAgICAgICAgICAgMHgzMTFDCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjg1ICAgICAgICAgICAgICAweDMxMUQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yODYgICAgICAgICAgICAgIDB4MzExRQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI4NyAgICAgICAgICAgICAgMHgzMTFGCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjg4ICAgICAgICAgICAgICAweDMxMjAKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yODkgICAgICAgICAgICAgIDB4MzEyMQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI5MCAgICAgICAgICAgICAgMHgzMTIyCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjkxICAgICAgICAgICAgICAweDMxMjMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yOTIgICAgICAgICAgICAgIDB4MzEyNAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI5MyAgICAgICAgICAgICAgMHgzMTI1CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjk0ICAgICAgICAgICAgICAweDMxMjYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yOTUgICAgICAgICAgICAgIDB4MzEyNworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI5NiAgICAgICAgICAgICAgMHgzMTI4CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjk3ICAgICAgICAgICAgICAweDMxMjkKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yOTggICAgICAgICAgICAgIDB4MzEyQQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI5OSAgICAgICAgICAgICAgMHgzMTJCCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzAwICAgICAgICAgICAgICAweDMxMkMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMDEgICAgICAgICAgICAgIDB4MzEyRAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMwMiAgICAgICAgICAgICAgMHgzMTJFCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzAzICAgICAgICAgICAgICAweDMxMkYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMDQgICAgICAgICAgICAgIDB4MzEzMAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMwNSAgICAgICAgICAgICAgMHgzMTMxCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzA2ICAgICAgICAgICAgICAweDMxMzIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMDcgICAgICAgICAgICAgIDB4MzEzMworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMwOCAgICAgICAgICAgICAgMHgzMTM0CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzA5ICAgICAgICAgICAgICAweDMxMzUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMTAgICAgICAgICAgICAgIDB4MzEzNgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMxMSAgICAgICAgICAgICAgMHgzMTM3CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzEyICAgICAgICAgICAgICAweDMxMzgKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMTMgICAgICAgICAgICAgIDB4MzEzOQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMxNCAgICAgICAgICAgICAgMHgzMTNBCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzE1ICAgICAgICAgICAgICAweDMxM0IKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMTYgICAgICAgICAgICAgIDB4MzEzQworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMxNyAgICAgICAgICAgICAgMHgzMTNECisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzE4ICAgICAgICAgICAgICAweDMxM0UKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMTkgICAgICAgICAgICAgIDB4MzEzRgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMyMCAgICAgICAgICAgICAgMHgzMTQwCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzIxICAgICAgICAgICAgICAweDMxNDEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMjIgICAgICAgICAgICAgIDB4MzE0MgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMyMyAgICAgICAgICAgICAgMHgzMTQzCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzI0ICAgICAgICAgICAgICAweDMxNDQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMjUgICAgICAgICAgICAgIDB4MzE0NQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMyNiAgICAgICAgICAgICAgMHgzMTQ2CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzI3ICAgICAgICAgICAgICAweDMxNDcKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMjggICAgICAgICAgICAgIDB4MzE0OAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMyOSAgICAgICAgICAgICAgMHgzMTQ5CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzMwICAgICAgICAgICAgICAweDMxNEEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMzEgICAgICAgICAgICAgIDB4MzE0QgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMzMiAgICAgICAgICAgICAgMHgzMTRDCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzMzICAgICAgICAgICAgICAweDMxNEQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMzQgICAgICAgICAgICAgIDB4MzE0RQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMzNSAgICAgICAgICAgICAgMHgzMTRGCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzM2ICAgICAgICAgICAgICAweDMxNTAKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMzcgICAgICAgICAgICAgIDB4MzE1MQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMzOCAgICAgICAgICAgICAgMHgzMTUyCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzM5ICAgICAgICAgICAgICAweDMxNTMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNDAgICAgICAgICAgICAgIDB4MzE1NAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM0MSAgICAgICAgICAgICAgMHgzMTU1CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzQyICAgICAgICAgICAgICAweDMxNTYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNDMgICAgICAgICAgICAgIDB4MzE1NworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM0NCAgICAgICAgICAgICAgMHgzMTU4CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzQ1ICAgICAgICAgICAgICAweDMxNTkKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNDYgICAgICAgICAgICAgIDB4MzE1QQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM0NyAgICAgICAgICAgICAgMHgzMTVCCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzQ4ICAgICAgICAgICAgICAweDMxNUMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNDkgICAgICAgICAgICAgIDB4MzE1RAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM1MCAgICAgICAgICAgICAgMHgzMTVFCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzUxICAgICAgICAgICAgICAweDMxNUYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNTIgICAgICAgICAgICAgIDB4MzE2MAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM1MyAgICAgICAgICAgICAgMHgzMTYxCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzU0ICAgICAgICAgICAgICAweDMxNjIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNTUgICAgICAgICAgICAgIDB4MzE2MworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM1NiAgICAgICAgICAgICAgMHgzMTY0CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzU3ICAgICAgICAgICAgICAweDMxNjUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNTggICAgICAgICAgICAgIDB4MzE2NgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM1OSAgICAgICAgICAgICAgMHgzMTY3CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzYwICAgICAgICAgICAgICAweDMxNjgKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNjEgICAgICAgICAgICAgIDB4MzE2OQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM2MiAgICAgICAgICAgICAgMHgzMTZBCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzYzICAgICAgICAgICAgICAweDMxNkIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNjQgICAgICAgICAgICAgIDB4MzE2QworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM2NSAgICAgICAgICAgICAgMHgzMTZECisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzY2ICAgICAgICAgICAgICAweDMxNkUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNjcgICAgICAgICAgICAgIDB4MzE2RgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM2OCAgICAgICAgICAgICAgMHgzMTcwCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzY5ICAgICAgICAgICAgICAweDMxNzEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNzAgICAgICAgICAgICAgIDB4MzE3MgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM3MSAgICAgICAgICAgICAgMHgzMTczCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzcyICAgICAgICAgICAgICAweDMxNzQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNzMgICAgICAgICAgICAgIDB4MzE3NQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM3NCAgICAgICAgICAgICAgMHgzMTc2CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzc1ICAgICAgICAgICAgICAweDMxNzcKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNzYgICAgICAgICAgICAgIDB4MzE3OAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM3NyAgICAgICAgICAgICAgMHgzMTc5CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzc4ICAgICAgICAgICAgICAweDMxN0EKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNzkgICAgICAgICAgICAgIDB4MzE3QgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM4MCAgICAgICAgICAgICAgMHgzMTdDCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzgxICAgICAgICAgICAgICAweDMxN0QKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zODIgICAgICAgICAgICAgIDB4MzE3RQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM4MyAgICAgICAgICAgICAgMHgzMTdGCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzg0ICAgICAgICAgICAgICAweDMxODAKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zODUgICAgICAgICAgICAgIDB4MzE4MQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM4NiAgICAgICAgICAgICAgMHgzMTgyCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzg3ICAgICAgICAgICAgICAweDMxODMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zODggICAgICAgICAgICAgIDB4MzE4NAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM4OSAgICAgICAgICAgICAgMHgzMTg1CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzkwICAgICAgICAgICAgICAweDMxODYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zOTEgICAgICAgICAgICAgIDB4MzE4NworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM5MiAgICAgICAgICAgICAgMHgzMTg4CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzkzICAgICAgICAgICAgICAweDMxODkKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zOTQgICAgICAgICAgICAgIDB4MzE4QQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM5NSAgICAgICAgICAgICAgMHgzMThCCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzk2ICAgICAgICAgICAgICAweDMxOEMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zOTcgICAgICAgICAgICAgIDB4MzE4RAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM5OCAgICAgICAgICAgICAgMHgzMThFCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzk5ICAgICAgICAgICAgICAweDMxOEYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MDAgICAgICAgICAgICAgIDB4MzE5MAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQwMSAgICAgICAgICAgICAgMHgzMTkxCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDAyICAgICAgICAgICAgICAweDMxOTIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MDMgICAgICAgICAgICAgIDB4MzE5MworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQwNCAgICAgICAgICAgICAgMHgzMTk0CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDA1ICAgICAgICAgICAgICAweDMxOTUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MDYgICAgICAgICAgICAgIDB4MzE5NgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQwNyAgICAgICAgICAgICAgMHgzMTk3CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDA4ICAgICAgICAgICAgICAweDMxOTgKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MDkgICAgICAgICAgICAgIDB4MzE5OQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQxMCAgICAgICAgICAgICAgMHgzMTlBCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDExICAgICAgICAgICAgICAweDMxOUIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MTIgICAgICAgICAgICAgIDB4MzE5QworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQxMyAgICAgICAgICAgICAgMHgzMTlECisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDE0ICAgICAgICAgICAgICAweDMxOUUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MTUgICAgICAgICAgICAgIDB4MzE5RgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQxNiAgICAgICAgICAgICAgMHgzMUEwCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDE3ICAgICAgICAgICAgICAweDMxQTEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MTggICAgICAgICAgICAgIDB4MzFBMgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQxOSAgICAgICAgICAgICAgMHgzMUEzCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDIwICAgICAgICAgICAgICAweDMxQTQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MjEgICAgICAgICAgICAgIDB4MzFBNQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQyMiAgICAgICAgICAgICAgMHgzMUE2CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDIzICAgICAgICAgICAgICAweDMxQTcKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MjQgICAgICAgICAgICAgIDB4MzFBOAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQyNSAgICAgICAgICAgICAgMHgzMUE5CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDI2ICAgICAgICAgICAgICAweDMxQUEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MjcgICAgICAgICAgICAgIDB4MzFBQgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQyOCAgICAgICAgICAgICAgMHgzMUFDCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDI5ICAgICAgICAgICAgICAweDMxQUQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MzAgICAgICAgICAgICAgIDB4MzFBRQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQzMSAgICAgICAgICAgICAgMHgzMUFGCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDMyICAgICAgICAgICAgICAweDMxQjAKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MzMgICAgICAgICAgICAgIDB4MzFCMQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQzNCAgICAgICAgICAgICAgMHgzMUIyCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDM1ICAgICAgICAgICAgICAweDMxQjMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MzYgICAgICAgICAgICAgIDB4MzFCNAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQzNyAgICAgICAgICAgICAgMHgzMUI1CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDM4ICAgICAgICAgICAgICAweDMxQjYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MzkgICAgICAgICAgICAgIDB4MzFCNworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ0MCAgICAgICAgICAgICAgMHgzMUI4CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDQxICAgICAgICAgICAgICAweDMxQjkKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NDIgICAgICAgICAgICAgIDB4MzFCQQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ0MyAgICAgICAgICAgICAgMHgzMUJCCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDQ0ICAgICAgICAgICAgICAweDMxQkMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NDUgICAgICAgICAgICAgIDB4MzFCRAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ0NiAgICAgICAgICAgICAgMHgzMUJFCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDQ3ICAgICAgICAgICAgICAweDMxQkYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NDggICAgICAgICAgICAgIDB4MzFDMAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ0OSAgICAgICAgICAgICAgMHgzMUMxCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDUwICAgICAgICAgICAgICAweDMxQzIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NTEgICAgICAgICAgICAgIDB4MzFDMworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ1MiAgICAgICAgICAgICAgMHgzMUM0CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDUzICAgICAgICAgICAgICAweDMxQzUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NTQgICAgICAgICAgICAgIDB4MzFDNgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ1NSAgICAgICAgICAgICAgMHgzMUM3CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDU2ICAgICAgICAgICAgICAweDMxQzgKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NTcgICAgICAgICAgICAgIDB4MzFDOQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ1OCAgICAgICAgICAgICAgMHgzMUNBCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDU5ICAgICAgICAgICAgICAweDMxQ0IKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NjAgICAgICAgICAgICAgIDB4MzFDQworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ2MSAgICAgICAgICAgICAgMHgzMUNECisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDYyICAgICAgICAgICAgICAweDMxQ0UKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NjMgICAgICAgICAgICAgIDB4MzFDRgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ2NCAgICAgICAgICAgICAgMHgzMUQwCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDY1ICAgICAgICAgICAgICAweDMxRDEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NjYgICAgICAgICAgICAgIDB4MzFEMgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ2NyAgICAgICAgICAgICAgMHgzMUQzCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDY4ICAgICAgICAgICAgICAweDMxRDQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NjkgICAgICAgICAgICAgIDB4MzFENQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ3MCAgICAgICAgICAgICAgMHgzMUQ2CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDcxICAgICAgICAgICAgICAweDMxRDcKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NzIgICAgICAgICAgICAgIDB4MzFEOAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ3MyAgICAgICAgICAgICAgMHgzMUQ5CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDc0ICAgICAgICAgICAgICAweDMxREEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NzUgICAgICAgICAgICAgIDB4MzFEQgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ3NiAgICAgICAgICAgICAgMHgzMURDCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDc3ICAgICAgICAgICAgICAweDMxREQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NzggICAgICAgICAgICAgIDB4MzFERQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ3OSAgICAgICAgICAgICAgMHgzMURGCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDgwICAgICAgICAgICAgICAweDMxRTAKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80ODEgICAgICAgICAgICAgIDB4MzFFMQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ4MiAgICAgICAgICAgICAgMHgzMUUyCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDgzICAgICAgICAgICAgICAweDMxRTMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80ODQgICAgICAgICAgICAgIDB4MzFFNAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ4NSAgICAgICAgICAgICAgMHgzMUU1CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDg2ICAgICAgICAgICAgICAweDMxRTYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80ODcgICAgICAgICAgICAgIDB4MzFFNworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ4OCAgICAgICAgICAgICAgMHgzMUU4CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDg5ICAgICAgICAgICAgICAweDMxRTkKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80OTAgICAgICAgICAgICAgIDB4MzFFQQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ5MSAgICAgICAgICAgICAgMHgzMUVCCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDkyICAgICAgICAgICAgICAweDMxRUMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80OTMgICAgICAgICAgICAgIDB4MzFFRAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ5NCAgICAgICAgICAgICAgMHgzMUVFCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDk1ICAgICAgICAgICAgICAweDMxRUYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80OTYgICAgICAgICAgICAgIDB4MzFGMAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ5NyAgICAgICAgICAgICAgMHgzMUYxCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDk4ICAgICAgICAgICAgICAweDMxRjIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80OTkgICAgICAgICAgICAgIDB4MzFGMworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzUwMCAgICAgICAgICAgICAgMHgzMUY0CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNTAxICAgICAgICAgICAgICAweDMxRjUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl81MDIgICAgICAgICAgICAgIDB4MzFGNgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzUwMyAgICAgICAgICAgICAgMHgzMUY3CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNTA0ICAgICAgICAgICAgICAweDMxRjgKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl81MDUgICAgICAgICAgICAgIDB4MzFGOQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzUwNiAgICAgICAgICAgICAgMHgzMUZBCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNTA3ICAgICAgICAgICAgICAweDMxRkIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl81MDggICAgICAgICAgICAgIDB4MzFGQworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzUwOSAgICAgICAgICAgICAgMHgzMUZECisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNTEwICAgICAgICAgICAgICAweDMxRkUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl81MTEgICAgICAgICAgICAgIDB4MzFGRgorCisjZGVmaW5lIFdNODk5NF9SRUdJU1RFUl9DT1VOVCAgICAgICAgICAgICAgICAgICA3MzYKKyNkZWZpbmUgV004OTk0X01BWF9SRUdJU1RFUiAgICAgICAgICAgICAgICAgICAgIDB4MzFGRgorI2RlZmluZSBXTTg5OTRfTUFYX0NBQ0hFRF9SRUdJU1RFUiAgICAgICAgICAgICAgMHg3NDkKKworLyoKKyAqIEZpZWxkIERlZmluaXRpb25zLgorICovCisKKy8qCisgKiBSMCAoMHgwMCkgLSBTb2Z0d2FyZSBSZXNldAorICovCisjZGVmaW5lIFdNODk5NF9TV19SRVNFVF9NQVNLICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIFNXX1JFU0VUIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9TV19SRVNFVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFNXX1JFU0VUIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9TV19SRVNFVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIFNXX1JFU0VUIC0gWzE1OjBdICovCisKKy8qCisgKiBSMSAoMHgwMSkgLSBQb3dlciBNYW5hZ2VtZW50ICgxKQorICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRSX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIFNQS09VVFJfRU5BICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIFNQS09VVFJfRU5BICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgMTMgIC8qIFNQS09VVFJfRU5BICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS09VVFJfRU5BICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRMX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIFNQS09VVExfRU5BICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIFNQS09VVExfRU5BICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgMTIgIC8qIFNQS09VVExfRU5BICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS09VVExfRU5BICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDJfRU5BICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIEhQT1VUMl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogSFBPVVQyX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQyX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDExICAvKiBIUE9VVDJfRU5BICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMUxfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogSFBPVVQxTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMUxfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogSFBPVVQxTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMUxfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgOSAgLyogSFBPVVQxTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMUxfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQxTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMVJfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSFBPVVQxUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMVJfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSFBPVVQxUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMVJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgOCAgLyogSFBPVVQxUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMVJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQxUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JQ0IyX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTUlDQjJfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSUNCMl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIE1JQ0IyX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTUlDQjJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBNSUNCMl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JQ0IyX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDQjJfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSUNCMV9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIE1JQ0IxX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTUlDQjFfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBNSUNCMV9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JQ0IxX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTUlDQjFfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSUNCMV9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0IxX0VOQSAqLworI2RlZmluZSBXTTg5OTRfVk1JRF9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDA2ICAvKiBWTUlEX1NFTCAtIFsyOjFdICovCisjZGVmaW5lIFdNODk5NF9WTUlEX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFZNSURfU0VMIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTk0X1ZNSURfU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogVk1JRF9TRUwgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5OTRfQklBU19FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBCSUFTX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQklBU19FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBCSUFTX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQklBU19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBCSUFTX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQklBU19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCSUFTX0VOQSAqLworCisvKgorICogUjIgKDB4MDIpIC0gUG93ZXIgTWFuYWdlbWVudCAoMikKKyAqLworI2RlZmluZSBXTTg5OTRfVFNIVVRfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBUU0hVVF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X1RTSFVUX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogVFNIVVRfRU5BICovCisjZGVmaW5lIFdNODk5NF9UU0hVVF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIFRTSFVUX0VOQSAqLworI2RlZmluZSBXTTg5OTRfVFNIVVRfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBUU0hVVF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X1RTSFVUX09QRElTICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogVFNIVVRfT1BESVMgKi8KKyNkZWZpbmUgV004OTk0X1RTSFVUX09QRElTX01BU0sgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogVFNIVVRfT1BESVMgKi8KKyNkZWZpbmUgV004OTk0X1RTSFVUX09QRElTX1NISUZUICAgICAgICAgICAgICAgICAgICAxMyAgLyogVFNIVVRfT1BESVMgKi8KKyNkZWZpbmUgV004OTk0X1RTSFVUX09QRElTX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogVFNIVVRfT1BESVMgKi8KKyNkZWZpbmUgV004OTk0X09QQ0xLX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogT1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NF9PUENMS19FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIE9QQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTRfT1BDTEtfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDExICAvKiBPUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTk0X09QQ0xLX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogT1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSVhJTkxfRU5BICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIE1JWElOTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JWElOTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogTUlYSU5MX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTUlYSU5MX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBNSVhJTkxfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSVhJTkxfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JWElOTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JWElOUl9FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTUlYSU5SX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTUlYSU5SX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBNSVhJTlJfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSVhJTlJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDggIC8qIE1JWElOUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JWElOUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlYSU5SX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSU4yTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTjJMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSU4yTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTjJMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSU4yTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBJTjJMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSU4yTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTjJMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTjFMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTjFMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBJTjFMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTjFMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSU4yUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTjJSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSU4yUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTjJSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSU4yUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBJTjJSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSU4yUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTjJSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTjFSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTjFSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBJTjFSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTjFSX0VOQSAqLworCisvKgorICogUjMgKDB4MDMpIC0gUG93ZXIgTWFuYWdlbWVudCAoMykKKyAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDFOX0VOQSAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBMSU5FT1VUMU5fRU5BICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMU5fRU5BX01BU0sgICAgICAgICAgICAgICAweDIwMDAgIC8qIExJTkVPVVQxTl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQxTl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAxMyAgLyogTElORU9VVDFOX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDFOX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUMU5fRU5BICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMVBfRU5BICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIExJTkVPVVQxUF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQxUF9FTkFfTUFTSyAgICAgICAgICAgICAgIDB4MTAwMCAgLyogTElORU9VVDFQX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDFQX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDEyICAvKiBMSU5FT1VUMVBfRU5BICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMVBfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVQxUF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyTl9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogTElORU9VVDJOX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDJOX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwODAwICAvKiBMSU5FT1VUMk5fRU5BICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMk5fRU5BX1NISUZUICAgICAgICAgICAgICAgICAgMTEgIC8qIExJTkVPVVQyTl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyTl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVDJOX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDJQX0VOQSAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBMSU5FT1VUMlBfRU5BICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMlBfRU5BX01BU0sgICAgICAgICAgICAgICAweDA0MDAgIC8qIExJTkVPVVQyUF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyUF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAxMCAgLyogTElORU9VVDJQX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDJQX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUMlBfRU5BICovCisjZGVmaW5lIFdNODk5NF9TUEtSVk9MX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIFNQS1JWT0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9TUEtSVk9MX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIFNQS1JWT0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9TUEtSVk9MX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDkgIC8qIFNQS1JWT0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9TUEtSVk9MX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS1JWT0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9TUEtMVk9MX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFNQS0xWT0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9TUEtMVk9MX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFNQS0xWT0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9TUEtMVk9MX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDggIC8qIFNQS0xWT0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9TUEtMVk9MX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS0xWT0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMVk9MX0VOQSAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIE1JWE9VVExWT0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMVk9MX0VOQV9NQVNLICAgICAgICAgICAgICAweDAwODAgIC8qIE1JWE9VVExWT0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMVk9MX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDcgIC8qIE1JWE9VVExWT0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMVk9MX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIE1JWE9VVExWT0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSVk9MX0VOQSAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIE1JWE9VVFJWT0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSVk9MX0VOQV9NQVNLICAgICAgICAgICAgICAweDAwNDAgIC8qIE1JWE9VVFJWT0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSVk9MX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDYgIC8qIE1JWE9VVFJWT0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSVk9MX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIE1JWE9VVFJWT0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIE1JWE9VVExfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIE1JWE9VVExfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDUgIC8qIE1JWE9VVExfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JWE9VVExfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIE1JWE9VVFJfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIE1JWE9VVFJfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIE1JWE9VVFJfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JWE9VVFJfRU5BICovCisKKy8qCisgKiBSNCAoMHgwNCkgLSBQb3dlciBNYW5hZ2VtZW50ICg0KQorICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDTF9FTkEgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEFJRjJBRENMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ0xfRU5BX01BU0sgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBBSUYyQURDTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAxMyAgLyogQUlGMkFEQ0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJBRENMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ1JfRU5BICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBBSUYyQURDUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENSX0VOQV9NQVNLICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogQUlGMkFEQ1JfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgMTIgIC8qIEFJRjJBRENSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ1JfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYyQURDUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyTF9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogQUlGMUFEQzJMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzJMX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwODAwICAvKiBBSUYxQURDMkxfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMkxfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgMTEgIC8qIEFJRjFBREMyTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMUFEQzJMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzJSX0VOQSAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBBSUYxQURDMlJfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMlJfRU5BX01BU0sgICAgICAgICAgICAgICAweDA0MDAgIC8qIEFJRjFBREMyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAxMCAgLyogQUlGMUFEQzJSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzJSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxQURDMlJfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMUxfRU5BICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEFJRjFBREMxTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxTF9FTkFfTUFTSyAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQUlGMUFEQzFMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICA5ICAvKiBBSUYxQURDMUxfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMUxfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFBREMxTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxUl9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMUFEQzFSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFSX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYxQURDMVJfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMVJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjFBREMxUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMUFEQzFSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfRE1JQzJMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBETUlDMkxfRU5BICovCisjZGVmaW5lIFdNODk5NF9ETUlDMkxfRU5BX01BU0sgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIERNSUMyTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0RNSUMyTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNSAgLyogRE1JQzJMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfRE1JQzJMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBETUlDMkxfRU5BICovCisjZGVmaW5lIFdNODk5NF9ETUlDMlJfRU5BICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERNSUMyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0RNSUMyUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogRE1JQzJSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfRE1JQzJSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBETUlDMlJfRU5BICovCisjZGVmaW5lIFdNODk5NF9ETUlDMlJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERNSUMyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0RNSUMxTF9FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogRE1JQzFMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfRE1JQzFMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBETUlDMUxfRU5BICovCisjZGVmaW5lIFdNODk5NF9ETUlDMUxfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIERNSUMxTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0RNSUMxTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogRE1JQzFMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfRE1JQzFSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBETUlDMVJfRU5BICovCisjZGVmaW5lIFdNODk5NF9ETUlDMVJfRU5BX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERNSUMxUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0RNSUMxUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMiAgLyogRE1JQzFSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfRE1JQzFSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBETUlDMVJfRU5BICovCisjZGVmaW5lIFdNODk5NF9BRENMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQ0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9BRENMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQ0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9BRENMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9BRENMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9BRENSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFEQ1JfRU5BICovCisjZGVmaW5lIFdNODk5NF9BRENSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFEQ1JfRU5BICovCisjZGVmaW5lIFdNODk5NF9BRENSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFEQ1JfRU5BICovCisjZGVmaW5lIFdNODk5NF9BRENSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ1JfRU5BICovCisKKy8qCisgKiBSNSAoMHgwNSkgLSBQb3dlciBNYW5hZ2VtZW50ICg1KQorICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9FTkEgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEFJRjJEQUNMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ0xfRU5BX01BU0sgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBBSUYyREFDTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAxMyAgLyogQUlGMkRBQ0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJEQUNMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ1JfRU5BICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBBSUYyREFDUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNSX0VOQV9NQVNLICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogQUlGMkRBQ1JfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgMTIgIC8qIEFJRjJEQUNSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ1JfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYyREFDUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyTF9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogQUlGMURBQzJMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJMX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwODAwICAvKiBBSUYxREFDMkxfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMkxfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgMTEgIC8qIEFJRjFEQUMyTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzJMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJSX0VOQSAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBBSUYxREFDMlJfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMlJfRU5BX01BU0sgICAgICAgICAgICAgICAweDA0MDAgIC8qIEFJRjFEQUMyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAxMCAgLyogQUlGMURBQzJSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxREFDMlJfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMUxfRU5BICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEFJRjFEQUMxTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxTF9FTkFfTUFTSyAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQUlGMURBQzFMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICA5ICAvKiBBSUYxREFDMUxfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMUxfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMxTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxUl9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMURBQzFSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFSX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYxREFDMVJfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMVJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjFEQUMxUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzFSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfREFDMkxfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQUMyTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogREFDMkxfRU5BICovCisjZGVmaW5lIFdNODk5NF9EQUMyTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIERBQzJMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfREFDMkxfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMyTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogREFDMlJfRU5BICovCisjZGVmaW5lIFdNODk5NF9EQUMyUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERBQzJSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfREFDMlJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBEQUMyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDMlJfRU5BICovCisjZGVmaW5lIFdNODk5NF9EQUMxTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERBQzFMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfREFDMUxfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQUMxTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDMUxfRU5BICovCisjZGVmaW5lIFdNODk5NF9EQUMxTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzFMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfREFDMVJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUMxUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDMVJfRU5BICovCisjZGVmaW5lIFdNODk5NF9EQUMxUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERBQzFSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfREFDMVJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMxUl9FTkEgKi8KKworLyoKKyAqIFI2ICgweDA2KSAtIFBvd2VyIE1hbmFnZW1lbnQgKDYpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjNfVFJJICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQUlGM19UUkkgKi8KKyNkZWZpbmUgV004OTk0X0FJRjNfVFJJX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQUlGM19UUkkgKi8KKyNkZWZpbmUgV004OTk0X0FJRjNfVFJJX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogQUlGM19UUkkgKi8KKyNkZWZpbmUgV004OTk0X0FJRjNfVFJJX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGM19UUkkgKi8KKyNkZWZpbmUgV004OTk0X0FJRjNfQURDREFUX1NSQ19NQVNLICAgICAgICAgICAgIDB4MDAxOCAgLyogQUlGM19BRENEQVRfU1JDIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk0X0FJRjNfQURDREFUX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgMyAgLyogQUlGM19BRENEQVRfU1JDIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk0X0FJRjNfQURDREFUX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgMiAgLyogQUlGM19BRENEQVRfU1JDIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfQURDREFUX1NSQyAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMl9BRENEQVRfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYyX0FEQ0RBVF9TUkNfTUFTSyAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjJfQURDREFUX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9BRENEQVRfU1JDX1NISUZUICAgICAgICAgICAgICAgICAyICAvKiBBSUYyX0FEQ0RBVF9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfQURDREFUX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogQUlGMl9BRENEQVRfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYyX0RBQ0RBVF9TUkMgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjJfREFDREFUX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9EQUNEQVRfU1JDX01BU0sgICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYyX0RBQ0RBVF9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfREFDREFUX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgMSAgLyogQUlGMl9EQUNEQVRfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYyX0RBQ0RBVF9TUkNfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJfREFDREFUX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9EQUNEQVRfU1JDICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxX0RBQ0RBVF9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfREFDREFUX1NSQ19NQVNLICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMV9EQUNEQVRfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQ0RBVF9TUkNfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFfREFDREFUX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9EQUNEQVRfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBBSUYxX0RBQ0RBVF9TUkMgKi8KKworLyoKKyAqIFIyMSAoMHgxNSkgLSBJbnB1dCBNaXhlciAoMSkKKyAqLworI2RlZmluZSBXTTg5OTRfSU4xUlBfTUlYSU5SX0JPT1NUICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJTjFSUF9NSVhJTlJfQk9PU1QgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJQX01JWElOUl9CT09TVF9NQVNLICAgICAgICAgIDB4MDEwMCAgLyogSU4xUlBfTUlYSU5SX0JPT1NUICovCisjZGVmaW5lIFdNODk5NF9JTjFSUF9NSVhJTlJfQk9PU1RfU0hJRlQgICAgICAgICAgICAgIDggIC8qIElOMVJQX01JWElOUl9CT09TVCAqLworI2RlZmluZSBXTTg5OTRfSU4xUlBfTUlYSU5SX0JPT1NUX1dJRFRIICAgICAgICAgICAgICAxICAvKiBJTjFSUF9NSVhJTlJfQk9PU1QgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxQX01JWElOTF9CT09TVCAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU4xTFBfTUlYSU5MX0JPT1NUICovCisjZGVmaW5lIFdNODk5NF9JTjFMUF9NSVhJTkxfQk9PU1RfTUFTSyAgICAgICAgICAweDAwODAgIC8qIElOMUxQX01JWElOTF9CT09TVCAqLworI2RlZmluZSBXTTg5OTRfSU4xTFBfTUlYSU5MX0JPT1NUX1NISUZUICAgICAgICAgICAgICA3ICAvKiBJTjFMUF9NSVhJTkxfQk9PU1QgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxQX01JWElOTF9CT09TVF9XSURUSCAgICAgICAgICAgICAgMSAgLyogSU4xTFBfTUlYSU5MX0JPT1NUICovCisjZGVmaW5lIFdNODk5NF9JTlBVVFNfQ0xBTVAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIElOUFVUU19DTEFNUCAqLworI2RlZmluZSBXTTg5OTRfSU5QVVRTX0NMQU1QX01BU0sgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTlBVVFNfQ0xBTVAgKi8KKyNkZWZpbmUgV004OTk0X0lOUFVUU19DTEFNUF9TSElGVCAgICAgICAgICAgICAgICAgICAgNiAgLyogSU5QVVRTX0NMQU1QICovCisjZGVmaW5lIFdNODk5NF9JTlBVVFNfQ0xBTVBfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIElOUFVUU19DTEFNUCAqLworCisvKgorICogUjI0ICgweDE4KSAtIExlZnQgTGluZSBJbnB1dCAxJjIgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk0X0lOMV9WVSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSU4xX1ZVICovCisjZGVmaW5lIFdNODk5NF9JTjFfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIElOMV9WVSAqLworI2RlZmluZSBXTTg5OTRfSU4xX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBJTjFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0lOMV9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU4xX1ZVICovCisjZGVmaW5lIFdNODk5NF9JTjFMX01VVEUgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIElOMUxfTVVURSAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9NVVRFX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTjFMX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogSU4xTF9NVVRFICovCisjZGVmaW5lIFdNODk5NF9JTjFMX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMUxfTVVURSAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9aQyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTjFMX1pDICovCisjZGVmaW5lIFdNODk5NF9JTjFMX1pDX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIElOMUxfWkMgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogSU4xTF9aQyAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9aQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTjFMX1pDICovCisjZGVmaW5lIFdNODk5NF9JTjFMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIElOMUxfVk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogSU4xTF9WT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBJTjFMX1ZPTCAtIFs0OjBdICovCisKKy8qCisgKiBSMjUgKDB4MTkpIC0gTGVmdCBMaW5lIElucHV0IDMmNCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTRfSU4yX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJTjJfVlUgKi8KKyNkZWZpbmUgV004OTk0X0lOMl9WVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSU4yX1ZVICovCisjZGVmaW5lIFdNODk5NF9JTjJfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIElOMl9WVSAqLworI2RlZmluZSBXTTg5OTRfSU4yX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTjJfVlUgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxfTVVURSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU4yTF9NVVRFICovCisjZGVmaW5lIFdNODk5NF9JTjJMX01VVEVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIElOMkxfTVVURSAqLworI2RlZmluZSBXTTg5OTRfSU4yTF9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBJTjJMX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU4yTF9NVVRFICovCisjZGVmaW5lIFdNODk5NF9JTjJMX1pDICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIElOMkxfWkMgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxfWkNfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU4yTF9aQyAqLworI2RlZmluZSBXTTg5OTRfSU4yTF9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBJTjJMX1pDICovCisjZGVmaW5lIFdNODk5NF9JTjJMX1pDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMkxfWkMgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogSU4yTF9WT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTRfSU4yTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBJTjJMX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NF9JTjJMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIElOMkxfVk9MIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIyNiAoMHgxQSkgLSBSaWdodCBMaW5lIElucHV0IDEmMiBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTRfSU4xX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJTjFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0lOMV9WVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSU4xX1ZVICovCisjZGVmaW5lIFdNODk5NF9JTjFfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIElOMV9WVSAqLworI2RlZmluZSBXTTg5OTRfSU4xX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTjFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfTVVURSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU4xUl9NVVRFICovCisjZGVmaW5lIFdNODk5NF9JTjFSX01VVEVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIElOMVJfTVVURSAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBJTjFSX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU4xUl9NVVRFICovCisjZGVmaW5lIFdNODk5NF9JTjFSX1pDICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIElOMVJfWkMgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfWkNfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU4xUl9aQyAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBJTjFSX1pDICovCisjZGVmaW5lIFdNODk5NF9JTjFSX1pDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMVJfWkMgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogSU4xUl9WT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBJTjFSX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NF9JTjFSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIElOMVJfVk9MIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIyNyAoMHgxQikgLSBSaWdodCBMaW5lIElucHV0IDMmNCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTRfSU4yX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJTjJfVlUgKi8KKyNkZWZpbmUgV004OTk0X0lOMl9WVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSU4yX1ZVICovCisjZGVmaW5lIFdNODk5NF9JTjJfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIElOMl9WVSAqLworI2RlZmluZSBXTTg5OTRfSU4yX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTjJfVlUgKi8KKyNkZWZpbmUgV004OTk0X0lOMlJfTVVURSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU4yUl9NVVRFICovCisjZGVmaW5lIFdNODk5NF9JTjJSX01VVEVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIElOMlJfTVVURSAqLworI2RlZmluZSBXTTg5OTRfSU4yUl9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBJTjJSX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0lOMlJfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU4yUl9NVVRFICovCisjZGVmaW5lIFdNODk5NF9JTjJSX1pDICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIElOMlJfWkMgKi8KKyNkZWZpbmUgV004OTk0X0lOMlJfWkNfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU4yUl9aQyAqLworI2RlZmluZSBXTTg5OTRfSU4yUl9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBJTjJSX1pDICovCisjZGVmaW5lIFdNODk5NF9JTjJSX1pDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMlJfWkMgKi8KKyNkZWZpbmUgV004OTk0X0lOMlJfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogSU4yUl9WT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTRfSU4yUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBJTjJSX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NF9JTjJSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIElOMlJfVk9MIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIyOCAoMHgxQykgLSBMZWZ0IE91dHB1dCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxX1ZVICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBIUE9VVDFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMV9WVV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSFBPVVQxX1ZVICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEhQT1VUMV9WVSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMUxfWkMgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBPVVQxTF9aQyAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxTF9aQ19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUE9VVDFMX1pDICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFMX1pDX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEhQT1VUMUxfWkMgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMUxfWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQxTF9aQyAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxTF9NVVRFX04gICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBIUE9VVDFMX01VVEVfTiAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxTF9NVVRFX05fTUFTSyAgICAgICAgICAgICAgMHgwMDQwICAvKiBIUE9VVDFMX01VVEVfTiAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxTF9NVVRFX05fU0hJRlQgICAgICAgICAgICAgICAgICA2ICAvKiBIUE9VVDFMX01VVEVfTiAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxTF9NVVRFX05fV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFMX01VVEVfTiAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDNGICAvKiBIUE9VVDFMX1ZPTCAtIFs1OjBdICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEhQT1VUMUxfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMUxfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgNiAgLyogSFBPVVQxTF9WT0wgLSBbNTowXSAqLworCisvKgorICogUjI5ICgweDFEKSAtIFJpZ2h0IE91dHB1dCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxX1ZVICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBIUE9VVDFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMV9WVV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSFBPVVQxX1ZVICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEhQT1VUMV9WVSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMVJfWkMgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBPVVQxUl9aQyAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxUl9aQ19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUE9VVDFSX1pDICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFSX1pDX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEhQT1VUMVJfWkMgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMVJfWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQxUl9aQyAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxUl9NVVRFX04gICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBIUE9VVDFSX01VVEVfTiAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxUl9NVVRFX05fTUFTSyAgICAgICAgICAgICAgMHgwMDQwICAvKiBIUE9VVDFSX01VVEVfTiAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxUl9NVVRFX05fU0hJRlQgICAgICAgICAgICAgICAgICA2ICAvKiBIUE9VVDFSX01VVEVfTiAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxUl9NVVRFX05fV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFSX01VVEVfTiAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDNGICAvKiBIUE9VVDFSX1ZPTCAtIFs1OjBdICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEhQT1VUMVJfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMVJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgNiAgLyogSFBPVVQxUl9WT0wgLSBbNTowXSAqLworCisvKgorICogUjMwICgweDFFKSAtIExpbmUgT3V0cHV0cyBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDFOX01VVEUgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMSU5FT1VUMU5fTVVURSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDFOX01VVEVfTUFTSyAgICAgICAgICAgICAgMHgwMDQwICAvKiBMSU5FT1VUMU5fTVVURSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDFOX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICA2ICAvKiBMSU5FT1VUMU5fTVVURSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDFOX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUMU5fTVVURSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDFQX01VVEUgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBMSU5FT1VUMVBfTVVURSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDFQX01VVEVfTUFTSyAgICAgICAgICAgICAgMHgwMDIwICAvKiBMSU5FT1VUMVBfTVVURSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDFQX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICA1ICAvKiBMSU5FT1VUMVBfTVVURSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDFQX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUMVBfTVVURSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDFfVk9MICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMSU5FT1VUMV9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQxX1ZPTF9NQVNLICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTElORU9VVDFfVk9MICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMV9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgIDQgIC8qIExJTkVPVVQxX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDFfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUMV9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyTl9NVVRFICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTElORU9VVDJOX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyTl9NVVRFX01BU0sgICAgICAgICAgICAgIDB4MDAwNCAgLyogTElORU9VVDJOX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyTl9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgMiAgLyogTElORU9VVDJOX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyTl9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVDJOX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyUF9NVVRFICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTElORU9VVDJQX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyUF9NVVRFX01BU0sgICAgICAgICAgICAgIDB4MDAwMiAgLyogTElORU9VVDJQX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyUF9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVDJQX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyUF9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVDJQX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyX1ZPTCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTElORU9VVDJfVk9MICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMl9WT0xfTUFTSyAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExJTkVPVVQyX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAwICAvKiBMSU5FT1VUMl9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVDJfVk9MICovCisKKy8qCisgKiBSMzEgKDB4MUYpIC0gSFBPVVQyIFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDJfTVVURSAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEhQT1VUMl9NVVRFICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDJfTVVURV9NQVNLICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEhQT1VUMl9NVVRFICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDJfTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEhQT1VUMl9NVVRFICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDJfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMl9NVVRFICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDJfVk9MICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEhQT1VUMl9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSFBPVVQyX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQyX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBIUE9VVDJfVk9MICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMl9WT0wgKi8KKworLyoKKyAqIFIzMiAoMHgyMCkgLSBMZWZ0IE9QR0EgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVF9WVSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTUlYT1VUX1ZVICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIE1JWE9VVF9WVSAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBNSVhPVVRfVlUgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlYT1VUX1ZVICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMX1pDICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIE1JWE9VVExfWkMgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfWkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTUlYT1VUTF9aQyAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTF9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBNSVhPVVRMX1pDICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMX1pDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JWE9VVExfWkMgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfTVVURV9OICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTUlYT1VUTF9NVVRFX04gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfTVVURV9OX01BU0sgICAgICAgICAgICAgIDB4MDA0MCAgLyogTUlYT1VUTF9NVVRFX04gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfTVVURV9OX1NISUZUICAgICAgICAgICAgICAgICAgNiAgLyogTUlYT1VUTF9NVVRFX04gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfTVVURV9OX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogTUlYT1VUTF9NVVRFX04gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfVk9MX01BU0sgICAgICAgICAgICAgICAgIDB4MDAzRiAgLyogTUlYT1VUTF9WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBNSVhPVVRMX1ZPTCAtIFs1OjBdICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDYgIC8qIE1JWE9VVExfVk9MIC0gWzU6MF0gKi8KKworLyoKKyAqIFIzMyAoMHgyMSkgLSBSaWdodCBPUEdBIFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRfVlUgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIE1JWE9VVF9WVSAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBNSVhPVVRfVlUgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVF9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogTUlYT1VUX1ZVICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JWE9VVF9WVSAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUUl9aQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBNSVhPVVRSX1pDICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX1pDX01BU0sgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIE1JWE9VVFJfWkMgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNyAgLyogTUlYT1VUUl9aQyAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUUl9aQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSVhPVVRSX1pDICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX01VVEVfTiAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIE1JWE9VVFJfTVVURV9OICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX01VVEVfTl9NQVNLICAgICAgICAgICAgICAweDAwNDAgIC8qIE1JWE9VVFJfTVVURV9OICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX01VVEVfTl9TSElGVCAgICAgICAgICAgICAgICAgIDYgIC8qIE1JWE9VVFJfTVVURV9OICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX01VVEVfTl9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIE1JWE9VVFJfTVVURV9OICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwM0YgIC8qIE1JWE9VVFJfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogTUlYT1VUUl9WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICA2ICAvKiBNSVhPVVRSX1ZPTCAtIFs1OjBdICovCisKKy8qCisgKiBSMzQgKDB4MjIpIC0gU1BLTUlYTCBBdHRlbnVhdGlvbgorICovCisjZGVmaW5lIFdNODk5NF9EQUMyTF9TUEtNSVhMX1ZPTCAgICAgICAgICAgICAgICAweDAwNDAgIC8qIERBQzJMX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5NF9EQUMyTF9TUEtNSVhMX1ZPTF9NQVNLICAgICAgICAgICAweDAwNDAgIC8qIERBQzJMX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5NF9EQUMyTF9TUEtNSVhMX1ZPTF9TSElGVCAgICAgICAgICAgICAgIDYgIC8qIERBQzJMX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5NF9EQUMyTF9TUEtNSVhMX1ZPTF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERBQzJMX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5NF9NSVhJTkxfU1BLTUlYTF9WT0wgICAgICAgICAgICAgICAweDAwMjAgIC8qIE1JWElOTF9TUEtNSVhMX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfTUlYSU5MX1NQS01JWExfVk9MX01BU0sgICAgICAgICAgMHgwMDIwICAvKiBNSVhJTkxfU1BLTUlYTF9WT0wgKi8KKyNkZWZpbmUgV004OTk0X01JWElOTF9TUEtNSVhMX1ZPTF9TSElGVCAgICAgICAgICAgICAgNSAgLyogTUlYSU5MX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5NF9NSVhJTkxfU1BLTUlYTF9WT0xfV0lEVEggICAgICAgICAgICAgIDEgIC8qIE1JWElOTF9TUEtNSVhMX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfSU4xTFBfU1BLTUlYTF9WT0wgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTjFMUF9TUEtNSVhMX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfSU4xTFBfU1BLTUlYTF9WT0xfTUFTSyAgICAgICAgICAgMHgwMDEwICAvKiBJTjFMUF9TUEtNSVhMX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfSU4xTFBfU1BLTUlYTF9WT0xfU0hJRlQgICAgICAgICAgICAgICA0ICAvKiBJTjFMUF9TUEtNSVhMX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfSU4xTFBfU1BLTUlYTF9WT0xfV0lEVEggICAgICAgICAgICAgICAxICAvKiBJTjFMUF9TUEtNSVhMX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTF9TUEtNSVhMX1ZPTCAgICAgICAgICAgICAgMHgwMDA4ICAvKiBNSVhPVVRMX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMX1NQS01JWExfVk9MX01BU0sgICAgICAgICAweDAwMDggIC8qIE1JWE9VVExfU1BLTUlYTF9WT0wgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfU1BLTUlYTF9WT0xfU0hJRlQgICAgICAgICAgICAgMyAgLyogTUlYT1VUTF9TUEtNSVhMX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTF9TUEtNSVhMX1ZPTF9XSURUSCAgICAgICAgICAgICAxICAvKiBNSVhPVVRMX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5NF9EQUMxTF9TUEtNSVhMX1ZPTCAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERBQzFMX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5NF9EQUMxTF9TUEtNSVhMX1ZPTF9NQVNLICAgICAgICAgICAweDAwMDQgIC8qIERBQzFMX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5NF9EQUMxTF9TUEtNSVhMX1ZPTF9TSElGVCAgICAgICAgICAgICAgIDIgIC8qIERBQzFMX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5NF9EQUMxTF9TUEtNSVhMX1ZPTF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERBQzFMX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5NF9TUEtNSVhMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIFNQS01JWExfVk9MIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk0X1NQS01JWExfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogU1BLTUlYTF9WT0wgLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTRfU1BLTUlYTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAyICAvKiBTUEtNSVhMX1ZPTCAtIFsxOjBdICovCisKKy8qCisgKiBSMzUgKDB4MjMpIC0gU1BLTUlYUiBBdHRlbnVhdGlvbgorICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRfQ0xBU1NBQiAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFNQS09VVF9DTEFTU0FCICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRfQ0xBU1NBQl9NQVNLICAgICAgICAgICAgICAweDAxMDAgIC8qIFNQS09VVF9DTEFTU0FCICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRfQ0xBU1NBQl9TSElGVCAgICAgICAgICAgICAgICAgIDggIC8qIFNQS09VVF9DTEFTU0FCICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRfQ0xBU1NBQl9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS09VVF9DTEFTU0FCICovCisjZGVmaW5lIFdNODk5NF9EQUMyUl9TUEtNSVhSX1ZPTCAgICAgICAgICAgICAgICAweDAwNDAgIC8qIERBQzJSX1NQS01JWFJfVk9MICovCisjZGVmaW5lIFdNODk5NF9EQUMyUl9TUEtNSVhSX1ZPTF9NQVNLICAgICAgICAgICAweDAwNDAgIC8qIERBQzJSX1NQS01JWFJfVk9MICovCisjZGVmaW5lIFdNODk5NF9EQUMyUl9TUEtNSVhSX1ZPTF9TSElGVCAgICAgICAgICAgICAgIDYgIC8qIERBQzJSX1NQS01JWFJfVk9MICovCisjZGVmaW5lIFdNODk5NF9EQUMyUl9TUEtNSVhSX1ZPTF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERBQzJSX1NQS01JWFJfVk9MICovCisjZGVmaW5lIFdNODk5NF9NSVhJTlJfU1BLTUlYUl9WT0wgICAgICAgICAgICAgICAweDAwMjAgIC8qIE1JWElOUl9TUEtNSVhSX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfTUlYSU5SX1NQS01JWFJfVk9MX01BU0sgICAgICAgICAgMHgwMDIwICAvKiBNSVhJTlJfU1BLTUlYUl9WT0wgKi8KKyNkZWZpbmUgV004OTk0X01JWElOUl9TUEtNSVhSX1ZPTF9TSElGVCAgICAgICAgICAgICAgNSAgLyogTUlYSU5SX1NQS01JWFJfVk9MICovCisjZGVmaW5lIFdNODk5NF9NSVhJTlJfU1BLTUlYUl9WT0xfV0lEVEggICAgICAgICAgICAgIDEgIC8qIE1JWElOUl9TUEtNSVhSX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfSU4xUlBfU1BLTUlYUl9WT0wgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTjFSUF9TUEtNSVhSX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfSU4xUlBfU1BLTUlYUl9WT0xfTUFTSyAgICAgICAgICAgMHgwMDEwICAvKiBJTjFSUF9TUEtNSVhSX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfSU4xUlBfU1BLTUlYUl9WT0xfU0hJRlQgICAgICAgICAgICAgICA0ICAvKiBJTjFSUF9TUEtNSVhSX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfSU4xUlBfU1BLTUlYUl9WT0xfV0lEVEggICAgICAgICAgICAgICAxICAvKiBJTjFSUF9TUEtNSVhSX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUUl9TUEtNSVhSX1ZPTCAgICAgICAgICAgICAgMHgwMDA4ICAvKiBNSVhPVVRSX1NQS01JWFJfVk9MICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX1NQS01JWFJfVk9MX01BU0sgICAgICAgICAweDAwMDggIC8qIE1JWE9VVFJfU1BLTUlYUl9WT0wgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfU1BLTUlYUl9WT0xfU0hJRlQgICAgICAgICAgICAgMyAgLyogTUlYT1VUUl9TUEtNSVhSX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUUl9TUEtNSVhSX1ZPTF9XSURUSCAgICAgICAgICAgICAxICAvKiBNSVhPVVRSX1NQS01JWFJfVk9MICovCisjZGVmaW5lIFdNODk5NF9EQUMxUl9TUEtNSVhSX1ZPTCAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERBQzFSX1NQS01JWFJfVk9MICovCisjZGVmaW5lIFdNODk5NF9EQUMxUl9TUEtNSVhSX1ZPTF9NQVNLICAgICAgICAgICAweDAwMDQgIC8qIERBQzFSX1NQS01JWFJfVk9MICovCisjZGVmaW5lIFdNODk5NF9EQUMxUl9TUEtNSVhSX1ZPTF9TSElGVCAgICAgICAgICAgICAgIDIgIC8qIERBQzFSX1NQS01JWFJfVk9MICovCisjZGVmaW5lIFdNODk5NF9EQUMxUl9TUEtNSVhSX1ZPTF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERBQzFSX1NQS01JWFJfVk9MICovCisjZGVmaW5lIFdNODk5NF9TUEtNSVhSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwMDMgIC8qIFNQS01JWFJfVk9MIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk0X1NQS01JWFJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogU1BLTUlYUl9WT0wgLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTRfU1BLTUlYUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAyICAvKiBTUEtNSVhSX1ZPTCAtIFsxOjBdICovCisKKy8qCisgKiBSMzYgKDB4MjQpIC0gU1BLT1VUIE1peGVycworICovCisjZGVmaW5lIFdNODk5NF9JTjJMUlBfVE9fU1BLT1VUTCAgICAgICAgICAgICAgICAweDAwMjAgIC8qIElOMkxSUF9UT19TUEtPVVRMICovCisjZGVmaW5lIFdNODk5NF9JTjJMUlBfVE9fU1BLT1VUTF9NQVNLICAgICAgICAgICAweDAwMjAgIC8qIElOMkxSUF9UT19TUEtPVVRMICovCisjZGVmaW5lIFdNODk5NF9JTjJMUlBfVE9fU1BLT1VUTF9TSElGVCAgICAgICAgICAgICAgIDUgIC8qIElOMkxSUF9UT19TUEtPVVRMICovCisjZGVmaW5lIFdNODk5NF9JTjJMUlBfVE9fU1BLT1VUTF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIElOMkxSUF9UT19TUEtPVVRMICovCisjZGVmaW5lIFdNODk5NF9TUEtNSVhMX1RPX1NQS09VVEwgICAgICAgICAgICAgICAweDAwMTAgIC8qIFNQS01JWExfVE9fU1BLT1VUTCAqLworI2RlZmluZSBXTTg5OTRfU1BLTUlYTF9UT19TUEtPVVRMX01BU0sgICAgICAgICAgMHgwMDEwICAvKiBTUEtNSVhMX1RPX1NQS09VVEwgKi8KKyNkZWZpbmUgV004OTk0X1NQS01JWExfVE9fU1BLT1VUTF9TSElGVCAgICAgICAgICAgICAgNCAgLyogU1BLTUlYTF9UT19TUEtPVVRMICovCisjZGVmaW5lIFdNODk5NF9TUEtNSVhMX1RPX1NQS09VVExfV0lEVEggICAgICAgICAgICAgIDEgIC8qIFNQS01JWExfVE9fU1BLT1VUTCAqLworI2RlZmluZSBXTTg5OTRfU1BLTUlYUl9UT19TUEtPVVRMICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBTUEtNSVhSX1RPX1NQS09VVEwgKi8KKyNkZWZpbmUgV004OTk0X1NQS01JWFJfVE9fU1BLT1VUTF9NQVNLICAgICAgICAgIDB4MDAwOCAgLyogU1BLTUlYUl9UT19TUEtPVVRMICovCisjZGVmaW5lIFdNODk5NF9TUEtNSVhSX1RPX1NQS09VVExfU0hJRlQgICAgICAgICAgICAgIDMgIC8qIFNQS01JWFJfVE9fU1BLT1VUTCAqLworI2RlZmluZSBXTTg5OTRfU1BLTUlYUl9UT19TUEtPVVRMX1dJRFRIICAgICAgICAgICAgICAxICAvKiBTUEtNSVhSX1RPX1NQS09VVEwgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxSUF9UT19TUEtPVVRSICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSU4yTFJQX1RPX1NQS09VVFIgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxSUF9UT19TUEtPVVRSX01BU0sgICAgICAgICAgIDB4MDAwNCAgLyogSU4yTFJQX1RPX1NQS09VVFIgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxSUF9UT19TUEtPVVRSX1NISUZUICAgICAgICAgICAgICAgMiAgLyogSU4yTFJQX1RPX1NQS09VVFIgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxSUF9UT19TUEtPVVRSX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogSU4yTFJQX1RPX1NQS09VVFIgKi8KKyNkZWZpbmUgV004OTk0X1NQS01JWExfVE9fU1BLT1VUUiAgICAgICAgICAgICAgIDB4MDAwMiAgLyogU1BLTUlYTF9UT19TUEtPVVRSICovCisjZGVmaW5lIFdNODk5NF9TUEtNSVhMX1RPX1NQS09VVFJfTUFTSyAgICAgICAgICAweDAwMDIgIC8qIFNQS01JWExfVE9fU1BLT1VUUiAqLworI2RlZmluZSBXTTg5OTRfU1BLTUlYTF9UT19TUEtPVVRSX1NISUZUICAgICAgICAgICAgICAxICAvKiBTUEtNSVhMX1RPX1NQS09VVFIgKi8KKyNkZWZpbmUgV004OTk0X1NQS01JWExfVE9fU1BLT1VUUl9XSURUSCAgICAgICAgICAgICAgMSAgLyogU1BLTUlYTF9UT19TUEtPVVRSICovCisjZGVmaW5lIFdNODk5NF9TUEtNSVhSX1RPX1NQS09VVFIgICAgICAgICAgICAgICAweDAwMDEgIC8qIFNQS01JWFJfVE9fU1BLT1VUUiAqLworI2RlZmluZSBXTTg5OTRfU1BLTUlYUl9UT19TUEtPVVRSX01BU0sgICAgICAgICAgMHgwMDAxICAvKiBTUEtNSVhSX1RPX1NQS09VVFIgKi8KKyNkZWZpbmUgV004OTk0X1NQS01JWFJfVE9fU1BLT1VUUl9TSElGVCAgICAgICAgICAgICAgMCAgLyogU1BLTUlYUl9UT19TUEtPVVRSICovCisjZGVmaW5lIFdNODk5NF9TUEtNSVhSX1RPX1NQS09VVFJfV0lEVEggICAgICAgICAgICAgIDEgIC8qIFNQS01JWFJfVE9fU1BLT1VUUiAqLworCisvKgorICogUjM3ICgweDI1KSAtIENsYXNzRAorICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRMX0JPT1NUX01BU0sgICAgICAgICAgICAgICAweDAwMzggIC8qIFNQS09VVExfQk9PU1QgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfU1BLT1VUTF9CT09TVF9TSElGVCAgICAgICAgICAgICAgICAgICAzICAvKiBTUEtPVVRMX0JPT1NUIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVExfQk9PU1RfV0lEVEggICAgICAgICAgICAgICAgICAgMyAgLyogU1BLT1VUTF9CT09TVCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRSX0JPT1NUX01BU0sgICAgICAgICAgICAgICAweDAwMDcgIC8qIFNQS09VVFJfQk9PU1QgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTRfU1BLT1VUUl9CT09TVF9TSElGVCAgICAgICAgICAgICAgICAgICAwICAvKiBTUEtPVVRSX0JPT1NUIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVFJfQk9PU1RfV0lEVEggICAgICAgICAgICAgICAgICAgMyAgLyogU1BLT1VUUl9CT09TVCAtIFsyOjBdICovCisKKy8qCisgKiBSMzggKDB4MjYpIC0gU3BlYWtlciBWb2x1bWUgTGVmdAorICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRfVlUgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFNQS09VVF9WVSAqLworI2RlZmluZSBXTTg5OTRfU1BLT1VUX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBTUEtPVVRfVlUgKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVF9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogU1BLT1VUX1ZVICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS09VVF9WVSAqLworI2RlZmluZSBXTTg5OTRfU1BLT1VUTF9aQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBTUEtPVVRMX1pDICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRMX1pDX01BU0sgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFNQS09VVExfWkMgKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVExfWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNyAgLyogU1BLT1VUTF9aQyAqLworI2RlZmluZSBXTTg5OTRfU1BLT1VUTF9aQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTUEtPVVRMX1pDICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRMX01VVEVfTiAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFNQS09VVExfTVVURV9OICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRMX01VVEVfTl9NQVNLICAgICAgICAgICAgICAweDAwNDAgIC8qIFNQS09VVExfTVVURV9OICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRMX01VVEVfTl9TSElGVCAgICAgICAgICAgICAgICAgIDYgIC8qIFNQS09VVExfTVVURV9OICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRMX01VVEVfTl9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS09VVExfTVVURV9OICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwM0YgIC8qIFNQS09VVExfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVExfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogU1BLT1VUTF9WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTRfU1BLT1VUTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICA2ICAvKiBTUEtPVVRMX1ZPTCAtIFs1OjBdICovCisKKy8qCisgKiBSMzkgKDB4MjcpIC0gU3BlYWtlciBWb2x1bWUgUmlnaHQKKyAqLworI2RlZmluZSBXTTg5OTRfU1BLT1VUX1ZVICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBTUEtPVVRfVlUgKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVF9WVV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogU1BLT1VUX1ZVICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFNQS09VVF9WVSAqLworI2RlZmluZSBXTTg5OTRfU1BLT1VUX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTUEtPVVRfVlUgKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVFJfWkMgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogU1BLT1VUUl9aQyAqLworI2RlZmluZSBXTTg5OTRfU1BLT1VUUl9aQ19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBTUEtPVVRSX1pDICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRSX1pDX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFNQS09VVFJfWkMgKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVFJfWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1BLT1VUUl9aQyAqLworI2RlZmluZSBXTTg5OTRfU1BLT1VUUl9NVVRFX04gICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBTUEtPVVRSX01VVEVfTiAqLworI2RlZmluZSBXTTg5OTRfU1BLT1VUUl9NVVRFX05fTUFTSyAgICAgICAgICAgICAgMHgwMDQwICAvKiBTUEtPVVRSX01VVEVfTiAqLworI2RlZmluZSBXTTg5OTRfU1BLT1VUUl9NVVRFX05fU0hJRlQgICAgICAgICAgICAgICAgICA2ICAvKiBTUEtPVVRSX01VVEVfTiAqLworI2RlZmluZSBXTTg5OTRfU1BLT1VUUl9NVVRFX05fV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBTUEtPVVRSX01VVEVfTiAqLworI2RlZmluZSBXTTg5OTRfU1BLT1VUUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDNGICAvKiBTUEtPVVRSX1ZPTCAtIFs1OjBdICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFNQS09VVFJfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVFJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgNiAgLyogU1BLT1VUUl9WT0wgLSBbNTowXSAqLworCisvKgorICogUjQwICgweDI4KSAtIElucHV0IE1peGVyICgyKQorICovCisjZGVmaW5lIFdNODk5NF9JTjJMUF9UT19JTjJMICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIElOMkxQX1RPX0lOMkwgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxQX1RPX0lOMkxfTUFTSyAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU4yTFBfVE9fSU4yTCAqLworI2RlZmluZSBXTTg5OTRfSU4yTFBfVE9fSU4yTF9TSElGVCAgICAgICAgICAgICAgICAgICA3ICAvKiBJTjJMUF9UT19JTjJMICovCisjZGVmaW5lIFdNODk5NF9JTjJMUF9UT19JTjJMX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMkxQX1RPX0lOMkwgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxOX1RPX0lOMkwgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU4yTE5fVE9fSU4yTCAqLworI2RlZmluZSBXTTg5OTRfSU4yTE5fVE9fSU4yTF9NQVNLICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTjJMTl9UT19JTjJMICovCisjZGVmaW5lIFdNODk5NF9JTjJMTl9UT19JTjJMX1NISUZUICAgICAgICAgICAgICAgICAgIDYgIC8qIElOMkxOX1RPX0lOMkwgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxOX1RPX0lOMkxfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogSU4yTE5fVE9fSU4yTCAqLworI2RlZmluZSBXTTg5OTRfSU4xTFBfVE9fSU4xTCAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTjFMUF9UT19JTjFMICovCisjZGVmaW5lIFdNODk5NF9JTjFMUF9UT19JTjFMX01BU0sgICAgICAgICAgICAgICAweDAwMjAgIC8qIElOMUxQX1RPX0lOMUwgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxQX1RPX0lOMUxfU0hJRlQgICAgICAgICAgICAgICAgICAgNSAgLyogSU4xTFBfVE9fSU4xTCAqLworI2RlZmluZSBXTTg5OTRfSU4xTFBfVE9fSU4xTF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBJTjFMUF9UT19JTjFMICovCisjZGVmaW5lIFdNODk5NF9JTjFMTl9UT19JTjFMICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIElOMUxOX1RPX0lOMUwgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxOX1RPX0lOMUxfTUFTSyAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSU4xTE5fVE9fSU4xTCAqLworI2RlZmluZSBXTTg5OTRfSU4xTE5fVE9fSU4xTF9TSElGVCAgICAgICAgICAgICAgICAgICA0ICAvKiBJTjFMTl9UT19JTjFMICovCisjZGVmaW5lIFdNODk5NF9JTjFMTl9UT19JTjFMX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMUxOX1RPX0lOMUwgKi8KKyNkZWZpbmUgV004OTk0X0lOMlJQX1RPX0lOMlIgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogSU4yUlBfVE9fSU4yUiAqLworI2RlZmluZSBXTTg5OTRfSU4yUlBfVE9fSU4yUl9NQVNLICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBJTjJSUF9UT19JTjJSICovCisjZGVmaW5lIFdNODk5NF9JTjJSUF9UT19JTjJSX1NISUZUICAgICAgICAgICAgICAgICAgIDMgIC8qIElOMlJQX1RPX0lOMlIgKi8KKyNkZWZpbmUgV004OTk0X0lOMlJQX1RPX0lOMlJfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogSU4yUlBfVE9fSU4yUiAqLworI2RlZmluZSBXTTg5OTRfSU4yUk5fVE9fSU4yUiAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBJTjJSTl9UT19JTjJSICovCisjZGVmaW5lIFdNODk5NF9JTjJSTl9UT19JTjJSX01BU0sgICAgICAgICAgICAgICAweDAwMDQgIC8qIElOMlJOX1RPX0lOMlIgKi8KKyNkZWZpbmUgV004OTk0X0lOMlJOX1RPX0lOMlJfU0hJRlQgICAgICAgICAgICAgICAgICAgMiAgLyogSU4yUk5fVE9fSU4yUiAqLworI2RlZmluZSBXTTg5OTRfSU4yUk5fVE9fSU4yUl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBJTjJSTl9UT19JTjJSICovCisjZGVmaW5lIFdNODk5NF9JTjFSUF9UT19JTjFSICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIElOMVJQX1RPX0lOMVIgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJQX1RPX0lOMVJfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSU4xUlBfVE9fSU4xUiAqLworI2RlZmluZSBXTTg5OTRfSU4xUlBfVE9fSU4xUl9TSElGVCAgICAgICAgICAgICAgICAgICAxICAvKiBJTjFSUF9UT19JTjFSICovCisjZGVmaW5lIFdNODk5NF9JTjFSUF9UT19JTjFSX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMVJQX1RPX0lOMVIgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJOX1RPX0lOMVIgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSU4xUk5fVE9fSU4xUiAqLworI2RlZmluZSBXTTg5OTRfSU4xUk5fVE9fSU4xUl9NQVNLICAgICAgICAgICAgICAgMHgwMDAxICAvKiBJTjFSTl9UT19JTjFSICovCisjZGVmaW5lIFdNODk5NF9JTjFSTl9UT19JTjFSX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIElOMVJOX1RPX0lOMVIgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJOX1RPX0lOMVJfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogSU4xUk5fVE9fSU4xUiAqLworCisvKgorICogUjQxICgweDI5KSAtIElucHV0IE1peGVyICgzKQorICovCisjZGVmaW5lIFdNODk5NF9JTjJMX1RPX01JWElOTCAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIElOMkxfVE9fTUlYSU5MICovCisjZGVmaW5lIFdNODk5NF9JTjJMX1RPX01JWElOTF9NQVNLICAgICAgICAgICAgICAweDAxMDAgIC8qIElOMkxfVE9fTUlYSU5MICovCisjZGVmaW5lIFdNODk5NF9JTjJMX1RPX01JWElOTF9TSElGVCAgICAgICAgICAgICAgICAgIDggIC8qIElOMkxfVE9fTUlYSU5MICovCisjZGVmaW5lIFdNODk5NF9JTjJMX1RPX01JWElOTF9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIElOMkxfVE9fTUlYSU5MICovCisjZGVmaW5lIFdNODk5NF9JTjJMX01JWElOTF9WT0wgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIElOMkxfTUlYSU5MX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfSU4yTF9NSVhJTkxfVk9MX01BU0sgICAgICAgICAgICAgMHgwMDgwICAvKiBJTjJMX01JWElOTF9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxfTUlYSU5MX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgNyAgLyogSU4yTF9NSVhJTkxfVk9MICovCisjZGVmaW5lIFdNODk5NF9JTjJMX01JWElOTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIElOMkxfTUlYSU5MX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9UT19NSVhJTkwgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTjFMX1RPX01JWElOTCAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9UT19NSVhJTkxfTUFTSyAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTjFMX1RPX01JWElOTCAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9UT19NSVhJTkxfU0hJRlQgICAgICAgICAgICAgICAgICA1ICAvKiBJTjFMX1RPX01JWElOTCAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9UT19NSVhJTkxfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBJTjFMX1RPX01JWElOTCAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9NSVhJTkxfVk9MICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTjFMX01JWElOTF9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfTUlYSU5MX1ZPTF9NQVNLICAgICAgICAgICAgIDB4MDAxMCAgLyogSU4xTF9NSVhJTkxfVk9MICovCisjZGVmaW5lIFdNODk5NF9JTjFMX01JWElOTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgIDQgIC8qIElOMUxfTUlYSU5MX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9NSVhJTkxfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBJTjFMX01JWElOTF9WT0wgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfTUlYSU5MX1ZPTF9NQVNLICAgICAgICAgIDB4MDAwNyAgLyogTUlYT1VUTF9NSVhJTkxfVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfTUlYSU5MX1ZPTF9TSElGVCAgICAgICAgICAgICAgMCAgLyogTUlYT1VUTF9NSVhJTkxfVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfTUlYSU5MX1ZPTF9XSURUSCAgICAgICAgICAgICAgMyAgLyogTUlYT1VUTF9NSVhJTkxfVk9MIC0gWzI6MF0gKi8KKworLyoKKyAqIFI0MiAoMHgyQSkgLSBJbnB1dCBNaXhlciAoNCkKKyAqLworI2RlZmluZSBXTTg5OTRfSU4yUl9UT19NSVhJTlIgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJTjJSX1RPX01JWElOUiAqLworI2RlZmluZSBXTTg5OTRfSU4yUl9UT19NSVhJTlJfTUFTSyAgICAgICAgICAgICAgMHgwMTAwICAvKiBJTjJSX1RPX01JWElOUiAqLworI2RlZmluZSBXTTg5OTRfSU4yUl9UT19NSVhJTlJfU0hJRlQgICAgICAgICAgICAgICAgICA4ICAvKiBJTjJSX1RPX01JWElOUiAqLworI2RlZmluZSBXTTg5OTRfSU4yUl9UT19NSVhJTlJfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBJTjJSX1RPX01JWElOUiAqLworI2RlZmluZSBXTTg5OTRfSU4yUl9NSVhJTlJfVk9MICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTjJSX01JWElOUl9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0lOMlJfTUlYSU5SX1ZPTF9NQVNLICAgICAgICAgICAgIDB4MDA4MCAgLyogSU4yUl9NSVhJTlJfVk9MICovCisjZGVmaW5lIFdNODk5NF9JTjJSX01JWElOUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgIDcgIC8qIElOMlJfTUlYSU5SX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfSU4yUl9NSVhJTlJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBJTjJSX01JWElOUl9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfVE9fTUlYSU5SICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSU4xUl9UT19NSVhJTlIgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfVE9fTUlYSU5SX01BU0sgICAgICAgICAgICAgIDB4MDAyMCAgLyogSU4xUl9UT19NSVhJTlIgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfVE9fTUlYSU5SX1NISUZUICAgICAgICAgICAgICAgICAgNSAgLyogSU4xUl9UT19NSVhJTlIgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfVE9fTUlYSU5SX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogSU4xUl9UT19NSVhJTlIgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfTUlYSU5SX1ZPTCAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSU4xUl9NSVhJTlJfVk9MICovCisjZGVmaW5lIFdNODk5NF9JTjFSX01JWElOUl9WT0xfTUFTSyAgICAgICAgICAgICAweDAwMTAgIC8qIElOMVJfTUlYSU5SX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9NSVhJTlJfVk9MX1NISUZUICAgICAgICAgICAgICAgICA0ICAvKiBJTjFSX01JWElOUl9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfTUlYSU5SX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogSU4xUl9NSVhJTlJfVk9MICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX01JWElOUl9WT0xfTUFTSyAgICAgICAgICAweDAwMDcgIC8qIE1JWE9VVFJfTUlYSU5SX1ZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX01JWElOUl9WT0xfU0hJRlQgICAgICAgICAgICAgIDAgIC8qIE1JWE9VVFJfTUlYSU5SX1ZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX01JWElOUl9WT0xfV0lEVEggICAgICAgICAgICAgIDMgIC8qIE1JWE9VVFJfTUlYSU5SX1ZPTCAtIFsyOjBdICovCisKKy8qCisgKiBSNDMgKDB4MkIpIC0gSW5wdXQgTWl4ZXIgKDUpCisgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxQX01JWElOTF9WT0xfTUFTSyAgICAgICAgICAgIDB4MDFDMCAgLyogSU4xTFBfTUlYSU5MX1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5NF9JTjFMUF9NSVhJTkxfVk9MX1NISUZUICAgICAgICAgICAgICAgIDYgIC8qIElOMUxQX01JWElOTF9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTRfSU4xTFBfTUlYSU5MX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAzICAvKiBJTjFMUF9NSVhJTkxfVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0lOMkxSUF9NSVhJTkxfVk9MX01BU0sgICAgICAgICAgIDB4MDAwNyAgLyogSU4yTFJQX01JWElOTF9WT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTRfSU4yTFJQX01JWElOTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAwICAvKiBJTjJMUlBfTUlYSU5MX1ZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NF9JTjJMUlBfTUlYSU5MX1ZPTF9XSURUSCAgICAgICAgICAgICAgIDMgIC8qIElOMkxSUF9NSVhJTkxfVk9MIC0gWzI6MF0gKi8KKworLyoKKyAqIFI0NCAoMHgyQykgLSBJbnB1dCBNaXhlciAoNikKKyAqLworI2RlZmluZSBXTTg5OTRfSU4xUlBfTUlYSU5SX1ZPTF9NQVNLICAgICAgICAgICAgMHgwMUMwICAvKiBJTjFSUF9NSVhJTlJfVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0lOMVJQX01JWElOUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgNiAgLyogSU4xUlBfTUlYSU5SX1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5NF9JTjFSUF9NSVhJTlJfVk9MX1dJRFRIICAgICAgICAgICAgICAgIDMgIC8qIElOMVJQX01JWElOUl9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTRfSU4yTFJQX01JWElOUl9WT0xfTUFTSyAgICAgICAgICAgMHgwMDA3ICAvKiBJTjJMUlBfTUlYSU5SX1ZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NF9JTjJMUlBfTUlYSU5SX1ZPTF9TSElGVCAgICAgICAgICAgICAgIDAgIC8qIElOMkxSUF9NSVhJTlJfVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk0X0lOMkxSUF9NSVhJTlJfVk9MX1dJRFRIICAgICAgICAgICAgICAgMyAgLyogSU4yTFJQX01JWElOUl9WT0wgLSBbMjowXSAqLworCisvKgorICogUjQ1ICgweDJEKSAtIE91dHB1dCBNaXhlciAoMSkKKyAqLworI2RlZmluZSBXTTg5OTRfREFDMUxfVE9fSFBPVVQxTCAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUMxTF9UT19IUE9VVDFMICovCisjZGVmaW5lIFdNODk5NF9EQUMxTF9UT19IUE9VVDFMX01BU0sgICAgICAgICAgICAweDAxMDAgIC8qIERBQzFMX1RPX0hQT1VUMUwgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFMX1RPX0hQT1VUMUxfU0hJRlQgICAgICAgICAgICAgICAgOCAgLyogREFDMUxfVE9fSFBPVVQxTCAqLworI2RlZmluZSBXTTg5OTRfREFDMUxfVE9fSFBPVVQxTF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBEQUMxTF9UT19IUE9VVDFMICovCisjZGVmaW5lIFdNODk5NF9NSVhJTlJfVE9fTUlYT1VUTCAgICAgICAgICAgICAgICAweDAwODAgIC8qIE1JWElOUl9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5NF9NSVhJTlJfVE9fTUlYT1VUTF9NQVNLICAgICAgICAgICAweDAwODAgIC8qIE1JWElOUl9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5NF9NSVhJTlJfVE9fTUlYT1VUTF9TSElGVCAgICAgICAgICAgICAgIDcgIC8qIE1JWElOUl9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5NF9NSVhJTlJfVE9fTUlYT1VUTF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIE1JWElOUl9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5NF9NSVhJTkxfVE9fTUlYT1VUTCAgICAgICAgICAgICAgICAweDAwNDAgIC8qIE1JWElOTF9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5NF9NSVhJTkxfVE9fTUlYT1VUTF9NQVNLICAgICAgICAgICAweDAwNDAgIC8qIE1JWElOTF9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5NF9NSVhJTkxfVE9fTUlYT1VUTF9TSElGVCAgICAgICAgICAgICAgIDYgIC8qIE1JWElOTF9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5NF9NSVhJTkxfVE9fTUlYT1VUTF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIE1JWElOTF9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5NF9JTjJSTl9UT19NSVhPVVRMICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIElOMlJOX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTk0X0lOMlJOX1RPX01JWE9VVExfTUFTSyAgICAgICAgICAgIDB4MDAyMCAgLyogSU4yUk5fVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTRfSU4yUk5fVE9fTUlYT1VUTF9TSElGVCAgICAgICAgICAgICAgICA1ICAvKiBJTjJSTl9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5NF9JTjJSTl9UT19NSVhPVVRMX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIElOMlJOX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxOX1RPX01JWE9VVEwgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSU4yTE5fVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTRfSU4yTE5fVE9fTUlYT1VUTF9NQVNLICAgICAgICAgICAgMHgwMDEwICAvKiBJTjJMTl9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5NF9JTjJMTl9UT19NSVhPVVRMX1NISUZUICAgICAgICAgICAgICAgIDQgIC8qIElOMkxOX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxOX1RPX01JWE9VVExfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogSU4yTE5fVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9UT19NSVhPVVRMICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBJTjFSX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfVE9fTUlYT1VUTF9NQVNLICAgICAgICAgICAgIDB4MDAwOCAgLyogSU4xUl9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5NF9JTjFSX1RPX01JWE9VVExfU0hJRlQgICAgICAgICAgICAgICAgIDMgIC8qIElOMVJfVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9UT19NSVhPVVRMX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBJTjFSX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfVE9fTUlYT1VUTCAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSU4xTF9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5NF9JTjFMX1RPX01JWE9VVExfTUFTSyAgICAgICAgICAgICAweDAwMDQgIC8qIElOMUxfVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9UT19NSVhPVVRMX1NISUZUICAgICAgICAgICAgICAgICAyICAvKiBJTjFMX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfVE9fTUlYT1VUTF9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogSU4xTF9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5NF9JTjJMUF9UT19NSVhPVVRMICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIElOMkxQX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxQX1RPX01JWE9VVExfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogSU4yTFBfVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTRfSU4yTFBfVE9fTUlYT1VUTF9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBJTjJMUF9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5NF9JTjJMUF9UT19NSVhPVVRMX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIElOMkxQX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFMX1RPX01JWE9VVEwgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDMUxfVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTRfREFDMUxfVE9fTUlYT1VUTF9NQVNLICAgICAgICAgICAgMHgwMDAxICAvKiBEQUMxTF9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5NF9EQUMxTF9UT19NSVhPVVRMX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIERBQzFMX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFMX1RPX01JWE9VVExfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogREFDMUxfVE9fTUlYT1VUTCAqLworCisvKgorICogUjQ2ICgweDJFKSAtIE91dHB1dCBNaXhlciAoMikKKyAqLworI2RlZmluZSBXTTg5OTRfREFDMVJfVE9fSFBPVVQxUiAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUMxUl9UT19IUE9VVDFSICovCisjZGVmaW5lIFdNODk5NF9EQUMxUl9UT19IUE9VVDFSX01BU0sgICAgICAgICAgICAweDAxMDAgIC8qIERBQzFSX1RPX0hQT1VUMVIgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFSX1RPX0hQT1VUMVJfU0hJRlQgICAgICAgICAgICAgICAgOCAgLyogREFDMVJfVE9fSFBPVVQxUiAqLworI2RlZmluZSBXTTg5OTRfREFDMVJfVE9fSFBPVVQxUl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBEQUMxUl9UT19IUE9VVDFSICovCisjZGVmaW5lIFdNODk5NF9NSVhJTkxfVE9fTUlYT1VUUiAgICAgICAgICAgICAgICAweDAwODAgIC8qIE1JWElOTF9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5NF9NSVhJTkxfVE9fTUlYT1VUUl9NQVNLICAgICAgICAgICAweDAwODAgIC8qIE1JWElOTF9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5NF9NSVhJTkxfVE9fTUlYT1VUUl9TSElGVCAgICAgICAgICAgICAgIDcgIC8qIE1JWElOTF9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5NF9NSVhJTkxfVE9fTUlYT1VUUl9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIE1JWElOTF9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5NF9NSVhJTlJfVE9fTUlYT1VUUiAgICAgICAgICAgICAgICAweDAwNDAgIC8qIE1JWElOUl9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5NF9NSVhJTlJfVE9fTUlYT1VUUl9NQVNLICAgICAgICAgICAweDAwNDAgIC8qIE1JWElOUl9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5NF9NSVhJTlJfVE9fTUlYT1VUUl9TSElGVCAgICAgICAgICAgICAgIDYgIC8qIE1JWElOUl9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5NF9NSVhJTlJfVE9fTUlYT1VUUl9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIE1JWElOUl9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5NF9JTjJMTl9UT19NSVhPVVRSICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIElOMkxOX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxOX1RPX01JWE9VVFJfTUFTSyAgICAgICAgICAgIDB4MDAyMCAgLyogSU4yTE5fVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTRfSU4yTE5fVE9fTUlYT1VUUl9TSElGVCAgICAgICAgICAgICAgICA1ICAvKiBJTjJMTl9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5NF9JTjJMTl9UT19NSVhPVVRSX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIElOMkxOX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTk0X0lOMlJOX1RPX01JWE9VVFIgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSU4yUk5fVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTRfSU4yUk5fVE9fTUlYT1VUUl9NQVNLICAgICAgICAgICAgMHgwMDEwICAvKiBJTjJSTl9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5NF9JTjJSTl9UT19NSVhPVVRSX1NISUZUICAgICAgICAgICAgICAgIDQgIC8qIElOMlJOX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTk0X0lOMlJOX1RPX01JWE9VVFJfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogSU4yUk5fVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9UT19NSVhPVVRSICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBJTjFMX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfVE9fTUlYT1VUUl9NQVNLICAgICAgICAgICAgIDB4MDAwOCAgLyogSU4xTF9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5NF9JTjFMX1RPX01JWE9VVFJfU0hJRlQgICAgICAgICAgICAgICAgIDMgIC8qIElOMUxfVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9UT19NSVhPVVRSX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBJTjFMX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfVE9fTUlYT1VUUiAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSU4xUl9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5NF9JTjFSX1RPX01JWE9VVFJfTUFTSyAgICAgICAgICAgICAweDAwMDQgIC8qIElOMVJfVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9UT19NSVhPVVRSX1NISUZUICAgICAgICAgICAgICAgICAyICAvKiBJTjFSX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfVE9fTUlYT1VUUl9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogSU4xUl9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5NF9JTjJSUF9UT19NSVhPVVRSICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIElOMlJQX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTk0X0lOMlJQX1RPX01JWE9VVFJfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogSU4yUlBfVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTRfSU4yUlBfVE9fTUlYT1VUUl9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBJTjJSUF9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5NF9JTjJSUF9UT19NSVhPVVRSX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIElOMlJQX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFSX1RPX01JWE9VVFIgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDMVJfVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTRfREFDMVJfVE9fTUlYT1VUUl9NQVNLICAgICAgICAgICAgMHgwMDAxICAvKiBEQUMxUl9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5NF9EQUMxUl9UT19NSVhPVVRSX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIERBQzFSX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFSX1RPX01JWE9VVFJfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogREFDMVJfVE9fTUlYT1VUUiAqLworCisvKgorICogUjQ3ICgweDJGKSAtIE91dHB1dCBNaXhlciAoMykKKyAqLworI2RlZmluZSBXTTg5OTRfSU4yTFBfTUlYT1VUTF9WT0xfTUFTSyAgICAgICAgICAgMHgwRTAwICAvKiBJTjJMUF9NSVhPVVRMX1ZPTCAtIFsxMTo5XSAqLworI2RlZmluZSBXTTg5OTRfSU4yTFBfTUlYT1VUTF9WT0xfU0hJRlQgICAgICAgICAgICAgICA5ICAvKiBJTjJMUF9NSVhPVVRMX1ZPTCAtIFsxMTo5XSAqLworI2RlZmluZSBXTTg5OTRfSU4yTFBfTUlYT1VUTF9WT0xfV0lEVEggICAgICAgICAgICAgICAzICAvKiBJTjJMUF9NSVhPVVRMX1ZPTCAtIFsxMTo5XSAqLworI2RlZmluZSBXTTg5OTRfSU4yTE5fTUlYT1VUTF9WT0xfTUFTSyAgICAgICAgICAgMHgwMUMwICAvKiBJTjJMTl9NSVhPVVRMX1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5NF9JTjJMTl9NSVhPVVRMX1ZPTF9TSElGVCAgICAgICAgICAgICAgIDYgIC8qIElOMkxOX01JWE9VVExfVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0lOMkxOX01JWE9VVExfVk9MX1dJRFRIICAgICAgICAgICAgICAgMyAgLyogSU4yTE5fTUlYT1VUTF9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9NSVhPVVRMX1ZPTF9NQVNLICAgICAgICAgICAgMHgwMDM4ICAvKiBJTjFSX01JWE9VVExfVk9MIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfTUlYT1VUTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgMyAgLyogSU4xUl9NSVhPVVRMX1ZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9JTjFSX01JWE9VVExfVk9MX1dJRFRIICAgICAgICAgICAgICAgIDMgIC8qIElOMVJfTUlYT1VUTF9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9NSVhPVVRMX1ZPTF9NQVNLICAgICAgICAgICAgMHgwMDA3ICAvKiBJTjFMX01JWE9VVExfVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfTUlYT1VUTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogSU4xTF9NSVhPVVRMX1ZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NF9JTjFMX01JWE9VVExfVk9MX1dJRFRIICAgICAgICAgICAgICAgIDMgIC8qIElOMUxfTUlYT1VUTF9WT0wgLSBbMjowXSAqLworCisvKgorICogUjQ4ICgweDMwKSAtIE91dHB1dCBNaXhlciAoNCkKKyAqLworI2RlZmluZSBXTTg5OTRfSU4yUlBfTUlYT1VUUl9WT0xfTUFTSyAgICAgICAgICAgMHgwRTAwICAvKiBJTjJSUF9NSVhPVVRSX1ZPTCAtIFsxMTo5XSAqLworI2RlZmluZSBXTTg5OTRfSU4yUlBfTUlYT1VUUl9WT0xfU0hJRlQgICAgICAgICAgICAgICA5ICAvKiBJTjJSUF9NSVhPVVRSX1ZPTCAtIFsxMTo5XSAqLworI2RlZmluZSBXTTg5OTRfSU4yUlBfTUlYT1VUUl9WT0xfV0lEVEggICAgICAgICAgICAgICAzICAvKiBJTjJSUF9NSVhPVVRSX1ZPTCAtIFsxMTo5XSAqLworI2RlZmluZSBXTTg5OTRfSU4yUk5fTUlYT1VUUl9WT0xfTUFTSyAgICAgICAgICAgMHgwMUMwICAvKiBJTjJSTl9NSVhPVVRSX1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5NF9JTjJSTl9NSVhPVVRSX1ZPTF9TSElGVCAgICAgICAgICAgICAgIDYgIC8qIElOMlJOX01JWE9VVFJfVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0lOMlJOX01JWE9VVFJfVk9MX1dJRFRIICAgICAgICAgICAgICAgMyAgLyogSU4yUk5fTUlYT1VUUl9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9NSVhPVVRSX1ZPTF9NQVNLICAgICAgICAgICAgMHgwMDM4ICAvKiBJTjFMX01JWE9VVFJfVk9MIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfTUlYT1VUUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgMyAgLyogSU4xTF9NSVhPVVRSX1ZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9JTjFMX01JWE9VVFJfVk9MX1dJRFRIICAgICAgICAgICAgICAgIDMgIC8qIElOMUxfTUlYT1VUUl9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9NSVhPVVRSX1ZPTF9NQVNLICAgICAgICAgICAgMHgwMDA3ICAvKiBJTjFSX01JWE9VVFJfVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfTUlYT1VUUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogSU4xUl9NSVhPVVRSX1ZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NF9JTjFSX01JWE9VVFJfVk9MX1dJRFRIICAgICAgICAgICAgICAgIDMgIC8qIElOMVJfTUlYT1VUUl9WT0wgLSBbMjowXSAqLworCisvKgorICogUjQ5ICgweDMxKSAtIE91dHB1dCBNaXhlciAoNSkKKyAqLworI2RlZmluZSBXTTg5OTRfREFDMUxfTUlYT1VUTF9WT0xfTUFTSyAgICAgICAgICAgMHgwRTAwICAvKiBEQUMxTF9NSVhPVVRMX1ZPTCAtIFsxMTo5XSAqLworI2RlZmluZSBXTTg5OTRfREFDMUxfTUlYT1VUTF9WT0xfU0hJRlQgICAgICAgICAgICAgICA5ICAvKiBEQUMxTF9NSVhPVVRMX1ZPTCAtIFsxMTo5XSAqLworI2RlZmluZSBXTTg5OTRfREFDMUxfTUlYT1VUTF9WT0xfV0lEVEggICAgICAgICAgICAgICAzICAvKiBEQUMxTF9NSVhPVVRMX1ZPTCAtIFsxMTo5XSAqLworI2RlZmluZSBXTTg5OTRfSU4yUk5fTUlYT1VUTF9WT0xfTUFTSyAgICAgICAgICAgMHgwMUMwICAvKiBJTjJSTl9NSVhPVVRMX1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5NF9JTjJSTl9NSVhPVVRMX1ZPTF9TSElGVCAgICAgICAgICAgICAgIDYgIC8qIElOMlJOX01JWE9VVExfVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0lOMlJOX01JWE9VVExfVk9MX1dJRFRIICAgICAgICAgICAgICAgMyAgLyogSU4yUk5fTUlYT1VUTF9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTRfTUlYSU5SX01JWE9VVExfVk9MX01BU0sgICAgICAgICAgMHgwMDM4ICAvKiBNSVhJTlJfTUlYT1VUTF9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfTUlYSU5SX01JWE9VVExfVk9MX1NISUZUICAgICAgICAgICAgICAzICAvKiBNSVhJTlJfTUlYT1VUTF9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfTUlYSU5SX01JWE9VVExfVk9MX1dJRFRIICAgICAgICAgICAgICAzICAvKiBNSVhJTlJfTUlYT1VUTF9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfTUlYSU5MX01JWE9VVExfVk9MX01BU0sgICAgICAgICAgMHgwMDA3ICAvKiBNSVhJTkxfTUlYT1VUTF9WT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTRfTUlYSU5MX01JWE9VVExfVk9MX1NISUZUICAgICAgICAgICAgICAwICAvKiBNSVhJTkxfTUlYT1VUTF9WT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTRfTUlYSU5MX01JWE9VVExfVk9MX1dJRFRIICAgICAgICAgICAgICAzICAvKiBNSVhJTkxfTUlYT1VUTF9WT0wgLSBbMjowXSAqLworCisvKgorICogUjUwICgweDMyKSAtIE91dHB1dCBNaXhlciAoNikKKyAqLworI2RlZmluZSBXTTg5OTRfREFDMVJfTUlYT1VUUl9WT0xfTUFTSyAgICAgICAgICAgMHgwRTAwICAvKiBEQUMxUl9NSVhPVVRSX1ZPTCAtIFsxMTo5XSAqLworI2RlZmluZSBXTTg5OTRfREFDMVJfTUlYT1VUUl9WT0xfU0hJRlQgICAgICAgICAgICAgICA5ICAvKiBEQUMxUl9NSVhPVVRSX1ZPTCAtIFsxMTo5XSAqLworI2RlZmluZSBXTTg5OTRfREFDMVJfTUlYT1VUUl9WT0xfV0lEVEggICAgICAgICAgICAgICAzICAvKiBEQUMxUl9NSVhPVVRSX1ZPTCAtIFsxMTo5XSAqLworI2RlZmluZSBXTTg5OTRfSU4yTE5fTUlYT1VUUl9WT0xfTUFTSyAgICAgICAgICAgMHgwMUMwICAvKiBJTjJMTl9NSVhPVVRSX1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5NF9JTjJMTl9NSVhPVVRSX1ZPTF9TSElGVCAgICAgICAgICAgICAgIDYgIC8qIElOMkxOX01JWE9VVFJfVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0lOMkxOX01JWE9VVFJfVk9MX1dJRFRIICAgICAgICAgICAgICAgMyAgLyogSU4yTE5fTUlYT1VUUl9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTRfTUlYSU5MX01JWE9VVFJfVk9MX01BU0sgICAgICAgICAgMHgwMDM4ICAvKiBNSVhJTkxfTUlYT1VUUl9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfTUlYSU5MX01JWE9VVFJfVk9MX1NISUZUICAgICAgICAgICAgICAzICAvKiBNSVhJTkxfTUlYT1VUUl9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfTUlYSU5MX01JWE9VVFJfVk9MX1dJRFRIICAgICAgICAgICAgICAzICAvKiBNSVhJTkxfTUlYT1VUUl9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfTUlYSU5SX01JWE9VVFJfVk9MX01BU0sgICAgICAgICAgMHgwMDA3ICAvKiBNSVhJTlJfTUlYT1VUUl9WT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTRfTUlYSU5SX01JWE9VVFJfVk9MX1NISUZUICAgICAgICAgICAgICAwICAvKiBNSVhJTlJfTUlYT1VUUl9WT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTRfTUlYSU5SX01JWE9VVFJfVk9MX1dJRFRIICAgICAgICAgICAgICAzICAvKiBNSVhJTlJfTUlYT1VUUl9WT0wgLSBbMjowXSAqLworCisvKgorICogUjUxICgweDMzKSAtIEhQT1VUMiBNaXhlcgorICovCisjZGVmaW5lIFdNODk5NF9JTjJMUlBfVE9fSFBPVVQyICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIElOMkxSUF9UT19IUE9VVDIgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxSUF9UT19IUE9VVDJfTUFTSyAgICAgICAgICAgIDB4MDAyMCAgLyogSU4yTFJQX1RPX0hQT1VUMiAqLworI2RlZmluZSBXTTg5OTRfSU4yTFJQX1RPX0hQT1VUMl9TSElGVCAgICAgICAgICAgICAgICA1ICAvKiBJTjJMUlBfVE9fSFBPVVQyICovCisjZGVmaW5lIFdNODk5NF9JTjJMUlBfVE9fSFBPVVQyX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIElOMkxSUF9UT19IUE9VVDIgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExWT0xfVE9fSFBPVVQyICAgICAgICAgICAgIDB4MDAxMCAgLyogTUlYT1VUTFZPTF9UT19IUE9VVDIgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExWT0xfVE9fSFBPVVQyX01BU0sgICAgICAgIDB4MDAxMCAgLyogTUlYT1VUTFZPTF9UT19IUE9VVDIgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExWT0xfVE9fSFBPVVQyX1NISUZUICAgICAgICAgICAgNCAgLyogTUlYT1VUTFZPTF9UT19IUE9VVDIgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExWT0xfVE9fSFBPVVQyX1dJRFRIICAgICAgICAgICAgMSAgLyogTUlYT1VUTFZPTF9UT19IUE9VVDIgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJWT0xfVE9fSFBPVVQyICAgICAgICAgICAgIDB4MDAwOCAgLyogTUlYT1VUUlZPTF9UT19IUE9VVDIgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJWT0xfVE9fSFBPVVQyX01BU0sgICAgICAgIDB4MDAwOCAgLyogTUlYT1VUUlZPTF9UT19IUE9VVDIgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJWT0xfVE9fSFBPVVQyX1NISUZUICAgICAgICAgICAgMyAgLyogTUlYT1VUUlZPTF9UT19IUE9VVDIgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJWT0xfVE9fSFBPVVQyX1dJRFRIICAgICAgICAgICAgMSAgLyogTUlYT1VUUlZPTF9UT19IUE9VVDIgKi8KKworLyoKKyAqIFI1MiAoMHgzNCkgLSBMaW5lIE1peGVyICgxKQorICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMX1RPX0xJTkVPVVQxTiAgICAgICAgICAgICAweDAwNDAgIC8qIE1JWE9VVExfVE9fTElORU9VVDFOICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMX1RPX0xJTkVPVVQxTl9NQVNLICAgICAgICAweDAwNDAgIC8qIE1JWE9VVExfVE9fTElORU9VVDFOICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMX1RPX0xJTkVPVVQxTl9TSElGVCAgICAgICAgICAgIDYgIC8qIE1JWE9VVExfVE9fTElORU9VVDFOICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMX1RPX0xJTkVPVVQxTl9XSURUSCAgICAgICAgICAgIDEgIC8qIE1JWE9VVExfVE9fTElORU9VVDFOICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX1RPX0xJTkVPVVQxTiAgICAgICAgICAgICAweDAwMjAgIC8qIE1JWE9VVFJfVE9fTElORU9VVDFOICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX1RPX0xJTkVPVVQxTl9NQVNLICAgICAgICAweDAwMjAgIC8qIE1JWE9VVFJfVE9fTElORU9VVDFOICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX1RPX0xJTkVPVVQxTl9TSElGVCAgICAgICAgICAgIDUgIC8qIE1JWE9VVFJfVE9fTElORU9VVDFOICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX1RPX0xJTkVPVVQxTl9XSURUSCAgICAgICAgICAgIDEgIC8qIE1JWE9VVFJfVE9fTElORU9VVDFOICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMV9NT0RFICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIExJTkVPVVQxX01PREUgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQxX01PREVfTUFTSyAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTElORU9VVDFfTU9ERSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDFfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICA0ICAvKiBMSU5FT1VUMV9NT0RFICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMV9NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVQxX01PREUgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfVE9fTElORU9VVDFQICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSU4xUl9UT19MSU5FT1VUMVAgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfVE9fTElORU9VVDFQX01BU0sgICAgICAgICAgIDB4MDAwNCAgLyogSU4xUl9UT19MSU5FT1VUMVAgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfVE9fTElORU9VVDFQX1NISUZUICAgICAgICAgICAgICAgMiAgLyogSU4xUl9UT19MSU5FT1VUMVAgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfVE9fTElORU9VVDFQX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogSU4xUl9UT19MSU5FT1VUMVAgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfVE9fTElORU9VVDFQICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSU4xTF9UT19MSU5FT1VUMVAgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfVE9fTElORU9VVDFQX01BU0sgICAgICAgICAgIDB4MDAwMiAgLyogSU4xTF9UT19MSU5FT1VUMVAgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfVE9fTElORU9VVDFQX1NISUZUICAgICAgICAgICAgICAgMSAgLyogSU4xTF9UT19MSU5FT1VUMVAgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfVE9fTElORU9VVDFQX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogSU4xTF9UT19MSU5FT1VUMVAgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfVE9fTElORU9VVDFQICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlYT1VUTF9UT19MSU5FT1VUMVAgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfVE9fTElORU9VVDFQX01BU0sgICAgICAgIDB4MDAwMSAgLyogTUlYT1VUTF9UT19MSU5FT1VUMVAgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfVE9fTElORU9VVDFQX1NISUZUICAgICAgICAgICAgMCAgLyogTUlYT1VUTF9UT19MSU5FT1VUMVAgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfVE9fTElORU9VVDFQX1dJRFRIICAgICAgICAgICAgMSAgLyogTUlYT1VUTF9UT19MSU5FT1VUMVAgKi8KKworLyoKKyAqIFI1MyAoMHgzNSkgLSBMaW5lIE1peGVyICgyKQorICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX1RPX0xJTkVPVVQyTiAgICAgICAgICAgICAweDAwNDAgIC8qIE1JWE9VVFJfVE9fTElORU9VVDJOICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX1RPX0xJTkVPVVQyTl9NQVNLICAgICAgICAweDAwNDAgIC8qIE1JWE9VVFJfVE9fTElORU9VVDJOICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX1RPX0xJTkVPVVQyTl9TSElGVCAgICAgICAgICAgIDYgIC8qIE1JWE9VVFJfVE9fTElORU9VVDJOICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX1RPX0xJTkVPVVQyTl9XSURUSCAgICAgICAgICAgIDEgIC8qIE1JWE9VVFJfVE9fTElORU9VVDJOICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMX1RPX0xJTkVPVVQyTiAgICAgICAgICAgICAweDAwMjAgIC8qIE1JWE9VVExfVE9fTElORU9VVDJOICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMX1RPX0xJTkVPVVQyTl9NQVNLICAgICAgICAweDAwMjAgIC8qIE1JWE9VVExfVE9fTElORU9VVDJOICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMX1RPX0xJTkVPVVQyTl9TSElGVCAgICAgICAgICAgIDUgIC8qIE1JWE9VVExfVE9fTElORU9VVDJOICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMX1RPX0xJTkVPVVQyTl9XSURUSCAgICAgICAgICAgIDEgIC8qIE1JWE9VVExfVE9fTElORU9VVDJOICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMl9NT0RFICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIExJTkVPVVQyX01PREUgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyX01PREVfTUFTSyAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTElORU9VVDJfTU9ERSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDJfTU9ERV9TSElGVCAgICAgICAgICAgICAgICAgICA0ICAvKiBMSU5FT1VUMl9NT0RFICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMl9NT0RFX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVQyX01PREUgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfVE9fTElORU9VVDJQICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSU4xTF9UT19MSU5FT1VUMlAgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfVE9fTElORU9VVDJQX01BU0sgICAgICAgICAgIDB4MDAwNCAgLyogSU4xTF9UT19MSU5FT1VUMlAgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfVE9fTElORU9VVDJQX1NISUZUICAgICAgICAgICAgICAgMiAgLyogSU4xTF9UT19MSU5FT1VUMlAgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfVE9fTElORU9VVDJQX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogSU4xTF9UT19MSU5FT1VUMlAgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfVE9fTElORU9VVDJQICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSU4xUl9UT19MSU5FT1VUMlAgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfVE9fTElORU9VVDJQX01BU0sgICAgICAgICAgIDB4MDAwMiAgLyogSU4xUl9UT19MSU5FT1VUMlAgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfVE9fTElORU9VVDJQX1NISUZUICAgICAgICAgICAgICAgMSAgLyogSU4xUl9UT19MSU5FT1VUMlAgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfVE9fTElORU9VVDJQX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogSU4xUl9UT19MSU5FT1VUMlAgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfVE9fTElORU9VVDJQICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlYT1VUUl9UT19MSU5FT1VUMlAgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfVE9fTElORU9VVDJQX01BU0sgICAgICAgIDB4MDAwMSAgLyogTUlYT1VUUl9UT19MSU5FT1VUMlAgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfVE9fTElORU9VVDJQX1NISUZUICAgICAgICAgICAgMCAgLyogTUlYT1VUUl9UT19MSU5FT1VUMlAgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfVE9fTElORU9VVDJQX1dJRFRIICAgICAgICAgICAgMSAgLyogTUlYT1VUUl9UT19MSU5FT1VUMlAgKi8KKworLyoKKyAqIFI1NCAoMHgzNikgLSBTcGVha2VyIE1peGVyCisgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJMX1RPX1NQS01JWEwgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogREFDMkxfVE9fU1BLTUlYTCAqLworI2RlZmluZSBXTTg5OTRfREFDMkxfVE9fU1BLTUlYTF9NQVNLICAgICAgICAgICAgMHgwMjAwICAvKiBEQUMyTF9UT19TUEtNSVhMICovCisjZGVmaW5lIFdNODk5NF9EQUMyTF9UT19TUEtNSVhMX1NISUZUICAgICAgICAgICAgICAgIDkgIC8qIERBQzJMX1RPX1NQS01JWEwgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJMX1RPX1NQS01JWExfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogREFDMkxfVE9fU1BLTUlYTCAqLworI2RlZmluZSBXTTg5OTRfREFDMlJfVE9fU1BLTUlYUiAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUMyUl9UT19TUEtNSVhSICovCisjZGVmaW5lIFdNODk5NF9EQUMyUl9UT19TUEtNSVhSX01BU0sgICAgICAgICAgICAweDAxMDAgIC8qIERBQzJSX1RPX1NQS01JWFIgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJSX1RPX1NQS01JWFJfU0hJRlQgICAgICAgICAgICAgICAgOCAgLyogREFDMlJfVE9fU1BLTUlYUiAqLworI2RlZmluZSBXTTg5OTRfREFDMlJfVE9fU1BLTUlYUl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBEQUMyUl9UT19TUEtNSVhSICovCisjZGVmaW5lIFdNODk5NF9NSVhJTkxfVE9fU1BLTUlYTCAgICAgICAgICAgICAgICAweDAwODAgIC8qIE1JWElOTF9UT19TUEtNSVhMICovCisjZGVmaW5lIFdNODk5NF9NSVhJTkxfVE9fU1BLTUlYTF9NQVNLICAgICAgICAgICAweDAwODAgIC8qIE1JWElOTF9UT19TUEtNSVhMICovCisjZGVmaW5lIFdNODk5NF9NSVhJTkxfVE9fU1BLTUlYTF9TSElGVCAgICAgICAgICAgICAgIDcgIC8qIE1JWElOTF9UT19TUEtNSVhMICovCisjZGVmaW5lIFdNODk5NF9NSVhJTkxfVE9fU1BLTUlYTF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIE1JWElOTF9UT19TUEtNSVhMICovCisjZGVmaW5lIFdNODk5NF9NSVhJTlJfVE9fU1BLTUlYUiAgICAgICAgICAgICAgICAweDAwNDAgIC8qIE1JWElOUl9UT19TUEtNSVhSICovCisjZGVmaW5lIFdNODk5NF9NSVhJTlJfVE9fU1BLTUlYUl9NQVNLICAgICAgICAgICAweDAwNDAgIC8qIE1JWElOUl9UT19TUEtNSVhSICovCisjZGVmaW5lIFdNODk5NF9NSVhJTlJfVE9fU1BLTUlYUl9TSElGVCAgICAgICAgICAgICAgIDYgIC8qIE1JWElOUl9UT19TUEtNSVhSICovCisjZGVmaW5lIFdNODk5NF9NSVhJTlJfVE9fU1BLTUlYUl9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIE1JWElOUl9UT19TUEtNSVhSICovCisjZGVmaW5lIFdNODk5NF9JTjFMUF9UT19TUEtNSVhMICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIElOMUxQX1RPX1NQS01JWEwgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxQX1RPX1NQS01JWExfTUFTSyAgICAgICAgICAgIDB4MDAyMCAgLyogSU4xTFBfVE9fU1BLTUlYTCAqLworI2RlZmluZSBXTTg5OTRfSU4xTFBfVE9fU1BLTUlYTF9TSElGVCAgICAgICAgICAgICAgICA1ICAvKiBJTjFMUF9UT19TUEtNSVhMICovCisjZGVmaW5lIFdNODk5NF9JTjFMUF9UT19TUEtNSVhMX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIElOMUxQX1RPX1NQS01JWEwgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJQX1RPX1NQS01JWFIgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSU4xUlBfVE9fU1BLTUlYUiAqLworI2RlZmluZSBXTTg5OTRfSU4xUlBfVE9fU1BLTUlYUl9NQVNLICAgICAgICAgICAgMHgwMDEwICAvKiBJTjFSUF9UT19TUEtNSVhSICovCisjZGVmaW5lIFdNODk5NF9JTjFSUF9UT19TUEtNSVhSX1NISUZUICAgICAgICAgICAgICAgIDQgIC8qIElOMVJQX1RPX1NQS01JWFIgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJQX1RPX1NQS01JWFJfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogSU4xUlBfVE9fU1BLTUlYUiAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTF9UT19TUEtNSVhMICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBNSVhPVVRMX1RPX1NQS01JWEwgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfVE9fU1BLTUlYTF9NQVNLICAgICAgICAgIDB4MDAwOCAgLyogTUlYT1VUTF9UT19TUEtNSVhMICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMX1RPX1NQS01JWExfU0hJRlQgICAgICAgICAgICAgIDMgIC8qIE1JWE9VVExfVE9fU1BLTUlYTCAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTF9UT19TUEtNSVhMX1dJRFRIICAgICAgICAgICAgICAxICAvKiBNSVhPVVRMX1RPX1NQS01JWEwgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfVE9fU1BLTUlYUiAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTUlYT1VUUl9UT19TUEtNSVhSICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX1RPX1NQS01JWFJfTUFTSyAgICAgICAgICAweDAwMDQgIC8qIE1JWE9VVFJfVE9fU1BLTUlYUiAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUUl9UT19TUEtNSVhSX1NISUZUICAgICAgICAgICAgICAyICAvKiBNSVhPVVRSX1RPX1NQS01JWFIgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfVE9fU1BLTUlYUl9XSURUSCAgICAgICAgICAgICAgMSAgLyogTUlYT1VUUl9UT19TUEtNSVhSICovCisjZGVmaW5lIFdNODk5NF9EQUMxTF9UT19TUEtNSVhMICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERBQzFMX1RPX1NQS01JWEwgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFMX1RPX1NQS01JWExfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogREFDMUxfVE9fU1BLTUlYTCAqLworI2RlZmluZSBXTTg5OTRfREFDMUxfVE9fU1BLTUlYTF9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBEQUMxTF9UT19TUEtNSVhMICovCisjZGVmaW5lIFdNODk5NF9EQUMxTF9UT19TUEtNSVhMX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERBQzFMX1RPX1NQS01JWEwgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFSX1RPX1NQS01JWFIgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDMVJfVE9fU1BLTUlYUiAqLworI2RlZmluZSBXTTg5OTRfREFDMVJfVE9fU1BLTUlYUl9NQVNLICAgICAgICAgICAgMHgwMDAxICAvKiBEQUMxUl9UT19TUEtNSVhSICovCisjZGVmaW5lIFdNODk5NF9EQUMxUl9UT19TUEtNSVhSX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIERBQzFSX1RPX1NQS01JWFIgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFSX1RPX1NQS01JWFJfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogREFDMVJfVE9fU1BLTUlYUiAqLworCisvKgorICogUjU1ICgweDM3KSAtIEFkZGl0aW9uYWwgQ29udHJvbAorICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMV9GQiAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJTkVPVVQxX0ZCICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMV9GQl9NQVNLICAgICAgICAgICAgICAgICAweDAwODAgIC8qIExJTkVPVVQxX0ZCICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMV9GQl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDcgIC8qIExJTkVPVVQxX0ZCICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMV9GQl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVQxX0ZCICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMl9GQiAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExJTkVPVVQyX0ZCICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMl9GQl9NQVNLICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExJTkVPVVQyX0ZCICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMl9GQl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDYgIC8qIExJTkVPVVQyX0ZCICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMl9GQl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVQyX0ZCICovCisjZGVmaW5lIFdNODk5NF9WUk9JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFZST0kgKi8KKyNkZWZpbmUgV004OTk0X1ZST0lfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogVlJPSSAqLworI2RlZmluZSBXTTg5OTRfVlJPSV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBWUk9JICovCisjZGVmaW5lIFdNODk5NF9WUk9JX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFZST0kgKi8KKworLyoKKyAqIFI1NiAoMHgzOCkgLSBBbnRpUE9QICgxKQorICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUX1ZNSURfQlVGX0VOQSAgICAgICAgICAgICAweDAwODAgIC8qIExJTkVPVVRfVk1JRF9CVUZfRU5BICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUX1ZNSURfQlVGX0VOQV9NQVNLICAgICAgICAweDAwODAgIC8qIExJTkVPVVRfVk1JRF9CVUZfRU5BICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUX1ZNSURfQlVGX0VOQV9TSElGVCAgICAgICAgICAgIDcgIC8qIExJTkVPVVRfVk1JRF9CVUZfRU5BICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUX1ZNSURfQlVGX0VOQV9XSURUSCAgICAgICAgICAgIDEgIC8qIExJTkVPVVRfVk1JRF9CVUZfRU5BICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDJfSU5fRU5BICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUMl9JTl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMl9JTl9FTkFfTUFTSyAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSFBPVVQyX0lOX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQyX0lOX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICA2ICAvKiBIUE9VVDJfSU5fRU5BICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDJfSU5fRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMl9JTl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQxX0RJU0NIICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTElORU9VVDFfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQxX0RJU0NIX01BU0sgICAgICAgICAgICAgIDB4MDAyMCAgLyogTElORU9VVDFfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQxX0RJU0NIX1NISUZUICAgICAgICAgICAgICAgICAgNSAgLyogTElORU9VVDFfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQxX0RJU0NIX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVDFfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyX0RJU0NIICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTElORU9VVDJfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyX0RJU0NIX01BU0sgICAgICAgICAgICAgIDB4MDAxMCAgLyogTElORU9VVDJfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyX0RJU0NIX1NISUZUICAgICAgICAgICAgICAgICAgNCAgLyogTElORU9VVDJfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyX0RJU0NIX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVDJfRElTQ0ggKi8KKworLyoKKyAqIFI1NyAoMHgzOSkgLSBBbnRpUE9QICgyKQorICovCisjZGVmaW5lIFdNODk5NF9NSUNCMl9ESVNDSCAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIE1JQ0IyX0RJU0NIICovCisjZGVmaW5lIFdNODk5NF9NSUNCMl9ESVNDSF9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIE1JQ0IyX0RJU0NIICovCisjZGVmaW5lIFdNODk5NF9NSUNCMl9ESVNDSF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDggIC8qIE1JQ0IyX0RJU0NIICovCisjZGVmaW5lIFdNODk5NF9NSUNCMl9ESVNDSF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0IyX0RJU0NIICovCisjZGVmaW5lIFdNODk5NF9NSUNCMV9ESVNDSCAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIE1JQ0IxX0RJU0NIICovCisjZGVmaW5lIFdNODk5NF9NSUNCMV9ESVNDSF9NQVNLICAgICAgICAgICAgICAgICAweDAwODAgIC8qIE1JQ0IxX0RJU0NIICovCisjZGVmaW5lIFdNODk5NF9NSUNCMV9ESVNDSF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDcgIC8qIE1JQ0IxX0RJU0NIICovCisjZGVmaW5lIFdNODk5NF9NSUNCMV9ESVNDSF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0IxX0RJU0NIICovCisjZGVmaW5lIFdNODk5NF9WTUlEX1JBTVBfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwNjAgIC8qIFZNSURfUkFNUCAtIFs2OjVdICovCisjZGVmaW5lIFdNODk5NF9WTUlEX1JBTVBfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIFZNSURfUkFNUCAtIFs2OjVdICovCisjZGVmaW5lIFdNODk5NF9WTUlEX1JBTVBfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFZNSURfUkFNUCAtIFs2OjVdICovCisjZGVmaW5lIFdNODk5NF9WTUlEX0JVRl9FTkEgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIFZNSURfQlVGX0VOQSAqLworI2RlZmluZSBXTTg5OTRfVk1JRF9CVUZfRU5BX01BU0sgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBWTUlEX0JVRl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X1ZNSURfQlVGX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgMyAgLyogVk1JRF9CVUZfRU5BICovCisjZGVmaW5lIFdNODk5NF9WTUlEX0JVRl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIFZNSURfQlVGX0VOQSAqLworI2RlZmluZSBXTTg5OTRfU1RBUlRVUF9CSUFTX0VOQSAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBTVEFSVFVQX0JJQVNfRU5BICovCisjZGVmaW5lIFdNODk5NF9TVEFSVFVQX0JJQVNfRU5BX01BU0sgICAgICAgICAgICAweDAwMDQgIC8qIFNUQVJUVVBfQklBU19FTkEgKi8KKyNkZWZpbmUgV004OTk0X1NUQVJUVVBfQklBU19FTkFfU0hJRlQgICAgICAgICAgICAgICAgMiAgLyogU1RBUlRVUF9CSUFTX0VOQSAqLworI2RlZmluZSBXTTg5OTRfU1RBUlRVUF9CSUFTX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBTVEFSVFVQX0JJQVNfRU5BICovCisjZGVmaW5lIFdNODk5NF9CSUFTX1NSQyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEJJQVNfU1JDICovCisjZGVmaW5lIFdNODk5NF9CSUFTX1NSQ19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEJJQVNfU1JDICovCisjZGVmaW5lIFdNODk5NF9CSUFTX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJJQVNfU1JDICovCisjZGVmaW5lIFdNODk5NF9CSUFTX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJJQVNfU1JDICovCisjZGVmaW5lIFdNODk5NF9WTUlEX0RJU0NIICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFZNSURfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk0X1ZNSURfRElTQ0hfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogVk1JRF9ESVNDSCAqLworI2RlZmluZSBXTTg5OTRfVk1JRF9ESVNDSF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAwICAvKiBWTUlEX0RJU0NIICovCisjZGVmaW5lIFdNODk5NF9WTUlEX0RJU0NIX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFZNSURfRElTQ0ggKi8KKworLyoKKyAqIFI1OCAoMHgzQSkgLSBNSUNCSUFTCisgKi8KKyNkZWZpbmUgV004OTk0X01JQ0RfU0NUSFJfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDBDMCAgLyogTUlDRF9TQ1RIUiAtIFs3OjZdICovCisjZGVmaW5lIFdNODk5NF9NSUNEX1NDVEhSX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIE1JQ0RfU0NUSFIgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5OTRfTUlDRF9TQ1RIUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBNSUNEX1NDVEhSIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTk0X01JQ0RfVEhSX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAzOCAgLyogTUlDRF9USFIgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfTUlDRF9USFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBNSUNEX1RIUiAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9NSUNEX1RIUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIE1JQ0RfVEhSIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk0X01JQ0RfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTUlDRF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JQ0RfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTUlDRF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JQ0RfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTUlDRF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JQ0RfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDRF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JQ0IyX0xWTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDQjJfTFZMICovCisjZGVmaW5lIFdNODk5NF9NSUNCMl9MVkxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE1JQ0IyX0xWTCAqLworI2RlZmluZSBXTTg5OTRfTUlDQjJfTFZMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNCMl9MVkwgKi8KKyNkZWZpbmUgV004OTk0X01JQ0IyX0xWTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDQjJfTFZMICovCisjZGVmaW5lIFdNODk5NF9NSUNCMV9MVkwgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ0IxX0xWTCAqLworI2RlZmluZSBXTTg5OTRfTUlDQjFfTFZMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBNSUNCMV9MVkwgKi8KKyNkZWZpbmUgV004OTk0X01JQ0IxX0xWTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTUlDQjFfTFZMICovCisjZGVmaW5lIFdNODk5NF9NSUNCMV9MVkxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0IxX0xWTCAqLworCisvKgorICogUjU5ICgweDNCKSAtIExETyAxCisgKi8KKyNkZWZpbmUgV004OTk0X0xETzFfVlNFTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwRSAgLyogTERPMV9WU0VMIC0gWzM6MV0gKi8KKyNkZWZpbmUgV004OTk0X0xETzFfVlNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMV9WU0VMIC0gWzM6MV0gKi8KKyNkZWZpbmUgV004OTk0X0xETzFfVlNFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogTERPMV9WU0VMIC0gWzM6MV0gKi8KKyNkZWZpbmUgV004OTk0X0xETzFfRElTQ0ggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTERPMV9ESVNDSCAqLworI2RlZmluZSBXTTg5OTRfTERPMV9ESVNDSF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBMRE8xX0RJU0NIICovCisjZGVmaW5lIFdNODk5NF9MRE8xX0RJU0NIX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExETzFfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk0X0xETzFfRElTQ0hfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMV9ESVNDSCAqLworCisvKgorICogUjYwICgweDNDKSAtIExETyAyCisgKi8KKyNkZWZpbmUgV004OTk0X0xETzJfVlNFTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwNiAgLyogTERPMl9WU0VMIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTk0X0xETzJfVlNFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMl9WU0VMIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTk0X0xETzJfVlNFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogTERPMl9WU0VMIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTk0X0xETzJfRElTQ0ggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTERPMl9ESVNDSCAqLworI2RlZmluZSBXTTg5OTRfTERPMl9ESVNDSF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBMRE8yX0RJU0NIICovCisjZGVmaW5lIFdNODk5NF9MRE8yX0RJU0NIX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIExETzJfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk0X0xETzJfRElTQ0hfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMl9ESVNDSCAqLworCisvKgorICogUjc2ICgweDRDKSAtIENoYXJnZSBQdW1wICgxKQorICovCisjZGVmaW5lIFdNODk5NF9DUF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIENQX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQ1BfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBDUF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0NQX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAxNSAgLyogQ1BfRU5BICovCisjZGVmaW5lIFdNODk5NF9DUF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIENQX0VOQSAqLworCisvKgorICogUjgxICgweDUxKSAtIENsYXNzIFcgKDEpCisgKi8KKyNkZWZpbmUgV004OTk0X0NQX0RZTl9TUkNfU0VMX01BU0sgICAgICAgICAgICAgIDB4MDMwMCAgLyogQ1BfRFlOX1NSQ19TRUwgLSBbOTo4XSAqLworI2RlZmluZSBXTTg5OTRfQ1BfRFlOX1NSQ19TRUxfU0hJRlQgICAgICAgICAgICAgICAgICA4ICAvKiBDUF9EWU5fU1JDX1NFTCAtIFs5OjhdICovCisjZGVmaW5lIFdNODk5NF9DUF9EWU5fU1JDX1NFTF9XSURUSCAgICAgICAgICAgICAgICAgIDIgIC8qIENQX0RZTl9TUkNfU0VMIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004OTk0X0NQX0RZTl9QV1IgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQ1BfRFlOX1BXUiAqLworI2RlZmluZSBXTTg5OTRfQ1BfRFlOX1BXUl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBDUF9EWU5fUFdSICovCisjZGVmaW5lIFdNODk5NF9DUF9EWU5fUFdSX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIENQX0RZTl9QV1IgKi8KKyNkZWZpbmUgV004OTk0X0NQX0RZTl9QV1JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogQ1BfRFlOX1BXUiAqLworCisvKgorICogUjg0ICgweDU0KSAtIERDIFNlcnZvICgxKQorICovCisjZGVmaW5lIFdNODk5NF9EQ1NfVFJJR19TSU5HTEVfMSAgICAgICAgICAgICAgICAweDIwMDAgIC8qIERDU19UUklHX1NJTkdMRV8xICovCisjZGVmaW5lIFdNODk5NF9EQ1NfVFJJR19TSU5HTEVfMV9NQVNLICAgICAgICAgICAweDIwMDAgIC8qIERDU19UUklHX1NJTkdMRV8xICovCisjZGVmaW5lIFdNODk5NF9EQ1NfVFJJR19TSU5HTEVfMV9TSElGVCAgICAgICAgICAgICAgMTMgIC8qIERDU19UUklHX1NJTkdMRV8xICovCisjZGVmaW5lIFdNODk5NF9EQ1NfVFJJR19TSU5HTEVfMV9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NJTkdMRV8xICovCisjZGVmaW5lIFdNODk5NF9EQ1NfVFJJR19TSU5HTEVfMCAgICAgICAgICAgICAgICAweDEwMDAgIC8qIERDU19UUklHX1NJTkdMRV8wICovCisjZGVmaW5lIFdNODk5NF9EQ1NfVFJJR19TSU5HTEVfMF9NQVNLICAgICAgICAgICAweDEwMDAgIC8qIERDU19UUklHX1NJTkdMRV8wICovCisjZGVmaW5lIFdNODk5NF9EQ1NfVFJJR19TSU5HTEVfMF9TSElGVCAgICAgICAgICAgICAgMTIgIC8qIERDU19UUklHX1NJTkdMRV8wICovCisjZGVmaW5lIFdNODk5NF9EQ1NfVFJJR19TSU5HTEVfMF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NJTkdMRV8wICovCisjZGVmaW5lIFdNODk5NF9EQ1NfVFJJR19TRVJJRVNfMSAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERDU19UUklHX1NFUklFU18xICovCisjZGVmaW5lIFdNODk5NF9EQ1NfVFJJR19TRVJJRVNfMV9NQVNLICAgICAgICAgICAweDAyMDAgIC8qIERDU19UUklHX1NFUklFU18xICovCisjZGVmaW5lIFdNODk5NF9EQ1NfVFJJR19TRVJJRVNfMV9TSElGVCAgICAgICAgICAgICAgIDkgIC8qIERDU19UUklHX1NFUklFU18xICovCisjZGVmaW5lIFdNODk5NF9EQ1NfVFJJR19TRVJJRVNfMV9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NFUklFU18xICovCisjZGVmaW5lIFdNODk5NF9EQ1NfVFJJR19TRVJJRVNfMCAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERDU19UUklHX1NFUklFU18wICovCisjZGVmaW5lIFdNODk5NF9EQ1NfVFJJR19TRVJJRVNfMF9NQVNLICAgICAgICAgICAweDAxMDAgIC8qIERDU19UUklHX1NFUklFU18wICovCisjZGVmaW5lIFdNODk5NF9EQ1NfVFJJR19TRVJJRVNfMF9TSElGVCAgICAgICAgICAgICAgIDggIC8qIERDU19UUklHX1NFUklFU18wICovCisjZGVmaW5lIFdNODk5NF9EQ1NfVFJJR19TRVJJRVNfMF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NFUklFU18wICovCisjZGVmaW5lIFdNODk5NF9EQ1NfVFJJR19TVEFSVFVQXzEgICAgICAgICAgICAgICAweDAwMjAgIC8qIERDU19UUklHX1NUQVJUVVBfMSAqLworI2RlZmluZSBXTTg5OTRfRENTX1RSSUdfU1RBUlRVUF8xX01BU0sgICAgICAgICAgMHgwMDIwICAvKiBEQ1NfVFJJR19TVEFSVFVQXzEgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX1NUQVJUVVBfMV9TSElGVCAgICAgICAgICAgICAgNSAgLyogRENTX1RSSUdfU1RBUlRVUF8xICovCisjZGVmaW5lIFdNODk5NF9EQ1NfVFJJR19TVEFSVFVQXzFfV0lEVEggICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NUQVJUVVBfMSAqLworI2RlZmluZSBXTTg5OTRfRENTX1RSSUdfU1RBUlRVUF8wICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEQ1NfVFJJR19TVEFSVFVQXzAgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX1NUQVJUVVBfMF9NQVNLICAgICAgICAgIDB4MDAxMCAgLyogRENTX1RSSUdfU1RBUlRVUF8wICovCisjZGVmaW5lIFdNODk5NF9EQ1NfVFJJR19TVEFSVFVQXzBfU0hJRlQgICAgICAgICAgICAgIDQgIC8qIERDU19UUklHX1NUQVJUVVBfMCAqLworI2RlZmluZSBXTTg5OTRfRENTX1RSSUdfU1RBUlRVUF8wX1dJRFRIICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19TVEFSVFVQXzAgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX0RBQ19XUl8xICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogRENTX1RSSUdfREFDX1dSXzEgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX0RBQ19XUl8xX01BU0sgICAgICAgICAgIDB4MDAwOCAgLyogRENTX1RSSUdfREFDX1dSXzEgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX0RBQ19XUl8xX1NISUZUICAgICAgICAgICAgICAgMyAgLyogRENTX1RSSUdfREFDX1dSXzEgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX0RBQ19XUl8xX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfREFDX1dSXzEgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX0RBQ19XUl8wICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRENTX1RSSUdfREFDX1dSXzAgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX0RBQ19XUl8wX01BU0sgICAgICAgICAgIDB4MDAwNCAgLyogRENTX1RSSUdfREFDX1dSXzAgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX0RBQ19XUl8wX1NISUZUICAgICAgICAgICAgICAgMiAgLyogRENTX1RSSUdfREFDX1dSXzAgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX0RBQ19XUl8wX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfREFDX1dSXzAgKi8KKyNkZWZpbmUgV004OTk0X0RDU19FTkFfQ0hBTl8xICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogRENTX0VOQV9DSEFOXzEgKi8KKyNkZWZpbmUgV004OTk0X0RDU19FTkFfQ0hBTl8xX01BU0sgICAgICAgICAgICAgIDB4MDAwMiAgLyogRENTX0VOQV9DSEFOXzEgKi8KKyNkZWZpbmUgV004OTk0X0RDU19FTkFfQ0hBTl8xX1NISUZUICAgICAgICAgICAgICAgICAgMSAgLyogRENTX0VOQV9DSEFOXzEgKi8KKyNkZWZpbmUgV004OTk0X0RDU19FTkFfQ0hBTl8xX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogRENTX0VOQV9DSEFOXzEgKi8KKyNkZWZpbmUgV004OTk0X0RDU19FTkFfQ0hBTl8wICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRENTX0VOQV9DSEFOXzAgKi8KKyNkZWZpbmUgV004OTk0X0RDU19FTkFfQ0hBTl8wX01BU0sgICAgICAgICAgICAgIDB4MDAwMSAgLyogRENTX0VOQV9DSEFOXzAgKi8KKyNkZWZpbmUgV004OTk0X0RDU19FTkFfQ0hBTl8wX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRENTX0VOQV9DSEFOXzAgKi8KKyNkZWZpbmUgV004OTk0X0RDU19FTkFfQ0hBTl8wX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogRENTX0VOQV9DSEFOXzAgKi8KKworLyoKKyAqIFI4NSAoMHg1NSkgLSBEQyBTZXJ2byAoMikKKyAqLworI2RlZmluZSBXTTg5OTRfRENTX1NFUklFU19OT18wMV9NQVNLICAgICAgICAgICAgMHgwRkUwICAvKiBEQ1NfU0VSSUVTX05PXzAxIC0gWzExOjVdICovCisjZGVmaW5lIFdNODk5NF9EQ1NfU0VSSUVTX05PXzAxX1NISUZUICAgICAgICAgICAgICAgIDUgIC8qIERDU19TRVJJRVNfTk9fMDEgLSBbMTE6NV0gKi8KKyNkZWZpbmUgV004OTk0X0RDU19TRVJJRVNfTk9fMDFfV0lEVEggICAgICAgICAgICAgICAgNyAgLyogRENTX1NFUklFU19OT18wMSAtIFsxMTo1XSAqLworI2RlZmluZSBXTTg5OTRfRENTX1RJTUVSX1BFUklPRF8wMV9NQVNLICAgICAgICAgMHgwMDBGICAvKiBEQ1NfVElNRVJfUEVSSU9EXzAxIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk0X0RDU19USU1FUl9QRVJJT0RfMDFfU0hJRlQgICAgICAgICAgICAgMCAgLyogRENTX1RJTUVSX1BFUklPRF8wMSAtIFszOjBdICovCisjZGVmaW5lIFdNODk5NF9EQ1NfVElNRVJfUEVSSU9EXzAxX1dJRFRIICAgICAgICAgICAgIDQgIC8qIERDU19USU1FUl9QRVJJT0RfMDEgLSBbMzowXSAqLworCisvKgorICogUjg3ICgweDU3KSAtIERDIFNlcnZvICg0KQorICovCisjZGVmaW5lIFdNODk5NF9EQ1NfREFDX1dSX1ZBTF8xX01BU0sgICAgICAgICAgICAweEZGMDAgIC8qIERDU19EQUNfV1JfVkFMXzEgLSBbMTU6OF0gKi8KKyNkZWZpbmUgV004OTk0X0RDU19EQUNfV1JfVkFMXzFfU0hJRlQgICAgICAgICAgICAgICAgOCAgLyogRENTX0RBQ19XUl9WQUxfMSAtIFsxNTo4XSAqLworI2RlZmluZSBXTTg5OTRfRENTX0RBQ19XUl9WQUxfMV9XSURUSCAgICAgICAgICAgICAgICA4ICAvKiBEQ1NfREFDX1dSX1ZBTF8xIC0gWzE1OjhdICovCisjZGVmaW5lIFdNODk5NF9EQ1NfREFDX1dSX1ZBTF8wX01BU0sgICAgICAgICAgICAweDAwRkYgIC8qIERDU19EQUNfV1JfVkFMXzAgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTRfRENTX0RBQ19XUl9WQUxfMF9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBEQ1NfREFDX1dSX1ZBTF8wIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk0X0RDU19EQUNfV1JfVkFMXzBfV0lEVEggICAgICAgICAgICAgICAgOCAgLyogRENTX0RBQ19XUl9WQUxfMCAtIFs3OjBdICovCisKKy8qCisgKiBSODggKDB4NTgpIC0gREMgU2Vydm8gUmVhZGJhY2sKKyAqLworI2RlZmluZSBXTTg5OTRfRENTX0NBTF9DT01QTEVURV9NQVNLICAgICAgICAgICAgMHgwMzAwICAvKiBEQ1NfQ0FMX0NPTVBMRVRFIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004OTk0X0RDU19DQUxfQ09NUExFVEVfU0hJRlQgICAgICAgICAgICAgICAgOCAgLyogRENTX0NBTF9DT01QTEVURSAtIFs5OjhdICovCisjZGVmaW5lIFdNODk5NF9EQ1NfQ0FMX0NPTVBMRVRFX1dJRFRIICAgICAgICAgICAgICAgIDIgIC8qIERDU19DQUxfQ09NUExFVEUgLSBbOTo4XSAqLworI2RlZmluZSBXTTg5OTRfRENTX0RBQ19XUl9DT01QTEVURV9NQVNLICAgICAgICAgMHgwMDMwICAvKiBEQ1NfREFDX1dSX0NPTVBMRVRFIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTk0X0RDU19EQUNfV1JfQ09NUExFVEVfU0hJRlQgICAgICAgICAgICAgNCAgLyogRENTX0RBQ19XUl9DT01QTEVURSAtIFs1OjRdICovCisjZGVmaW5lIFdNODk5NF9EQ1NfREFDX1dSX0NPTVBMRVRFX1dJRFRIICAgICAgICAgICAgIDIgIC8qIERDU19EQUNfV1JfQ09NUExFVEUgLSBbNTo0XSAqLworI2RlZmluZSBXTTg5OTRfRENTX1NUQVJUVVBfQ09NUExFVEVfTUFTSyAgICAgICAgMHgwMDAzICAvKiBEQ1NfU1RBUlRVUF9DT01QTEVURSAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5NF9EQ1NfU1RBUlRVUF9DT01QTEVURV9TSElGVCAgICAgICAgICAgIDAgIC8qIERDU19TVEFSVFVQX0NPTVBMRVRFIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk0X0RDU19TVEFSVFVQX0NPTVBMRVRFX1dJRFRIICAgICAgICAgICAgMiAgLyogRENTX1NUQVJUVVBfQ09NUExFVEUgLSBbMTowXSAqLworCisvKgorICogUjk2ICgweDYwKSAtIEFuYWxvZ3VlIEhQICgxKQorICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFMX1JNVl9TSE9SVCAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUMUxfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFMX1JNVl9TSE9SVF9NQVNLICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUMUxfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFMX1JNVl9TSE9SVF9TSElGVCAgICAgICAgICAgICAgIDcgIC8qIEhQT1VUMUxfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFMX1JNVl9TSE9SVF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMUxfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFMX09VVFAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUMUxfT1VUUCAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxTF9PVVRQX01BU0sgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBIUE9VVDFMX09VVFAgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMUxfT1VUUF9TSElGVCAgICAgICAgICAgICAgICAgICAgNiAgLyogSFBPVVQxTF9PVVRQICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFMX09VVFBfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMUxfT1VUUCAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxTF9ETFkgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBIUE9VVDFMX0RMWSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxTF9ETFlfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBIUE9VVDFMX0RMWSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxTF9ETFlfU0hJRlQgICAgICAgICAgICAgICAgICAgICA1ICAvKiBIUE9VVDFMX0RMWSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxTF9ETFlfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFMX0RMWSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxUl9STVZfU0hPUlQgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBIUE9VVDFSX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxUl9STVZfU0hPUlRfTUFTSyAgICAgICAgICAgMHgwMDA4ICAvKiBIUE9VVDFSX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxUl9STVZfU0hPUlRfU0hJRlQgICAgICAgICAgICAgICAzICAvKiBIUE9VVDFSX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxUl9STVZfU0hPUlRfV0lEVEggICAgICAgICAgICAgICAxICAvKiBIUE9VVDFSX1JNVl9TSE9SVCAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxUl9PVVRQICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBIUE9VVDFSX09VVFAgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMVJfT1VUUF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSFBPVVQxUl9PVVRQICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFSX09VVFBfU0hJRlQgICAgICAgICAgICAgICAgICAgIDIgIC8qIEhQT1VUMVJfT1VUUCAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxUl9PVVRQX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFSX09VVFAgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMVJfRExZICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSFBPVVQxUl9ETFkgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMVJfRExZX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSFBPVVQxUl9ETFkgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMVJfRExZX1NISUZUICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQxUl9ETFkgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMVJfRExZX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQxUl9ETFkgKi8KKworLyoKKyAqIFIyNTYgKDB4MTAwKSAtIENoaXAgUmV2aXNpb24KKyAqLworI2RlZmluZSBXTTg5OTRfQ0hJUF9SRVZfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBDSElQX1JFViAtIFszOjBdICovCisjZGVmaW5lIFdNODk5NF9DSElQX1JFVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIENISVBfUkVWIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk0X0NISVBfUkVWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogQ0hJUF9SRVYgLSBbMzowXSAqLworCisvKgorICogUjI1NyAoMHgxMDEpIC0gQ29udHJvbCBJbnRlcmZhY2UKKyAqLworI2RlZmluZSBXTTg5OTRfU1BJX0NPTlRSRCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBTUElfQ09OVFJEICovCisjZGVmaW5lIFdNODk5NF9TUElfQ09OVFJEX01BU0sgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFNQSV9DT05UUkQgKi8KKyNkZWZpbmUgV004OTk0X1NQSV9DT05UUkRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNiAgLyogU1BJX0NPTlRSRCAqLworI2RlZmluZSBXTTg5OTRfU1BJX0NPTlRSRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTUElfQ09OVFJEICovCisjZGVmaW5lIFdNODk5NF9TUElfNFdJUkUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIFNQSV80V0lSRSAqLworI2RlZmluZSBXTTg5OTRfU1BJXzRXSVJFX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBTUElfNFdJUkUgKi8KKyNkZWZpbmUgV004OTk0X1NQSV80V0lSRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogU1BJXzRXSVJFICovCisjZGVmaW5lIFdNODk5NF9TUElfNFdJUkVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQSV80V0lSRSAqLworI2RlZmluZSBXTTg5OTRfU1BJX0NGRyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBTUElfQ0ZHICovCisjZGVmaW5lIFdNODk5NF9TUElfQ0ZHX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFNQSV9DRkcgKi8KKyNkZWZpbmUgV004OTk0X1NQSV9DRkdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogU1BJX0NGRyAqLworI2RlZmluZSBXTTg5OTRfU1BJX0NGR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTUElfQ0ZHICovCisjZGVmaW5lIFdNODk5NF9BVVRPX0lOQyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFVVE9fSU5DICovCisjZGVmaW5lIFdNODk5NF9BVVRPX0lOQ19NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFVVE9fSU5DICovCisjZGVmaW5lIFdNODk5NF9BVVRPX0lOQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFVVE9fSU5DICovCisjZGVmaW5lIFdNODk5NF9BVVRPX0lOQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFVVE9fSU5DICovCisKKy8qCisgKiBSMjcyICgweDExMCkgLSBXcml0ZSBTZXF1ZW5jZXIgQ3RybCAoMSkKKyAqLworI2RlZmluZSBXTTg5OTRfV1NFUV9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBXU0VRX0VOQSAqLworI2RlZmluZSBXTTg5OTRfV1NFUV9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBXU0VRX0VOQSAqLworI2RlZmluZSBXTTg5OTRfV1NFUV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBXU0VRX0VOQSAqLworI2RlZmluZSBXTTg5OTRfV1NFUV9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBXU0VRX0VOQSAqLworI2RlZmluZSBXTTg5OTRfV1NFUV9BQk9SVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBXU0VRX0FCT1JUICovCisjZGVmaW5lIFdNODk5NF9XU0VRX0FCT1JUX01BU0sgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIFdTRVFfQUJPUlQgKi8KKyNkZWZpbmUgV004OTk0X1dTRVFfQUJPUlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOSAgLyogV1NFUV9BQk9SVCAqLworI2RlZmluZSBXTTg5OTRfV1NFUV9BQk9SVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBXU0VRX0FCT1JUICovCisjZGVmaW5lIFdNODk5NF9XU0VRX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFdTRVFfU1RBUlQgKi8KKyNkZWZpbmUgV004OTk0X1dTRVFfU1RBUlRfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogV1NFUV9TVEFSVCAqLworI2RlZmluZSBXTTg5OTRfV1NFUV9TVEFSVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBXU0VRX1NUQVJUICovCisjZGVmaW5lIFdNODk5NF9XU0VRX1NUQVJUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfU1RBUlQgKi8KKyNkZWZpbmUgV004OTk0X1dTRVFfU1RBUlRfSU5ERVhfTUFTSyAgICAgICAgICAgIDB4MDA3RiAgLyogV1NFUV9TVEFSVF9JTkRFWCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk5NF9XU0VRX1NUQVJUX0lOREVYX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIFdTRVFfU1RBUlRfSU5ERVggLSBbNjowXSAqLworI2RlZmluZSBXTTg5OTRfV1NFUV9TVEFSVF9JTkRFWF9XSURUSCAgICAgICAgICAgICAgICA3ICAvKiBXU0VRX1NUQVJUX0lOREVYIC0gWzY6MF0gKi8KKworLyoKKyAqIFIyNzMgKDB4MTExKSAtIFdyaXRlIFNlcXVlbmNlciBDdHJsICgyKQorICovCisjZGVmaW5lIFdNODk5NF9XU0VRX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFdTRVFfQlVTWSAqLworI2RlZmluZSBXTTg5OTRfV1NFUV9CVVNZX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBXU0VRX0JVU1kgKi8KKyNkZWZpbmUgV004OTk0X1dTRVFfQlVTWV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogV1NFUV9CVVNZICovCisjZGVmaW5lIFdNODk5NF9XU0VRX0JVU1lfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfQlVTWSAqLworI2RlZmluZSBXTTg5OTRfV1NFUV9DVVJSRU5UX0lOREVYX01BU0sgICAgICAgICAgMHgwMDdGICAvKiBXU0VRX0NVUlJFTlRfSU5ERVggLSBbNjowXSAqLworI2RlZmluZSBXTTg5OTRfV1NFUV9DVVJSRU5UX0lOREVYX1NISUZUICAgICAgICAgICAgICAwICAvKiBXU0VRX0NVUlJFTlRfSU5ERVggLSBbNjowXSAqLworI2RlZmluZSBXTTg5OTRfV1NFUV9DVVJSRU5UX0lOREVYX1dJRFRIICAgICAgICAgICAgICA3ICAvKiBXU0VRX0NVUlJFTlRfSU5ERVggLSBbNjowXSAqLworCisvKgorICogUjUxMiAoMHgyMDApIC0gQUlGMSBDbG9ja2luZyAoMSkKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMUNMS19TUkNfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDE4ICAvKiBBSUYxQ0xLX1NSQyAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5NF9BSUYxQ0xLX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEFJRjFDTEtfU1JDIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFDTEtfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlGMUNMS19TUkMgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUNMS19JTlYgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYxQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMUNMS19JTlZfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYxQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMUNMS19JTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAyICAvKiBBSUYxQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMUNMS19JTlZfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMUNMS19ESVYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYxQ0xLX0RJViAqLworI2RlZmluZSBXTTg5OTRfQUlGMUNMS19ESVZfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYxQ0xLX0RJViAqLworI2RlZmluZSBXTTg5OTRfQUlGMUNMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxQ0xLX0RJViAqLworI2RlZmluZSBXTTg5OTRfQUlGMUNMS19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxQ0xLX0RJViAqLworI2RlZmluZSBXTTg5OTRfQUlGMUNMS19FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUNMS19FTkFfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUNMS19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBBSUYxQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUNMS19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxQ0xLX0VOQSAqLworCisvKgorICogUjUxMyAoMHgyMDEpIC0gQUlGMSBDbG9ja2luZyAoMikKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ19ESVZfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDM4ICAvKiBBSUYxREFDX0RJViAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEFJRjFEQUNfRElWIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMyAgLyogQUlGMURBQ19ESVYgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ19ESVZfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDA3ICAvKiBBSUYxQURDX0RJViAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFBRENfRElWIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMyAgLyogQUlGMUFEQ19ESVYgLSBbMjowXSAqLworCisvKgorICogUjUxNiAoMHgyMDQpIC0gQUlGMiBDbG9ja2luZyAoMSkKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkNMS19TUkNfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDE4ICAvKiBBSUYyQ0xLX1NSQyAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5NF9BSUYyQ0xLX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEFJRjJDTEtfU1JDIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJDTEtfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlGMkNMS19TUkMgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkNMS19JTlYgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYyQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMkNMS19JTlZfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYyQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMkNMS19JTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAyICAvKiBBSUYyQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMkNMS19JTlZfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYyQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMkNMS19ESVYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYyQ0xLX0RJViAqLworI2RlZmluZSBXTTg5OTRfQUlGMkNMS19ESVZfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYyQ0xLX0RJViAqLworI2RlZmluZSBXTTg5OTRfQUlGMkNMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYyQ0xLX0RJViAqLworI2RlZmluZSBXTTg5OTRfQUlGMkNMS19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYyQ0xLX0RJViAqLworI2RlZmluZSBXTTg5OTRfQUlGMkNMS19FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYyQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkNMS19FTkFfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYyQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkNMS19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBBSUYyQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkNMS19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYyQ0xLX0VOQSAqLworCisvKgorICogUjUxNyAoMHgyMDUpIC0gQUlGMiBDbG9ja2luZyAoMikKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19ESVZfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDM4ICAvKiBBSUYyREFDX0RJViAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEFJRjJEQUNfRElWIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMyAgLyogQUlGMkRBQ19ESVYgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19ESVZfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDA3ICAvKiBBSUYyQURDX0RJViAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJBRENfRElWIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMyAgLyogQUlGMkFEQ19ESVYgLSBbMjowXSAqLworCisvKgorICogUjUyMCAoMHgyMDgpIC0gQ2xvY2tpbmcgKDEpCisgKi8KKyNkZWZpbmUgV004OTk0X1RPQ0xLX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogVE9DTEtfRU5BICovCisjZGVmaW5lIFdNODk5NF9UT0NMS19FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFRPQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTRfVE9DTEtfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBUT0NMS19FTkEgKi8KKyNkZWZpbmUgV004OTk0X1RPQ0xLX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVE9DTEtfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFNQQ0xLX0VOQSAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEFJRjFEU1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFNQQ0xLX0VOQV9NQVNLICAgICAgICAgICAgICAweDAwMDggIC8qIEFJRjFEU1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFNQQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDMgIC8qIEFJRjFEU1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFNQQ0xLX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEU1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFNQQ0xLX0VOQSAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjJEU1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFNQQ0xLX0VOQV9NQVNLICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjJEU1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFNQQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDIgIC8qIEFJRjJEU1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFNQQ0xLX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJEU1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NF9TWVNEU1BDTEtfRU5BICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFNZU0RTUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTk0X1NZU0RTUENMS19FTkFfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMiAgLyogU1lTRFNQQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTRfU1lTRFNQQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAxICAvKiBTWVNEU1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NF9TWVNEU1BDTEtfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIFNZU0RTUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTk0X1NZU0NMS19TUkMgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogU1lTQ0xLX1NSQyAqLworI2RlZmluZSBXTTg5OTRfU1lTQ0xLX1NSQ19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBTWVNDTEtfU1JDICovCisjZGVmaW5lIFdNODk5NF9TWVNDTEtfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFNZU0NMS19TUkMgKi8KKyNkZWZpbmUgV004OTk0X1NZU0NMS19TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1lTQ0xLX1NSQyAqLworCisvKgorICogUjUyMSAoMHgyMDkpIC0gQ2xvY2tpbmcgKDIpCisgKi8KKyNkZWZpbmUgV004OTk0X1RPQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDcwMCAgLyogVE9DTEtfRElWIC0gWzEwOjhdICovCisjZGVmaW5lIFdNODk5NF9UT0NMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFRPQ0xLX0RJViAtIFsxMDo4XSAqLworI2RlZmluZSBXTTg5OTRfVE9DTEtfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBUT0NMS19ESVYgLSBbMTA6OF0gKi8KKyNkZWZpbmUgV004OTk0X0RCQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDA3MCAgLyogREJDTEtfRElWIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTk0X0RCQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogREJDTEtfRElWIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTk0X0RCQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogREJDTEtfRElWIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTk0X09QQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwNyAgLyogT1BDTEtfRElWIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk0X09QQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogT1BDTEtfRElWIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk0X09QQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogT1BDTEtfRElWIC0gWzI6MF0gKi8KKworLyoKKyAqIFI1MjggKDB4MjEwKSAtIEFJRjEgUmF0ZQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxX1NSX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwRjAgIC8qIEFJRjFfU1IgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9TUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBBSUYxX1NSIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfU1JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogQUlGMV9TUiAtIFs3OjRdICovCisjZGVmaW5lIFdNODk5NF9BSUYxQ0xLX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAweDAwMEYgIC8qIEFJRjFDTEtfUkFURSAtIFszOjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxQ0xLX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFDTEtfUkFURSAtIFszOjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxQ0xLX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgIDQgIC8qIEFJRjFDTEtfUkFURSAtIFszOjBdICovCisKKy8qCisgKiBSNTI5ICgweDIxMSkgLSBBSUYyIFJhdGUKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9TUl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMEYwICAvKiBBSUYyX1NSIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfU1JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogQUlGMl9TUiAtIFs3OjRdICovCisjZGVmaW5lIFdNODk5NF9BSUYyX1NSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEFJRjJfU1IgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkNMS19SQVRFX01BU0sgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBBSUYyQ0xLX1JBVEUgLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkNMS19SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAwICAvKiBBSUYyQ0xLX1JBVEUgLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkNMS19SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICA0ICAvKiBBSUYyQ0xLX1JBVEUgLSBbMzowXSAqLworCisvKgorICogUjUzMCAoMHgyMTIpIC0gUmF0ZSBTdGF0dXMKKyAqLworI2RlZmluZSBXTTg5OTRfU1JfRVJST1JfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDBGICAvKiBTUl9FUlJPUiAtIFszOjBdICovCisjZGVmaW5lIFdNODk5NF9TUl9FUlJPUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFNSX0VSUk9SIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk0X1NSX0VSUk9SX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogU1JfRVJST1IgLSBbMzowXSAqLworCisvKgorICogUjU0NCAoMHgyMjApIC0gRkxMMSBDb250cm9sICgxKQorICovCisjZGVmaW5lIFdNODk5NF9GTEwxX0ZSQUMgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEZMTDFfRlJBQyAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9GUkFDX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBGTEwxX0ZSQUMgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfRlJBQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogRkxMMV9GUkFDICovCisjZGVmaW5lIFdNODk5NF9GTEwxX0ZSQUNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTDFfRlJBQyAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9PU0NfRU5BICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBGTEwxX09TQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfT1NDX0VOQV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogRkxMMV9PU0NfRU5BICovCisjZGVmaW5lIFdNODk5NF9GTEwxX09TQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTDFfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9PU0NfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBGTEwxX09TQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRkxMMV9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRkxMMV9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMMV9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRkxMMV9FTkEgKi8KKworLyoKKyAqIFI1NDUgKDB4MjIxKSAtIEZMTDEgQ29udHJvbCAoMikKKyAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9PVVRESVZfTUFTSyAgICAgICAgICAgICAgICAgMHgzRjAwICAvKiBGTEwxX09VVERJViAtIFsxMzo4XSAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9PVVRESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICA4ICAvKiBGTEwxX09VVERJViAtIFsxMzo4XSAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9PVVRESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICA2ICAvKiBGTEwxX09VVERJViAtIFsxMzo4XSAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9DVFJMX1JBVEVfTUFTSyAgICAgICAgICAgICAgMHgwMDcwICAvKiBGTEwxX0NUUkxfUkFURSAtIFs2OjRdICovCisjZGVmaW5lIFdNODk5NF9GTEwxX0NUUkxfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgIDQgIC8qIEZMTDFfQ1RSTF9SQVRFIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfQ1RSTF9SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgMyAgLyogRkxMMV9DVFJMX1JBVEUgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9GUkFUSU9fTUFTSyAgICAgICAgICAgICAgICAgMHgwMDA3ICAvKiBGTEwxX0ZSQVRJTyAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NF9GTEwxX0ZSQVRJT19TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTDFfRlJBVElPIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfRlJBVElPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMyAgLyogRkxMMV9GUkFUSU8gLSBbMjowXSAqLworCisvKgorICogUjU0NiAoMHgyMjIpIC0gRkxMMSBDb250cm9sICgzKQorICovCisjZGVmaW5lIFdNODk5NF9GTEwxX0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEZMTDFfSyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9LX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBGTEwxX0sgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfS19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRkxMMV9LIC0gWzE1OjBdICovCisKKy8qCisgKiBSNTQ3ICgweDIyMykgLSBGTEwxIENvbnRyb2wgKDQpCisgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfTl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4N0ZFMCAgLyogRkxMMV9OIC0gWzE0OjVdICovCisjZGVmaW5lIFdNODk5NF9GTEwxX05fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEZMTDFfTiAtIFsxNDo1XSAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9OX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEwICAvKiBGTEwxX04gLSBbMTQ6NV0gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfTE9PUF9HQUlOX01BU0sgICAgICAgICAgICAgIDB4MDAwRiAgLyogRkxMMV9MT09QX0dBSU4gLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9MT09QX0dBSU5fU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBGTEwxX0xPT1BfR0FJTiAtIFszOjBdICovCisjZGVmaW5lIFdNODk5NF9GTEwxX0xPT1BfR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgIDQgIC8qIEZMTDFfTE9PUF9HQUlOIC0gWzM6MF0gKi8KKworLyoKKyAqIFI1NDggKDB4MjI0KSAtIEZMTDEgQ29udHJvbCAoNSkKKyAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9GUkNfTkNPX1ZBTF9NQVNLICAgICAgICAgICAgMHgxRjgwICAvKiBGTEwxX0ZSQ19OQ09fVkFMIC0gWzEyOjddICovCisjZGVmaW5lIFdNODk5NF9GTEwxX0ZSQ19OQ09fVkFMX1NISUZUICAgICAgICAgICAgICAgIDcgIC8qIEZMTDFfRlJDX05DT19WQUwgLSBbMTI6N10gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfRlJDX05DT19WQUxfV0lEVEggICAgICAgICAgICAgICAgNiAgLyogRkxMMV9GUkNfTkNPX1ZBTCAtIFsxMjo3XSAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9GUkNfTkNPICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBGTEwxX0ZSQ19OQ08gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfRlJDX05DT19NQVNLICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogRkxMMV9GUkNfTkNPICovCisjZGVmaW5lIFdNODk5NF9GTEwxX0ZSQ19OQ09fU0hJRlQgICAgICAgICAgICAgICAgICAgIDYgIC8qIEZMTDFfRlJDX05DTyAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9GUkNfTkNPX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBGTEwxX0ZSQ19OQ08gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfUkVGQ0xLX0RJVl9NQVNLICAgICAgICAgICAgIDB4MDAxOCAgLyogRkxMMV9SRUZDTEtfRElWIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfUkVGQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgMyAgLyogRkxMMV9SRUZDTEtfRElWIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfUkVGQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgMiAgLyogRkxMMV9SRUZDTEtfRElWIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfUkVGQ0xLX1NSQ19NQVNLICAgICAgICAgICAgIDB4MDAwMyAgLyogRkxMMV9SRUZDTEtfU1JDIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfUkVGQ0xLX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogRkxMMV9SRUZDTEtfU1JDIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfUkVGQ0xLX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgMiAgLyogRkxMMV9SRUZDTEtfU1JDIC0gWzE6MF0gKi8KKworLyoKKyAqIFI1NzYgKDB4MjQwKSAtIEZMTDIgQ29udHJvbCAoMSkKKyAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9GUkFDICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBGTEwyX0ZSQUMgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfRlJBQ19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRkxMMl9GUkFDICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0ZSQUNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEZMTDJfRlJBQyAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9GUkFDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBGTEwyX0ZSQUMgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfT1NDX0VOQSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogRkxMMl9PU0NfRU5BICovCisjZGVmaW5lIFdNODk5NF9GTEwyX09TQ19FTkFfTUFTSyAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEZMTDJfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9PU0NfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAxICAvKiBGTEwyX09TQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfT1NDX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogRkxMMl9PU0NfRU5BICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEZMTDJfRU5BICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEZMTDJfRU5BICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTDJfRU5BICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTDJfRU5BICovCisKKy8qCisgKiBSNTc3ICgweDI0MSkgLSBGTEwyIENvbnRyb2wgKDIpCisgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfT1VURElWX01BU0sgICAgICAgICAgICAgICAgIDB4M0YwMCAgLyogRkxMMl9PVVRESVYgLSBbMTM6OF0gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfT1VURElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgOCAgLyogRkxMMl9PVVRESVYgLSBbMTM6OF0gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfT1VURElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgNiAgLyogRkxMMl9PVVRESVYgLSBbMTM6OF0gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfQ1RSTF9SQVRFX01BU0sgICAgICAgICAgICAgIDB4MDA3MCAgLyogRkxMMl9DVFJMX1JBVEUgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9DVFJMX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICA0ICAvKiBGTEwyX0NUUkxfUkFURSAtIFs2OjRdICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0NUUkxfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgIDMgIC8qIEZMTDJfQ1RSTF9SQVRFIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfRlJBVElPX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwNyAgLyogRkxMMl9GUkFUSU8gLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9GUkFUSU9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBGTEwyX0ZSQVRJTyAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0ZSQVRJT19XSURUSCAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEZMTDJfRlJBVElPIC0gWzI6MF0gKi8KKworLyoKKyAqIFI1NzggKDB4MjQyKSAtIEZMTDIgQ29udHJvbCAoMykKKyAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9LX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGICAvKiBGTEwyX0sgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMMl9LIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0tfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMTYgIC8qIEZMTDJfSyAtIFsxNTowXSAqLworCisvKgorICogUjU3OSAoMHgyNDMpIC0gRkxMMiBDb250cm9sICg0KQorICovCisjZGVmaW5lIFdNODk5NF9GTEwyX05fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDdGRTAgIC8qIEZMTDJfTiAtIFsxNDo1XSAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9OX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBGTEwyX04gLSBbMTQ6NV0gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfTl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxMCAgLyogRkxMMl9OIC0gWzE0OjVdICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0xPT1BfR0FJTl9NQVNLICAgICAgICAgICAgICAweDAwMEYgIC8qIEZMTDJfTE9PUF9HQUlOIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfTE9PUF9HQUlOX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogRkxMMl9MT09QX0dBSU4gLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9MT09QX0dBSU5fV0lEVEggICAgICAgICAgICAgICAgICA0ICAvKiBGTEwyX0xPT1BfR0FJTiAtIFszOjBdICovCisKKy8qCisgKiBSNTgwICgweDI0NCkgLSBGTEwyIENvbnRyb2wgKDUpCisgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfRlJDX05DT19WQUxfTUFTSyAgICAgICAgICAgIDB4MUY4MCAgLyogRkxMMl9GUkNfTkNPX1ZBTCAtIFsxMjo3XSAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9GUkNfTkNPX1ZBTF9TSElGVCAgICAgICAgICAgICAgICA3ICAvKiBGTEwyX0ZSQ19OQ09fVkFMIC0gWzEyOjddICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0ZSQ19OQ09fVkFMX1dJRFRIICAgICAgICAgICAgICAgIDYgIC8qIEZMTDJfRlJDX05DT19WQUwgLSBbMTI6N10gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfRlJDX05DTyAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogRkxMMl9GUkNfTkNPICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0ZSQ19OQ09fTUFTSyAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEZMTDJfRlJDX05DTyAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9GUkNfTkNPX1NISUZUICAgICAgICAgICAgICAgICAgICA2ICAvKiBGTEwyX0ZSQ19OQ08gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfRlJDX05DT19XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogRkxMMl9GUkNfTkNPICovCisjZGVmaW5lIFdNODk5NF9GTEwyX1JFRkNMS19ESVZfTUFTSyAgICAgICAgICAgICAweDAwMTggIC8qIEZMTDJfUkVGQ0xLX0RJViAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5NF9GTEwyX1JFRkNMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgIDMgIC8qIEZMTDJfUkVGQ0xLX0RJViAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5NF9GTEwyX1JFRkNMS19ESVZfV0lEVEggICAgICAgICAgICAgICAgIDIgIC8qIEZMTDJfUkVGQ0xLX0RJViAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5NF9GTEwyX1JFRkNMS19TUkNfTUFTSyAgICAgICAgICAgICAweDAwMDMgIC8qIEZMTDJfUkVGQ0xLX1NSQyAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5NF9GTEwyX1JFRkNMS19TUkNfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIEZMTDJfUkVGQ0xLX1NSQyAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5NF9GTEwyX1JFRkNMS19TUkNfV0lEVEggICAgICAgICAgICAgICAgIDIgIC8qIEZMTDJfUkVGQ0xLX1NSQyAtIFsxOjBdICovCisKKy8qCisgKiBSNzY4ICgweDMwMCkgLSBBSUYxIENvbnRyb2wgKDEpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENMX1NSQyAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMUFEQ0xfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDTF9TUkNfTUFTSyAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRjFBRENMX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ0xfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgIDE1ICAvKiBBSUYxQURDTF9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENMX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMUFEQ0xfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDUl9TUkMgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEFJRjFBRENSX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ1JfU1JDX01BU0sgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBBSUYxQURDUl9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENSX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAxNCAgLyogQUlGMUFEQ1JfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDUl9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFBRENSX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ19URE0gICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBBSUYxQURDX1RETSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ19URE1fTUFTSyAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBBSUYxQURDX1RETSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ19URE1fU0hJRlQgICAgICAgICAgICAgICAgICAgIDEzICAvKiBBSUYxQURDX1RETSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ19URE1fV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxQURDX1RETSAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9CQ0xLX0lOViAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYxX0JDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYxX0JDTEtfSU5WX01BU0sgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjFfQkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfQkNMS19JTlZfU0hJRlQgICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMV9CQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9CQ0xLX0lOVl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxX0JDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYxX0xSQ0xLX0lOViAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEFJRjFfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYxX0xSQ0xLX0lOVl9NQVNLICAgICAgICAgICAgICAweDAwODAgIC8qIEFJRjFfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYxX0xSQ0xLX0lOVl9TSElGVCAgICAgICAgICAgICAgICAgIDcgIC8qIEFJRjFfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYxX0xSQ0xLX0lOVl9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFfTFJDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYxX1dMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwNjAgIC8qIEFJRjFfV0wgLSBbNjo1XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9XTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBBSUYxX1dMIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfV0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlGMV9XTCAtIFs2OjVdICovCisjZGVmaW5lIFdNODk5NF9BSUYxX0ZNVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMTggIC8qIEFJRjFfRk1UIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfRk1UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogQUlGMV9GTVQgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9GTVRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBBSUYxX0ZNVCAtIFs0OjNdICovCisKKy8qCisgKiBSNzY5ICgweDMwMSkgLSBBSUYxIENvbnRyb2wgKDIpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNMX1NSQyAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMURBQ0xfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDTF9TUkNfTUFTSyAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRjFEQUNMX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ0xfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgIDE1ICAvKiBBSUYxREFDTF9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNMX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQ0xfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDUl9TUkMgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEFJRjFEQUNSX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ1JfU1JDX01BU0sgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBBSUYxREFDUl9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNSX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAxNCAgLyogQUlGMURBQ1JfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDUl9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUNSX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ19CT09TVF9NQVNLICAgICAgICAgICAgICAgMHgwQzAwICAvKiBBSUYxREFDX0JPT1NUIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ19CT09TVF9TSElGVCAgICAgICAgICAgICAgICAgIDEwICAvKiBBSUYxREFDX0JPT1NUIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ19CT09TVF9XSURUSCAgICAgICAgICAgICAgICAgICAyICAvKiBBSUYxREFDX0JPT1NUIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9NT05PICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYxX01PTk8gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfTU9OT19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMV9NT05PICovCisjZGVmaW5lIFdNODk5NF9BSUYxX01PTk9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjFfTU9OTyAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9NT05PX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxX01PTk8gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNfQ09NUCAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQUlGMURBQ19DT01QICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDX0NPTVBfTUFTSyAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFJRjFEQUNfQ09NUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ19DT01QX1NISUZUICAgICAgICAgICAgICAgICAgICA0ICAvKiBBSUYxREFDX0NPTVAgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNfQ09NUF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQ19DT01QICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDX0NPTVBNT0RFICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEFJRjFEQUNfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNfQ09NUE1PREVfTUFTSyAgICAgICAgICAgIDB4MDAwOCAgLyogQUlGMURBQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ19DT01QTU9ERV9TSElGVCAgICAgICAgICAgICAgICAzICAvKiBBSUYxREFDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDX0NPTVBNT0RFX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUNfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENfQ09NUCAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMUFEQ19DT01QICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDX0NPTVBfTUFTSyAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjFBRENfQ09NUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ19DT01QX1NISUZUICAgICAgICAgICAgICAgICAgICAyICAvKiBBSUYxQURDX0NPTVAgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENfQ09NUF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMUFEQ19DT01QICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDX0NPTVBNT0RFICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjFBRENfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENfQ09NUE1PREVfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMUFEQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ19DT01QTU9ERV9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBBSUYxQURDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDX0NPTVBNT0RFX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFBRENfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfTE9PUEJBQ0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMV9MT09QQkFDSyAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9MT09QQkFDS19NQVNLICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxX0xPT1BCQUNLICovCisjZGVmaW5lIFdNODk5NF9BSUYxX0xPT1BCQUNLX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFfTE9PUEJBQ0sgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfTE9PUEJBQ0tfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMV9MT09QQkFDSyAqLworCisvKgorICogUjc3MCAoMHgzMDIpIC0gQUlGMSBNYXN0ZXIvU2xhdmUKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9UUkkgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYxX1RSSSAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9UUklfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYxX1RSSSAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9UUklfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBBSUYxX1RSSSAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9UUklfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxX1RSSSAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9NU1RSICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBBSUYxX01TVFIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfTVNUUl9NQVNLICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogQUlGMV9NU1RSICovCisjZGVmaW5lIFdNODk5NF9BSUYxX01TVFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIEFJRjFfTVNUUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9NU1RSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxX01TVFIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfQ0xLX0ZSQyAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogQUlGMV9DTEtfRlJDICovCisjZGVmaW5lIFdNODk5NF9BSUYxX0NMS19GUkNfTUFTSyAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEFJRjFfQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9DTEtfRlJDX1NISUZUICAgICAgICAgICAgICAgICAgIDEzICAvKiBBSUYxX0NMS19GUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfQ0xLX0ZSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMV9DTEtfRlJDICovCisjZGVmaW5lIFdNODk5NF9BSUYxX0xSQ0xLX0ZSQyAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIEFJRjFfTFJDTEtfRlJDICovCisjZGVmaW5lIFdNODk5NF9BSUYxX0xSQ0xLX0ZSQ19NQVNLICAgICAgICAgICAgICAweDEwMDAgIC8qIEFJRjFfTFJDTEtfRlJDICovCisjZGVmaW5lIFdNODk5NF9BSUYxX0xSQ0xLX0ZSQ19TSElGVCAgICAgICAgICAgICAgICAgMTIgIC8qIEFJRjFfTFJDTEtfRlJDICovCisjZGVmaW5lIFdNODk5NF9BSUYxX0xSQ0xLX0ZSQ19XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFfTFJDTEtfRlJDICovCisKKy8qCisgKiBSNzcxICgweDMwMykgLSBBSUYxIEJDTEsKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9CQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgMHgwMUYwICAvKiBBSUYxX0JDTEtfRElWIC0gWzg6NF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfQkNMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgNCAgLyogQUlGMV9CQ0xLX0RJViAtIFs4OjRdICovCisjZGVmaW5lIFdNODk5NF9BSUYxX0JDTEtfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgIDUgIC8qIEFJRjFfQkNMS19ESVYgLSBbODo0XSAqLworCisvKgorICogUjc3MiAoMHgzMDQpIC0gQUlGMUFEQyBMUkNMSworICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDX0xSQ0xLX0RJUiAgICAgICAgICAgICAgICAweDA4MDAgIC8qIEFJRjFBRENfTFJDTEtfRElSICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDX0xSQ0xLX0RJUl9NQVNLICAgICAgICAgICAweDA4MDAgIC8qIEFJRjFBRENfTFJDTEtfRElSICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDX0xSQ0xLX0RJUl9TSElGVCAgICAgICAgICAgICAgMTEgIC8qIEFJRjFBRENfTFJDTEtfRElSICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDX0xSQ0xLX0RJUl9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEFJRjFBRENfTFJDTEtfRElSICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAweDA3RkYgIC8qIEFJRjFBRENfUkFURSAtIFsxMDowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ19SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAwICAvKiBBSUYxQURDX1JBVEUgLSBbMTA6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAxMSAgLyogQUlGMUFEQ19SQVRFIC0gWzEwOjBdICovCisKKy8qCisgKiBSNzczICgweDMwNSkgLSBBSUYxREFDIExSQ0xLCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNfTFJDTEtfRElSICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogQUlGMURBQ19MUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNfTFJDTEtfRElSX01BU0sgICAgICAgICAgIDB4MDgwMCAgLyogQUlGMURBQ19MUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNfTFJDTEtfRElSX1NISUZUICAgICAgICAgICAgICAxMSAgLyogQUlGMURBQ19MUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNfTFJDTEtfRElSX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQ19MUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNfUkFURV9NQVNLICAgICAgICAgICAgICAgIDB4MDdGRiAgLyogQUlGMURBQ19SQVRFIC0gWzEwOjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUNfUkFURSAtIFsxMDowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ19SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgIDExICAvKiBBSUYxREFDX1JBVEUgLSBbMTA6MF0gKi8KKworLyoKKyAqIFI3NzQgKDB4MzA2KSAtIEFJRjFEQUMgRGF0YQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDTF9EQVRfSU5WICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjFEQUNMX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNMX0RBVF9JTlZfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMURBQ0xfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ0xfREFUX0lOVl9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBBSUYxREFDTF9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDTF9EQVRfSU5WX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUNMX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNSX0RBVF9JTlYgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMURBQ1JfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ1JfREFUX0lOVl9NQVNLICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxREFDUl9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDUl9EQVRfSU5WX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUNSX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNSX0RBVF9JTlZfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQ1JfREFUX0lOViAqLworCisvKgorICogUjc3NSAoMHgzMDcpIC0gQUlGMUFEQyBEYXRhCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENMX0RBVF9JTlYgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMUFEQ0xfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ0xfREFUX0lOVl9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYxQURDTF9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDTF9EQVRfSU5WX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFBRENMX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENMX0RBVF9JTlZfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMUFEQ0xfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ1JfREFUX0lOViAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxQURDUl9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDUl9EQVRfSU5WX01BU0sgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFBRENSX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENSX0RBVF9JTlZfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMUFEQ1JfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ1JfREFUX0lOVl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYxQURDUl9EQVRfSU5WICovCisKKy8qCisgKiBSNzg0ICgweDMxMCkgLSBBSUYyIENvbnRyb2wgKDEpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENMX1NSQyAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMkFEQ0xfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDTF9TUkNfTUFTSyAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRjJBRENMX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ0xfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgIDE1ICAvKiBBSUYyQURDTF9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENMX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMkFEQ0xfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDUl9TUkMgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEFJRjJBRENSX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ1JfU1JDX01BU0sgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBBSUYyQURDUl9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENSX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAxNCAgLyogQUlGMkFEQ1JfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDUl9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJBRENSX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19URE0gICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBBSUYyQURDX1RETSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19URE1fTUFTSyAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBBSUYyQURDX1RETSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19URE1fU0hJRlQgICAgICAgICAgICAgICAgICAgIDEzICAvKiBBSUYyQURDX1RETSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19URE1fV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYyQURDX1RETSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19URE1fQ0hBTiAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBBSUYyQURDX1RETV9DSEFOICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX1RETV9DSEFOX01BU0sgICAgICAgICAgICAweDEwMDAgIC8qIEFJRjJBRENfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENfVERNX0NIQU5fU0hJRlQgICAgICAgICAgICAgICAxMiAgLyogQUlGMkFEQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19URE1fQ0hBTl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYyQURDX1RETV9DSEFOICovCisjZGVmaW5lIFdNODk5NF9BSUYyX0JDTEtfSU5WICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjJfQkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfQkNMS19JTlZfTUFTSyAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMl9CQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9CQ0xLX0lOVl9TSElGVCAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYyX0JDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYyX0JDTEtfSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJfQkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfTFJDTEtfSU5WICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQUlGMl9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfTFJDTEtfSU5WX01BU0sgICAgICAgICAgICAgIDB4MDA4MCAgLyogQUlGMl9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfTFJDTEtfSU5WX1NISUZUICAgICAgICAgICAgICAgICAgNyAgLyogQUlGMl9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfTFJDTEtfSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMl9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfV0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA2MCAgLyogQUlGMl9XTCAtIFs2OjVdICovCisjZGVmaW5lIFdNODk5NF9BSUYyX1dMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEFJRjJfV0wgLSBbNjo1XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9XTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBBSUYyX1dMIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfRk1UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxOCAgLyogQUlGMl9GTVQgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9GTVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBBSUYyX0ZNVCAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5NF9BSUYyX0ZNVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFJRjJfRk1UIC0gWzQ6M10gKi8KKworLyoKKyAqIFI3ODUgKDB4MzExKSAtIEFJRjIgQ29udHJvbCAoMikKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ0xfU1JDICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYyREFDTF9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNMX1NSQ19NQVNLICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMkRBQ0xfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgMTUgIC8qIEFJRjJEQUNMX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ0xfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYyREFDTF9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNSX1NSQyAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogQUlGMkRBQ1JfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDUl9TUkNfTUFTSyAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEFJRjJEQUNSX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ1JfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgIDE0ICAvKiBBSUYyREFDUl9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNSX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMkRBQ1JfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX1RETSAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEFJRjJEQUNfVERNICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX1RETV9NQVNLICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEFJRjJEQUNfVERNICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX1RETV9TSElGVCAgICAgICAgICAgICAgICAgICAgMTMgIC8qIEFJRjJEQUNfVERNICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX1RETV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJEQUNfVERNICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX1RETV9DSEFOICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIEFJRjJEQUNfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfVERNX0NIQU5fTUFTSyAgICAgICAgICAgIDB4MTAwMCAgLyogQUlGMkRBQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19URE1fQ0hBTl9TSElGVCAgICAgICAgICAgICAgIDEyICAvKiBBSUYyREFDX1RETV9DSEFOICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX1RETV9DSEFOX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJEQUNfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfQk9PU1RfTUFTSyAgICAgICAgICAgICAgIDB4MEMwMCAgLyogQUlGMkRBQ19CT09TVCAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfQk9PU1RfU0hJRlQgICAgICAgICAgICAgICAgICAxMCAgLyogQUlGMkRBQ19CT09TVCAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfQk9PU1RfV0lEVEggICAgICAgICAgICAgICAgICAgMiAgLyogQUlGMkRBQ19CT09TVCAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfTU9OTyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMl9NT05PICovCisjZGVmaW5lIFdNODk5NF9BSUYyX01PTk9fTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjJfTU9OTyAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9NT05PX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYyX01PTk8gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfTU9OT19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMl9NT05PICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0NPTVAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFJRjJEQUNfQ09NUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19DT01QX01BU0sgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBSUYyREFDX0NPTVAgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgICAgNCAgLyogQUlGMkRBQ19DT01QICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0NPTVBfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJEQUNfQ09NUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19DT01QTU9ERSAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBBSUYyREFDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0NPTVBNT0RFX01BU0sgICAgICAgICAgICAweDAwMDggIC8qIEFJRjJEQUNfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfQ09NUE1PREVfU0hJRlQgICAgICAgICAgICAgICAgMyAgLyogQUlGMkRBQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19DT01QTU9ERV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYyREFDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX0NPTVAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjJBRENfQ09NUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19DT01QX01BU0sgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYyQURDX0NPTVAgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENfQ09NUF9TSElGVCAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlGMkFEQ19DT01QICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX0NPTVBfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJBRENfQ09NUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19DT01QTU9ERSAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYyQURDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX0NPTVBNT0RFX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjJBRENfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENfQ09NUE1PREVfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogQUlGMkFEQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19DT01QTU9ERV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYyQURDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODk5NF9BSUYyX0xPT1BCQUNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjJfTE9PUEJBQ0sgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfTE9PUEJBQ0tfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMl9MT09QQkFDSyAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9MT09QQkFDS19TSElGVCAgICAgICAgICAgICAgICAgICAwICAvKiBBSUYyX0xPT1BCQUNLICovCisjZGVmaW5lIFdNODk5NF9BSUYyX0xPT1BCQUNLX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJfTE9PUEJBQ0sgKi8KKworLyoKKyAqIFI3ODYgKDB4MzEyKSAtIEFJRjIgTWFzdGVyL1NsYXZlCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfVFJJICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMl9UUkkgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfVFJJX01BU0sgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMl9UUkkgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfVFJJX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxNSAgLyogQUlGMl9UUkkgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfVFJJX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMl9UUkkgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfTVNUUiAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogQUlGMl9NU1RSICovCisjZGVmaW5lIFdNODk5NF9BSUYyX01TVFJfTUFTSyAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEFJRjJfTVNUUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9NU1RSX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDE0ICAvKiBBSUYyX01TVFIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfTVNUUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMl9NU1RSICovCisjZGVmaW5lIFdNODk5NF9BSUYyX0NMS19GUkMgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEFJRjJfQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9DTEtfRlJDX01BU0sgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBBSUYyX0NMS19GUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfQ0xLX0ZSQ19TSElGVCAgICAgICAgICAgICAgICAgICAxMyAgLyogQUlGMl9DTEtfRlJDICovCisjZGVmaW5lIFdNODk5NF9BSUYyX0NMS19GUkNfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJfQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9MUkNMS19GUkMgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBBSUYyX0xSQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9MUkNMS19GUkNfTUFTSyAgICAgICAgICAgICAgMHgxMDAwICAvKiBBSUYyX0xSQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9MUkNMS19GUkNfU0hJRlQgICAgICAgICAgICAgICAgIDEyICAvKiBBSUYyX0xSQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9MUkNMS19GUkNfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBBSUYyX0xSQ0xLX0ZSQyAqLworCisvKgorICogUjc4NyAoMHgzMTMpIC0gQUlGMiBCQ0xLCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfQkNMS19ESVZfTUFTSyAgICAgICAgICAgICAgIDB4MDFGMCAgLyogQUlGMl9CQ0xLX0RJViAtIFs4OjRdICovCisjZGVmaW5lIFdNODk5NF9BSUYyX0JDTEtfRElWX1NISUZUICAgICAgICAgICAgICAgICAgIDQgIC8qIEFJRjJfQkNMS19ESVYgLSBbODo0XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9CQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICA1ICAvKiBBSUYyX0JDTEtfRElWIC0gWzg6NF0gKi8KKworLyoKKyAqIFI3ODggKDB4MzE0KSAtIEFJRjJBREMgTFJDTEsKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19MUkNMS19ESVIgICAgICAgICAgICAgICAgMHgwODAwICAvKiBBSUYyQURDX0xSQ0xLX0RJUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19MUkNMS19ESVJfTUFTSyAgICAgICAgICAgMHgwODAwICAvKiBBSUYyQURDX0xSQ0xLX0RJUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19MUkNMS19ESVJfU0hJRlQgICAgICAgICAgICAgIDExICAvKiBBSUYyQURDX0xSQ0xLX0RJUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19MUkNMS19ESVJfV0lEVEggICAgICAgICAgICAgICAxICAvKiBBSUYyQURDX0xSQ0xLX0RJUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19SQVRFX01BU0sgICAgICAgICAgICAgICAgMHgwN0ZGICAvKiBBSUYyQURDX1JBVEUgLSBbMTA6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMkFEQ19SQVRFIC0gWzEwOjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgMTEgIC8qIEFJRjJBRENfUkFURSAtIFsxMDowXSAqLworCisvKgorICogUjc4OSAoMHgzMTUpIC0gQUlGMkRBQyBMUkNMSworICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0xSQ0xLX0RJUiAgICAgICAgICAgICAgICAweDA4MDAgIC8qIEFJRjJEQUNfTFJDTEtfRElSICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0xSQ0xLX0RJUl9NQVNLICAgICAgICAgICAweDA4MDAgIC8qIEFJRjJEQUNfTFJDTEtfRElSICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0xSQ0xLX0RJUl9TSElGVCAgICAgICAgICAgICAgMTEgIC8qIEFJRjJEQUNfTFJDTEtfRElSICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0xSQ0xLX0RJUl9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEFJRjJEQUNfTFJDTEtfRElSICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAweDA3RkYgIC8qIEFJRjJEQUNfUkFURSAtIFsxMDowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAwICAvKiBBSUYyREFDX1JBVEUgLSBbMTA6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAxMSAgLyogQUlGMkRBQ19SQVRFIC0gWzEwOjBdICovCisKKy8qCisgKiBSNzkwICgweDMxNikgLSBBSUYyREFDIERhdGEKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ0xfREFUX0lOViAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYyREFDTF9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9EQVRfSU5WX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjJEQUNMX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNMX0RBVF9JTlZfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogQUlGMkRBQ0xfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ0xfREFUX0lOVl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYyREFDTF9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDUl9EQVRfSU5WICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjJEQUNSX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNSX0RBVF9JTlZfTUFTSyAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMkRBQ1JfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ1JfREFUX0lOVl9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYyREFDUl9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDUl9EQVRfSU5WX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJEQUNSX0RBVF9JTlYgKi8KKworLyoKKyAqIFI3OTEgKDB4MzE3KSAtIEFJRjJBREMgRGF0YQorICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDTF9EQVRfSU5WICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjJBRENMX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENMX0RBVF9JTlZfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMkFEQ0xfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ0xfREFUX0lOVl9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBBSUYyQURDTF9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDTF9EQVRfSU5WX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJBRENMX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENSX0RBVF9JTlYgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMkFEQ1JfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ1JfREFUX0lOVl9NQVNLICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYyQURDUl9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDUl9EQVRfSU5WX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJBRENSX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENSX0RBVF9JTlZfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMkFEQ1JfREFUX0lOViAqLworCisvKgorICogUjEwMjQgKDB4NDAwKSAtIEFJRjEgQURDMSBMZWZ0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMV9WVSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjFBREMxX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMV9WVV9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjFBREMxX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMV9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjFBREMxX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMV9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFBREMxX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMUxfVk9MX01BU0sgICAgICAgICAgICAgICAweDAwRkYgIC8qIEFJRjFBREMxTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAwICAvKiBBSUYxQURDMUxfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMUFEQzFMX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTAyNSAoMHg0MDEpIC0gQUlGMSBBREMxIFJpZ2h0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMV9WVSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjFBREMxX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMV9WVV9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjFBREMxX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMV9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjFBREMxX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMV9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFBREMxX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMVJfVk9MX01BU0sgICAgICAgICAgICAgICAweDAwRkYgIC8qIEFJRjFBREMxUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAwICAvKiBBSUYxQURDMVJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMUFEQzFSX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTAyNiAoMHg0MDIpIC0gQUlGMSBEQUMxIExlZnQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX1ZVICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMURBQzFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX1ZVX01BU0sgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMURBQzFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMURBQzFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxTF9WT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDBGRiAgLyogQUlGMURBQzFMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMUxfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMxTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYxREFDMUxfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMDI3ICgweDQwMykgLSBBSUYxIERBQzEgUmlnaHQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX1ZVICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMURBQzFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX1ZVX01BU0sgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMURBQzFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMURBQzFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxUl9WT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDBGRiAgLyogQUlGMURBQzFSX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMVJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMxUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYxREFDMVJfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMDI4ICgweDQwNCkgLSBBSUYxIEFEQzIgTGVmdCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzJfVlUgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYxQURDMl9WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzJfVlVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYxQURDMl9WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzJfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYxQURDMl9WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzJfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxQURDMl9WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzJMX1ZPTF9NQVNLICAgICAgICAgICAgICAgMHgwMEZGICAvKiBBSUYxQURDMkxfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMUFEQzJMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMkxfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjFBREMyTF9WT0wgLSBbNzowXSAqLworCisvKgorICogUjEwMjkgKDB4NDA1KSAtIEFJRjEgQURDMiBSaWdodCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzJfVlUgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYxQURDMl9WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzJfVlVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYxQURDMl9WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzJfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYxQURDMl9WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzJfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxQURDMl9WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzJSX1ZPTF9NQVNLICAgICAgICAgICAgICAgMHgwMEZGICAvKiBBSUYxQURDMlJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMUFEQzJSX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMlJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjFBREMyUl9WT0wgLSBbNzowXSAqLworCisvKgorICogUjEwMzAgKDB4NDA2KSAtIEFJRjEgREFDMiBMZWZ0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9WVSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjFEQUMyX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9WVV9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjFEQUMyX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjFEQUMyX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMyX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMkxfVk9MX01BU0sgICAgICAgICAgICAgICAweDAwRkYgIC8qIEFJRjFEQUMyTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMkxfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMURBQzJMX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTAzMSAoMHg0MDcpIC0gQUlGMSBEQUMyIFJpZ2h0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9WVSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjFEQUMyX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9WVV9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjFEQUMyX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjFEQUMyX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMyX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMlJfVk9MX01BU0sgICAgICAgICAgICAgICAweDAwRkYgIC8qIEFJRjFEQUMyUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMlJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMURBQzJSX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTA0MCAoMHg0MTApIC0gQUlGMSBBREMxIEZpbHRlcnMKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ180RlMgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYxQURDXzRGUyAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ180RlNfTUFTSyAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYxQURDXzRGUyAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ180RlNfU0hJRlQgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBBSUYxQURDXzRGUyAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ180RlNfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxQURDXzRGUyAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFfSFBGX0NVVF9NQVNLICAgICAgICAgICAgMHg2MDAwICAvKiBBSUYxQURDMV9IUEZfQ1VUIC0gWzE0OjEzXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFfSFBGX0NVVF9TSElGVCAgICAgICAgICAgICAgIDEzICAvKiBBSUYxQURDMV9IUEZfQ1VUIC0gWzE0OjEzXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFfSFBGX0NVVF9XSURUSCAgICAgICAgICAgICAgICAyICAvKiBBSUYxQURDMV9IUEZfQ1VUIC0gWzE0OjEzXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFMX0hQRiAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBBSUYxQURDMUxfSFBGICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMUxfSFBGX01BU0sgICAgICAgICAgICAgICAweDEwMDAgIC8qIEFJRjFBREMxTF9IUEYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxTF9IUEZfU0hJRlQgICAgICAgICAgICAgICAgICAxMiAgLyogQUlGMUFEQzFMX0hQRiAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFMX0hQRl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxQURDMUxfSFBGICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMVJfSFBGICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIEFJRjFBREMxUl9IUEYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxUl9IUEZfTUFTSyAgICAgICAgICAgICAgIDB4MDgwMCAgLyogQUlGMUFEQzFSX0hQRiAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFSX0hQRl9TSElGVCAgICAgICAgICAgICAgICAgIDExICAvKiBBSUYxQURDMVJfSFBGICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMVJfSFBGX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFBREMxUl9IUEYgKi8KKworLyoKKyAqIFIxMDQxICgweDQxMSkgLSBBSUYxIEFEQzIgRmlsdGVycworICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMl9IUEZfQ1VUX01BU0sgICAgICAgICAgICAweDYwMDAgIC8qIEFJRjFBREMyX0hQRl9DVVQgLSBbMTQ6MTNdICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMl9IUEZfQ1VUX1NISUZUICAgICAgICAgICAgICAgMTMgIC8qIEFJRjFBREMyX0hQRl9DVVQgLSBbMTQ6MTNdICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMl9IUEZfQ1VUX1dJRFRIICAgICAgICAgICAgICAgIDIgIC8qIEFJRjFBREMyX0hQRl9DVVQgLSBbMTQ6MTNdICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMkxfSFBGICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIEFJRjFBREMyTF9IUEYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyTF9IUEZfTUFTSyAgICAgICAgICAgICAgIDB4MTAwMCAgLyogQUlGMUFEQzJMX0hQRiAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzJMX0hQRl9TSElGVCAgICAgICAgICAgICAgICAgIDEyICAvKiBBSUYxQURDMkxfSFBGICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMkxfSFBGX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFBREMyTF9IUEYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyUl9IUEYgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogQUlGMUFEQzJSX0hQRiAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzJSX0hQRl9NQVNLICAgICAgICAgICAgICAgMHgwODAwICAvKiBBSUYxQURDMlJfSFBGICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMlJfSFBGX1NISUZUICAgICAgICAgICAgICAgICAgMTEgIC8qIEFJRjFBREMyUl9IUEYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyUl9IUEZfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMUFEQzJSX0hQRiAqLworCisvKgorICogUjEwNTYgKDB4NDIwKSAtIEFJRjEgREFDMSBGaWx0ZXJzICgxKQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9NVVRFICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEFJRjFEQUMxX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX01VVEVfTUFTSyAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQUlGMURBQzFfTVVURSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICA5ICAvKiBBSUYxREFDMV9NVVRFICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMxX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX01PTk8gICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQUlGMURBQzFfTU9OTyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfTU9OT19NQVNLICAgICAgICAgICAgICAgMHgwMDgwICAvKiBBSUYxREFDMV9NT05PICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9NT05PX1NISUZUICAgICAgICAgICAgICAgICAgIDcgIC8qIEFJRjFEQUMxX01PTk8gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX01PTk9fV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzFfTU9OTyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfTVVURVJBVEUgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBBSUYxREFDMV9NVVRFUkFURSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfTVVURVJBVEVfTUFTSyAgICAgICAgICAgMHgwMDIwICAvKiBBSUYxREFDMV9NVVRFUkFURSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfTVVURVJBVEVfU0hJRlQgICAgICAgICAgICAgICA1ICAvKiBBSUYxREFDMV9NVVRFUkFURSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfTVVURVJBVEVfV0lEVEggICAgICAgICAgICAgICAxICAvKiBBSUYxREFDMV9NVVRFUkFURSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfVU5NVVRFX1JBTVAgICAgICAgICAgICAgMHgwMDEwICAvKiBBSUYxREFDMV9VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfVU5NVVRFX1JBTVBfTUFTSyAgICAgICAgMHgwMDEwICAvKiBBSUYxREFDMV9VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfVU5NVVRFX1JBTVBfU0hJRlQgICAgICAgICAgICA0ICAvKiBBSUYxREFDMV9VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfVU5NVVRFX1JBTVBfV0lEVEggICAgICAgICAgICAxICAvKiBBSUYxREFDMV9VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfREVFTVBfTUFTSyAgICAgICAgICAgICAgMHgwMDA2ICAvKiBBSUYxREFDMV9ERUVNUCAtIFsyOjFdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9ERUVNUF9TSElGVCAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMxX0RFRU1QIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0RFRU1QX1dJRFRIICAgICAgICAgICAgICAgICAgMiAgLyogQUlGMURBQzFfREVFTVAgLSBbMjoxXSAqLworCisvKgorICogUjEwNTcgKDB4NDIxKSAtIEFJRjEgREFDMSBGaWx0ZXJzICgyKQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV8zRF9HQUlOX01BU0sgICAgICAgICAgICAweDNFMDAgIC8qIEFJRjFEQUMxXzNEX0dBSU4gLSBbMTM6OV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxXzNEX0dBSU5fU0hJRlQgICAgICAgICAgICAgICAgOSAgLyogQUlGMURBQzFfM0RfR0FJTiAtIFsxMzo5XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfM0RfR0FJTl9XSURUSCAgICAgICAgICAgICAgICA1ICAvKiBBSUYxREFDMV8zRF9HQUlOIC0gWzEzOjldICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV8zRF9FTkEgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjFEQUMxXzNEX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfM0RfRU5BX01BU0sgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYxREFDMV8zRF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxXzNEX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgOCAgLyogQUlGMURBQzFfM0RfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV8zRF9FTkFfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMxXzNEX0VOQSAqLworCisvKgorICogUjEwNTggKDB4NDIyKSAtIEFJRjEgREFDMiBGaWx0ZXJzICgxKQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9NVVRFICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEFJRjFEQUMyX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX01VVEVfTUFTSyAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQUlGMURBQzJfTVVURSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICA5ICAvKiBBSUYxREFDMl9NVVRFICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMyX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX01PTk8gICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQUlGMURBQzJfTU9OTyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfTU9OT19NQVNLICAgICAgICAgICAgICAgMHgwMDgwICAvKiBBSUYxREFDMl9NT05PICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9NT05PX1NISUZUICAgICAgICAgICAgICAgICAgIDcgIC8qIEFJRjFEQUMyX01PTk8gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX01PTk9fV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzJfTU9OTyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfTVVURVJBVEUgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBBSUYxREFDMl9NVVRFUkFURSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfTVVURVJBVEVfTUFTSyAgICAgICAgICAgMHgwMDIwICAvKiBBSUYxREFDMl9NVVRFUkFURSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfTVVURVJBVEVfU0hJRlQgICAgICAgICAgICAgICA1ICAvKiBBSUYxREFDMl9NVVRFUkFURSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfTVVURVJBVEVfV0lEVEggICAgICAgICAgICAgICAxICAvKiBBSUYxREFDMl9NVVRFUkFURSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfVU5NVVRFX1JBTVAgICAgICAgICAgICAgMHgwMDEwICAvKiBBSUYxREFDMl9VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfVU5NVVRFX1JBTVBfTUFTSyAgICAgICAgMHgwMDEwICAvKiBBSUYxREFDMl9VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfVU5NVVRFX1JBTVBfU0hJRlQgICAgICAgICAgICA0ICAvKiBBSUYxREFDMl9VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfVU5NVVRFX1JBTVBfV0lEVEggICAgICAgICAgICAxICAvKiBBSUYxREFDMl9VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfREVFTVBfTUFTSyAgICAgICAgICAgICAgMHgwMDA2ICAvKiBBSUYxREFDMl9ERUVNUCAtIFsyOjFdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9ERUVNUF9TSElGVCAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMyX0RFRU1QIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0RFRU1QX1dJRFRIICAgICAgICAgICAgICAgICAgMiAgLyogQUlGMURBQzJfREVFTVAgLSBbMjoxXSAqLworCisvKgorICogUjEwNTkgKDB4NDIzKSAtIEFJRjEgREFDMiBGaWx0ZXJzICgyKQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl8zRF9HQUlOX01BU0sgICAgICAgICAgICAweDNFMDAgIC8qIEFJRjFEQUMyXzNEX0dBSU4gLSBbMTM6OV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyXzNEX0dBSU5fU0hJRlQgICAgICAgICAgICAgICAgOSAgLyogQUlGMURBQzJfM0RfR0FJTiAtIFsxMzo5XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfM0RfR0FJTl9XSURUSCAgICAgICAgICAgICAgICA1ICAvKiBBSUYxREFDMl8zRF9HQUlOIC0gWzEzOjldICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl8zRF9FTkEgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjFEQUMyXzNEX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfM0RfRU5BX01BU0sgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYxREFDMl8zRF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyXzNEX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgOCAgLyogQUlGMURBQzJfM0RfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl8zRF9FTkFfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMyXzNEX0VOQSAqLworCisvKgorICogUjEwODggKDB4NDQwKSAtIEFJRjEgRFJDMSAoMSkKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfU0lHX0RFVF9STVNfTUFTSyAgICAgICAgMHhGODAwICAvKiBBSUYxRFJDMV9TSUdfREVUX1JNUyAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX1NJR19ERVRfUk1TX1NISUZUICAgICAgICAgICAxMSAgLyogQUlGMURSQzFfU0lHX0RFVF9STVMgLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9TSUdfREVUX1JNU19XSURUSCAgICAgICAgICAgIDUgIC8qIEFJRjFEUkMxX1NJR19ERVRfUk1TIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfU0lHX0RFVF9QS19NQVNLICAgICAgICAgMHgwNjAwICAvKiBBSUYxRFJDMV9TSUdfREVUX1BLIC0gWzEwOjldICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9TSUdfREVUX1BLX1NISUZUICAgICAgICAgICAgIDkgIC8qIEFJRjFEUkMxX1NJR19ERVRfUEsgLSBbMTA6OV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX1NJR19ERVRfUEtfV0lEVEggICAgICAgICAgICAgMiAgLyogQUlGMURSQzFfU0lHX0RFVF9QSyAtIFsxMDo5XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfTkdfRU5BICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYxRFJDMV9OR19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX05HX0VOQV9NQVNLICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMURSQzFfTkdfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9OR19FTkFfU0hJRlQgICAgICAgICAgICAgICAgIDggIC8qIEFJRjFEUkMxX05HX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfTkdfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBBSUYxRFJDMV9OR19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX1NJR19ERVRfTU9ERSAgICAgICAgICAgIDB4MDA4MCAgLyogQUlGMURSQzFfU0lHX0RFVF9NT0RFICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9TSUdfREVUX01PREVfTUFTSyAgICAgICAweDAwODAgIC8qIEFJRjFEUkMxX1NJR19ERVRfTU9ERSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfU0lHX0RFVF9NT0RFX1NISUZUICAgICAgICAgICA3ICAvKiBBSUYxRFJDMV9TSUdfREVUX01PREUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX1NJR19ERVRfTU9ERV9XSURUSCAgICAgICAgICAgMSAgLyogQUlGMURSQzFfU0lHX0RFVF9NT0RFICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9TSUdfREVUICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEFJRjFEUkMxX1NJR19ERVQgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX1NJR19ERVRfTUFTSyAgICAgICAgICAgIDB4MDA0MCAgLyogQUlGMURSQzFfU0lHX0RFVCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfU0lHX0RFVF9TSElGVCAgICAgICAgICAgICAgICA2ICAvKiBBSUYxRFJDMV9TSUdfREVUICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9TSUdfREVUX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEUkMxX1NJR19ERVQgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX0tORUUyX09QX0VOQSAgICAgICAgICAgIDB4MDAyMCAgLyogQUlGMURSQzFfS05FRTJfT1BfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9LTkVFMl9PUF9FTkFfTUFTSyAgICAgICAweDAwMjAgIC8qIEFJRjFEUkMxX0tORUUyX09QX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfS05FRTJfT1BfRU5BX1NISUZUICAgICAgICAgICA1ICAvKiBBSUYxRFJDMV9LTkVFMl9PUF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX0tORUUyX09QX0VOQV9XSURUSCAgICAgICAgICAgMSAgLyogQUlGMURSQzFfS05FRTJfT1BfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9RUiAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFJRjFEUkMxX1FSICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9RUl9NQVNLICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFJRjFEUkMxX1FSICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9RUl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEFJRjFEUkMxX1FSICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9RUl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEUkMxX1FSICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9BTlRJQ0xJUCAgICAgICAgICAgICAgICAweDAwMDggIC8qIEFJRjFEUkMxX0FOVElDTElQICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9BTlRJQ0xJUF9NQVNLICAgICAgICAgICAweDAwMDggIC8qIEFJRjFEUkMxX0FOVElDTElQICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9BTlRJQ0xJUF9TSElGVCAgICAgICAgICAgICAgIDMgIC8qIEFJRjFEUkMxX0FOVElDTElQICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9BTlRJQ0xJUF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEUkMxX0FOVElDTElQICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9EUkNfRU5BICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjFEQUMxX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0RSQ19FTkFfTUFTSyAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMURBQzFfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRFJDX0VOQV9TSElGVCAgICAgICAgICAgICAgICAyICAvKiBBSUYxREFDMV9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9EUkNfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMxX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxTF9EUkNfRU5BICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMUFEQzFMX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxTF9EUkNfRU5BX01BU0sgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMUFEQzFMX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxTF9EUkNfRU5BX1NISUZUICAgICAgICAgICAgICAgMSAgLyogQUlGMUFEQzFMX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxTF9EUkNfRU5BX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogQUlGMUFEQzFMX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxUl9EUkNfRU5BICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMUFEQzFSX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxUl9EUkNfRU5BX01BU0sgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMUFEQzFSX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxUl9EUkNfRU5BX1NISUZUICAgICAgICAgICAgICAgMCAgLyogQUlGMUFEQzFSX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxUl9EUkNfRU5BX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogQUlGMUFEQzFSX0RSQ19FTkEgKi8KKworLyoKKyAqIFIxMDg5ICgweDQ0MSkgLSBBSUYxIERSQzEgKDIpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX0FUS19NQVNLICAgICAgICAgICAgICAgIDB4MUUwMCAgLyogQUlGMURSQzFfQVRLIC0gWzEyOjldICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9BVEtfU0hJRlQgICAgICAgICAgICAgICAgICAgIDkgIC8qIEFJRjFEUkMxX0FUSyAtIFsxMjo5XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfQVRLX1dJRFRIICAgICAgICAgICAgICAgICAgICA0ICAvKiBBSUYxRFJDMV9BVEsgLSBbMTI6OV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX0RDWV9NQVNLICAgICAgICAgICAgICAgIDB4MDFFMCAgLyogQUlGMURSQzFfRENZIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX0RDWV9TSElGVCAgICAgICAgICAgICAgICAgICAgNSAgLyogQUlGMURSQzFfRENZIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX0RDWV9XSURUSCAgICAgICAgICAgICAgICAgICAgNCAgLyogQUlGMURSQzFfRENZIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX01JTkdBSU5fTUFTSyAgICAgICAgICAgIDB4MDAxQyAgLyogQUlGMURSQzFfTUlOR0FJTiAtIFs0OjJdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9NSU5HQUlOX1NISUZUICAgICAgICAgICAgICAgIDIgIC8qIEFJRjFEUkMxX01JTkdBSU4gLSBbNDoyXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfTUlOR0FJTl9XSURUSCAgICAgICAgICAgICAgICAzICAvKiBBSUYxRFJDMV9NSU5HQUlOIC0gWzQ6Ml0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX01BWEdBSU5fTUFTSyAgICAgICAgICAgIDB4MDAwMyAgLyogQUlGMURSQzFfTUFYR0FJTiAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9NQVhHQUlOX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEUkMxX01BWEdBSU4gLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfTUFYR0FJTl9XSURUSCAgICAgICAgICAgICAgICAyICAvKiBBSUYxRFJDMV9NQVhHQUlOIC0gWzE6MF0gKi8KKworLyoKKyAqIFIxMDkwICgweDQ0MikgLSBBSUYxIERSQzEgKDMpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX05HX01JTkdBSU5fTUFTSyAgICAgICAgIDB4RjAwMCAgLyogQUlGMURSQzFfTkdfTUlOR0FJTiAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX05HX01JTkdBSU5fU0hJRlQgICAgICAgICAgICAxMiAgLyogQUlGMURSQzFfTkdfTUlOR0FJTiAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX05HX01JTkdBSU5fV0lEVEggICAgICAgICAgICAgNCAgLyogQUlGMURSQzFfTkdfTUlOR0FJTiAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX05HX0VYUF9NQVNLICAgICAgICAgICAgIDB4MEMwMCAgLyogQUlGMURSQzFfTkdfRVhQIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfTkdfRVhQX1NISUZUICAgICAgICAgICAgICAgIDEwICAvKiBBSUYxRFJDMV9OR19FWFAgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9OR19FWFBfV0lEVEggICAgICAgICAgICAgICAgIDIgIC8qIEFJRjFEUkMxX05HX0VYUCAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX1FSX1RIUl9NQVNLICAgICAgICAgICAgIDB4MDMwMCAgLyogQUlGMURSQzFfUVJfVEhSIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX1FSX1RIUl9TSElGVCAgICAgICAgICAgICAgICAgOCAgLyogQUlGMURSQzFfUVJfVEhSIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX1FSX1RIUl9XSURUSCAgICAgICAgICAgICAgICAgMiAgLyogQUlGMURSQzFfUVJfVEhSIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX1FSX0RDWV9NQVNLICAgICAgICAgICAgIDB4MDBDMCAgLyogQUlGMURSQzFfUVJfRENZIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX1FSX0RDWV9TSElGVCAgICAgICAgICAgICAgICAgNiAgLyogQUlGMURSQzFfUVJfRENZIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX1FSX0RDWV9XSURUSCAgICAgICAgICAgICAgICAgMiAgLyogQUlGMURSQzFfUVJfRENZIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX0hJX0NPTVBfTUFTSyAgICAgICAgICAgIDB4MDAzOCAgLyogQUlGMURSQzFfSElfQ09NUCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9ISV9DT01QX1NISUZUICAgICAgICAgICAgICAgIDMgIC8qIEFJRjFEUkMxX0hJX0NPTVAgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfSElfQ09NUF9XSURUSCAgICAgICAgICAgICAgICAzICAvKiBBSUYxRFJDMV9ISV9DT01QIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX0xPX0NPTVBfTUFTSyAgICAgICAgICAgIDB4MDAwNyAgLyogQUlGMURSQzFfTE9fQ09NUCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9MT19DT01QX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEUkMxX0xPX0NPTVAgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfTE9fQ09NUF9XSURUSCAgICAgICAgICAgICAgICAzICAvKiBBSUYxRFJDMV9MT19DT01QIC0gWzI6MF0gKi8KKworLyoKKyAqIFIxMDkxICgweDQ0MykgLSBBSUYxIERSQzEgKDQpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX0tORUVfSVBfTUFTSyAgICAgICAgICAgIDB4MDdFMCAgLyogQUlGMURSQzFfS05FRV9JUCAtIFsxMDo1XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfS05FRV9JUF9TSElGVCAgICAgICAgICAgICAgICA1ICAvKiBBSUYxRFJDMV9LTkVFX0lQIC0gWzEwOjVdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9LTkVFX0lQX1dJRFRIICAgICAgICAgICAgICAgIDYgIC8qIEFJRjFEUkMxX0tORUVfSVAgLSBbMTA6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX0tORUVfT1BfTUFTSyAgICAgICAgICAgIDB4MDAxRiAgLyogQUlGMURSQzFfS05FRV9PUCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9LTkVFX09QX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEUkMxX0tORUVfT1AgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfS05FRV9PUF9XSURUSCAgICAgICAgICAgICAgICA1ICAvKiBBSUYxRFJDMV9LTkVFX09QIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxMDkyICgweDQ0NCkgLSBBSUYxIERSQzEgKDUpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX0tORUUyX0lQX01BU0sgICAgICAgICAgIDB4MDNFMCAgLyogQUlGMURSQzFfS05FRTJfSVAgLSBbOTo1XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfS05FRTJfSVBfU0hJRlQgICAgICAgICAgICAgICA1ICAvKiBBSUYxRFJDMV9LTkVFMl9JUCAtIFs5OjVdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9LTkVFMl9JUF9XSURUSCAgICAgICAgICAgICAgIDUgIC8qIEFJRjFEUkMxX0tORUUyX0lQIC0gWzk6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX0tORUUyX09QX01BU0sgICAgICAgICAgIDB4MDAxRiAgLyogQUlGMURSQzFfS05FRTJfT1AgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfS05FRTJfT1BfU0hJRlQgICAgICAgICAgICAgICAwICAvKiBBSUYxRFJDMV9LTkVFMl9PUCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9LTkVFMl9PUF9XSURUSCAgICAgICAgICAgICAgIDUgIC8qIEFJRjFEUkMxX0tORUUyX09QIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxMTA0ICgweDQ1MCkgLSBBSUYxIERSQzIgKDEpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX1NJR19ERVRfUk1TX01BU0sgICAgICAgIDB4RjgwMCAgLyogQUlGMURSQzJfU0lHX0RFVF9STVMgLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9TSUdfREVUX1JNU19TSElGVCAgICAgICAgICAgMTEgIC8qIEFJRjFEUkMyX1NJR19ERVRfUk1TIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfU0lHX0RFVF9STVNfV0lEVEggICAgICAgICAgICA1ICAvKiBBSUYxRFJDMl9TSUdfREVUX1JNUyAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX1NJR19ERVRfUEtfTUFTSyAgICAgICAgIDB4MDYwMCAgLyogQUlGMURSQzJfU0lHX0RFVF9QSyAtIFsxMDo5XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfU0lHX0RFVF9QS19TSElGVCAgICAgICAgICAgICA5ICAvKiBBSUYxRFJDMl9TSUdfREVUX1BLIC0gWzEwOjldICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9TSUdfREVUX1BLX1dJRFRIICAgICAgICAgICAgIDIgIC8qIEFJRjFEUkMyX1NJR19ERVRfUEsgLSBbMTA6OV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX05HX0VOQSAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMURSQzJfTkdfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9OR19FTkFfTUFTSyAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjFEUkMyX05HX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfTkdfRU5BX1NISUZUICAgICAgICAgICAgICAgICA4ICAvKiBBSUYxRFJDMl9OR19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX05HX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogQUlGMURSQzJfTkdfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9TSUdfREVUX01PREUgICAgICAgICAgICAweDAwODAgIC8qIEFJRjFEUkMyX1NJR19ERVRfTU9ERSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfU0lHX0RFVF9NT0RFX01BU0sgICAgICAgMHgwMDgwICAvKiBBSUYxRFJDMl9TSUdfREVUX01PREUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX1NJR19ERVRfTU9ERV9TSElGVCAgICAgICAgICAgNyAgLyogQUlGMURSQzJfU0lHX0RFVF9NT0RFICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9TSUdfREVUX01PREVfV0lEVEggICAgICAgICAgIDEgIC8qIEFJRjFEUkMyX1NJR19ERVRfTU9ERSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfU0lHX0RFVCAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBBSUYxRFJDMl9TSUdfREVUICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9TSUdfREVUX01BU0sgICAgICAgICAgICAweDAwNDAgIC8qIEFJRjFEUkMyX1NJR19ERVQgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX1NJR19ERVRfU0hJRlQgICAgICAgICAgICAgICAgNiAgLyogQUlGMURSQzJfU0lHX0RFVCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfU0lHX0RFVF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYxRFJDMl9TSUdfREVUICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9LTkVFMl9PUF9FTkEgICAgICAgICAgICAweDAwMjAgIC8qIEFJRjFEUkMyX0tORUUyX09QX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfS05FRTJfT1BfRU5BX01BU0sgICAgICAgMHgwMDIwICAvKiBBSUYxRFJDMl9LTkVFMl9PUF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX0tORUUyX09QX0VOQV9TSElGVCAgICAgICAgICAgNSAgLyogQUlGMURSQzJfS05FRTJfT1BfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9LTkVFMl9PUF9FTkFfV0lEVEggICAgICAgICAgIDEgIC8qIEFJRjFEUkMyX0tORUUyX09QX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfUVIgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBSUYxRFJDMl9RUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfUVJfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBSUYxRFJDMl9RUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfUVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICA0ICAvKiBBSUYxRFJDMl9RUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfUVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxRFJDMl9RUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfQU5USUNMSVAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBBSUYxRFJDMl9BTlRJQ0xJUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfQU5USUNMSVBfTUFTSyAgICAgICAgICAgMHgwMDA4ICAvKiBBSUYxRFJDMl9BTlRJQ0xJUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfQU5USUNMSVBfU0hJRlQgICAgICAgICAgICAgICAzICAvKiBBSUYxRFJDMl9BTlRJQ0xJUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfQU5USUNMSVBfV0lEVEggICAgICAgICAgICAgICAxICAvKiBBSUYxRFJDMl9BTlRJQ0xJUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRFJDX0VOQSAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYxREFDMl9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9EUkNfRU5BX01BU0sgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjFEQUMyX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0RSQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAgMiAgLyogQUlGMURBQzJfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRFJDX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYxREFDMl9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMkxfRFJDX0VOQSAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjFBREMyTF9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMkxfRFJDX0VOQV9NQVNLICAgICAgICAgICAweDAwMDIgIC8qIEFJRjFBREMyTF9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMkxfRFJDX0VOQV9TSElGVCAgICAgICAgICAgICAgIDEgIC8qIEFJRjFBREMyTF9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMkxfRFJDX0VOQV9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEFJRjFBREMyTF9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMlJfRFJDX0VOQSAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFBREMyUl9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMlJfRFJDX0VOQV9NQVNLICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFBREMyUl9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMlJfRFJDX0VOQV9TSElGVCAgICAgICAgICAgICAgIDAgIC8qIEFJRjFBREMyUl9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMlJfRFJDX0VOQV9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEFJRjFBREMyUl9EUkNfRU5BICovCisKKy8qCisgKiBSMTEwNSAoMHg0NTEpIC0gQUlGMSBEUkMyICgyKQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9BVEtfTUFTSyAgICAgICAgICAgICAgICAweDFFMDAgIC8qIEFJRjFEUkMyX0FUSyAtIFsxMjo5XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfQVRLX1NISUZUICAgICAgICAgICAgICAgICAgICA5ICAvKiBBSUYxRFJDMl9BVEsgLSBbMTI6OV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX0FUS19XSURUSCAgICAgICAgICAgICAgICAgICAgNCAgLyogQUlGMURSQzJfQVRLIC0gWzEyOjldICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9EQ1lfTUFTSyAgICAgICAgICAgICAgICAweDAxRTAgIC8qIEFJRjFEUkMyX0RDWSAtIFs4OjVdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9EQ1lfU0hJRlQgICAgICAgICAgICAgICAgICAgIDUgIC8qIEFJRjFEUkMyX0RDWSAtIFs4OjVdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9EQ1lfV0lEVEggICAgICAgICAgICAgICAgICAgIDQgIC8qIEFJRjFEUkMyX0RDWSAtIFs4OjVdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9NSU5HQUlOX01BU0sgICAgICAgICAgICAweDAwMUMgIC8qIEFJRjFEUkMyX01JTkdBSU4gLSBbNDoyXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfTUlOR0FJTl9TSElGVCAgICAgICAgICAgICAgICAyICAvKiBBSUYxRFJDMl9NSU5HQUlOIC0gWzQ6Ml0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX01JTkdBSU5fV0lEVEggICAgICAgICAgICAgICAgMyAgLyogQUlGMURSQzJfTUlOR0FJTiAtIFs0OjJdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9NQVhHQUlOX01BU0sgICAgICAgICAgICAweDAwMDMgIC8qIEFJRjFEUkMyX01BWEdBSU4gLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfTUFYR0FJTl9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxRFJDMl9NQVhHQUlOIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX01BWEdBSU5fV0lEVEggICAgICAgICAgICAgICAgMiAgLyogQUlGMURSQzJfTUFYR0FJTiAtIFsxOjBdICovCisKKy8qCisgKiBSMTEwNiAoMHg0NTIpIC0gQUlGMSBEUkMyICgzKQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9OR19NSU5HQUlOX01BU0sgICAgICAgICAweEYwMDAgIC8qIEFJRjFEUkMyX05HX01JTkdBSU4gLSBbMTU6MTJdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9OR19NSU5HQUlOX1NISUZUICAgICAgICAgICAgMTIgIC8qIEFJRjFEUkMyX05HX01JTkdBSU4gLSBbMTU6MTJdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9OR19NSU5HQUlOX1dJRFRIICAgICAgICAgICAgIDQgIC8qIEFJRjFEUkMyX05HX01JTkdBSU4gLSBbMTU6MTJdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9OR19FWFBfTUFTSyAgICAgICAgICAgICAweDBDMDAgIC8qIEFJRjFEUkMyX05HX0VYUCAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX05HX0VYUF9TSElGVCAgICAgICAgICAgICAgICAxMCAgLyogQUlGMURSQzJfTkdfRVhQIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfTkdfRVhQX1dJRFRIICAgICAgICAgICAgICAgICAyICAvKiBBSUYxRFJDMl9OR19FWFAgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9RUl9USFJfTUFTSyAgICAgICAgICAgICAweDAzMDAgIC8qIEFJRjFEUkMyX1FSX1RIUiAtIFs5OjhdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9RUl9USFJfU0hJRlQgICAgICAgICAgICAgICAgIDggIC8qIEFJRjFEUkMyX1FSX1RIUiAtIFs5OjhdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9RUl9USFJfV0lEVEggICAgICAgICAgICAgICAgIDIgIC8qIEFJRjFEUkMyX1FSX1RIUiAtIFs5OjhdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9RUl9EQ1lfTUFTSyAgICAgICAgICAgICAweDAwQzAgIC8qIEFJRjFEUkMyX1FSX0RDWSAtIFs3OjZdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9RUl9EQ1lfU0hJRlQgICAgICAgICAgICAgICAgIDYgIC8qIEFJRjFEUkMyX1FSX0RDWSAtIFs3OjZdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9RUl9EQ1lfV0lEVEggICAgICAgICAgICAgICAgIDIgIC8qIEFJRjFEUkMyX1FSX0RDWSAtIFs3OjZdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9ISV9DT01QX01BU0sgICAgICAgICAgICAweDAwMzggIC8qIEFJRjFEUkMyX0hJX0NPTVAgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfSElfQ09NUF9TSElGVCAgICAgICAgICAgICAgICAzICAvKiBBSUYxRFJDMl9ISV9DT01QIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX0hJX0NPTVBfV0lEVEggICAgICAgICAgICAgICAgMyAgLyogQUlGMURSQzJfSElfQ09NUCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9MT19DT01QX01BU0sgICAgICAgICAgICAweDAwMDcgIC8qIEFJRjFEUkMyX0xPX0NPTVAgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfTE9fQ09NUF9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxRFJDMl9MT19DT01QIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX0xPX0NPTVBfV0lEVEggICAgICAgICAgICAgICAgMyAgLyogQUlGMURSQzJfTE9fQ09NUCAtIFsyOjBdICovCisKKy8qCisgKiBSMTEwNyAoMHg0NTMpIC0gQUlGMSBEUkMyICg0KQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9LTkVFX0lQX01BU0sgICAgICAgICAgICAweDA3RTAgIC8qIEFJRjFEUkMyX0tORUVfSVAgLSBbMTA6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX0tORUVfSVBfU0hJRlQgICAgICAgICAgICAgICAgNSAgLyogQUlGMURSQzJfS05FRV9JUCAtIFsxMDo1XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfS05FRV9JUF9XSURUSCAgICAgICAgICAgICAgICA2ICAvKiBBSUYxRFJDMl9LTkVFX0lQIC0gWzEwOjVdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9LTkVFX09QX01BU0sgICAgICAgICAgICAweDAwMUYgIC8qIEFJRjFEUkMyX0tORUVfT1AgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfS05FRV9PUF9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxRFJDMl9LTkVFX09QIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX0tORUVfT1BfV0lEVEggICAgICAgICAgICAgICAgNSAgLyogQUlGMURSQzJfS05FRV9PUCAtIFs0OjBdICovCisKKy8qCisgKiBSMTEwOCAoMHg0NTQpIC0gQUlGMSBEUkMyICg1KQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9LTkVFMl9JUF9NQVNLICAgICAgICAgICAweDAzRTAgIC8qIEFJRjFEUkMyX0tORUUyX0lQIC0gWzk6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX0tORUUyX0lQX1NISUZUICAgICAgICAgICAgICAgNSAgLyogQUlGMURSQzJfS05FRTJfSVAgLSBbOTo1XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfS05FRTJfSVBfV0lEVEggICAgICAgICAgICAgICA1ICAvKiBBSUYxRFJDMl9LTkVFMl9JUCAtIFs5OjVdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9LTkVFMl9PUF9NQVNLICAgICAgICAgICAweDAwMUYgIC8qIEFJRjFEUkMyX0tORUUyX09QIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX0tORUUyX09QX1NISUZUICAgICAgICAgICAgICAgMCAgLyogQUlGMURSQzJfS05FRTJfT1AgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfS05FRTJfT1BfV0lEVEggICAgICAgICAgICAgICA1ICAvKiBBSUYxRFJDMl9LTkVFMl9PUCAtIFs0OjBdICovCisKKy8qCisgKiBSMTE1MiAoMHg0ODApIC0gQUlGMSBEQUMxIEVRIEdhaW5zICgxKQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CMV9HQUlOX01BU0sgICAgICAgICAweEY4MDAgIC8qIEFJRjFEQUMxX0VRX0IxX0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CMV9HQUlOX1NISUZUICAgICAgICAgICAgMTEgIC8qIEFJRjFEQUMxX0VRX0IxX0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CMV9HQUlOX1dJRFRIICAgICAgICAgICAgIDUgIC8qIEFJRjFEQUMxX0VRX0IxX0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CMl9HQUlOX01BU0sgICAgICAgICAweDA3QzAgIC8qIEFJRjFEQUMxX0VRX0IyX0dBSU4gLSBbMTA6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IyX0dBSU5fU0hJRlQgICAgICAgICAgICAgNiAgLyogQUlGMURBQzFfRVFfQjJfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjJfR0FJTl9XSURUSCAgICAgICAgICAgICA1ICAvKiBBSUYxREFDMV9FUV9CMl9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CM19HQUlOX01BU0sgICAgICAgICAweDAwM0UgIC8qIEFJRjFEQUMxX0VRX0IzX0dBSU4gLSBbNToxXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjNfR0FJTl9TSElGVCAgICAgICAgICAgICAxICAvKiBBSUYxREFDMV9FUV9CM19HQUlOIC0gWzU6MV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IzX0dBSU5fV0lEVEggICAgICAgICAgICAgNSAgLyogQUlGMURBQzFfRVFfQjNfR0FJTiAtIFs1OjFdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9FTkEgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFEQUMxX0VRX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfRU5BX01BU0sgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxREFDMV9FUV9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzFfRVFfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9FTkFfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMxX0VRX0VOQSAqLworCisvKgorICogUjExNTMgKDB4NDgxKSAtIEFJRjEgREFDMSBFUSBHYWlucyAoMikKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjRfR0FJTl9NQVNLICAgICAgICAgMHhGODAwICAvKiBBSUYxREFDMV9FUV9CNF9HQUlOIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjRfR0FJTl9TSElGVCAgICAgICAgICAgIDExICAvKiBBSUYxREFDMV9FUV9CNF9HQUlOIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjRfR0FJTl9XSURUSCAgICAgICAgICAgICA1ICAvKiBBSUYxREFDMV9FUV9CNF9HQUlOIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjVfR0FJTl9NQVNLICAgICAgICAgMHgwN0MwICAvKiBBSUYxREFDMV9FUV9CNV9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CNV9HQUlOX1NISUZUICAgICAgICAgICAgIDYgIC8qIEFJRjFEQUMxX0VRX0I1X0dBSU4gLSBbMTA6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0I1X0dBSU5fV0lEVEggICAgICAgICAgICAgNSAgLyogQUlGMURBQzFfRVFfQjVfR0FJTiAtIFsxMDo2XSAqLworCisvKgorICogUjExNTQgKDB4NDgyKSAtIEFJRjEgREFDMSBFUSBCYW5kIDEgQQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CMV9BX01BU0sgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjFEQUMxX0VRX0IxX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IxX0FfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzFfRVFfQjFfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjFfQV9XSURUSCAgICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMV9FUV9CMV9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE1NSAoMHg0ODMpIC0gQUlGMSBEQUMxIEVRIEJhbmQgMSBCCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IxX0JfTUFTSyAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzFfRVFfQjFfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjFfQl9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMV9FUV9CMV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CMV9CX1dJRFRIICAgICAgICAgICAgICAgMTYgIC8qIEFJRjFEQUMxX0VRX0IxX0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTU2ICgweDQ4NCkgLSBBSUYxIERBQzEgRVEgQmFuZCAxIFBHCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IxX1BHX01BU0sgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzFfRVFfQjFfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IxX1BHX1NISUZUICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzFfRVFfQjFfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IxX1BHX1dJRFRIICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzFfRVFfQjFfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTU3ICgweDQ4NSkgLSBBSUYxIERBQzEgRVEgQmFuZCAyIEEKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjJfQV9NQVNLICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYxREFDMV9FUV9CMl9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CMl9BX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMxX0VRX0IyX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IyX0FfV0lEVEggICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzFfRVFfQjJfQSAtIFsxNTowXSAqLworCisvKgorICogUjExNTggKDB4NDg2KSAtIEFJRjEgREFDMSBFUSBCYW5kIDIgQgorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CMl9CX01BU0sgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjFEQUMxX0VRX0IyX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IyX0JfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzFfRVFfQjJfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjJfQl9XSURUSCAgICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMV9FUV9CMl9CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE1OSAoMHg0ODcpIC0gQUlGMSBEQUMxIEVRIEJhbmQgMiBDCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IyX0NfTUFTSyAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzFfRVFfQjJfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjJfQ19TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMV9FUV9CMl9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CMl9DX1dJRFRIICAgICAgICAgICAgICAgMTYgIC8qIEFJRjFEQUMxX0VRX0IyX0MgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTYwICgweDQ4OCkgLSBBSUYxIERBQzEgRVEgQmFuZCAyIFBHCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IyX1BHX01BU0sgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzFfRVFfQjJfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IyX1BHX1NISUZUICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzFfRVFfQjJfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IyX1BHX1dJRFRIICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzFfRVFfQjJfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTYxICgweDQ4OSkgLSBBSUYxIERBQzEgRVEgQmFuZCAzIEEKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjNfQV9NQVNLICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYxREFDMV9FUV9CM19BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CM19BX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMxX0VRX0IzX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IzX0FfV0lEVEggICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzFfRVFfQjNfQSAtIFsxNTowXSAqLworCisvKgorICogUjExNjIgKDB4NDhBKSAtIEFJRjEgREFDMSBFUSBCYW5kIDMgQgorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CM19CX01BU0sgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjFEQUMxX0VRX0IzX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IzX0JfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzFfRVFfQjNfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjNfQl9XSURUSCAgICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMV9FUV9CM19CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE2MyAoMHg0OEIpIC0gQUlGMSBEQUMxIEVRIEJhbmQgMyBDCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IzX0NfTUFTSyAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzFfRVFfQjNfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjNfQ19TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMV9FUV9CM19DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CM19DX1dJRFRIICAgICAgICAgICAgICAgMTYgIC8qIEFJRjFEQUMxX0VRX0IzX0MgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTY0ICgweDQ4QykgLSBBSUYxIERBQzEgRVEgQmFuZCAzIFBHCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IzX1BHX01BU0sgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzFfRVFfQjNfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IzX1BHX1NISUZUICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzFfRVFfQjNfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IzX1BHX1dJRFRIICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzFfRVFfQjNfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTY1ICgweDQ4RCkgLSBBSUYxIERBQzEgRVEgQmFuZCA0IEEKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjRfQV9NQVNLICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYxREFDMV9FUV9CNF9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CNF9BX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMxX0VRX0I0X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0I0X0FfV0lEVEggICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzFfRVFfQjRfQSAtIFsxNTowXSAqLworCisvKgorICogUjExNjYgKDB4NDhFKSAtIEFJRjEgREFDMSBFUSBCYW5kIDQgQgorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CNF9CX01BU0sgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjFEQUMxX0VRX0I0X0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0I0X0JfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzFfRVFfQjRfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjRfQl9XSURUSCAgICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMV9FUV9CNF9CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE2NyAoMHg0OEYpIC0gQUlGMSBEQUMxIEVRIEJhbmQgNCBDCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0I0X0NfTUFTSyAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzFfRVFfQjRfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjRfQ19TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMV9FUV9CNF9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CNF9DX1dJRFRIICAgICAgICAgICAgICAgMTYgIC8qIEFJRjFEQUMxX0VRX0I0X0MgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTY4ICgweDQ5MCkgLSBBSUYxIERBQzEgRVEgQmFuZCA0IFBHCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0I0X1BHX01BU0sgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzFfRVFfQjRfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0I0X1BHX1NISUZUICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzFfRVFfQjRfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0I0X1BHX1dJRFRIICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzFfRVFfQjRfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTY5ICgweDQ5MSkgLSBBSUYxIERBQzEgRVEgQmFuZCA1IEEKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjVfQV9NQVNLICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYxREFDMV9FUV9CNV9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CNV9BX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMxX0VRX0I1X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0I1X0FfV0lEVEggICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzFfRVFfQjVfQSAtIFsxNTowXSAqLworCisvKgorICogUjExNzAgKDB4NDkyKSAtIEFJRjEgREFDMSBFUSBCYW5kIDUgQgorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CNV9CX01BU0sgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjFEQUMxX0VRX0I1X0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0I1X0JfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzFfRVFfQjVfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjVfQl9XSURUSCAgICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMV9FUV9CNV9CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE3MSAoMHg0OTMpIC0gQUlGMSBEQUMxIEVRIEJhbmQgNSBQRworICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CNV9QR19NQVNLICAgICAgICAgICAweEZGRkYgIC8qIEFJRjFEQUMxX0VRX0I1X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CNV9QR19TSElGVCAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMxX0VRX0I1X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CNV9QR19XSURUSCAgICAgICAgICAgICAgMTYgIC8qIEFJRjFEQUMxX0VRX0I1X1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE4NCAoMHg0QTApIC0gQUlGMSBEQUMyIEVRIEdhaW5zICgxKQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CMV9HQUlOX01BU0sgICAgICAgICAweEY4MDAgIC8qIEFJRjFEQUMyX0VRX0IxX0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CMV9HQUlOX1NISUZUICAgICAgICAgICAgMTEgIC8qIEFJRjFEQUMyX0VRX0IxX0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CMV9HQUlOX1dJRFRIICAgICAgICAgICAgIDUgIC8qIEFJRjFEQUMyX0VRX0IxX0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CMl9HQUlOX01BU0sgICAgICAgICAweDA3QzAgIC8qIEFJRjFEQUMyX0VRX0IyX0dBSU4gLSBbMTA6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IyX0dBSU5fU0hJRlQgICAgICAgICAgICAgNiAgLyogQUlGMURBQzJfRVFfQjJfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjJfR0FJTl9XSURUSCAgICAgICAgICAgICA1ICAvKiBBSUYxREFDMl9FUV9CMl9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CM19HQUlOX01BU0sgICAgICAgICAweDAwM0UgIC8qIEFJRjFEQUMyX0VRX0IzX0dBSU4gLSBbNToxXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjNfR0FJTl9TSElGVCAgICAgICAgICAgICAxICAvKiBBSUYxREFDMl9FUV9CM19HQUlOIC0gWzU6MV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IzX0dBSU5fV0lEVEggICAgICAgICAgICAgNSAgLyogQUlGMURBQzJfRVFfQjNfR0FJTiAtIFs1OjFdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9FTkEgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFEQUMyX0VRX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfRU5BX01BU0sgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxREFDMl9FUV9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzJfRVFfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9FTkFfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMyX0VRX0VOQSAqLworCisvKgorICogUjExODUgKDB4NEExKSAtIEFJRjEgREFDMiBFUSBHYWlucyAoMikKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjRfR0FJTl9NQVNLICAgICAgICAgMHhGODAwICAvKiBBSUYxREFDMl9FUV9CNF9HQUlOIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjRfR0FJTl9TSElGVCAgICAgICAgICAgIDExICAvKiBBSUYxREFDMl9FUV9CNF9HQUlOIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjRfR0FJTl9XSURUSCAgICAgICAgICAgICA1ICAvKiBBSUYxREFDMl9FUV9CNF9HQUlOIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjVfR0FJTl9NQVNLICAgICAgICAgMHgwN0MwICAvKiBBSUYxREFDMl9FUV9CNV9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CNV9HQUlOX1NISUZUICAgICAgICAgICAgIDYgIC8qIEFJRjFEQUMyX0VRX0I1X0dBSU4gLSBbMTA6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0I1X0dBSU5fV0lEVEggICAgICAgICAgICAgNSAgLyogQUlGMURBQzJfRVFfQjVfR0FJTiAtIFsxMDo2XSAqLworCisvKgorICogUjExODYgKDB4NEEyKSAtIEFJRjEgREFDMiBFUSBCYW5kIDEgQQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CMV9BX01BU0sgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjFEQUMyX0VRX0IxX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IxX0FfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzJfRVFfQjFfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjFfQV9XSURUSCAgICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMl9FUV9CMV9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE4NyAoMHg0QTMpIC0gQUlGMSBEQUMyIEVRIEJhbmQgMSBCCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IxX0JfTUFTSyAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzJfRVFfQjFfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjFfQl9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMl9FUV9CMV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CMV9CX1dJRFRIICAgICAgICAgICAgICAgMTYgIC8qIEFJRjFEQUMyX0VRX0IxX0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTg4ICgweDRBNCkgLSBBSUYxIERBQzIgRVEgQmFuZCAxIFBHCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IxX1BHX01BU0sgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzJfRVFfQjFfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IxX1BHX1NISUZUICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzJfRVFfQjFfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IxX1BHX1dJRFRIICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzJfRVFfQjFfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTg5ICgweDRBNSkgLSBBSUYxIERBQzIgRVEgQmFuZCAyIEEKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjJfQV9NQVNLICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYxREFDMl9FUV9CMl9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CMl9BX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMyX0VRX0IyX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IyX0FfV0lEVEggICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzJfRVFfQjJfQSAtIFsxNTowXSAqLworCisvKgorICogUjExOTAgKDB4NEE2KSAtIEFJRjEgREFDMiBFUSBCYW5kIDIgQgorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CMl9CX01BU0sgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjFEQUMyX0VRX0IyX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IyX0JfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzJfRVFfQjJfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjJfQl9XSURUSCAgICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMl9FUV9CMl9CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE5MSAoMHg0QTcpIC0gQUlGMSBEQUMyIEVRIEJhbmQgMiBDCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IyX0NfTUFTSyAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzJfRVFfQjJfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjJfQ19TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMl9FUV9CMl9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CMl9DX1dJRFRIICAgICAgICAgICAgICAgMTYgIC8qIEFJRjFEQUMyX0VRX0IyX0MgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTkyICgweDRBOCkgLSBBSUYxIERBQzIgRVEgQmFuZCAyIFBHCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IyX1BHX01BU0sgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzJfRVFfQjJfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IyX1BHX1NISUZUICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzJfRVFfQjJfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IyX1BHX1dJRFRIICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzJfRVFfQjJfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTkzICgweDRBOSkgLSBBSUYxIERBQzIgRVEgQmFuZCAzIEEKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjNfQV9NQVNLICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYxREFDMl9FUV9CM19BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CM19BX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMyX0VRX0IzX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IzX0FfV0lEVEggICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzJfRVFfQjNfQSAtIFsxNTowXSAqLworCisvKgorICogUjExOTQgKDB4NEFBKSAtIEFJRjEgREFDMiBFUSBCYW5kIDMgQgorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CM19CX01BU0sgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjFEQUMyX0VRX0IzX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IzX0JfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzJfRVFfQjNfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjNfQl9XSURUSCAgICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMl9FUV9CM19CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE5NSAoMHg0QUIpIC0gQUlGMSBEQUMyIEVRIEJhbmQgMyBDCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IzX0NfTUFTSyAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzJfRVFfQjNfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjNfQ19TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMl9FUV9CM19DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CM19DX1dJRFRIICAgICAgICAgICAgICAgMTYgIC8qIEFJRjFEQUMyX0VRX0IzX0MgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTk2ICgweDRBQykgLSBBSUYxIERBQzIgRVEgQmFuZCAzIFBHCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IzX1BHX01BU0sgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzJfRVFfQjNfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IzX1BHX1NISUZUICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzJfRVFfQjNfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IzX1BHX1dJRFRIICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzJfRVFfQjNfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTk3ICgweDRBRCkgLSBBSUYxIERBQzIgRVEgQmFuZCA0IEEKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjRfQV9NQVNLICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYxREFDMl9FUV9CNF9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CNF9BX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMyX0VRX0I0X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0I0X0FfV0lEVEggICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzJfRVFfQjRfQSAtIFsxNTowXSAqLworCisvKgorICogUjExOTggKDB4NEFFKSAtIEFJRjEgREFDMiBFUSBCYW5kIDQgQgorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CNF9CX01BU0sgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjFEQUMyX0VRX0I0X0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0I0X0JfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzJfRVFfQjRfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjRfQl9XSURUSCAgICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMl9FUV9CNF9CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE5OSAoMHg0QUYpIC0gQUlGMSBEQUMyIEVRIEJhbmQgNCBDCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0I0X0NfTUFTSyAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzJfRVFfQjRfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjRfQ19TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMl9FUV9CNF9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CNF9DX1dJRFRIICAgICAgICAgICAgICAgMTYgIC8qIEFJRjFEQUMyX0VRX0I0X0MgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMjAwICgweDRCMCkgLSBBSUYxIERBQzIgRVEgQmFuZCA0IFBHCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0I0X1BHX01BU0sgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzJfRVFfQjRfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0I0X1BHX1NISUZUICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzJfRVFfQjRfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0I0X1BHX1dJRFRIICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzJfRVFfQjRfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMjAxICgweDRCMSkgLSBBSUYxIERBQzIgRVEgQmFuZCA1IEEKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjVfQV9NQVNLICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYxREFDMl9FUV9CNV9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CNV9BX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMyX0VRX0I1X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0I1X0FfV0lEVEggICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzJfRVFfQjVfQSAtIFsxNTowXSAqLworCisvKgorICogUjEyMDIgKDB4NEIyKSAtIEFJRjEgREFDMiBFUSBCYW5kIDUgQgorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CNV9CX01BU0sgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjFEQUMyX0VRX0I1X0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0I1X0JfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzJfRVFfQjVfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjVfQl9XSURUSCAgICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMl9FUV9CNV9CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTIwMyAoMHg0QjMpIC0gQUlGMSBEQUMyIEVRIEJhbmQgNSBQRworICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CNV9QR19NQVNLICAgICAgICAgICAweEZGRkYgIC8qIEFJRjFEQUMyX0VRX0I1X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CNV9QR19TSElGVCAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMyX0VRX0I1X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CNV9QR19XSURUSCAgICAgICAgICAgICAgMTYgIC8qIEFJRjFEQUMyX0VRX0I1X1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTI4MCAoMHg1MDApIC0gQUlGMiBBREMgTGVmdCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19WVSAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYyQURDX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX1ZVX01BU0sgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjJBRENfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMkFEQ19WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYyQURDX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAweDAwRkYgIC8qIEFJRjJBRENMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJBRENMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjJBRENMX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTI4MSAoMHg1MDEpIC0gQUlGMiBBREMgUmlnaHQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENfVlUgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMkFEQ19WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19WVV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYyQURDX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjJBRENfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMkFEQ19WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ1JfVk9MX01BU0sgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBBSUYyQURDUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ1JfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAwICAvKiBBSUYyQURDUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ1JfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYyQURDUl9WT0wgLSBbNzowXSAqLworCisvKgorICogUjEyODIgKDB4NTAyKSAtIEFJRjIgREFDIExlZnQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfVlUgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMkRBQ19WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19WVV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYyREFDX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjJEQUNfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMkRBQ19WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ0xfVk9MX01BU0sgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBBSUYyREFDTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ0xfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAwICAvKiBBSUYyREFDTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ0xfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYyREFDTF9WT0wgLSBbNzowXSAqLworCisvKgorICogUjEyODMgKDB4NTAzKSAtIEFJRjIgREFDIFJpZ2h0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX1ZVICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjJEQUNfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfVlVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMkRBQ19WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYyREFDX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJEQUNfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNSX1ZPTF9NQVNLICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogQUlGMkRBQ1JfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMkRBQ1JfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMkRBQ1JfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMjk2ICgweDUxMCkgLSBBSUYyIEFEQyBGaWx0ZXJzCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENfNEZTICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMkFEQ180RlMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENfNEZTX01BU0sgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMkFEQ180RlMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENfNEZTX1NISUZUICAgICAgICAgICAgICAgICAgICAxNSAgLyogQUlGMkFEQ180RlMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENfNEZTX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMkFEQ180RlMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENfSFBGX0NVVF9NQVNLICAgICAgICAgICAgIDB4NjAwMCAgLyogQUlGMkFEQ19IUEZfQ1VUIC0gWzE0OjEzXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19IUEZfQ1VUX1NISUZUICAgICAgICAgICAgICAgIDEzICAvKiBBSUYyQURDX0hQRl9DVVQgLSBbMTQ6MTNdICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX0hQRl9DVVRfV0lEVEggICAgICAgICAgICAgICAgIDIgIC8qIEFJRjJBRENfSFBGX0NVVCAtIFsxNDoxM10gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENMX0hQRiAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogQUlGMkFEQ0xfSFBGICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDTF9IUEZfTUFTSyAgICAgICAgICAgICAgICAweDEwMDAgIC8qIEFJRjJBRENMX0hQRiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ0xfSFBGX1NISUZUICAgICAgICAgICAgICAgICAgIDEyICAvKiBBSUYyQURDTF9IUEYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENMX0hQRl9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMkFEQ0xfSFBGICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDUl9IUEYgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIEFJRjJBRENSX0hQRiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ1JfSFBGX01BU0sgICAgICAgICAgICAgICAgMHgwODAwICAvKiBBSUYyQURDUl9IUEYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENSX0hQRl9TSElGVCAgICAgICAgICAgICAgICAgICAxMSAgLyogQUlGMkFEQ1JfSFBGICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDUl9IUEZfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJBRENSX0hQRiAqLworCisvKgorICogUjEzMTIgKDB4NTIwKSAtIEFJRjIgREFDIEZpbHRlcnMgKDEpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfTVVURSAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQUlGMkRBQ19NVVRFICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX01VVEVfTUFTSyAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEFJRjJEQUNfTVVURSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICA5ICAvKiBBSUYyREFDX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMkRBQ19NVVRFICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX01PTk8gICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEFJRjJEQUNfTU9OTyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19NT05PX01BU0sgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBBSUYyREFDX01PTk8gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfTU9OT19TSElGVCAgICAgICAgICAgICAgICAgICAgNyAgLyogQUlGMkRBQ19NT05PICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX01PTk9fV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJEQUNfTU9OTyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19NVVRFUkFURSAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBBSUYyREFDX01VVEVSQVRFICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX01VVEVSQVRFX01BU0sgICAgICAgICAgICAweDAwMjAgIC8qIEFJRjJEQUNfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfTVVURVJBVEVfU0hJRlQgICAgICAgICAgICAgICAgNSAgLyogQUlGMkRBQ19NVVRFUkFURSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19NVVRFUkFURV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYyREFDX01VVEVSQVRFICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX1VOTVVURV9SQU1QICAgICAgICAgICAgICAweDAwMTAgIC8qIEFJRjJEQUNfVU5NVVRFX1JBTVAgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfVU5NVVRFX1JBTVBfTUFTSyAgICAgICAgIDB4MDAxMCAgLyogQUlGMkRBQ19VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19VTk1VVEVfUkFNUF9TSElGVCAgICAgICAgICAgICA0ICAvKiBBSUYyREFDX1VOTVVURV9SQU1QICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX1VOTVVURV9SQU1QX1dJRFRIICAgICAgICAgICAgIDEgIC8qIEFJRjJEQUNfVU5NVVRFX1JBTVAgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfREVFTVBfTUFTSyAgICAgICAgICAgICAgIDB4MDAwNiAgLyogQUlGMkRBQ19ERUVNUCAtIFsyOjFdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0RFRU1QX1NISUZUICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJEQUNfREVFTVAgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19ERUVNUF9XSURUSCAgICAgICAgICAgICAgICAgICAyICAvKiBBSUYyREFDX0RFRU1QIC0gWzI6MV0gKi8KKworLyoKKyAqIFIxMzEzICgweDUyMSkgLSBBSUYyIERBQyBGaWx0ZXJzICgyKQorICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDXzNEX0dBSU5fTUFTSyAgICAgICAgICAgICAweDNFMDAgIC8qIEFJRjJEQUNfM0RfR0FJTiAtIFsxMzo5XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ18zRF9HQUlOX1NISUZUICAgICAgICAgICAgICAgICA5ICAvKiBBSUYyREFDXzNEX0dBSU4gLSBbMTM6OV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfM0RfR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgNSAgLyogQUlGMkRBQ18zRF9HQUlOIC0gWzEzOjldICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDXzNEX0VOQSAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjJEQUNfM0RfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDXzNEX0VOQV9NQVNLICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjJEQUNfM0RfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDXzNEX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjJEQUNfM0RfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDXzNEX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJEQUNfM0RfRU5BICovCisKKy8qCisgKiBSMTM0NCAoMHg1NDApIC0gQUlGMiBEUkMgKDEpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfU0lHX0RFVF9STVNfTUFTSyAgICAgICAgIDB4RjgwMCAgLyogQUlGMkRSQ19TSUdfREVUX1JNUyAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfU0lHX0RFVF9STVNfU0hJRlQgICAgICAgICAgICAxMSAgLyogQUlGMkRSQ19TSUdfREVUX1JNUyAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfU0lHX0RFVF9STVNfV0lEVEggICAgICAgICAgICAgNSAgLyogQUlGMkRSQ19TSUdfREVUX1JNUyAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfU0lHX0RFVF9QS19NQVNLICAgICAgICAgIDB4MDYwMCAgLyogQUlGMkRSQ19TSUdfREVUX1BLIC0gWzEwOjldICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX1NJR19ERVRfUEtfU0hJRlQgICAgICAgICAgICAgIDkgIC8qIEFJRjJEUkNfU0lHX0RFVF9QSyAtIFsxMDo5XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19TSUdfREVUX1BLX1dJRFRIICAgICAgICAgICAgICAyICAvKiBBSUYyRFJDX1NJR19ERVRfUEsgLSBbMTA6OV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfTkdfRU5BICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMkRSQ19OR19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfTkdfRU5BX01BU0sgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMkRSQ19OR19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfTkdfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMkRSQ19OR19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfTkdfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMkRSQ19OR19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfU0lHX0RFVF9NT0RFICAgICAgICAgICAgIDB4MDA4MCAgLyogQUlGMkRSQ19TSUdfREVUX01PREUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfU0lHX0RFVF9NT0RFX01BU0sgICAgICAgIDB4MDA4MCAgLyogQUlGMkRSQ19TSUdfREVUX01PREUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfU0lHX0RFVF9NT0RFX1NISUZUICAgICAgICAgICAgNyAgLyogQUlGMkRSQ19TSUdfREVUX01PREUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfU0lHX0RFVF9NT0RFX1dJRFRIICAgICAgICAgICAgMSAgLyogQUlGMkRSQ19TSUdfREVUX01PREUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfU0lHX0RFVCAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogQUlGMkRSQ19TSUdfREVUICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX1NJR19ERVRfTUFTSyAgICAgICAgICAgICAweDAwNDAgIC8qIEFJRjJEUkNfU0lHX0RFVCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19TSUdfREVUX1NISUZUICAgICAgICAgICAgICAgICA2ICAvKiBBSUYyRFJDX1NJR19ERVQgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfU0lHX0RFVF9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogQUlGMkRSQ19TSUdfREVUICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX0tORUUyX09QX0VOQSAgICAgICAgICAgICAweDAwMjAgIC8qIEFJRjJEUkNfS05FRTJfT1BfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX0tORUUyX09QX0VOQV9NQVNLICAgICAgICAweDAwMjAgIC8qIEFJRjJEUkNfS05FRTJfT1BfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX0tORUUyX09QX0VOQV9TSElGVCAgICAgICAgICAgIDUgIC8qIEFJRjJEUkNfS05FRTJfT1BfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX0tORUUyX09QX0VOQV9XSURUSCAgICAgICAgICAgIDEgIC8qIEFJRjJEUkNfS05FRTJfT1BfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX1FSICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFJRjJEUkNfUVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfUVJfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQUlGMkRSQ19RUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19RUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBBSUYyRFJDX1FSICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX1FSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJEUkNfUVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfQU5USUNMSVAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogQUlGMkRSQ19BTlRJQ0xJUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19BTlRJQ0xJUF9NQVNLICAgICAgICAgICAgMHgwMDA4ICAvKiBBSUYyRFJDX0FOVElDTElQICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX0FOVElDTElQX1NISUZUICAgICAgICAgICAgICAgIDMgIC8qIEFJRjJEUkNfQU5USUNMSVAgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfQU5USUNMSVBfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMkRSQ19BTlRJQ0xJUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19EUkNfRU5BICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYyREFDX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRFJDX0VOQV9NQVNLICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMkRBQ19EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0RSQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAgIDIgIC8qIEFJRjJEQUNfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19EUkNfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBBSUYyREFDX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENMX0RSQ19FTkEgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMkFEQ0xfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ0xfRFJDX0VOQV9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYyQURDTF9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDTF9EUkNfRU5BX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJBRENMX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENMX0RSQ19FTkFfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMkFEQ0xfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ1JfRFJDX0VOQSAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYyQURDUl9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDUl9EUkNfRU5BX01BU0sgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjJBRENSX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENSX0RSQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMkFEQ1JfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ1JfRFJDX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYyQURDUl9EUkNfRU5BICovCisKKy8qCisgKiBSMTM0NSAoMHg1NDEpIC0gQUlGMiBEUkMgKDIpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfQVRLX01BU0sgICAgICAgICAgICAgICAgIDB4MUUwMCAgLyogQUlGMkRSQ19BVEsgLSBbMTI6OV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfQVRLX1NISUZUICAgICAgICAgICAgICAgICAgICAgOSAgLyogQUlGMkRSQ19BVEsgLSBbMTI6OV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfQVRLX1dJRFRIICAgICAgICAgICAgICAgICAgICAgNCAgLyogQUlGMkRSQ19BVEsgLSBbMTI6OV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfRENZX01BU0sgICAgICAgICAgICAgICAgIDB4MDFFMCAgLyogQUlGMkRSQ19EQ1kgLSBbODo1XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19EQ1lfU0hJRlQgICAgICAgICAgICAgICAgICAgICA1ICAvKiBBSUYyRFJDX0RDWSAtIFs4OjVdICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX0RDWV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEFJRjJEUkNfRENZIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfTUlOR0FJTl9NQVNLICAgICAgICAgICAgIDB4MDAxQyAgLyogQUlGMkRSQ19NSU5HQUlOIC0gWzQ6Ml0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfTUlOR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgMiAgLyogQUlGMkRSQ19NSU5HQUlOIC0gWzQ6Ml0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfTUlOR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgMyAgLyogQUlGMkRSQ19NSU5HQUlOIC0gWzQ6Ml0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfTUFYR0FJTl9NQVNLICAgICAgICAgICAgIDB4MDAwMyAgLyogQUlGMkRSQ19NQVhHQUlOIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfTUFYR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogQUlGMkRSQ19NQVhHQUlOIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfTUFYR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgMiAgLyogQUlGMkRSQ19NQVhHQUlOIC0gWzE6MF0gKi8KKworLyoKKyAqIFIxMzQ2ICgweDU0MikgLSBBSUYyIERSQyAoMykKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19OR19NSU5HQUlOX01BU0sgICAgICAgICAgMHhGMDAwICAvKiBBSUYyRFJDX05HX01JTkdBSU4gLSBbMTU6MTJdICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX05HX01JTkdBSU5fU0hJRlQgICAgICAgICAgICAgMTIgIC8qIEFJRjJEUkNfTkdfTUlOR0FJTiAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfTkdfTUlOR0FJTl9XSURUSCAgICAgICAgICAgICAgNCAgLyogQUlGMkRSQ19OR19NSU5HQUlOIC0gWzE1OjEyXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19OR19FWFBfTUFTSyAgICAgICAgICAgICAgMHgwQzAwICAvKiBBSUYyRFJDX05HX0VYUCAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfTkdfRVhQX1NISUZUICAgICAgICAgICAgICAgICAxMCAgLyogQUlGMkRSQ19OR19FWFAgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX05HX0VYUF9XSURUSCAgICAgICAgICAgICAgICAgIDIgIC8qIEFJRjJEUkNfTkdfRVhQIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19RUl9USFJfTUFTSyAgICAgICAgICAgICAgMHgwMzAwICAvKiBBSUYyRFJDX1FSX1RIUiAtIFs5OjhdICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX1FSX1RIUl9TSElGVCAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjJEUkNfUVJfVEhSIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfUVJfVEhSX1dJRFRIICAgICAgICAgICAgICAgICAgMiAgLyogQUlGMkRSQ19RUl9USFIgLSBbOTo4XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19RUl9EQ1lfTUFTSyAgICAgICAgICAgICAgMHgwMEMwICAvKiBBSUYyRFJDX1FSX0RDWSAtIFs3OjZdICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX1FSX0RDWV9TSElGVCAgICAgICAgICAgICAgICAgIDYgIC8qIEFJRjJEUkNfUVJfRENZIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfUVJfRENZX1dJRFRIICAgICAgICAgICAgICAgICAgMiAgLyogQUlGMkRSQ19RUl9EQ1kgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19ISV9DT01QX01BU0sgICAgICAgICAgICAgMHgwMDM4ICAvKiBBSUYyRFJDX0hJX0NPTVAgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19ISV9DT01QX1NISUZUICAgICAgICAgICAgICAgICAzICAvKiBBSUYyRFJDX0hJX0NPTVAgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19ISV9DT01QX1dJRFRIICAgICAgICAgICAgICAgICAzICAvKiBBSUYyRFJDX0hJX0NPTVAgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19MT19DT01QX01BU0sgICAgICAgICAgICAgMHgwMDA3ICAvKiBBSUYyRFJDX0xPX0NPTVAgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19MT19DT01QX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBBSUYyRFJDX0xPX0NPTVAgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19MT19DT01QX1dJRFRIICAgICAgICAgICAgICAgICAzICAvKiBBSUYyRFJDX0xPX0NPTVAgLSBbMjowXSAqLworCisvKgorICogUjEzNDcgKDB4NTQzKSAtIEFJRjIgRFJDICg0KQorICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX0tORUVfSVBfTUFTSyAgICAgICAgICAgICAweDA3RTAgIC8qIEFJRjJEUkNfS05FRV9JUCAtIFsxMDo1XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19LTkVFX0lQX1NISUZUICAgICAgICAgICAgICAgICA1ICAvKiBBSUYyRFJDX0tORUVfSVAgLSBbMTA6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfS05FRV9JUF9XSURUSCAgICAgICAgICAgICAgICAgNiAgLyogQUlGMkRSQ19LTkVFX0lQIC0gWzEwOjVdICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX0tORUVfT1BfTUFTSyAgICAgICAgICAgICAweDAwMUYgIC8qIEFJRjJEUkNfS05FRV9PUCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX0tORUVfT1BfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJEUkNfS05FRV9PUCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX0tORUVfT1BfV0lEVEggICAgICAgICAgICAgICAgIDUgIC8qIEFJRjJEUkNfS05FRV9PUCAtIFs0OjBdICovCisKKy8qCisgKiBSMTM0OCAoMHg1NDQpIC0gQUlGMiBEUkMgKDUpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfS05FRTJfSVBfTUFTSyAgICAgICAgICAgIDB4MDNFMCAgLyogQUlGMkRSQ19LTkVFMl9JUCAtIFs5OjVdICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX0tORUUyX0lQX1NISUZUICAgICAgICAgICAgICAgIDUgIC8qIEFJRjJEUkNfS05FRTJfSVAgLSBbOTo1XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19LTkVFMl9JUF9XSURUSCAgICAgICAgICAgICAgICA1ICAvKiBBSUYyRFJDX0tORUUyX0lQIC0gWzk6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfS05FRTJfT1BfTUFTSyAgICAgICAgICAgIDB4MDAxRiAgLyogQUlGMkRSQ19LTkVFMl9PUCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX0tORUUyX09QX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJEUkNfS05FRTJfT1AgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19LTkVFMl9PUF9XSURUSCAgICAgICAgICAgICAgICA1ICAvKiBBSUYyRFJDX0tORUUyX09QIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxNDA4ICgweDU4MCkgLSBBSUYyIEVRIEdhaW5zICgxKQorICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IxX0dBSU5fTUFTSyAgICAgICAgICAweEY4MDAgIC8qIEFJRjJEQUNfRVFfQjFfR0FJTiAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjFfR0FJTl9TSElGVCAgICAgICAgICAgICAxMSAgLyogQUlGMkRBQ19FUV9CMV9HQUlOIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CMV9HQUlOX1dJRFRIICAgICAgICAgICAgICA1ICAvKiBBSUYyREFDX0VRX0IxX0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IyX0dBSU5fTUFTSyAgICAgICAgICAweDA3QzAgIC8qIEFJRjJEQUNfRVFfQjJfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CMl9HQUlOX1NISUZUICAgICAgICAgICAgICA2ICAvKiBBSUYyREFDX0VRX0IyX0dBSU4gLSBbMTA6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjJfR0FJTl9XSURUSCAgICAgICAgICAgICAgNSAgLyogQUlGMkRBQ19FUV9CMl9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IzX0dBSU5fTUFTSyAgICAgICAgICAweDAwM0UgIC8qIEFJRjJEQUNfRVFfQjNfR0FJTiAtIFs1OjFdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IzX0dBSU5fU0hJRlQgICAgICAgICAgICAgIDEgIC8qIEFJRjJEQUNfRVFfQjNfR0FJTiAtIFs1OjFdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IzX0dBSU5fV0lEVEggICAgICAgICAgICAgIDUgIC8qIEFJRjJEQUNfRVFfQjNfR0FJTiAtIFs1OjFdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0VOQSAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjJEQUNfRVFfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0VOQV9NQVNLICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjJEQUNfRVFfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJEQUNfRVFfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJEQUNfRVFfRU5BICovCisKKy8qCisgKiBSMTQwOSAoMHg1ODEpIC0gQUlGMiBFUSBHYWlucyAoMikKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CNF9HQUlOX01BU0sgICAgICAgICAgMHhGODAwICAvKiBBSUYyREFDX0VRX0I0X0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0I0X0dBSU5fU0hJRlQgICAgICAgICAgICAgMTEgIC8qIEFJRjJEQUNfRVFfQjRfR0FJTiAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjRfR0FJTl9XSURUSCAgICAgICAgICAgICAgNSAgLyogQUlGMkRBQ19FUV9CNF9HQUlOIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CNV9HQUlOX01BU0sgICAgICAgICAgMHgwN0MwICAvKiBBSUYyREFDX0VRX0I1X0dBSU4gLSBbMTA6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjVfR0FJTl9TSElGVCAgICAgICAgICAgICAgNiAgLyogQUlGMkRBQ19FUV9CNV9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0I1X0dBSU5fV0lEVEggICAgICAgICAgICAgIDUgIC8qIEFJRjJEQUNfRVFfQjVfR0FJTiAtIFsxMDo2XSAqLworCisvKgorICogUjE0MTAgKDB4NTgyKSAtIEFJRjIgRVEgQmFuZCAxIEEKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CMV9BX01BU0sgICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYyREFDX0VRX0IxX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjFfQV9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogQUlGMkRBQ19FUV9CMV9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IxX0FfV0lEVEggICAgICAgICAgICAgICAgMTYgIC8qIEFJRjJEQUNfRVFfQjFfQSAtIFsxNTowXSAqLworCisvKgorICogUjE0MTEgKDB4NTgzKSAtIEFJRjIgRVEgQmFuZCAxIEIKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CMV9CX01BU0sgICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYyREFDX0VRX0IxX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjFfQl9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogQUlGMkRBQ19FUV9CMV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IxX0JfV0lEVEggICAgICAgICAgICAgICAgMTYgIC8qIEFJRjJEQUNfRVFfQjFfQiAtIFsxNTowXSAqLworCisvKgorICogUjE0MTIgKDB4NTg0KSAtIEFJRjIgRVEgQmFuZCAxIFBHCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjFfUEdfTUFTSyAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMkRBQ19FUV9CMV9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CMV9QR19TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYyREFDX0VRX0IxX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IxX1BHX1dJRFRIICAgICAgICAgICAgICAgMTYgIC8qIEFJRjJEQUNfRVFfQjFfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDEzICgweDU4NSkgLSBBSUYyIEVRIEJhbmQgMiBBCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjJfQV9NQVNLICAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMkRBQ19FUV9CMl9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IyX0FfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJEQUNfRVFfQjJfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CMl9BX1dJRFRIICAgICAgICAgICAgICAgIDE2ICAvKiBBSUYyREFDX0VRX0IyX0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDE0ICgweDU4NikgLSBBSUYyIEVRIEJhbmQgMiBCCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjJfQl9NQVNLICAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMkRBQ19FUV9CMl9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IyX0JfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJEQUNfRVFfQjJfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CMl9CX1dJRFRIICAgICAgICAgICAgICAgIDE2ICAvKiBBSUYyREFDX0VRX0IyX0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDE1ICgweDU4NykgLSBBSUYyIEVRIEJhbmQgMiBDCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjJfQ19NQVNLICAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMkRBQ19FUV9CMl9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IyX0NfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJEQUNfRVFfQjJfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CMl9DX1dJRFRIICAgICAgICAgICAgICAgIDE2ICAvKiBBSUYyREFDX0VRX0IyX0MgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDE2ICgweDU4OCkgLSBBSUYyIEVRIEJhbmQgMiBQRworICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IyX1BHX01BU0sgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjJEQUNfRVFfQjJfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjJfUEdfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMkRBQ19FUV9CMl9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CMl9QR19XSURUSCAgICAgICAgICAgICAgIDE2ICAvKiBBSUYyREFDX0VRX0IyX1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQxNyAoMHg1ODkpIC0gQUlGMiBFUSBCYW5kIDMgQQorICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IzX0FfTUFTSyAgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjJEQUNfRVFfQjNfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CM19BX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBBSUYyREFDX0VRX0IzX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjNfQV9XSURUSCAgICAgICAgICAgICAgICAxNiAgLyogQUlGMkRBQ19FUV9CM19BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQxOCAoMHg1OEEpIC0gQUlGMiBFUSBCYW5kIDMgQgorICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IzX0JfTUFTSyAgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjJEQUNfRVFfQjNfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CM19CX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBBSUYyREFDX0VRX0IzX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjNfQl9XSURUSCAgICAgICAgICAgICAgICAxNiAgLyogQUlGMkRBQ19FUV9CM19CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQxOSAoMHg1OEIpIC0gQUlGMiBFUSBCYW5kIDMgQworICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IzX0NfTUFTSyAgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjJEQUNfRVFfQjNfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CM19DX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBBSUYyREFDX0VRX0IzX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjNfQ19XSURUSCAgICAgICAgICAgICAgICAxNiAgLyogQUlGMkRBQ19FUV9CM19DIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQyMCAoMHg1OEMpIC0gQUlGMiBFUSBCYW5kIDMgUEcKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CM19QR19NQVNLICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYyREFDX0VRX0IzX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IzX1BHX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJEQUNfRVFfQjNfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjNfUEdfV0lEVEggICAgICAgICAgICAgICAxNiAgLyogQUlGMkRBQ19FUV9CM19QRyAtIFsxNTowXSAqLworCisvKgorICogUjE0MjEgKDB4NThEKSAtIEFJRjIgRVEgQmFuZCA0IEEKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CNF9BX01BU0sgICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYyREFDX0VRX0I0X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjRfQV9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogQUlGMkRBQ19FUV9CNF9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0I0X0FfV0lEVEggICAgICAgICAgICAgICAgMTYgIC8qIEFJRjJEQUNfRVFfQjRfQSAtIFsxNTowXSAqLworCisvKgorICogUjE0MjIgKDB4NThFKSAtIEFJRjIgRVEgQmFuZCA0IEIKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CNF9CX01BU0sgICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYyREFDX0VRX0I0X0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjRfQl9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogQUlGMkRBQ19FUV9CNF9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0I0X0JfV0lEVEggICAgICAgICAgICAgICAgMTYgIC8qIEFJRjJEQUNfRVFfQjRfQiAtIFsxNTowXSAqLworCisvKgorICogUjE0MjMgKDB4NThGKSAtIEFJRjIgRVEgQmFuZCA0IEMKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CNF9DX01BU0sgICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYyREFDX0VRX0I0X0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjRfQ19TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogQUlGMkRBQ19FUV9CNF9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0I0X0NfV0lEVEggICAgICAgICAgICAgICAgMTYgIC8qIEFJRjJEQUNfRVFfQjRfQyAtIFsxNTowXSAqLworCisvKgorICogUjE0MjQgKDB4NTkwKSAtIEFJRjIgRVEgQmFuZCA0IFBHCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjRfUEdfTUFTSyAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMkRBQ19FUV9CNF9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CNF9QR19TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYyREFDX0VRX0I0X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0I0X1BHX1dJRFRIICAgICAgICAgICAgICAgMTYgIC8qIEFJRjJEQUNfRVFfQjRfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDI1ICgweDU5MSkgLSBBSUYyIEVRIEJhbmQgNSBBCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjVfQV9NQVNLICAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMkRBQ19FUV9CNV9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0I1X0FfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJEQUNfRVFfQjVfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CNV9BX1dJRFRIICAgICAgICAgICAgICAgIDE2ICAvKiBBSUYyREFDX0VRX0I1X0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDI2ICgweDU5MikgLSBBSUYyIEVRIEJhbmQgNSBCCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjVfQl9NQVNLICAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMkRBQ19FUV9CNV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0I1X0JfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJEQUNfRVFfQjVfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CNV9CX1dJRFRIICAgICAgICAgICAgICAgIDE2ICAvKiBBSUYyREFDX0VRX0I1X0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDI3ICgweDU5MykgLSBBSUYyIEVRIEJhbmQgNSBQRworICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0I1X1BHX01BU0sgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjJEQUNfRVFfQjVfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjVfUEdfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMkRBQ19FUV9CNV9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CNV9QR19XSURUSCAgICAgICAgICAgICAgIDE2ICAvKiBBSUYyREFDX0VRX0I1X1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTUzNiAoMHg2MDApIC0gREFDMSBNaXhlciBWb2x1bWVzCisgKi8KKyNkZWZpbmUgV004OTk0X0FEQ1JfREFDMV9WT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDFFMCAgLyogQURDUl9EQUMxX1ZPTCAtIFs4OjVdICovCisjZGVmaW5lIFdNODk5NF9BRENSX0RBQzFfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDUgIC8qIEFEQ1JfREFDMV9WT0wgLSBbODo1XSAqLworI2RlZmluZSBXTTg5OTRfQURDUl9EQUMxX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICA0ICAvKiBBRENSX0RBQzFfVk9MIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FEQ0xfREFDMV9WT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDAwRiAgLyogQURDTF9EQUMxX1ZPTCAtIFszOjBdICovCisjZGVmaW5lIFdNODk5NF9BRENMX0RBQzFfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIEFEQ0xfREFDMV9WT0wgLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTRfQURDTF9EQUMxX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICA0ICAvKiBBRENMX0RBQzFfVk9MIC0gWzM6MF0gKi8KKworLyoKKyAqIFIxNTM3ICgweDYwMSkgLSBEQUMxIExlZnQgTWl4ZXIgUm91dGluZworICovCisjZGVmaW5lIFdNODk5NF9BRENSX1RPX0RBQzFMICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEFEQ1JfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk0X0FEQ1JfVE9fREFDMUxfTUFTSyAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQURDUl9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5OTRfQURDUl9UT19EQUMxTF9TSElGVCAgICAgICAgICAgICAgICAgICA1ICAvKiBBRENSX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODk5NF9BRENSX1RPX0RBQzFMX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ1JfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk0X0FEQ0xfVE9fREFDMUwgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQURDTF9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5OTRfQURDTF9UT19EQUMxTF9NQVNLICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBRENMX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODk5NF9BRENMX1RPX0RBQzFMX1NISUZUICAgICAgICAgICAgICAgICAgIDQgIC8qIEFEQ0xfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk0X0FEQ0xfVE9fREFDMUxfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQURDTF9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ0xfVE9fREFDMUwgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYyREFDTF9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ0xfVE9fREFDMUxfTUFTSyAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYyREFDTF9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ0xfVE9fREFDMUxfU0hJRlQgICAgICAgICAgICAgICAyICAvKiBBSUYyREFDTF9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ0xfVE9fREFDMUxfV0lEVEggICAgICAgICAgICAgICAxICAvKiBBSUYyREFDTF9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJMX1RPX0RBQzFMICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYxREFDMkxfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyTF9UT19EQUMxTF9NQVNLICAgICAgICAgIDB4MDAwMiAgLyogQUlGMURBQzJMX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMkxfVE9fREFDMUxfU0hJRlQgICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMyTF9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJMX1RPX0RBQzFMX1dJRFRIICAgICAgICAgICAgICAxICAvKiBBSUYxREFDMkxfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxTF9UT19EQUMxTCAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMURBQzFMX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMUxfVE9fREFDMUxfTUFTSyAgICAgICAgICAweDAwMDEgIC8qIEFJRjFEQUMxTF9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFMX1RPX0RBQzFMX1NISUZUICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMUxfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxTF9UT19EQUMxTF9XSURUSCAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzFMX1RPX0RBQzFMICovCisKKy8qCisgKiBSMTUzOCAoMHg2MDIpIC0gREFDMSBSaWdodCBNaXhlciBSb3V0aW5nCisgKi8KKyNkZWZpbmUgV004OTk0X0FEQ1JfVE9fREFDMVIgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQURDUl9UT19EQUMxUiAqLworI2RlZmluZSBXTTg5OTRfQURDUl9UT19EQUMxUl9NQVNLICAgICAgICAgICAgICAgMHgwMDIwICAvKiBBRENSX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODk5NF9BRENSX1RPX0RBQzFSX1NISUZUICAgICAgICAgICAgICAgICAgIDUgIC8qIEFEQ1JfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk0X0FEQ1JfVE9fREFDMVJfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQURDUl9UT19EQUMxUiAqLworI2RlZmluZSBXTTg5OTRfQURDTF9UT19EQUMxUiAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBRENMX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODk5NF9BRENMX1RPX0RBQzFSX01BU0sgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFEQ0xfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk0X0FEQ0xfVE9fREFDMVJfU0hJRlQgICAgICAgICAgICAgICAgICAgNCAgLyogQURDTF9UT19EQUMxUiAqLworI2RlZmluZSBXTTg5OTRfQURDTF9UT19EQUMxUl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBRENMX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDUl9UT19EQUMxUiAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjJEQUNSX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDUl9UT19EQUMxUl9NQVNLICAgICAgICAgICAweDAwMDQgIC8qIEFJRjJEQUNSX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDUl9UT19EQUMxUl9TSElGVCAgICAgICAgICAgICAgIDIgIC8qIEFJRjJEQUNSX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDUl9UT19EQUMxUl9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEFJRjJEQUNSX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMlJfVE9fREFDMVIgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjFEQUMyUl9UT19EQUMxUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJSX1RPX0RBQzFSX01BU0sgICAgICAgICAgMHgwMDAyICAvKiBBSUYxREFDMlJfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyUl9UT19EQUMxUl9TSElGVCAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzJSX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMlJfVE9fREFDMVJfV0lEVEggICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMyUl9UT19EQUMxUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFSX1RPX0RBQzFSICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxREFDMVJfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxUl9UT19EQUMxUl9NQVNLICAgICAgICAgIDB4MDAwMSAgLyogQUlGMURBQzFSX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMVJfVE9fREFDMVJfU0hJRlQgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMxUl9UT19EQUMxUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFSX1RPX0RBQzFSX1dJRFRIICAgICAgICAgICAgICAxICAvKiBBSUYxREFDMVJfVE9fREFDMVIgKi8KKworLyoKKyAqIFIxNTM5ICgweDYwMykgLSBEQUMyIE1peGVyIFZvbHVtZXMKKyAqLworI2RlZmluZSBXTTg5OTRfQURDUl9EQUMyX1ZPTF9NQVNLICAgICAgICAgICAgICAgMHgwMUUwICAvKiBBRENSX0RBQzJfVk9MIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FEQ1JfREFDMl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgNSAgLyogQURDUl9EQUMyX1ZPTCAtIFs4OjVdICovCisjZGVmaW5lIFdNODk5NF9BRENSX0RBQzJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDQgIC8qIEFEQ1JfREFDMl9WT0wgLSBbODo1XSAqLworI2RlZmluZSBXTTg5OTRfQURDTF9EQUMyX1ZPTF9NQVNLICAgICAgICAgICAgICAgMHgwMDBGICAvKiBBRENMX0RBQzJfVk9MIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FEQ0xfREFDMl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogQURDTF9EQUMyX1ZPTCAtIFszOjBdICovCisjZGVmaW5lIFdNODk5NF9BRENMX0RBQzJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDQgIC8qIEFEQ0xfREFDMl9WT0wgLSBbMzowXSAqLworCisvKgorICogUjE1NDAgKDB4NjA0KSAtIERBQzIgTGVmdCBNaXhlciBSb3V0aW5nCisgKi8KKyNkZWZpbmUgV004OTk0X0FEQ1JfVE9fREFDMkwgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQURDUl9UT19EQUMyTCAqLworI2RlZmluZSBXTTg5OTRfQURDUl9UT19EQUMyTF9NQVNLICAgICAgICAgICAgICAgMHgwMDIwICAvKiBBRENSX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NF9BRENSX1RPX0RBQzJMX1NISUZUICAgICAgICAgICAgICAgICAgIDUgIC8qIEFEQ1JfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTk0X0FEQ1JfVE9fREFDMkxfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQURDUl9UT19EQUMyTCAqLworI2RlZmluZSBXTTg5OTRfQURDTF9UT19EQUMyTCAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBRENMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NF9BRENMX1RPX0RBQzJMX01BU0sgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFEQ0xfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTk0X0FEQ0xfVE9fREFDMkxfU0hJRlQgICAgICAgICAgICAgICAgICAgNCAgLyogQURDTF9UT19EQUMyTCAqLworI2RlZmluZSBXTTg5OTRfQURDTF9UT19EQUMyTF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBRENMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9UT19EQUMyTCAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjJEQUNMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9UT19EQUMyTF9NQVNLICAgICAgICAgICAweDAwMDQgIC8qIEFJRjJEQUNMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9UT19EQUMyTF9TSElGVCAgICAgICAgICAgICAgIDIgIC8qIEFJRjJEQUNMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9UT19EQUMyTF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEFJRjJEQUNMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMkxfVE9fREFDMkwgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjFEQUMyTF9UT19EQUMyTCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJMX1RPX0RBQzJMX01BU0sgICAgICAgICAgMHgwMDAyICAvKiBBSUYxREFDMkxfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyTF9UT19EQUMyTF9TSElGVCAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzJMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMkxfVE9fREFDMkxfV0lEVEggICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMyTF9UT19EQUMyTCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFMX1RPX0RBQzJMICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxREFDMUxfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxTF9UT19EQUMyTF9NQVNLICAgICAgICAgIDB4MDAwMSAgLyogQUlGMURBQzFMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMUxfVE9fREFDMkxfU0hJRlQgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMxTF9UT19EQUMyTCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFMX1RPX0RBQzJMX1dJRFRIICAgICAgICAgICAgICAxICAvKiBBSUYxREFDMUxfVE9fREFDMkwgKi8KKworLyoKKyAqIFIxNTQxICgweDYwNSkgLSBEQUMyIFJpZ2h0IE1peGVyIFJvdXRpbmcKKyAqLworI2RlZmluZSBXTTg5OTRfQURDUl9UT19EQUMyUiAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBBRENSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5NF9BRENSX1RPX0RBQzJSX01BU0sgICAgICAgICAgICAgICAweDAwMjAgIC8qIEFEQ1JfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTk0X0FEQ1JfVE9fREFDMlJfU0hJRlQgICAgICAgICAgICAgICAgICAgNSAgLyogQURDUl9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5OTRfQURDUl9UT19EQUMyUl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBRENSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5NF9BRENMX1RPX0RBQzJSICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFEQ0xfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTk0X0FEQ0xfVE9fREFDMlJfTUFTSyAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQURDTF9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5OTRfQURDTF9UT19EQUMyUl9TSElGVCAgICAgICAgICAgICAgICAgICA0ICAvKiBBRENMX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5NF9BRENMX1RPX0RBQzJSX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ0xfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNSX1RPX0RBQzJSICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMkRBQ1JfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNSX1RPX0RBQzJSX01BU0sgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMkRBQ1JfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNSX1RPX0RBQzJSX1NISUZUICAgICAgICAgICAgICAgMiAgLyogQUlGMkRBQ1JfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNSX1RPX0RBQzJSX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogQUlGMkRBQ1JfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyUl9UT19EQUMyUiAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMURBQzJSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMlJfVE9fREFDMlJfTUFTSyAgICAgICAgICAweDAwMDIgIC8qIEFJRjFEQUMyUl9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJSX1RPX0RBQzJSX1NISUZUICAgICAgICAgICAgICAxICAvKiBBSUYxREFDMlJfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyUl9UT19EQUMyUl9XSURUSCAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzJSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMVJfVE9fREFDMlIgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFEQUMxUl9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFSX1RPX0RBQzJSX01BU0sgICAgICAgICAgMHgwMDAxICAvKiBBSUYxREFDMVJfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxUl9UT19EQUMyUl9TSElGVCAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzFSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMVJfVE9fREFDMlJfV0lEVEggICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMxUl9UT19EQUMyUiAqLworCisvKgorICogUjE1NDIgKDB4NjA2KSAtIEFJRjEgQURDMSBMZWZ0IE1peGVyIFJvdXRpbmcKKyAqLworI2RlZmluZSBXTTg5OTRfQURDMUxfVE9fQUlGMUFEQzFMICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBREMxTF9UT19BSUYxQURDMUwgKi8KKyNkZWZpbmUgV004OTk0X0FEQzFMX1RPX0FJRjFBREMxTF9NQVNLICAgICAgICAgIDB4MDAwMiAgLyogQURDMUxfVE9fQUlGMUFEQzFMICovCisjZGVmaW5lIFdNODk5NF9BREMxTF9UT19BSUYxQURDMUxfU0hJRlQgICAgICAgICAgICAgIDEgIC8qIEFEQzFMX1RPX0FJRjFBREMxTCAqLworI2RlZmluZSBXTTg5OTRfQURDMUxfVE9fQUlGMUFEQzFMX1dJRFRIICAgICAgICAgICAgICAxICAvKiBBREMxTF9UT19BSUYxQURDMUwgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNMX1RPX0FJRjFBREMxTCAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMkRBQ0xfVE9fQUlGMUFEQzFMICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9UT19BSUYxQURDMUxfTUFTSyAgICAgICAweDAwMDEgIC8qIEFJRjJEQUNMX1RPX0FJRjFBREMxTCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ0xfVE9fQUlGMUFEQzFMX1NISUZUICAgICAgICAgICAwICAvKiBBSUYyREFDTF9UT19BSUYxQURDMUwgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNMX1RPX0FJRjFBREMxTF9XSURUSCAgICAgICAgICAgMSAgLyogQUlGMkRBQ0xfVE9fQUlGMUFEQzFMICovCisKKy8qCisgKiBSMTU0MyAoMHg2MDcpIC0gQUlGMSBBREMxIFJpZ2h0IE1peGVyIFJvdXRpbmcKKyAqLworI2RlZmluZSBXTTg5OTRfQURDMVJfVE9fQUlGMUFEQzFSICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBREMxUl9UT19BSUYxQURDMVIgKi8KKyNkZWZpbmUgV004OTk0X0FEQzFSX1RPX0FJRjFBREMxUl9NQVNLICAgICAgICAgIDB4MDAwMiAgLyogQURDMVJfVE9fQUlGMUFEQzFSICovCisjZGVmaW5lIFdNODk5NF9BREMxUl9UT19BSUYxQURDMVJfU0hJRlQgICAgICAgICAgICAgIDEgIC8qIEFEQzFSX1RPX0FJRjFBREMxUiAqLworI2RlZmluZSBXTTg5OTRfQURDMVJfVE9fQUlGMUFEQzFSX1dJRFRIICAgICAgICAgICAgICAxICAvKiBBREMxUl9UT19BSUYxQURDMVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNSX1RPX0FJRjFBREMxUiAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMkRBQ1JfVE9fQUlGMUFEQzFSICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDUl9UT19BSUYxQURDMVJfTUFTSyAgICAgICAweDAwMDEgIC8qIEFJRjJEQUNSX1RPX0FJRjFBREMxUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ1JfVE9fQUlGMUFEQzFSX1NISUZUICAgICAgICAgICAwICAvKiBBSUYyREFDUl9UT19BSUYxQURDMVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNSX1RPX0FJRjFBREMxUl9XSURUSCAgICAgICAgICAgMSAgLyogQUlGMkRBQ1JfVE9fQUlGMUFEQzFSICovCisKKy8qCisgKiBSMTU0NCAoMHg2MDgpIC0gQUlGMSBBREMyIExlZnQgTWl4ZXIgUm91dGluZworICovCisjZGVmaW5lIFdNODk5NF9BREMyTF9UT19BSUYxQURDMkwgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQzJMX1RPX0FJRjFBREMyTCAqLworI2RlZmluZSBXTTg5OTRfQURDMkxfVE9fQUlGMUFEQzJMX01BU0sgICAgICAgICAgMHgwMDAyICAvKiBBREMyTF9UT19BSUYxQURDMkwgKi8KKyNkZWZpbmUgV004OTk0X0FEQzJMX1RPX0FJRjFBREMyTF9TSElGVCAgICAgICAgICAgICAgMSAgLyogQURDMkxfVE9fQUlGMUFEQzJMICovCisjZGVmaW5lIFdNODk5NF9BREMyTF9UT19BSUYxQURDMkxfV0lEVEggICAgICAgICAgICAgIDEgIC8qIEFEQzJMX1RPX0FJRjFBREMyTCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ0xfVE9fQUlGMUFEQzJMICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYyREFDTF9UT19BSUYxQURDMkwgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNMX1RPX0FJRjFBREMyTF9NQVNLICAgICAgIDB4MDAwMSAgLyogQUlGMkRBQ0xfVE9fQUlGMUFEQzJMICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9UT19BSUYxQURDMkxfU0hJRlQgICAgICAgICAgIDAgIC8qIEFJRjJEQUNMX1RPX0FJRjFBREMyTCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ0xfVE9fQUlGMUFEQzJMX1dJRFRIICAgICAgICAgICAxICAvKiBBSUYyREFDTF9UT19BSUYxQURDMkwgKi8KKworLyoKKyAqIFIxNTQ1ICgweDYwOSkgLSBBSUYxIEFEQzIgUmlnaHQgbWl4ZXIgUm91dGluZworICovCisjZGVmaW5lIFdNODk5NF9BREMyUl9UT19BSUYxQURDMlIgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQzJSX1RPX0FJRjFBREMyUiAqLworI2RlZmluZSBXTTg5OTRfQURDMlJfVE9fQUlGMUFEQzJSX01BU0sgICAgICAgICAgMHgwMDAyICAvKiBBREMyUl9UT19BSUYxQURDMlIgKi8KKyNkZWZpbmUgV004OTk0X0FEQzJSX1RPX0FJRjFBREMyUl9TSElGVCAgICAgICAgICAgICAgMSAgLyogQURDMlJfVE9fQUlGMUFEQzJSICovCisjZGVmaW5lIFdNODk5NF9BREMyUl9UT19BSUYxQURDMlJfV0lEVEggICAgICAgICAgICAgIDEgIC8qIEFEQzJSX1RPX0FJRjFBREMyUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ1JfVE9fQUlGMUFEQzJSICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYyREFDUl9UT19BSUYxQURDMlIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNSX1RPX0FJRjFBREMyUl9NQVNLICAgICAgIDB4MDAwMSAgLyogQUlGMkRBQ1JfVE9fQUlGMUFEQzJSICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDUl9UT19BSUYxQURDMlJfU0hJRlQgICAgICAgICAgIDAgIC8qIEFJRjJEQUNSX1RPX0FJRjFBREMyUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ1JfVE9fQUlGMUFEQzJSX1dJRFRIICAgICAgICAgICAxICAvKiBBSUYyREFDUl9UT19BSUYxQURDMlIgKi8KKworLyoKKyAqIFIxNTUyICgweDYxMCkgLSBEQUMxIExlZnQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFMX01VVEUgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogREFDMUxfTVVURSAqLworI2RlZmluZSBXTTg5OTRfREFDMUxfTVVURV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEQUMxTF9NVVRFICovCisjZGVmaW5lIFdNODk5NF9EQUMxTF9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIERBQzFMX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFMX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDMUxfTVVURSAqLworI2RlZmluZSBXTTg5OTRfREFDMV9WVSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUMxX1ZVICovCisjZGVmaW5lIFdNODk5NF9EQUMxX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDMV9WVSAqLworI2RlZmluZSBXTTg5OTRfREFDMV9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMxX1ZVICovCisjZGVmaW5lIFdNODk5NF9EQUMxTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIERBQzFMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NF9EQUMxTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERBQzFMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NF9EQUMxTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQzFMX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTU1MyAoMHg2MTEpIC0gREFDMSBSaWdodCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTRfREFDMVJfTVVURSAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEQUMxUl9NVVRFICovCisjZGVmaW5lIFdNODk5NF9EQUMxUl9NVVRFX01BU0sgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERBQzFSX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFSX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOSAgLyogREFDMVJfTVVURSAqLworI2RlZmluZSBXTTg5OTRfREFDMVJfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMxUl9NVVRFICovCisjZGVmaW5lIFdNODk5NF9EQUMxX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDMV9WVSAqLworI2RlZmluZSBXTTg5OTRfREFDMV9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUMxX1ZVICovCisjZGVmaW5lIFdNODk5NF9EQUMxX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogREFDMVJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk0X0RBQzFSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDMVJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk0X0RBQzFSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDMVJfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxNTU0ICgweDYxMikgLSBEQUMyIExlZnQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJMX01VVEUgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogREFDMkxfTVVURSAqLworI2RlZmluZSBXTTg5OTRfREFDMkxfTVVURV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEQUMyTF9NVVRFICovCisjZGVmaW5lIFdNODk5NF9EQUMyTF9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIERBQzJMX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJMX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDMkxfTVVURSAqLworI2RlZmluZSBXTTg5OTRfREFDMl9WVSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUMyX1ZVICovCisjZGVmaW5lIFdNODk5NF9EQUMyX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDMl9WVSAqLworI2RlZmluZSBXTTg5OTRfREFDMl9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMyX1ZVICovCisjZGVmaW5lIFdNODk5NF9EQUMyTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwRkYgIC8qIERBQzJMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NF9EQUMyTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERBQzJMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NF9EQUMyTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQzJMX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTU1NSAoMHg2MTMpIC0gREFDMiBSaWdodCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTRfREFDMlJfTVVURSAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEQUMyUl9NVVRFICovCisjZGVmaW5lIFdNODk5NF9EQUMyUl9NVVRFX01BU0sgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERBQzJSX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJSX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOSAgLyogREFDMlJfTVVURSAqLworI2RlZmluZSBXTTg5OTRfREFDMlJfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMyUl9NVVRFICovCisjZGVmaW5lIFdNODk5NF9EQUMyX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDMl9WVSAqLworI2RlZmluZSBXTTg5OTRfREFDMl9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUMyX1ZVICovCisjZGVmaW5lIFdNODk5NF9EQUMyX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogREFDMlJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk0X0RBQzJSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDMlJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk0X0RBQzJSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDMlJfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxNTU2ICgweDYxNCkgLSBEQUMgU29mdG11dGUKKyAqLworI2RlZmluZSBXTTg5OTRfREFDX1NPRlRNVVRFTU9ERSAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQUNfU09GVE1VVEVNT0RFICovCisjZGVmaW5lIFdNODk5NF9EQUNfU09GVE1VVEVNT0RFX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIERBQ19TT0ZUTVVURU1PREUgKi8KKyNkZWZpbmUgV004OTk0X0RBQ19TT0ZUTVVURU1PREVfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogREFDX1NPRlRNVVRFTU9ERSAqLworI2RlZmluZSBXTTg5OTRfREFDX1NPRlRNVVRFTU9ERV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBEQUNfU09GVE1VVEVNT0RFICovCisjZGVmaW5lIFdNODk5NF9EQUNfTVVURVJBVEUgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ19NVVRFUkFURSAqLworI2RlZmluZSBXTTg5OTRfREFDX01VVEVSQVRFX01BU0sgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTk0X0RBQ19NVVRFUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDX01VVEVSQVRFICovCisjZGVmaW5lIFdNODk5NF9EQUNfTVVURVJBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ19NVVRFUkFURSAqLworCisvKgorICogUjE1NjggKDB4NjIwKSAtIE92ZXJzYW1wbGluZworICovCisjZGVmaW5lIFdNODk5NF9BRENfT1NSMTI4ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTk0X0FEQ19PU1IxMjhfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQURDX09TUjEyOCAqLworI2RlZmluZSBXTTg5OTRfQURDX09TUjEyOF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBRENfT1NSMTI4ICovCisjZGVmaW5lIFdNODk5NF9BRENfT1NSMTI4X1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTk0X0RBQ19PU1IxMjggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDX09TUjEyOCAqLworI2RlZmluZSBXTTg5OTRfREFDX09TUjEyOF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNfT1NSMTI4ICovCisjZGVmaW5lIFdNODk5NF9EQUNfT1NSMTI4X1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIERBQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTk0X0RBQ19PU1IxMjhfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX09TUjEyOCAqLworCisvKgorICogUjE1NjkgKDB4NjIxKSAtIFNpZGV0b25lCisgKi8KKyNkZWZpbmUgV004OTk0X1NUX0hQRl9DVVRfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDM4MCAgLyogU1RfSFBGX0NVVCAtIFs5OjddICovCisjZGVmaW5lIFdNODk5NF9TVF9IUEZfQ1VUX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIFNUX0hQRl9DVVQgLSBbOTo3XSAqLworI2RlZmluZSBXTTg5OTRfU1RfSFBGX0NVVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAzICAvKiBTVF9IUEZfQ1VUIC0gWzk6N10gKi8KKyNkZWZpbmUgV004OTk0X1NUX0hQRiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogU1RfSFBGICovCisjZGVmaW5lIFdNODk5NF9TVF9IUEZfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFNUX0hQRiAqLworI2RlZmluZSBXTTg5OTRfU1RfSFBGX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBTVF9IUEYgKi8KKyNkZWZpbmUgV004OTk0X1NUX0hQRl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1RfSFBGICovCisjZGVmaW5lIFdNODk5NF9TVFJfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFNUUl9TRUwgKi8KKyNkZWZpbmUgV004OTk0X1NUUl9TRUxfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogU1RSX1NFTCAqLworI2RlZmluZSBXTTg5OTRfU1RSX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTVFJfU0VMICovCisjZGVmaW5lIFdNODk5NF9TVFJfU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNUUl9TRUwgKi8KKyNkZWZpbmUgV004OTk0X1NUTF9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogU1RMX1NFTCAqLworI2RlZmluZSBXTTg5OTRfU1RMX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBTVExfU0VMICovCisjZGVmaW5lIFdNODk5NF9TVExfU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFNUTF9TRUwgKi8KKyNkZWZpbmUgV004OTk0X1NUTF9TRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1RMX1NFTCAqLworCisvKgorICogUjE4MjQgKDB4NzIwKSAtIFB1bGwgQ29udHJvbCAoMSkKKyAqLworI2RlZmluZSBXTTg5OTRfRE1JQ0RBVDJfUFUgICAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBETUlDREFUMl9QVSAqLworI2RlZmluZSBXTTg5OTRfRE1JQ0RBVDJfUFVfTUFTSyAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBETUlDREFUMl9QVSAqLworI2RlZmluZSBXTTg5OTRfRE1JQ0RBVDJfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgIDExICAvKiBETUlDREFUMl9QVSAqLworI2RlZmluZSBXTTg5OTRfRE1JQ0RBVDJfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBETUlDREFUMl9QVSAqLworI2RlZmluZSBXTTg5OTRfRE1JQ0RBVDJfUEQgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBETUlDREFUMl9QRCAqLworI2RlZmluZSBXTTg5OTRfRE1JQ0RBVDJfUERfTUFTSyAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBETUlDREFUMl9QRCAqLworI2RlZmluZSBXTTg5OTRfRE1JQ0RBVDJfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgIDEwICAvKiBETUlDREFUMl9QRCAqLworI2RlZmluZSBXTTg5OTRfRE1JQ0RBVDJfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBETUlDREFUMl9QRCAqLworI2RlZmluZSBXTTg5OTRfRE1JQ0RBVDFfUFUgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBETUlDREFUMV9QVSAqLworI2RlZmluZSBXTTg5OTRfRE1JQ0RBVDFfUFVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBETUlDREFUMV9QVSAqLworI2RlZmluZSBXTTg5OTRfRE1JQ0RBVDFfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICA5ICAvKiBETUlDREFUMV9QVSAqLworI2RlZmluZSBXTTg5OTRfRE1JQ0RBVDFfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBETUlDREFUMV9QVSAqLworI2RlZmluZSBXTTg5OTRfRE1JQ0RBVDFfUEQgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBETUlDREFUMV9QRCAqLworI2RlZmluZSBXTTg5OTRfRE1JQ0RBVDFfUERfTUFTSyAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBETUlDREFUMV9QRCAqLworI2RlZmluZSBXTTg5OTRfRE1JQ0RBVDFfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICA4ICAvKiBETUlDREFUMV9QRCAqLworI2RlZmluZSBXTTg5OTRfRE1JQ0RBVDFfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBETUlDREFUMV9QRCAqLworI2RlZmluZSBXTTg5OTRfTUNMSzFfUFUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBNQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5OTRfTUNMSzFfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBNQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5OTRfTUNMSzFfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBNQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5OTRfTUNMSzFfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5OTRfTUNMSzFfUEQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBNQ0xLMV9QRCAqLworI2RlZmluZSBXTTg5OTRfTUNMSzFfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBNQ0xLMV9QRCAqLworI2RlZmluZSBXTTg5OTRfTUNMSzFfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBNQ0xLMV9QRCAqLworI2RlZmluZSBXTTg5OTRfTUNMSzFfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNQ0xLMV9QRCAqLworI2RlZmluZSBXTTg5OTRfREFDREFUMV9QVSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBEQUNEQVQxX1BVICovCisjZGVmaW5lIFdNODk5NF9EQUNEQVQxX1BVX01BU0sgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIERBQ0RBVDFfUFUgKi8KKyNkZWZpbmUgV004OTk0X0RBQ0RBVDFfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNSAgLyogREFDREFUMV9QVSAqLworI2RlZmluZSBXTTg5OTRfREFDREFUMV9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNEQVQxX1BVICovCisjZGVmaW5lIFdNODk5NF9EQUNEQVQxX1BEICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERBQ0RBVDFfUEQgKi8KKyNkZWZpbmUgV004OTk0X0RBQ0RBVDFfUERfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogREFDREFUMV9QRCAqLworI2RlZmluZSBXTTg5OTRfREFDREFUMV9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBEQUNEQVQxX1BEICovCisjZGVmaW5lIFdNODk5NF9EQUNEQVQxX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0RBVDFfUEQgKi8KKyNkZWZpbmUgV004OTk0X0RBQ0xSQ0xLMV9QVSAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogREFDTFJDTEsxX1BVICovCisjZGVmaW5lIFdNODk5NF9EQUNMUkNMSzFfUFVfTUFTSyAgICAgICAgICAgICAgICAweDAwMDggIC8qIERBQ0xSQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5OTRfREFDTFJDTEsxX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAzICAvKiBEQUNMUkNMSzFfUFUgKi8KKyNkZWZpbmUgV004OTk0X0RBQ0xSQ0xLMV9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDTFJDTEsxX1BVICovCisjZGVmaW5lIFdNODk5NF9EQUNMUkNMSzFfUEQgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERBQ0xSQ0xLMV9QRCAqLworI2RlZmluZSBXTTg5OTRfREFDTFJDTEsxX1BEX01BU0sgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQUNMUkNMSzFfUEQgKi8KKyNkZWZpbmUgV004OTk0X0RBQ0xSQ0xLMV9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgMiAgLyogREFDTFJDTEsxX1BEICovCisjZGVmaW5lIFdNODk5NF9EQUNMUkNMSzFfUERfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0xSQ0xLMV9QRCAqLworI2RlZmluZSBXTTg5OTRfQkNMSzFfUFUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBCQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5OTRfQkNMSzFfUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBCQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5OTRfQkNMSzFfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5OTRfQkNMSzFfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5OTRfQkNMSzFfUEQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBCQ0xLMV9QRCAqLworI2RlZmluZSBXTTg5OTRfQkNMSzFfUERfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBCQ0xLMV9QRCAqLworI2RlZmluZSBXTTg5OTRfQkNMSzFfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBCQ0xLMV9QRCAqLworI2RlZmluZSBXTTg5OTRfQkNMSzFfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBCQ0xLMV9QRCAqLworCisvKgorICogUjE4MjUgKDB4NzIxKSAtIFB1bGwgQ29udHJvbCAoMikKKyAqLworI2RlZmluZSBXTTg5OTRfQ1NOQUREUl9QRCAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBDU05BRERSX1BEICovCisjZGVmaW5lIFdNODk5NF9DU05BRERSX1BEX01BU0sgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIENTTkFERFJfUEQgKi8KKyNkZWZpbmUgV004OTk0X0NTTkFERFJfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQ1NOQUREUl9QRCAqLworI2RlZmluZSBXTTg5OTRfQ1NOQUREUl9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBDU05BRERSX1BEICovCisjZGVmaW5lIFdNODk5NF9MRE8yRU5BX1BEICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExETzJFTkFfUEQgKi8KKyNkZWZpbmUgV004OTk0X0xETzJFTkFfUERfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTERPMkVOQV9QRCAqLworI2RlZmluZSBXTTg5OTRfTERPMkVOQV9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBMRE8yRU5BX1BEICovCisjZGVmaW5lIFdNODk5NF9MRE8yRU5BX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIExETzJFTkFfUEQgKi8KKyNkZWZpbmUgV004OTk0X0xETzFFTkFfUEQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTERPMUVOQV9QRCAqLworI2RlZmluZSBXTTg5OTRfTERPMUVOQV9QRF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMRE8xRU5BX1BEICovCisjZGVmaW5lIFdNODk5NF9MRE8xRU5BX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIExETzFFTkFfUEQgKi8KKyNkZWZpbmUgV004OTk0X0xETzFFTkFfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMUVOQV9QRCAqLworI2RlZmluZSBXTTg5OTRfQ0lGTU9ERV9QRCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBDSUZNT0RFX1BEICovCisjZGVmaW5lIFdNODk5NF9DSUZNT0RFX1BEX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIENJRk1PREVfUEQgKi8KKyNkZWZpbmUgV004OTk0X0NJRk1PREVfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQ0lGTU9ERV9QRCAqLworI2RlZmluZSBXTTg5OTRfQ0lGTU9ERV9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBDSUZNT0RFX1BEICovCisjZGVmaW5lIFdNODk5NF9TUEtNT0RFX1BVICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIFNQS01PREVfUFUgKi8KKyNkZWZpbmUgV004OTk0X1NQS01PREVfUFVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogU1BLTU9ERV9QVSAqLworI2RlZmluZSBXTTg5OTRfU1BLTU9ERV9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTUEtNT0RFX1BVICovCisjZGVmaW5lIFdNODk5NF9TUEtNT0RFX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS01PREVfUFUgKi8KKworLyoKKyAqIFIxODQwICgweDczMCkgLSBJbnRlcnJ1cHQgU3RhdHVzIDEKKyAqLworI2RlZmluZSBXTTg5OTRfR1AxMV9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBHUDExX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQMTFfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogR1AxMV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDExX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTAgIC8qIEdQMTFfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfR1AxMV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDExX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQMTBfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogR1AxMF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDEwX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEdQMTBfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfR1AxMF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBHUDEwX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQMTBfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AxMF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDlfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEdQOV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDlfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEdQOV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDlfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEdQOV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDlfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQOV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDhfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQOF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDhfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQOF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDhfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIEdQOF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDhfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQOF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDdfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQN19FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDdfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQN19FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDdfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEdQN19FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDdfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQN19FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDZfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEdQNl9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDZfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEdQNl9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDZfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEdQNl9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDZfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQNl9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDVfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEdQNV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDVfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEdQNV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDVfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEdQNV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDVfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQNV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDRfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEdQNF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDRfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEdQNF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDRfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEdQNF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDRfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQNF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDNfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEdQM19FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDNfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEdQM19FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDNfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEdQM19FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDNfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQM19FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDJfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEdQMl9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDJfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEdQMl9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDJfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQMl9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDJfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQMl9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDFfRUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEdQMV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDFfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEdQMV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDFfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEdQMV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDFfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQMV9FSU5UICovCisKKy8qCisgKiBSMTg0MSAoMHg3MzEpIC0gSW50ZXJydXB0IFN0YXR1cyAyCisgKi8KKyNkZWZpbmUgV004OTk0X1RFTVBfV0FSTl9FSU5UICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogVEVNUF9XQVJOX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X1RFTVBfV0FSTl9FSU5UX01BU0sgICAgICAgICAgICAgIDB4ODAwMCAgLyogVEVNUF9XQVJOX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X1RFTVBfV0FSTl9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAxNSAgLyogVEVNUF9XQVJOX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X1RFTVBfV0FSTl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogVEVNUF9XQVJOX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0RDU19ET05FX0VJTlQgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogRENTX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfRENTX0RPTkVfRUlOVF9NQVNLICAgICAgICAgICAgICAgMHg0MDAwICAvKiBEQ1NfRE9ORV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9EQ1NfRE9ORV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgMTQgIC8qIERDU19ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0RDU19ET05FX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogRENTX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfV1NFUV9ET05FX0VJTlQgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBXU0VRX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfV1NFUV9ET05FX0VJTlRfTUFTSyAgICAgICAgICAgICAgMHgyMDAwICAvKiBXU0VRX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfV1NFUV9ET05FX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgIDEzICAvKiBXU0VRX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfV1NFUV9ET05FX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBXU0VRX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfRklGT1NfRVJSX0VJTlQgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBGSUZPU19FUlJfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfRklGT1NfRVJSX0VJTlRfTUFTSyAgICAgICAgICAgICAgMHgxMDAwICAvKiBGSUZPU19FUlJfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfRklGT1NfRVJSX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgIDEyICAvKiBGSUZPU19FUlJfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfRklGT1NfRVJSX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBGSUZPU19FUlJfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19TSUdfREVUX0VJTlQgICAgICAgICAgICAgMHgwODAwICAvKiBBSUYyRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19TSUdfREVUX0VJTlRfTUFTSyAgICAgICAgMHgwODAwICAvKiBBSUYyRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19TSUdfREVUX0VJTlRfU0hJRlQgICAgICAgICAgIDExICAvKiBBSUYyRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19TSUdfREVUX0VJTlRfV0lEVEggICAgICAgICAgICAxICAvKiBBSUYyRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfU0lHX0RFVF9FSU5UICAgICAgICAgICAgMHgwNDAwICAvKiBBSUYxRFJDMl9TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX1NJR19ERVRfRUlOVF9NQVNLICAgICAgIDB4MDQwMCAgLyogQUlGMURSQzJfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9TSUdfREVUX0VJTlRfU0hJRlQgICAgICAgICAgMTAgIC8qIEFJRjFEUkMyX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfU0lHX0RFVF9FSU5UX1dJRFRIICAgICAgICAgICAxICAvKiBBSUYxRFJDMl9TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX1NJR19ERVRfRUlOVCAgICAgICAgICAgIDB4MDIwMCAgLyogQUlGMURSQzFfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9TSUdfREVUX0VJTlRfTUFTSyAgICAgICAweDAyMDAgIC8qIEFJRjFEUkMxX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfU0lHX0RFVF9FSU5UX1NISUZUICAgICAgICAgICA5ICAvKiBBSUYxRFJDMV9TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX1NJR19ERVRfRUlOVF9XSURUSCAgICAgICAgICAgMSAgLyogQUlGMURSQzFfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9TUkMyX0xPQ0tfRUlOVCAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFNSQzJfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9TUkMyX0xPQ0tfRUlOVF9NQVNLICAgICAgICAgICAgICAweDAxMDAgIC8qIFNSQzJfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9TUkMyX0xPQ0tfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgIDggIC8qIFNSQzJfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9TUkMyX0xPQ0tfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIFNSQzJfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9TUkMxX0xPQ0tfRUlOVCAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFNSQzFfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9TUkMxX0xPQ0tfRUlOVF9NQVNLICAgICAgICAgICAgICAweDAwODAgIC8qIFNSQzFfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9TUkMxX0xPQ0tfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgIDcgIC8qIFNSQzFfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9TUkMxX0xPQ0tfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIFNSQzFfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0xPQ0tfRUlOVCAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEZMTDJfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0xPQ0tfRUlOVF9NQVNLICAgICAgICAgICAgICAweDAwNDAgIC8qIEZMTDJfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0xPQ0tfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgIDYgIC8qIEZMTDJfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0xPQ0tfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTDJfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9GTEwxX0xPQ0tfRUlOVCAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEZMTDFfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9GTEwxX0xPQ0tfRUlOVF9NQVNLICAgICAgICAgICAgICAweDAwMjAgIC8qIEZMTDFfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9GTEwxX0xPQ0tfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgIDUgIC8qIEZMTDFfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9GTEwxX0xPQ0tfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTDFfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9NSUMyX1NIUlRfRUlOVCAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIE1JQzJfU0hSVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9NSUMyX1NIUlRfRUlOVF9NQVNLICAgICAgICAgICAgICAweDAwMTAgIC8qIE1JQzJfU0hSVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9NSUMyX1NIUlRfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgIDQgIC8qIE1JQzJfU0hSVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9NSUMyX1NIUlRfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQzJfU0hSVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9NSUMyX0RFVF9FSU5UICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIE1JQzJfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X01JQzJfREVUX0VJTlRfTUFTSyAgICAgICAgICAgICAgIDB4MDAwOCAgLyogTUlDMl9ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfTUlDMl9ERVRfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAzICAvKiBNSUMyX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9NSUMyX0RFVF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQzJfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X01JQzFfU0hSVF9FSU5UICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTUlDMV9TSFJUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X01JQzFfU0hSVF9FSU5UX01BU0sgICAgICAgICAgICAgIDB4MDAwNCAgLyogTUlDMV9TSFJUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X01JQzFfU0hSVF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgMiAgLyogTUlDMV9TSFJUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X01JQzFfU0hSVF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogTUlDMV9TSFJUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X01JQzFfREVUX0VJTlQgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDMV9ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfTUlDMV9ERVRfRUlOVF9NQVNLICAgICAgICAgICAgICAgMHgwMDAyICAvKiBNSUMxX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9NSUMxX0RFVF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQzFfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X01JQzFfREVUX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogTUlDMV9ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfVEVNUF9TSFVUX0VJTlQgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBURU1QX1NIVVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfVEVNUF9TSFVUX0VJTlRfTUFTSyAgICAgICAgICAgICAgMHgwMDAxICAvKiBURU1QX1NIVVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfVEVNUF9TSFVUX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBURU1QX1NIVVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfVEVNUF9TSFVUX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBURU1QX1NIVVRfRUlOVCAqLworCisvKgorICogUjE4NDIgKDB4NzMyKSAtIEludGVycnVwdCBSYXcgU3RhdHVzIDIKKyAqLworI2RlZmluZSBXTTg5OTRfVEVNUF9XQVJOX1NUUyAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBURU1QX1dBUk5fU1RTICovCisjZGVmaW5lIFdNODk5NF9URU1QX1dBUk5fU1RTX01BU0sgICAgICAgICAgICAgICAweDgwMDAgIC8qIFRFTVBfV0FSTl9TVFMgKi8KKyNkZWZpbmUgV004OTk0X1RFTVBfV0FSTl9TVFNfU0hJRlQgICAgICAgICAgICAgICAgICAxNSAgLyogVEVNUF9XQVJOX1NUUyAqLworI2RlZmluZSBXTTg5OTRfVEVNUF9XQVJOX1NUU19XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBURU1QX1dBUk5fU1RTICovCisjZGVmaW5lIFdNODk5NF9EQ1NfRE9ORV9TVFMgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIERDU19ET05FX1NUUyAqLworI2RlZmluZSBXTTg5OTRfRENTX0RPTkVfU1RTX01BU0sgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBEQ1NfRE9ORV9TVFMgKi8KKyNkZWZpbmUgV004OTk0X0RDU19ET05FX1NUU19TSElGVCAgICAgICAgICAgICAgICAgICAxNCAgLyogRENTX0RPTkVfU1RTICovCisjZGVmaW5lIFdNODk5NF9EQ1NfRE9ORV9TVFNfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIERDU19ET05FX1NUUyAqLworI2RlZmluZSBXTTg5OTRfV1NFUV9ET05FX1NUUyAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBXU0VRX0RPTkVfU1RTICovCisjZGVmaW5lIFdNODk5NF9XU0VRX0RPTkVfU1RTX01BU0sgICAgICAgICAgICAgICAweDIwMDAgIC8qIFdTRVFfRE9ORV9TVFMgKi8KKyNkZWZpbmUgV004OTk0X1dTRVFfRE9ORV9TVFNfU0hJRlQgICAgICAgICAgICAgICAgICAxMyAgLyogV1NFUV9ET05FX1NUUyAqLworI2RlZmluZSBXTTg5OTRfV1NFUV9ET05FX1NUU19XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBXU0VRX0RPTkVfU1RTICovCisjZGVmaW5lIFdNODk5NF9GSUZPU19FUlJfU1RTICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIEZJRk9TX0VSUl9TVFMgKi8KKyNkZWZpbmUgV004OTk0X0ZJRk9TX0VSUl9TVFNfTUFTSyAgICAgICAgICAgICAgIDB4MTAwMCAgLyogRklGT1NfRVJSX1NUUyAqLworI2RlZmluZSBXTTg5OTRfRklGT1NfRVJSX1NUU19TSElGVCAgICAgICAgICAgICAgICAgIDEyICAvKiBGSUZPU19FUlJfU1RTICovCisjZGVmaW5lIFdNODk5NF9GSUZPU19FUlJfU1RTX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEZJRk9TX0VSUl9TVFMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfU0lHX0RFVF9TVFMgICAgICAgICAgICAgIDB4MDgwMCAgLyogQUlGMkRSQ19TSUdfREVUX1NUUyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19TSUdfREVUX1NUU19NQVNLICAgICAgICAgMHgwODAwICAvKiBBSUYyRFJDX1NJR19ERVRfU1RTICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX1NJR19ERVRfU1RTX1NISUZUICAgICAgICAgICAgMTEgIC8qIEFJRjJEUkNfU0lHX0RFVF9TVFMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfU0lHX0RFVF9TVFNfV0lEVEggICAgICAgICAgICAgMSAgLyogQUlGMkRSQ19TSUdfREVUX1NUUyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfU0lHX0RFVF9TVFMgICAgICAgICAgICAgMHgwNDAwICAvKiBBSUYxRFJDMl9TSUdfREVUX1NUUyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfU0lHX0RFVF9TVFNfTUFTSyAgICAgICAgMHgwNDAwICAvKiBBSUYxRFJDMl9TSUdfREVUX1NUUyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfU0lHX0RFVF9TVFNfU0hJRlQgICAgICAgICAgIDEwICAvKiBBSUYxRFJDMl9TSUdfREVUX1NUUyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfU0lHX0RFVF9TVFNfV0lEVEggICAgICAgICAgICAxICAvKiBBSUYxRFJDMl9TSUdfREVUX1NUUyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfU0lHX0RFVF9TVFMgICAgICAgICAgICAgMHgwMjAwICAvKiBBSUYxRFJDMV9TSUdfREVUX1NUUyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfU0lHX0RFVF9TVFNfTUFTSyAgICAgICAgMHgwMjAwICAvKiBBSUYxRFJDMV9TSUdfREVUX1NUUyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfU0lHX0RFVF9TVFNfU0hJRlQgICAgICAgICAgICA5ICAvKiBBSUYxRFJDMV9TSUdfREVUX1NUUyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfU0lHX0RFVF9TVFNfV0lEVEggICAgICAgICAgICAxICAvKiBBSUYxRFJDMV9TSUdfREVUX1NUUyAqLworI2RlZmluZSBXTTg5OTRfU1JDMl9MT0NLX1NUUyAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBTUkMyX0xPQ0tfU1RTICovCisjZGVmaW5lIFdNODk5NF9TUkMyX0xPQ0tfU1RTX01BU0sgICAgICAgICAgICAgICAweDAxMDAgIC8qIFNSQzJfTE9DS19TVFMgKi8KKyNkZWZpbmUgV004OTk0X1NSQzJfTE9DS19TVFNfU0hJRlQgICAgICAgICAgICAgICAgICAgOCAgLyogU1JDMl9MT0NLX1NUUyAqLworI2RlZmluZSBXTTg5OTRfU1JDMl9MT0NLX1NUU19XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBTUkMyX0xPQ0tfU1RTICovCisjZGVmaW5lIFdNODk5NF9TUkMxX0xPQ0tfU1RTICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFNSQzFfTE9DS19TVFMgKi8KKyNkZWZpbmUgV004OTk0X1NSQzFfTE9DS19TVFNfTUFTSyAgICAgICAgICAgICAgIDB4MDA4MCAgLyogU1JDMV9MT0NLX1NUUyAqLworI2RlZmluZSBXTTg5OTRfU1JDMV9MT0NLX1NUU19TSElGVCAgICAgICAgICAgICAgICAgICA3ICAvKiBTUkMxX0xPQ0tfU1RTICovCisjZGVmaW5lIFdNODk5NF9TUkMxX0xPQ0tfU1RTX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIFNSQzFfTE9DS19TVFMgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfTE9DS19TVFMgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogRkxMMl9MT0NLX1NUUyAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9MT0NLX1NUU19NQVNLICAgICAgICAgICAgICAgMHgwMDQwICAvKiBGTEwyX0xPQ0tfU1RTICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0xPQ0tfU1RTX1NISUZUICAgICAgICAgICAgICAgICAgIDYgIC8qIEZMTDJfTE9DS19TVFMgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfTE9DS19TVFNfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogRkxMMl9MT0NLX1NUUyAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9MT0NLX1NUUyAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBGTEwxX0xPQ0tfU1RTICovCisjZGVmaW5lIFdNODk5NF9GTEwxX0xPQ0tfU1RTX01BU0sgICAgICAgICAgICAgICAweDAwMjAgIC8qIEZMTDFfTE9DS19TVFMgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfTE9DS19TVFNfU0hJRlQgICAgICAgICAgICAgICAgICAgNSAgLyogRkxMMV9MT0NLX1NUUyAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9MT0NLX1NUU19XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBGTEwxX0xPQ0tfU1RTICovCisjZGVmaW5lIFdNODk5NF9NSUMyX1NIUlRfU1RTICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIE1JQzJfU0hSVF9TVFMgKi8KKyNkZWZpbmUgV004OTk0X01JQzJfU0hSVF9TVFNfTUFTSyAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTUlDMl9TSFJUX1NUUyAqLworI2RlZmluZSBXTTg5OTRfTUlDMl9TSFJUX1NUU19TSElGVCAgICAgICAgICAgICAgICAgICA0ICAvKiBNSUMyX1NIUlRfU1RTICovCisjZGVmaW5lIFdNODk5NF9NSUMyX1NIUlRfU1RTX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQzJfU0hSVF9TVFMgKi8KKyNkZWZpbmUgV004OTk0X01JQzJfREVUX1NUUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogTUlDMl9ERVRfU1RTICovCisjZGVmaW5lIFdNODk5NF9NSUMyX0RFVF9TVFNfTUFTSyAgICAgICAgICAgICAgICAweDAwMDggIC8qIE1JQzJfREVUX1NUUyAqLworI2RlZmluZSBXTTg5OTRfTUlDMl9ERVRfU1RTX1NISUZUICAgICAgICAgICAgICAgICAgICAzICAvKiBNSUMyX0RFVF9TVFMgKi8KKyNkZWZpbmUgV004OTk0X01JQzJfREVUX1NUU19XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDMl9ERVRfU1RTICovCisjZGVmaW5lIFdNODk5NF9NSUMxX1NIUlRfU1RTICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIE1JQzFfU0hSVF9TVFMgKi8KKyNkZWZpbmUgV004OTk0X01JQzFfU0hSVF9TVFNfTUFTSyAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTUlDMV9TSFJUX1NUUyAqLworI2RlZmluZSBXTTg5OTRfTUlDMV9TSFJUX1NUU19TSElGVCAgICAgICAgICAgICAgICAgICAyICAvKiBNSUMxX1NIUlRfU1RTICovCisjZGVmaW5lIFdNODk5NF9NSUMxX1NIUlRfU1RTX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQzFfU0hSVF9TVFMgKi8KKyNkZWZpbmUgV004OTk0X01JQzFfREVUX1NUUyAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDMV9ERVRfU1RTICovCisjZGVmaW5lIFdNODk5NF9NSUMxX0RFVF9TVFNfTUFTSyAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE1JQzFfREVUX1NUUyAqLworI2RlZmluZSBXTTg5OTRfTUlDMV9ERVRfU1RTX1NISUZUICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUMxX0RFVF9TVFMgKi8KKyNkZWZpbmUgV004OTk0X01JQzFfREVUX1NUU19XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDMV9ERVRfU1RTICovCisjZGVmaW5lIFdNODk5NF9URU1QX1NIVVRfU1RTICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFRFTVBfU0hVVF9TVFMgKi8KKyNkZWZpbmUgV004OTk0X1RFTVBfU0hVVF9TVFNfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMSAgLyogVEVNUF9TSFVUX1NUUyAqLworI2RlZmluZSBXTTg5OTRfVEVNUF9TSFVUX1NUU19TSElGVCAgICAgICAgICAgICAgICAgICAwICAvKiBURU1QX1NIVVRfU1RTICovCisjZGVmaW5lIFdNODk5NF9URU1QX1NIVVRfU1RTX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIFRFTVBfU0hVVF9TVFMgKi8KKworLyoKKyAqIFIxODQ4ICgweDczOCkgLSBJbnRlcnJ1cHQgU3RhdHVzIDEgTWFzaworICovCisjZGVmaW5lIFdNODk5NF9JTV9HUDExX0VJTlQgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIElNX0dQMTFfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1AxMV9FSU5UX01BU0sgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBJTV9HUDExX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQMTFfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAxMCAgLyogSU1fR1AxMV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9HUDExX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0dQMTFfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1AxMF9FSU5UICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBJTV9HUDEwX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQMTBfRUlOVF9NQVNLICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogSU1fR1AxMF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9HUDEwX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgIDkgIC8qIElNX0dQMTBfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1AxMF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9HUDEwX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQOV9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSU1fR1A5X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQOV9FSU5UX01BU0sgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSU1fR1A5X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQOV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgOCAgLyogSU1fR1A5X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQOV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1A5X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQOF9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU1fR1A4X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQOF9FSU5UX01BU0sgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU1fR1A4X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQOF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgNyAgLyogSU1fR1A4X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQOF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1A4X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQN19FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU1fR1A3X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQN19FSU5UX01BU0sgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU1fR1A3X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQN19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgNiAgLyogSU1fR1A3X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQN19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1A3X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQNl9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSU1fR1A2X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQNl9FSU5UX01BU0sgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSU1fR1A2X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQNl9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgNSAgLyogSU1fR1A2X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQNl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1A2X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQNV9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSU1fR1A1X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQNV9FSU5UX01BU0sgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSU1fR1A1X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQNV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgNCAgLyogSU1fR1A1X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQNV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1A1X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQNF9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogSU1fR1A0X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQNF9FSU5UX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogSU1fR1A0X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQNF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgMyAgLyogSU1fR1A0X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQNF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1A0X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQM19FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSU1fR1AzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQM19FSU5UX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSU1fR1AzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQM19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgMiAgLyogSU1fR1AzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQM19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1AzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQMl9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSU1fR1AyX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQMl9FSU5UX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSU1fR1AyX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQMl9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1AyX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQMl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1AyX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQMV9FSU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSU1fR1AxX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQMV9FSU5UX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSU1fR1AxX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQMV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogSU1fR1AxX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQMV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1AxX0VJTlQgKi8KKworLyoKKyAqIFIxODQ5ICgweDczOSkgLSBJbnRlcnJ1cHQgU3RhdHVzIDIgTWFzaworICovCisjZGVmaW5lIFdNODk5NF9JTV9URU1QX1dBUk5fRUlOVCAgICAgICAgICAgICAgICAweDgwMDAgIC8qIElNX1RFTVBfV0FSTl9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9URU1QX1dBUk5fRUlOVF9NQVNLICAgICAgICAgICAweDgwMDAgIC8qIElNX1RFTVBfV0FSTl9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9URU1QX1dBUk5fRUlOVF9TSElGVCAgICAgICAgICAgICAgMTUgIC8qIElNX1RFTVBfV0FSTl9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9URU1QX1dBUk5fRUlOVF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIElNX1RFTVBfV0FSTl9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9EQ1NfRE9ORV9FSU5UICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIElNX0RDU19ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0RDU19ET05FX0VJTlRfTUFTSyAgICAgICAgICAgIDB4NDAwMCAgLyogSU1fRENTX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fRENTX0RPTkVfRUlOVF9TSElGVCAgICAgICAgICAgICAgIDE0ICAvKiBJTV9EQ1NfRE9ORV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9EQ1NfRE9ORV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIElNX0RDU19ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX1dTRVFfRE9ORV9FSU5UICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogSU1fV1NFUV9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX1dTRVFfRE9ORV9FSU5UX01BU0sgICAgICAgICAgIDB4MjAwMCAgLyogSU1fV1NFUV9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX1dTRVFfRE9ORV9FSU5UX1NISUZUICAgICAgICAgICAgICAxMyAgLyogSU1fV1NFUV9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX1dTRVFfRE9ORV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogSU1fV1NFUV9ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0ZJRk9TX0VSUl9FSU5UICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogSU1fRklGT1NfRVJSX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0ZJRk9TX0VSUl9FSU5UX01BU0sgICAgICAgICAgIDB4MTAwMCAgLyogSU1fRklGT1NfRVJSX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0ZJRk9TX0VSUl9FSU5UX1NISUZUICAgICAgICAgICAgICAxMiAgLyogSU1fRklGT1NfRVJSX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0ZJRk9TX0VSUl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogSU1fRklGT1NfRVJSX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0FJRjJEUkNfU0lHX0RFVF9FSU5UICAgICAgICAgIDB4MDgwMCAgLyogSU1fQUlGMkRSQ19TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0FJRjJEUkNfU0lHX0RFVF9FSU5UX01BU0sgICAgIDB4MDgwMCAgLyogSU1fQUlGMkRSQ19TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0FJRjJEUkNfU0lHX0RFVF9FSU5UX1NISUZUICAgICAgICAxMSAgLyogSU1fQUlGMkRSQ19TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0FJRjJEUkNfU0lHX0RFVF9FSU5UX1dJRFRIICAgICAgICAgMSAgLyogSU1fQUlGMkRSQ19TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0FJRjFEUkMyX1NJR19ERVRfRUlOVCAgICAgICAgIDB4MDQwMCAgLyogSU1fQUlGMURSQzJfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9BSUYxRFJDMl9TSUdfREVUX0VJTlRfTUFTSyAgICAweDA0MDAgIC8qIElNX0FJRjFEUkMyX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fQUlGMURSQzJfU0lHX0RFVF9FSU5UX1NISUZUICAgICAgIDEwICAvKiBJTV9BSUYxRFJDMl9TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0FJRjFEUkMyX1NJR19ERVRfRUlOVF9XSURUSCAgICAgICAgMSAgLyogSU1fQUlGMURSQzJfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9BSUYxRFJDMV9TSUdfREVUX0VJTlQgICAgICAgICAweDAyMDAgIC8qIElNX0FJRjFEUkMxX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fQUlGMURSQzFfU0lHX0RFVF9FSU5UX01BU0sgICAgMHgwMjAwICAvKiBJTV9BSUYxRFJDMV9TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0FJRjFEUkMxX1NJR19ERVRfRUlOVF9TSElGVCAgICAgICAgOSAgLyogSU1fQUlGMURSQzFfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9BSUYxRFJDMV9TSUdfREVUX0VJTlRfV0lEVEggICAgICAgIDEgIC8qIElNX0FJRjFEUkMxX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fU1JDMl9MT0NLX0VJTlQgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJTV9TUkMyX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fU1JDMl9MT0NLX0VJTlRfTUFTSyAgICAgICAgICAgMHgwMTAwICAvKiBJTV9TUkMyX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fU1JDMl9MT0NLX0VJTlRfU0hJRlQgICAgICAgICAgICAgICA4ICAvKiBJTV9TUkMyX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fU1JDMl9MT0NLX0VJTlRfV0lEVEggICAgICAgICAgICAgICAxICAvKiBJTV9TUkMyX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fU1JDMV9MT0NLX0VJTlQgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTV9TUkMxX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fU1JDMV9MT0NLX0VJTlRfTUFTSyAgICAgICAgICAgMHgwMDgwICAvKiBJTV9TUkMxX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fU1JDMV9MT0NLX0VJTlRfU0hJRlQgICAgICAgICAgICAgICA3ICAvKiBJTV9TUkMxX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fU1JDMV9MT0NLX0VJTlRfV0lEVEggICAgICAgICAgICAgICAxICAvKiBJTV9TUkMxX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fRkxMMl9MT0NLX0VJTlQgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTV9GTEwyX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fRkxMMl9MT0NLX0VJTlRfTUFTSyAgICAgICAgICAgMHgwMDQwICAvKiBJTV9GTEwyX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fRkxMMl9MT0NLX0VJTlRfU0hJRlQgICAgICAgICAgICAgICA2ICAvKiBJTV9GTEwyX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fRkxMMl9MT0NLX0VJTlRfV0lEVEggICAgICAgICAgICAgICAxICAvKiBJTV9GTEwyX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fRkxMMV9MT0NLX0VJTlQgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTV9GTEwxX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fRkxMMV9MT0NLX0VJTlRfTUFTSyAgICAgICAgICAgMHgwMDIwICAvKiBJTV9GTEwxX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fRkxMMV9MT0NLX0VJTlRfU0hJRlQgICAgICAgICAgICAgICA1ICAvKiBJTV9GTEwxX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fRkxMMV9MT0NLX0VJTlRfV0lEVEggICAgICAgICAgICAgICAxICAvKiBJTV9GTEwxX0xPQ0tfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fTUlDMl9TSFJUX0VJTlQgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTV9NSUMyX1NIUlRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fTUlDMl9TSFJUX0VJTlRfTUFTSyAgICAgICAgICAgMHgwMDEwICAvKiBJTV9NSUMyX1NIUlRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fTUlDMl9TSFJUX0VJTlRfU0hJRlQgICAgICAgICAgICAgICA0ICAvKiBJTV9NSUMyX1NIUlRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fTUlDMl9TSFJUX0VJTlRfV0lEVEggICAgICAgICAgICAgICAxICAvKiBJTV9NSUMyX1NIUlRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fTUlDMl9ERVRfRUlOVCAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBJTV9NSUMyX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9NSUMyX0RFVF9FSU5UX01BU0sgICAgICAgICAgICAweDAwMDggIC8qIElNX01JQzJfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX01JQzJfREVUX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgMyAgLyogSU1fTUlDMl9ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fTUlDMl9ERVRfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBJTV9NSUMyX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9NSUMxX1NIUlRfRUlOVCAgICAgICAgICAgICAgICAweDAwMDQgIC8qIElNX01JQzFfU0hSVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9NSUMxX1NIUlRfRUlOVF9NQVNLICAgICAgICAgICAweDAwMDQgIC8qIElNX01JQzFfU0hSVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9NSUMxX1NIUlRfRUlOVF9TSElGVCAgICAgICAgICAgICAgIDIgIC8qIElNX01JQzFfU0hSVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9NSUMxX1NIUlRfRUlOVF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIElNX01JQzFfU0hSVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9NSUMxX0RFVF9FSU5UICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIElNX01JQzFfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX01JQzFfREVUX0VJTlRfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogSU1fTUlDMV9ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fTUlDMV9ERVRfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBJTV9NSUMxX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9NSUMxX0RFVF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIElNX01JQzFfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX1RFTVBfU0hVVF9FSU5UICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSU1fVEVNUF9TSFVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX1RFTVBfU0hVVF9FSU5UX01BU0sgICAgICAgICAgIDB4MDAwMSAgLyogSU1fVEVNUF9TSFVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX1RFTVBfU0hVVF9FSU5UX1NISUZUICAgICAgICAgICAgICAgMCAgLyogSU1fVEVNUF9TSFVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX1RFTVBfU0hVVF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogSU1fVEVNUF9TSFVUX0VJTlQgKi8KKworLyoKKyAqIFIxODU2ICgweDc0MCkgLSBJbnRlcnJ1cHQgQ29udHJvbAorICovCisjZGVmaW5lIFdNODk5NF9JTV9JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIElNX0lSUSAqLworI2RlZmluZSBXTTg5OTRfSU1fSVJRX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBJTV9JUlEgKi8KKyNkZWZpbmUgV004OTk0X0lNX0lSUV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogSU1fSVJRICovCisjZGVmaW5lIFdNODk5NF9JTV9JUlFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0lSUSAqLworCisvKgorICogUjE4NjQgKDB4NzQ4KSAtIElSUSBEZWJvdW5jZQorICovCisjZGVmaW5lIFdNODk5NF9URU1QX1dBUk5fREIgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIFRFTVBfV0FSTl9EQiAqLworI2RlZmluZSBXTTg5OTRfVEVNUF9XQVJOX0RCX01BU0sgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBURU1QX1dBUk5fREIgKi8KKyNkZWZpbmUgV004OTk0X1RFTVBfV0FSTl9EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgNSAgLyogVEVNUF9XQVJOX0RCICovCisjZGVmaW5lIFdNODk5NF9URU1QX1dBUk5fREJfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIFRFTVBfV0FSTl9EQiAqLworI2RlZmluZSBXTTg5OTRfTUlDMl9TSFJUX0RCICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBNSUMyX1NIUlRfREIgKi8KKyNkZWZpbmUgV004OTk0X01JQzJfU0hSVF9EQl9NQVNLICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTUlDMl9TSFJUX0RCICovCisjZGVmaW5lIFdNODk5NF9NSUMyX1NIUlRfREJfU0hJRlQgICAgICAgICAgICAgICAgICAgIDQgIC8qIE1JQzJfU0hSVF9EQiAqLworI2RlZmluZSBXTTg5OTRfTUlDMl9TSFJUX0RCX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUMyX1NIUlRfREIgKi8KKyNkZWZpbmUgV004OTk0X01JQzJfREVUX0RCICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogTUlDMl9ERVRfREIgKi8KKyNkZWZpbmUgV004OTk0X01JQzJfREVUX0RCX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogTUlDMl9ERVRfREIgKi8KKyNkZWZpbmUgV004OTk0X01JQzJfREVUX0RCX1NISUZUICAgICAgICAgICAgICAgICAgICAgMyAgLyogTUlDMl9ERVRfREIgKi8KKyNkZWZpbmUgV004OTk0X01JQzJfREVUX0RCX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDMl9ERVRfREIgKi8KKyNkZWZpbmUgV004OTk0X01JQzFfU0hSVF9EQiAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTUlDMV9TSFJUX0RCICovCisjZGVmaW5lIFdNODk5NF9NSUMxX1NIUlRfREJfTUFTSyAgICAgICAgICAgICAgICAweDAwMDQgIC8qIE1JQzFfU0hSVF9EQiAqLworI2RlZmluZSBXTTg5OTRfTUlDMV9TSFJUX0RCX1NISUZUICAgICAgICAgICAgICAgICAgICAyICAvKiBNSUMxX1NIUlRfREIgKi8KKyNkZWZpbmUgV004OTk0X01JQzFfU0hSVF9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDMV9TSFJUX0RCICovCisjZGVmaW5lIFdNODk5NF9NSUMxX0RFVF9EQiAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE1JQzFfREVUX0RCICovCisjZGVmaW5lIFdNODk5NF9NSUMxX0RFVF9EQl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIE1JQzFfREVUX0RCICovCisjZGVmaW5lIFdNODk5NF9NSUMxX0RFVF9EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQzFfREVUX0RCICovCisjZGVmaW5lIFdNODk5NF9NSUMxX0RFVF9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQzFfREVUX0RCICovCisjZGVmaW5lIFdNODk5NF9URU1QX1NIVVRfREIgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFRFTVBfU0hVVF9EQiAqLworI2RlZmluZSBXTTg5OTRfVEVNUF9TSFVUX0RCX01BU0sgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBURU1QX1NIVVRfREIgKi8KKyNkZWZpbmUgV004OTk0X1RFTVBfU0hVVF9EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgMCAgLyogVEVNUF9TSFVUX0RCICovCisjZGVmaW5lIFdNODk5NF9URU1QX1NIVVRfREJfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIFRFTVBfU0hVVF9EQiAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA5MDk1N2YxLi4zODk5Mzk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC04NzAsNiArODcwLDEwOCBAQAogICovCiBpbnQgX19nZXRfdXNlcl9wYWdlc19mYXN0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIGludCBucl9wYWdlcywgaW50IHdyaXRlLAogCQkJICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKTsKKy8qCisgKiBwZXItcHJvY2VzcyhwZXItbW1fc3RydWN0KSBzdGF0aXN0aWNzLgorICovCisjaWYgZGVmaW5lZChTUExJVF9SU1NfQ09VTlRJTkcpCisvKgorICogVGhlIG1tIGNvdW50ZXJzIGFyZSBub3QgcHJvdGVjdGVkIGJ5IGl0cyBwYWdlX3RhYmxlX2xvY2ssCisgKiBzbyBtdXN0IGJlIGluY3JlbWVudGVkIGF0b21pY2FsbHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbW1fY291bnRlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IG1lbWJlciwgbG9uZyB2YWx1ZSkKK3sKKwlhdG9taWNfbG9uZ19zZXQoJm1tLT5yc3Nfc3RhdC5jb3VudFttZW1iZXJdLCB2YWx1ZSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X21tX2NvdW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBtZW1iZXIpOworCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkX21tX2NvdW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBtZW1iZXIsIGxvbmcgdmFsdWUpCit7CisJYXRvbWljX2xvbmdfYWRkKHZhbHVlLCAmbW0tPnJzc19zdGF0LmNvdW50W21lbWJlcl0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5jX21tX2NvdW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBtZW1iZXIpCit7CisJYXRvbWljX2xvbmdfaW5jKCZtbS0+cnNzX3N0YXQuY291bnRbbWVtYmVyXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWNfbW1fY291bnRlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IG1lbWJlcikKK3sKKwlhdG9taWNfbG9uZ19kZWMoJm1tLT5yc3Nfc3RhdC5jb3VudFttZW1iZXJdKTsKK30KKworI2Vsc2UgIC8qICFVU0VfU1BMSVRfUFRMT0NLUyAqLworLyoKKyAqIFRoZSBtbSBjb3VudGVycyBhcmUgcHJvdGVjdGVkIGJ5IGl0cyBwYWdlX3RhYmxlX2xvY2ssCisgKiBzbyBjYW4gYmUgaW5jcmVtZW50ZWQgZGlyZWN0bHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbW1fY291bnRlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IG1lbWJlciwgbG9uZyB2YWx1ZSkKK3sKKwltbS0+cnNzX3N0YXQuY291bnRbbWVtYmVyXSA9IHZhbHVlOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X21tX2NvdW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBtZW1iZXIpCit7CisJcmV0dXJuIG1tLT5yc3Nfc3RhdC5jb3VudFttZW1iZXJdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkX21tX2NvdW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBtZW1iZXIsIGxvbmcgdmFsdWUpCit7CisJbW0tPnJzc19zdGF0LmNvdW50W21lbWJlcl0gKz0gdmFsdWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbmNfbW1fY291bnRlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IG1lbWJlcikKK3sKKwltbS0+cnNzX3N0YXQuY291bnRbbWVtYmVyXSsrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVjX21tX2NvdW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBtZW1iZXIpCit7CisJbW0tPnJzc19zdGF0LmNvdW50W21lbWJlcl0tLTsKK30KKworI2VuZGlmIC8qICFVU0VfU1BMSVRfUFRMT0NLUyAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X21tX3JzcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlyZXR1cm4gZ2V0X21tX2NvdW50ZXIobW0sIE1NX0ZJTEVQQUdFUykgKworCQlnZXRfbW1fY291bnRlcihtbSwgTU1fQU5PTlBBR0VTKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9tbV9oaXdhdGVyX3JzcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlyZXR1cm4gbWF4KG1tLT5oaXdhdGVyX3JzcywgZ2V0X21tX3JzcyhtbSkpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X21tX2hpd2F0ZXJfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJcmV0dXJuIG1heChtbS0+aGl3YXRlcl92bSwgbW0tPnRvdGFsX3ZtKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9oaXdhdGVyX3JzcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwl1bnNpZ25lZCBsb25nIF9yc3MgPSBnZXRfbW1fcnNzKG1tKTsKKworCWlmICgobW0pLT5oaXdhdGVyX3JzcyA8IF9yc3MpCisJCShtbSktPmhpd2F0ZXJfcnNzID0gX3JzczsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9oaXdhdGVyX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWlmIChtbS0+aGl3YXRlcl92bSA8IG1tLT50b3RhbF92bSkKKwkJbW0tPmhpd2F0ZXJfdm0gPSBtbS0+dG90YWxfdm07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRtYXhfbW1faGl3YXRlcl9yc3ModW5zaWduZWQgbG9uZyAqbWF4cnNzLAorCQkJCQkgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJdW5zaWduZWQgbG9uZyBoaXdhdGVyX3JzcyA9IGdldF9tbV9oaXdhdGVyX3JzcyhtbSk7CisKKwlpZiAoKm1heHJzcyA8IGhpd2F0ZXJfcnNzKQorCQkqbWF4cnNzID0gaGl3YXRlcl9yc3M7Cit9CisKK3ZvaWQgc3luY19tbV9yc3Moc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiAKIC8qCiAgKiBBIGNhbGxiYWNrIHlvdSBjYW4gcmVnaXN0ZXIgdG8gYXBwbHkgcHJlc3N1cmUgdG8gYWdlYWJsZSBjYWNoZXMuCkBAIC0xMTE0LDcgKzEyMTYsNyBAQAogCiAvKiBtbWFwLmMgKi8KIGV4dGVybiBpbnQgX192bV9lbm91Z2hfbWVtb3J5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBsb25nIHBhZ2VzLCBpbnQgY2FwX3N5c19hZG1pbik7Ci1leHRlcm4gdm9pZCB2bWFfYWRqdXN0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorZXh0ZXJuIGludCB2bWFfYWRqdXN0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCXVuc2lnbmVkIGxvbmcgZW5kLCBwZ29mZl90IHBnb2ZmLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmluc2VydCk7CiBleHRlcm4gc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfbWVyZ2Uoc3RydWN0IG1tX3N0cnVjdCAqLAogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJldiwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAppbmRleCAzNmY5NjI3Li4wNDhiNDYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCkBAIC0yNCwxMiArMjQsNiBAQAogCiAjZGVmaW5lIFVTRV9TUExJVF9QVExPQ0tTCShOUl9DUFVTID49IENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUykKIAotI2lmIFVTRV9TUExJVF9QVExPQ0tTCi10eXBlZGVmIGF0b21pY19sb25nX3QgbW1fY291bnRlcl90OwotI2Vsc2UgIC8qICFVU0VfU1BMSVRfUFRMT0NLUyAqLwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIG1tX2NvdW50ZXJfdDsKLSNlbmRpZiAvKiAhVVNFX1NQTElUX1BUTE9DS1MgKi8KLQogLyoKICAqIEVhY2ggcGh5c2ljYWwgcGFnZSBpbiB0aGUgc3lzdGVtIGhhcyBhIHN0cnVjdCBwYWdlIGFzc29jaWF0ZWQgd2l0aAogICogaXQgdG8ga2VlcCB0cmFjayBvZiB3aGF0ZXZlciBpdCBpcyB3ZSBhcmUgdXNpbmcgdGhlIHBhZ2UgZm9yIGF0IHRoZQpAQCAtMTY5LDcgKzE2Myw4IEBACiAJICogY2FuIG9ubHkgYmUgaW4gdGhlIGlfbW1hcCB0cmVlLiAgQW4gYW5vbnltb3VzIE1BUF9QUklWQVRFLCBzdGFjawogCSAqIG9yIGJyayB2bWEgKHdpdGggTlVMTCBmaWxlKSBjYW4gb25seSBiZSBpbiBhbiBhbm9uX3ZtYSBsaXN0LgogCSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgYW5vbl92bWFfbm9kZTsJLyogU2VyaWFsaXplZCBieSBhbm9uX3ZtYS0+bG9jayAqLworCXN0cnVjdCBsaXN0X2hlYWQgYW5vbl92bWFfY2hhaW47IC8qIFNlcmlhbGl6ZWQgYnkgbW1hcF9zZW0gJgorCQkJCQkgICogcGFnZV90YWJsZV9sb2NrICovCiAJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYTsJLyogU2VyaWFsaXplZCBieSBwYWdlX3RhYmxlX2xvY2sgKi8KIAogCS8qIEZ1bmN0aW9uIHBvaW50ZXJzIHRvIGRlYWwgd2l0aCB0aGlzIHN0cnVjdC4gKi8KQEAgLTIwMSw2ICsxOTYsMjkgQEAKIAlzdHJ1Y3QgY29tcGxldGlvbiBzdGFydHVwOwogfTsKIAorZW51bSB7CisJTU1fRklMRVBBR0VTLAorCU1NX0FOT05QQUdFUywKKwlNTV9TV0FQRU5UUywKKwlOUl9NTV9DT1VOVEVSUworfTsKKworI2lmIFVTRV9TUExJVF9QVExPQ0tTCisjZGVmaW5lIFNQTElUX1JTU19DT1VOVElORworc3RydWN0IG1tX3Jzc19zdGF0IHsKKwlhdG9taWNfbG9uZ190IGNvdW50W05SX01NX0NPVU5URVJTXTsKK307CisvKiBwZXItdGhyZWFkIGNhY2hlZCBpbmZvcm1hdGlvbiwgKi8KK3N0cnVjdCB0YXNrX3Jzc19zdGF0IHsKKwlpbnQgZXZlbnRzOwkvKiBmb3Igc3luY2hyb25pemF0aW9uIHRocmVzaG9sZCAqLworCWludCBjb3VudFtOUl9NTV9DT1VOVEVSU107Cit9OworI2Vsc2UgIC8qICFVU0VfU1BMSVRfUFRMT0NLUyAqLworc3RydWN0IG1tX3Jzc19zdGF0IHsKKwl1bnNpZ25lZCBsb25nIGNvdW50W05SX01NX0NPVU5URVJTXTsKK307CisjZW5kaWYgLyogIVVTRV9TUExJVF9QVExPQ0tTICovCisKIHN0cnVjdCBtbV9zdHJ1Y3QgewogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIG1tYXA7CQkvKiBsaXN0IG9mIFZNQXMgKi8KIAlzdHJ1Y3QgcmJfcm9vdCBtbV9yYjsKQEAgLTIyNywxMSArMjQ1LDYgQEAKIAkJCQkJCSAqIGJ5IG1tbGlzdF9sb2NrCiAJCQkJCQkgKi8KIAotCS8qIFNwZWNpYWwgY291bnRlcnMsIGluIHNvbWUgY29uZmlndXJhdGlvbnMgcHJvdGVjdGVkIGJ5IHRoZQotCSAqIHBhZ2VfdGFibGVfbG9jaywgaW4gb3RoZXIgY29uZmlndXJhdGlvbnMgYnkgYmVpbmcgYXRvbWljLgotCSAqLwotCW1tX2NvdW50ZXJfdCBfZmlsZV9yc3M7Ci0JbW1fY291bnRlcl90IF9hbm9uX3JzczsKIAogCXVuc2lnbmVkIGxvbmcgaGl3YXRlcl9yc3M7CS8qIEhpZ2gtd2F0ZXJtYXJrIG9mIFJTUyB1c2FnZSAqLwogCXVuc2lnbmVkIGxvbmcgaGl3YXRlcl92bTsJLyogSGlnaC13YXRlciB2aXJ0dWFsIG1lbW9yeSB1c2FnZSAqLwpAQCAtMjQ0LDYgKzI1NywxMiBAQAogCiAJdW5zaWduZWQgbG9uZyBzYXZlZF9hdXh2W0FUX1ZFQ1RPUl9TSVpFXTsgLyogZm9yIC9wcm9jL1BJRC9hdXh2ICovCiAKKwkvKgorCSAqIFNwZWNpYWwgY291bnRlcnMsIGluIHNvbWUgY29uZmlndXJhdGlvbnMgcHJvdGVjdGVkIGJ5IHRoZQorCSAqIHBhZ2VfdGFibGVfbG9jaywgaW4gb3RoZXIgY29uZmlndXJhdGlvbnMgYnkgYmVpbmcgYXRvbWljLgorCSAqLworCXN0cnVjdCBtbV9yc3Nfc3RhdCByc3Nfc3RhdDsKKwogCXN0cnVjdCBsaW51eF9iaW5mbXQgKmJpbmZtdDsKIAogCWNwdW1hc2tfdCBjcHVfdm1fbWFzazsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL2NhcmQuaCBiL2luY2x1ZGUvbGludXgvbW1jL2NhcmQuaAppbmRleCAyZWUyMmU4Li5kMDJkMmM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9jYXJkLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvY2FyZC5oCkBAIC05OSw2ICs5OSw4IEBACiAjZGVmaW5lIE1NQ19TVEFURV9CTE9DS0FERFIJKDE8PDMpCQkvKiBjYXJkIHVzZXMgYmxvY2stYWRkcmVzc2luZyAqLwogCXVuc2lnbmVkIGludAkJcXVpcmtzOyAJLyogY2FyZCBxdWlya3MgKi8KICNkZWZpbmUgTU1DX1FVSVJLX0xFTklFTlRfRk4wCSgxPDwwKQkJLyogYWxsb3cgU0RJTyBGTjAgd3JpdGVzIG91dHNpZGUgb2YgdGhlIFZTIENDQ1IgcmFuZ2UgKi8KKyNkZWZpbmUgTU1DX1FVSVJLX0JMS1NaX0ZPUl9CWVRFX01PREUgKDE8PDEpCS8qIHVzZSBmdW5jLT5jdXJfYmxrc2l6ZSAqLworCQkJCQkJLyogZm9yIGJ5dGUgbW9kZSAqLwogCiAJdTMyCQkJcmF3X2NpZFs0XTsJLyogcmF3IGNhcmQgQ0lEICovCiAJdTMyCQkJcmF3X2NzZFs0XTsJLyogcmF3IGNhcmQgQ1NEICovCkBAIC0xMzksNiArMTQxLDExIEBACiAJcmV0dXJuIGMtPnF1aXJrcyAmIE1NQ19RVUlSS19MRU5JRU5UX0ZOMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgbW1jX2Jsa3N6X2Zvcl9ieXRlX21vZGUoY29uc3Qgc3RydWN0IG1tY19jYXJkICpjKQoreworCXJldHVybiBjLT5xdWlya3MgJiBNTUNfUVVJUktfQkxLU1pfRk9SX0JZVEVfTU9ERTsKK30KKwogI2RlZmluZSBtbWNfY2FyZF9uYW1lKGMpCSgoYyktPmNpZC5wcm9kX25hbWUpCiAjZGVmaW5lIG1tY19jYXJkX2lkKGMpCQkoZGV2X25hbWUoJihjKS0+ZGV2KSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oIGIvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oCmluZGV4IGVhZjM2MzYuLjQzZWFmNWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmgKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8bGludXgvbW1jL2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvcG0uaD4KIAogc3RydWN0IG1tY19pb3MgewogCXVuc2lnbmVkIGludAljbG9jazsJCQkvKiBjbG9jayByYXRlICovCkBAIC0xNTIsNiArMTUzLDggQEAKICNkZWZpbmUgTU1DX0NBUF9OT05SRU1PVkFCTEUJKDEgPDwgOCkJLyogTm9ucmVtb3ZhYmxlIGUuZy4gZU1NQyAqLwogI2RlZmluZSBNTUNfQ0FQX1dBSVRfV0hJTEVfQlVTWQkoMSA8PCA5KQkvKiBXYWl0cyB3aGlsZSBjYXJkIGlzIGJ1c3kgKi8KIAorCW1tY19wbV9mbGFnX3QJCXBtX2NhcHM7CS8qIHN1cHBvcnRlZCBwbSBmZWF0dXJlcyAqLworCiAJLyogaG9zdCBzcGVjaWZpYyBibG9jayBkYXRhICovCiAJdW5zaWduZWQgaW50CQltYXhfc2VnX3NpemU7CS8qIHNlZSBibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZSAqLwogCXVuc2lnbmVkIHNob3J0CQltYXhfaHdfc2VnczsJLyogc2VlIGJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMgKi8KQEAgLTE5Nyw2ICsyMDAsOCBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdAkqc2Rpb19pcnFfdGhyZWFkOwogCWF0b21pY190CQlzZGlvX2lycV90aHJlYWRfYWJvcnQ7CiAKKwltbWNfcG1fZmxhZ190CQlwbV9mbGFnczsJLyogcmVxdWVzdGVkIHBtIGZlYXR1cmVzICovCisKICNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSUwogCXN0cnVjdCBsZWRfdHJpZ2dlcgkqbGVkOwkJLyogYWN0aXZpdHkgbGVkICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL3BtLmggYi9pbmNsdWRlL2xpbnV4L21tYy9wbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzN2FhYzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9wbS5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L21tYy9wbS5oCisgKgorICogQXV0aG9yOglOaWNvbGFzIFBpdHJlCisgKiBDb3B5cmlnaHQ6CShDKSAyMDA5IE1hcnZlbGwgVGVjaG5vbG9neSBHcm91cCBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIExJTlVYX01NQ19QTV9ICisjZGVmaW5lIExJTlVYX01NQ19QTV9ICisKKy8qCisgKiBUaGVzZSBmbGFncyBhcmUgdXNlZCB0byBkZXNjcmliZSBwb3dlciBtYW5hZ2VtZW50IGZlYXR1cmVzIHRoYXQKKyAqIHNvbWUgY2FyZHMgKHR5cGljYWxseSBTRElPIGNhcmRzKSBtaWdodCB3aXNoIHRvIGJlbmVmaXQgZnJvbSB3aGVuCisgKiB0aGUgaG9zdCBzeXN0ZW0gaXMgYmVpbmcgc3VzcGVuZGVkLiAgVGhlcmUgYXJlIHNldmVyYWwgbGF5ZXJzIG9mCisgKiBhYnN0cmFjdGlvbnMgaW52b2x2ZWQsIGZyb20gdGhlIGhvc3QgY29udHJvbGxlciBkcml2ZXIsIHRvIHRoZSBNTUMgY29yZQorICogY29kZSwgdG8gdGhlIFNESU8gY29yZSBjb2RlLCB0byBmaW5hbGx5IGdldCB0byB0aGUgYWN0dWFsIFNESU8gZnVuY3Rpb24KKyAqIGRyaXZlci4gIFRoaXMgZmlsZSBpcyB0aGVyZWZvcmUgdXNlZCBmb3IgY29tbW9uIGRlZmluaXRpb25zIHNoYXJlZCBhY3Jvc3MKKyAqIGFsbCB0aG9zZSBsYXllcnMuCisgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBpbnQgbW1jX3BtX2ZsYWdfdDsKKworI2RlZmluZSBNTUNfUE1fS0VFUF9QT1dFUgkoMSA8PCAwKQkvKiBwcmVzZXJ2ZSBjYXJkIHBvd2VyIGR1cmluZyBzdXNwZW5kICovCisjZGVmaW5lIE1NQ19QTV9XQUtFX1NESU9fSVJRCSgxIDw8IDEpCS8qIHdha2UgdXAgaG9zdCBzeXN0ZW0gb24gU0RJTyBJUlEgYXNzZXJ0aW9uICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvc2Rpby5oIGIvaW5jbHVkZS9saW51eC9tbWMvc2Rpby5oCmluZGV4IDQ3YmE0NjQuLjBlYmFlZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL3NkaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9zZGlvLmgKQEAgLTk1LDYgKzk1LDggQEAKICNkZWZpbmUgIFNESU9fQlVTX1dJRFRIXzFCSVQJMHgwMAogI2RlZmluZSAgU0RJT19CVVNfV0lEVEhfNEJJVAkweDAyCiAKKyNkZWZpbmUgIFNESU9fQlVTX0FTWU5DX0lOVAkweDIwCisKICNkZWZpbmUgIFNESU9fQlVTX0NEX0RJU0FCTEUgICAgIDB4ODAJLyogZGlzYWJsZSBwdWxsLXVwIG9uIERBVDMgKHBpbiAxKSAqLwogCiAjZGVmaW5lIFNESU9fQ0NDUl9DQVBTCQkweDA4CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9zZGlvX2Z1bmMuaCBiL2luY2x1ZGUvbGludXgvbW1jL3NkaW9fZnVuYy5oCmluZGV4IGFjM2FiNjguLmM2YzBjY2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL3NkaW9fZnVuYy5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL3NkaW9fZnVuYy5oCkBAIC0xNSw2ICsxNSw4IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CiAKKyNpbmNsdWRlIDxsaW51eC9tbWMvcG0uaD4KKwogc3RydWN0IG1tY19jYXJkOwogc3RydWN0IHNkaW9fZnVuYzsKIApAQCAtMTUzLDUgKzE1NSw4IEBACiBleHRlcm4gdm9pZCBzZGlvX2YwX3dyaXRlYihzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLCB1bnNpZ25lZCBjaGFyIGIsCiAJdW5zaWduZWQgaW50IGFkZHIsIGludCAqZXJyX3JldCk7CiAKK2V4dGVybiBtbWNfcG1fZmxhZ190IHNkaW9fZ2V0X2hvc3RfcG1fY2FwcyhzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKTsKK2V4dGVybiBpbnQgc2Rpb19zZXRfaG9zdF9wbV9mbGFncyhzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLCBtbWNfcG1fZmxhZ190IGZsYWdzKTsKKwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IGEwMWExMDMuLmJjMjA5ZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtMzA2LDYgKzMwNiw3IEBACiAJICogZnJlZSBhcmVhcyBvZiBkaWZmZXJlbnQgc2l6ZXMKIAkgKi8KIAlzcGlubG9ja190CQlsb2NrOworCWludCAgICAgICAgICAgICAgICAgICAgIGFsbF91bnJlY2xhaW1hYmxlOyAvKiBBbGwgcGFnZXMgcGlubmVkICovCiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCiAJLyogc2VlIHNwYW5uZWQvcHJlc2VudF9wYWdlcyBmb3IgbW9yZSBkZXNjcmlwdGlvbiAqLwogCXNlcWxvY2tfdAkJc3Bhbl9zZXFsb2NrOwpAQCAtNDE3LDcgKzQxOCw2IEBACiB9IF9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXA7CiAKIHR5cGVkZWYgZW51bSB7Ci0JWk9ORV9BTExfVU5SRUNMQUlNQUJMRSwJCS8qIGFsbCBwYWdlcyBwaW5uZWQgKi8KIAlaT05FX1JFQ0xBSU1fTE9DS0VELAkJLyogcHJldmVudHMgY29uY3VycmVudCByZWNsYWltICovCiAJWk9ORV9PT01fTE9DS0VELAkJLyogem9uZSBpcyBpbiBPT00ga2lsbGVyIHpvbmVsaXN0ICovCiB9IHpvbmVfZmxhZ3NfdDsKQEAgLTQzNywxMSArNDM3LDYgQEAKIAljbGVhcl9iaXQoZmxhZywgJnpvbmUtPmZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgem9uZV9pc19hbGxfdW5yZWNsYWltYWJsZShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSkKLXsKLQlyZXR1cm4gdGVzdF9iaXQoWk9ORV9BTExfVU5SRUNMQUlNQUJMRSwgJnpvbmUtPmZsYWdzKTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgem9uZV9pc19yZWNsYWltX2xvY2tlZChjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSkKIHsKIAlyZXR1cm4gdGVzdF9iaXQoWk9ORV9SRUNMQUlNX0xPQ0tFRCwgJnpvbmUtPmZsYWdzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbm9kZW1hc2suaCBiL2luY2x1ZGUvbGludXgvbm9kZW1hc2suaAppbmRleCA0NTQ5OTdjLi5jNGZhNjRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9ub2RlbWFzay5oCkBAIC02OSw4ICs2OSw2IEBACiAgKiBpbnQgbm9kZV9vbmxpbmUobm9kZSkJCUlzIHNvbWUgbm9kZSBvbmxpbmU/CiAgKiBpbnQgbm9kZV9wb3NzaWJsZShub2RlKQkJSXMgc29tZSBub2RlIHBvc3NpYmxlPwogICoKLSAqIGludCBhbnlfb25saW5lX25vZGUobWFzaykJCUZpcnN0IG9ubGluZSBub2RlIGluIG1hc2sKLSAqCiAgKiBub2RlX3NldF9vbmxpbmUobm9kZSkJCXNldCBiaXQgJ25vZGUnIGluIG5vZGVfb25saW5lX21hcAogICogbm9kZV9zZXRfb2ZmbGluZShub2RlKQkJY2xlYXIgYml0ICdub2RlJyBpbiBub2RlX29ubGluZV9tYXAKICAqCkBAIC00NjcsMTUgKzQ2NSw2IEBACiAjZGVmaW5lIG5vZGVfb25saW5lX21hcCAJbm9kZV9zdGF0ZXNbTl9PTkxJTkVdCiAjZGVmaW5lIG5vZGVfcG9zc2libGVfbWFwIAlub2RlX3N0YXRlc1tOX1BPU1NJQkxFXQogCi0jZGVmaW5lIGFueV9vbmxpbmVfbm9kZShtYXNrKQkJCVwKLSh7CQkJCQkJXAotCWludCBub2RlOwkJCQlcCi0JZm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIChtYXNrKSkJXAotCQlpZiAobm9kZV9vbmxpbmUobm9kZSkpCQlcCi0JCQlicmVhazsJCQlcCi0Jbm9kZTsJCQkJCVwKLX0pCi0KICNkZWZpbmUgbnVtX29ubGluZV9ub2RlcygpCW51bV9ub2RlX3N0YXRlKE5fT05MSU5FKQogI2RlZmluZSBudW1fcG9zc2libGVfbm9kZXMoKQludW1fbm9kZV9zdGF0ZShOX1BPU1NJQkxFKQogI2RlZmluZSBub2RlX29ubGluZShub2RlKQlub2RlX3N0YXRlKChub2RlKSwgTl9PTkxJTkUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaAppbmRleCBlYzk1ZWJlLi5jZDU4MDlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTY3OCw2ICs2NzgsOCBAQAogaW50IHBjaV9maW5kX2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGNhcCk7CiBpbnQgcGNpX2ZpbmRfbmV4dF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHBvcywgaW50IGNhcCk7CiBpbnQgcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGNhcCk7CitpbnQgcGNpX2J1c19maW5kX2V4dF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCQlpbnQgY2FwKTsKIGludCBwY2lfZmluZF9odF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBodF9jYXApOwogaW50IHBjaV9maW5kX25leHRfaHRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcG9zLCBpbnQgaHRfY2FwKTsKIHN0cnVjdCBwY2lfYnVzICpwY2lfZmluZF9uZXh0X2J1cyhjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqZnJvbSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9yZWdzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9yZWdzLmgKaW5kZXggOWYyYWQwYS4uYzhmMzAyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfcmVncy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX3JlZ3MuaApAQCAtNTA3LDYgKzUwNyw3IEBACiAjZGVmaW5lIFBDSV9FWFRfQ0FQX0lEX1ZDCTIKICNkZWZpbmUgUENJX0VYVF9DQVBfSURfRFNOCTMKICNkZWZpbmUgUENJX0VYVF9DQVBfSURfUFdSCTQKKyNkZWZpbmUgUENJX0VYVF9DQVBfSURfVk5EUgkxMQogI2RlZmluZSBQQ0lfRVhUX0NBUF9JRF9BQ1MJMTMKICNkZWZpbmUgUENJX0VYVF9DQVBfSURfQVJJCTE0CiAjZGVmaW5lIFBDSV9FWFRfQ0FQX0lEX0FUUwkxNQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbS5oIGIvaW5jbHVkZS9saW51eC9wbS5oCmluZGV4IGU4MGRmMDYuLjhlMjU4YzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3BtLmgKQEAgLTIxNSwyMCArMjE1LDU5IEBACiAJaW50ICgqcnVudGltZV9pZGxlKShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogfTsKIAorI2lmZGVmIENPTkZJR19QTV9TTEVFUAorI2RlZmluZSBTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyhzdXNwZW5kX2ZuLCByZXN1bWVfZm4pIFwKKwkuc3VzcGVuZCA9IHN1c3BlbmRfZm4sIFwKKwkucmVzdW1lID0gcmVzdW1lX2ZuLCBcCisJLmZyZWV6ZSA9IHN1c3BlbmRfZm4sIFwKKwkudGhhdyA9IHJlc3VtZV9mbiwgXAorCS5wb3dlcm9mZiA9IHN1c3BlbmRfZm4sIFwKKwkucmVzdG9yZSA9IHJlc3VtZV9mbiwKKyNlbHNlCisjZGVmaW5lIFNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKHN1c3BlbmRfZm4sIHJlc3VtZV9mbikKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKyNkZWZpbmUgU0VUX1JVTlRJTUVfUE1fT1BTKHN1c3BlbmRfZm4sIHJlc3VtZV9mbiwgaWRsZV9mbikgXAorCS5ydW50aW1lX3N1c3BlbmQgPSBzdXNwZW5kX2ZuLCBcCisJLnJ1bnRpbWVfcmVzdW1lID0gcmVzdW1lX2ZuLCBcCisJLnJ1bnRpbWVfaWRsZSA9IGlkbGVfZm4sCisjZWxzZQorI2RlZmluZSBTRVRfUlVOVElNRV9QTV9PUFMoc3VzcGVuZF9mbiwgcmVzdW1lX2ZuLCBpZGxlX2ZuKQorI2VuZGlmCisKIC8qCiAgKiBVc2UgdGhpcyBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIHNhbWUgc3VzcGVuZCBhbmQgcmVzdW1lIGNhbGxiYWNrcyBmb3Igc3VzcGVuZAogICogdG8gUkFNIGFuZCBoaWJlcm5hdGlvbi4KICAqLwogI2RlZmluZSBTSU1QTEVfREVWX1BNX09QUyhuYW1lLCBzdXNwZW5kX2ZuLCByZXN1bWVfZm4pIFwKIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG5hbWUgPSB7IFwKLQkuc3VzcGVuZCA9IHN1c3BlbmRfZm4sIFwKLQkucmVzdW1lID0gcmVzdW1lX2ZuLCBcCi0JLmZyZWV6ZSA9IHN1c3BlbmRfZm4sIFwKLQkudGhhdyA9IHJlc3VtZV9mbiwgXAotCS5wb3dlcm9mZiA9IHN1c3BlbmRfZm4sIFwKLQkucmVzdG9yZSA9IHJlc3VtZV9mbiwgXAorCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKHN1c3BlbmRfZm4sIHJlc3VtZV9mbikgXAogfQogCisvKgorICogVXNlIHRoaXMgZm9yIGRlZmluaW5nIGEgc2V0IG9mIFBNIG9wZXJhdGlvbnMgdG8gYmUgdXNlZCBpbiBhbGwgc2l0dWF0aW9ucworICogKHN1c3RlbSBzdXNwZW5kLCBoaWJlcm5hdGlvbiBvciBydW50aW1lIFBNKS4KKyAqLworI2RlZmluZSBVTklWRVJTQUxfREVWX1BNX09QUyhuYW1lLCBzdXNwZW5kX2ZuLCByZXN1bWVfZm4sIGlkbGVfZm4pIFwKK2NvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG5hbWUgPSB7IFwKKwlTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyhzdXNwZW5kX2ZuLCByZXN1bWVfZm4pIFwKKwlTRVRfUlVOVElNRV9QTV9PUFMoc3VzcGVuZF9mbiwgcmVzdW1lX2ZuLCBpZGxlX2ZuKSBcCit9CisKKy8qCisgKiBVc2UgdGhpcyBmb3Igc3Vic3lzdGVtcyAoYnVzIHR5cGVzLCBkZXZpY2UgdHlwZXMsIGRldmljZSBjbGFzc2VzKSB0aGF0IGRvbid0CisgKiBuZWVkIGFueSBzcGVjaWFsIHN1c3BlbmQvcmVzdW1lIGhhbmRsaW5nIGluIGFkZGl0aW9uIHRvIGludm9raW5nIHRoZSBQTQorICogY2FsbGJhY2tzIHByb3ZpZGVkIGJ5IGRldmljZSBkcml2ZXJzIHN1cHBvcnRpbmcgYm90aCB0aGUgc3lzdGVtIHNsZWVwIFBNIGFuZAorICogcnVudGltZSBQTSwgbWFrZSB0aGUgcG0gbWVtYmVyIHBvaW50IHRvIGdlbmVyaWNfc3Vic3lzX3BtX29wcy4KKyAqLworI2lmZGVmIENPTkZJR19QTV9PUFMKK2V4dGVybiBzdHJ1Y3QgZGV2X3BtX29wcyBnZW5lcmljX3N1YnN5c19wbV9vcHM7CisjZGVmaW5lIEdFTkVSSUNfU1VCU1lTX1BNX09QUwkoJmdlbmVyaWNfc3Vic3lzX3BtX29wcykKKyNlbHNlCisjZGVmaW5lIEdFTkVSSUNfU1VCU1lTX1BNX09QUwlOVUxMCisjZW5kaWYKKwogLyoqCiAgKiBQTV9FVkVOVF8gbWVzc2FnZXMKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtX3J1bnRpbWUuaCBiL2luY2x1ZGUvbGludXgvcG1fcnVudGltZS5oCmluZGV4IDdkNzczYWEuLmI3NzZkYjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG1fcnVudGltZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG1fcnVudGltZS5oCkBAIC02Miw2ICs2MiwxMSBAQAogCWRldi0+cG93ZXIucnVuX3dha2UgPSBlbmFibGU7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBwbV9ydW50aW1lX3N1c3BlbmRlZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRldi0+cG93ZXIucnVudGltZV9zdGF0dXMgPT0gUlBNX1NVU1BFTkRFRDsKK30KKwogI2Vsc2UgLyogIUNPTkZJR19QTV9SVU5USU1FICovCiAKIHN0YXRpYyBpbmxpbmUgaW50IHBtX3J1bnRpbWVfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIC1FTk9TWVM7IH0KQEAgLTg5LDYgKzk0LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwbV9ydW50aW1lX3B1dF9ub2lkbGUoc3RydWN0IGRldmljZSAqZGV2KSB7fQogc3RhdGljIGlubGluZSBib29sIGRldmljZV9ydW5fd2FrZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIGZhbHNlOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3NldF9ydW5fd2FrZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgZW5hYmxlKSB7fQorc3RhdGljIGlubGluZSBib29sIHBtX3J1bnRpbWVfc3VzcGVuZGVkKHN0cnVjdCBkZXZpY2UgKmRldikgeyByZXR1cm4gZmFsc2U7IH0KIAogI2VuZGlmIC8qICFDT05GSUdfUE1fUlVOVElNRSAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JtYXAuaCBiL2luY2x1ZGUvbGludXgvcm1hcC5oCmluZGV4IGIwMTlhZTYuLmQyNWJkMjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcm1hcC5oCisrKyBiL2luY2x1ZGUvbGludXgvcm1hcC5oCkBAIC0zNyw3ICszNywyNyBAQAogCSAqIGlzIHNlcmlhbGl6ZWQgYnkgYSBzeXN0ZW0gd2lkZSBsb2NrIG9ubHkgdmlzaWJsZSB0bwogCSAqIG1tX3Rha2VfYWxsX2xvY2tzKCkgKG1tX2FsbF9sb2Nrc19tdXRleCkuCiAJICovCi0Jc3RydWN0IGxpc3RfaGVhZCBoZWFkOwkvKiBMaXN0IG9mIHByaXZhdGUgInJlbGF0ZWQiIHZtYXMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CS8qIENoYWluIG9mIHByaXZhdGUgInJlbGF0ZWQiIHZtYXMgKi8KK307CisKKy8qCisgKiBUaGUgY29weS1vbi13cml0ZSBzZW1hbnRpY3Mgb2YgZm9yayBtZWFuIHRoYXQgYW4gYW5vbl92bWEKKyAqIGNhbiBiZWNvbWUgYXNzb2NpYXRlZCB3aXRoIG11bHRpcGxlIHByb2Nlc3Nlcy4gRnVydGhlcm1vcmUsCisgKiBlYWNoIGNoaWxkIHByb2Nlc3Mgd2lsbCBoYXZlIGl0cyBvd24gYW5vbl92bWEsIHdoZXJlIG5ldworICogcGFnZXMgZm9yIHRoYXQgcHJvY2VzcyBhcmUgaW5zdGFudGlhdGVkLgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGFsbG93cyB1cyB0byBmaW5kIHRoZSBhbm9uX3ZtYXMgYXNzb2NpYXRlZAorICogd2l0aCBhIFZNQSwgb3IgdGhlIFZNQXMgYXNzb2NpYXRlZCB3aXRoIGFuIGFub25fdm1hLgorICogVGhlICJzYW1lX3ZtYSIgbGlzdCBjb250YWlucyB0aGUgYW5vbl92bWFfY2hhaW5zIGxpbmtpbmcKKyAqIGFsbCB0aGUgYW5vbl92bWFzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFZNQS4KKyAqIFRoZSAic2FtZV9hbm9uX3ZtYSIgbGlzdCBjb250YWlucyB0aGUgYW5vbl92bWFfY2hhaW5zCisgKiB3aGljaCBsaW5rIGFsbCB0aGUgVk1BcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBhbm9uX3ZtYS4KKyAqLworc3RydWN0IGFub25fdm1hX2NoYWluIHsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hOworCXN0cnVjdCBsaXN0X2hlYWQgc2FtZV92bWE7ICAgLyogbG9ja2VkIGJ5IG1tYXBfc2VtICYgcGFnZV90YWJsZV9sb2NrICovCisJc3RydWN0IGxpc3RfaGVhZCBzYW1lX2Fub25fdm1hOwkvKiBsb2NrZWQgYnkgYW5vbl92bWEtPmxvY2sgKi8KIH07CiAKICNpZmRlZiBDT05GSUdfTU1VCkBAIC04OSwxNSArMTA5LDIzIEBACiAgKi8KIHZvaWQgYW5vbl92bWFfaW5pdCh2b2lkKTsJLyogY3JlYXRlIGFub25fdm1hX2NhY2hlcCAqLwogaW50ICBhbm9uX3ZtYV9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKLXZvaWQgX19hbm9uX3ZtYV9tZXJnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwotdm9pZCBhbm9uX3ZtYV91bmxpbmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwotdm9pZCBhbm9uX3ZtYV9saW5rKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKK3ZvaWQgdW5saW5rX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CitpbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKK2ludCBhbm9uX3ZtYV9mb3JrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiB2b2lkIF9fYW5vbl92bWFfbGluayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiB2b2lkIGFub25fdm1hX2ZyZWUoc3RydWN0IGFub25fdm1hICopOwogCitzdGF0aWMgaW5saW5lIHZvaWQgYW5vbl92bWFfbWVyZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQpCit7CisJVk1fQlVHX09OKHZtYS0+YW5vbl92bWEgIT0gbmV4dC0+YW5vbl92bWEpOworCXVubGlua19hbm9uX3ZtYXMobmV4dCk7Cit9CisKIC8qCiAgKiBybWFwIGludGVyZmFjZXMgY2FsbGVkIHdoZW4gYWRkaW5nIG9yIHJlbW92aW5nIHB0ZSBvZiBwYWdlCiAgKi8KK3ZvaWQgcGFnZV9tb3ZlX2Fub25fcm1hcChzdHJ1Y3QgcGFnZSAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyk7CiB2b2lkIHBhZ2VfYWRkX2Fub25fcm1hcChzdHJ1Y3QgcGFnZSAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyk7CiB2b2lkIHBhZ2VfYWRkX25ld19hbm9uX3JtYXAoc3RydWN0IHBhZ2UgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcpOwogdm9pZCBwYWdlX2FkZF9maWxlX3JtYXAoc3RydWN0IHBhZ2UgKik7CkBAIC0xODEsNyArMjA5LDcgQEAKIAkJCQkgIHVuc2lnbmVkIGxvbmcgKnZtX2ZsYWdzKQogewogCSp2bV9mbGFncyA9IDA7Ci0JcmV0dXJuIFRlc3RDbGVhclBhZ2VSZWZlcmVuY2VkKHBhZ2UpOworCXJldHVybiAwOwogfQogCiAjZGVmaW5lIHRyeV90b191bm1hcChwYWdlLCByZWZzKSBTV0FQX0ZBSUwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCA0YjE3NTNmLi40NmM2ZjhkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC0zOTYsNjAgKzM5Niw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9waWNrX21tYXBfbGF5b3V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7fQogI2VuZGlmCiAKLSNpZiBVU0VfU1BMSVRfUFRMT0NLUwotLyoKLSAqIFRoZSBtbSBjb3VudGVycyBhcmUgbm90IHByb3RlY3RlZCBieSBpdHMgcGFnZV90YWJsZV9sb2NrLAotICogc28gbXVzdCBiZSBpbmNyZW1lbnRlZCBhdG9taWNhbGx5LgotICovCi0jZGVmaW5lIHNldF9tbV9jb3VudGVyKG1tLCBtZW1iZXIsIHZhbHVlKSBhdG9taWNfbG9uZ19zZXQoJihtbSktPl8jI21lbWJlciwgdmFsdWUpCi0jZGVmaW5lIGdldF9tbV9jb3VudGVyKG1tLCBtZW1iZXIpICgodW5zaWduZWQgbG9uZylhdG9taWNfbG9uZ19yZWFkKCYobW0pLT5fIyNtZW1iZXIpKQotI2RlZmluZSBhZGRfbW1fY291bnRlcihtbSwgbWVtYmVyLCB2YWx1ZSkgYXRvbWljX2xvbmdfYWRkKHZhbHVlLCAmKG1tKS0+XyMjbWVtYmVyKQotI2RlZmluZSBpbmNfbW1fY291bnRlcihtbSwgbWVtYmVyKSBhdG9taWNfbG9uZ19pbmMoJihtbSktPl8jI21lbWJlcikKLSNkZWZpbmUgZGVjX21tX2NvdW50ZXIobW0sIG1lbWJlcikgYXRvbWljX2xvbmdfZGVjKCYobW0pLT5fIyNtZW1iZXIpCi0KLSNlbHNlICAvKiAhVVNFX1NQTElUX1BUTE9DS1MgKi8KLS8qCi0gKiBUaGUgbW0gY291bnRlcnMgYXJlIHByb3RlY3RlZCBieSBpdHMgcGFnZV90YWJsZV9sb2NrLAotICogc28gY2FuIGJlIGluY3JlbWVudGVkIGRpcmVjdGx5LgotICovCi0jZGVmaW5lIHNldF9tbV9jb3VudGVyKG1tLCBtZW1iZXIsIHZhbHVlKSAobW0pLT5fIyNtZW1iZXIgPSAodmFsdWUpCi0jZGVmaW5lIGdldF9tbV9jb3VudGVyKG1tLCBtZW1iZXIpICgobW0pLT5fIyNtZW1iZXIpCi0jZGVmaW5lIGFkZF9tbV9jb3VudGVyKG1tLCBtZW1iZXIsIHZhbHVlKSAobW0pLT5fIyNtZW1iZXIgKz0gKHZhbHVlKQotI2RlZmluZSBpbmNfbW1fY291bnRlcihtbSwgbWVtYmVyKSAobW0pLT5fIyNtZW1iZXIrKwotI2RlZmluZSBkZWNfbW1fY291bnRlcihtbSwgbWVtYmVyKSAobW0pLT5fIyNtZW1iZXItLQotCi0jZW5kaWYgLyogIVVTRV9TUExJVF9QVExPQ0tTICovCi0KLSNkZWZpbmUgZ2V0X21tX3JzcyhtbSkJCQkJCVwKLQkoZ2V0X21tX2NvdW50ZXIobW0sIGZpbGVfcnNzKSArIGdldF9tbV9jb3VudGVyKG1tLCBhbm9uX3JzcykpCi0jZGVmaW5lIHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSkJZG8gewkJCVwKLQl1bnNpZ25lZCBsb25nIF9yc3MgPSBnZXRfbW1fcnNzKG1tKTsJCVwKLQlpZiAoKG1tKS0+aGl3YXRlcl9yc3MgPCBfcnNzKQkJCVwKLQkJKG1tKS0+aGl3YXRlcl9yc3MgPSBfcnNzOwkJXAotfSB3aGlsZSAoMCkKLSNkZWZpbmUgdXBkYXRlX2hpd2F0ZXJfdm0obW0pCWRvIHsJCQlcCi0JaWYgKChtbSktPmhpd2F0ZXJfdm0gPCAobW0pLT50b3RhbF92bSkJCVwKLQkJKG1tKS0+aGl3YXRlcl92bSA9IChtbSktPnRvdGFsX3ZtOwlcCi19IHdoaWxlICgwKQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X21tX2hpd2F0ZXJfcnNzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCXJldHVybiBtYXgobW0tPmhpd2F0ZXJfcnNzLCBnZXRfbW1fcnNzKG1tKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRtYXhfbW1faGl3YXRlcl9yc3ModW5zaWduZWQgbG9uZyAqbWF4cnNzLAotCQkJCQkgc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0JdW5zaWduZWQgbG9uZyBoaXdhdGVyX3JzcyA9IGdldF9tbV9oaXdhdGVyX3JzcyhtbSk7Ci0KLQlpZiAoKm1heHJzcyA8IGhpd2F0ZXJfcnNzKQotCQkqbWF4cnNzID0gaGl3YXRlcl9yc3M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfbW1faGl3YXRlcl92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlyZXR1cm4gbWF4KG1tLT5oaXdhdGVyX3ZtLCBtbS0+dG90YWxfdm0pOwotfQogCiBleHRlcm4gdm9pZCBzZXRfZHVtcGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCB2YWx1ZSk7CiBleHRlcm4gaW50IGdldF9kdW1wYWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CkBAIC0xMjc0LDcgKzEyMjAsOSBAQAogCXN0cnVjdCBwbGlzdF9ub2RlIHB1c2hhYmxlX3Rhc2tzOwogCiAJc3RydWN0IG1tX3N0cnVjdCAqbW0sICphY3RpdmVfbW07Ci0KKyNpZiBkZWZpbmVkKFNQTElUX1JTU19DT1VOVElORykKKwlzdHJ1Y3QgdGFza19yc3Nfc3RhdAlyc3Nfc3RhdDsKKyNlbmRpZgogLyogdGFzayBzdGF0ZSAqLwogCWludCBleGl0X3N0YXRlOwogCWludCBleGl0X2NvZGUsIGV4aXRfc2lnbmFsOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpYWxfc2NpLmggYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9zY2kuaAppbmRleCAxYzI5N2RkLi4xYjE3N2QyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXJpYWxfc2NpLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfc2NpLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9fTElOVVhfU0VSSUFMX1NDSV9ICiAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGFzbS9kbWFlbmdpbmUuaD4KIAogLyoKICAqIEdlbmVyaWMgaGVhZGVyIGZvciBTdXBlckggU0NJKEYpICh1c2VkIGJ5IHNoL3NoNjQvaDgzMDAgYW5kIHJlbGF0ZWQgcGFydHMpCkBAIC0xNiw2ICsxNyw4IEBACiAJU0NJeF9OUl9JUlFTLAogfTsKIAorc3RydWN0IGRldmljZTsKKwogLyoKICAqIFBsYXRmb3JtIGRldmljZSBzcGVjaWZpYyBwbGF0Zm9ybV9kYXRhIHN0cnVjdAogICovCkBAIC0yNiw2ICsyOSw5IEBACiAJdW5zaWduZWQgaW50CXR5cGU7CQkJLyogU0NJIC8gU0NJRiAvIElSREEgKi8KIAl1cGZfdAkJZmxhZ3M7CQkJLyogVVBGXyogZmxhZ3MgKi8KIAljaGFyCQkqY2xrOwkJCS8qIGNsb2NrIHN0cmluZyAqLworCXN0cnVjdCBkZXZpY2UJKmRtYV9kZXY7CisJZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQgZG1hX3NsYXZlX3R4OworCWVudW0gc2hfZG1hZV9zbGF2ZV9jaGFuX2lkIGRtYV9zbGF2ZV9yeDsKIH07CiAKICNlbmRpZiAvKiBfX0xJTlVYX1NFUklBTF9TQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbXAuaCBiL2luY2x1ZGUvbGludXgvc21wLmgKaW5kZXggN2EwNTcwZS4uY2ZhMmQyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NtcC5oCkBAIC0xNTQsNyArMTU0LDcgQEAKIC8qCiAgKiBzbXBfcHJvY2Vzc29yX2lkKCk6IGdldCB0aGUgY3VycmVudCBDUFUgSUQuCiAgKgotICogaWYgREVCVUdfUFJFRU1QVCBpcyBlbmFibGVkIHRoZSB3ZSBjaGVjayB3aGV0aGVyIGl0IGlzCisgKiBpZiBERUJVR19QUkVFTVBUIGlzIGVuYWJsZWQgdGhlbiB3ZSBjaGVjayB3aGV0aGVyIGl0IGlzCiAgKiB1c2VkIGluIGEgcHJlZW1wdGlvbi1zYWZlIHdheS4gKHNtcF9wcm9jZXNzb3JfaWQoKSBpcyBzYWZlCiAgKiBpZiBpdCdzIHVzZWQgaW4gYSBwcmVlbXB0aW9uLW9mZiBjcml0aWNhbCBzZWN0aW9uLCBvciBpbgogICogYSB0aHJlYWQgdGhhdCBpcyBib3VuZCB0byB0aGUgY3VycmVudCBDUFUuKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvbWF4NzMwMS5oIGIvaW5jbHVkZS9saW51eC9zcGkvbWF4NzMwMS5oCmluZGV4IDZkZmQ4M2YuLjM0YWYwYTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpL21heDczMDEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9tYXg3MzAxLmgKQEAgLTEsOSArMSwyNyBAQAogI2lmbmRlZiBMSU5VWF9TUElfTUFYNzMwMV9ICiAjZGVmaW5lIExJTlVYX1NQSV9NQVg3MzAxX0gKIAorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworLyoKKyAqIFNvbWUgcmVnaXN0ZXJzIG11c3QgYmUgcmVhZCBiYWNrIHRvIG1vZGlmeS4KKyAqIFRvIHNhdmUgdGltZSB3ZSBjYWNoZSB0aGVtIGhlcmUgaW4gbWVtb3J5CisgKi8KK3N0cnVjdCBtYXg3MzAxIHsKKwlzdHJ1Y3QgbXV0ZXgJbG9jazsKKwl1OAkJcG9ydF9jb25maWdbOF07CS8qIGZpZWxkIDAgaXMgdW51c2VkICovCisJdTMyCQlvdXRfbGV2ZWw7CS8qIGNhY2hlZCBvdXRwdXQgbGV2ZWxzICovCisJc3RydWN0IGdwaW9fY2hpcCBjaGlwOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlpbnQgKCp3cml0ZSkoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsKTsKKwlpbnQgKCpyZWFkKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpOworfTsKKwogc3RydWN0IG1heDczMDFfcGxhdGZvcm1fZGF0YSB7CiAJLyogbnVtYmVyIGFzc2lnbmVkIHRvIHRoZSBmaXJzdCBHUElPICovCiAJdW5zaWduZWQJYmFzZTsKIH07CiAKK2V4dGVybiBpbnQgX19tYXg3MzB4X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBfX21heDczMHhfcHJvYmUoc3RydWN0IG1heDczMDEgKnRzKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvYXVkaW8uaCBiL2luY2x1ZGUvbGludXgvdXNiL2F1ZGlvLmgKaW5kZXggNmJiMjkzNi4uNGQzZTQ1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvYXVkaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9hdWRpby5oCkBAIC0yNjksOCArMjY5LDggQEAKIAlfX3U4IGJMZW5ndGg7CiAJX191OCBiRGVzY3JpcHRvclR5cGU7CiAJX191OCBiRGVzY3JpcHRvclN1YnR5cGU7Ci0JX191OCBiU3Vic2xvdFNpemU7CiAJX191OCBiRm9ybWF0VHlwZTsKKwlfX3U4IGJTdWJzbG90U2l6ZTsKIAlfX3U4IGJCaXRSZXNvbHV0aW9uOwogCV9fdTggYkhlYWRlckxlbmd0aDsKIAlfX3U4IGJDb250cm9sU2l6ZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYXNvdW5kLmggYi9pbmNsdWRlL3NvdW5kL2Fzb3VuZC5oCmluZGV4IDFmNTdiYjkuLjA5ODU5NTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvYXNvdW5kLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9hc291bmQuaApAQCAtNTQ0LDcgKzU0NCw3IEBACiAgKiAgVGltZXIgc2VjdGlvbiAtIC9kZXYvc25kL3RpbWVyCiAgKi8KIAotI2RlZmluZSBTTkRSVl9USU1FUl9WRVJTSU9OCQlTTkRSVl9QUk9UT0NPTF9WRVJTSU9OKDIsIDAsIDUpCisjZGVmaW5lIFNORFJWX1RJTUVSX1ZFUlNJT04JCVNORFJWX1BST1RPQ09MX1ZFUlNJT04oMiwgMCwgNikKIAogZW51bSB7CiAJU05EUlZfVElNRVJfQ0xBU1NfTk9ORSA9IC0xLApkaWZmIC0tZ2l0IGEvaW5pdC9pbml0cmFtZnMuYyBiL2luaXQvaW5pdHJhbWZzLmMKaW5kZXggYjM3ZDM0Yi4uMzdkMzg1OSAxMDA2NDQKLS0tIGEvaW5pdC9pbml0cmFtZnMuYworKysgYi9pbml0L2luaXRyYW1mcy5jCkBAIC01MjUsNyArNTI1LDcgQEAKIAlpbnQgZmQ7CiAJdm9pZCAqYnVmOwogCXN0cnVjdCBsaW51eF9kaXJlbnQ2NCAqZGlycDsKLQlpbnQgY291bnQ7CisJaW50IG51bTsKIAogCWZkID0gc3lzX29wZW4oIi8iLCBPX1JET05MWSwgMCk7CiAJV0FSTl9PTihmZCA8IDApOwpAQCAtNTM5LDkgKzUzOSw5IEBACiAJfQogCiAJZGlycCA9IGJ1ZjsKLQljb3VudCA9IHN5c19nZXRkZW50czY0KGZkLCBkaXJwLCBCVUZfU0laRSk7Ci0Jd2hpbGUgKGNvdW50ID4gMCkgewotCQl3aGlsZSAoY291bnQgPiAwKSB7CisJbnVtID0gc3lzX2dldGRlbnRzNjQoZmQsIGRpcnAsIEJVRl9TSVpFKTsKKwl3aGlsZSAobnVtID4gMCkgeworCQl3aGlsZSAobnVtID4gMCkgewogCQkJc3RydWN0IHN0YXQgc3Q7CiAJCQlpbnQgcmV0OwogCkBAIC01NTQsMTIgKzU1NCwxMiBAQAogCQkJCQlzeXNfdW5saW5rKGRpcnAtPmRfbmFtZSk7CiAJCQl9CiAKLQkJCWNvdW50IC09IGRpcnAtPmRfcmVjbGVuOworCQkJbnVtIC09IGRpcnAtPmRfcmVjbGVuOwogCQkJZGlycCA9ICh2b2lkICopZGlycCArIGRpcnAtPmRfcmVjbGVuOwogCQl9CiAJCWRpcnAgPSBidWY7CiAJCW1lbXNldChidWYsIDAsIEJVRl9TSVpFKTsKLQkJY291bnQgPSBzeXNfZ2V0ZGVudHM2NChmZCwgZGlycCwgQlVGX1NJWkUpOworCQludW0gPSBzeXNfZ2V0ZGVudHM2NChmZCwgZGlycCwgQlVGX1NJWkUpOwogCX0KIAogCXN5c19jbG9zZShmZCk7CmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jCmluZGV4IDQwYWFhMDIuLmExYWI3OGMgMTAwNjQ0Ci0tLSBhL2luaXQvbWFpbi5jCisrKyBiL2luaXQvbWFpbi5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIAogZWFybHlfcGFyYW0oIm1heGNwdXMiLCBtYXhjcHVzKTsKICNlbHNlCi1jb25zdCB1bnNpZ25lZCBpbnQgc2V0dXBfbWF4X2NwdXMgPSBOUl9DUFVTOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZXR1cF9tYXhfY3B1cyA9IE5SX0NQVVM7CiAjZW5kaWYKIAogLyoKQEAgLTYxOCw3ICs2MTgsNyBAQAogCWxvY2FsX2lycV9lbmFibGUoKTsKIAogCS8qIEludGVycnVwdHMgYXJlIGVuYWJsZWQgbm93IHNvIGFsbCBHRlAgYWxsb2NhdGlvbnMgYXJlIHNhZmUuICovCi0Jc2V0X2dmcF9hbGxvd2VkX21hc2soX19HRlBfQklUU19NQVNLKTsKKwlnZnBfYWxsb3dlZF9tYXNrID0gX19HRlBfQklUU19NQVNLOwogCiAJa21lbV9jYWNoZV9pbml0X2xhdGUoKTsKIApAQCAtODQ3LDcgKzg0Nyw4IEBACiAJcnVuX2luaXRfcHJvY2VzcygiL2Jpbi9pbml0Iik7CiAJcnVuX2luaXRfcHJvY2VzcygiL2Jpbi9zaCIpOwogCi0JcGFuaWMoIk5vIGluaXQgZm91bmQuICBUcnkgcGFzc2luZyBpbml0PSBvcHRpb24gdG8ga2VybmVsLiIpOworCXBhbmljKCJObyBpbml0IGZvdW5kLiAgVHJ5IHBhc3NpbmcgaW5pdD0gb3B0aW9uIHRvIGtlcm5lbC4gIgorCSAgICAgICJTZWUgTGludXggRG9jdW1lbnRhdGlvbi9pbml0LnR4dCBmb3IgZ3VpZGFuY2UuIik7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGtlcm5lbF9pbml0KHZvaWQgKiB1bnVzZWQpCmRpZmYgLS1naXQgYS9rZXJuZWwvTWFrZWZpbGUgYi9rZXJuZWwvTWFrZWZpbGUKaW5kZXggN2I5NzQ2OS4uYTk4N2FhMSAxMDA2NDQKLS0tIGEva2VybmVsL01ha2VmaWxlCisrKyBiL2tlcm5lbC9NYWtlZmlsZQpAQCAtOTEsNiArOTEsOSBAQAogb2JqLSQoQ09ORklHX1RBU0tTVEFUUykgKz0gdGFza3N0YXRzLm8gdHNhY2N0Lm8KIG9iai0kKENPTkZJR19UUkFDRVBPSU5UUykgKz0gdHJhY2Vwb2ludC5vCiBvYmotJChDT05GSUdfTEFURU5DWVRPUCkgKz0gbGF0ZW5jeXRvcC5vCitvYmotJChDT05GSUdfQklORk1UX0VMRikgKz0gZWxmY29yZS5vCitvYmotJChDT05GSUdfQ09NUEFUX0JJTkZNVF9FTEYpICs9IGVsZmNvcmUubworb2JqLSQoQ09ORklHX0JJTkZNVF9FTEZfRkRQSUMpICs9IGVsZmNvcmUubwogb2JqLSQoQ09ORklHX0ZVTkNUSU9OX1RSQUNFUikgKz0gdHJhY2UvCiBvYmotJChDT05GSUdfVFJBQ0lORykgKz0gdHJhY2UvCiBvYmotJChDT05GSUdfWDg2X0RTKSArPSB0cmFjZS8KZGlmZiAtLWdpdCBhL2tlcm5lbC9jcHUuYyBiL2tlcm5lbC9jcHUuYwppbmRleCA2NzdmMjUzLi5mOGNjZWQyIDEwMDY0NAotLS0gYS9rZXJuZWwvY3B1LmMKKysrIGIva2VybmVsL2NwdS5jCkBAIC0zMzgsNyArMzM4LDcgQEAKIAlpZiAoIWNwdV9wb3NzaWJsZShjcHUpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3Qgb25saW5lIGNwdSAlZCBiZWNhdXNlIGl0IGlzIG5vdCAiCiAJCQkiY29uZmlndXJlZCBhcyBtYXktaG90YWRkIGF0IGJvb3QgdGltZVxuIiwgY3B1KTsKLSNpZiBkZWZpbmVkKENPTkZJR19JQTY0KSB8fCBkZWZpbmVkKENPTkZJR19YODZfNjQpCisjaWYgZGVmaW5lZChDT05GSUdfSUE2NCkKIAkJcHJpbnRrKEtFUk5fRVJSICJwbGVhc2UgY2hlY2sgYWRkaXRpb25hbF9jcHVzPSBib290ICIKIAkJCQkicGFyYW1ldGVyXG4iKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL2VsZmNvcmUuYyBiL2tlcm5lbC9lbGZjb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY5MTVlZgotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9lbGZjb3JlLmMKQEAgLTAsMCArMSwyOCBAQAorI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2luY2x1ZGUgPGFzbS9lbGYuaD4KKworCitFbGZfSGFsZiBfX3dlYWsgZWxmX2NvcmVfZXh0cmFfcGhkcnModm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IF9fd2VhayBlbGZfY29yZV93cml0ZV9leHRyYV9waGRycyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgc2l6ZV90ICpzaXplLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbGltaXQpCit7CisJcmV0dXJuIDE7Cit9CisKK2ludCBfX3dlYWsgZWxmX2NvcmVfd3JpdGVfZXh0cmFfZGF0YShzdHJ1Y3QgZmlsZSAqZmlsZSwgc2l6ZV90ICpzaXplLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBsaW1pdCkKK3sKKwlyZXR1cm4gMTsKK30KKworc2l6ZV90IF9fd2VhayBlbGZfY29yZV9leHRyYV9kYXRhX3NpemUodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IDQ1ZWQwNDMuLmNlMWU0OGMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtOTUyLDcgKzk1Miw4IEBACiAJCQkJcHJlZW1wdF9jb3VudCgpKTsKIAogCWFjY3RfdXBkYXRlX2ludGVncmFscyh0c2spOwotCisJLyogc3luYyBtbSdzIFJTUyBpbmZvIGJlZm9yZSBzdGF0aXN0aWNzIGdhdGhlcmluZyAqLworCXN5bmNfbW1fcnNzKHRzaywgdHNrLT5tbSk7CiAJZ3JvdXBfZGVhZCA9IGF0b21pY19kZWNfYW5kX3Rlc3QoJnRzay0+c2lnbmFsLT5saXZlKTsKIAlpZiAoZ3JvdXBfZGVhZCkgewogCQlocnRpbWVyX2NhbmNlbCgmdHNrLT5zaWduYWwtPnJlYWxfdGltZXIpOwpAQCAtMTE4OCw3ICsxMTg5LDcgQEAKIAogCWlmICh1bmxpa2VseSh3by0+d29fZmxhZ3MgJiBXTk9XQUlUKSkgewogCQlpbnQgZXhpdF9jb2RlID0gcC0+ZXhpdF9jb2RlOwotCQlpbnQgd2h5LCBzdGF0dXM7CisJCWludCB3aHk7CiAKIAkJZ2V0X3Rhc2tfc3RydWN0KHApOwogCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCAxN2JiZjA5Li5iMGVjMzRhIDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCisrKyBiL2tlcm5lbC9mb3JrLmMKQEAgLTMyOSwxNSArMzI5LDE3IEBACiAJCWlmICghdG1wKQogCQkJZ290byBmYWlsX25vbWVtOwogCQkqdG1wID0gKm1wbnQ7CisJCUlOSVRfTElTVF9IRUFEKCZ0bXAtPmFub25fdm1hX2NoYWluKTsKIAkJcG9sID0gbXBvbF9kdXAodm1hX3BvbGljeShtcG50KSk7CiAJCXJldHZhbCA9IFBUUl9FUlIocG9sKTsKIAkJaWYgKElTX0VSUihwb2wpKQogCQkJZ290byBmYWlsX25vbWVtX3BvbGljeTsKIAkJdm1hX3NldF9wb2xpY3kodG1wLCBwb2wpOworCQlpZiAoYW5vbl92bWFfZm9yayh0bXAsIG1wbnQpKQorCQkJZ290byBmYWlsX25vbWVtX2Fub25fdm1hX2Zvcms7CiAJCXRtcC0+dm1fZmxhZ3MgJj0gflZNX0xPQ0tFRDsKIAkJdG1wLT52bV9tbSA9IG1tOwogCQl0bXAtPnZtX25leHQgPSBOVUxMOwotCQlhbm9uX3ZtYV9saW5rKHRtcCk7CiAJCWZpbGUgPSB0bXAtPnZtX2ZpbGU7CiAJCWlmIChmaWxlKSB7CiAJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKQEAgLTM5Miw2ICszOTQsOCBAQAogCWZsdXNoX3RsYl9tbShvbGRtbSk7CiAJdXBfd3JpdGUoJm9sZG1tLT5tbWFwX3NlbSk7CiAJcmV0dXJuIHJldHZhbDsKK2ZhaWxfbm9tZW1fYW5vbl92bWFfZm9yazoKKwltcG9sX3B1dChwb2wpOwogZmFpbF9ub21lbV9wb2xpY3k6CiAJa21lbV9jYWNoZV9mcmVlKHZtX2FyZWFfY2FjaGVwLCB0bXApOwogZmFpbF9ub21lbToKQEAgLTQ1NSw4ICs0NTksNyBAQAogCQkoY3VycmVudC0+bW0tPmZsYWdzICYgTU1GX0lOSVRfTUFTSykgOiBkZWZhdWx0X2R1bXBfZmlsdGVyOwogCW1tLT5jb3JlX3N0YXRlID0gTlVMTDsKIAltbS0+bnJfcHRlcyA9IDA7Ci0Jc2V0X21tX2NvdW50ZXIobW0sIGZpbGVfcnNzLCAwKTsKLQlzZXRfbW1fY291bnRlcihtbSwgYW5vbl9yc3MsIDApOworCW1lbXNldCgmbW0tPnJzc19zdGF0LCAwLCBzaXplb2YobW0tPnJzc19zdGF0KSk7CiAJc3Bpbl9sb2NrX2luaXQoJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCW1tLT5mcmVlX2FyZWFfY2FjaGUgPSBUQVNLX1VOTUFQUEVEX0JBU0U7CiAJbW0tPmNhY2hlZF9ob2xlX3NpemUgPSB+MFVMOwpAQCAtODI1LDYgKzgyOCw4IEBACiAgKi8KIHN0YXRpYyB2b2lkIHBvc2l4X2NwdV90aW1lcnNfaW5pdF9ncm91cChzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnKQogeworCXVuc2lnbmVkIGxvbmcgY3B1X2xpbWl0OworCiAJLyogVGhyZWFkIGdyb3VwIGNvdW50ZXJzLiAqLwogCXRocmVhZF9ncm91cF9jcHV0aW1lX2luaXQoc2lnKTsKIApAQCAtODM5LDkgKzg0NCw5IEBACiAJc2lnLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAgPSBjcHV0aW1lX3plcm87CiAJc2lnLT5jcHV0aW1lX2V4cGlyZXMuc2NoZWRfZXhwID0gMDsKIAotCWlmIChzaWctPnJsaW1bUkxJTUlUX0NQVV0ucmxpbV9jdXIgIT0gUkxJTV9JTkZJTklUWSkgewotCQlzaWctPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCA9Ci0JCQlzZWNzX3RvX2NwdXRpbWUoc2lnLT5ybGltW1JMSU1JVF9DUFVdLnJsaW1fY3VyKTsKKwljcHVfbGltaXQgPSBBQ0NFU1NfT05DRShzaWctPnJsaW1bUkxJTUlUX0NQVV0ucmxpbV9jdXIpOworCWlmIChjcHVfbGltaXQgIT0gUkxJTV9JTkZJTklUWSkgeworCQlzaWctPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCA9IHNlY3NfdG9fY3B1dGltZShjcHVfbGltaXQpOwogCQlzaWctPmNwdXRpbWVyLnJ1bm5pbmcgPSAxOwogCX0KIApAQCAtMTAzNCw3ICsxMDM5LDcgQEAKICNlbmRpZgogCXJldHZhbCA9IC1FQUdBSU47CiAJaWYgKGF0b21pY19yZWFkKCZwLT5yZWFsX2NyZWQtPnVzZXItPnByb2Nlc3NlcykgPj0KLQkJCXAtPnNpZ25hbC0+cmxpbVtSTElNSVRfTlBST0NdLnJsaW1fY3VyKSB7CisJCQl0YXNrX3JsaW1pdChwLCBSTElNSVRfTlBST0MpKSB7CiAJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSAmJiAhY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSAmJgogCQkgICAgcC0+cmVhbF9jcmVkLT51c2VyICE9IElOSVRfVVNFUikKIAkJCWdvdG8gYmFkX2ZvcmtfZnJlZTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wYW5pYy5jIGIva2VybmVsL3BhbmljLmMKaW5kZXggYzc4NzMzMy4uMTNkOTY2YiAxMDA2NDQKLS0tIGEva2VybmVsL3BhbmljLmMKKysrIGIva2VybmVsL3BhbmljLmMKQEAgLTM2LDE1ICszNiwzNiBAQAogCiBFWFBPUlRfU1lNQk9MKHBhbmljX25vdGlmaWVyX2xpc3QpOwogCi1zdGF0aWMgbG9uZyBub19ibGluayhsb25nIHRpbWUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qIFJldHVybnMgaG93IGxvbmcgaXQgd2FpdGVkIGluIG1zICovCiBsb25nICgqcGFuaWNfYmxpbmspKGxvbmcgdGltZSk7CiBFWFBPUlRfU1lNQk9MKHBhbmljX2JsaW5rKTsKIAorc3RhdGljIHZvaWQgcGFuaWNfYmxpbmtfb25lX3NlY29uZCh2b2lkKQoreworCXN0YXRpYyBsb25nIGkgPSAwLCBlbmQ7CisKKwlpZiAocGFuaWNfYmxpbmspIHsKKwkJZW5kID0gaSArIE1TRUNfUEVSX1NFQzsKKworCQl3aGlsZSAoaSA8IGVuZCkgeworCQkJaSArPSBwYW5pY19ibGluayhpKTsKKwkJCW1kZWxheSgxKTsKKwkJCWkrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qCisJCSAqIFdoZW4gcnVubmluZyB1bmRlciBhIGh5cGVydmlzb3IgYSBzbWFsbCBtZGVsYXkgbWF5IGdldAorCQkgKiByb3VuZGVkIHVwIHRvIHRoZSBoeXBlcnZpc29yIHRpbWVzbGljZS4gRm9yIGV4YW1wbGUsIHdpdGgKKwkJICogYSAxbXMgaW4gMTBtcyBoeXBlcnZpc29yIHRpbWVzbGljZSB3ZSBtaWdodCBpbmZsYXRlIGEKKwkJICogbWRlbGF5KDEpIGxvb3AgYnkgMTB4LgorCQkgKgorCQkgKiBJZiB3ZSBoYXZlIG5vdGhpbmcgdG8gYmxpbmssIHNwaW4gb24gMSBzZWNvbmQgY2FsbHMgdG8KKwkJICogbWRlbGF5IHRvIGF2b2lkIHRoaXMuCisJCSAqLworCQltZGVsYXkoTVNFQ19QRVJfU0VDKTsKKwl9Cit9CisKIC8qKgogICoJcGFuaWMgLSBoYWx0IHRoZSBzeXN0ZW0KICAqCUBmbXQ6IFRoZSB0ZXh0IHN0cmluZyB0byBwcmludApAQCAtOTUsOSArMTE2LDYgQEAKIAogCWJ1c3Rfc3BpbmxvY2tzKDApOwogCi0JaWYgKCFwYW5pY19ibGluaykKLQkJcGFuaWNfYmxpbmsgPSBub19ibGluazsKLQogCWlmIChwYW5pY190aW1lb3V0ID4gMCkgewogCQkvKgogCQkgKiBEZWxheSB0aW1lb3V0IHNlY29uZHMgYmVmb3JlIHJlYm9vdGluZyB0aGUgbWFjaGluZS4KQEAgLTEwNSwxMSArMTIzLDkgQEAKIAkJICovCiAJCXByaW50ayhLRVJOX0VNRVJHICJSZWJvb3RpbmcgaW4gJWQgc2Vjb25kcy4uIiwgcGFuaWNfdGltZW91dCk7CiAKLQkJZm9yIChpID0gMDsgaSA8IHBhbmljX3RpbWVvdXQqMTAwMDsgKSB7CisJCWZvciAoaSA9IDA7IGkgPCBwYW5pY190aW1lb3V0OyBpKyspIHsKIAkJCXRvdWNoX25taV93YXRjaGRvZygpOwotCQkJaSArPSBwYW5pY19ibGluayhpKTsKLQkJCW1kZWxheSgxKTsKLQkJCWkrKzsKKwkJCXBhbmljX2JsaW5rX29uZV9zZWNvbmQoKTsKIAkJfQogCQkvKgogCQkgKiBUaGlzIHdpbGwgbm90IGJlIGEgY2xlYW4gcmVib290LCB3aXRoIGV2ZXJ5dGhpbmcKQEAgLTEzNSwxMSArMTUxLDkgQEAKIAl9CiAjZW5kaWYKIAlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JZm9yIChpID0gMDsgOyApIHsKKwl3aGlsZSAoMSkgewogCQl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7Ci0JCWkgKz0gcGFuaWNfYmxpbmsoaSk7Ci0JCW1kZWxheSgxKTsKLQkJaSsrOworCQlwYW5pY19ibGlua19vbmVfc2Vjb25kKCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvcGFyYW1zLmMgYi9rZXJuZWwvcGFyYW1zLmMKaW5kZXggY2YxYjY5MS4uOGQ5NWY1NCAxMDA2NDQKLS0tIGEva2VybmVsL3BhcmFtcy5jCisrKyBiL2tlcm5lbC9wYXJhbXMuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogCiAjaWYgMAogI2RlZmluZSBERUJVR1AgcHJpbnRrCmRpZmYgLS1naXQgYS9rZXJuZWwvcGVyZl9ldmVudC5jIGIva2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCBhNjYxZTc5Li44ZTM1MmM3IDEwMDY0NAotLS0gYS9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTI2MTAsNyArMjYxMCw3IEBACiAJaWYgKHVzZXJfbG9ja2VkID4gdXNlcl9sb2NrX2xpbWl0KQogCQlleHRyYSA9IHVzZXJfbG9ja2VkIC0gdXNlcl9sb2NrX2xpbWl0OwogCi0JbG9ja19saW1pdCA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfTUVNTE9DS10ucmxpbV9jdXI7CisJbG9ja19saW1pdCA9IHJsaW1pdChSTElNSVRfTUVNTE9DSyk7CiAJbG9ja19saW1pdCA+Pj0gUEFHRV9TSElGVDsKIAlsb2NrZWQgPSB2bWEtPnZtX21tLT5sb2NrZWRfdm0gKyBleHRyYTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3BpZC5jIGIva2VybmVsL3BpZC5jCmluZGV4IGIwOGU2OTcuLjg2YjI5NjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9waWQuYworKysgYi9rZXJuZWwvcGlkLmMKQEAgLTM3Niw3ICszNzYsNyBAQAogRVhQT1JUX1NZTUJPTChwaWRfdGFzayk7CiAKIC8qCi0gKiBNdXN0IGJlIGNhbGxlZCB1bmRlciByY3VfcmVhZF9sb2NrKCkgb3Igd2l0aCB0YXNrbGlzdF9sb2NrIHJlYWQtaGVsZC4KKyAqIE11c3QgYmUgY2FsbGVkIHVuZGVyIHJjdV9yZWFkX2xvY2soKS4KICAqLwogc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX3Rhc2tfYnlfcGlkX25zKHBpZF90IG5yLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jIGIva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYwppbmRleCA0MzhmZjQ1Li4xYTIyZGZkIDEwMDY0NAotLS0gYS9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCisrKyBiL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKQEAgLTk4Miw2ICs5ODIsNyBAQAogCWludCBtYXhmaXJlOwogCXN0cnVjdCBsaXN0X2hlYWQgKnRpbWVycyA9IHRzay0+Y3B1X3RpbWVyczsKIAlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqY29uc3Qgc2lnID0gdHNrLT5zaWduYWw7CisJdW5zaWduZWQgbG9uZyBzb2Z0OwogCiAJbWF4ZmlyZSA9IDIwOwogCXRzay0+Y3B1dGltZV9leHBpcmVzLnByb2ZfZXhwID0gY3B1dGltZV96ZXJvOwpAQCAtMTAzMCw5ICsxMDMxLDEwIEBACiAJLyoKIAkgKiBDaGVjayBmb3IgdGhlIHNwZWNpYWwgY2FzZSB0aHJlYWQgdGltZXJzLgogCSAqLwotCWlmIChzaWctPnJsaW1bUkxJTUlUX1JUVElNRV0ucmxpbV9jdXIgIT0gUkxJTV9JTkZJTklUWSkgewotCQl1bnNpZ25lZCBsb25nIGhhcmQgPSBzaWctPnJsaW1bUkxJTUlUX1JUVElNRV0ucmxpbV9tYXg7Ci0JCXVuc2lnbmVkIGxvbmcgKnNvZnQgPSAmc2lnLT5ybGltW1JMSU1JVF9SVFRJTUVdLnJsaW1fY3VyOworCXNvZnQgPSBBQ0NFU1NfT05DRShzaWctPnJsaW1bUkxJTUlUX1JUVElNRV0ucmxpbV9jdXIpOworCWlmIChzb2Z0ICE9IFJMSU1fSU5GSU5JVFkpIHsKKwkJdW5zaWduZWQgbG9uZyBoYXJkID0KKwkJCUFDQ0VTU19PTkNFKHNpZy0+cmxpbVtSTElNSVRfUlRUSU1FXS5ybGltX21heCk7CiAKIAkJaWYgKGhhcmQgIT0gUkxJTV9JTkZJTklUWSAmJgogCQkgICAgdHNrLT5ydC50aW1lb3V0ID4gRElWX1JPVU5EX1VQKGhhcmQsIFVTRUNfUEVSX1NFQy9IWikpIHsKQEAgLTEwNDMsMTQgKzEwNDUsMTMgQEAKIAkJCV9fZ3JvdXBfc2VuZF9zaWdfaW5mbyhTSUdLSUxMLCBTRU5EX1NJR19QUklWLCB0c2spOwogCQkJcmV0dXJuOwogCQl9Ci0JCWlmICh0c2stPnJ0LnRpbWVvdXQgPiBESVZfUk9VTkRfVVAoKnNvZnQsIFVTRUNfUEVSX1NFQy9IWikpIHsKKwkJaWYgKHRzay0+cnQudGltZW91dCA+IERJVl9ST1VORF9VUChzb2Z0LCBVU0VDX1BFUl9TRUMvSFopKSB7CiAJCQkvKgogCQkJICogQXQgdGhlIHNvZnQgbGltaXQsIHNlbmQgYSBTSUdYQ1BVIGV2ZXJ5IHNlY29uZC4KIAkJCSAqLwotCQkJaWYgKHNpZy0+cmxpbVtSTElNSVRfUlRUSU1FXS5ybGltX2N1cgotCQkJICAgIDwgc2lnLT5ybGltW1JMSU1JVF9SVFRJTUVdLnJsaW1fbWF4KSB7Ci0JCQkJc2lnLT5ybGltW1JMSU1JVF9SVFRJTUVdLnJsaW1fY3VyICs9Ci0JCQkJCQkJCVVTRUNfUEVSX1NFQzsKKwkJCWlmIChzb2Z0IDwgaGFyZCkgeworCQkJCXNvZnQgKz0gVVNFQ19QRVJfU0VDOworCQkJCXNpZy0+cmxpbVtSTElNSVRfUlRUSU1FXS5ybGltX2N1ciA9IHNvZnQ7CiAJCQl9CiAJCQlwcmludGsoS0VSTl9JTkZPCiAJCQkJIlJUIFdhdGNoZG9nIFRpbWVvdXQ6ICVzWyVkXVxuIiwKQEAgLTExMjEsNiArMTEyMiw3IEBACiAJdW5zaWduZWQgbG9uZyBsb25nIHN1bV9zY2hlZF9ydW50aW1lLCBzY2hlZF9leHBpcmVzOwogCXN0cnVjdCBsaXN0X2hlYWQgKnRpbWVycyA9IHNpZy0+Y3B1X3RpbWVyczsKIAlzdHJ1Y3QgdGFza19jcHV0aW1lIGNwdXRpbWU7CisJdW5zaWduZWQgbG9uZyBzb2Z0OwogCiAJLyoKIAkgKiBEb24ndCBzYW1wbGUgdGhlIGN1cnJlbnQgcHJvY2VzcyBDUFUgY2xvY2tzIGlmIHRoZXJlIGFyZSBubyB0aW1lcnMuCkBAIC0xMTkzLDExICsxMTk1LDEzIEBACiAJCQkgU0lHUFJPRik7CiAJY2hlY2tfY3B1X2l0aW1lcih0c2ssICZzaWctPml0W0NQVUNMT0NLX1ZJUlRdLCAmdmlydF9leHBpcmVzLCB1dGltZSwKIAkJCSBTSUdWVEFMUk0pOwotCi0JaWYgKHNpZy0+cmxpbVtSTElNSVRfQ1BVXS5ybGltX2N1ciAhPSBSTElNX0lORklOSVRZKSB7CisJc29mdCA9IEFDQ0VTU19PTkNFKHNpZy0+cmxpbVtSTElNSVRfQ1BVXS5ybGltX2N1cik7CisJaWYgKHNvZnQgIT0gUkxJTV9JTkZJTklUWSkgewogCQl1bnNpZ25lZCBsb25nIHBzZWNzID0gY3B1dGltZV90b19zZWNzKHB0aW1lKTsKKwkJdW5zaWduZWQgbG9uZyBoYXJkID0KKwkJCUFDQ0VTU19PTkNFKHNpZy0+cmxpbVtSTElNSVRfQ1BVXS5ybGltX21heCk7CiAJCWNwdXRpbWVfdCB4OwotCQlpZiAocHNlY3MgPj0gc2lnLT5ybGltW1JMSU1JVF9DUFVdLnJsaW1fbWF4KSB7CisJCWlmIChwc2VjcyA+PSBoYXJkKSB7CiAJCQkvKgogCQkJICogQXQgdGhlIGhhcmQgbGltaXQsIHdlIGp1c3QgZGllLgogCQkJICogTm8gbmVlZCB0byBjYWxjdWxhdGUgYW55dGhpbmcgZWxzZSBub3cuCkBAIC0xMjA1LDE3ICsxMjA5LDE3IEBACiAJCQlfX2dyb3VwX3NlbmRfc2lnX2luZm8oU0lHS0lMTCwgU0VORF9TSUdfUFJJViwgdHNrKTsKIAkJCXJldHVybjsKIAkJfQotCQlpZiAocHNlY3MgPj0gc2lnLT5ybGltW1JMSU1JVF9DUFVdLnJsaW1fY3VyKSB7CisJCWlmIChwc2VjcyA+PSBzb2Z0KSB7CiAJCQkvKgogCQkJICogQXQgdGhlIHNvZnQgbGltaXQsIHNlbmQgYSBTSUdYQ1BVIGV2ZXJ5IHNlY29uZC4KIAkJCSAqLwogCQkJX19ncm91cF9zZW5kX3NpZ19pbmZvKFNJR1hDUFUsIFNFTkRfU0lHX1BSSVYsIHRzayk7Ci0JCQlpZiAoc2lnLT5ybGltW1JMSU1JVF9DUFVdLnJsaW1fY3VyCi0JCQkgICAgPCBzaWctPnJsaW1bUkxJTUlUX0NQVV0ucmxpbV9tYXgpIHsKLQkJCQlzaWctPnJsaW1bUkxJTUlUX0NQVV0ucmxpbV9jdXIrKzsKKwkJCWlmIChzb2Z0IDwgaGFyZCkgeworCQkJCXNvZnQrKzsKKwkJCQlzaWctPnJsaW1bUkxJTUlUX0NQVV0ucmxpbV9jdXIgPSBzb2Z0OwogCQkJfQogCQl9Ci0JCXggPSBzZWNzX3RvX2NwdXRpbWUoc2lnLT5ybGltW1JMSU1JVF9DUFVdLnJsaW1fY3VyKTsKKwkJeCA9IHNlY3NfdG9fY3B1dGltZShzb2Z0KTsKIAkJaWYgKGNwdXRpbWVfZXEocHJvZl9leHBpcmVzLCBjcHV0aW1lX3plcm8pIHx8CiAJCSAgICBjcHV0aW1lX2x0KHgsIHByb2ZfZXhwaXJlcykpIHsKIAkJCXByb2ZfZXhwaXJlcyA9IHg7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvaGliZXJuYXRlLmMgYi9rZXJuZWwvcG93ZXIvaGliZXJuYXRlLmMKaW5kZXggYmJmZTQ3Mi4uZGE1Mjg4ZSAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jCisrKyBiL2tlcm5lbC9wb3dlci9oaWJlcm5hdGUuYwpAQCAtMzIzLDYgKzMyMyw3IEBACiBpbnQgaGliZXJuYXRpb25fc25hcHNob3QoaW50IHBsYXRmb3JtX21vZGUpCiB7CiAJaW50IGVycm9yOworCWdmcF90IHNhdmVkX21hc2s7CiAKIAllcnJvciA9IHBsYXRmb3JtX2JlZ2luKHBsYXRmb3JtX21vZGUpOwogCWlmIChlcnJvcikKQEAgLTMzNCw2ICszMzUsNyBAQAogCQlnb3RvIENsb3NlOwogCiAJc3VzcGVuZF9jb25zb2xlKCk7CisJc2F2ZWRfbWFzayA9IGNsZWFyX2dmcF9hbGxvd2VkX21hc2soR0ZQX0lPRlMpOwogCWVycm9yID0gZHBtX3N1c3BlbmRfc3RhcnQoUE1TR19GUkVFWkUpOwogCWlmIChlcnJvcikKIAkJZ290byBSZWNvdmVyX3BsYXRmb3JtOwpAQCAtMzUxLDYgKzM1Myw3IEBACiAKIAlkcG1fcmVzdW1lX2VuZChpbl9zdXNwZW5kID8KIAkJKGVycm9yID8gUE1TR19SRUNPVkVSIDogUE1TR19USEFXKSA6IFBNU0dfUkVTVE9SRSk7CisJc2V0X2dmcF9hbGxvd2VkX21hc2soc2F2ZWRfbWFzayk7CiAJcmVzdW1lX2NvbnNvbGUoKTsKICBDbG9zZToKIAlwbGF0Zm9ybV9lbmQocGxhdGZvcm1fbW9kZSk7CkBAIC00NDUsMTQgKzQ0OCwxNyBAQAogaW50IGhpYmVybmF0aW9uX3Jlc3RvcmUoaW50IHBsYXRmb3JtX21vZGUpCiB7CiAJaW50IGVycm9yOworCWdmcF90IHNhdmVkX21hc2s7CiAKIAlwbV9wcmVwYXJlX2NvbnNvbGUoKTsKIAlzdXNwZW5kX2NvbnNvbGUoKTsKKwlzYXZlZF9tYXNrID0gY2xlYXJfZ2ZwX2FsbG93ZWRfbWFzayhHRlBfSU9GUyk7CiAJZXJyb3IgPSBkcG1fc3VzcGVuZF9zdGFydChQTVNHX1FVSUVTQ0UpOwogCWlmICghZXJyb3IpIHsKIAkJZXJyb3IgPSByZXN1bWVfdGFyZ2V0X2tlcm5lbChwbGF0Zm9ybV9tb2RlKTsKIAkJZHBtX3Jlc3VtZV9lbmQoUE1TR19SRUNPVkVSKTsKIAl9CisJc2V0X2dmcF9hbGxvd2VkX21hc2soc2F2ZWRfbWFzayk7CiAJcmVzdW1lX2NvbnNvbGUoKTsKIAlwbV9yZXN0b3JlX2NvbnNvbGUoKTsKIAlyZXR1cm4gZXJyb3I7CkBAIC00NjYsNiArNDcyLDcgQEAKIGludCBoaWJlcm5hdGlvbl9wbGF0Zm9ybV9lbnRlcih2b2lkKQogewogCWludCBlcnJvcjsKKwlnZnBfdCBzYXZlZF9tYXNrOwogCiAJaWYgKCFoaWJlcm5hdGlvbl9vcHMpCiAJCXJldHVybiAtRU5PU1lTOwpAQCAtNDgxLDYgKzQ4OCw3IEBACiAKIAllbnRlcmluZ19wbGF0Zm9ybV9oaWJlcm5hdGlvbiA9IHRydWU7CiAJc3VzcGVuZF9jb25zb2xlKCk7CisJc2F2ZWRfbWFzayA9IGNsZWFyX2dmcF9hbGxvd2VkX21hc2soR0ZQX0lPRlMpOwogCWVycm9yID0gZHBtX3N1c3BlbmRfc3RhcnQoUE1TR19ISUJFUk5BVEUpOwogCWlmIChlcnJvcikgewogCQlpZiAoaGliZXJuYXRpb25fb3BzLT5yZWNvdmVyKQpAQCAtNTE4LDYgKzUyNiw3IEBACiAgUmVzdW1lX2RldmljZXM6CiAJZW50ZXJpbmdfcGxhdGZvcm1faGliZXJuYXRpb24gPSBmYWxzZTsKIAlkcG1fcmVzdW1lX2VuZChQTVNHX1JFU1RPUkUpOworCXNldF9nZnBfYWxsb3dlZF9tYXNrKHNhdmVkX21hc2spOwogCXJlc3VtZV9jb25zb2xlKCk7CiAKICBDbG9zZToKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zdXNwZW5kLmMgYi9rZXJuZWwvcG93ZXIvc3VzcGVuZC5jCmluZGV4IDZmMTBkZmMuLjQ0Y2NlMTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zdXNwZW5kLmMKKysrIGIva2VybmVsL3Bvd2VyL3N1c3BlbmQuYwpAQCAtMTg5LDYgKzE4OSw3IEBACiBpbnQgc3VzcGVuZF9kZXZpY2VzX2FuZF9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCiB7CiAJaW50IGVycm9yOworCWdmcF90IHNhdmVkX21hc2s7CiAKIAlpZiAoIXN1c3BlbmRfb3BzKQogCQlyZXR1cm4gLUVOT1NZUzsKQEAgLTE5OSw2ICsyMDAsNyBAQAogCQkJZ290byBDbG9zZTsKIAl9CiAJc3VzcGVuZF9jb25zb2xlKCk7CisJc2F2ZWRfbWFzayA9IGNsZWFyX2dmcF9hbGxvd2VkX21hc2soR0ZQX0lPRlMpOwogCXN1c3BlbmRfdGVzdF9zdGFydCgpOwogCWVycm9yID0gZHBtX3N1c3BlbmRfc3RhcnQoUE1TR19TVVNQRU5EKTsKIAlpZiAoZXJyb3IpIHsKQEAgLTIxNSw2ICsyMTcsNyBAQAogCXN1c3BlbmRfdGVzdF9zdGFydCgpOwogCWRwbV9yZXN1bWVfZW5kKFBNU0dfUkVTVU1FKTsKIAlzdXNwZW5kX3Rlc3RfZmluaXNoKCJyZXN1bWUgZGV2aWNlcyIpOworCXNldF9nZnBfYWxsb3dlZF9tYXNrKHNhdmVkX21hc2spOwogCXJlc3VtZV9jb25zb2xlKCk7CiAgQ2xvc2U6CiAJaWYgKHN1c3BlbmRfb3BzLT5lbmQpCmRpZmYgLS1naXQgYS9rZXJuZWwvcHJpbnRrLmMgYi9rZXJuZWwvcHJpbnRrLmMKaW5kZXggNDA2NzQxMi4uNzUwNzdhZCAxMDA2NDQKLS0tIGEva2VybmVsL3ByaW50ay5jCisrKyBiL2tlcm5lbC9wcmludGsuYwpAQCAtNzAsOCArNzAsNiBAQAogCURFRkFVTFRfQ09OU09MRV9MT0dMRVZFTCwJLyogZGVmYXVsdF9jb25zb2xlX2xvZ2xldmVsICovCiB9OwogCi1zdGF0aWMgaW50IHNhdmVkX2NvbnNvbGVfbG9nbGV2ZWwgPSAtMTsKLQogLyoKICAqIExvdyBsZXZlbCBkcml2ZXJzIG1heSBuZWVkIHRoYXQgdG8ga25vdyBpZiB0aGV5IGNhbiBzY2hlZHVsZSBpbgogICogdGhlaXIgdW5ibGFuaygpIGNhbGxiYWNrIG9yIG5vdC4gU28gbGV0J3MgZXhwb3J0IGl0LgpAQCAtMTQ2LDYgKzE0NCw3IEBACiBzdGF0aWMgY2hhciAqbG9nX2J1ZiA9IF9fbG9nX2J1ZjsKIHN0YXRpYyBpbnQgbG9nX2J1Zl9sZW4gPSBfX0xPR19CVUZfTEVOOwogc3RhdGljIHVuc2lnbmVkIGxvZ2dlZF9jaGFyczsgLyogTnVtYmVyIG9mIGNoYXJzIHByb2R1Y2VkIHNpbmNlIGxhc3QgcmVhZCtjbGVhciBvcGVyYXRpb24gKi8KK3N0YXRpYyBpbnQgc2F2ZWRfY29uc29sZV9sb2dsZXZlbCA9IC0xOwogCiAjaWZkZWYgQ09ORklHX0tFWEVDCiAvKgpkaWZmIC0tZ2l0IGEva2VybmVsL3JlbGF5LmMgYi9rZXJuZWwvcmVsYXkuYwppbmRleCBjNzA1YTQxLi4zZDk3ZjI4IDEwMDY0NAotLS0gYS9rZXJuZWwvcmVsYXkuYworKysgYi9rZXJuZWwvcmVsYXkuYwpAQCAtMTIxNSwxNCArMTIxNSwxNCBAQAogLyoKICAqCXN1YmJ1Zl9zcGxpY2VfYWN0b3IgLSBzcGxpY2UgdXAgdG8gb25lIHN1YmJ1ZidzIHdvcnRoIG9mIGRhdGEKICAqLwotc3RhdGljIGludCBzdWJidWZfc3BsaWNlX2FjdG9yKHN0cnVjdCBmaWxlICppbiwKK3N0YXRpYyBzc2l6ZV90IHN1YmJ1Zl9zcGxpY2VfYWN0b3Ioc3RydWN0IGZpbGUgKmluLAogCQkJICAgICAgIGxvZmZfdCAqcHBvcywKIAkJCSAgICAgICBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAogCQkJICAgICAgIHNpemVfdCBsZW4sCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGZsYWdzLAogCQkJICAgICAgIGludCAqbm9ucGFkX3JldCkKIHsKLQl1bnNpZ25lZCBpbnQgcGlkeCwgcG9mZiwgdG90YWxfbGVuLCBzdWJidWZfcGFnZXMsIG5yX3BhZ2VzLCByZXQ7CisJdW5zaWduZWQgaW50IHBpZHgsIHBvZmYsIHRvdGFsX2xlbiwgc3ViYnVmX3BhZ2VzLCBucl9wYWdlczsKIAlzdHJ1Y3QgcmNoYW5fYnVmICpyYnVmID0gaW4tPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBpbnQgc3ViYnVmX3NpemUgPSByYnVmLT5jaGFuLT5zdWJidWZfc2l6ZTsKIAl1aW50NjRfdCBwb3MgPSAodWludDY0X3QpICpwcG9zOwpAQCAtMTI0MSw2ICsxMjQxLDcgQEAKIAkJLm9wcyA9ICZyZWxheV9waXBlX2J1Zl9vcHMsCiAJCS5zcGRfcmVsZWFzZSA9IHJlbGF5X3BhZ2VfcmVsZWFzZSwKIAl9OworCXNzaXplX3QgcmV0OwogCiAJaWYgKHJidWYtPnN1YmJ1ZnNfcHJvZHVjZWQgPT0gcmJ1Zi0+c3ViYnVmc19jb25zdW1lZCkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IGFiYjM2YjEuLmI0N2NlZWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC00MzUzLDcgKzQzNTMsNyBAQAogCS8qIGNvbnZlcnQgbmljZSB2YWx1ZSBbMTksLTIwXSB0byBybGltaXQgc3R5bGUgdmFsdWUgWzEsNDBdICovCiAJaW50IG5pY2VfcmxpbSA9IDIwIC0gbmljZTsKIAotCXJldHVybiAobmljZV9ybGltIDw9IHAtPnNpZ25hbC0+cmxpbVtSTElNSVRfTklDRV0ucmxpbV9jdXIgfHwKKwlyZXR1cm4gKG5pY2VfcmxpbSA8PSB0YXNrX3JsaW1pdChwLCBSTElNSVRfTklDRSkgfHwKIAkJY2FwYWJsZShDQVBfU1lTX05JQ0UpKTsKIH0KIApAQCAtNDUzMCw3ICs0NTMwLDcgQEAKIAogCQkJaWYgKCFsb2NrX3Rhc2tfc2lnaGFuZChwLCAmZmxhZ3MpKQogCQkJCXJldHVybiAtRVNSQ0g7Ci0JCQlybGltX3J0cHJpbyA9IHAtPnNpZ25hbC0+cmxpbVtSTElNSVRfUlRQUklPXS5ybGltX2N1cjsKKwkJCXJsaW1fcnRwcmlvID0gdGFza19ybGltaXQocCwgUkxJTUlUX1JUUFJJTyk7CiAJCQl1bmxvY2tfdGFza19zaWdoYW5kKHAsICZmbGFncyk7CiAKIAkJCS8qIGNhbid0IHNldC9jaGFuZ2UgdGhlIHJ0IHBvbGljeSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2NwdXByaS5jIGIva2VybmVsL3NjaGVkX2NwdXByaS5jCmluZGV4IGVlYjM1MDYuLjgyMDk1YmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9jcHVwcmkuYworKysgYi9rZXJuZWwvc2NoZWRfY3B1cHJpLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIH0KIAogI2RlZmluZSBmb3JfZWFjaF9jcHVwcmlfYWN0aXZlKGFycmF5LCBpZHgpICAgICAgICAgICAgICAgICAgICBcCi0JZm9yX2VhY2hfYml0KGlkeCwgYXJyYXksIENQVVBSSV9OUl9QUklPUklUSUVTKQorCWZvcl9lYWNoX3NldF9iaXQoaWR4LCBhcnJheSwgQ1BVUFJJX05SX1BSSU9SSVRJRVMpCiAKIC8qKgogICogY3B1cHJpX2ZpbmQgLSBmaW5kIHRoZSBiZXN0IChsb3dlc3QtcHJpKSBDUFUgaW4gdGhlIHN5c3RlbQpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX3J0LmMgYi9rZXJuZWwvc2NoZWRfcnQuYwppbmRleCBiZjNlMzhmLi41YTZlZDFmIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfcnQuYworKysgYi9rZXJuZWwvc2NoZWRfcnQuYwpAQCAtMTY2Miw4ICsxNjYyLDkgQEAKIAlpZiAoIXAtPnNpZ25hbCkKIAkJcmV0dXJuOwogCi0Jc29mdCA9IHAtPnNpZ25hbC0+cmxpbVtSTElNSVRfUlRUSU1FXS5ybGltX2N1cjsKLQloYXJkID0gcC0+c2lnbmFsLT5ybGltW1JMSU1JVF9SVFRJTUVdLnJsaW1fbWF4OworCS8qIG1heCBtYXkgY2hhbmdlIGFmdGVyIGN1ciB3YXMgcmVhZCwgdGhpcyB3aWxsIGJlIGZpeGVkIG5leHQgdGljayAqLworCXNvZnQgPSB0YXNrX3JsaW1pdChwLCBSTElNSVRfUlRUSU1FKTsKKwloYXJkID0gdGFza19ybGltaXRfbWF4KHAsIFJMSU1JVF9SVFRJTUUpOwogCiAJaWYgKHNvZnQgIT0gUkxJTV9JTkZJTklUWSkgewogCQl1bnNpZ25lZCBsb25nIG5leHQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2lnbmFsLmMgYi9rZXJuZWwvc2lnbmFsLmMKaW5kZXggNWJiOWJhZi4uZGJkN2ZlMCAxMDA2NDQKLS0tIGEva2VybmVsL3NpZ25hbC5jCisrKyBiL2tlcm5lbC9zaWduYWwuYwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAKIAlpZiAob3ZlcnJpZGVfcmxpbWl0IHx8CiAJICAgIGF0b21pY19yZWFkKCZ1c2VyLT5zaWdwZW5kaW5nKSA8PQotCQkJdC0+c2lnbmFsLT5ybGltW1JMSU1JVF9TSUdQRU5ESU5HXS5ybGltX2N1cikgeworCQkJdGFza19ybGltaXQodCwgUkxJTUlUX1NJR1BFTkRJTkcpKSB7CiAJCXEgPSBrbWVtX2NhY2hlX2FsbG9jKHNpZ3F1ZXVlX2NhY2hlcCwgZmxhZ3MpOwogCX0gZWxzZSB7CiAJCXByaW50X2Ryb3BwZWRfc2lnbmFsKHNpZyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMKaW5kZXggODc3ZmU0Zi4uOTgxNGU0MyAxMDA2NDQKLS0tIGEva2VybmVsL3N5cy5jCisrKyBiL2tlcm5lbC9zeXMuYwpAQCAtNTcxLDggKzU3MSw3IEBACiAJaWYgKCFuZXdfdXNlcikKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQlpZiAoYXRvbWljX3JlYWQoJm5ld191c2VyLT5wcm9jZXNzZXMpID49Ci0JCQkJY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9OUFJPQ10ucmxpbV9jdXIgJiYKKwlpZiAoYXRvbWljX3JlYWQoJm5ld191c2VyLT5wcm9jZXNzZXMpID49IHJsaW1pdChSTElNSVRfTlBST0MpICYmCiAJCQluZXdfdXNlciAhPSBJTklUX1VTRVIpIHsKIAkJZnJlZV91aWQobmV3X3VzZXIpOwogCQlyZXR1cm4gLUVBR0FJTjsKZGlmZiAtLWdpdCBhL2tlcm5lbC90c2FjY3QuYyBiL2tlcm5lbC90c2FjY3QuYwppbmRleCAwMGQ1OWQwLi4wYTY3ZTA0MSAxMDA2NDQKLS0tIGEva2VybmVsL3RzYWNjdC5jCisrKyBiL2tlcm5lbC90c2FjY3QuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RzYWNjdF9rZXJuLmg+CiAjaW5jbHVkZSA8bGludXgvYWNjdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAvKgogICogZmlsbCBpbiBiYXNpYyBhY2NvdW50aW5nIGZpZWxkcwpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcgYi9saWIvS2NvbmZpZwppbmRleCA5N2IxMzZmZi4uMTcwZDhjYSAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcKKysrIGIvbGliL0tjb25maWcKQEAgLTE2MCw2ICsxNjAsOSBAQAogY29uZmlnIFRFWFRTRUFSQ0hfRlNNCiAJdHJpc3RhdGUKIAorY29uZmlnIEJUUkVFCisJYm9vbGVhbgorCiBjb25maWcgSEFTX0lPTUVNCiAJYm9vbGVhbgogCWRlcGVuZHMgb24gIU5PX0lPTUVNCmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IDVlMzQwN2QuLmI1MjBlYzEgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCisrKyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC04NjQsOCArODY0LDcgQEAKIAogY29uZmlnIExLRFRNCiAJdHJpc3RhdGUgIkxpbnV4IEtlcm5lbCBEdW1wIFRlc3QgVG9vbCBNb2R1bGUiCi0JZGVwZW5kcyBvbiBERUJVR19LRVJORUwKLQlkZXBlbmRzIG9uIEtQUk9CRVMKKwlkZXBlbmRzIG9uIERFQlVHX0ZTCiAJZGVwZW5kcyBvbiBCTE9DSwogCWRlZmF1bHQgbgogCWhlbHAKQEAgLTg3Niw3ICs4NzUsNyBAQAogCWNhbGxlZCBsa2R0bS4KIAogCURvY3VtZW50YXRpb24gb24gaG93IHRvIHVzZSB0aGUgbW9kdWxlIGNhbiBiZSBmb3VuZCBpbgotCWRyaXZlcnMvbWlzYy9sa2R0bS5jCisJRG9jdW1lbnRhdGlvbi9mYXVsdC1pbmplY3Rpb24vcHJvdm9rZS1jcmFzaGVzLnR4dAogCiBjb25maWcgRkFVTFRfSU5KRUNUSU9OCiAJYm9vbCAiRmF1bHQtaW5qZWN0aW9uIGZyYW1ld29yayIKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQppbmRleCAzYjBiNGE2Li4yZTE1MmFlIDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUKKysrIGIvbGliL01ha2VmaWxlCkBAIC00MSw2ICs0MSw3IEBACiBvYmotJChDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUKSArPSBmaW5kX2xhc3RfYml0Lm8KIG9iai0kKENPTkZJR19HRU5FUklDX0hXRUlHSFQpICs9IGh3ZWlnaHQubwogb2JqLSQoQ09ORklHX0xPQ0tfS0VSTkVMKSArPSBrZXJuZWxfbG9jay5vCitvYmotJChDT05GSUdfQlRSRUUpICs9IGJ0cmVlLm8KIG9iai0kKENPTkZJR19ERUJVR19QUkVFTVBUKSArPSBzbXBfcHJvY2Vzc29yX2lkLm8KIG9iai0kKENPTkZJR19ERUJVR19MSVNUKSArPSBsaXN0X2RlYnVnLm8KIG9iai0kKENPTkZJR19ERUJVR19PQkpFQ1RTKSArPSBkZWJ1Z29iamVjdHMubwpkaWZmIC0tZ2l0IGEvbGliL2JpdG1hcC5jIGIvbGliL2JpdG1hcC5jCmluZGV4IDExYmY0OTcuLmZmYjc4YzkgMTAwNjQ0Ci0tLSBhL2xpYi9iaXRtYXAuYworKysgYi9saWIvYml0bWFwLmMKQEAgLTQ4Nyw3ICs0ODcsNyBAQAogRVhQT1JUX1NZTUJPTChfX2JpdG1hcF9wYXJzZSk7CiAKIC8qKgotICogYml0bWFwX3BhcnNlX3VzZXIoKQorICogYml0bWFwX3BhcnNlX3VzZXIgLSBjb252ZXJ0IGFuIEFTQ0lJIGhleCBzdHJpbmcgaW4gYSB1c2VyIGJ1ZmZlciBpbnRvIGEgYml0bWFwCiAgKgogICogQHVidWY6IHBvaW50ZXIgdG8gdXNlciBidWZmZXIgY29udGFpbmluZyBzdHJpbmcuCiAgKiBAdWxlbjogYnVmZmVyIHNpemUgaW4gYnl0ZXMuICBJZiBzdHJpbmcgaXMgc21hbGxlciB0aGFuIHRoaXMKQEAgLTYxOSw3ICs2MTksNyBAQAogRVhQT1JUX1NZTUJPTChiaXRtYXBfcGFyc2VsaXN0KTsKIAogLyoqCi0gKiBiaXRtYXBfcG9zX3RvX29yZChidWYsIHBvcywgYml0cykKKyAqIGJpdG1hcF9wb3NfdG9fb3JkIC0gZmluZCBvcmRpbmFsIG9mIHNldCBiaXQgYXQgZ2l2ZW4gcG9zaXRpb24gaW4gYml0bWFwCiAgKglAYnVmOiBwb2ludGVyIHRvIGEgYml0bWFwCiAgKglAcG9zOiBhIGJpdCBwb3NpdGlvbiBpbiBAYnVmICgwIDw9IEBwb3MgPCBAYml0cykKICAqCUBiaXRzOiBudW1iZXIgb2YgdmFsaWQgYml0IHBvc2l0aW9ucyBpbiBAYnVmCkBAIC02NTUsNyArNjU1LDcgQEAKIH0KIAogLyoqCi0gKiBiaXRtYXBfb3JkX3RvX3BvcyhidWYsIG9yZCwgYml0cykKKyAqIGJpdG1hcF9vcmRfdG9fcG9zIC0gZmluZCBwb3NpdGlvbiBvZiBuLXRoIHNldCBiaXQgaW4gYml0bWFwCiAgKglAYnVmOiBwb2ludGVyIHRvIGJpdG1hcAogICoJQG9yZDogb3JkaW5hbCBiaXQgcG9zaXRpb24gKG4tdGggc2V0IGJpdCwgbiA+PSAwKQogICoJQGJpdHM6IG51bWJlciBvZiB2YWxpZCBiaXQgcG9zaXRpb25zIGluIEBidWYKQEAgLTczMywxMCArNzMzLDkgQEAKIAliaXRtYXBfemVybyhkc3QsIGJpdHMpOwogCiAJdyA9IGJpdG1hcF93ZWlnaHQobmV3LCBiaXRzKTsKLQlmb3IgKG9sZGJpdCA9IGZpbmRfZmlyc3RfYml0KHNyYywgYml0cyk7Ci0JICAgICBvbGRiaXQgPCBiaXRzOwotCSAgICAgb2xkYml0ID0gZmluZF9uZXh0X2JpdChzcmMsIGJpdHMsIG9sZGJpdCArIDEpKSB7CisJZm9yX2VhY2hfc2V0X2JpdChvbGRiaXQsIHNyYywgYml0cykgewogCSAgICAgCWludCBuID0gYml0bWFwX3Bvc190b19vcmQob2xkLCBvbGRiaXQsIGJpdHMpOworCiAJCWlmIChuIDwgMCB8fCB3ID09IDApCiAJCQlzZXRfYml0KG9sZGJpdCwgZHN0KTsJLyogaWRlbnRpdHkgbWFwICovCiAJCWVsc2UKQEAgLTkwMyw5ICs5MDIsNyBAQAogCSAqLwogCiAJbSA9IDA7Ci0JZm9yIChuID0gZmluZF9maXJzdF9iaXQocmVsbWFwLCBiaXRzKTsKLQkgICAgIG4gPCBiaXRzOwotCSAgICAgbiA9IGZpbmRfbmV4dF9iaXQocmVsbWFwLCBiaXRzLCBuICsgMSkpIHsKKwlmb3JfZWFjaF9zZXRfYml0KG4sIHJlbG1hcCwgYml0cykgewogCQkvKiBtID09IGJpdG1hcF9wb3NfdG9fb3JkKHJlbG1hcCwgbiwgYml0cykgKi8KIAkJaWYgKHRlc3RfYml0KG0sIG9yaWcpKQogCQkJc2V0X2JpdChuLCBkc3QpOwpAQCAtOTM0LDkgKzkzMSw3IEBACiAJCXJldHVybjsKIAliaXRtYXBfemVybyhkc3QsIGJpdHMpOwogCi0JZm9yIChvbGRiaXQgPSBmaW5kX2ZpcnN0X2JpdChvcmlnLCBiaXRzKTsKLQkgICAgIG9sZGJpdCA8IGJpdHM7Ci0JICAgICBvbGRiaXQgPSBmaW5kX25leHRfYml0KG9yaWcsIGJpdHMsIG9sZGJpdCArIDEpKQorCWZvcl9lYWNoX3NldF9iaXQob2xkYml0LCBvcmlnLCBiaXRzKQogCQlzZXRfYml0KG9sZGJpdCAlIHN6LCBkc3QpOwogfQogRVhQT1JUX1NZTUJPTChiaXRtYXBfZm9sZCk7CmRpZmYgLS1naXQgYS9saWIvYnRyZWUuYyBiL2xpYi9idHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxODU5YTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYnRyZWUuYwpAQCAtMCwwICsxLDc5NyBAQAorLyoKKyAqIGxpYi9idHJlZS5jCS0gU2ltcGxlIEluLW1lbW9yeSBCK1RyZWUKKyAqCisgKiBBcyBzaG91bGQgYmUgb2J2aW91cyBmb3IgTGludXgga2VybmVsIGNvZGUsIGxpY2Vuc2UgaXMgR1BMdjIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBKb2VybiBFbmdlbCA8am9lcm5AbG9nZnMub3JnPgorICogQml0cyBhbmQgcGllY2VzIHN0b2xlbiBmcm9tIFBldGVyIFppamxzdHJhJ3MgY29kZSwgd2hpY2ggaXMKKyAqIENvcHlyaWdodCAyMDA3LCBSZWQgSGF0IEluYy4gUGV0ZXIgWmlqbHN0cmEgPHB6aWpsc3RyQHJlZGhhdC5jb20+CisgKiBHUEx2MgorICoKKyAqIHNlZSBodHRwOi8vcHJvZ3JhbW1pbmcua2lja3MtYXNzLm5ldC9rZXJuZWwtcGF0Y2hlcy92bWFfbG9va3VwL2J0cmVlLnBhdGNoCisgKgorICogQSByZWxhdGl2ZWx5IHNpbXBsZSBCK1RyZWUgaW1wbGVtZW50YXRpb24uICBJIGhhdmUgd3JpdHRlbiBpdCBhcyBhIGxlYXJuaW5nCisgKiBleGNlcmNpc2UgdG8gdW5kZXJzdGFuZCBob3cgQitUcmVlcyB3b3JrLiAgVHVybmVkIG91dCB0byBiZSB1c2VmdWwgYXMgd2VsbC4KKyAqCisgKiBCK1RyZWVzIGNhbiBiZSB1c2VkIHNpbWlsYXIgdG8gTGludXggcmFkaXggdHJlZXMgKHdoaWNoIGRvbid0IGhhdmUgYW55dGhpbmcKKyAqIGluIGNvbW1vbiB3aXRoIHRleHRib29rIHJhZGl4IHRyZWVzLCBiZXdhcmUpLiAgUHJlcmVxdWlzaXRlIGZvciB0aGVtIHdvcmtpbmcKKyAqIHdlbGwgaXMgdGhhdCBhY2Nlc3MgdG8gYSByYW5kb20gdHJlZSBub2RlIGlzIG11Y2ggZmFzdGVyIHRoYW4gYSBsYXJnZSBudW1iZXIKKyAqIG9mIG9wZXJhdGlvbnMgd2l0aGluIGVhY2ggbm9kZS4KKyAqCisgKiBEaXNrcyBoYXZlIGZ1bGZpbGxlZCB0aGUgcHJlcmVxdWlzaXRlIGZvciBhIGxvbmcgdGltZS4gIE1vcmUgcmVjZW50bHkgRFJBTQorICogaGFzIGdhaW5lZCBzaW1pbGFyIHByb3BlcnRpZXMsIGFzIG1lbW9yeSBhY2Nlc3MgdGltZXMsIHdoZW4gbWVhc3VyZWQgaW4gY3B1CisgKiBjeWNsZXMsIGhhdmUgaW5jcmVhc2VkLiAgQ2FjaGVsaW5lIHNpemVzIGhhdmUgaW5jcmVhc2VkIGFzIHdlbGwsIHdoaWNoIGFsc28KKyAqIGhlbHBzIEIrVHJlZXMuCisgKgorICogQ29tcGFyZWQgdG8gcmFkaXggdHJlZXMsIEIrVHJlZXMgYXJlIG1vcmUgZWZmaWNpZW50IHdoZW4gZGVhbGluZyB3aXRoIGEKKyAqIHNwYXJzZWx5IHBvcHVsYXRlZCBhZGRyZXNzIHNwYWNlLiAgQmV0d2VlbiAyNSUgYW5kIDUwJSBvZiB0aGUgbWVtb3J5IGlzCisgKiBvY2N1cGllZCB3aXRoIHZhbGlkIHBvaW50ZXJzLiAgV2hlbiBkZW5zZWx5IHBvcHVsYXRlZCwgcmFkaXggdHJlZXMgY29udGFpbgorICogfjk4JSBwb2ludGVycyAtIGhhcmQgdG8gYmVhdC4gIFZlcnkgc3BhcnNlIHJhZGl4IHRyZWVzIGNvbnRhaW4gb25seSB+MiUKKyAqIHBvaW50ZXJzLgorICoKKyAqIFRoaXMgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbiBzdG9yZXMgcG9pbnRlcnMgaWRlbnRpZmllZCBieSBhIGxvbmcgdmFsdWUuCisgKiBTdG9yaW5nIE5VTEwgcG9pbnRlcnMgaXMgaWxsZWdhbCwgbG9va3VwIHdpbGwgcmV0dXJuIE5VTEwgd2hlbiBubyBlbnRyeQorICogd2FzIGZvdW5kLgorICoKKyAqIEEgdHJpY2tzIHdhcyB1c2VkIHRoYXQgaXMgbm90IGNvbW1vbmx5IGZvdW5kIGluIHRleHRib29rcy4gIFRoZSBsb3dlc3QKKyAqIHZhbHVlcyBhcmUgdG8gdGhlIHJpZ2h0LCBub3QgdG8gdGhlIGxlZnQuICBBbGwgdXNlZCBzbG90cyB3aXRoaW4gYSBub2RlCisgKiBhcmUgb24gdGhlIGxlZnQsIGFsbCB1bnVzZWQgc2xvdHMgY29udGFpbiBOVUwgdmFsdWVzLiAgTW9zdCBvcGVyYXRpb25zCisgKiBzaW1wbHkgbG9vcCBvbmNlIG92ZXIgYWxsIHNsb3RzIGFuZCB0ZXJtaW5hdGUgb24gdGhlIGZpcnN0IE5VTC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2RlZmluZSBNQVgoYSwgYikgKChhKSA+IChiKSA/IChhKSA6IChiKSkKKyNkZWZpbmUgTk9ERVNJWkUgTUFYKEwxX0NBQ0hFX0JZVEVTLCAxMjgpCisKK3N0cnVjdCBidHJlZV9nZW8geworCWludCBrZXlsZW47CisJaW50IG5vX3BhaXJzOworCWludCBub19sb25nczsKK307CisKK3N0cnVjdCBidHJlZV9nZW8gYnRyZWVfZ2VvMzIgPSB7CisJLmtleWxlbiA9IDEsCisJLm5vX3BhaXJzID0gTk9ERVNJWkUgLyBzaXplb2YobG9uZykgLyAyLAorCS5ub19sb25ncyA9IE5PREVTSVpFIC8gc2l6ZW9mKGxvbmcpIC8gMiwKK307CitFWFBPUlRfU1lNQk9MX0dQTChidHJlZV9nZW8zMik7CisKKyNkZWZpbmUgTE9OR19QRVJfVTY0ICg2NCAvIEJJVFNfUEVSX0xPTkcpCitzdHJ1Y3QgYnRyZWVfZ2VvIGJ0cmVlX2dlbzY0ID0geworCS5rZXlsZW4gPSBMT05HX1BFUl9VNjQsCisJLm5vX3BhaXJzID0gTk9ERVNJWkUgLyBzaXplb2YobG9uZykgLyAoMSArIExPTkdfUEVSX1U2NCksCisJLm5vX2xvbmdzID0gTE9OR19QRVJfVTY0ICogKE5PREVTSVpFIC8gc2l6ZW9mKGxvbmcpIC8gKDEgKyBMT05HX1BFUl9VNjQpKSwKK307CitFWFBPUlRfU1lNQk9MX0dQTChidHJlZV9nZW82NCk7CisKK3N0cnVjdCBidHJlZV9nZW8gYnRyZWVfZ2VvMTI4ID0geworCS5rZXlsZW4gPSAyICogTE9OR19QRVJfVTY0LAorCS5ub19wYWlycyA9IE5PREVTSVpFIC8gc2l6ZW9mKGxvbmcpIC8gKDEgKyAyICogTE9OR19QRVJfVTY0KSwKKwkubm9fbG9uZ3MgPSAyICogTE9OR19QRVJfVTY0ICogKE5PREVTSVpFIC8gc2l6ZW9mKGxvbmcpIC8gKDEgKyAyICogTE9OR19QRVJfVTY0KSksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoYnRyZWVfZ2VvMTI4KTsKKworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpidHJlZV9jYWNoZXA7CisKK3ZvaWQgKmJ0cmVlX2FsbG9jKGdmcF90IGdmcF9tYXNrLCB2b2lkICpwb29sX2RhdGEpCit7CisJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MoYnRyZWVfY2FjaGVwLCBnZnBfbWFzayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChidHJlZV9hbGxvYyk7CisKK3ZvaWQgYnRyZWVfZnJlZSh2b2lkICplbGVtZW50LCB2b2lkICpwb29sX2RhdGEpCit7CisJa21lbV9jYWNoZV9mcmVlKGJ0cmVlX2NhY2hlcCwgZWxlbWVudCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChidHJlZV9mcmVlKTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgKmJ0cmVlX25vZGVfYWxsb2Moc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQsIGdmcF90IGdmcCkKK3sKKwl1bnNpZ25lZCBsb25nICpub2RlOworCisJbm9kZSA9IG1lbXBvb2xfYWxsb2MoaGVhZC0+bWVtcG9vbCwgZ2ZwKTsKKwltZW1zZXQobm9kZSwgMCwgTk9ERVNJWkUpOworCXJldHVybiBub2RlOworfQorCitzdGF0aWMgaW50IGxvbmdjbXAoY29uc3QgdW5zaWduZWQgbG9uZyAqbDEsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmwyLCBzaXplX3QgbikKK3sKKwlzaXplX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJaWYgKGwxW2ldIDwgbDJbaV0pCisJCQlyZXR1cm4gLTE7CisJCWlmIChsMVtpXSA+IGwyW2ldKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyAqbG9uZ2NweSh1bnNpZ25lZCBsb25nICpkZXN0LCBjb25zdCB1bnNpZ25lZCBsb25nICpzcmMsCisJCXNpemVfdCBuKQoreworCXNpemVfdCBpOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJZGVzdFtpXSA9IHNyY1tpXTsKKwlyZXR1cm4gZGVzdDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgKmxvbmdzZXQodW5zaWduZWQgbG9uZyAqcywgdW5zaWduZWQgbG9uZyBjLCBzaXplX3QgbikKK3sKKwlzaXplX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCXNbaV0gPSBjOworCXJldHVybiBzOworfQorCitzdGF0aWMgdm9pZCBkZWNfa2V5KHN0cnVjdCBidHJlZV9nZW8gKmdlbywgdW5zaWduZWQgbG9uZyAqa2V5KQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCBpOworCisJZm9yIChpID0gZ2VvLT5rZXlsZW4gLSAxOyBpID49IDA7IGktLSkgeworCQl2YWwgPSBrZXlbaV07CisJCWtleVtpXSA9IHZhbCAtIDE7CisJCWlmICh2YWwpCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nICpia2V5KHN0cnVjdCBidHJlZV9nZW8gKmdlbywgdW5zaWduZWQgbG9uZyAqbm9kZSwgaW50IG4pCit7CisJcmV0dXJuICZub2RlW24gKiBnZW8tPmtleWxlbl07Cit9CisKK3N0YXRpYyB2b2lkICpidmFsKHN0cnVjdCBidHJlZV9nZW8gKmdlbywgdW5zaWduZWQgbG9uZyAqbm9kZSwgaW50IG4pCit7CisJcmV0dXJuICh2b2lkICopbm9kZVtnZW8tPm5vX2xvbmdzICsgbl07Cit9CisKK3N0YXRpYyB2b2lkIHNldGtleShzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sIHVuc2lnbmVkIGxvbmcgKm5vZGUsIGludCBuLAorCQkgICB1bnNpZ25lZCBsb25nICprZXkpCit7CisJbG9uZ2NweShia2V5KGdlbywgbm9kZSwgbiksIGtleSwgZ2VvLT5rZXlsZW4pOworfQorCitzdGF0aWMgdm9pZCBzZXR2YWwoc3RydWN0IGJ0cmVlX2dlbyAqZ2VvLCB1bnNpZ25lZCBsb25nICpub2RlLCBpbnQgbiwKKwkJICAgdm9pZCAqdmFsKQoreworCW5vZGVbZ2VvLT5ub19sb25ncyArIG5dID0gKHVuc2lnbmVkIGxvbmcpIHZhbDsKK30KKworc3RhdGljIHZvaWQgY2xlYXJwYWlyKHN0cnVjdCBidHJlZV9nZW8gKmdlbywgdW5zaWduZWQgbG9uZyAqbm9kZSwgaW50IG4pCit7CisJbG9uZ3NldChia2V5KGdlbywgbm9kZSwgbiksIDAsIGdlby0+a2V5bGVuKTsKKwlub2RlW2dlby0+bm9fbG9uZ3MgKyBuXSA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2J0cmVlX2luaXQoc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQpCit7CisJaGVhZC0+bm9kZSA9IE5VTEw7CisJaGVhZC0+aGVpZ2h0ID0gMDsKK30KKwordm9pZCBidHJlZV9pbml0X21lbXBvb2woc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQsIG1lbXBvb2xfdCAqbWVtcG9vbCkKK3sKKwlfX2J0cmVlX2luaXQoaGVhZCk7CisJaGVhZC0+bWVtcG9vbCA9IG1lbXBvb2w7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChidHJlZV9pbml0X21lbXBvb2wpOworCitpbnQgYnRyZWVfaW5pdChzdHJ1Y3QgYnRyZWVfaGVhZCAqaGVhZCkKK3sKKwlfX2J0cmVlX2luaXQoaGVhZCk7CisJaGVhZC0+bWVtcG9vbCA9IG1lbXBvb2xfY3JlYXRlKDAsIGJ0cmVlX2FsbG9jLCBidHJlZV9mcmVlLCBOVUxMKTsKKwlpZiAoIWhlYWQtPm1lbXBvb2wpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYnRyZWVfaW5pdCk7CisKK3ZvaWQgYnRyZWVfZGVzdHJveShzdHJ1Y3QgYnRyZWVfaGVhZCAqaGVhZCkKK3sKKwltZW1wb29sX2Rlc3Ryb3koaGVhZC0+bWVtcG9vbCk7CisJaGVhZC0+bWVtcG9vbCA9IE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChidHJlZV9kZXN0cm95KTsKKwordm9pZCAqYnRyZWVfbGFzdChzdHJ1Y3QgYnRyZWVfaGVhZCAqaGVhZCwgc3RydWN0IGJ0cmVlX2dlbyAqZ2VvLAorCQkgdW5zaWduZWQgbG9uZyAqa2V5KQoreworCWludCBoZWlnaHQgPSBoZWFkLT5oZWlnaHQ7CisJdW5zaWduZWQgbG9uZyAqbm9kZSA9IGhlYWQtPm5vZGU7CisKKwlpZiAoaGVpZ2h0ID09IDApCisJCXJldHVybiBOVUxMOworCisJZm9yICggOyBoZWlnaHQgPiAxOyBoZWlnaHQtLSkKKwkJbm9kZSA9IGJ2YWwoZ2VvLCBub2RlLCAwKTsKKworCWxvbmdjcHkoa2V5LCBia2V5KGdlbywgbm9kZSwgMCksIGdlby0+a2V5bGVuKTsKKwlyZXR1cm4gYnZhbChnZW8sIG5vZGUsIDApOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYnRyZWVfbGFzdCk7CisKK3N0YXRpYyBpbnQga2V5Y21wKHN0cnVjdCBidHJlZV9nZW8gKmdlbywgdW5zaWduZWQgbG9uZyAqbm9kZSwgaW50IHBvcywKKwkJICB1bnNpZ25lZCBsb25nICprZXkpCit7CisJcmV0dXJuIGxvbmdjbXAoYmtleShnZW8sIG5vZGUsIHBvcyksIGtleSwgZ2VvLT5rZXlsZW4pOworfQorCitzdGF0aWMgaW50IGtleXplcm8oc3RydWN0IGJ0cmVlX2dlbyAqZ2VvLCB1bnNpZ25lZCBsb25nICprZXkpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZ2VvLT5rZXlsZW47IGkrKykKKwkJaWYgKGtleVtpXSkKKwkJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgKmJ0cmVlX2xvb2t1cChzdHJ1Y3QgYnRyZWVfaGVhZCAqaGVhZCwgc3RydWN0IGJ0cmVlX2dlbyAqZ2VvLAorCQl1bnNpZ25lZCBsb25nICprZXkpCit7CisJaW50IGksIGhlaWdodCA9IGhlYWQtPmhlaWdodDsKKwl1bnNpZ25lZCBsb25nICpub2RlID0gaGVhZC0+bm9kZTsKKworCWlmIChoZWlnaHQgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKCA7IGhlaWdodCA+IDE7IGhlaWdodC0tKSB7CisJCWZvciAoaSA9IDA7IGkgPCBnZW8tPm5vX3BhaXJzOyBpKyspCisJCQlpZiAoa2V5Y21wKGdlbywgbm9kZSwgaSwga2V5KSA8PSAwKQorCQkJCWJyZWFrOworCQlpZiAoaSA9PSBnZW8tPm5vX3BhaXJzKQorCQkJcmV0dXJuIE5VTEw7CisJCW5vZGUgPSBidmFsKGdlbywgbm9kZSwgaSk7CisJCWlmICghbm9kZSkKKwkJCXJldHVybiBOVUxMOworCX0KKworCWlmICghbm9kZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgZ2VvLT5ub19wYWlyczsgaSsrKQorCQlpZiAoa2V5Y21wKGdlbywgbm9kZSwgaSwga2V5KSA9PSAwKQorCQkJcmV0dXJuIGJ2YWwoZ2VvLCBub2RlLCBpKTsKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJ0cmVlX2xvb2t1cCk7CisKK2ludCBidHJlZV91cGRhdGUoc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQsIHN0cnVjdCBidHJlZV9nZW8gKmdlbywKKwkJIHVuc2lnbmVkIGxvbmcgKmtleSwgdm9pZCAqdmFsKQoreworCWludCBpLCBoZWlnaHQgPSBoZWFkLT5oZWlnaHQ7CisJdW5zaWduZWQgbG9uZyAqbm9kZSA9IGhlYWQtPm5vZGU7CisKKwlpZiAoaGVpZ2h0ID09IDApCisJCXJldHVybiAtRU5PRU5UOworCisJZm9yICggOyBoZWlnaHQgPiAxOyBoZWlnaHQtLSkgeworCQlmb3IgKGkgPSAwOyBpIDwgZ2VvLT5ub19wYWlyczsgaSsrKQorCQkJaWYgKGtleWNtcChnZW8sIG5vZGUsIGksIGtleSkgPD0gMCkKKwkJCQlicmVhazsKKwkJaWYgKGkgPT0gZ2VvLT5ub19wYWlycykKKwkJCXJldHVybiAtRU5PRU5UOworCQlub2RlID0gYnZhbChnZW8sIG5vZGUsIGkpOworCQlpZiAoIW5vZGUpCisJCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlpZiAoIW5vZGUpCisJCXJldHVybiAtRU5PRU5UOworCisJZm9yIChpID0gMDsgaSA8IGdlby0+bm9fcGFpcnM7IGkrKykKKwkJaWYgKGtleWNtcChnZW8sIG5vZGUsIGksIGtleSkgPT0gMCkgeworCQkJc2V0dmFsKGdlbywgbm9kZSwgaSwgdmFsKTsKKwkJCXJldHVybiAwOworCQl9CisJcmV0dXJuIC1FTk9FTlQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChidHJlZV91cGRhdGUpOworCisvKgorICogVXN1YWxseSB0aGlzIGZ1bmN0aW9uIGlzIHF1aXRlIHNpbWlsYXIgdG8gbm9ybWFsIGxvb2t1cC4gIEJ1dCB0aGUga2V5IG9mCisgKiBhIHBhcmVudCBub2RlIG1heSBiZSBzbWFsbGVyIHRoYW4gdGhlIHNtYWxsZXN0IGtleSBvZiBhbGwgaXRzIHNpYmxpbmdzLgorICogSW4gc3VjaCBhIGNhc2Ugd2UgY2Fubm90IGp1c3QgcmV0dXJuIE5VTEwsIGFzIHdlIGhhdmUgb25seSBwcm92ZW4gdGhhdCBubworICoga2V5IHNtYWxsZXIgdGhhbiBfX2tleSwgYnV0IGxhcmdlciB0aGFuIHRoaXMgcGFyZW50IGtleSBleGlzdHMuCisgKiBTbyB3ZSBzZXQgX19rZXkgdG8gdGhlIHBhcmVudCBrZXkgYW5kIHJldHJ5LiAgV2UgaGF2ZSB0byB1c2UgdGhlIHNtYWxsZXN0CisgKiBzdWNoIHBhcmVudCBrZXksIHdoaWNoIGlzIHRoZSBsYXN0IHBhcmVudCBrZXkgd2UgZW5jb3VudGVyZWQuCisgKi8KK3ZvaWQgKmJ0cmVlX2dldF9wcmV2KHN0cnVjdCBidHJlZV9oZWFkICpoZWFkLCBzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sCisJCSAgICAgdW5zaWduZWQgbG9uZyAqX19rZXkpCit7CisJaW50IGksIGhlaWdodDsKKwl1bnNpZ25lZCBsb25nICpub2RlLCAqb2xkbm9kZTsKKwl1bnNpZ25lZCBsb25nICpyZXRyeV9rZXkgPSBOVUxMLCBrZXlbZ2VvLT5rZXlsZW5dOworCisJaWYgKGtleXplcm8oZ2VvLCBfX2tleSkpCisJCXJldHVybiBOVUxMOworCisJaWYgKGhlYWQtPmhlaWdodCA9PSAwKQorCQlyZXR1cm4gTlVMTDsKK3JldHJ5OgorCWxvbmdjcHkoa2V5LCBfX2tleSwgZ2VvLT5rZXlsZW4pOworCWRlY19rZXkoZ2VvLCBrZXkpOworCisJbm9kZSA9IGhlYWQtPm5vZGU7CisJZm9yIChoZWlnaHQgPSBoZWFkLT5oZWlnaHQgOyBoZWlnaHQgPiAxOyBoZWlnaHQtLSkgeworCQlmb3IgKGkgPSAwOyBpIDwgZ2VvLT5ub19wYWlyczsgaSsrKQorCQkJaWYgKGtleWNtcChnZW8sIG5vZGUsIGksIGtleSkgPD0gMCkKKwkJCQlicmVhazsKKwkJaWYgKGkgPT0gZ2VvLT5ub19wYWlycykKKwkJCWdvdG8gbWlzczsKKwkJb2xkbm9kZSA9IG5vZGU7CisJCW5vZGUgPSBidmFsKGdlbywgbm9kZSwgaSk7CisJCWlmICghbm9kZSkKKwkJCWdvdG8gbWlzczsKKwkJcmV0cnlfa2V5ID0gYmtleShnZW8sIG9sZG5vZGUsIGkpOworCX0KKworCWlmICghbm9kZSkKKwkJZ290byBtaXNzOworCisJZm9yIChpID0gMDsgaSA8IGdlby0+bm9fcGFpcnM7IGkrKykgeworCQlpZiAoa2V5Y21wKGdlbywgbm9kZSwgaSwga2V5KSA8PSAwKSB7CisJCQlpZiAoYnZhbChnZW8sIG5vZGUsIGkpKSB7CisJCQkJbG9uZ2NweShfX2tleSwgYmtleShnZW8sIG5vZGUsIGkpLCBnZW8tPmtleWxlbik7CisJCQkJcmV0dXJuIGJ2YWwoZ2VvLCBub2RlLCBpKTsKKwkJCX0gZWxzZQorCQkJCWdvdG8gbWlzczsKKwkJfQorCX0KK21pc3M6CisJaWYgKHJldHJ5X2tleSkgeworCQlfX2tleSA9IHJldHJ5X2tleTsKKwkJcmV0cnlfa2V5ID0gTlVMTDsKKwkJZ290byByZXRyeTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgZ2V0cG9zKHN0cnVjdCBidHJlZV9nZW8gKmdlbywgdW5zaWduZWQgbG9uZyAqbm9kZSwKKwkJdW5zaWduZWQgbG9uZyAqa2V5KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGdlby0+bm9fcGFpcnM7IGkrKykgeworCQlpZiAoa2V5Y21wKGdlbywgbm9kZSwgaSwga2V5KSA8PSAwKQorCQkJYnJlYWs7CisJfQorCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGdldGZpbGwoc3RydWN0IGJ0cmVlX2dlbyAqZ2VvLCB1bnNpZ25lZCBsb25nICpub2RlLCBpbnQgc3RhcnQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSBzdGFydDsgaSA8IGdlby0+bm9fcGFpcnM7IGkrKykKKwkJaWYgKCFidmFsKGdlbywgbm9kZSwgaSkpCisJCQlicmVhazsKKwlyZXR1cm4gaTsKK30KKworLyoKKyAqIGxvY2F0ZSB0aGUgY29ycmVjdCBsZWFmIG5vZGUgaW4gdGhlIGJ0cmVlCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nICpmaW5kX2xldmVsKHN0cnVjdCBidHJlZV9oZWFkICpoZWFkLCBzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sCisJCXVuc2lnbmVkIGxvbmcgKmtleSwgaW50IGxldmVsKQoreworCXVuc2lnbmVkIGxvbmcgKm5vZGUgPSBoZWFkLT5ub2RlOworCWludCBpLCBoZWlnaHQ7CisKKwlmb3IgKGhlaWdodCA9IGhlYWQtPmhlaWdodDsgaGVpZ2h0ID4gbGV2ZWw7IGhlaWdodC0tKSB7CisJCWZvciAoaSA9IDA7IGkgPCBnZW8tPm5vX3BhaXJzOyBpKyspCisJCQlpZiAoa2V5Y21wKGdlbywgbm9kZSwgaSwga2V5KSA8PSAwKQorCQkJCWJyZWFrOworCisJCWlmICgoaSA9PSBnZW8tPm5vX3BhaXJzKSB8fCAhYnZhbChnZW8sIG5vZGUsIGkpKSB7CisJCQkvKiByaWdodC1tb3N0IGtleSBpcyB0b28gbGFyZ2UsIHVwZGF0ZSBpdCAqLworCQkJLyogRklYTUU6IElmIHRoZSByaWdodC1tb3N0IGtleSBvbiBoaWdoZXIgbGV2ZWxzIGlzCisJCQkgKiBhbHdheXMgemVybywgdGhpcyB3b3VsZG4ndCBiZSBuZWNlc3NhcnkuICovCisJCQlpLS07CisJCQlzZXRrZXkoZ2VvLCBub2RlLCBpLCBrZXkpOworCQl9CisJCUJVR19PTihpIDwgMCk7CisJCW5vZGUgPSBidmFsKGdlbywgbm9kZSwgaSk7CisJfQorCUJVR19PTighbm9kZSk7CisJcmV0dXJuIG5vZGU7Cit9CisKK3N0YXRpYyBpbnQgYnRyZWVfZ3JvdyhzdHJ1Y3QgYnRyZWVfaGVhZCAqaGVhZCwgc3RydWN0IGJ0cmVlX2dlbyAqZ2VvLAorCQkgICAgICBnZnBfdCBnZnApCit7CisJdW5zaWduZWQgbG9uZyAqbm9kZTsKKwlpbnQgZmlsbDsKKworCW5vZGUgPSBidHJlZV9ub2RlX2FsbG9jKGhlYWQsIGdmcCk7CisJaWYgKCFub2RlKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoaGVhZC0+bm9kZSkgeworCQlmaWxsID0gZ2V0ZmlsbChnZW8sIGhlYWQtPm5vZGUsIDApOworCQlzZXRrZXkoZ2VvLCBub2RlLCAwLCBia2V5KGdlbywgaGVhZC0+bm9kZSwgZmlsbCAtIDEpKTsKKwkJc2V0dmFsKGdlbywgbm9kZSwgMCwgaGVhZC0+bm9kZSk7CisJfQorCWhlYWQtPm5vZGUgPSBub2RlOworCWhlYWQtPmhlaWdodCsrOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBidHJlZV9zaHJpbmsoc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQsIHN0cnVjdCBidHJlZV9nZW8gKmdlbykKK3sKKwl1bnNpZ25lZCBsb25nICpub2RlOworCWludCBmaWxsOworCisJaWYgKGhlYWQtPmhlaWdodCA8PSAxKQorCQlyZXR1cm47CisKKwlub2RlID0gaGVhZC0+bm9kZTsKKwlmaWxsID0gZ2V0ZmlsbChnZW8sIG5vZGUsIDApOworCUJVR19PTihmaWxsID4gMSk7CisJaGVhZC0+bm9kZSA9IGJ2YWwoZ2VvLCBub2RlLCAwKTsKKwloZWFkLT5oZWlnaHQtLTsKKwltZW1wb29sX2ZyZWUobm9kZSwgaGVhZC0+bWVtcG9vbCk7Cit9CisKK3N0YXRpYyBpbnQgYnRyZWVfaW5zZXJ0X2xldmVsKHN0cnVjdCBidHJlZV9oZWFkICpoZWFkLCBzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sCisJCQkgICAgICB1bnNpZ25lZCBsb25nICprZXksIHZvaWQgKnZhbCwgaW50IGxldmVsLAorCQkJICAgICAgZ2ZwX3QgZ2ZwKQoreworCXVuc2lnbmVkIGxvbmcgKm5vZGU7CisJaW50IGksIHBvcywgZmlsbCwgZXJyOworCisJQlVHX09OKCF2YWwpOworCWlmIChoZWFkLT5oZWlnaHQgPCBsZXZlbCkgeworCQllcnIgPSBidHJlZV9ncm93KGhlYWQsIGdlbywgZ2ZwKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCityZXRyeToKKwlub2RlID0gZmluZF9sZXZlbChoZWFkLCBnZW8sIGtleSwgbGV2ZWwpOworCXBvcyA9IGdldHBvcyhnZW8sIG5vZGUsIGtleSk7CisJZmlsbCA9IGdldGZpbGwoZ2VvLCBub2RlLCBwb3MpOworCS8qIHR3byBpZGVudGljYWwga2V5cyBhcmUgbm90IGFsbG93ZWQgKi8KKwlCVUdfT04ocG9zIDwgZmlsbCAmJiBrZXljbXAoZ2VvLCBub2RlLCBwb3MsIGtleSkgPT0gMCk7CisKKwlpZiAoZmlsbCA9PSBnZW8tPm5vX3BhaXJzKSB7CisJCS8qIG5lZWQgdG8gc3BsaXQgbm9kZSAqLworCQl1bnNpZ25lZCBsb25nICpuZXc7CisKKwkJbmV3ID0gYnRyZWVfbm9kZV9hbGxvYyhoZWFkLCBnZnApOworCQlpZiAoIW5ldykKKwkJCXJldHVybiAtRU5PTUVNOworCQllcnIgPSBidHJlZV9pbnNlcnRfbGV2ZWwoaGVhZCwgZ2VvLAorCQkJCWJrZXkoZ2VvLCBub2RlLCBmaWxsIC8gMiAtIDEpLAorCQkJCW5ldywgbGV2ZWwgKyAxLCBnZnApOworCQlpZiAoZXJyKSB7CisJCQltZW1wb29sX2ZyZWUobmV3LCBoZWFkLT5tZW1wb29sKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IGZpbGwgLyAyOyBpKyspIHsKKwkJCXNldGtleShnZW8sIG5ldywgaSwgYmtleShnZW8sIG5vZGUsIGkpKTsKKwkJCXNldHZhbChnZW8sIG5ldywgaSwgYnZhbChnZW8sIG5vZGUsIGkpKTsKKwkJCXNldGtleShnZW8sIG5vZGUsIGksIGJrZXkoZ2VvLCBub2RlLCBpICsgZmlsbCAvIDIpKTsKKwkJCXNldHZhbChnZW8sIG5vZGUsIGksIGJ2YWwoZ2VvLCBub2RlLCBpICsgZmlsbCAvIDIpKTsKKwkJCWNsZWFycGFpcihnZW8sIG5vZGUsIGkgKyBmaWxsIC8gMik7CisJCX0KKwkJaWYgKGZpbGwgJiAxKSB7CisJCQlzZXRrZXkoZ2VvLCBub2RlLCBpLCBia2V5KGdlbywgbm9kZSwgZmlsbCAtIDEpKTsKKwkJCXNldHZhbChnZW8sIG5vZGUsIGksIGJ2YWwoZ2VvLCBub2RlLCBmaWxsIC0gMSkpOworCQkJY2xlYXJwYWlyKGdlbywgbm9kZSwgZmlsbCAtIDEpOworCQl9CisJCWdvdG8gcmV0cnk7CisJfQorCUJVR19PTihmaWxsID49IGdlby0+bm9fcGFpcnMpOworCisJLyogc2hpZnQgYW5kIGluc2VydCAqLworCWZvciAoaSA9IGZpbGw7IGkgPiBwb3M7IGktLSkgeworCQlzZXRrZXkoZ2VvLCBub2RlLCBpLCBia2V5KGdlbywgbm9kZSwgaSAtIDEpKTsKKwkJc2V0dmFsKGdlbywgbm9kZSwgaSwgYnZhbChnZW8sIG5vZGUsIGkgLSAxKSk7CisJfQorCXNldGtleShnZW8sIG5vZGUsIHBvcywga2V5KTsKKwlzZXR2YWwoZ2VvLCBub2RlLCBwb3MsIHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGJ0cmVlX2luc2VydChzdHJ1Y3QgYnRyZWVfaGVhZCAqaGVhZCwgc3RydWN0IGJ0cmVlX2dlbyAqZ2VvLAorCQl1bnNpZ25lZCBsb25nICprZXksIHZvaWQgKnZhbCwgZ2ZwX3QgZ2ZwKQoreworCXJldHVybiBidHJlZV9pbnNlcnRfbGV2ZWwoaGVhZCwgZ2VvLCBrZXksIHZhbCwgMSwgZ2ZwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJ0cmVlX2luc2VydCk7CisKK3N0YXRpYyB2b2lkICpidHJlZV9yZW1vdmVfbGV2ZWwoc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQsIHN0cnVjdCBidHJlZV9nZW8gKmdlbywKKwkJdW5zaWduZWQgbG9uZyAqa2V5LCBpbnQgbGV2ZWwpOworc3RhdGljIHZvaWQgbWVyZ2Uoc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQsIHN0cnVjdCBidHJlZV9nZW8gKmdlbywgaW50IGxldmVsLAorCQl1bnNpZ25lZCBsb25nICpsZWZ0LCBpbnQgbGZpbGwsCisJCXVuc2lnbmVkIGxvbmcgKnJpZ2h0LCBpbnQgcmZpbGwsCisJCXVuc2lnbmVkIGxvbmcgKnBhcmVudCwgaW50IGxwb3MpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmZpbGw7IGkrKykgeworCQkvKiBNb3ZlIGFsbCBrZXlzIHRvIHRoZSBsZWZ0ICovCisJCXNldGtleShnZW8sIGxlZnQsIGxmaWxsICsgaSwgYmtleShnZW8sIHJpZ2h0LCBpKSk7CisJCXNldHZhbChnZW8sIGxlZnQsIGxmaWxsICsgaSwgYnZhbChnZW8sIHJpZ2h0LCBpKSk7CisJfQorCS8qIEV4Y2hhbmdlIGxlZnQgYW5kIHJpZ2h0IGNoaWxkIGluIHBhcmVudCAqLworCXNldHZhbChnZW8sIHBhcmVudCwgbHBvcywgcmlnaHQpOworCXNldHZhbChnZW8sIHBhcmVudCwgbHBvcyArIDEsIGxlZnQpOworCS8qIFJlbW92ZSBsZWZ0IChmb3JtZXJseSByaWdodCkgY2hpbGQgZnJvbSBwYXJlbnQgKi8KKwlidHJlZV9yZW1vdmVfbGV2ZWwoaGVhZCwgZ2VvLCBia2V5KGdlbywgcGFyZW50LCBscG9zKSwgbGV2ZWwgKyAxKTsKKwltZW1wb29sX2ZyZWUocmlnaHQsIGhlYWQtPm1lbXBvb2wpOworfQorCitzdGF0aWMgdm9pZCByZWJhbGFuY2Uoc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQsIHN0cnVjdCBidHJlZV9nZW8gKmdlbywKKwkJdW5zaWduZWQgbG9uZyAqa2V5LCBpbnQgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgKmNoaWxkLCBpbnQgZmlsbCkKK3sKKwl1bnNpZ25lZCBsb25nICpwYXJlbnQsICpsZWZ0ID0gTlVMTCwgKnJpZ2h0ID0gTlVMTDsKKwlpbnQgaSwgbm9fbGVmdCwgbm9fcmlnaHQ7CisKKwlpZiAoZmlsbCA9PSAwKSB7CisJCS8qIEJlY2F1c2Ugd2UgZG9uJ3Qgc3RlYWwgZW50cmllcyBmcm9tIGEgbmVpZ2JvdXIsIHRoaXMgY2FzZQorCQkgKiBjYW4gaGFwcGVuLiAgUGFyZW50IG5vZGUgY29udGFpbnMgYSBzaW5nbGUgY2hpbGQsIHRoaXMKKwkJICogbm9kZSwgc28gbWVyZ2luZyB3aXRoIGEgc2libGluZyBuZXZlciBoYXBwZW5zLgorCQkgKi8KKwkJYnRyZWVfcmVtb3ZlX2xldmVsKGhlYWQsIGdlbywga2V5LCBsZXZlbCArIDEpOworCQltZW1wb29sX2ZyZWUoY2hpbGQsIGhlYWQtPm1lbXBvb2wpOworCQlyZXR1cm47CisJfQorCisJcGFyZW50ID0gZmluZF9sZXZlbChoZWFkLCBnZW8sIGtleSwgbGV2ZWwgKyAxKTsKKwlpID0gZ2V0cG9zKGdlbywgcGFyZW50LCBrZXkpOworCUJVR19PTihidmFsKGdlbywgcGFyZW50LCBpKSAhPSBjaGlsZCk7CisKKwlpZiAoaSA+IDApIHsKKwkJbGVmdCA9IGJ2YWwoZ2VvLCBwYXJlbnQsIGkgLSAxKTsKKwkJbm9fbGVmdCA9IGdldGZpbGwoZ2VvLCBsZWZ0LCAwKTsKKwkJaWYgKGZpbGwgKyBub19sZWZ0IDw9IGdlby0+bm9fcGFpcnMpIHsKKwkJCW1lcmdlKGhlYWQsIGdlbywgbGV2ZWwsCisJCQkJCWxlZnQsIG5vX2xlZnQsCisJCQkJCWNoaWxkLCBmaWxsLAorCQkJCQlwYXJlbnQsIGkgLSAxKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlpZiAoaSArIDEgPCBnZXRmaWxsKGdlbywgcGFyZW50LCBpKSkgeworCQlyaWdodCA9IGJ2YWwoZ2VvLCBwYXJlbnQsIGkgKyAxKTsKKwkJbm9fcmlnaHQgPSBnZXRmaWxsKGdlbywgcmlnaHQsIDApOworCQlpZiAoZmlsbCArIG5vX3JpZ2h0IDw9IGdlby0+bm9fcGFpcnMpIHsKKwkJCW1lcmdlKGhlYWQsIGdlbywgbGV2ZWwsCisJCQkJCWNoaWxkLCBmaWxsLAorCQkJCQlyaWdodCwgbm9fcmlnaHQsCisJCQkJCXBhcmVudCwgaSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJLyoKKwkgKiBXZSBjb3VsZCBhbHNvIHRyeSB0byBzdGVhbCBvbmUgZW50cnkgZnJvbSB0aGUgbGVmdCBvciByaWdodAorCSAqIG5laWdoYm9yLiAgQnkgbm90IGRvaW5nIHNvIHdlIGNoYW5nZWQgdGhlIGludmFyaWFudCBmcm9tCisJICogImFsbCBub2RlcyBhcmUgYXQgbGVhc3QgaGFsZiBmdWxsIiB0byAibm8gdHdvIG5laWdoYm9yaW5nCisJICogbm9kZXMgY2FuIGJlIG1lcmdlZCIuICBXaGljaCBtZWFucyB0aGF0IHRoZSBhdmVyYWdlIGZpbGwgb2YKKwkgKiBhbGwgbm9kZXMgaXMgc3RpbGwgaGFsZiBvciBiZXR0ZXIuCisJICovCit9CisKK3N0YXRpYyB2b2lkICpidHJlZV9yZW1vdmVfbGV2ZWwoc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQsIHN0cnVjdCBidHJlZV9nZW8gKmdlbywKKwkJdW5zaWduZWQgbG9uZyAqa2V5LCBpbnQgbGV2ZWwpCit7CisJdW5zaWduZWQgbG9uZyAqbm9kZTsKKwlpbnQgaSwgcG9zLCBmaWxsOworCXZvaWQgKnJldDsKKworCWlmIChsZXZlbCA+IGhlYWQtPmhlaWdodCkgeworCQkvKiB3ZSByZWN1cnNlZCBhbGwgdGhlIHdheSB1cCAqLworCQloZWFkLT5oZWlnaHQgPSAwOworCQloZWFkLT5ub2RlID0gTlVMTDsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJbm9kZSA9IGZpbmRfbGV2ZWwoaGVhZCwgZ2VvLCBrZXksIGxldmVsKTsKKwlwb3MgPSBnZXRwb3MoZ2VvLCBub2RlLCBrZXkpOworCWZpbGwgPSBnZXRmaWxsKGdlbywgbm9kZSwgcG9zKTsKKwlpZiAoKGxldmVsID09IDEpICYmIChrZXljbXAoZ2VvLCBub2RlLCBwb3MsIGtleSkgIT0gMCkpCisJCXJldHVybiBOVUxMOworCXJldCA9IGJ2YWwoZ2VvLCBub2RlLCBwb3MpOworCisJLyogcmVtb3ZlIGFuZCBzaGlmdCAqLworCWZvciAoaSA9IHBvczsgaSA8IGZpbGwgLSAxOyBpKyspIHsKKwkJc2V0a2V5KGdlbywgbm9kZSwgaSwgYmtleShnZW8sIG5vZGUsIGkgKyAxKSk7CisJCXNldHZhbChnZW8sIG5vZGUsIGksIGJ2YWwoZ2VvLCBub2RlLCBpICsgMSkpOworCX0KKwljbGVhcnBhaXIoZ2VvLCBub2RlLCBmaWxsIC0gMSk7CisKKwlpZiAoZmlsbCAtIDEgPCBnZW8tPm5vX3BhaXJzIC8gMikgeworCQlpZiAobGV2ZWwgPCBoZWFkLT5oZWlnaHQpCisJCQlyZWJhbGFuY2UoaGVhZCwgZ2VvLCBrZXksIGxldmVsLCBub2RlLCBmaWxsIC0gMSk7CisJCWVsc2UgaWYgKGZpbGwgLSAxID09IDEpCisJCQlidHJlZV9zaHJpbmsoaGVhZCwgZ2VvKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkICpidHJlZV9yZW1vdmUoc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQsIHN0cnVjdCBidHJlZV9nZW8gKmdlbywKKwkJdW5zaWduZWQgbG9uZyAqa2V5KQoreworCWlmIChoZWFkLT5oZWlnaHQgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gYnRyZWVfcmVtb3ZlX2xldmVsKGhlYWQsIGdlbywga2V5LCAxKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJ0cmVlX3JlbW92ZSk7CisKK2ludCBidHJlZV9tZXJnZShzdHJ1Y3QgYnRyZWVfaGVhZCAqdGFyZ2V0LCBzdHJ1Y3QgYnRyZWVfaGVhZCAqdmljdGltLAorCQlzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sIGdmcF90IGdmcCkKK3sKKwl1bnNpZ25lZCBsb25nIGtleVtnZW8tPmtleWxlbl07CisJdW5zaWduZWQgbG9uZyBkdXBbZ2VvLT5rZXlsZW5dOworCXZvaWQgKnZhbDsKKwlpbnQgZXJyOworCisJQlVHX09OKHRhcmdldCA9PSB2aWN0aW0pOworCisJaWYgKCEodGFyZ2V0LT5ub2RlKSkgeworCQkvKiB0YXJnZXQgaXMgZW1wdHksIGp1c3QgY29weSBmaWVsZHMgb3ZlciAqLworCQl0YXJnZXQtPm5vZGUgPSB2aWN0aW0tPm5vZGU7CisJCXRhcmdldC0+aGVpZ2h0ID0gdmljdGltLT5oZWlnaHQ7CisJCV9fYnRyZWVfaW5pdCh2aWN0aW0pOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBUT0RPOiBUaGlzIG5lZWRzIHNvbWUgb3B0aW1pemF0aW9ucy4gIEN1cnJlbnRseSB3ZSBkbyB0aHJlZSB0cmVlCisJICogd2Fsa3MgdG8gcmVtb3ZlIGEgc2luZ2xlIG9iamVjdCBmcm9tIHRoZSB2aWN0aW0uCisJICovCisJZm9yICg7OykgeworCQlpZiAoIWJ0cmVlX2xhc3QodmljdGltLCBnZW8sIGtleSkpCisJCQlicmVhazsKKwkJdmFsID0gYnRyZWVfbG9va3VwKHZpY3RpbSwgZ2VvLCBrZXkpOworCQllcnIgPSBidHJlZV9pbnNlcnQodGFyZ2V0LCBnZW8sIGtleSwgdmFsLCBnZnApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJLyogV2UgbXVzdCBtYWtlIGEgY29weSBvZiB0aGUga2V5LCBhcyB0aGUgb3JpZ2luYWwgd2lsbCBnZXQKKwkJICogbWFuZ2xlZCBpbnNpZGUgYnRyZWVfcmVtb3ZlLiAqLworCQlsb25nY3B5KGR1cCwga2V5LCBnZW8tPmtleWxlbik7CisJCWJ0cmVlX3JlbW92ZSh2aWN0aW0sIGdlbywgZHVwKTsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChidHJlZV9tZXJnZSk7CisKK3N0YXRpYyBzaXplX3QgX19idHJlZV9mb3JfZWFjaChzdHJ1Y3QgYnRyZWVfaGVhZCAqaGVhZCwgc3RydWN0IGJ0cmVlX2dlbyAqZ2VvLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKm5vZGUsIHVuc2lnbmVkIGxvbmcgb3BhcXVlLAorCQkJICAgICAgIHZvaWQgKCpmdW5jKSh2b2lkICplbGVtLCB1bnNpZ25lZCBsb25nIG9wYXF1ZSwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgKmtleSwgc2l6ZV90IGluZGV4LAorCQkJCQkgICAgdm9pZCAqZnVuYzIpLAorCQkJICAgICAgIHZvaWQgKmZ1bmMyLCBpbnQgcmVhcCwgaW50IGhlaWdodCwgc2l6ZV90IGNvdW50KQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgKmNoaWxkOworCisJZm9yIChpID0gMDsgaSA8IGdlby0+bm9fcGFpcnM7IGkrKykgeworCQljaGlsZCA9IGJ2YWwoZ2VvLCBub2RlLCBpKTsKKwkJaWYgKCFjaGlsZCkKKwkJCWJyZWFrOworCQlpZiAoaGVpZ2h0ID4gMSkKKwkJCWNvdW50ID0gX19idHJlZV9mb3JfZWFjaChoZWFkLCBnZW8sIGNoaWxkLCBvcGFxdWUsCisJCQkJCWZ1bmMsIGZ1bmMyLCByZWFwLCBoZWlnaHQgLSAxLCBjb3VudCk7CisJCWVsc2UKKwkJCWZ1bmMoY2hpbGQsIG9wYXF1ZSwgYmtleShnZW8sIG5vZGUsIGkpLCBjb3VudCsrLAorCQkJCQlmdW5jMik7CisJfQorCWlmIChyZWFwKQorCQltZW1wb29sX2ZyZWUobm9kZSwgaGVhZC0+bWVtcG9vbCk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdm9pZCBlbXB0eSh2b2lkICplbGVtLCB1bnNpZ25lZCBsb25nIG9wYXF1ZSwgdW5zaWduZWQgbG9uZyAqa2V5LAorCQkgIHNpemVfdCBpbmRleCwgdm9pZCAqZnVuYzIpCit7Cit9CisKK3ZvaWQgdmlzaXRvcmwodm9pZCAqZWxlbSwgdW5zaWduZWQgbG9uZyBvcGFxdWUsIHVuc2lnbmVkIGxvbmcgKmtleSwKKwkgICAgICBzaXplX3QgaW5kZXgsIHZvaWQgKl9fZnVuYykKK3sKKwl2aXNpdG9ybF90IGZ1bmMgPSBfX2Z1bmM7CisKKwlmdW5jKGVsZW0sIG9wYXF1ZSwgKmtleSwgaW5kZXgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodmlzaXRvcmwpOworCit2b2lkIHZpc2l0b3IzMih2b2lkICplbGVtLCB1bnNpZ25lZCBsb25nIG9wYXF1ZSwgdW5zaWduZWQgbG9uZyAqX19rZXksCisJICAgICAgIHNpemVfdCBpbmRleCwgdm9pZCAqX19mdW5jKQoreworCXZpc2l0b3IzMl90IGZ1bmMgPSBfX2Z1bmM7CisJdTMyICprZXkgPSAodm9pZCAqKV9fa2V5OworCisJZnVuYyhlbGVtLCBvcGFxdWUsICprZXksIGluZGV4KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHZpc2l0b3IzMik7CisKK3ZvaWQgdmlzaXRvcjY0KHZvaWQgKmVsZW0sIHVuc2lnbmVkIGxvbmcgb3BhcXVlLCB1bnNpZ25lZCBsb25nICpfX2tleSwKKwkgICAgICAgc2l6ZV90IGluZGV4LCB2b2lkICpfX2Z1bmMpCit7CisJdmlzaXRvcjY0X3QgZnVuYyA9IF9fZnVuYzsKKwl1NjQgKmtleSA9ICh2b2lkICopX19rZXk7CisKKwlmdW5jKGVsZW0sIG9wYXF1ZSwgKmtleSwgaW5kZXgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodmlzaXRvcjY0KTsKKwordm9pZCB2aXNpdG9yMTI4KHZvaWQgKmVsZW0sIHVuc2lnbmVkIGxvbmcgb3BhcXVlLCB1bnNpZ25lZCBsb25nICpfX2tleSwKKwkJc2l6ZV90IGluZGV4LCB2b2lkICpfX2Z1bmMpCit7CisJdmlzaXRvcjEyOF90IGZ1bmMgPSBfX2Z1bmM7CisJdTY0ICprZXkgPSAodm9pZCAqKV9fa2V5OworCisJZnVuYyhlbGVtLCBvcGFxdWUsIGtleVswXSwga2V5WzFdLCBpbmRleCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh2aXNpdG9yMTI4KTsKKworc2l6ZV90IGJ0cmVlX3Zpc2l0b3Ioc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQsIHN0cnVjdCBidHJlZV9nZW8gKmdlbywKKwkJICAgICB1bnNpZ25lZCBsb25nIG9wYXF1ZSwKKwkJICAgICB2b2lkICgqZnVuYykodm9pZCAqZWxlbSwgdW5zaWduZWQgbG9uZyBvcGFxdWUsCisJCSAgICAgCQkgIHVuc2lnbmVkIGxvbmcgKmtleSwKKwkJICAgICAJCSAgc2l6ZV90IGluZGV4LCB2b2lkICpmdW5jMiksCisJCSAgICAgdm9pZCAqZnVuYzIpCit7CisJc2l6ZV90IGNvdW50ID0gMDsKKworCWlmICghZnVuYzIpCisJCWZ1bmMgPSBlbXB0eTsKKwlpZiAoaGVhZC0+bm9kZSkKKwkJY291bnQgPSBfX2J0cmVlX2Zvcl9lYWNoKGhlYWQsIGdlbywgaGVhZC0+bm9kZSwgb3BhcXVlLCBmdW5jLAorCQkJCWZ1bmMyLCAwLCBoZWFkLT5oZWlnaHQsIDApOworCXJldHVybiBjb3VudDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJ0cmVlX3Zpc2l0b3IpOworCitzaXplX3QgYnRyZWVfZ3JpbV92aXNpdG9yKHN0cnVjdCBidHJlZV9oZWFkICpoZWFkLCBzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sCisJCQkgIHVuc2lnbmVkIGxvbmcgb3BhcXVlLAorCQkJICB2b2lkICgqZnVuYykodm9pZCAqZWxlbSwgdW5zaWduZWQgbG9uZyBvcGFxdWUsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKmtleSwKKwkJCQkgICAgICAgc2l6ZV90IGluZGV4LCB2b2lkICpmdW5jMiksCisJCQkgIHZvaWQgKmZ1bmMyKQoreworCXNpemVfdCBjb3VudCA9IDA7CisKKwlpZiAoIWZ1bmMyKQorCQlmdW5jID0gZW1wdHk7CisJaWYgKGhlYWQtPm5vZGUpCisJCWNvdW50ID0gX19idHJlZV9mb3JfZWFjaChoZWFkLCBnZW8sIGhlYWQtPm5vZGUsIG9wYXF1ZSwgZnVuYywKKwkJCQlmdW5jMiwgMSwgaGVhZC0+aGVpZ2h0LCAwKTsKKwlfX2J0cmVlX2luaXQoaGVhZCk7CisJcmV0dXJuIGNvdW50OworfQorRVhQT1JUX1NZTUJPTF9HUEwoYnRyZWVfZ3JpbV92aXNpdG9yKTsKKworc3RhdGljIGludCBfX2luaXQgYnRyZWVfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlidHJlZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiYnRyZWVfbm9kZSIsIE5PREVTSVpFLCAwLAorCQkJU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGJ0cmVlX21vZHVsZV9leGl0KHZvaWQpCit7CisJa21lbV9jYWNoZV9kZXN0cm95KGJ0cmVlX2NhY2hlcCk7Cit9CisKKy8qIElmIGNvcmUgY29kZSBzdGFydHMgdXNpbmcgYnRyZWUsIGluaXRpYWxpemF0aW9uIHNob3VsZCBoYXBwZW4gZXZlbiBlYXJsaWVyICovCittb2R1bGVfaW5pdChidHJlZV9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChidHJlZV9tb2R1bGVfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkpvZXJuIEVuZ2VsIDxqb2VybkBsb2dmcy5vcmc+Iik7CitNT0RVTEVfQVVUSE9SKCJKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvbGliL2NyYzMyLmMgYi9saWIvY3JjMzIuYwppbmRleCAwMmUzYjMxLi4wZjQ1ZmJmIDEwMDY0NAotLS0gYS9saWIvY3JjMzIuYworKysgYi9saWIvY3JjMzIuYwpAQCAtMzAsMTEgKzMwLDE1IEBACiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgImNyYzMyZGVmcy5oIgogI2lmIENSQ19MRV9CSVRTID09IDgKLSNkZWZpbmUgdG9sZSh4KSBfX2NvbnN0YW50X2NwdV90b19sZTMyKHgpCi0jZGVmaW5lIHRvYmUoeCkgX19jb25zdGFudF9jcHVfdG9fYmUzMih4KQorIyBkZWZpbmUgdG9sZSh4KSBfX2NvbnN0YW50X2NwdV90b19sZTMyKHgpCiAjZWxzZQotI2RlZmluZSB0b2xlKHgpICh4KQotI2RlZmluZSB0b2JlKHgpICh4KQorIyBkZWZpbmUgdG9sZSh4KSAoeCkKKyNlbmRpZgorCisjaWYgQ1JDX0JFX0JJVFMgPT0gOAorIyBkZWZpbmUgdG9iZSh4KSBfX2NvbnN0YW50X2NwdV90b19iZTMyKHgpCisjZWxzZQorIyBkZWZpbmUgdG9iZSh4KSAoeCkKICNlbmRpZgogI2luY2x1ZGUgImNyYzMydGFibGUuaCIKIApAQCAtNTIsMjAgKzU2LDE5IEBACiAjIGVsc2UKICMgIGRlZmluZSBET19DUkMoeCkgY3JjID0gdGFiWygoY3JjID4+IDI0KSBeICh4KSkgJiAyNTVdIF4gKGNyYyA8PCA4KQogIyBlbmRpZgotCWNvbnN0IHUzMiAqYiA9IChjb25zdCB1MzIgKilidWY7CisJY29uc3QgdTMyICpiOwogCXNpemVfdCAgICByZW1fbGVuOwogCiAJLyogQWxpZ24gaXQgKi8KLQlpZiAodW5saWtlbHkoKGxvbmcpYiAmIDMgJiYgbGVuKSkgewotCQl1OCAqcCA9ICh1OCAqKWI7CisJaWYgKHVubGlrZWx5KChsb25nKWJ1ZiAmIDMgJiYgbGVuKSkgewogCQlkbyB7Ci0JCQlET19DUkMoKnArKyk7Ci0JCX0gd2hpbGUgKCgtLWxlbikgJiYgKChsb25nKXApJjMpOwotCQliID0gKHUzMiAqKXA7CisJCQlET19DUkMoKmJ1ZisrKTsKKwkJfSB3aGlsZSAoKC0tbGVuKSAmJiAoKGxvbmcpYnVmKSYzKTsKIAl9CiAJcmVtX2xlbiA9IGxlbiAmIDM7CiAJLyogbG9hZCBkYXRhIDMyIGJpdHMgd2lkZSwgeG9yIGRhdGEgMzIgYml0cyB3aWRlLiAqLwogCWxlbiA9IGxlbiA+PiAyOworCWIgPSAoY29uc3QgdTMyICopYnVmOwogCWZvciAoLS1iOyBsZW47IC0tbGVuKSB7CiAJCWNyYyBePSAqKytiOyAvKiB1c2UgcHJlIGluY3JlbWVudCBmb3Igc3BlZWQgKi8KIAkJRE9fQ1JDKDApOwpAQCAtODIsNiArODUsNyBAQAogCQl9IHdoaWxlICgtLWxlbik7CiAJfQogCXJldHVybiBjcmM7CisjdW5kZWYgRE9fQ1JDCiB9CiAjZW5kaWYKIC8qKgpAQCAtMTE5LDkgKzEyMyw2IEBACiAJY3JjID0gX19jcHVfdG9fbGUzMihjcmMpOwogCWNyYyA9IGNyYzMyX2JvZHkoY3JjLCBwLCBsZW4sIHRhYik7CiAJcmV0dXJuIF9fbGUzMl90b19jcHUoY3JjKTsKLSN1bmRlZiBFTkRJQU5fU0hJRlQKLSN1bmRlZiBET19DUkMKLQogIyBlbGlmIENSQ19MRV9CSVRTID09IDQKIAl3aGlsZSAobGVuLS0pIHsKIAkJY3JjIF49ICpwKys7CkBAIC0xNzksOSArMTgwLDYgQEAKIAljcmMgPSBfX2NwdV90b19iZTMyKGNyYyk7CiAJY3JjID0gY3JjMzJfYm9keShjcmMsIHAsIGxlbiwgdGFiKTsKIAlyZXR1cm4gX19iZTMyX3RvX2NwdShjcmMpOwotI3VuZGVmIEVORElBTl9TSElGVAotI3VuZGVmIERPX0NSQwotCiAjIGVsaWYgQ1JDX0JFX0JJVFMgPT0gNAogCXdoaWxlIChsZW4tLSkgewogCQljcmMgXj0gKnArKyA8PCAyNDsKZGlmZiAtLWdpdCBhL2xpYi9saXN0X3NvcnQuYyBiL2xpYi9saXN0X3NvcnQuYwppbmRleCAxOWQxMWUwLi40YjVjYjc5IDEwMDY0NAotLS0gYS9saWIvbGlzdF9zb3J0LmMKKysrIGIvbGliL2xpc3Rfc29ydC5jCkBAIC00LDk5ICs0LDIxNCBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKKyNkZWZpbmUgTUFYX0xJU1RfTEVOR1RIX0JJVFMgMjAKKworLyoKKyAqIFJldHVybnMgYSBsaXN0IG9yZ2FuaXplZCBpbiBhbiBpbnRlcm1lZGlhdGUgZm9ybWF0IHN1aXRlZAorICogdG8gY2hhaW5pbmcgb2YgbWVyZ2UoKSBjYWxsczogbnVsbC10ZXJtaW5hdGVkLCBubyByZXNlcnZlZCBvcgorICogc2VudGluZWwgaGVhZCBub2RlLCAicHJldiIgbGlua3Mgbm90IG1haW50YWluZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICptZXJnZSh2b2lkICpwcml2LAorCQkJCWludCAoKmNtcCkodm9pZCAqcHJpdiwgc3RydWN0IGxpc3RfaGVhZCAqYSwKKwkJCQkJc3RydWN0IGxpc3RfaGVhZCAqYiksCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqYSwgc3RydWN0IGxpc3RfaGVhZCAqYikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQsICp0YWlsID0gJmhlYWQ7CisKKwl3aGlsZSAoYSAmJiBiKSB7CisJCS8qIGlmIGVxdWFsLCB0YWtlICdhJyAtLSBpbXBvcnRhbnQgZm9yIHNvcnQgc3RhYmlsaXR5ICovCisJCWlmICgoKmNtcCkocHJpdiwgYSwgYikgPD0gMCkgeworCQkJdGFpbC0+bmV4dCA9IGE7CisJCQlhID0gYS0+bmV4dDsKKwkJfSBlbHNlIHsKKwkJCXRhaWwtPm5leHQgPSBiOworCQkJYiA9IGItPm5leHQ7CisJCX0KKwkJdGFpbCA9IHRhaWwtPm5leHQ7CisJfQorCXRhaWwtPm5leHQgPSBhPzpiOworCXJldHVybiBoZWFkLm5leHQ7Cit9CisKKy8qCisgKiBDb21iaW5lIGZpbmFsIGxpc3QgbWVyZ2Ugd2l0aCByZXN0b3JhdGlvbiBvZiBzdGFuZGFyZCBkb3VibHktbGlua2VkCisgKiBsaXN0IHN0cnVjdHVyZS4gIFRoaXMgYXBwcm9hY2ggZHVwbGljYXRlcyBjb2RlIGZyb20gbWVyZ2UoKSwgYnV0CisgKiBydW5zIGZhc3RlciB0aGFuIHRoZSB0aWRpZXIgYWx0ZXJuYXRpdmVzIG9mIGVpdGhlciBhIHNlcGFyYXRlIGZpbmFsCisgKiBwcmV2LWxpbmsgcmVzdG9yYXRpb24gcGFzcywgb3IgbWFpbnRhaW5pbmcgdGhlIHByZXYgbGlua3MKKyAqIHRocm91Z2hvdXQuCisgKi8KK3N0YXRpYyB2b2lkIG1lcmdlX2FuZF9yZXN0b3JlX2JhY2tfbGlua3Modm9pZCAqcHJpdiwKKwkJCQlpbnQgKCpjbXApKHZvaWQgKnByaXYsIHN0cnVjdCBsaXN0X2hlYWQgKmEsCisJCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmIpLAorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqYSwgc3RydWN0IGxpc3RfaGVhZCAqYikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0YWlsID0gaGVhZDsKKworCXdoaWxlIChhICYmIGIpIHsKKwkJLyogaWYgZXF1YWwsIHRha2UgJ2EnIC0tIGltcG9ydGFudCBmb3Igc29ydCBzdGFiaWxpdHkgKi8KKwkJaWYgKCgqY21wKShwcml2LCBhLCBiKSA8PSAwKSB7CisJCQl0YWlsLT5uZXh0ID0gYTsKKwkJCWEtPnByZXYgPSB0YWlsOworCQkJYSA9IGEtPm5leHQ7CisJCX0gZWxzZSB7CisJCQl0YWlsLT5uZXh0ID0gYjsKKwkJCWItPnByZXYgPSB0YWlsOworCQkJYiA9IGItPm5leHQ7CisJCX0KKwkJdGFpbCA9IHRhaWwtPm5leHQ7CisJfQorCXRhaWwtPm5leHQgPSBhID8gOiBiOworCisJZG8geworCQkvKgorCQkgKiBJbiB3b3JzdCBjYXNlcyB0aGlzIGxvb3AgbWF5IHJ1biBtYW55IGl0ZXJhdGlvbnMuCisJCSAqIENvbnRpbnVlIGNhbGxiYWNrcyB0byB0aGUgY2xpZW50IGV2ZW4gdGhvdWdoIG5vCisJCSAqIGVsZW1lbnQgY29tcGFyaXNvbiBpcyBuZWVkZWQsIHNvIHRoZSBjbGllbnQncyBjbXAoKQorCQkgKiByb3V0aW5lIGNhbiBpbnZva2UgY29uZF9yZXNjaGVkKCkgcGVyaW9kaWNhbGx5LgorCQkgKi8KKwkJKCpjbXApKHByaXYsIHRhaWwsIHRhaWwpOworCisJCXRhaWwtPm5leHQtPnByZXYgPSB0YWlsOworCQl0YWlsID0gdGFpbC0+bmV4dDsKKwl9IHdoaWxlICh0YWlsLT5uZXh0KTsKKworCXRhaWwtPm5leHQgPSBoZWFkOworCWhlYWQtPnByZXYgPSB0YWlsOworfQorCiAvKioKLSAqIGxpc3Rfc29ydCAtIHNvcnQgYSBsaXN0LgotICogQHByaXY6IHByaXZhdGUgZGF0YSwgcGFzc2VkIHRvIEBjbXAKKyAqIGxpc3Rfc29ydCAtIHNvcnQgYSBsaXN0CisgKiBAcHJpdjogcHJpdmF0ZSBkYXRhLCBvcGFxdWUgdG8gbGlzdF9zb3J0KCksIHBhc3NlZCB0byBAY21wCiAgKiBAaGVhZDogdGhlIGxpc3QgdG8gc29ydAogICogQGNtcDogdGhlIGVsZW1lbnRzIGNvbXBhcmlzb24gZnVuY3Rpb24KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGltcGxlbWVudGVkIGJ5IE1hcmsgSiBSb2JlcnRzIDxtanJAem5leC5vcmc+LiBJdAotICogaW1wbGVtZW50cyAibWVyZ2Ugc29ydCIgd2hpY2ggaGFzIE8obmxvZyhuKSkgY29tcGxleGl0eS4gVGhlIGxpc3QgaXMgc29ydGVkCi0gKiBpbiBhc2NlbmRpbmcgb3JkZXIuCisgKiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgIm1lcmdlIHNvcnQiLCB3aGljaCBoYXMgTyhubG9nKG4pKQorICogY29tcGxleGl0eS4KICAqCi0gKiBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBAY21wIGlzIHN1cHBvc2VkIHRvIHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlIGlmIEBhIGlzCi0gKiBsZXNzIHRoYW4gQGIsIGFuZCBhIHBvc2l0aXZlIHZhbHVlIGlmIEBhIGlzIGdyZWF0ZXIgdGhhbiBAYi4gSWYgQGEgYW5kIEBiCi0gKiBhcmUgZXF1aXZhbGVudCwgdGhlbiBpdCBkb2VzIG5vdCBtYXR0ZXIgd2hhdCB0aGlzIGZ1bmN0aW9uIHJldHVybnMuCisgKiBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBAY21wIG11c3QgcmV0dXJuIGEgbmVnYXRpdmUgdmFsdWUgaWYgQGEKKyAqIHNob3VsZCBzb3J0IGJlZm9yZSBAYiwgYW5kIGEgcG9zaXRpdmUgdmFsdWUgaWYgQGEgc2hvdWxkIHNvcnQgYWZ0ZXIKKyAqIEBiLiBJZiBAYSBhbmQgQGIgYXJlIGVxdWl2YWxlbnQsIGFuZCB0aGVpciBvcmlnaW5hbCByZWxhdGl2ZQorICogb3JkZXJpbmcgaXMgdG8gYmUgcHJlc2VydmVkLCBAY21wIG11c3QgcmV0dXJuIDAuCiAgKi8KIHZvaWQgbGlzdF9zb3J0KHZvaWQgKnByaXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCi0JICAgICAgIGludCAoKmNtcCkodm9pZCAqcHJpdiwgc3RydWN0IGxpc3RfaGVhZCAqYSwKLQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqYikpCisJCWludCAoKmNtcCkodm9pZCAqcHJpdiwgc3RydWN0IGxpc3RfaGVhZCAqYSwKKwkJCXN0cnVjdCBsaXN0X2hlYWQgKmIpKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKnAsICpxLCAqZSwgKmxpc3QsICp0YWlsLCAqb2xkaGVhZDsKLQlpbnQgaW5zaXplLCBubWVyZ2VzLCBwc2l6ZSwgcXNpemUsIGk7CisJc3RydWN0IGxpc3RfaGVhZCAqcGFydFtNQVhfTElTVF9MRU5HVEhfQklUUysxXTsgLyogc29ydGVkIHBhcnRpYWwgbGlzdHMKKwkJCQkJCS0tIGxhc3Qgc2xvdCBpcyBhIHNlbnRpbmVsICovCisJaW50IGxldjsgIC8qIGluZGV4IGludG8gcGFydFtdICovCisJaW50IG1heF9sZXYgPSAwOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CiAKIAlpZiAobGlzdF9lbXB0eShoZWFkKSkKIAkJcmV0dXJuOwogCisJbWVtc2V0KHBhcnQsIDAsIHNpemVvZihwYXJ0KSk7CisKKwloZWFkLT5wcmV2LT5uZXh0ID0gTlVMTDsKIAlsaXN0ID0gaGVhZC0+bmV4dDsKLQlsaXN0X2RlbChoZWFkKTsKLQlpbnNpemUgPSAxOwotCWZvciAoOzspIHsKLQkJcCA9IG9sZGhlYWQgPSBsaXN0OwotCQlsaXN0ID0gdGFpbCA9IE5VTEw7Ci0JCW5tZXJnZXMgPSAwOwogCi0JCXdoaWxlIChwKSB7Ci0JCQlubWVyZ2VzKys7Ci0JCQlxID0gcDsKLQkJCXBzaXplID0gMDsKLQkJCWZvciAoaSA9IDA7IGkgPCBpbnNpemU7IGkrKykgewotCQkJCXBzaXplKys7Ci0JCQkJcSA9IHEtPm5leHQgPT0gb2xkaGVhZCA/IE5VTEwgOiBxLT5uZXh0OwotCQkJCWlmICghcSkKLQkJCQkJYnJlYWs7Ci0JCQl9CisJd2hpbGUgKGxpc3QpIHsKKwkJc3RydWN0IGxpc3RfaGVhZCAqY3VyID0gbGlzdDsKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJCWN1ci0+bmV4dCA9IE5VTEw7CiAKLQkJCXFzaXplID0gaW5zaXplOwotCQkJd2hpbGUgKHBzaXplID4gMCB8fCAocXNpemUgPiAwICYmIHEpKSB7Ci0JCQkJaWYgKCFwc2l6ZSkgewotCQkJCQllID0gcTsKLQkJCQkJcSA9IHEtPm5leHQ7Ci0JCQkJCXFzaXplLS07Ci0JCQkJCWlmIChxID09IG9sZGhlYWQpCi0JCQkJCQlxID0gTlVMTDsKLQkJCQl9IGVsc2UgaWYgKCFxc2l6ZSB8fCAhcSkgewotCQkJCQllID0gcDsKLQkJCQkJcCA9IHAtPm5leHQ7Ci0JCQkJCXBzaXplLS07Ci0JCQkJCWlmIChwID09IG9sZGhlYWQpCi0JCQkJCQlwID0gTlVMTDsKLQkJCQl9IGVsc2UgaWYgKGNtcChwcml2LCBwLCBxKSA8PSAwKSB7Ci0JCQkJCWUgPSBwOwotCQkJCQlwID0gcC0+bmV4dDsKLQkJCQkJcHNpemUtLTsKLQkJCQkJaWYgKHAgPT0gb2xkaGVhZCkKLQkJCQkJCXAgPSBOVUxMOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWUgPSBxOwotCQkJCQlxID0gcS0+bmV4dDsKLQkJCQkJcXNpemUtLTsKLQkJCQkJaWYgKHEgPT0gb2xkaGVhZCkKLQkJCQkJCXEgPSBOVUxMOwotCQkJCX0KLQkJCQlpZiAodGFpbCkKLQkJCQkJdGFpbC0+bmV4dCA9IGU7Ci0JCQkJZWxzZQotCQkJCQlsaXN0ID0gZTsKLQkJCQllLT5wcmV2ID0gdGFpbDsKLQkJCQl0YWlsID0gZTsKLQkJCX0KLQkJCXAgPSBxOworCQlmb3IgKGxldiA9IDA7IHBhcnRbbGV2XTsgbGV2KyspIHsKKwkJCWN1ciA9IG1lcmdlKHByaXYsIGNtcCwgcGFydFtsZXZdLCBjdXIpOworCQkJcGFydFtsZXZdID0gTlVMTDsKIAkJfQotCi0JCXRhaWwtPm5leHQgPSBsaXN0OwotCQlsaXN0LT5wcmV2ID0gdGFpbDsKLQotCQlpZiAobm1lcmdlcyA8PSAxKQotCQkJYnJlYWs7Ci0KLQkJaW5zaXplICo9IDI7CisJCWlmIChsZXYgPiBtYXhfbGV2KSB7CisJCQlpZiAodW5saWtlbHkobGV2ID49IEFSUkFZX1NJWkUocGFydCktMSkpIHsKKwkJCQlwcmludGtfb25jZShLRVJOX0RFQlVHICJsaXN0IHBhc3NlZCB0byIKKwkJCQkJIiBsaXN0X3NvcnQoKSB0b28gbG9uZyBmb3IiCisJCQkJCSIgZWZmaWNpZW5jeVxuIik7CisJCQkJbGV2LS07CisJCQl9CisJCQltYXhfbGV2ID0gbGV2OworCQl9CisJCXBhcnRbbGV2XSA9IGN1cjsKIAl9CiAKLQloZWFkLT5uZXh0ID0gbGlzdDsKLQloZWFkLT5wcmV2ID0gbGlzdC0+cHJldjsKLQlsaXN0LT5wcmV2LT5uZXh0ID0gaGVhZDsKLQlsaXN0LT5wcmV2ID0gaGVhZDsKKwlmb3IgKGxldiA9IDA7IGxldiA8IG1heF9sZXY7IGxldisrKQorCQlpZiAocGFydFtsZXZdKQorCQkJbGlzdCA9IG1lcmdlKHByaXYsIGNtcCwgcGFydFtsZXZdLCBsaXN0KTsKKworCW1lcmdlX2FuZF9yZXN0b3JlX2JhY2tfbGlua3MocHJpdiwgY21wLCBoZWFkLCBwYXJ0W21heF9sZXZdLCBsaXN0KTsKK30KK0VYUE9SVF9TWU1CT0wobGlzdF9zb3J0KTsKKworI2lmZGVmIERFQlVHX0xJU1RfU09SVAorc3RydWN0IGRlYnVnX2VsIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxfaDsKKwlpbnQgdmFsdWU7CisJdW5zaWduZWQgc2VyaWFsOworfTsKKworc3RhdGljIGludCBjbXAodm9pZCAqcHJpdiwgc3RydWN0IGxpc3RfaGVhZCAqYSwgc3RydWN0IGxpc3RfaGVhZCAqYikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGEsIHN0cnVjdCBkZWJ1Z19lbCwgbF9oKS0+dmFsdWUKKwkgICAgIC0gY29udGFpbmVyX29mKGIsIHN0cnVjdCBkZWJ1Z19lbCwgbF9oKS0+dmFsdWU7CiB9CiAKLUVYUE9SVF9TWU1CT0wobGlzdF9zb3J0KTsKKy8qCisgKiBUaGUgcGF0dGVybiBvZiBzZXQgYml0cyBpbiB0aGUgbGlzdCBsZW5ndGggZGV0ZXJtaW5lcyB3aGljaCBjYXNlcworICogYXJlIGhpdCBpbiBsaXN0X3NvcnQoKS4KKyAqLworI2RlZmluZSBMSVNUX1NPUlRfVEVTVF9MRU5HVEggKDUxMisxMjgrMikgLyogbm90IGluY2x1ZGluZyBoZWFkICovCisKK3N0YXRpYyBpbnQgX19pbml0IGxpc3Rfc29ydF90ZXN0KHZvaWQpCit7CisJaW50IGksIHIgPSAxLCBjb3VudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0ga21hbGxvYyhzaXplb2YoKmhlYWQpLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpjdXI7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJ0ZXN0aW5nIGxpc3Rfc29ydCgpXG4iKTsKKworCWN1ciA9IGhlYWQ7CisJZm9yIChpID0gMDsgaSA8IExJU1RfU09SVF9URVNUX0xFTkdUSDsgaSsrKSB7CisJCXN0cnVjdCBkZWJ1Z19lbCAqZWwgPSBrbWFsbG9jKHNpemVvZigqZWwpLCBHRlBfS0VSTkVMKTsKKwkJQlVHX09OKCFlbCk7CisJCSAvKiBmb3JjZSBzb21lIGVxdWl2YWxlbmNpZXMgKi8KKwkJZWwtPnZhbHVlID0gKHIgPSAociAqIDcyNTg2MSkgJSA2NTk5KSAlIChMSVNUX1NPUlRfVEVTVF9MRU5HVEgvMyk7CisJCWVsLT5zZXJpYWwgPSBpOworCisJCWVsLT5sX2gucHJldiA9IGN1cjsKKwkJY3VyLT5uZXh0ID0gJmVsLT5sX2g7CisJCWN1ciA9IGN1ci0+bmV4dDsKKwl9CisJaGVhZC0+cHJldiA9IGN1cjsKKworCWxpc3Rfc29ydChOVUxMLCBoZWFkLCBjbXApOworCisJY291bnQgPSAxOworCWZvciAoY3VyID0gaGVhZC0+bmV4dDsgY3VyLT5uZXh0ICE9IGhlYWQ7IGN1ciA9IGN1ci0+bmV4dCkgeworCQlzdHJ1Y3QgZGVidWdfZWwgKmVsID0gY29udGFpbmVyX29mKGN1ciwgc3RydWN0IGRlYnVnX2VsLCBsX2gpOworCQlpbnQgY21wX3Jlc3VsdCA9IGNtcChOVUxMLCBjdXIsIGN1ci0+bmV4dCk7CisJCWlmIChjdXItPm5leHQtPnByZXYgIT0gY3VyKSB7CisJCQlwcmludGsoS0VSTl9FTUVSRyAibGlzdF9zb3J0KCkgcmV0dXJuZWQgIgorCQkJCQkJImEgY29ycnVwdGVkIGxpc3QhXG4iKTsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgaWYgKGNtcF9yZXN1bHQgPiAwKSB7CisJCQlwcmludGsoS0VSTl9FTUVSRyAibGlzdF9zb3J0KCkgZmFpbGVkIHRvIHNvcnQhXG4iKTsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgaWYgKGNtcF9yZXN1bHQgPT0gMCAmJgorCQkJCWVsLT5zZXJpYWwgPj0gY29udGFpbmVyX29mKGN1ci0+bmV4dCwKKwkJCQkJc3RydWN0IGRlYnVnX2VsLCBsX2gpLT5zZXJpYWwpIHsKKwkJCXByaW50ayhLRVJOX0VNRVJHICJsaXN0X3NvcnQoKSBmYWlsZWQgdG8gcHJlc2VydmUgb3JkZXIiCisJCQkJCQkgIiBvZiBlcXVpdmFsZW50IGVsZW1lbnRzIVxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlrZnJlZShjdXItPnByZXYpOworCQljb3VudCsrOworCX0KKwlrZnJlZShjdXIpOworCWlmIChjb3VudCAhPSBMSVNUX1NPUlRfVEVTVF9MRU5HVEgpIHsKKwkJcHJpbnRrKEtFUk5fRU1FUkcgImxpc3Rfc29ydCgpIHJldHVybmVkIGxpc3Qgb2YiCisJCQkJCQkiZGlmZmVyZW50IGxlbmd0aCFcbiIpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdChsaXN0X3NvcnRfdGVzdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9zaG93X21lbS5jIGIvbGliL3Nob3dfbWVtLmMKaW5kZXggMjM4ZTcyYS4uZmRjNzdjOCAxMDA2NDQKLS0tIGEvbGliL3Nob3dfbWVtLmMKKysrIGIvbGliL3Nob3dfbWVtLmMKQEAgLTE1LDcgKzE1LDcgQEAKIAl1bnNpZ25lZCBsb25nIHRvdGFsID0gMCwgcmVzZXJ2ZWQgPSAwLCBzaGFyZWQgPSAwLAogCQlub25zaGFyZWQgPSAwLCBoaWdobWVtID0gMDsKIAotCXByaW50ayhLRVJOX0lORk8gIk1lbS1JbmZvOlxuIik7CisJcHJpbnRrKCJNZW0tSW5mbzpcbiIpOwogCXNob3dfZnJlZV9hcmVhcygpOwogCiAJZm9yX2VhY2hfb25saW5lX3BnZGF0KHBnZGF0KSB7CkBAIC00OSwxNSArNDksMTUgQEAKIAkJcGdkYXRfcmVzaXplX3VubG9jayhwZ2RhdCwgJmZsYWdzKTsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICIlbHUgcGFnZXMgUkFNXG4iLCB0b3RhbCk7CisJcHJpbnRrKCIlbHUgcGFnZXMgUkFNXG4iLCB0b3RhbCk7CiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KLQlwcmludGsoS0VSTl9JTkZPICIlbHUgcGFnZXMgSGlnaE1lbVxuIiwgaGlnaG1lbSk7CisJcHJpbnRrKCIlbHUgcGFnZXMgSGlnaE1lbVxuIiwgaGlnaG1lbSk7CiAjZW5kaWYKLQlwcmludGsoS0VSTl9JTkZPICIlbHUgcGFnZXMgcmVzZXJ2ZWRcbiIsIHJlc2VydmVkKTsKLQlwcmludGsoS0VSTl9JTkZPICIlbHUgcGFnZXMgc2hhcmVkXG4iLCBzaGFyZWQpOwotCXByaW50ayhLRVJOX0lORk8gIiVsdSBwYWdlcyBub24tc2hhcmVkXG4iLCBub25zaGFyZWQpOworCXByaW50aygiJWx1IHBhZ2VzIHJlc2VydmVkXG4iLCByZXNlcnZlZCk7CisJcHJpbnRrKCIlbHUgcGFnZXMgc2hhcmVkXG4iLCBzaGFyZWQpOworCXByaW50aygiJWx1IHBhZ2VzIG5vbi1zaGFyZWRcbiIsIG5vbnNoYXJlZCk7CiAjaWZkZWYgQ09ORklHX1FVSUNLTElTVAotCXByaW50ayhLRVJOX0lORk8gIiVsdSBwYWdlcyBpbiBwYWdldGFibGUgY2FjaGVcbiIsCisJcHJpbnRrKCIlbHUgcGFnZXMgaW4gcGFnZXRhYmxlIGNhY2hlXG4iLAogCQlxdWlja2xpc3RfdG90YWxfc2l6ZSgpKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvbGliL3N0cmluZy5jIGIvbGliL3N0cmluZy5jCmluZGV4IGExY2RjZmNjLi5mNzFiZWFkIDEwMDY0NAotLS0gYS9saWIvc3RyaW5nLmMKKysrIGIvbGliL3N0cmluZy5jCkBAIC0zNiwyNSArMzYsMjEgQEAKIAkvKiBZZXMsIFZpcmdpbmlhLCBpdCBoYWQgYmV0dGVyIGJlIHVuc2lnbmVkICovCiAJdW5zaWduZWQgY2hhciBjMSwgYzI7CiAKLQljMSA9IGMyID0gMDsKLQlpZiAobGVuKSB7Ci0JCWRvIHsKLQkJCWMxID0gKnMxOwotCQkJYzIgPSAqczI7Ci0JCQlzMSsrOwotCQkJczIrKzsKLQkJCWlmICghYzEpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoIWMyKQotCQkJCWJyZWFrOwotCQkJaWYgKGMxID09IGMyKQotCQkJCWNvbnRpbnVlOwotCQkJYzEgPSB0b2xvd2VyKGMxKTsKLQkJCWMyID0gdG9sb3dlcihjMik7Ci0JCQlpZiAoYzEgIT0gYzIpCi0JCQkJYnJlYWs7Ci0JCX0gd2hpbGUgKC0tbGVuKTsKLQl9CisJaWYgKCFsZW4pCisJCXJldHVybiAwOworCisJZG8geworCQljMSA9ICpzMSsrOworCQljMiA9ICpzMisrOworCQlpZiAoIWMxIHx8ICFjMikKKwkJCWJyZWFrOworCQlpZiAoYzEgPT0gYzIpCisJCQljb250aW51ZTsKKwkJYzEgPSB0b2xvd2VyKGMxKTsKKwkJYzIgPSB0b2xvd2VyKGMyKTsKKwkJaWYgKGMxICE9IGMyKQorCQkJYnJlYWs7CisJfSB3aGlsZSAoLS1sZW4pOwogCXJldHVybiAoaW50KWMxIC0gKGludCljMjsKIH0KIEVYUE9SVF9TWU1CT0woc3RybmljbXApOwpAQCAtNjkzLDEzICs2ODksMTMgQEAKICAqLwogY2hhciAqc3RybnN0cihjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIHNpemVfdCBsZW4pCiB7Ci0Jc2l6ZV90IGwxID0gbGVuLCBsMjsKKwlzaXplX3QgbDI7CiAKIAlsMiA9IHN0cmxlbihzMik7CiAJaWYgKCFsMikKIAkJcmV0dXJuIChjaGFyICopczE7Ci0Jd2hpbGUgKGwxID49IGwyKSB7Ci0JCWwxLS07CisJd2hpbGUgKGxlbiA+PSBsMikgeworCQlsZW4tLTsKIAkJaWYgKCFtZW1jbXAoczEsIHMyLCBsMikpCiAJCQlyZXR1cm4gKGNoYXIgKilzMTsKIAkJczErKzsKZGlmZiAtLWdpdCBhL2xpYi92c3ByaW50Zi5jIGIvbGliL3ZzcHJpbnRmLmMKaW5kZXggYWY0YWFhNi4uMGQ0NjFjNyAxMDA2NDQKLS0tIGEvbGliL3ZzcHJpbnRmLmMKKysrIGIvbGliL3ZzcHJpbnRmLmMKQEAgLTM4MSw4ICszODEsOCBAQAogI2RlZmluZSBQTFVTCTQJCS8qIHNob3cgcGx1cyAqLwogI2RlZmluZSBTUEFDRQk4CQkvKiBzcGFjZSBpZiBwbHVzICovCiAjZGVmaW5lIExFRlQJMTYJCS8qIGxlZnQganVzdGlmaWVkICovCi0jZGVmaW5lIFNNQUxMCTMyCQkvKiBNdXN0IGJlIDMyID09IDB4MjAgKi8KLSNkZWZpbmUgU1BFQ0lBTAk2NAkJLyogMHggKi8KKyNkZWZpbmUgU01BTEwJMzIJCS8qIHVzZSBsb3dlcmNhc2UgaW4gaGV4IChtdXN0IGJlIDMyID09IDB4MjApICovCisjZGVmaW5lIFNQRUNJQUwJNjQJCS8qIHByZWZpeCBoZXggd2l0aCAiMHgiLCBvY3RhbCB3aXRoICIwIiAqLwogCiBlbnVtIGZvcm1hdF90eXBlIHsKIAlGT1JNQVRfVFlQRV9OT05FLCAvKiBKdXN0IGEgc3RyaW5nIHBhcnQgKi8KQEAgLTQwOCwxMiArNDA4LDEyIEBACiB9OwogCiBzdHJ1Y3QgcHJpbnRmX3NwZWMgewotCWVudW0gZm9ybWF0X3R5cGUJdHlwZTsKLQlpbnQJCQlmbGFnczsJCS8qIGZsYWdzIHRvIG51bWJlcigpICovCi0JaW50CQkJZmllbGRfd2lkdGg7CS8qIHdpZHRoIG9mIG91dHB1dCBmaWVsZCAqLwotCWludAkJCWJhc2U7Ci0JaW50CQkJcHJlY2lzaW9uOwkvKiAjIG9mIGRpZ2l0cy9jaGFycyAqLwotCWludAkJCXF1YWxpZmllcjsKKwl1MTYJdHlwZTsKKwlzMTYJZmllbGRfd2lkdGg7CS8qIHdpZHRoIG9mIG91dHB1dCBmaWVsZCAqLworCXU4CWZsYWdzOwkJLyogZmxhZ3MgdG8gbnVtYmVyKCkgKi8KKwl1OAliYXNlOworCXM4CXByZWNpc2lvbjsJLyogIyBvZiBkaWdpdHMvY2hhcnMgKi8KKwl1OAlxdWFsaWZpZXI7CiB9OwogCiBzdGF0aWMgY2hhciAqbnVtYmVyKGNoYXIgKmJ1ZiwgY2hhciAqZW5kLCB1bnNpZ25lZCBsb25nIGxvbmcgbnVtLApAQCAtNTk3LDIyICs1OTcsMjkgQEAKICNpZm5kZWYgTUVNX1JTUkNfUFJJTlRLX1NJWkUKICNkZWZpbmUgTUVNX1JTUkNfUFJJTlRLX1NJWkUJMTAKICNlbmRpZgotCXN0cnVjdCBwcmludGZfc3BlYyBoZXhfc3BlYyA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHByaW50Zl9zcGVjIGlvX3NwZWMgPSB7CiAJCS5iYXNlID0gMTYsCisJCS5maWVsZF93aWR0aCA9IElPX1JTUkNfUFJJTlRLX1NJWkUsCiAJCS5wcmVjaXNpb24gPSAtMSwKIAkJLmZsYWdzID0gU1BFQ0lBTCB8IFNNQUxMIHwgWkVST1BBRCwKIAl9OwotCXN0cnVjdCBwcmludGZfc3BlYyBkZWNfc3BlYyA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHByaW50Zl9zcGVjIG1lbV9zcGVjID0geworCQkuYmFzZSA9IDE2LAorCQkuZmllbGRfd2lkdGggPSBNRU1fUlNSQ19QUklOVEtfU0laRSwKKwkJLnByZWNpc2lvbiA9IC0xLAorCQkuZmxhZ3MgPSBTUEVDSUFMIHwgU01BTEwgfCBaRVJPUEFELAorCX07CisJc3RhdGljIGNvbnN0IHN0cnVjdCBwcmludGZfc3BlYyBkZWNfc3BlYyA9IHsKIAkJLmJhc2UgPSAxMCwKIAkJLnByZWNpc2lvbiA9IC0xLAogCQkuZmxhZ3MgPSAwLAogCX07Ci0Jc3RydWN0IHByaW50Zl9zcGVjIHN0cl9zcGVjID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJpbnRmX3NwZWMgc3RyX3NwZWMgPSB7CiAJCS5maWVsZF93aWR0aCA9IC0xLAogCQkucHJlY2lzaW9uID0gMTAsCiAJCS5mbGFncyA9IExFRlQsCiAJfTsKLQlzdHJ1Y3QgcHJpbnRmX3NwZWMgZmxhZ19zcGVjID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJpbnRmX3NwZWMgZmxhZ19zcGVjID0gewogCQkuYmFzZSA9IDE2LAogCQkucHJlY2lzaW9uID0gLTEsCiAJCS5mbGFncyA9IFNQRUNJQUwgfCBTTUFMTCwKQEAgLTYyOCwzNSArNjM1LDMxIEBACiAJCSAgICAgMipSU1JDX0JVRl9TSVpFICsgRkxBR19CVUZfU0laRSArIFJBV19CVUZfU0laRSldOwogCiAJY2hhciAqcCA9IHN5bSwgKnBlbmQgPSBzeW0gKyBzaXplb2Yoc3ltKTsKLQlpbnQgc2l6ZSA9IC0xLCBhZGRyID0gMDsKIAlpbnQgZGVjb2RlID0gKGZtdFswXSA9PSAnUicpID8gMSA6IDA7Ci0KLQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJc2l6ZSA9IElPX1JTUkNfUFJJTlRLX1NJWkU7Ci0JCWFkZHIgPSAxOwotCX0gZWxzZSBpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSB7Ci0JCXNpemUgPSBNRU1fUlNSQ19QUklOVEtfU0laRTsKLQkJYWRkciA9IDE7Ci0JfQorCWNvbnN0IHN0cnVjdCBwcmludGZfc3BlYyAqc3BlY3A7CiAKIAkqcCsrID0gJ1snOwotCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKKwlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKIAkJcCA9IHN0cmluZyhwLCBwZW5kLCAiaW8gICIsIHN0cl9zcGVjKTsKLQllbHNlIGlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pCisJCXNwZWNwID0gJmlvX3NwZWM7CisJfSBlbHNlIGlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pIHsKIAkJcCA9IHN0cmluZyhwLCBwZW5kLCAibWVtICIsIHN0cl9zcGVjKTsKLQllbHNlIGlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JUlEpCisJCXNwZWNwID0gJm1lbV9zcGVjOworCX0gZWxzZSBpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSVJRKSB7CiAJCXAgPSBzdHJpbmcocCwgcGVuZCwgImlycSAiLCBzdHJfc3BlYyk7Ci0JZWxzZSBpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfRE1BKQorCQlzcGVjcCA9ICZkZWNfc3BlYzsKKwl9IGVsc2UgaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0RNQSkgewogCQlwID0gc3RyaW5nKHAsIHBlbmQsICJkbWEgIiwgc3RyX3NwZWMpOwotCWVsc2UgeworCQlzcGVjcCA9ICZkZWNfc3BlYzsKKwl9IGVsc2UgewogCQlwID0gc3RyaW5nKHAsIHBlbmQsICI/Pz8gIiwgc3RyX3NwZWMpOworCQlzcGVjcCA9ICZtZW1fc3BlYzsKIAkJZGVjb2RlID0gMDsKIAl9Ci0JaGV4X3NwZWMuZmllbGRfd2lkdGggPSBzaXplOwotCXAgPSBudW1iZXIocCwgcGVuZCwgcmVzLT5zdGFydCwgYWRkciA/IGhleF9zcGVjIDogZGVjX3NwZWMpOworCXAgPSBudW1iZXIocCwgcGVuZCwgcmVzLT5zdGFydCwgKnNwZWNwKTsKIAlpZiAocmVzLT5zdGFydCAhPSByZXMtPmVuZCkgewogCQkqcCsrID0gJy0nOwotCQlwID0gbnVtYmVyKHAsIHBlbmQsIHJlcy0+ZW5kLCBhZGRyID8gaGV4X3NwZWMgOiBkZWNfc3BlYyk7CisJCXAgPSBudW1iZXIocCwgcGVuZCwgcmVzLT5lbmQsICpzcGVjcCk7CiAJfQogCWlmIChkZWNvZGUpIHsKIAkJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTV82NCkKQEAgLTEzMzMsNyArMTMzNiw3IEBACiAJCQlicmVhazsKIAogCQljYXNlIEZPUk1BVF9UWVBFX05SQ0hBUlM6IHsKLQkJCWludCBxdWFsaWZpZXIgPSBzcGVjLnF1YWxpZmllcjsKKwkJCXU4IHF1YWxpZmllciA9IHNwZWMucXVhbGlmaWVyOwogCiAJCQlpZiAocXVhbGlmaWVyID09ICdsJykgewogCQkJCWxvbmcgKmlwID0gdmFfYXJnKGFyZ3MsIGxvbmcgKik7CkBAIC0xNjE5LDcgKzE2MjIsNyBAQAogCiAJCWNhc2UgRk9STUFUX1RZUEVfTlJDSEFSUzogewogCQkJLyogc2tpcCAlbiAncyBhcmd1bWVudCAqLwotCQkJaW50IHF1YWxpZmllciA9IHNwZWMucXVhbGlmaWVyOworCQkJdTggcXVhbGlmaWVyID0gc3BlYy5xdWFsaWZpZXI7CiAJCQl2b2lkICpza2lwX2FyZzsKIAkJCWlmIChxdWFsaWZpZXIgPT0gJ2wnKQogCQkJCXNraXBfYXJnID0gdmFfYXJnKGFyZ3MsIGxvbmcgKik7CkBAIC0xODg1LDcgKzE4ODgsOSBAQAogCWNoYXIgKm5leHQ7CiAJY2hhciBkaWdpdDsKIAlpbnQgbnVtID0gMDsKLQlpbnQgcXVhbGlmaWVyLCBiYXNlLCBmaWVsZF93aWR0aDsKKwl1OCBxdWFsaWZpZXI7CisJdTggYmFzZTsKKwlzMTYgZmllbGRfd2lkdGg7CiAJYm9vbCBpc19zaWduOwogCiAJd2hpbGUgKCpmbXQgJiYgKnN0cikgewpAQCAtMTk2Myw3ICsxOTY4LDcgQEAKIAkJewogCQkJY2hhciAqcyA9IChjaGFyICopdmFfYXJnKGFyZ3MsIGNoYXIgKik7CiAJCQlpZiAoZmllbGRfd2lkdGggPT0gLTEpCi0JCQkJZmllbGRfd2lkdGggPSBJTlRfTUFYOworCQkJCWZpZWxkX3dpZHRoID0gU0hPUlRfTUFYOwogCQkJLyogZmlyc3QsIHNraXAgbGVhZGluZyB3aGl0ZSBzcGFjZSBpbiBidWZmZXIgKi8KIAkJCXN0ciA9IHNraXBfc3BhY2VzKHN0cik7CiAKZGlmZiAtLWdpdCBhL21tL2ZhZHZpc2UuYyBiL21tL2ZhZHZpc2UuYwppbmRleCBlNDMzNTkyLi44ZDcyM2M5IDEwMDY0NAotLS0gYS9tbS9mYWR2aXNlLmMKKysrIGIvbW0vZmFkdmlzZS5jCkBAIC03NywxMiArNzcsMjAgQEAKIAlzd2l0Y2ggKGFkdmljZSkgewogCWNhc2UgUE9TSVhfRkFEVl9OT1JNQUw6CiAJCWZpbGUtPmZfcmEucmFfcGFnZXMgPSBiZGktPnJhX3BhZ2VzOworCQlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CisJCWZpbGUtPmZfbW9kZSAmPSB+Rk1PREVfUkFORE9NOworCQlzcGluX3VubG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJYnJlYWs7CiAJY2FzZSBQT1NJWF9GQURWX1JBTkRPTToKLQkJZmlsZS0+Zl9yYS5yYV9wYWdlcyA9IDA7CisJCXNwaW5fbG9jaygmZmlsZS0+Zl9sb2NrKTsKKwkJZmlsZS0+Zl9tb2RlIHw9IEZNT0RFX1JBTkRPTTsKKwkJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CiAJCWJyZWFrOwogCWNhc2UgUE9TSVhfRkFEVl9TRVFVRU5USUFMOgogCQlmaWxlLT5mX3JhLnJhX3BhZ2VzID0gYmRpLT5yYV9wYWdlcyAqIDI7CisJCXNwaW5fbG9jaygmZmlsZS0+Zl9sb2NrKTsKKwkJZmlsZS0+Zl9tb2RlICY9IH5GTU9ERV9SQU5ET007CisJCXNwaW5fdW5sb2NrKCZmaWxlLT5mX2xvY2spOwogCQlicmVhazsKIAljYXNlIFBPU0lYX0ZBRFZfV0lMTE5FRUQ6CiAJCWlmICghbWFwcGluZy0+YV9vcHMtPnJlYWRwYWdlKSB7CmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggMTQ4YjUyYS4uMDQ1YjMxYyAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcC5jCisrKyBiL21tL2ZpbGVtYXAuYwpAQCAtMTk4Niw3ICsxOTg2LDcgQEAKIGlubGluZSBpbnQgZ2VuZXJpY193cml0ZV9jaGVja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCAqcG9zLCBzaXplX3QgKmNvdW50LCBpbnQgaXNibGspCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfbWFwcGluZy0+aG9zdDsKLQl1bnNpZ25lZCBsb25nIGxpbWl0ID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9GU0laRV0ucmxpbV9jdXI7CisJdW5zaWduZWQgbG9uZyBsaW1pdCA9IHJsaW1pdChSTElNSVRfRlNJWkUpOwogCiAgICAgICAgIGlmICh1bmxpa2VseSgqcG9zIDwgMCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9tbS9maWxlbWFwX3hpcC5jIGIvbW0vZmlsZW1hcF94aXAuYwppbmRleCAxODg4YjJkLi43OGI5NGYwIDEwMDY0NAotLS0gYS9tbS9maWxlbWFwX3hpcC5jCisrKyBiL21tL2ZpbGVtYXBfeGlwLmMKQEAgLTE5NCw3ICsxOTQsNyBAQAogCQkJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHJlc3MsIHB0ZV9wZm4oKnB0ZSkpOwogCQkJcHRldmFsID0gcHRlcF9jbGVhcl9mbHVzaF9ub3RpZnkodm1hLCBhZGRyZXNzLCBwdGUpOwogCQkJcGFnZV9yZW1vdmVfcm1hcChwYWdlKTsKLQkJCWRlY19tbV9jb3VudGVyKG1tLCBmaWxlX3Jzcyk7CisJCQlkZWNfbW1fY291bnRlcihtbSwgTU1fRklMRVBBR0VTKTsKIAkJCUJVR19PTihwdGVfZGlydHkocHRldmFsKSk7CiAJCQlwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTsKIAkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKZGlmZiAtLWdpdCBhL21tL2ZyZW1hcC5jIGIvbW0vZnJlbWFwLmMKaW5kZXggYjZlYzg1YS4uNDZmNWRhYyAxMDA2NDQKLS0tIGEvbW0vZnJlbWFwLmMKKysrIGIvbW0vZnJlbWFwLmMKQEAgLTQwLDcgKzQwLDcgQEAKIAkJCXBhZ2VfcmVtb3ZlX3JtYXAocGFnZSk7CiAJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJCQl1cGRhdGVfaGl3YXRlcl9yc3MobW0pOwotCQkJZGVjX21tX2NvdW50ZXIobW0sIGZpbGVfcnNzKTsKKwkJCWRlY19tbV9jb3VudGVyKG1tLCBNTV9GSUxFUEFHRVMpOwogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKCFwdGVfZmlsZShwdGUpKQpkaWZmIC0tZ2l0IGEvbW0va3NtLmMgYi9tbS9rc20uYwppbmRleCA1NmEwZGExLi5hOTNmMWI3IDEwMDY0NAotLS0gYS9tbS9rc20uYworKysgYi9tbS9rc20uYwpAQCAtMTU2MywxMCArMTU2MywxMiBAQAogYWdhaW46CiAJaGxpc3RfZm9yX2VhY2hfZW50cnkocm1hcF9pdGVtLCBobGlzdCwgJnN0YWJsZV9ub2RlLT5obGlzdCwgaGxpc3QpIHsKIAkJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IHJtYXBfaXRlbS0+YW5vbl92bWE7CisJCXN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqdm1hYzsKIAkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAKIAkJc3Bpbl9sb2NrKCZhbm9uX3ZtYS0+bG9jayk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmYW5vbl92bWEtPmhlYWQsIGFub25fdm1hX25vZGUpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWFjLCAmYW5vbl92bWEtPmhlYWQsIHNhbWVfYW5vbl92bWEpIHsKKwkJCXZtYSA9IHZtYWMtPnZtYTsKIAkJCWlmIChybWFwX2l0ZW0tPmFkZHJlc3MgPCB2bWEtPnZtX3N0YXJ0IHx8CiAJCQkgICAgcm1hcF9pdGVtLT5hZGRyZXNzID49IHZtYS0+dm1fZW5kKQogCQkJCWNvbnRpbnVlOwpAQCAtMTYxNCwxMCArMTYxNiwxMiBAQAogYWdhaW46CiAJaGxpc3RfZm9yX2VhY2hfZW50cnkocm1hcF9pdGVtLCBobGlzdCwgJnN0YWJsZV9ub2RlLT5obGlzdCwgaGxpc3QpIHsKIAkJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IHJtYXBfaXRlbS0+YW5vbl92bWE7CisJCXN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqdm1hYzsKIAkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAKIAkJc3Bpbl9sb2NrKCZhbm9uX3ZtYS0+bG9jayk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmYW5vbl92bWEtPmhlYWQsIGFub25fdm1hX25vZGUpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWFjLCAmYW5vbl92bWEtPmhlYWQsIHNhbWVfYW5vbl92bWEpIHsKKwkJCXZtYSA9IHZtYWMtPnZtYTsKIAkJCWlmIChybWFwX2l0ZW0tPmFkZHJlc3MgPCB2bWEtPnZtX3N0YXJ0IHx8CiAJCQkgICAgcm1hcF9pdGVtLT5hZGRyZXNzID49IHZtYS0+dm1fZW5kKQogCQkJCWNvbnRpbnVlOwpAQCAtMTY2NCwxMCArMTY2OCwxMiBAQAogYWdhaW46CiAJaGxpc3RfZm9yX2VhY2hfZW50cnkocm1hcF9pdGVtLCBobGlzdCwgJnN0YWJsZV9ub2RlLT5obGlzdCwgaGxpc3QpIHsKIAkJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IHJtYXBfaXRlbS0+YW5vbl92bWE7CisJCXN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqdm1hYzsKIAkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAKIAkJc3Bpbl9sb2NrKCZhbm9uX3ZtYS0+bG9jayk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmYW5vbl92bWEtPmhlYWQsIGFub25fdm1hX25vZGUpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWFjLCAmYW5vbl92bWEtPmhlYWQsIHNhbWVfYW5vbl92bWEpIHsKKwkJCXZtYSA9IHZtYWMtPnZtYTsKIAkJCWlmIChybWFwX2l0ZW0tPmFkZHJlc3MgPCB2bWEtPnZtX3N0YXJ0IHx8CiAJCQkgICAgcm1hcF9pdGVtLT5hZGRyZXNzID49IHZtYS0+dm1fZW5kKQogCQkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDk1NDAzMmIuLmQ4MTM4MjMgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYworKysgYi9tbS9tZW1jb250cm9sLmMKQEAgLTI1NDUsNyArMjU0NSw3IEBACiAJCXBjID0gbGlzdF9lbnRyeShsaXN0LT5wcmV2LCBzdHJ1Y3QgcGFnZV9jZ3JvdXAsIGxydSk7CiAJCWlmIChidXN5ID09IHBjKSB7CiAJCQlsaXN0X21vdmUoJnBjLT5scnUsIGxpc3QpOwotCQkJYnVzeSA9IDA7CisJCQlidXN5ID0gTlVMTDsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpvbmUtPmxydV9sb2NrLCBmbGFncyk7CiAJCQljb250aW51ZTsKIAkJfQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LWZhaWx1cmUuYyBiL21tL21lbW9yeS1mYWlsdXJlLmMKaW5kZXggMTcyOTlmZC4uZDFmMzM1MSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LWZhaWx1cmUuYworKysgYi9tbS9tZW1vcnktZmFpbHVyZS5jCkBAIC0zODMsOSArMzgzLDEyIEBACiAJaWYgKGF2ID09IE5VTEwpCS8qIE5vdCBhY3R1YWxseSBtYXBwZWQgYW55bW9yZSAqLwogCQlnb3RvIG91dDsKIAlmb3JfZWFjaF9wcm9jZXNzICh0c2spIHsKKwkJc3RydWN0IGFub25fdm1hX2NoYWluICp2bWFjOworCiAJCWlmICghdGFza19lYXJseV9raWxsKHRzaykpCiAJCQljb250aW51ZTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSAodm1hLCAmYXYtPmhlYWQsIGFub25fdm1hX25vZGUpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWFjLCAmYXYtPmhlYWQsIHNhbWVfYW5vbl92bWEpIHsKKwkJCXZtYSA9IHZtYWMtPnZtYTsKIAkJCWlmICghcGFnZV9tYXBwZWRfaW5fdm1hKHBhZ2UsIHZtYSkpCiAJCQkJY29udGludWU7CiAJCQlpZiAodm1hLT52bV9tbSA9PSB0c2stPm1tKQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCA3MmZiNWYzLi5kMTE1M2UzIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnkuYwpAQCAtMTIxLDYgKzEyMSw4MCBAQAogfQogY29yZV9pbml0Y2FsbChpbml0X3plcm9fcGZuKTsKIAorCisjaWYgZGVmaW5lZChTUExJVF9SU1NfQ09VTlRJTkcpCisKK3ZvaWQgX19zeW5jX3Rhc2tfcnNzX3N0YXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOUl9NTV9DT1VOVEVSUzsgaSsrKSB7CisJCWlmICh0YXNrLT5yc3Nfc3RhdC5jb3VudFtpXSkgeworCQkJYWRkX21tX2NvdW50ZXIobW0sIGksIHRhc2stPnJzc19zdGF0LmNvdW50W2ldKTsKKwkJCXRhc2stPnJzc19zdGF0LmNvdW50W2ldID0gMDsKKwkJfQorCX0KKwl0YXNrLT5yc3Nfc3RhdC5ldmVudHMgPSAwOworfQorCitzdGF0aWMgdm9pZCBhZGRfbW1fY291bnRlcl9mYXN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgbWVtYmVyLCBpbnQgdmFsKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGN1cnJlbnQ7CisKKwlpZiAobGlrZWx5KHRhc2stPm1tID09IG1tKSkKKwkJdGFzay0+cnNzX3N0YXQuY291bnRbbWVtYmVyXSArPSB2YWw7CisJZWxzZQorCQlhZGRfbW1fY291bnRlcihtbSwgbWVtYmVyLCB2YWwpOworfQorI2RlZmluZSBpbmNfbW1fY291bnRlcl9mYXN0KG1tLCBtZW1iZXIpIGFkZF9tbV9jb3VudGVyX2Zhc3QobW0sIG1lbWJlciwgMSkKKyNkZWZpbmUgZGVjX21tX2NvdW50ZXJfZmFzdChtbSwgbWVtYmVyKSBhZGRfbW1fY291bnRlcl9mYXN0KG1tLCBtZW1iZXIsIC0xKQorCisvKiBzeW5jIGNvdW50ZXIgb25jZSBwZXIgNjQgcGFnZSBmYXVsdHMgKi8KKyNkZWZpbmUgVEFTS19SU1NfRVZFTlRTX1RIUkVTSAkoNjQpCitzdGF0aWMgdm9pZCBjaGVja19zeW5jX3Jzc19zdGF0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlpZiAodW5saWtlbHkodGFzayAhPSBjdXJyZW50KSkKKwkJcmV0dXJuOworCWlmICh1bmxpa2VseSh0YXNrLT5yc3Nfc3RhdC5ldmVudHMrKyA+IFRBU0tfUlNTX0VWRU5UU19USFJFU0gpKQorCQlfX3N5bmNfdGFza19yc3Nfc3RhdCh0YXNrLCB0YXNrLT5tbSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X21tX2NvdW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBtZW1iZXIpCit7CisJbG9uZyB2YWwgPSAwOworCisJLyoKKwkgKiBEb24ndCB1c2UgdGFzay0+bW0gaGVyZS4uLmZvciBhdm9pZGluZyB0byB1c2UgdGFza19nZXRfbW0oKS4uCisJICogVGhlIGNhbGxlciBtdXN0IGd1YXJhbnRlZSB0YXNrLT5tbSBpcyBub3QgaW52YWxpZC4KKwkgKi8KKwl2YWwgPSBhdG9taWNfbG9uZ19yZWFkKCZtbS0+cnNzX3N0YXQuY291bnRbbWVtYmVyXSk7CisJLyoKKwkgKiBjb3VudGVyIGlzIHVwZGF0ZWQgaW4gYXN5bmNocm9ub3VzIG1hbm5lciBhbmQgbWF5IGdvIHRvIG1pbnVzLgorCSAqIEJ1dCBpdCdzIG5ldmVyIGJlIGV4cGVjdGVkIG51bWJlciBmb3IgdXNlcnMuCisJICovCisJaWYgKHZhbCA8IDApCisJCXJldHVybiAwOworCXJldHVybiAodW5zaWduZWQgbG9uZyl2YWw7Cit9CisKK3ZvaWQgc3luY19tbV9yc3Moc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlfX3N5bmNfdGFza19yc3Nfc3RhdCh0YXNrLCBtbSk7Cit9CisjZWxzZQorCisjZGVmaW5lIGluY19tbV9jb3VudGVyX2Zhc3QobW0sIG1lbWJlcikgaW5jX21tX2NvdW50ZXIobW0sIG1lbWJlcikKKyNkZWZpbmUgZGVjX21tX2NvdW50ZXJfZmFzdChtbSwgbWVtYmVyKSBkZWNfbW1fY291bnRlcihtbSwgbWVtYmVyKQorCitzdGF0aWMgdm9pZCBjaGVja19zeW5jX3Jzc19zdGF0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKK30KKwordm9pZCBzeW5jX21tX3JzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworfQorI2VuZGlmCisKIC8qCiAgKiBJZiBhIHA/ZF9iYWQgZW50cnkgaXMgZm91bmQgd2hpbGUgd2Fsa2luZyBwYWdlIHRhYmxlcywgcmVwb3J0CiAgKiB0aGUgZXJyb3IsIGJlZm9yZSByZXNldHRpbmcgZW50cnkgdG8gcD9kX25vbmUuICBVc3VhbGx5IChidXQKQEAgLTMwMCw3ICszNzQsNyBAQAogCQkgKiBIaWRlIHZtYSBmcm9tIHJtYXAgYW5kIHRydW5jYXRlX3BhZ2VjYWNoZSBiZWZvcmUgZnJlZWluZwogCQkgKiBwZ3RhYmxlcwogCQkgKi8KLQkJYW5vbl92bWFfdW5saW5rKHZtYSk7CisJCXVubGlua19hbm9uX3ZtYXModm1hKTsKIAkJdW5saW5rX2ZpbGVfdm1hKHZtYSk7CiAKIAkJaWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKSB7CkBAIC0zMTQsNyArMzg4LDcgQEAKIAkJCSAgICAgICAmJiAhaXNfdm1faHVnZXRsYl9wYWdlKG5leHQpKSB7CiAJCQkJdm1hID0gbmV4dDsKIAkJCQluZXh0ID0gdm1hLT52bV9uZXh0OwotCQkJCWFub25fdm1hX3VubGluayh2bWEpOworCQkJCXVubGlua19hbm9uX3ZtYXModm1hKTsKIAkJCQl1bmxpbmtfZmlsZV92bWEodm1hKTsKIAkJCX0KIAkJCWZyZWVfcGdkX3JhbmdlKHRsYiwgYWRkciwgdm1hLT52bV9lbmQsCkBAIC0zNzYsMTIgKzQ1MCwyMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkX21tX3JzcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IGZpbGVfcnNzLCBpbnQgYW5vbl9yc3MpCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9yc3NfdmVjKGludCAqcnNzKQogewotCWlmIChmaWxlX3JzcykKLQkJYWRkX21tX2NvdW50ZXIobW0sIGZpbGVfcnNzLCBmaWxlX3Jzcyk7Ci0JaWYgKGFub25fcnNzKQotCQlhZGRfbW1fY291bnRlcihtbSwgYW5vbl9yc3MsIGFub25fcnNzKTsKKwltZW1zZXQocnNzLCAwLCBzaXplb2YoaW50KSAqIE5SX01NX0NPVU5URVJTKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZF9tbV9yc3NfdmVjKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgKnJzcykKK3sKKwlpbnQgaTsKKworCWlmIChjdXJyZW50LT5tbSA9PSBtbSkKKwkJc3luY19tbV9yc3MoY3VycmVudCwgbW0pOworCWZvciAoaSA9IDA7IGkgPCBOUl9NTV9DT1VOVEVSUzsgaSsrKQorCQlpZiAocnNzW2ldKQorCQkJYWRkX21tX2NvdW50ZXIobW0sIGksIHJzc1tpXSk7CiB9CiAKIC8qCkBAIC01OTcsNyArNjc5LDkgQEAKIAkJCQkJCSAmc3JjX21tLT5tbWxpc3QpOwogCQkJCXNwaW5fdW5sb2NrKCZtbWxpc3RfbG9jayk7CiAJCQl9Ci0JCQlpZiAoaXNfd3JpdGVfbWlncmF0aW9uX2VudHJ5KGVudHJ5KSAmJgorCQkJaWYgKGxpa2VseSghbm9uX3N3YXBfZW50cnkoZW50cnkpKSkKKwkJCQlyc3NbTU1fU1dBUEVOVFNdKys7CisJCQllbHNlIGlmIChpc193cml0ZV9taWdyYXRpb25fZW50cnkoZW50cnkpICYmCiAJCQkJCWlzX2Nvd19tYXBwaW5nKHZtX2ZsYWdzKSkgewogCQkJCS8qCiAJCQkJICogQ09XIG1hcHBpbmdzIHJlcXVpcmUgcGFnZXMgaW4gYm90aCBwYXJlbnQKQEAgLTYzMiw3ICs3MTYsMTAgQEAKIAlpZiAocGFnZSkgewogCQlnZXRfcGFnZShwYWdlKTsKIAkJcGFnZV9kdXBfcm1hcChwYWdlKTsKLQkJcnNzW1BhZ2VBbm9uKHBhZ2UpXSsrOworCQlpZiAoUGFnZUFub24ocGFnZSkpCisJCQlyc3NbTU1fQU5PTlBBR0VTXSsrOworCQllbHNlCisJCQlyc3NbTU1fRklMRVBBR0VTXSsrOwogCX0KIAogb3V0X3NldF9wdGU6CkBAIC02NDgsMTEgKzczNSwxMiBAQAogCXB0ZV90ICpzcmNfcHRlLCAqZHN0X3B0ZTsKIAlzcGlubG9ja190ICpzcmNfcHRsLCAqZHN0X3B0bDsKIAlpbnQgcHJvZ3Jlc3MgPSAwOwotCWludCByc3NbMl07CisJaW50IHJzc1tOUl9NTV9DT1VOVEVSU107CiAJc3dwX2VudHJ5X3QgZW50cnkgPSAoc3dwX2VudHJ5X3QpezB9OwogCiBhZ2FpbjoKLQlyc3NbMV0gPSByc3NbMF0gPSAwOworCWluaXRfcnNzX3ZlYyhyc3MpOworCiAJZHN0X3B0ZSA9IHB0ZV9hbGxvY19tYXBfbG9jayhkc3RfbW0sIGRzdF9wbWQsIGFkZHIsICZkc3RfcHRsKTsKIAlpZiAoIWRzdF9wdGUpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNjg4LDcgKzc3Niw3IEBACiAJYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKCk7CiAJc3Bpbl91bmxvY2soc3JjX3B0bCk7CiAJcHRlX3VubWFwX25lc3RlZChvcmlnX3NyY19wdGUpOwotCWFkZF9tbV9yc3MoZHN0X21tLCByc3NbMF0sIHJzc1sxXSk7CisJYWRkX21tX3Jzc192ZWMoZHN0X21tLCByc3MpOwogCXB0ZV91bm1hcF91bmxvY2sob3JpZ19kc3RfcHRlLCBkc3RfcHRsKTsKIAljb25kX3Jlc2NoZWQoKTsKIApAQCAtODE2LDggKzkwNCw5IEBACiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0bGItPm1tOwogCXB0ZV90ICpwdGU7CiAJc3BpbmxvY2tfdCAqcHRsOwotCWludCBmaWxlX3JzcyA9IDA7Ci0JaW50IGFub25fcnNzID0gMDsKKwlpbnQgcnNzW05SX01NX0NPVU5URVJTXTsKKworCWluaXRfcnNzX3ZlYyhyc3MpOwogCiAJcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBhZGRyLCAmcHRsKTsKIAlhcmNoX2VudGVyX2xhenlfbW11X21vZGUoKTsKQEAgLTg2MywxNCArOTUyLDE0IEBACiAJCQkJc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlLAogCQkJCQkgICBwZ29mZl90b19wdGUocGFnZS0+aW5kZXgpKTsKIAkJCWlmIChQYWdlQW5vbihwYWdlKSkKLQkJCQlhbm9uX3Jzcy0tOworCQkJCXJzc1tNTV9BTk9OUEFHRVNdLS07CiAJCQllbHNlIHsKIAkJCQlpZiAocHRlX2RpcnR5KHB0ZW50KSkKIAkJCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CiAJCQkJaWYgKHB0ZV95b3VuZyhwdGVudCkgJiYKIAkJCQkgICAgbGlrZWx5KCFWTV9TZXF1ZW50aWFsUmVhZEhpbnQodm1hKSkpCiAJCQkJCW1hcmtfcGFnZV9hY2Nlc3NlZChwYWdlKTsKLQkJCQlmaWxlX3Jzcy0tOworCQkJCXJzc1tNTV9GSUxFUEFHRVNdLS07CiAJCQl9CiAJCQlwYWdlX3JlbW92ZV9ybWFwKHBhZ2UpOwogCQkJaWYgKHVubGlrZWx5KHBhZ2VfbWFwY291bnQocGFnZSkgPCAwKSkKQEAgLTg4NywxMyArOTc2LDE4IEBACiAJCWlmIChwdGVfZmlsZShwdGVudCkpIHsKIAkJCWlmICh1bmxpa2VseSghKHZtYS0+dm1fZmxhZ3MgJiBWTV9OT05MSU5FQVIpKSkKIAkJCQlwcmludF9iYWRfcHRlKHZtYSwgYWRkciwgcHRlbnQsIE5VTEwpOwotCQl9IGVsc2UgaWYKLQkJICAodW5saWtlbHkoIWZyZWVfc3dhcF9hbmRfY2FjaGUocHRlX3RvX3N3cF9lbnRyeShwdGVudCkpKSkKLQkJCXByaW50X2JhZF9wdGUodm1hLCBhZGRyLCBwdGVudCwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQlzd3BfZW50cnlfdCBlbnRyeSA9IHB0ZV90b19zd3BfZW50cnkocHRlbnQpOworCisJCQlpZiAoIW5vbl9zd2FwX2VudHJ5KGVudHJ5KSkKKwkJCQlyc3NbTU1fU1dBUEVOVFNdLS07CisJCQlpZiAodW5saWtlbHkoIWZyZWVfc3dhcF9hbmRfY2FjaGUoZW50cnkpKSkKKwkJCQlwcmludF9iYWRfcHRlKHZtYSwgYWRkciwgcHRlbnQsIE5VTEwpOworCQl9CiAJCXB0ZV9jbGVhcl9ub3RfcHJlc2VudF9mdWxsKG1tLCBhZGRyLCBwdGUsIHRsYi0+ZnVsbG1tKTsKIAl9IHdoaWxlIChwdGUrKywgYWRkciArPSBQQUdFX1NJWkUsIChhZGRyICE9IGVuZCAmJiAqemFwX3dvcmsgPiAwKSk7CiAKLQlhZGRfbW1fcnNzKG1tLCBmaWxlX3JzcywgYW5vbl9yc3MpOworCWFkZF9tbV9yc3NfdmVjKG1tLCByc3MpOwogCWFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSgpOwogCXB0ZV91bm1hcF91bmxvY2socHRlIC0gMSwgcHRsKTsKIApAQCAtMTUyNyw3ICsxNjIxLDcgQEAKIAogCS8qIE9rLCBmaW5hbGx5IGp1c3QgaW5zZXJ0IHRoZSB0aGluZy4uICovCiAJZ2V0X3BhZ2UocGFnZSk7Ci0JaW5jX21tX2NvdW50ZXIobW0sIGZpbGVfcnNzKTsKKwlpbmNfbW1fY291bnRlcl9mYXN0KG1tLCBNTV9GSUxFUEFHRVMpOwogCXBhZ2VfYWRkX2ZpbGVfcm1hcChwYWdlKTsKIAlzZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGUsIG1rX3B0ZShwYWdlLCBwcm90KSk7CiAKQEAgLTIwNDQsNiArMjEzOCwxMyBAQAogCQkJcGFnZV9jYWNoZV9yZWxlYXNlKG9sZF9wYWdlKTsKIAkJfQogCQlyZXVzZSA9IHJldXNlX3N3YXBfcGFnZShvbGRfcGFnZSk7CisJCWlmIChyZXVzZSkKKwkJCS8qCisJCQkgKiBUaGUgcGFnZSBpcyBhbGwgb3Vycy4gIE1vdmUgaXQgdG8gb3VyIGFub25fdm1hIHNvCisJCQkgKiB0aGUgcm1hcCBjb2RlIHdpbGwgbm90IHNlYXJjaCBvdXIgcGFyZW50IG9yIHNpYmxpbmdzLgorCQkJICogUHJvdGVjdGVkIGFnYWluc3QgdGhlIHJtYXAgY29kZSBieSB0aGUgcGFnZSBsb2NrLgorCQkJICovCisJCQlwYWdlX21vdmVfYW5vbl9ybWFwKG9sZF9wYWdlLCB2bWEsIGFkZHJlc3MpOwogCQl1bmxvY2tfcGFnZShvbGRfcGFnZSk7CiAJfSBlbHNlIGlmICh1bmxpa2VseSgodm1hLT52bV9mbGFncyAmIChWTV9XUklURXxWTV9TSEFSRUQpKSA9PQogCQkJCQkoVk1fV1JJVEV8Vk1fU0hBUkVEKSkpIHsKQEAgLTIxNjMsMTEgKzIyNjQsMTEgQEAKIAlpZiAobGlrZWx5KHB0ZV9zYW1lKCpwYWdlX3RhYmxlLCBvcmlnX3B0ZSkpKSB7CiAJCWlmIChvbGRfcGFnZSkgewogCQkJaWYgKCFQYWdlQW5vbihvbGRfcGFnZSkpIHsKLQkJCQlkZWNfbW1fY291bnRlcihtbSwgZmlsZV9yc3MpOwotCQkJCWluY19tbV9jb3VudGVyKG1tLCBhbm9uX3Jzcyk7CisJCQkJZGVjX21tX2NvdW50ZXJfZmFzdChtbSwgTU1fRklMRVBBR0VTKTsKKwkJCQlpbmNfbW1fY291bnRlcl9mYXN0KG1tLCBNTV9BTk9OUEFHRVMpOwogCQkJfQogCQl9IGVsc2UKLQkJCWluY19tbV9jb3VudGVyKG1tLCBhbm9uX3Jzcyk7CisJCQlpbmNfbW1fY291bnRlcl9mYXN0KG1tLCBNTV9BTk9OUEFHRVMpOwogCQlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgYWRkcmVzcywgcHRlX3BmbihvcmlnX3B0ZSkpOwogCQllbnRyeSA9IG1rX3B0ZShuZXdfcGFnZSwgdm1hLT52bV9wYWdlX3Byb3QpOwogCQllbnRyeSA9IG1heWJlX21rd3JpdGUocHRlX21rZGlydHkoZW50cnkpLCB2bWEpOwpAQCAtMjYwNCw3ICsyNzA1LDggQEAKIAkgKiBkaXNjYXJkZWQgYXQgc3dhcF9mcmVlKCkuCiAJICovCiAKLQlpbmNfbW1fY291bnRlcihtbSwgYW5vbl9yc3MpOworCWluY19tbV9jb3VudGVyX2Zhc3QobW0sIE1NX0FOT05QQUdFUyk7CisJZGVjX21tX2NvdW50ZXJfZmFzdChtbSwgTU1fU1dBUEVOVFMpOwogCXB0ZSA9IG1rX3B0ZShwYWdlLCB2bWEtPnZtX3BhZ2VfcHJvdCk7CiAJaWYgKChmbGFncyAmIEZBVUxUX0ZMQUdfV1JJVEUpICYmIHJldXNlX3N3YXBfcGFnZShwYWdlKSkgewogCQlwdGUgPSBtYXliZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KHB0ZSksIHZtYSk7CkBAIC0yNjg4LDcgKzI3OTAsNyBAQAogCWlmICghcHRlX25vbmUoKnBhZ2VfdGFibGUpKQogCQlnb3RvIHJlbGVhc2U7CiAKLQlpbmNfbW1fY291bnRlcihtbSwgYW5vbl9yc3MpOworCWluY19tbV9jb3VudGVyX2Zhc3QobW0sIE1NX0FOT05QQUdFUyk7CiAJcGFnZV9hZGRfbmV3X2Fub25fcm1hcChwYWdlLCB2bWEsIGFkZHJlc3MpOwogc2V0cHRlOgogCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHBhZ2VfdGFibGUsIGVudHJ5KTsKQEAgLTI4NDIsMTAgKzI5NDQsMTAgQEAKIAkJaWYgKGZsYWdzICYgRkFVTFRfRkxBR19XUklURSkKIAkJCWVudHJ5ID0gbWF5YmVfbWt3cml0ZShwdGVfbWtkaXJ0eShlbnRyeSksIHZtYSk7CiAJCWlmIChhbm9uKSB7Ci0JCQlpbmNfbW1fY291bnRlcihtbSwgYW5vbl9yc3MpOworCQkJaW5jX21tX2NvdW50ZXJfZmFzdChtbSwgTU1fQU5PTlBBR0VTKTsKIAkJCXBhZ2VfYWRkX25ld19hbm9uX3JtYXAocGFnZSwgdm1hLCBhZGRyZXNzKTsKIAkJfSBlbHNlIHsKLQkJCWluY19tbV9jb3VudGVyKG1tLCBmaWxlX3Jzcyk7CisJCQlpbmNfbW1fY291bnRlcl9mYXN0KG1tLCBNTV9GSUxFUEFHRVMpOwogCQkJcGFnZV9hZGRfZmlsZV9ybWFwKHBhZ2UpOwogCQkJaWYgKGZsYWdzICYgRkFVTFRfRkxBR19XUklURSkgewogCQkJCWRpcnR5X3BhZ2UgPSBwYWdlOwpAQCAtMzAyMyw2ICszMTI1LDkgQEAKIAogCWNvdW50X3ZtX2V2ZW50KFBHRkFVTFQpOwogCisJLyogZG8gY291bnRlciB1cGRhdGVzIGJlZm9yZSBlbnRlcmluZyByZWFsbHkgY3JpdGljYWwgc2VjdGlvbi4gKi8KKwljaGVja19zeW5jX3Jzc19zdGF0KGN1cnJlbnQpOworCiAJaWYgKHVubGlrZWx5KGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKSkKIAkJcmV0dXJuIGh1Z2V0bGJfZmF1bHQobW0sIHZtYSwgYWRkcmVzcywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwppbmRleCAwMzBjZThhLi43OGUzNGU2IDEwMDY0NAotLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jCisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wZm4uaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbW1faW5saW5lLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUtbWFwLmg+CiAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIApAQCAtNTIzLDYgKzUyNCw5IEBACiAJCUJVR19PTihyZXQpOwogCX0KIAorCS8qIGNyZWF0ZSBuZXcgbWVtbWFwIGVudHJ5ICovCisJZmlybXdhcmVfbWFwX2FkZF9ob3RwbHVnKHN0YXJ0LCBzdGFydCArIHNpemUsICJTeXN0ZW0gUkFNIik7CisKIAlnb3RvIG91dDsKIAogZXJyb3I6CmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IDI5MGZiNWIuLmJkYTIzMGUgMTAwNjQ0Ci0tLSBhL21tL21lbXBvbGljeS5jCisrKyBiL21tL21lbXBvbGljeS5jCkBAIC01NjMsMjQgKzU2Myw1MCBAQAogfQogCiAvKiBTdGVwIDI6IGFwcGx5IHBvbGljeSB0byBhIHJhbmdlIGFuZCBkbyBzcGxpdHMuICovCi1zdGF0aWMgaW50IG1iaW5kX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtZW1wb2xpY3kgKm5ldykKK3N0YXRpYyBpbnQgbWJpbmRfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1lbXBvbGljeSAqbmV3X3BvbCkKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQ7Ci0JaW50IGVycjsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByZXY7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJaW50IGVyciA9IDA7CisJcGdvZmZfdCBwZ29mZjsKKwl1bnNpZ25lZCBsb25nIHZtc3RhcnQ7CisJdW5zaWduZWQgbG9uZyB2bWVuZDsKIAotCWVyciA9IDA7Ci0JZm9yICg7IHZtYSAmJiB2bWEtPnZtX3N0YXJ0IDwgZW5kOyB2bWEgPSBuZXh0KSB7CisJdm1hID0gZmluZF92bWFfcHJldihtbSwgc3RhcnQsICZwcmV2KTsKKwlpZiAoIXZtYSB8fCB2bWEtPnZtX3N0YXJ0ID4gc3RhcnQpCisJCXJldHVybiAtRUZBVUxUOworCisJZm9yICg7IHZtYSAmJiB2bWEtPnZtX3N0YXJ0IDwgZW5kOyBwcmV2ID0gdm1hLCB2bWEgPSBuZXh0KSB7CiAJCW5leHQgPSB2bWEtPnZtX25leHQ7Ci0JCWlmICh2bWEtPnZtX3N0YXJ0IDwgc3RhcnQpCi0JCQllcnIgPSBzcGxpdF92bWEodm1hLT52bV9tbSwgdm1hLCBzdGFydCwgMSk7Ci0JCWlmICghZXJyICYmIHZtYS0+dm1fZW5kID4gZW5kKQotCQkJZXJyID0gc3BsaXRfdm1hKHZtYS0+dm1fbW0sIHZtYSwgZW5kLCAwKTsKLQkJaWYgKCFlcnIpCi0JCQllcnIgPSBwb2xpY3lfdm1hKHZtYSwgbmV3KTsKKwkJdm1zdGFydCA9IG1heChzdGFydCwgdm1hLT52bV9zdGFydCk7CisJCXZtZW5kICAgPSBtaW4oZW5kLCB2bWEtPnZtX2VuZCk7CisKKwkJcGdvZmYgPSB2bWEtPnZtX3Bnb2ZmICsgKChzdGFydCAtIHZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQpOworCQlwcmV2ID0gdm1hX21lcmdlKG1tLCBwcmV2LCB2bXN0YXJ0LCB2bWVuZCwgdm1hLT52bV9mbGFncywKKwkJCQkgIHZtYS0+YW5vbl92bWEsIHZtYS0+dm1fZmlsZSwgcGdvZmYsIG5ld19wb2wpOworCQlpZiAocHJldikgeworCQkJdm1hID0gcHJldjsKKwkJCW5leHQgPSB2bWEtPnZtX25leHQ7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAodm1hLT52bV9zdGFydCAhPSB2bXN0YXJ0KSB7CisJCQllcnIgPSBzcGxpdF92bWEodm1hLT52bV9tbSwgdm1hLCB2bXN0YXJ0LCAxKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKHZtYS0+dm1fZW5kICE9IHZtZW5kKSB7CisJCQllcnIgPSBzcGxpdF92bWEodm1hLT52bV9tbSwgdm1hLCB2bWVuZCwgMCk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gb3V0OworCQl9CisJCWVyciA9IHBvbGljeV92bWEodm1hLCBuZXdfcG9sKTsKIAkJaWYgKGVycikKLQkJCWJyZWFrOworCQkJZ290byBvdXQ7CiAJfQorCisgb3V0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTg2MiwzNiArODg4LDM2IEBACiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLS8qCi0gKiBGaW5kIGEgJ3NvdXJjZScgYml0IHNldCBpbiAndG1wJyB3aG9zZSBjb3JyZXNwb25kaW5nICdkZXN0JwotICogYml0IGluICd0bycgaXMgbm90IGFsc28gc2V0IGluICd0bXAnLiAgQ2xlYXIgdGhlIGZvdW5kICdzb3VyY2UnCi0gKiBiaXQgaW4gJ3RtcCcsIGFuZCByZXR1cm4gdGhhdCA8c291cmNlLCBkZXN0PiBwYWlyIGZvciBtaWdyYXRpb24uCi0gKiBUaGUgcGFpciBvZiBub2RlbWFza3MgJ3RvJyBhbmQgJ2Zyb20nIGRlZmluZSB0aGUgbWFwLgotICoKLSAqIElmIG5vIHBhaXIgb2YgYml0cyBpcyBmb3VuZCB0aGF0IHdheSwgZmFsbGJhY2sgdG8gcGlja2luZyBzb21lCi0gKiBwYWlyIG9mICdzb3VyY2UnIGFuZCAnZGVzdCcgYml0cyB0aGF0IGFyZSBub3QgdGhlIHNhbWUuICBJZiB0aGUKLSAqICdzb3VyY2UnIGFuZCAnZGVzdCcgYml0cyBhcmUgdGhlIHNhbWUsIHRoaXMgcmVwcmVzZW50cyBhIG5vZGUKLSAqIHRoYXQgd2lsbCBiZSBtaWdyYXRpbmcgdG8gaXRzZWxmLCBzbyBubyBwYWdlcyBuZWVkIG1vdmUuCi0gKgotICogSWYgbm8gYml0cyBhcmUgbGVmdCBpbiAndG1wJywgb3IgaWYgYWxsIHJlbWFpbmluZyBiaXRzIGxlZnQKLSAqIGluICd0bXAnIGNvcnJlc3BvbmQgdG8gdGhlIHNhbWUgYml0IGluICd0bycsIHJldHVybiBmYWxzZQotICogKG5vdGhpbmcgbGVmdCB0byBtaWdyYXRlKS4KLSAqCi0gKiBUaGlzIGxldHMgdXMgcGljayBhIHBhaXIgb2Ygbm9kZXMgdG8gbWlncmF0ZSBiZXR3ZWVuLCBzdWNoIHRoYXQKLSAqIGlmIHBvc3NpYmxlIHRoZSBkZXN0IG5vZGUgaXMgbm90IGFscmVhZHkgb2NjdXBpZWQgYnkgc29tZSBvdGhlcgotICogc291cmNlIG5vZGUsIG1pbmltaXppbmcgdGhlIHJpc2sgb2Ygb3ZlcmxvYWRpbmcgdGhlIG1lbW9yeSBvbiBhCi0gKiBub2RlIHRoYXQgd291bGQgaGFwcGVuIGlmIHdlIG1pZ3JhdGVkIGluY29taW5nIG1lbW9yeSB0byBhIG5vZGUKLSAqIGJlZm9yZSBtaWdyYXRpbmcgb3V0Z29pbmcgbWVtb3J5IHNvdXJjZSB0aGF0IHNhbWUgbm9kZS4KLSAqCi0gKiBBIHNpbmdsZSBzY2FuIG9mIHRtcCBpcyBzdWZmaWNpZW50LiAgQXMgd2UgZ28sIHdlIHJlbWVtYmVyIHRoZQotICogbW9zdCByZWNlbnQgPHMsIGQ+IHBhaXIgdGhhdCBtb3ZlZCAocyAhPSBkKS4gIElmIHdlIGZpbmQgYSBwYWlyCi0gKiB0aGF0IG5vdCBvbmx5IG1vdmVkLCBidXQgd2hhdCdzIGJldHRlciwgbW92ZWQgdG8gYW4gZW1wdHkgc2xvdAotICogKGQgaXMgbm90IHNldCBpbiB0bXApLCB0aGVuIHdlIGJyZWFrIG91dCB0aGVuLCB3aXRoIHRoYXQgcGFpci4KLSAqIE90aGVyd2lzZSB3aGVuIHdlIGZpbmlzaCBzY2Fubm5nIGZyb21fdG1wLCB3ZSBhdCBsZWFzdCBoYXZlIHRoZQotICogbW9zdCByZWNlbnQgPHMsIGQ+IHBhaXIgdGhhdCBtb3ZlZC4gIElmIHdlIGdldCBhbGwgdGhlIHdheSB0aHJvdWdoCi0gKiB0aGUgc2NhbiBvZiB0bXAgd2l0aG91dCBmaW5kaW5nIGFueSBub2RlIHRoYXQgbW92ZWQsIG11Y2ggbGVzcwotICogbW92ZWQgdG8gYW4gZW1wdHkgbm9kZSwgdGhlbiB0aGVyZSBpcyBub3RoaW5nIGxlZnQgd29ydGggbWlncmF0aW5nLgotICovCisJLyoKKwkgKiBGaW5kIGEgJ3NvdXJjZScgYml0IHNldCBpbiAndG1wJyB3aG9zZSBjb3JyZXNwb25kaW5nICdkZXN0JworCSAqIGJpdCBpbiAndG8nIGlzIG5vdCBhbHNvIHNldCBpbiAndG1wJy4gIENsZWFyIHRoZSBmb3VuZCAnc291cmNlJworCSAqIGJpdCBpbiAndG1wJywgYW5kIHJldHVybiB0aGF0IDxzb3VyY2UsIGRlc3Q+IHBhaXIgZm9yIG1pZ3JhdGlvbi4KKwkgKiBUaGUgcGFpciBvZiBub2RlbWFza3MgJ3RvJyBhbmQgJ2Zyb20nIGRlZmluZSB0aGUgbWFwLgorCSAqCisJICogSWYgbm8gcGFpciBvZiBiaXRzIGlzIGZvdW5kIHRoYXQgd2F5LCBmYWxsYmFjayB0byBwaWNraW5nIHNvbWUKKwkgKiBwYWlyIG9mICdzb3VyY2UnIGFuZCAnZGVzdCcgYml0cyB0aGF0IGFyZSBub3QgdGhlIHNhbWUuICBJZiB0aGUKKwkgKiAnc291cmNlJyBhbmQgJ2Rlc3QnIGJpdHMgYXJlIHRoZSBzYW1lLCB0aGlzIHJlcHJlc2VudHMgYSBub2RlCisJICogdGhhdCB3aWxsIGJlIG1pZ3JhdGluZyB0byBpdHNlbGYsIHNvIG5vIHBhZ2VzIG5lZWQgbW92ZS4KKwkgKgorCSAqIElmIG5vIGJpdHMgYXJlIGxlZnQgaW4gJ3RtcCcsIG9yIGlmIGFsbCByZW1haW5pbmcgYml0cyBsZWZ0CisJICogaW4gJ3RtcCcgY29ycmVzcG9uZCB0byB0aGUgc2FtZSBiaXQgaW4gJ3RvJywgcmV0dXJuIGZhbHNlCisJICogKG5vdGhpbmcgbGVmdCB0byBtaWdyYXRlKS4KKwkgKgorCSAqIFRoaXMgbGV0cyB1cyBwaWNrIGEgcGFpciBvZiBub2RlcyB0byBtaWdyYXRlIGJldHdlZW4sIHN1Y2ggdGhhdAorCSAqIGlmIHBvc3NpYmxlIHRoZSBkZXN0IG5vZGUgaXMgbm90IGFscmVhZHkgb2NjdXBpZWQgYnkgc29tZSBvdGhlcgorCSAqIHNvdXJjZSBub2RlLCBtaW5pbWl6aW5nIHRoZSByaXNrIG9mIG92ZXJsb2FkaW5nIHRoZSBtZW1vcnkgb24gYQorCSAqIG5vZGUgdGhhdCB3b3VsZCBoYXBwZW4gaWYgd2UgbWlncmF0ZWQgaW5jb21pbmcgbWVtb3J5IHRvIGEgbm9kZQorCSAqIGJlZm9yZSBtaWdyYXRpbmcgb3V0Z29pbmcgbWVtb3J5IHNvdXJjZSB0aGF0IHNhbWUgbm9kZS4KKwkgKgorCSAqIEEgc2luZ2xlIHNjYW4gb2YgdG1wIGlzIHN1ZmZpY2llbnQuICBBcyB3ZSBnbywgd2UgcmVtZW1iZXIgdGhlCisJICogbW9zdCByZWNlbnQgPHMsIGQ+IHBhaXIgdGhhdCBtb3ZlZCAocyAhPSBkKS4gIElmIHdlIGZpbmQgYSBwYWlyCisJICogdGhhdCBub3Qgb25seSBtb3ZlZCwgYnV0IHdoYXQncyBiZXR0ZXIsIG1vdmVkIHRvIGFuIGVtcHR5IHNsb3QKKwkgKiAoZCBpcyBub3Qgc2V0IGluIHRtcCksIHRoZW4gd2UgYnJlYWsgb3V0IHRoZW4sIHdpdGggdGhhdCBwYWlyLgorCSAqIE90aGVyd2lzZSB3aGVuIHdlIGZpbmlzaCBzY2Fubm5nIGZyb21fdG1wLCB3ZSBhdCBsZWFzdCBoYXZlIHRoZQorCSAqIG1vc3QgcmVjZW50IDxzLCBkPiBwYWlyIHRoYXQgbW92ZWQuICBJZiB3ZSBnZXQgYWxsIHRoZSB3YXkgdGhyb3VnaAorCSAqIHRoZSBzY2FuIG9mIHRtcCB3aXRob3V0IGZpbmRpbmcgYW55IG5vZGUgdGhhdCBtb3ZlZCwgbXVjaCBsZXNzCisJICogbW92ZWQgdG8gYW4gZW1wdHkgbm9kZSwgdGhlbiB0aGVyZSBpcyBub3RoaW5nIGxlZnQgd29ydGggbWlncmF0aW5nLgorCSAqLwogCiAJdG1wID0gKmZyb21fbm9kZXM7CiAJd2hpbGUgKCFub2Rlc19lbXB0eSh0bXApKSB7CkBAIC0xMDQ3LDcgKzEwNzMsNyBAQAogCWlmICghSVNfRVJSKHZtYSkpIHsKIAkJaW50IG5yX2ZhaWxlZCA9IDA7CiAKLQkJZXJyID0gbWJpbmRfcmFuZ2Uodm1hLCBzdGFydCwgZW5kLCBuZXcpOworCQllcnIgPSBtYmluZF9yYW5nZShtbSwgc3RhcnQsIGVuZCwgbmV3KTsKIAogCQlpZiAoIWxpc3RfZW1wdHkoJnBhZ2VsaXN0KSkKIAkJCW5yX2ZhaWxlZCA9IG1pZ3JhdGVfcGFnZXMoJnBhZ2VsaXN0LCBuZXdfdm1hX3BhZ2UsCmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggZWRiNjEwMS4uODgwMDBiOCAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCisrKyBiL21tL21pZ3JhdGUuYwpAQCAtMjc1LDggKzI3NSw2IEBACiAgKi8KIHN0YXRpYyB2b2lkIG1pZ3JhdGVfcGFnZV9jb3B5KHN0cnVjdCBwYWdlICpuZXdwYWdlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlpbnQgYW5vbjsKLQogCWNvcHlfaGlnaHBhZ2UobmV3cGFnZSwgcGFnZSk7CiAKIAlpZiAoUGFnZUVycm9yKHBhZ2UpKQpAQCAtMzEzLDggKzMxMSw2IEBACiAJQ2xlYXJQYWdlU3dhcENhY2hlKHBhZ2UpOwogCUNsZWFyUGFnZVByaXZhdGUocGFnZSk7CiAJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCAwKTsKLQkvKiBwYWdlLT5tYXBwaW5nIGNvbnRhaW5zIGEgZmxhZyBmb3IgUGFnZUFub24oKSAqLwotCWFub24gPSBQYWdlQW5vbihwYWdlKTsKIAlwYWdlLT5tYXBwaW5nID0gTlVMTDsKIAogCS8qCmRpZmYgLS1naXQgYS9tbS9tbG9jay5jIGIvbW0vbWxvY2suYwppbmRleCAyYjgzMzVhLi44ZjRlMmRmIDEwMDY0NAotLS0gYS9tbS9tbG9jay5jCisrKyBiL21tL21sb2NrLmMKQEAgLTI1LDcgKzI1LDcgQEAKIHsKIAlpZiAoY2FwYWJsZShDQVBfSVBDX0xPQ0spKQogCQlyZXR1cm4gMTsKLQlpZiAoY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9NRU1MT0NLXS5ybGltX2N1ciAhPSAwKQorCWlmIChybGltaXQoUkxJTUlUX01FTUxPQ0spICE9IDApCiAJCXJldHVybiAxOwogCXJldHVybiAwOwogfQpAQCAtNDg3LDcgKzQ4Nyw3IEBACiAJbG9ja2VkID0gbGVuID4+IFBBR0VfU0hJRlQ7CiAJbG9ja2VkICs9IGN1cnJlbnQtPm1tLT5sb2NrZWRfdm07CiAKLQlsb2NrX2xpbWl0ID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9NRU1MT0NLXS5ybGltX2N1cjsKKwlsb2NrX2xpbWl0ID0gcmxpbWl0KFJMSU1JVF9NRU1MT0NLKTsKIAlsb2NrX2xpbWl0ID4+PSBQQUdFX1NISUZUOwogCiAJLyogY2hlY2sgYWdhaW5zdCByZXNvdXJjZSBsaW1pdHMgKi8KQEAgLTU1MCw3ICs1NTAsNyBAQAogCiAJZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAotCWxvY2tfbGltaXQgPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX01FTUxPQ0tdLnJsaW1fY3VyOworCWxvY2tfbGltaXQgPSBybGltaXQoUkxJTUlUX01FTUxPQ0spOwogCWxvY2tfbGltaXQgPj49IFBBR0VfU0hJRlQ7CiAKIAlyZXQgPSAtRU5PTUVNOwpAQCAtNTg0LDcgKzU4NCw3IEBACiAJaW50IGFsbG93ZWQgPSAwOwogCiAJbG9ja2VkID0gKHNpemUgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwotCWxvY2tfbGltaXQgPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX01FTUxPQ0tdLnJsaW1fY3VyOworCWxvY2tfbGltaXQgPSBybGltaXQoUkxJTUlUX01FTUxPQ0spOwogCWlmIChsb2NrX2xpbWl0ID09IFJMSU1fSU5GSU5JVFkpCiAJCWFsbG93ZWQgPSAxOwogCWxvY2tfbGltaXQgPj49IFBBR0VfU0hJRlQ7CkBAIC02MTgsMTIgKzYxOCwxMiBAQAogCiAJZG93bl93cml0ZSgmbW0tPm1tYXBfc2VtKTsKIAotCWxpbSA9IHJsaW1bUkxJTUlUX0FTXS5ybGltX2N1ciA+PiBQQUdFX1NISUZUOworCWxpbSA9IEFDQ0VTU19PTkNFKHJsaW1bUkxJTUlUX0FTXS5ybGltX2N1cikgPj4gUEFHRV9TSElGVDsKIAl2bSAgID0gbW0tPnRvdGFsX3ZtICsgcGdzejsKIAlpZiAobGltIDwgdm0pCiAJCWdvdG8gb3V0OwogCi0JbGltID0gcmxpbVtSTElNSVRfTUVNTE9DS10ucmxpbV9jdXIgPj4gUEFHRV9TSElGVDsKKwlsaW0gPSBBQ0NFU1NfT05DRShybGltW1JMSU1JVF9NRU1MT0NLXS5ybGltX2N1cikgPj4gUEFHRV9TSElGVDsKIAl2bSAgID0gbW0tPmxvY2tlZF92bSArIHBnc3o7CiAJaWYgKGxpbSA8IHZtKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuYwppbmRleCBlZTIyOTg5Li5mMWI0NDQ4IDEwMDY0NAotLS0gYS9tbS9tbWFwLmMKKysrIGIvbW0vbW1hcC5jCkBAIC0yNjUsNyArMjY1LDcgQEAKIAkgKiBzZWdtZW50IGdyb3cgYmV5b25kIGl0cyBzZXQgbGltaXQgdGhlIGluIGNhc2Ugd2hlcmUgdGhlIGxpbWl0IGlzCiAJICogbm90IHBhZ2UgYWxpZ25lZCAtUmFtIEd1cHRhCiAJICovCi0JcmxpbSA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfREFUQV0ucmxpbV9jdXI7CisJcmxpbSA9IHJsaW1pdChSTElNSVRfREFUQSk7CiAJaWYgKHJsaW0gPCBSTElNX0lORklOSVRZICYmIChicmsgLSBtbS0+c3RhcnRfYnJrKSArCiAJCQkobW0tPmVuZF9kYXRhIC0gbW0tPnN0YXJ0X2RhdGEpID4gcmxpbSkKIAkJZ290byBvdXQ7CkBAIC00MzcsNyArNDM3LDYgQEAKIHsKIAlfX3ZtYV9saW5rX2xpc3QobW0sIHZtYSwgcHJldiwgcmJfcGFyZW50KTsKIAlfX3ZtYV9saW5rX3JiKG1tLCB2bWEsIHJiX2xpbmssIHJiX3BhcmVudCk7Ci0JX19hbm9uX3ZtYV9saW5rKHZtYSk7CiB9CiAKIHN0YXRpYyB2b2lkIHZtYV9saW5rKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKQEAgLTQ5OSw3ICs0OTgsNyBAQAogICogYXJlIG5lY2Vzc2FyeS4gIFRoZSAiaW5zZXJ0IiB2bWEgKGlmIGFueSkgaXMgdG8gYmUgaW5zZXJ0ZWQKICAqIGJlZm9yZSB3ZSBkcm9wIHRoZSBuZWNlc3NhcnkgbG9ja3MuCiAgKi8KLXZvaWQgdm1hX2FkanVzdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKK2ludCB2bWFfYWRqdXN0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCXVuc2lnbmVkIGxvbmcgZW5kLCBwZ29mZl90IHBnb2ZmLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmluc2VydCkKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CkBAIC01NDIsNiArNTQxLDI2IEBACiAJCX0KIAl9CiAKKwkvKgorCSAqIFdoZW4gY2hhbmdpbmcgb25seSB2bWEtPnZtX2VuZCwgd2UgZG9uJ3QgcmVhbGx5IG5lZWQgYW5vbl92bWEgbG9jay4KKwkgKi8KKwlpZiAodm1hLT5hbm9uX3ZtYSAmJiAoaW5zZXJ0IHx8IGltcG9ydGVyIHx8IHN0YXJ0ICE9IHZtYS0+dm1fc3RhcnQpKQorCQlhbm9uX3ZtYSA9IHZtYS0+YW5vbl92bWE7CisJaWYgKGFub25fdm1hKSB7CisJCS8qCisJCSAqIEVhc2lseSBvdmVybG9va2VkOiB3aGVuIG1wcm90ZWN0IHNoaWZ0cyB0aGUgYm91bmRhcnksCisJCSAqIG1ha2Ugc3VyZSB0aGUgZXhwYW5kaW5nIHZtYSBoYXMgYW5vbl92bWEgc2V0IGlmIHRoZQorCQkgKiBzaHJpbmtpbmcgdm1hIGhhZCwgdG8gY292ZXIgYW55IGFub24gcGFnZXMgaW1wb3J0ZWQuCisJCSAqLworCQlpZiAoaW1wb3J0ZXIgJiYgIWltcG9ydGVyLT5hbm9uX3ZtYSkgeworCQkJLyogQmxvY2sgcmV2ZXJzZSBtYXAgbG9va3VwcyB1bnRpbCB0aGluZ3MgYXJlIHNldCB1cC4gKi8KKwkJCWlmIChhbm9uX3ZtYV9jbG9uZShpbXBvcnRlciwgdm1hKSkgeworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQkJaW1wb3J0ZXItPmFub25fdm1hID0gYW5vbl92bWE7CisJCX0KKwl9CisKIAlpZiAoZmlsZSkgewogCQltYXBwaW5nID0gZmlsZS0+Zl9tYXBwaW5nOwogCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fTk9OTElORUFSKSkKQEAgLTU2NywyNSArNTg2LDYgQEAKIAkJfQogCX0KIAotCS8qCi0JICogV2hlbiBjaGFuZ2luZyBvbmx5IHZtYS0+dm1fZW5kLCB3ZSBkb24ndCByZWFsbHkgbmVlZAotCSAqIGFub25fdm1hIGxvY2suCi0JICovCi0JaWYgKHZtYS0+YW5vbl92bWEgJiYgKGluc2VydCB8fCBpbXBvcnRlciB8fCBzdGFydCAhPSB2bWEtPnZtX3N0YXJ0KSkKLQkJYW5vbl92bWEgPSB2bWEtPmFub25fdm1hOwotCWlmIChhbm9uX3ZtYSkgewotCQlzcGluX2xvY2soJmFub25fdm1hLT5sb2NrKTsKLQkJLyoKLQkJICogRWFzaWx5IG92ZXJsb29rZWQ6IHdoZW4gbXByb3RlY3Qgc2hpZnRzIHRoZSBib3VuZGFyeSwKLQkJICogbWFrZSBzdXJlIHRoZSBleHBhbmRpbmcgdm1hIGhhcyBhbm9uX3ZtYSBzZXQgaWYgdGhlCi0JCSAqIHNocmlua2luZyB2bWEgaGFkLCB0byBjb3ZlciBhbnkgYW5vbiBwYWdlcyBpbXBvcnRlZC4KLQkJICovCi0JCWlmIChpbXBvcnRlciAmJiAhaW1wb3J0ZXItPmFub25fdm1hKSB7Ci0JCQlpbXBvcnRlci0+YW5vbl92bWEgPSBhbm9uX3ZtYTsKLQkJCV9fYW5vbl92bWFfbGluayhpbXBvcnRlcik7Ci0JCX0KLQl9Ci0KIAlpZiAocm9vdCkgewogCQlmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpOwogCQl2bWFfcHJpb190cmVlX3JlbW92ZSh2bWEsIHJvb3QpOwpAQCAtNjE2LDggKzYxNiw2IEBACiAJCV9fdm1hX3VubGluayhtbSwgbmV4dCwgdm1hKTsKIAkJaWYgKGZpbGUpCiAJCQlfX3JlbW92ZV9zaGFyZWRfdm1fc3RydWN0KG5leHQsIGZpbGUsIG1hcHBpbmcpOwotCQlpZiAobmV4dC0+YW5vbl92bWEpCi0JCQlfX2Fub25fdm1hX21lcmdlKHZtYSwgbmV4dCk7CiAJfSBlbHNlIGlmIChpbnNlcnQpIHsKIAkJLyoKIAkJICogc3BsaXRfdm1hIGhhcyBzcGxpdCBpbnNlcnQgZnJvbSB2bWEsIGFuZCBuZWVkcwpAQCAtNjI3LDggKzYyNSw2IEBACiAJCV9faW5zZXJ0X3ZtX3N0cnVjdChtbSwgaW5zZXJ0KTsKIAl9CiAKLQlpZiAoYW5vbl92bWEpCi0JCXNwaW5fdW5sb2NrKCZhbm9uX3ZtYS0+bG9jayk7CiAJaWYgKG1hcHBpbmcpCiAJCXNwaW5fdW5sb2NrKCZtYXBwaW5nLT5pX21tYXBfbG9jayk7CiAKQEAgLTYzOCw2ICs2MzQsOCBAQAogCQkJaWYgKG5leHQtPnZtX2ZsYWdzICYgVk1fRVhFQ1VUQUJMRSkKIAkJCQlyZW1vdmVkX2V4ZV9maWxlX3ZtYShtbSk7CiAJCX0KKwkJaWYgKG5leHQtPmFub25fdm1hKQorCQkJYW5vbl92bWFfbWVyZ2Uodm1hLCBuZXh0KTsKIAkJbW0tPm1hcF9jb3VudC0tOwogCQltcG9sX3B1dCh2bWFfcG9saWN5KG5leHQpKTsKIAkJa21lbV9jYWNoZV9mcmVlKHZtX2FyZWFfY2FjaGVwLCBuZXh0KTsKQEAgLTY1Myw2ICs2NTEsOCBAQAogCX0KIAogCXZhbGlkYXRlX21tKG1tKTsKKworCXJldHVybiAwOwogfQogCiAvKgpAQCAtNzU5LDYgKzc1OSw3IEBACiB7CiAJcGdvZmZfdCBwZ2xlbiA9IChlbmQgLSBhZGRyKSA+PiBQQUdFX1NISUZUOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYXJlYSwgKm5leHQ7CisJaW50IGVycjsKIAogCS8qCiAJICogV2UgbGF0ZXIgcmVxdWlyZSB0aGF0IHZtYS0+dm1fZmxhZ3MgPT0gdm1fZmxhZ3MsCkBAIC03OTIsMTEgKzc5MywxMyBAQAogCQkJCWlzX21lcmdlYWJsZV9hbm9uX3ZtYShwcmV2LT5hbm9uX3ZtYSwKIAkJCQkJCSAgICAgIG5leHQtPmFub25fdm1hKSkgewogCQkJCQkJCS8qIGNhc2VzIDEsIDYgKi8KLQkJCXZtYV9hZGp1c3QocHJldiwgcHJldi0+dm1fc3RhcnQsCisJCQllcnIgPSB2bWFfYWRqdXN0KHByZXYsIHByZXYtPnZtX3N0YXJ0LAogCQkJCW5leHQtPnZtX2VuZCwgcHJldi0+dm1fcGdvZmYsIE5VTEwpOwogCQl9IGVsc2UJCQkJCS8qIGNhc2VzIDIsIDUsIDcgKi8KLQkJCXZtYV9hZGp1c3QocHJldiwgcHJldi0+dm1fc3RhcnQsCisJCQllcnIgPSB2bWFfYWRqdXN0KHByZXYsIHByZXYtPnZtX3N0YXJ0LAogCQkJCWVuZCwgcHJldi0+dm1fcGdvZmYsIE5VTEwpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIE5VTEw7CiAJCXJldHVybiBwcmV2OwogCX0KIApAQCAtODA4LDExICs4MTEsMTMgQEAKIAkJCWNhbl92bWFfbWVyZ2VfYmVmb3JlKG5leHQsIHZtX2ZsYWdzLAogCQkJCQlhbm9uX3ZtYSwgZmlsZSwgcGdvZmYrcGdsZW4pKSB7CiAJCWlmIChwcmV2ICYmIGFkZHIgPCBwcmV2LT52bV9lbmQpCS8qIGNhc2UgNCAqLwotCQkJdm1hX2FkanVzdChwcmV2LCBwcmV2LT52bV9zdGFydCwKKwkJCWVyciA9IHZtYV9hZGp1c3QocHJldiwgcHJldi0+dm1fc3RhcnQsCiAJCQkJYWRkciwgcHJldi0+dm1fcGdvZmYsIE5VTEwpOwogCQllbHNlCQkJCQkvKiBjYXNlcyAzLCA4ICovCi0JCQl2bWFfYWRqdXN0KGFyZWEsIGFkZHIsIG5leHQtPnZtX2VuZCwKKwkJCWVyciA9IHZtYV9hZGp1c3QoYXJlYSwgYWRkciwgbmV4dC0+dm1fZW5kLAogCQkJCW5leHQtPnZtX3Bnb2ZmIC0gcGdsZW4sIE5VTEwpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIE5VTEw7CiAJCXJldHVybiBhcmVhOwogCX0KIApAQCAtOTY3LDcgKzk3Miw3IEBACiAJCXVuc2lnbmVkIGxvbmcgbG9ja2VkLCBsb2NrX2xpbWl0OwogCQlsb2NrZWQgPSBsZW4gPj4gUEFHRV9TSElGVDsKIAkJbG9ja2VkICs9IG1tLT5sb2NrZWRfdm07Ci0JCWxvY2tfbGltaXQgPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX01FTUxPQ0tdLnJsaW1fY3VyOworCQlsb2NrX2xpbWl0ID0gcmxpbWl0KFJMSU1JVF9NRU1MT0NLKTsKIAkJbG9ja19saW1pdCA+Pj0gUEFHRV9TSElGVDsKIAkJaWYgKGxvY2tlZCA+IGxvY2tfbGltaXQgJiYgIWNhcGFibGUoQ0FQX0lQQ19MT0NLKSkKIAkJCXJldHVybiAtRUFHQUlOOwpAQCAtMTIwNSw2ICsxMjEwLDcgQEAKIAl2bWEtPnZtX2ZsYWdzID0gdm1fZmxhZ3M7CiAJdm1hLT52bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtX2ZsYWdzKTsKIAl2bWEtPnZtX3Bnb2ZmID0gcGdvZmY7CisJSU5JVF9MSVNUX0hFQUQoJnZtYS0+YW5vbl92bWFfY2hhaW4pOwogCiAJaWYgKGZpbGUpIHsKIAkJZXJyb3IgPSAtRUlOVkFMOwpAQCAtMTI2NSwxMyArMTI3MSw4IEBACiAJbW0tPnRvdGFsX3ZtICs9IGxlbiA+PiBQQUdFX1NISUZUOwogCXZtX3N0YXRfYWNjb3VudChtbSwgdm1fZmxhZ3MsIGZpbGUsIGxlbiA+PiBQQUdFX1NISUZUKTsKIAlpZiAodm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKLQkJLyoKLQkJICogbWFrZXMgcGFnZXMgcHJlc2VudDsgZG93bmdyYWRlcywgZHJvcHMsIHJlYWNxdWlyZXMgbW1hcF9zZW0KLQkJICovCi0JCWxvbmcgbnJfcGFnZXMgPSBtbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBhZGRyLCBhZGRyICsgbGVuKTsKLQkJaWYgKG5yX3BhZ2VzIDwgMCkKLQkJCXJldHVybiBucl9wYWdlczsJLyogdm1hIGdvbmUhICovCi0JCW1tLT5sb2NrZWRfdm0gKz0gKGxlbiA+PiBQQUdFX1NISUZUKSAtIG5yX3BhZ2VzOworCQlpZiAoIW1sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIGFkZHIsIGFkZHIgKyBsZW4pKQorCQkJbW0tPmxvY2tlZF92bSArPSAobGVuID4+IFBBR0VfU0hJRlQpOwogCX0gZWxzZSBpZiAoKGZsYWdzICYgTUFQX1BPUFVMQVRFKSAmJiAhKGZsYWdzICYgTUFQX05PTkJMT0NLKSkKIAkJbWFrZV9wYWdlc19wcmVzZW50KGFkZHIsIGFkZHIgKyBsZW4pOwogCXJldHVybiBhZGRyOwpAQCAtMTU5OSw3ICsxNjAwLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBTdGFjayBsaW1pdCB0ZXN0ICovCi0JaWYgKHNpemUgPiBybGltW1JMSU1JVF9TVEFDS10ucmxpbV9jdXIpCisJaWYgKHNpemUgPiBBQ0NFU1NfT05DRShybGltW1JMSU1JVF9TVEFDS10ucmxpbV9jdXIpKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIG1sb2NrIGxpbWl0IHRlc3RzICovCkBAIC0xNjA3LDcgKzE2MDgsOCBAQAogCQl1bnNpZ25lZCBsb25nIGxvY2tlZDsKIAkJdW5zaWduZWQgbG9uZyBsaW1pdDsKIAkJbG9ja2VkID0gbW0tPmxvY2tlZF92bSArIGdyb3c7Ci0JCWxpbWl0ID0gcmxpbVtSTElNSVRfTUVNTE9DS10ucmxpbV9jdXIgPj4gUEFHRV9TSElGVDsKKwkJbGltaXQgPSBBQ0NFU1NfT05DRShybGltW1JMSU1JVF9NRU1MT0NLXS5ybGltX2N1cik7CisJCWxpbWl0ID4+PSBQQUdFX1NISUZUOwogCQlpZiAobG9ja2VkID4gbGltaXQgJiYgIWNhcGFibGUoQ0FQX0lQQ19MT0NLKSkKIAkJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTE3NTQsOCArMTc1Niw3IEBACiAJaWYgKCFwcmV2IHx8IGV4cGFuZF9zdGFjayhwcmV2LCBhZGRyKSkKIAkJcmV0dXJuIE5VTEw7CiAJaWYgKHByZXYtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7Ci0JCWlmIChtbG9ja192bWFfcGFnZXNfcmFuZ2UocHJldiwgYWRkciwgcHJldi0+dm1fZW5kKSA8IDApCi0JCQlyZXR1cm4gTlVMTDsJLyogdm1hIGdvbmUhICovCisJCW1sb2NrX3ZtYV9wYWdlc19yYW5nZShwcmV2LCBhZGRyLCBwcmV2LT52bV9lbmQpOwogCX0KIAlyZXR1cm4gcHJldjsKIH0KQEAgLTE3ODMsOCArMTc4NCw3IEBACiAJaWYgKGV4cGFuZF9zdGFjayh2bWEsIGFkZHIpKQogCQlyZXR1cm4gTlVMTDsKIAlpZiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgewotCQlpZiAobWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgYWRkciwgc3RhcnQpIDwgMCkKLQkJCXJldHVybiBOVUxMOwkvKiB2bWEgZ29uZSEgKi8KKwkJbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgYWRkciwgc3RhcnQpOwogCX0KIAlyZXR1cm4gdm1hOwogfQpAQCAtMTg3MSw2ICsxODcxLDcgQEAKIHsKIAlzdHJ1Y3QgbWVtcG9saWN5ICpwb2w7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICpuZXc7CisJaW50IGVyciA9IC1FTk9NRU07CiAKIAlpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkgJiYgKGFkZHIgJgogCQkJCQl+KGh1Z2VfcGFnZV9tYXNrKGhzdGF0ZV92bWEodm1hKSkpKSkKQEAgLTE4NzgsMTEgKzE4NzksMTMgQEAKIAogCW5ldyA9IGttZW1fY2FjaGVfYWxsb2Modm1fYXJlYV9jYWNoZXAsIEdGUF9LRVJORUwpOwogCWlmICghbmV3KQotCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBvdXRfZXJyOwogCiAJLyogbW9zdCBmaWVsZHMgYXJlIHRoZSBzYW1lLCBjb3B5IGFsbCwgYW5kIHRoZW4gZml4dXAgKi8KIAkqbmV3ID0gKnZtYTsKIAorCUlOSVRfTElTVF9IRUFEKCZuZXctPmFub25fdm1hX2NoYWluKTsKKwogCWlmIChuZXdfYmVsb3cpCiAJCW5ldy0+dm1fZW5kID0gYWRkcjsKIAllbHNlIHsKQEAgLTE4OTIsMTEgKzE4OTUsMTQgQEAKIAogCXBvbCA9IG1wb2xfZHVwKHZtYV9wb2xpY3kodm1hKSk7CiAJaWYgKElTX0VSUihwb2wpKSB7Ci0JCWttZW1fY2FjaGVfZnJlZSh2bV9hcmVhX2NhY2hlcCwgbmV3KTsKLQkJcmV0dXJuIFBUUl9FUlIocG9sKTsKKwkJZXJyID0gUFRSX0VSUihwb2wpOworCQlnb3RvIG91dF9mcmVlX3ZtYTsKIAl9CiAJdm1hX3NldF9wb2xpY3kobmV3LCBwb2wpOwogCisJaWYgKGFub25fdm1hX2Nsb25lKG5ldywgdm1hKSkKKwkJZ290byBvdXRfZnJlZV9tcG9sOworCiAJaWYgKG5ldy0+dm1fZmlsZSkgewogCQlnZXRfZmlsZShuZXctPnZtX2ZpbGUpOwogCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUNVVEFCTEUpCkBAIC0xOTA3LDEyICsxOTEzLDI4IEBACiAJCW5ldy0+dm1fb3BzLT5vcGVuKG5ldyk7CiAKIAlpZiAobmV3X2JlbG93KQotCQl2bWFfYWRqdXN0KHZtYSwgYWRkciwgdm1hLT52bV9lbmQsIHZtYS0+dm1fcGdvZmYgKworCQllcnIgPSB2bWFfYWRqdXN0KHZtYSwgYWRkciwgdm1hLT52bV9lbmQsIHZtYS0+dm1fcGdvZmYgKwogCQkJKChhZGRyIC0gbmV3LT52bV9zdGFydCkgPj4gUEFHRV9TSElGVCksIG5ldyk7CiAJZWxzZQotCQl2bWFfYWRqdXN0KHZtYSwgdm1hLT52bV9zdGFydCwgYWRkciwgdm1hLT52bV9wZ29mZiwgbmV3KTsKKwkJZXJyID0gdm1hX2FkanVzdCh2bWEsIHZtYS0+dm1fc3RhcnQsIGFkZHIsIHZtYS0+dm1fcGdvZmYsIG5ldyk7CiAKLQlyZXR1cm4gMDsKKwkvKiBTdWNjZXNzLiAqLworCWlmICghZXJyKQorCQlyZXR1cm4gMDsKKworCS8qIENsZWFuIGV2ZXJ5dGhpbmcgdXAgaWYgdm1hX2FkanVzdCBmYWlsZWQuICovCisJbmV3LT52bV9vcHMtPmNsb3NlKG5ldyk7CisJaWYgKG5ldy0+dm1fZmlsZSkgeworCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUNVVEFCTEUpCisJCQlyZW1vdmVkX2V4ZV9maWxlX3ZtYShtbSk7CisJCWZwdXQobmV3LT52bV9maWxlKTsKKwl9Cisgb3V0X2ZyZWVfbXBvbDoKKwltcG9sX3B1dChwb2wpOworIG91dF9mcmVlX3ZtYToKKwlrbWVtX2NhY2hlX2ZyZWUodm1fYXJlYV9jYWNoZXAsIG5ldyk7Cisgb3V0X2VycjoKKwlyZXR1cm4gZXJyOwogfQogCiAvKgpAQCAtMjA3NCw3ICsyMDk2LDcgQEAKIAkJdW5zaWduZWQgbG9uZyBsb2NrZWQsIGxvY2tfbGltaXQ7CiAJCWxvY2tlZCA9IGxlbiA+PiBQQUdFX1NISUZUOwogCQlsb2NrZWQgKz0gbW0tPmxvY2tlZF92bTsKLQkJbG9ja19saW1pdCA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfTUVNTE9DS10ucmxpbV9jdXI7CisJCWxvY2tfbGltaXQgPSBybGltaXQoUkxJTUlUX01FTUxPQ0spOwogCQlsb2NrX2xpbWl0ID4+PSBQQUdFX1NISUZUOwogCQlpZiAobG9ja2VkID4gbG9ja19saW1pdCAmJiAhY2FwYWJsZShDQVBfSVBDX0xPQ0spKQogCQkJcmV0dXJuIC1FQUdBSU47CkBAIC0yMTIyLDYgKzIxNDQsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwlJTklUX0xJU1RfSEVBRCgmdm1hLT5hbm9uX3ZtYV9jaGFpbik7CiAJdm1hLT52bV9tbSA9IG1tOwogCXZtYS0+dm1fc3RhcnQgPSBhZGRyOwogCXZtYS0+dm1fZW5kID0gYWRkciArIGxlbjsKQEAgLTIyNTgsMTAgKzIyODEsMTEgQEAKIAkJaWYgKG5ld192bWEpIHsKIAkJCSpuZXdfdm1hID0gKnZtYTsKIAkJCXBvbCA9IG1wb2xfZHVwKHZtYV9wb2xpY3kodm1hKSk7Ci0JCQlpZiAoSVNfRVJSKHBvbCkpIHsKLQkJCQlrbWVtX2NhY2hlX2ZyZWUodm1fYXJlYV9jYWNoZXAsIG5ld192bWEpOwotCQkJCXJldHVybiBOVUxMOwotCQkJfQorCQkJaWYgKElTX0VSUihwb2wpKQorCQkJCWdvdG8gb3V0X2ZyZWVfdm1hOworCQkJSU5JVF9MSVNUX0hFQUQoJm5ld192bWEtPmFub25fdm1hX2NoYWluKTsKKwkJCWlmIChhbm9uX3ZtYV9jbG9uZShuZXdfdm1hLCB2bWEpKQorCQkJCWdvdG8gb3V0X2ZyZWVfbWVtcG9sOwogCQkJdm1hX3NldF9wb2xpY3kobmV3X3ZtYSwgcG9sKTsKIAkJCW5ld192bWEtPnZtX3N0YXJ0ID0gYWRkcjsKIAkJCW5ld192bWEtPnZtX2VuZCA9IGFkZHIgKyBsZW47CkBAIC0yMjc3LDYgKzIzMDEsMTIgQEAKIAkJfQogCX0KIAlyZXR1cm4gbmV3X3ZtYTsKKworIG91dF9mcmVlX21lbXBvbDoKKwltcG9sX3B1dChwb2wpOworIG91dF9mcmVlX3ZtYToKKwlrbWVtX2NhY2hlX2ZyZWUodm1fYXJlYV9jYWNoZXAsIG5ld192bWEpOworCXJldHVybiBOVUxMOwogfQogCiAvKgpAQCAtMjI4OCw3ICsyMzE4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGN1ciA9IG1tLT50b3RhbF92bTsJLyogcGFnZXMgKi8KIAl1bnNpZ25lZCBsb25nIGxpbTsKIAotCWxpbSA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfQVNdLnJsaW1fY3VyID4+IFBBR0VfU0hJRlQ7CisJbGltID0gcmxpbWl0KFJMSU1JVF9BUykgPj4gUEFHRV9TSElGVDsKIAogCWlmIChjdXIgKyBucGFnZXMgPiBsaW0pCiAJCXJldHVybiAwOwpAQCAtMjM1NCw2ICsyMzg0LDcgQEAKIAlpZiAodW5saWtlbHkodm1hID09IE5VTEwpKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCUlOSVRfTElTVF9IRUFEKCZ2bWEtPmFub25fdm1hX2NoYWluKTsKIAl2bWEtPnZtX21tID0gbW07CiAJdm1hLT52bV9zdGFydCA9IGFkZHI7CiAJdm1hLT52bV9lbmQgPSBhZGRyICsgbGVuOwpAQCAtMjQ1NCw2ICsyNDg1LDcgQEAKIGludCBtbV90YWtlX2FsbF9sb2NrcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwlzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YzsKIAlpbnQgcmV0ID0gLUVJTlRSOwogCiAJQlVHX09OKGRvd25fcmVhZF90cnlsb2NrKCZtbS0+bW1hcF9zZW0pKTsKQEAgLTI0NzEsNyArMjUwMyw4IEBACiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCWdvdG8gb3V0X3VubG9jazsKIAkJaWYgKHZtYS0+YW5vbl92bWEpCi0JCQl2bV9sb2NrX2Fub25fdm1hKG1tLCB2bWEtPmFub25fdm1hKTsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoYXZjLCAmdm1hLT5hbm9uX3ZtYV9jaGFpbiwgc2FtZV92bWEpCisJCQkJdm1fbG9ja19hbm9uX3ZtYShtbSwgYXZjLT5hbm9uX3ZtYSk7CiAJfQogCiAJcmV0ID0gMDsKQEAgLTI1MjYsMTMgKzI1NTksMTUgQEAKIHZvaWQgbW1fZHJvcF9hbGxfbG9ja3Moc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJc3RydWN0IGFub25fdm1hX2NoYWluICphdmM7CiAKIAlCVUdfT04oZG93bl9yZWFkX3RyeWxvY2soJm1tLT5tbWFwX3NlbSkpOwogCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZtbV9hbGxfbG9ja3NfbXV0ZXgpKTsKIAogCWZvciAodm1hID0gbW0tPm1tYXA7IHZtYTsgdm1hID0gdm1hLT52bV9uZXh0KSB7CiAJCWlmICh2bWEtPmFub25fdm1hKQotCQkJdm1fdW5sb2NrX2Fub25fdm1hKHZtYS0+YW5vbl92bWEpOworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShhdmMsICZ2bWEtPmFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkKKwkJCQl2bV91bmxvY2tfYW5vbl92bWEoYXZjLT5hbm9uX3ZtYSk7CiAJCWlmICh2bWEtPnZtX2ZpbGUgJiYgdm1hLT52bV9maWxlLT5mX21hcHBpbmcpCiAJCQl2bV91bmxvY2tfbWFwcGluZyh2bWEtPnZtX2ZpbGUtPmZfbWFwcGluZyk7CiAJfQpkaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuYwppbmRleCA4NDUxOTA4Li5lOWM3NWVmIDEwMDY0NAotLS0gYS9tbS9tcmVtYXAuYworKysgYi9tbS9tcmVtYXAuYwpAQCAtMjg1LDcgKzI4NSw3IEBACiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKIAkJdW5zaWduZWQgbG9uZyBsb2NrZWQsIGxvY2tfbGltaXQ7CiAJCWxvY2tlZCA9IG1tLT5sb2NrZWRfdm0gPDwgUEFHRV9TSElGVDsKLQkJbG9ja19saW1pdCA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfTUVNTE9DS10ucmxpbV9jdXI7CisJCWxvY2tfbGltaXQgPSBybGltaXQoUkxJTUlUX01FTUxPQ0spOwogCQlsb2NrZWQgKz0gbmV3X2xlbiAtIG9sZF9sZW47CiAJCWlmIChsb2NrZWQgPiBsb2NrX2xpbWl0ICYmICFjYXBhYmxlKENBUF9JUENfTE9DSykpCiAJCQlnb3RvIEVhZ2FpbjsKQEAgLTQ2MCw4ICs0NjAsMTEgQEAKIAkJaWYgKHZtYV9leHBhbmRhYmxlKHZtYSwgbmV3X2xlbiAtIG9sZF9sZW4pKSB7CiAJCQlpbnQgcGFnZXMgPSAobmV3X2xlbiAtIG9sZF9sZW4pID4+IFBBR0VfU0hJRlQ7CiAKLQkJCXZtYV9hZGp1c3Qodm1hLCB2bWEtPnZtX3N0YXJ0LAotCQkJCWFkZHIgKyBuZXdfbGVuLCB2bWEtPnZtX3Bnb2ZmLCBOVUxMKTsKKwkJCWlmICh2bWFfYWRqdXN0KHZtYSwgdm1hLT52bV9zdGFydCwgYWRkciArIG5ld19sZW4sCisJCQkJICAgICAgIHZtYS0+dm1fcGdvZmYsIE5VTEwpKSB7CisJCQkJcmV0ID0gLUVOT01FTTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KIAogCQkJbW0tPnRvdGFsX3ZtICs9IHBhZ2VzOwogCQkJdm1fc3RhdF9hY2NvdW50KG1tLCB2bWEtPnZtX2ZsYWdzLCB2bWEtPnZtX2ZpbGUsIHBhZ2VzKTsKZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jCmluZGV4IDQ4YTJlY2YuLmI5YjVjY2UgMTAwNjQ0Ci0tLSBhL21tL25vbW11LmMKKysrIGIvbW0vbm9tbXUuYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJCQkoVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFKSA6IChWTV9SRUFEIHwgVk1fV1JJVEUpOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKLQkJdm1hID0gZmluZF92bWEobW0sIHN0YXJ0KTsKKwkJdm1hID0gZmluZF9leHRlbmRfdm1hKG1tLCBzdGFydCk7CiAJCWlmICghdm1hKQogCQkJZ290byBmaW5pc2hfb3JfZmF1bHQ7CiAKQEAgLTc2NCw3ICs3NjQsNyBAQAogICovCiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfZXh0ZW5kX3ZtYShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewotCXJldHVybiBmaW5kX3ZtYShtbSwgYWRkcik7CisJcmV0dXJuIGZpbmRfdm1hKG1tLCBhZGRyICYgUEFHRV9NQVNLKTsKIH0KIAogLyoKQEAgLTEyMDksNyArMTIwOSw3IEBACiAJcmVnaW9uLT52bV9mbGFncyA9IHZtX2ZsYWdzOwogCXJlZ2lvbi0+dm1fcGdvZmYgPSBwZ29mZjsKIAotCUlOSVRfTElTVF9IRUFEKCZ2bWEtPmFub25fdm1hX25vZGUpOworCUlOSVRfTElTVF9IRUFEKCZ2bWEtPmFub25fdm1hX2NoYWluKTsKIAl2bWEtPnZtX2ZsYWdzID0gdm1fZmxhZ3M7CiAJdm1hLT52bV9wZ29mZiA9IHBnb2ZmOwogCmRpZmYgLS1naXQgYS9tbS9vb21fa2lsbC5jIGIvbW0vb29tX2tpbGwuYwppbmRleCAyMzcwNTA0Li4zNTc1NWE0IDEwMDY0NAotLS0gYS9tbS9vb21fa2lsbC5jCisrKyBiL21tL29vbV9raWxsLmMKQEAgLTQwMSw4ICs0MDEsOCBAQAogCQkgICAgICAgInZzejolbHVrQiwgYW5vbi1yc3M6JWx1a0IsIGZpbGUtcnNzOiVsdWtCXG4iLAogCQkgICAgICAgdGFza19waWRfbnIocCksIHAtPmNvbW0sCiAJCSAgICAgICBLKHAtPm1tLT50b3RhbF92bSksCi0JCSAgICAgICBLKGdldF9tbV9jb3VudGVyKHAtPm1tLCBhbm9uX3JzcykpLAotCQkgICAgICAgSyhnZXRfbW1fY291bnRlcihwLT5tbSwgZmlsZV9yc3MpKSk7CisJCSAgICAgICBLKGdldF9tbV9jb3VudGVyKHAtPm1tLCBNTV9BTk9OUEFHRVMpKSwKKwkJICAgICAgIEsoZ2V0X21tX2NvdW50ZXIocC0+bW0sIE1NX0ZJTEVQQUdFUykpKTsKIAl0YXNrX3VubG9jayhwKTsKIAogCS8qCmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggYTZiMTdhYS4uYTgxODJjODkgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTc2LDYgKzc2LDMxIEBACiBpbnQgcGVyY3B1X3BhZ2VsaXN0X2ZyYWN0aW9uOwogZ2ZwX3QgZ2ZwX2FsbG93ZWRfbWFzayBfX3JlYWRfbW9zdGx5ID0gR0ZQX0JPT1RfTUFTSzsKIAorI2lmZGVmIENPTkZJR19QTV9TTEVFUAorLyoKKyAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSB1c2VkIGJ5IHRoZSBzdXNwZW5kL2hpYmVybmF0ZSBjb2RlIHRvIHRlbXBvcmFyaWx5CisgKiBjaGFuZ2UgZ2ZwX2FsbG93ZWRfbWFzayBpbiBvcmRlciB0byBhdm9pZCB1c2luZyBJL08gZHVyaW5nIG1lbW9yeSBhbGxvY2F0aW9ucworICogd2hpbGUgZGV2aWNlcyBhcmUgc3VzcGVuZGVkLiAgVG8gYXZvaWQgcmFjZXMgd2l0aCB0aGUgc3VzcGVuZC9oaWJlcm5hdGUgY29kZSwKKyAqIHRoZXkgc2hvdWxkIGFsd2F5cyBiZSBjYWxsZWQgd2l0aCBwbV9tdXRleCBoZWxkIChnZnBfYWxsb3dlZF9tYXNrIGFsc28gc2hvdWxkCisgKiBvbmx5IGJlIG1vZGlmaWVkIHdpdGggcG1fbXV0ZXggaGVsZCwgdW5sZXNzIHRoZSBzdXNwZW5kL2hpYmVybmF0ZSBjb2RlIGlzCisgKiBndWFyYW50ZWVkIG5vdCB0byBydW4gaW4gcGFyYWxsZWwgd2l0aCB0aGF0IG1vZGlmaWNhdGlvbikuCisgKi8KK3ZvaWQgc2V0X2dmcF9hbGxvd2VkX21hc2soZ2ZwX3QgbWFzaykKK3sKKwlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJnBtX211dGV4KSk7CisJZ2ZwX2FsbG93ZWRfbWFzayA9IG1hc2s7Cit9CisKK2dmcF90IGNsZWFyX2dmcF9hbGxvd2VkX21hc2soZ2ZwX3QgbWFzaykKK3sKKwlnZnBfdCByZXQgPSBnZnBfYWxsb3dlZF9tYXNrOworCisJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZwbV9tdXRleCkpOworCWdmcF9hbGxvd2VkX21hc2sgJj0gfm1hc2s7CisJcmV0dXJuIHJldDsKK30KKyNlbmRpZiAvKiBDT05GSUdfUE1fU0xFRVAgKi8KKwogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRQogaW50IHBhZ2VibG9ja19vcmRlciBfX3JlYWRfbW9zdGx5OwogI2VuZGlmCkBAIC01MzAsNyArNTU1LDcgQEAKIAlpbnQgYmF0Y2hfZnJlZSA9IDA7CiAKIAlzcGluX2xvY2soJnpvbmUtPmxvY2spOwotCXpvbmVfY2xlYXJfZmxhZyh6b25lLCBaT05FX0FMTF9VTlJFQ0xBSU1BQkxFKTsKKwl6b25lLT5hbGxfdW5yZWNsYWltYWJsZSA9IDA7CiAJem9uZS0+cGFnZXNfc2Nhbm5lZCA9IDA7CiAKIAlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUywgY291bnQpOwpAQCAtNTY4LDcgKzU5Myw3IEBACiAJCQkJaW50IG1pZ3JhdGV0eXBlKQogewogCXNwaW5fbG9jaygmem9uZS0+bG9jayk7Ci0Jem9uZV9jbGVhcl9mbGFnKHpvbmUsIFpPTkVfQUxMX1VOUkVDTEFJTUFCTEUpOworCXpvbmUtPmFsbF91bnJlY2xhaW1hYmxlID0gMDsKIAl6b25lLT5wYWdlc19zY2FubmVkID0gMDsKIAogCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTLCAxIDw8IG9yZGVyKTsKQEAgLTU4Myw2ICs2MDgsNyBAQAogCWludCBiYWQgPSAwOwogCWludCB3YXNNbG9ja2VkID0gX19UZXN0Q2xlYXJQYWdlTWxvY2tlZChwYWdlKTsKIAorCXRyYWNlX21tX3BhZ2VfZnJlZV9kaXJlY3QocGFnZSwgb3JkZXIpOwogCWttZW1jaGVja19mcmVlX3NoYWRvdyhwYWdlLCBvcmRlcik7CiAKIAlmb3IgKGkgPSAwIDsgaSA8ICgxIDw8IG9yZGVyKSA7ICsraSkKQEAgLTEwNzMsOCArMTA5OSw5IEBACiAKIC8qCiAgKiBGcmVlIGEgMC1vcmRlciBwYWdlCisgKiBjb2xkID09IDEgPyBmcmVlIGEgY29sZCBwYWdlIDogZnJlZSBhIGhvdCBwYWdlCiAgKi8KLXN0YXRpYyB2b2lkIGZyZWVfaG90X2NvbGRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IGNvbGQpCit2b2lkIGZyZWVfaG90X2NvbGRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IGNvbGQpCiB7CiAJc3RydWN0IHpvbmUgKnpvbmUgPSBwYWdlX3pvbmUocGFnZSk7CiAJc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcDsKQEAgLTEwODIsNiArMTEwOSw3IEBACiAJaW50IG1pZ3JhdGV0eXBlOwogCWludCB3YXNNbG9ja2VkID0gX19UZXN0Q2xlYXJQYWdlTWxvY2tlZChwYWdlKTsKIAorCXRyYWNlX21tX3BhZ2VfZnJlZV9kaXJlY3QocGFnZSwgMCk7CiAJa21lbWNoZWNrX2ZyZWVfc2hhZG93KHBhZ2UsIDApOwogCiAJaWYgKFBhZ2VBbm9uKHBhZ2UpKQpAQCAtMTEzMywxMiArMTE2MSw2IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi12b2lkIGZyZWVfaG90X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci0JdHJhY2VfbW1fcGFnZV9mcmVlX2RpcmVjdChwYWdlLCAwKTsKLQlmcmVlX2hvdF9jb2xkX3BhZ2UocGFnZSwgMCk7Ci19Ci0JCiAvKgogICogc3BsaXRfcGFnZSB0YWtlcyBhIG5vbi1jb21wb3VuZCBoaWdoZXItb3JkZXIgcGFnZSwgYW5kIHNwbGl0cyBpdCBpbnRvCiAgKiBuICgxPDxvcmRlcikgc3ViLXBhZ2VzOiBwYWdlWzAuLm5dCkBAIC0yMDA4LDkgKzIwMzAsOCBAQAogdm9pZCBfX2ZyZWVfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcikKIHsKIAlpZiAocHV0X3BhZ2VfdGVzdHplcm8ocGFnZSkpIHsKLQkJdHJhY2VfbW1fcGFnZV9mcmVlX2RpcmVjdChwYWdlLCBvcmRlcik7CiAJCWlmIChvcmRlciA9PSAwKQotCQkJZnJlZV9ob3RfcGFnZShwYWdlKTsKKwkJCWZyZWVfaG90X2NvbGRfcGFnZShwYWdlLCAwKTsKIAkJZWxzZQogCQkJX19mcmVlX3BhZ2VzX29rKHBhZ2UsIG9yZGVyKTsKIAl9CkBAIC0yMjY2LDcgKzIyODcsNyBAQAogCQkJSyh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQk9VTkNFKSksCiAJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9XUklURUJBQ0tfVEVNUCkpLAogCQkJem9uZS0+cGFnZXNfc2Nhbm5lZCwKLQkJCSh6b25lX2lzX2FsbF91bnJlY2xhaW1hYmxlKHpvbmUpID8gInllcyIgOiAibm8iKQorCQkJKHpvbmUtPmFsbF91bnJlY2xhaW1hYmxlID8gInllcyIgOiAibm8iKQogCQkJKTsKIAkJcHJpbnRrKCJsb3dtZW1fcmVzZXJ2ZVtdOiIpOwogCQlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX1pPTkVTOyBpKyspCkBAIC00MzcxLDggKzQzOTIsMTIgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX1pPTkVTOyBpKyspIHsKIAkJaWYgKGkgPT0gWk9ORV9NT1ZBQkxFKQogCQkJY29udGludWU7Ci0JCXByaW50aygiICAlLThzICUwIzEwbHggLT4gJTAjMTBseFxuIiwKLQkJCQl6b25lX25hbWVzW2ldLAorCQlwcmludGsoIiAgJS04cyAiLCB6b25lX25hbWVzW2ldKTsKKwkJaWYgKGFyY2hfem9uZV9sb3dlc3RfcG9zc2libGVfcGZuW2ldID09CisJCQkJYXJjaF96b25lX2hpZ2hlc3RfcG9zc2libGVfcGZuW2ldKQorCQkJcHJpbnRrKCJlbXB0eVxuIik7CisJCWVsc2UKKwkJCXByaW50aygiJTAjMTBseCAtPiAlMCMxMGx4XG4iLAogCQkJCWFyY2hfem9uZV9sb3dlc3RfcG9zc2libGVfcGZuW2ldLAogCQkJCWFyY2hfem9uZV9oaWdoZXN0X3Bvc3NpYmxlX3BmbltpXSk7CiAJfQpkaWZmIC0tZ2l0IGEvbW0vcmVhZGFoZWFkLmMgYi9tbS9yZWFkYWhlYWQuYwppbmRleCAwMzNiYzEzLi4zMzdiMjBlIDEwMDY0NAotLS0gYS9tbS9yZWFkYWhlYWQuYworKysgYi9tbS9yZWFkYWhlYWQuYwpAQCAtNTAxLDYgKzUwMSwxMiBAQAogCWlmICghcmEtPnJhX3BhZ2VzKQogCQlyZXR1cm47CiAKKwkvKiBiZSBkdW1iICovCisJaWYgKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1JBTkRPTSkgeworCQlmb3JjZV9wYWdlX2NhY2hlX3JlYWRhaGVhZChtYXBwaW5nLCBmaWxwLCBvZmZzZXQsIHJlcV9zaXplKTsKKwkJcmV0dXJuOworCX0KKwogCS8qIGRvIHJlYWQtYWhlYWQgKi8KIAlvbmRlbWFuZF9yZWFkYWhlYWQobWFwcGluZywgcmEsIGZpbHAsIGZhbHNlLCBvZmZzZXQsIHJlcV9zaXplKTsKIH0KZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCAyNzhjZDI3Li5mY2Q1OTNjOSAxMDA2NDQKLS0tIGEvbW0vcm1hcC5jCisrKyBiL21tL3JtYXAuYwpAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqYW5vbl92bWFfY2FjaGVwOworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICphbm9uX3ZtYV9jaGFpbl9jYWNoZXA7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGFub25fdm1hICphbm9uX3ZtYV9hbGxvYyh2b2lkKQogewpAQCAtNzMsNiArNzQsMTYgQEAKIAlrbWVtX2NhY2hlX2ZyZWUoYW5vbl92bWFfY2FjaGVwLCBhbm9uX3ZtYSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFub25fdm1hX2NoYWluICphbm9uX3ZtYV9jaGFpbl9hbGxvYyh2b2lkKQoreworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKGFub25fdm1hX2NoYWluX2NhY2hlcCwgR0ZQX0tFUk5FTCk7Cit9CisKK3ZvaWQgYW5vbl92bWFfY2hhaW5fZnJlZShzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmFub25fdm1hX2NoYWluKQoreworCWttZW1fY2FjaGVfZnJlZShhbm9uX3ZtYV9jaGFpbl9jYWNoZXAsIGFub25fdm1hX2NoYWluKTsKK30KKwogLyoqCiAgKiBhbm9uX3ZtYV9wcmVwYXJlIC0gYXR0YWNoIGFuIGFub25fdm1hIHRvIGEgbWVtb3J5IHJlZ2lvbgogICogQHZtYTogdGhlIG1lbW9yeSByZWdpb24gaW4gcXVlc3Rpb24KQEAgLTEwMywxOCArMTE0LDIzIEBACiBpbnQgYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gdm1hLT5hbm9uX3ZtYTsKKwlzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YzsKIAogCW1pZ2h0X3NsZWVwKCk7CiAJaWYgKHVubGlrZWx5KCFhbm9uX3ZtYSkpIHsKIAkJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwogCQlzdHJ1Y3QgYW5vbl92bWEgKmFsbG9jYXRlZDsKIAorCQlhdmMgPSBhbm9uX3ZtYV9jaGFpbl9hbGxvYygpOworCQlpZiAoIWF2YykKKwkJCWdvdG8gb3V0X2Vub21lbTsKKwogCQlhbm9uX3ZtYSA9IGZpbmRfbWVyZ2VhYmxlX2Fub25fdm1hKHZtYSk7CiAJCWFsbG9jYXRlZCA9IE5VTEw7CiAJCWlmICghYW5vbl92bWEpIHsKIAkJCWFub25fdm1hID0gYW5vbl92bWFfYWxsb2MoKTsKIAkJCWlmICh1bmxpa2VseSghYW5vbl92bWEpKQotCQkJCXJldHVybiAtRU5PTUVNOworCQkJCWdvdG8gb3V0X2Vub21lbV9mcmVlX2F2YzsKIAkJCWFsbG9jYXRlZCA9IGFub25fdm1hOwogCQl9CiAJCXNwaW5fbG9jaygmYW5vbl92bWEtPmxvY2spOwpAQCAtMTIzLDUzICsxMzksMTEzIEBACiAJCXNwaW5fbG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CiAJCWlmIChsaWtlbHkoIXZtYS0+YW5vbl92bWEpKSB7CiAJCQl2bWEtPmFub25fdm1hID0gYW5vbl92bWE7Ci0JCQlsaXN0X2FkZF90YWlsKCZ2bWEtPmFub25fdm1hX25vZGUsICZhbm9uX3ZtYS0+aGVhZCk7CisJCQlhdmMtPmFub25fdm1hID0gYW5vbl92bWE7CisJCQlhdmMtPnZtYSA9IHZtYTsKKwkJCWxpc3RfYWRkKCZhdmMtPnNhbWVfdm1hLCAmdm1hLT5hbm9uX3ZtYV9jaGFpbik7CisJCQlsaXN0X2FkZCgmYXZjLT5zYW1lX2Fub25fdm1hLCAmYW5vbl92bWEtPmhlYWQpOwogCQkJYWxsb2NhdGVkID0gTlVMTDsKIAkJfQogCQlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CiAKIAkJc3Bpbl91bmxvY2soJmFub25fdm1hLT5sb2NrKTsKLQkJaWYgKHVubGlrZWx5KGFsbG9jYXRlZCkpCisJCWlmICh1bmxpa2VseShhbGxvY2F0ZWQpKSB7CiAJCQlhbm9uX3ZtYV9mcmVlKGFsbG9jYXRlZCk7CisJCQlhbm9uX3ZtYV9jaGFpbl9mcmVlKGF2Yyk7CisJCX0KIAl9CiAJcmV0dXJuIDA7CisKKyBvdXRfZW5vbWVtX2ZyZWVfYXZjOgorCWFub25fdm1hX2NoYWluX2ZyZWUoYXZjKTsKKyBvdXRfZW5vbWVtOgorCXJldHVybiAtRU5PTUVNOwogfQogCi12b2lkIF9fYW5vbl92bWFfbWVyZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbmV4dCkKK3N0YXRpYyB2b2lkIGFub25fdm1hX2NoYWluX2xpbmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJc3RydWN0IGFub25fdm1hX2NoYWluICphdmMsCisJCQkJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSkKIHsKLQlCVUdfT04odm1hLT5hbm9uX3ZtYSAhPSBuZXh0LT5hbm9uX3ZtYSk7Ci0JbGlzdF9kZWwoJm5leHQtPmFub25fdm1hX25vZGUpOworCWF2Yy0+dm1hID0gdm1hOworCWF2Yy0+YW5vbl92bWEgPSBhbm9uX3ZtYTsKKwlsaXN0X2FkZCgmYXZjLT5zYW1lX3ZtYSwgJnZtYS0+YW5vbl92bWFfY2hhaW4pOworCisJc3Bpbl9sb2NrKCZhbm9uX3ZtYS0+bG9jayk7CisJbGlzdF9hZGRfdGFpbCgmYXZjLT5zYW1lX2Fub25fdm1hLCAmYW5vbl92bWEtPmhlYWQpOworCXNwaW5fdW5sb2NrKCZhbm9uX3ZtYS0+bG9jayk7CiB9CiAKLXZvaWQgX19hbm9uX3ZtYV9saW5rKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQorLyoKKyAqIEF0dGFjaCB0aGUgYW5vbl92bWFzIGZyb20gc3JjIHRvIGRzdC4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRU5PTUVNIG9uIGZhaWx1cmUuCisgKi8KK2ludCBhbm9uX3ZtYV9jbG9uZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmMpCiB7Ci0Jc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IHZtYS0+YW5vbl92bWE7CisJc3RydWN0IGFub25fdm1hX2NoYWluICphdmMsICpwYXZjOwogCi0JaWYgKGFub25fdm1hKQotCQlsaXN0X2FkZF90YWlsKCZ2bWEtPmFub25fdm1hX25vZGUsICZhbm9uX3ZtYS0+aGVhZCk7Ci19Ci0KLXZvaWQgYW5vbl92bWFfbGluayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gdm1hLT5hbm9uX3ZtYTsKLQotCWlmIChhbm9uX3ZtYSkgewotCQlzcGluX2xvY2soJmFub25fdm1hLT5sb2NrKTsKLQkJbGlzdF9hZGRfdGFpbCgmdm1hLT5hbm9uX3ZtYV9ub2RlLCAmYW5vbl92bWEtPmhlYWQpOwotCQlzcGluX3VubG9jaygmYW5vbl92bWEtPmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocGF2YywgJnNyYy0+YW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7CisJCWF2YyA9IGFub25fdm1hX2NoYWluX2FsbG9jKCk7CisJCWlmICghYXZjKQorCQkJZ290byBlbm9tZW1fZmFpbHVyZTsKKwkJYW5vbl92bWFfY2hhaW5fbGluayhkc3QsIGF2YywgcGF2Yy0+YW5vbl92bWEpOwogCX0KKwlyZXR1cm4gMDsKKworIGVub21lbV9mYWlsdXJlOgorCXVubGlua19hbm9uX3ZtYXMoZHN0KTsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAotdm9pZCBhbm9uX3ZtYV91bmxpbmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCisvKgorICogQXR0YWNoIHZtYSB0byBpdHMgb3duIGFub25fdm1hLCBhcyB3ZWxsIGFzIHRvIHRoZSBhbm9uX3ZtYXMgdGhhdAorICogdGhlIGNvcnJlc3BvbmRpbmcgVk1BIGluIHRoZSBwYXJlbnQgcHJvY2VzcyBpcyBhdHRhY2hlZCB0by4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBub24temVybyBvbiBmYWlsdXJlLgorICovCitpbnQgYW5vbl92bWFfZm9yayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hKQogewotCXN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSB2bWEtPmFub25fdm1hOworCXN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYXZjOworCXN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWE7CisKKwkvKiBEb24ndCBib3RoZXIgaWYgdGhlIHBhcmVudCBwcm9jZXNzIGhhcyBubyBhbm9uX3ZtYSBoZXJlLiAqLworCWlmICghcHZtYS0+YW5vbl92bWEpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBGaXJzdCwgYXR0YWNoIHRoZSBuZXcgVk1BIHRvIHRoZSBwYXJlbnQgVk1BJ3MgYW5vbl92bWFzLAorCSAqIHNvIHJtYXAgY2FuIGZpbmQgbm9uLUNPV2VkIHBhZ2VzIGluIGNoaWxkIHByb2Nlc3Nlcy4KKwkgKi8KKwlpZiAoYW5vbl92bWFfY2xvbmUodm1hLCBwdm1hKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBUaGVuIGFkZCBvdXIgb3duIGFub25fdm1hLiAqLworCWFub25fdm1hID0gYW5vbl92bWFfYWxsb2MoKTsKKwlpZiAoIWFub25fdm1hKQorCQlnb3RvIG91dF9lcnJvcjsKKwlhdmMgPSBhbm9uX3ZtYV9jaGFpbl9hbGxvYygpOworCWlmICghYXZjKQorCQlnb3RvIG91dF9lcnJvcl9mcmVlX2Fub25fdm1hOworCWFub25fdm1hX2NoYWluX2xpbmsodm1hLCBhdmMsIGFub25fdm1hKTsKKwkvKiBNYXJrIHRoaXMgYW5vbl92bWEgYXMgdGhlIG9uZSB3aGVyZSBvdXIgbmV3IChDT1dlZCkgcGFnZXMgZ28uICovCisJdm1hLT5hbm9uX3ZtYSA9IGFub25fdm1hOworCisJcmV0dXJuIDA7CisKKyBvdXRfZXJyb3JfZnJlZV9hbm9uX3ZtYToKKwlhbm9uX3ZtYV9mcmVlKGFub25fdm1hKTsKKyBvdXRfZXJyb3I6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkIGFub25fdm1hX3VubGluayhzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmFub25fdm1hX2NoYWluKQoreworCXN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSBhbm9uX3ZtYV9jaGFpbi0+YW5vbl92bWE7CiAJaW50IGVtcHR5OwogCisJLyogSWYgYW5vbl92bWFfZm9yayBmYWlscywgd2UgY2FuIGdldCBhbiBlbXB0eSBhbm9uX3ZtYV9jaGFpbi4gKi8KIAlpZiAoIWFub25fdm1hKQogCQlyZXR1cm47CiAKIAlzcGluX2xvY2soJmFub25fdm1hLT5sb2NrKTsKLQlsaXN0X2RlbCgmdm1hLT5hbm9uX3ZtYV9ub2RlKTsKKwlsaXN0X2RlbCgmYW5vbl92bWFfY2hhaW4tPnNhbWVfYW5vbl92bWEpOwogCiAJLyogV2UgbXVzdCBnYXJiYWdlIGNvbGxlY3QgdGhlIGFub25fdm1hIGlmIGl0J3MgZW1wdHkgKi8KIAllbXB0eSA9IGxpc3RfZW1wdHkoJmFub25fdm1hLT5oZWFkKSAmJiAha3NtX3JlZmNvdW50KGFub25fdm1hKTsKQEAgLTE3OSw2ICsyNTUsMTggQEAKIAkJYW5vbl92bWFfZnJlZShhbm9uX3ZtYSk7CiB9CiAKK3ZvaWQgdW5saW5rX2Fub25fdm1hcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YywgKm5leHQ7CisKKwkvKiBVbmxpbmsgZWFjaCBhbm9uX3ZtYSBjaGFpbmVkIHRvIHRoZSBWTUEuICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGF2YywgbmV4dCwgJnZtYS0+YW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKSB7CisJCWFub25fdm1hX3VubGluayhhdmMpOworCQlsaXN0X2RlbCgmYXZjLT5zYW1lX3ZtYSk7CisJCWFub25fdm1hX2NoYWluX2ZyZWUoYXZjKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIGFub25fdm1hX2N0b3Iodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gZGF0YTsKQEAgLTE5Miw2ICsyODAsNyBAQAogewogCWFub25fdm1hX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJhbm9uX3ZtYSIsIHNpemVvZihzdHJ1Y3QgYW5vbl92bWEpLAogCQkJMCwgU0xBQl9ERVNUUk9ZX0JZX1JDVXxTTEFCX1BBTklDLCBhbm9uX3ZtYV9jdG9yKTsKKwlhbm9uX3ZtYV9jaGFpbl9jYWNoZXAgPSBLTUVNX0NBQ0hFKGFub25fdm1hX2NoYWluLCBTTEFCX1BBTklDKTsKIH0KIAogLyoKQEAgLTM5Niw3ICs0ODUsNyBAQAogewogCXVuc2lnbmVkIGludCBtYXBjb3VudDsKIAlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hOwotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYXZjOwogCWludCByZWZlcmVuY2VkID0gMDsKIAogCWFub25fdm1hID0gcGFnZV9sb2NrX2Fub25fdm1hKHBhZ2UpOwpAQCAtNDA0LDcgKzQ5Myw4IEBACiAJCXJldHVybiByZWZlcmVuY2VkOwogCiAJbWFwY291bnQgPSBwYWdlX21hcGNvdW50KHBhZ2UpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmYW5vbl92bWEtPmhlYWQsIGFub25fdm1hX25vZGUpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGF2YywgJmFub25fdm1hLT5oZWFkLCBzYW1lX2Fub25fdm1hKSB7CisJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gYXZjLT52bWE7CiAJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHBhZ2UsIHZtYSk7CiAJCWlmIChhZGRyZXNzID09IC1FRkFVTFQpCiAJCQljb250aW51ZTsKQEAgLTUxMSw5ICs2MDEsNiBAQAogCWludCByZWZlcmVuY2VkID0gMDsKIAlpbnQgd2VfbG9ja2VkID0gMDsKIAotCWlmIChUZXN0Q2xlYXJQYWdlUmVmZXJlbmNlZChwYWdlKSkKLQkJcmVmZXJlbmNlZCsrOwotCiAJKnZtX2ZsYWdzID0gMDsKIAlpZiAocGFnZV9tYXBwZWQocGFnZSkgJiYgcGFnZV9ybWFwcGluZyhwYWdlKSkgewogCQlpZiAoIWlzX2xvY2tlZCAmJiAoIVBhZ2VBbm9uKHBhZ2UpIHx8IFBhZ2VLc20ocGFnZSkpKSB7CkBAIC02MTQsNiArNzAxLDMwIEBACiBFWFBPUlRfU1lNQk9MX0dQTChwYWdlX21rY2xlYW4pOwogCiAvKioKKyAqIHBhZ2VfbW92ZV9hbm9uX3JtYXAgLSBtb3ZlIGEgcGFnZSB0byBvdXIgYW5vbl92bWEKKyAqIEBwYWdlOgl0aGUgcGFnZSB0byBtb3ZlIHRvIG91ciBhbm9uX3ZtYQorICogQHZtYToJdGhlIHZtYSB0aGUgcGFnZSBiZWxvbmdzIHRvCisgKiBAYWRkcmVzczoJdGhlIHVzZXIgdmlydHVhbCBhZGRyZXNzIG1hcHBlZAorICoKKyAqIFdoZW4gYSBwYWdlIGJlbG9uZ3MgZXhjbHVzaXZlbHkgdG8gb25lIHByb2Nlc3MgYWZ0ZXIgYSBDT1cgZXZlbnQsCisgKiB0aGF0IHBhZ2UgY2FuIGJlIG1vdmVkIGludG8gdGhlIGFub25fdm1hIHRoYXQgYmVsb25ncyB0byBqdXN0IHRoYXQKKyAqIHByb2Nlc3MsIHNvIHRoZSBybWFwIGNvZGUgd2lsbCBub3Qgc2VhcmNoIHRoZSBwYXJlbnQgb3Igc2libGluZworICogcHJvY2Vzc2VzLgorICovCit2b2lkIHBhZ2VfbW92ZV9hbm9uX3JtYXAoc3RydWN0IHBhZ2UgKnBhZ2UsCisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gdm1hLT5hbm9uX3ZtYTsKKworCVZNX0JVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CisJVk1fQlVHX09OKCFhbm9uX3ZtYSk7CisJVk1fQlVHX09OKHBhZ2UtPmluZGV4ICE9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgYWRkcmVzcykpOworCisJYW5vbl92bWEgPSAodm9pZCAqKSBhbm9uX3ZtYSArIFBBR0VfTUFQUElOR19BTk9OOworCXBhZ2UtPm1hcHBpbmcgPSAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKikgYW5vbl92bWE7Cit9CisKKy8qKgogICogX19wYWdlX3NldF9hbm9uX3JtYXAgLSBzZXR1cCBuZXcgYW5vbnltb3VzIHJtYXAKICAqIEBwYWdlOgl0aGUgcGFnZSB0byBhZGQgdGhlIG1hcHBpbmcgdG8KICAqIEB2bWE6CXRoZSB2bSBhcmVhIGluIHdoaWNoIHRoZSBtYXBwaW5nIGlzIGFkZGVkCkBAIC02NTIsOSArNzYzLDYgQEAKIAkgKiBhcmUgaW5pdGlhbGx5IG9ubHkgdmlzaWJsZSB2aWEgdGhlIHBhZ2V0YWJsZXMsIGFuZCB0aGUgcHRlIGlzIGxvY2tlZAogCSAqIG92ZXIgdGhlIGNhbGwgdG8gcGFnZV9hZGRfbmV3X2Fub25fcm1hcC4KIAkgKi8KLQlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gdm1hLT5hbm9uX3ZtYTsKLQlhbm9uX3ZtYSA9ICh2b2lkICopIGFub25fdm1hICsgUEFHRV9NQVBQSU5HX0FOT047Ci0JQlVHX09OKHBhZ2UtPm1hcHBpbmcgIT0gKHN0cnVjdCBhZGRyZXNzX3NwYWNlICopYW5vbl92bWEpOwogCUJVR19PTihwYWdlLT5pbmRleCAhPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpKTsKICNlbmRpZgogfQpAQCAtODE1LDkgKzkyMyw5IEBACiAKIAlpZiAoUGFnZUhXUG9pc29uKHBhZ2UpICYmICEoZmxhZ3MgJiBUVFVfSUdOT1JFX0hXUE9JU09OKSkgewogCQlpZiAoUGFnZUFub24ocGFnZSkpCi0JCQlkZWNfbW1fY291bnRlcihtbSwgYW5vbl9yc3MpOworCQkJZGVjX21tX2NvdW50ZXIobW0sIE1NX0FOT05QQUdFUyk7CiAJCWVsc2UKLQkJCWRlY19tbV9jb3VudGVyKG1tLCBmaWxlX3Jzcyk7CisJCQlkZWNfbW1fY291bnRlcihtbSwgTU1fRklMRVBBR0VTKTsKIAkJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHRlLAogCQkJCXN3cF9lbnRyeV90b19wdGUobWFrZV9od3BvaXNvbl9lbnRyeShwYWdlKSkpOwogCX0gZWxzZSBpZiAoUGFnZUFub24ocGFnZSkpIHsKQEAgLTgzOSw3ICs5NDcsOCBAQAogCQkJCQlsaXN0X2FkZCgmbW0tPm1tbGlzdCwgJmluaXRfbW0ubW1saXN0KTsKIAkJCQlzcGluX3VubG9jaygmbW1saXN0X2xvY2spOwogCQkJfQotCQkJZGVjX21tX2NvdW50ZXIobW0sIGFub25fcnNzKTsKKwkJCWRlY19tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMpOworCQkJaW5jX21tX2NvdW50ZXIobW0sIE1NX1NXQVBFTlRTKTsKIAkJfSBlbHNlIGlmIChQQUdFX01JR1JBVElPTikgewogCQkJLyoKIAkJCSAqIFN0b3JlIHRoZSBwZm4gb2YgdGhlIHBhZ2UgaW4gYSBzcGVjaWFsIG1pZ3JhdGlvbgpAQCAtODU3LDcgKzk2Niw3IEBACiAJCWVudHJ5ID0gbWFrZV9taWdyYXRpb25fZW50cnkocGFnZSwgcHRlX3dyaXRlKHB0ZXZhbCkpOwogCQlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdGUsIHN3cF9lbnRyeV90b19wdGUoZW50cnkpKTsKIAl9IGVsc2UKLQkJZGVjX21tX2NvdW50ZXIobW0sIGZpbGVfcnNzKTsKKwkJZGVjX21tX2NvdW50ZXIobW0sIE1NX0ZJTEVQQUdFUyk7CiAKIAlwYWdlX3JlbW92ZV9ybWFwKHBhZ2UpOwogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKQEAgLTk5Niw3ICsxMTA1LDcgQEAKIAogCQlwYWdlX3JlbW92ZV9ybWFwKHBhZ2UpOwogCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JCWRlY19tbV9jb3VudGVyKG1tLCBmaWxlX3Jzcyk7CisJCWRlY19tbV9jb3VudGVyKG1tLCBNTV9GSUxFUEFHRVMpOwogCQkoKm1hcGNvdW50KS0tOwogCX0KIAlwdGVfdW5tYXBfdW5sb2NrKHB0ZSAtIDEsIHB0bCk7CkBAIC0xMDI0LDE0ICsxMTMzLDE1IEBACiBzdGF0aWMgaW50IHRyeV90b191bm1hcF9hbm9uKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIHR0dV9mbGFncyBmbGFncykKIHsKIAlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hOwotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYXZjOwogCWludCByZXQgPSBTV0FQX0FHQUlOOwogCiAJYW5vbl92bWEgPSBwYWdlX2xvY2tfYW5vbl92bWEocGFnZSk7CiAJaWYgKCFhbm9uX3ZtYSkKIAkJcmV0dXJuIHJldDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmYW5vbl92bWEtPmhlYWQsIGFub25fdm1hX25vZGUpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGF2YywgJmFub25fdm1hLT5oZWFkLCBzYW1lX2Fub25fdm1hKSB7CisJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gYXZjLT52bWE7CiAJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHBhZ2UsIHZtYSk7CiAJCWlmIChhZGRyZXNzID09IC1FRkFVTFQpCiAJCQljb250aW51ZTsKQEAgLTEyMjIsNyArMTMzMiw3IEBACiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopLCB2b2lkICphcmcpCiB7CiAJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYTsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwlzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YzsKIAlpbnQgcmV0ID0gU1dBUF9BR0FJTjsKIAogCS8qCkBAIC0xMjM3LDcgKzEzNDcsOCBAQAogCWlmICghYW5vbl92bWEpCiAJCXJldHVybiByZXQ7CiAJc3Bpbl9sb2NrKCZhbm9uX3ZtYS0+bG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZhbm9uX3ZtYS0+aGVhZCwgYW5vbl92bWFfbm9kZSkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoYXZjLCAmYW5vbl92bWEtPmhlYWQsIHNhbWVfYW5vbl92bWEpIHsKKwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBhdmMtPnZtYTsKIAkJdW5zaWduZWQgbG9uZyBhZGRyZXNzID0gdm1hX2FkZHJlc3MocGFnZSwgdm1hKTsKIAkJaWYgKGFkZHJlc3MgPT0gLUVGQVVMVCkKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vc3dhcC5jCmluZGV4IDMwOGU1N2QuLjkwMzZiODkgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuYworKysgYi9tbS9zd2FwLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAkJZGVsX3BhZ2VfZnJvbV9scnUoem9uZSwgcGFnZSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpvbmUtPmxydV9sb2NrLCBmbGFncyk7CiAJfQotCWZyZWVfaG90X3BhZ2UocGFnZSk7CisJZnJlZV9ob3RfY29sZF9wYWdlKHBhZ2UsIDApOwogfQogCiBzdGF0aWMgdm9pZCBwdXRfY29tcG91bmRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IDZjMDU4NWIuLjg0Mzc0ZDggMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKKysrIGIvbW0vc3dhcGZpbGUuYwpAQCAtODQwLDcgKzg0MCw4IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWluY19tbV9jb3VudGVyKHZtYS0+dm1fbW0sIGFub25fcnNzKTsKKwlkZWNfbW1fY291bnRlcih2bWEtPnZtX21tLCBNTV9TV0FQRU5UUyk7CisJaW5jX21tX2NvdW50ZXIodm1hLT52bV9tbSwgTU1fQU5PTlBBR0VTKTsKIAlnZXRfcGFnZShwYWdlKTsKIAlzZXRfcHRlX2F0KHZtYS0+dm1fbW0sIGFkZHIsIHB0ZSwKIAkJICAgcHRlX21rb2xkKG1rX3B0ZShwYWdlLCB2bWEtPnZtX3BhZ2VfcHJvdCkpKTsKQEAgLTE3NTksMTEgKzE3NjAsMTEgQEAKIAl1bnNpZ25lZCBpbnQgdHlwZTsKIAlpbnQgaSwgcHJldjsKIAlpbnQgZXJyb3I7Ci0JdW5pb24gc3dhcF9oZWFkZXIgKnN3YXBfaGVhZGVyID0gTlVMTDsKLQl1bnNpZ25lZCBpbnQgbnJfZ29vZF9wYWdlcyA9IDA7CisJdW5pb24gc3dhcF9oZWFkZXIgKnN3YXBfaGVhZGVyOworCXVuc2lnbmVkIGludCBucl9nb29kX3BhZ2VzOwogCWludCBucl9leHRlbnRzID0gMDsKIAlzZWN0b3JfdCBzcGFuOwotCXVuc2lnbmVkIGxvbmcgbWF4cGFnZXMgPSAxOworCXVuc2lnbmVkIGxvbmcgbWF4cGFnZXM7CiAJdW5zaWduZWQgbG9uZyBzd2FwZmlsZXBhZ2VzOwogCXVuc2lnbmVkIGNoYXIgKnN3YXBfbWFwID0gTlVMTDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CkBAIC0xOTIyLDkgKzE5MjMsMTMgQEAKIAkgKiBzd2FwIHB0ZS4KIAkgKi8KIAltYXhwYWdlcyA9IHN3cF9vZmZzZXQocHRlX3RvX3N3cF9lbnRyeSgKLQkJCXN3cF9lbnRyeV90b19wdGUoc3dwX2VudHJ5KDAsIH4wVUwpKSkpIC0gMTsKLQlpZiAobWF4cGFnZXMgPiBzd2FwX2hlYWRlci0+aW5mby5sYXN0X3BhZ2UpCi0JCW1heHBhZ2VzID0gc3dhcF9oZWFkZXItPmluZm8ubGFzdF9wYWdlOworCQkJc3dwX2VudHJ5X3RvX3B0ZShzd3BfZW50cnkoMCwgfjBVTCkpKSkgKyAxOworCWlmIChtYXhwYWdlcyA+IHN3YXBfaGVhZGVyLT5pbmZvLmxhc3RfcGFnZSkgeworCQltYXhwYWdlcyA9IHN3YXBfaGVhZGVyLT5pbmZvLmxhc3RfcGFnZSArIDE7CisJCS8qIHAtPm1heCBpcyBhbiB1bnNpZ25lZCBpbnQ6IGRvbid0IG92ZXJmbG93IGl0ICovCisJCWlmICgodW5zaWduZWQgaW50KW1heHBhZ2VzID09IDApCisJCQltYXhwYWdlcyA9IFVJTlRfTUFYOworCX0KIAlwLT5oaWdoZXN0X2JpdCA9IG1heHBhZ2VzIC0gMTsKIAogCWVycm9yID0gLUVJTlZBTDsKQEAgLTE5NDgsMjMgKzE5NTMsMjQgQEAKIAl9CiAKIAltZW1zZXQoc3dhcF9tYXAsIDAsIG1heHBhZ2VzKTsKKwlucl9nb29kX3BhZ2VzID0gbWF4cGFnZXMgLSAxOwkvKiBvbWl0IGhlYWRlciBwYWdlICovCisKIAlmb3IgKGkgPSAwOyBpIDwgc3dhcF9oZWFkZXItPmluZm8ubnJfYmFkcGFnZXM7IGkrKykgewotCQlpbnQgcGFnZV9uciA9IHN3YXBfaGVhZGVyLT5pbmZvLmJhZHBhZ2VzW2ldOwotCQlpZiAocGFnZV9uciA8PSAwIHx8IHBhZ2VfbnIgPj0gc3dhcF9oZWFkZXItPmluZm8ubGFzdF9wYWdlKSB7CisJCXVuc2lnbmVkIGludCBwYWdlX25yID0gc3dhcF9oZWFkZXItPmluZm8uYmFkcGFnZXNbaV07CisJCWlmIChwYWdlX25yID09IDAgfHwgcGFnZV9uciA+IHN3YXBfaGVhZGVyLT5pbmZvLmxhc3RfcGFnZSkgewogCQkJZXJyb3IgPSAtRUlOVkFMOwogCQkJZ290byBiYWRfc3dhcDsKIAkJfQotCQlzd2FwX21hcFtwYWdlX25yXSA9IFNXQVBfTUFQX0JBRDsKKwkJaWYgKHBhZ2VfbnIgPCBtYXhwYWdlcykgeworCQkJc3dhcF9tYXBbcGFnZV9ucl0gPSBTV0FQX01BUF9CQUQ7CisJCQlucl9nb29kX3BhZ2VzLS07CisJCX0KIAl9CiAKIAllcnJvciA9IHN3YXBfY2dyb3VwX3N3YXBvbih0eXBlLCBtYXhwYWdlcyk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGJhZF9zd2FwOwogCi0JbnJfZ29vZF9wYWdlcyA9IHN3YXBfaGVhZGVyLT5pbmZvLmxhc3RfcGFnZSAtCi0JCQlzd2FwX2hlYWRlci0+aW5mby5ucl9iYWRwYWdlcyAtCi0JCQkxIC8qIGhlYWRlciBwYWdlICovOwotCiAJaWYgKG5yX2dvb2RfcGFnZXMpIHsKIAkJc3dhcF9tYXBbMF0gPSBTV0FQX01BUF9CQUQ7CiAJCXAtPm1heCA9IG1heHBhZ2VzOwpAQCAtMjE1NSw3ICsyMTYxLDExIEBACiB9CiAKIC8qCi0gKiBpbmNyZWFzZSByZWZlcmVuY2UgY291bnQgb2Ygc3dhcCBlbnRyeSBieSAxLgorICogSW5jcmVhc2UgcmVmZXJlbmNlIGNvdW50IG9mIHN3YXAgZW50cnkgYnkgMS4KKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgb3IgLUVOT01FTSBpZiBhIHN3YXBfY291bnRfY29udGludWF0aW9uIGlzIHJlcXVpcmVkCisgKiBidXQgY291bGQgbm90IGJlIGF0b21pY2FsbHkgYWxsb2NhdGVkLiAgUmV0dXJucyAwLCBqdXN0IGFzIGlmIGl0IHN1Y2NlZWRlZCwKKyAqIGlmIF9fc3dhcF9kdXBsaWNhdGUoKSBmYWlscyBmb3IgYW5vdGhlciByZWFzb24gKC1FSU5WQUwgb3IgLUVOT0VOVCksIHdoaWNoCisgKiBtaWdodCBvY2N1ciBpZiBhIHBhZ2UgdGFibGUgZW50cnkgaGFzIGdvdCBjb3JydXB0ZWQuCiAgKi8KIGludCBzd2FwX2R1cGxpY2F0ZShzd3BfZW50cnlfdCBlbnRyeSkKIHsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggYzI2OTg2Yy4uNzljODA5OCAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKKysrIGIvbW0vdm1zY2FuLmMKQEAgLTI2MiwyNyArMjYyLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBDYWxsZWQgd2l0aG91dCBsb2NrIG9uIHdoZXRoZXIgcGFnZSBpcyBtYXBwZWQsIHNvIGFuc3dlciBpcyB1bnN0YWJsZSAqLwotc3RhdGljIGlubGluZSBpbnQgcGFnZV9tYXBwaW5nX2ludXNlKHN0cnVjdCBwYWdlICpwYWdlKQotewotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwotCi0JLyogUGFnZSBpcyBpbiBzb21lYm9keSdzIHBhZ2UgdGFibGVzLiAqLwotCWlmIChwYWdlX21hcHBlZChwYWdlKSkKLQkJcmV0dXJuIDE7Ci0KLQkvKiBCZSBtb3JlIHJlbHVjdGFudCB0byByZWNsYWltIHN3YXBjYWNoZSB0aGFuIHBhZ2VjYWNoZSAqLwotCWlmIChQYWdlU3dhcENhY2hlKHBhZ2UpKQotCQlyZXR1cm4gMTsKLQotCW1hcHBpbmcgPSBwYWdlX21hcHBpbmcocGFnZSk7Ci0JaWYgKCFtYXBwaW5nKQotCQlyZXR1cm4gMDsKLQotCS8qIEZpbGUgaXMgbW1hcCdkIGJ5IHNvbWVib2R5PyAqLwotCXJldHVybiBtYXBwaW5nX21hcHBlZChtYXBwaW5nKTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgaXNfcGFnZV9jYWNoZV9mcmVlYWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAkvKgpAQCAtNTc5LDYgKzU1OCw2NSBAQAogCXB1dF9wYWdlKHBhZ2UpOwkJLyogZHJvcCByZWYgZnJvbSBpc29sYXRlICovCiB9CiAKK2VudW0gcGFnZV9yZWZlcmVuY2VzIHsKKwlQQUdFUkVGX1JFQ0xBSU0sCisJUEFHRVJFRl9SRUNMQUlNX0NMRUFOLAorCVBBR0VSRUZfS0VFUCwKKwlQQUdFUkVGX0FDVElWQVRFLAorfTsKKworc3RhdGljIGVudW0gcGFnZV9yZWZlcmVuY2VzIHBhZ2VfY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJCSAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCit7CisJaW50IHJlZmVyZW5jZWRfcHRlcywgcmVmZXJlbmNlZF9wYWdlOworCXVuc2lnbmVkIGxvbmcgdm1fZmxhZ3M7CisKKwlyZWZlcmVuY2VkX3B0ZXMgPSBwYWdlX3JlZmVyZW5jZWQocGFnZSwgMSwgc2MtPm1lbV9jZ3JvdXAsICZ2bV9mbGFncyk7CisJcmVmZXJlbmNlZF9wYWdlID0gVGVzdENsZWFyUGFnZVJlZmVyZW5jZWQocGFnZSk7CisKKwkvKiBMdW1weSByZWNsYWltIC0gaWdub3JlIHJlZmVyZW5jZXMgKi8KKwlpZiAoc2MtPm9yZGVyID4gUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpCisJCXJldHVybiBQQUdFUkVGX1JFQ0xBSU07CisKKwkvKgorCSAqIE1sb2NrIGxvc3QgdGhlIGlzb2xhdGlvbiByYWNlIHdpdGggdXMuICBMZXQgdHJ5X3RvX3VubWFwKCkKKwkgKiBtb3ZlIHRoZSBwYWdlIHRvIHRoZSB1bmV2aWN0YWJsZSBsaXN0LgorCSAqLworCWlmICh2bV9mbGFncyAmIFZNX0xPQ0tFRCkKKwkJcmV0dXJuIFBBR0VSRUZfUkVDTEFJTTsKKworCWlmIChyZWZlcmVuY2VkX3B0ZXMpIHsKKwkJaWYgKFBhZ2VBbm9uKHBhZ2UpKQorCQkJcmV0dXJuIFBBR0VSRUZfQUNUSVZBVEU7CisJCS8qCisJCSAqIEFsbCBtYXBwZWQgcGFnZXMgc3RhcnQgb3V0IHdpdGggcGFnZSB0YWJsZQorCQkgKiByZWZlcmVuY2VzIGZyb20gdGhlIGluc3RhbnRpYXRpbmcgZmF1bHQsIHNvIHdlIG5lZWQKKwkJICogdG8gbG9vayB0d2ljZSBpZiBhIG1hcHBlZCBmaWxlIHBhZ2UgaXMgdXNlZCBtb3JlCisJCSAqIHRoYW4gb25jZS4KKwkJICoKKwkJICogTWFyayBpdCBhbmQgc3BhcmUgaXQgZm9yIGFub3RoZXIgdHJpcCBhcm91bmQgdGhlCisJCSAqIGluYWN0aXZlIGxpc3QuICBBbm90aGVyIHBhZ2UgdGFibGUgcmVmZXJlbmNlIHdpbGwKKwkJICogbGVhZCB0byBpdHMgYWN0aXZhdGlvbi4KKwkJICoKKwkJICogTm90ZTogdGhlIG1hcmsgaXMgc2V0IGZvciBhY3RpdmF0ZWQgcGFnZXMgYXMgd2VsbAorCQkgKiBzbyB0aGF0IHJlY2VudGx5IGRlYWN0aXZhdGVkIGJ1dCB1c2VkIHBhZ2VzIGFyZQorCQkgKiBxdWlja2x5IHJlY292ZXJlZC4KKwkJICovCisJCVNldFBhZ2VSZWZlcmVuY2VkKHBhZ2UpOworCisJCWlmIChyZWZlcmVuY2VkX3BhZ2UpCisJCQlyZXR1cm4gUEFHRVJFRl9BQ1RJVkFURTsKKworCQlyZXR1cm4gUEFHRVJFRl9LRUVQOworCX0KKworCS8qIFJlY2xhaW0gaWYgY2xlYW4sIGRlZmVyIGRpcnR5IHBhZ2VzIHRvIHdyaXRlYmFjayAqLworCWlmIChyZWZlcmVuY2VkX3BhZ2UpCisJCXJldHVybiBQQUdFUkVGX1JFQ0xBSU1fQ0xFQU47CisKKwlyZXR1cm4gUEFHRVJFRl9SRUNMQUlNOworfQorCiAvKgogICogc2hyaW5rX3BhZ2VfbGlzdCgpIHJldHVybnMgdGhlIG51bWJlciBvZiByZWNsYWltZWQgcGFnZXMKICAqLwpAQCAtNTkwLDE2ICs2MjgsMTUgQEAKIAlzdHJ1Y3QgcGFnZXZlYyBmcmVlZF9wdmVjOwogCWludCBwZ2FjdGl2YXRlID0gMDsKIAl1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCA9IDA7Ci0JdW5zaWduZWQgbG9uZyB2bV9mbGFnczsKIAogCWNvbmRfcmVzY2hlZCgpOwogCiAJcGFnZXZlY19pbml0KCZmcmVlZF9wdmVjLCAxKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkocGFnZV9saXN0KSkgeworCQllbnVtIHBhZ2VfcmVmZXJlbmNlcyByZWZlcmVuY2VzOwogCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAkJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJCWludCBtYXlfZW50ZXJfZnM7Ci0JCWludCByZWZlcmVuY2VkOwogCiAJCWNvbmRfcmVzY2hlZCgpOwogCkBAIC02NDEsMTcgKzY3OCwxNiBAQAogCQkJCWdvdG8ga2VlcF9sb2NrZWQ7CiAJCX0KIAotCQlyZWZlcmVuY2VkID0gcGFnZV9yZWZlcmVuY2VkKHBhZ2UsIDEsCi0JCQkJCQlzYy0+bWVtX2Nncm91cCwgJnZtX2ZsYWdzKTsKLQkJLyoKLQkJICogSW4gYWN0aXZlIHVzZSBvciByZWFsbHkgdW5mcmVlYWJsZT8gIEFjdGl2YXRlIGl0LgotCQkgKiBJZiBwYWdlIHdoaWNoIGhhdmUgUEdfbWxvY2tlZCBsb3N0IGlzb2x0YXRpb24gcmFjZSwKLQkJICogdHJ5X3RvX3VubWFwIG1vdmVzIGl0IHRvIHVuZXZpY3RhYmxlIGxpc3QKLQkJICovCi0JCWlmIChzYy0+b3JkZXIgPD0gUEFHRV9BTExPQ19DT1NUTFlfT1JERVIgJiYKLQkJCQkJcmVmZXJlbmNlZCAmJiBwYWdlX21hcHBpbmdfaW51c2UocGFnZSkKLQkJCQkJJiYgISh2bV9mbGFncyAmIFZNX0xPQ0tFRCkpCisJCXJlZmVyZW5jZXMgPSBwYWdlX2NoZWNrX3JlZmVyZW5jZXMocGFnZSwgc2MpOworCQlzd2l0Y2ggKHJlZmVyZW5jZXMpIHsKKwkJY2FzZSBQQUdFUkVGX0FDVElWQVRFOgogCQkJZ290byBhY3RpdmF0ZV9sb2NrZWQ7CisJCWNhc2UgUEFHRVJFRl9LRUVQOgorCQkJZ290byBrZWVwX2xvY2tlZDsKKwkJY2FzZSBQQUdFUkVGX1JFQ0xBSU06CisJCWNhc2UgUEFHRVJFRl9SRUNMQUlNX0NMRUFOOgorCQkJOyAvKiB0cnkgdG8gcmVjbGFpbSB0aGUgcGFnZSBiZWxvdyAqLworCQl9CiAKIAkJLyoKIAkJICogQW5vbnltb3VzIHByb2Nlc3MgbWVtb3J5IGhhcyBiYWNraW5nIHN0b3JlPwpAQCAtNjg1LDcgKzcyMSw3IEBACiAJCX0KIAogCQlpZiAoUGFnZURpcnR5KHBhZ2UpKSB7Ci0JCQlpZiAoc2MtPm9yZGVyIDw9IFBBR0VfQUxMT0NfQ09TVExZX09SREVSICYmIHJlZmVyZW5jZWQpCisJCQlpZiAocmVmZXJlbmNlcyA9PSBQQUdFUkVGX1JFQ0xBSU1fQ0xFQU4pCiAJCQkJZ290byBrZWVwX2xvY2tlZDsKIAkJCWlmICghbWF5X2VudGVyX2ZzKQogCQkJCWdvdG8ga2VlcF9sb2NrZWQ7CkBAIC0xMzUwLDkgKzEzODYsNyBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQkvKiBwYWdlX3JlZmVyZW5jZWQgY2xlYXJzIFBhZ2VSZWZlcmVuY2VkICovCi0JCWlmIChwYWdlX21hcHBpbmdfaW51c2UocGFnZSkgJiYKLQkJICAgIHBhZ2VfcmVmZXJlbmNlZChwYWdlLCAwLCBzYy0+bWVtX2Nncm91cCwgJnZtX2ZsYWdzKSkgeworCQlpZiAocGFnZV9yZWZlcmVuY2VkKHBhZ2UsIDAsIHNjLT5tZW1fY2dyb3VwLCAmdm1fZmxhZ3MpKSB7CiAJCQlucl9yb3RhdGVkKys7CiAJCQkvKgogCQkJICogSWRlbnRpZnkgcmVmZXJlbmNlZCwgZmlsZS1iYWNrZWQgYWN0aXZlIHBhZ2VzIGFuZApAQCAtMTUwMSw2ICsxNTM1LDEzIEBACiAJdW5zaWduZWQgbG9uZyBhcCwgZnA7CiAJc3RydWN0IHpvbmVfcmVjbGFpbV9zdGF0ICpyZWNsYWltX3N0YXQgPSBnZXRfcmVjbGFpbV9zdGF0KHpvbmUsIHNjKTsKIAorCS8qIElmIHdlIGhhdmUgbm8gc3dhcCBzcGFjZSwgZG8gbm90IGJvdGhlciBzY2FubmluZyBhbm9uIHBhZ2VzLiAqLworCWlmICghc2MtPm1heV9zd2FwIHx8IChucl9zd2FwX3BhZ2VzIDw9IDApKSB7CisJCXBlcmNlbnRbMF0gPSAwOworCQlwZXJjZW50WzFdID0gMTAwOworCQlyZXR1cm47CisJfQorCiAJYW5vbiAgPSB6b25lX25yX2xydV9wYWdlcyh6b25lLCBzYywgTFJVX0FDVElWRV9BTk9OKSArCiAJCXpvbmVfbnJfbHJ1X3BhZ2VzKHpvbmUsIHNjLCBMUlVfSU5BQ1RJVkVfQU5PTik7CiAJZmlsZSAgPSB6b25lX25yX2xydV9wYWdlcyh6b25lLCBzYywgTFJVX0FDVElWRV9GSUxFKSArCkBAIC0xNTk4LDIyICsxNjM5LDIwIEBACiAJdW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQgPSBzYy0+bnJfcmVjbGFpbWVkOwogCXVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSA9IHNjLT5ucl90b19yZWNsYWltOwogCXN0cnVjdCB6b25lX3JlY2xhaW1fc3RhdCAqcmVjbGFpbV9zdGF0ID0gZ2V0X3JlY2xhaW1fc3RhdCh6b25lLCBzYyk7Ci0JaW50IG5vc3dhcCA9IDA7CiAKLQkvKiBJZiB3ZSBoYXZlIG5vIHN3YXAgc3BhY2UsIGRvIG5vdCBib3RoZXIgc2Nhbm5pbmcgYW5vbiBwYWdlcy4gKi8KLQlpZiAoIXNjLT5tYXlfc3dhcCB8fCAobnJfc3dhcF9wYWdlcyA8PSAwKSkgewotCQlub3N3YXAgPSAxOwotCQlwZXJjZW50WzBdID0gMDsKLQkJcGVyY2VudFsxXSA9IDEwMDsKLQl9IGVsc2UKLQkJZ2V0X3NjYW5fcmF0aW8oem9uZSwgc2MsIHBlcmNlbnQpOworCWdldF9zY2FuX3JhdGlvKHpvbmUsIHNjLCBwZXJjZW50KTsKIAogCWZvcl9lYWNoX2V2aWN0YWJsZV9scnUobCkgewogCQlpbnQgZmlsZSA9IGlzX2ZpbGVfbHJ1KGwpOwogCQl1bnNpZ25lZCBsb25nIHNjYW47CiAKKwkJaWYgKHBlcmNlbnRbZmlsZV0gPT0gMCkgeworCQkJbnJbbF0gPSAwOworCQkJY29udGludWU7CisJCX0KKwogCQlzY2FuID0gem9uZV9ucl9scnVfcGFnZXMoem9uZSwgc2MsIGwpOwotCQlpZiAocHJpb3JpdHkgfHwgbm9zd2FwKSB7CisJCWlmIChwcmlvcml0eSkgewogCQkJc2NhbiA+Pj0gcHJpb3JpdHk7CiAJCQlzY2FuID0gKHNjYW4gKiBwZXJjZW50W2ZpbGVdKSAvIDEwMDsKIAkJfQpAQCAtMTY5NCw4ICsxNzMzLDcgQEAKIAkJCQljb250aW51ZTsKIAkJCW5vdGVfem9uZV9zY2FubmluZ19wcmlvcml0eSh6b25lLCBwcmlvcml0eSk7CiAKLQkJCWlmICh6b25lX2lzX2FsbF91bnJlY2xhaW1hYmxlKHpvbmUpICYmCi0JCQkJCQlwcmlvcml0eSAhPSBERUZfUFJJT1JJVFkpCisJCQlpZiAoem9uZS0+YWxsX3VucmVjbGFpbWFibGUgJiYgcHJpb3JpdHkgIT0gREVGX1BSSU9SSVRZKQogCQkJCWNvbnRpbnVlOwkvKiBMZXQga3N3YXBkIHBvbGwgaXQgKi8KIAkJCXNjLT5hbGxfdW5yZWNsYWltYWJsZSA9IDA7CiAJCX0gZWxzZSB7CkBAIC0xOTIyLDcgKzE5NjAsNyBAQAogCQlpZiAoIXBvcHVsYXRlZF96b25lKHpvbmUpKQogCQkJY29udGludWU7CiAKLQkJaWYgKHpvbmVfaXNfYWxsX3VucmVjbGFpbWFibGUoem9uZSkpCisJCWlmICh6b25lLT5hbGxfdW5yZWNsYWltYWJsZSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmICghem9uZV93YXRlcm1hcmtfb2soem9uZSwgb3JkZXIsIGhpZ2hfd21hcmtfcGFnZXMoem9uZSksCkBAIC0yMDEyLDggKzIwNTAsNyBAQAogCQkJaWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSkKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKHpvbmVfaXNfYWxsX3VucmVjbGFpbWFibGUoem9uZSkgJiYKLQkJCSAgICBwcmlvcml0eSAhPSBERUZfUFJJT1JJVFkpCisJCQlpZiAoem9uZS0+YWxsX3VucmVjbGFpbWFibGUgJiYgcHJpb3JpdHkgIT0gREVGX1BSSU9SSVRZKQogCQkJCWNvbnRpbnVlOwogCiAJCQkvKgpAQCAtMjA1NiwxMyArMjA5Myw5IEBACiAJCQlpZiAoIXBvcHVsYXRlZF96b25lKHpvbmUpKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoem9uZV9pc19hbGxfdW5yZWNsYWltYWJsZSh6b25lKSAmJgotCQkJCQlwcmlvcml0eSAhPSBERUZfUFJJT1JJVFkpCisJCQlpZiAoem9uZS0+YWxsX3VucmVjbGFpbWFibGUgJiYgcHJpb3JpdHkgIT0gREVGX1BSSU9SSVRZKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoIXpvbmVfd2F0ZXJtYXJrX29rKHpvbmUsIG9yZGVyLAotCQkJCQloaWdoX3dtYXJrX3BhZ2VzKHpvbmUpLCBlbmRfem9uZSwgMCkpCi0JCQkJYWxsX3pvbmVzX29rID0gMDsKIAkJCXRlbXBfcHJpb3JpdHlbaV0gPSBwcmlvcml0eTsKIAkJCXNjLm5yX3NjYW5uZWQgPSAwOwogCQkJbm90ZV96b25lX3NjYW5uaW5nX3ByaW9yaXR5KHpvbmUsIHByaW9yaXR5KTsKQEAgLTIwODcsMTIgKzIxMjAsMTEgQEAKIAkJCQkJCWxydV9wYWdlcyk7CiAJCQlzYy5ucl9yZWNsYWltZWQgKz0gcmVjbGFpbV9zdGF0ZS0+cmVjbGFpbWVkX3NsYWI7CiAJCQl0b3RhbF9zY2FubmVkICs9IHNjLm5yX3NjYW5uZWQ7Ci0JCQlpZiAoem9uZV9pc19hbGxfdW5yZWNsYWltYWJsZSh6b25lKSkKKwkJCWlmICh6b25lLT5hbGxfdW5yZWNsYWltYWJsZSkKIAkJCQljb250aW51ZTsKLQkJCWlmIChucl9zbGFiID09IDAgJiYgem9uZS0+cGFnZXNfc2Nhbm5lZCA+PQotCQkJCQkoem9uZV9yZWNsYWltYWJsZV9wYWdlcyh6b25lKSAqIDYpKQotCQkJCQl6b25lX3NldF9mbGFnKHpvbmUsCi0JCQkJCQkgICAgICBaT05FX0FMTF9VTlJFQ0xBSU1BQkxFKTsKKwkJCWlmIChucl9zbGFiID09IDAgJiYKKwkJCSAgICB6b25lLT5wYWdlc19zY2FubmVkID49ICh6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHpvbmUpICogNikpCisJCQkJem9uZS0+YWxsX3VucmVjbGFpbWFibGUgPSAxOwogCQkJLyoKIAkJCSAqIElmIHdlJ3ZlIGRvbmUgYSBkZWNlbnQgYW1vdW50IG9mIHNjYW5uaW5nIGFuZAogCQkJICogdGhlIHJlY2xhaW0gcmF0aW8gaXMgbG93LCBzdGFydCBkb2luZyB3cml0ZXBhZ2UKQEAgLTIxMDIsMTMgKzIxMzQsMTggQEAKIAkJCSAgICB0b3RhbF9zY2FubmVkID4gc2MubnJfcmVjbGFpbWVkICsgc2MubnJfcmVjbGFpbWVkIC8gMikKIAkJCQlzYy5tYXlfd3JpdGVwYWdlID0gMTsKIAotCQkJLyoKLQkJCSAqIFdlIGFyZSBzdGlsbCB1bmRlciBtaW4gd2F0ZXIgbWFyay4gaXQgbWVhbiB3ZSBoYXZlCi0JCQkgKiBHRlBfQVRPTUlDIGFsbG9jYXRpb24gZmFpbHVyZSByaXNrLiBIdXJyeSB1cCEKLQkJCSAqLwotCQkJaWYgKCF6b25lX3dhdGVybWFya19vayh6b25lLCBvcmRlciwgbWluX3dtYXJrX3BhZ2VzKHpvbmUpLAotCQkJCQkgICAgICBlbmRfem9uZSwgMCkpCi0JCQkJaGFzX3VuZGVyX21pbl93YXRlcm1hcmtfem9uZSA9IDE7CisJCQlpZiAoIXpvbmVfd2F0ZXJtYXJrX29rKHpvbmUsIG9yZGVyLAorCQkJCQloaWdoX3dtYXJrX3BhZ2VzKHpvbmUpLCBlbmRfem9uZSwgMCkpIHsKKwkJCQlhbGxfem9uZXNfb2sgPSAwOworCQkJCS8qCisJCQkJICogV2UgYXJlIHN0aWxsIHVuZGVyIG1pbiB3YXRlciBtYXJrLiAgVGhpcworCQkJCSAqIG1lYW5zIHRoYXQgd2UgaGF2ZSBhIEdGUF9BVE9NSUMgYWxsb2NhdGlvbgorCQkJCSAqIGZhaWx1cmUgcmlzay4gSHVycnkgdXAhCisJCQkJICovCisJCQkJaWYgKCF6b25lX3dhdGVybWFya19vayh6b25lLCBvcmRlciwKKwkJCQkJICAgIG1pbl93bWFya19wYWdlcyh6b25lKSwgZW5kX3pvbmUsIDApKQorCQkJCQloYXNfdW5kZXJfbWluX3dhdGVybWFya196b25lID0gMTsKKwkJCX0KIAogCQl9CiAJCWlmIChhbGxfem9uZXNfb2spCkBAIC0yNTUwLDYgKzI1ODcsNyBAQAogCSAqIGFuZCBSRUNMQUlNX1NXQVAuCiAJICovCiAJcC0+ZmxhZ3MgfD0gUEZfTUVNQUxMT0MgfCBQRl9TV0FQV1JJVEU7CisJbG9ja2RlcF9zZXRfY3VycmVudF9yZWNsYWltX3N0YXRlKGdmcF9tYXNrKTsKIAlyZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiID0gMDsKIAlwLT5yZWNsYWltX3N0YXRlID0gJnJlY2xhaW1fc3RhdGU7CiAKQEAgLTI1OTMsNiArMjYzMSw3IEBACiAKIAlwLT5yZWNsYWltX3N0YXRlID0gTlVMTDsKIAljdXJyZW50LT5mbGFncyAmPSB+KFBGX01FTUFMTE9DIHwgUEZfU1dBUFdSSVRFKTsKKwlsb2NrZGVwX2NsZWFyX2N1cnJlbnRfcmVjbGFpbV9zdGF0ZSgpOwogCXJldHVybiBzYy5ucl9yZWNsYWltZWQgPj0gbnJfcGFnZXM7CiB9CiAKQEAgLTI2MTUsNyArMjY1NCw3IEBACiAJICAgIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9TTEFCX1JFQ0xBSU1BQkxFKSA8PSB6b25lLT5taW5fc2xhYl9wYWdlcykKIAkJcmV0dXJuIFpPTkVfUkVDTEFJTV9GVUxMOwogCi0JaWYgKHpvbmVfaXNfYWxsX3VucmVjbGFpbWFibGUoem9uZSkpCisJaWYgKHpvbmUtPmFsbF91bnJlY2xhaW1hYmxlKQogCQlyZXR1cm4gWk9ORV9SRUNMQUlNX0ZVTEw7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvbW0vdm1zdGF0LmMgYi9tbS92bXN0YXQuYwppbmRleCBmYzVhYTE4Li43Zjc2MGNiIDEwMDY0NAotLS0gYS9tbS92bXN0YXQuYworKysgYi9tbS92bXN0YXQuYwpAQCAtNzYzLDcgKzc2Myw3IEBACiAJCSAgICJcbiAgcHJldl9wcmlvcml0eTogICAgICVpIgogCQkgICAiXG4gIHN0YXJ0X3BmbjogICAgICAgICAlbHUiCiAJCSAgICJcbiAgaW5hY3RpdmVfcmF0aW86ICAgICV1IiwKLQkJCSAgIHpvbmVfaXNfYWxsX3VucmVjbGFpbWFibGUoem9uZSksCisJCSAgIHpvbmUtPmFsbF91bnJlY2xhaW1hYmxlLAogCQkgICB6b25lLT5wcmV2X3ByaW9yaXR5LAogCQkgICB6b25lLT56b25lX3N0YXJ0X3BmbiwKIAkJICAgem9uZS0+aW5hY3RpdmVfcmF0aW8pOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmMuYyBiL25ldC9zdW5ycGMvc3ZjLmMKaW5kZXggNmRjZjhjOS4uODQyMGE0MiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmMuYworKysgYi9uZXQvc3VucnBjL3N2Yy5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAkJcmV0dXJuIFNWQ19QT09MX1BFUk5PREU7CiAJfQogCi0Jbm9kZSA9IGFueV9vbmxpbmVfbm9kZShub2RlX29ubGluZV9tYXApOworCW5vZGUgPSBmaXJzdF9vbmxpbmVfbm9kZTsKIAlpZiAobnJfY3B1c19ub2RlKG5vZGUpID4gMikgewogCQkvKgogCQkgKiBOb24tdHJpdmlhbCBTTVAsIG9yIENPTkZJR19OVU1BIG9uCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y194cHJ0LmMgYi9uZXQvc3VucnBjL3N2Y194cHJ0LmMKaW5kZXggN2QxZjllOS4uOGYwZjFmYiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmNfeHBydC5jCisrKyBiL25ldC9zdW5ycGMvc3ZjX3hwcnQuYwpAQCAtMTczLDExICsxNzMsMTMgQEAKIAkJLnNpbl9hZGRyLnNfYWRkcgk9IGh0b25sKElOQUREUl9BTlkpLAogCQkuc2luX3BvcnQJCT0gaHRvbnMocG9ydCksCiAJfTsKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKIAlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjYgPSB7CiAJCS5zaW42X2ZhbWlseQkJPSBBRl9JTkVUNiwKIAkJLnNpbjZfYWRkcgkJPSBJTjZBRERSX0FOWV9JTklULAogCQkuc2luNl9wb3J0CQk9IGh0b25zKHBvcnQpLAogCX07CisjZW5kaWYJLyogZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpICovCiAJc3RydWN0IHNvY2thZGRyICpzYXA7CiAJc2l6ZV90IGxlbjsKIApAQCAtMTg2LDEwICsxODgsMTIgQEAKIAkJc2FwID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW47CiAJCWxlbiA9IHNpemVvZihzaW4pOwogCQlicmVhazsKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKIAljYXNlIFBGX0lORVQ2OgogCQlzYXAgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbjY7CiAJCWxlbiA9IHNpemVvZihzaW42KTsKIAkJYnJlYWs7CisjZW5kaWYJLyogZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpICovCiAJZGVmYXVsdDoKIAkJcmV0dXJuIEVSUl9QVFIoLUVBRk5PU1VQUE9SVCk7CiAJfQpAQCAtMjMxLDcgKzIzNSwxMCBAQAogIGVycjoKIAlzcGluX3VubG9jaygmc3ZjX3hwcnRfY2xhc3NfbG9jayk7CiAJZHByaW50aygic3ZjOiB0cmFuc3BvcnQgJXMgbm90IGZvdW5kXG4iLCB4cHJ0X25hbWUpOwotCXJldHVybiAtRU5PRU5UOworCisJLyogVGhpcyBlcnJubyBpcyBleHBvc2VkIHRvIHVzZXIgc3BhY2UuICBQcm92aWRlIGEgcmVhc29uYWJsZQorCSAqIHBlcnJvciBtc2cgZm9yIGEgYmFkIHRyYW5zcG9ydC4gKi8KKwlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHN2Y19jcmVhdGVfeHBydCk7CiAKQEAgLTY5OSw4ICs3MDYsMTAgQEAKIAlzcGluX3VubG9ja19iaCgmcG9vbC0+c3BfbG9jayk7CiAKIAlsZW4gPSAwOwotCWlmICh0ZXN0X2JpdChYUFRfTElTVEVORVIsICZ4cHJ0LT54cHRfZmxhZ3MpICYmCi0JICAgICF0ZXN0X2JpdChYUFRfQ0xPU0UsICZ4cHJ0LT54cHRfZmxhZ3MpKSB7CisJaWYgKHRlc3RfYml0KFhQVF9DTE9TRSwgJnhwcnQtPnhwdF9mbGFncykpIHsKKwkJZHByaW50aygic3ZjX3JlY3Y6IGZvdW5kIFhQVF9DTE9TRVxuIik7CisJCXN2Y19kZWxldGVfeHBydCh4cHJ0KTsKKwl9IGVsc2UgaWYgKHRlc3RfYml0KFhQVF9MSVNURU5FUiwgJnhwcnQtPnhwdF9mbGFncykpIHsKIAkJc3RydWN0IHN2Y194cHJ0ICpuZXd4cHQ7CiAJCW5ld3hwdCA9IHhwcnQtPnhwdF9vcHMtPnhwb19hY2NlcHQoeHBydCk7CiAJCWlmIChuZXd4cHQpIHsKQEAgLTcyNiw3ICs3MzUsNyBAQAogCQkJc3ZjX3hwcnRfcmVjZWl2ZWQobmV3eHB0KTsKIAkJfQogCQlzdmNfeHBydF9yZWNlaXZlZCh4cHJ0KTsKLQl9IGVsc2UgaWYgKCF0ZXN0X2JpdChYUFRfQ0xPU0UsICZ4cHJ0LT54cHRfZmxhZ3MpKSB7CisJfSBlbHNlIHsKIAkJZHByaW50aygic3ZjOiBzZXJ2ZXIgJXAsIHBvb2wgJXUsIHRyYW5zcG9ydCAlcCwgaW51c2U9JWRcbiIsCiAJCQlycXN0cCwgcG9vbC0+c3BfaWQsIHhwcnQsCiAJCQlhdG9taWNfcmVhZCgmeHBydC0+eHB0X3JlZi5yZWZjb3VudCkpOwpAQCAtNzM5LDExICs3NDgsNiBAQAogCQlkcHJpbnRrKCJzdmM6IGdvdCBsZW49JWRcbiIsIGxlbik7CiAJfQogCi0JaWYgKHRlc3RfYml0KFhQVF9DTE9TRSwgJnhwcnQtPnhwdF9mbGFncykpIHsKLQkJZHByaW50aygic3ZjX3JlY3Y6IGZvdW5kIFhQVF9DTE9TRVxuIik7Ci0JCXN2Y19kZWxldGVfeHBydCh4cHJ0KTsKLQl9Ci0KIAkvKiBObyBkYXRhLCBpbmNvbXBsZXRlIChUQ1ApIHJlYWQsIG9yIGFjY2VwdCgpICovCiAJaWYgKGxlbiA9PSAwIHx8IGxlbiA9PSAtRUFHQUlOKSB7CiAJCXJxc3RwLT5ycV9yZXMubGVuID0gMDsKQEAgLTg4OSwxMSArODkzLDggQEAKIAlpZiAodGVzdF9iaXQoWFBUX1RFTVAsICZ4cHJ0LT54cHRfZmxhZ3MpKQogCQlzZXJ2LT5zdl90bXBjbnQtLTsKIAotCWZvciAoZHIgPSBzdmNfZGVmZXJyZWRfZGVxdWV1ZSh4cHJ0KTsgZHI7Ci0JICAgICBkciA9IHN2Y19kZWZlcnJlZF9kZXF1ZXVlKHhwcnQpKSB7Ci0JCXN2Y194cHJ0X3B1dCh4cHJ0KTsKKwl3aGlsZSAoKGRyID0gc3ZjX2RlZmVycmVkX2RlcXVldWUoeHBydCkpICE9IE5VTEwpCiAJCWtmcmVlKGRyKTsKLQl9CiAKIAlzdmNfeHBydF9wdXQoeHBydCk7CiAJc3Bpbl91bmxvY2tfYmgoJnNlcnYtPnN2X2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNhdXRoX3VuaXguYyBiL25ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmMKaW5kZXggZDhjMDQxMS4uYWZkY2IwNCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmNhdXRoX3VuaXguYworKysgYi9uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjZGVmaW5lIFJQQ0RCR19GQUNJTElUWQlSUENEQkdfQVVUSAogCisjaW5jbHVkZSA8bGludXgvc3VucnBjL2NsbnQuaD4KIAogLyoKICAqIEFVVEhVTklYIGFuZCBBVVRITlVMTCBjcmVkZW50aWFscyBhcmUgYm90aCBoYW5kbGVkIGhlcmUuCkBAIC0xODcsMTAgKzE4OCwxMyBAQAogCSAqIGZvciBzY3JhdGNoOiAqLwogCWNoYXIgKmJ1ZiA9IG1lc2c7CiAJaW50IGxlbjsKLQlpbnQgYjEsIGIyLCBiMywgYjQsIGI1LCBiNiwgYjcsIGI4OwotCWNoYXIgYzsKIAljaGFyIGNsYXNzWzhdOwotCXN0cnVjdCBpbjZfYWRkciBhZGRyOworCXVuaW9uIHsKKwkJc3RydWN0IHNvY2thZGRyCQlzYTsKKwkJc3RydWN0IHNvY2thZGRyX2luCXM0OworCQlzdHJ1Y3Qgc29ja2FkZHJfaW42CXM2OworCX0gYWRkcmVzczsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjY7CiAJaW50IGVycjsKIAogCXN0cnVjdCBpcF9tYXAgKmlwbXA7CkBAIC0yMDksMjQgKzIxMywyNCBAQAogCWxlbiA9IHF3b3JkX2dldCgmbWVzZywgYnVmLCBtbGVuKTsKIAlpZiAobGVuIDw9IDApIHJldHVybiAtRUlOVkFMOwogCi0JaWYgKHNzY2FuZihidWYsICIldS4ldS4ldS4ldSVjIiwgJmIxLCAmYjIsICZiMywgJmI0LCAmYykgPT0gNCkgewotCQlhZGRyLnM2X2FkZHIzMlswXSA9IDA7Ci0JCWFkZHIuczZfYWRkcjMyWzFdID0gMDsKLQkJYWRkci5zNl9hZGRyMzJbMl0gPSBodG9ubCgweGZmZmYpOwotCQlhZGRyLnM2X2FkZHIzMlszXSA9Ci0JCQlodG9ubCgoKCgoKGIxPDw4KXxiMik8PDgpfGIzKTw8OCl8YjQpOwotICAgICAgIH0gZWxzZSBpZiAoc3NjYW5mKGJ1ZiwgIiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eCVjIiwKLQkJCSZiMSwgJmIyLCAmYjMsICZiNCwgJmI1LCAmYjYsICZiNywgJmI4LCAmYykgPT0gOCkgewotCQlhZGRyLnM2X2FkZHIxNlswXSA9IGh0b25zKGIxKTsKLQkJYWRkci5zNl9hZGRyMTZbMV0gPSBodG9ucyhiMik7Ci0JCWFkZHIuczZfYWRkcjE2WzJdID0gaHRvbnMoYjMpOwotCQlhZGRyLnM2X2FkZHIxNlszXSA9IGh0b25zKGI0KTsKLQkJYWRkci5zNl9hZGRyMTZbNF0gPSBodG9ucyhiNSk7Ci0JCWFkZHIuczZfYWRkcjE2WzVdID0gaHRvbnMoYjYpOwotCQlhZGRyLnM2X2FkZHIxNls2XSA9IGh0b25zKGI3KTsKLQkJYWRkci5zNl9hZGRyMTZbN10gPSBodG9ucyhiOCk7Ci0gICAgICAgfSBlbHNlCisJaWYgKHJwY19wdG9uKGJ1ZiwgbGVuLCAmYWRkcmVzcy5zYSwgc2l6ZW9mKGFkZHJlc3MpKSA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKKwlzd2l0Y2ggKGFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQkvKiBGb3JtIGEgbWFwcGVkIElQdjQgYWRkcmVzcyBpbiBzaW42ICovCisJCW1lbXNldCgmc2luNiwgMCwgc2l6ZW9mKHNpbjYpKTsKKwkJc2luNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworCQlzaW42LnNpbjZfYWRkci5zNl9hZGRyMzJbMl0gPSBodG9ubCgweGZmZmYpOworCQlzaW42LnNpbjZfYWRkci5zNl9hZGRyMzJbM10gPSBhZGRyZXNzLnM0LnNpbl9hZGRyLnNfYWRkcjsKKwkJYnJlYWs7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJY2FzZSBBRl9JTkVUNjoKKwkJbWVtY3B5KCZzaW42LCAmYWRkcmVzcy5zNiwgc2l6ZW9mKHNpbjYpKTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlleHBpcnkgPSBnZXRfZXhwaXJ5KCZtZXNnKTsKIAlpZiAoZXhwaXJ5ID09MCkKQEAgLTI0Myw3ICsyNDcsOCBAQAogCX0gZWxzZQogCQlkb20gPSBOVUxMOwogCi0JaXBtcCA9IGlwX21hcF9sb29rdXAoY2xhc3MsICZhZGRyKTsKKwkvKiBJUHY2IHNjb3BlIElEcyBhcmUgaWdub3JlZCBmb3Igbm93ICovCisJaXBtcCA9IGlwX21hcF9sb29rdXAoY2xhc3MsICZzaW42LnNpbjZfYWRkcik7CiAJaWYgKGlwbXApIHsKIAkJZXJyID0gaXBfbWFwX3VwZGF0ZShpcG1wLAogCQkJICAgICBjb250YWluZXJfb2YoZG9tLCBzdHJ1Y3QgdW5peF9kb21haW4sIGgpLApAQCAtNjE5LDcgKzYyNCw3IEBACiAJZWxzZQogCQlnbGVuID0gMDsKIAotCXNlcV9wcmludGYobSwgIiVkICVkOiIsIHVnLT51aWQsIGdsZW4pOworCXNlcV9wcmludGYobSwgIiV1ICVkOiIsIHVnLT51aWQsIGdsZW4pOwogCWZvciAoaSA9IDA7IGkgPCBnbGVuOyBpKyspCiAJCXNlcV9wcmludGYobSwgIiAlZCIsIEdST1VQX0FUKHVnLT5naSwgaSkpOwogCXNlcV9wcmludGYobSwgIlxuIik7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y3NvY2suYyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCmluZGV4IDg3MDkyOWUuLmEyOWYyNTkgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jCisrKyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCkBAIC05NjgsNiArOTY4LDcgQEAKIAlyZXR1cm4gbGVuOwogIGVycl9kZWxldGU6CiAJc2V0X2JpdChYUFRfQ0xPU0UsICZzdnNrLT5za194cHJ0LnhwdF9mbGFncyk7CisJc3ZjX3hwcnRfcmVjZWl2ZWQoJnN2c2stPnNrX3hwcnQpOwogIGVycl9hZ2FpbjoKIAlyZXR1cm4gLUVBR0FJTjsKIH0KQEAgLTEzNTcsNyArMTM1OCw3IEBACiAKIAlpZiAoIXNvKQogCQlyZXR1cm4gZXJyOwotCWlmIChzby0+c2stPnNrX2ZhbWlseSAhPSBBRl9JTkVUKQorCWlmICgoc28tPnNrLT5za19mYW1pbHkgIT0gUEZfSU5FVCkgJiYgKHNvLT5zay0+c2tfZmFtaWx5ICE9IFBGX0lORVQ2KSkKIAkJZXJyID0gIC1FQUZOT1NVUFBPUlQ7CiAJZWxzZSBpZiAoc28tPnNrLT5za19wcm90b2NvbCAhPSBJUFBST1RPX1RDUCAmJgogCSAgICBzby0+c2stPnNrX3Byb3RvY29sICE9IElQUFJPVE9fVURQKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jaGVja3BhdGNoLnBsIGIvc2NyaXB0cy9jaGVja3BhdGNoLnBsCmluZGV4IDMyNTdkM2QuLmE0ZDc0MzQgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvY2hlY2twYXRjaC5wbAorKysgYi9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKQEAgLTE0NSwxMSArMTQ1LDE0IEBACiAJCQlfX2twcm9iZXN8CiAJCQlfX3JlZgogCQl9eDsKKworIyBOb3RlcyB0byAkQXR0cmlidXRlOgorIyBXZSBuZWVkIFxiIGFmdGVyICdpbml0JyBvdGhlcndpc2UgJ2luaXRjb25zdCcgd2lsbCBjYXVzZSBhIGZhbHNlIHBvc2l0aXZlIGluIGEgY2hlY2sKIG91ciAkQXR0cmlidXRlCT0gcXJ7CiAJCQljb25zdHwKIAkJCV9fcmVhZF9tb3N0bHl8CiAJCQlfX2twcm9iZXN8Ci0JCQlfXyg/Om1lbXxjcHV8ZGV2fCkoPzppbml0ZGF0YXxpbml0KXwKKwkJCV9fKD86bWVtfGNwdXxkZXZ8KSg/OmluaXRkYXRhfGluaXRjb25zdHxpbml0XGIpfAogCQkJX19fX2NhY2hlbGluZV9hbGlnbmVkfAogCQkJX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcHwKIAkJCV9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXB8CkBAIC0xODksNiArMTkyLDE0IEBACiAJYXRvbWljX3QKICl9OwogCitvdXIgJGxvZ0Z1bmN0aW9ucyA9IHFyeyg/eDoKKwlwcmludGt8CisJcHJfKGRlYnVnfGRiZ3x2ZGJnfGRldmVsfGluZm98d2FybmluZ3xlcnJ8bm90aWNlfGFsZXJ0fGNyaXR8ZW1lcmd8Y29udCl8CisJZGV2XyhwcmludGt8ZGJnfHZkYmd8aW5mb3x3YXJufGVycnxub3RpY2V8YWxlcnR8Y3JpdHxlbWVyZ3xXQVJOKXwKKwlXQVJOfAorCXBhbmljCispfTsKKwogb3VyIEB0eXBlTGlzdCA9ICgKIAlxcnt2b2lkfSwKIAlxcnsoPzp1bnNpZ25lZFxzKyk/Y2hhcn0sCkBAIC0xMzc3LDEyICsxMzg4LDE3IEBACiAjODAgY29sdW1uIGxpbWl0CiAJCWlmICgkbGluZSA9fiAvXlwrLyAmJiAkcHJldnJhd2xpbmUgIX4gL1wvXCpcKi8gJiYKIAkJICAgICRyYXdsaW5lICF+IC9eLlxzKlwqXHMqXEAkSWRlbnRccy8gJiYKLQkJICAgICRsaW5lICF+IC9eXCtccypwcmludGtccypcKFxzKig/OktFUk5fXFMrXHMqKT8iW1hcdF0qIlxzKig/Oix8XClccyo7KVxzKiQvICYmCisJCSAgICAkbGluZSAhfiAvXlwrXHMqJGxvZ0Z1bmN0aW9uc1xzKlwoXHMqKD86S0VSTl9cUytccyopPyJbWFx0XSoiXHMqKD86LHxcKVxzKjspXHMqJC8gJiYKIAkJICAgICRsZW5ndGggPiA4MCkKIAkJewogCQkJV0FSTigibGluZSBvdmVyIDgwIGNoYXJhY3RlcnNcbiIgLiAkaGVyZWN1cnIpOwogCQl9CiAKKyMgY2hlY2sgZm9yIHNwYWNlcyBiZWZvcmUgYSBxdW90ZWQgbmV3bGluZQorCQlpZiAoJHJhd2xpbmUgPX4gL14uKlwiLipcc1xcbi8pIHsKKwkJCVdBUk4oInVubmVjZXNzYXJ5IHdoaXRlc3BhY2UgYmVmb3JlIGEgcXVvdGVkIG5ld2xpbmVcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKICMgY2hlY2sgZm9yIGFkZGluZyBsaW5lcyB3aXRob3V0IGEgbmV3bGluZS4KIAkJaWYgKCRsaW5lID1+IC9eXCsvICYmIGRlZmluZWQgJGxpbmVzWyRsaW5lbnJdICYmICRsaW5lc1skbGluZW5yXSA9fiAvXlxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUvKSB7CiAJCQlXQVJOKCJhZGRpbmcgYSBsaW5lIHdpdGhvdXQgbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuIiAuICRoZXJlY3Vycik7CkBAIC0xNDExLDYgKzE0MjcsMTIgQEAKIAkJCUVSUk9SKCJjb2RlIGluZGVudCBzaG91bGQgdXNlIHRhYnMgd2hlcmUgcG9zc2libGVcbiIgLiAkaGVyZXZldCk7CiAJCX0KIAorIyBjaGVjayBmb3Igc3BhY2UgYmVmb3JlIHRhYnMuCisJCWlmICgkcmF3bGluZSA9fiAvXlwrLyAmJiAkcmF3bGluZSA9fiAvIFx0LykgeworCQkJbXkgJGhlcmV2ZXQgPSAiJGhlcmVcbiIgLiBjYXRfdmV0KCRyYXdsaW5lKSAuICJcbiI7CisJCQlXQVJOKCJwbGVhc2UsIG5vIHNwYWNlIGJlZm9yZSB0YWJzXG4iIC4gJGhlcmV2ZXQpOworCQl9CisKICMgY2hlY2sgd2UgYXJlIGluIGEgdmFsaWQgQyBzb3VyY2UgZmlsZSBpZiBub3QgdGhlbiBpZ25vcmUgdGhpcyBodW5rCiAJCW5leHQgaWYgKCRyZWFsZmlsZSAhfiAvXC4oaHxjKSQvKTsKIApAQCAtMjE4Miw4ICsyMjA0LDEwIEBACiAJCQkJIyBGaW5kIG91dCBob3cgbG9uZyB0aGUgY29uZGl0aW9uYWwgYWN0dWFsbHkgaXMuCiAJCQkJbXkgQG5ld2xpbmVzID0gKCRjID1+IC9cbi9ncyk7CiAJCQkJbXkgJGNvbmRfbGluZXMgPSAxICsgJCNuZXdsaW5lczsKKwkJCQlteSAkc3RhdF9yZWFsID0gJyc7CiAKLQkJCQlteSAkc3RhdF9yZWFsID0gcmF3X2xpbmUoJGxpbmVuciwgJGNvbmRfbGluZXMpOworCQkJCSRzdGF0X3JlYWwgPSByYXdfbGluZSgkbGluZW5yLCAkY29uZF9saW5lcykKKwkJCQkJCQkuICJcbiIgaWYgKCRjb25kX2xpbmVzKTsKIAkJCQlpZiAoZGVmaW5lZCgkc3RhdF9yZWFsKSAmJiAkY29uZF9saW5lcyA+IDEpIHsKIAkJCQkJJHN0YXRfcmVhbCA9ICJbLi4uXVxuJHN0YXRfcmVhbCI7CiAJCQkJfQpAQCAtMjM0OCw2ICsyMzcyLDggQEAKIAkJCQlERUNMQVJFX1BFUl9DUFV8CiAJCQkJREVGSU5FX1BFUl9DUFV8CiAJCQkJX190eXBlb2ZfX1wofAorCQkJCXVuaW9ufAorCQkJCXN0cnVjdHwKIAkJCQlcLiRJZGVudFxzKj1ccyp8CiAJCQkJXlwifFwiJAogCQkJfXg7CkBAIC0yNTcyLDYgKzI1OTgsMTEgQEAKIAkJCVdBUk4oInBsYWluIGlubGluZSBpcyBwcmVmZXJyZWQgb3ZlciAkMVxuIiAuICRoZXJlY3Vycik7CiAJCX0KIAorIyBjaGVjayBmb3Igc2l6ZW9mKCYpCisJCWlmICgkbGluZSA9fiAvXGJzaXplb2ZccypcKFxzKlwmLykgeworCQkJV0FSTigic2l6ZW9mKCYgc2hvdWxkIGJlIGF2b2lkZWRcbiIgLiAkaGVyZWN1cnIpOworCQl9CisKICMgY2hlY2sgZm9yIG5ldyBleHRlcm5zIGluIC5jIGZpbGVzLgogCQlpZiAoJHJlYWxmaWxlID1+IC9cLmMkLyAmJiBkZWZpbmVkICRzdGF0ICYmCiAJCSAgICAkc3RhdCA9fiAvXi5ccyooPzpleHRlcm5ccyspPyRUeXBlXHMrKCRJZGVudCkoXHMqKVwoL3MpCkBAIC0yNjM0LDkgKzI2NjUsNDYgQEAKIAkJaWYgKCRsaW5lID1+IC9eLlxzKl9faW5pdGNhbGxccypcKC8pIHsKIAkJCVdBUk4oInBsZWFzZSB1c2UgZGV2aWNlX2luaXRjYWxsKCkgaW5zdGVhZCBvZiBfX2luaXRjYWxsKClcbiIgLiAkaGVyZWN1cnIpOwogCQl9Ci0jIGNoZWNrIGZvciBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zLCBlbnN1cmUgdGhleSBhcmUgY29uc3QuCisjIGNoZWNrIGZvciB2YXJpb3VzIG9wcyBzdHJ1Y3RzLCBlbnN1cmUgdGhleSBhcmUgY29uc3QuCisJCW15ICRzdHJ1Y3Rfb3BzID0gcXJ7YWNwaV9kb2NrX29wc3wKKwkJCQlhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnN8CisJCQkJYmFja2xpZ2h0X29wc3wKKwkJCQlibG9ja19kZXZpY2Vfb3BlcmF0aW9uc3wKKwkJCQlkZW50cnlfb3BlcmF0aW9uc3wKKwkJCQlkZXZfcG1fb3BzfAorCQkJCWRtYV9tYXBfb3BzfAorCQkJCWV4dGVudF9pb19vcHN8CisJCQkJZmlsZV9sb2NrX29wZXJhdGlvbnN8CisJCQkJZmlsZV9vcGVyYXRpb25zfAorCQkJCWh2X29wc3wKKwkJCQlpZGVfZG1hX29wc3wKKwkJCQlpbnRlbF9kdm9fZGV2X29wc3wKKwkJCQlpdGVtX29wZXJhdGlvbnN8CisJCQkJaXdsX29wc3wKKwkJCQlrZ2RiX2FyY2h8CisJCQkJa2dkYl9pb3wKKwkJCQlrc2V0X3VldmVudF9vcHN8CisJCQkJbG9ja19tYW5hZ2VyX29wZXJhdGlvbnN8CisJCQkJbWljcm9jb2RlX29wc3wKKwkJCQltdHJyX29wc3wKKwkJCQluZWlnaF9vcHN8CisJCQkJbmxtc3ZjX2JpbmRpbmd8CisJCQkJcGNpX3Jhd19vcHN8CisJCQkJcGlwZV9idWZfb3BlcmF0aW9uc3wKKwkJCQlwbGF0Zm9ybV9oaWJlcm5hdGlvbl9vcHN8CisJCQkJcGxhdGZvcm1fc3VzcGVuZF9vcHN8CisJCQkJcHJvdG9fb3BzfAorCQkJCXJwY19waXBlX29wc3wKKwkJCQlzZXFfb3BlcmF0aW9uc3wKKwkJCQlzbmRfYWM5N19idWlsZF9vcHN8CisJCQkJc29jX3BjbWNpYV9zb2NrZXRfb3BzfAorCQkJCXN0YWNrdHJhY2Vfb3BzfAorCQkJCXN5c2ZzX29wc3wKKwkJCQl0dHlfb3BlcmF0aW9uc3wKKwkJCQl1c2JfbW9uX29wZXJhdGlvbnN8CisJCQkJd2Rfb3BzfXg7CiAJCWlmICgkbGluZSAhfiAvXGJjb25zdFxiLyAmJgotCQkgICAgJGxpbmUgPX4gL1xic3RydWN0XHMrKGZpbGVfb3BlcmF0aW9uc3xzZXFfb3BlcmF0aW9ucylcYi8pIHsKKwkJICAgICRsaW5lID1+IC9cYnN0cnVjdFxzKygkc3RydWN0X29wcylcYi8pIHsKIAkJCVdBUk4oInN0cnVjdCAkMSBzaG91bGQgbm9ybWFsbHkgYmUgY29uc3RcbiIgLgogCQkJCSRoZXJlY3Vycik7CiAJCX0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2V0X21haW50YWluZXIucGwgYi9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsCmluZGV4IDJmMzIzMGQuLmY3NmYzZDEgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvZ2V0X21haW50YWluZXIucGwKKysrIGIvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbApAQCAtNDEsNiArNDEsOCBAQAogbXkgJHN1YnN5c3RlbSA9IDA7CiBteSAkc3RhdHVzID0gMDsKIG15ICRrZXl3b3JkcyA9IDE7CitteSAkc2VjdGlvbnMgPSAwOworbXkgJGZpbGVfZW1haWxzID0gMDsKIG15ICRmcm9tX2ZpbGVuYW1lID0gMDsKIG15ICRwYXR0ZXJuX2RlcHRoID0gMDsKIG15ICR2ZXJzaW9uID0gMDsKQEAgLTEyMCw5ICsxMjIsMTEgQEAKIAkJJ3dlYiEnID0+IFwkd2ViLAogCQkncGF0dGVybi1kZXB0aD1pJyA9PiBcJHBhdHRlcm5fZGVwdGgsCiAJCSdrfGtleXdvcmRzIScgPT4gXCRrZXl3b3JkcywKKwkJJ3NlY3Rpb25zIScgPT4gXCRzZWN0aW9ucywKKwkJJ2ZlfGZpbGUtZW1haWxzIScgPT4gXCRmaWxlX2VtYWlscywKIAkJJ2Z8ZmlsZScgPT4gXCRmcm9tX2ZpbGVuYW1lLAogCQkndnx2ZXJzaW9uJyA9PiBcJHZlcnNpb24sCi0JCSdofGhlbHAnID0+IFwkaGVscCwKKwkJJ2h8aGVscHx1c2FnZScgPT4gXCRoZWxwLAogCQkpKSB7CiAgICAgZGllICIkUDogaW52YWxpZCBhcmd1bWVudCAtIHVzZSAtLWhlbHAgaWYgbmVjZXNzYXJ5XG4iOwogfQpAQCAtMTM3LDkgKzE0MSw5IEBACiAgICAgZXhpdCAwOwogfQogCi1pZiAoJCNBUkdWIDwgMCkgewotICAgIHVzYWdlKCk7Ci0gICAgZGllICIkUDogYXJndW1lbnQgbWlzc2luZzogcGF0Y2hmaWxlIG9yIC1mIGZpbGUgcGxlYXNlXG4iOworaWYgKC10IFNURElOICYmICFAQVJHVikgeworICAgICMgV2UncmUgdGFsa2luZyB0byBhIHRlcm1pbmFsLCBidXQgaGF2ZSBubyBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorICAgIGRpZSAiJFA6IG1pc3NpbmcgcGF0Y2hmaWxlIG9yIC1mIGZpbGUgLSB1c2UgLS1oZWxwIGlmIG5lY2Vzc2FyeVxuIjsKIH0KIAogaWYgKCRvdXRwdXRfc2VwYXJhdG9yIG5lICIsICIpIHsKQEAgLTE1MCwxNiArMTU0LDI0IEBACiAgICAgJG91dHB1dF9yb2xlcyA9IDE7CiB9CiAKLW15ICRzZWxlY3Rpb25zID0gJGVtYWlsICsgJHNjbSArICRzdGF0dXMgKyAkc3Vic3lzdGVtICsgJHdlYjsKLWlmICgkc2VsZWN0aW9ucyA9PSAwKSB7Ci0gICAgdXNhZ2UoKTsKLSAgICBkaWUgIiRQOiAgTWlzc2luZyByZXF1aXJlZCBvcHRpb246IGVtYWlsLCBzY20sIHN0YXR1cywgc3Vic3lzdGVtIG9yIHdlYlxuIjsKK2lmICgkc2VjdGlvbnMpIHsKKyAgICAkZW1haWwgPSAwOworICAgICRlbWFpbF9saXN0ID0gMDsKKyAgICAkc2NtID0gMDsKKyAgICAkc3RhdHVzID0gMDsKKyAgICAkc3Vic3lzdGVtID0gMDsKKyAgICAkd2ViID0gMDsKKyAgICAka2V5d29yZHMgPSAwOworfSBlbHNlIHsKKyAgICBteSAkc2VsZWN0aW9ucyA9ICRlbWFpbCArICRzY20gKyAkc3RhdHVzICsgJHN1YnN5c3RlbSArICR3ZWI7CisgICAgaWYgKCRzZWxlY3Rpb25zID09IDApIHsKKwlkaWUgIiRQOiAgTWlzc2luZyByZXF1aXJlZCBvcHRpb246IGVtYWlsLCBzY20sIHN0YXR1cywgc3Vic3lzdGVtIG9yIHdlYlxuIjsKKyAgICB9CiB9CiAKIGlmICgkZW1haWwgJiYKICAgICAoJGVtYWlsX21haW50YWluZXIgKyAkZW1haWxfbGlzdCArICRlbWFpbF9zdWJzY3JpYmVyX2xpc3QgKwogICAgICAkZW1haWxfZ2l0ICsgJGVtYWlsX2dpdF9wZW5ndWluX2NoaWVmcyArICRlbWFpbF9naXRfYmxhbWUpID09IDApIHsKLSAgICB1c2FnZSgpOwogICAgIGRpZSAiJFA6IFBsZWFzZSBzZWxlY3QgYXQgbGVhc3QgMSBlbWFpbCBvcHRpb25cbiI7CiB9CiAKQEAgLTE3Myw4ICsxODUsOSBAQAogbXkgQHR5cGV2YWx1ZSA9ICgpOwogbXkgJWtleXdvcmRfaGFzaDsKIAotb3BlbihNQUlOVCwgIjwke2xrX3BhdGh9TUFJTlRBSU5FUlMiKSB8fCBkaWUgIiRQOiBDYW4ndCBvcGVuIE1BSU5UQUlORVJTXG4iOwotd2hpbGUgKDxNQUlOVD4pIHsKK29wZW4gKG15ICRtYWludCwgJzwnLCAiJHtsa19wYXRofU1BSU5UQUlORVJTIikKKyAgICBvciBkaWUgIiRQOiBDYW4ndCBvcGVuIE1BSU5UQUlORVJTOiAkIVxuIjsKK3doaWxlICg8JG1haW50PikgewogICAgIG15ICRsaW5lID0gJF87CiAKICAgICBpZiAoJGxpbmUgPX4gbS9eKFxDKTpccyooLiopLykgewpAQCAtMTk5LDEzICsyMTIsMTQgQEAKIAlwdXNoKEB0eXBldmFsdWUsICRsaW5lKTsKICAgICB9CiB9Ci1jbG9zZShNQUlOVCk7CitjbG9zZSgkbWFpbnQpOwogCiBteSAlbWFpbG1hcDsKIAogaWYgKCRlbWFpbF9yZW1vdmVfZHVwbGljYXRlcykgewotICAgIG9wZW4oTUFJTE1BUCwgIjwke2xrX3BhdGh9Lm1haWxtYXAiKSB8fCB3YXJuICIkUDogQ2FuJ3Qgb3BlbiAubWFpbG1hcFxuIjsKLSAgICB3aGlsZSAoPE1BSUxNQVA+KSB7CisgICAgb3BlbihteSAkbWFpbG1hcCwgJzwnLCAiJHtsa19wYXRofS5tYWlsbWFwIikKKwlvciB3YXJuICIkUDogQ2FuJ3Qgb3BlbiAubWFpbG1hcDogJCFcbiI7CisgICAgd2hpbGUgKDwkbWFpbG1hcD4pIHsKIAlteSAkbGluZSA9ICRfOwogCiAJbmV4dCBpZiAoJGxpbmUgPX4gbS9eXHMqIy8pOwpAQCAtMjI0LDcgKzIzOCw3IEBACiAJICAgICRtYWlsbWFweyRuYW1lfSA9IFxAYXJyOwogCX0KICAgICB9Ci0gICAgY2xvc2UoTUFJTE1BUCk7CisgICAgY2xvc2UoJG1haWxtYXApOwogfQogCiAjIyB1c2UgdGhlIGZpbGVuYW1lcyBvbiB0aGUgY29tbWFuZCBsaW5lIG9yIGZpbmQgdGhlIGZpbGVuYW1lcyBpbiB0aGUgcGF0Y2hmaWxlcwpAQCAtMjMyLDMxICsyNDYsNDcgQEAKIG15IEBmaWxlcyA9ICgpOwogbXkgQHJhbmdlID0gKCk7CiBteSBAa2V5d29yZF90dmkgPSAoKTsKK215IEBmaWxlX2VtYWlscyA9ICgpOworCitpZiAoIUBBUkdWKSB7CisgICAgcHVzaChAQVJHViwgIiZTVERJTiIpOworfQogCiBmb3JlYWNoIG15ICRmaWxlIChAQVJHVikgewotICAgICMjaWYgJGZpbGUgaXMgYSBkaXJlY3RvcnkgYW5kIGl0IGxhY2tzIGEgdHJhaWxpbmcgc2xhc2gsIGFkZCBvbmUKLSAgICBpZiAoKC1kICRmaWxlKSkgewotCSRmaWxlID1+IHNAKFteL10pJEAkMS9AOwotICAgIH0gZWxzaWYgKCEoLWYgJGZpbGUpKSB7Ci0JZGllICIkUDogZmlsZSAnJHtmaWxlfScgbm90IGZvdW5kXG4iOworICAgIGlmICgkZmlsZSBuZSAiJlNURElOIikgeworCSMjaWYgJGZpbGUgaXMgYSBkaXJlY3RvcnkgYW5kIGl0IGxhY2tzIGEgdHJhaWxpbmcgc2xhc2gsIGFkZCBvbmUKKwlpZiAoKC1kICRmaWxlKSkgeworCSAgICAkZmlsZSA9fiBzQChbXi9dKSRAJDEvQDsKKwl9IGVsc2lmICghKC1mICRmaWxlKSkgeworCSAgICBkaWUgIiRQOiBmaWxlICcke2ZpbGV9JyBub3QgZm91bmRcbiI7CisJfQogICAgIH0KICAgICBpZiAoJGZyb21fZmlsZW5hbWUpIHsKIAlwdXNoKEBmaWxlcywgJGZpbGUpOwotCWlmICgtZiAkZmlsZSAmJiAka2V5d29yZHMpIHsKLQkgICAgb3BlbihGSUxFLCAiPCRmaWxlIikgb3IgZGllICIkUDogQ2FuJ3Qgb3BlbiAke2ZpbGV9XG4iOwotCSAgICBteSAkdGV4dCA9IGRvIHsgbG9jYWwoJC8pIDsgPEZJTEU+IH07Ci0JICAgIGZvcmVhY2ggbXkgJGxpbmUgKGtleXMgJWtleXdvcmRfaGFzaCkgewotCQlpZiAoJHRleHQgPX4gbS8ka2V5d29yZF9oYXNoeyRsaW5lfS94KSB7Ci0JCSAgICBwdXNoKEBrZXl3b3JkX3R2aSwgJGxpbmUpOworCWlmICgtZiAkZmlsZSAmJiAoJGtleXdvcmRzIHx8ICRmaWxlX2VtYWlscykpIHsKKwkgICAgb3BlbihteSAkZiwgJzwnLCAkZmlsZSkKKwkJb3IgZGllICIkUDogQ2FuJ3Qgb3BlbiAkZmlsZTogJCFcbiI7CisJICAgIG15ICR0ZXh0ID0gZG8geyBsb2NhbCgkLykgOyA8JGY+IH07CisJICAgIGNsb3NlKCRmKTsKKwkgICAgaWYgKCRrZXl3b3JkcykgeworCQlmb3JlYWNoIG15ICRsaW5lIChrZXlzICVrZXl3b3JkX2hhc2gpIHsKKwkJICAgIGlmICgkdGV4dCA9fiBtLyRrZXl3b3JkX2hhc2h7JGxpbmV9L3gpIHsKKwkJCXB1c2goQGtleXdvcmRfdHZpLCAkbGluZSk7CisJCSAgICB9CiAJCX0KIAkgICAgfQotCSAgICBjbG9zZShGSUxFKTsKKwkgICAgaWYgKCRmaWxlX2VtYWlscykgeworCQlteSBAcG9zc19hZGRyID0gJHRleHQgPX4gbSRbQS1aYS16w4Atw79cIlwnIFwsXC5cKy1dKlxzKltcLF0qXHMqW1woXDxce117MCwxfVtBLVphLXowLTlfXC5cKy1dK1xAW0EtWmEtejAtOVwuLV0rXC5bQS1aYS16MC05XStbXClcPlx9XXswLDF9JGc7CisJCXB1c2goQGZpbGVfZW1haWxzLCBjbGVhbl9maWxlX2VtYWlscyhAcG9zc19hZGRyKSk7CisJICAgIH0KIAl9CiAgICAgfSBlbHNlIHsKIAlteSAkZmlsZV9jbnQgPSBAZmlsZXM7CiAJbXkgJGxhc3RmaWxlOwotCW9wZW4oUEFUQ0gsICI8JGZpbGUiKSBvciBkaWUgIiRQOiBDYW4ndCBvcGVuICR7ZmlsZX1cbiI7Ci0Jd2hpbGUgKDxQQVRDSD4pIHsKKworCW9wZW4obXkgJHBhdGNoLCAnPCcsICRmaWxlKQorCSAgICBvciBkaWUgIiRQOiBDYW4ndCBvcGVuICRmaWxlOiAkIVxuIjsKKwl3aGlsZSAoPCRwYXRjaD4pIHsKIAkgICAgbXkgJHBhdGNoX2xpbmUgPSAkXzsKIAkgICAgaWYgKG0vXlwrXCtcK1xzKyhcUyspLykgewogCQlteSAkZmlsZW5hbWUgPSAkMTsKQEAgLTI3Niw3ICszMDYsOCBAQAogCQl9CiAJICAgIH0KIAl9Ci0JY2xvc2UoUEFUQ0gpOworCWNsb3NlKCRwYXRjaCk7CisKIAlpZiAoJGZpbGVfY250ID09IEBmaWxlcykgewogCSAgICB3YXJuICIkUDogZmlsZSAnJHtmaWxlfScgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSBwYXRjaC4gICIKIAkJLiAiQWRkIC1mIHRvIG9wdGlvbnM/XG4iOwpAQCAtMjg1LDYgKzMxNiw4IEBACiAgICAgfQogfQogCitAZmlsZV9lbWFpbHMgPSB1bmlxKEBmaWxlX2VtYWlscyk7CisKIG15IEBlbWFpbF90byA9ICgpOwogbXkgQGxpc3RfdG8gPSAoKTsKIG15IEBzY20gPSAoKTsKQEAgLTMxNCw2ICszNDcsNyBAQAogCQlpZiAoJHR5cGUgZXEgJ1gnKSB7CiAJCSAgICBpZiAoZmlsZV9tYXRjaF9wYXR0ZXJuKCRmaWxlLCAkdmFsdWUpKSB7CiAJCQkkZXhjbHVkZSA9IDE7CisJCQlsYXN0OwogCQkgICAgfQogCQl9CiAJICAgIH0KQEAgLTM0MCwxMiArMzc0LDI4IEBACiAJICAgIH0KIAl9CiAKLQkkdHZpICs9ICgkZW5kIC0gJHN0YXJ0KTsKLQorCSR0dmkgPSAkZW5kICsgMTsKICAgICB9CiAKICAgICBmb3JlYWNoIG15ICRsaW5lIChzb3J0IHskaGFzaHskYn0gPD0+ICRoYXNoeyRhfX0ga2V5cyAlaGFzaCkgewogCWFkZF9jYXRlZ29yaWVzKCRsaW5lKTsKKwkgICAgaWYgKCRzZWN0aW9ucykgeworCQlteSAkaTsKKwkJbXkgJHN0YXJ0ID0gZmluZF9zdGFydGluZ19pbmRleCgkbGluZSk7CisJCW15ICRlbmQgPSBmaW5kX2VuZGluZ19pbmRleCgkbGluZSk7CisJCWZvciAoJGkgPSAkc3RhcnQ7ICRpIDwgJGVuZDsgJGkrKykgeworCQkgICAgbXkgJGxpbmUgPSAkdHlwZXZhbHVlWyRpXTsKKwkJICAgIGlmICgkbGluZSA9fiAvXltGWF06LykgewkJIyNSZXN0b3JlIGZpbGUgcGF0dGVybnMKKwkJCSRsaW5lID1+IHMvKFteXFxdKVwuKFteXCpdKS8kMVw/JDIvZzsKKwkJCSRsaW5lID1+IHMvKFteXFxdKVwuJC8kMVw/L2c7CSMjQ29udmVydCAuIGJhY2sgdG8gPworCQkJJGxpbmUgPX4gcy9cXFwuL1wuL2c7ICAgICAgIAkjI0NvbnZlcnQgXC4gdG8gLgorCQkJJGxpbmUgPX4gcy9cLlwqL1wqL2c7ICAgICAgIAkjI0NvbnZlcnQgLiogdG8gKgorCQkgICAgfQorCQkgICAgJGxpbmUgPX4gcy9eKFtBLVpdKTovJDE6XHQvZzsKKwkJICAgIHByaW50KCIkbGluZVxuIik7CisJCX0KKwkJcHJpbnQoIlxuIik7CisJICAgIH0KICAgICB9CiAKICAgICBpZiAoJGVtYWlsICYmICRlbWFpbF9naXQpIHsKQEAgLTM3Nyw2ICs0MjcsMTQgQEAKIAkgICAgfQogCX0KICAgICB9CisKKyAgICBmb3JlYWNoIG15ICRlbWFpbCAoQGZpbGVfZW1haWxzKSB7CisJbXkgKCRuYW1lLCAkYWRkcmVzcykgPSBwYXJzZV9lbWFpbCgkZW1haWwpOworCisJbXkgJHRtcF9lbWFpbCA9IGZvcm1hdF9lbWFpbCgkbmFtZSwgJGFkZHJlc3MsICRlbWFpbF91c2VuYW1lKTsKKwlwdXNoX2VtYWlsX2FkZHJlc3MoJHRtcF9lbWFpbCwgJycpOworCWFkZF9yb2xlKCR0bXBfZW1haWwsICdpbiBmaWxlJyk7CisgICAgfQogfQogCiBpZiAoJGVtYWlsIHx8ICRlbWFpbF9saXN0KSB7CkBAIC00NTMsNiArNTExLDcgQEAKICAgICAtLXJlbW92ZS1kdXBsaWNhdGVzID0+IG1pbmltaXplIGR1cGxpY2F0ZSBlbWFpbCBuYW1lcy9hZGRyZXNzZXMKICAgICAtLXJvbGVzID0+IHNob3cgcm9sZXMgKHN0YXR1czpzdWJzeXN0ZW0sIGdpdC1zaWduZXIsIGxpc3QsIGV0Yy4uLikKICAgICAtLXJvbGVzdGF0cyA9PiBzaG93IHJvbGVzIGFuZCBzdGF0aXN0aWNzIChjb21taXRzL3RvdGFsX2NvbW1pdHMsICUpCisgICAgLS1maWxlLWVtYWlscyA9PiBhZGQgZW1haWwgYWRkcmVzc2VzIGZvdW5kIGluIC1mIGZpbGUgKGRlZmF1bHQ6IDAgKG9mZikpCiAgIC0tc2NtID0+IHByaW50IFNDTSB0cmVlKHMpIGlmIGFueQogICAtLXN0YXR1cyA9PiBwcmludCBzdGF0dXMgaWYgYW55CiAgIC0tc3Vic3lzdGVtID0+IHByaW50IHN1YnN5c3RlbSBuYW1lIGlmIGFueQpAQCAtNDY2LDYgKzUyNSw3IEBACiBPdGhlciBvcHRpb25zOgogICAtLXBhdHRlcm4tZGVwdGggPT4gTnVtYmVyIG9mIHBhdHRlcm4gZGlyZWN0b3J5IHRyYXZlcnNhbHMgKGRlZmF1bHQ6IDAgKGFsbCkpCiAgIC0ta2V5d29yZHMgPT4gc2NhbiBwYXRjaCBmb3Iga2V5d29yZHMgKGRlZmF1bHQ6IDEgKG9uKSkKKyAgLS1zZWN0aW9ucyA9PiBwcmludCB0aGUgZW50aXJlIHN1YnN5c3RlbSBzZWN0aW9ucyB3aXRoIHBhdHRlcm4gbWF0Y2hlcwogICAtLXZlcnNpb24gPT4gc2hvdyB2ZXJzaW9uCiAgIC0taGVscCA9PiBzaG93IHRoaXMgaGVscCBpbmZvcm1hdGlvbgogCkBAIC01NDUsNyArNjA1LDcgQEAKICAgICAkbmFtZSA9fiBzL15cInxcIiQvL2c7CiAgICAgJGFkZHJlc3MgPX4gcy9eXHMrfFxzKyQvL2c7CiAKLSAgICBpZiAoJG5hbWUgPX4gL1teYS16MC05IFwuXC1dL2kpIHsgICAgIyNoYXMgIm11c3QgcXVvdGUiIGNoYXJzCisgICAgaWYgKCRuYW1lID1+IC9bXlx3IFwtXS9pKSB7ICAJICMjaGFzICJtdXN0IHF1b3RlIiBjaGFycwogCSRuYW1lID1+IHMvKD88IVxcKSIvXFwiL2c7ICAgICAgICMjZXNjYXBlIHF1b3RlcwogCSRuYW1lID0gIlwiJG5hbWVcIiI7CiAgICAgfQpAQCAtNTYyLDcgKzYyMiw3IEBACiAgICAgJG5hbWUgPX4gcy9eXCJ8XCIkLy9nOwogICAgICRhZGRyZXNzID1+IHMvXlxzK3xccyskLy9nOwogCi0gICAgaWYgKCRuYW1lID1+IC9bXmEtejAtOSBcLlwtXS9pKSB7ICAgICMjaGFzICJtdXN0IHF1b3RlIiBjaGFycworICAgIGlmICgkbmFtZSA9fiAvW15cdyBcLV0vaSkgeyAgICAgICAgICAjI2hhcyAibXVzdCBxdW90ZSIgY2hhcnMKIAkkbmFtZSA9fiBzLyg/PCFcXCkiL1xcIi9nOyAgICAgICAjI2VzY2FwZSBxdW90ZXMKIAkkbmFtZSA9ICJcIiRuYW1lXCIiOwogICAgIH0KQEAgLTgxMSw3ICs4NzEsOSBAQAogICAgIGZvcmVhY2ggbXkgJGVudHJ5IChAZW1haWxfdG8pIHsKIAlpZiAoJGVtYWlsX3JlbW92ZV9kdXBsaWNhdGVzKSB7CiAJICAgIG15ICgkZW50cnlfbmFtZSwgJGVudHJ5X2FkZHJlc3MpID0gcGFyc2VfZW1haWwoJGVudHJ5LT5bMF0pOwotCSAgICBpZiAoJG5hbWUgZXEgJGVudHJ5X25hbWUgfHwgJGFkZHJlc3MgZXEgJGVudHJ5X2FkZHJlc3MpIHsKKwkgICAgaWYgKCgkbmFtZSBlcSAkZW50cnlfbmFtZSB8fCAkYWRkcmVzcyBlcSAkZW50cnlfYWRkcmVzcykKKwkJJiYgKCRyb2xlIGVxICIiIHx8ICEoJGVudHJ5LT5bMV0gPX4gbS8kcm9sZS8pKQorCSAgICApIHsKIAkJaWYgKCRlbnRyeS0+WzFdIGVxICIiKSB7CiAJCSAgICAkZW50cnktPlsxXSA9ICIkcm9sZSI7CiAJCX0gZWxzZSB7CkBAIC04MTksNyArODgxLDkgQEAKIAkJfQogCSAgICB9CiAJfSBlbHNlIHsKLQkgICAgaWYgKCRlbWFpbCBlcSAkZW50cnktPlswXSkgeworCSAgICBpZiAoJGVtYWlsIGVxICRlbnRyeS0+WzBdCisJCSYmICgkcm9sZSBlcSAiIiB8fCAhKCRlbnRyeS0+WzFdID1+IG0vJHJvbGUvKSkKKwkgICAgKSB7CiAJCWlmICgkZW50cnktPlsxXSBlcSAiIikgewogCQkgICAgJGVudHJ5LT5bMV0gPSAiJHJvbGUiOwogCQl9IGVsc2UgewpAQCAtMTA5OSw2ICsxMTYzLDUxIEBACiAgICAgcmV0dXJuIEBwYXJtczsKIH0KIAorc3ViIGNsZWFuX2ZpbGVfZW1haWxzIHsKKyAgICBteSAoQGZpbGVfZW1haWxzKSA9IEBfOworICAgIG15IEBmbXRfZW1haWxzID0gKCk7CisKKyAgICBmb3JlYWNoIG15ICRlbWFpbCAoQGZpbGVfZW1haWxzKSB7CisJJGVtYWlsID1+IHMvW1woXDxce117MCwxfShbQS1aYS16MC05X1wuXCstXStcQFtBLVphLXowLTlcLi1dKylbXClcPlx9XXswLDF9L1w8JDFcPi9nOworCW15ICgkbmFtZSwgJGFkZHJlc3MpID0gcGFyc2VfZW1haWwoJGVtYWlsKTsKKwlpZiAoJG5hbWUgZXEgJyJbLFwuXSInKSB7CisJICAgICRuYW1lID0gIiI7CisJfQorCisJbXkgQG53ID0gc3BsaXQoL1teQS1aYS16w4Atw79cJ1wsXC5cKy1dLywgJG5hbWUpOworCWlmIChAbncgPiAyKSB7CisJICAgIG15ICRmaXJzdCA9ICRud1tAbncgLSAzXTsKKwkgICAgbXkgJG1pZGRsZSA9ICRud1tAbncgLSAyXTsKKwkgICAgbXkgJGxhc3QgPSAkbndbQG53IC0gMV07CisKKwkgICAgaWYgKCgobGVuZ3RoKCRmaXJzdCkgPT0gMSAmJiAkZmlyc3QgPX4gbS9bQS1aYS16XS8pIHx8CisJCSAobGVuZ3RoKCRmaXJzdCkgPT0gMiAmJiBzdWJzdHIoJGZpcnN0LCAtMSkgZXEgIi4iKSkgfHwKKwkJKGxlbmd0aCgkbWlkZGxlKSA9PSAxIHx8CisJCSAobGVuZ3RoKCRtaWRkbGUpID09IDIgJiYgc3Vic3RyKCRtaWRkbGUsIC0xKSBlcSAiLiIpKSkgeworCQkkbmFtZSA9ICIkZmlyc3QgJG1pZGRsZSAkbGFzdCI7CisJICAgIH0gZWxzZSB7CisJCSRuYW1lID0gIiRtaWRkbGUgJGxhc3QiOworCSAgICB9CisJfQorCisJaWYgKHN1YnN0cigkbmFtZSwgLTEpID1+IC9bLFwuXS8pIHsKKwkgICAgJG5hbWUgPSBzdWJzdHIoJG5hbWUsIDAsIGxlbmd0aCgkbmFtZSkgLSAxKTsKKwl9IGVsc2lmIChzdWJzdHIoJG5hbWUsIC0yKSA9fiAvWyxcLl0iLykgeworCSAgICAkbmFtZSA9IHN1YnN0cigkbmFtZSwgMCwgbGVuZ3RoKCRuYW1lKSAtIDIpIC4gJyInOworCX0KKworCWlmIChzdWJzdHIoJG5hbWUsIDAsIDEpID1+IC9bLFwuXS8pIHsKKwkgICAgJG5hbWUgPSBzdWJzdHIoJG5hbWUsIDEsIGxlbmd0aCgkbmFtZSkgLSAxKTsKKwl9IGVsc2lmIChzdWJzdHIoJG5hbWUsIDAsIDIpID1+IC8iWyxcLl0vKSB7CisJICAgICRuYW1lID0gJyInIC4gc3Vic3RyKCRuYW1lLCAyLCBsZW5ndGgoJG5hbWUpIC0gMik7CisJfQorCisJbXkgJGZtdF9lbWFpbCA9IGZvcm1hdF9lbWFpbCgkbmFtZSwgJGFkZHJlc3MsICRlbWFpbF91c2VuYW1lKTsKKwlwdXNoKEBmbXRfZW1haWxzLCAkZm10X2VtYWlsKTsKKyAgICB9CisgICAgcmV0dXJuIEBmbXRfZW1haWxzOworfQorCiBzdWIgbWVyZ2VfZW1haWwgewogICAgIG15IEBsaW5lczsKICAgICBteSAlc2F3OwpAQCAtMTE4Myw3ICsxMjkyLDcgQEAKIAogIyAgIHZhbGlkOiByZXR1cm5zIHRydWUgaWYgdGhlIHBhcmFtZXRlciBpcyBhbiBSRkM4MjIgdmFsaWQgYWRkcmVzcwogIwotc3ViIHJmYzgyMl92YWxpZCAoJCkgeworc3ViIHJmYzgyMl92YWxpZCB7CiAgICAgbXkgJHMgPSByZmM4MjJfc3RyaXBfY29tbWVudHMoc2hpZnQpOwogCiAgICAgaWYgKCEkcmZjODIycmUpIHsKQEAgLTEyMDMsNyArMTMxMiw3IEBACiAjICAgICAgICAgICAgICBmcm9tIHN1Y2Nlc3Mgd2l0aCBubyBhZGRyZXNzZXMgZm91bmQsIGJlY2F1c2UgYW4gZW1wdHkgc3RyaW5nIGlzCiAjICAgICAgICAgICAgICBhIHZhbGlkIGxpc3QuCiAKLXN1YiByZmM4MjJfdmFsaWRsaXN0ICgkKSB7CitzdWIgcmZjODIyX3ZhbGlkbGlzdCB7CiAgICAgbXkgJHMgPSByZmM4MjJfc3RyaXBfY29tbWVudHMoc2hpZnQpOwogCiAgICAgaWYgKCEkcmZjODIycmUpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvdGltZXIuYyBiL3NvdW5kL2NvcmUvdGltZXIuYwppbmRleCA4ZjhiMTdhLi43Mzk0MzY1IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3RpbWVyLmMKKysrIGIvc291bmQvY29yZS90aW1lci5jCkBAIC0zOTMsNyArMzkzLDcgQEAKIAkgICAgZXZlbnQgPT0gU05EUlZfVElNRVJfRVZFTlRfQ09OVElOVUUpCiAJCXJlc29sdXRpb24gPSBzbmRfdGltZXJfcmVzb2x1dGlvbih0aSk7CiAJaWYgKHRpLT5jY2FsbGJhY2spCi0JCXRpLT5jY2FsbGJhY2sodGksIFNORFJWX1RJTUVSX0VWRU5UX1NUQVJULCAmdHN0YW1wLCByZXNvbHV0aW9uKTsKKwkJdGktPmNjYWxsYmFjayh0aSwgZXZlbnQsICZ0c3RhbXAsIHJlc29sdXRpb24pOwogCWlmICh0aS0+ZmxhZ3MgJiBTTkRSVl9USU1FUl9JRkxHX1NMQVZFKQogCQlyZXR1cm47CiAJdGltZXIgPSB0aS0+dGltZXI7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmMgYi9zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmMKaW5kZXggYjg2NWU0NS4uNTkxMzcxNyAxMDA2NDQKLS0tIGEvc291bmQvaXNhL29wdGk5eHgvbWlyby5jCisrKyBiL3NvdW5kL2lzYS9vcHRpOXh4L21pcm8uYwpAQCAtMTU1OCw3ICsxNTU4LDcgQEAKIAogCWVyciA9IHBucF9hY3RpdmF0ZV9kZXYoZGV2bWMpOwogCWlmIChlcnIgPCAwKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9FUlIgIk9QTCBzeW50ZyBwbnAgY29uZmlndXJlIGZhaWx1cmU6ICVkXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJNQyBwbnAgY29uZmlndXJlIGZhaWx1cmU6ICVkXG4iLAogCQkJCSAgICBlcnIpOwogCQlyZXR1cm4gZXJyOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMgYi9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jCmluZGV4IGE0YWY1M2IuLmJlY2Q5MGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMKKysrIGIvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYwpAQCAtMTQ0LDEyICsxNDQsOCBAQAogCiAJc3BpbmxvY2tfdCBsb2NrOwogCisJbG9uZyB3c3NfYmFzZTsKIAlpbnQgaXJxOwotCi0jaWZkZWYgQ09ORklHX1BOUAotCXN0cnVjdCBwbnBfZGV2ICpkZXY7Ci0Jc3RydWN0IHBucF9kZXYgKmRldm1wdTsKLSNlbmRpZgkvKiBDT05GSUdfUE5QICovCiB9OwogCiBzdGF0aWMgaW50IHNuZF9vcHRpOXh4X3BucF9pc19wcm9iZWQ7CkBAIC0xNTksMTIgKzE1NSwxNyBAQAogc3RhdGljIHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgc25kX29wdGk5eHhfcG5waWRzW10gPSB7CiAjaWZuZGVmIE9QVGk5M1gKIAkvKiBPUFRpIDgyQzkyNCAqLwotCXsgLmlkID0gIk9QVDA5MjQiLCAuZGV2cyA9IHsgeyAiT1BUMDAwMCIgfSwgeyAiT1BUMDAwMiIgfSB9LCAuZHJpdmVyX2RhdGEgPSAweDA5MjQgfSwKKwl7IC5pZCA9ICJPUFQwOTI0IiwKKwkgIC5kZXZzID0geyB7ICJPUFQwMDAwIiB9LCB7ICJPUFQwMDAyIiB9LCB7ICJPUFQwMDA1IiB9IH0sCisJICAuZHJpdmVyX2RhdGEgPSAweDA5MjQgfSwKIAkvKiBPUFRpIDgyQzkyNSAqLwotCXsgLmlkID0gIk9QVDA5MjUiLCAuZGV2cyA9IHsgeyAiT1BUOTI1MCIgfSwgeyAiT1BUMDAwMiIgfSB9LCAuZHJpdmVyX2RhdGEgPSAweDA5MjUgfSwKKwl7IC5pZCA9ICJPUFQwOTI1IiwKKwkgIC5kZXZzID0geyB7ICJPUFQ5MjUwIiB9LCB7ICJPUFQwMDAyIiB9LCB7ICJPUFQwMDA1IiB9IH0sCisJICAuZHJpdmVyX2RhdGEgPSAweDA5MjUgfSwKICNlbHNlCiAJLyogT1BUaSA4MkM5MzEvMyAqLwotCXsgLmlkID0gIk9QVDA5MzEiLCAuZGV2cyA9IHsgeyAiT1BUOTMxMCIgfSwgeyAiT1BUMDAwMiIgfSB9LCAuZHJpdmVyX2RhdGEgPSAweDA5MzEgfSwKKwl7IC5pZCA9ICJPUFQwOTMxIiwgLmRldnMgPSB7IHsgIk9QVDkzMTAiIH0sIHsgIk9QVDAwMDIiIH0gfSwKKwkgIC5kcml2ZXJfZGF0YSA9IDB4MDkzMSB9LAogI2VuZGlmCS8qIE9QVGk5M1ggKi8KIAl7IC5pZCA9ICIiIH0KIH07CkBAIC0yMDcsMjQgKzIwOCwzNCBAQAogCWNoaXAtPmhhcmR3YXJlID0gaGFyZHdhcmU7CiAJc3RyY3B5KGNoaXAtPm5hbWUsIHNuZF9vcHRpOXh4X25hbWVzW2hhcmR3YXJlXSk7CiAKLQljaGlwLT5tY19iYXNlX3NpemUgPSBvcHRpOXh4X21jX3NpemVbaGFyZHdhcmVdOyAgCi0KIAlzcGluX2xvY2tfaW5pdCgmY2hpcC0+bG9jayk7CiAKIAljaGlwLT5pcnEgPSAtMTsKIAorI2lmbmRlZiBPUFRpOTNYCisjaWZkZWYgQ09ORklHX1BOUAorCWlmIChpc2FwbnAgJiYgY2hpcC0+bWNfYmFzZSkKKwkJLyogUG5QIHJlc291cmNlIGdpdmVzIHRoZSBsZWFzdCAxMCBiaXRzICovCisJCWNoaXAtPm1jX2Jhc2UgfD0gMHhjMDA7CisjZW5kaWYJLyogQ09ORklHX1BOUCAqLworCWVsc2UgeworCQljaGlwLT5tY19iYXNlID0gMHhmOGM7CisJCWNoaXAtPm1jX2Jhc2Vfc2l6ZSA9IG9wdGk5eHhfbWNfc2l6ZVtoYXJkd2FyZV07CisJfQorI2Vsc2UKKwkJY2hpcC0+bWNfYmFzZV9zaXplID0gb3B0aTl4eF9tY19zaXplW2hhcmR3YXJlXTsKKyNlbmRpZgorCiAJc3dpdGNoIChoYXJkd2FyZSkgewogI2lmbmRlZiBPUFRpOTNYCiAJY2FzZSBPUFRpOVhYX0hXXzgyQzkyODoKIAljYXNlIE9QVGk5WFhfSFdfODJDOTI5OgotCQljaGlwLT5tY19iYXNlID0gMHhmOGM7CiAJCWNoaXAtPnBhc3N3b3JkID0gKGhhcmR3YXJlID09IE9QVGk5WFhfSFdfODJDOTI4KSA/IDB4ZTIgOiAweGUzOwogCQljaGlwLT5wd2RfcmVnID0gMzsKIAkJYnJlYWs7CiAKIAljYXNlIE9QVGk5WFhfSFdfODJDOTI0OgogCWNhc2UgT1BUaTlYWF9IV184MkM5MjU6Ci0JCWNoaXAtPm1jX2Jhc2UgPSAweGY4YzsKIAkJY2hpcC0+cGFzc3dvcmQgPSAweGU1OwogCQljaGlwLT5wd2RfcmVnID0gMzsKIAkJYnJlYWs7CkBAIC0yOTIsNyArMzAzLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldHZhbDsKIH0KLQkKKwogc3RhdGljIHZvaWQgc25kX29wdGk5eHhfd3JpdGUoc3RydWN0IHNuZF9vcHRpOXh4ICpjaGlwLCB1bnNpZ25lZCBjaGFyIHJlZywKIAkJCSAgICAgIHVuc2lnbmVkIGNoYXIgdmFsdWUpCiB7CkBAIC0zNDEsNyArMzUyLDcgQEAKIAogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfb3B0aTl4eF9jb25maWd1cmUoc3RydWN0IHNuZF9vcHRpOXh4ICpjaGlwLAotCQkJCQkgICBsb25nIHdzc19iYXNlLAorCQkJCQkgICBsb25nIHBvcnQsCiAJCQkJCSAgIGludCBpcnEsIGludCBkbWExLCBpbnQgZG1hMiwKIAkJCQkJICAgbG9uZyBtcHVfcG9ydCwgaW50IG1wdV9pcnEpCiB7CkBAIC0zNTQsMTYgKzM2NSwyMyBAQAogCXN3aXRjaCAoY2hpcC0+aGFyZHdhcmUpIHsKICNpZm5kZWYgT1BUaTkzWAogCWNhc2UgT1BUaTlYWF9IV184MkM5MjQ6CisJCS8qIG9wdGkgOTI5IG1vZGUgKD8pLCBPUEwzIGNsb2NrIG91dHB1dCwgYXVkaW8gZW5hYmxlICovCiAJCXNuZF9vcHRpOXh4X3dyaXRlX21hc2soY2hpcCwgT1BUaTlYWF9NQ19SRUcoNCksIDB4ZjAsIDB4ZmMpOworCQkvKiBlbmFibGUgd2F2ZSBhdWRpbyAqLwogCQlzbmRfb3B0aTl4eF93cml0ZV9tYXNrKGNoaXAsIE9QVGk5WFhfTUNfUkVHKDYpLCAweDAyLCAweDAyKTsKIAogCWNhc2UgT1BUaTlYWF9IV184MkM5MjU6CisJCS8qIGVuYWJsZSBXU1MgbW9kZSAqLwogCQlzbmRfb3B0aTl4eF93cml0ZV9tYXNrKGNoaXAsIE9QVGk5WFhfTUNfUkVHKDEpLCAweDgwLCAweDgwKTsKKwkJLyogT1BMMyBGTSBzeW50aGVzaXMgKi8KIAkJc25kX29wdGk5eHhfd3JpdGVfbWFzayhjaGlwLCBPUFRpOVhYX01DX1JFRygyKSwgMHgwMCwgMHgyMCk7CisJCS8qIGRpc2FibGUgU291bmQgQmxhc3RlciBJUlEgYW5kIERNQSAqLwogCQlzbmRfb3B0aTl4eF93cml0ZV9tYXNrKGNoaXAsIE9QVGk5WFhfTUNfUkVHKDMpLCAweGYwLCAweGZmKTsKICNpZmRlZiBDUzQyMzEKKwkJLyogY3M0MjMxLzQyNDggZml4IGVuYWJsZWQgKi8KIAkJc25kX29wdGk5eHhfd3JpdGVfbWFzayhjaGlwLCBPUFRpOVhYX01DX1JFRyg1KSwgMHgwMiwgMHgwMik7CiAjZWxzZQorCQkvKiBjczQyMzEvNDI0OCBmaXggZGlzYWJsZWQgKi8KIAkJc25kX29wdGk5eHhfd3JpdGVfbWFzayhjaGlwLCBPUFRpOVhYX01DX1JFRyg1KSwgMHgwMCwgMHgwMik7CiAjZW5kaWYJLyogQ1M0MjMxICovCiAJCWJyZWFrOwpAQCAtNDExLDIxICs0MjksMjYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc3dpdGNoICh3c3NfYmFzZSkgewotCWNhc2UgMHg1MzA6CisJLyogUG5QIHJlc291cmNlIHNheXMgaXQgZGVjb2RlcyBvbmx5IDEwIGJpdHMgb2YgYWRkcmVzcyAqLworCXN3aXRjaCAocG9ydCAmIDB4M2ZmKSB7CisJY2FzZSAweDEzMDoKKwkJY2hpcC0+d3NzX2Jhc2UgPSAweDUzMDsKIAkJd3NzX2Jhc2VfYml0cyA9IDB4MDA7CiAJCWJyZWFrOwotCWNhc2UgMHg2MDQ6CisJY2FzZSAweDIwNDoKKwkJY2hpcC0+d3NzX2Jhc2UgPSAweDYwNDsKIAkJd3NzX2Jhc2VfYml0cyA9IDB4MDM7CiAJCWJyZWFrOwotCWNhc2UgMHhlODA6CisJY2FzZSAweDI4MDoKKwkJY2hpcC0+d3NzX2Jhc2UgPSAweGU4MDsKIAkJd3NzX2Jhc2VfYml0cyA9IDB4MDE7CiAJCWJyZWFrOwotCWNhc2UgMHhmNDA6CisJY2FzZSAweDM0MDoKKwkJY2hpcC0+d3NzX2Jhc2UgPSAweGY0MDsKIAkJd3NzX2Jhc2VfYml0cyA9IDB4MDI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJXU1MgcG9ydCAweCVseCBub3QgdmFsaWRcbiIsIHdzc19iYXNlKTsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIldTUyBwb3J0IDB4JWx4IG5vdCB2YWxpZFxuIiwgcG9ydCk7CiAJCWdvdG8gX19za2lwX2Jhc2U7CiAJfQogCXNuZF9vcHRpOXh4X3dyaXRlX21hc2soY2hpcCwgT1BUaTlYWF9NQ19SRUcoMSksIHdzc19iYXNlX2JpdHMgPDwgNCwgMHgzMCk7CkBAIC00ODcsNyArNTEwLDcgQEAKICNlbmRpZgkvKiBDUzQyMzEgfHwgT1BUaTkzWCAqLwogCiAjaWZuZGVmIE9QVGk5M1gKLQkgb3V0YihpcnFfYml0cyA8PCAzIHwgZG1hX2JpdHMsIHdzc19iYXNlKTsKKwkgb3V0YihpcnFfYml0cyA8PCAzIHwgZG1hX2JpdHMsIGNoaXAtPndzc19iYXNlKTsKICNlbHNlIC8qIE9QVGk5M1ggKi8KIAlzbmRfb3B0aTl4eF93cml0ZShjaGlwLCBPUFRpOVhYX01DX1JFRygzKSwgKGlycV9iaXRzIDw8IDMgfCBkbWFfYml0cykpOwogI2VuZGlmIC8qIE9QVGk5M1ggKi8KQEAgLTcyOSwxNSArNzUyLDE1IEBACiB7CiAJc3RydWN0IHBucF9kZXYgKnBkZXY7CiAJaW50IGVycjsKKwlzdHJ1Y3QgcG5wX2RldiAqZGV2bXB1OworI2lmbmRlZiBPUFRpOTNYCisJc3RydWN0IHBucF9kZXYgKmRldm1jOworI2VuZGlmCiAKLQljaGlwLT5kZXYgPSBwbnBfcmVxdWVzdF9jYXJkX2RldmljZShjYXJkLCBwaWQtPmRldnNbMF0uaWQsIE5VTEwpOwotCWlmIChjaGlwLT5kZXYgPT0gTlVMTCkKKwlwZGV2ID0gcG5wX3JlcXVlc3RfY2FyZF9kZXZpY2UoY2FyZCwgcGlkLT5kZXZzWzBdLmlkLCBOVUxMKTsKKwlpZiAocGRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JY2hpcC0+ZGV2bXB1ID0gcG5wX3JlcXVlc3RfY2FyZF9kZXZpY2UoY2FyZCwgcGlkLT5kZXZzWzFdLmlkLCBOVUxMKTsKLQotCXBkZXYgPSBjaGlwLT5kZXY7Ci0KIAllcnIgPSBwbnBfYWN0aXZhdGVfZGV2KHBkZXYpOwogCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIkFVRElPIHBucCBjb25maWd1cmUgZmFpbHVyZTogJWRcbiIsIGVycik7CkBAIC03NTAsOSArNzczLDI0IEBACiAJY2hpcC0+bWNfaW5kaXJfaW5kZXggPSBwbnBfcG9ydF9zdGFydChwZGV2LCAzKSArIDI7CiAJY2hpcC0+bWNfaW5kaXJfc2l6ZSA9IHBucF9wb3J0X2xlbihwZGV2LCAzKSAtIDI7CiAjZWxzZQotCWlmIChwaWQtPmRyaXZlcl9kYXRhICE9IDB4MDkyNCkKLQkJcG9ydCA9IHBucF9wb3J0X3N0YXJ0KHBkZXYsIDEpOworCWRldm1jID0gcG5wX3JlcXVlc3RfY2FyZF9kZXZpY2UoY2FyZCwgcGlkLT5kZXZzWzJdLmlkLCBOVUxMKTsKKwlpZiAoZGV2bWMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWVyciA9IHBucF9hY3RpdmF0ZV9kZXYoZGV2bWMpOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIk1DIHBucCBjb25maWd1cmUgZmFpbHVyZTogJWRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJcG9ydCA9IHBucF9wb3J0X3N0YXJ0KHBkZXYsIDEpOwogCWZtX3BvcnQgPSBwbnBfcG9ydF9zdGFydChwZGV2LCAyKSArIDg7CisJLyoKKwkgKiBUaGUgTUMoMCkgaXMgbmV2ZXIgYWNjZXNzZWQgYW5kIGNhcmQgZG9lcyBub3QKKwkgKiBpbmNsdWRlIGl0IGluIHRoZSBQblAgcmVzb3VyY2UgcmFuZ2UuIE9QVEk5M3ggaW5jbHVkZSBpdC4KKwkgKi8KKwljaGlwLT5tY19iYXNlID0gcG5wX3BvcnRfc3RhcnQoZGV2bWMsIDApIC0gMTsKKwljaGlwLT5tY19iYXNlX3NpemUgPSBwbnBfcG9ydF9sZW4oZGV2bWMsIDApICsgMTsKICNlbmRpZgkvKiBPUFRpOTNYICovCiAJaXJxID0gcG5wX2lycShwZGV2LCAwKTsKIAlkbWExID0gcG5wX2RtYShwZGV2LCAwKTsKQEAgLTc2MCwxNiArNzk4LDE2IEBACiAJZG1hMiA9IHBucF9kbWEocGRldiwgMSk7CiAjZW5kaWYJLyogQ1M0MjMxIHx8IE9QVGk5M1ggKi8KIAotCXBkZXYgPSBjaGlwLT5kZXZtcHU7Ci0JaWYgKHBkZXYgJiYgbXB1X3BvcnQgPiAwKSB7Ci0JCWVyciA9IHBucF9hY3RpdmF0ZV9kZXYocGRldik7CisJZGV2bXB1ID0gcG5wX3JlcXVlc3RfY2FyZF9kZXZpY2UoY2FyZCwgcGlkLT5kZXZzWzFdLmlkLCBOVUxMKTsKKworCWlmIChkZXZtcHUgJiYgbXB1X3BvcnQgPiAwKSB7CisJCWVyciA9IHBucF9hY3RpdmF0ZV9kZXYoZGV2bXB1KTsKIAkJaWYgKGVyciA8IDApIHsKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgIkFVRElPIHBucCBjb25maWd1cmUgZmFpbHVyZVxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJNUFU0MDEgcG5wIGNvbmZpZ3VyZSBmYWlsdXJlXG4iKTsKIAkJCW1wdV9wb3J0ID0gLTE7Ci0JCQljaGlwLT5kZXZtcHUgPSBOVUxMOwogCQl9IGVsc2UgewotCQkJbXB1X3BvcnQgPSBwbnBfcG9ydF9zdGFydChwZGV2LCAwKTsKLQkJCW1wdV9pcnEgPSBwbnBfaXJxKHBkZXYsIDApOworCQkJbXB1X3BvcnQgPSBwbnBfcG9ydF9zdGFydChkZXZtcHUsIDApOworCQkJbXB1X2lycSA9IHBucF9pcnEoZGV2bXB1LCAwKTsKIAkJfQogCX0KIAlyZXR1cm4gcGlkLT5kcml2ZXJfZGF0YTsKQEAgLTgyNCw3ICs4NjIsNyBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JZXJyb3IgPSBzbmRfd3NzX2NyZWF0ZShjYXJkLCBwb3J0ICsgNCwgLTEsIGlycSwgZG1hMSwgeGRtYTIsCisJZXJyb3IgPSBzbmRfd3NzX2NyZWF0ZShjYXJkLCBjaGlwLT53c3NfYmFzZSArIDQsIC0xLCBpcnEsIGRtYTEsIHhkbWEyLAogI2lmZGVmIE9QVGk5M1gKIAkJCSAgICAgICBXU1NfSFdfT1BUSTkzWCwgV1NTX0hXU0hBUkVfSVJRLAogI2Vsc2UKQEAgLTg2NSwxMCArOTAzLDExIEBACiAJc3ByaW50ZihjYXJkLT5zaG9ydG5hbWUsICJPUFRpICVzIiwgY2FyZC0+ZHJpdmVyKTsKICNpZiBkZWZpbmVkKENTNDIzMSkgfHwgZGVmaW5lZChPUFRpOTNYKQogCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcywgJXMgYXQgMHglbHgsIGlycSAlZCwgZG1hICVkJiVkIiwKLQkJY2FyZC0+c2hvcnRuYW1lLCBwY20tPm5hbWUsIHBvcnQgKyA0LCBpcnEsIGRtYTEsIHhkbWEyKTsKKwkJY2FyZC0+c2hvcnRuYW1lLCBwY20tPm5hbWUsCisJCWNoaXAtPndzc19iYXNlICsgNCwgaXJxLCBkbWExLCB4ZG1hMik7CiAjZWxzZQogCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcywgJXMgYXQgMHglbHgsIGlycSAlZCwgZG1hICVkIiwKLQkJY2FyZC0+c2hvcnRuYW1lLCBwY20tPm5hbWUsIHBvcnQgKyA0LCBpcnEsIGRtYTEpOworCQljYXJkLT5zaG9ydG5hbWUsIHBjbS0+bmFtZSwgY2hpcC0+d3NzX2Jhc2UgKyA0LCBpcnEsIGRtYTEpOwogI2VuZGlmCS8qIENTNDIzMSB8fCBPUFRpOTNYICovCiAKIAlpZiAobXB1X3BvcnQgPD0gMCB8fCBtcHVfcG9ydCA9PSBTTkRSVl9BVVRPX1BPUlQpCkBAIC0xMDYyLDkgKzExMDEsNiBAQAogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyb3I7CiAJfQotCWlmIChodyA8PSBPUFRpOVhYX0hXXzgyQzkzMCkKLQkJY2hpcC0+bWNfYmFzZSAtPSAweDgwOwotCiAJZXJyb3IgPSBzbmRfb3B0aTl4eF9yZWFkX2NoZWNrKGNoaXApOwogCWlmIChlcnJvcikgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJPUFRJIGNoaXAgbm90IGZvdW5kXG4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9qYXp6MTYuYyBiL3NvdW5kL2lzYS9zYi9qYXp6MTYuYwppbmRleCA4ZDIxYTNmLi44Y2NiY2RkIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2IvamF6ejE2LmMKKysrIGIvc291bmQvaXNhL3NiL2phenoxNi5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8bGludXgvaXNhLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2NvcHJvYy5oIGIvc291bmQvb3NzL2NvcHJvYy5oCmluZGV4IDczMDYzNDYuLjdiZWMyMWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9jb3Byb2MuaAorKysgYi9zb3VuZC9vc3MvY29wcm9jLmgKQEAgLTQsNyArNCw3IEBACiAgKi8KIAogLyoKLSAqIENvcHJvY2Vzc29yIGFjY2VzcyB0eXBlcyAKKyAqIENvcHJvY2Vzc29yIGFjY2VzcyB0eXBlcwogICovCiAjZGVmaW5lIENPUFJfQ1VTVE9NCQkweDAwMDEJLyogQ3VzdG9tIGFwcGxpY2F0aW9ucyAqLwogI2RlZmluZSBDT1BSX01JREkJCTB4MDAwMgkvKiBNSURJIChNUFUtNDAxKSBlbXVsYXRpb24gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy92X21pZGkuaCBiL3NvdW5kL29zcy92X21pZGkuaAppbmRleCAxYjg2Y2I0Li4wOGUyMTg1IDEwMDY0NAotLS0gYS9zb3VuZC9vc3Mvdl9taWRpLmgKKysrIGIvc291bmQvb3NzL3ZfbWlkaS5oCkBAIC0yLDkgKzIsOSBAQAogCSAgIGludCBkZXY7CiAKIAkvKiBTdGF0ZSB2YXJpYWJsZXMgKi8KLSAJICAgaW50IG9wZW5lZDsKKwkgICBpbnQgb3BlbmVkOwogCSAgIHNwaW5sb2NrX3QgbG9jazsKLQkKKwogCS8qIE1JREkgZmllbGRzICovCiAJICAgaW50IG15X21pZGlkZXY7CiAJICAgaW50IHBhaXJfbWlkaWRldjsKQEAgLTEyLDQgKzEyLDMgQEAKIAkgICBpbnQgaW50cl9hY3RpdmU7CiAJICAgdm9pZCAoKm1pZGlfaW5wdXRfaW50cikgKGludCBkZXYsIHVuc2lnbmVkIGNoYXIgZGF0YSk7CiAJfSB2bWlkaV9kZXZjOwotCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL0tjb25maWcgYi9zb3VuZC9wY2kvaGRhL0tjb25maWcKaW5kZXggNTU2Y2ZmOS4uNTY3MzQ4YiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9LY29uZmlnCisrKyBiL3NvdW5kL3BjaS9oZGEvS2NvbmZpZwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAKIGNvbmZpZyBTTkRfSERBX0VMRAogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFNORF9IREFfQ09ERUNfSU5URUxIRE1JCisJZGVwZW5kcyBvbiBTTkRfSERBX0NPREVDX0lOVEVMSERNSSB8fCBTTkRfSERBX0NPREVDX05WSERNSQogCiBjb25maWcgU05EX0hEQV9DT0RFQ19DSVJSVVMKIAlib29sICJCdWlsZCBDaXJydXMgTG9naWMgY29kZWMgc3VwcG9ydCIKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvTWFrZWZpbGUgYi9zb3VuZC9wY2kvaGRhL01ha2VmaWxlCmluZGV4IDMxNWExYzQuLjI0YmMxOTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvTWFrZWZpbGUKKysrIGIvc291bmQvcGNpL2hkYS9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAKIHNuZC1oZGEtY29kZWMteSA6PSBoZGFfY29kZWMubwogc25kLWhkYS1jb2RlYy0kKENPTkZJR19TTkRfSERBX0dFTkVSSUMpICs9IGhkYV9nZW5lcmljLm8KIHNuZC1oZGEtY29kZWMtJChDT05GSUdfUFJPQ19GUykgKz0gaGRhX3Byb2MubwotIyBzbmQtaGRhLWNvZGVjLSQoQ09ORklHX1NORF9IREFfRUxEKSArPSBoZGFfZWxkLm8KK3NuZC1oZGEtY29kZWMtJChDT05GSUdfU05EX0hEQV9FTEQpICs9IGhkYV9lbGQubwogc25kLWhkYS1jb2RlYy0kKENPTkZJR19TTkRfSERBX0hXREVQKSArPSBoZGFfaHdkZXAubwogc25kLWhkYS1jb2RlYy0kKENPTkZJR19TTkRfSERBX0lOUFVUX0JFRVApICs9IGhkYV9iZWVwLm8KIApAQCAtMTgsNyArMTgsNyBAQAogc25kLWhkYS1jb2RlYy1jb25leGFudC1vYmpzIDo9CXBhdGNoX2NvbmV4YW50Lm8KIHNuZC1oZGEtY29kZWMtdmlhLW9ianMgOj0JcGF0Y2hfdmlhLm8KIHNuZC1oZGEtY29kZWMtbnZoZG1pLW9ianMgOj0JcGF0Y2hfbnZoZG1pLm8KLXNuZC1oZGEtY29kZWMtaW50ZWxoZG1pLW9ianMgOj0JcGF0Y2hfaW50ZWxoZG1pLm8gaGRhX2VsZC5vCitzbmQtaGRhLWNvZGVjLWludGVsaGRtaS1vYmpzIDo9CXBhdGNoX2ludGVsaGRtaS5vCiAKICMgY29tbW9uIGRyaXZlcgogb2JqLSQoQ09ORklHX1NORF9IREFfSU5URUwpIDo9IHNuZC1oZGEtY29kZWMubwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKaW5kZXggNzZkM2M0Yy4uNWJkN2NmNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCkBAIC05NzgsOCArOTc4LDkgQEAKICAqCiAgKiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgogICovCi1pbnQgLypfX2RldmluaXQqLyBzbmRfaGRhX2NvZGVjX25ldyhzdHJ1Y3QgaGRhX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgY29kZWNfYWRkciwKLQkJCQkgICAgc3RydWN0IGhkYV9jb2RlYyAqKmNvZGVjcCkKK2ludCAvKl9fZGV2aW5pdCovIHNuZF9oZGFfY29kZWNfbmV3KHN0cnVjdCBoZGFfYnVzICpidXMsCisJCQkJdW5zaWduZWQgaW50IGNvZGVjX2FkZHIsCisJCQkJc3RydWN0IGhkYV9jb2RlYyAqKmNvZGVjcCkKIHsKIAlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYzsKIAljaGFyIGNvbXBvbmVudFszMV07CkBAIC0xMTg2LDcgKzExODcsNyBAQAogICovCiAKIC8qIEZJWE1FOiBtb3JlIGJldHRlciBoYXNoIGtleT8gKi8KLSNkZWZpbmUgSERBX0hBU0hfS0VZKG5pZCxkaXIsaWR4KSAodTMyKSgobmlkKSArICgoaWR4KSA8PCAxNikgKyAoKGRpcikgPDwgMjQpKQorI2RlZmluZSBIREFfSEFTSF9LRVkobmlkLCBkaXIsIGlkeCkgKHUzMikoKG5pZCkgKyAoKGlkeCkgPDwgMTYpICsgKChkaXIpIDw8IDI0KSkKICNkZWZpbmUgSERBX0hBU0hfUElOQ0FQX0tFWShuaWQpICh1MzIpKChuaWQpICsgKDB4MDIgPDwgMjQpKQogI2RlZmluZSBIREFfSEFTSF9QQVJQQ01fS0VZKG5pZCkgKHUzMikoKG5pZCkgKyAoMHgwMyA8PCAyNCkpCiAjZGVmaW5lIEhEQV9IQVNIX1BBUlNUUl9LRVkobmlkKSAodTMyKSgobmlkKSArICgweDA0IDw8IDI0KSkKQEAgLTEzNTYsNyArMTM1Nyw4IEBACiAJaWYgKCFjb2RlYy0+bm9fdHJpZ2dlcl9zZW5zZSkgewogCQlwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOwogCQlpZiAocGluY2FwICYgQUNfUElOQ0FQX1RSSUdfUkVRKSAvKiBuZWVkIHRyaWdnZXI/ICovCi0JCQlzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9TRVRfUElOX1NFTlNFLCAwKTsKKwkJCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAorCQkJCQlBQ19WRVJCX1NFVF9QSU5fU0VOU0UsIDApOwogCX0KIAlyZXR1cm4gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCiAJCQkJICBBQ19WRVJCX0dFVF9QSU5fU0VOU0UsIDApOwpAQCAtMTM3Miw4ICsxMzc0LDggQEAKICAqLwogaW50IHNuZF9oZGFfamFja19kZXRlY3Qoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCiB7Ci0gICAgICAgIHUzMiBzZW5zZSA9IHNuZF9oZGFfcGluX3NlbnNlKGNvZGVjLCBuaWQpOwotICAgICAgICByZXR1cm4gISEoc2Vuc2UgJiBBQ19QSU5TRU5TRV9QUkVTRU5DRSk7CisJdTMyIHNlbnNlID0gc25kX2hkYV9waW5fc2Vuc2UoY29kZWMsIG5pZCk7CisJcmV0dXJuICEhKHNlbnNlICYgQUNfUElOU0VOU0VfUFJFU0VOQ0UpOwogfQogRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9qYWNrX2RldGVjdCk7CiAKQEAgLTE5NTIsNyArMTk1NCw3IEBACiAJZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLCAwLCBrY3RsKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQkKKwogCWZvciAocyA9IHNsYXZlczsgKnM7IHMrKykgewogCQlzdHJ1Y3Qgc25kX2tjb250cm9sICpzY3RsOwogCQlpbnQgaSA9IDA7CkBAIC0yNDM5LDI3ICsyNDQxLDI3IEBACiAJewogCQkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQsCiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9IFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiIixQTEFZQkFDSyxDT05fTUFTSyksCisJCS5uYW1lID0gU05EUlZfQ1RMX05BTUVfSUVDOTU4KCIiLCBQTEFZQkFDSywgQ09OX01BU0spLAogCQkuaW5mbyA9IHNuZF9oZGFfc3BkaWZfbWFza19pbmZvLAogCQkuZ2V0ID0gc25kX2hkYV9zcGRpZl9jbWFza19nZXQsCiAJfSwKIAl7CiAJCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRCwKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gU05EUlZfQ1RMX05BTUVfSUVDOTU4KCIiLFBMQVlCQUNLLFBST19NQVNLKSwKKwkJLm5hbWUgPSBTTkRSVl9DVExfTkFNRV9JRUM5NTgoIiIsIFBMQVlCQUNLLCBQUk9fTUFTSyksCiAJCS5pbmZvID0gc25kX2hkYV9zcGRpZl9tYXNrX2luZm8sCiAJCS5nZXQgPSBzbmRfaGRhX3NwZGlmX3BtYXNrX2dldCwKIAl9LAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gU05EUlZfQ1RMX05BTUVfSUVDOTU4KCIiLFBMQVlCQUNLLERFRkFVTFQpLAorCQkubmFtZSA9IFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiIiwgUExBWUJBQ0ssIERFRkFVTFQpLAogCQkuaW5mbyA9IHNuZF9oZGFfc3BkaWZfbWFza19pbmZvLAogCQkuZ2V0ID0gc25kX2hkYV9zcGRpZl9kZWZhdWx0X2dldCwKIAkJLnB1dCA9IHNuZF9oZGFfc3BkaWZfZGVmYXVsdF9wdXQsCiAJfSwKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9IFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiIixQTEFZQkFDSyxTV0lUQ0gpLAorCQkubmFtZSA9IFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiIiwgUExBWUJBQ0ssIFNXSVRDSCksCiAJCS5pbmZvID0gc25kX2hkYV9zcGRpZl9vdXRfc3dpdGNoX2luZm8sCiAJCS5nZXQgPSBzbmRfaGRhX3NwZGlmX291dF9zd2l0Y2hfZ2V0LAogCQkucHV0ID0gc25kX2hkYV9zcGRpZl9vdXRfc3dpdGNoX3B1dCwKQEAgLTI2MTAsNyArMjYxMiw3IEBACiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgZGlnX2luX2N0bHNbXSA9IHsKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9IFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiIixDQVBUVVJFLFNXSVRDSCksCisJCS5uYW1lID0gU05EUlZfQ1RMX05BTUVfSUVDOTU4KCIiLCBDQVBUVVJFLCBTV0lUQ0gpLAogCQkuaW5mbyA9IHNuZF9oZGFfc3BkaWZfaW5fc3dpdGNoX2luZm8sCiAJCS5nZXQgPSBzbmRfaGRhX3NwZGlmX2luX3N3aXRjaF9nZXQsCiAJCS5wdXQgPSBzbmRfaGRhX3NwZGlmX2luX3N3aXRjaF9wdXQsCkBAIC0yNjE4LDcgKzI2MjAsNyBAQAogCXsKIAkJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFELAogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSBTTkRSVl9DVExfTkFNRV9JRUM5NTgoIiIsQ0FQVFVSRSxERUZBVUxUKSwKKwkJLm5hbWUgPSBTTkRSVl9DVExfTkFNRV9JRUM5NTgoIiIsIENBUFRVUkUsIERFRkFVTFQpLAogCQkuaW5mbyA9IHNuZF9oZGFfc3BkaWZfbWFza19pbmZvLAogCQkuZ2V0ID0gc25kX2hkYV9zcGRpZl9pbl9zdGF0dXNfZ2V0LAogCX0sCkBAIC0yODgzLDcgKzI4ODUsNyBAQAogCQlpbnQgZXJyID0gc25kX2hkYV9jb2RlY19idWlsZF9jb250cm9scyhjb2RlYyk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImhkYV9jb2RlYzogY2Fubm90IGJ1aWxkIGNvbnRyb2xzIgotCQkJICAgICAgICJmb3IgIyVkIChlcnJvciAlZClcbiIsIGNvZGVjLT5hZGRyLCBlcnIpOyAKKwkJCSAgICAgICAiZm9yICMlZCAoZXJyb3IgJWQpXG4iLCBjb2RlYy0+YWRkciwgZXJyKTsKIAkJCWVyciA9IHNuZF9oZGFfY29kZWNfcmVzZXQoY29kZWMpOwogCQkJaWYgKGVyciA8IDApIHsKIAkJCQlwcmludGsoS0VSTl9FUlIKQEAgLTI5NzksOCArMjk4MSwxMiBAQAogCXZhbCB8PSBjaGFubmVscyAtIDE7CiAKIAlzd2l0Y2ggKHNuZF9wY21fZm9ybWF0X3dpZHRoKGZvcm1hdCkpIHsKLQljYXNlIDg6ICB2YWwgfD0gMHgwMDsgYnJlYWs7Ci0JY2FzZSAxNjogdmFsIHw9IDB4MTA7IGJyZWFrOworCWNhc2UgODoKKwkJdmFsIHw9IDB4MDA7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCXZhbCB8PSAweDEwOworCQlicmVhazsKIAljYXNlIDIwOgogCWNhc2UgMjQ6CiAJY2FzZSAzMjoKQEAgLTMyOTgsNyArMzMwNCw4IEBACiAJCWlmICghdGVzdF9hbmRfc2V0X2JpdChhdWRpb19pZHhbdHlwZV1baV0sIGJ1cy0+cGNtX2Rldl9iaXRzKSkKIAkJCXJldHVybiBhdWRpb19pZHhbdHlwZV1baV07CiAKLQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiVG9vIG1hbnkgJXMgZGV2aWNlc1xuIiwgc25kX2hkYV9wY21fdHlwZV9uYW1lW3R5cGVdKTsKKwlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiVG9vIG1hbnkgJXMgZGV2aWNlc1xuIiwKKwkJc25kX2hkYV9wY21fdHlwZV9uYW1lW3R5cGVdKTsKIAlyZXR1cm4gLUVBR0FJTjsKIH0KIApAQCAtMzMzNiw3ICszMzQzLDcgQEAKIAkJZXJyID0gY29kZWMtPnBhdGNoX29wcy5idWlsZF9wY21zKGNvZGVjKTsKIAkJaWYgKGVyciA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiaGRhX2NvZGVjOiBjYW5ub3QgYnVpbGQgUENNcyIKLQkJCSAgICAgICAiZm9yICMlZCAoZXJyb3IgJWQpXG4iLCBjb2RlYy0+YWRkciwgZXJyKTsgCisJCQkgICAgICAgImZvciAjJWQgKGVycm9yICVkKVxuIiwgY29kZWMtPmFkZHIsIGVycik7CiAJCQllcnIgPSBzbmRfaGRhX2NvZGVjX3Jlc2V0KGNvZGVjKTsKIAkJCWlmIChlcnIgPCAwKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSCkBAIC0zNDY2LDggKzM0NzMsOCBAQAogCiAvKioKICAqIHNuZF9oZGFfY2hlY2tfYm9hcmRfY29kZWNfc2lkX2NvbmZpZyAtIGNvbXBhcmUgdGhlIGN1cnJlbnQgY29kZWMKLQkJCQkgICAgICAgICAgc3Vic3lzdGVtIElEIHdpdGggdGhlCi0JCQkJCSAgY29uZmlnIHRhYmxlCisJCQkJCXN1YnN5c3RlbSBJRCB3aXRoIHRoZQorCQkJCQljb25maWcgdGFibGUKIAogCSAgIFRoaXMgaXMgaW1wb3J0YW50IGZvciBHYXRld2F5IG5vdGVib29rcyB3aXRoIFNCNDUwIEhEQSBBdWRpbwogCSAgIHdoZXJlIHRoZSB2ZW5kb3IgSUQgb2YgdGhlIFBDSSBkZXZpY2UgaXM6CkBAIC0zNjA3LDcgKzM2MTQsNyBAQAogICoKICAqIEluY3JlbWVudCB0aGUgcG93ZXItdXAgY291bnRlciBhbmQgcG93ZXIgdXAgdGhlIGhhcmR3YXJlIHJlYWxseSB3aGVuCiAgKiBub3QgdHVybmVkIG9uIHlldC4KLSAqLyAKKyAqLwogdm9pZCBzbmRfaGRhX3Bvd2VyX3VwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBoZGFfYnVzICpidXMgPSBjb2RlYy0+YnVzOwpAQCAtMzYzNiw3ICszNjQzLDcgQEAKICAqCiAgKiBEZWNyZW1lbnQgdGhlIHBvd2VyLXVwIGNvdW50ZXIgYW5kIHNjaGVkdWxlcyB0aGUgcG93ZXItb2ZmIHdvcmsgaWYKICAqIHRoZSBjb3VudGVyIHJlYXJjaGVzIHRvIHplcm8uCi0gKi8gCisgKi8KIHZvaWQgc25kX2hkYV9wb3dlcl9kb3duKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCS0tY29kZWMtPnBvd2VyX2NvdW50OwpAQCAtMzY2Miw3ICszNjY5LDcgQEAKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlIHNldCBvciBjYWxsZWQgZnJvbSB0aGUgY2hlY2tfcG93ZXJfc3RhdHVzCiAgKiBwYXRjaCBvcHMuCi0gKi8gCisgKi8KIGludCBzbmRfaGRhX2NoZWNrX2FtcF9saXN0X3Bvd2VyKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCSBzdHJ1Y3QgaGRhX2xvb3BiYWNrX2NoZWNrICpjaGVjaywKIAkJCQkgaGRhX25pZF90IG5pZCkKQEAgLTM4MzAsNyArMzgzNyw3IEBACiB7CiAJLyogdHVybiBvZmYgU1BESUYgb25jZTsgb3RoZXJ3aXNlIHRoZSBJRUM5NTggYml0cyB3b24ndCBiZSB1cGRhdGVkICovCiAJaWYgKGNvZGVjLT5zcGRpZl9zdGF0dXNfcmVzZXQgJiYgKGNvZGVjLT5zcGRpZl9jdGxzICYgQUNfRElHMV9FTkFCTEUpKQotCQlzZXRfZGlnX291dF9jb252ZXJ0KGNvZGVjLCBuaWQsIAorCQlzZXRfZGlnX291dF9jb252ZXJ0KGNvZGVjLCBuaWQsCiAJCQkJICAgIGNvZGVjLT5zcGRpZl9jdGxzICYgfkFDX0RJRzFfRU5BQkxFICYgMHhmZiwKIAkJCQkgICAgLTEpOwogCXNuZF9oZGFfY29kZWNfc2V0dXBfc3RyZWFtKGNvZGVjLCBuaWQsIHN0cmVhbV90YWcsIDAsIGZvcm1hdCk7CkBAIC00MDg5LDEzICs0MDk2LDEzIEBACiAvKgogICogU29ydCBhbiBhc3NvY2lhdGVkIGdyb3VwIG9mIHBpbnMgYWNjb3JkaW5nIHRvIHRoZWlyIHNlcXVlbmNlIG51bWJlcnMuCiAgKi8KLXN0YXRpYyB2b2lkIHNvcnRfcGluc19ieV9zZXF1ZW5jZShoZGFfbmlkX3QgKiBwaW5zLCBzaG9ydCAqIHNlcXVlbmNlcywKK3N0YXRpYyB2b2lkIHNvcnRfcGluc19ieV9zZXF1ZW5jZShoZGFfbmlkX3QgKnBpbnMsIHNob3J0ICpzZXF1ZW5jZXMsCiAJCQkJICBpbnQgbnVtX3BpbnMpCiB7CiAJaW50IGksIGo7CiAJc2hvcnQgc2VxOwogCWhkYV9uaWRfdCBuaWQ7Ci0JCisKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3BpbnM7IGkrKykgewogCQlmb3IgKGogPSBpICsgMTsgaiA8IG51bV9waW5zOyBqKyspIHsKIAkJCWlmIChzZXF1ZW5jZXNbaV0gPiBzZXF1ZW5jZXNbal0pIHsKQEAgLTQxMjMsNyArNDEzMCw3IEBACiAgKiBpcyBkZXRlY3RlZCwgb25lIG9mIHNwZWFrZXIgb2YgSFAgcGlucyBpcyBhc3NpZ25lZCBhcyB0aGUgcHJpbWFyeQogICogb3V0cHV0LCBpLmUuIHRvIGxpbmVfb3V0X3BpbnNbMF0uICBTbywgbGluZV9vdXRzIGlzIGFsd2F5cyBwb3NpdGl2ZQogICogaWYgYW55IGFuYWxvZyBvdXRwdXQgZXhpc3RzLgotICogCisgKgogICogVGhlIGFuYWxvZyBpbnB1dCBwaW5zIGFyZSBhc3NpZ25lZCB0byBpbnB1dF9waW5zIGFycmF5LgogICogVGhlIGRpZ2l0YWwgaW5wdXQvb3V0cHV0IHBpbnMgYXJlIGFzc2lnbmVkIHRvIGRpZ19pbl9waW4gYW5kIGRpZ19vdXRfcGluLAogICogcmVzcGVjdGl2ZWx5LgpAQCAtNDE4Niw5ICs0MTkzLDkgQEAKIAkJY2FzZSBBQ19KQUNLX1NQRUFLRVI6CiAJCQlzZXEgPSBnZXRfZGVmY2ZnX3NlcXVlbmNlKGRlZl9jb25mKTsKIAkJCWFzc29jID0gZ2V0X2RlZmNmZ19hc3NvY2lhdGlvbihkZWZfY29uZik7Ci0JCQlpZiAoISBhc3NvYykKKwkJCWlmICghYXNzb2MpCiAJCQkJY29udGludWU7Ci0JCQlpZiAoISBhc3NvY19zcGVha2VyKQorCQkJaWYgKCFhc3NvY19zcGVha2VyKQogCQkJCWFzc29jX3NwZWFrZXIgPSBhc3NvYzsKIAkJCWVsc2UgaWYgKGFzc29jX3NwZWFrZXIgIT0gYXNzb2MpCiAJCQkJY29udGludWU7CkBAIC00Mjg2LDcgKzQyOTMsNyBAQAogCQkJICAgICAgY2ZnLT5zcGVha2VyX291dHMpOwogCXNvcnRfcGluc19ieV9zZXF1ZW5jZShjZmctPmhwX3BpbnMsIHNlcXVlbmNlc19ocCwKIAkJCSAgICAgIGNmZy0+aHBfb3V0cyk7Ci0JCisKIAkvKiBpZiB3ZSBoYXZlIG9ubHkgb25lIG1pYywgbWFrZSBpdCBBVVRPX1BJTl9NSUMgKi8KIAlpZiAoIWNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9NSUNdICYmCiAJICAgIGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9GUk9OVF9NSUNdKSB7CkBAIC00NDM2LDcgKzQ0NDMsNyBAQAogLyoqCiAgKiBzbmRfYXJyYXlfbmV3IC0gZ2V0IGEgbmV3IGVsZW1lbnQgZnJvbSB0aGUgZ2l2ZW4gYXJyYXkKICAqIEBhcnJheTogdGhlIGFycmF5IG9iamVjdAotICogCisgKgogICogR2V0IGEgbmV3IGVsZW1lbnQgZnJvbSB0aGUgZ2l2ZW4gYXJyYXkuICBJZiBpdCBleGNlZWRzIHRoZQogICogcHJlLWFsbG9jYXRlZCBhcnJheSBzaXplLCByZS1hbGxvY2F0ZSB0aGUgYXJyYXkuCiAgKgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfZWxkLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9lbGQuYwppbmRleCA0MjI4ZjJmLi5kY2QyMjQ0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9lbGQuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9lbGQuYwpAQCAtMzMxLDYgKzMzMSw3IEBACiAJcmV0dXJuIHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLCBBQ19WRVJCX0dFVF9IRE1JX0RJUF9TSVpFLAogCQkJCQkJIEFDX0RJUFNJWkVfRUxEX0JVRik7CiB9CitFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRtaV9nZXRfZWxkX3NpemUpOwogCiBpbnQgc25kX2hkbWlfZ2V0X2VsZChzdHJ1Y3QgaGRtaV9lbGQgKmVsZCwKIAkJICAgICBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKQEAgLTM2Niw2ICszNjcsNyBAQAogCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0xfSERBKHNuZF9oZG1pX2dldF9lbGQpOwogCiBzdGF0aWMgdm9pZCBoZG1pX3Nob3dfc2hvcnRfYXVkaW9fZGVzYyhzdHJ1Y3QgY2VhX3NhZCAqYSkKIHsKQEAgLTQwNCw2ICs0MDYsNyBAQAogCX0KIAlidWZbal0gPSAnXDAnOwkvKiBuZWNlc3Nhcnkgd2hlbiBqID09IDAgKi8KIH0KK0VYUE9SVF9TWU1CT0xfSERBKHNuZF9wcmludF9jaGFubmVsX2FsbG9jYXRpb24pOwogCiB2b2lkIHNuZF9oZG1pX3Nob3dfZWxkKHN0cnVjdCBoZG1pX2VsZCAqZSkKIHsKQEAgLTQyMiw2ICs0MjUsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBlLT5zYWRfY291bnQ7IGkrKykKIAkJaGRtaV9zaG93X3Nob3J0X2F1ZGlvX2Rlc2MoZS0+c2FkICsgaSk7CiB9CitFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRtaV9zaG93X2VsZCk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCkBAIC01ODAsNiArNTg0LDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9lbGRfcHJvY19uZXcpOwogCiB2b2lkIHNuZF9oZGFfZWxkX3Byb2NfZnJlZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgc3RydWN0IGhkbWlfZWxkICplbGQpCiB7CkBAIC01ODgsNSArNTkzLDYgQEAKIAkJZWxkLT5wcm9jX2VudHJ5ID0gTlVMTDsKIAl9CiB9CitFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX2VsZF9wcm9jX2ZyZWUpOwogCiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCmluZGV4IGQ1YzkzYWQuLjQzYjdjZmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtMjY3LDcgKzI2Nyw4IEBACiAjZGVmaW5lIFJJUkJfSU5UX01BU0sJCTB4MDUKIAogLyogU1RBVEVTVFMgaW50IG1hc2s6IFMzLFNEMixTRDEsU0QwICovCi0jZGVmaW5lIEFaWF9NQVhfQ09ERUNTCQk0CisjZGVmaW5lIEFaWF9NQVhfQ09ERUNTCQk4CisjZGVmaW5lIEFaWF9ERUZBVUxUX0NPREVDUwk0CiAjZGVmaW5lIFNUQVRFU1RTX0lOVF9NQVNLCSgoMSA8PCBBWlhfTUFYX0NPREVDUykgLSAxKQogCiAvKiBTRF9DVEwgYml0cyAqLwpAQCAtMTM2Nyw2ICsxMzY4LDcgQEAKIAogLyogbnVtYmVyIG9mIGNvZGVjIHNsb3RzIGZvciBlYWNoIGNoaXBzZXQ6IDAgPSBkZWZhdWx0IHNsb3RzIChpLmUuIDQpICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGF6eF9tYXhfY29kZWNzW0FaWF9OVU1fRFJJVkVSU10gX19kZXZpbml0ZGF0YSA9IHsKKwlbQVpYX0RSSVZFUl9OVklESUFdID0gOCwKIAlbQVpYX0RSSVZFUl9URVJBXSA9IDEsCiB9OwogCkBAIC0xMzk5LDcgKzE0MDEsNyBAQAogCWNvZGVjcyA9IDA7CiAJbWF4X3Nsb3RzID0gYXp4X21heF9jb2RlY3NbY2hpcC0+ZHJpdmVyX3R5cGVdOwogCWlmICghbWF4X3Nsb3RzKQotCQltYXhfc2xvdHMgPSBBWlhfTUFYX0NPREVDUzsKKwkJbWF4X3Nsb3RzID0gQVpYX0RFRkFVTFRfQ09ERUNTOwogCiAJLyogRmlyc3QgdHJ5IHRvIHByb2JlIGFsbCBnaXZlbiBjb2RlYyBzbG90cyAqLwogCWZvciAoYyA9IDA7IGMgPCBtYXhfc2xvdHM7IGMrKykgewpAQCAtMjI2MywxMCArMjI2NSwxMiBAQAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHBvc2l0aW9uX2ZpeF9saXN0W10gX19kZXZpbml0ZGF0YSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwMWNjLCAiRGVsbCBEODIwIiwgUE9TX0ZJWF9MUElCKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwMWRlLCAiRGVsbCBQcmVjaXNpb24gMzkwIiwgUE9TX0ZJWF9MUElCKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwMWY2LCAiRGVsbCBMYXRpdHVkZSAxMzFMIiwgUE9TX0ZJWF9MUElCKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMDZkLCAiSFAgZHYzIiwgUE9TX0ZJWF9MUElCKSwKIAlTTkRfUENJX1FVSVJLKDB4MTEwNiwgMHgzMjg4LCAiQVNVUyBNMlYtTVggU0UiLCBQT1NfRklYX0xQSUIpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgxM2QsICJBU1VTIFA1QUQyIiwgUE9TX0ZJWF9MUElCKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHgxMDAyLCAiTVNJIFdpbmQgVTExNSIsIFBPU19GSVhfTFBJQiksCisJU05EX1BDSV9RVUlSSygweDE1NjUsIDB4ODIwZiwgIkJpb3N0YXIgTWljcm90ZWNoIiwgUE9TX0ZJWF9MUElCKSwKIAl7fQogfTsKIApAQCAtMjM1NCw2ICsyMzU4LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBtc2lfYmxhY2tfbGlzdFtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODFmMiwgIkFTVVMiLCAwKSwgLyogQXRobG9uNjQgWDIgKyBudmlkaWEgKi8KIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MWY2LCAiQVNVUyIsIDApLCAvKiBudmlkaWEgKi8KKwlTTkRfUENJX1FVSVJLKDB4MTg0OSwgMHgwODg4LCAiQVNSb2NrIiwgMCksIC8qIEF0aGxvbjY0IFgyICsgbnZpZGlhICovCiAJe30KIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9oZG1pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMyYmFmYgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCkBAIC0wLDAgKzEsODQ5IEBACisvKgorICoKKyAqICBwYXRjaF9oZG1pLmMgLSByb3V0aW5lcyBmb3IgSERNSS9EaXNwbGF5UG9ydCBjb2RlY3MKKyAqCisgKiAgQ29weXJpZ2h0KGMpIDIwMDgtMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgQXV0aG9yczoKKyAqCQkJV3UgRmVuZ2d1YW5nIDx3ZmdAbGludXguaW50ZWwuY29tPgorICoKKyAqICBNYWludGFpbmVkIGJ5OgorICoJCQlXdSBGZW5nZ3VhbmcgPHdmZ0BsaW51eC5pbnRlbC5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiAgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICogIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisKK3N0cnVjdCBoZG1pX3NwZWMgeworCWludCBudW1fY3Z0czsKKwlpbnQgbnVtX3BpbnM7CisJaGRhX25pZF90IGN2dFtNQVhfSERNSV9DVlRTKzFdOyAgLyogYXVkaW8gc291cmNlcyAqLworCWhkYV9uaWRfdCBwaW5bTUFYX0hETUlfUElOUysxXTsgIC8qIGF1ZGlvIHNpbmtzICovCisKKwkvKgorCSAqIHNvdXJjZSBjb25uZWN0aW9uIGZvciBlYWNoIHBpbgorCSAqLworCWhkYV9uaWRfdCBwaW5fY3Z0W01BWF9IRE1JX1BJTlMrMV07CisKKwkvKgorCSAqIEhETUkgc2luayBhdHRhY2hlZCB0byBlYWNoIHBpbgorCSAqLworCXN0cnVjdCBoZG1pX2VsZCBzaW5rX2VsZFtNQVhfSERNSV9QSU5TXTsKKworCS8qCisJICogZXhwb3J0IG9uZSBwY20gcGVyIHBpcGUKKwkgKi8KKwlzdHJ1Y3QgaGRhX3BjbQlwY21fcmVjW01BWF9IRE1JX0NWVFNdOworCisJLyoKKwkgKiBudmhkbWkgc3BlY2lmaWMKKwkgKi8KKwlzdHJ1Y3QgaGRhX211bHRpX291dCBtdWx0aW91dDsKKwl1bnNpZ25lZCBpbnQgY29kZWNfdHlwZTsKK307CisKKworc3RydWN0IGhkbWlfYXVkaW9faW5mb2ZyYW1lIHsKKwl1OCB0eXBlOyAvKiAweDg0ICovCisJdTggdmVyOyAgLyogMHgwMSAqLworCXU4IGxlbjsgIC8qIDB4MGEgKi8KKworCXU4IGNoZWNrc3VtOwkvKiBQQjAgKi8KKwl1OCBDQzAyX0NUNDc7CS8qIENDIGluIGJpdHMgMDoyLCBDVCBpbiA0OjcgKi8KKwl1OCBTUzAxX1NGMjQ7CisJdTggQ1hUMDQ7CisJdTggQ0E7CisJdTggTEZFUEJMMDFfTFNWMzZfRE1fSU5INzsKKwl1OCByZXNlcnZlZFs1XTsJLyogUEI2IC0gUEIxMCAqLworfTsKKworLyoKKyAqIENFQSBzcGVha2VyIHBsYWNlbWVudDoKKyAqCisgKiAgICAgICAgRkxIICAgICAgIEZDSCAgICAgICAgRlJICisgKiAgRkxXICAgIEZMICBGTEMgICBGQyAgIEZSQyAgIEZSICAgRlJXCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEZFCisgKiAgICAgICAgICAgICAgICAgICAgIFRDCisgKgorICogICAgICAgICAgUkwgIFJMQyAgIFJDICAgUlJDICAgUlIKKyAqCisgKiBUaGUgTGVmdC9SaWdodCBTdXJyb3VuZCBjaGFubmVsIF9ub3Rpb25zXyBMUy9SUyBpbiBTTVBURSAzMjBNIGNvcnJlc3BvbmRzIHRvCisgKiBDRUEgUkwvUlI7IFRoZSBTTVBURSBjaGFubmVsIF9hc3NpZ25tZW50XyBDL0xGRSBpcyBzd2FwcGVkIHRvIENFQSBMRkUvRkMuCisgKi8KK2VudW0gY2VhX3NwZWFrZXJfcGxhY2VtZW50IHsKKwlGTCAgPSAoMSA8PCAgMCksCS8qIEZyb250IExlZnQgICAgICAgICAgICovCisJRkMgID0gKDEgPDwgIDEpLAkvKiBGcm9udCBDZW50ZXIgICAgICAgICAqLworCUZSICA9ICgxIDw8ICAyKSwJLyogRnJvbnQgUmlnaHQgICAgICAgICAgKi8KKwlGTEMgPSAoMSA8PCAgMyksCS8qIEZyb250IExlZnQgQ2VudGVyICAgICovCisJRlJDID0gKDEgPDwgIDQpLAkvKiBGcm9udCBSaWdodCBDZW50ZXIgICAqLworCVJMICA9ICgxIDw8ICA1KSwJLyogUmVhciBMZWZ0ICAgICAgICAgICAgKi8KKwlSQyAgPSAoMSA8PCAgNiksCS8qIFJlYXIgQ2VudGVyICAgICAgICAgICovCisJUlIgID0gKDEgPDwgIDcpLAkvKiBSZWFyIFJpZ2h0ICAgICAgICAgICAqLworCVJMQyA9ICgxIDw8ICA4KSwJLyogUmVhciBMZWZ0IENlbnRlciAgICAgKi8KKwlSUkMgPSAoMSA8PCAgOSksCS8qIFJlYXIgUmlnaHQgQ2VudGVyICAgICovCisJTEZFID0gKDEgPDwgMTApLAkvKiBMb3cgRnJlcXVlbmN5IEVmZmVjdCAqLworCUZMVyA9ICgxIDw8IDExKSwJLyogRnJvbnQgTGVmdCBXaWRlICAgICAgKi8KKwlGUlcgPSAoMSA8PCAxMiksCS8qIEZyb250IFJpZ2h0IFdpZGUgICAgICovCisJRkxIID0gKDEgPDwgMTMpLAkvKiBGcm9udCBMZWZ0IEhpZ2ggICAgICAqLworCUZDSCA9ICgxIDw8IDE0KSwJLyogRnJvbnQgQ2VudGVyIEhpZ2ggICAgKi8KKwlGUkggPSAoMSA8PCAxNSksCS8qIEZyb250IFJpZ2h0IEhpZ2ggICAgICovCisJVEMgID0gKDEgPDwgMTYpLAkvKiBUb3AgQ2VudGVyICAgICAgICAgICAqLworfTsKKworLyoKKyAqIEVMRCBTQSBiaXRzIGluIHRoZSBDRUEgU3BlYWtlciBBbGxvY2F0aW9uIGRhdGEgYmxvY2sKKyAqLworc3RhdGljIGludCBlbGRfc3BlYWtlcl9hbGxvY2F0aW9uX2JpdHNbXSA9IHsKKwlbMF0gPSBGTCB8IEZSLAorCVsxXSA9IExGRSwKKwlbMl0gPSBGQywKKwlbM10gPSBSTCB8IFJSLAorCVs0XSA9IFJDLAorCVs1XSA9IEZMQyB8IEZSQywKKwlbNl0gPSBSTEMgfCBSUkMsCisJLyogdGhlIGZvbGxvd2luZyBhcmUgbm90IGRlZmluZWQgaW4gRUxEIHlldCAqLworCVs3XSA9IEZMVyB8IEZSVywKKwlbOF0gPSBGTEggfCBGUkgsCisJWzldID0gVEMsCisJWzEwXSA9IEZDSCwKK307CisKK3N0cnVjdCBjZWFfY2hhbm5lbF9zcGVha2VyX2FsbG9jYXRpb24geworCWludCBjYV9pbmRleDsKKwlpbnQgc3BlYWtlcnNbOF07CisKKwkvKiBkZXJpdmVkIHZhbHVlcywganVzdCBmb3IgY29udmVuaWVuY2UgKi8KKwlpbnQgY2hhbm5lbHM7CisJaW50IHNwa19tYXNrOworfTsKKworLyoKKyAqIEFMU0Egc2VxdWVuY2UgaXM6CisgKgorICogICAgICAgc3Vycm91bmQ0MCAgIHN1cnJvdW5kNDEgICBzdXJyb3VuZDUwICAgc3Vycm91bmQ1MSAgIHN1cnJvdW5kNzEKKyAqIGNoMCAgIGZyb250IGxlZnQgICA9ICAgICAgICAgICAgPSAgICAgICAgICAgID0gICAgICAgICAgICA9CisgKiBjaDEgICBmcm9udCByaWdodCAgPSAgICAgICAgICAgID0gICAgICAgICAgICA9ICAgICAgICAgICAgPQorICogY2gyICAgcmVhciBsZWZ0ICAgID0gICAgICAgICAgICA9ICAgICAgICAgICAgPSAgICAgICAgICAgID0KKyAqIGNoMyAgIHJlYXIgcmlnaHQgICA9ICAgICAgICAgICAgPSAgICAgICAgICAgID0gICAgICAgICAgICA9CisgKiBjaDQgICAgICAgICAgICAgICAgTEZFICAgICAgICAgIGNlbnRlciAgICAgICBjZW50ZXIgICAgICAgY2VudGVyCisgKiBjaDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMRkUgICAgICAgICAgTEZFCisgKiBjaDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkZSBsZWZ0CisgKiBjaDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkZSByaWdodAorICoKKyAqIHN1cnJvdW5kNzEgPSB7RkwsIEZSLCBSTEMsIFJSQywgRkMsIExGRSwgUkwsIFJSfQorICovCitzdGF0aWMgaW50IGhkbWlfY2hhbm5lbF9tYXBwaW5nWzB4MzJdWzhdID0geworCS8qIHN0ZXJlbyAqLworCVsweDAwXSA9IHsgMHgwMCwgMHgxMSwgMHhmMiwgMHhmMywgMHhmNCwgMHhmNSwgMHhmNiwgMHhmNyB9LAorCS8qIDIuMSAqLworCVsweDAxXSA9IHsgMHgwMCwgMHgxMSwgMHgyMiwgMHhmMywgMHhmNCwgMHhmNSwgMHhmNiwgMHhmNyB9LAorCS8qIERvbGJ5IFN1cnJvdW5kICovCisJWzB4MDJdID0geyAweDAwLCAweDExLCAweDIzLCAweGYyLCAweGY0LCAweGY1LCAweGY2LCAweGY3IH0sCisJLyogc3Vycm91bmQ0MCAqLworCVsweDA4XSA9IHsgMHgwMCwgMHgxMSwgMHgyNCwgMHgzNSwgMHhmMywgMHhmMiwgMHhmNiwgMHhmNyB9LAorCS8qIDRjaCAqLworCVsweDAzXSA9IHsgMHgwMCwgMHgxMSwgMHgyMywgMHgzMiwgMHg0NCwgMHhmNSwgMHhmNiwgMHhmNyB9LAorCS8qIHN1cnJvdW5kNDEgKi8KKwlbMHgwOV0gPSB7IDB4MDAsIDB4MTEsIDB4MjQsIDB4MzQsIDB4NDMsIDB4ZjIsIDB4ZjYsIDB4ZjcgfSwKKwkvKiBzdXJyb3VuZDUwICovCisJWzB4MGFdID0geyAweDAwLCAweDExLCAweDI0LCAweDM1LCAweDQzLCAweGYyLCAweGY2LCAweGY3IH0sCisJLyogc3Vycm91bmQ1MSAqLworCVsweDBiXSA9IHsgMHgwMCwgMHgxMSwgMHgyNCwgMHgzNSwgMHg0MywgMHg1MiwgMHhmNiwgMHhmNyB9LAorCS8qIDcuMSAqLworCVsweDEzXSA9IHsgMHgwMCwgMHgxMSwgMHgyNiwgMHgzNywgMHg0MywgMHg1MiwgMHg2NCwgMHg3NSB9LAorfTsKKworLyoKKyAqIFRoaXMgaXMgYW4gb3JkZXJlZCBsaXN0IQorICoKKyAqIFRoZSBwcmVjZWRpbmcgb25lcyBoYXZlIGJldHRlciBjaGFuY2VzIHRvIGJlIHNlbGVjdGVkIGJ5CisgKiBoZG1pX3NldHVwX2NoYW5uZWxfYWxsb2NhdGlvbigpLgorICovCitzdGF0aWMgc3RydWN0IGNlYV9jaGFubmVsX3NwZWFrZXJfYWxsb2NhdGlvbiBjaGFubmVsX2FsbG9jYXRpb25zW10gPSB7CisvKgkJCSAgY2hhbm5lbDogICA3ICAgICA2ICAgIDUgICAgNCAgICAzICAgICAyICAgIDEgICAgMCAgKi8KK3sgLmNhX2luZGV4ID0gMHgwMCwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgIDAsICAgMCwgICAwLCAgICAwLCAgRlIsICBGTCB9IH0sCisJCQkJIC8qIDIuMSAqLworeyAuY2FfaW5kZXggPSAweDAxLCAgLnNwZWFrZXJzID0geyAgIDAsICAgIDAsICAgMCwgICAwLCAgIDAsICBMRkUsICBGUiwgIEZMIH0gfSwKKwkJCQkgLyogRG9sYnkgU3Vycm91bmQgKi8KK3sgLmNhX2luZGV4ID0gMHgwMiwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgIDAsICAgMCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCisJCQkJIC8qIHN1cnJvdW5kNDAgKi8KK3sgLmNhX2luZGV4ID0gMHgwOCwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgUlIsICBSTCwgICAwLCAgICAwLCAgRlIsICBGTCB9IH0sCisJCQkJIC8qIHN1cnJvdW5kNDEgKi8KK3sgLmNhX2luZGV4ID0gMHgwOSwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgUlIsICBSTCwgICAwLCAgTEZFLCAgRlIsICBGTCB9IH0sCisJCQkJIC8qIHN1cnJvdW5kNTAgKi8KK3sgLmNhX2luZGV4ID0gMHgwYSwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgUlIsICBSTCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCisJCQkJIC8qIHN1cnJvdW5kNTEgKi8KK3sgLmNhX2luZGV4ID0gMHgwYiwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgUlIsICBSTCwgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCisJCQkJIC8qIDYuMSAqLworeyAuY2FfaW5kZXggPSAweDBmLCAgLnNwZWFrZXJzID0geyAgIDAsICAgUkMsICBSUiwgIFJMLCAgRkMsICBMRkUsICBGUiwgIEZMIH0gfSwKKwkJCQkgLyogc3Vycm91bmQ3MSAqLworeyAuY2FfaW5kZXggPSAweDEzLCAgLnNwZWFrZXJzID0geyBSUkMsICBSTEMsICBSUiwgIFJMLCAgRkMsICBMRkUsICBGUiwgIEZMIH0gfSwKKworeyAuY2FfaW5kZXggPSAweDAzLCAgLnNwZWFrZXJzID0geyAgIDAsICAgIDAsICAgMCwgICAwLCAgRkMsICBMRkUsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgwNCwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgIDAsICBSQywgICAwLCAgICAwLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MDUsICAuc3BlYWtlcnMgPSB7ICAgMCwgICAgMCwgICAwLCAgUkMsICAgMCwgIExGRSwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDA2LCAgLnNwZWFrZXJzID0geyAgIDAsICAgIDAsICAgMCwgIFJDLCAgRkMsICAgIDAsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgwNywgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgIDAsICBSQywgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MGMsICAuc3BlYWtlcnMgPSB7ICAgMCwgICBSQywgIFJSLCAgUkwsICAgMCwgICAgMCwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDBkLCAgLnNwZWFrZXJzID0geyAgIDAsICAgUkMsICBSUiwgIFJMLCAgIDAsICBMRkUsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgwZSwgIC5zcGVha2VycyA9IHsgICAwLCAgIFJDLCAgUlIsICBSTCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MTAsICAuc3BlYWtlcnMgPSB7IFJSQywgIFJMQywgIFJSLCAgUkwsICAgMCwgICAgMCwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDExLCAgLnNwZWFrZXJzID0geyBSUkMsICBSTEMsICBSUiwgIFJMLCAgIDAsICBMRkUsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgxMiwgIC5zcGVha2VycyA9IHsgUlJDLCAgUkxDLCAgUlIsICBSTCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MTQsICAuc3BlYWtlcnMgPSB7IEZSQywgIEZMQywgICAwLCAgIDAsICAgMCwgICAgMCwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDE1LCAgLnNwZWFrZXJzID0geyBGUkMsICBGTEMsICAgMCwgICAwLCAgIDAsICBMRkUsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgxNiwgIC5zcGVha2VycyA9IHsgRlJDLCAgRkxDLCAgIDAsICAgMCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MTcsICAuc3BlYWtlcnMgPSB7IEZSQywgIEZMQywgICAwLCAgIDAsICBGQywgIExGRSwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDE4LCAgLnNwZWFrZXJzID0geyBGUkMsICBGTEMsICAgMCwgIFJDLCAgIDAsICAgIDAsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgxOSwgIC5zcGVha2VycyA9IHsgRlJDLCAgRkxDLCAgIDAsICBSQywgICAwLCAgTEZFLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MWEsICAuc3BlYWtlcnMgPSB7IEZSQywgIEZMQywgICAwLCAgUkMsICBGQywgICAgMCwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDFiLCAgLnNwZWFrZXJzID0geyBGUkMsICBGTEMsICAgMCwgIFJDLCAgRkMsICBMRkUsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgxYywgIC5zcGVha2VycyA9IHsgRlJDLCAgRkxDLCAgUlIsICBSTCwgICAwLCAgICAwLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MWQsICAuc3BlYWtlcnMgPSB7IEZSQywgIEZMQywgIFJSLCAgUkwsICAgMCwgIExGRSwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDFlLCAgLnNwZWFrZXJzID0geyBGUkMsICBGTEMsICBSUiwgIFJMLCAgRkMsICAgIDAsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgxZiwgIC5zcGVha2VycyA9IHsgRlJDLCAgRkxDLCAgUlIsICBSTCwgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MjAsICAuc3BlYWtlcnMgPSB7ICAgMCwgIEZDSCwgIFJSLCAgUkwsICBGQywgICAgMCwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDIxLCAgLnNwZWFrZXJzID0geyAgIDAsICBGQ0gsICBSUiwgIFJMLCAgRkMsICBMRkUsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgyMiwgIC5zcGVha2VycyA9IHsgIFRDLCAgICAwLCAgUlIsICBSTCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MjMsICAuc3BlYWtlcnMgPSB7ICBUQywgICAgMCwgIFJSLCAgUkwsICBGQywgIExGRSwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDI0LCAgLnNwZWFrZXJzID0geyBGUkgsICBGTEgsICBSUiwgIFJMLCAgIDAsICAgIDAsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgyNSwgIC5zcGVha2VycyA9IHsgRlJILCAgRkxILCAgUlIsICBSTCwgICAwLCAgTEZFLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MjYsICAuc3BlYWtlcnMgPSB7IEZSVywgIEZMVywgIFJSLCAgUkwsICAgMCwgICAgMCwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDI3LCAgLnNwZWFrZXJzID0geyBGUlcsICBGTFcsICBSUiwgIFJMLCAgIDAsICBMRkUsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgyOCwgIC5zcGVha2VycyA9IHsgIFRDLCAgIFJDLCAgUlIsICBSTCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MjksICAuc3BlYWtlcnMgPSB7ICBUQywgICBSQywgIFJSLCAgUkwsICBGQywgIExGRSwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDJhLCAgLnNwZWFrZXJzID0geyBGQ0gsICAgUkMsICBSUiwgIFJMLCAgRkMsICAgIDAsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgyYiwgIC5zcGVha2VycyA9IHsgRkNILCAgIFJDLCAgUlIsICBSTCwgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MmMsICAuc3BlYWtlcnMgPSB7ICBUQywgIEZDSCwgIFJSLCAgUkwsICBGQywgICAgMCwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDJkLCAgLnNwZWFrZXJzID0geyAgVEMsICBGQ0gsICBSUiwgIFJMLCAgRkMsICBMRkUsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgyZSwgIC5zcGVha2VycyA9IHsgRlJILCAgRkxILCAgUlIsICBSTCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MmYsICAuc3BlYWtlcnMgPSB7IEZSSCwgIEZMSCwgIFJSLCAgUkwsICBGQywgIExGRSwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDMwLCAgLnNwZWFrZXJzID0geyBGUlcsICBGTFcsICBSUiwgIFJMLCAgRkMsICAgIDAsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgzMSwgIC5zcGVha2VycyA9IHsgRlJXLCAgRkxXLCAgUlIsICBSTCwgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCit9OworCisKKy8qCisgKiBIRE1JIHJvdXRpbmVzCisgKi8KKworc3RhdGljIGludCBoZGFfbm9kZV9pbmRleChoZGFfbmlkX3QgKm5pZHMsIGhkYV9uaWRfdCBuaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBuaWRzW2ldOyBpKyspCisJCWlmIChuaWRzW2ldID09IG5pZCkKKwkJCXJldHVybiBpOworCisJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIkhETUk6IG5pZCAlZCBub3QgcmVnaXN0ZXJlZFxuIiwgbmlkKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHZvaWQgaGRtaV9nZXRfc2hvd19lbGQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkLAorCQkJICAgICAgc3RydWN0IGhkbWlfZWxkICplbGQpCit7CisJaWYgKCFzbmRfaGRtaV9nZXRfZWxkKGVsZCwgY29kZWMsIHBpbl9uaWQpKQorCQlzbmRfaGRtaV9zaG93X2VsZChlbGQpOworfQorCisjaWZkZWYgQkVfUEFSQU5PSUQKK3N0YXRpYyB2b2lkIGhkbWlfZ2V0X2RpcF9pbmRleChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IHBpbl9uaWQsCisJCQkJaW50ICpwYWNrZXRfaW5kZXgsIGludCAqYnl0ZV9pbmRleCkKK3sKKwlpbnQgdmFsOworCisJdmFsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBwaW5fbmlkLCAwLAorCQkJCSBBQ19WRVJCX0dFVF9IRE1JX0RJUF9JTkRFWCwgMCk7CisKKwkqcGFja2V0X2luZGV4ID0gdmFsID4+IDU7CisJKmJ5dGVfaW5kZXggPSB2YWwgJiAweDFmOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGhkbWlfc2V0X2RpcF9pbmRleChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IHBpbl9uaWQsCisJCQkJaW50IHBhY2tldF9pbmRleCwgaW50IGJ5dGVfaW5kZXgpCit7CisJaW50IHZhbDsKKworCXZhbCA9IChwYWNrZXRfaW5kZXggPDwgNSkgfCAoYnl0ZV9pbmRleCAmIDB4MWYpOworCisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwgQUNfVkVSQl9TRVRfSERNSV9ESVBfSU5ERVgsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGhkbWlfd3JpdGVfZGlwX2J5dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkLAorCQkJCXVuc2lnbmVkIGNoYXIgdmFsKQoreworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsIEFDX1ZFUkJfU0VUX0hETUlfRElQX0RBVEEsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGhkbWlfZW5hYmxlX291dHB1dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IHBpbl9uaWQpCit7CisJLyogVW5tdXRlICovCisJaWYgKGdldF93Y2Fwcyhjb2RlYywgcGluX25pZCkgJiBBQ19XQ0FQX09VVF9BTVApCisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsCisJCQkJQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUpOworCS8qIEVuYWJsZSBwaW4gb3V0ICovCisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKKwkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQpOworfQorCitzdGF0aWMgaW50IGhkbWlfZ2V0X2NoYW5uZWxfY291bnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCit7CisJcmV0dXJuIDEgKyBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKKwkJCQkJQUNfVkVSQl9HRVRfQ1ZUX0NIQU5fQ09VTlQsIDApOworfQorCitzdGF0aWMgdm9pZCBoZG1pX3NldF9jaGFubmVsX2NvdW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgIGhkYV9uaWRfdCBuaWQsIGludCBjaHMpCit7CisJaWYgKGNocyAhPSBoZG1pX2dldF9jaGFubmVsX2NvdW50KGNvZGVjLCBuaWQpKQorCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX0NWVF9DSEFOX0NPVU5ULCBjaHMgLSAxKTsKK30KKworCisvKgorICogQ2hhbm5lbCBtYXBwaW5nIHJvdXRpbmVzCisgKi8KKworLyoKKyAqIENvbXB1dGUgZGVyaXZlZCB2YWx1ZXMgaW4gY2hhbm5lbF9hbGxvY2F0aW9uc1tdLgorICovCitzdGF0aWMgdm9pZCBpbml0X2NoYW5uZWxfYWxsb2NhdGlvbnModm9pZCkKK3sKKwlpbnQgaSwgajsKKwlzdHJ1Y3QgY2VhX2NoYW5uZWxfc3BlYWtlcl9hbGxvY2F0aW9uICpwOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2hhbm5lbF9hbGxvY2F0aW9ucyk7IGkrKykgeworCQlwID0gY2hhbm5lbF9hbGxvY2F0aW9ucyArIGk7CisJCXAtPmNoYW5uZWxzID0gMDsKKwkJcC0+c3BrX21hc2sgPSAwOworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShwLT5zcGVha2Vycyk7IGorKykKKwkJCWlmIChwLT5zcGVha2Vyc1tqXSkgeworCQkJCXAtPmNoYW5uZWxzKys7CisJCQkJcC0+c3BrX21hc2sgfD0gcC0+c3BlYWtlcnNbal07CisJCQl9CisJfQorfQorCisvKgorICogVGhlIHRyYW5zZm9ybWF0aW9uIHRha2VzIHR3byBzdGVwczoKKyAqCisgKgllbGQtPnNwa19hbGxvYyA9PiAoZWxkX3NwZWFrZXJfYWxsb2NhdGlvbl9iaXRzW10pID0+IHNwa19tYXNrCisgKgkgICAgICBzcGtfbWFzayA9PiAoY2hhbm5lbF9hbGxvY2F0aW9uc1tdKSAgICAgICAgID0+IGFpLT5DQQorICoKKyAqIFRPRE86IGl0IGNvdWxkIHNlbGVjdCB0aGUgd3JvbmcgQ0EgZnJvbSBtdWx0aXBsZSBjYW5kaWRhdGVzLgorKi8KK3N0YXRpYyBpbnQgaGRtaV9zZXR1cF9jaGFubmVsX2FsbG9jYXRpb24oc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCisJCQkJCSBzdHJ1Y3QgaGRtaV9hdWRpb19pbmZvZnJhbWUgKmFpKQoreworCXN0cnVjdCBoZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzdHJ1Y3QgaGRtaV9lbGQgKmVsZDsKKwlpbnQgaTsKKwlpbnQgc3BrX21hc2sgPSAwOworCWludCBjaGFubmVscyA9IDEgKyAoYWktPkNDMDJfQ1Q0NyAmIDB4Nyk7CisJY2hhciBidWZbU05EX1BSSU5UX0NIQU5ORUxfQUxMT0NBVElPTl9BRFZJU0VEX0JVRlNJWkVdOworCisJLyoKKwkgKiBDQSBkZWZhdWx0cyB0byAwIGZvciBiYXNpYyBzdGVyZW8gYXVkaW8KKwkgKi8KKwlpZiAoY2hhbm5lbHMgPD0gMikKKwkJcmV0dXJuIDA7CisKKwlpID0gaGRhX25vZGVfaW5kZXgoc3BlYy0+cGluX2N2dCwgbmlkKTsKKwlpZiAoaSA8IDApCisJCXJldHVybiAwOworCWVsZCA9ICZzcGVjLT5zaW5rX2VsZFtpXTsKKworCS8qCisJICogSERNSSBzaW5rJ3MgRUxEIGluZm8gY2Fubm90IGFsd2F5cyBiZSByZXRyaWV2ZWQgZm9yIG5vdywgZS5nLgorCSAqIGluIGNvbnNvbGUgb3IgZm9yIGF1ZGlvIGRldmljZXMuIEFzc3VtZSB0aGUgaGlnaGVzdCBzcGVha2VycworCSAqIGNvbmZpZ3VyYXRpb24sIHRvIF9ub3RfIHByb2hpYml0IG11bHRpLWNoYW5uZWwgYXVkaW8gcGxheWJhY2suCisJICovCisJaWYgKCFlbGQtPnNwa19hbGxvYykKKwkJZWxkLT5zcGtfYWxsb2MgPSAweGZmZmY7CisKKwkvKgorCSAqIGV4cGFuZCBFTEQncyBzcGVha2VyIGFsbG9jYXRpb24gbWFzaworCSAqCisJICogRUxEIHRlbGxzIHRoZSBzcGVha2VyIG1hc2sgaW4gYSBjb21wYWN0KHBhaXJlZCkgZm9ybSwKKwkgKiBleHBhbmQgRUxEJ3Mgbm90aW9ucyB0byBtYXRjaCB0aGUgb25lcyB1c2VkIGJ5IEF1ZGlvIEluZm9GcmFtZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShlbGRfc3BlYWtlcl9hbGxvY2F0aW9uX2JpdHMpOyBpKyspIHsKKwkJaWYgKGVsZC0+c3BrX2FsbG9jICYgKDEgPDwgaSkpCisJCQlzcGtfbWFzayB8PSBlbGRfc3BlYWtlcl9hbGxvY2F0aW9uX2JpdHNbaV07CisJfQorCisJLyogc2VhcmNoIGZvciB0aGUgZmlyc3Qgd29ya2luZyBtYXRjaCBpbiB0aGUgQ0EgdGFibGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaGFubmVsX2FsbG9jYXRpb25zKTsgaSsrKSB7CisJCWlmIChjaGFubmVscyA9PSBjaGFubmVsX2FsbG9jYXRpb25zW2ldLmNoYW5uZWxzICYmCisJCSAgICAoc3BrX21hc2sgJiBjaGFubmVsX2FsbG9jYXRpb25zW2ldLnNwa19tYXNrKSA9PQorCQkJCWNoYW5uZWxfYWxsb2NhdGlvbnNbaV0uc3BrX21hc2spIHsKKwkJCWFpLT5DQSA9IGNoYW5uZWxfYWxsb2NhdGlvbnNbaV0uY2FfaW5kZXg7CisJCQlicmVhazsKKwkJfQorCX0KKworCXNuZF9wcmludF9jaGFubmVsX2FsbG9jYXRpb24oZWxkLT5zcGtfYWxsb2MsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCXNuZF9wcmludGRkKCJIRE1JOiBzZWxlY3QgQ0EgMHgleCBmb3IgJWQtY2hhbm5lbCBhbGxvY2F0aW9uOiAlc1xuIiwKKwkJICAgIGFpLT5DQSwgY2hhbm5lbHMsIGJ1Zik7CisKKwlyZXR1cm4gYWktPkNBOworfQorCitzdGF0aWMgdm9pZCBoZG1pX2RlYnVnX2NoYW5uZWxfbWFwcGluZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkgICAgICAgaGRhX25pZF90IHBpbl9uaWQpCit7CisjaWZkZWYgQ09ORklHX1NORF9ERUJVR19WRVJCT1NFCisJaW50IGk7CisJaW50IHNsb3Q7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCXNsb3QgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIHBpbl9uaWQsIDAsCisJCQkJCQlBQ19WRVJCX0dFVF9IRE1JX0NIQU5fU0xPVCwgaSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJIRE1JOiBBU1AgY2hhbm5lbCAlZCA9PiBzbG90ICVkXG4iLAorCQkJCQkJc2xvdCA+PiA0LCBzbG90ICYgMHhmKTsKKwl9CisjZW5kaWYKK30KKworCitzdGF0aWMgdm9pZCBoZG1pX3NldHVwX2NoYW5uZWxfbWFwcGluZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkgICAgICAgaGRhX25pZF90IHBpbl9uaWQsCisJCQkJICAgICAgIHN0cnVjdCBoZG1pX2F1ZGlvX2luZm9mcmFtZSAqYWkpCit7CisJaW50IGk7CisJaW50IGNhID0gYWktPkNBOworCWludCBlcnI7CisKKwlpZiAoaGRtaV9jaGFubmVsX21hcHBpbmdbY2FdWzFdID09IDApIHsKKwkJZm9yIChpID0gMDsgaSA8IGNoYW5uZWxfYWxsb2NhdGlvbnNbY2FdLmNoYW5uZWxzOyBpKyspCisJCQloZG1pX2NoYW5uZWxfbWFwcGluZ1tjYV1baV0gPSBpIHwgKGkgPDwgNCk7CisJCWZvciAoOyBpIDwgODsgaSsrKQorCQkJaGRtaV9jaGFubmVsX21hcHBpbmdbY2FdW2ldID0gMHhmIHwgKGkgPDwgNCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQllcnIgPSBzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAorCQkJCQkgIEFDX1ZFUkJfU0VUX0hETUlfQ0hBTl9TTE9ULAorCQkJCQkgIGhkbWlfY2hhbm5lbF9tYXBwaW5nW2NhXVtpXSk7CisJCWlmIChlcnIpIHsKKwkJCXNuZF9wcmludGRkKEtFUk5fTk9USUNFCisJCQkJICAgICJIRE1JOiBjaGFubmVsIG1hcHBpbmcgZmFpbGVkXG4iKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaGRtaV9kZWJ1Z19jaGFubmVsX21hcHBpbmcoY29kZWMsIHBpbl9uaWQpOworfQorCisKKy8qCisgKiBBdWRpbyBJbmZvRnJhbWUgcm91dGluZXMKKyAqLworCisvKgorICogRW5hYmxlIEF1ZGlvIEluZm9GcmFtZSBUcmFuc21pc3Npb24KKyAqLworc3RhdGljIHZvaWQgaGRtaV9zdGFydF9pbmZvZnJhbWVfdHJhbnMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICAgICAgIGhkYV9uaWRfdCBwaW5fbmlkKQoreworCWhkbWlfc2V0X2RpcF9pbmRleChjb2RlYywgcGluX25pZCwgMHgwLCAweDApOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsIEFDX1ZFUkJfU0VUX0hETUlfRElQX1hNSVQsCisJCQkJCQlBQ19ESVBYTUlUX0JFU1QpOworfQorCisvKgorICogRGlzYWJsZSBBdWRpbyBJbmZvRnJhbWUgVHJhbnNtaXNzaW9uCisgKi8KK3N0YXRpYyB2b2lkIGhkbWlfc3RvcF9pbmZvZnJhbWVfdHJhbnMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICAgICAgaGRhX25pZF90IHBpbl9uaWQpCit7CisJaGRtaV9zZXRfZGlwX2luZGV4KGNvZGVjLCBwaW5fbmlkLCAweDAsIDB4MCk7CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwgQUNfVkVSQl9TRVRfSERNSV9ESVBfWE1JVCwKKwkJCQkJCUFDX0RJUFhNSVRfRElTQUJMRSk7Cit9CisKK3N0YXRpYyB2b2lkIGhkbWlfZGVidWdfZGlwX3NpemUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkKQoreworI2lmZGVmIENPTkZJR19TTkRfREVCVUdfVkVSQk9TRQorCWludCBpOworCWludCBzaXplOworCisJc2l6ZSA9IHNuZF9oZG1pX2dldF9lbGRfc2l6ZShjb2RlYywgcGluX25pZCk7CisJcHJpbnRrKEtFUk5fREVCVUcgIkhETUk6IEVMRCBidWYgc2l6ZSBpcyAlZFxuIiwgc2l6ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCXNpemUgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIHBpbl9uaWQsIDAsCisJCQkJCQlBQ19WRVJCX0dFVF9IRE1JX0RJUF9TSVpFLCBpKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkhETUk6IERJUCBHUFslZF0gYnVmIHNpemUgaXMgJWRcbiIsIGksIHNpemUpOworCX0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBoZG1pX2NsZWFyX2RpcF9idWZmZXJzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgcGluX25pZCkKK3sKKyNpZmRlZiBCRV9QQVJBTk9JRAorCWludCBpLCBqOworCWludCBzaXplOworCWludCBwaSwgYmk7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlzaXplID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBwaW5fbmlkLCAwLAorCQkJCQkJQUNfVkVSQl9HRVRfSERNSV9ESVBfU0laRSwgaSk7CisJCWlmIChzaXplID09IDApCisJCQljb250aW51ZTsKKworCQloZG1pX3NldF9kaXBfaW5kZXgoY29kZWMsIHBpbl9uaWQsIGksIDB4MCk7CisJCWZvciAoaiA9IDE7IGogPCAxMDAwOyBqKyspIHsKKwkJCWhkbWlfd3JpdGVfZGlwX2J5dGUoY29kZWMsIHBpbl9uaWQsIDB4MCk7CisJCQloZG1pX2dldF9kaXBfaW5kZXgoY29kZWMsIHBpbl9uaWQsICZwaSwgJmJpKTsKKwkJCWlmIChwaSAhPSBpKQorCQkJCXNuZF9wcmludGQoS0VSTl9JTkZPICJkaXAgaW5kZXggJWQ6ICVkICE9ICVkXG4iLAorCQkJCQkJYmksIHBpLCBpKTsKKwkJCWlmIChiaSA9PSAwKSAvKiBieXRlIGluZGV4IHdyYXBwZWQgYXJvdW5kICovCisJCQkJYnJlYWs7CisJCX0KKwkJc25kX3ByaW50ZChLRVJOX0lORk8KKwkJCSJIRE1JOiBESVAgR1BbJWRdIGJ1ZiByZXBvcnRlZCBzaXplPSVkLCB3cml0dGVuPSVkXG4iLAorCQkJaSwgc2l6ZSwgaik7CisJfQorI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGhkbWlfY2hlY2tzdW1fYXVkaW9faW5mb2ZyYW1lKHN0cnVjdCBoZG1pX2F1ZGlvX2luZm9mcmFtZSAqYWkpCit7CisJdTggKmJ5dGVzID0gKHU4ICopYWk7CisJdTggc3VtID0gMDsKKwlpbnQgaTsKKworCWFpLT5jaGVja3N1bSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKCphaSk7IGkrKykKKwkJc3VtICs9IGJ5dGVzW2ldOworCisJYWktPmNoZWNrc3VtID0gLXN1bTsKK30KKworc3RhdGljIHZvaWQgaGRtaV9maWxsX2F1ZGlvX2luZm9mcmFtZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkgICAgICBoZGFfbmlkX3QgcGluX25pZCwKKwkJCQkgICAgICBzdHJ1Y3QgaGRtaV9hdWRpb19pbmZvZnJhbWUgKmFpKQoreworCXU4ICpieXRlcyA9ICh1OCAqKWFpOworCWludCBpOworCisJaGRtaV9kZWJ1Z19kaXBfc2l6ZShjb2RlYywgcGluX25pZCk7CisJaGRtaV9jbGVhcl9kaXBfYnVmZmVycyhjb2RlYywgcGluX25pZCk7IC8qIGJlIHBhcmFub2lkICovCisKKwloZG1pX2NoZWNrc3VtX2F1ZGlvX2luZm9mcmFtZShhaSk7CisKKwloZG1pX3NldF9kaXBfaW5kZXgoY29kZWMsIHBpbl9uaWQsIDB4MCwgMHgwKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKCphaSk7IGkrKykKKwkJaGRtaV93cml0ZV9kaXBfYnl0ZShjb2RlYywgcGluX25pZCwgYnl0ZXNbaV0pOworfQorCitzdGF0aWMgYm9vbCBoZG1pX2luZm9mcmFtZV91cHRvZGF0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IHBpbl9uaWQsCisJCQkJICAgIHN0cnVjdCBoZG1pX2F1ZGlvX2luZm9mcmFtZSAqYWkpCit7CisJdTggKmJ5dGVzID0gKHU4ICopYWk7CisJdTggdmFsOworCWludCBpOworCisJaWYgKHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgcGluX25pZCwgMCwgQUNfVkVSQl9HRVRfSERNSV9ESVBfWE1JVCwgMCkKKwkJCQkJCQkgICAgIT0gQUNfRElQWE1JVF9CRVNUKQorCQlyZXR1cm4gZmFsc2U7CisKKwloZG1pX3NldF9kaXBfaW5kZXgoY29kZWMsIHBpbl9uaWQsIDB4MCwgMHgwKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKCphaSk7IGkrKykgeworCQl2YWwgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIHBpbl9uaWQsIDAsCisJCQkJCSBBQ19WRVJCX0dFVF9IRE1JX0RJUF9EQVRBLCAwKTsKKwkJaWYgKHZhbCAhPSBieXRlc1tpXSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgaGRtaV9zZXR1cF9hdWRpb19pbmZvZnJhbWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCisJCQkJCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBoZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwloZGFfbmlkX3QgcGluX25pZDsKKwlpbnQgaTsKKwlzdHJ1Y3QgaGRtaV9hdWRpb19pbmZvZnJhbWUgYWkgPSB7CisJCS50eXBlCQk9IDB4ODQsCisJCS52ZXIJCT0gMHgwMSwKKwkJLmxlbgkJPSAweDBhLAorCQkuQ0MwMl9DVDQ3CT0gc3Vic3RyZWFtLT5ydW50aW1lLT5jaGFubmVscyAtIDEsCisJfTsKKworCWhkbWlfc2V0dXBfY2hhbm5lbF9hbGxvY2F0aW9uKGNvZGVjLCBuaWQsICZhaSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX3BpbnM7IGkrKykgeworCQlpZiAoc3BlYy0+cGluX2N2dFtpXSAhPSBuaWQpCisJCQljb250aW51ZTsKKwkJaWYgKCFzcGVjLT5zaW5rX2VsZFtpXS5tb25pdG9yX3ByZXNlbnQpCisJCQljb250aW51ZTsKKworCQlwaW5fbmlkID0gc3BlYy0+cGluW2ldOworCQlpZiAoIWhkbWlfaW5mb2ZyYW1lX3VwdG9kYXRlKGNvZGVjLCBwaW5fbmlkLCAmYWkpKSB7CisJCQlzbmRfcHJpbnRkZCgiaGRtaV9zZXR1cF9hdWRpb19pbmZvZnJhbWU6ICIKKwkJCQkgICAgImN2dD0lZCBwaW49JWQgY2hhbm5lbHM9JWRcbiIsCisJCQkJICAgIG5pZCwgcGluX25pZCwKKwkJCQkgICAgc3Vic3RyZWFtLT5ydW50aW1lLT5jaGFubmVscyk7CisJCQloZG1pX3NldHVwX2NoYW5uZWxfbWFwcGluZyhjb2RlYywgcGluX25pZCwgJmFpKTsKKwkJCWhkbWlfc3RvcF9pbmZvZnJhbWVfdHJhbnMoY29kZWMsIHBpbl9uaWQpOworCQkJaGRtaV9maWxsX2F1ZGlvX2luZm9mcmFtZShjb2RlYywgcGluX25pZCwgJmFpKTsKKwkJCWhkbWlfc3RhcnRfaW5mb2ZyYW1lX3RyYW5zKGNvZGVjLCBwaW5fbmlkKTsKKwkJfQorCX0KK30KKworCisvKgorICogVW5zb2xpY2l0ZWQgZXZlbnRzCisgKi8KKworc3RhdGljIHZvaWQgaGRtaV9pbnRyaW5zaWNfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCit7CisJc3RydWN0IGhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCB0YWcgPSByZXMgPj4gQUNfVU5TT0xfUkVTX1RBR19TSElGVDsKKwlpbnQgcGluZCA9ICEhKHJlcyAmIEFDX1VOU09MX1JFU19QRCk7CisJaW50IGVsZHYgPSAhIShyZXMgJiBBQ19VTlNPTF9SRVNfRUxEVik7CisJaW50IGluZGV4OworCisJcHJpbnRrKEtFUk5fSU5GTworCQkiSERNSSBob3QgcGx1ZyBldmVudDogUGluPSVkIFByZXNlbmNlX0RldGVjdD0lZCBFTERfVmFsaWQ9JWRcbiIsCisJCXRhZywgcGluZCwgZWxkdik7CisKKwlpbmRleCA9IGhkYV9ub2RlX2luZGV4KHNwZWMtPnBpbiwgdGFnKTsKKwlpZiAoaW5kZXggPCAwKQorCQlyZXR1cm47CisKKwlzcGVjLT5zaW5rX2VsZFtpbmRleF0ubW9uaXRvcl9wcmVzZW50ID0gcGluZDsKKwlzcGVjLT5zaW5rX2VsZFtpbmRleF0uZWxkX3ZhbGlkID0gZWxkdjsKKworCWlmIChwaW5kICYmIGVsZHYpIHsKKwkJaGRtaV9nZXRfc2hvd19lbGQoY29kZWMsIHNwZWMtPnBpbltpbmRleF0sCisJCQkJICAmc3BlYy0+c2lua19lbGRbaW5kZXhdKTsKKwkJLyogVE9ETzogZG8gcmVhbCB0aGluZ3MgYWJvdXQgRUxEICovCisJfQorfQorCitzdGF0aWMgdm9pZCBoZG1pX25vbl9pbnRyaW5zaWNfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCit7CisJaW50IHRhZyA9IHJlcyA+PiBBQ19VTlNPTF9SRVNfVEFHX1NISUZUOworCWludCBzdWJ0YWcgPSAocmVzICYgQUNfVU5TT0xfUkVTX1NVQlRBRykgPj4gQUNfVU5TT0xfUkVTX1NVQlRBR19TSElGVDsKKwlpbnQgY3Bfc3RhdGUgPSAhIShyZXMgJiBBQ19VTlNPTF9SRVNfQ1BfU1RBVEUpOworCWludCBjcF9yZWFkeSA9ICEhKHJlcyAmIEFDX1VOU09MX1JFU19DUF9SRUFEWSk7CisKKwlwcmludGsoS0VSTl9JTkZPCisJCSJIRE1JIENQIGV2ZW50OiBQSU49JWQgU1VCVEFHPTB4JXggQ1BfU1RBVEU9JWQgQ1BfUkVBRFk9JWRcbiIsCisJCXRhZywKKwkJc3VidGFnLAorCQljcF9zdGF0ZSwKKwkJY3BfcmVhZHkpOworCisJLyogVE9ETyAqLworCWlmIChjcF9zdGF0ZSkKKwkJOworCWlmIChjcF9yZWFkeSkKKwkJOworfQorCisKK3N0YXRpYyB2b2lkIGhkbWlfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCit7CisJc3RydWN0IGhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCB0YWcgPSByZXMgPj4gQUNfVU5TT0xfUkVTX1RBR19TSElGVDsKKwlpbnQgc3VidGFnID0gKHJlcyAmIEFDX1VOU09MX1JFU19TVUJUQUcpID4+IEFDX1VOU09MX1JFU19TVUJUQUdfU0hJRlQ7CisKKwlpZiAoaGRhX25vZGVfaW5kZXgoc3BlYy0+cGluLCB0YWcpIDwgMCkgeworCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAiVW5leHBlY3RlZCBIRE1JIGV2ZW50IHRhZyAweCV4XG4iLCB0YWcpOworCQlyZXR1cm47CisJfQorCisJaWYgKHN1YnRhZyA9PSAwKQorCQloZG1pX2ludHJpbnNpY19ldmVudChjb2RlYywgcmVzKTsKKwllbHNlCisJCWhkbWlfbm9uX2ludHJpbnNpY19ldmVudChjb2RlYywgcmVzKTsKK30KKworLyoKKyAqIENhbGxiYWNrcworICovCisKK3N0YXRpYyB2b2lkIGhkbWlfc2V0dXBfc3RyZWFtKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCQkJICAgICAgdTMyIHN0cmVhbV90YWcsIGludCBmb3JtYXQpCit7CisJaW50IHRhZzsKKwlpbnQgZm10OworCisJdGFnID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfR0VUX0NPTlYsIDApID4+IDQ7CisJZm10ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfR0VUX1NUUkVBTV9GT1JNQVQsIDApOworCisJc25kX3ByaW50ZGQoImhkbWlfc2V0dXBfc3RyZWFtOiAiCisJCSAgICAiTklEPTB4JXgsICVzc3RyZWFtPTB4JXgsICVzZm9ybWF0PTB4JXhcbiIsCisJCSAgICBuaWQsCisJCSAgICB0YWcgPT0gc3RyZWFtX3RhZyA/ICIiIDogIm5ldy0iLAorCQkgICAgc3RyZWFtX3RhZywKKwkJICAgIGZtdCA9PSBmb3JtYXQgPyAiIiA6ICJuZXctIiwKKwkJICAgIGZvcm1hdCk7CisKKwlpZiAodGFnICE9IHN0cmVhbV90YWcpCisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKKwkJCQkgICAgQUNfVkVSQl9TRVRfQ0hBTk5FTF9TVFJFQU1JRCwKKwkJCQkgICAgc3RyZWFtX3RhZyA8PCA0KTsKKwlpZiAoZm10ICE9IGZvcm1hdCkKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9TVFJFQU1fRk9STUFULCBmb3JtYXQpOworfQorCisvKgorICogSERBL0hETUkgYXV0byBwYXJzaW5nCisgKi8KKworc3RhdGljIGludCBoZG1pX3JlYWRfcGluX2Nvbm4oc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkKQoreworCXN0cnVjdCBoZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwloZGFfbmlkX3QgY29ubl9saXN0W0hEQV9NQVhfQ09OTkVDVElPTlNdOworCWludCBjb25uX2xlbiwgY3VycjsKKwlpbnQgaW5kZXg7CisKKwlpZiAoIShnZXRfd2NhcHMoY29kZWMsIHBpbl9uaWQpICYgQUNfV0NBUF9DT05OX0xJU1QpKSB7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAiSERNSTogcGluICVkIHdjYXBzICUjeCAiCisJCQkgICAiZG9lcyBub3Qgc3VwcG9ydCBjb25uZWN0aW9uIGxpc3RcbiIsCisJCQkgICBwaW5fbmlkLCBnZXRfd2NhcHMoY29kZWMsIHBpbl9uaWQpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY29ubl9sZW4gPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgcGluX25pZCwgY29ubl9saXN0LAorCQkJCQkgICBIREFfTUFYX0NPTk5FQ1RJT05TKTsKKwlpZiAoY29ubl9sZW4gPiAxKQorCQljdXJyID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBwaW5fbmlkLCAwLAorCQkJCQkgIEFDX1ZFUkJfR0VUX0NPTk5FQ1RfU0VMLCAwKTsKKwllbHNlCisJCWN1cnIgPSAwOworCisJaW5kZXggPSBoZGFfbm9kZV9pbmRleChzcGVjLT5waW4sIHBpbl9uaWQpOworCWlmIChpbmRleCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJc3BlYy0+cGluX2N2dFtpbmRleF0gPSBjb25uX2xpc3RbY3Vycl07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGRtaV9wcmVzZW50X3NlbnNlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgcGluX25pZCwKKwkJCSAgICAgICBzdHJ1Y3QgaGRtaV9lbGQgKmVsZCkKK3sKKwlpbnQgcHJlc2VudCA9IHNuZF9oZGFfcGluX3NlbnNlKGNvZGVjLCBwaW5fbmlkKTsKKworCWVsZC0+bW9uaXRvcl9wcmVzZW50CT0gISEocHJlc2VudCAmIEFDX1BJTlNFTlNFX1BSRVNFTkNFKTsKKwllbGQtPmVsZF92YWxpZAkJPSAhIShwcmVzZW50ICYgQUNfUElOU0VOU0VfRUxEVik7CisKKwlpZiAocHJlc2VudCAmIEFDX1BJTlNFTlNFX0VMRFYpCisJCWhkbWlfZ2V0X3Nob3dfZWxkKGNvZGVjLCBwaW5fbmlkLCBlbGQpOworfQorCitzdGF0aWMgaW50IGhkbWlfYWRkX3BpbihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IHBpbl9uaWQpCit7CisJc3RydWN0IGhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCisJaWYgKHNwZWMtPm51bV9waW5zID49IE1BWF9IRE1JX1BJTlMpIHsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICJIRE1JOiBubyBzcGFjZSBmb3IgcGluICVkXG4iLCBwaW5fbmlkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaGRtaV9wcmVzZW50X3NlbnNlKGNvZGVjLCBwaW5fbmlkLCAmc3BlYy0+c2lua19lbGRbc3BlYy0+bnVtX3BpbnNdKTsKKworCXNwZWMtPnBpbltzcGVjLT5udW1fcGluc10gPSBwaW5fbmlkOworCXNwZWMtPm51bV9waW5zKys7CisKKwkvKgorCSAqIEl0IGlzIGFzc3VtZWQgdGhhdCBjb252ZXJ0ZXIgbm9kZXMgY29tZSBmaXJzdCBpbiB0aGUgbm9kZSBsaXN0IGFuZAorCSAqIGhlbmNlIGhhdmUgYmVlbiByZWdpc3RlcmVkIGFuZCB1c2FibGUgbm93LgorCSAqLworCXJldHVybiBoZG1pX3JlYWRfcGluX2Nvbm4oY29kZWMsIHBpbl9uaWQpOworfQorCitzdGF0aWMgaW50IGhkbWlfYWRkX2N2dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKK3sKKwlzdHJ1Y3QgaGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisKKwlpZiAoc3BlYy0+bnVtX2N2dHMgPj0gTUFYX0hETUlfQ1ZUUykgeworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgIkhETUk6IG5vIHNwYWNlIGZvciBjb252ZXJ0ZXIgJWRcbiIsIG5pZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNwZWMtPmN2dFtzcGVjLT5udW1fY3Z0c10gPSBuaWQ7CisJc3BlYy0+bnVtX2N2dHMrKzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhkbWlfcGFyc2VfY29kZWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJaGRhX25pZF90IG5pZDsKKwlpbnQgaSwgbm9kZXM7CisKKwlub2RlcyA9IHNuZF9oZGFfZ2V0X3N1Yl9ub2Rlcyhjb2RlYywgY29kZWMtPmFmZywgJm5pZCk7CisJaWYgKCFuaWQgfHwgbm9kZXMgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJIRE1JOiBmYWlsZWQgdG8gZ2V0IGFmZyBzdWIgbm9kZXNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbm9kZXM7IGkrKywgbmlkKyspIHsKKwkJdW5zaWduZWQgaW50IGNhcHM7CisJCXVuc2lnbmVkIGludCB0eXBlOworCisJCWNhcHMgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwgQUNfUEFSX0FVRElPX1dJREdFVF9DQVApOworCQl0eXBlID0gZ2V0X3djYXBzX3R5cGUoY2Fwcyk7CisKKwkJaWYgKCEoY2FwcyAmIEFDX1dDQVBfRElHSVRBTCkpCisJCQljb250aW51ZTsKKworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBBQ19XSURfQVVEX09VVDoKKwkJCWlmIChoZG1pX2FkZF9jdnQoY29kZWMsIG5pZCkgPCAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CisJCWNhc2UgQUNfV0lEX1BJTjoKKwkJCWNhcHMgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwgQUNfUEFSX1BJTl9DQVApOworCQkJaWYgKCEoY2FwcyAmIChBQ19QSU5DQVBfSERNSSB8IEFDX1BJTkNBUF9EUCkpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGhkbWlfYWRkX3Bpbihjb2RlYywgbmlkKSA8IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qCisJICogRzQ1L0liZXhQZWFrIGRvbid0IHN1cHBvcnQgRVBTUzogdGhlIHVuc29saWNpdGVkIHBpbiBob3QgcGx1ZyBldmVudAorCSAqIGNhbiBiZSBsb3N0IGFuZCBwcmVzZW5jZSBzZW5zZSB2ZXJiIHdpbGwgYmVjb21lIGluYWNjdXJhdGUgaWYgdGhlCisJICogSERBIGxpbmsgaXMgcG93ZXJlZCBvZmYgYXQgaG90IHBsdWcgb3IgaHcgaW5pdGlhbGl6YXRpb24gdGltZS4KKwkgKi8KKyNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCisJaWYgKCEoc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBjb2RlYy0+YWZnLCBBQ19QQVJfUE9XRVJfU1RBVEUpICYKKwkgICAgICBBQ19QV1JTVF9FUFNTKSkKKwkJY29kZWMtPmJ1cy0+cG93ZXJfa2VlcF9saW5rX29uID0gMTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaW50ZWxoZG1pLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2ludGVsaGRtaS5jCmluZGV4IDkxOGY0MDMuLjg4ZDAzNTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaW50ZWxoZG1pLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9pbnRlbGhkbWkuYwpAQCAtNDAsODE0ICs0MCwxOSBAQAogICoKICAqIFRoZSBIREEgY29ycmVzcG9uZGVuY2Ugb2YgcGlwZXMvcG9ydHMgYXJlIGNvbnZlcnRlci9waW4gbm9kZXMuCiAgKi8KLSNkZWZpbmUgSU5URUxfSERNSV9DVlRTCTIKLSNkZWZpbmUgSU5URUxfSERNSV9QSU5TCTMKKyNkZWZpbmUgTUFYX0hETUlfQ1ZUUwkyCisjZGVmaW5lIE1BWF9IRE1JX1BJTlMJMwogCi1zdGF0aWMgY2hhciAqaW50ZWxfaGRtaV9wY21fbmFtZXNbSU5URUxfSERNSV9DVlRTXSA9IHsKKyNpbmNsdWRlICJwYXRjaF9oZG1pLmMiCisKK3N0YXRpYyBjaGFyICppbnRlbF9oZG1pX3BjbV9uYW1lc1tNQVhfSERNSV9DVlRTXSA9IHsKIAkiSU5URUwgSERNSSAwIiwKIAkiSU5URUwgSERNSSAxIiwKIH07CiAKLXN0cnVjdCBpbnRlbF9oZG1pX3NwZWMgewotCWludCBudW1fY3Z0czsKLQlpbnQgbnVtX3BpbnM7Ci0JaGRhX25pZF90IGN2dFtJTlRFTF9IRE1JX0NWVFMrMV07ICAvKiBhdWRpbyBzb3VyY2VzICovCi0JaGRhX25pZF90IHBpbltJTlRFTF9IRE1JX1BJTlMrMV07ICAvKiBhdWRpbyBzaW5rcyAqLwotCi0JLyoKLQkgKiBzb3VyY2UgY29ubmVjdGlvbiBmb3IgZWFjaCBwaW4KLQkgKi8KLQloZGFfbmlkX3QgcGluX2N2dFtJTlRFTF9IRE1JX1BJTlMrMV07Ci0KLQkvKgotCSAqIEhETUkgc2luayBhdHRhY2hlZCB0byBlYWNoIHBpbgotCSAqLwotCXN0cnVjdCBoZG1pX2VsZCBzaW5rX2VsZFtJTlRFTF9IRE1JX1BJTlNdOwotCi0JLyoKLQkgKiBleHBvcnQgb25lIHBjbSBwZXIgcGlwZQotCSAqLwotCXN0cnVjdCBoZGFfcGNtCXBjbV9yZWNbSU5URUxfSERNSV9DVlRTXTsKLX07Ci0KLXN0cnVjdCBoZG1pX2F1ZGlvX2luZm9mcmFtZSB7Ci0JdTggdHlwZTsgLyogMHg4NCAqLwotCXU4IHZlcjsgIC8qIDB4MDEgKi8KLQl1OCBsZW47ICAvKiAweDBhICovCi0KLQl1OCBjaGVja3N1bTsJLyogUEIwICovCi0JdTggQ0MwMl9DVDQ3OwkvKiBDQyBpbiBiaXRzIDA6MiwgQ1QgaW4gNDo3ICovCi0JdTggU1MwMV9TRjI0OwotCXU4IENYVDA0OwotCXU4IENBOwotCXU4IExGRVBCTDAxX0xTVjM2X0RNX0lOSDc7Ci0JdTggcmVzZXJ2ZWRbNV07CS8qIFBCNiAtIFBCMTAgKi8KLX07Ci0KIC8qCi0gKiBDRUEgc3BlYWtlciBwbGFjZW1lbnQ6Ci0gKgotICogICAgICAgIEZMSCAgICAgICBGQ0ggICAgICAgIEZSSAotICogIEZMVyAgICBGTCAgRkxDICAgRkMgICBGUkMgICBGUiAgIEZSVwotICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExGRQotICogICAgICAgICAgICAgICAgICAgICBUQwotICoKLSAqICAgICAgICAgIFJMICBSTEMgICBSQyAgIFJSQyAgIFJSCi0gKgotICogVGhlIExlZnQvUmlnaHQgU3Vycm91bmQgY2hhbm5lbCBfbm90aW9uc18gTFMvUlMgaW4gU01QVEUgMzIwTSBjb3JyZXNwb25kcyB0bwotICogQ0VBIFJML1JSOyBUaGUgU01QVEUgY2hhbm5lbCBfYXNzaWdubWVudF8gQy9MRkUgaXMgc3dhcHBlZCB0byBDRUEgTEZFL0ZDLgorICogSERNSSBjYWxsYmFja3MKICAqLwotZW51bSBjZWFfc3BlYWtlcl9wbGFjZW1lbnQgewotCUZMICA9ICgxIDw8ICAwKSwJLyogRnJvbnQgTGVmdCAgICAgICAgICAgKi8KLQlGQyAgPSAoMSA8PCAgMSksCS8qIEZyb250IENlbnRlciAgICAgICAgICovCi0JRlIgID0gKDEgPDwgIDIpLAkvKiBGcm9udCBSaWdodCAgICAgICAgICAqLwotCUZMQyA9ICgxIDw8ICAzKSwJLyogRnJvbnQgTGVmdCBDZW50ZXIgICAgKi8KLQlGUkMgPSAoMSA8PCAgNCksCS8qIEZyb250IFJpZ2h0IENlbnRlciAgICovCi0JUkwgID0gKDEgPDwgIDUpLAkvKiBSZWFyIExlZnQgICAgICAgICAgICAqLwotCVJDICA9ICgxIDw8ICA2KSwJLyogUmVhciBDZW50ZXIgICAgICAgICAgKi8KLQlSUiAgPSAoMSA8PCAgNyksCS8qIFJlYXIgUmlnaHQgICAgICAgICAgICovCi0JUkxDID0gKDEgPDwgIDgpLAkvKiBSZWFyIExlZnQgQ2VudGVyICAgICAqLwotCVJSQyA9ICgxIDw8ICA5KSwJLyogUmVhciBSaWdodCBDZW50ZXIgICAgKi8KLQlMRkUgPSAoMSA8PCAxMCksCS8qIExvdyBGcmVxdWVuY3kgRWZmZWN0ICovCi0JRkxXID0gKDEgPDwgMTEpLAkvKiBGcm9udCBMZWZ0IFdpZGUgICAgICAqLwotCUZSVyA9ICgxIDw8IDEyKSwJLyogRnJvbnQgUmlnaHQgV2lkZSAgICAgKi8KLQlGTEggPSAoMSA8PCAxMyksCS8qIEZyb250IExlZnQgSGlnaCAgICAgICovCi0JRkNIID0gKDEgPDwgMTQpLAkvKiBGcm9udCBDZW50ZXIgSGlnaCAgICAqLwotCUZSSCA9ICgxIDw8IDE1KSwJLyogRnJvbnQgUmlnaHQgSGlnaCAgICAgKi8KLQlUQyAgPSAoMSA8PCAxNiksCS8qIFRvcCBDZW50ZXIgICAgICAgICAgICovCi19OwotCi0vKgotICogRUxEIFNBIGJpdHMgaW4gdGhlIENFQSBTcGVha2VyIEFsbG9jYXRpb24gZGF0YSBibG9jawotICovCi1zdGF0aWMgaW50IGVsZF9zcGVha2VyX2FsbG9jYXRpb25fYml0c1tdID0gewotCVswXSA9IEZMIHwgRlIsCi0JWzFdID0gTEZFLAotCVsyXSA9IEZDLAotCVszXSA9IFJMIHwgUlIsCi0JWzRdID0gUkMsCi0JWzVdID0gRkxDIHwgRlJDLAotCVs2XSA9IFJMQyB8IFJSQywKLQkvKiB0aGUgZm9sbG93aW5nIGFyZSBub3QgZGVmaW5lZCBpbiBFTEQgeWV0ICovCi0JWzddID0gRkxXIHwgRlJXLAotCVs4XSA9IEZMSCB8IEZSSCwKLQlbOV0gPSBUQywKLQlbMTBdID0gRkNILAotfTsKLQotc3RydWN0IGNlYV9jaGFubmVsX3NwZWFrZXJfYWxsb2NhdGlvbiB7Ci0JaW50IGNhX2luZGV4OwotCWludCBzcGVha2Vyc1s4XTsKLQotCS8qIGRlcml2ZWQgdmFsdWVzLCBqdXN0IGZvciBjb252ZW5pZW5jZSAqLwotCWludCBjaGFubmVsczsKLQlpbnQgc3BrX21hc2s7Ci19OwotCi0vKgotICogQUxTQSBzZXF1ZW5jZSBpczoKLSAqCi0gKiAgICAgICBzdXJyb3VuZDQwICAgc3Vycm91bmQ0MSAgIHN1cnJvdW5kNTAgICBzdXJyb3VuZDUxICAgc3Vycm91bmQ3MQotICogY2gwICAgZnJvbnQgbGVmdCAgID0gICAgICAgICAgICA9ICAgICAgICAgICAgPSAgICAgICAgICAgID0KLSAqIGNoMSAgIGZyb250IHJpZ2h0ICA9ICAgICAgICAgICAgPSAgICAgICAgICAgID0gICAgICAgICAgICA9Ci0gKiBjaDIgICByZWFyIGxlZnQgICAgPSAgICAgICAgICAgID0gICAgICAgICAgICA9ICAgICAgICAgICAgPQotICogY2gzICAgcmVhciByaWdodCAgID0gICAgICAgICAgICA9ICAgICAgICAgICAgPSAgICAgICAgICAgID0KLSAqIGNoNCAgICAgICAgICAgICAgICBMRkUgICAgICAgICAgY2VudGVyICAgICAgIGNlbnRlciAgICAgICBjZW50ZXIKLSAqIGNoNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExGRSAgICAgICAgICBMRkUKLSAqIGNoNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWRlIGxlZnQKLSAqIGNoNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWRlIHJpZ2h0Ci0gKgotICogc3Vycm91bmQ3MSA9IHtGTCwgRlIsIFJMQywgUlJDLCBGQywgTEZFLCBSTCwgUlJ9Ci0gKi8KLXN0YXRpYyBpbnQgaGRtaV9jaGFubmVsX21hcHBpbmdbMHgzMl1bOF0gPSB7Ci0JLyogc3RlcmVvICovCi0JWzB4MDBdID0geyAweDAwLCAweDExLCAweGYyLCAweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3IH0sCi0JLyogMi4xICovCi0JWzB4MDFdID0geyAweDAwLCAweDExLCAweDIyLCAweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3IH0sCi0JLyogRG9sYnkgU3Vycm91bmQgKi8KLQlbMHgwMl0gPSB7IDB4MDAsIDB4MTEsIDB4MjMsIDB4ZjIsIDB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcgfSwKLQkvKiBzdXJyb3VuZDQwICovCi0JWzB4MDhdID0geyAweDAwLCAweDExLCAweDI0LCAweDM1LCAweGYzLCAweGYyLCAweGY2LCAweGY3IH0sCi0JLyogNGNoICovCi0JWzB4MDNdID0geyAweDAwLCAweDExLCAweDIzLCAweDMyLCAweDQ0LCAweGY1LCAweGY2LCAweGY3IH0sCi0JLyogc3Vycm91bmQ0MSAqLwotCVsweDA5XSA9IHsgMHgwMCwgMHgxMSwgMHgyNCwgMHgzNCwgMHg0MywgMHhmMiwgMHhmNiwgMHhmNyB9LAotCS8qIHN1cnJvdW5kNTAgKi8KLQlbMHgwYV0gPSB7IDB4MDAsIDB4MTEsIDB4MjQsIDB4MzUsIDB4NDMsIDB4ZjIsIDB4ZjYsIDB4ZjcgfSwKLQkvKiBzdXJyb3VuZDUxICovCi0JWzB4MGJdID0geyAweDAwLCAweDExLCAweDI0LCAweDM1LCAweDQzLCAweDUyLCAweGY2LCAweGY3IH0sCi0JLyogNy4xICovCi0JWzB4MTNdID0geyAweDAwLCAweDExLCAweDI2LCAweDM3LCAweDQzLCAweDUyLCAweDY0LCAweDc1IH0sCi19OwotCi0vKgotICogVGhpcyBpcyBhbiBvcmRlcmVkIGxpc3QhCi0gKgotICogVGhlIHByZWNlZGluZyBvbmVzIGhhdmUgYmV0dGVyIGNoYW5jZXMgdG8gYmUgc2VsZWN0ZWQgYnkKLSAqIGhkbWlfc2V0dXBfY2hhbm5lbF9hbGxvY2F0aW9uKCkuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2VhX2NoYW5uZWxfc3BlYWtlcl9hbGxvY2F0aW9uIGNoYW5uZWxfYWxsb2NhdGlvbnNbXSA9IHsKLS8qIAkJCSAgY2hhbm5lbDogICA3ICAgICA2ICAgIDUgICAgNCAgICAzICAgICAyICAgIDEgICAgMCAgKi8KLXsgLmNhX2luZGV4ID0gMHgwMCwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgIDAsICAgMCwgICAwLCAgICAwLCAgRlIsICBGTCB9IH0sCi0JCQkJIC8qIDIuMSAqLwoteyAuY2FfaW5kZXggPSAweDAxLCAgLnNwZWFrZXJzID0geyAgIDAsICAgIDAsICAgMCwgICAwLCAgIDAsICBMRkUsICBGUiwgIEZMIH0gfSwKLQkJCQkgLyogRG9sYnkgU3Vycm91bmQgKi8KLXsgLmNhX2luZGV4ID0gMHgwMiwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgIDAsICAgMCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCi0JCQkJIC8qIHN1cnJvdW5kNDAgKi8KLXsgLmNhX2luZGV4ID0gMHgwOCwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgUlIsICBSTCwgICAwLCAgICAwLCAgRlIsICBGTCB9IH0sCi0JCQkJIC8qIHN1cnJvdW5kNDEgKi8KLXsgLmNhX2luZGV4ID0gMHgwOSwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgUlIsICBSTCwgICAwLCAgTEZFLCAgRlIsICBGTCB9IH0sCi0JCQkJIC8qIHN1cnJvdW5kNTAgKi8KLXsgLmNhX2luZGV4ID0gMHgwYSwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgUlIsICBSTCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCi0JCQkJIC8qIHN1cnJvdW5kNTEgKi8KLXsgLmNhX2luZGV4ID0gMHgwYiwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgUlIsICBSTCwgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCi0JCQkJIC8qIDYuMSAqLwoteyAuY2FfaW5kZXggPSAweDBmLCAgLnNwZWFrZXJzID0geyAgIDAsICAgUkMsICBSUiwgIFJMLCAgRkMsICBMRkUsICBGUiwgIEZMIH0gfSwKLQkJCQkgLyogc3Vycm91bmQ3MSAqLwoteyAuY2FfaW5kZXggPSAweDEzLCAgLnNwZWFrZXJzID0geyBSUkMsICBSTEMsICBSUiwgIFJMLCAgRkMsICBMRkUsICBGUiwgIEZMIH0gfSwKLQoteyAuY2FfaW5kZXggPSAweDAzLCAgLnNwZWFrZXJzID0geyAgIDAsICAgIDAsICAgMCwgICAwLCAgRkMsICBMRkUsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgwNCwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgIDAsICBSQywgICAwLCAgICAwLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MDUsICAuc3BlYWtlcnMgPSB7ICAgMCwgICAgMCwgICAwLCAgUkMsICAgMCwgIExGRSwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDA2LCAgLnNwZWFrZXJzID0geyAgIDAsICAgIDAsICAgMCwgIFJDLCAgRkMsICAgIDAsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgwNywgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgIDAsICBSQywgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MGMsICAuc3BlYWtlcnMgPSB7ICAgMCwgICBSQywgIFJSLCAgUkwsICAgMCwgICAgMCwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDBkLCAgLnNwZWFrZXJzID0geyAgIDAsICAgUkMsICBSUiwgIFJMLCAgIDAsICBMRkUsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgwZSwgIC5zcGVha2VycyA9IHsgICAwLCAgIFJDLCAgUlIsICBSTCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MTAsICAuc3BlYWtlcnMgPSB7IFJSQywgIFJMQywgIFJSLCAgUkwsICAgMCwgICAgMCwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDExLCAgLnNwZWFrZXJzID0geyBSUkMsICBSTEMsICBSUiwgIFJMLCAgIDAsICBMRkUsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgxMiwgIC5zcGVha2VycyA9IHsgUlJDLCAgUkxDLCAgUlIsICBSTCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MTQsICAuc3BlYWtlcnMgPSB7IEZSQywgIEZMQywgICAwLCAgIDAsICAgMCwgICAgMCwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDE1LCAgLnNwZWFrZXJzID0geyBGUkMsICBGTEMsICAgMCwgICAwLCAgIDAsICBMRkUsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgxNiwgIC5zcGVha2VycyA9IHsgRlJDLCAgRkxDLCAgIDAsICAgMCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MTcsICAuc3BlYWtlcnMgPSB7IEZSQywgIEZMQywgICAwLCAgIDAsICBGQywgIExGRSwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDE4LCAgLnNwZWFrZXJzID0geyBGUkMsICBGTEMsICAgMCwgIFJDLCAgIDAsICAgIDAsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgxOSwgIC5zcGVha2VycyA9IHsgRlJDLCAgRkxDLCAgIDAsICBSQywgICAwLCAgTEZFLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MWEsICAuc3BlYWtlcnMgPSB7IEZSQywgIEZMQywgICAwLCAgUkMsICBGQywgICAgMCwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDFiLCAgLnNwZWFrZXJzID0geyBGUkMsICBGTEMsICAgMCwgIFJDLCAgRkMsICBMRkUsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgxYywgIC5zcGVha2VycyA9IHsgRlJDLCAgRkxDLCAgUlIsICBSTCwgICAwLCAgICAwLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MWQsICAuc3BlYWtlcnMgPSB7IEZSQywgIEZMQywgIFJSLCAgUkwsICAgMCwgIExGRSwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDFlLCAgLnNwZWFrZXJzID0geyBGUkMsICBGTEMsICBSUiwgIFJMLCAgRkMsICAgIDAsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgxZiwgIC5zcGVha2VycyA9IHsgRlJDLCAgRkxDLCAgUlIsICBSTCwgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MjAsICAuc3BlYWtlcnMgPSB7ICAgMCwgIEZDSCwgIFJSLCAgUkwsICBGQywgICAgMCwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDIxLCAgLnNwZWFrZXJzID0geyAgIDAsICBGQ0gsICBSUiwgIFJMLCAgRkMsICBMRkUsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgyMiwgIC5zcGVha2VycyA9IHsgIFRDLCAgICAwLCAgUlIsICBSTCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MjMsICAuc3BlYWtlcnMgPSB7ICBUQywgICAgMCwgIFJSLCAgUkwsICBGQywgIExGRSwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDI0LCAgLnNwZWFrZXJzID0geyBGUkgsICBGTEgsICBSUiwgIFJMLCAgIDAsICAgIDAsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgyNSwgIC5zcGVha2VycyA9IHsgRlJILCAgRkxILCAgUlIsICBSTCwgICAwLCAgTEZFLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MjYsICAuc3BlYWtlcnMgPSB7IEZSVywgIEZMVywgIFJSLCAgUkwsICAgMCwgICAgMCwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDI3LCAgLnNwZWFrZXJzID0geyBGUlcsICBGTFcsICBSUiwgIFJMLCAgIDAsICBMRkUsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgyOCwgIC5zcGVha2VycyA9IHsgIFRDLCAgIFJDLCAgUlIsICBSTCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MjksICAuc3BlYWtlcnMgPSB7ICBUQywgICBSQywgIFJSLCAgUkwsICBGQywgIExGRSwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDJhLCAgLnNwZWFrZXJzID0geyBGQ0gsICAgUkMsICBSUiwgIFJMLCAgRkMsICAgIDAsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgyYiwgIC5zcGVha2VycyA9IHsgRkNILCAgIFJDLCAgUlIsICBSTCwgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MmMsICAuc3BlYWtlcnMgPSB7ICBUQywgIEZDSCwgIFJSLCAgUkwsICBGQywgICAgMCwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDJkLCAgLnNwZWFrZXJzID0geyAgVEMsICBGQ0gsICBSUiwgIFJMLCAgRkMsICBMRkUsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgyZSwgIC5zcGVha2VycyA9IHsgRlJILCAgRkxILCAgUlIsICBSTCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MmYsICAuc3BlYWtlcnMgPSB7IEZSSCwgIEZMSCwgIFJSLCAgUkwsICBGQywgIExGRSwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDMwLCAgLnNwZWFrZXJzID0geyBGUlcsICBGTFcsICBSUiwgIFJMLCAgRkMsICAgIDAsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgzMSwgIC5zcGVha2VycyA9IHsgRlJXLCAgRkxXLCAgUlIsICBSTCwgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCi19OwotCi0vKgotICogSERBL0hETUkgYXV0byBwYXJzaW5nCi0gKi8KLQotc3RhdGljIGludCBoZGFfbm9kZV9pbmRleChoZGFfbmlkX3QgKm5pZHMsIGhkYV9uaWRfdCBuaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBuaWRzW2ldOyBpKyspCi0JCWlmIChuaWRzW2ldID09IG5pZCkKLQkJCXJldHVybiBpOwotCi0Jc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIkhETUk6IG5pZCAlZCBub3QgcmVnaXN0ZXJlZFxuIiwgbmlkKTsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIGludCBpbnRlbF9oZG1pX3JlYWRfcGluX2Nvbm4oc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkKQotewotCXN0cnVjdCBpbnRlbF9oZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQloZGFfbmlkX3QgY29ubl9saXN0W0hEQV9NQVhfQ09OTkVDVElPTlNdOwotCWludCBjb25uX2xlbiwgY3VycjsKLQlpbnQgaW5kZXg7Ci0KLQlpZiAoIShnZXRfd2NhcHMoY29kZWMsIHBpbl9uaWQpICYgQUNfV0NBUF9DT05OX0xJU1QpKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAiSERNSTogcGluICVkIHdjYXBzICUjeCAiCi0JCQkgICAiZG9lcyBub3Qgc3VwcG9ydCBjb25uZWN0aW9uIGxpc3RcbiIsCi0JCQkgICBwaW5fbmlkLCBnZXRfd2NhcHMoY29kZWMsIHBpbl9uaWQpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JY29ubl9sZW4gPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgcGluX25pZCwgY29ubl9saXN0LAotCQkJCQkgICBIREFfTUFYX0NPTk5FQ1RJT05TKTsKLQlpZiAoY29ubl9sZW4gPiAxKQotCQljdXJyID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJCQkgIEFDX1ZFUkJfR0VUX0NPTk5FQ1RfU0VMLCAwKTsKLQllbHNlCi0JCWN1cnIgPSAwOwotCi0JaW5kZXggPSBoZGFfbm9kZV9pbmRleChzcGVjLT5waW4sIHBpbl9uaWQpOwotCWlmIChpbmRleCA8IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3BlYy0+cGluX2N2dFtpbmRleF0gPSBjb25uX2xpc3RbY3Vycl07Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaGRtaV9nZXRfc2hvd19lbGQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkLAotCQkJICAgICAgc3RydWN0IGhkbWlfZWxkICplbGQpCi17Ci0JaWYgKCFzbmRfaGRtaV9nZXRfZWxkKGVsZCwgY29kZWMsIHBpbl9uaWQpKQotCQlzbmRfaGRtaV9zaG93X2VsZChlbGQpOwotfQotCi1zdGF0aWMgdm9pZCBoZG1pX3ByZXNlbnRfc2Vuc2Uoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkLAotCQkJICAgICAgIHN0cnVjdCBoZG1pX2VsZCAqZWxkKQotewotCWludCBwcmVzZW50ID0gc25kX2hkYV9waW5fc2Vuc2UoY29kZWMsIHBpbl9uaWQpOwotCi0JZWxkLT5tb25pdG9yX3ByZXNlbnQJPSAhIShwcmVzZW50ICYgQUNfUElOU0VOU0VfUFJFU0VOQ0UpOwotCWVsZC0+ZWxkX3ZhbGlkCQk9ICEhKHByZXNlbnQgJiBBQ19QSU5TRU5TRV9FTERWKTsKLQotCWlmIChwcmVzZW50ICYgQUNfUElOU0VOU0VfRUxEVikKLQkJaGRtaV9nZXRfc2hvd19lbGQoY29kZWMsIHBpbl9uaWQsIGVsZCk7Ci19Ci0KLXN0YXRpYyBpbnQgaW50ZWxfaGRtaV9hZGRfcGluKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgcGluX25pZCkKLXsKLQlzdHJ1Y3QgaW50ZWxfaGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0KLQlpZiAoc3BlYy0+bnVtX3BpbnMgPj0gSU5URUxfSERNSV9QSU5TKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAiSERNSTogbm8gc3BhY2UgZm9yIHBpbiAlZCBcbiIsIHBpbl9uaWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQloZG1pX3ByZXNlbnRfc2Vuc2UoY29kZWMsIHBpbl9uaWQsICZzcGVjLT5zaW5rX2VsZFtzcGVjLT5udW1fcGluc10pOwotCi0Jc3BlYy0+cGluW3NwZWMtPm51bV9waW5zXSA9IHBpbl9uaWQ7Ci0Jc3BlYy0+bnVtX3BpbnMrKzsKLQotCS8qCi0JICogSXQgaXMgYXNzdW1lZCB0aGF0IGNvbnZlcnRlciBub2RlcyBjb21lIGZpcnN0IGluIHRoZSBub2RlIGxpc3QgYW5kCi0JICogaGVuY2UgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgYW5kIHVzYWJsZSBub3cuCi0JICovCi0JcmV0dXJuIGludGVsX2hkbWlfcmVhZF9waW5fY29ubihjb2RlYywgcGluX25pZCk7Ci19Ci0KLXN0YXRpYyBpbnQgaW50ZWxfaGRtaV9hZGRfY3Z0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQotewotCXN0cnVjdCBpbnRlbF9oZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQotCWlmIChzcGVjLT5udW1fY3Z0cyA+PSBJTlRFTF9IRE1JX0NWVFMpIHsKLQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICJIRE1JOiBubyBzcGFjZSBmb3IgY29udmVydGVyICVkIFxuIiwgbmlkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3BlYy0+Y3Z0W3NwZWMtPm51bV9jdnRzXSA9IG5pZDsKLQlzcGVjLT5udW1fY3Z0cysrOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW50ZWxfaGRtaV9wYXJzZV9jb2RlYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQloZGFfbmlkX3QgbmlkOwotCWludCBpLCBub2RlczsKLQotCW5vZGVzID0gc25kX2hkYV9nZXRfc3ViX25vZGVzKGNvZGVjLCBjb2RlYy0+YWZnLCAmbmlkKTsKLQlpZiAoIW5pZCB8fCBub2RlcyA8IDApIHsKLQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIkhETUk6IGZhaWxlZCB0byBnZXQgYWZnIHN1YiBub2Rlc1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBub2RlczsgaSsrLCBuaWQrKykgewotCQl1bnNpZ25lZCBpbnQgY2FwczsKLQkJdW5zaWduZWQgaW50IHR5cGU7Ci0KLQkJY2FwcyA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLCBBQ19QQVJfQVVESU9fV0lER0VUX0NBUCk7Ci0JCXR5cGUgPSBnZXRfd2NhcHNfdHlwZShjYXBzKTsKLQotCQlpZiAoIShjYXBzICYgQUNfV0NBUF9ESUdJVEFMKSkKLQkJCWNvbnRpbnVlOwotCi0JCXN3aXRjaCAodHlwZSkgewotCQljYXNlIEFDX1dJRF9BVURfT1VUOgotCQkJaWYgKGludGVsX2hkbWlfYWRkX2N2dChjb2RlYywgbmlkKSA8IDApCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJY2FzZSBBQ19XSURfUElOOgotCQkJY2FwcyA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLCBBQ19QQVJfUElOX0NBUCk7Ci0JCQlpZiAoIShjYXBzICYgKEFDX1BJTkNBUF9IRE1JIHwgQUNfUElOQ0FQX0RQKSkpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoaW50ZWxfaGRtaV9hZGRfcGluKGNvZGVjLCBuaWQpIDwgMCkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBHNDUvSWJleFBlYWsgZG9uJ3Qgc3VwcG9ydCBFUFNTOiB0aGUgdW5zb2xpY2l0ZWQgcGluIGhvdCBwbHVnIGV2ZW50Ci0JICogY2FuIGJlIGxvc3QgYW5kIHByZXNlbmNlIHNlbnNlIHZlcmIgd2lsbCBiZWNvbWUgaW5hY2N1cmF0ZSBpZiB0aGUKLQkgKiBIREEgbGluayBpcyBwb3dlcmVkIG9mZiBhdCBob3QgcGx1ZyBvciBodyBpbml0aWFsaXphdGlvbiB0aW1lLgotCSAqLwotI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKLQlpZiAoIShzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIGNvZGVjLT5hZmcsIEFDX1BBUl9QT1dFUl9TVEFURSkgJgotCSAgICAgIEFDX1BXUlNUX0VQU1MpKQotCQljb2RlYy0+YnVzLT5wb3dlcl9rZWVwX2xpbmtfb24gPSAxOwotI2VuZGlmCi0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEhETUkgcm91dGluZXMKLSAqLwotCi0jaWZkZWYgQkVfUEFSQU5PSUQKLXN0YXRpYyB2b2lkIGhkbWlfZ2V0X2RpcF9pbmRleChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IHBpbl9uaWQsCi0JCQkJaW50ICpwYWNrZXRfaW5kZXgsIGludCAqYnl0ZV9pbmRleCkKLXsKLQlpbnQgdmFsOwotCi0JdmFsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJCSBBQ19WRVJCX0dFVF9IRE1JX0RJUF9JTkRFWCwgMCk7Ci0KLQkqcGFja2V0X2luZGV4ID0gdmFsID4+IDU7Ci0JKmJ5dGVfaW5kZXggPSB2YWwgJiAweDFmOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIGhkbWlfc2V0X2RpcF9pbmRleChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IHBpbl9uaWQsCi0JCQkJaW50IHBhY2tldF9pbmRleCwgaW50IGJ5dGVfaW5kZXgpCi17Ci0JaW50IHZhbDsKLQotCXZhbCA9IChwYWNrZXRfaW5kZXggPDwgNSkgfCAoYnl0ZV9pbmRleCAmIDB4MWYpOwotCi0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwgQUNfVkVSQl9TRVRfSERNSV9ESVBfSU5ERVgsIHZhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhkbWlfd3JpdGVfZGlwX2J5dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkLAotCQkJCXVuc2lnbmVkIGNoYXIgdmFsKQotewotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsIEFDX1ZFUkJfU0VUX0hETUlfRElQX0RBVEEsIHZhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhkbWlfZW5hYmxlX291dHB1dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IHBpbl9uaWQpCi17Ci0JLyogVW5tdXRlICovCi0JaWYgKGdldF93Y2Fwcyhjb2RlYywgcGluX25pZCkgJiBBQ19XQ0FQX09VVF9BTVApCi0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsCi0JCQkJQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUpOwotCS8qIEVuYWJsZSBwaW4gb3V0ICovCi0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKLQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQpOwotfQotCi0vKgotICogRW5hYmxlIEF1ZGlvIEluZm9GcmFtZSBUcmFuc21pc3Npb24KLSAqLwotc3RhdGljIHZvaWQgaGRtaV9zdGFydF9pbmZvZnJhbWVfdHJhbnMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJICAgICAgIGhkYV9uaWRfdCBwaW5fbmlkKQotewotCWhkbWlfc2V0X2RpcF9pbmRleChjb2RlYywgcGluX25pZCwgMHgwLCAweDApOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsIEFDX1ZFUkJfU0VUX0hETUlfRElQX1hNSVQsCi0JCQkJCQlBQ19ESVBYTUlUX0JFU1QpOwotfQotCi0vKgotICogRGlzYWJsZSBBdWRpbyBJbmZvRnJhbWUgVHJhbnNtaXNzaW9uCi0gKi8KLXN0YXRpYyB2b2lkIGhkbWlfc3RvcF9pbmZvZnJhbWVfdHJhbnMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJICAgICAgaGRhX25pZF90IHBpbl9uaWQpCi17Ci0JaGRtaV9zZXRfZGlwX2luZGV4KGNvZGVjLCBwaW5fbmlkLCAweDAsIDB4MCk7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwgQUNfVkVSQl9TRVRfSERNSV9ESVBfWE1JVCwKLQkJCQkJCUFDX0RJUFhNSVRfRElTQUJMRSk7Ci19Ci0KLXN0YXRpYyBpbnQgaGRtaV9nZXRfY2hhbm5lbF9jb3VudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKLXsKLQlyZXR1cm4gMSArIHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAotCQkJCQlBQ19WRVJCX0dFVF9DVlRfQ0hBTl9DT1VOVCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhkbWlfc2V0X2NoYW5uZWxfY291bnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJICAgaGRhX25pZF90IG5pZCwgaW50IGNocykKLXsKLQlpZiAoY2hzICE9IGhkbWlfZ2V0X2NoYW5uZWxfY291bnQoY29kZWMsIG5pZCkpCi0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfQ1ZUX0NIQU5fQ09VTlQsIGNocyAtIDEpOwotfQotCi1zdGF0aWMgdm9pZCBoZG1pX2RlYnVnX2NoYW5uZWxfbWFwcGluZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQkgICAgICAgaGRhX25pZF90IHBpbl9uaWQpCi17Ci0jaWZkZWYgQ09ORklHX1NORF9ERUJVR19WRVJCT1NFCi0JaW50IGk7Ci0JaW50IHNsb3Q7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCXNsb3QgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIHBpbl9uaWQsIDAsCi0JCQkJCQlBQ19WRVJCX0dFVF9IRE1JX0NIQU5fU0xPVCwgaSk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJIRE1JOiBBU1AgY2hhbm5lbCAlZCA9PiBzbG90ICVkXG4iLAotCQkJCQkJc2xvdCA+PiA0LCBzbG90ICYgMHhmKTsKLQl9Ci0jZW5kaWYKLX0KLQotCi0vKgotICogQXVkaW8gSW5mb0ZyYW1lIHJvdXRpbmVzCi0gKi8KLQotc3RhdGljIHZvaWQgaGRtaV9kZWJ1Z19kaXBfc2l6ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IHBpbl9uaWQpCi17Ci0jaWZkZWYgQ09ORklHX1NORF9ERUJVR19WRVJCT1NFCi0JaW50IGk7Ci0JaW50IHNpemU7Ci0KLQlzaXplID0gc25kX2hkbWlfZ2V0X2VsZF9zaXplKGNvZGVjLCBwaW5fbmlkKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiSERNSTogRUxEIGJ1ZiBzaXplIGlzICVkXG4iLCBzaXplKTsKLQotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJc2l6ZSA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgcGluX25pZCwgMCwKLQkJCQkJCUFDX1ZFUkJfR0VUX0hETUlfRElQX1NJWkUsIGkpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiSERNSTogRElQIEdQWyVkXSBidWYgc2l6ZSBpcyAlZFxuIiwgaSwgc2l6ZSk7Ci0JfQotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGhkbWlfY2xlYXJfZGlwX2J1ZmZlcnMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkKQotewotI2lmZGVmIEJFX1BBUkFOT0lECi0JaW50IGksIGo7Ci0JaW50IHNpemU7Ci0JaW50IHBpLCBiaTsKLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCXNpemUgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIHBpbl9uaWQsIDAsCi0JCQkJCQlBQ19WRVJCX0dFVF9IRE1JX0RJUF9TSVpFLCBpKTsKLQkJaWYgKHNpemUgPT0gMCkKLQkJCWNvbnRpbnVlOwotCi0JCWhkbWlfc2V0X2RpcF9pbmRleChjb2RlYywgcGluX25pZCwgaSwgMHgwKTsKLQkJZm9yIChqID0gMTsgaiA8IDEwMDA7IGorKykgewotCQkJaGRtaV93cml0ZV9kaXBfYnl0ZShjb2RlYywgcGluX25pZCwgMHgwKTsKLQkJCWhkbWlfZ2V0X2RpcF9pbmRleChjb2RlYywgcGluX25pZCwgJnBpLCAmYmkpOwotCQkJaWYgKHBpICE9IGkpCi0JCQkJc25kX3ByaW50ZChLRVJOX0lORk8gImRpcCBpbmRleCAlZDogJWQgIT0gJWRcbiIsCi0JCQkJCQliaSwgcGksIGkpOwotCQkJaWYgKGJpID09IDApIC8qIGJ5dGUgaW5kZXggd3JhcHBlZCBhcm91bmQgKi8KLQkJCQlicmVhazsKLQkJfQotCQlzbmRfcHJpbnRkKEtFUk5fSU5GTwotCQkJIkhETUk6IERJUCBHUFslZF0gYnVmIHJlcG9ydGVkIHNpemU9JWQsIHdyaXR0ZW49JWRcbiIsCi0JCQlpLCBzaXplLCBqKTsKLQl9Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgaGRtaV9jaGVja3N1bV9hdWRpb19pbmZvZnJhbWUoc3RydWN0IGhkbWlfYXVkaW9faW5mb2ZyYW1lICphaSkKLXsKLQl1OCAqYnl0ZXMgPSAodTggKilhaTsKLQl1OCBzdW0gPSAwOwotCWludCBpOwotCi0JYWktPmNoZWNrc3VtID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoKmFpKTsgaSsrKQotCQlzdW0gKz0gYnl0ZXNbaV07Ci0KLQlhaS0+Y2hlY2tzdW0gPSAtIHN1bTsKLX0KLQotc3RhdGljIHZvaWQgaGRtaV9maWxsX2F1ZGlvX2luZm9mcmFtZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQkgICAgICBoZGFfbmlkX3QgcGluX25pZCwKLQkJCQkgICAgICBzdHJ1Y3QgaGRtaV9hdWRpb19pbmZvZnJhbWUgKmFpKQotewotCXU4ICpieXRlcyA9ICh1OCAqKWFpOwotCWludCBpOwotCi0JaGRtaV9kZWJ1Z19kaXBfc2l6ZShjb2RlYywgcGluX25pZCk7Ci0JaGRtaV9jbGVhcl9kaXBfYnVmZmVycyhjb2RlYywgcGluX25pZCk7IC8qIGJlIHBhcmFub2lkICovCi0KLQloZG1pX2NoZWNrc3VtX2F1ZGlvX2luZm9mcmFtZShhaSk7Ci0KLQloZG1pX3NldF9kaXBfaW5kZXgoY29kZWMsIHBpbl9uaWQsIDB4MCwgMHgwKTsKLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKCphaSk7IGkrKykKLQkJaGRtaV93cml0ZV9kaXBfYnl0ZShjb2RlYywgcGluX25pZCwgYnl0ZXNbaV0pOwotfQotCi0vKgotICogQ29tcHV0ZSBkZXJpdmVkIHZhbHVlcyBpbiBjaGFubmVsX2FsbG9jYXRpb25zW10uCi0gKi8KLXN0YXRpYyB2b2lkIGluaXRfY2hhbm5lbF9hbGxvY2F0aW9ucyh2b2lkKQotewotCWludCBpLCBqOwotCXN0cnVjdCBjZWFfY2hhbm5lbF9zcGVha2VyX2FsbG9jYXRpb24gKnA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaGFubmVsX2FsbG9jYXRpb25zKTsgaSsrKSB7Ci0JCXAgPSBjaGFubmVsX2FsbG9jYXRpb25zICsgaTsKLQkJcC0+Y2hhbm5lbHMgPSAwOwotCQlwLT5zcGtfbWFzayA9IDA7Ci0JCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKHAtPnNwZWFrZXJzKTsgaisrKQotCQkJaWYgKHAtPnNwZWFrZXJzW2pdKSB7Ci0JCQkJcC0+Y2hhbm5lbHMrKzsKLQkJCQlwLT5zcGtfbWFzayB8PSBwLT5zcGVha2Vyc1tqXTsKLQkJCX0KLQl9Ci19Ci0KLS8qCi0gKiBUaGUgdHJhbnNmb3JtYXRpb24gdGFrZXMgdHdvIHN0ZXBzOgotICoKLSAqIAllbGQtPnNwa19hbGxvYyA9PiAoZWxkX3NwZWFrZXJfYWxsb2NhdGlvbl9iaXRzW10pID0+IHNwa19tYXNrCi0gKiAJICAgICAgc3BrX21hc2sgPT4gKGNoYW5uZWxfYWxsb2NhdGlvbnNbXSkgICAgICAgICA9PiBhaS0+Q0EKLSAqCi0gKiBUT0RPOiBpdCBjb3VsZCBzZWxlY3QgdGhlIHdyb25nIENBIGZyb20gbXVsdGlwbGUgY2FuZGlkYXRlcy4KLSovCi1zdGF0aWMgaW50IGhkbWlfc2V0dXBfY2hhbm5lbF9hbGxvY2F0aW9uKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAotCQkJCQkgc3RydWN0IGhkbWlfYXVkaW9faW5mb2ZyYW1lICphaSkKLXsKLQlzdHJ1Y3QgaW50ZWxfaGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0Jc3RydWN0IGhkbWlfZWxkICplbGQ7Ci0JaW50IGk7Ci0JaW50IHNwa19tYXNrID0gMDsKLQlpbnQgY2hhbm5lbHMgPSAxICsgKGFpLT5DQzAyX0NUNDcgJiAweDcpOwotCWNoYXIgYnVmW1NORF9QUklOVF9DSEFOTkVMX0FMTE9DQVRJT05fQURWSVNFRF9CVUZTSVpFXTsKLQotCS8qCi0JICogQ0EgZGVmYXVsdHMgdG8gMCBmb3IgYmFzaWMgc3RlcmVvIGF1ZGlvCi0JICovCi0JaWYgKGNoYW5uZWxzIDw9IDIpCi0JCXJldHVybiAwOwotCi0JaSA9IGhkYV9ub2RlX2luZGV4KHNwZWMtPnBpbl9jdnQsIG5pZCk7Ci0JaWYgKGkgPCAwKQotCQlyZXR1cm4gMDsKLQllbGQgPSAmc3BlYy0+c2lua19lbGRbaV07Ci0KLQkvKgotCSAqIEhETUkgc2luaydzIEVMRCBpbmZvIGNhbm5vdCBhbHdheXMgYmUgcmV0cmlldmVkIGZvciBub3csIGUuZy4KLQkgKiBpbiBjb25zb2xlIG9yIGZvciBhdWRpbyBkZXZpY2VzLiBBc3N1bWUgdGhlIGhpZ2hlc3Qgc3BlYWtlcnMKLQkgKiBjb25maWd1cmF0aW9uLCB0byBfbm90XyBwcm9oaWJpdCBtdWx0aS1jaGFubmVsIGF1ZGlvIHBsYXliYWNrLgotCSAqLwotCWlmICghZWxkLT5zcGtfYWxsb2MpCi0JCWVsZC0+c3BrX2FsbG9jID0gMHhmZmZmOwotCi0JLyoKLQkgKiBleHBhbmQgRUxEJ3Mgc3BlYWtlciBhbGxvY2F0aW9uIG1hc2sKLQkgKgotCSAqIEVMRCB0ZWxscyB0aGUgc3BlYWtlciBtYXNrIGluIGEgY29tcGFjdChwYWlyZWQpIGZvcm0sCi0JICogZXhwYW5kIEVMRCdzIG5vdGlvbnMgdG8gbWF0Y2ggdGhlIG9uZXMgdXNlZCBieSBBdWRpbyBJbmZvRnJhbWUuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZWxkX3NwZWFrZXJfYWxsb2NhdGlvbl9iaXRzKTsgaSsrKSB7Ci0JCWlmIChlbGQtPnNwa19hbGxvYyAmICgxIDw8IGkpKQotCQkJc3BrX21hc2sgfD0gZWxkX3NwZWFrZXJfYWxsb2NhdGlvbl9iaXRzW2ldOwotCX0KLQotCS8qIHNlYXJjaCBmb3IgdGhlIGZpcnN0IHdvcmtpbmcgbWF0Y2ggaW4gdGhlIENBIHRhYmxlICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2hhbm5lbF9hbGxvY2F0aW9ucyk7IGkrKykgewotCQlpZiAoY2hhbm5lbHMgPT0gY2hhbm5lbF9hbGxvY2F0aW9uc1tpXS5jaGFubmVscyAmJgotCQkgICAgKHNwa19tYXNrICYgY2hhbm5lbF9hbGxvY2F0aW9uc1tpXS5zcGtfbWFzaykgPT0KLQkJCQljaGFubmVsX2FsbG9jYXRpb25zW2ldLnNwa19tYXNrKSB7Ci0JCQlhaS0+Q0EgPSBjaGFubmVsX2FsbG9jYXRpb25zW2ldLmNhX2luZGV4OwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlzbmRfcHJpbnRfY2hhbm5lbF9hbGxvY2F0aW9uKGVsZC0+c3BrX2FsbG9jLCBidWYsIHNpemVvZihidWYpKTsKLQlzbmRfcHJpbnRkZChLRVJOX0lORk8KLQkJCSJIRE1JOiBzZWxlY3QgQ0EgMHgleCBmb3IgJWQtY2hhbm5lbCBhbGxvY2F0aW9uOiAlc1xuIiwKLQkJCWFpLT5DQSwgY2hhbm5lbHMsIGJ1Zik7Ci0KLQlyZXR1cm4gYWktPkNBOwotfQotCi1zdGF0aWMgdm9pZCBoZG1pX3NldHVwX2NoYW5uZWxfbWFwcGluZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQkgICAgICAgaGRhX25pZF90IHBpbl9uaWQsCi0JCQkJICAgICAgIHN0cnVjdCBoZG1pX2F1ZGlvX2luZm9mcmFtZSAqYWkpCi17Ci0JaW50IGk7Ci0JaW50IGNhID0gYWktPkNBOwotCWludCBlcnI7Ci0KLQlpZiAoaGRtaV9jaGFubmVsX21hcHBpbmdbY2FdWzFdID09IDApIHsKLQkJZm9yIChpID0gMDsgaSA8IGNoYW5uZWxfYWxsb2NhdGlvbnNbY2FdLmNoYW5uZWxzOyBpKyspCi0JCQloZG1pX2NoYW5uZWxfbWFwcGluZ1tjYV1baV0gPSBpIHwgKGkgPDwgNCk7Ci0JCWZvciAoOyBpIDwgODsgaSsrKQotCQkJaGRtaV9jaGFubmVsX21hcHBpbmdbY2FdW2ldID0gMHhmIHwgKGkgPDwgNCk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQllcnIgPSBzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJCQkgIEFDX1ZFUkJfU0VUX0hETUlfQ0hBTl9TTE9ULAotCQkJCQkgIGhkbWlfY2hhbm5lbF9tYXBwaW5nW2NhXVtpXSk7Ci0JCWlmIChlcnIpIHsKLQkJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiSERNSTogY2hhbm5lbCBtYXBwaW5nIGZhaWxlZFxuIik7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWhkbWlfZGVidWdfY2hhbm5lbF9tYXBwaW5nKGNvZGVjLCBwaW5fbmlkKTsKLX0KLQotc3RhdGljIGJvb2wgaGRtaV9pbmZvZnJhbWVfdXB0b2RhdGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkLAotCQkJCSAgICBzdHJ1Y3QgaGRtaV9hdWRpb19pbmZvZnJhbWUgKmFpKQotewotCXU4ICpieXRlcyA9ICh1OCAqKWFpOwotCXU4IHZhbDsKLQlpbnQgaTsKLQotCWlmIChzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIHBpbl9uaWQsIDAsIEFDX1ZFUkJfR0VUX0hETUlfRElQX1hNSVQsIDApCi0JCQkJCQkJICAgICE9IEFDX0RJUFhNSVRfQkVTVCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaGRtaV9zZXRfZGlwX2luZGV4KGNvZGVjLCBwaW5fbmlkLCAweDAsIDB4MCk7Ci0JZm9yIChpID0gMDsgaSA8IHNpemVvZigqYWkpOyBpKyspIHsKLQkJdmFsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJCQkgQUNfVkVSQl9HRVRfSERNSV9ESVBfREFUQSwgMCk7Ci0JCWlmICh2YWwgIT0gYnl0ZXNbaV0pCi0JCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIGhkbWlfc2V0dXBfYXVkaW9faW5mb2ZyYW1lKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAotCQkJCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3QgaW50ZWxfaGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaGRhX25pZF90IHBpbl9uaWQ7Ci0JaW50IGk7Ci0Jc3RydWN0IGhkbWlfYXVkaW9faW5mb2ZyYW1lIGFpID0gewotCQkudHlwZQkJPSAweDg0LAotCQkudmVyCQk9IDB4MDEsCi0JCS5sZW4JCT0gMHgwYSwKLQkJLkNDMDJfQ1Q0Nwk9IHN1YnN0cmVhbS0+cnVudGltZS0+Y2hhbm5lbHMgLSAxLAotCX07Ci0KLQloZG1pX3NldHVwX2NoYW5uZWxfYWxsb2NhdGlvbihjb2RlYywgbmlkLCAmYWkpOwotCi0JZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9waW5zOyBpKyspIHsKLQkJaWYgKHNwZWMtPnBpbl9jdnRbaV0gIT0gbmlkKQotCQkJY29udGludWU7Ci0JCWlmICghc3BlYy0+c2lua19lbGRbaV0ubW9uaXRvcl9wcmVzZW50KQotCQkJY29udGludWU7Ci0KLQkJcGluX25pZCA9IHNwZWMtPnBpbltpXTsKLQkJaWYgKCFoZG1pX2luZm9mcmFtZV91cHRvZGF0ZShjb2RlYywgcGluX25pZCwgJmFpKSkgewotCQkJaGRtaV9zZXR1cF9jaGFubmVsX21hcHBpbmcoY29kZWMsIHBpbl9uaWQsICZhaSk7Ci0JCQloZG1pX3N0b3BfaW5mb2ZyYW1lX3RyYW5zKGNvZGVjLCBwaW5fbmlkKTsKLQkJCWhkbWlfZmlsbF9hdWRpb19pbmZvZnJhbWUoY29kZWMsIHBpbl9uaWQsICZhaSk7Ci0JCQloZG1pX3N0YXJ0X2luZm9mcmFtZV90cmFucyhjb2RlYywgcGluX25pZCk7Ci0JCX0KLQl9Ci19Ci0KLQotLyoKLSAqIFVuc29saWNpdGVkIGV2ZW50cwotICovCi0KLXN0YXRpYyB2b2lkIGhkbWlfaW50cmluc2ljX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQotewotCXN0cnVjdCBpbnRlbF9oZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlpbnQgdGFnID0gcmVzID4+IEFDX1VOU09MX1JFU19UQUdfU0hJRlQ7Ci0JaW50IHBpbmQgPSAhIShyZXMgJiBBQ19VTlNPTF9SRVNfUEQpOwotCWludCBlbGR2ID0gISEocmVzICYgQUNfVU5TT0xfUkVTX0VMRFYpOwotCWludCBpbmRleDsKLQotCXByaW50ayhLRVJOX0lORk8KLQkJIkhETUkgaG90IHBsdWcgZXZlbnQ6IFBpbj0lZCBQcmVzZW5jZV9EZXRlY3Q9JWQgRUxEX1ZhbGlkPSVkXG4iLAotCQl0YWcsIHBpbmQsIGVsZHYpOwotCi0JaW5kZXggPSBoZGFfbm9kZV9pbmRleChzcGVjLT5waW4sIHRhZyk7Ci0JaWYgKGluZGV4IDwgMCkKLQkJcmV0dXJuOwotCi0Jc3BlYy0+c2lua19lbGRbaW5kZXhdLm1vbml0b3JfcHJlc2VudCA9IHBpbmQ7Ci0Jc3BlYy0+c2lua19lbGRbaW5kZXhdLmVsZF92YWxpZCA9IGVsZHY7Ci0KLQlpZiAocGluZCAmJiBlbGR2KSB7Ci0JCWhkbWlfZ2V0X3Nob3dfZWxkKGNvZGVjLCBzcGVjLT5waW5baW5kZXhdLCAmc3BlYy0+c2lua19lbGRbaW5kZXhdKTsKLQkJLyogVE9ETzogZG8gcmVhbCB0aGluZ3MgYWJvdXQgRUxEICovCi0JfQotfQotCi1zdGF0aWMgdm9pZCBoZG1pX25vbl9pbnRyaW5zaWNfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCi17Ci0JaW50IHRhZyA9IHJlcyA+PiBBQ19VTlNPTF9SRVNfVEFHX1NISUZUOwotCWludCBzdWJ0YWcgPSAocmVzICYgQUNfVU5TT0xfUkVTX1NVQlRBRykgPj4gQUNfVU5TT0xfUkVTX1NVQlRBR19TSElGVDsKLQlpbnQgY3Bfc3RhdGUgPSAhIShyZXMgJiBBQ19VTlNPTF9SRVNfQ1BfU1RBVEUpOwotCWludCBjcF9yZWFkeSA9ICEhKHJlcyAmIEFDX1VOU09MX1JFU19DUF9SRUFEWSk7Ci0KLQlwcmludGsoS0VSTl9JTkZPCi0JCSJIRE1JIENQIGV2ZW50OiBQSU49JWQgU1VCVEFHPTB4JXggQ1BfU1RBVEU9JWQgQ1BfUkVBRFk9JWRcbiIsCi0JCXRhZywKLQkJc3VidGFnLAotCQljcF9zdGF0ZSwKLQkJY3BfcmVhZHkpOwotCi0JLyogVE9ETyAqLwotCWlmIChjcF9zdGF0ZSkKLQkJOwotCWlmIChjcF9yZWFkeSkKLQkJOwotfQotCi0KLXN0YXRpYyB2b2lkIGludGVsX2hkbWlfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCi17Ci0Jc3RydWN0IGludGVsX2hkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWludCB0YWcgPSByZXMgPj4gQUNfVU5TT0xfUkVTX1RBR19TSElGVDsKLQlpbnQgc3VidGFnID0gKHJlcyAmIEFDX1VOU09MX1JFU19TVUJUQUcpID4+IEFDX1VOU09MX1JFU19TVUJUQUdfU0hJRlQ7Ci0KLQlpZiAoaGRhX25vZGVfaW5kZXgoc3BlYy0+cGluLCB0YWcpIDwgMCkgewotCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAiVW5leHBlY3RlZCBIRE1JIGV2ZW50IHRhZyAweCV4XG4iLCB0YWcpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHN1YnRhZyA9PSAwKQotCQloZG1pX2ludHJpbnNpY19ldmVudChjb2RlYywgcmVzKTsKLQllbHNlCi0JCWhkbWlfbm9uX2ludHJpbnNpY19ldmVudChjb2RlYywgcmVzKTsKLX0KLQotLyoKLSAqIENhbGxiYWNrcwotICovCi0KLXN0YXRpYyB2b2lkIGhkbWlfc2V0dXBfc3RyZWFtKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAotCQkJICAgICAgdTMyIHN0cmVhbV90YWcsIGludCBmb3JtYXQpCi17Ci0JaW50IHRhZzsKLQlpbnQgZm10OwotCi0JdGFnID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfR0VUX0NPTlYsIDApID4+IDQ7Ci0JZm10ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfR0VUX1NUUkVBTV9GT1JNQVQsIDApOwotCi0Jc25kX3ByaW50ZGQoImhkbWlfc2V0dXBfc3RyZWFtOiAiCi0JCSAgICAiTklEPTB4JXgsICVzc3RyZWFtPTB4JXgsICVzZm9ybWF0PTB4JXhcbiIsCi0JCSAgICBuaWQsCi0JCSAgICB0YWcgPT0gc3RyZWFtX3RhZyA/ICIiIDogIm5ldy0iLAotCQkgICAgc3RyZWFtX3RhZywKLQkJICAgIGZtdCA9PSBmb3JtYXQgPyAiIiA6ICJuZXctIiwKLQkJICAgIGZvcm1hdCk7Ci0KLQlpZiAodGFnICE9IHN0cmVhbV90YWcpCi0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfQ0hBTk5FTF9TVFJFQU1JRCwgc3RyZWFtX3RhZyA8PCA0KTsKLQlpZiAoZm10ICE9IGZvcm1hdCkKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9TVFJFQU1fRk9STUFULCBmb3JtYXQpOwotfQogCiBzdGF0aWMgaW50IGludGVsX2hkbWlfcGxheWJhY2tfcGNtX3ByZXBhcmUoc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKIAkJCQkJICAgc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCkBAIC04ODIsNyArODcsNyBAQAogCiBzdGF0aWMgaW50IGludGVsX2hkbWlfYnVpbGRfcGNtcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlzdHJ1Y3QgaW50ZWxfaGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IGhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXN0cnVjdCBoZGFfcGNtICppbmZvID0gc3BlYy0+cGNtX3JlYzsKIAlpbnQgaTsKIApAQCAtOTA4LDcgKzExMyw3IEBACiAKIHN0YXRpYyBpbnQgaW50ZWxfaGRtaV9idWlsZF9jb250cm9scyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlzdHJ1Y3QgaW50ZWxfaGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IGhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWludCBlcnI7CiAJaW50IGk7CiAKQEAgLTkyMyw3ICsxMjgsNyBAQAogCiBzdGF0aWMgaW50IGludGVsX2hkbWlfaW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlzdHJ1Y3QgaW50ZWxfaGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IGhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgc3BlYy0+cGluW2ldOyBpKyspIHsKQEAgLTkzNyw3ICsxNDIsNyBAQAogCiBzdGF0aWMgdm9pZCBpbnRlbF9oZG1pX2ZyZWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc3RydWN0IGludGVsX2hkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXN0cnVjdCBoZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fcGluczsgaSsrKQpAQCAtOTUxLDEyICsxNTYsMTIgQEAKIAkuZnJlZQkJCT0gaW50ZWxfaGRtaV9mcmVlLAogCS5idWlsZF9wY21zCQk9IGludGVsX2hkbWlfYnVpbGRfcGNtcywKIAkuYnVpbGRfY29udHJvbHMgCT0gaW50ZWxfaGRtaV9idWlsZF9jb250cm9scywKLQkudW5zb2xfZXZlbnQJCT0gaW50ZWxfaGRtaV91bnNvbF9ldmVudCwKKwkudW5zb2xfZXZlbnQJCT0gaGRtaV91bnNvbF9ldmVudCwKIH07CiAKIHN0YXRpYyBpbnQgcGF0Y2hfaW50ZWxfaGRtaShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlzdHJ1Y3QgaW50ZWxfaGRtaV9zcGVjICpzcGVjOworCXN0cnVjdCBoZG1pX3NwZWMgKnNwZWM7CiAJaW50IGk7CiAKIAlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKQEAgLTk2NCw3ICsxNjksNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWNvZGVjLT5zcGVjID0gc3BlYzsKLQlpZiAoaW50ZWxfaGRtaV9wYXJzZV9jb2RlYyhjb2RlYykgPCAwKSB7CisJaWYgKGhkbWlfcGFyc2VfY29kZWMoY29kZWMpIDwgMCkgewogCQljb2RlYy0+c3BlYyA9IE5VTEw7CiAJCWtmcmVlKHNwZWMpOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfbnZoZG1pLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jCmluZGV4IDZhZmRhYjAuLjcwNjY5YTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfbnZoZG1pLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9udmhkbWkuYwpAQCAtMjksMTMgKzI5LDIzIEBACiAjaW5jbHVkZSAiaGRhX2NvZGVjLmgiCiAjaW5jbHVkZSAiaGRhX2xvY2FsLmgiCiAKKyNkZWZpbmUgTUFYX0hETUlfQ1ZUUwkxCisjZGVmaW5lIE1BWF9IRE1JX1BJTlMJMQorCisjaW5jbHVkZSAicGF0Y2hfaGRtaS5jIgorCitzdGF0aWMgY2hhciAqbnZoZG1pX3BjbV9uYW1lc1tNQVhfSERNSV9DVlRTXSA9IHsKKwkiTlZJRElBIEhETUkiLAorfTsKKwogLyogZGVmaW5lIGJlbG93IHRvIHJlc3RyaWN0IHRoZSBzdXBwb3J0ZWQgcmF0ZXMgYW5kIGZvcm1hdHMgKi8KIC8qICNkZWZpbmUgTElNSVRFRF9SQVRFX0ZNVF9TVVBQT1JUICovCiAKLXN0cnVjdCBudmhkbWlfc3BlYyB7Ci0Jc3RydWN0IGhkYV9tdWx0aV9vdXQgbXVsdGlvdXQ7Ci0KLQlzdHJ1Y3QgaGRhX3BjbSBwY21fcmVjOworZW51bSBIREFDb2RlYyB7CisJSERBX0NPREVDX05WSURJQV9NQ1A3WCwKKwlIREFfQ09ERUNfTlZJRElBX01DUDg5LAorCUhEQV9DT0RFQ19OVklESUFfR1QyMVgsCisJSERBX0NPREVDX0lOVkFMSUQKIH07CiAKICNkZWZpbmUgTnZfVkVSQl9TRVRfQ2hhbm5lbF9BbGxvY2F0aW9uICAgICAgICAgIDB4Rjc5CkBAIC00MywxNSArNTMsMTggQEAKICNkZWZpbmUgTnZfVkVSQl9TRVRfQXVkaW9fUHJvdGVjdGlvbl9PbiAgICAgICAgIDB4Rjk4CiAjZGVmaW5lIE52X1ZFUkJfU0VUX0F1ZGlvX1Byb3RlY3Rpb25fT2ZmICAgICAgICAweEY5OQogCi0jZGVmaW5lIE52X01hc3Rlcl9Db252ZXJ0X25pZCAgIDB4MDQKLSNkZWZpbmUgTnZfTWFzdGVyX1Bpbl9uaWQgICAgICAgMHgwNQorI2RlZmluZSBudmhkbWlfbWFzdGVyX2Nvbl9uaWRfN3gJMHgwNAorI2RlZmluZSBudmhkbWlfbWFzdGVyX3Bpbl9uaWRfN3gJMHgwNQogCi1zdGF0aWMgaGRhX25pZF90IG52aGRtaV9jb252ZXJ0X25pZHNbNF0gPSB7CisjZGVmaW5lIG52aGRtaV9tYXN0ZXJfY29uX25pZF84OQkweDA0CisjZGVmaW5lIG52aGRtaV9tYXN0ZXJfcGluX25pZF84OQkweDA1CisKK3N0YXRpYyBoZGFfbmlkX3QgbnZoZG1pX2Nvbl9uaWRzXzd4WzRdID0gewogCS8qZnJvbnQsIHJlYXIsIGNsZmUsIHJlYXJfc3VyciAqLwogCTB4NiwgMHg4LCAweGEsIDB4YywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgbnZoZG1pX2Jhc2ljX2luaXRbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgbnZoZG1pX2Jhc2ljX2luaXRfN3hbXSA9IHsKIAkvKiBzZXQgYXVkaW8gcHJvdGVjdCBvbiAqLwogCXsgMHgxLCBOdl9WRVJCX1NFVF9BdWRpb19Qcm90ZWN0aW9uX09uLCAweDF9LAogCS8qIGVuYWJsZSBkaWdpdGFsIG91dHB1dCBvbiBwaW4gd2lkZ2V0ICovCkBAIC04NCwyMiArOTcsNjAgQEAKICAqLwogc3RhdGljIGludCBudmhkbWlfYnVpbGRfY29udHJvbHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc3RydWN0IG52aGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IGhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWludCBlcnI7CisJaW50IGk7CiAKLQllcnIgPSBzbmRfaGRhX2NyZWF0ZV9zcGRpZl9vdXRfY3Rscyhjb2RlYywgc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCWlmICgoc3BlYy0+Y29kZWNfdHlwZSA9PSBIREFfQ09ERUNfTlZJRElBX01DUDg5KQorCXx8IChzcGVjLT5jb2RlY190eXBlID09IEhEQV9DT0RFQ19OVklESUFfR1QyMVgpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+bnVtX3BjbXM7IGkrKykgeworCQkJZXJyID0gc25kX2hkYV9jcmVhdGVfc3BkaWZfb3V0X2N0bHMoY29kZWMsCisJCQkJCQkJICAgIHNwZWMtPmN2dFtpXSk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJfSBlbHNlIHsKKwkJZXJyID0gc25kX2hkYV9jcmVhdGVfc3BkaWZfb3V0X2N0bHMoY29kZWMsCisJCQkJCQkgICAgc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbnZoZG1pX2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc25kX2hkYV9zZXF1ZW5jZV93cml0ZShjb2RlYywgbnZoZG1pX2Jhc2ljX2luaXQpOworCXN0cnVjdCBoZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgaTsKKwlpZiAoKHNwZWMtPmNvZGVjX3R5cGUgPT0gSERBX0NPREVDX05WSURJQV9NQ1A4OSkKKwl8fCAoc3BlYy0+Y29kZWNfdHlwZSA9PSBIREFfQ09ERUNfTlZJRElBX0dUMjFYKSkgeworCQlmb3IgKGkgPSAwOyBzcGVjLT5waW5baV07IGkrKykgeworCQkJaGRtaV9lbmFibGVfb3V0cHV0KGNvZGVjLCBzcGVjLT5waW5baV0pOworCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgc3BlYy0+cGluW2ldLCAwLAorCQkJCQkgICAgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLAorCQkJCQkgICAgQUNfVVNSU1BfRU4gfCBzcGVjLT5waW5baV0pOworCQl9CisJfSBlbHNlIHsKKwkJc25kX2hkYV9zZXF1ZW5jZV93cml0ZShjb2RlYywgbnZoZG1pX2Jhc2ljX2luaXRfN3gpOworCX0KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgbnZoZG1pX2ZyZWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCBpOworCisJaWYgKChzcGVjLT5jb2RlY190eXBlID09IEhEQV9DT0RFQ19OVklESUFfTUNQODkpCisJfHwgKHNwZWMtPmNvZGVjX3R5cGUgPT0gSERBX0NPREVDX05WSURJQV9HVDIxWCkpIHsKKwkJZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9waW5zOyBpKyspCisJCQlzbmRfaGRhX2VsZF9wcm9jX2ZyZWUoY29kZWMsICZzcGVjLT5zaW5rX2VsZFtpXSk7CisJfQorCisJa2ZyZWUoc3BlYyk7Cit9CisKIC8qCiAgKiBEaWdpdGFsIG91dAogICovCkBAIC0xMDcsMjUgKzE1OCwyNSBAQAogCQkJCQlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7Ci0Jc3RydWN0IG52aGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IGhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXJldHVybiBzbmRfaGRhX211bHRpX291dF9kaWdfb3Blbihjb2RlYywgJnNwZWMtPm11bHRpb3V0KTsKIH0KIAotc3RhdGljIGludCBudmhkbWlfZGlnX3BsYXliYWNrX3BjbV9jbG9zZV84Y2goc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKK3N0YXRpYyBpbnQgbnZoZG1pX2RpZ19wbGF5YmFja19wY21fY2xvc2VfOGNoXzd4KHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaGluZm8sCiAJCQkJCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKLQlzdHJ1Y3QgbnZoZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzdHJ1Y3QgaGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJaW50IGk7CiAKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBOdl9NYXN0ZXJfQ29udmVydF9uaWQsCisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbnZoZG1pX21hc3Rlcl9jb25fbmlkXzd4LAogCQkJMCwgQUNfVkVSQl9TRVRfQ0hBTk5FTF9TVFJFQU1JRCwgMCk7CiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQkvKiBzZXQgdGhlIHN0cmVhbSBpZCAqLwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBudmhkbWlfY29udmVydF9uaWRzW2ldLCAwLAorCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBudmhkbWlfY29uX25pZHNfN3hbaV0sIDAsCiAJCQkJQUNfVkVSQl9TRVRfQ0hBTk5FTF9TVFJFQU1JRCwgMCk7CiAJCS8qIHNldCB0aGUgc3RyZWFtIGZvcm1hdCAqLwotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBudmhkbWlfY29udmVydF9uaWRzW2ldLCAwLAorCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBudmhkbWlfY29uX25pZHNfN3hbaV0sIDAsCiAJCQkJQUNfVkVSQl9TRVRfU1RSRUFNX0ZPUk1BVCwgMCk7CiAJfQogCkBAIC0xMzYsMTAgKzE4NywyNSBAQAogCQkJCQlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7Ci0Jc3RydWN0IG52aGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IGhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXJldHVybiBzbmRfaGRhX211bHRpX291dF9kaWdfY2xvc2UoY29kZWMsICZzcGVjLT5tdWx0aW91dCk7CiB9CiAKK3N0YXRpYyBpbnQgbnZoZG1pX2RpZ19wbGF5YmFja19wY21fcHJlcGFyZV84Y2hfODkoc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKKwkJCQkJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCXVuc2lnbmVkIGludCBzdHJlYW1fdGFnLAorCQkJCQl1bnNpZ25lZCBpbnQgZm9ybWF0LAorCQkJCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwloZG1pX3NldF9jaGFubmVsX2NvdW50KGNvZGVjLCBoaW5mby0+bmlkLAorCQkJICAgICAgIHN1YnN0cmVhbS0+cnVudGltZS0+Y2hhbm5lbHMpOworCisJaGRtaV9zZXR1cF9hdWRpb19pbmZvZnJhbWUoY29kZWMsIGhpbmZvLT5uaWQsIHN1YnN0cmVhbSk7CisKKwloZG1pX3NldHVwX3N0cmVhbShjb2RlYywgaGluZm8tPm5pZCwgc3RyZWFtX3RhZywgZm9ybWF0KTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBudmhkbWlfZGlnX3BsYXliYWNrX3BjbV9wcmVwYXJlXzhjaChzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLAogCQkJCQlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkJdW5zaWduZWQgaW50IHN0cmVhbV90YWcsCkBAIC0xODEsMjkgKzI0NywyOSBAQAogCS8qIHR1cm4gb2ZmIFNQRElGIG9uY2U7IG90aGVyd2lzZSB0aGUgSUVDOTU4IGJpdHMgd29uJ3QgYmUgdXBkYXRlZCAqLwogCWlmIChjb2RlYy0+c3BkaWZfc3RhdHVzX3Jlc2V0ICYmIChjb2RlYy0+c3BkaWZfY3RscyAmIEFDX0RJRzFfRU5BQkxFKSkKIAkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywKLQkJCQlOdl9NYXN0ZXJfQ29udmVydF9uaWQsCisJCQkJbnZoZG1pX21hc3Rlcl9jb25fbmlkXzd4LAogCQkJCTAsCiAJCQkJQUNfVkVSQl9TRVRfRElHSV9DT05WRVJUXzEsCiAJCQkJY29kZWMtPnNwZGlmX2N0bHMgJiB+QUNfRElHMV9FTkFCTEUgJiAweGZmKTsKIAogCS8qIHNldCB0aGUgc3RyZWFtIGlkICovCi0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgTnZfTWFzdGVyX0NvbnZlcnRfbmlkLCAwLAorCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG52aGRtaV9tYXN0ZXJfY29uX25pZF83eCwgMCwKIAkJCUFDX1ZFUkJfU0VUX0NIQU5ORUxfU1RSRUFNSUQsIChzdHJlYW1fdGFnIDw8IDQpIHwgMHgwKTsKIAogCS8qIHNldCB0aGUgc3RyZWFtIGZvcm1hdCAqLwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIE52X01hc3Rlcl9Db252ZXJ0X25pZCwgMCwKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBudmhkbWlfbWFzdGVyX2Nvbl9uaWRfN3gsIDAsCiAJCQlBQ19WRVJCX1NFVF9TVFJFQU1fRk9STUFULCBmb3JtYXQpOwogCiAJLyogdHVybiBvbiBhZ2FpbiAoaWYgbmVlZGVkKSAqLwogCS8qIGVuYWJsZSBhbmQgc2V0IHRoZSBjaGFubmVsIHN0YXR1cyBhdWRpby9kYXRhIGZsYWcgKi8KIAlpZiAoY29kZWMtPnNwZGlmX3N0YXR1c19yZXNldCAmJiAoY29kZWMtPnNwZGlmX2N0bHMgJiBBQ19ESUcxX0VOQUJMRSkpIHsKIAkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywKLQkJCQlOdl9NYXN0ZXJfQ29udmVydF9uaWQsCisJCQkJbnZoZG1pX21hc3Rlcl9jb25fbmlkXzd4LAogCQkJCTAsCiAJCQkJQUNfVkVSQl9TRVRfRElHSV9DT05WRVJUXzEsCiAJCQkJY29kZWMtPnNwZGlmX2N0bHMgJiAweGZmKTsKIAkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywKLQkJCQlOdl9NYXN0ZXJfQ29udmVydF9uaWQsCisJCQkJbnZoZG1pX21hc3Rlcl9jb25fbmlkXzd4LAogCQkJCTAsCiAJCQkJQUNfVkVSQl9TRVRfRElHSV9DT05WRVJUXzIsIGRhdGFEQ0MyKTsKIAl9CkBAIC0yMjAsMTkgKzI4NiwxOSBAQAogCQlpZiAoY29kZWMtPnNwZGlmX3N0YXR1c19yZXNldCAmJgogCQkoY29kZWMtPnNwZGlmX2N0bHMgJiBBQ19ESUcxX0VOQUJMRSkpCiAJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLAotCQkJCW52aGRtaV9jb252ZXJ0X25pZHNbaV0sCisJCQkJbnZoZG1pX2Nvbl9uaWRzXzd4W2ldLAogCQkJCTAsCiAJCQkJQUNfVkVSQl9TRVRfRElHSV9DT05WRVJUXzEsCiAJCQkJY29kZWMtPnNwZGlmX2N0bHMgJiB+QUNfRElHMV9FTkFCTEUgJiAweGZmKTsKIAkJLyogc2V0IHRoZSBzdHJlYW0gaWQgKi8KIAkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywKLQkJCQludmhkbWlfY29udmVydF9uaWRzW2ldLAorCQkJCW52aGRtaV9jb25fbmlkc183eFtpXSwKIAkJCQkwLAogCQkJCUFDX1ZFUkJfU0VUX0NIQU5ORUxfU1RSRUFNSUQsCiAJCQkJKHN0cmVhbV90YWcgPDwgNCkgfCBjaGFubmVsX2lkKTsKIAkJLyogc2V0IHRoZSBzdHJlYW0gZm9ybWF0ICovCiAJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsCi0JCQkJbnZoZG1pX2NvbnZlcnRfbmlkc1tpXSwKKwkJCQludmhkbWlfY29uX25pZHNfN3hbaV0sCiAJCQkJMCwKIAkJCQlBQ19WRVJCX1NFVF9TVFJFQU1fRk9STUFULAogCQkJCWZvcm1hdCk7CkBAIC0yNDEsMTIgKzMwNywxMiBAQAogCQlpZiAoY29kZWMtPnNwZGlmX3N0YXR1c19yZXNldCAmJgogCQkoY29kZWMtPnNwZGlmX2N0bHMgJiBBQ19ESUcxX0VOQUJMRSkpIHsKIAkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsCi0JCQkJCW52aGRtaV9jb252ZXJ0X25pZHNbaV0sCisJCQkJCW52aGRtaV9jb25fbmlkc183eFtpXSwKIAkJCQkJMCwKIAkJCQkJQUNfVkVSQl9TRVRfRElHSV9DT05WRVJUXzEsCiAJCQkJCWNvZGVjLT5zcGRpZl9jdGxzICYgMHhmZik7CiAJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLAotCQkJCQludmhkbWlfY29udmVydF9uaWRzW2ldLAorCQkJCQludmhkbWlfY29uX25pZHNfN3hbaV0sCiAJCQkJCTAsCiAJCQkJCUFDX1ZFUkJfU0VUX0RJR0lfQ09OVkVSVF8yLCBkYXRhRENDMik7CiAJCX0KQEAgLTI2MSwyOCArMzI3LDQ3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbnZoZG1pX3BsYXliYWNrX3BjbV9jbGVhbnVwKHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaGluZm8sCisJCQkJCSAgIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgICBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBudmhkbWlfZGlnX3BsYXliYWNrX3BjbV9wcmVwYXJlXzJjaChzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLAogCQkJCQlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkJdW5zaWduZWQgaW50IHN0cmVhbV90YWcsCiAJCQkJCXVuc2lnbmVkIGludCBmb3JtYXQsCiAJCQkJCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewotCXN0cnVjdCBudmhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXN0cnVjdCBoZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlyZXR1cm4gc25kX2hkYV9tdWx0aV9vdXRfZGlnX3ByZXBhcmUoY29kZWMsICZzcGVjLT5tdWx0aW91dCwgc3RyZWFtX3RhZywKIAkJCQkJZm9ybWF0LCBzdWJzdHJlYW0pOwogfQogCi1zdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIG52aGRtaV9wY21fZGlnaXRhbF9wbGF5YmFja184Y2ggPSB7CitzdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIG52aGRtaV9wY21fZGlnaXRhbF9wbGF5YmFja184Y2hfODkgPSB7CisJLnN1YnN0cmVhbXMgPSAxLAorCS5jaGFubmVsc19taW4gPSAyLAorCS5yYXRlcyA9IFNVUFBPUlRFRF9SQVRFUywKKwkubWF4YnBzID0gU1VQUE9SVEVEX01BWEJQUywKKwkuZm9ybWF0cyA9IFNVUFBPUlRFRF9GT1JNQVRTLAorCS5vcHMgPSB7CisJCS5wcmVwYXJlID0gbnZoZG1pX2RpZ19wbGF5YmFja19wY21fcHJlcGFyZV84Y2hfODksCisJCS5jbGVhbnVwID0gbnZoZG1pX3BsYXliYWNrX3BjbV9jbGVhbnVwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIG52aGRtaV9wY21fZGlnaXRhbF9wbGF5YmFja184Y2hfN3ggPSB7CiAJLnN1YnN0cmVhbXMgPSAxLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSA4LAotCS5uaWQgPSBOdl9NYXN0ZXJfQ29udmVydF9uaWQsCisJLm5pZCA9IG52aGRtaV9tYXN0ZXJfY29uX25pZF83eCwKIAkucmF0ZXMgPSBTVVBQT1JURURfUkFURVMsCiAJLm1heGJwcyA9IFNVUFBPUlRFRF9NQVhCUFMsCiAJLmZvcm1hdHMgPSBTVVBQT1JURURfRk9STUFUUywKIAkub3BzID0gewogCQkub3BlbiA9IG52aGRtaV9kaWdfcGxheWJhY2tfcGNtX29wZW4sCi0JCS5jbG9zZSA9IG52aGRtaV9kaWdfcGxheWJhY2tfcGNtX2Nsb3NlXzhjaCwKKwkJLmNsb3NlID0gbnZoZG1pX2RpZ19wbGF5YmFja19wY21fY2xvc2VfOGNoXzd4LAogCQkucHJlcGFyZSA9IG52aGRtaV9kaWdfcGxheWJhY2tfcGNtX3ByZXBhcmVfOGNoCiAJfSwKIH07CkBAIC0yOTEsNyArMzc2LDcgQEAKIAkuc3Vic3RyZWFtcyA9IDEsCiAJLmNoYW5uZWxzX21pbiA9IDIsCiAJLmNoYW5uZWxzX21heCA9IDIsCi0JLm5pZCA9IE52X01hc3Rlcl9Db252ZXJ0X25pZCwKKwkubmlkID0gbnZoZG1pX21hc3Rlcl9jb25fbmlkXzd4LAogCS5yYXRlcyA9IFNVUFBPUlRFRF9SQVRFUywKIAkubWF4YnBzID0gU1VQUE9SVEVEX01BWEJQUywKIAkuZm9ybWF0cyA9IFNVUFBPUlRFRF9GT1JNQVRTLApAQCAtMzAyLDEwICszODcsMzYgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCBudmhkbWlfYnVpbGRfcGNtc184Y2goc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCitzdGF0aWMgaW50IG52aGRtaV9idWlsZF9wY21zXzhjaF84OShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlzdHJ1Y3QgbnZoZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlzdHJ1Y3QgaGRhX3BjbSAqaW5mbyA9ICZzcGVjLT5wY21fcmVjOworCXN0cnVjdCBoZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzdHJ1Y3QgaGRhX3BjbSAqaW5mbyA9IHNwZWMtPnBjbV9yZWM7CisJaW50IGk7CisKKwljb2RlYy0+bnVtX3BjbXMgPSBzcGVjLT5udW1fY3Z0czsKKwljb2RlYy0+cGNtX2luZm8gPSBpbmZvOworCisJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5udW1fcGNtczsgaSsrLCBpbmZvKyspIHsKKwkJdW5zaWduZWQgaW50IGNoYW5zOworCisJCWNoYW5zID0gZ2V0X3djYXBzKGNvZGVjLCBzcGVjLT5jdnRbaV0pOworCQljaGFucyA9IGdldF93Y2Fwc19jaGFubmVscyhjaGFucyk7CisKKwkJaW5mby0+bmFtZSA9IG52aGRtaV9wY21fbmFtZXNbaV07CisJCWluZm8tPnBjbV90eXBlID0gSERBX1BDTV9UWVBFX0hETUk7CisJCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXQorCQkJCQk9IG52aGRtaV9wY21fZGlnaXRhbF9wbGF5YmFja184Y2hfODk7CisJCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXS5uaWQgPSBzcGVjLT5jdnRbaV07CisJCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXS5jaGFubmVsc19tYXggPSBjaGFuczsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBudmhkbWlfYnVpbGRfcGNtc184Y2hfN3goc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXN0cnVjdCBoZGFfcGNtICppbmZvID0gc3BlYy0+cGNtX3JlYzsKIAogCWNvZGVjLT5udW1fcGNtcyA9IDE7CiAJY29kZWMtPnBjbV9pbmZvID0gaW5mbzsKQEAgLTMxMywxNSArNDI0LDE1IEBACiAJaW5mby0+bmFtZSA9ICJOVklESUEgSERNSSI7CiAJaW5mby0+cGNtX3R5cGUgPSBIREFfUENNX1RZUEVfSERNSTsKIAlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10KLQkJCQkJPSBudmhkbWlfcGNtX2RpZ2l0YWxfcGxheWJhY2tfOGNoOworCQkJCQk9IG52aGRtaV9wY21fZGlnaXRhbF9wbGF5YmFja184Y2hfN3g7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBudmhkbWlfYnVpbGRfcGNtc18yY2goc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc3RydWN0IG52aGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0Jc3RydWN0IGhkYV9wY20gKmluZm8gPSAmc3BlYy0+cGNtX3JlYzsKKwlzdHJ1Y3QgaGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IGhkYV9wY20gKmluZm8gPSBzcGVjLT5wY21fcmVjOwogCiAJY29kZWMtPm51bV9wY21zID0gMTsKIAljb2RlYy0+cGNtX2luZm8gPSBpbmZvOwpAQCAtMzM0LDE0ICs0NDUsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgbnZoZG1pX2ZyZWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0Ja2ZyZWUoY29kZWMtPnNwZWMpOwotfQotCi1zdGF0aWMgc3RydWN0IGhkYV9jb2RlY19vcHMgbnZoZG1pX3BhdGNoX29wc184Y2ggPSB7CitzdGF0aWMgc3RydWN0IGhkYV9jb2RlY19vcHMgbnZoZG1pX3BhdGNoX29wc184Y2hfODkgPSB7CiAJLmJ1aWxkX2NvbnRyb2xzID0gbnZoZG1pX2J1aWxkX2NvbnRyb2xzLAotCS5idWlsZF9wY21zID0gbnZoZG1pX2J1aWxkX3BjbXNfOGNoLAorCS5idWlsZF9wY21zID0gbnZoZG1pX2J1aWxkX3BjbXNfOGNoXzg5LAorCS5pbml0ID0gbnZoZG1pX2luaXQsCisJLmZyZWUgPSBudmhkbWlfZnJlZSwKKwkudW5zb2xfZXZlbnQgPSBoZG1pX3Vuc29sX2V2ZW50LAorfTsKKworc3RhdGljIHN0cnVjdCBoZGFfY29kZWNfb3BzIG52aGRtaV9wYXRjaF9vcHNfOGNoXzd4ID0geworCS5idWlsZF9jb250cm9scyA9IG52aGRtaV9idWlsZF9jb250cm9scywKKwkuYnVpbGRfcGNtcyA9IG52aGRtaV9idWlsZF9wY21zXzhjaF83eCwKIAkuaW5pdCA9IG52aGRtaV9pbml0LAogCS5mcmVlID0gbnZoZG1pX2ZyZWUsCiB9OwpAQCAtMzUzLDkgKzQ2NywzNiBAQAogCS5mcmVlID0gbnZoZG1pX2ZyZWUsCiB9OwogCi1zdGF0aWMgaW50IHBhdGNoX252aGRtaV84Y2goc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCitzdGF0aWMgaW50IHBhdGNoX252aGRtaV84Y2hfODkoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc3RydWN0IG52aGRtaV9zcGVjICpzcGVjOworCXN0cnVjdCBoZG1pX3NwZWMgKnNwZWM7CisJaW50IGk7CisKKwlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3BlYyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvZGVjLT5zcGVjID0gc3BlYzsKKwlzcGVjLT5jb2RlY190eXBlID0gSERBX0NPREVDX05WSURJQV9NQ1A4OTsKKworCWlmIChoZG1pX3BhcnNlX2NvZGVjKGNvZGVjKSA8IDApIHsKKwkJY29kZWMtPnNwZWMgPSBOVUxMOworCQlrZnJlZShzcGVjKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWNvZGVjLT5wYXRjaF9vcHMgPSBudmhkbWlfcGF0Y2hfb3BzXzhjaF84OTsKKworCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fcGluczsgaSsrKQorCQlzbmRfaGRhX2VsZF9wcm9jX25ldyhjb2RlYywgJnNwZWMtPnNpbmtfZWxkW2ldLCBpKTsKKworCWluaXRfY2hhbm5lbF9hbGxvY2F0aW9ucygpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGF0Y2hfbnZoZG1pXzhjaF83eChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3QgaGRtaV9zcGVjICpzcGVjOwogCiAJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTM2NSwxNiArNTA2LDE3IEBACiAKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IDA7ICAvKiBubyBhbmFsb2cgKi8KIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSA4OwotCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gTnZfTWFzdGVyX0NvbnZlcnRfbmlkOworCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gbnZoZG1pX21hc3Rlcl9jb25fbmlkXzd4OworCXNwZWMtPmNvZGVjX3R5cGUgPSBIREFfQ09ERUNfTlZJRElBX01DUDdYOwogCi0JY29kZWMtPnBhdGNoX29wcyA9IG52aGRtaV9wYXRjaF9vcHNfOGNoOworCWNvZGVjLT5wYXRjaF9vcHMgPSBudmhkbWlfcGF0Y2hfb3BzXzhjaF83eDsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHBhdGNoX252aGRtaV8yY2goc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc3RydWN0IG52aGRtaV9zcGVjICpzcGVjOworCXN0cnVjdCBoZG1pX3NwZWMgKnNwZWM7CiAKIAlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQpAQCAtMzg0LDcgKzUyNiw4IEBACiAKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IDA7ICAvKiBubyBhbmFsb2cgKi8KIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwotCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gTnZfTWFzdGVyX0NvbnZlcnRfbmlkOworCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gbnZoZG1pX21hc3Rlcl9jb25fbmlkXzd4OworCXNwZWMtPmNvZGVjX3R5cGUgPSBIREFfQ09ERUNfTlZJRElBX01DUDdYOwogCiAJY29kZWMtPnBhdGNoX29wcyA9IG52aGRtaV9wYXRjaF9vcHNfMmNoOwogCkBAIC0zOTUsMTMgKzUzOCwyNCBAQAogICogcGF0Y2ggZW50cmllcwogICovCiBzdGF0aWMgc3RydWN0IGhkYV9jb2RlY19wcmVzZXQgc25kX2hkYV9wcmVzZXRfbnZoZG1pW10gPSB7Ci0JeyAuaWQgPSAweDEwZGUwMDAyLCAubmFtZSA9ICJNQ1A3OCBIRE1JIiwgLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaCB9LAotCXsgLmlkID0gMHgxMGRlMDAwMywgLm5hbWUgPSAiTUNQNzggSERNSSIsIC5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2ggfSwKLQl7IC5pZCA9IDB4MTBkZTAwMDUsIC5uYW1lID0gIk1DUDc4IEhETUkiLCAucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoIH0sCi0JeyAuaWQgPSAweDEwZGUwMDA2LCAubmFtZSA9ICJNQ1A3OCBIRE1JIiwgLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaCB9LAotCXsgLmlkID0gMHgxMGRlMDAwNywgLm5hbWUgPSAiTUNQN0EgSERNSSIsIC5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2ggfSwKIAl7IC5pZCA9IDB4MTBkZTAwNjcsIC5uYW1lID0gIk1DUDY3IEhETUkiLCAucGF0Y2ggPSBwYXRjaF9udmhkbWlfMmNoIH0sCiAJeyAuaWQgPSAweDEwZGU4MDAxLCAubmFtZSA9ICJNQ1A3MyBIRE1JIiwgLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzJjaCB9LAorCXsgLmlkID0gMHgxMGRlMDAwMiwgLm5hbWUgPSAiTUNQNzcvNzggSERNSSIsCisJICAucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoXzd4IH0sCisJeyAuaWQgPSAweDEwZGUwMDAzLCAubmFtZSA9ICJNQ1A3Ny83OCBIRE1JIiwKKwkgIC5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2hfN3ggfSwKKwl7IC5pZCA9IDB4MTBkZTAwMDUsIC5uYW1lID0gIk1DUDc3Lzc4IEhETUkiLAorCSAgLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaF83eCB9LAorCXsgLmlkID0gMHgxMGRlMDAwNiwgLm5hbWUgPSAiTUNQNzcvNzggSERNSSIsCisJICAucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoXzd4IH0sCisJeyAuaWQgPSAweDEwZGUwMDA3LCAubmFtZSA9ICJNQ1A3OS83QSBIRE1JIiwKKwkgIC5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2hfN3ggfSwKKwl7IC5pZCA9IDB4MTBkZTAwMGMsIC5uYW1lID0gIk1DUDg5IEhETUkiLAorCSAgLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaF84OSB9LAorCXsgLmlkID0gMHgxMGRlMDAwYiwgLm5hbWUgPSAiR1QyMXggSERNSSIsCisJICAucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoXzg5IH0sCisJeyAuaWQgPSAweDEwZGUwMDBkLCAubmFtZSA9ICJHVDI0MCBIRE1JIiwKKwkgIC5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2hfODkgfSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCkBAIC00MTIsOSArNTY2LDEyIEBACiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwMDciKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDA2NyIpOwogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGU4MDAxIik7CitNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwMGMiKTsKK01PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDAwYiIpOworTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDBkIik7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTnZpZGlhIEhETUkgSEQtYXVkaW8gY29kZWMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTlZJRElBIEhETUkgSEQtYXVkaW8gY29kZWMiKTsKIAogc3RhdGljIHN0cnVjdCBoZGFfY29kZWNfcHJlc2V0X2xpc3QgbnZoZG1pX2xpc3QgPSB7CiAJLnByZXNldCA9IHNuZF9oZGFfcHJlc2V0X252aGRtaSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKaW5kZXggZThjYmUyMS4uNWQyZmJiOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKQEAgLTQ5MTUsNyArNDkxNSw3IEBACiBzdGF0aWMgdm9pZCBmaXh1cF9zaW5nbGVfYWRjKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWhkYV9uaWRfdCBwaW47CisJaGRhX25pZF90IHBpbiA9IDA7CiAJaW50IGk7CiAKIAkvKiBzZWFyY2ggZm9yIHRoZSBpbnB1dCBwaW47IHRoZXJlIG11c3QgYmUgb25seSBvbmUgKi8KQEAgLTEzNTYxLDYgKzEzNTYxLDggQEAKIHN0YXRpYyB2b2lkIGFsYzI2OV9xdWFudGFfZmwxX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MTU7CisJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE0OwogCXNwZWMtPmV4dF9taWMucGluID0gMHgxODsKIAlzcGVjLT5leHRfbWljLm11eF9pZHggPSAwOwogCXNwZWMtPmludF9taWMucGluID0gMHgxOTsKQEAgLTEzNjU2LDYgKzEzNjU4LDggQEAKIHN0YXRpYyB2b2lkIGFsYzI2OV9sYXB0b3BfZG1pY19zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDE1OworCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNDsKIAlzcGVjLT5leHRfbWljLnBpbiA9IDB4MTg7CiAJc3BlYy0+ZXh0X21pYy5tdXhfaWR4ID0gMDsKIAlzcGVjLT5pbnRfbWljLnBpbiA9IDB4MTI7CkBAIC0xMzY2Niw2ICsxMzY3MCw4IEBACiBzdGF0aWMgdm9pZCBhbGMyNjl2Yl9sYXB0b3BfZG1pY19zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDE1OworCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNDsKIAlzcGVjLT5leHRfbWljLnBpbiA9IDB4MTg7CiAJc3BlYy0+ZXh0X21pYy5tdXhfaWR4ID0gMDsKIAlzcGVjLT5pbnRfbWljLnBpbiA9IDB4MTI7CkBAIC0xMzY3Niw2ICsxMzY4Miw4IEBACiBzdGF0aWMgdm9pZCBhbGMyNjlfbGFwdG9wX2FtaWNfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNTsKKwlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7CiAJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OwogCXNwZWMtPmV4dF9taWMubXV4X2lkeCA9IDA7CiAJc3BlYy0+aW50X21pYy5waW4gPSAweDE5OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi94b25hcl93bTg3eDYuYyBiL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfd204N3g2LmMKaW5kZXggNzc1NGRiMS4uZGJjNGI4OSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi94b25hcl93bTg3eDYuYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyX3dtODd4Ni5jCkBAIC02OCw3ICs2OCw3IEBACiAJCQkgT1hZR0VOX1NQSV9DRU5fTEFUQ0hfQ0xPQ0tfTE8sCiAJCQkgKHJlZyA8PCA5KSB8IHZhbHVlKTsKIAlpZiAocmVnIDwgQVJSQVlfU0laRShkYXRhLT53bTg3NzZfcmVncykpIHsKLQkJaWYgKHJlZyA+PSBXTTg3NzZfSFBMVk9MIHx8IHJlZyA8PSBXTTg3NzZfREFDTUFTVEVSKQorCQlpZiAocmVnID49IFdNODc3Nl9IUExWT0wgJiYgcmVnIDw9IFdNODc3Nl9EQUNNQVNURVIpCiAJCQl2YWx1ZSAmPSB+V004Nzc2X1VQREFURTsKIAkJZGF0YS0+d204Nzc2X3JlZ3NbcmVnXSA9IHZhbHVlOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYyBiL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYwppbmRleCA5NjBhMjI3Li5hZDQ0NjI2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMKKysrIGIvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jCkBAIC0xOTc0LDkgKzE5NzQsOSBAQAogCX0KIAlzbmRfaXByaW50ZihidWZmZXIsICJQYXRoczpcbiIpOwogCWkgPSBnZXRwYXRocyhjaWYsIHApOwotCXdoaWxlIChpLS0pIHsKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiJXgtPiV4ICIsIHBbaSAtIDFdLCBwW2ldKTsKLQkJaS0tOworCXdoaWxlIChpID49IDIpIHsKKwkJaSAtPSAyOworCQlzbmRfaXByaW50ZihidWZmZXIsICIleC0+JXggIiwgcFtpXSwgcFtpICsgMV0pOwogCX0KIAlzbmRfaXByaW50ZihidWZmZXIsICJcbiIpOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hazQxMDQuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0MTA0LmMKaW5kZXggYjllZjdlNC4uYjY4ZDk5ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hazQxMDQuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDEwNC5jCkBAIC05MCwxMiArOTAsMTAgQEAKIAlpZiAocmVnID49IGNvZGVjLT5yZWdfY2FjaGVfc2l6ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZWcgJj0gQUs0MTA0X1JFR19NQVNLOwotCXJlZyB8PSBBSzQxMDRfV1JJVEU7Ci0KIAkvKiBvbmx5IHdyaXRlIHRvIHRoZSBoYXJkd2FyZSBpZiB2YWx1ZSBoYXMgY2hhbmdlZCAqLwogCWlmIChjYWNoZVtyZWddICE9IHZhbHVlKSB7Ci0JCXU4IHRtcFsyXSA9IHsgcmVnLCB2YWx1ZSB9OworCQl1OCB0bXBbMl0gPSB7IChyZWcgJiBBSzQxMDRfUkVHX01BU0spIHwgQUs0MTA0X1dSSVRFLCB2YWx1ZSB9OworCiAJCWlmIChzcGlfd3JpdGUoc3BpLCB0bXAsIHNpemVvZih0bXApKSkgewogCQkJZGV2X2Vycigmc3BpLT5kZXYsICJTUEkgd3JpdGUgZmFpbGVkXG4iKTsKIAkJCXJldHVybiAtRUlPOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy91ZGExMzgwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3VkYTEzODAuYwppbmRleCBhMjc2M2MyLi45Y2QwYTY2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3VkYTEzODAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3VkYTEzODAuYwpAQCAtMTM3LDcgKzEzNyw3IEBACiB7CiAJaW50IGJpdCwgcmVnOwogCi0JZm9yX2VhY2hfYml0KGJpdCwgJnVkYTEzODBfY2FjaGVfZGlydHksIFVEQTEzODBfQ0FDSEVSRUdOVU0gLSAweDEwKSB7CisJZm9yX2VhY2hfc2V0X2JpdChiaXQsICZ1ZGExMzgwX2NhY2hlX2RpcnR5LCBVREExMzgwX0NBQ0hFUkVHTlVNIC0gMHgxMCkgewogCQlyZWcgPSAweDEwICsgYml0OwogCQlwcl9kZWJ1ZygidWRhMTM4MDogZmx1c2ggcmVnICV4IHZhbCAleDpcbiIsIHJlZywKIAkJCQl1ZGExMzgwX3JlYWRfcmVnX2NhY2hlKHVkYTEzODBfY29kZWMsIHJlZykpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTgzNTAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmMKaW5kZXggNzE4ZWY5MS4uZGYyYzZkOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTgzNTAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5jCkBAIC0xMzQ5LDcgKzEzNDksNyBAQAogCWludCBtYXNrOwogCXN0cnVjdCB3bTgzNTBfamFja19kYXRhICpqYWNrID0gTlVMTDsKIAotCXN3aXRjaCAoaXJxKSB7CisJc3dpdGNoIChpcnEgLSB3bTgzNTAtPmlycV9iYXNlKSB7CiAJY2FzZSBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfTDoKIAkJamFjayA9ICZwcml2LT5ocGw7CiAJCW1hc2sgPSBXTTgzNTBfSkFDS19MX0xWTDsKQEAgLTE0MjQsNyArMTQyNCw3IEBACiAJd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0pBQ0tfREVURUNULCBlbmEpOwogCiAJLyogU3luYyBzdGF0dXMgKi8KLQl3bTgzNTBfaHBfamFja19oYW5kbGVyKGlycSwgcHJpdik7CisJd204MzUwX2hwX2phY2tfaGFuZGxlcihpcnEgKyB3bTgzNTAtPmlycV9iYXNlLCBwcml2KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTUyMSw4ICsxNTIxLDggQEAKIAkJCSAgV004MzUwX0pETF9FTkEgfCBXTTgzNTBfSkRSX0VOQSk7CiAJd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfUE9XRVJfTUdNVF80LCBXTTgzNTBfVE9DTEtfRU5BKTsKIAotCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9MKTsKLQl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfUik7CisJd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX0wsIHByaXYpOworCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9SLCBwcml2KTsKIAogCXByaXYtPmhwbC5qYWNrID0gTlVMTDsKIAlwcml2LT5ocHIuamFjayA9IE5VTEw7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvc2l1LmggYi9zb3VuZC9zb2Mvc2gvc2l1LmgKaW5kZXggOWNjMDRhYi4uYzBiZmFiOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL3NpdS5oCisrKyBiL3NvdW5kL3NvYy9zaC9zaXUuaApAQCAtNzIsNyArNzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlIDxhc20vZG1hLXNoLmg+CisjaW5jbHVkZSA8YXNtL2RtYWVuZ2luZS5oPgogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL3NpdV9wY20uYyBiL3NvdW5kL3NvYy9zaC9zaXVfcGNtLmMKaW5kZXggYzVlZmMzMC4uYmE3ZjhkMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL3NpdV9wY20uYworKysgYi9zb3VuZC9zb2Mvc2gvc2l1X3BjbS5jCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy1kYWkuaD4KIAotI2luY2x1ZGUgPGFzbS9kbWEtc2guaD4KKyNpbmNsdWRlIDxhc20vZG1hZW5naW5lLmg+CiAjaW5jbHVkZSA8YXNtL3NpdS5oPgogCiAjaW5jbHVkZSAic2l1LmgiCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWNvcmUuYyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCmluZGV4IGEwM2JhYzkuLmM4YjA1NTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY29yZS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCkBAIC00MjcsMjQgKzQyNywyNCBAQAogCWlmICghcnVudGltZS0+aHcucmF0ZXMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhc29jOiAlcyA8LT4gJXMgTm8gbWF0Y2hpbmcgcmF0ZXNcbiIsCiAJCQljb2RlY19kYWktPm5hbWUsIGNwdV9kYWktPm5hbWUpOwotCQlnb3RvIG1hY2hpbmVfZXJyOworCQlnb3RvIGNvbmZpZ19lcnI7CiAJfQogCWlmICghcnVudGltZS0+aHcuZm9ybWF0cykgewogCQlwcmludGsoS0VSTl9FUlIgImFzb2M6ICVzIDwtPiAlcyBObyBtYXRjaGluZyBmb3JtYXRzXG4iLAogCQkJY29kZWNfZGFpLT5uYW1lLCBjcHVfZGFpLT5uYW1lKTsKLQkJZ290byBtYWNoaW5lX2VycjsKKwkJZ290byBjb25maWdfZXJyOwogCX0KIAlpZiAoIXJ1bnRpbWUtPmh3LmNoYW5uZWxzX21pbiB8fCAhcnVudGltZS0+aHcuY2hhbm5lbHNfbWF4KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYXNvYzogJXMgPC0+ICVzIE5vIG1hdGNoaW5nIGNoYW5uZWxzXG4iLAogCQkJY29kZWNfZGFpLT5uYW1lLCBjcHVfZGFpLT5uYW1lKTsKLQkJZ290byBtYWNoaW5lX2VycjsKKwkJZ290byBjb25maWdfZXJyOwogCX0KIAogCS8qIFN5bW1ldHJ5IG9ubHkgYXBwbGllcyBpZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhY3RpdmUgc3RyZWFtLiAqLwogCWlmIChjcHVfZGFpLT5hY3RpdmUgfHwgY29kZWNfZGFpLT5hY3RpdmUpIHsKIAkJcmV0ID0gc29jX3BjbV9hcHBseV9zeW1tZXRyeShzdWJzdHJlYW0pOwogCQlpZiAocmV0ICE9IDApCi0JCQlnb3RvIG1hY2hpbmVfZXJyOworCQkJZ290byBjb25maWdfZXJyOwogCX0KIAogCXByX2RlYnVnKCJhc29jOiAlcyA8LT4gJXMgaW5mbzpcbiIsIGNvZGVjX2RhaS0+bmFtZSwgY3B1X2RhaS0+bmFtZSk7CkBAIC00NjQsMTAgKzQ2NCwxNCBAQAogCW11dGV4X3VubG9jaygmcGNtX211dGV4KTsKIAlyZXR1cm4gMDsKIAotbWFjaGluZV9lcnI6Citjb25maWdfZXJyOgogCWlmIChtYWNoaW5lLT5vcHMgJiYgbWFjaGluZS0+b3BzLT5zaHV0ZG93bikKIAkJbWFjaGluZS0+b3BzLT5zaHV0ZG93bihzdWJzdHJlYW0pOwogCittYWNoaW5lX2VycjoKKwlpZiAoY29kZWNfZGFpLT5vcHMtPnNodXRkb3duKQorCQljb2RlY19kYWktPm9wcy0+c2h1dGRvd24oc3Vic3RyZWFtLCBjb2RlY19kYWkpOworCiBjb2RlY19kYWlfZXJyOgogCWlmIChwbGF0Zm9ybS0+cGNtX29wcy0+Y2xvc2UpCiAJCXBsYXRmb3JtLT5wY21fb3BzLT5jbG9zZShzdWJzdHJlYW0pOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL0tjb25maWcgYi9zb3VuZC91c2IvS2NvbmZpZwppbmRleCA4YzI5MjU4Li5jNTcwYWUzIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvS2NvbmZpZworKysgYi9zb3VuZC91c2IvS2NvbmZpZwpAQCAtMjIsMTMgKzIyLDEzIEBACiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtdXNiLWF1ZGlvLgogCiBjb25maWcgU05EX1VTQl9VQTEwMQotCXRyaXN0YXRlICJFZGlyb2wgVUEtMTAxIGRyaXZlciAoRVhQRVJJTUVOVEFMKSIKKwl0cmlzdGF0ZSAiRWRpcm9sIFVBLTEwMS9VQS0xMDAwIGRyaXZlciAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBTTkRfUENNCiAJc2VsZWN0IFNORF9SQVdNSURJCiAJaGVscAotCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBFZGlyb2wgVUEtMTAxIGF1ZGlvL01JREkKLQkgIGludGVyZmFjZS4KKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgRWRpcm9sIFVBLTEwMSBhbmQgVUEtMTAwMAorCSAgYXVkaW8vTUlESSBpbnRlcmZhY2VzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtdWExMDEuCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvbWlkaS5oIGIvc291bmQvdXNiL2NhaWFxL21pZGkuaAppbmRleCA5ZDE2ZGIwLi4zODBmOTg0IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvY2FpYXEvbWlkaS5oCisrKyBiL3NvdW5kL3VzYi9jYWlhcS9taWRpLmgKQEAgLTMsNiArMyw2IEBACiAKIGludCBzbmRfdXNiX2NhaWFxX21pZGlfaW5pdChzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2KTsKIHZvaWQgc25kX3VzYl9jYWlhcV9taWRpX2hhbmRsZV9pbnB1dChzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2LCBpbnQgcG9ydCwgY29uc3QgY2hhciAqYnVmLCBpbnQgbGVuKTsKLXZvaWQgc25kX3VzYl9jYWlhcV9taWRpX291dHB1dF9kb25lKHN0cnVjdCB1cmIqIHVyYik7Cit2b2lkIHNuZF91c2JfY2FpYXFfbWlkaV9vdXRwdXRfZG9uZShzdHJ1Y3QgdXJiICp1cmIpOwogCiAjZW5kaWYgLyogQ0FJQVFfTUlESV9IICovCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdWExMDEuYyBiL3NvdW5kL3VzYi91YTEwMS5jCmluZGV4IDRmNGNjZGYuLjNkNDU4ZDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91YTEwMS5jCisrKyBiL3NvdW5kL3VzYi91YTEwMS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIEVkaXJvbCBVQS0xMDEgZHJpdmVyCisgKiBFZGlyb2wgVUEtMTAxL1VBLTEwMDAgZHJpdmVyCiAgKiBDb3B5cmlnaHQgKGMpIENsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPgogICoKICAqIFRoaXMgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTI1LDEzICsyNSwxMCBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlICJ1c2JhdWRpby5oIgogCi1NT0RVTEVfREVTQ1JJUFRJT04oIkVkaXJvbCBVQS0xMDEgZHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkVkaXJvbCBVQS0xMDEvMTAwMCBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkNsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwotTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7RWRpcm9sLFVBLTEwMX19Iik7Ci0KLS8qIEkgdXNlIG15IFVBLTFBIGZvciB0ZXN0aW5nIGJlY2F1c2UgSSBkb24ndCBoYXZlIGEgVUEtMTAxIC4uLiAqLwotI2RlZmluZSBVQTFBX0hBQ0sKK01PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e0VkaXJvbCxVQS0xMDF9LHtFZGlyb2wsVUEtMTAwMH19Iik7CiAKIC8qCiAgKiBTaG91bGQgbm90IGJlIGxvd2VyIHRoYW4gdGhlIG1pbmltdW0gc2NoZWR1bGluZyBkZWxheSBvZiB0aGUgaG9zdApAQCAtMTMyLDkgKzEyOSw2IEBACiAJCQlkbWFfYWRkcl90IGRtYTsKIAkJfSBidWZmZXJzW01BWF9NRU1PUllfQlVGRkVSU107CiAJfSBjYXB0dXJlLCBwbGF5YmFjazsKLQotCXVuc2lnbmVkIGludCBmcHNbMTBdOwotCXVuc2lnbmVkIGludCBmcmFtZV9jb3VudGVyOwogfTsKIAogc3RhdGljIERFRklORV9NVVRFWChkZXZpY2VzX211dGV4KTsKQEAgLTQyNCwxNiArNDE4LDYgQEAKIAlpZiAoZG9fcGVyaW9kX2VsYXBzZWQpCiAJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3RyZWFtLT5zdWJzdHJlYW0pOwogCi0JLyogZm9yIGRlYnVnZ2luZzogbWVhc3VyZSB0aGUgc2FtcGxlIHJhdGUgcmVsYXRpdmUgdG8gdGhlIFVTQiBjbG9jayAqLwotCXVhLT5mcHNbdWEtPmZyYW1lX2NvdW50ZXIrKyAvIHVhLT5wYWNrZXRzX3Blcl9zZWNvbmRdICs9IGZyYW1lczsKLQlpZiAodWEtPmZyYW1lX2NvdW50ZXIgPj0gQVJSQVlfU0laRSh1YS0+ZnBzKSAqIHVhLT5wYWNrZXRzX3Blcl9zZWNvbmQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgImNhcHR1cmUgcmF0ZToiKTsKLQkJZm9yIChmcmFtZXMgPSAwOyBmcmFtZXMgPCBBUlJBWV9TSVpFKHVhLT5mcHMpOyArK2ZyYW1lcykKLQkJCXByaW50ayhLRVJOX0NPTlQgIiAldSIsIHVhLT5mcHNbZnJhbWVzXSk7Ci0JCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Ci0JCW1lbXNldCh1YS0+ZnBzLCAwLCBzaXplb2YodWEtPmZwcykpOwotCQl1YS0+ZnJhbWVfY291bnRlciA9IDA7Ci0JfQogCXJldHVybjsKIAogc3RyZWFtX3N0b3BwZWQ6CkBAIC0xMjAwLDEzICsxMTg0LDMwIEBACiAJCS50eXBlID0gUVVJUktfTUlESV9GSVhFRF9FTkRQT0lOVCwKIAkJLmRhdGEgPSAmbWlkaV9lcAogCX07CisJc3RhdGljIGNvbnN0IGludCBpbnRmX251bWJlcnNbMl1bM10gPSB7CisJCXsJLyogVUEtMTAxICovCisJCQlbSU5URl9QTEFZQkFDS10gPSAwLAorCQkJW0lOVEZfQ0FQVFVSRV0gPSAxLAorCQkJW0lOVEZfTUlESV0gPSAyLAorCQl9LAorCQl7CS8qIFVBLTEwMDAgKi8KKwkJCVtJTlRGX0NBUFRVUkVdID0gMSwKKwkJCVtJTlRGX1BMQVlCQUNLXSA9IDIsCisJCQlbSU5URl9NSURJXSA9IDMsCisJCX0sCisJfTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHVhMTAxICp1YTsKIAl1bnNpZ25lZCBpbnQgY2FyZF9pbmRleCwgaTsKKwlpbnQgaXNfdWExMDAwOworCWNvbnN0IGNoYXIgKm5hbWU7CiAJY2hhciB1c2JfcGF0aFszMl07CiAJaW50IGVycjsKIAotCWlmIChpbnRlcmZhY2UtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciAhPSAwKQorCWlzX3VhMTAwMCA9IHVzYl9pZC0+aWRQcm9kdWN0ID09IDB4MDA0NDsKKworCWlmIChpbnRlcmZhY2UtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciAhPQorCSAgICBpbnRmX251bWJlcnNbaXNfdWExMDAwXVswXSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAltdXRleF9sb2NrKCZkZXZpY2VzX211dGV4KTsKQEAgLTEyMzksMjAgKzEyNDAsMTMgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ1YS0+cmF0ZV9mZWVkYmFja193YWl0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ1YS0+YWxzYV9wbGF5YmFja193YWl0KTsKIAotI2lmZGVmIFVBMUFfSEFDSwotCWlmICh1YS0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9PSBjcHVfdG9fbGUxNigweDAwMTgpKSB7Ci0JCXVhLT5pbnRmWzJdID0gaW50ZXJmYWNlOwotCQl1YS0+aW50ZlswXSA9IHVzYl9pZm51bV90b19pZih1YS0+ZGV2LCAxKTsKLQkJdWEtPmludGZbMV0gPSB1c2JfaWZudW1fdG9faWYodWEtPmRldiwgMik7Ci0JCXVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKCZ1YTEwMV9kcml2ZXIsIHVhLT5pbnRmWzBdLCB1YSk7Ci0JCXVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKCZ1YTEwMV9kcml2ZXIsIHVhLT5pbnRmWzFdLCB1YSk7Ci0JfSBlbHNlIHsKLSNlbmRpZgogCXVhLT5pbnRmWzBdID0gaW50ZXJmYWNlOwogCWZvciAoaSA9IDE7IGkgPCBBUlJBWV9TSVpFKHVhLT5pbnRmKTsgKytpKSB7Ci0JCXVhLT5pbnRmW2ldID0gdXNiX2lmbnVtX3RvX2lmKHVhLT5kZXYsIGkpOworCQl1YS0+aW50ZltpXSA9IHVzYl9pZm51bV90b19pZih1YS0+ZGV2LAorCQkJCQkgICAgICBpbnRmX251bWJlcnNbaXNfdWExMDAwXVtpXSk7CiAJCWlmICghdWEtPmludGZbaV0pIHsKLQkJCWRldl9lcnIoJnVhLT5kZXYtPmRldiwgImludGVyZmFjZSAldSBub3QgZm91bmRcbiIsIGkpOworCQkJZGV2X2VycigmdWEtPmRldi0+ZGV2LCAiaW50ZXJmYWNlICV1IG5vdCBmb3VuZFxuIiwKKwkJCQlpbnRmX251bWJlcnNbaXNfdWExMDAwXVtpXSk7CiAJCQllcnIgPSAtRU5YSU87CiAJCQlnb3RvIHByb2JlX2Vycm9yOwogCQl9CkBAIC0xMjY0LDM5ICsxMjU4LDE5IEBACiAJCQlnb3RvIHByb2JlX2Vycm9yOwogCQl9CiAJfQotI2lmZGVmIFVBMUFfSEFDSwotCX0KLSNlbmRpZgogCiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmaW50ZXJmYWNlLT5kZXYpOwogCi0jaWZkZWYgVUExQV9IQUNLCi0JaWYgKHVhLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09IGNwdV90b19sZTE2KDB4MDAxOCkpIHsKLQkJdWEtPmZvcm1hdF9iaXQgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRTsKLQkJdWEtPnJhdGUgPSA0NDEwMDsKLQkJdWEtPnBhY2tldHNfcGVyX3NlY29uZCA9IDEwMDA7Ci0JCXVhLT5jYXB0dXJlLmNoYW5uZWxzID0gMjsKLQkJdWEtPnBsYXliYWNrLmNoYW5uZWxzID0gMjsKLQkJdWEtPmNhcHR1cmUuZnJhbWVfYnl0ZXMgPSA0OwotCQl1YS0+cGxheWJhY2suZnJhbWVfYnl0ZXMgPSA0OwotCQl1YS0+Y2FwdHVyZS51c2JfcGlwZSA9IHVzYl9yY3Zpc29jcGlwZSh1YS0+ZGV2LCAyKTsKLQkJdWEtPnBsYXliYWNrLnVzYl9waXBlID0gdXNiX3NuZGlzb2NwaXBlKHVhLT5kZXYsIDEpOwotCQl1YS0+Y2FwdHVyZS5tYXhfcGFja2V0X2J5dGVzID0gMTkyOwotCQl1YS0+cGxheWJhY2subWF4X3BhY2tldF9ieXRlcyA9IDE5MjsKLQl9IGVsc2UgewotI2VuZGlmCiAJZXJyID0gZGV0ZWN0X3VzYl9mb3JtYXQodWEpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIHByb2JlX2Vycm9yOwotI2lmZGVmIFVBMUFfSEFDSwotCX0KLSNlbmRpZgogCisJbmFtZSA9IHVzYl9pZC0+aWRQcm9kdWN0ID09IDB4MDA0NCA/ICJVQS0xMDAwIiA6ICJVQS0xMDEiOwogCXN0cmNweShjYXJkLT5kcml2ZXIsICJVQS0xMDEiKTsKLQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiVUEtMTAxIik7CisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgbmFtZSk7CiAJdXNiX21ha2VfcGF0aCh1YS0+ZGV2LCB1c2JfcGF0aCwgc2l6ZW9mKHVzYl9wYXRoKSk7CiAJc25wcmludGYodWEtPmNhcmQtPmxvbmduYW1lLCBzaXplb2YodWEtPmNhcmQtPmxvbmduYW1lKSwKLQkJICJFRElST0wgVUEtMTAxIChzZXJpYWwgJXMpLCAldSBIeiBhdCAlcywgJXMgc3BlZWQiLAorCQkgIkVESVJPTCAlcyAoc2VyaWFsICVzKSwgJXUgSHogYXQgJXMsICVzIHNwZWVkIiwgbmFtZSwKIAkJIHVhLT5kZXYtPnNlcmlhbCA/IHVhLT5kZXYtPnNlcmlhbCA6ICI/IiwgdWEtPnJhdGUsIHVzYl9wYXRoLAogCQkgdWEtPmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0ggPyAiaGlnaCIgOiAiZnVsbCIpOwogCkBAIC0xMzE0LDI0ICsxMjg4LDE4IEBACiAJaWYgKGVyciA8IDApCiAJCWdvdG8gcHJvYmVfZXJyb3I7CiAKLQllcnIgPSBzbmRfcGNtX25ldyhjYXJkLCAiVUEtMTAxIiwgMCwgMSwgMSwgJnVhLT5wY20pOworCWVyciA9IHNuZF9wY21fbmV3KGNhcmQsIG5hbWUsIDAsIDEsIDEsICZ1YS0+cGNtKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBwcm9iZV9lcnJvcjsKIAl1YS0+cGNtLT5wcml2YXRlX2RhdGEgPSB1YTsKLQlzdHJjcHkodWEtPnBjbS0+bmFtZSwgIlVBLTEwMSIpOworCXN0cmNweSh1YS0+cGNtLT5uYW1lLCBuYW1lKTsKIAlzbmRfcGNtX3NldF9vcHModWEtPnBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgJnBsYXliYWNrX3BjbV9vcHMpOwogCXNuZF9wY21fc2V0X29wcyh1YS0+cGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsICZjYXB0dXJlX3BjbV9vcHMpOwogCi0jaWZkZWYgVUExQV9IQUNLCi0JaWYgKHVhLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ICE9IGNwdV90b19sZTE2KDB4MDAxOCkpIHsKLSNlbmRpZgogCWVyciA9IHNuZF91c2JtaWRpX2NyZWF0ZShjYXJkLCB1YS0+aW50ZltJTlRGX01JREldLAogCQkJCSAmdWEtPm1pZGlfbGlzdCwgJm1pZGlfcXVpcmspOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIHByb2JlX2Vycm9yOwotI2lmZGVmIFVBMUFfSEFDSwotCX0KLSNlbmRpZgogCiAJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CiAJaWYgKGVyciA8IDApCkBAIC0xMzg2LDExICsxMzU0LDkgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVhMTAxX2lkc1tdID0gewotI2lmZGVmIFVBMUFfSEFDSwotCXsgVVNCX0RFVklDRSgweDA1ODIsIDB4MDAxOCkgfSwKLSNlbmRpZgotCXsgVVNCX0RFVklDRSgweDA1ODIsIDB4MDA3ZCkgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTgyLCAweDAwOGQpIH0sCisJeyBVU0JfREVWSUNFKDB4MDU4MiwgMHgwMDQ0KSB9LCAvKiBVQS0xMDAwIGhpZ2ggc3BlZWQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTgyLCAweDAwN2QpIH0sIC8qIFVBLTEwMSBoaWdoIHNwZWVkICovCisJeyBVU0JfREVWSUNFKDB4MDU4MiwgMHgwMDhkKSB9LCAvKiBVQS0xMDEgZnVsbCBzcGVlZCAqLwogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB1YTEwMV9pZHMpOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYmF1ZGlvLmMgYi9zb3VuZC91c2IvdXNiYXVkaW8uYwppbmRleCBjNTM5ZjdmLi4xMWIwODI2IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNiYXVkaW8uYworKysgYi9zb3VuZC91c2IvdXNiYXVkaW8uYwpAQCAtMjQ4Myw3ICsyNDgzLDYgQEAKIAkJCQkgICBzYW1wbGVfd2lkdGgsIHNhbXBsZV9ieXRlcyk7CiAJCX0KIAkJLyogY2hlY2sgdGhlIGZvcm1hdCBieXRlIHNpemUgKi8KLQkJcHJpbnRrKCIgWFhYWFggU0FNUExFIEJZVEVTICVkXG4iLCBzYW1wbGVfYnl0ZXMpOwogCQlzd2l0Y2ggKHNhbXBsZV9ieXRlcykgewogCQljYXNlIDE6CiAJCQlwY21fZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9TODsKQEAgLTI1ODEsNiArMjU4MCw5IEBACiAJCQkgICAgIGNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwZDhjLCAweDAxMDIpKSAmJgogCQkJICAgIGZwLT5hbHRzZXR0aW5nID09IDUgJiYgZnAtPm1heHBhY2tzaXplID09IDM5MikKIAkJCQlyYXRlID0gOTYwMDA7CisJCQkvKiBDcmVhdGl2ZSBWRjA0NzAgTGl2ZSBDYW0gcmVwb3J0cyAxNiBrSHogaW5zdGVhZCBvZiA4a0h6ICovCisJCQlpZiAocmF0ZSA9PSAxNjAwMCAmJiBjaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHg0MDY4KSkKKwkJCQlyYXRlID0gODAwMDsKIAkJCWZwLT5yYXRlX3RhYmxlW2ZwLT5ucl9yYXRlc10gPSByYXRlOwogCQkJaWYgKCFmcC0+cmF0ZV9taW4gfHwgcmF0ZSA8IGZwLT5yYXRlX21pbikKIAkJCQlmcC0+cmF0ZV9taW4gPSByYXRlOwpAQCAtMzM4Niw1OCArMzM4OCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBDcmVhdGUgYSBzdHJlYW0gZm9yIGFuIEVkaXJvbCBVQS0xMDAwIGludGVyZmFjZS4KLSAqLwotc3RhdGljIGludCBjcmVhdGVfdWExMDAwX3F1aXJrKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLAotCQkJICAgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyayAqcXVpcmspCi17Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCBhdWRpb2Zvcm1hdCB1YTEwMDBfZm9ybWF0ID0gewotCQkuZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9TMzJfTEUsCi0JCS5mbXRfdHlwZSA9IFVBQ19GT1JNQVRfVFlQRV9JLAotCQkuYWx0c2V0dGluZyA9IDEsCi0JCS5hbHRzZXRfaWR4ID0gMSwKLQkJLmF0dHJpYnV0ZXMgPSAwLAotCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV9DT05USU5VT1VTLAotCX07Ci0Jc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0czsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICphbHRzZDsKLQlzdHJ1Y3QgYXVkaW9mb3JtYXQgKmZwOwotCWludCBzdHJlYW0sIGVycjsKLQotCWlmIChpZmFjZS0+bnVtX2FsdHNldHRpbmcgIT0gMikKLQkJcmV0dXJuIC1FTlhJTzsKLQlhbHRzID0gJmlmYWNlLT5hbHRzZXR0aW5nWzFdOwotCWFsdHNkID0gZ2V0X2lmYWNlX2Rlc2MoYWx0cyk7Ci0JaWYgKGFsdHMtPmV4dHJhbGVuICE9IDExIHx8IGFsdHMtPmV4dHJhWzFdICE9IFVTQl9EVF9DU19JTlRFUkZBQ0UgfHwKLQkgICAgYWx0c2QtPmJOdW1FbmRwb2ludHMgIT0gMSkKLQkJcmV0dXJuIC1FTlhJTzsKLQotCWZwID0ga21lbWR1cCgmdWExMDAwX2Zvcm1hdCwgc2l6ZW9mKCpmcCksIEdGUF9LRVJORUwpOwotCWlmICghZnApCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZnAtPmNoYW5uZWxzID0gYWx0cy0+ZXh0cmFbNF07Ci0JZnAtPmlmYWNlID0gYWx0c2QtPmJJbnRlcmZhY2VOdW1iZXI7Ci0JZnAtPmVuZHBvaW50ID0gZ2V0X2VuZHBvaW50KGFsdHMsIDApLT5iRW5kcG9pbnRBZGRyZXNzOwotCWZwLT5lcF9hdHRyID0gZ2V0X2VuZHBvaW50KGFsdHMsIDApLT5ibUF0dHJpYnV0ZXM7Ci0JZnAtPmRhdGFpbnRlcnZhbCA9IHBhcnNlX2RhdGFpbnRlcnZhbChjaGlwLCBhbHRzKTsKLQlmcC0+bWF4cGFja3NpemUgPSBsZTE2X3RvX2NwdShnZXRfZW5kcG9pbnQoYWx0cywgMCktPndNYXhQYWNrZXRTaXplKTsKLQlmcC0+cmF0ZV9tYXggPSBmcC0+cmF0ZV9taW4gPSBjb21iaW5lX3RyaXBsZSgmYWx0cy0+ZXh0cmFbOF0pOwotCi0Jc3RyZWFtID0gKGZwLT5lbmRwb2ludCAmIFVTQl9ESVJfSU4pCi0JCT8gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFIDogU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSzsKLQllcnIgPSBhZGRfYXVkaW9fZW5kcG9pbnQoY2hpcCwgc3RyZWFtLCBmcCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJa2ZyZWUoZnApOwotCQlyZXR1cm4gZXJyOwotCX0KLQkvKiBGSVhNRTogcGxheWJhY2sgbXVzdCBiZSBzeW5jaHJvbml6ZWQgdG8gY2FwdHVyZSAqLwotCXVzYl9zZXRfaW50ZXJmYWNlKGNoaXAtPmRldiwgZnAtPmlmYWNlLCAwKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBzbmRfdXNiX2NyZWF0ZV9xdWlyayhzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwKIAkJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsCiAJCQkJY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmsgKnF1aXJrKTsKQEAgLTM2ODYsNyArMzYzNiw2IEBACiAJCVtRVUlSS19NSURJX0NNRV0gPSBjcmVhdGVfYW55X21pZGlfcXVpcmssCiAJCVtRVUlSS19BVURJT19TVEFOREFSRF9JTlRFUkZBQ0VdID0gY3JlYXRlX3N0YW5kYXJkX2F1ZGlvX3F1aXJrLAogCQlbUVVJUktfQVVESU9fRklYRURfRU5EUE9JTlRdID0gY3JlYXRlX2ZpeGVkX3N0cmVhbV9xdWlyaywKLQkJW1FVSVJLX0FVRElPX0VESVJPTF9VQTEwMDBdID0gY3JlYXRlX3VhMTAwMF9xdWlyaywKIAkJW1FVSVJLX0FVRElPX0VESVJPTF9VQVhYXSA9IGNyZWF0ZV91YXh4X3F1aXJrLAogCQlbUVVJUktfQVVESU9fQUxJR05fVFJBTlNGRVJdID0gY3JlYXRlX2FsaWduX3RyYW5zZmVyX3F1aXJrCiAJfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JhdWRpby5oIGIvc291bmQvdXNiL3VzYmF1ZGlvLmgKaW5kZXggNmIwMTZkNC4uNDJjMjk5YyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYmF1ZGlvLmgKKysrIGIvc291bmQvdXNiL3VzYmF1ZGlvLmgKQEAgLTc1LDcgKzc1LDYgQEAKIAlRVUlSS19NSURJX1VTMTIyTCwKIAlRVUlSS19BVURJT19TVEFOREFSRF9JTlRFUkZBQ0UsCiAJUVVJUktfQVVESU9fRklYRURfRU5EUE9JTlQsCi0JUVVJUktfQVVESU9fRURJUk9MX1VBMTAwMCwKIAlRVUlSS19BVURJT19FRElST0xfVUFYWCwKIAlRVUlSS19BVURJT19BTElHTl9UUkFOU0ZFUiwKIApAQCAtMTEyLDcgKzExMSw3IEBACiAKIC8qIGZvciBRVUlSS19BVURJTy9NSURJX1NUQU5EQVJEX0lOVEVSRkFDRSwgZGF0YSBpcyBOVUxMICovCiAKLS8qIGZvciBRVUlSS19BVURJT19FRElST0xfVUE3MDBfVUEyNS9VQTEwMDAsIGRhdGEgaXMgTlVMTCAqLworLyogZm9yIFFVSVJLX0FVRElPX0VESVJPTF9VQVhYLCBkYXRhIGlzIE5VTEwgKi8KIAogLyogZm9yIFFVSVJLX0lHTk9SRV9JTlRFUkZBQ0UsIGRhdGEgaXMgTlVMTCAqLwogCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNicXVpcmtzLmggYi9zb3VuZC91c2IvdXNicXVpcmtzLmgKaW5kZXggZjA2ZmFmNy4uMmI0MjZjMSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYnF1aXJrcy5oCisrKyBiL3NvdW5kL3VzYi91c2JxdWlya3MuaApAQCAtMTAxNiwzNiArMTAxNiw2IEBACiAJfQogfSwKIHsKLQlVU0JfREVWSUNFKDB4MDU4MiwgMHgwMDQ0KSwKLQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJiAoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKLQkJLnZlbmRvcl9uYW1lID0gIlJvbGFuZCIsCi0JCS5wcm9kdWN0X25hbWUgPSAiVUEtMTAwMCIsCi0JCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCi0JCS50eXBlID0gUVVJUktfQ09NUE9TSVRFLAotCQkuZGF0YSA9IChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlya1tdKSB7Ci0JCQl7Ci0JCQkJLmlmbnVtID0gMSwKLQkJCQkudHlwZSA9IFFVSVJLX0FVRElPX0VESVJPTF9VQTEwMDAKLQkJCX0sCi0JCQl7Ci0JCQkJLmlmbnVtID0gMiwKLQkJCQkudHlwZSA9IFFVSVJLX0FVRElPX0VESVJPTF9VQTEwMDAKLQkJCX0sCi0JCQl7Ci0JCQkJLmlmbnVtID0gMywKLQkJCQkudHlwZSA9IFFVSVJLX01JRElfRklYRURfRU5EUE9JTlQsCi0JCQkJLmRhdGEgPSAmIChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9taWRpX2VuZHBvaW50X2luZm8pIHsKLQkJCQkJLm91dF9jYWJsZXMgPSAweDAwMDMsCi0JCQkJCS5pbl9jYWJsZXMgID0gMHgwMDAzCi0JCQkJfQotCQkJfSwKLQkJCXsKLQkJCQkuaWZudW0gPSAtMQotCQkJfQotCQl9Ci0JfQotfSwKLXsKIAkvKiBoYXMgSUQgMHgwMDQ5IHdoZW4gbm90IGluICJBZHZhbmNlZCBEcml2ZXIiIG1vZGUgKi8KIAlVU0JfREVWSUNFKDB4MDU4MiwgMHgwMDQ3KSwKIAkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJiAoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsK